ZGlmZiAtLWdpdCBhL1JFQURNRS5hbmRyb2lkIGIvUkVBRE1FLmFuZHJvaWQKaW5kZXggNzExMGQzZC4uMTAzNjgzOCAxMDA2NDQKLS0tIGEvUkVBRE1FLmFuZHJvaWQKKysrIGIvUkVBRE1FLmFuZHJvaWQKQEAgLTUxLDYgKzUxLDggQEAKIAogICAgICAoY2QgYW5kcm9pZC50ZXN0c3NsLyAmJiAuL3Rlc3Rzc2wuc2gpCiAgICAgIGFkYiBzaGVsbCBydW4tY29yZS10ZXN0cyB0ZXN0cy54bmV0LkFsbFRlc3RzCisgICAgIGFkYiBzaGVsbCBydW4tY29yZS10ZXN0cyBvcmcuYXBhY2hlLmhhcm1vbnkubWF0aC50ZXN0cy5qYXZhLm1hdGguQWxsVGVzdHMKKyAgICAgYWRiIHNoZWxsIHJ1bi1jb3JlLXRlc3RzIHRlc3RzLmFwaS5qYXZhLm1hdGguQmlnSW50ZWdlclRlc3QKIAogOCkgRG8gYSBmdWxsIGJ1aWxkIGJlZm9yZSBjaGVja2luZyBpbjoKIApkaWZmIC0tZ2l0IGEvYW5kcm9pZC1jb25maWcubWsgYi9hbmRyb2lkLWNvbmZpZy5tawppbmRleCAzNjcwNTkzLi5hMjhlMzVkIDEwMDY0NAotLS0gYS9hbmRyb2lkLWNvbmZpZy5taworKysgYi9hbmRyb2lkLWNvbmZpZy5tawpAQCAtMSwxNyArMSwxNCBAQAogIwotIyBUaGVzZSBmbGFncyByZXByZXNlbnQgdGhlIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBvZiBvcGVuc3NsIGZvcgotIyBhbmRyb2lkCisjIFRoZXNlIGZsYWdzIHJlcHJlc2VudCB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIG9mIG9wZW5zc2wgZm9yIGFuZHJvaWQKICMKLSMgVGhleSB3ZXJlIHBydW5lZCBmcm9tIHRoZSAiTWFrZWZpbGUiIGdlbmVyYXRlZCBieSBydW5uaW5nCi0jICIuL0NvbmZpZ3VyZSBsaW51eC1nZW5lcmljMzIgbm8taWRlYSBuby1iZiBuby1jYXN0IG5vLXNlZWQgbm8tbWQyIC1ETF9FTkRJQU4gemxpYiIKLSMgaW4gdGhlIG9wZW5zc2wgZGlzdHJpYnV0aW9uIGRpcmVjdG9yeQorIyBUaGV5IHdlcmUgcHJ1bmVkIGZyb20gdGhlICJNYWtlZmlsZSIgZ2VuZXJhdGVkIGJ5IHJ1bm5pbmcgLi9Db25maWd1cmUgZnJvbSBpbXBvcnRfb3BlbnNzbC5zaAogIwogCiAjIEZyb20gQ0xGQUc9CQogTE9DQUxfQ0ZMQUdTICs9IC1ET1BFTlNTTF9USFJFQURTIC1EX1JFRU5UUkFOVCAtRERTT19ETEZDTiAtREhBVkVfRExGQ05fSCAtRExfRU5ESUFOICMtRFRFUk1JTwogCiAjIEZyb20gREVQRkxBRz0KLUxPQ0FMX0NGTEFHUyArPSAtRE9QRU5TU0xfTk9fQkYgLURPUEVOU1NMX05PX0NBTUVMTElBIC1ET1BFTlNTTF9OT19DQVBJRU5HIC1ET1BFTlNTTF9OT19DQVNUIC1ET1BFTlNTTF9OT19DTVMgLURPUEVOU1NMX05PX0dNUCAtRE9QRU5TU0xfTk9fSURFQSAtRE9QRU5TU0xfTk9fSlBBS0UgLURPUEVOU1NMX05PX01EMiAtRE9QRU5TU0xfTk9fTURDMiAtRE9QRU5TU0xfTk9fUkM1IC1ET1BFTlNTTF9OT19SRkMzNzc5IC1ET1BFTlNTTF9OT19TRUVEIAorTE9DQUxfQ0ZMQUdTICs9IC1ET1BFTlNTTF9OT19CRiAtRE9QRU5TU0xfTk9fQ0FNRUxMSUEgLURPUEVOU1NMX05PX0NBUElFTkcgLURPUEVOU1NMX05PX0NBU1QgLURPUEVOU1NMX05PX0NNUyAtRE9QRU5TU0xfTk9fR01QIC1ET1BFTlNTTF9OT19JREVBIC1ET1BFTlNTTF9OT19KUEFLRSAtRE9QRU5TU0xfTk9fTUQyIC1ET1BFTlNTTF9OT19NREMyIC1ET1BFTlNTTF9OT19SQzUgLURPUEVOU1NMX05PX1JGQzM3NzkgLURPUEVOU1NMX05PX1NFRUQgLURPUEVOU1NMX05PX1NUT1JFIC1ET1BFTlNTTF9OT19XSElSTFBPT0wKIAogIyBFeHRyYQogTE9DQUxfQ0ZMQUdTICs9IC1ET1BFTlNTTF9OT19IVyAtRE9QRU5TU0xfTk9fRU5HSU5FIC1ET1BFTlNTTF9OT19FQyAtRE9QRU5TU0xfTk9fRUNESCAtRE9QRU5TU0xfTk9fRUNEU0EgLURaTElCCmRpZmYgLS1naXQgYS9hbmRyb2lkLnRlc3Rzc2wvQ0Fzcy5jbmYgYi9hbmRyb2lkLnRlc3Rzc2wvQ0Fzcy5jbmYKaW5kZXggYTc5NTljMC4uMTE3M2MwOCAxMDA2NDQKLS0tIGEvYW5kcm9pZC50ZXN0c3NsL0NBc3MuY25mCisrKyBiL2FuZHJvaWQudGVzdHNzbC9DQXNzLmNuZgpAQCAtNyw3ICs3LDcgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIFsgcmVxIF0KLWRlZmF1bHRfYml0cwkJPSAxMDI0CitkZWZhdWx0X2JpdHMJCT0gNTEyCiBkZWZhdWx0X2tleWZpbGUgCT0ga2V5U1MucGVtCiBkaXN0aW5ndWlzaGVkX25hbWUJPSByZXFfZGlzdGluZ3Vpc2hlZF9uYW1lCiBlbmNyeXB0X3JzYV9rZXkJCT0gbm8KZGlmZiAtLWdpdCBhL2FuZHJvaWQudGVzdHNzbC9Vc3MuY25mIGIvYW5kcm9pZC50ZXN0c3NsL1Vzcy5jbmYKaW5kZXggMTI0NGE1Ny4uNTZkY2RkNSAxMDA2NDQKLS0tIGEvYW5kcm9pZC50ZXN0c3NsL1Vzcy5jbmYKKysrIGIvYW5kcm9pZC50ZXN0c3NsL1Vzcy5jbmYKQEAgLTcsNyArNyw3IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiBbIHJlcSBdCi1kZWZhdWx0X2JpdHMJCT0gMTAyNAorZGVmYXVsdF9iaXRzCQk9IDUxMgogZGVmYXVsdF9rZXlmaWxlIAk9IGtleVNTLnBlbQogZGlzdGluZ3Vpc2hlZF9uYW1lCT0gcmVxX2Rpc3Rpbmd1aXNoZWRfbmFtZQogZW5jcnlwdF9yc2Ffa2V5CQk9IG5vCmRpZmYgLS1naXQgYS9hbmRyb2lkLnRlc3Rzc2wvdGVzdHNzbCBiL2FuZHJvaWQudGVzdHNzbC90ZXN0c3NsCmluZGV4IDA0OWZlMmYuLjQ2ZjQ1NzYgMTAwNzU1Ci0tLSBhL2FuZHJvaWQudGVzdHNzbC90ZXN0c3NsCisrKyBiL2FuZHJvaWQudGVzdHNzbC90ZXN0c3NsCkBAIC0xNTIsNCArMTUyLDEwIEBACiAgIGZpCiBmaQogCitlY2hvIHRlc3QgdGxzMSB3aXRoIFBTSworJHNzbHRlc3QgLXRsczEgLWNpcGhlciBQU0sgLXBzayBhYmMxMjMgJGV4dHJhIHx8IGV4aXQgMQorCitlY2hvIHRlc3QgdGxzMSB3aXRoIFBTSyB2aWEgQklPIHBhaXIKKyRzc2x0ZXN0IC1iaW9fcGFpciAtdGxzMSAtY2lwaGVyIFBTSyAtcHNrIGFiYzEyMyAkZXh0cmEgfHwgZXhpdCAxCisKIGV4aXQgMApkaWZmIC0tZ2l0IGEvYXBwcy9BbmRyb2lkLm1rIGIvYXBwcy9BbmRyb2lkLm1rCmluZGV4IGU5YTQ5ODEuLmE5MDg4MDYgMTAwNjQ0Ci0tLSBhL2FwcHMvQW5kcm9pZC5taworKysgYi9hcHBzL0FuZHJvaWQubWsKQEAgLTQsMTMgKzQsNDkgQEAKIGluY2x1ZGUgJChDTEVBUl9WQVJTKQogCiBMT0NBTF9TUkNfRklMRVM6PSBcCi0gICAgb3BlbnNzbC5jIHZlcmlmeS5jIGFzbjFwYXJzLmMgcmVxLmMgZGdzdC5jIGRoLmMgZW5jLmMgcGFzc3dkLmMgZ2VuZGguYyBlcnJzdHIuYyBjYS5jIFwKLSAgICBwa2NzNy5jIGNybDJwNy5jIGNybC5jIFwKLSAgICByc2EuYyByc2F1dGwuYyBkc2EuYyBkc2FwYXJhbS5jIGVjcGFyYW0uYyBcCi0gICAgeDUwOS5jIGdlbnJzYS5jIGdlbmRzYS5jIHNfY2xpZW50LmMgc3BlZWQuYyBcCi0gICAgc190aW1lLmMgIGFwcHMuYyBzX2NiLmMgc19zb2NrZXQuYyBhcHBfcmFuZC5jICB2ZXJzaW9uLmMgc2Vzc19pZC5jIFwKLSAgICBjaXBoZXJzLmMgbnNlcS5jIHBrY3MxMi5jIHBrY3M4LmMgc3BrYWMuYyBzbWltZS5jIHJhbmQuYyBlbmdpbmUuYyBcCi0gICAgb2NzcC5jIHByaW1lLmMgZGhwYXJhbS5jCisJYXBwX3JhbmQuYyBcCisJYXBwcy5jIFwKKwlhc24xcGFycy5jIFwKKwljYS5jIFwKKwljaXBoZXJzLmMgXAorCWNybC5jIFwKKwljcmwycDcuYyBcCisJZGdzdC5jIFwKKwlkaC5jIFwKKwlkaHBhcmFtLmMgXAorCWRzYS5jIFwKKwlkc2FwYXJhbS5jIFwKKwllY3BhcmFtLmMgXAorCWVuYy5jIFwKKwllbmdpbmUuYyBcCisJZXJyc3RyLmMgXAorCWdlbmRoLmMgXAorCWdlbmRzYS5jIFwKKwlnZW5wa2V5LmMgXAorCWdlbnJzYS5jIFwKKwluc2VxLmMgXAorCW9jc3AuYyBcCisJb3BlbnNzbC5jIFwKKwlwYXNzd2QuYyBcCisJcGtjczEyLmMgXAorCXBrY3M3LmMgXAorCXBrY3M4LmMgXAorCXByaW1lLmMgXAorCXJhbmQuYyBcCisJcmVxLmMgXAorCXJzYS5jIFwKKwlyc2F1dGwuYyBcCisJc19jYi5jIFwKKwlzX2NsaWVudC5jIFwKKwlzX3NvY2tldC5jIFwKKwlzX3RpbWUuYyBcCisJc2Vzc19pZC5jIFwKKwlzbWltZS5jIFwKKwlzcGVlZC5jIFwKKwlzcGthYy5jIFwKKwl2ZXJpZnkuYyBcCisJdmVyc2lvbi5jIFwKKwl4NTA5LmMKIAogIyAgIGNtcy5jIGVjLmMgc19zZXJ2ZXIuYwogCmRpZmYgLS1naXQgYS9hcHBzL01ha2VmaWxlIGIvYXBwcy9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTU0ODgxNS4uMDAwMDAwMAotLS0gYS9hcHBzL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsOTg1ICswLDAgQEAKLSMKLSMgIGFwcHMvTWFrZWZpbGUKLSMKLQotRElSPQkJYXBwcwotVE9QPQkJLi4KLUNDPQkJY2MKLUlOQ0xVREVTPQktSSQoVE9QKSAtSS4uL2luY2x1ZGUgJChLUkI1X0lOQ0xVREVTKQotQ0ZMQUc9CQktZyAtc3RhdGljCi1NQUtFRklMRT0JTWFrZWZpbGUKLVBFUkw9CQlwZXJsCi1STT0JCXJtIC1mCi0jIEtSQjUgc3R1ZmYKLUtSQjVfSU5DTFVERVM9Ci1MSUJLUkI1PQotCi1QRVhfTElCUz0KLUVYX0xJQlM9IAotRVhFX0VYVD0gCi0KLVNITElCX1RBUkdFVD0KLQotQ0ZMQUdTPSAtRE1PTk9MSVRIICQoSU5DTFVERVMpICQoQ0ZMQUcpCi0KLUdFTkVSQUw9TWFrZWZpbGUgbWFrZWFwcHMuY29tIGluc3RhbGwuY29tCi0KLURMSUJDUllQVE89Li4vbGliY3J5cHRvLmEKLURMSUJTU0w9Li4vbGlic3NsLmEKLUxJQkNSWVBUTz0tTC4uIC1sY3J5cHRvCi1MSUJTU0w9LUwuLiAtbHNzbAotCi1QUk9HUkFNPSBvcGVuc3NsCi0KLVNDUklQVFM9Q0Euc2ggQ0EucGwKLQotRVhFPSAkKFBST0dSQU0pJChFWEVfRVhUKQotCi1FX0VYRT0JdmVyaWZ5IGFzbjFwYXJzIHJlcSBkZ3N0IGRoIGRocGFyYW0gZW5jIHBhc3N3ZCBnZW5kaCBlcnJzdHIgXAotCWNhIGNybCByc2EgcnNhdXRsIGRzYSBkc2FwYXJhbSBlYyBlY3BhcmFtIFwKLQl4NTA5IGdlbnJzYSBnZW5kc2Egc19zZXJ2ZXIgc19jbGllbnQgc3BlZWQgXAotCXNfdGltZSB2ZXJzaW9uIHBrY3M3IGNtcyBjcmwycGtjczcgc2Vzc19pZCBjaXBoZXJzIG5zZXEgcGtjczEyIFwKLQlwa2NzOCBzcGthYyBzbWltZSByYW5kIGVuZ2luZSBvY3NwIHByaW1lCi0KLVBST0dTPSAkKFBST0dSQU0pLmMKLQotQV9PQko9YXBwcy5vCi1BX1NSQz1hcHBzLmMKLVNfT0JKPQlzX2NiLm8gc19zb2NrZXQubwotU19TUkM9CXNfY2IuYyBzX3NvY2tldC5jCi1SQU5EX09CSj1hcHBfcmFuZC5vCi1SQU5EX1NSQz1hcHBfcmFuZC5jCi0KLUVfT0JKPQl2ZXJpZnkubyBhc24xcGFycy5vIHJlcS5vIGRnc3QubyBkaC5vIGRocGFyYW0ubyBlbmMubyBwYXNzd2QubyBnZW5kaC5vIGVycnN0ci5vIFwKLQljYS5vIHBrY3M3Lm8gY3JsMnA3Lm8gY3JsLm8gXAotCXJzYS5vIHJzYXV0bC5vIGRzYS5vIGRzYXBhcmFtLm8gZWMubyBlY3BhcmFtLm8gXAotCXg1MDkubyBnZW5yc2EubyBnZW5kc2EubyBzX3NlcnZlci5vIHNfY2xpZW50Lm8gc3BlZWQubyBcCi0Jc190aW1lLm8gJChBX09CSikgJChTX09CSikgJChSQU5EX09CSikgdmVyc2lvbi5vIHNlc3NfaWQubyBcCi0JY2lwaGVycy5vIG5zZXEubyBwa2NzMTIubyBwa2NzOC5vIHNwa2FjLm8gc21pbWUubyByYW5kLm8gZW5naW5lLm8gXAotCW9jc3AubyBwcmltZS5vIGNtcy5vCi0KLUVfU1JDPQl2ZXJpZnkuYyBhc24xcGFycy5jIHJlcS5jIGRnc3QuYyBkaC5jIGVuYy5jIHBhc3N3ZC5jIGdlbmRoLmMgZXJyc3RyLmMgY2EuYyBcCi0JcGtjczcuYyBjcmwycDcuYyBjcmwuYyBcCi0JcnNhLmMgcnNhdXRsLmMgZHNhLmMgZHNhcGFyYW0uYyBlYy5jIGVjcGFyYW0uYyBcCi0JeDUwOS5jIGdlbnJzYS5jIGdlbmRzYS5jIHNfc2VydmVyLmMgc19jbGllbnQuYyBzcGVlZC5jIFwKLQlzX3RpbWUuYyAkKEFfU1JDKSAkKFNfU1JDKSAkKFJBTkRfU1JDKSB2ZXJzaW9uLmMgc2Vzc19pZC5jIFwKLQljaXBoZXJzLmMgbnNlcS5jIHBrY3MxMi5jIHBrY3M4LmMgc3BrYWMuYyBzbWltZS5jIHJhbmQuYyBlbmdpbmUuYyBcCi0Jb2NzcC5jIHByaW1lLmMgY21zLmMKLQotU1JDPSQoRV9TUkMpCi0KLUVYSEVBREVSPQotSEVBREVSPQlhcHBzLmggcHJvZ3MuaCBzX2FwcHMuaCBcCi0JdGVzdGRzYS5oIHRlc3Ryc2EuaCBcCi0JJChFWEhFQURFUikKLQotQUxMPSAgICAkKEdFTkVSQUwpICQoU1JDKSAkKEhFQURFUikKLQotdG9wOgotCUAoY2QgLi47ICQoTUFLRSkgRElSUz0kKERJUikgYWxsKQotCi1hbGw6CWV4ZQotCi1leGU6CSQoRVhFKQotCi1yZXE6IHNyZXEubyAkKEFfT0JKKSAkKERMSUJDUllQVE8pCi0Jc2hsaWJfdGFyZ2V0PTsgaWYgWyAtbiAiJChTSEFSRURfTElCUykiIF07IHRoZW4gXAotCQlzaGxpYl90YXJnZXQ9IiQoU0hMSUJfVEFSR0VUKSI7IFwKLQlmaTsgXAotCSQoTUFLRSkgLWYgJChUT1ApL01ha2VmaWxlLnNoYXJlZCAtZSBcCi0JCUFQUE5BTUU9cmVxIE9CSkVDVFM9InNyZXEubyAkKEFfT0JKKSAkKFJBTkRfT0JKKSIgXAotCQlMSUJERVBTPSIkKFBFWF9MSUJTKSAkKExJQkNSWVBUTykgJChFWF9MSUJTKSIgXAotCQlsaW5rX2FwcC4kJHtzaGxpYl90YXJnZXR9Ci0KLXNyZXEubzogcmVxLmMgCi0JJChDQykgLWMgJChJTkNMVURFUykgJChDRkxBRykgLW8gc3JlcS5vIHJlcS5jCi0KLWZpbGVzOgotCSQoUEVSTCkgJChUT1ApL3V0aWwvZmlsZXMucGwgTWFrZWZpbGUgPj4gJChUT1ApL01JTkZPCi0KLWluc3RhbGw6Ci0JQFsgLW4gIiQoSU5TVEFMTFRPUCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHRvcCBNYWtlZmlsZS4uLgotCUBzZXQgLWU7IGZvciBpIGluICQoRVhFKTsgXAotCWRvICBcCi0JKGVjaG8gaW5zdGFsbGluZyAkJGk7IFwKLQkgY3AgJCRpICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9iaW4vJCRpLm5ldzsgXAotCSBjaG1vZCA3NTUgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApL2Jpbi8kJGkubmV3OyBcCi0JIG12IC1mICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9iaW4vJCRpLm5ldyAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvYmluLyQkaSApOyBcCi0JIGRvbmU7Ci0JQHNldCAtZTsgZm9yIGkgaW4gJChTQ1JJUFRTKTsgXAotCWRvICBcCi0JKGVjaG8gaW5zdGFsbGluZyAkJGk7IFwKLQkgY3AgJCRpICQoSU5TVEFMTF9QUkVGSVgpJChPUEVOU1NMRElSKS9taXNjLyQkaS5uZXc7IFwKLQkgY2htb2QgNzU1ICQoSU5TVEFMTF9QUkVGSVgpJChPUEVOU1NMRElSKS9taXNjLyQkaS5uZXc7IFwKLQkgbXYgLWYgJChJTlNUQUxMX1BSRUZJWCkkKE9QRU5TU0xESVIpL21pc2MvJCRpLm5ldyAkKElOU1RBTExfUFJFRklYKSQoT1BFTlNTTERJUikvbWlzYy8kJGkgKTsgXAotCSBkb25lCi0JQGNwIG9wZW5zc2wuY25mICQoSU5TVEFMTF9QUkVGSVgpJChPUEVOU1NMRElSKS9vcGVuc3NsLmNuZi5uZXc7IFwKLQljaG1vZCA2NDQgJChJTlNUQUxMX1BSRUZJWCkkKE9QRU5TU0xESVIpL29wZW5zc2wuY25mLm5ldzsgXAotCW12IC1mICAkKElOU1RBTExfUFJFRklYKSQoT1BFTlNTTERJUikvb3BlbnNzbC5jbmYubmV3ICQoSU5TVEFMTF9QUkVGSVgpJChPUEVOU1NMRElSKS9vcGVuc3NsLmNuZgotCi10YWdzOgotCWN0YWdzICQoU1JDKQotCi10ZXN0czoKLQotbGlua3M6Ci0KLWxpbnQ6Ci0JbGludCAtRExJTlQgJChJTkNMVURFUykgJChTUkMpPmZsdWZmCi0KLWRlcGVuZDoKLQlAaWYgWyAteiAiJChUSElTKSIgXTsgdGhlbiBcCi0JICAgICQoTUFLRSkgLWYgJChUT1ApL01ha2VmaWxlIHJlZmxlY3QgVEhJUz0kQDsgXAotCWVsc2UgXAotCSAgICAkKE1BS0VERVBFTkQpIC0tICQoQ0ZMQUcpICQoSU5DTFVERVMpICQoREVQRkxBRykgLS0gJChQUk9HUykgJChTUkMpOyBcCi0JZmkKLQotZGNsZWFuOgotCSQoUEVSTCkgLXBlICdpZiAoL14jIERPIE5PVCBERUxFVEUgVEhJUyBMSU5FLykge3ByaW50OyBleGl0KDApO30nICQoTUFLRUZJTEUpID5NYWtlZmlsZS5uZXcKLQltdiAtZiBNYWtlZmlsZS5uZXcgJChNQUtFRklMRSkKLQotY2xlYW46Ci0Jcm0gLWYgKi5vICoub2JqIGxpYiB0YWdzIGNvcmUgLnB1cmUgLm5mcyogKi5vbGQgKi5iYWsgZmx1ZmYgJChFWEUpCi0Jcm0gLWYgcmVxCi0KLSQoRExJQlNTTCk6Ci0JKGNkIC4uOyAkKE1BS0UpIERJUlM9c3NsIGFsbCkKLQotJChETElCQ1JZUFRPKToKLQkoY2QgLi47ICQoTUFLRSkgRElSUz1jcnlwdG8gYWxsKQotCi0kKEVYRSk6IHByb2dzLmggJChFX09CSikgJChQUk9HUkFNKS5vICQoRExJQkNSWVBUTykgJChETElCU1NMKQotCSQoUk0pICQoRVhFKQotCXNobGliX3RhcmdldD07IGlmIFsgLW4gIiQoU0hBUkVEX0xJQlMpIiBdOyB0aGVuIFwKLQkJc2hsaWJfdGFyZ2V0PSIkKFNITElCX1RBUkdFVCkiOyBcCi0JZWxpZiBbIC1uICIkKEZJUFNDQU5MSUIpIiBdOyB0aGVuIFwKLQkgIEZJUFNMRF9DQz0iJChDQykiOyBDQz0kKFRPUCkvZmlwcy9maXBzbGQ7IGV4cG9ydCBDQyBGSVBTTERfQ0M7IFwKLQlmaTsgXAotCUxJQlJBUklFUz0iJChMSUJTU0wpICQoTElCS1JCNSkgJChMSUJDUllQVE8pIiA7IFwKLQlbICJ4JChGSVBTQ0FOTElCKSIgPSAieGxpYmZpcHMiIF0gJiYgTElCUkFSSUVTPSIkJExJQlJBUklFUyAtbGZpcHMiOyBcCi0JJChNQUtFKSAtZiAkKFRPUCkvTWFrZWZpbGUuc2hhcmVkIC1lIFwKLQkJQ0M9IiQke0NDfSIgQVBQTkFNRT0kKEVYRSkgT0JKRUNUUz0iJChQUk9HUkFNKS5vICQoRV9PQkopIiBcCi0JCUxJQkRFUFM9IiQoUEVYX0xJQlMpICQkTElCUkFSSUVTICQoRVhfTElCUykiIFwKLQkJbGlua19hcHAuJCR7c2hsaWJfdGFyZ2V0fQotCUBpZiBbIC16ICIkKENST1NTX0NPTVBJTEUpIiBdOyB0aGVuIFwKLQkJKGNkIC4uOyBcCi0JICAJT1BFTlNTTD0iYHB3ZGAvdXRpbC9vcGVuc3Nsd3JhcC5zaCI7IGV4cG9ydCBPUEVOU1NMOyBcCi0JICAJJChQRVJMKSB0b29scy9jX3JlaGFzaCBjZXJ0cykgXAotCWZpCi0KLXByb2dzLmg6IHByb2dzLnBsCi0JJChQRVJMKSBwcm9ncy5wbCAkKEVfRVhFKSA+cHJvZ3MuaAotCSQoUk0pICQoUFJPR1JBTSkubwotCi0jIERPIE5PVCBERUxFVEUgVEhJUyBMSU5FIC0tIG1ha2UgZGVwZW5kIGRlcGVuZHMgb24gaXQuCi0KLWFwcF9yYW5kLm86IC4uL2Vfb3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotYXBwX3JhbmQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jb25mLmgKLWFwcF9yYW5kLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotYXBwX3JhbmQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotYXBwX3JhbmQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oCi1hcHBfcmFuZC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotYXBwX3JhbmQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotYXBwX3JhbmQubzogLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi9pbmNsdWRlL29wZW5zc2wvb2NzcC5oCi1hcHBfcmFuZC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotYXBwX3JhbmQubzogLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLWFwcF9yYW5kLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1hcHBfcmFuZC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWFwcF9yYW5kLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC90eHRfZGIuaAotYXBwX3JhbmQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAotYXBwX3JhbmQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDl2My5oIGFwcF9yYW5kLmMgYXBwcy5oCi1hcHBzLm86IC4uL2Vfb3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotYXBwcy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLWFwcHMubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NvbmYuaCAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWFwcHMubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLWFwcHMubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotYXBwcy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZW5naW5lLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1hcHBzLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi1hcHBzLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLWFwcHMubzogLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi9pbmNsdWRlL29wZW5zc2wvb2NzcC5oCi1hcHBzLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi1hcHBzLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0uaAotYXBwcy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGVtMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzMTIuaAotYXBwcy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKLWFwcHMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotYXBwcy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotYXBwcy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvdHh0X2RiLmggLi4vaW5jbHVkZS9vcGVuc3NsL3VpLmgKLWFwcHMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAotYXBwcy5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOXYzLmggYXBwcy5jIGFwcHMuaAotYXNuMXBhcnMubzogLi4vZV9vcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1hc24xcGFycy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NvbmYuaAotYXNuMXBhcnMubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1hc24xcGFycy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi1hc24xcGFycy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvZW5naW5lLmgKLWFzbjFwYXJzLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLWFzbjFwYXJzLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLWFzbjFwYXJzLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotYXNuMXBhcnMubzogLi4vaW5jbHVkZS9vcGVuc3NsL29jc3AuaCAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotYXNuMXBhcnMubzogLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWFzbjFwYXJzLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0uaCAuLi9pbmNsdWRlL29wZW5zc2wvcGVtMi5oCi1hc24xcGFycy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLWFzbjFwYXJzLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotYXNuMXBhcnMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3R4dF9kYi5oCi1hc24xcGFycy5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oCi1hc24xcGFycy5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOXYzLmggYXBwcy5oIGFzbjFwYXJzLmMKLWNhLm86IC4uL2Vfb3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotY2EubzogLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1jYS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY29uZi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotY2EubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLWNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLWNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lbmdpbmUuaCAuLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi1jYS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi1jYS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vY3NwLmgKLWNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi1jYS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGVtLmgKLWNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLWNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLWNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1jYS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvdHh0X2RiLmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotY2EubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDl2My5oIGFwcHMuaCBjYS5jCi1jaXBoZXJzLm86IC4uL2Vfb3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotY2lwaGVycy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLWNpcGhlcnMubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaCAuLi9pbmNsdWRlL29wZW5zc2wvY29uZi5oCi1jaXBoZXJzLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi9pbmNsdWRlL29wZW5zc2wvZHRsczEuaAotY2lwaGVycy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotY2lwaGVycy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi1jaXBoZXJzLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lbmdpbmUuaCAuLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWNpcGhlcnMubzogLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLWNpcGhlcnMubzogLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaCAuLi9pbmNsdWRlL29wZW5zc2wva3NzbC5oCi1jaXBoZXJzLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLWNpcGhlcnMubzogLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi9pbmNsdWRlL29wZW5zc2wvb2NzcC5oCi1jaXBoZXJzLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi1jaXBoZXJzLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0uaAotY2lwaGVycy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGVtMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi1jaXBoZXJzLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcV9jb21wYXQuaCAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmgKLWNpcGhlcnMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotY2lwaGVycy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaAotY2lwaGVycy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oCi1jaXBoZXJzLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1jaXBoZXJzLm86IC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL3R4dF9kYi5oCi1jaXBoZXJzLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmgKLWNpcGhlcnMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDl2My5oIGFwcHMuaCBjaXBoZXJzLmMKLWNtcy5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWNtcy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NvbmYuaAotY21zLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotY21zLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKLWNtcy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvZW5naW5lLmgKLWNtcy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotY21zLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLWNtcy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vY3NwLmgKLWNtcy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotY21zLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi1jbXMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotY21zLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1jbXMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3R4dF9kYi5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLWNtcy5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOXYzLmggYXBwcy5oIGNtcy5jCi1jcmwubzogLi4vZV9vcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1jcmwubzogLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jb25mLmgKLWNybC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLWNybC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi1jcmwubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oCi1jcmwubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotY3JsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLWNybC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLWNybC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb2NzcC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1jcmwubzogLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWNybC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGVtLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaAotY3JsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotY3JsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotY3JsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC90eHRfZGIuaAotY3JsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmgKLWNybC5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOXYzLmggYXBwcy5oIGNybC5jCi1jcmwycDcubzogLi4vZV9vcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1jcmwycDcubzogLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jb25mLmgKLWNybDJwNy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLWNybDJwNy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi1jcmwycDcubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oCi1jcmwycDcubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotY3JsMnA3Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLWNybDJwNy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLWNybDJwNy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb2NzcC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1jcmwycDcubzogLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWNybDJwNy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGVtLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaAotY3JsMnA3Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotY3JsMnA3Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotY3JsMnA3Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC90eHRfZGIuaAotY3JsMnA3Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmgKLWNybDJwNy5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOXYzLmggYXBwcy5oIGNybDJwNy5jCi1kZ3N0Lm86IC4uL2Vfb3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotZGdzdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NvbmYuaAotZGdzdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLWRnc3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotZGdzdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvZW5naW5lLmgKLWRnc3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotZGdzdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgKLWRnc3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotZGdzdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vY3NwLmgKLWRnc3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLWRnc3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BlbS5oCi1kZ3N0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLWRnc3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotZGdzdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotZGdzdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvdHh0X2RiLmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotZGdzdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOXYzLmggYXBwcy5oIGRnc3QuYwotZGgubzogLi4vZV9vcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1kaC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLWRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jb25mLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1kaC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZGguaCAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotZGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotZGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oCi1kaC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1kaC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1kaC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLWRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vY3NwLmggLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1kaC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGVtLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaAotZGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1kaC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC90eHRfZGIuaAotZGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAotZGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDl2My5oIGFwcHMuaCBkaC5jCi1kc2EubzogLi4vZV9vcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1kc2EubzogLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1kc2EubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NvbmYuaCAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWRzYS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZHNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLWRzYS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi1kc2EubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oCi1kc2EubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotZHNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLWRzYS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLWRzYS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb2NzcC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1kc2EubzogLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWRzYS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGVtLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaAotZHNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotZHNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotZHNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC90eHRfZGIuaAotZHNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmgKLWRzYS5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOXYzLmggYXBwcy5oIGRzYS5jCi1kc2FwYXJhbS5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWRzYXBhcmFtLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotZHNhcGFyYW0ubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NvbmYuaCAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWRzYXBhcmFtLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9kaC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaAotZHNhcGFyYW0ubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLWRzYXBhcmFtLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLWRzYXBhcmFtLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lbmdpbmUuaCAuLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWRzYXBhcmFtLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi1kc2FwYXJhbS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi1kc2FwYXJhbS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vY3NwLmgKLWRzYXBhcmFtLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi1kc2FwYXJhbS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGVtLmgKLWRzYXBhcmFtLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLWRzYXBhcmFtLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmggLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCi1kc2FwYXJhbS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCi1kc2FwYXJhbS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc3RvcmUuaAotZHNhcGFyYW0ubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3R4dF9kYi5oCi1kc2FwYXJhbS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvdWkuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi1kc2FwYXJhbS5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOXYzLmggYXBwcy5oCi1kc2FwYXJhbS5vOiBkc2FwYXJhbS5jCi1lYy5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWVjLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi9pbmNsdWRlL29wZW5zc2wvY29uZi5oCi1lYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLWVjLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKLWVjLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lbmdpbmUuaAotZWMubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotZWMubzogLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotZWMubzogLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi1lYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb2NzcC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1lYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotZWMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmgKLWVjLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotZWMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1lYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvdHh0X2RiLmgKLWVjLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmgKLWVjLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5djMuaCBhcHBzLmggZWMuYwotZWNwYXJhbS5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWVjcGFyYW0ubzogLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1lY3BhcmFtLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jb25mLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1lY3BhcmFtLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1lY3BhcmFtLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLWVjcGFyYW0ubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotZWNwYXJhbS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotZWNwYXJhbS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi1lY3BhcmFtLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vaW5jbHVkZS9vcGVuc3NsL29jc3AuaAotZWNwYXJhbS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotZWNwYXJhbS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGVtLmgKLWVjcGFyYW0ubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAotZWNwYXJhbS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCi1lY3BhcmFtLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1lY3BhcmFtLm86IC4uL2luY2x1ZGUvb3BlbnNzbC90eHRfZGIuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi1lY3BhcmFtLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5djMuaCBhcHBzLmgKLWVjcGFyYW0ubzogZWNwYXJhbS5jCi1lbmMubzogLi4vZV9vcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jb25mLmgKLWVuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLWVuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi1lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oCi1lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLWVuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLWVuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb2NzcC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWVuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGVtLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaAotZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKLWVuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCi1lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLWVuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvdHh0X2RiLmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5djMuaCBhcHBzLmggZW5jLmMKLWVuZ2luZS5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWVuZ2luZS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLWVuZ2luZS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jb25mLmgKLWVuZ2luZS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2R0bHMxLmgKLWVuZ2luZS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotZW5naW5lLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLWVuZ2luZS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZW5naW5lLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1lbmdpbmUubzogLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLWVuZ2luZS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9rc3NsLmgKLWVuZ2luZS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi1lbmdpbmUubzogLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi9pbmNsdWRlL29wZW5zc2wvb2NzcC5oCi1lbmdpbmUubzogLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLWVuZ2luZS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGVtLmgKLWVuZ2luZS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGVtMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi1lbmdpbmUubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BxX2NvbXBhdC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaAotZW5naW5lLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLWVuZ2luZS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaAotZW5naW5lLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmgKLWVuZ2luZS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotZW5naW5lLm86IC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL3R4dF9kYi5oCi1lbmdpbmUubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAotZW5naW5lLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5djMuaCBhcHBzLmggZW5naW5lLmMKLWVycnN0ci5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWVycnN0ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLWVycnN0ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jb25mLmgKLWVycnN0ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2R0bHMxLmgKLWVycnN0ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotZXJyc3RyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLWVycnN0ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZW5naW5lLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1lcnJzdHIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLWVycnN0ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9rc3NsLmgKLWVycnN0ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi1lcnJzdHIubzogLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi9pbmNsdWRlL29wZW5zc2wvb2NzcC5oCi1lcnJzdHIubzogLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLWVycnN0ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGVtLmgKLWVycnN0ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGVtMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi1lcnJzdHIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BxX2NvbXBhdC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaAotZXJyc3RyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLWVycnN0ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaAotZXJyc3RyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmgKLWVycnN0ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotZXJyc3RyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL3R4dF9kYi5oCi1lcnJzdHIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAotZXJyc3RyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5djMuaCBhcHBzLmggZXJyc3RyLmMKLWdlbmRoLm86IC4uL2Vfb3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotZ2VuZGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1nZW5kaC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY29uZi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotZ2VuZGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2RoLmggLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oCi1nZW5kaC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotZ2VuZGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotZ2VuZGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotZ2VuZGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLWdlbmRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLWdlbmRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vaW5jbHVkZS9vcGVuc3NsL29jc3AuaAotZ2VuZGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLWdlbmRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0uaAotZ2VuZGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAotZ2VuZGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaCAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKLWdlbmRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLWdlbmRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zdG9yZS5oCi1nZW5kaC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvdHh0X2RiLmgKLWdlbmRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC91aS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLWdlbmRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5djMuaCBhcHBzLmgKLWdlbmRoLm86IGdlbmRoLmMKLWdlbmRzYS5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWdlbmRzYS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLWdlbmRzYS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY29uZi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotZ2VuZHNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotZ2VuZHNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKLWdlbmRzYS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvZW5naW5lLmgKLWdlbmRzYS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1nZW5kc2EubzogLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotZ2VuZHNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotZ2VuZHNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vY3NwLmggLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWdlbmRzYS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotZ2VuZHNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0uaCAuLi9pbmNsdWRlL29wZW5zc2wvcGVtMi5oCi1nZW5kc2EubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1nZW5kc2EubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1nZW5kc2EubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3R4dF9kYi5oCi1nZW5kc2EubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAotZ2VuZHNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5djMuaCBhcHBzLmggZ2VuZHNhLmMKLWdlbnJzYS5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWdlbnJzYS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLWdlbnJzYS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY29uZi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotZ2VucnNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9kaC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaAotZ2VucnNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1nZW5yc2EubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotZ2VucnNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lbmdpbmUuaCAuLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWdlbnJzYS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotZ2VucnNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLWdlbnJzYS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vY3NwLmgKLWdlbnJzYS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotZ2VucnNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0uaAotZ2VucnNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLWdlbnJzYS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAotZ2VucnNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLWdlbnJzYS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc3RvcmUuaAotZ2VucnNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC90eHRfZGIuaAotZ2VucnNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC91aS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLWdlbnJzYS5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOXYzLmggYXBwcy5oCi1nZW5yc2EubzogZ2VucnNhLmMKLW5zZXEubzogLi4vZV9vcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1uc2VxLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi9pbmNsdWRlL29wZW5zc2wvY29uZi5oCi1uc2VxLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotbnNlcS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi1uc2VxLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lbmdpbmUuaAotbnNlcS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1uc2VxLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLW5zZXEubzogLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi1uc2VxLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vY3NwLmggLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLW5zZXEubzogLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLW5zZXEubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmgKLW5zZXEubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1uc2VxLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotbnNlcS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvdHh0X2RiLmgKLW5zZXEubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAotbnNlcS5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOXYzLmggYXBwcy5oIG5zZXEuYwotb2NzcC5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLW9jc3AubzogLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1vY3NwLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jb21wLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NvbmYuaAotb2NzcC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2R0bHMxLmgKLW9jc3AubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLW9jc3AubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotb2NzcC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZW5naW5lLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1vY3NwLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi1vY3NwLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmggLi4vaW5jbHVkZS9vcGVuc3NsL2tzc2wuaAotb2NzcC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi1vY3NwLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vaW5jbHVkZS9vcGVuc3NsL29jc3AuaAotb2NzcC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotb2NzcC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGVtLmgKLW9jc3AubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAotb2NzcC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcHFfY29tcGF0LmggLi4vaW5jbHVkZS9vcGVuc3NsL3BxdWV1ZS5oCi1vY3NwLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLW9jc3AubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmgKLW9jc3AubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDMuaAotb2NzcC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotb2NzcC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC90eHRfZGIuaAotb2NzcC5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oCi1vY3NwLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5djMuaCBhcHBzLmggb2NzcC5jCi1vcGVuc3NsLm86IC4uL2Vfb3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotb3BlbnNzbC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLW9wZW5zc2wubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaCAuLi9pbmNsdWRlL29wZW5zc2wvY29uZi5oCi1vcGVuc3NsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi9pbmNsdWRlL29wZW5zc2wvZHRsczEuaAotb3BlbnNzbC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotb3BlbnNzbC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi1vcGVuc3NsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lbmdpbmUuaCAuLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLW9wZW5zc2wubzogLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLW9wZW5zc2wubzogLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaCAuLi9pbmNsdWRlL29wZW5zc2wva3NzbC5oCi1vcGVuc3NsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLW9wZW5zc2wubzogLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi9pbmNsdWRlL29wZW5zc2wvb2NzcC5oCi1vcGVuc3NsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi1vcGVuc3NsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0uaAotb3BlbnNzbC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGVtMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi1vcGVuc3NsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcV9jb21wYXQuaCAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmgKLW9wZW5zc2wubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotb3BlbnNzbC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaAotb3BlbnNzbC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oCi1vcGVuc3NsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1vcGVuc3NsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL3R4dF9kYi5oCi1vcGVuc3NsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmgKLW9wZW5zc2wubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDl2My5oIGFwcHMuaCBvcGVuc3NsLmMgcHJvZ3MuaCBzX2FwcHMuaAotcGFzc3dkLm86IC4uL2Vfb3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotcGFzc3dkLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi9pbmNsdWRlL29wZW5zc2wvY29uZi5oCi1wYXNzd2QubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uL2luY2x1ZGUvb3BlbnNzbC9kZXMuaAotcGFzc3dkLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9kZXNfb2xkLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLXBhc3N3ZC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi1wYXNzd2QubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oCi1wYXNzd2QubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotcGFzc3dkLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLXBhc3N3ZC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvbWQ1LmggLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotcGFzc3dkLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vaW5jbHVkZS9vcGVuc3NsL29jc3AuaAotcGFzc3dkLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi1wYXNzd2QubzogLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLXBhc3N3ZC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotcGFzc3dkLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotcGFzc3dkLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC90eHRfZGIuaAotcGFzc3dkLm86IC4uL2luY2x1ZGUvb3BlbnNzbC91aS5oIC4uL2luY2x1ZGUvb3BlbnNzbC91aV9jb21wYXQuaAotcGFzc3dkLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmgKLXBhc3N3ZC5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOXYzLmggYXBwcy5oIHBhc3N3ZC5jCi1wa2NzMTIubzogLi4vZV9vcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1wa2NzMTIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jb25mLmgKLXBrY3MxMi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLXBrY3MxMi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi1wa2NzMTIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oCi1wa2NzMTIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotcGtjczEyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLXBrY3MxMi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLXBrY3MxMi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb2NzcC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1wa2NzMTIubzogLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXBrY3MxMi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGVtLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaAotcGtjczEyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzMTIuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAotcGtjczEyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLXBrY3MxMi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotcGtjczEyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC90eHRfZGIuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi1wa2NzMTIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDl2My5oIGFwcHMuaAotcGtjczEyLm86IHBrY3MxMi5jCi1wa2NzNy5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXBrY3M3Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi9pbmNsdWRlL29wZW5zc2wvY29uZi5oCi1wa2NzNy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLXBrY3M3Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKLXBrY3M3Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lbmdpbmUuaAotcGtjczcubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotcGtjczcubzogLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotcGtjczcubzogLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi1wa2NzNy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb2NzcC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1wa2NzNy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotcGtjczcubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmgKLXBrY3M3Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotcGtjczcubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1wa2NzNy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvdHh0X2RiLmgKLXBrY3M3Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmgKLXBrY3M3Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5djMuaCBhcHBzLmggcGtjczcuYwotcGtjczgubzogLi4vZV9vcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1wa2NzOC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NvbmYuaAotcGtjczgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1wa2NzOC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi1wa2NzOC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvZW5naW5lLmgKLXBrY3M4Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLXBrY3M4Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLXBrY3M4Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotcGtjczgubzogLi4vaW5jbHVkZS9vcGVuc3NsL29jc3AuaCAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotcGtjczgubzogLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXBrY3M4Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0uaCAuLi9pbmNsdWRlL29wZW5zc2wvcGVtMi5oCi1wa2NzOC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczEyLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLXBrY3M4Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLXBrY3M4Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1wa2NzOC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvdHh0X2RiLmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotcGtjczgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDl2My5oIGFwcHMuaAotcGtjczgubzogcGtjczguYwotcHJpbWUubzogLi4vZV9vcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1wcmltZS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXByaW1lLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jb25mLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1wcmltZS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotcHJpbWUubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotcHJpbWUubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotcHJpbWUubzogLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotcHJpbWUubzogLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi1wcmltZS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb2NzcC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1wcmltZS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotcHJpbWUubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1wcmltZS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLXByaW1lLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC90eHRfZGIuaAotcHJpbWUubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAotcHJpbWUubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDl2My5oIGFwcHMuaCBwcmltZS5jCi1yYW5kLm86IC4uL2Vfb3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotcmFuZC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NvbmYuaAotcmFuZC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLXJhbmQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotcmFuZC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvZW5naW5lLmgKLXJhbmQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotcmFuZC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1yYW5kLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotcmFuZC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb2NzcC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1yYW5kLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1yYW5kLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKLXJhbmQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotcmFuZC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotcmFuZC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvdHh0X2RiLmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotcmFuZC5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOXYzLmggYXBwcy5oIHJhbmQuYwotcmVxLm86IC4uL2Vfb3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotcmVxLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotcmVxLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jb25mLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1yZXEubzogLi4vaW5jbHVkZS9vcGVuc3NsL2RoLmggLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oCi1yZXEubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLXJlcS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi1yZXEubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotcmVxLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi1yZXEubzogLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotcmVxLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vaW5jbHVkZS9vcGVuc3NsL29jc3AuaAotcmVxLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi1yZXEubzogLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BlbS5oCi1yZXEubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAotcmVxLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmggLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCi1yZXEubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotcmVxLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zdG9yZS5oCi1yZXEubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3R4dF9kYi5oCi1yZXEubzogLi4vaW5jbHVkZS9vcGVuc3NsL3VpLmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotcmVxLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5djMuaCBhcHBzLmggcmVxLmMKLXJzYS5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXJzYS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXJzYS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY29uZi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotcnNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1yc2EubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotcnNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lbmdpbmUuaCAuLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLXJzYS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotcnNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLXJzYS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vY3NwLmgKLXJzYS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotcnNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0uaAotcnNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLXJzYS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1yc2EubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1yc2EubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3R4dF9kYi5oCi1yc2EubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAotcnNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5djMuaCBhcHBzLmggcnNhLmMKLXJzYXV0bC5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXJzYXV0bC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NvbmYuaAotcnNhdXRsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotcnNhdXRsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKLXJzYXV0bC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvZW5naW5lLmgKLXJzYXV0bC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1yc2F1dGwubzogLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotcnNhdXRsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotcnNhdXRsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vY3NwLmggLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXJzYXV0bC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotcnNhdXRsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0uaCAuLi9pbmNsdWRlL29wZW5zc2wvcGVtMi5oCi1yc2F1dGwubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCi1yc2F1dGwubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotcnNhdXRsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1yc2F1dGwubzogLi4vaW5jbHVkZS9vcGVuc3NsL3R4dF9kYi5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLXJzYXV0bC5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOXYzLmggYXBwcy5oCi1yc2F1dGwubzogcnNhdXRsLmMKLXNfY2IubzogLi4vZV9vcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1zX2NiLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotc19jYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jb25mLmgKLXNfY2IubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uL2luY2x1ZGUvb3BlbnNzbC9kdGxzMS5oCi1zX2NiLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1zX2NiLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLXNfY2IubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotc19jYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotc19jYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9rc3NsLmgKLXNfY2IubzogLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotc19jYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vY3NwLmgKLXNfY2IubzogLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLXNfY2IubzogLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BlbS5oCi1zX2NiLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLXNfY2IubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BxX2NvbXBhdC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaAotc19jYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotc19jYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oCi1zX2NiLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmgKLXNfY2IubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotc19jYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oCi1zX2NiLm86IC4uL2luY2x1ZGUvb3BlbnNzbC90eHRfZGIuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi1zX2NiLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5djMuaCBhcHBzLmgKLXNfY2Iubzogc19hcHBzLmggc19jYi5jCi1zX2NsaWVudC5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXNfY2xpZW50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotc19jbGllbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaCAuLi9pbmNsdWRlL29wZW5zc2wvY29uZi5oCi1zX2NsaWVudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2R0bHMxLmgKLXNfY2xpZW50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1zX2NsaWVudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi1zX2NsaWVudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZW5naW5lLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1zX2NsaWVudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotc19jbGllbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaCAuLi9pbmNsdWRlL29wZW5zc2wva3NzbC5oCi1zX2NsaWVudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi1zX2NsaWVudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vY3NwLmgKLXNfY2xpZW50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi1zX2NsaWVudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGVtLmgKLXNfY2xpZW50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLXNfY2xpZW50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcV9jb21wYXQuaCAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmgKLXNfY2xpZW50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1zX2NsaWVudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oCi1zX2NsaWVudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oCi1zX2NsaWVudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1zX2NsaWVudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oCi1zX2NsaWVudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvdHh0X2RiLmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotc19jbGllbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDl2My5oIGFwcHMuaAotc19jbGllbnQubzogc19hcHBzLmggc19jbGllbnQuYyB0aW1lb3V0cy5oCi1zX3NlcnZlci5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXNfc2VydmVyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotc19zZXJ2ZXIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaCAuLi9pbmNsdWRlL29wZW5zc2wvY29uZi5oCi1zX3NlcnZlci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2RoLmgKLXNfc2VydmVyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvZHRsczEuaAotc19zZXJ2ZXIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLXNfc2VydmVyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLXNfc2VydmVyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lbmdpbmUuaCAuLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLXNfc2VydmVyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi1zX3NlcnZlci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9rc3NsLmgKLXNfc2VydmVyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLXNfc2VydmVyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vaW5jbHVkZS9vcGVuc3NsL29jc3AuaAotc19zZXJ2ZXIubzogLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLXNfc2VydmVyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0uaAotc19zZXJ2ZXIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAotc19zZXJ2ZXIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BxX2NvbXBhdC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaAotc19zZXJ2ZXIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaCAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKLXNfc2VydmVyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLXNfc2VydmVyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oCi1zX3NlcnZlci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oCi1zX3NlcnZlci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc3RvcmUuaAotc19zZXJ2ZXIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaAotc19zZXJ2ZXIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3R4dF9kYi5oIC4uL2luY2x1ZGUvb3BlbnNzbC91aS5oCi1zX3NlcnZlci5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oCi1zX3NlcnZlci5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOXYzLmggYXBwcy5oIHNfYXBwcy5oIHNfc2VydmVyLmMgdGltZW91dHMuaAotc19zb2NrZXQubzogLi4vZV9vcy5oIC4uL2Vfb3MyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotc19zb2NrZXQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oCi1zX3NvY2tldC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaAotc19zb2NrZXQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NvbmYuaCAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLXNfc29ja2V0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9kdGxzMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1zX3NvY2tldC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi1zX3NvY2tldC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvZW5naW5lLmgKLXNfc29ja2V0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi1zX3NvY2tldC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9rc3NsLmgKLXNfc29ja2V0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLXNfc29ja2V0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vaW5jbHVkZS9vcGVuc3NsL29jc3AuaAotc19zb2NrZXQubzogLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLXNfc29ja2V0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0uaAotc19zb2NrZXQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAotc19zb2NrZXQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BxX2NvbXBhdC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaAotc19zb2NrZXQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotc19zb2NrZXQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmgKLXNfc29ja2V0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmgKLXNfc29ja2V0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1zX3NvY2tldC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC90eHRfZGIuaAotc19zb2NrZXQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAotc19zb2NrZXQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDl2My5oIGFwcHMuaCBzX2FwcHMuaCBzX3NvY2tldC5jCi1zX3RpbWUubzogLi4vZV9vcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1zX3RpbWUubzogLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1zX3RpbWUubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaCAuLi9pbmNsdWRlL29wZW5zc2wvY29uZi5oCi1zX3RpbWUubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uL2luY2x1ZGUvb3BlbnNzbC9kdGxzMS5oCi1zX3RpbWUubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLXNfdGltZS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi1zX3RpbWUubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotc190aW1lLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi1zX3RpbWUubzogLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaCAuLi9pbmNsdWRlL29wZW5zc2wva3NzbC5oCi1zX3RpbWUubzogLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotc190aW1lLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vaW5jbHVkZS9vcGVuc3NsL29jc3AuaAotc190aW1lLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi1zX3RpbWUubzogLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BlbS5oCi1zX3RpbWUubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAotc190aW1lLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcV9jb21wYXQuaCAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmgKLXNfdGltZS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCi1zX3RpbWUubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmgKLXNfdGltZS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oCi1zX3RpbWUubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLXNfdGltZS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC90eHRfZGIuaAotc190aW1lLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmgKLXNfdGltZS5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOXYzLmggYXBwcy5oIHNfYXBwcy5oIHNfdGltZS5jCi1zZXNzX2lkLm86IC4uL2Vfb3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotc2Vzc19pZC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXNlc3NfaWQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaCAuLi9pbmNsdWRlL29wZW5zc2wvY29uZi5oCi1zZXNzX2lkLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi9pbmNsdWRlL29wZW5zc2wvZHRsczEuaAotc2Vzc19pZC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotc2Vzc19pZC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi1zZXNzX2lkLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lbmdpbmUuaCAuLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLXNlc3NfaWQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLXNlc3NfaWQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaCAuLi9pbmNsdWRlL29wZW5zc2wva3NzbC5oCi1zZXNzX2lkLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLXNlc3NfaWQubzogLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi9pbmNsdWRlL29wZW5zc2wvb2NzcC5oCi1zZXNzX2lkLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi1zZXNzX2lkLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0uaAotc2Vzc19pZC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGVtMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi1zZXNzX2lkLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcV9jb21wYXQuaCAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmgKLXNlc3NfaWQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotc2Vzc19pZC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaAotc2Vzc19pZC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oCi1zZXNzX2lkLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1zZXNzX2lkLm86IC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL3R4dF9kYi5oCi1zZXNzX2lkLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmgKLXNlc3NfaWQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDl2My5oIGFwcHMuaCBzZXNzX2lkLmMKLXNtaW1lLm86IC4uL2Vfb3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotc21pbWUubzogLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jb25mLmgKLXNtaW1lLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotc21pbWUubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotc21pbWUubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oCi1zbWltZS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1zbWltZS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1zbWltZS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLXNtaW1lLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vY3NwLmggLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXNtaW1lLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1zbWltZS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGVtLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaAotc21pbWUubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1zbWltZS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLXNtaW1lLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC90eHRfZGIuaAotc21pbWUubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAotc21pbWUubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDl2My5oIGFwcHMuaCBzbWltZS5jCi1zcGVlZC5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLXNwZWVkLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi9pbmNsdWRlL29wZW5zc2wvYmxvd2Zpc2guaAotc3BlZWQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1zcGVlZC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY2FzdC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jb25mLmgKLXNwZWVkLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi9pbmNsdWRlL29wZW5zc2wvZGVzLmgKLXNwZWVkLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9kZXNfb2xkLmggLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oCi1zcGVlZC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotc3BlZWQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotc3BlZWQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotc3BlZWQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLXNwZWVkLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmggLi4vaW5jbHVkZS9vcGVuc3NsL2lkZWEuaAotc3BlZWQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vaW5jbHVkZS9vcGVuc3NsL21kMi5oCi1zcGVlZC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvbWQ0LmggLi4vaW5jbHVkZS9vcGVuc3NsL21kNS5oCi1zcGVlZC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLXNwZWVkLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vY3NwLmggLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXNwZWVkLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1zcGVlZC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCi1zcGVlZC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcmMyLmggLi4vaW5jbHVkZS9vcGVuc3NsL3JjNC5oCi1zcGVlZC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcmlwZW1kLmggLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCi1zcGVlZC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCi1zcGVlZC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotc3BlZWQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3R4dF9kYi5oIC4uL2luY2x1ZGUvb3BlbnNzbC91aS5oCi1zcGVlZC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvdWlfY29tcGF0LmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotc3BlZWQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDl2My5oIGFwcHMuaAotc3BlZWQubzogc3BlZWQuYyB0ZXN0ZHNhLmggdGVzdHJzYS5oCi1zcGthYy5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXNwa2FjLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi9pbmNsdWRlL29wZW5zc2wvY29uZi5oCi1zcGthYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLXNwa2FjLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKLXNwa2FjLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lbmdpbmUuaAotc3BrYWMubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotc3BrYWMubzogLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotc3BrYWMubzogLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi1zcGthYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb2NzcC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1zcGthYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotc3BrYWMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmgKLXNwa2FjLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotc3BrYWMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1zcGthYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvdHh0X2RiLmgKLXNwa2FjLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmgKLXNwa2FjLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5djMuaCBhcHBzLmggc3BrYWMuYwotdmVyaWZ5Lm86IC4uL2Vfb3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotdmVyaWZ5Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi9pbmNsdWRlL29wZW5zc2wvY29uZi5oCi12ZXJpZnkubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi12ZXJpZnkubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotdmVyaWZ5Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lbmdpbmUuaAotdmVyaWZ5Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLXZlcmlmeS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi12ZXJpZnkubzogLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi12ZXJpZnkubzogLi4vaW5jbHVkZS9vcGVuc3NsL29jc3AuaCAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotdmVyaWZ5Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi12ZXJpZnkubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmgKLXZlcmlmeS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLXZlcmlmeS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLXZlcmlmeS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvdHh0X2RiLmgKLXZlcmlmeS5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oCi12ZXJpZnkubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDl2My5oIGFwcHMuaCB2ZXJpZnkuYwotdmVyc2lvbi5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXZlcnNpb24ubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Jsb3dmaXNoLmggLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmgKLXZlcnNpb24ubzogLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jb25mLmgKLXZlcnNpb24ubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uL2luY2x1ZGUvb3BlbnNzbC9kZXMuaAotdmVyc2lvbi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZGVzX29sZC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi12ZXJzaW9uLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKLXZlcnNpb24ubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oCi12ZXJzaW9uLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi12ZXJzaW9uLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9pZGVhLmggLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLXZlcnNpb24ubzogLi4vaW5jbHVkZS9vcGVuc3NsL21kMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLXZlcnNpb24ubzogLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi9pbmNsdWRlL29wZW5zc2wvb2NzcC5oCi12ZXJzaW9uLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi12ZXJzaW9uLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi12ZXJzaW9uLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9yYzQuaCAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLXZlcnNpb24ubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi12ZXJzaW9uLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC90eHRfZGIuaAotdmVyc2lvbi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvdWkuaCAuLi9pbmNsdWRlL29wZW5zc2wvdWlfY29tcGF0LmgKLXZlcnNpb24ubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAotdmVyc2lvbi5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOXYzLmggYXBwcy5oIHZlcnNpb24uYwoteDUwOS5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXg1MDkubzogLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi14NTA5Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jb25mLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi14NTA5Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAoteDUwOS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi14NTA5Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lbmdpbmUuaAoteDUwOS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi14NTA5Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLXg1MDkubzogLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi14NTA5Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vY3NwLmggLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXg1MDkubzogLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXg1MDkubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmgKLXg1MDkubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCi14NTA5Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLXg1MDkubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLXg1MDkubzogLi4vaW5jbHVkZS9vcGVuc3NsL3R4dF9kYi5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLXg1MDkubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDl2My5oIGFwcHMuaCB4NTA5LmMKZGlmZiAtLWdpdCBhL2FwcHMvYXBwcy5jIGIvYXBwcy9hcHBzLmMKaW5kZXggMzViNjJiOC4uNWRjY2VhNyAxMDA2NDQKLS0tIGEvYXBwcy9hcHBzLmMKKysrIGIvYXBwcy9hcHBzLmMKQEAgLTEwOSwxMiArMTA5LDIxIEBACiAgKgogICovCiAKKyNpZm5kZWYgX1BPU0lYX0NfU09VUkNFCisjZGVmaW5lIF9QT1NJWF9DX1NPVVJDRSAyCS8qIE9uIFZNUywgeW91IG5lZWQgdG8gZGVmaW5lIHRoaXMgdG8gZ2V0CisJCQkJICAgdGhlIGRlY2xhcmF0aW9uIG9mIGZpbGVubygpLiAgVGhlIHZhbHVlCisJCQkJICAgMiBpcyB0byBtYWtlIHN1cmUgbm8gZnVuY3Rpb24gZGVmaW5lZAorCQkJCSAgIGluIFBPU0lYLTIgaXMgbGVmdCB1bmRlZmluZWQuICovCisjZW5kaWYKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgorI2lmICFkZWZpbmVkKE9QRU5TU0xfU1lTTkFNRV9XSU4zMikgJiYgIWRlZmluZWQoTkVUV0FSRV9DTElCKQorI2luY2x1ZGUgPHN0cmluZ3MuaD4KKyNlbmRpZgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPGFzc2VydC5oPgogI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+CkBAIC0xMzgsNiArMTQ3LDExIEBACiAjaW5jbHVkZSAiYXBwcy5oIgogI3VuZGVmIE5PTl9NQUlOCiAKKyNpZmRlZiBfV0lOMzIKK3N0YXRpYyBpbnQgV0lOMzJfcmVuYW1lKGNvbnN0IGNoYXIgKmZyb20sIGNvbnN0IGNoYXIgKnRvKTsKKyNkZWZpbmUgcmVuYW1lKGZyb20sdG8pIFdJTjMyX3JlbmFtZSgoZnJvbSksKHRvKSkKKyNlbmRpZgorCiB0eXBlZGVmIHN0cnVjdCB7CiAJY29uc3QgY2hhciAqbmFtZTsKIAl1bnNpZ25lZCBsb25nIGZsYWc7CkBAIC0xNjYsMTggKzE4MCwyMyBAQAogCXN0YXRpYyBjaGFyICpidWY9TlVMTDsKIAlzdGF0aWMgY2hhciAqKmFyZz1OVUxMOwogCWNoYXIgKnA7Ci0Jc3RydWN0IHN0YXQgc3RidWY7Ci0KLQlpZiAoc3RhdChmaWxlLCZzdGJ1ZikgPCAwKSByZXR1cm4oMCk7CiAKIAlmcD1mb3BlbihmaWxlLCJyIik7CiAJaWYgKGZwID09IE5VTEwpCiAJCXJldHVybigwKTsKIAorCWlmIChmc2VlayhmcCwwLFNFRUtfRU5EKT09MCkKKwkJbGVuPWZ0ZWxsKGZwKSwgcmV3aW5kKGZwKTsKKwllbHNlCWxlbj0tMTsKKwlpZiAobGVuPD0wKQorCQl7CisJCWZjbG9zZShmcCk7CisJCXJldHVybigwKTsKKwkJfQorCiAJKmFyZ2M9MDsKIAkqYXJndj1OVUxMOwogCi0JbGVuPSh1bnNpZ25lZCBpbnQpc3RidWYuc3Rfc2l6ZTsKIAlpZiAoYnVmICE9IE5VTEwpIE9QRU5TU0xfZnJlZShidWYpOwogCWJ1Zj0oY2hhciAqKU9QRU5TU0xfbWFsbG9jKGxlbisxKTsKIAlpZiAoYnVmID09IE5VTEwpIHJldHVybigwKTsKQEAgLTI0MiwxOCArMjYxLDI1IEBACiAJCXJldHVybihGT1JNQVRfQVNOMSk7CiAJZWxzZSBpZiAoKCpzID09ICdUJykgfHwgKCpzID09ICd0JykpCiAJCXJldHVybihGT1JNQVRfVEVYVCk7Ci0JZWxzZSBpZiAoKCpzID09ICdQJykgfHwgKCpzID09ICdwJykpCi0JCXJldHVybihGT1JNQVRfUEVNKTsKLQllbHNlIGlmICgoKnMgPT0gJ04nKSB8fCAoKnMgPT0gJ24nKSkKLQkJcmV0dXJuKEZPUk1BVF9ORVRTQ0FQRSk7Ci0JZWxzZSBpZiAoKCpzID09ICdTJykgfHwgKCpzID09ICdzJykpCi0JCXJldHVybihGT1JNQVRfU01JTUUpOworICAJZWxzZSBpZiAoKCpzID09ICdOJykgfHwgKCpzID09ICduJykpCisgIAkJcmV0dXJuKEZPUk1BVF9ORVRTQ0FQRSk7CisgIAllbHNlIGlmICgoKnMgPT0gJ1MnKSB8fCAoKnMgPT0gJ3MnKSkKKyAgCQlyZXR1cm4oRk9STUFUX1NNSU1FKTsKKyAJZWxzZSBpZiAoKCpzID09ICdNJykgfHwgKCpzID09ICdtJykpCisgCQlyZXR1cm4oRk9STUFUX01TQkxPQik7CiAJZWxzZSBpZiAoKCpzID09ICcxJykKIAkJfHwgKHN0cmNtcChzLCJQS0NTMTIiKSA9PSAwKSB8fCAoc3RyY21wKHMsInBrY3MxMiIpID09IDApCiAJCXx8IChzdHJjbXAocywiUDEyIikgPT0gMCkgfHwgKHN0cmNtcChzLCJwMTIiKSA9PSAwKSkKIAkJcmV0dXJuKEZPUk1BVF9QS0NTMTIpOwogCWVsc2UgaWYgKCgqcyA9PSAnRScpIHx8ICgqcyA9PSAnZScpKQogCQlyZXR1cm4oRk9STUFUX0VOR0lORSk7CisJZWxzZSBpZiAoKCpzID09ICdQJykgfHwgKCpzID09ICdwJykpCisgCQl7CisgCQlpZiAoc1sxXSA9PSAnVicgfHwgc1sxXSA9PSAndicpCisgCQkJcmV0dXJuIEZPUk1BVF9QVks7CisgCQllbHNlCisgIAkJCXJldHVybihGT1JNQVRfUEVNKTsKKyAJCX0KIAllbHNlCiAJCXJldHVybihGT1JNQVRfVU5ERUYpOwogCX0KQEAgLTYzOSw2ICs2NjUsMTUgQEAKIAkJCQlCSU9fcHJpbnRmKGVyciwgIkNhbid0IG9wZW4gZmlsZSAlc1xuIiwgYXJnICsgNSk7CiAJCQkJcmV0dXJuIE5VTEw7CiAJCQl9CisjaWYgIWRlZmluZWQoX1dJTjMyKQorCQkvKgorCQkgKiBVbmRlciBfV0lOMzIsIHdoaWNoIGNvdmVycyBldmVuIFdpbjY0IGFuZCBDRSwgZmlsZQorCQkgKiBkZXNjcmlwdG9ycyByZWZlcmVuY2VkIGJ5IEJJT19zX2ZkIGFyZSBub3QgaW5oZXJpdGVkCisJCSAqIGJ5IGNoaWxkIHByb2Nlc3MgYW5kIHRoZXJlZm9yZSBiZWxvdyBpcyBub3QgYW4gb3B0aW9uLgorCQkgKiBJdCBjb3VsZCBoYXZlIGJlZW4gYW4gb3B0aW9uIGlmIGJzc19mZC5jIHdhcyBvcGVyYXRpbmcKKwkJICogb24gcmVhbCBXaW5kb3dzIGRlc2NyaXB0b3JzLCBzdWNoIGFzIHRob3NlIG9idGFpbmVkCisJCSAqIHdpdGggQ3JlYXRlRmlsZS4KKwkJICovCiAJCX0gZWxzZSBpZighc3RybmNtcChhcmcsICJmZDoiLCAzKSkgewogCQkJQklPICpidG1wOwogCQkJaSA9IGF0b2koYXJnICsgMyk7CkBAIC02NTAsNiArNjg1LDcgQEAKIAkJCS8qIENhbid0IGRvIEJJT19nZXRzIG9uIGFuIGZkIEJJTyBzbyBhZGQgYSBidWZmZXJpbmcgQklPICovCiAJCQlidG1wID0gQklPX25ldyhCSU9fZl9idWZmZXIoKSk7CiAJCQlwd2RiaW8gPSBCSU9fcHVzaChidG1wLCBwd2RiaW8pOworI2VuZGlmCiAJCX0gZWxzZSBpZighc3RyY21wKGFyZywgInN0ZGluIikpIHsKIAkJCXB3ZGJpbyA9IEJJT19uZXdfZnAoc3RkaW4sIEJJT19OT0NMT1NFKTsKIAkJCWlmKCFwd2RiaW8pIHsKQEAgLTc0OSw4ICs3ODUsNiBAQAogWDUwOSAqbG9hZF9jZXJ0KEJJTyAqZXJyLCBjb25zdCBjaGFyICpmaWxlLCBpbnQgZm9ybWF0LAogCWNvbnN0IGNoYXIgKnBhc3MsIEVOR0lORSAqZSwgY29uc3QgY2hhciAqY2VydF9kZXNjcmlwKQogCXsKLQlBU04xX0hFQURFUiAqYWg9TlVMTDsKLQlCVUZfTUVNICpidWY9TlVMTDsKIAlYNTA5ICp4PU5VTEw7CiAJQklPICpjZXJ0OwogCkBAIC03NjIsNyArNzk2LDkgQEAKIAogCWlmIChmaWxlID09IE5VTEwpCiAJCXsKKyNpZmRlZiBfSU9OQkYKIAkJc2V0dmJ1ZihzdGRpbiwgTlVMTCwgX0lPTkJGLCAwKTsKKyNlbmRpZgogCQlCSU9fc2V0X2ZwKGNlcnQsc3RkaW4sQklPX05PQ0xPU0UpOwogCQl9CiAJZWxzZQpAQCAtNzgwLDQ2ICs4MTYsMjEgQEAKIAkJeD1kMmlfWDUwOV9iaW8oY2VydCxOVUxMKTsKIAllbHNlIGlmIChmb3JtYXQgPT0gRk9STUFUX05FVFNDQVBFKQogCQl7Ci0JCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnAsKm9wOwotCQlpbnQgc2l6ZT0wLGk7Ci0KLQkJLyogV2Ugc29ydCBvZiBoYXZlIHRvIGRvIGl0IHRoaXMgd2F5IGJlY2F1c2UgaXQgaXMgc29ydCBvZiBuaWNlCi0JCSAqIHRvIHJlYWQgdGhlIGhlYWRlciBmaXJzdCBhbmQgY2hlY2sgaXQsIHRoZW4KLQkJICogdHJ5IHRvIHJlYWQgdGhlIGNlcnRpZmljYXRlICovCi0JCWJ1Zj1CVUZfTUVNX25ldygpOwotCQlmb3IgKDs7KQotCQkJewotCQkJaWYgKChidWYgPT0gTlVMTCkgfHwgKCFCVUZfTUVNX2dyb3coYnVmLHNpemUrMTAyNCoxMCkpKQorCQlORVRTQ0FQRV9YNTA5ICpueDsKKwkJbng9QVNOMV9pdGVtX2QyaV9iaW8oQVNOMV9JVEVNX3JwdHIoTkVUU0NBUEVfWDUwOSksY2VydCxOVUxMKTsKKwkJaWYgKG54ID09IE5VTEwpCiAJCQkJZ290byBlbmQ7Ci0JCQlpPUJJT19yZWFkKGNlcnQsJihidWYtPmRhdGFbc2l6ZV0pLDEwMjQqMTApOwotCQkJc2l6ZSs9aTsKLQkJCWlmIChpID09IDApIGJyZWFrOwotCQkJaWYgKGkgPCAwKQotCQkJCXsKLQkJCQlwZXJyb3IoInJlYWRpbmcgY2VydGlmaWNhdGUiKTsKLQkJCQlnb3RvIGVuZDsKLQkJCQl9Ci0JCQl9Ci0JCXA9KHVuc2lnbmVkIGNoYXIgKilidWYtPmRhdGE7Ci0JCW9wPXA7CiAKLQkJLyogRmlyc3QgbG9hZCB0aGUgaGVhZGVyICovCi0JCWlmICgoYWg9ZDJpX0FTTjFfSEVBREVSKE5VTEwsJnAsKGxvbmcpc2l6ZSkpID09IE5VTEwpCi0JCQlnb3RvIGVuZDsKLQkJaWYgKChhaC0+aGVhZGVyID09IE5VTEwpIHx8IChhaC0+aGVhZGVyLT5kYXRhID09IE5VTEwpIHx8Ci0JCQkoc3RybmNtcChORVRTQ0FQRV9DRVJUX0hEUiwoY2hhciAqKWFoLT5oZWFkZXItPmRhdGEsCi0JCQlhaC0+aGVhZGVyLT5sZW5ndGgpICE9IDApKQorCQlpZiAoKHN0cm5jbXAoTkVUU0NBUEVfQ0VSVF9IRFIsKGNoYXIgKilueC0+aGVhZGVyLT5kYXRhLAorCQkJbngtPmhlYWRlci0+bGVuZ3RoKSAhPSAwKSkKIAkJCXsKKwkJCU5FVFNDQVBFX1g1MDlfZnJlZShueCk7CiAJCQlCSU9fcHJpbnRmKGVyciwiRXJyb3IgcmVhZGluZyBoZWFkZXIgb24gY2VydGlmaWNhdGVcbiIpOwogCQkJZ290byBlbmQ7CiAJCQl9Ci0JCS8qIGhlYWRlciBpcyBvaywgc28gbm93IHJlYWQgdGhlIG9iamVjdCAqLwotCQlwPW9wOwotCQlhaC0+bWV0aD1YNTA5X2FzbjFfbWV0aCgpOwotCQlpZiAoKGFoPWQyaV9BU04xX0hFQURFUigmYWgsJnAsKGxvbmcpc2l6ZSkpID09IE5VTEwpCi0JCQlnb3RvIGVuZDsKLQkJeD0oWDUwOSAqKWFoLT5kYXRhOwotCQlhaC0+ZGF0YT1OVUxMOworCQl4PW54LT5jZXJ0OworCQlueC0+Y2VydCA9IE5VTEw7CisJCU5FVFNDQVBFX1g1MDlfZnJlZShueCk7CiAJCX0KIAllbHNlIGlmIChmb3JtYXQgPT0gRk9STUFUX1BFTSkKIAkJeD1QRU1fcmVhZF9iaW9fWDUwOV9BVVgoY2VydCxOVUxMLApAQCAtODQxLDkgKzg1Miw3IEBACiAJCUJJT19wcmludGYoZXJyLCJ1bmFibGUgdG8gbG9hZCBjZXJ0aWZpY2F0ZVxuIik7CiAJCUVSUl9wcmludF9lcnJvcnMoZXJyKTsKIAkJfQotCWlmIChhaCAhPSBOVUxMKSBBU04xX0hFQURFUl9mcmVlKGFoKTsKIAlpZiAoY2VydCAhPSBOVUxMKSBCSU9fZnJlZShjZXJ0KTsKLQlpZiAoYnVmICE9IE5VTEwpIEJVRl9NRU1fZnJlZShidWYpOwogCXJldHVybih4KTsKIAl9CiAKQEAgLTg4MSw3ICs4OTAsOSBAQAogCQl9CiAJaWYgKGZpbGUgPT0gTlVMTCAmJiBtYXliZV9zdGRpbikKIAkJeworI2lmZGVmIF9JT05CRgogCQlzZXR2YnVmKHN0ZGluLCBOVUxMLCBfSU9OQkYsIDApOworI2VuZGlmCiAJCUJJT19zZXRfZnAoa2V5LHN0ZGluLEJJT19OT0NMT1NFKTsKIAkJfQogCWVsc2UKQEAgLTkxMiw2ICs5MjMsMTMgQEAKIAkJCQkmcGtleSwgTlVMTCwgTlVMTCkpCiAJCQlnb3RvIGVuZDsKIAkJfQorI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fUlNBKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX0RTQSkKKwllbHNlIGlmIChmb3JtYXQgPT0gRk9STUFUX01TQkxPQikKKwkJcGtleSA9IGIyaV9Qcml2YXRlS2V5X2JpbyhrZXkpOworCWVsc2UgaWYgKGZvcm1hdCA9PSBGT1JNQVRfUFZLKQorCQlwa2V5ID0gYjJpX1BWS19iaW8oa2V5LCAocGVtX3Bhc3N3b3JkX2NiICopcGFzc3dvcmRfY2FsbGJhY2ssCisJCQkJCQkJCSZjYl9kYXRhKTsKKyNlbmRpZgogCWVsc2UKIAkJewogCQlCSU9fcHJpbnRmKGVyciwiYmFkIGlucHV0IGZvcm1hdCBzcGVjaWZpZWQgZm9yIGtleSBmaWxlXG4iKTsKQEAgLTk1OCw3ICs5NzYsOSBAQAogCQl9CiAJaWYgKGZpbGUgPT0gTlVMTCAmJiBtYXliZV9zdGRpbikKIAkJeworI2lmZGVmIF9JT05CRgogCQlzZXR2YnVmKHN0ZGluLCBOVUxMLCBfSU9OQkYsIDApOworI2VuZGlmCiAJCUJJT19zZXRfZnAoa2V5LHN0ZGluLEJJT19OT0NMT1NFKTsKIAkJfQogCWVsc2UKQEAgLTk3Myw2ICs5OTMsMzcgQEAKIAkJewogCQlwa2V5PWQyaV9QVUJLRVlfYmlvKGtleSwgTlVMTCk7CiAJCX0KKyNpZm5kZWYgT1BFTlNTTF9OT19SU0EKKwllbHNlIGlmIChmb3JtYXQgPT0gRk9STUFUX0FTTjFSU0EpCisJCXsKKwkJUlNBICpyc2E7CisJCXJzYSA9IGQyaV9SU0FQdWJsaWNLZXlfYmlvKGtleSwgTlVMTCk7CisJCWlmIChyc2EpCisJCQl7CisJCQlwa2V5ID0gRVZQX1BLRVlfbmV3KCk7CisJCQlpZiAocGtleSkKKwkJCQlFVlBfUEtFWV9zZXQxX1JTQShwa2V5LCByc2EpOworCQkJUlNBX2ZyZWUocnNhKTsKKwkJCX0KKwkJZWxzZQorCQkJcGtleSA9IE5VTEw7CisJCX0KKwllbHNlIGlmIChmb3JtYXQgPT0gRk9STUFUX1BFTVJTQSkKKwkJeworCQlSU0EgKnJzYTsKKwkJcnNhID0gUEVNX3JlYWRfYmlvX1JTQVB1YmxpY0tleShrZXksIE5VTEwsIAorCQkJKHBlbV9wYXNzd29yZF9jYiAqKXBhc3N3b3JkX2NhbGxiYWNrLCAmY2JfZGF0YSk7CisJCWlmIChyc2EpCisJCQl7CisJCQlwa2V5ID0gRVZQX1BLRVlfbmV3KCk7CisJCQlpZiAocGtleSkKKwkJCQlFVlBfUEtFWV9zZXQxX1JTQShwa2V5LCByc2EpOworCQkJUlNBX2ZyZWUocnNhKTsKKwkJCX0KKwkJZWxzZQorCQkJcGtleSA9IE5VTEw7CisJCX0KKyNlbmRpZgogCWVsc2UgaWYgKGZvcm1hdCA9PSBGT1JNQVRfUEVNKQogCQl7CiAJCXBrZXk9UEVNX3JlYWRfYmlvX1BVQktFWShrZXksTlVMTCwKQEAgLTk4Miw2ICsxMDMzLDEwIEBACiAJZWxzZSBpZiAoZm9ybWF0ID09IEZPUk1BVF9ORVRTQ0FQRSB8fCBmb3JtYXQgPT0gRk9STUFUX0lJU1NHQykKIAkJcGtleSA9IGxvYWRfbmV0c2NhcGVfa2V5KGVyciwga2V5LCBmaWxlLCBrZXlfZGVzY3JpcCwgZm9ybWF0KTsKICNlbmRpZgorI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fUlNBKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX0RTQSkKKwllbHNlIGlmIChmb3JtYXQgPT0gRk9STUFUX01TQkxPQikKKwkJcGtleSA9IGIyaV9QdWJsaWNLZXlfYmlvKGtleSk7CisjZW5kaWYKIAllbHNlCiAJCXsKIAkJQklPX3ByaW50ZihlcnIsImJhZCBpbnB1dCBmb3JtYXQgc3BlY2lmaWVkIGZvciBrZXkgZmlsZVxuIik7CkBAIC0xMDQwLDc2ICsxMDk1LDEyMCBAQAogCX0KICNlbmRpZiAvKiBuZGVmIE9QRU5TU0xfTk9fUkM0ICovCiAKLVNUQUNLX09GKFg1MDkpICpsb2FkX2NlcnRzKEJJTyAqZXJyLCBjb25zdCBjaGFyICpmaWxlLCBpbnQgZm9ybWF0LAotCWNvbnN0IGNoYXIgKnBhc3MsIEVOR0lORSAqZSwgY29uc3QgY2hhciAqY2VydF9kZXNjcmlwKQorc3RhdGljIGludCBsb2FkX2NlcnRzX2NybHMoQklPICplcnIsIGNvbnN0IGNoYXIgKmZpbGUsIGludCBmb3JtYXQsCisJY29uc3QgY2hhciAqcGFzcywgRU5HSU5FICplLCBjb25zdCBjaGFyICpkZXNjLAorCVNUQUNLX09GKFg1MDkpICoqcGNlcnRzLCBTVEFDS19PRihYNTA5X0NSTCkgKipwY3JscykKIAl7Ci0JQklPICpjZXJ0czsKIAlpbnQgaTsKLQlTVEFDS19PRihYNTA5KSAqb3RoZXJjZXJ0cyA9IE5VTEw7Ci0JU1RBQ0tfT0YoWDUwOV9JTkZPKSAqYWxsY2VydHMgPSBOVUxMOworCUJJTyAqYmlvOworCVNUQUNLX09GKFg1MDlfSU5GTykgKnhpcyA9IE5VTEw7CiAJWDUwOV9JTkZPICp4aTsKIAlQV19DQl9EQVRBIGNiX2RhdGE7CisJaW50IHJ2ID0gMDsKIAogCWNiX2RhdGEucGFzc3dvcmQgPSBwYXNzOwogCWNiX2RhdGEucHJvbXB0X2luZm8gPSBmaWxlOwogCi0JaWYoKGNlcnRzID0gQklPX25ldyhCSU9fc19maWxlKCkpKSA9PSBOVUxMKQorCWlmIChmb3JtYXQgIT0gRk9STUFUX1BFTSkKIAkJewotCQlFUlJfcHJpbnRfZXJyb3JzKGVycik7Ci0JCWdvdG8gZW5kOworCQlCSU9fcHJpbnRmKGVyciwiYmFkIGlucHV0IGZvcm1hdCBzcGVjaWZpZWQgZm9yICVzXG4iLCBkZXNjKTsKKwkJcmV0dXJuIDA7CiAJCX0KIAogCWlmIChmaWxlID09IE5VTEwpCi0JCUJJT19zZXRfZnAoY2VydHMsc3RkaW4sQklPX05PQ0xPU0UpOworCQliaW8gPSBCSU9fbmV3X2ZwKHN0ZGluLEJJT19OT0NMT1NFKTsKIAllbHNlCisJCWJpbyA9IEJJT19uZXdfZmlsZShmaWxlLCAiciIpOworCisJaWYgKGJpbyA9PSBOVUxMKQogCQl7Ci0JCWlmIChCSU9fcmVhZF9maWxlbmFtZShjZXJ0cyxmaWxlKSA8PSAwKQotCQkJewotCQkJQklPX3ByaW50ZihlcnIsICJFcnJvciBvcGVuaW5nICVzICVzXG4iLAotCQkJCWNlcnRfZGVzY3JpcCwgZmlsZSk7Ci0JCQlFUlJfcHJpbnRfZXJyb3JzKGVycik7CisJCUJJT19wcmludGYoZXJyLCAiRXJyb3Igb3BlbmluZyAlcyAlc1xuIiwKKwkJCQlkZXNjLCBmaWxlID8gZmlsZSA6ICJzdGRpbiIpOworCQlFUlJfcHJpbnRfZXJyb3JzKGVycik7CisJCXJldHVybiAwOworCQl9CisKKwl4aXMgPSBQRU1fWDUwOV9JTkZPX3JlYWRfYmlvKGJpbywgTlVMTCwKKwkJCQkocGVtX3Bhc3N3b3JkX2NiICopcGFzc3dvcmRfY2FsbGJhY2ssICZjYl9kYXRhKTsKKworCUJJT19mcmVlKGJpbyk7CisKKwlpZiAocGNlcnRzKQorCQl7CisJCSpwY2VydHMgPSBza19YNTA5X25ld19udWxsKCk7CisJCWlmICghKnBjZXJ0cykKIAkJCWdvdG8gZW5kOworCQl9CisKKwlpZiAocGNybHMpCisJCXsKKwkJKnBjcmxzID0gc2tfWDUwOV9DUkxfbmV3X251bGwoKTsKKwkJaWYgKCEqcGNybHMpCisJCQlnb3RvIGVuZDsKKwkJfQorCisJZm9yKGkgPSAwOyBpIDwgc2tfWDUwOV9JTkZPX251bSh4aXMpOyBpKyspCisJCXsKKwkJeGkgPSBza19YNTA5X0lORk9fdmFsdWUgKHhpcywgaSk7CisJCWlmICh4aS0+eDUwOSAmJiBwY2VydHMpCisJCQl7CisJCQlpZiAoIXNrX1g1MDlfcHVzaCgqcGNlcnRzLCB4aS0+eDUwOSkpCisJCQkJZ290byBlbmQ7CisJCQl4aS0+eDUwOSA9IE5VTEw7CisJCQl9CisJCWlmICh4aS0+Y3JsICYmIHBjcmxzKQorCQkJeworCQkJaWYgKCFza19YNTA5X0NSTF9wdXNoKCpwY3JscywgeGktPmNybCkpCisJCQkJZ290byBlbmQ7CisJCQl4aS0+Y3JsID0gTlVMTDsKIAkJCX0KIAkJfQogCi0JaWYgICAgICAoZm9ybWF0ID09IEZPUk1BVF9QRU0pCisJaWYgKHBjZXJ0cyAmJiBza19YNTA5X251bSgqcGNlcnRzKSA+IDApCisJCXJ2ID0gMTsKKworCWlmIChwY3JscyAmJiBza19YNTA5X0NSTF9udW0oKnBjcmxzKSA+IDApCisJCXJ2ID0gMTsKKworCWVuZDoKKworCWlmICh4aXMpCisJCXNrX1g1MDlfSU5GT19wb3BfZnJlZSh4aXMsIFg1MDlfSU5GT19mcmVlKTsKKworCWlmIChydiA9PSAwKQogCQl7Ci0JCW90aGVyY2VydHMgPSBza19YNTA5X25ld19udWxsKCk7Ci0JCWlmKCFvdGhlcmNlcnRzKQorCQlpZiAocGNlcnRzKQogCQkJewotCQkJc2tfWDUwOV9mcmVlKG90aGVyY2VydHMpOwotCQkJb3RoZXJjZXJ0cyA9IE5VTEw7Ci0JCQlnb3RvIGVuZDsKKwkJCXNrX1g1MDlfcG9wX2ZyZWUoKnBjZXJ0cywgWDUwOV9mcmVlKTsKKwkJCSpwY2VydHMgPSBOVUxMOwogCQkJfQotCQlhbGxjZXJ0cyA9IFBFTV9YNTA5X0lORk9fcmVhZF9iaW8oY2VydHMsIE5VTEwsCi0JCQkJKHBlbV9wYXNzd29yZF9jYiAqKXBhc3N3b3JkX2NhbGxiYWNrLCAmY2JfZGF0YSk7Ci0JCWZvcihpID0gMDsgaSA8IHNrX1g1MDlfSU5GT19udW0oYWxsY2VydHMpOyBpKyspCisJCWlmIChwY3JscykKIAkJCXsKLQkJCXhpID0gc2tfWDUwOV9JTkZPX3ZhbHVlIChhbGxjZXJ0cywgaSk7Ci0JCQlpZiAoeGktPng1MDkpCi0JCQkJewotCQkJCXNrX1g1MDlfcHVzaChvdGhlcmNlcnRzLCB4aS0+eDUwOSk7Ci0JCQkJeGktPng1MDkgPSBOVUxMOwotCQkJCX0KKwkJCXNrX1g1MDlfQ1JMX3BvcF9mcmVlKCpwY3JscywgWDUwOV9DUkxfZnJlZSk7CisJCQkqcGNybHMgPSBOVUxMOwogCQkJfQotCQlnb3RvIGVuZDsKLQkJfQotCWVsc2UJewotCQlCSU9fcHJpbnRmKGVyciwiYmFkIGlucHV0IGZvcm1hdCBzcGVjaWZpZWQgZm9yICVzXG4iLAotCQkJY2VydF9kZXNjcmlwKTsKLQkJZ290byBlbmQ7Ci0JCX0KLWVuZDoKLQlpZiAob3RoZXJjZXJ0cyA9PSBOVUxMKQotCQl7Ci0JCUJJT19wcmludGYoZXJyLCJ1bmFibGUgdG8gbG9hZCBjZXJ0aWZpY2F0ZXNcbiIpOworCQlCSU9fcHJpbnRmKGVyciwidW5hYmxlIHRvIGxvYWQgJXNcbiIsCisJCQkJcGNlcnRzID8gImNlcnRpZmljYXRlcyIgOiAiQ1JMcyIpOwogCQlFUlJfcHJpbnRfZXJyb3JzKGVycik7CiAJCX0KLQlpZiAoYWxsY2VydHMpIHNrX1g1MDlfSU5GT19wb3BfZnJlZShhbGxjZXJ0cywgWDUwOV9JTkZPX2ZyZWUpOwotCWlmIChjZXJ0cyAhPSBOVUxMKSBCSU9fZnJlZShjZXJ0cyk7Ci0JcmV0dXJuKG90aGVyY2VydHMpOworCXJldHVybiBydjsKIAl9CiAKK1NUQUNLX09GKFg1MDkpICpsb2FkX2NlcnRzKEJJTyAqZXJyLCBjb25zdCBjaGFyICpmaWxlLCBpbnQgZm9ybWF0LAorCWNvbnN0IGNoYXIgKnBhc3MsIEVOR0lORSAqZSwgY29uc3QgY2hhciAqZGVzYykKKwl7CisJU1RBQ0tfT0YoWDUwOSkgKmNlcnRzOworCWxvYWRfY2VydHNfY3JscyhlcnIsIGZpbGUsIGZvcm1hdCwgcGFzcywgZSwgZGVzYywgJmNlcnRzLCBOVUxMKTsKKwlyZXR1cm4gY2VydHM7CisJfQkKKworU1RBQ0tfT0YoWDUwOV9DUkwpICpsb2FkX2NybHMoQklPICplcnIsIGNvbnN0IGNoYXIgKmZpbGUsIGludCBmb3JtYXQsCisJY29uc3QgY2hhciAqcGFzcywgRU5HSU5FICplLCBjb25zdCBjaGFyICpkZXNjKQorCXsKKwlTVEFDS19PRihYNTA5X0NSTCkgKmNybHM7CisJbG9hZF9jZXJ0c19jcmxzKGVyciwgZmlsZSwgZm9ybWF0LCBwYXNzLCBlLCBkZXNjLCBOVUxMLCAmY3Jscyk7CisJcmV0dXJuIGNybHM7CisJfQkKIAogI2RlZmluZSBYNTA5VjNfRVhUX1VOS05PV05fTUFTSwkJKDB4ZkwgPDwgMTYpCiAvKiBSZXR1cm4gZXJyb3IgZm9yIHVua25vd24gZXh0ZW5zaW9ucyAqLwpAQCAtMTM5Niw2ICsxNDk1LDEwIEBACiAKIGludCBsb2FkX2NvbmZpZyhCSU8gKmVyciwgQ09ORiAqY25mKQogCXsKKwlzdGF0aWMgaW50IGxvYWRfY29uZmlnX2NhbGxlZCA9IDA7CisJaWYgKGxvYWRfY29uZmlnX2NhbGxlZCkKKwkJcmV0dXJuIDE7CisJbG9hZF9jb25maWdfY2FsbGVkID0gMTsKIAlpZiAoIWNuZikKIAkJY25mID0gY29uZmlnOwogCWlmICghY25mKQpAQCAtMTQyOSw3ICsxNTMyLDcgQEAKIAlyZXR1cm4gcDsKIAl9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGluZGV4X3NlcmlhbF9oYXNoKGNvbnN0IGNoYXIgKiphKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgaW5kZXhfc2VyaWFsX2hhc2goY29uc3QgT1BFTlNTTF9DU1RSSU5HICphKQogCXsKIAljb25zdCBjaGFyICpuOwogCkBAIC0xNDM4LDcgKzE1NDEsNyBAQAogCXJldHVybihsaF9zdHJoYXNoKG4pKTsKIAl9CiAKLXN0YXRpYyBpbnQgaW5kZXhfc2VyaWFsX2NtcChjb25zdCBjaGFyICoqYSwgY29uc3QgY2hhciAqKmIpCitzdGF0aWMgaW50IGluZGV4X3NlcmlhbF9jbXAoY29uc3QgT1BFTlNTTF9DU1RSSU5HICphLCBjb25zdCBPUEVOU1NMX0NTVFJJTkcgKmIpCiAJewogCWNvbnN0IGNoYXIgKmFhLCpiYjsKIApAQCAtMTQ1MCwxNyArMTU1MywxNiBAQAogc3RhdGljIGludCBpbmRleF9uYW1lX3F1YWwoY2hhciAqKmEpCiAJeyByZXR1cm4oYVswXVswXSA9PSAnVicpOyB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGluZGV4X25hbWVfaGFzaChjb25zdCBjaGFyICoqYSkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGluZGV4X25hbWVfaGFzaChjb25zdCBPUEVOU1NMX0NTVFJJTkcgKmEpCiAJeyByZXR1cm4obGhfc3RyaGFzaChhW0RCX25hbWVdKSk7IH0KIAotaW50IGluZGV4X25hbWVfY21wKGNvbnN0IGNoYXIgKiphLCBjb25zdCBjaGFyICoqYikKLQl7IHJldHVybihzdHJjbXAoYVtEQl9uYW1lXSwKLQkgICAgIGJbREJfbmFtZV0pKTsgfQoraW50IGluZGV4X25hbWVfY21wKGNvbnN0IE9QRU5TU0xfQ1NUUklORyAqYSwgY29uc3QgT1BFTlNTTF9DU1RSSU5HICpiKQorCXsgcmV0dXJuKHN0cmNtcChhW0RCX25hbWVdLCBiW0RCX25hbWVdKSk7IH0KIAotc3RhdGljIElNUExFTUVOVF9MSEFTSF9IQVNIX0ZOKGluZGV4X3NlcmlhbF9oYXNoLGNvbnN0IGNoYXIgKiopCi1zdGF0aWMgSU1QTEVNRU5UX0xIQVNIX0NPTVBfRk4oaW5kZXhfc2VyaWFsX2NtcCxjb25zdCBjaGFyICoqKQotc3RhdGljIElNUExFTUVOVF9MSEFTSF9IQVNIX0ZOKGluZGV4X25hbWVfaGFzaCxjb25zdCBjaGFyICoqKQotc3RhdGljIElNUExFTUVOVF9MSEFTSF9DT01QX0ZOKGluZGV4X25hbWVfY21wLGNvbnN0IGNoYXIgKiopCitzdGF0aWMgSU1QTEVNRU5UX0xIQVNIX0hBU0hfRk4oaW5kZXhfc2VyaWFsLCBPUEVOU1NMX0NTVFJJTkcpCitzdGF0aWMgSU1QTEVNRU5UX0xIQVNIX0NPTVBfRk4oaW5kZXhfc2VyaWFsLCBPUEVOU1NMX0NTVFJJTkcpCitzdGF0aWMgSU1QTEVNRU5UX0xIQVNIX0hBU0hfRk4oaW5kZXhfbmFtZSwgT1BFTlNTTF9DU1RSSU5HKQorc3RhdGljIElNUExFTUVOVF9MSEFTSF9DT01QX0ZOKGluZGV4X25hbWUsIE9QRU5TU0xfQ1NUUklORykKIAogI3VuZGVmIEJTSVpFCiAjZGVmaW5lIEJTSVpFIDI1NgpAQCAtMTU4OCw3ICsxNjkwLDYgQEAKIAl7CiAJY2hhciBidWZbNV1bQlNJWkVdOwogCWludCBpLGo7Ci0Jc3RydWN0IHN0YXQgc2I7CiAKIAlpID0gc3RybGVuKHNlcmlhbGZpbGUpICsgc3RybGVuKG9sZF9zdWZmaXgpOwogCWogPSBzdHJsZW4oc2VyaWFsZmlsZSkgKyBzdHJsZW4obmV3X3N1ZmZpeCk7CkBAIC0xNjEzLDMwICsxNzE0LDIxIEBACiAJaiA9IEJJT19zbnByaW50ZihidWZbMV0sIHNpemVvZiBidWZbMV0sICIlcy0lcyIsCiAJCXNlcmlhbGZpbGUsIG9sZF9zdWZmaXgpOwogI2VuZGlmCi0JaWYgKHN0YXQoc2VyaWFsZmlsZSwmc2IpIDwgMCkKLQkJewotCQlpZiAoZXJybm8gIT0gRU5PRU5UIAorI2lmZGVmIFJMX0RFQlVHCisJQklPX3ByaW50ZihiaW9fZXJyLCAiREVCVUc6IHJlbmFtaW5nIFwiJXNcIiB0byBcIiVzXCJcbiIsCisJCXNlcmlhbGZpbGUsIGJ1ZlsxXSk7CisjZW5kaWYKKwlpZiAocmVuYW1lKHNlcmlhbGZpbGUsYnVmWzFdKSA8IDAgJiYgZXJybm8gIT0gRU5PRU5UCiAjaWZkZWYgRU5PVERJUgogCQkJJiYgZXJybm8gIT0gRU5PVERJUgogI2VuZGlmCi0JCSAgICkKLQkJCWdvdG8gZXJyOwotCQl9Ci0JZWxzZQotCQl7Ci0jaWZkZWYgUkxfREVCVUcKLQkJQklPX3ByaW50ZihiaW9fZXJyLCAiREVCVUc6IHJlbmFtaW5nIFwiJXNcIiB0byBcIiVzXCJcbiIsCi0JCQlzZXJpYWxmaWxlLCBidWZbMV0pOwotI2VuZGlmCi0JCWlmIChyZW5hbWUoc2VyaWFsZmlsZSxidWZbMV0pIDwgMCkKLQkJCXsKKwkgICApCQl7CiAJCQlCSU9fcHJpbnRmKGJpb19lcnIsCiAJCQkJInVuYWJsZSB0byByZW5hbWUgJXMgdG8gJXNcbiIsCiAJCQkJc2VyaWFsZmlsZSwgYnVmWzFdKTsKIAkJCXBlcnJvcigicmVhc29uIik7CiAJCQlnb3RvIGVycjsKIAkJCX0KLQkJfQogI2lmZGVmIFJMX0RFQlVHCiAJQklPX3ByaW50ZihiaW9fZXJyLCAiREVCVUc6IHJlbmFtaW5nIFwiJXNcIiB0byBcIiVzXCJcbiIsCiAJCWJ1ZlswXSxzZXJpYWxmaWxlKTsKQEAgLTE3MDMsMTAgKzE3OTUsNyBAQAogCQlnb3RvIGVycjsKIAkJfQogCWlmICgodG1wZGIgPSBUWFRfREJfcmVhZChpbixEQl9OVU1CRVIpKSA9PSBOVUxMKQotCQl7Ci0JCWlmICh0bXBkYiAhPSBOVUxMKSBUWFRfREJfZnJlZSh0bXBkYik7CiAJCWdvdG8gZXJyOwotCQl9CiAKICNpZm5kZWYgT1BFTlNTTF9TWVNfVk1TCiAJQklPX3NucHJpbnRmKGJ1ZlswXSwgc2l6ZW9mIGJ1ZlswXSwgIiVzLmF0dHIiLCBkYmZpbGUpOwpAQCAtMTc2Nyw4ICsxODU2LDggQEAKIGludCBpbmRleF9pbmRleChDQV9EQiAqZGIpCiAJewogCWlmICghVFhUX0RCX2NyZWF0ZV9pbmRleChkYi0+ZGIsIERCX3NlcmlhbCwgTlVMTCwKLQkJCQlMSEFTSF9IQVNIX0ZOKGluZGV4X3NlcmlhbF9oYXNoKSwKLQkJCQlMSEFTSF9DT01QX0ZOKGluZGV4X3NlcmlhbF9jbXApKSkKKwkJCQlMSEFTSF9IQVNIX0ZOKGluZGV4X3NlcmlhbCksCisJCQkJTEhBU0hfQ09NUF9GTihpbmRleF9zZXJpYWwpKSkKIAkJewogCQlCSU9fcHJpbnRmKGJpb19lcnIsCiAJCSAgImVycm9yIGNyZWF0aW5nIHNlcmlhbCBudW1iZXIgaW5kZXg6KCVsZCwlbGQsJWxkKVxuIiwKQEAgLTE3NzgsOCArMTg2Nyw4IEBACiAKIAlpZiAoZGItPmF0dHJpYnV0ZXMudW5pcXVlX3N1YmplY3QKIAkJJiYgIVRYVF9EQl9jcmVhdGVfaW5kZXgoZGItPmRiLCBEQl9uYW1lLCBpbmRleF9uYW1lX3F1YWwsCi0JCQlMSEFTSF9IQVNIX0ZOKGluZGV4X25hbWVfaGFzaCksCi0JCQlMSEFTSF9DT01QX0ZOKGluZGV4X25hbWVfY21wKSkpCisJCQlMSEFTSF9IQVNIX0ZOKGluZGV4X25hbWUpLAorCQkJTEhBU0hfQ09NUF9GTihpbmRleF9uYW1lKSkpCiAJCXsKIAkJQklPX3ByaW50ZihiaW9fZXJyLCJlcnJvciBjcmVhdGluZyBuYW1lIGluZGV4OiglbGQsJWxkLCVsZClcbiIsCiAJCQlkYi0+ZGItPmVycm9yLGRiLT5kYi0+YXJnMSxkYi0+ZGItPmFyZzIpOwpAQCAtMTg1OSw3ICsxOTQ4LDYgQEAKIAl7CiAJY2hhciBidWZbNV1bQlNJWkVdOwogCWludCBpLGo7Ci0Jc3RydWN0IHN0YXQgc2I7CiAKIAlpID0gc3RybGVuKGRiZmlsZSkgKyBzdHJsZW4ob2xkX3N1ZmZpeCk7CiAJaiA9IHN0cmxlbihkYmZpbGUpICsgc3RybGVuKG5ld19zdWZmaXgpOwpAQCAtMTkwMywzMCArMTk5MSwyMSBAQAogCWogPSBCSU9fc25wcmludGYoYnVmWzNdLCBzaXplb2YgYnVmWzNdLCAiJXMtYXR0ci0lcyIsCiAJCWRiZmlsZSwgb2xkX3N1ZmZpeCk7CiAjZW5kaWYKLQlpZiAoc3RhdChkYmZpbGUsJnNiKSA8IDApCi0JCXsKLQkJaWYgKGVycm5vICE9IEVOT0VOVCAKLSNpZmRlZiBFTk9URElSCi0JCQkmJiBlcnJubyAhPSBFTk9URElSCi0jZW5kaWYKLQkJICAgKQotCQkJZ290byBlcnI7Ci0JCX0KLQllbHNlCi0JCXsKICNpZmRlZiBSTF9ERUJVRwotCQlCSU9fcHJpbnRmKGJpb19lcnIsICJERUJVRzogcmVuYW1pbmcgXCIlc1wiIHRvIFwiJXNcIlxuIiwKLQkJCWRiZmlsZSwgYnVmWzFdKTsKKwlCSU9fcHJpbnRmKGJpb19lcnIsICJERUJVRzogcmVuYW1pbmcgXCIlc1wiIHRvIFwiJXNcIlxuIiwKKwkJZGJmaWxlLCBidWZbMV0pOwogI2VuZGlmCi0JCWlmIChyZW5hbWUoZGJmaWxlLGJ1ZlsxXSkgPCAwKQotCQkJeworCWlmIChyZW5hbWUoZGJmaWxlLGJ1ZlsxXSkgPCAwICYmIGVycm5vICE9IEVOT0VOVAorI2lmZGVmIEVOT1RESVIKKwkJJiYgZXJybm8gIT0gRU5PVERJUgorI2VuZGlmCisJICAgKQkJewogCQkJQklPX3ByaW50ZihiaW9fZXJyLAogCQkJCSJ1bmFibGUgdG8gcmVuYW1lICVzIHRvICVzXG4iLAogCQkJCWRiZmlsZSwgYnVmWzFdKTsKIAkJCXBlcnJvcigicmVhc29uIik7CiAJCQlnb3RvIGVycjsKIAkJCX0KLQkJfQogI2lmZGVmIFJMX0RFQlVHCiAJQklPX3ByaW50ZihiaW9fZXJyLCAiREVCVUc6IHJlbmFtaW5nIFwiJXNcIiB0byBcIiVzXCJcbiIsCiAJCWJ1ZlswXSxkYmZpbGUpOwpAQCAtMTk0MCwyMyArMjAxOSwxNSBAQAogCQlyZW5hbWUoYnVmWzFdLGRiZmlsZSk7CiAJCWdvdG8gZXJyOwogCQl9Ci0JaWYgKHN0YXQoYnVmWzRdLCZzYikgPCAwKQotCQl7Ci0JCWlmIChlcnJubyAhPSBFTk9FTlQgCi0jaWZkZWYgRU5PVERJUgotCQkJJiYgZXJybm8gIT0gRU5PVERJUgotI2VuZGlmCi0JCSAgICkKLQkJCWdvdG8gZXJyOwotCQl9Ci0JZWxzZQotCQl7CiAjaWZkZWYgUkxfREVCVUcKLQkJQklPX3ByaW50ZihiaW9fZXJyLCAiREVCVUc6IHJlbmFtaW5nIFwiJXNcIiB0byBcIiVzXCJcbiIsCi0JCQlidWZbNF0sYnVmWzNdKTsKKwlCSU9fcHJpbnRmKGJpb19lcnIsICJERUJVRzogcmVuYW1pbmcgXCIlc1wiIHRvIFwiJXNcIlxuIiwKKwkJYnVmWzRdLGJ1ZlszXSk7CiAjZW5kaWYKLQkJaWYgKHJlbmFtZShidWZbNF0sYnVmWzNdKSA8IDApCi0JCQl7CisJaWYgKHJlbmFtZShidWZbNF0sYnVmWzNdKSA8IDAgJiYgZXJybm8gIT0gRU5PRU5UCisjaWZkZWYgRU5PVERJUgorCQkmJiBlcnJubyAhPSBFTk9URElSCisjZW5kaWYKKwkgICApCQl7CiAJCQlCSU9fcHJpbnRmKGJpb19lcnIsCiAJCQkJInVuYWJsZSB0byByZW5hbWUgJXMgdG8gJXNcbiIsCiAJCQkJYnVmWzRdLCBidWZbM10pOwpAQCAtMTk2NSw3ICsyMDM2LDYgQEAKIAkJCXJlbmFtZShidWZbMV0sZGJmaWxlKTsKIAkJCWdvdG8gZXJyOwogCQkJfQotCQl9CiAjaWZkZWYgUkxfREVCVUcKIAlCSU9fcHJpbnRmKGJpb19lcnIsICJERUJVRzogcmVuYW1pbmcgXCIlc1wiIHRvIFwiJXNcIlxuIiwKIAkJYnVmWzJdLGJ1Zls0XSk7CkBAIC0yMTYwLDUyICsyMjMwLDEzIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLS8qIFRoaXMgY29kZSBNVVNUIENPTUUgQUZURVIgYW55dGhpbmcgdGhhdCB1c2VzIHJlbmFtZSgpICovCi0jaWZkZWYgT1BFTlNTTF9TWVNfV0lOMzIKLWludCBXSU4zMl9yZW5hbWUoY29uc3QgY2hhciAqZnJvbSwgY29uc3QgY2hhciAqdG8pCi0JewotI2lmbmRlZiBPUEVOU1NMX1NZU19XSU5DRQotCS8qIFdpbmRvd3MgcmVuYW1lIGdpdmVzIGFuIGVycm9yIGlmICd0bycgZXhpc3RzLCBzbyBkZWxldGUgaXQKLQkgKiBmaXJzdCBhbmQgaWdub3JlIGZpbGUgbm90IGZvdW5kIGVycnJvcgotCSAqLwotCWlmKChyZW1vdmUodG8pICE9IDApICYmIChlcnJubyAhPSBFTk9FTlQpKQotCQlyZXR1cm4gLTE7Ci0jdW5kZWYgcmVuYW1lCi0JcmV0dXJuIHJlbmFtZShmcm9tLCB0byk7Ci0jZWxzZQotCS8qIGNvbnZlcnQgc3RyaW5ncyB0byBVTklDT0RFICovCi0JewotCUJPT0wgcmVzdWx0ID0gRkFMU0U7Ci0JV0NIQVIqIHdmcm9tOwotCVdDSEFSKiB3dG87Ci0JaW50IGk7Ci0Jd2Zyb20gPSBtYWxsb2MoKHN0cmxlbihmcm9tKSsxKSoyKTsKLQl3dG8gPSBtYWxsb2MoKHN0cmxlbih0bykrMSkqMik7Ci0JaWYgKHdmcm9tICE9IE5VTEwgJiYgd3RvICE9IE5VTEwpCi0JCXsKLQkJZm9yIChpPTA7IGk8KGludClzdHJsZW4oZnJvbSkrMTsgaSsrKQotCQkJd2Zyb21baV0gPSAoc2hvcnQpZnJvbVtpXTsKLQkJZm9yIChpPTA7IGk8KGludClzdHJsZW4odG8pKzE7IGkrKykKLQkJCXd0b1tpXSA9IChzaG9ydCl0b1tpXTsKLQkJcmVzdWx0ID0gTW92ZUZpbGUod2Zyb20sIHd0byk7Ci0JCX0KLQlpZiAod2Zyb20gIT0gTlVMTCkKLQkJZnJlZSh3ZnJvbSk7Ci0JaWYgKHd0byAhPSBOVUxMKQotCQlmcmVlKHd0byk7Ci0JcmV0dXJuIHJlc3VsdDsKLQl9Ci0jZW5kaWYKLQl9Ci0jZW5kaWYKLQogaW50IGFyZ3NfdmVyaWZ5KGNoYXIgKioqcGFyZ3MsIGludCAqcGFyZ2MsCiAJCQlpbnQgKmJhZGFyZywgQklPICplcnIsIFg1MDlfVkVSSUZZX1BBUkFNICoqcG0pCiAJewogCUFTTjFfT0JKRUNUICpvdG1wID0gTlVMTDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKIAlpbnQgaTsKLQlpbnQgcHVycG9zZSA9IDA7CisJaW50IHB1cnBvc2UgPSAwLCBkZXB0aCA9IC0xOwogCWNoYXIgKipvbGRhcmdzID0gKnBhcmdzOwogCWNoYXIgKmFyZyA9ICoqcGFyZ3MsICphcmduID0gKCpwYXJncylbMV07CiAJaWYgKCFzdHJjbXAoYXJnLCAiLXBvbGljeSIpKQpAQCAtMjI0NSw2ICsyMjc2LDIxIEBACiAJCQl9CiAJCSgqcGFyZ3MpKys7CiAJCX0KKwllbHNlIGlmIChzdHJjbXAoYXJnLCItdmVyaWZ5X2RlcHRoIikgPT0gMCkKKwkJeworCQlpZiAoIWFyZ24pCisJCQkqYmFkYXJnID0gMTsKKwkJZWxzZQorCQkJeworCQkJZGVwdGggPSBhdG9pKGFyZ24pOworCQkJaWYoZGVwdGggPCAwKQorCQkJCXsKKwkJCQlCSU9fcHJpbnRmKGVyciwgImludmFsaWQgZGVwdGhcbiIpOworCQkJCSpiYWRhcmcgPSAxOworCQkJCX0KKwkJCX0KKwkJKCpwYXJncykrKzsKKwkJfQogCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLWlnbm9yZV9jcml0aWNhbCIpKQogCQlmbGFncyB8PSBYNTA5X1ZfRkxBR19JR05PUkVfQ1JJVElDQUw7CiAJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItaXNzdWVyX2NoZWNrcyIpKQpAQCAtMjI1Nyw4ICsyMzAzLDE2IEBACiAJCWZsYWdzIHw9IFg1MDlfVl9GTEFHX1BPTElDWV9DSEVDSzsKIAllbHNlIGlmICghc3RyY21wKGFyZywgIi1leHBsaWNpdF9wb2xpY3kiKSkKIAkJZmxhZ3MgfD0gWDUwOV9WX0ZMQUdfRVhQTElDSVRfUE9MSUNZOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLWluaGliaXRfYW55IikpCisJCWZsYWdzIHw9IFg1MDlfVl9GTEFHX0lOSElCSVRfQU5ZOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLWluaGliaXRfbWFwIikpCisJCWZsYWdzIHw9IFg1MDlfVl9GTEFHX0lOSElCSVRfTUFQOwogCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLXg1MDlfc3RyaWN0IikpCiAJCWZsYWdzIHw9IFg1MDlfVl9GTEFHX1g1MDlfU1RSSUNUOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLWV4dGVuZGVkX2NybCIpKQorCQlmbGFncyB8PSBYNTA5X1ZfRkxBR19FWFRFTkRFRF9DUkxfU1VQUE9SVDsKKwllbHNlIGlmICghc3RyY21wKGFyZywgIi11c2VfZGVsdGFzIikpCisJCWZsYWdzIHw9IFg1MDlfVl9GTEFHX1VTRV9ERUxUQVM7CiAJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItcG9saWN5X3ByaW50IikpCiAJCWZsYWdzIHw9IFg1MDlfVl9GTEFHX05PVElGWV9QT0xJQ1k7CiAJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItY2hlY2tfc3Nfc2lnIikpCkBAIC0yMjg4LDYgKzIzNDIsOSBAQAogCWlmIChwdXJwb3NlKQogCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXRfcHVycG9zZSgqcG0sIHB1cnBvc2UpOwogCisJaWYgKGRlcHRoID49IDApCisJCVg1MDlfVkVSSUZZX1BBUkFNX3NldF9kZXB0aCgqcG0sIGRlcHRoKTsKKwogCWVuZDoKIAogCSgqcGFyZ3MpKys7CkBAIC0yMjk5LDYgKzIzNTYsNjEgQEAKIAogCX0KIAorLyogUmVhZCB3aG9sZSBjb250ZW50cyBvZiBhIEJJTyBpbnRvIGFuIGFsbG9jYXRlZCBtZW1vcnkgYnVmZmVyIGFuZAorICogcmV0dXJuIGl0LgorICovCisKK2ludCBiaW9fdG9fbWVtKHVuc2lnbmVkIGNoYXIgKipvdXQsIGludCBtYXhsZW4sIEJJTyAqaW4pCisJeworCUJJTyAqbWVtOworCWludCBsZW4sIHJldDsKKwl1bnNpZ25lZCBjaGFyIHRidWZbMTAyNF07CisJbWVtID0gQklPX25ldyhCSU9fc19tZW0oKSk7CisJaWYgKCFtZW0pCisJCXJldHVybiAtMTsKKwlmb3IoOzspCisJCXsKKwkJaWYgKChtYXhsZW4gIT0gLTEpICYmIG1heGxlbiA8IDEwMjQpCisJCQlsZW4gPSBtYXhsZW47CisJCWVsc2UKKwkJCWxlbiA9IDEwMjQ7CisJCWxlbiA9IEJJT19yZWFkKGluLCB0YnVmLCBsZW4pOworCQlpZiAobGVuIDw9IDApCisJCQlicmVhazsKKwkJaWYgKEJJT193cml0ZShtZW0sIHRidWYsIGxlbikgIT0gbGVuKQorCQkJeworCQkJQklPX2ZyZWUobWVtKTsKKwkJCXJldHVybiAtMTsKKwkJCX0KKwkJbWF4bGVuIC09IGxlbjsKKworCQlpZiAobWF4bGVuID09IDApCisJCQlicmVhazsKKwkJfQorCXJldCA9IEJJT19nZXRfbWVtX2RhdGEobWVtLCAoY2hhciAqKilvdXQpOworCUJJT19zZXRfZmxhZ3MobWVtLCBCSU9fRkxBR1NfTUVNX1JET05MWSk7CisJQklPX2ZyZWUobWVtKTsKKwlyZXR1cm4gcmV0OworCX0KKworaW50IHBrZXlfY3RybF9zdHJpbmcoRVZQX1BLRVlfQ1RYICpjdHgsIGNoYXIgKnZhbHVlKQorCXsKKwlpbnQgcnY7CisJY2hhciAqc3RtcCwgKnZ0bXAgPSBOVUxMOworCXN0bXAgPSBCVUZfc3RyZHVwKHZhbHVlKTsKKwlpZiAoIXN0bXApCisJCXJldHVybiAtMTsKKwl2dG1wID0gc3RyY2hyKHN0bXAsICc6Jyk7CisJaWYgKHZ0bXApCisJCXsKKwkJKnZ0bXAgPSAwOworCQl2dG1wKys7CisJCX0KKwlydiA9IEVWUF9QS0VZX0NUWF9jdHJsX3N0cihjdHgsIHN0bXAsIHZ0bXApOworCU9QRU5TU0xfZnJlZShzdG1wKTsKKwlyZXR1cm4gcnY7CisJfQorCiBzdGF0aWMgdm9pZCBub2Rlc19wcmludChCSU8gKm91dCwgY29uc3QgY2hhciAqbmFtZSwKIAlTVEFDS19PRihYNTA5X1BPTElDWV9OT0RFKSAqbm9kZXMpCiAJewpAQCAtMjM0MCw3ICsyNDUyLDcgQEAKIAkJQklPX2ZyZWUob3V0KTsKIAl9CiAKLSNpZm5kZWYgT1BFTlNTTF9OT19KUEFLRQorI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fSlBBS0UpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fUFNLKQogCiBzdGF0aWMgSlBBS0VfQ1RYICpqcGFrZV9pbml0KGNvbnN0IGNoYXIgKnVzLCBjb25zdCBjaGFyICp0aGVtLAogCQkJCQkJCSBjb25zdCBjaGFyICpzZWNyZXQpCkBAIC0yNTIzLDE3ICsyNjM1LDE0IEBACiAJanBha2Vfc2VuZF9zdGVwM2EoYmNvbm4sIGN0eCk7CiAJanBha2VfcmVjZWl2ZV9zdGVwM2IoY3R4LCBiY29ubik7CiAKLQkvKgotCSAqIFRoZSBwcm9ibGVtIGlzIHRoYXQgeW91IG11c3QgdXNlIHRoZSBkZXJpdmVkIGtleSBpbiB0aGUKLQkgKiBzZXNzaW9uIGtleSBvciB5b3UgYXJlIHN1YmplY3QgdG8gbWFuLWluLXRoZS1taWRkbGUKLQkgKiBhdHRhY2tzLgotCSAqLwotCUJJT19wdXRzKG91dCwgIkpQQUtFIGF1dGhlbnRpY2F0aW9uIHN1Y2NlZWRlZCAoTi5CLiBUaGlzIHZlcnNpb24gY2FuIgotCQkgIiBiZSBNaXRNZWQuIFNlZSB0aGUgdmVyc2lvbiBpbiBIRUFEIGZvciBob3cgdG8gZG8gaXQiCi0JCSAiIHByb3Blcmx5KVxuIik7CisJQklPX3B1dHMob3V0LCAiSlBBS0UgYXV0aGVudGljYXRpb24gc3VjY2VlZGVkLCBzZXR0aW5nIFBTS1xuIik7CisKKwlwc2tfa2V5ID0gQk5fYm4yaGV4KEpQQUtFX2dldF9zaGFyZWRfa2V5KGN0eCkpOwogCiAJQklPX3BvcChiY29ubik7CiAJQklPX2ZyZWUoYmNvbm4pOworCisJSlBBS0VfQ1RYX2ZyZWUoY3R4KTsKIAl9CiAKIHZvaWQganBha2Vfc2VydmVyX2F1dGgoQklPICpvdXQsIEJJTyAqY29ubiwgY29uc3QgY2hhciAqc2VjcmV0KQpAQCAtMjU1NSwxNyArMjY2NCwzNDAgQEAKIAlqcGFrZV9yZWNlaXZlX3N0ZXAzYShjdHgsIGJjb25uKTsKIAlqcGFrZV9zZW5kX3N0ZXAzYihiY29ubiwgY3R4KTsKIAotCS8qCi0JICogVGhlIHByb2JsZW0gaXMgdGhhdCB5b3UgbXVzdCB1c2UgdGhlIGRlcml2ZWQga2V5IGluIHRoZQotCSAqIHNlc3Npb24ga2V5IG9yIHlvdSBhcmUgc3ViamVjdCB0byBtYW4taW4tdGhlLW1pZGRsZQotCSAqIGF0dGFja3MuCi0JICovCi0JQklPX3B1dHMob3V0LCAiSlBBS0UgYXV0aGVudGljYXRpb24gc3VjY2VlZGVkIChOLkIuIFRoaXMgdmVyc2lvbiBjYW4iCi0JCSAiIGJlIE1pdE1lZC4gU2VlIHRoZSB2ZXJzaW9uIGluIEhFQUQgZm9yIGhvdyB0byBkbyBpdCIKLQkJICIgcHJvcGVybHkpXG4iKTsKKwlCSU9fcHV0cyhvdXQsICJKUEFLRSBhdXRoZW50aWNhdGlvbiBzdWNjZWVkZWQsIHNldHRpbmcgUFNLXG4iKTsKKworCXBza19rZXkgPSBCTl9ibjJoZXgoSlBBS0VfZ2V0X3NoYXJlZF9rZXkoY3R4KSk7CiAKIAlCSU9fcG9wKGJjb25uKTsKIAlCSU9fZnJlZShiY29ubik7CisKKwlKUEFLRV9DVFhfZnJlZShjdHgpOwogCX0KIAogI2VuZGlmCisKKy8qCisgKiBQbGF0Zm9ybS1zcGVjaWZpYyBzZWN0aW9ucworICovCisjaWYgZGVmaW5lZChfV0lOMzIpCisjIGlmZGVmIGZpbGVubworIyAgdW5kZWYgZmlsZW5vCisjICBkZWZpbmUgZmlsZW5vKGEpIChpbnQpX2ZpbGVubyhhKQorIyBlbmRpZgorCisjIGluY2x1ZGUgPHdpbmRvd3MuaD4KKyMgaW5jbHVkZSA8dGNoYXIuaD4KKworc3RhdGljIGludCBXSU4zMl9yZW5hbWUoY29uc3QgY2hhciAqZnJvbSwgY29uc3QgY2hhciAqdG8pCisJeworCVRDSEFSICAqdGZyb209TlVMTCwqdHRvOworCURXT1JECWVycjsKKwlpbnQJcmV0PTA7CisKKwlpZiAoc2l6ZW9mKFRDSEFSKSA9PSAxKQorCQl7CisJCXRmcm9tID0gKFRDSEFSICopZnJvbTsKKwkJdHRvICAgPSAoVENIQVIgKil0bzsKKwkJfQorCWVsc2UJLyogVU5JQ09ERSBwYXRoICovCisJCXsKKwkJc2l6ZV90IGksZmxlbj1zdHJsZW4oZnJvbSkrMSx0bGVuPXN0cmxlbih0bykrMTsKKwkJdGZyb20gPSAoVENIQVIgKiltYWxsb2Moc2l6ZW9mKFRDSEFSKSooZmxlbit0bGVuKSk7CisJCWlmICh0ZnJvbT09TlVMTCkgZ290byBlcnI7CisJCXR0bz10ZnJvbStmbGVuOworI2lmICFkZWZpbmVkKF9XSU4zMl9XQ0UpIHx8IF9XSU4zMl9XQ0U+PTEwMQorCQlpZiAoIU11bHRpQnl0ZVRvV2lkZUNoYXIoQ1BfQUNQLDAsZnJvbSxmbGVuLChXQ0hBUiAqKXRmcm9tLGZsZW4pKQorI2VuZGlmCisJCQlmb3IgKGk9MDtpPGZsZW47aSsrKQl0ZnJvbVtpXT0oVENIQVIpZnJvbVtpXTsKKyNpZiAhZGVmaW5lZChfV0lOMzJfV0NFKSB8fCBfV0lOMzJfV0NFPj0xMDEKKwkJaWYgKCFNdWx0aUJ5dGVUb1dpZGVDaGFyKENQX0FDUCwwLHRvLCAgdGxlbiwoV0NIQVIgKil0dG8sICB0bGVuKSkKKyNlbmRpZgorCQkJZm9yIChpPTA7aTx0bGVuO2krKykJdHRvW2ldICA9KFRDSEFSKXRvW2ldOworCQl9CisKKwlpZiAoTW92ZUZpbGUodGZyb20sdHRvKSkJZ290byBvazsKKwllcnI9R2V0TGFzdEVycm9yKCk7CisJaWYgKGVycj09RVJST1JfQUxSRUFEWV9FWElTVFMgfHwgZXJyPT1FUlJPUl9GSUxFX0VYSVNUUykKKwkJeworCQlpZiAoRGVsZXRlRmlsZSh0dG8pICYmIE1vdmVGaWxlKHRmcm9tLHR0bykpCisJCQlnb3RvIG9rOworCQllcnI9R2V0TGFzdEVycm9yKCk7CisJCX0KKwlpZiAoZXJyPT1FUlJPUl9GSUxFX05PVF9GT1VORCB8fCBlcnI9PUVSUk9SX1BBVEhfTk9UX0ZPVU5EKQorCQllcnJubyA9IEVOT0VOVDsKKwllbHNlIGlmIChlcnI9PUVSUk9SX0FDQ0VTU19ERU5JRUQpCisJCWVycm5vID0gRUFDQ0VTOworCWVsc2UKKwkJZXJybm8gPSBFSU5WQUw7CS8qIHdlIGNvdWxkIG1hcCBtb3JlIGNvZGVzLi4uICovCitlcnI6CisJcmV0PS0xOworb2s6CisJaWYgKHRmcm9tIT1OVUxMICYmIHRmcm9tIT0oVENIQVIgKilmcm9tKQlmcmVlKHRmcm9tKTsKKwlyZXR1cm4gcmV0OworCX0KKyNlbmRpZgorCisvKiBhcHBfdG1pbnRlcnZhbCBzZWN0aW9uICovCisjaWYgZGVmaW5lZChfV0lOMzIpCitkb3VibGUgYXBwX3RtaW50ZXJ2YWwoaW50IHN0b3AsaW50IHVzZXJ0aW1lKQorCXsKKwlGSUxFVElNRQkJbm93OworCWRvdWJsZQkJCXJldD0wOworCXN0YXRpYyBVTEFSR0VfSU5URUdFUgl0bXN0YXJ0OworCXN0YXRpYyBpbnQJCXdhcm5pbmc9MTsKKyNpZmRlZiBfV0lOMzJfV0lOTlQKKwlzdGF0aWMgSEFORExFCQlwcm9jPU5VTEw7CisKKwlpZiAocHJvYz09TlVMTCkKKwkJeworCQlpZiAoR2V0VmVyc2lvbigpIDwgMHg4MDAwMDAwMCkKKwkJCXByb2MgPSBPcGVuUHJvY2VzcyhQUk9DRVNTX1FVRVJZX0lORk9STUFUSU9OLEZBTFNFLAorCQkJCQkJR2V0Q3VycmVudFByb2Nlc3NJZCgpKTsKKwkJaWYgKHByb2M9PU5VTEwpIHByb2MgPSAoSEFORExFKS0xOworCQl9CisKKwlpZiAodXNlcnRpbWUgJiYgcHJvYyE9KEhBTkRMRSktMSkKKwkJeworCQlGSUxFVElNRSBqdW5rOworCQlHZXRQcm9jZXNzVGltZXMocHJvYywmanVuaywmanVuaywmanVuaywmbm93KTsKKwkJfQorCWVsc2UKKyNlbmRpZgorCQl7CisJCVNZU1RFTVRJTUUgc3lzdGltZTsKKworCQlpZiAodXNlcnRpbWUgJiYgd2FybmluZykKKwkJCXsKKwkJCUJJT19wcmludGYoYmlvX2VyciwiVG8gZ2V0IG1lYW5pbmdmdWwgcmVzdWx0cywgcnVuICIKKwkJCQkJICAgInRoaXMgcHJvZ3JhbSBvbiBpZGxlIHN5c3RlbS5cbiIpOworCQkJd2FybmluZz0wOworCQkJfQorCQlHZXRTeXN0ZW1UaW1lKCZzeXN0aW1lKTsKKwkJU3lzdGVtVGltZVRvRmlsZVRpbWUoJnN5c3RpbWUsJm5vdyk7CisJCX0KKworCWlmIChzdG9wPT1UTV9TVEFSVCkKKwkJeworCQl0bXN0YXJ0LnUuTG93UGFydCAgPSBub3cuZHdMb3dEYXRlVGltZTsKKwkJdG1zdGFydC51LkhpZ2hQYXJ0ID0gbm93LmR3SGlnaERhdGVUaW1lOworCQl9CisJZWxzZQl7CisJCVVMQVJHRV9JTlRFR0VSIHRtc3RvcDsKKworCQl0bXN0b3AudS5Mb3dQYXJ0ICAgPSBub3cuZHdMb3dEYXRlVGltZTsKKwkJdG1zdG9wLnUuSGlnaFBhcnQgID0gbm93LmR3SGlnaERhdGVUaW1lOworCisJCXJldCA9IChfX2ludDY0KSh0bXN0b3AuUXVhZFBhcnQgLSB0bXN0YXJ0LlF1YWRQYXJ0KSoxZS03OworCQl9CisKKwlyZXR1cm4gKHJldCk7CisJfQorCisjZWxpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX05FVFdBUkUpCisjaW5jbHVkZSA8dGltZS5oPgorCitkb3VibGUgYXBwX3RtaW50ZXJ2YWwoaW50IHN0b3AsaW50IHVzZXJ0aW1lKQorCXsKKwlkb3VibGUJCXJldD0wOworCXN0YXRpYyBjbG9ja190CXRtc3RhcnQ7CisJc3RhdGljIGludAl3YXJuaW5nPTE7CisKKwlpZiAodXNlcnRpbWUgJiYgd2FybmluZykKKwkJeworCQlCSU9fcHJpbnRmKGJpb19lcnIsIlRvIGdldCBtZWFuaW5nZnVsIHJlc3VsdHMsIHJ1biAiCisJCQkJICAgInRoaXMgcHJvZ3JhbSBvbiBpZGxlIHN5c3RlbS5cbiIpOworCQl3YXJuaW5nPTA7CisJCX0KKworCWlmIChzdG9wPT1UTV9TVEFSVCkJdG1zdGFydCA9IGNsb2NrKCk7CisJZWxzZQkJCXJldCAgICAgPSAoY2xvY2soKS10bXN0YXJ0KS8oZG91YmxlKUNMT0NLU19QRVJfU0VDOworCisJcmV0dXJuIChyZXQpOworCX0KKworI2VsaWYgZGVmaW5lZChPUEVOU1NMX1NZU1RFTV9WWFdPUktTKQorI2luY2x1ZGUgPHRpbWUuaD4KKworZG91YmxlIGFwcF90bWludGVydmFsKGludCBzdG9wLGludCB1c2VydGltZSkKKwl7CisJZG91YmxlIHJldD0wOworI2lmZGVmIENMT0NLX1JFQUxUSU1FCisJc3RhdGljIHN0cnVjdCB0aW1lc3BlYwl0bXN0YXJ0OworCXN0cnVjdCB0aW1lc3BlYwkJbm93OworI2Vsc2UKKwlzdGF0aWMgdW5zaWduZWQgbG9uZwl0bXN0YXJ0OworCXVuc2lnbmVkIGxvbmcJCW5vdzsKKyNlbmRpZgorCXN0YXRpYyBpbnQgd2FybmluZz0xOworCisJaWYgKHVzZXJ0aW1lICYmIHdhcm5pbmcpCisJCXsKKwkJQklPX3ByaW50ZihiaW9fZXJyLCJUbyBnZXQgbWVhbmluZ2Z1bCByZXN1bHRzLCBydW4gIgorCQkJCSAgICJ0aGlzIHByb2dyYW0gb24gaWRsZSBzeXN0ZW0uXG4iKTsKKwkJd2FybmluZz0wOworCQl9CisKKyNpZmRlZiBDTE9DS19SRUFMVElNRQorCWNsb2NrX2dldHRpbWUoQ0xPQ0tfUkVBTFRJTUUsJm5vdyk7CisJaWYgKHN0b3A9PVRNX1NUQVJUKQl0bXN0YXJ0ID0gbm93OworCWVsc2UJcmV0ID0gKCAobm93LnR2X3NlYytub3cudHZfbnNlYyoxZS05KQorCQkJLSAodG1zdGFydC50dl9zZWMrdG1zdGFydC50dl9uc2VjKjFlLTkpICk7CisjZWxzZQorCW5vdyA9IHRpY2tHZXQoKTsKKwlpZiAoc3RvcD09VE1fU1RBUlQpCXRtc3RhcnQgPSBub3c7CisJZWxzZQkJCXJldCA9IChub3cgLSB0bXN0YXJ0KS8oZG91YmxlKXN5c0Nsa1JhdGVHZXQoKTsKKyNlbmRpZgorCXJldHVybiAocmV0KTsKKwl9CisKKyNlbGlmIGRlZmluZWQoT1BFTlNTTF9TWVNURU1fVk1TKQorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx0aW1lcy5oPgorCitkb3VibGUgYXBwX3RtaW50ZXJ2YWwoaW50IHN0b3AsaW50IHVzZXJ0aW1lKQorCXsKKwlzdGF0aWMgY2xvY2tfdAl0bXN0YXJ0OworCWRvdWJsZQkJcmV0ID0gMDsKKwljbG9ja190CQlub3c7CisjaWZkZWYgX19UTVMKKwlzdHJ1Y3QgdG1zCXJ1czsKKworCW5vdyA9IHRpbWVzKCZydXMpOworCWlmICh1c2VydGltZSkJbm93ID0gcnVzLnRtc191dGltZTsKKyNlbHNlCisJaWYgKHVzZXJ0aW1lKQorCQlub3cgPSBjbG9jaygpOyAvKiBzdW0gb2YgdXNlciBhbmQga2VybmVsIHRpbWVzICovCisJZWxzZQl7CisJCXN0cnVjdCB0aW1ldmFsIHR2OworCQlnZXR0aW1lb2ZkYXkoJnR2LE5VTEwpOworCQlub3cgPSAoY2xvY2tfdCkoCisJCQkodW5zaWduZWQgbG9uZyBsb25nKXR2LnR2X3NlYypDTEtfVENLICsKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpdHYudHZfdXNlYyooMTAwMDAwMC9DTEtfVENLKQorCQkJKTsKKwkJfQorI2VuZGlmCisJaWYgKHN0b3A9PVRNX1NUQVJUKQl0bXN0YXJ0ID0gbm93OworCWVsc2UJCQlyZXQgPSAobm93IC0gdG1zdGFydCkvKGRvdWJsZSkoQ0xLX1RDSyk7CisKKwlyZXR1cm4gKHJldCk7CisJfQorCisjZWxpZiBkZWZpbmVkKF9TQ19DTEtfVENLKQkvKiBieSBtZWFucyBvZiB1bmlzdGQuaCAqLworI2luY2x1ZGUgPHN5cy90aW1lcy5oPgorCitkb3VibGUgYXBwX3RtaW50ZXJ2YWwoaW50IHN0b3AsaW50IHVzZXJ0aW1lKQorCXsKKwlkb3VibGUJCXJldCA9IDA7CisJc3RydWN0IHRtcwlydXM7CisJY2xvY2tfdAkJbm93ID0gdGltZXMoJnJ1cyk7CisJc3RhdGljIGNsb2NrX3QJdG1zdGFydDsKKworCWlmICh1c2VydGltZSkJCW5vdyA9IHJ1cy50bXNfdXRpbWU7CisKKwlpZiAoc3RvcD09VE1fU1RBUlQpCXRtc3RhcnQgPSBub3c7CisJZWxzZQorCQl7CisJCWxvbmcgaW50IHRjayA9IHN5c2NvbmYoX1NDX0NMS19UQ0spOworCQlyZXQgPSAobm93IC0gdG1zdGFydCkvKGRvdWJsZSl0Y2s7CisJCX0KKworCXJldHVybiAocmV0KTsKKwl9CisKKyNlbHNlCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KKworZG91YmxlIGFwcF90bWludGVydmFsKGludCBzdG9wLGludCB1c2VydGltZSkKKwl7CisJZG91YmxlCQlyZXQgPSAwOworCXN0cnVjdCBydXNhZ2UJcnVzOworCXN0cnVjdCB0aW1ldmFsCW5vdzsKKwlzdGF0aWMgc3RydWN0IHRpbWV2YWwgdG1zdGFydDsKKworCWlmICh1c2VydGltZSkJCWdldHJ1c2FnZShSVVNBR0VfU0VMRiwmcnVzKSwgbm93ID0gcnVzLnJ1X3V0aW1lOworCWVsc2UJCQlnZXR0aW1lb2ZkYXkoJm5vdyxOVUxMKTsKKworCWlmIChzdG9wPT1UTV9TVEFSVCkJdG1zdGFydCA9IG5vdzsKKwllbHNlCQkJcmV0ID0gKCAobm93LnR2X3NlYytub3cudHZfdXNlYyoxZS02KQorCQkJCQktICh0bXN0YXJ0LnR2X3NlYyt0bXN0YXJ0LnR2X3VzZWMqMWUtNikgKTsKKworCXJldHVybiByZXQ7CisJfQorI2VuZGlmCisKKy8qIGFwcF9pc2RpciBzZWN0aW9uICovCisjaWZkZWYgX1dJTjMyCitpbnQgYXBwX2lzZGlyKGNvbnN0IGNoYXIgKm5hbWUpCisJeworCUhBTkRMRQkJaExpc3Q7CisJV0lOMzJfRklORF9EQVRBCUZpbGVEYXRhOworI2lmIGRlZmluZWQoVU5JQ09ERSkgfHwgZGVmaW5lZChfVU5JQ09ERSkKKwlzaXplX3QgaSwgbGVuXzAgPSBzdHJsZW4obmFtZSkrMTsKKworCWlmIChsZW5fMCA+IHNpemVvZihGaWxlRGF0YS5jRmlsZU5hbWUpL3NpemVvZihGaWxlRGF0YS5jRmlsZU5hbWVbMF0pKQorCQlyZXR1cm4gLTE7CisKKyNpZiAhZGVmaW5lZChfV0lOMzJfV0NFKSB8fCBfV0lOMzJfV0NFPj0xMDEKKwlpZiAoIU11bHRpQnl0ZVRvV2lkZUNoYXIoQ1BfQUNQLDAsbmFtZSxsZW5fMCxGaWxlRGF0YS5jRmlsZU5hbWUsbGVuXzApKQorI2VuZGlmCisJCWZvciAoaT0wO2k8bGVuXzA7aSsrKQorCQkJRmlsZURhdGEuY0ZpbGVOYW1lW2ldID0gKFdDSEFSKW5hbWVbaV07CisKKwloTGlzdCA9IEZpbmRGaXJzdEZpbGUoRmlsZURhdGEuY0ZpbGVOYW1lLCZGaWxlRGF0YSk7CisjZWxzZQorCWhMaXN0ID0gRmluZEZpcnN0RmlsZShuYW1lLCZGaWxlRGF0YSk7CisjZW5kaWYKKwlpZiAoaExpc3QgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCXJldHVybiAtMTsKKwlGaW5kQ2xvc2UoaExpc3QpOworCXJldHVybiAoKEZpbGVEYXRhLmR3RmlsZUF0dHJpYnV0ZXMmRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZKSE9MCk7CisJfQorI2Vsc2UKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2lmbmRlZiBTX0lTRElSCisjIGlmIGRlZmluZWQoX1NfSUZNVCkgJiYgZGVmaW5lZChfU19JRkRJUikKKyMgIGRlZmluZSBTX0lTRElSKGEpICAgKCgoYSkgJiBfU19JRk1UKSA9PSBfU19JRkRJUikKKyMgZWxzZSAKKyMgIGRlZmluZSBTX0lTRElSKGEpICAgKCgoYSkgJiBTX0lGTVQpID09IFNfSUZESVIpCisjIGVuZGlmIAorI2VuZGlmIAorCitpbnQgYXBwX2lzZGlyKGNvbnN0IGNoYXIgKm5hbWUpCisJeworI2lmIGRlZmluZWQoU19JU0RJUikKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmIChzdGF0KG5hbWUsJnN0KT09MCkJcmV0dXJuIFNfSVNESVIoc3Quc3RfbW9kZSk7CisJZWxzZQkJCXJldHVybiAtMTsKKyNlbHNlCisJcmV0dXJuIC0xOworI2VuZGlmCisJfQorI2VuZGlmCisKKy8qIHJhd19yZWFkfHdyaXRlIHNlY3Rpb24gKi8KKyNpZiBkZWZpbmVkKF9XSU4zMikgJiYgZGVmaW5lZChTVERfSU5QVVRfSEFORExFKQoraW50IHJhd19yZWFkX3N0ZGluKHZvaWQgKmJ1ZixpbnQgc2l6KQorCXsKKwlEV09SRCBuOworCWlmIChSZWFkRmlsZShHZXRTdGRIYW5kbGUoU1REX0lOUFVUX0hBTkRMRSksYnVmLHNpeiwmbixOVUxMKSkKKwkJcmV0dXJuIChuKTsKKwllbHNlCXJldHVybiAoLTEpOworCX0KKyNlbHNlCitpbnQgcmF3X3JlYWRfc3RkaW4odm9pZCAqYnVmLGludCBzaXopCisJewlyZXR1cm4gcmVhZChmaWxlbm8oc3RkaW4pLGJ1ZixzaXopOwl9CisjZW5kaWYKKworI2lmIGRlZmluZWQoX1dJTjMyKSAmJiBkZWZpbmVkKFNURF9PVVRQVVRfSEFORExFKQoraW50IHJhd193cml0ZV9zdGRvdXQoY29uc3Qgdm9pZCAqYnVmLGludCBzaXopCisJeworCURXT1JEIG47CisJaWYgKFdyaXRlRmlsZShHZXRTdGRIYW5kbGUoU1REX09VVFBVVF9IQU5ETEUpLGJ1ZixzaXosJm4sTlVMTCkpCisJCXJldHVybiAobik7CisJZWxzZQlyZXR1cm4gKC0xKTsKKwl9CisjZWxzZQoraW50IHJhd193cml0ZV9zdGRvdXQoY29uc3Qgdm9pZCAqYnVmLGludCBzaXopCisJewlyZXR1cm4gd3JpdGUoZmlsZW5vKHN0ZG91dCksYnVmLHNpeik7CX0KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXBwcy9hcHBzLmggYi9hcHBzL2FwcHMuaAppbmRleCA4ODU3OTA5Li41OTZhMzlhIDEwMDY0NAotLS0gYS9hcHBzL2FwcHMuaAorKysgYi9hcHBzL2FwcHMuaApAQCAtMTM3LDExICsxMzcsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAoc2VlIGVfb3MuaCkuICBUaGUgc3RyaW5nIGlzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGRlc3Ryb3llZCEgKi8KIAotI2lmZGVmIE9QRU5TU0xfU1lTX1dJTjMyCi0jZGVmaW5lIHJlbmFtZShmcm9tLHRvKSBXSU4zMl9yZW5hbWUoKGZyb20pLCh0bykpCi1pbnQgV0lOMzJfcmVuYW1lKGNvbnN0IGNoYXIgKm9sZG5hbWUsY29uc3QgY2hhciAqbmV3bmFtZSk7Ci0jZW5kaWYKLQogI2lmbmRlZiBNT05PTElUSAogCiAjZGVmaW5lIE1BSU4oYSx2KQltYWluKGEsdikKQEAgLTE0OSwxMSArMTQ0LDkgQEAKICNpZm5kZWYgTk9OX01BSU4KIENPTkYgKmNvbmZpZz1OVUxMOwogQklPICpiaW9fZXJyPU5VTEw7Ci1pbnQgaW5fRklQU19tb2RlPTA7CiAjZWxzZQogZXh0ZXJuIENPTkYgKmNvbmZpZzsKIGV4dGVybiBCSU8gKmJpb19lcnI7Ci1leHRlcm4gaW50IGluX0ZJUFNfbW9kZTsKICNlbmRpZgogCiAjZWxzZQpAQCAtMTYyLDcgKzE1NSw2IEBACiBleHRlcm4gQ09ORiAqY29uZmlnOwogZXh0ZXJuIGNoYXIgKmRlZmF1bHRfY29uZmlnX2ZpbGU7CiBleHRlcm4gQklPICpiaW9fZXJyOwotZXh0ZXJuIGludCBpbl9GSVBTX21vZGU7CiAKICNlbmRpZgogCkBAIC0xNzYsNjEgKzE2OCwzNyBAQAogI2RlZmluZSBkb19waXBlX3NpZygpCiAjZW5kaWYKIAorI2lmZGVmIE9QRU5TU0xfTk9fQ09NUAorI2RlZmluZSB6bGliX2NsZWFudXAoKSAKKyNlbHNlCisjZGVmaW5lIHpsaWJfY2xlYW51cCgpIENPTVBfemxpYl9jbGVhbnVwKCkKKyNlbmRpZgorCiAjaWYgZGVmaW5lZChNT05PTElUSCkgJiYgIWRlZmluZWQoT1BFTlNTTF9DKQogIyAgZGVmaW5lIGFwcHNfc3RhcnR1cCgpIFwKIAkJZG9fcGlwZV9zaWcoKQogIyAgZGVmaW5lIGFwcHNfc2h1dGRvd24oKQogI2Vsc2UKICMgIGlmbmRlZiBPUEVOU1NMX05PX0VOR0lORQotIyAgICBpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX01TRE9TKSB8fCBkZWZpbmVkKE9QRU5TU0xfU1lTX1dJTjE2KSB8fCBcCi0gICAgIGRlZmluZWQoT1BFTlNTTF9TWVNfV0lOMzIpCi0jICAgICAgaWZkZWYgX09fQklOQVJZCi0jICAgICAgICBkZWZpbmUgYXBwc19zdGFydHVwKCkgXAotCQkJZG8geyBfZm1vZGU9X09fQklOQVJZOyBkb19waXBlX3NpZygpOyBDUllQVE9fbWFsbG9jX2luaXQoKTsgXAorIyAgICBkZWZpbmUgYXBwc19zdGFydHVwKCkgXAorCQkJZG8geyBkb19waXBlX3NpZygpOyBDUllQVE9fbWFsbG9jX2luaXQoKTsgXAogCQkJRVJSX2xvYWRfY3J5cHRvX3N0cmluZ3MoKTsgT3BlblNTTF9hZGRfYWxsX2FsZ29yaXRobXMoKTsgXAogCQkJRU5HSU5FX2xvYWRfYnVpbHRpbl9lbmdpbmVzKCk7IHNldHVwX3VpX21ldGhvZCgpOyB9IHdoaWxlKDApCi0jICAgICAgZWxzZQotIyAgICAgICAgZGVmaW5lIGFwcHNfc3RhcnR1cCgpIFwKLQkJCWRvIHsgX2Ztb2RlPU9fQklOQVJZOyBkb19waXBlX3NpZygpOyBDUllQVE9fbWFsbG9jX2luaXQoKTsgXAotCQkJRVJSX2xvYWRfY3J5cHRvX3N0cmluZ3MoKTsgT3BlblNTTF9hZGRfYWxsX2FsZ29yaXRobXMoKTsgXAotCQkJRU5HSU5FX2xvYWRfYnVpbHRpbl9lbmdpbmVzKCk7IHNldHVwX3VpX21ldGhvZCgpOyB9IHdoaWxlKDApCi0jICAgICAgZW5kaWYKLSMgICAgZWxzZQotIyAgICAgIGRlZmluZSBhcHBzX3N0YXJ0dXAoKSBcCi0JCQlkbyB7IGRvX3BpcGVfc2lnKCk7IE9wZW5TU0xfYWRkX2FsbF9hbGdvcml0aG1zKCk7IFwKLQkJCUVSUl9sb2FkX2NyeXB0b19zdHJpbmdzKCk7IEVOR0lORV9sb2FkX2J1aWx0aW5fZW5naW5lcygpOyBcCi0JCQlzZXR1cF91aV9tZXRob2QoKTsgfSB3aGlsZSgwKQotIyAgICBlbmRpZgogIyAgICBkZWZpbmUgYXBwc19zaHV0ZG93bigpIFwKIAkJCWRvIHsgQ09ORl9tb2R1bGVzX3VubG9hZCgxKTsgZGVzdHJveV91aV9tZXRob2QoKTsgXAotCQkJRVZQX2NsZWFudXAoKTsgRU5HSU5FX2NsZWFudXAoKTsgXAotCQkJQ1JZUFRPX2NsZWFudXBfYWxsX2V4X2RhdGEoKTsgRVJSX3JlbW92ZV9zdGF0ZSgwKTsgXAotCQkJRVJSX2ZyZWVfc3RyaW5ncygpOyB9IHdoaWxlKDApCisJCQlPQkpfY2xlYW51cCgpOyBFVlBfY2xlYW51cCgpOyBFTkdJTkVfY2xlYW51cCgpOyBcCisJCQlDUllQVE9fY2xlYW51cF9hbGxfZXhfZGF0YSgpOyBFUlJfcmVtb3ZlX3RocmVhZF9zdGF0ZShOVUxMKTsgXAorCQkJRVJSX2ZyZWVfc3RyaW5ncygpOyB6bGliX2NsZWFudXAoKTt9IHdoaWxlKDApCiAjICBlbHNlCi0jICAgIGlmIGRlZmluZWQoT1BFTlNTTF9TWVNfTVNET1MpIHx8IGRlZmluZWQoT1BFTlNTTF9TWVNfV0lOMTYpIHx8IFwKLSAgICAgZGVmaW5lZChPUEVOU1NMX1NZU19XSU4zMikKLSMgICAgICBpZmRlZiBfT19CSU5BUlkKLSMgICAgICAgIGRlZmluZSBhcHBzX3N0YXJ0dXAoKSBcCi0JCQlkbyB7IF9mbW9kZT1fT19CSU5BUlk7IGRvX3BpcGVfc2lnKCk7IENSWVBUT19tYWxsb2NfaW5pdCgpOyBcCisjICAgIGRlZmluZSBhcHBzX3N0YXJ0dXAoKSBcCisJCQlkbyB7IGRvX3BpcGVfc2lnKCk7IENSWVBUT19tYWxsb2NfaW5pdCgpOyBcCiAJCQlFUlJfbG9hZF9jcnlwdG9fc3RyaW5ncygpOyBPcGVuU1NMX2FkZF9hbGxfYWxnb3JpdGhtcygpOyBcCiAJCQlzZXR1cF91aV9tZXRob2QoKTsgfSB3aGlsZSgwKQotIyAgICAgIGVsc2UKLSMgICAgICAgIGRlZmluZSBhcHBzX3N0YXJ0dXAoKSBcCi0JCQlkbyB7IF9mbW9kZT1PX0JJTkFSWTsgZG9fcGlwZV9zaWcoKTsgQ1JZUFRPX21hbGxvY19pbml0KCk7IFwKLQkJCUVSUl9sb2FkX2NyeXB0b19zdHJpbmdzKCk7IE9wZW5TU0xfYWRkX2FsbF9hbGdvcml0aG1zKCk7IFwKLQkJCXNldHVwX3VpX21ldGhvZCgpOyB9IHdoaWxlKDApCi0jICAgICAgZW5kaWYKLSMgICAgZWxzZQotIyAgICAgIGRlZmluZSBhcHBzX3N0YXJ0dXAoKSBcCi0JCQlkbyB7IGRvX3BpcGVfc2lnKCk7IE9wZW5TU0xfYWRkX2FsbF9hbGdvcml0aG1zKCk7IFwKLQkJCUVSUl9sb2FkX2NyeXB0b19zdHJpbmdzKCk7IFwKLQkJCXNldHVwX3VpX21ldGhvZCgpOyB9IHdoaWxlKDApCi0jICAgIGVuZGlmCiAjICAgIGRlZmluZSBhcHBzX3NodXRkb3duKCkgXAogCQkJZG8geyBDT05GX21vZHVsZXNfdW5sb2FkKDEpOyBkZXN0cm95X3VpX21ldGhvZCgpOyBcCi0JCQlFVlBfY2xlYW51cCgpOyBcCi0JCQlDUllQVE9fY2xlYW51cF9hbGxfZXhfZGF0YSgpOyBFUlJfcmVtb3ZlX3N0YXRlKDApOyBcCi0JCQlFUlJfZnJlZV9zdHJpbmdzKCk7IH0gd2hpbGUoMCkKKwkJCU9CSl9jbGVhbnVwKCk7IEVWUF9jbGVhbnVwKCk7IFwKKwkJCUNSWVBUT19jbGVhbnVwX2FsbF9leF9kYXRhKCk7IEVSUl9yZW1vdmVfdGhyZWFkX3N0YXRlKE5VTEwpOyBcCisJCQlFUlJfZnJlZV9zdHJpbmdzKCk7IHpsaWJfY2xlYW51cCgpOyB9IHdoaWxlKDApCiAjICBlbmRpZgogI2VuZGlmCiAKQEAgLTI0MCw2ICsyMDgsNyBAQAogIyAgZGVmaW5lIG9wZW5zc2xfZmRzZXQoYSxiKSBGRF9TRVQoYSwgYikKICNlbmRpZgogCisKIHR5cGVkZWYgc3RydWN0IGFyZ3Nfc3QKIAl7CiAJY2hhciAqKmRhdGE7CkBAIC0yODIsNiArMjUxLDggQEAKIAljb25zdCBjaGFyICpwYXNzLCBFTkdJTkUgKmUsIGNvbnN0IGNoYXIgKmtleV9kZXNjcmlwKTsKIFNUQUNLX09GKFg1MDkpICpsb2FkX2NlcnRzKEJJTyAqZXJyLCBjb25zdCBjaGFyICpmaWxlLCBpbnQgZm9ybWF0LAogCWNvbnN0IGNoYXIgKnBhc3MsIEVOR0lORSAqZSwgY29uc3QgY2hhciAqY2VydF9kZXNjcmlwKTsKK1NUQUNLX09GKFg1MDlfQ1JMKSAqbG9hZF9jcmxzKEJJTyAqZXJyLCBjb25zdCBjaGFyICpmaWxlLCBpbnQgZm9ybWF0LAorCWNvbnN0IGNoYXIgKnBhc3MsIEVOR0lORSAqZSwgY29uc3QgY2hhciAqY2VydF9kZXNjcmlwKTsKIFg1MDlfU1RPUkUgKnNldHVwX3ZlcmlmeShCSU8gKmJwLCBjaGFyICpDQWZpbGUsIGNoYXIgKkNBcGF0aCk7CiAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCiBFTkdJTkUgKnNldHVwX2VuZ2luZShCSU8gKmVyciwgY29uc3QgY2hhciAqZW5naW5lLCBpbnQgZGVidWcpOwpAQCAtMjkwLDYgKzI2MSw3IEBACiAjaWZuZGVmIE9QRU5TU0xfTk9fT0NTUAogT0NTUF9SRVNQT05TRSAqcHJvY2Vzc19yZXNwb25kZXIoQklPICplcnIsIE9DU1BfUkVRVUVTVCAqcmVxLAogCQkJY2hhciAqaG9zdCwgY2hhciAqcGF0aCwgY2hhciAqcG9ydCwgaW50IHVzZV9zc2wsCisJCQlTVEFDS19PRihDT05GX1ZBTFVFKSAqaGVhZGVycywKIAkJCWludCByZXFfdGltZW91dCk7CiAjZW5kaWYKIApAQCAtMzMxLDEzICszMDMsMjMgQEAKIGludCBzYXZlX2luZGV4KGNvbnN0IGNoYXIgKmRiZmlsZSwgY29uc3QgY2hhciAqc3VmZml4LCBDQV9EQiAqZGIpOwogaW50IHJvdGF0ZV9pbmRleChjb25zdCBjaGFyICpkYmZpbGUsIGNvbnN0IGNoYXIgKm5ld19zdWZmaXgsIGNvbnN0IGNoYXIgKm9sZF9zdWZmaXgpOwogdm9pZCBmcmVlX2luZGV4KENBX0RCICpkYik7Ci1pbnQgaW5kZXhfbmFtZV9jbXAoY29uc3QgY2hhciAqKmEsIGNvbnN0IGNoYXIgKipiKTsKKyNkZWZpbmUgaW5kZXhfbmFtZV9jbXBfbm9jb25zdChhLCBiKSBcCisJaW5kZXhfbmFtZV9jbXAoKGNvbnN0IE9QRU5TU0xfQ1NUUklORyAqKUNIRUNLRURfUFRSX09GKE9QRU5TU0xfU1RSSU5HLCBhKSwgXAorCShjb25zdCBPUEVOU1NMX0NTVFJJTkcgKilDSEVDS0VEX1BUUl9PRihPUEVOU1NMX1NUUklORywgYikpCitpbnQgaW5kZXhfbmFtZV9jbXAoY29uc3QgT1BFTlNTTF9DU1RSSU5HICphLCBjb25zdCBPUEVOU1NMX0NTVFJJTkcgKmIpOwogaW50IHBhcnNlX3llc25vKGNvbnN0IGNoYXIgKnN0ciwgaW50IGRlZik7CiAKIFg1MDlfTkFNRSAqcGFyc2VfbmFtZShjaGFyICpzdHIsIGxvbmcgY2h0eXBlLCBpbnQgbXVsdGlyZG4pOwogaW50IGFyZ3NfdmVyaWZ5KGNoYXIgKioqcGFyZ3MsIGludCAqcGFyZ2MsCiAJCQlpbnQgKmJhZGFyZywgQklPICplcnIsIFg1MDlfVkVSSUZZX1BBUkFNICoqcG0pOwogdm9pZCBwb2xpY2llc19wcmludChCSU8gKm91dCwgWDUwOV9TVE9SRV9DVFggKmN0eCk7CitpbnQgYmlvX3RvX21lbSh1bnNpZ25lZCBjaGFyICoqb3V0LCBpbnQgbWF4bGVuLCBCSU8gKmluKTsKK2ludCBwa2V5X2N0cmxfc3RyaW5nKEVWUF9QS0VZX0NUWCAqY3R4LCBjaGFyICp2YWx1ZSk7CitpbnQgaW5pdF9nZW5fc3RyKEJJTyAqZXJyLCBFVlBfUEtFWV9DVFggKipwY3R4LAorCQkJY29uc3QgY2hhciAqYWxnbmFtZSwgRU5HSU5FICplLCBpbnQgZG9fcGFyYW0pOworI2lmbmRlZiBPUEVOU1NMX05PX1BTSworZXh0ZXJuIGNoYXIgKnBza19rZXk7CisjZW5kaWYKICNpZm5kZWYgT1BFTlNTTF9OT19KUEFLRQogdm9pZCBqcGFrZV9jbGllbnRfYXV0aChCSU8gKm91dCwgQklPICpjb25uLCBjb25zdCBjaGFyICpzZWNyZXQpOwogdm9pZCBqcGFrZV9zZXJ2ZXJfYXV0aChCSU8gKm91dCwgQklPICpjb25uLCBjb25zdCBjaGFyICpzZWNyZXQpOwpAQCAtMzUzLDYgKzMzNSwxMCBAQAogI2RlZmluZSBGT1JNQVRfRU5HSU5FICAgNwogI2RlZmluZSBGT1JNQVRfSUlTU0dDCTgJLyogWFhYIHRoaXMgc3R1cGlkIG1hY3JvIGhlbHBzIHVzIHRvIGF2b2lkCiAJCQkJICogYWRkaW5nIHlldCBhbm90aGVyIHBhcmFtIHRvIGxvYWRfKmtleSgpICovCisjZGVmaW5lIEZPUk1BVF9QRU1SU0EJOQkvKiBQRU0gUlNBUHViaWNLZXkgZm9ybWF0ICovCisjZGVmaW5lIEZPUk1BVF9BU04xUlNBCTEwCS8qIERFUiBSU0FQdWJpY0tleSBmb3JtYXQgKi8KKyNkZWZpbmUgRk9STUFUX01TQkxPQgkxMQkvKiBNUyBLZXkgYmxvYiBmb3JtYXQgKi8KKyNkZWZpbmUgRk9STUFUX1BWSwkxMgkvKiBNUyBQVksgZmlsZSBmb3JtYXQgKi8KIAogI2RlZmluZSBFWFRfQ09QWV9OT05FCTAKICNkZWZpbmUgRVhUX0NPUFlfQURECTEKQEAgLTM2NCw0ICszNTAsMTEgQEAKIAogI2RlZmluZSBTRVJJQUxfUkFORF9CSVRTCTY0CiAKK2ludCBhcHBfaXNkaXIoY29uc3QgY2hhciAqKTsKK2ludCByYXdfcmVhZF9zdGRpbih2b2lkICosaW50KTsKK2ludCByYXdfd3JpdGVfc3Rkb3V0KGNvbnN0IHZvaWQgKixpbnQpOworCisjZGVmaW5lIFRNX1NUQVJUCTAKKyNkZWZpbmUgVE1fU1RPUAkJMQorZG91YmxlIGFwcF90bWludGVydmFsIChpbnQgc3RvcCxpbnQgdXNlcnRpbWUpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcHBzL2FzbjFwYXJzLmMgYi9hcHBzL2FzbjFwYXJzLmMKaW5kZXggYmRlNjFkMC4uYjVkNjVlNyAxMDA2NDQKLS0tIGEvYXBwcy9hc24xcGFycy5jCisrKyBiL2FwcHMvYXNuMXBhcnMuYwpAQCAtOTYsNyArOTYsNyBAQAogCXVuc2lnbmVkIGNoYXIgKnRtcGJ1ZjsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpjdG1wYnVmOwogCUJVRl9NRU0gKmJ1Zj1OVUxMOwotCVNUQUNLICpvc2s9TlVMTDsKKwlTVEFDS19PRihPUEVOU1NMX1NUUklORykgKm9zaz1OVUxMOwogCUFTTjFfVFlQRSAqYXQ9TlVMTDsKIAogCWluZm9ybWF0PUZPUk1BVF9QRU07CkBAIC0xMTMsNyArMTEzLDcgQEAKIAlwcm9nPWFyZ3ZbMF07CiAJYXJnYy0tOwogCWFyZ3YrKzsKLQlpZiAoKG9zaz1za19uZXdfbnVsbCgpKSA9PSBOVUxMKQorCWlmICgob3NrPXNrX09QRU5TU0xfU1RSSU5HX25ld19udWxsKCkpID09IE5VTEwpCiAJCXsKIAkJQklPX3ByaW50ZihiaW9fZXJyLCJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlXG4iKTsKIAkJZ290byBlbmQ7CkBAIC0xNjksNyArMTY5LDcgQEAKIAkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCItc3RycGFyc2UiKSA9PSAwKQogCQkJewogCQkJaWYgKC0tYXJnYyA8IDEpIGdvdG8gYmFkOwotCQkJc2tfcHVzaChvc2ssKigrK2FyZ3YpKTsKKwkJCXNrX09QRU5TU0xfU1RSSU5HX3B1c2gob3NrLCooKythcmd2KSk7CiAJCQl9CiAJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiLWdlbnN0ciIpID09IDApCiAJCQl7CkBAIC0zMDIsMTggKzMwMiwxOCBAQAogCiAJLyogSWYgYW55IHN0cnVjdHMgdG8gcGFyc2UgZ28gdGhyb3VnaCBpbiBzZXF1ZW5jZSAqLwogCi0JaWYgKHNrX251bShvc2spKQorCWlmIChza19PUEVOU1NMX1NUUklOR19udW0ob3NrKSkKIAkJewogCQl0bXBidWY9KHVuc2lnbmVkIGNoYXIgKilzdHI7CiAJCXRtcGxlbj1udW07Ci0JCWZvciAoaT0wOyBpPHNrX251bShvc2spOyBpKyspCisJCWZvciAoaT0wOyBpPHNrX09QRU5TU0xfU1RSSU5HX251bShvc2spOyBpKyspCiAJCQl7CiAJCQlBU04xX1RZUEUgKmF0bXA7CiAJCQlpbnQgdHlwOwotCQkJaj1hdG9pKHNrX3ZhbHVlKG9zayxpKSk7CisJCQlqPWF0b2koc2tfT1BFTlNTTF9TVFJJTkdfdmFsdWUob3NrLGkpKTsKIAkJCWlmIChqID09IDApCiAJCQkJewotCQkJCUJJT19wcmludGYoYmlvX2VyciwiJyVzJyBpcyBhbiBpbnZhbGlkIG51bWJlclxuIixza192YWx1ZShvc2ssaSkpOworCQkJCUJJT19wcmludGYoYmlvX2VyciwiJyVzJyBpcyBhbiBpbnZhbGlkIG51bWJlclxuIixza19PUEVOU1NMX1NUUklOR192YWx1ZShvc2ssaSkpOwogCQkJCWNvbnRpbnVlOwogCQkJCX0KIAkJCXRtcGJ1Zis9ajsKQEAgLTM3OCw3ICszNzgsNyBAQAogCQlFUlJfcHJpbnRfZXJyb3JzKGJpb19lcnIpOwogCWlmIChidWYgIT0gTlVMTCkgQlVGX01FTV9mcmVlKGJ1Zik7CiAJaWYgKGF0ICE9IE5VTEwpIEFTTjFfVFlQRV9mcmVlKGF0KTsKLQlpZiAob3NrICE9IE5VTEwpIHNrX2ZyZWUob3NrKTsKKwlpZiAob3NrICE9IE5VTEwpIHNrX09QRU5TU0xfU1RSSU5HX2ZyZWUob3NrKTsKIAlPQkpfY2xlYW51cCgpOwogCWFwcHNfc2h1dGRvd24oKTsKIAlPUEVOU1NMX0VYSVQocmV0KTsKZGlmZiAtLWdpdCBhL2FwcHMvY2EuYyBiL2FwcHMvY2EuYwppbmRleCA2NTFjNWE2Li42YjhiMGVmIDEwMDY0NAotLS0gYS9hcHBzL2NhLmMKKysrIGIvYXBwcy9jYS5jCkBAIC02Myw3ICs2Myw2IEBACiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2luY2x1ZGUgPG9wZW5zc2wvY29uZi5oPgogI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KQEAgLTgzLDcgKzgyLDcgQEAKICMgICAgZWxzZQogIyAgICAgIGluY2x1ZGUgPHVuaXhsaWIuaD4KICMgICAgZW5kaWYKLSMgIGVsaWYgIWRlZmluZWQoT1BFTlNTTF9TWVNfVlhXT1JLUykgJiYgIWRlZmluZWQoT1BFTlNTTF9TWVNfV0lORE9XUykgJiYgIWRlZmluZWQoT1BFTlNTTF9TWVNfTkVUV0FSRSkgJiYgIWRlZmluZWQoX19UQU5ERU0pCisjICBlbGlmICFkZWZpbmVkKE9QRU5TU0xfU1lTX1ZYV09SS1MpICYmICFkZWZpbmVkKE9QRU5TU0xfU1lTX1dJTkRPV1MpICYmICFkZWZpbmVkKE9QRU5TU0xfU1lTX05FVFdBUkUpCiAjICAgIGluY2x1ZGUgPHN5cy9maWxlLmg+CiAjICBlbmRpZgogI2VuZGlmCkBAIC0yNTgsNiArMjU3LDcgQEAKIAlpbnQgZG91cGRhdGVkYj0wOwogCWxvbmcgY3JsZGF5cz0wOwogCWxvbmcgY3JsaG91cnM9MDsKKwlsb25nIGNybHNlYz0wOwogCWxvbmcgZXJyb3JsaW5lPSAtMTsKIAljaGFyICpjb25maWdmaWxlPU5VTEw7CiAJY2hhciAqbWQ9TlVMTDsKQEAgLTMwNSw3ICszMDUsOCBAQAogCUFTTjFfVElNRSAqdG1wdG07CiAJQVNOMV9JTlRFR0VSICp0bXBzZXI7CiAJY2hhciAqZjsKLQljb25zdCBjaGFyICpwLCAqKnBwOworCWNvbnN0IGNoYXIgKnA7CisJY2hhciAqIGNvbnN0ICpwcDsKIAlpbnQgaSxqOwogCWNvbnN0IEVWUF9NRCAqZGdzdD1OVUxMOwogCVNUQUNLX09GKENPTkZfVkFMVUUpICphdHRyaWJzPU5VTEw7CkBAIC00NTYsNiArNDU3LDExIEBACiAJCQlpZiAoLS1hcmdjIDwgMSkgZ290byBiYWQ7CiAJCQljcmxob3Vycz0gYXRvbCgqKCsrYXJndikpOwogCQkJfQorCQllbHNlIGlmIChzdHJjbXAoKmFyZ3YsIi1jcmxzZWMiKSA9PSAwKQorCQkJeworCQkJaWYgKC0tYXJnYyA8IDEpIGdvdG8gYmFkOworCQkJY3Jsc2VjID0gYXRvbCgqKCsrYXJndikpOworCQkJfQogCQllbHNlIGlmIChzdHJjbXAoKmFyZ3YsIi1pbmZpbGVzIikgPT0gMCkKIAkJCXsKIAkJCWFyZ2MtLTsKQEAgLTU0OSw4ICs1NTUsMTAgQEAKIAogCWlmIChiYWRvcHMpCiAJCXsKLQkJZm9yIChwcD1jYV91c2FnZTsgKCpwcCAhPSBOVUxMKTsgcHArKykKLQkJCUJJT19wcmludGYoYmlvX2VyciwiJXMiLCpwcCk7CisJCWNvbnN0IGNoYXIgKipwcDI7CisKKwkJZm9yIChwcDI9Y2FfdXNhZ2U7ICgqcHAyICE9IE5VTEwpOyBwcDIrKykKKwkJCUJJT19wcmludGYoYmlvX2VyciwiJXMiLCpwcDIpOwogCQlnb3RvIGVycjsKIAkJfQogCkBAIC04MjUsNyArODMzLDYgQEAKIAkvKiBsb29rdXAgd2hlcmUgdG8gd3JpdGUgbmV3IGNlcnRpZmljYXRlcyAqLwogCWlmICgob3V0ZGlyID09IE5VTEwpICYmIChyZXEpKQogCQl7Ci0JCXN0cnVjdCBzdGF0IHNiOwogCiAJCWlmICgob3V0ZGlyPU5DT05GX2dldF9zdHJpbmcoY29uZixzZWN0aW9uLEVOVl9ORVdfQ0VSVFNfRElSKSkKIAkJCT09IE5VTEwpCkBAIC04NDQsMjggKzg1MSwyNCBAQAogCSAgICAgICB0aGF0IHRvIGFjY2VzcygpLiAgSG93ZXZlciwgdGltZSdzIHRvbyBzaG9ydCB0byBkbyB0aGF0IGp1c3QKIAkgICAgICAgbm93LgogCSAgICAqLworI2lmbmRlZiBfV0lOMzIKIAkJaWYgKGFjY2VzcyhvdXRkaXIsUl9PS3xXX09LfFhfT0spICE9IDApCisjZWxzZQorCQlpZiAoX2FjY2VzcyhvdXRkaXIsUl9PS3xXX09LfFhfT0spICE9IDApCisjZW5kaWYKIAkJCXsKIAkJCUJJT19wcmludGYoYmlvX2VyciwiSSBhbSB1bmFibGUgdG8gYWNjZXNzIHRoZSAlcyBkaXJlY3RvcnlcbiIsb3V0ZGlyKTsKIAkJCXBlcnJvcihvdXRkaXIpOwogCQkJZ290byBlcnI7CiAJCQl9CiAKLQkJaWYgKHN0YXQob3V0ZGlyLCZzYikgIT0gMCkKLQkJCXsKLQkJCUJJT19wcmludGYoYmlvX2VyciwidW5hYmxlIHRvIHN0YXQoJXMpXG4iLG91dGRpcik7Ci0JCQlwZXJyb3Iob3V0ZGlyKTsKLQkJCWdvdG8gZXJyOwotCQkJfQotI2lmZGVmIFNfSVNESVIKLQkJaWYgKCFTX0lTRElSKHNiLnN0X21vZGUpKQorCQlpZiAoYXBwX2lzZGlyKG91dGRpcik8PTApCiAJCQl7CiAJCQlCSU9fcHJpbnRmKGJpb19lcnIsIiVzIG5lZWQgdG8gYmUgYSBkaXJlY3RvcnlcbiIsb3V0ZGlyKTsKIAkJCXBlcnJvcihvdXRkaXIpOwogCQkJZ290byBlcnI7CiAJCQl9CiAjZW5kaWYKLSNlbmRpZgogCQl9CiAKIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC04NzksOSArODgyLDkgQEAKIAlpZiAoZGIgPT0gTlVMTCkgZ290byBlcnI7CiAKIAkvKiBMZXRzIGNoZWNrIHNvbWUgZmllbGRzICovCi0JZm9yIChpPTA7IGk8c2tfbnVtKGRiLT5kYi0+ZGF0YSk7IGkrKykKKwlmb3IgKGk9MDsgaTxza19PUEVOU1NMX1BTVFJJTkdfbnVtKGRiLT5kYi0+ZGF0YSk7IGkrKykKIAkJewotCQlwcD0oY29uc3QgY2hhciAqKilza192YWx1ZShkYi0+ZGItPmRhdGEsaSk7CisJCXBwPXNrX09QRU5TU0xfUFNUUklOR192YWx1ZShkYi0+ZGItPmRhdGEsaSk7CiAJCWlmICgocHBbREJfdHlwZV1bMF0gIT0gREJfVFlQRV9SRVYpICYmCiAJCQkocHBbREJfcmV2X2RhdGVdWzBdICE9ICdcMCcpKQogCQkJewpAQCAtODk0LDcgKzg5Nyw3IEBACiAJCQlCSU9fcHJpbnRmKGJpb19lcnIsIiBpbiBlbnRyeSAlZFxuIiwgaSsxKTsKIAkJCWdvdG8gZXJyOwogCQkJfQotCQlpZiAoIWNoZWNrX3RpbWVfZm9ybWF0KHBwW0RCX2V4cF9kYXRlXSkpCisJCWlmICghY2hlY2tfdGltZV9mb3JtYXQoKGNoYXIgKilwcFtEQl9leHBfZGF0ZV0pKQogCQkJewogCQkJQklPX3ByaW50ZihiaW9fZXJyLCJlbnRyeSAlZDogaW52YWxpZCBleHBpcnkgZGF0ZVxuIixpKzEpOwogCQkJZ290byBlcnI7CkBAIC05MzQsNyArOTM3LDcgQEAKICNlbmRpZgogCQlUWFRfREJfd3JpdGUob3V0LGRiLT5kYik7CiAJCUJJT19wcmludGYoYmlvX2VyciwiJWQgZW50cmllcyBsb2FkZWQgZnJvbSB0aGUgZGF0YWJhc2VcbiIsCi0JCQlkYi0+ZGItPmRhdGEtPm51bSk7CisJCQkgICBza19PUEVOU1NMX1BTVFJJTkdfbnVtKGRiLT5kYi0+ZGF0YSkpOwogCQlCSU9fcHJpbnRmKGJpb19lcnIsImdlbmVyYXRpbmcgaW5kZXhcbiIpOwogCQl9CiAJCkBAIC0xMDI1LDYgKzEwMjgsMTcgQEAKIAkJZ290byBlcnI7CiAJCX0KIAorCWlmICghc3RyY21wKG1kLCAiZGVmYXVsdCIpKQorCQl7CisJCWludCBkZWZfbmlkOworCQlpZiAoRVZQX1BLRVlfZ2V0X2RlZmF1bHRfZGlnZXN0X25pZChwa2V5LCAmZGVmX25pZCkgPD0gMCkKKwkJCXsKKwkJCUJJT19wdXRzKGJpb19lcnIsIm5vIGRlZmF1bHQgZGlnZXN0XG4iKTsKKwkJCWdvdG8gZXJyOworCQkJfQorCQltZCA9IChjaGFyICopT0JKX25pZDJzbihkZWZfbmlkKTsKKwkJfQorCiAJaWYgKChkZ3N0PUVWUF9nZXRfZGlnZXN0YnluYW1lKG1kKSkgPT0gTlVMTCkKIAkJewogCQlCSU9fcHJpbnRmKGJpb19lcnIsIiVzIGlzIGFuIHVuc3VwcG9ydGVkIG1lc3NhZ2UgZGlnZXN0IHR5cGVcbiIsbWQpOwpAQCAtMTA5NCw5ICsxMTA4LDkgQEAKIAkJCWlmIChzdGFydGRhdGUgPT0gTlVMTCkKIAkJCQlFUlJfY2xlYXJfZXJyb3IoKTsKIAkJCX0KLQkJaWYgKHN0YXJ0ZGF0ZSAmJiAhQVNOMV9VVENUSU1FX3NldF9zdHJpbmcoTlVMTCxzdGFydGRhdGUpKQorCQlpZiAoc3RhcnRkYXRlICYmICFBU04xX1RJTUVfc2V0X3N0cmluZyhOVUxMLCBzdGFydGRhdGUpKQogCQkJewotCQkJQklPX3ByaW50ZihiaW9fZXJyLCJzdGFydCBkYXRlIGlzIGludmFsaWQsIGl0IHNob3VsZCBiZSBZWU1NRERISE1NU1NaXG4iKTsKKwkJCUJJT19wcmludGYoYmlvX2Vyciwic3RhcnQgZGF0ZSBpcyBpbnZhbGlkLCBpdCBzaG91bGQgYmUgWVlNTURESEhNTVNTWiBvciBZWVlZTU1EREhITU1TU1pcbiIpOwogCQkJZ290byBlcnI7CiAJCQl9CiAJCWlmIChzdGFydGRhdGUgPT0gTlVMTCkgc3RhcnRkYXRlPSJ0b2RheSI7CkBAIC0xMTA4LDkgKzExMjIsOSBAQAogCQkJaWYgKGVuZGRhdGUgPT0gTlVMTCkKIAkJCQlFUlJfY2xlYXJfZXJyb3IoKTsKIAkJCX0KLQkJaWYgKGVuZGRhdGUgJiYgIUFTTjFfVVRDVElNRV9zZXRfc3RyaW5nKE5VTEwsZW5kZGF0ZSkpCisJCWlmIChlbmRkYXRlICYmICFBU04xX1RJTUVfc2V0X3N0cmluZyhOVUxMLCBlbmRkYXRlKSkKIAkJCXsKLQkJCUJJT19wcmludGYoYmlvX2VyciwiZW5kIGRhdGUgaXMgaW52YWxpZCwgaXQgc2hvdWxkIGJlIFlZTU1EREhITU1TU1pcbiIpOworCQkJQklPX3ByaW50ZihiaW9fZXJyLCJlbmQgZGF0ZSBpcyBpbnZhbGlkLCBpdCBzaG91bGQgYmUgWVlNTURESEhNTVNTWiBvciBZWVlZTU1EREhITU1TU1pcbiIpOwogCQkJZ290byBlcnI7CiAJCQl9CiAKQEAgLTEzNzAsNyArMTM4NCw3IEBACiAJCQkJZ290byBlcnI7CiAJCQkJfQogCi0JCWlmICghY3JsZGF5cyAmJiAhY3JsaG91cnMpCisJCWlmICghY3JsZGF5cyAmJiAhY3JsaG91cnMgJiYgIWNybHNlYykKIAkJCXsKIAkJCWlmICghTkNPTkZfZ2V0X251bWJlcihjb25mLHNlY3Rpb24sCiAJCQkJRU5WX0RFRkFVTFRfQ1JMX0RBWVMsICZjcmxkYXlzKSkKQEAgLTEzNzksNyArMTM5Myw3IEBACiAJCQkJRU5WX0RFRkFVTFRfQ1JMX0hPVVJTLCAmY3JsaG91cnMpKQogCQkJCWNybGhvdXJzID0gMDsKIAkJCX0KLQkJaWYgKChjcmxkYXlzID09IDApICYmIChjcmxob3VycyA9PSAwKSkKKwkJaWYgKChjcmxkYXlzID09IDApICYmIChjcmxob3VycyA9PSAwKSAmJiAoY3Jsc2VjID09IDApKQogCQkJewogCQkJQklPX3ByaW50ZihiaW9fZXJyLCJjYW5ub3QgbG9va3VwIGhvdyBsb25nIHVudGlsIHRoZSBuZXh0IENSTCBpcyBpc3N1ZWRcbiIpOwogCQkJZ290byBlcnI7CkBAIC0xMzkzLDE0ICsxNDA3LDE5IEBACiAJCWlmICghdG1wdG0pIGdvdG8gZXJyOwogCQlYNTA5X2dtdGltZV9hZGoodG1wdG0sMCk7CiAJCVg1MDlfQ1JMX3NldF9sYXN0VXBkYXRlKGNybCwgdG1wdG0pOwkKLQkJWDUwOV9nbXRpbWVfYWRqKHRtcHRtLChjcmxkYXlzKjI0K2NybGhvdXJzKSo2MCo2MCk7CisJCWlmICghWDUwOV90aW1lX2Fkal9leCh0bXB0bSwgY3JsZGF5cywgY3JsaG91cnMqNjAqNjAgKyBjcmxzZWMsCisJCQlOVUxMKSkKKwkJCXsKKwkJCUJJT19wdXRzKGJpb19lcnIsICJlcnJvciBzZXR0aW5nIENSTCBuZXh0VXBkYXRlXG4iKTsKKwkJCWdvdG8gZXJyOworCQkJfQogCQlYNTA5X0NSTF9zZXRfbmV4dFVwZGF0ZShjcmwsIHRtcHRtKTsJCiAKIAkJQVNOMV9USU1FX2ZyZWUodG1wdG0pOwogCi0JCWZvciAoaT0wOyBpPHNrX251bShkYi0+ZGItPmRhdGEpOyBpKyspCisJCWZvciAoaT0wOyBpPHNrX09QRU5TU0xfUFNUUklOR19udW0oZGItPmRiLT5kYXRhKTsgaSsrKQogCQkJewotCQkJcHA9KGNvbnN0IGNoYXIgKiopc2tfdmFsdWUoZGItPmRiLT5kYXRhLGkpOworCQkJcHA9c2tfT1BFTlNTTF9QU1RSSU5HX3ZhbHVlKGRiLT5kYi0+ZGF0YSxpKTsKIAkJCWlmIChwcFtEQl90eXBlXVswXSA9PSBEQl9UWVBFX1JFVikKIAkJCQl7CiAJCQkJaWYgKChyPVg1MDlfUkVWT0tFRF9uZXcoKSkgPT0gTlVMTCkgZ290byBlcnI7CkBAIC0xNDI2LDE1ICsxNDQ1LDYgQEAKIAogCQkvKiB3ZSBub3cgaGF2ZSBhIENSTCAqLwogCQlpZiAodmVyYm9zZSkgQklPX3ByaW50ZihiaW9fZXJyLCJzaWduaW5nIENSTFxuIik7Ci0jaWZuZGVmIE9QRU5TU0xfTk9fRFNBCi0JCWlmIChwa2V5LT50eXBlID09IEVWUF9QS0VZX0RTQSkgCi0JCQlkZ3N0PUVWUF9kc3MxKCk7Ci0JCWVsc2UKLSNlbmRpZgotI2lmbmRlZiBPUEVOU1NMX05PX0VDRFNBCi0JCWlmIChwa2V5LT50eXBlID09IEVWUF9QS0VZX0VDKQotCQkJZGdzdD1FVlBfZWNkc2EoKTsKLSNlbmRpZgogCiAJCS8qIEFkZCBhbnkgZXh0ZW5zaW9ucyBhc2tlZCBmb3IgKi8KIApAQCAtMTQ2Nyw2ICsxNDc3LDEyIEBACiAJCWlmIChjcmxudW1iZXJmaWxlICE9IE5VTEwpCS8qIHdlIGhhdmUgYSBDUkwgbnVtYmVyIHRoYXQgbmVlZCB1cGRhdGluZyAqLwogCQkJaWYgKCFzYXZlX3NlcmlhbChjcmxudW1iZXJmaWxlLCJuZXciLGNybG51bWJlcixOVUxMKSkgZ290byBlcnI7CiAKKwkJaWYgKGNybG51bWJlcikKKwkJCXsKKwkJCUJOX2ZyZWUoY3JsbnVtYmVyKTsKKwkJCWNybG51bWJlciA9IE5VTEw7CisJCQl9CisKIAkJaWYgKCFYNTA5X0NSTF9zaWduKGNybCxwa2V5LGRnc3QpKSBnb3RvIGVycjsKIAogCQlQRU1fd3JpdGVfYmlvX1g1MDlfQ1JMKFNvdXQsY3JsKTsKQEAgLTE1MTksNiArMTUzNSw3IEBACiAJaWYgKGZyZWVfa2V5ICYmIGtleSkKIAkJT1BFTlNTTF9mcmVlKGtleSk7CiAJQk5fZnJlZShzZXJpYWwpOworCUJOX2ZyZWUoY3JsbnVtYmVyKTsKIAlmcmVlX2luZGV4KGRiKTsKIAlFVlBfUEtFWV9mcmVlKHBrZXkpOwogCWlmICh4NTA5KSBYNTA5X2ZyZWUoeDUwOSk7CkBAIC0xNjc3LDcgKzE2OTQsOSBAQAogCWludCBvaz0gLTEsaSxqLGxhc3QsbmlkOwogCWNvbnN0IGNoYXIgKnA7CiAJQ09ORl9WQUxVRSAqY3Y7Ci0JY2hhciAqcm93W0RCX05VTUJFUl0sKipycm93PU5VTEwsKippcm93PU5VTEw7CisJT1BFTlNTTF9TVFJJTkcgcm93W0RCX05VTUJFUl07CisJT1BFTlNTTF9TVFJJTkcgKmlyb3c9TlVMTDsKKwlPUEVOU1NMX1NUUklORyAqcnJvdz1OVUxMOwogCWNoYXIgYnVmWzI1XTsKIAogCXRtcHRtPUFTTjFfVVRDVElNRV9uZXcoKTsKQEAgLTE5MTksNyArMTkzOCw5IEBACiAKIAlpZiAoZGItPmF0dHJpYnV0ZXMudW5pcXVlX3N1YmplY3QpCiAJCXsKLQkJcnJvdz1UWFRfREJfZ2V0X2J5X2luZGV4KGRiLT5kYixEQl9uYW1lLHJvdyk7CisJCU9QRU5TU0xfU1RSSU5HICpjcm93PXJvdzsKKworCQlycm93PVRYVF9EQl9nZXRfYnlfaW5kZXgoZGItPmRiLERCX25hbWUsY3Jvdyk7CiAJCWlmIChycm93ICE9IE5VTEwpCiAJCQl7CiAJCQlCSU9fcHJpbnRmKGJpb19lcnIsCkBAIC0xOTk1LDExICsyMDE2LDExIEBACiAKIAlpZiAoc3RyY21wKHN0YXJ0ZGF0ZSwidG9kYXkiKSA9PSAwKQogCQlYNTA5X2dtdGltZV9hZGooWDUwOV9nZXRfbm90QmVmb3JlKHJldCksMCk7Ci0JZWxzZSBBU04xX1VUQ1RJTUVfc2V0X3N0cmluZyhYNTA5X2dldF9ub3RCZWZvcmUocmV0KSxzdGFydGRhdGUpOworCWVsc2UgQVNOMV9USU1FX3NldF9zdHJpbmcoWDUwOV9nZXRfbm90QmVmb3JlKHJldCksc3RhcnRkYXRlKTsKIAogCWlmIChlbmRkYXRlID09IE5VTEwpCi0JCVg1MDlfZ210aW1lX2FkaihYNTA5X2dldF9ub3RBZnRlcihyZXQpLChsb25nKTYwKjYwKjI0KmRheXMpOwotCWVsc2UgQVNOMV9VVENUSU1FX3NldF9zdHJpbmcoWDUwOV9nZXRfbm90QWZ0ZXIocmV0KSxlbmRkYXRlKTsKKwkJWDUwOV90aW1lX2Fkal9leChYNTA5X2dldF9ub3RBZnRlcihyZXQpLGRheXMsIDAsIE5VTEwpOworCWVsc2UgQVNOMV9USU1FX3NldF9zdHJpbmcoWDUwOV9nZXRfbm90QWZ0ZXIocmV0KSxlbmRkYXRlKTsKIAogCWlmICghWDUwOV9zZXRfc3ViamVjdF9uYW1lKHJldCxzdWJqZWN0KSkgZ290byBlcnI7CiAKQEAgLTIxMTksMjUgKzIxNDAsMTEgQEAKIAkJCX0KIAkJfQogCi0KLSNpZm5kZWYgT1BFTlNTTF9OT19EU0EKLQlpZiAocGtleS0+dHlwZSA9PSBFVlBfUEtFWV9EU0EpIGRnc3Q9RVZQX2RzczEoKTsKIAlwa3RtcD1YNTA5X2dldF9wdWJrZXkocmV0KTsKIAlpZiAoRVZQX1BLRVlfbWlzc2luZ19wYXJhbWV0ZXJzKHBrdG1wKSAmJgogCQkhRVZQX1BLRVlfbWlzc2luZ19wYXJhbWV0ZXJzKHBrZXkpKQogCQlFVlBfUEtFWV9jb3B5X3BhcmFtZXRlcnMocGt0bXAscGtleSk7CiAJRVZQX1BLRVlfZnJlZShwa3RtcCk7Ci0jZW5kaWYKLSNpZm5kZWYgT1BFTlNTTF9OT19FQ0RTQQotCWlmIChwa2V5LT50eXBlID09IEVWUF9QS0VZX0VDKQotCQlkZ3N0ID0gRVZQX2VjZHNhKCk7Ci0JcGt0bXAgPSBYNTA5X2dldF9wdWJrZXkocmV0KTsKLQlpZiAoRVZQX1BLRVlfbWlzc2luZ19wYXJhbWV0ZXJzKHBrdG1wKSAmJgotCQkhRVZQX1BLRVlfbWlzc2luZ19wYXJhbWV0ZXJzKHBrZXkpKQotCQlFVlBfUEtFWV9jb3B5X3BhcmFtZXRlcnMocGt0bXAsIHBrZXkpOwotCUVWUF9QS0VZX2ZyZWUocGt0bXApOwotI2VuZGlmCi0KIAogCWlmICghWDUwOV9zaWduKHJldCxwa2V5LGRnc3QpKQogCQlnb3RvIGVycjsKQEAgLTIyMzksNyArMjI0Niw3IEBACiAJICAgICB1bnNpZ25lZCBsb25nIG5hbWVvcHQsIGludCBkZWZhdWx0X29wLCBpbnQgZXh0X2NvcHkpCiAJewogCVNUQUNLX09GKENPTkZfVkFMVUUpICpzaz1OVUxMOwotCUxIQVNIICpwYXJtcz1OVUxMOworCUxIQVNIX09GKENPTkZfVkFMVUUpICpwYXJtcz1OVUxMOwogCVg1MDlfUkVRICpyZXE9TlVMTDsKIAlDT05GX1ZBTFVFICpjdj1OVUxMOwogCU5FVFNDQVBFX1NQS0kgKnNwa2kgPSBOVUxMOwpAQCAtMjM3MywxNSArMjM4MCw3IEBACiAKIHN0YXRpYyBpbnQgY2hlY2tfdGltZV9mb3JtYXQoY29uc3QgY2hhciAqc3RyKQogCXsKLQlBU04xX1RJTUUgdG07Ci0KLQl0bS5kYXRhPSh1bnNpZ25lZCBjaGFyICopc3RyOwotCXRtLmxlbmd0aD1zdHJsZW4oc3RyKTsKLQl0bS50eXBlPVZfQVNOMV9VVENUSU1FOwotCWlmIChBU04xX1RJTUVfY2hlY2soJnRtKSkKLQkJcmV0dXJuIDE7Ci0JdG0udHlwZT1WX0FTTjFfR0VORVJBTElaRURUSU1FOwotCXJldHVybiBBU04xX1RJTUVfY2hlY2soJnRtKTsKKwlyZXR1cm4gQVNOMV9USU1FX3NldF9zdHJpbmcoTlVMTCwgc3RyKTsKIAl9CiAKIHN0YXRpYyBpbnQgZG9fcmV2b2tlKFg1MDkgKng1MDksIENBX0RCICpkYiwgaW50IHR5cGUsIGNoYXIgKnZhbHVlKQpAQCAtMjM5Niw2ICsyMzk1LDggQEAKIAkJcm93W2ldPU5VTEw7CiAJcm93W0RCX25hbWVdPVg1MDlfTkFNRV9vbmVsaW5lKFg1MDlfZ2V0X3N1YmplY3RfbmFtZSh4NTA5KSxOVUxMLDApOwogCWJuID0gQVNOMV9JTlRFR0VSX3RvX0JOKFg1MDlfZ2V0X3NlcmlhbE51bWJlcih4NTA5KSxOVUxMKTsKKwlpZiAoIWJuKQorCQlnb3RvIGVycjsKIAlpZiAoQk5faXNfemVybyhibikpCiAJCXJvd1tEQl9zZXJpYWxdPUJVRl9zdHJkdXAoIjAwIik7CiAJZWxzZQpAQCAtMjQ2NSw3ICsyNDY2LDcgQEAKIAkJZ290byBlcnI7CiAKIAkJfQotCWVsc2UgaWYgKGluZGV4X25hbWVfY21wKChjb25zdCBjaGFyICoqKXJvdywoY29uc3QgY2hhciAqKilycm93KSkKKwllbHNlIGlmIChpbmRleF9uYW1lX2NtcF9ub2NvbnN0KHJvdywgcnJvdykpCiAJCXsKIAkJQklPX3ByaW50ZihiaW9fZXJyLCJFUlJPUjpuYW1lIGRvZXMgbm90IG1hdGNoICVzXG4iLAogCQkJICAgcm93W0RCX25hbWVdKTsKQEAgLTI2MTQsOSArMjYxNSw5IEBACiAJZWxzZQogCQlhX3kyayA9IDA7CiAKLQlmb3IgKGkgPSAwOyBpIDwgc2tfbnVtKGRiLT5kYi0+ZGF0YSk7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgc2tfT1BFTlNTTF9QU1RSSU5HX251bShkYi0+ZGItPmRhdGEpOyBpKyspCiAJCXsKLQkJcnJvdyA9IChjaGFyICoqKSBza192YWx1ZShkYi0+ZGItPmRhdGEsIGkpOworCQlycm93ID0gc2tfT1BFTlNTTF9QU1RSSU5HX3ZhbHVlKGRiLT5kYi0+ZGF0YSwgaSk7CiAKIAkJaWYgKHJyb3dbREJfdHlwZV1bMF0gPT0gJ1YnKQogCQkgCXsKQEAgLTI4NjMsMjIgKzI4NjQsMTMgQEAKIAlwPShjaGFyICopc3RyLT5kYXRhOwogCWZvciAoaj1zdHItPmxlbmd0aDsgaj4wOyBqLS0pCiAJCXsKLSNpZmRlZiBDSEFSU0VUX0VCQ0RJQwotCQlpZiAoKCpwID49IDB4MjApICYmICgqcCA8PSAweDdlKSkKLQkJCUJJT19wcmludGYoYnAsIiVjIixvc190b2ViY2RpY1sqcF0pOwotI2Vsc2UKIAkJaWYgKCgqcCA+PSAnICcpICYmICgqcCA8PSAnficpKQogCQkJQklPX3ByaW50ZihicCwiJWMiLCpwKTsKLSNlbmRpZgogCQllbHNlIGlmICgqcCAmIDB4ODApCiAJCQlCSU9fcHJpbnRmKGJwLCJcXDB4JTAyWCIsKnApOwogCQllbHNlIGlmICgodW5zaWduZWQgY2hhcikqcCA9PSAweGY3KQogCQkJQklPX3ByaW50ZihicCwiXj8iKTsKLSNpZmRlZiBDSEFSU0VUX0VCQ0RJQwotCQllbHNlCUJJT19wcmludGYoYnAsIl4lYyIsb3NfdG9lYmNkaWNbKnArMHg0MF0pOwotI2Vsc2UKIAkJZWxzZQlCSU9fcHJpbnRmKGJwLCJeJWMiLCpwKydAJyk7Ci0jZW5kaWYKIAkJcCsrOwogCQl9CiAJQklPX3ByaW50ZihicCwiJ1xuIik7CmRpZmYgLS1naXQgYS9hcHBzL2NpcGhlcnMuYyBiL2FwcHMvY2lwaGVycy5jCmluZGV4IDQzZjBhYzUuLjNkNGM2MGQgMTAwNjQ0Ci0tLSBhL2FwcHMvY2lwaGVycy5jCisrKyBiL2FwcHMvY2lwaGVycy5jCkBAIC03MSw3ICs3MSw4IEBACiAKIHN0YXRpYyBjb25zdCBjaGFyICpjaXBoZXJzX3VzYWdlW109ewogInVzYWdlOiBjaXBoZXJzIGFyZ3NcbiIsCi0iIC12ICAgICAgICAgIC0gdmVyYm9zZSBtb2RlLCBhIHRleHR1YWwgbGlzdGluZyBvZiB0aGUgY2lwaGVycyBpbiBTU0xlYXlcbiIsCisiIC12ICAgICAgICAgIC0gdmVyYm9zZSBtb2RlLCBhIHRleHR1YWwgbGlzdGluZyBvZiB0aGUgU1NML1RMUyBjaXBoZXJzIGluIE9wZW5TU0xcbiIsCisiIC1WICAgICAgICAgIC0gZXZlbiBtb3JlIHZlcmJvc2VcbiIsCiAiIC1zc2wyICAgICAgIC0gU1NMMiBtb2RlXG4iLAogIiAtc3NsMyAgICAgICAtIFNTTDMgbW9kZVxuIiwKICIgLXRsczEgICAgICAgLSBUTFMxIG1vZGVcbiIsCkBAIC04MywxNCArODQsMTQgQEAKIGludCBNQUlOKGludCBhcmdjLCBjaGFyICoqYXJndikKIAl7CiAJaW50IHJldD0xLGk7Ci0JaW50IHZlcmJvc2U9MDsKKwlpbnQgdmVyYm9zZT0wLFZlcmJvc2U9MDsKIAljb25zdCBjaGFyICoqcHA7CiAJY29uc3QgY2hhciAqcDsKIAlpbnQgYmFkb3BzPTA7CiAJU1NMX0NUWCAqY3R4PU5VTEw7CiAJU1NMICpzc2w9TlVMTDsKIAljaGFyICpjaXBoZXJzPU5VTEw7Ci0JU1NMX01FVEhPRCAqbWV0aD1OVUxMOworCWNvbnN0IFNTTF9NRVRIT0QgKm1ldGg9TlVMTDsKIAlTVEFDS19PRihTU0xfQ0lQSEVSKSAqc2s7CiAJY2hhciBidWZbNTEyXTsKIAlCSU8gKlNURG91dD1OVUxMOwpAQCAtMTE0LDYgKzExNSw4IEBACiAJU1REb3V0ID0gQklPX3B1c2godG1wYmlvLCBTVERvdXQpOwogCX0KICNlbmRpZgorCWlmICghbG9hZF9jb25maWcoYmlvX2VyciwgTlVMTCkpCisJCWdvdG8gZW5kOwogCiAJYXJnYy0tOwogCWFyZ3YrKzsKQEAgLTEyMSw2ICsxMjQsOCBAQAogCQl7CiAJCWlmIChzdHJjbXAoKmFyZ3YsIi12IikgPT0gMCkKIAkJCXZlcmJvc2U9MTsKKwkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCItViIpID09IDApCisJCQl2ZXJib3NlPVZlcmJvc2U9MTsKICNpZm5kZWYgT1BFTlNTTF9OT19TU0wyCiAJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiLXNzbDIiKSA9PSAwKQogCQkJbWV0aD1TU0x2Ml9jbGllbnRfbWV0aG9kKCk7CkBAIC0xNzksMTUgKzE4NCwzMyBAQAogCQkJfQogCQlCSU9fcHJpbnRmKFNURG91dCwiXG4iKTsKIAkJfQotCWVsc2UKKwllbHNlIC8qIHZlcmJvc2UgKi8KIAkJewogCQlzaz1TU0xfZ2V0X2NpcGhlcnMoc3NsKTsKIAogCQlmb3IgKGk9MDsgaTxza19TU0xfQ0lQSEVSX251bShzayk7IGkrKykKIAkJCXsKLQkJCUJJT19wdXRzKFNURG91dCxTU0xfQ0lQSEVSX2Rlc2NyaXB0aW9uKAotCQkJCXNrX1NTTF9DSVBIRVJfdmFsdWUoc2ssaSksCi0JCQkJYnVmLHNpemVvZiBidWYpKTsKKwkJCVNTTF9DSVBIRVIgKmM7CisKKwkJCWMgPSBza19TU0xfQ0lQSEVSX3ZhbHVlKHNrLGkpOworCQkJCisJCQlpZiAoVmVyYm9zZSkKKwkJCQl7CisJCQkJdW5zaWduZWQgbG9uZyBpZCA9IGMtPmlkOworCQkJCWludCBpZDAgPSAoaW50KShpZCA+PiAyNCk7CisJCQkJaW50IGlkMSA9IChpbnQpKChpZCA+PiAxNikgJiAweGZmTCk7CisJCQkJaW50IGlkMiA9IChpbnQpKChpZCA+PiA4KSAmIDB4ZmZMKTsKKwkJCQlpbnQgaWQzID0gKGludCkoaWQgJiAweGZmTCk7CisJCQkJCisJCQkJaWYgKChpZCAmIDB4ZmYwMDAwMDBMKSA9PSAweDAyMDAwMDAwTCkKKwkJCQkJQklPX3ByaW50ZihTVERvdXQsICIgICAgIDB4JTAyWCwweCUwMlgsMHglMDJYIC0gIiwgaWQxLCBpZDIsIGlkMyk7IC8qIFNTTDIgY2lwaGVyICovCisJCQkJZWxzZSBpZiAoKGlkICYgMHhmZjAwMDAwMEwpID09IDB4MDMwMDAwMDBMKQorCQkJCQlCSU9fcHJpbnRmKFNURG91dCwgIiAgICAgICAgICAweCUwMlgsMHglMDJYIC0gIiwgaWQyLCBpZDMpOyAvKiBTU0wzIGNpcGhlciAqLworCQkJCWVsc2UKKwkJCQkJQklPX3ByaW50ZihTVERvdXQsICIweCUwMlgsMHglMDJYLDB4JTAyWCwweCUwMlggLSAiLCBpZDAsIGlkMSwgaWQyLCBpZDMpOyAvKiB3aGF0ZXZlciAqLworCQkJCX0KKworCQkJQklPX3B1dHMoU1REb3V0LFNTTF9DSVBIRVJfZGVzY3JpcHRpb24oYyxidWYsc2l6ZW9mIGJ1ZikpOwogCQkJfQogCQl9CiAKZGlmZiAtLWdpdCBhL2FwcHMvY21zLmMgYi9hcHBzL2Ntcy5jCmluZGV4IDZkMjI3YWMuLmQyOWE4ODQgMTAwNjQ0Ci0tLSBhL2FwcHMvY21zLmMKKysrIGIvYXBwcy9jbXMuYwpAQCAtNzEsOCArNzEsOSBAQAogc3RhdGljIGludCBzYXZlX2NlcnRzKGNoYXIgKnNpZ25lcmZpbGUsIFNUQUNLX09GKFg1MDkpICpzaWduZXJzKTsKIHN0YXRpYyBpbnQgY21zX2NiKGludCBvaywgWDUwOV9TVE9SRV9DVFggKmN0eCk7CiBzdGF0aWMgdm9pZCByZWNlaXB0X3JlcXVlc3RfcHJpbnQoQklPICpvdXQsIENNU19Db250ZW50SW5mbyAqY21zKTsKLXN0YXRpYyBDTVNfUmVjZWlwdFJlcXVlc3QgKm1ha2VfcmVjZWlwdF9yZXF1ZXN0KFNUQUNLICpycl90bywgaW50IHJyX2FsbG9yZmlyc3QsCi0JCQkJCQkJCVNUQUNLICpycl9mcm9tKTsKK3N0YXRpYyBDTVNfUmVjZWlwdFJlcXVlc3QgKm1ha2VfcmVjZWlwdF9yZXF1ZXN0KFNUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSAqcnJfdG8sCisJCQkJCQlpbnQgcnJfYWxsb3JmaXJzdCwKKwkJCQkJU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpICpycl9mcm9tKTsKIAogI2RlZmluZSBTTUlNRV9PUAkweDEwCiAjZGVmaW5lIFNNSU1FX0lQCTB4MjAKQEAgLTk0LDYgKzk1LDggQEAKICNkZWZpbmUgU01JTUVfU0lHTl9SRUNFSVBUCSgxNSB8IFNNSU1FX0lQIHwgU01JTUVfT1ApCiAjZGVmaW5lIFNNSU1FX1ZFUklGWV9SRUNFSVBUCSgxNiB8IFNNSU1FX0lQKQogCitpbnQgdmVyaWZ5X2VyciA9IDA7CisKIGludCBNQUlOKGludCwgY2hhciAqKik7CiAKIGludCBNQUlOKGludCBhcmdjLCBjaGFyICoqYXJndikKQEAgLTEwNSw3ICsxMDgsNyBAQAogCWNvbnN0IGNoYXIgKmlubW9kZSA9ICJyIiwgKm91dG1vZGUgPSAidyI7CiAJY2hhciAqaW5maWxlID0gTlVMTCwgKm91dGZpbGUgPSBOVUxMLCAqcmN0ZmlsZSA9IE5VTEw7CiAJY2hhciAqc2lnbmVyZmlsZSA9IE5VTEwsICpyZWNpcGZpbGUgPSBOVUxMOwotCVNUQUNLICpza3NpZ25lcnMgPSBOVUxMLCAqc2trZXlzID0gTlVMTDsKKwlTVEFDS19PRihPUEVOU1NMX1NUUklORykgKnNrc2lnbmVycyA9IE5VTEwsICpza2tleXMgPSBOVUxMOwogCWNoYXIgKmNlcnRmaWxlID0gTlVMTCwgKmtleWZpbGUgPSBOVUxMLCAqY29udGZpbGU9TlVMTDsKIAljaGFyICpjZXJ0c291dGZpbGUgPSBOVUxMOwogCWNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciA9IE5VTEw7CkBAIC0xMTYsOSArMTE5LDEwIEBACiAJU1RBQ0tfT0YoWDUwOSkgKmVuY2VydHMgPSBOVUxMLCAqb3RoZXIgPSBOVUxMOwogCUJJTyAqaW4gPSBOVUxMLCAqb3V0ID0gTlVMTCwgKmluZGF0YSA9IE5VTEwsICpyY3RpbiA9IE5VTEw7CiAJaW50IGJhZGFyZyA9IDA7Ci0JaW50IGZsYWdzID0gQ01TX0RFVEFDSEVEOworCWludCBmbGFncyA9IENNU19ERVRBQ0hFRCwgbm9vdXQgPSAwLCBwcmludCA9IDA7CisJaW50IHZlcmlmeV9yZXRjb2RlID0gMDsKIAlpbnQgcnJfcHJpbnQgPSAwLCBycl9hbGxvcmZpcnN0ID0gLTE7Ci0JU1RBQ0sgKnJyX3RvID0gTlVMTCwgKnJyX2Zyb20gPSBOVUxMOworCVNUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSAqcnJfdG8gPSBOVUxMLCAqcnJfZnJvbSA9IE5VTEw7CiAJQ01TX1JlY2VpcHRSZXF1ZXN0ICpyciA9IE5VTEw7CiAJY2hhciAqdG8gPSBOVUxMLCAqZnJvbSA9IE5VTEwsICpzdWJqZWN0ID0gTlVMTDsKIAljaGFyICpDQWZpbGUgPSBOVUxMLCAqQ0FwYXRoID0gTlVMTDsKQEAgLTE2Niw2ICsxNzAsOCBAQAogCQkJb3BlcmF0aW9uID0gU01JTUVfUkVTSUdOOwogCQllbHNlIGlmICghc3RyY21wICgqYXJncywgIi12ZXJpZnkiKSkKIAkJCW9wZXJhdGlvbiA9IFNNSU1FX1ZFUklGWTsKKwkJZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3MsICItdmVyaWZ5X3JldGNvZGUiKSkKKwkJCXZlcmlmeV9yZXRjb2RlID0gMTsKIAkJZWxzZSBpZiAoIXN0cmNtcCgqYXJncywiLXZlcmlmeV9yZWNlaXB0IikpCiAJCQl7CiAJCQlvcGVyYXRpb24gPSBTTUlNRV9WRVJJRllfUkVDRUlQVDsKQEAgLTI1MiwyMSArMjU4LDE3IEBACiAJCWVsc2UgaWYgKCFzdHJjbXAgKCphcmdzLCAiLW5vX2F0dHJfdmVyaWZ5IikpCiAJCQkJZmxhZ3MgfD0gQ01TX05PX0FUVFJfVkVSSUZZOwogCQllbHNlIGlmICghc3RyY21wICgqYXJncywgIi1zdHJlYW0iKSkKLQkJCQl7Ci0JCQkJYXJncysrOwotCQkJCWNvbnRpbnVlOwotCQkJCX0KKwkJCQlmbGFncyB8PSBDTVNfU1RSRUFNOwogCQllbHNlIGlmICghc3RyY21wICgqYXJncywgIi1pbmRlZiIpKQotCQkJCXsKLQkJCQlhcmdzKys7Ci0JCQkJY29udGludWU7Ci0JCQkJfQorCQkJCWZsYWdzIHw9IENNU19TVFJFQU07CiAJCWVsc2UgaWYgKCFzdHJjbXAgKCphcmdzLCAiLW5vaW5kZWYiKSkKIAkJCQlmbGFncyAmPSB+Q01TX1NUUkVBTTsKIAkJZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3MsICItbm9vbGRtaW1lIikpCiAJCQkJZmxhZ3MgfD0gQ01TX05PT0xETUlNRVRZUEU7CiAJCWVsc2UgaWYgKCFzdHJjbXAgKCphcmdzLCAiLWNybGZlb2wiKSkKIAkJCQlmbGFncyB8PSBDTVNfQ1JMRkVPTDsKKwkJZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3MsICItbm9vdXQiKSkKKwkJCQlub291dCA9IDE7CiAJCWVsc2UgaWYgKCFzdHJjbXAgKCphcmdzLCAiLXJlY2VpcHRfcmVxdWVzdF9wcmludCIpKQogCQkJCXJyX3ByaW50ID0gMTsKIAkJZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3MsICItcmVjZWlwdF9yZXF1ZXN0X2FsbCIpKQpAQCAtMjc5LDggKzI4MSw4IEBACiAJCQkJZ290byBhcmdlcnI7CiAJCQlhcmdzKys7CiAJCQlpZiAoIXJyX2Zyb20pCi0JCQkJcnJfZnJvbSA9IHNrX25ld19udWxsKCk7Ci0JCQlza19wdXNoKHJyX2Zyb20sICphcmdzKTsKKwkJCQlycl9mcm9tID0gc2tfT1BFTlNTTF9TVFJJTkdfbmV3X251bGwoKTsKKwkJCXNrX09QRU5TU0xfU1RSSU5HX3B1c2gocnJfZnJvbSwgKmFyZ3MpOwogCQkJfQogCQllbHNlIGlmICghc3RyY21wKCphcmdzLCItcmVjZWlwdF9yZXF1ZXN0X3RvIikpCiAJCQl7CkBAIC0yODgsOSArMjkwLDE0IEBACiAJCQkJZ290byBhcmdlcnI7CiAJCQlhcmdzKys7CiAJCQlpZiAoIXJyX3RvKQotCQkJCXJyX3RvID0gc2tfbmV3X251bGwoKTsKLQkJCXNrX3B1c2gocnJfdG8sICphcmdzKTsKKwkJCQlycl90byA9IHNrX09QRU5TU0xfU1RSSU5HX25ld19udWxsKCk7CisJCQlza19PUEVOU1NMX1NUUklOR19wdXNoKHJyX3RvLCAqYXJncyk7CiAJCQl9CisJCWVsc2UgaWYgKCFzdHJjbXAgKCphcmdzLCAiLXByaW50IikpCisJCQkJeworCQkJCW5vb3V0ID0gMTsKKwkJCQlwcmludCA9IDE7CisJCQkJfQogCQllbHNlIGlmICghc3RyY21wKCphcmdzLCItc2VjcmV0a2V5IikpCiAJCQl7CiAJCQlsb25nIGx0bXA7CkBAIC0zODAsMTMgKzM4NywxMyBAQAogCQkJaWYgKHNpZ25lcmZpbGUpCiAJCQkJewogCQkJCWlmICghc2tzaWduZXJzKQotCQkJCQlza3NpZ25lcnMgPSBza19uZXdfbnVsbCgpOwotCQkJCXNrX3B1c2goc2tzaWduZXJzLCBzaWduZXJmaWxlKTsKKwkJCQkJc2tzaWduZXJzID0gc2tfT1BFTlNTTF9TVFJJTkdfbmV3X251bGwoKTsKKwkJCQlza19PUEVOU1NMX1NUUklOR19wdXNoKHNrc2lnbmVycywgc2lnbmVyZmlsZSk7CiAJCQkJaWYgKCFrZXlmaWxlKQogCQkJCQlrZXlmaWxlID0gc2lnbmVyZmlsZTsKIAkJCQlpZiAoIXNra2V5cykKLQkJCQkJc2trZXlzID0gc2tfbmV3X251bGwoKTsKLQkJCQlza19wdXNoKHNra2V5cywga2V5ZmlsZSk7CisJCQkJCXNra2V5cyA9IHNrX09QRU5TU0xfU1RSSU5HX25ld19udWxsKCk7CisJCQkJc2tfT1BFTlNTTF9TVFJJTkdfcHVzaChza2tleXMsIGtleWZpbGUpOwogCQkJCWtleWZpbGUgPSBOVUxMOwogCQkJCX0KIAkJCXNpZ25lcmZpbGUgPSAqKythcmdzOwpAQCAtNDI4LDEyICs0MzUsMTIgQEAKIAkJCQkJZ290byBhcmdlcnI7CiAJCQkJCX0KIAkJCQlpZiAoIXNrc2lnbmVycykKLQkJCQkJc2tzaWduZXJzID0gc2tfbmV3X251bGwoKTsKLQkJCQlza19wdXNoKHNrc2lnbmVycywgc2lnbmVyZmlsZSk7CisJCQkJCXNrc2lnbmVycyA9IHNrX09QRU5TU0xfU1RSSU5HX25ld19udWxsKCk7CisJCQkJc2tfT1BFTlNTTF9TVFJJTkdfcHVzaChza3NpZ25lcnMsIHNpZ25lcmZpbGUpOwogCQkJCXNpZ25lcmZpbGUgPSBOVUxMOwogCQkJCWlmICghc2trZXlzKQotCQkJCQlza2tleXMgPSBza19uZXdfbnVsbCgpOwotCQkJCXNrX3B1c2goc2trZXlzLCBrZXlmaWxlKTsKKwkJCQkJc2trZXlzID0gc2tfT1BFTlNTTF9TVFJJTkdfbmV3X251bGwoKTsKKwkJCQlza19PUEVOU1NMX1NUUklOR19wdXNoKHNra2V5cywga2V5ZmlsZSk7CiAJCQkJfQogCQkJa2V5ZmlsZSA9ICorK2FyZ3M7CiAJCQl9CkBAIC01MzIsMTMgKzUzOSwxMyBAQAogCQlpZiAoc2lnbmVyZmlsZSkKIAkJCXsKIAkJCWlmICghc2tzaWduZXJzKQotCQkJCXNrc2lnbmVycyA9IHNrX25ld19udWxsKCk7Ci0JCQlza19wdXNoKHNrc2lnbmVycywgc2lnbmVyZmlsZSk7CisJCQkJc2tzaWduZXJzID0gc2tfT1BFTlNTTF9TVFJJTkdfbmV3X251bGwoKTsKKwkJCXNrX09QRU5TU0xfU1RSSU5HX3B1c2goc2tzaWduZXJzLCBzaWduZXJmaWxlKTsKIAkJCWlmICghc2trZXlzKQotCQkJCXNra2V5cyA9IHNrX25ld19udWxsKCk7CisJCQkJc2trZXlzID0gc2tfT1BFTlNTTF9TVFJJTkdfbmV3X251bGwoKTsKIAkJCWlmICgha2V5ZmlsZSkKIAkJCQlrZXlmaWxlID0gc2lnbmVyZmlsZTsKLQkJCXNrX3B1c2goc2trZXlzLCBrZXlmaWxlKTsKKwkJCXNrX09QRU5TU0xfU1RSSU5HX3B1c2goc2trZXlzLCBrZXlmaWxlKTsKIAkJCX0KIAkJaWYgKCFza3NpZ25lcnMpCiAJCQl7CkBAIC02OTcsNyArNzA0LDcgQEAKIAogCQlpZiAoc2VjcmV0X2tleSAmJiAhc2VjcmV0X2tleWlkKQogCQkJewotCQkJQklPX3ByaW50ZihiaW9fZXJyLCAiTm8gc2VjdHJlIGtleSBpZFxuIik7CisJCQlCSU9fcHJpbnRmKGJpb19lcnIsICJObyBzZWNyZXQga2V5IGlkXG4iKTsKIAkJCWdvdG8gZW5kOwogCQkJfQogCkBAIC04NzMsNyArODgwLDcgQEAKIAkJewogCQlpZiAoIShzdG9yZSA9IHNldHVwX3ZlcmlmeShiaW9fZXJyLCBDQWZpbGUsIENBcGF0aCkpKQogCQkJZ290byBlbmQ7Ci0JCVg1MDlfU1RPUkVfc2V0X3ZlcmlmeV9jYl9mdW5jKHN0b3JlLCBjbXNfY2IpOworCQlYNTA5X1NUT1JFX3NldF92ZXJpZnlfY2Ioc3RvcmUsIGNtc19jYik7CiAJCWlmICh2cG0pCiAJCQlYNTA5X1NUT1JFX3NldDFfcGFyYW0oc3RvcmUsIHZwbSk7CiAJCX0KQEAgLTk3MywxMSArOTgwLDExIEBACiAJCQl9CiAJCWVsc2UKIAkJCWZsYWdzIHw9IENNU19SRVVTRV9ESUdFU1Q7Ci0JCWZvciAoaSA9IDA7IGkgPCBza19udW0oc2tzaWduZXJzKTsgaSsrKQorCQlmb3IgKGkgPSAwOyBpIDwgc2tfT1BFTlNTTF9TVFJJTkdfbnVtKHNrc2lnbmVycyk7IGkrKykKIAkJCXsKIAkJCUNNU19TaWduZXJJbmZvICpzaTsKLQkJCXNpZ25lcmZpbGUgPSBza192YWx1ZShza3NpZ25lcnMsIGkpOwotCQkJa2V5ZmlsZSA9IHNrX3ZhbHVlKHNra2V5cywgaSk7CisJCQlzaWduZXJmaWxlID0gc2tfT1BFTlNTTF9TVFJJTkdfdmFsdWUoc2tzaWduZXJzLCBpKTsKKwkJCWtleWZpbGUgPSBza19PUEVOU1NMX1NUUklOR192YWx1ZShza2tleXMsIGkpOwogCQkJc2lnbmVyID0gbG9hZF9jZXJ0KGJpb19lcnIsIHNpZ25lcmZpbGUsRk9STUFUX1BFTSwgTlVMTCwKIAkJCQkJZSwgInNpZ25lciBjZXJ0aWZpY2F0ZSIpOwogCQkJaWYgKCFzaWduZXIpCkBAIC0xMDc1LDYgKzEwODIsOCBAQAogCQllbHNlCiAJCQl7CiAJCQlCSU9fcHJpbnRmKGJpb19lcnIsICJWZXJpZmljYXRpb24gZmFpbHVyZVxuIik7CisJCQlpZiAodmVyaWZ5X3JldGNvZGUpCisJCQkJcmV0ID0gdmVyaWZ5X2VyciArIDMyOwogCQkJZ290byBlbmQ7CiAJCQl9CiAJCWlmIChzaWduZXJmaWxlKQpAQCAtMTEwNyw3ICsxMTE2LDEyIEBACiAJCX0KIAllbHNlCiAJCXsKLQkJaWYgKG91dGZvcm1hdCA9PSBGT1JNQVRfU01JTUUpCisJCWlmIChub291dCkKKwkJCXsKKwkJCWlmIChwcmludCkKKwkJCQlDTVNfQ29udGVudEluZm9fcHJpbnRfY3R4KG91dCwgY21zLCAwLCBOVUxMKTsKKwkJCX0KKwkJZWxzZSBpZiAob3V0Zm9ybWF0ID09IEZPUk1BVF9TTUlNRSkKIAkJCXsKIAkJCWlmICh0bykKIAkJCQlCSU9fcHJpbnRmKG91dCwgIlRvOiAlc1xuIiwgdG8pOwpAQCAtMTEyMSw5ICsxMTM1LDkgQEAKIAkJCQlyZXQgPSBTTUlNRV93cml0ZV9DTVMob3V0LCBjbXMsIGluLCBmbGFncyk7CiAJCQl9CiAJCWVsc2UgaWYgKG91dGZvcm1hdCA9PSBGT1JNQVRfUEVNKSAKLQkJCXJldCA9IFBFTV93cml0ZV9iaW9fQ01TKG91dCwgY21zKTsKKwkJCXJldCA9IFBFTV93cml0ZV9iaW9fQ01TX3N0cmVhbShvdXQsIGNtcywgaW4sIGZsYWdzKTsKIAkJZWxzZSBpZiAob3V0Zm9ybWF0ID09IEZPUk1BVF9BU04xKSAKLQkJCXJldCA9IGkyZF9DTVNfYmlvKG91dCxjbXMpOworCQkJcmV0ID0gaTJkX0NNU19iaW9fc3RyZWFtKG91dCxjbXMsIGluLCBmbGFncyk7CiAJCWVsc2UKIAkJCXsKIAkJCUJJT19wcmludGYoYmlvX2VyciwgIkJhZCBvdXRwdXQgZm9ybWF0IGZvciBDTVMgZmlsZVxuIik7CkBAIC0xMTQ2LDkgKzExNjAsOSBAQAogCWlmICh2cG0pCiAJCVg1MDlfVkVSSUZZX1BBUkFNX2ZyZWUodnBtKTsKIAlpZiAoc2tzaWduZXJzKQotCQlza19mcmVlKHNrc2lnbmVycyk7CisJCXNrX09QRU5TU0xfU1RSSU5HX2ZyZWUoc2tzaWduZXJzKTsKIAlpZiAoc2trZXlzKQotCQlza19mcmVlKHNra2V5cyk7CisJCXNrX09QRU5TU0xfU1RSSU5HX2ZyZWUoc2trZXlzKTsKIAlpZiAoc2VjcmV0X2tleSkKIAkJT1BFTlNTTF9mcmVlKHNlY3JldF9rZXkpOwogCWlmIChzZWNyZXRfa2V5aWQpCkBAIC0xMTU4LDkgKzExNzIsOSBAQAogCWlmIChycikKIAkJQ01TX1JlY2VpcHRSZXF1ZXN0X2ZyZWUocnIpOwogCWlmIChycl90bykKLQkJc2tfZnJlZShycl90byk7CisJCXNrX09QRU5TU0xfU1RSSU5HX2ZyZWUocnJfdG8pOwogCWlmIChycl9mcm9tKQotCQlza19mcmVlKHJyX2Zyb20pOworCQlza19PUEVOU1NMX1NUUklOR19mcmVlKHJyX2Zyb20pOwogCVg1MDlfU1RPUkVfZnJlZShzdG9yZSk7CiAJWDUwOV9mcmVlKGNlcnQpOwogCVg1MDlfZnJlZShyZWNpcCk7CkBAIC0xMTk5LDYgKzEyMTMsOCBAQAogCiAJZXJyb3IgPSBYNTA5X1NUT1JFX0NUWF9nZXRfZXJyb3IoY3R4KTsKIAorCXZlcmlmeV9lcnIgPSBlcnJvcjsKKwogCWlmICgoZXJyb3IgIT0gWDUwOV9WX0VSUl9OT19FWFBMSUNJVF9QT0xJQ1kpCiAJCSYmICgoZXJyb3IgIT0gWDUwOV9WX09LKSB8fCAob2sgIT0gMikpKQogCQlyZXR1cm4gb2s7CkBAIC0xMjgwLDcgKzEyOTYsNyBAQAogCQl9CiAJfQogCi1zdGF0aWMgU1RBQ0tfT0YoR0VORVJBTF9OQU1FUykgKm1ha2VfbmFtZXNfc3RhY2soU1RBQ0sgKm5zKQorc3RhdGljIFNUQUNLX09GKEdFTkVSQUxfTkFNRVMpICptYWtlX25hbWVzX3N0YWNrKFNUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSAqbnMpCiAJewogCWludCBpOwogCVNUQUNLX09GKEdFTkVSQUxfTkFNRVMpICpyZXQ7CkBAIC0xMjg5LDEyICsxMzA1LDEwIEBACiAJcmV0ID0gc2tfR0VORVJBTF9OQU1FU19uZXdfbnVsbCgpOwogCWlmICghcmV0KQogCQlnb3RvIGVycjsKLQlmb3IgKGkgPSAwOyBpIDwgc2tfbnVtKG5zKTsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBza19PUEVOU1NMX1NUUklOR19udW0obnMpOyBpKyspCiAJCXsKLQkJQ09ORl9WQUxVRSBjbmY7Ci0JCWNuZi5uYW1lID0gImVtYWlsIjsKLQkJY25mLnZhbHVlID0gc2tfdmFsdWUobnMsIGkpOwotCQlnZW4gPSB2MmlfR0VORVJBTF9OQU1FKE5VTEwsIE5VTEwsICZjbmYpOworCQljaGFyICpzdHIgPSBza19PUEVOU1NMX1NUUklOR192YWx1ZShucywgaSk7CisJCWdlbiA9IGEyaV9HRU5FUkFMX05BTUUoTlVMTCwgTlVMTCwgTlVMTCwgR0VOX0VNQUlMLCBzdHIsIDApOwogCQlpZiAoIWdlbikKIAkJCWdvdG8gZXJyOwogCQlnZW5zID0gR0VORVJBTF9OQU1FU19uZXcoKTsKQEAgLTEzMjEsOCArMTMzNSw5IEBACiAJfQogCiAKLXN0YXRpYyBDTVNfUmVjZWlwdFJlcXVlc3QgKm1ha2VfcmVjZWlwdF9yZXF1ZXN0KFNUQUNLICpycl90bywgaW50IHJyX2FsbG9yZmlyc3QsCi0JCQkJCQkJCVNUQUNLICpycl9mcm9tKQorc3RhdGljIENNU19SZWNlaXB0UmVxdWVzdCAqbWFrZV9yZWNlaXB0X3JlcXVlc3QoU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpICpycl90bywKKwkJCQkJCWludCBycl9hbGxvcmZpcnN0LAorCQkJCQkJU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpICpycl9mcm9tKQogCXsKIAlTVEFDS19PRihHRU5FUkFMX05BTUVTKSAqcmN0X3RvLCAqcmN0X2Zyb207CiAJQ01TX1JlY2VpcHRSZXF1ZXN0ICpycjsKZGlmZiAtLWdpdCBhL2FwcHMvY3JsMnA3LmMgYi9hcHBzL2NybDJwNy5jCmluZGV4IGIyZjJkMTIuLmJiYzgzNzcgMTAwNjQ0Ci0tLSBhL2FwcHMvY3JsMnA3LmMKKysrIGIvYXBwcy9jcmwycDcuYwpAQCAtNjMsNyArNjMsNiBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNsdWRlICJhcHBzLmgiCiAjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgpAQCAtOTMsNyArOTIsNyBAQAogCVBLQ1M3ICpwNyA9IE5VTEw7CiAJUEtDUzdfU0lHTkVEICpwN3MgPSBOVUxMOwogCVg1MDlfQ1JMICpjcmw9TlVMTDsKLQlTVEFDSyAqY2VydGZsc3Q9TlVMTDsKKwlTVEFDS19PRihPUEVOU1NMX1NUUklORykgKmNlcnRmbHN0PU5VTEw7CiAJU1RBQ0tfT0YoWDUwOV9DUkwpICpjcmxfc3RhY2s9TlVMTDsKIAlTVEFDS19PRihYNTA5KSAqY2VydF9zdGFjaz1OVUxMOwogCWludCByZXQ9MSxub2NybD0wOwpAQCAtMTQxLDggKzE0MCw4IEBACiAJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiLWNlcnRmaWxlIikgPT0gMCkKIAkJCXsKIAkJCWlmICgtLWFyZ2MgPCAxKSBnb3RvIGJhZDsKLQkJCWlmKCFjZXJ0ZmxzdCkgY2VydGZsc3QgPSBza19uZXdfbnVsbCgpOwotCQkJc2tfcHVzaChjZXJ0ZmxzdCwqKCsrYXJndikpOworCQkJaWYoIWNlcnRmbHN0KSBjZXJ0ZmxzdCA9IHNrX09QRU5TU0xfU1RSSU5HX25ld19udWxsKCk7CisJCQlza19PUEVOU1NMX1NUUklOR19wdXNoKGNlcnRmbHN0LCooKythcmd2KSk7CiAJCQl9CiAJCWVsc2UKIAkJCXsKQEAgLTIyNyw4ICsyMjYsOCBAQAogCWlmICgoY2VydF9zdGFjaz1za19YNTA5X25ld19udWxsKCkpID09IE5VTEwpIGdvdG8gZW5kOwogCXA3cy0+Y2VydD1jZXJ0X3N0YWNrOwogCi0JaWYoY2VydGZsc3QpIGZvcihpID0gMDsgaSA8IHNrX251bShjZXJ0ZmxzdCk7IGkrKykgewotCQljZXJ0ZmlsZSA9IHNrX3ZhbHVlKGNlcnRmbHN0LCBpKTsKKwlpZihjZXJ0ZmxzdCkgZm9yKGkgPSAwOyBpIDwgc2tfT1BFTlNTTF9TVFJJTkdfbnVtKGNlcnRmbHN0KTsgaSsrKSB7CisJCWNlcnRmaWxlID0gc2tfT1BFTlNTTF9TVFJJTkdfdmFsdWUoY2VydGZsc3QsIGkpOwogCQlpZiAoYWRkX2NlcnRzX2Zyb21fZmlsZShjZXJ0X3N0YWNrLGNlcnRmaWxlKSA8IDApCiAJCQl7CiAJCQlCSU9fcHJpbnRmKGJpb19lcnIsICJlcnJvciBsb2FkaW5nIGNlcnRpZmljYXRlc1xuIik7CkBAIC0yMzcsNyArMjM2LDcgQEAKIAkJCX0KIAl9CiAKLQlza19mcmVlKGNlcnRmbHN0KTsKKwlza19PUEVOU1NMX1NUUklOR19mcmVlKGNlcnRmbHN0KTsKIAogCWlmIChvdXRmaWxlID09IE5VTEwpCiAJCXsKQEAgLTI5NSwxOSArMjk0LDEyIEBACiAgKi8KIHN0YXRpYyBpbnQgYWRkX2NlcnRzX2Zyb21fZmlsZShTVEFDS19PRihYNTA5KSAqc3RhY2ssIGNoYXIgKmNlcnRmaWxlKQogCXsKLQlzdHJ1Y3Qgc3RhdCBzdDsKIAlCSU8gKmluPU5VTEw7CiAJaW50IGNvdW50PTA7CiAJaW50IHJldD0gLTE7CiAJU1RBQ0tfT0YoWDUwOV9JTkZPKSAqc2s9TlVMTDsKIAlYNTA5X0lORk8gKnhpOwogCi0JaWYgKChzdGF0KGNlcnRmaWxlLCZzdCkgIT0gMCkpCi0JCXsKLQkJQklPX3ByaW50ZihiaW9fZXJyLCJ1bmFibGUgdG8gbG9hZCB0aGUgZmlsZSwgJXNcbiIsY2VydGZpbGUpOwotCQlnb3RvIGVuZDsKLQkJfQotCiAJaW49QklPX25ldyhCSU9fc19maWxlKCkpOwogCWlmICgoaW4gPT0gTlVMTCkgfHwgKEJJT19yZWFkX2ZpbGVuYW1lKGluLGNlcnRmaWxlKSA8PSAwKSkKIAkJewpkaWZmIC0tZ2l0IGEvYXBwcy9kZ3N0LmMgYi9hcHBzL2Rnc3QuYwppbmRleCA5ZWJmYzIyLi45YmYzOGNlIDEwMDY0NAotLS0gYS9hcHBzL2Rnc3QuYworKysgYi9hcHBzL2Rnc3QuYwpAQCAtNzUsOCArNzUsMjkgQEAKICNkZWZpbmUgUFJPRwlkZ3N0X21haW4KIAogaW50IGRvX2ZwKEJJTyAqb3V0LCB1bnNpZ25lZCBjaGFyICpidWYsIEJJTyAqYnAsIGludCBzZXAsIGludCBiaW5vdXQsCi0JICBFVlBfUEtFWSAqa2V5LCB1bnNpZ25lZCBjaGFyICpzaWdpbiwgaW50IHNpZ2xlbiwgY29uc3QgY2hhciAqdGl0bGUsCi0JICBjb25zdCBjaGFyICpmaWxlLEJJTyAqYm1kLGNvbnN0IGNoYXIgKmhtYWNfa2V5LCBpbnQgbm9uX2ZpcHNfYWxsb3cpOworCSAgRVZQX1BLRVkgKmtleSwgdW5zaWduZWQgY2hhciAqc2lnaW4sIGludCBzaWdsZW4sCisJICBjb25zdCBjaGFyICpzaWdfbmFtZSwgY29uc3QgY2hhciAqbWRfbmFtZSwKKwkgIGNvbnN0IGNoYXIgKmZpbGUsQklPICpibWQpOworCitzdGF0aWMgdm9pZCBsaXN0X21kX2ZuKGNvbnN0IEVWUF9NRCAqbSwKKwkJCWNvbnN0IGNoYXIgKmZyb20sIGNvbnN0IGNoYXIgKnRvLCB2b2lkICphcmcpCisJeworCWNvbnN0IGNoYXIgKm1uYW1lOworCS8qIFNraXAgYWxpYXNlcyAqLworCWlmICghbSkKKwkJcmV0dXJuOworCW1uYW1lID0gT0JKX25pZDJsbihFVlBfTURfdHlwZShtKSk7CisJLyogU2tpcCBzaG9ydG5hbWVzICovCisJaWYgKHN0cmNtcChmcm9tLCBtbmFtZSkpCisJCXJldHVybjsKKwkvKiBTa2lwIGNsb25lcyAqLworCWlmIChFVlBfTURfZmxhZ3MobSkgJiBFVlBfTURfRkxBR19QS0VZX0RJR0VTVCkKKwkJcmV0dXJuOworCWlmIChzdHJjaHIobW5hbWUsICcgJykpCisJCW1uYW1lPSBFVlBfTURfbmFtZShtKTsKKwlCSU9fcHJpbnRmKGFyZywgIi0lLTE0cyB0byB1c2UgdGhlICVzIG1lc3NhZ2UgZGlnZXN0IGFsZ29yaXRobVxuIiwKKwkJCW1uYW1lLCBtbmFtZSk7CisJfQogCiBpbnQgTUFJTihpbnQsIGNoYXIgKiopOwogCkBAIC04OSw3ICsxMTAsNiBAQAogCUJJTyAqaW49TlVMTCwqaW5wOwogCUJJTyAqYm1kPU5VTEw7CiAJQklPICpvdXQgPSBOVUxMOwotCWNvbnN0IGNoYXIgKm5hbWU7CiAjZGVmaW5lIFBST0dfTkFNRV9TSVpFICAzOQogCWNoYXIgcG5hbWVbUFJPR19OQU1FX1NJWkUrMV07CiAJaW50IHNlcGFyYXRvcj0wOwpAQCAtMTAxLDE2ICsxMjEsMTYgQEAKIAlFVlBfUEtFWSAqc2lna2V5ID0gTlVMTDsKIAl1bnNpZ25lZCBjaGFyICpzaWdidWYgPSBOVUxMOwogCWludCBzaWdsZW4gPSAwOwotCXVuc2lnbmVkIGludCBzaWdfZmxhZ3MgPSAwOwogCWNoYXIgKnBhc3NhcmdpbiA9IE5VTEwsICpwYXNzaW4gPSBOVUxMOwogI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQogCWNoYXIgKmVuZ2luZT1OVUxMOwogI2VuZGlmCiAJY2hhciAqaG1hY19rZXk9TlVMTDsKLQlpbnQgbm9uX2ZpcHNfYWxsb3cgPSAwOworCWNoYXIgKm1hY19uYW1lPU5VTEw7CisJU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpICpzaWdvcHRzID0gTlVMTCwgKm1hY29wdHMgPSBOVUxMOwogCiAJYXBwc19zdGFydHVwKCk7Ci1FUlJfbG9hZF9jcnlwdG9fc3RyaW5ncygpOworCiAJaWYgKChidWY9KHVuc2lnbmVkIGNoYXIgKilPUEVOU1NMX21hbGxvYyhCVUZTSVpFKSkgPT0gTlVMTCkKIAkJewogCQlCSU9fcHJpbnRmKGJpb19lcnIsIm91dCBvZiBtZW1vcnlcbiIpOwpAQCAtMTM1LDYgKzE1NSw4IEBACiAJCWlmICgoKmFyZ3YpWzBdICE9ICctJykgYnJlYWs7CiAJCWlmIChzdHJjbXAoKmFyZ3YsIi1jIikgPT0gMCkKIAkJCXNlcGFyYXRvcj0xOworCQllbHNlIGlmIChzdHJjbXAoKmFyZ3YsIi1yIikgPT0gMCkKKwkJCXNlcGFyYXRvcj0yOwogCQllbHNlIGlmIChzdHJjbXAoKmFyZ3YsIi1yYW5kIikgPT0gMCkKIAkJCXsKIAkJCWlmICgtLWFyZ2MgPCAxKSBicmVhazsKQEAgLTE2OSwyNyArMTkxLDYgQEAKIAkJCWtleWZpbGU9KigrK2FyZ3YpOwogCQkJZG9fdmVyaWZ5ID0gMTsKIAkJCX0KLQkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCIteDkzMSIpID09IDApCi0JCQlzaWdfZmxhZ3MgPSBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzE7Ci0JCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiLXBzc19zYWx0bGVuIikgPT0gMCkKLQkJCXsKLQkJCWludCBzYWx0bGVuOwotCQkJaWYgKC0tYXJnYyA8IDEpIGJyZWFrOwotCQkJc2FsdGxlbj1hdG9pKCooKythcmd2KSk7Ci0JCQlpZiAoc2FsdGxlbiA9PSAtMSkKLQkJCQlzaWdfZmxhZ3MgPSBFVlBfTURfQ1RYX0ZMQUdfUFNTX01SRUM7Ci0JCQllbHNlIGlmIChzYWx0bGVuID09IC0yKQotCQkJCXNpZ19mbGFncyA9IEVWUF9NRF9DVFhfRkxBR19QU1NfTURMRU47Ci0JCQllbHNlIGlmIChzYWx0bGVuIDwgLTIgfHwgc2FsdGxlbiA+PSAweEZGRkUpCi0JCQkJewotCQkJCUJJT19wcmludGYoYmlvX2VyciwgIkludmFsaWQgUFNTIHNhbHQgbGVuZ3RoICVkXG4iLCBzYWx0bGVuKTsKLQkJCQlnb3RvIGVuZDsKLQkJCQl9Ci0JCQllbHNlCi0JCQkJc2lnX2ZsYWdzID0gc2FsdGxlbjsKLQkJCXNpZ19mbGFncyA8PD0gMTY7Ci0JCQlzaWdfZmxhZ3MgfD0gRVZQX01EX0NUWF9GTEFHX1BBRF9QU1M7Ci0JCQl9CiAJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiLXNpZ25hdHVyZSIpID09IDApCiAJCQl7CiAJCQlpZiAoLS1hcmdjIDwgMSkgYnJlYWs7CkBAIC0yMDUsNiArMjA2LDcgQEAKIAkJCXsKIAkJCWlmICgtLWFyZ2MgPCAxKSBicmVhazsKIAkJCWVuZ2luZT0gKigrK2FyZ3YpOworICAgICAgICAJCWUgPSBzZXR1cF9lbmdpbmUoYmlvX2VyciwgZW5naW5lLCAwKTsKIAkJCX0KICNlbmRpZgogCQllbHNlIGlmIChzdHJjbXAoKmFyZ3YsIi1oZXgiKSA9PSAwKQpAQCAtMjEzLDE2ICsyMTUsMzYgQEAKIAkJCW91dF9iaW4gPSAxOwogCQllbHNlIGlmIChzdHJjbXAoKmFyZ3YsIi1kIikgPT0gMCkKIAkJCWRlYnVnPTE7Ci0JCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiLW5vbi1maXBzLWFsbG93IikgPT0gMCkKLQkJCW5vbl9maXBzX2FsbG93PTE7Ci0JCWVsc2UgaWYgKCFzdHJjbXAoKmFyZ3YsIi1maXBzLWZpbmdlcnByaW50IikpCi0JCQlobWFjX2tleSA9ICJldGFvbnJpc2hkbGN1cGZtIjsKIAkJZWxzZSBpZiAoIXN0cmNtcCgqYXJndiwiLWhtYWMiKSkKIAkJCXsKIAkJCWlmICgtLWFyZ2MgPCAxKQogCQkJCWJyZWFrOwogCQkJaG1hY19rZXk9KisrYXJndjsKIAkJCX0KKwkJZWxzZSBpZiAoIXN0cmNtcCgqYXJndiwiLW1hYyIpKQorCQkJeworCQkJaWYgKC0tYXJnYyA8IDEpCisJCQkJYnJlYWs7CisJCQltYWNfbmFtZT0qKythcmd2OworCQkJfQorCQllbHNlIGlmIChzdHJjbXAoKmFyZ3YsIi1zaWdvcHQiKSA9PSAwKQorCQkJeworCQkJaWYgKC0tYXJnYyA8IDEpCisJCQkJYnJlYWs7CisJCQlpZiAoIXNpZ29wdHMpCisJCQkJc2lnb3B0cyA9IHNrX09QRU5TU0xfU1RSSU5HX25ld19udWxsKCk7CisJCQlpZiAoIXNpZ29wdHMgfHwgIXNrX09QRU5TU0xfU1RSSU5HX3B1c2goc2lnb3B0cywgKigrK2FyZ3YpKSkKKwkJCQlicmVhazsKKwkJCX0KKwkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCItbWFjb3B0IikgPT0gMCkKKwkJCXsKKwkJCWlmICgtLWFyZ2MgPCAxKQorCQkJCWJyZWFrOworCQkJaWYgKCFtYWNvcHRzKQorCQkJCW1hY29wdHMgPSBza19PUEVOU1NMX1NUUklOR19uZXdfbnVsbCgpOworCQkJaWYgKCFtYWNvcHRzIHx8ICFza19PUEVOU1NMX1NUUklOR19wdXNoKG1hY29wdHMsICooKythcmd2KSkpCisJCQkJYnJlYWs7CisJCQl9CiAJCWVsc2UgaWYgKChtPUVWUF9nZXRfZGlnZXN0YnluYW1lKCYoKCphcmd2KVsxXSkpKSAhPSBOVUxMKQogCQkJbWQ9bTsKIAkJZWxzZQpAQCAtMjMxLDEyICsyNTMsOSBAQAogCQlhcmd2Kys7CiAJCX0KIAotCWlmIChtZCA9PSBOVUxMKQotCQltZD1FVlBfbWQ1KCk7CiAKIAlpZihkb192ZXJpZnkgJiYgIXNpZ2ZpbGUpIHsKIAkJQklPX3ByaW50ZihiaW9fZXJyLCAiTm8gc2lnbmF0dXJlIHRvIHZlcmlmeTogdXNlIHRoZSAtc2lnbmF0dXJlIG9wdGlvblxuIik7Ci0JCWVyciA9IDE7IAogCQlnb3RvIGVuZDsKIAl9CiAKQEAgLTI0NSw2ICsyNjQsNyBAQAogCQlCSU9fcHJpbnRmKGJpb19lcnIsInVua25vd24gb3B0aW9uICclcydcbiIsKmFyZ3YpOwogCQlCSU9fcHJpbnRmKGJpb19lcnIsIm9wdGlvbnMgYXJlXG4iKTsKIAkJQklPX3ByaW50ZihiaW9fZXJyLCItYyAgICAgICAgICAgICAgdG8gb3V0cHV0IHRoZSBkaWdlc3Qgd2l0aCBzZXBhcmF0aW5nIGNvbG9uc1xuIik7CisJCUJJT19wcmludGYoYmlvX2VyciwiLXIgICAgICAgICAgICAgIHRvIG91dHB1dCB0aGUgZGlnZXN0IGluIGNvcmV1dGlscyBmb3JtYXRcbiIpOwogCQlCSU9fcHJpbnRmKGJpb19lcnIsIi1kICAgICAgICAgICAgICB0byBvdXRwdXQgZGVidWcgaW5mb1xuIik7CiAJCUJJT19wcmludGYoYmlvX2VyciwiLWhleCAgICAgICAgICAgIG91dHB1dCBhcyBoZXggZHVtcFxuIik7CiAJCUJJT19wcmludGYoYmlvX2VyciwiLWJpbmFyeSAgICAgICAgIG91dHB1dCBpbiBiaW5hcnkgZm9ybVxuIik7CkBAIC0yNTIsNDkgKzI3MiwyMCBAQAogCQlCSU9fcHJpbnRmKGJpb19lcnIsIi12ZXJpZnkgZmlsZSAgICB2ZXJpZnkgYSBzaWduYXR1cmUgdXNpbmcgcHVibGljIGtleSBpbiBmaWxlXG4iKTsKIAkJQklPX3ByaW50ZihiaW9fZXJyLCItcHJ2ZXJpZnkgZmlsZSAgdmVyaWZ5IGEgc2lnbmF0dXJlIHVzaW5nIHByaXZhdGUga2V5IGluIGZpbGVcbiIpOwogCQlCSU9fcHJpbnRmKGJpb19lcnIsIi1rZXlmb3JtIGFyZyAgICBrZXkgZmlsZSBmb3JtYXQgKFBFTSBvciBFTkdJTkUpXG4iKTsKKwkJQklPX3ByaW50ZihiaW9fZXJyLCItb3V0IGZpbGVuYW1lICAgb3V0cHV0IHRvIGZpbGVuYW1lIHJhdGhlciB0aGFuIHN0ZG91dFxuIik7CiAJCUJJT19wcmludGYoYmlvX2VyciwiLXNpZ25hdHVyZSBmaWxlIHNpZ25hdHVyZSB0byB2ZXJpZnlcbiIpOwotCQlCSU9fcHJpbnRmKGJpb19lcnIsIi1iaW5hcnkgICAgICAgICBvdXRwdXQgaW4gYmluYXJ5IGZvcm1cbiIpOworCQlCSU9fcHJpbnRmKGJpb19lcnIsIi1zaWdvcHQgbm06diAgICBzaWduYXR1cmUgcGFyYW1ldGVyXG4iKTsKIAkJQklPX3ByaW50ZihiaW9fZXJyLCItaG1hYyBrZXkgICAgICAgY3JlYXRlIGhhc2hlZCBNQUMgd2l0aCBrZXlcbiIpOworCQlCSU9fcHJpbnRmKGJpb19lcnIsIi1tYWMgYWxnb3JpdGhtICBjcmVhdGUgTUFDIChub3QgbmVjY2Vzc2FyaWx5IEhNQUMpXG4iKTsgCisJCUJJT19wcmludGYoYmlvX2VyciwiLW1hY29wdCBubTp2ICAgIE1BQyBhbGdvcml0aG0gcGFyYW1ldGVycyBvciBrZXlcbiIpOwogI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQogCQlCSU9fcHJpbnRmKGJpb19lcnIsIi1lbmdpbmUgZSAgICAgICB1c2UgZW5naW5lIGUsIHBvc3NpYmx5IGEgaGFyZHdhcmUgZGV2aWNlLlxuIik7CiAjZW5kaWYKIAotCQlCSU9fcHJpbnRmKGJpb19lcnIsIi0lLTE0cyB0byB1c2UgdGhlICVzIG1lc3NhZ2UgZGlnZXN0IGFsZ29yaXRobSAoZGVmYXVsdClcbiIsCi0JCQlMTl9tZDUsTE5fbWQ1KTsKLQkJQklPX3ByaW50ZihiaW9fZXJyLCItJS0xNHMgdG8gdXNlIHRoZSAlcyBtZXNzYWdlIGRpZ2VzdCBhbGdvcml0aG1cbiIsCi0JCQlMTl9tZDQsTE5fbWQ0KTsKLQkJQklPX3ByaW50ZihiaW9fZXJyLCItJS0xNHMgdG8gdXNlIHRoZSAlcyBtZXNzYWdlIGRpZ2VzdCBhbGdvcml0aG1cbiIsCi0JCQlMTl9tZDIsTE5fbWQyKTsKLSNpZm5kZWYgT1BFTlNTTF9OT19TSEEKLQkJQklPX3ByaW50ZihiaW9fZXJyLCItJS0xNHMgdG8gdXNlIHRoZSAlcyBtZXNzYWdlIGRpZ2VzdCBhbGdvcml0aG1cbiIsCi0JCQlMTl9zaGExLExOX3NoYTEpOwotCQlCSU9fcHJpbnRmKGJpb19lcnIsIi0lLTE0cyB0byB1c2UgdGhlICVzIG1lc3NhZ2UgZGlnZXN0IGFsZ29yaXRobVxuIiwKLQkJCUxOX3NoYSxMTl9zaGEpOwotI2lmbmRlZiBPUEVOU1NMX05PX1NIQTI1NgotCQlCSU9fcHJpbnRmKGJpb19lcnIsIi0lLTE0cyB0byB1c2UgdGhlICVzIG1lc3NhZ2UgZGlnZXN0IGFsZ29yaXRobVxuIiwKLQkJCUxOX3NoYTIyNCxMTl9zaGEyMjQpOwotCQlCSU9fcHJpbnRmKGJpb19lcnIsIi0lLTE0cyB0byB1c2UgdGhlICVzIG1lc3NhZ2UgZGlnZXN0IGFsZ29yaXRobVxuIiwKLQkJCUxOX3NoYTI1NixMTl9zaGEyNTYpOwotI2VuZGlmCi0jaWZuZGVmIE9QRU5TU0xfTk9fU0hBNTEyCi0JCUJJT19wcmludGYoYmlvX2VyciwiLSUtMTRzIHRvIHVzZSB0aGUgJXMgbWVzc2FnZSBkaWdlc3QgYWxnb3JpdGhtXG4iLAotCQkJTE5fc2hhMzg0LExOX3NoYTM4NCk7Ci0JCUJJT19wcmludGYoYmlvX2VyciwiLSUtMTRzIHRvIHVzZSB0aGUgJXMgbWVzc2FnZSBkaWdlc3QgYWxnb3JpdGhtXG4iLAotCQkJTE5fc2hhNTEyLExOX3NoYTUxMik7Ci0jZW5kaWYKLSNlbmRpZgotCQlCSU9fcHJpbnRmKGJpb19lcnIsIi0lLTE0cyB0byB1c2UgdGhlICVzIG1lc3NhZ2UgZGlnZXN0IGFsZ29yaXRobVxuIiwKLQkJCUxOX21kYzIsTE5fbWRjMik7Ci0JCUJJT19wcmludGYoYmlvX2VyciwiLSUtMTRzIHRvIHVzZSB0aGUgJXMgbWVzc2FnZSBkaWdlc3QgYWxnb3JpdGhtXG4iLAotCQkJTE5fcmlwZW1kMTYwLExOX3JpcGVtZDE2MCk7Ci0JCWVycj0xOworCQlFVlBfTURfZG9fYWxsX3NvcnRlZChsaXN0X21kX2ZuLCBiaW9fZXJyKTsKIAkJZ290byBlbmQ7CiAJCX0KIAotI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQotICAgICAgICBlID0gc2V0dXBfZW5naW5lKGJpb19lcnIsIGVuZ2luZSwgMCk7Ci0jZW5kaWYKLQogCWluPUJJT19uZXcoQklPX3NfZmlsZSgpKTsKIAlibWQ9QklPX25ldyhCSU9fZl9tZCgpKTsKIAlpZiAoZGVidWcpCkBAIC0zMTcsOCArMzA4LDEwIEBACiAJCX0KIAogCWlmKG91dF9iaW4gPT0gLTEpIHsKLQkJaWYoa2V5ZmlsZSkgb3V0X2JpbiA9IDE7Ci0JCWVsc2Ugb3V0X2JpbiA9IDA7CisJCWlmKGtleWZpbGUpCisJCQlvdXRfYmluID0gMTsKKwkJZWxzZQorCQkJb3V0X2JpbiA9IDA7CiAJfQogCiAJaWYocmFuZGZpbGUpCkBAIC0zNDQsNiArMzM3LDExIEBACiAJCUVSUl9wcmludF9lcnJvcnMoYmlvX2Vycik7CiAJCWdvdG8gZW5kOwogCX0KKwlpZiAoKCEhbWFjX25hbWUgKyAhIWtleWZpbGUgKyAhIWhtYWNfa2V5KSA+IDEpCisJCXsKKwkJQklPX3ByaW50ZihiaW9fZXJyLCAiTUFDIGFuZCBTaWduaW5nIGtleSBjYW5ub3QgYm90aCBiZSBzcGVjaWZpZWRcbiIpOworCQlnb3RvIGVuZDsKKwkJfQogCiAJaWYoa2V5ZmlsZSkKIAkJewpAQCAtMzYxLDYgKzM1OSwxMDEgQEAKIAkJCX0KIAkJfQogCisJaWYgKG1hY19uYW1lKQorCQl7CisJCUVWUF9QS0VZX0NUWCAqbWFjX2N0eCA9IE5VTEw7CisJCWludCByID0gMDsKKwkJaWYgKCFpbml0X2dlbl9zdHIoYmlvX2VyciwgJm1hY19jdHgsIG1hY19uYW1lLGUsIDApKQorCQkJZ290byBtYWNfZW5kOworCQlpZiAobWFjb3B0cykKKwkJCXsKKwkJCWNoYXIgKm1hY29wdDsKKwkJCWZvciAoaSA9IDA7IGkgPCBza19PUEVOU1NMX1NUUklOR19udW0obWFjb3B0cyk7IGkrKykKKwkJCQl7CisJCQkJbWFjb3B0ID0gc2tfT1BFTlNTTF9TVFJJTkdfdmFsdWUobWFjb3B0cywgaSk7CisJCQkJaWYgKHBrZXlfY3RybF9zdHJpbmcobWFjX2N0eCwgbWFjb3B0KSA8PSAwKQorCQkJCQl7CisJCQkJCUJJT19wcmludGYoYmlvX2VyciwKKwkJCQkJCSJNQUMgcGFyYW1ldGVyIGVycm9yIFwiJXNcIlxuIiwKKwkJCQkJCW1hY29wdCk7CisJCQkJCUVSUl9wcmludF9lcnJvcnMoYmlvX2Vycik7CisJCQkJCWdvdG8gbWFjX2VuZDsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJaWYgKEVWUF9QS0VZX2tleWdlbihtYWNfY3R4LCAmc2lna2V5KSA8PSAwKQorCQkJeworCQkJQklPX3B1dHMoYmlvX2VyciwgIkVycm9yIGdlbmVyYXRpbmcga2V5XG4iKTsKKwkJCUVSUl9wcmludF9lcnJvcnMoYmlvX2Vycik7CisJCQlnb3RvIG1hY19lbmQ7CisJCQl9CisJCXIgPSAxOworCQltYWNfZW5kOgorCQlpZiAobWFjX2N0eCkKKwkJCUVWUF9QS0VZX0NUWF9mcmVlKG1hY19jdHgpOworCQlpZiAociA9PSAwKQorCQkJZ290byBlbmQ7CisJCX0KKworCWlmIChobWFjX2tleSkKKwkJeworCQlzaWdrZXkgPSBFVlBfUEtFWV9uZXdfbWFjX2tleShFVlBfUEtFWV9ITUFDLCBlLAorCQkJCQkodW5zaWduZWQgY2hhciAqKWhtYWNfa2V5LCAtMSk7CisJCWlmICghc2lna2V5KQorCQkJZ290byBlbmQ7CisJCX0KKworCWlmIChzaWdrZXkpCisJCXsKKwkJRVZQX01EX0NUWCAqbWN0eCA9IE5VTEw7CisJCUVWUF9QS0VZX0NUWCAqcGN0eCA9IE5VTEw7CisJCWludCByOworCQlpZiAoIUJJT19nZXRfbWRfY3R4KGJtZCwgJm1jdHgpKQorCQkJeworCQkJQklPX3ByaW50ZihiaW9fZXJyLCAiRXJyb3IgZ2V0dGluZyBjb250ZXh0XG4iKTsKKwkJCUVSUl9wcmludF9lcnJvcnMoYmlvX2Vycik7CisJCQlnb3RvIGVuZDsKKwkJCX0KKwkJaWYgKGRvX3ZlcmlmeSkKKwkJCXIgPSBFVlBfRGlnZXN0VmVyaWZ5SW5pdChtY3R4LCAmcGN0eCwgbWQsIGUsIHNpZ2tleSk7CisJCWVsc2UKKwkJCXIgPSBFVlBfRGlnZXN0U2lnbkluaXQobWN0eCwgJnBjdHgsIG1kLCBlLCBzaWdrZXkpOworCQlpZiAoIXIpCisJCQl7CisJCQlCSU9fcHJpbnRmKGJpb19lcnIsICJFcnJvciBzZXR0aW5nIGNvbnRleHRcbiIpOworCQkJRVJSX3ByaW50X2Vycm9ycyhiaW9fZXJyKTsKKwkJCWdvdG8gZW5kOworCQkJfQorCQlpZiAoc2lnb3B0cykKKwkJCXsKKwkJCWNoYXIgKnNpZ29wdDsKKwkJCWZvciAoaSA9IDA7IGkgPCBza19PUEVOU1NMX1NUUklOR19udW0oc2lnb3B0cyk7IGkrKykKKwkJCQl7CisJCQkJc2lnb3B0ID0gc2tfT1BFTlNTTF9TVFJJTkdfdmFsdWUoc2lnb3B0cywgaSk7CisJCQkJaWYgKHBrZXlfY3RybF9zdHJpbmcocGN0eCwgc2lnb3B0KSA8PSAwKQorCQkJCQl7CisJCQkJCUJJT19wcmludGYoYmlvX2VyciwKKwkJCQkJCSJwYXJhbWV0ZXIgZXJyb3IgXCIlc1wiXG4iLAorCQkJCQkJc2lnb3B0KTsKKwkJCQkJRVJSX3ByaW50X2Vycm9ycyhiaW9fZXJyKTsKKwkJCQkJZ290byBlbmQ7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwkvKiB3ZSB1c2UgbWQgYXMgYSBmaWx0ZXIsIHJlYWRpbmcgZnJvbSAnaW4nICovCisJZWxzZQorCQl7CisJCWlmIChtZCA9PSBOVUxMKQorCQkJbWQgPSBFVlBfbWQ1KCk7IAorCQlpZiAoIUJJT19zZXRfbWQoYm1kLG1kKSkKKwkJCXsKKwkJCUJJT19wcmludGYoYmlvX2VyciwgIkVycm9yIHNldHRpbmcgZGlnZXN0ICVzXG4iLCBwbmFtZSk7CisJCQlFUlJfcHJpbnRfZXJyb3JzKGJpb19lcnIpOworCQkJZ290byBlbmQ7CisJCQl9CisJCX0KKwogCWlmKHNpZ2ZpbGUgJiYgc2lna2V5KSB7CiAJCUJJTyAqc2lnYmlvOwogCQlzaWdiaW8gPSBCSU9fbmV3X2ZpbGUoc2lnZmlsZSwgInJiIik7CkBAIC0zODEsNjcgKzQ3NCw1MSBAQAogCQkJZ290byBlbmQ7CiAJCX0KIAl9Ci0KLQlpZiAobm9uX2ZpcHNfYWxsb3cpCi0JCXsKLQkJRVZQX01EX0NUWCAqbWRfY3R4OwotCQlCSU9fZ2V0X21kX2N0eChibWQsJm1kX2N0eCk7Ci0JCUVWUF9NRF9DVFhfc2V0X2ZsYWdzKG1kX2N0eCwgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKTsKLQkJfQotCi0JaWYgKHNpZ19mbGFncykKLQkJewotCQlFVlBfTURfQ1RYICptZF9jdHg7Ci0JCUJJT19nZXRfbWRfY3R4KGJtZCwmbWRfY3R4KTsKLQkJRVZQX01EX0NUWF9zZXRfZmxhZ3MobWRfY3R4LCBzaWdfZmxhZ3MpOwotCQl9Ci0KLQkvKiB3ZSB1c2UgbWQgYXMgYSBmaWx0ZXIsIHJlYWRpbmcgZnJvbSAnaW4nICovCi0JaWYgKCFCSU9fc2V0X21kKGJtZCxtZCkpCi0JCXsKLQkJQklPX3ByaW50ZihiaW9fZXJyLCAiRXJyb3Igc2V0dGluZyBkaWdlc3QgJXNcbiIsIHBuYW1lKTsKLQkJRVJSX3ByaW50X2Vycm9ycyhiaW9fZXJyKTsKLQkJZ290byBlbmQ7Ci0JCX0KLQkJCiAJaW5wPUJJT19wdXNoKGJtZCxpbik7CiAKKwlpZiAobWQgPT0gTlVMTCkKKwkJeworCQlFVlBfTURfQ1RYICp0Y3R4OworCQlCSU9fZ2V0X21kX2N0eChibWQsICZ0Y3R4KTsKKwkJbWQgPSBFVlBfTURfQ1RYX21kKHRjdHgpOworCQl9CisKIAlpZiAoYXJnYyA9PSAwKQogCQl7CiAJCUJJT19zZXRfZnAoaW4sc3RkaW4sQklPX05PQ0xPU0UpOwogCQllcnI9ZG9fZnAob3V0LCBidWYsaW5wLHNlcGFyYXRvciwgb3V0X2Jpbiwgc2lna2V5LCBzaWdidWYsCi0JCQkgIHNpZ2xlbiwiIiwiKHN0ZGluKSIsYm1kLGhtYWNfa2V5LG5vbl9maXBzX2FsbG93KTsKKwkJCSAgc2lnbGVuLE5VTEwsTlVMTCwic3RkaW4iLGJtZCk7CiAJCX0KIAllbHNlCiAJCXsKLQkJbmFtZT1PQkpfbmlkMnNuKG1kLT50eXBlKTsKKwkJY29uc3QgY2hhciAqbWRfbmFtZSA9IE5VTEwsICpzaWdfbmFtZSA9IE5VTEw7CisJCWlmKCFvdXRfYmluKQorCQkJeworCQkJaWYgKHNpZ2tleSkKKwkJCQl7CisJCQkJY29uc3QgRVZQX1BLRVlfQVNOMV9NRVRIT0QgKmFtZXRoOworCQkJCWFtZXRoID0gRVZQX1BLRVlfZ2V0MF9hc24xKHNpZ2tleSk7CisJCQkJaWYgKGFtZXRoKQorCQkJCQlFVlBfUEtFWV9hc24xX2dldDBfaW5mbyhOVUxMLCBOVUxMLAorCQkJCQkJTlVMTCwgTlVMTCwgJnNpZ19uYW1lLCBhbWV0aCk7CisJCQkJfQorCQkJbWRfbmFtZSA9IEVWUF9NRF9uYW1lKG1kKTsKKwkJCX0KIAkJZXJyID0gMDsKIAkJZm9yIChpPTA7IGk8YXJnYzsgaSsrKQogCQkJewotCQkJY2hhciAqdG1wLCp0b2ZyZWU9TlVMTDsKIAkJCWludCByOwotCiAJCQlpZiAoQklPX3JlYWRfZmlsZW5hbWUoaW4sYXJndltpXSkgPD0gMCkKIAkJCQl7CiAJCQkJcGVycm9yKGFyZ3ZbaV0pOwogCQkJCWVycisrOwogCQkJCWNvbnRpbnVlOwogCQkJCX0KLQkJCWlmKCFvdXRfYmluKQotCQkJCXsKLQkJCQlzaXplX3QgbGVuID0gc3RybGVuKG5hbWUpK3N0cmxlbihhcmd2W2ldKSsoaG1hY19rZXkgPyA1IDogMCkrNTsKLQkJCQl0bXA9dG9mcmVlPU9QRU5TU0xfbWFsbG9jKGxlbik7Ci0JCQkJQklPX3NucHJpbnRmKHRtcCxsZW4sIiVzJXMoJXMpPSAiLAotCQkJCQkJCSBobWFjX2tleSA/ICJITUFDLSIgOiAiIixuYW1lLGFyZ3ZbaV0pOwotCQkJCX0KIAkJCWVsc2UKLQkJCQl0bXA9IiI7CiAJCQlyPWRvX2ZwKG91dCxidWYsaW5wLHNlcGFyYXRvcixvdXRfYmluLHNpZ2tleSxzaWdidWYsCi0JCQkJc2lnbGVuLHRtcCxhcmd2W2ldLGJtZCxobWFjX2tleSxub25fZmlwc19hbGxvdyk7CisJCQkJc2lnbGVuLHNpZ19uYW1lLG1kX25hbWUsIGFyZ3ZbaV0sYm1kKTsKIAkJCWlmKHIpCiAJCQkgICAgZXJyPXI7Ci0JCQlpZih0b2ZyZWUpCi0JCQkJT1BFTlNTTF9mcmVlKHRvZnJlZSk7CiAJCQkodm9pZClCSU9fcmVzZXQoYm1kKTsKIAkJCX0KIAkJfQpAQCAtNDU2LDYgKzUzMywxMCBAQAogCQlPUEVOU1NMX2ZyZWUocGFzc2luKTsKIAlCSU9fZnJlZV9hbGwob3V0KTsKIAlFVlBfUEtFWV9mcmVlKHNpZ2tleSk7CisJaWYgKHNpZ29wdHMpCisJCXNrX09QRU5TU0xfU1RSSU5HX2ZyZWUoc2lnb3B0cyk7CisJaWYgKG1hY29wdHMpCisJCXNrX09QRU5TU0xfU1RSSU5HX2ZyZWUobWFjb3B0cyk7CiAJaWYoc2lnYnVmKSBPUEVOU1NMX2ZyZWUoc2lnYnVmKTsKIAlpZiAoYm1kICE9IE5VTEwpIEJJT19mcmVlKGJtZCk7CiAJYXBwc19zaHV0ZG93bigpOwpAQCAtNDYzLDI0ICs1NDQsMTMgQEAKIAl9CiAKIGludCBkb19mcChCSU8gKm91dCwgdW5zaWduZWQgY2hhciAqYnVmLCBCSU8gKmJwLCBpbnQgc2VwLCBpbnQgYmlub3V0LAotCSAgRVZQX1BLRVkgKmtleSwgdW5zaWduZWQgY2hhciAqc2lnaW4sIGludCBzaWdsZW4sIGNvbnN0IGNoYXIgKnRpdGxlLAotCSAgY29uc3QgY2hhciAqZmlsZSxCSU8gKmJtZCxjb25zdCBjaGFyICpobWFjX2tleSxpbnQgbm9uX2ZpcHNfYWxsb3cpCisJICBFVlBfUEtFWSAqa2V5LCB1bnNpZ25lZCBjaGFyICpzaWdpbiwgaW50IHNpZ2xlbiwKKwkgIGNvbnN0IGNoYXIgKnNpZ19uYW1lLCBjb25zdCBjaGFyICptZF9uYW1lLAorCSAgY29uc3QgY2hhciAqZmlsZSxCSU8gKmJtZCkKIAl7Ci0JdW5zaWduZWQgaW50IGxlbjsKKwlzaXplX3QgbGVuOwogCWludCBpOwotCUVWUF9NRF9DVFggKm1kX2N0eDsKLQlITUFDX0NUWCBobWFjX2N0eDsKIAotCWlmIChobWFjX2tleSkKLQkJewotCQlFVlBfTUQgKm1kOwotCi0JCUJJT19nZXRfbWQoYm1kLCZtZCk7Ci0JCUhNQUNfQ1RYX2luaXQoJmhtYWNfY3R4KTsKLQkJSE1BQ19Jbml0X2V4KCZobWFjX2N0eCxobWFjX2tleSxzdHJsZW4oaG1hY19rZXkpLG1kLCBOVUxMKTsKLQkJQklPX2dldF9tZF9jdHgoYm1kLCZtZF9jdHgpOwotCQlCSU9fc2V0X21kX2N0eChibWQsJmhtYWNfY3R4Lm1kX2N0eCk7Ci0JCX0KIAlmb3IgKDs7KQogCQl7CiAJCWk9QklPX3JlYWQoYnAsKGNoYXIgKilidWYsQlVGU0laRSk7CkBAIC00OTYsNyArNTY2LDcgQEAKIAkJewogCQlFVlBfTURfQ1RYICpjdHg7CiAJCUJJT19nZXRfbWRfY3R4KGJwLCAmY3R4KTsKLQkJaSA9IEVWUF9WZXJpZnlGaW5hbChjdHgsIHNpZ2luLCAodW5zaWduZWQgaW50KXNpZ2xlbiwga2V5KTsgCisJCWkgPSBFVlBfRGlnZXN0VmVyaWZ5RmluYWwoY3R4LCBzaWdpbiwgKHVuc2lnbmVkIGludClzaWdsZW4pOyAKIAkJaWYoaSA+IDApCiAJCQlCSU9fcHJpbnRmKG91dCwgIlZlcmlmaWVkIE9LXG4iKTsKIAkJZWxzZSBpZihpID09IDApCkBAIC01MTYsMjUgKzU4NiwzOSBAQAogCQl7CiAJCUVWUF9NRF9DVFggKmN0eDsKIAkJQklPX2dldF9tZF9jdHgoYnAsICZjdHgpOwotCQlpZighRVZQX1NpZ25GaW5hbChjdHgsIGJ1ZiwgKHVuc2lnbmVkIGludCAqKSZsZW4sIGtleSkpIAorCQlsZW4gPSBCVUZTSVpFOworCQlpZighRVZQX0RpZ2VzdFNpZ25GaW5hbChjdHgsIGJ1ZiwgJmxlbikpIAogCQkJewogCQkJQklPX3ByaW50ZihiaW9fZXJyLCAiRXJyb3IgU2lnbmluZyBEYXRhXG4iKTsKIAkJCUVSUl9wcmludF9lcnJvcnMoYmlvX2Vycik7CiAJCQlyZXR1cm4gMTsKIAkJCX0KIAkJfQotCWVsc2UgaWYoaG1hY19rZXkpCi0JCXsKLQkJSE1BQ19GaW5hbCgmaG1hY19jdHgsYnVmLCZsZW4pOwotCQlITUFDX0NUWF9jbGVhbnVwKCZobWFjX2N0eCk7Ci0JCX0KIAllbHNlCisJCXsKIAkJbGVuPUJJT19nZXRzKGJwLChjaGFyICopYnVmLEJVRlNJWkUpOworCQlpZiAoKGludClsZW4gPDApCisJCQl7CisJCQlFUlJfcHJpbnRfZXJyb3JzKGJpb19lcnIpOworCQkJcmV0dXJuIDE7CisJCQl9CisJCX0KIAogCWlmKGJpbm91dCkgQklPX3dyaXRlKG91dCwgYnVmLCBsZW4pOworCWVsc2UgaWYgKHNlcCA9PSAyKQorCQl7CisJCWZvciAoaT0wOyBpPChpbnQpbGVuOyBpKyspCisJCQlCSU9fcHJpbnRmKG91dCwgIiUwMngiLGJ1ZltpXSk7CisJCUJJT19wcmludGYob3V0LCAiIColc1xuIiwgZmlsZSk7CisJCX0KIAllbHNlIAogCQl7Ci0JCUJJT193cml0ZShvdXQsdGl0bGUsc3RybGVuKHRpdGxlKSk7CisJCWlmIChzaWdfbmFtZSkKKwkJCUJJT19wcmludGYob3V0LCAiJXMtJXMoJXMpPSAiLCBzaWdfbmFtZSwgbWRfbmFtZSwgZmlsZSk7CisJCWVsc2UgaWYgKG1kX25hbWUpCisJCQlCSU9fcHJpbnRmKG91dCwgIiVzKCVzKT0gIiwgbWRfbmFtZSwgZmlsZSk7CisJCWVsc2UKKwkJCUJJT19wcmludGYob3V0LCAiKCVzKT0gIiwgZmlsZSk7CiAJCWZvciAoaT0wOyBpPChpbnQpbGVuOyBpKyspCiAJCQl7CiAJCQlpZiAoc2VwICYmIChpICE9IDApKQpAQCAtNTQzLDEwICs2MjcsNiBAQAogCQkJfQogCQlCSU9fcHJpbnRmKG91dCwgIlxuIik7CiAJCX0KLQlpZiAoaG1hY19rZXkpCi0JCXsKLQkJQklPX3NldF9tZF9jdHgoYm1kLG1kX2N0eCk7Ci0JCX0KIAlyZXR1cm4gMDsKIAl9CiAKZGlmZiAtLWdpdCBhL2FwcHMvZGguYyBiL2FwcHMvZGguYwppbmRleCBjNGQ4OTFlLi5lOTYwOWQ2IDEwMDY0NAotLS0gYS9hcHBzL2RoLmMKKysrIGIvYXBwcy9kaC5jCkBAIC0zNDksNCArMzQ5LDEwIEBACiAJYXBwc19zaHV0ZG93bigpOwogCU9QRU5TU0xfRVhJVChyZXQpOwogCX0KKyNlbHNlIC8qICFPUEVOU1NMX05PX0RIICovCisKKyMgaWYgUEVEQU5USUMKK3N0YXRpYyB2b2lkICpkdW1teT0mZHVtbXk7CisjIGVuZGlmCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXBwcy9kaHBhcmFtLmMgYi9hcHBzL2RocGFyYW0uYwppbmRleCAwNGJkNTdjLi41ZmFiMjllIDEwMDY0NAotLS0gYS9hcHBzL2RocGFyYW0uYworKysgYi9hcHBzL2RocGFyYW0uYwpAQCAtNTU0LDQgKzU1NCwxMCBAQAogCXJldHVybiAxOwogCX0KIAorI2Vsc2UgLyogIU9QRU5TU0xfTk9fREggKi8KKworIyBpZiBQRURBTlRJQworc3RhdGljIHZvaWQgKmR1bW15PSZkdW1teTsKKyMgZW5kaWYKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcHBzL2RzYS5jIGIvYXBwcy9kc2EuYwppbmRleCA1ZTY4YTU2Li4xMTA5MzQ2IDEwMDY0NAotLS0gYS9hcHBzL2RzYS5jCisrKyBiL2FwcHMvZHNhLmMKQEAgLTY1LDExICs2NSwxMSBAQAogI2luY2x1ZGUgImFwcHMuaCIKICNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgogI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgogI2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgogI2luY2x1ZGUgPG9wZW5zc2wvcGVtLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+CiAKICN1bmRlZiBQUk9HCiAjZGVmaW5lIFBST0cJZHNhX21haW4KQEAgLTExMiw2ICsxMTIsOCBAQAogCWNoYXIgKnBhc3NpbiA9IE5VTEwsICpwYXNzb3V0ID0gTlVMTDsKIAlpbnQgbW9kdWx1cz0wOwogCisJaW50IHB2a19lbmNyID0gMjsKKwogCWFwcHNfc3RhcnR1cCgpOwogCiAJaWYgKGJpb19lcnIgPT0gTlVMTCkKQEAgLTE3MSw2ICsxNzMsMTIgQEAKIAkJCWVuZ2luZT0gKigrK2FyZ3YpOwogCQkJfQogI2VuZGlmCisJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiLXB2ay1zdHJvbmciKSA9PSAwKQorCQkJcHZrX2VuY3I9MjsKKwkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCItcHZrLXdlYWsiKSA9PSAwKQorCQkJcHZrX2VuY3I9MTsKKwkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCItcHZrLW5vbmUiKSA9PSAwKQorCQkJcHZrX2VuY3I9MDsKIAkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCItbm9vdXQiKSA9PSAwKQogCQkJbm9vdXQ9MTsKIAkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCItdGV4dCIpID09IDApCkBAIC0yMzgsMTYgKzI0NiwzMCBAQAogCQlnb3RvIGVuZDsKIAl9CiAKKwlpbj1CSU9fbmV3KEJJT19zX2ZpbGUoKSk7CiAJb3V0PUJJT19uZXcoQklPX3NfZmlsZSgpKTsKLQlpZiAob3V0ID09IE5VTEwpCisJaWYgKChpbiA9PSBOVUxMKSB8fCAob3V0ID09IE5VTEwpKQogCQl7CiAJCUVSUl9wcmludF9lcnJvcnMoYmlvX2Vycik7CiAJCWdvdG8gZW5kOwogCQl9CiAKKwlpZiAoaW5maWxlID09IE5VTEwpCisJCUJJT19zZXRfZnAoaW4sc3RkaW4sQklPX05PQ0xPU0UpOworCWVsc2UKKwkJeworCQlpZiAoQklPX3JlYWRfZmlsZW5hbWUoaW4saW5maWxlKSA8PSAwKQorCQkJeworCQkJcGVycm9yKGluZmlsZSk7CisJCQlnb3RvIGVuZDsKKwkJCX0KKwkJfQorCiAJQklPX3ByaW50ZihiaW9fZXJyLCJyZWFkIERTQSBrZXlcbiIpOwotCXsKKworCQl7CiAJCUVWUF9QS0VZCSpwa2V5OworCiAJCWlmIChwdWJpbikKIAkJCXBrZXkgPSBsb2FkX3B1YmtleShiaW9fZXJyLCBpbmZpbGUsIGluZm9ybWF0LCAxLAogCQkJCXBhc3NpbiwgZSwgIlB1YmxpYyBLZXkiKTsKQEAgLTI1NSwxMCArMjc3LDEyIEBACiAJCQlwa2V5ID0gbG9hZF9rZXkoYmlvX2VyciwgaW5maWxlLCBpbmZvcm1hdCwgMSwKIAkJCQlwYXNzaW4sIGUsICJQcml2YXRlIEtleSIpOwogCi0JCWlmIChwa2V5ICE9IE5VTEwpCi0JCWRzYSA9IHBrZXkgPT0gTlVMTCA/IE5VTEwgOiBFVlBfUEtFWV9nZXQxX0RTQShwa2V5KTsKLQkJRVZQX1BLRVlfZnJlZShwa2V5KTsKLQl9CisJCWlmIChwa2V5KQorCQkJeworCQkJZHNhID0gRVZQX1BLRVlfZ2V0MV9EU0EocGtleSk7CisJCQlFVlBfUEtFWV9mcmVlKHBrZXkpOworCQkJfQorCQl9CiAJaWYgKGRzYSA9PSBOVUxMKQogCQl7CiAJCUJJT19wcmludGYoYmlvX2VyciwidW5hYmxlIHRvIGxvYWQgS2V5XG4iKTsKQEAgLTMxMCwxMSArMzM0LDI0IEBACiAJCQlpPVBFTV93cml0ZV9iaW9fRFNBX1BVQktFWShvdXQsZHNhKTsKIAkJZWxzZSBpPVBFTV93cml0ZV9iaW9fRFNBUHJpdmF0ZUtleShvdXQsZHNhLGVuYywKIAkJCQkJCQlOVUxMLDAsTlVMTCwgcGFzc291dCk7CisjaWZuZGVmIE9QRU5TU0xfTk9fUlNBCisJfSBlbHNlIGlmIChvdXRmb3JtYXQgPT0gRk9STUFUX01TQkxPQiB8fCBvdXRmb3JtYXQgPT0gRk9STUFUX1BWSykgeworCQlFVlBfUEtFWSAqcGs7CisJCXBrID0gRVZQX1BLRVlfbmV3KCk7CisJCUVWUF9QS0VZX3NldDFfRFNBKHBrLCBkc2EpOworCQlpZiAob3V0Zm9ybWF0ID09IEZPUk1BVF9QVkspCisJCQlpID0gaTJiX1BWS19iaW8ob3V0LCBwaywgcHZrX2VuY3IsIDAsIHBhc3NvdXQpOworCQllbHNlIGlmIChwdWJpbiB8fCBwdWJvdXQpCisJCQlpID0gaTJiX1B1YmxpY0tleV9iaW8ob3V0LCBwayk7CisJCWVsc2UKKwkJCWkgPSBpMmJfUHJpdmF0ZUtleV9iaW8ob3V0LCBwayk7CisJCUVWUF9QS0VZX2ZyZWUocGspOworI2VuZGlmCiAJfSBlbHNlIHsKIAkJQklPX3ByaW50ZihiaW9fZXJyLCJiYWQgb3V0cHV0IGZvcm1hdCBzcGVjaWZpZWQgZm9yIG91dGZpbGVcbiIpOwogCQlnb3RvIGVuZDsKIAkJfQotCWlmICghaSkKKwlpZiAoaSA8PSAwKQogCQl7CiAJCUJJT19wcmludGYoYmlvX2VyciwidW5hYmxlIHRvIHdyaXRlIHByaXZhdGUga2V5XG4iKTsKIAkJRVJSX3ByaW50X2Vycm9ycyhiaW9fZXJyKTsKQEAgLTMzMCw0ICszNjcsMTAgQEAKIAlhcHBzX3NodXRkb3duKCk7CiAJT1BFTlNTTF9FWElUKHJldCk7CiAJfQorI2Vsc2UgLyogIU9QRU5TU0xfTk9fRFNBICovCisKKyMgaWYgUEVEQU5USUMKK3N0YXRpYyB2b2lkICpkdW1teT0mZHVtbXk7CisjIGVuZGlmCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXBwcy9lYy5jIGIvYXBwcy9lYy5jCmluZGV4IDc3MWUxNWYuLjMxMTk0YjQgMTAwNjQ0Ci0tLSBhL2FwcHMvZWMuYworKysgYi9hcHBzL2VjLmMKQEAgLTQwMCw0ICs0MDAsMTAgQEAKIAlhcHBzX3NodXRkb3duKCk7CiAJT1BFTlNTTF9FWElUKHJldCk7CiB9CisjZWxzZSAvKiAhT1BFTlNTTF9OT19FQyAqLworCisjIGlmIFBFREFOVElDCitzdGF0aWMgdm9pZCAqZHVtbXk9JmR1bW15OworIyBlbmRpZgorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FwcHMvZWNwYXJhbS5jIGIvYXBwcy9lY3BhcmFtLmMKaW5kZXggNGUxZmM4My4uZTlhYTBhMSAxMDA2NDQKLS0tIGEvYXBwcy9lY3BhcmFtLmMKKysrIGIvYXBwcy9lY3BhcmFtLmMKQEAgLTcyNSw0ICs3MjUsMTAgQEAKIAlCSU9fcHJpbnRmKG91dCwgIlxuXHR9O1xuXG4iKTsKIAlyZXR1cm4gMTsKIAl9CisjZWxzZSAvKiAhT1BFTlNTTF9OT19FQyAqLworCisjIGlmIFBFREFOVElDCitzdGF0aWMgdm9pZCAqZHVtbXk9JmR1bW15OworIyBlbmRpZgorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FwcHMvZW5jLmMgYi9hcHBzL2VuYy5jCmluZGV4IDhmNWU1YjguLjNjMmM5MWUgMTAwNjQ0Ci0tLSBhL2FwcHMvZW5jLmMKKysrIGIvYXBwcy9lbmMuYwpAQCAtNjcsNiArNjcsNyBAQAogI2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgogI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgogI2luY2x1ZGUgPG9wZW5zc2wvcGVtLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9jb21wLmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KIAogaW50IHNldF9oZXgoY2hhciAqaW4sdW5zaWduZWQgY2hhciAqb3V0LGludCBzaXplKTsKQEAgLTExNiw2ICsxMTcsMTAgQEAKIAljaGFyICpoa2V5PU5VTEwsKmhpdj1OVUxMLCpoc2FsdCA9IE5VTEw7CiAJY2hhciAqbWQ9TlVMTDsKIAlpbnQgZW5jPTEscHJpbnRrZXk9MCxpLGJhc2U2ND0wOworI2lmZGVmIFpMSUIKKwlpbnQgZG9femxpYj0wOworCUJJTyAqYnpsID0gTlVMTDsKKyNlbmRpZgogCWludCBkZWJ1Zz0wLG9sYjY0PTAsbm9zYWx0PTA7CiAJY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyPU5VTEwsKmM7CiAJRVZQX0NJUEhFUl9DVFggKmN0eCA9IE5VTEw7CkBAIC0xMjcsNyArMTMyLDYgQEAKIAljaGFyICplbmdpbmUgPSBOVUxMOwogI2VuZGlmCiAJY29uc3QgRVZQX01EICpkZ3N0PU5VTEw7Ci0JaW50IG5vbl9maXBzX2FsbG93ID0gMDsKIAogCWFwcHNfc3RhcnR1cCgpOwogCkBAIC0xNDIsOSArMTQ2LDE4IEBACiAJcHJvZ3JhbV9uYW1lKGFyZ3ZbMF0scG5hbWUsc2l6ZW9mIHBuYW1lKTsKIAlpZiAoc3RyY21wKHBuYW1lLCJiYXNlNjQiKSA9PSAwKQogCQliYXNlNjQ9MTsKKyNpZmRlZiBaTElCCisJaWYgKHN0cmNtcChwbmFtZSwiemxpYiIpID09IDApCisJCWRvX3psaWI9MTsKKyNlbmRpZgogCiAJY2lwaGVyPUVWUF9nZXRfY2lwaGVyYnluYW1lKHBuYW1lKTsKKyNpZmRlZiBaTElCCisJaWYgKCFkb196bGliICYmICFiYXNlNjQgJiYgKGNpcGhlciA9PSBOVUxMKQorCQkJCSYmIChzdHJjbXAocG5hbWUsImVuYyIpICE9IDApKQorI2Vsc2UKIAlpZiAoIWJhc2U2NCAmJiAoY2lwaGVyID09IE5VTEwpICYmIChzdHJjbXAocG5hbWUsImVuYyIpICE9IDApKQorI2VuZGlmCiAJCXsKIAkJQklPX3ByaW50ZihiaW9fZXJyLCIlcyBpcyBhbiB1bmtub3duIGNpcGhlclxuIixwbmFtZSk7CiAJCWdvdG8gYmFkOwpAQCAtMjAwLDYgKzIxMywxMCBAQAogCQkJYmFzZTY0PTE7CiAJCWVsc2UgaWYJKHN0cmNtcCgqYXJndiwiLWJhc2U2NCIpID09IDApCiAJCQliYXNlNjQ9MTsKKyNpZmRlZiBaTElCCisJCWVsc2UgaWYJKHN0cmNtcCgqYXJndiwiLXoiKSA9PSAwKQorCQkJZG9femxpYj0xOworI2VuZGlmCiAJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiLWJ1ZnNpemUiKSA9PSAwKQogCQkJewogCQkJaWYgKC0tYXJnYyA8IDEpIGdvdG8gYmFkOwpAQCAtMjY3LDggKzI4NCw2IEBACiAJCQlpZiAoLS1hcmdjIDwgMSkgZ290byBiYWQ7CiAJCQltZD0gKigrK2FyZ3YpOwogCQkJfQotCQllbHNlIGlmIChzdHJjbXAoKmFyZ3YsIi1ub24tZmlwcy1hbGxvdyIpID09IDApCi0JCQlub25fZmlwc19hbGxvdyA9IDE7CiAJCWVsc2UgaWYJKChhcmd2WzBdWzBdID09ICctJykgJiYKIAkJCSgoYz1FVlBfZ2V0X2NpcGhlcmJ5bmFtZSgmKGFyZ3ZbMF1bMV0pKSkgIT0gTlVMTCkpCiAJCQl7CkBAIC0yOTEsOSArMzA2LDExIEBACiAJCQlCSU9fcHJpbnRmKGJpb19lcnIsIiUtMTRzIHBhc3NwaHJhc2UgaXMgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIGZpbGUgYXJndW1lbnRcbiIsIi1rZmlsZSIpOwogCQkJQklPX3ByaW50ZihiaW9fZXJyLCIlLTE0cyB0aGUgbmV4dCBhcmd1bWVudCBpcyB0aGUgbWQgdG8gdXNlIHRvIGNyZWF0ZSBhIGtleVxuIiwiLW1kIik7CiAJCQlCSU9fcHJpbnRmKGJpb19lcnIsIiUtMTRzICAgZnJvbSBhIHBhc3NwaHJhc2UuICBPbmUgb2YgbWQyLCBtZDUsIHNoYSBvciBzaGExXG4iLCIiKTsKKwkJCUJJT19wcmludGYoYmlvX2VyciwiJS0xNHMgc2FsdCBpbiBoZXggaXMgdGhlIG5leHQgYXJndW1lbnRcbiIsIi1TIik7CiAJCQlCSU9fcHJpbnRmKGJpb19lcnIsIiUtMTRzIGtleS9pdiBpbiBoZXggaXMgdGhlIG5leHQgYXJndW1lbnRcbiIsIi1LLy1pdiIpOwogCQkJQklPX3ByaW50ZihiaW9fZXJyLCIlLTE0cyBwcmludCB0aGUgaXYva2V5ICh0aGVuIGV4aXQgaWYgLVApXG4iLCItW3BQXSIpOwogCQkJQklPX3ByaW50ZihiaW9fZXJyLCIlLTE0cyBidWZmZXIgc2l6ZVxuIiwiLWJ1ZnNpemUgPG4+Iik7CisJCQlCSU9fcHJpbnRmKGJpb19lcnIsIiUtMTRzIGRpc2FibGUgc3RhbmRhcmQgYmxvY2sgcGFkZGluZ1xuIiwiLW5vcGFkIik7CiAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCiAJCQlCSU9fcHJpbnRmKGJpb19lcnIsIiUtMTRzIHVzZSBlbmdpbmUgZSwgcG9zc2libHkgYSBoYXJkd2FyZSBkZXZpY2UuXG4iLCItZW5naW5lIGUiKTsKICNlbmRpZgpAQCAtMzIyLDEwICszMzksNyBAQAogCiAJaWYgKGRnc3QgPT0gTlVMTCkKIAkJewotCQlpZiAoaW5fRklQU19tb2RlKQotCQkJZGdzdCA9IEVWUF9zaGExKCk7Ci0JCWVsc2UKLQkJCWRnc3QgPSBFVlBfbWQ1KCk7CisJCWRnc3QgPSBFVlBfbWQ1KCk7CiAJCX0KIAogCWlmIChidWZzaXplICE9IE5VTEwpCkBAIC00NTcsNiArNDcxLDE5IEBACiAJcmJpbz1pbjsKIAl3YmlvPW91dDsKIAorI2lmZGVmIFpMSUIKKworCWlmIChkb196bGliKQorCQl7CisJCWlmICgoYnpsPUJJT19uZXcoQklPX2ZfemxpYigpKSkgPT0gTlVMTCkKKwkJCWdvdG8gZW5kOworCQlpZiAoZW5jKQorCQkJd2Jpbz1CSU9fcHVzaChiemwsd2Jpbyk7CisJCWVsc2UKKwkJCXJiaW89QklPX3B1c2goYnpsLHJiaW8pOworCQl9CisjZW5kaWYKKwogCWlmIChiYXNlNjQpCiAJCXsKIAkJaWYgKChiNjQ9QklPX25ldyhCSU9fZl9iYXNlNjQoKSkpID09IE5VTEwpCkBAIC01NjEsMTEgKzU4OCw2IEBACiAJCSAqLwogCiAJCUJJT19nZXRfY2lwaGVyX2N0eChiZW5jLCAmY3R4KTsKLQotCQlpZiAobm9uX2ZpcHNfYWxsb3cpCi0JCQlFVlBfQ0lQSEVSX0NUWF9zZXRfZmxhZ3MoY3R4LAotCQkJCUVWUF9DSVBIX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpOwotCiAJCWlmICghRVZQX0NpcGhlckluaXRfZXgoY3R4LCBjaXBoZXIsIE5VTEwsIE5VTEwsIE5VTEwsIGVuYykpCiAJCQl7CiAJCQlCSU9fcHJpbnRmKGJpb19lcnIsICJFcnJvciBzZXR0aW5nIGNpcGhlciAlc1xuIiwKQEAgLTY1Niw2ICs2NzgsOSBAQAogCWlmIChvdXQgIT0gTlVMTCkgQklPX2ZyZWVfYWxsKG91dCk7CiAJaWYgKGJlbmMgIT0gTlVMTCkgQklPX2ZyZWUoYmVuYyk7CiAJaWYgKGI2NCAhPSBOVUxMKSBCSU9fZnJlZShiNjQpOworI2lmZGVmIFpMSUIKKwlpZiAoYnpsICE9IE5VTEwpIEJJT19mcmVlKGJ6bCk7CisjZW5kaWYKIAlpZihwYXNzKSBPUEVOU1NMX2ZyZWUocGFzcyk7CiAJYXBwc19zaHV0ZG93bigpOwogCU9QRU5TU0xfRVhJVChyZXQpOwpkaWZmIC0tZ2l0IGEvYXBwcy9lbmdpbmUuYyBiL2FwcHMvZW5naW5lLmMKaW5kZXggMTdiZDgxZi4uOWEwMjk0MyAxMDA2NDQKLS0tIGEvYXBwcy9lbmdpbmUuYworKysgYi9hcHBzL2VuZ2luZS5jCkBAIC05Miw3ICs5Miw3IEBACiBOVUxMCiB9OwogCi1zdGF0aWMgdm9pZCBpZGVudGl0eSh2b2lkICpwdHIpCitzdGF0aWMgdm9pZCBpZGVudGl0eShjaGFyICpwdHIpCiAJewogCXJldHVybjsKIAl9CkBAIC0xNDgsMTEgKzE0OCw2IEBACiAKIAlpZihmbGFncyAmIEVOR0lORV9DTURfRkxBR19OVU1FUklDKQogCQl7Ci0JCWlmKHN0YXJ0ZWQpCi0JCQl7Ci0JCQlCSU9fcHJpbnRmKGJpb19vdXQsICJ8Iik7Ci0JCQllcnIgPSAxOwotCQkJfQogCQlCSU9fcHJpbnRmKGJpb19vdXQsICJOVU1FUklDIik7CiAJCXN0YXJ0ZWQgPSAxOwogCQl9CkBAIC0yMDUsNyArMjAwLDcgQEAKIAljaGFyICpkZXNjID0gTlVMTDsKIAlpbnQgZmxhZ3M7CiAJaW50IHhwb3MgPSAwOwotCVNUQUNLICpjbWRzID0gTlVMTDsKKwlTVEFDS19PRihPUEVOU1NMX1NUUklORykgKmNtZHMgPSBOVUxMOwogCWlmKCFFTkdJTkVfY3RybChlLCBFTkdJTkVfQ1RSTF9IQVNfQ1RSTF9GVU5DVElPTiwgMCwgTlVMTCwgTlVMTCkgfHwKIAkJCSgobnVtID0gRU5HSU5FX2N0cmwoZSwgRU5HSU5FX0NUUkxfR0VUX0ZJUlNUX0NNRF9UWVBFLAogCQkJCQkwLCBOVUxMLCBOVUxMKSkgPD0gMCkpCkBAIC0yMTYsNyArMjExLDcgQEAKIAkJcmV0dXJuIDE7CiAJCX0KIAotCWNtZHMgPSBza19uZXdfbnVsbCgpOworCWNtZHMgPSBza19PUEVOU1NMX1NUUklOR19uZXdfbnVsbCgpOwogCiAJaWYoIWNtZHMpCiAJCWdvdG8gZXJyOwpAQCAtMjg5LDE1ICsyODQsMTcgQEAKIAkJQklPX3ByaW50ZihiaW9fb3V0LCAiXG4iKTsKIAlyZXQgPSAxOwogZXJyOgotCWlmKGNtZHMpIHNrX3BvcF9mcmVlKGNtZHMsIGlkZW50aXR5KTsKKwlpZihjbWRzKSBza19PUEVOU1NMX1NUUklOR19wb3BfZnJlZShjbWRzLCBpZGVudGl0eSk7CiAJaWYobmFtZSkgT1BFTlNTTF9mcmVlKG5hbWUpOwogCWlmKGRlc2MpIE9QRU5TU0xfZnJlZShkZXNjKTsKIAlyZXR1cm4gcmV0OwogCX0KIAotc3RhdGljIHZvaWQgdXRpbF9kb19jbWRzKEVOR0lORSAqZSwgU1RBQ0sgKmNtZHMsIEJJTyAqYmlvX291dCwgY29uc3QgY2hhciAqaW5kZW50KQorc3RhdGljIHZvaWQgdXRpbF9kb19jbWRzKEVOR0lORSAqZSwgU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpICpjbWRzLAorCQkJQklPICpiaW9fb3V0LCBjb25zdCBjaGFyICppbmRlbnQpCiAJewotCWludCBsb29wLCByZXMsIG51bSA9IHNrX251bShjbWRzKTsKKwlpbnQgbG9vcCwgcmVzLCBudW0gPSBza19PUEVOU1NMX1NUUklOR19udW0oY21kcyk7CisKIAlpZihudW0gPCAwKQogCQl7CiAJCUJJT19wcmludGYoYmlvX291dCwgIltFcnJvcl06IGludGVybmFsIHN0YWNrIGVycm9yXG4iKTsKQEAgLTMwNyw3ICszMDQsNyBAQAogCQl7CiAJCWNoYXIgYnVmWzI1Nl07CiAJCWNvbnN0IGNoYXIgKmNtZCwgKmFyZzsKLQkJY21kID0gc2tfdmFsdWUoY21kcywgbG9vcCk7CisJCWNtZCA9IHNrX09QRU5TU0xfU1RSSU5HX3ZhbHVlKGNtZHMsIGxvb3ApOwogCQlyZXMgPSAxOyAvKiBhc3N1bWUgc3VjY2VzcyAqLwogCQkvKiBDaGVjayBpZiB0aGlzIGNvbW1hbmQgaGFzIG5vICI6YXJnIiAqLwogCQlpZigoYXJnID0gc3Ryc3RyKGNtZCwgIjoiKSkgPT0gTlVMTCkKQEAgLTM0Nyw5ICszNDQsOSBAQAogCWNvbnN0IGNoYXIgKipwcDsKIAlpbnQgdmVyYm9zZT0wLCBsaXN0X2NhcD0wLCB0ZXN0X2F2YWlsPTAsIHRlc3RfYXZhaWxfbm9pc2UgPSAwOwogCUVOR0lORSAqZTsKLQlTVEFDSyAqZW5naW5lcyA9IHNrX25ld19udWxsKCk7Ci0JU1RBQ0sgKnByZV9jbWRzID0gc2tfbmV3X251bGwoKTsKLQlTVEFDSyAqcG9zdF9jbWRzID0gc2tfbmV3X251bGwoKTsKKwlTVEFDS19PRihPUEVOU1NMX1NUUklORykgKmVuZ2luZXMgPSBza19PUEVOU1NMX1NUUklOR19uZXdfbnVsbCgpOworCVNUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSAqcHJlX2NtZHMgPSBza19PUEVOU1NMX1NUUklOR19uZXdfbnVsbCgpOworCVNUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSAqcG9zdF9jbWRzID0gc2tfT1BFTlNTTF9TVFJJTkdfbmV3X251bGwoKTsKIAlpbnQgYmFkb3BzPTE7CiAJQklPICpiaW9fb3V0PU5VTEw7CiAJY29uc3QgY2hhciAqaW5kZW50ID0gIiAgICAgIjsKQEAgLTM5NiwyMCArMzkzLDIwIEBACiAJCQlhcmdjLS07IGFyZ3YrKzsKIAkJCWlmIChhcmdjID09IDApCiAJCQkJZ290byBza2lwX2FyZ19sb29wOwotCQkJc2tfcHVzaChwcmVfY21kcywqYXJndik7CisJCQlza19PUEVOU1NMX1NUUklOR19wdXNoKHByZV9jbWRzLCphcmd2KTsKIAkJCX0KIAkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCItcG9zdCIpID09IDApCiAJCQl7CiAJCQlhcmdjLS07IGFyZ3YrKzsKIAkJCWlmIChhcmdjID09IDApCiAJCQkJZ290byBza2lwX2FyZ19sb29wOwotCQkJc2tfcHVzaChwb3N0X2NtZHMsKmFyZ3YpOworCQkJc2tfT1BFTlNTTF9TVFJJTkdfcHVzaChwb3N0X2NtZHMsKmFyZ3YpOwogCQkJfQogCQllbHNlIGlmICgoc3RybmNtcCgqYXJndiwiLWgiLDIpID09IDApIHx8CiAJCQkJKHN0cmNtcCgqYXJndiwiLT8iKSA9PSAwKSkKIAkJCWdvdG8gc2tpcF9hcmdfbG9vcDsKIAkJZWxzZQotCQkJc2tfcHVzaChlbmdpbmVzLCphcmd2KTsKKwkJCXNrX09QRU5TU0xfU1RSSU5HX3B1c2goZW5naW5lcywqYXJndik7CiAJCWFyZ2MtLTsKIAkJYXJndisrOwogCQl9CkBAIC00MjQsMTcgKzQyMSwxNyBAQAogCQlnb3RvIGVuZDsKIAkJfQogCi0JaWYgKHNrX251bShlbmdpbmVzKSA9PSAwKQorCWlmIChza19PUEVOU1NMX1NUUklOR19udW0oZW5naW5lcykgPT0gMCkKIAkJewogCQlmb3IoZSA9IEVOR0lORV9nZXRfZmlyc3QoKTsgZSAhPSBOVUxMOyBlID0gRU5HSU5FX2dldF9uZXh0KGUpKQogCQkJewotCQkJc2tfcHVzaChlbmdpbmVzLChjaGFyICopRU5HSU5FX2dldF9pZChlKSk7CisJCQlza19PUEVOU1NMX1NUUklOR19wdXNoKGVuZ2luZXMsKGNoYXIgKilFTkdJTkVfZ2V0X2lkKGUpKTsKIAkJCX0KIAkJfQogCi0JZm9yIChpPTA7IGk8c2tfbnVtKGVuZ2luZXMpOyBpKyspCisJZm9yIChpPTA7IGk8c2tfT1BFTlNTTF9TVFJJTkdfbnVtKGVuZ2luZXMpOyBpKyspCiAJCXsKLQkJY29uc3QgY2hhciAqaWQgPSBza192YWx1ZShlbmdpbmVzLGkpOworCQljb25zdCBjaGFyICppZCA9IHNrX09QRU5TU0xfU1RSSU5HX3ZhbHVlKGVuZ2luZXMsaSk7CiAJCWlmICgoZSA9IEVOR0lORV9ieV9pZChpZCkpICE9IE5VTEwpCiAJCQl7CiAJCQljb25zdCBjaGFyICpuYW1lID0gRU5HSU5FX2dldF9uYW1lKGUpOwpAQCAtNDU0LDYgKzQ1MSw3IEBACiAJCQkJY29uc3QgaW50ICpuaWRzOwogCQkJCUVOR0lORV9DSVBIRVJTX1BUUiBmbl9jOwogCQkJCUVOR0lORV9ESUdFU1RTX1BUUiBmbl9kOworCQkJCUVOR0lORV9QS0VZX01FVEhTX1BUUiBmbl9wazsKIAogCQkJCWlmIChFTkdJTkVfZ2V0X1JTQShlKSAhPSBOVUxMCiAJCQkJCSYmICFhcHBlbmRfYnVmKCZjYXBfYnVmLCAiUlNBIiwKQEAgLTQ5Miw2ICs0OTAsMTUgQEAKIAkJCQkJCWdvdG8gZW5kOwogCiBza2lwX2RpZ2VzdHM6CisJCQkJZm5fcGsgPSBFTkdJTkVfZ2V0X3BrZXlfbWV0aHMoZSk7CisJCQkJaWYoIWZuX3BrKSBnb3RvIHNraXBfcG1ldGhzOworCQkJCW4gPSBmbl9wayhlLCBOVUxMLCAmbmlkcywgMCk7CisJCQkJZm9yKGs9MCA7IGsgPCBuIDsgKytrKQorCQkJCQlpZighYXBwZW5kX2J1ZigmY2FwX2J1ZiwKKwkJCQkJCSAgICAgICBPQkpfbmlkMnNuKG5pZHNba10pLAorCQkJCQkJICAgICAgICZjYXBfc2l6ZSwgMjU2KSkKKwkJCQkJCWdvdG8gZW5kOworc2tpcF9wbWV0aHM6CiAJCQkJaWYgKGNhcF9idWYgJiYgKCpjYXBfYnVmICE9ICdcMCcpKQogCQkJCQlCSU9fcHJpbnRmKGJpb19vdXQsICIgWyVzXVxuIiwgY2FwX2J1Zik7CiAKQEAgLTUyNiw5ICs1MzMsOSBAQAogZW5kOgogCiAJRVJSX3ByaW50X2Vycm9ycyhiaW9fZXJyKTsKLQlza19wb3BfZnJlZShlbmdpbmVzLCBpZGVudGl0eSk7Ci0Jc2tfcG9wX2ZyZWUocHJlX2NtZHMsIGlkZW50aXR5KTsKLQlza19wb3BfZnJlZShwb3N0X2NtZHMsIGlkZW50aXR5KTsKKwlza19PUEVOU1NMX1NUUklOR19wb3BfZnJlZShlbmdpbmVzLCBpZGVudGl0eSk7CisJc2tfT1BFTlNTTF9TVFJJTkdfcG9wX2ZyZWUocHJlX2NtZHMsIGlkZW50aXR5KTsKKwlza19PUEVOU1NMX1NUUklOR19wb3BfZnJlZShwb3N0X2NtZHMsIGlkZW50aXR5KTsKIAlpZiAoYmlvX291dCAhPSBOVUxMKSBCSU9fZnJlZV9hbGwoYmlvX291dCk7CiAJYXBwc19zaHV0ZG93bigpOwogCU9QRU5TU0xfRVhJVChyZXQpOwpkaWZmIC0tZ2l0IGEvYXBwcy9lcnJzdHIuYyBiL2FwcHMvZXJyc3RyLmMKaW5kZXggMTk0ODliMC4uZmUzYjk4MCAxMDA2NDQKLS0tIGEvYXBwcy9lcnJzdHIuYworKysgYi9hcHBzL2VycnN0ci5jCkBAIC05NywxMCArOTcsMTIgQEAKIAkJCW91dCA9IEJJT19wdXNoKHRtcGJpbywgb3V0KTsKIAkJCX0KICNlbmRpZgotCQkJbGhfbm9kZV9zdGF0c19iaW8oKExIQVNIICopRVJSX2dldF9zdHJpbmdfdGFibGUoKSxvdXQpOwotCQkJbGhfc3RhdHNfYmlvKChMSEFTSCAqKUVSUl9nZXRfc3RyaW5nX3RhYmxlKCksb3V0KTsKLQkJCWxoX25vZGVfdXNhZ2Vfc3RhdHNfYmlvKChMSEFTSCAqKQotCQkJCUVSUl9nZXRfc3RyaW5nX3RhYmxlKCksb3V0KTsKKwkJCWxoX0VSUl9TVFJJTkdfREFUQV9ub2RlX3N0YXRzX2JpbygKKwkJCQkJCSAgRVJSX2dldF9zdHJpbmdfdGFibGUoKSwgb3V0KTsKKwkJCWxoX0VSUl9TVFJJTkdfREFUQV9zdGF0c19iaW8oRVJSX2dldF9zdHJpbmdfdGFibGUoKSwKKwkJCQkJCSAgICAgb3V0KTsKKwkJCWxoX0VSUl9TVFJJTkdfREFUQV9ub2RlX3VzYWdlX3N0YXRzX2JpbygKKwkJCQkJCSAgICBFUlJfZ2V0X3N0cmluZ190YWJsZSgpLG91dCk7CiAJCQl9CiAJCWlmIChvdXQgIT0gTlVMTCkgQklPX2ZyZWVfYWxsKG91dCk7CiAJCWFyZ2MtLTsKZGlmZiAtLWdpdCBhL2FwcHMvZ2VuZGguYyBiL2FwcHMvZ2VuZGguYwppbmRleCA0NzQ5Nzg2Li5jYWE3MzI3IDEwMDY0NAotLS0gYS9hcHBzL2dlbmRoLmMKKysrIGIvYXBwcy9nZW5kaC5jCkBAIC0yMzUsNCArMjM1LDEwIEBACiAjZW5kaWYKIAlyZXR1cm4gMTsKIAl9CisjZWxzZSAvKiAhT1BFTlNTTF9OT19ESCAqLworCisjIGlmIFBFREFOVElDCitzdGF0aWMgdm9pZCAqZHVtbXk9JmR1bW15OworIyBlbmRpZgorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FwcHMvZ2VucGtleS5jIGIvYXBwcy9nZW5wa2V5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRmZGEwOAotLS0gL2Rldi9udWxsCisrKyBiL2FwcHMvZ2VucGtleS5jCkBAIC0wLDAgKzEsNDQwIEBACisvKiBhcHBzL2dlbnBrZXkuYyAqLworLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisgKiBwcm9qZWN0IDIwMDYKKyAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoYykgMjAwNiBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKyAqCisgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisgKgorICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisgKgorICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworICogICAgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorICoKKyAqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAiYXBwcy5oIgorI2luY2x1ZGUgPG9wZW5zc2wvcGVtLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQorI2luY2x1ZGUgPG9wZW5zc2wvZW5naW5lLmg+CisjZW5kaWYKKworc3RhdGljIGludCBpbml0X2tleWdlbl9maWxlKEJJTyAqZXJyLCBFVlBfUEtFWV9DVFggKipwY3R4LAorCQkJCWNvbnN0IGNoYXIgKmZpbGUsIEVOR0lORSAqZSk7CitzdGF0aWMgaW50IGdlbnBrZXlfY2IoRVZQX1BLRVlfQ1RYICpjdHgpOworCisjZGVmaW5lIFBST0cgZ2VucGtleV9tYWluCisKK2ludCBNQUlOKGludCwgY2hhciAqKik7CisKK2ludCBNQUlOKGludCBhcmdjLCBjaGFyICoqYXJndikKKwl7CisJRU5HSU5FICplID0gTlVMTDsKKwljaGFyICoqYXJncywgKm91dGZpbGUgPSBOVUxMOworCWNoYXIgKnBhc3NhcmcgPSBOVUxMOworCUJJTyAqaW4gPSBOVUxMLCAqb3V0ID0gTlVMTDsKKwljb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIgPSBOVUxMOworCWludCBvdXRmb3JtYXQ7CisJaW50IHRleHQgPSAwOworCUVWUF9QS0VZICpwa2V5PU5VTEw7CisJRVZQX1BLRVlfQ1RYICpjdHggPSBOVUxMOworCWNoYXIgKnBhc3MgPSBOVUxMOworCWludCBiYWRhcmcgPSAwOworCWludCByZXQgPSAxLCBydjsKKworCWludCBkb19wYXJhbSA9IDA7CisKKwlpZiAoYmlvX2VyciA9PSBOVUxMKQorCQliaW9fZXJyID0gQklPX25ld19mcCAoc3RkZXJyLCBCSU9fTk9DTE9TRSk7CisKKwlpZiAoIWxvYWRfY29uZmlnKGJpb19lcnIsIE5VTEwpKQorCQlnb3RvIGVuZDsKKworCW91dGZvcm1hdD1GT1JNQVRfUEVNOworCisJRVJSX2xvYWRfY3J5cHRvX3N0cmluZ3MoKTsKKwlPcGVuU1NMX2FkZF9hbGxfYWxnb3JpdGhtcygpOworCWFyZ3MgPSBhcmd2ICsgMTsKKwl3aGlsZSAoIWJhZGFyZyAmJiAqYXJncyAmJiAqYXJnc1swXSA9PSAnLScpCisJCXsKKwkJaWYgKCFzdHJjbXAoKmFyZ3MsIi1vdXRmb3JtIikpCisJCQl7CisJCQlpZiAoYXJnc1sxXSkKKwkJCQl7CisJCQkJYXJncysrOworCQkJCW91dGZvcm1hdD1zdHIyZm10KCphcmdzKTsKKwkJCQl9CisJCQllbHNlIGJhZGFyZyA9IDE7CisJCQl9CisJCWVsc2UgaWYgKCFzdHJjbXAoKmFyZ3MsIi1wYXNzIikpCisJCQl7CisJCQlpZiAoIWFyZ3NbMV0pIGdvdG8gYmFkOworCQkJcGFzc2FyZz0gKigrK2FyZ3MpOworCQkJfQorI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQorCQllbHNlIGlmIChzdHJjbXAoKmFyZ3MsIi1lbmdpbmUiKSA9PSAwKQorCQkJeworCQkJaWYgKCFhcmdzWzFdKQorCQkJCWdvdG8gYmFkOworICAgICAgICAJCWUgPSBzZXR1cF9lbmdpbmUoYmlvX2VyciwgKigrK2FyZ3MpLCAwKTsKKwkJCX0KKyNlbmRpZgorCQllbHNlIGlmICghc3RyY21wICgqYXJncywgIi1wYXJhbWZpbGUiKSkKKwkJCXsKKwkJCWlmICghYXJnc1sxXSkKKwkJCQlnb3RvIGJhZDsKKwkJCWFyZ3MrKzsKKwkJCWlmIChkb19wYXJhbSA9PSAxKQorCQkJCWdvdG8gYmFkOworCQkJaWYgKCFpbml0X2tleWdlbl9maWxlKGJpb19lcnIsICZjdHgsICphcmdzLCBlKSkKKwkJCQlnb3RvIGVuZDsKKwkJCX0KKwkJZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3MsICItb3V0IikpCisJCQl7CisJCQlpZiAoYXJnc1sxXSkKKwkJCQl7CisJCQkJYXJncysrOworCQkJCW91dGZpbGUgPSAqYXJnczsKKwkJCQl9CisJCQllbHNlIGJhZGFyZyA9IDE7CisJCQl9CisJCWVsc2UgaWYgKHN0cmNtcCgqYXJncywiLWFsZ29yaXRobSIpID09IDApCisJCQl7CisJCQlpZiAoIWFyZ3NbMV0pCisJCQkJZ290byBiYWQ7CisJCQlpZiAoIWluaXRfZ2VuX3N0cihiaW9fZXJyLCAmY3R4LCAqKCsrYXJncyksZSwgZG9fcGFyYW0pKQorCQkJCWdvdG8gZW5kOworCQkJfQorCQllbHNlIGlmIChzdHJjbXAoKmFyZ3MsIi1wa2V5b3B0IikgPT0gMCkKKwkJCXsKKwkJCWlmICghYXJnc1sxXSkKKwkJCQlnb3RvIGJhZDsKKwkJCWlmICghY3R4KQorCQkJCXsKKwkJCQlCSU9fcHV0cyhiaW9fZXJyLCAiTm8ga2V5dHlwZSBzcGVjaWZpZWRcbiIpOworCQkJCWdvdG8gYmFkOworCQkJCX0KKwkJCWVsc2UgaWYgKHBrZXlfY3RybF9zdHJpbmcoY3R4LCAqKCsrYXJncykpIDw9IDApCisJCQkJeworCQkJCUJJT19wdXRzKGJpb19lcnIsICJwYXJhbWV0ZXIgc2V0dGluZyBlcnJvclxuIik7CisJCQkJRVJSX3ByaW50X2Vycm9ycyhiaW9fZXJyKTsKKwkJCQlnb3RvIGVuZDsKKwkJCQl9CisJCQl9CisJCWVsc2UgaWYgKHN0cmNtcCgqYXJncywiLWdlbnBhcmFtIikgPT0gMCkKKwkJCXsKKwkJCWlmIChjdHgpCisJCQkJZ290byBiYWQ7CisJCQlkb19wYXJhbSA9IDE7CisJCQl9CisJCWVsc2UgaWYgKHN0cmNtcCgqYXJncywiLXRleHQiKSA9PSAwKQorCQkJdGV4dD0xOworCQllbHNlCisJCQl7CisJCQljaXBoZXIgPSBFVlBfZ2V0X2NpcGhlcmJ5bmFtZSgqYXJncyArIDEpOworCQkJaWYgKCFjaXBoZXIpCisJCQkJeworCQkJCUJJT19wcmludGYoYmlvX2VyciwgIlVua25vd24gY2lwaGVyICVzXG4iLAorCQkJCQkJCQkqYXJncyArIDEpOworCQkJCWJhZGFyZyA9IDE7CisJCQkJfQorCQkJaWYgKGRvX3BhcmFtID09IDEpCisJCQkJYmFkYXJnID0gMTsKKwkJCX0KKwkJYXJncysrOworCQl9CisKKwlpZiAoIWN0eCkKKwkJYmFkYXJnID0gMTsKKworCWlmIChiYWRhcmcpCisJCXsKKwkJYmFkOgorCQlCSU9fcHJpbnRmKGJpb19lcnIsICJVc2FnZTogZ2VucGtleSBbb3B0aW9uc11cbiIpOworCQlCSU9fcHJpbnRmKGJpb19lcnIsICJ3aGVyZSBvcHRpb25zIG1heSBiZVxuIik7CisJCUJJT19wcmludGYoYmlvX2VyciwgIi1vdXQgZmlsZSAgICAgICAgICBvdXRwdXQgZmlsZVxuIik7CisJCUJJT19wcmludGYoYmlvX2VyciwgIi1vdXRmb3JtIFggICAgICAgICBvdXRwdXQgZm9ybWF0IChERVIgb3IgUEVNKVxuIik7CisJCUJJT19wcmludGYoYmlvX2VyciwgIi1wYXNzIGFyZyAgICAgICAgICBvdXRwdXQgZmlsZSBwYXNzIHBocmFzZSBzb3VyY2VcbiIpOworCQlCSU9fcHJpbnRmKGJpb19lcnIsICItPGNpcGhlcj4gICAgICAgICAgdXNlIGNpcGhlciA8Y2lwaGVyPiB0byBlbmNyeXB0IHRoZSBrZXlcbiIpOworI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQorCQlCSU9fcHJpbnRmKGJpb19lcnIsICItZW5naW5lIGUgICAgICAgICAgdXNlIGVuZ2luZSBlLCBwb3NzaWJseSBhIGhhcmR3YXJlIGRldmljZS5cbiIpOworI2VuZGlmCisJCUJJT19wcmludGYoYmlvX2VyciwgIi1wYXJhbWZpbGUgZmlsZSAgICBwYXJhbWV0ZXJzIGZpbGVcbiIpOworCQlCSU9fcHJpbnRmKGJpb19lcnIsICItYWxnb3JpdGhtIGFsZyAgICAgdGhlIHB1YmxpYyBrZXkgYWxnb3JpdGhtXG4iKTsKKwkJQklPX3ByaW50ZihiaW9fZXJyLCAiLXBrZXlvcHQgb3B0OnZhbHVlIHNldCB0aGUgcHVibGljIGtleSBhbGdvcml0aG0gb3B0aW9uIDxvcHQ+XG4iCisJCQkJICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICB0byB2YWx1ZSA8dmFsdWU+XG4iKTsKKwkJQklPX3ByaW50ZihiaW9fZXJyLCAiLWdlbnBhcmFtICAgICAgICAgIGdlbmVyYXRlIHBhcmFtZXRlcnMsIG5vdCBrZXlcbiIpOworCQlCSU9fcHJpbnRmKGJpb19lcnIsICItdGV4dCAgICAgICAgICAgICAgcHJpbnQgdGhlIGluIHRleHRcbiIpOworCQlCSU9fcHJpbnRmKGJpb19lcnIsICJOQjogb3B0aW9ucyBvcmRlciBtYXkgYmUgaW1wb3J0YW50ISAgU2VlIHRoZSBtYW51YWwgcGFnZS5cbiIpOworCQlnb3RvIGVuZDsKKwkJfQorCisJaWYgKCFhcHBfcGFzc3dkKGJpb19lcnIsIHBhc3NhcmcsIE5VTEwsICZwYXNzLCBOVUxMKSkKKwkJeworCQlCSU9fcHV0cyhiaW9fZXJyLCAiRXJyb3IgZ2V0dGluZyBwYXNzd29yZFxuIik7CisJCWdvdG8gZW5kOworCQl9CisKKwlpZiAob3V0ZmlsZSkKKwkJeworCQlpZiAoIShvdXQgPSBCSU9fbmV3X2ZpbGUgKG91dGZpbGUsICJ3YiIpKSkKKwkJCXsKKwkJCUJJT19wcmludGYoYmlvX2VyciwKKwkJCQkgIkNhbid0IG9wZW4gb3V0cHV0IGZpbGUgJXNcbiIsIG91dGZpbGUpOworCQkJZ290byBlbmQ7CisJCQl9CisJCX0KKwllbHNlCisJCXsKKwkJb3V0ID0gQklPX25ld19mcCAoc3Rkb3V0LCBCSU9fTk9DTE9TRSk7CisjaWZkZWYgT1BFTlNTTF9TWVNfVk1TCisJCQl7CisJCQlCSU8gKnRtcGJpbyA9IEJJT19uZXcoQklPX2ZfbGluZWJ1ZmZlcigpKTsKKwkJCW91dCA9IEJJT19wdXNoKHRtcGJpbywgb3V0KTsKKwkJCX0KKyNlbmRpZgorCQl9CisKKwlFVlBfUEtFWV9DVFhfc2V0X2NiKGN0eCwgZ2VucGtleV9jYik7CisJRVZQX1BLRVlfQ1RYX3NldF9hcHBfZGF0YShjdHgsIGJpb19lcnIpOworCisJaWYgKGRvX3BhcmFtKQorCQl7CisJCWlmIChFVlBfUEtFWV9wYXJhbWdlbihjdHgsICZwa2V5KSA8PSAwKQorCQkJeworCQkJQklPX3B1dHMoYmlvX2VyciwgIkVycm9yIGdlbmVyYXRpbmcgcGFyYW1ldGVyc1xuIik7CisJCQlFUlJfcHJpbnRfZXJyb3JzKGJpb19lcnIpOworCQkJZ290byBlbmQ7CisJCQl9CisJCX0KKwllbHNlCisJCXsKKwkJaWYgKEVWUF9QS0VZX2tleWdlbihjdHgsICZwa2V5KSA8PSAwKQorCQkJeworCQkJQklPX3B1dHMoYmlvX2VyciwgIkVycm9yIGdlbmVyYXRpbmcga2V5XG4iKTsKKwkJCUVSUl9wcmludF9lcnJvcnMoYmlvX2Vycik7CisJCQlnb3RvIGVuZDsKKwkJCX0KKwkJfQorCisJaWYgKGRvX3BhcmFtKQorCQlydiA9IFBFTV93cml0ZV9iaW9fUGFyYW1ldGVycyhvdXQsIHBrZXkpOworCWVsc2UgaWYgKG91dGZvcm1hdCA9PSBGT1JNQVRfUEVNKSAKKwkJcnYgPSBQRU1fd3JpdGVfYmlvX1ByaXZhdGVLZXkob3V0LCBwa2V5LCBjaXBoZXIsIE5VTEwsIDAsCisJCQkJCQkJCU5VTEwsIHBhc3MpOworCWVsc2UgaWYgKG91dGZvcm1hdCA9PSBGT1JNQVRfQVNOMSkKKwkJcnYgPSBpMmRfUHJpdmF0ZUtleV9iaW8ob3V0LCBwa2V5KTsKKwllbHNlCisJCXsKKwkJQklPX3ByaW50ZihiaW9fZXJyLCAiQmFkIGZvcm1hdCBzcGVjaWZpZWQgZm9yIGtleVxuIik7CisJCWdvdG8gZW5kOworCQl9CisKKwlpZiAocnYgPD0gMCkKKwkJeworCQlCSU9fcHV0cyhiaW9fZXJyLCAiRXJyb3Igd3JpdGluZyBrZXlcbiIpOworCQlFUlJfcHJpbnRfZXJyb3JzKGJpb19lcnIpOworCQl9CisKKwlpZiAodGV4dCkKKwkJeworCQlpZiAoZG9fcGFyYW0pCisJCQlydiA9IEVWUF9QS0VZX3ByaW50X3BhcmFtcyhvdXQsIHBrZXksIDAsIE5VTEwpOworCQllbHNlCisJCQlydiA9IEVWUF9QS0VZX3ByaW50X3ByaXZhdGUob3V0LCBwa2V5LCAwLCBOVUxMKTsKKworCQlpZiAocnYgPD0gMCkKKwkJCXsKKwkJCUJJT19wdXRzKGJpb19lcnIsICJFcnJvciBwcmludGluZyBrZXlcbiIpOworCQkJRVJSX3ByaW50X2Vycm9ycyhiaW9fZXJyKTsKKwkJCX0KKwkJfQorCisJcmV0ID0gMDsKKworCWVuZDoKKwlpZiAocGtleSkKKwkJRVZQX1BLRVlfZnJlZShwa2V5KTsKKwlpZiAoY3R4KQorCQlFVlBfUEtFWV9DVFhfZnJlZShjdHgpOworCWlmIChvdXQpCisJCUJJT19mcmVlX2FsbChvdXQpOworCUJJT19mcmVlKGluKTsKKwlpZiAocGFzcykKKwkJT1BFTlNTTF9mcmVlKHBhc3MpOworCisJcmV0dXJuIHJldDsKKwl9CisKK3N0YXRpYyBpbnQgaW5pdF9rZXlnZW5fZmlsZShCSU8gKmVyciwgRVZQX1BLRVlfQ1RYICoqcGN0eCwKKwkJCQljb25zdCBjaGFyICpmaWxlLCBFTkdJTkUgKmUpCisJeworCUJJTyAqcGJpbzsKKwlFVlBfUEtFWSAqcGtleSA9IE5VTEw7CisJRVZQX1BLRVlfQ1RYICpjdHggPSBOVUxMOworCWlmICgqcGN0eCkKKwkJeworCQlCSU9fcHV0cyhlcnIsICJQYXJhbWV0ZXJzIGFscmVhZHkgc2V0IVxuIik7CisJCXJldHVybiAwOworCQl9CisKKwlwYmlvID0gQklPX25ld19maWxlKGZpbGUsICJyIik7CisJaWYgKCFwYmlvKQorCQl7CisJCUJJT19wcmludGYoZXJyLCAiQ2FuJ3Qgb3BlbiBwYXJhbWV0ZXIgZmlsZSAlc1xuIiwgZmlsZSk7CisJCXJldHVybiAwOworCQl9CisKKwlwa2V5ID0gUEVNX3JlYWRfYmlvX1BhcmFtZXRlcnMocGJpbywgTlVMTCk7CisJQklPX2ZyZWUocGJpbyk7CisKKwlpZiAoIXBrZXkpCisJCXsKKwkJQklPX3ByaW50ZihiaW9fZXJyLCAiRXJyb3IgcmVhZGluZyBwYXJhbWV0ZXIgZmlsZSAlc1xuIiwgZmlsZSk7CisJCXJldHVybiAwOworCQl9CisKKwljdHggPSBFVlBfUEtFWV9DVFhfbmV3KHBrZXksIGUpOworCWlmICghY3R4KQorCQlnb3RvIGVycjsKKwlpZiAoRVZQX1BLRVlfa2V5Z2VuX2luaXQoY3R4KSA8PSAwKQorCQlnb3RvIGVycjsKKwlFVlBfUEtFWV9mcmVlKHBrZXkpOworCSpwY3R4ID0gY3R4OworCXJldHVybiAxOworCisJZXJyOgorCUJJT19wdXRzKGVyciwgIkVycm9yIGluaXRpYWxpemluZyBjb250ZXh0XG4iKTsKKwlFUlJfcHJpbnRfZXJyb3JzKGVycik7CisJaWYgKGN0eCkKKwkJRVZQX1BLRVlfQ1RYX2ZyZWUoY3R4KTsKKwlpZiAocGtleSkKKwkJRVZQX1BLRVlfZnJlZShwa2V5KTsKKwlyZXR1cm4gMDsKKworCX0KKworaW50IGluaXRfZ2VuX3N0cihCSU8gKmVyciwgRVZQX1BLRVlfQ1RYICoqcGN0eCwKKwkJCWNvbnN0IGNoYXIgKmFsZ25hbWUsIEVOR0lORSAqZSwgaW50IGRvX3BhcmFtKQorCXsKKwlFVlBfUEtFWV9DVFggKmN0eCA9IE5VTEw7CisJY29uc3QgRVZQX1BLRVlfQVNOMV9NRVRIT0QgKmFtZXRoOworCUVOR0lORSAqdG1wZW5nID0gTlVMTDsKKwlpbnQgcGtleV9pZDsKKworCWlmICgqcGN0eCkKKwkJeworCQlCSU9fcHV0cyhlcnIsICJBbGdvcml0aG0gYWxyZWFkeSBzZXQhXG4iKTsKKwkJcmV0dXJuIDA7CisJCX0KKworCWFtZXRoID0gRVZQX1BLRVlfYXNuMV9maW5kX3N0cigmdG1wZW5nLCBhbGduYW1lLCAtMSk7CisKKyNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKKwlpZiAoIWFtZXRoICYmIGUpCisJCWFtZXRoID0gRU5HSU5FX2dldF9wa2V5X2FzbjFfbWV0aF9zdHIoZSwgYWxnbmFtZSwgLTEpOworI2VuZGlmCisKKwlpZiAoIWFtZXRoKQorCQl7CisJCUJJT19wcmludGYoYmlvX2VyciwgIkFsZ29yaXRobSAlcyBub3QgZm91bmRcbiIsIGFsZ25hbWUpOworCQlyZXR1cm4gMDsKKwkJfQorCisJRVJSX2NsZWFyX2Vycm9yKCk7CisKKwlFVlBfUEtFWV9hc24xX2dldDBfaW5mbygmcGtleV9pZCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgYW1ldGgpOworI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQorCWlmICh0bXBlbmcpCisJCUVOR0lORV9maW5pc2godG1wZW5nKTsKKyNlbmRpZgorCWN0eCA9IEVWUF9QS0VZX0NUWF9uZXdfaWQocGtleV9pZCwgZSk7CisKKwlpZiAoIWN0eCkKKwkJZ290byBlcnI7CisJaWYgKGRvX3BhcmFtKQorCQl7CisJCWlmIChFVlBfUEtFWV9wYXJhbWdlbl9pbml0KGN0eCkgPD0gMCkKKwkJCWdvdG8gZXJyOworCQl9CisJZWxzZQorCQl7CisJCWlmIChFVlBfUEtFWV9rZXlnZW5faW5pdChjdHgpIDw9IDApCisJCQlnb3RvIGVycjsKKwkJfQorCisJKnBjdHggPSBjdHg7CisJcmV0dXJuIDE7CisKKwllcnI6CisJQklPX3ByaW50ZihlcnIsICJFcnJvciBpbml0aWFsaXppbmcgJXMgY29udGV4dFxuIiwgYWxnbmFtZSk7CisJRVJSX3ByaW50X2Vycm9ycyhlcnIpOworCWlmIChjdHgpCisJCUVWUF9QS0VZX0NUWF9mcmVlKGN0eCk7CisJcmV0dXJuIDA7CisKKwl9CisKK3N0YXRpYyBpbnQgZ2VucGtleV9jYihFVlBfUEtFWV9DVFggKmN0eCkKKwl7CisJY2hhciBjPScqJzsKKwlCSU8gKmIgPSBFVlBfUEtFWV9DVFhfZ2V0X2FwcF9kYXRhKGN0eCk7CisJaW50IHA7CisJcCA9IEVWUF9QS0VZX0NUWF9nZXRfa2V5Z2VuX2luZm8oY3R4LCAwKTsKKwlpZiAocCA9PSAwKSBjPScuJzsKKwlpZiAocCA9PSAxKSBjPScrJzsKKwlpZiAocCA9PSAyKSBjPScqJzsKKwlpZiAocCA9PSAzKSBjPSdcbic7CisJQklPX3dyaXRlKGIsJmMsMSk7CisJKHZvaWQpQklPX2ZsdXNoKGIpOworI2lmZGVmIExJTlQKKwlwPW47CisjZW5kaWYKKwlyZXR1cm4gMTsKKwl9CmRpZmYgLS1naXQgYS9hcHBzL2dlbnJzYS5jIGIvYXBwcy9nZW5yc2EuYwppbmRleCA1NzU5YWNiLi4zN2U5MzEwIDEwMDY0NAotLS0gYS9hcHBzL2dlbnJzYS5jCisrKyBiL2FwcHMvZ2VucnNhLmMKQEAgLTk1LDcgKzk1LDYgQEAKIAlpbnQgcmV0PTE7CiAJaW50IGksbnVtPURFRkJJVFM7CiAJbG9uZyBsOwotCWludCB1c2VfeDkzMSA9IDA7CiAJY29uc3QgRVZQX0NJUEhFUiAqZW5jPU5VTEw7CiAJdW5zaWduZWQgbG9uZyBmND1SU0FfRjQ7CiAJY2hhciAqb3V0ZmlsZT1OVUxMOwpAQCAtMTM5LDggKzEzOCw2IEBACiAJCQlmND0zOwogCQllbHNlIGlmIChzdHJjbXAoKmFyZ3YsIi1GNCIpID09IDAgfHwgc3RyY21wKCphcmd2LCItZjQiKSA9PSAwKQogCQkJZjQ9UlNBX0Y0OwotCQllbHNlIGlmIChzdHJjbXAoKmFyZ3YsIi14OTMxIikgPT0gMCkKLQkJCXVzZV94OTMxID0gMTsKICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKIAkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCItZW5naW5lIikgPT0gMCkKIAkJCXsKQEAgLTI2OCwyMiArMjY1LDE1IEBACiAKIAlCSU9fcHJpbnRmKGJpb19lcnIsIkdlbmVyYXRpbmcgUlNBIHByaXZhdGUga2V5LCAlZCBiaXQgbG9uZyBtb2R1bHVzXG4iLAogCQludW0pOwotCisjaWZkZWYgT1BFTlNTTF9OT19FTkdJTkUKIAlyc2EgPSBSU0FfbmV3KCk7CisjZWxzZQorCXJzYSA9IFJTQV9uZXdfbWV0aG9kKGUpOworI2VuZGlmCiAJaWYgKCFyc2EpCiAJCWdvdG8gZXJyOwogCi0JaWYgKHVzZV94OTMxKQotCQl7Ci0JCUJJR05VTSAqcHViZXhwOwotCQlwdWJleHAgPSBCTl9uZXcoKTsKLQkJaWYgKCFCTl9zZXRfd29yZChwdWJleHAsIGY0KSkKLQkJCWdvdG8gZXJyOwotCQlpZiAoIVJTQV9YOTMxX2dlbmVyYXRlX2tleV9leChyc2EsIG51bSwgcHViZXhwLCAmY2IpKQotCQkJZ290byBlcnI7Ci0JCUJOX2ZyZWUocHViZXhwKTsKLQkJfQotCWVsc2UgaWYoIUJOX3NldF93b3JkKGJuLCBmNCkgfHwgIVJTQV9nZW5lcmF0ZV9rZXlfZXgocnNhLCBudW0sIGJuLCAmY2IpKQorCWlmKCFCTl9zZXRfd29yZChibiwgZjQpIHx8ICFSU0FfZ2VuZXJhdGVfa2V5X2V4KHJzYSwgbnVtLCBibiwgJmNiKSkKIAkJZ290byBlcnI7CiAJCQogCWFwcF9SQU5EX3dyaXRlX2ZpbGUoTlVMTCwgYmlvX2Vycik7CmRpZmYgLS1naXQgYS9hcHBzL21ha2VhcHBzLmNvbSBiL2FwcHMvbWFrZWFwcHMuY29tCmluZGV4IGNiNzQ5YmYuLmI5NmM0YTEgMTAwNjQ0Ci0tLSBhL2FwcHMvbWFrZWFwcHMuY29tCisrKyBiL2FwcHMvbWFrZWFwcHMuY29tCkBAIC0xMzksMTIgKzEzOSwxMiBAQAogJCEgbWFraW5nIGl0IGZhaXJseSBlYXN5IHRvIHZlcmlmeSB0aGF0IHRoZSBsaXN0cyBhcmUgdGhlIHNhbWUuCiAkIQogJCBMSUJfT1BFTlNTTCA9ICJWRVJJRlksQVNOMVBBUlMsUkVRLERHU1QsREgsREhQQVJBTSxFTkMsUEFTU1dELEdFTkRILEVSUlNUUiwiKy0KLQkJIkNBLFBLQ1M3LENSTDJQNyxDUkwsIistCi0JCSJSU0EsUlNBVVRMLERTQSxEU0FQQVJBTSxFQyxFQ1BBUkFNLCIrLQotCQkiWDUwOSxHRU5SU0EsR0VORFNBLFNfU0VSVkVSLFNfQ0xJRU5ULFNQRUVELCIrLQotCQkiU19USU1FLEFQUFMsU19DQixTX1NPQ0tFVCxBUFBfUkFORCxWRVJTSU9OLFNFU1NfSUQsIistCi0JCSJDSVBIRVJTLE5TRVEsUEtDUzEyLFBLQ1M4LFNQS0FDLFNNSU1FLFJBTkQsRU5HSU5FLCIrLQotCQkiT0NTUCxQUklNRSxDTVMiCisJICAgICAJIkNBLFBLQ1M3LENSTDJQNyxDUkwsIistCisJICAgICAgCSJSU0EsUlNBVVRMLERTQSxEU0FQQVJBTSxFQyxFQ1BBUkFNLCIrLQorCSAgICAgIAkiWDUwOSxHRU5SU0EsR0VORFNBLEdFTlBLRVksU19TRVJWRVIsU19DTElFTlQsU1BFRUQsIistCisJICAgICAgCSJTX1RJTUUsQVBQUyxTX0NCLFNfU09DS0VULEFQUF9SQU5ELFZFUlNJT04sU0VTU19JRCwiKy0KKwkgICAgICAJIkNJUEhFUlMsTlNFUSxQS0NTMTIsUEtDUzgsUEtFWSxQS0VZUEFSQU0sUEtFWVVUTCwiKyAtCisJICAgICAgCSJTUEtBQyxTTUlNRSxDTVMsUkFORCxFTkdJTkUsT0NTUCxQUklNRSxUUyIKICQgVENQSVBfUFJPR1JBTVMgPSAiLCwiCiAkIElGIENPTVBJTEVSIC5FUVMuICJWQVhDIiBUSEVOIC0KICAgICAgVENQSVBfUFJPR1JBTVMgPSAiLE9QRU5TU0wsIgpkaWZmIC0tZ2l0IGEvYXBwcy9vY3NwLmMgYi9hcHBzL29jc3AuYwppbmRleCAyNTEwNDRkLi4wMTg0N2RmIDEwMDY0NAotLS0gYS9hcHBzL29jc3AuYworKysgYi9hcHBzL29jc3AuYwpAQCAtNTYsMjUgKzU2LDUzIEBACiAgKgogICovCiAjaWZuZGVmIE9QRU5TU0xfTk9fT0NTUAorCisjaWZkZWYgT1BFTlNTTF9TWVNfVk1TCisjZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQJLyogU28gZmRfc2V0IGFuZCBmcmllbmRzIGdldCBwcm9wZXJseSBkZWZpbmVkCisJCQkJICAgb24gT3BlblZNUyAqLworI2VuZGlmCisKICNkZWZpbmUgVVNFX1NPQ0tFVFMKKwogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgogI2luY2x1ZGUgImFwcHMuaCIgLyogbmVlZHMgdG8gYmUgaW5jbHVkZWQgYmVmb3JlIHRoZSBvcGVuc3NsIGhlYWRlcnMhICovCiAjaW5jbHVkZSA8b3BlbnNzbC9lX29zMi5oPgotI2luY2x1ZGUgPG9wZW5zc2wvc3NsLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KICNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorI2luY2x1ZGUgPG9wZW5zc2wvc3NsLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisjaW5jbHVkZSA8b3BlbnNzbC94NTA5djMuaD4KIAorI2lmIGRlZmluZWQoTkVUV0FSRV9DTElCKQorIyAgaWZkZWYgTkVUV0FSRV9CU0RTT0NLCisjICAgIGluY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyMgICAgaW5jbHVkZSA8c3lzL2JzZHNrdC5oPgorIyAgZWxzZQorIyAgICBpbmNsdWRlIDxub3Zzb2NrMi5oPgorIyAgZW5kaWYKKyNlbGlmIGRlZmluZWQoTkVUV0FSRV9MSUJDKQorIyAgaWZkZWYgTkVUV0FSRV9CU0RTT0NLCisjICAgIGluY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKyMgIGVsc2UKKyMgICAgaW5jbHVkZSA8bm92c29jazIuaD4KKyMgIGVuZGlmCisjZW5kaWYKKyAgCiAvKiBNYXhpbXVtIGxlZXdheSBpbiB2YWxpZGl0eSBwZXJpb2Q6IGRlZmF1bHQgNSBtaW51dGVzICovCiAjZGVmaW5lIE1BWF9WQUxJRElUWV9QRVJJT0QJKDUgKiA2MCkKIAotc3RhdGljIGludCBhZGRfb2NzcF9jZXJ0KE9DU1BfUkVRVUVTVCAqKnJlcSwgWDUwOSAqY2VydCwgWDUwOSAqaXNzdWVyLAorc3RhdGljIGludCBhZGRfb2NzcF9jZXJ0KE9DU1BfUkVRVUVTVCAqKnJlcSwgWDUwOSAqY2VydCwgY29uc3QgRVZQX01EICpjZXJ0X2lkX21kLCBYNTA5ICppc3N1ZXIsCiAJCQkJU1RBQ0tfT0YoT0NTUF9DRVJUSUQpICppZHMpOwotc3RhdGljIGludCBhZGRfb2NzcF9zZXJpYWwoT0NTUF9SRVFVRVNUICoqcmVxLCBjaGFyICpzZXJpYWwsIFg1MDkgKmlzc3VlciwKK3N0YXRpYyBpbnQgYWRkX29jc3Bfc2VyaWFsKE9DU1BfUkVRVUVTVCAqKnJlcSwgY2hhciAqc2VyaWFsLCBjb25zdCBFVlBfTUQgKiBjZXJ0X2lkX21kLCBYNTA5ICppc3N1ZXIsCiAJCQkJU1RBQ0tfT0YoT0NTUF9DRVJUSUQpICppZHMpOwogc3RhdGljIGludCBwcmludF9vY3NwX3N1bW1hcnkoQklPICpvdXQsIE9DU1BfQkFTSUNSRVNQICpicywgT0NTUF9SRVFVRVNUICpyZXEsCi0JCQkJU1RBQ0sgKm5hbWVzLCBTVEFDS19PRihPQ1NQX0NFUlRJRCkgKmlkcywKLQkJCQlsb25nIG5zZWMsIGxvbmcgbWF4YWdlKTsKKwkJCSAgICAgIFNUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSAqbmFtZXMsCisJCQkgICAgICBTVEFDS19PRihPQ1NQX0NFUlRJRCkgKmlkcywgbG9uZyBuc2VjLAorCQkJICAgICAgbG9uZyBtYXhhZ2UpOwogCiBzdGF0aWMgaW50IG1ha2Vfb2NzcF9yZXNwb25zZShPQ1NQX1JFU1BPTlNFICoqcmVzcCwgT0NTUF9SRVFVRVNUICpyZXEsIENBX0RCICpkYiwKIAkJCVg1MDkgKmNhLCBYNTA5ICpyY2VydCwgRVZQX1BLRVkgKnJrZXksCkBAIC04Niw2ICsxMTQsNyBAQAogc3RhdGljIGludCBkb19yZXNwb25kZXIoT0NTUF9SRVFVRVNUICoqcHJlcSwgQklPICoqcGNiaW8sIEJJTyAqYWNiaW8sIGNoYXIgKnBvcnQpOwogc3RhdGljIGludCBzZW5kX29jc3BfcmVzcG9uc2UoQklPICpjYmlvLCBPQ1NQX1JFU1BPTlNFICpyZXNwKTsKIHN0YXRpYyBPQ1NQX1JFU1BPTlNFICpxdWVyeV9yZXNwb25kZXIoQklPICplcnIsIEJJTyAqY2JpbywgY2hhciAqcGF0aCwKKwkJCQlTVEFDS19PRihDT05GX1ZBTFVFKSAqaGVhZGVycywKIAkJCQlPQ1NQX1JFUVVFU1QgKnJlcSwgaW50IHJlcV90aW1lb3V0KTsKIAogI3VuZGVmIFBST0cKQEAgLTEwNCw2ICsxMzMsNyBAQAogCWNoYXIgKnJzaWduZmlsZSA9IE5VTEwsICpya2V5ZmlsZSA9IE5VTEw7CiAJY2hhciAqb3V0ZmlsZSA9IE5VTEw7CiAJaW50IGFkZF9ub25jZSA9IDEsIG5vdmVyaWZ5ID0gMCwgdXNlX3NzbCA9IC0xOworCVNUQUNLX09GKENPTkZfVkFMVUUpICpoZWFkZXJzID0gTlVMTDsKIAlPQ1NQX1JFUVVFU1QgKnJlcSA9IE5VTEw7CiAJT0NTUF9SRVNQT05TRSAqcmVzcCA9IE5VTEw7CiAJT0NTUF9CQVNJQ1JFU1AgKmJzID0gTlVMTDsKQEAgLTEyNiw3ICsxNTYsNyBAQAogCWludCBiYWRhcmcgPSAwOwogCWludCBpOwogCWludCBpZ25vcmVfZXJyID0gMDsKLQlTVEFDSyAqcmVxbmFtZXMgPSBOVUxMOworCVNUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSAqcmVxbmFtZXMgPSBOVUxMOwogCVNUQUNLX09GKE9DU1BfQ0VSVElEKSAqaWRzID0gTlVMTDsKIAogCVg1MDkgKnJjYV9jZXJ0ID0gTlVMTDsKQEAgLTEzNCw2ICsxNjQsNyBAQAogCWNoYXIgKnJjYV9maWxlbmFtZSA9IE5VTEw7CiAJQ0FfREIgKnJkYiA9IE5VTEw7CiAJaW50IG5taW4gPSAwLCBuZGF5cyA9IC0xOworCWNvbnN0IEVWUF9NRCAqY2VydF9pZF9tZCA9IE5VTEw7CiAKIAlpZiAoYmlvX2VyciA9PSBOVUxMKSBiaW9fZXJyID0gQklPX25ld19mcChzdGRlcnIsIEJJT19OT0NMT1NFKTsKIApAQCAtMTQyLDcgKzE3Myw3IEBACiAJU1NMX2xvYWRfZXJyb3Jfc3RyaW5ncygpOwogCU9wZW5TU0xfYWRkX3NzbF9hbGdvcml0aG1zKCk7CiAJYXJncyA9IGFyZ3YgKyAxOwotCXJlcW5hbWVzID0gc2tfbmV3X251bGwoKTsKKwlyZXFuYW1lcyA9IHNrX09QRU5TU0xfU1RSSU5HX25ld19udWxsKCk7CiAJaWRzID0gc2tfT0NTUF9DRVJUSURfbmV3X251bGwoKTsKIAl3aGlsZSAoIWJhZGFyZyAmJiAqYXJncyAmJiAqYXJnc1swXSA9PSAnLScpCiAJCXsKQEAgLTIwMiw2ICsyMzMsMTYgQEAKIAkJCQl9CiAJCQllbHNlIGJhZGFyZyA9IDE7CiAJCQl9CisJCWVsc2UgaWYgKCFzdHJjbXAoKmFyZ3MsICItaGVhZGVyIikpCisJCQl7CisJCQlpZiAoYXJnc1sxXSAmJiBhcmdzWzJdKQorCQkJCXsKKwkJCQlpZiAoIVg1MDlWM19hZGRfdmFsdWUoYXJnc1sxXSwgYXJnc1syXSwgJmhlYWRlcnMpKQorCQkJCQlnb3RvIGVuZDsKKwkJCQlhcmdzICs9IDI7CisJCQkJfQorCQkJZWxzZSBiYWRhcmcgPSAxOworCQkJfQogCQllbHNlIGlmICghc3RyY21wKCphcmdzLCAiLWlnbm9yZV9lcnIiKSkKIAkJCWlnbm9yZV9lcnIgPSAxOwogCQllbHNlIGlmICghc3RyY21wKCphcmdzLCAiLW5vdmVyaWZ5IikpCkBAIC00MDEsOSArNDQyLDEwIEBACiAJCQkJY2VydCA9IGxvYWRfY2VydChiaW9fZXJyLCAqYXJncywgRk9STUFUX1BFTSwKIAkJCQkJTlVMTCwgZSwgImNlcnRpZmljYXRlIik7CiAJCQkJaWYoIWNlcnQpIGdvdG8gZW5kOwotCQkJCWlmKCFhZGRfb2NzcF9jZXJ0KCZyZXEsIGNlcnQsIGlzc3VlciwgaWRzKSkKKwkJCQlpZiAoIWNlcnRfaWRfbWQpIGNlcnRfaWRfbWQgPSBFVlBfc2hhMSgpOworCQkJCWlmKCFhZGRfb2NzcF9jZXJ0KCZyZXEsIGNlcnQsIGNlcnRfaWRfbWQsIGlzc3VlciwgaWRzKSkKIAkJCQkJZ290byBlbmQ7Ci0JCQkJaWYoIXNrX3B1c2gocmVxbmFtZXMsICphcmdzKSkKKwkJCQlpZighc2tfT1BFTlNTTF9TVFJJTkdfcHVzaChyZXFuYW1lcywgKmFyZ3MpKQogCQkJCQlnb3RvIGVuZDsKIAkJCQl9CiAJCQllbHNlIGJhZGFyZyA9IDE7CkBAIC00MTMsOSArNDU1LDEwIEBACiAJCQlpZiAoYXJnc1sxXSkKIAkJCQl7CiAJCQkJYXJncysrOwotCQkJCWlmKCFhZGRfb2NzcF9zZXJpYWwoJnJlcSwgKmFyZ3MsIGlzc3VlciwgaWRzKSkKKwkJCQlpZiAoIWNlcnRfaWRfbWQpIGNlcnRfaWRfbWQgPSBFVlBfc2hhMSgpOworCQkJCWlmKCFhZGRfb2NzcF9zZXJpYWwoJnJlcSwgKmFyZ3MsIGNlcnRfaWRfbWQsIGlzc3VlciwgaWRzKSkKIAkJCQkJZ290byBlbmQ7Ci0JCQkJaWYoIXNrX3B1c2gocmVxbmFtZXMsICphcmdzKSkKKwkJCQlpZighc2tfT1BFTlNTTF9TVFJJTkdfcHVzaChyZXFuYW1lcywgKmFyZ3MpKQogCQkJCQlnb3RvIGVuZDsKIAkJCQl9CiAJCQllbHNlIGJhZGFyZyA9IDE7CkBAIC01MTUsNyArNTU4LDEwIEBACiAJCQkJfQogCQkJZWxzZSBiYWRhcmcgPSAxOwogCQkJfQotCQllbHNlIGJhZGFyZyA9IDE7CisJCWVsc2UgaWYgKChjZXJ0X2lkX21kID0gRVZQX2dldF9kaWdlc3RieW5hbWUoKCphcmdzKSsxKSk9PU5VTEwpCisJCQl7CisJCQliYWRhcmcgPSAxOworCQkJfQogCQlhcmdzKys7CiAJCX0KIApAQCAtNTcxLDYgKzYxNyw3IEBACiAJCUJJT19wcmludGYgKGJpb19lcnIsICItbmRheXMgbgkgCSBudW1iZXIgb2YgZGF5cyBiZWZvcmUgbmV4dCB1cGRhdGVcbiIpOwogCQlCSU9fcHJpbnRmIChiaW9fZXJyLCAiLXJlc3Bfa2V5X2lkICAgICAgIGlkZW50aWZ5IHJlcG9uc2UgYnkgc2lnbmluZyBjZXJ0aWZpY2F0ZSBrZXkgSURcbiIpOwogCQlCSU9fcHJpbnRmIChiaW9fZXJyLCAiLW5yZXF1ZXN0IG4gICAgICAgIG51bWJlciBvZiByZXF1ZXN0cyB0byBhY2NlcHQgKGRlZmF1bHQgdW5saW1pdGVkKVxuIik7CisJCUJJT19wcmludGYgKGJpb19lcnIsICItPGRnc3QgYWxnPiAgICAgdXNlIHNwZWNpZmllZCBkaWdlc3QgaW4gdGhlIHJlcXVlc3QiKTsKIAkJZ290byBlbmQ7CiAJCX0KIApAQCAtNjc3LDcgKzcyNCw4IEBACiAJCQkic2lnbmVyIHByaXZhdGUga2V5Iik7CiAJCWlmICgha2V5KQogCQkJZ290byBlbmQ7Ci0JCWlmICghT0NTUF9yZXF1ZXN0X3NpZ24ocmVxLCBzaWduZXIsIGtleSwgRVZQX3NoYTEoKSwgc2lnbl9vdGhlciwgc2lnbl9mbGFncykpCisKKwkJaWYgKCFPQ1NQX3JlcXVlc3Rfc2lnbihyZXEsIHNpZ25lciwga2V5LCBOVUxMLCBzaWduX290aGVyLCBzaWduX2ZsYWdzKSkKIAkJCXsKIAkJCUJJT19wcmludGYoYmlvX2VyciwgIkVycm9yIHNpZ25pbmcgT0NTUCByZXF1ZXN0XG4iKTsKIAkJCWdvdG8gZW5kOwpAQCAtNzIxLDcgKzc2OSw3IEBACiAJCXsKICNpZm5kZWYgT1BFTlNTTF9OT19TT0NLCiAJCXJlc3AgPSBwcm9jZXNzX3Jlc3BvbmRlcihiaW9fZXJyLCByZXEsIGhvc3QsIHBhdGgsCi0JCQkJCQlwb3J0LCB1c2Vfc3NsLCByZXFfdGltZW91dCk7CisJCQkJCXBvcnQsIHVzZV9zc2wsIGhlYWRlcnMsIHJlcV90aW1lb3V0KTsKIAkJaWYgKCFyZXNwKQogCQkJZ290byBlbmQ7CiAjZWxzZQpAQCAtODY2LDEwICs5MTQsMTEgQEAKIAlPQ1NQX1JFUVVFU1RfZnJlZShyZXEpOwogCU9DU1BfUkVTUE9OU0VfZnJlZShyZXNwKTsKIAlPQ1NQX0JBU0lDUkVTUF9mcmVlKGJzKTsKLQlza19mcmVlKHJlcW5hbWVzKTsKKwlza19PUEVOU1NMX1NUUklOR19mcmVlKHJlcW5hbWVzKTsKIAlza19PQ1NQX0NFUlRJRF9mcmVlKGlkcyk7CiAJc2tfWDUwOV9wb3BfZnJlZShzaWduX290aGVyLCBYNTA5X2ZyZWUpOwogCXNrX1g1MDlfcG9wX2ZyZWUodmVyaWZ5X290aGVyLCBYNTA5X2ZyZWUpOworCXNrX0NPTkZfVkFMVUVfcG9wX2ZyZWUoaGVhZGVycywgWDUwOVYzX2NvbmZfZnJlZSk7CiAKIAlpZiAodXNlX3NzbCAhPSAtMSkKIAkJewpAQCAtODgxLDcgKzkzMCw3IEBACiAJT1BFTlNTTF9FWElUKHJldCk7CiB9CiAKLXN0YXRpYyBpbnQgYWRkX29jc3BfY2VydChPQ1NQX1JFUVVFU1QgKipyZXEsIFg1MDkgKmNlcnQsIFg1MDkgKmlzc3VlciwKK3N0YXRpYyBpbnQgYWRkX29jc3BfY2VydChPQ1NQX1JFUVVFU1QgKipyZXEsIFg1MDkgKmNlcnQsIGNvbnN0IEVWUF9NRCAqY2VydF9pZF9tZCxYNTA5ICppc3N1ZXIsCiAJCQkJU1RBQ0tfT0YoT0NTUF9DRVJUSUQpICppZHMpCiAJewogCU9DU1BfQ0VSVElEICppZDsKQEAgLTg5Miw3ICs5NDEsNyBAQAogCQl9CiAJaWYoISpyZXEpICpyZXEgPSBPQ1NQX1JFUVVFU1RfbmV3KCk7CiAJaWYoISpyZXEpIGdvdG8gZXJyOwotCWlkID0gT0NTUF9jZXJ0X3RvX2lkKE5VTEwsIGNlcnQsIGlzc3Vlcik7CisJaWQgPSBPQ1NQX2NlcnRfdG9faWQoY2VydF9pZF9tZCwgY2VydCwgaXNzdWVyKTsKIAlpZighaWQgfHwgIXNrX09DU1BfQ0VSVElEX3B1c2goaWRzLCBpZCkpIGdvdG8gZXJyOwogCWlmKCFPQ1NQX3JlcXVlc3RfYWRkMF9pZCgqcmVxLCBpZCkpIGdvdG8gZXJyOwogCXJldHVybiAxOwpAQCAtOTAyLDcgKzk1MSw3IEBACiAJcmV0dXJuIDA7CiAJfQogCi1zdGF0aWMgaW50IGFkZF9vY3NwX3NlcmlhbChPQ1NQX1JFUVVFU1QgKipyZXEsIGNoYXIgKnNlcmlhbCwgWDUwOSAqaXNzdWVyLAorc3RhdGljIGludCBhZGRfb2NzcF9zZXJpYWwoT0NTUF9SRVFVRVNUICoqcmVxLCBjaGFyICpzZXJpYWwsY29uc3QgRVZQX01EICpjZXJ0X2lkX21kLCBYNTA5ICppc3N1ZXIsCiAJCQkJU1RBQ0tfT0YoT0NTUF9DRVJUSUQpICppZHMpCiAJewogCU9DU1BfQ0VSVElEICppZDsKQEAgLTkyNCw3ICs5NzMsNyBAQAogCQlCSU9fcHJpbnRmKGJpb19lcnIsICJFcnJvciBjb252ZXJ0aW5nIHNlcmlhbCBudW1iZXIgJXNcbiIsIHNlcmlhbCk7CiAJCXJldHVybiAwOwogCQl9Ci0JaWQgPSBPQ1NQX2NlcnRfaWRfbmV3KEVWUF9zaGExKCksIGluYW1lLCBpa2V5LCBzbm8pOworCWlkID0gT0NTUF9jZXJ0X2lkX25ldyhjZXJ0X2lkX21kLCBpbmFtZSwgaWtleSwgc25vKTsKIAlBU04xX0lOVEVHRVJfZnJlZShzbm8pOwogCWlmKCFpZCB8fCAhc2tfT0NTUF9DRVJUSURfcHVzaChpZHMsIGlkKSkgZ290byBlcnI7CiAJaWYoIU9DU1BfcmVxdWVzdF9hZGQwX2lkKCpyZXEsIGlkKSkgZ290byBlcnI7CkBAIC05MzYsOCArOTg1LDkgQEAKIAl9CiAKIHN0YXRpYyBpbnQgcHJpbnRfb2NzcF9zdW1tYXJ5KEJJTyAqb3V0LCBPQ1NQX0JBU0lDUkVTUCAqYnMsIE9DU1BfUkVRVUVTVCAqcmVxLAotCQkJCQlTVEFDSyAqbmFtZXMsIFNUQUNLX09GKE9DU1BfQ0VSVElEKSAqaWRzLAotCQkJCQlsb25nIG5zZWMsIGxvbmcgbWF4YWdlKQorCQkJICAgICAgU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpICpuYW1lcywKKwkJCSAgICAgIFNUQUNLX09GKE9DU1BfQ0VSVElEKSAqaWRzLCBsb25nIG5zZWMsCisJCQkgICAgICBsb25nIG1heGFnZSkKIAl7CiAJT0NTUF9DRVJUSUQgKmlkOwogCWNoYXIgKm5hbWU7CkBAIC05NDcsMTMgKzk5NywxMyBAQAogCiAJQVNOMV9HRU5FUkFMSVpFRFRJTUUgKnJldiwgKnRoaXN1cGQsICpuZXh0dXBkOwogCi0JaWYgKCFicyB8fCAhcmVxIHx8ICFza19udW0obmFtZXMpIHx8ICFza19PQ1NQX0NFUlRJRF9udW0oaWRzKSkKKwlpZiAoIWJzIHx8ICFyZXEgfHwgIXNrX09QRU5TU0xfU1RSSU5HX251bShuYW1lcykgfHwgIXNrX09DU1BfQ0VSVElEX251bShpZHMpKQogCQlyZXR1cm4gMTsKIAogCWZvciAoaSA9IDA7IGkgPCBza19PQ1NQX0NFUlRJRF9udW0oaWRzKTsgaSsrKQogCQl7CiAJCWlkID0gc2tfT0NTUF9DRVJUSURfdmFsdWUoaWRzLCBpKTsKLQkJbmFtZSA9IHNrX3ZhbHVlKG5hbWVzLCBpKTsKKwkJbmFtZSA9IHNrX09QRU5TU0xfU1RSSU5HX3ZhbHVlKG5hbWVzLCBpKTsKIAkJQklPX3ByaW50ZihvdXQsICIlczogIiwgbmFtZSk7CiAKIAkJaWYoIU9DU1BfcmVzcF9maW5kX3N0YXR1cyhicywgaWQsICZzdGF0dXMsICZyZWFzb24sCkBAIC0xMDEwLDcgKzEwNjAsNiBAQAogCU9DU1BfQkFTSUNSRVNQICpicyA9IE5VTEw7CiAJaW50IGksIGlkX2NvdW50LCByZXQgPSAxOwogCi0KIAlpZF9jb3VudCA9IE9DU1BfcmVxdWVzdF9vbmVyZXFfY291bnQocmVxKTsKIAogCWlmIChpZF9jb3VudCA8PSAwKQpAQCAtMTAxOSw3ICsxMDY4LDYgQEAKIAkJZ290byBlbmQ7CiAJCX0KIAotCWNhX2lkID0gT0NTUF9jZXJ0X3RvX2lkKEVWUF9zaGExKCksIE5VTEwsIGNhKTsKIAogCWJzID0gT0NTUF9CQVNJQ1JFU1BfbmV3KCk7CiAJdGhpc3VwZCA9IFg1MDlfZ210aW1lX2FkaihOVUxMLCAwKTsKQEAgLTEwMzIsOCArMTA4MCwyMyBAQAogCQlPQ1NQX09ORVJFUSAqb25lOwogCQlBU04xX0lOVEVHRVIgKnNlcmlhbDsKIAkJY2hhciAqKmluZjsKKwkJQVNOMV9PQkpFQ1QgKmNlcnRfaWRfbWRfb2lkOworCQljb25zdCBFVlBfTUQgKmNlcnRfaWRfbWQ7CiAJCW9uZSA9IE9DU1BfcmVxdWVzdF9vbmVyZXFfZ2V0MChyZXEsIGkpOwogCQljaWQgPSBPQ1NQX29uZXJlcV9nZXQwX2lkKG9uZSk7CisKKwkJT0NTUF9pZF9nZXQwX2luZm8oTlVMTCwmY2VydF9pZF9tZF9vaWQsIE5VTEwsTlVMTCwgY2lkKTsKKworCQljZXJ0X2lkX21kID0gRVZQX2dldF9kaWdlc3RieW9iaihjZXJ0X2lkX21kX29pZCk7CQorCQlpZiAoISBjZXJ0X2lkX21kKSAKKwkJCXsKKwkJCSpyZXNwID0gT0NTUF9yZXNwb25zZV9jcmVhdGUoT0NTUF9SRVNQT05TRV9TVEFUVVNfSU5URVJOQUxFUlJPUiwKKwkJCQlOVUxMKTsKKwkJCQlnb3RvIGVuZDsKKwkJCX0JCisJCWlmIChjYV9pZCkgT0NTUF9DRVJUSURfZnJlZShjYV9pZCk7CisJCWNhX2lkID0gT0NTUF9jZXJ0X3RvX2lkKGNlcnRfaWRfbWQsIE5VTEwsIGNhKTsKKwogCQkvKiBJcyB0aGlzIHJlcXVlc3QgYWJvdXQgb3VyIENBPyAqLwogCQlpZiAoT0NTUF9pZF9pc3N1ZXJfY21wKGNhX2lkLCBjaWQpKQogCQkJewpAQCAtMTA3OCw4ICsxMTQxLDggQEAKIAkJfQogCiAJT0NTUF9jb3B5X25vbmNlKGJzLCByZXEpOwotCQkKLQlPQ1NQX2Jhc2ljX3NpZ24oYnMsIHJjZXJ0LCBya2V5LCBFVlBfc2hhMSgpLCByb3RoZXIsIGZsYWdzKTsKKwkKKwlPQ1NQX2Jhc2ljX3NpZ24oYnMsIHJjZXJ0LCBya2V5LCBOVUxMLCByb3RoZXIsIGZsYWdzKTsKIAogCSpyZXNwID0gT0NTUF9yZXNwb25zZV9jcmVhdGUoT0NTUF9SRVNQT05TRV9TVEFUVVNfU1VDQ0VTU0ZVTCwgYnMpOwogCkBAIC0xMjExLDEwICsxMjc0LDEyIEBACiAJfQogCiBzdGF0aWMgT0NTUF9SRVNQT05TRSAqcXVlcnlfcmVzcG9uZGVyKEJJTyAqZXJyLCBCSU8gKmNiaW8sIGNoYXIgKnBhdGgsCisJCQkJU1RBQ0tfT0YoQ09ORl9WQUxVRSkgKmhlYWRlcnMsCiAJCQkJT0NTUF9SRVFVRVNUICpyZXEsIGludCByZXFfdGltZW91dCkKIAl7CiAJaW50IGZkOwogCWludCBydjsKKwlpbnQgaTsKIAlPQ1NQX1JFUV9DVFggKmN0eCA9IE5VTEw7CiAJT0NTUF9SRVNQT05TRSAqcnNwID0gTlVMTDsKIAlmZF9zZXQgY29uZmRzOwpAQCAtMTIzMSwxNiArMTI5NiwxMyBAQAogCQlyZXR1cm4gTlVMTDsKIAkJfQogCi0JaWYgKHJlcV90aW1lb3V0ID09IC0xKQotCQlyZXR1cm4gT0NTUF9zZW5kcmVxX2JpbyhjYmlvLCBwYXRoLCByZXEpOwotCiAJaWYgKEJJT19nZXRfZmQoY2JpbywgJmZkKSA8PSAwKQogCQl7CiAJCUJJT19wdXRzKGVyciwgIkNhbid0IGdldCBjb25uZWN0aW9uIGZkXG4iKTsKIAkJZ290byBlcnI7CiAJCX0KIAotCWlmIChydiA8PSAwKQorCWlmIChyZXFfdGltZW91dCAhPSAtMSAmJiBydiA8PSAwKQogCQl7CiAJCUZEX1pFUk8oJmNvbmZkcyk7CiAJCW9wZW5zc2xfZmRzZXQoZmQsICZjb25mZHMpOwpAQCAtMTI1NSwxNSArMTMxNywyNyBAQAogCQl9CiAKIAotCWN0eCA9IE9DU1Bfc2VuZHJlcV9uZXcoY2JpbywgcGF0aCwgcmVxLCAtMSk7CisJY3R4ID0gT0NTUF9zZW5kcmVxX25ldyhjYmlvLCBwYXRoLCBOVUxMLCAtMSk7CiAJaWYgKCFjdHgpCiAJCXJldHVybiBOVUxMOworCisJZm9yIChpID0gMDsgaSA8IHNrX0NPTkZfVkFMVUVfbnVtKGhlYWRlcnMpOyBpKyspCisJCXsKKwkJQ09ORl9WQUxVRSAqaGRyID0gc2tfQ09ORl9WQUxVRV92YWx1ZShoZWFkZXJzLCBpKTsKKwkJaWYgKCFPQ1NQX1JFUV9DVFhfYWRkMV9oZWFkZXIoY3R4LCBoZHItPm5hbWUsIGhkci0+dmFsdWUpKQorCQkJZ290byBlcnI7CisJCX0KKworCWlmICghT0NTUF9SRVFfQ1RYX3NldDFfcmVxKGN0eCwgcmVxKSkKKwkJZ290byBlcnI7CiAJCiAJZm9yICg7OykKIAkJewogCQlydiA9IE9DU1Bfc2VuZHJlcV9uYmlvKCZyc3AsIGN0eCk7CiAJCWlmIChydiAhPSAtMSkKIAkJCWJyZWFrOworCQlpZiAocmVxX3RpbWVvdXQgPT0gLTEpCisJCQljb250aW51ZTsKIAkJRkRfWkVSTygmY29uZmRzKTsKIAkJb3BlbnNzbF9mZHNldChmZCwgJmNvbmZkcyk7CiAJCXR2LnR2X3VzZWMgPSAwOwpAQCAtMTI4Nyw3ICsxMzYxLDcgQEAKIAkJCUJJT19wdXRzKGVyciwgIlNlbGVjdCBlcnJvclxuIik7CiAJCQlicmVhazsKIAkJCX0KLQkJCQorCiAJCX0KIAllcnI6CiAJaWYgKGN0eCkKQEAgLTEyOTgsNiArMTM3Miw3IEBACiAKIE9DU1BfUkVTUE9OU0UgKnByb2Nlc3NfcmVzcG9uZGVyKEJJTyAqZXJyLCBPQ1NQX1JFUVVFU1QgKnJlcSwKIAkJCWNoYXIgKmhvc3QsIGNoYXIgKnBhdGgsIGNoYXIgKnBvcnQsIGludCB1c2Vfc3NsLAorCQkJU1RBQ0tfT0YoQ09ORl9WQUxVRSkgKmhlYWRlcnMsCiAJCQlpbnQgcmVxX3RpbWVvdXQpCiAJewogCUJJTyAqY2JpbyA9IE5VTEw7CkBAIC0xMzMyLDE0ICsxNDA3LDE0IEBACiAJCXNiaW8gPSBCSU9fbmV3X3NzbChjdHgsIDEpOwogCQljYmlvID0gQklPX3B1c2goc2JpbywgY2Jpbyk7CiAJCX0KLQlyZXNwID0gcXVlcnlfcmVzcG9uZGVyKGVyciwgY2JpbywgcGF0aCwgcmVxLCByZXFfdGltZW91dCk7CisJcmVzcCA9IHF1ZXJ5X3Jlc3BvbmRlcihlcnIsIGNiaW8sIHBhdGgsIGhlYWRlcnMsIHJlcSwgcmVxX3RpbWVvdXQpOwogCWlmICghcmVzcCkKIAkJQklPX3ByaW50ZihiaW9fZXJyLCAiRXJyb3IgcXVlcnlpbmcgT0NTUCByZXNwb25zZGVyXG4iKTsKIAllbmQ6Ci0JaWYgKGN0eCkKLQkJU1NMX0NUWF9mcmVlKGN0eCk7CiAJaWYgKGNiaW8pCiAJCUJJT19mcmVlX2FsbChjYmlvKTsKKwlpZiAoY3R4KQorCQlTU0xfQ1RYX2ZyZWUoY3R4KTsKIAlyZXR1cm4gcmVzcDsKIAl9CiAKZGlmZiAtLWdpdCBhL2FwcHMvb3BlbnNzbC12bXMuY25mIGIvYXBwcy9vcGVuc3NsLXZtcy5jbmYKaW5kZXggZmFlODJiMC4uMjBlZDYxYiAxMDA2NDQKLS0tIGEvYXBwcy9vcGVuc3NsLXZtcy5jbmYKKysrIGIvYXBwcy9vcGVuc3NsLXZtcy5jbmYKQEAgLTIxLDEyICsyMSwxNyBAQAogCiBbIG5ld19vaWRzIF0KIAotIyBXZSBjYW4gYWRkIG5ldyBPSURzIGluIGhlcmUgZm9yIHVzZSBieSAnY2EnIGFuZCAncmVxJy4KKyMgV2UgY2FuIGFkZCBuZXcgT0lEcyBpbiBoZXJlIGZvciB1c2UgYnkgJ2NhJywgJ3JlcScgYW5kICd0cycuCiAjIEFkZCBhIHNpbXBsZSBPSUQgbGlrZSB0aGlzOgogIyB0ZXN0b2lkMT0xLjIuMy40CiAjIE9yIHVzZSBjb25maWcgZmlsZSBzdWJzdGl0dXRpb24gbGlrZSB0aGlzOgogIyB0ZXN0b2lkMj0ke3Rlc3RvaWQxfS41LjYKIAorIyBQb2xpY2llcyB1c2VkIGJ5IHRoZSBUU0EgZXhhbXBsZXMuCit0c2FfcG9saWN5MSA9IDEuMi4zLjQuMQordHNhX3BvbGljeTIgPSAxLjIuMy40LjUuNgordHNhX3BvbGljeTMgPSAxLjIuMy40LjUuNworCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogWyBjYSBdCiBkZWZhdWx0X2NhCT0gQ0FfZGVmYXVsdAkJIyBUaGUgZGVmYXVsdCBjYSBzZWN0aW9uCkBAIC02Nyw3ICs3Miw3IEBACiAKIGRlZmF1bHRfZGF5cwk9IDM2NQkJCSMgaG93IGxvbmcgdG8gY2VydGlmeSBmb3IKIGRlZmF1bHRfY3JsX2RheXM9IDMwCQkJIyBob3cgbG9uZyBiZWZvcmUgbmV4dCBDUkwKLWRlZmF1bHRfbWQJPSBzaGExCQkJIyB3aGljaCBtZCB0byB1c2UuCitkZWZhdWx0X21kCT0gZGVmYXVsdAkJIyB1c2UgcHVibGljIGtleSBkZWZhdWx0IE1ECiBwcmVzZXJ2ZQk9IG5vCQkJIyBrZWVwIHBhc3NlZCBETiBvcmRlcmluZwogCiAjIEEgZmV3IGRpZmZlcmVuY2Ugd2F5IG9mIHNwZWNpZnlpbmcgaG93IHNpbWlsYXIgdGhlIHJlcXVlc3Qgc2hvdWxkIGxvb2sKQEAgLTExMCwxMyArMTE1LDEyIEBACiAKICMgVGhpcyBzZXRzIGEgbWFzayBmb3IgcGVybWl0dGVkIHN0cmluZyB0eXBlcy4gVGhlcmUgYXJlIHNldmVyYWwgb3B0aW9ucy4gCiAjIGRlZmF1bHQ6IFByaW50YWJsZVN0cmluZywgVDYxU3RyaW5nLCBCTVBTdHJpbmcuCi0jIHBraXgJIDogUHJpbnRhYmxlU3RyaW5nLCBCTVBTdHJpbmcuCi0jIHV0Zjhvbmx5OiBvbmx5IFVURjhTdHJpbmdzLgorIyBwa2l4CSA6IFByaW50YWJsZVN0cmluZywgQk1QU3RyaW5nIChQS0lYIHJlY29tbWVuZGF0aW9uIGJlZm9yZSAyMDA0KQorIyB1dGY4b25seTogb25seSBVVEY4U3RyaW5ncyAoUEtJWCByZWNvbW1lbmRhdGlvbiBhZnRlciAyMDA0KS4KICMgbm9tYnN0ciA6IFByaW50YWJsZVN0cmluZywgVDYxU3RyaW5nIChubyBCTVBTdHJpbmdzIG9yIFVURjhTdHJpbmdzKS4KICMgTUFTSzpYWFhYIGEgbGl0ZXJhbCBtYXNrIHZhbHVlLgotIyBXQVJOSU5HOiBjdXJyZW50IHZlcnNpb25zIG9mIE5ldHNjYXBlIGNyYXNoIG9uIEJNUFN0cmluZ3Mgb3IgVVRGOFN0cmluZ3MKLSMgc28gdXNlIHRoaXMgb3B0aW9uIHdpdGggY2F1dGlvbiEKLXN0cmluZ19tYXNrID0gbm9tYnN0cgorIyBXQVJOSU5HOiBhbmNpZW50IHZlcnNpb25zIG9mIE5ldHNjYXBlIGNyYXNoIG9uIEJNUFN0cmluZ3Mgb3IgVVRGOFN0cmluZ3MuCitzdHJpbmdfbWFzayA9IHV0Zjhvbmx5CiAKICMgcmVxX2V4dGVuc2lvbnMgPSB2M19yZXEgIyBUaGUgZXh0ZW5zaW9ucyB0byBhZGQgdG8gYSBjZXJ0aWZpY2F0ZSByZXF1ZXN0CiAKQEAgLTIwNyw2ICsyMTEsOSBAQAogI25zQ2FQb2xpY3lVcmwKICNuc1NzbFNlcnZlck5hbWUKIAorIyBUaGlzIGlzIHJlcXVpcmVkIGZvciBUU0EgY2VydGlmaWNhdGVzLgorIyBleHRlbmRlZEtleVVzYWdlID0gY3JpdGljYWwsdGltZVN0YW1waW5nCisKIFsgdjNfcmVxIF0KIAogIyBFeHRlbnNpb25zIHRvIGFkZCB0byBhIGNlcnRpZmljYXRlIHJlcXVlc3QKQEAgLTIyNCw3ICsyMzEsNyBAQAogCiBzdWJqZWN0S2V5SWRlbnRpZmllcj1oYXNoCiAKLWF1dGhvcml0eUtleUlkZW50aWZpZXI9a2V5aWQ6YWx3YXlzLGlzc3VlcjphbHdheXMKK2F1dGhvcml0eUtleUlkZW50aWZpZXI9a2V5aWQ6YWx3YXlzLGlzc3VlcgogCiAjIFRoaXMgaXMgd2hhdCBQS0lYIHJlY29tbWVuZHMgYnV0IHNvbWUgYnJva2VuIHNvZnR3YXJlIGNob2tlcyBvbiBjcml0aWNhbAogIyBleHRlbnNpb25zLgpAQCAtMjU3LDcgKzI2NCw3IEBACiAjIE9ubHkgaXNzdWVyQWx0TmFtZSBhbmQgYXV0aG9yaXR5S2V5SWRlbnRpZmllciBtYWtlIGFueSBzZW5zZSBpbiBhIENSTC4KIAogIyBpc3N1ZXJBbHROYW1lPWlzc3Vlcjpjb3B5Ci1hdXRob3JpdHlLZXlJZGVudGlmaWVyPWtleWlkOmFsd2F5cyxpc3N1ZXI6YWx3YXlzCithdXRob3JpdHlLZXlJZGVudGlmaWVyPWtleWlkOmFsd2F5cwogCiBbIHByb3h5X2NlcnRfZXh0IF0KICMgVGhlc2UgZXh0ZW5zaW9ucyBzaG91bGQgYmUgYWRkZWQgd2hlbiBjcmVhdGluZyBhIHByb3h5IGNlcnRpZmljYXRlCkBAIC0yOTAsNyArMjk3LDcgQEAKIAogIyBQS0lYIHJlY29tbWVuZGF0aW9ucyBoYXJtbGVzcyBpZiBpbmNsdWRlZCBpbiBhbGwgY2VydGlmaWNhdGVzLgogc3ViamVjdEtleUlkZW50aWZpZXI9aGFzaAotYXV0aG9yaXR5S2V5SWRlbnRpZmllcj1rZXlpZCxpc3N1ZXI6YWx3YXlzCithdXRob3JpdHlLZXlJZGVudGlmaWVyPWtleWlkLGlzc3VlcgogCiAjIFRoaXMgc3R1ZmYgaXMgZm9yIHN1YmplY3RBbHROYW1lIGFuZCBpc3N1ZXJBbHRuYW1lLgogIyBJbXBvcnQgdGhlIGVtYWlsIGFkZHJlc3MuCkBAIC0zMTEsMyArMzE4LDMzIEBACiAKICMgVGhpcyByZWFsbHkgbmVlZHMgdG8gYmUgaW4gcGxhY2UgZm9yIGl0IHRvIGJlIGEgcHJveHkgY2VydGlmaWNhdGUuCiBwcm94eUNlcnRJbmZvPWNyaXRpY2FsLGxhbmd1YWdlOmlkLXBwbC1hbnlMYW5ndWFnZSxwYXRobGVuOjMscG9saWN5OmZvbworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworWyB0c2EgXQorCitkZWZhdWx0X3RzYSA9IHRzYV9jb25maWcxCSMgdGhlIGRlZmF1bHQgVFNBIHNlY3Rpb24KKworWyB0c2FfY29uZmlnMSBdCisKKyMgVGhlc2UgYXJlIHVzZWQgYnkgdGhlIFRTQSByZXBseSBnZW5lcmF0aW9uIG9ubHkuCitkaXIJCT0gc3lzXCRkaXNrOlsuZGVtb0NBCQkjIFRTQSByb290IGRpcmVjdG9yeQorc2VyaWFsCQk9ICRkaXJddHNhc2VyaWFsLgkjIFRoZSBjdXJyZW50IHNlcmlhbCBudW1iZXIgKG1hbmRhdG9yeSkKK2NyeXB0b19kZXZpY2UJPSBidWlsdGluCQkjIE9wZW5TU0wgZW5naW5lIHRvIHVzZSBmb3Igc2lnbmluZworc2lnbmVyX2NlcnQJPSAkZGlyL3RzYWNlcnQucGVtIAkjIFRoZSBUU0Egc2lnbmluZyBjZXJ0aWZpY2F0ZQorCQkJCQkjIChvcHRpb25hbCkKK2NlcnRzCQk9ICRkaXIuY2FjZXJ0LnBlbV0JIyBDZXJ0aWZpY2F0ZSBjaGFpbiB0byBpbmNsdWRlIGluIHJlcGx5CisJCQkJCSMgKG9wdGlvbmFsKQorc2lnbmVyX2tleQk9ICRkaXIvcHJpdmF0ZS90c2FrZXkucGVtICMgVGhlIFRTQSBwcml2YXRlIGtleSAob3B0aW9uYWwpCisKK2RlZmF1bHRfcG9saWN5CT0gdHNhX3BvbGljeTEJCSMgUG9saWN5IGlmIHJlcXVlc3QgZGlkIG5vdCBzcGVjaWZ5IGl0CisJCQkJCSMgKG9wdGlvbmFsKQorb3RoZXJfcG9saWNpZXMJPSB0c2FfcG9saWN5MiwgdHNhX3BvbGljeTMJIyBhY2NlcHRhYmxlIHBvbGljaWVzIChvcHRpb25hbCkKK2RpZ2VzdHMJCT0gbWQ1LCBzaGExCQkjIEFjY2VwdGFibGUgbWVzc2FnZSBkaWdlc3RzIChtYW5kYXRvcnkpCithY2N1cmFjeQk9IHNlY3M6MSwgbWlsbGlzZWNzOjUwMCwgbWljcm9zZWNzOjEwMAkjIChvcHRpb25hbCkKK2Nsb2NrX3ByZWNpc2lvbl9kaWdpdHMgID0gMAkjIG51bWJlciBvZiBkaWdpdHMgYWZ0ZXIgZG90LiAob3B0aW9uYWwpCitvcmRlcmluZwkJPSB5ZXMJIyBJcyBvcmRlcmluZyBkZWZpbmVkIGZvciB0aW1lc3RhbXBzPworCQkJCSMgKG9wdGlvbmFsLCBkZWZhdWx0OiBubykKK3RzYV9uYW1lCQk9IHllcwkjIE11c3QgdGhlIFRTQSBuYW1lIGJlIGluY2x1ZGVkIGluIHRoZSByZXBseT8KKwkJCQkjIChvcHRpb25hbCwgZGVmYXVsdDogbm8pCitlc3NfY2VydF9pZF9jaGFpbgk9IG5vCSMgTXVzdCB0aGUgRVNTIGNlcnQgaWQgY2hhaW4gYmUgaW5jbHVkZWQ/CisJCQkJIyAob3B0aW9uYWwsIGRlZmF1bHQ6IG5vKQpkaWZmIC0tZ2l0IGEvYXBwcy9vcGVuc3NsLmMgYi9hcHBzL29wZW5zc2wuYwppbmRleCA0ODBmZWY5Li44NTFlNjM5IDEwMDY0NAotLS0gYS9hcHBzL29wZW5zc2wuYworKysgYi9hcHBzL29wZW5zc2wuYwpAQCAtMTM1LDE5ICsxMzUsMTcgQEAKICAqIHR5cGUgb2YgIkZVTkNUSU9OKiIpLiBUaGlzIHJlbW92ZXMgdGhlIG5lY2Vzc2l0eSBmb3IgbWFjcm8tZ2VuZXJhdGVkIHdyYXBwZXIKICAqIGZ1bmN0aW9ucy4gKi8KIAotLyogc3RhdGljIHVuc2lnbmVkIGxvbmcgTVNfQ0FMTEJBQ0sgaGFzaChGVU5DVElPTiAqYSk7ICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBNU19DQUxMQkFDSyBoYXNoKGNvbnN0IHZvaWQgKmFfdm9pZCk7Ci0vKiBzdGF0aWMgaW50IE1TX0NBTExCQUNLIGNtcChGVU5DVElPTiAqYSxGVU5DVElPTiAqYik7ICovCi1zdGF0aWMgaW50IE1TX0NBTExCQUNLIGNtcChjb25zdCB2b2lkICphX3ZvaWQsY29uc3Qgdm9pZCAqYl92b2lkKTsKLXN0YXRpYyBMSEFTSCAqcHJvZ19pbml0KHZvaWQgKTsKLXN0YXRpYyBpbnQgZG9fY21kKExIQVNIICpwcm9nLGludCBhcmdjLGNoYXIgKmFyZ3ZbXSk7CitzdGF0aWMgTEhBU0hfT0YoRlVOQ1RJT04pICpwcm9nX2luaXQodm9pZCApOworc3RhdGljIGludCBkb19jbWQoTEhBU0hfT0YoRlVOQ1RJT04pICpwcm9nLGludCBhcmdjLGNoYXIgKmFyZ3ZbXSk7CitzdGF0aWMgdm9pZCBsaXN0X3BrZXkoQklPICpvdXQpOworc3RhdGljIHZvaWQgbGlzdF9jaXBoZXIoQklPICpvdXQpOworc3RhdGljIHZvaWQgbGlzdF9tZChCSU8gKm91dCk7CiBjaGFyICpkZWZhdWx0X2NvbmZpZ19maWxlPU5VTEw7CiAKIC8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBvbmx5IG9uZSB3aGVuIE1PTk9MSVRIIGlzIGRlZmluZWQgKi8KICNpZmRlZiBNT05PTElUSAogQ09ORiAqY29uZmlnPU5VTEw7CiBCSU8gKmJpb19lcnI9TlVMTDsKLWludCBpbl9GSVBTX21vZGU9MDsKICNlbmRpZgogCiAKQEAgLTIyNywyOCArMjI1LDEyIEBACiAJaW50IG4saSxyZXQ9MDsKIAlpbnQgYXJnYzsKIAljaGFyICoqYXJndiwqcDsKLQlMSEFTSCAqcHJvZz1OVUxMOworCUxIQVNIX09GKEZVTkNUSU9OKSAqcHJvZz1OVUxMOwogCWxvbmcgZXJybGluZTsKICAKIAlhcmcuZGF0YT1OVUxMOwogCWFyZy5jb3VudD0wOwogCi0JaW5fRklQU19tb2RlID0gMDsKLQotCWlmKGdldGVudigiT1BFTlNTTF9GSVBTIikpIHsKLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLQkJaWYgKCFGSVBTX21vZGVfc2V0KDEpKSB7Ci0JCQlFUlJfbG9hZF9jcnlwdG9fc3RyaW5ncygpOwotCQkJRVJSX3ByaW50X2Vycm9ycyhCSU9fbmV3X2ZwKHN0ZGVycixCSU9fTk9DTE9TRSkpOwotCQkJRVhJVCgxKTsKLQkJfQotCQlpbl9GSVBTX21vZGUgPSAxOwotI2Vsc2UKLQkJZnByaW50ZihzdGRlcnIsICJGSVBTIG1vZGUgbm90IHN1cHBvcnRlZC5cbiIpOwotCQlFWElUKDEpOwotI2VuZGlmCi0JCX0KLQogCWlmIChiaW9fZXJyID09IE5VTEwpCiAJCWlmICgoYmlvX2Vycj1CSU9fbmV3KEJJT19zX2ZpbGUoKSkpICE9IE5VTEwpCiAJCQlCSU9fc2V0X2ZwKGJpb19lcnIsc3RkZXJyLEJJT19OT0NMT1NFfEJJT19GUF9URVhUKTsKQEAgLTI5MCw5ICsyNzIsMjEgQEAKIAlpPU5DT05GX2xvYWQoY29uZmlnLHAsJmVycmxpbmUpOwogCWlmIChpID09IDApCiAJCXsKLQkJTkNPTkZfZnJlZShjb25maWcpOwotCQljb25maWcgPSBOVUxMOwotCQlFUlJfY2xlYXJfZXJyb3IoKTsKKwkJaWYgKEVSUl9HRVRfUkVBU09OKEVSUl9wZWVrX2xhc3RfZXJyb3IoKSkKKwkJICAgID09IENPTkZfUl9OT19TVUNIX0ZJTEUpCisJCQl7CisJCQlCSU9fcHJpbnRmKGJpb19lcnIsCisJCQkJICAgIldBUk5JTkc6IGNhbid0IG9wZW4gY29uZmlnIGZpbGU6ICVzXG4iLHApOworCQkJRVJSX2NsZWFyX2Vycm9yKCk7CisJCQlOQ09ORl9mcmVlKGNvbmZpZyk7CisJCQljb25maWcgPSBOVUxMOworCQkJfQorCQllbHNlCisJCQl7CisJCQlFUlJfcHJpbnRfZXJyb3JzKGJpb19lcnIpOworCQkJTkNPTkZfZnJlZShjb25maWcpOworCQkJZXhpdCgxKTsKKwkJCX0KIAkJfQogCiAJcHJvZz1wcm9nX2luaXQoKTsKQEAgLTMwMSw3ICsyOTUsNyBAQAogCXByb2dyYW1fbmFtZShBcmd2WzBdLHBuYW1lLHNpemVvZiBwbmFtZSk7CiAKIAlmLm5hbWU9cG5hbWU7Ci0JZnA9KEZVTkNUSU9OICopbGhfcmV0cmlldmUocHJvZywmZik7CisJZnA9bGhfRlVOQ1RJT05fcmV0cmlldmUocHJvZywmZik7CiAJaWYgKGZwICE9IE5VTEwpCiAJCXsKIAkJQXJndlswXT1wbmFtZTsKQEAgLTM2OCw3ICszNjIsNyBAQAogCQlOQ09ORl9mcmVlKGNvbmZpZyk7CiAJCWNvbmZpZz1OVUxMOwogCQl9Ci0JaWYgKHByb2cgIT0gTlVMTCkgbGhfZnJlZShwcm9nKTsKKwlpZiAocHJvZyAhPSBOVUxMKSBsaF9GVU5DVElPTl9mcmVlKHByb2cpOwogCWlmIChhcmcuZGF0YSAhPSBOVUxMKSBPUEVOU1NMX2ZyZWUoYXJnLmRhdGEpOwogCiAJYXBwc19zaHV0ZG93bigpOwpAQCAtMzg0LDkgKzM3OCwxMyBAQAogCiAjZGVmaW5lIExJU1RfU1RBTkRBUkRfQ09NTUFORFMgImxpc3Qtc3RhbmRhcmQtY29tbWFuZHMiCiAjZGVmaW5lIExJU1RfTUVTU0FHRV9ESUdFU1RfQ09NTUFORFMgImxpc3QtbWVzc2FnZS1kaWdlc3QtY29tbWFuZHMiCisjZGVmaW5lIExJU1RfTUVTU0FHRV9ESUdFU1RfQUxHT1JJVEhNUyAibGlzdC1tZXNzYWdlLWRpZ2VzdC1hbGdvcml0aG1zIgogI2RlZmluZSBMSVNUX0NJUEhFUl9DT01NQU5EUyAibGlzdC1jaXBoZXItY29tbWFuZHMiCisjZGVmaW5lIExJU1RfQ0lQSEVSX0FMR09SSVRITVMgImxpc3QtY2lwaGVyLWFsZ29yaXRobXMiCisjZGVmaW5lIExJU1RfUFVCTElDX0tFWV9BTEdPUklUSE1TICJsaXN0LXB1YmxpYy1rZXktYWxnb3JpdGhtcyIKIAotc3RhdGljIGludCBkb19jbWQoTEhBU0ggKnByb2csIGludCBhcmdjLCBjaGFyICphcmd2W10pCisKK3N0YXRpYyBpbnQgZG9fY21kKExIQVNIX09GKEZVTkNUSU9OKSAqcHJvZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAl7CiAJRlVOQ1RJT04gZiwqZnA7CiAJaW50IGkscmV0PTEsdHAsbmw7CkBAIC0zOTQsNyArMzkyLDIyIEBACiAJaWYgKChhcmdjIDw9IDApIHx8IChhcmd2WzBdID09IE5VTEwpKQogCQl7IHJldD0wOyBnb3RvIGVuZDsgfQogCWYubmFtZT1hcmd2WzBdOwotCWZwPShGVU5DVElPTiAqKWxoX3JldHJpZXZlKHByb2csJmYpOworCWZwPWxoX0ZVTkNUSU9OX3JldHJpZXZlKHByb2csJmYpOworCWlmIChmcCA9PSBOVUxMKQorCQl7CisJCWlmIChFVlBfZ2V0X2RpZ2VzdGJ5bmFtZShhcmd2WzBdKSkKKwkJCXsKKwkJCWYudHlwZSA9IEZVTkNfVFlQRV9NRDsKKwkJCWYuZnVuYyA9IGRnc3RfbWFpbjsKKwkJCWZwID0gJmY7CisJCQl9CisJCWVsc2UgaWYgKEVWUF9nZXRfY2lwaGVyYnluYW1lKGFyZ3ZbMF0pKQorCQkJeworCQkJZi50eXBlID0gRlVOQ19UWVBFX0NJUEhFUjsKKwkJCWYuZnVuYyA9IGVuY19tYWluOworCQkJZnAgPSAmZjsKKwkJCX0KKwkJfQogCWlmIChmcCAhPSBOVUxMKQogCQl7CiAJCXJldD1mcC0+ZnVuYyhhcmdjLGFyZ3YpOwpAQCAtNDA5LDcgKzQyMiw3IEBACiAJCX0KICNlbmRpZgogCQlmLm5hbWU9YXJndlswXSszOwotCQlyZXQgPSAobGhfcmV0cmlldmUocHJvZywmZikgIT0gTlVMTCk7CisJCXJldCA9IChsaF9GVU5DVElPTl9yZXRyaWV2ZShwcm9nLCZmKSAhPSBOVUxMKTsKIAkJaWYgKCFyZXQpCiAJCQlCSU9fcHJpbnRmKGJpb19zdGRvdXQsICIlc1xuIiwgYXJndlswXSk7CiAJCWVsc2UKQEAgLTQyNyw3ICs0NDAsMTAgQEAKIAkJfQogCWVsc2UgaWYgKChzdHJjbXAoYXJndlswXSxMSVNUX1NUQU5EQVJEX0NPTU1BTkRTKSA9PSAwKSB8fAogCQkoc3RyY21wKGFyZ3ZbMF0sTElTVF9NRVNTQUdFX0RJR0VTVF9DT01NQU5EUykgPT0gMCkgfHwKLQkJKHN0cmNtcChhcmd2WzBdLExJU1RfQ0lQSEVSX0NPTU1BTkRTKSA9PSAwKSkKKwkJKHN0cmNtcChhcmd2WzBdLExJU1RfTUVTU0FHRV9ESUdFU1RfQUxHT1JJVEhNUykgPT0gMCkgfHwKKwkJKHN0cmNtcChhcmd2WzBdLExJU1RfQ0lQSEVSX0NPTU1BTkRTKSA9PSAwKSB8fAorCQkoc3RyY21wKGFyZ3ZbMF0sTElTVF9DSVBIRVJfQUxHT1JJVEhNUykgPT0gMCkgfHwKKwkJKHN0cmNtcChhcmd2WzBdLExJU1RfUFVCTElDX0tFWV9BTEdPUklUSE1TKSA9PSAwKSkKIAkJewogCQlpbnQgbGlzdF90eXBlOwogCQlCSU8gKmJpb19zdGRvdXQ7CkBAIC00MzYsNiArNDUyLDEyIEBACiAJCQlsaXN0X3R5cGUgPSBGVU5DX1RZUEVfR0VORVJBTDsKIAkJZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMF0sTElTVF9NRVNTQUdFX0RJR0VTVF9DT01NQU5EUykgPT0gMCkKIAkJCWxpc3RfdHlwZSA9IEZVTkNfVFlQRV9NRDsKKwkJZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMF0sTElTVF9NRVNTQUdFX0RJR0VTVF9BTEdPUklUSE1TKSA9PSAwKQorCQkJbGlzdF90eXBlID0gRlVOQ19UWVBFX01EX0FMRzsKKwkJZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMF0sTElTVF9QVUJMSUNfS0VZX0FMR09SSVRITVMpID09IDApCisJCQlsaXN0X3R5cGUgPSBGVU5DX1RZUEVfUEtFWTsKKwkJZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMF0sTElTVF9DSVBIRVJfQUxHT1JJVEhNUykgPT0gMCkKKwkJCWxpc3RfdHlwZSA9IEZVTkNfVFlQRV9DSVBIRVJfQUxHOwogCQllbHNlIC8qIHN0cmNtcChhcmd2WzBdLExJU1RfQ0lQSEVSX0NPTU1BTkRTKSA9PSAwICovCiAJCQlsaXN0X3R5cGUgPSBGVU5DX1RZUEVfQ0lQSEVSOwogCQliaW9fc3Rkb3V0ID0gQklPX25ld19mcChzdGRvdXQsQklPX05PQ0xPU0UpOwpAQCAtNDQ1LDEwICs0NjcsMjMgQEAKIAkJYmlvX3N0ZG91dCA9IEJJT19wdXNoKHRtcGJpbywgYmlvX3N0ZG91dCk7CiAJCX0KICNlbmRpZgotCQkKLQkJZm9yIChmcD1mdW5jdGlvbnM7IGZwLT5uYW1lICE9IE5VTEw7IGZwKyspCi0JCQlpZiAoZnAtPnR5cGUgPT0gbGlzdF90eXBlKQotCQkJCUJJT19wcmludGYoYmlvX3N0ZG91dCwgIiVzXG4iLCBmcC0+bmFtZSk7CisKKwkJaWYgKCFsb2FkX2NvbmZpZyhiaW9fZXJyLCBOVUxMKSkKKwkJCWdvdG8gZW5kOworCisJCWlmIChsaXN0X3R5cGUgPT0gRlVOQ19UWVBFX1BLRVkpCisJCQlsaXN0X3BrZXkoYmlvX3N0ZG91dCk7CQorCQlpZiAobGlzdF90eXBlID09IEZVTkNfVFlQRV9NRF9BTEcpCisJCQlsaXN0X21kKGJpb19zdGRvdXQpOwkKKwkJaWYgKGxpc3RfdHlwZSA9PSBGVU5DX1RZUEVfQ0lQSEVSX0FMRykKKwkJCWxpc3RfY2lwaGVyKGJpb19zdGRvdXQpOwkKKwkJZWxzZQorCQkJeworCQkJZm9yIChmcD1mdW5jdGlvbnM7IGZwLT5uYW1lICE9IE5VTEw7IGZwKyspCisJCQkJaWYgKGZwLT50eXBlID09IGxpc3RfdHlwZSkKKwkJCQkJQklPX3ByaW50ZihiaW9fc3Rkb3V0LCAiJXNcbiIsCisJCQkJCQkJCWZwLT5uYW1lKTsKKwkJCX0KIAkJQklPX2ZyZWVfYWxsKGJpb19zdGRvdXQpOwogCQlyZXQ9MDsKIAkJZ290byBlbmQ7CkBAIC01MTEsOSArNTQ2LDk0IEBACiAgICAgcmV0dXJuIHN0cmNtcChmMS0+bmFtZSxmMi0+bmFtZSk7CiAgICAgfQogCi1zdGF0aWMgTEhBU0ggKnByb2dfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgbGlzdF9wa2V5KEJJTyAqb3V0KQogCXsKLQlMSEFTSCAqcmV0OworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBFVlBfUEtFWV9hc24xX2dldF9jb3VudCgpOyBpKyspCisJCXsKKwkJY29uc3QgRVZQX1BLRVlfQVNOMV9NRVRIT0QgKmFtZXRoOworCQlpbnQgcGtleV9pZCwgcGtleV9iYXNlX2lkLCBwa2V5X2ZsYWdzOworCQljb25zdCBjaGFyICpwaW5mbywgKnBlbV9zdHI7CisJCWFtZXRoID0gRVZQX1BLRVlfYXNuMV9nZXQwKGkpOworCQlFVlBfUEtFWV9hc24xX2dldDBfaW5mbygmcGtleV9pZCwgJnBrZXlfYmFzZV9pZCwgJnBrZXlfZmxhZ3MsCisJCQkJCQkmcGluZm8sICZwZW1fc3RyLCBhbWV0aCk7CisJCWlmIChwa2V5X2ZsYWdzICYgQVNOMV9QS0VZX0FMSUFTKQorCQkJeworCQkJQklPX3ByaW50ZihvdXQsICJOYW1lOiAlc1xuIiwgCisJCQkJCU9CSl9uaWQybG4ocGtleV9pZCkpOworCQkJQklPX3ByaW50ZihvdXQsICJcdFR5cGU6IEFsaWFzIHRvICVzXG4iLAorCQkJCQlPQkpfbmlkMmxuKHBrZXlfYmFzZV9pZCkpOworCQkJfQorCQllbHNlCisJCQl7CisJCQlCSU9fcHJpbnRmKG91dCwgIk5hbWU6ICVzXG4iLCBwaW5mbyk7CisJCQlCSU9fcHJpbnRmKG91dCwgIlx0VHlwZTogJXMgQWxnb3JpdGhtXG4iLCAKKwkJCQlwa2V5X2ZsYWdzICYgQVNOMV9QS0VZX0RZTkFNSUMgPworCQkJCQkiRXh0ZXJuYWwiIDogIkJ1aWx0aW4iKTsKKwkJCUJJT19wcmludGYob3V0LCAiXHRPSUQ6ICVzXG4iLCBPQkpfbmlkMmxuKHBrZXlfaWQpKTsKKwkJCWlmIChwZW1fc3RyID09IE5VTEwpCisJCQkJcGVtX3N0ciA9ICIobm9uZSkiOworCQkJQklPX3ByaW50ZihvdXQsICJcdFBFTSBzdHJpbmc6ICVzXG4iLCBwZW1fc3RyKTsKKwkJCX0KKwkJCQkJCisJCX0KKwl9CisKK3N0YXRpYyB2b2lkIGxpc3RfY2lwaGVyX2ZuKGNvbnN0IEVWUF9DSVBIRVIgKmMsCisJCQljb25zdCBjaGFyICpmcm9tLCBjb25zdCBjaGFyICp0bywgdm9pZCAqYXJnKQorCXsKKwlpZiAoYykKKwkJQklPX3ByaW50ZihhcmcsICIlc1xuIiwgRVZQX0NJUEhFUl9uYW1lKGMpKTsKKwllbHNlCisJCXsKKwkJaWYgKCFmcm9tKQorCQkJZnJvbSA9ICI8dW5kZWZpbmVkPiI7CisJCWlmICghdG8pCisJCQl0byA9ICI8dW5kZWZpbmVkPiI7CisJCUJJT19wcmludGYoYXJnLCAiJXMgPT4gJXNcbiIsIGZyb20sIHRvKTsKKwkJfQorCX0KKworc3RhdGljIHZvaWQgbGlzdF9jaXBoZXIoQklPICpvdXQpCisJeworCUVWUF9DSVBIRVJfZG9fYWxsX3NvcnRlZChsaXN0X2NpcGhlcl9mbiwgb3V0KTsKKwl9CisKK3N0YXRpYyB2b2lkIGxpc3RfbWRfZm4oY29uc3QgRVZQX01EICptLAorCQkJY29uc3QgY2hhciAqZnJvbSwgY29uc3QgY2hhciAqdG8sIHZvaWQgKmFyZykKKwl7CisJaWYgKG0pCisJCUJJT19wcmludGYoYXJnLCAiJXNcbiIsIEVWUF9NRF9uYW1lKG0pKTsKKwllbHNlCisJCXsKKwkJaWYgKCFmcm9tKQorCQkJZnJvbSA9ICI8dW5kZWZpbmVkPiI7CisJCWlmICghdG8pCisJCQl0byA9ICI8dW5kZWZpbmVkPiI7CisJCUJJT19wcmludGYoYXJnLCAiJXMgPT4gJXNcbiIsIGZyb20sIHRvKTsKKwkJfQorCX0KKworc3RhdGljIHZvaWQgbGlzdF9tZChCSU8gKm91dCkKKwl7CisJRVZQX01EX2RvX2FsbF9zb3J0ZWQobGlzdF9tZF9mbiwgb3V0KTsKKwl9CisKK3N0YXRpYyBpbnQgTVNfQ0FMTEJBQ0sgZnVuY3Rpb25fY21wKGNvbnN0IEZVTkNUSU9OICphLCBjb25zdCBGVU5DVElPTiAqYikKKwl7CisJcmV0dXJuIHN0cm5jbXAoYS0+bmFtZSxiLT5uYW1lLDgpOworCX0KK3N0YXRpYyBJTVBMRU1FTlRfTEhBU0hfQ09NUF9GTihmdW5jdGlvbiwgRlVOQ1RJT04pCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIE1TX0NBTExCQUNLIGZ1bmN0aW9uX2hhc2goY29uc3QgRlVOQ1RJT04gKmEpCisJeworCXJldHVybiBsaF9zdHJoYXNoKGEtPm5hbWUpOworCX0JCitzdGF0aWMgSU1QTEVNRU5UX0xIQVNIX0hBU0hfRk4oZnVuY3Rpb24sIEZVTkNUSU9OKQorCitzdGF0aWMgTEhBU0hfT0YoRlVOQ1RJT04pICpwcm9nX2luaXQodm9pZCkKKwl7CisJTEhBU0hfT0YoRlVOQ1RJT04pICpyZXQ7CiAJRlVOQ1RJT04gKmY7CiAJc2l6ZV90IGk7CiAKQEAgLTUyMiwyMyArNjQyLDExIEBACiAJICAgIDsKIAlxc29ydChmdW5jdGlvbnMsaSxzaXplb2YgKmZ1bmN0aW9ucyxTb3J0Rm5CeU5hbWUpOwogCi0JaWYgKChyZXQ9bGhfbmV3KGhhc2gsIGNtcCkpID09IE5VTEwpCisJaWYgKChyZXQ9bGhfRlVOQ1RJT05fbmV3KCkpID09IE5VTEwpCiAJCXJldHVybihOVUxMKTsKIAogCWZvciAoZj1mdW5jdGlvbnM7IGYtPm5hbWUgIT0gTlVMTDsgZisrKQotCQlsaF9pbnNlcnQocmV0LGYpOworCQkodm9pZClsaF9GVU5DVElPTl9pbnNlcnQocmV0LGYpOwogCXJldHVybihyZXQpOwogCX0KIAotLyogc3RhdGljIGludCBNU19DQUxMQkFDSyBjbXAoRlVOQ1RJT04gKmEsIEZVTkNUSU9OICpiKSAqLwotc3RhdGljIGludCBNU19DQUxMQkFDSyBjbXAoY29uc3Qgdm9pZCAqYV92b2lkLCBjb25zdCB2b2lkICpiX3ZvaWQpCi0JewotCXJldHVybihzdHJuY21wKCgoY29uc3QgRlVOQ1RJT04gKilhX3ZvaWQpLT5uYW1lLAotCQkJKChjb25zdCBGVU5DVElPTiAqKWJfdm9pZCktPm5hbWUsOCkpOwotCX0KLQotLyogc3RhdGljIHVuc2lnbmVkIGxvbmcgTVNfQ0FMTEJBQ0sgaGFzaChGVU5DVElPTiAqYSkgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIE1TX0NBTExCQUNLIGhhc2goY29uc3Qgdm9pZCAqYV92b2lkKQotCXsKLQlyZXR1cm4obGhfc3RyaGFzaCgoKGNvbnN0IEZVTkNUSU9OICopYV92b2lkKS0+bmFtZSkpOwotCX0KZGlmZiAtLWdpdCBhL2FwcHMvb3BlbnNzbC5jbmYgYi9hcHBzL29wZW5zc2wuY25mCmluZGV4IDllNTkwMjAuLjlkMmNkNWIgMTAwNjQ0Ci0tLSBhL2FwcHMvb3BlbnNzbC5jbmYKKysrIGIvYXBwcy9vcGVuc3NsLmNuZgpAQCAtMjEsMTIgKzIxLDE3IEBACiAKIFsgbmV3X29pZHMgXQogCi0jIFdlIGNhbiBhZGQgbmV3IE9JRHMgaW4gaGVyZSBmb3IgdXNlIGJ5ICdjYScgYW5kICdyZXEnLgorIyBXZSBjYW4gYWRkIG5ldyBPSURzIGluIGhlcmUgZm9yIHVzZSBieSAnY2EnLCAncmVxJyBhbmQgJ3RzJy4KICMgQWRkIGEgc2ltcGxlIE9JRCBsaWtlIHRoaXM6CiAjIHRlc3RvaWQxPTEuMi4zLjQKICMgT3IgdXNlIGNvbmZpZyBmaWxlIHN1YnN0aXR1dGlvbiBsaWtlIHRoaXM6CiAjIHRlc3RvaWQyPSR7dGVzdG9pZDF9LjUuNgogCisjIFBvbGljaWVzIHVzZWQgYnkgdGhlIFRTQSBleGFtcGxlcy4KK3RzYV9wb2xpY3kxID0gMS4yLjMuNC4xCit0c2FfcG9saWN5MiA9IDEuMi4zLjQuNS42Cit0c2FfcG9saWN5MyA9IDEuMi4zLjQuNS43CisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiBbIGNhIF0KIGRlZmF1bHRfY2EJPSBDQV9kZWZhdWx0CQkjIFRoZSBkZWZhdWx0IGNhIHNlY3Rpb24KQEAgLTY3LDcgKzcyLDcgQEAKIAogZGVmYXVsdF9kYXlzCT0gMzY1CQkJIyBob3cgbG9uZyB0byBjZXJ0aWZ5IGZvcgogZGVmYXVsdF9jcmxfZGF5cz0gMzAJCQkjIGhvdyBsb25nIGJlZm9yZSBuZXh0IENSTAotZGVmYXVsdF9tZAk9IHNoYTEJCQkjIHdoaWNoIG1kIHRvIHVzZS4KK2RlZmF1bHRfbWQJPSBkZWZhdWx0CQkjIHVzZSBwdWJsaWMga2V5IGRlZmF1bHQgTUQKIHByZXNlcnZlCT0gbm8JCQkjIGtlZXAgcGFzc2VkIEROIG9yZGVyaW5nCiAKICMgQSBmZXcgZGlmZmVyZW5jZSB3YXkgb2Ygc3BlY2lmeWluZyBob3cgc2ltaWxhciB0aGUgcmVxdWVzdCBzaG91bGQgbG9vawpAQCAtMTEwLDEzICsxMTUsMTIgQEAKIAogIyBUaGlzIHNldHMgYSBtYXNrIGZvciBwZXJtaXR0ZWQgc3RyaW5nIHR5cGVzLiBUaGVyZSBhcmUgc2V2ZXJhbCBvcHRpb25zLiAKICMgZGVmYXVsdDogUHJpbnRhYmxlU3RyaW5nLCBUNjFTdHJpbmcsIEJNUFN0cmluZy4KLSMgcGtpeAkgOiBQcmludGFibGVTdHJpbmcsIEJNUFN0cmluZy4KLSMgdXRmOG9ubHk6IG9ubHkgVVRGOFN0cmluZ3MuCisjIHBraXgJIDogUHJpbnRhYmxlU3RyaW5nLCBCTVBTdHJpbmcgKFBLSVggcmVjb21tZW5kYXRpb24gYmVmb3JlIDIwMDQpCisjIHV0Zjhvbmx5OiBvbmx5IFVURjhTdHJpbmdzIChQS0lYIHJlY29tbWVuZGF0aW9uIGFmdGVyIDIwMDQpLgogIyBub21ic3RyIDogUHJpbnRhYmxlU3RyaW5nLCBUNjFTdHJpbmcgKG5vIEJNUFN0cmluZ3Mgb3IgVVRGOFN0cmluZ3MpLgogIyBNQVNLOlhYWFggYSBsaXRlcmFsIG1hc2sgdmFsdWUuCi0jIFdBUk5JTkc6IGN1cnJlbnQgdmVyc2lvbnMgb2YgTmV0c2NhcGUgY3Jhc2ggb24gQk1QU3RyaW5ncyBvciBVVEY4U3RyaW5ncwotIyBzbyB1c2UgdGhpcyBvcHRpb24gd2l0aCBjYXV0aW9uIQotc3RyaW5nX21hc2sgPSBub21ic3RyCisjIFdBUk5JTkc6IGFuY2llbnQgdmVyc2lvbnMgb2YgTmV0c2NhcGUgY3Jhc2ggb24gQk1QU3RyaW5ncyBvciBVVEY4U3RyaW5ncy4KK3N0cmluZ19tYXNrID0gdXRmOG9ubHkKIAogIyByZXFfZXh0ZW5zaW9ucyA9IHYzX3JlcSAjIFRoZSBleHRlbnNpb25zIHRvIGFkZCB0byBhIGNlcnRpZmljYXRlIHJlcXVlc3QKIApAQCAtMjA3LDYgKzIxMSw5IEBACiAjbnNDYVBvbGljeVVybAogI25zU3NsU2VydmVyTmFtZQogCisjIFRoaXMgaXMgcmVxdWlyZWQgZm9yIFRTQSBjZXJ0aWZpY2F0ZXMuCisjIGV4dGVuZGVkS2V5VXNhZ2UgPSBjcml0aWNhbCx0aW1lU3RhbXBpbmcKKwogWyB2M19yZXEgXQogCiAjIEV4dGVuc2lvbnMgdG8gYWRkIHRvIGEgY2VydGlmaWNhdGUgcmVxdWVzdApAQCAtMjI0LDcgKzIzMSw3IEBACiAKIHN1YmplY3RLZXlJZGVudGlmaWVyPWhhc2gKIAotYXV0aG9yaXR5S2V5SWRlbnRpZmllcj1rZXlpZDphbHdheXMsaXNzdWVyOmFsd2F5cworYXV0aG9yaXR5S2V5SWRlbnRpZmllcj1rZXlpZDphbHdheXMsaXNzdWVyCiAKICMgVGhpcyBpcyB3aGF0IFBLSVggcmVjb21tZW5kcyBidXQgc29tZSBicm9rZW4gc29mdHdhcmUgY2hva2VzIG9uIGNyaXRpY2FsCiAjIGV4dGVuc2lvbnMuCkBAIC0yNTcsNyArMjY0LDcgQEAKICMgT25seSBpc3N1ZXJBbHROYW1lIGFuZCBhdXRob3JpdHlLZXlJZGVudGlmaWVyIG1ha2UgYW55IHNlbnNlIGluIGEgQ1JMLgogCiAjIGlzc3VlckFsdE5hbWU9aXNzdWVyOmNvcHkKLWF1dGhvcml0eUtleUlkZW50aWZpZXI9a2V5aWQ6YWx3YXlzLGlzc3VlcjphbHdheXMKK2F1dGhvcml0eUtleUlkZW50aWZpZXI9a2V5aWQ6YWx3YXlzCiAKIFsgcHJveHlfY2VydF9leHQgXQogIyBUaGVzZSBleHRlbnNpb25zIHNob3VsZCBiZSBhZGRlZCB3aGVuIGNyZWF0aW5nIGEgcHJveHkgY2VydGlmaWNhdGUKQEAgLTI5MCw3ICsyOTcsNyBAQAogCiAjIFBLSVggcmVjb21tZW5kYXRpb25zIGhhcm1sZXNzIGlmIGluY2x1ZGVkIGluIGFsbCBjZXJ0aWZpY2F0ZXMuCiBzdWJqZWN0S2V5SWRlbnRpZmllcj1oYXNoCi1hdXRob3JpdHlLZXlJZGVudGlmaWVyPWtleWlkLGlzc3VlcjphbHdheXMKK2F1dGhvcml0eUtleUlkZW50aWZpZXI9a2V5aWQsaXNzdWVyCiAKICMgVGhpcyBzdHVmZiBpcyBmb3Igc3ViamVjdEFsdE5hbWUgYW5kIGlzc3VlckFsdG5hbWUuCiAjIEltcG9ydCB0aGUgZW1haWwgYWRkcmVzcy4KQEAgLTMxMSwzICszMTgsMzMgQEAKIAogIyBUaGlzIHJlYWxseSBuZWVkcyB0byBiZSBpbiBwbGFjZSBmb3IgaXQgdG8gYmUgYSBwcm94eSBjZXJ0aWZpY2F0ZS4KIHByb3h5Q2VydEluZm89Y3JpdGljYWwsbGFuZ3VhZ2U6aWQtcHBsLWFueUxhbmd1YWdlLHBhdGhsZW46Myxwb2xpY3k6Zm9vCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitbIHRzYSBdCisKK2RlZmF1bHRfdHNhID0gdHNhX2NvbmZpZzEJIyB0aGUgZGVmYXVsdCBUU0Egc2VjdGlvbgorCitbIHRzYV9jb25maWcxIF0KKworIyBUaGVzZSBhcmUgdXNlZCBieSB0aGUgVFNBIHJlcGx5IGdlbmVyYXRpb24gb25seS4KK2RpcgkJPSAuL2RlbW9DQQkJIyBUU0Egcm9vdCBkaXJlY3RvcnkKK3NlcmlhbAkJPSAkZGlyL3RzYXNlcmlhbAkjIFRoZSBjdXJyZW50IHNlcmlhbCBudW1iZXIgKG1hbmRhdG9yeSkKK2NyeXB0b19kZXZpY2UJPSBidWlsdGluCQkjIE9wZW5TU0wgZW5naW5lIHRvIHVzZSBmb3Igc2lnbmluZworc2lnbmVyX2NlcnQJPSAkZGlyL3RzYWNlcnQucGVtIAkjIFRoZSBUU0Egc2lnbmluZyBjZXJ0aWZpY2F0ZQorCQkJCQkjIChvcHRpb25hbCkKK2NlcnRzCQk9ICRkaXIvY2FjZXJ0LnBlbQkjIENlcnRpZmljYXRlIGNoYWluIHRvIGluY2x1ZGUgaW4gcmVwbHkKKwkJCQkJIyAob3B0aW9uYWwpCitzaWduZXJfa2V5CT0gJGRpci9wcml2YXRlL3RzYWtleS5wZW0gIyBUaGUgVFNBIHByaXZhdGUga2V5IChvcHRpb25hbCkKKworZGVmYXVsdF9wb2xpY3kJPSB0c2FfcG9saWN5MQkJIyBQb2xpY3kgaWYgcmVxdWVzdCBkaWQgbm90IHNwZWNpZnkgaXQKKwkJCQkJIyAob3B0aW9uYWwpCitvdGhlcl9wb2xpY2llcwk9IHRzYV9wb2xpY3kyLCB0c2FfcG9saWN5MwkjIGFjY2VwdGFibGUgcG9saWNpZXMgKG9wdGlvbmFsKQorZGlnZXN0cwkJPSBtZDUsIHNoYTEJCSMgQWNjZXB0YWJsZSBtZXNzYWdlIGRpZ2VzdHMgKG1hbmRhdG9yeSkKK2FjY3VyYWN5CT0gc2VjczoxLCBtaWxsaXNlY3M6NTAwLCBtaWNyb3NlY3M6MTAwCSMgKG9wdGlvbmFsKQorY2xvY2tfcHJlY2lzaW9uX2RpZ2l0cyAgPSAwCSMgbnVtYmVyIG9mIGRpZ2l0cyBhZnRlciBkb3QuIChvcHRpb25hbCkKK29yZGVyaW5nCQk9IHllcwkjIElzIG9yZGVyaW5nIGRlZmluZWQgZm9yIHRpbWVzdGFtcHM/CisJCQkJIyAob3B0aW9uYWwsIGRlZmF1bHQ6IG5vKQordHNhX25hbWUJCT0geWVzCSMgTXVzdCB0aGUgVFNBIG5hbWUgYmUgaW5jbHVkZWQgaW4gdGhlIHJlcGx5PworCQkJCSMgKG9wdGlvbmFsLCBkZWZhdWx0OiBubykKK2Vzc19jZXJ0X2lkX2NoYWluCT0gbm8JIyBNdXN0IHRoZSBFU1MgY2VydCBpZCBjaGFpbiBiZSBpbmNsdWRlZD8KKwkJCQkjIChvcHRpb25hbCwgZGVmYXVsdDogbm8pCmRpZmYgLS1naXQgYS9hcHBzL3BrY3MxMi5jIGIvYXBwcy9wa2NzMTIuYwppbmRleCAwZGIwYjc5Li41MTRhMDJlIDEwMDY0NAotLS0gYS9hcHBzL3BrY3MxMi5jCisrKyBiL2FwcHMvcGtjczEyLmMKQEAgLTY4LDEyICs2OCw2IEBACiAjaW5jbHVkZSA8b3BlbnNzbC9wZW0uaD4KICNpbmNsdWRlIDxvcGVuc3NsL3BrY3MxMi5oPgogCi0jaWZkZWYgT1BFTlNTTF9TWVNfTkVUV0FSRQotLyogUmVuYW1lIHRoZXNlIGZ1bmN0aW9ucyB0byBhdm9pZCBuYW1lIGNsYXNoZXMgb24gTmV0V2FyZSBPUyAqLwotI2RlZmluZSB1bmkyYXNjIE9QRU5TU0xfdW5pMmFzYwotI2RlZmluZSBhc2MydW5pIE9QRU5TU0xfYXNjMnVuaQotI2VuZGlmCi0KICNkZWZpbmUgUFJPRyBwa2NzMTJfbWFpbgogCiBjb25zdCBFVlBfQ0lQSEVSICplbmM7CkBAIC05NCw2ICs4OCw3IEBACiB2b2lkIGhleF9wcmluKEJJTyAqb3V0LCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4pOwogaW50IGFsZ19wcmludChCSU8gKngsIFg1MDlfQUxHT1IgKmFsZyk7CiBpbnQgY2VydF9sb2FkKEJJTyAqaW4sIFNUQUNLX09GKFg1MDkpICpzayk7CitzdGF0aWMgaW50IHNldF9wYmUoQklPICplcnIsIGludCAqcHBiZSwgY29uc3QgY2hhciAqc3RyKTsKIAogaW50IE1BSU4oaW50LCBjaGFyICoqKTsKIApAQCAtMTE3LDE2ICsxMTIsMTcgQEAKICAgICBpbnQgbWFjaXRlciA9IFBLQ1MxMl9ERUZBVUxUX0lURVI7CiAgICAgaW50IHR3b3Bhc3MgPSAwOwogICAgIGludCBrZXl0eXBlID0gMDsKLSAgICBpbnQgY2VydF9wYmU7CisgICAgaW50IGNlcnRfcGJlID0gTklEX3BiZV9XaXRoU0hBMUFuZDQwQml0UkMyX0NCQzsKICAgICBpbnQga2V5X3BiZSA9IE5JRF9wYmVfV2l0aFNIQTFBbmQzX0tleV9UcmlwbGVERVNfQ0JDOwogICAgIGludCByZXQgPSAxOwogICAgIGludCBtYWN2ZXIgPSAxOwogICAgIGludCBub3Byb21wdCA9IDA7Ci0gICAgU1RBQ0sgKmNhbmFtZXMgPSBOVUxMOworICAgIFNUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSAqY2FuYW1lcyA9IE5VTEw7CiAgICAgY2hhciAqY3Bhc3MgPSBOVUxMLCAqbXBhc3MgPSBOVUxMOwogICAgIGNoYXIgKnBhc3NhcmdpbiA9IE5VTEwsICpwYXNzYXJnb3V0ID0gTlVMTCwgKnBhc3NhcmcgPSBOVUxMOwogICAgIGNoYXIgKnBhc3NpbiA9IE5VTEwsICpwYXNzb3V0ID0gTlVMTDsKICAgICBjaGFyICppbnJhbmQgPSBOVUxMOworICAgIGNoYXIgKm1hY2FsZyA9IE5VTEw7CiAgICAgY2hhciAqQ0FwYXRoID0gTlVMTCwgKkNBZmlsZSA9IE5VTEw7CiAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCiAgICAgY2hhciAqZW5naW5lPU5VTEw7CkBAIC0xMzQsMTMgKzEzMCw2IEBACiAKICAgICBhcHBzX3N0YXJ0dXAoKTsKIAotI2lmZGVmIE9QRU5TU0xfRklQUwotICAgIGlmIChGSVBTX21vZGUoKSkKLQljZXJ0X3BiZSA9IE5JRF9wYmVfV2l0aFNIQTFBbmQzX0tleV9UcmlwbGVERVNfQ0JDOwotICAgIGVsc2UKLSNlbmRpZgotICAgIGNlcnRfcGJlID0gTklEX3BiZV9XaXRoU0hBMUFuZDQwQml0UkMyX0NCQzsKLQogICAgIGVuYyA9IEVWUF9kZXNfZWRlM19jYmMoKTsKICAgICBpZiAoYmlvX2VyciA9PSBOVUxMICkgYmlvX2VyciA9IEJJT19uZXdfZnAgKHN0ZGVyciwgQklPX05PQ0xPU0UpOwogCkBAIC0xOTEsMzMgKzE4MCwxOCBAQAogCQkJCQkgbWFjaXRlciA9IDE7CiAJCWVsc2UgaWYgKCFzdHJjbXAgKCphcmdzLCAiLW5vbWFjIikpCiAJCQkJCSBtYWNpdGVyID0gLTE7CisJCWVsc2UgaWYgKCFzdHJjbXAgKCphcmdzLCAiLW1hY2FsZyIpKQorCQkgICAgaWYgKGFyZ3NbMV0pIHsKKwkJCWFyZ3MrKzsJCisJCQltYWNhbGcgPSAqYXJnczsKKwkJICAgIH0gZWxzZSBiYWRhcmcgPSAxOwogCQllbHNlIGlmICghc3RyY21wICgqYXJncywgIi1ub2RlcyIpKSBlbmM9TlVMTDsKIAkJZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3MsICItY2VydHBiZSIpKSB7Ci0JCQlpZiAoYXJnc1sxXSkgewotCQkJCWFyZ3MrKzsKLQkJCQlpZiAoIXN0cmNtcCgqYXJncywgIk5PTkUiKSkKLQkJCQkJY2VydF9wYmUgPSAtMTsKLQkJCQllbHNlCi0JCQkJCWNlcnRfcGJlPU9CSl90eHQybmlkKCphcmdzKTsKLQkJCQlpZihjZXJ0X3BiZSA9PSBOSURfdW5kZWYpIHsKLQkJCQkJQklPX3ByaW50ZihiaW9fZXJyLAotCQkJCQkJICJVbmtub3duIFBCRSBhbGdvcml0aG0gJXNcbiIsICphcmdzKTsKLQkJCQkJYmFkYXJnID0gMTsKLQkJCQl9Ci0JCQl9IGVsc2UgYmFkYXJnID0gMTsKKwkJCWlmICghc2V0X3BiZShiaW9fZXJyLCAmY2VydF9wYmUsICorK2FyZ3MpKQorCQkJCWJhZGFyZyA9IDE7CiAJCX0gZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3MsICIta2V5cGJlIikpIHsKLQkJCWlmIChhcmdzWzFdKSB7Ci0JCQkJYXJncysrOwotCQkJCWlmICghc3RyY21wKCphcmdzLCAiTk9ORSIpKQotCQkJCQlrZXlfcGJlID0gLTE7Ci0JCQkJZWxzZQotCQkJCQlrZXlfcGJlPU9CSl90eHQybmlkKCphcmdzKTsKLQkJCQlpZihrZXlfcGJlID09IE5JRF91bmRlZikgewotCQkJCQlCSU9fcHJpbnRmKGJpb19lcnIsCi0JCQkJCQkgIlVua25vd24gUEJFIGFsZ29yaXRobSAlc1xuIiwgKmFyZ3MpOwotCQkJCQliYWRhcmcgPSAxOwotCQkJCX0KLQkJCX0gZWxzZSBiYWRhcmcgPSAxOworCQkJaWYgKCFzZXRfcGJlKGJpb19lcnIsICZrZXlfcGJlLCAqKythcmdzKSkKKwkJCQliYWRhcmcgPSAxOwogCQl9IGVsc2UgaWYgKCFzdHJjbXAgKCphcmdzLCAiLXJhbmQiKSkgewogCQkgICAgaWYgKGFyZ3NbMV0pIHsKIAkJCWFyZ3MrKzsJCkBAIC0yNDgsOCArMjIyLDggQEAKIAkJfSBlbHNlIGlmICghc3RyY21wICgqYXJncywgIi1jYW5hbWUiKSkgewogCQkgICAgaWYgKGFyZ3NbMV0pIHsKIAkJCWFyZ3MrKzsJCi0JCQlpZiAoIWNhbmFtZXMpIGNhbmFtZXMgPSBza19uZXdfbnVsbCgpOwotCQkJc2tfcHVzaChjYW5hbWVzLCAqYXJncyk7CisJCQlpZiAoIWNhbmFtZXMpIGNhbmFtZXMgPSBza19PUEVOU1NMX1NUUklOR19uZXdfbnVsbCgpOworCQkJc2tfT1BFTlNTTF9TVFJJTkdfcHVzaChjYW5hbWVzLCAqYXJncyk7CiAJCSAgICB9IGVsc2UgYmFkYXJnID0gMTsKIAkJfSBlbHNlIGlmICghc3RyY21wICgqYXJncywgIi1pbiIpKSB7CiAJCSAgICBpZiAoYXJnc1sxXSkgewpAQCAtMzM4LDExICszMTIsMTQgQEAKICNlbmRpZgogCUJJT19wcmludGYgKGJpb19lcnIsICItbm9kZXMgICAgICAgIGRvbid0IGVuY3J5cHQgcHJpdmF0ZSBrZXlzXG4iKTsKIAlCSU9fcHJpbnRmIChiaW9fZXJyLCAiLW5vaXRlciAgICAgICBkb24ndCB1c2UgZW5jcnlwdGlvbiBpdGVyYXRpb25cbiIpOworCUJJT19wcmludGYgKGJpb19lcnIsICItbm9tYWNpdGVyICAgIGRvbid0IHVzZSBNQUMgaXRlcmF0aW9uXG4iKTsKIAlCSU9fcHJpbnRmIChiaW9fZXJyLCAiLW1hY2l0ZXIgICAgICB1c2UgTUFDIGl0ZXJhdGlvblxuIik7CisJQklPX3ByaW50ZiAoYmlvX2VyciwgIi1ub21hYyAgICAgICAgZG9uJ3QgZ2VuZXJhdGUgTUFDXG4iKTsKIAlCSU9fcHJpbnRmIChiaW9fZXJyLCAiLXR3b3Bhc3MgICAgICBzZXBhcmF0ZSBNQUMsIGVuY3J5cHRpb24gcGFzc3dvcmRzXG4iKTsKIAlCSU9fcHJpbnRmIChiaW9fZXJyLCAiLWRlc2NlcnQgICAgICBlbmNyeXB0IFBLQ1MjMTIgY2VydGlmaWNhdGVzIHdpdGggdHJpcGxlIERFUyAoZGVmYXVsdCBSQzItNDApXG4iKTsKIAlCSU9fcHJpbnRmIChiaW9fZXJyLCAiLWNlcnRwYmUgYWxnICBzcGVjaWZ5IGNlcnRpZmljYXRlIFBCRSBhbGdvcml0aG0gKGRlZmF1bHQgUkMyLTQwKVxuIik7CiAJQklPX3ByaW50ZiAoYmlvX2VyciwgIi1rZXlwYmUgYWxnICAgc3BlY2lmeSBwcml2YXRlIGtleSBQQkUgYWxnb3JpdGhtIChkZWZhdWx0IDNERVMpXG4iKTsKKwlCSU9fcHJpbnRmIChiaW9fZXJyLCAiLW1hY2FsZyBhbGcgICBkaWdlc3QgYWxnb3JpdGhtIHVzZWQgaW4gTUFDIChkZWZhdWx0IFNIQTEpXG4iKTsKIAlCSU9fcHJpbnRmIChiaW9fZXJyLCAiLWtleWV4ICAgICAgICBzZXQgTVMga2V5IGV4Y2hhbmdlIHR5cGVcbiIpOwogCUJJT19wcmludGYgKGJpb19lcnIsICIta2V5c2lnICAgICAgIHNldCBNUyBrZXkgc2lnbmF0dXJlIHR5cGVcbiIpOwogCUJJT19wcmludGYgKGJpb19lcnIsICItcGFzc3dvcmQgcCAgIHNldCBpbXBvcnQvZXhwb3J0IHBhc3N3b3JkIHNvdXJjZVxuIik7CkBAIC0zNTQsOCArMzMxLDggQEAKIAlCSU9fcHJpbnRmKGJpb19lcnIsICAiLXJhbmQgZmlsZSVjZmlsZSVjLi4uXG4iLCBMSVNUX1NFUEFSQVRPUl9DSEFSLCBMSVNUX1NFUEFSQVRPUl9DSEFSKTsKIAlCSU9fcHJpbnRmKGJpb19lcnIsICAiICAgICAgICAgICAgICBsb2FkIHRoZSBmaWxlIChvciB0aGUgZmlsZXMgaW4gdGhlIGRpcmVjdG9yeSkgaW50b1xuIik7CiAJQklPX3ByaW50ZihiaW9fZXJyLCAgIiAgICAgICAgICAgICAgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yXG4iKTsKLSAgCUJJT19wcmludGYoYmlvX2VyciwgICItQ1NQIG5hbWUgICAgIE1pY3Jvc29mdCBDU1AgbmFtZVxuIik7Ci0gCUJJT19wcmludGYoYmlvX2VyciwgICItTE1LICAgICAgICAgIEFkZCBsb2NhbCBtYWNoaW5lIGtleXNldCBhdHRyaWJ1dGUgdG8gcHJpdmF0ZSBrZXlcbiIpOworCUJJT19wcmludGYoYmlvX2VyciwgICItQ1NQIG5hbWUgICAgIE1pY3Jvc29mdCBDU1AgbmFtZVxuIik7CisJQklPX3ByaW50ZihiaW9fZXJyLCAgIi1MTUsgICAgICAgICAgQWRkIGxvY2FsIG1hY2hpbmUga2V5c2V0IGF0dHJpYnV0ZSB0byBwcml2YXRlIGtleVxuIik7CiAgICAgCWdvdG8gZW5kOwogICAgIH0KIApAQCAtNDQ1LDYgKzQyMiw3IEBACiAJRVZQX1BLRVkgKmtleSA9IE5VTEw7CiAJWDUwOSAqdWNlcnQgPSBOVUxMLCAqeCA9IE5VTEw7CiAJU1RBQ0tfT0YoWDUwOSkgKmNlcnRzPU5VTEw7CisJY29uc3QgRVZQX01EICptYWNtZCA9IE5VTEw7CiAJdW5zaWduZWQgY2hhciAqY2F0bXAgPSBOVUxMOwogCWludCBpOwogCkBAIC01NzEsOSArNTQ5LDkgQEAKIAogCS8qIEFkZCBhbnkgQ0EgbmFtZXMgKi8KIAotCWZvciAoaSA9IDA7IGkgPCBza19udW0oY2FuYW1lcyk7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgc2tfT1BFTlNTTF9TVFJJTkdfbnVtKGNhbmFtZXMpOyBpKyspCiAJCXsKLQkJY2F0bXAgPSAodW5zaWduZWQgY2hhciAqKXNrX3ZhbHVlKGNhbmFtZXMsIGkpOworCQljYXRtcCA9ICh1bnNpZ25lZCBjaGFyICopc2tfT1BFTlNTTF9TVFJJTkdfdmFsdWUoY2FuYW1lcywgaSk7CiAJCVg1MDlfYWxpYXNfc2V0MShza19YNTA5X3ZhbHVlKGNlcnRzLCBpKSwgY2F0bXAsIC0xKTsKIAkJfQogCkBAIC02MTEsOCArNTg5LDE4IEBACiAJCWdvdG8gZXhwb3J0X2VuZDsKIAkJfQogCisJaWYgKG1hY2FsZykKKwkJeworCQltYWNtZCA9IEVWUF9nZXRfZGlnZXN0YnluYW1lKG1hY2FsZyk7CisJCWlmICghbWFjbWQpCisJCQl7CisJCQlCSU9fcHJpbnRmKGJpb19lcnIsICJVbmtub3duIGRpZ2VzdCBhbGdvcml0aG0gJXNcbiIsIAorCQkJCQkJbWFjYWxnKTsKKwkJCX0KKwkJfQorCiAJaWYgKG1hY2l0ZXIgIT0gLTEpCi0JCVBLQ1MxMl9zZXRfbWFjKHAxMiwgbXBhc3MsIC0xLCBOVUxMLCAwLCBtYWNpdGVyLCBOVUxMKTsKKwkJUEtDUzEyX3NldF9tYWMocDEyLCBtcGFzcywgLTEsIE5VTEwsIDAsIG1hY2l0ZXIsIG1hY21kKTsKIAogI2lmZGVmIENSWVBUT19NREVCVUcKIAlDUllQVE9fcG9wX2luZm8oKTsKQEAgLTY5OSw3ICs2ODcsNyBAQAogI2VuZGlmCiAgICAgQklPX2ZyZWUoaW4pOwogICAgIEJJT19mcmVlX2FsbChvdXQpOwotICAgIGlmIChjYW5hbWVzKSBza19mcmVlKGNhbmFtZXMpOworICAgIGlmIChjYW5hbWVzKSBza19PUEVOU1NMX1NUUklOR19mcmVlKGNhbmFtZXMpOwogICAgIGlmKHBhc3NpbikgT1BFTlNTTF9mcmVlKHBhc3Npbik7CiAgICAgaWYocGFzc291dCkgT1BFTlNTTF9mcmVlKHBhc3NvdXQpOwogICAgIGFwcHNfc2h1dGRvd24oKTsKQEAgLTkzNSw3ICs5MjMsNyBAQAogCQkJYXYgPSBza19BU04xX1RZUEVfdmFsdWUoYXR0ci0+dmFsdWUuc2V0LCAwKTsKIAkJCXN3aXRjaChhdi0+dHlwZSkgewogCQkJCWNhc2UgVl9BU04xX0JNUFNUUklORzoKLSAgICAgICAgCQkJdmFsdWUgPSB1bmkyYXNjKGF2LT52YWx1ZS5ibXBzdHJpbmctPmRhdGEsCisgICAgICAgIAkJCXZhbHVlID0gT1BFTlNTTF91bmkyYXNjKGF2LT52YWx1ZS5ibXBzdHJpbmctPmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkgICAgICAgYXYtPnZhbHVlLmJtcHN0cmluZy0+bGVuZ3RoKTsKIAkJCQlCSU9fcHJpbnRmKG91dCwgIiVzXG4iLCB2YWx1ZSk7CiAJCQkJT1BFTlNTTF9mcmVlKHZhbHVlKTsKQEAgLTk2OCw0ICs5NTYsMjIgQEAKIAlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIEJJT19wcmludGYgKG91dCwgIiUwMlggIiwgYnVmW2ldKTsKIH0KIAorc3RhdGljIGludCBzZXRfcGJlKEJJTyAqZXJyLCBpbnQgKnBwYmUsIGNvbnN0IGNoYXIgKnN0cikKKwl7CisJaWYgKCFzdHIpCisJCXJldHVybiAwOworCWlmICghc3RyY21wKHN0ciwgIk5PTkUiKSkKKwkJeworCQkqcHBiZSA9IC0xOworCQlyZXR1cm4gMTsKKwkJfQorCSpwcGJlPU9CSl90eHQybmlkKHN0cik7CisJaWYgKCpwcGJlID09IE5JRF91bmRlZikKKwkJeworCQlCSU9fcHJpbnRmKGJpb19lcnIsICJVbmtub3duIFBCRSBhbGdvcml0aG0gJXNcbiIsIHN0cik7CisJCXJldHVybiAwOworCQl9CisJcmV0dXJuIDE7CisJfQorCQkJCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FwcHMvcGtjczcuYyBiL2FwcHMvcGtjczcuYwppbmRleCBkYTRkYmU3Li44NmQzMWI5IDEwMDY0NAotLS0gYS9hcHBzL3BrY3M3LmMKKysrIGIvYXBwcy9wa2NzNy5jCkBAIC05MCw3ICs5MCw3IEBACiAJQklPICppbj1OVUxMLCpvdXQ9TlVMTDsKIAlpbnQgaW5mb3JtYXQsb3V0Zm9ybWF0OwogCWNoYXIgKmluZmlsZSwqb3V0ZmlsZSwqcHJvZzsKLQlpbnQgcHJpbnRfY2VydHM9MCx0ZXh0PTAsbm9vdXQ9MDsKKwlpbnQgcHJpbnRfY2VydHM9MCx0ZXh0PTAsbm9vdXQ9MCxwN19wcmludD0wOwogCWludCByZXQ9MTsKICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKIAljaGFyICplbmdpbmU9TlVMTDsKQEAgLTEzOSw2ICsxMzksOCBAQAogCQkJbm9vdXQ9MTsKIAkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCItdGV4dCIpID09IDApCiAJCQl0ZXh0PTE7CisJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiLXByaW50IikgPT0gMCkKKwkJCXA3X3ByaW50PTE7CiAJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiLXByaW50X2NlcnRzIikgPT0gMCkKIAkJCXByaW50X2NlcnRzPTE7CiAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCkBAIC0yMzgsNiArMjQwLDkgQEAKIAkJCX0KIAkJfQogCisJaWYgKHA3X3ByaW50KQorCQlQS0NTN19wcmludF9jdHgob3V0LCBwNywgMCwgTlVMTCk7CisKIAlpZiAocHJpbnRfY2VydHMpCiAJCXsKIAkJU1RBQ0tfT0YoWDUwOSkgKmNlcnRzPU5VTEw7CmRpZmYgLS1naXQgYS9hcHBzL3BrY3M4LmMgYi9hcHBzL3BrY3M4LmMKaW5kZXggOTYzM2ExNC4uN2VkZWIxNyAxMDA2NDQKLS0tIGEvYXBwcy9wa2NzOC5jCisrKyBiL2FwcHMvcGtjczguYwpAQCAtODAsMTEgKzgwLDEyIEBACiAJaW50IGluZm9ybWF0LCBvdXRmb3JtYXQ7CiAJaW50IHA4X2Jyb2tlbiA9IFBLQ1M4X09LOwogCWludCBub2NyeXB0ID0gMDsKLQlYNTA5X1NJRyAqcDg7Ci0JUEtDUzhfUFJJVl9LRVlfSU5GTyAqcDhpbmY7CisJWDUwOV9TSUcgKnA4ID0gTlVMTDsKKwlQS0NTOF9QUklWX0tFWV9JTkZPICpwOGluZiA9IE5VTEw7CiAJRVZQX1BLRVkgKnBrZXk9TlVMTDsKIAljaGFyIHBhc3NbNTBdLCAqcGFzc2luID0gTlVMTCwgKnBhc3NvdXQgPSBOVUxMLCAqcDhwYXNzID0gTlVMTDsKIAlpbnQgYmFkYXJnID0gMDsKKwlpbnQgcmV0ID0gMTsKICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKIAljaGFyICplbmdpbmU9TlVMTDsKICNlbmRpZgpAQCAtMjI1LDcgKzIyNiw3IEBACiAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCiAJCUJJT19wcmludGYoYmlvX2VyciwiIC1lbmdpbmUgZSAgICAgICB1c2UgZW5naW5lIGUsIHBvc3NpYmx5IGEgaGFyZHdhcmUgZGV2aWNlLlxuIik7CiAjZW5kaWYKLQkJcmV0dXJuIDE7CisJCWdvdG8gZW5kOwogCQl9CiAKICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKQEAgLTIzNSw3ICsyMzYsNyBAQAogCWlmICghYXBwX3Bhc3N3ZChiaW9fZXJyLCBwYXNzYXJnaW4sIHBhc3NhcmdvdXQsICZwYXNzaW4sICZwYXNzb3V0KSkKIAkJewogCQlCSU9fcHJpbnRmKGJpb19lcnIsICJFcnJvciBnZXR0aW5nIHBhc3N3b3Jkc1xuIik7Ci0JCXJldHVybiAxOworCQlnb3RvIGVuZDsKIAkJfQogCiAJaWYgKChwYmVfbmlkID09IC0xKSAmJiAhY2lwaGVyKQpAQCAtMjQ3LDcgKzI0OCw3IEBACiAJCQl7CiAJCQlCSU9fcHJpbnRmKGJpb19lcnIsCiAJCQkJICJDYW4ndCBvcGVuIGlucHV0IGZpbGUgJXNcbiIsIGluZmlsZSk7Ci0JCQlyZXR1cm4gKDEpOworCQkJZ290byBlbmQ7CiAJCQl9CiAJCX0KIAllbHNlCkBAIC0yNTksNyArMjYwLDcgQEAKIAkJCXsKIAkJCUJJT19wcmludGYoYmlvX2VyciwKIAkJCQkgIkNhbid0IG9wZW4gb3V0cHV0IGZpbGUgJXNcbiIsIG91dGZpbGUpOwotCQkJcmV0dXJuICgxKTsKKwkJCWdvdG8gZW5kOwogCQkJfQogCQl9CiAJZWxzZQpAQCAtMjc0LDIxICsyNzUsMTUgQEAKIAkJfQogCWlmICh0b3BrOCkKIAkJewotCQlCSU9fZnJlZShpbik7IC8qIE5vdCBuZWVkZWQgaW4gdGhpcyBzZWN0aW9uICovCiAJCXBrZXkgPSBsb2FkX2tleShiaW9fZXJyLCBpbmZpbGUsIGluZm9ybWF0LCAxLAogCQkJcGFzc2luLCBlLCAia2V5Iik7CiAJCWlmICghcGtleSkKLQkJCXsKLQkJCUJJT19mcmVlX2FsbChvdXQpOwotCQkJcmV0dXJuIDE7Ci0JCQl9CisJCQlnb3RvIGVuZDsKIAkJaWYgKCEocDhpbmYgPSBFVlBfUEtFWTJQS0NTOF9icm9rZW4ocGtleSwgcDhfYnJva2VuKSkpCiAJCQl7CiAJCQlCSU9fcHJpbnRmKGJpb19lcnIsICJFcnJvciBjb252ZXJ0aW5nIGtleVxuIik7CiAJCQlFUlJfcHJpbnRfZXJyb3JzKGJpb19lcnIpOwotCQkJRVZQX1BLRVlfZnJlZShwa2V5KTsKLQkJCUJJT19mcmVlX2FsbChvdXQpOwotCQkJcmV0dXJuIDE7CisJCQlnb3RvIGVuZDsKIAkJCX0KIAkJaWYgKG5vY3J5cHQpCiAJCQl7CkBAIC0yOTksMTAgKzI5NCw3IEBACiAJCQllbHNlCiAJCQkJewogCQkJCUJJT19wcmludGYoYmlvX2VyciwgIkJhZCBmb3JtYXQgc3BlY2lmaWVkIGZvciBrZXlcbiIpOwotCQkJCVBLQ1M4X1BSSVZfS0VZX0lORk9fZnJlZShwOGluZik7Ci0JCQkJRVZQX1BLRVlfZnJlZShwa2V5KTsKLQkJCQlCSU9fZnJlZV9hbGwob3V0KTsKLQkJCQlyZXR1cm4gKDEpOworCQkJCWdvdG8gZW5kOwogCQkJCX0KIAkJCX0KIAkJZWxzZQpAQCAtMzEzLDEyICszMDUsNyBAQAogCQkJCXsKIAkJCQlwOHBhc3MgPSBwYXNzOwogCQkJCWlmIChFVlBfcmVhZF9wd19zdHJpbmcocGFzcywgc2l6ZW9mIHBhc3MsICJFbnRlciBFbmNyeXB0aW9uIFBhc3N3b3JkOiIsIDEpKQotCQkJCQl7Ci0JCQkJCVBLQ1M4X1BSSVZfS0VZX0lORk9fZnJlZShwOGluZik7Ci0JCQkJCUVWUF9QS0VZX2ZyZWUocGtleSk7Ci0JCQkJCUJJT19mcmVlX2FsbChvdXQpOwotCQkJCQlyZXR1cm4gKDEpOwotCQkJCQl9CisJCQkJCWdvdG8gZW5kOwogCQkJCX0KIAkJCWFwcF9SQU5EX2xvYWRfZmlsZShOVUxMLCBiaW9fZXJyLCAwKTsKIAkJCWlmICghKHA4ID0gUEtDUzhfZW5jcnlwdChwYmVfbmlkLCBjaXBoZXIsCkBAIC0zMjcsMTAgKzMxNCw3IEBACiAJCQkJewogCQkJCUJJT19wcmludGYoYmlvX2VyciwgIkVycm9yIGVuY3J5cHRpbmcga2V5XG4iKTsKIAkJCQlFUlJfcHJpbnRfZXJyb3JzKGJpb19lcnIpOwotCQkJCVBLQ1M4X1BSSVZfS0VZX0lORk9fZnJlZShwOGluZik7Ci0JCQkJRVZQX1BLRVlfZnJlZShwa2V5KTsKLQkJCQlCSU9fZnJlZV9hbGwob3V0KTsKLQkJCQlyZXR1cm4gKDEpOworCQkJCWdvdG8gZW5kOwogCQkJCX0KIAkJCWFwcF9SQU5EX3dyaXRlX2ZpbGUoTlVMTCwgYmlvX2Vycik7CiAJCQlpZiAob3V0Zm9ybWF0ID09IEZPUk1BVF9QRU0pIApAQCAtMzQwLDIyICszMjQsMTIgQEAKIAkJCWVsc2UKIAkJCQl7CiAJCQkJQklPX3ByaW50ZihiaW9fZXJyLCAiQmFkIGZvcm1hdCBzcGVjaWZpZWQgZm9yIGtleVxuIik7Ci0JCQkJUEtDUzhfUFJJVl9LRVlfSU5GT19mcmVlKHA4aW5mKTsKLQkJCQlFVlBfUEtFWV9mcmVlKHBrZXkpOwotCQkJCUJJT19mcmVlX2FsbChvdXQpOwotCQkJCXJldHVybiAoMSk7CisJCQkJZ290byBlbmQ7CiAJCQkJfQotCQkJWDUwOV9TSUdfZnJlZShwOCk7CiAJCQl9CiAKLQkJUEtDUzhfUFJJVl9LRVlfSU5GT19mcmVlIChwOGluZik7Ci0JCUVWUF9QS0VZX2ZyZWUocGtleSk7Ci0JCUJJT19mcmVlX2FsbChvdXQpOwotCQlpZiAocGFzc2luKQotCQkJT1BFTlNTTF9mcmVlKHBhc3Npbik7Ci0JCWlmIChwYXNzb3V0KQotCQkJT1BFTlNTTF9mcmVlKHBhc3NvdXQpOwotCQlyZXR1cm4gKDApOworCQlyZXQgPSAwOworCQlnb3RvIGVuZDsKIAkJfQogCiAJaWYgKG5vY3J5cHQpCkBAIC0zNjcsNyArMzQxLDcgQEAKIAkJZWxzZQogCQkJewogCQkJQklPX3ByaW50ZihiaW9fZXJyLCAiQmFkIGZvcm1hdCBzcGVjaWZpZWQgZm9yIGtleVxuIik7Ci0JCQlyZXR1cm4gKDEpOworCQkJZ290byBlbmQ7CiAJCQl9CiAJCX0KIAllbHNlCkBAIC0zNzksMTQgKzM1MywxNCBAQAogCQllbHNlCiAJCQl7CiAJCQlCSU9fcHJpbnRmKGJpb19lcnIsICJCYWQgZm9ybWF0IHNwZWNpZmllZCBmb3Iga2V5XG4iKTsKLQkJCXJldHVybiAoMSk7CisJCQlnb3RvIGVuZDsKIAkJCX0KIAogCQlpZiAoIXA4KQogCQkJewogCQkJQklPX3ByaW50ZiAoYmlvX2VyciwgIkVycm9yIHJlYWRpbmcga2V5XG4iKTsKIAkJCUVSUl9wcmludF9lcnJvcnMoYmlvX2Vycik7Ci0JCQlyZXR1cm4gKDEpOworCQkJZ290byBlbmQ7CiAJCQl9CiAJCWlmIChwYXNzaW4pCiAJCQlwOHBhc3MgPSBwYXNzaW47CkBAIC0zOTYsMjEgKzM3MCwyMCBAQAogCQkJRVZQX3JlYWRfcHdfc3RyaW5nKHBhc3MsIHNpemVvZiBwYXNzLCAiRW50ZXIgUGFzc3dvcmQ6IiwgMCk7CiAJCQl9CiAJCXA4aW5mID0gUEtDUzhfZGVjcnlwdChwOCwgcDhwYXNzLCBzdHJsZW4ocDhwYXNzKSk7Ci0JCVg1MDlfU0lHX2ZyZWUocDgpOwogCQl9CiAKIAlpZiAoIXA4aW5mKQogCQl7CiAJCUJJT19wcmludGYoYmlvX2VyciwgIkVycm9yIGRlY3J5cHRpbmcga2V5XG4iKTsKIAkJRVJSX3ByaW50X2Vycm9ycyhiaW9fZXJyKTsKLQkJcmV0dXJuICgxKTsKKwkJZ290byBlbmQ7CiAJCX0KIAogCWlmICghKHBrZXkgPSBFVlBfUEtDUzgyUEtFWShwOGluZikpKQogCQl7CiAJCUJJT19wcmludGYoYmlvX2VyciwgIkVycm9yIGNvbnZlcnRpbmcga2V5XG4iKTsKIAkJRVJSX3ByaW50X2Vycm9ycyhiaW9fZXJyKTsKLQkJcmV0dXJuICgxKTsKKwkJZ290byBlbmQ7CiAJCX0KIAkKIAlpZiAocDhpbmYtPmJyb2tlbikKQEAgLTQzMCwxMyArNDAzLDE2IEBACiAJCQlCSU9fcHJpbnRmKGJpb19lcnIsICJEU0EgcHVibGljIGtleSBpbmNsdWRlIGluIFByaXZhdGVLZXlcbiIpOwogCQkJYnJlYWs7CiAKKwkJCWNhc2UgUEtDUzhfTkVHX1BSSVZLRVk6CisJCQlCSU9fcHJpbnRmKGJpb19lcnIsICJEU0EgcHJpdmF0ZSBrZXkgdmFsdWUgaXMgbmVnYXRpdmVcbiIpOworCQkJYnJlYWs7CisKIAkJCWRlZmF1bHQ6CiAJCQlCSU9fcHJpbnRmKGJpb19lcnIsICJVbmtub3duIGJyb2tlbiB0eXBlXG4iKTsKIAkJCWJyZWFrOwogCQl9CiAJfQogCQotCVBLQ1M4X1BSSVZfS0VZX0lORk9fZnJlZShwOGluZik7CiAJaWYgKG91dGZvcm1hdCA9PSBGT1JNQVRfUEVNKSAKIAkJUEVNX3dyaXRlX2Jpb19Qcml2YXRlS2V5KG91dCwgcGtleSwgTlVMTCwgTlVMTCwgMCwgTlVMTCwgcGFzc291dCk7CiAJZWxzZSBpZiAob3V0Zm9ybWF0ID09IEZPUk1BVF9BU04xKQpAQCAtNDQ0LDEwICs0MjAsMTMgQEAKIAllbHNlCiAJCXsKIAkJQklPX3ByaW50ZihiaW9fZXJyLCAiQmFkIGZvcm1hdCBzcGVjaWZpZWQgZm9yIGtleVxuIik7Ci0JCQlyZXR1cm4gKDEpOworCQkJZ290byBlbmQ7CiAJCX0KKwlyZXQgPSAwOwogCiAJZW5kOgorCVg1MDlfU0lHX2ZyZWUocDgpOworCVBLQ1M4X1BSSVZfS0VZX0lORk9fZnJlZShwOGluZik7CiAJRVZQX1BLRVlfZnJlZShwa2V5KTsKIAlCSU9fZnJlZV9hbGwob3V0KTsKIAlCSU9fZnJlZShpbik7CkBAIC00NTYsNSArNDM1LDUgQEAKIAlpZiAocGFzc291dCkKIAkJT1BFTlNTTF9mcmVlKHBhc3NvdXQpOwogCi0JcmV0dXJuICgwKTsKKwlyZXR1cm4gcmV0OwogCX0KZGlmZiAtLWdpdCBhL2FwcHMvcHJpbWUuYyBiL2FwcHMvcHJpbWUuYwppbmRleCBhZjJmZWQxLi5mMWFhZWY4IDEwMDY0NAotLS0gYS9hcHBzL3ByaW1lLmMKKysrIGIvYXBwcy9wcmltZS5jCkBAIC02Miw2ICs2Miw5IEBACiAgICAgewogICAgIGludCBoZXg9MDsKICAgICBpbnQgY2hlY2tzPTIwOworICAgIGludCBnZW5lcmF0ZT0wOworICAgIGludCBiaXRzPTA7CisgICAgaW50IHNhZmU9MDsKICAgICBCSUdOVU0gKmJuPU5VTEw7CiAgICAgQklPICpiaW9fb3V0OwogCkBAIC03Nyw2ICs4MCwxNSBAQAogCXsKIAlpZighc3RyY21wKCphcmd2LCItaGV4IikpCiAJICAgIGhleD0xOworCWVsc2UgaWYoIXN0cmNtcCgqYXJndiwiLWdlbmVyYXRlIikpCisJICAgIGdlbmVyYXRlPTE7CisJZWxzZSBpZighc3RyY21wKCphcmd2LCItYml0cyIpKQorCSAgICBpZigtLWFyZ2MgPCAxKQorCQlnb3RvIGJhZDsKKwkgICAgZWxzZQorCQliaXRzPWF0b2koKisrYXJndik7CisJZWxzZSBpZighc3RyY21wKCphcmd2LCItc2FmZSIpKQorCSAgICBzYWZlPTE7CiAJZWxzZSBpZighc3RyY21wKCphcmd2LCItY2hlY2tzIikpCiAJICAgIGlmKC0tYXJnYyA8IDEpCiAJCWdvdG8gYmFkOwpAQCAtOTEsMTMgKzEwMywxMyBAQAogCSsrYXJndjsKIAl9CiAKLSAgICBpZiAoYXJndlswXSA9PSBOVUxMKQorICAgIGlmIChhcmd2WzBdID09IE5VTEwgJiYgIWdlbmVyYXRlKQogCXsKIAlCSU9fcHJpbnRmKGJpb19lcnIsIk5vIHByaW1lIHNwZWNpZmllZFxuIik7CiAJZ290byBiYWQ7CiAJfQogCi0gICBpZiAoKGJpb19vdXQ9QklPX25ldyhCSU9fc19maWxlKCkpKSAhPSBOVUxMKQorICAgIGlmICgoYmlvX291dD1CSU9fbmV3KEJJT19zX2ZpbGUoKSkpICE9IE5VTEwpCiAJewogCUJJT19zZXRfZnAoYmlvX291dCxzdGRvdXQsQklPX05PQ0xPU0UpOwogI2lmZGVmIE9QRU5TU0xfU1lTX1ZNUwpAQCAtMTA4LDE0ICsxMjAsMzIgQEAKICNlbmRpZgogCX0KIAotICAgIGlmKGhleCkKLQlCTl9oZXgyYm4oJmJuLGFyZ3ZbMF0pOwotICAgIGVsc2UKLQlCTl9kZWMyYm4oJmJuLGFyZ3ZbMF0pOworICAgIGlmKGdlbmVyYXRlKQorCXsKKwljaGFyICpzOwogCi0gICAgQk5fcHJpbnQoYmlvX291dCxibik7Ci0gICAgQklPX3ByaW50ZihiaW9fb3V0LCIgaXMgJXNwcmltZVxuIiwKLQkgICAgICAgQk5faXNfcHJpbWVfZXgoYm4sY2hlY2tzLE5VTEwsTlVMTCkgPyAiIiA6ICJub3QgIik7CisJaWYoIWJpdHMpCisJICAgIHsKKwkgICAgQklPX3ByaW50ZihiaW9fZXJyLCJTcGVjaWZpeSB0aGUgbnVtYmVyIG9mIGJpdHMuXG4iKTsKKwkgICAgcmV0dXJuIDE7CisJICAgIH0KKwlibj1CTl9uZXcoKTsKKwlCTl9nZW5lcmF0ZV9wcmltZV9leChibixiaXRzLHNhZmUsTlVMTCxOVUxMLE5VTEwpOworCXM9aGV4ID8gQk5fYm4yaGV4KGJuKSA6IEJOX2JuMmRlYyhibik7CisJQklPX3ByaW50ZihiaW9fb3V0LCIlc1xuIixzKTsKKwlPUEVOU1NMX2ZyZWUocyk7CisJfQorICAgIGVsc2UKKwl7CisJaWYoaGV4KQorCSAgICBCTl9oZXgyYm4oJmJuLGFyZ3ZbMF0pOworCWVsc2UKKwkgICAgQk5fZGVjMmJuKCZibixhcmd2WzBdKTsKKworCUJOX3ByaW50KGJpb19vdXQsYm4pOworCUJJT19wcmludGYoYmlvX291dCwiIGlzICVzcHJpbWVcbiIsCisJCSAgIEJOX2lzX3ByaW1lX2V4KGJuLGNoZWNrcyxOVUxMLE5VTEwpID8gIiIgOiAibm90ICIpOworCX0KIAogICAgIEJOX2ZyZWUoYm4pOwogICAgIEJJT19mcmVlX2FsbChiaW9fb3V0KTsKZGlmZiAtLWdpdCBhL2FwcHMvcHJvZ3MuaCBiL2FwcHMvcHJvZ3MuaAppbmRleCA0ZTdkMzJhLi40MGJmY2I1IDEwMDY0NAotLS0gYS9hcHBzL3Byb2dzLmgKKysrIGIvYXBwcy9wcm9ncy5oCkBAIC0yMiw5ICsyMiw4IEBACiBleHRlcm4gaW50IHg1MDlfbWFpbihpbnQgYXJnYyxjaGFyICphcmd2W10pOwogZXh0ZXJuIGludCBnZW5yc2FfbWFpbihpbnQgYXJnYyxjaGFyICphcmd2W10pOwogZXh0ZXJuIGludCBnZW5kc2FfbWFpbihpbnQgYXJnYyxjaGFyICphcmd2W10pOwotI2lmIDAgLyogQU5EUk9JRCAqLworZXh0ZXJuIGludCBnZW5wa2V5X21haW4oaW50IGFyZ2MsY2hhciAqYXJndltdKTsKIGV4dGVybiBpbnQgc19zZXJ2ZXJfbWFpbihpbnQgYXJnYyxjaGFyICphcmd2W10pOwotI2VuZGlmCiBleHRlcm4gaW50IHNfY2xpZW50X21haW4oaW50IGFyZ2MsY2hhciAqYXJndltdKTsKIGV4dGVybiBpbnQgc3BlZWRfbWFpbihpbnQgYXJnYyxjaGFyICphcmd2W10pOwogZXh0ZXJuIGludCBzX3RpbWVfbWFpbihpbnQgYXJnYyxjaGFyICphcmd2W10pOwpAQCAtMzcsNiArMzYsOSBAQAogZXh0ZXJuIGludCBuc2VxX21haW4oaW50IGFyZ2MsY2hhciAqYXJndltdKTsKIGV4dGVybiBpbnQgcGtjczEyX21haW4oaW50IGFyZ2MsY2hhciAqYXJndltdKTsKIGV4dGVybiBpbnQgcGtjczhfbWFpbihpbnQgYXJnYyxjaGFyICphcmd2W10pOworZXh0ZXJuIGludCBwa2V5X21haW4oaW50IGFyZ2MsY2hhciAqYXJndltdKTsKK2V4dGVybiBpbnQgcGtleXBhcmFtX21haW4oaW50IGFyZ2MsY2hhciAqYXJndltdKTsKK2V4dGVybiBpbnQgcGtleXV0bF9tYWluKGludCBhcmdjLGNoYXIgKmFyZ3ZbXSk7CiBleHRlcm4gaW50IHNwa2FjX21haW4oaW50IGFyZ2MsY2hhciAqYXJndltdKTsKIGV4dGVybiBpbnQgc21pbWVfbWFpbihpbnQgYXJnYyxjaGFyICphcmd2W10pOwogZXh0ZXJuIGludCByYW5kX21haW4oaW50IGFyZ2MsY2hhciAqYXJndltdKTsKQEAgLTQ1LDE2ICs0NywyMSBAQAogZXh0ZXJuIGludCBvY3NwX21haW4oaW50IGFyZ2MsY2hhciAqYXJndltdKTsKICNlbmRpZgogZXh0ZXJuIGludCBwcmltZV9tYWluKGludCBhcmdjLGNoYXIgKmFyZ3ZbXSk7CitleHRlcm4gaW50IHRzX21haW4oaW50IGFyZ2MsY2hhciAqYXJndltdKTsKIAogI2RlZmluZSBGVU5DX1RZUEVfR0VORVJBTAkxCiAjZGVmaW5lIEZVTkNfVFlQRV9NRAkJMgogI2RlZmluZSBGVU5DX1RZUEVfQ0lQSEVSCTMKKyNkZWZpbmUgRlVOQ19UWVBFX1BLRVkJCTQKKyNkZWZpbmUgRlVOQ19UWVBFX01EX0FMRwk1CisjZGVmaW5lIEZVTkNfVFlQRV9DSVBIRVJfQUxHCTYKIAogdHlwZWRlZiBzdHJ1Y3QgewogCWludCB0eXBlOwogCWNvbnN0IGNoYXIgKm5hbWU7CiAJaW50ICgqZnVuYykoaW50IGFyZ2MsY2hhciAqYXJndltdKTsKIAl9IEZVTkNUSU9OOworREVDTEFSRV9MSEFTSF9PRihGVU5DVElPTik7CiAKIEZVTkNUSU9OIGZ1bmN0aW9uc1tdID0gewogCXtGVU5DX1RZUEVfR0VORVJBTCwidmVyaWZ5Iix2ZXJpZnlfbWFpbn0sCkBAIC0xMDAsNiArMTA3LDcgQEAKICNpZm5kZWYgT1BFTlNTTF9OT19EU0EKIAl7RlVOQ19UWVBFX0dFTkVSQUwsImdlbmRzYSIsZ2VuZHNhX21haW59LAogI2VuZGlmCisJe0ZVTkNfVFlQRV9HRU5FUkFMLCJnZW5wa2V5IixnZW5wa2V5X21haW59LAogI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fU09DSykgJiYgIShkZWZpbmVkKE9QRU5TU0xfTk9fU1NMMikgJiYgZGVmaW5lZChPUEVOU1NMX05PX1NTTDMpKQogI2lmIDAgLyogQU5EUk9JRCAqLwogICAgICAgICB7RlVOQ19UWVBFX0dFTkVSQUwsInNfc2VydmVyIixzX3NlcnZlcl9tYWlufSwKQEAgLTEyOSw2ICsxMzcsMTEgQEAKIAl7RlVOQ19UWVBFX0dFTkVSQUwsInBrY3MxMiIscGtjczEyX21haW59LAogI2VuZGlmCiAJe0ZVTkNfVFlQRV9HRU5FUkFMLCJwa2NzOCIscGtjczhfbWFpbn0sCisjaWYgMCAvKiBBTkRST0lEICovCisJe0ZVTkNfVFlQRV9HRU5FUkFMLCJwa2V5Iixwa2V5X21haW59LAorCXtGVU5DX1RZUEVfR0VORVJBTCwicGtleXBhcmFtIixwa2V5cGFyYW1fbWFpbn0sCisJe0ZVTkNfVFlQRV9HRU5FUkFMLCJwa2V5dXRsIixwa2V5dXRsX21haW59LAorI2VuZGlmCiAJe0ZVTkNfVFlQRV9HRU5FUkFMLCJzcGthYyIsc3BrYWNfbWFpbn0sCiAJe0ZVTkNfVFlQRV9HRU5FUkFMLCJzbWltZSIsc21pbWVfbWFpbn0sCiAJe0ZVTkNfVFlQRV9HRU5FUkFMLCJyYW5kIixyYW5kX21haW59LApAQCAtMTM5LDYgKzE1Miw5IEBACiAJe0ZVTkNfVFlQRV9HRU5FUkFMLCJvY3NwIixvY3NwX21haW59LAogI2VuZGlmCiAJe0ZVTkNfVFlQRV9HRU5FUkFMLCJwcmltZSIscHJpbWVfbWFpbn0sCisjaWYgMCAvKiBBTkRST0lEICovCisJe0ZVTkNfVFlQRV9HRU5FUkFMLCJ0cyIsdHNfbWFpbn0sCisjZW5kaWYKICNpZm5kZWYgT1BFTlNTTF9OT19NRDIKIAl7RlVOQ19UWVBFX01ELCJtZDIiLGRnc3RfbWFpbn0sCiAjZW5kaWYKQEAgLTE5Nyw2ICsyMTMsOSBAQAogCXtGVU5DX1RZUEVfQ0lQSEVSLCJjYW1lbGxpYS0yNTYtZWNiIixlbmNfbWFpbn0sCiAjZW5kaWYKIAl7RlVOQ19UWVBFX0NJUEhFUiwiYmFzZTY0IixlbmNfbWFpbn0sCisjaWZkZWYgWkxJQgorCXtGVU5DX1RZUEVfQ0lQSEVSLCJ6bGliIixlbmNfbWFpbn0sCisjZW5kaWYKICNpZm5kZWYgT1BFTlNTTF9OT19ERVMKIAl7RlVOQ19UWVBFX0NJUEhFUiwiZGVzIixlbmNfbWFpbn0sCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FwcHMvcHJvZ3MucGwgYi9hcHBzL3Byb2dzLnBsCmluZGV4IDY0NTQzMmMuLmRlNmZkZWEgMTAwNjQ0Ci0tLSBhL2FwcHMvcHJvZ3MucGwKKysrIGIvYXBwcy9wcm9ncy5wbApAQCAtMTMsMTIgKzEzLDE2IEBACiAjZGVmaW5lIEZVTkNfVFlQRV9HRU5FUkFMCTEKICNkZWZpbmUgRlVOQ19UWVBFX01ECQkyCiAjZGVmaW5lIEZVTkNfVFlQRV9DSVBIRVIJMworI2RlZmluZSBGVU5DX1RZUEVfUEtFWQkJNAorI2RlZmluZSBGVU5DX1RZUEVfTURfQUxHCTUKKyNkZWZpbmUgRlVOQ19UWVBFX0NJUEhFUl9BTEcJNgogCiB0eXBlZGVmIHN0cnVjdCB7CiAJaW50IHR5cGU7CiAJY29uc3QgY2hhciAqbmFtZTsKIAlpbnQgKCpmdW5jKShpbnQgYXJnYyxjaGFyICphcmd2W10pOwogCX0gRlVOQ1RJT047CitERUNMQVJFX0xIQVNIX09GKEZVTkNUSU9OKTsKIAogRlVOQ1RJT04gZnVuY3Rpb25zW10gPSB7CiBFT0YKQEAgLTQ1LDYgKzQ5LDggQEAKIAkJeyBwcmludCAiI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fREVTKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQTEpXG4ke3N0cn0jZW5kaWZcbiI7IH0KIAllbHNpZiAoICgkXyA9fiAvXmNtcyQvKSkKIAkJeyBwcmludCAiI2lmbmRlZiBPUEVOU1NMX05PX0NNU1xuJHtzdHJ9I2VuZGlmXG4iOyB9CisJZWxzaWYgKCAoJF8gPX4gL15vY3NwJC8pKQorCQl7IHByaW50ICIjaWZuZGVmIE9QRU5TU0xfTk9fT0NTUFxuJHtzdHJ9I2VuZGlmXG4iOyB9CiAJZWxzZQogCQl7IHByaW50ICRzdHI7IH0KIAl9CkBAIC02Miw3ICs2OCw3IEBACiAJImNhbWVsbGlhLTEyOC1jYmMiLCAiY2FtZWxsaWEtMTI4LWVjYiIsCiAJImNhbWVsbGlhLTE5Mi1jYmMiLCAiY2FtZWxsaWEtMTkyLWVjYiIsCiAJImNhbWVsbGlhLTI1Ni1jYmMiLCAiY2FtZWxsaWEtMjU2LWVjYiIsCi0JImJhc2U2NCIsCisJImJhc2U2NCIsICJ6bGliIiwKIAkiZGVzIiwgImRlczMiLCAiZGVzeCIsICJpZGVhIiwgInNlZWQiLCAicmM0IiwgInJjNC00MCIsCiAJInJjMiIsICJiZiIsICJjYXN0IiwgInJjNSIsCiAJImRlcy1lY2IiLCAiZGVzLWVkZSIsICAgICJkZXMtZWRlMyIsCkBAIC04OSw2ICs5NSw3IEBACiAJZWxzaWYgKCRfID1+IC9iZi8pICAgeyAkdD0iI2lmbmRlZiBPUEVOU1NMX05PX0JGXG4ke3R9I2VuZGlmXG4iOyB9CiAJZWxzaWYgKCRfID1+IC9jYXN0LykgeyAkdD0iI2lmbmRlZiBPUEVOU1NMX05PX0NBU1RcbiR7dH0jZW5kaWZcbiI7IH0KIAllbHNpZiAoJF8gPX4gL3JjNS8pICB7ICR0PSIjaWZuZGVmIE9QRU5TU0xfTk9fUkM1XG4ke3R9I2VuZGlmXG4iOyB9CisJZWxzaWYgKCRfID1+IC96bGliLykgIHsgJHQ9IiNpZmRlZiBaTElCXG4ke3R9I2VuZGlmXG4iOyB9CiAJcHJpbnQgJHQ7CiAJfQogCmRpZmYgLS1naXQgYS9hcHBzL3JlcS5jIGIvYXBwcy9yZXEuYwppbmRleCAzMTQxOTdkLi44MjBjZDE4IDEwMDY0NAotLS0gYS9hcHBzL3JlcS5jCisrKyBiL2FwcHMvcmVxLmMKQEAgLTE0MSwzOSArMTQxLDMzIEBACiAJCQkJaW50IG5fbWF4LCB1bnNpZ25lZCBsb25nIGNodHlwZSk7CiBzdGF0aWMgaW50IGFkZF9ETl9vYmplY3QoWDUwOV9OQU1FICpuLCBjaGFyICp0ZXh0LCBjb25zdCBjaGFyICpkZWYsIGNoYXIgKnZhbHVlLAogCWludCBuaWQsaW50IG5fbWluLGludCBuX21heCwgdW5zaWduZWQgbG9uZyBjaHR5cGUsIGludCBtdmFsKTsKLSNpZm5kZWYgT1BFTlNTTF9OT19SU0EKLXN0YXRpYyBpbnQgTVNfQ0FMTEJBQ0sgcmVxX2NiKGludCBwLCBpbnQgbiwgQk5fR0VOQ0IgKmNiKTsKLSNlbmRpZgorc3RhdGljIGludCBnZW5wa2V5X2NiKEVWUF9QS0VZX0NUWCAqY3R4KTsKIHN0YXRpYyBpbnQgcmVxX2NoZWNrX2xlbihpbnQgbGVuLGludCBuX21pbixpbnQgbl9tYXgpOwogc3RhdGljIGludCBjaGVja19lbmQoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICplbmQpOworc3RhdGljIEVWUF9QS0VZX0NUWCAqc2V0X2tleWdlbl9jdHgoQklPICplcnIsIGNvbnN0IGNoYXIgKmdzdHIsIGludCAqcGtleV90eXBlLAorCQkJCQlsb25nICpwa2V5bGVuLCBjaGFyICoqcGFsZ25hbSwKKwkJCQkJRU5HSU5FICprZXlnZW5fZW5naW5lKTsKICNpZm5kZWYgTU9OT0xJVEgKIHN0YXRpYyBjaGFyICpkZWZhdWx0X2NvbmZpZ19maWxlPU5VTEw7CiAjZW5kaWYKIHN0YXRpYyBDT05GICpyZXFfY29uZj1OVUxMOwogc3RhdGljIGludCBiYXRjaD0wOwogCi0jZGVmaW5lIFRZUEVfUlNBCTEKLSNkZWZpbmUgVFlQRV9EU0EJMgotI2RlZmluZSBUWVBFX0RICQkzCi0jZGVmaW5lIFRZUEVfRUMJCTQKLQogaW50IE1BSU4oaW50LCBjaGFyICoqKTsKIAogaW50IE1BSU4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCXsKLQlFTkdJTkUgKmUgPSBOVUxMOwotI2lmbmRlZiBPUEVOU1NMX05PX0RTQQotCURTQSAqZHNhX3BhcmFtcz1OVUxMOwotI2VuZGlmCi0jaWZuZGVmIE9QRU5TU0xfTk9fRUNEU0EKLQlFQ19LRVkgKmVjX3BhcmFtcyA9IE5VTEw7Ci0jZW5kaWYKKwlFTkdJTkUgKmUgPSBOVUxMLCAqZ2VuX2VuZyA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyBubWZsYWcgPSAwLCByZXFmbGFnID0gMDsKIAlpbnQgZXg9MSx4NTA5PTAsZGF5cz0zMDsKIAlYNTA5ICp4NTA5c3M9TlVMTDsKIAlYNTA5X1JFUSAqcmVxPU5VTEw7CisJRVZQX1BLRVlfQ1RYICpnZW5jdHggPSBOVUxMOworCWNvbnN0IGNoYXIgKmtleWFsZyA9IE5VTEw7CisJY2hhciAqa2V5YWxnc3RyID0gTlVMTDsKKwlTVEFDS19PRihPUEVOU1NMX1NUUklORykgKnBrZXlvcHRzID0gTlVMTDsKIAlFVlBfUEtFWSAqcGtleT1OVUxMOwotCWludCBpPTAsYmFkb3BzPTAsbmV3cmVxPTAsdmVyYm9zZT0wLHBrZXlfdHlwZT1UWVBFX1JTQTsKKwlpbnQgaT0wLGJhZG9wcz0wLG5ld3JlcT0wLHZlcmJvc2U9MCxwa2V5X3R5cGU9LTE7CiAJbG9uZyBuZXdrZXkgPSAtMTsKIAlCSU8gKmluPU5VTEwsKm91dD1OVUxMOwogCWludCBpbmZvcm1hdCxvdXRmb3JtYXQsdmVyaWZ5PTAsbm9vdXQ9MCx0ZXh0PTAsa2V5Zm9ybT1GT1JNQVRfUEVNOwpAQCAtMTkzLDcgKzE4Nyw3IEBACiAJY2hhciAqcDsKIAljaGFyICpzdWJqID0gTlVMTDsKIAlpbnQgbXVsdGlyZG4gPSAwOwotCWNvbnN0IEVWUF9NRCAqbWRfYWxnPU5VTEwsKmRpZ2VzdD1FVlBfc2hhMSgpOworCWNvbnN0IEVWUF9NRCAqbWRfYWxnPU5VTEwsKmRpZ2VzdD1OVUxMOwogCXVuc2lnbmVkIGxvbmcgY2h0eXBlID0gTUJTVFJJTkdfQVNDOwogI2lmbmRlZiBNT05PTElUSAogCWNoYXIgKnRvX2ZyZWU7CkBAIC0yMzYsNiArMjMwLDE2IEBACiAJCQlpZiAoLS1hcmdjIDwgMSkgZ290byBiYWQ7CiAJCQllbmdpbmU9ICooKythcmd2KTsKIAkJCX0KKwkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCIta2V5Z2VuX2VuZ2luZSIpID09IDApCisJCQl7CisJCQlpZiAoLS1hcmdjIDwgMSkgZ290byBiYWQ7CisJCQlnZW5fZW5nID0gRU5HSU5FX2J5X2lkKCooKythcmd2KSk7CisJCQlpZiAoZ2VuX2VuZyA9PSBOVUxMKQorCQkJCXsKKwkJCQlCSU9fcHJpbnRmKGJpb19lcnIsICJDYW4ndCBmaW5kIGtleWdlbiBlbmdpbmUgJXNcbiIsICphcmd2KTsKKwkJCQlnb3RvIGVuZDsKKwkJCQl9CisJCQl9CiAjZW5kaWYKIAkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCIta2V5IikgPT0gMCkKIAkJCXsKQEAgLTI5MiwxMjYgKzI5NiwyMCBAQAogCQkJfQogCQllbHNlIGlmIChzdHJjbXAoKmFyZ3YsIi1uZXdrZXkiKSA9PSAwKQogCQkJewotCQkJaW50IGlzX251bWVyaWM7Ci0KLQkJCWlmICgtLWFyZ2MgPCAxKSBnb3RvIGJhZDsKLQkJCXA9ICooKythcmd2KTsKLQkJCWlzX251bWVyaWMgPSBwWzBdID49ICcwJyAmJiBwWzBdIDw9ICc5JzsKLQkJCWlmIChzdHJuY21wKCJyc2E6IixwLDQpID09IDAgfHwgaXNfbnVtZXJpYykKLQkJCQl7Ci0JCQkJcGtleV90eXBlPVRZUEVfUlNBOwotCQkJCWlmKCFpc19udW1lcmljKQotCQkJCSAgICBwKz00OwotCQkJCW5ld2tleT0gYXRvaShwKTsKLQkJCQl9Ci0JCQllbHNlCi0jaWZuZGVmIE9QRU5TU0xfTk9fRFNBCi0JCQkJaWYgKHN0cm5jbXAoImRzYToiLHAsNCkgPT0gMCkKLQkJCQl7Ci0JCQkJWDUwOSAqeHRtcD1OVUxMOwotCQkJCUVWUF9QS0VZICpkdG1wOwotCi0JCQkJcGtleV90eXBlPVRZUEVfRFNBOwotCQkJCXArPTQ7Ci0JCQkJaWYgKChpbj1CSU9fbmV3X2ZpbGUocCwiciIpKSA9PSBOVUxMKQotCQkJCQl7Ci0JCQkJCXBlcnJvcihwKTsKLQkJCQkJZ290byBlbmQ7Ci0JCQkJCX0KLQkJCQlpZiAoKGRzYV9wYXJhbXM9UEVNX3JlYWRfYmlvX0RTQXBhcmFtcyhpbixOVUxMLE5VTEwsTlVMTCkpID09IE5VTEwpCi0JCQkJCXsKLQkJCQkJRVJSX2NsZWFyX2Vycm9yKCk7Ci0JCQkJCSh2b2lkKUJJT19yZXNldChpbik7Ci0JCQkJCWlmICgoeHRtcD1QRU1fcmVhZF9iaW9fWDUwOShpbixOVUxMLE5VTEwsTlVMTCkpID09IE5VTEwpCi0JCQkJCQl7Ci0JCQkJCQlCSU9fcHJpbnRmKGJpb19lcnIsInVuYWJsZSB0byBsb2FkIERTQSBwYXJhbWV0ZXJzIGZyb20gZmlsZVxuIik7Ci0JCQkJCQlnb3RvIGVuZDsKLQkJCQkJCX0KLQotCQkJCQlpZiAoKGR0bXA9WDUwOV9nZXRfcHVia2V5KHh0bXApKSA9PSBOVUxMKSBnb3RvIGVuZDsKLQkJCQkJaWYgKGR0bXAtPnR5cGUgPT0gRVZQX1BLRVlfRFNBKQotCQkJCQkJZHNhX3BhcmFtcz1EU0FwYXJhbXNfZHVwKGR0bXAtPnBrZXkuZHNhKTsKLQkJCQkJRVZQX1BLRVlfZnJlZShkdG1wKTsKLQkJCQkJWDUwOV9mcmVlKHh0bXApOwotCQkJCQlpZiAoZHNhX3BhcmFtcyA9PSBOVUxMKQotCQkJCQkJewotCQkJCQkJQklPX3ByaW50ZihiaW9fZXJyLCJDZXJ0aWZpY2F0ZSBkb2VzIG5vdCBjb250YWluIERTQSBwYXJhbWV0ZXJzXG4iKTsKLQkJCQkJCWdvdG8gZW5kOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJQklPX2ZyZWUoaW4pOwotCQkJCWluPU5VTEw7Ci0JCQkJbmV3a2V5PUJOX251bV9iaXRzKGRzYV9wYXJhbXMtPnApOwotCQkJCX0KLQkJCWVsc2UgCi0jZW5kaWYKLSNpZm5kZWYgT1BFTlNTTF9OT19FQ0RTQQotCQkJCWlmIChzdHJuY21wKCJlYzoiLHAsMykgPT0gMCkKLQkJCQl7Ci0JCQkJWDUwOSAqeHRtcD1OVUxMOwotCQkJCUVWUF9QS0VZICpkdG1wOwotCQkJCUVDX0dST1VQICpncm91cDsKLQotCQkJCXBrZXlfdHlwZT1UWVBFX0VDOwotCQkJCXArPTM7Ci0JCQkJaWYgKChpbj1CSU9fbmV3X2ZpbGUocCwiciIpKSA9PSBOVUxMKQotCQkJCQl7Ci0JCQkJCXBlcnJvcihwKTsKLQkJCQkJZ290byBlbmQ7Ci0JCQkJCX0KLQkJCQlpZiAoKGVjX3BhcmFtcyA9IEVDX0tFWV9uZXcoKSkgPT0gTlVMTCkKLQkJCQkJZ290byBlbmQ7Ci0JCQkJZ3JvdXAgPSBQRU1fcmVhZF9iaW9fRUNQS1BhcmFtZXRlcnMoaW4sIE5VTEwsIE5VTEwsIE5VTEwpOwotCQkJCWlmIChncm91cCA9PSBOVUxMKQotCQkJCQl7Ci0JCQkJCUVDX0tFWV9mcmVlKGVjX3BhcmFtcyk7Ci0JCQkJCUVSUl9jbGVhcl9lcnJvcigpOwotCQkJCQkodm9pZClCSU9fcmVzZXQoaW4pOwotCQkJCQlpZiAoKHh0bXA9UEVNX3JlYWRfYmlvX1g1MDkoaW4sTlVMTCxOVUxMLE5VTEwpKSA9PSBOVUxMKQotCQkJCQkJewkKLQkJCQkJCUJJT19wcmludGYoYmlvX2VyciwidW5hYmxlIHRvIGxvYWQgRUMgcGFyYW1ldGVycyBmcm9tIGZpbGVcbiIpOwotCQkJCQkJZ290byBlbmQ7Ci0JCQkJCQl9Ci0KLQkJCQkJaWYgKChkdG1wPVg1MDlfZ2V0X3B1YmtleSh4dG1wKSk9PU5VTEwpCi0JCQkJCQlnb3RvIGVuZDsKLQkJCQkJaWYgKGR0bXAtPnR5cGUgPT0gRVZQX1BLRVlfRUMpCi0JCQkJCQllY19wYXJhbXMgPSBFQ19LRVlfZHVwKGR0bXAtPnBrZXkuZWMpOwotCQkJCQlFVlBfUEtFWV9mcmVlKGR0bXApOwotCQkJCQlYNTA5X2ZyZWUoeHRtcCk7Ci0JCQkJCWlmIChlY19wYXJhbXMgPT0gTlVMTCkKLQkJCQkJCXsKLQkJCQkJCUJJT19wcmludGYoYmlvX2VyciwiQ2VydGlmaWNhdGUgZG9lcyBub3QgY29udGFpbiBFQyBwYXJhbWV0ZXJzXG4iKTsKLQkJCQkJCWdvdG8gZW5kOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJZWxzZQotCQkJCQl7Ci0JCQkJCWlmIChFQ19LRVlfc2V0X2dyb3VwKGVjX3BhcmFtcywgZ3JvdXApID09IDApCi0JCQkJCQlnb3RvIGVuZDsKLQkJCQkJRUNfR1JPVVBfZnJlZShncm91cCk7Ci0JCQkJCX0KLQotCQkJCUJJT19mcmVlKGluKTsKLQkJCQlpbj1OVUxMOwotCQkJCW5ld2tleSA9IEVDX0dST1VQX2dldF9kZWdyZWUoRUNfS0VZX2dldDBfZ3JvdXAoZWNfcGFyYW1zKSk7Ci0JCQkJfQotCQkJZWxzZQotI2VuZGlmCi0jaWZuZGVmIE9QRU5TU0xfTk9fREgKLQkJCQlpZiAoc3RybmNtcCgiZGg6IixwLDQpID09IDApCi0JCQkJewotCQkJCXBrZXlfdHlwZT1UWVBFX0RIOwotCQkJCXArPTM7Ci0JCQkJfQotCQkJZWxzZQotI2VuZGlmCi0JCQkJeworCQkJaWYgKC0tYXJnYyA8IDEpCiAJCQkJZ290byBiYWQ7Ci0JCQkJfQotCisJCQlrZXlhbGcgPSAqKCsrYXJndik7CiAJCQluZXdyZXE9MTsKIAkJCX0KKwkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCItcGtleW9wdCIpID09IDApCisJCQl7CisJCQlpZiAoLS1hcmdjIDwgMSkKKwkJCQlnb3RvIGJhZDsKKwkJCWlmICghcGtleW9wdHMpCisJCQkJcGtleW9wdHMgPSBza19PUEVOU1NMX1NUUklOR19uZXdfbnVsbCgpOworCQkJaWYgKCFwa2V5b3B0cyB8fCAhc2tfT1BFTlNTTF9TVFJJTkdfcHVzaChwa2V5b3B0cywgKigrK2FyZ3YpKSkKKwkJCQlnb3RvIGJhZDsKKwkJCX0KIAkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCItYmF0Y2giKSA9PSAwKQogCQkJYmF0Y2g9MTsKIAkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCItbmV3aGRyIikgPT0gMCkKQEAgLTQ2NywxMSArMzY1LDYgQEAKIAkJCXNlcmlhbCA9IHMyaV9BU04xX0lOVEVHRVIoTlVMTCwgKigrK2FyZ3YpKTsKIAkJCWlmICghc2VyaWFsKSBnb3RvIGJhZDsKIAkJCX0KLQkJZWxzZSBpZiAoKG1kX2FsZz1FVlBfZ2V0X2RpZ2VzdGJ5bmFtZSgmKCgqYXJndilbMV0pKSkgIT0gTlVMTCkKLQkJCXsKLQkJCS8qIG9rICovCi0JCQlkaWdlc3Q9bWRfYWxnOwotCQkJfQogCQllbHNlIGlmIChzdHJjbXAoKmFyZ3YsIi1leHRlbnNpb25zIikgPT0gMCkKIAkJCXsKIAkJCWlmICgtLWFyZ2MgPCAxKSBnb3RvIGJhZDsKQEAgLTQ4Miw2ICszNzUsMTEgQEAKIAkJCWlmICgtLWFyZ2MgPCAxKSBnb3RvIGJhZDsKIAkJCXJlcV9leHRzID0gKigrK2FyZ3YpOwogCQkJfQorCQllbHNlIGlmICgobWRfYWxnPUVWUF9nZXRfZGlnZXN0YnluYW1lKCYoKCphcmd2KVsxXSkpKSAhPSBOVUxMKQorCQkJeworCQkJLyogb2sgKi8KKwkJCWRpZ2VzdD1tZF9hbGc7CisJCQl9CiAJCWVsc2UKIAkJCXsKIAkJCUJJT19wcmludGYoYmlvX2VyciwidW5rbm93biBvcHRpb24gJXNcbiIsKmFyZ3YpOwpAQCAtNzMwLDE1ICs2MjgsMjAgQEAKIAogCWlmIChuZXdyZXEgJiYgKHBrZXkgPT0gTlVMTCkpCiAJCXsKLSNpZm5kZWYgT1BFTlNTTF9OT19SU0EKLQkJQk5fR0VOQ0IgY2I7Ci0jZW5kaWYKIAkJY2hhciAqcmFuZGZpbGUgPSBOQ09ORl9nZXRfc3RyaW5nKHJlcV9jb25mLFNFQ1RJT04sIlJBTkRGSUxFIik7CiAJCWlmIChyYW5kZmlsZSA9PSBOVUxMKQogCQkJRVJSX2NsZWFyX2Vycm9yKCk7CiAJCWFwcF9SQU5EX2xvYWRfZmlsZShyYW5kZmlsZSwgYmlvX2VyciwgMCk7CiAJCWlmIChpbnJhbmQpCiAJCQlhcHBfUkFORF9sb2FkX2ZpbGVzKGlucmFuZCk7CisKKwkJaWYgKGtleWFsZykKKwkJCXsKKwkJCWdlbmN0eCA9IHNldF9rZXlnZW5fY3R4KGJpb19lcnIsIGtleWFsZywgJnBrZXlfdHlwZSwgJm5ld2tleSwKKwkJCQkJCQkma2V5YWxnc3RyLCBnZW5fZW5nKTsKKwkJCWlmICghZ2VuY3R4KQorCQkJCWdvdG8gZW5kOworCQkJfQogCQogCQlpZiAobmV3a2V5IDw9IDApCiAJCQl7CkBAIC03NDYsNTggKzY0OSw1NSBAQAogCQkJCW5ld2tleT1ERUZBVUxUX0tFWV9MRU5HVEg7CiAJCQl9CiAKLQkJaWYgKG5ld2tleSA8IE1JTl9LRVlfTEVOR1RIICYmIChwa2V5X3R5cGUgPT0gVFlQRV9SU0EgfHwgcGtleV90eXBlID09IFRZUEVfRFNBKSkKKwkJaWYgKG5ld2tleSA8IE1JTl9LRVlfTEVOR1RIICYmIChwa2V5X3R5cGUgPT0gRVZQX1BLRVlfUlNBIHx8IHBrZXlfdHlwZSA9PSBFVlBfUEtFWV9EU0EpKQogCQkJewogCQkJQklPX3ByaW50ZihiaW9fZXJyLCJwcml2YXRlIGtleSBsZW5ndGggaXMgdG9vIHNob3J0LFxuIik7CiAJCQlCSU9fcHJpbnRmKGJpb19lcnIsIml0IG5lZWRzIHRvIGJlIGF0IGxlYXN0ICVkIGJpdHMsIG5vdCAlbGRcbiIsTUlOX0tFWV9MRU5HVEgsbmV3a2V5KTsKIAkJCWdvdG8gZW5kOwogCQkJfQotCQlCSU9fcHJpbnRmKGJpb19lcnIsIkdlbmVyYXRpbmcgYSAlbGQgYml0ICVzIHByaXZhdGUga2V5XG4iLAotCQkJbmV3a2V5LChwa2V5X3R5cGUgPT0gVFlQRV9SU0EpPyJSU0EiOgotCQkJKHBrZXlfdHlwZSA9PSBUWVBFX0RTQSk/IkRTQSI6IkVDIik7CiAKLQkJaWYgKChwa2V5PUVWUF9QS0VZX25ldygpKSA9PSBOVUxMKSBnb3RvIGVuZDsKLQotI2lmbmRlZiBPUEVOU1NMX05PX1JTQQotCQlCTl9HRU5DQl9zZXQoJmNiLCByZXFfY2IsIGJpb19lcnIpOwotCQlpZiAocGtleV90eXBlID09IFRZUEVfUlNBKQorCQlpZiAoIWdlbmN0eCkKIAkJCXsKLQkJCVJTQSAqcnNhID0gUlNBX25ldygpOwotCQkJQklHTlVNICpibiA9IEJOX25ldygpOwotCQkJaWYoIWJuIHx8ICFyc2EgfHwgIUJOX3NldF93b3JkKGJuLCAweDEwMDAxKSB8fAotCQkJCQkhUlNBX2dlbmVyYXRlX2tleV9leChyc2EsIG5ld2tleSwgYm4sICZjYikgfHwKLQkJCQkJIUVWUF9QS0VZX2Fzc2lnbl9SU0EocGtleSwgcnNhKSkKKwkJCWdlbmN0eCA9IHNldF9rZXlnZW5fY3R4KGJpb19lcnIsIE5VTEwsICZwa2V5X3R5cGUsICZuZXdrZXksCisJCQkJCQkJJmtleWFsZ3N0ciwgZ2VuX2VuZyk7CisJCQlpZiAoIWdlbmN0eCkKKwkJCQlnb3RvIGVuZDsKKwkJCX0KKworCQlpZiAocGtleW9wdHMpCisJCQl7CisJCQljaGFyICpnZW5vcHQ7CisJCQlmb3IgKGkgPSAwOyBpIDwgc2tfT1BFTlNTTF9TVFJJTkdfbnVtKHBrZXlvcHRzKTsgaSsrKQogCQkJCXsKLQkJCQlpZihibikgQk5fZnJlZShibik7Ci0JCQkJaWYocnNhKSBSU0FfZnJlZShyc2EpOwotCQkJCWdvdG8gZW5kOworCQkJCWdlbm9wdCA9IHNrX09QRU5TU0xfU1RSSU5HX3ZhbHVlKHBrZXlvcHRzLCBpKTsKKwkJCQlpZiAocGtleV9jdHJsX3N0cmluZyhnZW5jdHgsIGdlbm9wdCkgPD0gMCkKKwkJCQkJeworCQkJCQlCSU9fcHJpbnRmKGJpb19lcnIsCisJCQkJCQkicGFyYW1ldGVyIGVycm9yIFwiJXNcIlxuIiwKKwkJCQkJCWdlbm9wdCk7CisJCQkJCUVSUl9wcmludF9lcnJvcnMoYmlvX2Vycik7CisJCQkJCWdvdG8gZW5kOworCQkJCQl9CiAJCQkJfQotCQkJQk5fZnJlZShibik7CiAJCQl9Ci0JCWVsc2UKLSNlbmRpZgotI2lmbmRlZiBPUEVOU1NMX05PX0RTQQotCQkJaWYgKHBrZXlfdHlwZSA9PSBUWVBFX0RTQSkKKworCQlCSU9fcHJpbnRmKGJpb19lcnIsIkdlbmVyYXRpbmcgYSAlbGQgYml0ICVzIHByaXZhdGUga2V5XG4iLAorCQkJCW5ld2tleSwga2V5YWxnc3RyKTsKKworCQlFVlBfUEtFWV9DVFhfc2V0X2NiKGdlbmN0eCwgZ2VucGtleV9jYik7CisJCUVWUF9QS0VZX0NUWF9zZXRfYXBwX2RhdGEoZ2VuY3R4LCBiaW9fZXJyKTsKKworCQlpZiAoRVZQX1BLRVlfa2V5Z2VuKGdlbmN0eCwgJnBrZXkpIDw9IDApCiAJCQl7Ci0JCQlpZiAoIURTQV9nZW5lcmF0ZV9rZXkoZHNhX3BhcmFtcykpIGdvdG8gZW5kOwotCQkJaWYgKCFFVlBfUEtFWV9hc3NpZ25fRFNBKHBrZXksZHNhX3BhcmFtcykpIGdvdG8gZW5kOwotCQkJZHNhX3BhcmFtcz1OVUxMOworCQkJQklPX3B1dHMoYmlvX2VyciwgIkVycm9yIEdlbmVyYXRpbmcgS2V5XG4iKTsKKwkJCWdvdG8gZW5kOwogCQkJfQotI2VuZGlmCi0jaWZuZGVmIE9QRU5TU0xfTk9fRUNEU0EKLQkJCWlmIChwa2V5X3R5cGUgPT0gVFlQRV9FQykKLQkJCXsKLQkJCWlmICghRUNfS0VZX2dlbmVyYXRlX2tleShlY19wYXJhbXMpKSBnb3RvIGVuZDsKLQkJCWlmICghRVZQX1BLRVlfYXNzaWduX0VDX0tFWShwa2V5LCBlY19wYXJhbXMpKSAKLQkJCQlnb3RvIGVuZDsKLQkJCWVjX3BhcmFtcyA9IE5VTEw7Ci0JCQl9Ci0jZW5kaWYKKworCQlFVlBfUEtFWV9DVFhfZnJlZShnZW5jdHgpOworCQlnZW5jdHggPSBOVUxMOwogCiAJCWFwcF9SQU5EX3dyaXRlX2ZpbGUocmFuZGZpbGUsIGJpb19lcnIpOwogCi0JCWlmIChwa2V5ID09IE5VTEwpIGdvdG8gZW5kOwotCiAJCWlmIChrZXlvdXQgPT0gTlVMTCkKIAkJCXsKIAkJCWtleW91dD1OQ09ORl9nZXRfc3RyaW5nKHJlcV9jb25mLFNFQ1RJT04sS0VZRklMRSk7CkBAIC04OTUsMTQgKzc5NSw3IEBACiAJCQlCSU9fcHJpbnRmKGJpb19lcnIsInlvdSBuZWVkIHRvIHNwZWNpZnkgYSBwcml2YXRlIGtleVxuIik7CiAJCQlnb3RvIGVuZDsKIAkJCX0KLSNpZm5kZWYgT1BFTlNTTF9OT19EU0EKLQkJaWYgKHBrZXktPnR5cGUgPT0gRVZQX1BLRVlfRFNBKQotCQkJZGlnZXN0PUVWUF9kc3MxKCk7Ci0jZW5kaWYKLSNpZm5kZWYgT1BFTlNTTF9OT19FQ0RTQQotCQlpZiAocGtleS0+dHlwZSA9PSBFVlBfUEtFWV9FQykKLQkJCWRpZ2VzdD1FVlBfZWNkc2EoKTsKLSNlbmRpZgorCiAJCWlmIChyZXEgPT0gTlVMTCkKIAkJCXsKIAkJCXJlcT1YNTA5X1JFUV9uZXcoKTsKQEAgLTk0NSw3ICs4MzgsNyBAQAogCiAJCQlpZiAoIVg1MDlfc2V0X2lzc3Vlcl9uYW1lKHg1MDlzcywgWDUwOV9SRVFfZ2V0X3N1YmplY3RfbmFtZShyZXEpKSkgZ290byBlbmQ7CiAJCQlpZiAoIVg1MDlfZ210aW1lX2FkaihYNTA5X2dldF9ub3RCZWZvcmUoeDUwOXNzKSwwKSkgZ290byBlbmQ7Ci0JCQlpZiAoIVg1MDlfZ210aW1lX2FkaihYNTA5X2dldF9ub3RBZnRlcih4NTA5c3MpLCAobG9uZyk2MCo2MCoyNCpkYXlzKSkgZ290byBlbmQ7CisJCQlpZiAoIVg1MDlfdGltZV9hZGpfZXgoWDUwOV9nZXRfbm90QWZ0ZXIoeDUwOXNzKSwgZGF5cywgMCwgTlVMTCkpIGdvdG8gZW5kOwogCQkJaWYgKCFYNTA5X3NldF9zdWJqZWN0X25hbWUoeDUwOXNzLCBYNTA5X1JFUV9nZXRfc3ViamVjdF9uYW1lKHJlcSkpKSBnb3RvIGVuZDsKIAkJCXRtcHBrZXkgPSBYNTA5X1JFUV9nZXRfcHVia2V5KHJlcSk7CiAJCQlpZiAoIXRtcHBrZXkgfHwgIVg1MDlfc2V0X3B1YmtleSh4NTA5c3MsdG1wcGtleSkpIGdvdG8gZW5kOwpAQCAtOTY3LDcgKzg2MCwxMCBAQAogCQkJCX0KIAkJCQogCQkJaWYgKCEoaT1YNTA5X3NpZ24oeDUwOXNzLHBrZXksZGlnZXN0KSkpCisJCQkJeworCQkJCUVSUl9wcmludF9lcnJvcnMoYmlvX2Vycik7CiAJCQkJZ290byBlbmQ7CisJCQkJfQogCQkJfQogCQllbHNlCiAJCQl7CkBAIC05ODgsNyArODg0LDEwIEBACiAJCQkJZ290byBlbmQ7CiAJCQkJfQogCQkJaWYgKCEoaT1YNTA5X1JFUV9zaWduKHJlcSxwa2V5LGRpZ2VzdCkpKQorCQkJCXsKKwkJCQlFUlJfcHJpbnRfZXJyb3JzKGJpb19lcnIpOwogCQkJCWdvdG8gZW5kOworCQkJCX0KIAkJCX0KIAkJfQogCkBAIC0xMTI1LDcgKzEwMjQsNyBAQAogCQkJfQogCQlmcHJpbnRmKHN0ZG91dCwiTW9kdWx1cz0iKTsKICNpZm5kZWYgT1BFTlNTTF9OT19SU0EKLQkJaWYgKHRwdWJrZXktPnR5cGUgPT0gRVZQX1BLRVlfUlNBKQorCQlpZiAoRVZQX1BLRVlfYmFzZV9pZCh0cHVia2V5KSA9PSBFVlBfUEtFWV9SU0EpCiAJCQlCTl9wcmludChvdXQsdHB1YmtleS0+cGtleS5yc2EtPm4pOwogCQllbHNlCiAjZW5kaWYKQEAgLTExODEsMTggKzEwODAsMjIgQEAKIAlCSU9fZnJlZShpbik7CiAJQklPX2ZyZWVfYWxsKG91dCk7CiAJRVZQX1BLRVlfZnJlZShwa2V5KTsKKwlpZiAoZ2VuY3R4KQorCQlFVlBfUEtFWV9DVFhfZnJlZShnZW5jdHgpOworCWlmIChwa2V5b3B0cykKKwkJc2tfT1BFTlNTTF9TVFJJTkdfZnJlZShwa2V5b3B0cyk7CisjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCisJaWYgKGdlbl9lbmcpCisJCUVOR0lORV9mcmVlKGdlbl9lbmcpOworI2VuZGlmCisJaWYgKGtleWFsZ3N0cikKKwkJT1BFTlNTTF9mcmVlKGtleWFsZ3N0cik7CiAJWDUwOV9SRVFfZnJlZShyZXEpOwogCVg1MDlfZnJlZSh4NTA5c3MpOwogCUFTTjFfSU5URUdFUl9mcmVlKHNlcmlhbCk7CiAJaWYocGFzc2FyZ2luICYmIHBhc3NpbikgT1BFTlNTTF9mcmVlKHBhc3Npbik7CiAJaWYocGFzc2FyZ291dCAmJiBwYXNzb3V0KSBPUEVOU1NMX2ZyZWUocGFzc291dCk7CiAJT0JKX2NsZWFudXAoKTsKLSNpZm5kZWYgT1BFTlNTTF9OT19EU0EKLQlpZiAoZHNhX3BhcmFtcyAhPSBOVUxMKSBEU0FfZnJlZShkc2FfcGFyYW1zKTsKLSNlbmRpZgotI2lmbmRlZiBPUEVOU1NMX05PX0VDRFNBCi0JaWYgKGVjX3BhcmFtcyAhPSBOVUxMKSBFQ19LRVlfZnJlZShlY19wYXJhbXMpOwotI2VuZGlmCiAJYXBwc19zaHV0ZG93bigpOwogCU9QRU5TU0xfRVhJVChleCk7CiAJfQpAQCAtMTQzMywxMSArMTMzNiwxNyBAQAogCiAJCQkJQklPX3NucHJpbnRmKGJ1ZixzaXplb2YgYnVmLCIlc19taW4iLHR5cGUpOwogCQkJCWlmICghTkNPTkZfZ2V0X251bWJlcihyZXFfY29uZixhdHRyX3NlY3QsYnVmLCAmbl9taW4pKQorCQkJCQl7CisJCQkJCUVSUl9jbGVhcl9lcnJvcigpOwogCQkJCQluX21pbiA9IC0xOworCQkJCQl9CiAKIAkJCQlCSU9fc25wcmludGYoYnVmLHNpemVvZiBidWYsIiVzX21heCIsdHlwZSk7CiAJCQkJaWYgKCFOQ09ORl9nZXRfbnVtYmVyKHJlcV9jb25mLGF0dHJfc2VjdCxidWYsICZuX21heCkpCisJCQkJCXsKKwkJCQkJRVJSX2NsZWFyX2Vycm9yKCk7CiAJCQkJCW5fbWF4ID0gLTE7CisJCQkJCX0KIAogCQkJCWlmICghYWRkX2F0dHJpYnV0ZV9vYmplY3QocmVxLAogCQkJCQl2LT52YWx1ZSxkZWYsdmFsdWUsbmlkLG5fbWluLG5fbWF4LCBjaHR5cGUpKQpAQCAtMTY0MSwyNCArMTU1MCw2IEBACiAJcmV0dXJuKDApOwogCX0KIAotI2lmbmRlZiBPUEVOU1NMX05PX1JTQQotc3RhdGljIGludCBNU19DQUxMQkFDSyByZXFfY2IoaW50IHAsIGludCBuLCBCTl9HRU5DQiAqY2IpCi0JewotCWNoYXIgYz0nKic7Ci0KLQlpZiAocCA9PSAwKSBjPScuJzsKLQlpZiAocCA9PSAxKSBjPScrJzsKLQlpZiAocCA9PSAyKSBjPScqJzsKLQlpZiAocCA9PSAzKSBjPSdcbic7Ci0JQklPX3dyaXRlKGNiLT5hcmcsJmMsMSk7Ci0JKHZvaWQpQklPX2ZsdXNoKGNiLT5hcmcpOwotI2lmZGVmIExJTlQKLQlwPW47Ci0jZW5kaWYKLQlyZXR1cm4gMTsKLQl9Ci0jZW5kaWYKLQogc3RhdGljIGludCByZXFfY2hlY2tfbGVuKGludCBsZW4sIGludCBuX21pbiwgaW50IG5fbWF4KQogCXsKIAlpZiAoKG5fbWluID4gMCkgJiYgKGxlbiA8IG5fbWluKSkKQEAgLTE2ODUsMyArMTU3NiwxODMgQEAKIAl0bXAgPSBzdHIgKyBzbGVuIC0gZWxlbjsKIAlyZXR1cm4gc3RyY21wKHRtcCwgZW5kKTsKIH0KKworc3RhdGljIEVWUF9QS0VZX0NUWCAqc2V0X2tleWdlbl9jdHgoQklPICplcnIsIGNvbnN0IGNoYXIgKmdzdHIsIGludCAqcGtleV90eXBlLAorCQkJCQlsb25nICpwa2V5bGVuLCBjaGFyICoqcGFsZ25hbSwKKwkJCQkJRU5HSU5FICprZXlnZW5fZW5naW5lKQorCXsKKwlFVlBfUEtFWV9DVFggKmdjdHggPSBOVUxMOworCUVWUF9QS0VZICpwYXJhbSA9IE5VTEw7CisJbG9uZyBrZXlsZW4gPSAtMTsKKwlCSU8gKnBiaW8gPSBOVUxMOworCWNvbnN0IGNoYXIgKnBhcmFtZmlsZSA9IE5VTEw7CisKKwlpZiAoZ3N0ciA9PSBOVUxMKQorCQl7CisJCSpwa2V5X3R5cGUgPSBFVlBfUEtFWV9SU0E7CisJCWtleWxlbiA9ICpwa2V5bGVuOworCQl9CisJZWxzZSBpZiAoZ3N0clswXSA+PSAnMCcgJiYgZ3N0clswXSA8PSAnOScpCisJCXsKKwkJKnBrZXlfdHlwZSA9IEVWUF9QS0VZX1JTQTsKKwkJa2V5bGVuID0gYXRvbChnc3RyKTsKKwkJKnBrZXlsZW4gPSBrZXlsZW47CisJCX0KKwllbHNlIGlmICghc3RybmNtcChnc3RyLCAicGFyYW06IiwgNikpCisJCXBhcmFtZmlsZSA9IGdzdHIgKyA2OworCWVsc2UKKwkJeworCQljb25zdCBjaGFyICpwID0gc3RyY2hyKGdzdHIsICc6Jyk7CisJCWludCBsZW47CisJCUVOR0lORSAqdG1wZW5nOworCQljb25zdCBFVlBfUEtFWV9BU04xX01FVEhPRCAqYW1ldGg7CisKKwkJaWYgKHApCisJCQlsZW4gPSBwIC0gZ3N0cjsKKwkJZWxzZQorCQkJbGVuID0gc3RybGVuKGdzdHIpOworCQkvKiBUaGUgbG9va3VwIG9mIGEgdGhlIHN0cmluZyB3aWxsIGNvdmVyIGFsbCBlbmdpbmVzIHNvCisJCSAqIGtlZXAgYSBub3RlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbi4KKwkJICovCisKKwkJYW1ldGggPSBFVlBfUEtFWV9hc24xX2ZpbmRfc3RyKCZ0bXBlbmcsIGdzdHIsIGxlbik7CisKKwkJaWYgKCFhbWV0aCkKKwkJCXsKKwkJCUJJT19wcmludGYoZXJyLCAiVW5rbm93biBhbGdvcml0aG0gJS4qc1xuIiwgbGVuLCBnc3RyKTsKKwkJCXJldHVybiBOVUxMOworCQkJfQorCisJCUVWUF9QS0VZX2FzbjFfZ2V0MF9pbmZvKE5VTEwsIHBrZXlfdHlwZSwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCQkJCQkJCWFtZXRoKTsKKyNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKKwkJaWYgKHRtcGVuZykKKwkJCUVOR0lORV9maW5pc2godG1wZW5nKTsKKyNlbmRpZgorCQlpZiAoKnBrZXlfdHlwZSA9PSBFVlBfUEtFWV9SU0EpCisJCQl7CisJCQlpZiAocCkKKwkJCQl7CisJCQkJa2V5bGVuID0gYXRvbChwICsgMSk7CisJCQkJKnBrZXlsZW4gPSBrZXlsZW47CisJCQkJfQorCQkJfQorCQllbHNlIGlmIChwKQorCQkJcGFyYW1maWxlID0gcCArIDE7CisJCX0KKworCWlmIChwYXJhbWZpbGUpCisJCXsKKwkJcGJpbyA9IEJJT19uZXdfZmlsZShwYXJhbWZpbGUsICJyIik7CisJCWlmICghcGJpbykKKwkJCXsKKwkJCUJJT19wcmludGYoZXJyLCAiQ2FuJ3Qgb3BlbiBwYXJhbWV0ZXIgZmlsZSAlc1xuIiwKKwkJCQkJcGFyYW1maWxlKTsKKwkJCXJldHVybiBOVUxMOworCQkJfQorCQlwYXJhbSA9IFBFTV9yZWFkX2Jpb19QYXJhbWV0ZXJzKHBiaW8sIE5VTEwpOworCisJCWlmICghcGFyYW0pCisJCQl7CisJCQlYNTA5ICp4OworCQkJKHZvaWQpQklPX3Jlc2V0KHBiaW8pOworCQkJeCA9IFBFTV9yZWFkX2Jpb19YNTA5KHBiaW8sIE5VTEwsIE5VTEwsIE5VTEwpOworCQkJaWYgKHgpCisJCQkJeworCQkJCXBhcmFtID0gWDUwOV9nZXRfcHVia2V5KHgpOworCQkJCVg1MDlfZnJlZSh4KTsKKwkJCQl9CisJCQl9CisKKwkJQklPX2ZyZWUocGJpbyk7CisKKwkJaWYgKCFwYXJhbSkKKwkJCXsKKwkJCUJJT19wcmludGYoZXJyLCAiRXJyb3IgcmVhZGluZyBwYXJhbWV0ZXIgZmlsZSAlc1xuIiwKKwkJCQkJcGFyYW1maWxlKTsKKwkJCXJldHVybiBOVUxMOworCQkJfQorCQlpZiAoKnBrZXlfdHlwZSA9PSAtMSkKKwkJCSpwa2V5X3R5cGUgPSBFVlBfUEtFWV9pZChwYXJhbSk7CisJCWVsc2UgaWYgKCpwa2V5X3R5cGUgIT0gRVZQX1BLRVlfYmFzZV9pZChwYXJhbSkpCisJCQl7CisJCQlCSU9fcHJpbnRmKGVyciwgIktleSBUeXBlIGRvZXMgbm90IG1hdGNoIHBhcmFtZXRlcnNcbiIpOworCQkJRVZQX1BLRVlfZnJlZShwYXJhbSk7CisJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKwkJfQorCisJaWYgKHBhbGduYW0pCisJCXsKKwkJY29uc3QgRVZQX1BLRVlfQVNOMV9NRVRIT0QgKmFtZXRoOworCQlFTkdJTkUgKnRtcGVuZzsKKwkJY29uc3QgY2hhciAqYW5hbTsKKwkJYW1ldGggPSBFVlBfUEtFWV9hc24xX2ZpbmQoJnRtcGVuZywgKnBrZXlfdHlwZSk7CisJCWlmICghYW1ldGgpCisJCQl7CisJCQlCSU9fcHV0cyhlcnIsICJJbnRlcm5hbCBlcnJvcjogY2FuJ3QgZmluZCBrZXkgYWxnb3JpdGhtXG4iKTsKKwkJCXJldHVybiBOVUxMOworCQkJfQorCQlFVlBfUEtFWV9hc24xX2dldDBfaW5mbyhOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAmYW5hbSwgYW1ldGgpOworCQkqcGFsZ25hbSA9IEJVRl9zdHJkdXAoYW5hbSk7CisjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCisJCWlmICh0bXBlbmcpCisJCQlFTkdJTkVfZmluaXNoKHRtcGVuZyk7CisjZW5kaWYKKwkJfQorCisJaWYgKHBhcmFtKQorCQl7CisJCWdjdHggPSBFVlBfUEtFWV9DVFhfbmV3KHBhcmFtLCBrZXlnZW5fZW5naW5lKTsKKwkJKnBrZXlsZW4gPSBFVlBfUEtFWV9iaXRzKHBhcmFtKTsKKwkJRVZQX1BLRVlfZnJlZShwYXJhbSk7CisJCX0KKwllbHNlCisJCWdjdHggPSBFVlBfUEtFWV9DVFhfbmV3X2lkKCpwa2V5X3R5cGUsIGtleWdlbl9lbmdpbmUpOworCisJaWYgKCFnY3R4KQorCQl7CisJCUJJT19wdXRzKGVyciwgIkVycm9yIGFsbG9jYXRpbmcga2V5Z2VuIGNvbnRleHRcbiIpOworCQlFUlJfcHJpbnRfZXJyb3JzKGVycik7CisJCXJldHVybiBOVUxMOworCQl9CisKKwlpZiAoRVZQX1BLRVlfa2V5Z2VuX2luaXQoZ2N0eCkgPD0gMCkKKwkJeworCQlCSU9fcHV0cyhlcnIsICJFcnJvciBpbml0aWFsaXppbmcga2V5Z2VuIGNvbnRleHRcbiIpOworCQlFUlJfcHJpbnRfZXJyb3JzKGVycik7CisJCXJldHVybiBOVUxMOworCQl9CisjaWZuZGVmIE9QRU5TU0xfTk9fUlNBCisJaWYgKCgqcGtleV90eXBlID09IEVWUF9QS0VZX1JTQSkgJiYgKGtleWxlbiAhPSAtMSkpCisJCXsKKwkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX2tleWdlbl9iaXRzKGdjdHgsIGtleWxlbikgPD0gMCkKKwkJCXsKKwkJCUJJT19wdXRzKGVyciwgIkVycm9yIHNldHRpbmcgUlNBIGtleXNpemVcbiIpOworCQkJRVJSX3ByaW50X2Vycm9ycyhlcnIpOworCQkJRVZQX1BLRVlfQ1RYX2ZyZWUoZ2N0eCk7CisJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKwkJfQorI2VuZGlmCisKKwlyZXR1cm4gZ2N0eDsKKwl9CisKK3N0YXRpYyBpbnQgZ2VucGtleV9jYihFVlBfUEtFWV9DVFggKmN0eCkKKwl7CisJY2hhciBjPScqJzsKKwlCSU8gKmIgPSBFVlBfUEtFWV9DVFhfZ2V0X2FwcF9kYXRhKGN0eCk7CisJaW50IHA7CisJcCA9IEVWUF9QS0VZX0NUWF9nZXRfa2V5Z2VuX2luZm8oY3R4LCAwKTsKKwlpZiAocCA9PSAwKSBjPScuJzsKKwlpZiAocCA9PSAxKSBjPScrJzsKKwlpZiAocCA9PSAyKSBjPScqJzsKKwlpZiAocCA9PSAzKSBjPSdcbic7CisJQklPX3dyaXRlKGIsJmMsMSk7CisJKHZvaWQpQklPX2ZsdXNoKGIpOworI2lmZGVmIExJTlQKKwlwPW47CisjZW5kaWYKKwlyZXR1cm4gMTsKKwl9CmRpZmYgLS1naXQgYS9hcHBzL3JzYS5jIGIvYXBwcy9yc2EuYwppbmRleCA5MzBmMWYwLi5iM2M4YWZmIDEwMDY0NAotLS0gYS9hcHBzL3JzYS5jCisrKyBiL2FwcHMvcnNhLmMKQEAgLTExNSw2ICsxMTUsOCBAQAogI2VuZGlmCiAJaW50IG1vZHVsdXM9MDsKIAorCWludCBwdmtfZW5jciA9IDI7CisKIAlhcHBzX3N0YXJ0dXAoKTsKIAogCWlmIChiaW9fZXJyID09IE5VTEwpCkBAIC0xNzcsNiArMTc5LDE2IEBACiAJCQlwdWJpbj0xOwogCQllbHNlIGlmIChzdHJjbXAoKmFyZ3YsIi1wdWJvdXQiKSA9PSAwKQogCQkJcHVib3V0PTE7CisJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiLVJTQVB1YmxpY0tleV9pbiIpID09IDApCisJCQlwdWJpbiA9IDI7CisJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiLVJTQVB1YmxpY0tleV9vdXQiKSA9PSAwKQorCQkJcHVib3V0ID0gMjsKKwkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCItcHZrLXN0cm9uZyIpID09IDApCisJCQlwdmtfZW5jcj0yOworCQllbHNlIGlmIChzdHJjbXAoKmFyZ3YsIi1wdmstd2VhayIpID09IDApCisJCQlwdmtfZW5jcj0xOworCQllbHNlIGlmIChzdHJjbXAoKmFyZ3YsIi1wdmstbm9uZSIpID09IDApCisJCQlwdmtfZW5jcj0wOwogCQllbHNlIGlmIChzdHJjbXAoKmFyZ3YsIi1ub291dCIpID09IDApCiAJCQlub291dD0xOwogCQllbHNlIGlmIChzdHJjbXAoKmFyZ3YsIi10ZXh0IikgPT0gMCkKQEAgLTI1NywxMCArMjY5LDIzIEBACiAJCUVWUF9QS0VZCSpwa2V5OwogCiAJCWlmIChwdWJpbikKLQkJCXBrZXkgPSBsb2FkX3B1YmtleShiaW9fZXJyLCBpbmZpbGUsCi0JCQkJKGluZm9ybWF0ID09IEZPUk1BVF9ORVRTQ0FQRSAmJiBzZ2NrZXkgPwotCQkJCQlGT1JNQVRfSUlTU0dDIDogaW5mb3JtYXQpLCAxLAorCQkJeworCQkJaW50IHRtcGZvcm1hdD0tMTsKKwkJCWlmIChwdWJpbiA9PSAyKQorCQkJCXsKKwkJCQlpZiAoaW5mb3JtYXQgPT0gRk9STUFUX1BFTSkKKwkJCQkJdG1wZm9ybWF0ID0gRk9STUFUX1BFTVJTQTsKKwkJCQllbHNlIGlmIChpbmZvcm1hdCA9PSBGT1JNQVRfQVNOMSkKKwkJCQkJdG1wZm9ybWF0ID0gRk9STUFUX0FTTjFSU0E7CisJCQkJfQorCQkJZWxzZSBpZiAoaW5mb3JtYXQgPT0gRk9STUFUX05FVFNDQVBFICYmIHNnY2tleSkKKwkJCQl0bXBmb3JtYXQgPSBGT1JNQVRfSUlTU0dDOworCQkJZWxzZQorCQkJCXRtcGZvcm1hdCA9IGluZm9ybWF0OworCQkJCQkKKwkJCXBrZXkgPSBsb2FkX3B1YmtleShiaW9fZXJyLCBpbmZpbGUsIHRtcGZvcm1hdCwgMSwKIAkJCQlwYXNzaW4sIGUsICJQdWJsaWMgS2V5Iik7CisJCQl9CiAJCWVsc2UKIAkJCXBrZXkgPSBsb2FkX2tleShiaW9fZXJyLCBpbmZpbGUsCiAJCQkJKGluZm9ybWF0ID09IEZPUk1BVF9ORVRTQ0FQRSAmJiBzZ2NrZXkgPwpAQCAtMjY4LDcgKzI5Myw3IEBACiAJCQkJcGFzc2luLCBlLCAiUHJpdmF0ZSBLZXkiKTsKIAogCQlpZiAocGtleSAhPSBOVUxMKQotCQlyc2EgPSBwa2V5ID09IE5VTEwgPyBOVUxMIDogRVZQX1BLRVlfZ2V0MV9SU0EocGtleSk7CisJCQlyc2EgPSBFVlBfUEtFWV9nZXQxX1JTQShwa2V5KTsKIAkJRVZQX1BLRVlfZnJlZShwa2V5KTsKIAl9CiAKQEAgLTM0Niw3ICszNzEsMTMgQEAKIAkJfQogCUJJT19wcmludGYoYmlvX2Vyciwid3JpdGluZyBSU0Ega2V5XG4iKTsKIAlpZiAJKG91dGZvcm1hdCA9PSBGT1JNQVRfQVNOMSkgewotCQlpZihwdWJvdXQgfHwgcHViaW4pIGk9aTJkX1JTQV9QVUJLRVlfYmlvKG91dCxyc2EpOworCQlpZihwdWJvdXQgfHwgcHViaW4pIAorCQkJeworCQkJaWYgKHB1Ym91dCA9PSAyKQorCQkJCWk9aTJkX1JTQVB1YmxpY0tleV9iaW8ob3V0LHJzYSk7CisJCQllbHNlCisJCQkJaT1pMmRfUlNBX1BVQktFWV9iaW8ob3V0LHJzYSk7CisJCQl9CiAJCWVsc2UgaT1pMmRfUlNBUHJpdmF0ZUtleV9iaW8ob3V0LHJzYSk7CiAJfQogI2lmbmRlZiBPUEVOU1NMX05PX1JDNApAQCAtMzcwLDE0ICs0MDEsMzIgQEAKICNlbmRpZgogCWVsc2UgaWYgKG91dGZvcm1hdCA9PSBGT1JNQVRfUEVNKSB7CiAJCWlmKHB1Ym91dCB8fCBwdWJpbikKLQkJICAgIGk9UEVNX3dyaXRlX2Jpb19SU0FfUFVCS0VZKG91dCxyc2EpOworCQkJeworCQkJaWYgKHB1Ym91dCA9PSAyKQorCQkgICAgCQlpPVBFTV93cml0ZV9iaW9fUlNBUHVibGljS2V5KG91dCxyc2EpOworCQkJZWxzZQorCQkgICAgCQlpPVBFTV93cml0ZV9iaW9fUlNBX1BVQktFWShvdXQscnNhKTsKKwkJCX0KIAkJZWxzZSBpPVBFTV93cml0ZV9iaW9fUlNBUHJpdmF0ZUtleShvdXQscnNhLAogCQkJCQkJZW5jLE5VTEwsMCxOVUxMLHBhc3NvdXQpOworI2lmbmRlZiBPUEVOU1NMX05PX0RTQQorCX0gZWxzZSBpZiAob3V0Zm9ybWF0ID09IEZPUk1BVF9NU0JMT0IgfHwgb3V0Zm9ybWF0ID09IEZPUk1BVF9QVkspIHsKKwkJRVZQX1BLRVkgKnBrOworCQlwayA9IEVWUF9QS0VZX25ldygpOworCQlFVlBfUEtFWV9zZXQxX1JTQShwaywgcnNhKTsKKwkJaWYgKG91dGZvcm1hdCA9PSBGT1JNQVRfUFZLKQorCQkJaSA9IGkyYl9QVktfYmlvKG91dCwgcGssIHB2a19lbmNyLCAwLCBwYXNzb3V0KTsKKwkJZWxzZSBpZiAocHViaW4gfHwgcHVib3V0KQorCQkJaSA9IGkyYl9QdWJsaWNLZXlfYmlvKG91dCwgcGspOworCQllbHNlCisJCQlpID0gaTJiX1ByaXZhdGVLZXlfYmlvKG91dCwgcGspOworCQlFVlBfUEtFWV9mcmVlKHBrKTsKKyNlbmRpZgogCX0gZWxzZQl7CiAJCUJJT19wcmludGYoYmlvX2VyciwiYmFkIG91dHB1dCBmb3JtYXQgc3BlY2lmaWVkIGZvciBvdXRmaWxlXG4iKTsKIAkJZ290byBlbmQ7CiAJCX0KLQlpZiAoIWkpCisJaWYgKGkgPD0gMCkKIAkJewogCQlCSU9fcHJpbnRmKGJpb19lcnIsInVuYWJsZSB0byB3cml0ZSBrZXlcbiIpOwogCQlFUlJfcHJpbnRfZXJyb3JzKGJpb19lcnIpOwpkaWZmIC0tZ2l0IGEvYXBwcy9yc2F1dGwuYyBiL2FwcHMvcnNhdXRsLmMKaW5kZXggOTIzZTJiNi4uYjAxZjAwNCAxMDA2NDQKLS0tIGEvYXBwcy9yc2F1dGwuYworKysgYi9hcHBzL3JzYXV0bC5jCkBAIC0zNDIsNCArMzQyLDEwIEBACiAKIH0KIAorI2Vsc2UgLyogIU9QRU5TU0xfTk9fUlNBICovCisKKyMgaWYgUEVEQU5USUMKK3N0YXRpYyB2b2lkICpkdW1teT0mZHVtbXk7CisjIGVuZGlmCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXBwcy9zX2FwcHMuaCBiL2FwcHMvc19hcHBzLmgKaW5kZXggZjVhMzliYS4uODIwZTVjNSAxMDA2NDQKLS0tIGEvYXBwcy9zX2FwcHMuaAorKysgYi9hcHBzL3NfYXBwcy5oCkBAIC0xMTcsNyArMTE3LDcgQEAKICNpbmNsdWRlIDxjb25pby5oPgogI2VuZGlmCiAKLSNpZmRlZiBPUEVOU1NMX1NZU19NU0RPUworI2lmIGRlZmluZWQoT1BFTlNTTF9TWVNfTVNET1MpICYmICFkZWZpbmVkKF9XSU4zMikKICNkZWZpbmUgX2tiaGl0IGtiaGl0CiAjZW5kaWYKIApAQCAtMTYyLDcgKzE2Miw3IEBACiBpbnQgZXh0cmFjdF9ob3N0X3BvcnQoY2hhciAqc3RyLGNoYXIgKipob3N0X3B0cix1bnNpZ25lZCBjaGFyICppcCxzaG9ydCAqcCk7CiAKIGxvbmcgTVNfQ0FMTEJBQ0sgYmlvX2R1bXBfY2FsbGJhY2soQklPICpiaW8sIGludCBjbWQsIGNvbnN0IGNoYXIgKmFyZ3AsCi0JaW50IGFyZ2ksIGxvbmcgYXJnbCwgbG9uZyByZXQpOworCQkJCSAgIGludCBhcmdpLCBsb25nIGFyZ2wsIGxvbmcgcmV0KTsKIAogI2lmZGVmIEhFQURFUl9TU0xfSAogdm9pZCBNU19DQUxMQkFDSyBhcHBzX3NzbF9pbmZvX2NhbGxiYWNrKGNvbnN0IFNTTCAqcywgaW50IHdoZXJlLCBpbnQgcmV0KTsKZGlmZiAtLWdpdCBhL2FwcHMvc19jYi5jIGIvYXBwcy9zX2NiLmMKaW5kZXggOTdjYWZmYy4uYzRmNTUxMiAxMDA2NDQKLS0tIGEvYXBwcy9zX2NiLmMKKysrIGIvYXBwcy9zX2NiLmMKQEAgLTU2LDcgKzU2LDcgQEAKICAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCiAgKi8KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjYsMTIgKzEyNiwxMiBAQAogCiBpbnQgdmVyaWZ5X2RlcHRoPTA7CiBpbnQgdmVyaWZ5X2Vycm9yPVg1MDlfVl9PSzsKK2ludCB2ZXJpZnlfcmV0dXJuX2Vycm9yPTA7CiB1bnNpZ25lZCBjaGFyIGNvb2tpZV9zZWNyZXRbQ09PS0lFX1NFQ1JFVF9MRU5HVEhdOwogaW50IGNvb2tpZV9pbml0aWFsaXplZD0wOwogCiBpbnQgTVNfQ0FMTEJBQ0sgdmVyaWZ5X2NhbGxiYWNrKGludCBvaywgWDUwOV9TVE9SRV9DVFggKmN0eCkKIAl7Ci0JY2hhciBidWZbMjU2XTsKIAlYNTA5ICplcnJfY2VydDsKIAlpbnQgZXJyLGRlcHRoOwogCkBAIC0xMzksMTUgKzEzOSwyMyBAQAogCWVycj0JWDUwOV9TVE9SRV9DVFhfZ2V0X2Vycm9yKGN0eCk7CiAJZGVwdGg9CVg1MDlfU1RPUkVfQ1RYX2dldF9lcnJvcl9kZXB0aChjdHgpOwogCi0JWDUwOV9OQU1FX29uZWxpbmUoWDUwOV9nZXRfc3ViamVjdF9uYW1lKGVycl9jZXJ0KSxidWYsc2l6ZW9mIGJ1Zik7Ci0JQklPX3ByaW50ZihiaW9fZXJyLCJkZXB0aD0lZCAlc1xuIixkZXB0aCxidWYpOworCUJJT19wcmludGYoYmlvX2VyciwiZGVwdGg9JWQgIixkZXB0aCk7CisJaWYgKGVycl9jZXJ0KQorCQl7CisJCVg1MDlfTkFNRV9wcmludF9leChiaW9fZXJyLCBYNTA5X2dldF9zdWJqZWN0X25hbWUoZXJyX2NlcnQpLAorCQkJCQkwLCBYTl9GTEFHX09ORUxJTkUpOworCQlCSU9fcHV0cyhiaW9fZXJyLCAiXG4iKTsKKwkJfQorCWVsc2UKKwkJQklPX3B1dHMoYmlvX2VyciwgIjxubyBjZXJ0PlxuIik7CiAJaWYgKCFvaykKIAkJewogCQlCSU9fcHJpbnRmKGJpb19lcnIsInZlcmlmeSBlcnJvcjpudW09JWQ6JXNcbiIsZXJyLAogCQkJWDUwOV92ZXJpZnlfY2VydF9lcnJvcl9zdHJpbmcoZXJyKSk7CiAJCWlmICh2ZXJpZnlfZGVwdGggPj0gZGVwdGgpCiAJCQl7Ci0JCQlvaz0xOworCQkJaWYgKCF2ZXJpZnlfcmV0dXJuX2Vycm9yKQorCQkJCW9rPTE7CiAJCQl2ZXJpZnlfZXJyb3I9WDUwOV9WX09LOwogCQkJfQogCQllbHNlCkBAIC0xNTYsMjUgKzE2NCwzMyBAQAogCQkJdmVyaWZ5X2Vycm9yPVg1MDlfVl9FUlJfQ0VSVF9DSEFJTl9UT09fTE9ORzsKIAkJCX0KIAkJfQotCXN3aXRjaCAoY3R4LT5lcnJvcikKKwlzd2l0Y2ggKGVycikKIAkJewogCWNhc2UgWDUwOV9WX0VSUl9VTkFCTEVfVE9fR0VUX0lTU1VFUl9DRVJUOgotCQlYNTA5X05BTUVfb25lbGluZShYNTA5X2dldF9pc3N1ZXJfbmFtZShjdHgtPmN1cnJlbnRfY2VydCksYnVmLHNpemVvZiBidWYpOwotCQlCSU9fcHJpbnRmKGJpb19lcnIsImlzc3Vlcj0gJXNcbiIsYnVmKTsKKwkJQklPX3B1dHMoYmlvX2VyciwiaXNzdWVyPSAiKTsKKwkJWDUwOV9OQU1FX3ByaW50X2V4KGJpb19lcnIsIFg1MDlfZ2V0X2lzc3Vlcl9uYW1lKGVycl9jZXJ0KSwKKwkJCQkJMCwgWE5fRkxBR19PTkVMSU5FKTsKKwkJQklPX3B1dHMoYmlvX2VyciwgIlxuIik7CiAJCWJyZWFrOwogCWNhc2UgWDUwOV9WX0VSUl9DRVJUX05PVF9ZRVRfVkFMSUQ6CiAJY2FzZSBYNTA5X1ZfRVJSX0VSUk9SX0lOX0NFUlRfTk9UX0JFRk9SRV9GSUVMRDoKIAkJQklPX3ByaW50ZihiaW9fZXJyLCJub3RCZWZvcmU9Iik7Ci0JCUFTTjFfVElNRV9wcmludChiaW9fZXJyLFg1MDlfZ2V0X25vdEJlZm9yZShjdHgtPmN1cnJlbnRfY2VydCkpOworCQlBU04xX1RJTUVfcHJpbnQoYmlvX2VycixYNTA5X2dldF9ub3RCZWZvcmUoZXJyX2NlcnQpKTsKIAkJQklPX3ByaW50ZihiaW9fZXJyLCJcbiIpOwogCQlicmVhazsKIAljYXNlIFg1MDlfVl9FUlJfQ0VSVF9IQVNfRVhQSVJFRDoKIAljYXNlIFg1MDlfVl9FUlJfRVJST1JfSU5fQ0VSVF9OT1RfQUZURVJfRklFTEQ6CiAJCUJJT19wcmludGYoYmlvX2Vyciwibm90QWZ0ZXI9Iik7Ci0JCUFTTjFfVElNRV9wcmludChiaW9fZXJyLFg1MDlfZ2V0X25vdEFmdGVyKGN0eC0+Y3VycmVudF9jZXJ0KSk7CisJCUFTTjFfVElNRV9wcmludChiaW9fZXJyLFg1MDlfZ2V0X25vdEFmdGVyKGVycl9jZXJ0KSk7CiAJCUJJT19wcmludGYoYmlvX2VyciwiXG4iKTsKIAkJYnJlYWs7CisJY2FzZSBYNTA5X1ZfRVJSX05PX0VYUExJQ0lUX1BPTElDWToKKwkJcG9saWNpZXNfcHJpbnQoYmlvX2VyciwgY3R4KTsKKwkJYnJlYWs7CiAJCX0KKwlpZiAoZXJyID09IFg1MDlfVl9PSyAmJiBvayA9PSAyKQorCQlwb2xpY2llc19wcmludChiaW9fZXJyLCBjdHgpOworCiAJQklPX3ByaW50ZihiaW9fZXJyLCJ2ZXJpZnkgcmV0dXJuOiVkXG4iLG9rKTsKIAlyZXR1cm4ob2spOwogCX0KQEAgLTI2Myw3ICsyNzksNyBAQAogCX0KIAogbG9uZyBNU19DQUxMQkFDSyBiaW9fZHVtcF9jYWxsYmFjayhCSU8gKmJpbywgaW50IGNtZCwgY29uc3QgY2hhciAqYXJncCwKLQlpbnQgYXJnaSwgbG9uZyBhcmdsLCBsb25nIHJldCkKKwkJCQkgICBpbnQgYXJnaSwgbG9uZyBhcmdsLCBsb25nIHJldCkKIAl7CiAJQklPICpvdXQ7CiAKQEAgLTI3MiwxNSArMjg4LDE1IEBACiAKIAlpZiAoY21kID09IChCSU9fQ0JfUkVBRHxCSU9fQ0JfUkVUVVJOKSkKIAkJewotCQlCSU9fcHJpbnRmKG91dCwicmVhZCBmcm9tICVwIFslcF0gKCVkIGJ5dGVzID0+ICVsZCAoMHglbFgpKVxuIiwKLSAJCQkodm9pZCAqKWJpbyxhcmdwLGFyZ2kscmV0LHJldCk7CisJCUJJT19wcmludGYob3V0LCJyZWFkIGZyb20gJXAgWyVwXSAoJWx1IGJ5dGVzID0+ICVsZCAoMHglbFgpKVxuIiwKKyAJCQkodm9pZCAqKWJpbyxhcmdwLCh1bnNpZ25lZCBsb25nKWFyZ2kscmV0LHJldCk7CiAJCUJJT19kdW1wKG91dCxhcmdwLChpbnQpcmV0KTsKIAkJcmV0dXJuKHJldCk7CiAJCX0KIAllbHNlIGlmIChjbWQgPT0gKEJJT19DQl9XUklURXxCSU9fQ0JfUkVUVVJOKSkKIAkJewotCQlCSU9fcHJpbnRmKG91dCwid3JpdGUgdG8gJXAgWyVwXSAoJWQgYnl0ZXMgPT4gJWxkICgweCVsWCkpXG4iLAotCQkJKHZvaWQgKiliaW8sYXJncCxhcmdpLHJldCxyZXQpOworCQlCSU9fcHJpbnRmKG91dCwid3JpdGUgdG8gJXAgWyVwXSAoJWx1IGJ5dGVzID0+ICVsZCAoMHglbFgpKVxuIiwKKwkJCSh2b2lkICopYmlvLGFyZ3AsKHVuc2lnbmVkIGxvbmcpYXJnaSxyZXQscmV0KTsKIAkJQklPX2R1bXAob3V0LGFyZ3AsKGludClyZXQpOwogCQl9CiAJcmV0dXJuKHJldCk7CkBAIC0zNDEsMTQgKzM1NywxNCBAQAogCWNhc2UgVExTMV9WRVJTSU9OOgogCQlzdHJfdmVyc2lvbiA9ICJUTFMgMS4wICI7CiAJCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXN0cl92ZXJzaW9uID0gIj8/PyI7CiAJY2FzZSBEVExTMV9WRVJTSU9OOgogCQlzdHJfdmVyc2lvbiA9ICJEVExTIDEuMCAiOwogCQlicmVhazsKIAljYXNlIERUTFMxX0JBRF9WRVI6CiAJCXN0cl92ZXJzaW9uID0gIkRUTFMgMS4wIChiYWQpICI7CiAJCWJyZWFrOworCWRlZmF1bHQ6CisJCXN0cl92ZXJzaW9uID0gIj8/PyI7CiAJCX0KIAogCWlmICh2ZXJzaW9uID09IFNTTDJfVkVSU0lPTikKQEAgLTUxOCw2ICs1MzQsMjEgQEAKIAkJCQljYXNlIDEwMDoKIAkJCQkJc3RyX2RldGFpbHMyID0gIiBub19yZW5lZ290aWF0aW9uIjsKIAkJCQkJYnJlYWs7CisJCQkJY2FzZSAxMTA6CisJCQkJCXN0cl9kZXRhaWxzMiA9ICIgdW5zdXBwb3J0ZWRfZXh0ZW5zaW9uIjsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAxMTE6CisJCQkJCXN0cl9kZXRhaWxzMiA9ICIgY2VydGlmaWNhdGVfdW5vYnRhaW5hYmxlIjsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAxMTI6CisJCQkJCXN0cl9kZXRhaWxzMiA9ICIgdW5yZWNvZ25pemVkX25hbWUiOworCQkJCQlicmVhazsKKwkJCQljYXNlIDExMzoKKwkJCQkJc3RyX2RldGFpbHMyID0gIiBiYWRfY2VydGlmaWNhdGVfc3RhdHVzX3Jlc3BvbnNlIjsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAxMTQ6CisJCQkJCXN0cl9kZXRhaWxzMiA9ICIgYmFkX2NlcnRpZmljYXRlX2hhc2hfdmFsdWUiOworCQkJCQlicmVhazsKIAkJCQkJfQogCQkJCX0KIAkJCX0KQEAgLTUzOSw2ICs1NzAsOSBAQAogCQkJCWNhc2UgMjoKIAkJCQkJc3RyX2RldGFpbHMxID0gIiwgU2VydmVySGVsbG8iOwogCQkJCQlicmVhazsKKwkJCQljYXNlIDM6CisJCQkJCXN0cl9kZXRhaWxzMSA9ICIsIEhlbGxvVmVyaWZ5UmVxdWVzdCI7CisJCQkJCWJyZWFrOwogCQkJCWNhc2UgMTE6CiAJCQkJCXN0cl9kZXRhaWxzMSA9ICIsIENlcnRpZmljYXRlIjsKIAkJCQkJYnJlYWs7CkBAIC01NTQsOSArNTg4LDYgQEAKIAkJCQljYXNlIDE1OgogCQkJCQlzdHJfZGV0YWlsczEgPSAiLCBDZXJ0aWZpY2F0ZVZlcmlmeSI7CiAJCQkJCWJyZWFrOwotCQkJCWNhc2UgMzoKLQkJCQkJc3RyX2RldGFpbHMxID0gIiwgSGVsbG9WZXJpZnlSZXF1ZXN0IjsKLQkJCQkJYnJlYWs7CiAJCQkJY2FzZSAxNjoKIAkJCQkJc3RyX2RldGFpbHMxID0gIiwgQ2xpZW50S2V5RXhjaGFuZ2UiOwogCQkJCQlicmVhazsKQEAgLTY0Miw2ICs2NzMsMTIgQEAKIAkJZXh0bmFtZSA9ICJyZW5lZ290aWF0ZSI7CiAJCWJyZWFrOwogCisjaWZkZWYgVExTRVhUX1RZUEVfb3BhcXVlX3ByZl9pbnB1dAorCQljYXNlIFRMU0VYVF9UWVBFX29wYXF1ZV9wcmZfaW5wdXQ6CisJCWV4dG5hbWUgPSAib3BhcXVlIFBSRiBpbnB1dCI7CisJCWJyZWFrOworI2VuZGlmCisKIAkJZGVmYXVsdDoKIAkJZXh0bmFtZSA9ICJ1bmtub3duIjsKIAkJYnJlYWs7CkBAIC02NTksOCArNjk2LDE0IEBACiAJewogCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgcmVzdWx0W0VWUF9NQVhfTURfU0laRV07CiAJdW5zaWduZWQgaW50IGxlbmd0aCwgcmVzdWx0bGVuZ3RoOwotCXN0cnVjdCBzb2NrYWRkcl9pbiBwZWVyOwotCQorCXVuaW9uIHsKKwkJc3RydWN0IHNvY2thZGRyIHNhOworCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gczQ7CisjaWYgT1BFTlNTTF9VU0VfSVBWNgorCQlzdHJ1Y3Qgc29ja2FkZHJfaW42IHM2OworI2VuZGlmCisJfSBwZWVyOworCiAJLyogSW5pdGlhbGl6ZSBhIHJhbmRvbSBzZWNyZXQgKi8KIAlpZiAoIWNvb2tpZV9pbml0aWFsaXplZCkKIAkJewpAQCAtNjc2LDggKzcxOSwyMyBAQAogCSh2b2lkKUJJT19kZ3JhbV9nZXRfcGVlcihTU0xfZ2V0X3JiaW8oc3NsKSwgJnBlZXIpOwogCiAJLyogQ3JlYXRlIGJ1ZmZlciB3aXRoIHBlZXIncyBhZGRyZXNzIGFuZCBwb3J0ICovCi0JbGVuZ3RoID0gc2l6ZW9mKHBlZXIuc2luX2FkZHIpOwotCWxlbmd0aCArPSBzaXplb2YocGVlci5zaW5fcG9ydCk7CisJbGVuZ3RoID0gMDsKKwlzd2l0Y2ggKHBlZXIuc2Euc2FfZmFtaWx5KQorCQl7CisJY2FzZSBBRl9JTkVUOgorCQlsZW5ndGggKz0gc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKTsKKwkJbGVuZ3RoICs9IHNpemVvZihwZWVyLnM0LnNpbl9wb3J0KTsKKwkJYnJlYWs7CisjaWYgT1BFTlNTTF9VU0VfSVBWNgorCWNhc2UgQUZfSU5FVDY6CisJCWxlbmd0aCArPSBzaXplb2Yoc3RydWN0IGluNl9hZGRyKTsKKwkJbGVuZ3RoICs9IHNpemVvZihwZWVyLnM2LnNpbjZfcG9ydCk7CisJCWJyZWFrOworI2VuZGlmCisJZGVmYXVsdDoKKwkJT1BFTlNTTF9hc3NlcnQoMCk7CisJCWJyZWFrOworCQl9CiAJYnVmZmVyID0gT1BFTlNTTF9tYWxsb2MobGVuZ3RoKTsKIAogCWlmIChidWZmZXIgPT0gTlVMTCkKQEAgLTY4NSw5ICs3NDMsMzEgQEAKIAkJQklPX3ByaW50ZihiaW9fZXJyLCJvdXQgb2YgbWVtb3J5XG4iKTsKIAkJcmV0dXJuIDA7CiAJCX0KLQkKLQltZW1jcHkoYnVmZmVyLCAmcGVlci5zaW5fYWRkciwgc2l6ZW9mKHBlZXIuc2luX2FkZHIpKTsKLQltZW1jcHkoYnVmZmVyICsgc2l6ZW9mKHBlZXIuc2luX2FkZHIpLCAmcGVlci5zaW5fcG9ydCwgc2l6ZW9mKHBlZXIuc2luX3BvcnQpKTsKKworCXN3aXRjaCAocGVlci5zYS5zYV9mYW1pbHkpCisJCXsKKwljYXNlIEFGX0lORVQ6CisJCW1lbWNweShidWZmZXIsCisJCSAgICAgICAmcGVlci5zNC5zaW5fcG9ydCwKKwkJICAgICAgIHNpemVvZihwZWVyLnM0LnNpbl9wb3J0KSk7CisJCW1lbWNweShidWZmZXIgKyBzaXplb2YocGVlci5zNC5zaW5fcG9ydCksCisJCSAgICAgICAmcGVlci5zNC5zaW5fYWRkciwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpOworCQlicmVhazsKKyNpZiBPUEVOU1NMX1VTRV9JUFY2CisJY2FzZSBBRl9JTkVUNjoKKwkJbWVtY3B5KGJ1ZmZlciwKKwkJICAgICAgICZwZWVyLnM2LnNpbjZfcG9ydCwKKwkJICAgICAgIHNpemVvZihwZWVyLnM2LnNpbjZfcG9ydCkpOworCQltZW1jcHkoYnVmZmVyICsgc2l6ZW9mKHBlZXIuczYuc2luNl9wb3J0KSwKKwkJICAgICAgICZwZWVyLnM2LnNpbjZfYWRkciwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQlPUEVOU1NMX2Fzc2VydCgwKTsKKwkJYnJlYWs7CisJCX0KIAogCS8qIENhbGN1bGF0ZSBITUFDIG9mIGJ1ZmZlciB1c2luZyB0aGUgc2VjcmV0ICovCiAJSE1BQyhFVlBfc2hhMSgpLCBjb29raWVfc2VjcmV0LCBDT09LSUVfU0VDUkVUX0xFTkdUSCwKQEAgLTcwNCw4ICs3ODQsMTQgQEAKIAl7CiAJdW5zaWduZWQgY2hhciAqYnVmZmVyLCByZXN1bHRbRVZQX01BWF9NRF9TSVpFXTsKIAl1bnNpZ25lZCBpbnQgbGVuZ3RoLCByZXN1bHRsZW5ndGg7Ci0Jc3RydWN0IHNvY2thZGRyX2luIHBlZXI7Ci0JCisJdW5pb24geworCQlzdHJ1Y3Qgc29ja2FkZHIgc2E7CisJCXN0cnVjdCBzb2NrYWRkcl9pbiBzNDsKKyNpZiBPUEVOU1NMX1VTRV9JUFY2CisJCXN0cnVjdCBzb2NrYWRkcl9pbjYgczY7CisjZW5kaWYKKwl9IHBlZXI7CisKIAkvKiBJZiBzZWNyZXQgaXNuJ3QgaW5pdGlhbGl6ZWQgeWV0LCB0aGUgY29va2llIGNhbid0IGJlIHZhbGlkICovCiAJaWYgKCFjb29raWVfaW5pdGlhbGl6ZWQpCiAJCXJldHVybiAwOwpAQCAtNzE0LDI0ICs4MDAsNjEgQEAKIAkodm9pZClCSU9fZGdyYW1fZ2V0X3BlZXIoU1NMX2dldF9yYmlvKHNzbCksICZwZWVyKTsKIAogCS8qIENyZWF0ZSBidWZmZXIgd2l0aCBwZWVyJ3MgYWRkcmVzcyBhbmQgcG9ydCAqLwotCWxlbmd0aCA9IHNpemVvZihwZWVyLnNpbl9hZGRyKTsKLQlsZW5ndGggKz0gc2l6ZW9mKHBlZXIuc2luX3BvcnQpOwotCWJ1ZmZlciA9ICh1bnNpZ25lZCBjaGFyKikgT1BFTlNTTF9tYWxsb2MobGVuZ3RoKTsKKwlsZW5ndGggPSAwOworCXN3aXRjaCAocGVlci5zYS5zYV9mYW1pbHkpCisJCXsKKwljYXNlIEFGX0lORVQ6CisJCWxlbmd0aCArPSBzaXplb2Yoc3RydWN0IGluX2FkZHIpOworCQlsZW5ndGggKz0gc2l6ZW9mKHBlZXIuczQuc2luX3BvcnQpOworCQlicmVhazsKKyNpZiBPUEVOU1NMX1VTRV9JUFY2CisJY2FzZSBBRl9JTkVUNjoKKwkJbGVuZ3RoICs9IHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpOworCQlsZW5ndGggKz0gc2l6ZW9mKHBlZXIuczYuc2luNl9wb3J0KTsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQlPUEVOU1NMX2Fzc2VydCgwKTsKKwkJYnJlYWs7CisJCX0KKwlidWZmZXIgPSBPUEVOU1NMX21hbGxvYyhsZW5ndGgpOwogCQogCWlmIChidWZmZXIgPT0gTlVMTCkKIAkJewogCQlCSU9fcHJpbnRmKGJpb19lcnIsIm91dCBvZiBtZW1vcnlcbiIpOwogCQlyZXR1cm4gMDsKIAkJfQotCQotCW1lbWNweShidWZmZXIsICZwZWVyLnNpbl9hZGRyLCBzaXplb2YocGVlci5zaW5fYWRkcikpOwotCW1lbWNweShidWZmZXIgKyBzaXplb2YocGVlci5zaW5fYWRkciksICZwZWVyLnNpbl9wb3J0LCBzaXplb2YocGVlci5zaW5fcG9ydCkpOworCisJc3dpdGNoIChwZWVyLnNhLnNhX2ZhbWlseSkKKwkJeworCWNhc2UgQUZfSU5FVDoKKwkJbWVtY3B5KGJ1ZmZlciwKKwkJICAgICAgICZwZWVyLnM0LnNpbl9wb3J0LAorCQkgICAgICAgc2l6ZW9mKHBlZXIuczQuc2luX3BvcnQpKTsKKwkJbWVtY3B5KGJ1ZmZlciArIHNpemVvZihwZWVyLnM0LnNpbl9wb3J0KSwKKwkJICAgICAgICZwZWVyLnM0LnNpbl9hZGRyLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSk7CisJCWJyZWFrOworI2lmIE9QRU5TU0xfVVNFX0lQVjYKKwljYXNlIEFGX0lORVQ2OgorCQltZW1jcHkoYnVmZmVyLAorCQkgICAgICAgJnBlZXIuczYuc2luNl9wb3J0LAorCQkgICAgICAgc2l6ZW9mKHBlZXIuczYuc2luNl9wb3J0KSk7CisJCW1lbWNweShidWZmZXIgKyBzaXplb2YocGVlci5zNi5zaW42X3BvcnQpLAorCQkgICAgICAgJnBlZXIuczYuc2luNl9hZGRyLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpOworCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCU9QRU5TU0xfYXNzZXJ0KDApOworCQlicmVhazsKKwkJfQogCiAJLyogQ2FsY3VsYXRlIEhNQUMgb2YgYnVmZmVyIHVzaW5nIHRoZSBzZWNyZXQgKi8KIAlITUFDKEVWUF9zaGExKCksIGNvb2tpZV9zZWNyZXQsIENPT0tJRV9TRUNSRVRfTEVOR1RILAogCSAgICAgYnVmZmVyLCBsZW5ndGgsIHJlc3VsdCwgJnJlc3VsdGxlbmd0aCk7CiAJT1BFTlNTTF9mcmVlKGJ1ZmZlcik7Ci0JCisKIAlpZiAoY29va2llX2xlbiA9PSByZXN1bHRsZW5ndGggJiYgbWVtY21wKHJlc3VsdCwgY29va2llLCByZXN1bHRsZW5ndGgpID09IDApCiAJCXJldHVybiAxOwogCmRpZmYgLS1naXQgYS9hcHBzL3NfY2xpZW50LmMgYi9hcHBzL3NfY2xpZW50LmMKaW5kZXggMmY3NDNmMC4uZmQ1ZjM1ZSAxMDA2NDQKLS0tIGEvYXBwcy9zX2NsaWVudC5jCisrKyBiL2FwcHMvc19jbGllbnQuYwpAQCAtNTYsNyArNTYsNyBAQAogICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KICAqLwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAxIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwOCw4ICsxMDgsMzUgQEAKICAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgogICoKICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAyMDA1IE5va2lhLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoZSBwb3J0aW9ucyBvZiB0aGUgYXR0YWNoZWQgc29mdHdhcmUgKCJDb250cmlidXRpb24iKSBpcyBkZXZlbG9wZWQgYnkKKyAqIE5va2lhIENvcnBvcmF0aW9uIGFuZCBpcyBsaWNlbnNlZCBwdXJzdWFudCB0byB0aGUgT3BlblNTTCBvcGVuIHNvdXJjZQorICogbGljZW5zZS4KKyAqCisgKiBUaGUgQ29udHJpYnV0aW9uLCBvcmlnaW5hbGx5IHdyaXR0ZW4gYnkgTWlrYSBLb3VzYSBhbmQgUGFzaSBFcm9uZW4gb2YKKyAqIE5va2lhIENvcnBvcmF0aW9uLCBjb25zaXN0cyBvZiB0aGUgIlBTSyIgKFByZS1TaGFyZWQgS2V5KSBjaXBoZXJzdWl0ZXMKKyAqIHN1cHBvcnQgKHNlZSBSRkMgNDI3OSkgdG8gT3BlblNTTC4KKyAqCisgKiBObyBwYXRlbnQgbGljZW5zZXMgb3Igb3RoZXIgcmlnaHRzIGV4Y2VwdCB0aG9zZSBleHByZXNzbHkgc3RhdGVkIGluCisgKiB0aGUgT3BlblNTTCBvcGVuIHNvdXJjZSBsaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCBncmFudGVkIG9yIHJlY2VpdmVkCisgKiBleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCwgb3Igb3RoZXJ3aXNlLgorICoKKyAqIE5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IE5va2lhIHRoYXQgdGhlIENvbnRyaWJ1dGlvbiBkb2VzIG5vdAorICogaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIGFueSB0aGlyZAorICogcGFydHkgb3IgdGhhdCB0aGUgbGljZW5zZSBwcm92aWRlcyB5b3Ugd2l0aCBhbGwgdGhlIG5lY2Vzc2FyeSByaWdodHMKKyAqIHRvIG1ha2UgdXNlIG9mIHRoZSBDb250cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORC4gSU4KKyAqIEFERElUSU9OIFRPIFRIRSBESVNDTEFJTUVSUyBJTkNMVURFRCBJTiBUSEUgTElDRU5TRSwgTk9LSUEKKyAqIFNQRUNJRklDQUxMWSBESVNDTEFJTVMgQU5ZIExJQUJJTElUWSBGT1IgQ0xBSU1TIEJST1VHSFQgQlkgWU9VIE9SIEFOWQorICogT1RIRVIgRU5USVRZIEJBU0VEIE9OIElORlJJTkdFTUVOVCBPRiBJTlRFTExFQ1RVQUwgUFJPUEVSVFkgUklHSFRTIE9SCisgKiBPVEhFUldJU0UuCisgKi8KIAogI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KQEAgLTEzNSwyMyArMTYyLDE5IEBACiAjaW5jbHVkZSA8b3BlbnNzbC9wZW0uaD4KICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KICNpbmNsdWRlIDxvcGVuc3NsL29jc3AuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CiAjaW5jbHVkZSAic19hcHBzLmgiCiAjaW5jbHVkZSAidGltZW91dHMuaCIKIAotI2lmZGVmIE9QRU5TU0xfU1lTX1dJTkNFCi0vKiBXaW5kb3dzIENFIGluY29ycmVjdGx5IGRlZmluZXMgZmlsZW5vIGFzIHJldHVybmluZyB2b2lkKiwgc28gdG8gYXZvaWQgcHJvYmxlbXMgYmVsb3cuLi4gKi8KLSNpZmRlZiBmaWxlbm8KLSN1bmRlZiBmaWxlbm8KLSNlbmRpZgotI2RlZmluZSBmaWxlbm8oYSkgKGludClfZmlsZW5vKGEpCi0jZW5kaWYKLQotCiAjaWYgKGRlZmluZWQoT1BFTlNTTF9TWVNfVk1TKSAmJiBfX1ZNU19WRVIgPCA3MDAwMDAwMCkKIC8qIEZJT05CSU8gdXNlZCBhcyBhIHN3aXRjaCB0byBlbmFibGUgaW9jdGwsIGFuZCB0aGF0IGlzbid0IGluIFZNUyA8IDcuMCAqLwogI3VuZGVmIEZJT05CSU8KICNlbmRpZgogCisjaWYgZGVmaW5lZChPUEVOU1NMX1NZU19CRU9TX1I1KQorI2luY2x1ZGUgPGZjbnRsLmg+CisjZW5kaWYKKwogI3VuZGVmIFBST0cKICNkZWZpbmUgUFJPRwlzX2NsaWVudF9tYWluCiAKQEAgLTE2Niw2ICsxODksNyBAQAogCiBleHRlcm4gaW50IHZlcmlmeV9kZXB0aDsKIGV4dGVybiBpbnQgdmVyaWZ5X2Vycm9yOworZXh0ZXJuIGludCB2ZXJpZnlfcmV0dXJuX2Vycm9yOwogCiAjaWZkZWYgRklPTkJJTwogc3RhdGljIGludCBjX25iaW89MDsKQEAgLTE4OCw2ICsyMTIsNzIgQEAKIHN0YXRpYyBpbnQgY19xdWlldD0wOwogc3RhdGljIGludCBjX2lnbl9lb2Y9MDsKIAorI2lmbmRlZiBPUEVOU1NMX05PX1BTSworLyogRGVmYXVsdCBQU0sgaWRlbnRpdHkgYW5kIGtleSAqLworc3RhdGljIGNoYXIgKnBza19pZGVudGl0eT0iQ2xpZW50X2lkZW50aXR5IjsKKy8qY2hhciAqcHNrX2tleT1OVUxMOyAgYnkgZGVmYXVsdCBQU0sgaXMgbm90IHVzZWQgKi8KKyNpZiAxIC8qIEFORFJPSUQgKi8KK2NoYXIgKnBza19rZXk9TlVMTDsKKyNlbmRpZgorCitzdGF0aWMgdW5zaWduZWQgaW50IHBza19jbGllbnRfY2IoU1NMICpzc2wsIGNvbnN0IGNoYXIgKmhpbnQsIGNoYXIgKmlkZW50aXR5LAorCXVuc2lnbmVkIGludCBtYXhfaWRlbnRpdHlfbGVuLCB1bnNpZ25lZCBjaGFyICpwc2ssCisJdW5zaWduZWQgaW50IG1heF9wc2tfbGVuKQorCXsKKwl1bnNpZ25lZCBpbnQgcHNrX2xlbiA9IDA7CisJaW50IHJldDsKKyAgICAgICAgQklHTlVNICpibj1OVUxMOworCisJaWYgKGNfZGVidWcpCisJCUJJT19wcmludGYoYmlvX2Nfb3V0LCAicHNrX2NsaWVudF9jYlxuIik7CisJaWYgKCFoaW50KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBubyBTZXJ2ZXJLZXlFeGNoYW5nZSBtZXNzYWdlKi8KKwkJaWYgKGNfZGVidWcpCisJCQlCSU9fcHJpbnRmKGJpb19jX291dCwiTlVMTCByZWNlaXZlZCBQU0sgaWRlbnRpdHkgaGludCwgY29udGludWluZyBhbnl3YXlcbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY19kZWJ1ZykKKwkJQklPX3ByaW50ZihiaW9fY19vdXQsICJSZWNlaXZlZCBQU0sgaWRlbnRpdHkgaGludCAnJXMnXG4iLCBoaW50KTsKKworCS8qIGxvb2t1cCBQU0sgaWRlbnRpdHkgYW5kIFBTSyBrZXkgYmFzZWQgb24gdGhlIGdpdmVuIGlkZW50aXR5IGhpbnQgaGVyZSAqLworCXJldCA9IEJJT19zbnByaW50ZihpZGVudGl0eSwgbWF4X2lkZW50aXR5X2xlbiwgIiVzIiwgcHNrX2lkZW50aXR5KTsKKwlpZiAocmV0IDwgMCB8fCAodW5zaWduZWQgaW50KXJldCA+IG1heF9pZGVudGl0eV9sZW4pCisJCWdvdG8gb3V0X2VycjsKKwlpZiAoY19kZWJ1ZykKKwkJQklPX3ByaW50ZihiaW9fY19vdXQsICJjcmVhdGVkIGlkZW50aXR5ICclcycgbGVuPSVkXG4iLCBpZGVudGl0eSwgcmV0KTsKKyAgICAgICAgcmV0PUJOX2hleDJibigmYm4sIHBza19rZXkpOworICAgICAgICBpZiAoIXJldCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQklPX3ByaW50ZihiaW9fZXJyLCJDb3VsZCBub3QgY29udmVydCBQU0sga2V5ICclcycgdG8gQklHTlVNXG4iLCBwc2tfa2V5KTsKKyAgICAgICAgICAgICAgICBpZiAoYm4pCisgICAgICAgICAgICAgICAgICAgICAgICBCTl9mcmVlKGJuKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgaWYgKCh1bnNpZ25lZCBpbnQpQk5fbnVtX2J5dGVzKGJuKSA+IG1heF9wc2tfbGVuKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBCSU9fcHJpbnRmKGJpb19lcnIsInBzayBidWZmZXIgb2YgY2FsbGJhY2sgaXMgdG9vIHNtYWxsICglZCkgZm9yIGtleSAoJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgbWF4X3Bza19sZW4sIEJOX251bV9ieXRlcyhibikpOworICAgICAgICAgICAgICAgIEJOX2ZyZWUoYm4pOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICBwc2tfbGVuPUJOX2JuMmJpbihibiwgcHNrKTsKKyAgICAgICAgQk5fZnJlZShibik7CisgICAgICAgIGlmIChwc2tfbGVuID09IDApCisgICAgICAgICAgICAgICAgZ290byBvdXRfZXJyOworCisJaWYgKGNfZGVidWcpCisJCUJJT19wcmludGYoYmlvX2Nfb3V0LCAiY3JlYXRlZCBQU0sgbGVuPSVkXG4iLCBwc2tfbGVuKTsKKworICAgICAgICByZXR1cm4gcHNrX2xlbjsKKyBvdXRfZXJyOgorCWlmIChjX2RlYnVnKQorCQlCSU9fcHJpbnRmKGJpb19lcnIsICJFcnJvciBpbiBQU0sgY2xpZW50IGNhbGxiYWNrXG4iKTsKKyAgICAgICAgcmV0dXJuIDA7CisJfQorI2VuZGlmCisKIHN0YXRpYyB2b2lkIHNjX3VzYWdlKHZvaWQpCiAJewogCUJJT19wcmludGYoYmlvX2VyciwidXNhZ2U6IHNfY2xpZW50IGFyZ3NcbiIpOwpAQCAtMTk2LDcgKzI4Niw3IEBACiAJQklPX3ByaW50ZihiaW9fZXJyLCIgLXBvcnQgcG9ydCAgICAgLSB1c2UgLWNvbm5lY3QgaW5zdGVhZFxuIik7CiAJQklPX3ByaW50ZihiaW9fZXJyLCIgLWNvbm5lY3QgaG9zdDpwb3J0IC0gd2hvIHRvIGNvbm5lY3QgdG8gKGRlZmF1bHQgaXMgJXM6JXMpXG4iLFNTTF9IT1NUX05BTUUsUE9SVF9TVFIpOwogCi0JQklPX3ByaW50ZihiaW9fZXJyLCIgLXZlcmlmeSBkZXB0aCAtIHR1cm4gb24gcGVlciBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb25cbiIpOworCUJJT19wcmludGYoYmlvX2VyciwiIC12ZXJpZnkgYXJnICAgLSB0dXJuIG9uIHBlZXIgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uXG4iKTsKIAlCSU9fcHJpbnRmKGJpb19lcnIsIiAtY2VydCBhcmcgICAgIC0gY2VydGlmaWNhdGUgZmlsZSB0byB1c2UsIFBFTSBmb3JtYXQgYXNzdW1lZFxuIik7CiAJQklPX3ByaW50ZihiaW9fZXJyLCIgLWNlcnRmb3JtIGFyZyAtIGNlcnRpZmljYXRlIGZvcm1hdCAoUEVNIG9yIERFUikgUEVNIGRlZmF1bHRcbiIpOwogCUJJT19wcmludGYoYmlvX2VyciwiIC1rZXkgYXJnICAgICAgLSBQcml2YXRlIGtleSBmaWxlIHRvIHVzZSwgaW4gY2VydCBmaWxlIGlmXG4iKTsKQEAgLTIyMiw2ICszMTIsMTMgQEAKIAlCSU9fcHJpbnRmKGJpb19lcnIsIiAtcXVpZXQgICAgICAgIC0gbm8gc19jbGllbnQgb3V0cHV0XG4iKTsKIAlCSU9fcHJpbnRmKGJpb19lcnIsIiAtaWduX2VvZiAgICAgIC0gaWdub3JlIGlucHV0IGVvZiAoZGVmYXVsdCB3aGVuIC1xdWlldClcbiIpOwogCUJJT19wcmludGYoYmlvX2VyciwiIC1ub19pZ25fZW9mICAgLSBkb24ndCBpZ25vcmUgaW5wdXQgZW9mXG4iKTsKKyNpZm5kZWYgT1BFTlNTTF9OT19QU0sKKwlCSU9fcHJpbnRmKGJpb19lcnIsIiAtcHNrX2lkZW50aXR5IGFyZyAtIFBTSyBpZGVudGl0eVxuIik7CisJQklPX3ByaW50ZihiaW9fZXJyLCIgLXBzayBhcmcgICAgICAtIFBTSyBpbiBoZXggKHdpdGhvdXQgMHgpXG4iKTsKKyMgaWZuZGVmIE9QRU5TU0xfTk9fSlBBS0UKKwlCSU9fcHJpbnRmKGJpb19lcnIsIiAtanBha2UgYXJnICAgIC0gSlBBS0Ugc2VjcmV0IHRvIHVzZVxuIik7CisjIGVuZGlmCisjZW5kaWYKIAlCSU9fcHJpbnRmKGJpb19lcnIsIiAtc3NsMiAgICAgICAgIC0ganVzdCB1c2UgU1NMdjJcbiIpOwogCUJJT19wcmludGYoYmlvX2VyciwiIC1zc2wzICAgICAgICAgLSBqdXN0IHVzZSBTU0x2M1xuIik7CiAJQklPX3ByaW50ZihiaW9fZXJyLCIgLXRsczEgICAgICAgICAtIGp1c3QgdXNlIFRMU3YxXG4iKTsKQEAgLTI3Myw2ICszNzAsNyBAQAogCXJldHVybiBTU0xfVExTRVhUX0VSUl9PSzsKIAl9CiAjZW5kaWYKKwogZW51bQogewogCVBST1RPX09GRgk9IDAsCkBAIC0yODcsOSArMzg1LDggQEAKIAogaW50IE1BSU4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCXsKLQlpbnQgb2ZmPTAsIGNsciA9IDA7Ci0JU1NMICpjb249TlVMTCwqY29uMj1OVUxMOwotCVg1MDlfU1RPUkUgKnN0b3JlID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgb2ZmPTAsIGNscj0wOworCVNTTCAqY29uPU5VTEw7CiAJaW50IHMsayx3aWR0aCxzdGF0ZT0wOwogCWNoYXIgKmNidWY9TlVMTCwqc2J1Zj1OVUxMLCptYnVmPU5VTEw7CiAJaW50IGNidWZfbGVuLGNidWZfb2ZmOwpAQCAtMzEwLDEyICs0MDcsMTEgQEAKIAlTU0xfQ1RYICpjdHg9TlVMTDsKIAlpbnQgcmV0PTEsaW5faW5pdD0xLGksbmJpb190ZXN0PTA7CiAJaW50IHN0YXJ0dGxzX3Byb3RvID0gUFJPVE9fT0ZGOwotCWludCBwcmV4aXQgPSAwLCB2ZmxhZ3MgPSAwOwotCVNTTF9NRVRIT0QgKm1ldGg9TlVMTDsKLSNpZmRlZiBzb2NrX3R5cGUKLSN1bmRlZiBzb2NrX3R5cGUKLSNlbmRpZgotCWludCBzb2NrX3R5cGU9U09DS19TVFJFQU07CisJaW50IHByZXhpdCA9IDA7CisJWDUwOV9WRVJJRllfUEFSQU0gKnZwbSA9IE5VTEw7CisJaW50IGJhZGFyZyA9IDA7CisJY29uc3QgU1NMX01FVEhPRCAqbWV0aD1OVUxMOworCWludCBzb2NrZXRfdHlwZT1TT0NLX1NUUkVBTTsKIAlCSU8gKnNiaW87CiAJY2hhciAqaW5yYW5kPU5VTEw7CiAJaW50IG1idWZfbGVuPTA7CkBAIC0zMjYsMTAgKzQyMiwxMiBAQAogCUVOR0lORSAqc3NsX2NsaWVudF9lbmdpbmU9TlVMTDsKICNlbmRpZgogCUVOR0lORSAqZT1OVUxMOwotI2lmIGRlZmluZWQoT1BFTlNTTF9TWVNfV0lORE9XUykgfHwgZGVmaW5lZChPUEVOU1NMX1NZU19NU0RPUykgfHwgZGVmaW5lZChPUEVOU1NMX1NZU19ORVRXQVJFKQorI2lmIGRlZmluZWQoT1BFTlNTTF9TWVNfV0lORE9XUykgfHwgZGVmaW5lZChPUEVOU1NMX1NZU19NU0RPUykgfHwgZGVmaW5lZChPUEVOU1NMX1NZU19ORVRXQVJFKSB8fCBkZWZpbmVkKE9QRU5TU0xfU1lTX0JFT1NfUjUpCiAJc3RydWN0IHRpbWV2YWwgdHY7CisjaWYgZGVmaW5lZChPUEVOU1NMX1NZU19CRU9TX1I1KQorCWludCBzdGRpbl9zZXQgPSAwOwogI2VuZGlmCi0KKyNlbmRpZgogI2lmbmRlZiBPUEVOU1NMX05PX1RMU0VYVAogCWNoYXIgKnNlcnZlcm5hbWUgPSBOVUxMOyAKICAgICAgICAgdGxzZXh0Y3R4IHRsc2V4dGNicCA9IApAQCAtNDI5LDEwICs1MjcsMTQgQEAKIAkJCWlmICgtLWFyZ2MgPCAxKSBnb3RvIGJhZDsKIAkJCWNlcnRfZm9ybWF0ID0gc3RyMmZtdCgqKCsrYXJndikpOwogCQkJfQotCQllbHNlIGlmCShzdHJjbXAoKmFyZ3YsIi1jcmxfY2hlY2siKSA9PSAwKQotCQkJdmZsYWdzIHw9IFg1MDlfVl9GTEFHX0NSTF9DSEVDSzsKLQkJZWxzZSBpZgkoc3RyY21wKCphcmd2LCItY3JsX2NoZWNrX2FsbCIpID09IDApCi0JCQl2ZmxhZ3MgfD0gWDUwOV9WX0ZMQUdfQ1JMX0NIRUNLfFg1MDlfVl9GTEFHX0NSTF9DSEVDS19BTEw7CisJCWVsc2UgaWYgKGFyZ3NfdmVyaWZ5KCZhcmd2LCAmYXJnYywgJmJhZGFyZywgYmlvX2VyciwgJnZwbSkpCisJCQl7CisJCQlpZiAoYmFkYXJnKQorCQkJCWdvdG8gYmFkOworCQkJY29udGludWU7CisJCQl9CisJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiLXZlcmlmeV9yZXR1cm5fZXJyb3IiKSA9PSAwKQorCQkJdmVyaWZ5X3JldHVybl9lcnJvciA9IDE7CiAJCWVsc2UgaWYJKHN0cmNtcCgqYXJndiwiLXByZXhpdCIpID09IDApCiAJCQlwcmV4aXQ9MTsKIAkJZWxzZSBpZgkoc3RyY21wKCphcmd2LCItY3JsZiIpID09IDApCkBAIC00NjgsNiArNTcwLDI3IEBACiAJCQluYmlvX3Rlc3Q9MTsKIAkJZWxzZSBpZgkoc3RyY21wKCphcmd2LCItc3RhdGUiKSA9PSAwKQogCQkJc3RhdGU9MTsKKyNpZm5kZWYgT1BFTlNTTF9OT19QU0sKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChzdHJjbXAoKmFyZ3YsIi1wc2tfaWRlbnRpdHkiKSA9PSAwKQorCQkJeworCQkJaWYgKC0tYXJnYyA8IDEpIGdvdG8gYmFkOworCQkJcHNrX2lkZW50aXR5PSooKythcmd2KTsKKwkJCX0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChzdHJjbXAoKmFyZ3YsIi1wc2siKSA9PSAwKQorCQkJeworICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGo7CisKKwkJCWlmICgtLWFyZ2MgPCAxKSBnb3RvIGJhZDsKKwkJCXBza19rZXk9KigrK2FyZ3YpOworCQkJZm9yIChqID0gMDsgaiA8IHN0cmxlbihwc2tfa2V5KTsgaisrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc3hkaWdpdCgoaW50KXBza19rZXlbal0pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCSU9fcHJpbnRmKGJpb19lcnIsIk5vdCBhIGhleCBudW1iZXIgJyVzJ1xuIiwqYXJndik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisJCQl9CisjZW5kaWYKICNpZm5kZWYgT1BFTlNTTF9OT19TU0wyCiAJCWVsc2UgaWYJKHN0cmNtcCgqYXJndiwiLXNzbDIiKSA9PSAwKQogCQkJbWV0aD1TU0x2Ml9jbGllbnRfbWV0aG9kKCk7CkBAIC00ODQsNyArNjA3LDcgQEAKIAkJZWxzZSBpZgkoc3RyY21wKCphcmd2LCItZHRsczEiKSA9PSAwKQogCQkJewogCQkJbWV0aD1EVExTdjFfY2xpZW50X21ldGhvZCgpOwotCQkJc29ja190eXBlPVNPQ0tfREdSQU07CisJCQlzb2NrZXRfdHlwZT1TT0NLX0RHUkFNOwogCQkJfQogCQllbHNlIGlmIChzdHJjbXAoKmFyZ3YsIi10aW1lb3V0IikgPT0gMCkKIAkJCWVuYWJsZV90aW1lb3V0cz0xOwpAQCAtNTMxLDYgKzY1NCw4IEBACiAJCQlvZmZ8PVNTTF9PUF9OT19TU0x2MzsKIAkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCItbm9fc3NsMiIpID09IDApCiAJCQlvZmZ8PVNTTF9PUF9OT19TU0x2MjsKKwkJZWxzZSBpZgkoc3RyY21wKCphcmd2LCItbm9fY29tcCIpID09IDApCisJCQl7IG9mZnw9U1NMX09QX05PX0NPTVBSRVNTSU9OOyB9CiAjaWZuZGVmIE9QRU5TU0xfTk9fVExTRVhUCiAJCWVsc2UgaWYJKHN0cmNtcCgqYXJndiwiLW5vX3RpY2tldCIpID09IDApCiAJCQl7IG9mZnw9U1NMX09QX05PX1RJQ0tFVDsgfQpAQCAtNjE3LDYgKzc0MiwyNiBAQAogCQlnb3RvIGVuZDsKIAkJfQogCisjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19KUEFLRSkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19QU0spCisJaWYgKGpwYWtlX3NlY3JldCkKKwkJeworCQlpZiAocHNrX2tleSkKKwkJCXsKKwkJCUJJT19wcmludGYoYmlvX2VyciwKKwkJCQkgICAiQ2FuJ3QgdXNlIEpQQUtFIGFuZCBQU0sgdG9nZXRoZXJcbiIpOworCQkJZ290byBlbmQ7CisJCQl9CisJCXBza19pZGVudGl0eSA9ICJKUEFLRSI7CisJCX0KKworCWlmIChjaXBoZXIpCisJCXsKKwkJQklPX3ByaW50ZihiaW9fZXJyLCAiSlBBS0Ugc2V0cyBjaXBoZXIgdG8gUFNLXG4iKTsKKwkJZ290byBlbmQ7CisJCX0KKwljaXBoZXIgPSAiUFNLIjsKKyNlbmRpZgorCiAJT3BlblNTTF9hZGRfc3NsX2FsZ29yaXRobXMoKTsKIAlTU0xfbG9hZF9lcnJvcl9zdHJpbmdzKCk7CiAKQEAgLTYzMiw2ICs3NzcsNyBAQAogCQkJZ290byBlbmQ7CiAJCQl9CiAJCX0KKwogI2VuZGlmCiAJaWYgKCFhcHBfcGFzc3dkKGJpb19lcnIsIHBhc3NhcmcsIE5VTEwsICZwYXNzLCBOVUxMKSkKIAkJewpAQCAtNjk5LDYgKzg0NSw5IEBACiAJCWdvdG8gZW5kOwogCQl9CiAKKwlpZiAodnBtKQorCQlTU0xfQ1RYX3NldDFfcGFyYW0oY3R4LCB2cG0pOworCiAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCiAJaWYgKHNzbF9jbGllbnRfZW5naW5lKQogCQl7CkBAIC03MTMsNiArODYyLDE4IEBACiAJCX0KICNlbmRpZgogCisjaWZuZGVmIE9QRU5TU0xfTk9fUFNLCisjaWZkZWYgT1BFTlNTTF9OT19KUEFLRQorCWlmIChwc2tfa2V5ICE9IE5VTEwpCisjZWxzZQorCWlmIChwc2tfa2V5ICE9IE5VTEwgfHwganBha2Vfc2VjcmV0KQorI2VuZGlmCisJCXsKKwkJaWYgKGNfZGVidWcpCisJCQlCSU9fcHJpbnRmKGJpb19jX291dCwgIlBTSyBrZXkgZ2l2ZW4gb3IgSlBBS0UgaW4gdXNlLCBzZXR0aW5nIGNsaWVudCBjYWxsYmFja1xuIik7CisJCVNTTF9DVFhfc2V0X3Bza19jbGllbnRfY2FsbGJhY2soY3R4LCBwc2tfY2xpZW50X2NiKTsKKwkJfQorI2VuZGlmCiAJaWYgKGJ1Z3MpCiAJCVNTTF9DVFhfc2V0X29wdGlvbnMoY3R4LFNTTF9PUF9BTEx8b2ZmKTsKIAllbHNlCkBAIC03MjMsNyArODg0LDcgQEAKIAkvKiBEVExTOiBwYXJ0aWFsIHJlYWRzIGVuZCB1cCBkaXNjYXJkaW5nIHVucmVhZCBVRFAgYnl0ZXMgOi0oIAogCSAqIFNldHRpbmcgcmVhZCBhaGVhZCBzb2x2ZXMgdGhpcyBwcm9ibGVtLgogCSAqLwotCWlmIChzb2NrX3R5cGUgPT0gU09DS19ER1JBTSkgU1NMX0NUWF9zZXRfcmVhZF9haGVhZChjdHgsIDEpOworCWlmIChzb2NrZXRfdHlwZSA9PSBTT0NLX0RHUkFNKSBTU0xfQ1RYX3NldF9yZWFkX2FoZWFkKGN0eCwgMSk7CiAKIAlpZiAoc3RhdGUpIFNTTF9DVFhfc2V0X2luZm9fY2FsbGJhY2soY3R4LGFwcHNfc3NsX2luZm9fY2FsbGJhY2spOwogCWlmIChjaXBoZXIgIT0gTlVMTCkKQEAgLTc0OSw4ICs5MTAsNiBAQAogCQkvKiBnb3RvIGVuZDsgKi8KIAkJfQogCi0Jc3RvcmUgPSBTU0xfQ1RYX2dldF9jZXJ0X3N0b3JlKGN0eCk7Ci0JWDUwOV9TVE9SRV9zZXRfZmxhZ3Moc3RvcmUsIHZmbGFncyk7CiAjaWZuZGVmIE9QRU5TU0xfTk9fVExTRVhUCiAJaWYgKHNlcnZlcm5hbWUgIT0gTlVMTCkKIAkJewpAQCAtNzk1LDcgKzk1NCw2IEBACiAJCQl9CiAJCX0KICNlbmRpZgotCiAjaWZuZGVmIE9QRU5TU0xfTk9fS1JCNQogCWlmIChjb24gICYmICAoY29uLT5rc3NsX2N0eCA9IGtzc2xfY3R4X25ldygpKSAhPSBOVUxMKQogICAgICAgICAgICAgICAgIHsKQEAgLTgwMywxMCArOTYxLDE1IEBACiAJCX0KICNlbmRpZgkvKiBPUEVOU1NMX05PX0tSQjUgICovCiAvKglTU0xfc2V0X2NpcGhlcl9saXN0KGNvbiwiUkM0LU1ENSIpOyAqLworI2lmIDAKKyNpZmRlZiBUTFNFWFRfVFlQRV9vcGFxdWVfcHJmX2lucHV0CisJU1NMX3NldF90bHNleHRfb3BhcXVlX3ByZl9pbnB1dChjb24sICJUZXN0IGNsaWVudCIsIDExKTsKKyNlbmRpZgorI2VuZGlmCiAKIHJlX3N0YXJ0OgogCi0JaWYgKGluaXRfY2xpZW50KCZzLGhvc3QscG9ydCxzb2NrX3R5cGUpID09IDApCisJaWYgKGluaXRfY2xpZW50KCZzLGhvc3QscG9ydCxzb2NrZXRfdHlwZSkgPT0gMCkKIAkJewogCQlCSU9fcHJpbnRmKGJpb19lcnIsImNvbm5lY3Q6ZXJybm89JWRcbiIsZ2V0X2xhc3Rfc29ja2V0X2Vycm9yKCkpOwogCQlTSFVURE9XTihzKTsKQEAgLTg0Miw3ICsxMDA1LDcgQEAKIAogCQkodm9pZClCSU9fY3RybF9zZXRfY29ubmVjdGVkKHNiaW8sIDEsICZwZWVyKTsKIAotCQlpZiAoIGVuYWJsZV90aW1lb3V0cykKKwkJaWYgKGVuYWJsZV90aW1lb3V0cykKIAkJCXsKIAkJCXRpbWVvdXQudHZfc2VjID0gMDsKIAkJCXRpbWVvdXQudHZfdXNlYyA9IERHUkFNX1JDVl9USU1FT1VUOwpAQCAtMTA2Myw2ICsxMjI2LDE0IEBACiAJCQlpZiAoaW5faW5pdCkKIAkJCQl7CiAJCQkJaW5faW5pdD0wOworI2lmIDAgLyogVGhpcyB0ZXN0IGRvZXNuJ3QgcmVhbGx5IHdvcmsgYXMgaW50ZW5kZWQgKG5lZWRzIHRvIGJlIGZpeGVkKSAqLworI2lmbmRlZiBPUEVOU1NMX05PX1RMU0VYVAorCQkJCWlmIChzZXJ2ZXJuYW1lICE9IE5VTEwgJiYgIVNTTF9zZXNzaW9uX3JldXNlZChjb24pKQorCQkJCQl7CisJCQkJCUJJT19wcmludGYoYmlvX2Nfb3V0LCJTZXJ2ZXIgZGlkICVzYWNrbm93bGVkZ2Ugc2VydmVybmFtZSBleHRlbnNpb24uXG4iLHRsc2V4dGNicC5hY2s/IiI6Im5vdCAiKTsKKwkJCQkJfQorI2VuZGlmCisjZW5kaWYKIAkJCQlpZiAoc2Vzc19vdXQpCiAJCQkJCXsKIAkJCQkJQklPICpzdG1wID0gQklPX25ld19maWxlKHNlc3Nfb3V0LCAidyIpOwpAQCAtMTEwMCwyMiArMTI3MSwyMiBAQAogCiAJCWlmICghc3NsX3BlbmRpbmcpCiAJCQl7Ci0jaWYgIWRlZmluZWQoT1BFTlNTTF9TWVNfV0lORE9XUykgJiYgIWRlZmluZWQoT1BFTlNTTF9TWVNfTVNET1MpICYmICFkZWZpbmVkKE9QRU5TU0xfU1lTX05FVFdBUkUpCisjaWYgIWRlZmluZWQoT1BFTlNTTF9TWVNfV0lORE9XUykgJiYgIWRlZmluZWQoT1BFTlNTTF9TWVNfTVNET1MpICYmICFkZWZpbmVkKE9QRU5TU0xfU1lTX05FVFdBUkUpICYmICFkZWZpbmVkIChPUEVOU1NMX1NZU19CRU9TX1I1KQogCQkJaWYgKHR0eV9vbikKIAkJCQl7Ci0JCQkJaWYgKHJlYWRfdHR5KSAgRkRfU0VUKGZpbGVubyhzdGRpbiksJnJlYWRmZHMpOwotCQkJCWlmICh3cml0ZV90dHkpIEZEX1NFVChmaWxlbm8oc3Rkb3V0KSwmd3JpdGVmZHMpOworCQkJCWlmIChyZWFkX3R0eSkgIG9wZW5zc2xfZmRzZXQoZmlsZW5vKHN0ZGluKSwmcmVhZGZkcyk7CisJCQkJaWYgKHdyaXRlX3R0eSkgb3BlbnNzbF9mZHNldChmaWxlbm8oc3Rkb3V0KSwmd3JpdGVmZHMpOwogCQkJCX0KIAkJCWlmIChyZWFkX3NzbCkKLQkJCQlGRF9TRVQoU1NMX2dldF9mZChjb24pLCZyZWFkZmRzKTsKKwkJCQlvcGVuc3NsX2Zkc2V0KFNTTF9nZXRfZmQoY29uKSwmcmVhZGZkcyk7CiAJCQlpZiAod3JpdGVfc3NsKQotCQkJCUZEX1NFVChTU0xfZ2V0X2ZkKGNvbiksJndyaXRlZmRzKTsKKwkJCQlvcGVuc3NsX2Zkc2V0KFNTTF9nZXRfZmQoY29uKSwmd3JpdGVmZHMpOwogI2Vsc2UKIAkJCWlmKCF0dHlfb24gfHwgIXdyaXRlX3R0eSkgewogCQkJCWlmIChyZWFkX3NzbCkKLQkJCQkJRkRfU0VUKFNTTF9nZXRfZmQoY29uKSwmcmVhZGZkcyk7CisJCQkJCW9wZW5zc2xfZmRzZXQoU1NMX2dldF9mZChjb24pLCZyZWFkZmRzKTsKIAkJCQlpZiAod3JpdGVfc3NsKQotCQkJCQlGRF9TRVQoU1NMX2dldF9mZChjb24pLCZ3cml0ZWZkcyk7CisJCQkJCW9wZW5zc2xfZmRzZXQoU1NMX2dldF9mZChjb24pLCZ3cml0ZWZkcyk7CiAJCQl9CiAjZW5kaWYKIC8qCQkJcHJpbnRmKCJtb2RlIHR0eSglZCAlZCVkKSBzc2woJWQlZClcbiIsCkBAIC0xMTYwLDYgKzEzMzEsMjUgQEAKIAkJCQl9IGVsc2UgCWk9c2VsZWN0KHdpZHRoLCh2b2lkICopJnJlYWRmZHMsKHZvaWQgKikmd3JpdGVmZHMsCiAJCQkJCU5VTEwsdGltZW91dHApOwogCQkJfQorI2VsaWYgZGVmaW5lZChPUEVOU1NMX1NZU19CRU9TX1I1KQorCQkJLyogVW5kZXIgQmVPUy1SNSB0aGUgc2l0dWF0aW9uIGlzIHNpbWlsYXIgdG8gRE9TICovCisJCQlpPTA7CisJCQlzdGRpbl9zZXQgPSAwOworCQkJKHZvaWQpZmNudGwoZmlsZW5vKHN0ZGluKSwgRl9TRVRGTCwgT19OT05CTE9DSyk7CisJCQlpZighd3JpdGVfdHR5KSB7CisJCQkJaWYocmVhZF90dHkpIHsKKwkJCQkJdHYudHZfc2VjID0gMTsKKwkJCQkJdHYudHZfdXNlYyA9IDA7CisJCQkJCWk9c2VsZWN0KHdpZHRoLCh2b2lkICopJnJlYWRmZHMsKHZvaWQgKikmd3JpdGVmZHMsCisJCQkJCQkgTlVMTCwmdHYpOworCQkJCQlpZiAocmVhZChmaWxlbm8oc3RkaW4pLCBzYnVmLCAwKSA+PSAwKQorCQkJCQkJc3RkaW5fc2V0ID0gMTsKKwkJCQkJaWYgKCFpICYmIChzdGRpbl9zZXQgIT0gMSB8fCAhcmVhZF90dHkpKQorCQkJCQkJY29udGludWU7CisJCQkJfSBlbHNlIAlpPXNlbGVjdCh3aWR0aCwodm9pZCAqKSZyZWFkZmRzLCh2b2lkICopJndyaXRlZmRzLAorCQkJCQkgTlVMTCx0aW1lb3V0cCk7CisJCQl9CisJCQkodm9pZClmY250bChmaWxlbm8oc3RkaW4pLCBGX1NFVEZMLCAwKTsKICNlbHNlCiAJCQlpPXNlbGVjdCh3aWR0aCwodm9pZCAqKSZyZWFkZmRzLCh2b2lkICopJndyaXRlZmRzLAogCQkJCSBOVUxMLHRpbWVvdXRwKTsKQEAgLTEyMTgsNiArMTQwOCw3IEBACiAJCQkJaWYgKGNidWZfbGVuICE9IDApCiAJCQkJCXsKIAkJCQkJQklPX3ByaW50ZihiaW9fY19vdXQsInNodXRkb3duXG4iKTsKKwkJCQkJcmV0ID0gMDsKIAkJCQkJZ290byBzaHV0OwogCQkJCQl9CiAJCQkJZWxzZQpAQCAtMTI0NSw4ICsxNDM2LDggQEAKIAkJCQlnb3RvIHNodXQ7CiAJCQkJfQogCQkJfQotI2lmIGRlZmluZWQoT1BFTlNTTF9TWVNfV0lORE9XUykgfHwgZGVmaW5lZChPUEVOU1NMX1NZU19NU0RPUykgfHwgZGVmaW5lZChPUEVOU1NMX1NZU19ORVRXQVJFKQotCQkvKiBBc3N1bWUgV2luZG93cy9ET1MgY2FuIGFsd2F5cyB3cml0ZSAqLworI2lmIGRlZmluZWQoT1BFTlNTTF9TWVNfV0lORE9XUykgfHwgZGVmaW5lZChPUEVOU1NMX1NZU19NU0RPUykgfHwgZGVmaW5lZChPUEVOU1NMX1NZU19ORVRXQVJFKSB8fCBkZWZpbmVkKE9QRU5TU0xfU1lTX0JFT1NfUjUpCisJCS8qIEFzc3VtZSBXaW5kb3dzL0RPUy9CZU9TIGNhbiBhbHdheXMgd3JpdGUgKi8KIAkJZWxzZSBpZiAoIXNzbF9wZW5kaW5nICYmIHdyaXRlX3R0eSkKICNlbHNlCiAJCWVsc2UgaWYgKCFzc2xfcGVuZGluZyAmJiBGRF9JU1NFVChmaWxlbm8oc3Rkb3V0KSwmd3JpdGVmZHMpKQpAQCAtMTI1NSwxMSArMTQ0NiwxMiBAQAogI2lmZGVmIENIQVJTRVRfRUJDRElDCiAJCQlhc2NpaTJlYmNkaWMoJihzYnVmW3NidWZfb2ZmXSksJihzYnVmW3NidWZfb2ZmXSksc2J1Zl9sZW4pOwogI2VuZGlmCi0JCQlpPXdyaXRlKGZpbGVubyhzdGRvdXQpLCYoc2J1ZltzYnVmX29mZl0pLHNidWZfbGVuKTsKKwkJCWk9cmF3X3dyaXRlX3N0ZG91dCgmKHNidWZbc2J1Zl9vZmZdKSxzYnVmX2xlbik7CiAKIAkJCWlmIChpIDw9IDApCiAJCQkJewogCQkJCUJJT19wcmludGYoYmlvX2Nfb3V0LCJET05FXG4iKTsKKwkJCQlyZXQgPSAwOwogCQkJCWdvdG8gc2h1dDsKIAkJCQkvKiBnb3RvIGVuZDsgKi8KIAkJCQl9CkBAIC0xMzE0LDEwICsxNTA2LDEyIEBACiAJCQkJQklPX3ByaW50ZihiaW9fY19vdXQsInJlYWQgWCBCTE9DS1xuIik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIFNTTF9FUlJPUl9TWVNDQUxMOgotCQkJCUJJT19wcmludGYoYmlvX2VyciwicmVhZDplcnJubz0lZFxuIixnZXRfbGFzdF9zb2NrZXRfZXJyb3IoKSk7CisJCQkJcmV0PWdldF9sYXN0X3NvY2tldF9lcnJvcigpOworCQkJCUJJT19wcmludGYoYmlvX2VyciwicmVhZDplcnJubz0lZFxuIixyZXQpOwogCQkJCWdvdG8gc2h1dDsKIAkJCWNhc2UgU1NMX0VSUk9SX1pFUk9fUkVUVVJOOgogCQkJCUJJT19wcmludGYoYmlvX2Nfb3V0LCJjbG9zZWRcbiIpOworCQkJCXJldD0wOwogCQkJCWdvdG8gc2h1dDsKIAkJCWNhc2UgU1NMX0VSUk9SX1NTTDoKIAkJCQlFUlJfcHJpbnRfZXJyb3JzKGJpb19lcnIpOwpAQCAtMTMzMyw3ICsxNTI3LDkgQEAKIAkJZWxzZSBpZiAoKF9rYmhpdCgpKSB8fCAoV0FJVF9PQkpFQ1RfMCA9PSBXYWl0Rm9yU2luZ2xlT2JqZWN0KEdldFN0ZEhhbmRsZShTVERfSU5QVVRfSEFORExFKSwgMCkpKQogI2VuZGlmCiAjZWxpZiBkZWZpbmVkIChPUEVOU1NMX1NZU19ORVRXQVJFKQotICAgICAgICBlbHNlIGlmIChfa2JoaXQoKSkKKwkJZWxzZSBpZiAoX2tiaGl0KCkpCisjZWxpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX0JFT1NfUjUpCisJCWVsc2UgaWYgKHN0ZGluX3NldCkKICNlbHNlCiAJCWVsc2UgaWYgKEZEX0lTU0VUKGZpbGVubyhzdGRpbiksJnJlYWRmZHMpKQogI2VuZGlmCkBAIC0xMzQyLDcgKzE1MzgsNyBAQAogCQkJCXsKIAkJCQlpbnQgaiwgbGZfbnVtOwogCi0JCQkJaT1yZWFkKGZpbGVubyhzdGRpbiksY2J1ZixCVUZTSVpaLzIpOworCQkJCWk9cmF3X3JlYWRfc3RkaW4oY2J1ZixCVUZTSVpaLzIpOwogCQkJCWxmX251bSA9IDA7CiAJCQkJLyogYm90aCBsb29wcyBhcmUgc2tpcHBlZCB3aGVuIGkgPD0gMCAqLwogCQkJCWZvciAoaiA9IDA7IGogPCBpOyBqKyspCkBAIC0xMzYxLDExICsxNTU3LDEyIEBACiAJCQkJYXNzZXJ0KGxmX251bSA9PSAwKTsKIAkJCQl9CiAJCQllbHNlCi0JCQkJaT1yZWFkKGZpbGVubyhzdGRpbiksY2J1ZixCVUZTSVpaKTsKKwkJCQlpPXJhd19yZWFkX3N0ZGluKGNidWYsQlVGU0laWik7CiAKIAkJCWlmICgoIWNfaWduX2VvZikgJiYgKChpIDw9IDApIHx8IChjYnVmWzBdID09ICdRJykpKQogCQkJCXsKIAkJCQlCSU9fcHJpbnRmKGJpb19lcnIsIkRPTkVcbiIpOworCQkJCXJldD0wOwogCQkJCWdvdG8gc2h1dDsKIAkJCQl9CiAKQEAgLTEzODgsMTQgKzE1ODUsMjAgQEAKIAkJCXJlYWRfdHR5PTA7CiAJCQl9CiAJCX0KKworCXJldD0wOwogc2h1dDoKKwlpZiAoaW5faW5pdCkKKwkJcHJpbnRfc3R1ZmYoYmlvX2Nfb3V0LGNvbixmdWxsX2xvZyk7CiAJU1NMX3NodXRkb3duKGNvbik7CiAJU0hVVERPV04oU1NMX2dldF9mZChjb24pKTsKLQlyZXQ9MDsKIGVuZDoKLQlpZihwcmV4aXQpIHByaW50X3N0dWZmKGJpb19jX291dCxjb24sMSk7Ci0JaWYgKGNvbiAhPSBOVUxMKSBTU0xfZnJlZShjb24pOwotCWlmIChjb24yICE9IE5VTEwpIFNTTF9mcmVlKGNvbjIpOworCWlmIChjb24gIT0gTlVMTCkKKwkJeworCQlpZiAocHJleGl0ICE9IDApCisJCQlwcmludF9zdHVmZihiaW9fY19vdXQsY29uLDEpOworCQlTU0xfZnJlZShjb24pOworCQl9CiAJaWYgKGN0eCAhPSBOVUxMKSBTU0xfQ1RYX2ZyZWUoY3R4KTsKIAlpZiAoY2VydCkKIAkJWDUwOV9mcmVlKGNlcnQpOwpAQCAtMTQyNCw3ICsxNjI3LDcgQEAKIAljaGFyIGJ1ZltCVUZTSVpdOwogCVNUQUNLX09GKFg1MDkpICpzazsKIAlTVEFDS19PRihYNTA5X05BTUUpICpzazI7Ci0JU1NMX0NJUEhFUiAqYzsKKwljb25zdCBTU0xfQ0lQSEVSICpjOwogCVg1MDlfTkFNRSAqeG47CiAJaW50IGosaTsKICNpZm5kZWYgT1BFTlNTTF9OT19DT01QCkBAIC0xNTc3LDQgKzE3ODAsNSBAQAogCU9DU1BfUkVTUE9OU0VfZnJlZShyc3ApOwogCXJldHVybiAxOwogCX0KLSNlbmRpZiAgLyogbmRlZiBPUEVOU1NMX05PX1RMU0VYVCAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FwcHMvc19zZXJ2ZXIuYyBiL2FwcHMvc19zZXJ2ZXIuYwppbmRleCA4OGIzMDhjLi4xYTA2ZDE5IDEwMDY0NAotLS0gYS9hcHBzL3Nfc2VydmVyLmMKKysrIGIvYXBwcy9zX3NlcnZlci5jCkBAIC01Niw3ICs1Niw3IEBACiAgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQogICovCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTEzLDYgKzExMywzMiBAQAogICogRUNDIGNpcGhlciBzdWl0ZSBzdXBwb3J0IGluIE9wZW5TU0wgb3JpZ2luYWxseSBkZXZlbG9wZWQgYnkgCiAgKiBTVU4gTUlDUk9TWVNURU1TLCBJTkMuLCBhbmQgY29udHJpYnV0ZWQgdG8gdGhlIE9wZW5TU0wgcHJvamVjdC4KICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAyMDA1IE5va2lhLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoZSBwb3J0aW9ucyBvZiB0aGUgYXR0YWNoZWQgc29mdHdhcmUgKCJDb250cmlidXRpb24iKSBpcyBkZXZlbG9wZWQgYnkKKyAqIE5va2lhIENvcnBvcmF0aW9uIGFuZCBpcyBsaWNlbnNlZCBwdXJzdWFudCB0byB0aGUgT3BlblNTTCBvcGVuIHNvdXJjZQorICogbGljZW5zZS4KKyAqCisgKiBUaGUgQ29udHJpYnV0aW9uLCBvcmlnaW5hbGx5IHdyaXR0ZW4gYnkgTWlrYSBLb3VzYSBhbmQgUGFzaSBFcm9uZW4gb2YKKyAqIE5va2lhIENvcnBvcmF0aW9uLCBjb25zaXN0cyBvZiB0aGUgIlBTSyIgKFByZS1TaGFyZWQgS2V5KSBjaXBoZXJzdWl0ZXMKKyAqIHN1cHBvcnQgKHNlZSBSRkMgNDI3OSkgdG8gT3BlblNTTC4KKyAqCisgKiBObyBwYXRlbnQgbGljZW5zZXMgb3Igb3RoZXIgcmlnaHRzIGV4Y2VwdCB0aG9zZSBleHByZXNzbHkgc3RhdGVkIGluCisgKiB0aGUgT3BlblNTTCBvcGVuIHNvdXJjZSBsaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCBncmFudGVkIG9yIHJlY2VpdmVkCisgKiBleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCwgb3Igb3RoZXJ3aXNlLgorICoKKyAqIE5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IE5va2lhIHRoYXQgdGhlIENvbnRyaWJ1dGlvbiBkb2VzIG5vdAorICogaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIGFueSB0aGlyZAorICogcGFydHkgb3IgdGhhdCB0aGUgbGljZW5zZSBwcm92aWRlcyB5b3Ugd2l0aCBhbGwgdGhlIG5lY2Vzc2FyeSByaWdodHMKKyAqIHRvIG1ha2UgdXNlIG9mIHRoZSBDb250cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORC4gSU4KKyAqIEFERElUSU9OIFRPIFRIRSBESVNDTEFJTUVSUyBJTkNMVURFRCBJTiBUSEUgTElDRU5TRSwgTk9LSUEKKyAqIFNQRUNJRklDQUxMWSBESVNDTEFJTVMgQU5ZIExJQUJJTElUWSBGT1IgQ0xBSU1TIEJST1VHSFQgQlkgWU9VIE9SIEFOWQorICogT1RIRVIgRU5USVRZIEJBU0VEIE9OIElORlJJTkdFTUVOVCBPRiBJTlRFTExFQ1RVQUwgUFJPUEVSVFkgUklHSFRTIE9SCisgKiBPVEhFUldJU0UuCisgKi8KIAogLyogVW50aWwgdGhlIGtleS1nZW4gY2FsbGJhY2tzIGFyZSBtb2RpZmllZCB0byB1c2UgbmV3ZXIgcHJvdG90eXBlcywgd2UgYWxsb3cKICAqIGRlcHJlY2F0ZWQgZnVuY3Rpb25zIGZvciBvcGVuc3NsLWludGVybmFsIGNvZGUgKi8KQEAgLTEyMSwxMSArMTQ3LDExIEBACiAjZW5kaWYKIAogI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KIAotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9lX29zMi5oPgogI2lmZGVmIE9QRU5TU0xfTk9fU1RESU8KICNkZWZpbmUgQVBQU19XSU4xNgpAQCAtMTYzLDE5ICsxODksMTUgQEAKICNpbmNsdWRlICJzX2FwcHMuaCIKICNpbmNsdWRlICJ0aW1lb3V0cy5oIgogCi0jaWZkZWYgT1BFTlNTTF9TWVNfV0lOQ0UKLS8qIFdpbmRvd3MgQ0UgaW5jb3JyZWN0bHkgZGVmaW5lcyBmaWxlbm8gYXMgcmV0dXJuaW5nIHZvaWQqLCBzbyB0byBhdm9pZCBwcm9ibGVtcyBiZWxvdy4uLiAqLwotI2lmZGVmIGZpbGVubwotI3VuZGVmIGZpbGVubwotI2VuZGlmCi0jZGVmaW5lIGZpbGVubyhhKSAoaW50KV9maWxlbm8oYSkKLSNlbmRpZgotCiAjaWYgKGRlZmluZWQoT1BFTlNTTF9TWVNfVk1TKSAmJiBfX1ZNU19WRVIgPCA3MDAwMDAwMCkKIC8qIEZJT05CSU8gdXNlZCBhcyBhIHN3aXRjaCB0byBlbmFibGUgaW9jdGwsIGFuZCB0aGF0IGlzbid0IGluIFZNUyA8IDcuMCAqLwogI3VuZGVmIEZJT05CSU8KICNlbmRpZgogCisjaWYgZGVmaW5lZChPUEVOU1NMX1NZU19CRU9TX1I1KQorI2luY2x1ZGUgPGZjbnRsLmg+CisjZW5kaWYKKwogI2lmbmRlZiBPUEVOU1NMX05PX1JTQQogc3RhdGljIFJTQSBNU19DQUxMQkFDSyAqdG1wX3JzYV9jYihTU0wgKnMsIGludCBpc19leHBvcnQsIGludCBrZXlsZW5ndGgpOwogI2VuZGlmCkBAIC0xOTYsMTQgKzIxOCw2IEBACiBzdGF0aWMgdm9pZCBzX3NlcnZlcl9pbml0KHZvaWQpOwogI2VuZGlmCiAKLSNpZm5kZWYgU19JU0RJUgotIyBpZiBkZWZpbmVkKF9TX0lGTVQpICYmIGRlZmluZWQoX1NfSUZESVIpCi0jICBkZWZpbmUgU19JU0RJUihhKQkoKChhKSAmIF9TX0lGTVQpID09IF9TX0lGRElSKQotIyBlbHNlCi0jICBkZWZpbmUgU19JU0RJUihhKQkoKChhKSAmIFNfSUZNVCkgPT0gU19JRkRJUikKLSMgZW5kaWYKLSNlbmRpZgotCiAjaWZuZGVmIE9QRU5TU0xfTk9fREgKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGRoNTEyX3BbXT17CiAJMHhEQSwweDU4LDB4M0MsMHgxNiwweEQ5LDB4ODUsMHgyMiwweDg5LDB4RDAsMHhFNCwweEFGLDB4NzUsCkBAIC0yNDUsNyArMjU5LDcgQEAKICN1bmRlZiBQUk9HCiAjZGVmaW5lIFBST0cJCXNfc2VydmVyX21haW4KIAotZXh0ZXJuIGludCB2ZXJpZnlfZGVwdGg7CitleHRlcm4gaW50IHZlcmlmeV9kZXB0aCwgdmVyaWZ5X3JldHVybl9lcnJvcjsKIAogc3RhdGljIGNoYXIgKmNpcGhlcj1OVUxMOwogc3RhdGljIGludCBzX3NlcnZlcl92ZXJpZnk9U1NMX1ZFUklGWV9OT05FOwpAQCAtMjg4LDYgKzMwMiw3MiBAQAogc3RhdGljIGludCBjZXJ0X2NoYWluID0gMDsKICNlbmRpZgogCisjaWZuZGVmIE9QRU5TU0xfTk9fUFNLCitzdGF0aWMgY2hhciAqcHNrX2lkZW50aXR5PSJDbGllbnRfaWRlbnRpdHkiOworY2hhciAqcHNrX2tleT1OVUxMOyAvKiBieSBkZWZhdWx0IFBTSyBpcyBub3QgdXNlZCAqLworCitzdGF0aWMgdW5zaWduZWQgaW50IHBza19zZXJ2ZXJfY2IoU1NMICpzc2wsIGNvbnN0IGNoYXIgKmlkZW50aXR5LAorCXVuc2lnbmVkIGNoYXIgKnBzaywgdW5zaWduZWQgaW50IG1heF9wc2tfbGVuKQorCXsKKwl1bnNpZ25lZCBpbnQgcHNrX2xlbiA9IDA7CisJaW50IHJldDsKKwlCSUdOVU0gKmJuID0gTlVMTDsKKworCWlmIChzX2RlYnVnKQorCQlCSU9fcHJpbnRmKGJpb19zX291dCwicHNrX3NlcnZlcl9jYlxuIik7CisJaWYgKCFpZGVudGl0eSkKKwkJeworCQlCSU9fcHJpbnRmKGJpb19lcnIsIkVycm9yOiBjbGllbnQgZGlkIG5vdCBzZW5kIFBTSyBpZGVudGl0eVxuIik7CisJCWdvdG8gb3V0X2VycjsKKwkJfQorCWlmIChzX2RlYnVnKQorCQlCSU9fcHJpbnRmKGJpb19zX291dCwiaWRlbnRpdHlfbGVuPSVkIGlkZW50aXR5PSVzXG4iLAorCQkJaWRlbnRpdHkgPyAoaW50KXN0cmxlbihpZGVudGl0eSkgOiAwLCBpZGVudGl0eSk7CisKKwkvKiBoZXJlIHdlIGNvdWxkIGxvb2t1cCB0aGUgZ2l2ZW4gaWRlbnRpdHkgZS5nLiBmcm9tIGEgZGF0YWJhc2UgKi8KKyAgCWlmIChzdHJjbXAoaWRlbnRpdHksIHBza19pZGVudGl0eSkgIT0gMCkKKwkJeworICAgICAgICAgICAgICAgIEJJT19wcmludGYoYmlvX3Nfb3V0LCAiUFNLIGVycm9yOiBjbGllbnQgaWRlbnRpdHkgbm90IGZvdW5kIgorCQkJICAgIiAoZ290ICclcycgZXhwZWN0ZWQgJyVzJylcbiIsIGlkZW50aXR5LAorCQkJICAgcHNrX2lkZW50aXR5KTsKKwkJZ290byBvdXRfZXJyOworICAgICAgICAgICAgICAgIH0KKwlpZiAoc19kZWJ1ZykKKwkJQklPX3ByaW50ZihiaW9fc19vdXQsICJQU0sgY2xpZW50IGlkZW50aXR5IGZvdW5kXG4iKTsKKworCS8qIGNvbnZlcnQgdGhlIFBTSyBrZXkgdG8gYmluYXJ5ICovCisJcmV0ID0gQk5faGV4MmJuKCZibiwgcHNrX2tleSk7CisJaWYgKCFyZXQpCisJCXsKKwkJQklPX3ByaW50ZihiaW9fZXJyLCJDb3VsZCBub3QgY29udmVydCBQU0sga2V5ICclcycgdG8gQklHTlVNXG4iLCBwc2tfa2V5KTsKKwkJaWYgKGJuKQorCQkJQk5fZnJlZShibik7CisJCXJldHVybiAwOworCQl9CisJaWYgKEJOX251bV9ieXRlcyhibikgPiAoaW50KW1heF9wc2tfbGVuKQorCQl7CisJCUJJT19wcmludGYoYmlvX2VyciwicHNrIGJ1ZmZlciBvZiBjYWxsYmFjayBpcyB0b28gc21hbGwgKCVkKSBmb3Iga2V5ICglZClcbiIsCisJCQltYXhfcHNrX2xlbiwgQk5fbnVtX2J5dGVzKGJuKSk7CisJCUJOX2ZyZWUoYm4pOworCQlyZXR1cm4gMDsKKwkJfQorCisJcmV0ID0gQk5fYm4yYmluKGJuLCBwc2spOworCUJOX2ZyZWUoYm4pOworCisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X2VycjsKKwlwc2tfbGVuID0gKHVuc2lnbmVkIGludClyZXQ7CisKKwlpZiAoc19kZWJ1ZykKKwkJQklPX3ByaW50ZihiaW9fc19vdXQsICJmZXRjaGVkIFBTSyBsZW49JWRcbiIsIHBza19sZW4pOworICAgICAgICByZXR1cm4gcHNrX2xlbjsKKyBvdXRfZXJyOgorCWlmIChzX2RlYnVnKQorCQlCSU9fcHJpbnRmKGJpb19lcnIsICJFcnJvciBpbiBQU0sgc2VydmVyIGNhbGxiYWNrXG4iKTsKKwlyZXR1cm4gMDsKKyAgICAgICAgfQorI2VuZGlmCiAKICNpZmRlZiBNT05PTElUSAogc3RhdGljIHZvaWQgc19zZXJ2ZXJfaW5pdCh2b2lkKQpAQCAtMzUyLDcgKzQzMiw3IEBACiAjaWZuZGVmIE9QRU5TU0xfTk9fRUNESAogCUJJT19wcmludGYoYmlvX2VyciwiIC1uYW1lZF9jdXJ2ZSBhcmcgIC0gRWxsaXB0aWMgY3VydmUgbmFtZSB0byB1c2UgZm9yIGVwaGVtZXJhbCBFQ0RIIGtleXMuXG4iIFwKIAkgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgVXNlIFwib3BlbnNzbCBlY3BhcmFtIC1saXN0X2N1cnZlc1wiIGZvciBhbGwgbmFtZXNcbiIgXAotCSAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAoZGVmYXVsdCBpcyBzZWN0MTYzcjIpLlxuIik7CisJICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgIChkZWZhdWx0IGlzIG5pc3RwMjU2KS5cbiIpOwogI2VuZGlmCiAjaWZkZWYgRklPTkJJTwogCUJJT19wcmludGYoYmlvX2VyciwiIC1uYmlvICAgICAgICAgLSBSdW4gd2l0aCBub24tYmxvY2tpbmcgSU9cbiIpOwpAQCAtMzY5LDYgKzQ0OSwxMyBAQAogCUJJT19wcmludGYoYmlvX2VyciwiIC1zZXJ2ZXJwcmVmICAgLSBVc2Ugc2VydmVyJ3MgY2lwaGVyIHByZWZlcmVuY2VzXG4iKTsKIAlCSU9fcHJpbnRmKGJpb19lcnIsIiAtcXVpZXQgICAgICAgIC0gTm8gc2VydmVyIG91dHB1dFxuIik7CiAJQklPX3ByaW50ZihiaW9fZXJyLCIgLW5vX3RtcF9yc2EgICAtIERvIG5vdCBnZW5lcmF0ZSBhIHRtcCBSU0Ega2V5XG4iKTsKKyNpZm5kZWYgT1BFTlNTTF9OT19QU0sKKwlCSU9fcHJpbnRmKGJpb19lcnIsIiAtcHNrX2hpbnQgYXJnIC0gUFNLIGlkZW50aXR5IGhpbnQgdG8gdXNlXG4iKTsKKwlCSU9fcHJpbnRmKGJpb19lcnIsIiAtcHNrIGFyZyAgICAgIC0gUFNLIGluIGhleCAod2l0aG91dCAweClcbiIpOworIyBpZm5kZWYgT1BFTlNTTF9OT19KUEFLRQorCUJJT19wcmludGYoYmlvX2VyciwiIC1qcGFrZSBhcmcgICAgLSBKUEFLRSBzZWNyZXQgdG8gdXNlXG4iKTsKKyMgZW5kaWYKKyNlbmRpZgogCUJJT19wcmludGYoYmlvX2VyciwiIC1zc2wyICAgICAgICAgLSBKdXN0IHRhbGsgU1NMdjJcbiIpOwogCUJJT19wcmludGYoYmlvX2VyciwiIC1zc2wzICAgICAgICAgLSBKdXN0IHRhbGsgU1NMdjNcbiIpOwogCUJJT19wcmludGYoYmlvX2VyciwiIC10bHMxICAgICAgICAgLSBKdXN0IHRhbGsgVExTdjFcbiIpOwpAQCAtNTg3LDcgKzY3NCw3IEBACiAJCQlyZXR1cm4gcC0+ZXh0ZW5zaW9uX2Vycm9yOwogCQlpZiAoY3R4MikKIAkJCXsKLQkJCUJJT19wcmludGYocC0+YmlvZGVidWcsIlN3aWNoaW5nIHNlcnZlciBjb250ZXh0LlxuIik7CisJCQlCSU9fcHJpbnRmKHAtPmJpb2RlYnVnLCJTd2l0Y2hpbmcgc2VydmVyIGNvbnRleHQuXG4iKTsKIAkJCVNTTF9zZXRfU1NMX0NUWChzLGN0eDIpOwogCQkJfSAgICAgCiAJCX0KQEAgLTYyNiw3ICs3MTMsNyBAQAogCWludCB1c2Vfc3NsOwogCXVuc2lnbmVkIGNoYXIgKnJzcGRlciA9IE5VTEw7CiAJaW50IHJzcGRlcmxlbjsKLQlTVEFDSyAqYWlhID0gTlVMTDsKKwlTVEFDS19PRihPUEVOU1NMX1NUUklORykgKmFpYSA9IE5VTEw7CiAJWDUwOSAqeCA9IE5VTEw7CiAJWDUwOV9TVE9SRV9DVFggaW5jdHg7CiAJWDUwOV9PQkpFQ1Qgb2JqOwpAQCAtNjQ4LDcgKzczNSw3IEBACiAJYWlhID0gWDUwOV9nZXQxX29jc3AoeCk7CiAJaWYgKGFpYSkKIAkJewotCQlpZiAoIU9DU1BfcGFyc2VfdXJsKHNrX3ZhbHVlKGFpYSwgMCksCisJCWlmICghT0NTUF9wYXJzZV91cmwoc2tfT1BFTlNTTF9TVFJJTkdfdmFsdWUoYWlhLCAwKSwKIAkJCSZob3N0LCAmcG9ydCwgJnBhdGgsICZ1c2Vfc3NsKSkKIAkJCXsKIAkJCUJJT19wdXRzKGVyciwgImNlcnRfc3RhdHVzOiBjYW4ndCBwYXJzZSBBSUEgVVJMXG4iKTsKQEAgLTY1Niw3ICs3NDMsNyBAQAogCQkJfQogCQlpZiAoc3JjdHgtPnZlcmJvc2UpCiAJCQlCSU9fcHJpbnRmKGVyciwgImNlcnRfc3RhdHVzOiBBSUEgVVJMOiAlc1xuIiwKLQkJCQkJc2tfdmFsdWUoYWlhLCAwKSk7CisJCQkJCXNrX09QRU5TU0xfU1RSSU5HX3ZhbHVlKGFpYSwgMCkpOwogCQl9CiAJZWxzZQogCQl7CkBAIC03MDEsNyArNzg4LDcgQEAKIAkJaWYgKCFPQ1NQX1JFUVVFU1RfYWRkX2V4dChyZXEsIGV4dCwgLTEpKQogCQkJZ290byBlcnI7CiAJCX0KLQlyZXNwID0gcHJvY2Vzc19yZXNwb25kZXIoZXJyLCByZXEsIGhvc3QsIHBhdGgsIHBvcnQsIHVzZV9zc2wsCisJcmVzcCA9IHByb2Nlc3NfcmVzcG9uZGVyKGVyciwgcmVxLCBob3N0LCBwYXRoLCBwb3J0LCB1c2Vfc3NsLCBOVUxMLAogCQkJCQlzcmN0eC0+dGltZW91dCk7CiAJaWYgKCFyZXNwKQogCQl7CkBAIC03NDAsNiArODI3LDcgQEAKIAlnb3RvIGRvbmU7CiAJfQogI2VuZGlmCisKIGludCBNQUlOKGludCwgY2hhciAqKik7CiAKICNpZm5kZWYgT1BFTlNTTF9OT19KUEFLRQpAQCAtNzQ4LDggKzgzNiw4IEBACiAKIGludCBNQUlOKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJewotCVg1MDlfU1RPUkUgKnN0b3JlID0gTlVMTDsKLQlpbnQgdmZsYWdzID0gMDsKKwlYNTA5X1ZFUklGWV9QQVJBTSAqdnBtID0gTlVMTDsKKwlpbnQgYmFkYXJnID0gMDsKIAlzaG9ydCBwb3J0PVBPUlQ7CiAJY2hhciAqQ0FwYXRoPU5VTEwsKkNBZmlsZT1OVUxMOwogCXVuc2lnbmVkIGNoYXIgKmNvbnRleHQgPSBOVUxMOwpAQCAtNzYyLDggKzg1MCw4IEBACiAJaW50IG9mZj0wOwogCWludCBub190bXBfcnNhPTAsbm9fZGhlPTAsbm9fZWNkaGU9MCxub2NlcnQ9MDsKIAlpbnQgc3RhdGU9MDsKLQlTU0xfTUVUSE9EICptZXRoPU5VTEw7Ci0gICAgICAgIGludCBzb2NrZXRfdHlwZT1TT0NLX1NUUkVBTTsKKwljb25zdCBTU0xfTUVUSE9EICptZXRoPU5VTEw7CisJaW50IHNvY2tldF90eXBlPVNPQ0tfU1RSRUFNOwogCUVOR0lORSAqZT1OVUxMOwogCWNoYXIgKmlucmFuZD1OVUxMOwogCWludCBzX2NlcnRfZm9ybWF0ID0gRk9STUFUX1BFTSwgc19rZXlfZm9ybWF0ID0gRk9STUFUX1BFTTsKQEAgLTc4MCw3ICs4NjgsMTAgQEAKICNpZm5kZWYgT1BFTlNTTF9OT19UTFNFWFQKICAgICAgICAgdGxzZXh0Y3R4IHRsc2V4dGNicCA9IHtOVUxMLCBOVUxMLCBTU0xfVExTRVhUX0VSUl9BTEVSVF9XQVJOSU5HfTsKICNlbmRpZgotCisjaWZuZGVmIE9QRU5TU0xfTk9fUFNLCisJLyogYnkgZGVmYXVsdCBkbyBub3Qgc2VuZCBhIFBTSyBpZGVudGl0eSBoaW50ICovCisJc3RhdGljIGNoYXIgKnBza19pZGVudGl0eV9oaW50PU5VTEw7CisjZW5kaWYKICNpZiAhZGVmaW5lZChPUEVOU1NMX05PX1NTTDIpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fU1NMMykKIAltZXRoPVNTTHYyM19zZXJ2ZXJfbWV0aG9kKCk7CiAjZWxpZiAhZGVmaW5lZChPUEVOU1NMX05PX1NTTDMpCkBAIC05MTQsMTQgKzEwMDUsMTQgQEAKIAkJCX0KIAkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCItbm9fY2FjaGUiKSA9PSAwKQogCQkJbm9fY2FjaGUgPSAxOwotCQllbHNlIGlmIChzdHJjbXAoKmFyZ3YsIi1jcmxfY2hlY2siKSA9PSAwKQorCQllbHNlIGlmIChhcmdzX3ZlcmlmeSgmYXJndiwgJmFyZ2MsICZiYWRhcmcsIGJpb19lcnIsICZ2cG0pKQogCQkJewotCQkJdmZsYWdzIHw9IFg1MDlfVl9GTEFHX0NSTF9DSEVDSzsKKwkJCWlmIChiYWRhcmcpCisJCQkJZ290byBiYWQ7CisJCQljb250aW51ZTsKIAkJCX0KLQkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCItY3JsX2NoZWNrX2FsbCIpID09IDApCi0JCQl7Ci0JCQl2ZmxhZ3MgfD0gWDUwOV9WX0ZMQUdfQ1JMX0NIRUNLfFg1MDlfVl9GTEFHX0NSTF9DSEVDS19BTEw7Ci0JCQl9CisJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiLXZlcmlmeV9yZXR1cm5fZXJyb3IiKSA9PSAwKQorCQkJdmVyaWZ5X3JldHVybl9lcnJvciA9IDE7CiAJCWVsc2UgaWYJKHN0cmNtcCgqYXJndiwiLXNlcnZlcnByZWYiKSA9PSAwKQogCQkJeyBvZmZ8PVNTTF9PUF9DSVBIRVJfU0VSVkVSX1BSRUZFUkVOQ0U7IH0KIAkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCItbGVnYWN5X3JlbmVnb3RpYXRpb24iKSA9PSAwKQpAQCAtOTk4LDYgKzEwODksMjcgQEAKIAkJCXsgbm9fZGhlPTE7IH0KIAkJZWxzZSBpZgkoc3RyY21wKCphcmd2LCItbm9fZWNkaGUiKSA9PSAwKQogCQkJeyBub19lY2RoZT0xOyB9CisjaWZuZGVmIE9QRU5TU0xfTk9fUFNLCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RyY21wKCphcmd2LCItcHNrX2hpbnQiKSA9PSAwKQorCQkJeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC0tYXJnYyA8IDEpIGdvdG8gYmFkOworICAgICAgICAgICAgICAgICAgICAgICAgcHNrX2lkZW50aXR5X2hpbnQ9ICooKythcmd2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChzdHJjbXAoKmFyZ3YsIi1wc2siKSA9PSAwKQorCQkJeworCQkJc2l6ZV90IGk7CisKKwkJCWlmICgtLWFyZ2MgPCAxKSBnb3RvIGJhZDsKKwkJCXBza19rZXk9KigrK2FyZ3YpOworCQkJZm9yIChpPTA7IGk8c3RybGVuKHBza19rZXkpOyBpKyspCisJCQkJeworCQkJCWlmIChpc3hkaWdpdCgoaW50KXBza19rZXlbaV0pKQorCQkJCQljb250aW51ZTsKKwkJCQlCSU9fcHJpbnRmKGJpb19lcnIsIk5vdCBhIGhleCBudW1iZXIgJyVzJ1xuIiwqYXJndik7CisJCQkJZ290byBiYWQ7CisJCQkJfQorCQkJfQorI2VuZGlmCiAJCWVsc2UgaWYJKHN0cmNtcCgqYXJndiwiLXd3dyIpID09IDApCiAJCQl7IHd3dz0xOyB9CiAJCWVsc2UgaWYJKHN0cmNtcCgqYXJndiwiLVdXVyIpID09IDApCkBAIC0xMDEwLDYgKzExMjIsOCBAQAogCQkJeyBvZmZ8PVNTTF9PUF9OT19TU0x2MzsgfQogCQllbHNlIGlmCShzdHJjbXAoKmFyZ3YsIi1ub190bHMxIikgPT0gMCkKIAkJCXsgb2ZmfD1TU0xfT1BfTk9fVExTdjE7IH0KKwkJZWxzZSBpZgkoc3RyY21wKCphcmd2LCItbm9fY29tcCIpID09IDApCisJCQl7IG9mZnw9U1NMX09QX05PX0NPTVBSRVNTSU9OOyB9CiAjaWZuZGVmIE9QRU5TU0xfTk9fVExTRVhUCiAJCWVsc2UgaWYJKHN0cmNtcCgqYXJndiwiLW5vX3RpY2tldCIpID09IDApCiAJCQl7IG9mZnw9U1NMX09QX05PX1RJQ0tFVDsgfQpAQCAtMTA3OSw3ICsxMTkzLDcgQEAKIAkJCX0KIAkJCQogI2VuZGlmCi0jaWZuZGVmIE9QRU5TU0xfTk9fSlBBS0UKKyNpZiAhZGVmaW5lZChPUEVOU1NMX05PX0pQQUtFKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX1BTSykKIAkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCItanBha2UiKSA9PSAwKQogCQkJewogCQkJaWYgKC0tYXJnYyA8IDEpIGdvdG8gYmFkOwpAQCAtMTEwMiw2ICsxMjE2LDI2IEBACiAJCWdvdG8gZW5kOwogCQl9CiAKKyNpZiAhZGVmaW5lZChPUEVOU1NMX05PX0pQQUtFKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX1BTSykKKwlpZiAoanBha2Vfc2VjcmV0KQorCQl7CisJCWlmIChwc2tfa2V5KQorCQkJeworCQkJQklPX3ByaW50ZihiaW9fZXJyLAorCQkJCSAgICJDYW4ndCB1c2UgSlBBS0UgYW5kIFBTSyB0b2dldGhlclxuIik7CisJCQlnb3RvIGVuZDsKKwkJCX0KKwkJcHNrX2lkZW50aXR5ID0gIkpQQUtFIjsKKwkJaWYgKGNpcGhlcikKKwkJCXsKKwkJCUJJT19wcmludGYoYmlvX2VyciwgIkpQQUtFIHNldHMgY2lwaGVyIHRvIFBTS1xuIik7CisJCQlnb3RvIGVuZDsKKwkJCX0KKwkJY2lwaGVyID0gIlBTSyI7CisJCX0KKworI2VuZGlmCisKIAlTU0xfbG9hZF9lcnJvcl9zdHJpbmdzKCk7CiAJT3BlblNTTF9hZGRfc3NsX2FsZ29yaXRobXMoKTsKIApAQCAtMTE2NCw2ICsxMjk4LDggQEAKIAkJCX0KICNlbmRpZgogCQl9CisKKwogCWlmIChzX2RjZXJ0X2ZpbGUpCiAJCXsKIApAQCAtMTI4Miw4ICsxNDE4LDkgQEAKIAkJRVJSX3ByaW50X2Vycm9ycyhiaW9fZXJyKTsKIAkJLyogZ290byBlbmQ7ICovCiAJCX0KLQlzdG9yZSA9IFNTTF9DVFhfZ2V0X2NlcnRfc3RvcmUoY3R4KTsKLQlYNTA5X1NUT1JFX3NldF9mbGFncyhzdG9yZSwgdmZsYWdzKTsKKwlpZiAodnBtKQorCQlTU0xfQ1RYX3NldDFfcGFyYW0oY3R4LCB2cG0pOworCiAjaWZuZGVmIE9QRU5TU0xfTk9fVExTRVhUCiAJaWYgKHNfY2VydDIpCiAJCXsKQEAgLTEzMTksMTMgKzE0NTYsMTEgQEAKIAkJaWYgKGJ1Z3MpIFNTTF9DVFhfc2V0X29wdGlvbnMoY3R4MixTU0xfT1BfQUxMKTsKIAkJaWYgKGhhY2spIFNTTF9DVFhfc2V0X29wdGlvbnMoY3R4MixTU0xfT1BfTkVUU0NBUEVfREVNT19DSVBIRVJfQ0hBTkdFX0JVRyk7CiAJCVNTTF9DVFhfc2V0X29wdGlvbnMoY3R4MixvZmYpOwotCiAJCS8qIERUTFM6IHBhcnRpYWwgcmVhZHMgZW5kIHVwIGRpc2NhcmRpbmcgdW5yZWFkIFVEUCBieXRlcyA6LSggCiAJCSAqIFNldHRpbmcgcmVhZCBhaGVhZCBzb2x2ZXMgdGhpcyBwcm9ibGVtLgogCQkgKi8KIAkJaWYgKHNvY2tldF90eXBlID09IFNPQ0tfREdSQU0pIFNTTF9DVFhfc2V0X3JlYWRfYWhlYWQoY3R4MiwgMSk7CiAKLQogCQlpZiAoc3RhdGUpIFNTTF9DVFhfc2V0X2luZm9fY2FsbGJhY2soY3R4MixhcHBzX3NzbF9pbmZvX2NhbGxiYWNrKTsKIAogCQlpZiAobm9fY2FjaGUpCkBAIC0xMzM4LDEyICsxNDczLDExIEBACiAJCQl7CiAJCQlFUlJfcHJpbnRfZXJyb3JzKGJpb19lcnIpOwogCQkJfQotCQlzdG9yZSA9IFNTTF9DVFhfZ2V0X2NlcnRfc3RvcmUoY3R4Mik7Ci0JCVg1MDlfU1RPUkVfc2V0X2ZsYWdzKHN0b3JlLCB2ZmxhZ3MpOworCQlpZiAodnBtKQorCQkJU1NMX0NUWF9zZXQxX3BhcmFtKGN0eDIsIHZwbSk7CiAJCX0KICNlbmRpZiAKIAotCiAjaWZuZGVmIE9QRU5TU0xfTk9fREgKIAlpZiAoIW5vX2RoZSkKIAkJewpAQCAtMTQxOSwxMCArMTU1MywxMCBAQAogCQllbHNlCiAJCQl7CiAJCQlCSU9fcHJpbnRmKGJpb19zX291dCwiVXNpbmcgZGVmYXVsdCB0ZW1wIEVDREggcGFyYW1ldGVyc1xuIik7Ci0JCQllY2RoID0gRUNfS0VZX25ld19ieV9jdXJ2ZV9uYW1lKE5JRF9zZWN0MTYzcjIpOworCQkJZWNkaCA9IEVDX0tFWV9uZXdfYnlfY3VydmVfbmFtZShOSURfWDlfNjJfcHJpbWUyNTZ2MSk7CiAJCQlpZiAoZWNkaCA9PSBOVUxMKSAKIAkJCQl7Ci0JCQkJQklPX3ByaW50ZihiaW9fZXJyLCAidW5hYmxlIHRvIGNyZWF0ZSBjdXJ2ZSAoc2VjdDE2M3IyKVxuIik7CisJCQkJQklPX3ByaW50ZihiaW9fZXJyLCAidW5hYmxlIHRvIGNyZWF0ZSBjdXJ2ZSAobmlzdHAyNTYpXG4iKTsKIAkJCQlnb3RvIGVuZDsKIAkJCQl9CiAJCQl9CkBAIC0xNDU3LDcgKzE1OTEsNyBAQAogI2lmbmRlZiBPUEVOU1NMX05PX1RMU0VYVAogCQlpZiAoY3R4MikgCiAJCQlTU0xfQ1RYX3NldF90bXBfcnNhX2NhbGxiYWNrKGN0eDIsdG1wX3JzYV9jYik7Ci0jZW5kaWYJCisjZW5kaWYJCQogCQl9CiAjZWxzZQogCWlmICghbm9fdG1wX3JzYSAmJiBTU0xfQ1RYX25lZWRfdG1wX1JTQShjdHgpKQpAQCAtMTQ5MCwxMSArMTYyNCwzNCBAQAogI2VuZGlmCiAjZW5kaWYKIAotCWlmIChjaXBoZXIgIT0gTlVMTCkKLQkJaWYoIVNTTF9DVFhfc2V0X2NpcGhlcl9saXN0KGN0eCxjaXBoZXIpKSB7Ci0JCUJJT19wcmludGYoYmlvX2VyciwiZXJyb3Igc2V0dGluZyBjaXBoZXIgbGlzdFxuIik7CisjaWZuZGVmIE9QRU5TU0xfTk9fUFNLCisjaWZkZWYgT1BFTlNTTF9OT19KUEFLRQorCWlmIChwc2tfa2V5ICE9IE5VTEwpCisjZWxzZQorCWlmIChwc2tfa2V5ICE9IE5VTEwgfHwganBha2Vfc2VjcmV0KQorI2VuZGlmCisJCXsKKwkJaWYgKHNfZGVidWcpCisJCQlCSU9fcHJpbnRmKGJpb19zX291dCwgIlBTSyBrZXkgZ2l2ZW4gb3IgSlBBS0UgaW4gdXNlLCBzZXR0aW5nIHNlcnZlciBjYWxsYmFja1xuIik7CisJCVNTTF9DVFhfc2V0X3Bza19zZXJ2ZXJfY2FsbGJhY2soY3R4LCBwc2tfc2VydmVyX2NiKTsKKwkJfQorCisJaWYgKCFTU0xfQ1RYX3VzZV9wc2tfaWRlbnRpdHlfaGludChjdHgsIHBza19pZGVudGl0eV9oaW50KSkKKwkJeworCQlCSU9fcHJpbnRmKGJpb19lcnIsImVycm9yIHNldHRpbmcgUFNLIGlkZW50aXR5IGhpbnQgdG8gY29udGV4dFxuIik7CiAJCUVSUl9wcmludF9lcnJvcnMoYmlvX2Vycik7CiAJCWdvdG8gZW5kOworCQl9CisjZW5kaWYKKworCWlmIChjaXBoZXIgIT0gTlVMTCkKKwkJeworCQlpZighU1NMX0NUWF9zZXRfY2lwaGVyX2xpc3QoY3R4LGNpcGhlcikpCisJCQl7CisJCQlCSU9fcHJpbnRmKGJpb19lcnIsImVycm9yIHNldHRpbmcgY2lwaGVyIGxpc3RcbiIpOworCQkJRVJSX3ByaW50X2Vycm9ycyhiaW9fZXJyKTsKKwkJCWdvdG8gZW5kOworCQkJfQogI2lmbmRlZiBPUEVOU1NMX05PX1RMU0VYVAogCQlpZiAoY3R4MiAmJiAhU1NMX0NUWF9zZXRfY2lwaGVyX2xpc3QoY3R4MixjaXBoZXIpKQogCQkJewpAQCAtMTUwMyw3ICsxNjYwLDcgQEAKIAkJCWdvdG8gZW5kOwogCQkJfQogI2VuZGlmCi0JfQorCQl9CiAJU1NMX0NUWF9zZXRfdmVyaWZ5KGN0eCxzX3NlcnZlcl92ZXJpZnksdmVyaWZ5X2NhbGxiYWNrKTsKIAlTU0xfQ1RYX3NldF9zZXNzaW9uX2lkX2NvbnRleHQoY3R4LCh2b2lkKikmc19zZXJ2ZXJfc2Vzc2lvbl9pZF9jb250ZXh0LAogCQlzaXplb2Ygc19zZXJ2ZXJfc2Vzc2lvbl9pZF9jb250ZXh0KTsKQEAgLTE1MjYsNiArMTY4Myw3IEBACiAJCVNTTF9DVFhfc2V0X3Rsc2V4dF9zZXJ2ZXJuYW1lX2FyZyhjdHgsICZ0bHNleHRjYnApOwogCQl9CiAjZW5kaWYKKwogCWlmIChDQWZpbGUgIT0gTlVMTCkKIAkJewogCQlTU0xfQ1RYX3NldF9jbGllbnRfQ0FfbGlzdChjdHgsU1NMX2xvYWRfY2xpZW50X0NBX2ZpbGUoQ0FmaWxlKSk7CkBAIC0xNTM0LDcgKzE2OTIsOSBAQAogCQkJU1NMX0NUWF9zZXRfY2xpZW50X0NBX2xpc3QoY3R4MixTU0xfbG9hZF9jbGllbnRfQ0FfZmlsZShDQWZpbGUpKTsKICNlbmRpZgogCQl9CisKIAlCSU9fcHJpbnRmKGJpb19zX291dCwiQUNDRVBUXG4iKTsKKwkodm9pZClCSU9fZmx1c2goYmlvX3Nfb3V0KTsKIAlpZiAod3d3KQogCQlkb19zZXJ2ZXIocG9ydCxzb2NrZXRfdHlwZSwmYWNjZXB0X3NvY2tldCx3d3dfYm9keSwgY29udGV4dCk7CiAJZWxzZQpAQCAtMTYwNiw3ICsxNzY2LDcgQEAKIAlTU0wgKmNvbj1OVUxMOwogCUJJTyAqc2JpbzsKIAlzdHJ1Y3QgdGltZXZhbCB0aW1lb3V0OwotI2lmIGRlZmluZWQoT1BFTlNTTF9TWVNfV0lORE9XUykgfHwgZGVmaW5lZChPUEVOU1NMX1NZU19NU0RPUykgfHwgZGVmaW5lZChPUEVOU1NMX1NZU19ORVRXQVJFKQorI2lmIGRlZmluZWQoT1BFTlNTTF9TWVNfV0lORE9XUykgfHwgZGVmaW5lZChPUEVOU1NMX1NZU19NU0RPUykgfHwgZGVmaW5lZChPUEVOU1NMX1NZU19ORVRXQVJFKSB8fCBkZWZpbmVkKE9QRU5TU0xfU1lTX0JFT1NfUjUpCiAJc3RydWN0IHRpbWV2YWwgdHY7CiAjZWxzZQogCXN0cnVjdCB0aW1ldmFsICp0aW1lb3V0cDsKQEAgLTE2NTgsMTMgKzE4MTgsMTggQEAKIAkJCQkJCSBzdHJsZW4oKGNoYXIgKiljb250ZXh0KSk7CiAJfQogCVNTTF9jbGVhcihjb24pOworI2lmIDAKKyNpZmRlZiBUTFNFWFRfVFlQRV9vcGFxdWVfcHJmX2lucHV0CisJU1NMX3NldF90bHNleHRfb3BhcXVlX3ByZl9pbnB1dChjb24sICJUZXN0IHNlcnZlciIsIDExKTsKKyNlbmRpZgorI2VuZGlmCiAKIAlpZiAoU1NMX3ZlcnNpb24oY29uKSA9PSBEVExTMV9WRVJTSU9OKQogCQl7CiAKIAkJc2Jpbz1CSU9fbmV3X2RncmFtKHMsQklPX05PQ0xPU0UpOwogCi0JCWlmICggZW5hYmxlX3RpbWVvdXRzKQorCQlpZiAoZW5hYmxlX3RpbWVvdXRzKQogCQkJewogCQkJdGltZW91dC50dl9zZWMgPSAwOwogCQkJdGltZW91dC50dl91c2VjID0gREdSQU1fUkNWX1RJTUVPVVQ7CkBAIC0xNjc1LDcgKzE4NDAsNiBAQAogCQkJQklPX2N0cmwoc2JpbywgQklPX0NUUkxfREdSQU1fU0VUX1NFTkRfVElNRU9VVCwgMCwgJnRpbWVvdXQpOwogCQkJfQogCi0JCQogCQlpZiAoc29ja2V0X210dSA+IDI4KQogCQkJewogCQkJU1NMX3NldF9vcHRpb25zKGNvbiwgU1NMX09QX05PX1FVRVJZX01UVSk7CkBAIC0xNzM4LDEwICsxOTAyLDEwIEBACiAJCWlmICghcmVhZF9mcm9tX3NzbGNvbikKIAkJCXsKIAkJCUZEX1pFUk8oJnJlYWRmZHMpOwotI2lmICFkZWZpbmVkKE9QRU5TU0xfU1lTX1dJTkRPV1MpICYmICFkZWZpbmVkKE9QRU5TU0xfU1lTX01TRE9TKSAmJiAhZGVmaW5lZChPUEVOU1NMX1NZU19ORVRXQVJFKQotCQkJRkRfU0VUKGZpbGVubyhzdGRpbiksJnJlYWRmZHMpOworI2lmICFkZWZpbmVkKE9QRU5TU0xfU1lTX1dJTkRPV1MpICYmICFkZWZpbmVkKE9QRU5TU0xfU1lTX01TRE9TKSAmJiAhZGVmaW5lZChPUEVOU1NMX1NZU19ORVRXQVJFKSAmJiAhZGVmaW5lZChPUEVOU1NMX1NZU19CRU9TX1I1KQorCQkJb3BlbnNzbF9mZHNldChmaWxlbm8oc3RkaW4pLCZyZWFkZmRzKTsKICNlbmRpZgotCQkJRkRfU0VUKHMsJnJlYWRmZHMpOworCQkJb3BlbnNzbF9mZHNldChzLCZyZWFkZmRzKTsKIAkJCS8qIE5vdGU6IHVuZGVyIFZNUyB3aXRoIFNPQ0tFVFNIUiB0aGUgc2Vjb25kIHBhcmFtZXRlciBpcwogCQkJICogY3VycmVudGx5IG9mIHR5cGUgKGludCAqKSB3aGVyZWFzIHVuZGVyIG90aGVyIHN5c3RlbXMKIAkJCSAqIGl0IGlzICh2b2lkICopIGlmIHlvdSBkb24ndCBoYXZlIGEgY2FzdCBpdCB3aWxsIGNob2tlCkBAIC0xNzYwLDYgKzE5MjQsMTcgQEAKIAkJCWlmKChpIDwgMCkgfHwgKCFpICYmICFfa2JoaXQoKSApICljb250aW51ZTsKIAkJCWlmKF9rYmhpdCgpKQogCQkJCXJlYWRfZnJvbV90ZXJtaW5hbCA9IDE7CisjZWxpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX0JFT1NfUjUpCisJCQkvKiBVbmRlciBCZU9TLVI1IHRoZSBzaXR1YXRpb24gaXMgc2ltaWxhciB0byBET1MgKi8KKwkJCXR2LnR2X3NlYyA9IDE7CisJCQl0di50dl91c2VjID0gMDsKKwkJCSh2b2lkKWZjbnRsKGZpbGVubyhzdGRpbiksIEZfU0VURkwsIE9fTk9OQkxPQ0spOworCQkJaT1zZWxlY3Qod2lkdGgsKHZvaWQgKikmcmVhZGZkcyxOVUxMLE5VTEwsJnR2KTsKKwkJCWlmICgoaSA8IDApIHx8ICghaSAmJiByZWFkKGZpbGVubyhzdGRpbiksIGJ1ZiwgMCkgPCAwKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChyZWFkKGZpbGVubyhzdGRpbiksIGJ1ZiwgMCkgPj0gMCkKKwkJCQlyZWFkX2Zyb21fdGVybWluYWwgPSAxOworCQkJKHZvaWQpZmNudGwoZmlsZW5vKHN0ZGluKSwgRl9TRVRGTCwgMCk7CiAjZWxzZQogCQkJaWYgKChTU0xfdmVyc2lvbihjb24pID09IERUTFMxX1ZFUlNJT04pICYmCiAJCQkJRFRMU3YxX2dldF90aW1lb3V0KGNvbiwgJnRpbWVvdXQpKQpAQCAtMTc4Nyw3ICsxOTYyLDcgQEAKIAkJCQl7CiAJCQkJaW50IGosIGxmX251bTsKIAotCQkJCWk9cmVhZChmaWxlbm8oc3RkaW4pLCBidWYsIGJ1ZnNpemUvMik7CisJCQkJaT1yYXdfcmVhZF9zdGRpbihidWYsIGJ1ZnNpemUvMik7CiAJCQkJbGZfbnVtID0gMDsKIAkJCQkvKiBib3RoIGxvb3BzIGFyZSBza2lwcGVkIHdoZW4gaSA8PSAwICovCiAJCQkJZm9yIChqID0gMDsgaiA8IGk7IGorKykKQEAgLTE4MDYsNyArMTk4MSw3IEBACiAJCQkJYXNzZXJ0KGxmX251bSA9PSAwKTsKIAkJCQl9CiAJCQllbHNlCi0JCQkJaT1yZWFkKGZpbGVubyhzdGRpbiksYnVmLGJ1ZnNpemUpOworCQkJCWk9cmF3X3JlYWRfc3RkaW4oYnVmLGJ1ZnNpemUpOwogCQkJaWYgKCFzX3F1aWV0KQogCQkJCXsKIAkJCQlpZiAoKGkgPD0gMCkgfHwgKGJ1ZlswXSA9PSAnUScpKQpAQCAtMTgyNiw2ICsyMDAxLDcgQEAKIAkJCQkJcmV0PSAtMTE7Ki8KIAkJCQkJZ290byBlcnI7CiAJCQkJCX0KKwogCQkJCWlmICgoYnVmWzBdID09ICdyJykgJiYgCiAJCQkJCSgoYnVmWzFdID09ICdcbicpIHx8IChidWZbMV0gPT0gJ1xyJykpKQogCQkJCQl7CkBAIC0xOTIyLDcgKzIwOTgsNyBAQAogI2lmZGVmIENIQVJTRVRfRUJDRElDCiAJCQkJCWFzY2lpMmViY2RpYyhidWYsYnVmLGkpOwogI2VuZGlmCi0JCQkJCXdyaXRlKGZpbGVubyhzdGRvdXQpLGJ1ZiwKKwkJCQkJcmF3X3dyaXRlX3N0ZG91dChidWYsCiAJCQkJCQkodW5zaWduZWQgaW50KWkpOwogCQkJCQlpZiAoU1NMX3BlbmRpbmcoY29uKSkgZ290byBhZ2FpbjsKIAkJCQkJYnJlYWs7CkBAIC0xOTQ2LDEzICsyMTIyLDE2IEBACiAJCQl9CiAJCX0KIGVycjoKLQlCSU9fcHJpbnRmKGJpb19zX291dCwic2h1dHRpbmcgZG93biBTU0xcbiIpOworCWlmIChjb24gIT0gTlVMTCkKKwkJeworCQlCSU9fcHJpbnRmKGJpb19zX291dCwic2h1dHRpbmcgZG93biBTU0xcbiIpOwogI2lmIDEKLQlTU0xfc2V0X3NodXRkb3duKGNvbixTU0xfU0VOVF9TSFVURE9XTnxTU0xfUkVDRUlWRURfU0hVVERPV04pOworCQlTU0xfc2V0X3NodXRkb3duKGNvbixTU0xfU0VOVF9TSFVURE9XTnxTU0xfUkVDRUlWRURfU0hVVERPV04pOwogI2Vsc2UKLQlTU0xfc2h1dGRvd24oY29uKTsKKwkJU1NMX3NodXRkb3duKGNvbik7CiAjZW5kaWYKLQlpZiAoY29uICE9IE5VTEwpIFNTTF9mcmVlKGNvbik7CisJCVNTTF9mcmVlKGNvbik7CisJCX0KIAlCSU9fcHJpbnRmKGJpb19zX291dCwiQ09OTkVDVElPTiBDTE9TRURcbiIpOwogCWlmIChidWYgIT0gTlVMTCkKIAkJewpAQCAtMjA3Niw5ICsyMjU1LDggQEAKIAljaGFyICpidWY9TlVMTDsKIAlpbnQgcmV0PTE7CiAJaW50IGksaixrLGJsYW5rLGRvdDsKLQlzdHJ1Y3Qgc3RhdCBzdF9idWY7CiAJU1NMICpjb247Ci0JU1NMX0NJUEhFUiAqYzsKKwljb25zdCBTU0xfQ0lQSEVSICpjOwogCUJJTyAqaW8sKnNzbF9iaW8sKnNiaW87CiAJbG9uZyB0b3RhbF9ieXRlczsKIApAQCAtMjM0OCwxNCArMjUyNiw3IEBACiAjZW5kaWYKIAogCQkJLyogaWYgYSBkaXJlY3RvcnksIGRvIHRoZSBpbmRleCB0aGFuZyAqLwotCQkJaWYgKHN0YXQocCwmc3RfYnVmKSA8IDApCi0JCQkJewotCQkJCUJJT19wdXRzKGlvLHRleHQpOwotCQkJCUJJT19wcmludGYoaW8sIkVycm9yIGFjY2Vzc2luZyAnJXMnXHJcbiIscCk7Ci0JCQkJRVJSX3ByaW50X2Vycm9ycyhpbyk7Ci0JCQkJYnJlYWs7Ci0JCQkJfQotCQkJaWYgKFNfSVNESVIoc3RfYnVmLnN0X21vZGUpKQorCQkJaWYgKGFwcF9pc2RpcihwKT4wKQogCQkJCXsKICNpZiAwIC8qIG11c3QgY2hlY2sgYnVmZmVyIHNpemUgKi8KIAkJCQlzdHJjYXQocCwiL2luZGV4Lmh0bWwiKTsKZGlmZiAtLWdpdCBhL2FwcHMvc19zb2NrZXQuYyBiL2FwcHMvc19zb2NrZXQuYwppbmRleCBjZjgyMzU4Li42Yjg3MTNkIDEwMDY0NAotLS0gYS9hcHBzL3Nfc29ja2V0LmMKKysrIGIvYXBwcy9zX3NvY2tldC5jCkBAIC0yMzcsMTMgKzIzNywxMSBAQAogaW50IGluaXRfY2xpZW50KGludCAqc29jaywgY2hhciAqaG9zdCwgaW50IHBvcnQsIGludCB0eXBlKQogCXsKIAl1bnNpZ25lZCBjaGFyIGlwWzRdOwotCXNob3J0IHA9MDsKIAogCWlmICghaG9zdF9pcChob3N0LCYoaXBbMF0pKSkKIAkJewogCQlyZXR1cm4oMCk7CiAJCX0KLQlpZiAocCAhPSAwKSBwb3J0PXA7CiAJcmV0dXJuKGluaXRfY2xpZW50X2lwKHNvY2ssaXAscG9ydCx0eXBlKSk7CiAJfQogCkBAIC0yNzIsNyArMjcwLDcgQEAKIAkJCQogCWlmIChzID09IElOVkFMSURfU09DS0VUKSB7IHBlcnJvcigic29ja2V0Iik7IHJldHVybigwKTsgfQogCi0jaWZuZGVmIE9QRU5TU0xfU1lTX01QRQorI2lmIGRlZmluZWQoU09fS0VFUEFMSVZFKSAmJiAhZGVmaW5lZChPUEVOU1NMX1NZU19NUEUpCiAJaWYgKHR5cGUgPT0gU09DS19TVFJFQU0pCiAJCXsKIAkJaT0wOwpAQCAtMjgyLDcgKzI4MCw3IEBACiAjZW5kaWYKIAogCWlmIChjb25uZWN0KHMsKHN0cnVjdCBzb2NrYWRkciAqKSZ0aGVtLHNpemVvZih0aGVtKSkgPT0gLTEpCi0JCXsgY2xvc2Uocyk7IHBlcnJvcigiY29ubmVjdCIpOyByZXR1cm4oMCk7IH0KKwkJeyBjbG9zZXNvY2tldChzKTsgcGVycm9yKCJjb25uZWN0Iik7IHJldHVybigwKTsgfQogCSpzb2NrPXM7CiAJcmV0dXJuKDEpOwogCX0KQEAgLTI5MSw3ICsyODksNyBAQAogCXsKIAlpbnQgc29jazsKIAljaGFyICpuYW1lID0gTlVMTDsKLQlpbnQgYWNjZXB0X3NvY2tldDsKKwlpbnQgYWNjZXB0X3NvY2tldCA9IDA7CiAJaW50IGk7CiAKIAlpZiAoIWluaXRfc2VydmVyKCZhY2NlcHRfc29ja2V0LHBvcnQsdHlwZSkpIHJldHVybigwKTsKZGlmZiAtLWdpdCBhL2FwcHMvc190aW1lLmMgYi9hcHBzL3NfdGltZS5jCmluZGV4IDkwNDk0NWUuLmI4MjNjMzMgMTAwNjQ0Ci0tLSBhL2FwcHMvc190aW1lLmMKKysrIGIvYXBwcy9zX3RpbWUuYwpAQCAtODUsNTQgKzg1LDYgQEAKICNpbmNsdWRlIE9QRU5TU0xfVU5JU1RECiAjZW5kaWYKIAotI2lmICFkZWZpbmVkKE9QRU5TU0xfU1lTX05FVFdBUkUpICYmICFkZWZpbmVkKE9QRU5TU0xfU1lTX01TRE9TKSAmJiAhZGVmaW5lZChPUEVOU1NMX1NZU19WWFdPUktTKSAmJiAoIWRlZmluZWQoT1BFTlNTTF9TWVNfVk1TKSB8fCBkZWZpbmVkKF9fREVDQykpCi0jZGVmaW5lIFRJTUVTCi0jZW5kaWYKLQotI2lmbmRlZiBfSVJJWAotI2luY2x1ZGUgPHRpbWUuaD4KLSNlbmRpZgotI2lmZGVmIFRJTUVTCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3RpbWVzLmg+Ci0jZW5kaWYKLQotLyogRGVwZW5kaW5nIG9uIHRoZSBWTVMgdmVyc2lvbiwgdGhlIHRtcyBzdHJ1Y3R1cmUgaXMgcGVyaGFwcyBkZWZpbmVkLgotICAgVGhlIF9fVE1TIG1hY3JvIHdpbGwgc2hvdyBpZiBpdCB3YXMuICBJZiBpdCB3YXNuJ3QgZGVmaW5lZCwgd2Ugc2hvdWxkCi0gICB1bmRlZmluZSBUSU1FUywgc2luY2UgdGhhdCB0ZWxscyB0aGUgcmVzdCBvZiB0aGUgcHJvZ3JhbSBob3cgdGhpbmdzCi0gICBzaG91bGQgYmUgaGFuZGxlZC4JCQkJLS0gUmljaGFyZCBMZXZpdHRlICovCi0jaWYgZGVmaW5lZChPUEVOU1NMX1NZU19WTVNfREVDQykgJiYgIWRlZmluZWQoX19UTVMpCi0jdW5kZWYgVElNRVMKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoVElNRVMpICYmICFkZWZpbmVkKE9QRU5TU0xfU1lTX1ZYV09SS1MpICYmICFkZWZpbmVkKE9QRU5TU0xfU1lTX05FVFdBUkUpCi0jaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoc3VuKSB8fCBkZWZpbmVkKF9fdWx0cml4KQotI2RlZmluZSBfUE9TSVhfU09VUkNFCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLQotLyogVGhlIGZvbGxvd2luZyBpZiBmcm9tIHRpbWVzKDMpIG1hbiBwYWdlLiAgSXQgbWF5IG5lZWQgdG8gYmUgY2hhbmdlZAotKi8KLSNpZm5kZWYgSFoKLSMgaWZkZWYgX1NDX0NMS19UQ0sKLSMgIGRlZmluZSBIWiAoKGRvdWJsZSlzeXNjb25mKF9TQ19DTEtfVENLKSkKLSMgZWxzZQotIyAgaWZuZGVmIENMS19UQ0sKLSMgICBpZm5kZWYgX0JTRF9DTEtfVENLXyAvKiBGcmVlQlNEIGhhY2sgKi8KLSMgICAgZGVmaW5lIEhaCTEwMC4wCi0jICAgZWxzZSAvKiBfQlNEX0NMS19UQ0tfICovCi0jICAgIGRlZmluZSBIWiAoKGRvdWJsZSlfQlNEX0NMS19UQ0tfKQotIyAgIGVuZGlmCi0jICBlbHNlIC8qIENMS19UQ0sgKi8KLSMgICBkZWZpbmUgSFogKChkb3VibGUpQ0xLX1RDSykKLSMgIGVuZGlmCi0jIGVuZGlmCi0jZW5kaWYKLQogI3VuZGVmIFBST0cKICNkZWZpbmUgUFJPRyBzX3RpbWVfbWFpbgogCkBAIC0xNzcsNyArMTI5LDcgQEAKIHN0YXRpYyBpbnQgdG1fdmVyaWZ5ID0gU1NMX1ZFUklGWV9OT05FOwogc3RhdGljIGludCBtYXhUaW1lID0gU0VDT05EUzsKIHN0YXRpYyBTU0xfQ1RYICp0bV9jdHg9TlVMTDsKLXN0YXRpYyBTU0xfTUVUSE9EICpzX3RpbWVfbWV0aD1OVUxMOworc3RhdGljIGNvbnN0IFNTTF9NRVRIT0QgKnNfdGltZV9tZXRoPU5VTEw7CiBzdGF0aWMgY2hhciAqc193d3dfcGF0aD1OVUxMOwogc3RhdGljIGxvbmcgYnl0ZXNfcmVhZD0wOyAKIHN0YXRpYyBpbnQgc3RfYnVncz0wOwpAQCAtMzcyLDYzICszMjQsOCBAQAogCiBzdGF0aWMgZG91YmxlIHRtX1RpbWVfRihpbnQgcykKIAl7Ci0Jc3RhdGljIGRvdWJsZSByZXQ7Ci0jaWZkZWYgVElNRVMKLQlzdGF0aWMgc3RydWN0IHRtcyB0c3RhcnQsdGVuZDsKLQotCWlmKHMgPT0gU1RBUlQpIHsKLQkJdGltZXMoJnRzdGFydCk7Ci0JCXJldHVybigwKTsKLQl9IGVsc2UgewotCQl0aW1lcygmdGVuZCk7Ci0JCXJldD0oKGRvdWJsZSkodGVuZC50bXNfdXRpbWUtdHN0YXJ0LnRtc191dGltZSkpL0haOwotCQlyZXR1cm4oKHJldCA9PSAwLjApPzFlLTY6cmV0KTsKKwlyZXR1cm4gYXBwX3RtaW50ZXJ2YWwocywxKTsKIAl9Ci0jZWxpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX05FVFdBUkUpCi0gICAgc3RhdGljIGNsb2NrX3QgdHN0YXJ0LHRlbmQ7Ci0KLSAgICBpZiAocyA9PSBTVEFSVCkKLSAgICB7Ci0gICAgICAgIHRzdGFydD1jbG9jaygpOwotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHRlbmQ9Y2xvY2soKTsKLSAgICAgICAgcmV0PShkb3VibGUpKChkb3VibGUpKHRlbmQpLShkb3VibGUpKHRzdGFydCkpOwotICAgICAgICByZXR1cm4oKHJldCA8IDAuMDAxKT8wLjAwMTpyZXQpOwotICAgIH0KLSNlbGlmIGRlZmluZWQoT1BFTlNTTF9TWVNfVlhXT1JLUykKLSAgICAgICAgewotCXN0YXRpYyB1bnNpZ25lZCBsb25nIHRpY2tfc3RhcnQsIHRpY2tfZW5kOwotCi0JaWYoIHMgPT0gU1RBUlQgKQotCQl7Ci0JCXRpY2tfc3RhcnQgPSB0aWNrR2V0KCk7Ci0JCXJldHVybiAwOwotCQl9Ci0JZWxzZQotCQl7Ci0JCXRpY2tfZW5kID0gdGlja0dldCgpOwotCQlyZXQgPSAoZG91YmxlKSh0aWNrX2VuZCAtIHRpY2tfc3RhcnQpIC8gKGRvdWJsZSlzeXNDbGtSYXRlR2V0KCk7Ci0JCXJldHVybigocmV0ID09IDAuMCk/MWUtNjpyZXQpOwotCQl9Ci0gICAgICAgIH0KLSNlbHNlIC8qICF0aW1lcygpICovCi0Jc3RhdGljIHN0cnVjdCB0aW1lYiB0c3RhcnQsdGVuZDsKLQlsb25nIGk7Ci0KLQlpZihzID09IFNUQVJUKSB7Ci0JCWZ0aW1lKCZ0c3RhcnQpOwotCQlyZXR1cm4oMCk7Ci0JfSBlbHNlIHsKLQkJZnRpbWUoJnRlbmQpOwotCQlpPShsb25nKXRlbmQubWlsbGl0bS0obG9uZyl0c3RhcnQubWlsbGl0bTsKLQkJcmV0PSgoZG91YmxlKSh0ZW5kLnRpbWUtdHN0YXJ0LnRpbWUpKSsoKGRvdWJsZSlpKS8xMDAwLjA7Ci0JCXJldHVybigocmV0ID09IDAuMCk/MWUtNjpyZXQpOwotCX0KLSNlbmRpZgotfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIE1BSU4gLSBtYWluIHByb2Nlc3NpbmcgYXJlYSBmb3IgY2xpZW50CkBAIC03MDQsNyArNjAxLDcgQEAKIAkJCWk9U1NMX2dldF9mZChzZXJ2ZXJDb24pOwogCQkJd2lkdGg9aSsxOwogCQkJRkRfWkVSTygmcmVhZGZkcyk7Ci0JCQlGRF9TRVQoaSwmcmVhZGZkcyk7CisJCQlvcGVuc3NsX2Zkc2V0KGksJnJlYWRmZHMpOwogCQkJLyogTm90ZTogdW5kZXIgVk1TIHdpdGggU09DS0VUU0hSIHRoZSAybmQgcGFyYW1ldGVyCiAJCQkgKiBpcyBjdXJyZW50bHkgb2YgdHlwZSAoaW50ICopIHdoZXJlYXMgdW5kZXIgb3RoZXIKIAkJCSAqIHN5c3RlbXMgaXQgaXMgKHZvaWQgKikgaWYgeW91IGRvbid0IGhhdmUgYSBjYXN0IGl0CmRpZmYgLS1naXQgYS9hcHBzL3NtaW1lLmMgYi9hcHBzL3NtaW1lLmMKaW5kZXggNzU4MDRiOC4uYzU4M2Y4YSAxMDA2NDQKLS0tIGEvYXBwcy9zbWltZS5jCisrKyBiL2FwcHMvc21pbWUuYwpAQCAtNzMsMTEgKzczLDE0IEBACiBzdGF0aWMgaW50IHNtaW1lX2NiKGludCBvaywgWDUwOV9TVE9SRV9DVFggKmN0eCk7CiAKICNkZWZpbmUgU01JTUVfT1AJMHgxMAorI2RlZmluZSBTTUlNRV9JUAkweDIwCisjZGVmaW5lIFNNSU1FX1NJR05FUlMJMHg0MAogI2RlZmluZSBTTUlNRV9FTkNSWVBUCSgxIHwgU01JTUVfT1ApCi0jZGVmaW5lIFNNSU1FX0RFQ1JZUFQJMgotI2RlZmluZSBTTUlNRV9TSUdOCSgzIHwgU01JTUVfT1ApCi0jZGVmaW5lIFNNSU1FX1ZFUklGWQk0Ci0jZGVmaW5lIFNNSU1FX1BLN09VVAk1CisjZGVmaW5lIFNNSU1FX0RFQ1JZUFQJKDIgfCBTTUlNRV9JUCkKKyNkZWZpbmUgU01JTUVfU0lHTgkoMyB8IFNNSU1FX09QIHwgU01JTUVfU0lHTkVSUykKKyNkZWZpbmUgU01JTUVfVkVSSUZZCSg0IHwgU01JTUVfSVApCisjZGVmaW5lIFNNSU1FX1BLN09VVAkoNSB8IFNNSU1FX0lQIHwgU01JTUVfT1ApCisjZGVmaW5lIFNNSU1FX1JFU0lHTgkoNiB8IFNNSU1FX0lQIHwgU01JTUVfT1AgfCBTTUlNRV9TSUdORVJTKQogCiBpbnQgTUFJTihpbnQsIGNoYXIgKiopOwogCkBAIC05MCw2ICs5Myw3IEBACiAJY29uc3QgY2hhciAqaW5tb2RlID0gInIiLCAqb3V0bW9kZSA9ICJ3IjsKIAljaGFyICppbmZpbGUgPSBOVUxMLCAqb3V0ZmlsZSA9IE5VTEw7CiAJY2hhciAqc2lnbmVyZmlsZSA9IE5VTEwsICpyZWNpcGZpbGUgPSBOVUxMOworCVNUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSAqc2tzaWduZXJzID0gTlVMTCwgKnNra2V5cyA9IE5VTEw7CiAJY2hhciAqY2VydGZpbGUgPSBOVUxMLCAqa2V5ZmlsZSA9IE5VTEwsICpjb250ZmlsZT1OVUxMOwogCWNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciA9IE5VTEw7CiAJUEtDUzcgKnA3ID0gTlVMTDsKQEAgLTEwNSw2ICsxMDksOCBAQAogCWNoYXIgKnBhc3NhcmdpbiA9IE5VTEwsICpwYXNzaW4gPSBOVUxMOwogCWNoYXIgKmlucmFuZCA9IE5VTEw7CiAJaW50IG5lZWRfcmFuZCA9IDA7CisJaW50IGluZGVmID0gMDsKKwljb25zdCBFVlBfTUQgKnNpZ25fbWQgPSBOVUxMOwogCWludCBpbmZvcm1hdCA9IEZPUk1BVF9TTUlNRSwgb3V0Zm9ybWF0ID0gRk9STUFUX1NNSU1FOwogICAgICAgICBpbnQga2V5Zm9ybSA9IEZPUk1BVF9QRU07CiAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCkBAIC0xMzUsNiArMTQxLDggQEAKIAkJCW9wZXJhdGlvbiA9IFNNSU1FX0RFQ1JZUFQ7CiAJCWVsc2UgaWYgKCFzdHJjbXAgKCphcmdzLCAiLXNpZ24iKSkKIAkJCW9wZXJhdGlvbiA9IFNNSU1FX1NJR047CisJCWVsc2UgaWYgKCFzdHJjbXAgKCphcmdzLCAiLXJlc2lnbiIpKQorCQkJb3BlcmF0aW9uID0gU01JTUVfUkVTSUdOOwogCQllbHNlIGlmICghc3RyY21wICgqYXJncywgIi12ZXJpZnkiKSkKIAkJCW9wZXJhdGlvbiA9IFNNSU1FX1ZFUklGWTsKIAkJZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3MsICItcGs3b3V0IikpCkBAIC0xOTMsMjA1ICsyMDEsMjA5IEBACiAJCQkJZmxhZ3MgfD0gUEtDUzdfQklOQVJZOwogCQllbHNlIGlmICghc3RyY21wICgqYXJncywgIi1ub3NpZ3MiKSkKIAkJCQlmbGFncyB8PSBQS0NTN19OT1NJR1M7CisJCWVsc2UgaWYgKCFzdHJjbXAgKCphcmdzLCAiLXN0cmVhbSIpKQorCQkJCWluZGVmID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3MsICItaW5kZWYiKSkKKwkJCQlpbmRlZiA9IDE7CisJCWVsc2UgaWYgKCFzdHJjbXAgKCphcmdzLCAiLW5vaW5kZWYiKSkKKwkJCQlpbmRlZiA9IDA7CiAJCWVsc2UgaWYgKCFzdHJjbXAgKCphcmdzLCAiLW5vb2xkbWltZSIpKQogCQkJCWZsYWdzIHw9IFBLQ1M3X05PT0xETUlNRVRZUEU7CiAJCWVsc2UgaWYgKCFzdHJjbXAgKCphcmdzLCAiLWNybGZlb2wiKSkKIAkJCQlmbGFncyB8PSBQS0NTN19DUkxGRU9MOwogCQllbHNlIGlmICghc3RyY21wKCphcmdzLCItcmFuZCIpKQogCQkJewotCQkJaWYgKGFyZ3NbMV0pCi0JCQkJewotCQkJCWFyZ3MrKzsKLQkJCQlpbnJhbmQgPSAqYXJnczsKLQkJCQl9Ci0JCQllbHNlCi0JCQkJYmFkYXJnID0gMTsKKwkJCWlmICghYXJnc1sxXSkKKwkJCQlnb3RvIGFyZ2VycjsKKwkJCWFyZ3MrKzsKKwkJCWlucmFuZCA9ICphcmdzOwogCQkJbmVlZF9yYW5kID0gMTsKIAkJCX0KICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKIAkJZWxzZSBpZiAoIXN0cmNtcCgqYXJncywiLWVuZ2luZSIpKQogCQkJewotCQkJaWYgKGFyZ3NbMV0pCi0JCQkJewotCQkJCWFyZ3MrKzsKLQkJCQllbmdpbmUgPSAqYXJnczsKLQkJCQl9Ci0JCQllbHNlIGJhZGFyZyA9IDE7CisJCQlpZiAoIWFyZ3NbMV0pCisJCQkJZ290byBhcmdlcnI7CisJCQllbmdpbmUgPSAqKythcmdzOwogCQkJfQogI2VuZGlmCiAJCWVsc2UgaWYgKCFzdHJjbXAoKmFyZ3MsIi1wYXNzaW4iKSkKIAkJCXsKLQkJCWlmIChhcmdzWzFdKQotCQkJCXsKLQkJCQlhcmdzKys7Ci0JCQkJcGFzc2FyZ2luID0gKmFyZ3M7Ci0JCQkJfQotCQkJZWxzZQotCQkJCWJhZGFyZyA9IDE7CisJCQlpZiAoIWFyZ3NbMV0pCisJCQkJZ290byBhcmdlcnI7CisJCQlwYXNzYXJnaW4gPSAqKythcmdzOwogCQkJfQogCQllbHNlIGlmICghc3RyY21wICgqYXJncywgIi10byIpKQogCQkJewotCQkJaWYgKGFyZ3NbMV0pCi0JCQkJewotCQkJCWFyZ3MrKzsKLQkJCQl0byA9ICphcmdzOwotCQkJCX0KLQkJCWVsc2UKLQkJCQliYWRhcmcgPSAxOworCQkJaWYgKCFhcmdzWzFdKQorCQkJCWdvdG8gYXJnZXJyOworCQkJdG8gPSAqKythcmdzOwogCQkJfQogCQllbHNlIGlmICghc3RyY21wICgqYXJncywgIi1mcm9tIikpCiAJCQl7Ci0JCQlpZiAoYXJnc1sxXSkKLQkJCQl7Ci0JCQkJYXJncysrOwotCQkJCWZyb20gPSAqYXJnczsKLQkJCQl9Ci0JCQllbHNlIGJhZGFyZyA9IDE7CisJCQlpZiAoIWFyZ3NbMV0pCisJCQkJZ290byBhcmdlcnI7CisJCQlmcm9tID0gKisrYXJnczsKIAkJCX0KIAkJZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3MsICItc3ViamVjdCIpKQogCQkJewotCQkJaWYgKGFyZ3NbMV0pCi0JCQkJewotCQkJCWFyZ3MrKzsKLQkJCQlzdWJqZWN0ID0gKmFyZ3M7Ci0JCQkJfQotCQkJZWxzZQotCQkJCWJhZGFyZyA9IDE7CisJCQlpZiAoIWFyZ3NbMV0pCisJCQkJZ290byBhcmdlcnI7CisJCQlzdWJqZWN0ID0gKisrYXJnczsKIAkJCX0KIAkJZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3MsICItc2lnbmVyIikpCiAJCQl7Ci0JCQlpZiAoYXJnc1sxXSkKKwkJCWlmICghYXJnc1sxXSkKKwkJCQlnb3RvIGFyZ2VycjsKKwkJCS8qIElmIHByZXZpb3VzIC1zaWduZXIgYXJndW1lbnQgYWRkIHNpZ25lciB0byBsaXN0ICovCisKKwkJCWlmIChzaWduZXJmaWxlKQogCQkJCXsKLQkJCQlhcmdzKys7Ci0JCQkJc2lnbmVyZmlsZSA9ICphcmdzOworCQkJCWlmICghc2tzaWduZXJzKQorCQkJCQlza3NpZ25lcnMgPSBza19PUEVOU1NMX1NUUklOR19uZXdfbnVsbCgpOworCQkJCXNrX09QRU5TU0xfU1RSSU5HX3B1c2goc2tzaWduZXJzLCBzaWduZXJmaWxlKTsKKwkJCQlpZiAoIWtleWZpbGUpCisJCQkJCWtleWZpbGUgPSBzaWduZXJmaWxlOworCQkJCWlmICghc2trZXlzKQorCQkJCQlza2tleXMgPSBza19PUEVOU1NMX1NUUklOR19uZXdfbnVsbCgpOworCQkJCXNrX09QRU5TU0xfU1RSSU5HX3B1c2goc2trZXlzLCBrZXlmaWxlKTsKKwkJCQlrZXlmaWxlID0gTlVMTDsKIAkJCQl9Ci0JCQllbHNlCi0JCQkJYmFkYXJnID0gMTsKKwkJCXNpZ25lcmZpbGUgPSAqKythcmdzOwogCQkJfQogCQllbHNlIGlmICghc3RyY21wICgqYXJncywgIi1yZWNpcCIpKQogCQkJewotCQkJaWYgKGFyZ3NbMV0pCisJCQlpZiAoIWFyZ3NbMV0pCisJCQkJZ290byBhcmdlcnI7CisJCQlyZWNpcGZpbGUgPSAqKythcmdzOworCQkJfQorCQllbHNlIGlmICghc3RyY21wICgqYXJncywgIi1tZCIpKQorCQkJeworCQkJaWYgKCFhcmdzWzFdKQorCQkJCWdvdG8gYXJnZXJyOworCQkJc2lnbl9tZCA9IEVWUF9nZXRfZGlnZXN0YnluYW1lKCorK2FyZ3MpOworCQkJaWYgKHNpZ25fbWQgPT0gTlVMTCkKIAkJCQl7Ci0JCQkJYXJncysrOwotCQkJCXJlY2lwZmlsZSA9ICphcmdzOworCQkJCUJJT19wcmludGYoYmlvX2VyciwgIlVua25vd24gZGlnZXN0ICVzXG4iLAorCQkJCQkJCSphcmdzKTsKKwkJCQlnb3RvIGFyZ2VycjsKIAkJCQl9Ci0JCQllbHNlIGJhZGFyZyA9IDE7CiAJCQl9CiAJCWVsc2UgaWYgKCFzdHJjbXAgKCphcmdzLCAiLWlua2V5IikpCiAJCQl7Ci0JCQlpZiAoYXJnc1sxXSkKKwkJCWlmICghYXJnc1sxXSkJCisJCQkJZ290byBhcmdlcnI7CisJCQkvKiBJZiBwcmV2aW91cyAtaW5rZXkgYXJ1bWVudCBhZGQgc2lnbmVyIHRvIGxpc3QgKi8KKwkJCWlmIChrZXlmaWxlKQogCQkJCXsKLQkJCQlhcmdzKys7Ci0JCQkJa2V5ZmlsZSA9ICphcmdzOworCQkJCWlmICghc2lnbmVyZmlsZSkKKwkJCQkJeworCQkJCQlCSU9fcHV0cyhiaW9fZXJyLCAiSWxsZWdhbCAtaW5rZXkgd2l0aG91dCAtc2lnbmVyXG4iKTsKKwkJCQkJZ290byBhcmdlcnI7CisJCQkJCX0KKwkJCQlpZiAoIXNrc2lnbmVycykKKwkJCQkJc2tzaWduZXJzID0gc2tfT1BFTlNTTF9TVFJJTkdfbmV3X251bGwoKTsKKwkJCQlza19PUEVOU1NMX1NUUklOR19wdXNoKHNrc2lnbmVycywgc2lnbmVyZmlsZSk7CisJCQkJc2lnbmVyZmlsZSA9IE5VTEw7CisJCQkJaWYgKCFza2tleXMpCisJCQkJCXNra2V5cyA9IHNrX09QRU5TU0xfU1RSSU5HX25ld19udWxsKCk7CisJCQkJc2tfT1BFTlNTTF9TVFJJTkdfcHVzaChza2tleXMsIGtleWZpbGUpOwogCQkJCX0KLQkJCWVsc2UKLQkJCQliYWRhcmcgPSAxOwotCQl9CisJCQlrZXlmaWxlID0gKisrYXJnczsKKwkJCX0KIAkJZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3MsICIta2V5Zm9ybSIpKQogCQkJewotCQkJaWYgKGFyZ3NbMV0pCi0JCQkJewotCQkJCWFyZ3MrKzsKLQkJCQlrZXlmb3JtID0gc3RyMmZtdCgqYXJncyk7Ci0JCQkJfQotCQkJZWxzZQotCQkJCWJhZGFyZyA9IDE7CisJCQlpZiAoIWFyZ3NbMV0pCisJCQkJZ290byBhcmdlcnI7CisJCQlrZXlmb3JtID0gc3RyMmZtdCgqKythcmdzKTsKIAkJCX0KIAkJZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3MsICItY2VydGZpbGUiKSkKIAkJCXsKLQkJCWlmIChhcmdzWzFdKQotCQkJCXsKLQkJCQlhcmdzKys7Ci0JCQkJY2VydGZpbGUgPSAqYXJnczsKLQkJCQl9Ci0JCQllbHNlCi0JCQkJYmFkYXJnID0gMTsKKwkJCWlmICghYXJnc1sxXSkKKwkJCQlnb3RvIGFyZ2VycjsKKwkJCWNlcnRmaWxlID0gKisrYXJnczsKIAkJCX0KIAkJZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3MsICItQ0FmaWxlIikpCiAJCQl7Ci0JCQlpZiAoYXJnc1sxXSkKLQkJCQl7Ci0JCQkJYXJncysrOwotCQkJCUNBZmlsZSA9ICphcmdzOwotCQkJCX0KLQkJCWVsc2UKLQkJCQliYWRhcmcgPSAxOworCQkJaWYgKCFhcmdzWzFdKQorCQkJCWdvdG8gYXJnZXJyOworCQkJQ0FmaWxlID0gKisrYXJnczsKIAkJCX0KIAkJZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3MsICItQ0FwYXRoIikpCiAJCQl7Ci0JCQlpZiAoYXJnc1sxXSkKLQkJCQl7Ci0JCQkJYXJncysrOwotCQkJCUNBcGF0aCA9ICphcmdzOwotCQkJCX0KLQkJCWVsc2UKLQkJCQliYWRhcmcgPSAxOworCQkJaWYgKCFhcmdzWzFdKQorCQkJCWdvdG8gYXJnZXJyOworCQkJQ0FwYXRoID0gKisrYXJnczsKIAkJCX0KIAkJZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3MsICItaW4iKSkKIAkJCXsKLQkJCWlmIChhcmdzWzFdKQotCQkJCXsKLQkJCQlhcmdzKys7Ci0JCQkJaW5maWxlID0gKmFyZ3M7Ci0JCQkJfQotCQkJZWxzZQotCQkJCWJhZGFyZyA9IDE7CisJCQlpZiAoIWFyZ3NbMV0pCisJCQkJZ290byBhcmdlcnI7CisJCQlpbmZpbGUgPSAqKythcmdzOwogCQkJfQogCQllbHNlIGlmICghc3RyY21wICgqYXJncywgIi1pbmZvcm0iKSkKIAkJCXsKLQkJCWlmIChhcmdzWzFdKQotCQkJCXsKLQkJCQlhcmdzKys7Ci0JCQkJaW5mb3JtYXQgPSBzdHIyZm10KCphcmdzKTsKLQkJCQl9Ci0JCQllbHNlCi0JCQkJYmFkYXJnID0gMTsKKwkJCWlmICghYXJnc1sxXSkKKwkJCQlnb3RvIGFyZ2VycjsKKwkJCWluZm9ybWF0ID0gc3RyMmZtdCgqKythcmdzKTsKIAkJCX0KIAkJZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3MsICItb3V0Zm9ybSIpKQogCQkJewotCQkJaWYgKGFyZ3NbMV0pCi0JCQkJewotCQkJCWFyZ3MrKzsKLQkJCQlvdXRmb3JtYXQgPSBzdHIyZm10KCphcmdzKTsKLQkJCQl9Ci0JCQllbHNlCi0JCQkJYmFkYXJnID0gMTsKKwkJCWlmICghYXJnc1sxXSkKKwkJCQlnb3RvIGFyZ2VycjsKKwkJCW91dGZvcm1hdCA9IHN0cjJmbXQoKisrYXJncyk7CiAJCQl9CiAJCWVsc2UgaWYgKCFzdHJjbXAgKCphcmdzLCAiLW91dCIpKQogCQkJewotCQkJaWYgKGFyZ3NbMV0pCi0JCQkJewotCQkJCWFyZ3MrKzsKLQkJCQlvdXRmaWxlID0gKmFyZ3M7Ci0JCQkJfQotCQkJZWxzZQotCQkJCWJhZGFyZyA9IDE7CisJCQlpZiAoIWFyZ3NbMV0pCisJCQkJZ290byBhcmdlcnI7CisJCQlvdXRmaWxlID0gKisrYXJnczsKIAkJCX0KIAkJZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3MsICItY29udGVudCIpKQogCQkJewotCQkJaWYgKGFyZ3NbMV0pCi0JCQkJewotCQkJCWFyZ3MrKzsKLQkJCQljb250ZmlsZSA9ICphcmdzOwotCQkJCX0KLQkJCWVsc2UKLQkJCQliYWRhcmcgPSAxOworCQkJaWYgKCFhcmdzWzFdKQorCQkJCWdvdG8gYXJnZXJyOworCQkJY29udGZpbGUgPSAqKythcmdzOwogCQkJfQogCQllbHNlIGlmIChhcmdzX3ZlcmlmeSgmYXJncywgTlVMTCwgJmJhZGFyZywgYmlvX2VyciwgJnZwbSkpCiAJCQljb250aW51ZTsKLQkJZWxzZQorCQllbHNlIGlmICgoY2lwaGVyID0gRVZQX2dldF9jaXBoZXJieW5hbWUoKmFyZ3MgKyAxKSkgPT0gTlVMTCkKIAkJCWJhZGFyZyA9IDE7CiAJCWFyZ3MrKzsKIAkJfQogCi0KLQlpZiAob3BlcmF0aW9uID09IFNNSU1FX1NJR04pCisJaWYgKCEob3BlcmF0aW9uICYgU01JTUVfU0lHTkVSUykgJiYgKHNra2V5cyB8fCBza3NpZ25lcnMpKQogCQl7Ci0JCWlmICghc2lnbmVyZmlsZSkKKwkJQklPX3B1dHMoYmlvX2VyciwgIk11bHRpcGxlIHNpZ25lcnMgb3Iga2V5cyBub3QgYWxsb3dlZFxuIik7CisJCWdvdG8gYXJnZXJyOworCQl9CisKKwlpZiAob3BlcmF0aW9uICYgU01JTUVfU0lHTkVSUykKKwkJeworCQkvKiBDaGVjayB0byBzZWUgaWYgYW55IGZpbmFsIHNpZ25lciBuZWVkcyB0byBiZSBhcHBlbmRlZCAqLworCQlpZiAoa2V5ZmlsZSAmJiAhc2lnbmVyZmlsZSkKKwkJCXsKKwkJCUJJT19wdXRzKGJpb19lcnIsICJJbGxlZ2FsIC1pbmtleSB3aXRob3V0IC1zaWduZXJcbiIpOworCQkJZ290byBhcmdlcnI7CisJCQl9CisJCWlmIChzaWduZXJmaWxlKQorCQkJeworCQkJaWYgKCFza3NpZ25lcnMpCisJCQkJc2tzaWduZXJzID0gc2tfT1BFTlNTTF9TVFJJTkdfbmV3X251bGwoKTsKKwkJCXNrX09QRU5TU0xfU1RSSU5HX3B1c2goc2tzaWduZXJzLCBzaWduZXJmaWxlKTsKKwkJCWlmICghc2trZXlzKQorCQkJCXNra2V5cyA9IHNrX09QRU5TU0xfU1RSSU5HX25ld19udWxsKCk7CisJCQlpZiAoIWtleWZpbGUpCisJCQkJa2V5ZmlsZSA9IHNpZ25lcmZpbGU7CisJCQlza19PUEVOU1NMX1NUUklOR19wdXNoKHNra2V5cywga2V5ZmlsZSk7CisJCQl9CisJCWlmICghc2tzaWduZXJzKQogCQkJewogCQkJQklPX3ByaW50ZihiaW9fZXJyLCAiTm8gc2lnbmVyIGNlcnRpZmljYXRlIHNwZWNpZmllZFxuIik7CiAJCQliYWRhcmcgPSAxOwogCQkJfQorCQlzaWduZXJmaWxlID0gTlVMTDsKKwkJa2V5ZmlsZSA9IE5VTEw7CiAJCW5lZWRfcmFuZCA9IDE7CiAJCX0KIAllbHNlIGlmIChvcGVyYXRpb24gPT0gU01JTUVfREVDUllQVCkKQEAgLTQxNiw2ICs0MjgsNyBAQAogCiAJaWYgKGJhZGFyZykKIAkJeworCQlhcmdlcnI6CiAJCUJJT19wcmludGYgKGJpb19lcnIsICJVc2FnZSBzbWltZSBbb3B0aW9uc10gY2VydC5wZW0gLi4uXG4iKTsKIAkJQklPX3ByaW50ZiAoYmlvX2VyciwgIndoZXJlIG9wdGlvbnMgYXJlXG4iKTsKIAkJQklPX3ByaW50ZiAoYmlvX2VyciwgIi1lbmNyeXB0ICAgICAgIGVuY3J5cHQgbWVzc2FnZVxuIik7CkBAIC00OTksMTMgKzUxMiwxMSBAQAogCiAJcmV0ID0gMjsKIAotCWlmIChvcGVyYXRpb24gIT0gU01JTUVfU0lHTikKKwlpZiAoIShvcGVyYXRpb24gJiBTTUlNRV9TSUdORVJTKSkKIAkJZmxhZ3MgJj0gflBLQ1M3X0RFVEFDSEVEOwogCiAJaWYgKG9wZXJhdGlvbiAmIFNNSU1FX09QKQogCQl7Ci0JCWlmIChmbGFncyAmIFBLQ1M3X0JJTkFSWSkKLQkJCWlubW9kZSA9ICJyYiI7CiAJCWlmIChvdXRmb3JtYXQgPT0gRk9STUFUX0FTTjEpCiAJCQlvdXRtb2RlID0gIndiIjsKIAkJfQpAQCAtNTEzLDkgKzUyNCwxOCBAQAogCQl7CiAJCWlmIChmbGFncyAmIFBLQ1M3X0JJTkFSWSkKIAkJCW91dG1vZGUgPSAid2IiOworCQl9CisKKwlpZiAob3BlcmF0aW9uICYgU01JTUVfSVApCisJCXsKIAkJaWYgKGluZm9ybWF0ID09IEZPUk1BVF9BU04xKQogCQkJaW5tb2RlID0gInJiIjsKIAkJfQorCWVsc2UKKwkJeworCQlpZiAoZmxhZ3MgJiBQS0NTN19CSU5BUlkpCisJCQlpbm1vZGUgPSAicmIiOworCQl9CiAKIAlpZiAob3BlcmF0aW9uID09IFNNSU1FX0VOQ1JZUFQpCiAJCXsKQEAgLTU0NSwyNiArNTY1LDExIEBACiAJCQl9CiAJCX0KIAotCWlmIChzaWduZXJmaWxlICYmIChvcGVyYXRpb24gPT0gU01JTUVfU0lHTikpCi0JCXsKLQkJaWYgKCEoc2lnbmVyID0gbG9hZF9jZXJ0KGJpb19lcnIsc2lnbmVyZmlsZSxGT1JNQVRfUEVNLCBOVUxMLAotCQkJZSwgInNpZ25lciBjZXJ0aWZpY2F0ZSIpKSkKLQkJCXsKLSNpZiAwCQkJLyogQW4gYXBwcm9wcmkgbWVzc2FnZSBoYXMgYWxyZWFkeSBiZWVuIHByaW50ZWQgKi8KLQkJCUJJT19wcmludGYoYmlvX2VyciwgIkNhbid0IHJlYWQgc2lnbmVyIGNlcnRpZmljYXRlIGZpbGUgJXNcbiIsIHNpZ25lcmZpbGUpOwotI2VuZGlmCi0JCQlnb3RvIGVuZDsKLQkJCX0KLQkJfQotCiAJaWYgKGNlcnRmaWxlKQogCQl7CiAJCWlmICghKG90aGVyID0gbG9hZF9jZXJ0cyhiaW9fZXJyLGNlcnRmaWxlLEZPUk1BVF9QRU0sIE5VTEwsCiAJCQllLCAiY2VydGlmaWNhdGUgZmlsZSIpKSkKIAkJCXsKLSNpZiAwCQkJLyogQW4gYXBwcm9wcmlhdGUgbWVzc2FnZSBoYXMgYWxyZWFkeSBiZWVuIHByaW50ZWQgKi8KLQkJCUJJT19wcmludGYoYmlvX2VyciwgIkNhbid0IHJlYWQgY2VydGlmaWNhdGUgZmlsZSAlc1xuIiwgY2VydGZpbGUpOwotI2VuZGlmCiAJCQlFUlJfcHJpbnRfZXJyb3JzKGJpb19lcnIpOwogCQkJZ290byBlbmQ7CiAJCQl9CkBAIC01NzUsOSArNTgwLDYgQEAKIAkJaWYgKCEocmVjaXAgPSBsb2FkX2NlcnQoYmlvX2VycixyZWNpcGZpbGUsRk9STUFUX1BFTSxOVUxMLAogCQkJZSwgInJlY2lwaWVudCBjZXJ0aWZpY2F0ZSBmaWxlIikpKQogCQkJewotI2lmIDAJCQkvKiBBbiBhcHByb3ByaWF0ZSBtZXNzYWdlIGhhcyBhbHJhZHkgYmVlbiBwcmludGVkICovCi0JCQlCSU9fcHJpbnRmKGJpb19lcnIsICJDYW4ndCByZWFkIHJlY2lwaWVudCBjZXJ0aWZpY2F0ZSBmaWxlICVzXG4iLCByZWNpcGZpbGUpOwotI2VuZGlmCiAJCQlFUlJfcHJpbnRfZXJyb3JzKGJpb19lcnIpOwogCQkJZ290byBlbmQ7CiAJCQl9CkBAIC02MTUsNTAgKzYxNyw3IEBACiAJZWxzZQogCQlpbiA9IEJJT19uZXdfZnAoc3RkaW4sIEJJT19OT0NMT1NFKTsKIAotCWlmIChvdXRmaWxlKQotCQl7Ci0JCWlmICghKG91dCA9IEJJT19uZXdfZmlsZShvdXRmaWxlLCBvdXRtb2RlKSkpCi0JCQl7Ci0JCQlCSU9fcHJpbnRmIChiaW9fZXJyLAotCQkJCSAiQ2FuJ3Qgb3BlbiBvdXRwdXQgZmlsZSAlc1xuIiwgb3V0ZmlsZSk7Ci0JCQlnb3RvIGVuZDsKLQkJCX0KLQkJfQotCWVsc2UKLQkJewotCQlvdXQgPSBCSU9fbmV3X2ZwKHN0ZG91dCwgQklPX05PQ0xPU0UpOwotI2lmZGVmIE9QRU5TU0xfU1lTX1ZNUwotCQl7Ci0JCSAgICBCSU8gKnRtcGJpbyA9IEJJT19uZXcoQklPX2ZfbGluZWJ1ZmZlcigpKTsKLQkJICAgIG91dCA9IEJJT19wdXNoKHRtcGJpbywgb3V0KTsKLQkJfQotI2VuZGlmCi0JCX0KLQotCWlmIChvcGVyYXRpb24gPT0gU01JTUVfVkVSSUZZKQotCQl7Ci0JCWlmICghKHN0b3JlID0gc2V0dXBfdmVyaWZ5KGJpb19lcnIsIENBZmlsZSwgQ0FwYXRoKSkpCi0JCQlnb3RvIGVuZDsKLQkJWDUwOV9TVE9SRV9zZXRfdmVyaWZ5X2NiX2Z1bmMoc3RvcmUsIHNtaW1lX2NiKTsKLQkJaWYgKHZwbSkKLQkJCVg1MDlfU1RPUkVfc2V0MV9wYXJhbShzdG9yZSwgdnBtKTsKLQkJfQotCi0KLQlyZXQgPSAzOwotCi0JaWYgKG9wZXJhdGlvbiA9PSBTTUlNRV9FTkNSWVBUKQotCQlwNyA9IFBLQ1M3X2VuY3J5cHQoZW5jZXJ0cywgaW4sIGNpcGhlciwgZmxhZ3MpOwotCWVsc2UgaWYgKG9wZXJhdGlvbiA9PSBTTUlNRV9TSUdOKQotCQl7Ci0JCS8qIElmIGRldGFjaGVkIGRhdGEgYW5kIFNNSU1FIG91dHB1dCBlbmFibGUgcGFydGlhbAotCQkgKiBzaWduaW5nLgotCQkgKi8KLQkJaWYgKChmbGFncyAmIFBLQ1M3X0RFVEFDSEVEKSAmJiAob3V0Zm9ybWF0ID09IEZPUk1BVF9TTUlNRSkpCi0JCQlmbGFncyB8PSBQS0NTN19TVFJFQU07Ci0JCXA3ID0gUEtDUzdfc2lnbihzaWduZXIsIGtleSwgb3RoZXIsIGluLCBmbGFncyk7Ci0JCX0KLQllbHNlCisJaWYgKG9wZXJhdGlvbiAmIFNNSU1FX0lQKQogCQl7CiAJCWlmIChpbmZvcm1hdCA9PSBGT1JNQVRfU01JTUUpIAogCQkJcDcgPSBTTUlNRV9yZWFkX1BLQ1M3KGluLCAmaW5kYXRhKTsKQEAgLTY4OCw2ICs2NDcsOTQgQEAKIAkJCX0KIAkJfQogCisJaWYgKG91dGZpbGUpCisJCXsKKwkJaWYgKCEob3V0ID0gQklPX25ld19maWxlKG91dGZpbGUsIG91dG1vZGUpKSkKKwkJCXsKKwkJCUJJT19wcmludGYgKGJpb19lcnIsCisJCQkJICJDYW4ndCBvcGVuIG91dHB1dCBmaWxlICVzXG4iLCBvdXRmaWxlKTsKKwkJCWdvdG8gZW5kOworCQkJfQorCQl9CisJZWxzZQorCQl7CisJCW91dCA9IEJJT19uZXdfZnAoc3Rkb3V0LCBCSU9fTk9DTE9TRSk7CisjaWZkZWYgT1BFTlNTTF9TWVNfVk1TCisJCXsKKwkJICAgIEJJTyAqdG1wYmlvID0gQklPX25ldyhCSU9fZl9saW5lYnVmZmVyKCkpOworCQkgICAgb3V0ID0gQklPX3B1c2godG1wYmlvLCBvdXQpOworCQl9CisjZW5kaWYKKwkJfQorCisJaWYgKG9wZXJhdGlvbiA9PSBTTUlNRV9WRVJJRlkpCisJCXsKKwkJaWYgKCEoc3RvcmUgPSBzZXR1cF92ZXJpZnkoYmlvX2VyciwgQ0FmaWxlLCBDQXBhdGgpKSkKKwkJCWdvdG8gZW5kOworCQlYNTA5X1NUT1JFX3NldF92ZXJpZnlfY2Ioc3RvcmUsIHNtaW1lX2NiKTsKKwkJaWYgKHZwbSkKKwkJCVg1MDlfU1RPUkVfc2V0MV9wYXJhbShzdG9yZSwgdnBtKTsKKwkJfQorCisKKwlyZXQgPSAzOworCisJaWYgKG9wZXJhdGlvbiA9PSBTTUlNRV9FTkNSWVBUKQorCQl7CisJCWlmIChpbmRlZikKKwkJCWZsYWdzIHw9IFBLQ1M3X1NUUkVBTTsKKwkJcDcgPSBQS0NTN19lbmNyeXB0KGVuY2VydHMsIGluLCBjaXBoZXIsIGZsYWdzKTsKKwkJfQorCWVsc2UgaWYgKG9wZXJhdGlvbiAmIFNNSU1FX1NJR05FUlMpCisJCXsKKwkJaW50IGk7CisJCS8qIElmIGRldGFjaGVkIGRhdGEgY29udGVudCB3ZSBvbmx5IGVuYWJsZSBzdHJlYW1pbmcgaWYKKwkJICogUy9NSU1FIG91dHB1dCBmb3JtYXQuCisJCSAqLworCQlpZiAob3BlcmF0aW9uID09IFNNSU1FX1NJR04pCisJCQl7CisJCQlpZiAoZmxhZ3MgJiBQS0NTN19ERVRBQ0hFRCkKKwkJCQl7CisJCQkJaWYgKG91dGZvcm1hdCA9PSBGT1JNQVRfU01JTUUpCisJCQkJCWZsYWdzIHw9IFBLQ1M3X1NUUkVBTTsKKwkJCQl9CisJCQllbHNlIGlmIChpbmRlZikKKwkJCQlmbGFncyB8PSBQS0NTN19TVFJFQU07CisJCQlmbGFncyB8PSBQS0NTN19QQVJUSUFMOworCQkJcDcgPSBQS0NTN19zaWduKE5VTEwsIE5VTEwsIG90aGVyLCBpbiwgZmxhZ3MpOworCQkJaWYgKCFwNykKKwkJCQlnb3RvIGVuZDsKKwkJCX0KKwkJZWxzZQorCQkJZmxhZ3MgfD0gUEtDUzdfUkVVU0VfRElHRVNUOworCQlmb3IgKGkgPSAwOyBpIDwgc2tfT1BFTlNTTF9TVFJJTkdfbnVtKHNrc2lnbmVycyk7IGkrKykKKwkJCXsKKwkJCXNpZ25lcmZpbGUgPSBza19PUEVOU1NMX1NUUklOR192YWx1ZShza3NpZ25lcnMsIGkpOworCQkJa2V5ZmlsZSA9IHNrX09QRU5TU0xfU1RSSU5HX3ZhbHVlKHNra2V5cywgaSk7CisJCQlzaWduZXIgPSBsb2FkX2NlcnQoYmlvX2Vyciwgc2lnbmVyZmlsZSxGT1JNQVRfUEVNLCBOVUxMLAorCQkJCQllLCAic2lnbmVyIGNlcnRpZmljYXRlIik7CisJCQlpZiAoIXNpZ25lcikKKwkJCQlnb3RvIGVuZDsKKwkJCWtleSA9IGxvYWRfa2V5KGJpb19lcnIsIGtleWZpbGUsIGtleWZvcm0sIDAsIHBhc3NpbiwgZSwKKwkJCSAgICAgICAic2lnbmluZyBrZXkgZmlsZSIpOworCQkJaWYgKCFrZXkpCisJCQkJZ290byBlbmQ7CisJCQlpZiAoIVBLQ1M3X3NpZ25fYWRkX3NpZ25lcihwNywgc2lnbmVyLCBrZXksCisJCQkJCQlzaWduX21kLCBmbGFncykpCisJCQkJZ290byBlbmQ7CisJCQlYNTA5X2ZyZWUoc2lnbmVyKTsKKwkJCXNpZ25lciA9IE5VTEw7CisJCQlFVlBfUEtFWV9mcmVlKGtleSk7CisJCQlrZXkgPSBOVUxMOworCQkJfQorCQkvKiBJZiBub3Qgc3RyZWFtaW5nIG9yIHJlc2lnbmluZyBmaW5hbGl6ZSBzdHJ1Y3R1cmUgKi8KKwkJaWYgKChvcGVyYXRpb24gPT0gU01JTUVfU0lHTikgJiYgIShmbGFncyAmIFBLQ1M3X1NUUkVBTSkpCisJCQl7CisJCQlpZiAoIVBLQ1M3X2ZpbmFsKHA3LCBpbiwgZmxhZ3MpKQorCQkJCWdvdG8gZW5kOworCQkJfQorCQl9CisKIAlpZiAoIXA3KQogCQl7CiAJCUJJT19wcmludGYoYmlvX2VyciwgIkVycm9yIGNyZWF0aW5nIFBLQ1MjNyBzdHJ1Y3R1cmVcbiIpOwpAQCAtNzM0LDExICs3ODEsMTYgQEAKIAkJaWYgKHN1YmplY3QpCiAJCQlCSU9fcHJpbnRmKG91dCwgIlN1YmplY3Q6ICVzXG4iLCBzdWJqZWN0KTsKIAkJaWYgKG91dGZvcm1hdCA9PSBGT1JNQVRfU01JTUUpIAotCQkJU01JTUVfd3JpdGVfUEtDUzcob3V0LCBwNywgaW4sIGZsYWdzKTsKKwkJCXsKKwkJCWlmIChvcGVyYXRpb24gPT0gU01JTUVfUkVTSUdOKQorCQkJCVNNSU1FX3dyaXRlX1BLQ1M3KG91dCwgcDcsIGluZGF0YSwgZmxhZ3MpOworCQkJZWxzZQorCQkJCVNNSU1FX3dyaXRlX1BLQ1M3KG91dCwgcDcsIGluLCBmbGFncyk7CisJCQl9CiAJCWVsc2UgaWYgKG91dGZvcm1hdCA9PSBGT1JNQVRfUEVNKSAKLQkJCVBFTV93cml0ZV9iaW9fUEtDUzcob3V0LHA3KTsKKwkJCVBFTV93cml0ZV9iaW9fUEtDUzdfc3RyZWFtKG91dCwgcDcsIGluLCBmbGFncyk7CiAJCWVsc2UgaWYgKG91dGZvcm1hdCA9PSBGT1JNQVRfQVNOMSkgCi0JCQlpMmRfUEtDUzdfYmlvKG91dCxwNyk7CisJCQlpMmRfUEtDUzdfYmlvX3N0cmVhbShvdXQscDcsIGluLCBmbGFncyk7CiAJCWVsc2UKIAkJCXsKIAkJCUJJT19wcmludGYoYmlvX2VyciwgIkJhZCBvdXRwdXQgZm9ybWF0IGZvciBQS0NTIzcgZmlsZVxuIik7CkBAIC03NTQsNiArODA2LDEwIEBACiAJc2tfWDUwOV9wb3BfZnJlZShvdGhlciwgWDUwOV9mcmVlKTsKIAlpZiAodnBtKQogCQlYNTA5X1ZFUklGWV9QQVJBTV9mcmVlKHZwbSk7CisJaWYgKHNrc2lnbmVycykKKwkJc2tfT1BFTlNTTF9TVFJJTkdfZnJlZShza3NpZ25lcnMpOworCWlmIChza2tleXMpCisJCXNrX09QRU5TU0xfU1RSSU5HX2ZyZWUoc2trZXlzKTsKIAlYNTA5X1NUT1JFX2ZyZWUoc3RvcmUpOwogCVg1MDlfZnJlZShjZXJ0KTsKIAlYNTA5X2ZyZWUocmVjaXApOwpkaWZmIC0tZ2l0IGEvYXBwcy9zcGVlZC5jIGIvYXBwcy9zcGVlZC5jCmluZGV4IGEwYmU5M2YuLmI5MDM4NjQgMTAwNjQ0Ci0tLSBhL2FwcHMvc3BlZWQuYworKysgYi9hcHBzL3NwZWVkLmMKQEAgLTEwOCw1MyArMTA4LDggQEAKICNpbmNsdWRlIDxzaWduYWwuaD4KICNlbmRpZgogCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX05ldEJTRF9fKSB8fCBkZWZpbmVkKF9fT3BlbkJTRF9fKSB8fCBkZWZpbmVkKE9QRU5TU0xfU1lTX01BQ09TWCkgfHwgZGVmaW5lZChIQVZFX0FORFJPSURfT1MpCi0jIGRlZmluZSBVU0VfVE9ECi0jZWxpZiAhZGVmaW5lZChPUEVOU1NMX1NZU19NU0RPUykgJiYgIWRlZmluZWQoT1BFTlNTTF9TWVNfVlhXT1JLUykgJiYgKCFkZWZpbmVkKE9QRU5TU0xfU1lTX1ZNUykgfHwgZGVmaW5lZChfX0RFQ0MpKQotIyBkZWZpbmUgVElNRVMKLSNlbmRpZgotI2lmICFkZWZpbmVkKF9VTklDT1MpICYmICFkZWZpbmVkKF9fT3BlbkJTRF9fKSAmJiAhZGVmaW5lZChzZ2kpICYmICFkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhKGRlZmluZWQoX19ic2RpKSB8fCBkZWZpbmVkKF9fYnNkaV9fKSkgJiYgIWRlZmluZWQoX0FJWCkgJiYgIWRlZmluZWQoT1BFTlNTTF9TWVNfTVBFKSAmJiAhZGVmaW5lZChfX05ldEJTRF9fKSAmJiAhZGVmaW5lZChPUEVOU1NMX1NZU19WWFdPUktTKSAmJiAhZGVmaW5lZChIQVZFX0FORFJPSURfT1MpIC8qIEZJWE1FICovCi0jIGRlZmluZSBUSU1FQgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX05FVFdBUkUpCi0jdW5kZWYgVElNRVMKLSN1bmRlZiBUSU1FQgotI2luY2x1ZGUgPHRpbWUuaD4KLSNlbmRpZgotCi0jaWZuZGVmIF9JUklYCi0jIGluY2x1ZGUgPHRpbWUuaD4KLSNlbmRpZgotI2lmZGVmIFRJTUVTCi0jIGluY2x1ZGUgPHN5cy90eXBlcy5oPgotIyBpbmNsdWRlIDxzeXMvdGltZXMuaD4KLSNlbmRpZgotI2lmZGVmIFVTRV9UT0QKLSMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+Ci0jZW5kaWYKLQotLyogRGVwZW5kaW5nIG9uIHRoZSBWTVMgdmVyc2lvbiwgdGhlIHRtcyBzdHJ1Y3R1cmUgaXMgcGVyaGFwcyBkZWZpbmVkLgotICAgVGhlIF9fVE1TIG1hY3JvIHdpbGwgc2hvdyBpZiBpdCB3YXMuICBJZiBpdCB3YXNuJ3QgZGVmaW5lZCwgd2Ugc2hvdWxkCi0gICB1bmRlZmluZSBUSU1FUywgc2luY2UgdGhhdCB0ZWxscyB0aGUgcmVzdCBvZiB0aGUgcHJvZ3JhbSBob3cgdGhpbmdzCi0gICBzaG91bGQgYmUgaGFuZGxlZC4JCQkJLS0gUmljaGFyZCBMZXZpdHRlICovCi0jaWYgZGVmaW5lZChPUEVOU1NMX1NZU19WTVNfREVDQykgJiYgIWRlZmluZWQoX19UTVMpCi0jdW5kZWYgVElNRVMKLSNlbmRpZgotCi0jaWZkZWYgVElNRUIKLSNpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoVElNRVMpICYmICFkZWZpbmVkKFRJTUVCKSAmJiAhZGVmaW5lZChVU0VfVE9EKSAmJiAhZGVmaW5lZChPUEVOU1NMX1NZU19WWFdPUktTKSAmJiAhZGVmaW5lZChPUEVOU1NMX1NZU19ORVRXQVJFKQotI2Vycm9yICJJdCBzZWVtcyBuZWl0aGVyIHN0cnVjdCB0bXMgbm9yIHN0cnVjdCB0aW1lYiBpcyBzdXBwb3J0ZWQgaW4gdGhpcyBwbGF0Zm9ybSEiCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoc3VuKSB8fCBkZWZpbmVkKF9fdWx0cml4KQotI2RlZmluZSBfUE9TSVhfU09VUkNFCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaWZkZWYgX1dJTjMyCisjaW5jbHVkZSA8d2luZG93cy5oPgogI2VuZGlmCiAKICNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CkBAIC0xODksNiArMTQ0LDkgQEAKICNpZm5kZWYgT1BFTlNTTF9OT19SSVBFTUQKICNpbmNsdWRlIDxvcGVuc3NsL3JpcGVtZC5oPgogI2VuZGlmCisjaWZuZGVmIE9QRU5TU0xfTk9fV0hJUkxQT09MCisjaW5jbHVkZSA8b3BlbnNzbC93aHJscG9vbC5oPgorI2VuZGlmCiAjaWZuZGVmIE9QRU5TU0xfTk9fUkM0CiAjaW5jbHVkZSA8b3BlbnNzbC9yYzQuaD4KICNlbmRpZgpAQCAtMjI2LDQ3ICsxODQsMjQgQEAKICNpbmNsdWRlIDxvcGVuc3NsL2VjZGguaD4KICNlbmRpZgogCi0vKgotICogVGhlIGZvbGxvd2luZyAiSFoiIHRpbWluZyBzdHVmZiBzaG91bGQgYmUgc3luYydkIHVwIHdpdGggdGhlIGNvZGUgaW4KLSAqIGNyeXB0by90bWRpZmYuW2NoXS4gVGhhdCBhcHBlYXJzIHRvIHRyeSB0byBkbyB0aGUgc2FtZSBqb2IsIHRob3VnaCBJIHRoaW5rCi0gKiB0aGlzIGNvZGUgaXMgbW9yZSB1cCB0byBkYXRlIHRoYW4gbGliY3J5cHRvJ3Mgc28gdGhlcmUgbWF5IGJlIGZlYXR1cmVzIHRvCi0gKiBtaWdyYXRlIG92ZXIgZmlyc3QuIFRoaXMgaXMgdXNlZCBpbiB0d28gcGxhY2VzIGZ1cnRoZXIgZG93biBBRkFJQ1MuIAotICogVGhlIHBvaW50IGlzIHRoYXQgbm90aGluZyBpbiBvcGVuc3NsIGFjdHVhbGx5ICp1c2VzKiB0aGF0IHRtZGlmZiBzdHVmZiwgc28KLSAqIGVpdGhlciBzcGVlZC5jIHNob3VsZCBiZSB1c2luZyBpdCBvciBpdCBzaG91bGQgZ28gYmVjYXVzZSBpdCdzIG9idmlvdXNseSBub3QKLSAqIHVzZWZ1bCBlbm91Z2guIEFueW9uZSB3YW50IHRvIGRvIGEgamFuaXRvcmlhbCBqb2Igb24gdGhpcz8KLSAqLwotCi0vKiBUaGUgZm9sbG93aW5nIGlmIGZyb20gdGltZXMoMykgbWFuIHBhZ2UuICBJdCBtYXkgbmVlZCB0byBiZSBjaGFuZ2VkICovCi0jaWZuZGVmIEhaCi0jIGlmIGRlZmluZWQoX1NDX0NMS19UQ0spIFwKLSAgICAgJiYgKCFkZWZpbmVkKE9QRU5TU0xfU1lTX1ZNUykgfHwgX19DVFJMX1ZFUiA+PSA3MDAwMDAwMCkKLSMgIGRlZmluZSBIWiBzeXNjb25mKF9TQ19DTEtfVENLKQorI2lmbmRlZiBIQVZFX0ZPUksKKyMgaWYgZGVmaW5lZChPUEVOU1NMX1NZU19WTVMpIHx8IGRlZmluZWQoT1BFTlNTTF9TWVNfV0lORE9XUykgfHwgZGVmaW5lZChPUEVOU1NMX1NZU19NQUNJTlRPU0hfQ0xBU1NJQykgfHwgZGVmaW5lZChPUEVOU1NMX1NZU19PUzIpIHx8IGRlZmluZWQoT1BFTlNTTF9TWVNfTkVUV0FSRSkKKyMgIGRlZmluZSBIQVZFX0ZPUksgMAogIyBlbHNlCi0jICBpZm5kZWYgQ0xLX1RDSwotIyAgIGlmbmRlZiBfQlNEX0NMS19UQ0tfIC8qIEZyZWVCU0QgaGFjayAqLwotIyAgICBkZWZpbmUgSFoJMTAwLjAKLSMgICBlbHNlIC8qIF9CU0RfQ0xLX1RDS18gKi8KLSMgICAgZGVmaW5lIEhaICgoZG91YmxlKV9CU0RfQ0xLX1RDS18pCi0jICAgZW5kaWYKLSMgIGVsc2UgLyogQ0xLX1RDSyAqLwotIyAgIGRlZmluZSBIWiAoKGRvdWJsZSlDTEtfVENLKQotIyAgZW5kaWYKKyMgIGRlZmluZSBIQVZFX0ZPUksgMQogIyBlbmRpZgogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX1ZNUykgfHwgZGVmaW5lZChPUEVOU1NMX1NZU19XSU5ET1dTKSB8fCBkZWZpbmVkKE9QRU5TU0xfU1lTX01BQ0lOVE9TSF9DTEFTU0lDKSB8fCBkZWZpbmVkKE9QRU5TU0xfU1lTX09TMikgfHwgZGVmaW5lZChPUEVOU1NMX1NZU19ORVRXQVJFKQotIyBkZWZpbmUgTk9fRk9SSyAxCi0jZWxpZiBIQVZFX0ZPUksKLSMgdW5kZWYgTk9fRk9SSworI2lmIEhBVkVfRk9SSworI3VuZGVmIE5PX0ZPUksKICNlbHNlCi0jIGRlZmluZSBOT19GT1JLIDEKKyNkZWZpbmUgTk9fRk9SSwogI2VuZGlmCiAKICN1bmRlZiBCVUZTSVpFCiAjZGVmaW5lIEJVRlNJWkUJKChsb25nKTEwMjQqOCsxKQogaW50IHJ1bj0wOwogCi1zdGF0aWMgY2hhciBmdGltZV91c2VkID0gMCwgdGltZXNfdXNlZCA9IDAsIGdldHRpbWVvZmRheV91c2VkID0gMCwgZ2V0cnVzYWdlX3VzZWQgPSAwOwogc3RhdGljIGludCBtcj0wOwogc3RhdGljIGludCB1c2VydGltZT0xOwogCkBAIC0yNzksNyArMjE0LDcgQEAKIHN0YXRpYyBpbnQgZG9fbXVsdGkoaW50IG11bHRpKTsKICNlbmRpZgogCi0jZGVmaW5lIEFMR09SX05VTQkyOAorI2RlZmluZSBBTEdPUl9OVU0JMjkKICNkZWZpbmUgU0laRV9OVU0JNQogI2RlZmluZSBSU0FfTlVNCQk0CiAjZGVmaW5lIERTQV9OVU0JCTMKQEAgLTI5Myw3ICsyMjgsNyBAQAogICAicmMyIGNiYyIsInJjNS0zMi8xMiBjYmMiLCJibG93ZmlzaCBjYmMiLCJjYXN0IGNiYyIsCiAgICJhZXMtMTI4IGNiYyIsImFlcy0xOTIgY2JjIiwiYWVzLTI1NiBjYmMiLAogICAiY2FtZWxsaWEtMTI4IGNiYyIsImNhbWVsbGlhLTE5MiBjYmMiLCJjYW1lbGxpYS0yNTYgY2JjIiwKLSAgImV2cCIsInNoYTI1NiIsInNoYTUxMiIsCisgICJldnAiLCJzaGEyNTYiLCJzaGE1MTIiLCJ3aGlybHBvb2wiLAogICAiYWVzLTEyOCBpZ2UiLCJhZXMtMTkyIGlnZSIsImFlcy0yNTYgaWdlIn07CiBzdGF0aWMgZG91YmxlIHJlc3VsdHNbQUxHT1JfTlVNXVtTSVpFX05VTV07CiBzdGF0aWMgaW50IGxlbmd0aHNbU0laRV9OVU1dPXsxNiw2NCwyNTYsMTAyNCw4KjEwMjR9OwpAQCAtMzM2LDE0MSArMjcxLDQ2IEBACiAjZGVmaW5lIFNUQVJUCTAKICNkZWZpbmUgU1RPUAkxCiAKLSNpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX05FVFdBUkUpCisjaWYgZGVmaW5lZChfV0lOMzIpCiAKLSAgIC8qIGZvciBOZXRXYXJlIHRoZSBiZXN0IHdlIGNhbiBkbyBpcyB1c2UgY2xvY2soKSB3aGljaCByZXR1cm5zIHRoZQotICAgICogdGltZSwgaW4gaHVuZHJlZHRocyBvZiBhIHNlY29uZCwgc2luY2UgdGhlIE5MTSBiZWdhbiBleGVjdXRpbmcKLSAgICovCisjZGVmaW5lIFNJR0FMUk0KK3N0YXRpYyB1bnNpZ25lZCBpbnQgbGFwc2Usc2NobG9jazsKK3N0YXRpYyB2b2lkIGFsYXJtKHVuc2lnbmVkIGludCBzZWNzKSB7IGxhcHNlID0gc2VjcyoxMDAwOyB9CisKK3N0YXRpYyBEV09SRCBXSU5BUEkgc2xlZXB5KFZPSUQgKmFyZykKKwl7CisJc2NobG9jayA9IDE7CisJU2xlZXAobGFwc2UpOworCXJ1biA9IDA7CisJcmV0dXJuIDA7CisJfQorCiBzdGF0aWMgZG91YmxlIFRpbWVfRihpbnQgcykKIAl7Ci0JZG91YmxlIHJldDsKKwlpZiAocyA9PSBTVEFSVCkKKwkJeworCQlIQU5ETEUJdGhyOworCQlzY2hsb2NrID0gMDsKKwkJdGhyID0gQ3JlYXRlVGhyZWFkKE5VTEwsNDA5NixzbGVlcHksTlVMTCwwLE5VTEwpOworCQlpZiAodGhyPT1OVUxMKQorCQkJeworCQkJRFdPUkQgcmV0PUdldExhc3RFcnJvcigpOworCQkJQklPX3ByaW50ZihiaW9fZXJyLCJ1bmFibGUgdG8gQ3JlYXRlVGhyZWFkICglZCkiLHJldCk7CisJCQlFeGl0UHJvY2VzcyhyZXQpOworCQkJfQorCQlDbG9zZUhhbmRsZSh0aHIpOwkJLyogZGV0YWNoIHRoZSB0aHJlYWQJKi8KKwkJd2hpbGUgKCFzY2hsb2NrKSBTbGVlcCgwKTsJLyogc2NoZWR1bGVyIHNwaW5sb2NrCSovCisJCX0KIAotICAgc3RhdGljIGNsb2NrX3QgdHN0YXJ0LHRlbmQ7Ci0KLSAgIGlmIChzID09IFNUQVJUKQotICAgewotICAgICAgdHN0YXJ0PWNsb2NrKCk7Ci0gICAgICByZXR1cm4oMCk7Ci0gICB9Ci0gICBlbHNlCi0gICB7Ci0gICAgICB0ZW5kPWNsb2NrKCk7Ci0gICAgICByZXQ9KGRvdWJsZSkoKGRvdWJsZSkodGVuZCktKGRvdWJsZSkodHN0YXJ0KSk7Ci0gICAgICByZXR1cm4oKHJldCA8IDAuMDAxKT8wLjAwMTpyZXQpOwotICAgfQotICAgfQotCisJcmV0dXJuIGFwcF90bWludGVydmFsKHMsdXNlcnRpbWUpOworCX0KICNlbHNlCiAKIHN0YXRpYyBkb3VibGUgVGltZV9GKGludCBzKQogCXsKLQlkb3VibGUgcmV0OwotCi0jaWZkZWYgVVNFX1RPRAotCWlmKHVzZXJ0aW1lKQotCQl7Ci0JCXN0YXRpYyBzdHJ1Y3QgcnVzYWdlIHRzdGFydCx0ZW5kOwotCi0JCWdldHJ1c2FnZV91c2VkID0gMTsKLQkJaWYgKHMgPT0gU1RBUlQpCi0JCQl7Ci0JCQlnZXRydXNhZ2UoUlVTQUdFX1NFTEYsJnRzdGFydCk7Ci0JCQlyZXR1cm4oMCk7Ci0JCQl9Ci0JCWVsc2UKLQkJCXsKLQkJCWxvbmcgaTsKLQotCQkJZ2V0cnVzYWdlKFJVU0FHRV9TRUxGLCZ0ZW5kKTsKLQkJCWk9KGxvbmcpdGVuZC5ydV91dGltZS50dl91c2VjLShsb25nKXRzdGFydC5ydV91dGltZS50dl91c2VjOwotCQkJcmV0PSgoZG91YmxlKSh0ZW5kLnJ1X3V0aW1lLnR2X3NlYy10c3RhcnQucnVfdXRpbWUudHZfc2VjKSkKLQkJCSAgKygoZG91YmxlKWkpLzEwMDAwMDAuMDsKLQkJCXJldHVybigocmV0IDwgMC4wMDEpPzAuMDAxOnJldCk7Ci0JCQl9Ci0JCX0KLQllbHNlCi0JCXsKLQkJc3RhdGljIHN0cnVjdCB0aW1ldmFsIHRzdGFydCx0ZW5kOwotCQlsb25nIGk7Ci0KLQkJZ2V0dGltZW9mZGF5X3VzZWQgPSAxOwotCQlpZiAocyA9PSBTVEFSVCkKLQkJCXsKLQkJCWdldHRpbWVvZmRheSgmdHN0YXJ0LE5VTEwpOwotCQkJcmV0dXJuKDApOwotCQkJfQotCQllbHNlCi0JCQl7Ci0JCQlnZXR0aW1lb2ZkYXkoJnRlbmQsTlVMTCk7Ci0JCQlpPShsb25nKXRlbmQudHZfdXNlYy0obG9uZyl0c3RhcnQudHZfdXNlYzsKLQkJCXJldD0oKGRvdWJsZSkodGVuZC50dl9zZWMtdHN0YXJ0LnR2X3NlYykpKygoZG91YmxlKWkpLzEwMDAwMDAuMDsKLQkJCXJldHVybigocmV0IDwgMC4wMDEpPzAuMDAxOnJldCk7Ci0JCQl9Ci0JCX0KLSNlbHNlICAvKiBuZGVmIFVTRV9UT0QgKi8KLQkJCi0jIGlmZGVmIFRJTUVTCi0JaWYgKHVzZXJ0aW1lKQotCQl7Ci0JCXN0YXRpYyBzdHJ1Y3QgdG1zIHRzdGFydCx0ZW5kOwotCi0JCXRpbWVzX3VzZWQgPSAxOwotCQlpZiAocyA9PSBTVEFSVCkKLQkJCXsKLQkJCXRpbWVzKCZ0c3RhcnQpOwotCQkJcmV0dXJuKDApOwotCQkJfQotCQllbHNlCi0JCQl7Ci0JCQl0aW1lcygmdGVuZCk7Ci0JCQlyZXQgPSBIWjsKLQkJCXJldD0oZG91YmxlKSh0ZW5kLnRtc191dGltZS10c3RhcnQudG1zX3V0aW1lKSAvIHJldDsKLQkJCXJldHVybigocmV0IDwgMWUtMyk/MWUtMzpyZXQpOwotCQkJfQotCQl9Ci0jIGVuZGlmIC8qIHRpbWVzKCkgKi8KLSMgaWYgZGVmaW5lZChUSU1FUykgJiYgZGVmaW5lZChUSU1FQikKLQllbHNlCi0jIGVuZGlmCi0jIGlmZGVmIE9QRU5TU0xfU1lTX1ZYV09SS1MKLSAgICAgICAgICAgICAgICB7Ci0JCXN0YXRpYyB1bnNpZ25lZCBsb25nIHRpY2tfc3RhcnQsIHRpY2tfZW5kOwotCi0JCWlmKCBzID09IFNUQVJUICkKLQkJCXsKLQkJCXRpY2tfc3RhcnQgPSB0aWNrR2V0KCk7Ci0JCQlyZXR1cm4gMDsKLQkJCX0KLQkJZWxzZQotCQkJewotCQkJdGlja19lbmQgPSB0aWNrR2V0KCk7Ci0JCQlyZXQgPSAoZG91YmxlKSh0aWNrX2VuZCAtIHRpY2tfc3RhcnQpIC8gKGRvdWJsZSlzeXNDbGtSYXRlR2V0KCk7Ci0JCQlyZXR1cm4oKHJldCA8IDAuMDAxKT8wLjAwMTpyZXQpOwotCQkJfQotICAgICAgICAgICAgICAgIH0KLSMgZWxpZiBkZWZpbmVkKFRJTUVCKQotCQl7Ci0JCXN0YXRpYyBzdHJ1Y3QgdGltZWIgdHN0YXJ0LHRlbmQ7Ci0JCWxvbmcgaTsKLQotCQlmdGltZV91c2VkID0gMTsKLQkJaWYgKHMgPT0gU1RBUlQpCi0JCQl7Ci0JCQlmdGltZSgmdHN0YXJ0KTsKLQkJCXJldHVybigwKTsKLQkJCX0KLQkJZWxzZQotCQkJewotCQkJZnRpbWUoJnRlbmQpOwotCQkJaT0obG9uZyl0ZW5kLm1pbGxpdG0tKGxvbmcpdHN0YXJ0Lm1pbGxpdG07Ci0JCQlyZXQ9KChkb3VibGUpKHRlbmQudGltZS10c3RhcnQudGltZSkpKygoZG91YmxlKWkpLzEwMDAuMDsKLQkJCXJldHVybigocmV0IDwgMC4wMDEpPzAuMDAxOnJldCk7Ci0JCQl9Ci0JCX0KLSMgZW5kaWYKLSNlbmRpZgorCXJldHVybiBhcHBfdG1pbnRlcnZhbChzLHVzZXJ0aW1lKTsKIAl9Ci0jZW5kaWYgLyogaWYgZGVmaW5lZChPUEVOU1NMX1NZU19ORVRXQVJFKSAqLworI2VuZGlmCiAKIAogI2lmbmRlZiBPUEVOU1NMX05PX0VDREgKQEAgLTUzMCw2ICszNzAsOSBAQAogCXVuc2lnbmVkIGNoYXIgc2hhNTEyW1NIQTUxMl9ESUdFU1RfTEVOR1RIXTsKICNlbmRpZgogI2VuZGlmCisjaWZuZGVmIE9QRU5TU0xfTk9fV0hJUkxQT09MCisJdW5zaWduZWQgY2hhciB3aGlybHBvb2xbV0hJUkxQT09MX0RJR0VTVF9MRU5HVEhdOworI2VuZGlmCiAjaWZuZGVmIE9QRU5TU0xfTk9fUklQRU1ECiAJdW5zaWduZWQgY2hhciBybWQxNjBbUklQRU1EMTYwX0RJR0VTVF9MRU5HVEhdOwogI2VuZGlmCkBAIC02MjYsOSArNDY5LDEwIEBACiAjZGVmaW5lIERfRVZQCQkyMgogI2RlZmluZSBEX1NIQTI1NgkyMwkKICNkZWZpbmUgRF9TSEE1MTIJMjQKLSNkZWZpbmUgRF9JR0VfMTI4X0FFUyAgIDI1Ci0jZGVmaW5lIERfSUdFXzE5Ml9BRVMgICAyNgotI2RlZmluZSBEX0lHRV8yNTZfQUVTICAgMjcKKyNkZWZpbmUgRF9XSElSTFBPT0wJMjUKKyNkZWZpbmUgRF9JR0VfMTI4X0FFUyAgIDI2CisjZGVmaW5lIERfSUdFXzE5Ml9BRVMgICAyNworI2RlZmluZSBEX0lHRV8yNTZfQUVTICAgMjgKIAlkb3VibGUgZD0wLjA7CiAJbG9uZyBjW0FMR09SX05VTV1bU0laRV9OVU1dOwogI2RlZmluZQlSX0RTQV81MTIJMApAQCAtOTQ4LDYgKzc5MiwxMCBAQAogCQllbHNlCiAjZW5kaWYKICNlbmRpZgorI2lmbmRlZiBPUEVOU1NMX05PX1dISVJMUE9PTAorCQkJaWYgKHN0cmNtcCgqYXJndiwid2hpcmxwb29sIikgPT0gMCkgZG9pdFtEX1dISVJMUE9PTF09MTsKKwkJZWxzZQorI2VuZGlmCiAjaWZuZGVmIE9QRU5TU0xfTk9fUklQRU1ECiAJCQlpZiAoc3RyY21wKCphcmd2LCJyaXBlbWQiKSA9PSAwKSBkb2l0W0RfUk1EMTYwXT0xOwogCQllbHNlCkBAIC0xMTU5LDEyICsxMDA3LDE2IEBACiAjaWZuZGVmIE9QRU5TU0xfTk9fU0hBNTEyCiAJCQlCSU9fcHJpbnRmKGJpb19lcnIsInNoYTUxMiAgICIpOwogI2VuZGlmCisjaWZuZGVmIE9QRU5TU0xfTk9fV0hJUkxQT09MCisJCQlCSU9fcHJpbnRmKGJpb19lcnIsIndoaXJscG9vbCIpOworI2VuZGlmCiAjaWZuZGVmIE9QRU5TU0xfTk9fUklQRU1EMTYwCiAJCQlCSU9fcHJpbnRmKGJpb19lcnIsInJtZDE2MCIpOwogI2VuZGlmCiAjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19NRDIpIHx8ICFkZWZpbmVkKE9QRU5TU0xfTk9fTURDMikgfHwgXAogICAgICFkZWZpbmVkKE9QRU5TU0xfTk9fTUQ0KSB8fCAhZGVmaW5lZChPUEVOU1NMX05PX01ENSkgfHwgXAotICAgICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBMSkgfHwgIWRlZmluZWQoT1BFTlNTTF9OT19SSVBFTUQxNjApCisgICAgIWRlZmluZWQoT1BFTlNTTF9OT19TSEExKSB8fCAhZGVmaW5lZChPUEVOU1NMX05PX1JJUEVNRDE2MCkgfHwgXAorICAgICFkZWZpbmVkKE9QRU5TU0xfTk9fV0hJUkxQT09MKQogCQkJQklPX3ByaW50ZihiaW9fZXJyLCJcbiIpOwogI2VuZGlmCiAKQEAgLTEyOTEsMTcgKzExNDMsMjAgQEAKIAkJCXJzYV9kb2l0W2ldPTE7CiAJCWZvciAoaT0wOyBpPERTQV9OVU07IGkrKykKIAkJCWRzYV9kb2l0W2ldPTE7CisjaWZuZGVmIE9QRU5TU0xfTk9fRUNEU0EKKwkJZm9yIChpPTA7IGk8RUNfTlVNOyBpKyspCisJCQllY2RzYV9kb2l0W2ldPTE7CisjZW5kaWYKKyNpZm5kZWYgT1BFTlNTTF9OT19FQ0RICisJCWZvciAoaT0wOyBpPEVDX05VTTsgaSsrKQorCQkJZWNkaF9kb2l0W2ldPTE7CisjZW5kaWYKIAkJfQogCWZvciAoaT0wOyBpPEFMR09SX05VTTsgaSsrKQogCQlpZiAoZG9pdFtpXSkgcHJfaGVhZGVyKys7CiAKIAlpZiAodXNlcnRpbWUgPT0gMCAmJiAhbXIpCiAJCUJJT19wcmludGYoYmlvX2VyciwiWW91IGhhdmUgY2hvc2VuIHRvIG1lYXN1cmUgZWxhcHNlZCB0aW1lIGluc3RlYWQgb2YgdXNlciBDUFUgdGltZS5cbiIpOwotCWlmICh1c2VydGltZSA8PSAwICYmICFtcikKLQkJewotCQlCSU9fcHJpbnRmKGJpb19lcnIsIlRvIGdldCB0aGUgbW9zdCBhY2N1cmF0ZSByZXN1bHRzLCB0cnkgdG8gcnVuIHRoaXNcbiIpOwotCQlCSU9fcHJpbnRmKGJpb19lcnIsInByb2dyYW0gd2hlbiB0aGlzIGNvbXB1dGVyIGlzIGlkbGUuXG4iKTsKLQkJfQogCiAjaWZuZGVmIE9QRU5TU0xfTk9fUlNBCiAJZm9yIChpPTA7IGk8UlNBX05VTTsgaSsrKQpAQCAtMTQxMSw2ICsxMjY2LDcgQEAKIAljW0RfQ0JDXzI1Nl9DTUxdWzBdPWNvdW50OwogCWNbRF9TSEEyNTZdWzBdPWNvdW50OwogCWNbRF9TSEE1MTJdWzBdPWNvdW50OworCWNbRF9XSElSTFBPT0xdWzBdPWNvdW50OwogCWNbRF9JR0VfMTI4X0FFU11bMF09Y291bnQ7CiAJY1tEX0lHRV8xOTJfQUVTXVswXT1jb3VudDsKIAljW0RfSUdFXzI1Nl9BRVNdWzBdPWNvdW50OwpAQCAtMTQyNiw2ICsxMjgyLDcgQEAKIAkJY1tEX1JNRDE2MF1baV09Y1tEX1JNRDE2MF1bMF0qNCpsZW5ndGhzWzBdL2xlbmd0aHNbaV07CiAJCWNbRF9TSEEyNTZdW2ldPWNbRF9TSEEyNTZdWzBdKjQqbGVuZ3Roc1swXS9sZW5ndGhzW2ldOwogCQljW0RfU0hBNTEyXVtpXT1jW0RfU0hBNTEyXVswXSo0Kmxlbmd0aHNbMF0vbGVuZ3Roc1tpXTsKKwkJY1tEX1dISVJMUE9PTF1baV09Y1tEX1dISVJMUE9PTF1bMF0qNCpsZW5ndGhzWzBdL2xlbmd0aHNbaV07CiAJCX0KIAlmb3IgKGk9MTsgaTxTSVpFX05VTTsgaSsrKQogCQl7CkBAIC0xNjA5LDcgKzE0NjYsOSBAQAogI2Vsc2UKICNkZWZpbmUgQ09ORChjKQkocnVuKQogI2RlZmluZSBDT1VOVChkKSAoY291bnQpCisjaWZuZGVmIF9XSU4zMgogCXNpZ25hbChTSUdBTFJNLHNpZ19kb25lKTsKKyNlbmRpZgogI2VuZGlmIC8qIFNJR0FMUk0gKi8KIAogI2lmbmRlZiBPUEVOU1NMX05PX01EMgpAQCAtMTczOSw4ICsxNTk4LDIzIEBACiAJCQl9CiAJCX0KICNlbmRpZgotCiAjZW5kaWYKKworI2lmbmRlZiBPUEVOU1NMX05PX1dISVJMUE9PTAorCWlmIChkb2l0W0RfV0hJUkxQT09MXSkKKwkJeworCQlmb3IgKGo9MDsgajxTSVpFX05VTTsgaisrKQorCQkJeworCQkJcHJpbnRfbWVzc2FnZShuYW1lc1tEX1dISVJMUE9PTF0sY1tEX1dISVJMUE9PTF1bal0sbGVuZ3Roc1tqXSk7CisJCQlUaW1lX0YoU1RBUlQpOworCQkJZm9yIChjb3VudD0wLHJ1bj0xOyBDT05EKGNbRF9XSElSTFBPT0xdW2pdKTsgY291bnQrKykKKwkJCQlXSElSTFBPT0woYnVmLGxlbmd0aHNbal0sd2hpcmxwb29sKTsKKwkJCWQ9VGltZV9GKFNUT1ApOworCQkJcHJpbnRfcmVzdWx0KERfV0hJUkxQT09MLGosY291bnQsZCk7CisJCQl9CisJCX0KKyNlbmRpZgorCiAjaWZuZGVmIE9QRU5TU0xfTk9fUklQRU1ECiAJaWYgKGRvaXRbRF9STUQxNjBdKQogCQl7CkBAIC0xODg3LDYgKzE3NjEsOCBAQAogCQkJcHJpbnRfcmVzdWx0KERfSUdFXzI1Nl9BRVMsaixjb3VudCxkKTsKIAkJCX0KIAkJfQorCisKICNlbmRpZgogI2VuZGlmCiAjaWZuZGVmIE9QRU5TU0xfTk9fQ0FNRUxMSUEKQEAgLTI1MDAsMzUgKzIzNzYsNiBAQAogCQlwcmludGYoIiVzICIsQkZfb3B0aW9ucygpKTsKICNlbmRpZgogCQlmcHJpbnRmKHN0ZG91dCwiXG4lc1xuIixTU0xlYXlfdmVyc2lvbihTU0xFQVlfQ0ZMQUdTKSk7Ci0JCXByaW50ZigiYXZhaWxhYmxlIHRpbWluZyBvcHRpb25zOiAiKTsKLSNpZmRlZiBUSU1FUwotCQlwcmludGYoIlRJTUVTICIpOwotI2VuZGlmCi0jaWZkZWYgVElNRUIKLQkJcHJpbnRmKCJUSU1FQiAiKTsKLSNlbmRpZgotI2lmZGVmIFVTRV9UT0QKLQkJcHJpbnRmKCJVU0VfVE9EICIpOwotI2VuZGlmCi0jaWZkZWYgSFoKLSNkZWZpbmUgYXNfc3RyaW5nKHMpICgjcykKLQkJewotCQlkb3VibGUgZGJsID0gSFo7Ci0JCXByaW50ZigiSFo9JWciLCBkYmwpOwotCQl9Ci0jIGlmZGVmIF9TQ19DTEtfVENLCi0JCXByaW50ZigiIFtzeXNjb25mIHZhbHVlXSIpOwotIyBlbmRpZgotI2VuZGlmCi0JCXByaW50ZigiXG4iKTsKLQkJcHJpbnRmKCJ0aW1pbmcgZnVuY3Rpb24gdXNlZDogJXMlcyVzJXMlcyVzJXNcbiIsCi0JCSAgICAgICAoZnRpbWVfdXNlZCA/ICJmdGltZSIgOiAiIiksCi0JCSAgICAgICAoZnRpbWVfdXNlZCArIHRpbWVzX3VzZWQgPiAxID8gIiwiIDogIiIpLAotCQkgICAgICAgKHRpbWVzX3VzZWQgPyAidGltZXMiIDogIiIpLAotCQkgICAgICAgKGZ0aW1lX3VzZWQgKyB0aW1lc191c2VkICsgZ2V0dGltZW9mZGF5X3VzZWQgPiAxID8gIiwiIDogIiIpLAotCQkgICAgICAgKGdldHRpbWVvZmRheV91c2VkID8gImdldHRpbWVvZmRheSIgOiAiIiksCi0JCSAgICAgICAoZnRpbWVfdXNlZCArIHRpbWVzX3VzZWQgKyBnZXR0aW1lb2ZkYXlfdXNlZCArIGdldHJ1c2FnZV91c2VkID4gMSA/ICIsIiA6ICIiKSwKLQkJICAgICAgIChnZXRydXNhZ2VfdXNlZCA/ICJnZXRydXNhZ2UiIDogIiIpKTsKIAkJfQogCiAJaWYgKHByX2hlYWRlcikKQEAgLTI3ODUsNiArMjYzMiw3IEBACiAJCQljbG9zZShmZFsxXSk7CiAJCQltcj0xOwogCQkJdXNlcnRpbWU9MDsKKwkJCWZyZWUoZmRzKTsKIAkJCXJldHVybiAwOwogCQkJfQogCQlwcmludGYoIkZvcmtlZCBjaGlsZCAlZFxuIixuKTsKQEAgLTI5MzMsNyArMjc4MSwxMCBAQAogCQkJZWxzZQogCQkJCWZwcmludGYoc3RkZXJyLCJVbmtub3duIHR5cGUgJyVzJyBmcm9tIGNoaWxkICVkXG4iLGJ1ZixuKTsKIAkJCX0KKworCQlmY2xvc2UoZik7CiAJCX0KKwlmcmVlKGZkcyk7CiAJcmV0dXJuIDE7CiAJfQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcHBzL3ZlcmlmeS5jIGIvYXBwcy92ZXJpZnkuYwppbmRleCAyMGNjOWUzLi45MTYzOTk3IDEwMDY0NAotLS0gYS9hcHBzL3ZlcmlmeS5jCisrKyBiL2FwcHMvdmVyaWZ5LmMKQEAgLTcwLDggKzcwLDkgQEAKICNkZWZpbmUgUFJPRwl2ZXJpZnlfbWFpbgogCiBzdGF0aWMgaW50IE1TX0NBTExCQUNLIGNiKGludCBvaywgWDUwOV9TVE9SRV9DVFggKmN0eCk7Ci1zdGF0aWMgaW50IGNoZWNrKFg1MDlfU1RPUkUgKmN0eCwgY2hhciAqZmlsZSwgU1RBQ0tfT0YoWDUwOSkgKnVjaGFpbiwgU1RBQ0tfT0YoWDUwOSkgKnRjaGFpbiwgaW50IHB1cnBvc2UsIEVOR0lORSAqZSk7Ci1zdGF0aWMgU1RBQ0tfT0YoWDUwOSkgKmxvYWRfdW50cnVzdGVkKGNoYXIgKmZpbGUpOworc3RhdGljIGludCBjaGVjayhYNTA5X1NUT1JFICpjdHgsIGNoYXIgKmZpbGUsCisJCVNUQUNLX09GKFg1MDkpICp1Y2hhaW4sIFNUQUNLX09GKFg1MDkpICp0Y2hhaW4sCisJCVNUQUNLX09GKFg1MDlfQ1JMKSAqY3JscywgRU5HSU5FICplKTsKIHN0YXRpYyBpbnQgdl92ZXJib3NlPTAsIHZmbGFncyA9IDA7CiAKIGludCBNQUlOKGludCwgY2hhciAqKik7CkBAIC04MCwxMCArODEsMTAgQEAKIAl7CiAJRU5HSU5FICplID0gTlVMTDsKIAlpbnQgaSxyZXQ9MSwgYmFkYXJnID0gMDsKLQlpbnQgcHVycG9zZSA9IC0xOwogCWNoYXIgKkNBcGF0aD1OVUxMLCpDQWZpbGU9TlVMTDsKLQljaGFyICp1bnRmaWxlID0gTlVMTCwgKnRydXN0ZmlsZSA9IE5VTEw7CisJY2hhciAqdW50ZmlsZSA9IE5VTEwsICp0cnVzdGZpbGUgPSBOVUxMLCAqY3JsZmlsZSA9IE5VTEw7CiAJU1RBQ0tfT0YoWDUwOSkgKnVudHJ1c3RlZCA9IE5VTEwsICp0cnVzdGVkID0gTlVMTDsKKwlTVEFDS19PRihYNTA5X0NSTCkgKmNybHMgPSBOVUxMOwogCVg1MDlfU1RPUkUgKmNlcnRfY3R4PU5VTEw7CiAJWDUwOV9MT09LVVAgKmxvb2t1cD1OVUxMOwogCVg1MDlfVkVSSUZZX1BBUkFNICp2cG0gPSBOVUxMOwpAQCAtOTMsNyArOTQsNyBAQAogCiAJY2VydF9jdHg9WDUwOV9TVE9SRV9uZXcoKTsKIAlpZiAoY2VydF9jdHggPT0gTlVMTCkgZ290byBlbmQ7Ci0JWDUwOV9TVE9SRV9zZXRfdmVyaWZ5X2NiX2Z1bmMoY2VydF9jdHgsY2IpOworCVg1MDlfU1RPUkVfc2V0X3ZlcmlmeV9jYihjZXJ0X2N0eCxjYik7CiAKIAlFUlJfbG9hZF9jcnlwdG9fc3RyaW5ncygpOwogCkBAIC0xMzksNiArMTQwLDExIEBACiAJCQkJaWYgKGFyZ2MtLSA8IDEpIGdvdG8gZW5kOwogCQkJCXRydXN0ZmlsZT0gKigrK2FyZ3YpOwogCQkJCX0KKwkJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiLUNSTGZpbGUiKSA9PSAwKQorCQkJCXsKKwkJCQlpZiAoYXJnYy0tIDwgMSkgZ290byBlbmQ7CisJCQkJY3JsZmlsZT0gKigrK2FyZ3YpOworCQkJCX0KICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKIAkJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiLWVuZ2luZSIpID09IDApCiAJCQkJewpAQCAtMTkyLDI2ICsxOTgsMzQgQEAKIAogCUVSUl9jbGVhcl9lcnJvcigpOwogCi0JaWYodW50ZmlsZSkgewotCQlpZighKHVudHJ1c3RlZCA9IGxvYWRfdW50cnVzdGVkKHVudGZpbGUpKSkgewotCQkJQklPX3ByaW50ZihiaW9fZXJyLCAiRXJyb3IgbG9hZGluZyB1bnRydXN0ZWQgZmlsZSAlc1xuIiwgdW50ZmlsZSk7Ci0JCQlFUlJfcHJpbnRfZXJyb3JzKGJpb19lcnIpOworCWlmKHVudGZpbGUpCisJCXsKKwkJdW50cnVzdGVkID0gbG9hZF9jZXJ0cyhiaW9fZXJyLCB1bnRmaWxlLCBGT1JNQVRfUEVNLAorCQkJCQlOVUxMLCBlLCAidW50cnVzdGVkIGNlcnRpZmljYXRlcyIpOworCQlpZighdW50cnVzdGVkKQogCQkJZ290byBlbmQ7CiAJCX0KLQl9CiAKLQlpZih0cnVzdGZpbGUpIHsKLQkJaWYoISh0cnVzdGVkID0gbG9hZF91bnRydXN0ZWQodHJ1c3RmaWxlKSkpIHsKLQkJCUJJT19wcmludGYoYmlvX2VyciwgIkVycm9yIGxvYWRpbmcgdW50cnVzdGVkIGZpbGUgJXNcbiIsIHRydXN0ZmlsZSk7Ci0JCQlFUlJfcHJpbnRfZXJyb3JzKGJpb19lcnIpOworCWlmKHRydXN0ZmlsZSkKKwkJeworCQl0cnVzdGVkID0gbG9hZF9jZXJ0cyhiaW9fZXJyLCB0cnVzdGZpbGUsIEZPUk1BVF9QRU0sCisJCQkJCU5VTEwsIGUsICJ0cnVzdGVkIGNlcnRpZmljYXRlcyIpOworCQlpZighdHJ1c3RlZCkKIAkJCWdvdG8gZW5kOwogCQl9Ci0JfQogCi0JaWYgKGFyZ2MgPCAxKSBjaGVjayhjZXJ0X2N0eCwgTlVMTCwgdW50cnVzdGVkLCB0cnVzdGVkLCBwdXJwb3NlLCBlKTsKKwlpZihjcmxmaWxlKQorCQl7CisJCWNybHMgPSBsb2FkX2NybHMoYmlvX2VyciwgY3JsZmlsZSwgRk9STUFUX1BFTSwKKwkJCQkJTlVMTCwgZSwgIm90aGVyIENSTHMiKTsKKwkJaWYoIWNybHMpCisJCQlnb3RvIGVuZDsKKwkJfQorCisJaWYgKGFyZ2MgPCAxKSBjaGVjayhjZXJ0X2N0eCwgTlVMTCwgdW50cnVzdGVkLCB0cnVzdGVkLCBjcmxzLCBlKTsKIAllbHNlCiAJCWZvciAoaT0wOyBpPGFyZ2M7IGkrKykKLQkJCWNoZWNrKGNlcnRfY3R4LGFyZ3ZbaV0sIHVudHJ1c3RlZCwgdHJ1c3RlZCwgcHVycG9zZSwgZSk7CisJCQljaGVjayhjZXJ0X2N0eCxhcmd2W2ldLCB1bnRydXN0ZWQsIHRydXN0ZWQsIGNybHMsIGUpOwogCXJldD0wOwogZW5kOgogCWlmIChyZXQgPT0gMSkgewpAQCAtMjMyLDExICsyNDYsMTQgQEAKIAlpZiAoY2VydF9jdHggIT0gTlVMTCkgWDUwOV9TVE9SRV9mcmVlKGNlcnRfY3R4KTsKIAlza19YNTA5X3BvcF9mcmVlKHVudHJ1c3RlZCwgWDUwOV9mcmVlKTsKIAlza19YNTA5X3BvcF9mcmVlKHRydXN0ZWQsIFg1MDlfZnJlZSk7CisJc2tfWDUwOV9DUkxfcG9wX2ZyZWUoY3JscywgWDUwOV9DUkxfZnJlZSk7CiAJYXBwc19zaHV0ZG93bigpOwogCU9QRU5TU0xfRVhJVChyZXQpOwogCX0KIAotc3RhdGljIGludCBjaGVjayhYNTA5X1NUT1JFICpjdHgsIGNoYXIgKmZpbGUsIFNUQUNLX09GKFg1MDkpICp1Y2hhaW4sIFNUQUNLX09GKFg1MDkpICp0Y2hhaW4sIGludCBwdXJwb3NlLCBFTkdJTkUgKmUpCitzdGF0aWMgaW50IGNoZWNrKFg1MDlfU1RPUkUgKmN0eCwgY2hhciAqZmlsZSwKKwkJU1RBQ0tfT0YoWDUwOSkgKnVjaGFpbiwgU1RBQ0tfT0YoWDUwOSkgKnRjaGFpbiwKKwkJU1RBQ0tfT0YoWDUwOV9DUkwpICpjcmxzLCBFTkdJTkUgKmUpCiAJewogCVg1MDkgKng9TlVMTDsKIAlpbnQgaT0wLHJldD0wOwpAQCAtMjYwLDcgKzI3Nyw4IEBACiAJCWdvdG8gZW5kOwogCQl9CiAJaWYodGNoYWluKSBYNTA5X1NUT1JFX0NUWF90cnVzdGVkX3N0YWNrKGNzYywgdGNoYWluKTsKLQlpZihwdXJwb3NlID49IDApIFg1MDlfU1RPUkVfQ1RYX3NldF9wdXJwb3NlKGNzYywgcHVycG9zZSk7CisJaWYgKGNybHMpCisJCVg1MDlfU1RPUkVfQ1RYX3NldDBfY3Jscyhjc2MsIGNybHMpOwogCWk9WDUwOV92ZXJpZnlfY2VydChjc2MpOwogCVg1MDlfU1RPUkVfQ1RYX2ZyZWUoY3NjKTsKIApAQCAtMjc4LDkwICsyOTYsNTMgQEAKIAlyZXR1cm4ocmV0KTsKIAl9CiAKLXN0YXRpYyBTVEFDS19PRihYNTA5KSAqbG9hZF91bnRydXN0ZWQoY2hhciAqY2VydGZpbGUpCi17Ci0JU1RBQ0tfT0YoWDUwOV9JTkZPKSAqc2s9TlVMTDsKLQlTVEFDS19PRihYNTA5KSAqc3RhY2s9TlVMTCwgKnJldD1OVUxMOwotCUJJTyAqaW49TlVMTDsKLQlYNTA5X0lORk8gKnhpOwotCi0JaWYoIShzdGFjayA9IHNrX1g1MDlfbmV3X251bGwoKSkpIHsKLQkJQklPX3ByaW50ZihiaW9fZXJyLCJtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlXG4iKTsKLQkJZ290byBlbmQ7Ci0JfQotCi0JaWYoIShpbj1CSU9fbmV3X2ZpbGUoY2VydGZpbGUsICJyIikpKSB7Ci0JCUJJT19wcmludGYoYmlvX2VyciwiZXJyb3Igb3BlbmluZyB0aGUgZmlsZSwgJXNcbiIsY2VydGZpbGUpOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQkvKiBUaGlzIGxvYWRzIGZyb20gYSBmaWxlLCBhIHN0YWNrIG9mIHg1MDkvY3JsL3BrZXkgc2V0cyAqLwotCWlmKCEoc2s9UEVNX1g1MDlfSU5GT19yZWFkX2JpbyhpbixOVUxMLE5VTEwsTlVMTCkpKSB7Ci0JCUJJT19wcmludGYoYmlvX2VyciwiZXJyb3IgcmVhZGluZyB0aGUgZmlsZSwgJXNcbiIsY2VydGZpbGUpOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQkvKiBzY2FuIG92ZXIgaXQgYW5kIHB1bGwgb3V0IHRoZSBjZXJ0cyAqLwotCXdoaWxlIChza19YNTA5X0lORk9fbnVtKHNrKSkKLQkJewotCQl4aT1za19YNTA5X0lORk9fc2hpZnQoc2spOwotCQlpZiAoeGktPng1MDkgIT0gTlVMTCkKLQkJCXsKLQkJCXNrX1g1MDlfcHVzaChzdGFjayx4aS0+eDUwOSk7Ci0JCQl4aS0+eDUwOT1OVUxMOwotCQkJfQotCQlYNTA5X0lORk9fZnJlZSh4aSk7Ci0JCX0KLQlpZighc2tfWDUwOV9udW0oc3RhY2spKSB7Ci0JCUJJT19wcmludGYoYmlvX2Vyciwibm8gY2VydGlmaWNhdGVzIGluIGZpbGUsICVzXG4iLGNlcnRmaWxlKTsKLQkJc2tfWDUwOV9mcmVlKHN0YWNrKTsKLQkJZ290byBlbmQ7Ci0JfQotCXJldD1zdGFjazsKLWVuZDoKLQlCSU9fZnJlZShpbik7Ci0Jc2tfWDUwOV9JTkZPX2ZyZWUoc2spOwotCXJldHVybihyZXQpOwotCX0KLQogc3RhdGljIGludCBNU19DQUxMQkFDSyBjYihpbnQgb2ssIFg1MDlfU1RPUkVfQ1RYICpjdHgpCiAJewotCWNoYXIgYnVmWzI1Nl07CisJaW50IGNlcnRfZXJyb3IgPSBYNTA5X1NUT1JFX0NUWF9nZXRfZXJyb3IoY3R4KTsKKwlYNTA5ICpjdXJyZW50X2NlcnQgPSBYNTA5X1NUT1JFX0NUWF9nZXRfY3VycmVudF9jZXJ0KGN0eCk7CiAKIAlpZiAoIW9rKQogCQl7Ci0JCWlmIChjdHgtPmN1cnJlbnRfY2VydCkKKwkJaWYgKGN1cnJlbnRfY2VydCkKIAkJCXsKLQkJCVg1MDlfTkFNRV9vbmVsaW5lKAotCQkJCVg1MDlfZ2V0X3N1YmplY3RfbmFtZShjdHgtPmN1cnJlbnRfY2VydCksYnVmLAotCQkJCXNpemVvZiBidWYpOwotCQkJcHJpbnRmKCIlc1xuIixidWYpOworCQkJWDUwOV9OQU1FX3ByaW50X2V4X2ZwKHN0ZG91dCwKKwkJCQlYNTA5X2dldF9zdWJqZWN0X25hbWUoY3VycmVudF9jZXJ0KSwKKwkJCQkwLCBYTl9GTEFHX09ORUxJTkUpOworCQkJcHJpbnRmKCJcbiIpOwogCQkJfQotCQlwcmludGYoImVycm9yICVkIGF0ICVkIGRlcHRoIGxvb2t1cDolc1xuIixjdHgtPmVycm9yLAotCQkJY3R4LT5lcnJvcl9kZXB0aCwKLQkJCVg1MDlfdmVyaWZ5X2NlcnRfZXJyb3Jfc3RyaW5nKGN0eC0+ZXJyb3IpKTsKLQkJaWYgKGN0eC0+ZXJyb3IgPT0gWDUwOV9WX0VSUl9DRVJUX0hBU19FWFBJUkVEKSBvaz0xOwotCQkvKiBzaW5jZSB3ZSBhcmUganVzdCBjaGVja2luZyB0aGUgY2VydGlmaWNhdGVzLCBpdCBpcwotCQkgKiBvayBpZiB0aGV5IGFyZSBzZWxmIHNpZ25lZC4gQnV0IHdlIHNob3VsZCBzdGlsbCB3YXJuCi0JCSAqIHRoZSB1c2VyLgotIAkJICovCi0JCWlmIChjdHgtPmVycm9yID09IFg1MDlfVl9FUlJfREVQVEhfWkVST19TRUxGX1NJR05FRF9DRVJUKSBvaz0xOwotCQkvKiBDb250aW51ZSBhZnRlciBleHRlbnNpb24gZXJyb3JzIHRvbyAqLwotCQlpZiAoY3R4LT5lcnJvciA9PSBYNTA5X1ZfRVJSX0lOVkFMSURfQ0EpIG9rPTE7Ci0JCWlmIChjdHgtPmVycm9yID09IFg1MDlfVl9FUlJfSU5WQUxJRF9OT05fQ0EpIG9rPTE7Ci0JCWlmIChjdHgtPmVycm9yID09IFg1MDlfVl9FUlJfUEFUSF9MRU5HVEhfRVhDRUVERUQpIG9rPTE7Ci0JCWlmIChjdHgtPmVycm9yID09IFg1MDlfVl9FUlJfSU5WQUxJRF9QVVJQT1NFKSBvaz0xOwotCQlpZiAoY3R4LT5lcnJvciA9PSBYNTA5X1ZfRVJSX0RFUFRIX1pFUk9fU0VMRl9TSUdORURfQ0VSVCkgb2s9MTsKLQkJaWYgKGN0eC0+ZXJyb3IgPT0gWDUwOV9WX0VSUl9DUkxfSEFTX0VYUElSRUQpIG9rPTE7Ci0JCWlmIChjdHgtPmVycm9yID09IFg1MDlfVl9FUlJfQ1JMX05PVF9ZRVRfVkFMSUQpIG9rPTE7Ci0JCWlmIChjdHgtPmVycm9yID09IFg1MDlfVl9FUlJfVU5IQU5ETEVEX0NSSVRJQ0FMX0VYVEVOU0lPTikgb2s9MTsKKwkJcHJpbnRmKCIlc2Vycm9yICVkIGF0ICVkIGRlcHRoIGxvb2t1cDolc1xuIiwKKwkJCVg1MDlfU1RPUkVfQ1RYX2dldDBfcGFyZW50X2N0eChjdHgpID8gIltDUkwgcGF0aF0iIDogIiIsCisJCQljZXJ0X2Vycm9yLAorCQkJWDUwOV9TVE9SRV9DVFhfZ2V0X2Vycm9yX2RlcHRoKGN0eCksCisJCQlYNTA5X3ZlcmlmeV9jZXJ0X2Vycm9yX3N0cmluZyhjZXJ0X2Vycm9yKSk7CisJCXN3aXRjaChjZXJ0X2Vycm9yKQorCQkJeworCQkJY2FzZSBYNTA5X1ZfRVJSX05PX0VYUExJQ0lUX1BPTElDWToKKwkJCQlwb2xpY2llc19wcmludChOVUxMLCBjdHgpOworCQkJY2FzZSBYNTA5X1ZfRVJSX0NFUlRfSEFTX0VYUElSRUQ6CiAKLQkJaWYgKGN0eC0+ZXJyb3IgPT0gWDUwOV9WX0VSUl9OT19FWFBMSUNJVF9QT0xJQ1kpCi0JCQlwb2xpY2llc19wcmludChOVUxMLCBjdHgpOworCQkJLyogc2luY2Ugd2UgYXJlIGp1c3QgY2hlY2tpbmcgdGhlIGNlcnRpZmljYXRlcywgaXQgaXMKKwkJCSAqIG9rIGlmIHRoZXkgYXJlIHNlbGYgc2lnbmVkLiBCdXQgd2Ugc2hvdWxkIHN0aWxsIHdhcm4KKwkJCSAqIHRoZSB1c2VyLgorCQkJICovCisKKwkJCWNhc2UgWDUwOV9WX0VSUl9ERVBUSF9aRVJPX1NFTEZfU0lHTkVEX0NFUlQ6CisJCQkvKiBDb250aW51ZSBhZnRlciBleHRlbnNpb24gZXJyb3JzIHRvbyAqLworCQkJY2FzZSBYNTA5X1ZfRVJSX0lOVkFMSURfQ0E6CisJCQljYXNlIFg1MDlfVl9FUlJfSU5WQUxJRF9OT05fQ0E6CisJCQljYXNlIFg1MDlfVl9FUlJfUEFUSF9MRU5HVEhfRVhDRUVERUQ6CisJCQljYXNlIFg1MDlfVl9FUlJfSU5WQUxJRF9QVVJQT1NFOgorCQkJY2FzZSBYNTA5X1ZfRVJSX0NSTF9IQVNfRVhQSVJFRDoKKwkJCWNhc2UgWDUwOV9WX0VSUl9DUkxfTk9UX1lFVF9WQUxJRDoKKwkJCWNhc2UgWDUwOV9WX0VSUl9VTkhBTkRMRURfQ1JJVElDQUxfRVhURU5TSU9OOgorCQkJb2sgPSAxOworCisJCQl9CisKIAkJcmV0dXJuIG9rOwogCiAJCX0KLQlpZiAoKGN0eC0+ZXJyb3IgPT0gWDUwOV9WX09LKSAmJiAob2sgPT0gMikpCisJaWYgKGNlcnRfZXJyb3IgPT0gWDUwOV9WX09LICYmIG9rID09IDIpCiAJCXBvbGljaWVzX3ByaW50KE5VTEwsIGN0eCk7CiAJaWYgKCF2X3ZlcmJvc2UpCiAJCUVSUl9jbGVhcl9lcnJvcigpOwpkaWZmIC0tZ2l0IGEvYXBwcy94NTA5LmMgYi9hcHBzL3g1MDkuYwppbmRleCBiMjU1MDhhLi5lN2U0NmQ3IDEwMDY0NAotLS0gYS9hcHBzL3g1MDkuYworKysgYi9hcHBzL3g1MDkuYwpAQCAtOTksNyArOTksMTMgQEAKICIgLXBhc3NpbiBhcmcgICAgIC0gcHJpdmF0ZSBrZXkgcGFzc3dvcmQgc291cmNlXG4iLAogIiAtc2VyaWFsICAgICAgICAgLSBwcmludCBzZXJpYWwgbnVtYmVyIHZhbHVlXG4iLAogIiAtc3ViamVjdF9oYXNoICAgLSBwcmludCBzdWJqZWN0IGhhc2ggdmFsdWVcbiIsCisjaWZuZGVmIE9QRU5TU0xfTk9fTUQ1CisiIC1zdWJqZWN0X2hhc2hfb2xkICAgLSBwcmludCBvbGQtc3R5bGUgKE1ENSkgc3ViamVjdCBoYXNoIHZhbHVlXG4iLAorI2VuZGlmCiAiIC1pc3N1ZXJfaGFzaCAgICAtIHByaW50IGlzc3VlciBoYXNoIHZhbHVlXG4iLAorI2lmbmRlZiBPUEVOU1NMX05PX01ENQorIiAtaXNzdWVyX2hhc2hfb2xkICAgIC0gcHJpbnQgb2xkLXN0eWxlIChNRDUpIGlzc3VlciBoYXNoIHZhbHVlXG4iLAorI2VuZGlmCiAiIC1oYXNoICAgICAgICAgICAtIHN5bm9ueW0gZm9yIC1zdWJqZWN0X2hhc2hcbiIsCiAiIC1zdWJqZWN0ICAgICAgICAtIHByaW50IHN1YmplY3QgRE5cbiIsCiAiIC1pc3N1ZXIgICAgICAgICAtIHByaW50IGlzc3VlciBETlxuIiwKQEAgLTE3OSw2ICsxODUsOSBAQAogCWludCB0ZXh0PTAsc2VyaWFsPTAsc3ViamVjdD0wLGlzc3Vlcj0wLHN0YXJ0ZGF0ZT0wLGVuZGRhdGU9MDsKIAlpbnQgbmV4dF9zZXJpYWw9MDsKIAlpbnQgc3ViamVjdF9oYXNoPTAsaXNzdWVyX2hhc2g9MCxvY3NwaWQ9MDsKKyNpZm5kZWYgT1BFTlNTTF9OT19NRDUKKwlpbnQgc3ViamVjdF9oYXNoX29sZD0wLGlzc3Vlcl9oYXNoX29sZD0wOworI2VuZGlmCiAJaW50IG5vb3V0PTAsc2lnbl9mbGFnPTAsQ0FfZmxhZz0wLENBX2NyZWF0ZXNlcmlhbD0wLGVtYWlsPTA7CiAJaW50IG9jc3BfdXJpPTA7CiAJaW50IHRydXN0b3V0PTAsY2xydHJ1c3Q9MCxjbHJyZWplY3Q9MCxhbGlhc291dD0wLGNscmV4dD0wOwpAQCAtMTkwLDcgKzE5OSw3IEBACiAJWDUwOV9SRVEgKnJxPU5VTEw7CiAJaW50IGZpbmdlcnByaW50PTA7CiAJY2hhciBidWZbMjU2XTsKLQljb25zdCBFVlBfTUQgKm1kX2FsZywqZGlnZXN0PUVWUF9zaGExKCk7CisJY29uc3QgRVZQX01EICptZF9hbGcsKmRpZ2VzdD1OVUxMOwogCUNPTkYgKmV4dGNvbmYgPSBOVUxMOwogCWNoYXIgKmV4dHNlY3QgPSBOVUxMLCAqZXh0ZmlsZSA9IE5VTEwsICpwYXNzaW4gPSBOVUxMLCAqcGFzc2FyZ2luID0gTlVMTDsKIAlpbnQgbmVlZF9yYW5kID0gMDsKQEAgLTIyNSw3ICsyMzQsNyBAQAogCiAJY3R4PVg1MDlfU1RPUkVfbmV3KCk7CiAJaWYgKGN0eCA9PSBOVUxMKSBnb3RvIGVuZDsKLQlYNTA5X1NUT1JFX3NldF92ZXJpZnlfY2JfZnVuYyhjdHgsY2FsbGIpOworCVg1MDlfU1RPUkVfc2V0X3ZlcmlmeV9jYihjdHgsY2FsbGIpOwogCiAJYXJnYy0tOwogCWFyZ3YrKzsKQEAgLTM5Nyw4ICs0MDYsMTYgQEAKIAkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCItaGFzaCIpID09IDAKIAkJCXx8IHN0cmNtcCgqYXJndiwiLXN1YmplY3RfaGFzaCIpID09IDApCiAJCQlzdWJqZWN0X2hhc2g9ICsrbnVtOworI2lmbmRlZiBPUEVOU1NMX05PX01ENQorCQllbHNlIGlmIChzdHJjbXAoKmFyZ3YsIi1zdWJqZWN0X2hhc2hfb2xkIikgPT0gMCkKKwkJCXN1YmplY3RfaGFzaF9vbGQ9ICsrbnVtOworI2VuZGlmCiAJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiLWlzc3Vlcl9oYXNoIikgPT0gMCkKIAkJCWlzc3Vlcl9oYXNoPSArK251bTsKKyNpZm5kZWYgT1BFTlNTTF9OT19NRDUKKwkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCItaXNzdWVyX2hhc2hfb2xkIikgPT0gMCkKKwkJCWlzc3Vlcl9oYXNoX29sZD0gKytudW07CisjZW5kaWYKIAkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCItc3ViamVjdCIpID09IDApCiAJCQlzdWJqZWN0PSArK251bTsKIAkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCItaXNzdWVyIikgPT0gMCkKQEAgLTYyNiw3ICs2NDMsNyBAQAogCQlpZiAoIVg1MDlfc2V0X3N1YmplY3RfbmFtZSh4LHJlcS0+cmVxX2luZm8tPnN1YmplY3QpKSBnb3RvIGVuZDsKIAogCQlYNTA5X2dtdGltZV9hZGooWDUwOV9nZXRfbm90QmVmb3JlKHgpLDApOwotCSAgICAgICAgWDUwOV9nbXRpbWVfYWRqKFg1MDlfZ2V0X25vdEFmdGVyKHgpLChsb25nKTYwKjYwKjI0KmRheXMpOworCSAgICAgICAgWDUwOV90aW1lX2Fkal9leChYNTA5X2dldF9ub3RBZnRlcih4KSxkYXlzLCAwLCBOVUxMKTsKIAogCQlwa2V5ID0gWDUwOV9SRVFfZ2V0X3B1YmtleShyZXEpOwogCQlYNTA5X3NldF9wdWJrZXkoeCxwa2V5KTsKQEAgLTczOCwxMyArNzU1LDE0IEBACiAJCQllbHNlIGlmICgoZW1haWwgPT0gaSkgfHwgKG9jc3BfdXJpID09IGkpKQogCQkJCXsKIAkJCQlpbnQgajsKLQkJCQlTVEFDSyAqZW1sc3Q7CisJCQkJU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpICplbWxzdDsKIAkJCQlpZiAoZW1haWwgPT0gaSkKIAkJCQkJZW1sc3QgPSBYNTA5X2dldDFfZW1haWwoeCk7CiAJCQkJZWxzZQogCQkJCQllbWxzdCA9IFg1MDlfZ2V0MV9vY3NwKHgpOwotCQkJCWZvciAoaiA9IDA7IGogPCBza19udW0oZW1sc3QpOyBqKyspCi0JCQkJCUJJT19wcmludGYoU1REb3V0LCAiJXNcbiIsIHNrX3ZhbHVlKGVtbHN0LCBqKSk7CisJCQkJZm9yIChqID0gMDsgaiA8IHNrX09QRU5TU0xfU1RSSU5HX251bShlbWxzdCk7IGorKykKKwkJCQkJQklPX3ByaW50ZihTVERvdXQsICIlc1xuIiwKKwkJCQkJCSAgIHNrX09QRU5TU0xfU1RSSU5HX3ZhbHVlKGVtbHN0LCBqKSk7CiAJCQkJWDUwOV9lbWFpbF9mcmVlKGVtbHN0KTsKIAkJCQl9CiAJCQllbHNlIGlmIChhbGlhc291dCA9PSBpKQpAQCAtNzU4LDEwICs3NzYsMjIgQEAKIAkJCQl7CiAJCQkJQklPX3ByaW50ZihTVERvdXQsIiUwOGx4XG4iLFg1MDlfc3ViamVjdF9uYW1lX2hhc2goeCkpOwogCQkJCX0KKyNpZm5kZWYgT1BFTlNTTF9OT19NRDUKKwkJCWVsc2UgaWYgKHN1YmplY3RfaGFzaF9vbGQgPT0gaSkKKwkJCQl7CisJCQkJQklPX3ByaW50ZihTVERvdXQsIiUwOGx4XG4iLFg1MDlfc3ViamVjdF9uYW1lX2hhc2hfb2xkKHgpKTsKKwkJCQl9CisjZW5kaWYKIAkJCWVsc2UgaWYgKGlzc3Vlcl9oYXNoID09IGkpCiAJCQkJewogCQkJCUJJT19wcmludGYoU1REb3V0LCIlMDhseFxuIixYNTA5X2lzc3Vlcl9uYW1lX2hhc2goeCkpOwogCQkJCX0KKyNpZm5kZWYgT1BFTlNTTF9OT19NRDUKKwkJCWVsc2UgaWYgKGlzc3Vlcl9oYXNoX29sZCA9PSBpKQorCQkJCXsKKwkJCQlCSU9fcHJpbnRmKFNURG91dCwiJTA4bHhcbiIsWDUwOV9pc3N1ZXJfbmFtZV9oYXNoX29sZCh4KSk7CisJCQkJfQorI2VuZGlmCiAJCQllbHNlIGlmIChwcHJpbnQgPT0gaSkKIAkJCQl7CiAJCQkJWDUwOV9QVVJQT1NFICpwdG1wOwpAQCAtODkyLDE0ICs5MjIsMTggQEAKIAkJCQlpbnQgajsKIAkJCQl1bnNpZ25lZCBpbnQgbjsKIAkJCQl1bnNpZ25lZCBjaGFyIG1kW0VWUF9NQVhfTURfU0laRV07CisJCQkJY29uc3QgRVZQX01EICpmZGlnID0gZGlnZXN0OwogCi0JCQkJaWYgKCFYNTA5X2RpZ2VzdCh4LGRpZ2VzdCxtZCwmbikpCisJCQkJaWYgKCFmZGlnKQorCQkJCQlmZGlnID0gRVZQX3NoYTEoKTsKKworCQkJCWlmICghWDUwOV9kaWdlc3QoeCxmZGlnLG1kLCZuKSkKIAkJCQkJewogCQkJCQlCSU9fcHJpbnRmKGJpb19lcnIsIm91dCBvZiBtZW1vcnlcbiIpOwogCQkJCQlnb3RvIGVuZDsKIAkJCQkJfQogCQkJCUJJT19wcmludGYoU1REb3V0LCIlcyBGaW5nZXJwcmludD0iLAotCQkJCQkJT0JKX25pZDJzbihFVlBfTURfdHlwZShkaWdlc3QpKSk7CisJCQkJCQlPQkpfbmlkMnNuKEVWUF9NRF90eXBlKGZkaWcpKSk7CiAJCQkJZm9yIChqPTA7IGo8KGludCluOyBqKyspCiAJCQkJCXsKIAkJCQkJQklPX3ByaW50ZihTVERvdXQsIiUwMlglYyIsbWRbal0sCkBAIC05MTksMTQgKzk1Myw2IEBACiAJCQkJCQlwYXNzaW4sIGUsICJQcml2YXRlIGtleSIpOwogCQkJCQlpZiAoVXBrZXkgPT0gTlVMTCkgZ290byBlbmQ7CiAJCQkJCX0KLSNpZm5kZWYgT1BFTlNTTF9OT19EU0EKLQkJICAgICAgICAgICAgICAgIGlmIChVcGtleS0+dHlwZSA9PSBFVlBfUEtFWV9EU0EpCi0JCSAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2VzdD1FVlBfZHNzMSgpOwotI2VuZGlmCi0jaWZuZGVmIE9QRU5TU0xfTk9fRUNEU0EKLQkJCQlpZiAoVXBrZXktPnR5cGUgPT0gRVZQX1BLRVlfRUMpCi0JCQkJCWRpZ2VzdD1FVlBfZWNkc2EoKTsKLSNlbmRpZgogCiAJCQkJYXNzZXJ0KG5lZWRfcmFuZCk7CiAJCQkJaWYgKCFzaWduKHgsVXBrZXksZGF5cyxjbHJleHQsZGlnZXN0LApAQCAtOTQzLDE0ICs5NjksNiBAQAogCQkJCQkJIkNBIFByaXZhdGUgS2V5Iik7CiAJCQkJCWlmIChDQXBrZXkgPT0gTlVMTCkgZ290byBlbmQ7CiAJCQkJCX0KLSNpZm5kZWYgT1BFTlNTTF9OT19EU0EKLQkJICAgICAgICAgICAgICAgIGlmIChDQXBrZXktPnR5cGUgPT0gRVZQX1BLRVlfRFNBKQotCQkgICAgICAgICAgICAgICAgICAgICAgICBkaWdlc3Q9RVZQX2RzczEoKTsKLSNlbmRpZgotI2lmbmRlZiBPUEVOU1NMX05PX0VDRFNBCi0JCQkJaWYgKENBcGtleS0+dHlwZSA9PSBFVlBfUEtFWV9FQykKLQkJCQkJZGlnZXN0ID0gRVZQX2VjZHNhKCk7Ci0jZW5kaWYKIAkJCQkKIAkJCQlhc3NlcnQobmVlZF9yYW5kKTsKIAkJCQlpZiAoIXg1MDlfY2VydGlmeShjdHgsQ0FmaWxlLGRpZ2VzdCx4LHhjYSwKQEAgLTk3OCwxNSArOTk2LDYgQEAKIAogCQkJCUJJT19wcmludGYoYmlvX2VyciwiR2VuZXJhdGluZyBjZXJ0aWZpY2F0ZSByZXF1ZXN0XG4iKTsKIAotI2lmbmRlZiBPUEVOU1NMX05PX0RTQQotCQkgICAgICAgICAgICAgICAgaWYgKHBrLT50eXBlID09IEVWUF9QS0VZX0RTQSkKLQkJICAgICAgICAgICAgICAgICAgICAgICAgZGlnZXN0PUVWUF9kc3MxKCk7Ci0jZW5kaWYKLSNpZm5kZWYgT1BFTlNTTF9OT19FQ0RTQQotCQkJCWlmIChway0+dHlwZSA9PSBFVlBfUEtFWV9FQykKLQkJCQkJZGlnZXN0PUVWUF9lY2RzYSgpOwotI2VuZGlmCi0KIAkJCQlycT1YNTA5X3RvX1g1MDlfUkVRKHgscGssZGlnZXN0KTsKIAkJCQlFVlBfUEtFWV9mcmVlKHBrKTsKIAkJCQlpZiAocnEgPT0gTlVMTCkKQEAgLTEwNDAsMTYgKzEwNDksMTUgQEAKIAkJfQogCWVsc2UgaWYgKG91dGZvcm1hdCA9PSBGT1JNQVRfTkVUU0NBUEUpCiAJCXsKLQkJQVNOMV9IRUFERVIgYWg7Ci0JCUFTTjFfT0NURVRfU1RSSU5HIG9zOworCQlORVRTQ0FQRV9YNTA5IG54OworCQlBU04xX09DVEVUX1NUUklORyBoZHI7CiAKLQkJb3MuZGF0YT0odW5zaWduZWQgY2hhciAqKU5FVFNDQVBFX0NFUlRfSERSOwotCQlvcy5sZW5ndGg9c3RybGVuKE5FVFNDQVBFX0NFUlRfSERSKTsKLQkJYWguaGVhZGVyPSAmb3M7Ci0JCWFoLmRhdGE9KGNoYXIgKil4OwotCQlhaC5tZXRoPVg1MDlfYXNuMV9tZXRoKCk7CisJCWhkci5kYXRhPSh1bnNpZ25lZCBjaGFyICopTkVUU0NBUEVfQ0VSVF9IRFI7CisJCWhkci5sZW5ndGg9c3RybGVuKE5FVFNDQVBFX0NFUlRfSERSKTsKKwkJbnguaGVhZGVyPSAmaGRyOworCQlueC5jZXJ0PXg7CiAKLQkJaT1BU04xX2kyZF9iaW9fb2YoQVNOMV9IRUFERVIsaTJkX0FTTjFfSEVBREVSLG91dCwmYWgpOworCQlpPUFTTjFfaXRlbV9pMmRfYmlvKEFTTjFfSVRFTV9ycHRyKE5FVFNDQVBFX1g1MDkpLG91dCwmbngpOwogCQl9CiAJZWxzZQl7CiAJCUJJT19wcmludGYoYmlvX2VyciwiYmFkIG91dHB1dCBmb3JtYXQgc3BlY2lmaWVkIGZvciBvdXRmaWxlXG4iKTsKQEAgLTExNjgsNyArMTE3Niw3IEBACiAJCWdvdG8gZW5kOwogCiAJLyogaGFyZHdpcmVkIGV4cGlyZWQgKi8KLQlpZiAoWDUwOV9nbXRpbWVfYWRqKFg1MDlfZ2V0X25vdEFmdGVyKHgpLChsb25nKTYwKjYwKjI0KmRheXMpID09IE5VTEwpCisJaWYgKFg1MDlfdGltZV9hZGpfZXgoWDUwOV9nZXRfbm90QWZ0ZXIoeCksZGF5cywgMCwgTlVMTCkgPT0gTlVMTCkKIAkJZ290byBlbmQ7CiAKIAlpZiAoY2xyZXh0KQpkaWZmIC0tZ2l0IGEvY3J5cHRvLzAuOS45LWRldi9SRUFETUUuYW5kcm9pZCBiL2NyeXB0by8wLjkuOS1kZXYvUkVBRE1FLmFuZHJvaWQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4MmY2ZDQuLjAwMDAwMDAKLS0tIGEvY3J5cHRvLzAuOS45LWRldi9SRUFETUUuYW5kcm9pZAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotVGhpcyBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QgaW4gdGhlIE9wZW5TU0wgZGlzdHJpYnV0aW9uLgotCi1JdCBoYXMgYmVlbiBhZGRlZCB0byBpbXBvcnQgYXNzZW1ibGVyIGNvZGUgZnJvbSBPcGVuU1NMIDAuOS45LWRldgotKGZ0cDovL2Z0cC5vcGVuc3NsLm9yZy9zbmFwc2hvdC8pLiAgVGhlIGFzc2VtYmxlciBmaWxlcyAoLnMpIHdlcmUKLWdlbmVyYXRlZCBieSBydW5uaW5nIHRoZSBQZXJsIGZpbGVzICgucGwpLCB3aXRoICIuYWxpZ24gMiIgYXBwZW5kZWQKLXRvIGF2b2lkIGFzc2VtYmxlciBlcnJvciBtZXNzYWdlcyB3aGVyZSBuZWVkZWQuCmRpZmYgLS1naXQgYS9jcnlwdG8vMC45LjktZGV2L3NoYS9zaGExLWFybXY0LWxhcmdlLnMgYi9jcnlwdG8vMC45LjktZGV2L3NoYS9zaGExLWFybXY0LWxhcmdlLnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5NDU3NTQuLjAwMDAwMDAKLS0tIGEvY3J5cHRvLzAuOS45LWRldi9zaGEvc2hhMS1hcm12NC1sYXJnZS5zCisrKyAvZGV2L251bGwKQEAgLTEsMzc2ICswLDAgQEAKLS50ZXh0Ci0KLS5nbG9iYWwJc2hhMV9ibG9ja19kYXRhX29yZGVyCi0udHlwZQlzaGExX2Jsb2NrX2RhdGFfb3JkZXIsJWZ1bmN0aW9uCi0KLS5hbGlnbgkyCi1zaGExX2Jsb2NrX2RhdGFfb3JkZXI6Ci0Jc3RtZGIJc3AhLHtyNC1yMTIsbHJ9Ci0JYWRkCXIyLHIxLHIyLGxzbCM2CUAgcjIgdG8gcG9pbnQgYXQgdGhlIGVuZCBvZiByMQotCWxkbWlhCXIwLHtyMyxyNCxyNSxyNixyN30KLS5MbG9vcDoKLQlsZHIJcjgsLkxLXzAwXzE5Ci0JbW92CXIxNCxzcAotCXN1YglzcCxzcCwjMTUqNAotCW1vdglyNSxyNSxyb3IjMzAKLQltb3YJcjYscjYscm9yIzMwCi0JbW92CXI3LHI3LHJvciMzMAkJQCBbNl0KLS5MXzAwXzE1OgotCWxkcmIJcjEwLFtyMV0sIzQKLQlsZHJiCXIxMSxbcjEsIy0zXQotCWxkcmIJcjEyLFtyMSwjLTJdCi0JYWRkCXI3LHI4LHI3LHJvciMyCQkJQCBFKz1LXzAwXzE5Ci0Jb3JyCXIxMCxyMTEscjEwLGxzbCM4Ci0JbGRyYglyMTEsW3IxLCMtMV0KLQlvcnIJcjEwLHIxMixyMTAsbHNsIzgKLQlhZGQJcjcscjcscjMscm9yIzI3CQkJQCBFKz1ST1IoQSwyNykKLQlvcnIJcjEwLHIxMSxyMTAsbHNsIzgKLQlhZGQJcjcscjcscjEwCQkJQCBFKz1YW2ldCi0JZW9yCXIxMSxyNSxyNgkJCUAgRl94eF94eAotCXN0cglyMTAsW3IxNCwjLTRdIQotCWFuZAlyMTEscjQscjExLHJvciMyCi0JZW9yCXIxMSxyMTEscjYscm9yIzIJCUAgRl8wMF8xOShCLEMsRCkKLQlhZGQJcjcscjcscjExCQkJQCBFKz1GXzAwXzE5KEIsQyxEKQotCWxkcmIJcjEwLFtyMV0sIzQKLQlsZHJiCXIxMSxbcjEsIy0zXQotCWxkcmIJcjEyLFtyMSwjLTJdCi0JYWRkCXI2LHI4LHI2LHJvciMyCQkJQCBFKz1LXzAwXzE5Ci0Jb3JyCXIxMCxyMTEscjEwLGxzbCM4Ci0JbGRyYglyMTEsW3IxLCMtMV0KLQlvcnIJcjEwLHIxMixyMTAsbHNsIzgKLQlhZGQJcjYscjYscjcscm9yIzI3CQkJQCBFKz1ST1IoQSwyNykKLQlvcnIJcjEwLHIxMSxyMTAsbHNsIzgKLQlhZGQJcjYscjYscjEwCQkJQCBFKz1YW2ldCi0JZW9yCXIxMSxyNCxyNQkJCUAgRl94eF94eAotCXN0cglyMTAsW3IxNCwjLTRdIQotCWFuZAlyMTEscjMscjExLHJvciMyCi0JZW9yCXIxMSxyMTEscjUscm9yIzIJCUAgRl8wMF8xOShCLEMsRCkKLQlhZGQJcjYscjYscjExCQkJQCBFKz1GXzAwXzE5KEIsQyxEKQotCWxkcmIJcjEwLFtyMV0sIzQKLQlsZHJiCXIxMSxbcjEsIy0zXQotCWxkcmIJcjEyLFtyMSwjLTJdCi0JYWRkCXI1LHI4LHI1LHJvciMyCQkJQCBFKz1LXzAwXzE5Ci0Jb3JyCXIxMCxyMTEscjEwLGxzbCM4Ci0JbGRyYglyMTEsW3IxLCMtMV0KLQlvcnIJcjEwLHIxMixyMTAsbHNsIzgKLQlhZGQJcjUscjUscjYscm9yIzI3CQkJQCBFKz1ST1IoQSwyNykKLQlvcnIJcjEwLHIxMSxyMTAsbHNsIzgKLQlhZGQJcjUscjUscjEwCQkJQCBFKz1YW2ldCi0JZW9yCXIxMSxyMyxyNAkJCUAgRl94eF94eAotCXN0cglyMTAsW3IxNCwjLTRdIQotCWFuZAlyMTEscjcscjExLHJvciMyCi0JZW9yCXIxMSxyMTEscjQscm9yIzIJCUAgRl8wMF8xOShCLEMsRCkKLQlhZGQJcjUscjUscjExCQkJQCBFKz1GXzAwXzE5KEIsQyxEKQotCWxkcmIJcjEwLFtyMV0sIzQKLQlsZHJiCXIxMSxbcjEsIy0zXQotCWxkcmIJcjEyLFtyMSwjLTJdCi0JYWRkCXI0LHI4LHI0LHJvciMyCQkJQCBFKz1LXzAwXzE5Ci0Jb3JyCXIxMCxyMTEscjEwLGxzbCM4Ci0JbGRyYglyMTEsW3IxLCMtMV0KLQlvcnIJcjEwLHIxMixyMTAsbHNsIzgKLQlhZGQJcjQscjQscjUscm9yIzI3CQkJQCBFKz1ST1IoQSwyNykKLQlvcnIJcjEwLHIxMSxyMTAsbHNsIzgKLQlhZGQJcjQscjQscjEwCQkJQCBFKz1YW2ldCi0JZW9yCXIxMSxyNyxyMwkJCUAgRl94eF94eAotCXN0cglyMTAsW3IxNCwjLTRdIQotCWFuZAlyMTEscjYscjExLHJvciMyCi0JZW9yCXIxMSxyMTEscjMscm9yIzIJCUAgRl8wMF8xOShCLEMsRCkKLQlhZGQJcjQscjQscjExCQkJQCBFKz1GXzAwXzE5KEIsQyxEKQotCWxkcmIJcjEwLFtyMV0sIzQKLQlsZHJiCXIxMSxbcjEsIy0zXQotCWxkcmIJcjEyLFtyMSwjLTJdCi0JYWRkCXIzLHI4LHIzLHJvciMyCQkJQCBFKz1LXzAwXzE5Ci0Jb3JyCXIxMCxyMTEscjEwLGxzbCM4Ci0JbGRyYglyMTEsW3IxLCMtMV0KLQlvcnIJcjEwLHIxMixyMTAsbHNsIzgKLQlhZGQJcjMscjMscjQscm9yIzI3CQkJQCBFKz1ST1IoQSwyNykKLQlvcnIJcjEwLHIxMSxyMTAsbHNsIzgKLQlhZGQJcjMscjMscjEwCQkJQCBFKz1YW2ldCi0JZW9yCXIxMSxyNixyNwkJCUAgRl94eF94eAotCXN0cglyMTAsW3IxNCwjLTRdIQotCWFuZAlyMTEscjUscjExLHJvciMyCi0JZW9yCXIxMSxyMTEscjcscm9yIzIJCUAgRl8wMF8xOShCLEMsRCkKLQlhZGQJcjMscjMscjExCQkJQCBFKz1GXzAwXzE5KEIsQyxEKQotCXRlcQlyMTQsc3AKLQlibmUJLkxfMDBfMTUJCUAgWygoMTErNCkqNSsyKSozXQotCWxkcmIJcjEwLFtyMV0sIzQKLQlsZHJiCXIxMSxbcjEsIy0zXQotCWxkcmIJcjEyLFtyMSwjLTJdCi0JYWRkCXI3LHI4LHI3LHJvciMyCQkJQCBFKz1LXzAwXzE5Ci0Jb3JyCXIxMCxyMTEscjEwLGxzbCM4Ci0JbGRyYglyMTEsW3IxLCMtMV0KLQlvcnIJcjEwLHIxMixyMTAsbHNsIzgKLQlhZGQJcjcscjcscjMscm9yIzI3CQkJQCBFKz1ST1IoQSwyNykKLQlvcnIJcjEwLHIxMSxyMTAsbHNsIzgKLQlhZGQJcjcscjcscjEwCQkJQCBFKz1YW2ldCi0JZW9yCXIxMSxyNSxyNgkJCUAgRl94eF94eAotCXN0cglyMTAsW3IxNCwjLTRdIQotCWFuZAlyMTEscjQscjExLHJvciMyCi0JZW9yCXIxMSxyMTEscjYscm9yIzIJCUAgRl8wMF8xOShCLEMsRCkKLQlhZGQJcjcscjcscjExCQkJQCBFKz1GXzAwXzE5KEIsQyxEKQotCWxkcglyMTAsW3IxNCwjMTUqNF0KLQlsZHIJcjExLFtyMTQsIzEzKjRdCi0JbGRyCXIxMixbcjE0LCM3KjRdCi0JYWRkCXI2LHI4LHI2LHJvciMyCQkJQCBFKz1LX3h4X3h4Ci0JZW9yCXIxMCxyMTAscjExCi0JbGRyCXIxMSxbcjE0LCMyKjRdCi0JYWRkCXI2LHI2LHI3LHJvciMyNwkJCUAgRSs9Uk9SKEEsMjcpCi0JZW9yCXIxMCxyMTAscjEyCi0JZW9yCXIxMCxyMTAscjExCi0JZW9yCXIxMSxyNCxyNQkJCUAgRl94eF94eCwgYnV0IG5vdCBpbiA0MF81OQotCW1vdglyMTAscjEwLHJvciMzMQotCWFkZAlyNixyNixyMTAJCQlAIEUrPVhbaV0KLQlzdHIJcjEwLFtyMTQsIy00XSEKLQlhbmQJcjExLHIzLHIxMSxyb3IjMgotCWVvcglyMTEscjExLHI1LHJvciMyCQlAIEZfMDBfMTkoQixDLEQpCi0JYWRkCXI2LHI2LHIxMQkJCUAgRSs9Rl8wMF8xOShCLEMsRCkKLQlsZHIJcjEwLFtyMTQsIzE1KjRdCi0JbGRyCXIxMSxbcjE0LCMxMyo0XQotCWxkcglyMTIsW3IxNCwjNyo0XQotCWFkZAlyNSxyOCxyNSxyb3IjMgkJCUAgRSs9S194eF94eAotCWVvcglyMTAscjEwLHIxMQotCWxkcglyMTEsW3IxNCwjMio0XQotCWFkZAlyNSxyNSxyNixyb3IjMjcJCQlAIEUrPVJPUihBLDI3KQotCWVvcglyMTAscjEwLHIxMgotCWVvcglyMTAscjEwLHIxMQotCWVvcglyMTEscjMscjQJCQlAIEZfeHhfeHgsIGJ1dCBub3QgaW4gNDBfNTkKLQltb3YJcjEwLHIxMCxyb3IjMzEKLQlhZGQJcjUscjUscjEwCQkJQCBFKz1YW2ldCi0Jc3RyCXIxMCxbcjE0LCMtNF0hCi0JYW5kCXIxMSxyNyxyMTEscm9yIzIKLQllb3IJcjExLHIxMSxyNCxyb3IjMgkJQCBGXzAwXzE5KEIsQyxEKQotCWFkZAlyNSxyNSxyMTEJCQlAIEUrPUZfMDBfMTkoQixDLEQpCi0JbGRyCXIxMCxbcjE0LCMxNSo0XQotCWxkcglyMTEsW3IxNCwjMTMqNF0KLQlsZHIJcjEyLFtyMTQsIzcqNF0KLQlhZGQJcjQscjgscjQscm9yIzIJCQlAIEUrPUtfeHhfeHgKLQllb3IJcjEwLHIxMCxyMTEKLQlsZHIJcjExLFtyMTQsIzIqNF0KLQlhZGQJcjQscjQscjUscm9yIzI3CQkJQCBFKz1ST1IoQSwyNykKLQllb3IJcjEwLHIxMCxyMTIKLQllb3IJcjEwLHIxMCxyMTEKLQllb3IJcjExLHI3LHIzCQkJQCBGX3h4X3h4LCBidXQgbm90IGluIDQwXzU5Ci0JbW92CXIxMCxyMTAscm9yIzMxCi0JYWRkCXI0LHI0LHIxMAkJCUAgRSs9WFtpXQotCXN0cglyMTAsW3IxNCwjLTRdIQotCWFuZAlyMTEscjYscjExLHJvciMyCi0JZW9yCXIxMSxyMTEscjMscm9yIzIJCUAgRl8wMF8xOShCLEMsRCkKLQlhZGQJcjQscjQscjExCQkJQCBFKz1GXzAwXzE5KEIsQyxEKQotCWxkcglyMTAsW3IxNCwjMTUqNF0KLQlsZHIJcjExLFtyMTQsIzEzKjRdCi0JbGRyCXIxMixbcjE0LCM3KjRdCi0JYWRkCXIzLHI4LHIzLHJvciMyCQkJQCBFKz1LX3h4X3h4Ci0JZW9yCXIxMCxyMTAscjExCi0JbGRyCXIxMSxbcjE0LCMyKjRdCi0JYWRkCXIzLHIzLHI0LHJvciMyNwkJCUAgRSs9Uk9SKEEsMjcpCi0JZW9yCXIxMCxyMTAscjEyCi0JZW9yCXIxMCxyMTAscjExCi0JZW9yCXIxMSxyNixyNwkJCUAgRl94eF94eCwgYnV0IG5vdCBpbiA0MF81OQotCW1vdglyMTAscjEwLHJvciMzMQotCWFkZAlyMyxyMyxyMTAJCQlAIEUrPVhbaV0KLQlzdHIJcjEwLFtyMTQsIy00XSEKLQlhbmQJcjExLHI1LHIxMSxyb3IjMgotCWVvcglyMTEscjExLHI3LHJvciMyCQlAIEZfMDBfMTkoQixDLEQpCi0JYWRkCXIzLHIzLHIxMQkJCUAgRSs9Rl8wMF8xOShCLEMsRCkKLQotCWxkcglyOCwuTEtfMjBfMzkJCUAgWysxNSsxNio0XQotCXN1YglzcCxzcCwjMjUqNAotCWNtbglzcCwjMAkJCUAgWyszXSwgY2xlYXIgY2FycnkgdG8gZGVub3RlIDIwXzM5Ci0uTF8yMF8zOV9vcl82MF83OToKLQlsZHIJcjEwLFtyMTQsIzE1KjRdCi0JbGRyCXIxMSxbcjE0LCMxMyo0XQotCWxkcglyMTIsW3IxNCwjNyo0XQotCWFkZAlyNyxyOCxyNyxyb3IjMgkJCUAgRSs9S194eF94eAotCWVvcglyMTAscjEwLHIxMQotCWxkcglyMTEsW3IxNCwjMio0XQotCWFkZAlyNyxyNyxyMyxyb3IjMjcJCQlAIEUrPVJPUihBLDI3KQotCWVvcglyMTAscjEwLHIxMgotCWVvcglyMTAscjEwLHIxMQotCWVvcglyMTEscjUscjYJCQlAIEZfeHhfeHgsIGJ1dCBub3QgaW4gNDBfNTkKLQltb3YJcjEwLHIxMCxyb3IjMzEKLQlhZGQJcjcscjcscjEwCQkJQCBFKz1YW2ldCi0Jc3RyCXIxMCxbcjE0LCMtNF0hCi0JZW9yCXIxMSxyNCxyMTEscm9yIzIJCUAgRl8yMF8zOShCLEMsRCkKLQlhZGQJcjcscjcscjExCQkJQCBFKz1GXzIwXzM5KEIsQyxEKQotCWxkcglyMTAsW3IxNCwjMTUqNF0KLQlsZHIJcjExLFtyMTQsIzEzKjRdCi0JbGRyCXIxMixbcjE0LCM3KjRdCi0JYWRkCXI2LHI4LHI2LHJvciMyCQkJQCBFKz1LX3h4X3h4Ci0JZW9yCXIxMCxyMTAscjExCi0JbGRyCXIxMSxbcjE0LCMyKjRdCi0JYWRkCXI2LHI2LHI3LHJvciMyNwkJCUAgRSs9Uk9SKEEsMjcpCi0JZW9yCXIxMCxyMTAscjEyCi0JZW9yCXIxMCxyMTAscjExCi0JZW9yCXIxMSxyNCxyNQkJCUAgRl94eF94eCwgYnV0IG5vdCBpbiA0MF81OQotCW1vdglyMTAscjEwLHJvciMzMQotCWFkZAlyNixyNixyMTAJCQlAIEUrPVhbaV0KLQlzdHIJcjEwLFtyMTQsIy00XSEKLQllb3IJcjExLHIzLHIxMSxyb3IjMgkJQCBGXzIwXzM5KEIsQyxEKQotCWFkZAlyNixyNixyMTEJCQlAIEUrPUZfMjBfMzkoQixDLEQpCi0JbGRyCXIxMCxbcjE0LCMxNSo0XQotCWxkcglyMTEsW3IxNCwjMTMqNF0KLQlsZHIJcjEyLFtyMTQsIzcqNF0KLQlhZGQJcjUscjgscjUscm9yIzIJCQlAIEUrPUtfeHhfeHgKLQllb3IJcjEwLHIxMCxyMTEKLQlsZHIJcjExLFtyMTQsIzIqNF0KLQlhZGQJcjUscjUscjYscm9yIzI3CQkJQCBFKz1ST1IoQSwyNykKLQllb3IJcjEwLHIxMCxyMTIKLQllb3IJcjEwLHIxMCxyMTEKLQllb3IJcjExLHIzLHI0CQkJQCBGX3h4X3h4LCBidXQgbm90IGluIDQwXzU5Ci0JbW92CXIxMCxyMTAscm9yIzMxCi0JYWRkCXI1LHI1LHIxMAkJCUAgRSs9WFtpXQotCXN0cglyMTAsW3IxNCwjLTRdIQotCWVvcglyMTEscjcscjExLHJvciMyCQlAIEZfMjBfMzkoQixDLEQpCi0JYWRkCXI1LHI1LHIxMQkJCUAgRSs9Rl8yMF8zOShCLEMsRCkKLQlsZHIJcjEwLFtyMTQsIzE1KjRdCi0JbGRyCXIxMSxbcjE0LCMxMyo0XQotCWxkcglyMTIsW3IxNCwjNyo0XQotCWFkZAlyNCxyOCxyNCxyb3IjMgkJCUAgRSs9S194eF94eAotCWVvcglyMTAscjEwLHIxMQotCWxkcglyMTEsW3IxNCwjMio0XQotCWFkZAlyNCxyNCxyNSxyb3IjMjcJCQlAIEUrPVJPUihBLDI3KQotCWVvcglyMTAscjEwLHIxMgotCWVvcglyMTAscjEwLHIxMQotCWVvcglyMTEscjcscjMJCQlAIEZfeHhfeHgsIGJ1dCBub3QgaW4gNDBfNTkKLQltb3YJcjEwLHIxMCxyb3IjMzEKLQlhZGQJcjQscjQscjEwCQkJQCBFKz1YW2ldCi0Jc3RyCXIxMCxbcjE0LCMtNF0hCi0JZW9yCXIxMSxyNixyMTEscm9yIzIJCUAgRl8yMF8zOShCLEMsRCkKLQlhZGQJcjQscjQscjExCQkJQCBFKz1GXzIwXzM5KEIsQyxEKQotCWxkcglyMTAsW3IxNCwjMTUqNF0KLQlsZHIJcjExLFtyMTQsIzEzKjRdCi0JbGRyCXIxMixbcjE0LCM3KjRdCi0JYWRkCXIzLHI4LHIzLHJvciMyCQkJQCBFKz1LX3h4X3h4Ci0JZW9yCXIxMCxyMTAscjExCi0JbGRyCXIxMSxbcjE0LCMyKjRdCi0JYWRkCXIzLHIzLHI0LHJvciMyNwkJCUAgRSs9Uk9SKEEsMjcpCi0JZW9yCXIxMCxyMTAscjEyCi0JZW9yCXIxMCxyMTAscjExCi0JZW9yCXIxMSxyNixyNwkJCUAgRl94eF94eCwgYnV0IG5vdCBpbiA0MF81OQotCW1vdglyMTAscjEwLHJvciMzMQotCWFkZAlyMyxyMyxyMTAJCQlAIEUrPVhbaV0KLQlzdHIJcjEwLFtyMTQsIy00XSEKLQllb3IJcjExLHI1LHIxMSxyb3IjMgkJQCBGXzIwXzM5KEIsQyxEKQotCWFkZAlyMyxyMyxyMTEJCQlAIEUrPUZfMjBfMzkoQixDLEQpCi0JdGVxCXIxNCxzcAkJCUAgcHJlc2VydmUgY2FycnkKLQlibmUJLkxfMjBfMzlfb3JfNjBfNzkJQCBbKygoMTIrMykqNSsyKSo0XQotCWJjcwkuTF9kb25lCQkJQCBbKygoMTIrMykqNSsyKSo0XSwgc3BhcmUgMzAwIGJ5dGVzCi0KLQlsZHIJcjgsLkxLXzQwXzU5Ci0Jc3ViCXNwLHNwLCMyMCo0CQlAIFsrMl0KLS5MXzQwXzU5OgotCWxkcglyMTAsW3IxNCwjMTUqNF0KLQlsZHIJcjExLFtyMTQsIzEzKjRdCi0JbGRyCXIxMixbcjE0LCM3KjRdCi0JYWRkCXI3LHI4LHI3LHJvciMyCQkJQCBFKz1LX3h4X3h4Ci0JZW9yCXIxMCxyMTAscjExCi0JbGRyCXIxMSxbcjE0LCMyKjRdCi0JYWRkCXI3LHI3LHIzLHJvciMyNwkJCUAgRSs9Uk9SKEEsMjcpCi0JZW9yCXIxMCxyMTAscjEyCi0JZW9yCXIxMCxyMTAscjExCi0JbW92CXIxMCxyMTAscm9yIzMxCi0JYWRkCXI3LHI3LHIxMAkJCUAgRSs9WFtpXQotCXN0cglyMTAsW3IxNCwjLTRdIQotCWFuZAlyMTEscjQscjUscm9yIzIKLQlvcnIJcjEyLHI0LHI1LHJvciMyCi0JYW5kCXIxMixyMTIscjYscm9yIzIKLQlvcnIJcjExLHIxMSxyMTIJCQlAIEZfNDBfNTkoQixDLEQpCi0JYWRkCXI3LHI3LHIxMQkJCUAgRSs9Rl80MF81OShCLEMsRCkKLQlsZHIJcjEwLFtyMTQsIzE1KjRdCi0JbGRyCXIxMSxbcjE0LCMxMyo0XQotCWxkcglyMTIsW3IxNCwjNyo0XQotCWFkZAlyNixyOCxyNixyb3IjMgkJCUAgRSs9S194eF94eAotCWVvcglyMTAscjEwLHIxMQotCWxkcglyMTEsW3IxNCwjMio0XQotCWFkZAlyNixyNixyNyxyb3IjMjcJCQlAIEUrPVJPUihBLDI3KQotCWVvcglyMTAscjEwLHIxMgotCWVvcglyMTAscjEwLHIxMQotCW1vdglyMTAscjEwLHJvciMzMQotCWFkZAlyNixyNixyMTAJCQlAIEUrPVhbaV0KLQlzdHIJcjEwLFtyMTQsIy00XSEKLQlhbmQJcjExLHIzLHI0LHJvciMyCi0Jb3JyCXIxMixyMyxyNCxyb3IjMgotCWFuZAlyMTIscjEyLHI1LHJvciMyCi0Jb3JyCXIxMSxyMTEscjEyCQkJQCBGXzQwXzU5KEIsQyxEKQotCWFkZAlyNixyNixyMTEJCQlAIEUrPUZfNDBfNTkoQixDLEQpCi0JbGRyCXIxMCxbcjE0LCMxNSo0XQotCWxkcglyMTEsW3IxNCwjMTMqNF0KLQlsZHIJcjEyLFtyMTQsIzcqNF0KLQlhZGQJcjUscjgscjUscm9yIzIJCQlAIEUrPUtfeHhfeHgKLQllb3IJcjEwLHIxMCxyMTEKLQlsZHIJcjExLFtyMTQsIzIqNF0KLQlhZGQJcjUscjUscjYscm9yIzI3CQkJQCBFKz1ST1IoQSwyNykKLQllb3IJcjEwLHIxMCxyMTIKLQllb3IJcjEwLHIxMCxyMTEKLQltb3YJcjEwLHIxMCxyb3IjMzEKLQlhZGQJcjUscjUscjEwCQkJQCBFKz1YW2ldCi0Jc3RyCXIxMCxbcjE0LCMtNF0hCi0JYW5kCXIxMSxyNyxyMyxyb3IjMgotCW9ycglyMTIscjcscjMscm9yIzIKLQlhbmQJcjEyLHIxMixyNCxyb3IjMgotCW9ycglyMTEscjExLHIxMgkJCUAgRl80MF81OShCLEMsRCkKLQlhZGQJcjUscjUscjExCQkJQCBFKz1GXzQwXzU5KEIsQyxEKQotCWxkcglyMTAsW3IxNCwjMTUqNF0KLQlsZHIJcjExLFtyMTQsIzEzKjRdCi0JbGRyCXIxMixbcjE0LCM3KjRdCi0JYWRkCXI0LHI4LHI0LHJvciMyCQkJQCBFKz1LX3h4X3h4Ci0JZW9yCXIxMCxyMTAscjExCi0JbGRyCXIxMSxbcjE0LCMyKjRdCi0JYWRkCXI0LHI0LHI1LHJvciMyNwkJCUAgRSs9Uk9SKEEsMjcpCi0JZW9yCXIxMCxyMTAscjEyCi0JZW9yCXIxMCxyMTAscjExCi0JbW92CXIxMCxyMTAscm9yIzMxCi0JYWRkCXI0LHI0LHIxMAkJCUAgRSs9WFtpXQotCXN0cglyMTAsW3IxNCwjLTRdIQotCWFuZAlyMTEscjYscjcscm9yIzIKLQlvcnIJcjEyLHI2LHI3LHJvciMyCi0JYW5kCXIxMixyMTIscjMscm9yIzIKLQlvcnIJcjExLHIxMSxyMTIJCQlAIEZfNDBfNTkoQixDLEQpCi0JYWRkCXI0LHI0LHIxMQkJCUAgRSs9Rl80MF81OShCLEMsRCkKLQlsZHIJcjEwLFtyMTQsIzE1KjRdCi0JbGRyCXIxMSxbcjE0LCMxMyo0XQotCWxkcglyMTIsW3IxNCwjNyo0XQotCWFkZAlyMyxyOCxyMyxyb3IjMgkJCUAgRSs9S194eF94eAotCWVvcglyMTAscjEwLHIxMQotCWxkcglyMTEsW3IxNCwjMio0XQotCWFkZAlyMyxyMyxyNCxyb3IjMjcJCQlAIEUrPVJPUihBLDI3KQotCWVvcglyMTAscjEwLHIxMgotCWVvcglyMTAscjEwLHIxMQotCW1vdglyMTAscjEwLHJvciMzMQotCWFkZAlyMyxyMyxyMTAJCQlAIEUrPVhbaV0KLQlzdHIJcjEwLFtyMTQsIy00XSEKLQlhbmQJcjExLHI1LHI2LHJvciMyCi0Jb3JyCXIxMixyNSxyNixyb3IjMgotCWFuZAlyMTIscjEyLHI3LHJvciMyCi0Jb3JyCXIxMSxyMTEscjEyCQkJQCBGXzQwXzU5KEIsQyxEKQotCWFkZAlyMyxyMyxyMTEJCQlAIEUrPUZfNDBfNTkoQixDLEQpCi0JdGVxCXIxNCxzcAotCWJuZQkuTF80MF81OQkJQCBbKygoMTIrNSkqNSsyKSo0XQotCi0JbGRyCXI4LC5MS182MF83OQotCXN1YglzcCxzcCwjMjAqNAotCWNtcAlzcCwjMAkJCUAgc2V0IGNhcnJ5IHRvIGRlbm90ZSA2MF83OQotCWIJLkxfMjBfMzlfb3JfNjBfNzkJQCBbKzRdLCBzcGFyZSAzMDAgYnl0ZXMKLS5MX2RvbmU6Ci0JYWRkCXNwLHNwLCM4MCo0CQlAICJkZWFsbG9jYXRlIiBzdGFjayBmcmFtZQotCWxkbWlhCXIwLHtyOCxyMTAscjExLHIxMixyMTR9Ci0JYWRkCXIzLHI4LHIzCi0JYWRkCXI0LHIxMCxyNAotCWFkZAlyNSxyMTEscjUscm9yIzIKLQlhZGQJcjYscjEyLHI2LHJvciMyCi0JYWRkCXI3LHIxNCxyNyxyb3IjMgotCXN0bWlhCXIwLHtyMyxyNCxyNSxyNixyN30KLQl0ZXEJcjEscjIKLQlibmUJLkxsb29wCQkJQCBbKzE4XSwgdG90YWwgMTMwNwotCi0JbGRtaWEJc3AhLHtyNC1yMTIsbHJ9Ci0JdHN0CWxyLCMxCi0JbW92ZXEJcGMsbHIJCQlAIGJlIGJpbmFyeSBjb21wYXRpYmxlIHdpdGggVjQsIHlldAotCS53b3JkCTB4ZTEyZmZmMWUJCQlAIGludGVyb3BlcmFibGUgd2l0aCBUaHVtYiBJU0E6LSkKLS5hbGlnbgkyCi0uTEtfMDBfMTk6CS53b3JkCTB4NWE4Mjc5OTkKLS5MS18yMF8zOToJLndvcmQJMHg2ZWQ5ZWJhMQotLkxLXzQwXzU5Ogkud29yZAkweDhmMWJiY2RjCi0uTEtfNjBfNzk6CS53b3JkCTB4Y2E2MmMxZDYKLS5zaXplCXNoYTFfYmxvY2tfZGF0YV9vcmRlciwuLXNoYTFfYmxvY2tfZGF0YV9vcmRlcgotLmFzY2l6CSJTSEExIGJsb2NrIHRyYW5zZm9ybSBmb3IgQVJNdjQsIENSWVBUT0dBTVMgYnkgPGFwcHJvQG9wZW5zc2wub3JnPiIKZGlmZiAtLWdpdCBhL2NyeXB0by9BbmRyb2lkLm1rIGIvY3J5cHRvL0FuZHJvaWQubWsKaW5kZXggMjNlNTZiMC4uMTRiYWM4ZSAxMDA2NDQKLS0tIGEvY3J5cHRvL0FuZHJvaWQubWsKKysrIGIvY3J5cHRvL0FuZHJvaWQubWsKQEAgLTMsMTEgKzMsMTEgQEAKIAogaWZlcSAoJChUQVJHRVRfQVJDSCksYXJtKQogCUxPQ0FMX0NGTEFHUyArPSAtRE9QRU5TU0xfQk5fQVNNX01PTlQgLURBRVNfQVNNIC1EU0hBMV9BU00gLURTSEEyNTZfQVNNIC1EU0hBNTEyX0FTTQotCUxPQ0FMX1NSQ19GSUxFUzo9IDAuOS45LWRldi9ibi9hcm12NC1tb250LnMgXAotCSAgICAgICAgICAgICAgICAgIDAuOS45LWRldi9hZXMvYWVzLWFybXY0LnMgXAotCSAgICAgICAgICAgICAgICAgIDAuOS45LWRldi9zaGEvc2hhMS1hcm12NC1sYXJnZS5zIFwKLQkgICAgICAgICAgICAgICAgICAwLjkuOS1kZXYvc2hhL3NoYTI1Ni1hcm12NC5zIFwKLQkgICAgICAgICAgICAgICAgICAwLjkuOS1kZXYvc2hhL3NoYTUxMi1hcm12NC5zCisJTE9DQUxfU1JDX0ZJTEVTOj0gYWVzL2FzbS9hZXMtYXJtdjQucyBcCisJICAgICAgICAgICAgICAgICAgYm4vYXNtL2FybXY0LW1vbnQucyBcCisJICAgICAgICAgICAgICAgICAgc2hhL2FzbS9zaGExLWFybXY0LWxhcmdlLnMgXAorCSAgICAgICAgICAgICAgICAgIHNoYS9hc20vc2hhMjU2LWFybXY0LnMgXAorCSAgICAgICAgICAgICAgICAgIHNoYS9hc20vc2hhNTEyLWFybXY0LnMKIGVsc2UKIAlMT0NBTF9TUkNfRklMRVM6PSBhZXMvYWVzX2NvcmUuYwogZW5kaWYKQEAgLTIzLDI1NSArMjMsMjgxIEBACiAJbWVtX2Nsci5jIFwKIAltZW1fZGJnLmMgXAogCWN2ZXJzaW9uLmMgXAotCWR5bl9sY2suYyBcCiAJZXhfZGF0YS5jIFwKLQl0bWRpZmYuYyBcCiAJY3B0X2Vyci5jIFwKIAllYmNkaWMuYyBcCiAJdWlkLmMgXAogCW9fdGltZS5jIFwKIAlvX3N0ci5jIFwKIAlvX2Rpci5jIFwKLQlhZXMvYWVzX21pc2MuYyBcCi0JYWVzL2Flc19lY2IuYyBcCiAJYWVzL2Flc19jYmMuYyBcCiAJYWVzL2Flc19jZmIuYyBcCi0JYWVzL2Flc19vZmIuYyBcCiAJYWVzL2Flc19jdHIuYyBcCisJYWVzL2Flc19lY2IuYyBcCisJYWVzL2Flc19taXNjLmMgXAorCWFlcy9hZXNfb2ZiLmMgXAogCWFlcy9hZXNfd3JhcC5jIFwKLQlhc24xL2Ffb2JqZWN0LmMgXAogCWFzbjEvYV9iaXRzdHIuYyBcCi0JYXNuMS9hX3V0Y3RtLmMgXAorCWFzbjEvYV9ib29sLmMgXAorCWFzbjEvYV9ieXRlcy5jIFwKKwlhc24xL2FfZDJpX2ZwLmMgXAorCWFzbjEvYV9kaWdlc3QuYyBcCisJYXNuMS9hX2R1cC5jIFwKKwlhc24xL2FfZW51bS5jIFwKIAlhc24xL2FfZ2VudG0uYyBcCi0JYXNuMS9hX3RpbWUuYyBcCisJYXNuMS9hX2kyZF9mcC5jIFwKIAlhc24xL2FfaW50LmMgXAorCWFzbjEvYV9tYnN0ci5jIFwKKwlhc24xL2Ffb2JqZWN0LmMgXAogCWFzbjEvYV9vY3RldC5jIFwKIAlhc24xL2FfcHJpbnQuYyBcCi0JYXNuMS9hX3R5cGUuYyBcCiAJYXNuMS9hX3NldC5jIFwKLQlhc24xL2FfZHVwLmMgXAotCWFzbjEvYV9kMmlfZnAuYyBcCi0JYXNuMS9hX2kyZF9mcC5jIFwKLQlhc24xL2FfZW51bS5jIFwKLQlhc24xL2FfdXRmOC5jIFwKIAlhc24xL2Ffc2lnbi5jIFwKLQlhc24xL2FfZGlnZXN0LmMgXAotCWFzbjEvYV92ZXJpZnkuYyBcCi0JYXNuMS9hX21ic3RyLmMgXAogCWFzbjEvYV9zdHJleC5jIFwKLQlhc24xL3hfYWxnb3IuYyBcCi0JYXNuMS94X3ZhbC5jIFwKLQlhc24xL3hfcHVia2V5LmMgXAotCWFzbjEveF9zaWcuYyBcCi0JYXNuMS94X3JlcS5jIFwKLQlhc24xL3hfYXR0cmliLmMgXAotCWFzbjEveF9iaWdudW0uYyBcCi0JYXNuMS94X2xvbmcuYyBcCi0JYXNuMS94X25hbWUuYyBcCi0JYXNuMS94X3g1MDkuYyBcCi0JYXNuMS94X3g1MDlhLmMgXAotCWFzbjEveF9jcmwuYyBcCi0JYXNuMS94X2luZm8uYyBcCi0JYXNuMS94X3Nwa2kuYyBcCi0JYXNuMS9uc3NlcS5jIFwKLQlhc24xL2QyaV9wdS5jIFwKKwlhc24xL2Ffc3RybmlkLmMgXAorCWFzbjEvYV90aW1lLmMgXAorCWFzbjEvYV90eXBlLmMgXAorCWFzbjEvYV91dGN0bS5jIFwKKwlhc24xL2FfdXRmOC5jIFwKKwlhc24xL2FfdmVyaWZ5LmMgXAorCWFzbjEvYW1ldGhfbGliLmMgXAorCWFzbjEvYXNuMV9lcnIuYyBcCisJYXNuMS9hc24xX2dlbi5jIFwKKwlhc24xL2FzbjFfbGliLmMgXAorCWFzbjEvYXNuMV9wYXIuYyBcCisJYXNuMS9hc25fbWltZS5jIFwKKwlhc24xL2Fzbl9tb2lkLmMgXAorCWFzbjEvYXNuX3BhY2suYyBcCisJYXNuMS9iaW9fYXNuMS5jIFwKKwlhc24xL2Jpb19uZGVmLmMgXAogCWFzbjEvZDJpX3ByLmMgXAotCWFzbjEvaTJkX3B1LmMgXAotCWFzbjEvaTJkX3ByLmMgXAotCWFzbjEvdF9yZXEuYyBcCi0JYXNuMS90X3g1MDkuYyBcCi0JYXNuMS90X3g1MDlhLmMgXAotCWFzbjEvdF9jcmwuYyBcCi0JYXNuMS90X3BrZXkuYyBcCi0JYXNuMS90X3Nwa2kuYyBcCi0JYXNuMS90X2JpdHN0LmMgXAotCWFzbjEvdGFzbl9uZXcuYyBcCi0JYXNuMS90YXNuX2ZyZS5jIFwKLQlhc24xL3Rhc25fZW5jLmMgXAotCWFzbjEvdGFzbl9kZWMuYyBcCi0JYXNuMS90YXNuX3V0bC5jIFwKLQlhc24xL3Rhc25fdHlwLmMgXAorCWFzbjEvZDJpX3B1LmMgXAorCWFzbjEvZXZwX2FzbjEuYyBcCisJYXNuMS9mX2VudW0uYyBcCiAJYXNuMS9mX2ludC5jIFwKIAlhc24xL2Zfc3RyaW5nLmMgXAorCWFzbjEvaTJkX3ByLmMgXAorCWFzbjEvaTJkX3B1LmMgXAogCWFzbjEvbl9wa2V5LmMgXAotCWFzbjEvZl9lbnVtLmMgXAotCWFzbjEvYV9oZHIuYyBcCi0JYXNuMS94X3BrZXkuYyBcCi0JYXNuMS9hX2Jvb2wuYyBcCi0JYXNuMS94X2V4dGVuLmMgXAotCWFzbjEvYXNuMV9wYXIuYyBcCi0JYXNuMS9hc24xX2xpYi5jIFwKLQlhc24xL2FzbjFfZXJyLmMgXAotCWFzbjEvYV9tZXRoLmMgXAotCWFzbjEvYV9ieXRlcy5jIFwKLQlhc24xL2Ffc3RybmlkLmMgXAotCWFzbjEvZXZwX2FzbjEuYyBcCi0JYXNuMS9hc25fcGFjay5jIFwKKwlhc24xL25zc2VxLmMgXAogCWFzbjEvcDVfcGJlLmMgXAogCWFzbjEvcDVfcGJldjIuYyBcCiAJYXNuMS9wOF9wa2V5LmMgXAotCWFzbjEvYXNuX21vaWQuYyBcCi0JYXNuMS9hc24xX2dlbi5jIFwKLQlhc24xL2Fzbl9taW1lLmMgXAotCWJpby9iaW9fbGliLmMgXAorCWFzbjEvdF9iaXRzdC5jIFwKKwlhc24xL3RfY3JsLmMgXAorCWFzbjEvdF9wa2V5LmMgXAorCWFzbjEvdF9yZXEuYyBcCisJYXNuMS90X3Nwa2kuYyBcCisJYXNuMS90X3g1MDkuYyBcCisJYXNuMS90X3g1MDlhLmMgXAorCWFzbjEvdGFzbl9kZWMuYyBcCisJYXNuMS90YXNuX2VuYy5jIFwKKwlhc24xL3Rhc25fZnJlLmMgXAorCWFzbjEvdGFzbl9uZXcuYyBcCisJYXNuMS90YXNuX3Bybi5jIFwKKwlhc24xL3Rhc25fdHlwLmMgXAorCWFzbjEvdGFzbl91dGwuYyBcCisJYXNuMS94X2FsZ29yLmMgXAorCWFzbjEveF9hdHRyaWIuYyBcCisJYXNuMS94X2JpZ251bS5jIFwKKwlhc24xL3hfY3JsLmMgXAorCWFzbjEveF9leHRlbi5jIFwKKwlhc24xL3hfaW5mby5jIFwKKwlhc24xL3hfbG9uZy5jIFwKKwlhc24xL3hfbmFtZS5jIFwKKwlhc24xL3hfbng1MDkuYyBcCisJYXNuMS94X3BrZXkuYyBcCisJYXNuMS94X3B1YmtleS5jIFwKKwlhc24xL3hfcmVxLmMgXAorCWFzbjEveF9zaWcuYyBcCisJYXNuMS94X3Nwa2kuYyBcCisJYXNuMS94X3ZhbC5jIFwKKwlhc24xL3hfeDUwOS5jIFwKKwlhc24xL3hfeDUwOWEuYyBcCisJYmlvL2JfZHVtcC5jIFwKKwliaW8vYl9wcmludC5jIFwKKwliaW8vYl9zb2NrLmMgXAorCWJpby9iZl9idWZmLmMgXAorCWJpby9iZl9uYmlvLmMgXAorCWJpby9iZl9udWxsLmMgXAogCWJpby9iaW9fY2IuYyBcCiAJYmlvL2Jpb19lcnIuYyBcCi0JYmlvL2Jzc19tZW0uYyBcCi0JYmlvL2Jzc19udWxsLmMgXAorCWJpby9iaW9fbGliLmMgXAorCWJpby9ic3NfYWNwdC5jIFwKKwliaW8vYnNzX2Jpby5jIFwKKwliaW8vYnNzX2Nvbm4uYyBcCisJYmlvL2Jzc19kZ3JhbS5jIFwKIAliaW8vYnNzX2ZkLmMgXAogCWJpby9ic3NfZmlsZS5jIFwKLQliaW8vYnNzX3NvY2suYyBcCi0JYmlvL2Jzc19jb25uLmMgXAotCWJpby9iZl9udWxsLmMgXAotCWJpby9iZl9idWZmLmMgXAotCWJpby9iX3ByaW50LmMgXAotCWJpby9iX2R1bXAuYyBcCi0JYmlvL2Jfc29jay5jIFwKLQliaW8vYnNzX2FjcHQuYyBcCi0JYmlvL2JmX25iaW8uYyBcCiAJYmlvL2Jzc19sb2cuYyBcCi0JYmlvL2Jzc19iaW8uYyBcCi0JYmlvL2Jzc19kZ3JhbS5jIFwKKwliaW8vYnNzX21lbS5jIFwKKwliaW8vYnNzX251bGwuYyBcCisJYmlvL2Jzc19zb2NrLmMgXAogCWJuL2JuX2FkZC5jIFwKLQlibi9ibl9kaXYuYyBcCi0JYm4vYm5fZXhwLmMgXAotCWJuL2JuX2xpYi5jIFwKLQlibi9ibl9jdHguYyBcCi0JYm4vYm5fbXVsLmMgXAotCWJuL2JuX21vZC5jIFwKLQlibi9ibl9vcHQuYyBcCi0JYm4vYm5fcHJpbnQuYyBcCi0JYm4vYm5fcmFuZC5jIFwKLQlibi9ibl9zaGlmdC5jIFwKLQlibi9ibl93b3JkLmMgXAotCWJuL2JuX2JsaW5kLmMgXAotCWJuL2JuX2tyb24uYyBcCi0JYm4vYm5fc3FydC5jIFwKLQlibi9ibl9nY2QuYyBcCi0JYm4vYm5fcHJpbWUuYyBcCi0JYm4vYm5fZXJyLmMgXAotCWJuL2JuX3Nxci5jIFwKIAlibi9ibl9hc20uYyBcCi0JYm4vYm5fcmVjcC5jIFwKKwlibi9ibl9ibGluZC5jIFwKKwlibi9ibl9jdHguYyBcCisJYm4vYm5fZGl2LmMgXAorCWJuL2JuX2Vyci5jIFwKKwlibi9ibl9leHAuYyBcCisJYm4vYm5fZXhwMi5jIFwKKwlibi9ibl9nY2QuYyBcCisJYm4vYm5fZ2YybS5jIFwKKwlibi9ibl9rcm9uLmMgXAorCWJuL2JuX2xpYi5jIFwKKwlibi9ibl9tb2QuYyBcCiAJYm4vYm5fbW9udC5jIFwKIAlibi9ibl9tcGkuYyBcCi0JYm4vYm5fZXhwMi5jIFwKKwlibi9ibl9tdWwuYyBcCiAJYm4vYm5fbmlzdC5jIFwKLQlibi9ibl9nZjJtLmMgXAotCWJuL2JuX3g5MzFwLmMgXAotCWJ1ZmZlci9idWZmZXIuYyBcCisJYm4vYm5fcHJpbWUuYyBcCisJYm4vYm5fcHJpbnQuYyBcCisJYm4vYm5fcmFuZC5jIFwKKwlibi9ibl9yZWNwLmMgXAorCWJuL2JuX3NoaWZ0LmMgXAorCWJuL2JuX3Nxci5jIFwKKwlibi9ibl9zcXJ0LmMgXAorCWJuL2JuX3dvcmQuYyBcCiAJYnVmZmVyL2J1Zl9lcnIuYyBcCi0JYnVmZmVyL2J1Zl9zdHIuYyBcCi0JY29tcC9jb21wX2xpYi5jIFwKLQljb21wL2NvbXBfZXJyLmMgXAorCWJ1ZmZlci9idWZmZXIuYyBcCiAJY29tcC9jX3JsZS5jIFwKIAljb21wL2NfemxpYi5jIFwKLQljb25mL2NvbmZfZXJyLmMgXAotCWNvbmYvY29uZl9saWIuYyBcCisJY29tcC9jb21wX2Vyci5jIFwKKwljb21wL2NvbXBfbGliLmMgXAogCWNvbmYvY29uZl9hcGkuYyBcCiAJY29uZi9jb25mX2RlZi5jIFwKLQljb25mL2NvbmZfbW9kLmMgXAorCWNvbmYvY29uZl9lcnIuYyBcCisJY29uZi9jb25mX2xpYi5jIFwKIAljb25mL2NvbmZfbWFsbC5jIFwKKwljb25mL2NvbmZfbW9kLmMgXAogCWNvbmYvY29uZl9zYXAuYyBcCiAJZGVzL2NiY19ja3NtLmMgXAogCWRlcy9jYmNfZW5jLmMgXAorCWRlcy9jZmI2NGVkZS5jIFwKIAlkZXMvY2ZiNjRlbmMuYyBcCiAJZGVzL2NmYl9lbmMuYyBcCi0JZGVzL2Rlc19saWIuYyBcCisJZGVzL2Rlc19lbmMuYyBcCisJZGVzL2Rlc19vbGQuYyBcCisJZGVzL2Rlc19vbGQyLmMgXAogCWRlcy9lY2IzX2VuYy5jIFwKIAlkZXMvZWNiX2VuYy5jIFwKKwlkZXMvZWRlX2NiY21fZW5jLmMgXAogCWRlcy9lbmNfcmVhZC5jIFwKIAlkZXMvZW5jX3dyaXQuYyBcCiAJZGVzL2ZjcnlwdC5jIFwKKwlkZXMvZmNyeXB0X2IuYyBcCisJZGVzL29mYjY0ZWRlLmMgXAogCWRlcy9vZmI2NGVuYy5jIFwKIAlkZXMvb2ZiX2VuYy5jIFwKIAlkZXMvcGNiY19lbmMuYyBcCiAJZGVzL3F1ZF9ja3NtLmMgXAogCWRlcy9yYW5kX2tleS5jIFwKKwlkZXMvcmVhZDJwd2QuYyBcCiAJZGVzL3JwY19lbmMuYyBcCiAJZGVzL3NldF9rZXkuYyBcCi0JZGVzL2Rlc19lbmMuYyBcCi0JZGVzL2ZjcnlwdF9iLmMgXAotCWRlcy94Y2JjX2VuYy5jIFwKIAlkZXMvc3RyMmtleS5jIFwKLQlkZXMvY2ZiNjRlZGUuYyBcCi0JZGVzL29mYjY0ZWRlLmMgXAotCWRlcy9lZGVfY2JjbV9lbmMuYyBcCi0JZGVzL2Rlc19vbGQuYyBcCi0JZGVzL2Rlc19vbGQyLmMgXAotCWRlcy9yZWFkMnB3ZC5jIFwKKwlkZXMveGNiY19lbmMuYyBcCisJZGgvZGhfYW1ldGguYyBcCisJZGgvZGhfYXNuMS5jIFwKKwlkaC9kaF9jaGVjay5jIFwKKwlkaC9kaF9kZXByLmMgXAorCWRoL2RoX2Vyci5jIFwKKwlkaC9kaF9nZW4uYyBcCisJZGgvZGhfa2V5LmMgXAorCWRoL2RoX2xpYi5jIFwKKwlkaC9kaF9wbWV0aC5jIFwKKwlkc2EvZHNhX2FtZXRoLmMgXAorCWRzYS9kc2FfYXNuMS5jIFwKKwlkc2EvZHNhX2RlcHIuYyBcCisJZHNhL2RzYV9lcnIuYyBcCisJZHNhL2RzYV9nZW4uYyBcCisJZHNhL2RzYV9rZXkuYyBcCisJZHNhL2RzYV9saWIuYyBcCisJZHNhL2RzYV9vc3NsLmMgXAorCWRzYS9kc2FfcG1ldGguYyBcCisJZHNhL2RzYV9wcm4uYyBcCisJZHNhL2RzYV9zaWduLmMgXAorCWRzYS9kc2FfdnJmLmMgXAogCWRzby9kc29fZGwuYyBcCiAJZHNvL2Rzb19kbGZjbi5jIFwKIAlkc28vZHNvX2Vyci5jIFwKIAlkc28vZHNvX2xpYi5jIFwKIAlkc28vZHNvX251bGwuYyBcCiAJZHNvL2Rzb19vcGVuc3NsLmMgXAotCWRzby9kc29fd2luMzIuYyBcCiAJZHNvL2Rzb192bXMuYyBcCisJZHNvL2Rzb193aW4zMi5jIFwKIAllcnIvZXJyLmMgXAotCWVyci9lcnJfYmlvLmMgXAotCWVyci9lcnJfZGVmLmMgXAogCWVyci9lcnJfYWxsLmMgXAogCWVyci9lcnJfcHJuLmMgXAotCWVyci9lcnJfc3RyLmMgXAotCWV2cC9lbmNvZGUuYyBcCisJZXZwL2Jpb19iNjQuYyBcCisJZXZwL2Jpb19lbmMuYyBcCisJZXZwL2Jpb19tZC5jIFwKKwlldnAvYmlvX29rLmMgXAorCWV2cC9jX2FsbC5jIFwKKwlldnAvY19hbGxjLmMgXAorCWV2cC9jX2FsbGQuYyBcCiAJZXZwL2RpZ2VzdC5jIFwKLQlldnAvZW5jX21pbi5jIFwKLQlldnAvZXZwX2NuZi5jIFwKLQlldnAvZXZwX2VuYy5jIFwKLQlldnAvZXZwX2tleS5jIFwKLQlldnAvZXZwX2FjbmYuYyBcCisJZXZwL2VfYWVzLmMgXAogCWV2cC9lX2Rlcy5jIFwKIAlldnAvZV9kZXMzLmMgXAotCWV2cC9lX3JjNC5jIFwKLQlldnAvZV9hZXMuYyBcCi0JZXZwL25hbWVzLmMgXAotCWV2cC9lX3hjYmNfZC5jIFwKKwlldnAvZV9udWxsLmMgXAorCWV2cC9lX29sZC5jIFwKIAlldnAvZV9yYzIuYyBcCisJZXZwL2VfcmM0LmMgXAogCWV2cC9lX3JjNS5jIFwKLQlldnAvbV9udWxsLmMgXAorCWV2cC9lX3hjYmNfZC5jIFwKKwlldnAvZW5jb2RlLmMgXAorCWV2cC9ldnBfYWNuZi5jIFwKKwlldnAvZXZwX2VuYy5jIFwKKwlldnAvZXZwX2Vyci5jIFwKKwlldnAvZXZwX2tleS5jIFwKKwlldnAvZXZwX2xpYi5jIFwKKwlldnAvZXZwX3BiZS5jIFwKKwlldnAvZXZwX3BrZXkuYyBcCisJZXZwL21fZHNzLmMgXAorCWV2cC9tX2RzczEuYyBcCiAJZXZwL21fbWQyLmMgXAogCWV2cC9tX21kNC5jIFwKIAlldnAvbV9tZDUuYyBcCisJZXZwL21fbWRjMi5jIFwKKwlldnAvbV9udWxsLmMgXAorCWV2cC9tX3JpcGVtZC5jIFwKIAlldnAvbV9zaGEuYyBcCiAJZXZwL21fc2hhMS5jIFwKLQlldnAvbV9kc3MuYyBcCi0JZXZwL21fZHNzMS5jIFwKLQlldnAvbV9tZGMyLmMgXAorCWV2cC9tX3NpZ3Zlci5jIFwKKwlldnAvbV93cC5jIFwKKwlldnAvbmFtZXMuYyBcCisJZXZwL3A1X2NycHQuYyBcCisJZXZwL3A1X2NycHQyLmMgXAorCWV2cC9wX2RlYy5jIFwKKwlldnAvcF9lbmMuYyBcCisJZXZwL3BfbGliLmMgXAogCWV2cC9wX29wZW4uYyBcCiAJZXZwL3Bfc2VhbC5jIFwKIAlldnAvcF9zaWduLmMgXAogCWV2cC9wX3ZlcmlmeS5jIFwKLQlldnAvcF9saWIuYyBcCi0JZXZwL3BfZW5jLmMgXAotCWV2cC9wX2RlYy5jIFwKLQlldnAvYmlvX21kLmMgXAotCWV2cC9iaW9fYjY0LmMgXAotCWV2cC9iaW9fZW5jLmMgXAotCWV2cC9ldnBfZXJyLmMgXAotCWV2cC9lX251bGwuYyBcCi0JZXZwL2NfYWxsLmMgXAotCWV2cC9jX2FsbGMuYyBcCi0JZXZwL2NfYWxsZC5jIFwKLQlldnAvZXZwX2xpYi5jIFwKLQlldnAvYmlvX29rLmMgXAotCWV2cC9ldnBfcGtleS5jIFwKLQlldnAvZXZwX3BiZS5jIFwKLQlldnAvcDVfY3JwdC5jIFwKLQlldnAvcDVfY3JwdDIuYyBcCi0JZXZwL2Vfb2xkLmMgXAorCWV2cC9wbWV0aF9mbi5jIFwKKwlldnAvcG1ldGhfZ24uYyBcCisJZXZwL3BtZXRoX2xpYi5jIFwKKwlobWFjL2htX2FtZXRoLmMgXAorCWhtYWMvaG1fcG1ldGguYyBcCiAJaG1hYy9obWFjLmMgXAogCWtyYjUva3JiNV9hc24uYyBcCi0JbGhhc2gvbGhhc2guYyBcCiAJbGhhc2gvbGhfc3RhdHMuYyBcCisJbGhhc2gvbGhhc2guYyBcCiAJbWQ0L21kNF9kZ3N0LmMgXAogCW1kNC9tZDRfb25lLmMgXAogCW1kNS9tZDVfZGdzdC5jIFwKIAltZDUvbWQ1X29uZS5jIFwKKwltb2Rlcy9jYmMxMjguYyBcCisJbW9kZXMvY2ZiMTI4LmMgXAorCW1vZGVzL2N0cjEyOC5jIFwKKwltb2Rlcy9vZmIxMjguYyBcCiAJb2JqZWN0cy9vX25hbWVzLmMgXAogCW9iamVjdHMvb2JqX2RhdC5jIFwKLQlvYmplY3RzL29ial9saWIuYyBcCiAJb2JqZWN0cy9vYmpfZXJyLmMgXAorCW9iamVjdHMvb2JqX2xpYi5jIFwKKwlvYmplY3RzL29ial94cmVmLmMgXAogCW9jc3Avb2NzcF9hc24uYyBcCiAJb2NzcC9vY3NwX2NsLmMgXAogCW9jc3Avb2NzcF9lcnIuYyBcCkBAIC0yODEsMTcgKzMwNywxOCBAQAogCW9jc3Avb2NzcF9wcm4uYyBcCiAJb2NzcC9vY3NwX3Nydi5jIFwKIAlvY3NwL29jc3BfdmZ5LmMgXAotCXBlbS9wZW1fc2lnbi5jIFwKLQlwZW0vcGVtX3NlYWwuYyBcCi0JcGVtL3BlbV9pbmZvLmMgXAotCXBlbS9wZW1fbGliLmMgXAogCXBlbS9wZW1fYWxsLmMgXAogCXBlbS9wZW1fZXJyLmMgXAotCXBlbS9wZW1feDUwOS5jIFwKLQlwZW0vcGVtX3hhdXguYyBcCisJcGVtL3BlbV9pbmZvLmMgXAorCXBlbS9wZW1fbGliLmMgXAogCXBlbS9wZW1fb3RoLmMgXAogCXBlbS9wZW1fcGs4LmMgXAogCXBlbS9wZW1fcGtleS5jIFwKKwlwZW0vcGVtX3NlYWwuYyBcCisJcGVtL3BlbV9zaWduLmMgXAorCXBlbS9wZW1feDUwOS5jIFwKKwlwZW0vcGVtX3hhdXguYyBcCisJcGVtL3B2a2ZtdC5jIFwKIAlwa2NzMTIvcDEyX2FkZC5jIFwKIAlwa2NzMTIvcDEyX2Fzbi5jIFwKIAlwa2NzMTIvcDEyX2F0dHIuYyBcCkBAIC0zMDIsMTM5ICszMjksMTIzIEBACiAJcGtjczEyL3AxMl9rZXkuYyBcCiAJcGtjczEyL3AxMl9raXNzLmMgXAogCXBrY3MxMi9wMTJfbXV0bC5jIFwKLQlwa2NzMTIvcDEyX3V0bC5jIFwKIAlwa2NzMTIvcDEyX25wYXMuYyBcCi0JcGtjczEyL3BrMTJlcnIuYyBcCiAJcGtjczEyL3AxMl9wOGQuYyBcCiAJcGtjczEyL3AxMl9wOGUuYyBcCisJcGtjczEyL3AxMl91dGwuYyBcCisJcGtjczEyL3BrMTJlcnIuYyBcCiAJcGtjczcvcGs3X2FzbjEuYyBcCi0JcGtjczcvcGs3X2xpYi5jIFwKLQlwa2NzNy9wa2NzN2Vyci5jIFwKLQlwa2NzNy9wazdfZG9pdC5jIFwKLQlwa2NzNy9wazdfc21pbWUuYyBcCiAJcGtjczcvcGs3X2F0dHIuYyBcCisJcGtjczcvcGs3X2RvaXQuYyBcCisJcGtjczcvcGs3X2xpYi5jCVwKIAlwa2NzNy9wazdfbWltZS5jIFwKKwlwa2NzNy9wazdfc21pbWUuYyBcCisJcGtjczcvcGtjczdlcnIuYyBcCiAJcmFuZC9tZF9yYW5kLmMgXAotCXJhbmQvcmFuZGZpbGUuYyBcCi0JcmFuZC9yYW5kX2xpYi5jIFwKLQlyYW5kL3JhbmRfZXJyLmMgXAogCXJhbmQvcmFuZF9lZ2QuYyBcCisJcmFuZC9yYW5kX2Vyci5jIFwKKwlyYW5kL3JhbmRfbGliLmMgXAogCXJhbmQvcmFuZF91bml4LmMgXAorCXJhbmQvcmFuZGZpbGUuYyBcCisJcmMyL3JjMl9jYmMuYyBcCiAJcmMyL3JjMl9lY2IuYyBcCiAJcmMyL3JjMl9za2V5LmMgXAotCXJjMi9yYzJfY2JjLmMgXAogCXJjMi9yYzJjZmI2NC5jIFwKIAlyYzIvcmMyb2ZiNjQuYyBcCi0JcmM0L3JjNF9za2V5LmMgXAogCXJjNC9yYzRfZW5jLmMgXAotCXJzYS9yc2FfeDkzMWcuYyBcCisJcmM0L3JjNF9za2V5LmMgXAorCXJpcGVtZC9ybWRfZGdzdC5jIFwKKwlyaXBlbWQvcm1kX29uZS5jIFwKKwlyc2EvcnNhX2FtZXRoLmMgXAorCXJzYS9yc2FfYXNuMS5jIFwKKwlyc2EvcnNhX2Noay5jIFwKIAlyc2EvcnNhX2VheS5jIFwKLQlyc2EvcnNhX2VuZy5jIFwKKwlyc2EvcnNhX2Vyci5jIFwKIAlyc2EvcnNhX2dlbi5jIFwKIAlyc2EvcnNhX2xpYi5jIFwKLQlyc2EvcnNhX3NpZ24uYyBcCi0JcnNhL3JzYV9zYW9zLmMgXAotCXJzYS9yc2FfZXJyLmMgXAotCXJzYS9yc2FfcGsxLmMgXAotCXJzYS9yc2Ffc3NsLmMgXAogCXJzYS9yc2Ffbm9uZS5jIFwKLQlyc2EvcnNhX29hZXAuYyBcCi0JcnNhL3JzYV9jaGsuYyBcCiAJcnNhL3JzYV9udWxsLmMgXAorCXJzYS9yc2Ffb2FlcC5jIFwKKwlyc2EvcnNhX3BrMS5jIFwKKwlyc2EvcnNhX3BtZXRoLmMgXAorCXJzYS9yc2FfcHJuLmMgXAogCXJzYS9yc2FfcHNzLmMgXAorCXJzYS9yc2Ffc2Fvcy5jIFwKKwlyc2EvcnNhX3NpZ24uYyBcCisJcnNhL3JzYV9zc2wuYyBcCiAJcnNhL3JzYV94OTMxLmMgXAotCXJzYS9yc2FfYXNuMS5jIFwKLQlzaGEvc2hhX2Rnc3QuYyBcCi0Jc2hhL3NoYTFkZ3N0LmMgXAotCXNoYS9zaGFfb25lLmMgXAogCXNoYS9zaGExX29uZS5jIFwKKwlzaGEvc2hhMWRnc3QuYyBcCiAJc2hhL3NoYTI1Ni5jIFwKIAlzaGEvc2hhNTEyLmMgXAorCXNoYS9zaGFfZGdzdC5jIFwKKwlzaGEvc2hhX29uZS5jIFwKIAlzdGFjay9zdGFjay5jIFwKKwl0cy90c19lcnIuYyBcCiAJdHh0X2RiL3R4dF9kYi5jIFwKKwl1aS91aV9jb21wYXQuYyBcCiAJdWkvdWlfZXJyLmMgXAogCXVpL3VpX2xpYi5jIFwKIAl1aS91aV9vcGVuc3NsLmMgXAogCXVpL3VpX3V0aWwuYyBcCi0JdWkvdWlfY29tcGF0LmMgXAotCXg1MDkveDUwOV9kZWYuYyBcCi0JeDUwOS94NTA5X2QyLmMgXAotCXg1MDkveDUwOV9yMnguYyBcCi0JeDUwOS94NTA5X2NtcC5jIFwKLQl4NTA5L3g1MDlfb2JqLmMgXAotCXg1MDkveDUwOV9yZXEuYyBcCi0JeDUwOS94NTA5c3BraS5jIFwKLQl4NTA5L3g1MDlfdmZ5LmMgXAotCXg1MDkveDUwOV9zZXQuYyBcCi0JeDUwOS94NTA5Y3NldC5jIFwKLQl4NTA5L3g1MDlyc2V0LmMgXAotCXg1MDkveDUwOV9lcnIuYyBcCi0JeDUwOS94NTA5bmFtZS5jIFwKLQl4NTA5L3g1MDlfdjMuYyBcCi0JeDUwOS94NTA5X2V4dC5jIFwKLQl4NTA5L3g1MDlfYXR0LmMgXAotCXg1MDkveDUwOV92cG0uYyBcCi0JeDUwOS94NTA5dHlwZS5jIFwKLQl4NTA5L3g1MDlfbHUuYyBcCi0JeDUwOS94X2FsbC5jIFwKLQl4NTA5L3g1MDlfdHh0LmMgXAotCXg1MDkveDUwOV90cnMuYyBcCi0JeDUwOS9ieV9maWxlLmMgXAogCXg1MDkvYnlfZGlyLmMgXAorCXg1MDkvYnlfZmlsZS5jIFwKKwl4NTA5L3g1MDlfYXR0LmMgXAorCXg1MDkveDUwOV9jbXAuYyBcCisJeDUwOS94NTA5X2QyLmMgXAorCXg1MDkveDUwOV9kZWYuYyBcCisJeDUwOS94NTA5X2Vyci5jIFwKKwl4NTA5L3g1MDlfZXh0LmMgXAorCXg1MDkveDUwOV9sdS5jIFwKKwl4NTA5L3g1MDlfb2JqLmMgXAorCXg1MDkveDUwOV9yMnguYyBcCisJeDUwOS94NTA5X3JlcS5jIFwKKwl4NTA5L3g1MDlfc2V0LmMgXAorCXg1MDkveDUwOV90cnMuYyBcCisJeDUwOS94NTA5X3R4dC5jIFwKKwl4NTA5L3g1MDlfdjMuYyBcCisJeDUwOS94NTA5X3ZmeS5jIFwKKwl4NTA5L3g1MDlfdnBtLmMgXAorCXg1MDkveDUwOWNzZXQuYyBcCisJeDUwOS94NTA5bmFtZS5jIFwKKwl4NTA5L3g1MDlyc2V0LmMgXAorCXg1MDkveDUwOXNwa2kuYyBcCisJeDUwOS94NTA5dHlwZS5jIFwKKwl4NTA5L3hfYWxsLmMgXAorCXg1MDl2My9wY3lfY2FjaGUuYyBcCisJeDUwOXYzL3BjeV9kYXRhLmMgXAorCXg1MDl2My9wY3lfbGliLmMgXAorCXg1MDl2My9wY3lfbWFwLmMgXAorCXg1MDl2My9wY3lfbm9kZS5jIFwKKwl4NTA5djMvcGN5X3RyZWUuYyBcCisJeDUwOXYzL3YzX2FrZXkuYyBcCisJeDUwOXYzL3YzX2FrZXlhLmMgXAorCXg1MDl2My92M19hbHQuYyBcCiAJeDUwOXYzL3YzX2Jjb25zLmMgXAogCXg1MDl2My92M19iaXRzdC5jIFwKIAl4NTA5djMvdjNfY29uZi5jIFwKLQl4NTA5djMvdjNfZXh0a3UuYyBcCi0JeDUwOXYzL3YzX2lhNS5jIFwKLQl4NTA5djMvdjNfbGliLmMgXAotCXg1MDl2My92M19wcm4uYyBcCi0JeDUwOXYzL3YzX3V0bC5jIFwKLQl4NTA5djMvdjNlcnIuYyBcCi0JeDUwOXYzL3YzX2dlbm4uYyBcCi0JeDUwOXYzL3YzX2FsdC5jIFwKLQl4NTA5djMvdjNfc2tleS5jIFwKLQl4NTA5djMvdjNfYWtleS5jIFwKLQl4NTA5djMvdjNfcGt1LmMgXAotCXg1MDl2My92M19pbnQuYyBcCi0JeDUwOXYzL3YzX2VudW0uYyBcCi0JeDUwOXYzL3YzX3N4bmV0LmMgXAogCXg1MDl2My92M19jcG9scy5jIFwKIAl4NTA5djMvdjNfY3JsZC5jIFwKLQl4NTA5djMvdjNfcHVycC5jIFwKKwl4NTA5djMvdjNfZW51bS5jIFwKKwl4NTA5djMvdjNfZXh0a3UuYyBcCisJeDUwOXYzL3YzX2dlbm4uYyBcCisJeDUwOXYzL3YzX2lhNS5jIFwKIAl4NTA5djMvdjNfaW5mby5jIFwKLQl4NTA5djMvdjNfYWtleWEuYyBcCi0JeDUwOXYzL3YzX29jc3AuYyBcCi0JeDUwOXYzL3YzX3BjaWEuYyBcCi0JeDUwOXYzL3YzX3BjaS5jIFwKLQl4NTA5djMvdjNfcG1hcHMuYyBcCi0JeDUwOXYzL3YzX3Bjb25zLmMgXAorCXg1MDl2My92M19pbnQuYyBcCisJeDUwOXYzL3YzX2xpYi5jIFwKIAl4NTA5djMvdjNfbmNvbnMuYyBcCi0JeDUwOXYzL3BjeV9saWIuYyBcCi0JeDUwOXYzL3BjeV9jYWNoZS5jIFwKLQl4NTA5djMvcGN5X25vZGUuYyBcCi0JeDUwOXYzL3BjeV9tYXAuYyBcCi0JeDUwOXYzL3BjeV9kYXRhLmMgXAotCXg1MDl2My9wY3lfdHJlZS5jIFwKLQlkaC9kaF9hc24xLmMgXAotCWRoL2RoX2NoZWNrLmMgXAotCWRoL2RoX2RlcHIuYyBcCi0JZGgvZGhfZXJyLmMgXAotCWRoL2RoX2dlbi5jIFwKLQlkaC9kaF9rZXkuYyBcCi0JZGgvZGhfbGliLmMgXAotCWRzYS9kc2FfYXNuMS5jIFwKLQlkc2EvZHNhX2RlcHIuYyBcCi0JZHNhL2RzYV9lcnIuYyBcCi0JZHNhL2RzYV9nZW4uYyBcCi0JZHNhL2RzYV9rZXkuYyBcCi0JZHNhL2RzYV9saWIuYyBcCi0JZHNhL2RzYV9vc3NsLmMgXAotCWRzYS9kc2Ffc2lnbi5jIFwKLQlkc2EvZHNhX3V0bC5jIFwKLQlkc2EvZHNhX3ZyZi5jIFwKLQlyaXBlbWQvcm1kX2Rnc3QuYyBcCi0JcmlwZW1kL3JtZF9vbmUuYyBcCi0JZXZwL21fcmlwZW1kLmMKKwl4NTA5djMvdjNfb2NzcC5jIFwKKwl4NTA5djMvdjNfcGNpLmMgXAorCXg1MDl2My92M19wY2lhLmMgXAorCXg1MDl2My92M19wY29ucy5jIFwKKwl4NTA5djMvdjNfcGt1LmMgXAorCXg1MDl2My92M19wbWFwcy5jIFwKKwl4NTA5djMvdjNfcHJuLmMgXAorCXg1MDl2My92M19wdXJwLmMgXAorCXg1MDl2My92M19za2V5LmMgXAorCXg1MDl2My92M19zeG5ldC5jIFwKKwl4NTA5djMvdjNfdXRsLmMgXAorCXg1MDl2My92M2Vyci5jCiAKIExPQ0FMX0NGTEFHUyArPSAtRE5PX1dJTkRPV1NfQlJBSU5ERUFUSAogCkBAIC00NDIsNyArNDUzLDEwIEBACiAKIExPQ0FMX0NfSU5DTFVERVMgKz0gXAogCWV4dGVybmFsL29wZW5zc2wgXAorCWV4dGVybmFsL29wZW5zc2wvY3J5cHRvL2FzbjEgXAorCWV4dGVybmFsL29wZW5zc2wvY3J5cHRvL2V2cCBcCiAJZXh0ZXJuYWwvb3BlbnNzbC9pbmNsdWRlIFwKKwlleHRlcm5hbC9vcGVuc3NsL2luY2x1ZGUvb3BlbnNzbCBcCiAJZXh0ZXJuYWwvemxpYgogCiBMT0NBTF9TSEFSRURfTElCUkFSSUVTICs9IGxpYnoKZGlmZiAtLWdpdCBhL2NyeXB0by9MUGRpcl93aW4uYyBiL2NyeXB0by9MUGRpcl93aW4uYwppbmRleCAwOWI0NzViLi43MDJkYmM3IDEwMDY0NAotLS0gYS9jcnlwdG8vTFBkaXJfd2luLmMKKysrIGIvY3J5cHRvL0xQZGlyX3dpbi5jCkBAIC01NCw4ICs1NCw2IEBACiAKIGNvbnN0IGNoYXIgKkxQX2ZpbmRfZmlsZShMUF9ESVJfQ1RYICoqY3R4LCBjb25zdCBjaGFyICpkaXJlY3RvcnkpCiB7Ci0gIHN0cnVjdCBkaXJlbnQgKmRpcmVudHJ5ID0gTlVMTDsKLQogICBpZiAoY3R4ID09IE5VTEwgfHwgZGlyZWN0b3J5ID09IE5VTEwpCiAgICAgewogICAgICAgZXJybm8gPSBFSU5WQUw7CmRpZmYgLS1naXQgYS9jcnlwdG8vTWFrZWZpbGUgYi9jcnlwdG8vTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1NTdmMmIuLjAwMDAwMDAKLS0tIGEvY3J5cHRvL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMjI0ICswLDAgQEAKLSMKLSMgT3BlblNTTC9jcnlwdG8vTWFrZWZpbGUKLSMKLQotRElSPQkJY3J5cHRvCi1UT1A9CQkuLgotQ0M9CQljYwotSU5DTFVERT0JLUkuIC1JJChUT1ApIC1JLi4vaW5jbHVkZQotIyBJTkNMVURFUyB0YXJnZXRzIHN1ZGJpcnMhCi1JTkNMVURFUz0JLUkuLiAtSS4uLy4uIC1JLi4vLi4vaW5jbHVkZQotQ0ZMQUc9CQktZwotTUFLRURFUFBST0c9CW1ha2VkZXBlbmQKLU1BS0VERVBFTkQ9CSQoVE9QKS91dGlsL2RvbWQgJChUT1ApIC1NRCAkKE1BS0VERVBQUk9HKQotTUFLRUZJTEU9ICAgICAgIE1ha2VmaWxlCi1STT0gICAgICAgICAgICAgcm0gLWYKLUFSPQkJYXIgcgotCi1SRUNVUlNJVkVfTUFLRT0JWyAtbiAiJChTRElSUykiIF0gJiYgZm9yIGkgaW4gJChTRElSUykgOyBkbyBcCi0JCSAgICAoY2QgJCRpICYmIGVjaG8gIm1ha2luZyAkJHRhcmdldCBpbiAkKERJUikvJCRpLi4uIiAmJiBcCi0JCSAgICAkKE1BS0UpIC1lIFRPUD0uLi8uLiBESVI9JCRpIElOQ0xVREVTPScke0lOQ0xVREVTfScgJCR0YXJnZXQgKSB8fCBleGl0IDE7IFwKLQkJZG9uZTsKLQotUEVYX0xJQlM9Ci1FWF9MSUJTPQotIAotQ0ZMQUdTPSAkKElOQ0xVREUpICQoQ0ZMQUcpCi1BU0ZMQUdTPSAkKElOQ0xVREUpICQoQVNGTEFHKQotQUZMQUdTPSQoQVNGTEFHUykKLQotTElCUz0KLQotR0VORVJBTD1NYWtlZmlsZSBSRUFETUUgY3J5cHRvLWxpYi5jb20gaW5zdGFsbC5jb20KLQotTElCPSAkKFRPUCkvbGliY3J5cHRvLmEKLVNIQVJFRF9MSUI9IGxpYmNyeXB0byQoU0hMSUJfRVhUKQotTElCU1JDPQljcnlwdGxpYi5jIGR5bl9sY2suYyBtZW0uYyBtZW1fY2xyLmMgbWVtX2RiZy5jIGN2ZXJzaW9uLmMgZXhfZGF0YS5jIHRtZGlmZi5jIGNwdF9lcnIuYyBlYmNkaWMuYyB1aWQuYyBvX3RpbWUuYyBvX3N0ci5jIG9fZGlyLmMgb19pbml0LmMgZmlwc19lcnIuYwotTElCT0JKPSBjcnlwdGxpYi5vIGR5bl9sY2subyBtZW0ubyBtZW1fY2xyLm8gbWVtX2RiZy5vIGN2ZXJzaW9uLm8gZXhfZGF0YS5vIHRtZGlmZi5vIGNwdF9lcnIubyBlYmNkaWMubyB1aWQubyBvX3RpbWUubyBvX3N0ci5vIG9fZGlyLm8gb19pbml0Lm8gZmlwc19lcnIubyAkKENQVUlEX09CSikKLQotU1JDPSAkKExJQlNSQykKLQotRVhIRUFERVI9IGNyeXB0by5oIHRtZGlmZi5oIG9wZW5zc2x2Lmggb3BlbnNzbGNvbmYuaCBlYmNkaWMuaCBzeW1oYWNrcy5oIFwKLQlvc3NsX3R5cC5oCi1IRUFERVI9CWNyeXB0bGliLmggYnVpbGRpbmYuaCBtZDMyX2NvbW1vbi5oIG9fdGltZS5oIG9fc3RyLmggb19kaXIuaCAkKEVYSEVBREVSKQotCi1BTEw9ICAgICQoR0VORVJBTCkgJChTUkMpICQoSEVBREVSKQotCi10b3A6Ci0JQChjZCAuLjsgJChNQUtFKSBESVJTPSQoRElSKSBhbGwpCi0KLWFsbDogbGliCi0KLWJ1aWxkaW5mLmg6IC4uL01ha2VmaWxlCi0JKCBlY2hvICIjaWZuZGVmIE1LMU1GX0JVSUxEIjsgXAotCWVjaG8gJyAgLyogYXV0by1nZW5lcmF0ZWQgYnkgY3J5cHRvL01ha2VmaWxlIGZvciBjcnlwdG8vY3ZlcnNpb24uYyAqLyc7IFwKLQllY2hvICcgICNkZWZpbmUgQ0ZMQUdTICIkKENDKSAkKENGTEFHKSInOyBcCi0JZWNobyAnICAjZGVmaW5lIFBMQVRGT1JNICIkKFBMQVRGT1JNKSInOyBcCi0JZWNobyAiICAjZGVmaW5lIERBVEUgXCJgTENfQUxMPUMgTENfVElNRT1DIGRhdGVgXCIiOyBcCi0JZWNobyAnI2VuZGlmJyApID5idWlsZGluZi5oCi0KLXg4NmNwdWlkLWVsZi5zOgl4ODZjcHVpZC5wbCBwZXJsYXNtL3g4NmFzbS5wbAotCSQoUEVSTCkgeDg2Y3B1aWQucGwgZWxmICQoQ0ZMQUdTKSAkKFBST0NFU1NPUikgPiAkQAoteDg2Y3B1aWQtY29mLnM6IHg4NmNwdWlkLnBsIHBlcmxhc20veDg2YXNtLnBsCi0JJChQRVJMKSB4ODZjcHVpZC5wbCBjb2ZmICQoQ0ZMQUdTKSAkKFBST0NFU1NPUikgPiAkQAoteDg2Y3B1aWQtb3V0LnM6IHg4NmNwdWlkLnBsIHBlcmxhc20veDg2YXNtLnBsCi0JJChQRVJMKSB4ODZjcHVpZC5wbCBhLm91dCAkKENGTEFHUykgJChQUk9DRVNTT1IpID4gJEAKLQotdXBsaW5rLm86CS4uL21zL3VwbGluay5jCi0JJChDQykgJChDRkxBR1MpIC1jIC1vICRAIC4uL21zL3VwbGluay5jCi0KLXVwbGluay1jb2YuczoJLi4vbXMvdXBsaW5rLnBsCi0JJChQRVJMKSAuLi9tcy91cGxpbmsucGwgY29mZiA+ICRACi0KLXg4Nl82NGNwdWlkLnM6IHg4Nl82NGNwdWlkLnBsCi0JJChQRVJMKSB4ODZfNjRjcHVpZC5wbCAkQAotaWE2NGNwdWlkLnM6IGlhNjRjcHVpZC5TCi0JJChDQykgJChDRkxBR1MpIC1FIGlhNjRjcHVpZC5TID4gJEAKLQotdGVzdGFwcHM6Ci0JWyAteiAiJChUSElTKSIgXSB8fCAoCWlmIGVjaG8gJHtTRElSU30gfCBmZ3JlcCAnIGRlcyAnOyBcCi0JCQkJdGhlbiBjZCBkZXMgJiYgJChNQUtFKSAtZSBkZXM7IGZpICkKLQlbIC16ICIkKFRISVMpIiBdIHx8ICggY2QgcGtjczcgJiYgJChNQUtFKSAtZSB0ZXN0YXBwcyApOwotCUBpZiBbIC16ICIkKFRISVMpIiBdOyB0aGVuICQoTUFLRSkgLWYgJChUT1ApL01ha2VmaWxlIHJlZmxlY3QgVEhJUz0kQDsgZmkKLQotc3ViZGlyczoKLQlAdGFyZ2V0PWFsbDsgJChSRUNVUlNJVkVfTUFLRSkKLQotZmlsZXM6Ci0JJChQRVJMKSAkKFRPUCkvdXRpbC9maWxlcy5wbCBNYWtlZmlsZSA+PiAkKFRPUCkvTUlORk8KLQlAdGFyZ2V0PWZpbGVzOyAkKFJFQ1VSU0lWRV9NQUtFKQotCi1saW5rczoKLQlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vaW5jbHVkZS9vcGVuc3NsICQoRVhIRUFERVIpCi0JQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uL3Rlc3QgJChURVNUKQotCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi9hcHBzICQoQVBQUykKLQlAdGFyZ2V0PWxpbmtzOyAkKFJFQ1VSU0lWRV9NQUtFKQotCi0jIGxpYjogYW5kICQoTElCKTogYXJlIHNwbGl0dGVkIHRvIGF2b2lkIGVuZC1sZXNzIGxvb3AKLWxpYjoJYnVpbGRpbmYuaCAkKExJQikgc3ViZGlycwotCUB0b3VjaCBsaWIKLSQoTElCKToJJChMSUJPQkopCi0JJChBUlgpICQoTElCKSAkKExJQk9CSikKLQkkKFJBTkxJQikgJChMSUIpIHx8IGVjaG8gTmV2ZXIgbWluZC4KLQotc2hhcmVkOiBidWlsZGluZi5oIGxpYiBzdWJkaXJzCi0JaWYgWyAtbiAiJChTSEFSRURfTElCUykiIF07IHRoZW4gXAotCQkoY2QgLi47ICQoTUFLRSkgJChTSEFSRURfTElCKSk7IFwKLQlmaQotCi1saWJzOgotCUB0YXJnZXQ9bGliOyAkKFJFQ1VSU0lWRV9NQUtFKQotCi1pbnN0YWxsOgotCUBbIC1uICIkKElOU1RBTExUT1ApIiBdICMgc2hvdWxkIGJlIHNldCBieSB0b3AgTWFrZWZpbGUuLi4KLQlAaGVhZGVybGlzdD0iJChFWEhFQURFUikiOyBmb3IgaSBpbiAkJGhlYWRlcmxpc3QgO1wKLQlkbyBcCi0JKGNwICQkaSAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaTsgXAotCWNobW9kIDY0NCAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaSApOyBcCi0JZG9uZTsKLQlAdGFyZ2V0PWluc3RhbGw7ICQoUkVDVVJTSVZFX01BS0UpCi0KLWxpbnQ6Ci0JQHRhcmdldD1saW50OyAkKFJFQ1VSU0lWRV9NQUtFKQotCi1kZXBlbmQ6Ci0JQFsgLXogIiQoVEhJUykiIC1vIC1mIGJ1aWxkaW5mLmggXSB8fCB0b3VjaCBidWlsZGluZi5oICMgZmFrZSBidWlsZGluZi5oIGlmIGl0IGRvZXMgbm90IGV4aXN0Ci0JQFsgLXogIiQoVEhJUykiIF0gfHwgJChNQUtFREVQRU5EKSAtLSAkKENGTEFHKSAkKElOQ0xVREUpICQoREVQRkxBRykgLS0gJChQUk9HUykgJChMSUJTUkMpCi0JQFsgLXogIiQoVEhJUykiIC1vIC1zIGJ1aWxkaW5mLmggXSB8fCBybSBidWlsZGluZi5oCi0JQFsgLXogIiQoVEhJUykiIF0gfHwgKHNldCAtZTsgdGFyZ2V0PWRlcGVuZDsgJChSRUNVUlNJVkVfTUFLRSkgKQotCUBpZiBbIC16ICIkKFRISVMpIiBdOyB0aGVuICQoTUFLRSkgLWYgJChUT1ApL01ha2VmaWxlIHJlZmxlY3QgVEhJUz0kQDsgZmkKLQotY2xlYW46Ci0Jcm0gLWYgYnVpbGRpbmYuaCAqLnMgKi5vICovKi5vICoub2JqIGxpYiB0YWdzIGNvcmUgLnB1cmUgLm5mcyogKi5vbGQgKi5iYWsgZmx1ZmYKLQlAdGFyZ2V0PWNsZWFuOyAkKFJFQ1VSU0lWRV9NQUtFKQotCi1kY2xlYW46Ci0JJChQRVJMKSAtcGUgJ2lmICgvXiMgRE8gTk9UIERFTEVURSBUSElTIExJTkUvKSB7cHJpbnQ7IGV4aXQoMCk7fScgJChNQUtFRklMRSkgPk1ha2VmaWxlLm5ldwotCW12IC1mIE1ha2VmaWxlLm5ldyAkKE1BS0VGSUxFKQotCUB0YXJnZXQ9ZGNsZWFuOyAkKFJFQ1VSU0lWRV9NQUtFKQotCi0jIERPIE5PVCBERUxFVEUgVEhJUyBMSU5FIC0tIG1ha2UgZGVwZW5kIGRlcGVuZHMgb24gaXQuCi0KLWNwdF9lcnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotY3B0X2Vyci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWNwdF9lcnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWNwdF9lcnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWNwdF9lcnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1jcHRfZXJyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGNwdF9lcnIuYwotY3J5cHRsaWIubzogLi4vZV9vcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLWNyeXB0bGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotY3J5cHRsaWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1jcnlwdGxpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotY3J5cHRsaWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1jcnlwdGxpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBjcnlwdGxpYi5jCi1jcnlwdGxpYi5vOiBjcnlwdGxpYi5oCi1jdmVyc2lvbi5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotY3ZlcnNpb24ubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1jdmVyc2lvbi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLWN2ZXJzaW9uLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi1jdmVyc2lvbi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLWN2ZXJzaW9uLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGJ1aWxkaW5mLmgKLWN2ZXJzaW9uLm86IGNyeXB0bGliLmggY3ZlcnNpb24uYwotZHluX2xjay5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotZHluX2xjay5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLWR5bl9sY2subzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1keW5fbGNrLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi1keW5fbGNrLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotZHluX2xjay5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBjcnlwdGxpYi5oCi1keW5fbGNrLm86IGR5bl9sY2suYwotZWJjZGljLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIGViY2RpYy5jCi1leF9kYXRhLm86IC4uL2Vfb3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1leF9kYXRhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotZXhfZGF0YS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLWV4X2RhdGEubzogLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLWV4X2RhdGEubzogLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1leF9kYXRhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGNyeXB0bGliLmgKLWV4X2RhdGEubzogZXhfZGF0YS5jCi1maXBzX2Vyci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1maXBzX2Vyci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWZpcHNfZXJyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLWZpcHNfZXJyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi1maXBzX2Vyci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLWZpcHNfZXJyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfZXJyLmMKLWZpcHNfZXJyLm86IGZpcHNfZXJyLmgKLW1lbS5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotbWVtLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotbWVtLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotbWVtLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi1tZW0ubzogLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1tZW0ubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggY3J5cHRsaWIuaAotbWVtLm86IG1lbS5jCi1tZW1fY2xyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotbWVtX2Nsci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotbWVtX2Nsci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLW1lbV9jbHIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggbWVtX2Nsci5jCi1tZW1fZGJnLm86IC4uL2Vfb3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1tZW1fZGJnLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotbWVtX2RiZy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLW1lbV9kYmcubzogLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLW1lbV9kYmcubzogLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1tZW1fZGJnLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGNyeXB0bGliLmgKLW1lbV9kYmcubzogbWVtX2RiZy5jCi1vX2Rpci5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLW9fZGlyLm86IExQZGlyX3VuaXguYyBvX2Rpci5jIG9fZGlyLmgKLW9faW5pdC5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotb19pbml0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotb19pbml0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1vX2luaXQubzogLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLW9faW5pdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLW9faW5pdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBvX2luaXQuYwotb19zdHIubzogLi4vZV9vcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1vX3N0ci5vOiBvX3N0ci5jIG9fc3RyLmgKLW9fdGltZS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCBvX3RpbWUuYwotb190aW1lLm86IG9fdGltZS5oCi10bWRpZmYubzogLi4vZV9vcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXRtZGlmZi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLXRtZGlmZi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLXRtZGlmZi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotdG1kaWZmLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotdG1kaWZmLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi10bWRpZmYubzogLi4vaW5jbHVkZS9vcGVuc3NsL3RtZGlmZi5oIGNyeXB0bGliLmggdG1kaWZmLmMKLXVpZC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLXVpZC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotdWlkLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotdWlkLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIHVpZC5jCmRpZmYgLS1naXQgYS9jcnlwdG8vYWVzL01ha2VmaWxlIGIvY3J5cHRvL2Flcy9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQxNzRmNC4uMDAwMDAwMAotLS0gYS9jcnlwdG8vYWVzL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMTMxICswLDAgQEAKLSMKLSMgY3J5cHRvL2Flcy9NYWtlZmlsZQotIwotCi1ESVI9CWFlcwotVE9QPQkuLi8uLgotQ0M9CWNjCi1DUFA9CSQoQ0MpIC1FCi1JTkNMVURFUz0KLUNGTEFHPS1nCi1NQUtFRklMRT0JTWFrZWZpbGUKLUFSPQkJYXIgcgotCi1BRVNfQVNNX09CSj1hZXNfY29yZS5vIGFlc19jYmMubwotCi1DRkxBR1M9ICQoSU5DTFVERVMpICQoQ0ZMQUcpCi1BU0ZMQUdTPSAkKElOQ0xVREVTKSAkKEFTRkxBRykKLUFGTEFHUz0gJChBU0ZMQUdTKQotCi1HRU5FUkFMPU1ha2VmaWxlCi0jVEVTVD1hZXN0ZXN0LmMKLVRFU1Q9Ci1BUFBTPQotCi1MSUI9JChUT1ApL2xpYmNyeXB0by5hCi1MSUJTUkM9YWVzX2NvcmUuYyBhZXNfbWlzYy5jIGFlc19lY2IuYyBhZXNfY2JjLmMgYWVzX2NmYi5jIGFlc19vZmIuYyBcCi0gICAgICAgYWVzX2N0ci5jIGFlc19pZ2UuYyBhZXNfd3JhcC5jCi1MSUJPQko9YWVzX21pc2MubyBhZXNfZWNiLm8gYWVzX2NmYi5vIGFlc19vZmIubyBhZXNfY3RyLm8gYWVzX2lnZS5vIGFlc193cmFwLm8gXAotICAgICAgICQoQUVTX0FTTV9PQkopCi0KLVNSQz0gJChMSUJTUkMpCi0KLUVYSEVBREVSPSBhZXMuaAotSEVBREVSPSBhZXNfbG9jbC5oICQoRVhIRUFERVIpCi0KLUFMTD0gICAgJChHRU5FUkFMKSAkKFNSQykgJChIRUFERVIpCi0KLXRvcDoKLQkoY2QgLi4vLi47ICQoTUFLRSkgRElSUz1jcnlwdG8gU0RJUlM9JChESVIpIHN1Yl9hbGwpCi0KLWFsbDoJbGliCi0KLWxpYjoJJChMSUJPQkopCi0JJChBUlgpICQoTElCKSAkKExJQk9CSikKLQkkKFJBTkxJQikgJChMSUIpIHx8IGVjaG8gTmV2ZXIgbWluZC4KLQlAdG91Y2ggbGliCi0KLSQoTElCT0JKKTogJChMSUJTUkMpCi0KLWFlcy1pYTY0LnM6IGFzbS9hZXMtaWE2NC5TCi0JJChDQykgJChDRkxBR1MpIC1FIGFzbS9hZXMtaWE2NC5TID4gJEAKLQotYXg4Ni1lbGYuczogYXNtL2Flcy01ODYucGwgLi4vcGVybGFzbS94ODZhc20ucGwKLQkoY2QgYXNtOyAkKFBFUkwpIGFlcy01ODYucGwgZWxmICQoQ0ZMQUdTKSAkKFBST0NFU1NPUikgPiAuLi8kQCkKLWF4ODYtY29mLnM6IGFzbS9hZXMtNTg2LnBsIC4uL3Blcmxhc20veDg2YXNtLnBsCi0JKGNkIGFzbTsgJChQRVJMKSBhZXMtNTg2LnBsIGNvZmYgJChDRkxBR1MpICQoUFJPQ0VTU09SKSA+IC4uLyRAKQotYXg4Ni1vdXQuczogYXNtL2Flcy01ODYucGwgLi4vcGVybGFzbS94ODZhc20ucGwKLQkoY2QgYXNtOyAkKFBFUkwpIGFlcy01ODYucGwgYS5vdXQgJChDRkxBR1MpICQoUFJPQ0VTU09SKSA+IC4uLyRAKQotCi1hZXMteDg2XzY0LnM6IGFzbS9hZXMteDg2XzY0LnBsCi0JJChQRVJMKSBhc20vYWVzLXg4Nl82NC5wbCAkQAotCi1maWxlczoKLQkkKFBFUkwpICQoVE9QKS91dGlsL2ZpbGVzLnBsIE1ha2VmaWxlID4+ICQoVE9QKS9NSU5GTwotCi1saW5rczoKLQlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vaW5jbHVkZS9vcGVuc3NsICQoRVhIRUFERVIpCi0JQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL3Rlc3QgJChURVNUKQotCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9hcHBzICQoQVBQUykKLQotaW5zdGFsbDoKLQlAWyAtbiAiJChJTlNUQUxMVE9QKSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdG9wIE1ha2VmaWxlLi4uCi0JQGhlYWRlcmxpc3Q9IiQoRVhIRUFERVIpIjsgZm9yIGkgaW4gJCRoZWFkZXJsaXN0IDsgXAotCWRvICBcCi0JKGNwICQkaSAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaTsgXAotCWNobW9kIDY0NCAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaSApOyBcCi0JZG9uZTsKLQotdGFnczoKLQljdGFncyAkKFNSQykKLQotdGVzdHM6Ci0KLWxpbnQ6Ci0JbGludCAtRExJTlQgJChJTkNMVURFUykgJChTUkMpPmZsdWZmCi0KLWRlcGVuZDoKLQlAWyAtbiAiJChNQUtFREVQRU5EKSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdXBwZXIgTWFrZWZpbGUuLi4KLQkkKE1BS0VERVBFTkQpIC0tICQoQ0ZMQUcpICQoSU5DTFVERVMpICQoREVQRkxBRykgLS0gJChQUk9HUykgJChMSUJTUkMpCi0KLWRjbGVhbjoKLQkkKFBFUkwpIC1wZSAnaWYgKC9eIyBETyBOT1QgREVMRVRFIFRISVMgTElORS8pIHtwcmludDsgZXhpdCgwKTt9JyAkKE1BS0VGSUxFKSA+TWFrZWZpbGUubmV3Ci0JbXYgLWYgTWFrZWZpbGUubmV3ICQoTUFLRUZJTEUpCi0KLWNsZWFuOgotCXJtIC1mICoucyAqLm8gKi5vYmogbGliIHRhZ3MgY29yZSAucHVyZSAubmZzKiAqLm9sZCAqLmJhayBmbHVmZgotCi0jIERPIE5PVCBERUxFVEUgVEhJUyBMSU5FIC0tIG1ha2UgZGVwZW5kIGRlcGVuZHMgb24gaXQuCi0KLWFlc19jYmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1hZXNfY2JjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIGFlc19jYmMuYyBhZXNfbG9jbC5oCi1hZXNfY2ZiLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmgKLWFlc19jZmIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWFlc19jZmIubzogYWVzX2NmYi5jIGFlc19sb2NsLmgKLWFlc19jb3JlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotYWVzX2NvcmUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotYWVzX2NvcmUubzogYWVzX2NvcmUuYyBhZXNfbG9jbC5oCi1hZXNfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotYWVzX2N0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCBhZXNfY3RyLmMgYWVzX2xvY2wuaAotYWVzX2VjYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLWFlc19lY2IubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggYWVzX2VjYi5jIGFlc19sb2NsLmgKLWFlc19pZ2UubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWFlc19pZ2UubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotYWVzX2lnZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWFlc19pZ2UubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWFlc19pZ2UubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWFlc19pZ2UubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1hZXNfaWdlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggYWVzX2lnZS5jIGFlc19sb2NsLmgKLWFlc19taXNjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotYWVzX21pc2MubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWFlc19taXNjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIGFlc19sb2NsLmggYWVzX21pc2MuYwotYWVzX29mYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLWFlc19vZmIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggYWVzX2xvY2wuaCBhZXNfb2ZiLmMKLWFlc193cmFwLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmgKLWFlc193cmFwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLWFlc193cmFwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotYWVzX3dyYXAubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1hZXNfd3JhcC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotYWVzX3dyYXAubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWFlc193cmFwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotYWVzX3dyYXAubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBhZXNfd3JhcC5jCmRpZmYgLS1naXQgYS9jcnlwdG8vYWVzL2Flcy5oIGIvY3J5cHRvL2Flcy9hZXMuaAppbmRleCA0NTBmMmI0Li5kMmM5OTczIDEwMDY0NAotLS0gYS9jcnlwdG8vYWVzL2Flcy5oCisrKyBiL2NyeXB0by9hZXMvYWVzLmgKQEAgLTU4LDYgKzU4LDggQEAKICNlcnJvciBBRVMgaXMgZGlzYWJsZWQuCiAjZW5kaWYKIAorI2luY2x1ZGUgPHN0ZGRlZi5oPgorCiAjZGVmaW5lIEFFU19FTkNSWVBUCTEKICNkZWZpbmUgQUVTX0RFQ1JZUFQJMAogCkBAIC02NiwxMCArNjgsNiBAQAogI2RlZmluZSBBRVNfTUFYTlIgMTQKICNkZWZpbmUgQUVTX0JMT0NLX1NJWkUgMTYKIAotI2lmZGVmIE9QRU5TU0xfRklQUwotI2RlZmluZSBGSVBTX0FFU19TSVpFX1QJaW50Ci0jZW5kaWYKLQogI2lmZGVmICBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CiAjZW5kaWYKQEAgLTEwMCwzNyArOTgsMzIgQEAKIHZvaWQgQUVTX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCiAJY29uc3QgQUVTX0tFWSAqa2V5LCBjb25zdCBpbnQgZW5jKTsKIHZvaWQgQUVTX2NiY19lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCi0JY29uc3QgdW5zaWduZWQgbG9uZyBsZW5ndGgsIGNvbnN0IEFFU19LRVkgKmtleSwKKwlzaXplX3QgbGVuZ3RoLCBjb25zdCBBRVNfS0VZICprZXksCiAJdW5zaWduZWQgY2hhciAqaXZlYywgY29uc3QgaW50IGVuYyk7CiB2b2lkIEFFU19jZmIxMjhfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAotCWNvbnN0IHVuc2lnbmVkIGxvbmcgbGVuZ3RoLCBjb25zdCBBRVNfS0VZICprZXksCisJc2l6ZV90IGxlbmd0aCwgY29uc3QgQUVTX0tFWSAqa2V5LAogCXVuc2lnbmVkIGNoYXIgKml2ZWMsIGludCAqbnVtLCBjb25zdCBpbnQgZW5jKTsKIHZvaWQgQUVTX2NmYjFfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAotCWNvbnN0IHVuc2lnbmVkIGxvbmcgbGVuZ3RoLCBjb25zdCBBRVNfS0VZICprZXksCisJc2l6ZV90IGxlbmd0aCwgY29uc3QgQUVTX0tFWSAqa2V5LAogCXVuc2lnbmVkIGNoYXIgKml2ZWMsIGludCAqbnVtLCBjb25zdCBpbnQgZW5jKTsKIHZvaWQgQUVTX2NmYjhfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAotCWNvbnN0IHVuc2lnbmVkIGxvbmcgbGVuZ3RoLCBjb25zdCBBRVNfS0VZICprZXksCisJc2l6ZV90IGxlbmd0aCwgY29uc3QgQUVTX0tFWSAqa2V5LAogCXVuc2lnbmVkIGNoYXIgKml2ZWMsIGludCAqbnVtLCBjb25zdCBpbnQgZW5jKTsKLXZvaWQgQUVTX2NmYnJfZW5jcnlwdF9ibG9jayhjb25zdCB1bnNpZ25lZCBjaGFyICppbix1bnNpZ25lZCBjaGFyICpvdXQsCi0JCQkgICAgY29uc3QgaW50IG5iaXRzLGNvbnN0IEFFU19LRVkgKmtleSwKLQkJCSAgICB1bnNpZ25lZCBjaGFyICppdmVjLGNvbnN0IGludCBlbmMpOwogdm9pZCBBRVNfb2ZiMTI4X2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKLQljb25zdCB1bnNpZ25lZCBsb25nIGxlbmd0aCwgY29uc3QgQUVTX0tFWSAqa2V5LAorCXNpemVfdCBsZW5ndGgsIGNvbnN0IEFFU19LRVkgKmtleSwKIAl1bnNpZ25lZCBjaGFyICppdmVjLCBpbnQgKm51bSk7CiB2b2lkIEFFU19jdHIxMjhfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAotCWNvbnN0IHVuc2lnbmVkIGxvbmcgbGVuZ3RoLCBjb25zdCBBRVNfS0VZICprZXksCisJc2l6ZV90IGxlbmd0aCwgY29uc3QgQUVTX0tFWSAqa2V5LAogCXVuc2lnbmVkIGNoYXIgaXZlY1tBRVNfQkxPQ0tfU0laRV0sCiAJdW5zaWduZWQgY2hhciBlY291bnRfYnVmW0FFU19CTE9DS19TSVpFXSwKIAl1bnNpZ25lZCBpbnQgKm51bSk7Ci0KLS8qIEZvciBJR0UsIHNlZSBhbHNvIGh0dHA6Ly93d3cubGlua3Mub3JnL2ZpbGVzL29wZW5zc2wtaWdlLnBkZiAqLwogLyogTkI6IHRoZSBJViBpcyBfdHdvXyBibG9ja3MgbG9uZyAqLwogdm9pZCBBRVNfaWdlX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKLQkJICAgICBjb25zdCB1bnNpZ25lZCBsb25nIGxlbmd0aCwgY29uc3QgQUVTX0tFWSAqa2V5LAorCQkgICAgIHNpemVfdCBsZW5ndGgsIGNvbnN0IEFFU19LRVkgKmtleSwKIAkJICAgICB1bnNpZ25lZCBjaGFyICppdmVjLCBjb25zdCBpbnQgZW5jKTsKIC8qIE5COiB0aGUgSVYgaXMgX2ZvdXJfIGJsb2NrcyBsb25nICovCiB2b2lkIEFFU19iaV9pZ2VfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAotCQkJY29uc3QgdW5zaWduZWQgbG9uZyBsZW5ndGgsIGNvbnN0IEFFU19LRVkgKmtleSwKKwkJCXNpemVfdCBsZW5ndGgsIGNvbnN0IEFFU19LRVkgKmtleSwKIAkJCWNvbnN0IEFFU19LRVkgKmtleTIsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2ZWMsCiAJCQljb25zdCBpbnQgZW5jKTsKIApAQCAtMTQxLDYgKzEzNCw3IEBACiAJCXVuc2lnbmVkIGNoYXIgKm91dCwKIAkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGludCBpbmxlbik7CiAKKwogI2lmZGVmICBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9jcnlwdG8vYWVzL2Flc19jYmMuYyBiL2NyeXB0by9hZXMvYWVzX2NiYy5jCmluZGV4IDM3Mzg2NGMuLjIyN2Y3NTYgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hZXMvYWVzX2NiYy5jCisrKyBiL2NyeXB0by9hZXMvYWVzX2NiYy5jCkBAIC00OSw4NSArNDksMTUgQEAKICAqCiAgKi8KIAotI2lmbmRlZiBBRVNfREVCVUcKLSMgaWZuZGVmIE5ERUJVRwotIyAgZGVmaW5lIE5ERUJVRwotIyBlbmRpZgotI2VuZGlmCi0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0KICNpbmNsdWRlIDxvcGVuc3NsL2Flcy5oPgotI2luY2x1ZGUgImFlc19sb2NsLmgiCisjaW5jbHVkZSA8b3BlbnNzbC9tb2Rlcy5oPgogCi0jaWYgIWRlZmluZWQoT1BFTlNTTF9GSVBTX0FFU19BU00pCiB2b2lkIEFFU19jYmNfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAotCQkgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgbGVuZ3RoLCBjb25zdCBBRVNfS0VZICprZXksCisJCSAgICAgc2l6ZV90IGxlbiwgY29uc3QgQUVTX0tFWSAqa2V5LAogCQkgICAgIHVuc2lnbmVkIGNoYXIgKml2ZWMsIGNvbnN0IGludCBlbmMpIHsKIAotCXVuc2lnbmVkIGxvbmcgbjsKLQl1bnNpZ25lZCBsb25nIGxlbiA9IGxlbmd0aDsKLQl1bnNpZ25lZCBjaGFyIHRtcFtBRVNfQkxPQ0tfU0laRV07Ci0JY29uc3QgdW5zaWduZWQgY2hhciAqaXYgPSBpdmVjOwotCi0JYXNzZXJ0KGluICYmIG91dCAmJiBrZXkgJiYgaXZlYyk7Ci0JYXNzZXJ0KChBRVNfRU5DUllQVCA9PSBlbmMpfHwoQUVTX0RFQ1JZUFQgPT0gZW5jKSk7Ci0KLQlpZiAoQUVTX0VOQ1JZUFQgPT0gZW5jKSB7Ci0JCXdoaWxlIChsZW4gPj0gQUVTX0JMT0NLX1NJWkUpIHsKLQkJCWZvcihuPTA7IG4gPCBBRVNfQkxPQ0tfU0laRTsgKytuKQotCQkJCW91dFtuXSA9IGluW25dIF4gaXZbbl07Ci0JCQlBRVNfZW5jcnlwdChvdXQsIG91dCwga2V5KTsKLQkJCWl2ID0gb3V0OwotCQkJbGVuIC09IEFFU19CTE9DS19TSVpFOwotCQkJaW4gKz0gQUVTX0JMT0NLX1NJWkU7Ci0JCQlvdXQgKz0gQUVTX0JMT0NLX1NJWkU7Ci0JCX0KLQkJaWYgKGxlbikgewotCQkJZm9yKG49MDsgbiA8IGxlbjsgKytuKQotCQkJCW91dFtuXSA9IGluW25dIF4gaXZbbl07Ci0JCQlmb3Iobj1sZW47IG4gPCBBRVNfQkxPQ0tfU0laRTsgKytuKQotCQkJCW91dFtuXSA9IGl2W25dOwotCQkJQUVTX2VuY3J5cHQob3V0LCBvdXQsIGtleSk7Ci0JCQlpdiA9IG91dDsKLQkJfQotCQltZW1jcHkoaXZlYyxpdixBRVNfQkxPQ0tfU0laRSk7Ci0JfSBlbHNlIGlmIChpbiAhPSBvdXQpIHsKLQkJd2hpbGUgKGxlbiA+PSBBRVNfQkxPQ0tfU0laRSkgewotCQkJQUVTX2RlY3J5cHQoaW4sIG91dCwga2V5KTsKLQkJCWZvcihuPTA7IG4gPCBBRVNfQkxPQ0tfU0laRTsgKytuKQotCQkJCW91dFtuXSBePSBpdltuXTsKLQkJCWl2ID0gaW47Ci0JCQlsZW4gLT0gQUVTX0JMT0NLX1NJWkU7Ci0JCQlpbiAgKz0gQUVTX0JMT0NLX1NJWkU7Ci0JCQlvdXQgKz0gQUVTX0JMT0NLX1NJWkU7Ci0JCX0KLQkJaWYgKGxlbikgewotCQkJQUVTX2RlY3J5cHQoaW4sdG1wLGtleSk7Ci0JCQlmb3Iobj0wOyBuIDwgbGVuOyArK24pCi0JCQkJb3V0W25dID0gdG1wW25dIF4gaXZbbl07Ci0JCQlpdiA9IGluOwotCQl9Ci0JCW1lbWNweShpdmVjLGl2LEFFU19CTE9DS19TSVpFKTsKLQl9IGVsc2UgewotCQl3aGlsZSAobGVuID49IEFFU19CTE9DS19TSVpFKSB7Ci0JCQltZW1jcHkodG1wLCBpbiwgQUVTX0JMT0NLX1NJWkUpOwotCQkJQUVTX2RlY3J5cHQoaW4sIG91dCwga2V5KTsKLQkJCWZvcihuPTA7IG4gPCBBRVNfQkxPQ0tfU0laRTsgKytuKQotCQkJCW91dFtuXSBePSBpdmVjW25dOwotCQkJbWVtY3B5KGl2ZWMsIHRtcCwgQUVTX0JMT0NLX1NJWkUpOwotCQkJbGVuIC09IEFFU19CTE9DS19TSVpFOwotCQkJaW4gKz0gQUVTX0JMT0NLX1NJWkU7Ci0JCQlvdXQgKz0gQUVTX0JMT0NLX1NJWkU7Ci0JCX0KLQkJaWYgKGxlbikgewotCQkJbWVtY3B5KHRtcCwgaW4sIEFFU19CTE9DS19TSVpFKTsKLQkJCUFFU19kZWNyeXB0KHRtcCwgb3V0LCBrZXkpOwotCQkJZm9yKG49MDsgbiA8IGxlbjsgKytuKQotCQkJCW91dFtuXSBePSBpdmVjW25dOwotCQkJZm9yKG49bGVuOyBuIDwgQUVTX0JMT0NLX1NJWkU7ICsrbikKLQkJCQlvdXRbbl0gPSB0bXBbbl07Ci0JCQltZW1jcHkoaXZlYywgdG1wLCBBRVNfQkxPQ0tfU0laRSk7Ci0JCX0KLQl9CisJaWYgKGVuYykKKwkJQ1JZUFRPX2NiYzEyOF9lbmNyeXB0KGluLG91dCxsZW4sa2V5LGl2ZWMsKGJsb2NrMTI4X2YpQUVTX2VuY3J5cHQpOworCWVsc2UKKwkJQ1JZUFRPX2NiYzEyOF9kZWNyeXB0KGluLG91dCxsZW4sa2V5LGl2ZWMsKGJsb2NrMTI4X2YpQUVTX2RlY3J5cHQpOwogfQotI2VuZGlmCmRpZmYgLS1naXQgYS9jcnlwdG8vYWVzL2Flc19jZmIuYyBiL2NyeXB0by9hZXMvYWVzX2NmYi5jCmluZGV4IDkzODRiYTYuLjBjNmQwNTggMTAwNjQ0Ci0tLSBhL2NyeXB0by9hZXMvYWVzX2NmYi5jCisrKyBiL2NyeXB0by9hZXMvYWVzX2NmYi5jCkBAIC0xLDYgKzEsNiBAQAogLyogY3J5cHRvL2Flcy9hZXNfY2ZiLmMgLSotIG1vZGU6QzsgYy1maWxlLXN0eWxlOiAiZWF5IiAtKi0gKi8KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMiBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA2IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OCw3MyArNDgsOSBAQAogICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqCiAgKi8KLS8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KLSAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KLSAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KLSAqIAotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCi0gKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCi0gKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KLSAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKLSAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgotICogCi0gKiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgotICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgotICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgotICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KLSAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgotICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0gKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQotICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKLSAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQotICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCi0gKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKLSAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6Ci0gKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKiAKLSAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCi0gKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKLSAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKLSAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCi0gKi8KLQotI2lmbmRlZiBBRVNfREVCVUcKLSMgaWZuZGVmIE5ERUJVRwotIyAgZGVmaW5lIE5ERUJVRwotIyBlbmRpZgotI2VuZGlmCi0jaW5jbHVkZSA8YXNzZXJ0Lmg+CiAKICNpbmNsdWRlIDxvcGVuc3NsL2Flcy5oPgotI2luY2x1ZGUgImFlc19sb2NsLmgiCi0jaW5jbHVkZSAiZV9vcy5oIgorI2luY2x1ZGUgPG9wZW5zc2wvbW9kZXMuaD4KIAogLyogVGhlIGlucHV0IGFuZCBvdXRwdXQgZW5jcnlwdGVkIGFzIHRob3VnaCAxMjhiaXQgY2ZiIG1vZGUgaXMgYmVpbmcKICAqIHVzZWQuICBUaGUgZXh0cmEgc3RhdGUgaW5mb3JtYXRpb24gdG8gcmVjb3JkIGhvdyBtdWNoIG9mIHRoZQpAQCAtMTIyLDEwMyArNTgsMjQgQEAKICAqLwogCiB2b2lkIEFFU19jZmIxMjhfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAotCWNvbnN0IHVuc2lnbmVkIGxvbmcgbGVuZ3RoLCBjb25zdCBBRVNfS0VZICprZXksCisJc2l6ZV90IGxlbmd0aCwgY29uc3QgQUVTX0tFWSAqa2V5LAogCXVuc2lnbmVkIGNoYXIgKml2ZWMsIGludCAqbnVtLCBjb25zdCBpbnQgZW5jKSB7CiAKLQl1bnNpZ25lZCBpbnQgbjsKLQl1bnNpZ25lZCBsb25nIGwgPSBsZW5ndGg7Ci0JdW5zaWduZWQgY2hhciBjOwotCi0JYXNzZXJ0KGluICYmIG91dCAmJiBrZXkgJiYgaXZlYyAmJiBudW0pOwotCi0JbiA9ICpudW07Ci0KLQlpZiAoZW5jKSB7Ci0JCXdoaWxlIChsLS0pIHsKLQkJCWlmIChuID09IDApIHsKLQkJCQlBRVNfZW5jcnlwdChpdmVjLCBpdmVjLCBrZXkpOwotCQkJfQotCQkJaXZlY1tuXSA9ICoob3V0KyspID0gKihpbisrKSBeIGl2ZWNbbl07Ci0JCQluID0gKG4rMSkgJSBBRVNfQkxPQ0tfU0laRTsKLQkJfQotCX0gZWxzZSB7Ci0JCXdoaWxlIChsLS0pIHsKLQkJCWlmIChuID09IDApIHsKLQkJCQlBRVNfZW5jcnlwdChpdmVjLCBpdmVjLCBrZXkpOwotCQkJfQotCQkJYyA9ICooaW4pOwotCQkJKihvdXQrKykgPSAqKGluKyspIF4gaXZlY1tuXTsKLQkJCWl2ZWNbbl0gPSBjOwotCQkJbiA9IChuKzEpICUgQUVTX0JMT0NLX1NJWkU7Ci0JCX0KLQl9Ci0KLQkqbnVtPW47CisJQ1JZUFRPX2NmYjEyOF9lbmNyeXB0KGluLG91dCxsZW5ndGgsa2V5LGl2ZWMsbnVtLGVuYywoYmxvY2sxMjhfZilBRVNfZW5jcnlwdCk7CiB9CiAKLS8qIFRoaXMgZXhwZWN0cyBhIHNpbmdsZSBibG9jayBvZiBzaXplIG5iaXRzIGZvciBib3RoIGluIGFuZCBvdXQuIE5vdGUgdGhhdAotICAgaXQgY29ycnVwdHMgYW55IGV4dHJhIGJpdHMgaW4gdGhlIGxhc3QgYnl0ZSBvZiBvdXQgKi8KLXZvaWQgQUVTX2NmYnJfZW5jcnlwdF9ibG9jayhjb25zdCB1bnNpZ25lZCBjaGFyICppbix1bnNpZ25lZCBjaGFyICpvdXQsCi0JCQkgICAgY29uc3QgaW50IG5iaXRzLGNvbnN0IEFFU19LRVkgKmtleSwKLQkJCSAgICB1bnNpZ25lZCBjaGFyICppdmVjLGNvbnN0IGludCBlbmMpCi0gICAgewotICAgIGludCBuLHJlbSxudW07Ci0gICAgdW5zaWduZWQgY2hhciBvdmVjW0FFU19CTE9DS19TSVpFKjJdOwotCi0gICAgaWYgKG5iaXRzPD0wIHx8IG5iaXRzPjEyOCkgcmV0dXJuOwotCi0JLyogZmlsbCBpbiB0aGUgZmlyc3QgaGFsZiBvZiB0aGUgbmV3IElWIHdpdGggdGhlIGN1cnJlbnQgSVYgKi8KLQltZW1jcHkob3ZlYyxpdmVjLEFFU19CTE9DS19TSVpFKTsKLQkvKiBjb25zdHJ1Y3QgdGhlIG5ldyBJViAqLwotCUFFU19lbmNyeXB0KGl2ZWMsaXZlYyxrZXkpOwotCW51bSA9IChuYml0cys3KS84OwotCWlmIChlbmMpCS8qIGVuY3J5cHQgdGhlIGlucHV0ICovCi0JICAgIGZvcihuPTAgOyBuIDwgbnVtIDsgKytuKQotCQlvdXRbbl0gPSAob3ZlY1tBRVNfQkxPQ0tfU0laRStuXSA9IGluW25dIF4gaXZlY1tuXSk7Ci0JZWxzZQkJLyogZGVjcnlwdCB0aGUgaW5wdXQgKi8KLQkgICAgZm9yKG49MCA7IG4gPCBudW0gOyArK24pCi0JCW91dFtuXSA9IChvdmVjW0FFU19CTE9DS19TSVpFK25dID0gaW5bbl0pIF4gaXZlY1tuXTsKLQkvKiBzaGlmdCBvdmVjIGxlZnQuLi4gKi8KLQlyZW0gPSBuYml0cyU4OwotCW51bSA9IG5iaXRzLzg7Ci0JaWYocmVtPT0wKQotCSAgICBtZW1jcHkoaXZlYyxvdmVjK251bSxBRVNfQkxPQ0tfU0laRSk7Ci0JZWxzZQotCSAgICBmb3Iobj0wIDsgbiA8IEFFU19CTE9DS19TSVpFIDsgKytuKQotCQlpdmVjW25dID0gb3ZlY1tuK251bV08PHJlbSB8IG92ZWNbbitudW0rMV0+Pig4LXJlbSk7Ci0KLSAgICAvKiBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGNsZWFuc2Ugb3ZlYywgc2luY2UgdGhlIElWIGlzIG5vdCBzZWNyZXQgKi8KLSAgICB9Ci0KIC8qIE4uQi4gVGhpcyBleHBlY3RzIHRoZSBpbnB1dCB0byBiZSBwYWNrZWQsIE1TIGJpdCBmaXJzdCAqLwogdm9pZCBBRVNfY2ZiMV9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCi0JCSAgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgbGVuZ3RoLCBjb25zdCBBRVNfS0VZICprZXksCisJCSAgICAgIHNpemVfdCBsZW5ndGgsIGNvbnN0IEFFU19LRVkgKmtleSwKIAkJICAgICAgdW5zaWduZWQgY2hhciAqaXZlYywgaW50ICpudW0sIGNvbnN0IGludCBlbmMpCiAgICAgewotICAgIHVuc2lnbmVkIGludCBuOwotICAgIHVuc2lnbmVkIGNoYXIgY1sxXSxkWzFdOwotCi0gICAgYXNzZXJ0KGluICYmIG91dCAmJiBrZXkgJiYgaXZlYyAmJiBudW0pOwotICAgIGFzc2VydCgqbnVtID09IDApOwotCi0gICAgZm9yKG49MCA7IG4gPCBsZW5ndGggOyArK24pCi0JewotCWNbMF09KGluW24vOF0mKDEgPDwgKDctbiU4KSkpID8gMHg4MCA6IDA7Ci0JQUVTX2NmYnJfZW5jcnlwdF9ibG9jayhjLGQsMSxrZXksaXZlYyxlbmMpOwotCW91dFtuLzhdPShvdXRbbi84XSZ+KDEgPDwgKDctbiU4KSkpfCgoZFswXSYweDgwKSA+PiAobiU4KSk7Ci0JfQorICAgIENSWVBUT19jZmIxMjhfMV9lbmNyeXB0KGluLG91dCxsZW5ndGgsa2V5LGl2ZWMsbnVtLGVuYywoYmxvY2sxMjhfZilBRVNfZW5jcnlwdCk7CiAgICAgfQogCiB2b2lkIEFFU19jZmI4X2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKLQkJICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyBsZW5ndGgsIGNvbnN0IEFFU19LRVkgKmtleSwKKwkJICAgICAgc2l6ZV90IGxlbmd0aCwgY29uc3QgQUVTX0tFWSAqa2V5LAogCQkgICAgICB1bnNpZ25lZCBjaGFyICppdmVjLCBpbnQgKm51bSwgY29uc3QgaW50IGVuYykKICAgICB7Ci0gICAgdW5zaWduZWQgaW50IG47Ci0KLSAgICBhc3NlcnQoaW4gJiYgb3V0ICYmIGtleSAmJiBpdmVjICYmIG51bSk7Ci0gICAgYXNzZXJ0KCpudW0gPT0gMCk7Ci0KLSAgICBmb3Iobj0wIDsgbiA8IGxlbmd0aCA7ICsrbikKLQlBRVNfY2Zicl9lbmNyeXB0X2Jsb2NrKCZpbltuXSwmb3V0W25dLDgsa2V5LGl2ZWMsZW5jKTsKKyAgICBDUllQVE9fY2ZiMTI4XzhfZW5jcnlwdChpbixvdXQsbGVuZ3RoLGtleSxpdmVjLG51bSxlbmMsKGJsb2NrMTI4X2YpQUVTX2VuY3J5cHQpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvY3J5cHRvL2Flcy9hZXNfY29yZS5jIGIvY3J5cHRvL2Flcy9hZXNfY29yZS5jCmluZGV4IGNmZmRkNGQuLmE3ZWM1NGYgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hZXMvYWVzX2NvcmUuYworKysgYi9jcnlwdG8vYWVzL2Flc19jb3JlLmMKQEAgLTM3LDEyICszNyw5IEBACiAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxvcGVuc3NsL2Flcy5oPgotI2lmZGVmIE9QRU5TU0xfRklQUwotI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotI2VuZGlmCi0KICNpbmNsdWRlICJhZXNfbG9jbC5oIgogCisjaWZuZGVmIEFFU19BU00KIC8qCiBUZTBbeF0gPSBTIFt4XS5bMDIsIDAxLCAwMSwgMDNdOwogVGUxW3hdID0gUyBbeF0uWzAzLCAwMiwgMDEsIDAxXTsKQEAgLTYzNSwxMCArNjMyLDYgQEAKICAgIAlpbnQgaSA9IDA7CiAJdTMyIHRlbXA7CiAKLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLQlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0jZW5kaWYKLQogCWlmICghdXNlcktleSB8fCAha2V5KQogCQlyZXR1cm4gLTE7CiAJaWYgKGJpdHMgIT0gMTI4ICYmIGJpdHMgIT0gMTkyICYmIGJpdHMgIT0gMjU2KQpAQCAtNzgxLDcgKzc3NCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZm5kZWYgQUVTX0FTTQogLyoKICAqIEVuY3J5cHQgYSBzaW5nbGUgYmxvY2sKICAqIGluIGFuZCBvdXQgY2FuIG92ZXJsYXAKQEAgLTExNjQsNCArMTE1NiwyMDMgQEAKIAlQVVRVMzIob3V0ICsgMTIsIHMzKTsKIH0KIAorI2Vsc2UgLyogQUVTX0FTTSAqLworCitzdGF0aWMgY29uc3QgdTggVGU0WzI1Nl0gPSB7CisgICAgMHg2M1UsIDB4N2NVLCAweDc3VSwgMHg3YlUsIDB4ZjJVLCAweDZiVSwgMHg2ZlUsIDB4YzVVLAorICAgIDB4MzBVLCAweDAxVSwgMHg2N1UsIDB4MmJVLCAweGZlVSwgMHhkN1UsIDB4YWJVLCAweDc2VSwKKyAgICAweGNhVSwgMHg4MlUsIDB4YzlVLCAweDdkVSwgMHhmYVUsIDB4NTlVLCAweDQ3VSwgMHhmMFUsCisgICAgMHhhZFUsIDB4ZDRVLCAweGEyVSwgMHhhZlUsIDB4OWNVLCAweGE0VSwgMHg3MlUsIDB4YzBVLAorICAgIDB4YjdVLCAweGZkVSwgMHg5M1UsIDB4MjZVLCAweDM2VSwgMHgzZlUsIDB4ZjdVLCAweGNjVSwKKyAgICAweDM0VSwgMHhhNVUsIDB4ZTVVLCAweGYxVSwgMHg3MVUsIDB4ZDhVLCAweDMxVSwgMHgxNVUsCisgICAgMHgwNFUsIDB4YzdVLCAweDIzVSwgMHhjM1UsIDB4MThVLCAweDk2VSwgMHgwNVUsIDB4OWFVLAorICAgIDB4MDdVLCAweDEyVSwgMHg4MFUsIDB4ZTJVLCAweGViVSwgMHgyN1UsIDB4YjJVLCAweDc1VSwKKyAgICAweDA5VSwgMHg4M1UsIDB4MmNVLCAweDFhVSwgMHgxYlUsIDB4NmVVLCAweDVhVSwgMHhhMFUsCisgICAgMHg1MlUsIDB4M2JVLCAweGQ2VSwgMHhiM1UsIDB4MjlVLCAweGUzVSwgMHgyZlUsIDB4ODRVLAorICAgIDB4NTNVLCAweGQxVSwgMHgwMFUsIDB4ZWRVLCAweDIwVSwgMHhmY1UsIDB4YjFVLCAweDViVSwKKyAgICAweDZhVSwgMHhjYlUsIDB4YmVVLCAweDM5VSwgMHg0YVUsIDB4NGNVLCAweDU4VSwgMHhjZlUsCisgICAgMHhkMFUsIDB4ZWZVLCAweGFhVSwgMHhmYlUsIDB4NDNVLCAweDRkVSwgMHgzM1UsIDB4ODVVLAorICAgIDB4NDVVLCAweGY5VSwgMHgwMlUsIDB4N2ZVLCAweDUwVSwgMHgzY1UsIDB4OWZVLCAweGE4VSwKKyAgICAweDUxVSwgMHhhM1UsIDB4NDBVLCAweDhmVSwgMHg5MlUsIDB4OWRVLCAweDM4VSwgMHhmNVUsCisgICAgMHhiY1UsIDB4YjZVLCAweGRhVSwgMHgyMVUsIDB4MTBVLCAweGZmVSwgMHhmM1UsIDB4ZDJVLAorICAgIDB4Y2RVLCAweDBjVSwgMHgxM1UsIDB4ZWNVLCAweDVmVSwgMHg5N1UsIDB4NDRVLCAweDE3VSwKKyAgICAweGM0VSwgMHhhN1UsIDB4N2VVLCAweDNkVSwgMHg2NFUsIDB4NWRVLCAweDE5VSwgMHg3M1UsCisgICAgMHg2MFUsIDB4ODFVLCAweDRmVSwgMHhkY1UsIDB4MjJVLCAweDJhVSwgMHg5MFUsIDB4ODhVLAorICAgIDB4NDZVLCAweGVlVSwgMHhiOFUsIDB4MTRVLCAweGRlVSwgMHg1ZVUsIDB4MGJVLCAweGRiVSwKKyAgICAweGUwVSwgMHgzMlUsIDB4M2FVLCAweDBhVSwgMHg0OVUsIDB4MDZVLCAweDI0VSwgMHg1Y1UsCisgICAgMHhjMlUsIDB4ZDNVLCAweGFjVSwgMHg2MlUsIDB4OTFVLCAweDk1VSwgMHhlNFUsIDB4NzlVLAorICAgIDB4ZTdVLCAweGM4VSwgMHgzN1UsIDB4NmRVLCAweDhkVSwgMHhkNVUsIDB4NGVVLCAweGE5VSwKKyAgICAweDZjVSwgMHg1NlUsIDB4ZjRVLCAweGVhVSwgMHg2NVUsIDB4N2FVLCAweGFlVSwgMHgwOFUsCisgICAgMHhiYVUsIDB4NzhVLCAweDI1VSwgMHgyZVUsIDB4MWNVLCAweGE2VSwgMHhiNFUsIDB4YzZVLAorICAgIDB4ZThVLCAweGRkVSwgMHg3NFUsIDB4MWZVLCAweDRiVSwgMHhiZFUsIDB4OGJVLCAweDhhVSwKKyAgICAweDcwVSwgMHgzZVUsIDB4YjVVLCAweDY2VSwgMHg0OFUsIDB4MDNVLCAweGY2VSwgMHgwZVUsCisgICAgMHg2MVUsIDB4MzVVLCAweDU3VSwgMHhiOVUsIDB4ODZVLCAweGMxVSwgMHgxZFUsIDB4OWVVLAorICAgIDB4ZTFVLCAweGY4VSwgMHg5OFUsIDB4MTFVLCAweDY5VSwgMHhkOVUsIDB4OGVVLCAweDk0VSwKKyAgICAweDliVSwgMHgxZVUsIDB4ODdVLCAweGU5VSwgMHhjZVUsIDB4NTVVLCAweDI4VSwgMHhkZlUsCisgICAgMHg4Y1UsIDB4YTFVLCAweDg5VSwgMHgwZFUsIDB4YmZVLCAweGU2VSwgMHg0MlUsIDB4NjhVLAorICAgIDB4NDFVLCAweDk5VSwgMHgyZFUsIDB4MGZVLCAweGIwVSwgMHg1NFUsIDB4YmJVLCAweDE2VQorfTsKK3N0YXRpYyBjb25zdCB1MzIgcmNvbltdID0geworCTB4MDEwMDAwMDAsIDB4MDIwMDAwMDAsIDB4MDQwMDAwMDAsIDB4MDgwMDAwMDAsCisJMHgxMDAwMDAwMCwgMHgyMDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg4MDAwMDAwMCwKKwkweDFCMDAwMDAwLCAweDM2MDAwMDAwLCAvKiBmb3IgMTI4LWJpdCBibG9ja3MsIFJpam5kYWVsIG5ldmVyIHVzZXMgbW9yZSB0aGFuIDEwIHJjb24gdmFsdWVzICovCit9OworCisvKioKKyAqIEV4cGFuZCB0aGUgY2lwaGVyIGtleSBpbnRvIHRoZSBlbmNyeXB0aW9uIGtleSBzY2hlZHVsZS4KKyAqLworaW50IEFFU19zZXRfZW5jcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgY29uc3QgaW50IGJpdHMsCisJCQlBRVNfS0VZICprZXkpIHsKKwl1MzIgKnJrOworICAgCWludCBpID0gMDsKKwl1MzIgdGVtcDsKKworCWlmICghdXNlcktleSB8fCAha2V5KQorCQlyZXR1cm4gLTE7CisJaWYgKGJpdHMgIT0gMTI4ICYmIGJpdHMgIT0gMTkyICYmIGJpdHMgIT0gMjU2KQorCQlyZXR1cm4gLTI7CisKKwlyayA9IGtleS0+cmRfa2V5OworCisJaWYgKGJpdHM9PTEyOCkKKwkJa2V5LT5yb3VuZHMgPSAxMDsKKwllbHNlIGlmIChiaXRzPT0xOTIpCisJCWtleS0+cm91bmRzID0gMTI7CisJZWxzZQorCQlrZXktPnJvdW5kcyA9IDE0OworCisJcmtbMF0gPSBHRVRVMzIodXNlcktleSAgICAgKTsKKwlya1sxXSA9IEdFVFUzMih1c2VyS2V5ICsgIDQpOworCXJrWzJdID0gR0VUVTMyKHVzZXJLZXkgKyAgOCk7CisJcmtbM10gPSBHRVRVMzIodXNlcktleSArIDEyKTsKKwlpZiAoYml0cyA9PSAxMjgpIHsKKwkJd2hpbGUgKDEpIHsKKwkJCXRlbXAgID0gcmtbM107CisJCQlya1s0XSA9IHJrWzBdIF4KKwkJCQkoVGU0Wyh0ZW1wID4+IDE2KSAmIDB4ZmZdIDw8IDI0KSBeCisJCQkJKFRlNFsodGVtcCA+PiAgOCkgJiAweGZmXSA8PCAxNikgXgorCQkJCShUZTRbKHRlbXAgICAgICApICYgMHhmZl0gPDwgOCkgXgorCQkJCShUZTRbKHRlbXAgPj4gMjQpICAgICAgIF0pIF4KKwkJCQlyY29uW2ldOworCQkJcmtbNV0gPSBya1sxXSBeIHJrWzRdOworCQkJcmtbNl0gPSBya1syXSBeIHJrWzVdOworCQkJcmtbN10gPSBya1szXSBeIHJrWzZdOworCQkJaWYgKCsraSA9PSAxMCkgeworCQkJCXJldHVybiAwOworCQkJfQorCQkJcmsgKz0gNDsKKwkJfQorCX0KKwlya1s0XSA9IEdFVFUzMih1c2VyS2V5ICsgMTYpOworCXJrWzVdID0gR0VUVTMyKHVzZXJLZXkgKyAyMCk7CisJaWYgKGJpdHMgPT0gMTkyKSB7CisJCXdoaWxlICgxKSB7CisJCQl0ZW1wID0gcmtbIDVdOworCQkJcmtbIDZdID0gcmtbIDBdIF4KKwkJCQkoVGU0Wyh0ZW1wID4+IDE2KSAmIDB4ZmZdIDw8IDI0KSBeCisJCQkJKFRlNFsodGVtcCA+PiAgOCkgJiAweGZmXSA8PCAxNikgXgorCQkJCShUZTRbKHRlbXAgICAgICApICYgMHhmZl0gPDwgOCkgXgorCQkJCShUZTRbKHRlbXAgPj4gMjQpICAgICAgIF0pIF4KKwkJCQlyY29uW2ldOworCQkJcmtbIDddID0gcmtbIDFdIF4gcmtbIDZdOworCQkJcmtbIDhdID0gcmtbIDJdIF4gcmtbIDddOworCQkJcmtbIDldID0gcmtbIDNdIF4gcmtbIDhdOworCQkJaWYgKCsraSA9PSA4KSB7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQlya1sxMF0gPSBya1sgNF0gXiBya1sgOV07CisJCQlya1sxMV0gPSBya1sgNV0gXiBya1sxMF07CisJCQlyayArPSA2OworCQl9CisJfQorCXJrWzZdID0gR0VUVTMyKHVzZXJLZXkgKyAyNCk7CisJcmtbN10gPSBHRVRVMzIodXNlcktleSArIDI4KTsKKwlpZiAoYml0cyA9PSAyNTYpIHsKKwkJd2hpbGUgKDEpIHsKKwkJCXRlbXAgPSBya1sgN107CisJCQlya1sgOF0gPSBya1sgMF0gXgorCQkJCShUZTRbKHRlbXAgPj4gMTYpICYgMHhmZl0gPDwgMjQpIF4KKwkJCQkoVGU0Wyh0ZW1wID4+ICA4KSAmIDB4ZmZdIDw8IDE2KSBeCisJCQkJKFRlNFsodGVtcCAgICAgICkgJiAweGZmXSA8PCA4KSBeCisJCQkJKFRlNFsodGVtcCA+PiAyNCkgICAgICAgXSkgXgorCQkJCXJjb25baV07CisJCQlya1sgOV0gPSBya1sgMV0gXiBya1sgOF07CisJCQlya1sxMF0gPSBya1sgMl0gXiBya1sgOV07CisJCQlya1sxMV0gPSBya1sgM10gXiBya1sxMF07CisJCQlpZiAoKytpID09IDcpIHsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCXRlbXAgPSBya1sxMV07CisJCQlya1sxMl0gPSBya1sgNF0gXgorCQkJCShUZTRbKHRlbXAgPj4gMjQpICAgICAgIF0gPDwgMjQpIF4KKwkJCQkoVGU0Wyh0ZW1wID4+IDE2KSAmIDB4ZmZdIDw8IDE2KSBeCisJCQkJKFRlNFsodGVtcCA+PiAgOCkgJiAweGZmXSA8PCA4KSBeCisJCQkJKFRlNFsodGVtcCAgICAgICkgJiAweGZmXSk7CisJCQlya1sxM10gPSBya1sgNV0gXiBya1sxMl07CisJCQlya1sxNF0gPSBya1sgNl0gXiBya1sxM107CisJCQlya1sxNV0gPSBya1sgN10gXiBya1sxNF07CisKKwkJCXJrICs9IDg7CisgICAgICAgIAl9CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIEV4cGFuZCB0aGUgY2lwaGVyIGtleSBpbnRvIHRoZSBkZWNyeXB0aW9uIGtleSBzY2hlZHVsZS4KKyAqLworaW50IEFFU19zZXRfZGVjcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgY29uc3QgaW50IGJpdHMsCisJCQkgQUVTX0tFWSAqa2V5KSB7CisKKyAgICAgICAgdTMyICpyazsKKwlpbnQgaSwgaiwgc3RhdHVzOworCXUzMiB0ZW1wOworCisJLyogZmlyc3QsIHN0YXJ0IHdpdGggYW4gZW5jcnlwdGlvbiBzY2hlZHVsZSAqLworCXN0YXR1cyA9IEFFU19zZXRfZW5jcnlwdF9rZXkodXNlcktleSwgYml0cywga2V5KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKworCXJrID0ga2V5LT5yZF9rZXk7CisKKwkvKiBpbnZlcnQgdGhlIG9yZGVyIG9mIHRoZSByb3VuZCBrZXlzOiAqLworCWZvciAoaSA9IDAsIGogPSA0KihrZXktPnJvdW5kcyk7IGkgPCBqOyBpICs9IDQsIGogLT0gNCkgeworCQl0ZW1wID0gcmtbaSAgICBdOyBya1tpICAgIF0gPSBya1tqICAgIF07IHJrW2ogICAgXSA9IHRlbXA7CisJCXRlbXAgPSBya1tpICsgMV07IHJrW2kgKyAxXSA9IHJrW2ogKyAxXTsgcmtbaiArIDFdID0gdGVtcDsKKwkJdGVtcCA9IHJrW2kgKyAyXTsgcmtbaSArIDJdID0gcmtbaiArIDJdOyBya1tqICsgMl0gPSB0ZW1wOworCQl0ZW1wID0gcmtbaSArIDNdOyBya1tpICsgM10gPSBya1tqICsgM107IHJrW2ogKyAzXSA9IHRlbXA7CisJfQorCS8qIGFwcGx5IHRoZSBpbnZlcnNlIE1peENvbHVtbiB0cmFuc2Zvcm0gdG8gYWxsIHJvdW5kIGtleXMgYnV0IHRoZSBmaXJzdCBhbmQgdGhlIGxhc3Q6ICovCisJZm9yIChpID0gMTsgaSA8IChrZXktPnJvdW5kcyk7IGkrKykgeworCQlyayArPSA0OworCQlmb3IgKGogPSAwOyBqIDwgNDsgaisrKSB7CisJCQl1MzIgdHAxLCB0cDIsIHRwNCwgdHA4LCB0cDksIHRwYiwgdHBkLCB0cGUsIG07CisKKwkJCXRwMSA9IHJrW2pdOworCQkJbSA9IHRwMSAmIDB4ODA4MDgwODA7CisJCQl0cDIgPSAoKHRwMSAmIDB4N2Y3ZjdmN2YpIDw8IDEpIF4KKwkJCQkoKG0gLSAobSA+PiA3KSkgJiAweDFiMWIxYjFiKTsKKwkJCW0gPSB0cDIgJiAweDgwODA4MDgwOworCQkJdHA0ID0gKCh0cDIgJiAweDdmN2Y3ZjdmKSA8PCAxKSBeCisJCQkJKChtIC0gKG0gPj4gNykpICYgMHgxYjFiMWIxYik7CisJCQltID0gdHA0ICYgMHg4MDgwODA4MDsKKwkJCXRwOCA9ICgodHA0ICYgMHg3ZjdmN2Y3ZikgPDwgMSkgXgorCQkJCSgobSAtIChtID4+IDcpKSAmIDB4MWIxYjFiMWIpOworCQkJdHA5ID0gdHA4IF4gdHAxOworCQkJdHBiID0gdHA5IF4gdHAyOworCQkJdHBkID0gdHA5IF4gdHA0OworCQkJdHBlID0gdHA4IF4gdHA0IF4gdHAyOworI2lmIGRlZmluZWQoUk9UQVRFKQorCQkJcmtbal0gPSB0cGUgXiBST1RBVEUodHBkLDE2KSBeCisJCQkJUk9UQVRFKHRwOSwyNCkgXiBST1RBVEUodHBiLDgpOworI2Vsc2UKKwkJCXJrW2pdID0gdHBlIF4gKHRwZCA+PiAxNikgXiAodHBkIDw8IDE2KSBeIAorCQkJCSh0cDkgPj4gOCkgXiAodHA5IDw8IDI0KSBeCisJCQkJKHRwYiA+PiAyNCkgXiAodHBiIDw8IDgpOworI2VuZGlmCisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKICNlbmRpZiAvKiBBRVNfQVNNICovCmRpZmYgLS1naXQgYS9jcnlwdG8vYWVzL2Flc19jdHIuYyBiL2NyeXB0by9hZXMvYWVzX2N0ci5jCmluZGV4IGYzNjk4MmIuLjdjOWQxNjUgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hZXMvYWVzX2N0ci5jCisrKyBiL2NyeXB0by9hZXMvYWVzX2N0ci5jCkBAIC00OSw5MSArNDksMTMgQEAKICAqCiAgKi8KIAotI2lmbmRlZiBBRVNfREVCVUcKLSMgaWZuZGVmIE5ERUJVRwotIyAgZGVmaW5lIE5ERUJVRwotIyBlbmRpZgotI2VuZGlmCi0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0KICNpbmNsdWRlIDxvcGVuc3NsL2Flcy5oPgotI2luY2x1ZGUgImFlc19sb2NsLmgiCisjaW5jbHVkZSA8b3BlbnNzbC9tb2Rlcy5oPgogCi0vKiBOT1RFOiB0aGUgSVYvY291bnRlciBDVFIgbW9kZSBpcyBiaWctZW5kaWFuLiAgVGhlIHJlc3Qgb2YgdGhlIEFFUyBjb2RlCi0gKiBpcyBlbmRpYW4tbmV1dHJhbC4gKi8KLQotLyogaW5jcmVtZW50IGNvdW50ZXIgKDEyOC1iaXQgaW50KSBieSAxICovCi1zdGF0aWMgdm9pZCBBRVNfY3RyMTI4X2luYyh1bnNpZ25lZCBjaGFyICpjb3VudGVyKSB7Ci0JdW5zaWduZWQgbG9uZyBjOwotCi0JLyogR3JhYiBib3R0b20gZHdvcmQgb2YgY291bnRlciBhbmQgaW5jcmVtZW50ICovCi0JYyA9IEdFVFUzMihjb3VudGVyICsgMTIpOwotCWMrKzsJYyAmPSAweEZGRkZGRkZGOwotCVBVVFUzMihjb3VudGVyICsgMTIsIGMpOwotCi0JLyogaWYgbm8gb3ZlcmZsb3csIHdlJ3JlIGRvbmUgKi8KLQlpZiAoYykKLQkJcmV0dXJuOwotCi0JLyogR3JhYiAxc3QgZHdvcmQgb2YgY291bnRlciBhbmQgaW5jcmVtZW50ICovCi0JYyA9IEdFVFUzMihjb3VudGVyICsgIDgpOwotCWMrKzsJYyAmPSAweEZGRkZGRkZGOwotCVBVVFUzMihjb3VudGVyICsgIDgsIGMpOwotCi0JLyogaWYgbm8gb3ZlcmZsb3csIHdlJ3JlIGRvbmUgKi8KLQlpZiAoYykKLQkJcmV0dXJuOwotCi0JLyogR3JhYiAybmQgZHdvcmQgb2YgY291bnRlciBhbmQgaW5jcmVtZW50ICovCi0JYyA9IEdFVFUzMihjb3VudGVyICsgIDQpOwotCWMrKzsJYyAmPSAweEZGRkZGRkZGOwotCVBVVFUzMihjb3VudGVyICsgIDQsIGMpOwotCi0JLyogaWYgbm8gb3ZlcmZsb3csIHdlJ3JlIGRvbmUgKi8KLQlpZiAoYykKLQkJcmV0dXJuOwotCi0JLyogR3JhYiB0b3AgZHdvcmQgb2YgY291bnRlciBhbmQgaW5jcmVtZW50ICovCi0JYyA9IEdFVFUzMihjb3VudGVyICsgIDApOwotCWMrKzsJYyAmPSAweEZGRkZGRkZGOwotCVBVVFUzMihjb3VudGVyICsgIDAsIGMpOwotfQotCi0vKiBUaGUgaW5wdXQgZW5jcnlwdGVkIGFzIHRob3VnaCAxMjhiaXQgY291bnRlciBtb2RlIGlzIGJlaW5nCi0gKiB1c2VkLiAgVGhlIGV4dHJhIHN0YXRlIGluZm9ybWF0aW9uIHRvIHJlY29yZCBob3cgbXVjaCBvZiB0aGUKLSAqIDEyOGJpdCBibG9jayB3ZSBoYXZlIHVzZWQgaXMgY29udGFpbmVkIGluICpudW0sIGFuZCB0aGUKLSAqIGVuY3J5cHRlZCBjb3VudGVyIGlzIGtlcHQgaW4gZWNvdW50X2J1Zi4gIEJvdGggKm51bSBhbmQKLSAqIGVjb3VudF9idWYgbXVzdCBiZSBpbml0aWFsaXNlZCB3aXRoIHplcm9zIGJlZm9yZSB0aGUgZmlyc3QKLSAqIGNhbGwgdG8gQUVTX2N0cjEyOF9lbmNyeXB0KCkuCi0gKgotICogVGhpcyBhbGdvcml0aG0gYXNzdW1lcyB0aGF0IHRoZSBjb3VudGVyIGlzIGluIHRoZSB4IGxvd2VyIGJpdHMKLSAqIG9mIHRoZSBJViAoaXZlYyksIGFuZCB0aGF0IHRoZSBhcHBsaWNhdGlvbiBoYXMgZnVsbCBjb250cm9sIG92ZXIKLSAqIG92ZXJmbG93IGFuZCB0aGUgcmVzdCBvZiB0aGUgSVYuICBUaGlzIGltcGxlbWVudGF0aW9uIHRha2VzIE5PCi0gKiByZXNwb25zYWJpbGl0eSBmb3IgY2hlY2tpbmcgdGhhdCB0aGUgY291bnRlciBkb2Vzbid0IG92ZXJmbG93Ci0gKiBpbnRvIHRoZSByZXN0IG9mIHRoZSBJViB3aGVuIGluY3JlbWVudGVkLgotICovCiB2b2lkIEFFU19jdHIxMjhfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAotCWNvbnN0IHVuc2lnbmVkIGxvbmcgbGVuZ3RoLCBjb25zdCBBRVNfS0VZICprZXksCi0JdW5zaWduZWQgY2hhciBpdmVjW0FFU19CTE9DS19TSVpFXSwKLQl1bnNpZ25lZCBjaGFyIGVjb3VudF9idWZbQUVTX0JMT0NLX1NJWkVdLAotCXVuc2lnbmVkIGludCAqbnVtKSB7Ci0KLQl1bnNpZ25lZCBpbnQgbjsKLQl1bnNpZ25lZCBsb25nIGw9bGVuZ3RoOwotCi0JYXNzZXJ0KGluICYmIG91dCAmJiBrZXkgJiYgY291bnRlciAmJiBudW0pOwotCWFzc2VydCgqbnVtIDwgQUVTX0JMT0NLX1NJWkUpOwotCi0JbiA9ICpudW07Ci0KLQl3aGlsZSAobC0tKSB7Ci0JCWlmIChuID09IDApIHsKLQkJCUFFU19lbmNyeXB0KGl2ZWMsIGVjb3VudF9idWYsIGtleSk7Ci0gCQkJQUVTX2N0cjEyOF9pbmMoaXZlYyk7Ci0JCX0KLQkJKihvdXQrKykgPSAqKGluKyspIF4gZWNvdW50X2J1ZltuXTsKLQkJbiA9IChuKzEpICUgQUVTX0JMT0NLX1NJWkU7Ci0JfQotCi0JKm51bT1uOworCQkJc2l6ZV90IGxlbmd0aCwgY29uc3QgQUVTX0tFWSAqa2V5LAorCQkJdW5zaWduZWQgY2hhciBpdmVjW0FFU19CTE9DS19TSVpFXSwKKwkJCXVuc2lnbmVkIGNoYXIgZWNvdW50X2J1ZltBRVNfQkxPQ0tfU0laRV0sCisJCQl1bnNpZ25lZCBpbnQgKm51bSkgeworCUNSWVBUT19jdHIxMjhfZW5jcnlwdChpbixvdXQsbGVuZ3RoLGtleSxpdmVjLGVjb3VudF9idWYsbnVtLChibG9jazEyOF9mKUFFU19lbmNyeXB0KTsKIH0KZGlmZiAtLWdpdCBhL2NyeXB0by9hZXMvYWVzX2lnZS5jIGIvY3J5cHRvL2Flcy9hZXNfaWdlLmMKaW5kZXggNDVkNzA5Ni4uYzE2MTM1MSAxMDA2NDQKLS0tIGEvY3J5cHRvL2Flcy9hZXNfaWdlLmMKKysrIGIvY3J5cHRvL2Flcy9hZXNfaWdlLmMKQEAgLTc3LDExICs3NywxMSBAQAogLyogTi5CLiBUaGUgSVYgZm9yIHRoaXMgbW9kZSBpcyBfdHdpY2VfIHRoZSBibG9jayBzaXplICovCiAKIHZvaWQgQUVTX2lnZV9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCi0JCQkJCSBjb25zdCB1bnNpZ25lZCBsb25nIGxlbmd0aCwgY29uc3QgQUVTX0tFWSAqa2V5LAorCQkJCQkgc2l6ZV90IGxlbmd0aCwgY29uc3QgQUVTX0tFWSAqa2V5LAogCQkJCQkgdW5zaWduZWQgY2hhciAqaXZlYywgY29uc3QgaW50IGVuYykKIAl7Ci0JdW5zaWduZWQgbG9uZyBuOwotCXVuc2lnbmVkIGxvbmcgbGVuOworCXNpemVfdCBuOworCXNpemVfdCBsZW4gPSBsZW5ndGg7CiAKIAlPUEVOU1NMX2Fzc2VydChpbiAmJiBvdXQgJiYga2V5ICYmIGl2ZWMpOwogCU9QRU5TU0xfYXNzZXJ0KChBRVNfRU5DUllQVCA9PSBlbmMpfHwoQUVTX0RFQ1JZUFQgPT0gZW5jKSk7CkBAIC0yMTEsMTIgKzIxMSwxMiBAQAogLyogTi5CLiBUaGUgSVYgZm9yIHRoaXMgbW9kZSBpcyBfZm91ciB0aW1lc18gdGhlIGJsb2NrIHNpemUgKi8KIAogdm9pZCBBRVNfYmlfaWdlX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKLQkJCQkJCWNvbnN0IHVuc2lnbmVkIGxvbmcgbGVuZ3RoLCBjb25zdCBBRVNfS0VZICprZXksCisJCQkJCQlzaXplX3QgbGVuZ3RoLCBjb25zdCBBRVNfS0VZICprZXksCiAJCQkJCQljb25zdCBBRVNfS0VZICprZXkyLCBjb25zdCB1bnNpZ25lZCBjaGFyICppdmVjLAogCQkJCQkJY29uc3QgaW50IGVuYykKIAl7Ci0JdW5zaWduZWQgbG9uZyBuOwotCXVuc2lnbmVkIGxvbmcgbGVuID0gbGVuZ3RoOworCXNpemVfdCBuOworCXNpemVfdCBsZW4gPSBsZW5ndGg7CiAJdW5zaWduZWQgY2hhciB0bXBbQUVTX0JMT0NLX1NJWkVdOwogCXVuc2lnbmVkIGNoYXIgdG1wMltBRVNfQkxPQ0tfU0laRV07CiAJdW5zaWduZWQgY2hhciB0bXAzW0FFU19CTE9DS19TSVpFXTsKZGlmZiAtLWdpdCBhL2NyeXB0by9hZXMvYWVzX29mYi5jIGIvY3J5cHRvL2Flcy9hZXNfb2ZiLmMKaW5kZXggZjM1OGJiMy4uNTBiZjBiOCAxMDA2NDQKLS0tIGEvY3J5cHRvL2Flcy9hZXNfb2ZiLmMKKysrIGIvY3J5cHRvL2Flcy9hZXNfb2ZiLmMKQEAgLTEsNiArMSw2IEBACiAvKiBjcnlwdG8vYWVzL2Flc19vZmIuYyAtKi0gbW9kZTpDOyBjLWZpbGUtc3R5bGU6ICJlYXkiIC0qLSAqLwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAyIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDYgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4LDk1ICs0OCwxMyBAQAogICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqCiAgKi8KLS8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KLSAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KLSAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KLSAqIAotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCi0gKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCi0gKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KLSAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKLSAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgotICogCi0gKiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgotICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgotICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgotICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KLSAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgotICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0gKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQotICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKLSAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQotICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCi0gKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKLSAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6Ci0gKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKiAKLSAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCi0gKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKLSAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKLSAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCi0gKi8KLQotI2lmbmRlZiBBRVNfREVCVUcKLSMgaWZuZGVmIE5ERUJVRwotIyAgZGVmaW5lIE5ERUJVRwotIyBlbmRpZgotI2VuZGlmCi0jaW5jbHVkZSA8YXNzZXJ0Lmg+CiAKICNpbmNsdWRlIDxvcGVuc3NsL2Flcy5oPgotI2luY2x1ZGUgImFlc19sb2NsLmgiCisjaW5jbHVkZSA8b3BlbnNzbC9tb2Rlcy5oPgogCi0vKiBUaGUgaW5wdXQgYW5kIG91dHB1dCBlbmNyeXB0ZWQgYXMgdGhvdWdoIDEyOGJpdCBvZmIgbW9kZSBpcyBiZWluZwotICogdXNlZC4gIFRoZSBleHRyYSBzdGF0ZSBpbmZvcm1hdGlvbiB0byByZWNvcmQgaG93IG11Y2ggb2YgdGhlCi0gKiAxMjhiaXQgYmxvY2sgd2UgaGF2ZSB1c2VkIGlzIGNvbnRhaW5lZCBpbiAqbnVtOwotICovCiB2b2lkIEFFU19vZmIxMjhfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAotCWNvbnN0IHVuc2lnbmVkIGxvbmcgbGVuZ3RoLCBjb25zdCBBRVNfS0VZICprZXksCi0JdW5zaWduZWQgY2hhciAqaXZlYywgaW50ICpudW0pIHsKLQotCXVuc2lnbmVkIGludCBuOwotCXVuc2lnbmVkIGxvbmcgbD1sZW5ndGg7Ci0KLQlhc3NlcnQoaW4gJiYgb3V0ICYmIGtleSAmJiBpdmVjICYmIG51bSk7Ci0KLQluID0gKm51bTsKLQotCXdoaWxlIChsLS0pIHsKLQkJaWYgKG4gPT0gMCkgewotCQkJQUVTX2VuY3J5cHQoaXZlYywgaXZlYywga2V5KTsKLQkJfQotCQkqKG91dCsrKSA9ICooaW4rKykgXiBpdmVjW25dOwotCQluID0gKG4rMSkgJSBBRVNfQkxPQ0tfU0laRTsKLQl9Ci0KLQkqbnVtPW47CisJc2l6ZV90IGxlbmd0aCwgY29uc3QgQUVTX0tFWSAqa2V5LAorCXVuc2lnbmVkIGNoYXIgKml2ZWMsIGludCAqbnVtKQoreworCUNSWVBUT19vZmIxMjhfZW5jcnlwdChpbixvdXQsbGVuZ3RoLGtleSxpdmVjLG51bSwoYmxvY2sxMjhfZilBRVNfZW5jcnlwdCk7CiB9CmRpZmYgLS1naXQgYS9jcnlwdG8vYWVzL2Flc194ODZjb3JlLmMgYi9jcnlwdG8vYWVzL2Flc194ODZjb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMyM2UyNgotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9hZXMvYWVzX3g4NmNvcmUuYwpAQCAtMCwwICsxLDEwNjMgQEAKKy8qIGNyeXB0by9hZXMvYWVzX2NvcmUuYyAtKi0gbW9kZTpDOyBjLWZpbGUtc3R5bGU6ICJlYXkiIC0qLSAqLworLyoqCisgKiByaWpuZGFlbC1hbGctZnN0LmMKKyAqCisgKiBAdmVyc2lvbiAzLjAgKERlY2VtYmVyIDIwMDApCisgKgorICogT3B0aW1pc2VkIEFOU0kgQyBjb2RlIGZvciB0aGUgUmlqbmRhZWwgY2lwaGVyIChub3cgQUVTKQorICoKKyAqIEBhdXRob3IgVmluY2VudCBSaWptZW4gPHZpbmNlbnQucmlqbWVuQGVzYXQua3VsZXV2ZW4uYWMuYmU+CisgKiBAYXV0aG9yIEFudG9vbiBCb3NzZWxhZXJzIDxhbnRvb24uYm9zc2VsYWVyc0Blc2F0Lmt1bGV1dmVuLmFjLmJlPgorICogQGF1dGhvciBQYXVsbyBCYXJyZXRvIDxwYXVsby5iYXJyZXRvQHRlcnJhLmNvbS5icj4KKyAqCisgKiBUaGlzIGNvZGUgaXMgaGVyZWJ5IHBsYWNlZCBpbiB0aGUgcHVibGljIGRvbWFpbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1JTICcnQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MKKyAqIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFCisgKiBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLAorICogRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogVGhpcyBpcyBleHBlcmltZW50YWwgeDg2W182NF0gZGVyaXZhdGl2ZS4gSXQgYXNzdW1lcyBsaXR0bGUtZW5kaWFuCisgKiBieXRlIG9yZGVyIGFuZCBleHBlY3RzIENQVSB0byBzdXN0YWluIHVuYWxpZ25lZCBtZW1vcnkgcmVmZXJlbmNlcy4KKyAqIEl0IGlzIHVzZWQgYXMgcGxheWdyb3VuZCBmb3IgY2FjaGUtdGltZSBhdHRhY2sgbWl0aWdhdGlvbnMgYW5kCisgKiBzZXJ2ZXMgYXMgcmVmZXJlbmNlIEMgaW1wbGVtZW50YXRpb24gZm9yIHg4NltfNjRdIGFzc2VtYmxlci4KKyAqCisgKgkJCQkJPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPgorICovCisKKworI2lmbmRlZiBBRVNfREVCVUcKKyMgaWZuZGVmIE5ERUJVRworIyAgZGVmaW5lIE5ERUJVRworIyBlbmRpZgorI2VuZGlmCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2Flcy5oPgorI2luY2x1ZGUgImFlc19sb2NsLmgiCisKKy8qCisgKiBUaGVzZSB0d28gcGFyYW1ldGVycyBjb250cm9sIHdoaWNoIHRhYmxlLCAyNTYtYnl0ZSBvciAyS0IsIGlzCisgKiByZWZlcmVuY2VkIGluIG91dGVyIGFuZCByZXNwZWN0aXZlbHkgaW5uZXIgcm91bmRzLgorICovCisjZGVmaW5lIEFFU19DT01QQUNUX0lOX09VVEVSX1JPVU5EUworI2lmZGVmICBBRVNfQ09NUEFDVF9JTl9PVVRFUl9ST1VORFMKKy8qIEFFU19DT01QQUNUX0lOX09VVEVSX1JPVU5EUyBjb3N0cyB+MzAlIGluIHBlcmZvcm1hbmNlLCB3aGlsZQorICogYWRkaW5nIEFFU19DT01QQUNUX0lOX0lOTkVSX1JPVU5EUyByZWR1Y2VzIGJlbmNobWFyayAqZnVydGhlcioKKyAqIGJ5IGZhY3RvciBvZiB+Mi4gKi8KKyMgdW5kZWYgIEFFU19DT01QQUNUX0lOX0lOTkVSX1JPVU5EUworI2VuZGlmCisKKyNpZiAxCitzdGF0aWMgdm9pZCBwcmVmZXRjaDI1Nihjb25zdCB2b2lkICp0YWJsZSkKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICp0PSh2b2lkICopdGFibGUscmV0OworCXVuc2lnbmVkIGxvbmcgc3VtOworCWludCBpOworCisJLyogMzIgaXMgY29tbW9uIGxlYXN0IGNhY2hlLWxpbmUgc2l6ZSAqLworCWZvciAoc3VtPTAsaT0wO2k8MjU2L3NpemVvZih0WzBdKTtpKz0zMi9zaXplb2YodFswXSkpCXN1bSBePSB0W2ldOworCisJcmV0ID0gc3VtOworfQorI2Vsc2UKKyMgZGVmaW5lIHByZWZldGNoMjU2KHQpCisjZW5kaWYKKworI3VuZGVmIEdFVFUzMgorI2RlZmluZSBHRVRVMzIocCkgKCooKHUzMiopKHApKSkKKworI2lmIChkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfV0lONjQpKSAmJiAhZGVmaW5lZChfX01JTkdXMzJfXykKK3R5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCB1NjQ7CisjZGVmaW5lIFU2NChDKQlDIyNVSTY0CisjZWxpZiBkZWZpbmVkKF9fYXJjaDY0X18pCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdTY0OworI2RlZmluZSBVNjQoQykJQyMjVUwKKyNlbHNlCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1NjQ7CisjZGVmaW5lIFU2NChDKQlDIyNVTEwKKyNlbmRpZgorCisjdW5kZWYgUk9UQVRFCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgfHwgZGVmaW5lZChfX0lDQykKKyMgZGVmaW5lIFJPVEFURShhLG4pCV9scm90bChhLG4pCisjZWxpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXz49MgorIyBpZiBkZWZpbmVkKF9faTM4NikgfHwgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NCkgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQorIyAgIGRlZmluZSBST1RBVEUoYSxuKQkoeyByZWdpc3RlciB1bnNpZ25lZCBpbnQgcmV0OwlcCisJCQkJYXNtICgJCQlcCisJCQkJInJvbGwgJTEsJTAiCQlcCisJCQkJOiAiPXIiKHJldCkJCVwKKwkJCQk6ICJJIihuKSwgIjAiKGEpCVwKKwkJCQk6ICJjYyIpOwkJXAorCQkJICAgcmV0OwkJCQlcCisJCQl9KQorIyBlbmRpZgorI2VuZGlmCisvKgorVGUgW3hdID0gUyBbeF0uWzAyLCAwMSwgMDEsIDAzLCAwMiwgMDEsIDAxLCAwM107CitUZTBbeF0gPSBTIFt4XS5bMDIsIDAxLCAwMSwgMDNdOworVGUxW3hdID0gUyBbeF0uWzAzLCAwMiwgMDEsIDAxXTsKK1RlMlt4XSA9IFMgW3hdLlswMSwgMDMsIDAyLCAwMV07CitUZTNbeF0gPSBTIFt4XS5bMDEsIDAxLCAwMywgMDJdOworKi8KKyNkZWZpbmUgVGUwICh1MzIpKCh1NjQqKSgodTgqKVRlKzApKQorI2RlZmluZSBUZTEgKHUzMikoKHU2NCopKCh1OCopVGUrMykpCisjZGVmaW5lIFRlMiAodTMyKSgodTY0KikoKHU4KilUZSsyKSkKKyNkZWZpbmUgVGUzICh1MzIpKCh1NjQqKSgodTgqKVRlKzEpKQorLyoKK1RkIFt4XSA9IFNpW3hdLlswZSwgMDksIDBkLCAwYiwgMGUsIDA5LCAwZCwgMGJdOworVGQwW3hdID0gU2lbeF0uWzBlLCAwOSwgMGQsIDBiXTsKK1RkMVt4XSA9IFNpW3hdLlswYiwgMGUsIDA5LCAwZF07CitUZDJbeF0gPSBTaVt4XS5bMGQsIDBiLCAwZSwgMDldOworVGQzW3hdID0gU2lbeF0uWzA5LCAwZCwgMGIsIDBlXTsKK1RkNFt4XSA9IFNpW3hdLlswMV07CisqLworI2RlZmluZSBUZDAgKHUzMikoKHU2NCopKCh1OCopVGQrMCkpCisjZGVmaW5lIFRkMSAodTMyKSgodTY0KikoKHU4KilUZCszKSkKKyNkZWZpbmUgVGQyICh1MzIpKCh1NjQqKSgodTgqKVRkKzIpKQorI2RlZmluZSBUZDMgKHUzMikoKHU2NCopKCh1OCopVGQrMSkpCisKK3N0YXRpYyBjb25zdCB1NjQgVGVbMjU2XSA9IHsKKyAgICBVNjQoMHhhNTYzNjNjNmE1NjM2M2M2KSwgVTY0KDB4ODQ3YzdjZjg4NDdjN2NmOCksCisgICAgVTY0KDB4OTk3Nzc3ZWU5OTc3NzdlZSksIFU2NCgweDhkN2I3YmY2OGQ3YjdiZjYpLAorICAgIFU2NCgweDBkZjJmMmZmMGRmMmYyZmYpLCBVNjQoMHhiZDZiNmJkNmJkNmI2YmQ2KSwKKyAgICBVNjQoMHhiMTZmNmZkZWIxNmY2ZmRlKSwgVTY0KDB4NTRjNWM1OTE1NGM1YzU5MSksCisgICAgVTY0KDB4NTAzMDMwNjA1MDMwMzA2MCksIFU2NCgweDAzMDEwMTAyMDMwMTAxMDIpLAorICAgIFU2NCgweGE5Njc2N2NlYTk2NzY3Y2UpLCBVNjQoMHg3ZDJiMmI1NjdkMmIyYjU2KSwKKyAgICBVNjQoMHgxOWZlZmVlNzE5ZmVmZWU3KSwgVTY0KDB4NjJkN2Q3YjU2MmQ3ZDdiNSksCisgICAgVTY0KDB4ZTZhYmFiNGRlNmFiYWI0ZCksIFU2NCgweDlhNzY3NmVjOWE3Njc2ZWMpLAorICAgIFU2NCgweDQ1Y2FjYThmNDVjYWNhOGYpLCBVNjQoMHg5ZDgyODIxZjlkODI4MjFmKSwKKyAgICBVNjQoMHg0MGM5Yzk4OTQwYzljOTg5KSwgVTY0KDB4ODc3ZDdkZmE4NzdkN2RmYSksCisgICAgVTY0KDB4MTVmYWZhZWYxNWZhZmFlZiksIFU2NCgweGViNTk1OWIyZWI1OTU5YjIpLAorICAgIFU2NCgweGM5NDc0NzhlYzk0NzQ3OGUpLCBVNjQoMHgwYmYwZjBmYjBiZjBmMGZiKSwKKyAgICBVNjQoMHhlY2FkYWQ0MWVjYWRhZDQxKSwgVTY0KDB4NjdkNGQ0YjM2N2Q0ZDRiMyksCisgICAgVTY0KDB4ZmRhMmEyNWZmZGEyYTI1ZiksIFU2NCgweGVhYWZhZjQ1ZWFhZmFmNDUpLAorICAgIFU2NCgweGJmOWM5YzIzYmY5YzljMjMpLCBVNjQoMHhmN2E0YTQ1M2Y3YTRhNDUzKSwKKyAgICBVNjQoMHg5NjcyNzJlNDk2NzI3MmU0KSwgVTY0KDB4NWJjMGMwOWI1YmMwYzA5YiksCisgICAgVTY0KDB4YzJiN2I3NzVjMmI3Yjc3NSksIFU2NCgweDFjZmRmZGUxMWNmZGZkZTEpLAorICAgIFU2NCgweGFlOTM5MzNkYWU5MzkzM2QpLCBVNjQoMHg2YTI2MjY0YzZhMjYyNjRjKSwKKyAgICBVNjQoMHg1YTM2MzY2YzVhMzYzNjZjKSwgVTY0KDB4NDEzZjNmN2U0MTNmM2Y3ZSksCisgICAgVTY0KDB4MDJmN2Y3ZjUwMmY3ZjdmNSksIFU2NCgweDRmY2NjYzgzNGZjY2NjODMpLAorICAgIFU2NCgweDVjMzQzNDY4NWMzNDM0NjgpLCBVNjQoMHhmNGE1YTU1MWY0YTVhNTUxKSwKKyAgICBVNjQoMHgzNGU1ZTVkMTM0ZTVlNWQxKSwgVTY0KDB4MDhmMWYxZjkwOGYxZjFmOSksCisgICAgVTY0KDB4OTM3MTcxZTI5MzcxNzFlMiksIFU2NCgweDczZDhkOGFiNzNkOGQ4YWIpLAorICAgIFU2NCgweDUzMzEzMTYyNTMzMTMxNjIpLCBVNjQoMHgzZjE1MTUyYTNmMTUxNTJhKSwKKyAgICBVNjQoMHgwYzA0MDQwODBjMDQwNDA4KSwgVTY0KDB4NTJjN2M3OTU1MmM3Yzc5NSksCisgICAgVTY0KDB4NjUyMzIzNDY2NTIzMjM0NiksIFU2NCgweDVlYzNjMzlkNWVjM2MzOWQpLAorICAgIFU2NCgweDI4MTgxODMwMjgxODE4MzApLCBVNjQoMHhhMTk2OTYzN2ExOTY5NjM3KSwKKyAgICBVNjQoMHgwZjA1MDUwYTBmMDUwNTBhKSwgVTY0KDB4YjU5YTlhMmZiNTlhOWEyZiksCisgICAgVTY0KDB4MDkwNzA3MGUwOTA3MDcwZSksIFU2NCgweDM2MTIxMjI0MzYxMjEyMjQpLAorICAgIFU2NCgweDliODA4MDFiOWI4MDgwMWIpLCBVNjQoMHgzZGUyZTJkZjNkZTJlMmRmKSwKKyAgICBVNjQoMHgyNmViZWJjZDI2ZWJlYmNkKSwgVTY0KDB4NjkyNzI3NGU2OTI3Mjc0ZSksCisgICAgVTY0KDB4Y2RiMmIyN2ZjZGIyYjI3ZiksIFU2NCgweDlmNzU3NWVhOWY3NTc1ZWEpLAorICAgIFU2NCgweDFiMDkwOTEyMWIwOTA5MTIpLCBVNjQoMHg5ZTgzODMxZDllODM4MzFkKSwKKyAgICBVNjQoMHg3NDJjMmM1ODc0MmMyYzU4KSwgVTY0KDB4MmUxYTFhMzQyZTFhMWEzNCksCisgICAgVTY0KDB4MmQxYjFiMzYyZDFiMWIzNiksIFU2NCgweGIyNmU2ZWRjYjI2ZTZlZGMpLAorICAgIFU2NCgweGVlNWE1YWI0ZWU1YTVhYjQpLCBVNjQoMHhmYmEwYTA1YmZiYTBhMDViKSwKKyAgICBVNjQoMHhmNjUyNTJhNGY2NTI1MmE0KSwgVTY0KDB4NGQzYjNiNzY0ZDNiM2I3NiksCisgICAgVTY0KDB4NjFkNmQ2Yjc2MWQ2ZDZiNyksIFU2NCgweGNlYjNiMzdkY2ViM2IzN2QpLAorICAgIFU2NCgweDdiMjkyOTUyN2IyOTI5NTIpLCBVNjQoMHgzZWUzZTNkZDNlZTNlM2RkKSwKKyAgICBVNjQoMHg3MTJmMmY1ZTcxMmYyZjVlKSwgVTY0KDB4OTc4NDg0MTM5Nzg0ODQxMyksCisgICAgVTY0KDB4ZjU1MzUzYTZmNTUzNTNhNiksIFU2NCgweDY4ZDFkMWI5NjhkMWQxYjkpLAorICAgIFU2NCgweDAwMDAwMDAwMDAwMDAwMDApLCBVNjQoMHgyY2VkZWRjMTJjZWRlZGMxKSwKKyAgICBVNjQoMHg2MDIwMjA0MDYwMjAyMDQwKSwgVTY0KDB4MWZmY2ZjZTMxZmZjZmNlMyksCisgICAgVTY0KDB4YzhiMWIxNzljOGIxYjE3OSksIFU2NCgweGVkNWI1YmI2ZWQ1YjViYjYpLAorICAgIFU2NCgweGJlNmE2YWQ0YmU2YTZhZDQpLCBVNjQoMHg0NmNiY2I4ZDQ2Y2JjYjhkKSwKKyAgICBVNjQoMHhkOWJlYmU2N2Q5YmViZTY3KSwgVTY0KDB4NGIzOTM5NzI0YjM5Mzk3MiksCisgICAgVTY0KDB4ZGU0YTRhOTRkZTRhNGE5NCksIFU2NCgweGQ0NGM0Yzk4ZDQ0YzRjOTgpLAorICAgIFU2NCgweGU4NTg1OGIwZTg1ODU4YjApLCBVNjQoMHg0YWNmY2Y4NTRhY2ZjZjg1KSwKKyAgICBVNjQoMHg2YmQwZDBiYjZiZDBkMGJiKSwgVTY0KDB4MmFlZmVmYzUyYWVmZWZjNSksCisgICAgVTY0KDB4ZTVhYWFhNGZlNWFhYWE0ZiksIFU2NCgweDE2ZmJmYmVkMTZmYmZiZWQpLAorICAgIFU2NCgweGM1NDM0Mzg2YzU0MzQzODYpLCBVNjQoMHhkNzRkNGQ5YWQ3NGQ0ZDlhKSwKKyAgICBVNjQoMHg1NTMzMzM2NjU1MzMzMzY2KSwgVTY0KDB4OTQ4NTg1MTE5NDg1ODUxMSksCisgICAgVTY0KDB4Y2Y0NTQ1OGFjZjQ1NDU4YSksIFU2NCgweDEwZjlmOWU5MTBmOWY5ZTkpLAorICAgIFU2NCgweDA2MDIwMjA0MDYwMjAyMDQpLCBVNjQoMHg4MTdmN2ZmZTgxN2Y3ZmZlKSwKKyAgICBVNjQoMHhmMDUwNTBhMGYwNTA1MGEwKSwgVTY0KDB4NDQzYzNjNzg0NDNjM2M3OCksCisgICAgVTY0KDB4YmE5ZjlmMjViYTlmOWYyNSksIFU2NCgweGUzYThhODRiZTNhOGE4NGIpLAorICAgIFU2NCgweGYzNTE1MWEyZjM1MTUxYTIpLCBVNjQoMHhmZWEzYTM1ZGZlYTNhMzVkKSwKKyAgICBVNjQoMHhjMDQwNDA4MGMwNDA0MDgwKSwgVTY0KDB4OGE4ZjhmMDU4YThmOGYwNSksCisgICAgVTY0KDB4YWQ5MjkyM2ZhZDkyOTIzZiksIFU2NCgweGJjOWQ5ZDIxYmM5ZDlkMjEpLAorICAgIFU2NCgweDQ4MzgzODcwNDgzODM4NzApLCBVNjQoMHgwNGY1ZjVmMTA0ZjVmNWYxKSwKKyAgICBVNjQoMHhkZmJjYmM2M2RmYmNiYzYzKSwgVTY0KDB4YzFiNmI2NzdjMWI2YjY3NyksCisgICAgVTY0KDB4NzVkYWRhYWY3NWRhZGFhZiksIFU2NCgweDYzMjEyMTQyNjMyMTIxNDIpLAorICAgIFU2NCgweDMwMTAxMDIwMzAxMDEwMjApLCBVNjQoMHgxYWZmZmZlNTFhZmZmZmU1KSwKKyAgICBVNjQoMHgwZWYzZjNmZDBlZjNmM2ZkKSwgVTY0KDB4NmRkMmQyYmY2ZGQyZDJiZiksCisgICAgVTY0KDB4NGNjZGNkODE0Y2NkY2Q4MSksIFU2NCgweDE0MGMwYzE4MTQwYzBjMTgpLAorICAgIFU2NCgweDM1MTMxMzI2MzUxMzEzMjYpLCBVNjQoMHgyZmVjZWNjMzJmZWNlY2MzKSwKKyAgICBVNjQoMHhlMTVmNWZiZWUxNWY1ZmJlKSwgVTY0KDB4YTI5Nzk3MzVhMjk3OTczNSksCisgICAgVTY0KDB4Y2M0NDQ0ODhjYzQ0NDQ4OCksIFU2NCgweDM5MTcxNzJlMzkxNzE3MmUpLAorICAgIFU2NCgweDU3YzRjNDkzNTdjNGM0OTMpLCBVNjQoMHhmMmE3YTc1NWYyYTdhNzU1KSwKKyAgICBVNjQoMHg4MjdlN2VmYzgyN2U3ZWZjKSwgVTY0KDB4NDczZDNkN2E0NzNkM2Q3YSksCisgICAgVTY0KDB4YWM2NDY0YzhhYzY0NjRjOCksIFU2NCgweGU3NWQ1ZGJhZTc1ZDVkYmEpLAorICAgIFU2NCgweDJiMTkxOTMyMmIxOTE5MzIpLCBVNjQoMHg5NTczNzNlNjk1NzM3M2U2KSwKKyAgICBVNjQoMHhhMDYwNjBjMGEwNjA2MGMwKSwgVTY0KDB4OTg4MTgxMTk5ODgxODExOSksCisgICAgVTY0KDB4ZDE0ZjRmOWVkMTRmNGY5ZSksIFU2NCgweDdmZGNkY2EzN2ZkY2RjYTMpLAorICAgIFU2NCgweDY2MjIyMjQ0NjYyMjIyNDQpLCBVNjQoMHg3ZTJhMmE1NDdlMmEyYTU0KSwKKyAgICBVNjQoMHhhYjkwOTAzYmFiOTA5MDNiKSwgVTY0KDB4ODM4ODg4MGI4Mzg4ODgwYiksCisgICAgVTY0KDB4Y2E0NjQ2OGNjYTQ2NDY4YyksIFU2NCgweDI5ZWVlZWM3MjllZWVlYzcpLAorICAgIFU2NCgweGQzYjhiODZiZDNiOGI4NmIpLCBVNjQoMHgzYzE0MTQyODNjMTQxNDI4KSwKKyAgICBVNjQoMHg3OWRlZGVhNzc5ZGVkZWE3KSwgVTY0KDB4ZTI1ZTVlYmNlMjVlNWViYyksCisgICAgVTY0KDB4MWQwYjBiMTYxZDBiMGIxNiksIFU2NCgweDc2ZGJkYmFkNzZkYmRiYWQpLAorICAgIFU2NCgweDNiZTBlMGRiM2JlMGUwZGIpLCBVNjQoMHg1NjMyMzI2NDU2MzIzMjY0KSwKKyAgICBVNjQoMHg0ZTNhM2E3NDRlM2EzYTc0KSwgVTY0KDB4MWUwYTBhMTQxZTBhMGExNCksCisgICAgVTY0KDB4ZGI0OTQ5OTJkYjQ5NDk5MiksIFU2NCgweDBhMDYwNjBjMGEwNjA2MGMpLAorICAgIFU2NCgweDZjMjQyNDQ4NmMyNDI0NDgpLCBVNjQoMHhlNDVjNWNiOGU0NWM1Y2I4KSwKKyAgICBVNjQoMHg1ZGMyYzI5ZjVkYzJjMjlmKSwgVTY0KDB4NmVkM2QzYmQ2ZWQzZDNiZCksCisgICAgVTY0KDB4ZWZhY2FjNDNlZmFjYWM0MyksIFU2NCgweGE2NjI2MmM0YTY2MjYyYzQpLAorICAgIFU2NCgweGE4OTE5MTM5YTg5MTkxMzkpLCBVNjQoMHhhNDk1OTUzMWE0OTU5NTMxKSwKKyAgICBVNjQoMHgzN2U0ZTRkMzM3ZTRlNGQzKSwgVTY0KDB4OGI3OTc5ZjI4Yjc5NzlmMiksCisgICAgVTY0KDB4MzJlN2U3ZDUzMmU3ZTdkNSksIFU2NCgweDQzYzhjODhiNDNjOGM4OGIpLAorICAgIFU2NCgweDU5MzczNzZlNTkzNzM3NmUpLCBVNjQoMHhiNzZkNmRkYWI3NmQ2ZGRhKSwKKyAgICBVNjQoMHg4YzhkOGQwMThjOGQ4ZDAxKSwgVTY0KDB4NjRkNWQ1YjE2NGQ1ZDViMSksCisgICAgVTY0KDB4ZDI0ZTRlOWNkMjRlNGU5YyksIFU2NCgweGUwYTlhOTQ5ZTBhOWE5NDkpLAorICAgIFU2NCgweGI0NmM2Y2Q4YjQ2YzZjZDgpLCBVNjQoMHhmYTU2NTZhY2ZhNTY1NmFjKSwKKyAgICBVNjQoMHgwN2Y0ZjRmMzA3ZjRmNGYzKSwgVTY0KDB4MjVlYWVhY2YyNWVhZWFjZiksCisgICAgVTY0KDB4YWY2NTY1Y2FhZjY1NjVjYSksIFU2NCgweDhlN2E3YWY0OGU3YTdhZjQpLAorICAgIFU2NCgweGU5YWVhZTQ3ZTlhZWFlNDcpLCBVNjQoMHgxODA4MDgxMDE4MDgwODEwKSwKKyAgICBVNjQoMHhkNWJhYmE2ZmQ1YmFiYTZmKSwgVTY0KDB4ODg3ODc4ZjA4ODc4NzhmMCksCisgICAgVTY0KDB4NmYyNTI1NGE2ZjI1MjU0YSksIFU2NCgweDcyMmUyZTVjNzIyZTJlNWMpLAorICAgIFU2NCgweDI0MWMxYzM4MjQxYzFjMzgpLCBVNjQoMHhmMWE2YTY1N2YxYTZhNjU3KSwKKyAgICBVNjQoMHhjN2I0YjQ3M2M3YjRiNDczKSwgVTY0KDB4NTFjNmM2OTc1MWM2YzY5NyksCisgICAgVTY0KDB4MjNlOGU4Y2IyM2U4ZThjYiksIFU2NCgweDdjZGRkZGExN2NkZGRkYTEpLAorICAgIFU2NCgweDljNzQ3NGU4OWM3NDc0ZTgpLCBVNjQoMHgyMTFmMWYzZTIxMWYxZjNlKSwKKyAgICBVNjQoMHhkZDRiNGI5NmRkNGI0Yjk2KSwgVTY0KDB4ZGNiZGJkNjFkY2JkYmQ2MSksCisgICAgVTY0KDB4ODY4YjhiMGQ4NjhiOGIwZCksIFU2NCgweDg1OGE4YTBmODU4YThhMGYpLAorICAgIFU2NCgweDkwNzA3MGUwOTA3MDcwZTApLCBVNjQoMHg0MjNlM2U3YzQyM2UzZTdjKSwKKyAgICBVNjQoMHhjNGI1YjU3MWM0YjViNTcxKSwgVTY0KDB4YWE2NjY2Y2NhYTY2NjZjYyksCisgICAgVTY0KDB4ZDg0ODQ4OTBkODQ4NDg5MCksIFU2NCgweDA1MDMwMzA2MDUwMzAzMDYpLAorICAgIFU2NCgweDAxZjZmNmY3MDFmNmY2ZjcpLCBVNjQoMHgxMjBlMGUxYzEyMGUwZTFjKSwKKyAgICBVNjQoMHhhMzYxNjFjMmEzNjE2MWMyKSwgVTY0KDB4NWYzNTM1NmE1ZjM1MzU2YSksCisgICAgVTY0KDB4Zjk1NzU3YWVmOTU3NTdhZSksIFU2NCgweGQwYjliOTY5ZDBiOWI5NjkpLAorICAgIFU2NCgweDkxODY4NjE3OTE4Njg2MTcpLCBVNjQoMHg1OGMxYzE5OTU4YzFjMTk5KSwKKyAgICBVNjQoMHgyNzFkMWQzYTI3MWQxZDNhKSwgVTY0KDB4Yjk5ZTllMjdiOTllOWUyNyksCisgICAgVTY0KDB4MzhlMWUxZDkzOGUxZTFkOSksIFU2NCgweDEzZjhmOGViMTNmOGY4ZWIpLAorICAgIFU2NCgweGIzOTg5ODJiYjM5ODk4MmIpLCBVNjQoMHgzMzExMTEyMjMzMTExMTIyKSwKKyAgICBVNjQoMHhiYjY5NjlkMmJiNjk2OWQyKSwgVTY0KDB4NzBkOWQ5YTk3MGQ5ZDlhOSksCisgICAgVTY0KDB4ODk4ZThlMDc4OThlOGUwNyksIFU2NCgweGE3OTQ5NDMzYTc5NDk0MzMpLAorICAgIFU2NCgweGI2OWI5YjJkYjY5YjliMmQpLCBVNjQoMHgyMjFlMWUzYzIyMWUxZTNjKSwKKyAgICBVNjQoMHg5Mjg3ODcxNTkyODc4NzE1KSwgVTY0KDB4MjBlOWU5YzkyMGU5ZTljOSksCisgICAgVTY0KDB4NDljZWNlODc0OWNlY2U4NyksIFU2NCgweGZmNTU1NWFhZmY1NTU1YWEpLAorICAgIFU2NCgweDc4MjgyODUwNzgyODI4NTApLCBVNjQoMHg3YWRmZGZhNTdhZGZkZmE1KSwKKyAgICBVNjQoMHg4ZjhjOGMwMzhmOGM4YzAzKSwgVTY0KDB4ZjhhMWExNTlmOGExYTE1OSksCisgICAgVTY0KDB4ODA4OTg5MDk4MDg5ODkwOSksIFU2NCgweDE3MGQwZDFhMTcwZDBkMWEpLAorICAgIFU2NCgweGRhYmZiZjY1ZGFiZmJmNjUpLCBVNjQoMHgzMWU2ZTZkNzMxZTZlNmQ3KSwKKyAgICBVNjQoMHhjNjQyNDI4NGM2NDI0Mjg0KSwgVTY0KDB4Yjg2ODY4ZDBiODY4NjhkMCksCisgICAgVTY0KDB4YzM0MTQxODJjMzQxNDE4MiksIFU2NCgweGIwOTk5OTI5YjA5OTk5MjkpLAorICAgIFU2NCgweDc3MmQyZDVhNzcyZDJkNWEpLCBVNjQoMHgxMTBmMGYxZTExMGYwZjFlKSwKKyAgICBVNjQoMHhjYmIwYjA3YmNiYjBiMDdiKSwgVTY0KDB4ZmM1NDU0YThmYzU0NTRhOCksCisgICAgVTY0KDB4ZDZiYmJiNmRkNmJiYmI2ZCksIFU2NCgweDNhMTYxNjJjM2ExNjE2MmMpCit9OworCitzdGF0aWMgY29uc3QgdTggVGU0WzI1Nl0gPSB7CisgICAgMHg2M1UsIDB4N2NVLCAweDc3VSwgMHg3YlUsIDB4ZjJVLCAweDZiVSwgMHg2ZlUsIDB4YzVVLAorICAgIDB4MzBVLCAweDAxVSwgMHg2N1UsIDB4MmJVLCAweGZlVSwgMHhkN1UsIDB4YWJVLCAweDc2VSwKKyAgICAweGNhVSwgMHg4MlUsIDB4YzlVLCAweDdkVSwgMHhmYVUsIDB4NTlVLCAweDQ3VSwgMHhmMFUsCisgICAgMHhhZFUsIDB4ZDRVLCAweGEyVSwgMHhhZlUsIDB4OWNVLCAweGE0VSwgMHg3MlUsIDB4YzBVLAorICAgIDB4YjdVLCAweGZkVSwgMHg5M1UsIDB4MjZVLCAweDM2VSwgMHgzZlUsIDB4ZjdVLCAweGNjVSwKKyAgICAweDM0VSwgMHhhNVUsIDB4ZTVVLCAweGYxVSwgMHg3MVUsIDB4ZDhVLCAweDMxVSwgMHgxNVUsCisgICAgMHgwNFUsIDB4YzdVLCAweDIzVSwgMHhjM1UsIDB4MThVLCAweDk2VSwgMHgwNVUsIDB4OWFVLAorICAgIDB4MDdVLCAweDEyVSwgMHg4MFUsIDB4ZTJVLCAweGViVSwgMHgyN1UsIDB4YjJVLCAweDc1VSwKKyAgICAweDA5VSwgMHg4M1UsIDB4MmNVLCAweDFhVSwgMHgxYlUsIDB4NmVVLCAweDVhVSwgMHhhMFUsCisgICAgMHg1MlUsIDB4M2JVLCAweGQ2VSwgMHhiM1UsIDB4MjlVLCAweGUzVSwgMHgyZlUsIDB4ODRVLAorICAgIDB4NTNVLCAweGQxVSwgMHgwMFUsIDB4ZWRVLCAweDIwVSwgMHhmY1UsIDB4YjFVLCAweDViVSwKKyAgICAweDZhVSwgMHhjYlUsIDB4YmVVLCAweDM5VSwgMHg0YVUsIDB4NGNVLCAweDU4VSwgMHhjZlUsCisgICAgMHhkMFUsIDB4ZWZVLCAweGFhVSwgMHhmYlUsIDB4NDNVLCAweDRkVSwgMHgzM1UsIDB4ODVVLAorICAgIDB4NDVVLCAweGY5VSwgMHgwMlUsIDB4N2ZVLCAweDUwVSwgMHgzY1UsIDB4OWZVLCAweGE4VSwKKyAgICAweDUxVSwgMHhhM1UsIDB4NDBVLCAweDhmVSwgMHg5MlUsIDB4OWRVLCAweDM4VSwgMHhmNVUsCisgICAgMHhiY1UsIDB4YjZVLCAweGRhVSwgMHgyMVUsIDB4MTBVLCAweGZmVSwgMHhmM1UsIDB4ZDJVLAorICAgIDB4Y2RVLCAweDBjVSwgMHgxM1UsIDB4ZWNVLCAweDVmVSwgMHg5N1UsIDB4NDRVLCAweDE3VSwKKyAgICAweGM0VSwgMHhhN1UsIDB4N2VVLCAweDNkVSwgMHg2NFUsIDB4NWRVLCAweDE5VSwgMHg3M1UsCisgICAgMHg2MFUsIDB4ODFVLCAweDRmVSwgMHhkY1UsIDB4MjJVLCAweDJhVSwgMHg5MFUsIDB4ODhVLAorICAgIDB4NDZVLCAweGVlVSwgMHhiOFUsIDB4MTRVLCAweGRlVSwgMHg1ZVUsIDB4MGJVLCAweGRiVSwKKyAgICAweGUwVSwgMHgzMlUsIDB4M2FVLCAweDBhVSwgMHg0OVUsIDB4MDZVLCAweDI0VSwgMHg1Y1UsCisgICAgMHhjMlUsIDB4ZDNVLCAweGFjVSwgMHg2MlUsIDB4OTFVLCAweDk1VSwgMHhlNFUsIDB4NzlVLAorICAgIDB4ZTdVLCAweGM4VSwgMHgzN1UsIDB4NmRVLCAweDhkVSwgMHhkNVUsIDB4NGVVLCAweGE5VSwKKyAgICAweDZjVSwgMHg1NlUsIDB4ZjRVLCAweGVhVSwgMHg2NVUsIDB4N2FVLCAweGFlVSwgMHgwOFUsCisgICAgMHhiYVUsIDB4NzhVLCAweDI1VSwgMHgyZVUsIDB4MWNVLCAweGE2VSwgMHhiNFUsIDB4YzZVLAorICAgIDB4ZThVLCAweGRkVSwgMHg3NFUsIDB4MWZVLCAweDRiVSwgMHhiZFUsIDB4OGJVLCAweDhhVSwKKyAgICAweDcwVSwgMHgzZVUsIDB4YjVVLCAweDY2VSwgMHg0OFUsIDB4MDNVLCAweGY2VSwgMHgwZVUsCisgICAgMHg2MVUsIDB4MzVVLCAweDU3VSwgMHhiOVUsIDB4ODZVLCAweGMxVSwgMHgxZFUsIDB4OWVVLAorICAgIDB4ZTFVLCAweGY4VSwgMHg5OFUsIDB4MTFVLCAweDY5VSwgMHhkOVUsIDB4OGVVLCAweDk0VSwKKyAgICAweDliVSwgMHgxZVUsIDB4ODdVLCAweGU5VSwgMHhjZVUsIDB4NTVVLCAweDI4VSwgMHhkZlUsCisgICAgMHg4Y1UsIDB4YTFVLCAweDg5VSwgMHgwZFUsIDB4YmZVLCAweGU2VSwgMHg0MlUsIDB4NjhVLAorICAgIDB4NDFVLCAweDk5VSwgMHgyZFUsIDB4MGZVLCAweGIwVSwgMHg1NFUsIDB4YmJVLCAweDE2VQorfTsKKworc3RhdGljIGNvbnN0IHU2NCBUZFsyNTZdID0geworICAgIFU2NCgweDUwYTdmNDUxNTBhN2Y0NTEpLCBVNjQoMHg1MzY1NDE3ZTUzNjU0MTdlKSwKKyAgICBVNjQoMHhjM2E0MTcxYWMzYTQxNzFhKSwgVTY0KDB4OTY1ZTI3M2E5NjVlMjczYSksCisgICAgVTY0KDB4Y2I2YmFiM2JjYjZiYWIzYiksIFU2NCgweGYxNDU5ZDFmZjE0NTlkMWYpLAorICAgIFU2NCgweGFiNThmYWFjYWI1OGZhYWMpLCBVNjQoMHg5MzAzZTM0YjkzMDNlMzRiKSwKKyAgICBVNjQoMHg1NWZhMzAyMDU1ZmEzMDIwKSwgVTY0KDB4ZjY2ZDc2YWRmNjZkNzZhZCksCisgICAgVTY0KDB4OTE3NmNjODg5MTc2Y2M4OCksIFU2NCgweDI1NGMwMmY1MjU0YzAyZjUpLAorICAgIFU2NCgweGZjZDdlNTRmZmNkN2U1NGYpLCBVNjQoMHhkN2NiMmFjNWQ3Y2IyYWM1KSwKKyAgICBVNjQoMHg4MDQ0MzUyNjgwNDQzNTI2KSwgVTY0KDB4OGZhMzYyYjU4ZmEzNjJiNSksCisgICAgVTY0KDB4NDk1YWIxZGU0OTVhYjFkZSksIFU2NCgweDY3MWJiYTI1NjcxYmJhMjUpLAorICAgIFU2NCgweDk4MGVlYTQ1OTgwZWVhNDUpLCBVNjQoMHhlMWMwZmU1ZGUxYzBmZTVkKSwKKyAgICBVNjQoMHgwMjc1MmZjMzAyNzUyZmMzKSwgVTY0KDB4MTJmMDRjODExMmYwNGM4MSksCisgICAgVTY0KDB4YTM5NzQ2OGRhMzk3NDY4ZCksIFU2NCgweGM2ZjlkMzZiYzZmOWQzNmIpLAorICAgIFU2NCgweGU3NWY4ZjAzZTc1ZjhmMDMpLCBVNjQoMHg5NTljOTIxNTk1OWM5MjE1KSwKKyAgICBVNjQoMHhlYjdhNmRiZmViN2E2ZGJmKSwgVTY0KDB4ZGE1OTUyOTVkYTU5NTI5NSksCisgICAgVTY0KDB4MmQ4M2JlZDQyZDgzYmVkNCksIFU2NCgweGQzMjE3NDU4ZDMyMTc0NTgpLAorICAgIFU2NCgweDI5NjllMDQ5Mjk2OWUwNDkpLCBVNjQoMHg0NGM4Yzk4ZTQ0YzhjOThlKSwKKyAgICBVNjQoMHg2YTg5YzI3NTZhODljMjc1KSwgVTY0KDB4Nzg3OThlZjQ3ODc5OGVmNCksCisgICAgVTY0KDB4NmIzZTU4OTk2YjNlNTg5OSksIFU2NCgweGRkNzFiOTI3ZGQ3MWI5MjcpLAorICAgIFU2NCgweGI2NGZlMWJlYjY0ZmUxYmUpLCBVNjQoMHgxN2FkODhmMDE3YWQ4OGYwKSwKKyAgICBVNjQoMHg2NmFjMjBjOTY2YWMyMGM5KSwgVTY0KDB4YjQzYWNlN2RiNDNhY2U3ZCksCisgICAgVTY0KDB4MTg0YWRmNjMxODRhZGY2MyksIFU2NCgweDgyMzExYWU1ODIzMTFhZTUpLAorICAgIFU2NCgweDYwMzM1MTk3NjAzMzUxOTcpLCBVNjQoMHg0NTdmNTM2MjQ1N2Y1MzYyKSwKKyAgICBVNjQoMHhlMDc3NjRiMWUwNzc2NGIxKSwgVTY0KDB4ODRhZTZiYmI4NGFlNmJiYiksCisgICAgVTY0KDB4MWNhMDgxZmUxY2EwODFmZSksIFU2NCgweDk0MmIwOGY5OTQyYjA4ZjkpLAorICAgIFU2NCgweDU4Njg0ODcwNTg2ODQ4NzApLCBVNjQoMHgxOWZkNDU4ZjE5ZmQ0NThmKSwKKyAgICBVNjQoMHg4NzZjZGU5NDg3NmNkZTk0KSwgVTY0KDB4YjdmODdiNTJiN2Y4N2I1MiksCisgICAgVTY0KDB4MjNkMzczYWIyM2QzNzNhYiksIFU2NCgweGUyMDI0YjcyZTIwMjRiNzIpLAorICAgIFU2NCgweDU3OGYxZmUzNTc4ZjFmZTMpLCBVNjQoMHgyYWFiNTU2NjJhYWI1NTY2KSwKKyAgICBVNjQoMHgwNzI4ZWJiMjA3MjhlYmIyKSwgVTY0KDB4MDNjMmI1MmYwM2MyYjUyZiksCisgICAgVTY0KDB4OWE3YmM1ODY5YTdiYzU4NiksIFU2NCgweGE1MDgzN2QzYTUwODM3ZDMpLAorICAgIFU2NCgweGYyODcyODMwZjI4NzI4MzApLCBVNjQoMHhiMmE1YmYyM2IyYTViZjIzKSwKKyAgICBVNjQoMHhiYTZhMDMwMmJhNmEwMzAyKSwgVTY0KDB4NWM4MjE2ZWQ1YzgyMTZlZCksCisgICAgVTY0KDB4MmIxY2NmOGEyYjFjY2Y4YSksIFU2NCgweDkyYjQ3OWE3OTJiNDc5YTcpLAorICAgIFU2NCgweGYwZjIwN2YzZjBmMjA3ZjMpLCBVNjQoMHhhMWUyNjk0ZWExZTI2OTRlKSwKKyAgICBVNjQoMHhjZGY0ZGE2NWNkZjRkYTY1KSwgVTY0KDB4ZDViZTA1MDZkNWJlMDUwNiksCisgICAgVTY0KDB4MWY2MjM0ZDExZjYyMzRkMSksIFU2NCgweDhhZmVhNmM0OGFmZWE2YzQpLAorICAgIFU2NCgweDlkNTMyZTM0OWQ1MzJlMzQpLCBVNjQoMHhhMDU1ZjNhMmEwNTVmM2EyKSwKKyAgICBVNjQoMHgzMmUxOGEwNTMyZTE4YTA1KSwgVTY0KDB4NzVlYmY2YTQ3NWViZjZhNCksCisgICAgVTY0KDB4MzllYzgzMGIzOWVjODMwYiksIFU2NCgweGFhZWY2MDQwYWFlZjYwNDApLAorICAgIFU2NCgweDA2OWY3MTVlMDY5ZjcxNWUpLCBVNjQoMHg1MTEwNmViZDUxMTA2ZWJkKSwKKyAgICBVNjQoMHhmOThhMjEzZWY5OGEyMTNlKSwgVTY0KDB4M2QwNmRkOTYzZDA2ZGQ5NiksCisgICAgVTY0KDB4YWUwNTNlZGRhZTA1M2VkZCksIFU2NCgweDQ2YmRlNjRkNDZiZGU2NGQpLAorICAgIFU2NCgweGI1OGQ1NDkxYjU4ZDU0OTEpLCBVNjQoMHgwNTVkYzQ3MTA1NWRjNDcxKSwKKyAgICBVNjQoMHg2ZmQ0MDYwNDZmZDQwNjA0KSwgVTY0KDB4ZmYxNTUwNjBmZjE1NTA2MCksCisgICAgVTY0KDB4MjRmYjk4MTkyNGZiOTgxOSksIFU2NCgweDk3ZTliZGQ2OTdlOWJkZDYpLAorICAgIFU2NCgweGNjNDM0MDg5Y2M0MzQwODkpLCBVNjQoMHg3NzllZDk2Nzc3OWVkOTY3KSwKKyAgICBVNjQoMHhiZDQyZThiMGJkNDJlOGIwKSwgVTY0KDB4ODg4Yjg5MDc4ODhiODkwNyksCisgICAgVTY0KDB4Mzg1YjE5ZTczODViMTllNyksIFU2NCgweGRiZWVjODc5ZGJlZWM4NzkpLAorICAgIFU2NCgweDQ3MGE3Y2ExNDcwYTdjYTEpLCBVNjQoMHhlOTBmNDI3Y2U5MGY0MjdjKSwKKyAgICBVNjQoMHhjOTFlODRmOGM5MWU4NGY4KSwgVTY0KDB4MDAwMDAwMDAwMDAwMDAwMCksCisgICAgVTY0KDB4ODM4NjgwMDk4Mzg2ODAwOSksIFU2NCgweDQ4ZWQyYjMyNDhlZDJiMzIpLAorICAgIFU2NCgweGFjNzAxMTFlYWM3MDExMWUpLCBVNjQoMHg0ZTcyNWE2YzRlNzI1YTZjKSwKKyAgICBVNjQoMHhmYmZmMGVmZGZiZmYwZWZkKSwgVTY0KDB4NTYzODg1MGY1NjM4ODUwZiksCisgICAgVTY0KDB4MWVkNWFlM2QxZWQ1YWUzZCksIFU2NCgweDI3MzkyZDM2MjczOTJkMzYpLAorICAgIFU2NCgweDY0ZDkwZjBhNjRkOTBmMGEpLCBVNjQoMHgyMWE2NWM2ODIxYTY1YzY4KSwKKyAgICBVNjQoMHhkMTU0NWI5YmQxNTQ1YjliKSwgVTY0KDB4M2EyZTM2MjQzYTJlMzYyNCksCisgICAgVTY0KDB4YjE2NzBhMGNiMTY3MGEwYyksIFU2NCgweDBmZTc1NzkzMGZlNzU3OTMpLAorICAgIFU2NCgweGQyOTZlZWI0ZDI5NmVlYjQpLCBVNjQoMHg5ZTkxOWIxYjllOTE5YjFiKSwKKyAgICBVNjQoMHg0ZmM1YzA4MDRmYzVjMDgwKSwgVTY0KDB4YTIyMGRjNjFhMjIwZGM2MSksCisgICAgVTY0KDB4Njk0Yjc3NWE2OTRiNzc1YSksIFU2NCgweDE2MWExMjFjMTYxYTEyMWMpLAorICAgIFU2NCgweDBhYmE5M2UyMGFiYTkzZTIpLCBVNjQoMHhlNTJhYTBjMGU1MmFhMGMwKSwKKyAgICBVNjQoMHg0M2UwMjIzYzQzZTAyMjNjKSwgVTY0KDB4MWQxNzFiMTIxZDE3MWIxMiksCisgICAgVTY0KDB4MGIwZDA5MGUwYjBkMDkwZSksIFU2NCgweGFkYzc4YmYyYWRjNzhiZjIpLAorICAgIFU2NCgweGI5YThiNjJkYjlhOGI2MmQpLCBVNjQoMHhjOGE5MWUxNGM4YTkxZTE0KSwKKyAgICBVNjQoMHg4NTE5ZjE1Nzg1MTlmMTU3KSwgVTY0KDB4NGMwNzc1YWY0YzA3NzVhZiksCisgICAgVTY0KDB4YmJkZDk5ZWViYmRkOTllZSksIFU2NCgweGZkNjA3ZmEzZmQ2MDdmYTMpLAorICAgIFU2NCgweDlmMjYwMWY3OWYyNjAxZjcpLCBVNjQoMHhiY2Y1NzI1Y2JjZjU3MjVjKSwKKyAgICBVNjQoMHhjNTNiNjY0NGM1M2I2NjQ0KSwgVTY0KDB4MzQ3ZWZiNWIzNDdlZmI1YiksCisgICAgVTY0KDB4NzYyOTQzOGI3NjI5NDM4YiksIFU2NCgweGRjYzYyM2NiZGNjNjIzY2IpLAorICAgIFU2NCgweDY4ZmNlZGI2NjhmY2VkYjYpLCBVNjQoMHg2M2YxZTRiODYzZjFlNGI4KSwKKyAgICBVNjQoMHhjYWRjMzFkN2NhZGMzMWQ3KSwgVTY0KDB4MTA4NTYzNDIxMDg1NjM0MiksCisgICAgVTY0KDB4NDAyMjk3MTM0MDIyOTcxMyksIFU2NCgweDIwMTFjNjg0MjAxMWM2ODQpLAorICAgIFU2NCgweDdkMjQ0YTg1N2QyNDRhODUpLCBVNjQoMHhmODNkYmJkMmY4M2RiYmQyKSwKKyAgICBVNjQoMHgxMTMyZjlhZTExMzJmOWFlKSwgVTY0KDB4NmRhMTI5Yzc2ZGExMjljNyksCisgICAgVTY0KDB4NGIyZjllMWQ0YjJmOWUxZCksIFU2NCgweGYzMzBiMmRjZjMzMGIyZGMpLAorICAgIFU2NCgweGVjNTI4NjBkZWM1Mjg2MGQpLCBVNjQoMHhkMGUzYzE3N2QwZTNjMTc3KSwKKyAgICBVNjQoMHg2YzE2YjMyYjZjMTZiMzJiKSwgVTY0KDB4OTliOTcwYTk5OWI5NzBhOSksCisgICAgVTY0KDB4ZmE0ODk0MTFmYTQ4OTQxMSksIFU2NCgweDIyNjRlOTQ3MjI2NGU5NDcpLAorICAgIFU2NCgweGM0OGNmY2E4YzQ4Y2ZjYTgpLCBVNjQoMHgxYTNmZjBhMDFhM2ZmMGEwKSwKKyAgICBVNjQoMHhkODJjN2Q1NmQ4MmM3ZDU2KSwgVTY0KDB4ZWY5MDMzMjJlZjkwMzMyMiksCisgICAgVTY0KDB4Yzc0ZTQ5ODdjNzRlNDk4NyksIFU2NCgweGMxZDEzOGQ5YzFkMTM4ZDkpLAorICAgIFU2NCgweGZlYTJjYThjZmVhMmNhOGMpLCBVNjQoMHgzNjBiZDQ5ODM2MGJkNDk4KSwKKyAgICBVNjQoMHhjZjgxZjVhNmNmODFmNWE2KSwgVTY0KDB4MjhkZTdhYTUyOGRlN2FhNSksCisgICAgVTY0KDB4MjY4ZWI3ZGEyNjhlYjdkYSksIFU2NCgweGE0YmZhZDNmYTRiZmFkM2YpLAorICAgIFU2NCgweGU0OWQzYTJjZTQ5ZDNhMmMpLCBVNjQoMHgwZDkyNzg1MDBkOTI3ODUwKSwKKyAgICBVNjQoMHg5YmNjNWY2YTliY2M1ZjZhKSwgVTY0KDB4NjI0NjdlNTQ2MjQ2N2U1NCksCisgICAgVTY0KDB4YzIxMzhkZjZjMjEzOGRmNiksIFU2NCgweGU4YjhkODkwZThiOGQ4OTApLAorICAgIFU2NCgweDVlZjczOTJlNWVmNzM5MmUpLCBVNjQoMHhmNWFmYzM4MmY1YWZjMzgyKSwKKyAgICBVNjQoMHhiZTgwNWQ5ZmJlODA1ZDlmKSwgVTY0KDB4N2M5M2QwNjk3YzkzZDA2OSksCisgICAgVTY0KDB4YTkyZGQ1NmZhOTJkZDU2ZiksIFU2NCgweGIzMTIyNWNmYjMxMjI1Y2YpLAorICAgIFU2NCgweDNiOTlhY2M4M2I5OWFjYzgpLCBVNjQoMHhhNzdkMTgxMGE3N2QxODEwKSwKKyAgICBVNjQoMHg2ZTYzOWNlODZlNjM5Y2U4KSwgVTY0KDB4N2JiYjNiZGI3YmJiM2JkYiksCisgICAgVTY0KDB4MDk3ODI2Y2QwOTc4MjZjZCksIFU2NCgweGY0MTg1OTZlZjQxODU5NmUpLAorICAgIFU2NCgweDAxYjc5YWVjMDFiNzlhZWMpLCBVNjQoMHhhODlhNGY4M2E4OWE0ZjgzKSwKKyAgICBVNjQoMHg2NTZlOTVlNjY1NmU5NWU2KSwgVTY0KDB4N2VlNmZmYWE3ZWU2ZmZhYSksCisgICAgVTY0KDB4MDhjZmJjMjEwOGNmYmMyMSksIFU2NCgweGU2ZTgxNWVmZTZlODE1ZWYpLAorICAgIFU2NCgweGQ5OWJlN2JhZDk5YmU3YmEpLCBVNjQoMHhjZTM2NmY0YWNlMzY2ZjRhKSwKKyAgICBVNjQoMHhkNDA5OWZlYWQ0MDk5ZmVhKSwgVTY0KDB4ZDY3Y2IwMjlkNjdjYjAyOSksCisgICAgVTY0KDB4YWZiMmE0MzFhZmIyYTQzMSksIFU2NCgweDMxMjMzZjJhMzEyMzNmMmEpLAorICAgIFU2NCgweDMwOTRhNWM2MzA5NGE1YzYpLCBVNjQoMHhjMDY2YTIzNWMwNjZhMjM1KSwKKyAgICBVNjQoMHgzN2JjNGU3NDM3YmM0ZTc0KSwgVTY0KDB4YTZjYTgyZmNhNmNhODJmYyksCisgICAgVTY0KDB4YjBkMDkwZTBiMGQwOTBlMCksIFU2NCgweDE1ZDhhNzMzMTVkOGE3MzMpLAorICAgIFU2NCgweDRhOTgwNGYxNGE5ODA0ZjEpLCBVNjQoMHhmN2RhZWM0MWY3ZGFlYzQxKSwKKyAgICBVNjQoMHgwZTUwY2Q3ZjBlNTBjZDdmKSwgVTY0KDB4MmZmNjkxMTcyZmY2OTExNyksCisgICAgVTY0KDB4OGRkNjRkNzY4ZGQ2NGQ3NiksIFU2NCgweDRkYjBlZjQzNGRiMGVmNDMpLAorICAgIFU2NCgweDU0NGRhYWNjNTQ0ZGFhY2MpLCBVNjQoMHhkZjA0OTZlNGRmMDQ5NmU0KSwKKyAgICBVNjQoMHhlM2I1ZDE5ZWUzYjVkMTllKSwgVTY0KDB4MWI4ODZhNGMxYjg4NmE0YyksCisgICAgVTY0KDB4YjgxZjJjYzFiODFmMmNjMSksIFU2NCgweDdmNTE2NTQ2N2Y1MTY1NDYpLAorICAgIFU2NCgweDA0ZWE1ZTlkMDRlYTVlOWQpLCBVNjQoMHg1ZDM1OGMwMTVkMzU4YzAxKSwKKyAgICBVNjQoMHg3Mzc0ODdmYTczNzQ4N2ZhKSwgVTY0KDB4MmU0MTBiZmIyZTQxMGJmYiksCisgICAgVTY0KDB4NWExZDY3YjM1YTFkNjdiMyksIFU2NCgweDUyZDJkYjkyNTJkMmRiOTIpLAorICAgIFU2NCgweDMzNTYxMGU5MzM1NjEwZTkpLCBVNjQoMHgxMzQ3ZDY2ZDEzNDdkNjZkKSwKKyAgICBVNjQoMHg4YzYxZDc5YThjNjFkNzlhKSwgVTY0KDB4N2EwY2ExMzc3YTBjYTEzNyksCisgICAgVTY0KDB4OGUxNGY4NTk4ZTE0Zjg1OSksIFU2NCgweDg5M2MxM2ViODkzYzEzZWIpLAorICAgIFU2NCgweGVlMjdhOWNlZWUyN2E5Y2UpLCBVNjQoMHgzNWM5NjFiNzM1Yzk2MWI3KSwKKyAgICBVNjQoMHhlZGU1MWNlMWVkZTUxY2UxKSwgVTY0KDB4M2NiMTQ3N2EzY2IxNDc3YSksCisgICAgVTY0KDB4NTlkZmQyOWM1OWRmZDI5YyksIFU2NCgweDNmNzNmMjU1M2Y3M2YyNTUpLAorICAgIFU2NCgweDc5Y2UxNDE4NzljZTE0MTgpLCBVNjQoMHhiZjM3Yzc3M2JmMzdjNzczKSwKKyAgICBVNjQoMHhlYWNkZjc1M2VhY2RmNzUzKSwgVTY0KDB4NWJhYWZkNWY1YmFhZmQ1ZiksCisgICAgVTY0KDB4MTQ2ZjNkZGYxNDZmM2RkZiksIFU2NCgweDg2ZGI0NDc4ODZkYjQ0NzgpLAorICAgIFU2NCgweDgxZjNhZmNhODFmM2FmY2EpLCBVNjQoMHgzZWM0NjhiOTNlYzQ2OGI5KSwKKyAgICBVNjQoMHgyYzM0MjQzODJjMzQyNDM4KSwgVTY0KDB4NWY0MGEzYzI1ZjQwYTNjMiksCisgICAgVTY0KDB4NzJjMzFkMTY3MmMzMWQxNiksIFU2NCgweDBjMjVlMmJjMGMyNWUyYmMpLAorICAgIFU2NCgweDhiNDkzYzI4OGI0OTNjMjgpLCBVNjQoMHg0MTk1MGRmZjQxOTUwZGZmKSwKKyAgICBVNjQoMHg3MTAxYTgzOTcxMDFhODM5KSwgVTY0KDB4ZGViMzBjMDhkZWIzMGMwOCksCisgICAgVTY0KDB4OWNlNGI0ZDg5Y2U0YjRkOCksIFU2NCgweDkwYzE1NjY0OTBjMTU2NjQpLAorICAgIFU2NCgweDYxODRjYjdiNjE4NGNiN2IpLCBVNjQoMHg3MGI2MzJkNTcwYjYzMmQ1KSwKKyAgICBVNjQoMHg3NDVjNmM0ODc0NWM2YzQ4KSwgVTY0KDB4NDI1N2I4ZDA0MjU3YjhkMCkKK307CitzdGF0aWMgY29uc3QgdTggVGQ0WzI1Nl0gPSB7CisgICAgMHg1MlUsIDB4MDlVLCAweDZhVSwgMHhkNVUsIDB4MzBVLCAweDM2VSwgMHhhNVUsIDB4MzhVLAorICAgIDB4YmZVLCAweDQwVSwgMHhhM1UsIDB4OWVVLCAweDgxVSwgMHhmM1UsIDB4ZDdVLCAweGZiVSwKKyAgICAweDdjVSwgMHhlM1UsIDB4MzlVLCAweDgyVSwgMHg5YlUsIDB4MmZVLCAweGZmVSwgMHg4N1UsCisgICAgMHgzNFUsIDB4OGVVLCAweDQzVSwgMHg0NFUsIDB4YzRVLCAweGRlVSwgMHhlOVUsIDB4Y2JVLAorICAgIDB4NTRVLCAweDdiVSwgMHg5NFUsIDB4MzJVLCAweGE2VSwgMHhjMlUsIDB4MjNVLCAweDNkVSwKKyAgICAweGVlVSwgMHg0Y1UsIDB4OTVVLCAweDBiVSwgMHg0MlUsIDB4ZmFVLCAweGMzVSwgMHg0ZVUsCisgICAgMHgwOFUsIDB4MmVVLCAweGExVSwgMHg2NlUsIDB4MjhVLCAweGQ5VSwgMHgyNFUsIDB4YjJVLAorICAgIDB4NzZVLCAweDViVSwgMHhhMlUsIDB4NDlVLCAweDZkVSwgMHg4YlUsIDB4ZDFVLCAweDI1VSwKKyAgICAweDcyVSwgMHhmOFUsIDB4ZjZVLCAweDY0VSwgMHg4NlUsIDB4NjhVLCAweDk4VSwgMHgxNlUsCisgICAgMHhkNFUsIDB4YTRVLCAweDVjVSwgMHhjY1UsIDB4NWRVLCAweDY1VSwgMHhiNlUsIDB4OTJVLAorICAgIDB4NmNVLCAweDcwVSwgMHg0OFUsIDB4NTBVLCAweGZkVSwgMHhlZFUsIDB4YjlVLCAweGRhVSwKKyAgICAweDVlVSwgMHgxNVUsIDB4NDZVLCAweDU3VSwgMHhhN1UsIDB4OGRVLCAweDlkVSwgMHg4NFUsCisgICAgMHg5MFUsIDB4ZDhVLCAweGFiVSwgMHgwMFUsIDB4OGNVLCAweGJjVSwgMHhkM1UsIDB4MGFVLAorICAgIDB4ZjdVLCAweGU0VSwgMHg1OFUsIDB4MDVVLCAweGI4VSwgMHhiM1UsIDB4NDVVLCAweDA2VSwKKyAgICAweGQwVSwgMHgyY1UsIDB4MWVVLCAweDhmVSwgMHhjYVUsIDB4M2ZVLCAweDBmVSwgMHgwMlUsCisgICAgMHhjMVUsIDB4YWZVLCAweGJkVSwgMHgwM1UsIDB4MDFVLCAweDEzVSwgMHg4YVUsIDB4NmJVLAorICAgIDB4M2FVLCAweDkxVSwgMHgxMVUsIDB4NDFVLCAweDRmVSwgMHg2N1UsIDB4ZGNVLCAweGVhVSwKKyAgICAweDk3VSwgMHhmMlUsIDB4Y2ZVLCAweGNlVSwgMHhmMFUsIDB4YjRVLCAweGU2VSwgMHg3M1UsCisgICAgMHg5NlUsIDB4YWNVLCAweDc0VSwgMHgyMlUsIDB4ZTdVLCAweGFkVSwgMHgzNVUsIDB4ODVVLAorICAgIDB4ZTJVLCAweGY5VSwgMHgzN1UsIDB4ZThVLCAweDFjVSwgMHg3NVUsIDB4ZGZVLCAweDZlVSwKKyAgICAweDQ3VSwgMHhmMVUsIDB4MWFVLCAweDcxVSwgMHgxZFUsIDB4MjlVLCAweGM1VSwgMHg4OVUsCisgICAgMHg2ZlUsIDB4YjdVLCAweDYyVSwgMHgwZVUsIDB4YWFVLCAweDE4VSwgMHhiZVUsIDB4MWJVLAorICAgIDB4ZmNVLCAweDU2VSwgMHgzZVUsIDB4NGJVLCAweGM2VSwgMHhkMlUsIDB4NzlVLCAweDIwVSwKKyAgICAweDlhVSwgMHhkYlUsIDB4YzBVLCAweGZlVSwgMHg3OFUsIDB4Y2RVLCAweDVhVSwgMHhmNFUsCisgICAgMHgxZlUsIDB4ZGRVLCAweGE4VSwgMHgzM1UsIDB4ODhVLCAweDA3VSwgMHhjN1UsIDB4MzFVLAorICAgIDB4YjFVLCAweDEyVSwgMHgxMFUsIDB4NTlVLCAweDI3VSwgMHg4MFUsIDB4ZWNVLCAweDVmVSwKKyAgICAweDYwVSwgMHg1MVUsIDB4N2ZVLCAweGE5VSwgMHgxOVUsIDB4YjVVLCAweDRhVSwgMHgwZFUsCisgICAgMHgyZFUsIDB4ZTVVLCAweDdhVSwgMHg5ZlUsIDB4OTNVLCAweGM5VSwgMHg5Y1UsIDB4ZWZVLAorICAgIDB4YTBVLCAweGUwVSwgMHgzYlUsIDB4NGRVLCAweGFlVSwgMHgyYVUsIDB4ZjVVLCAweGIwVSwKKyAgICAweGM4VSwgMHhlYlUsIDB4YmJVLCAweDNjVSwgMHg4M1UsIDB4NTNVLCAweDk5VSwgMHg2MVUsCisgICAgMHgxN1UsIDB4MmJVLCAweDA0VSwgMHg3ZVUsIDB4YmFVLCAweDc3VSwgMHhkNlUsIDB4MjZVLAorICAgIDB4ZTFVLCAweDY5VSwgMHgxNFUsIDB4NjNVLCAweDU1VSwgMHgyMVUsIDB4MGNVLCAweDdkVQorfTsKKworc3RhdGljIGNvbnN0IHUzMiByY29uW10gPSB7CisgICAgMHgwMDAwMDAwMVUsIDB4MDAwMDAwMDJVLCAweDAwMDAwMDA0VSwgMHgwMDAwMDAwOFUsCisgICAgMHgwMDAwMDAxMFUsIDB4MDAwMDAwMjBVLCAweDAwMDAwMDQwVSwgMHgwMDAwMDA4MFUsCisgICAgMHgwMDAwMDAxYlUsIDB4MDAwMDAwMzZVLCAvKiBmb3IgMTI4LWJpdCBibG9ja3MsIFJpam5kYWVsIG5ldmVyIHVzZXMgbW9yZSB0aGFuIDEwIHJjb24gdmFsdWVzICovCit9OworCisvKioKKyAqIEV4cGFuZCB0aGUgY2lwaGVyIGtleSBpbnRvIHRoZSBlbmNyeXB0aW9uIGtleSBzY2hlZHVsZS4KKyAqLworaW50IEFFU19zZXRfZW5jcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgY29uc3QgaW50IGJpdHMsCisJCQlBRVNfS0VZICprZXkpIHsKKworCXUzMiAqcms7CisgICAJaW50IGkgPSAwOworCXUzMiB0ZW1wOworCisJaWYgKCF1c2VyS2V5IHx8ICFrZXkpCisJCXJldHVybiAtMTsKKwlpZiAoYml0cyAhPSAxMjggJiYgYml0cyAhPSAxOTIgJiYgYml0cyAhPSAyNTYpCisJCXJldHVybiAtMjsKKworCXJrID0ga2V5LT5yZF9rZXk7CisKKwlpZiAoYml0cz09MTI4KQorCQlrZXktPnJvdW5kcyA9IDEwOworCWVsc2UgaWYgKGJpdHM9PTE5MikKKwkJa2V5LT5yb3VuZHMgPSAxMjsKKwllbHNlCisJCWtleS0+cm91bmRzID0gMTQ7CisKKwlya1swXSA9IEdFVFUzMih1c2VyS2V5ICAgICApOworCXJrWzFdID0gR0VUVTMyKHVzZXJLZXkgKyAgNCk7CisJcmtbMl0gPSBHRVRVMzIodXNlcktleSArICA4KTsKKwlya1szXSA9IEdFVFUzMih1c2VyS2V5ICsgMTIpOworCWlmIChiaXRzID09IDEyOCkgeworCQl3aGlsZSAoMSkgeworCQkJdGVtcCAgPSBya1szXTsKKwkJCXJrWzRdID0gcmtbMF0gXgorCQkJCShUZTRbKHRlbXAgPj4gIDgpICYgMHhmZl0gICAgICApIF4KKwkJCQkoVGU0Wyh0ZW1wID4+IDE2KSAmIDB4ZmZdIDw8ICA4KSBeCisJCQkJKFRlNFsodGVtcCA+PiAyNCkgICAgICAgXSA8PCAxNikgXgorCQkJCShUZTRbKHRlbXAgICAgICApICYgMHhmZl0gPDwgMjQpIF4KKwkJCQlyY29uW2ldOworCQkJcmtbNV0gPSBya1sxXSBeIHJrWzRdOworCQkJcmtbNl0gPSBya1syXSBeIHJrWzVdOworCQkJcmtbN10gPSBya1szXSBeIHJrWzZdOworCQkJaWYgKCsraSA9PSAxMCkgeworCQkJCXJldHVybiAwOworCQkJfQorCQkJcmsgKz0gNDsKKwkJfQorCX0KKwlya1s0XSA9IEdFVFUzMih1c2VyS2V5ICsgMTYpOworCXJrWzVdID0gR0VUVTMyKHVzZXJLZXkgKyAyMCk7CisJaWYgKGJpdHMgPT0gMTkyKSB7CisJCXdoaWxlICgxKSB7CisJCQl0ZW1wID0gcmtbIDVdOworCQkJcmtbIDZdID0gcmtbIDBdIF4KKwkJCQkoVGU0Wyh0ZW1wID4+ICA4KSAmIDB4ZmZdICAgICAgKSBeCisJCQkJKFRlNFsodGVtcCA+PiAxNikgJiAweGZmXSA8PCAgOCkgXgorCQkJCShUZTRbKHRlbXAgPj4gMjQpICAgICAgIF0gPDwgMTYpIF4KKwkJCQkoVGU0Wyh0ZW1wICAgICAgKSAmIDB4ZmZdIDw8IDI0KSBeCisJCQkJcmNvbltpXTsKKwkJCXJrWyA3XSA9IHJrWyAxXSBeIHJrWyA2XTsKKwkJCXJrWyA4XSA9IHJrWyAyXSBeIHJrWyA3XTsKKwkJCXJrWyA5XSA9IHJrWyAzXSBeIHJrWyA4XTsKKwkJCWlmICgrK2kgPT0gOCkgeworCQkJCXJldHVybiAwOworCQkJfQorCQkJcmtbMTBdID0gcmtbIDRdIF4gcmtbIDldOworCQkJcmtbMTFdID0gcmtbIDVdIF4gcmtbMTBdOworCQkJcmsgKz0gNjsKKwkJfQorCX0KKwlya1s2XSA9IEdFVFUzMih1c2VyS2V5ICsgMjQpOworCXJrWzddID0gR0VUVTMyKHVzZXJLZXkgKyAyOCk7CisJaWYgKGJpdHMgPT0gMjU2KSB7CisJCXdoaWxlICgxKSB7CisJCQl0ZW1wID0gcmtbIDddOworCQkJcmtbIDhdID0gcmtbIDBdIF4KKwkJCQkoVGU0Wyh0ZW1wID4+ICA4KSAmIDB4ZmZdICAgICAgKSBeCisJCQkJKFRlNFsodGVtcCA+PiAxNikgJiAweGZmXSA8PCAgOCkgXgorCQkJCShUZTRbKHRlbXAgPj4gMjQpICAgICAgIF0gPDwgMTYpIF4KKwkJCQkoVGU0Wyh0ZW1wICAgICAgKSAmIDB4ZmZdIDw8IDI0KSBeCisJCQkJcmNvbltpXTsKKwkJCXJrWyA5XSA9IHJrWyAxXSBeIHJrWyA4XTsKKwkJCXJrWzEwXSA9IHJrWyAyXSBeIHJrWyA5XTsKKwkJCXJrWzExXSA9IHJrWyAzXSBeIHJrWzEwXTsKKwkJCWlmICgrK2kgPT0gNykgeworCQkJCXJldHVybiAwOworCQkJfQorCQkJdGVtcCA9IHJrWzExXTsKKwkJCXJrWzEyXSA9IHJrWyA0XSBeCisJCQkJKFRlNFsodGVtcCAgICAgICkgJiAweGZmXSAgICAgICkgXgorCQkJCShUZTRbKHRlbXAgPj4gIDgpICYgMHhmZl0gPDwgIDgpIF4KKwkJCQkoVGU0Wyh0ZW1wID4+IDE2KSAmIDB4ZmZdIDw8IDE2KSBeCisJCQkJKFRlNFsodGVtcCA+PiAyNCkgICAgICAgXSA8PCAyNCk7CisJCQlya1sxM10gPSBya1sgNV0gXiBya1sxMl07CisJCQlya1sxNF0gPSBya1sgNl0gXiBya1sxM107CisJCQlya1sxNV0gPSBya1sgN10gXiBya1sxNF07CisKKwkJCXJrICs9IDg7CisgICAgICAgIAl9CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIEV4cGFuZCB0aGUgY2lwaGVyIGtleSBpbnRvIHRoZSBkZWNyeXB0aW9uIGtleSBzY2hlZHVsZS4KKyAqLworaW50IEFFU19zZXRfZGVjcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgY29uc3QgaW50IGJpdHMsCisJCQkgQUVTX0tFWSAqa2V5KSB7CisKKyAgICAgICAgdTMyICpyazsKKwlpbnQgaSwgaiwgc3RhdHVzOworCXUzMiB0ZW1wOworCisJLyogZmlyc3QsIHN0YXJ0IHdpdGggYW4gZW5jcnlwdGlvbiBzY2hlZHVsZSAqLworCXN0YXR1cyA9IEFFU19zZXRfZW5jcnlwdF9rZXkodXNlcktleSwgYml0cywga2V5KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKworCXJrID0ga2V5LT5yZF9rZXk7CisKKwkvKiBpbnZlcnQgdGhlIG9yZGVyIG9mIHRoZSByb3VuZCBrZXlzOiAqLworCWZvciAoaSA9IDAsIGogPSA0KihrZXktPnJvdW5kcyk7IGkgPCBqOyBpICs9IDQsIGogLT0gNCkgeworCQl0ZW1wID0gcmtbaSAgICBdOyBya1tpICAgIF0gPSBya1tqICAgIF07IHJrW2ogICAgXSA9IHRlbXA7CisJCXRlbXAgPSBya1tpICsgMV07IHJrW2kgKyAxXSA9IHJrW2ogKyAxXTsgcmtbaiArIDFdID0gdGVtcDsKKwkJdGVtcCA9IHJrW2kgKyAyXTsgcmtbaSArIDJdID0gcmtbaiArIDJdOyBya1tqICsgMl0gPSB0ZW1wOworCQl0ZW1wID0gcmtbaSArIDNdOyBya1tpICsgM10gPSBya1tqICsgM107IHJrW2ogKyAzXSA9IHRlbXA7CisJfQorCS8qIGFwcGx5IHRoZSBpbnZlcnNlIE1peENvbHVtbiB0cmFuc2Zvcm0gdG8gYWxsIHJvdW5kIGtleXMgYnV0IHRoZSBmaXJzdCBhbmQgdGhlIGxhc3Q6ICovCisJZm9yIChpID0gMTsgaSA8IChrZXktPnJvdW5kcyk7IGkrKykgeworCQlyayArPSA0OworI2lmIDEKKwkJZm9yIChqID0gMDsgaiA8IDQ7IGorKykgeworCQkJdTMyIHRwMSwgdHAyLCB0cDQsIHRwOCwgdHA5LCB0cGIsIHRwZCwgdHBlLCBtOworCisJCQl0cDEgPSBya1tqXTsKKwkJCW0gPSB0cDEgJiAweDgwODA4MDgwOworCQkJdHAyID0gKCh0cDEgJiAweDdmN2Y3ZjdmKSA8PCAxKSBeCisJCQkJKChtIC0gKG0gPj4gNykpICYgMHgxYjFiMWIxYik7CisJCQltID0gdHAyICYgMHg4MDgwODA4MDsKKwkJCXRwNCA9ICgodHAyICYgMHg3ZjdmN2Y3ZikgPDwgMSkgXgorCQkJCSgobSAtIChtID4+IDcpKSAmIDB4MWIxYjFiMWIpOworCQkJbSA9IHRwNCAmIDB4ODA4MDgwODA7CisJCQl0cDggPSAoKHRwNCAmIDB4N2Y3ZjdmN2YpIDw8IDEpIF4KKwkJCQkoKG0gLSAobSA+PiA3KSkgJiAweDFiMWIxYjFiKTsKKwkJCXRwOSA9IHRwOCBeIHRwMTsKKwkJCXRwYiA9IHRwOSBeIHRwMjsKKwkJCXRwZCA9IHRwOSBeIHRwNDsKKwkJCXRwZSA9IHRwOCBeIHRwNCBeIHRwMjsKKyNpZiBkZWZpbmVkKFJPVEFURSkKKwkJCXJrW2pdID0gdHBlIF4gUk9UQVRFKHRwZCwxNikgXgorCQkJCVJPVEFURSh0cDksOCkgXiBST1RBVEUodHBiLDI0KTsKKyNlbHNlCisJCQlya1tqXSA9IHRwZSBeICh0cGQgPj4gMTYpIF4gKHRwZCA8PCAxNikgXiAKKwkJCQkodHA5ID4+IDI0KSBeICh0cDkgPDwgOCkgXgorCQkJCSh0cGIgPj4gOCkgXiAodHBiIDw8IDI0KTsKKyNlbmRpZgorCQl9CisjZWxzZQorCQlya1swXSA9CisJCQlUZDBbVGUyWyhya1swXSAgICAgICkgJiAweGZmXSAmIDB4ZmZdIF4KKwkJCVRkMVtUZTJbKHJrWzBdID4+ICA4KSAmIDB4ZmZdICYgMHhmZl0gXgorCQkJVGQyW1RlMlsocmtbMF0gPj4gMTYpICYgMHhmZl0gJiAweGZmXSBeCisJCQlUZDNbVGUyWyhya1swXSA+PiAyNCkgICAgICAgXSAmIDB4ZmZdOworCQlya1sxXSA9CisJCQlUZDBbVGUyWyhya1sxXSAgICAgICkgJiAweGZmXSAmIDB4ZmZdIF4KKwkJCVRkMVtUZTJbKHJrWzFdID4+ICA4KSAmIDB4ZmZdICYgMHhmZl0gXgorCQkJVGQyW1RlMlsocmtbMV0gPj4gMTYpICYgMHhmZl0gJiAweGZmXSBeCisJCQlUZDNbVGUyWyhya1sxXSA+PiAyNCkgICAgICAgXSAmIDB4ZmZdOworCQlya1syXSA9CisJCQlUZDBbVGUyWyhya1syXSAgICAgICkgJiAweGZmXSAmIDB4ZmZdIF4KKwkJCVRkMVtUZTJbKHJrWzJdID4+ICA4KSAmIDB4ZmZdICYgMHhmZl0gXgorCQkJVGQyW1RlMlsocmtbMl0gPj4gMTYpICYgMHhmZl0gJiAweGZmXSBeCisJCQlUZDNbVGUyWyhya1syXSA+PiAyNCkgICAgICAgXSAmIDB4ZmZdOworCQlya1szXSA9CisJCQlUZDBbVGUyWyhya1szXSAgICAgICkgJiAweGZmXSAmIDB4ZmZdIF4KKwkJCVRkMVtUZTJbKHJrWzNdID4+ICA4KSAmIDB4ZmZdICYgMHhmZl0gXgorCQkJVGQyW1RlMlsocmtbM10gPj4gMTYpICYgMHhmZl0gJiAweGZmXSBeCisJCQlUZDNbVGUyWyhya1szXSA+PiAyNCkgICAgICAgXSAmIDB4ZmZdOworI2VuZGlmCisJfQorCXJldHVybiAwOworfQorCisvKgorICogRW5jcnlwdCBhIHNpbmdsZSBibG9jaworICogaW4gYW5kIG91dCBjYW4gb3ZlcmxhcAorICovCit2b2lkIEFFU19lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJCSBjb25zdCBBRVNfS0VZICprZXkpIHsKKworCWNvbnN0IHUzMiAqcms7CisJdTMyIHMwLCBzMSwgczIsIHMzLCB0WzRdOworCWludCByOworCisJYXNzZXJ0KGluICYmIG91dCAmJiBrZXkpOworCXJrID0ga2V5LT5yZF9rZXk7CisKKwkvKgorCSAqIG1hcCBieXRlIGFycmF5IGJsb2NrIHRvIGNpcGhlciBzdGF0ZQorCSAqIGFuZCBhZGQgaW5pdGlhbCByb3VuZCBrZXk6CisJICovCisJczAgPSBHRVRVMzIoaW4gICAgICkgXiBya1swXTsKKwlzMSA9IEdFVFUzMihpbiArICA0KSBeIHJrWzFdOworCXMyID0gR0VUVTMyKGluICsgIDgpIF4gcmtbMl07CisJczMgPSBHRVRVMzIoaW4gKyAxMikgXiBya1szXTsKKworI2lmIGRlZmluZWQoQUVTX0NPTVBBQ1RfSU5fT1VURVJfUk9VTkRTKQorCXByZWZldGNoMjU2KFRlNCk7CisKKwl0WzBdID0JVGU0WyhzMCAgICAgICkgJiAweGZmXSAgICAgICBeCisJCVRlNFsoczEgPj4gIDgpICYgMHhmZl0gPDwgIDggXgorCQlUZTRbKHMyID4+IDE2KSAmIDB4ZmZdIDw8IDE2IF4KKwkJVGU0WyhzMyA+PiAyNCkgICAgICAgXSA8PCAyNDsKKwl0WzFdID0JVGU0WyhzMSAgICAgICkgJiAweGZmXSAgICAgICBeCisJCVRlNFsoczIgPj4gIDgpICYgMHhmZl0gPDwgIDggXgorCQlUZTRbKHMzID4+IDE2KSAmIDB4ZmZdIDw8IDE2IF4KKwkJVGU0WyhzMCA+PiAyNCkgICAgICAgXSA8PCAyNDsKKwl0WzJdID0JVGU0WyhzMiAgICAgICkgJiAweGZmXSAgICAgICBeCisJCVRlNFsoczMgPj4gIDgpICYgMHhmZl0gPDwgIDggXgorCQlUZTRbKHMwID4+IDE2KSAmIDB4ZmZdIDw8IDE2IF4KKwkJVGU0WyhzMSA+PiAyNCkgICAgICAgXSA8PCAyNDsKKwl0WzNdID0JVGU0WyhzMyAgICAgICkgJiAweGZmXSAgICAgICBeCisJCVRlNFsoczAgPj4gIDgpICYgMHhmZl0gPDwgIDggXgorCQlUZTRbKHMxID4+IDE2KSAmIDB4ZmZdIDw8IDE2IF4KKwkJVGU0WyhzMiA+PiAyNCkgICAgICAgXSA8PCAyNDsKKworCS8qIG5vdyBkbyB0aGUgbGluZWFyIHRyYW5zZm9ybSB1c2luZyB3b3JkcyAqLworCXsJaW50IGk7CisJCXUzMiByMCwgcjEsIHIyOworCisJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJCXIwID0gdFtpXTsKKwkJCXIxID0gcjAgJiAweDgwODA4MDgwOworCQkJcjIgPSAoKHIwICYgMHg3ZjdmN2Y3ZikgPDwgMSkgXgorCQkJCSgocjEgLSAocjEgPj4gNykpICYgMHgxYjFiMWIxYik7CisjaWYgZGVmaW5lZChST1RBVEUpCisJCQl0W2ldID0gcjIgXiBST1RBVEUocjIsMjQpIF4gUk9UQVRFKHIwLDI0KSBeCisJCQkJUk9UQVRFKHIwLDE2KSBeIFJPVEFURShyMCw4KTsKKyNlbHNlCisJCQl0W2ldID0gcjIgXiAoKHIyIF4gcjApIDw8IDI0KSBeICgocjIgXiByMCkgPj4gOCkgXgorCQkJCShyMCA8PCAxNikgXiAocjAgPj4gMTYpIF4KKwkJCQkocjAgPDwgOCkgXiAocjAgPj4gMjQpOworI2VuZGlmCisJCQl0W2ldIF49IHJrWzQraV07CisJCX0KKwl9CisjZWxzZQorCXRbMF0gPQlUZTBbKHMwICAgICAgKSAmIDB4ZmZdIF4KKwkJVGUxWyhzMSA+PiAgOCkgJiAweGZmXSBeCisJCVRlMlsoczIgPj4gMTYpICYgMHhmZl0gXgorCQlUZTNbKHMzID4+IDI0KSAgICAgICBdIF4KKwkJcmtbNF07CisJdFsxXSA9CVRlMFsoczEgICAgICApICYgMHhmZl0gXgorCQlUZTFbKHMyID4+ICA4KSAmIDB4ZmZdIF4KKwkJVGUyWyhzMyA+PiAxNikgJiAweGZmXSBeCisJCVRlM1soczAgPj4gMjQpICAgICAgIF0gXgorCQlya1s1XTsKKwl0WzJdID0JVGUwWyhzMiAgICAgICkgJiAweGZmXSBeCisJCVRlMVsoczMgPj4gIDgpICYgMHhmZl0gXgorCQlUZTJbKHMwID4+IDE2KSAmIDB4ZmZdIF4KKwkJVGUzWyhzMSA+PiAyNCkgICAgICAgXSBeCisJCXJrWzZdOworCXRbM10gPQlUZTBbKHMzICAgICAgKSAmIDB4ZmZdIF4KKwkJVGUxWyhzMCA+PiAgOCkgJiAweGZmXSBeCisJCVRlMlsoczEgPj4gMTYpICYgMHhmZl0gXgorCQlUZTNbKHMyID4+IDI0KSAgICAgICBdIF4KKwkJcmtbN107CisjZW5kaWYKKwlzMCA9IHRbMF07IHMxID0gdFsxXTsgczIgPSB0WzJdOyBzMyA9IHRbM107CisKKyAgICAvKgorICAgICAqIE5yIC0gMiBmdWxsIHJvdW5kczoKKyAgICAgKi8KKyAgICBmb3IgKHJrKz04LHI9a2V5LT5yb3VuZHMtMjsgcj4wOyByays9NCxyLS0pIHsKKyNpZiBkZWZpbmVkKEFFU19DT01QQUNUX0lOX0lOTkVSX1JPVU5EUykKKwl0WzBdID0JVGU0WyhzMCAgICAgICkgJiAweGZmXSAgICAgICBeCisJCVRlNFsoczEgPj4gIDgpICYgMHhmZl0gPDwgIDggXgorCQlUZTRbKHMyID4+IDE2KSAmIDB4ZmZdIDw8IDE2IF4KKwkJVGU0WyhzMyA+PiAyNCkgICAgICAgXSA8PCAyNDsKKwl0WzFdID0JVGU0WyhzMSAgICAgICkgJiAweGZmXSAgICAgICBeCisJCVRlNFsoczIgPj4gIDgpICYgMHhmZl0gPDwgIDggXgorCQlUZTRbKHMzID4+IDE2KSAmIDB4ZmZdIDw8IDE2IF4KKwkJVGU0WyhzMCA+PiAyNCkgICAgICAgXSA8PCAyNDsKKwl0WzJdID0JVGU0WyhzMiAgICAgICkgJiAweGZmXSAgICAgICBeCisJCVRlNFsoczMgPj4gIDgpICYgMHhmZl0gPDwgIDggXgorCQlUZTRbKHMwID4+IDE2KSAmIDB4ZmZdIDw8IDE2IF4KKwkJVGU0WyhzMSA+PiAyNCkgICAgICAgXSA8PCAyNDsKKwl0WzNdID0JVGU0WyhzMyAgICAgICkgJiAweGZmXSAgICAgICBeCisJCVRlNFsoczAgPj4gIDgpICYgMHhmZl0gPDwgIDggXgorCQlUZTRbKHMxID4+IDE2KSAmIDB4ZmZdIDw8IDE2IF4KKwkJVGU0WyhzMiA+PiAyNCkgICAgICAgXSA8PCAyNDsKKworCS8qIG5vdyBkbyB0aGUgbGluZWFyIHRyYW5zZm9ybSB1c2luZyB3b3JkcyAqLworCXsJaW50IGk7CisJCXUzMiByMCwgcjEsIHIyOworCisJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJCXIwID0gdFtpXTsKKwkJCXIxID0gcjAgJiAweDgwODA4MDgwOworCQkJcjIgPSAoKHIwICYgMHg3ZjdmN2Y3ZikgPDwgMSkgXgorCQkJCSgocjEgLSAocjEgPj4gNykpICYgMHgxYjFiMWIxYik7CisjaWYgZGVmaW5lZChST1RBVEUpCisJCQl0W2ldID0gcjIgXiBST1RBVEUocjIsMjQpIF4gUk9UQVRFKHIwLDI0KSBeCisJCQkJUk9UQVRFKHIwLDE2KSBeIFJPVEFURShyMCw4KTsKKyNlbHNlCisJCQl0W2ldID0gcjIgXiAoKHIyIF4gcjApIDw8IDI0KSBeICgocjIgXiByMCkgPj4gOCkgXgorCQkJCShyMCA8PCAxNikgXiAocjAgPj4gMTYpIF4KKwkJCQkocjAgPDwgOCkgXiAocjAgPj4gMjQpOworI2VuZGlmCisJCQl0W2ldIF49IHJrW2ldOworCQl9CisJfQorI2Vsc2UKKwl0WzBdID0JVGUwWyhzMCAgICAgICkgJiAweGZmXSBeCisJCVRlMVsoczEgPj4gIDgpICYgMHhmZl0gXgorCQlUZTJbKHMyID4+IDE2KSAmIDB4ZmZdIF4KKwkJVGUzWyhzMyA+PiAyNCkgICAgICAgXSBeCisJCXJrWzBdOworCXRbMV0gPQlUZTBbKHMxICAgICAgKSAmIDB4ZmZdIF4KKwkJVGUxWyhzMiA+PiAgOCkgJiAweGZmXSBeCisJCVRlMlsoczMgPj4gMTYpICYgMHhmZl0gXgorCQlUZTNbKHMwID4+IDI0KSAgICAgICBdIF4KKwkJcmtbMV07CisJdFsyXSA9CVRlMFsoczIgICAgICApICYgMHhmZl0gXgorCQlUZTFbKHMzID4+ICA4KSAmIDB4ZmZdIF4KKwkJVGUyWyhzMCA+PiAxNikgJiAweGZmXSBeCisJCVRlM1soczEgPj4gMjQpICAgICAgIF0gXgorCQlya1syXTsKKwl0WzNdID0JVGUwWyhzMyAgICAgICkgJiAweGZmXSBeCisJCVRlMVsoczAgPj4gIDgpICYgMHhmZl0gXgorCQlUZTJbKHMxID4+IDE2KSAmIDB4ZmZdIF4KKwkJVGUzWyhzMiA+PiAyNCkgICAgICAgXSBeCisJCXJrWzNdOworI2VuZGlmCisJczAgPSB0WzBdOyBzMSA9IHRbMV07IHMyID0gdFsyXTsgczMgPSB0WzNdOworICAgIH0KKyAgICAvKgorCSAqIGFwcGx5IGxhc3Qgcm91bmQgYW5kCisJICogbWFwIGNpcGhlciBzdGF0ZSB0byBieXRlIGFycmF5IGJsb2NrOgorCSAqLworI2lmIGRlZmluZWQoQUVTX0NPTVBBQ1RfSU5fT1VURVJfUk9VTkRTKQorCXByZWZldGNoMjU2KFRlNCk7CisKKwkqKHUzMiopKG91dCswKSA9CisJCVRlNFsoczAgICAgICApICYgMHhmZl0gICAgICAgXgorCQlUZTRbKHMxID4+ICA4KSAmIDB4ZmZdIDw8ICA4IF4KKwkJVGU0WyhzMiA+PiAxNikgJiAweGZmXSA8PCAxNiBeCisJCVRlNFsoczMgPj4gMjQpICAgICAgIF0gPDwgMjQgXgorCQlya1swXTsKKwkqKHUzMiopKG91dCs0KSA9CisJCVRlNFsoczEgICAgICApICYgMHhmZl0gICAgICAgXgorCQlUZTRbKHMyID4+ICA4KSAmIDB4ZmZdIDw8ICA4IF4KKwkJVGU0WyhzMyA+PiAxNikgJiAweGZmXSA8PCAxNiBeCisJCVRlNFsoczAgPj4gMjQpICAgICAgIF0gPDwgMjQgXgorCQlya1sxXTsKKwkqKHUzMiopKG91dCs4KSA9CisJCVRlNFsoczIgICAgICApICYgMHhmZl0gICAgICAgXgorCQlUZTRbKHMzID4+ICA4KSAmIDB4ZmZdIDw8ICA4IF4KKwkJVGU0WyhzMCA+PiAxNikgJiAweGZmXSA8PCAxNiBeCisJCVRlNFsoczEgPj4gMjQpICAgICAgIF0gPDwgMjQgXgorCQlya1syXTsKKwkqKHUzMiopKG91dCsxMikgPQorCQlUZTRbKHMzICAgICAgKSAmIDB4ZmZdICAgICAgIF4KKwkJVGU0WyhzMCA+PiAgOCkgJiAweGZmXSA8PCAgOCBeCisJCVRlNFsoczEgPj4gMTYpICYgMHhmZl0gPDwgMTYgXgorCQlUZTRbKHMyID4+IDI0KSAgICAgICBdIDw8IDI0IF4KKwkJcmtbM107CisjZWxzZQorCSoodTMyKikob3V0KzApID0KKwkJKFRlMlsoczAgICAgICApICYgMHhmZl0gJiAweDAwMDAwMGZmVSkgXgorCQkoVGUzWyhzMSA+PiAgOCkgJiAweGZmXSAmIDB4MDAwMGZmMDBVKSBeCisJCShUZTBbKHMyID4+IDE2KSAmIDB4ZmZdICYgMHgwMGZmMDAwMFUpIF4KKwkJKFRlMVsoczMgPj4gMjQpICAgICAgIF0gJiAweGZmMDAwMDAwVSkgXgorCQlya1swXTsKKwkqKHUzMiopKG91dCs0KSA9CisJCShUZTJbKHMxICAgICAgKSAmIDB4ZmZdICYgMHgwMDAwMDBmZlUpIF4KKwkJKFRlM1soczIgPj4gIDgpICYgMHhmZl0gJiAweDAwMDBmZjAwVSkgXgorCQkoVGUwWyhzMyA+PiAxNikgJiAweGZmXSAmIDB4MDBmZjAwMDBVKSBeCisJCShUZTFbKHMwID4+IDI0KSAgICAgICBdICYgMHhmZjAwMDAwMFUpIF4KKwkJcmtbMV07CisJKih1MzIqKShvdXQrOCkgPQorCQkoVGUyWyhzMiAgICAgICkgJiAweGZmXSAmIDB4MDAwMDAwZmZVKSBeCisJCShUZTNbKHMzID4+ICA4KSAmIDB4ZmZdICYgMHgwMDAwZmYwMFUpIF4KKwkJKFRlMFsoczAgPj4gMTYpICYgMHhmZl0gJiAweDAwZmYwMDAwVSkgXgorCQkoVGUxWyhzMSA+PiAyNCkgICAgICAgXSAmIDB4ZmYwMDAwMDBVKSBeCisJCXJrWzJdOworCSoodTMyKikob3V0KzEyKSA9CisJCShUZTJbKHMzICAgICAgKSAmIDB4ZmZdICYgMHgwMDAwMDBmZlUpIF4KKwkJKFRlM1soczAgPj4gIDgpICYgMHhmZl0gJiAweDAwMDBmZjAwVSkgXgorCQkoVGUwWyhzMSA+PiAxNikgJiAweGZmXSAmIDB4MDBmZjAwMDBVKSBeCisJCShUZTFbKHMyID4+IDI0KSAgICAgICBdICYgMHhmZjAwMDAwMFUpIF4KKwkJcmtbM107CisjZW5kaWYKK30KKworLyoKKyAqIERlY3J5cHQgYSBzaW5nbGUgYmxvY2sKKyAqIGluIGFuZCBvdXQgY2FuIG92ZXJsYXAKKyAqLwordm9pZCBBRVNfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCQkgY29uc3QgQUVTX0tFWSAqa2V5KSB7CisKKwljb25zdCB1MzIgKnJrOworCXUzMiBzMCwgczEsIHMyLCBzMywgdFs0XTsKKwlpbnQgcjsKKworCWFzc2VydChpbiAmJiBvdXQgJiYga2V5KTsKKwlyayA9IGtleS0+cmRfa2V5OworCisJLyoKKwkgKiBtYXAgYnl0ZSBhcnJheSBibG9jayB0byBjaXBoZXIgc3RhdGUKKwkgKiBhbmQgYWRkIGluaXRpYWwgcm91bmQga2V5OgorCSAqLworCXMwID0gR0VUVTMyKGluICAgICApIF4gcmtbMF07CisJczEgPSBHRVRVMzIoaW4gKyAgNCkgXiBya1sxXTsKKwlzMiA9IEdFVFUzMihpbiArICA4KSBeIHJrWzJdOworCXMzID0gR0VUVTMyKGluICsgMTIpIF4gcmtbM107CisKKyNpZiBkZWZpbmVkKEFFU19DT01QQUNUX0lOX09VVEVSX1JPVU5EUykKKwlwcmVmZXRjaDI1NihUZDQpOworCisgICAgICAgIHRbMF0gPQlUZDRbKHMwICAgICAgKSAmIDB4ZmZdICAgICAgIF4KKwkJVGQ0WyhzMyA+PiAgOCkgJiAweGZmXSA8PCAgOCBeCisJCVRkNFsoczIgPj4gMTYpICYgMHhmZl0gPDwgMTYgXgorCQlUZDRbKHMxID4+IDI0KSAgICAgICBdIDw8IDI0OworICAgICAgICB0WzFdID0JVGQ0WyhzMSAgICAgICkgJiAweGZmXSAgICAgICBeCisJCVRkNFsoczAgPj4gIDgpICYgMHhmZl0gPDwgIDggXgorCQlUZDRbKHMzID4+IDE2KSAmIDB4ZmZdIDw8IDE2IF4KKwkJVGQ0WyhzMiA+PiAyNCkgICAgICAgXSA8PCAyNDsKKyAgICAgICAgdFsyXSA9CVRkNFsoczIgICAgICApICYgMHhmZl0gICAgICAgXgorCQlUZDRbKHMxID4+ICA4KSAmIDB4ZmZdIDw8ICA4IF4KKwkJVGQ0WyhzMCA+PiAxNikgJiAweGZmXSA8PCAxNiBeCisJCVRkNFsoczMgPj4gMjQpICAgICAgIF0gPDwgMjQ7CisgICAgICAgIHRbM10gPQlUZDRbKHMzICAgICAgKSAmIDB4ZmZdICAgICAgIF4KKwkJVGQ0WyhzMiA+PiAgOCkgJiAweGZmXSA8PCAgOCBeCisJCVRkNFsoczEgPj4gMTYpICYgMHhmZl0gPDwgMTYgXgorCQlUZDRbKHMwID4+IDI0KSAgICAgICBdIDw8IDI0OworCisJLyogbm93IGRvIHRoZSBsaW5lYXIgdHJhbnNmb3JtIHVzaW5nIHdvcmRzICovIAorCXsJaW50IGk7CisJCXUzMiB0cDEsIHRwMiwgdHA0LCB0cDgsIHRwOSwgdHBiLCB0cGQsIHRwZSwgbTsKKworCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCQl0cDEgPSB0W2ldOworCQkJbSA9IHRwMSAmIDB4ODA4MDgwODA7CisJCQl0cDIgPSAoKHRwMSAmIDB4N2Y3ZjdmN2YpIDw8IDEpIF4KKwkJCQkoKG0gLSAobSA+PiA3KSkgJiAweDFiMWIxYjFiKTsKKwkJCW0gPSB0cDIgJiAweDgwODA4MDgwOworCQkJdHA0ID0gKCh0cDIgJiAweDdmN2Y3ZjdmKSA8PCAxKSBeCisJCQkJKChtIC0gKG0gPj4gNykpICYgMHgxYjFiMWIxYik7CisJCQltID0gdHA0ICYgMHg4MDgwODA4MDsKKwkJCXRwOCA9ICgodHA0ICYgMHg3ZjdmN2Y3ZikgPDwgMSkgXgorCQkJCSgobSAtIChtID4+IDcpKSAmIDB4MWIxYjFiMWIpOworCQkJdHA5ID0gdHA4IF4gdHAxOworCQkJdHBiID0gdHA5IF4gdHAyOworCQkJdHBkID0gdHA5IF4gdHA0OworCQkJdHBlID0gdHA4IF4gdHA0IF4gdHAyOworI2lmIGRlZmluZWQoUk9UQVRFKQorCQkJdFtpXSA9IHRwZSBeIFJPVEFURSh0cGQsMTYpIF4KKwkJCQlST1RBVEUodHA5LDgpIF4gUk9UQVRFKHRwYiwyNCk7CisjZWxzZQorCQkJdFtpXSA9IHRwZSBeICh0cGQgPj4gMTYpIF4gKHRwZCA8PCAxNikgXiAKKwkJCQkodHA5ID4+IDI0KSBeICh0cDkgPDwgOCkgXgorCQkJCSh0cGIgPj4gOCkgXiAodHBiIDw8IDI0KTsKKyNlbmRpZgorCQkJdFtpXSBePSBya1s0K2ldOworCQl9CisJfQorI2Vsc2UKKwl0WzBdID0JVGQwWyhzMCAgICAgICkgJiAweGZmXSBeCisJCVRkMVsoczMgPj4gIDgpICYgMHhmZl0gXgorCQlUZDJbKHMyID4+IDE2KSAmIDB4ZmZdIF4KKwkJVGQzWyhzMSA+PiAyNCkgICAgICAgXSBeCisJCXJrWzRdOworCXRbMV0gPQlUZDBbKHMxICAgICAgKSAmIDB4ZmZdIF4KKwkJVGQxWyhzMCA+PiAgOCkgJiAweGZmXSBeCisJCVRkMlsoczMgPj4gMTYpICYgMHhmZl0gXgorCQlUZDNbKHMyID4+IDI0KSAgICAgICBdIF4KKwkJcmtbNV07CisJdFsyXSA9CVRkMFsoczIgICAgICApICYgMHhmZl0gXgorCQlUZDFbKHMxID4+ICA4KSAmIDB4ZmZdIF4KKwkJVGQyWyhzMCA+PiAxNikgJiAweGZmXSBeCisJCVRkM1soczMgPj4gMjQpICAgICAgIF0gXgorCQlya1s2XTsKKwl0WzNdID0JVGQwWyhzMyAgICAgICkgJiAweGZmXSBeCisJCVRkMVsoczIgPj4gIDgpICYgMHhmZl0gXgorCQlUZDJbKHMxID4+IDE2KSAmIDB4ZmZdIF4KKwkJVGQzWyhzMCA+PiAyNCkgICAgICAgXSBeCisJCXJrWzddOworI2VuZGlmCisJczAgPSB0WzBdOyBzMSA9IHRbMV07IHMyID0gdFsyXTsgczMgPSB0WzNdOworCisgICAgLyoKKyAgICAgKiBOciAtIDIgZnVsbCByb3VuZHM6CisgICAgICovCisgICAgZm9yIChyays9OCxyPWtleS0+cm91bmRzLTI7IHI+MDsgcmsrPTQsci0tKSB7CisjaWYgZGVmaW5lZChBRVNfQ09NUEFDVF9JTl9JTk5FUl9ST1VORFMpCisgICAgICAgIHRbMF0gPQlUZDRbKHMwICAgICAgKSAmIDB4ZmZdICAgICAgIF4KKwkJVGQ0WyhzMyA+PiAgOCkgJiAweGZmXSA8PCAgOCBeCisJCVRkNFsoczIgPj4gMTYpICYgMHhmZl0gPDwgMTYgXgorCQlUZDRbKHMxID4+IDI0KSAgICAgICBdIDw8IDI0OworICAgICAgICB0WzFdID0JVGQ0WyhzMSAgICAgICkgJiAweGZmXSAgICAgICBeCisJCVRkNFsoczAgPj4gIDgpICYgMHhmZl0gPDwgIDggXgorCQlUZDRbKHMzID4+IDE2KSAmIDB4ZmZdIDw8IDE2IF4KKwkJVGQ0WyhzMiA+PiAyNCkgICAgICAgXSA8PCAyNDsKKyAgICAgICAgdFsyXSA9CVRkNFsoczIgICAgICApICYgMHhmZl0gICAgICAgXgorCQlUZDRbKHMxID4+ICA4KSAmIDB4ZmZdIDw8ICA4IF4KKwkJVGQ0WyhzMCA+PiAxNikgJiAweGZmXSA8PCAxNiBeCisJCVRkNFsoczMgPj4gMjQpICAgICAgIF0gPDwgMjQ7CisgICAgICAgIHRbM10gPQlUZDRbKHMzICAgICAgKSAmIDB4ZmZdICAgICAgIF4KKwkJVGQ0WyhzMiA+PiAgOCkgJiAweGZmXSA8PCAgOCBeCisJCVRkNFsoczEgPj4gMTYpICYgMHhmZl0gPDwgMTYgXgorCQlUZDRbKHMwID4+IDI0KSAgICAgICBdIDw8IDI0OworCisJLyogbm93IGRvIHRoZSBsaW5lYXIgdHJhbnNmb3JtIHVzaW5nIHdvcmRzICovIAorCXsJaW50IGk7CisJCXUzMiB0cDEsIHRwMiwgdHA0LCB0cDgsIHRwOSwgdHBiLCB0cGQsIHRwZSwgbTsKKworCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCQl0cDEgPSB0W2ldOworCQkJbSA9IHRwMSAmIDB4ODA4MDgwODA7CisJCQl0cDIgPSAoKHRwMSAmIDB4N2Y3ZjdmN2YpIDw8IDEpIF4KKwkJCQkoKG0gLSAobSA+PiA3KSkgJiAweDFiMWIxYjFiKTsKKwkJCW0gPSB0cDIgJiAweDgwODA4MDgwOworCQkJdHA0ID0gKCh0cDIgJiAweDdmN2Y3ZjdmKSA8PCAxKSBeCisJCQkJKChtIC0gKG0gPj4gNykpICYgMHgxYjFiMWIxYik7CisJCQltID0gdHA0ICYgMHg4MDgwODA4MDsKKwkJCXRwOCA9ICgodHA0ICYgMHg3ZjdmN2Y3ZikgPDwgMSkgXgorCQkJCSgobSAtIChtID4+IDcpKSAmIDB4MWIxYjFiMWIpOworCQkJdHA5ID0gdHA4IF4gdHAxOworCQkJdHBiID0gdHA5IF4gdHAyOworCQkJdHBkID0gdHA5IF4gdHA0OworCQkJdHBlID0gdHA4IF4gdHA0IF4gdHAyOworI2lmIGRlZmluZWQoUk9UQVRFKQorCQkJdFtpXSA9IHRwZSBeIFJPVEFURSh0cGQsMTYpIF4KKwkJCQlST1RBVEUodHA5LDgpIF4gUk9UQVRFKHRwYiwyNCk7CisjZWxzZQorCQkJdFtpXSA9IHRwZSBeICh0cGQgPj4gMTYpIF4gKHRwZCA8PCAxNikgXiAKKwkJCQkodHA5ID4+IDI0KSBeICh0cDkgPDwgOCkgXgorCQkJCSh0cGIgPj4gOCkgXiAodHBiIDw8IDI0KTsKKyNlbmRpZgorCQkJdFtpXSBePSBya1tpXTsKKwkJfQorCX0KKyNlbHNlCisJdFswXSA9CVRkMFsoczAgICAgICApICYgMHhmZl0gXgorCQlUZDFbKHMzID4+ICA4KSAmIDB4ZmZdIF4KKwkJVGQyWyhzMiA+PiAxNikgJiAweGZmXSBeCisJCVRkM1soczEgPj4gMjQpICAgICAgIF0gXgorCQlya1swXTsKKwl0WzFdID0JVGQwWyhzMSAgICAgICkgJiAweGZmXSBeCisJCVRkMVsoczAgPj4gIDgpICYgMHhmZl0gXgorCQlUZDJbKHMzID4+IDE2KSAmIDB4ZmZdIF4KKwkJVGQzWyhzMiA+PiAyNCkgICAgICAgXSBeCisJCXJrWzFdOworCXRbMl0gPQlUZDBbKHMyICAgICAgKSAmIDB4ZmZdIF4KKwkJVGQxWyhzMSA+PiAgOCkgJiAweGZmXSBeCisJCVRkMlsoczAgPj4gMTYpICYgMHhmZl0gXgorCQlUZDNbKHMzID4+IDI0KSAgICAgICBdIF4KKwkJcmtbMl07CisJdFszXSA9CVRkMFsoczMgICAgICApICYgMHhmZl0gXgorCQlUZDFbKHMyID4+ICA4KSAmIDB4ZmZdIF4KKwkJVGQyWyhzMSA+PiAxNikgJiAweGZmXSBeCisJCVRkM1soczAgPj4gMjQpICAgICAgIF0gXgorCQlya1szXTsKKyNlbmRpZgorCXMwID0gdFswXTsgczEgPSB0WzFdOyBzMiA9IHRbMl07IHMzID0gdFszXTsKKyAgICB9CisgICAgLyoKKwkgKiBhcHBseSBsYXN0IHJvdW5kIGFuZAorCSAqIG1hcCBjaXBoZXIgc3RhdGUgdG8gYnl0ZSBhcnJheSBibG9jazoKKwkgKi8KKwlwcmVmZXRjaDI1NihUZDQpOworCisJKih1MzIqKShvdXQrMCkgPQorCQkoVGQ0WyhzMCAgICAgICkgJiAweGZmXSkJXgorCQkoVGQ0WyhzMyA+PiAgOCkgJiAweGZmXSA8PCAgOCkgXgorCQkoVGQ0WyhzMiA+PiAxNikgJiAweGZmXSA8PCAxNikgXgorCQkoVGQ0WyhzMSA+PiAyNCkgICAgICAgXSA8PCAyNCkgXgorCQlya1swXTsKKwkqKHUzMiopKG91dCs0KSA9CisJCShUZDRbKHMxICAgICAgKSAmIDB4ZmZdKQkgXgorCQkoVGQ0WyhzMCA+PiAgOCkgJiAweGZmXSA8PCAgOCkgXgorCQkoVGQ0WyhzMyA+PiAxNikgJiAweGZmXSA8PCAxNikgXgorCQkoVGQ0WyhzMiA+PiAyNCkgICAgICAgXSA8PCAyNCkgXgorCQlya1sxXTsKKwkqKHUzMiopKG91dCs4KSA9CisJCShUZDRbKHMyICAgICAgKSAmIDB4ZmZdKQkgXgorCQkoVGQ0WyhzMSA+PiAgOCkgJiAweGZmXSA8PCAgOCkgXgorCQkoVGQ0WyhzMCA+PiAxNikgJiAweGZmXSA8PCAxNikgXgorCQkoVGQ0WyhzMyA+PiAyNCkgICAgICAgXSA8PCAyNCkgXgorCQlya1syXTsKKwkqKHUzMiopKG91dCsxMikgPQorCQkoVGQ0WyhzMyAgICAgICkgJiAweGZmXSkJIF4KKwkJKFRkNFsoczIgPj4gIDgpICYgMHhmZl0gPDwgIDgpIF4KKwkJKFRkNFsoczEgPj4gMTYpICYgMHhmZl0gPDwgMTYpIF4KKwkJKFRkNFsoczAgPj4gMjQpICAgICAgIF0gPDwgMjQpIF4KKwkJcmtbM107Cit9CmRpZmYgLS1naXQgYS9jcnlwdG8vYWVzL2FzbS9hZXMtNTg2LnBsIGIvY3J5cHRvL2Flcy9hc20vYWVzLTU4Ni5wbAppbmRleCAzYmM0NmE5Li5hYWI0MGU2IDEwMDc1NQotLS0gYS9jcnlwdG8vYWVzL2FzbS9hZXMtNTg2LnBsCisrKyBiL2NyeXB0by9hZXMvYXNtL2Flcy01ODYucGwKQEAgLTIsMTEgKzIsMTIgQEAKICMKICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICMgV3JpdHRlbiBieSBBbmR5IFBvbHlha292IDxhcHByb0BmeS5jaGFsbWVycy5zZT4gZm9yIHRoZSBPcGVuU1NMCi0jIHByb2plY3QuIFJpZ2h0cyBmb3IgcmVkaXN0cmlidXRpb24gYW5kIHVzYWdlIGluIHNvdXJjZSBhbmQgYmluYXJ5Ci0jIGZvcm1zIGFyZSBncmFudGVkIGFjY29yZGluZyB0byB0aGUgT3BlblNTTCBsaWNlbnNlLgorIyBwcm9qZWN0LiBUaGUgbW9kdWxlIGlzLCBob3dldmVyLCBkdWFsIGxpY2Vuc2VkIHVuZGVyIE9wZW5TU0wgYW5kCisjIENSWVBUT0dBTVMgbGljZW5zZXMgZGVwZW5kaW5nIG9uIHdoZXJlIHlvdSBvYnRhaW4gaXQuIEZvciBmdXJ0aGVyCisjIGRldGFpbHMgc2VlIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvfmFwcHJvL2NyeXB0b2dhbXMvLgogIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIwotIyBWZXJzaW9uIDMuNi4KKyMgVmVyc2lvbiA0LjMuCiAjCiAjIFlvdSBtaWdodCBmYWlsIHRvIGFwcHJlY2lhdGUgdGhpcyBtb2R1bGUgcGVyZm9ybWFuY2UgZnJvbSB0aGUgZmlyc3QKICMgdHJ5LiBJZiBjb21wYXJlZCB0byAidmFuaWxsYSIgbGludXgtaWEzMi1pY2MgdGFyZ2V0LCBpLmUuIGNvbnNpZGVyZWQKQEAgLTgxLDExICs4MiwxMTcgQEAKICMgQU1EIEs4CTIwCQkJMTkKICMgUElJSQkJMjUJCQkyMwogIyBQZW50aXVtCTgxCQkJNzgKKyMKKyMgVmVyc2lvbiAzLjcgcmVpbXBsZW1lbnRzIG91dGVyIHJvdW5kcyBhcyAiY29tcGFjdC4iIE1lYW5pbmcgdGhhdAorIyBmaXJzdCBhbmQgbGFzdCByb3VuZHMgcmVmZXJlbmNlIGNvbXBhY3QgMjU2IGJ5dGVzIFMtYm94LiBUaGlzIG1lYW5zCisjIHRoYXQgZmlyc3Qgcm91bmQgY29uc3VtZXMgYSBsb3QgbW9yZSBDUFUgY3ljbGVzIGFuZCB0aGF0IGVuY3J5cHQKKyMgYW5kIGRlY3J5cHQgcGVyZm9ybWFuY2UgYmVjb21lcyBhc3ltbWV0cmljLiBFbmNyeXB0IHBlcmZvcm1hbmNlCisjIGRyb3BzIGJ5IDEwLTEyJSwgd2hpbGUgZGVjcnlwdCAtIGJ5IDIwLTI1JTotKCAyNTYgYnl0ZXMgUy1ib3ggaXMKKyMgYWdncmVzc2l2ZWx5IHByZS1mZXRjaGVkLgorIworIyBWZXJzaW9uIDQuMCBlZmZlY3RpdmVseSByb2xscyBiYWNrIHRvIDMuNiBhbmQgaW5zdGVhZCBpbXBsZW1lbnRzCisjIGFkZGl0aW9uYWwgc2V0IG9mIGZ1bmN0aW9ucywgX1t4ODZ8c3NlXV9BRVNfW2VufGRlXWNyeXB0X2NvbXBhY3QsCisjIHdoaWNoIHVzZSBleGNsdXNpdmVseSAyNTYgYnl0ZSBTLWJveC4gVGhlc2UgZnVuY3Rpb25zIGFyZSB0byBiZQorIyBjYWxsZWQgaW4gbW9kZXMgbm90IGNvbmNlYWxpbmcgcGxhaW4gdGV4dCwgc3VjaCBhcyBFQ0IsIG9yIHdoZW4KKyMgd2UncmUgYXNrZWQgdG8gcHJvY2VzcyBzbWFsbGVyIGFtb3VudCBvZiBkYXRhIFtvciB1bmNvbmRpdGlvbmFsbHkKKyMgb24gaHlwZXItdGhyZWFkaW5nIENQVV0uIEN1cnJlbnRseSBpdCdzIGNhbGxlZCB1bmNvbmRpdGlvbmFsbHkgZnJvbQorIyBBRVNfW2VufGRlXWNyeXB0LCB3aGljaCBhZmZlY3RzIGFsbCBtb2RlcywgYnV0IENCQy4gQ0JDIHJvdXRpbmUKKyMgc3RpbGwgbmVlZHMgdG8gYmUgbW9kaWZpZWQgdG8gc3dpdGNoIGJldHdlZW4gc2xvd2VyIGFuZCBmYXN0ZXIKKyMgbW9kZSB3aGVuIGFwcHJvcHJpYXRlLi4uIEJ1dCBpbiBlaXRoZXIgY2FzZSBiZW5jaG1hcmsgbGFuZHNjYXBlCisjIGNoYW5nZXMgZHJhbWF0aWNhbGx5IGFuZCBiZWxvdyBudW1iZXJzIGFyZSBDUFUgY3ljbGVzIHBlciBwcm9jZXNzZWQKKyMgYnl0ZSBmb3IgMTI4LWJpdCBrZXkuCisjCisjCQlFQ0IgZW5jcnlwdAlFQ0IgZGVjcnlwdAlDQkMgbGFyZ2UgY2h1bmsKKyMgUDQJCTU2WzYwXQkJODRbMTAwXQkJMjMKKyMgQU1EIEs4CTQ4WzQ0XQkJNzBbNzldCQkxOAorIyBQSUlJCQk0MVs1MF0JCTYxWzkxXQkJMjQKKyMgQ29yZSAyCTMyWzM4XQkJNDVbNzBdCQkxOC41CisjIFBlbnRpdW0JMTIwCQkxNjAJCTc3CisjCisjIFZlcnNpb24gNC4xIHN3aXRjaGVzIHRvIGNvbXBhY3QgUy1ib3ggZXZlbiBpbiBrZXkgc2NoZWR1bGUgc2V0dXAuCisjCisjIFZlcnNpb24gNC4yIHByZWZldGNoZXMgY29tcGFjdCBTLWJveCBpbiBldmVyeSBTU0Ugcm91bmQgb3IgaW4gb3RoZXIKKyMgd29yZHMgZXZlcnkgY2FjaGUtbGluZSBpcyAqZ3VhcmFudGVlZCogdG8gYmUgYWNjZXNzZWQgd2l0aGluIH41MAorIyBjeWNsZXMgd2luZG93LiBXaHkganVzdCBTU0U/IEJlY2F1c2UgaXQncyBuZWVkZWQgb24gaHlwZXItdGhyZWFkaW5nCisjIENQVSEgV2hpY2ggaXMgYWxzbyB3aHkgaXQncyBwcmVmZXRjaGVkIHdpdGggNjQgYnl0ZSBzdHJpZGUuIEJlc3QKKyMgcGFydCBpcyB0aGF0IGl0IGhhcyBubyBuZWdhdGl2ZSBlZmZlY3Qgb24gcGVyZm9ybWFuY2U6LSkgIAorIworIyBWZXJzaW9uIDQuMyBpbXBsZW1lbnRzIHN3aXRjaCBiZXR3ZWVuIGNvbXBhY3QgYW5kIG5vbi1jb21wYWN0IGJsb2NrCisjIGZ1bmN0aW9ucyBpbiBBRVNfY2JjX2VuY3J5cHQgZGVwZW5kaW5nIG9uIGhvdyBtdWNoIGRhdGEgd2FzIGFza2VkCisjIHRvIGJlIHByb2Nlc3NlZCBpbiBvbmUgc3Ryb2tlLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUaW1pbmcgYXR0YWNrcyBhcmUgY2xhc3NpZmllZCBpbiB0d28gY2xhc3Nlczogc3luY2hyb25vdXMgd2hlbgorIyBhdHRhY2tlciBjb25zY2lvdXNseSBpbml0aWF0ZXMgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb24gYW5kIGNvbGxlY3RzCisjIHRpbWluZyBkYXRhIG9mIHZhcmlvdXMgY2hhcmFjdGVyIGFmdGVyd2FyZHMsIGFuZCBhc3luY2hyb25vdXMgd2hlbgorIyBtYWxpY2lvdXMgY29kZSBpcyBleGVjdXRlZCBvbiBzYW1lIENQVSBzaW11bHRhbmVvdXNseSB3aXRoIEFFUywKKyMgaW5zdHJ1bWVudHMgaXRzZWxmIGFuZCBwZXJmb3JtcyBzdGF0aXN0aWNhbCBhbmFseXNpcyBvZiB0aGlzIGRhdGEuCisjCisjIEFzIGZhciBhcyBzeW5jaHJvbm91cyBhdHRhY2tzIGdvIHRoZSByb290IHRvIHRoZSBBRVMgdGltaW5nCisjIHZ1bG5lcmFiaWxpdHkgaXMgdHdvZm9sZC4gRmlyc3RseSwgb2YgMjU2IFMtYm94IGVsZW1lbnRzIGF0IG1vc3QgMTYwCisjIGFyZSByZWZlcnJlZCB0byBpbiBzaW5nbGUgMTI4LWJpdCBibG9jayBvcGVyYXRpb24uIFdlbGwsIGluIEMKKyMgaW1wbGVtZW50YXRpb24gd2l0aCA0IGRpc3RpbmN0IHRhYmxlcyBpdCdzIGFjdHVhbGx5IGFzIGxpdHRsZSBhcyA0MAorIyByZWZlcmVuY2VzIHBlciAyNTYgZWxlbWVudHMgdGFibGUsIGJ1dCBhbnl3YXkuLi4gU2Vjb25kbHksIGV2ZW4KKyMgdGhvdWdoIFMtYm94IGVsZW1lbnRzIGFyZSBjbHVzdGVyZWQgaW50byBzbWFsbGVyIGFtb3VudCBvZiBjYWNoZS0KKyMgbGluZXMsIHNtYWxsZXIgdGhhbiAxNjAgYW5kIGV2ZW4gNDAsIGl0IHR1cm5lZCBvdXQgdGhhdCBmb3IgY2VydGFpbgorIyBwbGFpbi10ZXh0IHBhdHRlcm5bc10gb3Igc2ltcGx5IHB1dCBjaG9zZW4gcGxhaW4tdGV4dCBhbmQgZ2l2ZW4ga2V5CisjIGZldyBjYWNoZS1saW5lcyByZW1haW4gdW5hY2Nlc3NlZCBkdXJpbmcgYmxvY2sgb3BlcmF0aW9uLiBOb3csIGlmCisjIGF0dGFja2VyIGNhbiBmaWd1cmUgb3V0IHRoaXMgYWNjZXNzIHBhdHRlcm4sIGhlIGNhbiBkZWR1Y3QgdGhlIGtleQorIyBbb3IgYXQgbGVhc3QgcGFydCBvZiBpdF0uIFRoZSBuYXR1cmFsIHdheSB0byBtaXRpZ2F0ZSB0aGlzIGtpbmQgb2YKKyMgYXR0YWNrcyBpcyB0byBtaW5pbWl6ZSB0aGUgYW1vdW50IG9mIGNhY2hlLWxpbmVzIGluIFMtYm94IGFuZC9vcgorIyBwcmVmZXRjaCB0aGVtIHRvIGVuc3VyZSB0aGF0IGV2ZXJ5IG9uZSBpcyBhY2Nlc3NlZCBmb3IgbW9yZSB1bmlmb3JtCisjIHRpbWluZy4gQnV0IG5vdGUgdGhhdCAqaWYqIHBsYWluLXRleHQgd2FzIGNvbmNlYWxlZCBpbiBzdWNoIHdheSB0aGF0CisjIGlucHV0IHRvIGJsb2NrIGZ1bmN0aW9uIGlzIGRpc3RyaWJ1dGVkICp1bmlmb3JtbHkqLCB0aGVuIGF0dGFjaworIyB3b3VsZG4ndCBhcHBseS4gTm93IG5vdGUgdGhhdCBzb21lIGVuY3J5cHRpb24gbW9kZXMsIG1vc3Qgbm90YWJseQorIyBDQkMsIGRvIG1hc2sgdGhlIHBsYWluLXRleHQgaW4gdGhpcyBleGFjdCB3YXkgW3NlY3VyZSBjaXBoZXIgb3V0cHV0CisjIGlzIGRpc3RyaWJ1dGVkIHVuaWZvcm1seV0uIFllcywgb25lIHN0aWxsIG1pZ2h0IGZpbmQgaW5wdXQgdGhhdAorIyB3b3VsZCByZXZlYWwgdGhlIGluZm9ybWF0aW9uIGFib3V0IGdpdmVuIGtleSwgYnV0IGlmIGFtb3VudCBvZgorIyBjYW5kaWRhdGUgaW5wdXRzIHRvIGJlIHRyaWVkIGlzIGxhcmdlciB0aGFuIGFtb3VudCBvZiBwb3NzaWJsZSBrZXkKKyMgY29tYmluYXRpb25zIHRoZW4gYXR0YWNrIGJlY29tZXMgaW5mZWFzaWJsZS4gVGhpcyBpcyB3aHkgcmV2aXNlZAorIyBBRVNfY2JjX2VuY3J5cHQgImRhcmVzIiB0byBzd2l0Y2ggdG8gbGFyZ2VyIFMtYm94IHdoZW4gbGFyZ2VyIGNodW5rCisjIG9mIGRhdGEgaXMgdG8gYmUgcHJvY2Vzc2VkIGluIG9uZSBzdHJva2UuIFRoZSBjdXJyZW50IHNpemUgbGltaXQgb2YKKyMgNTEyIGJ5dGVzIGlzIGNob3NlbiB0byBwcm92aWRlIHNhbWUgW2RpbWluaXNoaWdseSBsb3ddIHByb2JhYmlsaXR5CisjIGZvciBjYWNoZS1saW5lIHRvIHJlbWFpbiB1bnRvdWNoZWQgaW4gbGFyZ2UgY2h1bmsgb3BlcmF0aW9uIHdpdGgKKyMgbGFyZ2UgUy1ib3ggYXMgZm9yIHNpbmdsZSBibG9jayBvcGVyYXRpb24gd2l0aCBjb21wYWN0IFMtYm94IGFuZAorIyBzdXJlbHkgbmVlZHMgbW9yZSBjYXJlZnVsIGNvbnNpZGVyYXRpb24uLi4KKyMKKyMgQXMgZm9yIGFzeW5jaHJvbm91cyBhdHRhY2tzLiBUaGVyZSBhcmUgdHdvIGZsYXZvdXJzOiBhdHRhY2tlciBjb2RlCisjIGJlaW5nIGludGVybGVhdmVkIHdpdGggQUVTIG9uIGh5cGVyLXRocmVhZGluZyBDUFUgYXQgKmluc3RydWN0aW9uKgorIyBsZXZlbCwgYW5kIHR3byBwcm9jZXNzZXMgdGltZSBzaGFyaW5nIHNpbmdsZSBjb3JlLiBBcyBmb3IgbGF0dGVyLgorIyBUd28gdmVjdG9ycy4gMS4gR2l2ZW4gdGhhdCBhdHRhY2tlciBwcm9jZXNzIGhhcyBoaWdoZXIgcHJpb3JpdHksCisjIHlpZWxkIGV4ZWN1dGlvbiB0byBwcm9jZXNzIHBlcmZvcm1pbmcgQUVTIGp1c3QgYmVmb3JlIHRpbWVyIGZpcmVzCisjIG9mZiB0aGUgc2NoZWR1bGVyLCBpbW1lZGlhdGVseSByZWdhaW4gY29udHJvbCBvZiBDUFUgYW5kIGFuYWx5emUgdGhlCisjIGNhY2hlIHN0YXRlLiBGb3IgdGhpcyBhdHRhY2sgdG8gYmUgZWZmaWNpZW50IGF0dGFja2VyIHdvdWxkIGhhdmUgdG8KKyMgZWZmZWN0aXZlbHkgc2xvdyBkb3duIHRoZSBvcGVyYXRpb24gYnkgc2V2ZXJhbCAqb3JkZXJzKiBvZiBtYWduaXR1dGUsCisjIGJ5IHJhdGlvIG9mIHRpbWUgc2xpY2UgdG8gZHVyYXRpb24gb2YgaGFuZGZ1bCBvZiBBRVMgcm91bmRzLCB3aGljaAorIyB1bmxpa2VseSB0byByZW1haW4gdW5ub3RpY2VkLiBOb3QgdG8gbWVudGlvbiB0aGF0IHRoaXMgYWxzbyBtZWFucworIyB0aGF0IGhlIHdvdWxkIHNwZW5kIGNvcnJlc3BvbmRpZ2x5IG1vcmUgdGltZSB0byBjb2xsZWN0IGVub3VnaAorIyBzdGF0aXN0aWNhbCBkYXRhIHRvIG1vdW50IHRoZSBhdHRhY2suIEl0J3MgcHJvYmFibHkgYXBwcm9wcmlhdGUgdG8KKyMgc2F5IHRoYXQgaWYgYWRldmVyc2FyeSByZWNrb25zIHRoYXQgdGhpcyBhdHRhY2sgaXMgYmVuZWZpY2lhbCBhbmQKKyMgcmlza3MgdG8gYmUgbm90aWNlZCwgeW91IHByb2JhYmx5IGhhdmUgbGFyZ2VyIHByb2JsZW1zIGhhdmluZyBoaW0KKyMgbWVyZSBvcHBvcnR1bml0eS4gSW4gb3RoZXIgd29yZHMgc3VnZ2VzdGVkIGNvZGUgZGVzaWduIGV4cGVjdHMgeW91CisjIHRvIHByZWNsdWRlL21pdGlnYXRlIHRoaXMgYXR0YWNrIGJ5IG92ZXJhbGwgc3lzdGVtIHNlY3VyaXR5IGRlc2lnbi4KKyMgMi4gQXR0YWNrZXIgbWFuYWdlcyB0byBtYWtlIGhpcyBjb2RlIGludGVycnVwdCBkcml2ZW4uIEluIG9yZGVyIGZvcgorIyB0aGlzIGtpbmQgb2YgYXR0YWNrIHRvIGJlIGZlYXNpYmxlLCBpbnRlcnJ1cHQgcmF0ZSBoYXMgdG8gYmUgaGlnaAorIyBlbm91Z2gsIGFnYWluIGNvbXBhcmFibGUgdG8gZHVyYXRpb24gb2YgaGFuZGZ1bCBvZiBBRVMgcm91bmRzLiBCdXQKKyMgaXMgdGhlcmUgaW50ZXJydXB0IHNvdXJjZSBvZiBzdWNoIHJhdGU/IEhhcmRseSwgbm90IGV2ZW4gMUdicHMgTklDCisjIGdlbmVyYXRlcyBpbnRlcnJ1cHRzIGF0IHN1Y2ggcmFnaW5nIHJhdGUuLi4KKyMKKyMgQW5kIG5vdyBiYWNrIHRvIHRoZSBmb3JtZXIsIGh5cGVyLXRocmVhZGluZyBDUFUgb3IgbW9yZSBzcGVjaWZpY2FsbHkKKyMgSW50ZWwgUDQuIFJlY2FsbCB0aGF0IGFzeW5jaHJvbm91cyBhdHRhY2sgaW1wbGllcyB0aGF0IG1hbGljaW91cworIyBjb2RlIGluc3RydW1lbnRzIGl0c2VsZi4gQW5kIG5hdHVyYWxseSBpbnN0cnVtZW50YXRpb24gZ3JhbnVsYXJpdHkKKyMgaGFzIGJlIG5vdGljZWFibHkgbG93ZXIgdGhhbiBkdXJhdGlvbiBvZiBjb2RlcGF0aCBhY2Nlc3NpbmcgUy1ib3guCisjIEdpdmVuIHRoYXQgYWxsIGNhY2hlLWxpbmVzIGFyZSBhY2Nlc3NlZCBkdXJpbmcgdGhhdCB0aW1lIHRoYXQgaXMuCisjIEN1cnJlbnQgaW1wbGVtZW50YXRpb24gYWNjZXNzZXMgKmFsbCogY2FjaGUtbGluZXMgd2l0aGluIH41MCBjeWNsZXMKKyMgd2luZG93LCB3aGljaCBpcyBhY3R1YWxseSAqbGVzcyogdGhhbiBSRFRTQyBsYXRlbmN5IG9uIEludGVsIFA0IQogCi1wdXNoKEBJTkMsInBlcmxhc20iLCIuLi8uLi9wZXJsYXNtIik7CiskMCA9fiBtLyguKltcL1xcXSlbXlwvXFxdKyQvOyAkZGlyPSQxOworcHVzaChASU5DLCIke2Rpcn0iLCIke2Rpcn0uLi8uLi9wZXJsYXNtIik7CiByZXF1aXJlICJ4ODZhc20ucGwiOwogCi0mYXNtX2luaXQoJEFSR1ZbMF0sImFlcy01ODYucGwiLCRBUkdWWyQjQVJHVl0gZXEgIjM4NiIpOworJmFzbV9pbml0KCRBUkdWWzBdLCJhZXMtNTg2LnBsIiwkeDg2b25seSA9ICRBUkdWWyQjQVJHVl0gZXEgIjM4NiIpOworJnN0YXRpY19sYWJlbCgiQUVTX1RlIik7Cismc3RhdGljX2xhYmVsKCJBRVNfVGQiKTsKIAogJHMwPSJlYXgiOwogJHMxPSJlYngiOwpAQCAtOTMsMjEgKzIwMCwzNiBAQAogJHMzPSJlZHgiOwogJGtleT0iZWRpIjsKICRhY2M9ImVzaSI7CiskdGJsPSJlYnAiOwogCi0kY29tcHJvbWlzZT0wOwkJIyAkY29tcHJvbWlzZT0xMjggYWJzdGFpbnMgZnJvbSBjb3B5aW5nIGtleQotCQkJIyBzY2hlZHVsZSB0byBzdGFjayB3aGVuIGVuY3J5cHRpbmcgaW5wdXRzCi0JCQkjIHNob3J0ZXIgdGhhbiAxMjggYnl0ZXMgYXQgdGhlIGNvc3Qgb2YKLQkJCSMgcmlza3NpbmcgYWxpYXNpbmcgd2l0aCBTLWJveGVzLiBJbiByZXR1cm4KLQkJCSMgeW91IGdldCB3YXkgYmV0dGVyLCB1cCB0byArNzAlLCBzbWFsbCBibG9jawotCQkJIyBwZXJmb3JtYW5jZS4KKyMgc3RhY2sgZnJhbWUgbGF5b3V0IGluIF9beDg2fHNzZV1fQUVTXyogcm91dGluZXMsIGZyYW1lIGlzIGFsbG9jYXRlZAorIyBieSBjYWxsZXIKKyRfX3JhPSZEV1AoMCwiZXNwIik7CSMgcmV0dXJuIGFkZHJlc3MKKyRfX3MwPSZEV1AoNCwiZXNwIik7CSMgczAgYmFja2luZyBzdG9yZQorJF9fczE9JkRXUCg4LCJlc3AiKTsJIyBzMSBiYWNraW5nIHN0b3JlCiskX19zMj0mRFdQKDEyLCJlc3AiKTsJIyBzMiBiYWNraW5nIHN0b3JlCiskX19zMz0mRFdQKDE2LCJlc3AiKTsJIyBzMyBiYWNraW5nIHN0b3JlCiskX19rZXk9JkRXUCgyMCwiZXNwIik7CSMgcG9pbnRlciB0byBrZXkgc2NoZWR1bGUKKyRfX2VuZD0mRFdQKDI0LCJlc3AiKTsJIyBwb2ludGVyIHRvIGVuZCBvZiBrZXkgc2NoZWR1bGUKKyRfX3RibD0mRFdQKDI4LCJlc3AiKTsJIyAlZWJwIGJhY2tpbmcgc3RvcmUKKworIyBzdGFjayBmcmFtZSBsYXlvdXQgaW4gQUVTX1tlbnxjcnlwdF0gcm91dGluZXMsIHdoaWNoIGRpZmZlcnMgZnJvbQorIyBhYm92ZSBieSA0IGFuZCBvdmVybGFwcyBieSAlZWJwIGJhY2tpbmcgc3RvcmUKKyRfdGJsPSZEV1AoMjQsImVzcCIpOworJF9lc3A9JkRXUCgyOCwiZXNwIik7CisKK3N1YiBfZGF0YV93b3JkKCkgeyBteSAkaTsgd2hpbGUoZGVmaW5lZCgkaT1zaGlmdCkpIHsgJmRhdGFfd29yZCgkaSwkaSk7IH0gfQorCiskc3BlZWRfbGltaXQ9NTEyOwkjIGNodW5rcyBzbWFsbGVyIHRoYW4gJHNwZWVkX2xpbWl0IGFyZQorCQkJIyBwcm9jZXNzZWQgd2l0aCBjb21wYWN0IHJvdXRpbmUgaW4gQ0JDIG1vZGUKICRzbWFsbF9mb290cHJpbnQ9MTsJIyAkc21hbGxfZm9vdHByaW50PTEgY29kZSBpcyB+NSUgc2xvd2VyIFtvbgogCQkJIyByZWNlbnQgtS1hcmNoc10sIGJ1dCB+NSB0aW1lcyBzbWFsbGVyIQogCQkJIyBJIGZhdm9yIGNvbXBhY3QgY29kZSB0byBtaW5pbWl6ZSBjYWNoZQogCQkJIyBjb250ZW50aW9uIGFuZCBpbiBob3BlIHRvICJjb2xsZWN0IiA1JSBiYWNrCiAJCQkjIGluIHJlYWwtbGlmZSBhcHBsaWNhdGlvbnMuLi4KKwogJHZlcnRpY2FsX3NwaW49MDsJIyBzaGlmdCAidmVydGljYWx5IiBkZWZhdWx0cyB0byAwLCBiZWNhdXNlIG9mCiAJCQkjIGl0cyBwcm9vZi1vZi1jb25jZXB0IHN0YXR1cy4uLgotCiAjIE5vdGUgdGhhdCB0aGVyZSBpcyBubyBkZWN2ZXJ0KCksIGFzIHdlbGwgYXMgbGFzdCBlbmNyeXB0aW9uIHJvdW5kIGlzCiAjIHBlcmZvcm1lZCB3aXRoICJob3Jpem9udGFsIiBzaGlmdHMuIFRoaXMgaXMgYmVjYXVzZSB0aGlzICJ2ZXJ0aWNhbCIKICMgaW1wbGVtZW50YXRpb24gW29uZSB3aGljaCBncm91cHMgc2hpZnRzIG9uIGEgZ2l2ZW4gJHNbaV0gdG8gZm9ybSBhCkBAIC0xNzAsMTcgKzI5Miw0ODQgQEAKIAkmbW92egkoJHYwLCZIQigkdjEpKTsKIAkmYW5kCSgkdjEsMHhGRik7CiAJJnhvcgkoJHNbM10sJkRXUCgyLCR0ZSwkdjEsOCkpOwkJIyBzMT4+MTYKLQkgJm1vdgkoJGtleSwmRFdQKDEyLCJlc3AiKSk7CQkJIyByZWluY2FybmF0ZSB2MSBhcyBrZXkKKwkgJm1vdgkoJGtleSwkX19rZXkpOwkJCQkjIHJlaW5jYXJuYXRlIHYxIGFzIGtleQogCSZ4b3IJKCRzWzJdLCZEV1AoMSwkdGUsJHYwLDgpKTsJCSMgczE+PjI0CiB9CiAKKyMgQW5vdGhlciBleHBlcmltZW50YWwgcm91dGluZSwgd2hpY2ggZmVhdHVyZXMgImhvcml6b250YWwgc3BpbiwiIGJ1dAorIyBlbGltaW5hdGVzIG9uZSByZWZlcmVuY2UgdG8gc3RhY2suIFN0cmFuZ2VseSBlbm91Z2ggcnVucyBzbG93ZXIuLi4KK3N1YiBlbmNob3JpeigpCit7IG15ICR2MCA9ICRrZXksICR2MSA9ICRhY2M7CisKKwkmbW92egkoJHYwLCZMQigkczApKTsJCQkjICAzLCAyLCAxLCAwKgorCSZyb3RyCSgkczIsOCk7CQkJIyAgOCwxMSwxMCwgOQorCSZtb3YJKCR2MSwmRFdQKDAsJHRlLCR2MCw4KSk7CSMgIDAKKwkmbW92egkoJHYwLCZIQigkczEpKTsJCQkjICA3LCA2LCA1KiwgNAorCSZyb3RyCSgkczMsMTYpOwkJCSMgMTMsMTIsMTUsMTQKKwkmeG9yCSgkdjEsJkRXUCgzLCR0ZSwkdjAsOCkpOwkjICA1CisJJm1vdnoJKCR2MCwmSEIoJHMyKSk7CQkJIyAgOCwxMSwxMCosIDkKKwkmcm90cgkoJHMwLDE2KTsJCQkjICAxLCAwLCAzLCAyCisJJnhvcgkoJHYxLCZEV1AoMiwkdGUsJHYwLDgpKTsJIyAxMAorCSZtb3Z6CSgkdjAsJkhCKCRzMykpOwkJCSMgMTMsMTIsMTUqLDE0CisJJnhvcgkoJHYxLCZEV1AoMSwkdGUsJHYwLDgpKTsJIyAxNSwgdFswXSBjb2xsZWN0ZWQKKwkmbW92CSgkX19zMCwkdjEpOwkJCSMgdFswXSBzYXZlZAorCisJJm1vdnoJKCR2MCwmTEIoJHMxKSk7CQkJIyAgNywgNiwgNSwgNCoKKwkmc2hyCSgkczEsMTYpOwkJCSMgIC0sIC0sIDcsIDYKKwkmbW92CSgkdjEsJkRXUCgwLCR0ZSwkdjAsOCkpOwkjICA0CisJJm1vdnoJKCR2MCwmTEIoJHMzKSk7CQkJIyAxMywxMiwxNSwxNCoKKwkmeG9yCSgkdjEsJkRXUCgyLCR0ZSwkdjAsOCkpOwkjIDE0CisJJm1vdnoJKCR2MCwmSEIoJHMwKSk7CQkJIyAgMSwgMCwgMyosIDIKKwkmYW5kCSgkczMsMHhmZmZmMDAwMCk7CQkjIDEzLDEyLCAtLCAtCisJJnhvcgkoJHYxLCZEV1AoMSwkdGUsJHYwLDgpKTsJIyAgMworCSZtb3Z6CSgkdjAsJkxCKCRzMikpOwkJCSMgIDgsMTEsMTAsIDkqCisJJm9yCSgkczMsJHMxKTsJCQkjIDEzLDEyLCA3LCA2CisJJnhvcgkoJHYxLCZEV1AoMywkdGUsJHYwLDgpKTsJIyAgOSwgdFsxXSBjb2xsZWN0ZWQKKwkmbW92CSgkczEsJHYxKTsJCQkjICBzWzFdPXRbMV0KKworCSZtb3Z6CSgkdjAsJkxCKCRzMCkpOwkJCSMgIDEsIDAsIDMsIDIqCisJJnNocgkoJHMyLDE2KTsJCQkjICAtLCAtLCA4LDExCisJJm1vdgkoJHYxLCZEV1AoMiwkdGUsJHYwLDgpKTsJIyAgMgorCSZtb3Z6CSgkdjAsJkhCKCRzMykpOwkJCSMgMTMsMTIsIDcqLCA2CisJJnhvcgkoJHYxLCZEV1AoMSwkdGUsJHYwLDgpKTsJIyAgNworCSZtb3Z6CSgkdjAsJkhCKCRzMikpOwkJCSMgIC0sIC0sIDgqLDExCisJJnhvcgkoJHYxLCZEV1AoMCwkdGUsJHYwLDgpKTsJIyAgOAorCSZtb3YJKCR2MCwkczMpOworCSZzaHIJKCR2MCwyNCk7CQkJIyAxMworCSZ4b3IJKCR2MSwmRFdQKDMsJHRlLCR2MCw4KSk7CSMgMTMsIHRbMl0gY29sbGVjdGVkCisKKwkmbW92egkoJHYwLCZMQigkczIpKTsJCQkjICAtLCAtLCA4LDExKgorCSZzaHIJKCRzMCwyNCk7CQkJIyAgMSoKKwkmbW92CSgkczIsJkRXUCgxLCR0ZSwkdjAsOCkpOwkjIDExCisJJnhvcgkoJHMyLCZEV1AoMywkdGUsJHMwLDgpKTsJIyAgMQorCSZtb3YJKCRzMCwkX19zMCk7CQkJIyBzWzBdPXRbMF0KKwkmbW92egkoJHYwLCZMQigkczMpKTsJCQkjIDEzLDEyLCA3LCA2KgorCSZzaHIJKCRzMywxNik7CQkJIyAgICwgICwxMywxMgorCSZ4b3IJKCRzMiwmRFdQKDIsJHRlLCR2MCw4KSk7CSMgIDYKKwkmbW92CSgka2V5LCRfX2tleSk7CQkJIyByZWluY2FybmF0ZSB2MCBhcyBrZXkKKwkmYW5kCSgkczMsMHhmZik7CQkJIyAgICwgICwxMywxMioKKwkmbW92CSgkczMsJkRXUCgwLCR0ZSwkczMsOCkpOwkjIDEyCisJJnhvcgkoJHMzLCRzMik7CQkJIyBzWzJdPXRbM10gY29sbGVjdGVkCisJJm1vdgkoJHMyLCR2MSk7CQkJIyBzWzJdPXRbMl0KK30KKworIyBNb3JlIGV4cGVyaW1lbnRhbCBjb2RlLi4uIFNTRSBvbmUuLi4gRXZlbiB0aG91Z2ggdGhpcyBvbmUgZWxpbWluYXRlcworIyAqYWxsKiByZWZlcmVuY2VzIHRvIHN0YWNrLCBpdCdzIG5vdCBmYXN0ZXIuLi4KK3N1YiBzc2VfZW5jYm9keSgpCit7CisJJm1vdnoJKCRhY2MsJkxCKCJlYXgiKSk7CQkjICAwCisJJm1vdgkoImVjeCIsJkRXUCgwLCR0YmwsJGFjYyw4KSk7CSMgIDAKKwkmcHNodWZ3CSgibW0yIiwibW0wIiwweDBkKTsJCSMgIDcsIDYsIDMsIDIKKwkmbW92egkoImVkeCIsJkhCKCJlYXgiKSk7CQkjICAxCisJJm1vdgkoImVkeCIsJkRXUCgzLCR0YmwsImVkeCIsOCkpOwkjICAxCisJJnNocgkoImVheCIsMTYpOwkJCSMgIDUsIDQKKworCSZtb3Z6CSgkYWNjLCZMQigiZWJ4IikpOwkJIyAxMAorCSZ4b3IJKCJlY3giLCZEV1AoMiwkdGJsLCRhY2MsOCkpOwkjIDEwCisJJnBzaHVmdwkoIm1tNiIsIm1tNCIsMHgwOCk7CQkjIDEzLDEyLCA5LCA4CisJJm1vdnoJKCRhY2MsJkhCKCJlYngiKSk7CQkjIDExCisJJnhvcgkoImVkeCIsJkRXUCgxLCR0YmwsJGFjYyw4KSk7CSMgMTEKKwkmc2hyCSgiZWJ4IiwxNik7CQkJIyAxNSwxNAorCisJJm1vdnoJKCRhY2MsJkhCKCJlYXgiKSk7CQkjICA1CisJJnhvcgkoImVjeCIsJkRXUCgzLCR0YmwsJGFjYyw4KSk7CSMgIDUKKwkmbW92cQkoIm1tMyIsUVdQKDE2LCRrZXkpKTsKKwkmbW92egkoJGFjYywmSEIoImVieCIpKTsJCSMgMTUKKwkmeG9yCSgiZWN4IiwmRFdQKDEsJHRibCwkYWNjLDgpKTsJIyAxNQorCSZtb3ZkCSgibW0wIiwiZWN4Iik7CQkJIyB0WzBdIGNvbGxlY3RlZAorCisJJm1vdnoJKCRhY2MsJkxCKCJlYXgiKSk7CQkjICA0CisJJm1vdgkoImVjeCIsJkRXUCgwLCR0YmwsJGFjYyw4KSk7CSMgIDQKKwkmbW92ZAkoImVheCIsIm1tMiIpOwkJCSMgIDcsIDYsIDMsIDIKKwkmbW92egkoJGFjYywmTEIoImVieCIpKTsJCSMgMTQKKwkmeG9yCSgiZWN4IiwmRFdQKDIsJHRibCwkYWNjLDgpKTsJIyAxNAorCSZtb3ZkCSgiZWJ4IiwibW02Iik7CQkJIyAxMywxMiwgOSwgOAorCisJJm1vdnoJKCRhY2MsJkhCKCJlYXgiKSk7CQkjICAzCisJJnhvcgkoImVjeCIsJkRXUCgxLCR0YmwsJGFjYyw4KSk7CSMgIDMKKwkmbW92egkoJGFjYywmSEIoImVieCIpKTsJCSMgIDkKKwkmeG9yCSgiZWN4IiwmRFdQKDMsJHRibCwkYWNjLDgpKTsJIyAgOQorCSZtb3ZkCSgibW0xIiwiZWN4Iik7CQkJIyB0WzFdIGNvbGxlY3RlZAorCisJJm1vdnoJKCRhY2MsJkxCKCJlYXgiKSk7CQkjICAyCisJJm1vdgkoImVjeCIsJkRXUCgyLCR0YmwsJGFjYyw4KSk7CSMgIDIKKwkmc2hyCSgiZWF4IiwxNik7CQkJIyAgNywgNgorCSZwdW5wY2tsZHEJKCJtbTAiLCJtbTEiKTsJCSMgdFswLDFdIGNvbGxlY3RlZAorCSZtb3Z6CSgkYWNjLCZMQigiZWJ4IikpOwkJIyAgOAorCSZ4b3IJKCJlY3giLCZEV1AoMCwkdGJsLCRhY2MsOCkpOwkjICA4CisJJnNocgkoImVieCIsMTYpOwkJCSMgMTMsMTIKKworCSZtb3Z6CSgkYWNjLCZIQigiZWF4IikpOwkJIyAgNworCSZ4b3IJKCJlY3giLCZEV1AoMSwkdGJsLCRhY2MsOCkpOwkjICA3CisJJnB4b3IJKCJtbTAiLCJtbTMiKTsKKwkmbW92egkoImVheCIsJkxCKCJlYXgiKSk7CQkjICA2CisJJnhvcgkoImVkeCIsJkRXUCgyLCR0YmwsImVheCIsOCkpOwkjICA2CisJJnBzaHVmdwkoIm1tMSIsIm1tMCIsMHgwOCk7CQkjICA1LCA0LCAxLCAwCisJJm1vdnoJKCRhY2MsJkhCKCJlYngiKSk7CQkjIDEzCisJJnhvcgkoImVjeCIsJkRXUCgzLCR0YmwsJGFjYyw4KSk7CSMgMTMKKwkmeG9yCSgiZWN4IiwmRFdQKDI0LCRrZXkpKTsJCSMgdFsyXQorCSZtb3ZkCSgibW00IiwiZWN4Iik7CQkJIyB0WzJdIGNvbGxlY3RlZAorCSZtb3Z6CSgiZWJ4IiwmTEIoImVieCIpKTsJCSMgMTIKKwkmeG9yCSgiZWR4IiwmRFdQKDAsJHRibCwiZWJ4Iiw4KSk7CSMgMTIKKwkmc2hyCSgiZWN4IiwxNik7CisJJm1vdmQJKCJlYXgiLCJtbTEiKTsJCQkjICA1LCA0LCAxLCAwCisJJm1vdgkoImVieCIsJkRXUCgyOCwka2V5KSk7CQkjIHRbM10KKwkmeG9yCSgiZWJ4IiwiZWR4Iik7CisJJm1vdmQJKCJtbTUiLCJlYngiKTsJCQkjIHRbM10gY29sbGVjdGVkCisJJmFuZAkoImVieCIsMHhmZmZmMDAwMCk7CisJJm9yCSgiZWJ4IiwiZWN4Iik7CisKKwkmcHVucGNrbGRxCSgibW00IiwibW01Iik7CQkjIHRbMiwzXSBjb2xsZWN0ZWQKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAiQ29tcGFjdCIgYmxvY2sgZnVuY3Rpb24KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworc3ViIGVuY2NvbXBhY3QoKQoreyBteSAkRm4gPSBtb3Y7CisgIHdoaWxlICgkI18+NSkgeyBwb3AoQF8pOyAkRm49c3Vie307IH0KKyAgbXkgKCRpLCR0ZSxAcyk9QF87CisgIG15ICR0bXAgPSAka2V5OworICBteSAkb3V0ID0gJGk9PTM/JHNbMF06JGFjYzsKKworCSMgJEZuIGlzIHVzZWQgaW4gZmlyc3QgY29tcGFjdCByb3VuZCBhbmQgaXRzIHB1cnBvc2UgaXMgdG8KKwkjIHZvaWQgcmVzdG9yYXRpb24gb2Ygc29tZSB2YWx1ZXMgZnJvbSBzdGFjaywgc28gdGhhdCBhZnRlcgorCSMgNHhlbmNjb21wYWN0IHdpdGggZXh0cmEgYXJndW1lbnQgJGtleSB2YWx1ZSBpcyBsZWZ0IHRoZXJlLi4uCisJaWYgKCRpPT0zKSAgewkmJEZuCSgka2V5LCRfX2tleSk7CQkJfSMjJWVkeAorCWVsc2UgICAgICAgIHsJJm1vdgkoJG91dCwkc1swXSk7CQkJfQorCQkJJmFuZAkoJG91dCwweEZGKTsKKwlpZiAoJGk9PTEpICB7CSZzaHIJKCRzWzBdLDE2KTsJCQl9IyVlYnhbMV0KKwlpZiAoJGk9PTIpICB7CSZzaHIJKCRzWzBdLDI0KTsJCQl9IyVlY3hbMl0KKwkJCSZtb3Z6CSgkb3V0LCZCUCgtMTI4LCR0ZSwkb3V0LDEpKTsKKworCWlmICgkaT09MykgIHsJJHRtcD0kc1sxXTsJCQkJfSMjJWVheAorCQkJJm1vdnoJKCR0bXAsJkhCKCRzWzFdKSk7CisJCQkmbW92egkoJHRtcCwmQlAoLTEyOCwkdGUsJHRtcCwxKSk7CisJCQkmc2hsCSgkdG1wLDgpOworCQkJJnhvcgkoJG91dCwkdG1wKTsKKworCWlmICgkaT09MykgIHsJJHRtcD0kc1syXTsgJm1vdiAoJHNbMV0sJF9fczApOwkJfSMjJWVieAorCWVsc2UgICAgICAgIHsJJm1vdgkoJHRtcCwkc1syXSk7CisJCQkmc2hyCSgkdG1wLDE2KTsJCQl9CisJaWYgKCRpPT0yKSAgewkmYW5kCSgkc1sxXSwweEZGKTsJCQl9IyVlZHhbMl0KKwkJCSZhbmQJKCR0bXAsMHhGRik7CisJCQkmbW92egkoJHRtcCwmQlAoLTEyOCwkdGUsJHRtcCwxKSk7CisJCQkmc2hsCSgkdG1wLDE2KTsKKwkJCSZ4b3IJKCRvdXQsJHRtcCk7CisKKwlpZiAoJGk9PTMpICB7CSR0bXA9JHNbM107ICZtb3YgKCRzWzJdLCRfX3MxKTsJCX0jIyVlY3gKKwllbHNpZigkaT09Mil7CSZtb3Z6CSgkdG1wLCZIQigkc1szXSkpOwkJfSMlZWJ4WzJdCisJZWxzZSAgICAgICAgewkmbW92CSgkdG1wLCRzWzNdKTsKKwkJCSZzaHIJKCR0bXAsMjQpOwkJCX0KKwkJCSZtb3Z6CSgkdG1wLCZCUCgtMTI4LCR0ZSwkdG1wLDEpKTsKKwkJCSZzaGwJKCR0bXAsMjQpOworCQkJJnhvcgkoJG91dCwkdG1wKTsKKwlpZiAoJGk8MikgICB7CSZtb3YJKCZEV1AoNCs0KiRpLCJlc3AiKSwkb3V0KTsJfQorCWlmICgkaT09MykgIHsJJm1vdgkoJHNbM10sJGFjYyk7CQkJfQorCSZjb21tZW50KCk7Cit9CisKK3N1YiBlbmN0cmFuc2Zvcm0oKQoreyBteSBAcyA9ICgkczAsJHMxLCRzMiwkczMpOworICBteSAkaSA9IHNoaWZ0OworICBteSAkdG1wID0gJHRibDsKKyAgbXkgJHIyICA9ICRrZXkgOworCisJJm1vdgkoJGFjYywkc1skaV0pOworCSZhbmQJKCRhY2MsMHg4MDgwODA4MCk7CisJJm1vdgkoJHRtcCwkYWNjKTsKKwkmc2hyCSgkdG1wLDcpOworCSZsZWEJKCRyMiwmRFdQKDAsJHNbJGldLCRzWyRpXSkpOworCSZzdWIJKCRhY2MsJHRtcCk7CisJJmFuZAkoJHIyLDB4ZmVmZWZlZmUpOworCSZhbmQJKCRhY2MsMHgxYjFiMWIxYik7CisJJm1vdgkoJHRtcCwkc1skaV0pOworCSZ4b3IJKCRhY2MsJHIyKTsJIyByMgorCisJJnhvcgkoJHNbJGldLCRhY2MpOwkjIHIwIF4gcjIKKwkmcm90bAkoJHNbJGldLDI0KTsKKwkmeG9yCSgkc1skaV0sJGFjYykJIyBST1RBVEUocjJecjAsMjQpIF4gcjIKKwkmcm90cgkoJHRtcCwxNik7CisJJnhvcgkoJHNbJGldLCR0bXApOworCSZyb3RyCSgkdG1wLDgpOworCSZ4b3IJKCRzWyRpXSwkdG1wKTsKK30KKworJmZ1bmN0aW9uX2JlZ2luX0IoIl94ODZfQUVTX2VuY3J5cHRfY29tcGFjdCIpOworCSMgbm90ZSB0aGF0IGNhbGxlciBpcyBleHBlY3RlZCB0byBhbGxvY2F0ZSBzdGFjayBmcmFtZSBmb3IgbWUhCisJJm1vdgkoJF9fa2V5LCRrZXkpOwkJCSMgc2F2ZSBrZXkKKworCSZ4b3IJKCRzMCwmRFdQKDAsJGtleSkpOwkJIyB4b3Igd2l0aCBrZXkKKwkmeG9yCSgkczEsJkRXUCg0LCRrZXkpKTsKKwkmeG9yCSgkczIsJkRXUCg4LCRrZXkpKTsKKwkmeG9yCSgkczMsJkRXUCgxMiwka2V5KSk7CisKKwkmbW92CSgkYWNjLCZEV1AoMjQwLCRrZXkpKTsJCSMgbG9hZCBrZXktPnJvdW5kcworCSZsZWEJKCRhY2MsJkRXUCgtMiwkYWNjLCRhY2MpKTsKKwkmbGVhCSgkYWNjLCZEV1AoMCwka2V5LCRhY2MsOCkpOworCSZtb3YJKCRfX2VuZCwkYWNjKTsJCQkjIGVuZCBvZiBrZXkgc2NoZWR1bGUKKworCSMgcHJlZmV0Y2ggVGU0CisJJm1vdgkoJGtleSwmRFdQKDAtMTI4LCR0YmwpKTsKKwkmbW92CSgkYWNjLCZEV1AoMzItMTI4LCR0YmwpKTsKKwkmbW92CSgka2V5LCZEV1AoNjQtMTI4LCR0YmwpKTsKKwkmbW92CSgkYWNjLCZEV1AoOTYtMTI4LCR0YmwpKTsKKwkmbW92CSgka2V5LCZEV1AoMTI4LTEyOCwkdGJsKSk7CisJJm1vdgkoJGFjYywmRFdQKDE2MC0xMjgsJHRibCkpOworCSZtb3YJKCRrZXksJkRXUCgxOTItMTI4LCR0YmwpKTsKKwkmbW92CSgkYWNjLCZEV1AoMjI0LTEyOCwkdGJsKSk7CisKKwkmc2V0X2xhYmVsKCJsb29wIiwxNik7CisKKwkJJmVuY2NvbXBhY3QoMCwkdGJsLCRzMCwkczEsJHMyLCRzMywxKTsKKwkJJmVuY2NvbXBhY3QoMSwkdGJsLCRzMSwkczIsJHMzLCRzMCwxKTsKKwkJJmVuY2NvbXBhY3QoMiwkdGJsLCRzMiwkczMsJHMwLCRzMSwxKTsKKwkJJmVuY2NvbXBhY3QoMywkdGJsLCRzMywkczAsJHMxLCRzMiwxKTsKKwkJJmVuY3RyYW5zZm9ybSgyKTsKKwkJJmVuY3RyYW5zZm9ybSgzKTsKKwkJJmVuY3RyYW5zZm9ybSgwKTsKKwkJJmVuY3RyYW5zZm9ybSgxKTsKKwkJJm1vdiAJKCRrZXksJF9fa2V5KTsKKwkJJm1vdgkoJHRibCwkX190YmwpOworCQkmYWRkCSgka2V5LDE2KTsJCSMgYWR2YW5jZSByZF9rZXkKKwkJJnhvcgkoJHMwLCZEV1AoMCwka2V5KSk7CisJCSZ4b3IJKCRzMSwmRFdQKDQsJGtleSkpOworCQkmeG9yCSgkczIsJkRXUCg4LCRrZXkpKTsKKwkJJnhvcgkoJHMzLCZEV1AoMTIsJGtleSkpOworCisJJmNtcAkoJGtleSwkX19lbmQpOworCSZtb3YJKCRfX2tleSwka2V5KTsKKwkmamIJKCZsYWJlbCgibG9vcCIpKTsKKworCSZlbmNjb21wYWN0KDAsJHRibCwkczAsJHMxLCRzMiwkczMpOworCSZlbmNjb21wYWN0KDEsJHRibCwkczEsJHMyLCRzMywkczApOworCSZlbmNjb21wYWN0KDIsJHRibCwkczIsJHMzLCRzMCwkczEpOworCSZlbmNjb21wYWN0KDMsJHRibCwkczMsJHMwLCRzMSwkczIpOworCisJJnhvcgkoJHMwLCZEV1AoMTYsJGtleSkpOworCSZ4b3IJKCRzMSwmRFdQKDIwLCRrZXkpKTsKKwkmeG9yCSgkczIsJkRXUCgyNCwka2V5KSk7CisJJnhvcgkoJHMzLCZEV1AoMjgsJGtleSkpOworCisJJnJldAkoKTsKKyZmdW5jdGlvbl9lbmRfQigiX3g4Nl9BRVNfZW5jcnlwdF9jb21wYWN0Iik7CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgIkNvbXBhY3QiIFNTRSBibG9jayBmdW5jdGlvbi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgUGVyZm9ybWFuY2UgaXMgbm90IGFjdHVhbGx5IGV4dHJhb3JkaW5hcnkgaW4gY29tcGFyaXNvbiB0byBwdXJlCisjIHg4NiBjb2RlLiBJbiBwYXJ0aWN1bGFyIGVuY3J5cHQgcGVyZm9ybWFuY2UgaXMgdmlydHVhbGx5IHRoZSBzYW1lLgorIyBEZWNyeXB0IHBlcmZvcm1hbmNlIG9uIHRoZSBvdGhlciBoYW5kIGlzIDE1LTIwJSBiZXR0ZXIgb24gbmV3ZXIKKyMgtS1hcmNocyBbYnV0IHdlJ3JlIHRoYW5rZnVsIGZvciAqYW55KiBpbXByb3ZlbWVudCBoZXJlXSwgYW5kIH41MCUKKyMgYmV0dGVyIG9uIFBJSUk6LSkgQW5kIGFkZGl0aW9uYWxseSBvbiB0aGUgcHJvcyBzaWRlIHRoaXMgY29kZQorIyBlbGltaW5hdGVzIHJlZHVuZGFudCByZWZlcmVuY2VzIHRvIHN0YWNrIGFuZCB0aHVzIHJlbGlldmVzLworIyBtaW5pbWl6ZXMgdGhlIHByZXNzdXJlIG9uIHRoZSBtZW1vcnkgYnVzLgorIworIyBNTVggcmVnaXN0ZXIgbGF5b3V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgbHNiCisjICstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSsKKyMgfCAgICAgICAgICBtbTQgICAgICAgICAgfCAgICAgICAgICBtbTAgICAgICAgICAgfAorIyArLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rCisjIHwgICAgIHMzICAgIHwgICAgIHMyICAgIHwgICAgIHMxICAgIHwgICAgIHMwICAgIHwgICAgCisjICstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSsKKyMgfDE1fDE0fDEzfDEyfDExfDEwfCA5fCA4fCA3fCA2fCA1fCA0fCAzfCAyfCAxfCAwfAorIyArLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rCisjCisjIEluZGV4ZXMgdHJhbnNsYXRlIGFzIHNbTi80XT4+KDgqKE4lNCkpLCBlLmcuIDUgbWVhbnMgczE+PjguCisjIEluIHRoaXMgdGVybXMgZW5jcnlwdGlvbiBhbmQgZGVjcnlwdGlvbiAiY29tcGFjdCIgcGVybXV0YXRpb24KKyMgbWF0cmljZXMgY2FuIGJlIGRlcGljdGVkIGFzIGZvbGxvd2luZzoKKyMKKyMgZW5jcnlwdGlvbiAgICAgICAgICAgICAgbHNiCSMgZGVjcnlwdGlvbiAgICAgICAgICAgICAgbHNiCisjICstLS0tKystLS0tKy0tLS0rLS0tLSstLS0tKwkjICstLS0tKystLS0tKy0tLS0rLS0tLSstLS0tKworIyB8IHQwIHx8IDE1IHwgMTAgfCAgNSB8ICAwIHwJIyB8IHQwIHx8ICA3IHwgMTAgfCAxMyB8ICAwIHwKKyMgKy0tLS0rKy0tLS0rLS0tLSstLS0tKy0tLS0rCSMgKy0tLS0rKy0tLS0rLS0tLSstLS0tKy0tLS0rCisjIHwgdDEgfHwgIDMgfCAxNCB8ICA5IHwgIDQgfAkjIHwgdDEgfHwgMTEgfCAxNCB8ICAxIHwgIDQgfAorIyArLS0tLSsrLS0tLSstLS0tKy0tLS0rLS0tLSsJIyArLS0tLSsrLS0tLSstLS0tKy0tLS0rLS0tLSsKKyMgfCB0MiB8fCAgNyB8ICAyIHwgMTMgfCAgOCB8CSMgfCB0MiB8fCAxNSB8ICAyIHwgIDUgfCAgOCB8CisjICstLS0tKystLS0tKy0tLS0rLS0tLSstLS0tKwkjICstLS0tKystLS0tKy0tLS0rLS0tLSstLS0tKworIyB8IHQzIHx8IDExIHwgIDYgfCAgMSB8IDEyIHwJIyB8IHQzIHx8ICAzIHwgIDYgfCAgOSB8IDEyIHwKKyMgKy0tLS0rKy0tLS0rLS0tLSstLS0tKy0tLS0rCSMgKy0tLS0rKy0tLS0rLS0tLSstLS0tKy0tLS0rCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFdoeSBub3QgeG1tIHJlZ2lzdGVycz8gU2hvcnQgYW5zd2VyLiBJdCB3YXMgYWN0dWFsbHkgdGVzdGVkIGFuZAorIyB3YXMgbm90IGFueSBmYXN0ZXIsIGJ1dCAqY29udHJhcnkqLCBtb3N0IG5vdGFibHkgb24gSW50ZWwgQ1BVcy4KKyMgTG9uZ2VyIGFuc3dlci4gTWFpbiBhZHZhbnRhZ2Ugb2YgdXNpbmcgbW0gcmVnaXN0ZXJzIGlzIHRoYXQgbW92ZAorIyBsYXRlbmN5IGlzIGxvd2VyLCBlc3BlY2lhbGx5IG9uIEludGVsIFA0LiBXaGlsZSBhcml0aG1ldGljCisjIGluc3RydWN0aW9ucyBhcmUgdHdpY2UgYXMgbWFueSwgdGhleSBjYW4gYmUgc2NoZWR1bGVkIGV2ZXJ5IGN5Y2xlCisjIGFuZCBub3QgZXZlcnkgc2Vjb25kIG9uZSB3aGVuIHRoZXkgYXJlIG9wZXJhdGluZyBvbiB4bW0gcmVnaXN0ZXIsCisjIHNvIHRoYXQgImFyaXRobWV0aWMgdGhyb3VnaHB1dCIgcmVtYWlucyB2aXJ0dWFsbHkgdGhlIHNhbWUuIEFuZAorIyBmaW5hbGx5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCBldmVuIG9uIGVsZGVyIFNTRS1vbmx5IENQVXM6LSkKKworc3ViIHNzZV9lbmNjb21wYWN0KCkKK3sKKwkmcHNodWZ3CSgibW0xIiwibW0wIiwweDA4KTsJCSMgIDUsIDQsIDEsIDAKKwkmcHNodWZ3CSgibW01IiwibW00IiwweDBkKTsJCSMgMTUsMTQsMTEsMTAKKwkmbW92ZAkoImVheCIsIm1tMSIpOwkJCSMgIDUsIDQsIDEsIDAKKwkmbW92ZAkoImVieCIsIm1tNSIpOwkJCSMgMTUsMTQsMTEsMTAKKworCSZtb3Z6CSgkYWNjLCZMQigiZWF4IikpOwkJIyAgMAorCSZtb3Z6CSgiZWN4IiwmQlAoLTEyOCwkdGJsLCRhY2MsMSkpOwkjICAwCisJJnBzaHVmdwkoIm1tMiIsIm1tMCIsMHgwZCk7CQkjICA3LCA2LCAzLCAyCisJJm1vdnoJKCJlZHgiLCZIQigiZWF4IikpOwkJIyAgMQorCSZtb3Z6CSgiZWR4IiwmQlAoLTEyOCwkdGJsLCJlZHgiLDEpKTsJIyAgMQorCSZzaGwJKCJlZHgiLDgpOwkJCSMgIDEKKwkmc2hyCSgiZWF4IiwxNik7CQkJIyAgNSwgNAorCisJJm1vdnoJKCRhY2MsJkxCKCJlYngiKSk7CQkjIDEwCisJJm1vdnoJKCRhY2MsJkJQKC0xMjgsJHRibCwkYWNjLDEpKTsJIyAxMAorCSZzaGwJKCRhY2MsMTYpOwkJCSMgMTAKKwkmb3IJKCJlY3giLCRhY2MpOwkJCSMgMTAKKwkmcHNodWZ3CSgibW02IiwibW00IiwweDA4KTsJCSMgMTMsMTIsIDksIDgKKwkmbW92egkoJGFjYywmSEIoImVieCIpKTsJCSMgMTEKKwkmbW92egkoJGFjYywmQlAoLTEyOCwkdGJsLCRhY2MsMSkpOwkjIDExCisJJnNobAkoJGFjYywyNCk7CQkJIyAxMQorCSZvcgkoImVkeCIsJGFjYyk7CQkJIyAxMQorCSZzaHIJKCJlYngiLDE2KTsJCQkjIDE1LDE0CisKKwkmbW92egkoJGFjYywmSEIoImVheCIpKTsJCSMgIDUKKwkmbW92egkoJGFjYywmQlAoLTEyOCwkdGJsLCRhY2MsMSkpOwkjICA1CisJJnNobAkoJGFjYyw4KTsJCQkjICA1CisJJm9yCSgiZWN4IiwkYWNjKTsJCQkjICA1CisJJm1vdnoJKCRhY2MsJkhCKCJlYngiKSk7CQkjIDE1CisJJm1vdnoJKCRhY2MsJkJQKC0xMjgsJHRibCwkYWNjLDEpKTsJIyAxNQorCSZzaGwJKCRhY2MsMjQpOwkJCSMgMTUKKwkmb3IJKCJlY3giLCRhY2MpOwkJCSMgMTUKKwkmbW92ZAkoIm1tMCIsImVjeCIpOwkJCSMgdFswXSBjb2xsZWN0ZWQKKworCSZtb3Z6CSgkYWNjLCZMQigiZWF4IikpOwkJIyAgNAorCSZtb3Z6CSgiZWN4IiwmQlAoLTEyOCwkdGJsLCRhY2MsMSkpOwkjICA0CisJJm1vdmQJKCJlYXgiLCJtbTIiKTsJCQkjICA3LCA2LCAzLCAyCisJJm1vdnoJKCRhY2MsJkxCKCJlYngiKSk7CQkjIDE0CisJJm1vdnoJKCRhY2MsJkJQKC0xMjgsJHRibCwkYWNjLDEpKTsJIyAxNAorCSZzaGwJKCRhY2MsMTYpOwkJCSMgMTQKKwkmb3IJKCJlY3giLCRhY2MpOwkJCSMgMTQKKworCSZtb3ZkCSgiZWJ4IiwibW02Iik7CQkJIyAxMywxMiwgOSwgOAorCSZtb3Z6CSgkYWNjLCZIQigiZWF4IikpOwkJIyAgMworCSZtb3Z6CSgkYWNjLCZCUCgtMTI4LCR0YmwsJGFjYywxKSk7CSMgIDMKKwkmc2hsCSgkYWNjLDI0KTsJCQkjICAzCisJJm9yCSgiZWN4IiwkYWNjKTsJCQkjICAzCisJJm1vdnoJKCRhY2MsJkhCKCJlYngiKSk7CQkjICA5CisJJm1vdnoJKCRhY2MsJkJQKC0xMjgsJHRibCwkYWNjLDEpKTsJIyAgOQorCSZzaGwJKCRhY2MsOCk7CQkJIyAgOQorCSZvcgkoImVjeCIsJGFjYyk7CQkJIyAgOQorCSZtb3ZkCSgibW0xIiwiZWN4Iik7CQkJIyB0WzFdIGNvbGxlY3RlZAorCisJJm1vdnoJKCRhY2MsJkxCKCJlYngiKSk7CQkjICA4CisJJm1vdnoJKCJlY3giLCZCUCgtMTI4LCR0YmwsJGFjYywxKSk7CSMgIDgKKwkmc2hyCSgiZWJ4IiwxNik7CQkJIyAxMywxMgorCSZtb3Z6CSgkYWNjLCZMQigiZWF4IikpOwkJIyAgMgorCSZtb3Z6CSgkYWNjLCZCUCgtMTI4LCR0YmwsJGFjYywxKSk7CSMgIDIKKwkmc2hsCSgkYWNjLDE2KTsJCQkjICAyCisJJm9yCSgiZWN4IiwkYWNjKTsJCQkjICAyCisJJnNocgkoImVheCIsMTYpOwkJCSMgIDcsIDYKKworCSZwdW5wY2tsZHEJKCJtbTAiLCJtbTEiKTsJCSMgdFswLDFdIGNvbGxlY3RlZAorCisJJm1vdnoJKCRhY2MsJkhCKCJlYXgiKSk7CQkjICA3CisJJm1vdnoJKCRhY2MsJkJQKC0xMjgsJHRibCwkYWNjLDEpKTsJIyAgNworCSZzaGwJKCRhY2MsMjQpOwkJCSMgIDcKKwkmb3IJKCJlY3giLCRhY2MpOwkJCSMgIDcKKwkmYW5kCSgiZWF4IiwweGZmKTsJCQkjICA2CisJJm1vdnoJKCJlYXgiLCZCUCgtMTI4LCR0YmwsImVheCIsMSkpOwkjICA2CisJJnNobAkoImVheCIsMTYpOwkJCSMgIDYKKwkmb3IJKCJlZHgiLCJlYXgiKTsJCQkjICA2CisJJm1vdnoJKCRhY2MsJkhCKCJlYngiKSk7CQkjIDEzCisJJm1vdnoJKCRhY2MsJkJQKC0xMjgsJHRibCwkYWNjLDEpKTsJIyAxMworCSZzaGwJKCRhY2MsOCk7CQkJIyAxMworCSZvcgkoImVjeCIsJGFjYyk7CQkJIyAxMworCSZtb3ZkCSgibW00IiwiZWN4Iik7CQkJIyB0WzJdIGNvbGxlY3RlZAorCSZhbmQJKCJlYngiLDB4ZmYpOwkJCSMgMTIKKwkmbW92egkoImVieCIsJkJQKC0xMjgsJHRibCwiZWJ4IiwxKSk7CSMgMTIKKwkmb3IJKCJlZHgiLCJlYngiKTsJCQkjIDEyCisJJm1vdmQJKCJtbTUiLCJlZHgiKTsJCQkjIHRbM10gY29sbGVjdGVkCisKKwkmcHVucGNrbGRxCSgibW00IiwibW01Iik7CQkjIHRbMiwzXSBjb2xsZWN0ZWQKK30KKworCQkJCQlpZiAoISR4ODZvbmx5KSB7CismZnVuY3Rpb25fYmVnaW5fQigiX3NzZV9BRVNfZW5jcnlwdF9jb21wYWN0Iik7CisJJnB4b3IJKCJtbTAiLCZRV1AoMCwka2V5KSk7CSMgIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDAKKwkmcHhvcgkoIm1tNCIsJlFXUCg4LCRrZXkpKTsJIyAxNSwxNCwxMywxMiwxMSwxMCwgOSwgOAorCisJIyBub3RlIHRoYXQgY2FsbGVyIGlzIGV4cGVjdGVkIHRvIGFsbG9jYXRlIHN0YWNrIGZyYW1lIGZvciBtZSEKKwkmbW92CSgkYWNjLCZEV1AoMjQwLCRrZXkpKTsJCSMgbG9hZCBrZXktPnJvdW5kcworCSZsZWEJKCRhY2MsJkRXUCgtMiwkYWNjLCRhY2MpKTsKKwkmbGVhCSgkYWNjLCZEV1AoMCwka2V5LCRhY2MsOCkpOworCSZtb3YJKCRfX2VuZCwkYWNjKTsJCQkjIGVuZCBvZiBrZXkgc2NoZWR1bGUKKworCSZtb3YJKCRzMCwweDFiMWIxYjFiKTsJCSMgbWFnaWMgY29uc3RhbnQKKwkmbW92CSgmRFdQKDgsImVzcCIpLCRzMCk7CisJJm1vdgkoJkRXUCgxMiwiZXNwIiksJHMwKTsKKworCSMgcHJlZmV0Y2ggVGU0CisJJm1vdgkoJHMwLCZEV1AoMC0xMjgsJHRibCkpOworCSZtb3YJKCRzMSwmRFdQKDMyLTEyOCwkdGJsKSk7CisJJm1vdgkoJHMyLCZEV1AoNjQtMTI4LCR0YmwpKTsKKwkmbW92CSgkczMsJkRXUCg5Ni0xMjgsJHRibCkpOworCSZtb3YJKCRzMCwmRFdQKDEyOC0xMjgsJHRibCkpOworCSZtb3YJKCRzMSwmRFdQKDE2MC0xMjgsJHRibCkpOworCSZtb3YJKCRzMiwmRFdQKDE5Mi0xMjgsJHRibCkpOworCSZtb3YJKCRzMywmRFdQKDIyNC0xMjgsJHRibCkpOworCisJJnNldF9sYWJlbCgibG9vcCIsMTYpOworCQkmc3NlX2VuY2NvbXBhY3QoKTsKKwkJJmFkZAkoJGtleSwxNik7CisJCSZjbXAJKCRrZXksJF9fZW5kKTsKKwkJJmphCSgmbGFiZWwoIm91dCIpKTsKKworCQkmbW92cQkoIm1tMiIsJlFXUCg4LCJlc3AiKSk7CisJCSZweG9yCSgibW0zIiwibW0zIik7CQkmcHhvcgkoIm1tNyIsIm1tNyIpOworCQkmbW92cQkoIm1tMSIsIm1tMCIpOwkJJm1vdnEJKCJtbTUiLCJtbTQiKTsJIyByMAorCQkmcGNtcGd0YigibW0zIiwibW0wIik7CQkmcGNtcGd0YigibW03IiwibW00Iik7CisJCSZwYW5kCSgibW0zIiwibW0yIik7CQkmcGFuZAkoIm1tNyIsIm1tMiIpOworCQkmcHNodWZ3CSgibW0yIiwibW0wIiwweGIxKTsJJnBzaHVmdwkoIm1tNiIsIm1tNCIsMHhiMSk7IyBST1RBVEUocjAsMTYpCisJCSZwYWRkYgkoIm1tMCIsIm1tMCIpOwkJJnBhZGRiCSgibW00IiwibW00Iik7CisJCSZweG9yCSgibW0wIiwibW0zIik7CQkmcHhvcgkoIm1tNCIsIm1tNyIpOwkjID0gcjIKKwkJJnBzaHVmdwkoIm1tMyIsIm1tMiIsMHhiMSk7CSZwc2h1ZncJKCJtbTciLCJtbTYiLDB4YjEpOyMgcjAKKwkJJnB4b3IJKCJtbTEiLCJtbTAiKTsJCSZweG9yCSgibW01IiwibW00Iik7CSMgcjBecjIKKwkJJnB4b3IJKCJtbTAiLCJtbTIiKTsJCSZweG9yCSgibW00IiwibW02Iik7CSMgXj0gUk9UQVRFKHIwLDE2KQorCisJCSZtb3ZxCSgibW0yIiwibW0zIik7CQkmbW92cQkoIm1tNiIsIm1tNyIpOworCQkmcHNsbGQJKCJtbTMiLDgpOwkJJnBzbGxkCSgibW03Iiw4KTsKKwkJJnBzcmxkCSgibW0yIiwyNCk7CQkmcHNybGQJKCJtbTYiLDI0KTsKKwkJJnB4b3IJKCJtbTAiLCJtbTMiKTsJCSZweG9yCSgibW00IiwibW03Iik7CSMgXj0gcjA8PDgKKwkJJnB4b3IJKCJtbTAiLCJtbTIiKTsJCSZweG9yCSgibW00IiwibW02Iik7CSMgXj0gcjA+PjI0CisKKwkJJm1vdnEJKCJtbTMiLCJtbTEiKTsJCSZtb3ZxCSgibW03IiwibW01Iik7CisJCSZtb3ZxCSgibW0yIiwmUVdQKDAsJGtleSkpOwkmbW92cQkoIm1tNiIsJlFXUCg4LCRrZXkpKTsKKwkJJnBzcmxkCSgibW0xIiw4KTsJCSZwc3JsZAkoIm1tNSIsOCk7CisJCSZtb3YJKCRzMCwmRFdQKDAtMTI4LCR0YmwpKTsKKwkJJnBzbGxkCSgibW0zIiwyNCk7CQkmcHNsbGQJKCJtbTciLDI0KTsKKwkJJm1vdgkoJHMxLCZEV1AoNjQtMTI4LCR0YmwpKTsKKwkJJnB4b3IJKCJtbTAiLCJtbTEiKTsJCSZweG9yCSgibW00IiwibW01Iik7CSMgXj0gKHIyXnIwKTw8OAorCQkmbW92CSgkczIsJkRXUCgxMjgtMTI4LCR0YmwpKTsKKwkJJnB4b3IJKCJtbTAiLCJtbTMiKTsJCSZweG9yCSgibW00IiwibW03Iik7CSMgXj0gKHIyXnIwKT4+MjQKKwkJJm1vdgkoJHMzLCZEV1AoMTkyLTEyOCwkdGJsKSk7CisKKwkJJnB4b3IJKCJtbTAiLCJtbTIiKTsJCSZweG9yCSgibW00IiwibW02Iik7CisJJmptcAkoJmxhYmVsKCJsb29wIikpOworCisJJnNldF9sYWJlbCgib3V0IiwxNik7CisJJnB4b3IJKCJtbTAiLCZRV1AoMCwka2V5KSk7CisJJnB4b3IJKCJtbTQiLCZRV1AoOCwka2V5KSk7CisKKwkmcmV0CSgpOworJmZ1bmN0aW9uX2VuZF9CKCJfc3NlX0FFU19lbmNyeXB0X2NvbXBhY3QiKTsKKwkJCQkJfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFZhbmlsbGEgYmxvY2sgZnVuY3Rpb24uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKIHN1YiBlbmNzdGVwKCkKIHsgbXkgKCRpLCR0ZSxAcykgPSBAXzsKICAgbXkgJHRtcCA9ICRrZXk7CiAgIG15ICRvdXQgPSAkaT09Mz8kc1swXTokYWNjOwogCiAJIyBsaW5lcyBtYXJrZWQgd2l0aCAjJWU/eFtpXSBkZW5vdGUgInJlb3JkZXJlZCIgaW5zdHJ1Y3Rpb25zLi4uCi0JaWYgKCRpPT0zKSAgewkmbW92CSgka2V5LCZEV1AoMTIsImVzcCIpKTsJCX0jIyVlZHgKKwlpZiAoJGk9PTMpICB7CSZtb3YJKCRrZXksJF9fa2V5KTsJCQl9IyMlZWR4CiAJZWxzZSAgICAgICAgewkmbW92CSgkb3V0LCRzWzBdKTsKIAkJCSZhbmQJKCRvdXQsMHhGRik7CQkJfQogCWlmICgkaT09MSkgIHsJJnNocgkoJHNbMF0sMTYpOwkJCX0jJWVieFsxXQpAQCAtMTkxLDE0ICs3ODAsMTQgQEAKIAkJCSZtb3Z6CSgkdG1wLCZIQigkc1sxXSkpOwogCQkJJnhvcgkoJG91dCwmRFdQKDMsJHRlLCR0bXAsOCkpOwogCi0JaWYgKCRpPT0zKSAgewkkdG1wPSRzWzJdOyAmbW92ICgkc1sxXSwmRFdQKDQsImVzcCIpKTsJfSMjJWVieAorCWlmICgkaT09MykgIHsJJHRtcD0kc1syXTsgJm1vdiAoJHNbMV0sJF9fczApOwkJfSMjJWVieAogCWVsc2UgICAgICAgIHsJJm1vdgkoJHRtcCwkc1syXSk7CiAJCQkmc2hyCSgkdG1wLDE2KTsJCQl9CiAJaWYgKCRpPT0yKSAgewkmYW5kCSgkc1sxXSwweEZGKTsJCQl9IyVlZHhbMl0KIAkJCSZhbmQJKCR0bXAsMHhGRik7CiAJCQkmeG9yCSgkb3V0LCZEV1AoMiwkdGUsJHRtcCw4KSk7CiAKLQlpZiAoJGk9PTMpICB7CSR0bXA9JHNbM107ICZtb3YgKCRzWzJdLCZEV1AoOCwiZXNwIikpOwl9IyMlZWN4CisJaWYgKCRpPT0zKSAgewkkdG1wPSRzWzNdOyAmbW92ICgkc1syXSwkX19zMSk7CQl9IyMlZWN4CiAJZWxzaWYoJGk9PTIpewkmbW92egkoJHRtcCwmSEIoJHNbM10pKTsJCX0jJWVieFsyXQogCWVsc2UgICAgICAgIHsJJm1vdgkoJHRtcCwkc1szXSk7IAogCQkJJnNocgkoJHRtcCwyNCkJCQl9CkBAIC0yMTMsNyArODAyLDcgQEAKICAgbXkgJHRtcCA9ICRrZXk7CiAgIG15ICRvdXQgPSAkaT09Mz8kc1swXTokYWNjOwogCi0JaWYgKCRpPT0zKSAgewkmbW92CSgka2V5LCZEV1AoMTIsImVzcCIpKTsJCX0jIyVlZHgKKwlpZiAoJGk9PTMpICB7CSZtb3YJKCRrZXksJF9fa2V5KTsJCQl9IyMlZWR4CiAJZWxzZSAgICAgICAgewkmbW92CSgkb3V0LCRzWzBdKTsJCQl9CiAJCQkmYW5kCSgkb3V0LDB4RkYpOwogCWlmICgkaT09MSkgIHsJJnNocgkoJHNbMF0sMTYpOwkJCX0jJWVieFsxXQpAQCAtMjI3LDggKzgxNiw4IEBACiAJCQkmYW5kCSgkdG1wLDB4MDAwMGZmMDApOwogCQkJJnhvcgkoJG91dCwkdG1wKTsKIAotCWlmICgkaT09MykgIHsJJHRtcD0kc1syXTsgJm1vdiAoJHNbMV0sJkRXUCg0LCJlc3AiKSk7CX0jIyVlYngKLQllbHNlICAgICAgICB7CW1vdgkoJHRtcCwkc1syXSk7CisJaWYgKCRpPT0zKSAgewkkdG1wPSRzWzJdOyAmbW92ICgkc1sxXSwkX19zMCk7CQl9IyMlZWJ4CisJZWxzZSAgICAgICAgewkmbW92CSgkdG1wLCRzWzJdKTsKIAkJCSZzaHIJKCR0bXAsMTYpOwkJCX0KIAlpZiAoJGk9PTIpICB7CSZhbmQJKCRzWzFdLDB4RkYpOwkJCX0jJWVkeFsyXQogCQkJJmFuZAkoJHRtcCwweEZGKTsKQEAgLTIzNiw3ICs4MjUsNyBAQAogCQkJJmFuZAkoJHRtcCwweDAwZmYwMDAwKTsKIAkJCSZ4b3IJKCRvdXQsJHRtcCk7CiAKLQlpZiAoJGk9PTMpICB7CSR0bXA9JHNbM107ICZtb3YgKCRzWzJdLCZEV1AoOCwiZXNwIikpOwl9IyMlZWN4CisJaWYgKCRpPT0zKSAgewkkdG1wPSRzWzNdOyAmbW92ICgkc1syXSwkX19zMSk7CQl9IyMlZWN4CiAJZWxzaWYoJGk9PTIpewkmbW92egkoJHRtcCwmSEIoJHNbM10pKTsJCX0jJWVieFsyXQogCWVsc2UgICAgICAgIHsJJm1vdgkoJHRtcCwkc1szXSk7CiAJCQkmc2hyCSgkdG1wLDI0KTsJCQl9CkBAIC0yNDcsOSArODM2LDYgQEAKIAlpZiAoJGk9PTMpICB7CSZtb3YJKCRzWzNdLCRhY2MpOwkJCX0KIH0KIAotc3ViIF9kYXRhX3dvcmQoKSB7IG15ICRpOyB3aGlsZShkZWZpbmVkKCRpPXNoaWZ0KSkgeyAmZGF0YV93b3JkKCRpLCRpKTsgfSB9Ci0KLSZwdWJsaWNfbGFiZWwoIkFFU19UZSIpOwogJmZ1bmN0aW9uX2JlZ2luX0IoIl94ODZfQUVTX2VuY3J5cHQiKTsKIAlpZiAoJHZlcnRpY2FsX3NwaW4pIHsKIAkJIyBJIG5lZWQgaGlnaCBwYXJ0cyBvZiB2b2xhdGlsZSByZWdpc3RlcnMgdG8gYmUgYWNjZXNzaWJsZS4uLgpAQCAtMjU4LDcgKzg0NCw3IEBACiAJfQogCiAJIyBub3RlIHRoYXQgY2FsbGVyIGlzIGV4cGVjdGVkIHRvIGFsbG9jYXRlIHN0YWNrIGZyYW1lIGZvciBtZSEKLQkmbW92CSgmRFdQKDEyLCJlc3AiKSwka2V5KTsJCSMgc2F2ZSBrZXkKKwkmbW92CSgkX19rZXksJGtleSk7CQkJIyBzYXZlIGtleQogCiAJJnhvcgkoJHMwLCZEV1AoMCwka2V5KSk7CQkjIHhvciB3aXRoIGtleQogCSZ4b3IJKCRzMSwmRFdQKDQsJGtleSkpOwpAQCAtMjcwLDI0ICs4NTYsMjQgQEAKIAlpZiAoJHNtYWxsX2Zvb3RwcmludCkgewogCSAgICAmbGVhCSgkYWNjLCZEV1AoLTIsJGFjYywkYWNjKSk7CiAJICAgICZsZWEJKCRhY2MsJkRXUCgwLCRrZXksJGFjYyw4KSk7Ci0JICAgICZtb3YJKCZEV1AoMTYsImVzcCIpLCRhY2MpOwkjIGVuZCBvZiBrZXkgc2NoZWR1bGUKLQkgICAgJmFsaWduCSg0KTsKLQkgICAgJnNldF9sYWJlbCgibG9vcCIpOworCSAgICAmbW92CSgkX19lbmQsJGFjYyk7CQkjIGVuZCBvZiBrZXkgc2NoZWR1bGUKKworCSAgICAmc2V0X2xhYmVsKCJsb29wIiwxNik7CiAJCWlmICgkdmVydGljYWxfc3BpbikgewotCQkgICAgJmVuY3ZlcnQoImVicCIsJHMwLCRzMSwkczIsJHMzKTsKKwkJICAgICZlbmN2ZXJ0KCR0YmwsJHMwLCRzMSwkczIsJHMzKTsKIAkJfSBlbHNlIHsKLQkJICAgICZlbmNzdGVwKDAsImVicCIsJHMwLCRzMSwkczIsJHMzKTsKLQkJICAgICZlbmNzdGVwKDEsImVicCIsJHMxLCRzMiwkczMsJHMwKTsKLQkJICAgICZlbmNzdGVwKDIsImVicCIsJHMyLCRzMywkczAsJHMxKTsKLQkJICAgICZlbmNzdGVwKDMsImVicCIsJHMzLCRzMCwkczEsJHMyKTsKKwkJICAgICZlbmNzdGVwKDAsJHRibCwkczAsJHMxLCRzMiwkczMpOworCQkgICAgJmVuY3N0ZXAoMSwkdGJsLCRzMSwkczIsJHMzLCRzMCk7CisJCSAgICAmZW5jc3RlcCgyLCR0YmwsJHMyLCRzMywkczAsJHMxKTsKKwkJICAgICZlbmNzdGVwKDMsJHRibCwkczMsJHMwLCRzMSwkczIpOwogCQl9CiAJCSZhZGQJKCRrZXksMTYpOwkJIyBhZHZhbmNlIHJkX2tleQogCQkmeG9yCSgkczAsJkRXUCgwLCRrZXkpKTsKIAkJJnhvcgkoJHMxLCZEV1AoNCwka2V5KSk7CiAJCSZ4b3IJKCRzMiwmRFdQKDgsJGtleSkpOwogCQkmeG9yCSgkczMsJkRXUCgxMiwka2V5KSk7Ci0JICAgICZjbXAJKCRrZXksJkRXUCgxNiwiZXNwIikpOwotCSAgICAmbW92CSgmRFdQKDEyLCJlc3AiKSwka2V5KTsKKwkgICAgJmNtcAkoJGtleSwkX19lbmQpOworCSAgICAmbW92CSgkX19rZXksJGtleSk7CiAJICAgICZqYgkJKCZsYWJlbCgibG9vcCIpKTsKIAl9CiAJZWxzZSB7CkBAIC0yOTYsMTUgKzg4MiwxNSBAQAogCSAgICAmY21wCSgkYWNjLDEyKTsKIAkgICAgJmpsZQkoJmxhYmVsKCIxMnJvdW5kcyIpKTsKIAotCSZzZXRfbGFiZWwoIjE0cm91bmRzIik7CisJJnNldF9sYWJlbCgiMTRyb3VuZHMiLDQpOwogCSAgICBmb3IgKCRpPTE7JGk8MzskaSsrKSB7CiAJCWlmICgkdmVydGljYWxfc3BpbikgewotCQkgICAgJmVuY3ZlcnQoImVicCIsJHMwLCRzMSwkczIsJHMzKTsKKwkJICAgICZlbmN2ZXJ0KCR0YmwsJHMwLCRzMSwkczIsJHMzKTsKIAkJfSBlbHNlIHsKLQkJICAgICZlbmNzdGVwKDAsImVicCIsJHMwLCRzMSwkczIsJHMzKTsKLQkJICAgICZlbmNzdGVwKDEsImVicCIsJHMxLCRzMiwkczMsJHMwKTsKLQkJICAgICZlbmNzdGVwKDIsImVicCIsJHMyLCRzMywkczAsJHMxKTsKLQkJICAgICZlbmNzdGVwKDMsImVicCIsJHMzLCRzMCwkczEsJHMyKTsKKwkJICAgICZlbmNzdGVwKDAsJHRibCwkczAsJHMxLCRzMiwkczMpOworCQkgICAgJmVuY3N0ZXAoMSwkdGJsLCRzMSwkczIsJHMzLCRzMCk7CisJCSAgICAmZW5jc3RlcCgyLCR0YmwsJHMyLCRzMywkczAsJHMxKTsKKwkJICAgICZlbmNzdGVwKDMsJHRibCwkczMsJHMwLCRzMSwkczIpOwogCQl9CiAJCSZ4b3IJKCRzMCwmRFdQKDE2KiRpKzAsJGtleSkpOwogCQkmeG9yCSgkczEsJkRXUCgxNiokaSs0LCRrZXkpKTsKQEAgLTMxMiwxNiArODk4LDE2IEBACiAJCSZ4b3IJKCRzMywmRFdQKDE2KiRpKzEyLCRrZXkpKTsKIAkgICAgfQogCSAgICAmYWRkCSgka2V5LDMyKTsKLQkgICAgJm1vdgkoJkRXUCgxMiwiZXNwIiksJGtleSk7CSMgYWR2YW5jZSByZF9rZXkKLQkmc2V0X2xhYmVsKCIxMnJvdW5kcyIpOworCSAgICAmbW92CSgkX19rZXksJGtleSk7CQkjIGFkdmFuY2UgcmRfa2V5CisJJnNldF9sYWJlbCgiMTJyb3VuZHMiLDQpOwogCSAgICBmb3IgKCRpPTE7JGk8MzskaSsrKSB7CiAJCWlmICgkdmVydGljYWxfc3BpbikgewotCQkgICAgJmVuY3ZlcnQoImVicCIsJHMwLCRzMSwkczIsJHMzKTsKKwkJICAgICZlbmN2ZXJ0KCR0YmwsJHMwLCRzMSwkczIsJHMzKTsKIAkJfSBlbHNlIHsKLQkJICAgICZlbmNzdGVwKDAsImVicCIsJHMwLCRzMSwkczIsJHMzKTsKLQkJICAgICZlbmNzdGVwKDEsImVicCIsJHMxLCRzMiwkczMsJHMwKTsKLQkJICAgICZlbmNzdGVwKDIsImVicCIsJHMyLCRzMywkczAsJHMxKTsKLQkJICAgICZlbmNzdGVwKDMsImVicCIsJHMzLCRzMCwkczEsJHMyKTsKKwkJICAgICZlbmNzdGVwKDAsJHRibCwkczAsJHMxLCRzMiwkczMpOworCQkgICAgJmVuY3N0ZXAoMSwkdGJsLCRzMSwkczIsJHMzLCRzMCk7CisJCSAgICAmZW5jc3RlcCgyLCR0YmwsJHMyLCRzMywkczAsJHMxKTsKKwkJICAgICZlbmNzdGVwKDMsJHRibCwkczMsJHMwLCRzMSwkczIpOwogCQl9CiAJCSZ4b3IJKCRzMCwmRFdQKDE2KiRpKzAsJGtleSkpOwogCQkmeG9yCSgkczEsJkRXUCgxNiokaSs0LCRrZXkpKTsKQEAgLTMyOSwxNiArOTE1LDE2IEBACiAJCSZ4b3IJKCRzMywmRFdQKDE2KiRpKzEyLCRrZXkpKTsKIAkgICAgfQogCSAgICAmYWRkCSgka2V5LDMyKTsKLQkgICAgJm1vdgkoJkRXUCgxMiwiZXNwIiksJGtleSk7CSMgYWR2YW5jZSByZF9rZXkKLQkmc2V0X2xhYmVsKCIxMHJvdW5kcyIpOworCSAgICAmbW92CSgkX19rZXksJGtleSk7CQkjIGFkdmFuY2UgcmRfa2V5CisJJnNldF9sYWJlbCgiMTByb3VuZHMiLDQpOwogCSAgICBmb3IgKCRpPTE7JGk8MTA7JGkrKykgewogCQlpZiAoJHZlcnRpY2FsX3NwaW4pIHsKLQkJICAgICZlbmN2ZXJ0KCJlYnAiLCRzMCwkczEsJHMyLCRzMyk7CisJCSAgICAmZW5jdmVydCgkdGJsLCRzMCwkczEsJHMyLCRzMyk7CiAJCX0gZWxzZSB7Ci0JCSAgICAmZW5jc3RlcCgwLCJlYnAiLCRzMCwkczEsJHMyLCRzMyk7Ci0JCSAgICAmZW5jc3RlcCgxLCJlYnAiLCRzMSwkczIsJHMzLCRzMCk7Ci0JCSAgICAmZW5jc3RlcCgyLCJlYnAiLCRzMiwkczMsJHMwLCRzMSk7Ci0JCSAgICAmZW5jc3RlcCgzLCJlYnAiLCRzMywkczAsJHMxLCRzMik7CisJCSAgICAmZW5jc3RlcCgwLCR0YmwsJHMwLCRzMSwkczIsJHMzKTsKKwkJICAgICZlbmNzdGVwKDEsJHRibCwkczEsJHMyLCRzMywkczApOworCQkgICAgJmVuY3N0ZXAoMiwkdGJsLCRzMiwkczMsJHMwLCRzMSk7CisJCSAgICAmZW5jc3RlcCgzLCR0YmwsJHMzLCRzMCwkczEsJHMyKTsKIAkJfQogCQkmeG9yCSgkczAsJkRXUCgxNiokaSswLCRrZXkpKTsKIAkJJnhvcgkoJHMxLCZEV1AoMTYqJGkrNCwka2V5KSk7CkBAIC0zNTIsMTAgKzkzOCwxMCBAQAogCSAgICAmbW92CSgkczE9ImVieCIsJGtleT0iZWRpIik7CiAJICAgICZtb3YJKCRzMj0iZWN4IiwkYWNjPSJlc2kiKTsKIAl9Ci0JJmVuY2xhc3QoMCwiZWJwIiwkczAsJHMxLCRzMiwkczMpOwotCSZlbmNsYXN0KDEsImVicCIsJHMxLCRzMiwkczMsJHMwKTsKLQkmZW5jbGFzdCgyLCJlYnAiLCRzMiwkczMsJHMwLCRzMSk7Ci0JJmVuY2xhc3QoMywiZWJwIiwkczMsJHMwLCRzMSwkczIpOworCSZlbmNsYXN0KDAsJHRibCwkczAsJHMxLCRzMiwkczMpOworCSZlbmNsYXN0KDEsJHRibCwkczEsJHMyLCRzMywkczApOworCSZlbmNsYXN0KDIsJHRibCwkczIsJHMzLCRzMCwkczEpOworCSZlbmNsYXN0KDMsJHRibCwkczMsJHMwLCRzMSwkczIpOwogCiAJJmFkZAkoJGtleSwkc21hbGxfZm9vdHByaW50PzE2OjE2MCk7CiAJJnhvcgkoJHMwLCZEV1AoMCwka2V5KSk7CkBAIC00MzAsMzggKzEwMTYsMTk4IEBACiAJJl9kYXRhX3dvcmQoMHhkYWJmYmY2NSwgMHgzMWU2ZTZkNywgMHhjNjQyNDI4NCwgMHhiODY4NjhkMCk7CiAJJl9kYXRhX3dvcmQoMHhjMzQxNDE4MiwgMHhiMDk5OTkyOSwgMHg3NzJkMmQ1YSwgMHgxMTBmMGYxZSk7CiAJJl9kYXRhX3dvcmQoMHhjYmIwYjA3YiwgMHhmYzU0NTRhOCwgMHhkNmJiYmI2ZCwgMHgzYTE2MTYyYyk7CisKKyNUZTQJIyBmb3VyIGNvcGllcyBvZiBUZTQgdG8gY2hvb3NlIGZyb20gdG8gYXZvaWQgTDEgYWxpYXNpbmcKKwkmZGF0YV9ieXRlKDB4NjMsIDB4N2MsIDB4NzcsIDB4N2IsIDB4ZjIsIDB4NmIsIDB4NmYsIDB4YzUpOworCSZkYXRhX2J5dGUoMHgzMCwgMHgwMSwgMHg2NywgMHgyYiwgMHhmZSwgMHhkNywgMHhhYiwgMHg3Nik7CisJJmRhdGFfYnl0ZSgweGNhLCAweDgyLCAweGM5LCAweDdkLCAweGZhLCAweDU5LCAweDQ3LCAweGYwKTsKKwkmZGF0YV9ieXRlKDB4YWQsIDB4ZDQsIDB4YTIsIDB4YWYsIDB4OWMsIDB4YTQsIDB4NzIsIDB4YzApOworCSZkYXRhX2J5dGUoMHhiNywgMHhmZCwgMHg5MywgMHgyNiwgMHgzNiwgMHgzZiwgMHhmNywgMHhjYyk7CisJJmRhdGFfYnl0ZSgweDM0LCAweGE1LCAweGU1LCAweGYxLCAweDcxLCAweGQ4LCAweDMxLCAweDE1KTsKKwkmZGF0YV9ieXRlKDB4MDQsIDB4YzcsIDB4MjMsIDB4YzMsIDB4MTgsIDB4OTYsIDB4MDUsIDB4OWEpOworCSZkYXRhX2J5dGUoMHgwNywgMHgxMiwgMHg4MCwgMHhlMiwgMHhlYiwgMHgyNywgMHhiMiwgMHg3NSk7CisJJmRhdGFfYnl0ZSgweDA5LCAweDgzLCAweDJjLCAweDFhLCAweDFiLCAweDZlLCAweDVhLCAweGEwKTsKKwkmZGF0YV9ieXRlKDB4NTIsIDB4M2IsIDB4ZDYsIDB4YjMsIDB4MjksIDB4ZTMsIDB4MmYsIDB4ODQpOworCSZkYXRhX2J5dGUoMHg1MywgMHhkMSwgMHgwMCwgMHhlZCwgMHgyMCwgMHhmYywgMHhiMSwgMHg1Yik7CisJJmRhdGFfYnl0ZSgweDZhLCAweGNiLCAweGJlLCAweDM5LCAweDRhLCAweDRjLCAweDU4LCAweGNmKTsKKwkmZGF0YV9ieXRlKDB4ZDAsIDB4ZWYsIDB4YWEsIDB4ZmIsIDB4NDMsIDB4NGQsIDB4MzMsIDB4ODUpOworCSZkYXRhX2J5dGUoMHg0NSwgMHhmOSwgMHgwMiwgMHg3ZiwgMHg1MCwgMHgzYywgMHg5ZiwgMHhhOCk7CisJJmRhdGFfYnl0ZSgweDUxLCAweGEzLCAweDQwLCAweDhmLCAweDkyLCAweDlkLCAweDM4LCAweGY1KTsKKwkmZGF0YV9ieXRlKDB4YmMsIDB4YjYsIDB4ZGEsIDB4MjEsIDB4MTAsIDB4ZmYsIDB4ZjMsIDB4ZDIpOworCSZkYXRhX2J5dGUoMHhjZCwgMHgwYywgMHgxMywgMHhlYywgMHg1ZiwgMHg5NywgMHg0NCwgMHgxNyk7CisJJmRhdGFfYnl0ZSgweGM0LCAweGE3LCAweDdlLCAweDNkLCAweDY0LCAweDVkLCAweDE5LCAweDczKTsKKwkmZGF0YV9ieXRlKDB4NjAsIDB4ODEsIDB4NGYsIDB4ZGMsIDB4MjIsIDB4MmEsIDB4OTAsIDB4ODgpOworCSZkYXRhX2J5dGUoMHg0NiwgMHhlZSwgMHhiOCwgMHgxNCwgMHhkZSwgMHg1ZSwgMHgwYiwgMHhkYik7CisJJmRhdGFfYnl0ZSgweGUwLCAweDMyLCAweDNhLCAweDBhLCAweDQ5LCAweDA2LCAweDI0LCAweDVjKTsKKwkmZGF0YV9ieXRlKDB4YzIsIDB4ZDMsIDB4YWMsIDB4NjIsIDB4OTEsIDB4OTUsIDB4ZTQsIDB4NzkpOworCSZkYXRhX2J5dGUoMHhlNywgMHhjOCwgMHgzNywgMHg2ZCwgMHg4ZCwgMHhkNSwgMHg0ZSwgMHhhOSk7CisJJmRhdGFfYnl0ZSgweDZjLCAweDU2LCAweGY0LCAweGVhLCAweDY1LCAweDdhLCAweGFlLCAweDA4KTsKKwkmZGF0YV9ieXRlKDB4YmEsIDB4NzgsIDB4MjUsIDB4MmUsIDB4MWMsIDB4YTYsIDB4YjQsIDB4YzYpOworCSZkYXRhX2J5dGUoMHhlOCwgMHhkZCwgMHg3NCwgMHgxZiwgMHg0YiwgMHhiZCwgMHg4YiwgMHg4YSk7CisJJmRhdGFfYnl0ZSgweDcwLCAweDNlLCAweGI1LCAweDY2LCAweDQ4LCAweDAzLCAweGY2LCAweDBlKTsKKwkmZGF0YV9ieXRlKDB4NjEsIDB4MzUsIDB4NTcsIDB4YjksIDB4ODYsIDB4YzEsIDB4MWQsIDB4OWUpOworCSZkYXRhX2J5dGUoMHhlMSwgMHhmOCwgMHg5OCwgMHgxMSwgMHg2OSwgMHhkOSwgMHg4ZSwgMHg5NCk7CisJJmRhdGFfYnl0ZSgweDliLCAweDFlLCAweDg3LCAweGU5LCAweGNlLCAweDU1LCAweDI4LCAweGRmKTsKKwkmZGF0YV9ieXRlKDB4OGMsIDB4YTEsIDB4ODksIDB4MGQsIDB4YmYsIDB4ZTYsIDB4NDIsIDB4NjgpOworCSZkYXRhX2J5dGUoMHg0MSwgMHg5OSwgMHgyZCwgMHgwZiwgMHhiMCwgMHg1NCwgMHhiYiwgMHgxNik7CisKKwkmZGF0YV9ieXRlKDB4NjMsIDB4N2MsIDB4NzcsIDB4N2IsIDB4ZjIsIDB4NmIsIDB4NmYsIDB4YzUpOworCSZkYXRhX2J5dGUoMHgzMCwgMHgwMSwgMHg2NywgMHgyYiwgMHhmZSwgMHhkNywgMHhhYiwgMHg3Nik7CisJJmRhdGFfYnl0ZSgweGNhLCAweDgyLCAweGM5LCAweDdkLCAweGZhLCAweDU5LCAweDQ3LCAweGYwKTsKKwkmZGF0YV9ieXRlKDB4YWQsIDB4ZDQsIDB4YTIsIDB4YWYsIDB4OWMsIDB4YTQsIDB4NzIsIDB4YzApOworCSZkYXRhX2J5dGUoMHhiNywgMHhmZCwgMHg5MywgMHgyNiwgMHgzNiwgMHgzZiwgMHhmNywgMHhjYyk7CisJJmRhdGFfYnl0ZSgweDM0LCAweGE1LCAweGU1LCAweGYxLCAweDcxLCAweGQ4LCAweDMxLCAweDE1KTsKKwkmZGF0YV9ieXRlKDB4MDQsIDB4YzcsIDB4MjMsIDB4YzMsIDB4MTgsIDB4OTYsIDB4MDUsIDB4OWEpOworCSZkYXRhX2J5dGUoMHgwNywgMHgxMiwgMHg4MCwgMHhlMiwgMHhlYiwgMHgyNywgMHhiMiwgMHg3NSk7CisJJmRhdGFfYnl0ZSgweDA5LCAweDgzLCAweDJjLCAweDFhLCAweDFiLCAweDZlLCAweDVhLCAweGEwKTsKKwkmZGF0YV9ieXRlKDB4NTIsIDB4M2IsIDB4ZDYsIDB4YjMsIDB4MjksIDB4ZTMsIDB4MmYsIDB4ODQpOworCSZkYXRhX2J5dGUoMHg1MywgMHhkMSwgMHgwMCwgMHhlZCwgMHgyMCwgMHhmYywgMHhiMSwgMHg1Yik7CisJJmRhdGFfYnl0ZSgweDZhLCAweGNiLCAweGJlLCAweDM5LCAweDRhLCAweDRjLCAweDU4LCAweGNmKTsKKwkmZGF0YV9ieXRlKDB4ZDAsIDB4ZWYsIDB4YWEsIDB4ZmIsIDB4NDMsIDB4NGQsIDB4MzMsIDB4ODUpOworCSZkYXRhX2J5dGUoMHg0NSwgMHhmOSwgMHgwMiwgMHg3ZiwgMHg1MCwgMHgzYywgMHg5ZiwgMHhhOCk7CisJJmRhdGFfYnl0ZSgweDUxLCAweGEzLCAweDQwLCAweDhmLCAweDkyLCAweDlkLCAweDM4LCAweGY1KTsKKwkmZGF0YV9ieXRlKDB4YmMsIDB4YjYsIDB4ZGEsIDB4MjEsIDB4MTAsIDB4ZmYsIDB4ZjMsIDB4ZDIpOworCSZkYXRhX2J5dGUoMHhjZCwgMHgwYywgMHgxMywgMHhlYywgMHg1ZiwgMHg5NywgMHg0NCwgMHgxNyk7CisJJmRhdGFfYnl0ZSgweGM0LCAweGE3LCAweDdlLCAweDNkLCAweDY0LCAweDVkLCAweDE5LCAweDczKTsKKwkmZGF0YV9ieXRlKDB4NjAsIDB4ODEsIDB4NGYsIDB4ZGMsIDB4MjIsIDB4MmEsIDB4OTAsIDB4ODgpOworCSZkYXRhX2J5dGUoMHg0NiwgMHhlZSwgMHhiOCwgMHgxNCwgMHhkZSwgMHg1ZSwgMHgwYiwgMHhkYik7CisJJmRhdGFfYnl0ZSgweGUwLCAweDMyLCAweDNhLCAweDBhLCAweDQ5LCAweDA2LCAweDI0LCAweDVjKTsKKwkmZGF0YV9ieXRlKDB4YzIsIDB4ZDMsIDB4YWMsIDB4NjIsIDB4OTEsIDB4OTUsIDB4ZTQsIDB4NzkpOworCSZkYXRhX2J5dGUoMHhlNywgMHhjOCwgMHgzNywgMHg2ZCwgMHg4ZCwgMHhkNSwgMHg0ZSwgMHhhOSk7CisJJmRhdGFfYnl0ZSgweDZjLCAweDU2LCAweGY0LCAweGVhLCAweDY1LCAweDdhLCAweGFlLCAweDA4KTsKKwkmZGF0YV9ieXRlKDB4YmEsIDB4NzgsIDB4MjUsIDB4MmUsIDB4MWMsIDB4YTYsIDB4YjQsIDB4YzYpOworCSZkYXRhX2J5dGUoMHhlOCwgMHhkZCwgMHg3NCwgMHgxZiwgMHg0YiwgMHhiZCwgMHg4YiwgMHg4YSk7CisJJmRhdGFfYnl0ZSgweDcwLCAweDNlLCAweGI1LCAweDY2LCAweDQ4LCAweDAzLCAweGY2LCAweDBlKTsKKwkmZGF0YV9ieXRlKDB4NjEsIDB4MzUsIDB4NTcsIDB4YjksIDB4ODYsIDB4YzEsIDB4MWQsIDB4OWUpOworCSZkYXRhX2J5dGUoMHhlMSwgMHhmOCwgMHg5OCwgMHgxMSwgMHg2OSwgMHhkOSwgMHg4ZSwgMHg5NCk7CisJJmRhdGFfYnl0ZSgweDliLCAweDFlLCAweDg3LCAweGU5LCAweGNlLCAweDU1LCAweDI4LCAweGRmKTsKKwkmZGF0YV9ieXRlKDB4OGMsIDB4YTEsIDB4ODksIDB4MGQsIDB4YmYsIDB4ZTYsIDB4NDIsIDB4NjgpOworCSZkYXRhX2J5dGUoMHg0MSwgMHg5OSwgMHgyZCwgMHgwZiwgMHhiMCwgMHg1NCwgMHhiYiwgMHgxNik7CisKKwkmZGF0YV9ieXRlKDB4NjMsIDB4N2MsIDB4NzcsIDB4N2IsIDB4ZjIsIDB4NmIsIDB4NmYsIDB4YzUpOworCSZkYXRhX2J5dGUoMHgzMCwgMHgwMSwgMHg2NywgMHgyYiwgMHhmZSwgMHhkNywgMHhhYiwgMHg3Nik7CisJJmRhdGFfYnl0ZSgweGNhLCAweDgyLCAweGM5LCAweDdkLCAweGZhLCAweDU5LCAweDQ3LCAweGYwKTsKKwkmZGF0YV9ieXRlKDB4YWQsIDB4ZDQsIDB4YTIsIDB4YWYsIDB4OWMsIDB4YTQsIDB4NzIsIDB4YzApOworCSZkYXRhX2J5dGUoMHhiNywgMHhmZCwgMHg5MywgMHgyNiwgMHgzNiwgMHgzZiwgMHhmNywgMHhjYyk7CisJJmRhdGFfYnl0ZSgweDM0LCAweGE1LCAweGU1LCAweGYxLCAweDcxLCAweGQ4LCAweDMxLCAweDE1KTsKKwkmZGF0YV9ieXRlKDB4MDQsIDB4YzcsIDB4MjMsIDB4YzMsIDB4MTgsIDB4OTYsIDB4MDUsIDB4OWEpOworCSZkYXRhX2J5dGUoMHgwNywgMHgxMiwgMHg4MCwgMHhlMiwgMHhlYiwgMHgyNywgMHhiMiwgMHg3NSk7CisJJmRhdGFfYnl0ZSgweDA5LCAweDgzLCAweDJjLCAweDFhLCAweDFiLCAweDZlLCAweDVhLCAweGEwKTsKKwkmZGF0YV9ieXRlKDB4NTIsIDB4M2IsIDB4ZDYsIDB4YjMsIDB4MjksIDB4ZTMsIDB4MmYsIDB4ODQpOworCSZkYXRhX2J5dGUoMHg1MywgMHhkMSwgMHgwMCwgMHhlZCwgMHgyMCwgMHhmYywgMHhiMSwgMHg1Yik7CisJJmRhdGFfYnl0ZSgweDZhLCAweGNiLCAweGJlLCAweDM5LCAweDRhLCAweDRjLCAweDU4LCAweGNmKTsKKwkmZGF0YV9ieXRlKDB4ZDAsIDB4ZWYsIDB4YWEsIDB4ZmIsIDB4NDMsIDB4NGQsIDB4MzMsIDB4ODUpOworCSZkYXRhX2J5dGUoMHg0NSwgMHhmOSwgMHgwMiwgMHg3ZiwgMHg1MCwgMHgzYywgMHg5ZiwgMHhhOCk7CisJJmRhdGFfYnl0ZSgweDUxLCAweGEzLCAweDQwLCAweDhmLCAweDkyLCAweDlkLCAweDM4LCAweGY1KTsKKwkmZGF0YV9ieXRlKDB4YmMsIDB4YjYsIDB4ZGEsIDB4MjEsIDB4MTAsIDB4ZmYsIDB4ZjMsIDB4ZDIpOworCSZkYXRhX2J5dGUoMHhjZCwgMHgwYywgMHgxMywgMHhlYywgMHg1ZiwgMHg5NywgMHg0NCwgMHgxNyk7CisJJmRhdGFfYnl0ZSgweGM0LCAweGE3LCAweDdlLCAweDNkLCAweDY0LCAweDVkLCAweDE5LCAweDczKTsKKwkmZGF0YV9ieXRlKDB4NjAsIDB4ODEsIDB4NGYsIDB4ZGMsIDB4MjIsIDB4MmEsIDB4OTAsIDB4ODgpOworCSZkYXRhX2J5dGUoMHg0NiwgMHhlZSwgMHhiOCwgMHgxNCwgMHhkZSwgMHg1ZSwgMHgwYiwgMHhkYik7CisJJmRhdGFfYnl0ZSgweGUwLCAweDMyLCAweDNhLCAweDBhLCAweDQ5LCAweDA2LCAweDI0LCAweDVjKTsKKwkmZGF0YV9ieXRlKDB4YzIsIDB4ZDMsIDB4YWMsIDB4NjIsIDB4OTEsIDB4OTUsIDB4ZTQsIDB4NzkpOworCSZkYXRhX2J5dGUoMHhlNywgMHhjOCwgMHgzNywgMHg2ZCwgMHg4ZCwgMHhkNSwgMHg0ZSwgMHhhOSk7CisJJmRhdGFfYnl0ZSgweDZjLCAweDU2LCAweGY0LCAweGVhLCAweDY1LCAweDdhLCAweGFlLCAweDA4KTsKKwkmZGF0YV9ieXRlKDB4YmEsIDB4NzgsIDB4MjUsIDB4MmUsIDB4MWMsIDB4YTYsIDB4YjQsIDB4YzYpOworCSZkYXRhX2J5dGUoMHhlOCwgMHhkZCwgMHg3NCwgMHgxZiwgMHg0YiwgMHhiZCwgMHg4YiwgMHg4YSk7CisJJmRhdGFfYnl0ZSgweDcwLCAweDNlLCAweGI1LCAweDY2LCAweDQ4LCAweDAzLCAweGY2LCAweDBlKTsKKwkmZGF0YV9ieXRlKDB4NjEsIDB4MzUsIDB4NTcsIDB4YjksIDB4ODYsIDB4YzEsIDB4MWQsIDB4OWUpOworCSZkYXRhX2J5dGUoMHhlMSwgMHhmOCwgMHg5OCwgMHgxMSwgMHg2OSwgMHhkOSwgMHg4ZSwgMHg5NCk7CisJJmRhdGFfYnl0ZSgweDliLCAweDFlLCAweDg3LCAweGU5LCAweGNlLCAweDU1LCAweDI4LCAweGRmKTsKKwkmZGF0YV9ieXRlKDB4OGMsIDB4YTEsIDB4ODksIDB4MGQsIDB4YmYsIDB4ZTYsIDB4NDIsIDB4NjgpOworCSZkYXRhX2J5dGUoMHg0MSwgMHg5OSwgMHgyZCwgMHgwZiwgMHhiMCwgMHg1NCwgMHhiYiwgMHgxNik7CisKKwkmZGF0YV9ieXRlKDB4NjMsIDB4N2MsIDB4NzcsIDB4N2IsIDB4ZjIsIDB4NmIsIDB4NmYsIDB4YzUpOworCSZkYXRhX2J5dGUoMHgzMCwgMHgwMSwgMHg2NywgMHgyYiwgMHhmZSwgMHhkNywgMHhhYiwgMHg3Nik7CisJJmRhdGFfYnl0ZSgweGNhLCAweDgyLCAweGM5LCAweDdkLCAweGZhLCAweDU5LCAweDQ3LCAweGYwKTsKKwkmZGF0YV9ieXRlKDB4YWQsIDB4ZDQsIDB4YTIsIDB4YWYsIDB4OWMsIDB4YTQsIDB4NzIsIDB4YzApOworCSZkYXRhX2J5dGUoMHhiNywgMHhmZCwgMHg5MywgMHgyNiwgMHgzNiwgMHgzZiwgMHhmNywgMHhjYyk7CisJJmRhdGFfYnl0ZSgweDM0LCAweGE1LCAweGU1LCAweGYxLCAweDcxLCAweGQ4LCAweDMxLCAweDE1KTsKKwkmZGF0YV9ieXRlKDB4MDQsIDB4YzcsIDB4MjMsIDB4YzMsIDB4MTgsIDB4OTYsIDB4MDUsIDB4OWEpOworCSZkYXRhX2J5dGUoMHgwNywgMHgxMiwgMHg4MCwgMHhlMiwgMHhlYiwgMHgyNywgMHhiMiwgMHg3NSk7CisJJmRhdGFfYnl0ZSgweDA5LCAweDgzLCAweDJjLCAweDFhLCAweDFiLCAweDZlLCAweDVhLCAweGEwKTsKKwkmZGF0YV9ieXRlKDB4NTIsIDB4M2IsIDB4ZDYsIDB4YjMsIDB4MjksIDB4ZTMsIDB4MmYsIDB4ODQpOworCSZkYXRhX2J5dGUoMHg1MywgMHhkMSwgMHgwMCwgMHhlZCwgMHgyMCwgMHhmYywgMHhiMSwgMHg1Yik7CisJJmRhdGFfYnl0ZSgweDZhLCAweGNiLCAweGJlLCAweDM5LCAweDRhLCAweDRjLCAweDU4LCAweGNmKTsKKwkmZGF0YV9ieXRlKDB4ZDAsIDB4ZWYsIDB4YWEsIDB4ZmIsIDB4NDMsIDB4NGQsIDB4MzMsIDB4ODUpOworCSZkYXRhX2J5dGUoMHg0NSwgMHhmOSwgMHgwMiwgMHg3ZiwgMHg1MCwgMHgzYywgMHg5ZiwgMHhhOCk7CisJJmRhdGFfYnl0ZSgweDUxLCAweGEzLCAweDQwLCAweDhmLCAweDkyLCAweDlkLCAweDM4LCAweGY1KTsKKwkmZGF0YV9ieXRlKDB4YmMsIDB4YjYsIDB4ZGEsIDB4MjEsIDB4MTAsIDB4ZmYsIDB4ZjMsIDB4ZDIpOworCSZkYXRhX2J5dGUoMHhjZCwgMHgwYywgMHgxMywgMHhlYywgMHg1ZiwgMHg5NywgMHg0NCwgMHgxNyk7CisJJmRhdGFfYnl0ZSgweGM0LCAweGE3LCAweDdlLCAweDNkLCAweDY0LCAweDVkLCAweDE5LCAweDczKTsKKwkmZGF0YV9ieXRlKDB4NjAsIDB4ODEsIDB4NGYsIDB4ZGMsIDB4MjIsIDB4MmEsIDB4OTAsIDB4ODgpOworCSZkYXRhX2J5dGUoMHg0NiwgMHhlZSwgMHhiOCwgMHgxNCwgMHhkZSwgMHg1ZSwgMHgwYiwgMHhkYik7CisJJmRhdGFfYnl0ZSgweGUwLCAweDMyLCAweDNhLCAweDBhLCAweDQ5LCAweDA2LCAweDI0LCAweDVjKTsKKwkmZGF0YV9ieXRlKDB4YzIsIDB4ZDMsIDB4YWMsIDB4NjIsIDB4OTEsIDB4OTUsIDB4ZTQsIDB4NzkpOworCSZkYXRhX2J5dGUoMHhlNywgMHhjOCwgMHgzNywgMHg2ZCwgMHg4ZCwgMHhkNSwgMHg0ZSwgMHhhOSk7CisJJmRhdGFfYnl0ZSgweDZjLCAweDU2LCAweGY0LCAweGVhLCAweDY1LCAweDdhLCAweGFlLCAweDA4KTsKKwkmZGF0YV9ieXRlKDB4YmEsIDB4NzgsIDB4MjUsIDB4MmUsIDB4MWMsIDB4YTYsIDB4YjQsIDB4YzYpOworCSZkYXRhX2J5dGUoMHhlOCwgMHhkZCwgMHg3NCwgMHgxZiwgMHg0YiwgMHhiZCwgMHg4YiwgMHg4YSk7CisJJmRhdGFfYnl0ZSgweDcwLCAweDNlLCAweGI1LCAweDY2LCAweDQ4LCAweDAzLCAweGY2LCAweDBlKTsKKwkmZGF0YV9ieXRlKDB4NjEsIDB4MzUsIDB4NTcsIDB4YjksIDB4ODYsIDB4YzEsIDB4MWQsIDB4OWUpOworCSZkYXRhX2J5dGUoMHhlMSwgMHhmOCwgMHg5OCwgMHgxMSwgMHg2OSwgMHhkOSwgMHg4ZSwgMHg5NCk7CisJJmRhdGFfYnl0ZSgweDliLCAweDFlLCAweDg3LCAweGU5LCAweGNlLCAweDU1LCAweDI4LCAweGRmKTsKKwkmZGF0YV9ieXRlKDB4OGMsIDB4YTEsIDB4ODksIDB4MGQsIDB4YmYsIDB4ZTYsIDB4NDIsIDB4NjgpOworCSZkYXRhX2J5dGUoMHg0MSwgMHg5OSwgMHgyZCwgMHgwZiwgMHhiMCwgMHg1NCwgMHhiYiwgMHgxNik7CiAjcmNvbjoKIAkmZGF0YV93b3JkKDB4MDAwMDAwMDEsIDB4MDAwMDAwMDIsIDB4MDAwMDAwMDQsIDB4MDAwMDAwMDgpOwogCSZkYXRhX3dvcmQoMHgwMDAwMDAxMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDA0MCwgMHgwMDAwMDA4MCk7Ci0JJmRhdGFfd29yZCgweDAwMDAwMDFiLCAweDAwMDAwMDM2LCAwLCAwLCAwLCAwLCAwLCAwKTsKKwkmZGF0YV93b3JkKDB4MDAwMDAwMWIsIDB4MDAwMDAwMzYsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDApOworCSZkYXRhX3dvcmQoMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCk7CiAmZnVuY3Rpb25fZW5kX0IoIl94ODZfQUVTX2VuY3J5cHQiKTsKIAogIyB2b2lkIEFFU19lbmNyeXB0IChjb25zdCB2b2lkICppbnAsdm9pZCAqb3V0LGNvbnN0IEFFU19LRVkgKmtleSk7Ci0mcHVibGljX2xhYmVsKCJBRVNfVGUiKTsKICZmdW5jdGlvbl9iZWdpbigiQUVTX2VuY3J5cHQiKTsKIAkmbW92CSgkYWNjLCZ3cGFyYW0oMCkpOwkJIyBsb2FkIGlucAogCSZtb3YJKCRrZXksJndwYXJhbSgyKSk7CQkjIGxvYWQga2V5CiAKIAkmbW92CSgkczAsImVzcCIpOwotCSZzdWIJKCJlc3AiLDI0KTsKLQkmYW5kCSgiZXNwIiwtNjQpOwotCSZhZGQJKCJlc3AiLDQpOwotCSZtb3YJKCZEV1AoMTYsImVzcCIpLCRzMCk7CisJJnN1YgkoImVzcCIsMzYpOworCSZhbmQJKCJlc3AiLC02NCk7CQkJIyBhbGlnbiB0byBjYWNoZS1saW5lCisKKwkjIHBsYWNlIHN0YWNrIGZyYW1lIGp1c3QgImFib3ZlIiB0aGUga2V5IHNjaGVkdWxlCisJJmxlYQkoJHMxLCZEV1AoLTY0LTYzLCRrZXkpKTsKKwkmc3ViCSgkczEsImVzcCIpOworCSZuZWcJKCRzMSk7CisJJmFuZAkoJHMxLDB4M0MwKTsJIyBtb2R1bG8gMTAyNCwgYnV0IGFsaWduZWQgdG8gY2FjaGUtbGluZQorCSZzdWIJKCJlc3AiLCRzMSk7CisJJmFkZAkoImVzcCIsNCk7CSMgNCBpcyByZXNlcnZlZCBmb3IgY2FsbGVyJ3MgcmV0dXJuIGFkZHJlc3MKKwkmbW92CSgkX2VzcCwkczApOwkJCSMgc2F2ZSBzdGFjayBwb2ludGVyCiAKIAkmY2FsbCAgICgmbGFiZWwoInBpY19wb2ludCIpKTsgICAgICAgICAgIyBtYWtlIGl0IFBJQyEKIAkmc2V0X2xhYmVsKCJwaWNfcG9pbnQiKTsKLQkmYmxpbmRwb3AoImVicCIpOwotCSZsZWEgICAgKCJlYnAiLCZEV1AoJmxhYmVsKCJBRVNfVGUiKS4iLSIuJmxhYmVsKCJwaWNfcG9pbnQiKSwiZWJwIikpOworCSZibGluZHBvcCgkdGJsKTsKKwkmcGljbWV1cCgkczAsIk9QRU5TU0xfaWEzMmNhcF9QIiwkdGJsLCZsYWJlbCgicGljX3BvaW50IikpIGlmICghJHg4Nm9ubHkpOworCSZsZWEgICAgKCR0YmwsJkRXUCgmbGFiZWwoIkFFU19UZSIpLiItIi4mbGFiZWwoInBpY19wb2ludCIpLCR0YmwpKTsKIAorCSMgcGljayBUZTQgY29weSB3aGljaCBjYW4ndCAib3ZlcmxhcCIgd2l0aCBzdGFjayBmcmFtZSBvciBrZXkgc2NoZWR1bGUKKwkmbGVhCSgkczEsJkRXUCg3NjgtNCwiZXNwIikpOworCSZzdWIJKCRzMSwkdGJsKTsKKwkmYW5kCSgkczEsMHgzMDApOworCSZsZWEJKCR0YmwsJkRXUCgyMDQ4KzEyOCwkdGJsLCRzMSkpOworCisJCQkJCWlmICghJHg4Nm9ubHkpIHsKKwkmYnQJKCZEV1AoMCwkczApLDI1KTsJIyBjaGVjayBmb3IgU1NFIGJpdAorCSZqbmMJKCZsYWJlbCgieDg2IikpOworCisJJm1vdnEJKCJtbTAiLCZRV1AoMCwkYWNjKSk7CisJJm1vdnEJKCJtbTQiLCZRV1AoOCwkYWNjKSk7CisJJmNhbGwJKCJfc3NlX0FFU19lbmNyeXB0X2NvbXBhY3QiKTsKKwkmbW92CSgiZXNwIiwkX2VzcCk7CQkJIyByZXN0b3JlIHN0YWNrIHBvaW50ZXIKKwkmbW92CSgkYWNjLCZ3cGFyYW0oMSkpOwkJIyBsb2FkIG91dAorCSZtb3ZxCSgmUVdQKDAsJGFjYyksIm1tMCIpOwkJIyB3cml0ZSBvdXRwdXQgZGF0YQorCSZtb3ZxCSgmUVdQKDgsJGFjYyksIm1tNCIpOworCSZlbW1zCSgpOworCSZmdW5jdGlvbl9lbmRfQSgpOworCQkJCQl9CisJJnNldF9sYWJlbCgieDg2IiwxNik7CisJJm1vdgkoJF90YmwsJHRibCk7CiAJJm1vdgkoJHMwLCZEV1AoMCwkYWNjKSk7CQkjIGxvYWQgaW5wdXQgZGF0YQogCSZtb3YJKCRzMSwmRFdQKDQsJGFjYykpOwogCSZtb3YJKCRzMiwmRFdQKDgsJGFjYykpOwogCSZtb3YJKCRzMywmRFdQKDEyLCRhY2MpKTsKLQotCSZjYWxsCSgiX3g4Nl9BRVNfZW5jcnlwdCIpOwotCi0JJm1vdgkoImVzcCIsJkRXUCgxNiwiZXNwIikpOwotCisJJmNhbGwJKCJfeDg2X0FFU19lbmNyeXB0X2NvbXBhY3QiKTsKKwkmbW92CSgiZXNwIiwkX2VzcCk7CQkJIyByZXN0b3JlIHN0YWNrIHBvaW50ZXIKIAkmbW92CSgkYWNjLCZ3cGFyYW0oMSkpOwkJIyBsb2FkIG91dAogCSZtb3YJKCZEV1AoMCwkYWNjKSwkczApOwkJIyB3cml0ZSBvdXRwdXQgZGF0YQogCSZtb3YJKCZEV1AoNCwkYWNjKSwkczEpOwpAQCAtNDY5LDcgKzEyMTUsMzcwIEBACiAJJm1vdgkoJkRXUCgxMiwkYWNjKSwkczMpOwogJmZ1bmN0aW9uX2VuZCgiQUVTX2VuY3J5cHQiKTsKIAotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAiQ29tcGFjdCIgYmxvY2sgZnVuY3Rpb24KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworc3ViIGRlY2NvbXBhY3QoKQoreyBteSAkRm4gPSBtb3Y7CisgIHdoaWxlICgkI18+NSkgeyBwb3AoQF8pOyAkRm49c3Vie307IH0KKyAgbXkgKCRpLCR0ZCxAcyk9QF87CisgIG15ICR0bXAgPSAka2V5OworICBteSAkb3V0ID0gJGk9PTM/JHNbMF06JGFjYzsKKworCSMgJEZuIGlzIHVzZWQgaW4gZmlyc3QgY29tcGFjdCByb3VuZCBhbmQgaXRzIHB1cnBvc2UgaXMgdG8KKwkjIHZvaWQgcmVzdG9yYXRpb24gb2Ygc29tZSB2YWx1ZXMgZnJvbSBzdGFjaywgc28gdGhhdCBhZnRlcgorCSMgNHhkZWNjb21wYWN0IHdpdGggZXh0cmEgYXJndW1lbnQgJGtleSwgJHMwIGFuZCAkczEgdmFsdWVzCisJIyBhcmUgbGVmdCB0aGVyZS4uLgorCWlmKCRpPT0zKSAgIHsJJiRGbgkoJGtleSwkX19rZXkpOwkJCX0KKwllbHNlICAgICAgICB7CSZtb3YJKCRvdXQsJHNbMF0pOwkJCX0KKwkJCSZhbmQJKCRvdXQsMHhGRik7CisJCQkmbW92egkoJG91dCwmQlAoLTEyOCwkdGQsJG91dCwxKSk7CisKKwlpZiAoJGk9PTMpICB7CSR0bXA9JHNbMV07CQkJCX0KKwkJCSZtb3Z6CSgkdG1wLCZIQigkc1sxXSkpOworCQkJJm1vdnoJKCR0bXAsJkJQKC0xMjgsJHRkLCR0bXAsMSkpOworCQkJJnNobAkoJHRtcCw4KTsKKwkJCSZ4b3IJKCRvdXQsJHRtcCk7CisKKwlpZiAoJGk9PTMpICB7CSR0bXA9JHNbMl07ICZtb3YgKCRzWzFdLCRhY2MpOwkJfQorCWVsc2UgICAgICAgIHsJbW92CSgkdG1wLCRzWzJdKTsJCQl9CisJCQkmc2hyCSgkdG1wLDE2KTsKKwkJCSZhbmQJKCR0bXAsMHhGRik7CisJCQkmbW92egkoJHRtcCwmQlAoLTEyOCwkdGQsJHRtcCwxKSk7CisJCQkmc2hsCSgkdG1wLDE2KTsKKwkJCSZ4b3IJKCRvdXQsJHRtcCk7CisKKwlpZiAoJGk9PTMpICB7CSR0bXA9JHNbM107ICYkRm4gKCRzWzJdLCRfX3MxKTsJCX0KKwllbHNlICAgICAgICB7CSZtb3YJKCR0bXAsJHNbM10pOwkJCX0KKwkJCSZzaHIJKCR0bXAsMjQpOworCQkJJm1vdnoJKCR0bXAsJkJQKC0xMjgsJHRkLCR0bXAsMSkpOworCQkJJnNobAkoJHRtcCwyNCk7CisJCQkmeG9yCSgkb3V0LCR0bXApOworCWlmICgkaTwyKSAgIHsJJm1vdgkoJkRXUCg0KzQqJGksImVzcCIpLCRvdXQpOwl9CisJaWYgKCRpPT0zKSAgewkmJEZuCSgkc1szXSwkX19zMCk7CQkJfQorfQorCisjIG11c3QgYmUgY2FsbGVkIHdpdGggMiwzLDAsMSBhcyBhcmd1bWVudCBzZXF1ZW5jZSEhIQorc3ViIGRlY3RyYW5zZm9ybSgpCit7IG15IEBzID0gKCRzMCwkczEsJHMyLCRzMyk7CisgIG15ICRpID0gc2hpZnQ7CisgIG15ICR0bXAgPSAka2V5OworICBteSAkdHAyID0gQHNbKCRpKzIpJTRdOyAkdHAyID0gQHNbMl0gaWYgKCRpPT0xKTsKKyAgbXkgJHRwNCA9IEBzWygkaSszKSU0XTsgJHRwNCA9IEBzWzNdIGlmICgkaT09MSk7CisgIG15ICR0cDggPSAkdGJsOworCisJJm1vdgkoJGFjYywkc1skaV0pOworCSZhbmQJKCRhY2MsMHg4MDgwODA4MCk7CisJJm1vdgkoJHRtcCwkYWNjKTsKKwkmc2hyCSgkdG1wLDcpOworCSZsZWEJKCR0cDIsJkRXUCgwLCRzWyRpXSwkc1skaV0pKTsKKwkmc3ViCSgkYWNjLCR0bXApOworCSZhbmQJKCR0cDIsMHhmZWZlZmVmZSk7CisJJmFuZAkoJGFjYywweDFiMWIxYjFiKTsKKwkmeG9yCSgkYWNjLCR0cDIpOworCSZtb3YJKCR0cDIsJGFjYyk7CisKKwkmYW5kCSgkYWNjLDB4ODA4MDgwODApOworCSZtb3YJKCR0bXAsJGFjYyk7CisJJnNocgkoJHRtcCw3KTsKKwkmbGVhCSgkdHA0LCZEV1AoMCwkdHAyLCR0cDIpKTsKKwkmc3ViCSgkYWNjLCR0bXApOworCSZhbmQJKCR0cDQsMHhmZWZlZmVmZSk7CisJJmFuZAkoJGFjYywweDFiMWIxYjFiKTsKKwkgJnhvcgkoJHRwMiwkc1skaV0pOwkjIHRwMl50cDEKKwkmeG9yCSgkYWNjLCR0cDQpOworCSZtb3YJKCR0cDQsJGFjYyk7CisKKwkmYW5kCSgkYWNjLDB4ODA4MDgwODApOworCSZtb3YJKCR0bXAsJGFjYyk7CisJJnNocgkoJHRtcCw3KTsKKwkmbGVhCSgkdHA4LCZEV1AoMCwkdHA0LCR0cDQpKTsKKwkmc3ViCSgkYWNjLCR0bXApOworCSZhbmQJKCR0cDgsMHhmZWZlZmVmZSk7CisJJmFuZAkoJGFjYywweDFiMWIxYjFiKTsKKwkgJnhvcgkoJHRwNCwkc1skaV0pOwkjIHRwNF50cDEKKwkgJnJvdGwJKCRzWyRpXSw4KTsJIyA9IFJPVEFURSh0cDEsOCkKKwkmeG9yCSgkdHA4LCRhY2MpOworCisJJnhvcgkoJHNbJGldLCR0cDIpOworCSZ4b3IJKCR0cDIsJHRwOCk7CisJJnJvdGwJKCR0cDIsMjQpOworCSZ4b3IJKCRzWyRpXSwkdHA0KTsKKwkmeG9yCSgkdHA0LCR0cDgpOworCSZyb3RsCSgkdHA0LDE2KTsKKwkmeG9yCSgkc1skaV0sJHRwOCk7CSMgXj0gdHA4Xih0cDRedHAxKV4odHAyXnRwMSkKKwkmcm90bAkoJHRwOCw4KTsKKwkmeG9yCSgkc1skaV0sJHRwMik7CSMgXj0gUk9UQVRFKHRwOF50cDJedHAxLDI0KQorCSZ4b3IJKCRzWyRpXSwkdHA0KTsJIyBePSBST1RBVEUodHA4XnRwNF50cDEsMTYpCisJICZtb3YJKCRzWzBdLCRfX3MwKQkJCWlmKCRpPT0yKTsgI3ByZWZldGNoICRzMAorCSAmbW92CSgkc1sxXSwkX19zMSkJCQlpZigkaT09Myk7ICNwcmVmZXRjaCAkczEKKwkgJm1vdgkoJHNbMl0sJF9fczIpCQkJaWYoJGk9PTEpOworCSZ4b3IJKCRzWyRpXSwkdHA4KTsJIyBePSBST1RBVEUodHA4LDgpCisKKwkmbW92CSgkc1szXSwkX19zMykJCQlpZigkaT09MSk7CisJJm1vdgkoJkRXUCg0KzQqJGksImVzcCIpLCRzWyRpXSkJaWYoJGk+PTIpOworfQorCismZnVuY3Rpb25fYmVnaW5fQigiX3g4Nl9BRVNfZGVjcnlwdF9jb21wYWN0Iik7CisJIyBub3RlIHRoYXQgY2FsbGVyIGlzIGV4cGVjdGVkIHRvIGFsbG9jYXRlIHN0YWNrIGZyYW1lIGZvciBtZSEKKwkmbW92CSgkX19rZXksJGtleSk7CQkJIyBzYXZlIGtleQorCisJJnhvcgkoJHMwLCZEV1AoMCwka2V5KSk7CQkjIHhvciB3aXRoIGtleQorCSZ4b3IJKCRzMSwmRFdQKDQsJGtleSkpOworCSZ4b3IJKCRzMiwmRFdQKDgsJGtleSkpOworCSZ4b3IJKCRzMywmRFdQKDEyLCRrZXkpKTsKKworCSZtb3YJKCRhY2MsJkRXUCgyNDAsJGtleSkpOwkJIyBsb2FkIGtleS0+cm91bmRzCisKKwkmbGVhCSgkYWNjLCZEV1AoLTIsJGFjYywkYWNjKSk7CisJJmxlYQkoJGFjYywmRFdQKDAsJGtleSwkYWNjLDgpKTsKKwkmbW92CSgkX19lbmQsJGFjYyk7CQkJIyBlbmQgb2Yga2V5IHNjaGVkdWxlCisKKwkjIHByZWZldGNoIFRkNAorCSZtb3YJKCRrZXksJkRXUCgwLTEyOCwkdGJsKSk7CisJJm1vdgkoJGFjYywmRFdQKDMyLTEyOCwkdGJsKSk7CisJJm1vdgkoJGtleSwmRFdQKDY0LTEyOCwkdGJsKSk7CisJJm1vdgkoJGFjYywmRFdQKDk2LTEyOCwkdGJsKSk7CisJJm1vdgkoJGtleSwmRFdQKDEyOC0xMjgsJHRibCkpOworCSZtb3YJKCRhY2MsJkRXUCgxNjAtMTI4LCR0YmwpKTsKKwkmbW92CSgka2V5LCZEV1AoMTkyLTEyOCwkdGJsKSk7CisJJm1vdgkoJGFjYywmRFdQKDIyNC0xMjgsJHRibCkpOworCisJJnNldF9sYWJlbCgibG9vcCIsMTYpOworCisJCSZkZWNjb21wYWN0KDAsJHRibCwkczAsJHMzLCRzMiwkczEsMSk7CisJCSZkZWNjb21wYWN0KDEsJHRibCwkczEsJHMwLCRzMywkczIsMSk7CisJCSZkZWNjb21wYWN0KDIsJHRibCwkczIsJHMxLCRzMCwkczMsMSk7CisJCSZkZWNjb21wYWN0KDMsJHRibCwkczMsJHMyLCRzMSwkczAsMSk7CisJCSZkZWN0cmFuc2Zvcm0oMik7CisJCSZkZWN0cmFuc2Zvcm0oMyk7CisJCSZkZWN0cmFuc2Zvcm0oMCk7CisJCSZkZWN0cmFuc2Zvcm0oMSk7CisJCSZtb3YgCSgka2V5LCRfX2tleSk7CisJCSZtb3YJKCR0YmwsJF9fdGJsKTsKKwkJJmFkZAkoJGtleSwxNik7CQkjIGFkdmFuY2UgcmRfa2V5CisJCSZ4b3IJKCRzMCwmRFdQKDAsJGtleSkpOworCQkmeG9yCSgkczEsJkRXUCg0LCRrZXkpKTsKKwkJJnhvcgkoJHMyLCZEV1AoOCwka2V5KSk7CisJCSZ4b3IJKCRzMywmRFdQKDEyLCRrZXkpKTsKKworCSZjbXAJKCRrZXksJF9fZW5kKTsKKwkmbW92CSgkX19rZXksJGtleSk7CisJJmpiCSgmbGFiZWwoImxvb3AiKSk7CisKKwkmZGVjY29tcGFjdCgwLCR0YmwsJHMwLCRzMywkczIsJHMxKTsKKwkmZGVjY29tcGFjdCgxLCR0YmwsJHMxLCRzMCwkczMsJHMyKTsKKwkmZGVjY29tcGFjdCgyLCR0YmwsJHMyLCRzMSwkczAsJHMzKTsKKwkmZGVjY29tcGFjdCgzLCR0YmwsJHMzLCRzMiwkczEsJHMwKTsKKworCSZ4b3IJKCRzMCwmRFdQKDE2LCRrZXkpKTsKKwkmeG9yCSgkczEsJkRXUCgyMCwka2V5KSk7CisJJnhvcgkoJHMyLCZEV1AoMjQsJGtleSkpOworCSZ4b3IJKCRzMywmRFdQKDI4LCRrZXkpKTsKKworCSZyZXQJKCk7CismZnVuY3Rpb25fZW5kX0IoIl94ODZfQUVTX2RlY3J5cHRfY29tcGFjdCIpOworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjICJDb21wYWN0IiBTU0UgYmxvY2sgZnVuY3Rpb24uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3N1YiBzc2VfZGVjY29tcGFjdCgpCit7CisJJnBzaHVmdwkoIm1tMSIsIm1tMCIsMHgwYyk7CQkjICA3LCA2LCAxLCAwCisJJm1vdmQJKCJlYXgiLCJtbTEiKTsJCQkjICA3LCA2LCAxLCAwCisKKwkmcHNodWZ3CSgibW01IiwibW00IiwweDA5KTsJCSMgMTMsMTIsMTEsMTAKKwkmbW92egkoJGFjYywmTEIoImVheCIpKTsJCSMgIDAKKwkmbW92egkoImVjeCIsJkJQKC0xMjgsJHRibCwkYWNjLDEpKTsJIyAgMAorCSZtb3ZkCSgiZWJ4IiwibW01Iik7CQkJIyAxMywxMiwxMSwxMAorCSZtb3Z6CSgiZWR4IiwmSEIoImVheCIpKTsJCSMgIDEKKwkmbW92egkoImVkeCIsJkJQKC0xMjgsJHRibCwiZWR4IiwxKSk7CSMgIDEKKwkmc2hsCSgiZWR4Iiw4KTsJCQkjICAxCisKKwkmcHNodWZ3CSgibW0yIiwibW0wIiwweDA2KTsJCSMgIDMsIDIsIDUsIDQKKwkmbW92egkoJGFjYywmTEIoImVieCIpKTsJCSMgMTAKKwkmbW92egkoJGFjYywmQlAoLTEyOCwkdGJsLCRhY2MsMSkpOwkjIDEwCisJJnNobAkoJGFjYywxNik7CQkJIyAxMAorCSZvcgkoImVjeCIsJGFjYyk7CQkJIyAxMAorCSZzaHIJKCJlYXgiLDE2KTsJCQkjICA3LCA2CisJJm1vdnoJKCRhY2MsJkhCKCJlYngiKSk7CQkjIDExCisJJm1vdnoJKCRhY2MsJkJQKC0xMjgsJHRibCwkYWNjLDEpKTsJIyAxMQorCSZzaGwJKCRhY2MsMjQpOwkJCSMgMTEKKwkmb3IJKCJlZHgiLCRhY2MpOwkJCSMgMTEKKwkmc2hyCSgiZWJ4IiwxNik7CQkJIyAxMywxMgorCisJJnBzaHVmdwkoIm1tNiIsIm1tNCIsMHgwMyk7CQkjIDksIDgsMTUsMTQKKwkmbW92egkoJGFjYywmSEIoImVheCIpKTsJCSMgIDcKKwkmbW92egkoJGFjYywmQlAoLTEyOCwkdGJsLCRhY2MsMSkpOwkjICA3CisJJnNobAkoJGFjYywyNCk7CQkJIyAgNworCSZvcgkoImVjeCIsJGFjYyk7CQkJIyAgNworCSZtb3Z6CSgkYWNjLCZIQigiZWJ4IikpOwkJIyAxMworCSZtb3Z6CSgkYWNjLCZCUCgtMTI4LCR0YmwsJGFjYywxKSk7CSMgMTMKKwkmc2hsCSgkYWNjLDgpOwkJCSMgMTMKKwkmb3IJKCJlY3giLCRhY2MpOwkJCSMgMTMKKwkmbW92ZAkoIm1tMCIsImVjeCIpOwkJCSMgdFswXSBjb2xsZWN0ZWQKKworCSZtb3Z6CSgkYWNjLCZMQigiZWF4IikpOwkJIyAgNgorCSZtb3ZkCSgiZWF4IiwibW0yIik7CQkJIyAgMywgMiwgNSwgNAorCSZtb3Z6CSgiZWN4IiwmQlAoLTEyOCwkdGJsLCRhY2MsMSkpOwkjICA2CisJJnNobAkoImVjeCIsMTYpOwkJCSMgIDYKKwkmbW92egkoJGFjYywmTEIoImVieCIpKTsJCSMgMTIKKwkmbW92ZAkoImVieCIsIm1tNiIpOwkJCSMgIDksIDgsMTUsMTQKKwkmbW92egkoJGFjYywmQlAoLTEyOCwkdGJsLCRhY2MsMSkpOwkjIDEyCisJJm9yCSgiZWN4IiwkYWNjKTsJCQkjIDEyCisKKwkmbW92egkoJGFjYywmTEIoImVheCIpKTsJCSMgIDQKKwkmbW92egkoJGFjYywmQlAoLTEyOCwkdGJsLCRhY2MsMSkpOwkjICA0CisJJm9yCSgiZWR4IiwkYWNjKTsJCQkjICA0CisJJm1vdnoJKCRhY2MsJkxCKCJlYngiKSk7CQkjIDE0CisJJm1vdnoJKCRhY2MsJkJQKC0xMjgsJHRibCwkYWNjLDEpKTsJIyAxNAorCSZzaGwJKCRhY2MsMTYpOwkJCSMgMTQKKwkmb3IJKCJlZHgiLCRhY2MpOwkJCSMgMTQKKwkmbW92ZAkoIm1tMSIsImVkeCIpOwkJCSMgdFsxXSBjb2xsZWN0ZWQKKworCSZtb3Z6CSgkYWNjLCZIQigiZWF4IikpOwkJIyAgNQorCSZtb3Z6CSgiZWR4IiwmQlAoLTEyOCwkdGJsLCRhY2MsMSkpOwkjICA1CisJJnNobAkoImVkeCIsOCk7CQkJIyAgNQorCSZtb3Z6CSgkYWNjLCZIQigiZWJ4IikpOwkJIyAxNQorCSZzaHIJKCJlYXgiLDE2KTsJCQkjICAzLCAyCisJJm1vdnoJKCRhY2MsJkJQKC0xMjgsJHRibCwkYWNjLDEpKTsJIyAxNQorCSZzaGwJKCRhY2MsMjQpOwkJCSMgMTUKKwkmb3IJKCJlZHgiLCRhY2MpOwkJCSMgMTUKKwkmc2hyCSgiZWJ4IiwxNik7CQkJIyAgOSwgOAorCisJJnB1bnBja2xkcQkoIm1tMCIsIm1tMSIpOwkJIyB0WzAsMV0gY29sbGVjdGVkCisKKwkmbW92egkoJGFjYywmSEIoImVieCIpKTsJCSMgIDkKKwkmbW92egkoJGFjYywmQlAoLTEyOCwkdGJsLCRhY2MsMSkpOwkjICA5CisJJnNobAkoJGFjYyw4KTsJCQkjICA5CisJJm9yCSgiZWN4IiwkYWNjKTsJCQkjICA5CisJJmFuZAkoImVieCIsMHhmZik7CQkJIyAgOAorCSZtb3Z6CSgiZWJ4IiwmQlAoLTEyOCwkdGJsLCJlYngiLDEpKTsJIyAgOAorCSZvcgkoImVkeCIsImVieCIpOwkJCSMgIDgKKwkmbW92egkoJGFjYywmTEIoImVheCIpKTsJCSMgIDIKKwkmbW92egkoJGFjYywmQlAoLTEyOCwkdGJsLCRhY2MsMSkpOwkjICAyCisJJnNobAkoJGFjYywxNik7CQkJIyAgMgorCSZvcgkoImVkeCIsJGFjYyk7CQkJIyAgMgorCSZtb3ZkCSgibW00IiwiZWR4Iik7CQkJIyB0WzJdIGNvbGxlY3RlZAorCSZtb3Z6CSgiZWF4IiwmSEIoImVheCIpKTsJCSMgIDMKKwkmbW92egkoImVheCIsJkJQKC0xMjgsJHRibCwiZWF4IiwxKSk7CSMgIDMKKwkmc2hsCSgiZWF4IiwyNCk7CQkJIyAgMworCSZvcgkoImVjeCIsImVheCIpOwkJCSMgIDMKKwkmbW92ZAkoIm1tNSIsImVjeCIpOwkJCSMgdFszXSBjb2xsZWN0ZWQKKworCSZwdW5wY2tsZHEJKCJtbTQiLCJtbTUiKTsJCSMgdFsyLDNdIGNvbGxlY3RlZAorfQorCisJCQkJCWlmICghJHg4Nm9ubHkpIHsKKyZmdW5jdGlvbl9iZWdpbl9CKCJfc3NlX0FFU19kZWNyeXB0X2NvbXBhY3QiKTsKKwkmcHhvcgkoIm1tMCIsJlFXUCgwLCRrZXkpKTsJIyAgNywgNiwgNSwgNCwgMywgMiwgMSwgMAorCSZweG9yCSgibW00IiwmUVdQKDgsJGtleSkpOwkjIDE1LDE0LDEzLDEyLDExLDEwLCA5LCA4CisKKwkjIG5vdGUgdGhhdCBjYWxsZXIgaXMgZXhwZWN0ZWQgdG8gYWxsb2NhdGUgc3RhY2sgZnJhbWUgZm9yIG1lIQorCSZtb3YJKCRhY2MsJkRXUCgyNDAsJGtleSkpOwkJIyBsb2FkIGtleS0+cm91bmRzCisJJmxlYQkoJGFjYywmRFdQKC0yLCRhY2MsJGFjYykpOworCSZsZWEJKCRhY2MsJkRXUCgwLCRrZXksJGFjYyw4KSk7CisJJm1vdgkoJF9fZW5kLCRhY2MpOwkJCSMgZW5kIG9mIGtleSBzY2hlZHVsZQorCisJJm1vdgkoJHMwLDB4MWIxYjFiMWIpOwkJIyBtYWdpYyBjb25zdGFudAorCSZtb3YJKCZEV1AoOCwiZXNwIiksJHMwKTsKKwkmbW92CSgmRFdQKDEyLCJlc3AiKSwkczApOworCisJIyBwcmVmZXRjaCBUZDQKKwkmbW92CSgkczAsJkRXUCgwLTEyOCwkdGJsKSk7CisJJm1vdgkoJHMxLCZEV1AoMzItMTI4LCR0YmwpKTsKKwkmbW92CSgkczIsJkRXUCg2NC0xMjgsJHRibCkpOworCSZtb3YJKCRzMywmRFdQKDk2LTEyOCwkdGJsKSk7CisJJm1vdgkoJHMwLCZEV1AoMTI4LTEyOCwkdGJsKSk7CisJJm1vdgkoJHMxLCZEV1AoMTYwLTEyOCwkdGJsKSk7CisJJm1vdgkoJHMyLCZEV1AoMTkyLTEyOCwkdGJsKSk7CisJJm1vdgkoJHMzLCZEV1AoMjI0LTEyOCwkdGJsKSk7CisKKwkmc2V0X2xhYmVsKCJsb29wIiwxNik7CisJCSZzc2VfZGVjY29tcGFjdCgpOworCQkmYWRkCSgka2V5LDE2KTsKKwkJJmNtcAkoJGtleSwkX19lbmQpOworCQkmamEJKCZsYWJlbCgib3V0IikpOworCisJCSMgUk9UQVRFKHheeSxOKSA9PSBST1RBVEUoeCxOKV5ST1RBVEUoeSxOKQorCQkmbW92cQkoIm1tMyIsIm1tMCIpOwkJJm1vdnEJKCJtbTciLCJtbTQiKTsKKwkJJm1vdnEJKCJtbTIiLCJtbTAiLDEpOwkmbW92cQkoIm1tNiIsIm1tNCIsMSk7CisJCSZtb3ZxCSgibW0xIiwibW0wIik7CQkmbW92cQkoIm1tNSIsIm1tNCIpOworCQkmcHNodWZ3CSgibW0wIiwibW0wIiwweGIxKTsJJnBzaHVmdwkoIm1tNCIsIm1tNCIsMHhiMSk7IyA9IFJPVEFURSh0cDAsMTYpCisJCSZwc2xsZAkoIm1tMiIsOCk7CQkmcHNsbGQJKCJtbTYiLDgpOworCQkmcHNybGQJKCJtbTMiLDgpOwkJJnBzcmxkCSgibW03Iiw4KTsKKwkJJnB4b3IJKCJtbTAiLCJtbTIiKTsJCSZweG9yCSgibW00IiwibW02Iik7CSMgXj0gdHAwPDw4CisJCSZweG9yCSgibW0wIiwibW0zIik7CQkmcHhvcgkoIm1tNCIsIm1tNyIpOwkjIF49IHRwMD4+OAorCQkmcHNsbGQJKCJtbTIiLDE2KTsJCSZwc2xsZAkoIm1tNiIsMTYpOworCQkmcHNybGQJKCJtbTMiLDE2KTsJCSZwc3JsZAkoIm1tNyIsMTYpOworCQkmcHhvcgkoIm1tMCIsIm1tMiIpOwkJJnB4b3IJKCJtbTQiLCJtbTYiKTsJIyBePSB0cDA8PDI0CisJCSZweG9yCSgibW0wIiwibW0zIik7CQkmcHhvcgkoIm1tNCIsIm1tNyIpOwkjIF49IHRwMD4+MjQKKworCQkmbW92cQkoIm1tMyIsJlFXUCg4LCJlc3AiKSk7CisJCSZweG9yCSgibW0yIiwibW0yIik7CQkmcHhvcgkoIm1tNiIsIm1tNiIpOworCQkmcGNtcGd0YigibW0yIiwibW0xIik7CQkmcGNtcGd0YigibW02IiwibW01Iik7CisJCSZwYW5kCSgibW0yIiwibW0zIik7CQkmcGFuZAkoIm1tNiIsIm1tMyIpOworCQkmcGFkZGIJKCJtbTEiLCJtbTEiKTsJCSZwYWRkYgkoIm1tNSIsIm1tNSIpOworCQkmcHhvcgkoIm1tMSIsIm1tMiIpOwkJJnB4b3IJKCJtbTUiLCJtbTYiKTsJIyB0cDIKKwkJJm1vdnEJKCJtbTMiLCJtbTEiKTsJCSZtb3ZxCSgibW03IiwibW01Iik7CisJCSZtb3ZxCSgibW0yIiwibW0xIik7CQkmbW92cQkoIm1tNiIsIm1tNSIpOworCQkmcHhvcgkoIm1tMCIsIm1tMSIpOwkJJnB4b3IJKCJtbTQiLCJtbTUiKTsJIyBePSB0cDIKKwkJJnBzbGxkCSgibW0zIiwyNCk7CQkmcHNsbGQJKCJtbTciLDI0KTsKKwkJJnBzcmxkCSgibW0yIiw4KTsJCSZwc3JsZAkoIm1tNiIsOCk7CisJCSZweG9yCSgibW0wIiwibW0zIik7CQkmcHhvcgkoIm1tNCIsIm1tNyIpOwkjIF49IHRwMjw8MjQKKwkJJnB4b3IJKCJtbTAiLCJtbTIiKTsJCSZweG9yCSgibW00IiwibW02Iik7CSMgXj0gdHAyPj44CisKKwkJJm1vdnEJKCJtbTIiLCZRV1AoOCwiZXNwIikpOworCQkmcHhvcgkoIm1tMyIsIm1tMyIpOwkJJnB4b3IJKCJtbTciLCJtbTciKTsKKwkJJnBjbXBndGIoIm1tMyIsIm1tMSIpOwkJJnBjbXBndGIoIm1tNyIsIm1tNSIpOworCQkmcGFuZAkoIm1tMyIsIm1tMiIpOwkJJnBhbmQJKCJtbTciLCJtbTIiKTsKKwkJJnBhZGRiCSgibW0xIiwibW0xIik7CQkmcGFkZGIJKCJtbTUiLCJtbTUiKTsKKwkJJnB4b3IJKCJtbTEiLCJtbTMiKTsJCSZweG9yCSgibW01IiwibW03Iik7CSMgdHA0CisJCSZwc2h1ZncJKCJtbTMiLCJtbTEiLDB4YjEpOwkmcHNodWZ3CSgibW03IiwibW01IiwweGIxKTsKKwkJJnB4b3IJKCJtbTAiLCJtbTEiKTsJCSZweG9yCSgibW00IiwibW01Iik7CSMgXj0gdHA0CisJCSZweG9yCSgibW0wIiwibW0zIik7CQkmcHhvcgkoIm1tNCIsIm1tNyIpOwkjIF49IFJPVEFURSh0cDQsMTYpCQorCisJCSZweG9yCSgibW0zIiwibW0zIik7CQkmcHhvcgkoIm1tNyIsIm1tNyIpOworCQkmcGNtcGd0YigibW0zIiwibW0xIik7CQkmcGNtcGd0YigibW03IiwibW01Iik7CisJCSZwYW5kCSgibW0zIiwibW0yIik7CQkmcGFuZAkoIm1tNyIsIm1tMiIpOworCQkmcGFkZGIJKCJtbTEiLCJtbTEiKTsJCSZwYWRkYgkoIm1tNSIsIm1tNSIpOworCQkmcHhvcgkoIm1tMSIsIm1tMyIpOwkJJnB4b3IJKCJtbTUiLCJtbTciKTsJIyB0cDgKKwkJJnB4b3IJKCJtbTAiLCJtbTEiKTsJCSZweG9yCSgibW00IiwibW01Iik7CSMgXj0gdHA4CisJCSZtb3ZxCSgibW0zIiwibW0xIik7CQkmbW92cQkoIm1tNyIsIm1tNSIpOworCQkmcHNodWZ3CSgibW0yIiwibW0xIiwweGIxKTsJJnBzaHVmdwkoIm1tNiIsIm1tNSIsMHhiMSk7CisJCSZweG9yCSgibW0wIiwibW0yIik7CQkmcHhvcgkoIm1tNCIsIm1tNiIpOwkjIF49IFJPVEFURSh0cDgsMTYpCisJCSZwc2xsZAkoIm1tMSIsOCk7CQkmcHNsbGQJKCJtbTUiLDgpOworCQkmcHNybGQJKCJtbTMiLDgpOwkJJnBzcmxkCSgibW03Iiw4KTsKKwkJJm1vdnEJKCJtbTIiLCZRV1AoMCwka2V5KSk7CSZtb3ZxCSgibW02IiwmUVdQKDgsJGtleSkpOworCQkmcHhvcgkoIm1tMCIsIm1tMSIpOwkJJnB4b3IJKCJtbTQiLCJtbTUiKTsJIyBePSB0cDg8PDgKKwkJJnB4b3IJKCJtbTAiLCJtbTMiKTsJCSZweG9yCSgibW00IiwibW03Iik7CSMgXj0gdHA4Pj44CisJCSZtb3YJKCRzMCwmRFdQKDAtMTI4LCR0YmwpKTsKKwkJJnBzbGxkCSgibW0xIiwxNik7CQkmcHNsbGQJKCJtbTUiLDE2KTsKKwkJJm1vdgkoJHMxLCZEV1AoNjQtMTI4LCR0YmwpKTsKKwkJJnBzcmxkCSgibW0zIiwxNik7CQkmcHNybGQJKCJtbTciLDE2KTsKKwkJJm1vdgkoJHMyLCZEV1AoMTI4LTEyOCwkdGJsKSk7CisJCSZweG9yCSgibW0wIiwibW0xIik7CQkmcHhvcgkoIm1tNCIsIm1tNSIpOwkjIF49IHRwODw8MjQKKwkJJm1vdgkoJHMzLCZEV1AoMTkyLTEyOCwkdGJsKSk7CisJCSZweG9yCSgibW0wIiwibW0zIik7CQkmcHhvcgkoIm1tNCIsIm1tNyIpOwkjIF49IHRwOD4+MjQKKworCQkmcHhvcgkoIm1tMCIsIm1tMiIpOwkJJnB4b3IJKCJtbTQiLCJtbTYiKTsKKwkmam1wCSgmbGFiZWwoImxvb3AiKSk7CisKKwkmc2V0X2xhYmVsKCJvdXQiLDE2KTsKKwkmcHhvcgkoIm1tMCIsJlFXUCgwLCRrZXkpKTsKKwkmcHhvcgkoIm1tNCIsJlFXUCg4LCRrZXkpKTsKKworCSZyZXQJKCk7CismZnVuY3Rpb25fZW5kX0IoIl9zc2VfQUVTX2RlY3J5cHRfY29tcGFjdCIpOworCQkJCQl9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVmFuaWxsYSBibG9jayBmdW5jdGlvbi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAogc3ViIGRlY3N0ZXAoKQogeyBteSAoJGksJHRkLEBzKSA9IEBfOwpAQCAtNDgwLDcgKzE1ODksNyBAQAogCSMgb3B0aW1hbC4uLiBvciByYXRoZXIgdGhhdCBhbGwgYXR0ZW1wdHMgdG8gcmVvcmRlciBkaWRuJ3QKIAkjIHJlc3VsdCBpbiBiZXR0ZXIgcGVyZm9ybWFuY2UgW3doaWNoIGJ5IHRoZSB3YXkgaXMgbm90IGEKIAkjIGJpdCBsb3dlciB0aGFuIGVjcnlwdGlvbl0uCi0JaWYoJGk9PTMpICAgewkmbW92CSgka2V5LCZEV1AoMTIsImVzcCIpKTsJCX0KKwlpZigkaT09MykgICB7CSZtb3YJKCRrZXksJF9fa2V5KTsJCQl9CiAJZWxzZSAgICAgICAgewkmbW92CSgkb3V0LCRzWzBdKTsJCQl9CiAJCQkmYW5kCSgkb3V0LDB4RkYpOwogCQkJJm1vdgkoJG91dCwmRFdQKDAsJHRkLCRvdXQsOCkpOwpAQCAtNDk1LDEyICsxNjA0LDEyIEBACiAJCQkmYW5kCSgkdG1wLDB4RkYpOwogCQkJJnhvcgkoJG91dCwmRFdQKDIsJHRkLCR0bXAsOCkpOwogCi0JaWYgKCRpPT0zKSAgewkkdG1wPSRzWzNdOyAmbW92ICgkc1syXSwmRFdQKDgsImVzcCIpKTsJfQorCWlmICgkaT09MykgIHsJJHRtcD0kc1szXTsgJm1vdiAoJHNbMl0sJF9fczEpOwkJfQogCWVsc2UgICAgICAgIHsJJm1vdgkoJHRtcCwkc1szXSk7CQkJfQogCQkJJnNocgkoJHRtcCwyNCk7CiAJCQkmeG9yCSgkb3V0LCZEV1AoMSwkdGQsJHRtcCw4KSk7CiAJaWYgKCRpPDIpICAgewkmbW92CSgmRFdQKDQrNCokaSwiZXNwIiksJG91dCk7CX0KLQlpZiAoJGk9PTMpICB7CSZtb3YJKCRzWzNdLCZEV1AoNCwiZXNwIikpOwkJfQorCWlmICgkaT09MykgIHsJJm1vdgkoJHNbM10sJF9fczApOwkJCX0KIAkJCSZjb21tZW50KCk7CiB9CiAKQEAgLTUwOSwxNCArMTYxOCwyNCBAQAogICBteSAkdG1wID0gJGtleTsKICAgbXkgJG91dCA9ICRpPT0zPyRzWzBdOiRhY2M7CiAKLQlpZigkaT09MykgICB7CSZtb3YJKCRrZXksJkRXUCgxMiwiZXNwIikpOwkJfQorCWlmKCRpPT0wKSAgIHsJJmxlYQkoJHRkLCZEV1AoMjA0OCsxMjgsJHRkKSk7CisJCQkmbW92CSgkdG1wLCZEV1AoMC0xMjgsJHRkKSk7CisJCQkmbW92CSgkYWNjLCZEV1AoMzItMTI4LCR0ZCkpOworCQkJJm1vdgkoJHRtcCwmRFdQKDY0LTEyOCwkdGQpKTsKKwkJCSZtb3YJKCRhY2MsJkRXUCg5Ni0xMjgsJHRkKSk7CisJCQkmbW92CSgkdG1wLCZEV1AoMTI4LTEyOCwkdGQpKTsKKwkJCSZtb3YJKCRhY2MsJkRXUCgxNjAtMTI4LCR0ZCkpOworCQkJJm1vdgkoJHRtcCwmRFdQKDE5Mi0xMjgsJHRkKSk7CisJCQkmbW92CSgkYWNjLCZEV1AoMjI0LTEyOCwkdGQpKTsKKwkJCSZsZWEJKCR0ZCwmRFdQKC0xMjgsJHRkKSk7CQl9CisJaWYoJGk9PTMpICAgewkmbW92CSgka2V5LCRfX2tleSk7CQkJfQogCWVsc2UgICAgICAgIHsJJm1vdgkoJG91dCwkc1swXSk7CQkJfQogCQkJJmFuZAkoJG91dCwweEZGKTsKLQkJCSZtb3Z6CSgkb3V0LCZCUCgyMDQ4LCR0ZCwkb3V0LDEpKTsKKwkJCSZtb3Z6CSgkb3V0LCZCUCgwLCR0ZCwkb3V0LDEpKTsKIAogCWlmICgkaT09MykgIHsJJHRtcD0kc1sxXTsJCQkJfQogCQkJJm1vdnoJKCR0bXAsJkhCKCRzWzFdKSk7Ci0JCQkmbW92egkoJHRtcCwmQlAoMjA0OCwkdGQsJHRtcCwxKSk7CisJCQkmbW92egkoJHRtcCwmQlAoMCwkdGQsJHRtcCwxKSk7CiAJCQkmc2hsCSgkdG1wLDgpOwogCQkJJnhvcgkoJG91dCwkdG1wKTsKIApAQCAtNTI0LDI0ICsxNjQzLDI0IEBACiAJZWxzZSAgICAgICAgewltb3YJKCR0bXAsJHNbMl0pOwkJCX0KIAkJCSZzaHIJKCR0bXAsMTYpOwogCQkJJmFuZAkoJHRtcCwweEZGKTsKLQkJCSZtb3Z6CSgkdG1wLCZCUCgyMDQ4LCR0ZCwkdG1wLDEpKTsKKwkJCSZtb3Z6CSgkdG1wLCZCUCgwLCR0ZCwkdG1wLDEpKTsKIAkJCSZzaGwJKCR0bXAsMTYpOwogCQkJJnhvcgkoJG91dCwkdG1wKTsKIAotCWlmICgkaT09MykgIHsJJHRtcD0kc1szXTsgJm1vdiAoJHNbMl0sJkRXUCg4LCJlc3AiKSk7CX0KKwlpZiAoJGk9PTMpICB7CSR0bXA9JHNbM107ICZtb3YgKCRzWzJdLCRfX3MxKTsJCX0KIAllbHNlICAgICAgICB7CSZtb3YJKCR0bXAsJHNbM10pOwkJCX0KIAkJCSZzaHIJKCR0bXAsMjQpOwotCQkJJm1vdnoJKCR0bXAsJkJQKDIwNDgsJHRkLCR0bXAsMSkpOworCQkJJm1vdnoJKCR0bXAsJkJQKDAsJHRkLCR0bXAsMSkpOwogCQkJJnNobAkoJHRtcCwyNCk7CiAJCQkmeG9yCSgkb3V0LCR0bXApOwogCWlmICgkaTwyKSAgIHsJJm1vdgkoJkRXUCg0KzQqJGksImVzcCIpLCRvdXQpOwl9Ci0JaWYgKCRpPT0zKSAgewkmbW92CSgkc1szXSwmRFdQKDQsImVzcCIpKTsJCX0KKwlpZiAoJGk9PTMpICB7CSZtb3YJKCRzWzNdLCRfX3MwKTsKKwkJCSZsZWEJKCR0ZCwmRFdQKC0yMDQ4LCR0ZCkpOwkJfQogfQogCi0mcHVibGljX2xhYmVsKCJBRVNfVGQiKTsKICZmdW5jdGlvbl9iZWdpbl9CKCJfeDg2X0FFU19kZWNyeXB0Iik7CiAJIyBub3RlIHRoYXQgY2FsbGVyIGlzIGV4cGVjdGVkIHRvIGFsbG9jYXRlIHN0YWNrIGZyYW1lIGZvciBtZSEKLQkmbW92CSgmRFdQKDEyLCJlc3AiKSwka2V5KTsJCSMgc2F2ZSBrZXkKKwkmbW92CSgkX19rZXksJGtleSk7CQkJIyBzYXZlIGtleQogCiAJJnhvcgkoJHMwLCZEV1AoMCwka2V5KSk7CQkjIHhvciB3aXRoIGtleQogCSZ4b3IJKCRzMSwmRFdQKDQsJGtleSkpOwpAQCAtNTUzLDIwICsxNjcyLDE5IEBACiAJaWYgKCRzbWFsbF9mb290cHJpbnQpIHsKIAkgICAgJmxlYQkoJGFjYywmRFdQKC0yLCRhY2MsJGFjYykpOwogCSAgICAmbGVhCSgkYWNjLCZEV1AoMCwka2V5LCRhY2MsOCkpOwotCSAgICAmbW92CSgmRFdQKDE2LCJlc3AiKSwkYWNjKTsJIyBlbmQgb2Yga2V5IHNjaGVkdWxlCi0JICAgICZhbGlnbgkoNCk7Ci0JICAgICZzZXRfbGFiZWwoImxvb3AiKTsKLQkJJmRlY3N0ZXAoMCwiZWJwIiwkczAsJHMzLCRzMiwkczEpOwotCQkmZGVjc3RlcCgxLCJlYnAiLCRzMSwkczAsJHMzLCRzMik7Ci0JCSZkZWNzdGVwKDIsImVicCIsJHMyLCRzMSwkczAsJHMzKTsKLQkJJmRlY3N0ZXAoMywiZWJwIiwkczMsJHMyLCRzMSwkczApOworCSAgICAmbW92CSgkX19lbmQsJGFjYyk7CQkjIGVuZCBvZiBrZXkgc2NoZWR1bGUKKwkgICAgJnNldF9sYWJlbCgibG9vcCIsMTYpOworCQkmZGVjc3RlcCgwLCR0YmwsJHMwLCRzMywkczIsJHMxKTsKKwkJJmRlY3N0ZXAoMSwkdGJsLCRzMSwkczAsJHMzLCRzMik7CisJCSZkZWNzdGVwKDIsJHRibCwkczIsJHMxLCRzMCwkczMpOworCQkmZGVjc3RlcCgzLCR0YmwsJHMzLCRzMiwkczEsJHMwKTsKIAkJJmFkZAkoJGtleSwxNik7CQkjIGFkdmFuY2UgcmRfa2V5CiAJCSZ4b3IJKCRzMCwmRFdQKDAsJGtleSkpOwogCQkmeG9yCSgkczEsJkRXUCg0LCRrZXkpKTsKIAkJJnhvcgkoJHMyLCZEV1AoOCwka2V5KSk7CiAJCSZ4b3IJKCRzMywmRFdQKDEyLCRrZXkpKTsKLQkgICAgJmNtcAkoJGtleSwmRFdQKDE2LCJlc3AiKSk7Ci0JICAgICZtb3YJKCZEV1AoMTIsImVzcCIpLCRrZXkpOworCSAgICAmY21wCSgka2V5LCRfX2VuZCk7CisJICAgICZtb3YJKCRfX2tleSwka2V5KTsKIAkgICAgJmpiCQkoJmxhYmVsKCJsb29wIikpOwogCX0KIAllbHNlIHsKQEAgLTU3NSwzOCArMTY5MywzOCBAQAogCSAgICAmY21wCSgkYWNjLDEyKTsKIAkgICAgJmpsZQkoJmxhYmVsKCIxMnJvdW5kcyIpKTsKIAotCSZzZXRfbGFiZWwoIjE0cm91bmRzIik7CisJJnNldF9sYWJlbCgiMTRyb3VuZHMiLDQpOwogCSAgICBmb3IgKCRpPTE7JGk8MzskaSsrKSB7Ci0JCSZkZWNzdGVwKDAsImVicCIsJHMwLCRzMywkczIsJHMxKTsKLQkJJmRlY3N0ZXAoMSwiZWJwIiwkczEsJHMwLCRzMywkczIpOwotCQkmZGVjc3RlcCgyLCJlYnAiLCRzMiwkczEsJHMwLCRzMyk7Ci0JCSZkZWNzdGVwKDMsImVicCIsJHMzLCRzMiwkczEsJHMwKTsKKwkJJmRlY3N0ZXAoMCwkdGJsLCRzMCwkczMsJHMyLCRzMSk7CisJCSZkZWNzdGVwKDEsJHRibCwkczEsJHMwLCRzMywkczIpOworCQkmZGVjc3RlcCgyLCR0YmwsJHMyLCRzMSwkczAsJHMzKTsKKwkJJmRlY3N0ZXAoMywkdGJsLCRzMywkczIsJHMxLCRzMCk7CiAJCSZ4b3IJKCRzMCwmRFdQKDE2KiRpKzAsJGtleSkpOwogCQkmeG9yCSgkczEsJkRXUCgxNiokaSs0LCRrZXkpKTsKIAkJJnhvcgkoJHMyLCZEV1AoMTYqJGkrOCwka2V5KSk7CiAJCSZ4b3IJKCRzMywmRFdQKDE2KiRpKzEyLCRrZXkpKTsKIAkgICAgfQogCSAgICAmYWRkCSgka2V5LDMyKTsKLQkgICAgJm1vdgkoJkRXUCgxMiwiZXNwIiksJGtleSk7CSMgYWR2YW5jZSByZF9rZXkKLQkmc2V0X2xhYmVsKCIxMnJvdW5kcyIpOworCSAgICAmbW92CSgkX19rZXksJGtleSk7CQkjIGFkdmFuY2UgcmRfa2V5CisJJnNldF9sYWJlbCgiMTJyb3VuZHMiLDQpOwogCSAgICBmb3IgKCRpPTE7JGk8MzskaSsrKSB7Ci0JCSZkZWNzdGVwKDAsImVicCIsJHMwLCRzMywkczIsJHMxKTsKLQkJJmRlY3N0ZXAoMSwiZWJwIiwkczEsJHMwLCRzMywkczIpOwotCQkmZGVjc3RlcCgyLCJlYnAiLCRzMiwkczEsJHMwLCRzMyk7Ci0JCSZkZWNzdGVwKDMsImVicCIsJHMzLCRzMiwkczEsJHMwKTsKKwkJJmRlY3N0ZXAoMCwkdGJsLCRzMCwkczMsJHMyLCRzMSk7CisJCSZkZWNzdGVwKDEsJHRibCwkczEsJHMwLCRzMywkczIpOworCQkmZGVjc3RlcCgyLCR0YmwsJHMyLCRzMSwkczAsJHMzKTsKKwkJJmRlY3N0ZXAoMywkdGJsLCRzMywkczIsJHMxLCRzMCk7CiAJCSZ4b3IJKCRzMCwmRFdQKDE2KiRpKzAsJGtleSkpOwogCQkmeG9yCSgkczEsJkRXUCgxNiokaSs0LCRrZXkpKTsKIAkJJnhvcgkoJHMyLCZEV1AoMTYqJGkrOCwka2V5KSk7CiAJCSZ4b3IJKCRzMywmRFdQKDE2KiRpKzEyLCRrZXkpKTsKIAkgICAgfQogCSAgICAmYWRkCSgka2V5LDMyKTsKLQkgICAgJm1vdgkoJkRXUCgxMiwiZXNwIiksJGtleSk7CSMgYWR2YW5jZSByZF9rZXkKLQkmc2V0X2xhYmVsKCIxMHJvdW5kcyIpOworCSAgICAmbW92CSgkX19rZXksJGtleSk7CQkjIGFkdmFuY2UgcmRfa2V5CisJJnNldF9sYWJlbCgiMTByb3VuZHMiLDQpOwogCSAgICBmb3IgKCRpPTE7JGk8MTA7JGkrKykgewotCQkmZGVjc3RlcCgwLCJlYnAiLCRzMCwkczMsJHMyLCRzMSk7Ci0JCSZkZWNzdGVwKDEsImVicCIsJHMxLCRzMCwkczMsJHMyKTsKLQkJJmRlY3N0ZXAoMiwiZWJwIiwkczIsJHMxLCRzMCwkczMpOwotCQkmZGVjc3RlcCgzLCJlYnAiLCRzMywkczIsJHMxLCRzMCk7CisJCSZkZWNzdGVwKDAsJHRibCwkczAsJHMzLCRzMiwkczEpOworCQkmZGVjc3RlcCgxLCR0YmwsJHMxLCRzMCwkczMsJHMyKTsKKwkJJmRlY3N0ZXAoMiwkdGJsLCRzMiwkczEsJHMwLCRzMyk7CisJCSZkZWNzdGVwKDMsJHRibCwkczMsJHMyLCRzMSwkczApOwogCQkmeG9yCSgkczAsJkRXUCgxNiokaSswLCRrZXkpKTsKIAkJJnhvcgkoJHMxLCZEV1AoMTYqJGkrNCwka2V5KSk7CiAJCSZ4b3IJKCRzMiwmRFdQKDE2KiRpKzgsJGtleSkpOwpAQCAtNjE0LDEwICsxNzMyLDEwIEBACiAJICAgIH0KIAl9CiAKLQkmZGVjbGFzdCgwLCJlYnAiLCRzMCwkczMsJHMyLCRzMSk7Ci0JJmRlY2xhc3QoMSwiZWJwIiwkczEsJHMwLCRzMywkczIpOwotCSZkZWNsYXN0KDIsImVicCIsJHMyLCRzMSwkczAsJHMzKTsKLQkmZGVjbGFzdCgzLCJlYnAiLCRzMywkczIsJHMxLCRzMCk7CisJJmRlY2xhc3QoMCwkdGJsLCRzMCwkczMsJHMyLCRzMSk7CisJJmRlY2xhc3QoMSwkdGJsLCRzMSwkczAsJHMzLCRzMik7CisJJmRlY2xhc3QoMiwkdGJsLCRzMiwkczEsJHMwLCRzMyk7CisJJmRlY2xhc3QoMywkdGJsLCRzMywkczIsJHMxLCRzMCk7CiAKIAkmYWRkCSgka2V5LCRzbWFsbF9mb290cHJpbnQ/MTY6MTYwKTsKIAkmeG9yCSgkczAsJkRXUCgwLCRrZXkpKTsKQEAgLTY5Miw3ICsxODEwLDEwNyBAQAogCSZfZGF0YV93b3JkKDB4NzJjMzFkMTYsIDB4MGMyNWUyYmMsIDB4OGI0OTNjMjgsIDB4NDE5NTBkZmYpOwogCSZfZGF0YV93b3JkKDB4NzEwMWE4MzksIDB4ZGViMzBjMDgsIDB4OWNlNGI0ZDgsIDB4OTBjMTU2NjQpOwogCSZfZGF0YV93b3JkKDB4NjE4NGNiN2IsIDB4NzBiNjMyZDUsIDB4NzQ1YzZjNDgsIDB4NDI1N2I4ZDApOwotI1RkNDoKKworI1RkNDoJIyBmb3VyIGNvcGllcyBvZiBUZDQgdG8gY2hvb3NlIGZyb20gdG8gYXZvaWQgTDEgYWxpYXNpbmcKKwkmZGF0YV9ieXRlKDB4NTIsIDB4MDksIDB4NmEsIDB4ZDUsIDB4MzAsIDB4MzYsIDB4YTUsIDB4MzgpOworCSZkYXRhX2J5dGUoMHhiZiwgMHg0MCwgMHhhMywgMHg5ZSwgMHg4MSwgMHhmMywgMHhkNywgMHhmYik7CisJJmRhdGFfYnl0ZSgweDdjLCAweGUzLCAweDM5LCAweDgyLCAweDliLCAweDJmLCAweGZmLCAweDg3KTsKKwkmZGF0YV9ieXRlKDB4MzQsIDB4OGUsIDB4NDMsIDB4NDQsIDB4YzQsIDB4ZGUsIDB4ZTksIDB4Y2IpOworCSZkYXRhX2J5dGUoMHg1NCwgMHg3YiwgMHg5NCwgMHgzMiwgMHhhNiwgMHhjMiwgMHgyMywgMHgzZCk7CisJJmRhdGFfYnl0ZSgweGVlLCAweDRjLCAweDk1LCAweDBiLCAweDQyLCAweGZhLCAweGMzLCAweDRlKTsKKwkmZGF0YV9ieXRlKDB4MDgsIDB4MmUsIDB4YTEsIDB4NjYsIDB4MjgsIDB4ZDksIDB4MjQsIDB4YjIpOworCSZkYXRhX2J5dGUoMHg3NiwgMHg1YiwgMHhhMiwgMHg0OSwgMHg2ZCwgMHg4YiwgMHhkMSwgMHgyNSk7CisJJmRhdGFfYnl0ZSgweDcyLCAweGY4LCAweGY2LCAweDY0LCAweDg2LCAweDY4LCAweDk4LCAweDE2KTsKKwkmZGF0YV9ieXRlKDB4ZDQsIDB4YTQsIDB4NWMsIDB4Y2MsIDB4NWQsIDB4NjUsIDB4YjYsIDB4OTIpOworCSZkYXRhX2J5dGUoMHg2YywgMHg3MCwgMHg0OCwgMHg1MCwgMHhmZCwgMHhlZCwgMHhiOSwgMHhkYSk7CisJJmRhdGFfYnl0ZSgweDVlLCAweDE1LCAweDQ2LCAweDU3LCAweGE3LCAweDhkLCAweDlkLCAweDg0KTsKKwkmZGF0YV9ieXRlKDB4OTAsIDB4ZDgsIDB4YWIsIDB4MDAsIDB4OGMsIDB4YmMsIDB4ZDMsIDB4MGEpOworCSZkYXRhX2J5dGUoMHhmNywgMHhlNCwgMHg1OCwgMHgwNSwgMHhiOCwgMHhiMywgMHg0NSwgMHgwNik7CisJJmRhdGFfYnl0ZSgweGQwLCAweDJjLCAweDFlLCAweDhmLCAweGNhLCAweDNmLCAweDBmLCAweDAyKTsKKwkmZGF0YV9ieXRlKDB4YzEsIDB4YWYsIDB4YmQsIDB4MDMsIDB4MDEsIDB4MTMsIDB4OGEsIDB4NmIpOworCSZkYXRhX2J5dGUoMHgzYSwgMHg5MSwgMHgxMSwgMHg0MSwgMHg0ZiwgMHg2NywgMHhkYywgMHhlYSk7CisJJmRhdGFfYnl0ZSgweDk3LCAweGYyLCAweGNmLCAweGNlLCAweGYwLCAweGI0LCAweGU2LCAweDczKTsKKwkmZGF0YV9ieXRlKDB4OTYsIDB4YWMsIDB4NzQsIDB4MjIsIDB4ZTcsIDB4YWQsIDB4MzUsIDB4ODUpOworCSZkYXRhX2J5dGUoMHhlMiwgMHhmOSwgMHgzNywgMHhlOCwgMHgxYywgMHg3NSwgMHhkZiwgMHg2ZSk7CisJJmRhdGFfYnl0ZSgweDQ3LCAweGYxLCAweDFhLCAweDcxLCAweDFkLCAweDI5LCAweGM1LCAweDg5KTsKKwkmZGF0YV9ieXRlKDB4NmYsIDB4YjcsIDB4NjIsIDB4MGUsIDB4YWEsIDB4MTgsIDB4YmUsIDB4MWIpOworCSZkYXRhX2J5dGUoMHhmYywgMHg1NiwgMHgzZSwgMHg0YiwgMHhjNiwgMHhkMiwgMHg3OSwgMHgyMCk7CisJJmRhdGFfYnl0ZSgweDlhLCAweGRiLCAweGMwLCAweGZlLCAweDc4LCAweGNkLCAweDVhLCAweGY0KTsKKwkmZGF0YV9ieXRlKDB4MWYsIDB4ZGQsIDB4YTgsIDB4MzMsIDB4ODgsIDB4MDcsIDB4YzcsIDB4MzEpOworCSZkYXRhX2J5dGUoMHhiMSwgMHgxMiwgMHgxMCwgMHg1OSwgMHgyNywgMHg4MCwgMHhlYywgMHg1Zik7CisJJmRhdGFfYnl0ZSgweDYwLCAweDUxLCAweDdmLCAweGE5LCAweDE5LCAweGI1LCAweDRhLCAweDBkKTsKKwkmZGF0YV9ieXRlKDB4MmQsIDB4ZTUsIDB4N2EsIDB4OWYsIDB4OTMsIDB4YzksIDB4OWMsIDB4ZWYpOworCSZkYXRhX2J5dGUoMHhhMCwgMHhlMCwgMHgzYiwgMHg0ZCwgMHhhZSwgMHgyYSwgMHhmNSwgMHhiMCk7CisJJmRhdGFfYnl0ZSgweGM4LCAweGViLCAweGJiLCAweDNjLCAweDgzLCAweDUzLCAweDk5LCAweDYxKTsKKwkmZGF0YV9ieXRlKDB4MTcsIDB4MmIsIDB4MDQsIDB4N2UsIDB4YmEsIDB4NzcsIDB4ZDYsIDB4MjYpOworCSZkYXRhX2J5dGUoMHhlMSwgMHg2OSwgMHgxNCwgMHg2MywgMHg1NSwgMHgyMSwgMHgwYywgMHg3ZCk7CisKKwkmZGF0YV9ieXRlKDB4NTIsIDB4MDksIDB4NmEsIDB4ZDUsIDB4MzAsIDB4MzYsIDB4YTUsIDB4MzgpOworCSZkYXRhX2J5dGUoMHhiZiwgMHg0MCwgMHhhMywgMHg5ZSwgMHg4MSwgMHhmMywgMHhkNywgMHhmYik7CisJJmRhdGFfYnl0ZSgweDdjLCAweGUzLCAweDM5LCAweDgyLCAweDliLCAweDJmLCAweGZmLCAweDg3KTsKKwkmZGF0YV9ieXRlKDB4MzQsIDB4OGUsIDB4NDMsIDB4NDQsIDB4YzQsIDB4ZGUsIDB4ZTksIDB4Y2IpOworCSZkYXRhX2J5dGUoMHg1NCwgMHg3YiwgMHg5NCwgMHgzMiwgMHhhNiwgMHhjMiwgMHgyMywgMHgzZCk7CisJJmRhdGFfYnl0ZSgweGVlLCAweDRjLCAweDk1LCAweDBiLCAweDQyLCAweGZhLCAweGMzLCAweDRlKTsKKwkmZGF0YV9ieXRlKDB4MDgsIDB4MmUsIDB4YTEsIDB4NjYsIDB4MjgsIDB4ZDksIDB4MjQsIDB4YjIpOworCSZkYXRhX2J5dGUoMHg3NiwgMHg1YiwgMHhhMiwgMHg0OSwgMHg2ZCwgMHg4YiwgMHhkMSwgMHgyNSk7CisJJmRhdGFfYnl0ZSgweDcyLCAweGY4LCAweGY2LCAweDY0LCAweDg2LCAweDY4LCAweDk4LCAweDE2KTsKKwkmZGF0YV9ieXRlKDB4ZDQsIDB4YTQsIDB4NWMsIDB4Y2MsIDB4NWQsIDB4NjUsIDB4YjYsIDB4OTIpOworCSZkYXRhX2J5dGUoMHg2YywgMHg3MCwgMHg0OCwgMHg1MCwgMHhmZCwgMHhlZCwgMHhiOSwgMHhkYSk7CisJJmRhdGFfYnl0ZSgweDVlLCAweDE1LCAweDQ2LCAweDU3LCAweGE3LCAweDhkLCAweDlkLCAweDg0KTsKKwkmZGF0YV9ieXRlKDB4OTAsIDB4ZDgsIDB4YWIsIDB4MDAsIDB4OGMsIDB4YmMsIDB4ZDMsIDB4MGEpOworCSZkYXRhX2J5dGUoMHhmNywgMHhlNCwgMHg1OCwgMHgwNSwgMHhiOCwgMHhiMywgMHg0NSwgMHgwNik7CisJJmRhdGFfYnl0ZSgweGQwLCAweDJjLCAweDFlLCAweDhmLCAweGNhLCAweDNmLCAweDBmLCAweDAyKTsKKwkmZGF0YV9ieXRlKDB4YzEsIDB4YWYsIDB4YmQsIDB4MDMsIDB4MDEsIDB4MTMsIDB4OGEsIDB4NmIpOworCSZkYXRhX2J5dGUoMHgzYSwgMHg5MSwgMHgxMSwgMHg0MSwgMHg0ZiwgMHg2NywgMHhkYywgMHhlYSk7CisJJmRhdGFfYnl0ZSgweDk3LCAweGYyLCAweGNmLCAweGNlLCAweGYwLCAweGI0LCAweGU2LCAweDczKTsKKwkmZGF0YV9ieXRlKDB4OTYsIDB4YWMsIDB4NzQsIDB4MjIsIDB4ZTcsIDB4YWQsIDB4MzUsIDB4ODUpOworCSZkYXRhX2J5dGUoMHhlMiwgMHhmOSwgMHgzNywgMHhlOCwgMHgxYywgMHg3NSwgMHhkZiwgMHg2ZSk7CisJJmRhdGFfYnl0ZSgweDQ3LCAweGYxLCAweDFhLCAweDcxLCAweDFkLCAweDI5LCAweGM1LCAweDg5KTsKKwkmZGF0YV9ieXRlKDB4NmYsIDB4YjcsIDB4NjIsIDB4MGUsIDB4YWEsIDB4MTgsIDB4YmUsIDB4MWIpOworCSZkYXRhX2J5dGUoMHhmYywgMHg1NiwgMHgzZSwgMHg0YiwgMHhjNiwgMHhkMiwgMHg3OSwgMHgyMCk7CisJJmRhdGFfYnl0ZSgweDlhLCAweGRiLCAweGMwLCAweGZlLCAweDc4LCAweGNkLCAweDVhLCAweGY0KTsKKwkmZGF0YV9ieXRlKDB4MWYsIDB4ZGQsIDB4YTgsIDB4MzMsIDB4ODgsIDB4MDcsIDB4YzcsIDB4MzEpOworCSZkYXRhX2J5dGUoMHhiMSwgMHgxMiwgMHgxMCwgMHg1OSwgMHgyNywgMHg4MCwgMHhlYywgMHg1Zik7CisJJmRhdGFfYnl0ZSgweDYwLCAweDUxLCAweDdmLCAweGE5LCAweDE5LCAweGI1LCAweDRhLCAweDBkKTsKKwkmZGF0YV9ieXRlKDB4MmQsIDB4ZTUsIDB4N2EsIDB4OWYsIDB4OTMsIDB4YzksIDB4OWMsIDB4ZWYpOworCSZkYXRhX2J5dGUoMHhhMCwgMHhlMCwgMHgzYiwgMHg0ZCwgMHhhZSwgMHgyYSwgMHhmNSwgMHhiMCk7CisJJmRhdGFfYnl0ZSgweGM4LCAweGViLCAweGJiLCAweDNjLCAweDgzLCAweDUzLCAweDk5LCAweDYxKTsKKwkmZGF0YV9ieXRlKDB4MTcsIDB4MmIsIDB4MDQsIDB4N2UsIDB4YmEsIDB4NzcsIDB4ZDYsIDB4MjYpOworCSZkYXRhX2J5dGUoMHhlMSwgMHg2OSwgMHgxNCwgMHg2MywgMHg1NSwgMHgyMSwgMHgwYywgMHg3ZCk7CisKKwkmZGF0YV9ieXRlKDB4NTIsIDB4MDksIDB4NmEsIDB4ZDUsIDB4MzAsIDB4MzYsIDB4YTUsIDB4MzgpOworCSZkYXRhX2J5dGUoMHhiZiwgMHg0MCwgMHhhMywgMHg5ZSwgMHg4MSwgMHhmMywgMHhkNywgMHhmYik7CisJJmRhdGFfYnl0ZSgweDdjLCAweGUzLCAweDM5LCAweDgyLCAweDliLCAweDJmLCAweGZmLCAweDg3KTsKKwkmZGF0YV9ieXRlKDB4MzQsIDB4OGUsIDB4NDMsIDB4NDQsIDB4YzQsIDB4ZGUsIDB4ZTksIDB4Y2IpOworCSZkYXRhX2J5dGUoMHg1NCwgMHg3YiwgMHg5NCwgMHgzMiwgMHhhNiwgMHhjMiwgMHgyMywgMHgzZCk7CisJJmRhdGFfYnl0ZSgweGVlLCAweDRjLCAweDk1LCAweDBiLCAweDQyLCAweGZhLCAweGMzLCAweDRlKTsKKwkmZGF0YV9ieXRlKDB4MDgsIDB4MmUsIDB4YTEsIDB4NjYsIDB4MjgsIDB4ZDksIDB4MjQsIDB4YjIpOworCSZkYXRhX2J5dGUoMHg3NiwgMHg1YiwgMHhhMiwgMHg0OSwgMHg2ZCwgMHg4YiwgMHhkMSwgMHgyNSk7CisJJmRhdGFfYnl0ZSgweDcyLCAweGY4LCAweGY2LCAweDY0LCAweDg2LCAweDY4LCAweDk4LCAweDE2KTsKKwkmZGF0YV9ieXRlKDB4ZDQsIDB4YTQsIDB4NWMsIDB4Y2MsIDB4NWQsIDB4NjUsIDB4YjYsIDB4OTIpOworCSZkYXRhX2J5dGUoMHg2YywgMHg3MCwgMHg0OCwgMHg1MCwgMHhmZCwgMHhlZCwgMHhiOSwgMHhkYSk7CisJJmRhdGFfYnl0ZSgweDVlLCAweDE1LCAweDQ2LCAweDU3LCAweGE3LCAweDhkLCAweDlkLCAweDg0KTsKKwkmZGF0YV9ieXRlKDB4OTAsIDB4ZDgsIDB4YWIsIDB4MDAsIDB4OGMsIDB4YmMsIDB4ZDMsIDB4MGEpOworCSZkYXRhX2J5dGUoMHhmNywgMHhlNCwgMHg1OCwgMHgwNSwgMHhiOCwgMHhiMywgMHg0NSwgMHgwNik7CisJJmRhdGFfYnl0ZSgweGQwLCAweDJjLCAweDFlLCAweDhmLCAweGNhLCAweDNmLCAweDBmLCAweDAyKTsKKwkmZGF0YV9ieXRlKDB4YzEsIDB4YWYsIDB4YmQsIDB4MDMsIDB4MDEsIDB4MTMsIDB4OGEsIDB4NmIpOworCSZkYXRhX2J5dGUoMHgzYSwgMHg5MSwgMHgxMSwgMHg0MSwgMHg0ZiwgMHg2NywgMHhkYywgMHhlYSk7CisJJmRhdGFfYnl0ZSgweDk3LCAweGYyLCAweGNmLCAweGNlLCAweGYwLCAweGI0LCAweGU2LCAweDczKTsKKwkmZGF0YV9ieXRlKDB4OTYsIDB4YWMsIDB4NzQsIDB4MjIsIDB4ZTcsIDB4YWQsIDB4MzUsIDB4ODUpOworCSZkYXRhX2J5dGUoMHhlMiwgMHhmOSwgMHgzNywgMHhlOCwgMHgxYywgMHg3NSwgMHhkZiwgMHg2ZSk7CisJJmRhdGFfYnl0ZSgweDQ3LCAweGYxLCAweDFhLCAweDcxLCAweDFkLCAweDI5LCAweGM1LCAweDg5KTsKKwkmZGF0YV9ieXRlKDB4NmYsIDB4YjcsIDB4NjIsIDB4MGUsIDB4YWEsIDB4MTgsIDB4YmUsIDB4MWIpOworCSZkYXRhX2J5dGUoMHhmYywgMHg1NiwgMHgzZSwgMHg0YiwgMHhjNiwgMHhkMiwgMHg3OSwgMHgyMCk7CisJJmRhdGFfYnl0ZSgweDlhLCAweGRiLCAweGMwLCAweGZlLCAweDc4LCAweGNkLCAweDVhLCAweGY0KTsKKwkmZGF0YV9ieXRlKDB4MWYsIDB4ZGQsIDB4YTgsIDB4MzMsIDB4ODgsIDB4MDcsIDB4YzcsIDB4MzEpOworCSZkYXRhX2J5dGUoMHhiMSwgMHgxMiwgMHgxMCwgMHg1OSwgMHgyNywgMHg4MCwgMHhlYywgMHg1Zik7CisJJmRhdGFfYnl0ZSgweDYwLCAweDUxLCAweDdmLCAweGE5LCAweDE5LCAweGI1LCAweDRhLCAweDBkKTsKKwkmZGF0YV9ieXRlKDB4MmQsIDB4ZTUsIDB4N2EsIDB4OWYsIDB4OTMsIDB4YzksIDB4OWMsIDB4ZWYpOworCSZkYXRhX2J5dGUoMHhhMCwgMHhlMCwgMHgzYiwgMHg0ZCwgMHhhZSwgMHgyYSwgMHhmNSwgMHhiMCk7CisJJmRhdGFfYnl0ZSgweGM4LCAweGViLCAweGJiLCAweDNjLCAweDgzLCAweDUzLCAweDk5LCAweDYxKTsKKwkmZGF0YV9ieXRlKDB4MTcsIDB4MmIsIDB4MDQsIDB4N2UsIDB4YmEsIDB4NzcsIDB4ZDYsIDB4MjYpOworCSZkYXRhX2J5dGUoMHhlMSwgMHg2OSwgMHgxNCwgMHg2MywgMHg1NSwgMHgyMSwgMHgwYywgMHg3ZCk7CisKIAkmZGF0YV9ieXRlKDB4NTIsIDB4MDksIDB4NmEsIDB4ZDUsIDB4MzAsIDB4MzYsIDB4YTUsIDB4MzgpOwogCSZkYXRhX2J5dGUoMHhiZiwgMHg0MCwgMHhhMywgMHg5ZSwgMHg4MSwgMHhmMywgMHhkNywgMHhmYik7CiAJJmRhdGFfYnl0ZSgweDdjLCAweGUzLCAweDM5LCAweDgyLCAweDliLCAweDJmLCAweGZmLCAweDg3KTsKQEAgLTcyOCw0MyArMTk0Niw1NyBAQAogJmZ1bmN0aW9uX2VuZF9CKCJfeDg2X0FFU19kZWNyeXB0Iik7CiAKICMgdm9pZCBBRVNfZGVjcnlwdCAoY29uc3Qgdm9pZCAqaW5wLHZvaWQgKm91dCxjb25zdCBBRVNfS0VZICprZXkpOwotJnB1YmxpY19sYWJlbCgiQUVTX1RkIik7CiAmZnVuY3Rpb25fYmVnaW4oIkFFU19kZWNyeXB0Iik7CiAJJm1vdgkoJGFjYywmd3BhcmFtKDApKTsJCSMgbG9hZCBpbnAKIAkmbW92CSgka2V5LCZ3cGFyYW0oMikpOwkJIyBsb2FkIGtleQogCiAJJm1vdgkoJHMwLCJlc3AiKTsKLQkmc3ViCSgiZXNwIiwyNCk7Ci0JJmFuZAkoImVzcCIsLTY0KTsKLQkmYWRkCSgiZXNwIiw0KTsKLQkmbW92CSgmRFdQKDE2LCJlc3AiKSwkczApOworCSZzdWIJKCJlc3AiLDM2KTsKKwkmYW5kCSgiZXNwIiwtNjQpOwkJCSMgYWxpZ24gdG8gY2FjaGUtbGluZQorCisJIyBwbGFjZSBzdGFjayBmcmFtZSBqdXN0ICJhYm92ZSIgdGhlIGtleSBzY2hlZHVsZQorCSZsZWEJKCRzMSwmRFdQKC02NC02Mywka2V5KSk7CisJJnN1YgkoJHMxLCJlc3AiKTsKKwkmbmVnCSgkczEpOworCSZhbmQJKCRzMSwweDNDMCk7CSMgbW9kdWxvIDEwMjQsIGJ1dCBhbGlnbmVkIHRvIGNhY2hlLWxpbmUKKwkmc3ViCSgiZXNwIiwkczEpOworCSZhZGQJKCJlc3AiLDQpOwkjIDQgaXMgcmVzZXJ2ZWQgZm9yIGNhbGxlcidzIHJldHVybiBhZGRyZXNzCisJJm1vdgkoJF9lc3AsJHMwKTsJIyBzYXZlIHN0YWNrIHBvaW50ZXIKIAogCSZjYWxsICAgKCZsYWJlbCgicGljX3BvaW50IikpOyAgICAgICAgICAjIG1ha2UgaXQgUElDIQogCSZzZXRfbGFiZWwoInBpY19wb2ludCIpOwotCSZibGluZHBvcCgiZWJwIik7Ci0JJmxlYSAgICAoImVicCIsJkRXUCgmbGFiZWwoIkFFU19UZCIpLiItIi4mbGFiZWwoInBpY19wb2ludCIpLCJlYnAiKSk7CisJJmJsaW5kcG9wKCR0YmwpOworCSZwaWNtZXVwKCRzMCwiT1BFTlNTTF9pYTMyY2FwX1AiLCR0YmwsJmxhYmVsKCJwaWNfcG9pbnQiKSkgaWYoISR4ODZvbmx5KTsKKwkmbGVhICAgICgkdGJsLCZEV1AoJmxhYmVsKCJBRVNfVGQiKS4iLSIuJmxhYmVsKCJwaWNfcG9pbnQiKSwkdGJsKSk7CiAKLQkjIHByZWZldGNoIFRkNAotCSZsZWEJKCJlYnAiLCZEV1AoMjA0OCsxMjgsImVicCIpKTsKLQkmbW92CSgkczAsJkRXUCgwLTEyOCwiZWJwIikpOwotCSZtb3YJKCRzMSwmRFdQKDMyLTEyOCwiZWJwIikpOwotCSZtb3YJKCRzMiwmRFdQKDY0LTEyOCwiZWJwIikpOwotCSZtb3YJKCRzMywmRFdQKDk2LTEyOCwiZWJwIikpOwotCSZtb3YJKCRzMCwmRFdQKDEyOC0xMjgsImVicCIpKTsKLQkmbW92CSgkczEsJkRXUCgxNjAtMTI4LCJlYnAiKSk7Ci0JJm1vdgkoJHMyLCZEV1AoMTkyLTEyOCwiZWJwIikpOwotCSZtb3YJKCRzMywmRFdQKDIyNC0xMjgsImVicCIpKTsKLQkmbGVhCSgiZWJwIiwmRFdQKC0yMDQ4LTEyOCwiZWJwIikpOworCSMgcGljayBUZDQgY29weSB3aGljaCBjYW4ndCAib3ZlcmxhcCIgd2l0aCBzdGFjayBmcmFtZSBvciBrZXkgc2NoZWR1bGUKKwkmbGVhCSgkczEsJkRXUCg3NjgtNCwiZXNwIikpOworCSZzdWIJKCRzMSwkdGJsKTsKKwkmYW5kCSgkczEsMHgzMDApOworCSZsZWEJKCR0YmwsJkRXUCgyMDQ4KzEyOCwkdGJsLCRzMSkpOwogCisJCQkJCWlmICghJHg4Nm9ubHkpIHsKKwkmYnQJKCZEV1AoMCwkczApLDI1KTsJIyBjaGVjayBmb3IgU1NFIGJpdAorCSZqbmMJKCZsYWJlbCgieDg2IikpOworCisJJm1vdnEJKCJtbTAiLCZRV1AoMCwkYWNjKSk7CisJJm1vdnEJKCJtbTQiLCZRV1AoOCwkYWNjKSk7CisJJmNhbGwJKCJfc3NlX0FFU19kZWNyeXB0X2NvbXBhY3QiKTsKKwkmbW92CSgiZXNwIiwkX2VzcCk7CQkJIyByZXN0b3JlIHN0YWNrIHBvaW50ZXIKKwkmbW92CSgkYWNjLCZ3cGFyYW0oMSkpOwkJIyBsb2FkIG91dAorCSZtb3ZxCSgmUVdQKDAsJGFjYyksIm1tMCIpOwkJIyB3cml0ZSBvdXRwdXQgZGF0YQorCSZtb3ZxCSgmUVdQKDgsJGFjYyksIm1tNCIpOworCSZlbW1zCSgpOworCSZmdW5jdGlvbl9lbmRfQSgpOworCQkJCQl9CisJJnNldF9sYWJlbCgieDg2IiwxNik7CisJJm1vdgkoJF90YmwsJHRibCk7CiAJJm1vdgkoJHMwLCZEV1AoMCwkYWNjKSk7CQkjIGxvYWQgaW5wdXQgZGF0YQogCSZtb3YJKCRzMSwmRFdQKDQsJGFjYykpOwogCSZtb3YJKCRzMiwmRFdQKDgsJGFjYykpOwogCSZtb3YJKCRzMywmRFdQKDEyLCRhY2MpKTsKLQotCSZjYWxsCSgiX3g4Nl9BRVNfZGVjcnlwdCIpOwotCi0JJm1vdgkoImVzcCIsJkRXUCgxNiwiZXNwIikpOwotCisJJmNhbGwJKCJfeDg2X0FFU19kZWNyeXB0X2NvbXBhY3QiKTsKKwkmbW92CSgiZXNwIiwkX2VzcCk7CQkJIyByZXN0b3JlIHN0YWNrIHBvaW50ZXIKIAkmbW92CSgkYWNjLCZ3cGFyYW0oMSkpOwkJIyBsb2FkIG91dAogCSZtb3YJKCZEV1AoMCwkYWNjKSwkczApOwkJIyB3cml0ZSBvdXRwdXQgZGF0YQogCSZtb3YJKCZEV1AoNCwkYWNjKSwkczEpOwpAQCAtNzc3LDEyNiArMjAwOSwxMzYgQEAKICMJCQl1bnNpZ25lZCBjaGFyICppdnAsY29uc3QgaW50IGVuYyk7CiB7CiAjIHN0YWNrIGZyYW1lIGxheW91dAotIyAtNCglZXNwKQkwKCVlc3ApCQlyZXR1cm4gYWRkcmVzcwotIyAwKCVlc3ApCTQoJWVzcCkJCXRtcDEKLSMgNCglZXNwKQk4KCVlc3ApCQl0bXAyCi0jIDgoJWVzcCkJMTIoJWVzcCkJa2V5Ci0jIDEyKCVlc3ApCTE2KCVlc3ApCWVuZCBvZiBrZXkgc2NoZWR1bGUKLW15ICRfZXNwPSZEV1AoMTYsImVzcCIpOwkjc2F2ZWQgJWVzcAotbXkgJF9pbnA9JkRXUCgyMCwiZXNwIik7CSNjb3B5IG9mIHdwYXJhbSgwKQotbXkgJF9vdXQ9JkRXUCgyNCwiZXNwIik7CSNjb3B5IG9mIHdwYXJhbSgxKQotbXkgJF9sZW49JkRXUCgyOCwiZXNwIik7CSNjb3B5IG9mIHdwYXJhbSgyKQotbXkgJF9rZXk9JkRXUCgzMiwiZXNwIik7CSNjb3B5IG9mIHdwYXJhbSgzKQotbXkgJF9pdnA9JkRXUCgzNiwiZXNwIik7CSNjb3B5IG9mIHdwYXJhbSg0KQotbXkgJF90bXA9JkRXUCg0MCwiZXNwIik7CSN2b2xhdGlsZSB2YXJpYWJsZQotbXkgJGl2ZWM9JkRXUCg0NCwiZXNwIik7CSNpdmVjWzE2XQotbXkgJGFlc19rZXk9JkRXUCg2MCwiZXNwIik7CSNjb3B5IG9mIGFlc19rZXkKLW15ICRtYXJrPSZEV1AoNjArMjQwLCJlc3AiKTsJI2NvcHkgb2YgYWVzX2tleS0+cm91bmRzCisjICAgICAgICAgICAgIC00KCVlc3ApCQkjIHJldHVybiBhZGRyZXNzCSAwKCVlc3ApCisjICAgICAgICAgICAgICAwKCVlc3ApCQkjIHMwIGJhY2tpbmcgc3RvcmUJIDQoJWVzcCkJCisjICAgICAgICAgICAgICA0KCVlc3ApCQkjIHMxIGJhY2tpbmcgc3RvcmUJIDgoJWVzcCkKKyMgICAgICAgICAgICAgIDgoJWVzcCkJCSMgczIgYmFja2luZyBzdG9yZQkxMiglZXNwKQorIyAgICAgICAgICAgICAxMiglZXNwKQkJIyBzMyBiYWNraW5nIHN0b3JlCTE2KCVlc3ApCisjICAgICAgICAgICAgIDE2KCVlc3ApCQkjIGtleSBiYWNrdXAJCTIwKCVlc3ApCisjICAgICAgICAgICAgIDIwKCVlc3ApCQkjIGVuZCBvZiBrZXkgc2NoZWR1bGUJMjQoJWVzcCkKKyMgICAgICAgICAgICAgMjQoJWVzcCkJCSMgJWVicCBiYWNrdXAJCTI4KCVlc3ApCisjICAgICAgICAgICAgIDI4KCVlc3ApCQkjICVlc3AgYmFja3VwCitteSAkX2lucD0mRFdQKDMyLCJlc3AiKTsJIyBjb3B5IG9mIHdwYXJhbSgwKQorbXkgJF9vdXQ9JkRXUCgzNiwiZXNwIik7CSMgY29weSBvZiB3cGFyYW0oMSkKK215ICRfbGVuPSZEV1AoNDAsImVzcCIpOwkjIGNvcHkgb2Ygd3BhcmFtKDIpCitteSAkX2tleT0mRFdQKDQ0LCJlc3AiKTsJIyBjb3B5IG9mIHdwYXJhbSgzKQorbXkgJF9pdnA9JkRXUCg0OCwiZXNwIik7CSMgY29weSBvZiB3cGFyYW0oNCkKK215ICRfdG1wPSZEV1AoNTIsImVzcCIpOwkjIHZvbGF0aWxlIHZhcmlhYmxlCisjCitteSAkaXZlYz0mRFdQKDYwLCJlc3AiKTsJIyBpdmVjWzE2XQorbXkgJGFlc19rZXk9JkRXUCg3NiwiZXNwIik7CSMgY29weSBvZiBhZXNfa2V5CitteSAkbWFyaz0mRFdQKDc2KzI0MCwiZXNwIik7CSMgY29weSBvZiBhZXNfa2V5LT5yb3VuZHMKIAotJnB1YmxpY19sYWJlbCgiQUVTX1RlIik7Ci0mcHVibGljX2xhYmVsKCJBRVNfVGQiKTsKICZmdW5jdGlvbl9iZWdpbigiQUVTX2NiY19lbmNyeXB0Iik7CiAJJm1vdgkoJHMyIGVxICJlY3giPyAkczIgOiAiIiwmd3BhcmFtKDIpKTsJIyBsb2FkIGxlbgogCSZjbXAJKCRzMiwwKTsKLQkmamUJKCZsYWJlbCgiZW5jX291dCIpKTsKKwkmamUJKCZsYWJlbCgiZHJvcF9vdXQiKSk7CiAKIAkmY2FsbCAgICgmbGFiZWwoInBpY19wb2ludCIpKTsJCSMgbWFrZSBpdCBQSUMhCiAJJnNldF9sYWJlbCgicGljX3BvaW50Iik7Ci0JJmJsaW5kcG9wKCJlYnAiKTsKKwkmYmxpbmRwb3AoJHRibCk7CisJJnBpY21ldXAoJHMwLCJPUEVOU1NMX2lhMzJjYXBfUCIsJHRibCwmbGFiZWwoInBpY19wb2ludCIpKSBpZighJHg4Nm9ubHkpOwogCisJJmNtcAkoJndwYXJhbSg1KSwwKTsKKwkmbGVhICAgICgkdGJsLCZEV1AoJmxhYmVsKCJBRVNfVGUiKS4iLSIuJmxhYmVsKCJwaWNfcG9pbnQiKSwkdGJsKSk7CisJJmpuZQkoJmxhYmVsKCJwaWNrZWRfdGUiKSk7CisJJmxlYQkoJHRibCwmRFdQKCZsYWJlbCgiQUVTX1RkIikuIi0iLiZsYWJlbCgiQUVTX1RlIiksJHRibCkpOworCSZzZXRfbGFiZWwoInBpY2tlZF90ZSIpOworCisJIyBvbmUgY2FuIGFyZ3VlIGlmIHRoaXMgaXMgcmVxdWlyZWQKIAkmcHVzaGYJKCk7CiAJJmNsZAkoKTsKIAotCSZjbXAJKCZ3cGFyYW0oNSksMCk7Ci0JJmplCSgmbGFiZWwoIkRFQ1JZUFQiKSk7CisJJmNtcAkoJHMyLCRzcGVlZF9saW1pdCk7CisJJmpiCSgmbGFiZWwoInNsb3dfd2F5IikpOworCSZ0ZXN0CSgkczIsMTUpOworCSZqbnoJKCZsYWJlbCgic2xvd193YXkiKSk7CisJCQkJCWlmICghJHg4Nm9ubHkpIHsKKwkmYnQJKCZEV1AoMCwkczApLDI4KTsJIyBjaGVjayBmb3IgaHlwZXItdGhyZWFkaW5nIGJpdAorCSZqYwkoJmxhYmVsKCJzbG93X3dheSIpKTsKKwkJCQkJfQorCSMgcHJlLWFsbG9jYXRlIGFsaWduZWQgc3RhY2sgZnJhbWUuLi4KKwkmbGVhCSgkYWNjLCZEV1AoLTgwLTI0NCwiZXNwIikpOworCSZhbmQJKCRhY2MsLTY0KTsKIAotCSZsZWEgICAgKCJlYnAiLCZEV1AoJmxhYmVsKCJBRVNfVGUiKS4iLSIuJmxhYmVsKCJwaWNfcG9pbnQiKSwiZWJwIikpOwotCi0JIyBhbGxvY2F0ZSBhbGlnbmVkIHN0YWNrIGZyYW1lLi4uCi0JJmxlYQkoJGtleSwmRFdQKC02NC0yNDQsImVzcCIpKTsKLQkmYW5kCSgka2V5LC02NCk7Ci0KLQkjIC4uLiBhbmQgbWFrZSBzdXJlIGl0IGRvZXNuJ3QgYWxpYXMgd2l0aCBBRVNfVGUgbW9kdWxvIDQwOTYKLQkmbW92CSgkczAsImVicCIpOwotCSZsZWEJKCRzMSwmRFdQKDIwNDgsImVicCIpKTsKLQkmbW92CSgkczMsJGtleSk7CisJIyAuLi4gYW5kIG1ha2Ugc3VyZSBpdCBkb2Vzbid0IGFsaWFzIHdpdGggJHRibCBtb2R1bG8gNDA5NgorCSZtb3YJKCRzMCwkdGJsKTsKKwkmbGVhCSgkczEsJkRXUCgyMDQ4KzI1NiwkdGJsKSk7CisJJm1vdgkoJHMzLCRhY2MpOwogCSZhbmQJKCRzMCwweGZmZik7CQkjIHMgPSAlZWJwJjB4ZmZmCi0JJmFuZAkoJHMxLDB4ZmZmKTsJCSMgZSA9ICglZWJwKzIwNDgpJjB4ZmZmCisJJmFuZAkoJHMxLDB4ZmZmKTsJCSMgZSA9ICglZWJwKzIwNDgrMjU2KSYweGZmZgogCSZhbmQJKCRzMywweGZmZik7CQkjIHAgPSAlZXNwJjB4ZmZmCiAKIAkmY21wCSgkczMsJHMxKTsJCSMgaWYgKHA+PWUpICVlc3AgPS0gKHAtZSk7Ci0JJmpiCSgmbGFiZWwoInRlX2JyZWFrX291dCIpKTsKKwkmamIJKCZsYWJlbCgidGJsX2JyZWFrX291dCIpKTsKIAkmc3ViCSgkczMsJHMxKTsKLQkmc3ViCSgka2V5LCRzMyk7Ci0JJmptcAkoJmxhYmVsKCJ0ZV9vayIpKTsKLQkmc2V0X2xhYmVsKCJ0ZV9icmVha19vdXQiKTsJIyBlbHNlICVlc3AgLT0gKHAtcykmMHhmZmYgKyBmcmFtZXN6OworCSZzdWIJKCRhY2MsJHMzKTsKKwkmam1wCSgmbGFiZWwoInRibF9vayIpKTsKKwkmc2V0X2xhYmVsKCJ0YmxfYnJlYWtfb3V0Iiw0KTsJIyBlbHNlICVlc3AgLT0gKHAtcykmMHhmZmYgKyBmcmFtZXN6OwogCSZzdWIJKCRzMywkczApOwogCSZhbmQJKCRzMywweGZmZik7Ci0JJmFkZAkoJHMzLDY0KzI1Nik7Ci0JJnN1YgkoJGtleSwkczMpOwotCSZhbGlnbgkoNCk7Ci0JJnNldF9sYWJlbCgidGVfb2siKTsKKwkmYWRkCSgkczMsMzg0KTsKKwkmc3ViCSgkYWNjLCRzMyk7CisJJnNldF9sYWJlbCgidGJsX29rIiw0KTsKIAotCSZtb3YJKCRzMCwmd3BhcmFtKDApKTsJIyBsb2FkIGlucAotCSZtb3YJKCRzMSwmd3BhcmFtKDEpKTsJIyBsb2FkIG91dAotCSZtb3YJKCRzMywmd3BhcmFtKDMpKTsJIyBsb2FkIGtleQotCSZtb3YJKCRhY2MsJndwYXJhbSg0KSk7CSMgbG9hZCBpdnAKLQotCSZleGNoCSgiZXNwIiwka2V5KTsKKwkmbGVhCSgkczMsJndwYXJhbSgwKSk7CSMgb2J0YWluIHBvaW50ZXIgdG8gcGFyYW1ldGVyIGJsb2NrCisJJmV4Y2gJKCJlc3AiLCRhY2MpOwkJIyBhbGxvY2F0ZSBzdGFjayBmcmFtZQogCSZhZGQJKCJlc3AiLDQpOwkJIyByZXNlcnZlIGZvciByZXR1cm4gYWRkcmVzcyEKLQkmbW92CSgkX2VzcCwka2V5KTsJCSMgc2F2ZSAlZXNwCisJJm1vdgkoJF90YmwsJHRibCk7CQkjIHNhdmUgJWVicAorCSZtb3YJKCRfZXNwLCRhY2MpOwkJIyBzYXZlICVlc3AKKworCSZtb3YJKCRzMCwmRFdQKDAsJHMzKSk7CSMgbG9hZCBpbnAKKwkmbW92CSgkczEsJkRXUCg0LCRzMykpOwkjIGxvYWQgb3V0CisJIyZtb3YJKCRzMiwmRFdQKDgsJHMzKSk7CSMgbG9hZCBsZW4KKwkmbW92CSgka2V5LCZEV1AoMTIsJHMzKSk7CSMgbG9hZCBrZXkKKwkmbW92CSgkYWNjLCZEV1AoMTYsJHMzKSk7CSMgbG9hZCBpdnAKKwkmbW92CSgkczMsJkRXUCgyMCwkczMpKTsJIyBsb2FkIGVuYyBmbGFnCiAKIAkmbW92CSgkX2lucCwkczApOwkJIyBzYXZlIGNvcHkgb2YgaW5wCiAJJm1vdgkoJF9vdXQsJHMxKTsJCSMgc2F2ZSBjb3B5IG9mIG91dAogCSZtb3YJKCRfbGVuLCRzMik7CQkjIHNhdmUgY29weSBvZiBsZW4KLQkmbW92CSgkX2tleSwkczMpOwkJIyBzYXZlIGNvcHkgb2Yga2V5CisJJm1vdgkoJF9rZXksJGtleSk7CQkjIHNhdmUgY29weSBvZiBrZXkKIAkmbW92CSgkX2l2cCwkYWNjKTsJCSMgc2F2ZSBjb3B5IG9mIGl2cAogCiAJJm1vdgkoJG1hcmssMCk7CQkjIGNvcHkgb2YgYWVzX2tleS0+cm91bmRzID0gMDsKLQlpZiAoJGNvbXByb21pc2UpIHsKLQkJJmNtcAkoJHMyLCRjb21wcm9taXNlKTsKLQkJJmpiCSgmbGFiZWwoInNraXBfZWNvcHkiKSk7Ci0JfQogCSMgZG8gd2UgY29weSBrZXkgc2NoZWR1bGUgdG8gc3RhY2s/Ci0JJm1vdgkoJHMxIGVxICJlYngiID8gJHMxIDogIiIsJHMzKTsKKwkmbW92CSgkczEgZXEgImVieCIgPyAkczEgOiAiIiwka2V5KTsKIAkmbW92CSgkczIgZXEgImVjeCIgPyAkczIgOiAiIiwyNDQvNCk7Ci0JJnN1YgkoJHMxLCJlYnAiKTsKLQkmbW92CSgiZXNpIiwkczMpOworCSZzdWIJKCRzMSwkdGJsKTsKKwkmbW92CSgiZXNpIiwka2V5KTsKIAkmYW5kCSgkczEsMHhmZmYpOwogCSZsZWEJKCJlZGkiLCRhZXNfa2V5KTsKLQkmY21wCSgkczEsMjA0OCk7Ci0JJmpiCSgmbGFiZWwoImRvX2Vjb3B5IikpOworCSZjbXAJKCRzMSwyMDQ4KzI1Nik7CisJJmpiCSgmbGFiZWwoImRvX2NvcHkiKSk7CiAJJmNtcAkoJHMxLDQwOTYtMjQ0KTsKLQkmamIJKCZsYWJlbCgic2tpcF9lY29weSIpKTsKLQkmYWxpZ24JKDQpOwotCSZzZXRfbGFiZWwoImRvX2Vjb3B5Iik7CisJJmpiCSgmbGFiZWwoInNraXBfY29weSIpKTsKKwkmc2V0X2xhYmVsKCJkb19jb3B5Iiw0KTsKIAkJJm1vdgkoJF9rZXksImVkaSIpOwogCQkmZGF0YV93b3JkKDB4QTVGM0Y2ODkpOwkjIHJlcCBtb3ZzZAotCSZzZXRfbGFiZWwoInNraXBfZWNvcHkiKTsKKwkmc2V0X2xhYmVsKCJza2lwX2NvcHkiKTsKIAotCSZtb3YJKCRhY2MsJHMwKTsKIAkmbW92CSgka2V5LDE2KTsKLQkmYWxpZ24JKDQpOwotCSZzZXRfbGFiZWwoInByZWZldGNoX3RlIik7Ci0JCSZtb3YJKCRzMCwmRFdQKDAsImVicCIpKTsKLQkJJm1vdgkoJHMxLCZEV1AoMzIsImVicCIpKTsKLQkJJm1vdgkoJHMyLCZEV1AoNjQsImVicCIpKTsKLQkJJm1vdgkoJHMzLCZEV1AoOTYsImVicCIpKTsKLQkJJmxlYQkoImVicCIsJkRXUCgxMjgsImVicCIpKTsKLQkJJmRlYwkoJGtleSk7Ci0JJmpuegkoJmxhYmVsKCJwcmVmZXRjaF90ZSIpKTsKLQkmc3ViCSgiZWJwIiwyMDQ4KTsKKwkmc2V0X2xhYmVsKCJwcmVmZXRjaF90YmwiLDQpOworCQkmbW92CSgkczAsJkRXUCgwLCR0YmwpKTsKKwkJJm1vdgkoJHMxLCZEV1AoMzIsJHRibCkpOworCQkmbW92CSgkczIsJkRXUCg2NCwkdGJsKSk7CisJCSZtb3YJKCRhY2MsJkRXUCg5NiwkdGJsKSk7CisJCSZsZWEJKCR0YmwsJkRXUCgxMjgsJHRibCkpOworCQkmc3ViCSgka2V5LDEpOworCSZqbnoJKCZsYWJlbCgicHJlZmV0Y2hfdGJsIikpOworCSZzdWIJKCR0YmwsMjA0OCk7CiAKLQkmbW92CSgkczIsJF9sZW4pOworCSZtb3YJKCRhY2MsJF9pbnApOwogCSZtb3YJKCRrZXksJF9pdnApOwotCSZ0ZXN0CSgkczIsMHhGRkZGRkZGMCk7Ci0JJmp6CSgmbGFiZWwoImVuY190YWlsIikpOwkJIyBzaG9ydCBpbnB1dC4uLgogCisJJmNtcAkoJHMzLDApOworCSZqZQkoJmxhYmVsKCJmYXN0X2RlY3J5cHQiKSk7CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFTkNSWVBUIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIwogCSZtb3YJKCRzMCwmRFdQKDAsJGtleSkpOwkJIyBsb2FkIGl2CiAJJm1vdgkoJHMxLCZEV1AoNCwka2V5KSk7CiAKLQkmYWxpZ24JKDQpOwotCSZzZXRfbGFiZWwoImVuY19sb29wIik7CisJJnNldF9sYWJlbCgiZmFzdF9lbmNfbG9vcCIsMTYpOwogCQkmbW92CSgkczIsJkRXUCg4LCRrZXkpKTsKIAkJJm1vdgkoJHMzLCZEV1AoMTIsJGtleSkpOwogCkBAIC05MTYsMjIgKzIxNTgsMTYgQEAKIAkJJm1vdgkoJkRXUCg4LCRrZXkpLCRzMik7CiAJCSZtb3YJKCZEV1AoMTIsJGtleSksJHMzKTsKIAorCQkmbGVhCSgkYWNjLCZEV1AoMTYsJGFjYykpOwkjIGFkdmFuY2UgaW5wCiAJCSZtb3YJKCRzMiwkX2xlbik7CQkjIGxvYWQgbGVuCi0KLQkJJmxlYQkoJGFjYywmRFdQKDE2LCRhY2MpKTsKIAkJJm1vdgkoJF9pbnAsJGFjYyk7CQkjIHNhdmUgaW5wCi0KLQkJJmxlYQkoJHMzLCZEV1AoMTYsJGtleSkpOworCQkmbGVhCSgkczMsJkRXUCgxNiwka2V5KSk7CSMgYWR2YW5jZSBvdXQKIAkJJm1vdgkoJF9vdXQsJHMzKTsJCSMgc2F2ZSBvdXQKLQotCQkmc3ViCSgkczIsMTYpOwotCQkmdGVzdAkoJHMyLDB4RkZGRkZGRjApOworCQkmc3ViCSgkczIsMTYpOwkJIyBkZWNyZWFzZSBsZW4KIAkJJm1vdgkoJF9sZW4sJHMyKTsJCSMgc2F2ZSBsZW4KLQkmam56CSgmbGFiZWwoImVuY19sb29wIikpOwotCSZ0ZXN0CSgkczIsMTUpOwotCSZqbnoJKCZsYWJlbCgiZW5jX3RhaWwiKSk7CisJJmpuegkoJmxhYmVsKCJmYXN0X2VuY19sb29wIikpOwogCSZtb3YJKCRhY2MsJF9pdnApOwkJIyBsb2FkIGl2cAotCSZtb3YJKCRzMiwmRFdQKDgsJGtleSkpOwkjIHJlc3RvcmUgbGFzdCBkd29yZHMKKwkmbW92CSgkczIsJkRXUCg4LCRrZXkpKTsJIyByZXN0b3JlIGxhc3QgMiBkd29yZHMKIAkmbW92CSgkczMsJkRXUCgxMiwka2V5KSk7CiAJJm1vdgkoJkRXUCgwLCRhY2MpLCRzMCk7CSMgc2F2ZSBpdmVjCiAJJm1vdgkoJkRXUCg0LCRhY2MpLCRzMSk7CkBAIC05NDksMTI1ICsyMTg1LDIwIEBACiAJJnNldF9sYWJlbCgic2tpcF9lemVybyIpCiAJJm1vdgkoImVzcCIsJF9lc3ApOwogCSZwb3BmCSgpOwotICAgICZzZXRfbGFiZWwoImVuY19vdXQiKTsKKyAgICAmc2V0X2xhYmVsKCJkcm9wX291dCIpOwogCSZmdW5jdGlvbl9lbmRfQSgpOwogCSZwdXNoZgkoKTsJCQkjIGtsdWRnZSwgbmV2ZXIgZXhlY3V0ZWQKIAotICAgICZhbGlnbgkoNCk7Ci0gICAgJnNldF9sYWJlbCgiZW5jX3RhaWwiKTsKLQkmbW92CSgkczAsJGtleSBlcSAiZWRpIiA/ICRrZXkgOiAiIik7Ci0JJm1vdgkoJGtleSwkX291dCk7CQkJIyBsb2FkIG91dAotCSZwdXNoCSgkczApOwkJCQkjIHB1c2ggaXZwCi0JJm1vdgkoJHMxLDE2KTsKLQkmc3ViCSgkczEsJHMyKTsKLQkmY21wCSgka2V5LCRhY2MpOwkJCSMgY29tcGFyZSB3aXRoIGlucAotCSZqZQkoJmxhYmVsKCJlbmNfaW5fcGxhY2UiKSk7Ci0JJmFsaWduCSg0KTsKLQkmZGF0YV93b3JkKDB4QTRGM0Y2ODkpOwkjIHJlcCBtb3ZzYgkjIGNvcHkgaW5wdXQKLQkmam1wCSgmbGFiZWwoImVuY19za2lwX2luX3BsYWNlIikpOwotICAgICZzZXRfbGFiZWwoImVuY19pbl9wbGFjZSIpOwotCSZsZWEJKCRrZXksJkRXUCgwLCRrZXksJHMyKSk7Ci0gICAgJnNldF9sYWJlbCgiZW5jX3NraXBfaW5fcGxhY2UiKTsKLQkmbW92CSgkczIsJHMxKTsKLQkmeG9yCSgkczAsJHMwKTsKLQkmYWxpZ24JKDQpOwotCSZkYXRhX3dvcmQoMHhBQUYzRjY4OSk7CSMgcmVwIHN0b3NiCSMgemVybyB0YWlsCi0JJnBvcAkoJGtleSk7CQkJCSMgcG9wIGl2cAotCi0JJm1vdgkoJGFjYywkX291dCk7CQkJIyBvdXRwdXQgYXMgaW5wdXQKLQkmbW92CSgkczAsJkRXUCgwLCRrZXkpKTsKLQkmbW92CSgkczEsJkRXUCg0LCRrZXkpKTsKLQkmbW92CSgkX2xlbiwxNik7CQkJIyBsZW49MTYKLQkmam1wCSgmbGFiZWwoImVuY19sb29wIikpOwkJIyBvbmUgbW9yZSBzcGluLi4uCi0KICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBERUNSWVBUIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIwotJmFsaWduCSg0KTsKLSZzZXRfbGFiZWwoIkRFQ1JZUFQiKTsKLQkmbGVhICAgICgiZWJwIiwmRFdQKCZsYWJlbCgiQUVTX1RkIikuIi0iLiZsYWJlbCgicGljX3BvaW50IiksImVicCIpKTsKLQotCSMgYWxsb2NhdGUgYWxpZ25lZCBzdGFjayBmcmFtZS4uLgotCSZsZWEJKCRrZXksJkRXUCgtNjQtMjQ0LCJlc3AiKSk7Ci0JJmFuZAkoJGtleSwtNjQpOwotCi0JIyAuLi4gYW5kIG1ha2Ugc3VyZSBpdCBkb2Vzbid0IGFsaWFzIHdpdGggQUVTX1RkIG1vZHVsbyA0MDk2Ci0JJm1vdgkoJHMwLCJlYnAiKTsKLQkmbGVhCSgkczEsJkRXUCgyMDQ4KzI1NiwiZWJwIikpOwotCSZtb3YJKCRzMywka2V5KTsKLQkmYW5kCSgkczAsMHhmZmYpOwkJIyBzID0gJWVicCYweGZmZgotCSZhbmQJKCRzMSwweGZmZik7CQkjIGUgPSAoJWVicCsyMDQ4KzI1NikmMHhmZmYKLQkmYW5kCSgkczMsMHhmZmYpOwkJIyBwID0gJWVzcCYweGZmZgotCi0JJmNtcAkoJHMzLCRzMSk7CQkjIGlmIChwPj1lKSAlZXNwID0tIChwLWUpOwotCSZqYgkoJmxhYmVsKCJ0ZF9icmVha19vdXQiKSk7Ci0JJnN1YgkoJHMzLCRzMSk7Ci0JJnN1YgkoJGtleSwkczMpOwotCSZqbXAJKCZsYWJlbCgidGRfb2siKSk7Ci0JJnNldF9sYWJlbCgidGRfYnJlYWtfb3V0Iik7CSMgZWxzZSAlZXNwIC09IChwLXMpJjB4ZmZmICsgZnJhbWVzejsKLQkmc3ViCSgkczMsJHMwKTsKLQkmYW5kCSgkczMsMHhmZmYpOwotCSZhZGQJKCRzMyw2NCsyNTYpOwotCSZzdWIJKCRrZXksJHMzKTsKLQkmYWxpZ24JKDQpOwotCSZzZXRfbGFiZWwoInRkX29rIik7Ci0KLQkmbW92CSgkczAsJndwYXJhbSgwKSk7CSMgbG9hZCBpbnAKLQkmbW92CSgkczEsJndwYXJhbSgxKSk7CSMgbG9hZCBvdXQKLQkmbW92CSgkczMsJndwYXJhbSgzKSk7CSMgbG9hZCBrZXkKLQkmbW92CSgkYWNjLCZ3cGFyYW0oNCkpOwkjIGxvYWQgaXZwCi0KLQkmZXhjaAkoImVzcCIsJGtleSk7Ci0JJmFkZAkoImVzcCIsNCk7CQkjIHJlc2VydmUgZm9yIHJldHVybiBhZGRyZXNzIQotCSZtb3YJKCRfZXNwLCRrZXkpOwkJIyBzYXZlICVlc3AKLQotCSZtb3YJKCRfaW5wLCRzMCk7CQkjIHNhdmUgY29weSBvZiBpbnAKLQkmbW92CSgkX291dCwkczEpOwkJIyBzYXZlIGNvcHkgb2Ygb3V0Ci0JJm1vdgkoJF9sZW4sJHMyKTsJCSMgc2F2ZSBjb3B5IG9mIGxlbgotCSZtb3YJKCRfa2V5LCRzMyk7CQkjIHNhdmUgY29weSBvZiBrZXkKLQkmbW92CSgkX2l2cCwkYWNjKTsJCSMgc2F2ZSBjb3B5IG9mIGl2cAotCi0JJm1vdgkoJG1hcmssMCk7CQkjIGNvcHkgb2YgYWVzX2tleS0+cm91bmRzID0gMDsKLQlpZiAoJGNvbXByb21pc2UpIHsKLQkJJmNtcAkoJHMyLCRjb21wcm9taXNlKTsKLQkJJmpiCSgmbGFiZWwoInNraXBfZGNvcHkiKSk7Ci0JfQotCSMgZG8gd2UgY29weSBrZXkgc2NoZWR1bGUgdG8gc3RhY2s/Ci0JJm1vdgkoJHMxIGVxICJlYngiID8gJHMxIDogIiIsJHMzKTsKLQkmbW92CSgkczIgZXEgImVjeCIgPyAkczIgOiAiIiwyNDQvNCk7Ci0JJnN1YgkoJHMxLCJlYnAiKTsKLQkmbW92CSgiZXNpIiwkczMpOwotCSZhbmQJKCRzMSwweGZmZik7Ci0JJmxlYQkoImVkaSIsJGFlc19rZXkpOwotCSZjbXAJKCRzMSwyMDQ4KzI1Nik7Ci0JJmpiCSgmbGFiZWwoImRvX2Rjb3B5IikpOwotCSZjbXAJKCRzMSw0MDk2LTI0NCk7Ci0JJmpiCSgmbGFiZWwoInNraXBfZGNvcHkiKSk7Ci0JJmFsaWduCSg0KTsKLQkmc2V0X2xhYmVsKCJkb19kY29weSIpOwotCQkmbW92CSgkX2tleSwiZWRpIik7Ci0JCSZkYXRhX3dvcmQoMHhBNUYzRjY4OSk7CSMgcmVwIG1vdnNkCi0JJnNldF9sYWJlbCgic2tpcF9kY29weSIpOwotCi0JJm1vdgkoJGFjYywkczApOwotCSZtb3YJKCRrZXksMTgpOwotCSZhbGlnbgkoNCk7Ci0JJnNldF9sYWJlbCgicHJlZmV0Y2hfdGQiKTsKLQkJJm1vdgkoJHMwLCZEV1AoMCwiZWJwIikpOwotCQkmbW92CSgkczEsJkRXUCgzMiwiZWJwIikpOwotCQkmbW92CSgkczIsJkRXUCg2NCwiZWJwIikpOwotCQkmbW92CSgkczMsJkRXUCg5NiwiZWJwIikpOwotCQkmbGVhCSgiZWJwIiwmRFdQKDEyOCwiZWJwIikpOwotCQkmZGVjCSgka2V5KTsKLQkmam56CSgmbGFiZWwoInByZWZldGNoX3RkIikpOwotCSZzdWIJKCJlYnAiLDIwNDgrMjU2KTsKKyZzZXRfbGFiZWwoImZhc3RfZGVjcnlwdCIsMTYpOwogCiAJJmNtcAkoJGFjYywkX291dCk7Ci0JJmplCSgmbGFiZWwoImRlY19pbl9wbGFjZSIpKTsJIyBpbi1wbGFjZSBwcm9jZXNzaW5nLi4uCisJJmplCSgmbGFiZWwoImZhc3RfZGVjX2luX3BsYWNlIikpOwkjIGluLXBsYWNlIHByb2Nlc3NpbmcuLi4KIAotCSZtb3YJKCRrZXksJF9pdnApOwkJIyBsb2FkIGl2cAogCSZtb3YJKCRfdG1wLCRrZXkpOwogCiAJJmFsaWduCSg0KTsKLQkmc2V0X2xhYmVsKCJkZWNfbG9vcCIpOworCSZzZXRfbGFiZWwoImZhc3RfZGVjX2xvb3AiLDE2KTsKIAkJJm1vdgkoJHMwLCZEV1AoMCwkYWNjKSk7CSMgcmVhZCBpbnB1dAogCQkmbW92CSgkczEsJkRXUCg0LCRhY2MpKTsKIAkJJm1vdgkoJHMyLCZEV1AoOCwkYWNjKSk7CkBAIC0xMDgzLDI3ICsyMjE0LDI0IEBACiAJCSZ4b3IJKCRzMiwmRFdQKDgsJGtleSkpOwogCQkmeG9yCSgkczMsJkRXUCgxMiwka2V5KSk7CiAKLQkJJnN1YgkoJGFjYywxNik7Ci0JCSZqYwkoJmxhYmVsKCJkZWNfcGFydGlhbCIpKTsKLQkJJm1vdgkoJF9sZW4sJGFjYyk7CQkjIHNhdmUgbGVuCi0JCSZtb3YJKCRhY2MsJF9pbnApOwkJIyBsb2FkIGlucAogCQkmbW92CSgka2V5LCRfb3V0KTsJCSMgbG9hZCBvdXQKKwkJJm1vdgkoJGFjYywkX2lucCk7CQkjIGxvYWQgaW5wCiAKIAkJJm1vdgkoJkRXUCgwLCRrZXkpLCRzMCk7CSMgd3JpdGUgb3V0cHV0CiAJCSZtb3YJKCZEV1AoNCwka2V5KSwkczEpOwogCQkmbW92CSgmRFdQKDgsJGtleSksJHMyKTsKIAkJJm1vdgkoJkRXUCgxMiwka2V5KSwkczMpOwogCisJCSZtb3YJKCRzMiwkX2xlbik7CQkjIGxvYWQgbGVuCiAJCSZtb3YJKCRfdG1wLCRhY2MpOwkJIyBzYXZlIGl2cAotCQkmbGVhCSgkYWNjLCZEV1AoMTYsJGFjYykpOworCQkmbGVhCSgkYWNjLCZEV1AoMTYsJGFjYykpOwkjIGFkdmFuY2UgaW5wCiAJCSZtb3YJKCRfaW5wLCRhY2MpOwkJIyBzYXZlIGlucAotCi0JCSZsZWEJKCRrZXksJkRXUCgxNiwka2V5KSk7CisJCSZsZWEJKCRrZXksJkRXUCgxNiwka2V5KSk7CSMgYWR2YW5jZSBvdXQKIAkJJm1vdgkoJF9vdXQsJGtleSk7CQkjIHNhdmUgb3V0Ci0KLQkmam56CSgmbGFiZWwoImRlY19sb29wIikpOworCQkmc3ViCSgkczIsMTYpOwkJIyBkZWNyZWFzZSBsZW4KKwkJJm1vdgkoJF9sZW4sJHMyKTsJCSMgc2F2ZSBsZW4KKwkmam56CSgmbGFiZWwoImZhc3RfZGVjX2xvb3AiKSk7CiAJJm1vdgkoJGtleSwkX3RtcCk7CQkjIGxvYWQgdGVtcCBpdnAKLSAgICAmc2V0X2xhYmVsKCJkZWNfZW5kIik7CiAJJm1vdgkoJGFjYywkX2l2cCk7CQkjIGxvYWQgdXNlciBpdnAKIAkmbW92CSgkczAsJkRXUCgwLCRrZXkpKTsJIyBsb2FkIGl2CiAJJm1vdgkoJHMxLCZEV1AoNCwka2V5KSk7CkBAIC0xMTEzLDMxICsyMjQxLDE2IEBACiAJJm1vdgkoJkRXUCg0LCRhY2MpLCRzMSk7CiAJJm1vdgkoJkRXUCg4LCRhY2MpLCRzMik7CiAJJm1vdgkoJkRXUCgxMiwkYWNjKSwkczMpOwotCSZqbXAJKCZsYWJlbCgiZGVjX291dCIpKTsKKwkmam1wCSgmbGFiZWwoImZhc3RfZGVjX291dCIpKTsKIAotICAgICZhbGlnbgkoNCk7Ci0gICAgJnNldF9sYWJlbCgiZGVjX3BhcnRpYWwiKTsKLQkmbGVhCSgka2V5LCRpdmVjKTsKLQkmbW92CSgmRFdQKDAsJGtleSksJHMwKTsJIyBkdW1wIG91dHB1dCB0byBzdGFjawotCSZtb3YJKCZEV1AoNCwka2V5KSwkczEpOwotCSZtb3YJKCZEV1AoOCwka2V5KSwkczIpOwotCSZtb3YJKCZEV1AoMTIsJGtleSksJHMzKTsKLQkmbGVhCSgkczIgZXEgImVjeCIgPyAkczIgOiAiIiwmRFdQKDE2LCRhY2MpKTsKLQkmbW92CSgkYWNjIGVxICJlc2kiID8gJGFjYyA6ICIiLCRrZXkpOwotCSZtb3YJKCRrZXkgZXEgImVkaSIgPyAka2V5IDogIiIsJF9vdXQpOwkjIGxvYWQgb3V0Ci0JJmRhdGFfd29yZCgweEE0RjNGNjg5KTsJIyByZXAgbW92c2IJCSMgY29weSBvdXRwdXQKLQkmbW92CSgka2V5LCRfaW5wKTsJCQkJIyB1c2UgaW5wIGFzIHRlbXAgaXZwCi0JJmptcAkoJmxhYmVsKCJkZWNfZW5kIikpOwotCi0gICAgJmFsaWduCSg0KTsKLSAgICAmc2V0X2xhYmVsKCJkZWNfaW5fcGxhY2UiKTsKLQkmc2V0X2xhYmVsKCJkZWNfaW5fcGxhY2VfbG9vcCIpOwotCQkmbGVhCSgka2V5LCRpdmVjKTsKKyAgICAmc2V0X2xhYmVsKCJmYXN0X2RlY19pbl9wbGFjZSIsMTYpOworCSZzZXRfbGFiZWwoImZhc3RfZGVjX2luX3BsYWNlX2xvb3AiKTsKIAkJJm1vdgkoJHMwLCZEV1AoMCwkYWNjKSk7CSMgcmVhZCBpbnB1dAogCQkmbW92CSgkczEsJkRXUCg0LCRhY2MpKTsKIAkJJm1vdgkoJHMyLCZEV1AoOCwkYWNjKSk7CiAJCSZtb3YJKCRzMywmRFdQKDEyLCRhY2MpKTsKIAorCQkmbGVhCSgka2V5LCRpdmVjKTsKIAkJJm1vdgkoJkRXUCgwLCRrZXkpLCRzMCk7CSMgY29weSB0byB0ZW1wCiAJCSZtb3YJKCZEV1AoNCwka2V5KSwkczEpOwogCQkmbW92CSgmRFdQKDgsJGtleSksJHMyKTsKQEAgLTExNTgsNyArMjI3MSw3IEBACiAJCSZtb3YJKCZEV1AoOCwkYWNjKSwkczIpOwogCQkmbW92CSgmRFdQKDEyLCRhY2MpLCRzMyk7CiAKLQkJJmxlYQkoJGFjYywmRFdQKDE2LCRhY2MpKTsKKwkJJmxlYQkoJGFjYywmRFdQKDE2LCRhY2MpKTsJIyBhZHZhbmNlIG91dAogCQkmbW92CSgkX291dCwkYWNjKTsJCSMgc2F2ZSBvdXQKIAogCQkmbGVhCSgkYWNjLCRpdmVjKTsKQEAgLTExNzMsNDAgKzIyODYsMzQwIEBACiAJCSZtb3YJKCZEV1AoMTIsJGtleSksJHMzKTsKIAogCQkmbW92CSgkYWNjLCRfaW5wKTsJCSMgbG9hZCBpbnAKLQotCQkmbGVhCSgkYWNjLCZEV1AoMTYsJGFjYykpOworCQkmbW92CSgkczIsJF9sZW4pOwkJIyBsb2FkIGxlbgorCQkmbGVhCSgkYWNjLCZEV1AoMTYsJGFjYykpOwkjIGFkdmFuY2UgaW5wCiAJCSZtb3YJKCRfaW5wLCRhY2MpOwkJIyBzYXZlIGlucAorCQkmc3ViCSgkczIsMTYpOwkJIyBkZWNyZWFzZSBsZW4KKwkJJm1vdgkoJF9sZW4sJHMyKTsJCSMgc2F2ZSBsZW4KKwkmam56CSgmbGFiZWwoImZhc3RfZGVjX2luX3BsYWNlX2xvb3AiKSk7CisKKyAgICAmc2V0X2xhYmVsKCJmYXN0X2RlY19vdXQiLDQpOworCSZjbXAJKCRtYXJrLDApOwkJIyB3YXMgdGhlIGtleSBzY2hlZHVsZSBjb3BpZWQ/CisJJm1vdgkoImVkaSIsJF9rZXkpOworCSZqZQkoJmxhYmVsKCJza2lwX2R6ZXJvIikpOworCSMgemVybyBjb3B5IG9mIGtleSBzY2hlZHVsZQorCSZtb3YJKCJlY3giLDI0MC80KTsKKwkmeG9yCSgiZWF4IiwiZWF4Iik7CisJJmFsaWduCSg0KTsKKwkmZGF0YV93b3JkKDB4QUJGM0Y2ODkpOwkjIHJlcCBzdG9zZAorCSZzZXRfbGFiZWwoInNraXBfZHplcm8iKQorCSZtb3YJKCJlc3AiLCRfZXNwKTsKKwkmcG9wZgkoKTsKKwkmZnVuY3Rpb25fZW5kX0EoKTsKKwkmcHVzaGYJKCk7CQkJIyBrbHVkZ2UsIG5ldmVyIGV4ZWN1dGVkCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU0xPVyBST1VUSU5FIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKKyZzZXRfbGFiZWwoInNsb3dfd2F5IiwxNik7CisKKwkmbW92CSgkczAsJkRXUCgwLCRzMCkpIGlmICghJHg4Nm9ubHkpOyMgbG9hZCBPUEVOU1NMX2lhMzJjYXAKKwkmbW92CSgka2V5LCZ3cGFyYW0oMykpOwkjIGxvYWQga2V5CisKKwkjIHByZS1hbGxvY2F0ZSBhbGlnbmVkIHN0YWNrIGZyYW1lLi4uCisJJmxlYQkoJGFjYywmRFdQKC04MCwiZXNwIikpOworCSZhbmQJKCRhY2MsLTY0KTsKKworCSMgLi4uIGFuZCBtYWtlIHN1cmUgaXQgZG9lc24ndCBhbGlhcyB3aXRoICRrZXkgbW9kdWxvIDEwMjQKKwkmbGVhCSgkczEsJkRXUCgtODAtNjMsJGtleSkpOworCSZzdWIJKCRzMSwkYWNjKTsKKwkmbmVnCSgkczEpOworCSZhbmQJKCRzMSwweDNDMCk7CSMgbW9kdWxvIDEwMjQsIGJ1dCBhbGlnbmVkIHRvIGNhY2hlLWxpbmUKKwkmc3ViCSgkYWNjLCRzMSk7CisKKwkjIHBpY2sgUy1ib3ggY29weSB3aGljaCBjYW4ndCBvdmVybGFwIHdpdGggc3RhY2sgZnJhbWUgb3IgJGtleQorCSZsZWEJKCRzMSwmRFdQKDc2OCwkYWNjKSk7CisJJnN1YgkoJHMxLCR0YmwpOworCSZhbmQJKCRzMSwweDMwMCk7CisJJmxlYQkoJHRibCwmRFdQKDIwNDgrMTI4LCR0YmwsJHMxKSk7CisKKwkmbGVhCSgkczMsJndwYXJhbSgwKSk7CSMgcG9pbnRlciB0byBwYXJhbWV0ZXIgYmxvY2sKKworCSZleGNoCSgiZXNwIiwkYWNjKTsKKwkmYWRkCSgiZXNwIiw0KTsJCSMgcmVzZXJ2ZSBmb3IgcmV0dXJuIGFkZHJlc3MhCisJJm1vdgkoJF90YmwsJHRibCk7CQkjIHNhdmUgJWVicAorCSZtb3YJKCRfZXNwLCRhY2MpOwkJIyBzYXZlICVlc3AKKwkmbW92CSgkX3RtcCwkczApOwkJIyBzYXZlIE9QRU5TU0xfaWEzMmNhcAorCisJJm1vdgkoJHMwLCZEV1AoMCwkczMpKTsJIyBsb2FkIGlucAorCSZtb3YJKCRzMSwmRFdQKDQsJHMzKSk7CSMgbG9hZCBvdXQKKwkjJm1vdgkoJHMyLCZEV1AoOCwkczMpKTsJIyBsb2FkIGxlbgorCSMmbW92CSgka2V5LCZEV1AoMTIsJHMzKSk7CSMgbG9hZCBrZXkKKwkmbW92CSgkYWNjLCZEV1AoMTYsJHMzKSk7CSMgbG9hZCBpdnAKKwkmbW92CSgkczMsJkRXUCgyMCwkczMpKTsJIyBsb2FkIGVuYyBmbGFnCisKKwkmbW92CSgkX2lucCwkczApOwkJIyBzYXZlIGNvcHkgb2YgaW5wCisJJm1vdgkoJF9vdXQsJHMxKTsJCSMgc2F2ZSBjb3B5IG9mIG91dAorCSZtb3YJKCRfbGVuLCRzMik7CQkjIHNhdmUgY29weSBvZiBsZW4KKwkmbW92CSgkX2tleSwka2V5KTsJCSMgc2F2ZSBjb3B5IG9mIGtleQorCSZtb3YJKCRfaXZwLCRhY2MpOwkJIyBzYXZlIGNvcHkgb2YgaXZwCisKKwkmbW92CSgka2V5LCRhY2MpOworCSZtb3YJKCRhY2MsJHMwKTsKKworCSZjbXAJKCRzMywwKTsKKwkmamUJKCZsYWJlbCgic2xvd19kZWNyeXB0IikpOworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFNMT1cgRU5DUllQVCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCisJJmNtcAkoJHMyLDE2KTsKKwkmbW92CSgkczMsJHMxKTsKKwkmamIJKCZsYWJlbCgic2xvd19lbmNfdGFpbCIpKTsKKworCQkJCQlpZiAoISR4ODZvbmx5KSB7CisJJmJ0CSgkX3RtcCwyNSk7CQkjIGNoZWNrIGZvciBTU0UgYml0CisJJmpuYwkoJmxhYmVsKCJzbG93X2VuY194ODYiKSk7CisKKwkmbW92cQkoIm1tMCIsJlFXUCgwLCRrZXkpKTsJIyBsb2FkIGl2CisJJm1vdnEJKCJtbTQiLCZRV1AoOCwka2V5KSk7CisKKwkmc2V0X2xhYmVsKCJzbG93X2VuY19sb29wX3NzZSIsMTYpOworCQkmcHhvcgkoIm1tMCIsJlFXUCgwLCRhY2MpKTsJIyB4b3IgaW5wdXQgZGF0YQorCQkmcHhvcgkoIm1tNCIsJlFXUCg4LCRhY2MpKTsKKworCQkmbW92CSgka2V5LCRfa2V5KTsKKwkJJmNhbGwJKCJfc3NlX0FFU19lbmNyeXB0X2NvbXBhY3QiKTsKKworCQkmbW92CSgkYWNjLCRfaW5wKTsJCSMgbG9hZCBpbnAKKwkJJm1vdgkoJGtleSwkX291dCk7CQkjIGxvYWQgb3V0CisJCSZtb3YJKCRzMiwkX2xlbik7CQkjIGxvYWQgbGVuCisKKwkJJm1vdnEJKCZRV1AoMCwka2V5KSwibW0wIik7CSMgc2F2ZSBvdXRwdXQgZGF0YQorCQkmbW92cQkoJlFXUCg4LCRrZXkpLCJtbTQiKTsKKworCQkmbGVhCSgkYWNjLCZEV1AoMTYsJGFjYykpOwkjIGFkdmFuY2UgaW5wCisJCSZtb3YJKCRfaW5wLCRhY2MpOwkJIyBzYXZlIGlucAorCQkmbGVhCSgkczMsJkRXUCgxNiwka2V5KSk7CSMgYWR2YW5jZSBvdXQKKwkJJm1vdgkoJF9vdXQsJHMzKTsJCSMgc2F2ZSBvdXQKKwkJJnN1YgkoJHMyLDE2KTsJCSMgZGVjcmVhc2UgbGVuCisJCSZjbXAJKCRzMiwxNik7CisJCSZtb3YJKCRfbGVuLCRzMik7CQkjIHNhdmUgbGVuCisJJmphZQkoJmxhYmVsKCJzbG93X2VuY19sb29wX3NzZSIpKTsKKwkmdGVzdAkoJHMyLDE1KTsKKwkmam56CSgmbGFiZWwoInNsb3dfZW5jX3RhaWwiKSk7CisJJm1vdgkoJGFjYywkX2l2cCk7CQkjIGxvYWQgaXZwCisJJm1vdnEJKCZRV1AoMCwkYWNjKSwibW0wIik7CSMgc2F2ZSBpdmVjCisJJm1vdnEJKCZRV1AoOCwkYWNjKSwibW00Iik7CisJJmVtbXMJKCk7CisJJm1vdgkoImVzcCIsJF9lc3ApOworCSZwb3BmCSgpOworCSZmdW5jdGlvbl9lbmRfQSgpOworCSZwdXNoZgkoKTsJCQkjIGtsdWRnZSwgbmV2ZXIgZXhlY3V0ZWQKKwkJCQkJfQorICAgICZzZXRfbGFiZWwoInNsb3dfZW5jX3g4NiIsMTYpOworCSZtb3YJKCRzMCwmRFdQKDAsJGtleSkpOwkjIGxvYWQgaXYKKwkmbW92CSgkczEsJkRXUCg0LCRrZXkpKTsKKworCSZzZXRfbGFiZWwoInNsb3dfZW5jX2xvb3BfeDg2Iiw0KTsKKwkJJm1vdgkoJHMyLCZEV1AoOCwka2V5KSk7CisJCSZtb3YJKCRzMywmRFdQKDEyLCRrZXkpKTsKKworCQkmeG9yCSgkczAsJkRXUCgwLCRhY2MpKTsJIyB4b3IgaW5wdXQgZGF0YQorCQkmeG9yCSgkczEsJkRXUCg0LCRhY2MpKTsKKwkJJnhvcgkoJHMyLCZEV1AoOCwkYWNjKSk7CisJCSZ4b3IJKCRzMywmRFdQKDEyLCRhY2MpKTsKKworCQkmbW92CSgka2V5LCRfa2V5KTsJCSMgbG9hZCBrZXkKKwkJJmNhbGwJKCJfeDg2X0FFU19lbmNyeXB0X2NvbXBhY3QiKTsKKworCQkmbW92CSgkYWNjLCRfaW5wKTsJCSMgbG9hZCBpbnAKKwkJJm1vdgkoJGtleSwkX291dCk7CQkjIGxvYWQgb3V0CisKKwkJJm1vdgkoJkRXUCgwLCRrZXkpLCRzMCk7CSMgc2F2ZSBvdXRwdXQgZGF0YQorCQkmbW92CSgmRFdQKDQsJGtleSksJHMxKTsKKwkJJm1vdgkoJkRXUCg4LCRrZXkpLCRzMik7CisJCSZtb3YJKCZEV1AoMTIsJGtleSksJHMzKTsKIAogCQkmbW92CSgkczIsJF9sZW4pOwkJIyBsb2FkIGxlbgotCQkmc3ViCSgkczIsMTYpOwotCQkmamMJKCZsYWJlbCgiZGVjX2luX3BsYWNlX3BhcnRpYWwiKSk7CisJCSZsZWEJKCRhY2MsJkRXUCgxNiwkYWNjKSk7CSMgYWR2YW5jZSBpbnAKKwkJJm1vdgkoJF9pbnAsJGFjYyk7CQkjIHNhdmUgaW5wCisJCSZsZWEJKCRzMywmRFdQKDE2LCRrZXkpKTsJIyBhZHZhbmNlIG91dAorCQkmbW92CSgkX291dCwkczMpOwkJIyBzYXZlIG91dAorCQkmc3ViCSgkczIsMTYpOwkJIyBkZWNyZWFzZSBsZW4KKwkJJmNtcAkoJHMyLDE2KTsKIAkJJm1vdgkoJF9sZW4sJHMyKTsJCSMgc2F2ZSBsZW4KLQkmam56CSgmbGFiZWwoImRlY19pbl9wbGFjZV9sb29wIikpOwotCSZqbXAJKCZsYWJlbCgiZGVjX291dCIpKTsKKwkmamFlCSgmbGFiZWwoInNsb3dfZW5jX2xvb3BfeDg2IikpOworCSZ0ZXN0CSgkczIsMTUpOworCSZqbnoJKCZsYWJlbCgic2xvd19lbmNfdGFpbCIpKTsKKwkmbW92CSgkYWNjLCRfaXZwKTsJCSMgbG9hZCBpdnAKKwkmbW92CSgkczIsJkRXUCg4LCRrZXkpKTsJIyByZXN0b3JlIGxhc3QgZHdvcmRzCisJJm1vdgkoJHMzLCZEV1AoMTIsJGtleSkpOworCSZtb3YJKCZEV1AoMCwkYWNjKSwkczApOwkjIHNhdmUgaXZlYworCSZtb3YJKCZEV1AoNCwkYWNjKSwkczEpOworCSZtb3YJKCZEV1AoOCwkYWNjKSwkczIpOworCSZtb3YJKCZEV1AoMTIsJGFjYyksJHMzKTsKIAotICAgICZhbGlnbgkoNCk7Ci0gICAgJnNldF9sYWJlbCgiZGVjX2luX3BsYWNlX3BhcnRpYWwiKTsKLQkjIG9uZSBjYW4gYXJndWUgaWYgdGhpcyBpcyBhY3R1YWxseSByZXF1aXJlZC4uLgotCSZtb3YJKCRrZXkgZXEgImVkaSIgPyAka2V5IDogIiIsJF9vdXQpOwotCSZsZWEJKCRhY2MgZXEgImVzaSIgPyAkYWNjIDogIiIsJGl2ZWMpOworCSZtb3YJKCJlc3AiLCRfZXNwKTsKKwkmcG9wZgkoKTsKKwkmZnVuY3Rpb25fZW5kX0EoKTsKKwkmcHVzaGYJKCk7CQkJIyBrbHVkZ2UsIG5ldmVyIGV4ZWN1dGVkCisKKyAgICAmc2V0X2xhYmVsKCJzbG93X2VuY190YWlsIiwxNik7CisJJmVtbXMJKCkJaWYgKCEkeDg2b25seSk7CisJJm1vdgkoJGtleSBlcSAiZWRpIj8gJGtleToiIiwkczMpOwkjIGxvYWQgb3V0IHRvIGVkaQorCSZtb3YJKCRzMSwxNik7CisJJnN1YgkoJHMxLCRzMik7CisJJmNtcAkoJGtleSwkYWNjIGVxICJlc2kiPyAkYWNjOiIiKTsJIyBjb21wYXJlIHdpdGggaW5wCisJJmplCSgmbGFiZWwoImVuY19pbl9wbGFjZSIpKTsKKwkmYWxpZ24JKDQpOworCSZkYXRhX3dvcmQoMHhBNEYzRjY4OSk7CSMgcmVwIG1vdnNiCSMgY29weSBpbnB1dAorCSZqbXAJKCZsYWJlbCgiZW5jX3NraXBfaW5fcGxhY2UiKSk7CisgICAgJnNldF9sYWJlbCgiZW5jX2luX3BsYWNlIik7CiAJJmxlYQkoJGtleSwmRFdQKDAsJGtleSwkczIpKTsKLQkmbGVhCSgkYWNjLCZEV1AoMTYsJGFjYywkczIpKTsKLQkmbmVnCSgkczIgZXEgImVjeCIgPyAkczIgOiAiIik7Ci0JJmRhdGFfd29yZCgweEE0RjNGNjg5KTsJIyByZXAgbW92c2IJIyByZXN0b3JlIHRhaWwKKyAgICAmc2V0X2xhYmVsKCJlbmNfc2tpcF9pbl9wbGFjZSIpOworCSZtb3YJKCRzMiwkczEpOworCSZ4b3IJKCRzMCwkczApOworCSZhbGlnbgkoNCk7CisJJmRhdGFfd29yZCgweEFBRjNGNjg5KTsJIyByZXAgc3Rvc2IJIyB6ZXJvIHRhaWwKIAotICAgICZhbGlnbgkoNCk7Ci0gICAgJnNldF9sYWJlbCgiZGVjX291dCIpOwotICAgICZjbXAJKCRtYXJrLDApOwkJIyB3YXMgdGhlIGtleSBzY2hlZHVsZSBjb3BpZWQ/Ci0gICAgJm1vdgkoImVkaSIsJF9rZXkpOwotICAgICZqZQkJKCZsYWJlbCgic2tpcF9kemVybyIpKTsKLSAgICAjIHplcm8gY29weSBvZiBrZXkgc2NoZWR1bGUKLSAgICAmbW92CSgiZWN4IiwyNDAvNCk7Ci0gICAgJnhvcgkoImVheCIsImVheCIpOwotICAgICZhbGlnbgkoNCk7Ci0gICAgJmRhdGFfd29yZCgweEFCRjNGNjg5KTsJIyByZXAgc3Rvc2QKLSAgICAmc2V0X2xhYmVsKCJza2lwX2R6ZXJvIikKLSAgICAmbW92CSgiZXNwIiwkX2VzcCk7Ci0gICAgJnBvcGYJKCk7CisJJm1vdgkoJGtleSwkX2l2cCk7CQkJIyByZXN0b3JlIGl2cAorCSZtb3YJKCRhY2MsJHMzKTsJCQkjIG91dHB1dCBhcyBpbnB1dAorCSZtb3YJKCRzMCwmRFdQKDAsJGtleSkpOworCSZtb3YJKCRzMSwmRFdQKDQsJGtleSkpOworCSZtb3YJKCRfbGVuLDE2KTsJCQkjIGxlbj0xNgorCSZqbXAJKCZsYWJlbCgic2xvd19lbmNfbG9vcF94ODYiKSk7CSMgb25lIG1vcmUgc3Bpbi4uLgorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFNMT1cgREVDUllQVCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCismc2V0X2xhYmVsKCJzbG93X2RlY3J5cHQiLDE2KTsKKwkJCQkJaWYgKCEkeDg2b25seSkgeworCSZidAkoJF90bXAsMjUpOwkJIyBjaGVjayBmb3IgU1NFIGJpdAorCSZqbmMJKCZsYWJlbCgic2xvd19kZWNfbG9vcF94ODYiKSk7CisKKwkmc2V0X2xhYmVsKCJzbG93X2RlY19sb29wX3NzZSIsNCk7CisJCSZtb3ZxCSgibW0wIiwmUVdQKDAsJGFjYykpOwkjIHJlYWQgaW5wdXQKKwkJJm1vdnEJKCJtbTQiLCZRV1AoOCwkYWNjKSk7CisKKwkJJm1vdgkoJGtleSwkX2tleSk7CisJCSZjYWxsCSgiX3NzZV9BRVNfZGVjcnlwdF9jb21wYWN0Iik7CisKKwkJJm1vdgkoJGFjYywkX2lucCk7CQkjIGxvYWQgaW5wCisJCSZsZWEJKCRzMCwkaXZlYyk7CisJCSZtb3YJKCRzMSwkX291dCk7CQkjIGxvYWQgb3V0CisJCSZtb3YJKCRzMiwkX2xlbik7CQkjIGxvYWQgbGVuCisJCSZtb3YJKCRrZXksJF9pdnApOwkJIyBsb2FkIGl2cAorCisJCSZtb3ZxCSgibW0xIiwmUVdQKDAsJGFjYykpOwkjIHJlLXJlYWQgaW5wdXQKKwkJJm1vdnEJKCJtbTUiLCZRV1AoOCwkYWNjKSk7CisKKwkJJnB4b3IJKCJtbTAiLCZRV1AoMCwka2V5KSk7CSMgeG9yIGl2CisJCSZweG9yCSgibW00IiwmUVdQKDgsJGtleSkpOworCisJCSZtb3ZxCSgmUVdQKDAsJGtleSksIm1tMSIpOwkjIGNvcHkgaW5wdXQgdG8gaXYKKwkJJm1vdnEJKCZRV1AoOCwka2V5KSwibW01Iik7CisKKwkJJnN1YgkoJHMyLDE2KTsJCSMgZGVjcmVhc2UgbGVuCisJCSZqYwkoJmxhYmVsKCJzbG93X2RlY19wYXJ0aWFsX3NzZSIpKTsKKworCQkmbW92cQkoJlFXUCgwLCRzMSksIm1tMCIpOwkjIHdyaXRlIG91dHB1dAorCQkmbW92cQkoJlFXUCg4LCRzMSksIm1tNCIpOworCisJCSZsZWEJKCRzMSwmRFdQKDE2LCRzMSkpOwkjIGFkdmFuY2Ugb3V0CisJCSZtb3YJKCRfb3V0LCRzMSk7CQkjIHNhdmUgb3V0CisJCSZsZWEJKCRhY2MsJkRXUCgxNiwkYWNjKSk7CSMgYWR2YW5jZSBpbnAKKwkJJm1vdgkoJF9pbnAsJGFjYyk7CQkjIHNhdmUgaW5wCisJCSZtb3YJKCRfbGVuLCRzMik7CQkjIHNhdmUgbGVuCisJJmpuegkoJmxhYmVsKCJzbG93X2RlY19sb29wX3NzZSIpKTsKKwkmZW1tcwkoKTsKKwkmbW92CSgiZXNwIiwkX2VzcCk7CisJJnBvcGYJKCk7CisJJmZ1bmN0aW9uX2VuZF9BKCk7CisJJnB1c2hmCSgpOwkJCSMga2x1ZGdlLCBuZXZlciBleGVjdXRlZAorCisgICAgJnNldF9sYWJlbCgic2xvd19kZWNfcGFydGlhbF9zc2UiLDE2KTsKKwkmbW92cQkoJlFXUCgwLCRzMCksIm1tMCIpOwkjIHNhdmUgb3V0cHV0IHRvIHRlbXAKKwkmbW92cQkoJlFXUCg4LCRzMCksIm1tNCIpOworCSZlbW1zCSgpOworCisJJmFkZAkoJHMyIGVxICJlY3giID8gImVjeCI6IiIsMTYpOworCSZtb3YJKCJlZGkiLCRzMSk7CQkjIG91dAorCSZtb3YJKCJlc2kiLCRzMCk7CQkjIHRlbXAKKwkmYWxpZ24JKDQpOworCSZkYXRhX3dvcmQoMHhBNEYzRjY4OSk7CQkjIHJlcCBtb3ZzYiAjIGNvcHkgcGFydGlhbCBvdXRwdXQKKworCSZtb3YJKCJlc3AiLCRfZXNwKTsKKwkmcG9wZgkoKTsKKwkmZnVuY3Rpb25fZW5kX0EoKTsKKwkmcHVzaGYJKCk7CQkJIyBrbHVkZ2UsIG5ldmVyIGV4ZWN1dGVkCisJCQkJCX0KKwkmc2V0X2xhYmVsKCJzbG93X2RlY19sb29wX3g4NiIsMTYpOworCQkmbW92CSgkczAsJkRXUCgwLCRhY2MpKTsJIyByZWFkIGlucHV0CisJCSZtb3YJKCRzMSwmRFdQKDQsJGFjYykpOworCQkmbW92CSgkczIsJkRXUCg4LCRhY2MpKTsKKwkJJm1vdgkoJHMzLCZEV1AoMTIsJGFjYykpOworCisJCSZsZWEJKCRrZXksJGl2ZWMpOworCQkmbW92CSgmRFdQKDAsJGtleSksJHMwKTsJIyBjb3B5IHRvIHRlbXAKKwkJJm1vdgkoJkRXUCg0LCRrZXkpLCRzMSk7CisJCSZtb3YJKCZEV1AoOCwka2V5KSwkczIpOworCQkmbW92CSgmRFdQKDEyLCRrZXkpLCRzMyk7CisKKwkJJm1vdgkoJGtleSwkX2tleSk7CQkjIGxvYWQga2V5CisJCSZjYWxsCSgiX3g4Nl9BRVNfZGVjcnlwdF9jb21wYWN0Iik7CisKKwkJJm1vdgkoJGtleSwkX2l2cCk7CQkjIGxvYWQgaXZwCisJCSZtb3YJKCRhY2MsJF9sZW4pOwkJIyBsb2FkIGxlbgorCQkmeG9yCSgkczAsJkRXUCgwLCRrZXkpKTsJIyB4b3IgaXYKKwkJJnhvcgkoJHMxLCZEV1AoNCwka2V5KSk7CisJCSZ4b3IJKCRzMiwmRFdQKDgsJGtleSkpOworCQkmeG9yCSgkczMsJkRXUCgxMiwka2V5KSk7CisKKwkJJnN1YgkoJGFjYywxNik7CisJCSZqYwkoJmxhYmVsKCJzbG93X2RlY19wYXJ0aWFsX3g4NiIpKTsKKworCQkmbW92CSgkX2xlbiwkYWNjKTsJCSMgc2F2ZSBsZW4KKwkJJm1vdgkoJGFjYywkX291dCk7CQkjIGxvYWQgb3V0CisKKwkJJm1vdgkoJkRXUCgwLCRhY2MpLCRzMCk7CSMgd3JpdGUgb3V0cHV0CisJCSZtb3YJKCZEV1AoNCwkYWNjKSwkczEpOworCQkmbW92CSgmRFdQKDgsJGFjYyksJHMyKTsKKwkJJm1vdgkoJkRXUCgxMiwkYWNjKSwkczMpOworCisJCSZsZWEJKCRhY2MsJkRXUCgxNiwkYWNjKSk7CSMgYWR2YW5jZSBvdXQKKwkJJm1vdgkoJF9vdXQsJGFjYyk7CQkjIHNhdmUgb3V0CisKKwkJJmxlYQkoJGFjYywkaXZlYyk7CisJCSZtb3YJKCRzMCwmRFdQKDAsJGFjYykpOwkjIHJlYWQgdGVtcAorCQkmbW92CSgkczEsJkRXUCg0LCRhY2MpKTsKKwkJJm1vdgkoJHMyLCZEV1AoOCwkYWNjKSk7CisJCSZtb3YJKCRzMywmRFdQKDEyLCRhY2MpKTsKKworCQkmbW92CSgmRFdQKDAsJGtleSksJHMwKTsJIyBjb3B5IGl0IHRvIGl2CisJCSZtb3YJKCZEV1AoNCwka2V5KSwkczEpOworCQkmbW92CSgmRFdQKDgsJGtleSksJHMyKTsKKwkJJm1vdgkoJkRXUCgxMiwka2V5KSwkczMpOworCisJCSZtb3YJKCRhY2MsJF9pbnApOwkJIyBsb2FkIGlucAorCQkmbGVhCSgkYWNjLCZEV1AoMTYsJGFjYykpOwkjIGFkdmFuY2UgaW5wCisJCSZtb3YJKCRfaW5wLCRhY2MpOwkJIyBzYXZlIGlucAorCSZqbnoJKCZsYWJlbCgic2xvd19kZWNfbG9vcF94ODYiKSk7CisJJm1vdgkoImVzcCIsJF9lc3ApOworCSZwb3BmCSgpOworCSZmdW5jdGlvbl9lbmRfQSgpOworCSZwdXNoZgkoKTsJCQkjIGtsdWRnZSwgbmV2ZXIgZXhlY3V0ZWQKKworICAgICZzZXRfbGFiZWwoInNsb3dfZGVjX3BhcnRpYWxfeDg2IiwxNik7CisJJmxlYQkoJGFjYywkaXZlYyk7CisJJm1vdgkoJkRXUCgwLCRhY2MpLCRzMCk7CSMgc2F2ZSBvdXRwdXQgdG8gdGVtcAorCSZtb3YJKCZEV1AoNCwkYWNjKSwkczEpOworCSZtb3YJKCZEV1AoOCwkYWNjKSwkczIpOworCSZtb3YJKCZEV1AoMTIsJGFjYyksJHMzKTsKKworCSZtb3YJKCRhY2MsJF9pbnApOworCSZtb3YJKCRzMCwmRFdQKDAsJGFjYykpOwkjIHJlLXJlYWQgaW5wdXQKKwkmbW92CSgkczEsJkRXUCg0LCRhY2MpKTsKKwkmbW92CSgkczIsJkRXUCg4LCRhY2MpKTsKKwkmbW92CSgkczMsJkRXUCgxMiwkYWNjKSk7CisKKwkmbW92CSgmRFdQKDAsJGtleSksJHMwKTsJIyBjb3B5IGl0IHRvIGl2CisJJm1vdgkoJkRXUCg0LCRrZXkpLCRzMSk7CisJJm1vdgkoJkRXUCg4LCRrZXkpLCRzMik7CisJJm1vdgkoJkRXUCgxMiwka2V5KSwkczMpOworCisJJm1vdgkoImVjeCIsJF9sZW4pOworCSZtb3YJKCJlZGkiLCRfb3V0KTsKKwkmbGVhCSgiZXNpIiwkaXZlYyk7CisJJmFsaWduCSg0KTsKKwkmZGF0YV93b3JkKDB4QTRGM0Y2ODkpOwkJIyByZXAgbW92c2IgIyBjb3B5IHBhcnRpYWwgb3V0cHV0CisKKwkmbW92CSgiZXNwIiwkX2VzcCk7CisJJnBvcGYJKCk7CiAmZnVuY3Rpb25fZW5kKCJBRVNfY2JjX2VuY3J5cHQiKTsKIH0KIApAQCAtMTIxNSwzNSArMjYyOCwzMSBAQAogc3ViIGVuY2tleSgpCiB7CiAJJm1vdnoJKCJlc2kiLCZMQigiZWR4IikpOwkJIyBya1tpXT4+MAotCSZtb3YJKCJlYngiLCZEV1AoMiwiZWJwIiwiZXNpIiw4KSk7CisJJm1vdnoJKCJlYngiLCZCUCgtMTI4LCR0YmwsImVzaSIsMSkpOwogCSZtb3Z6CSgiZXNpIiwmSEIoImVkeCIpKTsJCSMgcmtbaV0+PjgKLQkmYW5kCSgiZWJ4IiwweEZGMDAwMDAwKTsKKwkmc2hsCSgiZWJ4IiwyNCk7CiAJJnhvcgkoImVheCIsImVieCIpOwogCi0JJm1vdgkoImVieCIsJkRXUCgyLCJlYnAiLCJlc2kiLDgpKTsKKwkmbW92egkoImVieCIsJkJQKC0xMjgsJHRibCwiZXNpIiwxKSk7CiAJJnNocgkoImVkeCIsMTYpOwotCSZhbmQJKCJlYngiLDB4MDAwMDAwRkYpOwogCSZtb3Z6CSgiZXNpIiwmTEIoImVkeCIpKTsJCSMgcmtbaV0+PjE2CiAJJnhvcgkoImVheCIsImVieCIpOwogCi0JJm1vdgkoImVieCIsJkRXUCgwLCJlYnAiLCJlc2kiLDgpKTsKKwkmbW92egkoImVieCIsJkJQKC0xMjgsJHRibCwiZXNpIiwxKSk7CiAJJm1vdnoJKCJlc2kiLCZIQigiZWR4IikpOwkJIyBya1tpXT4+MjQKLQkmYW5kCSgiZWJ4IiwweDAwMDBGRjAwKTsKKwkmc2hsCSgiZWJ4Iiw4KTsKIAkmeG9yCSgiZWF4IiwiZWJ4Iik7CiAKLQkmbW92CSgiZWJ4IiwmRFdQKDAsImVicCIsImVzaSIsOCkpOwotCSZhbmQJKCJlYngiLDB4MDBGRjAwMDApOworCSZtb3Z6CSgiZWJ4IiwmQlAoLTEyOCwkdGJsLCJlc2kiLDEpKTsKKwkmc2hsCSgiZWJ4IiwxNik7CiAJJnhvcgkoImVheCIsImVieCIpOwogCi0JJnhvcgkoImVheCIsJkRXUCgyMDQ4LCJlYnAiLCJlY3giLDQpKTsJIyByY29uCisJJnhvcgkoImVheCIsJkRXUCgxMDI0LTEyOCwkdGJsLCJlY3giLDQpKTsJIyByY29uCiB9CiAKLSMgaW50IEFFU19zZXRfZW5jcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgY29uc3QgaW50IGJpdHMsCi0jICAgICAgICAgICAgICAgICAgICAgICAgQUVTX0tFWSAqa2V5KQotJnB1YmxpY19sYWJlbCgiQUVTX1RlIik7Ci0mZnVuY3Rpb25fYmVnaW4oIkFFU19zZXRfZW5jcnlwdF9rZXkiKTsKLQkmbW92CSgiZXNpIiwmd3BhcmFtKDApKTsJCSMgdXNlciBzdXBwbGllZCBrZXkKLQkmbW92CSgiZWRpIiwmd3BhcmFtKDIpKTsJCSMgcHJpdmF0ZSBrZXkgc2NoZWR1bGUKKyZmdW5jdGlvbl9iZWdpbigiX3g4Nl9BRVNfc2V0X2VuY3J5cHRfa2V5Iik7CisJJm1vdgkoImVzaSIsJndwYXJhbSgxKSk7CQkjIHVzZXIgc3VwcGxpZWQga2V5CisJJm1vdgkoImVkaSIsJndwYXJhbSgzKSk7CQkjIHByaXZhdGUga2V5IHNjaGVkdWxlCiAKIAkmdGVzdAkoImVzaSIsLTEpOwogCSZqegkoJmxhYmVsKCJiYWRwb2ludGVyIikpOwpAQCAtMTI1MiwxMCArMjY2MSwyMSBAQAogCiAJJmNhbGwJKCZsYWJlbCgicGljX3BvaW50IikpOwogCSZzZXRfbGFiZWwoInBpY19wb2ludCIpOwotCSZibGluZHBvcCgiZWJwIik7Ci0JJmxlYQkoImVicCIsJkRXUCgmbGFiZWwoIkFFU19UZSIpLiItIi4mbGFiZWwoInBpY19wb2ludCIpLCJlYnAiKSk7CisJJmJsaW5kcG9wKCR0YmwpOworCSZsZWEJKCR0YmwsJkRXUCgmbGFiZWwoIkFFU19UZSIpLiItIi4mbGFiZWwoInBpY19wb2ludCIpLCR0YmwpKTsKKwkmbGVhCSgkdGJsLCZEV1AoMjA0OCsxMjgsJHRibCkpOwogCi0JJm1vdgkoImVjeCIsJndwYXJhbSgxKSk7CQkjIG51bWJlciBvZiBiaXRzIGluIGtleQorCSMgcHJlZmV0Y2ggVGU0CisJJm1vdgkoImVheCIsJkRXUCgwLTEyOCwkdGJsKSk7CisJJm1vdgkoImVieCIsJkRXUCgzMi0xMjgsJHRibCkpOworCSZtb3YJKCJlY3giLCZEV1AoNjQtMTI4LCR0YmwpKTsKKwkmbW92CSgiZWR4IiwmRFdQKDk2LTEyOCwkdGJsKSk7CisJJm1vdgkoImVheCIsJkRXUCgxMjgtMTI4LCR0YmwpKTsKKwkmbW92CSgiZWJ4IiwmRFdQKDE2MC0xMjgsJHRibCkpOworCSZtb3YJKCJlY3giLCZEV1AoMTkyLTEyOCwkdGJsKSk7CisJJm1vdgkoImVkeCIsJkRXUCgyMjQtMTI4LCR0YmwpKTsKKworCSZtb3YJKCJlY3giLCZ3cGFyYW0oMikpOwkJIyBudW1iZXIgb2YgYml0cyBpbiBrZXkKIAkmY21wCSgiZWN4IiwxMjgpOwogCSZqZQkoJmxhYmVsKCIxMHJvdW5kcyIpKTsKIAkmY21wCSgiZWN4IiwxOTIpOwpAQCAtMTM5NCwyNCArMjgxNCwyMyBAQAogCQkmbW92CSgiZWR4IiwiZWF4Iik7CiAJCSZtb3YJKCJlYXgiLCZEV1AoMTYsImVkaSIpKTsJCSMgcmtbNF0KIAkJJm1vdnoJKCJlc2kiLCZMQigiZWR4IikpOwkJIyBya1sxMV0+PjAKLQkJJm1vdgkoImVieCIsJkRXUCgyLCJlYnAiLCJlc2kiLDgpKTsKKwkJJm1vdnoJKCJlYngiLCZCUCgtMTI4LCR0YmwsImVzaSIsMSkpOwogCQkmbW92egkoImVzaSIsJkhCKCJlZHgiKSk7CQkjIHJrWzExXT4+OAotCQkmYW5kCSgiZWJ4IiwweDAwMDAwMEZGKTsKIAkJJnhvcgkoImVheCIsImVieCIpOwogCi0JCSZtb3YJKCJlYngiLCZEV1AoMCwiZWJwIiwiZXNpIiw4KSk7CisJCSZtb3Z6CSgiZWJ4IiwmQlAoLTEyOCwkdGJsLCJlc2kiLDEpKTsKIAkJJnNocgkoImVkeCIsMTYpOwotCQkmYW5kCSgiZWJ4IiwweDAwMDBGRjAwKTsKKwkJJnNobAkoImVieCIsOCk7CiAJCSZtb3Z6CSgiZXNpIiwmTEIoImVkeCIpKTsJCSMgcmtbMTFdPj4xNgogCQkmeG9yCSgiZWF4IiwiZWJ4Iik7CiAKLQkJJm1vdgkoImVieCIsJkRXUCgwLCJlYnAiLCJlc2kiLDgpKTsKKwkJJm1vdnoJKCJlYngiLCZCUCgtMTI4LCR0YmwsImVzaSIsMSkpOwogCQkmbW92egkoImVzaSIsJkhCKCJlZHgiKSk7CQkjIHJrWzExXT4+MjQKLQkJJmFuZAkoImVieCIsMHgwMEZGMDAwMCk7CisJCSZzaGwJKCJlYngiLDE2KTsKIAkJJnhvcgkoImVheCIsImVieCIpOwogCi0JCSZtb3YJKCJlYngiLCZEV1AoMiwiZWJwIiwiZXNpIiw4KSk7Ci0JCSZhbmQJKCJlYngiLDB4RkYwMDAwMDApOworCQkmbW92egkoImVieCIsJkJQKC0xMjgsJHRibCwiZXNpIiwxKSk7CisJCSZzaGwJKCJlYngiLDI0KTsKIAkJJnhvcgkoImVheCIsImVieCIpOwogCiAJCSZtb3YJKCZEV1AoNDgsImVkaSIpLCJlYXgiKTsJCSMgcmtbMTJdCkBAIC0xNDMzLDQzICsyODUyLDc0IEBACiAgICAgJnNldF9sYWJlbCgiYmFkcG9pbnRlciIpOwogCSZtb3YJKCJlYXgiLC0xKTsKICAgICAmc2V0X2xhYmVsKCJleGl0Iik7Ci0mZnVuY3Rpb25fZW5kKCJBRVNfc2V0X2VuY3J5cHRfa2V5Iik7CismZnVuY3Rpb25fZW5kKCJfeDg2X0FFU19zZXRfZW5jcnlwdF9rZXkiKTsKKworIyBpbnQgQUVTX3NldF9lbmNyeXB0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywKKyMgICAgICAgICAgICAgICAgICAgICAgICBBRVNfS0VZICprZXkpCismZnVuY3Rpb25fYmVnaW5fQigiQUVTX3NldF9lbmNyeXB0X2tleSIpOworCSZjYWxsCSgiX3g4Nl9BRVNfc2V0X2VuY3J5cHRfa2V5Iik7CisJJnJldAkoKTsKKyZmdW5jdGlvbl9lbmRfQigiQUVTX3NldF9lbmNyeXB0X2tleSIpOwogCiBzdWIgZGVja2V5KCkKLXsgbXkgKCRpLCRwdHIsJHRlLCR0ZCkgPSBAXzsKK3sgbXkgKCRpLCRrZXksJHRwMSwkdHAyLCR0cDQsJHRwOCkgPSBAXzsKKyAgbXkgJHRtcCA9ICR0Ymw7CiAKLQkmbW92CSgiZWF4IiwmRFdQKCRpLCRwdHIpKTsKLQkmbW92CSgiZWR4IiwiZWF4Iik7Ci0JJm1vdnoJKCJlYngiLCZIQigiZWF4IikpOwotCSZzaHIJKCJlZHgiLDE2KTsKLQkmYW5kCSgiZWF4IiwweEZGKTsKLQkmbW92egkoImVheCIsJkJQKDIsJHRlLCJlYXgiLDgpKTsKLQkmbW92egkoImVieCIsJkJQKDIsJHRlLCJlYngiLDgpKTsKLQkmbW92CSgiZWF4IiwmRFdQKDAsJHRkLCJlYXgiLDgpKTsKLQkmeG9yCSgiZWF4IiwmRFdQKDMsJHRkLCJlYngiLDgpKTsKLQkmbW92egkoImVieCIsJkhCKCJlZHgiKSk7Ci0JJmFuZAkoImVkeCIsMHhGRik7Ci0JJm1vdnoJKCJlZHgiLCZCUCgyLCR0ZSwiZWR4Iiw4KSk7Ci0JJm1vdnoJKCJlYngiLCZCUCgyLCR0ZSwiZWJ4Iiw4KSk7Ci0JJnhvcgkoImVheCIsJkRXUCgyLCR0ZCwiZWR4Iiw4KSk7Ci0JJnhvcgkoImVheCIsJkRXUCgxLCR0ZCwiZWJ4Iiw4KSk7Ci0JJm1vdgkoJkRXUCgkaSwkcHRyKSwiZWF4Iik7CisJJm1vdgkoJGFjYywkdHAxKTsKKwkmYW5kCSgkYWNjLDB4ODA4MDgwODApOworCSZtb3YJKCR0bXAsJGFjYyk7CisJJnNocgkoJHRtcCw3KTsKKwkmbGVhCSgkdHAyLCZEV1AoMCwkdHAxLCR0cDEpKTsKKwkmc3ViCSgkYWNjLCR0bXApOworCSZhbmQJKCR0cDIsMHhmZWZlZmVmZSk7CisJJmFuZAkoJGFjYywweDFiMWIxYjFiKTsKKwkmeG9yCSgkYWNjLCR0cDIpOworCSZtb3YJKCR0cDIsJGFjYyk7CisKKwkmYW5kCSgkYWNjLDB4ODA4MDgwODApOworCSZtb3YJKCR0bXAsJGFjYyk7CisJJnNocgkoJHRtcCw3KTsKKwkmbGVhCSgkdHA0LCZEV1AoMCwkdHAyLCR0cDIpKTsKKwkmc3ViCSgkYWNjLCR0bXApOworCSZhbmQJKCR0cDQsMHhmZWZlZmVmZSk7CisJJmFuZAkoJGFjYywweDFiMWIxYjFiKTsKKwkgJnhvcgkoJHRwMiwkdHAxKTsJIyB0cDJedHAxCisJJnhvcgkoJGFjYywkdHA0KTsKKwkmbW92CSgkdHA0LCRhY2MpOworCisJJmFuZAkoJGFjYywweDgwODA4MDgwKTsKKwkmbW92CSgkdG1wLCRhY2MpOworCSZzaHIJKCR0bXAsNyk7CisJJmxlYQkoJHRwOCwmRFdQKDAsJHRwNCwkdHA0KSk7CisJICZ4b3IJKCR0cDQsJHRwMSk7CSMgdHA0XnRwMQorCSZzdWIJKCRhY2MsJHRtcCk7CisJJmFuZAkoJHRwOCwweGZlZmVmZWZlKTsKKwkmYW5kCSgkYWNjLDB4MWIxYjFiMWIpOworCSAmcm90bAkoJHRwMSw4KTsJIyA9IFJPVEFURSh0cDEsOCkKKwkmeG9yCSgkdHA4LCRhY2MpOworCisJJm1vdgkoJHRtcCwmRFdQKDQqKCRpKzEpLCRrZXkpKTsJIyBtb2R1bG8tc2NoZWR1bGVkIGxvYWQKKworCSZ4b3IJKCR0cDEsJHRwMik7CisJJnhvcgkoJHRwMiwkdHA4KTsKKwkmeG9yCSgkdHAxLCR0cDQpOworCSZyb3RsCSgkdHAyLDI0KTsKKwkmeG9yCSgkdHA0LCR0cDgpOworCSZ4b3IJKCR0cDEsJHRwOCk7CSMgXj0gdHA4Xih0cDRedHAxKV4odHAyXnRwMSkKKwkmcm90bAkoJHRwNCwxNik7CisJJnhvcgkoJHRwMSwkdHAyKTsJIyBePSBST1RBVEUodHA4XnRwMl50cDEsMjQpCisJJnJvdGwJKCR0cDgsOCk7CisJJnhvcgkoJHRwMSwkdHA0KTsJIyBePSBST1RBVEUodHA4XnRwNF50cDEsMTYpCisJJm1vdgkoJHRwMiwkdG1wKTsKKwkmeG9yCSgkdHAxLCR0cDgpOwkjIF49IFJPVEFURSh0cDgsOCkKKworCSZtb3YJKCZEV1AoNCokaSwka2V5KSwkdHAxKTsKIH0KIAogIyBpbnQgQUVTX3NldF9kZWNyeXB0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywKICMgICAgICAgICAgICAgICAgICAgICAgICBBRVNfS0VZICprZXkpCi0mcHVibGljX2xhYmVsKCJBRVNfVGQiKTsKLSZwdWJsaWNfbGFiZWwoIkFFU19UZSIpOwogJmZ1bmN0aW9uX2JlZ2luX0IoIkFFU19zZXRfZGVjcnlwdF9rZXkiKTsKLQkmbW92CSgiZWF4Iiwmd3BhcmFtKDApKTsKLQkmbW92CSgiZWN4Iiwmd3BhcmFtKDEpKTsKLQkmbW92CSgiZWR4Iiwmd3BhcmFtKDIpKTsKLQkmc3ViCSgiZXNwIiwxMik7Ci0JJm1vdgkoJkRXUCgwLCJlc3AiKSwiZWF4Iik7Ci0JJm1vdgkoJkRXUCg0LCJlc3AiKSwiZWN4Iik7Ci0JJm1vdgkoJkRXUCg4LCJlc3AiKSwiZWR4Iik7Ci0JJmNhbGwJKCJBRVNfc2V0X2VuY3J5cHRfa2V5Iik7Ci0JJmFkZAkoImVzcCIsMTIpOworCSZjYWxsCSgiX3g4Nl9BRVNfc2V0X2VuY3J5cHRfa2V5Iik7CiAJJmNtcAkoImVheCIsMCk7CiAJJmplCSgmbGFiZWwoInByb2NlZWQiKSk7CiAJJnJldAkoKTsKQEAgLTE0ODUsOCArMjkzNSw3IEBACiAJJmxlYQkoImVjeCIsJkRXUCgwLCIiLCJlY3giLDQpKTsKIAkmbGVhCSgiZWRpIiwmRFdQKDAsImVzaSIsImVjeCIsNCkpOwkjIHBvaW50ZXIgdG8gbGFzdCBjaHVuawogCi0JJmFsaWduCSg0KTsKLQkmc2V0X2xhYmVsKCJpbnZlcnQiKTsJCQkjIGludmVydCBvcmRlciBvZiBjaHVua3MKKwkmc2V0X2xhYmVsKCJpbnZlcnQiLDQpOwkJCSMgaW52ZXJ0IG9yZGVyIG9mIGNodW5rcwogCQkmbW92CSgiZWF4IiwmRFdQKDAsImVzaSIpKTsKIAkJJm1vdgkoImVieCIsJkRXUCg0LCJlc2kiKSk7CiAJCSZtb3YJKCJlY3giLCZEV1AoMCwiZWRpIikpOwpAQCAtMTUwOCwyNiArMjk1NywyNCBAQAogCQkmY21wCSgiZXNpIiwiZWRpIik7CiAJJmpuZQkoJmxhYmVsKCJpbnZlcnQiKSk7CiAKLQkmY2FsbAkoJmxhYmVsKCJwaWNfcG9pbnQiKSk7Ci0JJnNldF9sYWJlbCgicGljX3BvaW50Iik7Ci0JYmxpbmRwb3AoImVicCIpOwotCSZsZWEJKCJlZGkiLCZEV1AoJmxhYmVsKCJBRVNfVGQiKS4iLSIuJmxhYmVsKCJwaWNfcG9pbnQiKSwiZWJwIikpOwotCSZsZWEJKCJlYnAiLCZEV1AoJmxhYmVsKCJBRVNfVGUiKS4iLSIuJmxhYmVsKCJwaWNfcG9pbnQiKSwiZWJwIikpOworCSZtb3YJKCRrZXksJndwYXJhbSgyKSk7CisJJm1vdgkoJGFjYywmRFdQKDI0MCwka2V5KSk7CQkjIHB1bGwgbnVtYmVyIG9mIHJvdW5kcworCSZsZWEJKCRhY2MsJkRXUCgtMiwkYWNjLCRhY2MpKTsKKwkmbGVhCSgkYWNjLCZEV1AoMCwka2V5LCRhY2MsOCkpOworCSZtb3YJKCZ3cGFyYW0oMiksJGFjYyk7CiAKLQkmbW92CSgiZXNpIiwmd3BhcmFtKDIpKTsKLQkmbW92CSgiZWN4IiwmRFdQKDI0MCwiZXNpIikpOwkjIHB1bGwgbnVtYmVyIG9mIHJvdW5kcwotCSZkZWMJKCJlY3giKTsKLQkmYWxpZ24JKDQpOwotCSZzZXRfbGFiZWwoInBlcm11dGUiKTsJCQkjIHBlcm11dGUgdGhlIGtleSBzY2hlZHVsZQotCQkmYWRkCSgiZXNpIiwxNik7Ci0JCSZkZWNrZXkJKDAsImVzaSIsImVicCIsImVkaSIpOwotCQkmZGVja2V5CSg0LCJlc2kiLCJlYnAiLCJlZGkiKTsKLQkJJmRlY2tleQkoOCwiZXNpIiwiZWJwIiwiZWRpIik7Ci0JCSZkZWNrZXkJKDEyLCJlc2kiLCJlYnAiLCJlZGkiKTsKLQkJJmRlYwkoImVjeCIpOwotCSZqbnoJKCZsYWJlbCgicGVybXV0ZSIpKTsKKwkmbW92CSgkczAsJkRXUCgxNiwka2V5KSk7CQkjIG1vZHVsby1zY2hlZHVsZWQgbG9hZAorCSZzZXRfbGFiZWwoInBlcm11dGUiLDQpOwkJIyBwZXJtdXRlIHRoZSBrZXkgc2NoZWR1bGUKKwkJJmFkZAkoJGtleSwxNik7CisJCSZkZWNrZXkJKDAsJGtleSwkczAsJHMxLCRzMiwkczMpOworCQkmZGVja2V5CSgxLCRrZXksJHMxLCRzMiwkczMsJHMwKTsKKwkJJmRlY2tleQkoMiwka2V5LCRzMiwkczMsJHMwLCRzMSk7CisJCSZkZWNrZXkJKDMsJGtleSwkczMsJHMwLCRzMSwkczIpOworCQkmY21wCSgka2V5LCZ3cGFyYW0oMikpOworCSZqYgkoJmxhYmVsKCJwZXJtdXRlIikpOwogCiAJJnhvcgkoImVheCIsImVheCIpOwkJCSMgcmV0dXJuIHN1Y2Nlc3MKICZmdW5jdGlvbl9lbmQoIkFFU19zZXRfZGVjcnlwdF9rZXkiKTsKKyZhc2NpeigiQUVTIGZvciB4ODYsIENSWVBUT0dBTVMgYnkgPGFwcHJvXEBvcGVuc3NsLm9yZz4iKTsKIAogJmFzbV9maW5pc2goKTsKZGlmZiAtLWdpdCBhL2NyeXB0by8wLjkuOS1kZXYvYWVzL2Flcy1hcm12NC5wbCBiL2NyeXB0by9hZXMvYXNtL2Flcy1hcm12NC5wbApzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBjcnlwdG8vMC45LjktZGV2L2Flcy9hZXMtYXJtdjQucGwKcmVuYW1lIHRvIGNyeXB0by9hZXMvYXNtL2Flcy1hcm12NC5wbAppbmRleCAxNTc0MmMxLi42OTAyNDQxIDEwMDY0NAotLS0gYS9jcnlwdG8vMC45LjktZGV2L2Flcy9hZXMtYXJtdjQucGwKKysrIGIvY3J5cHRvL2Flcy9hc20vYWVzLWFybXY0LnBsCkBAIC0xMDI0LDYgKzEwMjQsNyBAQAogCW1vdglwYyxscgkJCUAgcmV0dXJuCiAuc2l6ZQlfYXJtdjRfQUVTX2RlY3J5cHQsLi1fYXJtdjRfQUVTX2RlY3J5cHQKIC5hc2NpegkiQUVTIGZvciBBUk12NCwgQ1JZUFRPR0FNUyBieSA8YXBwcm9cQG9wZW5zc2wub3JnPiIKKy5hbGlnbgkyCiBfX18KIAogJGNvZGUgPX4gcy9cYmJ4XHMrbHJcYi8ud29yZFx0MHhlMTJmZmYxZS9nbTsJIyBtYWtlIGl0IHBvc3NpYmxlIHRvIGNvbXBpbGUgd2l0aCAtbWFyY2g9YXJtdjQKZGlmZiAtLWdpdCBhL2NyeXB0by8wLjkuOS1kZXYvYWVzL2Flcy1hcm12NC5zIGIvY3J5cHRvL2Flcy9hc20vYWVzLWFybXY0LnMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGNyeXB0by8wLjkuOS1kZXYvYWVzL2Flcy1hcm12NC5zCnJlbmFtZSB0byBjcnlwdG8vYWVzL2FzbS9hZXMtYXJtdjQucwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Flcy9hc20vYWVzLXBwYy5wbCBiL2NyeXB0by9hZXMvYXNtL2Flcy1wcGMucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U0Mjc2NQotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9hZXMvYXNtL2Flcy1wcGMucGwKQEAgLTAsMCArMSwxMTc2IEBACisjIS91c3IvYmluL2VudiBwZXJsCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgV3JpdHRlbiBieSBBbmR5IFBvbHlha292IDxhcHByb0BmeS5jaGFsbWVycy5zZT4gZm9yIHRoZSBPcGVuU1NMCisjIHByb2plY3QuIFRoZSBtb2R1bGUgaXMsIGhvd2V2ZXIsIGR1YWwgbGljZW5zZWQgdW5kZXIgT3BlblNTTCBhbmQKKyMgQ1JZUFRPR0FNUyBsaWNlbnNlcyBkZXBlbmRpbmcgb24gd2hlcmUgeW91IG9idGFpbiBpdC4gRm9yIGZ1cnRoZXIKKyMgZGV0YWlscyBzZWUgaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9+YXBwcm8vY3J5cHRvZ2Ftcy8uCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgTmVlZHMgbW9yZSB3b3JrOiBrZXkgc2V0dXAsIHBhZ2UgYm91bmRhcmllcywgQ0JDIHJvdXRpbmUuLi4KKyMKKyMgcHBjX0FFU19bZW58ZGVdY3J5cHQgcGVyZm9ybSBhdCAxOCBjeWNsZXMgcGVyIGJ5dGUgcHJvY2Vzc2VkIHdpdGgKKyMgMTI4LWJpdCBrZXksIHdoaWNoIGlzIH40MCUgYmV0dGVyIHRoYW4gNjQtYml0IGNvZGUgZ2VuZXJhdGVkIGJ5IGdjYworIyA0LjAuIEJ1dCB0aGVzZSBhcmUgbm90IHRoZSBvbmVzIGN1cnJlbnRseSB1c2VkISBUaGVpciAiY29tcGFjdCIKKyMgY291bnRlcnBhcnRzIGFyZSwgZm9yIHNlY3VyaXR5IHJlYXNvbi4gcHBjX0FFU19lbmNyeXB0X2NvbXBhY3QgcnVucworIyBhdCAxLzIgb2YgcHBjX0FFU19lbmNyeXB0IHNwZWVkLCB3aGlsZSBwcGNfQUVTX2RlY3J5cHRfY29tcGFjdCAtCisjIGF0IDEvMyBvZiBwcGNfQUVTX2RlY3J5cHQuCisKKyRmbGF2b3VyID0gc2hpZnQ7CisKK2lmICgkZmxhdm91ciA9fiAvNjQvKSB7CisJJFNJWkVfVAk9ODsKKwkkU1RVCT0ic3RkdSI7CisJJFBPUAk9ImxkIjsKKwkkUFVTSAk9InN0ZCI7Cit9IGVsc2lmICgkZmxhdm91ciA9fiAvMzIvKSB7CisJJFNJWkVfVAk9NDsKKwkkU1RVCT0ic3R3dSI7CisJJFBPUAk9Imx3eiI7CisJJFBVU0gJPSJzdHciOworfSBlbHNlIHsgZGllICJub25zZW5zZSAkZmxhdm91ciI7IH0KKworJDAgPX4gbS8oLipbXC9cXF0pW15cL1xcXSskLzsgJGRpcj0kMTsKKyggJHhsYXRlPSIke2Rpcn1wcGMteGxhdGUucGwiIGFuZCAtZiAkeGxhdGUgKSBvcgorKCAkeGxhdGU9IiR7ZGlyfS4uLy4uL3Blcmxhc20vcHBjLXhsYXRlLnBsIiBhbmQgLWYgJHhsYXRlKSBvcgorZGllICJjYW4ndCBsb2NhdGUgcHBjLXhsYXRlLnBsIjsKKworb3BlbiBTVERPVVQsInwgJF5YICR4bGF0ZSAkZmxhdm91ciAiLnNoaWZ0IHx8IGRpZSAiY2FuJ3QgY2FsbCAkeGxhdGU6ICQhIjsKKworJEZSQU1FPTMyKiRTSVpFX1Q7CisKK3N1YiBfZGF0YV93b3JkKCkKK3sgbXkgJGk7CisgICAgd2hpbGUoZGVmaW5lZCgkaT1zaGlmdCkpIHsgJGNvZGUuPXNwcmludGYiXHQubG9uZ1x0MHglMDh4LDB4JTA4eFxuIiwkaSwkaTsgfQorfQorCiskc3A9InIxIjsKKyR0b2M9InIyIjsKKyRpbnA9InIzIjsKKyRvdXQ9InI0IjsKKyRrZXk9InI1IjsKKworJFRibDA9InIzIjsKKyRUYmwxPSJyNiI7CiskVGJsMj0icjciOworJFRibDM9InIyIjsKKworJHMwPSJyOCI7CiskczE9InI5IjsKKyRzMj0icjEwIjsKKyRzMz0icjExIjsKKworJHQwPSJyMTIiOworJHQxPSJyMTMiOworJHQyPSJyMTQiOworJHQzPSJyMTUiOworCiskYWNjMDA9InIxNiI7CiskYWNjMDE9InIxNyI7CiskYWNjMDI9InIxOCI7CiskYWNjMDM9InIxOSI7CisKKyRhY2MwND0icjIwIjsKKyRhY2MwNT0icjIxIjsKKyRhY2MwNj0icjIyIjsKKyRhY2MwNz0icjIzIjsKKworJGFjYzA4PSJyMjQiOworJGFjYzA5PSJyMjUiOworJGFjYzEwPSJyMjYiOworJGFjYzExPSJyMjciOworCiskYWNjMTI9InIyOCI7CiskYWNjMTM9InIyOSI7CiskYWNjMTQ9InIzMCI7CiskYWNjMTU9InIzMSI7CisKKyMgc3RheSBhd2F5IGZyb20gVExTIHBvaW50ZXIKK2lmICgkU0laRV9UPT04KQl7IGRpZSBpZiAoJHQxIG5lICJyMTMiKTsgICR0MT0icjAiOwkJfQorZWxzZQkJeyBkaWUgaWYgKCRUYmwzIG5lICJyMiIpOyAkVGJsMz0kdDA7ICR0MD0icjAiOwl9CiskbWFzazgwPSRUYmwyOworJG1hc2sxYj0kVGJsMzsKKworJGNvZGUuPTw8X19fOworLm1hY2hpbmUJImFueSIKKy50ZXh0CisKKy5hbGlnbgk3CitMQUVTX1RlOgorCW1mbHIJcjAKKwliY2wJMjAsMzEsXCQrNAorCW1mbHIJJFRibDAJOyAgICB2dnZ2diAiZGlzdGFuY2UiIGJldHdlZW4gLiBhbmQgMXN0IGRhdGEgZW50cnkKKwlhZGRpCSRUYmwwLCRUYmwwLGAxMjgtOGAKKwltdGxyCXIwCisJYmxyCisJLnNwYWNlCWAzMi0yNGAKK0xBRVNfVGQ6CisJbWZscglyMAorCWJjbAkyMCwzMSxcJCs0CisJbWZscgkkVGJsMAk7ICAgIHZ2dnZ2dnZ2ICJkaXN0YW5jZSIgYmV0d2VlbiAuIGFuZCAxc3QgZGF0YSBlbnRyeQorCWFkZGkJJFRibDAsJFRibDAsYDEyOC04LTMyKzIwNDgrMjU2YAorCW10bHIJcjAKKwlibHIKKwkuc3BhY2UJYDEyOC0zMi0yNGAKK19fXworJl9kYXRhX3dvcmQoCisJMHhjNjYzNjNhNSwgMHhmODdjN2M4NCwgMHhlZTc3Nzc5OSwgMHhmNjdiN2I4ZCwKKwkweGZmZjJmMjBkLCAweGQ2NmI2YmJkLCAweGRlNmY2ZmIxLCAweDkxYzVjNTU0LAorCTB4NjAzMDMwNTAsIDB4MDIwMTAxMDMsIDB4Y2U2NzY3YTksIDB4NTYyYjJiN2QsCisJMHhlN2ZlZmUxOSwgMHhiNWQ3ZDc2MiwgMHg0ZGFiYWJlNiwgMHhlYzc2NzY5YSwKKwkweDhmY2FjYTQ1LCAweDFmODI4MjlkLCAweDg5YzljOTQwLCAweGZhN2Q3ZDg3LAorCTB4ZWZmYWZhMTUsIDB4YjI1OTU5ZWIsIDB4OGU0NzQ3YzksIDB4ZmJmMGYwMGIsCisJMHg0MWFkYWRlYywgMHhiM2Q0ZDQ2NywgMHg1ZmEyYTJmZCwgMHg0NWFmYWZlYSwKKwkweDIzOWM5Y2JmLCAweDUzYTRhNGY3LCAweGU0NzI3Mjk2LCAweDliYzBjMDViLAorCTB4NzViN2I3YzIsIDB4ZTFmZGZkMWMsIDB4M2Q5MzkzYWUsIDB4NGMyNjI2NmEsCisJMHg2YzM2MzY1YSwgMHg3ZTNmM2Y0MSwgMHhmNWY3ZjcwMiwgMHg4M2NjY2M0ZiwKKwkweDY4MzQzNDVjLCAweDUxYTVhNWY0LCAweGQxZTVlNTM0LCAweGY5ZjFmMTA4LAorCTB4ZTI3MTcxOTMsIDB4YWJkOGQ4NzMsIDB4NjIzMTMxNTMsIDB4MmExNTE1M2YsCisJMHgwODA0MDQwYywgMHg5NWM3Yzc1MiwgMHg0NjIzMjM2NSwgMHg5ZGMzYzM1ZSwKKwkweDMwMTgxODI4LCAweDM3OTY5NmExLCAweDBhMDUwNTBmLCAweDJmOWE5YWI1LAorCTB4MGUwNzA3MDksIDB4MjQxMjEyMzYsIDB4MWI4MDgwOWIsIDB4ZGZlMmUyM2QsCisJMHhjZGViZWIyNiwgMHg0ZTI3Mjc2OSwgMHg3ZmIyYjJjZCwgMHhlYTc1NzU5ZiwKKwkweDEyMDkwOTFiLCAweDFkODM4MzllLCAweDU4MmMyYzc0LCAweDM0MWExYTJlLAorCTB4MzYxYjFiMmQsIDB4ZGM2ZTZlYjIsIDB4YjQ1YTVhZWUsIDB4NWJhMGEwZmIsCisJMHhhNDUyNTJmNiwgMHg3NjNiM2I0ZCwgMHhiN2Q2ZDY2MSwgMHg3ZGIzYjNjZSwKKwkweDUyMjkyOTdiLCAweGRkZTNlMzNlLCAweDVlMmYyZjcxLCAweDEzODQ4NDk3LAorCTB4YTY1MzUzZjUsIDB4YjlkMWQxNjgsIDB4MDAwMDAwMDAsIDB4YzFlZGVkMmMsCisJMHg0MDIwMjA2MCwgMHhlM2ZjZmMxZiwgMHg3OWIxYjFjOCwgMHhiNjViNWJlZCwKKwkweGQ0NmE2YWJlLCAweDhkY2JjYjQ2LCAweDY3YmViZWQ5LCAweDcyMzkzOTRiLAorCTB4OTQ0YTRhZGUsIDB4OTg0YzRjZDQsIDB4YjA1ODU4ZTgsIDB4ODVjZmNmNGEsCisJMHhiYmQwZDA2YiwgMHhjNWVmZWYyYSwgMHg0ZmFhYWFlNSwgMHhlZGZiZmIxNiwKKwkweDg2NDM0M2M1LCAweDlhNGQ0ZGQ3LCAweDY2MzMzMzU1LCAweDExODU4NTk0LAorCTB4OGE0NTQ1Y2YsIDB4ZTlmOWY5MTAsIDB4MDQwMjAyMDYsIDB4ZmU3ZjdmODEsCisJMHhhMDUwNTBmMCwgMHg3ODNjM2M0NCwgMHgyNTlmOWZiYSwgMHg0YmE4YThlMywKKwkweGEyNTE1MWYzLCAweDVkYTNhM2ZlLCAweDgwNDA0MGMwLCAweDA1OGY4ZjhhLAorCTB4M2Y5MjkyYWQsIDB4MjE5ZDlkYmMsIDB4NzAzODM4NDgsIDB4ZjFmNWY1MDQsCisJMHg2M2JjYmNkZiwgMHg3N2I2YjZjMSwgMHhhZmRhZGE3NSwgMHg0MjIxMjE2MywKKwkweDIwMTAxMDMwLCAweGU1ZmZmZjFhLCAweGZkZjNmMzBlLCAweGJmZDJkMjZkLAorCTB4ODFjZGNkNGMsIDB4MTgwYzBjMTQsIDB4MjYxMzEzMzUsIDB4YzNlY2VjMmYsCisJMHhiZTVmNWZlMSwgMHgzNTk3OTdhMiwgMHg4ODQ0NDRjYywgMHgyZTE3MTczOSwKKwkweDkzYzRjNDU3LCAweDU1YTdhN2YyLCAweGZjN2U3ZTgyLCAweDdhM2QzZDQ3LAorCTB4Yzg2NDY0YWMsIDB4YmE1ZDVkZTcsIDB4MzIxOTE5MmIsIDB4ZTY3MzczOTUsCisJMHhjMDYwNjBhMCwgMHgxOTgxODE5OCwgMHg5ZTRmNGZkMSwgMHhhM2RjZGM3ZiwKKwkweDQ0MjIyMjY2LCAweDU0MmEyYTdlLCAweDNiOTA5MGFiLCAweDBiODg4ODgzLAorCTB4OGM0NjQ2Y2EsIDB4YzdlZWVlMjksIDB4NmJiOGI4ZDMsIDB4MjgxNDE0M2MsCisJMHhhN2RlZGU3OSwgMHhiYzVlNWVlMiwgMHgxNjBiMGIxZCwgMHhhZGRiZGI3NiwKKwkweGRiZTBlMDNiLCAweDY0MzIzMjU2LCAweDc0M2EzYTRlLCAweDE0MGEwYTFlLAorCTB4OTI0OTQ5ZGIsIDB4MGMwNjA2MGEsIDB4NDgyNDI0NmMsIDB4Yjg1YzVjZTQsCisJMHg5ZmMyYzI1ZCwgMHhiZGQzZDM2ZSwgMHg0M2FjYWNlZiwgMHhjNDYyNjJhNiwKKwkweDM5OTE5MWE4LCAweDMxOTU5NWE0LCAweGQzZTRlNDM3LCAweGYyNzk3OThiLAorCTB4ZDVlN2U3MzIsIDB4OGJjOGM4NDMsIDB4NmUzNzM3NTksIDB4ZGE2ZDZkYjcsCisJMHgwMThkOGQ4YywgMHhiMWQ1ZDU2NCwgMHg5YzRlNGVkMiwgMHg0OWE5YTllMCwKKwkweGQ4NmM2Y2I0LCAweGFjNTY1NmZhLCAweGYzZjRmNDA3LCAweGNmZWFlYTI1LAorCTB4Y2E2NTY1YWYsIDB4ZjQ3YTdhOGUsIDB4NDdhZWFlZTksIDB4MTAwODA4MTgsCisJMHg2ZmJhYmFkNSwgMHhmMDc4Nzg4OCwgMHg0YTI1MjU2ZiwgMHg1YzJlMmU3MiwKKwkweDM4MWMxYzI0LCAweDU3YTZhNmYxLCAweDczYjRiNGM3LCAweDk3YzZjNjUxLAorCTB4Y2JlOGU4MjMsIDB4YTFkZGRkN2MsIDB4ZTg3NDc0OWMsIDB4M2UxZjFmMjEsCisJMHg5NjRiNGJkZCwgMHg2MWJkYmRkYywgMHgwZDhiOGI4NiwgMHgwZjhhOGE4NSwKKwkweGUwNzA3MDkwLCAweDdjM2UzZTQyLCAweDcxYjViNWM0LCAweGNjNjY2NmFhLAorCTB4OTA0ODQ4ZDgsIDB4MDYwMzAzMDUsIDB4ZjdmNmY2MDEsIDB4MWMwZTBlMTIsCisJMHhjMjYxNjFhMywgMHg2YTM1MzU1ZiwgMHhhZTU3NTdmOSwgMHg2OWI5YjlkMCwKKwkweDE3ODY4NjkxLCAweDk5YzFjMTU4LCAweDNhMWQxZDI3LCAweDI3OWU5ZWI5LAorCTB4ZDllMWUxMzgsIDB4ZWJmOGY4MTMsIDB4MmI5ODk4YjMsIDB4MjIxMTExMzMsCisJMHhkMjY5NjliYiwgMHhhOWQ5ZDk3MCwgMHgwNzhlOGU4OSwgMHgzMzk0OTRhNywKKwkweDJkOWI5YmI2LCAweDNjMWUxZTIyLCAweDE1ODc4NzkyLCAweGM5ZTllOTIwLAorCTB4ODdjZWNlNDksIDB4YWE1NTU1ZmYsIDB4NTAyODI4NzgsIDB4YTVkZmRmN2EsCisJMHgwMzhjOGM4ZiwgMHg1OWExYTFmOCwgMHgwOTg5ODk4MCwgMHgxYTBkMGQxNywKKwkweDY1YmZiZmRhLCAweGQ3ZTZlNjMxLCAweDg0NDI0MmM2LCAweGQwNjg2OGI4LAorCTB4ODI0MTQxYzMsIDB4Mjk5OTk5YjAsIDB4NWEyZDJkNzcsIDB4MWUwZjBmMTEsCisJMHg3YmIwYjBjYiwgMHhhODU0NTRmYywgMHg2ZGJiYmJkNiwgMHgyYzE2MTYzYSk7CiskY29kZS49PDxfX187CisuYnl0ZQkweDYzLCAweDdjLCAweDc3LCAweDdiLCAweGYyLCAweDZiLCAweDZmLCAweGM1CisuYnl0ZQkweDMwLCAweDAxLCAweDY3LCAweDJiLCAweGZlLCAweGQ3LCAweGFiLCAweDc2CisuYnl0ZQkweGNhLCAweDgyLCAweGM5LCAweDdkLCAweGZhLCAweDU5LCAweDQ3LCAweGYwCisuYnl0ZQkweGFkLCAweGQ0LCAweGEyLCAweGFmLCAweDljLCAweGE0LCAweDcyLCAweGMwCisuYnl0ZQkweGI3LCAweGZkLCAweDkzLCAweDI2LCAweDM2LCAweDNmLCAweGY3LCAweGNjCisuYnl0ZQkweDM0LCAweGE1LCAweGU1LCAweGYxLCAweDcxLCAweGQ4LCAweDMxLCAweDE1CisuYnl0ZQkweDA0LCAweGM3LCAweDIzLCAweGMzLCAweDE4LCAweDk2LCAweDA1LCAweDlhCisuYnl0ZQkweDA3LCAweDEyLCAweDgwLCAweGUyLCAweGViLCAweDI3LCAweGIyLCAweDc1CisuYnl0ZQkweDA5LCAweDgzLCAweDJjLCAweDFhLCAweDFiLCAweDZlLCAweDVhLCAweGEwCisuYnl0ZQkweDUyLCAweDNiLCAweGQ2LCAweGIzLCAweDI5LCAweGUzLCAweDJmLCAweDg0CisuYnl0ZQkweDUzLCAweGQxLCAweDAwLCAweGVkLCAweDIwLCAweGZjLCAweGIxLCAweDViCisuYnl0ZQkweDZhLCAweGNiLCAweGJlLCAweDM5LCAweDRhLCAweDRjLCAweDU4LCAweGNmCisuYnl0ZQkweGQwLCAweGVmLCAweGFhLCAweGZiLCAweDQzLCAweDRkLCAweDMzLCAweDg1CisuYnl0ZQkweDQ1LCAweGY5LCAweDAyLCAweDdmLCAweDUwLCAweDNjLCAweDlmLCAweGE4CisuYnl0ZQkweDUxLCAweGEzLCAweDQwLCAweDhmLCAweDkyLCAweDlkLCAweDM4LCAweGY1CisuYnl0ZQkweGJjLCAweGI2LCAweGRhLCAweDIxLCAweDEwLCAweGZmLCAweGYzLCAweGQyCisuYnl0ZQkweGNkLCAweDBjLCAweDEzLCAweGVjLCAweDVmLCAweDk3LCAweDQ0LCAweDE3CisuYnl0ZQkweGM0LCAweGE3LCAweDdlLCAweDNkLCAweDY0LCAweDVkLCAweDE5LCAweDczCisuYnl0ZQkweDYwLCAweDgxLCAweDRmLCAweGRjLCAweDIyLCAweDJhLCAweDkwLCAweDg4CisuYnl0ZQkweDQ2LCAweGVlLCAweGI4LCAweDE0LCAweGRlLCAweDVlLCAweDBiLCAweGRiCisuYnl0ZQkweGUwLCAweDMyLCAweDNhLCAweDBhLCAweDQ5LCAweDA2LCAweDI0LCAweDVjCisuYnl0ZQkweGMyLCAweGQzLCAweGFjLCAweDYyLCAweDkxLCAweDk1LCAweGU0LCAweDc5CisuYnl0ZQkweGU3LCAweGM4LCAweDM3LCAweDZkLCAweDhkLCAweGQ1LCAweDRlLCAweGE5CisuYnl0ZQkweDZjLCAweDU2LCAweGY0LCAweGVhLCAweDY1LCAweDdhLCAweGFlLCAweDA4CisuYnl0ZQkweGJhLCAweDc4LCAweDI1LCAweDJlLCAweDFjLCAweGE2LCAweGI0LCAweGM2CisuYnl0ZQkweGU4LCAweGRkLCAweDc0LCAweDFmLCAweDRiLCAweGJkLCAweDhiLCAweDhhCisuYnl0ZQkweDcwLCAweDNlLCAweGI1LCAweDY2LCAweDQ4LCAweDAzLCAweGY2LCAweDBlCisuYnl0ZQkweDYxLCAweDM1LCAweDU3LCAweGI5LCAweDg2LCAweGMxLCAweDFkLCAweDllCisuYnl0ZQkweGUxLCAweGY4LCAweDk4LCAweDExLCAweDY5LCAweGQ5LCAweDhlLCAweDk0CisuYnl0ZQkweDliLCAweDFlLCAweDg3LCAweGU5LCAweGNlLCAweDU1LCAweDI4LCAweGRmCisuYnl0ZQkweDhjLCAweGExLCAweDg5LCAweDBkLCAweGJmLCAweGU2LCAweDQyLCAweDY4CisuYnl0ZQkweDQxLCAweDk5LCAweDJkLCAweDBmLCAweGIwLCAweDU0LCAweGJiLCAweDE2CitfX18KKyZfZGF0YV93b3JkKAorCTB4NTFmNGE3NTAsIDB4N2U0MTY1NTMsIDB4MWExN2E0YzMsIDB4M2EyNzVlOTYsCisJMHgzYmFiNmJjYiwgMHgxZjlkNDVmMSwgMHhhY2ZhNThhYiwgMHg0YmUzMDM5MywKKwkweDIwMzBmYTU1LCAweGFkNzY2ZGY2LCAweDg4Y2M3NjkxLCAweGY1MDI0YzI1LAorCTB4NGZlNWQ3ZmMsIDB4YzUyYWNiZDcsIDB4MjYzNTQ0ODAsIDB4YjU2MmEzOGYsCisJMHhkZWIxNWE0OSwgMHgyNWJhMWI2NywgMHg0NWVhMGU5OCwgMHg1ZGZlYzBlMSwKKwkweGMzMmY3NTAyLCAweDgxNGNmMDEyLCAweDhkNDY5N2EzLCAweDZiZDNmOWM2LAorCTB4MDM4ZjVmZTcsIDB4MTU5MjljOTUsIDB4YmY2ZDdhZWIsIDB4OTU1MjU5ZGEsCisJMHhkNGJlODMyZCwgMHg1ODc0MjFkMywgMHg0OWUwNjkyOSwgMHg4ZWM5Yzg0NCwKKwkweDc1YzI4OTZhLCAweGY0OGU3OTc4LCAweDk5NTgzZTZiLCAweDI3Yjk3MWRkLAorCTB4YmVlMTRmYjYsIDB4ZjA4OGFkMTcsIDB4YzkyMGFjNjYsIDB4N2RjZTNhYjQsCisJMHg2M2RmNGExOCwgMHhlNTFhMzE4MiwgMHg5NzUxMzM2MCwgMHg2MjUzN2Y0NSwKKwkweGIxNjQ3N2UwLCAweGJiNmJhZTg0LCAweGZlODFhMDFjLCAweGY5MDgyYjk0LAorCTB4NzA0ODY4NTgsIDB4OGY0NWZkMTksIDB4OTRkZTZjODcsIDB4NTI3YmY4YjcsCisJMHhhYjczZDMyMywgMHg3MjRiMDJlMiwgMHhlMzFmOGY1NywgMHg2NjU1YWIyYSwKKwkweGIyZWIyODA3LCAweDJmYjVjMjAzLCAweDg2YzU3YjlhLCAweGQzMzcwOGE1LAorCTB4MzAyODg3ZjIsIDB4MjNiZmE1YjIsIDB4MDIwMzZhYmEsIDB4ZWQxNjgyNWMsCisJMHg4YWNmMWMyYiwgMHhhNzc5YjQ5MiwgMHhmMzA3ZjJmMCwgMHg0ZTY5ZTJhMSwKKwkweDY1ZGFmNGNkLCAweDA2MDViZWQ1LCAweGQxMzQ2MjFmLCAweGM0YTZmZThhLAorCTB4MzQyZTUzOWQsIDB4YTJmMzU1YTAsIDB4MDU4YWUxMzIsIDB4YTRmNmViNzUsCisJMHgwYjgzZWMzOSwgMHg0MDYwZWZhYSwgMHg1ZTcxOWYwNiwgMHhiZDZlMTA1MSwKKwkweDNlMjE4YWY5LCAweDk2ZGQwNjNkLCAweGRkM2UwNWFlLCAweDRkZTZiZDQ2LAorCTB4OTE1NDhkYjUsIDB4NzFjNDVkMDUsIDB4MDQwNmQ0NmYsIDB4NjA1MDE1ZmYsCisJMHgxOTk4ZmIyNCwgMHhkNmJkZTk5NywgMHg4OTQwNDNjYywgMHg2N2Q5OWU3NywKKwkweGIwZTg0MmJkLCAweDA3ODk4Yjg4LCAweGU3MTk1YjM4LCAweDc5YzhlZWRiLAorCTB4YTE3YzBhNDcsIDB4N2M0MjBmZTksIDB4Zjg4NDFlYzksIDB4MDAwMDAwMDAsCisJMHgwOTgwODY4MywgMHgzMjJiZWQ0OCwgMHgxZTExNzBhYywgMHg2YzVhNzI0ZSwKKwkweGZkMGVmZmZiLCAweDBmODUzODU2LCAweDNkYWVkNTFlLCAweDM2MmQzOTI3LAorCTB4MGEwZmQ5NjQsIDB4Njg1Y2E2MjEsIDB4OWI1YjU0ZDEsIDB4MjQzNjJlM2EsCisJMHgwYzBhNjdiMSwgMHg5MzU3ZTcwZiwgMHhiNGVlOTZkMiwgMHgxYjliOTE5ZSwKKwkweDgwYzBjNTRmLCAweDYxZGMyMGEyLCAweDVhNzc0YjY5LCAweDFjMTIxYTE2LAorCTB4ZTI5M2JhMGEsIDB4YzBhMDJhZTUsIDB4M2MyMmUwNDMsIDB4MTIxYjE3MWQsCisJMHgwZTA5MGQwYiwgMHhmMjhiYzdhZCwgMHgyZGI2YThiOSwgMHgxNDFlYTljOCwKKwkweDU3ZjExOTg1LCAweGFmNzUwNzRjLCAweGVlOTlkZGJiLCAweGEzN2Y2MGZkLAorCTB4ZjcwMTI2OWYsIDB4NWM3MmY1YmMsIDB4NDQ2NjNiYzUsIDB4NWJmYjdlMzQsCisJMHg4YjQzMjk3NiwgMHhjYjIzYzZkYywgMHhiNmVkZmM2OCwgMHhiOGU0ZjE2MywKKwkweGQ3MzFkY2NhLCAweDQyNjM4NTEwLCAweDEzOTcyMjQwLCAweDg0YzYxMTIwLAorCTB4ODU0YTI0N2QsIDB4ZDJiYjNkZjgsIDB4YWVmOTMyMTEsIDB4YzcyOWExNmQsCisJMHgxZDllMmY0YiwgMHhkY2IyMzBmMywgMHgwZDg2NTJlYywgMHg3N2MxZTNkMCwKKwkweDJiYjMxNjZjLCAweGE5NzBiOTk5LCAweDExOTQ0OGZhLCAweDQ3ZTk2NDIyLAorCTB4YThmYzhjYzQsIDB4YTBmMDNmMWEsIDB4NTY3ZDJjZDgsIDB4MjIzMzkwZWYsCisJMHg4NzQ5NGVjNywgMHhkOTM4ZDFjMSwgMHg4Y2NhYTJmZSwgMHg5OGQ0MGIzNiwKKwkweGE2ZjU4MWNmLCAweGE1N2FkZTI4LCAweGRhYjc4ZTI2LCAweDNmYWRiZmE0LAorCTB4MmMzYTlkZTQsIDB4NTA3ODkyMGQsIDB4NmE1ZmNjOWIsIDB4NTQ3ZTQ2NjIsCisJMHhmNjhkMTNjMiwgMHg5MGQ4YjhlOCwgMHgyZTM5Zjc1ZSwgMHg4MmMzYWZmNSwKKwkweDlmNWQ4MGJlLCAweDY5ZDA5MzdjLCAweDZmZDUyZGE5LCAweGNmMjUxMmIzLAorCTB4YzhhYzk5M2IsIDB4MTAxODdkYTcsIDB4ZTg5YzYzNmUsIDB4ZGIzYmJiN2IsCisJMHhjZDI2NzgwOSwgMHg2ZTU5MThmNCwgMHhlYzlhYjcwMSwgMHg4MzRmOWFhOCwKKwkweGU2OTU2ZTY1LCAweGFhZmZlNjdlLCAweDIxYmNjZjA4LCAweGVmMTVlOGU2LAorCTB4YmFlNzliZDksIDB4NGE2ZjM2Y2UsIDB4ZWE5ZjA5ZDQsIDB4MjliMDdjZDYsCisJMHgzMWE0YjJhZiwgMHgyYTNmMjMzMSwgMHhjNmE1OTQzMCwgMHgzNWEyNjZjMCwKKwkweDc0NGViYzM3LCAweGZjODJjYWE2LCAweGUwOTBkMGIwLCAweDMzYTdkODE1LAorCTB4ZjEwNDk4NGEsIDB4NDFlY2RhZjcsIDB4N2ZjZDUwMGUsIDB4MTc5MWY2MmYsCisJMHg3NjRkZDY4ZCwgMHg0M2VmYjA0ZCwgMHhjY2FhNGQ1NCwgMHhlNDk2MDRkZiwKKwkweDllZDFiNWUzLCAweDRjNmE4ODFiLCAweGMxMmMxZmI4LCAweDQ2NjU1MTdmLAorCTB4OWQ1ZWVhMDQsIDB4MDE4YzM1NWQsIDB4ZmE4Nzc0NzMsIDB4ZmIwYjQxMmUsCisJMHhiMzY3MWQ1YSwgMHg5MmRiZDI1MiwgMHhlOTEwNTYzMywgMHg2ZGQ2NDcxMywKKwkweDlhZDc2MThjLCAweDM3YTEwYzdhLCAweDU5ZjgxNDhlLCAweGViMTMzYzg5LAorCTB4Y2VhOTI3ZWUsIDB4Yjc2MWM5MzUsIDB4ZTExY2U1ZWQsIDB4N2E0N2IxM2MsCisJMHg5Y2QyZGY1OSwgMHg1NWYyNzMzZiwgMHgxODE0Y2U3OSwgMHg3M2M3MzdiZiwKKwkweDUzZjdjZGVhLCAweDVmZmRhYTViLCAweGRmM2Q2ZjE0LCAweDc4NDRkYjg2LAorCTB4Y2FhZmYzODEsIDB4Yjk2OGM0M2UsIDB4MzgyNDM0MmMsIDB4YzJhMzQwNWYsCisJMHgxNjFkYzM3MiwgMHhiY2UyMjUwYywgMHgyODNjNDk4YiwgMHhmZjBkOTU0MSwKKwkweDM5YTgwMTcxLCAweDA4MGNiM2RlLCAweGQ4YjRlNDljLCAweDY0NTZjMTkwLAorCTB4N2JjYjg0NjEsIDB4ZDUzMmI2NzAsIDB4NDg2YzVjNzQsIDB4ZDBiODU3NDIpOworJGNvZGUuPTw8X19fOworLmJ5dGUJMHg1MiwgMHgwOSwgMHg2YSwgMHhkNSwgMHgzMCwgMHgzNiwgMHhhNSwgMHgzOAorLmJ5dGUJMHhiZiwgMHg0MCwgMHhhMywgMHg5ZSwgMHg4MSwgMHhmMywgMHhkNywgMHhmYgorLmJ5dGUJMHg3YywgMHhlMywgMHgzOSwgMHg4MiwgMHg5YiwgMHgyZiwgMHhmZiwgMHg4NworLmJ5dGUJMHgzNCwgMHg4ZSwgMHg0MywgMHg0NCwgMHhjNCwgMHhkZSwgMHhlOSwgMHhjYgorLmJ5dGUJMHg1NCwgMHg3YiwgMHg5NCwgMHgzMiwgMHhhNiwgMHhjMiwgMHgyMywgMHgzZAorLmJ5dGUJMHhlZSwgMHg0YywgMHg5NSwgMHgwYiwgMHg0MiwgMHhmYSwgMHhjMywgMHg0ZQorLmJ5dGUJMHgwOCwgMHgyZSwgMHhhMSwgMHg2NiwgMHgyOCwgMHhkOSwgMHgyNCwgMHhiMgorLmJ5dGUJMHg3NiwgMHg1YiwgMHhhMiwgMHg0OSwgMHg2ZCwgMHg4YiwgMHhkMSwgMHgyNQorLmJ5dGUJMHg3MiwgMHhmOCwgMHhmNiwgMHg2NCwgMHg4NiwgMHg2OCwgMHg5OCwgMHgxNgorLmJ5dGUJMHhkNCwgMHhhNCwgMHg1YywgMHhjYywgMHg1ZCwgMHg2NSwgMHhiNiwgMHg5MgorLmJ5dGUJMHg2YywgMHg3MCwgMHg0OCwgMHg1MCwgMHhmZCwgMHhlZCwgMHhiOSwgMHhkYQorLmJ5dGUJMHg1ZSwgMHgxNSwgMHg0NiwgMHg1NywgMHhhNywgMHg4ZCwgMHg5ZCwgMHg4NAorLmJ5dGUJMHg5MCwgMHhkOCwgMHhhYiwgMHgwMCwgMHg4YywgMHhiYywgMHhkMywgMHgwYQorLmJ5dGUJMHhmNywgMHhlNCwgMHg1OCwgMHgwNSwgMHhiOCwgMHhiMywgMHg0NSwgMHgwNgorLmJ5dGUJMHhkMCwgMHgyYywgMHgxZSwgMHg4ZiwgMHhjYSwgMHgzZiwgMHgwZiwgMHgwMgorLmJ5dGUJMHhjMSwgMHhhZiwgMHhiZCwgMHgwMywgMHgwMSwgMHgxMywgMHg4YSwgMHg2YgorLmJ5dGUJMHgzYSwgMHg5MSwgMHgxMSwgMHg0MSwgMHg0ZiwgMHg2NywgMHhkYywgMHhlYQorLmJ5dGUJMHg5NywgMHhmMiwgMHhjZiwgMHhjZSwgMHhmMCwgMHhiNCwgMHhlNiwgMHg3MworLmJ5dGUJMHg5NiwgMHhhYywgMHg3NCwgMHgyMiwgMHhlNywgMHhhZCwgMHgzNSwgMHg4NQorLmJ5dGUJMHhlMiwgMHhmOSwgMHgzNywgMHhlOCwgMHgxYywgMHg3NSwgMHhkZiwgMHg2ZQorLmJ5dGUJMHg0NywgMHhmMSwgMHgxYSwgMHg3MSwgMHgxZCwgMHgyOSwgMHhjNSwgMHg4OQorLmJ5dGUJMHg2ZiwgMHhiNywgMHg2MiwgMHgwZSwgMHhhYSwgMHgxOCwgMHhiZSwgMHgxYgorLmJ5dGUJMHhmYywgMHg1NiwgMHgzZSwgMHg0YiwgMHhjNiwgMHhkMiwgMHg3OSwgMHgyMAorLmJ5dGUJMHg5YSwgMHhkYiwgMHhjMCwgMHhmZSwgMHg3OCwgMHhjZCwgMHg1YSwgMHhmNAorLmJ5dGUJMHgxZiwgMHhkZCwgMHhhOCwgMHgzMywgMHg4OCwgMHgwNywgMHhjNywgMHgzMQorLmJ5dGUJMHhiMSwgMHgxMiwgMHgxMCwgMHg1OSwgMHgyNywgMHg4MCwgMHhlYywgMHg1ZgorLmJ5dGUJMHg2MCwgMHg1MSwgMHg3ZiwgMHhhOSwgMHgxOSwgMHhiNSwgMHg0YSwgMHgwZAorLmJ5dGUJMHgyZCwgMHhlNSwgMHg3YSwgMHg5ZiwgMHg5MywgMHhjOSwgMHg5YywgMHhlZgorLmJ5dGUJMHhhMCwgMHhlMCwgMHgzYiwgMHg0ZCwgMHhhZSwgMHgyYSwgMHhmNSwgMHhiMAorLmJ5dGUJMHhjOCwgMHhlYiwgMHhiYiwgMHgzYywgMHg4MywgMHg1MywgMHg5OSwgMHg2MQorLmJ5dGUJMHgxNywgMHgyYiwgMHgwNCwgMHg3ZSwgMHhiYSwgMHg3NywgMHhkNiwgMHgyNgorLmJ5dGUJMHhlMSwgMHg2OSwgMHgxNCwgMHg2MywgMHg1NSwgMHgyMSwgMHgwYywgMHg3ZAorCisKKy5nbG9ibAkuQUVTX2VuY3J5cHQKKy5hbGlnbgk3CisuQUVTX2VuY3J5cHQ6CisJbWZscglyMAorCSRTVFUJJHNwLC0kRlJBTUUoJHNwKQorCisJJFBVU0gJcjAsYCRGUkFNRS0kU0laRV9UKjIxYCgkc3ApCisJJFBVU0gJJHRvYyxgJEZSQU1FLSRTSVpFX1QqMjBgKCRzcCkKKwkkUFVTSAlyMTMsYCRGUkFNRS0kU0laRV9UKjE5YCgkc3ApCisJJFBVU0gJcjE0LGAkRlJBTUUtJFNJWkVfVCoxOGAoJHNwKQorCSRQVVNICXIxNSxgJEZSQU1FLSRTSVpFX1QqMTdgKCRzcCkKKwkkUFVTSAlyMTYsYCRGUkFNRS0kU0laRV9UKjE2YCgkc3ApCisJJFBVU0gJcjE3LGAkRlJBTUUtJFNJWkVfVCoxNWAoJHNwKQorCSRQVVNICXIxOCxgJEZSQU1FLSRTSVpFX1QqMTRgKCRzcCkKKwkkUFVTSAlyMTksYCRGUkFNRS0kU0laRV9UKjEzYCgkc3ApCisJJFBVU0gJcjIwLGAkRlJBTUUtJFNJWkVfVCoxMmAoJHNwKQorCSRQVVNICXIyMSxgJEZSQU1FLSRTSVpFX1QqMTFgKCRzcCkKKwkkUFVTSAlyMjIsYCRGUkFNRS0kU0laRV9UKjEwYCgkc3ApCisJJFBVU0gJcjIzLGAkRlJBTUUtJFNJWkVfVCo5YCgkc3ApCisJJFBVU0gJcjI0LGAkRlJBTUUtJFNJWkVfVCo4YCgkc3ApCisJJFBVU0gJcjI1LGAkRlJBTUUtJFNJWkVfVCo3YCgkc3ApCisJJFBVU0gJcjI2LGAkRlJBTUUtJFNJWkVfVCo2YCgkc3ApCisJJFBVU0gJcjI3LGAkRlJBTUUtJFNJWkVfVCo1YCgkc3ApCisJJFBVU0gJcjI4LGAkRlJBTUUtJFNJWkVfVCo0YCgkc3ApCisJJFBVU0gJcjI5LGAkRlJBTUUtJFNJWkVfVCozYCgkc3ApCisJJFBVU0gJcjMwLGAkRlJBTUUtJFNJWkVfVCoyYCgkc3ApCisJJFBVU0gJcjMxLGAkRlJBTUUtJFNJWkVfVCoxYCgkc3ApCisKKwlsd3oJJHMwLDAoJGlucCkKKwlsd3oJJHMxLDQoJGlucCkKKwlsd3oJJHMyLDgoJGlucCkKKwlsd3oJJHMzLDEyKCRpbnApCisJYmwJTEFFU19UZQorCWJsCUxwcGNfQUVTX2VuY3J5cHRfY29tcGFjdAorCXN0dwkkczAsMCgkb3V0KQorCXN0dwkkczEsNCgkb3V0KQorCXN0dwkkczIsOCgkb3V0KQorCXN0dwkkczMsMTIoJG91dCkKKworCSRQT1AJcjAsYCRGUkFNRS0kU0laRV9UKjIxYCgkc3ApCisJJFBPUAkkdG9jLGAkRlJBTUUtJFNJWkVfVCoyMGAoJHNwKQorCSRQT1AJcjEzLGAkRlJBTUUtJFNJWkVfVCoxOWAoJHNwKQorCSRQT1AJcjE0LGAkRlJBTUUtJFNJWkVfVCoxOGAoJHNwKQorCSRQT1AJcjE1LGAkRlJBTUUtJFNJWkVfVCoxN2AoJHNwKQorCSRQT1AJcjE2LGAkRlJBTUUtJFNJWkVfVCoxNmAoJHNwKQorCSRQT1AJcjE3LGAkRlJBTUUtJFNJWkVfVCoxNWAoJHNwKQorCSRQT1AJcjE4LGAkRlJBTUUtJFNJWkVfVCoxNGAoJHNwKQorCSRQT1AJcjE5LGAkRlJBTUUtJFNJWkVfVCoxM2AoJHNwKQorCSRQT1AJcjIwLGAkRlJBTUUtJFNJWkVfVCoxMmAoJHNwKQorCSRQT1AJcjIxLGAkRlJBTUUtJFNJWkVfVCoxMWAoJHNwKQorCSRQT1AJcjIyLGAkRlJBTUUtJFNJWkVfVCoxMGAoJHNwKQorCSRQT1AJcjIzLGAkRlJBTUUtJFNJWkVfVCo5YCgkc3ApCisJJFBPUAlyMjQsYCRGUkFNRS0kU0laRV9UKjhgKCRzcCkKKwkkUE9QCXIyNSxgJEZSQU1FLSRTSVpFX1QqN2AoJHNwKQorCSRQT1AJcjI2LGAkRlJBTUUtJFNJWkVfVCo2YCgkc3ApCisJJFBPUAlyMjcsYCRGUkFNRS0kU0laRV9UKjVgKCRzcCkKKwkkUE9QCXIyOCxgJEZSQU1FLSRTSVpFX1QqNGAoJHNwKQorCSRQT1AJcjI5LGAkRlJBTUUtJFNJWkVfVCozYCgkc3ApCisJJFBPUAlyMzAsYCRGUkFNRS0kU0laRV9UKjJgKCRzcCkKKwkkUE9QCXIzMSxgJEZSQU1FLSRTSVpFX1QqMWAoJHNwKQorCW10bHIJcjAKKwlhZGRpCSRzcCwkc3AsJEZSQU1FCisJYmxyCisKKy5hbGlnbgk0CitMcHBjX0FFU19lbmNyeXB0OgorCWx3egkkYWNjMDAsMjQwKCRrZXkpCisJbHd6CSR0MCwwKCRrZXkpCisJbHd6CSR0MSw0KCRrZXkpCisJbHd6CSR0Miw4KCRrZXkpCisJbHd6CSR0MywxMigka2V5KQorCWFkZGkJJFRibDEsJFRibDAsMworCWFkZGkJJFRibDIsJFRibDAsMgorCWFkZGkJJFRibDMsJFRibDAsMQorCWFkZGkJJGFjYzAwLCRhY2MwMCwtMQorCWFkZGkJJGtleSwka2V5LDE2CisJeG9yCSRzMCwkczAsJHQwCisJeG9yCSRzMSwkczEsJHQxCisJeG9yCSRzMiwkczIsJHQyCisJeG9yCSRzMywkczMsJHQzCisJbXRjdHIJJGFjYzAwCisuYWxpZ24JNAorTGVuY19sb29wOgorCXJsd2lubQkkYWNjMDAsJHMwLGAzMi0yNCszYCwyMSwyOAorCXJsd2lubQkkYWNjMDEsJHMxLGAzMi0yNCszYCwyMSwyOAorCWx3egkkdDAsMCgka2V5KQorCWx3egkkdDEsNCgka2V5KQorCXJsd2lubQkkYWNjMDIsJHMyLGAzMi0yNCszYCwyMSwyOAorCXJsd2lubQkkYWNjMDMsJHMzLGAzMi0yNCszYCwyMSwyOAorCWx3egkkdDIsOCgka2V5KQorCWx3egkkdDMsMTIoJGtleSkKKwlybHdpbm0JJGFjYzA0LCRzMSxgMzItMTYrM2AsMjEsMjgKKwlybHdpbm0JJGFjYzA1LCRzMixgMzItMTYrM2AsMjEsMjgKKwlsd3p4CSRhY2MwMCwkVGJsMCwkYWNjMDAKKwlsd3p4CSRhY2MwMSwkVGJsMCwkYWNjMDEKKwlybHdpbm0JJGFjYzA2LCRzMyxgMzItMTYrM2AsMjEsMjgKKwlybHdpbm0JJGFjYzA3LCRzMCxgMzItMTYrM2AsMjEsMjgKKwlsd3p4CSRhY2MwMiwkVGJsMCwkYWNjMDIKKwlsd3p4CSRhY2MwMywkVGJsMCwkYWNjMDMKKwlybHdpbm0JJGFjYzA4LCRzMixgMzItOCszYCwyMSwyOAorCXJsd2lubQkkYWNjMDksJHMzLGAzMi04KzNgLDIxLDI4CisJbHd6eAkkYWNjMDQsJFRibDEsJGFjYzA0CisJbHd6eAkkYWNjMDUsJFRibDEsJGFjYzA1CisJcmx3aW5tCSRhY2MxMCwkczAsYDMyLTgrM2AsMjEsMjgKKwlybHdpbm0JJGFjYzExLCRzMSxgMzItOCszYCwyMSwyOAorCWx3engJJGFjYzA2LCRUYmwxLCRhY2MwNgorCWx3engJJGFjYzA3LCRUYmwxLCRhY2MwNworCXJsd2lubQkkYWNjMTIsJHMzLGAwKzNgLDIxLDI4CisJcmx3aW5tCSRhY2MxMywkczAsYDArM2AsMjEsMjgKKwlsd3p4CSRhY2MwOCwkVGJsMiwkYWNjMDgKKwlsd3p4CSRhY2MwOSwkVGJsMiwkYWNjMDkKKwlybHdpbm0JJGFjYzE0LCRzMSxgMCszYCwyMSwyOAorCXJsd2lubQkkYWNjMTUsJHMyLGAwKzNgLDIxLDI4CisJbHd6eAkkYWNjMTAsJFRibDIsJGFjYzEwCisJbHd6eAkkYWNjMTEsJFRibDIsJGFjYzExCisJeG9yCSR0MCwkdDAsJGFjYzAwCisJeG9yCSR0MSwkdDEsJGFjYzAxCisJbHd6eAkkYWNjMTIsJFRibDMsJGFjYzEyCisJbHd6eAkkYWNjMTMsJFRibDMsJGFjYzEzCisJeG9yCSR0MiwkdDIsJGFjYzAyCisJeG9yCSR0MywkdDMsJGFjYzAzCisJbHd6eAkkYWNjMTQsJFRibDMsJGFjYzE0CisJbHd6eAkkYWNjMTUsJFRibDMsJGFjYzE1CisJeG9yCSR0MCwkdDAsJGFjYzA0CisJeG9yCSR0MSwkdDEsJGFjYzA1CisJeG9yCSR0MiwkdDIsJGFjYzA2CisJeG9yCSR0MywkdDMsJGFjYzA3CisJeG9yCSR0MCwkdDAsJGFjYzA4CisJeG9yCSR0MSwkdDEsJGFjYzA5CisJeG9yCSR0MiwkdDIsJGFjYzEwCisJeG9yCSR0MywkdDMsJGFjYzExCisJeG9yCSRzMCwkdDAsJGFjYzEyCisJeG9yCSRzMSwkdDEsJGFjYzEzCisJeG9yCSRzMiwkdDIsJGFjYzE0CisJeG9yCSRzMywkdDMsJGFjYzE1CisJYWRkaQkka2V5LCRrZXksMTYKKwliZG56LQlMZW5jX2xvb3AKKworCWFkZGkJJFRibDIsJFRibDAsMjA0OAorCW5vcAorCWx3egkkYWNjMDgsYDIwNDgrMGAoJFRibDApCSEgcHJlZmV0Y2ggVGU0CisJbHd6CSRhY2MwOSxgMjA0OCszMmAoJFRibDApCisJbHd6CSRhY2MxMCxgMjA0OCs2NGAoJFRibDApCisJbHd6CSRhY2MxMSxgMjA0OCs5NmAoJFRibDApCisJbHd6CSRhY2MwOCxgMjA0OCsxMjhgKCRUYmwwKQorCWx3egkkYWNjMDksYDIwNDgrMTYwYCgkVGJsMCkKKwlsd3oJJGFjYzEwLGAyMDQ4KzE5MmAoJFRibDApCisJbHd6CSRhY2MxMSxgMjA0OCsyMjRgKCRUYmwwKQorCXJsd2lubQkkYWNjMDAsJHMwLGAzMi0yNGAsMjQsMzEKKwlybHdpbm0JJGFjYzAxLCRzMSxgMzItMjRgLDI0LDMxCisJbHd6CSR0MCwwKCRrZXkpCisJbHd6CSR0MSw0KCRrZXkpCisJcmx3aW5tCSRhY2MwMiwkczIsYDMyLTI0YCwyNCwzMQorCXJsd2lubQkkYWNjMDMsJHMzLGAzMi0yNGAsMjQsMzEKKwlsd3oJJHQyLDgoJGtleSkKKwlsd3oJJHQzLDEyKCRrZXkpCisJcmx3aW5tCSRhY2MwNCwkczEsYDMyLTE2YCwyNCwzMQorCXJsd2lubQkkYWNjMDUsJHMyLGAzMi0xNmAsMjQsMzEKKwlsYnp4CSRhY2MwMCwkVGJsMiwkYWNjMDAKKwlsYnp4CSRhY2MwMSwkVGJsMiwkYWNjMDEKKwlybHdpbm0JJGFjYzA2LCRzMyxgMzItMTZgLDI0LDMxCisJcmx3aW5tCSRhY2MwNywkczAsYDMyLTE2YCwyNCwzMQorCWxiengJJGFjYzAyLCRUYmwyLCRhY2MwMgorCWxiengJJGFjYzAzLCRUYmwyLCRhY2MwMworCXJsd2lubQkkYWNjMDgsJHMyLGAzMi04YCwyNCwzMQorCXJsd2lubQkkYWNjMDksJHMzLGAzMi04YCwyNCwzMQorCWxiengJJGFjYzA0LCRUYmwyLCRhY2MwNAorCWxiengJJGFjYzA1LCRUYmwyLCRhY2MwNQorCXJsd2lubQkkYWNjMTAsJHMwLGAzMi04YCwyNCwzMQorCXJsd2lubQkkYWNjMTEsJHMxLGAzMi04YCwyNCwzMQorCWxiengJJGFjYzA2LCRUYmwyLCRhY2MwNgorCWxiengJJGFjYzA3LCRUYmwyLCRhY2MwNworCXJsd2lubQkkYWNjMTIsJHMzLGAwYCwyNCwzMQorCXJsd2lubQkkYWNjMTMsJHMwLGAwYCwyNCwzMQorCWxiengJJGFjYzA4LCRUYmwyLCRhY2MwOAorCWxiengJJGFjYzA5LCRUYmwyLCRhY2MwOQorCXJsd2lubQkkYWNjMTQsJHMxLGAwYCwyNCwzMQorCXJsd2lubQkkYWNjMTUsJHMyLGAwYCwyNCwzMQorCWxiengJJGFjYzEwLCRUYmwyLCRhY2MxMAorCWxiengJJGFjYzExLCRUYmwyLCRhY2MxMQorCXJsd2lubQkkczAsJGFjYzAwLDI0LDAsNworCXJsd2lubQkkczEsJGFjYzAxLDI0LDAsNworCWxiengJJGFjYzEyLCRUYmwyLCRhY2MxMgorCWxiengJJGFjYzEzLCRUYmwyLCRhY2MxMworCXJsd2lubQkkczIsJGFjYzAyLDI0LDAsNworCXJsd2lubQkkczMsJGFjYzAzLDI0LDAsNworCWxiengJJGFjYzE0LCRUYmwyLCRhY2MxNAorCWxiengJJGFjYzE1LCRUYmwyLCRhY2MxNQorCXJsd2ltaQkkczAsJGFjYzA0LDE2LDgsMTUKKwlybHdpbWkJJHMxLCRhY2MwNSwxNiw4LDE1CisJcmx3aW1pCSRzMiwkYWNjMDYsMTYsOCwxNQorCXJsd2ltaQkkczMsJGFjYzA3LDE2LDgsMTUKKwlybHdpbWkJJHMwLCRhY2MwOCw4LDE2LDIzCisJcmx3aW1pCSRzMSwkYWNjMDksOCwxNiwyMworCXJsd2ltaQkkczIsJGFjYzEwLDgsMTYsMjMKKwlybHdpbWkJJHMzLCRhY2MxMSw4LDE2LDIzCisJb3IJJHMwLCRzMCwkYWNjMTIKKwlvcgkkczEsJHMxLCRhY2MxMworCW9yCSRzMiwkczIsJGFjYzE0CisJb3IJJHMzLCRzMywkYWNjMTUKKwl4b3IJJHMwLCRzMCwkdDAKKwl4b3IJJHMxLCRzMSwkdDEKKwl4b3IJJHMyLCRzMiwkdDIKKwl4b3IJJHMzLCRzMywkdDMKKwlibHIKKworLmFsaWduCTQKK0xwcGNfQUVTX2VuY3J5cHRfY29tcGFjdDoKKwlsd3oJJGFjYzAwLDI0MCgka2V5KQorCWx3egkkdDAsMCgka2V5KQorCWx3egkkdDEsNCgka2V5KQorCWx3egkkdDIsOCgka2V5KQorCWx3egkkdDMsMTIoJGtleSkKKwlhZGRpCSRUYmwxLCRUYmwwLDIwNDgKKwlsaXMJJG1hc2s4MCwweDgwODAKKwlsaXMJJG1hc2sxYiwweDFiMWIKKwlhZGRpCSRrZXksJGtleSwxNgorCW9yaQkkbWFzazgwLCRtYXNrODAsMHg4MDgwCisJb3JpCSRtYXNrMWIsJG1hc2sxYiwweDFiMWIKKwltdGN0cgkkYWNjMDAKKy5hbGlnbgk0CitMZW5jX2NvbXBhY3RfbG9vcDoKKwl4b3IJJHMwLCRzMCwkdDAKKwl4b3IJJHMxLCRzMSwkdDEKKwl4b3IJJHMyLCRzMiwkdDIKKwl4b3IJJHMzLCRzMywkdDMKKwlybHdpbm0JJGFjYzAwLCRzMCxgMzItMjRgLDI0LDMxCisJcmx3aW5tCSRhY2MwMSwkczEsYDMyLTI0YCwyNCwzMQorCXJsd2lubQkkYWNjMDIsJHMyLGAzMi0yNGAsMjQsMzEKKwlybHdpbm0JJGFjYzAzLCRzMyxgMzItMjRgLDI0LDMxCisJbGJ6eAkkYWNjMDAsJFRibDEsJGFjYzAwCisJbGJ6eAkkYWNjMDEsJFRibDEsJGFjYzAxCisJcmx3aW5tCSRhY2MwNCwkczEsYDMyLTE2YCwyNCwzMQorCXJsd2lubQkkYWNjMDUsJHMyLGAzMi0xNmAsMjQsMzEKKwlsYnp4CSRhY2MwMiwkVGJsMSwkYWNjMDIKKwlsYnp4CSRhY2MwMywkVGJsMSwkYWNjMDMKKwlybHdpbm0JJGFjYzA2LCRzMyxgMzItMTZgLDI0LDMxCisJcmx3aW5tCSRhY2MwNywkczAsYDMyLTE2YCwyNCwzMQorCWxiengJJGFjYzA0LCRUYmwxLCRhY2MwNAorCWxiengJJGFjYzA1LCRUYmwxLCRhY2MwNQorCXJsd2lubQkkYWNjMDgsJHMyLGAzMi04YCwyNCwzMQorCXJsd2lubQkkYWNjMDksJHMzLGAzMi04YCwyNCwzMQorCWxiengJJGFjYzA2LCRUYmwxLCRhY2MwNgorCWxiengJJGFjYzA3LCRUYmwxLCRhY2MwNworCXJsd2lubQkkYWNjMTAsJHMwLGAzMi04YCwyNCwzMQorCXJsd2lubQkkYWNjMTEsJHMxLGAzMi04YCwyNCwzMQorCWxiengJJGFjYzA4LCRUYmwxLCRhY2MwOAorCWxiengJJGFjYzA5LCRUYmwxLCRhY2MwOQorCXJsd2lubQkkYWNjMTIsJHMzLGAwYCwyNCwzMQorCXJsd2lubQkkYWNjMTMsJHMwLGAwYCwyNCwzMQorCWxiengJJGFjYzEwLCRUYmwxLCRhY2MxMAorCWxiengJJGFjYzExLCRUYmwxLCRhY2MxMQorCXJsd2lubQkkYWNjMTQsJHMxLGAwYCwyNCwzMQorCXJsd2lubQkkYWNjMTUsJHMyLGAwYCwyNCwzMQorCWxiengJJGFjYzEyLCRUYmwxLCRhY2MxMgorCWxiengJJGFjYzEzLCRUYmwxLCRhY2MxMworCXJsd2lubQkkczAsJGFjYzAwLDI0LDAsNworCXJsd2lubQkkczEsJGFjYzAxLDI0LDAsNworCWxiengJJGFjYzE0LCRUYmwxLCRhY2MxNAorCWxiengJJGFjYzE1LCRUYmwxLCRhY2MxNQorCXJsd2lubQkkczIsJGFjYzAyLDI0LDAsNworCXJsd2lubQkkczMsJGFjYzAzLDI0LDAsNworCXJsd2ltaQkkczAsJGFjYzA0LDE2LDgsMTUKKwlybHdpbWkJJHMxLCRhY2MwNSwxNiw4LDE1CisJcmx3aW1pCSRzMiwkYWNjMDYsMTYsOCwxNQorCXJsd2ltaQkkczMsJGFjYzA3LDE2LDgsMTUKKwlybHdpbWkJJHMwLCRhY2MwOCw4LDE2LDIzCisJcmx3aW1pCSRzMSwkYWNjMDksOCwxNiwyMworCXJsd2ltaQkkczIsJGFjYzEwLDgsMTYsMjMKKwlybHdpbWkJJHMzLCRhY2MxMSw4LDE2LDIzCisJbHd6CSR0MCwwKCRrZXkpCisJbHd6CSR0MSw0KCRrZXkpCisJb3IJJHMwLCRzMCwkYWNjMTIKKwlvcgkkczEsJHMxLCRhY2MxMworCWx3egkkdDIsOCgka2V5KQorCWx3egkkdDMsMTIoJGtleSkKKwlvcgkkczIsJHMyLCRhY2MxNAorCW9yCSRzMywkczMsJGFjYzE1CisKKwlhZGRpCSRrZXksJGtleSwxNgorCWJkeglMZW5jX2NvbXBhY3RfZG9uZQorCisJYW5kCSRhY2MwMCwkczAsJG1hc2s4MAkjIHIxPXIwJjB4ODA4MDgwODAKKwlhbmQJJGFjYzAxLCRzMSwkbWFzazgwCisJYW5kCSRhY2MwMiwkczIsJG1hc2s4MAorCWFuZAkkYWNjMDMsJHMzLCRtYXNrODAKKwlzcndpCSRhY2MwNCwkYWNjMDAsNwkJIyByMT4+NworCXNyd2kJJGFjYzA1LCRhY2MwMSw3CisJc3J3aQkkYWNjMDYsJGFjYzAyLDcKKwlzcndpCSRhY2MwNywkYWNjMDMsNworCWFuZGMJJGFjYzA4LCRzMCwkbWFzazgwCSMgcjAmMHg3ZjdmN2Y3ZgorCWFuZGMJJGFjYzA5LCRzMSwkbWFzazgwCisJYW5kYwkkYWNjMTAsJHMyLCRtYXNrODAKKwlhbmRjCSRhY2MxMSwkczMsJG1hc2s4MAorCXN1YgkkYWNjMDAsJGFjYzAwLCRhY2MwNAkjIHIxLShyMT4+NykKKwlzdWIJJGFjYzAxLCRhY2MwMSwkYWNjMDUKKwlzdWIJJGFjYzAyLCRhY2MwMiwkYWNjMDYKKwlzdWIJJGFjYzAzLCRhY2MwMywkYWNjMDcKKwlhZGQJJGFjYzA4LCRhY2MwOCwkYWNjMDgJIyAocjAmMHg3ZjdmN2Y3Zik8PDEKKwlhZGQJJGFjYzA5LCRhY2MwOSwkYWNjMDkKKwlhZGQJJGFjYzEwLCRhY2MxMCwkYWNjMTAKKwlhZGQJJGFjYzExLCRhY2MxMSwkYWNjMTEKKwlhbmQJJGFjYzAwLCRhY2MwMCwkbWFzazFiCSMgKHIxLShyMT4+NykpJjB4MWIxYjFiMWIKKwlhbmQJJGFjYzAxLCRhY2MwMSwkbWFzazFiCisJYW5kCSRhY2MwMiwkYWNjMDIsJG1hc2sxYgorCWFuZAkkYWNjMDMsJGFjYzAzLCRtYXNrMWIKKwl4b3IJJGFjYzAwLCRhY2MwMCwkYWNjMDgJIyByMgorCXhvcgkkYWNjMDEsJGFjYzAxLCRhY2MwOQorCXhvcgkkYWNjMDIsJGFjYzAyLCRhY2MxMAorCXhvcgkkYWNjMDMsJGFjYzAzLCRhY2MxMQorCisJcm90bHdpCSRhY2MxMiwkczAsMTYJCSMgUk9UQVRFKHIwLDE2KQorCXJvdGx3aQkkYWNjMTMsJHMxLDE2CisJcm90bHdpCSRhY2MxNCwkczIsMTYKKwlyb3Rsd2kJJGFjYzE1LCRzMywxNgorCXhvcgkkczAsJHMwLCRhY2MwMAkJIyByMF5yMgorCXhvcgkkczEsJHMxLCRhY2MwMQorCXhvcgkkczIsJHMyLCRhY2MwMgorCXhvcgkkczMsJHMzLCRhY2MwMworCXJvdHJ3aQkkczAsJHMwLDI0CQkjIFJPVEFURShyMl5yMCwyNCkKKwlyb3Ryd2kJJHMxLCRzMSwyNAorCXJvdHJ3aQkkczIsJHMyLDI0CisJcm90cndpCSRzMywkczMsMjQKKwl4b3IJJHMwLCRzMCwkYWNjMDAJCSMgUk9UQVRFKHIyXnIwLDI0KV5yMgorCXhvcgkkczEsJHMxLCRhY2MwMQorCXhvcgkkczIsJHMyLCRhY2MwMgorCXhvcgkkczMsJHMzLCRhY2MwMworCXJvdGx3aQkkYWNjMDgsJGFjYzEyLDgJCSMgUk9UQVRFKHIwLDI0KQorCXJvdGx3aQkkYWNjMDksJGFjYzEzLDgKKwlyb3Rsd2kJJGFjYzEwLCRhY2MxNCw4CisJcm90bHdpCSRhY2MxMSwkYWNjMTUsOAorCXhvcgkkczAsJHMwLCRhY2MxMgkJIworCXhvcgkkczEsJHMxLCRhY2MxMworCXhvcgkkczIsJHMyLCRhY2MxNAorCXhvcgkkczMsJHMzLCRhY2MxNQorCXhvcgkkczAsJHMwLCRhY2MwOAkJIworCXhvcgkkczEsJHMxLCRhY2MwOQorCXhvcgkkczIsJHMyLCRhY2MxMAorCXhvcgkkczMsJHMzLCRhY2MxMQorCisJYglMZW5jX2NvbXBhY3RfbG9vcAorLmFsaWduCTQKK0xlbmNfY29tcGFjdF9kb25lOgorCXhvcgkkczAsJHMwLCR0MAorCXhvcgkkczEsJHMxLCR0MQorCXhvcgkkczIsJHMyLCR0MgorCXhvcgkkczMsJHMzLCR0MworCWJscgorCisuZ2xvYmwJLkFFU19kZWNyeXB0CisuYWxpZ24JNworLkFFU19kZWNyeXB0OgorCW1mbHIJcjAKKwkkU1RVCSRzcCwtJEZSQU1FKCRzcCkKKworCSRQVVNICXIwLGAkRlJBTUUtJFNJWkVfVCoyMWAoJHNwKQorCSRQVVNICSR0b2MsYCRGUkFNRS0kU0laRV9UKjIwYCgkc3ApCisJJFBVU0gJcjEzLGAkRlJBTUUtJFNJWkVfVCoxOWAoJHNwKQorCSRQVVNICXIxNCxgJEZSQU1FLSRTSVpFX1QqMThgKCRzcCkKKwkkUFVTSAlyMTUsYCRGUkFNRS0kU0laRV9UKjE3YCgkc3ApCisJJFBVU0gJcjE2LGAkRlJBTUUtJFNJWkVfVCoxNmAoJHNwKQorCSRQVVNICXIxNyxgJEZSQU1FLSRTSVpFX1QqMTVgKCRzcCkKKwkkUFVTSAlyMTgsYCRGUkFNRS0kU0laRV9UKjE0YCgkc3ApCisJJFBVU0gJcjE5LGAkRlJBTUUtJFNJWkVfVCoxM2AoJHNwKQorCSRQVVNICXIyMCxgJEZSQU1FLSRTSVpFX1QqMTJgKCRzcCkKKwkkUFVTSAlyMjEsYCRGUkFNRS0kU0laRV9UKjExYCgkc3ApCisJJFBVU0gJcjIyLGAkRlJBTUUtJFNJWkVfVCoxMGAoJHNwKQorCSRQVVNICXIyMyxgJEZSQU1FLSRTSVpFX1QqOWAoJHNwKQorCSRQVVNICXIyNCxgJEZSQU1FLSRTSVpFX1QqOGAoJHNwKQorCSRQVVNICXIyNSxgJEZSQU1FLSRTSVpFX1QqN2AoJHNwKQorCSRQVVNICXIyNixgJEZSQU1FLSRTSVpFX1QqNmAoJHNwKQorCSRQVVNICXIyNyxgJEZSQU1FLSRTSVpFX1QqNWAoJHNwKQorCSRQVVNICXIyOCxgJEZSQU1FLSRTSVpFX1QqNGAoJHNwKQorCSRQVVNICXIyOSxgJEZSQU1FLSRTSVpFX1QqM2AoJHNwKQorCSRQVVNICXIzMCxgJEZSQU1FLSRTSVpFX1QqMmAoJHNwKQorCSRQVVNICXIzMSxgJEZSQU1FLSRTSVpFX1QqMWAoJHNwKQorCisJbHd6CSRzMCwwKCRpbnApCisJbHd6CSRzMSw0KCRpbnApCisJbHd6CSRzMiw4KCRpbnApCisJbHd6CSRzMywxMigkaW5wKQorCWJsCUxBRVNfVGQKKwlibAlMcHBjX0FFU19kZWNyeXB0X2NvbXBhY3QKKwlzdHcJJHMwLDAoJG91dCkKKwlzdHcJJHMxLDQoJG91dCkKKwlzdHcJJHMyLDgoJG91dCkKKwlzdHcJJHMzLDEyKCRvdXQpCisKKwkkUE9QCXIwLGAkRlJBTUUtJFNJWkVfVCoyMWAoJHNwKQorCSRQT1AJJHRvYyxgJEZSQU1FLSRTSVpFX1QqMjBgKCRzcCkKKwkkUE9QCXIxMyxgJEZSQU1FLSRTSVpFX1QqMTlgKCRzcCkKKwkkUE9QCXIxNCxgJEZSQU1FLSRTSVpFX1QqMThgKCRzcCkKKwkkUE9QCXIxNSxgJEZSQU1FLSRTSVpFX1QqMTdgKCRzcCkKKwkkUE9QCXIxNixgJEZSQU1FLSRTSVpFX1QqMTZgKCRzcCkKKwkkUE9QCXIxNyxgJEZSQU1FLSRTSVpFX1QqMTVgKCRzcCkKKwkkUE9QCXIxOCxgJEZSQU1FLSRTSVpFX1QqMTRgKCRzcCkKKwkkUE9QCXIxOSxgJEZSQU1FLSRTSVpFX1QqMTNgKCRzcCkKKwkkUE9QCXIyMCxgJEZSQU1FLSRTSVpFX1QqMTJgKCRzcCkKKwkkUE9QCXIyMSxgJEZSQU1FLSRTSVpFX1QqMTFgKCRzcCkKKwkkUE9QCXIyMixgJEZSQU1FLSRTSVpFX1QqMTBgKCRzcCkKKwkkUE9QCXIyMyxgJEZSQU1FLSRTSVpFX1QqOWAoJHNwKQorCSRQT1AJcjI0LGAkRlJBTUUtJFNJWkVfVCo4YCgkc3ApCisJJFBPUAlyMjUsYCRGUkFNRS0kU0laRV9UKjdgKCRzcCkKKwkkUE9QCXIyNixgJEZSQU1FLSRTSVpFX1QqNmAoJHNwKQorCSRQT1AJcjI3LGAkRlJBTUUtJFNJWkVfVCo1YCgkc3ApCisJJFBPUAlyMjgsYCRGUkFNRS0kU0laRV9UKjRgKCRzcCkKKwkkUE9QCXIyOSxgJEZSQU1FLSRTSVpFX1QqM2AoJHNwKQorCSRQT1AJcjMwLGAkRlJBTUUtJFNJWkVfVCoyYCgkc3ApCisJJFBPUAlyMzEsYCRGUkFNRS0kU0laRV9UKjFgKCRzcCkKKwltdGxyCXIwCisJYWRkaQkkc3AsJHNwLCRGUkFNRQorCWJscgorCisuYWxpZ24JNAorTHBwY19BRVNfZGVjcnlwdDoKKwlsd3oJJGFjYzAwLDI0MCgka2V5KQorCWx3egkkdDAsMCgka2V5KQorCWx3egkkdDEsNCgka2V5KQorCWx3egkkdDIsOCgka2V5KQorCWx3egkkdDMsMTIoJGtleSkKKwlhZGRpCSRUYmwxLCRUYmwwLDMKKwlhZGRpCSRUYmwyLCRUYmwwLDIKKwlhZGRpCSRUYmwzLCRUYmwwLDEKKwlhZGRpCSRhY2MwMCwkYWNjMDAsLTEKKwlhZGRpCSRrZXksJGtleSwxNgorCXhvcgkkczAsJHMwLCR0MAorCXhvcgkkczEsJHMxLCR0MQorCXhvcgkkczIsJHMyLCR0MgorCXhvcgkkczMsJHMzLCR0MworCW10Y3RyCSRhY2MwMAorLmFsaWduCTQKK0xkZWNfbG9vcDoKKwlybHdpbm0JJGFjYzAwLCRzMCxgMzItMjQrM2AsMjEsMjgKKwlybHdpbm0JJGFjYzAxLCRzMSxgMzItMjQrM2AsMjEsMjgKKwlsd3oJJHQwLDAoJGtleSkKKwlsd3oJJHQxLDQoJGtleSkKKwlybHdpbm0JJGFjYzAyLCRzMixgMzItMjQrM2AsMjEsMjgKKwlybHdpbm0JJGFjYzAzLCRzMyxgMzItMjQrM2AsMjEsMjgKKwlsd3oJJHQyLDgoJGtleSkKKwlsd3oJJHQzLDEyKCRrZXkpCisJcmx3aW5tCSRhY2MwNCwkczMsYDMyLTE2KzNgLDIxLDI4CisJcmx3aW5tCSRhY2MwNSwkczAsYDMyLTE2KzNgLDIxLDI4CisJbHd6eAkkYWNjMDAsJFRibDAsJGFjYzAwCisJbHd6eAkkYWNjMDEsJFRibDAsJGFjYzAxCisJcmx3aW5tCSRhY2MwNiwkczEsYDMyLTE2KzNgLDIxLDI4CisJcmx3aW5tCSRhY2MwNywkczIsYDMyLTE2KzNgLDIxLDI4CisJbHd6eAkkYWNjMDIsJFRibDAsJGFjYzAyCisJbHd6eAkkYWNjMDMsJFRibDAsJGFjYzAzCisJcmx3aW5tCSRhY2MwOCwkczIsYDMyLTgrM2AsMjEsMjgKKwlybHdpbm0JJGFjYzA5LCRzMyxgMzItOCszYCwyMSwyOAorCWx3engJJGFjYzA0LCRUYmwxLCRhY2MwNAorCWx3engJJGFjYzA1LCRUYmwxLCRhY2MwNQorCXJsd2lubQkkYWNjMTAsJHMwLGAzMi04KzNgLDIxLDI4CisJcmx3aW5tCSRhY2MxMSwkczEsYDMyLTgrM2AsMjEsMjgKKwlsd3p4CSRhY2MwNiwkVGJsMSwkYWNjMDYKKwlsd3p4CSRhY2MwNywkVGJsMSwkYWNjMDcKKwlybHdpbm0JJGFjYzEyLCRzMSxgMCszYCwyMSwyOAorCXJsd2lubQkkYWNjMTMsJHMyLGAwKzNgLDIxLDI4CisJbHd6eAkkYWNjMDgsJFRibDIsJGFjYzA4CisJbHd6eAkkYWNjMDksJFRibDIsJGFjYzA5CisJcmx3aW5tCSRhY2MxNCwkczMsYDArM2AsMjEsMjgKKwlybHdpbm0JJGFjYzE1LCRzMCxgMCszYCwyMSwyOAorCWx3engJJGFjYzEwLCRUYmwyLCRhY2MxMAorCWx3engJJGFjYzExLCRUYmwyLCRhY2MxMQorCXhvcgkkdDAsJHQwLCRhY2MwMAorCXhvcgkkdDEsJHQxLCRhY2MwMQorCWx3engJJGFjYzEyLCRUYmwzLCRhY2MxMgorCWx3engJJGFjYzEzLCRUYmwzLCRhY2MxMworCXhvcgkkdDIsJHQyLCRhY2MwMgorCXhvcgkkdDMsJHQzLCRhY2MwMworCWx3engJJGFjYzE0LCRUYmwzLCRhY2MxNAorCWx3engJJGFjYzE1LCRUYmwzLCRhY2MxNQorCXhvcgkkdDAsJHQwLCRhY2MwNAorCXhvcgkkdDEsJHQxLCRhY2MwNQorCXhvcgkkdDIsJHQyLCRhY2MwNgorCXhvcgkkdDMsJHQzLCRhY2MwNworCXhvcgkkdDAsJHQwLCRhY2MwOAorCXhvcgkkdDEsJHQxLCRhY2MwOQorCXhvcgkkdDIsJHQyLCRhY2MxMAorCXhvcgkkdDMsJHQzLCRhY2MxMQorCXhvcgkkczAsJHQwLCRhY2MxMgorCXhvcgkkczEsJHQxLCRhY2MxMworCXhvcgkkczIsJHQyLCRhY2MxNAorCXhvcgkkczMsJHQzLCRhY2MxNQorCWFkZGkJJGtleSwka2V5LDE2CisJYmRuei0JTGRlY19sb29wCisKKwlhZGRpCSRUYmwyLCRUYmwwLDIwNDgKKwlub3AKKwlsd3oJJGFjYzA4LGAyMDQ4KzBgKCRUYmwwKQkhIHByZWZldGNoIFRkNAorCWx3egkkYWNjMDksYDIwNDgrMzJgKCRUYmwwKQorCWx3egkkYWNjMTAsYDIwNDgrNjRgKCRUYmwwKQorCWx3egkkYWNjMTEsYDIwNDgrOTZgKCRUYmwwKQorCWx3egkkYWNjMDgsYDIwNDgrMTI4YCgkVGJsMCkKKwlsd3oJJGFjYzA5LGAyMDQ4KzE2MGAoJFRibDApCisJbHd6CSRhY2MxMCxgMjA0OCsxOTJgKCRUYmwwKQorCWx3egkkYWNjMTEsYDIwNDgrMjI0YCgkVGJsMCkKKwlybHdpbm0JJGFjYzAwLCRzMCxgMzItMjRgLDI0LDMxCisJcmx3aW5tCSRhY2MwMSwkczEsYDMyLTI0YCwyNCwzMQorCWx3egkkdDAsMCgka2V5KQorCWx3egkkdDEsNCgka2V5KQorCXJsd2lubQkkYWNjMDIsJHMyLGAzMi0yNGAsMjQsMzEKKwlybHdpbm0JJGFjYzAzLCRzMyxgMzItMjRgLDI0LDMxCisJbHd6CSR0Miw4KCRrZXkpCisJbHd6CSR0MywxMigka2V5KQorCXJsd2lubQkkYWNjMDQsJHMzLGAzMi0xNmAsMjQsMzEKKwlybHdpbm0JJGFjYzA1LCRzMCxgMzItMTZgLDI0LDMxCisJbGJ6eAkkYWNjMDAsJFRibDIsJGFjYzAwCisJbGJ6eAkkYWNjMDEsJFRibDIsJGFjYzAxCisJcmx3aW5tCSRhY2MwNiwkczEsYDMyLTE2YCwyNCwzMQorCXJsd2lubQkkYWNjMDcsJHMyLGAzMi0xNmAsMjQsMzEKKwlsYnp4CSRhY2MwMiwkVGJsMiwkYWNjMDIKKwlsYnp4CSRhY2MwMywkVGJsMiwkYWNjMDMKKwlybHdpbm0JJGFjYzA4LCRzMixgMzItOGAsMjQsMzEKKwlybHdpbm0JJGFjYzA5LCRzMyxgMzItOGAsMjQsMzEKKwlsYnp4CSRhY2MwNCwkVGJsMiwkYWNjMDQKKwlsYnp4CSRhY2MwNSwkVGJsMiwkYWNjMDUKKwlybHdpbm0JJGFjYzEwLCRzMCxgMzItOGAsMjQsMzEKKwlybHdpbm0JJGFjYzExLCRzMSxgMzItOGAsMjQsMzEKKwlsYnp4CSRhY2MwNiwkVGJsMiwkYWNjMDYKKwlsYnp4CSRhY2MwNywkVGJsMiwkYWNjMDcKKwlybHdpbm0JJGFjYzEyLCRzMSxgMGAsMjQsMzEKKwlybHdpbm0JJGFjYzEzLCRzMixgMGAsMjQsMzEKKwlsYnp4CSRhY2MwOCwkVGJsMiwkYWNjMDgKKwlsYnp4CSRhY2MwOSwkVGJsMiwkYWNjMDkKKwlybHdpbm0JJGFjYzE0LCRzMyxgMGAsMjQsMzEKKwlybHdpbm0JJGFjYzE1LCRzMCxgMGAsMjQsMzEKKwlsYnp4CSRhY2MxMCwkVGJsMiwkYWNjMTAKKwlsYnp4CSRhY2MxMSwkVGJsMiwkYWNjMTEKKwlybHdpbm0JJHMwLCRhY2MwMCwyNCwwLDcKKwlybHdpbm0JJHMxLCRhY2MwMSwyNCwwLDcKKwlsYnp4CSRhY2MxMiwkVGJsMiwkYWNjMTIKKwlsYnp4CSRhY2MxMywkVGJsMiwkYWNjMTMKKwlybHdpbm0JJHMyLCRhY2MwMiwyNCwwLDcKKwlybHdpbm0JJHMzLCRhY2MwMywyNCwwLDcKKwlsYnp4CSRhY2MxNCwkVGJsMiwkYWNjMTQKKwlsYnp4CSRhY2MxNSwkVGJsMiwkYWNjMTUKKwlybHdpbWkJJHMwLCRhY2MwNCwxNiw4LDE1CisJcmx3aW1pCSRzMSwkYWNjMDUsMTYsOCwxNQorCXJsd2ltaQkkczIsJGFjYzA2LDE2LDgsMTUKKwlybHdpbWkJJHMzLCRhY2MwNywxNiw4LDE1CisJcmx3aW1pCSRzMCwkYWNjMDgsOCwxNiwyMworCXJsd2ltaQkkczEsJGFjYzA5LDgsMTYsMjMKKwlybHdpbWkJJHMyLCRhY2MxMCw4LDE2LDIzCisJcmx3aW1pCSRzMywkYWNjMTEsOCwxNiwyMworCW9yCSRzMCwkczAsJGFjYzEyCisJb3IJJHMxLCRzMSwkYWNjMTMKKwlvcgkkczIsJHMyLCRhY2MxNAorCW9yCSRzMywkczMsJGFjYzE1CisJeG9yCSRzMCwkczAsJHQwCisJeG9yCSRzMSwkczEsJHQxCisJeG9yCSRzMiwkczIsJHQyCisJeG9yCSRzMywkczMsJHQzCisJYmxyCisKKy5hbGlnbgk0CitMcHBjX0FFU19kZWNyeXB0X2NvbXBhY3Q6CisJbHd6CSRhY2MwMCwyNDAoJGtleSkKKwlsd3oJJHQwLDAoJGtleSkKKwlsd3oJJHQxLDQoJGtleSkKKwlsd3oJJHQyLDgoJGtleSkKKwlsd3oJJHQzLDEyKCRrZXkpCisJYWRkaQkkVGJsMSwkVGJsMCwyMDQ4CisJbGlzCSRtYXNrODAsMHg4MDgwCisJbGlzCSRtYXNrMWIsMHgxYjFiCisJYWRkaQkka2V5LCRrZXksMTYKKwlvcmkJJG1hc2s4MCwkbWFzazgwLDB4ODA4MAorCW9yaQkkbWFzazFiLCRtYXNrMWIsMHgxYjFiCitfX18KKyRjb2RlLj08PF9fXyBpZiAoJFNJWkVfVD09OCk7CisJaW5zcmRpCSRtYXNrODAsJG1hc2s4MCwzMiwwCisJaW5zcmRpCSRtYXNrMWIsJG1hc2sxYiwzMiwwCitfX18KKyRjb2RlLj08PF9fXzsKKwltdGN0cgkkYWNjMDAKKy5hbGlnbgk0CitMZGVjX2NvbXBhY3RfbG9vcDoKKwl4b3IJJHMwLCRzMCwkdDAKKwl4b3IJJHMxLCRzMSwkdDEKKwl4b3IJJHMyLCRzMiwkdDIKKwl4b3IJJHMzLCRzMywkdDMKKwlybHdpbm0JJGFjYzAwLCRzMCxgMzItMjRgLDI0LDMxCisJcmx3aW5tCSRhY2MwMSwkczEsYDMyLTI0YCwyNCwzMQorCXJsd2lubQkkYWNjMDIsJHMyLGAzMi0yNGAsMjQsMzEKKwlybHdpbm0JJGFjYzAzLCRzMyxgMzItMjRgLDI0LDMxCisJbGJ6eAkkYWNjMDAsJFRibDEsJGFjYzAwCisJbGJ6eAkkYWNjMDEsJFRibDEsJGFjYzAxCisJcmx3aW5tCSRhY2MwNCwkczMsYDMyLTE2YCwyNCwzMQorCXJsd2lubQkkYWNjMDUsJHMwLGAzMi0xNmAsMjQsMzEKKwlsYnp4CSRhY2MwMiwkVGJsMSwkYWNjMDIKKwlsYnp4CSRhY2MwMywkVGJsMSwkYWNjMDMKKwlybHdpbm0JJGFjYzA2LCRzMSxgMzItMTZgLDI0LDMxCisJcmx3aW5tCSRhY2MwNywkczIsYDMyLTE2YCwyNCwzMQorCWxiengJJGFjYzA0LCRUYmwxLCRhY2MwNAorCWxiengJJGFjYzA1LCRUYmwxLCRhY2MwNQorCXJsd2lubQkkYWNjMDgsJHMyLGAzMi04YCwyNCwzMQorCXJsd2lubQkkYWNjMDksJHMzLGAzMi04YCwyNCwzMQorCWxiengJJGFjYzA2LCRUYmwxLCRhY2MwNgorCWxiengJJGFjYzA3LCRUYmwxLCRhY2MwNworCXJsd2lubQkkYWNjMTAsJHMwLGAzMi04YCwyNCwzMQorCXJsd2lubQkkYWNjMTEsJHMxLGAzMi04YCwyNCwzMQorCWxiengJJGFjYzA4LCRUYmwxLCRhY2MwOAorCWxiengJJGFjYzA5LCRUYmwxLCRhY2MwOQorCXJsd2lubQkkYWNjMTIsJHMxLGAwYCwyNCwzMQorCXJsd2lubQkkYWNjMTMsJHMyLGAwYCwyNCwzMQorCWxiengJJGFjYzEwLCRUYmwxLCRhY2MxMAorCWxiengJJGFjYzExLCRUYmwxLCRhY2MxMQorCXJsd2lubQkkYWNjMTQsJHMzLGAwYCwyNCwzMQorCXJsd2lubQkkYWNjMTUsJHMwLGAwYCwyNCwzMQorCWxiengJJGFjYzEyLCRUYmwxLCRhY2MxMgorCWxiengJJGFjYzEzLCRUYmwxLCRhY2MxMworCXJsd2lubQkkczAsJGFjYzAwLDI0LDAsNworCXJsd2lubQkkczEsJGFjYzAxLDI0LDAsNworCWxiengJJGFjYzE0LCRUYmwxLCRhY2MxNAorCWxiengJJGFjYzE1LCRUYmwxLCRhY2MxNQorCXJsd2lubQkkczIsJGFjYzAyLDI0LDAsNworCXJsd2lubQkkczMsJGFjYzAzLDI0LDAsNworCXJsd2ltaQkkczAsJGFjYzA0LDE2LDgsMTUKKwlybHdpbWkJJHMxLCRhY2MwNSwxNiw4LDE1CisJcmx3aW1pCSRzMiwkYWNjMDYsMTYsOCwxNQorCXJsd2ltaQkkczMsJGFjYzA3LDE2LDgsMTUKKwlybHdpbWkJJHMwLCRhY2MwOCw4LDE2LDIzCisJcmx3aW1pCSRzMSwkYWNjMDksOCwxNiwyMworCXJsd2ltaQkkczIsJGFjYzEwLDgsMTYsMjMKKwlybHdpbWkJJHMzLCRhY2MxMSw4LDE2LDIzCisJbHd6CSR0MCwwKCRrZXkpCisJbHd6CSR0MSw0KCRrZXkpCisJb3IJJHMwLCRzMCwkYWNjMTIKKwlvcgkkczEsJHMxLCRhY2MxMworCWx3egkkdDIsOCgka2V5KQorCWx3egkkdDMsMTIoJGtleSkKKwlvcgkkczIsJHMyLCRhY2MxNAorCW9yCSRzMywkczMsJGFjYzE1CisKKwlhZGRpCSRrZXksJGtleSwxNgorCWJkeglMZGVjX2NvbXBhY3RfZG9uZQorX19fCiskY29kZS49PDxfX18gaWYgKCRTSVpFX1Q9PTgpOworCSMgdmVjdG9yaXplZCBwZXJtdXRhdGlvbiBpbXByb3ZlcyBkZWNyeXB0IHBlcmZvcm1hbmNlIGJ5IDEwJQorCWluc3JkaQkkczAsJHMxLDMyLDAKKwlpbnNyZGkJJHMyLCRzMywzMiwwCisKKwlhbmQJJGFjYzAwLCRzMCwkbWFzazgwCSMgcjE9cjAmMHg4MDgwODA4MAorCWFuZAkkYWNjMDIsJHMyLCRtYXNrODAKKwlzcmRpCSRhY2MwNCwkYWNjMDAsNwkJIyByMT4+NworCXNyZGkJJGFjYzA2LCRhY2MwMiw3CisJYW5kYwkkYWNjMDgsJHMwLCRtYXNrODAJIyByMCYweDdmN2Y3ZjdmCisJYW5kYwkkYWNjMTAsJHMyLCRtYXNrODAKKwlzdWIJJGFjYzAwLCRhY2MwMCwkYWNjMDQJIyByMS0ocjE+PjcpCisJc3ViCSRhY2MwMiwkYWNjMDIsJGFjYzA2CisJYWRkCSRhY2MwOCwkYWNjMDgsJGFjYzA4CSMgKHIwJjB4N2Y3ZjdmN2YpPDwxCisJYWRkCSRhY2MxMCwkYWNjMTAsJGFjYzEwCisJYW5kCSRhY2MwMCwkYWNjMDAsJG1hc2sxYgkjIChyMS0ocjE+PjcpKSYweDFiMWIxYjFiCisJYW5kCSRhY2MwMiwkYWNjMDIsJG1hc2sxYgorCXhvcgkkYWNjMDAsJGFjYzAwLCRhY2MwOAkjIHIyCisJeG9yCSRhY2MwMiwkYWNjMDIsJGFjYzEwCisKKwlhbmQJJGFjYzA0LCRhY2MwMCwkbWFzazgwCSMgcjE9cjImMHg4MDgwODA4MAorCWFuZAkkYWNjMDYsJGFjYzAyLCRtYXNrODAKKwlzcmRpCSRhY2MwOCwkYWNjMDQsNwkJIyByMT4+NworCXNyZGkJJGFjYzEwLCRhY2MwNiw3CisJYW5kYwkkYWNjMTIsJGFjYzAwLCRtYXNrODAJIyByMiYweDdmN2Y3ZjdmCisJYW5kYwkkYWNjMTQsJGFjYzAyLCRtYXNrODAKKwlzdWIJJGFjYzA0LCRhY2MwNCwkYWNjMDgJIyByMS0ocjE+PjcpCisJc3ViCSRhY2MwNiwkYWNjMDYsJGFjYzEwCisJYWRkCSRhY2MxMiwkYWNjMTIsJGFjYzEyCSMgKHIyJjB4N2Y3ZjdmN2YpPDwxCisJYWRkCSRhY2MxNCwkYWNjMTQsJGFjYzE0CisJYW5kCSRhY2MwNCwkYWNjMDQsJG1hc2sxYgkjIChyMS0ocjE+PjcpKSYweDFiMWIxYjFiCisJYW5kCSRhY2MwNiwkYWNjMDYsJG1hc2sxYgorCXhvcgkkYWNjMDQsJGFjYzA0LCRhY2MxMgkjIHI0CisJeG9yCSRhY2MwNiwkYWNjMDYsJGFjYzE0CisKKwlhbmQJJGFjYzA4LCRhY2MwNCwkbWFzazgwCSMgcjE9cjQmMHg4MDgwODA4MAorCWFuZAkkYWNjMTAsJGFjYzA2LCRtYXNrODAKKwlzcmRpCSRhY2MxMiwkYWNjMDgsNwkJIyByMT4+NworCXNyZGkJJGFjYzE0LCRhY2MxMCw3CisJc3ViCSRhY2MwOCwkYWNjMDgsJGFjYzEyCSMgcjEtKHIxPj43KQorCXN1YgkkYWNjMTAsJGFjYzEwLCRhY2MxNAorCWFuZGMJJGFjYzEyLCRhY2MwNCwkbWFzazgwCSMgcjQmMHg3ZjdmN2Y3ZgorCWFuZGMJJGFjYzE0LCRhY2MwNiwkbWFzazgwCisJYWRkCSRhY2MxMiwkYWNjMTIsJGFjYzEyCSMgKHI0JjB4N2Y3ZjdmN2YpPDwxCisJYWRkCSRhY2MxNCwkYWNjMTQsJGFjYzE0CisJYW5kCSRhY2MwOCwkYWNjMDgsJG1hc2sxYgkjIChyMS0ocjE+PjcpKSYweDFiMWIxYjFiCisJYW5kCSRhY2MxMCwkYWNjMTAsJG1hc2sxYgorCXhvcgkkYWNjMDgsJGFjYzA4LCRhY2MxMgkjIHI4CisJeG9yCSRhY2MxMCwkYWNjMTAsJGFjYzE0CisKKwl4b3IJJGFjYzAwLCRhY2MwMCwkczAJIyByMl5yMAorCXhvcgkkYWNjMDIsJGFjYzAyLCRzMgorCXhvcgkkYWNjMDQsJGFjYzA0LCRzMAkjIHI0XnIwCisJeG9yCSRhY2MwNiwkYWNjMDYsJHMyCisKKwlleHRyZGkJJGFjYzAxLCRhY2MwMCwzMiwwCisJZXh0cmRpCSRhY2MwMywkYWNjMDIsMzIsMAorCWV4dHJkaQkkYWNjMDUsJGFjYzA0LDMyLDAKKwlleHRyZGkJJGFjYzA3LCRhY2MwNiwzMiwwCisJZXh0cmRpCSRhY2MwOSwkYWNjMDgsMzIsMAorCWV4dHJkaQkkYWNjMTEsJGFjYzEwLDMyLDAKK19fXworJGNvZGUuPTw8X19fIGlmICgkU0laRV9UPT00KTsKKwlhbmQJJGFjYzAwLCRzMCwkbWFzazgwCSMgcjE9cjAmMHg4MDgwODA4MAorCWFuZAkkYWNjMDEsJHMxLCRtYXNrODAKKwlhbmQJJGFjYzAyLCRzMiwkbWFzazgwCisJYW5kCSRhY2MwMywkczMsJG1hc2s4MAorCXNyd2kJJGFjYzA0LCRhY2MwMCw3CQkjIHIxPj43CisJc3J3aQkkYWNjMDUsJGFjYzAxLDcKKwlzcndpCSRhY2MwNiwkYWNjMDIsNworCXNyd2kJJGFjYzA3LCRhY2MwMyw3CisJYW5kYwkkYWNjMDgsJHMwLCRtYXNrODAJIyByMCYweDdmN2Y3ZjdmCisJYW5kYwkkYWNjMDksJHMxLCRtYXNrODAKKwlhbmRjCSRhY2MxMCwkczIsJG1hc2s4MAorCWFuZGMJJGFjYzExLCRzMywkbWFzazgwCisJc3ViCSRhY2MwMCwkYWNjMDAsJGFjYzA0CSMgcjEtKHIxPj43KQorCXN1YgkkYWNjMDEsJGFjYzAxLCRhY2MwNQorCXN1YgkkYWNjMDIsJGFjYzAyLCRhY2MwNgorCXN1YgkkYWNjMDMsJGFjYzAzLCRhY2MwNworCWFkZAkkYWNjMDgsJGFjYzA4LCRhY2MwOAkjIChyMCYweDdmN2Y3ZjdmKTw8MQorCWFkZAkkYWNjMDksJGFjYzA5LCRhY2MwOQorCWFkZAkkYWNjMTAsJGFjYzEwLCRhY2MxMAorCWFkZAkkYWNjMTEsJGFjYzExLCRhY2MxMQorCWFuZAkkYWNjMDAsJGFjYzAwLCRtYXNrMWIJIyAocjEtKHIxPj43KSkmMHgxYjFiMWIxYgorCWFuZAkkYWNjMDEsJGFjYzAxLCRtYXNrMWIKKwlhbmQJJGFjYzAyLCRhY2MwMiwkbWFzazFiCisJYW5kCSRhY2MwMywkYWNjMDMsJG1hc2sxYgorCXhvcgkkYWNjMDAsJGFjYzAwLCRhY2MwOAkjIHIyCisJeG9yCSRhY2MwMSwkYWNjMDEsJGFjYzA5CisJeG9yCSRhY2MwMiwkYWNjMDIsJGFjYzEwCisJeG9yCSRhY2MwMywkYWNjMDMsJGFjYzExCisKKwlhbmQJJGFjYzA0LCRhY2MwMCwkbWFzazgwCSMgcjE9cjImMHg4MDgwODA4MAorCWFuZAkkYWNjMDUsJGFjYzAxLCRtYXNrODAKKwlhbmQJJGFjYzA2LCRhY2MwMiwkbWFzazgwCisJYW5kCSRhY2MwNywkYWNjMDMsJG1hc2s4MAorCXNyd2kJJGFjYzA4LCRhY2MwNCw3CQkjIHIxPj43CisJc3J3aQkkYWNjMDksJGFjYzA1LDcKKwlzcndpCSRhY2MxMCwkYWNjMDYsNworCXNyd2kJJGFjYzExLCRhY2MwNyw3CisJYW5kYwkkYWNjMTIsJGFjYzAwLCRtYXNrODAJIyByMiYweDdmN2Y3ZjdmCisJYW5kYwkkYWNjMTMsJGFjYzAxLCRtYXNrODAKKwlhbmRjCSRhY2MxNCwkYWNjMDIsJG1hc2s4MAorCWFuZGMJJGFjYzE1LCRhY2MwMywkbWFzazgwCisJc3ViCSRhY2MwNCwkYWNjMDQsJGFjYzA4CSMgcjEtKHIxPj43KQorCXN1YgkkYWNjMDUsJGFjYzA1LCRhY2MwOQorCXN1YgkkYWNjMDYsJGFjYzA2LCRhY2MxMAorCXN1YgkkYWNjMDcsJGFjYzA3LCRhY2MxMQorCWFkZAkkYWNjMTIsJGFjYzEyLCRhY2MxMgkjIChyMiYweDdmN2Y3ZjdmKTw8MQorCWFkZAkkYWNjMTMsJGFjYzEzLCRhY2MxMworCWFkZAkkYWNjMTQsJGFjYzE0LCRhY2MxNAorCWFkZAkkYWNjMTUsJGFjYzE1LCRhY2MxNQorCWFuZAkkYWNjMDQsJGFjYzA0LCRtYXNrMWIJIyAocjEtKHIxPj43KSkmMHgxYjFiMWIxYgorCWFuZAkkYWNjMDUsJGFjYzA1LCRtYXNrMWIKKwlhbmQJJGFjYzA2LCRhY2MwNiwkbWFzazFiCisJYW5kCSRhY2MwNywkYWNjMDcsJG1hc2sxYgorCXhvcgkkYWNjMDQsJGFjYzA0LCRhY2MxMgkjIHI0CisJeG9yCSRhY2MwNSwkYWNjMDUsJGFjYzEzCisJeG9yCSRhY2MwNiwkYWNjMDYsJGFjYzE0CisJeG9yCSRhY2MwNywkYWNjMDcsJGFjYzE1CisKKwlhbmQJJGFjYzA4LCRhY2MwNCwkbWFzazgwCSMgcjE9cjQmMHg4MDgwODA4MAorCWFuZAkkYWNjMDksJGFjYzA1LCRtYXNrODAKKwlhbmQJJGFjYzEwLCRhY2MwNiwkbWFzazgwCisJYW5kCSRhY2MxMSwkYWNjMDcsJG1hc2s4MAorCXNyd2kJJGFjYzEyLCRhY2MwOCw3CQkjIHIxPj43CisJc3J3aQkkYWNjMTMsJGFjYzA5LDcKKwlzcndpCSRhY2MxNCwkYWNjMTAsNworCXNyd2kJJGFjYzE1LCRhY2MxMSw3CisJc3ViCSRhY2MwOCwkYWNjMDgsJGFjYzEyCSMgcjEtKHIxPj43KQorCXN1YgkkYWNjMDksJGFjYzA5LCRhY2MxMworCXN1YgkkYWNjMTAsJGFjYzEwLCRhY2MxNAorCXN1YgkkYWNjMTEsJGFjYzExLCRhY2MxNQorCWFuZGMJJGFjYzEyLCRhY2MwNCwkbWFzazgwCSMgcjQmMHg3ZjdmN2Y3ZgorCWFuZGMJJGFjYzEzLCRhY2MwNSwkbWFzazgwCisJYW5kYwkkYWNjMTQsJGFjYzA2LCRtYXNrODAKKwlhbmRjCSRhY2MxNSwkYWNjMDcsJG1hc2s4MAorCWFkZAkkYWNjMTIsJGFjYzEyLCRhY2MxMgkjIChyNCYweDdmN2Y3ZjdmKTw8MQorCWFkZAkkYWNjMTMsJGFjYzEzLCRhY2MxMworCWFkZAkkYWNjMTQsJGFjYzE0LCRhY2MxNAorCWFkZAkkYWNjMTUsJGFjYzE1LCRhY2MxNQorCWFuZAkkYWNjMDgsJGFjYzA4LCRtYXNrMWIJIyAocjEtKHIxPj43KSkmMHgxYjFiMWIxYgorCWFuZAkkYWNjMDksJGFjYzA5LCRtYXNrMWIKKwlhbmQJJGFjYzEwLCRhY2MxMCwkbWFzazFiCisJYW5kCSRhY2MxMSwkYWNjMTEsJG1hc2sxYgorCXhvcgkkYWNjMDgsJGFjYzA4LCRhY2MxMgkjIHI4CisJeG9yCSRhY2MwOSwkYWNjMDksJGFjYzEzCisJeG9yCSRhY2MxMCwkYWNjMTAsJGFjYzE0CisJeG9yCSRhY2MxMSwkYWNjMTEsJGFjYzE1CisKKwl4b3IJJGFjYzAwLCRhY2MwMCwkczAJIyByMl5yMAorCXhvcgkkYWNjMDEsJGFjYzAxLCRzMQorCXhvcgkkYWNjMDIsJGFjYzAyLCRzMgorCXhvcgkkYWNjMDMsJGFjYzAzLCRzMworCXhvcgkkYWNjMDQsJGFjYzA0LCRzMAkjIHI0XnIwCisJeG9yCSRhY2MwNSwkYWNjMDUsJHMxCisJeG9yCSRhY2MwNiwkYWNjMDYsJHMyCisJeG9yCSRhY2MwNywkYWNjMDcsJHMzCitfX18KKyRjb2RlLj08PF9fXzsKKwlyb3Ryd2kJJHMwLCRzMCw4CQkjID0gUk9UQVRFKHIwLDgpCisJcm90cndpCSRzMSwkczEsOAorCXJvdHJ3aQkkczIsJHMyLDgKKwlyb3Ryd2kJJHMzLCRzMyw4CisJeG9yCSRzMCwkczAsJGFjYzAwCQkjIF49IHIyXnIwCisJeG9yCSRzMSwkczEsJGFjYzAxCisJeG9yCSRzMiwkczIsJGFjYzAyCisJeG9yCSRzMywkczMsJGFjYzAzCisJeG9yCSRhY2MwMCwkYWNjMDAsJGFjYzA4CisJeG9yCSRhY2MwMSwkYWNjMDEsJGFjYzA5CisJeG9yCSRhY2MwMiwkYWNjMDIsJGFjYzEwCisJeG9yCSRhY2MwMywkYWNjMDMsJGFjYzExCisJeG9yCSRzMCwkczAsJGFjYzA0CQkjIF49IHI0XnIwCisJeG9yCSRzMSwkczEsJGFjYzA1CisJeG9yCSRzMiwkczIsJGFjYzA2CisJeG9yCSRzMywkczMsJGFjYzA3CisJcm90cndpCSRhY2MwMCwkYWNjMDAsMjQKKwlyb3Ryd2kJJGFjYzAxLCRhY2MwMSwyNAorCXJvdHJ3aQkkYWNjMDIsJGFjYzAyLDI0CisJcm90cndpCSRhY2MwMywkYWNjMDMsMjQKKwl4b3IJJGFjYzA0LCRhY2MwNCwkYWNjMDgKKwl4b3IJJGFjYzA1LCRhY2MwNSwkYWNjMDkKKwl4b3IJJGFjYzA2LCRhY2MwNiwkYWNjMTAKKwl4b3IJJGFjYzA3LCRhY2MwNywkYWNjMTEKKwl4b3IJJHMwLCRzMCwkYWNjMDgJCSMgXj0gcjggW14oKHI0XnIwKV4ocjJecjApPXI0XnIyKV0KKwl4b3IJJHMxLCRzMSwkYWNjMDkKKwl4b3IJJHMyLCRzMiwkYWNjMTAKKwl4b3IJJHMzLCRzMywkYWNjMTEKKwlyb3Ryd2kJJGFjYzA0LCRhY2MwNCwxNgorCXJvdHJ3aQkkYWNjMDUsJGFjYzA1LDE2CisJcm90cndpCSRhY2MwNiwkYWNjMDYsMTYKKwlyb3Ryd2kJJGFjYzA3LCRhY2MwNywxNgorCXhvcgkkczAsJHMwLCRhY2MwMAkJIyBePSBST1RBVEUocjhecjJecjAsMjQpCisJeG9yCSRzMSwkczEsJGFjYzAxCisJeG9yCSRzMiwkczIsJGFjYzAyCisJeG9yCSRzMywkczMsJGFjYzAzCisJcm90cndpCSRhY2MwOCwkYWNjMDgsOAorCXJvdHJ3aQkkYWNjMDksJGFjYzA5LDgKKwlyb3Ryd2kJJGFjYzEwLCRhY2MxMCw4CisJcm90cndpCSRhY2MxMSwkYWNjMTEsOAorCXhvcgkkczAsJHMwLCRhY2MwNAkJIyBePSBST1RBVEUocjhecjRecjAsMTYpCisJeG9yCSRzMSwkczEsJGFjYzA1CisJeG9yCSRzMiwkczIsJGFjYzA2CisJeG9yCSRzMywkczMsJGFjYzA3CisJeG9yCSRzMCwkczAsJGFjYzA4CQkjIF49IFJPVEFURShyOCw4KQkKKwl4b3IJJHMxLCRzMSwkYWNjMDkJCisJeG9yCSRzMiwkczIsJGFjYzEwCQorCXhvcgkkczMsJHMzLCRhY2MxMQkKKworCWIJTGRlY19jb21wYWN0X2xvb3AKKy5hbGlnbgk0CitMZGVjX2NvbXBhY3RfZG9uZToKKwl4b3IJJHMwLCRzMCwkdDAKKwl4b3IJJHMxLCRzMSwkdDEKKwl4b3IJJHMyLCRzMiwkdDIKKwl4b3IJJHMzLCRzMywkdDMKKwlibHIKKy5sb25nCTAKKy5hc2NpegkiQUVTIGZvciBQUEMsIENSWVBUT0dBTVMgYnkgPGFwcHJvXEBvcGVuc3NsLm9yZz4iCisuYWxpZ24JNworX19fCisKKyRjb2RlID1+IHMvXGAoW15cYF0qKVxgL2V2YWwgJDEvZ2VtOworcHJpbnQgJGNvZGU7CitjbG9zZSBTVERPVVQ7CmRpZmYgLS1naXQgYS9jcnlwdG8vYWVzL2FzbS9hZXMtczM5MHgucGwgYi9jcnlwdG8vYWVzL2FzbS9hZXMtczM5MHgucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UwMTg4OQotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9hZXMvYXNtL2Flcy1zMzkweC5wbApAQCAtMCwwICsxLDEzMzkgQEAKKyMhL3Vzci9iaW4vZW52IHBlcmwKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPiBmb3IgdGhlIE9wZW5TU0wKKyMgcHJvamVjdC4gVGhlIG1vZHVsZSBpcywgaG93ZXZlciwgZHVhbCBsaWNlbnNlZCB1bmRlciBPcGVuU1NMIGFuZAorIyBDUllQVE9HQU1TIGxpY2Vuc2VzIGRlcGVuZGluZyBvbiB3aGVyZSB5b3Ugb2J0YWluIGl0LiBGb3IgZnVydGhlcgorIyBkZXRhaWxzIHNlZSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL35hcHByby9jcnlwdG9nYW1zLy4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyBBRVMgZm9yIHMzOTB4LgorCisjIEFwcmlsIDIwMDcuCisjCisjIFNvZnR3YXJlIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IG92ZXIgZ2NjLWdlbmVyYXRlZCBjb2RlIGlzIH43MCUgYW5kCisjIGluIGFic29sdXRlIHRlcm1zIGlzIH43MyBjeWNsZXMgcGVyIGJ5dGUgcHJvY2Vzc2VkIHdpdGggMTI4LWJpdCBrZXkuCisjIFlvdSdyZSBsaWtlbHkgdG8gZXhjbGFpbSAid2h5IHNvIHNsb3c/IiBLZWVwIGluIG1pbmQgdGhhdCB6LUNQVXMgYXJlCisjICpzdHJpY3RseSogaW4tb3JkZXIgZXhlY3V0aW9uIGFuZCBpc3N1ZWQgaW5zdHJ1Y3Rpb24gW2luIHRoaXMgY2FzZQorIyBsb2FkIHZhbHVlIGZyb20gbWVtb3J5IGlzIGNyaXRpY2FsXSBoYXMgdG8gY29tcGxldGUgYmVmb3JlIGV4ZWN1dGlvbgorIyBmbG93IHByb2NlZWRzLiBTLWJveGVzIGFyZSBjb21wcmVzc2VkIHRvIDJLQlsrMjU2Ql0uCisjCisjIEFzIGZvciBoYXJkd2FyZSBhY2NlbGVyYXRpb24gc3VwcG9ydC4gSXQncyBiYXNpY2FsbHkgYSAidGVhc2VyLCIgYXMKKyMgaXQgY2FuIGFuZCBzaG91bGQgYmUgaW1wcm92ZWQgaW4gc2V2ZXJhbCB3YXlzLiBNb3N0IG5vdGFibHkgc3VwcG9ydAorIyBmb3IgQ0JDIGlzIG5vdCB1dGlsaXplZCwgbm9yIG11bHRpcGxlIGJsb2NrcyBhcmUgZXZlciBwcm9jZXNzZWQuCisjIFRoZW4gc29mdHdhcmUga2V5IHNjaGVkdWxlIGNhbiBiZSBwb3N0cG9uZWQgdGlsbCBoYXJkd2FyZSBzdXBwb3J0CisjIGRldGVjdGlvbi4uLiBQZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBvdmVyIGFzc2VtYmxlciBpcyByZXBvcnRlZGx5CisjIH4yLjV4LCBidXQgY2FuIHJlYWNoID44eCBbbmF0dXJhbGx5IG9uIGxhcmdlciBjaHVua3NdIGlmIHByb3BlcgorIyBzdXBwb3J0IGlzIGltcGxlbWVudGVkLgorCisjIE1heSAyMDA3LgorIworIyBJbXBsZW1lbnQgQUVTX3NldF9bZW58ZGVdY3J5cHRfa2V5LiBLZXkgc2NoZWR1bGUgc2V0dXAgaXMgYXZvaWRlZAorIyBmb3IgMTI4LWJpdCBrZXlzLCBpZiBoYXJkd2FyZSBzdXBwb3J0IGlzIGRldGVjdGVkLgorCisjIEphbnVyYXkgMjAwOS4KKyMKKyMgQWRkIHN1cHBvcnQgZm9yIGhhcmR3YXJlIEFFUzE5Mi8yNTYgYW5kIHJlc2NoZWR1bGUgaW5zdHJ1Y3Rpb25zIHRvCisjIG1pbmltaXplL2F2b2lkIEFkZHJlc3MgR2VuZXJhdGlvbiBJbnRlcmxvY2sgaGF6YXJkIGFuZCB0byBmYXZvdXIKKyMgZHVhbC1pc3N1ZSB6MTAgcGlwZWxpbmUuIFRoaXMgZ2F2ZSB+MjUlIGltcHJvdmVtZW50IG9uIHoxMCBhbmQKKyMgYWxtb3N0IDUwJSBvbiB6OS4gVGhlIGdhaW4gaXMgc21hbGxlciBvbiB6MTAsIGJlY2F1c2UgYmVpbmcgZHVhbC0KKyMgaXNzdWUgejEwIG1ha2VzIGl0IGltcHJvc3NpYmxlIHRvIGVsaW1pbmF0ZSB0aGUgaW50ZXJsb2NrIGNvbmRpdGlvbjoKKyMgY3JpdGlhbCBwYXRoIGlzIG5vdCBsb25nIGVub3VnaC4gWWV0IGl0IHNwZW5kcyB+MjQgY3ljbGVzIHBlciBieXRlCisjIHByb2Nlc3NlZCB3aXRoIDEyOC1iaXQga2V5LgorIworIyBVbmxpa2UgcHJldmlvdXMgdmVyc2lvbiBoYXJkd2FyZSBzdXBwb3J0IGRldGVjdGlvbiB0YWtlcyBwbGFjZSBvbmx5CisjIGF0IHRoZSBtb21lbnQgb2Yga2V5IHNjaGVkdWxlIHNldHVwLCB3aGljaCBpcyBkZW5vdGVkIGluIGtleS0+cm91bmRzLgorIyBUaGlzIGlzIGRvbmUsIGJlY2F1c2UgZGVmZXJyZWQga2V5IHNldHVwIGNhbid0IGJlIG1hZGUgTVQtc2FmZSwgbm90CisjIGZvciBrZXkgbGVuZ3RoZXMgbG9uZ2VyIHRoYW4gMTI4IGJpdHMuCisjCisjIEFkZCBBRVNfY2JjX2VuY3J5cHQsIHdoaWNoIGdpdmVzIGluY3JlZGlibGUgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQsCisjIGl0IHdhcyBtZWFzdXJlZCB0byBiZSB+Ni42eC4gSXQncyBsZXNzIHRoYW4gcHJldmlvdXNseSBtZW50aW9uZWQgOHgsCisjIGJlY2F1c2Ugc29mdHdhcmUgaW1wbGVtZW50YXRpb24gd2FzIG9wdGltaXplZC4KKworJHNvZnRvbmx5PTA7CSMgYWxsb3cgaGFyZHdhcmUgc3VwcG9ydAorCiskdDA9IiVyMCI7CSRtYXNrPSIlcjAiOworJHQxPSIlcjEiOworJHQyPSIlcjIiOwkkaW5wPSIlcjIiOworJHQzPSIlcjMiOwkkb3V0PSIlcjMiOwkkYml0cz0iJXIzIjsKKyRrZXk9IiVyNCI7CiskaTE9IiVyNSI7CiskaTI9IiVyNiI7CiskaTM9IiVyNyI7CiskczA9IiVyOCI7CiskczE9IiVyOSI7CiskczI9IiVyMTAiOworJHMzPSIlcjExIjsKKyR0Ymw9IiVyMTIiOworJHJvdW5kcz0iJXIxMyI7CiskcmE9IiVyMTQiOworJHNwPSIlcjE1IjsKKworc3ViIF9kYXRhX3dvcmQoKQoreyBteSAkaTsKKyAgICB3aGlsZShkZWZpbmVkKCRpPXNoaWZ0KSkgeyAkY29kZS49c3ByaW50ZiIubG9uZ1x0MHglMDh4LDB4JTA4eFxuIiwkaSwkaTsgfQorfQorCiskY29kZT08PF9fXzsKKy50ZXh0CisKKy50eXBlCUFFU19UZSxcQG9iamVjdAorLmFsaWduCTI1NgorQUVTX1RlOgorX19fCismX2RhdGFfd29yZCgKKwkweGM2NjM2M2E1LCAweGY4N2M3Yzg0LCAweGVlNzc3Nzk5LCAweGY2N2I3YjhkLAorCTB4ZmZmMmYyMGQsIDB4ZDY2YjZiYmQsIDB4ZGU2ZjZmYjEsIDB4OTFjNWM1NTQsCisJMHg2MDMwMzA1MCwgMHgwMjAxMDEwMywgMHhjZTY3NjdhOSwgMHg1NjJiMmI3ZCwKKwkweGU3ZmVmZTE5LCAweGI1ZDdkNzYyLCAweDRkYWJhYmU2LCAweGVjNzY3NjlhLAorCTB4OGZjYWNhNDUsIDB4MWY4MjgyOWQsIDB4ODljOWM5NDAsIDB4ZmE3ZDdkODcsCisJMHhlZmZhZmExNSwgMHhiMjU5NTllYiwgMHg4ZTQ3NDdjOSwgMHhmYmYwZjAwYiwKKwkweDQxYWRhZGVjLCAweGIzZDRkNDY3LCAweDVmYTJhMmZkLCAweDQ1YWZhZmVhLAorCTB4MjM5YzljYmYsIDB4NTNhNGE0ZjcsIDB4ZTQ3MjcyOTYsIDB4OWJjMGMwNWIsCisJMHg3NWI3YjdjMiwgMHhlMWZkZmQxYywgMHgzZDkzOTNhZSwgMHg0YzI2MjY2YSwKKwkweDZjMzYzNjVhLCAweDdlM2YzZjQxLCAweGY1ZjdmNzAyLCAweDgzY2NjYzRmLAorCTB4NjgzNDM0NWMsIDB4NTFhNWE1ZjQsIDB4ZDFlNWU1MzQsIDB4ZjlmMWYxMDgsCisJMHhlMjcxNzE5MywgMHhhYmQ4ZDg3MywgMHg2MjMxMzE1MywgMHgyYTE1MTUzZiwKKwkweDA4MDQwNDBjLCAweDk1YzdjNzUyLCAweDQ2MjMyMzY1LCAweDlkYzNjMzVlLAorCTB4MzAxODE4MjgsIDB4Mzc5Njk2YTEsIDB4MGEwNTA1MGYsIDB4MmY5YTlhYjUsCisJMHgwZTA3MDcwOSwgMHgyNDEyMTIzNiwgMHgxYjgwODA5YiwgMHhkZmUyZTIzZCwKKwkweGNkZWJlYjI2LCAweDRlMjcyNzY5LCAweDdmYjJiMmNkLCAweGVhNzU3NTlmLAorCTB4MTIwOTA5MWIsIDB4MWQ4MzgzOWUsIDB4NTgyYzJjNzQsIDB4MzQxYTFhMmUsCisJMHgzNjFiMWIyZCwgMHhkYzZlNmViMiwgMHhiNDVhNWFlZSwgMHg1YmEwYTBmYiwKKwkweGE0NTI1MmY2LCAweDc2M2IzYjRkLCAweGI3ZDZkNjYxLCAweDdkYjNiM2NlLAorCTB4NTIyOTI5N2IsIDB4ZGRlM2UzM2UsIDB4NWUyZjJmNzEsIDB4MTM4NDg0OTcsCisJMHhhNjUzNTNmNSwgMHhiOWQxZDE2OCwgMHgwMDAwMDAwMCwgMHhjMWVkZWQyYywKKwkweDQwMjAyMDYwLCAweGUzZmNmYzFmLCAweDc5YjFiMWM4LCAweGI2NWI1YmVkLAorCTB4ZDQ2YTZhYmUsIDB4OGRjYmNiNDYsIDB4NjdiZWJlZDksIDB4NzIzOTM5NGIsCisJMHg5NDRhNGFkZSwgMHg5ODRjNGNkNCwgMHhiMDU4NThlOCwgMHg4NWNmY2Y0YSwKKwkweGJiZDBkMDZiLCAweGM1ZWZlZjJhLCAweDRmYWFhYWU1LCAweGVkZmJmYjE2LAorCTB4ODY0MzQzYzUsIDB4OWE0ZDRkZDcsIDB4NjYzMzMzNTUsIDB4MTE4NTg1OTQsCisJMHg4YTQ1NDVjZiwgMHhlOWY5ZjkxMCwgMHgwNDAyMDIwNiwgMHhmZTdmN2Y4MSwKKwkweGEwNTA1MGYwLCAweDc4M2MzYzQ0LCAweDI1OWY5ZmJhLCAweDRiYThhOGUzLAorCTB4YTI1MTUxZjMsIDB4NWRhM2EzZmUsIDB4ODA0MDQwYzAsIDB4MDU4ZjhmOGEsCisJMHgzZjkyOTJhZCwgMHgyMTlkOWRiYywgMHg3MDM4Mzg0OCwgMHhmMWY1ZjUwNCwKKwkweDYzYmNiY2RmLCAweDc3YjZiNmMxLCAweGFmZGFkYTc1LCAweDQyMjEyMTYzLAorCTB4MjAxMDEwMzAsIDB4ZTVmZmZmMWEsIDB4ZmRmM2YzMGUsIDB4YmZkMmQyNmQsCisJMHg4MWNkY2Q0YywgMHgxODBjMGMxNCwgMHgyNjEzMTMzNSwgMHhjM2VjZWMyZiwKKwkweGJlNWY1ZmUxLCAweDM1OTc5N2EyLCAweDg4NDQ0NGNjLCAweDJlMTcxNzM5LAorCTB4OTNjNGM0NTcsIDB4NTVhN2E3ZjIsIDB4ZmM3ZTdlODIsIDB4N2EzZDNkNDcsCisJMHhjODY0NjRhYywgMHhiYTVkNWRlNywgMHgzMjE5MTkyYiwgMHhlNjczNzM5NSwKKwkweGMwNjA2MGEwLCAweDE5ODE4MTk4LCAweDllNGY0ZmQxLCAweGEzZGNkYzdmLAorCTB4NDQyMjIyNjYsIDB4NTQyYTJhN2UsIDB4M2I5MDkwYWIsIDB4MGI4ODg4ODMsCisJMHg4YzQ2NDZjYSwgMHhjN2VlZWUyOSwgMHg2YmI4YjhkMywgMHgyODE0MTQzYywKKwkweGE3ZGVkZTc5LCAweGJjNWU1ZWUyLCAweDE2MGIwYjFkLCAweGFkZGJkYjc2LAorCTB4ZGJlMGUwM2IsIDB4NjQzMjMyNTYsIDB4NzQzYTNhNGUsIDB4MTQwYTBhMWUsCisJMHg5MjQ5NDlkYiwgMHgwYzA2MDYwYSwgMHg0ODI0MjQ2YywgMHhiODVjNWNlNCwKKwkweDlmYzJjMjVkLCAweGJkZDNkMzZlLCAweDQzYWNhY2VmLCAweGM0NjI2MmE2LAorCTB4Mzk5MTkxYTgsIDB4MzE5NTk1YTQsIDB4ZDNlNGU0MzcsIDB4ZjI3OTc5OGIsCisJMHhkNWU3ZTczMiwgMHg4YmM4Yzg0MywgMHg2ZTM3Mzc1OSwgMHhkYTZkNmRiNywKKwkweDAxOGQ4ZDhjLCAweGIxZDVkNTY0LCAweDljNGU0ZWQyLCAweDQ5YTlhOWUwLAorCTB4ZDg2YzZjYjQsIDB4YWM1NjU2ZmEsIDB4ZjNmNGY0MDcsIDB4Y2ZlYWVhMjUsCisJMHhjYTY1NjVhZiwgMHhmNDdhN2E4ZSwgMHg0N2FlYWVlOSwgMHgxMDA4MDgxOCwKKwkweDZmYmFiYWQ1LCAweGYwNzg3ODg4LCAweDRhMjUyNTZmLCAweDVjMmUyZTcyLAorCTB4MzgxYzFjMjQsIDB4NTdhNmE2ZjEsIDB4NzNiNGI0YzcsIDB4OTdjNmM2NTEsCisJMHhjYmU4ZTgyMywgMHhhMWRkZGQ3YywgMHhlODc0NzQ5YywgMHgzZTFmMWYyMSwKKwkweDk2NGI0YmRkLCAweDYxYmRiZGRjLCAweDBkOGI4Yjg2LCAweDBmOGE4YTg1LAorCTB4ZTA3MDcwOTAsIDB4N2MzZTNlNDIsIDB4NzFiNWI1YzQsIDB4Y2M2NjY2YWEsCisJMHg5MDQ4NDhkOCwgMHgwNjAzMDMwNSwgMHhmN2Y2ZjYwMSwgMHgxYzBlMGUxMiwKKwkweGMyNjE2MWEzLCAweDZhMzUzNTVmLCAweGFlNTc1N2Y5LCAweDY5YjliOWQwLAorCTB4MTc4Njg2OTEsIDB4OTljMWMxNTgsIDB4M2ExZDFkMjcsIDB4Mjc5ZTllYjksCisJMHhkOWUxZTEzOCwgMHhlYmY4ZjgxMywgMHgyYjk4OThiMywgMHgyMjExMTEzMywKKwkweGQyNjk2OWJiLCAweGE5ZDlkOTcwLCAweDA3OGU4ZTg5LCAweDMzOTQ5NGE3LAorCTB4MmQ5YjliYjYsIDB4M2MxZTFlMjIsIDB4MTU4Nzg3OTIsIDB4YzllOWU5MjAsCisJMHg4N2NlY2U0OSwgMHhhYTU1NTVmZiwgMHg1MDI4Mjg3OCwgMHhhNWRmZGY3YSwKKwkweDAzOGM4YzhmLCAweDU5YTFhMWY4LCAweDA5ODk4OTgwLCAweDFhMGQwZDE3LAorCTB4NjViZmJmZGEsIDB4ZDdlNmU2MzEsIDB4ODQ0MjQyYzYsIDB4ZDA2ODY4YjgsCisJMHg4MjQxNDFjMywgMHgyOTk5OTliMCwgMHg1YTJkMmQ3NywgMHgxZTBmMGYxMSwKKwkweDdiYjBiMGNiLCAweGE4NTQ1NGZjLCAweDZkYmJiYmQ2LCAweDJjMTYxNjNhKTsKKyRjb2RlLj08PF9fXzsKKyMgVGU0WzI1Nl0KKy5ieXRlCTB4NjMsIDB4N2MsIDB4NzcsIDB4N2IsIDB4ZjIsIDB4NmIsIDB4NmYsIDB4YzUKKy5ieXRlCTB4MzAsIDB4MDEsIDB4NjcsIDB4MmIsIDB4ZmUsIDB4ZDcsIDB4YWIsIDB4NzYKKy5ieXRlCTB4Y2EsIDB4ODIsIDB4YzksIDB4N2QsIDB4ZmEsIDB4NTksIDB4NDcsIDB4ZjAKKy5ieXRlCTB4YWQsIDB4ZDQsIDB4YTIsIDB4YWYsIDB4OWMsIDB4YTQsIDB4NzIsIDB4YzAKKy5ieXRlCTB4YjcsIDB4ZmQsIDB4OTMsIDB4MjYsIDB4MzYsIDB4M2YsIDB4ZjcsIDB4Y2MKKy5ieXRlCTB4MzQsIDB4YTUsIDB4ZTUsIDB4ZjEsIDB4NzEsIDB4ZDgsIDB4MzEsIDB4MTUKKy5ieXRlCTB4MDQsIDB4YzcsIDB4MjMsIDB4YzMsIDB4MTgsIDB4OTYsIDB4MDUsIDB4OWEKKy5ieXRlCTB4MDcsIDB4MTIsIDB4ODAsIDB4ZTIsIDB4ZWIsIDB4MjcsIDB4YjIsIDB4NzUKKy5ieXRlCTB4MDksIDB4ODMsIDB4MmMsIDB4MWEsIDB4MWIsIDB4NmUsIDB4NWEsIDB4YTAKKy5ieXRlCTB4NTIsIDB4M2IsIDB4ZDYsIDB4YjMsIDB4MjksIDB4ZTMsIDB4MmYsIDB4ODQKKy5ieXRlCTB4NTMsIDB4ZDEsIDB4MDAsIDB4ZWQsIDB4MjAsIDB4ZmMsIDB4YjEsIDB4NWIKKy5ieXRlCTB4NmEsIDB4Y2IsIDB4YmUsIDB4MzksIDB4NGEsIDB4NGMsIDB4NTgsIDB4Y2YKKy5ieXRlCTB4ZDAsIDB4ZWYsIDB4YWEsIDB4ZmIsIDB4NDMsIDB4NGQsIDB4MzMsIDB4ODUKKy5ieXRlCTB4NDUsIDB4ZjksIDB4MDIsIDB4N2YsIDB4NTAsIDB4M2MsIDB4OWYsIDB4YTgKKy5ieXRlCTB4NTEsIDB4YTMsIDB4NDAsIDB4OGYsIDB4OTIsIDB4OWQsIDB4MzgsIDB4ZjUKKy5ieXRlCTB4YmMsIDB4YjYsIDB4ZGEsIDB4MjEsIDB4MTAsIDB4ZmYsIDB4ZjMsIDB4ZDIKKy5ieXRlCTB4Y2QsIDB4MGMsIDB4MTMsIDB4ZWMsIDB4NWYsIDB4OTcsIDB4NDQsIDB4MTcKKy5ieXRlCTB4YzQsIDB4YTcsIDB4N2UsIDB4M2QsIDB4NjQsIDB4NWQsIDB4MTksIDB4NzMKKy5ieXRlCTB4NjAsIDB4ODEsIDB4NGYsIDB4ZGMsIDB4MjIsIDB4MmEsIDB4OTAsIDB4ODgKKy5ieXRlCTB4NDYsIDB4ZWUsIDB4YjgsIDB4MTQsIDB4ZGUsIDB4NWUsIDB4MGIsIDB4ZGIKKy5ieXRlCTB4ZTAsIDB4MzIsIDB4M2EsIDB4MGEsIDB4NDksIDB4MDYsIDB4MjQsIDB4NWMKKy5ieXRlCTB4YzIsIDB4ZDMsIDB4YWMsIDB4NjIsIDB4OTEsIDB4OTUsIDB4ZTQsIDB4NzkKKy5ieXRlCTB4ZTcsIDB4YzgsIDB4MzcsIDB4NmQsIDB4OGQsIDB4ZDUsIDB4NGUsIDB4YTkKKy5ieXRlCTB4NmMsIDB4NTYsIDB4ZjQsIDB4ZWEsIDB4NjUsIDB4N2EsIDB4YWUsIDB4MDgKKy5ieXRlCTB4YmEsIDB4NzgsIDB4MjUsIDB4MmUsIDB4MWMsIDB4YTYsIDB4YjQsIDB4YzYKKy5ieXRlCTB4ZTgsIDB4ZGQsIDB4NzQsIDB4MWYsIDB4NGIsIDB4YmQsIDB4OGIsIDB4OGEKKy5ieXRlCTB4NzAsIDB4M2UsIDB4YjUsIDB4NjYsIDB4NDgsIDB4MDMsIDB4ZjYsIDB4MGUKKy5ieXRlCTB4NjEsIDB4MzUsIDB4NTcsIDB4YjksIDB4ODYsIDB4YzEsIDB4MWQsIDB4OWUKKy5ieXRlCTB4ZTEsIDB4ZjgsIDB4OTgsIDB4MTEsIDB4NjksIDB4ZDksIDB4OGUsIDB4OTQKKy5ieXRlCTB4OWIsIDB4MWUsIDB4ODcsIDB4ZTksIDB4Y2UsIDB4NTUsIDB4MjgsIDB4ZGYKKy5ieXRlCTB4OGMsIDB4YTEsIDB4ODksIDB4MGQsIDB4YmYsIDB4ZTYsIDB4NDIsIDB4NjgKKy5ieXRlCTB4NDEsIDB4OTksIDB4MmQsIDB4MGYsIDB4YjAsIDB4NTQsIDB4YmIsIDB4MTYKKyMgcmNvbltdCisubG9uZwkweDAxMDAwMDAwLCAweDAyMDAwMDAwLCAweDA0MDAwMDAwLCAweDA4MDAwMDAwCisubG9uZwkweDEwMDAwMDAwLCAweDIwMDAwMDAwLCAweDQwMDAwMDAwLCAweDgwMDAwMDAwCisubG9uZwkweDFCMDAwMDAwLCAweDM2MDAwMDAwLCAwLCAwLCAwLCAwLCAwLCAwCisuYWxpZ24JMjU2Cisuc2l6ZQlBRVNfVGUsLi1BRVNfVGUKKworIyB2b2lkIEFFU19lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucCwgdW5zaWduZWQgY2hhciAqb3V0LAorIyAJCSBjb25zdCBBRVNfS0VZICprZXkpIHsKKy5nbG9ibAlBRVNfZW5jcnlwdAorLnR5cGUJQUVTX2VuY3J5cHQsXEBmdW5jdGlvbgorQUVTX2VuY3J5cHQ6CitfX18KKyRjb2RlLj08PF9fXyBpZiAoISRzb2Z0b25seSk7CisJbAklcjAsMjQwKCRrZXkpCisJbGhpCSVyMSwxNgorCWNscgklcjAsJXIxCisJamwJLkxlc29mdAorCisJbGEJJXIxLDAoJGtleSkKKwkjbGEJJXIyLDAoJGlucCkKKwlsYQklcjQsMCgkb3V0KQorCWxnaGkJJXIzLDE2CQkjIHNpbmdsZSBibG9jayBsZW5ndGgKKwkubG9uZwkweGI5MmUwMDQyCSMga20gJXI0LCVyMgorCWJyYwkxLC4tNAkJIyBjYW4gdGhpcyBoYXBwZW4/CisJYnIJJXIxNAorLmFsaWduCTY0CisuTGVzb2Z0OgorX19fCiskY29kZS49PDxfX187CisJc3RtZwklcjMsJHJhLDI0KCRzcCkKKworCWxsZ2YJJHMwLDAoJGlucCkKKwlsbGdmCSRzMSw0KCRpbnApCisJbGxnZgkkczIsOCgkaW5wKQorCWxsZ2YJJHMzLDEyKCRpbnApCisKKwlsYXJsCSR0YmwsQUVTX1RlCisJYnJhcwkkcmEsX3MzOTB4X0FFU19lbmNyeXB0CisKKwlsZwkkb3V0LDI0KCRzcCkKKwlzdAkkczAsMCgkb3V0KQorCXN0CSRzMSw0KCRvdXQpCisJc3QJJHMyLDgoJG91dCkKKwlzdAkkczMsMTIoJG91dCkKKworCWxtZwklcjYsJHJhLDQ4KCRzcCkKKwlicgkkcmEKKy5zaXplCUFFU19lbmNyeXB0LC4tQUVTX2VuY3J5cHQKKworLnR5cGUgICBfczM5MHhfQUVTX2VuY3J5cHQsXEBmdW5jdGlvbgorLmFsaWduCTE2CitfczM5MHhfQUVTX2VuY3J5cHQ6CisJc3RnCSRyYSwxNTIoJHNwKQorCXgJJHMwLDAoJGtleSkKKwl4CSRzMSw0KCRrZXkpCisJeAkkczIsOCgka2V5KQorCXgJJHMzLDEyKCRrZXkpCisJbAkkcm91bmRzLDI0MCgka2V5KQorCWxsaWxsCSRtYXNrLGAweGZmPDwzYAorCWFnaGkJJHJvdW5kcywtMQorCWoJLkxlbmNfbG9vcAorLmFsaWduCTE2CisuTGVuY19sb29wOgorCXNsbGcJJHQxLCRzMCxgMCszYAorCXNybGcJJHQyLCRzMCxgOC0zYAorCXNybGcJJHQzLCRzMCxgMTYtM2AKKwlzcmwJJHMwLGAyNC0zYAorCW5yCSRzMCwkbWFzaworCW5ncgkkdDEsJG1hc2sKKwlucgkkdDIsJG1hc2sKKwlucgkkdDMsJG1hc2sKKworCXNybGcJJGkxLCRzMSxgMTYtM2AJIyBpMAorCXNsbGcJJGkyLCRzMSxgMCszYAorCXNybGcJJGkzLCRzMSxgOC0zYAorCXNybAkkczEsYDI0LTNgCisJbnIJJGkxLCRtYXNrCisJbnIJJHMxLCRtYXNrCisJbmdyCSRpMiwkbWFzaworCW5yCSRpMywkbWFzaworCisJbAkkczAsMCgkczAsJHRibCkJIyBUZTBbczA+PjI0XQorCWwJJHQxLDEoJHQxLCR0YmwpCSMgVGUzW3MwPj4wXQorCWwJJHQyLDIoJHQyLCR0YmwpICMgVGUyW3MwPj44XQorCWwJJHQzLDMoJHQzLCR0YmwpCSMgVGUxW3MwPj4xNl0KKworCXgJJHMwLDMoJGkxLCR0YmwpCSMgVGUxW3MxPj4xNl0KKwlsCSRzMSwwKCRzMSwkdGJsKQkjIFRlMFtzMT4+MjRdCisJeAkkdDIsMSgkaTIsJHRibCkJIyBUZTNbczE+PjBdCisJeAkkdDMsMigkaTMsJHRibCkJIyBUZTJbczE+PjhdCisKKwlzcmxnCSRpMSwkczIsYDgtM2AJIyBpMAorCXNybGcJJGkyLCRzMixgMTYtM2AJIyBpMQorCW5yCSRpMSwkbWFzaworCW5yCSRpMiwkbWFzaworCXNsbGcJJGkzLCRzMixgMCszYAorCXNybAkkczIsYDI0LTNgCisJbnIJJHMyLCRtYXNrCisJbmdyCSRpMywkbWFzaworCisJeHIJJHMxLCR0MQorCXNybGcJJHJhLCRzMyxgOC0zYAkjIGkxCisJc2xsZwkkdDEsJHMzLGAwKzNgCSMgaTAKKwlucgkkcmEsJG1hc2sKKwlsYQkka2V5LDE2KCRrZXkpCisJbmdyCSR0MSwkbWFzaworCisJeAkkczAsMigkaTEsJHRibCkJIyBUZTJbczI+PjhdCisJeAkkczEsMygkaTIsJHRibCkJIyBUZTFbczI+PjE2XQorCWwJJHMyLDAoJHMyLCR0YmwpCSMgVGUwW3MyPj4yNF0KKwl4CSR0MywxKCRpMywkdGJsKQkjIFRlM1tzMj4+MF0KKworCXNybGcJJGkzLCRzMyxgMTYtM2AJIyBpMgorCXhyCSRzMiwkdDIKKwlzcmwJJHMzLGAyNC0zYAorCW5yCSRpMywkbWFzaworCW5yCSRzMywkbWFzaworCisJeAkkczAsMCgka2V5KQorCXgJJHMxLDQoJGtleSkKKwl4CSRzMiw4KCRrZXkpCisJeAkkdDMsMTIoJGtleSkKKworCXgJJHMwLDEoJHQxLCR0YmwpCSMgVGUzW3MzPj4wXQorCXgJJHMxLDIoJHJhLCR0YmwpCSMgVGUyW3MzPj44XQorCXgJJHMyLDMoJGkzLCR0YmwpCSMgVGUxW3MzPj4xNl0KKwlsCSRzMywwKCRzMywkdGJsKQkjIFRlMFtzMz4+MjRdCisJeHIJJHMzLCR0MworCisJYnJjdAkkcm91bmRzLC5MZW5jX2xvb3AKKwkuYWxpZ24JMTYKKworCXNsbGcJJHQxLCRzMCxgMCszYAorCXNybGcJJHQyLCRzMCxgOC0zYAorCW5ncgkkdDEsJG1hc2sKKwlzcmxnCSR0MywkczAsYDE2LTNgCisJc3JsCSRzMCxgMjQtM2AKKwlucgkkczAsJG1hc2sKKwlucgkkdDIsJG1hc2sKKwlucgkkdDMsJG1hc2sKKworCXNybGcJJGkxLCRzMSxgMTYtM2AJIyBpMAorCXNsbGcJJGkyLCRzMSxgMCszYAorCW5ncgkkaTIsJG1hc2sKKwlzcmxnCSRpMywkczEsYDgtM2AKKwlzcmwJJHMxLGAyNC0zYAorCW5yCSRpMSwkbWFzaworCW5yCSRzMSwkbWFzaworCW5yCSRpMywkbWFzaworCisJbGxnYwkkczAsMigkczAsJHRibCkJIyBUZTRbczA+PjI0XQorCWxsZ2MJJHQxLDIoJHQxLCR0YmwpCSMgVGU0W3MwPj4wXQorCXNsbAkkczAsMjQKKwlsbGdjCSR0MiwyKCR0MiwkdGJsKQkjIFRlNFtzMD4+OF0KKwlsbGdjCSR0MywyKCR0MywkdGJsKQkjIFRlNFtzMD4+MTZdCisJc2xsCSR0Miw4CisJc2xsCSR0MywxNgorCisJbGxnYwkkaTEsMigkaTEsJHRibCkJIyBUZTRbczE+PjE2XQorCWxsZ2MJJHMxLDIoJHMxLCR0YmwpCSMgVGU0W3MxPj4yNF0KKwlsbGdjCSRpMiwyKCRpMiwkdGJsKQkjIFRlNFtzMT4+MF0KKwlsbGdjCSRpMywyKCRpMywkdGJsKQkjIFRlNFtzMT4+OF0KKwlzbGwJJGkxLDE2CisJc2xsCSRzMSwyNAorCXNsbAkkaTMsOAorCW9yCSRzMCwkaTEKKwlvcgkkczEsJHQxCisJb3IJJHQyLCRpMgorCW9yCSR0MywkaTMKKwkKKwlzcmxnCSRpMSwkczIsYDgtM2AJIyBpMAorCXNybGcJJGkyLCRzMixgMTYtM2AJIyBpMQorCW5yCSRpMSwkbWFzaworCW5yCSRpMiwkbWFzaworCXNsbGcJJGkzLCRzMixgMCszYAorCXNybAkkczIsYDI0LTNgCisJbmdyCSRpMywkbWFzaworCW5yCSRzMiwkbWFzaworCisJc2xsZwkkdDEsJHMzLGAwKzNgCSMgaTAKKwlzcmxnCSRyYSwkczMsYDgtM2AJIyBpMQorCW5ncgkkdDEsJG1hc2sKKworCWxsZ2MJJGkxLDIoJGkxLCR0YmwpCSMgVGU0W3MyPj44XQorCWxsZ2MJJGkyLDIoJGkyLCR0YmwpCSMgVGU0W3MyPj4xNl0KKwlzbGwJJGkxLDgKKwlsbGdjCSRzMiwyKCRzMiwkdGJsKQkjIFRlNFtzMj4+MjRdCisJbGxnYwkkaTMsMigkaTMsJHRibCkJIyBUZTRbczI+PjBdCisJc2xsCSRpMiwxNgorCW5yCSRyYSwkbWFzaworCXNsbAkkczIsMjQKKwlvcgkkczAsJGkxCisJb3IJJHMxLCRpMgorCW9yCSRzMiwkdDIKKwlvcgkkdDMsJGkzCisKKwlzcmxnCSRpMywkczMsYDE2LTNgCSMgaTIKKwlzcmwJJHMzLGAyNC0zYAorCW5yCSRpMywkbWFzaworCW5yCSRzMywkbWFzaworCisJbAkkdDAsMTYoJGtleSkKKwlsCSR0MiwyMCgka2V5KQorCisJbGxnYwkkaTEsMigkdDEsJHRibCkJIyBUZTRbczM+PjBdCisJbGxnYwkkaTIsMigkcmEsJHRibCkJIyBUZTRbczM+PjhdCisJbGxnYwkkaTMsMigkaTMsJHRibCkJIyBUZTRbczM+PjE2XQorCWxsZ2MJJHMzLDIoJHMzLCR0YmwpCSMgVGU0W3MzPj4yNF0KKwlzbGwJJGkyLDgKKwlzbGwJJGkzLDE2CisJc2xsCSRzMywyNAorCW9yCSRzMCwkaTEKKwlvcgkkczEsJGkyCisJb3IJJHMyLCRpMworCW9yCSRzMywkdDMKKworCWxnCSRyYSwxNTIoJHNwKQorCXhyCSRzMCwkdDAKKwl4cgkkczEsJHQyCisJeAkkczIsMjQoJGtleSkKKwl4CSRzMywyOCgka2V5KQorCisJYnIJJHJhCQorLnNpemUJX3MzOTB4X0FFU19lbmNyeXB0LC4tX3MzOTB4X0FFU19lbmNyeXB0CitfX18KKworJGNvZGUuPTw8X19fOworLnR5cGUJQUVTX1RkLFxAb2JqZWN0CisuYWxpZ24JMjU2CitBRVNfVGQ6CitfX18KKyZfZGF0YV93b3JkKAorCTB4NTFmNGE3NTAsIDB4N2U0MTY1NTMsIDB4MWExN2E0YzMsIDB4M2EyNzVlOTYsCisJMHgzYmFiNmJjYiwgMHgxZjlkNDVmMSwgMHhhY2ZhNThhYiwgMHg0YmUzMDM5MywKKwkweDIwMzBmYTU1LCAweGFkNzY2ZGY2LCAweDg4Y2M3NjkxLCAweGY1MDI0YzI1LAorCTB4NGZlNWQ3ZmMsIDB4YzUyYWNiZDcsIDB4MjYzNTQ0ODAsIDB4YjU2MmEzOGYsCisJMHhkZWIxNWE0OSwgMHgyNWJhMWI2NywgMHg0NWVhMGU5OCwgMHg1ZGZlYzBlMSwKKwkweGMzMmY3NTAyLCAweDgxNGNmMDEyLCAweDhkNDY5N2EzLCAweDZiZDNmOWM2LAorCTB4MDM4ZjVmZTcsIDB4MTU5MjljOTUsIDB4YmY2ZDdhZWIsIDB4OTU1MjU5ZGEsCisJMHhkNGJlODMyZCwgMHg1ODc0MjFkMywgMHg0OWUwNjkyOSwgMHg4ZWM5Yzg0NCwKKwkweDc1YzI4OTZhLCAweGY0OGU3OTc4LCAweDk5NTgzZTZiLCAweDI3Yjk3MWRkLAorCTB4YmVlMTRmYjYsIDB4ZjA4OGFkMTcsIDB4YzkyMGFjNjYsIDB4N2RjZTNhYjQsCisJMHg2M2RmNGExOCwgMHhlNTFhMzE4MiwgMHg5NzUxMzM2MCwgMHg2MjUzN2Y0NSwKKwkweGIxNjQ3N2UwLCAweGJiNmJhZTg0LCAweGZlODFhMDFjLCAweGY5MDgyYjk0LAorCTB4NzA0ODY4NTgsIDB4OGY0NWZkMTksIDB4OTRkZTZjODcsIDB4NTI3YmY4YjcsCisJMHhhYjczZDMyMywgMHg3MjRiMDJlMiwgMHhlMzFmOGY1NywgMHg2NjU1YWIyYSwKKwkweGIyZWIyODA3LCAweDJmYjVjMjAzLCAweDg2YzU3YjlhLCAweGQzMzcwOGE1LAorCTB4MzAyODg3ZjIsIDB4MjNiZmE1YjIsIDB4MDIwMzZhYmEsIDB4ZWQxNjgyNWMsCisJMHg4YWNmMWMyYiwgMHhhNzc5YjQ5MiwgMHhmMzA3ZjJmMCwgMHg0ZTY5ZTJhMSwKKwkweDY1ZGFmNGNkLCAweDA2MDViZWQ1LCAweGQxMzQ2MjFmLCAweGM0YTZmZThhLAorCTB4MzQyZTUzOWQsIDB4YTJmMzU1YTAsIDB4MDU4YWUxMzIsIDB4YTRmNmViNzUsCisJMHgwYjgzZWMzOSwgMHg0MDYwZWZhYSwgMHg1ZTcxOWYwNiwgMHhiZDZlMTA1MSwKKwkweDNlMjE4YWY5LCAweDk2ZGQwNjNkLCAweGRkM2UwNWFlLCAweDRkZTZiZDQ2LAorCTB4OTE1NDhkYjUsIDB4NzFjNDVkMDUsIDB4MDQwNmQ0NmYsIDB4NjA1MDE1ZmYsCisJMHgxOTk4ZmIyNCwgMHhkNmJkZTk5NywgMHg4OTQwNDNjYywgMHg2N2Q5OWU3NywKKwkweGIwZTg0MmJkLCAweDA3ODk4Yjg4LCAweGU3MTk1YjM4LCAweDc5YzhlZWRiLAorCTB4YTE3YzBhNDcsIDB4N2M0MjBmZTksIDB4Zjg4NDFlYzksIDB4MDAwMDAwMDAsCisJMHgwOTgwODY4MywgMHgzMjJiZWQ0OCwgMHgxZTExNzBhYywgMHg2YzVhNzI0ZSwKKwkweGZkMGVmZmZiLCAweDBmODUzODU2LCAweDNkYWVkNTFlLCAweDM2MmQzOTI3LAorCTB4MGEwZmQ5NjQsIDB4Njg1Y2E2MjEsIDB4OWI1YjU0ZDEsIDB4MjQzNjJlM2EsCisJMHgwYzBhNjdiMSwgMHg5MzU3ZTcwZiwgMHhiNGVlOTZkMiwgMHgxYjliOTE5ZSwKKwkweDgwYzBjNTRmLCAweDYxZGMyMGEyLCAweDVhNzc0YjY5LCAweDFjMTIxYTE2LAorCTB4ZTI5M2JhMGEsIDB4YzBhMDJhZTUsIDB4M2MyMmUwNDMsIDB4MTIxYjE3MWQsCisJMHgwZTA5MGQwYiwgMHhmMjhiYzdhZCwgMHgyZGI2YThiOSwgMHgxNDFlYTljOCwKKwkweDU3ZjExOTg1LCAweGFmNzUwNzRjLCAweGVlOTlkZGJiLCAweGEzN2Y2MGZkLAorCTB4ZjcwMTI2OWYsIDB4NWM3MmY1YmMsIDB4NDQ2NjNiYzUsIDB4NWJmYjdlMzQsCisJMHg4YjQzMjk3NiwgMHhjYjIzYzZkYywgMHhiNmVkZmM2OCwgMHhiOGU0ZjE2MywKKwkweGQ3MzFkY2NhLCAweDQyNjM4NTEwLCAweDEzOTcyMjQwLCAweDg0YzYxMTIwLAorCTB4ODU0YTI0N2QsIDB4ZDJiYjNkZjgsIDB4YWVmOTMyMTEsIDB4YzcyOWExNmQsCisJMHgxZDllMmY0YiwgMHhkY2IyMzBmMywgMHgwZDg2NTJlYywgMHg3N2MxZTNkMCwKKwkweDJiYjMxNjZjLCAweGE5NzBiOTk5LCAweDExOTQ0OGZhLCAweDQ3ZTk2NDIyLAorCTB4YThmYzhjYzQsIDB4YTBmMDNmMWEsIDB4NTY3ZDJjZDgsIDB4MjIzMzkwZWYsCisJMHg4NzQ5NGVjNywgMHhkOTM4ZDFjMSwgMHg4Y2NhYTJmZSwgMHg5OGQ0MGIzNiwKKwkweGE2ZjU4MWNmLCAweGE1N2FkZTI4LCAweGRhYjc4ZTI2LCAweDNmYWRiZmE0LAorCTB4MmMzYTlkZTQsIDB4NTA3ODkyMGQsIDB4NmE1ZmNjOWIsIDB4NTQ3ZTQ2NjIsCisJMHhmNjhkMTNjMiwgMHg5MGQ4YjhlOCwgMHgyZTM5Zjc1ZSwgMHg4MmMzYWZmNSwKKwkweDlmNWQ4MGJlLCAweDY5ZDA5MzdjLCAweDZmZDUyZGE5LCAweGNmMjUxMmIzLAorCTB4YzhhYzk5M2IsIDB4MTAxODdkYTcsIDB4ZTg5YzYzNmUsIDB4ZGIzYmJiN2IsCisJMHhjZDI2NzgwOSwgMHg2ZTU5MThmNCwgMHhlYzlhYjcwMSwgMHg4MzRmOWFhOCwKKwkweGU2OTU2ZTY1LCAweGFhZmZlNjdlLCAweDIxYmNjZjA4LCAweGVmMTVlOGU2LAorCTB4YmFlNzliZDksIDB4NGE2ZjM2Y2UsIDB4ZWE5ZjA5ZDQsIDB4MjliMDdjZDYsCisJMHgzMWE0YjJhZiwgMHgyYTNmMjMzMSwgMHhjNmE1OTQzMCwgMHgzNWEyNjZjMCwKKwkweDc0NGViYzM3LCAweGZjODJjYWE2LCAweGUwOTBkMGIwLCAweDMzYTdkODE1LAorCTB4ZjEwNDk4NGEsIDB4NDFlY2RhZjcsIDB4N2ZjZDUwMGUsIDB4MTc5MWY2MmYsCisJMHg3NjRkZDY4ZCwgMHg0M2VmYjA0ZCwgMHhjY2FhNGQ1NCwgMHhlNDk2MDRkZiwKKwkweDllZDFiNWUzLCAweDRjNmE4ODFiLCAweGMxMmMxZmI4LCAweDQ2NjU1MTdmLAorCTB4OWQ1ZWVhMDQsIDB4MDE4YzM1NWQsIDB4ZmE4Nzc0NzMsIDB4ZmIwYjQxMmUsCisJMHhiMzY3MWQ1YSwgMHg5MmRiZDI1MiwgMHhlOTEwNTYzMywgMHg2ZGQ2NDcxMywKKwkweDlhZDc2MThjLCAweDM3YTEwYzdhLCAweDU5ZjgxNDhlLCAweGViMTMzYzg5LAorCTB4Y2VhOTI3ZWUsIDB4Yjc2MWM5MzUsIDB4ZTExY2U1ZWQsIDB4N2E0N2IxM2MsCisJMHg5Y2QyZGY1OSwgMHg1NWYyNzMzZiwgMHgxODE0Y2U3OSwgMHg3M2M3MzdiZiwKKwkweDUzZjdjZGVhLCAweDVmZmRhYTViLCAweGRmM2Q2ZjE0LCAweDc4NDRkYjg2LAorCTB4Y2FhZmYzODEsIDB4Yjk2OGM0M2UsIDB4MzgyNDM0MmMsIDB4YzJhMzQwNWYsCisJMHgxNjFkYzM3MiwgMHhiY2UyMjUwYywgMHgyODNjNDk4YiwgMHhmZjBkOTU0MSwKKwkweDM5YTgwMTcxLCAweDA4MGNiM2RlLCAweGQ4YjRlNDljLCAweDY0NTZjMTkwLAorCTB4N2JjYjg0NjEsIDB4ZDUzMmI2NzAsIDB4NDg2YzVjNzQsIDB4ZDBiODU3NDIpOworJGNvZGUuPTw8X19fOworIyBUZDRbMjU2XQorLmJ5dGUJMHg1MiwgMHgwOSwgMHg2YSwgMHhkNSwgMHgzMCwgMHgzNiwgMHhhNSwgMHgzOAorLmJ5dGUJMHhiZiwgMHg0MCwgMHhhMywgMHg5ZSwgMHg4MSwgMHhmMywgMHhkNywgMHhmYgorLmJ5dGUJMHg3YywgMHhlMywgMHgzOSwgMHg4MiwgMHg5YiwgMHgyZiwgMHhmZiwgMHg4NworLmJ5dGUJMHgzNCwgMHg4ZSwgMHg0MywgMHg0NCwgMHhjNCwgMHhkZSwgMHhlOSwgMHhjYgorLmJ5dGUJMHg1NCwgMHg3YiwgMHg5NCwgMHgzMiwgMHhhNiwgMHhjMiwgMHgyMywgMHgzZAorLmJ5dGUJMHhlZSwgMHg0YywgMHg5NSwgMHgwYiwgMHg0MiwgMHhmYSwgMHhjMywgMHg0ZQorLmJ5dGUJMHgwOCwgMHgyZSwgMHhhMSwgMHg2NiwgMHgyOCwgMHhkOSwgMHgyNCwgMHhiMgorLmJ5dGUJMHg3NiwgMHg1YiwgMHhhMiwgMHg0OSwgMHg2ZCwgMHg4YiwgMHhkMSwgMHgyNQorLmJ5dGUJMHg3MiwgMHhmOCwgMHhmNiwgMHg2NCwgMHg4NiwgMHg2OCwgMHg5OCwgMHgxNgorLmJ5dGUJMHhkNCwgMHhhNCwgMHg1YywgMHhjYywgMHg1ZCwgMHg2NSwgMHhiNiwgMHg5MgorLmJ5dGUJMHg2YywgMHg3MCwgMHg0OCwgMHg1MCwgMHhmZCwgMHhlZCwgMHhiOSwgMHhkYQorLmJ5dGUJMHg1ZSwgMHgxNSwgMHg0NiwgMHg1NywgMHhhNywgMHg4ZCwgMHg5ZCwgMHg4NAorLmJ5dGUJMHg5MCwgMHhkOCwgMHhhYiwgMHgwMCwgMHg4YywgMHhiYywgMHhkMywgMHgwYQorLmJ5dGUJMHhmNywgMHhlNCwgMHg1OCwgMHgwNSwgMHhiOCwgMHhiMywgMHg0NSwgMHgwNgorLmJ5dGUJMHhkMCwgMHgyYywgMHgxZSwgMHg4ZiwgMHhjYSwgMHgzZiwgMHgwZiwgMHgwMgorLmJ5dGUJMHhjMSwgMHhhZiwgMHhiZCwgMHgwMywgMHgwMSwgMHgxMywgMHg4YSwgMHg2YgorLmJ5dGUJMHgzYSwgMHg5MSwgMHgxMSwgMHg0MSwgMHg0ZiwgMHg2NywgMHhkYywgMHhlYQorLmJ5dGUJMHg5NywgMHhmMiwgMHhjZiwgMHhjZSwgMHhmMCwgMHhiNCwgMHhlNiwgMHg3MworLmJ5dGUJMHg5NiwgMHhhYywgMHg3NCwgMHgyMiwgMHhlNywgMHhhZCwgMHgzNSwgMHg4NQorLmJ5dGUJMHhlMiwgMHhmOSwgMHgzNywgMHhlOCwgMHgxYywgMHg3NSwgMHhkZiwgMHg2ZQorLmJ5dGUJMHg0NywgMHhmMSwgMHgxYSwgMHg3MSwgMHgxZCwgMHgyOSwgMHhjNSwgMHg4OQorLmJ5dGUJMHg2ZiwgMHhiNywgMHg2MiwgMHgwZSwgMHhhYSwgMHgxOCwgMHhiZSwgMHgxYgorLmJ5dGUJMHhmYywgMHg1NiwgMHgzZSwgMHg0YiwgMHhjNiwgMHhkMiwgMHg3OSwgMHgyMAorLmJ5dGUJMHg5YSwgMHhkYiwgMHhjMCwgMHhmZSwgMHg3OCwgMHhjZCwgMHg1YSwgMHhmNAorLmJ5dGUJMHgxZiwgMHhkZCwgMHhhOCwgMHgzMywgMHg4OCwgMHgwNywgMHhjNywgMHgzMQorLmJ5dGUJMHhiMSwgMHgxMiwgMHgxMCwgMHg1OSwgMHgyNywgMHg4MCwgMHhlYywgMHg1ZgorLmJ5dGUJMHg2MCwgMHg1MSwgMHg3ZiwgMHhhOSwgMHgxOSwgMHhiNSwgMHg0YSwgMHgwZAorLmJ5dGUJMHgyZCwgMHhlNSwgMHg3YSwgMHg5ZiwgMHg5MywgMHhjOSwgMHg5YywgMHhlZgorLmJ5dGUJMHhhMCwgMHhlMCwgMHgzYiwgMHg0ZCwgMHhhZSwgMHgyYSwgMHhmNSwgMHhiMAorLmJ5dGUJMHhjOCwgMHhlYiwgMHhiYiwgMHgzYywgMHg4MywgMHg1MywgMHg5OSwgMHg2MQorLmJ5dGUJMHgxNywgMHgyYiwgMHgwNCwgMHg3ZSwgMHhiYSwgMHg3NywgMHhkNiwgMHgyNgorLmJ5dGUJMHhlMSwgMHg2OSwgMHgxNCwgMHg2MywgMHg1NSwgMHgyMSwgMHgwYywgMHg3ZAorLnNpemUJQUVTX1RkLC4tQUVTX1RkCisKKyMgdm9pZCBBRVNfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbnAsIHVuc2lnbmVkIGNoYXIgKm91dCwKKyMgCQkgY29uc3QgQUVTX0tFWSAqa2V5KSB7CisuZ2xvYmwJQUVTX2RlY3J5cHQKKy50eXBlCUFFU19kZWNyeXB0LFxAZnVuY3Rpb24KK0FFU19kZWNyeXB0OgorX19fCiskY29kZS49PDxfX18gaWYgKCEkc29mdG9ubHkpOworCWwJJXIwLDI0MCgka2V5KQorCWxoaQklcjEsMTYKKwljbHIJJXIwLCVyMQorCWpsCS5MZHNvZnQKKworCWxhCSVyMSwwKCRrZXkpCisJI2xhCSVyMiwwKCRpbnApCisJbGEJJXI0LDAoJG91dCkKKwlsZ2hpCSVyMywxNgkJIyBzaW5nbGUgYmxvY2sgbGVuZ3RoCisJLmxvbmcJMHhiOTJlMDA0MgkjIGttICVyNCwlcjIKKwlicmMJMSwuLTQJCSMgY2FuIHRoaXMgaGFwcGVuPworCWJyCSVyMTQKKy5hbGlnbgk2NAorLkxkc29mdDoKK19fXworJGNvZGUuPTw8X19fOworCXN0bWcJJXIzLCRyYSwyNCgkc3ApCisKKwlsbGdmCSRzMCwwKCRpbnApCisJbGxnZgkkczEsNCgkaW5wKQorCWxsZ2YJJHMyLDgoJGlucCkKKwlsbGdmCSRzMywxMigkaW5wKQorCisJbGFybAkkdGJsLEFFU19UZAorCWJyYXMJJHJhLF9zMzkweF9BRVNfZGVjcnlwdAorCisJbGcJJG91dCwyNCgkc3ApCisJc3QJJHMwLDAoJG91dCkKKwlzdAkkczEsNCgkb3V0KQorCXN0CSRzMiw4KCRvdXQpCisJc3QJJHMzLDEyKCRvdXQpCisKKwlsbWcJJXI2LCRyYSw0OCgkc3ApCisJYnIJJHJhCisuc2l6ZQlBRVNfZGVjcnlwdCwuLUFFU19kZWNyeXB0CisKKy50eXBlICAgX3MzOTB4X0FFU19kZWNyeXB0LFxAZnVuY3Rpb24KKy5hbGlnbgkxNgorX3MzOTB4X0FFU19kZWNyeXB0OgorCXN0ZwkkcmEsMTUyKCRzcCkKKwl4CSRzMCwwKCRrZXkpCisJeAkkczEsNCgka2V5KQorCXgJJHMyLDgoJGtleSkKKwl4CSRzMywxMigka2V5KQorCWwJJHJvdW5kcywyNDAoJGtleSkKKwlsbGlsbAkkbWFzayxgMHhmZjw8M2AKKwlhZ2hpCSRyb3VuZHMsLTEKKwlqCS5MZGVjX2xvb3AKKy5hbGlnbgkxNgorLkxkZWNfbG9vcDoKKwlzcmxnCSR0MSwkczAsYDE2LTNgCisJc3JsZwkkdDIsJHMwLGA4LTNgCisJc2xsZwkkdDMsJHMwLGAwKzNgCisJc3JsCSRzMCxgMjQtM2AKKwlucgkkczAsJG1hc2sKKwlucgkkdDEsJG1hc2sKKwlucgkkdDIsJG1hc2sKKwluZ3IJJHQzLCRtYXNrCisKKwlzbGxnCSRpMSwkczEsYDArM2AJIyBpMAorCXNybGcJJGkyLCRzMSxgMTYtM2AKKwlzcmxnCSRpMywkczEsYDgtM2AKKwlzcmwJJHMxLGAyNC0zYAorCW5ncgkkaTEsJG1hc2sKKwlucgkkczEsJG1hc2sKKwlucgkkaTIsJG1hc2sKKwlucgkkaTMsJG1hc2sKKworCWwJJHMwLDAoJHMwLCR0YmwpCSMgVGQwW3MwPj4yNF0KKwlsCSR0MSwzKCR0MSwkdGJsKQkjIFRkMVtzMD4+MTZdCisJbAkkdDIsMigkdDIsJHRibCkJIyBUZDJbczA+PjhdCisJbAkkdDMsMSgkdDMsJHRibCkJIyBUZDNbczA+PjBdCisKKwl4CSRzMCwxKCRpMSwkdGJsKQkjIFRkM1tzMT4+MF0KKwlsCSRzMSwwKCRzMSwkdGJsKQkjIFRkMFtzMT4+MjRdCisJeAkkdDIsMygkaTIsJHRibCkJIyBUZDFbczE+PjE2XQorCXgJJHQzLDIoJGkzLCR0YmwpCSMgVGQyW3MxPj44XQorCisJc3JsZwkkaTEsJHMyLGA4LTNgCSMgaTAKKwlzbGxnCSRpMiwkczIsYDArM2AJIyBpMQorCXNybGcJJGkzLCRzMixgMTYtM2AKKwlzcmwJJHMyLGAyNC0zYAorCW5yCSRpMSwkbWFzaworCW5ncgkkaTIsJG1hc2sKKwlucgkkczIsJG1hc2sKKwlucgkkaTMsJG1hc2sKKworCXhyCSRzMSwkdDEKKwlzcmxnCSRyYSwkczMsYDgtM2AJIyBpMQorCXNybGcJJHQxLCRzMyxgMTYtM2AJIyBpMAorCW5yCSRyYSwkbWFzaworCWxhCSRrZXksMTYoJGtleSkKKwlucgkkdDEsJG1hc2sKKworCXgJJHMwLDIoJGkxLCR0YmwpCSMgVGQyW3MyPj44XQorCXgJJHMxLDEoJGkyLCR0YmwpCSMgVGQzW3MyPj4wXQorCWwJJHMyLDAoJHMyLCR0YmwpCSMgVGQwW3MyPj4yNF0KKwl4CSR0MywzKCRpMywkdGJsKQkjIFRkMVtzMj4+MTZdCisKKwlzbGxnCSRpMywkczMsYDArM2AJIyBpMgorCXNybAkkczMsYDI0LTNgCisJbmdyCSRpMywkbWFzaworCW5yCSRzMywkbWFzaworCisJeHIJJHMyLCR0MgorCXgJJHMwLDAoJGtleSkKKwl4CSRzMSw0KCRrZXkpCisJeAkkczIsOCgka2V5KQorCXgJJHQzLDEyKCRrZXkpCisKKwl4CSRzMCwzKCR0MSwkdGJsKQkjIFRkMVtzMz4+MTZdCisJeAkkczEsMigkcmEsJHRibCkJIyBUZDJbczM+PjhdCisJeAkkczIsMSgkaTMsJHRibCkJIyBUZDNbczM+PjBdCisJbAkkczMsMCgkczMsJHRibCkJIyBUZDBbczM+PjI0XQorCXhyCSRzMywkdDMKKworCWJyY3QJJHJvdW5kcywuTGRlY19sb29wCisJLmFsaWduCTE2CisKKwlsCSR0MSxgMjA0OCswYCgkdGJsKQkjIHByZWZldGNoIFRkNAorCWwJJHQyLGAyMDQ4KzY0YCgkdGJsKQorCWwJJHQzLGAyMDQ4KzEyOGAoJHRibCkKKwlsCSRpMSxgMjA0OCsxOTJgKCR0YmwpCisJbGxpbGwJJG1hc2ssMHhmZgorCisJc3JsZwkkaTMsJHMwLDI0CSMgaTAKKwlzcmxnCSR0MSwkczAsMTYKKwlzcmxnCSR0MiwkczAsOAorCW5yCSRzMCwkbWFzawkjIGkzCisJbnIJJHQxLCRtYXNrCisKKwlzcmxnCSRpMSwkczEsMjQKKwlucgkkdDIsJG1hc2sKKwlzcmxnCSRpMiwkczEsMTYKKwlzcmxnCSRyYSwkczEsOAorCW5yCSRzMSwkbWFzawkjIGkwCisJbnIJJGkyLCRtYXNrCisJbnIJJHJhLCRtYXNrCisKKwlsbGdjCSRpMywyMDQ4KCRpMywkdGJsKQkjIFRkNFtzMD4+MjRdCisJbGxnYwkkdDEsMjA0OCgkdDEsJHRibCkJIyBUZDRbczA+PjE2XQorCWxsZ2MJJHQyLDIwNDgoJHQyLCR0YmwpCSMgVGQ0W3MwPj44XQorCXNsbAkkdDEsMTYKKwlsbGdjCSR0MywyMDQ4KCRzMCwkdGJsKQkjIFRkNFtzMD4+MF0KKwlzbGxnCSRzMCwkaTMsMjQKKwlzbGwJJHQyLDgKKworCWxsZ2MJJHMxLDIwNDgoJHMxLCR0YmwpCSMgVGQ0W3MxPj4wXQorCWxsZ2MJJGkxLDIwNDgoJGkxLCR0YmwpCSMgVGQ0W3MxPj4yNF0KKwlsbGdjCSRpMiwyMDQ4KCRpMiwkdGJsKQkjIFRkNFtzMT4+MTZdCisJc2xsCSRpMSwyNAorCWxsZ2MJJGkzLDIwNDgoJHJhLCR0YmwpCSMgVGQ0W3MxPj44XQorCXNsbAkkaTIsMTYKKwlzbGwJJGkzLDgKKwlvcgkkczAsJHMxCisJb3IJJHQxLCRpMQorCW9yCSR0MiwkaTIKKwlvcgkkdDMsJGkzCisKKwlzcmxnCSRpMSwkczIsOAkjIGkwCisJc3JsZwkkaTIsJHMyLDI0CisJc3JsZwkkaTMsJHMyLDE2CisJbnIJJHMyLCRtYXNrCSMgaTEKKwlucgkkaTEsJG1hc2sKKwlucgkkaTMsJG1hc2sKKwlsbGdjCSRpMSwyMDQ4KCRpMSwkdGJsKQkjIFRkNFtzMj4+OF0KKwlsbGdjCSRzMSwyMDQ4KCRzMiwkdGJsKQkjIFRkNFtzMj4+MF0KKwlsbGdjCSRpMiwyMDQ4KCRpMiwkdGJsKQkjIFRkNFtzMj4+MjRdCisJbGxnYwkkaTMsMjA0OCgkaTMsJHRibCkJIyBUZDRbczI+PjE2XQorCXNsbAkkaTEsOAorCXNsbAkkaTIsMjQKKwlvcgkkczAsJGkxCisJc2xsCSRpMywxNgorCW9yCSR0MiwkaTIKKwlvcgkkdDMsJGkzCisKKwlzcmxnCSRpMSwkczMsMTYJIyBpMAorCXNybGcJJGkyLCRzMyw4CSMgaTEKKwlzcmxnCSRpMywkczMsMjQKKwlucgkkczMsJG1hc2sJIyBpMgorCW5yCSRpMSwkbWFzaworCW5yCSRpMiwkbWFzaworCisJbGcJJHJhLDE1Migkc3ApCisJb3IJJHMxLCR0MQorCWwJJHQwLDE2KCRrZXkpCisJbAkkdDEsMjAoJGtleSkKKworCWxsZ2MJJGkxLDIwNDgoJGkxLCR0YmwpCSMgVGQ0W3MzPj4xNl0KKwlsbGdjCSRpMiwyMDQ4KCRpMiwkdGJsKQkjIFRkNFtzMz4+OF0KKwlzbGwJJGkxLDE2CisJbGxnYwkkczIsMjA0OCgkczMsJHRibCkJIyBUZDRbczM+PjBdCisJbGxnYwkkczMsMjA0OCgkaTMsJHRibCkJIyBUZDRbczM+PjI0XQorCXNsbAkkaTIsOAorCXNsbAkkczMsMjQKKwlvcgkkczAsJGkxCisJb3IJJHMxLCRpMgorCW9yCSRzMiwkdDIKKwlvcgkkczMsJHQzCisKKwl4cgkkczAsJHQwCisJeHIJJHMxLCR0MQorCXgJJHMyLDI0KCRrZXkpCisJeAkkczMsMjgoJGtleSkKKworCWJyCSRyYQkKKy5zaXplCV9zMzkweF9BRVNfZGVjcnlwdCwuLV9zMzkweF9BRVNfZGVjcnlwdAorX19fCisKKyRjb2RlLj08PF9fXzsKKyMgdm9pZCBBRVNfc2V0X2VuY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBpbnQgYml0cywKKyMgCQkgQUVTX0tFWSAqa2V5KSB7CisuZ2xvYmwJQUVTX3NldF9lbmNyeXB0X2tleQorLnR5cGUJQUVTX3NldF9lbmNyeXB0X2tleSxcQGZ1bmN0aW9uCisuYWxpZ24JMTYKK0FFU19zZXRfZW5jcnlwdF9rZXk6CisJbGdoaQkkdDAsMAorCWNsZ3IJJGlucCwkdDAKKwlqZQkuTG1pbnVzMQorCWNsZ3IJJGtleSwkdDAKKwlqZQkuTG1pbnVzMQorCisJbGdoaQkkdDAsMTI4CisJY2xyCSRiaXRzLCR0MAorCWplCS5McHJvY2VlZAorCWxnaGkJJHQwLDE5MgorCWNscgkkYml0cywkdDAKKwlqZQkuTHByb2NlZWQKKwlsZ2hpCSR0MCwyNTYKKwljbHIJJGJpdHMsJHQwCisJamUJLkxwcm9jZWVkCisJbGdoaQklcjIsLTIKKwlicgklcjE0CisKKy5hbGlnbgkxNgorLkxwcm9jZWVkOgorX19fCiskY29kZS49PDxfX18gaWYgKCEkc29mdG9ubHkpOworCSMgY29udmVydCBiaXRzIHRvIGttIGNvZGUsIFsxMjgsMTkyLDI1Nl0tPlsxOCwxOSwyMF0KKwlsaGkJJXI1LC0xMjgKKwlsaGkJJXIwLDE4CisJYXIJJXI1LCRiaXRzCisJc3JsCSVyNSw2CisJYXIJJXI1LCVyMAorCisJbGFybAklcjEsT1BFTlNTTF9zMzkweGNhcF9QCisJbGcJJXIwLDAoJXIxKQorCXRtaGwJJXIwLDB4NDAwMAkjIGNoZWNrIGZvciBtZXNzYWdlLXNlY3VyaXR5IGFzc2lzdAorCWp6CS5MZWtleV9pbnRlcm5hbAorCisJbGdoaQklcjAsMAkJIyBxdWVyeSBjYXBhYmlsaXR5IHZlY3RvcgorCWxhCSVyMSwxNigkc3ApCisJLmxvbmcJMHhiOTJmMDA0MgkjIGttYyAlcjQsJXIyCisKKwlsbGloaAklcjEsMHg4MDAwCisJc3JsZwklcjEsJXIxLDAoJXI1KQorCW5nCSVyMSwxNigkc3ApCisJanoJLkxla2V5X2ludGVybmFsCisKKwlsbWcJJXIwLCVyMSwwKCRpbnApCSMganVzdCBjb3B5IDEyOCBiaXRzLi4uCisJc3RtZwklcjAsJXIxLDAoJGtleSkKKwlsaGkJJXIwLDE5MgorCWNyCSRiaXRzLCVyMAorCWpsCTFmCisJbGcJJXIxLDE2KCRpbnApCisJc3RnCSVyMSwxNigka2V5KQorCWplCTFmCisJbGcJJXIxLDI0KCRpbnApCisJc3RnCSVyMSwyNCgka2V5KQorMToJc3QJJGJpdHMsMjM2KCRrZXkpCSMgc2F2ZSBiaXRzCisJc3QJJXI1LDI0MCgka2V5KQkjIHNhdmUga20gY29kZQorCWxnaGkJJXIyLDAKKwlicgklcjE0CitfX18KKyRjb2RlLj08PF9fXzsKKy5hbGlnbgkxNgorLkxla2V5X2ludGVybmFsOgorCXN0bWcJJXI2LCVyMTMsNDgoJHNwKQkjIGFsbCBub24tdm9sYXRpbGUgcmVncworCisJbGFybAkkdGJsLEFFU19UZSsyMDQ4CisKKwlsbGdmCSRzMCwwKCRpbnApCisJbGxnZgkkczEsNCgkaW5wKQorCWxsZ2YJJHMyLDgoJGlucCkKKwlsbGdmCSRzMywxMigkaW5wKQorCXN0CSRzMCwwKCRrZXkpCisJc3QJJHMxLDQoJGtleSkKKwlzdAkkczIsOCgka2V5KQorCXN0CSRzMywxMigka2V5KQorCWxnaGkJJHQwLDEyOAorCWNyCSRiaXRzLCR0MAorCWpuZQkuTG5vdDEyOAorCisJbGxpbGwJJG1hc2ssMHhmZgorCWxnaGkJJHQzLDAJCQkjIGk9MAorCWxnaGkJJHJvdW5kcywxMAorCXN0CSRyb3VuZHMsMjQwKCRrZXkpCisKKwlsbGdmcgkkdDIsJHMzCQkJIyB0ZW1wPXJrWzNdCisJc3JsZwkkaTEsJHMzLDgKKwlzcmxnCSRpMiwkczMsMTYKKwlzcmxnCSRpMywkczMsMjQKKwlucgkkdDIsJG1hc2sKKwlucgkkaTEsJG1hc2sKKwlucgkkaTIsJG1hc2sKKworLmFsaWduCTE2CisuTDEyOF9sb29wOgorCWxhCSR0MiwwKCR0MiwkdGJsKQorCWxhCSRpMSwwKCRpMSwkdGJsKQorCWxhCSRpMiwwKCRpMiwkdGJsKQorCWxhCSRpMywwKCRpMywkdGJsKQorCWljbQkkdDIsMiwwKCR0MikJCSMgVGU0W3JrWzNdPj4wXTw8OAorCWljbQkkdDIsNCwwKCRpMSkJCSMgVGU0W3JrWzNdPj44XTw8MTYKKwlpY20JJHQyLDgsMCgkaTIpCQkjIFRlNFtya1szXT4+MTZdPDwyNAorCWljbQkkdDIsMSwwKCRpMykJCSMgVGU0W3JrWzNdPj4yNF0KKwl4CSR0MiwyNTYoJHQzLCR0YmwpCSMgcmNvbltpXQorCXhyCSRzMCwkdDIJCQkjIHJrWzRdPXJrWzBdXi4uLgorCXhyCSRzMSwkczAJCQkjIHJrWzVdPXJrWzFdXnJrWzRdCisJeHIJJHMyLCRzMQkJCSMgcmtbNl09cmtbMl1ecmtbNV0KKwl4cgkkczMsJHMyCQkJIyBya1s3XT1ya1szXV5ya1s2XQorCisJbGxnZnIJJHQyLCRzMwkJCSMgdGVtcD1ya1szXQorCXNybGcJJGkxLCRzMyw4CisJc3JsZwkkaTIsJHMzLDE2CisJbnIJJHQyLCRtYXNrCisJbnIJJGkxLCRtYXNrCisJc3JsZwkkaTMsJHMzLDI0CisJbnIJJGkyLCRtYXNrCisKKwlzdAkkczAsMTYoJGtleSkKKwlzdAkkczEsMjAoJGtleSkKKwlzdAkkczIsMjQoJGtleSkKKwlzdAkkczMsMjgoJGtleSkKKwlsYQkka2V5LDE2KCRrZXkpCQkjIGtleSs9NAorCWxhCSR0Myw0KCR0MykJCSMgaSsrCisJYnJjdAkkcm91bmRzLC5MMTI4X2xvb3AKKwlsZ2hpCSVyMiwwCisJbG1nCSVyNiwlcjEzLDQ4KCRzcCkKKwlicgkkcmEKKworLmFsaWduCTE2CisuTG5vdDEyODoKKwlsbGdmCSR0MCwxNigkaW5wKQorCWxsZ2YJJHQxLDIwKCRpbnApCisJc3QJJHQwLDE2KCRrZXkpCisJc3QJJHQxLDIwKCRrZXkpCisJbGdoaQkkdDAsMTkyCisJY3IJJGJpdHMsJHQwCisJam5lCS5Mbm90MTkyCisKKwlsbGlsbAkkbWFzaywweGZmCisJbGdoaQkkdDMsMAkJCSMgaT0wCisJbGdoaQkkcm91bmRzLDEyCisJc3QJJHJvdW5kcywyNDAoJGtleSkKKwlsZ2hpCSRyb3VuZHMsOAorCisJc3JsZwkkaTEsJHQxLDgKKwlzcmxnCSRpMiwkdDEsMTYKKwlzcmxnCSRpMywkdDEsMjQKKwlucgkkdDEsJG1hc2sKKwlucgkkaTEsJG1hc2sKKwlucgkkaTIsJG1hc2sKKworLmFsaWduCTE2CisuTDE5Ml9sb29wOgorCWxhCSR0MSwwKCR0MSwkdGJsKQorCWxhCSRpMSwwKCRpMSwkdGJsKQorCWxhCSRpMiwwKCRpMiwkdGJsKQorCWxhCSRpMywwKCRpMywkdGJsKQorCWljbQkkdDEsMiwwKCR0MSkJCSMgVGU0W3JrWzVdPj4wXTw8OAorCWljbQkkdDEsNCwwKCRpMSkJCSMgVGU0W3JrWzVdPj44XTw8MTYKKwlpY20JJHQxLDgsMCgkaTIpCQkjIFRlNFtya1s1XT4+MTZdPDwyNAorCWljbQkkdDEsMSwwKCRpMykJCSMgVGU0W3JrWzVdPj4yNF0KKwl4CSR0MSwyNTYoJHQzLCR0YmwpCSMgcmNvbltpXQorCXhyCSRzMCwkdDEJCQkjIHJrWzZdPXJrWzBdXi4uLgorCXhyCSRzMSwkczAJCQkjIHJrWzddPXJrWzFdXnJrWzZdCisJeHIJJHMyLCRzMQkJCSMgcmtbOF09cmtbMl1ecmtbN10KKwl4cgkkczMsJHMyCQkJIyBya1s5XT1ya1szXV5ya1s4XQorCisJc3QJJHMwLDI0KCRrZXkpCisJc3QJJHMxLDI4KCRrZXkpCisJc3QJJHMyLDMyKCRrZXkpCisJc3QJJHMzLDM2KCRrZXkpCisJYnJjdAkkcm91bmRzLC5MMTkyX2NvbnRpbnVlCisJbGdoaQklcjIsMAorCWxtZwklcjYsJXIxMyw0OCgkc3ApCisJYnIJJHJhCisKKy5hbGlnbgkxNgorLkwxOTJfY29udGludWU6CisJbGdyCSR0MSwkczMKKwl4CSR0MSwxNigka2V5KQkJIyBya1sxMF09cmtbNF1ecmtbOV0KKwlzdAkkdDEsNDAoJGtleSkKKwl4CSR0MSwyMCgka2V5KQkJIyBya1sxMV09cmtbNV1ecmtbMTBdCisJc3QJJHQxLDQ0KCRrZXkpCisKKwlzcmxnCSRpMSwkdDEsOAorCXNybGcJJGkyLCR0MSwxNgorCXNybGcJJGkzLCR0MSwyNAorCW5yCSR0MSwkbWFzaworCW5yCSRpMSwkbWFzaworCW5yCSRpMiwkbWFzaworCisJbGEJJGtleSwyNCgka2V5KQkJIyBrZXkrPTYKKwlsYQkkdDMsNCgkdDMpCQkjIGkrKworCWoJLkwxOTJfbG9vcAorCisuYWxpZ24JMTYKKy5Mbm90MTkyOgorCWxsZ2YJJHQwLDI0KCRpbnApCisJbGxnZgkkdDEsMjgoJGlucCkKKwlzdAkkdDAsMjQoJGtleSkKKwlzdAkkdDEsMjgoJGtleSkKKwlsbGlsbAkkbWFzaywweGZmCisJbGdoaQkkdDMsMAkJCSMgaT0wCisJbGdoaQkkcm91bmRzLDE0CisJc3QJJHJvdW5kcywyNDAoJGtleSkKKwlsZ2hpCSRyb3VuZHMsNworCisJc3JsZwkkaTEsJHQxLDgKKwlzcmxnCSRpMiwkdDEsMTYKKwlzcmxnCSRpMywkdDEsMjQKKwlucgkkdDEsJG1hc2sKKwlucgkkaTEsJG1hc2sKKwlucgkkaTIsJG1hc2sKKworLmFsaWduCTE2CisuTDI1Nl9sb29wOgorCWxhCSR0MSwwKCR0MSwkdGJsKQorCWxhCSRpMSwwKCRpMSwkdGJsKQorCWxhCSRpMiwwKCRpMiwkdGJsKQorCWxhCSRpMywwKCRpMywkdGJsKQorCWljbQkkdDEsMiwwKCR0MSkJCSMgVGU0W3JrWzddPj4wXTw8OAorCWljbQkkdDEsNCwwKCRpMSkJCSMgVGU0W3JrWzddPj44XTw8MTYKKwlpY20JJHQxLDgsMCgkaTIpCQkjIFRlNFtya1s3XT4+MTZdPDwyNAorCWljbQkkdDEsMSwwKCRpMykJCSMgVGU0W3JrWzddPj4yNF0KKwl4CSR0MSwyNTYoJHQzLCR0YmwpCSMgcmNvbltpXQorCXhyCSRzMCwkdDEJCQkjIHJrWzhdPXJrWzBdXi4uLgorCXhyCSRzMSwkczAJCQkjIHJrWzldPXJrWzFdXnJrWzhdCisJeHIJJHMyLCRzMQkJCSMgcmtbMTBdPXJrWzJdXnJrWzldCisJeHIJJHMzLCRzMgkJCSMgcmtbMTFdPXJrWzNdXnJrWzEwXQorCXN0CSRzMCwzMigka2V5KQorCXN0CSRzMSwzNigka2V5KQorCXN0CSRzMiw0MCgka2V5KQorCXN0CSRzMyw0NCgka2V5KQorCWJyY3QJJHJvdW5kcywuTDI1Nl9jb250aW51ZQorCWxnaGkJJXIyLDAKKwlsbWcJJXI2LCVyMTMsNDgoJHNwKQorCWJyCSRyYQorCisuYWxpZ24JMTYKKy5MMjU2X2NvbnRpbnVlOgorCWxncgkkdDEsJHMzCQkJIyB0ZW1wPXJrWzExXQorCXNybGcJJGkxLCRzMyw4CisJc3JsZwkkaTIsJHMzLDE2CisJc3JsZwkkaTMsJHMzLDI0CisJbnIJJHQxLCRtYXNrCisJbnIJJGkxLCRtYXNrCisJbnIJJGkyLCRtYXNrCisJbGEJJHQxLDAoJHQxLCR0YmwpCisJbGEJJGkxLDAoJGkxLCR0YmwpCisJbGEJJGkyLDAoJGkyLCR0YmwpCisJbGEJJGkzLDAoJGkzLCR0YmwpCisJbGxnYwkkdDEsMCgkdDEpCQkjIFRlNFtya1sxMV0+PjBdCisJaWNtCSR0MSwyLDAoJGkxKQkJIyBUZTRbcmtbMTFdPj44XTw8OAorCWljbQkkdDEsNCwwKCRpMikJCSMgVGU0W3JrWzExXT4+MTZdPDwxNgorCWljbQkkdDEsOCwwKCRpMykJCSMgVGU0W3JrWzExXT4+MjRdPDwyNAorCXgJJHQxLDE2KCRrZXkpCQkjIHJrWzEyXT1ya1s0XV4uLi4KKwlzdAkkdDEsNDgoJGtleSkKKwl4CSR0MSwyMCgka2V5KQkJIyBya1sxM109cmtbNV1ecmtbMTJdCisJc3QJJHQxLDUyKCRrZXkpCisJeAkkdDEsMjQoJGtleSkJCSMgcmtbMTRdPXJrWzZdXnJrWzEzXQorCXN0CSR0MSw1Nigka2V5KQorCXgJJHQxLDI4KCRrZXkpCQkjIHJrWzE1XT1ya1s3XV5ya1sxNF0KKwlzdAkkdDEsNjAoJGtleSkKKworCXNybGcJJGkxLCR0MSw4CisJc3JsZwkkaTIsJHQxLDE2CisJc3JsZwkkaTMsJHQxLDI0CisJbnIJJHQxLCRtYXNrCisJbnIJJGkxLCRtYXNrCisJbnIJJGkyLCRtYXNrCisKKwlsYQkka2V5LDMyKCRrZXkpCQkjIGtleSs9OAorCWxhCSR0Myw0KCR0MykJCSMgaSsrCisJagkuTDI1Nl9sb29wCisKKy5MbWludXMxOgorCWxnaGkJJXIyLC0xCisJYnIJJHJhCisuc2l6ZQlBRVNfc2V0X2VuY3J5cHRfa2V5LC4tQUVTX3NldF9lbmNyeXB0X2tleQorCisjIHZvaWQgQUVTX3NldF9kZWNyeXB0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgaW50IGJpdHMsCisjIAkJIEFFU19LRVkgKmtleSkgeworLmdsb2JsCUFFU19zZXRfZGVjcnlwdF9rZXkKKy50eXBlCUFFU19zZXRfZGVjcnlwdF9rZXksXEBmdW5jdGlvbgorLmFsaWduCTE2CitBRVNfc2V0X2RlY3J5cHRfa2V5OgorCXN0Zwkka2V5LDMyKCRzcCkJCSMgSSByZWx5IG9uIEFFU19zZXRfZW5jcnlwdF9rZXkgdG8KKwlzdGcJJHJhLDExMigkc3ApCQkjIHNhdmUgbm9uLXZvbGF0aWxlIHJlZ2lzdGVycyEKKwlicmFzCSRyYSxBRVNfc2V0X2VuY3J5cHRfa2V5CisJbGcJJGtleSwzMigkc3ApCisJbGcJJHJhLDExMigkc3ApCisJbHRncgklcjIsJXIyCisJYm56cgkkcmEKK19fXworJGNvZGUuPTw8X19fIGlmICghJHNvZnRvbmx5KTsKKwlsCSR0MCwyNDAoJGtleSkKKwlsaGkJJHQxLDE2CisJY3IJJHQwLCR0MQorCWpsCS5MZ28KKwlvaWxsCSR0MCwweDgwCSMgc2V0ICJkZWNyeXB0IiBiaXQKKwlzdAkkdDAsMjQwKCRrZXkpCisJYnIJJHJhCisKKy5hbGlnbgkxNgorLkxka2V5X2ludGVybmFsOgorCXN0Zwkka2V5LDMyKCRzcCkKKwlzdGcJJHJhLDQwKCRzcCkKKwlicmFzCSRyYSwuTGVrZXlfaW50ZXJuYWwKKwlsZwkka2V5LDMyKCRzcCkKKwlsZwkkcmEsNDAoJHNwKQorX19fCiskY29kZS49PDxfX187CisKKy5MZ286CWxsZ2YJJHJvdW5kcywyNDAoJGtleSkKKwlsYQkkaTEsMCgka2V5KQorCXNsbGcJJGkyLCRyb3VuZHMsNAorCWxhCSRpMiwwKCRpMiwka2V5KQorCXNybAkkcm91bmRzLDEKKwlsZ2hpCSR0MSwtMTYKKworLmFsaWduCTE2CisuTGludjoJbG1nCSRzMCwkczEsMCgkaTEpCisJbG1nCSRzMiwkczMsMCgkaTIpCisJc3RtZwkkczAsJHMxLDAoJGkyKQorCXN0bWcJJHMyLCRzMywwKCRpMSkKKwlsYQkkaTEsMTYoJGkxKQorCWxhCSRpMiwwKCR0MSwkaTIpCisJYnJjdAkkcm91bmRzLC5MaW52CitfX18KKyRtYXNrODA9JGkxOworJG1hc2sxYj0kaTI7CiskbWFza2ZlPSRpMzsKKyRjb2RlLj08PF9fXzsKKwlsbGdmCSRyb3VuZHMsMjQwKCRrZXkpCisJYWdoaQkkcm91bmRzLC0xCisJc2xsCSRyb3VuZHMsMgkjIChyb3VuZHMtMSkqNAorCWxsaWxoCSRtYXNrODAsMHg4MDgwCisJbGxpbGgJJG1hc2sxYiwweDFiMWIKKwlsbGlsaAkkbWFza2ZlLDB4ZmVmZQorCW9pbGwJJG1hc2s4MCwweDgwODAKKwlvaWxsCSRtYXNrMWIsMHgxYjFiCisJb2lsbAkkbWFza2ZlLDB4ZmVmZQorCisuYWxpZ24JMTYKKy5MbWl4OglsCSRzMCwxNigka2V5KQkjIHRwMQorCWxyCSRzMSwkczAKKwluZ3IJJHMxLCRtYXNrODAKKwlzcmxnCSR0MSwkczEsNworCXNscgkkczEsJHQxCisJbnIJJHMxLCRtYXNrMWIKKwlzbGxnCSR0MSwkczAsMQorCW5yCSR0MSwkbWFza2ZlCisJeHIJJHMxLCR0MQkJIyB0cDIKKworCWxyCSRzMiwkczEKKwluZ3IJJHMyLCRtYXNrODAKKwlzcmxnCSR0MSwkczIsNworCXNscgkkczIsJHQxCisJbnIJJHMyLCRtYXNrMWIKKwlzbGxnCSR0MSwkczEsMQorCW5yCSR0MSwkbWFza2ZlCisJeHIJJHMyLCR0MQkJIyB0cDQKKworCWxyCSRzMywkczIKKwluZ3IJJHMzLCRtYXNrODAKKwlzcmxnCSR0MSwkczMsNworCXNscgkkczMsJHQxCisJbnIJJHMzLCRtYXNrMWIKKwlzbGxnCSR0MSwkczIsMQorCW5yCSR0MSwkbWFza2ZlCisJeHIJJHMzLCR0MQkJIyB0cDgKKworCXhyCSRzMSwkczAJCSMgdHAyXnRwMQorCXhyCSRzMiwkczAJCSMgdHA0XnRwMQorCXJsbAkkczAsJHMwLDI0CSMgPSBST1RBVEUodHAxLDgpCisJeHIJJHMyLCRzMwkJIyBePXRwOAorCXhyCSRzMCwkczEJCSMgXj10cDJedHAxCisJeHIJJHMxLCRzMwkJIyB0cDJedHAxXnRwOAorCXhyCSRzMCwkczIJCSMgXj10cDRedHAxXnRwOAorCXJsbAkkczEsJHMxLDgKKwlybGwJJHMyLCRzMiwxNgorCXhyCSRzMCwkczEJCSMgXj0gUk9UQVRFKHRwOF50cDJedHAxLDI0KQorCXJsbAkkczMsJHMzLDI0CisJeHIJJHMwLCRzMiAgICAJIyBePSBST1RBVEUodHA4XnRwNF50cDEsMTYpCisJeHIJJHMwLCRzMwkJIyBePSBST1RBVEUodHA4LDgpCisKKwlzdAkkczAsMTYoJGtleSkKKwlsYQkka2V5LDQoJGtleSkKKwlicmN0CSRyb3VuZHMsLkxtaXgKKworCWxtZwklcjYsJXIxMyw0OCgkc3ApIyBhcyB3YXMgc2F2ZWQgYnkgQUVTX3NldF9lbmNyeXB0X2tleSEKKwlsZ2hpCSVyMiwwCisJYnIJJHJhCisuc2l6ZQlBRVNfc2V0X2RlY3J5cHRfa2V5LC4tQUVTX3NldF9kZWNyeXB0X2tleQorX19fCisKKyN2b2lkIEFFU19jYmNfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorIyAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW5ndGgsIGNvbnN0IEFFU19LRVkgKmtleSwKKyMgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICppdmVjLCBjb25zdCBpbnQgZW5jKQoreworbXkgJGlucD0iJXIyIjsKK215ICRvdXQ9IiVyNCI7CSMgbGVuZ3RoIGFuZCBvdXQgYXJlIHN3YXBwZWQKK215ICRsZW49IiVyMyI7CitteSAka2V5PSIlcjUiOworbXkgJGl2cD0iJXI2IjsKKworJGNvZGUuPTw8X19fOworLmdsb2JsCUFFU19jYmNfZW5jcnlwdAorLnR5cGUJQUVTX2NiY19lbmNyeXB0LFxAZnVuY3Rpb24KKy5hbGlnbgkxNgorQUVTX2NiY19lbmNyeXB0OgorCXhncgklcjMsJXI0CQkjIGZsaXAgJXIzIGFuZCAlcjQsIG91dCBhbmQgbGVuCisJeGdyCSVyNCwlcjMKKwl4Z3IJJXIzLCVyNAorX19fCiskY29kZS49PDxfX18gaWYgKCEkc29mdG9ubHkpOworCWxoaQklcjAsMTYKKwljbAklcjAsMjQwKCRrZXkpCisJamgJLkxjYmNfc29mdHdhcmUKKworCWxnCSVyMCwwKCRpdnApCSMgY29weSBpdmVjCisJbGcJJXIxLDgoJGl2cCkKKwlzdG1nCSVyMCwlcjEsMTYoJHNwKQorCWxtZwklcjAsJXIxLDAoJGtleSkJIyBjb3B5IGtleSwgY292ZXIgMjU2IGJpdAorCXN0bWcJJXIwLCVyMSwzMigkc3ApCisJbG1nCSVyMCwlcjEsMTYoJGtleSkKKwlzdG1nCSVyMCwlcjEsNDgoJHNwKQorCWwJJXIwLDI0MCgka2V5KQkjIGxvYWQga21jIGNvZGUKKwlsZ2hpCSRrZXksMTUJCSMgcmVzPWxlbiUxNiwgbGVuLT1yZXM7CisJbmdyCSRrZXksJGxlbgorCXNsZ3IJJGxlbiwka2V5CisJbGEJJXIxLDE2KCRzcCkJIyBwYXJhbWV0ZXIgYmxvY2sgLSBpdmVjIHx8IGtleQorCWp6CS5Ma21jX3RydW5jYXRlZAorCS5sb25nCTB4YjkyZjAwNDIJIyBrbWMgJXI0LCVyMgorCWJyYwkxLC4tNAkJIyBwYXkgYXR0ZW50aW9uIHRvICJwYXJ0aWFsIGNvbXBsZXRpb24iCisJbHRyCSRrZXksJGtleQorCWpuegkuTGttY190cnVuY2F0ZWQKKy5Ma21jX2RvbmU6CisJbG1nCSVyMCwlcjEsMTYoJHNwKQkjIGNvcHkgaXZlYyB0byBjYWxsZXIKKwlzdGcJJXIwLDAoJGl2cCkKKwlzdGcJJXIxLDgoJGl2cCkKKwlicgkkcmEKKy5hbGlnbgkxNgorLkxrbWNfdHJ1bmNhdGVkOgorCWFoaQkka2V5LC0xCQkjIGl0J3MgdGhlIHdheSBpdCdzIGVuY29kZWQgaW4gbXZjCisJdG1sbAklcjAsMHg4MAorCWpuegkuTGttY190cnVuY2F0ZWRfZGVjCisJbGdoaQklcjEsMAorCXN0ZwklcjEsMTI4KCRzcCkKKwlzdGcJJXIxLDEzNigkc3ApCisJYnJhcwklcjEsMWYKKwltdmMJMTI4KDEsJHNwKSwwKCRpbnApCisxOglleAkka2V5LDAoJXIxKQorCWxhCSVyMSwxNigkc3ApCSMgcmVzdG9yZSBwYXJhbWV0ZXIgYmxvY2sKKwlsYQkkaW5wLDEyOCgkc3ApCisJbGdoaQkkbGVuLDE2CisJLmxvbmcJMHhiOTJmMDA0MgkjIGttYyAlcjQsJXIyCisJagkuTGttY19kb25lCisuYWxpZ24JMTYKKy5Ma21jX3RydW5jYXRlZF9kZWM6CisJc3RnCSRvdXQsNjQoJHNwKQorCWxhCSRvdXQsMTI4KCRzcCkKKwlsZ2hpCSRsZW4sMTYKKwkubG9uZwkweGI5MmYwMDQyCSMga21jICVyNCwlcjIKKwlsZwkkb3V0LDY0KCRzcCkKKwlicmFzCSVyMSwyZgorCW12YwkwKDEsJG91dCksMTI4KCRzcCkKKzI6CWV4CSRrZXksMCglcjEpCisJagkuTGttY19kb25lCisuYWxpZ24JMTYKKy5MY2JjX3NvZnR3YXJlOgorX19fCiskY29kZS49PDxfX187CisJc3RtZwkka2V5LCRyYSw0MCgkc3ApCisJbGhpCSVyMCwwCisJY2wJJXIwLDE2NCgkc3ApCisJamUJLkxjYmNfZGVjcnlwdAorCisJbGFybAkkdGJsLEFFU19UZQorCisJbGxnZgkkczAsMCgkaXZwKQorCWxsZ2YJJHMxLDQoJGl2cCkKKwlsbGdmCSRzMiw4KCRpdnApCisJbGxnZgkkczMsMTIoJGl2cCkKKworCWxnaGkJJHQwLDE2CisJc2xncgkkbGVuLCR0MAorCWJyYwk0LC5MY2JjX2VuY190YWlsCSMgaWYgYm9ycm93CisuTGNiY19lbmNfbG9vcDoKKwlzdG1nCSRpbnAsJG91dCwxNigkc3ApCisJeAkkczAsMCgkaW5wKQorCXgJJHMxLDQoJGlucCkKKwl4CSRzMiw4KCRpbnApCisJeAkkczMsMTIoJGlucCkKKwlsZ3IJJXI0LCRrZXkKKworCWJyYXMJJHJhLF9zMzkweF9BRVNfZW5jcnlwdAorCisJbG1nCSRpbnAsJGtleSwxNigkc3ApCisJc3QJJHMwLDAoJG91dCkKKwlzdAkkczEsNCgkb3V0KQorCXN0CSRzMiw4KCRvdXQpCisJc3QJJHMzLDEyKCRvdXQpCisKKwlsYQkkaW5wLDE2KCRpbnApCisJbGEJJG91dCwxNigkb3V0KQorCWxnaGkJJHQwLDE2CisJbHRncgkkbGVuLCRsZW4KKwlqegkuTGNiY19lbmNfZG9uZQorCXNsZ3IJJGxlbiwkdDAKKwlicmMJNCwuTGNiY19lbmNfdGFpbAkjIGlmIGJvcnJvdworCWoJLkxjYmNfZW5jX2xvb3AKKy5hbGlnbgkxNgorLkxjYmNfZW5jX2RvbmU6CisJbGcJJGl2cCw0OCgkc3ApCisJc3QJJHMwLDAoJGl2cCkKKwlzdAkkczEsNCgkaXZwKQkKKwlzdAkkczIsOCgkaXZwKQorCXN0CSRzMywxMigkaXZwKQorCisJbG1nCSVyNywkcmEsNTYoJHNwKQorCWJyCSRyYQorCisuYWxpZ24JMTYKKy5MY2JjX2VuY190YWlsOgorCWFnaGkJJGxlbiwxNQorCWxnaGkJJHQwLDAKKwlzdGcJJHQwLDEyOCgkc3ApCisJc3RnCSR0MCwxMzYoJHNwKQorCWJyYXMJJHQxLDNmCisJbXZjCTEyOCgxLCRzcCksMCgkaW5wKQorMzoJZXgJJGxlbiwwKCR0MSkKKwlsZ2hpCSRsZW4sMAorCWxhCSRpbnAsMTI4KCRzcCkKKwlqCS5MY2JjX2VuY19sb29wCisKKy5hbGlnbgkxNgorLkxjYmNfZGVjcnlwdDoKKwlsYXJsCSR0YmwsQUVTX1RkCisKKwlsZwkkdDAsMCgkaXZwKQorCWxnCSR0MSw4KCRpdnApCisJc3RtZwkkdDAsJHQxLDEyOCgkc3ApCisKKy5MY2JjX2RlY19sb29wOgorCXN0bWcJJGlucCwkb3V0LDE2KCRzcCkKKwlsbGdmCSRzMCwwKCRpbnApCisJbGxnZgkkczEsNCgkaW5wKQorCWxsZ2YJJHMyLDgoJGlucCkKKwlsbGdmCSRzMywxMigkaW5wKQorCWxncgklcjQsJGtleQorCisJYnJhcwkkcmEsX3MzOTB4X0FFU19kZWNyeXB0CisKKwlsbWcJJGlucCwka2V5LDE2KCRzcCkKKwlzbGxnCSRzMCwkczAsMzIKKwlzbGxnCSRzMiwkczIsMzIKKwlscgkkczAsJHMxCisJbHIJJHMyLCRzMworCisJbGcJJHQwLDAoJGlucCkKKwlsZwkkdDEsOCgkaW5wKQorCXhnCSRzMCwxMjgoJHNwKQorCXhnCSRzMiwxMzYoJHNwKQorCWxnaGkJJHMxLDE2CisJc2xncgkkbGVuLCRzMQorCWJyYwk0LC5MY2JjX2RlY190YWlsCSMgaWYgYm9ycm93CisJYnJjCTIsLkxjYmNfZGVjX2RvbmUJIyBpZiB6ZXJvCisJc3RnCSRzMCwwKCRvdXQpCisJc3RnCSRzMiw4KCRvdXQpCisJc3RtZwkkdDAsJHQxLDEyOCgkc3ApCisKKwlsYQkkaW5wLDE2KCRpbnApCisJbGEJJG91dCwxNigkb3V0KQorCWoJLkxjYmNfZGVjX2xvb3AKKworLkxjYmNfZGVjX2RvbmU6CisJc3RnCSRzMCwwKCRvdXQpCisJc3RnCSRzMiw4KCRvdXQpCisuTGNiY19kZWNfZXhpdDoKKwlsbWcJJGl2cCwkcmEsNDgoJHNwKQorCXN0bWcJJHQwLCR0MSwwKCRpdnApCisKKwlicgkkcmEKKworLmFsaWduCTE2CisuTGNiY19kZWNfdGFpbDoKKwlhZ2hpCSRsZW4sMTUKKwlzdGcJJHMwLDEyOCgkc3ApCisJc3RnCSRzMiwxMzYoJHNwKQorCWJyYXMJJHMxLDRmCisJbXZjCTAoMSwkb3V0KSwxMjgoJHNwKQorNDoJZXgJJGxlbiwwKCRzMSkKKwlqCS5MY2JjX2RlY19leGl0Cisuc2l6ZQlBRVNfY2JjX2VuY3J5cHQsLi1BRVNfY2JjX2VuY3J5cHQKKy5jb21tICBPUEVOU1NMX3MzOTB4Y2FwX1AsOCw4CitfX18KK30KKyRjb2RlLj08PF9fXzsKKy5zdHJpbmcJIkFFUyBmb3IgczM5MHgsIENSWVBUT0dBTVMgYnkgPGFwcHJvXEBvcGVuc3NsLm9yZz4iCitfX18KKworJGNvZGUgPX4gcy9cYChbXlxgXSopXGAvZXZhbCAkMS9nZW07CitwcmludCAkY29kZTsKZGlmZiAtLWdpdCBhL2NyeXB0by9hZXMvYXNtL2Flcy1zcGFyY3Y5LnBsIGIvY3J5cHRvL2Flcy9hc20vYWVzLXNwYXJjdjkucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzU3YjNhMgotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9hZXMvYXNtL2Flcy1zcGFyY3Y5LnBsCkBAIC0wLDAgKzEsMTE4MSBAQAorIyEvdXNyL2Jpbi9lbnYgcGVybAorIworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPiBmb3IgdGhlIE9wZW5TU0wKKyMgcHJvamVjdC4gUmlnaHRzIGZvciByZWRpc3RyaWJ1dGlvbiBhbmQgdXNhZ2UgaW4gc291cmNlIGFuZCBiaW5hcnkKKyMgZm9ybXMgYXJlIGdyYW50ZWQgYWNjb3JkaW5nIHRvIHRoZSBPcGVuU1NMIGxpY2Vuc2UuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjCisjIFZlcnNpb24gMS4xCisjCisjIFRoZSBtYWpvciByZWFzb24gZm9yIHVuZGVydGFrZW4gZWZmb3J0IHdhcyB0byBtaXRpZ2F0ZSB0aGUgaGF6YXJkIG9mCisjIGNhY2hlLXRpbWluZyBhdHRhY2suIFRoaXMgaXMgW2N1cnJlbnRseSBhbmQgaW5pdGlhbGx5IV0gYWRkcmVzc2VkIGluCisjIHR3byB3YXlzLiAxLiBTLWJveGVzIGFyZSBjb21wcmVzc2VkIGZyb20gNUtCIHRvIDJLQisyNTZCIHNpemUgZWFjaC4KKyMgMi4gUmVmZXJlbmNlcyB0byB0aGVtIGFyZSBzY2hlZHVsZWQgZm9yIEwyIGNhY2hlIGxhdGVuY3ksIG1lYW5pbmcKKyMgdGhhdCB0aGUgdGFibGVzIGRvbid0IGhhdmUgdG8gcmVzaWRlIGluIEwxIGNhY2hlLiBPbmNlIGFnYWluLCB0aGlzCisjIGlzIGFuIGluaXRpYWwgZHJhZnQgYW5kIG9uZSBzaG91bGQgZXhwZWN0IG1vcmUgY291bnRlcm1lYXN1cmVzIHRvCisjIGJlIGltcGxlbWVudGVkLi4uCisjCisjIFZlcnNpb24gMS4xIHByZWZldGNoZXMgVFtlZF00IGluIG9yZGVyIHRvIG1pdGlnYXRlIGF0dGFjayBvbiBsYXN0CisjIHJvdW5kLgorIworIyBFdmVuIHRob3VnaCBwZXJmb3JtYW5jZSB3YXMgbm90IHRoZSBwcmltYXJ5IGdvYWwgW29uIHRoZSBjb250cmFyeSwKKyMgZXh0cmEgc2hpZnRzICJpbmR1Y2VkIiBieSBjb21wcmVzc2VkIFMtYm94IGFuZCBsb25nZXIgbG9vcCBlcGlsb2d1ZQorIyAiaW5kdWNlZCIgYnkgc2NoZWR1bGluZyBmb3IgTDIgaGF2ZSBuZWdhdGl2ZSBlZmZlY3Qgb24gcGVyZm9ybWFuY2VdLAorIyB0aGUgY29kZSB0dXJuZWQgb3V0IHRvIHJ1biBpbiB+MjMgY3ljbGVzIHBlciBwcm9jZXNzZWQgYnl0ZSBlbi0vCisjIGRlY3J5cHRlZCB3aXRoIDEyOC1iaXQga2V5LiBUaGlzIGlzIHByZXR0eSBnb29kIHJlc3VsdCBmb3IgY29kZQorIyB3aXRoIG1lbnRpb25lZCBxdWFsaXRpZXMgYW5kIFVsdHJhU1BBUkMgY29yZS4gQ29tcGFyZWQgdG8gU3VuIEMKKyMgZ2VuZXJhdGVkIGNvZGUgbXkgZW5jcnlwdCBwcm9jZWR1cmUgcnVucyBqdXN0IGZldyBwZXJjZW50cyBmYXN0ZXIsCisjIHdoaWxlIGRlY3J5cHQgb25lIC0gd2hvbGUgNTAlIGZhc3RlciBbeWVzLCBTdW4gQyBmYWlsZWQgdG8gZ2VuZXJhdGUKKyMgb3B0aW1hbCBkZWNyeXB0IHByb2NlZHVyZV0uIENvbXBhcmVkIHRvIEdOVSBDIGdlbmVyYXRlZCBjb2RlIGJvdGgKKyMgcHJvY2VkdXJlcyBhcmUgbW9yZSB0aGFuIDYwJSBmYXN0ZXI6LSkKKworJGJpdHM9MzI7Citmb3IgKEBBUkdWKQl7ICRiaXRzPTY0IGlmICgvXC1tNjQvIHx8IC9cLXhhcmNoXD12OS8pOyB9CitpZiAoJGJpdHM9PTY0KQl7ICRiaWFzPTIwNDc7ICRmcmFtZT0xOTI7IH0KK2Vsc2UJCXsgJGJpYXM9MDsgICAgJGZyYW1lPTExMjsgfQorJGxvY2Fscz0xNjsKKworJGFjYzA9IiVsMCI7CiskYWNjMT0iJW8wIjsKKyRhY2MyPSIlbzEiOworJGFjYzM9IiVvMiI7CisKKyRhY2M0PSIlbDEiOworJGFjYzU9IiVvMyI7CiskYWNjNj0iJW80IjsKKyRhY2M3PSIlbzUiOworCiskYWNjOD0iJWwyIjsKKyRhY2M5PSIlbzciOworJGFjYzEwPSIlZzEiOworJGFjYzExPSIlZzIiOworCiskYWNjMTI9IiVsMyI7CiskYWNjMTM9IiVnMyI7CiskYWNjMTQ9IiVnNCI7CiskYWNjMTU9IiVnNSI7CisKKyR0MD0iJWw0IjsKKyR0MT0iJWw1IjsKKyR0Mj0iJWw2IjsKKyR0Mz0iJWw3IjsKKworJHMwPSIlaTAiOworJHMxPSIlaTEiOworJHMyPSIlaTIiOworJHMzPSIlaTMiOworJHRibD0iJWk0IjsKKyRrZXk9IiVpNSI7Ciskcm91bmRzPSIlaTciOwkjIGFsaWFzZXMgd2l0aCByZXR1cm4gYWRkcmVzcywgd2hpY2ggaXMgb2ZmLWxvYWRlZCB0byBzdGFjaworCitzdWIgX2RhdGFfd29yZCgpCit7IG15ICRpOworICAgIHdoaWxlKGRlZmluZWQoJGk9c2hpZnQpKSB7ICRjb2RlLj1zcHJpbnRmIlx0LmxvbmdcdDB4JTA4eCwweCUwOHhcbiIsJGksJGk7IH0KK30KKworJGNvZGUuPTw8X19fIGlmICgkYml0cz09NjQpOworLnJlZ2lzdGVyCSVnMiwjc2NyYXRjaAorLnJlZ2lzdGVyCSVnMywjc2NyYXRjaAorX19fCiskY29kZS49PDxfX187Cisuc2VjdGlvbgkiLnRleHQiLCNhbGxvYywjZXhlY2luc3RyCisKKy5hbGlnbgkyNTYKK0FFU19UZToKK19fXworJl9kYXRhX3dvcmQoCisJMHhjNjYzNjNhNSwgMHhmODdjN2M4NCwgMHhlZTc3Nzc5OSwgMHhmNjdiN2I4ZCwKKwkweGZmZjJmMjBkLCAweGQ2NmI2YmJkLCAweGRlNmY2ZmIxLCAweDkxYzVjNTU0LAorCTB4NjAzMDMwNTAsIDB4MDIwMTAxMDMsIDB4Y2U2NzY3YTksIDB4NTYyYjJiN2QsCisJMHhlN2ZlZmUxOSwgMHhiNWQ3ZDc2MiwgMHg0ZGFiYWJlNiwgMHhlYzc2NzY5YSwKKwkweDhmY2FjYTQ1LCAweDFmODI4MjlkLCAweDg5YzljOTQwLCAweGZhN2Q3ZDg3LAorCTB4ZWZmYWZhMTUsIDB4YjI1OTU5ZWIsIDB4OGU0NzQ3YzksIDB4ZmJmMGYwMGIsCisJMHg0MWFkYWRlYywgMHhiM2Q0ZDQ2NywgMHg1ZmEyYTJmZCwgMHg0NWFmYWZlYSwKKwkweDIzOWM5Y2JmLCAweDUzYTRhNGY3LCAweGU0NzI3Mjk2LCAweDliYzBjMDViLAorCTB4NzViN2I3YzIsIDB4ZTFmZGZkMWMsIDB4M2Q5MzkzYWUsIDB4NGMyNjI2NmEsCisJMHg2YzM2MzY1YSwgMHg3ZTNmM2Y0MSwgMHhmNWY3ZjcwMiwgMHg4M2NjY2M0ZiwKKwkweDY4MzQzNDVjLCAweDUxYTVhNWY0LCAweGQxZTVlNTM0LCAweGY5ZjFmMTA4LAorCTB4ZTI3MTcxOTMsIDB4YWJkOGQ4NzMsIDB4NjIzMTMxNTMsIDB4MmExNTE1M2YsCisJMHgwODA0MDQwYywgMHg5NWM3Yzc1MiwgMHg0NjIzMjM2NSwgMHg5ZGMzYzM1ZSwKKwkweDMwMTgxODI4LCAweDM3OTY5NmExLCAweDBhMDUwNTBmLCAweDJmOWE5YWI1LAorCTB4MGUwNzA3MDksIDB4MjQxMjEyMzYsIDB4MWI4MDgwOWIsIDB4ZGZlMmUyM2QsCisJMHhjZGViZWIyNiwgMHg0ZTI3Mjc2OSwgMHg3ZmIyYjJjZCwgMHhlYTc1NzU5ZiwKKwkweDEyMDkwOTFiLCAweDFkODM4MzllLCAweDU4MmMyYzc0LCAweDM0MWExYTJlLAorCTB4MzYxYjFiMmQsIDB4ZGM2ZTZlYjIsIDB4YjQ1YTVhZWUsIDB4NWJhMGEwZmIsCisJMHhhNDUyNTJmNiwgMHg3NjNiM2I0ZCwgMHhiN2Q2ZDY2MSwgMHg3ZGIzYjNjZSwKKwkweDUyMjkyOTdiLCAweGRkZTNlMzNlLCAweDVlMmYyZjcxLCAweDEzODQ4NDk3LAorCTB4YTY1MzUzZjUsIDB4YjlkMWQxNjgsIDB4MDAwMDAwMDAsIDB4YzFlZGVkMmMsCisJMHg0MDIwMjA2MCwgMHhlM2ZjZmMxZiwgMHg3OWIxYjFjOCwgMHhiNjViNWJlZCwKKwkweGQ0NmE2YWJlLCAweDhkY2JjYjQ2LCAweDY3YmViZWQ5LCAweDcyMzkzOTRiLAorCTB4OTQ0YTRhZGUsIDB4OTg0YzRjZDQsIDB4YjA1ODU4ZTgsIDB4ODVjZmNmNGEsCisJMHhiYmQwZDA2YiwgMHhjNWVmZWYyYSwgMHg0ZmFhYWFlNSwgMHhlZGZiZmIxNiwKKwkweDg2NDM0M2M1LCAweDlhNGQ0ZGQ3LCAweDY2MzMzMzU1LCAweDExODU4NTk0LAorCTB4OGE0NTQ1Y2YsIDB4ZTlmOWY5MTAsIDB4MDQwMjAyMDYsIDB4ZmU3ZjdmODEsCisJMHhhMDUwNTBmMCwgMHg3ODNjM2M0NCwgMHgyNTlmOWZiYSwgMHg0YmE4YThlMywKKwkweGEyNTE1MWYzLCAweDVkYTNhM2ZlLCAweDgwNDA0MGMwLCAweDA1OGY4ZjhhLAorCTB4M2Y5MjkyYWQsIDB4MjE5ZDlkYmMsIDB4NzAzODM4NDgsIDB4ZjFmNWY1MDQsCisJMHg2M2JjYmNkZiwgMHg3N2I2YjZjMSwgMHhhZmRhZGE3NSwgMHg0MjIxMjE2MywKKwkweDIwMTAxMDMwLCAweGU1ZmZmZjFhLCAweGZkZjNmMzBlLCAweGJmZDJkMjZkLAorCTB4ODFjZGNkNGMsIDB4MTgwYzBjMTQsIDB4MjYxMzEzMzUsIDB4YzNlY2VjMmYsCisJMHhiZTVmNWZlMSwgMHgzNTk3OTdhMiwgMHg4ODQ0NDRjYywgMHgyZTE3MTczOSwKKwkweDkzYzRjNDU3LCAweDU1YTdhN2YyLCAweGZjN2U3ZTgyLCAweDdhM2QzZDQ3LAorCTB4Yzg2NDY0YWMsIDB4YmE1ZDVkZTcsIDB4MzIxOTE5MmIsIDB4ZTY3MzczOTUsCisJMHhjMDYwNjBhMCwgMHgxOTgxODE5OCwgMHg5ZTRmNGZkMSwgMHhhM2RjZGM3ZiwKKwkweDQ0MjIyMjY2LCAweDU0MmEyYTdlLCAweDNiOTA5MGFiLCAweDBiODg4ODgzLAorCTB4OGM0NjQ2Y2EsIDB4YzdlZWVlMjksIDB4NmJiOGI4ZDMsIDB4MjgxNDE0M2MsCisJMHhhN2RlZGU3OSwgMHhiYzVlNWVlMiwgMHgxNjBiMGIxZCwgMHhhZGRiZGI3NiwKKwkweGRiZTBlMDNiLCAweDY0MzIzMjU2LCAweDc0M2EzYTRlLCAweDE0MGEwYTFlLAorCTB4OTI0OTQ5ZGIsIDB4MGMwNjA2MGEsIDB4NDgyNDI0NmMsIDB4Yjg1YzVjZTQsCisJMHg5ZmMyYzI1ZCwgMHhiZGQzZDM2ZSwgMHg0M2FjYWNlZiwgMHhjNDYyNjJhNiwKKwkweDM5OTE5MWE4LCAweDMxOTU5NWE0LCAweGQzZTRlNDM3LCAweGYyNzk3OThiLAorCTB4ZDVlN2U3MzIsIDB4OGJjOGM4NDMsIDB4NmUzNzM3NTksIDB4ZGE2ZDZkYjcsCisJMHgwMThkOGQ4YywgMHhiMWQ1ZDU2NCwgMHg5YzRlNGVkMiwgMHg0OWE5YTllMCwKKwkweGQ4NmM2Y2I0LCAweGFjNTY1NmZhLCAweGYzZjRmNDA3LCAweGNmZWFlYTI1LAorCTB4Y2E2NTY1YWYsIDB4ZjQ3YTdhOGUsIDB4NDdhZWFlZTksIDB4MTAwODA4MTgsCisJMHg2ZmJhYmFkNSwgMHhmMDc4Nzg4OCwgMHg0YTI1MjU2ZiwgMHg1YzJlMmU3MiwKKwkweDM4MWMxYzI0LCAweDU3YTZhNmYxLCAweDczYjRiNGM3LCAweDk3YzZjNjUxLAorCTB4Y2JlOGU4MjMsIDB4YTFkZGRkN2MsIDB4ZTg3NDc0OWMsIDB4M2UxZjFmMjEsCisJMHg5NjRiNGJkZCwgMHg2MWJkYmRkYywgMHgwZDhiOGI4NiwgMHgwZjhhOGE4NSwKKwkweGUwNzA3MDkwLCAweDdjM2UzZTQyLCAweDcxYjViNWM0LCAweGNjNjY2NmFhLAorCTB4OTA0ODQ4ZDgsIDB4MDYwMzAzMDUsIDB4ZjdmNmY2MDEsIDB4MWMwZTBlMTIsCisJMHhjMjYxNjFhMywgMHg2YTM1MzU1ZiwgMHhhZTU3NTdmOSwgMHg2OWI5YjlkMCwKKwkweDE3ODY4NjkxLCAweDk5YzFjMTU4LCAweDNhMWQxZDI3LCAweDI3OWU5ZWI5LAorCTB4ZDllMWUxMzgsIDB4ZWJmOGY4MTMsIDB4MmI5ODk4YjMsIDB4MjIxMTExMzMsCisJMHhkMjY5NjliYiwgMHhhOWQ5ZDk3MCwgMHgwNzhlOGU4OSwgMHgzMzk0OTRhNywKKwkweDJkOWI5YmI2LCAweDNjMWUxZTIyLCAweDE1ODc4NzkyLCAweGM5ZTllOTIwLAorCTB4ODdjZWNlNDksIDB4YWE1NTU1ZmYsIDB4NTAyODI4NzgsIDB4YTVkZmRmN2EsCisJMHgwMzhjOGM4ZiwgMHg1OWExYTFmOCwgMHgwOTg5ODk4MCwgMHgxYTBkMGQxNywKKwkweDY1YmZiZmRhLCAweGQ3ZTZlNjMxLCAweDg0NDI0MmM2LCAweGQwNjg2OGI4LAorCTB4ODI0MTQxYzMsIDB4Mjk5OTk5YjAsIDB4NWEyZDJkNzcsIDB4MWUwZjBmMTEsCisJMHg3YmIwYjBjYiwgMHhhODU0NTRmYywgMHg2ZGJiYmJkNiwgMHgyYzE2MTYzYSk7CiskY29kZS49PDxfX187CisJLmJ5dGUJMHg2MywgMHg3YywgMHg3NywgMHg3YiwgMHhmMiwgMHg2YiwgMHg2ZiwgMHhjNQorCS5ieXRlCTB4MzAsIDB4MDEsIDB4NjcsIDB4MmIsIDB4ZmUsIDB4ZDcsIDB4YWIsIDB4NzYKKwkuYnl0ZQkweGNhLCAweDgyLCAweGM5LCAweDdkLCAweGZhLCAweDU5LCAweDQ3LCAweGYwCisJLmJ5dGUJMHhhZCwgMHhkNCwgMHhhMiwgMHhhZiwgMHg5YywgMHhhNCwgMHg3MiwgMHhjMAorCS5ieXRlCTB4YjcsIDB4ZmQsIDB4OTMsIDB4MjYsIDB4MzYsIDB4M2YsIDB4ZjcsIDB4Y2MKKwkuYnl0ZQkweDM0LCAweGE1LCAweGU1LCAweGYxLCAweDcxLCAweGQ4LCAweDMxLCAweDE1CisJLmJ5dGUJMHgwNCwgMHhjNywgMHgyMywgMHhjMywgMHgxOCwgMHg5NiwgMHgwNSwgMHg5YQorCS5ieXRlCTB4MDcsIDB4MTIsIDB4ODAsIDB4ZTIsIDB4ZWIsIDB4MjcsIDB4YjIsIDB4NzUKKwkuYnl0ZQkweDA5LCAweDgzLCAweDJjLCAweDFhLCAweDFiLCAweDZlLCAweDVhLCAweGEwCisJLmJ5dGUJMHg1MiwgMHgzYiwgMHhkNiwgMHhiMywgMHgyOSwgMHhlMywgMHgyZiwgMHg4NAorCS5ieXRlCTB4NTMsIDB4ZDEsIDB4MDAsIDB4ZWQsIDB4MjAsIDB4ZmMsIDB4YjEsIDB4NWIKKwkuYnl0ZQkweDZhLCAweGNiLCAweGJlLCAweDM5LCAweDRhLCAweDRjLCAweDU4LCAweGNmCisJLmJ5dGUJMHhkMCwgMHhlZiwgMHhhYSwgMHhmYiwgMHg0MywgMHg0ZCwgMHgzMywgMHg4NQorCS5ieXRlCTB4NDUsIDB4ZjksIDB4MDIsIDB4N2YsIDB4NTAsIDB4M2MsIDB4OWYsIDB4YTgKKwkuYnl0ZQkweDUxLCAweGEzLCAweDQwLCAweDhmLCAweDkyLCAweDlkLCAweDM4LCAweGY1CisJLmJ5dGUJMHhiYywgMHhiNiwgMHhkYSwgMHgyMSwgMHgxMCwgMHhmZiwgMHhmMywgMHhkMgorCS5ieXRlCTB4Y2QsIDB4MGMsIDB4MTMsIDB4ZWMsIDB4NWYsIDB4OTcsIDB4NDQsIDB4MTcKKwkuYnl0ZQkweGM0LCAweGE3LCAweDdlLCAweDNkLCAweDY0LCAweDVkLCAweDE5LCAweDczCisJLmJ5dGUJMHg2MCwgMHg4MSwgMHg0ZiwgMHhkYywgMHgyMiwgMHgyYSwgMHg5MCwgMHg4OAorCS5ieXRlCTB4NDYsIDB4ZWUsIDB4YjgsIDB4MTQsIDB4ZGUsIDB4NWUsIDB4MGIsIDB4ZGIKKwkuYnl0ZQkweGUwLCAweDMyLCAweDNhLCAweDBhLCAweDQ5LCAweDA2LCAweDI0LCAweDVjCisJLmJ5dGUJMHhjMiwgMHhkMywgMHhhYywgMHg2MiwgMHg5MSwgMHg5NSwgMHhlNCwgMHg3OQorCS5ieXRlCTB4ZTcsIDB4YzgsIDB4MzcsIDB4NmQsIDB4OGQsIDB4ZDUsIDB4NGUsIDB4YTkKKwkuYnl0ZQkweDZjLCAweDU2LCAweGY0LCAweGVhLCAweDY1LCAweDdhLCAweGFlLCAweDA4CisJLmJ5dGUJMHhiYSwgMHg3OCwgMHgyNSwgMHgyZSwgMHgxYywgMHhhNiwgMHhiNCwgMHhjNgorCS5ieXRlCTB4ZTgsIDB4ZGQsIDB4NzQsIDB4MWYsIDB4NGIsIDB4YmQsIDB4OGIsIDB4OGEKKwkuYnl0ZQkweDcwLCAweDNlLCAweGI1LCAweDY2LCAweDQ4LCAweDAzLCAweGY2LCAweDBlCisJLmJ5dGUJMHg2MSwgMHgzNSwgMHg1NywgMHhiOSwgMHg4NiwgMHhjMSwgMHgxZCwgMHg5ZQorCS5ieXRlCTB4ZTEsIDB4ZjgsIDB4OTgsIDB4MTEsIDB4NjksIDB4ZDksIDB4OGUsIDB4OTQKKwkuYnl0ZQkweDliLCAweDFlLCAweDg3LCAweGU5LCAweGNlLCAweDU1LCAweDI4LCAweGRmCisJLmJ5dGUJMHg4YywgMHhhMSwgMHg4OSwgMHgwZCwgMHhiZiwgMHhlNiwgMHg0MiwgMHg2OAorCS5ieXRlCTB4NDEsIDB4OTksIDB4MmQsIDB4MGYsIDB4YjAsIDB4NTQsIDB4YmIsIDB4MTYKKy50eXBlCUFFU19UZSwjb2JqZWN0Cisuc2l6ZQlBRVNfVGUsKC4tQUVTX1RlKQorCisuYWxpZ24JNjQKKy5za2lwCTE2Citfc3BhcmN2OV9BRVNfZW5jcnlwdDoKKwlzYXZlCSVzcCwtJGZyYW1lLSRsb2NhbHMsJXNwCisJc3R4CSVpNyxbJXNwKyRiaWFzKyRmcmFtZSswXQkhIG9mZi1sb2FkIHJldHVybiBhZGRyZXNzCisJbGQJWyRrZXkrMjQwXSwkcm91bmRzCisJbGQJWyRrZXkrMF0sJHQwCisJbGQJWyRrZXkrNF0sJHQxCQkJIQorCWxkCVska2V5KzhdLCR0MgorCXNybAkkcm91bmRzLDEsJHJvdW5kcworCXhvcgkkdDAsJHMwLCRzMAorCWxkCVska2V5KzEyXSwkdDMKKwlzcmwJJHMwLDIxLCRhY2MwCisJeG9yCSR0MSwkczEsJHMxCisJbGQJWyRrZXkrMTZdLCR0MAorCXNybAkkczEsMTMsJGFjYzEJCQkhCisJeG9yCSR0MiwkczIsJHMyCisJbGQJWyRrZXkrMjBdLCR0MQorCXhvcgkkdDMsJHMzLCRzMworCWxkCVska2V5KzI0XSwkdDIKKwlhbmQJJGFjYzAsMjA0MCwkYWNjMAorCWxkCVska2V5KzI4XSwkdDMKKwlub3AKKy5MZW5jX2xvb3A6CisJc3JsCSRzMiw1LCRhY2MyCQkJIQorCWFuZAkkYWNjMSwyMDQwLCRhY2MxCisJbGR4CVskdGJsKyRhY2MwXSwkYWNjMAorCXNsbAkkczMsMywkYWNjMworCWFuZAkkYWNjMiwyMDQwLCRhY2MyCisJbGR4CVskdGJsKyRhY2MxXSwkYWNjMQorCXNybAkkczEsMjEsJGFjYzQKKwlhbmQJJGFjYzMsMjA0MCwkYWNjMworCWxkeAlbJHRibCskYWNjMl0sJGFjYzIJCSEKKwlzcmwJJHMyLDEzLCRhY2M1CisJYW5kCSRhY2M0LDIwNDAsJGFjYzQKKwlsZHgJWyR0YmwrJGFjYzNdLCRhY2MzCisJc3JsCSRzMyw1LCRhY2M2CisJYW5kCSRhY2M1LDIwNDAsJGFjYzUKKwlsZHgJWyR0YmwrJGFjYzRdLCRhY2M0CisJZm1vdnMJJWYwLCVmMAorCXNsbAkkczAsMywkYWNjNwkJCSEKKwlhbmQJJGFjYzYsMjA0MCwkYWNjNgorCWxkeAlbJHRibCskYWNjNV0sJGFjYzUKKwlzcmwJJHMyLDIxLCRhY2M4CisJYW5kCSRhY2M3LDIwNDAsJGFjYzcKKwlsZHgJWyR0YmwrJGFjYzZdLCRhY2M2CisJc3JsCSRzMywxMywkYWNjOQorCWFuZAkkYWNjOCwyMDQwLCRhY2M4CisJbGR4CVskdGJsKyRhY2M3XSwkYWNjNwkJIQorCXNybAkkczAsNSwkYWNjMTAKKwlhbmQJJGFjYzksMjA0MCwkYWNjOQorCWxkeAlbJHRibCskYWNjOF0sJGFjYzgKKwlzbGwJJHMxLDMsJGFjYzExCisJYW5kCSRhY2MxMCwyMDQwLCRhY2MxMAorCWxkeAlbJHRibCskYWNjOV0sJGFjYzkKKwlmbW92cwklZjAsJWYwCisJc3JsCSRzMywyMSwkYWNjMTIJCQkhCisJYW5kCSRhY2MxMSwyMDQwLCRhY2MxMQorCWxkeAlbJHRibCskYWNjMTBdLCRhY2MxMAorCXNybAkkczAsMTMsJGFjYzEzCisJYW5kCSRhY2MxMiwyMDQwLCRhY2MxMgorCWxkeAlbJHRibCskYWNjMTFdLCRhY2MxMQorCXNybAkkczEsNSwkYWNjMTQKKwlhbmQJJGFjYzEzLDIwNDAsJGFjYzEzCisJbGR4CVskdGJsKyRhY2MxMl0sJGFjYzEyCQkhCisJc2xsCSRzMiwzLCRhY2MxNQorCWFuZAkkYWNjMTQsMjA0MCwkYWNjMTQKKwlsZHgJWyR0YmwrJGFjYzEzXSwkYWNjMTMKKwlhbmQJJGFjYzE1LDIwNDAsJGFjYzE1CisJYWRkCSRrZXksMzIsJGtleQorCWxkeAlbJHRibCskYWNjMTRdLCRhY2MxNAorCWZtb3ZzCSVmMCwlZjAKKwlzdWJjYwkkcm91bmRzLDEsJHJvdW5kcwkJIQorCWxkeAlbJHRibCskYWNjMTVdLCRhY2MxNQorCWJ6LGEscG4JJWljYywuTGVuY19sYXN0CisJYWRkCSR0YmwsMjA0OCwkcm91bmRzCisKKwkJc3JseAkkYWNjMSw4LCRhY2MxCisJCXhvcgkkYWNjMCwkdDAsJHQwCisJbGQJWyRrZXkrMF0sJHMwCisJZm1vdnMJJWYwLCVmMAorCQlzcmx4CSRhY2MyLDE2LCRhY2MyCQkhCisJCXhvcgkkYWNjMSwkdDAsJHQwCisJbGQJWyRrZXkrNF0sJHMxCisJCXNybHgJJGFjYzMsMjQsJGFjYzMKKwkJeG9yCSRhY2MyLCR0MCwkdDAKKwlsZAlbJGtleSs4XSwkczIKKwkJc3JseAkkYWNjNSw4LCRhY2M1CisJCXhvcgkkYWNjMywkdDAsJHQwCisJbGQJWyRrZXkrMTJdLCRzMwkJCSEKKwkJc3JseAkkYWNjNiwxNiwkYWNjNgorCQl4b3IJJGFjYzQsJHQxLCR0MQorCWZtb3ZzCSVmMCwlZjAKKwkJc3JseAkkYWNjNywyNCwkYWNjNworCQl4b3IJJGFjYzUsJHQxLCR0MQorCQlzcmx4CSRhY2M5LDgsJGFjYzkKKwkJeG9yCSRhY2M2LCR0MSwkdDEKKwkJc3JseAkkYWNjMTAsMTYsJGFjYzEwCSEKKwkJeG9yCSRhY2M3LCR0MSwkdDEKKwkJc3JseAkkYWNjMTEsMjQsJGFjYzExCisJCXhvcgkkYWNjOCwkdDIsJHQyCisJCXNybHgJJGFjYzEzLDgsJGFjYzEzCisJCXhvcgkkYWNjOSwkdDIsJHQyCisJCXNybHgJJGFjYzE0LDE2LCRhY2MxNAorCQl4b3IJJGFjYzEwLCR0MiwkdDIKKwkJc3JseAkkYWNjMTUsMjQsJGFjYzE1CSEKKwkJeG9yCSRhY2MxMSwkdDIsJHQyCisJCXhvcgkkYWNjMTIsJGFjYzE0LCRhY2MxNAorCQl4b3IJJGFjYzEzLCR0MywkdDMKKwlzcmwJJHQwLDIxLCRhY2MwCisJCXhvcgkkYWNjMTQsJHQzLCR0MworCXNybAkkdDEsMTMsJGFjYzEKKwkJeG9yCSRhY2MxNSwkdDMsJHQzCisKKwlhbmQJJGFjYzAsMjA0MCwkYWNjMAkJIQorCXNybAkkdDIsNSwkYWNjMgorCWFuZAkkYWNjMSwyMDQwLCRhY2MxCisJbGR4CVskdGJsKyRhY2MwXSwkYWNjMAorCXNsbAkkdDMsMywkYWNjMworCWFuZAkkYWNjMiwyMDQwLCRhY2MyCisJbGR4CVskdGJsKyRhY2MxXSwkYWNjMQorCWZtb3ZzCSVmMCwlZjAKKwlzcmwJJHQxLDIxLCRhY2M0CQkJIQorCWFuZAkkYWNjMywyMDQwLCRhY2MzCisJbGR4CVskdGJsKyRhY2MyXSwkYWNjMgorCXNybAkkdDIsMTMsJGFjYzUKKwlhbmQJJGFjYzQsMjA0MCwkYWNjNAorCWxkeAlbJHRibCskYWNjM10sJGFjYzMKKwlzcmwJJHQzLDUsJGFjYzYKKwlhbmQJJGFjYzUsMjA0MCwkYWNjNQorCWxkeAlbJHRibCskYWNjNF0sJGFjYzQJCSEKKwlzbGwJJHQwLDMsJGFjYzcKKwlhbmQJJGFjYzYsMjA0MCwkYWNjNgorCWxkeAlbJHRibCskYWNjNV0sJGFjYzUKKwlzcmwJJHQyLDIxLCRhY2M4CisJYW5kCSRhY2M3LDIwNDAsJGFjYzcKKwlsZHgJWyR0YmwrJGFjYzZdLCRhY2M2CisJZm1vdnMJJWYwLCVmMAorCXNybAkkdDMsMTMsJGFjYzkJCQkhCisJYW5kCSRhY2M4LDIwNDAsJGFjYzgKKwlsZHgJWyR0YmwrJGFjYzddLCRhY2M3CisJc3JsCSR0MCw1LCRhY2MxMAorCWFuZAkkYWNjOSwyMDQwLCRhY2M5CisJbGR4CVskdGJsKyRhY2M4XSwkYWNjOAorCXNsbAkkdDEsMywkYWNjMTEKKwlhbmQJJGFjYzEwLDIwNDAsJGFjYzEwCisJbGR4CVskdGJsKyRhY2M5XSwkYWNjOQkJIQorCXNybAkkdDMsMjEsJGFjYzEyCisJYW5kCSRhY2MxMSwyMDQwLCRhY2MxMQorCWxkeAlbJHRibCskYWNjMTBdLCRhY2MxMAorCXNybAkkdDAsMTMsJGFjYzEzCisJYW5kCSRhY2MxMiwyMDQwLCRhY2MxMgorCWxkeAlbJHRibCskYWNjMTFdLCRhY2MxMQorCWZtb3ZzCSVmMCwlZjAKKwlzcmwJJHQxLDUsJGFjYzE0CQkJIQorCWFuZAkkYWNjMTMsMjA0MCwkYWNjMTMKKwlsZHgJWyR0YmwrJGFjYzEyXSwkYWNjMTIKKwlzbGwJJHQyLDMsJGFjYzE1CisJYW5kCSRhY2MxNCwyMDQwLCRhY2MxNAorCWxkeAlbJHRibCskYWNjMTNdLCRhY2MxMworCQlzcmx4CSRhY2MxLDgsJGFjYzEKKwlhbmQJJGFjYzE1LDIwNDAsJGFjYzE1CisJbGR4CVskdGJsKyRhY2MxNF0sJGFjYzE0CQkhCisKKwkJc3JseAkkYWNjMiwxNiwkYWNjMgorCQl4b3IJJGFjYzAsJHMwLCRzMAorCWxkeAlbJHRibCskYWNjMTVdLCRhY2MxNQorCQlzcmx4CSRhY2MzLDI0LCRhY2MzCisJCXhvcgkkYWNjMSwkczAsJHMwCisJbGQJWyRrZXkrMTZdLCR0MAorCWZtb3ZzCSVmMCwlZjAKKwkJc3JseAkkYWNjNSw4LCRhY2M1CQkhCisJCXhvcgkkYWNjMiwkczAsJHMwCisJbGQJWyRrZXkrMjBdLCR0MQorCQlzcmx4CSRhY2M2LDE2LCRhY2M2CisJCXhvcgkkYWNjMywkczAsJHMwCisJbGQJWyRrZXkrMjRdLCR0MgorCQlzcmx4CSRhY2M3LDI0LCRhY2M3CisJCXhvcgkkYWNjNCwkczEsJHMxCisJbGQJWyRrZXkrMjhdLCR0MwkJCSEKKwkJc3JseAkkYWNjOSw4LCRhY2M5CisJCXhvcgkkYWNjNSwkczEsJHMxCisJbGR4CVskdGJsKzIwNDgrMF0sJWcwCQkhIHByZWZldGNoIHRlNAorCQlzcmx4CSRhY2MxMCwxNiwkYWNjMTAKKwkJeG9yCSRhY2M2LCRzMSwkczEKKwlsZHgJWyR0YmwrMjA0OCszMl0sJWcwCQkhIHByZWZldGNoIHRlNAorCQlzcmx4CSRhY2MxMSwyNCwkYWNjMTEKKwkJeG9yCSRhY2M3LCRzMSwkczEKKwlsZHgJWyR0YmwrMjA0OCs2NF0sJWcwCQkhIHByZWZldGNoIHRlNAorCQlzcmx4CSRhY2MxMyw4LCRhY2MxMworCQl4b3IJJGFjYzgsJHMyLCRzMgorCWxkeAlbJHRibCsyMDQ4Kzk2XSwlZzAJCSEgcHJlZmV0Y2ggdGU0CisJCXNybHgJJGFjYzE0LDE2LCRhY2MxNAkhCisJCXhvcgkkYWNjOSwkczIsJHMyCisJbGR4CVskdGJsKzIwNDgrMTI4XSwlZzAJCSEgcHJlZmV0Y2ggdGU0CisJCXNybHgJJGFjYzE1LDI0LCRhY2MxNQorCQl4b3IJJGFjYzEwLCRzMiwkczIKKwlsZHgJWyR0YmwrMjA0OCsxNjBdLCVnMAkJISBwcmVmZXRjaCB0ZTQKKwlzcmwJJHMwLDIxLCRhY2MwCisJCXhvcgkkYWNjMTEsJHMyLCRzMgorCWxkeAlbJHRibCsyMDQ4KzE5Ml0sJWcwCQkhIHByZWZldGNoIHRlNAorCQl4b3IJJGFjYzEyLCRhY2MxNCwkYWNjMTQKKwkJeG9yCSRhY2MxMywkczMsJHMzCisJbGR4CVskdGJsKzIwNDgrMjI0XSwlZzAJCSEgcHJlZmV0Y2ggdGU0CisJc3JsCSRzMSwxMywkYWNjMQkJCSEKKwkJeG9yCSRhY2MxNCwkczMsJHMzCisJCXhvcgkkYWNjMTUsJHMzLCRzMworCWJhCS5MZW5jX2xvb3AKKwlhbmQJJGFjYzAsMjA0MCwkYWNjMAorCisuYWxpZ24JMzIKKy5MZW5jX2xhc3Q6CisJCXNybHgJJGFjYzEsOCwkYWNjMQkJIQorCQl4b3IJJGFjYzAsJHQwLCR0MAorCWxkCVska2V5KzBdLCRzMAorCQlzcmx4CSRhY2MyLDE2LCRhY2MyCisJCXhvcgkkYWNjMSwkdDAsJHQwCisJbGQJWyRrZXkrNF0sJHMxCisJCXNybHgJJGFjYzMsMjQsJGFjYzMKKwkJeG9yCSRhY2MyLCR0MCwkdDAKKwlsZAlbJGtleSs4XSwkczIJCQkhCisJCXNybHgJJGFjYzUsOCwkYWNjNQorCQl4b3IJJGFjYzMsJHQwLCR0MAorCWxkCVska2V5KzEyXSwkczMKKwkJc3JseAkkYWNjNiwxNiwkYWNjNgorCQl4b3IJJGFjYzQsJHQxLCR0MQorCQlzcmx4CSRhY2M3LDI0LCRhY2M3CisJCXhvcgkkYWNjNSwkdDEsJHQxCisJCXNybHgJJGFjYzksOCwkYWNjOQkJIQorCQl4b3IJJGFjYzYsJHQxLCR0MQorCQlzcmx4CSRhY2MxMCwxNiwkYWNjMTAKKwkJeG9yCSRhY2M3LCR0MSwkdDEKKwkJc3JseAkkYWNjMTEsMjQsJGFjYzExCisJCXhvcgkkYWNjOCwkdDIsJHQyCisJCXNybHgJJGFjYzEzLDgsJGFjYzEzCisJCXhvcgkkYWNjOSwkdDIsJHQyCisJCXNybHgJJGFjYzE0LDE2LCRhY2MxNAkhCisJCXhvcgkkYWNjMTAsJHQyLCR0MgorCQlzcmx4CSRhY2MxNSwyNCwkYWNjMTUKKwkJeG9yCSRhY2MxMSwkdDIsJHQyCisJCXhvcgkkYWNjMTIsJGFjYzE0LCRhY2MxNAorCQl4b3IJJGFjYzEzLCR0MywkdDMKKwlzcmwJJHQwLDI0LCRhY2MwCisJCXhvcgkkYWNjMTQsJHQzLCR0MworCXNybAkkdDEsMTYsJGFjYzEJCQkhCisJCXhvcgkkYWNjMTUsJHQzLCR0MworCisJc3JsCSR0Miw4LCRhY2MyCisJYW5kCSRhY2MxLDI1NSwkYWNjMQorCWxkdWIJWyRyb3VuZHMrJGFjYzBdLCRhY2MwCisJc3JsCSR0MSwyNCwkYWNjNAorCWFuZAkkYWNjMiwyNTUsJGFjYzIKKwlsZHViCVskcm91bmRzKyRhY2MxXSwkYWNjMQorCXNybAkkdDIsMTYsJGFjYzUJCQkhCisJYW5kCSR0MywyNTUsJGFjYzMKKwlsZHViCVskcm91bmRzKyRhY2MyXSwkYWNjMgorCWxkdWIJWyRyb3VuZHMrJGFjYzNdLCRhY2MzCisJc3JsCSR0Myw4LCRhY2M2CisJYW5kCSRhY2M1LDI1NSwkYWNjNQorCWxkdWIJWyRyb3VuZHMrJGFjYzRdLCRhY2M0CisJZm1vdnMJJWYwLCVmMAorCXNybAkkdDIsMjQsJGFjYzgJCQkhCisJYW5kCSRhY2M2LDI1NSwkYWNjNgorCWxkdWIJWyRyb3VuZHMrJGFjYzVdLCRhY2M1CisJc3JsCSR0MywxNiwkYWNjOQorCWFuZAkkdDAsMjU1LCRhY2M3CisJbGR1YglbJHJvdW5kcyskYWNjNl0sJGFjYzYKKwlsZHViCVskcm91bmRzKyRhY2M3XSwkYWNjNworCWZtb3ZzCSVmMCwlZjAKKwlzcmwJJHQwLDgsJGFjYzEwCQkJIQorCWFuZAkkYWNjOSwyNTUsJGFjYzkKKwlsZHViCVskcm91bmRzKyRhY2M4XSwkYWNjOAorCXNybAkkdDMsMjQsJGFjYzEyCisJYW5kCSRhY2MxMCwyNTUsJGFjYzEwCisJbGR1YglbJHJvdW5kcyskYWNjOV0sJGFjYzkKKwlzcmwJJHQwLDE2LCRhY2MxMworCWFuZAkkdDEsMjU1LCRhY2MxMQorCWxkdWIJWyRyb3VuZHMrJGFjYzEwXSwkYWNjMTAJCSEKKwlzcmwJJHQxLDgsJGFjYzE0CisJYW5kCSRhY2MxMywyNTUsJGFjYzEzCisJbGR1YglbJHJvdW5kcyskYWNjMTFdLCRhY2MxMQorCWxkdWIJWyRyb3VuZHMrJGFjYzEyXSwkYWNjMTIKKwlhbmQJJGFjYzE0LDI1NSwkYWNjMTQKKwlsZHViCVskcm91bmRzKyRhY2MxM10sJGFjYzEzCisJYW5kCSR0MiwyNTUsJGFjYzE1CisJbGR1YglbJHJvdW5kcyskYWNjMTRdLCRhY2MxNAkJIQorCisJCXNsbAkkYWNjMCwyNCwkYWNjMAorCQl4b3IJJGFjYzMsJHMwLCRzMAorCWxkdWIJWyRyb3VuZHMrJGFjYzE1XSwkYWNjMTUKKwkJc2xsCSRhY2MxLDE2LCRhY2MxCisJCXhvcgkkYWNjMCwkczAsJHMwCisJbGR4CVslc3ArJGJpYXMrJGZyYW1lKzBdLCVpNwkhIHJlc3RvcmUgcmV0dXJuIGFkZHJlc3MKKwlmbW92cwklZjAsJWYwCisJCXNsbAkkYWNjMiw4LCRhY2MyCQkhCisJCXhvcgkkYWNjMSwkczAsJHMwCisJCXNsbAkkYWNjNCwyNCwkYWNjNAorCQl4b3IJJGFjYzIsJHMwLCRzMAorCQlzbGwJJGFjYzUsMTYsJGFjYzUKKwkJeG9yCSRhY2M3LCRzMSwkczEKKwkJc2xsCSRhY2M2LDgsJGFjYzYKKwkJeG9yCSRhY2M0LCRzMSwkczEKKwkJc2xsCSRhY2M4LDI0LCRhY2M4CQkhCisJCXhvcgkkYWNjNSwkczEsJHMxCisJCXNsbAkkYWNjOSwxNiwkYWNjOQorCQl4b3IJJGFjYzExLCRzMiwkczIKKwkJc2xsCSRhY2MxMCw4LCRhY2MxMAorCQl4b3IJJGFjYzYsJHMxLCRzMQorCQlzbGwJJGFjYzEyLDI0LCRhY2MxMgorCQl4b3IJJGFjYzgsJHMyLCRzMgorCQlzbGwJJGFjYzEzLDE2LCRhY2MxMwkhCisJCXhvcgkkYWNjOSwkczIsJHMyCisJCXNsbAkkYWNjMTQsOCwkYWNjMTQKKwkJeG9yCSRhY2MxMCwkczIsJHMyCisJCXhvcgkkYWNjMTIsJGFjYzE0LCRhY2MxNAorCQl4b3IJJGFjYzEzLCRzMywkczMKKwkJeG9yCSRhY2MxNCwkczMsJHMzCisJCXhvcgkkYWNjMTUsJHMzLCRzMworCisJcmV0CisJcmVzdG9yZQorLnR5cGUJX3NwYXJjdjlfQUVTX2VuY3J5cHQsI2Z1bmN0aW9uCisuc2l6ZQlfc3BhcmN2OV9BRVNfZW5jcnlwdCwoLi1fc3BhcmN2OV9BRVNfZW5jcnlwdCkKKworLmFsaWduCTMyCisuZ2xvYmwJQUVTX2VuY3J5cHQKK0FFU19lbmNyeXB0OgorCW9yCSVvMCwlbzEsJWcxCisJYW5kY2MJJWcxLDMsJWcwCisJYm56LHBuCSV4Y2MsLkx1bmFsaWduZWRfZW5jCisJc2F2ZQklc3AsLSRmcmFtZSwlc3AKKworCWxkCVslaTArMF0sJW8wCisJbGQJWyVpMCs0XSwlbzEKKwlsZAlbJWkwKzhdLCVvMgorCWxkCVslaTArMTJdLCVvMworCisxOgljYWxsCS4rOAorCWFkZAklbzcsQUVTX1RlLTFiLCVvNAorCWNhbGwJX3NwYXJjdjlfQUVTX2VuY3J5cHQKKwltb3YJJWkyLCVvNQorCisJc3QJJW8wLFslaTErMF0KKwlzdAklbzEsWyVpMSs0XQorCXN0CSVvMixbJWkxKzhdCisJc3QJJW8zLFslaTErMTJdCisKKwlyZXQKKwlyZXN0b3JlCisKKy5hbGlnbgkzMgorLkx1bmFsaWduZWRfZW5jOgorCWxkdWIJWyVpMCswXSwlbDAKKwlsZHViCVslaTArMV0sJWwxCisJbGR1YglbJWkwKzJdLCVsMgorCisJc2xsCSVsMCwyNCwlbDAKKwlsZHViCVslaTArM10sJWwzCisJc2xsCSVsMSwxNiwlbDEKKwlsZHViCVslaTArNF0sJWw0CisJc2xsCSVsMiw4LCVsMgorCW9yCSVsMSwlbDAsJWwwCisJbGR1YglbJWkwKzVdLCVsNQorCXNsbAklbDQsMjQsJWw0CisJb3IJJWwzLCVsMiwlbDIKKwlsZHViCVslaTArNl0sJWw2CisJc2xsCSVsNSwxNiwlbDUKKwlvcgklbDAsJWwyLCVvMAorCWxkdWIJWyVpMCs3XSwlbDcKKworCXNsbAklbDYsOCwlbDYKKwlvcgklbDUsJWw0LCVsNAorCWxkdWIJWyVpMCs4XSwlbDAKKwlvcgklbDcsJWw2LCVsNgorCWxkdWIJWyVpMCs5XSwlbDEKKwlvcgklbDQsJWw2LCVvMQorCWxkdWIJWyVpMCsxMF0sJWwyCisKKwlzbGwJJWwwLDI0LCVsMAorCWxkdWIJWyVpMCsxMV0sJWwzCisJc2xsCSVsMSwxNiwlbDEKKwlsZHViCVslaTArMTJdLCVsNAorCXNsbAklbDIsOCwlbDIKKwlvcgklbDEsJWwwLCVsMAorCWxkdWIJWyVpMCsxM10sJWw1CisJc2xsCSVsNCwyNCwlbDQKKwlvcgklbDMsJWwyLCVsMgorCWxkdWIJWyVpMCsxNF0sJWw2CisJc2xsCSVsNSwxNiwlbDUKKwlvcgklbDAsJWwyLCVvMgorCWxkdWIJWyVpMCsxNV0sJWw3CisKKwlzbGwJJWw2LDgsJWw2CisJb3IJJWw1LCVsNCwlbDQKKwlvcgklbDcsJWw2LCVsNgorCW9yCSVsNCwlbDYsJW8zCisKKzE6CWNhbGwJLis4CisJYWRkCSVvNyxBRVNfVGUtMWIsJW80CisJY2FsbAlfc3BhcmN2OV9BRVNfZW5jcnlwdAorCW1vdgklaTIsJW81CisKKwlzcmwJJW8wLDI0LCVsMAorCXNybAklbzAsMTYsJWwxCisJc3RiCSVsMCxbJWkxKzBdCisJc3JsCSVvMCw4LCVsMgorCXN0YgklbDEsWyVpMSsxXQorCXN0YgklbDIsWyVpMSsyXQorCXNybAklbzEsMjQsJWw0CisJc3RiCSVvMCxbJWkxKzNdCisKKwlzcmwJJW8xLDE2LCVsNQorCXN0YgklbDQsWyVpMSs0XQorCXNybAklbzEsOCwlbDYKKwlzdGIJJWw1LFslaTErNV0KKwlzdGIJJWw2LFslaTErNl0KKwlzcmwJJW8yLDI0LCVsMAorCXN0YgklbzEsWyVpMSs3XQorCisJc3JsCSVvMiwxNiwlbDEKKwlzdGIJJWwwLFslaTErOF0KKwlzcmwJJW8yLDgsJWwyCisJc3RiCSVsMSxbJWkxKzldCisJc3RiCSVsMixbJWkxKzEwXQorCXNybAklbzMsMjQsJWw0CisJc3RiCSVvMixbJWkxKzExXQorCisJc3JsCSVvMywxNiwlbDUKKwlzdGIJJWw0LFslaTErMTJdCisJc3JsCSVvMyw4LCVsNgorCXN0YgklbDUsWyVpMSsxM10KKwlzdGIJJWw2LFslaTErMTRdCisJc3RiCSVvMyxbJWkxKzE1XQorCisJcmV0CisJcmVzdG9yZQorLnR5cGUJQUVTX2VuY3J5cHQsI2Z1bmN0aW9uCisuc2l6ZQlBRVNfZW5jcnlwdCwoLi1BRVNfZW5jcnlwdCkKKworX19fCisKKyRjb2RlLj08PF9fXzsKKy5hbGlnbgkyNTYKK0FFU19UZDoKK19fXworJl9kYXRhX3dvcmQoCisJMHg1MWY0YTc1MCwgMHg3ZTQxNjU1MywgMHgxYTE3YTRjMywgMHgzYTI3NWU5NiwKKwkweDNiYWI2YmNiLCAweDFmOWQ0NWYxLCAweGFjZmE1OGFiLCAweDRiZTMwMzkzLAorCTB4MjAzMGZhNTUsIDB4YWQ3NjZkZjYsIDB4ODhjYzc2OTEsIDB4ZjUwMjRjMjUsCisJMHg0ZmU1ZDdmYywgMHhjNTJhY2JkNywgMHgyNjM1NDQ4MCwgMHhiNTYyYTM4ZiwKKwkweGRlYjE1YTQ5LCAweDI1YmExYjY3LCAweDQ1ZWEwZTk4LCAweDVkZmVjMGUxLAorCTB4YzMyZjc1MDIsIDB4ODE0Y2YwMTIsIDB4OGQ0Njk3YTMsIDB4NmJkM2Y5YzYsCisJMHgwMzhmNWZlNywgMHgxNTkyOWM5NSwgMHhiZjZkN2FlYiwgMHg5NTUyNTlkYSwKKwkweGQ0YmU4MzJkLCAweDU4NzQyMWQzLCAweDQ5ZTA2OTI5LCAweDhlYzljODQ0LAorCTB4NzVjMjg5NmEsIDB4ZjQ4ZTc5NzgsIDB4OTk1ODNlNmIsIDB4MjdiOTcxZGQsCisJMHhiZWUxNGZiNiwgMHhmMDg4YWQxNywgMHhjOTIwYWM2NiwgMHg3ZGNlM2FiNCwKKwkweDYzZGY0YTE4LCAweGU1MWEzMTgyLCAweDk3NTEzMzYwLCAweDYyNTM3ZjQ1LAorCTB4YjE2NDc3ZTAsIDB4YmI2YmFlODQsIDB4ZmU4MWEwMWMsIDB4ZjkwODJiOTQsCisJMHg3MDQ4Njg1OCwgMHg4ZjQ1ZmQxOSwgMHg5NGRlNmM4NywgMHg1MjdiZjhiNywKKwkweGFiNzNkMzIzLCAweDcyNGIwMmUyLCAweGUzMWY4ZjU3LCAweDY2NTVhYjJhLAorCTB4YjJlYjI4MDcsIDB4MmZiNWMyMDMsIDB4ODZjNTdiOWEsIDB4ZDMzNzA4YTUsCisJMHgzMDI4ODdmMiwgMHgyM2JmYTViMiwgMHgwMjAzNmFiYSwgMHhlZDE2ODI1YywKKwkweDhhY2YxYzJiLCAweGE3NzliNDkyLCAweGYzMDdmMmYwLCAweDRlNjllMmExLAorCTB4NjVkYWY0Y2QsIDB4MDYwNWJlZDUsIDB4ZDEzNDYyMWYsIDB4YzRhNmZlOGEsCisJMHgzNDJlNTM5ZCwgMHhhMmYzNTVhMCwgMHgwNThhZTEzMiwgMHhhNGY2ZWI3NSwKKwkweDBiODNlYzM5LCAweDQwNjBlZmFhLCAweDVlNzE5ZjA2LCAweGJkNmUxMDUxLAorCTB4M2UyMThhZjksIDB4OTZkZDA2M2QsIDB4ZGQzZTA1YWUsIDB4NGRlNmJkNDYsCisJMHg5MTU0OGRiNSwgMHg3MWM0NWQwNSwgMHgwNDA2ZDQ2ZiwgMHg2MDUwMTVmZiwKKwkweDE5OThmYjI0LCAweGQ2YmRlOTk3LCAweDg5NDA0M2NjLCAweDY3ZDk5ZTc3LAorCTB4YjBlODQyYmQsIDB4MDc4OThiODgsIDB4ZTcxOTViMzgsIDB4NzljOGVlZGIsCisJMHhhMTdjMGE0NywgMHg3YzQyMGZlOSwgMHhmODg0MWVjOSwgMHgwMDAwMDAwMCwKKwkweDA5ODA4NjgzLCAweDMyMmJlZDQ4LCAweDFlMTE3MGFjLCAweDZjNWE3MjRlLAorCTB4ZmQwZWZmZmIsIDB4MGY4NTM4NTYsIDB4M2RhZWQ1MWUsIDB4MzYyZDM5MjcsCisJMHgwYTBmZDk2NCwgMHg2ODVjYTYyMSwgMHg5YjViNTRkMSwgMHgyNDM2MmUzYSwKKwkweDBjMGE2N2IxLCAweDkzNTdlNzBmLCAweGI0ZWU5NmQyLCAweDFiOWI5MTllLAorCTB4ODBjMGM1NGYsIDB4NjFkYzIwYTIsIDB4NWE3NzRiNjksIDB4MWMxMjFhMTYsCisJMHhlMjkzYmEwYSwgMHhjMGEwMmFlNSwgMHgzYzIyZTA0MywgMHgxMjFiMTcxZCwKKwkweDBlMDkwZDBiLCAweGYyOGJjN2FkLCAweDJkYjZhOGI5LCAweDE0MWVhOWM4LAorCTB4NTdmMTE5ODUsIDB4YWY3NTA3NGMsIDB4ZWU5OWRkYmIsIDB4YTM3ZjYwZmQsCisJMHhmNzAxMjY5ZiwgMHg1YzcyZjViYywgMHg0NDY2M2JjNSwgMHg1YmZiN2UzNCwKKwkweDhiNDMyOTc2LCAweGNiMjNjNmRjLCAweGI2ZWRmYzY4LCAweGI4ZTRmMTYzLAorCTB4ZDczMWRjY2EsIDB4NDI2Mzg1MTAsIDB4MTM5NzIyNDAsIDB4ODRjNjExMjAsCisJMHg4NTRhMjQ3ZCwgMHhkMmJiM2RmOCwgMHhhZWY5MzIxMSwgMHhjNzI5YTE2ZCwKKwkweDFkOWUyZjRiLCAweGRjYjIzMGYzLCAweDBkODY1MmVjLCAweDc3YzFlM2QwLAorCTB4MmJiMzE2NmMsIDB4YTk3MGI5OTksIDB4MTE5NDQ4ZmEsIDB4NDdlOTY0MjIsCisJMHhhOGZjOGNjNCwgMHhhMGYwM2YxYSwgMHg1NjdkMmNkOCwgMHgyMjMzOTBlZiwKKwkweDg3NDk0ZWM3LCAweGQ5MzhkMWMxLCAweDhjY2FhMmZlLCAweDk4ZDQwYjM2LAorCTB4YTZmNTgxY2YsIDB4YTU3YWRlMjgsIDB4ZGFiNzhlMjYsIDB4M2ZhZGJmYTQsCisJMHgyYzNhOWRlNCwgMHg1MDc4OTIwZCwgMHg2YTVmY2M5YiwgMHg1NDdlNDY2MiwKKwkweGY2OGQxM2MyLCAweDkwZDhiOGU4LCAweDJlMzlmNzVlLCAweDgyYzNhZmY1LAorCTB4OWY1ZDgwYmUsIDB4NjlkMDkzN2MsIDB4NmZkNTJkYTksIDB4Y2YyNTEyYjMsCisJMHhjOGFjOTkzYiwgMHgxMDE4N2RhNywgMHhlODljNjM2ZSwgMHhkYjNiYmI3YiwKKwkweGNkMjY3ODA5LCAweDZlNTkxOGY0LCAweGVjOWFiNzAxLCAweDgzNGY5YWE4LAorCTB4ZTY5NTZlNjUsIDB4YWFmZmU2N2UsIDB4MjFiY2NmMDgsIDB4ZWYxNWU4ZTYsCisJMHhiYWU3OWJkOSwgMHg0YTZmMzZjZSwgMHhlYTlmMDlkNCwgMHgyOWIwN2NkNiwKKwkweDMxYTRiMmFmLCAweDJhM2YyMzMxLCAweGM2YTU5NDMwLCAweDM1YTI2NmMwLAorCTB4NzQ0ZWJjMzcsIDB4ZmM4MmNhYTYsIDB4ZTA5MGQwYjAsIDB4MzNhN2Q4MTUsCisJMHhmMTA0OTg0YSwgMHg0MWVjZGFmNywgMHg3ZmNkNTAwZSwgMHgxNzkxZjYyZiwKKwkweDc2NGRkNjhkLCAweDQzZWZiMDRkLCAweGNjYWE0ZDU0LCAweGU0OTYwNGRmLAorCTB4OWVkMWI1ZTMsIDB4NGM2YTg4MWIsIDB4YzEyYzFmYjgsIDB4NDY2NTUxN2YsCisJMHg5ZDVlZWEwNCwgMHgwMThjMzU1ZCwgMHhmYTg3NzQ3MywgMHhmYjBiNDEyZSwKKwkweGIzNjcxZDVhLCAweDkyZGJkMjUyLCAweGU5MTA1NjMzLCAweDZkZDY0NzEzLAorCTB4OWFkNzYxOGMsIDB4MzdhMTBjN2EsIDB4NTlmODE0OGUsIDB4ZWIxMzNjODksCisJMHhjZWE5MjdlZSwgMHhiNzYxYzkzNSwgMHhlMTFjZTVlZCwgMHg3YTQ3YjEzYywKKwkweDljZDJkZjU5LCAweDU1ZjI3MzNmLCAweDE4MTRjZTc5LCAweDczYzczN2JmLAorCTB4NTNmN2NkZWEsIDB4NWZmZGFhNWIsIDB4ZGYzZDZmMTQsIDB4Nzg0NGRiODYsCisJMHhjYWFmZjM4MSwgMHhiOTY4YzQzZSwgMHgzODI0MzQyYywgMHhjMmEzNDA1ZiwKKwkweDE2MWRjMzcyLCAweGJjZTIyNTBjLCAweDI4M2M0OThiLCAweGZmMGQ5NTQxLAorCTB4MzlhODAxNzEsIDB4MDgwY2IzZGUsIDB4ZDhiNGU0OWMsIDB4NjQ1NmMxOTAsCisJMHg3YmNiODQ2MSwgMHhkNTMyYjY3MCwgMHg0ODZjNWM3NCwgMHhkMGI4NTc0Mik7CiskY29kZS49PDxfX187CisJLmJ5dGUJMHg1MiwgMHgwOSwgMHg2YSwgMHhkNSwgMHgzMCwgMHgzNiwgMHhhNSwgMHgzOAorCS5ieXRlCTB4YmYsIDB4NDAsIDB4YTMsIDB4OWUsIDB4ODEsIDB4ZjMsIDB4ZDcsIDB4ZmIKKwkuYnl0ZQkweDdjLCAweGUzLCAweDM5LCAweDgyLCAweDliLCAweDJmLCAweGZmLCAweDg3CisJLmJ5dGUJMHgzNCwgMHg4ZSwgMHg0MywgMHg0NCwgMHhjNCwgMHhkZSwgMHhlOSwgMHhjYgorCS5ieXRlCTB4NTQsIDB4N2IsIDB4OTQsIDB4MzIsIDB4YTYsIDB4YzIsIDB4MjMsIDB4M2QKKwkuYnl0ZQkweGVlLCAweDRjLCAweDk1LCAweDBiLCAweDQyLCAweGZhLCAweGMzLCAweDRlCisJLmJ5dGUJMHgwOCwgMHgyZSwgMHhhMSwgMHg2NiwgMHgyOCwgMHhkOSwgMHgyNCwgMHhiMgorCS5ieXRlCTB4NzYsIDB4NWIsIDB4YTIsIDB4NDksIDB4NmQsIDB4OGIsIDB4ZDEsIDB4MjUKKwkuYnl0ZQkweDcyLCAweGY4LCAweGY2LCAweDY0LCAweDg2LCAweDY4LCAweDk4LCAweDE2CisJLmJ5dGUJMHhkNCwgMHhhNCwgMHg1YywgMHhjYywgMHg1ZCwgMHg2NSwgMHhiNiwgMHg5MgorCS5ieXRlCTB4NmMsIDB4NzAsIDB4NDgsIDB4NTAsIDB4ZmQsIDB4ZWQsIDB4YjksIDB4ZGEKKwkuYnl0ZQkweDVlLCAweDE1LCAweDQ2LCAweDU3LCAweGE3LCAweDhkLCAweDlkLCAweDg0CisJLmJ5dGUJMHg5MCwgMHhkOCwgMHhhYiwgMHgwMCwgMHg4YywgMHhiYywgMHhkMywgMHgwYQorCS5ieXRlCTB4ZjcsIDB4ZTQsIDB4NTgsIDB4MDUsIDB4YjgsIDB4YjMsIDB4NDUsIDB4MDYKKwkuYnl0ZQkweGQwLCAweDJjLCAweDFlLCAweDhmLCAweGNhLCAweDNmLCAweDBmLCAweDAyCisJLmJ5dGUJMHhjMSwgMHhhZiwgMHhiZCwgMHgwMywgMHgwMSwgMHgxMywgMHg4YSwgMHg2YgorCS5ieXRlCTB4M2EsIDB4OTEsIDB4MTEsIDB4NDEsIDB4NGYsIDB4NjcsIDB4ZGMsIDB4ZWEKKwkuYnl0ZQkweDk3LCAweGYyLCAweGNmLCAweGNlLCAweGYwLCAweGI0LCAweGU2LCAweDczCisJLmJ5dGUJMHg5NiwgMHhhYywgMHg3NCwgMHgyMiwgMHhlNywgMHhhZCwgMHgzNSwgMHg4NQorCS5ieXRlCTB4ZTIsIDB4ZjksIDB4MzcsIDB4ZTgsIDB4MWMsIDB4NzUsIDB4ZGYsIDB4NmUKKwkuYnl0ZQkweDQ3LCAweGYxLCAweDFhLCAweDcxLCAweDFkLCAweDI5LCAweGM1LCAweDg5CisJLmJ5dGUJMHg2ZiwgMHhiNywgMHg2MiwgMHgwZSwgMHhhYSwgMHgxOCwgMHhiZSwgMHgxYgorCS5ieXRlCTB4ZmMsIDB4NTYsIDB4M2UsIDB4NGIsIDB4YzYsIDB4ZDIsIDB4NzksIDB4MjAKKwkuYnl0ZQkweDlhLCAweGRiLCAweGMwLCAweGZlLCAweDc4LCAweGNkLCAweDVhLCAweGY0CisJLmJ5dGUJMHgxZiwgMHhkZCwgMHhhOCwgMHgzMywgMHg4OCwgMHgwNywgMHhjNywgMHgzMQorCS5ieXRlCTB4YjEsIDB4MTIsIDB4MTAsIDB4NTksIDB4MjcsIDB4ODAsIDB4ZWMsIDB4NWYKKwkuYnl0ZQkweDYwLCAweDUxLCAweDdmLCAweGE5LCAweDE5LCAweGI1LCAweDRhLCAweDBkCisJLmJ5dGUJMHgyZCwgMHhlNSwgMHg3YSwgMHg5ZiwgMHg5MywgMHhjOSwgMHg5YywgMHhlZgorCS5ieXRlCTB4YTAsIDB4ZTAsIDB4M2IsIDB4NGQsIDB4YWUsIDB4MmEsIDB4ZjUsIDB4YjAKKwkuYnl0ZQkweGM4LCAweGViLCAweGJiLCAweDNjLCAweDgzLCAweDUzLCAweDk5LCAweDYxCisJLmJ5dGUJMHgxNywgMHgyYiwgMHgwNCwgMHg3ZSwgMHhiYSwgMHg3NywgMHhkNiwgMHgyNgorCS5ieXRlCTB4ZTEsIDB4NjksIDB4MTQsIDB4NjMsIDB4NTUsIDB4MjEsIDB4MGMsIDB4N2QKKy50eXBlCUFFU19UZCwjb2JqZWN0Cisuc2l6ZQlBRVNfVGQsKC4tQUVTX1RkKQorCisuYWxpZ24JNjQKKy5za2lwCTE2Citfc3BhcmN2OV9BRVNfZGVjcnlwdDoKKwlzYXZlCSVzcCwtJGZyYW1lLSRsb2NhbHMsJXNwCisJc3R4CSVpNyxbJXNwKyRiaWFzKyRmcmFtZSswXQkhIG9mZi1sb2FkIHJldHVybiBhZGRyZXNzCisJbGQJWyRrZXkrMjQwXSwkcm91bmRzCisJbGQJWyRrZXkrMF0sJHQwCisJbGQJWyRrZXkrNF0sJHQxCQkJIQorCWxkCVska2V5KzhdLCR0MgorCWxkCVska2V5KzEyXSwkdDMKKwlzcmwJJHJvdW5kcywxLCRyb3VuZHMKKwl4b3IJJHQwLCRzMCwkczAKKwlsZAlbJGtleSsxNl0sJHQwCisJeG9yCSR0MSwkczEsJHMxCisJbGQJWyRrZXkrMjBdLCR0MQorCXNybAkkczAsMjEsJGFjYzAJCQkhCisJeG9yCSR0MiwkczIsJHMyCisJbGQJWyRrZXkrMjRdLCR0MgorCXhvcgkkdDMsJHMzLCRzMworCWFuZAkkYWNjMCwyMDQwLCRhY2MwCisJbGQJWyRrZXkrMjhdLCR0MworCXNybAkkczMsMTMsJGFjYzEKKwlub3AKKy5MZGVjX2xvb3A6CisJc3JsCSRzMiw1LCRhY2MyCQkJIQorCWFuZAkkYWNjMSwyMDQwLCRhY2MxCisJbGR4CVskdGJsKyRhY2MwXSwkYWNjMAorCXNsbAkkczEsMywkYWNjMworCWFuZAkkYWNjMiwyMDQwLCRhY2MyCisJbGR4CVskdGJsKyRhY2MxXSwkYWNjMQorCXNybAkkczEsMjEsJGFjYzQKKwlhbmQJJGFjYzMsMjA0MCwkYWNjMworCWxkeAlbJHRibCskYWNjMl0sJGFjYzIJCSEKKwlzcmwJJHMwLDEzLCRhY2M1CisJYW5kCSRhY2M0LDIwNDAsJGFjYzQKKwlsZHgJWyR0YmwrJGFjYzNdLCRhY2MzCisJc3JsCSRzMyw1LCRhY2M2CisJYW5kCSRhY2M1LDIwNDAsJGFjYzUKKwlsZHgJWyR0YmwrJGFjYzRdLCRhY2M0CisJZm1vdnMJJWYwLCVmMAorCXNsbAkkczIsMywkYWNjNwkJCSEKKwlhbmQJJGFjYzYsMjA0MCwkYWNjNgorCWxkeAlbJHRibCskYWNjNV0sJGFjYzUKKwlzcmwJJHMyLDIxLCRhY2M4CisJYW5kCSRhY2M3LDIwNDAsJGFjYzcKKwlsZHgJWyR0YmwrJGFjYzZdLCRhY2M2CisJc3JsCSRzMSwxMywkYWNjOQorCWFuZAkkYWNjOCwyMDQwLCRhY2M4CisJbGR4CVskdGJsKyRhY2M3XSwkYWNjNwkJIQorCXNybAkkczAsNSwkYWNjMTAKKwlhbmQJJGFjYzksMjA0MCwkYWNjOQorCWxkeAlbJHRibCskYWNjOF0sJGFjYzgKKwlzbGwJJHMzLDMsJGFjYzExCisJYW5kCSRhY2MxMCwyMDQwLCRhY2MxMAorCWxkeAlbJHRibCskYWNjOV0sJGFjYzkKKwlmbW92cwklZjAsJWYwCisJc3JsCSRzMywyMSwkYWNjMTIJCQkhCisJYW5kCSRhY2MxMSwyMDQwLCRhY2MxMQorCWxkeAlbJHRibCskYWNjMTBdLCRhY2MxMAorCXNybAkkczIsMTMsJGFjYzEzCisJYW5kCSRhY2MxMiwyMDQwLCRhY2MxMgorCWxkeAlbJHRibCskYWNjMTFdLCRhY2MxMQorCXNybAkkczEsNSwkYWNjMTQKKwlhbmQJJGFjYzEzLDIwNDAsJGFjYzEzCisJbGR4CVskdGJsKyRhY2MxMl0sJGFjYzEyCQkhCisJc2xsCSRzMCwzLCRhY2MxNQorCWFuZAkkYWNjMTQsMjA0MCwkYWNjMTQKKwlsZHgJWyR0YmwrJGFjYzEzXSwkYWNjMTMKKwlhbmQJJGFjYzE1LDIwNDAsJGFjYzE1CisJYWRkCSRrZXksMzIsJGtleQorCWxkeAlbJHRibCskYWNjMTRdLCRhY2MxNAorCWZtb3ZzCSVmMCwlZjAKKwlzdWJjYwkkcm91bmRzLDEsJHJvdW5kcwkJIQorCWxkeAlbJHRibCskYWNjMTVdLCRhY2MxNQorCWJ6LGEscG4JJWljYywuTGRlY19sYXN0CisJYWRkCSR0YmwsMjA0OCwkcm91bmRzCisKKwkJc3JseAkkYWNjMSw4LCRhY2MxCisJCXhvcgkkYWNjMCwkdDAsJHQwCisJbGQJWyRrZXkrMF0sJHMwCisJZm1vdnMJJWYwLCVmMAorCQlzcmx4CSRhY2MyLDE2LCRhY2MyCQkhCisJCXhvcgkkYWNjMSwkdDAsJHQwCisJbGQJWyRrZXkrNF0sJHMxCisJCXNybHgJJGFjYzMsMjQsJGFjYzMKKwkJeG9yCSRhY2MyLCR0MCwkdDAKKwlsZAlbJGtleSs4XSwkczIKKwkJc3JseAkkYWNjNSw4LCRhY2M1CisJCXhvcgkkYWNjMywkdDAsJHQwCisJbGQJWyRrZXkrMTJdLCRzMwkJCSEKKwkJc3JseAkkYWNjNiwxNiwkYWNjNgorCQl4b3IJJGFjYzQsJHQxLCR0MQorCWZtb3ZzCSVmMCwlZjAKKwkJc3JseAkkYWNjNywyNCwkYWNjNworCQl4b3IJJGFjYzUsJHQxLCR0MQorCQlzcmx4CSRhY2M5LDgsJGFjYzkKKwkJeG9yCSRhY2M2LCR0MSwkdDEKKwkJc3JseAkkYWNjMTAsMTYsJGFjYzEwCSEKKwkJeG9yCSRhY2M3LCR0MSwkdDEKKwkJc3JseAkkYWNjMTEsMjQsJGFjYzExCisJCXhvcgkkYWNjOCwkdDIsJHQyCisJCXNybHgJJGFjYzEzLDgsJGFjYzEzCisJCXhvcgkkYWNjOSwkdDIsJHQyCisJCXNybHgJJGFjYzE0LDE2LCRhY2MxNAorCQl4b3IJJGFjYzEwLCR0MiwkdDIKKwkJc3JseAkkYWNjMTUsMjQsJGFjYzE1CSEKKwkJeG9yCSRhY2MxMSwkdDIsJHQyCisJCXhvcgkkYWNjMTIsJGFjYzE0LCRhY2MxNAorCQl4b3IJJGFjYzEzLCR0MywkdDMKKwlzcmwJJHQwLDIxLCRhY2MwCisJCXhvcgkkYWNjMTQsJHQzLCR0MworCQl4b3IJJGFjYzE1LCR0MywkdDMKKwlzcmwJJHQzLDEzLCRhY2MxCisKKwlhbmQJJGFjYzAsMjA0MCwkYWNjMAkJIQorCXNybAkkdDIsNSwkYWNjMgorCWFuZAkkYWNjMSwyMDQwLCRhY2MxCisJbGR4CVskdGJsKyRhY2MwXSwkYWNjMAorCXNsbAkkdDEsMywkYWNjMworCWFuZAkkYWNjMiwyMDQwLCRhY2MyCisJbGR4CVskdGJsKyRhY2MxXSwkYWNjMQorCWZtb3ZzCSVmMCwlZjAKKwlzcmwJJHQxLDIxLCRhY2M0CQkJIQorCWFuZAkkYWNjMywyMDQwLCRhY2MzCisJbGR4CVskdGJsKyRhY2MyXSwkYWNjMgorCXNybAkkdDAsMTMsJGFjYzUKKwlhbmQJJGFjYzQsMjA0MCwkYWNjNAorCWxkeAlbJHRibCskYWNjM10sJGFjYzMKKwlzcmwJJHQzLDUsJGFjYzYKKwlhbmQJJGFjYzUsMjA0MCwkYWNjNQorCWxkeAlbJHRibCskYWNjNF0sJGFjYzQJCSEKKwlzbGwJJHQyLDMsJGFjYzcKKwlhbmQJJGFjYzYsMjA0MCwkYWNjNgorCWxkeAlbJHRibCskYWNjNV0sJGFjYzUKKwlzcmwJJHQyLDIxLCRhY2M4CisJYW5kCSRhY2M3LDIwNDAsJGFjYzcKKwlsZHgJWyR0YmwrJGFjYzZdLCRhY2M2CisJZm1vdnMJJWYwLCVmMAorCXNybAkkdDEsMTMsJGFjYzkJCQkhCisJYW5kCSRhY2M4LDIwNDAsJGFjYzgKKwlsZHgJWyR0YmwrJGFjYzddLCRhY2M3CisJc3JsCSR0MCw1LCRhY2MxMAorCWFuZAkkYWNjOSwyMDQwLCRhY2M5CisJbGR4CVskdGJsKyRhY2M4XSwkYWNjOAorCXNsbAkkdDMsMywkYWNjMTEKKwlhbmQJJGFjYzEwLDIwNDAsJGFjYzEwCisJbGR4CVskdGJsKyRhY2M5XSwkYWNjOQkJIQorCXNybAkkdDMsMjEsJGFjYzEyCisJYW5kCSRhY2MxMSwyMDQwLCRhY2MxMQorCWxkeAlbJHRibCskYWNjMTBdLCRhY2MxMAorCXNybAkkdDIsMTMsJGFjYzEzCisJYW5kCSRhY2MxMiwyMDQwLCRhY2MxMgorCWxkeAlbJHRibCskYWNjMTFdLCRhY2MxMQorCWZtb3ZzCSVmMCwlZjAKKwlzcmwJJHQxLDUsJGFjYzE0CQkJIQorCWFuZAkkYWNjMTMsMjA0MCwkYWNjMTMKKwlsZHgJWyR0YmwrJGFjYzEyXSwkYWNjMTIKKwlzbGwJJHQwLDMsJGFjYzE1CisJYW5kCSRhY2MxNCwyMDQwLCRhY2MxNAorCWxkeAlbJHRibCskYWNjMTNdLCRhY2MxMworCQlzcmx4CSRhY2MxLDgsJGFjYzEKKwlhbmQJJGFjYzE1LDIwNDAsJGFjYzE1CisJbGR4CVskdGJsKyRhY2MxNF0sJGFjYzE0CQkhCisKKwkJc3JseAkkYWNjMiwxNiwkYWNjMgorCQl4b3IJJGFjYzAsJHMwLCRzMAorCWxkeAlbJHRibCskYWNjMTVdLCRhY2MxNQorCQlzcmx4CSRhY2MzLDI0LCRhY2MzCisJCXhvcgkkYWNjMSwkczAsJHMwCisJbGQJWyRrZXkrMTZdLCR0MAorCWZtb3ZzCSVmMCwlZjAKKwkJc3JseAkkYWNjNSw4LCRhY2M1CQkhCisJCXhvcgkkYWNjMiwkczAsJHMwCisJbGQJWyRrZXkrMjBdLCR0MQorCQlzcmx4CSRhY2M2LDE2LCRhY2M2CisJCXhvcgkkYWNjMywkczAsJHMwCisJbGQJWyRrZXkrMjRdLCR0MgorCQlzcmx4CSRhY2M3LDI0LCRhY2M3CisJCXhvcgkkYWNjNCwkczEsJHMxCisJbGQJWyRrZXkrMjhdLCR0MwkJCSEKKwkJc3JseAkkYWNjOSw4LCRhY2M5CisJCXhvcgkkYWNjNSwkczEsJHMxCisJbGR4CVskdGJsKzIwNDgrMF0sJWcwCQkhIHByZWZldGNoIHRkNAorCQlzcmx4CSRhY2MxMCwxNiwkYWNjMTAKKwkJeG9yCSRhY2M2LCRzMSwkczEKKwlsZHgJWyR0YmwrMjA0OCszMl0sJWcwCQkhIHByZWZldGNoIHRkNAorCQlzcmx4CSRhY2MxMSwyNCwkYWNjMTEKKwkJeG9yCSRhY2M3LCRzMSwkczEKKwlsZHgJWyR0YmwrMjA0OCs2NF0sJWcwCQkhIHByZWZldGNoIHRkNAorCQlzcmx4CSRhY2MxMyw4LCRhY2MxMworCQl4b3IJJGFjYzgsJHMyLCRzMgorCWxkeAlbJHRibCsyMDQ4Kzk2XSwlZzAJCSEgcHJlZmV0Y2ggdGQ0CisJCXNybHgJJGFjYzE0LDE2LCRhY2MxNAkhCisJCXhvcgkkYWNjOSwkczIsJHMyCisJbGR4CVskdGJsKzIwNDgrMTI4XSwlZzAJCSEgcHJlZmV0Y2ggdGQ0CisJCXNybHgJJGFjYzE1LDI0LCRhY2MxNQorCQl4b3IJJGFjYzEwLCRzMiwkczIKKwlsZHgJWyR0YmwrMjA0OCsxNjBdLCVnMAkJISBwcmVmZXRjaCB0ZDQKKwlzcmwJJHMwLDIxLCRhY2MwCisJCXhvcgkkYWNjMTEsJHMyLCRzMgorCWxkeAlbJHRibCsyMDQ4KzE5Ml0sJWcwCQkhIHByZWZldGNoIHRkNAorCQl4b3IJJGFjYzEyLCRhY2MxNCwkYWNjMTQKKwkJeG9yCSRhY2MxMywkczMsJHMzCisJbGR4CVskdGJsKzIwNDgrMjI0XSwlZzAJCSEgcHJlZmV0Y2ggdGQ0CisJYW5kCSRhY2MwLDIwNDAsJGFjYzAJCSEKKwkJeG9yCSRhY2MxNCwkczMsJHMzCisJCXhvcgkkYWNjMTUsJHMzLCRzMworCWJhCS5MZGVjX2xvb3AKKwlzcmwJJHMzLDEzLCRhY2MxCisKKy5hbGlnbgkzMgorLkxkZWNfbGFzdDoKKwkJc3JseAkkYWNjMSw4LCRhY2MxCQkhCisJCXhvcgkkYWNjMCwkdDAsJHQwCisJbGQJWyRrZXkrMF0sJHMwCisJCXNybHgJJGFjYzIsMTYsJGFjYzIKKwkJeG9yCSRhY2MxLCR0MCwkdDAKKwlsZAlbJGtleSs0XSwkczEKKwkJc3JseAkkYWNjMywyNCwkYWNjMworCQl4b3IJJGFjYzIsJHQwLCR0MAorCWxkCVska2V5KzhdLCRzMgkJCSEKKwkJc3JseAkkYWNjNSw4LCRhY2M1CisJCXhvcgkkYWNjMywkdDAsJHQwCisJbGQJWyRrZXkrMTJdLCRzMworCQlzcmx4CSRhY2M2LDE2LCRhY2M2CisJCXhvcgkkYWNjNCwkdDEsJHQxCisJCXNybHgJJGFjYzcsMjQsJGFjYzcKKwkJeG9yCSRhY2M1LCR0MSwkdDEKKwkJc3JseAkkYWNjOSw4LCRhY2M5CQkhCisJCXhvcgkkYWNjNiwkdDEsJHQxCisJCXNybHgJJGFjYzEwLDE2LCRhY2MxMAorCQl4b3IJJGFjYzcsJHQxLCR0MQorCQlzcmx4CSRhY2MxMSwyNCwkYWNjMTEKKwkJeG9yCSRhY2M4LCR0MiwkdDIKKwkJc3JseAkkYWNjMTMsOCwkYWNjMTMKKwkJeG9yCSRhY2M5LCR0MiwkdDIKKwkJc3JseAkkYWNjMTQsMTYsJGFjYzE0CSEKKwkJeG9yCSRhY2MxMCwkdDIsJHQyCisJCXNybHgJJGFjYzE1LDI0LCRhY2MxNQorCQl4b3IJJGFjYzExLCR0MiwkdDIKKwkJeG9yCSRhY2MxMiwkYWNjMTQsJGFjYzE0CisJCXhvcgkkYWNjMTMsJHQzLCR0MworCXNybAkkdDAsMjQsJGFjYzAKKwkJeG9yCSRhY2MxNCwkdDMsJHQzCisJCXhvcgkkYWNjMTUsJHQzLCR0MwkJIQorCXNybAkkdDMsMTYsJGFjYzEKKworCXNybAkkdDIsOCwkYWNjMgorCWFuZAkkYWNjMSwyNTUsJGFjYzEKKwlsZHViCVskcm91bmRzKyRhY2MwXSwkYWNjMAorCXNybAkkdDEsMjQsJGFjYzQKKwlhbmQJJGFjYzIsMjU1LCRhY2MyCisJbGR1YglbJHJvdW5kcyskYWNjMV0sJGFjYzEKKwlzcmwJJHQwLDE2LCRhY2M1CQkJIQorCWFuZAkkdDEsMjU1LCRhY2MzCisJbGR1YglbJHJvdW5kcyskYWNjMl0sJGFjYzIKKwlsZHViCVskcm91bmRzKyRhY2MzXSwkYWNjMworCXNybAkkdDMsOCwkYWNjNgorCWFuZAkkYWNjNSwyNTUsJGFjYzUKKwlsZHViCVskcm91bmRzKyRhY2M0XSwkYWNjNAorCWZtb3ZzCSVmMCwlZjAKKwlzcmwJJHQyLDI0LCRhY2M4CQkJIQorCWFuZAkkYWNjNiwyNTUsJGFjYzYKKwlsZHViCVskcm91bmRzKyRhY2M1XSwkYWNjNQorCXNybAkkdDEsMTYsJGFjYzkKKwlhbmQJJHQyLDI1NSwkYWNjNworCWxkdWIJWyRyb3VuZHMrJGFjYzZdLCRhY2M2CisJbGR1YglbJHJvdW5kcyskYWNjN10sJGFjYzcKKwlmbW92cwklZjAsJWYwCisJc3JsCSR0MCw4LCRhY2MxMAkJCSEKKwlhbmQJJGFjYzksMjU1LCRhY2M5CisJbGR1YglbJHJvdW5kcyskYWNjOF0sJGFjYzgKKwlzcmwJJHQzLDI0LCRhY2MxMgorCWFuZAkkYWNjMTAsMjU1LCRhY2MxMAorCWxkdWIJWyRyb3VuZHMrJGFjYzldLCRhY2M5CisJc3JsCSR0MiwxNiwkYWNjMTMKKwlhbmQJJHQzLDI1NSwkYWNjMTEKKwlsZHViCVskcm91bmRzKyRhY2MxMF0sJGFjYzEwCQkhCisJc3JsCSR0MSw4LCRhY2MxNAorCWFuZAkkYWNjMTMsMjU1LCRhY2MxMworCWxkdWIJWyRyb3VuZHMrJGFjYzExXSwkYWNjMTEKKwlsZHViCVskcm91bmRzKyRhY2MxMl0sJGFjYzEyCisJYW5kCSRhY2MxNCwyNTUsJGFjYzE0CisJbGR1YglbJHJvdW5kcyskYWNjMTNdLCRhY2MxMworCWFuZAkkdDAsMjU1LCRhY2MxNQorCWxkdWIJWyRyb3VuZHMrJGFjYzE0XSwkYWNjMTQJCSEKKworCQlzbGwJJGFjYzAsMjQsJGFjYzAKKwkJeG9yCSRhY2MzLCRzMCwkczAKKwlsZHViCVskcm91bmRzKyRhY2MxNV0sJGFjYzE1CisJCXNsbAkkYWNjMSwxNiwkYWNjMQorCQl4b3IJJGFjYzAsJHMwLCRzMAorCWxkeAlbJXNwKyRiaWFzKyRmcmFtZSswXSwlaTcJISByZXN0b3JlIHJldHVybiBhZGRyZXNzCisJZm1vdnMJJWYwLCVmMAorCQlzbGwJJGFjYzIsOCwkYWNjMgkJIQorCQl4b3IJJGFjYzEsJHMwLCRzMAorCQlzbGwJJGFjYzQsMjQsJGFjYzQKKwkJeG9yCSRhY2MyLCRzMCwkczAKKwkJc2xsCSRhY2M1LDE2LCRhY2M1CisJCXhvcgkkYWNjNywkczEsJHMxCisJCXNsbAkkYWNjNiw4LCRhY2M2CisJCXhvcgkkYWNjNCwkczEsJHMxCisJCXNsbAkkYWNjOCwyNCwkYWNjOAkJIQorCQl4b3IJJGFjYzUsJHMxLCRzMQorCQlzbGwJJGFjYzksMTYsJGFjYzkKKwkJeG9yCSRhY2MxMSwkczIsJHMyCisJCXNsbAkkYWNjMTAsOCwkYWNjMTAKKwkJeG9yCSRhY2M2LCRzMSwkczEKKwkJc2xsCSRhY2MxMiwyNCwkYWNjMTIKKwkJeG9yCSRhY2M4LCRzMiwkczIKKwkJc2xsCSRhY2MxMywxNiwkYWNjMTMJIQorCQl4b3IJJGFjYzksJHMyLCRzMgorCQlzbGwJJGFjYzE0LDgsJGFjYzE0CisJCXhvcgkkYWNjMTAsJHMyLCRzMgorCQl4b3IJJGFjYzEyLCRhY2MxNCwkYWNjMTQKKwkJeG9yCSRhY2MxMywkczMsJHMzCisJCXhvcgkkYWNjMTQsJHMzLCRzMworCQl4b3IJJGFjYzE1LCRzMywkczMKKworCXJldAorCXJlc3RvcmUKKy50eXBlCV9zcGFyY3Y5X0FFU19kZWNyeXB0LCNmdW5jdGlvbgorLnNpemUJX3NwYXJjdjlfQUVTX2RlY3J5cHQsKC4tX3NwYXJjdjlfQUVTX2RlY3J5cHQpCisKKy5hbGlnbgkzMgorLmdsb2JsCUFFU19kZWNyeXB0CitBRVNfZGVjcnlwdDoKKwlvcgklbzAsJW8xLCVnMQorCWFuZGNjCSVnMSwzLCVnMAorCWJueixwbgkleGNjLC5MdW5hbGlnbmVkX2RlYworCXNhdmUJJXNwLC0kZnJhbWUsJXNwCisKKwlsZAlbJWkwKzBdLCVvMAorCWxkCVslaTArNF0sJW8xCisJbGQJWyVpMCs4XSwlbzIKKwlsZAlbJWkwKzEyXSwlbzMKKworMToJY2FsbAkuKzgKKwlhZGQJJW83LEFFU19UZC0xYiwlbzQKKwljYWxsCV9zcGFyY3Y5X0FFU19kZWNyeXB0CisJbW92CSVpMiwlbzUKKworCXN0CSVvMCxbJWkxKzBdCisJc3QJJW8xLFslaTErNF0KKwlzdAklbzIsWyVpMSs4XQorCXN0CSVvMyxbJWkxKzEyXQorCisJcmV0CisJcmVzdG9yZQorCisuYWxpZ24JMzIKKy5MdW5hbGlnbmVkX2RlYzoKKwlsZHViCVslaTArMF0sJWwwCisJbGR1YglbJWkwKzFdLCVsMQorCWxkdWIJWyVpMCsyXSwlbDIKKworCXNsbAklbDAsMjQsJWwwCisJbGR1YglbJWkwKzNdLCVsMworCXNsbAklbDEsMTYsJWwxCisJbGR1YglbJWkwKzRdLCVsNAorCXNsbAklbDIsOCwlbDIKKwlvcgklbDEsJWwwLCVsMAorCWxkdWIJWyVpMCs1XSwlbDUKKwlzbGwJJWw0LDI0LCVsNAorCW9yCSVsMywlbDIsJWwyCisJbGR1YglbJWkwKzZdLCVsNgorCXNsbAklbDUsMTYsJWw1CisJb3IJJWwwLCVsMiwlbzAKKwlsZHViCVslaTArN10sJWw3CisKKwlzbGwJJWw2LDgsJWw2CisJb3IJJWw1LCVsNCwlbDQKKwlsZHViCVslaTArOF0sJWwwCisJb3IJJWw3LCVsNiwlbDYKKwlsZHViCVslaTArOV0sJWwxCisJb3IJJWw0LCVsNiwlbzEKKwlsZHViCVslaTArMTBdLCVsMgorCisJc2xsCSVsMCwyNCwlbDAKKwlsZHViCVslaTArMTFdLCVsMworCXNsbAklbDEsMTYsJWwxCisJbGR1YglbJWkwKzEyXSwlbDQKKwlzbGwJJWwyLDgsJWwyCisJb3IJJWwxLCVsMCwlbDAKKwlsZHViCVslaTArMTNdLCVsNQorCXNsbAklbDQsMjQsJWw0CisJb3IJJWwzLCVsMiwlbDIKKwlsZHViCVslaTArMTRdLCVsNgorCXNsbAklbDUsMTYsJWw1CisJb3IJJWwwLCVsMiwlbzIKKwlsZHViCVslaTArMTVdLCVsNworCisJc2xsCSVsNiw4LCVsNgorCW9yCSVsNSwlbDQsJWw0CisJb3IJJWw3LCVsNiwlbDYKKwlvcgklbDQsJWw2LCVvMworCisxOgljYWxsCS4rOAorCWFkZAklbzcsQUVTX1RkLTFiLCVvNAorCWNhbGwJX3NwYXJjdjlfQUVTX2RlY3J5cHQKKwltb3YJJWkyLCVvNQorCisJc3JsCSVvMCwyNCwlbDAKKwlzcmwJJW8wLDE2LCVsMQorCXN0YgklbDAsWyVpMSswXQorCXNybAklbzAsOCwlbDIKKwlzdGIJJWwxLFslaTErMV0KKwlzdGIJJWwyLFslaTErMl0KKwlzcmwJJW8xLDI0LCVsNAorCXN0YgklbzAsWyVpMSszXQorCisJc3JsCSVvMSwxNiwlbDUKKwlzdGIJJWw0LFslaTErNF0KKwlzcmwJJW8xLDgsJWw2CisJc3RiCSVsNSxbJWkxKzVdCisJc3RiCSVsNixbJWkxKzZdCisJc3JsCSVvMiwyNCwlbDAKKwlzdGIJJW8xLFslaTErN10KKworCXNybAklbzIsMTYsJWwxCisJc3RiCSVsMCxbJWkxKzhdCisJc3JsCSVvMiw4LCVsMgorCXN0YgklbDEsWyVpMSs5XQorCXN0YgklbDIsWyVpMSsxMF0KKwlzcmwJJW8zLDI0LCVsNAorCXN0YgklbzIsWyVpMSsxMV0KKworCXNybAklbzMsMTYsJWw1CisJc3RiCSVsNCxbJWkxKzEyXQorCXNybAklbzMsOCwlbDYKKwlzdGIJJWw1LFslaTErMTNdCisJc3RiCSVsNixbJWkxKzE0XQorCXN0YgklbzMsWyVpMSsxNV0KKworCXJldAorCXJlc3RvcmUKKy50eXBlCUFFU19kZWNyeXB0LCNmdW5jdGlvbgorLnNpemUJQUVTX2RlY3J5cHQsKC4tQUVTX2RlY3J5cHQpCitfX18KKworIyBmbW92cyBpbnN0cnVjdGlvbnMgc3Vic3RpdHV0aW5nIGZvciBGUCBub3BzIHdlcmUgb3JpZ2luYWxseSBhZGRlZAorIyB0byBtZWV0IHNwZWNpZmljIGluc3RydWN0aW9uIGFsaWdubWVudCByZXF1aXJlbWVudHMgdG8gbWF4aW1pemUgSUxQLgorIyBBcyBVbHRyYVNQQVJDIFQxLCBhLmsuYS4gTmlhZ2FyYSwgaGFzIHNoYXJlZCBGUFUsIEZQIG5vcHMgY2FuIGhhdmUKKyMgdW5kZXNpcmVkIGVmZmVjdCwgc28ganVzdCBvbWl0IHRoZW0gYW5kIHNhY3JpZmljZSBzb21lIHBvcnRpb24gb2YKKyMgcGVyY2VudCBpbiBwZXJmb3JtYW5jZS4uLgorJGNvZGUgPX4gcy9mbW92cy4qJC8vZ2VtOworCitwcmludCAkY29kZTsKZGlmZiAtLWdpdCBhL2NyeXB0by9hZXMvYXNtL2Flcy14ODZfNjQucGwgYi9jcnlwdG8vYWVzL2FzbS9hZXMteDg2XzY0LnBsCmluZGV4IGIwMDhhYjUuLmE1NDVlODkgMTAwNzU1Ci0tLSBhL2NyeXB0by9hZXMvYXNtL2Flcy14ODZfNjQucGwKKysrIGIvY3J5cHRvL2Flcy9hc20vYWVzLXg4Nl82NC5wbApAQCAtMiwxMSArMiwxMiBAQAogIwogIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPiBmb3IgdGhlIE9wZW5TU0wKLSMgcHJvamVjdC4gUmlnaHRzIGZvciByZWRpc3RyaWJ1dGlvbiBhbmQgdXNhZ2UgaW4gc291cmNlIGFuZCBiaW5hcnkKLSMgZm9ybXMgYXJlIGdyYW50ZWQgYWNjb3JkaW5nIHRvIHRoZSBPcGVuU1NMIGxpY2Vuc2UuCisjIHByb2plY3QuIFRoZSBtb2R1bGUgaXMsIGhvd2V2ZXIsIGR1YWwgbGljZW5zZWQgdW5kZXIgT3BlblNTTCBhbmQKKyMgQ1JZUFRPR0FNUyBsaWNlbnNlcyBkZXBlbmRpbmcgb24gd2hlcmUgeW91IG9idGFpbiBpdC4gRm9yIGZ1cnRoZXIKKyMgZGV0YWlscyBzZWUgaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9+YXBwcm8vY3J5cHRvZ2Ftcy8uCiAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAjCi0jIFZlcnNpb24gMS4yLgorIyBWZXJzaW9uIDIuMS4KICMKICMgYWVzLSotY2JjIGJlbmNobWFya3MgYXJlIGltcHJvdmVkIGJ5ID43MCUgW2NvbXBhcmVkIHRvIGdjYyAzLjMuMiBvbgogIyBPcHRlcm9uIDI0MCBDUFVdIHBsdXMgYWxsIHRoZSBiZWxscy1uLXdoaXN0bGVzIGZyb20gMzItYml0IHZlcnNpb24KQEAgLTE3LDE3ICsxOCwyOSBAQAogIwogIyBQZXJmb3JtYW5jZSBpbiBudW1iZXIgb2YgY3ljbGVzIHBlciBwcm9jZXNzZWQgYnl0ZSBmb3IgMTI4LWJpdCBrZXk6CiAjCi0jCQlFQ0IJCUNCQyBlbmNyeXB0Ci0jIEFNRDY0CQkxMy43CQkxMy4wKCopCi0jIEVNNjRUCQkyMC4yCQkxOC42KCopCisjCQlFQ0IgZW5jcnlwdAlFQ0IgZGVjcnlwdAlDQkMgbGFyZ2UgY2h1bmsKKyMgQU1ENjQJCTMzCQk0MQkJMTMuMAorIyBFTTY0VAkJMzgJCTU5CQkxOC42KCopCisjIENvcmUgMgkzMAkJNDMJCTE0LjUoKikKICMKLSMgKCopCUNCQyBiZW5jaG1hcmtzIGFyZSBiZXR0ZXIgdGhhbiBFQ0IgdGhhbmtzIHRvIGN1c3RvbSBBQkkgdXNlZAotIwlieSB0aGUgcHJpdmF0ZSBibG9jayBlbmNyeXB0aW9uIGZ1bmN0aW9uLgorIyAoKikgd2l0aCBoeXBlci10aHJlYWRpbmcgb2ZmCisKKyRmbGF2b3VyID0gc2hpZnQ7Ciskb3V0cHV0ICA9IHNoaWZ0OworaWYgKCRmbGF2b3VyID1+IC9cLi8pIHsgJG91dHB1dCA9ICRmbGF2b3VyOyB1bmRlZiAkZmxhdm91cjsgfQorCiskd2luNjQ9MDsgJHdpbjY0PTEgaWYgKCRmbGF2b3VyID1+IC9bbm1dYXNtfG1pbmd3NjQvIHx8ICRvdXRwdXQgPX4gL1wuYXNtJC8pOworCiskMCA9fiBtLyguKltcL1xcXSlbXlwvXFxdKyQvOyAkZGlyPSQxOworKCAkeGxhdGU9IiR7ZGlyfXg4Nl82NC14bGF0ZS5wbCIgYW5kIC1mICR4bGF0ZSApIG9yCisoICR4bGF0ZT0iJHtkaXJ9Li4vLi4vcGVybGFzbS94ODZfNjQteGxhdGUucGwiIGFuZCAtZiAkeGxhdGUpIG9yCitkaWUgImNhbid0IGxvY2F0ZSB4ODZfNjQteGxhdGUucGwiOworCitvcGVuIFNURE9VVCwifCAkXlggJHhsYXRlICRmbGF2b3VyICRvdXRwdXQiOwogCiAkdmVydGljYWxzcGluPTE7CSMgdW5saWtlIDMyLWJpdCB2ZXJzaW9uICR2ZXJ0aWNhbHNwaW4gcGVyZm9ybXMKIAkJCSMgfjE1JSBiZXR0ZXIgb24gYm90aCBBTUQgYW5kIEludGVsIGNvcmVzCi0kb3V0cHV0PXNoaWZ0Owotb3BlbiBTVERPVVQsInwgJF5YIC4uL3Blcmxhc20veDg2XzY0LXhsYXRlLnBsICRvdXRwdXQiOworJHNwZWVkX2xpbWl0PTUxMjsJIyBzZWUgYWVzLTU4Ni5wbCBmb3IgZGV0YWlscwogCiAkY29kZT0iLnRleHRcbiI7CiAKQEAgLTM1LDkgKzQ4LDkgQEAKICRzMT0iJWVieCI7CiAkczI9IiVlY3giOwogJHMzPSIlZWR4IjsKLSRhY2MwPSIlZXNpIjsKLSRhY2MxPSIlZWRpIjsKLSRhY2MyPSIlZWJwIjsKKyRhY2MwPSIlZXNpIjsJJG1hc2s4MD0iJXJzaSI7CiskYWNjMT0iJWVkaSI7CSRtYXNrZmU9IiVyZGkiOworJGFjYzI9IiVlYnAiOwkkbWFzazFiPSIlcmJwIjsKICRpbnA9IiVyOCI7CiAkb3V0PSIlcjkiOwogJHQwPSIlcjEwZCI7CkBAIC01MSw2ICs2NCw4IEBACiBzdWIgbG8oKSB7IG15ICRyPXNoaWZ0OwkkciA9fiBzLyVbZXJdKFthLWRdKXgvJVwxbC87CiAJCQkkciA9fiBzLyVbZXJdKFtzZF1pKS8lXDFsLzsKIAkJCSRyID1+IHMvJShyWzAtOV0rKVtkXT8vJVwxYi87CSRyOyB9CitzdWIgTE8oKSB7IG15ICRyPXNoaWZ0OyAkciA9fiBzLyVyKFthLXpdKykvJWVcMS87CisJCQkkciA9fiBzLyVyKFswLTldKykvJXJcMWQvOwkkcjsgfQogc3ViIF9kYXRhX3dvcmQoKQogeyBteSAkaTsKICAgICB3aGlsZShkZWZpbmVkKCRpPXNoaWZ0KSkgeyAkY29kZS49c3ByaW50ZiIubG9uZ1x0MHglMDh4LDB4JTA4eFxuIiwkaSwkaTsgfQpAQCAtMTM4LDIyICsxNTMsMTcgQEAKIAltb3Z6YglgJmxvKCIkczAiKWAsJGFjYzAKIAltb3Z6YglgJmxvKCIkczEiKWAsJGFjYzEKIAltb3Z6YglgJmxvKCIkczIiKWAsJGFjYzIKLQltb3YJMigkc2JveCwkYWNjMCw4KSwkdDAKLQltb3YJMigkc2JveCwkYWNjMSw4KSwkdDEKLQltb3YJMigkc2JveCwkYWNjMiw4KSwkdDIKLQotCWFuZAlcJDB4MDAwMDAwZmYsJHQwCi0JYW5kCVwkMHgwMDAwMDBmZiwkdDEKLQlhbmQJXCQweDAwMDAwMGZmLCR0MgorCW1vdnpiCTIoJHNib3gsJGFjYzAsOCksJHQwCisJbW92emIJMigkc2JveCwkYWNjMSw4KSwkdDEKKwltb3Z6YgkyKCRzYm94LCRhY2MyLDgpLCR0MgogCiAJbW92emIJYCZsbygiJHMzIilgLCRhY2MwCiAJbW92emIJYCZoaSgiJHMxIilgLCRhY2MxCiAJbW92emIJYCZoaSgiJHMyIilgLCRhY2MyCi0JbW92CTIoJHNib3gsJGFjYzAsOCksJHQzCisJbW92emIJMigkc2JveCwkYWNjMCw4KSwkdDMKIAltb3YJMCgkc2JveCwkYWNjMSw4KSwkYWNjMQkjJHQwCiAJbW92CTAoJHNib3gsJGFjYzIsOCksJGFjYzIJIyR0MQogCi0JYW5kCVwkMHgwMDAwMDBmZiwkdDMKIAlhbmQJXCQweDAwMDBmZjAwLCRhY2MxCiAJYW5kCVwkMHgwMDAwZmYwMCwkYWNjMgogCkBAIC0zNDUsNiArMzU1LDIzNCBAQAogLnNpemUJX3g4Nl82NF9BRVNfZW5jcnlwdCwuLV94ODZfNjRfQUVTX2VuY3J5cHQKIF9fXwogCisjIGl0J3MgcG9zc2libGUgdG8gaW1wbGVtZW50IHRoaXMgYnkgc2hpZnRpbmcgdE4gYnkgOCwgZmlsbGluZyBsZWFzdAorIyBzaWduaWZpY2FudCBieXRlIHdpdGggYnl0ZSBsb2FkIGFuZCBmaW5hbGx5IGJzd2FwLWluZyBhdCB0aGUgZW5kLAorIyBidXQgc3VjaCBwYXJ0aWFsIHJlZ2lzdGVyIGxvYWQga2lsbHMgQ29yZSAyLi4uCitzdWIgZW5jY29tcGFjdHZlcnQoKQoreyBteSAoJHQzLCR0NCwkdDUpPSgiJXI4ZCIsIiVyOWQiLCIlcjEzZCIpOworCiskY29kZS49PDxfX187CisJbW92emIJYCZsbygiJHMwIilgLCR0MAorCW1vdnpiCWAmbG8oIiRzMSIpYCwkdDEKKwltb3Z6YglgJmxvKCIkczIiKWAsJHQyCisJbW92emIJKCRzYm94LCR0MCwxKSwkdDAKKwltb3Z6YgkoJHNib3gsJHQxLDEpLCR0MQorCW1vdnpiCSgkc2JveCwkdDIsMSksJHQyCisKKwltb3Z6YglgJmxvKCIkczMiKWAsJHQzCisJbW92emIJYCZoaSgiJHMxIilgLCRhY2MwCisJbW92emIJYCZoaSgiJHMyIilgLCRhY2MxCisJbW92emIJKCRzYm94LCR0MywxKSwkdDMKKwltb3Z6YgkoJHNib3gsJGFjYzAsMSksJHQ0CSMkdDAKKwltb3Z6YgkoJHNib3gsJGFjYzEsMSksJHQ1CSMkdDEKKworCW1vdnpiCWAmaGkoIiRzMyIpYCwkYWNjMgorCW1vdnpiCWAmaGkoIiRzMCIpYCwkYWNjMAorCXNocglcJDE2LCRzMgorCW1vdnpiCSgkc2JveCwkYWNjMiwxKSwkYWNjMgkjJHQyCisJbW92emIJKCRzYm94LCRhY2MwLDEpLCRhY2MwCSMkdDMKKwlzaHIJXCQxNiwkczMKKworCW1vdnpiCWAmbG8oIiRzMiIpYCwkYWNjMQorCXNobAlcJDgsJHQ0CisJc2hsCVwkOCwkdDUKKwltb3Z6YgkoJHNib3gsJGFjYzEsMSksJGFjYzEJIyR0MAorCXhvcgkkdDQsJHQwCisJeG9yCSR0NSwkdDEKKworCW1vdnpiCWAmbG8oIiRzMyIpYCwkdDQKKwlzaHIJXCQxNiwkczAKKwlzaHIJXCQxNiwkczEKKwltb3Z6YglgJmxvKCIkczAiKWAsJHQ1CisJc2hsCVwkOCwkYWNjMgorCXNobAlcJDgsJGFjYzAKKwltb3Z6YgkoJHNib3gsJHQ0LDEpLCR0NAkjJHQxCisJbW92emIJKCRzYm94LCR0NSwxKSwkdDUJIyR0MgorCXhvcgkkYWNjMiwkdDIKKwl4b3IJJGFjYzAsJHQzCisKKwltb3Z6YglgJmxvKCIkczEiKWAsJGFjYzIKKwltb3Z6YglgJmhpKCIkczMiKWAsJGFjYzAKKwlzaGwJXCQxNiwkYWNjMQorCW1vdnpiCSgkc2JveCwkYWNjMiwxKSwkYWNjMgkjJHQzCisJbW92emIJKCRzYm94LCRhY2MwLDEpLCRhY2MwCSMkdDAKKwl4b3IJJGFjYzEsJHQwCisKKwltb3Z6YglgJmhpKCIkczAiKWAsJGFjYzEKKwlzaHIJXCQ4LCRzMgorCXNocglcJDgsJHMxCisJbW92emIJKCRzYm94LCRhY2MxLDEpLCRhY2MxCSMkdDEKKwltb3Z6YgkoJHNib3gsJHMyLDEpLCRzMwkjJHQzCisJbW92emIJKCRzYm94LCRzMSwxKSwkczIJIyR0MgorCXNobAlcJDE2LCR0NAorCXNobAlcJDE2LCR0NQorCXNobAlcJDE2LCRhY2MyCisJeG9yCSR0NCwkdDEKKwl4b3IJJHQ1LCR0MgorCXhvcgkkYWNjMiwkdDMKKworCXNobAlcJDI0LCRhY2MwCisJc2hsCVwkMjQsJGFjYzEKKwlzaGwJXCQyNCwkczMKKwl4b3IJJGFjYzAsJHQwCisJc2hsCVwkMjQsJHMyCisJeG9yCSRhY2MxLCR0MQorCW1vdgkkdDAsJHMwCisJbW92CSR0MSwkczEKKwl4b3IJJHQyLCRzMgorCXhvcgkkdDMsJHMzCitfX18KK30KKworc3ViIGVuY3RyYW5zZm9ybV9yZWYoKQoreyBteSAkc24gPSBzaGlmdDsKKyAgbXkgKCRhY2MsJHIyLCR0bXApPSgiJXI4ZCIsIiVyOWQiLCIlcjEzZCIpOworCiskY29kZS49PDxfX187CisJbW92CSRzbiwkYWNjCisJYW5kCVwkMHg4MDgwODA4MCwkYWNjCisJbW92CSRhY2MsJHRtcAorCXNocglcJDcsJHRtcAorCWxlYQkoJHNuLCRzbiksJHIyCisJc3ViCSR0bXAsJGFjYworCWFuZAlcJDB4ZmVmZWZlZmUsJHIyCisJYW5kCVwkMHgxYjFiMWIxYiwkYWNjCisJbW92CSRzbiwkdG1wCisJeG9yCSRhY2MsJHIyCisKKwl4b3IJJHIyLCRzbgorCXJvbAlcJDI0LCRzbgorCXhvcgkkcjIsJHNuCisJcm9yCVwkMTYsJHRtcAorCXhvcgkkdG1wLCRzbgorCXJvcglcJDgsJHRtcAorCXhvcgkkdG1wLCRzbgorX19fCit9CisKKyMgdW5saWtlIGRlY3J5cHQgY2FzZSBpdCBkb2VzIG5vdCBwYXkgb2ZmIHRvIHBhcmFsbGVsaXplIGVuY3RyYW5zZm9ybQorc3ViIGVuY3RyYW5zZm9ybSgpCit7IG15ICgkdDMsJHIyMCwkcjIxKT0oJGFjYzIsIiVyOGQiLCIlcjlkIik7CisKKyRjb2RlLj08PF9fXzsKKwltb3YJJHMwLCRhY2MwCisJbW92CSRzMSwkYWNjMQorCWFuZAlcJDB4ODA4MDgwODAsJGFjYzAKKwlhbmQJXCQweDgwODA4MDgwLCRhY2MxCisJbW92CSRhY2MwLCR0MAorCW1vdgkkYWNjMSwkdDEKKwlzaHIJXCQ3LCR0MAorCWxlYQkoJHMwLCRzMCksJHIyMAorCXNocglcJDcsJHQxCisJbGVhCSgkczEsJHMxKSwkcjIxCisJc3ViCSR0MCwkYWNjMAorCXN1YgkkdDEsJGFjYzEKKwlhbmQJXCQweGZlZmVmZWZlLCRyMjAKKwlhbmQJXCQweGZlZmVmZWZlLCRyMjEKKwlhbmQJXCQweDFiMWIxYjFiLCRhY2MwCisJYW5kCVwkMHgxYjFiMWIxYiwkYWNjMQorCW1vdgkkczAsJHQwCisJbW92CSRzMSwkdDEKKwl4b3IJJGFjYzAsJHIyMAorCXhvcgkkYWNjMSwkcjIxCisKKwl4b3IJJHIyMCwkczAKKwl4b3IJJHIyMSwkczEKKwkgbW92CSRzMiwkYWNjMAorCSBtb3YJJHMzLCRhY2MxCisJcm9sCVwkMjQsJHMwCisJcm9sCVwkMjQsJHMxCisJIGFuZAlcJDB4ODA4MDgwODAsJGFjYzAKKwkgYW5kCVwkMHg4MDgwODA4MCwkYWNjMQorCXhvcgkkcjIwLCRzMAorCXhvcgkkcjIxLCRzMQorCSBtb3YJJGFjYzAsJHQyCisJIG1vdgkkYWNjMSwkdDMKKwlyb3IJXCQxNiwkdDAKKwlyb3IJXCQxNiwkdDEKKwkgc2hyCVwkNywkdDIKKwkgbGVhCSgkczIsJHMyKSwkcjIwCisJeG9yCSR0MCwkczAKKwl4b3IJJHQxLCRzMQorCSBzaHIJXCQ3LCR0MworCSBsZWEJKCRzMywkczMpLCRyMjEKKwlyb3IJXCQ4LCR0MAorCXJvcglcJDgsJHQxCisJIHN1YgkkdDIsJGFjYzAKKwkgc3ViCSR0MywkYWNjMQorCXhvcgkkdDAsJHMwCisJeG9yCSR0MSwkczEKKworCWFuZAlcJDB4ZmVmZWZlZmUsJHIyMAorCWFuZAlcJDB4ZmVmZWZlZmUsJHIyMQorCWFuZAlcJDB4MWIxYjFiMWIsJGFjYzAKKwlhbmQJXCQweDFiMWIxYjFiLCRhY2MxCisJbW92CSRzMiwkdDIKKwltb3YJJHMzLCR0MworCXhvcgkkYWNjMCwkcjIwCisJeG9yCSRhY2MxLCRyMjEKKworCXhvcgkkcjIwLCRzMgorCXhvcgkkcjIxLCRzMworCXJvbAlcJDI0LCRzMgorCXJvbAlcJDI0LCRzMworCXhvcgkkcjIwLCRzMgorCXhvcgkkcjIxLCRzMworCW1vdgkwKCRzYm94KSwkYWNjMAkJCSMgcHJlZmV0Y2ggVGU0CisJcm9yCVwkMTYsJHQyCisJcm9yCVwkMTYsJHQzCisJbW92CTY0KCRzYm94KSwkYWNjMQorCXhvcgkkdDIsJHMyCisJeG9yCSR0MywkczMKKwltb3YJMTI4KCRzYm94KSwkcjIwCisJcm9yCVwkOCwkdDIKKwlyb3IJXCQ4LCR0MworCW1vdgkxOTIoJHNib3gpLCRyMjEKKwl4b3IJJHQyLCRzMgorCXhvcgkkdDMsJHMzCitfX18KK30KKworJGNvZGUuPTw8X19fOworLnR5cGUJX3g4Nl82NF9BRVNfZW5jcnlwdF9jb21wYWN0LFxAYWJpLW9tbmlwb3RlbnQKKy5hbGlnbgkxNgorX3g4Nl82NF9BRVNfZW5jcnlwdF9jb21wYWN0OgorCWxlYQkxMjgoJHNib3gpLCRpbnAJCQkjIHNpemUgb3B0aW1pemF0aW9uCisJbW92CTAtMTI4KCRpbnApLCRhY2MxCQkjIHByZWZldGNoIFRlNAorCW1vdgkzMi0xMjgoJGlucCksJGFjYzIKKwltb3YJNjQtMTI4KCRpbnApLCR0MAorCW1vdgk5Ni0xMjgoJGlucCksJHQxCisJbW92CTEyOC0xMjgoJGlucCksJGFjYzEKKwltb3YJMTYwLTEyOCgkaW5wKSwkYWNjMgorCW1vdgkxOTItMTI4KCRpbnApLCR0MAorCW1vdgkyMjQtMTI4KCRpbnApLCR0MQorCWptcAkuTGVuY19sb29wX2NvbXBhY3QKKy5hbGlnbgkxNgorLkxlbmNfbG9vcF9jb21wYWN0OgorCQl4b3IJMCgka2V5KSwkczAJCSMgeG9yIHdpdGgga2V5CisJCXhvcgk0KCRrZXkpLCRzMQorCQl4b3IJOCgka2V5KSwkczIKKwkJeG9yCTEyKCRrZXkpLCRzMworCQlsZWEJMTYoJGtleSksJGtleQorX19fCisJCSZlbmNjb21wYWN0dmVydCgpOworJGNvZGUuPTw8X19fOworCQljbXAJMTYoJXJzcCksJGtleQorCQlqZQkuTGVuY19jb21wYWN0X2RvbmUKK19fXworCQkmZW5jdHJhbnNmb3JtKCk7CiskY29kZS49PDxfX187CisJam1wCS5MZW5jX2xvb3BfY29tcGFjdAorLmFsaWduCTE2CisuTGVuY19jb21wYWN0X2RvbmU6CisJeG9yCTAoJGtleSksJHMwCisJeG9yCTQoJGtleSksJHMxCisJeG9yCTgoJGtleSksJHMyCisJeG9yCTEyKCRrZXkpLCRzMworCS5ieXRlCTB4ZjMsMHhjMwkJCSMgcmVwIHJldAorLnNpemUJX3g4Nl82NF9BRVNfZW5jcnlwdF9jb21wYWN0LC4tX3g4Nl82NF9BRVNfZW5jcnlwdF9jb21wYWN0CitfX18KKwogIyB2b2lkIEFFU19lbmNyeXB0IChjb25zdCB2b2lkICppbnAsdm9pZCAqb3V0LGNvbnN0IEFFU19LRVkgKmtleSk7CiAkY29kZS49PDxfX187CiAuZ2xvYmwJQUVTX2VuY3J5cHQKQEAgLTM1OCwzMSArNTk2LDU3IEBACiAJcHVzaAklcjE0CiAJcHVzaAklcjE1CiAKKwkjIGFsbG9jYXRlIGZyYW1lICJhYm92ZSIga2V5IHNjaGVkdWxlCisJbW92CSVyc3AsJXIxMAorCWxlYQktNjMoJXJkeCksJXJjeAkjICVyZHggaXMga2V5IGFyZ3VtZW50CisJYW5kCVwkLTY0LCVyc3AKKwlzdWIJJXJzcCwlcmN4CisJbmVnCSVyY3gKKwlhbmQJXCQweDNjMCwlcmN4CisJc3ViCSVyY3gsJXJzcAorCXN1YglcJDMyLCVyc3AKKworCW1vdgklcnNpLDE2KCVyc3ApCSMgc2F2ZSBvdXQKKwltb3YJJXIxMCwyNCglcnNwKQkjIHNhdmUgcmVhbCBzdGFjayBwb2ludGVyCisuTGVuY19wcm9sb2d1ZToKKwogCW1vdgklcmR4LCRrZXkKLQltb3YJJXJkaSwkaW5wCi0JbW92CSVyc2ksJG91dAorCW1vdgkyNDAoJGtleSksJHJuZHMJIyBsb2FkIHJvdW5kcwogCi0JLnBpY21ldXAJJHNib3gKLQlsZWEJQUVTX1RlLS4oJHNib3gpLCRzYm94CisJbW92CTAoJXJkaSksJHMwCSMgbG9hZCBpbnB1dCB2ZWN0b3IKKwltb3YJNCglcmRpKSwkczEKKwltb3YJOCglcmRpKSwkczIKKwltb3YJMTIoJXJkaSksJHMzCiAKLQltb3YJMCgkaW5wKSwkczAKLQltb3YJNCgkaW5wKSwkczEKLQltb3YJOCgkaW5wKSwkczIKLQltb3YJMTIoJGlucCksJHMzCisJc2hsCVwkNCwkcm5kcworCWxlYQkoJGtleSwkcm5kcyksJXJicAorCW1vdgkka2V5LCglcnNwKQkjIGtleSBzY2hlZHVsZQorCW1vdgklcmJwLDgoJXJzcCkJIyBlbmQgb2Yga2V5IHNjaGVkdWxlCiAKLQljYWxsCV94ODZfNjRfQUVTX2VuY3J5cHQKKwkjIHBpY2sgVGU0IGNvcHkgd2hpY2ggY2FuJ3QgIm92ZXJsYXAiIHdpdGggc3RhY2sgZnJhbWUgb3Iga2V5IHNjaGVkdWxlCisJbGVhCS5MQUVTX1RlKzIwNDgoJXJpcCksJHNib3gKKwlsZWEJNzY4KCVyc3ApLCVyYnAKKwlzdWIJJHNib3gsJXJicAorCWFuZAlcJDB4MzAwLCVyYnAKKwlsZWEJKCRzYm94LCVyYnApLCRzYm94CiAKLQltb3YJJHMwLDAoJG91dCkKKwljYWxsCV94ODZfNjRfQUVTX2VuY3J5cHRfY29tcGFjdAorCisJbW92CTE2KCVyc3ApLCRvdXQJIyByZXN0b3JlIG91dAorCW1vdgkyNCglcnNwKSwlcnNpCSMgcmVzdG9yZSBzYXZlZCBzdGFjayBwb2ludGVyCisJbW92CSRzMCwwKCRvdXQpCSMgd3JpdGUgb3V0cHV0IHZlY3RvcgogCW1vdgkkczEsNCgkb3V0KQogCW1vdgkkczIsOCgkb3V0KQogCW1vdgkkczMsMTIoJG91dCkKIAotCXBvcAklcjE1Ci0JcG9wCSVyMTQKLQlwb3AJJXIxMwotCXBvcAklcjEyCi0JcG9wCSVyYnAKLQlwb3AJJXJieAorCW1vdgkoJXJzaSksJXIxNQorCW1vdgk4KCVyc2kpLCVyMTQKKwltb3YJMTYoJXJzaSksJXIxMworCW1vdgkyNCglcnNpKSwlcjEyCisJbW92CTMyKCVyc2kpLCVyYnAKKwltb3YJNDAoJXJzaSksJXJieAorCWxlYQk0OCglcnNpKSwlcnNwCisuTGVuY19lcGlsb2d1ZToKIAlyZXQKIC5zaXplCUFFU19lbmNyeXB0LC4tQUVTX2VuY3J5cHQKIF9fXwpAQCAtNDUzLDE5ICs3MTcsMjAgQEAKIHsgbXkgJHQzPSIlcjhkIjsJIyB6YXBzICRpbnAhCiAKICRjb2RlLj08PF9fXzsKKwlsZWEJMjA0OCgkc2JveCksJHNib3gJIyBzaXplIG9wdGltaXphdGlvbgogCW1vdnpiCWAmbG8oIiRzMCIpYCwkYWNjMAogCW1vdnpiCWAmbG8oIiRzMSIpYCwkYWNjMQogCW1vdnpiCWAmbG8oIiRzMiIpYCwkYWNjMgotCW1vdnpiCTIwNDgoJHNib3gsJGFjYzAsMSksJHQwCi0JbW92emIJMjA0OCgkc2JveCwkYWNjMSwxKSwkdDEKLQltb3Z6YgkyMDQ4KCRzYm94LCRhY2MyLDEpLCR0MgorCW1vdnpiCSgkc2JveCwkYWNjMCwxKSwkdDAKKwltb3Z6YgkoJHNib3gsJGFjYzEsMSksJHQxCisJbW92emIJKCRzYm94LCRhY2MyLDEpLCR0MgogCiAJbW92emIJYCZsbygiJHMzIilgLCRhY2MwCiAJbW92emIJYCZoaSgiJHMzIilgLCRhY2MxCiAJbW92emIJYCZoaSgiJHMwIilgLCRhY2MyCi0JbW92emIJMjA0OCgkc2JveCwkYWNjMCwxKSwkdDMKLQltb3Z6YgkyMDQ4KCRzYm94LCRhY2MxLDEpLCRhY2MxCSMkdDAKLQltb3Z6YgkyMDQ4KCRzYm94LCRhY2MyLDEpLCRhY2MyCSMkdDEKKwltb3Z6YgkoJHNib3gsJGFjYzAsMSksJHQzCisJbW92emIJKCRzYm94LCRhY2MxLDEpLCRhY2MxCSMkdDAKKwltb3Z6YgkoJHNib3gsJGFjYzIsMSksJGFjYzIJIyR0MQogCiAJc2hsCVwkOCwkYWNjMQogCXNobAlcJDgsJGFjYzIKQEAgLTQ3Nyw4ICs3NDIsOCBAQAogCW1vdnpiCWAmaGkoIiRzMSIpYCwkYWNjMAogCW1vdnpiCWAmaGkoIiRzMiIpYCwkYWNjMQogCXNocglcJDE2LCRzMAotCW1vdnpiCTIwNDgoJHNib3gsJGFjYzAsMSksJGFjYzAJIyR0MgotCW1vdnpiCTIwNDgoJHNib3gsJGFjYzEsMSksJGFjYzEJIyR0MworCW1vdnpiCSgkc2JveCwkYWNjMCwxKSwkYWNjMAkjJHQyCisJbW92emIJKCRzYm94LCRhY2MxLDEpLCRhY2MxCSMkdDMKIAogCXNobAlcJDgsJGFjYzAKIAlzaGwJXCQ4LCRhY2MxCkBAIC00OTAsOSArNzU1LDkgQEAKIAltb3Z6YglgJmxvKCIkczIiKWAsJGFjYzAKIAltb3Z6YglgJmxvKCIkczMiKWAsJGFjYzEKIAltb3Z6YglgJmxvKCIkczAiKWAsJGFjYzIKLQltb3Z6YgkyMDQ4KCRzYm94LCRhY2MwLDEpLCRhY2MwCSMkdDAKLQltb3Z6YgkyMDQ4KCRzYm94LCRhY2MxLDEpLCRhY2MxCSMkdDEKLQltb3Z6YgkyMDQ4KCRzYm94LCRhY2MyLDEpLCRhY2MyCSMkdDIKKwltb3Z6YgkoJHNib3gsJGFjYzAsMSksJGFjYzAJIyR0MAorCW1vdnpiCSgkc2JveCwkYWNjMSwxKSwkYWNjMQkjJHQxCisJbW92emIJKCRzYm94LCRhY2MyLDEpLCRhY2MyCSMkdDIKIAogCXNobAlcJDE2LCRhY2MwCiAJc2hsCVwkMTYsJGFjYzEKQEAgLTUwNSw5ICs3NzAsOSBAQAogCW1vdnpiCWAmbG8oIiRzMSIpYCwkYWNjMAogCW1vdnpiCWAmaGkoIiRzMSIpYCwkYWNjMQogCW1vdnpiCWAmaGkoIiRzMiIpYCwkYWNjMgotCW1vdnpiCTIwNDgoJHNib3gsJGFjYzAsMSksJGFjYzAJIyR0MwotCW1vdnpiCTIwNDgoJHNib3gsJGFjYzEsMSksJGFjYzEJIyR0MAotCW1vdnpiCTIwNDgoJHNib3gsJGFjYzIsMSksJGFjYzIJIyR0MQorCW1vdnpiCSgkc2JveCwkYWNjMCwxKSwkYWNjMAkjJHQzCisJbW92emIJKCRzYm94LCRhY2MxLDEpLCRhY2MxCSMkdDAKKwltb3Z6YgkoJHNib3gsJGFjYzIsMSksJGFjYzIJIyR0MQogCiAJc2hsCVwkMTYsJGFjYzAKIAlzaGwJXCQyNCwkYWNjMQpAQCAtNTIwLDggKzc4NSw4IEBACiAJbW92emIJYCZoaSgiJHMzIilgLCRhY2MwCiAJbW92emIJYCZoaSgiJHMwIilgLCRhY2MxCiAJbW92CTE2KzEyKCRrZXkpLCRzMwotCW1vdnpiCTIwNDgoJHNib3gsJGFjYzAsMSksJGFjYzAJIyR0MgotCW1vdnpiCTIwNDgoJHNib3gsJGFjYzEsMSksJGFjYzEJIyR0MworCW1vdnpiCSgkc2JveCwkYWNjMCwxKSwkYWNjMAkjJHQyCisJbW92emIJKCRzYm94LCRhY2MxLDEpLCRhY2MxCSMkdDMKIAltb3YJMTYrMCgka2V5KSwkczAKIAogCXNobAlcJDI0LCRhY2MwCkBAIC01MzIsNiArNzk3LDcgQEAKIAogCW1vdgkxNis0KCRrZXkpLCRzMQogCW1vdgkxNis4KCRrZXkpLCRzMgorCWxlYQktMjA0OCgkc2JveCksJHNib3gKIAl4b3IJJHQwLCRzMAogCXhvcgkkdDEsJHMxCiAJeG9yCSR0MiwkczIKQEAgLTY1OSw2ICs5MjUsMjYwIEBACiAuc2l6ZQlfeDg2XzY0X0FFU19kZWNyeXB0LC4tX3g4Nl82NF9BRVNfZGVjcnlwdAogX19fCiAKK3N1YiBkZWNjb21wYWN0dmVydCgpCit7IG15ICgkdDMsJHQ0LCR0NSk9KCIlcjhkIiwiJXI5ZCIsIiVyMTNkIik7CisKKyRjb2RlLj08PF9fXzsKKwltb3Z6YglgJmxvKCIkczAiKWAsJHQwCisJbW92emIJYCZsbygiJHMxIilgLCR0MQorCW1vdnpiCWAmbG8oIiRzMiIpYCwkdDIKKwltb3Z6YgkoJHNib3gsJHQwLDEpLCR0MAorCW1vdnpiCSgkc2JveCwkdDEsMSksJHQxCisJbW92emIJKCRzYm94LCR0MiwxKSwkdDIKKworCW1vdnpiCWAmbG8oIiRzMyIpYCwkdDMKKwltb3Z6YglgJmhpKCIkczMiKWAsJGFjYzAKKwltb3Z6YglgJmhpKCIkczAiKWAsJGFjYzEKKwltb3Z6YgkoJHNib3gsJHQzLDEpLCR0MworCW1vdnpiCSgkc2JveCwkYWNjMCwxKSwkdDQJIyR0MAorCW1vdnpiCSgkc2JveCwkYWNjMSwxKSwkdDUJIyR0MQorCisJbW92emIJYCZoaSgiJHMxIilgLCRhY2MyCisJbW92emIJYCZoaSgiJHMyIilgLCRhY2MwCisJc2hyCVwkMTYsJHMyCisJbW92emIJKCRzYm94LCRhY2MyLDEpLCRhY2MyCSMkdDIKKwltb3Z6YgkoJHNib3gsJGFjYzAsMSksJGFjYzAJIyR0MworCXNocglcJDE2LCRzMworCisJbW92emIJYCZsbygiJHMyIilgLCRhY2MxCisJc2hsCVwkOCwkdDQKKwlzaGwJXCQ4LCR0NQorCW1vdnpiCSgkc2JveCwkYWNjMSwxKSwkYWNjMQkjJHQwCisJeG9yCSR0NCwkdDAKKwl4b3IJJHQ1LCR0MQorCisJbW92emIJYCZsbygiJHMzIilgLCR0NAorCXNocglcJDE2LCRzMAorCXNocglcJDE2LCRzMQorCW1vdnpiCWAmbG8oIiRzMCIpYCwkdDUKKwlzaGwJXCQ4LCRhY2MyCisJc2hsCVwkOCwkYWNjMAorCW1vdnpiCSgkc2JveCwkdDQsMSksJHQ0CSMkdDEKKwltb3Z6YgkoJHNib3gsJHQ1LDEpLCR0NQkjJHQyCisJeG9yCSRhY2MyLCR0MgorCXhvcgkkYWNjMCwkdDMKKworCW1vdnpiCWAmbG8oIiRzMSIpYCwkYWNjMgorCW1vdnpiCWAmaGkoIiRzMSIpYCwkYWNjMAorCXNobAlcJDE2LCRhY2MxCisJbW92emIJKCRzYm94LCRhY2MyLDEpLCRhY2MyCSMkdDMKKwltb3Z6YgkoJHNib3gsJGFjYzAsMSksJGFjYzAJIyR0MAorCXhvcgkkYWNjMSwkdDAKKworCW1vdnpiCWAmaGkoIiRzMiIpYCwkYWNjMQorCXNobAlcJDE2LCR0NAorCXNobAlcJDE2LCR0NQorCW1vdnpiCSgkc2JveCwkYWNjMSwxKSwkczEJIyR0MQorCXhvcgkkdDQsJHQxCisJeG9yCSR0NSwkdDIKKworCW1vdnpiCWAmaGkoIiRzMyIpYCwkYWNjMQorCXNocglcJDgsJHMwCisJc2hsCVwkMTYsJGFjYzIKKwltb3Z6YgkoJHNib3gsJGFjYzEsMSksJHMyCSMkdDIKKwltb3Z6YgkoJHNib3gsJHMwLDEpLCRzMwkjJHQzCisJeG9yCSRhY2MyLCR0MworCisJc2hsCVwkMjQsJGFjYzAKKwlzaGwJXCQyNCwkczEKKwlzaGwJXCQyNCwkczIKKwl4b3IJJGFjYzAsJHQwCisJc2hsCVwkMjQsJHMzCisJeG9yCSR0MSwkczEKKwltb3YJJHQwLCRzMAorCXhvcgkkdDIsJHMyCisJeG9yCSR0MywkczMKK19fXworfQorCisjIHBhcmFsbGVsaXplZCB2ZXJzaW9uISBpbnB1dCBpcyBwYWlyIG9mIDY0LWJpdCB2YWx1ZXM6ICVyYXg9czEuczAKKyMgYW5kICVyY3g9czMuczIsIG91dHB1dCBpcyBmb3VyIDMyLWJpdCB2YWx1ZXMgaW4gJWVheD1zMCwgJWVieD1zMSwKKyMgJWVjeD1zMiBhbmQgJWVkeD1zMy4KK3N1YiBkZWN0cmFuc2Zvcm0oKQoreyBteSAoJHRwMTAsJHRwMjAsJHRwNDAsJHRwODAsJGFjYzApPSgiJXJheCIsIiVyOCIsICIlcjkiLCAiJXIxMCIsIiVyYngiKTsKKyAgbXkgKCR0cDE4LCR0cDI4LCR0cDQ4LCR0cDg4LCRhY2M4KT0oIiVyY3giLCIlcjExIiwiJXIxMiIsIiVyMTMiLCIlcmR4Iik7CisgIG15ICRwcmVmZXRjaCA9IHNoaWZ0OworCiskY29kZS49PDxfX187CisJbW92CSR0cDEwLCRhY2MwCisJbW92CSR0cDE4LCRhY2M4CisJYW5kCSRtYXNrODAsJGFjYzAKKwlhbmQJJG1hc2s4MCwkYWNjOAorCW1vdgkkYWNjMCwkdHA0MAorCW1vdgkkYWNjOCwkdHA0OAorCXNocglcJDcsJHRwNDAKKwlsZWEJKCR0cDEwLCR0cDEwKSwkdHAyMAorCXNocglcJDcsJHRwNDgKKwlsZWEJKCR0cDE4LCR0cDE4KSwkdHAyOAorCXN1YgkkdHA0MCwkYWNjMAorCXN1YgkkdHA0OCwkYWNjOAorCWFuZAkkbWFza2ZlLCR0cDIwCisJYW5kCSRtYXNrZmUsJHRwMjgKKwlhbmQJJG1hc2sxYiwkYWNjMAorCWFuZAkkbWFzazFiLCRhY2M4CisJeG9yCSR0cDIwLCRhY2MwCisJeG9yCSR0cDI4LCRhY2M4CisJbW92CSRhY2MwLCR0cDIwCisJbW92CSRhY2M4LCR0cDI4CisKKwlhbmQJJG1hc2s4MCwkYWNjMAorCWFuZAkkbWFzazgwLCRhY2M4CisJbW92CSRhY2MwLCR0cDgwCisJbW92CSRhY2M4LCR0cDg4CisJc2hyCVwkNywkdHA4MAorCWxlYQkoJHRwMjAsJHRwMjApLCR0cDQwCisJc2hyCVwkNywkdHA4OAorCWxlYQkoJHRwMjgsJHRwMjgpLCR0cDQ4CisJc3ViCSR0cDgwLCRhY2MwCisJc3ViCSR0cDg4LCRhY2M4CisJYW5kCSRtYXNrZmUsJHRwNDAKKwlhbmQJJG1hc2tmZSwkdHA0OAorCWFuZAkkbWFzazFiLCRhY2MwCisJYW5kCSRtYXNrMWIsJGFjYzgKKwl4b3IJJHRwNDAsJGFjYzAKKwl4b3IJJHRwNDgsJGFjYzgKKwltb3YJJGFjYzAsJHRwNDAKKwltb3YJJGFjYzgsJHRwNDgKKworCWFuZAkkbWFzazgwLCRhY2MwCisJYW5kCSRtYXNrODAsJGFjYzgKKwltb3YJJGFjYzAsJHRwODAKKwltb3YJJGFjYzgsJHRwODgKKwlzaHIJXCQ3LCR0cDgwCisJIHhvcgkkdHAxMCwkdHAyMAkJIyB0cDJePXRwMQorCXNocglcJDcsJHRwODgKKwkgeG9yCSR0cDE4LCR0cDI4CQkjIHRwMl49dHAxCisJc3ViCSR0cDgwLCRhY2MwCisJc3ViCSR0cDg4LCRhY2M4CisJbGVhCSgkdHA0MCwkdHA0MCksJHRwODAKKwlsZWEJKCR0cDQ4LCR0cDQ4KSwkdHA4OAorCSB4b3IJJHRwMTAsJHRwNDAJCSMgdHA0Xj10cDEKKwkgeG9yCSR0cDE4LCR0cDQ4CQkjIHRwNF49dHAxCisJYW5kCSRtYXNrZmUsJHRwODAKKwlhbmQJJG1hc2tmZSwkdHA4OAorCWFuZAkkbWFzazFiLCRhY2MwCisJYW5kCSRtYXNrMWIsJGFjYzgKKwl4b3IJJGFjYzAsJHRwODAKKwl4b3IJJGFjYzgsJHRwODgKKworCXhvcgkkdHA4MCwkdHAxMAkJIyB0cDFePXRwOAorCXhvcgkkdHA4OCwkdHAxOAkJIyB0cDFePXRwOAorCXhvcgkkdHA4MCwkdHAyMAkJIyB0cDJedHAxXj10cDgKKwl4b3IJJHRwODgsJHRwMjgJCSMgdHAyXnRwMV49dHA4CisJbW92CSR0cDEwLCRhY2MwCisJbW92CSR0cDE4LCRhY2M4CisJeG9yCSR0cDgwLCR0cDQwCQkjIHRwNF50cDFePXRwOAorCXhvcgkkdHA4OCwkdHA0OAkJIyB0cDRedHAxXj10cDgKKwlzaHIJXCQzMiwkYWNjMAorCXNocglcJDMyLCRhY2M4CisJeG9yCSR0cDIwLCR0cDgwCQkjIHRwOF49dHA4XnRwMl50cDE9dHAyXnRwMQorCXhvcgkkdHAyOCwkdHA4OAkJIyB0cDhePXRwOF50cDJedHAxPXRwMl50cDEKKwlyb2wJXCQ4LGAmTE8oIiR0cDEwIilgCSMgUk9UQVRFKHRwMV50cDgsOCkKKwlyb2wJXCQ4LGAmTE8oIiR0cDE4IilgCSMgUk9UQVRFKHRwMV50cDgsOCkKKwl4b3IJJHRwNDAsJHRwODAJCSMgdHAyXnRwMV49dHA4XnRwNF50cDE9dHA4XnRwNF50cDIKKwl4b3IJJHRwNDgsJHRwODgJCSMgdHAyXnRwMV49dHA4XnRwNF50cDE9dHA4XnRwNF50cDIKKworCXJvbAlcJDgsYCZMTygiJGFjYzAiKWAJIyBST1RBVEUodHAxXnRwOCw4KQorCXJvbAlcJDgsYCZMTygiJGFjYzgiKWAJIyBST1RBVEUodHAxXnRwOCw4KQorCXhvcglgJkxPKCIkdHA4MCIpYCxgJkxPKCIkdHAxMCIpYAorCXhvcglgJkxPKCIkdHA4OCIpYCxgJkxPKCIkdHAxOCIpYAorCXNocglcJDMyLCR0cDgwCisJc2hyCVwkMzIsJHRwODgKKwl4b3IJYCZMTygiJHRwODAiKWAsYCZMTygiJGFjYzAiKWAKKwl4b3IJYCZMTygiJHRwODgiKWAsYCZMTygiJGFjYzgiKWAKKworCW1vdgkkdHAyMCwkdHA4MAorCW1vdgkkdHAyOCwkdHA4OAorCXNocglcJDMyLCR0cDgwCisJc2hyCVwkMzIsJHRwODgKKwlyb2wJXCQyNCxgJkxPKCIkdHAyMCIpYAkjIFJPVEFURSh0cDJedHAxXnRwOCwyNCkKKwlyb2wJXCQyNCxgJkxPKCIkdHAyOCIpYAkjIFJPVEFURSh0cDJedHAxXnRwOCwyNCkKKwlyb2wJXCQyNCxgJkxPKCIkdHA4MCIpYAkjIFJPVEFURSh0cDJedHAxXnRwOCwyNCkKKwlyb2wJXCQyNCxgJkxPKCIkdHA4OCIpYAkjIFJPVEFURSh0cDJedHAxXnRwOCwyNCkKKwl4b3IJYCZMTygiJHRwMjAiKWAsYCZMTygiJHRwMTAiKWAKKwl4b3IJYCZMTygiJHRwMjgiKWAsYCZMTygiJHRwMTgiKWAKKwltb3YJJHRwNDAsJHRwMjAKKwltb3YJJHRwNDgsJHRwMjgKKwl4b3IJYCZMTygiJHRwODAiKWAsYCZMTygiJGFjYzAiKWAKKwl4b3IJYCZMTygiJHRwODgiKWAsYCZMTygiJGFjYzgiKWAKKworCWAibW92CTAoJHNib3gpLCRtYXNrODAiCWlmICgkcHJlZmV0Y2gpYAorCXNocglcJDMyLCR0cDIwCisJc2hyCVwkMzIsJHRwMjgKKwlgIm1vdgk2NCgkc2JveCksJG1hc2tmZSIJaWYgKCRwcmVmZXRjaClgCisJcm9sCVwkMTYsYCZMTygiJHRwNDAiKWAJIyBST1RBVEUodHA0XnRwMV50cDgsMTYpCisJcm9sCVwkMTYsYCZMTygiJHRwNDgiKWAJIyBST1RBVEUodHA0XnRwMV50cDgsMTYpCisJYCJtb3YJMTI4KCRzYm94KSwkbWFzazFiIglpZiAoJHByZWZldGNoKWAKKwlyb2wJXCQxNixgJkxPKCIkdHAyMCIpYAkjIFJPVEFURSh0cDRedHAxXnRwOCwxNikKKwlyb2wJXCQxNixgJkxPKCIkdHAyOCIpYAkjIFJPVEFURSh0cDRedHAxXnRwOCwxNikKKwlgIm1vdgkxOTIoJHNib3gpLCR0cDgwIglpZiAoJHByZWZldGNoKWAKKwl4b3IJYCZMTygiJHRwNDAiKWAsYCZMTygiJHRwMTAiKWAKKwl4b3IJYCZMTygiJHRwNDgiKWAsYCZMTygiJHRwMTgiKWAKKwlgIm1vdgkyNTYoJHNib3gpLCR0cDg4IglpZiAoJHByZWZldGNoKWAKKwl4b3IJYCZMTygiJHRwMjAiKWAsYCZMTygiJGFjYzAiKWAKKwl4b3IJYCZMTygiJHRwMjgiKWAsYCZMTygiJGFjYzgiKWAKK19fXworfQorCiskY29kZS49PDxfX187CisudHlwZQlfeDg2XzY0X0FFU19kZWNyeXB0X2NvbXBhY3QsXEBhYmktb21uaXBvdGVudAorLmFsaWduCTE2CitfeDg2XzY0X0FFU19kZWNyeXB0X2NvbXBhY3Q6CisJbGVhCTEyOCgkc2JveCksJGlucAkJCSMgc2l6ZSBvcHRpbWl6YXRpb24KKwltb3YJMC0xMjgoJGlucCksJGFjYzEJCSMgcHJlZmV0Y2ggVGQ0CisJbW92CTMyLTEyOCgkaW5wKSwkYWNjMgorCW1vdgk2NC0xMjgoJGlucCksJHQwCisJbW92CTk2LTEyOCgkaW5wKSwkdDEKKwltb3YJMTI4LTEyOCgkaW5wKSwkYWNjMQorCW1vdgkxNjAtMTI4KCRpbnApLCRhY2MyCisJbW92CTE5Mi0xMjgoJGlucCksJHQwCisJbW92CTIyNC0xMjgoJGlucCksJHQxCisJam1wCS5MZGVjX2xvb3BfY29tcGFjdAorCisuYWxpZ24JMTYKKy5MZGVjX2xvb3BfY29tcGFjdDoKKwkJeG9yCTAoJGtleSksJHMwCQkjIHhvciB3aXRoIGtleQorCQl4b3IJNCgka2V5KSwkczEKKwkJeG9yCTgoJGtleSksJHMyCisJCXhvcgkxMigka2V5KSwkczMKKwkJbGVhCTE2KCRrZXkpLCRrZXkKK19fXworCQkmZGVjY29tcGFjdHZlcnQoKTsKKyRjb2RlLj08PF9fXzsKKwkJY21wCTE2KCVyc3ApLCRrZXkKKwkJamUJLkxkZWNfY29tcGFjdF9kb25lCisKKwkJbW92CTI1NiswKCRzYm94KSwkbWFzazgwCisJCXNobAlcJDMyLCVyYngKKwkJc2hsCVwkMzIsJXJkeAorCQltb3YJMjU2KzgoJHNib3gpLCRtYXNrZmUKKwkJb3IJJXJieCwlcmF4CisJCW9yCSVyZHgsJXJjeAorCQltb3YJMjU2KzE2KCRzYm94KSwkbWFzazFiCitfX18KKwkJJmRlY3RyYW5zZm9ybSgxKTsKKyRjb2RlLj08PF9fXzsKKwlqbXAJLkxkZWNfbG9vcF9jb21wYWN0CisuYWxpZ24JMTYKKy5MZGVjX2NvbXBhY3RfZG9uZToKKwl4b3IJMCgka2V5KSwkczAKKwl4b3IJNCgka2V5KSwkczEKKwl4b3IJOCgka2V5KSwkczIKKwl4b3IJMTIoJGtleSksJHMzCisJLmJ5dGUJMHhmMywweGMzCQkJIyByZXAgcmV0Cisuc2l6ZQlfeDg2XzY0X0FFU19kZWNyeXB0X2NvbXBhY3QsLi1feDg2XzY0X0FFU19kZWNyeXB0X2NvbXBhY3QKK19fXworCiAjIHZvaWQgQUVTX2RlY3J5cHQgKGNvbnN0IHZvaWQgKmlucCx2b2lkICpvdXQsY29uc3QgQUVTX0tFWSAqa2V5KTsKICRjb2RlLj08PF9fXzsKIC5nbG9ibAlBRVNfZGVjcnlwdApAQCAtNjcyLDQzICsxMTkyLDU5IEBACiAJcHVzaAklcjE0CiAJcHVzaAklcjE1CiAKKwkjIGFsbG9jYXRlIGZyYW1lICJhYm92ZSIga2V5IHNjaGVkdWxlCisJbW92CSVyc3AsJXIxMAorCWxlYQktNjMoJXJkeCksJXJjeAkjICVyZHggaXMga2V5IGFyZ3VtZW50CisJYW5kCVwkLTY0LCVyc3AKKwlzdWIJJXJzcCwlcmN4CisJbmVnCSVyY3gKKwlhbmQJXCQweDNjMCwlcmN4CisJc3ViCSVyY3gsJXJzcAorCXN1YglcJDMyLCVyc3AKKworCW1vdgklcnNpLDE2KCVyc3ApCSMgc2F2ZSBvdXQKKwltb3YJJXIxMCwyNCglcnNwKQkjIHNhdmUgcmVhbCBzdGFjayBwb2ludGVyCisuTGRlY19wcm9sb2d1ZToKKwogCW1vdgklcmR4LCRrZXkKLQltb3YJJXJkaSwkaW5wCi0JbW92CSVyc2ksJG91dAorCW1vdgkyNDAoJGtleSksJHJuZHMJIyBsb2FkIHJvdW5kcwogCi0JLnBpY21ldXAJJHNib3gKLQlsZWEJQUVTX1RkLS4oJHNib3gpLCRzYm94CisJbW92CTAoJXJkaSksJHMwCSMgbG9hZCBpbnB1dCB2ZWN0b3IKKwltb3YJNCglcmRpKSwkczEKKwltb3YJOCglcmRpKSwkczIKKwltb3YJMTIoJXJkaSksJHMzCiAKLQkjIHByZWZldGNoIFRkNAotCWxlYQkyMDQ4KzEyOCgkc2JveCksJHNib3g7Ci0JbW92CTAtMTI4KCRzYm94KSwkczAKLQltb3YJMzItMTI4KCRzYm94KSwkczEKLQltb3YJNjQtMTI4KCRzYm94KSwkczIKLQltb3YJOTYtMTI4KCRzYm94KSwkczMKLQltb3YJMTI4LTEyOCgkc2JveCksJHMwCi0JbW92CTE2MC0xMjgoJHNib3gpLCRzMQotCW1vdgkxOTItMTI4KCRzYm94KSwkczIKLQltb3YJMjI0LTEyOCgkc2JveCksJHMzCi0JbGVhCS0yMDQ4LTEyOCgkc2JveCksJHNib3g7CisJc2hsCVwkNCwkcm5kcworCWxlYQkoJGtleSwkcm5kcyksJXJicAorCW1vdgkka2V5LCglcnNwKQkjIGtleSBzY2hlZHVsZQorCW1vdgklcmJwLDgoJXJzcCkJIyBlbmQgb2Yga2V5IHNjaGVkdWxlCiAKLQltb3YJMCgkaW5wKSwkczAKLQltb3YJNCgkaW5wKSwkczEKLQltb3YJOCgkaW5wKSwkczIKLQltb3YJMTIoJGlucCksJHMzCisJIyBwaWNrIFRkNCBjb3B5IHdoaWNoIGNhbid0ICJvdmVybGFwIiB3aXRoIHN0YWNrIGZyYW1lIG9yIGtleSBzY2hlZHVsZQorCWxlYQkuTEFFU19UZCsyMDQ4KCVyaXApLCRzYm94CisJbGVhCTc2OCglcnNwKSwlcmJwCisJc3ViCSRzYm94LCVyYnAKKwlhbmQJXCQweDMwMCwlcmJwCisJbGVhCSgkc2JveCwlcmJwKSwkc2JveAorCXNocglcJDMsJXJicAkjIHJlY2FsbCAibWFnaWMiIGNvbnN0YW50cyEKKwlhZGQJJXJicCwkc2JveAogCi0JY2FsbAlfeDg2XzY0X0FFU19kZWNyeXB0CisJY2FsbAlfeDg2XzY0X0FFU19kZWNyeXB0X2NvbXBhY3QKIAotCW1vdgkkczAsMCgkb3V0KQorCW1vdgkxNiglcnNwKSwkb3V0CSMgcmVzdG9yZSBvdXQKKwltb3YJMjQoJXJzcCksJXJzaQkjIHJlc3RvcmUgc2F2ZWQgc3RhY2sgcG9pbnRlcgorCW1vdgkkczAsMCgkb3V0KQkjIHdyaXRlIG91dHB1dCB2ZWN0b3IKIAltb3YJJHMxLDQoJG91dCkKIAltb3YJJHMyLDgoJG91dCkKIAltb3YJJHMzLDEyKCRvdXQpCiAKLQlwb3AJJXIxNQotCXBvcAklcjE0Ci0JcG9wCSVyMTMKLQlwb3AJJXIxMgotCXBvcAklcmJwCi0JcG9wCSVyYngKKwltb3YJKCVyc2kpLCVyMTUKKwltb3YJOCglcnNpKSwlcjE0CisJbW92CTE2KCVyc2kpLCVyMTMKKwltb3YJMjQoJXJzaSksJXIxMgorCW1vdgkzMiglcnNpKSwlcmJwCisJbW92CTQwKCVyc2kpLCVyYngKKwlsZWEJNDgoJXJzaSksJXJzcAorLkxkZWNfZXBpbG9ndWU6CiAJcmV0CiAuc2l6ZQlBRVNfZGVjcnlwdCwuLUFFU19kZWNyeXB0CiBfX18KQEAgLTcxOCwyNyArMTI1NCwyNiBAQAogewogJGNvZGUuPTw8X19fOwogCW1vdnoJJWRsLCVlc2kJCSMgcmtbaV0+PjAKLQltb3YJMiglcmJwLCVyc2ksOCksJWVieAorCW1vdnpiCS0xMjgoJXJicCwlcnNpKSwlZWJ4CiAJbW92egklZGgsJWVzaQkJIyBya1tpXT4+OAotCWFuZAlcJDB4RkYwMDAwMDAsJWVieAorCXNobAlcJDI0LCVlYngKIAl4b3IJJWVieCwlZWF4CiAKLQltb3YJMiglcmJwLCVyc2ksOCksJWVieAorCW1vdnpiCS0xMjgoJXJicCwlcnNpKSwlZWJ4CiAJc2hyCVwkMTYsJWVkeAotCWFuZAlcJDB4MDAwMDAwRkYsJWVieAogCW1vdnoJJWRsLCVlc2kJCSMgcmtbaV0+PjE2CiAJeG9yCSVlYngsJWVheAogCi0JbW92CTAoJXJicCwlcnNpLDgpLCVlYngKKwltb3Z6YgktMTI4KCVyYnAsJXJzaSksJWVieAogCW1vdnoJJWRoLCVlc2kJCSMgcmtbaV0+PjI0Ci0JYW5kCVwkMHgwMDAwRkYwMCwlZWJ4CisJc2hsCVwkOCwlZWJ4CiAJeG9yCSVlYngsJWVheAogCi0JbW92CTAoJXJicCwlcnNpLDgpLCVlYngKLQlhbmQJXCQweDAwRkYwMDAwLCVlYngKKwltb3Z6YgktMTI4KCVyYnAsJXJzaSksJWVieAorCXNobAlcJDE2LCVlYngKIAl4b3IJJWVieCwlZWF4CiAKLQl4b3IJMjA0OCglcmJwLCVyY3gsNCksJWVheAkJIyByY29uCisJeG9yCTEwMjQtMTI4KCVyYnAsJXJjeCw0KSwlZWF4CQkjIHJjb24KIF9fXwogfQogCkBAIC03NTEsNyArMTI4NiwyOSBAQAogQUVTX3NldF9lbmNyeXB0X2tleToKIAlwdXNoCSVyYngKIAlwdXNoCSVyYnAKKwlwdXNoCSVyMTIJCQkjIHJlZHVuZGFudCwgYnV0IGFsbG93cyB0byBzaGFyZSAKKwlwdXNoCSVyMTMJCQkjIGV4Y2VwdGlvbiBoYW5kbGVyLi4uCisJcHVzaAklcjE0CisJcHVzaAklcjE1CisJc3ViCVwkOCwlcnNwCisuTGVuY19rZXlfcHJvbG9ndWU6CiAKKwljYWxsCV94ODZfNjRfQUVTX3NldF9lbmNyeXB0X2tleQorCisJbW92CTgoJXJzcCksJXIxNQorCW1vdgkxNiglcnNwKSwlcjE0CisJbW92CTI0KCVyc3ApLCVyMTMKKwltb3YJMzIoJXJzcCksJXIxMgorCW1vdgk0MCglcnNwKSwlcmJwCisJbW92CTQ4KCVyc3ApLCVyYngKKwlhZGQJXCQ1NiwlcnNwCisuTGVuY19rZXlfZXBpbG9ndWU6CisJcmV0Cisuc2l6ZQlBRVNfc2V0X2VuY3J5cHRfa2V5LC4tQUVTX3NldF9lbmNyeXB0X2tleQorCisudHlwZQlfeDg2XzY0X0FFU19zZXRfZW5jcnlwdF9rZXksXEBhYmktb21uaXBvdGVudAorLmFsaWduCTE2CitfeDg2XzY0X0FFU19zZXRfZW5jcnlwdF9rZXk6CiAJbW92CSVlc2ksJWVjeAkJCSMgJWVjeD1iaXRzCiAJbW92CSVyZGksJXJzaQkJCSMgJXJzaT11c2VyS2V5CiAJbW92CSVyZHgsJXJkaQkJCSMgJXJkaT1rZXkKQEAgLTc2MSw4ICsxMzE4LDE4IEBACiAJdGVzdAlcJC0xLCVyZGkKIAlqegkuTGJhZHBvaW50ZXIKIAotCS5waWNtZXVwICVyYnAKLQlsZWEJQUVTX1RlLS4oJXJicCksJXJicAorCWxlYQkuTEFFU19UZSglcmlwKSwlcmJwCisJbGVhCTIwNDgrMTI4KCVyYnApLCVyYnAKKworCSMgcHJlZmV0Y2ggVGU0CisJbW92CTAtMTI4KCVyYnApLCVlYXgKKwltb3YJMzItMTI4KCVyYnApLCVlYngKKwltb3YJNjQtMTI4KCVyYnApLCVyOGQKKwltb3YJOTYtMTI4KCVyYnApLCVlZHgKKwltb3YJMTI4LTEyOCglcmJwKSwlZWF4CisJbW92CTE2MC0xMjgoJXJicCksJWVieAorCW1vdgkxOTItMTI4KCVyYnApLCVyOGQKKwltb3YJMjI0LTEyOCglcmJwKSwlZWR4CiAKIAljbXAJXCQxMjgsJWVjeAogCWplCS5MMTByb3VuZHMKQEAgLTc3NCwxNSArMTM0MSwxMiBAQAogCWptcAkuTGV4aXQKIAogLkwxMHJvdW5kczoKLQltb3YJMCglcnNpKSwlZWF4CQkJIyBjb3B5IGZpcnN0IDQgZHdvcmRzCi0JbW92CTQoJXJzaSksJWVieAotCW1vdgk4KCVyc2kpLCVlY3gKLQltb3YJMTIoJXJzaSksJWVkeAotCW1vdgklZWF4LDAoJXJkaSkKLQltb3YJJWVieCw0KCVyZGkpCi0JbW92CSVlY3gsOCglcmRpKQotCW1vdgklZWR4LDEyKCVyZGkpCisJbW92CTAoJXJzaSksJXJheAkJCSMgY29weSBmaXJzdCA0IGR3b3JkcworCW1vdgk4KCVyc2kpLCVyZHgKKwltb3YJJXJheCwwKCVyZGkpCisJbW92CSVyZHgsOCglcmRpKQogCisJc2hyCVwkMzIsJXJkeAogCXhvcgklZWN4LCVlY3gKIAlqbXAJLkwxMHNob3J0Y3V0CiAuYWxpZ24JNApAQCAtODEwLDE5ICsxMzc0LDE0IEBACiAJam1wCS5MZXhpdAogCiAuTDEycm91bmRzOgotCW1vdgkwKCVyc2kpLCVlYXgJCQkjIGNvcHkgZmlyc3QgNiBkd29yZHMKLQltb3YJNCglcnNpKSwlZWJ4Ci0JbW92CTgoJXJzaSksJWVjeAotCW1vdgkxMiglcnNpKSwlZWR4Ci0JbW92CSVlYXgsMCglcmRpKQotCW1vdgklZWJ4LDQoJXJkaSkKLQltb3YJJWVjeCw4KCVyZGkpCi0JbW92CSVlZHgsMTIoJXJkaSkKLQltb3YJMTYoJXJzaSksJWVjeAotCW1vdgkyMCglcnNpKSwlZWR4Ci0JbW92CSVlY3gsMTYoJXJkaSkKLQltb3YJJWVkeCwyMCglcmRpKQorCW1vdgkwKCVyc2kpLCVyYXgJCQkjIGNvcHkgZmlyc3QgNiBkd29yZHMKKwltb3YJOCglcnNpKSwlcmJ4CisJbW92CTE2KCVyc2kpLCVyZHgKKwltb3YJJXJheCwwKCVyZGkpCisJbW92CSVyYngsOCglcmRpKQorCW1vdgklcmR4LDE2KCVyZGkpCiAKKwlzaHIJXCQzMiwlcmR4CiAJeG9yCSVlY3gsJWVjeAogCWptcAkuTDEyc2hvcnRjdXQKIC5hbGlnbgk0CkBAIC04NTgsMzAgKzE0MTcsMjMgQEAKIAlqbXAJLkxleGl0CiAKIC5MMTRyb3VuZHM6CQkKLQltb3YJMCglcnNpKSwlZWF4CQkJIyBjb3B5IGZpcnN0IDggZHdvcmRzCi0JbW92CTQoJXJzaSksJWVieAotCW1vdgk4KCVyc2kpLCVlY3gKLQltb3YJMTIoJXJzaSksJWVkeAotCW1vdgklZWF4LDAoJXJkaSkKLQltb3YJJWVieCw0KCVyZGkpCi0JbW92CSVlY3gsOCglcmRpKQotCW1vdgklZWR4LDEyKCVyZGkpCi0JbW92CTE2KCVyc2kpLCVlYXgKLQltb3YJMjAoJXJzaSksJWVieAotCW1vdgkyNCglcnNpKSwlZWN4Ci0JbW92CTI4KCVyc2kpLCVlZHgKLQltb3YJJWVheCwxNiglcmRpKQotCW1vdgklZWJ4LDIwKCVyZGkpCi0JbW92CSVlY3gsMjQoJXJkaSkKLQltb3YJJWVkeCwyOCglcmRpKQorCW1vdgkwKCVyc2kpLCVyYXgJCQkjIGNvcHkgZmlyc3QgOCBkd29yZHMKKwltb3YJOCglcnNpKSwlcmJ4CisJbW92CTE2KCVyc2kpLCVyY3gKKwltb3YJMjQoJXJzaSksJXJkeAorCW1vdgklcmF4LDAoJXJkaSkKKwltb3YJJXJieCw4KCVyZGkpCisJbW92CSVyY3gsMTYoJXJkaSkKKwltb3YJJXJkeCwyNCglcmRpKQogCisJc2hyCVwkMzIsJXJkeAogCXhvcgklZWN4LCVlY3gKIAlqbXAJLkwxNHNob3J0Y3V0CiAuYWxpZ24JNAogLkwxNGxvb3A6CisJCW1vdgkwKCVyZGkpLCVlYXgJCQkjIHJrWzBdCiAJCW1vdgkyOCglcmRpKSwlZWR4CQkJIyBya1s0XQogLkwxNHNob3J0Y3V0OgotCQltb3YJMCglcmRpKSwlZWF4CQkJIyBya1swXQogX19fCiAJCSZlbmNrZXkJKCk7CiAkY29kZS49PDxfX187CkBAIC05MDAsMjQgKzE0NTIsMjMgQEAKIAkJbW92CSVlYXgsJWVkeAogCQltb3YJMTYoJXJkaSksJWVheAkJCSMgcmtbNF0KIAkJbW92egklZGwsJWVzaQkJCSMgcmtbMTFdPj4wCi0JCW1vdgkyKCVyYnAsJXJzaSw4KSwlZWJ4CisJCW1vdnpiCS0xMjgoJXJicCwlcnNpKSwlZWJ4CiAJCW1vdnoJJWRoLCVlc2kJCQkjIHJrWzExXT4+OAotCQlhbmQJXCQweDAwMDAwMEZGLCVlYngKIAkJeG9yCSVlYngsJWVheAogCi0JCW1vdgkwKCVyYnAsJXJzaSw4KSwlZWJ4CisJCW1vdnpiCS0xMjgoJXJicCwlcnNpKSwlZWJ4CiAJCXNocglcJDE2LCVlZHgKLQkJYW5kCVwkMHgwMDAwRkYwMCwlZWJ4CisJCXNobAlcJDgsJWVieAogCQltb3Z6CSVkbCwlZXNpCQkJIyBya1sxMV0+PjE2CiAJCXhvcgklZWJ4LCVlYXgKIAotCQltb3YJMCglcmJwLCVyc2ksOCksJWVieAorCQltb3Z6YgktMTI4KCVyYnAsJXJzaSksJWVieAogCQltb3Z6CSVkaCwlZXNpCQkJIyBya1sxMV0+PjI0Ci0JCWFuZAlcJDB4MDBGRjAwMDAsJWVieAorCQlzaGwJXCQxNiwlZWJ4CiAJCXhvcgklZWJ4LCVlYXgKIAotCQltb3YJMiglcmJwLCVyc2ksOCksJWVieAotCQlhbmQJXCQweEZGMDAwMDAwLCVlYngKKwkJbW92emIJLTEyOCglcmJwLCVyc2kpLCVlYngKKwkJc2hsCVwkMjQsJWVieAogCQl4b3IJJWVieCwlZWF4CiAKIAkJbW92CSVlYXgsNDgoJXJkaSkJCQkjIHJrWzEyXQpAQCAtOTM4LDMxICsxNDg5LDYxIEBACiAuTGJhZHBvaW50ZXI6CiAJbW92CVwkLTEsJXJheAogLkxleGl0OgotCXBvcAklcmJwCi0JcG9wCSVyYngKLQlyZXQKLS5zaXplCUFFU19zZXRfZW5jcnlwdF9rZXksLi1BRVNfc2V0X2VuY3J5cHRfa2V5CisJLmJ5dGUJMHhmMywweGMzCQkJIyByZXAgcmV0Cisuc2l6ZQlfeDg2XzY0X0FFU19zZXRfZW5jcnlwdF9rZXksLi1feDg2XzY0X0FFU19zZXRfZW5jcnlwdF9rZXkKIF9fXwogCi1zdWIgZGVja2V5KCkKK3N1YiBkZWNrZXlfcmVmKCkKIHsgbXkgKCRpLCRwdHIsJHRlLCR0ZCkgPSBAXzsKKyAgbXkgKCR0cDEsJHRwMiwkdHA0LCR0cDgsJGFjYyk9KCIlZWF4IiwiJWVieCIsIiVlZGkiLCIlZWR4IiwiJXI4ZCIpOwogJGNvZGUuPTw8X19fOwotCW1vdgkkaSgkcHRyKSwlZWF4Ci0JbW92CSVlYXgsJWVkeAotCW1vdnoJJWFoLCVlYngKLQlzaHIJXCQxNiwlZWR4Ci0JYW5kCVwkMHhGRiwlZWF4Ci0JbW92emIJMigkdGUsJXJheCw4KSwlcmF4Ci0JbW92emIJMigkdGUsJXJieCw4KSwlcmJ4Ci0JbW92CTAoJHRkLCVyYXgsOCksJWVheAotCXhvcgkzKCR0ZCwlcmJ4LDgpLCVlYXgKLQltb3Z6YgklZGgsJWVieAotCWFuZAlcJDB4RkYsJWVkeAotCW1vdnpiCTIoJHRlLCVyZHgsOCksJXJkeAotCW1vdnpiCTIoJHRlLCVyYngsOCksJXJieAotCXhvcgkyKCR0ZCwlcmR4LDgpLCVlYXgKLQl4b3IJMSgkdGQsJXJieCw4KSwlZWF4Ci0JbW92CSVlYXgsJGkoJHB0cikKKwltb3YJJGkoJHB0ciksJHRwMQorCW1vdgkkdHAxLCRhY2MKKwlhbmQJXCQweDgwODA4MDgwLCRhY2MKKwltb3YJJGFjYywkdHA0CisJc2hyCVwkNywkdHA0CisJbGVhCTAoJHRwMSwkdHAxKSwkdHAyCisJc3ViCSR0cDQsJGFjYworCWFuZAlcJDB4ZmVmZWZlZmUsJHRwMgorCWFuZAlcJDB4MWIxYjFiMWIsJGFjYworCXhvcgkkdHAyLCRhY2MKKwltb3YJJGFjYywkdHAyCisKKwlhbmQJXCQweDgwODA4MDgwLCRhY2MKKwltb3YJJGFjYywkdHA4CisJc2hyCVwkNywkdHA4CisJbGVhCTAoJHRwMiwkdHAyKSwkdHA0CisJc3ViCSR0cDgsJGFjYworCWFuZAlcJDB4ZmVmZWZlZmUsJHRwNAorCWFuZAlcJDB4MWIxYjFiMWIsJGFjYworCSB4b3IJJHRwMSwkdHAyCQkjIHRwMl50cDEKKwl4b3IJJHRwNCwkYWNjCisJbW92CSRhY2MsJHRwNAorCisJYW5kCVwkMHg4MDgwODA4MCwkYWNjCisJbW92CSRhY2MsJHRwOAorCXNocglcJDcsJHRwOAorCXN1YgkkdHA4LCRhY2MKKwlsZWEJMCgkdHA0LCR0cDQpLCR0cDgKKwkgeG9yCSR0cDEsJHRwNAkJIyB0cDRedHAxCisJYW5kCVwkMHhmZWZlZmVmZSwkdHA4CisJYW5kCVwkMHgxYjFiMWIxYiwkYWNjCisJeG9yCSRhY2MsJHRwOAorCisJeG9yCSR0cDgsJHRwMQkJIyB0cDFedHA4CisJcm9sCVwkOCwkdHAxCQkjIFJPVEFURSh0cDFedHA4LDgpCisJeG9yCSR0cDgsJHRwMgkJIyB0cDJedHAxXnRwOAorCXhvcgkkdHA4LCR0cDQJCSMgdHA0XnRwMV50cDgKKwl4b3IJJHRwMiwkdHA4CisJeG9yCSR0cDQsJHRwOAkJIyB0cDheKHRwOF50cDRedHAxKV4odHA4XnRwMl50cDEpPXRwOF50cDRedHAyCisKKwl4b3IJJHRwOCwkdHAxCisJcm9sCVwkMjQsJHRwMgkJIyBST1RBVEUodHAyXnRwMV50cDgsMjQpCisJeG9yCSR0cDIsJHRwMQorCXJvbAlcJDE2LCR0cDQJCSMgUk9UQVRFKHRwNF50cDFedHA4LDE2KQorCXhvcgkkdHA0LCR0cDEKKworCW1vdgkkdHAxLCRpKCRwdHIpCiBfX18KIH0KIApAQCAtOTczLDE5ICsxNTU0LDIzIEBACiAudHlwZQlBRVNfc2V0X2RlY3J5cHRfa2V5LFxAZnVuY3Rpb24sMwogLmFsaWduCTE2CiBBRVNfc2V0X2RlY3J5cHRfa2V5OgotCXB1c2gJJXJkeAotCWNhbGwJQUVTX3NldF9lbmNyeXB0X2tleQotCWNtcAlcJDAsJWVheAotCWplCS5McHJvY2VlZAotCWxlYQkyNCglcnNwKSwlcnNwCi0JcmV0Ci0uTHByb2NlZWQ6Ci0JbW92CSglcnNwKSwlcjgJCSMgcmVzdG9yZSBrZXkgc2NoZWR1bGUKLQltb3YJJXJieCwoJXJzcCkKKwlwdXNoCSVyYngKKwlwdXNoCSVyYnAKKwlwdXNoCSVyMTIKKwlwdXNoCSVyMTMKKwlwdXNoCSVyMTQKKwlwdXNoCSVyMTUKKwlwdXNoCSVyZHgJCQkjIHNhdmUga2V5IHNjaGVkdWxlCisuTGRlY19rZXlfcHJvbG9ndWU6CiAKLQltb3YJMjQwKCVyOCksJWVjeAkJIyBwdWxsIG51bWJlciBvZiByb3VuZHMKKwljYWxsCV94ODZfNjRfQUVTX3NldF9lbmNyeXB0X2tleQorCW1vdgkoJXJzcCksJXI4CQkjIHJlc3RvcmUga2V5IHNjaGVkdWxlCisJY21wCVwkMCwlZWF4CisJam5lCS5MYWJvcnQKKworCW1vdgkyNDAoJXI4KSwlcjE0ZAkJIyBwdWxsIG51bWJlciBvZiByb3VuZHMKIAl4b3IJJXJkaSwlcmRpCi0JbGVhCSglcmRpLCVyY3gsNCksJXJjeAorCWxlYQkoJXJkaSwlcjE0ZCw0KSwlcmN4CiAJbW92CSVyOCwlcnNpCiAJbGVhCSglcjgsJXJjeCw0KSwlcmRpCSMgcG9pbnRlciB0byBsYXN0IGNodW5rCiAuYWxpZ24JNApAQCAtMTAwMywyNyArMTU4OCwzOSBAQAogCQljbXAJJXJzaSwlcmRpCiAJam5lCS5MaW52ZXJ0CiAKLQkucGljbWV1cCAlcjkKLQlsZWEJQUVTX1RkLS4oJXI5KSwlcmRpCi0JbGVhCUFFU19UZS1BRVNfVGQoJXJkaSksJXI5CisJbGVhCS5MQUVTX1RlKzIwNDgrMTAyNCglcmlwKSwlcmF4CSMgcmNvbgogCi0JbW92CSVyOCwlcnNpCi0JbW92CTI0MCglcjgpLCVlY3gJCSMgcHVsbCBudW1iZXIgb2Ygcm91bmRzCi0Jc3ViCVwkMSwlZWN4CisJbW92CTQwKCVyYXgpLCRtYXNrODAKKwltb3YJNDgoJXJheCksJG1hc2tmZQorCW1vdgk1NiglcmF4KSwkbWFzazFiCisKKwltb3YJJXI4LCRrZXkKKwlzdWIJXCQxLCVyMTRkCiAuYWxpZ24JNAogLkxwZXJtdXRlOgotCQlsZWEJMTYoJXJzaSksJXJzaQorCQlsZWEJMTYoJGtleSksJGtleQorCQltb3YJMCgka2V5KSwlcmF4CisJCW1vdgk4KCRrZXkpLCVyY3gKIF9fXwotCQkmZGVja2V5CSgwLCIlcnNpIiwiJXI5IiwiJXJkaSIpOwotCQkmZGVja2V5CSg0LCIlcnNpIiwiJXI5IiwiJXJkaSIpOwotCQkmZGVja2V5CSg4LCIlcnNpIiwiJXI5IiwiJXJkaSIpOwotCQkmZGVja2V5CSgxMiwiJXJzaSIsIiVyOSIsIiVyZGkiKTsKKwkJJmRlY3RyYW5zZm9ybSAoKTsKICRjb2RlLj08PF9fXzsKLQkJc3ViCVwkMSwlZWN4CisJCW1vdgklZWF4LDAoJGtleSkKKwkJbW92CSVlYngsNCgka2V5KQorCQltb3YJJWVjeCw4KCRrZXkpCisJCW1vdgklZWR4LDEyKCRrZXkpCisJCXN1YglcJDEsJXIxNGQKIAlqbnoJLkxwZXJtdXRlCiAKIAl4b3IJJXJheCwlcmF4Ci0JcG9wCSVyYngKKy5MYWJvcnQ6CisJbW92CTgoJXJzcCksJXIxNQorCW1vdgkxNiglcnNwKSwlcjE0CisJbW92CTI0KCVyc3ApLCVyMTMKKwltb3YJMzIoJXJzcCksJXIxMgorCW1vdgk0MCglcnNwKSwlcmJwCisJbW92CTQ4KCVyc3ApLCVyYngKKwlhZGQJXCQ1NiwlcnNwCisuTGRlY19rZXlfZXBpbG9ndWU6CiAJcmV0CiAuc2l6ZQlBRVNfc2V0X2RlY3J5cHRfa2V5LC4tQUVTX3NldF9kZWNyeXB0X2tleQogX19fCkBAIC0xMDM0LDQ3ICsxNjMxLDU5IEBACiB7CiAjIHN0YWNrIGZyYW1lIGxheW91dAogIyAtOCglcnNwKQkJcmV0dXJuIGFkZHJlc3MKLW15ICRfcnNwPSIwKCVyc3ApIjsJCSMgc2F2ZWQgJXJzcAotbXkgJF9sZW49IjgoJXJzcCkiOwkJIyBjb3B5IG9mIDNyZCBwYXJhbWV0ZXIsIGxlbmd0aAotbXkgJF9rZXk9IjE2KCVyc3ApIjsJCSMgY29weSBvZiA0dGggcGFyYW1ldGVyLCBrZXkKLW15ICRfaXZwPSIyNCglcnNwKSI7CQkjIGNvcHkgb2YgNXRoIHBhcmFtZXRlciwgaXZwCi1teSAka2V5cD0iMzIoJXJzcCkiOwkJIyBvbmUgdG8gcGFzcyBhcyAka2V5Ci1teSAkaXZlYz0iNDAoJXJzcCkiOwkJIyBpdmVjWzE2XQotbXkgJGFlc19rZXk9IjU2KCVyc3ApIjsJCSMgY29weSBvZiBhZXNfa2V5Ci1teSAkbWFyaz0iNTYrMjQwKCVyc3ApIjsJIyBjb3B5IG9mIGFlc19rZXktPnJvdW5kcworbXkgJGtleXA9IjAoJXJzcCkiOwkJIyBvbmUgdG8gcGFzcyBhcyAka2V5CitteSAka2V5ZW5kPSI4KCVyc3ApIjsJCSMgJihrZXlwLT5yZF9rZXlbNCprZXlwLT5yb3VuZHNdKQorbXkgJF9yc3A9IjE2KCVyc3ApIjsJCSMgc2F2ZWQgJXJzcAorbXkgJF9pbnA9IjI0KCVyc3ApIjsJCSMgY29weSBvZiAxc3QgcGFyYW1ldGVyLCBpbnAKK215ICRfb3V0PSIzMiglcnNwKSI7CQkjIGNvcHkgb2YgMm5kIHBhcmFtZXRlciwgb3V0CitteSAkX2xlbj0iNDAoJXJzcCkiOwkJIyBjb3B5IG9mIDNyZCBwYXJhbWV0ZXIsIGxlbmd0aAorbXkgJF9rZXk9IjQ4KCVyc3ApIjsJCSMgY29weSBvZiA0dGggcGFyYW1ldGVyLCBrZXkKK215ICRfaXZwPSI1NiglcnNwKSI7CQkjIGNvcHkgb2YgNXRoIHBhcmFtZXRlciwgaXZwCitteSAkaXZlYz0iNjQoJXJzcCkiOwkJIyBpdmVjWzE2XQorbXkgJGFlc19rZXk9IjgwKCVyc3ApIjsJCSMgY29weSBvZiBhZXNfa2V5CitteSAkbWFyaz0iODArMjQwKCVyc3ApIjsJIyBjb3B5IG9mIGFlc19rZXktPnJvdW5kcwogCiAkY29kZS49PDxfX187CiAuZ2xvYmwJQUVTX2NiY19lbmNyeXB0CiAudHlwZQlBRVNfY2JjX2VuY3J5cHQsXEBmdW5jdGlvbiw2CiAuYWxpZ24JMTYKKy5leHRlcm4JT1BFTlNTTF9pYTMyY2FwX1AKIEFFU19jYmNfZW5jcnlwdDoKIAljbXAJXCQwLCVyZHgJIyBjaGVjayBsZW5ndGgKLQlqZQkuTGNiY19qdXN0X3JldAorCWplCS5MY2JjX2VwaWxvZ3VlCisJcHVzaGZxCiAJcHVzaAklcmJ4CiAJcHVzaAklcmJwCiAJcHVzaAklcjEyCiAJcHVzaAklcjEzCiAJcHVzaAklcjE0CiAJcHVzaAklcjE1Ci0JcHVzaGZxCisuTGNiY19wcm9sb2d1ZToKKwogCWNsZAogCW1vdgklcjlkLCVyOWQJIyBjbGVhciB1cHBlciBoYWxmIG9mIGVuYwogCi0JLnBpY21ldXAgJHNib3gKLS5MY2JjX3BpY19wb2ludDoKLQorCWxlYQkuTEFFU19UZSglcmlwKSwkc2JveAogCWNtcAlcJDAsJXI5Ci0JamUJLkxERUNSWVBUCisJam5lCS5MY2JjX3BpY2tlZF90ZQorCWxlYQkuTEFFU19UZCglcmlwKSwkc2JveAorLkxjYmNfcGlja2VkX3RlOgogCi0JbGVhCUFFU19UZS0uTGNiY19waWNfcG9pbnQoJHNib3gpLCRzYm94CisJbW92CU9QRU5TU0xfaWEzMmNhcF9QKCVyaXApLCVyMTBkCisJY21wCVwkJHNwZWVkX2xpbWl0LCVyZHgKKwlqYgkuTGNiY19zbG93X3Byb2xvZ3VlCisJdGVzdAlcJDE1LCVyZHgKKwlqbnoJLkxjYmNfc2xvd19wcm9sb2d1ZQorCWJ0CVwkMjgsJXIxMGQKKwlqYwkuTGNiY19zbG93X3Byb2xvZ3VlCiAKIAkjIGFsbG9jYXRlIGFsaWduZWQgc3RhY2sgZnJhbWUuLi4KLQlsZWEJLTY0LTI0OCglcnNwKSwka2V5CisJbGVhCS04OC0yNDgoJXJzcCksJGtleQogCWFuZAlcJC02NCwka2V5CiAKLQkjIC4uLiBhbmQgbWFrZSBpdCBkb2Vzbid0IGFsaWFzIHdpdGggQUVTX1RlIG1vZHVsbyA0MDk2CisJIyAuLi4gYW5kIG1ha2Ugc3VyZSBpdCBkb2Vzbid0IGFsaWFzIHdpdGggQUVTX1RbZWRdIG1vZHVsbyA0MDk2CiAJbW92CSRzYm94LCVyMTAKLQlsZWEJMjA0OCgkc2JveCksJXIxMQorCWxlYQkyMzA0KCRzYm94KSwlcjExCiAJbW92CSRrZXksJXIxMgogCWFuZAlcJDB4RkZGLCVyMTAJIyBzID0gJHNib3gmMHhmZmYKIAlhbmQJXCQweEZGRiwlcjExCSMgZSA9ICgkc2JveCsyMDQ4KSYweGZmZgpAQCAtMTA5NCwyMiArMTcwMywyNyBAQAogLkxjYmNfdGVfb2s6CiAKIAl4Y2hnCSVyc3AsJGtleQotCWFkZAlcJDgsJXJzcAkjIHJlc2VydmUgZm9yIHJldHVybiBhZGRyZXNzIQorCSNhZGQJXCQ4LCVyc3AJIyByZXNlcnZlIGZvciByZXR1cm4gYWRkcmVzcyEKIAltb3YJJGtleSwkX3JzcAkjIHNhdmUgJXJzcAorLkxjYmNfZmFzdF9ib2R5OgorCW1vdgklcmRpLCRfaW5wCSMgc2F2ZSBjb3B5IG9mIGlucAorCW1vdgklcnNpLCRfb3V0CSMgc2F2ZSBjb3B5IG9mIG91dAogCW1vdgklcmR4LCRfbGVuCSMgc2F2ZSBjb3B5IG9mIGxlbgogCW1vdgklcmN4LCRfa2V5CSMgc2F2ZSBjb3B5IG9mIGtleQogCW1vdgklcjgsJF9pdnAJIyBzYXZlIGNvcHkgb2YgaXZwCiAJbW92bAlcJDAsJG1hcmsJIyBjb3B5IG9mIGFlc19rZXktPnJvdW5kcyA9IDA7CiAJbW92CSVyOCwlcmJwCSMgcmVhcnJhbmdlIGlucHV0IGFyZ3VtZW50cworCW1vdgklcjksJXJieAogCW1vdgklcnNpLCRvdXQKIAltb3YJJXJkaSwkaW5wCiAJbW92CSVyY3gsJGtleQogCisJbW92CTI0MCgka2V5KSwlZWF4CQkjIGtleS0+cm91bmRzCiAJIyBkbyB3ZSBjb3B5IGtleSBzY2hlZHVsZSB0byBzdGFjaz8KIAltb3YJJGtleSwlcjEwCiAJc3ViCSRzYm94LCVyMTAKIAlhbmQJXCQweGZmZiwlcjEwCi0JY21wCVwkMjA0OCwlcjEwCisJY21wCVwkMjMwNCwlcjEwCiAJamIJLkxjYmNfZG9fZWNvcHkKIAljbXAJXCQ0MDk2LTI0OCwlcjEwCiAJamIJLkxjYmNfc2tpcF9lY29weQpAQCAtMTEyMCwxMiArMTczNCwxMSBAQAogCQlsZWEJJGFlc19rZXksJGtleQogCQltb3YJXCQyNDAvOCwlZWN4CiAJCS5sb25nCTB4OTBBNTQ4RjMJIyByZXAgbW92c3EKLQkJbW92CSglcnNpKSwlZWF4CSMgY29weSBhZXNfa2V5LT5yb3VuZHMKLQkJbW92CSVlYXgsKCVyZGkpCisJCW1vdgklZWF4LCglcmRpKQkjIGNvcHkgYWVzX2tleS0+cm91bmRzCiAuTGNiY19za2lwX2Vjb3B5OgogCW1vdgkka2V5LCRrZXlwCSMgc2F2ZSBrZXkgcG9pbnRlcgogCi0JbW92CVwkMTYsJWVjeAorCW1vdglcJDE4LCVlY3gKIC5hbGlnbgk0CiAuTGNiY19wcmVmZXRjaF90ZToKIAkJbW92CTAoJHNib3gpLCVyMTAKQEAgLTExMzUsMTg0ICsxNzQ4LDc3IEBACiAJCWxlYQkxMjgoJHNib3gpLCRzYm94CiAJCXN1YglcJDEsJWVjeAogCWpuegkuTGNiY19wcmVmZXRjaF90ZQotCXN1YglcJDIwNDgsJHNib3gKKwlsZWEJLTIzMDQoJHNib3gpLCRzYm94CiAKLQl0ZXN0CVwkLTE2LCVyZHgJCSMgY2hlY2sgdXBvbiBsZW5ndGgKLQltb3YJJXJkeCwlcjEwCisJY21wCVwkMCwlcmJ4CisJamUJLkxGQVNUX0RFQ1JZUFQKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVOQ1JZUFQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCiAJbW92CTAoJXJicCksJHMwCQkjIGxvYWQgaXYKIAltb3YJNCglcmJwKSwkczEKIAltb3YJOCglcmJwKSwkczIKIAltb3YJMTIoJXJicCksJHMzCi0JanoJLkxjYmNfZW5jX3RhaWwJCSMgc2hvcnQgaW5wdXQuLi4KIAogLmFsaWduCTQKLS5MY2JjX2VuY19sb29wOgorLkxjYmNfZmFzdF9lbmNfbG9vcDoKIAkJeG9yCTAoJGlucCksJHMwCiAJCXhvcgk0KCRpbnApLCRzMQogCQl4b3IJOCgkaW5wKSwkczIKIAkJeG9yCTEyKCRpbnApLCRzMwotCQltb3YJJGlucCwkaXZlYwkjIGlmICgkdmVydGljYWxzcGluKSBzYXZlIGlucAotCiAJCW1vdgkka2V5cCwka2V5CSMgcmVzdG9yZSBrZXkKKwkJbW92CSRpbnAsJF9pbnAJIyBpZiAoJHZlcnRpY2Fsc3Bpbikgc2F2ZSBpbnAKKwogCQljYWxsCV94ODZfNjRfQUVTX2VuY3J5cHQKIAotCQltb3YJJGl2ZWMsJGlucAkjIGlmICgkdmVydGljYWxzcGluKSByZXN0b3JlIGlucAorCQltb3YJJF9pbnAsJGlucAkjIGlmICgkdmVydGljYWxzcGluKSByZXN0b3JlIGlucAorCQltb3YJJF9sZW4sJXIxMAogCQltb3YJJHMwLDAoJG91dCkKIAkJbW92CSRzMSw0KCRvdXQpCiAJCW1vdgkkczIsOCgkb3V0KQogCQltb3YJJHMzLDEyKCRvdXQpCiAKLQkJbW92CSRfbGVuLCVyMTAKIAkJbGVhCTE2KCRpbnApLCRpbnAKIAkJbGVhCTE2KCRvdXQpLCRvdXQKIAkJc3ViCVwkMTYsJXIxMAogCQl0ZXN0CVwkLTE2LCVyMTAKIAkJbW92CSVyMTAsJF9sZW4KLQlqbnoJLkxjYmNfZW5jX2xvb3AKLQl0ZXN0CVwkMTUsJXIxMAotCWpuegkuTGNiY19lbmNfdGFpbAorCWpuegkuTGNiY19mYXN0X2VuY19sb29wCiAJbW92CSRfaXZwLCVyYnAJIyByZXN0b3JlIGl2cAogCW1vdgkkczAsMCglcmJwKQkjIHNhdmUgaXZlYwogCW1vdgkkczEsNCglcmJwKQogCW1vdgkkczIsOCglcmJwKQogCW1vdgkkczMsMTIoJXJicCkKIAotLmFsaWduCTQKLS5MY2JjX2NsZWFudXA6Ci0JY21wbAlcJDAsJG1hcmsJIyB3YXMgdGhlIGtleSBzY2hlZHVsZSBjb3BpZWQ/Ci0JbGVhCSRhZXNfa2V5LCVyZGkKLQlqZQkuTGNiY19leGl0Ci0JCW1vdglcJDI0MC84LCVlY3gKLQkJeG9yCSVyYXgsJXJheAotCQkubG9uZwkweDkwQUI0OEYzCSMgcmVwIHN0b3NxCi0uTGNiY19leGl0OgotCW1vdgkkX3JzcCwlcnNwCi0JcG9wZnEKLQlwb3AJJXIxNQotCXBvcAklcjE0Ci0JcG9wCSVyMTMKLQlwb3AJJXIxMgotCXBvcAklcmJwCi0JcG9wCSVyYngKLS5MY2JjX2p1c3RfcmV0OgotCXJldAotLmFsaWduCTQKLS5MY2JjX2VuY190YWlsOgotCW1vdgklcmF4LCVyMTEKLQltb3YJJXJjeCwlcjEyCi0JbW92CSVyMTAsJXJjeAotCW1vdgkkaW5wLCVyc2kKLQltb3YJJG91dCwlcmRpCi0JLmxvbmcJMHhGNjg5QTRGMwkJIyByZXAgbW92c2IKLQltb3YJXCQxNiwlcmN4CQkjIHplcm8gdGFpbAotCXN1YgklcjEwLCVyY3gKLQl4b3IJJXJheCwlcmF4Ci0JLmxvbmcJMHhGNjg5QUFGMwkJIyByZXAgc3Rvc2IKLQltb3YJJG91dCwkaW5wCQkjIHRoaXMgaXMgbm90IGEgbWlzdGFrZSEKLQltb3ZxCVwkMTYsJF9sZW4JCSMgbGVuPTE2Ci0JbW92CSVyMTEsJXJheAotCW1vdgklcjEyLCVyY3gKLQlqbXAJLkxjYmNfZW5jX2xvb3AJCSMgb25lIG1vcmUgc3Bpbi4uLgorCWptcAkuTGNiY19mYXN0X2NsZWFudXAKKwogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERFQ1JZUFQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCiAuYWxpZ24JMTYKLS5MREVDUllQVDoKLQlsZWEJQUVTX1RkLS5MY2JjX3BpY19wb2ludCgkc2JveCksJHNib3gKLQotCSMgYWxsb2NhdGUgYWxpZ25lZCBzdGFjayBmcmFtZS4uLgotCWxlYQktNjQtMjQ4KCVyc3ApLCRrZXkKLQlhbmQJXCQtNjQsJGtleQotCi0JIyAuLi4gYW5kIG1ha2UgaXQgZG9lc24ndCBhbGlhcyB3aXRoIEFFU19UZCBtb2R1bG8gNDA5NgotCW1vdgkkc2JveCwlcjEwCi0JbGVhCTIzMDQoJHNib3gpLCVyMTEKLQltb3YJJGtleSwlcjEyCi0JYW5kCVwkMHhGRkYsJXIxMAkjIHMgPSAkc2JveCYweGZmZgotCWFuZAlcJDB4RkZGLCVyMTEJIyBlID0gKCRzYm94KzIwNDgrMjU2KSYweGZmZgotCWFuZAlcJDB4RkZGLCVyMTIJIyBwID0gJXJzcCYweGZmZgotCi0JY21wCSVyMTEsJXIxMgkjIGlmIChwPT5lKSAlcnNwID0tIChwLWUpOwotCWpiCS5MY2JjX3RkX2JyZWFrX291dAotCXN1YgklcjExLCVyMTIKLQlzdWIJJXIxMiwka2V5Ci0Jam1wCS5MY2JjX3RkX29rCi0uTGNiY190ZF9icmVha19vdXQ6CQkjIGVsc2UgJXJzcCAtPSAocC1zKSYweGZmZiArIGZyYW1lc3oKLQlzdWIJJXIxMCwlcjEyCi0JYW5kCVwkMHhGRkYsJXIxMgotCWFkZAlcJDMyMCwlcjEyCi0Jc3ViCSVyMTIsJGtleQotLmFsaWduCTQKLS5MY2JjX3RkX29rOgotCi0JeGNoZwklcnNwLCRrZXkKLQlhZGQJXCQ4LCVyc3AJIyByZXNlcnZlIGZvciByZXR1cm4gYWRkcmVzcyEKLQltb3YJJGtleSwkX3JzcAkjIHNhdmUgJXJzcAotCW1vdgklcmR4LCRfbGVuCSMgc2F2ZSBjb3B5IG9mIGxlbgotCW1vdgklcmN4LCRfa2V5CSMgc2F2ZSBjb3B5IG9mIGtleQotCW1vdgklcjgsJF9pdnAJIyBzYXZlIGNvcHkgb2YgaXZwCi0JbW92bAlcJDAsJG1hcmsJIyBjb3B5IG9mIGFlc19rZXktPnJvdW5kcyA9IDA7Ci0JbW92CSVyOCwlcmJwCSMgcmVhcnJhbmdlIGlucHV0IGFyZ3VtZW50cwotCW1vdgklcnNpLCRvdXQKLQltb3YJJXJkaSwkaW5wCi0JbW92CSVyY3gsJGtleQotCi0JIyBkbyB3ZSBjb3B5IGtleSBzY2hlZHVsZSB0byBzdGFjaz8KLQltb3YJJGtleSwlcjEwCi0Jc3ViCSRzYm94LCVyMTAKLQlhbmQJXCQweGZmZiwlcjEwCi0JY21wCVwkMjMwNCwlcjEwCi0JamIJLkxjYmNfZG9fZGNvcHkKLQljbXAJXCQ0MDk2LTI0OCwlcjEwCi0JamIJLkxjYmNfc2tpcF9kY29weQotLmFsaWduCTQKLS5MY2JjX2RvX2Rjb3B5OgotCQltb3YJJGtleSwlcnNpCi0JCWxlYQkkYWVzX2tleSwlcmRpCi0JCWxlYQkkYWVzX2tleSwka2V5Ci0JCW1vdglcJDI0MC84LCVlY3gKLQkJLmxvbmcJMHg5MEE1NDhGMwkjIHJlcCBtb3ZzcQotCQltb3YJKCVyc2kpLCVlYXgJIyBjb3B5IGFlc19rZXktPnJvdW5kcwotCQltb3YJJWVheCwoJXJkaSkKLS5MY2JjX3NraXBfZGNvcHk6Ci0JbW92CSRrZXksJGtleXAJIyBzYXZlIGtleSBwb2ludGVyCi0KLQltb3YJXCQxOCwlZWN4Ci0uYWxpZ24JNAotLkxjYmNfcHJlZmV0Y2hfdGQ6Ci0JCW1vdgkwKCRzYm94KSwlcjEwCi0JCW1vdgkzMigkc2JveCksJXIxMQotCQltb3YJNjQoJHNib3gpLCVyMTIKLQkJbW92CTk2KCRzYm94KSwlcjEzCi0JCWxlYQkxMjgoJHNib3gpLCRzYm94Ci0JCXN1YglcJDEsJWVjeAotCWpuegkuTGNiY19wcmVmZXRjaF90ZAotCXN1YglcJDIzMDQsJHNib3gKLQorLkxGQVNUX0RFQ1JZUFQ6CiAJY21wCSRpbnAsJG91dAotCWplCS5MY2JjX2RlY19pbl9wbGFjZQorCWplCS5MY2JjX2Zhc3RfZGVjX2luX3BsYWNlCiAKIAltb3YJJXJicCwkaXZlYwogLmFsaWduCTQKLS5MY2JjX2RlY19sb29wOgotCQltb3YJMCgkaW5wKSwkczAJCSMgcmVhZCBpbnB1dAorLkxjYmNfZmFzdF9kZWNfbG9vcDoKKwkJbW92CTAoJGlucCksJHMwCSMgcmVhZCBpbnB1dAogCQltb3YJNCgkaW5wKSwkczEKIAkJbW92CTgoJGlucCksJHMyCiAJCW1vdgkxMigkaW5wKSwkczMKLQkJbW92CSRpbnAsOCskaXZlYwkjIGlmICgkdmVydGljYWxzcGluKSBzYXZlIGlucAotCiAJCW1vdgkka2V5cCwka2V5CSMgcmVzdG9yZSBrZXkKKwkJbW92CSRpbnAsJF9pbnAJIyBpZiAoJHZlcnRpY2Fsc3Bpbikgc2F2ZSBpbnAKKwogCQljYWxsCV94ODZfNjRfQUVTX2RlY3J5cHQKIAogCQltb3YJJGl2ZWMsJXJicAkjIGxvYWQgaXZwCi0JCW1vdgk4KyRpdmVjLCRpbnAJIyBpZiAoJHZlcnRpY2Fsc3BpbikgcmVzdG9yZSBpbnAKKwkJbW92CSRfaW5wLCRpbnAJIyBpZiAoJHZlcnRpY2Fsc3BpbikgcmVzdG9yZSBpbnAKKwkJbW92CSRfbGVuLCVyMTAJIyBsb2FkIGxlbgogCQl4b3IJMCglcmJwKSwkczAJIyB4b3IgaXYKIAkJeG9yCTQoJXJicCksJHMxCiAJCXhvcgk4KCVyYnApLCRzMgogCQl4b3IJMTIoJXJicCksJHMzCiAJCW1vdgkkaW5wLCVyYnAJIyBjdXJyZW50IGlucHV0LCBuZXh0IGl2CiAKLQkJbW92CSRfbGVuLCVyMTAJIyBsb2FkIGxlbgogCQlzdWIJXCQxNiwlcjEwCi0JCWpjCS5MY2JjX2RlY19wYXJ0aWFsCiAJCW1vdgklcjEwLCRfbGVuCSMgdXBkYXRlIGxlbgogCQltb3YJJXJicCwkaXZlYwkjIHVwZGF0ZSBpdnAKIApAQCAtMTMyMyw4MSArMTgyOSwyODEgQEAKIAogCQlsZWEJMTYoJGlucCksJGlucAogCQlsZWEJMTYoJG91dCksJG91dAotCWpuegkuTGNiY19kZWNfbG9vcAotLkxjYmNfZGVjX2VuZDoKKwlqbnoJLkxjYmNfZmFzdF9kZWNfbG9vcAogCW1vdgkkX2l2cCwlcjEyCQkjIGxvYWQgdXNlciBpdnAKIAltb3YJMCglcmJwKSwlcjEwCQkjIGxvYWQgaXYKIAltb3YJOCglcmJwKSwlcjExCiAJbW92CSVyMTAsMCglcjEyKQkJIyBjb3B5IGJhY2sgdG8gdXNlcgogCW1vdgklcjExLDgoJXIxMikKLQlqbXAJLkxjYmNfY2xlYW51cAotCi0uYWxpZ24JNAotLkxjYmNfZGVjX3BhcnRpYWw6Ci0JbW92CSRzMCwwKyRpdmVjCQkjIGR1bXAgb3V0cHV0IHRvIHN0YWNrCi0JbW92CSRzMSw0KyRpdmVjCi0JbW92CSRzMiw4KyRpdmVjCi0JbW92CSRzMywxMiskaXZlYwotCW1vdgkkb3V0LCVyZGkKLQlsZWEJJGl2ZWMsJXJzaQotCW1vdglcJDE2LCVyY3gKLQlhZGQJJXIxMCwlcmN4CQkjIG51bWJlciBvZiBieXRlcyB0byBjb3B5Ci0JLmxvbmcJMHhGNjg5QTRGMwkJIyByZXAgbW92c2IKLQlqbXAJLkxjYmNfZGVjX2VuZAorCWptcAkuTGNiY19mYXN0X2NsZWFudXAKIAogLmFsaWduCTE2Ci0uTGNiY19kZWNfaW5fcGxhY2U6CisuTGNiY19mYXN0X2RlY19pbl9wbGFjZToKKwltb3YJMCglcmJwKSwlcjEwCQkjIGNvcHkgaXYgdG8gc3RhY2sKKwltb3YJOCglcmJwKSwlcjExCisJbW92CSVyMTAsMCskaXZlYworCW1vdgklcjExLDgrJGl2ZWMKKy5hbGlnbgk0CisuTGNiY19mYXN0X2RlY19pbl9wbGFjZV9sb29wOgogCQltb3YJMCgkaW5wKSwkczAJIyBsb2FkIGlucHV0CiAJCW1vdgk0KCRpbnApLCRzMQogCQltb3YJOCgkaW5wKSwkczIKIAkJbW92CTEyKCRpbnApLCRzMworCQltb3YJJGtleXAsJGtleQkjIHJlc3RvcmUga2V5CisJCW1vdgkkaW5wLCRfaW5wCSMgaWYgKCR2ZXJ0aWNhbHNwaW4pIHNhdmUgaW5wCiAKLQkJbW92CSRpbnAsJGl2ZWMJIyBpZiAoJHZlcnRpY2Fsc3Bpbikgc2F2ZSBpbnAKLQkJbW92CSRrZXlwLCRrZXkKIAkJY2FsbAlfeDg2XzY0X0FFU19kZWNyeXB0CiAKLQkJbW92CSRpdmVjLCRpbnAJIyBpZiAoJHZlcnRpY2Fsc3BpbikgcmVzdG9yZSBpbnAKLQkJbW92CSRfaXZwLCVyYnAKLQkJeG9yCTAoJXJicCksJHMwCi0JCXhvcgk0KCVyYnApLCRzMQotCQl4b3IJOCglcmJwKSwkczIKLQkJeG9yCTEyKCVyYnApLCRzMworCQltb3YJJF9pbnAsJGlucAkjIGlmICgkdmVydGljYWxzcGluKSByZXN0b3JlIGlucAorCQltb3YJJF9sZW4sJXIxMAorCQl4b3IJMCskaXZlYywkczAKKwkJeG9yCTQrJGl2ZWMsJHMxCisJCXhvcgk4KyRpdmVjLCRzMgorCQl4b3IJMTIrJGl2ZWMsJHMzCiAKLQkJbW92CTAoJGlucCksJXIxMAkjIGNvcHkgaW5wdXQgdG8gaXYKLQkJbW92CTgoJGlucCksJXIxMQotCQltb3YJJXIxMCwwKCVyYnApCi0JCW1vdgklcjExLDgoJXJicCkKKwkJbW92CTAoJGlucCksJXIxMQkjIGxvYWQgaW5wdXQKKwkJbW92CTgoJGlucCksJXIxMgorCQlzdWIJXCQxNiwlcjEwCisJCWp6CS5MY2JjX2Zhc3RfZGVjX2luX3BsYWNlX2RvbmUKKworCQltb3YJJXIxMSwwKyRpdmVjCSMgY29weSBpbnB1dCB0byBpdgorCQltb3YJJXIxMiw4KyRpdmVjCiAKIAkJbW92CSRzMCwwKCRvdXQpCSMgc2F2ZSBvdXRwdXQgW3phcHMgaW5wdXRdCiAJCW1vdgkkczEsNCgkb3V0KQogCQltb3YJJHMyLDgoJG91dCkKIAkJbW92CSRzMywxMigkb3V0KQogCi0JCW1vdgkkX2xlbiwlcmN4CiAJCWxlYQkxNigkaW5wKSwkaW5wCiAJCWxlYQkxNigkb3V0KSwkb3V0Ci0JCXN1YglcJDE2LCVyY3gKLQkJamMJLkxjYmNfZGVjX2luX3BsYWNlX3BhcnRpYWwKLQkJbW92CSVyY3gsJF9sZW4KLQlqbnoJLkxjYmNfZGVjX2luX3BsYWNlCi0Jam1wCS5MY2JjX2NsZWFudXAKKwkJbW92CSVyMTAsJF9sZW4KKwlqbXAJLkxjYmNfZmFzdF9kZWNfaW5fcGxhY2VfbG9vcAorLkxjYmNfZmFzdF9kZWNfaW5fcGxhY2VfZG9uZToKKwltb3YJJF9pdnAsJXJkaQorCW1vdgklcjExLDAoJXJkaSkJIyBjb3B5IGl2IGJhY2sgdG8gdXNlcgorCW1vdgklcjEyLDgoJXJkaSkKKworCW1vdgkkczAsMCgkb3V0KQkjIHNhdmUgb3V0cHV0IFt6YXBzIGlucHV0XQorCW1vdgkkczEsNCgkb3V0KQorCW1vdgkkczIsOCgkb3V0KQorCW1vdgkkczMsMTIoJG91dCkKIAogLmFsaWduCTQKLS5MY2JjX2RlY19pbl9wbGFjZV9wYXJ0aWFsOgotCSMgb25lIGNhbiBhcmd1ZSBpZiB0aGlzIGlzIGFjdHVhbGx5IHJlcXVpcmVkCi0JbGVhCSgkb3V0LCVyY3gpLCVyZGkKLQlsZWEJKCVyYnAsJXJjeCksJXJzaQotCW5lZwklcmN4Ci0JLmxvbmcJMHhGNjg5QTRGMwkjIHJlcCBtb3ZzYgkjIHJlc3RvcmUgdGFpbAotCWptcAkuTGNiY19jbGVhbnVwCisuTGNiY19mYXN0X2NsZWFudXA6CisJY21wbAlcJDAsJG1hcmsJIyB3YXMgdGhlIGtleSBzY2hlZHVsZSBjb3BpZWQ/CisJbGVhCSRhZXNfa2V5LCVyZGkKKwlqZQkuTGNiY19leGl0CisJCW1vdglcJDI0MC84LCVlY3gKKwkJeG9yCSVyYXgsJXJheAorCQkubG9uZwkweDkwQUI0OEYzCSMgcmVwIHN0b3NxCisKKwlqbXAJLkxjYmNfZXhpdAorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFNMT1cgUk9VVElORSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCisuYWxpZ24JMTYKKy5MY2JjX3Nsb3dfcHJvbG9ndWU6CisJIyBhbGxvY2F0ZSBhbGlnbmVkIHN0YWNrIGZyYW1lLi4uCisJbGVhCS04OCglcnNwKSwlcmJwCisJYW5kCVwkLTY0LCVyYnAKKwkjIC4uLiBqdXN0ICJhYm92ZSIga2V5IHNjaGVkdWxlCisJbGVhCS04OC02MyglcmN4KSwlcjEwCisJc3ViCSVyYnAsJXIxMAorCW5lZwklcjEwCisJYW5kCVwkMHgzYzAsJXIxMAorCXN1YgklcjEwLCVyYnAKKworCXhjaGcJJXJzcCwlcmJwCisJI2FkZAlcJDgsJXJzcAkjIHJlc2VydmUgZm9yIHJldHVybiBhZGRyZXNzIQorCW1vdgklcmJwLCRfcnNwCSMgc2F2ZSAlcnNwCisuTGNiY19zbG93X2JvZHk6CisJI21vdgklcmRpLCRfaW5wCSMgc2F2ZSBjb3B5IG9mIGlucAorCSNtb3YJJXJzaSwkX291dAkjIHNhdmUgY29weSBvZiBvdXQKKwkjbW92CSVyZHgsJF9sZW4JIyBzYXZlIGNvcHkgb2YgbGVuCisJI21vdgklcmN4LCRfa2V5CSMgc2F2ZSBjb3B5IG9mIGtleQorCW1vdgklcjgsJF9pdnAJIyBzYXZlIGNvcHkgb2YgaXZwCisJbW92CSVyOCwlcmJwCSMgcmVhcnJhbmdlIGlucHV0IGFyZ3VtZW50cworCW1vdgklcjksJXJieAorCW1vdgklcnNpLCRvdXQKKwltb3YJJXJkaSwkaW5wCisJbW92CSVyY3gsJGtleQorCW1vdgklcmR4LCVyMTAKKworCW1vdgkyNDAoJGtleSksJWVheAorCW1vdgkka2V5LCRrZXlwCSMgc2F2ZSBrZXkgcG9pbnRlcgorCXNobAlcJDQsJWVheAorCWxlYQkoJGtleSwlcmF4KSwlcmF4CisJbW92CSVyYXgsJGtleWVuZAorCisJIyBwaWNrIFRlNCBjb3B5IHdoaWNoIGNhbid0ICJvdmVybGFwIiB3aXRoIHN0YWNrIGZyYW1lIG9yIGtleSBzY2RlZHVsZQorCWxlYQkyMDQ4KCRzYm94KSwkc2JveAorCWxlYQk3NjgtOCglcnNwKSwlcmF4CisJc3ViCSRzYm94LCVyYXgKKwlhbmQJXCQweDMwMCwlcmF4CisJbGVhCSgkc2JveCwlcmF4KSwkc2JveAorCisJY21wCVwkMCwlcmJ4CisJamUJLkxTTE9XX0RFQ1JZUFQKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTTE9XIEVOQ1JZUFQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIworCXRlc3QJXCQtMTYsJXIxMAkJIyBjaGVjayB1cG9uIGxlbmd0aAorCW1vdgkwKCVyYnApLCRzMAkJIyBsb2FkIGl2CisJbW92CTQoJXJicCksJHMxCisJbW92CTgoJXJicCksJHMyCisJbW92CTEyKCVyYnApLCRzMworCWp6CS5MY2JjX3Nsb3dfZW5jX3RhaWwJIyBzaG9ydCBpbnB1dC4uLgorCisuYWxpZ24JNAorLkxjYmNfc2xvd19lbmNfbG9vcDoKKwkJeG9yCTAoJGlucCksJHMwCisJCXhvcgk0KCRpbnApLCRzMQorCQl4b3IJOCgkaW5wKSwkczIKKwkJeG9yCTEyKCRpbnApLCRzMworCQltb3YJJGtleXAsJGtleQkjIHJlc3RvcmUga2V5CisJCW1vdgkkaW5wLCRfaW5wCSMgc2F2ZSBpbnAKKwkJbW92CSRvdXQsJF9vdXQJIyBzYXZlIG91dAorCQltb3YJJXIxMCwkX2xlbgkjIHNhdmUgbGVuCisKKwkJY2FsbAlfeDg2XzY0X0FFU19lbmNyeXB0X2NvbXBhY3QKKworCQltb3YJJF9pbnAsJGlucAkjIHJlc3RvcmUgaW5wCisJCW1vdgkkX291dCwkb3V0CSMgcmVzdG9yZSBvdXQKKwkJbW92CSRfbGVuLCVyMTAJIyByZXN0b3JlIGxlbgorCQltb3YJJHMwLDAoJG91dCkKKwkJbW92CSRzMSw0KCRvdXQpCisJCW1vdgkkczIsOCgkb3V0KQorCQltb3YJJHMzLDEyKCRvdXQpCisKKwkJbGVhCTE2KCRpbnApLCRpbnAKKwkJbGVhCTE2KCRvdXQpLCRvdXQKKwkJc3ViCVwkMTYsJXIxMAorCQl0ZXN0CVwkLTE2LCVyMTAKKwlqbnoJLkxjYmNfc2xvd19lbmNfbG9vcAorCXRlc3QJXCQxNSwlcjEwCisJam56CS5MY2JjX3Nsb3dfZW5jX3RhaWwKKwltb3YJJF9pdnAsJXJicAkjIHJlc3RvcmUgaXZwCisJbW92CSRzMCwwKCVyYnApCSMgc2F2ZSBpdmVjCisJbW92CSRzMSw0KCVyYnApCisJbW92CSRzMiw4KCVyYnApCisJbW92CSRzMywxMiglcmJwKQorCisJam1wCS5MY2JjX2V4aXQKKworLmFsaWduCTQKKy5MY2JjX3Nsb3dfZW5jX3RhaWw6CisJbW92CSVyYXgsJXIxMQorCW1vdgklcmN4LCVyMTIKKwltb3YJJXIxMCwlcmN4CisJbW92CSRpbnAsJXJzaQorCW1vdgkkb3V0LCVyZGkKKwkubG9uZwkweDkwNjZBNEYzCQkjIHJlcCBtb3ZzYgorCW1vdglcJDE2LCVyY3gJCSMgemVybyB0YWlsCisJc3ViCSVyMTAsJXJjeAorCXhvcgklcmF4LCVyYXgKKwkubG9uZwkweDkwNjZBQUYzCQkjIHJlcCBzdG9zYgorCW1vdgkkb3V0LCRpbnAJCSMgdGhpcyBpcyBub3QgYSBtaXN0YWtlIQorCW1vdglcJDE2LCVyMTAJCSMgbGVuPTE2CisJbW92CSVyMTEsJXJheAorCW1vdgklcjEyLCVyY3gKKwlqbXAJLkxjYmNfc2xvd19lbmNfbG9vcAkjIG9uZSBtb3JlIHNwaW4uLi4KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU0xPVyBERUNSWVBUIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKKy5hbGlnbgkxNgorLkxTTE9XX0RFQ1JZUFQ6CisJc2hyCVwkMywlcmF4CisJYWRkCSVyYXgsJHNib3gJCSMgcmVjYWxsICJtYWdpYyIgY29uc3RhbnRzIQorCisJbW92CTAoJXJicCksJXIxMQkJIyBjb3B5IGl2IHRvIHN0YWNrCisJbW92CTgoJXJicCksJXIxMgorCW1vdgklcjExLDArJGl2ZWMKKwltb3YJJXIxMiw4KyRpdmVjCisKKy5hbGlnbgk0CisuTGNiY19zbG93X2RlY19sb29wOgorCQltb3YJMCgkaW5wKSwkczAJIyBsb2FkIGlucHV0CisJCW1vdgk0KCRpbnApLCRzMQorCQltb3YJOCgkaW5wKSwkczIKKwkJbW92CTEyKCRpbnApLCRzMworCQltb3YJJGtleXAsJGtleQkjIHJlc3RvcmUga2V5CisJCW1vdgkkaW5wLCRfaW5wCSMgc2F2ZSBpbnAKKwkJbW92CSRvdXQsJF9vdXQJIyBzYXZlIG91dAorCQltb3YJJXIxMCwkX2xlbgkjIHNhdmUgbGVuCisKKwkJY2FsbAlfeDg2XzY0X0FFU19kZWNyeXB0X2NvbXBhY3QKKworCQltb3YJJF9pbnAsJGlucAkjIHJlc3RvcmUgaW5wCisJCW1vdgkkX291dCwkb3V0CSMgcmVzdG9yZSBvdXQKKwkJbW92CSRfbGVuLCVyMTAKKwkJeG9yCTArJGl2ZWMsJHMwCisJCXhvcgk0KyRpdmVjLCRzMQorCQl4b3IJOCskaXZlYywkczIKKwkJeG9yCTEyKyRpdmVjLCRzMworCisJCW1vdgkwKCRpbnApLCVyMTEJIyBsb2FkIGlucHV0CisJCW1vdgk4KCRpbnApLCVyMTIKKwkJc3ViCVwkMTYsJXIxMAorCQlqYwkuTGNiY19zbG93X2RlY19wYXJ0aWFsCisJCWp6CS5MY2JjX3Nsb3dfZGVjX2RvbmUKKworCQltb3YJJXIxMSwwKyRpdmVjCSMgY29weSBpbnB1dCB0byBpdgorCQltb3YJJXIxMiw4KyRpdmVjCisKKwkJbW92CSRzMCwwKCRvdXQpCSMgc2F2ZSBvdXRwdXQgW2NhbiB6YXAgaW5wdXRdCisJCW1vdgkkczEsNCgkb3V0KQorCQltb3YJJHMyLDgoJG91dCkKKwkJbW92CSRzMywxMigkb3V0KQorCisJCWxlYQkxNigkaW5wKSwkaW5wCisJCWxlYQkxNigkb3V0KSwkb3V0CisJam1wCS5MY2JjX3Nsb3dfZGVjX2xvb3AKKy5MY2JjX3Nsb3dfZGVjX2RvbmU6CisJbW92CSRfaXZwLCVyZGkKKwltb3YJJXIxMSwwKCVyZGkpCQkjIGNvcHkgaXYgYmFjayB0byB1c2VyCisJbW92CSVyMTIsOCglcmRpKQorCisJbW92CSRzMCwwKCRvdXQpCQkjIHNhdmUgb3V0cHV0IFtjYW4gemFwIGlucHV0XQorCW1vdgkkczEsNCgkb3V0KQorCW1vdgkkczIsOCgkb3V0KQorCW1vdgkkczMsMTIoJG91dCkKKworCWptcAkuTGNiY19leGl0CisKKy5hbGlnbgk0CisuTGNiY19zbG93X2RlY19wYXJ0aWFsOgorCW1vdgkkX2l2cCwlcmRpCisJbW92CSVyMTEsMCglcmRpKQkJIyBjb3B5IGl2IGJhY2sgdG8gdXNlcgorCW1vdgklcjEyLDgoJXJkaSkKKworCW1vdgkkczAsMCskaXZlYwkJIyBzYXZlIG91dHB1dCB0byBzdGFjaworCW1vdgkkczEsNCskaXZlYworCW1vdgkkczIsOCskaXZlYworCW1vdgkkczMsMTIrJGl2ZWMKKworCW1vdgkkb3V0LCVyZGkKKwlsZWEJJGl2ZWMsJXJzaQorCWxlYQkxNiglcjEwKSwlcmN4CisJLmxvbmcJMHg5MDY2QTRGMwkjIHJlcCBtb3ZzYgorCWptcAkuTGNiY19leGl0CisKKy5hbGlnbgkxNgorLkxjYmNfZXhpdDoKKwltb3YJJF9yc3AsJXJzaQorCW1vdgkoJXJzaSksJXIxNQorCW1vdgk4KCVyc2kpLCVyMTQKKwltb3YJMTYoJXJzaSksJXIxMworCW1vdgkyNCglcnNpKSwlcjEyCisJbW92CTMyKCVyc2kpLCVyYnAKKwltb3YJNDAoJXJzaSksJXJieAorCWxlYQk0OCglcnNpKSwlcnNwCisuTGNiY19wb3BmcToKKwlwb3BmcQorLkxjYmNfZXBpbG9ndWU6CisJcmV0CiAuc2l6ZQlBRVNfY2JjX2VuY3J5cHQsLi1BRVNfY2JjX2VuY3J5cHQKIF9fXwogfQogCiAkY29kZS49PDxfX187Ci0uZ2xvYmwJQUVTX1RlCiAuYWxpZ24JNjQKLUFFU19UZToKKy5MQUVTX1RlOgogX19fCiAJJl9kYXRhX3dvcmQoMHhhNTYzNjNjNiwgMHg4NDdjN2NmOCwgMHg5OTc3NzdlZSwgMHg4ZDdiN2JmNik7CiAJJl9kYXRhX3dvcmQoMHgwZGYyZjJmZiwgMHhiZDZiNmJkNiwgMHhiMTZmNmZkZSwgMHg1NGM1YzU5MSk7CkBAIC0xNDYzLDE2ICsyMTY5LDE0OSBAQAogCSZfZGF0YV93b3JkKDB4ZGFiZmJmNjUsIDB4MzFlNmU2ZDcsIDB4YzY0MjQyODQsIDB4Yjg2ODY4ZDApOwogCSZfZGF0YV93b3JkKDB4YzM0MTQxODIsIDB4YjA5OTk5MjksIDB4NzcyZDJkNWEsIDB4MTEwZjBmMWUpOwogCSZfZGF0YV93b3JkKDB4Y2JiMGIwN2IsIDB4ZmM1NDU0YTgsIDB4ZDZiYmJiNmQsIDB4M2ExNjE2MmMpOworCisjVGU0CSMgZm91ciBjb3BpZXMgb2YgVGU0IHRvIGNob29zZSBmcm9tIHRvIGF2b2lkIEwxIGFsaWFzaW5nCisJJmRhdGFfYnl0ZSgweDYzLCAweDdjLCAweDc3LCAweDdiLCAweGYyLCAweDZiLCAweDZmLCAweGM1KTsKKwkmZGF0YV9ieXRlKDB4MzAsIDB4MDEsIDB4NjcsIDB4MmIsIDB4ZmUsIDB4ZDcsIDB4YWIsIDB4NzYpOworCSZkYXRhX2J5dGUoMHhjYSwgMHg4MiwgMHhjOSwgMHg3ZCwgMHhmYSwgMHg1OSwgMHg0NywgMHhmMCk7CisJJmRhdGFfYnl0ZSgweGFkLCAweGQ0LCAweGEyLCAweGFmLCAweDljLCAweGE0LCAweDcyLCAweGMwKTsKKwkmZGF0YV9ieXRlKDB4YjcsIDB4ZmQsIDB4OTMsIDB4MjYsIDB4MzYsIDB4M2YsIDB4ZjcsIDB4Y2MpOworCSZkYXRhX2J5dGUoMHgzNCwgMHhhNSwgMHhlNSwgMHhmMSwgMHg3MSwgMHhkOCwgMHgzMSwgMHgxNSk7CisJJmRhdGFfYnl0ZSgweDA0LCAweGM3LCAweDIzLCAweGMzLCAweDE4LCAweDk2LCAweDA1LCAweDlhKTsKKwkmZGF0YV9ieXRlKDB4MDcsIDB4MTIsIDB4ODAsIDB4ZTIsIDB4ZWIsIDB4MjcsIDB4YjIsIDB4NzUpOworCSZkYXRhX2J5dGUoMHgwOSwgMHg4MywgMHgyYywgMHgxYSwgMHgxYiwgMHg2ZSwgMHg1YSwgMHhhMCk7CisJJmRhdGFfYnl0ZSgweDUyLCAweDNiLCAweGQ2LCAweGIzLCAweDI5LCAweGUzLCAweDJmLCAweDg0KTsKKwkmZGF0YV9ieXRlKDB4NTMsIDB4ZDEsIDB4MDAsIDB4ZWQsIDB4MjAsIDB4ZmMsIDB4YjEsIDB4NWIpOworCSZkYXRhX2J5dGUoMHg2YSwgMHhjYiwgMHhiZSwgMHgzOSwgMHg0YSwgMHg0YywgMHg1OCwgMHhjZik7CisJJmRhdGFfYnl0ZSgweGQwLCAweGVmLCAweGFhLCAweGZiLCAweDQzLCAweDRkLCAweDMzLCAweDg1KTsKKwkmZGF0YV9ieXRlKDB4NDUsIDB4ZjksIDB4MDIsIDB4N2YsIDB4NTAsIDB4M2MsIDB4OWYsIDB4YTgpOworCSZkYXRhX2J5dGUoMHg1MSwgMHhhMywgMHg0MCwgMHg4ZiwgMHg5MiwgMHg5ZCwgMHgzOCwgMHhmNSk7CisJJmRhdGFfYnl0ZSgweGJjLCAweGI2LCAweGRhLCAweDIxLCAweDEwLCAweGZmLCAweGYzLCAweGQyKTsKKwkmZGF0YV9ieXRlKDB4Y2QsIDB4MGMsIDB4MTMsIDB4ZWMsIDB4NWYsIDB4OTcsIDB4NDQsIDB4MTcpOworCSZkYXRhX2J5dGUoMHhjNCwgMHhhNywgMHg3ZSwgMHgzZCwgMHg2NCwgMHg1ZCwgMHgxOSwgMHg3Myk7CisJJmRhdGFfYnl0ZSgweDYwLCAweDgxLCAweDRmLCAweGRjLCAweDIyLCAweDJhLCAweDkwLCAweDg4KTsKKwkmZGF0YV9ieXRlKDB4NDYsIDB4ZWUsIDB4YjgsIDB4MTQsIDB4ZGUsIDB4NWUsIDB4MGIsIDB4ZGIpOworCSZkYXRhX2J5dGUoMHhlMCwgMHgzMiwgMHgzYSwgMHgwYSwgMHg0OSwgMHgwNiwgMHgyNCwgMHg1Yyk7CisJJmRhdGFfYnl0ZSgweGMyLCAweGQzLCAweGFjLCAweDYyLCAweDkxLCAweDk1LCAweGU0LCAweDc5KTsKKwkmZGF0YV9ieXRlKDB4ZTcsIDB4YzgsIDB4MzcsIDB4NmQsIDB4OGQsIDB4ZDUsIDB4NGUsIDB4YTkpOworCSZkYXRhX2J5dGUoMHg2YywgMHg1NiwgMHhmNCwgMHhlYSwgMHg2NSwgMHg3YSwgMHhhZSwgMHgwOCk7CisJJmRhdGFfYnl0ZSgweGJhLCAweDc4LCAweDI1LCAweDJlLCAweDFjLCAweGE2LCAweGI0LCAweGM2KTsKKwkmZGF0YV9ieXRlKDB4ZTgsIDB4ZGQsIDB4NzQsIDB4MWYsIDB4NGIsIDB4YmQsIDB4OGIsIDB4OGEpOworCSZkYXRhX2J5dGUoMHg3MCwgMHgzZSwgMHhiNSwgMHg2NiwgMHg0OCwgMHgwMywgMHhmNiwgMHgwZSk7CisJJmRhdGFfYnl0ZSgweDYxLCAweDM1LCAweDU3LCAweGI5LCAweDg2LCAweGMxLCAweDFkLCAweDllKTsKKwkmZGF0YV9ieXRlKDB4ZTEsIDB4ZjgsIDB4OTgsIDB4MTEsIDB4NjksIDB4ZDksIDB4OGUsIDB4OTQpOworCSZkYXRhX2J5dGUoMHg5YiwgMHgxZSwgMHg4NywgMHhlOSwgMHhjZSwgMHg1NSwgMHgyOCwgMHhkZik7CisJJmRhdGFfYnl0ZSgweDhjLCAweGExLCAweDg5LCAweDBkLCAweGJmLCAweGU2LCAweDQyLCAweDY4KTsKKwkmZGF0YV9ieXRlKDB4NDEsIDB4OTksIDB4MmQsIDB4MGYsIDB4YjAsIDB4NTQsIDB4YmIsIDB4MTYpOworCisJJmRhdGFfYnl0ZSgweDYzLCAweDdjLCAweDc3LCAweDdiLCAweGYyLCAweDZiLCAweDZmLCAweGM1KTsKKwkmZGF0YV9ieXRlKDB4MzAsIDB4MDEsIDB4NjcsIDB4MmIsIDB4ZmUsIDB4ZDcsIDB4YWIsIDB4NzYpOworCSZkYXRhX2J5dGUoMHhjYSwgMHg4MiwgMHhjOSwgMHg3ZCwgMHhmYSwgMHg1OSwgMHg0NywgMHhmMCk7CisJJmRhdGFfYnl0ZSgweGFkLCAweGQ0LCAweGEyLCAweGFmLCAweDljLCAweGE0LCAweDcyLCAweGMwKTsKKwkmZGF0YV9ieXRlKDB4YjcsIDB4ZmQsIDB4OTMsIDB4MjYsIDB4MzYsIDB4M2YsIDB4ZjcsIDB4Y2MpOworCSZkYXRhX2J5dGUoMHgzNCwgMHhhNSwgMHhlNSwgMHhmMSwgMHg3MSwgMHhkOCwgMHgzMSwgMHgxNSk7CisJJmRhdGFfYnl0ZSgweDA0LCAweGM3LCAweDIzLCAweGMzLCAweDE4LCAweDk2LCAweDA1LCAweDlhKTsKKwkmZGF0YV9ieXRlKDB4MDcsIDB4MTIsIDB4ODAsIDB4ZTIsIDB4ZWIsIDB4MjcsIDB4YjIsIDB4NzUpOworCSZkYXRhX2J5dGUoMHgwOSwgMHg4MywgMHgyYywgMHgxYSwgMHgxYiwgMHg2ZSwgMHg1YSwgMHhhMCk7CisJJmRhdGFfYnl0ZSgweDUyLCAweDNiLCAweGQ2LCAweGIzLCAweDI5LCAweGUzLCAweDJmLCAweDg0KTsKKwkmZGF0YV9ieXRlKDB4NTMsIDB4ZDEsIDB4MDAsIDB4ZWQsIDB4MjAsIDB4ZmMsIDB4YjEsIDB4NWIpOworCSZkYXRhX2J5dGUoMHg2YSwgMHhjYiwgMHhiZSwgMHgzOSwgMHg0YSwgMHg0YywgMHg1OCwgMHhjZik7CisJJmRhdGFfYnl0ZSgweGQwLCAweGVmLCAweGFhLCAweGZiLCAweDQzLCAweDRkLCAweDMzLCAweDg1KTsKKwkmZGF0YV9ieXRlKDB4NDUsIDB4ZjksIDB4MDIsIDB4N2YsIDB4NTAsIDB4M2MsIDB4OWYsIDB4YTgpOworCSZkYXRhX2J5dGUoMHg1MSwgMHhhMywgMHg0MCwgMHg4ZiwgMHg5MiwgMHg5ZCwgMHgzOCwgMHhmNSk7CisJJmRhdGFfYnl0ZSgweGJjLCAweGI2LCAweGRhLCAweDIxLCAweDEwLCAweGZmLCAweGYzLCAweGQyKTsKKwkmZGF0YV9ieXRlKDB4Y2QsIDB4MGMsIDB4MTMsIDB4ZWMsIDB4NWYsIDB4OTcsIDB4NDQsIDB4MTcpOworCSZkYXRhX2J5dGUoMHhjNCwgMHhhNywgMHg3ZSwgMHgzZCwgMHg2NCwgMHg1ZCwgMHgxOSwgMHg3Myk7CisJJmRhdGFfYnl0ZSgweDYwLCAweDgxLCAweDRmLCAweGRjLCAweDIyLCAweDJhLCAweDkwLCAweDg4KTsKKwkmZGF0YV9ieXRlKDB4NDYsIDB4ZWUsIDB4YjgsIDB4MTQsIDB4ZGUsIDB4NWUsIDB4MGIsIDB4ZGIpOworCSZkYXRhX2J5dGUoMHhlMCwgMHgzMiwgMHgzYSwgMHgwYSwgMHg0OSwgMHgwNiwgMHgyNCwgMHg1Yyk7CisJJmRhdGFfYnl0ZSgweGMyLCAweGQzLCAweGFjLCAweDYyLCAweDkxLCAweDk1LCAweGU0LCAweDc5KTsKKwkmZGF0YV9ieXRlKDB4ZTcsIDB4YzgsIDB4MzcsIDB4NmQsIDB4OGQsIDB4ZDUsIDB4NGUsIDB4YTkpOworCSZkYXRhX2J5dGUoMHg2YywgMHg1NiwgMHhmNCwgMHhlYSwgMHg2NSwgMHg3YSwgMHhhZSwgMHgwOCk7CisJJmRhdGFfYnl0ZSgweGJhLCAweDc4LCAweDI1LCAweDJlLCAweDFjLCAweGE2LCAweGI0LCAweGM2KTsKKwkmZGF0YV9ieXRlKDB4ZTgsIDB4ZGQsIDB4NzQsIDB4MWYsIDB4NGIsIDB4YmQsIDB4OGIsIDB4OGEpOworCSZkYXRhX2J5dGUoMHg3MCwgMHgzZSwgMHhiNSwgMHg2NiwgMHg0OCwgMHgwMywgMHhmNiwgMHgwZSk7CisJJmRhdGFfYnl0ZSgweDYxLCAweDM1LCAweDU3LCAweGI5LCAweDg2LCAweGMxLCAweDFkLCAweDllKTsKKwkmZGF0YV9ieXRlKDB4ZTEsIDB4ZjgsIDB4OTgsIDB4MTEsIDB4NjksIDB4ZDksIDB4OGUsIDB4OTQpOworCSZkYXRhX2J5dGUoMHg5YiwgMHgxZSwgMHg4NywgMHhlOSwgMHhjZSwgMHg1NSwgMHgyOCwgMHhkZik7CisJJmRhdGFfYnl0ZSgweDhjLCAweGExLCAweDg5LCAweDBkLCAweGJmLCAweGU2LCAweDQyLCAweDY4KTsKKwkmZGF0YV9ieXRlKDB4NDEsIDB4OTksIDB4MmQsIDB4MGYsIDB4YjAsIDB4NTQsIDB4YmIsIDB4MTYpOworCisJJmRhdGFfYnl0ZSgweDYzLCAweDdjLCAweDc3LCAweDdiLCAweGYyLCAweDZiLCAweDZmLCAweGM1KTsKKwkmZGF0YV9ieXRlKDB4MzAsIDB4MDEsIDB4NjcsIDB4MmIsIDB4ZmUsIDB4ZDcsIDB4YWIsIDB4NzYpOworCSZkYXRhX2J5dGUoMHhjYSwgMHg4MiwgMHhjOSwgMHg3ZCwgMHhmYSwgMHg1OSwgMHg0NywgMHhmMCk7CisJJmRhdGFfYnl0ZSgweGFkLCAweGQ0LCAweGEyLCAweGFmLCAweDljLCAweGE0LCAweDcyLCAweGMwKTsKKwkmZGF0YV9ieXRlKDB4YjcsIDB4ZmQsIDB4OTMsIDB4MjYsIDB4MzYsIDB4M2YsIDB4ZjcsIDB4Y2MpOworCSZkYXRhX2J5dGUoMHgzNCwgMHhhNSwgMHhlNSwgMHhmMSwgMHg3MSwgMHhkOCwgMHgzMSwgMHgxNSk7CisJJmRhdGFfYnl0ZSgweDA0LCAweGM3LCAweDIzLCAweGMzLCAweDE4LCAweDk2LCAweDA1LCAweDlhKTsKKwkmZGF0YV9ieXRlKDB4MDcsIDB4MTIsIDB4ODAsIDB4ZTIsIDB4ZWIsIDB4MjcsIDB4YjIsIDB4NzUpOworCSZkYXRhX2J5dGUoMHgwOSwgMHg4MywgMHgyYywgMHgxYSwgMHgxYiwgMHg2ZSwgMHg1YSwgMHhhMCk7CisJJmRhdGFfYnl0ZSgweDUyLCAweDNiLCAweGQ2LCAweGIzLCAweDI5LCAweGUzLCAweDJmLCAweDg0KTsKKwkmZGF0YV9ieXRlKDB4NTMsIDB4ZDEsIDB4MDAsIDB4ZWQsIDB4MjAsIDB4ZmMsIDB4YjEsIDB4NWIpOworCSZkYXRhX2J5dGUoMHg2YSwgMHhjYiwgMHhiZSwgMHgzOSwgMHg0YSwgMHg0YywgMHg1OCwgMHhjZik7CisJJmRhdGFfYnl0ZSgweGQwLCAweGVmLCAweGFhLCAweGZiLCAweDQzLCAweDRkLCAweDMzLCAweDg1KTsKKwkmZGF0YV9ieXRlKDB4NDUsIDB4ZjksIDB4MDIsIDB4N2YsIDB4NTAsIDB4M2MsIDB4OWYsIDB4YTgpOworCSZkYXRhX2J5dGUoMHg1MSwgMHhhMywgMHg0MCwgMHg4ZiwgMHg5MiwgMHg5ZCwgMHgzOCwgMHhmNSk7CisJJmRhdGFfYnl0ZSgweGJjLCAweGI2LCAweGRhLCAweDIxLCAweDEwLCAweGZmLCAweGYzLCAweGQyKTsKKwkmZGF0YV9ieXRlKDB4Y2QsIDB4MGMsIDB4MTMsIDB4ZWMsIDB4NWYsIDB4OTcsIDB4NDQsIDB4MTcpOworCSZkYXRhX2J5dGUoMHhjNCwgMHhhNywgMHg3ZSwgMHgzZCwgMHg2NCwgMHg1ZCwgMHgxOSwgMHg3Myk7CisJJmRhdGFfYnl0ZSgweDYwLCAweDgxLCAweDRmLCAweGRjLCAweDIyLCAweDJhLCAweDkwLCAweDg4KTsKKwkmZGF0YV9ieXRlKDB4NDYsIDB4ZWUsIDB4YjgsIDB4MTQsIDB4ZGUsIDB4NWUsIDB4MGIsIDB4ZGIpOworCSZkYXRhX2J5dGUoMHhlMCwgMHgzMiwgMHgzYSwgMHgwYSwgMHg0OSwgMHgwNiwgMHgyNCwgMHg1Yyk7CisJJmRhdGFfYnl0ZSgweGMyLCAweGQzLCAweGFjLCAweDYyLCAweDkxLCAweDk1LCAweGU0LCAweDc5KTsKKwkmZGF0YV9ieXRlKDB4ZTcsIDB4YzgsIDB4MzcsIDB4NmQsIDB4OGQsIDB4ZDUsIDB4NGUsIDB4YTkpOworCSZkYXRhX2J5dGUoMHg2YywgMHg1NiwgMHhmNCwgMHhlYSwgMHg2NSwgMHg3YSwgMHhhZSwgMHgwOCk7CisJJmRhdGFfYnl0ZSgweGJhLCAweDc4LCAweDI1LCAweDJlLCAweDFjLCAweGE2LCAweGI0LCAweGM2KTsKKwkmZGF0YV9ieXRlKDB4ZTgsIDB4ZGQsIDB4NzQsIDB4MWYsIDB4NGIsIDB4YmQsIDB4OGIsIDB4OGEpOworCSZkYXRhX2J5dGUoMHg3MCwgMHgzZSwgMHhiNSwgMHg2NiwgMHg0OCwgMHgwMywgMHhmNiwgMHgwZSk7CisJJmRhdGFfYnl0ZSgweDYxLCAweDM1LCAweDU3LCAweGI5LCAweDg2LCAweGMxLCAweDFkLCAweDllKTsKKwkmZGF0YV9ieXRlKDB4ZTEsIDB4ZjgsIDB4OTgsIDB4MTEsIDB4NjksIDB4ZDksIDB4OGUsIDB4OTQpOworCSZkYXRhX2J5dGUoMHg5YiwgMHgxZSwgMHg4NywgMHhlOSwgMHhjZSwgMHg1NSwgMHgyOCwgMHhkZik7CisJJmRhdGFfYnl0ZSgweDhjLCAweGExLCAweDg5LCAweDBkLCAweGJmLCAweGU2LCAweDQyLCAweDY4KTsKKwkmZGF0YV9ieXRlKDB4NDEsIDB4OTksIDB4MmQsIDB4MGYsIDB4YjAsIDB4NTQsIDB4YmIsIDB4MTYpOworCisJJmRhdGFfYnl0ZSgweDYzLCAweDdjLCAweDc3LCAweDdiLCAweGYyLCAweDZiLCAweDZmLCAweGM1KTsKKwkmZGF0YV9ieXRlKDB4MzAsIDB4MDEsIDB4NjcsIDB4MmIsIDB4ZmUsIDB4ZDcsIDB4YWIsIDB4NzYpOworCSZkYXRhX2J5dGUoMHhjYSwgMHg4MiwgMHhjOSwgMHg3ZCwgMHhmYSwgMHg1OSwgMHg0NywgMHhmMCk7CisJJmRhdGFfYnl0ZSgweGFkLCAweGQ0LCAweGEyLCAweGFmLCAweDljLCAweGE0LCAweDcyLCAweGMwKTsKKwkmZGF0YV9ieXRlKDB4YjcsIDB4ZmQsIDB4OTMsIDB4MjYsIDB4MzYsIDB4M2YsIDB4ZjcsIDB4Y2MpOworCSZkYXRhX2J5dGUoMHgzNCwgMHhhNSwgMHhlNSwgMHhmMSwgMHg3MSwgMHhkOCwgMHgzMSwgMHgxNSk7CisJJmRhdGFfYnl0ZSgweDA0LCAweGM3LCAweDIzLCAweGMzLCAweDE4LCAweDk2LCAweDA1LCAweDlhKTsKKwkmZGF0YV9ieXRlKDB4MDcsIDB4MTIsIDB4ODAsIDB4ZTIsIDB4ZWIsIDB4MjcsIDB4YjIsIDB4NzUpOworCSZkYXRhX2J5dGUoMHgwOSwgMHg4MywgMHgyYywgMHgxYSwgMHgxYiwgMHg2ZSwgMHg1YSwgMHhhMCk7CisJJmRhdGFfYnl0ZSgweDUyLCAweDNiLCAweGQ2LCAweGIzLCAweDI5LCAweGUzLCAweDJmLCAweDg0KTsKKwkmZGF0YV9ieXRlKDB4NTMsIDB4ZDEsIDB4MDAsIDB4ZWQsIDB4MjAsIDB4ZmMsIDB4YjEsIDB4NWIpOworCSZkYXRhX2J5dGUoMHg2YSwgMHhjYiwgMHhiZSwgMHgzOSwgMHg0YSwgMHg0YywgMHg1OCwgMHhjZik7CisJJmRhdGFfYnl0ZSgweGQwLCAweGVmLCAweGFhLCAweGZiLCAweDQzLCAweDRkLCAweDMzLCAweDg1KTsKKwkmZGF0YV9ieXRlKDB4NDUsIDB4ZjksIDB4MDIsIDB4N2YsIDB4NTAsIDB4M2MsIDB4OWYsIDB4YTgpOworCSZkYXRhX2J5dGUoMHg1MSwgMHhhMywgMHg0MCwgMHg4ZiwgMHg5MiwgMHg5ZCwgMHgzOCwgMHhmNSk7CisJJmRhdGFfYnl0ZSgweGJjLCAweGI2LCAweGRhLCAweDIxLCAweDEwLCAweGZmLCAweGYzLCAweGQyKTsKKwkmZGF0YV9ieXRlKDB4Y2QsIDB4MGMsIDB4MTMsIDB4ZWMsIDB4NWYsIDB4OTcsIDB4NDQsIDB4MTcpOworCSZkYXRhX2J5dGUoMHhjNCwgMHhhNywgMHg3ZSwgMHgzZCwgMHg2NCwgMHg1ZCwgMHgxOSwgMHg3Myk7CisJJmRhdGFfYnl0ZSgweDYwLCAweDgxLCAweDRmLCAweGRjLCAweDIyLCAweDJhLCAweDkwLCAweDg4KTsKKwkmZGF0YV9ieXRlKDB4NDYsIDB4ZWUsIDB4YjgsIDB4MTQsIDB4ZGUsIDB4NWUsIDB4MGIsIDB4ZGIpOworCSZkYXRhX2J5dGUoMHhlMCwgMHgzMiwgMHgzYSwgMHgwYSwgMHg0OSwgMHgwNiwgMHgyNCwgMHg1Yyk7CisJJmRhdGFfYnl0ZSgweGMyLCAweGQzLCAweGFjLCAweDYyLCAweDkxLCAweDk1LCAweGU0LCAweDc5KTsKKwkmZGF0YV9ieXRlKDB4ZTcsIDB4YzgsIDB4MzcsIDB4NmQsIDB4OGQsIDB4ZDUsIDB4NGUsIDB4YTkpOworCSZkYXRhX2J5dGUoMHg2YywgMHg1NiwgMHhmNCwgMHhlYSwgMHg2NSwgMHg3YSwgMHhhZSwgMHgwOCk7CisJJmRhdGFfYnl0ZSgweGJhLCAweDc4LCAweDI1LCAweDJlLCAweDFjLCAweGE2LCAweGI0LCAweGM2KTsKKwkmZGF0YV9ieXRlKDB4ZTgsIDB4ZGQsIDB4NzQsIDB4MWYsIDB4NGIsIDB4YmQsIDB4OGIsIDB4OGEpOworCSZkYXRhX2J5dGUoMHg3MCwgMHgzZSwgMHhiNSwgMHg2NiwgMHg0OCwgMHgwMywgMHhmNiwgMHgwZSk7CisJJmRhdGFfYnl0ZSgweDYxLCAweDM1LCAweDU3LCAweGI5LCAweDg2LCAweGMxLCAweDFkLCAweDllKTsKKwkmZGF0YV9ieXRlKDB4ZTEsIDB4ZjgsIDB4OTgsIDB4MTEsIDB4NjksIDB4ZDksIDB4OGUsIDB4OTQpOworCSZkYXRhX2J5dGUoMHg5YiwgMHgxZSwgMHg4NywgMHhlOSwgMHhjZSwgMHg1NSwgMHgyOCwgMHhkZik7CisJJmRhdGFfYnl0ZSgweDhjLCAweGExLCAweDg5LCAweDBkLCAweGJmLCAweGU2LCAweDQyLCAweDY4KTsKKwkmZGF0YV9ieXRlKDB4NDEsIDB4OTksIDB4MmQsIDB4MGYsIDB4YjAsIDB4NTQsIDB4YmIsIDB4MTYpOwogI3Jjb246CiAkY29kZS49PDxfX187CiAJLmxvbmcJMHgwMDAwMDAwMSwgMHgwMDAwMDAwMiwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwOAogCS5sb25nCTB4MDAwMDAwMTAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwNDAsIDB4MDAwMDAwODAKLQkubG9uZwkweDAwMDAwMDFiLCAweDAwMDAwMDM2LCAwLCAwLCAwLCAwLCAwLCAwCisJLmxvbmcJMHgwMDAwMDAxYiwgMHgwMDAwMDAzNiwgMHg4MDgwODA4MCwgMHg4MDgwODA4MAorCS5sb25nCTB4ZmVmZWZlZmUsIDB4ZmVmZWZlZmUsIDB4MWIxYjFiMWIsIDB4MWIxYjFiMWIKIF9fXwogJGNvZGUuPTw8X19fOwotLmdsb2JsCUFFU19UZAogLmFsaWduCTY0Ci1BRVNfVGQ6CisuTEFFU19UZDoKIF9fXwogCSZfZGF0YV93b3JkKDB4NTBhN2Y0NTEsIDB4NTM2NTQxN2UsIDB4YzNhNDE3MWEsIDB4OTY1ZTI3M2EpOwogCSZfZGF0YV93b3JkKDB4Y2I2YmFiM2IsIDB4ZjE0NTlkMWYsIDB4YWI1OGZhYWMsIDB4OTMwM2UzNGIpOwpAQCAtMTUzOCw3ICsyMzc3LDggQEAKIAkmX2RhdGFfd29yZCgweDcyYzMxZDE2LCAweDBjMjVlMmJjLCAweDhiNDkzYzI4LCAweDQxOTUwZGZmKTsKIAkmX2RhdGFfd29yZCgweDcxMDFhODM5LCAweGRlYjMwYzA4LCAweDljZTRiNGQ4LCAweDkwYzE1NjY0KTsKIAkmX2RhdGFfd29yZCgweDYxODRjYjdiLCAweDcwYjYzMmQ1LCAweDc0NWM2YzQ4LCAweDQyNTdiOGQwKTsKLSNUZDQ6CisKKyNUZDQ6CSMgZm91ciBjb3BpZXMgb2YgVGQ0IHRvIGNob29zZSBmcm9tIHRvIGF2b2lkIEwxIGFsaWFzaW5nCiAJJmRhdGFfYnl0ZSgweDUyLCAweDA5LCAweDZhLCAweGQ1LCAweDMwLCAweDM2LCAweGE1LCAweDM4KTsKIAkmZGF0YV9ieXRlKDB4YmYsIDB4NDAsIDB4YTMsIDB4OWUsIDB4ODEsIDB4ZjMsIDB4ZDcsIDB4ZmIpOwogCSZkYXRhX2J5dGUoMHg3YywgMHhlMywgMHgzOSwgMHg4MiwgMHg5YiwgMHgyZiwgMHhmZiwgMHg4Nyk7CkBAIC0xNTcxLDYgKzI0MTEsMzk2IEBACiAJJmRhdGFfYnl0ZSgweGM4LCAweGViLCAweGJiLCAweDNjLCAweDgzLCAweDUzLCAweDk5LCAweDYxKTsKIAkmZGF0YV9ieXRlKDB4MTcsIDB4MmIsIDB4MDQsIDB4N2UsIDB4YmEsIDB4NzcsIDB4ZDYsIDB4MjYpOwogCSZkYXRhX2J5dGUoMHhlMSwgMHg2OSwgMHgxNCwgMHg2MywgMHg1NSwgMHgyMSwgMHgwYywgMHg3ZCk7CiskY29kZS49PDxfX187CisJLmxvbmcJMHg4MDgwODA4MCwgMHg4MDgwODA4MCwgMHhmZWZlZmVmZSwgMHhmZWZlZmVmZQorCS5sb25nCTB4MWIxYjFiMWIsIDB4MWIxYjFiMWIsIDAsIDAKK19fXworCSZkYXRhX2J5dGUoMHg1MiwgMHgwOSwgMHg2YSwgMHhkNSwgMHgzMCwgMHgzNiwgMHhhNSwgMHgzOCk7CisJJmRhdGFfYnl0ZSgweGJmLCAweDQwLCAweGEzLCAweDllLCAweDgxLCAweGYzLCAweGQ3LCAweGZiKTsKKwkmZGF0YV9ieXRlKDB4N2MsIDB4ZTMsIDB4MzksIDB4ODIsIDB4OWIsIDB4MmYsIDB4ZmYsIDB4ODcpOworCSZkYXRhX2J5dGUoMHgzNCwgMHg4ZSwgMHg0MywgMHg0NCwgMHhjNCwgMHhkZSwgMHhlOSwgMHhjYik7CisJJmRhdGFfYnl0ZSgweDU0LCAweDdiLCAweDk0LCAweDMyLCAweGE2LCAweGMyLCAweDIzLCAweDNkKTsKKwkmZGF0YV9ieXRlKDB4ZWUsIDB4NGMsIDB4OTUsIDB4MGIsIDB4NDIsIDB4ZmEsIDB4YzMsIDB4NGUpOworCSZkYXRhX2J5dGUoMHgwOCwgMHgyZSwgMHhhMSwgMHg2NiwgMHgyOCwgMHhkOSwgMHgyNCwgMHhiMik7CisJJmRhdGFfYnl0ZSgweDc2LCAweDViLCAweGEyLCAweDQ5LCAweDZkLCAweDhiLCAweGQxLCAweDI1KTsKKwkmZGF0YV9ieXRlKDB4NzIsIDB4ZjgsIDB4ZjYsIDB4NjQsIDB4ODYsIDB4NjgsIDB4OTgsIDB4MTYpOworCSZkYXRhX2J5dGUoMHhkNCwgMHhhNCwgMHg1YywgMHhjYywgMHg1ZCwgMHg2NSwgMHhiNiwgMHg5Mik7CisJJmRhdGFfYnl0ZSgweDZjLCAweDcwLCAweDQ4LCAweDUwLCAweGZkLCAweGVkLCAweGI5LCAweGRhKTsKKwkmZGF0YV9ieXRlKDB4NWUsIDB4MTUsIDB4NDYsIDB4NTcsIDB4YTcsIDB4OGQsIDB4OWQsIDB4ODQpOworCSZkYXRhX2J5dGUoMHg5MCwgMHhkOCwgMHhhYiwgMHgwMCwgMHg4YywgMHhiYywgMHhkMywgMHgwYSk7CisJJmRhdGFfYnl0ZSgweGY3LCAweGU0LCAweDU4LCAweDA1LCAweGI4LCAweGIzLCAweDQ1LCAweDA2KTsKKwkmZGF0YV9ieXRlKDB4ZDAsIDB4MmMsIDB4MWUsIDB4OGYsIDB4Y2EsIDB4M2YsIDB4MGYsIDB4MDIpOworCSZkYXRhX2J5dGUoMHhjMSwgMHhhZiwgMHhiZCwgMHgwMywgMHgwMSwgMHgxMywgMHg4YSwgMHg2Yik7CisJJmRhdGFfYnl0ZSgweDNhLCAweDkxLCAweDExLCAweDQxLCAweDRmLCAweDY3LCAweGRjLCAweGVhKTsKKwkmZGF0YV9ieXRlKDB4OTcsIDB4ZjIsIDB4Y2YsIDB4Y2UsIDB4ZjAsIDB4YjQsIDB4ZTYsIDB4NzMpOworCSZkYXRhX2J5dGUoMHg5NiwgMHhhYywgMHg3NCwgMHgyMiwgMHhlNywgMHhhZCwgMHgzNSwgMHg4NSk7CisJJmRhdGFfYnl0ZSgweGUyLCAweGY5LCAweDM3LCAweGU4LCAweDFjLCAweDc1LCAweGRmLCAweDZlKTsKKwkmZGF0YV9ieXRlKDB4NDcsIDB4ZjEsIDB4MWEsIDB4NzEsIDB4MWQsIDB4MjksIDB4YzUsIDB4ODkpOworCSZkYXRhX2J5dGUoMHg2ZiwgMHhiNywgMHg2MiwgMHgwZSwgMHhhYSwgMHgxOCwgMHhiZSwgMHgxYik7CisJJmRhdGFfYnl0ZSgweGZjLCAweDU2LCAweDNlLCAweDRiLCAweGM2LCAweGQyLCAweDc5LCAweDIwKTsKKwkmZGF0YV9ieXRlKDB4OWEsIDB4ZGIsIDB4YzAsIDB4ZmUsIDB4NzgsIDB4Y2QsIDB4NWEsIDB4ZjQpOworCSZkYXRhX2J5dGUoMHgxZiwgMHhkZCwgMHhhOCwgMHgzMywgMHg4OCwgMHgwNywgMHhjNywgMHgzMSk7CisJJmRhdGFfYnl0ZSgweGIxLCAweDEyLCAweDEwLCAweDU5LCAweDI3LCAweDgwLCAweGVjLCAweDVmKTsKKwkmZGF0YV9ieXRlKDB4NjAsIDB4NTEsIDB4N2YsIDB4YTksIDB4MTksIDB4YjUsIDB4NGEsIDB4MGQpOworCSZkYXRhX2J5dGUoMHgyZCwgMHhlNSwgMHg3YSwgMHg5ZiwgMHg5MywgMHhjOSwgMHg5YywgMHhlZik7CisJJmRhdGFfYnl0ZSgweGEwLCAweGUwLCAweDNiLCAweDRkLCAweGFlLCAweDJhLCAweGY1LCAweGIwKTsKKwkmZGF0YV9ieXRlKDB4YzgsIDB4ZWIsIDB4YmIsIDB4M2MsIDB4ODMsIDB4NTMsIDB4OTksIDB4NjEpOworCSZkYXRhX2J5dGUoMHgxNywgMHgyYiwgMHgwNCwgMHg3ZSwgMHhiYSwgMHg3NywgMHhkNiwgMHgyNik7CisJJmRhdGFfYnl0ZSgweGUxLCAweDY5LCAweDE0LCAweDYzLCAweDU1LCAweDIxLCAweDBjLCAweDdkKTsKKyRjb2RlLj08PF9fXzsKKwkubG9uZwkweDgwODA4MDgwLCAweDgwODA4MDgwLCAweGZlZmVmZWZlLCAweGZlZmVmZWZlCisJLmxvbmcJMHgxYjFiMWIxYiwgMHgxYjFiMWIxYiwgMCwgMAorX19fCisJJmRhdGFfYnl0ZSgweDUyLCAweDA5LCAweDZhLCAweGQ1LCAweDMwLCAweDM2LCAweGE1LCAweDM4KTsKKwkmZGF0YV9ieXRlKDB4YmYsIDB4NDAsIDB4YTMsIDB4OWUsIDB4ODEsIDB4ZjMsIDB4ZDcsIDB4ZmIpOworCSZkYXRhX2J5dGUoMHg3YywgMHhlMywgMHgzOSwgMHg4MiwgMHg5YiwgMHgyZiwgMHhmZiwgMHg4Nyk7CisJJmRhdGFfYnl0ZSgweDM0LCAweDhlLCAweDQzLCAweDQ0LCAweGM0LCAweGRlLCAweGU5LCAweGNiKTsKKwkmZGF0YV9ieXRlKDB4NTQsIDB4N2IsIDB4OTQsIDB4MzIsIDB4YTYsIDB4YzIsIDB4MjMsIDB4M2QpOworCSZkYXRhX2J5dGUoMHhlZSwgMHg0YywgMHg5NSwgMHgwYiwgMHg0MiwgMHhmYSwgMHhjMywgMHg0ZSk7CisJJmRhdGFfYnl0ZSgweDA4LCAweDJlLCAweGExLCAweDY2LCAweDI4LCAweGQ5LCAweDI0LCAweGIyKTsKKwkmZGF0YV9ieXRlKDB4NzYsIDB4NWIsIDB4YTIsIDB4NDksIDB4NmQsIDB4OGIsIDB4ZDEsIDB4MjUpOworCSZkYXRhX2J5dGUoMHg3MiwgMHhmOCwgMHhmNiwgMHg2NCwgMHg4NiwgMHg2OCwgMHg5OCwgMHgxNik7CisJJmRhdGFfYnl0ZSgweGQ0LCAweGE0LCAweDVjLCAweGNjLCAweDVkLCAweDY1LCAweGI2LCAweDkyKTsKKwkmZGF0YV9ieXRlKDB4NmMsIDB4NzAsIDB4NDgsIDB4NTAsIDB4ZmQsIDB4ZWQsIDB4YjksIDB4ZGEpOworCSZkYXRhX2J5dGUoMHg1ZSwgMHgxNSwgMHg0NiwgMHg1NywgMHhhNywgMHg4ZCwgMHg5ZCwgMHg4NCk7CisJJmRhdGFfYnl0ZSgweDkwLCAweGQ4LCAweGFiLCAweDAwLCAweDhjLCAweGJjLCAweGQzLCAweDBhKTsKKwkmZGF0YV9ieXRlKDB4ZjcsIDB4ZTQsIDB4NTgsIDB4MDUsIDB4YjgsIDB4YjMsIDB4NDUsIDB4MDYpOworCSZkYXRhX2J5dGUoMHhkMCwgMHgyYywgMHgxZSwgMHg4ZiwgMHhjYSwgMHgzZiwgMHgwZiwgMHgwMik7CisJJmRhdGFfYnl0ZSgweGMxLCAweGFmLCAweGJkLCAweDAzLCAweDAxLCAweDEzLCAweDhhLCAweDZiKTsKKwkmZGF0YV9ieXRlKDB4M2EsIDB4OTEsIDB4MTEsIDB4NDEsIDB4NGYsIDB4NjcsIDB4ZGMsIDB4ZWEpOworCSZkYXRhX2J5dGUoMHg5NywgMHhmMiwgMHhjZiwgMHhjZSwgMHhmMCwgMHhiNCwgMHhlNiwgMHg3Myk7CisJJmRhdGFfYnl0ZSgweDk2LCAweGFjLCAweDc0LCAweDIyLCAweGU3LCAweGFkLCAweDM1LCAweDg1KTsKKwkmZGF0YV9ieXRlKDB4ZTIsIDB4ZjksIDB4MzcsIDB4ZTgsIDB4MWMsIDB4NzUsIDB4ZGYsIDB4NmUpOworCSZkYXRhX2J5dGUoMHg0NywgMHhmMSwgMHgxYSwgMHg3MSwgMHgxZCwgMHgyOSwgMHhjNSwgMHg4OSk7CisJJmRhdGFfYnl0ZSgweDZmLCAweGI3LCAweDYyLCAweDBlLCAweGFhLCAweDE4LCAweGJlLCAweDFiKTsKKwkmZGF0YV9ieXRlKDB4ZmMsIDB4NTYsIDB4M2UsIDB4NGIsIDB4YzYsIDB4ZDIsIDB4NzksIDB4MjApOworCSZkYXRhX2J5dGUoMHg5YSwgMHhkYiwgMHhjMCwgMHhmZSwgMHg3OCwgMHhjZCwgMHg1YSwgMHhmNCk7CisJJmRhdGFfYnl0ZSgweDFmLCAweGRkLCAweGE4LCAweDMzLCAweDg4LCAweDA3LCAweGM3LCAweDMxKTsKKwkmZGF0YV9ieXRlKDB4YjEsIDB4MTIsIDB4MTAsIDB4NTksIDB4MjcsIDB4ODAsIDB4ZWMsIDB4NWYpOworCSZkYXRhX2J5dGUoMHg2MCwgMHg1MSwgMHg3ZiwgMHhhOSwgMHgxOSwgMHhiNSwgMHg0YSwgMHgwZCk7CisJJmRhdGFfYnl0ZSgweDJkLCAweGU1LCAweDdhLCAweDlmLCAweDkzLCAweGM5LCAweDljLCAweGVmKTsKKwkmZGF0YV9ieXRlKDB4YTAsIDB4ZTAsIDB4M2IsIDB4NGQsIDB4YWUsIDB4MmEsIDB4ZjUsIDB4YjApOworCSZkYXRhX2J5dGUoMHhjOCwgMHhlYiwgMHhiYiwgMHgzYywgMHg4MywgMHg1MywgMHg5OSwgMHg2MSk7CisJJmRhdGFfYnl0ZSgweDE3LCAweDJiLCAweDA0LCAweDdlLCAweGJhLCAweDc3LCAweGQ2LCAweDI2KTsKKwkmZGF0YV9ieXRlKDB4ZTEsIDB4NjksIDB4MTQsIDB4NjMsIDB4NTUsIDB4MjEsIDB4MGMsIDB4N2QpOworJGNvZGUuPTw8X19fOworCS5sb25nCTB4ODA4MDgwODAsIDB4ODA4MDgwODAsIDB4ZmVmZWZlZmUsIDB4ZmVmZWZlZmUKKwkubG9uZwkweDFiMWIxYjFiLCAweDFiMWIxYjFiLCAwLCAwCitfX18KKwkmZGF0YV9ieXRlKDB4NTIsIDB4MDksIDB4NmEsIDB4ZDUsIDB4MzAsIDB4MzYsIDB4YTUsIDB4MzgpOworCSZkYXRhX2J5dGUoMHhiZiwgMHg0MCwgMHhhMywgMHg5ZSwgMHg4MSwgMHhmMywgMHhkNywgMHhmYik7CisJJmRhdGFfYnl0ZSgweDdjLCAweGUzLCAweDM5LCAweDgyLCAweDliLCAweDJmLCAweGZmLCAweDg3KTsKKwkmZGF0YV9ieXRlKDB4MzQsIDB4OGUsIDB4NDMsIDB4NDQsIDB4YzQsIDB4ZGUsIDB4ZTksIDB4Y2IpOworCSZkYXRhX2J5dGUoMHg1NCwgMHg3YiwgMHg5NCwgMHgzMiwgMHhhNiwgMHhjMiwgMHgyMywgMHgzZCk7CisJJmRhdGFfYnl0ZSgweGVlLCAweDRjLCAweDk1LCAweDBiLCAweDQyLCAweGZhLCAweGMzLCAweDRlKTsKKwkmZGF0YV9ieXRlKDB4MDgsIDB4MmUsIDB4YTEsIDB4NjYsIDB4MjgsIDB4ZDksIDB4MjQsIDB4YjIpOworCSZkYXRhX2J5dGUoMHg3NiwgMHg1YiwgMHhhMiwgMHg0OSwgMHg2ZCwgMHg4YiwgMHhkMSwgMHgyNSk7CisJJmRhdGFfYnl0ZSgweDcyLCAweGY4LCAweGY2LCAweDY0LCAweDg2LCAweDY4LCAweDk4LCAweDE2KTsKKwkmZGF0YV9ieXRlKDB4ZDQsIDB4YTQsIDB4NWMsIDB4Y2MsIDB4NWQsIDB4NjUsIDB4YjYsIDB4OTIpOworCSZkYXRhX2J5dGUoMHg2YywgMHg3MCwgMHg0OCwgMHg1MCwgMHhmZCwgMHhlZCwgMHhiOSwgMHhkYSk7CisJJmRhdGFfYnl0ZSgweDVlLCAweDE1LCAweDQ2LCAweDU3LCAweGE3LCAweDhkLCAweDlkLCAweDg0KTsKKwkmZGF0YV9ieXRlKDB4OTAsIDB4ZDgsIDB4YWIsIDB4MDAsIDB4OGMsIDB4YmMsIDB4ZDMsIDB4MGEpOworCSZkYXRhX2J5dGUoMHhmNywgMHhlNCwgMHg1OCwgMHgwNSwgMHhiOCwgMHhiMywgMHg0NSwgMHgwNik7CisJJmRhdGFfYnl0ZSgweGQwLCAweDJjLCAweDFlLCAweDhmLCAweGNhLCAweDNmLCAweDBmLCAweDAyKTsKKwkmZGF0YV9ieXRlKDB4YzEsIDB4YWYsIDB4YmQsIDB4MDMsIDB4MDEsIDB4MTMsIDB4OGEsIDB4NmIpOworCSZkYXRhX2J5dGUoMHgzYSwgMHg5MSwgMHgxMSwgMHg0MSwgMHg0ZiwgMHg2NywgMHhkYywgMHhlYSk7CisJJmRhdGFfYnl0ZSgweDk3LCAweGYyLCAweGNmLCAweGNlLCAweGYwLCAweGI0LCAweGU2LCAweDczKTsKKwkmZGF0YV9ieXRlKDB4OTYsIDB4YWMsIDB4NzQsIDB4MjIsIDB4ZTcsIDB4YWQsIDB4MzUsIDB4ODUpOworCSZkYXRhX2J5dGUoMHhlMiwgMHhmOSwgMHgzNywgMHhlOCwgMHgxYywgMHg3NSwgMHhkZiwgMHg2ZSk7CisJJmRhdGFfYnl0ZSgweDQ3LCAweGYxLCAweDFhLCAweDcxLCAweDFkLCAweDI5LCAweGM1LCAweDg5KTsKKwkmZGF0YV9ieXRlKDB4NmYsIDB4YjcsIDB4NjIsIDB4MGUsIDB4YWEsIDB4MTgsIDB4YmUsIDB4MWIpOworCSZkYXRhX2J5dGUoMHhmYywgMHg1NiwgMHgzZSwgMHg0YiwgMHhjNiwgMHhkMiwgMHg3OSwgMHgyMCk7CisJJmRhdGFfYnl0ZSgweDlhLCAweGRiLCAweGMwLCAweGZlLCAweDc4LCAweGNkLCAweDVhLCAweGY0KTsKKwkmZGF0YV9ieXRlKDB4MWYsIDB4ZGQsIDB4YTgsIDB4MzMsIDB4ODgsIDB4MDcsIDB4YzcsIDB4MzEpOworCSZkYXRhX2J5dGUoMHhiMSwgMHgxMiwgMHgxMCwgMHg1OSwgMHgyNywgMHg4MCwgMHhlYywgMHg1Zik7CisJJmRhdGFfYnl0ZSgweDYwLCAweDUxLCAweDdmLCAweGE5LCAweDE5LCAweGI1LCAweDRhLCAweDBkKTsKKwkmZGF0YV9ieXRlKDB4MmQsIDB4ZTUsIDB4N2EsIDB4OWYsIDB4OTMsIDB4YzksIDB4OWMsIDB4ZWYpOworCSZkYXRhX2J5dGUoMHhhMCwgMHhlMCwgMHgzYiwgMHg0ZCwgMHhhZSwgMHgyYSwgMHhmNSwgMHhiMCk7CisJJmRhdGFfYnl0ZSgweGM4LCAweGViLCAweGJiLCAweDNjLCAweDgzLCAweDUzLCAweDk5LCAweDYxKTsKKwkmZGF0YV9ieXRlKDB4MTcsIDB4MmIsIDB4MDQsIDB4N2UsIDB4YmEsIDB4NzcsIDB4ZDYsIDB4MjYpOworCSZkYXRhX2J5dGUoMHhlMSwgMHg2OSwgMHgxNCwgMHg2MywgMHg1NSwgMHgyMSwgMHgwYywgMHg3ZCk7CiskY29kZS49PDxfX187CisJLmxvbmcJMHg4MDgwODA4MCwgMHg4MDgwODA4MCwgMHhmZWZlZmVmZSwgMHhmZWZlZmVmZQorCS5sb25nCTB4MWIxYjFiMWIsIDB4MWIxYjFiMWIsIDAsIDAKKy5hc2NpeiAgIkFFUyBmb3IgeDg2XzY0LCBDUllQVE9HQU1TIGJ5IDxhcHByb1xAb3BlbnNzbC5vcmc+IgorLmFsaWduCTY0CitfX18KKworIyBFWENFUFRJT05fRElTUE9TSVRJT04gaGFuZGxlciAoRVhDRVBUSU9OX1JFQ09SRCAqcmVjLFVMT05HNjQgZnJhbWUsCisjCQlDT05URVhUICpjb250ZXh0LERJU1BBVENIRVJfQ09OVEVYVCAqZGlzcCkKK2lmICgkd2luNjQpIHsKKyRyZWM9IiVyY3giOworJGZyYW1lPSIlcmR4IjsKKyRjb250ZXh0PSIlcjgiOworJGRpc3A9IiVyOSI7CisKKyRjb2RlLj08PF9fXzsKKy5leHRlcm4JX19pbXBfUnRsVmlydHVhbFVud2luZAorLnR5cGUJYmxvY2tfc2VfaGFuZGxlcixcQGFiaS1vbW5pcG90ZW50CisuYWxpZ24JMTYKK2Jsb2NrX3NlX2hhbmRsZXI6CisJcHVzaAklcnNpCisJcHVzaAklcmRpCisJcHVzaAklcmJ4CisJcHVzaAklcmJwCisJcHVzaAklcjEyCisJcHVzaAklcjEzCisJcHVzaAklcjE0CisJcHVzaAklcjE1CisJcHVzaGZxCisJc3ViCVwkNjQsJXJzcAorCisJbW92CTEyMCgkY29udGV4dCksJXJheAkjIHB1bGwgY29udGV4dC0+UmF4CisJbW92CTI0OCgkY29udGV4dCksJXJieAkjIHB1bGwgY29udGV4dC0+UmlwCisKKwltb3YJOCgkZGlzcCksJXJzaQkJIyBkaXNwLT5JbWFnZUJhc2UKKwltb3YJNTYoJGRpc3ApLCVyMTEJCSMgZGlzcC0+SGFuZGxlckRhdGEKKworCW1vdgkwKCVyMTEpLCVyMTBkCQkjIEhhbmRsZXJEYXRhWzBdCisJbGVhCSglcnNpLCVyMTApLCVyMTAJIyBwcm9sb2d1ZSBsYWJlbAorCWNtcAklcjEwLCVyYngJCSMgY29udGV4dC0+UmlwPHByb2xvZ3VlIGxhYmVsCisJamIJLkxpbl9ibG9ja19wcm9sb2d1ZQorCisJbW92CTE1MigkY29udGV4dCksJXJheAkjIHB1bGwgY29udGV4dC0+UnNwCisKKwltb3YJNCglcjExKSwlcjEwZAkJIyBIYW5kbGVyRGF0YVsxXQorCWxlYQkoJXJzaSwlcjEwKSwlcjEwCSMgZXBpbG9ndWUgbGFiZWwKKwljbXAJJXIxMCwlcmJ4CQkjIGNvbnRleHQtPlJpcD49ZXBpbG9ndWUgbGFiZWwKKwlqYWUJLkxpbl9ibG9ja19wcm9sb2d1ZQorCisJbW92CTI0KCVyYXgpLCVyYXgJCSMgcHVsbCBzYXZlZCByZWFsIHN0YWNrIHBvaW50ZXIKKwlsZWEJNDgoJXJheCksJXJheAkJIyBhZGp1c3QuLi4KKworCW1vdgktOCglcmF4KSwlcmJ4CisJbW92CS0xNiglcmF4KSwlcmJwCisJbW92CS0yNCglcmF4KSwlcjEyCisJbW92CS0zMiglcmF4KSwlcjEzCisJbW92CS00MCglcmF4KSwlcjE0CisJbW92CS00OCglcmF4KSwlcjE1CisJbW92CSVyYngsMTQ0KCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UmJ4CisJbW92CSVyYnAsMTYwKCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UmJwCisJbW92CSVyMTIsMjE2KCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UjEyCisJbW92CSVyMTMsMjI0KCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UjEzCisJbW92CSVyMTQsMjMyKCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UjE0CisJbW92CSVyMTUsMjQwKCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UjE1CisKKy5MaW5fYmxvY2tfcHJvbG9ndWU6CisJbW92CTgoJXJheCksJXJkaQorCW1vdgkxNiglcmF4KSwlcnNpCisJbW92CSVyYXgsMTUyKCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UnNwCisJbW92CSVyc2ksMTY4KCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UnNpCisJbW92CSVyZGksMTc2KCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UmRpCisKKwlqbXAJLkxjb21tb25fc2VoX2V4aXQKKy5zaXplCWJsb2NrX3NlX2hhbmRsZXIsLi1ibG9ja19zZV9oYW5kbGVyCisKKy50eXBlCWtleV9zZV9oYW5kbGVyLFxAYWJpLW9tbmlwb3RlbnQKKy5hbGlnbgkxNgora2V5X3NlX2hhbmRsZXI6CisJcHVzaAklcnNpCisJcHVzaAklcmRpCisJcHVzaAklcmJ4CisJcHVzaAklcmJwCisJcHVzaAklcjEyCisJcHVzaAklcjEzCisJcHVzaAklcjE0CisJcHVzaAklcjE1CisJcHVzaGZxCisJc3ViCVwkNjQsJXJzcAorCisJbW92CTEyMCgkY29udGV4dCksJXJheAkjIHB1bGwgY29udGV4dC0+UmF4CisJbW92CTI0OCgkY29udGV4dCksJXJieAkjIHB1bGwgY29udGV4dC0+UmlwCisKKwltb3YJOCgkZGlzcCksJXJzaQkJIyBkaXNwLT5JbWFnZUJhc2UKKwltb3YJNTYoJGRpc3ApLCVyMTEJCSMgZGlzcC0+SGFuZGxlckRhdGEKKworCW1vdgkwKCVyMTEpLCVyMTBkCQkjIEhhbmRsZXJEYXRhWzBdCisJbGVhCSglcnNpLCVyMTApLCVyMTAJIyBwcm9sb2d1ZSBsYWJlbAorCWNtcAklcjEwLCVyYngJCSMgY29udGV4dC0+UmlwPHByb2xvZ3VlIGxhYmVsCisJamIJLkxpbl9rZXlfcHJvbG9ndWUKKworCW1vdgkxNTIoJGNvbnRleHQpLCVyYXgJIyBwdWxsIGNvbnRleHQtPlJzcAorCisJbW92CTQoJXIxMSksJXIxMGQJCSMgSGFuZGxlckRhdGFbMV0KKwlsZWEJKCVyc2ksJXIxMCksJXIxMAkjIGVwaWxvZ3VlIGxhYmVsCisJY21wCSVyMTAsJXJieAkJIyBjb250ZXh0LT5SaXA+PWVwaWxvZ3VlIGxhYmVsCisJamFlCS5MaW5fa2V5X3Byb2xvZ3VlCisKKwlsZWEJNTYoJXJheCksJXJheAorCisJbW92CS04KCVyYXgpLCVyYngKKwltb3YJLTE2KCVyYXgpLCVyYnAKKwltb3YJLTI0KCVyYXgpLCVyMTIKKwltb3YJLTMyKCVyYXgpLCVyMTMKKwltb3YJLTQwKCVyYXgpLCVyMTQKKwltb3YJLTQ4KCVyYXgpLCVyMTUKKwltb3YJJXJieCwxNDQoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SYngKKwltb3YJJXJicCwxNjAoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SYnAKKwltb3YJJXIxMiwyMTYoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SMTIKKwltb3YJJXIxMywyMjQoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SMTMKKwltb3YJJXIxNCwyMzIoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SMTQKKwltb3YJJXIxNSwyNDAoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SMTUKKworLkxpbl9rZXlfcHJvbG9ndWU6CisJbW92CTgoJXJheCksJXJkaQorCW1vdgkxNiglcmF4KSwlcnNpCisJbW92CSVyYXgsMTUyKCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UnNwCisJbW92CSVyc2ksMTY4KCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UnNpCisJbW92CSVyZGksMTc2KCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UmRpCisKKwlqbXAJLkxjb21tb25fc2VoX2V4aXQKKy5zaXplCWtleV9zZV9oYW5kbGVyLC4ta2V5X3NlX2hhbmRsZXIKKworLnR5cGUJY2JjX3NlX2hhbmRsZXIsXEBhYmktb21uaXBvdGVudAorLmFsaWduCTE2CitjYmNfc2VfaGFuZGxlcjoKKwlwdXNoCSVyc2kKKwlwdXNoCSVyZGkKKwlwdXNoCSVyYngKKwlwdXNoCSVyYnAKKwlwdXNoCSVyMTIKKwlwdXNoCSVyMTMKKwlwdXNoCSVyMTQKKwlwdXNoCSVyMTUKKwlwdXNoZnEKKwlzdWIJXCQ2NCwlcnNwCisKKwltb3YJMTIwKCRjb250ZXh0KSwlcmF4CSMgcHVsbCBjb250ZXh0LT5SYXgKKwltb3YJMjQ4KCRjb250ZXh0KSwlcmJ4CSMgcHVsbCBjb250ZXh0LT5SaXAKKworCWxlYQkuTGNiY19wcm9sb2d1ZSglcmlwKSwlcjEwCisJY21wCSVyMTAsJXJieAkJIyBjb250ZXh0LT5SaXA8LkxjYmNfcHJvbG9ndWUKKwlqYgkuTGluX2NiY19wcm9sb2d1ZQorCisJbGVhCS5MY2JjX2Zhc3RfYm9keSglcmlwKSwlcjEwCisJY21wCSVyMTAsJXJieAkJIyBjb250ZXh0LT5SaXA8LkxjYmNfZmFzdF9ib2R5CisJamIJLkxpbl9jYmNfZnJhbWVfc2V0dXAKKworCWxlYQkuTGNiY19zbG93X3Byb2xvZ3VlKCVyaXApLCVyMTAKKwljbXAJJXIxMCwlcmJ4CQkjIGNvbnRleHQtPlJpcDwuTGNiY19zbG93X3Byb2xvZ3VlCisJamIJLkxpbl9jYmNfYm9keQorCisJbGVhCS5MY2JjX3Nsb3dfYm9keSglcmlwKSwlcjEwCisJY21wCSVyMTAsJXJieAkJIyBjb250ZXh0LT5SaXA8LkxjYmNfc2xvd19ib2R5CisJamIJLkxpbl9jYmNfZnJhbWVfc2V0dXAKKworLkxpbl9jYmNfYm9keToKKwltb3YJMTUyKCRjb250ZXh0KSwlcmF4CSMgcHVsbCBjb250ZXh0LT5Sc3AKKworCWxlYQkuTGNiY19lcGlsb2d1ZSglcmlwKSwlcjEwCisJY21wCSVyMTAsJXJieAkJIyBjb250ZXh0LT5SaXA+PS5MY2JjX2VwaWxvZ3VlCisJamFlCS5MaW5fY2JjX3Byb2xvZ3VlCisKKwlsZWEJOCglcmF4KSwlcmF4CisKKwlsZWEJLkxjYmNfcG9wZnEoJXJpcCksJXIxMAorCWNtcAklcjEwLCVyYngJCSMgY29udGV4dC0+UmlwPj0uTGNiY19wb3BmcQorCWphZQkuTGluX2NiY19wcm9sb2d1ZQorCisJbW92CWAxNi04YCglcmF4KSwlcmF4CSMgYmlhc2VkICRfcnNwCisJbGVhCTU2KCVyYXgpLCVyYXgKKworLkxpbl9jYmNfZnJhbWVfc2V0dXA6CisJbW92CS0xNiglcmF4KSwlcmJ4CisJbW92CS0yNCglcmF4KSwlcmJwCisJbW92CS0zMiglcmF4KSwlcjEyCisJbW92CS00MCglcmF4KSwlcjEzCisJbW92CS00OCglcmF4KSwlcjE0CisJbW92CS01NiglcmF4KSwlcjE1CisJbW92CSVyYngsMTQ0KCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UmJ4CisJbW92CSVyYnAsMTYwKCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UmJwCisJbW92CSVyMTIsMjE2KCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UjEyCisJbW92CSVyMTMsMjI0KCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UjEzCisJbW92CSVyMTQsMjMyKCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UjE0CisJbW92CSVyMTUsMjQwKCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UjE1CisKKy5MaW5fY2JjX3Byb2xvZ3VlOgorCW1vdgk4KCVyYXgpLCVyZGkKKwltb3YJMTYoJXJheCksJXJzaQorCW1vdgklcmF4LDE1MigkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlJzcAorCW1vdgklcnNpLDE2OCgkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlJzaQorCW1vdgklcmRpLDE3NigkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlJkaQorCisuTGNvbW1vbl9zZWhfZXhpdDoKKworCW1vdgk0MCgkZGlzcCksJXJkaQkJIyBkaXNwLT5Db250ZXh0UmVjb3JkCisJbW92CSRjb250ZXh0LCVyc2kJCSMgY29udGV4dAorCW1vdglcJGAxMjMyLzhgLCVlY3gJCSMgc2l6ZW9mKENPTlRFWFQpCisJLmxvbmcJMHhhNTQ4ZjNmYwkJIyBjbGQ7IHJlcCBtb3ZzcQorCisJbW92CSRkaXNwLCVyc2kKKwl4b3IJJXJjeCwlcmN4CQkjIGFyZzEsIFVOV19GTEFHX05IQU5ETEVSCisJbW92CTgoJXJzaSksJXJkeAkJIyBhcmcyLCBkaXNwLT5JbWFnZUJhc2UKKwltb3YJMCglcnNpKSwlcjgJCSMgYXJnMywgZGlzcC0+Q29udHJvbFBjCisJbW92CTE2KCVyc2kpLCVyOQkJIyBhcmc0LCBkaXNwLT5GdW5jdGlvbkVudHJ5CisJbW92CTQwKCVyc2kpLCVyMTAJCSMgZGlzcC0+Q29udGV4dFJlY29yZAorCWxlYQk1NiglcnNpKSwlcjExCQkjICZkaXNwLT5IYW5kbGVyRGF0YQorCWxlYQkyNCglcnNpKSwlcjEyCQkjICZkaXNwLT5Fc3RhYmxpc2hlckZyYW1lCisJbW92CSVyMTAsMzIoJXJzcCkJCSMgYXJnNQorCW1vdgklcjExLDQwKCVyc3ApCQkjIGFyZzYKKwltb3YJJXIxMiw0OCglcnNwKQkJIyBhcmc3CisJbW92CSVyY3gsNTYoJXJzcCkJCSMgYXJnOCwgKE5VTEwpCisJY2FsbAkqX19pbXBfUnRsVmlydHVhbFVud2luZCglcmlwKQorCisJbW92CVwkMSwlZWF4CQkjIEV4Y2VwdGlvbkNvbnRpbnVlU2VhcmNoCisJYWRkCVwkNjQsJXJzcAorCXBvcGZxCisJcG9wCSVyMTUKKwlwb3AJJXIxNAorCXBvcAklcjEzCisJcG9wCSVyMTIKKwlwb3AJJXJicAorCXBvcAklcmJ4CisJcG9wCSVyZGkKKwlwb3AJJXJzaQorCXJldAorLnNpemUJY2JjX3NlX2hhbmRsZXIsLi1jYmNfc2VfaGFuZGxlcgorCisuc2VjdGlvbgkucGRhdGEKKy5hbGlnbgk0CisJLnJ2YQkuTFNFSF9iZWdpbl9BRVNfZW5jcnlwdAorCS5ydmEJLkxTRUhfZW5kX0FFU19lbmNyeXB0CisJLnJ2YQkuTFNFSF9pbmZvX0FFU19lbmNyeXB0CisKKwkucnZhCS5MU0VIX2JlZ2luX0FFU19kZWNyeXB0CisJLnJ2YQkuTFNFSF9lbmRfQUVTX2RlY3J5cHQKKwkucnZhCS5MU0VIX2luZm9fQUVTX2RlY3J5cHQKKworCS5ydmEJLkxTRUhfYmVnaW5fQUVTX3NldF9lbmNyeXB0X2tleQorCS5ydmEJLkxTRUhfZW5kX0FFU19zZXRfZW5jcnlwdF9rZXkKKwkucnZhCS5MU0VIX2luZm9fQUVTX3NldF9lbmNyeXB0X2tleQorCisJLnJ2YQkuTFNFSF9iZWdpbl9BRVNfc2V0X2RlY3J5cHRfa2V5CisJLnJ2YQkuTFNFSF9lbmRfQUVTX3NldF9kZWNyeXB0X2tleQorCS5ydmEJLkxTRUhfaW5mb19BRVNfc2V0X2RlY3J5cHRfa2V5CisKKwkucnZhCS5MU0VIX2JlZ2luX0FFU19jYmNfZW5jcnlwdAorCS5ydmEJLkxTRUhfZW5kX0FFU19jYmNfZW5jcnlwdAorCS5ydmEJLkxTRUhfaW5mb19BRVNfY2JjX2VuY3J5cHQKKworLnNlY3Rpb24JLnhkYXRhCisuYWxpZ24JOAorLkxTRUhfaW5mb19BRVNfZW5jcnlwdDoKKwkuYnl0ZQk5LDAsMCwwCisJLnJ2YQlibG9ja19zZV9oYW5kbGVyCisJLnJ2YQkuTGVuY19wcm9sb2d1ZSwuTGVuY19lcGlsb2d1ZQkjIEhhbmRsZXJEYXRhW10KKy5MU0VIX2luZm9fQUVTX2RlY3J5cHQ6CisJLmJ5dGUJOSwwLDAsMAorCS5ydmEJYmxvY2tfc2VfaGFuZGxlcgorCS5ydmEJLkxkZWNfcHJvbG9ndWUsLkxkZWNfZXBpbG9ndWUJIyBIYW5kbGVyRGF0YVtdCisuTFNFSF9pbmZvX0FFU19zZXRfZW5jcnlwdF9rZXk6CisJLmJ5dGUJOSwwLDAsMAorCS5ydmEJa2V5X3NlX2hhbmRsZXIKKwkucnZhCS5MZW5jX2tleV9wcm9sb2d1ZSwuTGVuY19rZXlfZXBpbG9ndWUJIyBIYW5kbGVyRGF0YVtdCisuTFNFSF9pbmZvX0FFU19zZXRfZGVjcnlwdF9rZXk6CisJLmJ5dGUJOSwwLDAsMAorCS5ydmEJa2V5X3NlX2hhbmRsZXIKKwkucnZhCS5MZGVjX2tleV9wcm9sb2d1ZSwuTGRlY19rZXlfZXBpbG9ndWUJIyBIYW5kbGVyRGF0YVtdCisuTFNFSF9pbmZvX0FFU19jYmNfZW5jcnlwdDoKKwkuYnl0ZQk5LDAsMCwwCisJLnJ2YQljYmNfc2VfaGFuZGxlcgorX19fCit9CiAKICRjb2RlID1+IHMvXGAoW15cYF0qKVxgL2V2YWwoJDEpL2dlbTsKIApkaWZmIC0tZ2l0IGEvY3J5cHRvL2FzbjEvTWFrZWZpbGUgYi9jcnlwdG8vYXNuMS9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTRhNjg4NS4uMDAwMDAwMAotLS0gYS9jcnlwdG8vYXNuMS9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDkwNCArMCwwIEBACi0jCi0jIE9wZW5TU0wvY3J5cHRvL2FzbjEvTWFrZWZpbGUKLSMKLQotRElSPQlhc24xCi1UT1A9CS4uLy4uCi1DQz0JY2MKLUlOQ0xVREVTPSAtSS4uIC1JJChUT1ApIC1JLi4vLi4vaW5jbHVkZQotQ0ZMQUc9LWcKLU1BS0VGSUxFPQlNYWtlZmlsZQotQVI9CQlhciByCi0KLUNGTEFHUz0gJChJTkNMVURFUykgJChDRkxBRykKLQotR0VORVJBTD1NYWtlZmlsZSBSRUFETUUKLVRFU1Q9Ci1BUFBTPQotCi1MSUI9JChUT1ApL2xpYmNyeXB0by5hCi1MSUJTUkM9CWFfb2JqZWN0LmMgYV9iaXRzdHIuYyBhX3V0Y3RtLmMgYV9nZW50bS5jIGFfdGltZS5jIGFfaW50LmMgYV9vY3RldC5jIFwKLQlhX3ByaW50LmMgYV90eXBlLmMgYV9zZXQuYyBhX2R1cC5jIGFfZDJpX2ZwLmMgYV9pMmRfZnAuYyBcCi0JYV9lbnVtLmMgYV91dGY4LmMgYV9zaWduLmMgYV9kaWdlc3QuYyBhX3ZlcmlmeS5jIGFfbWJzdHIuYyBhX3N0cmV4LmMgXAotCXhfYWxnb3IuYyB4X3ZhbC5jIHhfcHVia2V5LmMgeF9zaWcuYyB4X3JlcS5jIHhfYXR0cmliLmMgeF9iaWdudW0uYyBcCi0JeF9sb25nLmMgeF9uYW1lLmMgeF94NTA5LmMgeF94NTA5YS5jIHhfY3JsLmMgeF9pbmZvLmMgeF9zcGtpLmMgbnNzZXEuYyBcCi0JZDJpX3B1LmMgZDJpX3ByLmMgaTJkX3B1LmMgaTJkX3ByLmNcCi0JdF9yZXEuYyB0X3g1MDkuYyB0X3g1MDlhLmMgdF9jcmwuYyB0X3BrZXkuYyB0X3Nwa2kuYyB0X2JpdHN0LmMgXAotCXRhc25fbmV3LmMgdGFzbl9mcmUuYyB0YXNuX2VuYy5jIHRhc25fZGVjLmMgdGFzbl91dGwuYyB0YXNuX3R5cC5jIFwKLQlmX2ludC5jIGZfc3RyaW5nLmMgbl9wa2V5LmMgXAotCWZfZW51bS5jIGFfaGRyLmMgeF9wa2V5LmMgYV9ib29sLmMgeF9leHRlbi5jIGFzbl9taW1lLmMgXAotCWFzbjFfZ2VuLmMgYXNuMV9wYXIuYyBhc24xX2xpYi5jIGFzbjFfZXJyLmMgYV9tZXRoLmMgYV9ieXRlcy5jIGFfc3RybmlkLmMgXAotCWV2cF9hc24xLmMgYXNuX3BhY2suYyBwNV9wYmUuYyBwNV9wYmV2Mi5jIHA4X3BrZXkuYyBhc25fbW9pZC5jCi1MSUJPQko9IGFfb2JqZWN0Lm8gYV9iaXRzdHIubyBhX3V0Y3RtLm8gYV9nZW50bS5vIGFfdGltZS5vIGFfaW50Lm8gYV9vY3RldC5vIFwKLQlhX3ByaW50Lm8gYV90eXBlLm8gYV9zZXQubyBhX2R1cC5vIGFfZDJpX2ZwLm8gYV9pMmRfZnAubyBcCi0JYV9lbnVtLm8gYV91dGY4Lm8gYV9zaWduLm8gYV9kaWdlc3QubyBhX3ZlcmlmeS5vIGFfbWJzdHIubyBhX3N0cmV4Lm8gXAotCXhfYWxnb3IubyB4X3ZhbC5vIHhfcHVia2V5Lm8geF9zaWcubyB4X3JlcS5vIHhfYXR0cmliLm8geF9iaWdudW0ubyBcCi0JeF9sb25nLm8geF9uYW1lLm8geF94NTA5Lm8geF94NTA5YS5vIHhfY3JsLm8geF9pbmZvLm8geF9zcGtpLm8gbnNzZXEubyBcCi0JZDJpX3B1Lm8gZDJpX3ByLm8gaTJkX3B1Lm8gaTJkX3ByLm8gXAotCXRfcmVxLm8gdF94NTA5Lm8gdF94NTA5YS5vIHRfY3JsLm8gdF9wa2V5Lm8gdF9zcGtpLm8gdF9iaXRzdC5vIFwKLQl0YXNuX25ldy5vIHRhc25fZnJlLm8gdGFzbl9lbmMubyB0YXNuX2RlYy5vIHRhc25fdXRsLm8gdGFzbl90eXAubyBcCi0JZl9pbnQubyBmX3N0cmluZy5vIG5fcGtleS5vIFwKLQlmX2VudW0ubyBhX2hkci5vIHhfcGtleS5vIGFfYm9vbC5vIHhfZXh0ZW4ubyBhc25fbWltZS5vIFwKLQlhc24xX2dlbi5vIGFzbjFfcGFyLm8gYXNuMV9saWIubyBhc24xX2Vyci5vIGFfbWV0aC5vIGFfYnl0ZXMubyBhX3N0cm5pZC5vIFwKLQlldnBfYXNuMS5vIGFzbl9wYWNrLm8gcDVfcGJlLm8gcDVfcGJldjIubyBwOF9wa2V5Lm8gYXNuX21vaWQubwotCi1TUkM9ICQoTElCU1JDKQotCi1FWEhFQURFUj0gIGFzbjEuaCBhc24xX21hYy5oIGFzbjF0LmgKLUhFQURFUj0JJChFWEhFQURFUikKLQotQUxMPSAgICAkKEdFTkVSQUwpICQoU1JDKSAkKEhFQURFUikKLQotdG9wOgotCShjZCAuLi8uLjsgJChNQUtFKSBESVJTPWNyeXB0byBTRElSUz0kKERJUikgc3ViX2FsbCkKLQotdGVzdDoJdGVzdC5jCi0JY2MgLWcgLUkuLi8uLi9pbmNsdWRlIC1jIHRlc3QuYwotCWNjIC1nIC1JLi4vLi4vaW5jbHVkZSAtbyB0ZXN0IHRlc3QubyAtTC4uLy4uIC1sY3J5cHRvCi0KLXBrOglway5jCi0JY2MgLWcgLUkuLi8uLi9pbmNsdWRlIC1jIHBrLmMKLQljYyAtZyAtSS4uLy4uL2luY2x1ZGUgLW8gcGsgcGsubyAtTC4uLy4uIC1sY3J5cHRvCi0KLWFsbDoJbGliCi0KLWxpYjoJJChMSUJPQkopCi0JJChBUlgpICQoTElCKSAkKExJQk9CSikKLQkkKFJBTkxJQikgJChMSUIpIHx8IGVjaG8gTmV2ZXIgbWluZC4KLQlAdG91Y2ggbGliCi0KLWZpbGVzOgotCSQoUEVSTCkgJChUT1ApL3V0aWwvZmlsZXMucGwgTWFrZWZpbGUgPj4gJChUT1ApL01JTkZPCi0KLWxpbmtzOgotCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9pbmNsdWRlL29wZW5zc2wgJChFWEhFQURFUikKLQlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vdGVzdCAkKFRFU1QpCi0JQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL2FwcHMgJChBUFBTKQotCi1pbnN0YWxsOgotCUBbIC1uICIkKElOU1RBTExUT1ApIiBdICMgc2hvdWxkIGJlIHNldCBieSB0b3AgTWFrZWZpbGUuLi4KLQlAaGVhZGVybGlzdD0iJChFWEhFQURFUikiOyBmb3IgaSBpbiAkJGhlYWRlcmxpc3QgOyBcCi0JZG8gIFwKLQkoY3AgJCRpICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpOyBcCi0JY2htb2QgNjQ0ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpICk7IFwKLQlkb25lOwotCi10YWdzOgotCWN0YWdzICQoU1JDKQotCi10ZXN0czoKLQotbGludDoKLQlsaW50IC1ETElOVCAkKElOQ0xVREVTKSAkKFNSQyk+Zmx1ZmYKLQotZGVwZW5kOgotCUBbIC1uICIkKE1BS0VERVBFTkQpIiBdICMgc2hvdWxkIGJlIHNldCBieSB0b3AgTWFrZWZpbGUuLi4KLQkkKE1BS0VERVBFTkQpIC0tICQoQ0ZMQUcpICQoSU5DTFVERVMpICQoREVQRkxBRykgLS0gJChQUk9HUykgJChMSUJTUkMpCi0KLWRjbGVhbjoKLQkkKFBFUkwpIC1wZSAnaWYgKC9eIyBETyBOT1QgREVMRVRFIFRISVMgTElORS8pIHtwcmludDsgZXhpdCgwKTt9JyAkKE1BS0VGSUxFKSA+TWFrZWZpbGUubmV3Ci0JbXYgLWYgTWFrZWZpbGUubmV3ICQoTUFLRUZJTEUpCi0KLWNsZWFuOgotCXJtIC1mICoubyAqLm9iaiBsaWIgdGFncyBjb3JlIC5wdXJlIC5uZnMqICoub2xkICouYmFrIGZsdWZmCi0KLQotIyBETyBOT1QgREVMRVRFIFRISVMgTElORSAtLSBtYWtlIGRlcGVuZCBkZXBlbmRzIG9uIGl0LgotCi1hX2JpdHN0ci5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotYV9iaXRzdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotYV9iaXRzdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1hX2JpdHN0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLWFfYml0c3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1hX2JpdHN0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotYV9iaXRzdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1hX2JpdHN0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGFfYml0c3RyLmMKLWFfYm9vbC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotYV9ib29sLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xdC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotYV9ib29sLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWFfYm9vbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWFfYm9vbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotYV9ib29sLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1hX2Jvb2wubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1hX2Jvb2wubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBhX2Jvb2wuYwotYV9ieXRlcy5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotYV9ieXRlcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1hX2J5dGVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotYV9ieXRlcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLWFfYnl0ZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLWFfYnl0ZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1hX2J5dGVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1hX2J5dGVzLm86IC4uL2NyeXB0bGliLmggYV9ieXRlcy5jCi1hX2QyaV9mcC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotYV9kMmlfZnAubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjFfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1hX2QyaV9mcC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1hX2QyaV9mcC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWFfZDJpX2ZwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1hX2QyaV9mcC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotYV9kMmlfZnAubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1hX2QyaV9mcC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGFfZDJpX2ZwLmMKLWFfZGlnZXN0Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi1hX2RpZ2VzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1hX2RpZ2VzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLWFfZGlnZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKLWFfZGlnZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotYV9kaWdlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLWFfZGlnZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLWFfZGlnZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWFfZGlnZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1hX2RpZ2VzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLWFfZGlnZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotYV9kaWdlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotYV9kaWdlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vY3J5cHRsaWIuaCBhX2RpZ2VzdC5jCi1hX2R1cC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWFfZHVwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWFfZHVwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotYV9kdXAubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWFfZHVwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1hX2R1cC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWFfZHVwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggYV9kdXAuYwotYV9lbnVtLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotYV9lbnVtLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotYV9lbnVtLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotYV9lbnVtLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotYV9lbnVtLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi1hX2VudW0ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1hX2VudW0ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLWFfZW51bS5vOiAuLi9jcnlwdGxpYi5oIGFfZW51bS5jCi1hX2dlbnRtLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi1hX2dlbnRtLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLWFfZ2VudG0ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1hX2dlbnRtLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotYV9nZW50bS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotYV9nZW50bS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLWFfZ2VudG0ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLWFfZ2VudG0ubzogLi4vY3J5cHRsaWIuaCAuLi9vX3RpbWUuaCBhX2dlbnRtLmMKLWFfaGRyLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi1hX2hkci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMV9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWFfaGRyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWFfaGRyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotYV9oZHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWFfaGRyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1hX2hkci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWFfaGRyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggYV9oZHIuYwotYV9pMmRfZnAubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLWFfaTJkX2ZwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLWFfaTJkX2ZwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotYV9pMmRfZnAubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1hX2kyZF9mcC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotYV9pMmRfZnAubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWFfaTJkX2ZwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotYV9pMmRfZnAubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBhX2kyZF9mcC5jCi1hX2ludC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWFfaW50Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotYV9pbnQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1hX2ludC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLWFfaW50Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi1hX2ludC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLWFfaW50Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1hX2ludC5vOiAuLi9jcnlwdGxpYi5oIGFfaW50LmMKLWFfbWJzdHIubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLWFfbWJzdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotYV9tYnN0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLWFfbWJzdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1hX21ic3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi1hX21ic3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotYV9tYnN0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotYV9tYnN0ci5vOiAuLi9jcnlwdGxpYi5oIGFfbWJzdHIuYwotYV9tZXRoLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotYV9tZXRoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWFfbWV0aC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWFfbWV0aC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotYV9tZXRoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1hX21ldGgubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1hX21ldGgubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBhX21ldGguYwotYV9vYmplY3QubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLWFfb2JqZWN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaAotYV9vYmplY3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotYV9vYmplY3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1hX29iamVjdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi1hX29iamVjdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1hX29iamVjdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotYV9vYmplY3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1hX29iamVjdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGFfb2JqZWN0LmMKLWFfb2N0ZXQubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLWFfb2N0ZXQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotYV9vY3RldC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLWFfb2N0ZXQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1hX29jdGV0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi1hX29jdGV0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotYV9vY3RldC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotYV9vY3RldC5vOiAuLi9jcnlwdGxpYi5oIGFfb2N0ZXQuYwotYV9wcmludC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotYV9wcmludC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1hX3ByaW50Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotYV9wcmludC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLWFfcHJpbnQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLWFfcHJpbnQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1hX3ByaW50Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1hX3ByaW50Lm86IC4uL2NyeXB0bGliLmggYV9wcmludC5jCi1hX3NldC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotYV9zZXQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjFfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1hX3NldC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1hX3NldC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWFfc2V0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1hX3NldC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotYV9zZXQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1hX3NldC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGFfc2V0LmMKLWFfc2lnbi5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWFfc2lnbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLWFfc2lnbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLWFfc2lnbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi1hX3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1hX3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLWFfc2lnbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi1hX3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotYV9zaWduLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1hX3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1hX3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1hX3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotYV9zaWduLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2NyeXB0bGliLmggYV9zaWduLmMKLWFfc3RyZXgubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLWFfc3RyZXgubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotYV9zdHJleC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLWFfc3RyZXgubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotYV9zdHJleC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWFfc3RyZXgubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLWFfc3RyZXgubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotYV9zdHJleC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1hX3N0cmV4Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1hX3N0cmV4Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotYV9zdHJleC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWFfc3RyZXgubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotYV9zdHJleC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9jcnlwdGxpYi5oIGFfc3RyZXguYyBjaGFybWFwLmgKLWFfc3RybmlkLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi1hX3N0cm5pZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1hX3N0cm5pZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLWFfc3RybmlkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotYV9zdHJuaWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi1hX3N0cm5pZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotYV9zdHJuaWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWFfc3RybmlkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotYV9zdHJuaWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBhX3N0cm5pZC5jCi1hX3RpbWUubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLWFfdGltZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMXQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWFfdGltZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1hX3RpbWUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1hX3RpbWUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWFfdGltZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotYV90aW1lLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotYV90aW1lLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggLi4vb190aW1lLmggYV90aW1lLmMKLWFfdHlwZS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotYV90eXBlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xdC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotYV90eXBlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWFfdHlwZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWFfdHlwZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi1hX3R5cGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotYV90eXBlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1hX3R5cGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1hX3R5cGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBhX3R5cGUuYwotYV91dGN0bS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotYV91dGN0bS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1hX3V0Y3RtLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotYV91dGN0bS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLWFfdXRjdG0ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLWFfdXRjdG0ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1hX3V0Y3RtLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1hX3V0Y3RtLm86IC4uL2NyeXB0bGliLmggLi4vb190aW1lLmggYV91dGN0bS5jCi1hX3V0ZjgubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1hX3V0ZjgubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotYV91dGY4Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotYV91dGY4Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1hX3V0ZjgubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWFfdXRmOC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWFfdXRmOC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGFfdXRmOC5jCi1hX3ZlcmlmeS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotYV92ZXJpZnkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oCi1hX3ZlcmlmeS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1hX3ZlcmlmeS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotYV92ZXJpZnkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotYV92ZXJpZnkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotYV92ZXJpZnkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotYV92ZXJpZnkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi1hX3ZlcmlmeS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotYV92ZXJpZnkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWFfdmVyaWZ5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotYV92ZXJpZnkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1hX3ZlcmlmeS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi1hX3ZlcmlmeS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9jcnlwdGxpYi5oIGFfdmVyaWZ5LmMKLWFzbjFfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1hc24xX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLWFzbjFfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotYXNuMV9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWFzbjFfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1hc24xX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWFzbjFfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGFzbjFfZXJyLmMKLWFzbjFfZ2VuLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi1hc24xX2dlbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1hc24xX2dlbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotYXNuMV9nZW4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLWFzbjFfZ2VuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLWFzbjFfZ2VuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLWFzbjFfZ2VuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLWFzbjFfZ2VuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotYXNuMV9nZW4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWFzbjFfZ2VuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1hc24xX2dlbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLWFzbjFfZ2VuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotYXNuMV9nZW4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotYXNuMV9nZW4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDl2My5oCi1hc24xX2dlbi5vOiAuLi9jcnlwdGxpYi5oIGFzbjFfZ2VuLmMKLWFzbjFfbGliLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi1hc24xX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMV9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWFzbjFfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWFzbjFfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotYXNuMV9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWFzbjFfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1hc24xX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWFzbjFfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggYXNuMV9saWIuYwotYXNuMV9wYXIubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLWFzbjFfcGFyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLWFzbjFfcGFyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotYXNuMV9wYXIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1hc24xX3Bhci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLWFzbjFfcGFyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1hc24xX3Bhci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotYXNuMV9wYXIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1hc24xX3Bhci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGFzbjFfcGFyLmMKLWFzbl9taW1lLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi1hc25fbWltZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMXQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWFzbl9taW1lLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWFzbl9taW1lLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1hc25fbWltZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi1hc25fbWltZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1hc25fbWltZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1hc25fbWltZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLWFzbl9taW1lLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1hc25fbWltZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotYXNuX21pbWUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAotYXNuX21pbWUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotYXNuX21pbWUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLWFzbl9taW1lLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmgKLWFzbl9taW1lLm86IC4uL2NyeXB0bGliLmggYXNuX21pbWUuYwotYXNuX21vaWQubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLWFzbl9tb2lkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLWFzbl9tb2lkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1hc25fbW9pZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZHNvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLWFzbl9tb2lkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKLWFzbl9tb2lkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotYXNuX21vaWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLWFzbl9tb2lkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLWFzbl9tb2lkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWFzbl9tb2lkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1hc25fbW9pZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLWFzbl9tb2lkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotYXNuX21vaWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotYXNuX21vaWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vY3J5cHRsaWIuaCBhc25fbW9pZC5jCi1hc25fcGFjay5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotYXNuX3BhY2subzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotYXNuX3BhY2subzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1hc25fcGFjay5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLWFzbl9wYWNrLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1hc25fcGFjay5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotYXNuX3BhY2subzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1hc25fcGFjay5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGFzbl9wYWNrLmMKLWQyaV9wci5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWQyaV9wci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLWQyaV9wci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oCi1kMmlfcHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLWQyaV9wci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1kMmlfcHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotZDJpX3ByLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotZDJpX3ByLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi1kMmlfcHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCi1kMmlfcHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1kMmlfcHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBkMmlfcHIuYwotZDJpX3B1Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotZDJpX3B1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotZDJpX3B1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZHNhLmgKLWQyaV9wdS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotZDJpX3B1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLWQyaV9wdS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1kMmlfcHUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi1kMmlfcHUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLWQyaV9wdS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKLWQyaV9wdS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWQyaV9wdS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGQyaV9wdS5jCi1ldnBfYXNuMS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotZXZwX2FzbjEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjFfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1ldnBfYXNuMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1ldnBfYXNuMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWV2cF9hc24xLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1ldnBfYXNuMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotZXZwX2FzbjEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1ldnBfYXNuMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGV2cF9hc24xLmMKLWZfZW51bS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWZfZW51bS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1mX2VudW0ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1mX2VudW0ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWZfZW51bS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotZl9lbnVtLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotZl9lbnVtLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggZl9lbnVtLmMKLWZfaW50Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotZl9pbnQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotZl9pbnQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1mX2ludC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotZl9pbnQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWZfaW50Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotZl9pbnQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBmX2ludC5jCi1mX3N0cmluZy5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotZl9zdHJpbmcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotZl9zdHJpbmcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1mX3N0cmluZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLWZfc3RyaW5nLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1mX3N0cmluZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotZl9zdHJpbmcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1mX3N0cmluZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGZfc3RyaW5nLmMKLWkyZF9wci5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWkyZF9wci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLWkyZF9wci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oCi1pMmRfcHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLWkyZF9wci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1pMmRfcHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotaTJkX3ByLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotaTJkX3ByLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi1pMmRfcHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCi1pMmRfcHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1pMmRfcHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBpMmRfcHIuYwotaTJkX3B1Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotaTJkX3B1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotaTJkX3B1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZHNhLmgKLWkyZF9wdS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotaTJkX3B1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLWkyZF9wdS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1pMmRfcHUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi1pMmRfcHUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLWkyZF9wdS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKLWkyZF9wdS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWkyZF9wdS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGkyZF9wdS5jCi1uX3BrZXkubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLW5fcGtleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMV9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMXQuaAotbl9wa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLW5fcGtleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLW5fcGtleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi1uX3BrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1uX3BrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLW5fcGtleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi1uX3BrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotbl9wa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1uX3BrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCi1uX3BrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotbl9wa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1uX3BrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAotbl9wa2V5Lm86IC4uL2NyeXB0bGliLmggbl9wa2V5LmMKLW5zc2VxLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjF0LmgKLW5zc2VxLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLW5zc2VxLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotbnNzZXEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotbnNzZXEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1uc3NlcS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1uc3NlcS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLW5zc2VxLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi1uc3NlcS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAotbnNzZXEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotbnNzZXEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLW5zc2VxLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggbnNzZXEuYwotcDVfcGJlLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi1wNV9wYmUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjF0LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1wNV9wYmUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotcDVfcGJlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1wNV9wYmUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotcDVfcGJlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLXA1X3BiZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1wNV9wYmUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi1wNV9wYmUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLXA1X3BiZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAotcDVfcGJlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1wNV9wYmUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1wNV9wYmUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotcDVfcGJlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2NyeXB0bGliLmggcDVfcGJlLmMKLXA1X3BiZXYyLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi1wNV9wYmV2Mi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMXQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXA1X3BiZXYyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLXA1X3BiZXYyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1wNV9wYmV2Mi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi1wNV9wYmV2Mi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1wNV9wYmV2Mi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1wNV9wYmV2Mi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLXA1X3BiZXYyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1wNV9wYmV2Mi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotcDVfcGJldjIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAotcDVfcGJldjIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotcDVfcGJldjIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLXA1X3BiZXYyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmgKLXA1X3BiZXYyLm86IC4uL2NyeXB0bGliLmggcDVfcGJldjIuYwotcDhfcGtleS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotcDhfcGtleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMXQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXA4X3BrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotcDhfcGtleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotcDhfcGtleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi1wOF9wa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLXA4X3BrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotcDhfcGtleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLXA4X3BrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLXA4X3BrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLXA4X3BrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotcDhfcGtleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotcDhfcGtleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oCi1wOF9wa2V5Lm86IC4uL2NyeXB0bGliLmggcDhfcGtleS5jCi10X2JpdHN0Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi10X2JpdHN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXRfYml0c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLXRfYml0c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLXRfYml0c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotdF9iaXRzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi10X2JpdHN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLXRfYml0c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi10X2JpdHN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi10X2JpdHN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi10X2JpdHN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLXRfYml0c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLXRfYml0c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAotdF9iaXRzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOXYzLmggLi4vY3J5cHRsaWIuaCB0X2JpdHN0LmMKLXRfY3JsLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotdF9jcmwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi10X2NybC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotdF9jcmwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLXRfY3JsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLXRfY3JsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLXRfY3JsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLXRfY3JsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotdF9jcmwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLXRfY3JsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi10X2NybC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCi10X2NybC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotdF9jcmwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAotdF9jcmwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDl2My5oIC4uL2NyeXB0bGliLmggdF9jcmwuYwotdF9wa2V5Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotdF9wa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotdF9wa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZGguaAotdF9wa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotdF9wa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotdF9wa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLXRfcGtleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi10X3BrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXRfcGtleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcnNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi10X3BrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLXRfcGtleS5vOiAuLi9jcnlwdGxpYi5oIHRfcGtleS5jCi10X3JlcS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXRfcmVxLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotdF9yZXEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLXRfcmVxLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotdF9yZXEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotdF9yZXEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi10X3JlcS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotdF9yZXEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotdF9yZXEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotdF9yZXEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXRfcmVxLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAotdF9yZXEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotdF9yZXEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLXRfcmVxLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmgKLXRfcmVxLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5djMuaCAuLi9jcnlwdGxpYi5oIHRfcmVxLmMKLXRfc3BraS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXRfc3BraS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXRfc3BraS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oCi10X3Nwa2kubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLXRfc3BraS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi10X3Nwa2kubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotdF9zcGtpLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLXRfc3BraS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLXRfc3BraS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotdF9zcGtpLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi10X3Nwa2kubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotdF9zcGtpLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotdF9zcGtpLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLXRfc3BraS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9jcnlwdGxpYi5oIHRfc3BraS5jCi10X3g1MDkubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi10X3g1MDkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi10X3g1MDkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLXRfeDUwOS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLXRfeDUwOS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi10X3g1MDkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi10X3g1MDkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLXRfeDUwOS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi10X3g1MDkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotdF94NTA5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi10X3g1MDkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCi10X3g1MDkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotdF94NTA5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi10X3g1MDkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAotdF94NTA5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5djMuaCAuLi9jcnlwdGxpYi5oIHRfeDUwOS5jCi10X3g1MDlhLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi10X3g1MDlhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXRfeDUwOWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi10X3g1MDlhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKLXRfeDUwOWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi10X3g1MDlhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi10X3g1MDlhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLXRfeDUwOWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotdF94NTA5YS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotdF94NTA5YS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLXRfeDUwOWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi10X3g1MDlhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLXRfeDUwOWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vY3J5cHRsaWIuaCB0X3g1MDlhLmMKLXRhc25fZGVjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjF0LmgKLXRhc25fZGVjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXRhc25fZGVjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotdGFzbl9kZWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi10YXNuX2RlYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLXRhc25fZGVjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi10YXNuX2RlYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotdGFzbl9kZWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi10YXNuX2RlYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCB0YXNuX2RlYy5jCi10YXNuX2VuYy5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotdGFzbl9lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjF0LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi10YXNuX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi10YXNuX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLXRhc25fZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLXRhc25fZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXRhc25fZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi10YXNuX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLXRhc25fZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggdGFzbl9lbmMuYwotdGFzbl9mcmUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMXQuaAotdGFzbl9mcmUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotdGFzbl9mcmUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotdGFzbl9mcmUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotdGFzbl9mcmUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXRhc25fZnJlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotdGFzbl9mcmUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggdGFzbl9mcmUuYwotdGFzbl9uZXcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMXQuaAotdGFzbl9uZXcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotdGFzbl9uZXcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi10YXNuX25ldy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi10YXNuX25ldy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi10YXNuX25ldy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotdGFzbl9uZXcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi10YXNuX25ldy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCB0YXNuX25ldy5jCi10YXNuX3R5cC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xdC5oCi10YXNuX3R5cC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi10YXNuX3R5cC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotdGFzbl90eXAubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXRhc25fdHlwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotdGFzbl90eXAubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggdGFzbl90eXAuYwotdGFzbl91dGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMXQuaAotdGFzbl91dGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotdGFzbl91dGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi10YXNuX3V0bC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi10YXNuX3V0bC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi10YXNuX3V0bC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotdGFzbl91dGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi10YXNuX3V0bC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCB0YXNuX3V0bC5jCi14X2FsZ29yLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjF0LmgKLXhfYWxnb3IubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAoteF9hbGdvci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLXhfYWxnb3IubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAoteF9hbGdvci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLXhfYWxnb3IubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAoteF9hbGdvci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLXhfYWxnb3IubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLXhfYWxnb3IubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLXhfYWxnb3IubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAoteF9hbGdvci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAoteF9hbGdvci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oCi14X2FsZ29yLm86IHhfYWxnb3IuYwoteF9hdHRyaWIubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLXhfYXR0cmliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xdC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAoteF9hdHRyaWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAoteF9hdHRyaWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLXhfYXR0cmliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLXhfYXR0cmliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLXhfYXR0cmliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLXhfYXR0cmliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAoteF9hdHRyaWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXhfYXR0cmliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi14X2F0dHJpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLXhfYXR0cmliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAoteF9hdHRyaWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAoteF9hdHRyaWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vY3J5cHRsaWIuaCB4X2F0dHJpYi5jCi14X2JpZ251bS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAoteF9iaWdudW0ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjF0LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi14X2JpZ251bS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXhfYmlnbnVtLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAoteF9iaWdudW0ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi14X2JpZ251bS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAoteF9iaWdudW0ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXhfYmlnbnVtLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAoteF9iaWdudW0ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCB4X2JpZ251bS5jCi14X2NybC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAoteF9jcmwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjF0LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi14X2NybC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi14X2NybC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAoteF9jcmwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAoteF9jcmwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAoteF9jcmwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAoteF9jcmwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi14X2NybC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAoteF9jcmwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLXhfY3JsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLXhfY3JsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi14X2NybC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oCi14X2NybC5vOiAuLi9jcnlwdGxpYi5oIHhfY3JsLmMKLXhfZXh0ZW4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMXQuaAoteF9leHRlbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi14X2V4dGVuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAoteF9leHRlbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi14X2V4dGVuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAoteF9leHRlbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi14X2V4dGVuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAoteF9leHRlbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAoteF9leHRlbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAoteF9leHRlbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCi14X2V4dGVuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi14X2V4dGVuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmgKLXhfZXh0ZW4ubzogeF9leHRlbi5jCi14X2luZm8ubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi14X2luZm8ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAoteF9pbmZvLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi14X2luZm8ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAoteF9pbmZvLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLXhfaW5mby5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi14X2luZm8ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi14X2luZm8ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLXhfaW5mby5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAoteF9pbmZvLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLXhfaW5mby5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAoteF9pbmZvLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmgKLXhfaW5mby5vOiAuLi9jcnlwdGxpYi5oIHhfaW5mby5jCi14X2xvbmcubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLXhfbG9uZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMXQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXhfbG9uZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXhfbG9uZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLXhfbG9uZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLXhfbG9uZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAoteF9sb25nLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAoteF9sb25nLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi14X2xvbmcubzogLi4vY3J5cHRsaWIuaCB4X2xvbmcuYwoteF9uYW1lLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi14X25hbWUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjF0LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi14X25hbWUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAoteF9uYW1lLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi14X25hbWUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAoteF9uYW1lLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLXhfbmFtZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi14X25hbWUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi14X25hbWUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLXhfbmFtZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAoteF9uYW1lLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLXhfbmFtZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAoteF9uYW1lLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmgKLXhfbmFtZS5vOiAuLi9jcnlwdGxpYi5oIHhfbmFtZS5jCi14X3BrZXkubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLXhfcGtleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMV9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXhfcGtleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi14X3BrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLXhfcGtleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi14X3BrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAoteF9wa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLXhfcGtleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLXhfcGtleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAoteF9wa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi14X3BrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAoteF9wa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi14X3BrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAoteF9wa2V5Lm86IC4uL2NyeXB0bGliLmggeF9wa2V5LmMKLXhfcHVia2V5Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi14X3B1YmtleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMXQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXhfcHVia2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLXhfcHVia2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAoteF9wdWJrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAoteF9wdWJrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi14X3B1YmtleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAoteF9wdWJrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAoteF9wdWJrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAoteF9wdWJrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXhfcHVia2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAoteF9wdWJrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAoteF9wdWJrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLXhfcHVia2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmgKLXhfcHVia2V5Lm86IC4uL2NyeXB0bGliLmggeF9wdWJrZXkuYwoteF9yZXEubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLXhfcmVxLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xdC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAoteF9yZXEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAoteF9yZXEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLXhfcmVxLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLXhfcmVxLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLXhfcmVxLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLXhfcmVxLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAoteF9yZXEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLXhfcmVxLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi14X3JlcS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCi14X3JlcS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAoteF9yZXEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAoteF9yZXEubzogLi4vY3J5cHRsaWIuaCB4X3JlcS5jCi14X3NpZy5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAoteF9zaWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjF0LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi14X3NpZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi14X3NpZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAoteF9zaWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAoteF9zaWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAoteF9zaWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAoteF9zaWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi14X3NpZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAoteF9zaWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLXhfc2lnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLXhfc2lnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi14X3NpZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oCi14X3NpZy5vOiAuLi9jcnlwdGxpYi5oIHhfc2lnLmMKLXhfc3BraS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAoteF9zcGtpLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xdC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAoteF9zcGtpLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLXhfc3BraS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAoteF9zcGtpLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLXhfc3BraS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi14X3Nwa2kubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAoteF9zcGtpLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAoteF9zcGtpLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi14X3Nwa2kubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLXhfc3BraS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCi14X3Nwa2kubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLXhfc3BraS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oCi14X3Nwa2kubzogLi4vY3J5cHRsaWIuaCB4X3Nwa2kuYwoteF92YWwubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLXhfdmFsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xdC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAoteF92YWwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAoteF92YWwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLXhfdmFsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLXhfdmFsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLXhfdmFsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLXhfdmFsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAoteF92YWwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLXhfdmFsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi14X3ZhbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCi14X3ZhbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAoteF92YWwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAoteF92YWwubzogLi4vY3J5cHRsaWIuaCB4X3ZhbC5jCi14X3g1MDkubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLXhfeDUwOS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMXQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXhfeDUwOS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NvbmYuaAoteF94NTA5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAoteF94NTA5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKLXhfeDUwOS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLXhfeDUwOS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAoteF94NTA5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLXhfeDUwOS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi14X3g1MDkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXhfeDUwOS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLXhfeDUwOS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLXhfeDUwOS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi14X3g1MDkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDl2My5oCi14X3g1MDkubzogLi4vY3J5cHRsaWIuaCB4X3g1MDkuYwoteF94NTA5YS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAoteF94NTA5YS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMXQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXhfeDUwOWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAoteF94NTA5YS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAoteF94NTA5YS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi14X3g1MDlhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLXhfeDUwOWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAoteF94NTA5YS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLXhfeDUwOWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLXhfeDUwOWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLXhfeDUwOWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAoteF94NTA5YS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAoteF94NTA5YS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oCi14X3g1MDlhLm86IC4uL2NyeXB0bGliLmggeF94NTA5YS5jCmRpZmYgLS1naXQgYS9jcnlwdG8vYXNuMS9hX2JpdHN0ci5jIGIvY3J5cHRvL2FzbjEvYV9iaXRzdHIuYwppbmRleCAwZmI5Y2UwLi4zNDE3OTk2IDEwMDY0NAotLS0gYS9jcnlwdG8vYXNuMS9hX2JpdHN0ci5jCisrKyBiL2NyeXB0by9hc24xL2FfYml0c3RyLmMKQEAgLTIyMywzICsyMjMsMjYgQEAKIAlyZXR1cm4oKGEtPmRhdGFbd10mdikgIT0gMCk7CiAJfQogCisvKgorICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBiaXQgc3RyaW5nIGNvbnRhaW5zIG9ubHkgYml0cyBzcGVjaWZpZWQgYnkgCisgKiB0aGUgZmxhZ3MgdmVjdG9yLiBSZXR1cm5zIDAgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGJpdCBzZXQgaW4gJ2EnCisgKiB3aGljaCBpcyBub3Qgc3BlY2lmaWVkIGluICdmbGFncycsIDEgb3RoZXJ3aXNlLgorICogJ2xlbicgaXMgdGhlIGxlbmd0aCBvZiAnZmxhZ3MnLgorICovCitpbnQgQVNOMV9CSVRfU1RSSU5HX2NoZWNrKEFTTjFfQklUX1NUUklORyAqYSwKKwkJCSAgdW5zaWduZWQgY2hhciAqZmxhZ3MsIGludCBmbGFnc19sZW4pCisJeworCWludCBpLCBvazsKKwkvKiBDaGVjayBpZiB0aGVyZSBpcyBvbmUgYml0IHNldCBhdCBhbGwuICovCisJaWYgKCFhIHx8ICFhLT5kYXRhKSByZXR1cm4gMTsKKworCS8qIENoZWNrIGVhY2ggYnl0ZSBvZiB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIGJpdCBzdHJpbmcuICovCisJb2sgPSAxOworCWZvciAoaSA9IDA7IGkgPCBhLT5sZW5ndGggJiYgb2s7ICsraSkKKwkJeworCQl1bnNpZ25lZCBjaGFyIG1hc2sgPSBpIDwgZmxhZ3NfbGVuID8gfmZsYWdzW2ldIDogMHhmZjsKKwkJLyogV2UgYXJlIGRvbmUgaWYgdGhlcmUgaXMgYW4gdW5uZWVkZWQgYml0IHNldC4gKi8KKwkJb2sgPSAoYS0+ZGF0YVtpXSAmIG1hc2spID09IDA7CisJCX0KKwlyZXR1cm4gb2s7CisJfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FzbjEvYV9kdXAuYyBiL2NyeXB0by9hc24xL2FfZHVwLmMKaW5kZXggMTk5ZDUwZi4uZDk4OTkyNSAxMDA2NDQKLS0tIGEvY3J5cHRvL2FzbjEvYV9kdXAuYworKysgYi9jcnlwdG8vYXNuMS9hX2R1cC5jCkBAIC02Miw3ICs2Miw3IEBACiAKICNpZm5kZWYgTk9fT0xEX0FTTjEKIAotdm9pZCAqQVNOMV9kdXAoaTJkX29mX3ZvaWQgKmkyZCwgZDJpX29mX3ZvaWQgKmQyaSwgY2hhciAqeCkKK3ZvaWQgKkFTTjFfZHVwKGkyZF9vZl92b2lkICppMmQsIGQyaV9vZl92b2lkICpkMmksIHZvaWQgKngpCiAJewogCXVuc2lnbmVkIGNoYXIgKmIsKnA7CiAJY29uc3QgdW5zaWduZWQgY2hhciAqcDI7CmRpZmYgLS1naXQgYS9jcnlwdG8vYXNuMS9hX2dlbnRtLmMgYi9jcnlwdG8vYXNuMS9hX2dlbnRtLmMKaW5kZXggZGVmNzkwNi4uYzc5YzZmNSAxMDA2NDQKLS0tIGEvY3J5cHRvL2FzbjEvYV9nZW50bS5jCisrKyBiL2NyeXB0by9hc24xL2FfZ2VudG0uYwpAQCAtMTE3LDggKzExNyw4IEBACiAKIGludCBBU04xX0dFTkVSQUxJWkVEVElNRV9jaGVjayhBU04xX0dFTkVSQUxJWkVEVElNRSAqZCkKIAl7Ci0Jc3RhdGljIGludCBtaW5bOV09eyAwLCAwLCAxLCAxLCAwLCAwLCAwLCAwLCAwfTsKLQlzdGF0aWMgaW50IG1heFs5XT17OTksIDk5LDEyLDMxLDIzLDU5LDU5LDEyLDU5fTsKKwlzdGF0aWMgY29uc3QgaW50IG1pbls5XT17IDAsIDAsIDEsIDEsIDAsIDAsIDAsIDAsIDB9OworCXN0YXRpYyBjb25zdCBpbnQgbWF4WzldPXs5OSwgOTksMTIsMzEsMjMsNTksNTksMTIsNTl9OwogCWNoYXIgKmE7CiAJaW50IG4saSxsLG87CiAKQEAgLTE3Niw2ICsxNzYsMTEgQEAKIAkJCW8rKzsKIAkJCX0KIAkJfQorCWVsc2UKKwkJeworCQkvKiBNaXNzaW5nIHRpbWUgem9uZSBpbmZvcm1hdGlvbi4gKi8KKwkJZ290byBlcnI7CisJCX0KIAlyZXR1cm4obyA9PSBsKTsKIGVycjoKIAlyZXR1cm4oMCk7CkBAIC0yMDYsNiArMjExLDEyIEBACiBBU04xX0dFTkVSQUxJWkVEVElNRSAqQVNOMV9HRU5FUkFMSVpFRFRJTUVfc2V0KEFTTjFfR0VORVJBTElaRURUSU1FICpzLAogCSAgICAgdGltZV90IHQpCiAJeworCQlyZXR1cm4gQVNOMV9HRU5FUkFMSVpFRFRJTUVfYWRqKHMsIHQsIDAsIDApOworCX0KKworQVNOMV9HRU5FUkFMSVpFRFRJTUUgKkFTTjFfR0VORVJBTElaRURUSU1FX2FkaihBU04xX0dFTkVSQUxJWkVEVElNRSAqcywKKwkgICAgIHRpbWVfdCB0LCBpbnQgb2Zmc2V0X2RheSwgbG9uZyBvZmZzZXRfc2VjKQorCXsKIAljaGFyICpwOwogCXN0cnVjdCB0bSAqdHM7CiAJc3RydWN0IHRtIGRhdGE7CkBAIC0yMjAsMTMgKzIzMSwxOSBAQAogCWlmICh0cyA9PSBOVUxMKQogCQlyZXR1cm4oTlVMTCk7CiAKKwlpZiAob2Zmc2V0X2RheSB8fCBvZmZzZXRfc2VjKQorCQl7IAorCQlpZiAoIU9QRU5TU0xfZ210aW1lX2Fkaih0cywgb2Zmc2V0X2RheSwgb2Zmc2V0X3NlYykpCisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCiAJcD0oY2hhciAqKXMtPmRhdGE7CiAJaWYgKChwID09IE5VTEwpIHx8ICgoc2l6ZV90KXMtPmxlbmd0aCA8IGxlbikpCiAJCXsKIAkJcD1PUEVOU1NMX21hbGxvYyhsZW4pOwogCQlpZiAocCA9PSBOVUxMKQogCQkJewotCQkJQVNOMWVycihBU04xX0ZfQVNOMV9HRU5FUkFMSVpFRFRJTUVfU0VULAorCQkJQVNOMWVycihBU04xX0ZfQVNOMV9HRU5FUkFMSVpFRFRJTUVfQURKLAogCQkJCUVSUl9SX01BTExPQ19GQUlMVVJFKTsKIAkJCXJldHVybihOVUxMKTsKIAkJCX0KZGlmZiAtLWdpdCBhL2NyeXB0by9hc24xL2FfaGRyLmMgYi9jcnlwdG8vYXNuMS9hX2hkci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWMyYTdiLi4wMDAwMDAwCi0tLSBhL2NyeXB0by9hc24xL2FfaGRyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotLyogY3J5cHRvL2FzbjEvYV9oZHIuYyAqLwotLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgotICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgotICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgotICogCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKLSAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKLSAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgotICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcwotICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0gKiAKLSAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCi0gKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCi0gKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCi0gKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgotICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCi0gKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5Ci0gKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgotICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5Ci0gKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KLSAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAotICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKLSAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqIAotICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKLSAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQotICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQotICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlICJjcnlwdGxpYi5oIgotI2luY2x1ZGUgPG9wZW5zc2wvYXNuMV9tYWMuaD4KLSNpbmNsdWRlIDxvcGVuc3NsL2FzbjEuaD4KLQotaW50IGkyZF9BU04xX0hFQURFUihBU04xX0hFQURFUiAqYSwgdW5zaWduZWQgY2hhciAqKnBwKQotCXsKLQlNX0FTTjFfSTJEX3ZhcnMoYSk7Ci0KLQlNX0FTTjFfSTJEX2xlbihhLT5oZWFkZXIsCWkyZF9BU04xX09DVEVUX1NUUklORyk7Ci0JTV9BU04xX0kyRF9sZW4oYS0+ZGF0YSwJCWEtPm1ldGgtPmkyZCk7Ci0KLQlNX0FTTjFfSTJEX3NlcV90b3RhbCgpOwotCi0JTV9BU04xX0kyRF9wdXQoYS0+aGVhZGVyLAlpMmRfQVNOMV9PQ1RFVF9TVFJJTkcpOwotCU1fQVNOMV9JMkRfcHV0KGEtPmRhdGEsCQlhLT5tZXRoLT5pMmQpOwotCi0JTV9BU04xX0kyRF9maW5pc2goKTsKLQl9Ci0KLUFTTjFfSEVBREVSICpkMmlfQVNOMV9IRUFERVIoQVNOMV9IRUFERVIgKiphLCBjb25zdCB1bnNpZ25lZCBjaGFyICoqcHAsCi0JICAgICBsb25nIGxlbmd0aCkKLQl7Ci0JTV9BU04xX0QySV92YXJzKGEsQVNOMV9IRUFERVIgKixBU04xX0hFQURFUl9uZXcpOwotCi0JTV9BU04xX0QySV9Jbml0KCk7Ci0gICAgICAgIE1fQVNOMV9EMklfc3RhcnRfc2VxdWVuY2UoKTsKLSAgICAgICAgTV9BU04xX0QySV9nZXRfeChBU04xX09DVEVUX1NUUklORyxyZXQtPmhlYWRlcixkMmlfQVNOMV9PQ1RFVF9TVFJJTkcpOwotCWlmIChyZXQtPm1ldGggIT0gTlVMTCkKLQkJewotCQlNX0FTTjFfRDJJX2dldF94KHZvaWQscmV0LT5kYXRhLHJldC0+bWV0aC0+ZDJpKTsKLQkJfQotCWVsc2UKLQkJewotCQlpZiAoYSAhPSBOVUxMKSAoKmEpPXJldDsKLQkJcmV0dXJuKHJldCk7Ci0JCX0KLSAgICAgICAgTV9BU04xX0QySV9GaW5pc2goYSxBU04xX0hFQURFUl9mcmVlLEFTTjFfRl9EMklfQVNOMV9IRUFERVIpOwotCX0KLQotQVNOMV9IRUFERVIgKkFTTjFfSEVBREVSX25ldyh2b2lkKQotCXsKLQlBU04xX0hFQURFUiAqcmV0PU5VTEw7Ci0JQVNOMV9DVFggYzsKLQotCU1fQVNOMV9OZXdfTWFsbG9jKHJldCxBU04xX0hFQURFUik7Ci0JTV9BU04xX05ldyhyZXQtPmhlYWRlcixNX0FTTjFfT0NURVRfU1RSSU5HX25ldyk7Ci0JcmV0LT5tZXRoPU5VTEw7Ci0JcmV0LT5kYXRhPU5VTEw7Ci0JcmV0dXJuKHJldCk7Ci0gICAgICAgIE1fQVNOMV9OZXdfRXJyb3IoQVNOMV9GX0FTTjFfSEVBREVSX05FVyk7Ci0JfQotCi12b2lkIEFTTjFfSEVBREVSX2ZyZWUoQVNOMV9IRUFERVIgKmEpCi0JewotCWlmIChhID09IE5VTEwpIHJldHVybjsKLQlNX0FTTjFfT0NURVRfU1RSSU5HX2ZyZWUoYS0+aGVhZGVyKTsKLQlpZiAoYS0+bWV0aCAhPSBOVUxMKQotCQlhLT5tZXRoLT5kZXN0cm95KGEtPmRhdGEpOwotCU9QRU5TU0xfZnJlZShhKTsKLQl9CmRpZmYgLS1naXQgYS9jcnlwdG8vYXNuMS9hX2ludC5jIGIvY3J5cHRvL2FzbjEvYV9pbnQuYwppbmRleCBmOGQxOThlLi5jNmZkMjA0IDEwMDY0NAotLS0gYS9jcnlwdG8vYXNuMS9hX2ludC5jCisrKyBiL2NyeXB0by9hc24xL2FfaW50LmMKQEAgLTYxLDEwICs2MSwxMCBAQAogI2luY2x1ZGUgPG9wZW5zc2wvYXNuMS5oPgogI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KIAotQVNOMV9JTlRFR0VSICpBU04xX0lOVEVHRVJfZHVwKEFTTjFfSU5URUdFUiAqeCkKK0FTTjFfSU5URUdFUiAqQVNOMV9JTlRFR0VSX2R1cChjb25zdCBBU04xX0lOVEVHRVIgKngpCiB7IHJldHVybiBNX0FTTjFfSU5URUdFUl9kdXAoeCk7fQogCi1pbnQgQVNOMV9JTlRFR0VSX2NtcChBU04xX0lOVEVHRVIgKngsIEFTTjFfSU5URUdFUiAqeSkKK2ludCBBU04xX0lOVEVHRVJfY21wKGNvbnN0IEFTTjFfSU5URUdFUiAqeCwgY29uc3QgQVNOMV9JTlRFR0VSICp5KQogCXsgCiAJaW50IG5lZywgcmV0OwogCS8qIENvbXBhcmUgc2lnbnMgKi8KQEAgLTM3Myw3ICszNzMsNyBAQAogCXJldHVybigxKTsKIAl9CiAKLWxvbmcgQVNOMV9JTlRFR0VSX2dldChBU04xX0lOVEVHRVIgKmEpCitsb25nIEFTTjFfSU5URUdFUl9nZXQoY29uc3QgQVNOMV9JTlRFR0VSICphKQogCXsKIAlpbnQgbmVnPTAsaTsKIAlsb25nIHI9MDsKQEAgLTQwMiw3ICs0MDIsNyBAQAogCXJldHVybihyKTsKIAl9CiAKLUFTTjFfSU5URUdFUiAqQk5fdG9fQVNOMV9JTlRFR0VSKEJJR05VTSAqYm4sIEFTTjFfSU5URUdFUiAqYWkpCitBU04xX0lOVEVHRVIgKkJOX3RvX0FTTjFfSU5URUdFUihjb25zdCBCSUdOVU0gKmJuLCBBU04xX0lOVEVHRVIgKmFpKQogCXsKIAlBU04xX0lOVEVHRVIgKnJldDsKIAlpbnQgbGVuLGo7CkBAIC00NDQsNyArNDQ0LDcgQEAKIAlyZXR1cm4oTlVMTCk7CiAJfQogCi1CSUdOVU0gKkFTTjFfSU5URUdFUl90b19CTihBU04xX0lOVEVHRVIgKmFpLCBCSUdOVU0gKmJuKQorQklHTlVNICpBU04xX0lOVEVHRVJfdG9fQk4oY29uc3QgQVNOMV9JTlRFR0VSICphaSwgQklHTlVNICpibikKIAl7CiAJQklHTlVNICpyZXQ7CiAKZGlmZiAtLWdpdCBhL2NyeXB0by9hc24xL2FfbWV0aC5jIGIvY3J5cHRvL2FzbjEvYV9tZXRoLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwYmVhOTEuLjAwMDAwMDAKLS0tIGEvY3J5cHRvL2FzbjEvYV9tZXRoLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vKiBjcnlwdG8vYXNuMS9hX21ldGguYyAqLwotLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgotICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgotICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgotICogCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKLSAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKLSAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgotICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcwotICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0gKiAKLSAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCi0gKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCi0gKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCi0gKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgotICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCi0gKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5Ci0gKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgotICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5Ci0gKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KLSAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAotICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKLSAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqIAotICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKLSAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQotICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQotICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlICJjcnlwdGxpYi5oIgotI2luY2x1ZGUgPG9wZW5zc2wvYnVmZmVyLmg+Ci0jaW5jbHVkZSA8b3BlbnNzbC9hc24xLmg+Ci0KLXN0YXRpYyAgQVNOMV9NRVRIT0QgaWE1c3RyaW5nX21ldGg9ewotCShJMkRfT0Yodm9pZCkpCWkyZF9BU04xX0lBNVNUUklORywKLQkoRDJJX09GKHZvaWQpKQlkMmlfQVNOMV9JQTVTVFJJTkcsCi0JKHZvaWQgKigqKSh2b2lkKSlBU04xX1NUUklOR19uZXcsCi0JKHZvaWQgKCopKHZvaWQgKikpQVNOMV9TVFJJTkdfZnJlZX07Ci0KLXN0YXRpYyAgQVNOMV9NRVRIT0QgYml0X3N0cmluZ19tZXRoPXsKLQkoSTJEX09GKHZvaWQpKQlpMmRfQVNOMV9CSVRfU1RSSU5HLAotCShEMklfT0Yodm9pZCkpCWQyaV9BU04xX0JJVF9TVFJJTkcsCi0JKHZvaWQgKigqKSh2b2lkKSlBU04xX1NUUklOR19uZXcsCi0JKHZvaWQgKCopKHZvaWQgKikpQVNOMV9TVFJJTkdfZnJlZX07Ci0KLUFTTjFfTUVUSE9EICpBU04xX0lBNVNUUklOR19hc24xX21ldGgodm9pZCkKLQl7Ci0JcmV0dXJuKCZpYTVzdHJpbmdfbWV0aCk7Ci0JfQotCi1BU04xX01FVEhPRCAqQVNOMV9CSVRfU1RSSU5HX2FzbjFfbWV0aCh2b2lkKQotCXsKLQlyZXR1cm4oJmJpdF9zdHJpbmdfbWV0aCk7Ci0JfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FzbjEvYV9vYmplY3QuYyBiL2NyeXB0by9hc24xL2Ffb2JqZWN0LmMKaW5kZXggZDE2OWY4Yy4uZTVmYmU3YyAxMDA2NDQKLS0tIGEvY3J5cHRvL2FzbjEvYV9vYmplY3QuYworKysgYi9jcnlwdG8vYXNuMS9hX29iamVjdC5jCkBAIC0yODEsOCArMjgxLDYgQEAKIAlyZXR1cm4gcmV0OwogZXJyOgogCUFTTjFlcnIoQVNOMV9GX0QySV9BU04xX09CSkVDVCxpKTsKLQlpZiAoKHJldCAhPSBOVUxMKSAmJiAoKGEgPT0gTlVMTCkgfHwgKCphICE9IHJldCkpKQotCQlBU04xX09CSkVDVF9mcmVlKHJldCk7CiAJcmV0dXJuKE5VTEwpOwogfQogQVNOMV9PQkpFQ1QgKmMyaV9BU04xX09CSkVDVChBU04xX09CSkVDVCAqKmEsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKipwcCwKQEAgLTI5MCwxMyArMjg4LDE0IEBACiAJewogCUFTTjFfT0JKRUNUICpyZXQ9TlVMTDsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpwOworCXVuc2lnbmVkIGNoYXIgKmRhdGE7CiAJaW50IGk7Ci0JLyogU2FuaXR5IGNoZWNrIE9JRCBlbmNvZGluZzogY2FuJ3QgaGF2ZSAweDgwIGluIHN1YmlkZW50aWZpZXJzLCBzZWU6Ci0JICogWC42OTAgOC4xOS4yCisJLyogU2FuaXR5IGNoZWNrIE9JRCBlbmNvZGluZzogY2FuJ3QgaGF2ZSBsZWFkaW5nIDB4ODAgaW4KKwkgKiBzdWJpZGVudGlmaWVycywgc2VlOiBYLjY5MCA4LjE5LjIKIAkgKi8KIAlmb3IgKGkgPSAwLCBwID0gKnBwICsgMTsgaSA8IGxlbiAtIDE7IGkrKywgcCsrKQogCQl7Ci0JCWlmICgqcCA9PSAweDgwKQorCQlpZiAoKnAgPT0gMHg4MCAmJiAoIWkgfHwgIShwWy0xXSAmIDB4ODApKSkKIAkJCXsKIAkJCUFTTjFlcnIoQVNOMV9GX0MySV9BU04xX09CSkVDVCxBU04xX1JfSU5WQUxJRF9PQkpFQ1RfRU5DT0RJTkcpOwogCQkJcmV0dXJuIE5VTEw7CkBAIC0zMTMsMTUgKzMxMiwyMiBAQAogCWVsc2UJcmV0PSgqYSk7CiAKIAlwPSAqcHA7Ci0JaWYgKChyZXQtPmRhdGEgPT0gTlVMTCkgfHwgKHJldC0+bGVuZ3RoIDwgbGVuKSkKKwkvKiBkZXRhY2ggZGF0YSBmcm9tIG9iamVjdCAqLworCWRhdGEgPSAodW5zaWduZWQgY2hhciAqKXJldC0+ZGF0YTsKKwlyZXQtPmRhdGEgPSBOVUxMOworCS8qIG9uY2UgZGV0YWNoZWQgd2UgY2FuIGNoYW5nZSBpdCAqLworCWlmICgoZGF0YSA9PSBOVUxMKSB8fCAocmV0LT5sZW5ndGggPCBsZW4pKQogCQl7Ci0JCWlmIChyZXQtPmRhdGEgIT0gTlVMTCkgT1BFTlNTTF9mcmVlKHJldC0+ZGF0YSk7Ci0JCXJldC0+ZGF0YT0odW5zaWduZWQgY2hhciAqKU9QRU5TU0xfbWFsbG9jKGxlbiA/IChpbnQpbGVuIDogMSk7Ci0JCXJldC0+ZmxhZ3N8PUFTTjFfT0JKRUNUX0ZMQUdfRFlOQU1JQ19EQVRBOwotCQlpZiAocmV0LT5kYXRhID09IE5VTEwpCisJCXJldC0+bGVuZ3RoPTA7CisJCWlmIChkYXRhICE9IE5VTEwpIE9QRU5TU0xfZnJlZShkYXRhKTsKKwkJZGF0YT0odW5zaWduZWQgY2hhciAqKU9QRU5TU0xfbWFsbG9jKGxlbiA/IChpbnQpbGVuIDogMSk7CisJCWlmIChkYXRhID09IE5VTEwpCiAJCQl7IGk9RVJSX1JfTUFMTE9DX0ZBSUxVUkU7IGdvdG8gZXJyOyB9CisJCXJldC0+ZmxhZ3N8PUFTTjFfT0JKRUNUX0ZMQUdfRFlOQU1JQ19EQVRBOwogCQl9Ci0JbWVtY3B5KHJldC0+ZGF0YSxwLChpbnQpbGVuKTsKKwltZW1jcHkoZGF0YSxwLChpbnQpbGVuKTsKKwkvKiByZWF0dGFjaCBkYXRhIHRvIG9iamVjdCwgYWZ0ZXIgd2hpY2ggaXQgcmVtYWlucyBjb25zdCAqLworCXJldC0+ZGF0YSAgPWRhdGE7CiAJcmV0LT5sZW5ndGg9KGludClsZW47CiAJcmV0LT5zbj1OVUxMOwogCXJldC0+bG49TlVMTDsKQEAgLTM3MCw3ICszNzYsNyBAQAogCQl9CiAJaWYgKGEtPmZsYWdzICYgQVNOMV9PQkpFQ1RfRkxBR19EWU5BTUlDX0RBVEEpCiAJCXsKLQkJaWYgKGEtPmRhdGEgIT0gTlVMTCkgT1BFTlNTTF9mcmVlKGEtPmRhdGEpOworCQlpZiAoYS0+ZGF0YSAhPSBOVUxMKSBPUEVOU1NMX2ZyZWUoKHZvaWQgKilhLT5kYXRhKTsKIAkJYS0+ZGF0YT1OVUxMOwogCQlhLT5sZW5ndGg9MDsKIAkJfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FzbjEvYV9vY3RldC5jIGIvY3J5cHRvL2FzbjEvYV9vY3RldC5jCmluZGV4IDI0ZmQwZjguLmU4NzI1ZTQgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hc24xL2Ffb2N0ZXQuYworKysgYi9jcnlwdG8vYXNuMS9hX29jdGV0LmMKQEAgLTYwLDEwICs2MCwxMCBAQAogI2luY2x1ZGUgImNyeXB0bGliLmgiCiAjaW5jbHVkZSA8b3BlbnNzbC9hc24xLmg+CiAKLUFTTjFfT0NURVRfU1RSSU5HICpBU04xX09DVEVUX1NUUklOR19kdXAoQVNOMV9PQ1RFVF9TVFJJTkcgKngpCitBU04xX09DVEVUX1NUUklORyAqQVNOMV9PQ1RFVF9TVFJJTkdfZHVwKGNvbnN0IEFTTjFfT0NURVRfU1RSSU5HICp4KQogeyByZXR1cm4gTV9BU04xX09DVEVUX1NUUklOR19kdXAoeCk7IH0KIAotaW50IEFTTjFfT0NURVRfU1RSSU5HX2NtcChBU04xX09DVEVUX1NUUklORyAqYSwgQVNOMV9PQ1RFVF9TVFJJTkcgKmIpCitpbnQgQVNOMV9PQ1RFVF9TVFJJTkdfY21wKGNvbnN0IEFTTjFfT0NURVRfU1RSSU5HICphLCBjb25zdCBBU04xX09DVEVUX1NUUklORyAqYikKIHsgcmV0dXJuIE1fQVNOMV9PQ1RFVF9TVFJJTkdfY21wKGEsIGIpOyB9CiAKIGludCBBU04xX09DVEVUX1NUUklOR19zZXQoQVNOMV9PQ1RFVF9TVFJJTkcgKngsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmQsIGludCBsZW4pCmRpZmYgLS1naXQgYS9jcnlwdG8vYXNuMS9hX3NldC5jIGIvY3J5cHRvL2FzbjEvYV9zZXQuYwppbmRleCA5NTg1NThjLi5kNzI2YzhkIDEwMDY0NAotLS0gYS9jcnlwdG8vYXNuMS9hX3NldC5jCisrKyBiL2NyeXB0by9hc24xL2Ffc2V0LmMKQEAgLTg1LDggKzg1LDkgQEAKICAgICB9CiAKIC8qIGludCBpc19zZXQ6ICBpZiBUUlVFLCB0aGVuIHNvcnQgdGhlIGNvbnRlbnRzIChpLmUuIGl0IGlzbid0IGEgU0VRVUVOQ0UpICAgICovCi1pbnQgaTJkX0FTTjFfU0VUKFNUQUNLICphLCB1bnNpZ25lZCBjaGFyICoqcHAsIGkyZF9vZl92b2lkICppMmQsIGludCBleF90YWcsCi0JCSBpbnQgZXhfY2xhc3MsIGludCBpc19zZXQpCitpbnQgaTJkX0FTTjFfU0VUKFNUQUNLX09GKE9QRU5TU0xfQkxPQ0spICphLCB1bnNpZ25lZCBjaGFyICoqcHAsCisJCSBpMmRfb2Zfdm9pZCAqaTJkLCBpbnQgZXhfdGFnLCBpbnQgZXhfY2xhc3MsCisJCSBpbnQgaXNfc2V0KQogCXsKIAlpbnQgcmV0PTAscjsKIAlpbnQgaTsKQEAgLTk2LDggKzk3LDggQEAKICAgICAgICAgaW50IHRvdFNpemU7CiAKIAlpZiAoYSA9PSBOVUxMKSByZXR1cm4oMCk7Ci0JZm9yIChpPXNrX251bShhKS0xOyBpPj0wOyBpLS0pCi0JCXJldCs9aTJkKHNrX3ZhbHVlKGEsaSksTlVMTCk7CisJZm9yIChpPXNrX09QRU5TU0xfQkxPQ0tfbnVtKGEpLTE7IGk+PTA7IGktLSkKKwkJcmV0Kz1pMmQoc2tfT1BFTlNTTF9CTE9DS192YWx1ZShhLGkpLE5VTEwpOwogCXI9QVNOMV9vYmplY3Rfc2l6ZSgxLHJldCxleF90YWcpOwogCWlmIChwcCA9PSBOVUxMKSByZXR1cm4ocik7CiAKQEAgLTEwOCwxMCArMTA5LDEwIEBACiAJLyogQW5kIHRoZW4gYWdhaW4gYnkgQmVuICovCiAJLyogQW5kIGFnYWluIGJ5IFN0ZXZlICovCiAKLQlpZighaXNfc2V0IHx8IChza19udW0oYSkgPCAyKSkKKwlpZighaXNfc2V0IHx8IChza19PUEVOU1NMX0JMT0NLX251bShhKSA8IDIpKQogCQl7Ci0JCWZvciAoaT0wOyBpPHNrX251bShhKTsgaSsrKQotICAgICAgICAgICAgICAgIAlpMmQoc2tfdmFsdWUoYSxpKSwmcCk7CisJCWZvciAoaT0wOyBpPHNrX09QRU5TU0xfQkxPQ0tfbnVtKGEpOyBpKyspCisgICAgICAgICAgICAgICAgCWkyZChza19PUEVOU1NMX0JMT0NLX3ZhbHVlKGEsaSksJnApOwogCiAJCSpwcD1wOwogCQlyZXR1cm4ocik7CkBAIC0xMTksMTcgKzEyMCwxNyBAQAogCiAgICAgICAgIHBTdGFydCAgPSBwOyAvKiBDYXRjaCB0aGUgYmVnIG9mIFNldGJsb2JzKi8KIAkJLyogSW4gdGhpcyBhcnJheSB3ZSB3aWxsIHN0b3JlIHRoZSBTRVQgYmxvYnMgKi8KLQkJcmdTZXRCbG9iID0gKE1ZQkxPQiAqKU9QRU5TU0xfbWFsbG9jKHNrX251bShhKSAqIHNpemVvZihNWUJMT0IpKTsKKwkJcmdTZXRCbG9iID0gT1BFTlNTTF9tYWxsb2Moc2tfT1BFTlNTTF9CTE9DS19udW0oYSkgKiBzaXplb2YoTVlCTE9CKSk7CiAJCWlmIChyZ1NldEJsb2IgPT0gTlVMTCkKIAkJCXsKIAkJCUFTTjFlcnIoQVNOMV9GX0kyRF9BU04xX1NFVCxFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CiAJCQlyZXR1cm4oMCk7CiAJCQl9CiAKLSAgICAgICAgZm9yIChpPTA7IGk8c2tfbnVtKGEpOyBpKyspCisgICAgICAgIGZvciAoaT0wOyBpPHNrX09QRU5TU0xfQkxPQ0tfbnVtKGEpOyBpKyspCiAJICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmdTZXRCbG9iW2ldLnBiRGF0YSA9IHA7ICAvKiBjYXRjaCBlYWNoIHNldCBlbmNvZGUgYmxvYiAqLwotICAgICAgICAgICAgICAgIGkyZChza192YWx1ZShhLGkpLCZwKTsKKyAgICAgICAgICAgICAgICBpMmQoc2tfT1BFTlNTTF9CTE9DS192YWx1ZShhLGkpLCZwKTsKICAgICAgICAgICAgICAgICByZ1NldEJsb2JbaV0uY2JEYXRhID0gcCAtIHJnU2V0QmxvYltpXS5wYkRhdGE7IC8qIExlbmd0aCBvZiB0aGlzCiBTZXRCbG9iCiAqLwpAQCAtMTM5LDcgKzE0MCw3IEBACiAKICAvKiBOb3cgd2UgaGF2ZSB0byBzb3J0IHRoZSBibG9icy4gSSBhbSB1c2luZyBhIHNpbXBsZSBhbGdvLgogICAgICpTb3J0IHB0cnMgKkNvcHkgdG8gdGVtcC1tZW0gKkNvcHkgZnJvbSB0ZW1wLW1lbSB0byB1c2VyLW1lbSovCi0gICAgICAgIHFzb3J0KCByZ1NldEJsb2IsIHNrX251bShhKSwgc2l6ZW9mKE1ZQkxPQiksIFNldEJsb2JDbXApOworICAgICAgICBxc29ydCggcmdTZXRCbG9iLCBza19PUEVOU1NMX0JMT0NLX251bShhKSwgc2l6ZW9mKE1ZQkxPQiksIFNldEJsb2JDbXApOwogCQlpZiAoIShwVGVtcE1lbSA9IE9QRU5TU0xfbWFsbG9jKHRvdFNpemUpKSkKIAkJCXsKIAkJCUFTTjFlcnIoQVNOMV9GX0kyRF9BU04xX1NFVCxFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CkBAIC0xNDgsNyArMTQ5LDcgQEAKIAogLyogQ29weSB0byB0ZW1wIG1lbSAqLwogICAgICAgICBwID0gcFRlbXBNZW07Ci0gICAgICAgIGZvcihpPTA7IGk8c2tfbnVtKGEpOyArK2kpCisgICAgICAgIGZvcihpPTA7IGk8c2tfT1BFTlNTTF9CTE9DS19udW0oYSk7ICsraSkKIAkJewogICAgICAgICAgICAgICAgIG1lbWNweShwLCByZ1NldEJsb2JbaV0ucGJEYXRhLCByZ1NldEJsb2JbaV0uY2JEYXRhKTsKICAgICAgICAgICAgICAgICBwICs9IHJnU2V0QmxvYltpXS5jYkRhdGE7CkBAIC0xNjIsMTYgKzE2MywxOCBAQAogICAgICAgICByZXR1cm4ocik7CiAgICAgICAgIH0KIAotU1RBQ0sgKmQyaV9BU04xX1NFVChTVEFDSyAqKmEsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKipwcCwgbG9uZyBsZW5ndGgsCi0JCSAgICBkMmlfb2Zfdm9pZCAqZDJpLCB2b2lkICgqZnJlZV9mdW5jKSh2b2lkICopLCBpbnQgZXhfdGFnLAotCQkgICAgaW50IGV4X2NsYXNzKQorU1RBQ0tfT0YoT1BFTlNTTF9CTE9DSykgKmQyaV9BU04xX1NFVChTVEFDS19PRihPUEVOU1NMX0JMT0NLKSAqKmEsCisJCQkgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICoqcHAsCisJCQkgICAgICBsb25nIGxlbmd0aCwgZDJpX29mX3ZvaWQgKmQyaSwKKwkJCSAgICAgIHZvaWQgKCpmcmVlX2Z1bmMpKE9QRU5TU0xfQkxPQ0spLCBpbnQgZXhfdGFnLAorCQkJICAgICAgaW50IGV4X2NsYXNzKQogCXsKIAlBU04xX2NvbnN0X0NUWCBjOwotCVNUQUNLICpyZXQ9TlVMTDsKKwlTVEFDS19PRihPUEVOU1NMX0JMT0NLKSAqcmV0PU5VTEw7CiAKIAlpZiAoKGEgPT0gTlVMTCkgfHwgKCgqYSkgPT0gTlVMTCkpCiAJCXsKLQkJaWYgKChyZXQ9c2tfbmV3X251bGwoKSkgPT0gTlVMTCkKKwkJaWYgKChyZXQ9c2tfT1BFTlNTTF9CTE9DS19uZXdfbnVsbCgpKSA9PSBOVUxMKQogCQkJewogCQkJQVNOMWVycihBU04xX0ZfRDJJX0FTTjFfU0VULEVSUl9SX01BTExPQ19GQUlMVVJFKTsKIAkJCWdvdG8gZXJyOwpAQCAtMjE2LDEwICsyMTksMTAgQEAKIAkJaWYgKChzPWQyaShOVUxMLCZjLnAsYy5zbGVuKSkgPT0gTlVMTCkKIAkJCXsKIAkJCUFTTjFlcnIoQVNOMV9GX0QySV9BU04xX1NFVCxBU04xX1JfRVJST1JfUEFSU0lOR19TRVRfRUxFTUVOVCk7Ci0JCQlhc24xX2FkZF9lcnJvcigqcHAsKGludCkoYy5xLSAqcHApKTsKKwkJCWFzbjFfYWRkX2Vycm9yKCpwcCwoaW50KShjLnAtICpwcCkpOwogCQkJZ290byBlcnI7CiAJCQl9Ci0JCWlmICghc2tfcHVzaChyZXQscykpIGdvdG8gZXJyOworCQlpZiAoIXNrX09QRU5TU0xfQkxPQ0tfcHVzaChyZXQscykpIGdvdG8gZXJyOwogCQl9CiAJaWYgKGEgIT0gTlVMTCkgKCphKT1yZXQ7CiAJKnBwPWMucDsKQEAgLTIyOCw5ICsyMzEsOSBAQAogCWlmICgocmV0ICE9IE5VTEwpICYmICgoYSA9PSBOVUxMKSB8fCAoKmEgIT0gcmV0KSkpCiAJCXsKIAkJaWYgKGZyZWVfZnVuYyAhPSBOVUxMKQotCQkJc2tfcG9wX2ZyZWUocmV0LGZyZWVfZnVuYyk7CisJCQlza19PUEVOU1NMX0JMT0NLX3BvcF9mcmVlKHJldCxmcmVlX2Z1bmMpOwogCQllbHNlCi0JCQlza19mcmVlKHJldCk7CisJCQlza19PUEVOU1NMX0JMT0NLX2ZyZWUocmV0KTsKIAkJfQogCXJldHVybihOVUxMKTsKIAl9CmRpZmYgLS1naXQgYS9jcnlwdG8vYXNuMS9hX3NpZ24uYyBiL2NyeXB0by9hc24xL2Ffc2lnbi5jCmluZGV4IDRkZWU0NWYuLmZmNjNiZmMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hc24xL2Ffc2lnbi5jCisrKyBiL2NyeXB0by9hc24xL2Ffc2lnbi5jCkBAIC0xMjMsNiArMTIzLDcgQEAKICNpbmNsdWRlIDxvcGVuc3NsL3g1MDkuaD4KICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KICNpbmNsdWRlIDxvcGVuc3NsL2J1ZmZlci5oPgorI2luY2x1ZGUgImFzbjFfbG9jbC5oIgogCiAjaWZuZGVmIE5PX0FTTjFfT0xECiAKQEAgLTIxOCw0NSArMjE5LDQ3IEBACiAJewogCUVWUF9NRF9DVFggY3R4OwogCXVuc2lnbmVkIGNoYXIgKmJ1Zl9pbj1OVUxMLCpidWZfb3V0PU5VTEw7Ci0JaW50IGksaW5sPTAsb3V0bD0wLG91dGxsPTA7Ci0JWDUwOV9BTEdPUiAqYTsKKwlpbnQgaW5sPTAsb3V0bD0wLG91dGxsPTA7CisJaW50IHNpZ25pZCwgcGFyYW10eXBlOwogCi0JRVZQX01EX0NUWF9pbml0KCZjdHgpOwotCWZvciAoaT0wOyBpPDI7IGkrKykKKwlpZiAodHlwZSA9PSBOVUxMKQogCQl7Ci0JCWlmIChpID09IDApCi0JCQlhPWFsZ29yMTsKLQkJZWxzZQotCQkJYT1hbGdvcjI7Ci0JCWlmIChhID09IE5VTEwpIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGlmICh0eXBlLT5wa2V5X3R5cGUgPT0gTklEX2RzYVdpdGhTSEExIHx8Ci0JCQl0eXBlLT5wa2V5X3R5cGUgPT0gTklEX2VjZHNhX3dpdGhfU0hBMSkKKwkJaW50IGRlZl9uaWQ7CisJCWlmIChFVlBfUEtFWV9nZXRfZGVmYXVsdF9kaWdlc3RfbmlkKHBrZXksICZkZWZfbmlkKSA+IDApCisJCQl0eXBlID0gRVZQX2dldF9kaWdlc3RieW5pZChkZWZfbmlkKTsKKwkJfQorCisJaWYgKHR5cGUgPT0gTlVMTCkKKwkJeworCQlBU04xZXJyKEFTTjFfRl9BU04xX0lURU1fU0lHTiwgQVNOMV9SX05PX0RFRkFVTFRfRElHRVNUKTsKKwkJcmV0dXJuIDA7CisJCX0KKworCWlmICh0eXBlLT5mbGFncyAmIEVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRSkKKwkJeworCQlpZiAoIXBrZXktPmFtZXRoIHx8CisJCQkhT0JKX2ZpbmRfc2lnaWRfYnlfYWxncygmc2lnbmlkLCBFVlBfTURfbmlkKHR5cGUpLAorCQkJCQkJcGtleS0+YW1ldGgtPnBrZXlfaWQpKQogCQkJewotCQkJLyogc3BlY2lhbCBjYXNlOiBSRkMgMzI3OSB0ZWxscyB1cyB0byBvbWl0ICdwYXJhbWV0ZXJzJwotCQkJICogd2l0aCBpZC1kc2Etd2l0aC1zaGExIGFuZCBlY2RzYS13aXRoLVNIQTEgKi8KLQkJCUFTTjFfVFlQRV9mcmVlKGEtPnBhcmFtZXRlcik7Ci0JCQlhLT5wYXJhbWV0ZXIgPSBOVUxMOwotCQkJfQotCQllbHNlIGlmICgoYS0+cGFyYW1ldGVyID09IE5VTEwpIHx8IAotCQkJKGEtPnBhcmFtZXRlci0+dHlwZSAhPSBWX0FTTjFfTlVMTCkpCi0JCQl7Ci0JCQlBU04xX1RZUEVfZnJlZShhLT5wYXJhbWV0ZXIpOwotCQkJaWYgKChhLT5wYXJhbWV0ZXI9QVNOMV9UWVBFX25ldygpKSA9PSBOVUxMKSBnb3RvIGVycjsKLQkJCWEtPnBhcmFtZXRlci0+dHlwZT1WX0FTTjFfTlVMTDsKLQkJCX0KLQkJQVNOMV9PQkpFQ1RfZnJlZShhLT5hbGdvcml0aG0pOwotCQlhLT5hbGdvcml0aG09T0JKX25pZDJvYmoodHlwZS0+cGtleV90eXBlKTsKLQkJaWYgKGEtPmFsZ29yaXRobSA9PSBOVUxMKQotCQkJewotCQkJQVNOMWVycihBU04xX0ZfQVNOMV9JVEVNX1NJR04sQVNOMV9SX1VOS05PV05fT0JKRUNUX1RZUEUpOwotCQkJZ290byBlcnI7Ci0JCQl9Ci0JCWlmIChhLT5hbGdvcml0aG0tPmxlbmd0aCA9PSAwKQotCQkJewotCQkJQVNOMWVycihBU04xX0ZfQVNOMV9JVEVNX1NJR04sQVNOMV9SX1RIRV9BU04xX09CSkVDVF9JREVOVElGSUVSX0lTX05PVF9LTk9XTl9GT1JfVEhJU19NRCk7Ci0JCQlnb3RvIGVycjsKKwkJCUFTTjFlcnIoQVNOMV9GX0FTTjFfSVRFTV9TSUdOLAorCQkJCUFTTjFfUl9ESUdFU1RfQU5EX0tFWV9UWVBFX05PVF9TVVBQT1JURUQpOworCQkJcmV0dXJuIDA7CiAJCQl9CiAJCX0KKwllbHNlCisJCXNpZ25pZCA9IHR5cGUtPnBrZXlfdHlwZTsKKworCWlmIChwa2V5LT5hbWV0aC0+cGtleV9mbGFncyAmIEFTTjFfUEtFWV9TSUdQQVJBTV9OVUxMKQorCQlwYXJhbXR5cGUgPSBWX0FTTjFfTlVMTDsKKwllbHNlCisJCXBhcmFtdHlwZSA9IFZfQVNOMV9VTkRFRjsKKworCWlmIChhbGdvcjEpCisJCVg1MDlfQUxHT1Jfc2V0MChhbGdvcjEsIE9CSl9uaWQyb2JqKHNpZ25pZCksIHBhcmFtdHlwZSwgTlVMTCk7CisJaWYgKGFsZ29yMikKKwkJWDUwOV9BTEdPUl9zZXQwKGFsZ29yMiwgT0JKX25pZDJvYmooc2lnbmlkKSwgcGFyYW10eXBlLCBOVUxMKTsKKworCUVWUF9NRF9DVFhfaW5pdCgmY3R4KTsKIAlpbmw9QVNOMV9pdGVtX2kyZChhc24sJmJ1Zl9pbiwgaXQpOwogCW91dGxsPW91dGw9RVZQX1BLRVlfc2l6ZShwa2V5KTsKIAlidWZfb3V0PSh1bnNpZ25lZCBjaGFyICopT1BFTlNTTF9tYWxsb2MoKHVuc2lnbmVkIGludClvdXRsKTsKQEAgLTI2NywxMiArMjcwLDcgQEAKIAkJZ290byBlcnI7CiAJCX0KIAotCWlmICghRVZQX1NpZ25Jbml0X2V4KCZjdHgsdHlwZSwgTlVMTCkpCi0JCXsKLQkJb3V0bD0wOwotCQlBU04xZXJyKEFTTjFfRl9BU04xX0lURU1fU0lHTixFUlJfUl9FVlBfTElCKTsKLQkJZ290byBlcnI7Ci0JCX0KKwlFVlBfU2lnbkluaXRfZXgoJmN0eCx0eXBlLCBOVUxMKTsKIAlFVlBfU2lnblVwZGF0ZSgmY3R4LCh1bnNpZ25lZCBjaGFyICopYnVmX2luLGlubCk7CiAJaWYgKCFFVlBfU2lnbkZpbmFsKCZjdHgsKHVuc2lnbmVkIGNoYXIgKilidWZfb3V0LAogCQkJKHVuc2lnbmVkIGludCAqKSZvdXRsLHBrZXkpKQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FzbjEvYV9zdHJuaWQuYyBiL2NyeXB0by9hc24xL2Ffc3RybmlkLmMKaW5kZXggZmU1MTViNS4uNzUzMDIxYSAxMDA2NDQKLS0tIGEvY3J5cHRvL2FzbjEvYV9zdHJuaWQuYworKysgYi9jcnlwdG8vYXNuMS9hX3N0cm5pZC5jCkBAIC02Nyw3ICs2Nyw2IEBACiBzdGF0aWMgdm9pZCBzdF9mcmVlKEFTTjFfU1RSSU5HX1RBQkxFICp0YmwpOwogc3RhdGljIGludCBza190YWJsZV9jbXAoY29uc3QgQVNOMV9TVFJJTkdfVEFCTEUgKiBjb25zdCAqYSwKIAkJCWNvbnN0IEFTTjFfU1RSSU5HX1RBQkxFICogY29uc3QgKmIpOwotc3RhdGljIGludCB0YWJsZV9jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYik7CiAKIAogLyogVGhpcyBpcyB0aGUgZ2xvYmFsIG1hc2sgZm9yIHRoZSBtYnN0cmluZyBmdW5jdGlvbnM6IHRoaXMgaXMgdXNlIHRvCkBAIC0xNTgsNyArMTU3LDcgQEAKIAogLyogVGhpcyB0YWJsZSBtdXN0IGJlIGtlcHQgaW4gTklEIG9yZGVyICovCiAKLXN0YXRpYyBBU04xX1NUUklOR19UQUJMRSB0Ymxfc3RhbmRhcmRbXSA9IHsKK3N0YXRpYyBjb25zdCBBU04xX1NUUklOR19UQUJMRSB0Ymxfc3RhbmRhcmRbXSA9IHsKIHtOSURfY29tbW9uTmFtZSwJCTEsIHViX2NvbW1vbl9uYW1lLCBESVJTVFJJTkdfVFlQRSwgMH0sCiB7TklEX2NvdW50cnlOYW1lLAkJMiwgMiwgQl9BU04xX1BSSU5UQUJMRVNUUklORywgU1RBQkxFX05PX01BU0t9LAoge05JRF9sb2NhbGl0eU5hbWUsCQkxLCB1Yl9sb2NhbGl0eV9uYW1lLCBESVJTVFJJTkdfVFlQRSwgMH0sCkBAIC0xODYsMjIgKzE4NSwyMyBAQAogCXJldHVybiAoKmEpLT5uaWQgLSAoKmIpLT5uaWQ7CiB9CiAKLXN0YXRpYyBpbnQgdGFibGVfY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCitERUNMQVJFX09CSl9CU0VBUkNIX0NNUF9GTihBU04xX1NUUklOR19UQUJMRSwgQVNOMV9TVFJJTkdfVEFCTEUsIHRhYmxlKTsKKworc3RhdGljIGludCB0YWJsZV9jbXAoY29uc3QgQVNOMV9TVFJJTkdfVEFCTEUgKmEsIGNvbnN0IEFTTjFfU1RSSU5HX1RBQkxFICpiKQogewotCWNvbnN0IEFTTjFfU1RSSU5HX1RBQkxFICpzYSA9IGEsICpzYiA9IGI7Ci0JcmV0dXJuIHNhLT5uaWQgLSBzYi0+bmlkOworCXJldHVybiBhLT5uaWQgLSBiLT5uaWQ7CiB9CiAKK0lNUExFTUVOVF9PQkpfQlNFQVJDSF9DTVBfRk4oQVNOMV9TVFJJTkdfVEFCTEUsIEFTTjFfU1RSSU5HX1RBQkxFLCB0YWJsZSk7CisKIEFTTjFfU1RSSU5HX1RBQkxFICpBU04xX1NUUklOR19UQUJMRV9nZXQoaW50IG5pZCkKIHsKIAlpbnQgaWR4OwogCUFTTjFfU1RSSU5HX1RBQkxFICp0dG1wOwogCUFTTjFfU1RSSU5HX1RBQkxFIGZuZDsKIAlmbmQubmlkID0gbmlkOwotCXR0bXAgPSAoQVNOMV9TVFJJTkdfVEFCTEUgKikgT0JKX2JzZWFyY2goKGNoYXIgKikmZm5kLAotCQkJCQkoY2hhciAqKXRibF9zdGFuZGFyZCwgCi0JCQlzaXplb2YodGJsX3N0YW5kYXJkKS9zaXplb2YoQVNOMV9TVFJJTkdfVEFCTEUpLAotCQkJc2l6ZW9mKEFTTjFfU1RSSU5HX1RBQkxFKSwgdGFibGVfY21wKTsKKwl0dG1wID0gT0JKX2JzZWFyY2hfdGFibGUoJmZuZCwgdGJsX3N0YW5kYXJkLCAKKwkJCSAgIHNpemVvZih0Ymxfc3RhbmRhcmQpL3NpemVvZihBU04xX1NUUklOR19UQUJMRSkpOwogCWlmKHR0bXApIHJldHVybiB0dG1wOwogCWlmKCFzdGFibGUpIHJldHVybiBOVUxMOwogCWlkeCA9IHNrX0FTTjFfU1RSSU5HX1RBQkxFX2ZpbmQoc3RhYmxlLCAmZm5kKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9hc24xL2FfdGltZS5jIGIvY3J5cHRvL2FzbjEvYV90aW1lLmMKaW5kZXggMTU5NjgxZi4uZTJlYjliMiAxMDA2NDQKLS0tIGEvY3J5cHRvL2FzbjEvYV90aW1lLmMKKysrIGIvY3J5cHRvL2FzbjEvYV90aW1lLmMKQEAgLTEwMCwxOCArMTAwLDI5IEBACiAKIEFTTjFfVElNRSAqQVNOMV9USU1FX3NldChBU04xX1RJTUUgKnMsIHRpbWVfdCB0KQogCXsKKwlyZXR1cm4gQVNOMV9USU1FX2FkaihzLCB0LCAwLCAwKTsKKwl9CisKK0FTTjFfVElNRSAqQVNOMV9USU1FX2FkaihBU04xX1RJTUUgKnMsIHRpbWVfdCB0LAorCQkJCWludCBvZmZzZXRfZGF5LCBsb25nIG9mZnNldF9zZWMpCisJewogCXN0cnVjdCB0bSAqdHM7CiAJc3RydWN0IHRtIGRhdGE7CiAKIAl0cz1PUEVOU1NMX2dtdGltZSgmdCwmZGF0YSk7CiAJaWYgKHRzID09IE5VTEwpCiAJCXsKLQkJQVNOMWVycihBU04xX0ZfQVNOMV9USU1FX1NFVCwgQVNOMV9SX0VSUk9SX0dFVFRJTkdfVElNRSk7CisJCUFTTjFlcnIoQVNOMV9GX0FTTjFfVElNRV9BREosIEFTTjFfUl9FUlJPUl9HRVRUSU5HX1RJTUUpOwogCQlyZXR1cm4gTlVMTDsKIAkJfQorCWlmIChvZmZzZXRfZGF5IHx8IG9mZnNldF9zZWMpCisJCXsgCisJCWlmICghT1BFTlNTTF9nbXRpbWVfYWRqKHRzLCBvZmZzZXRfZGF5LCBvZmZzZXRfc2VjKSkKKwkJCXJldHVybiBOVUxMOworCQl9CiAJaWYoKHRzLT50bV95ZWFyID49IDUwKSAmJiAodHMtPnRtX3llYXIgPCAxNTApKQotCQkJCQlyZXR1cm4gQVNOMV9VVENUSU1FX3NldChzLCB0KTsKLQlyZXR1cm4gQVNOMV9HRU5FUkFMSVpFRFRJTUVfc2V0KHMsdCk7CisJCQlyZXR1cm4gQVNOMV9VVENUSU1FX2FkaihzLCB0LCBvZmZzZXRfZGF5LCBvZmZzZXRfc2VjKTsKKwlyZXR1cm4gQVNOMV9HRU5FUkFMSVpFRFRJTUVfYWRqKHMsIHQsIG9mZnNldF9kYXksIG9mZnNldF9zZWMpOwogCX0KIAogaW50IEFTTjFfVElNRV9jaGVjayhBU04xX1RJTUUgKnQpCkBAIC0xNjIsMyArMTczLDI2IEBACiAKIAlyZXR1cm4gcmV0OwogCX0KKworaW50IEFTTjFfVElNRV9zZXRfc3RyaW5nKEFTTjFfVElNRSAqcywgY29uc3QgY2hhciAqc3RyKQorCXsKKwlBU04xX1RJTUUgdDsKKworCXQubGVuZ3RoID0gc3RybGVuKHN0cik7CisJdC5kYXRhID0gKHVuc2lnbmVkIGNoYXIgKilzdHI7CisJdC5mbGFncyA9IDA7CisJCisJdC50eXBlID0gVl9BU04xX1VUQ1RJTUU7CisKKwlpZiAoIUFTTjFfVElNRV9jaGVjaygmdCkpCisJCXsKKwkJdC50eXBlID0gVl9BU04xX0dFTkVSQUxJWkVEVElNRTsKKwkJaWYgKCFBU04xX1RJTUVfY2hlY2soJnQpKQorCQkJcmV0dXJuIDA7CisJCX0KKwkKKwlpZiAocyAmJiAhQVNOMV9TVFJJTkdfY29weSgoQVNOMV9TVFJJTkcgKilzLCAoQVNOMV9TVFJJTkcgKikmdCkpCisJCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworCX0KZGlmZiAtLWdpdCBhL2NyeXB0by9hc24xL2FfdHlwZS5jIGIvY3J5cHRvL2FzbjEvYV90eXBlLmMKaW5kZXggMzZiZWNlYS4uYTQ1ZDJmOSAxMDA2NDQKLS0tIGEvY3J5cHRvL2FzbjEvYV90eXBlLmMKKysrIGIvY3J5cHRvL2FzbjEvYV90eXBlLmMKQEAgLTc3LDcgKzc3LDEwIEBACiAJCUFTTjFfcHJpbWl0aXZlX2ZyZWUoKEFTTjFfVkFMVUUgKiopdG1wX2EsIE5VTEwpOwogCQl9CiAJYS0+dHlwZT10eXBlOwotCWEtPnZhbHVlLnB0cj12YWx1ZTsKKwlpZiAodHlwZSA9PSBWX0FTTjFfQk9PTEVBTikKKwkJYS0+dmFsdWUuYm9vbGVhbiA9IHZhbHVlID8gMHhmZiA6IDA7CisJZWxzZQorCQlhLT52YWx1ZS5wdHI9dmFsdWU7CiAJfQogCiBpbnQgQVNOMV9UWVBFX3NldDEoQVNOMV9UWVBFICphLCBpbnQgdHlwZSwgY29uc3Qgdm9pZCAqdmFsdWUpCkBAIC05OCw3ICsxMDEsNyBAQAogCWVsc2UKIAkJewogCQlBU04xX1NUUklORyAqc2R1cDsKLQkJc2R1cCA9IEFTTjFfU1RSSU5HX2R1cCgoQVNOMV9TVFJJTkcgKil2YWx1ZSk7CisJCXNkdXAgPSBBU04xX1NUUklOR19kdXAodmFsdWUpOwogCQlpZiAoIXNkdXApCiAJCQlyZXR1cm4gMDsKIAkJQVNOMV9UWVBFX3NldChhLCB0eXBlLCBzZHVwKTsKQEAgLTEwOCwzICsxMTEsNDkgQEAKIAogSU1QTEVNRU5UX1NUQUNLX09GKEFTTjFfVFlQRSkKIElNUExFTUVOVF9BU04xX1NFVF9PRihBU04xX1RZUEUpCisKKy8qIFJldHVybnMgMCBpZiB0aGV5IGFyZSBlcXVhbCwgIT0gMCBvdGhlcndpc2UuICovCitpbnQgQVNOMV9UWVBFX2NtcChBU04xX1RZUEUgKmEsIEFTTjFfVFlQRSAqYikKKwl7CisJaW50IHJlc3VsdCA9IC0xOworCisJaWYgKCFhIHx8ICFiIHx8IGEtPnR5cGUgIT0gYi0+dHlwZSkgcmV0dXJuIC0xOworCisJc3dpdGNoIChhLT50eXBlKQorCQl7CisJY2FzZSBWX0FTTjFfT0JKRUNUOgorCQlyZXN1bHQgPSBPQkpfY21wKGEtPnZhbHVlLm9iamVjdCwgYi0+dmFsdWUub2JqZWN0KTsKKwkJYnJlYWs7CisJY2FzZSBWX0FTTjFfTlVMTDoKKwkJcmVzdWx0ID0gMDsJLyogVGhleSBkbyBub3QgaGF2ZSBjb250ZW50LiAqLworCQlicmVhazsKKwljYXNlIFZfQVNOMV9JTlRFR0VSOgorCWNhc2UgVl9BU04xX05FR19JTlRFR0VSOgorCWNhc2UgVl9BU04xX0VOVU1FUkFURUQ6CisJY2FzZSBWX0FTTjFfTkVHX0VOVU1FUkFURUQ6CisJY2FzZSBWX0FTTjFfQklUX1NUUklORzoKKwljYXNlIFZfQVNOMV9PQ1RFVF9TVFJJTkc6CisJY2FzZSBWX0FTTjFfU0VRVUVOQ0U6CisJY2FzZSBWX0FTTjFfU0VUOgorCWNhc2UgVl9BU04xX05VTUVSSUNTVFJJTkc6CisJY2FzZSBWX0FTTjFfUFJJTlRBQkxFU1RSSU5HOgorCWNhc2UgVl9BU04xX1Q2MVNUUklORzoKKwljYXNlIFZfQVNOMV9WSURFT1RFWFNUUklORzoKKwljYXNlIFZfQVNOMV9JQTVTVFJJTkc6CisJY2FzZSBWX0FTTjFfVVRDVElNRToKKwljYXNlIFZfQVNOMV9HRU5FUkFMSVpFRFRJTUU6CisJY2FzZSBWX0FTTjFfR1JBUEhJQ1NUUklORzoKKwljYXNlIFZfQVNOMV9WSVNJQkxFU1RSSU5HOgorCWNhc2UgVl9BU04xX0dFTkVSQUxTVFJJTkc6CisJY2FzZSBWX0FTTjFfVU5JVkVSU0FMU1RSSU5HOgorCWNhc2UgVl9BU04xX0JNUFNUUklORzoKKwljYXNlIFZfQVNOMV9VVEY4U1RSSU5HOgorCWNhc2UgVl9BU04xX09USEVSOgorCWRlZmF1bHQ6CisJCXJlc3VsdCA9IEFTTjFfU1RSSU5HX2NtcCgoQVNOMV9TVFJJTkcgKikgYS0+dmFsdWUucHRyLAorCQkJCQkgKEFTTjFfU1RSSU5HICopIGItPnZhbHVlLnB0cik7CisJCWJyZWFrOworCQl9CisKKwlyZXR1cm4gcmVzdWx0OworCX0KZGlmZiAtLWdpdCBhL2NyeXB0by9hc24xL2FfdXRjdG0uYyBiL2NyeXB0by9hc24xL2FfdXRjdG0uYwppbmRleCBkMzFjMDI4Li4wNzJlMjM2IDEwMDY0NAotLS0gYS9jcnlwdG8vYXNuMS9hX3V0Y3RtLmMKKysrIGIvY3J5cHRvL2FzbjEvYV91dGN0bS5jCkBAIC0xMTQsOCArMTE0LDggQEAKIAogaW50IEFTTjFfVVRDVElNRV9jaGVjayhBU04xX1VUQ1RJTUUgKmQpCiAJewotCXN0YXRpYyBpbnQgbWluWzhdPXsgMCwgMSwgMSwgMCwgMCwgMCwgMCwgMH07Ci0Jc3RhdGljIGludCBtYXhbOF09ezk5LDEyLDMxLDIzLDU5LDU5LDEyLDU5fTsKKwlzdGF0aWMgY29uc3QgaW50IG1pbls4XT17IDAsIDEsIDEsIDAsIDAsIDAsIDAsIDB9OworCXN0YXRpYyBjb25zdCBpbnQgbWF4WzhdPXs5OSwxMiwzMSwyMyw1OSw1OSwxMiw1OX07CiAJY2hhciAqYTsKIAlpbnQgbixpLGwsbzsKIApAQCAtMTg2LDYgKzE4NiwxMiBAQAogCiBBU04xX1VUQ1RJTUUgKkFTTjFfVVRDVElNRV9zZXQoQVNOMV9VVENUSU1FICpzLCB0aW1lX3QgdCkKIAl7CisJcmV0dXJuIEFTTjFfVVRDVElNRV9hZGoocywgdCwgMCwgMCk7CisJfQorCitBU04xX1VUQ1RJTUUgKkFTTjFfVVRDVElNRV9hZGooQVNOMV9VVENUSU1FICpzLCB0aW1lX3QgdCwKKwkJCQlpbnQgb2Zmc2V0X2RheSwgbG9uZyBvZmZzZXRfc2VjKQorCXsKIAljaGFyICpwOwogCXN0cnVjdCB0bSAqdHM7CiAJc3RydWN0IHRtIGRhdGE7CkBAIC0yMDAsMTMgKzIwNiwyMiBAQAogCWlmICh0cyA9PSBOVUxMKQogCQlyZXR1cm4oTlVMTCk7CiAKKwlpZiAob2Zmc2V0X2RheSB8fCBvZmZzZXRfc2VjKQorCQl7IAorCQlpZiAoIU9QRU5TU0xfZ210aW1lX2Fkaih0cywgb2Zmc2V0X2RheSwgb2Zmc2V0X3NlYykpCisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCisJaWYoKHRzLT50bV95ZWFyIDwgNTApIHx8ICh0cy0+dG1feWVhciA+PSAxNTApKQorCQlyZXR1cm4gTlVMTDsKKwogCXA9KGNoYXIgKilzLT5kYXRhOwogCWlmICgocCA9PSBOVUxMKSB8fCAoKHNpemVfdClzLT5sZW5ndGggPCBsZW4pKQogCQl7CiAJCXA9T1BFTlNTTF9tYWxsb2MobGVuKTsKIAkJaWYgKHAgPT0gTlVMTCkKIAkJCXsKLQkJCUFTTjFlcnIoQVNOMV9GX0FTTjFfVVRDVElNRV9TRVQsRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOworCQkJQVNOMWVycihBU04xX0ZfQVNOMV9VVENUSU1FX0FESixFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CiAJCQlyZXR1cm4oTlVMTCk7CiAJCQl9CiAJCWlmIChzLT5kYXRhICE9IE5VTEwpCmRpZmYgLS1naXQgYS9jcnlwdG8vYXNuMS9hX3ZlcmlmeS5jIGIvY3J5cHRvL2FzbjEvYV92ZXJpZnkuYwppbmRleCBkYTNlZmFhLi5jZWNkYjEzIDEwMDY0NAotLS0gYS9jcnlwdG8vYXNuMS9hX3ZlcmlmeS5jCisrKyBiL2NyeXB0by9hc24xL2FfdmVyaWZ5LmMKQEAgLTYwLDYgKzYwLDcgQEAKICNpbmNsdWRlIDx0aW1lLmg+CiAKICNpbmNsdWRlICJjcnlwdGxpYi5oIgorI2luY2x1ZGUgImFzbjFfbG9jbC5oIgogCiAjaWZuZGVmIE5PX1NZU19UWVBFU19ICiAjIGluY2x1ZGUgPHN5cy90eXBlcy5oPgpAQCAtMTAwLDEyICsxMDEsNyBAQAogCXA9YnVmX2luOwogCiAJaTJkKGRhdGEsJnApOwotCWlmICghRVZQX1ZlcmlmeUluaXRfZXgoJmN0eCx0eXBlLCBOVUxMKSkKLQkJewotCQlBU04xZXJyKEFTTjFfRl9BU04xX1ZFUklGWSxFUlJfUl9FVlBfTElCKTsKLQkJcmV0PTA7Ci0JCWdvdG8gZXJyOwotCQl9CisJRVZQX1ZlcmlmeUluaXRfZXgoJmN0eCx0eXBlLCBOVUxMKTsKIAlFVlBfVmVyaWZ5VXBkYXRlKCZjdHgsKHVuc2lnbmVkIGNoYXIgKilidWZfaW4saW5sKTsKIAogCU9QRU5TU0xfY2xlYW5zZShidWZfaW4sKHVuc2lnbmVkIGludClpbmwpOwpAQCAtMTM0LDE5ICsxMzAsMzQgQEAKIAkgICAgIHZvaWQgKmFzbiwgRVZQX1BLRVkgKnBrZXkpCiAJewogCUVWUF9NRF9DVFggY3R4OwotCWNvbnN0IEVWUF9NRCAqdHlwZTsKKwljb25zdCBFVlBfTUQgKnR5cGUgPSBOVUxMOwogCXVuc2lnbmVkIGNoYXIgKmJ1Zl9pbj1OVUxMOwotCWludCByZXQ9IC0xLGksaW5sOworCWludCByZXQ9IC0xLGlubDsKKworCWludCBtZG5pZCwgcGtuaWQ7CiAKIAlFVlBfTURfQ1RYX2luaXQoJmN0eCk7Ci0JaT1PQkpfb2JqMm5pZChhLT5hbGdvcml0aG0pOwotCXR5cGU9RVZQX2dldF9kaWdlc3RieW5hbWUoT0JKX25pZDJzbihpKSk7CisKKwkvKiBDb252ZXJ0IHNpZ25hdHVyZSBPSUQgaW50byBkaWdlc3QgYW5kIHB1YmxpYyBrZXkgT0lEcyAqLworCWlmICghT0JKX2ZpbmRfc2lnaWRfYWxncyhPQkpfb2JqMm5pZChhLT5hbGdvcml0aG0pLCAmbWRuaWQsICZwa25pZCkpCisJCXsKKwkJQVNOMWVycihBU04xX0ZfQVNOMV9JVEVNX1ZFUklGWSxBU04xX1JfVU5LTk9XTl9TSUdOQVRVUkVfQUxHT1JJVEhNKTsKKwkJZ290byBlcnI7CisJCX0KKwl0eXBlPUVWUF9nZXRfZGlnZXN0YnluaWQobWRuaWQpOwogCWlmICh0eXBlID09IE5VTEwpCiAJCXsKIAkJQVNOMWVycihBU04xX0ZfQVNOMV9JVEVNX1ZFUklGWSxBU04xX1JfVU5LTk9XTl9NRVNTQUdFX0RJR0VTVF9BTEdPUklUSE0pOwogCQlnb3RvIGVycjsKIAkJfQogCisJLyogQ2hlY2sgcHVibGljIGtleSBPSUQgbWF0Y2hlcyBwdWJsaWMga2V5IHR5cGUgKi8KKwlpZiAoRVZQX1BLRVlfdHlwZShwa25pZCkgIT0gcGtleS0+YW1ldGgtPnBrZXlfaWQpCisJCXsKKwkJQVNOMWVycihBU04xX0ZfQVNOMV9JVEVNX1ZFUklGWSxBU04xX1JfV1JPTkdfUFVCTElDX0tFWV9UWVBFKTsKKwkJZ290byBlcnI7CisJCX0KKwogCWlmICghRVZQX1ZlcmlmeUluaXRfZXgoJmN0eCx0eXBlLCBOVUxMKSkKIAkJewogCQlBU04xZXJyKEFTTjFfRl9BU04xX0lURU1fVkVSSUZZLEVSUl9SX0VWUF9MSUIpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FzbjEvYW1ldGhfbGliLmMgYi9jcnlwdG8vYXNuMS9hbWV0aF9saWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YThiNmNjCi0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL2FzbjEvYW1ldGhfbGliLmMKQEAgLTAsMCArMSw0NTAgQEAKKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorICogcHJvamVjdCAyMDA2LgorICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChjKSAyMDA2IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorICoKKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKyAqCisgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKyAqCisgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisgKiAgICBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZworICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQorICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisgKgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgImNyeXB0bGliLmgiCisjaW5jbHVkZSA8b3BlbnNzbC9hc24xdC5oPgorI2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgorI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQorI2luY2x1ZGUgPG9wZW5zc2wvZW5naW5lLmg+CisjZW5kaWYKKyNpbmNsdWRlICJhc24xX2xvY2wuaCIKKworZXh0ZXJuIGNvbnN0IEVWUF9QS0VZX0FTTjFfTUVUSE9EIHJzYV9hc24xX21ldGhzW107CitleHRlcm4gY29uc3QgRVZQX1BLRVlfQVNOMV9NRVRIT0QgZHNhX2FzbjFfbWV0aHNbXTsKK2V4dGVybiBjb25zdCBFVlBfUEtFWV9BU04xX01FVEhPRCBkaF9hc24xX21ldGg7CitleHRlcm4gY29uc3QgRVZQX1BLRVlfQVNOMV9NRVRIT0QgZWNrZXlfYXNuMV9tZXRoOworZXh0ZXJuIGNvbnN0IEVWUF9QS0VZX0FTTjFfTUVUSE9EIGhtYWNfYXNuMV9tZXRoOworCisvKiBLZWVwIHRoaXMgc29ydGVkIGluIHR5cGUgb3JkZXIgISEgKi8KK3N0YXRpYyBjb25zdCBFVlBfUEtFWV9BU04xX01FVEhPRCAqc3RhbmRhcmRfbWV0aG9kc1tdID0gCisJeworI2lmbmRlZiBPUEVOU1NMX05PX1JTQQorCSZyc2FfYXNuMV9tZXRoc1swXSwKKwkmcnNhX2FzbjFfbWV0aHNbMV0sCisjZW5kaWYKKyNpZm5kZWYgT1BFTlNTTF9OT19ESAorCSZkaF9hc24xX21ldGgsCisjZW5kaWYKKyNpZm5kZWYgT1BFTlNTTF9OT19EU0EKKwkmZHNhX2FzbjFfbWV0aHNbMF0sCisJJmRzYV9hc24xX21ldGhzWzFdLAorCSZkc2FfYXNuMV9tZXRoc1syXSwKKwkmZHNhX2FzbjFfbWV0aHNbM10sCisJJmRzYV9hc24xX21ldGhzWzRdLAorI2VuZGlmCisjaWZuZGVmIE9QRU5TU0xfTk9fRUMKKwkmZWNrZXlfYXNuMV9tZXRoLAorI2VuZGlmCisJJmhtYWNfYXNuMV9tZXRoCisJfTsKKwordHlwZWRlZiBpbnQgc2tfY21wX2ZuX3R5cGUoY29uc3QgY2hhciAqIGNvbnN0ICphLCBjb25zdCBjaGFyICogY29uc3QgKmIpOworREVDTEFSRV9TVEFDS19PRihFVlBfUEtFWV9BU04xX01FVEhPRCkKK3N0YXRpYyBTVEFDS19PRihFVlBfUEtFWV9BU04xX01FVEhPRCkgKmFwcF9tZXRob2RzID0gTlVMTDsKKworCisKKyNpZmRlZiBURVNUCit2b2lkIG1haW4oKQorCXsKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOworCQlpIDwgc2l6ZW9mKHN0YW5kYXJkX21ldGhvZHMpL3NpemVvZihFVlBfUEtFWV9BU04xX01FVEhPRCAqKTsKKwkJaSsrKQorCQlmcHJpbnRmKHN0ZGVyciwgIk51bWJlciAlZCBpZD0lZCAoJXMpXG4iLCBpLAorCQkJc3RhbmRhcmRfbWV0aG9kc1tpXS0+cGtleV9pZCwKKwkJCU9CSl9uaWQyc24oc3RhbmRhcmRfbWV0aG9kc1tpXS0+cGtleV9pZCkpOworCX0KKyNlbmRpZgorCitERUNMQVJFX09CSl9CU0VBUkNIX0NNUF9GTihjb25zdCBFVlBfUEtFWV9BU04xX01FVEhPRCAqLAorCQkJICAgY29uc3QgRVZQX1BLRVlfQVNOMV9NRVRIT0QgKiwgYW1ldGgpOworCitzdGF0aWMgaW50IGFtZXRoX2NtcChjb25zdCBFVlBfUEtFWV9BU04xX01FVEhPRCAqIGNvbnN0ICphLAorCQkgICAgIGNvbnN0IEVWUF9QS0VZX0FTTjFfTUVUSE9EICogY29uc3QgKmIpCisJeworICAgICAgICByZXR1cm4gKCgqYSktPnBrZXlfaWQgLSAoKmIpLT5wa2V5X2lkKTsKKwl9CisKK0lNUExFTUVOVF9PQkpfQlNFQVJDSF9DTVBfRk4oY29uc3QgRVZQX1BLRVlfQVNOMV9NRVRIT0QgKiwKKwkJCSAgICAgY29uc3QgRVZQX1BLRVlfQVNOMV9NRVRIT0QgKiwgYW1ldGgpOworCitpbnQgRVZQX1BLRVlfYXNuMV9nZXRfY291bnQodm9pZCkKKwl7CisJaW50IG51bSA9IHNpemVvZihzdGFuZGFyZF9tZXRob2RzKS9zaXplb2YoRVZQX1BLRVlfQVNOMV9NRVRIT0QgKik7CisJaWYgKGFwcF9tZXRob2RzKQorCQludW0gKz0gc2tfRVZQX1BLRVlfQVNOMV9NRVRIT0RfbnVtKGFwcF9tZXRob2RzKTsKKwlyZXR1cm4gbnVtOworCX0KKworY29uc3QgRVZQX1BLRVlfQVNOMV9NRVRIT0QgKkVWUF9QS0VZX2FzbjFfZ2V0MChpbnQgaWR4KQorCXsKKwlpbnQgbnVtID0gc2l6ZW9mKHN0YW5kYXJkX21ldGhvZHMpL3NpemVvZihFVlBfUEtFWV9BU04xX01FVEhPRCAqKTsKKwlpZiAoaWR4IDwgMCkKKwkJcmV0dXJuIE5VTEw7IAorCWlmIChpZHggPCBudW0pCisJCXJldHVybiBzdGFuZGFyZF9tZXRob2RzW2lkeF07CisJaWR4IC09IG51bTsKKwlyZXR1cm4gc2tfRVZQX1BLRVlfQVNOMV9NRVRIT0RfdmFsdWUoYXBwX21ldGhvZHMsIGlkeCk7CisJfQorCitzdGF0aWMgY29uc3QgRVZQX1BLRVlfQVNOMV9NRVRIT0QgKnBrZXlfYXNuMV9maW5kKGludCB0eXBlKQorCXsKKwlFVlBfUEtFWV9BU04xX01FVEhPRCB0bXA7CisJY29uc3QgRVZQX1BLRVlfQVNOMV9NRVRIT0QgKnQgPSAmdG1wLCAqKnJldDsKKwl0bXAucGtleV9pZCA9IHR5cGU7CisJaWYgKGFwcF9tZXRob2RzKQorCQl7CisJCWludCBpZHg7CisJCWlkeCA9IHNrX0VWUF9QS0VZX0FTTjFfTUVUSE9EX2ZpbmQoYXBwX21ldGhvZHMsICZ0bXApOworCQlpZiAoaWR4ID49IDApCisJCQlyZXR1cm4gc2tfRVZQX1BLRVlfQVNOMV9NRVRIT0RfdmFsdWUoYXBwX21ldGhvZHMsIGlkeCk7CisJCX0KKwlyZXQgPSBPQkpfYnNlYXJjaF9hbWV0aCgmdCwgc3RhbmRhcmRfbWV0aG9kcywKKwkJCSAgc2l6ZW9mKHN0YW5kYXJkX21ldGhvZHMpCisJCQkgIC9zaXplb2YoRVZQX1BLRVlfQVNOMV9NRVRIT0QgKikpOworCWlmICghcmV0IHx8ICEqcmV0KQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gKnJldDsKKwl9CisKKy8qIEZpbmQgYW4gaW1wbGVtZW50YXRpb24gb2YgYW4gQVNOMSBhbGdvcml0aG0uIElmICdwZScgaXMgbm90IE5VTEwKKyAqIGFsc28gc2VhcmNoIHRocm91Z2ggZW5naW5lcyBhbmQgc2V0ICpwZSB0byBhIGZ1bmN0aW9uYWwgcmVmZXJlbmNlCisgKiB0byB0aGUgZW5naW5lIGltcGxlbWVudGluZyAndHlwZScgb3IgTlVMTCBpZiBubyBlbmdpbmUgaW1wbGVtZW50cyAKKyAqIGl0LgorICovCisKK2NvbnN0IEVWUF9QS0VZX0FTTjFfTUVUSE9EICpFVlBfUEtFWV9hc24xX2ZpbmQoRU5HSU5FICoqcGUsIGludCB0eXBlKQorCXsKKwljb25zdCBFVlBfUEtFWV9BU04xX01FVEhPRCAqdDsKKwlFTkdJTkUgKmU7CisKKwlmb3IgKDs7KQorCQl7CisJCXQgPSBwa2V5X2FzbjFfZmluZCh0eXBlKTsKKwkJaWYgKCF0IHx8ICEodC0+cGtleV9mbGFncyAmIEFTTjFfUEtFWV9BTElBUykpCisJCQlicmVhazsKKwkJdHlwZSA9IHQtPnBrZXlfYmFzZV9pZDsKKwkJfQorCWlmIChwZSkKKwkJeworI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQorCQkvKiB0eXBlIHdpbGwgY29udGFpbiB0aGUgZmluYWwgdW5hbGlhc2VkIHR5cGUgKi8KKwkJZSA9IEVOR0lORV9nZXRfcGtleV9hc24xX21ldGhfZW5naW5lKHR5cGUpOworCQlpZiAoZSkKKwkJCXsKKwkJCSpwZSA9IGU7CisJCQlyZXR1cm4gRU5HSU5FX2dldF9wa2V5X2FzbjFfbWV0aChlLCB0eXBlKTsKKwkJCX0KKyNlbmRpZgorCQkqcGUgPSBOVUxMOworCQl9CisJcmV0dXJuIHQ7CisJfQorCitjb25zdCBFVlBfUEtFWV9BU04xX01FVEhPRCAqRVZQX1BLRVlfYXNuMV9maW5kX3N0cihFTkdJTkUgKipwZSwKKwkJCQkJY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuKQorCXsKKwlpbnQgaTsKKwljb25zdCBFVlBfUEtFWV9BU04xX01FVEhPRCAqYW1ldGg7CisJaWYgKGxlbiA9PSAtMSkKKwkJbGVuID0gc3RybGVuKHN0cik7CisJaWYgKHBlKQorCQl7CisjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCisJCUVOR0lORSAqZTsKKwkJYW1ldGggPSBFTkdJTkVfcGtleV9hc24xX2ZpbmRfc3RyKCZlLCBzdHIsIGxlbik7CisJCWlmIChhbWV0aCkKKwkJCXsKKwkJCS8qIENvbnZlcnQgc3RydWN0dXJhbCBpbnRvCisJCQkgKiBmdW5jdGlvbmFsIHJlZmVyZW5jZQorCQkJICovCisJCQlpZiAoIUVOR0lORV9pbml0KGUpKQorCQkJCWFtZXRoID0gTlVMTDsKKwkJCUVOR0lORV9mcmVlKGUpOworCQkJKnBlID0gZTsKKwkJCXJldHVybiBhbWV0aDsKKwkJCX0KKyNlbmRpZgorCQkqcGUgPSBOVUxMOworCQl9CisJZm9yIChpID0gMDsgaSA8IEVWUF9QS0VZX2FzbjFfZ2V0X2NvdW50KCk7IGkrKykKKwkJeworCQlhbWV0aCA9IEVWUF9QS0VZX2FzbjFfZ2V0MChpKTsKKwkJaWYgKGFtZXRoLT5wa2V5X2ZsYWdzICYgQVNOMV9QS0VZX0FMSUFTKQorCQkJY29udGludWU7CisJCWlmICgoKGludClzdHJsZW4oYW1ldGgtPnBlbV9zdHIpID09IGxlbikgJiYgCisJCQkhc3RybmNhc2VjbXAoYW1ldGgtPnBlbV9zdHIsIHN0ciwgbGVuKSkKKwkJCXJldHVybiBhbWV0aDsKKwkJfQorCXJldHVybiBOVUxMOworCX0KKworaW50IEVWUF9QS0VZX2FzbjFfYWRkMChjb25zdCBFVlBfUEtFWV9BU04xX01FVEhPRCAqYW1ldGgpCisJeworCWlmIChhcHBfbWV0aG9kcyA9PSBOVUxMKQorCQl7CisJCWFwcF9tZXRob2RzID0gc2tfRVZQX1BLRVlfQVNOMV9NRVRIT0RfbmV3KGFtZXRoX2NtcCk7CisJCWlmICghYXBwX21ldGhvZHMpCisJCQlyZXR1cm4gMDsKKwkJfQorCWlmICghc2tfRVZQX1BLRVlfQVNOMV9NRVRIT0RfcHVzaChhcHBfbWV0aG9kcywgYW1ldGgpKQorCQlyZXR1cm4gMDsKKwlza19FVlBfUEtFWV9BU04xX01FVEhPRF9zb3J0KGFwcF9tZXRob2RzKTsKKwlyZXR1cm4gMTsKKwl9CisKK2ludCBFVlBfUEtFWV9hc24xX2FkZF9hbGlhcyhpbnQgdG8sIGludCBmcm9tKQorCXsKKwlFVlBfUEtFWV9BU04xX01FVEhPRCAqYW1ldGg7CisJYW1ldGggPSBFVlBfUEtFWV9hc24xX25ldyhmcm9tLCBBU04xX1BLRVlfQUxJQVMsIE5VTEwsIE5VTEwpOworCWlmICghYW1ldGgpCisJCXJldHVybiAwOworCWFtZXRoLT5wa2V5X2Jhc2VfaWQgPSB0bzsKKwlyZXR1cm4gRVZQX1BLRVlfYXNuMV9hZGQwKGFtZXRoKTsKKwl9CisKK2ludCBFVlBfUEtFWV9hc24xX2dldDBfaW5mbyhpbnQgKnBwa2V5X2lkLCBpbnQgKnBwa2V5X2Jhc2VfaWQsIGludCAqcHBrZXlfZmxhZ3MsCisJCQkJY29uc3QgY2hhciAqKnBpbmZvLCBjb25zdCBjaGFyICoqcHBlbV9zdHIsCisJCQkJCWNvbnN0IEVWUF9QS0VZX0FTTjFfTUVUSE9EICphbWV0aCkKKwl7CisJaWYgKCFhbWV0aCkKKwkJcmV0dXJuIDA7CisJaWYgKHBwa2V5X2lkKQorCQkqcHBrZXlfaWQgPSBhbWV0aC0+cGtleV9pZDsKKwlpZiAocHBrZXlfYmFzZV9pZCkKKwkJKnBwa2V5X2Jhc2VfaWQgPSBhbWV0aC0+cGtleV9iYXNlX2lkOworCWlmIChwcGtleV9mbGFncykKKwkJKnBwa2V5X2ZsYWdzID0gYW1ldGgtPnBrZXlfZmxhZ3M7CisJaWYgKHBpbmZvKQorCQkqcGluZm8gPSBhbWV0aC0+aW5mbzsKKwlpZiAocHBlbV9zdHIpCisJCSpwcGVtX3N0ciA9IGFtZXRoLT5wZW1fc3RyOworCXJldHVybiAxOworCX0KKworY29uc3QgRVZQX1BLRVlfQVNOMV9NRVRIT0QqIEVWUF9QS0VZX2dldDBfYXNuMShFVlBfUEtFWSAqcGtleSkKKwl7CisJcmV0dXJuIHBrZXktPmFtZXRoOworCX0KKworRVZQX1BLRVlfQVNOMV9NRVRIT0QqIEVWUF9QS0VZX2FzbjFfbmV3KGludCBpZCwgaW50IGZsYWdzLAorCQkJCQljb25zdCBjaGFyICpwZW1fc3RyLCBjb25zdCBjaGFyICppbmZvKQorCXsKKwlFVlBfUEtFWV9BU04xX01FVEhPRCAqYW1ldGg7CisJYW1ldGggPSBPUEVOU1NMX21hbGxvYyhzaXplb2YoRVZQX1BLRVlfQVNOMV9NRVRIT0QpKTsKKwlpZiAoIWFtZXRoKQorCQlyZXR1cm4gTlVMTDsKKworCWFtZXRoLT5wa2V5X2lkID0gaWQ7CisJYW1ldGgtPnBrZXlfYmFzZV9pZCA9IGlkOworCWFtZXRoLT5wa2V5X2ZsYWdzID0gZmxhZ3MgfCBBU04xX1BLRVlfRFlOQU1JQzsKKworCWlmIChpbmZvKQorCQl7CisJCWFtZXRoLT5pbmZvID0gQlVGX3N0cmR1cChpbmZvKTsKKwkJaWYgKCFhbWV0aC0+aW5mbykKKwkJCWdvdG8gZXJyOworCQl9CisJZWxzZQorCQlhbWV0aC0+aW5mbyA9IE5VTEw7CisKKwlpZiAocGVtX3N0cikKKwkJeworCQlhbWV0aC0+cGVtX3N0ciA9IEJVRl9zdHJkdXAocGVtX3N0cik7CisJCWlmICghYW1ldGgtPnBlbV9zdHIpCisJCQlnb3RvIGVycjsKKwkJfQorCWVsc2UKKwkJYW1ldGgtPnBlbV9zdHIgPSBOVUxMOworCisJYW1ldGgtPnB1Yl9kZWNvZGUgPSAwOworCWFtZXRoLT5wdWJfZW5jb2RlID0gMDsKKwlhbWV0aC0+cHViX2NtcCA9IDA7CisJYW1ldGgtPnB1Yl9wcmludCA9IDA7CisKKwlhbWV0aC0+cHJpdl9kZWNvZGUgPSAwOworCWFtZXRoLT5wcml2X2VuY29kZSA9IDA7CisJYW1ldGgtPnByaXZfcHJpbnQgPSAwOworCisJYW1ldGgtPm9sZF9wcml2X2VuY29kZSA9IDA7CisJYW1ldGgtPm9sZF9wcml2X2RlY29kZSA9IDA7CisKKwlhbWV0aC0+cGtleV9zaXplID0gMDsKKwlhbWV0aC0+cGtleV9iaXRzID0gMDsKKworCWFtZXRoLT5wYXJhbV9kZWNvZGUgPSAwOworCWFtZXRoLT5wYXJhbV9lbmNvZGUgPSAwOworCWFtZXRoLT5wYXJhbV9taXNzaW5nID0gMDsKKwlhbWV0aC0+cGFyYW1fY29weSA9IDA7CisJYW1ldGgtPnBhcmFtX2NtcCA9IDA7CisJYW1ldGgtPnBhcmFtX3ByaW50ID0gMDsKKworCWFtZXRoLT5wa2V5X2ZyZWUgPSAwOworCWFtZXRoLT5wa2V5X2N0cmwgPSAwOworCisJcmV0dXJuIGFtZXRoOworCisJZXJyOgorCisJRVZQX1BLRVlfYXNuMV9mcmVlKGFtZXRoKTsKKwlyZXR1cm4gTlVMTDsKKworCX0KKwordm9pZCBFVlBfUEtFWV9hc24xX2NvcHkoRVZQX1BLRVlfQVNOMV9NRVRIT0QgKmRzdCwgCisJCQljb25zdCBFVlBfUEtFWV9BU04xX01FVEhPRCAqc3JjKQorCXsKKworCWRzdC0+cHViX2RlY29kZSA9IHNyYy0+cHViX2RlY29kZTsKKwlkc3QtPnB1Yl9lbmNvZGUgPSBzcmMtPnB1Yl9lbmNvZGU7CisJZHN0LT5wdWJfY21wID0gc3JjLT5wdWJfY21wOworCWRzdC0+cHViX3ByaW50ID0gc3JjLT5wdWJfcHJpbnQ7CisKKwlkc3QtPnByaXZfZGVjb2RlID0gc3JjLT5wcml2X2RlY29kZTsKKwlkc3QtPnByaXZfZW5jb2RlID0gc3JjLT5wcml2X2VuY29kZTsKKwlkc3QtPnByaXZfcHJpbnQgPSBzcmMtPnByaXZfcHJpbnQ7CisKKwlkc3QtPm9sZF9wcml2X2VuY29kZSA9IHNyYy0+b2xkX3ByaXZfZW5jb2RlOworCWRzdC0+b2xkX3ByaXZfZGVjb2RlID0gc3JjLT5vbGRfcHJpdl9kZWNvZGU7CisKKwlkc3QtPnBrZXlfc2l6ZSA9IHNyYy0+cGtleV9zaXplOworCWRzdC0+cGtleV9iaXRzID0gc3JjLT5wa2V5X2JpdHM7CisKKwlkc3QtPnBhcmFtX2RlY29kZSA9IHNyYy0+cGFyYW1fZGVjb2RlOworCWRzdC0+cGFyYW1fZW5jb2RlID0gc3JjLT5wYXJhbV9lbmNvZGU7CisJZHN0LT5wYXJhbV9taXNzaW5nID0gc3JjLT5wYXJhbV9taXNzaW5nOworCWRzdC0+cGFyYW1fY29weSA9IHNyYy0+cGFyYW1fY29weTsKKwlkc3QtPnBhcmFtX2NtcCA9IHNyYy0+cGFyYW1fY21wOworCWRzdC0+cGFyYW1fcHJpbnQgPSBzcmMtPnBhcmFtX3ByaW50OworCisJZHN0LT5wa2V5X2ZyZWUgPSBzcmMtPnBrZXlfZnJlZTsKKwlkc3QtPnBrZXlfY3RybCA9IHNyYy0+cGtleV9jdHJsOworCisJfQorCit2b2lkIEVWUF9QS0VZX2FzbjFfZnJlZShFVlBfUEtFWV9BU04xX01FVEhPRCAqYW1ldGgpCisJeworCWlmIChhbWV0aCAmJiAoYW1ldGgtPnBrZXlfZmxhZ3MgJiBBU04xX1BLRVlfRFlOQU1JQykpCisJCXsKKwkJaWYgKGFtZXRoLT5wZW1fc3RyKQorCQkJT1BFTlNTTF9mcmVlKGFtZXRoLT5wZW1fc3RyKTsKKwkJaWYgKGFtZXRoLT5pbmZvKQorCQkJT1BFTlNTTF9mcmVlKGFtZXRoLT5pbmZvKTsKKwkJT1BFTlNTTF9mcmVlKGFtZXRoKTsKKwkJfQorCX0KKwordm9pZCBFVlBfUEtFWV9hc24xX3NldF9wdWJsaWMoRVZQX1BLRVlfQVNOMV9NRVRIT0QgKmFtZXRoLAorCQlpbnQgKCpwdWJfZGVjb2RlKShFVlBfUEtFWSAqcGssIFg1MDlfUFVCS0VZICpwdWIpLAorCQlpbnQgKCpwdWJfZW5jb2RlKShYNTA5X1BVQktFWSAqcHViLCBjb25zdCBFVlBfUEtFWSAqcGspLAorCQlpbnQgKCpwdWJfY21wKShjb25zdCBFVlBfUEtFWSAqYSwgY29uc3QgRVZQX1BLRVkgKmIpLAorCQlpbnQgKCpwdWJfcHJpbnQpKEJJTyAqb3V0LCBjb25zdCBFVlBfUEtFWSAqcGtleSwgaW50IGluZGVudCwKKwkJCQkJCQlBU04xX1BDVFggKnBjdHgpLAorCQlpbnQgKCpwa2V5X3NpemUpKGNvbnN0IEVWUF9QS0VZICpwayksCisJCWludCAoKnBrZXlfYml0cykoY29uc3QgRVZQX1BLRVkgKnBrKSkKKwl7CisJYW1ldGgtPnB1Yl9kZWNvZGUgPSBwdWJfZGVjb2RlOworCWFtZXRoLT5wdWJfZW5jb2RlID0gcHViX2VuY29kZTsKKwlhbWV0aC0+cHViX2NtcCA9IHB1Yl9jbXA7CisJYW1ldGgtPnB1Yl9wcmludCA9IHB1Yl9wcmludDsKKwlhbWV0aC0+cGtleV9zaXplID0gcGtleV9zaXplOworCWFtZXRoLT5wa2V5X2JpdHMgPSBwa2V5X2JpdHM7CisJfQorCit2b2lkIEVWUF9QS0VZX2FzbjFfc2V0X3ByaXZhdGUoRVZQX1BLRVlfQVNOMV9NRVRIT0QgKmFtZXRoLAorCQlpbnQgKCpwcml2X2RlY29kZSkoRVZQX1BLRVkgKnBrLCBQS0NTOF9QUklWX0tFWV9JTkZPICpwOGluZiksCisJCWludCAoKnByaXZfZW5jb2RlKShQS0NTOF9QUklWX0tFWV9JTkZPICpwOCwgY29uc3QgRVZQX1BLRVkgKnBrKSwKKwkJaW50ICgqcHJpdl9wcmludCkoQklPICpvdXQsIGNvbnN0IEVWUF9QS0VZICpwa2V5LCBpbnQgaW5kZW50LAorCQkJCQkJCUFTTjFfUENUWCAqcGN0eCkpCisJeworCWFtZXRoLT5wcml2X2RlY29kZSA9IHByaXZfZGVjb2RlOworCWFtZXRoLT5wcml2X2VuY29kZSA9IHByaXZfZW5jb2RlOworCWFtZXRoLT5wcml2X3ByaW50ID0gcHJpdl9wcmludDsKKwl9CisKK3ZvaWQgRVZQX1BLRVlfYXNuMV9zZXRfcGFyYW0oRVZQX1BLRVlfQVNOMV9NRVRIT0QgKmFtZXRoLAorCQlpbnQgKCpwYXJhbV9kZWNvZGUpKEVWUF9QS0VZICpwa2V5LAorCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKipwZGVyLCBpbnQgZGVybGVuKSwKKwkJaW50ICgqcGFyYW1fZW5jb2RlKShjb25zdCBFVlBfUEtFWSAqcGtleSwgdW5zaWduZWQgY2hhciAqKnBkZXIpLAorCQlpbnQgKCpwYXJhbV9taXNzaW5nKShjb25zdCBFVlBfUEtFWSAqcGspLAorCQlpbnQgKCpwYXJhbV9jb3B5KShFVlBfUEtFWSAqdG8sIGNvbnN0IEVWUF9QS0VZICpmcm9tKSwKKwkJaW50ICgqcGFyYW1fY21wKShjb25zdCBFVlBfUEtFWSAqYSwgY29uc3QgRVZQX1BLRVkgKmIpLAorCQlpbnQgKCpwYXJhbV9wcmludCkoQklPICpvdXQsIGNvbnN0IEVWUF9QS0VZICpwa2V5LCBpbnQgaW5kZW50LAorCQkJCQkJCUFTTjFfUENUWCAqcGN0eCkpCisJeworCWFtZXRoLT5wYXJhbV9kZWNvZGUgPSBwYXJhbV9kZWNvZGU7CisJYW1ldGgtPnBhcmFtX2VuY29kZSA9IHBhcmFtX2VuY29kZTsKKwlhbWV0aC0+cGFyYW1fbWlzc2luZyA9IHBhcmFtX21pc3Npbmc7CisJYW1ldGgtPnBhcmFtX2NvcHkgPSBwYXJhbV9jb3B5OworCWFtZXRoLT5wYXJhbV9jbXAgPSBwYXJhbV9jbXA7CisJYW1ldGgtPnBhcmFtX3ByaW50ID0gcGFyYW1fcHJpbnQ7CisJfQorCit2b2lkIEVWUF9QS0VZX2FzbjFfc2V0X2ZyZWUoRVZQX1BLRVlfQVNOMV9NRVRIT0QgKmFtZXRoLAorCQl2b2lkICgqcGtleV9mcmVlKShFVlBfUEtFWSAqcGtleSkpCisJeworCWFtZXRoLT5wa2V5X2ZyZWUgPSBwa2V5X2ZyZWU7CisJfQorCit2b2lkIEVWUF9QS0VZX2FzbjFfc2V0X2N0cmwoRVZQX1BLRVlfQVNOMV9NRVRIT0QgKmFtZXRoLAorCQlpbnQgKCpwa2V5X2N0cmwpKEVWUF9QS0VZICpwa2V5LCBpbnQgb3AsCisJCQkJCQkJbG9uZyBhcmcxLCB2b2lkICphcmcyKSkKKwl7CisJYW1ldGgtPnBrZXlfY3RybCA9IHBrZXlfY3RybDsKKwl9CmRpZmYgLS1naXQgYS9jcnlwdG8vYXNuMS9hc24xLmggYi9jcnlwdG8vYXNuMS9hc24xLmgKaW5kZXggMTk1ODI5OC4uZjc3MThiNSAxMDA2NDQKLS0tIGEvY3J5cHRvL2FzbjEvYXNuMS5oCisrKyBiL2NyeXB0by9hc24xL2FzbjEuaApAQCAtMjEzLDcgKzIxMyw3IEBACiAJY29uc3QgY2hhciAqc24sKmxuOwogCWludCBuaWQ7CiAJaW50IGxlbmd0aDsKLQl1bnNpZ25lZCBjaGFyICpkYXRhOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGE7CS8qIGRhdGEgcmVtYWlucyBjb25zdCBhZnRlciBpbml0ICovCiAJaW50IGZsYWdzOwkvKiBTaG91bGQgd2UgZnJlZSB0aGlzIG9uZSAqLwogCX0gQVNOMV9PQkpFQ1Q7CiAKQEAgLTIyOCw4ICsyMjgsMTIgQEAKICAqIGNvbXBsZXRlIGFuZCBpcyBhIHBsYWNlIGhvbGRlciBmb3IgY29udGVudCB3aGVuIGl0IGhhZCBhbGwgYmVlbiAKICAqIGFjY2Vzc2VkLiBUaGUgZmxhZyB3aWxsIGJlIHJlc2V0IHdoZW4gY29udGVudCBoYXMgYmVlbiB3cml0dGVuIHRvIGl0LgogICovCi0jZGVmaW5lIEFTTjFfU1RSSU5HX0ZMQUdfQ09OVCAweDAyMCAKIAorI2RlZmluZSBBU04xX1NUUklOR19GTEFHX0NPTlQgMHgwMjAgCisvKiBUaGlzIGZsYWcgaXMgdXNlZCBieSBBU04xIGNvZGUgdG8gaW5kaWNhdGUgYW4gQVNOMV9TVFJJTkcgaXMgYW4gTVNUUklORworICogdHlwZS4KKyAqLworI2RlZmluZSBBU04xX1NUUklOR19GTEFHX01TVFJJTkcgMHgwNDAgCiAvKiBUaGlzIGlzIHRoZSBiYXNlIHR5cGUgdGhhdCBob2xkcyBqdXN0IGFib3V0IGV2ZXJ5dGhpbmcgOi0pICovCiB0eXBlZGVmIHN0cnVjdCBhc24xX3N0cmluZ19zdAogCXsKQEAgLTMzMCw2ICszMzQsMTMgQEAKIAl0eXBlICpuYW1lIyNfbmV3KHZvaWQpOyBcCiAJdm9pZCBuYW1lIyNfZnJlZSh0eXBlICphKTsKIAorI2RlZmluZSBERUNMQVJFX0FTTjFfUFJJTlRfRlVOQ1RJT04oc3RuYW1lKSBcCisJREVDTEFSRV9BU04xX1BSSU5UX0ZVTkNUSU9OX2ZuYW1lKHN0bmFtZSwgc3RuYW1lKQorCisjZGVmaW5lIERFQ0xBUkVfQVNOMV9QUklOVF9GVU5DVElPTl9mbmFtZShzdG5hbWUsIGZuYW1lKSBcCisJaW50IGZuYW1lIyNfcHJpbnRfY3R4KEJJTyAqb3V0LCBzdG5hbWUgKngsIGludCBpbmRlbnQsIFwKKwkJCQkJIGNvbnN0IEFTTjFfUENUWCAqcGN0eCk7CisKICNkZWZpbmUgRDJJX09GKHR5cGUpIHR5cGUgKigqKSh0eXBlICoqLGNvbnN0IHVuc2lnbmVkIGNoYXIgKiosbG9uZykKICNkZWZpbmUgSTJEX09GKHR5cGUpIGludCAoKikodHlwZSAqLHVuc2lnbmVkIGNoYXIgKiopCiAjZGVmaW5lIEkyRF9PRl9jb25zdCh0eXBlKSBpbnQgKCopKGNvbnN0IHR5cGUgKix1bnNpZ25lZCBjaGFyICoqKQpAQCAtMzQ0LDggKzM1NSw2IEBACiAgICAgKCh2b2lkKikgKDEgPyBwIDogKHR5cGUqKTApKQogI2RlZmluZSBDSEVDS0VEX1BQVFJfT0YodHlwZSwgcCkgXAogICAgICgodm9pZCoqKSAoMSA/IHAgOiAodHlwZSoqKTApKQotI2RlZmluZSBDSEVDS0VEX1BUUl9PRl9UT19DSEFSKHR5cGUsIHApIFwKLSAgICAoKGNoYXIqKSAoMSA/IHAgOiAodHlwZSopMCkpCiAKICNkZWZpbmUgVFlQRURFRl9EMklfT0YodHlwZSkgdHlwZWRlZiB0eXBlICpkMmlfb2ZfIyN0eXBlKHR5cGUgKiosY29uc3QgdW5zaWduZWQgY2hhciAqKixsb25nKQogI2RlZmluZSBUWVBFREVGX0kyRF9PRih0eXBlKSB0eXBlZGVmIGludCBpMmRfb2ZfIyN0eXBlKHR5cGUgKix1bnNpZ25lZCBjaGFyICoqKQpAQCAtNTM2LDI4ICs1NDUsMjMgQEAKIAkJICogY29udGFpbiB0aGUgc2V0IG9yIHNlcXVlbmNlIGJ5dGVzICovCiAJCUFTTjFfU1RSSU5HICoJCXNldDsKIAkJQVNOMV9TVFJJTkcgKgkJc2VxdWVuY2U7Ci0JCUFTTjFfVkFMVUUgICoJCWFzbjFfdmFsdWU7CisJCUFTTjFfVkFMVUUgKgkJYXNuMV92YWx1ZTsKIAkJfSB2YWx1ZTsKIAl9IEFTTjFfVFlQRTsKIAogREVDTEFSRV9TVEFDS19PRihBU04xX1RZUEUpCiBERUNMQVJFX0FTTjFfU0VUX09GKEFTTjFfVFlQRSkKIAotdHlwZWRlZiBzdHJ1Y3QgYXNuMV9tZXRob2Rfc3QKLQl7Ci0JaTJkX29mX3ZvaWQgKmkyZDsKLQlkMmlfb2Zfdm9pZCAqZDJpOwotCXZvaWQgKigqY3JlYXRlKSh2b2lkKTsKLQl2b2lkICgqZGVzdHJveSkodm9pZCAqKTsKLQl9IEFTTjFfTUVUSE9EOwordHlwZWRlZiBTVEFDS19PRihBU04xX1RZUEUpIEFTTjFfU0VRVUVOQ0VfQU5ZOwogCi0vKiBUaGlzIGlzIHVzZWQgd2hlbiBwYXJzaW5nIHNvbWUgTmV0c2NhcGUgb2JqZWN0cyAqLwotdHlwZWRlZiBzdHJ1Y3QgYXNuMV9oZWFkZXJfc3QKK0RFQ0xBUkVfQVNOMV9FTkNPREVfRlVOQ1RJT05TX2NvbnN0KEFTTjFfU0VRVUVOQ0VfQU5ZLCBBU04xX1NFUVVFTkNFX0FOWSkKK0RFQ0xBUkVfQVNOMV9FTkNPREVfRlVOQ1RJT05TX2NvbnN0KEFTTjFfU0VRVUVOQ0VfQU5ZLCBBU04xX1NFVF9BTlkpCisKK3R5cGVkZWYgc3RydWN0IE5FVFNDQVBFX1g1MDlfc3QKIAl7CiAJQVNOMV9PQ1RFVF9TVFJJTkcgKmhlYWRlcjsKLQl2b2lkICpkYXRhOwotCUFTTjFfTUVUSE9EICptZXRoOwotCX0gQVNOMV9IRUFERVI7CisJWDUwOSAqY2VydDsKKwl9IE5FVFNDQVBFX1g1MDk7CiAKIC8qIFRoaXMgaXMgdXNlZCB0byBjb250YWluIGEgbGlzdCBvZiBiaXQgbmFtZXMgKi8KIHR5cGVkZWYgc3RydWN0IEJJVF9TVFJJTkdfQklUTkFNRV9zdCB7CkBAIC01NzcsMzIgKzU4MSwzNCBAQAogCQlBU04xX1NUUklOR190eXBlX25ldyhWX0FTTjFfQklUX1NUUklORykKICNkZWZpbmUgTV9BU04xX0JJVF9TVFJJTkdfZnJlZShhKQlBU04xX1NUUklOR19mcmVlKChBU04xX1NUUklORyAqKWEpCiAjZGVmaW5lIE1fQVNOMV9CSVRfU1RSSU5HX2R1cChhKSAoQVNOMV9CSVRfU1RSSU5HICopXAotCQlBU04xX1NUUklOR19kdXAoKEFTTjFfU1RSSU5HICopYSkKKwkJQVNOMV9TVFJJTkdfZHVwKChjb25zdCBBU04xX1NUUklORyAqKWEpCiAjZGVmaW5lIE1fQVNOMV9CSVRfU1RSSU5HX2NtcChhLGIpIEFTTjFfU1RSSU5HX2NtcChcCi0JCShBU04xX1NUUklORyAqKWEsKEFTTjFfU1RSSU5HICopYikKKwkJKGNvbnN0IEFTTjFfU1RSSU5HICopYSwoY29uc3QgQVNOMV9TVFJJTkcgKiliKQogI2RlZmluZSBNX0FTTjFfQklUX1NUUklOR19zZXQoYSxiLGMpIEFTTjFfU1RSSU5HX3NldCgoQVNOMV9TVFJJTkcgKilhLGIsYykKIAogI2RlZmluZSBNX0FTTjFfSU5URUdFUl9uZXcoKQkoQVNOMV9JTlRFR0VSICopXAogCQlBU04xX1NUUklOR190eXBlX25ldyhWX0FTTjFfSU5URUdFUikKICNkZWZpbmUgTV9BU04xX0lOVEVHRVJfZnJlZShhKQkJQVNOMV9TVFJJTkdfZnJlZSgoQVNOMV9TVFJJTkcgKilhKQotI2RlZmluZSBNX0FTTjFfSU5URUdFUl9kdXAoYSkgKEFTTjFfSU5URUdFUiAqKUFTTjFfU1RSSU5HX2R1cCgoQVNOMV9TVFJJTkcgKilhKQorI2RlZmluZSBNX0FTTjFfSU5URUdFUl9kdXAoYSkgKEFTTjFfSU5URUdFUiAqKVwKKwkJQVNOMV9TVFJJTkdfZHVwKChjb25zdCBBU04xX1NUUklORyAqKWEpCiAjZGVmaW5lIE1fQVNOMV9JTlRFR0VSX2NtcChhLGIpCUFTTjFfU1RSSU5HX2NtcChcCi0JCShBU04xX1NUUklORyAqKWEsKEFTTjFfU1RSSU5HICopYikKKwkJKGNvbnN0IEFTTjFfU1RSSU5HICopYSwoY29uc3QgQVNOMV9TVFJJTkcgKiliKQogCiAjZGVmaW5lIE1fQVNOMV9FTlVNRVJBVEVEX25ldygpCShBU04xX0VOVU1FUkFURUQgKilcCiAJCUFTTjFfU1RSSU5HX3R5cGVfbmV3KFZfQVNOMV9FTlVNRVJBVEVEKQogI2RlZmluZSBNX0FTTjFfRU5VTUVSQVRFRF9mcmVlKGEpCUFTTjFfU1RSSU5HX2ZyZWUoKEFTTjFfU1RSSU5HICopYSkKLSNkZWZpbmUgTV9BU04xX0VOVU1FUkFURURfZHVwKGEpIChBU04xX0VOVU1FUkFURUQgKilBU04xX1NUUklOR19kdXAoKEFTTjFfU1RSSU5HICopYSkKKyNkZWZpbmUgTV9BU04xX0VOVU1FUkFURURfZHVwKGEpIChBU04xX0VOVU1FUkFURUQgKilcCisJCUFTTjFfU1RSSU5HX2R1cCgoY29uc3QgQVNOMV9TVFJJTkcgKilhKQogI2RlZmluZSBNX0FTTjFfRU5VTUVSQVRFRF9jbXAoYSxiKQlBU04xX1NUUklOR19jbXAoXAotCQkoQVNOMV9TVFJJTkcgKilhLChBU04xX1NUUklORyAqKWIpCisJCShjb25zdCBBU04xX1NUUklORyAqKWEsKGNvbnN0IEFTTjFfU1RSSU5HICopYikKIAogI2RlZmluZSBNX0FTTjFfT0NURVRfU1RSSU5HX25ldygpCShBU04xX09DVEVUX1NUUklORyAqKVwKIAkJQVNOMV9TVFJJTkdfdHlwZV9uZXcoVl9BU04xX09DVEVUX1NUUklORykKICNkZWZpbmUgTV9BU04xX09DVEVUX1NUUklOR19mcmVlKGEpCUFTTjFfU1RSSU5HX2ZyZWUoKEFTTjFfU1RSSU5HICopYSkKICNkZWZpbmUgTV9BU04xX09DVEVUX1NUUklOR19kdXAoYSkgKEFTTjFfT0NURVRfU1RSSU5HICopXAotCQlBU04xX1NUUklOR19kdXAoKEFTTjFfU1RSSU5HICopYSkKKwkJQVNOMV9TVFJJTkdfZHVwKChjb25zdCBBU04xX1NUUklORyAqKWEpCiAjZGVmaW5lIE1fQVNOMV9PQ1RFVF9TVFJJTkdfY21wKGEsYikgQVNOMV9TVFJJTkdfY21wKFwKLQkJKEFTTjFfU1RSSU5HICopYSwoQVNOMV9TVFJJTkcgKiliKQorCQkoY29uc3QgQVNOMV9TVFJJTkcgKilhLChjb25zdCBBU04xX1NUUklORyAqKWIpCiAjZGVmaW5lIE1fQVNOMV9PQ1RFVF9TVFJJTkdfc2V0KGEsYixjKQlBU04xX1NUUklOR19zZXQoKEFTTjFfU1RSSU5HICopYSxiLGMpCiAjZGVmaW5lIE1fQVNOMV9PQ1RFVF9TVFJJTkdfcHJpbnQoYSxiKQlBU04xX1NUUklOR19wcmludChhLChBU04xX1NUUklORyAqKWIpCiAjZGVmaW5lIE1faTJkX0FTTjFfT0NURVRfU1RSSU5HKGEscHApIFwKQEAgLTY4Niw3ICs2OTIsNyBAQAogCQlBU04xX1NUUklOR190eXBlX25ldyhWX0FTTjFfSUE1U1RSSU5HKQogI2RlZmluZSBNX0FTTjFfSUE1U1RSSU5HX2ZyZWUoYSkJQVNOMV9TVFJJTkdfZnJlZSgoQVNOMV9TVFJJTkcgKilhKQogI2RlZmluZSBNX0FTTjFfSUE1U1RSSU5HX2R1cChhKQlcCi0JCQkoQVNOMV9JQTVTVFJJTkcgKilBU04xX1NUUklOR19kdXAoKEFTTjFfU1RSSU5HICopYSkKKwkJKEFTTjFfSUE1U1RSSU5HICopQVNOMV9TVFJJTkdfZHVwKChjb25zdCBBU04xX1NUUklORyAqKWEpCiAjZGVmaW5lIE1faTJkX0FTTjFfSUE1U1RSSU5HKGEscHApIFwKIAkJaTJkX0FTTjFfYnl0ZXMoKEFTTjFfU1RSSU5HICopYSxwcCxWX0FTTjFfSUE1U1RSSU5HLFwKIAkJCVZfQVNOMV9VTklWRVJTQUwpCkBAIC02OTcsMTggKzcwMywyMCBAQAogI2RlZmluZSBNX0FTTjFfVVRDVElNRV9uZXcoKQkoQVNOMV9VVENUSU1FICopXAogCQlBU04xX1NUUklOR190eXBlX25ldyhWX0FTTjFfVVRDVElNRSkKICNkZWZpbmUgTV9BU04xX1VUQ1RJTUVfZnJlZShhKQlBU04xX1NUUklOR19mcmVlKChBU04xX1NUUklORyAqKWEpCi0jZGVmaW5lIE1fQVNOMV9VVENUSU1FX2R1cChhKSAoQVNOMV9VVENUSU1FICopQVNOMV9TVFJJTkdfZHVwKChBU04xX1NUUklORyAqKWEpCisjZGVmaW5lIE1fQVNOMV9VVENUSU1FX2R1cChhKSAoQVNOMV9VVENUSU1FICopXAorCQlBU04xX1NUUklOR19kdXAoKGNvbnN0IEFTTjFfU1RSSU5HICopYSkKIAogI2RlZmluZSBNX0FTTjFfR0VORVJBTElaRURUSU1FX25ldygpCShBU04xX0dFTkVSQUxJWkVEVElNRSAqKVwKIAkJQVNOMV9TVFJJTkdfdHlwZV9uZXcoVl9BU04xX0dFTkVSQUxJWkVEVElNRSkKICNkZWZpbmUgTV9BU04xX0dFTkVSQUxJWkVEVElNRV9mcmVlKGEpCUFTTjFfU1RSSU5HX2ZyZWUoKEFTTjFfU1RSSU5HICopYSkKICNkZWZpbmUgTV9BU04xX0dFTkVSQUxJWkVEVElNRV9kdXAoYSkgKEFTTjFfR0VORVJBTElaRURUSU1FICopQVNOMV9TVFJJTkdfZHVwKFwKLQkoQVNOMV9TVFJJTkcgKilhKQorCShjb25zdCBBU04xX1NUUklORyAqKWEpCiAKICNkZWZpbmUgTV9BU04xX1RJTUVfbmV3KCkJKEFTTjFfVElNRSAqKVwKIAkJQVNOMV9TVFJJTkdfdHlwZV9uZXcoVl9BU04xX1VUQ1RJTUUpCiAjZGVmaW5lIE1fQVNOMV9USU1FX2ZyZWUoYSkJQVNOMV9TVFJJTkdfZnJlZSgoQVNOMV9TVFJJTkcgKilhKQotI2RlZmluZSBNX0FTTjFfVElNRV9kdXAoYSkgKEFTTjFfVElNRSAqKUFTTjFfU1RSSU5HX2R1cCgoQVNOMV9TVFJJTkcgKilhKQorI2RlZmluZSBNX0FTTjFfVElNRV9kdXAoYSkgKEFTTjFfVElNRSAqKVwKKwlBU04xX1NUUklOR19kdXAoKGNvbnN0IEFTTjFfU1RSSU5HICopYSkKIAogI2RlZmluZSBNX0FTTjFfR0VORVJBTFNUUklOR19uZXcoKQkoQVNOMV9HRU5FUkFMU1RSSU5HICopXAogCQlBU04xX1NUUklOR190eXBlX25ldyhWX0FTTjFfR0VORVJBTFNUUklORykKQEAgLTc2OSw2ICs3NzcsNyBAQAogaW50IEFTTjFfVFlQRV9nZXQoQVNOMV9UWVBFICphKTsKIHZvaWQgQVNOMV9UWVBFX3NldChBU04xX1RZUEUgKmEsIGludCB0eXBlLCB2b2lkICp2YWx1ZSk7CiBpbnQgQVNOMV9UWVBFX3NldDEoQVNOMV9UWVBFICphLCBpbnQgdHlwZSwgY29uc3Qgdm9pZCAqdmFsdWUpOworaW50ICAgICAgICAgICAgQVNOMV9UWVBFX2NtcChBU04xX1RZUEUgKmEsIEFTTjFfVFlQRSAqYik7CiAKIEFTTjFfT0JKRUNUICoJQVNOMV9PQkpFQ1RfbmV3KHZvaWQgKTsKIHZvaWQJCUFTTjFfT0JKRUNUX2ZyZWUoQVNOMV9PQkpFQ1QgKmEpOwpAQCAtNzg1LDE0ICs3OTQsMTUgQEAKIAogQVNOMV9TVFJJTkcgKglBU04xX1NUUklOR19uZXcodm9pZCk7CiB2b2lkCQlBU04xX1NUUklOR19mcmVlKEFTTjFfU1RSSU5HICphKTsKLUFTTjFfU1RSSU5HICoJQVNOMV9TVFJJTkdfZHVwKEFTTjFfU1RSSU5HICphKTsKK2ludAkJQVNOMV9TVFJJTkdfY29weShBU04xX1NUUklORyAqZHN0LCBjb25zdCBBU04xX1NUUklORyAqc3RyKTsKK0FTTjFfU1RSSU5HICoJQVNOMV9TVFJJTkdfZHVwKGNvbnN0IEFTTjFfU1RSSU5HICphKTsKIEFTTjFfU1RSSU5HICoJQVNOMV9TVFJJTkdfdHlwZV9uZXcoaW50IHR5cGUgKTsKLWludCAJCUFTTjFfU1RSSU5HX2NtcChBU04xX1NUUklORyAqYSwgQVNOMV9TVFJJTkcgKmIpOworaW50IAkJQVNOMV9TVFJJTkdfY21wKGNvbnN0IEFTTjFfU1RSSU5HICphLCBjb25zdCBBU04xX1NUUklORyAqYik7CiAgIC8qIFNpbmNlIHRoaXMgaXMgdXNlZCB0byBzdG9yZSBhbGwgc29ydHMgb2YgdGhpbmdzLCB2aWEgbWFjcm9zLCBmb3Igbm93LCBtYWtlCiAgICAgIGl0cyBkYXRhIHZvaWQgKiAqLwogaW50IAkJQVNOMV9TVFJJTkdfc2V0KEFTTjFfU1RSSU5HICpzdHIsIGNvbnN0IHZvaWQgKmRhdGEsIGludCBsZW4pOwogdm9pZAkJQVNOMV9TVFJJTkdfc2V0MChBU04xX1NUUklORyAqc3RyLCB2b2lkICpkYXRhLCBpbnQgbGVuKTsKLWludCBBU04xX1NUUklOR19sZW5ndGgoQVNOMV9TVFJJTkcgKngpOworaW50IEFTTjFfU1RSSU5HX2xlbmd0aChjb25zdCBBU04xX1NUUklORyAqeCk7CiB2b2lkIEFTTjFfU1RSSU5HX2xlbmd0aF9zZXQoQVNOMV9TVFJJTkcgKngsIGludCBuKTsKIGludCBBU04xX1NUUklOR190eXBlKEFTTjFfU1RSSU5HICp4KTsKIHVuc2lnbmVkIGNoYXIgKiBBU04xX1NUUklOR19kYXRhKEFTTjFfU1RSSU5HICp4KTsKQEAgLTgwNSw2ICs4MTUsOCBAQAogCQkJaW50IGxlbmd0aCApOwogaW50CQlBU04xX0JJVF9TVFJJTkdfc2V0X2JpdChBU04xX0JJVF9TVFJJTkcgKmEsIGludCBuLCBpbnQgdmFsdWUpOwogaW50CQlBU04xX0JJVF9TVFJJTkdfZ2V0X2JpdChBU04xX0JJVF9TVFJJTkcgKmEsIGludCBuKTsKK2ludCAgICAgICAgICAgIEFTTjFfQklUX1NUUklOR19jaGVjayhBU04xX0JJVF9TVFJJTkcgKmEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZmxhZ3MsIGludCBmbGFnc19sZW4pOwogCiAjaWZuZGVmIE9QRU5TU0xfTk9fQklPCiBpbnQgQVNOMV9CSVRfU1RSSU5HX25hbWVfcHJpbnQoQklPICpvdXQsIEFTTjFfQklUX1NUUklORyAqYnMsCkBAIC04MjMsMTMgKzgzNSwxNSBAQAogCQkJbG9uZyBsZW5ndGgpOwogQVNOMV9JTlRFR0VSICpkMmlfQVNOMV9VSU5URUdFUihBU04xX0lOVEVHRVIgKiphLGNvbnN0IHVuc2lnbmVkIGNoYXIgKipwcCwKIAkJCWxvbmcgbGVuZ3RoKTsKLUFTTjFfSU5URUdFUiAqCUFTTjFfSU5URUdFUl9kdXAoQVNOMV9JTlRFR0VSICp4KTsKLWludCBBU04xX0lOVEVHRVJfY21wKEFTTjFfSU5URUdFUiAqeCwgQVNOMV9JTlRFR0VSICp5KTsKK0FTTjFfSU5URUdFUiAqCUFTTjFfSU5URUdFUl9kdXAoY29uc3QgQVNOMV9JTlRFR0VSICp4KTsKK2ludCBBU04xX0lOVEVHRVJfY21wKGNvbnN0IEFTTjFfSU5URUdFUiAqeCwgY29uc3QgQVNOMV9JTlRFR0VSICp5KTsKIAogREVDTEFSRV9BU04xX0ZVTkNUSU9OUyhBU04xX0VOVU1FUkFURUQpCiAKIGludCBBU04xX1VUQ1RJTUVfY2hlY2soQVNOMV9VVENUSU1FICphKTsKIEFTTjFfVVRDVElNRSAqQVNOMV9VVENUSU1FX3NldChBU04xX1VUQ1RJTUUgKnMsdGltZV90IHQpOworQVNOMV9VVENUSU1FICpBU04xX1VUQ1RJTUVfYWRqKEFTTjFfVVRDVElNRSAqcywgdGltZV90IHQsCisJCQkJaW50IG9mZnNldF9kYXksIGxvbmcgb2Zmc2V0X3NlYyk7CiBpbnQgQVNOMV9VVENUSU1FX3NldF9zdHJpbmcoQVNOMV9VVENUSU1FICpzLCBjb25zdCBjaGFyICpzdHIpOwogaW50IEFTTjFfVVRDVElNRV9jbXBfdGltZV90KGNvbnN0IEFTTjFfVVRDVElNRSAqcywgdGltZV90IHQpOwogI2lmIDAKQEAgLTgzOCwxMSArODUyLDEzIEBACiAKIGludCBBU04xX0dFTkVSQUxJWkVEVElNRV9jaGVjayhBU04xX0dFTkVSQUxJWkVEVElNRSAqYSk7CiBBU04xX0dFTkVSQUxJWkVEVElNRSAqQVNOMV9HRU5FUkFMSVpFRFRJTUVfc2V0KEFTTjFfR0VORVJBTElaRURUSU1FICpzLHRpbWVfdCB0KTsKK0FTTjFfR0VORVJBTElaRURUSU1FICpBU04xX0dFTkVSQUxJWkVEVElNRV9hZGooQVNOMV9HRU5FUkFMSVpFRFRJTUUgKnMsCisJICAgICB0aW1lX3QgdCwgaW50IG9mZnNldF9kYXksIGxvbmcgb2Zmc2V0X3NlYyk7CiBpbnQgQVNOMV9HRU5FUkFMSVpFRFRJTUVfc2V0X3N0cmluZyhBU04xX0dFTkVSQUxJWkVEVElNRSAqcywgY29uc3QgY2hhciAqc3RyKTsKIAogREVDTEFSRV9BU04xX0ZVTkNUSU9OUyhBU04xX09DVEVUX1NUUklORykKLUFTTjFfT0NURVRfU1RSSU5HICoJQVNOMV9PQ1RFVF9TVFJJTkdfZHVwKEFTTjFfT0NURVRfU1RSSU5HICphKTsKLWludCAJQVNOMV9PQ1RFVF9TVFJJTkdfY21wKEFTTjFfT0NURVRfU1RSSU5HICphLCBBU04xX09DVEVUX1NUUklORyAqYik7CitBU04xX09DVEVUX1NUUklORyAqCUFTTjFfT0NURVRfU1RSSU5HX2R1cChjb25zdCBBU04xX09DVEVUX1NUUklORyAqYSk7CitpbnQgCUFTTjFfT0NURVRfU1RSSU5HX2NtcChjb25zdCBBU04xX09DVEVUX1NUUklORyAqYSwgY29uc3QgQVNOMV9PQ1RFVF9TVFJJTkcgKmIpOwogaW50IAlBU04xX09DVEVUX1NUUklOR19zZXQoQVNOMV9PQ1RFVF9TVFJJTkcgKnN0ciwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxlbik7CiAKIERFQ0xBUkVfQVNOMV9GVU5DVElPTlMoQVNOMV9WSVNJQkxFU1RSSU5HKQpAQCAtODY5LDE0ICs4ODUsMjAgQEAKIERFQ0xBUkVfQVNOMV9JVEVNKEFTTjFfT0NURVRfU1RSSU5HX05ERUYpCiAKIEFTTjFfVElNRSAqQVNOMV9USU1FX3NldChBU04xX1RJTUUgKnMsdGltZV90IHQpOworQVNOMV9USU1FICpBU04xX1RJTUVfYWRqKEFTTjFfVElNRSAqcyx0aW1lX3QgdCwKKwkJCQlpbnQgb2Zmc2V0X2RheSwgbG9uZyBvZmZzZXRfc2VjKTsKIGludCBBU04xX1RJTUVfY2hlY2soQVNOMV9USU1FICp0KTsKIEFTTjFfR0VORVJBTElaRURUSU1FICpBU04xX1RJTUVfdG9fZ2VuZXJhbGl6ZWR0aW1lKEFTTjFfVElNRSAqdCwgQVNOMV9HRU5FUkFMSVpFRFRJTUUgKipvdXQpOworaW50IEFTTjFfVElNRV9zZXRfc3RyaW5nKEFTTjFfVElNRSAqcywgY29uc3QgY2hhciAqc3RyKTsKIAotaW50IGkyZF9BU04xX1NFVChTVEFDSyAqYSwgdW5zaWduZWQgY2hhciAqKnBwLAotCQkgaTJkX29mX3ZvaWQgKmkyZCwgaW50IGV4X3RhZywgaW50IGV4X2NsYXNzLCBpbnQgaXNfc2V0KTsKLVNUQUNLICoJZDJpX0FTTjFfU0VUKFNUQUNLICoqYSwgY29uc3QgdW5zaWduZWQgY2hhciAqKnBwLCBsb25nIGxlbmd0aCwKLQkJICAgICBkMmlfb2Zfdm9pZCAqZDJpLCB2b2lkICgqZnJlZV9mdW5jKSh2b2lkICopLAotCQkgICAgIGludCBleF90YWcsIGludCBleF9jbGFzcyk7CitpbnQgaTJkX0FTTjFfU0VUKFNUQUNLX09GKE9QRU5TU0xfQkxPQ0spICphLCB1bnNpZ25lZCBjaGFyICoqcHAsCisJCSBpMmRfb2Zfdm9pZCAqaTJkLCBpbnQgZXhfdGFnLCBpbnQgZXhfY2xhc3MsCisJCSBpbnQgaXNfc2V0KTsKK1NUQUNLX09GKE9QRU5TU0xfQkxPQ0spICpkMmlfQVNOMV9TRVQoU1RBQ0tfT0YoT1BFTlNTTF9CTE9DSykgKiphLAorCQkJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqKnBwLAorCQkJICAgICAgbG9uZyBsZW5ndGgsIGQyaV9vZl92b2lkICpkMmksCisJCQkgICAgICB2b2lkICgqZnJlZV9mdW5jKShPUEVOU1NMX0JMT0NLKSwgaW50IGV4X3RhZywKKwkJCSAgICAgIGludCBleF9jbGFzcyk7CiAKICNpZm5kZWYgT1BFTlNTTF9OT19CSU8KIGludCBpMmFfQVNOMV9JTlRFR0VSKEJJTyAqYnAsIEFTTjFfSU5URUdFUiAqYSk7CkBAIC04OTQsOSArOTE2LDkgQEAKIAljb25zdCBjaGFyICpzbiwgY29uc3QgY2hhciAqbG4pOwogCiBpbnQgQVNOMV9JTlRFR0VSX3NldChBU04xX0lOVEVHRVIgKmEsIGxvbmcgdik7Ci1sb25nIEFTTjFfSU5URUdFUl9nZXQoQVNOMV9JTlRFR0VSICphKTsKLUFTTjFfSU5URUdFUiAqQk5fdG9fQVNOMV9JTlRFR0VSKEJJR05VTSAqYm4sIEFTTjFfSU5URUdFUiAqYWkpOwotQklHTlVNICpBU04xX0lOVEVHRVJfdG9fQk4oQVNOMV9JTlRFR0VSICphaSxCSUdOVU0gKmJuKTsKK2xvbmcgQVNOMV9JTlRFR0VSX2dldChjb25zdCBBU04xX0lOVEVHRVIgKmEpOworQVNOMV9JTlRFR0VSICpCTl90b19BU04xX0lOVEVHRVIoY29uc3QgQklHTlVNICpibiwgQVNOMV9JTlRFR0VSICphaSk7CitCSUdOVU0gKkFTTjFfSU5URUdFUl90b19CTihjb25zdCBBU04xX0lOVEVHRVIgKmFpLEJJR05VTSAqYm4pOwogCiBpbnQgQVNOMV9FTlVNRVJBVEVEX3NldChBU04xX0VOVU1FUkFURUQgKmEsIGxvbmcgdik7CiBsb25nIEFTTjFfRU5VTUVSQVRFRF9nZXQoQVNOMV9FTlVNRVJBVEVEICphKTsKQEAgLTkzMCwxNyArOTUyLDE3IEBACiBpbnQgQVNOMV9vYmplY3Rfc2l6ZShpbnQgY29uc3RydWN0ZWQsIGludCBsZW5ndGgsIGludCB0YWcpOwogCiAvKiBVc2VkIHRvIGltcGxlbWVudCBvdGhlciBmdW5jdGlvbnMgKi8KLXZvaWQgKkFTTjFfZHVwKGkyZF9vZl92b2lkICppMmQsIGQyaV9vZl92b2lkICpkMmksIGNoYXIgKngpOwordm9pZCAqQVNOMV9kdXAoaTJkX29mX3ZvaWQgKmkyZCwgZDJpX29mX3ZvaWQgKmQyaSwgdm9pZCAqeCk7CiAKICNkZWZpbmUgQVNOMV9kdXBfb2YodHlwZSxpMmQsZDJpLHgpIFwKICAgICAoKHR5cGUqKUFTTjFfZHVwKENIRUNLRURfSTJEX09GKHR5cGUsIGkyZCksIFwKIAkJICAgICBDSEVDS0VEX0QySV9PRih0eXBlLCBkMmkpLCBcCi0JCSAgICAgQ0hFQ0tFRF9QVFJfT0ZfVE9fQ0hBUih0eXBlLCB4KSkpCisJCSAgICAgQ0hFQ0tFRF9QVFJfT0YodHlwZSwgeCkpKQogCiAjZGVmaW5lIEFTTjFfZHVwX29mX2NvbnN0KHR5cGUsaTJkLGQyaSx4KSBcCiAgICAgKCh0eXBlKilBU04xX2R1cChDSEVDS0VEX0kyRF9PRihjb25zdCB0eXBlLCBpMmQpLCBcCiAJCSAgICAgQ0hFQ0tFRF9EMklfT0YodHlwZSwgZDJpKSwgXAotCQkgICAgIENIRUNLRURfUFRSX09GX1RPX0NIQVIoY29uc3QgdHlwZSwgeCkpKQorCQkgICAgIENIRUNLRURfUFRSX09GKGNvbnN0IHR5cGUsIHgpKSkKIAogdm9pZCAqQVNOMV9pdGVtX2R1cChjb25zdCBBU04xX0lURU0gKml0LCB2b2lkICp4KTsKIApAQCAtMTAwMSwzMCArMTAyMywyNCBAQAogCQkgIENIRUNLRURfUFRSX09GKGNvbnN0IHR5cGUsIHgpKSkKIAogaW50IEFTTjFfaXRlbV9pMmRfYmlvKGNvbnN0IEFTTjFfSVRFTSAqaXQsIEJJTyAqb3V0LCB2b2lkICp4KTsKLWludCBBU04xX1VUQ1RJTUVfcHJpbnQoQklPICpmcCxBU04xX1VUQ1RJTUUgKmEpOwotaW50IEFTTjFfR0VORVJBTElaRURUSU1FX3ByaW50KEJJTyAqZnAsQVNOMV9HRU5FUkFMSVpFRFRJTUUgKmEpOwotaW50IEFTTjFfVElNRV9wcmludChCSU8gKmZwLEFTTjFfVElNRSAqYSk7Ci1pbnQgQVNOMV9TVFJJTkdfcHJpbnQoQklPICpicCxBU04xX1NUUklORyAqdik7CitpbnQgQVNOMV9VVENUSU1FX3ByaW50KEJJTyAqZnAsIGNvbnN0IEFTTjFfVVRDVElNRSAqYSk7CitpbnQgQVNOMV9HRU5FUkFMSVpFRFRJTUVfcHJpbnQoQklPICpmcCwgY29uc3QgQVNOMV9HRU5FUkFMSVpFRFRJTUUgKmEpOworaW50IEFTTjFfVElNRV9wcmludChCSU8gKmZwLCBjb25zdCBBU04xX1RJTUUgKmEpOworaW50IEFTTjFfU1RSSU5HX3ByaW50KEJJTyAqYnAsIGNvbnN0IEFTTjFfU1RSSU5HICp2KTsKIGludCBBU04xX1NUUklOR19wcmludF9leChCSU8gKm91dCwgQVNOMV9TVFJJTkcgKnN0ciwgdW5zaWduZWQgbG9uZyBmbGFncyk7CitpbnQgQVNOMV9ibl9wcmludChCSU8gKmJwLCBjb25zdCBjaGFyICpudW1iZXIsIGNvbnN0IEJJR05VTSAqbnVtLAorCQkJCXVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IG9mZik7CiBpbnQgQVNOMV9wYXJzZShCSU8gKmJwLGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBwLGxvbmcgbGVuLGludCBpbmRlbnQpOwogaW50IEFTTjFfcGFyc2VfZHVtcChCSU8gKmJwLGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBwLGxvbmcgbGVuLGludCBpbmRlbnQsaW50IGR1bXApOwogI2VuZGlmCiBjb25zdCBjaGFyICpBU04xX3RhZzJzdHIoaW50IHRhZyk7CiAKLS8qIFVzZWQgdG8gbG9hZCBhbmQgd3JpdGUgbmV0c2NhcGUgZm9ybWF0IGNlcnQva2V5ICovCi1pbnQgaTJkX0FTTjFfSEVBREVSKEFTTjFfSEVBREVSICphLHVuc2lnbmVkIGNoYXIgKipwcCk7Ci1BU04xX0hFQURFUiAqZDJpX0FTTjFfSEVBREVSKEFTTjFfSEVBREVSICoqYSxjb25zdCB1bnNpZ25lZCBjaGFyICoqcHAsIGxvbmcgbGVuZ3RoKTsKLUFTTjFfSEVBREVSICpBU04xX0hFQURFUl9uZXcodm9pZCApOwotdm9pZCBBU04xX0hFQURFUl9mcmVlKEFTTjFfSEVBREVSICphKTsKKy8qIFVzZWQgdG8gbG9hZCBhbmQgd3JpdGUgbmV0c2NhcGUgZm9ybWF0IGNlcnQgKi8KKworREVDTEFSRV9BU04xX0ZVTkNUSU9OUyhORVRTQ0FQRV9YNTA5KQogCiBpbnQgQVNOMV9VTklWRVJTQUxTVFJJTkdfdG9fc3RyaW5nKEFTTjFfVU5JVkVSU0FMU1RSSU5HICpzKTsKIAotLyogTm90IHVzZWQgdGhhdCBtdWNoIGF0IHRoaXMgcG9pbnQsIGV4Y2VwdCBmb3IgdGhlIGZpcnN0IHR3byAqLwotQVNOMV9NRVRIT0QgKlg1MDlfYXNuMV9tZXRoKHZvaWQpOwotQVNOMV9NRVRIT0QgKlJTQVByaXZhdGVLZXlfYXNuMV9tZXRoKHZvaWQpOwotQVNOMV9NRVRIT0QgKkFTTjFfSUE1U1RSSU5HX2FzbjFfbWV0aCh2b2lkKTsKLUFTTjFfTUVUSE9EICpBU04xX0JJVF9TVFJJTkdfYXNuMV9tZXRoKHZvaWQpOwotCiBpbnQgQVNOMV9UWVBFX3NldF9vY3RldHN0cmluZyhBU04xX1RZUEUgKmEsCiAJdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxlbik7CiBpbnQgQVNOMV9UWVBFX2dldF9vY3RldHN0cmluZyhBU04xX1RZUEUgKmEsCkBAIC0xMDM0LDkgKzEwNTAsOSBAQAogaW50IEFTTjFfVFlQRV9nZXRfaW50X29jdGV0c3RyaW5nKEFTTjFfVFlQRSAqYSxsb25nICpudW0sCiAJdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IG1heF9sZW4pOwogCi1TVEFDSyAqQVNOMV9zZXFfdW5wYWNrKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbiwKLQkJICAgICAgIGQyaV9vZl92b2lkICpkMmksIHZvaWQgKCpmcmVlX2Z1bmMpKHZvaWQgKikpOwotdW5zaWduZWQgY2hhciAqQVNOMV9zZXFfcGFjayhTVEFDSyAqc2FmZXMsIGkyZF9vZl92b2lkICppMmQsCitTVEFDS19PRihPUEVOU1NMX0JMT0NLKSAqQVNOMV9zZXFfdW5wYWNrKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbiwKKwkJCQkgZDJpX29mX3ZvaWQgKmQyaSwgdm9pZCAoKmZyZWVfZnVuYykoT1BFTlNTTF9CTE9DSykpOwordW5zaWduZWQgY2hhciAqQVNOMV9zZXFfcGFjayhTVEFDS19PRihPUEVOU1NMX0JMT0NLKSAqc2FmZXMsIGkyZF9vZl92b2lkICppMmQsCiAJCQkgICAgIHVuc2lnbmVkIGNoYXIgKipidWYsIGludCAqbGVuICk7CiB2b2lkICpBU04xX3VucGFja19zdHJpbmcoQVNOMV9TVFJJTkcgKm9jdCwgZDJpX29mX3ZvaWQgKmQyaSk7CiB2b2lkICpBU04xX2l0ZW1fdW5wYWNrKEFTTjFfU1RSSU5HICpvY3QsIGNvbnN0IEFTTjFfSVRFTSAqaXQpOwpAQCAtMTA3OSwxNSArMTA5NSw1OCBAQAogQVNOMV9UWVBFICpBU04xX2dlbmVyYXRlX25jb25mKGNoYXIgKnN0ciwgQ09ORiAqbmNvbmYpOwogQVNOMV9UWVBFICpBU04xX2dlbmVyYXRlX3YzKGNoYXIgKnN0ciwgWDUwOVYzX0NUWCAqY25mKTsKIAotdHlwZWRlZiBpbnQgYXNuMV9vdXRwdXRfZGF0YV9mbihCSU8gKm91dCwgQklPICpkYXRhLCBBU04xX1ZBTFVFICp2YWwsIGludCBmbGFncywKLQkJCQkJY29uc3QgQVNOMV9JVEVNICppdCk7CisvKiBBU04xIFByaW50IGZsYWdzICovCiAKLWludCBpbnRfc21pbWVfd3JpdGVfQVNOMShCSU8gKmJpbywgQVNOMV9WQUxVRSAqdmFsLCBCSU8gKmRhdGEsIGludCBmbGFncywKKy8qIEluZGljYXRlIG1pc3NpbmcgT1BUSU9OQUwgZmllbGRzICovCisjZGVmaW5lIEFTTjFfUENUWF9GTEFHU19TSE9XX0FCU0VOVAkJMHgwMDEJCisvKiBNYXJrIHN0YXJ0IGFuZCBlbmQgb2YgU0VRVUVOQ0UgKi8KKyNkZWZpbmUgQVNOMV9QQ1RYX0ZMQUdTX1NIT1dfU0VRVUVOQ0UJCTB4MDAyCisvKiBNYXJrIHN0YXJ0IGFuZCBlbmQgb2YgU0VRVUVOQ0UvU0VUIE9GICovCisjZGVmaW5lIEFTTjFfUENUWF9GTEFHU19TSE9XX1NTT0YJCTB4MDA0CisvKiBTaG93IHRoZSBBU04xIHR5cGUgb2YgcHJpbWl0aXZlcyAqLworI2RlZmluZSBBU04xX1BDVFhfRkxBR1NfU0hPV19UWVBFCQkweDAwOAorLyogRG9uJ3Qgc2hvdyBBU04xIHR5cGUgb2YgQU5ZICovCisjZGVmaW5lIEFTTjFfUENUWF9GTEFHU19OT19BTllfVFlQRQkJMHgwMTAKKy8qIERvbid0IHNob3cgQVNOMSB0eXBlIG9mIE1TVFJJTkdzICovCisjZGVmaW5lIEFTTjFfUENUWF9GTEFHU19OT19NU1RSSU5HX1RZUEUJCTB4MDIwCisvKiBEb24ndCBzaG93IGZpZWxkIG5hbWVzIGluIFNFUVVFTkNFICovCisjZGVmaW5lIEFTTjFfUENUWF9GTEFHU19OT19GSUVMRF9OQU1FCQkweDA0MAorLyogU2hvdyBzdHJ1Y3R1cmUgbmFtZXMgb2YgZWFjaCBTRVFVRU5DRSBmaWVsZCAqLworI2RlZmluZSBBU04xX1BDVFhfRkxBR1NfU0hPV19GSUVMRF9TVFJVQ1RfTkFNRQkweDA4MAorLyogRG9uJ3Qgc2hvdyBzdHJ1Y3R1cmUgbmFtZSBldmVuIGF0IHRvcCBsZXZlbCAqLworI2RlZmluZSBBU04xX1BDVFhfRkxBR1NfTk9fU1RSVUNUX05BTUUJCTB4MTAwCisKK2ludCBBU04xX2l0ZW1fcHJpbnQoQklPICpvdXQsIEFTTjFfVkFMVUUgKmlmbGQsIGludCBpbmRlbnQsCisJCQkJY29uc3QgQVNOMV9JVEVNICppdCwgY29uc3QgQVNOMV9QQ1RYICpwY3R4KTsKK0FTTjFfUENUWCAqQVNOMV9QQ1RYX25ldyh2b2lkKTsKK3ZvaWQgQVNOMV9QQ1RYX2ZyZWUoQVNOMV9QQ1RYICpwKTsKK3Vuc2lnbmVkIGxvbmcgQVNOMV9QQ1RYX2dldF9mbGFncyhBU04xX1BDVFggKnApOwordm9pZCBBU04xX1BDVFhfc2V0X2ZsYWdzKEFTTjFfUENUWCAqcCwgdW5zaWduZWQgbG9uZyBmbGFncyk7Cit1bnNpZ25lZCBsb25nIEFTTjFfUENUWF9nZXRfbm1fZmxhZ3MoQVNOMV9QQ1RYICpwKTsKK3ZvaWQgQVNOMV9QQ1RYX3NldF9ubV9mbGFncyhBU04xX1BDVFggKnAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwordW5zaWduZWQgbG9uZyBBU04xX1BDVFhfZ2V0X2NlcnRfZmxhZ3MoQVNOMV9QQ1RYICpwKTsKK3ZvaWQgQVNOMV9QQ1RYX3NldF9jZXJ0X2ZsYWdzKEFTTjFfUENUWCAqcCwgdW5zaWduZWQgbG9uZyBmbGFncyk7Cit1bnNpZ25lZCBsb25nIEFTTjFfUENUWF9nZXRfb2lkX2ZsYWdzKEFTTjFfUENUWCAqcCk7Cit2b2lkIEFTTjFfUENUWF9zZXRfb2lkX2ZsYWdzKEFTTjFfUENUWCAqcCwgdW5zaWduZWQgbG9uZyBmbGFncyk7Cit1bnNpZ25lZCBsb25nIEFTTjFfUENUWF9nZXRfc3RyX2ZsYWdzKEFTTjFfUENUWCAqcCk7Cit2b2lkIEFTTjFfUENUWF9zZXRfc3RyX2ZsYWdzKEFTTjFfUENUWCAqcCwgdW5zaWduZWQgbG9uZyBmbGFncyk7CisKK0JJT19NRVRIT0QgKkJJT19mX2FzbjEodm9pZCk7CisKK0JJTyAqQklPX25ld19OREVGKEJJTyAqb3V0LCBBU04xX1ZBTFVFICp2YWwsIGNvbnN0IEFTTjFfSVRFTSAqaXQpOworCitpbnQgaTJkX0FTTjFfYmlvX3N0cmVhbShCSU8gKm91dCwgQVNOMV9WQUxVRSAqdmFsLCBCSU8gKmluLCBpbnQgZmxhZ3MsCisJCQkJY29uc3QgQVNOMV9JVEVNICppdCk7CitpbnQgUEVNX3dyaXRlX2Jpb19BU04xX3N0cmVhbShCSU8gKm91dCwgQVNOMV9WQUxVRSAqdmFsLCBCSU8gKmluLCBpbnQgZmxhZ3MsCisJCQkJY29uc3QgY2hhciAqaGRyLAorCQkJCWNvbnN0IEFTTjFfSVRFTSAqaXQpOworaW50IFNNSU1FX3dyaXRlX0FTTjEoQklPICpiaW8sIEFTTjFfVkFMVUUgKnZhbCwgQklPICpkYXRhLCBpbnQgZmxhZ3MsCiAJCQkJaW50IGN0eXBlX25pZCwgaW50IGVjb250X25pZCwKIAkJCQlTVEFDS19PRihYNTA5X0FMR09SKSAqbWRhbGdzLAotCQkJCWFzbjFfb3V0cHV0X2RhdGFfZm4gKmRhdGFfZm4sCiAJCQkJY29uc3QgQVNOMV9JVEVNICppdCk7CiBBU04xX1ZBTFVFICpTTUlNRV9yZWFkX0FTTjEoQklPICpiaW8sIEJJTyAqKmJjb250LCBjb25zdCBBU04xX0lURU0gKml0KTsKK2ludCBTTUlNRV9jcmxmX2NvcHkoQklPICppbiwgQklPICpvdXQsIGludCBmbGFncyk7CitpbnQgU01JTUVfdGV4dChCSU8gKmluLCBCSU8gKm91dCk7CiAKIC8qIEJFR0lOIEVSUk9SIENPREVTICovCiAvKiBUaGUgZm9sbG93aW5nIGxpbmVzIGFyZSBhdXRvIGdlbmVyYXRlZCBieSB0aGUgc2NyaXB0IG1rZXJyLnBsLiBBbnkgY2hhbmdlcwpAQCAtMTExOCw2ICsxMTc3LDcgQEAKICNkZWZpbmUgQVNOMV9GX0FTTjFfRU5VTUVSQVRFRF9UT19CTgkJCSAxMTMKICNkZWZpbmUgQVNOMV9GX0FTTjFfRVhfQzJJCQkJCSAyMDQKICNkZWZpbmUgQVNOMV9GX0FTTjFfRklORF9FTkQJCQkJIDE5MAorI2RlZmluZSBBU04xX0ZfQVNOMV9HRU5FUkFMSVpFRFRJTUVfQURKCQkJIDIxNgogI2RlZmluZSBBU04xX0ZfQVNOMV9HRU5FUkFMSVpFRFRJTUVfU0VUCQkJIDE4NQogI2RlZmluZSBBU04xX0ZfQVNOMV9HRU5FUkFURV9WMwkJCQkgMTc4CiAjZGVmaW5lIEFTTjFfRl9BU04xX0dFVF9PQkpFQ1QJCQkJIDExNApAQCAtMTEzOCw3ICsxMTk4LDcgQEAKICNkZWZpbmUgQVNOMV9GX0FTTjFfSVRFTV9WRVJJRlkJCQkJIDE5NwogI2RlZmluZSBBU04xX0ZfQVNOMV9NQlNUUklOR19OQ09QWQkJCSAxMjIKICNkZWZpbmUgQVNOMV9GX0FTTjFfT0JKRUNUX05FVwkJCQkgMTIzCi0jZGVmaW5lIEFTTjFfRl9BU04xX09VVFBVVF9EQVRBCQkJCSAyMDcKKyNkZWZpbmUgQVNOMV9GX0FTTjFfT1VUUFVUX0RBVEEJCQkJIDIxNAogI2RlZmluZSBBU04xX0ZfQVNOMV9QQUNLX1NUUklORwkJCQkgMTI0CiAjZGVmaW5lIEFTTjFfRl9BU04xX1BDVFhfTkVXCQkJCSAyMDUKICNkZWZpbmUgQVNOMV9GX0FTTjFfUEtDUzVfUEJFX1NFVAkJCSAxMjUKQEAgLTExNTIsMTQgKzEyMTIsMTcgQEAKICNkZWZpbmUgQVNOMV9GX0FTTjFfVEVNUExBVEVfRVhfRDJJCQkJIDEzMgogI2RlZmluZSBBU04xX0ZfQVNOMV9URU1QTEFURV9ORVcJCQkgMTMzCiAjZGVmaW5lIEFTTjFfRl9BU04xX1RFTVBMQVRFX05PRVhQX0QySQkJCSAxMzEKKyNkZWZpbmUgQVNOMV9GX0FTTjFfVElNRV9BREoJCQkJIDIxNwogI2RlZmluZSBBU04xX0ZfQVNOMV9USU1FX1NFVAkJCQkgMTc1CiAjZGVmaW5lIEFTTjFfRl9BU04xX1RZUEVfR0VUX0lOVF9PQ1RFVFNUUklORwkJIDEzNAogI2RlZmluZSBBU04xX0ZfQVNOMV9UWVBFX0dFVF9PQ1RFVFNUUklORwkJIDEzNQogI2RlZmluZSBBU04xX0ZfQVNOMV9VTlBBQ0tfU1RSSU5HCQkJIDEzNgorI2RlZmluZSBBU04xX0ZfQVNOMV9VVENUSU1FX0FESgkJCQkgMjE4CiAjZGVmaW5lIEFTTjFfRl9BU04xX1VUQ1RJTUVfU0VUCQkJCSAxODcKICNkZWZpbmUgQVNOMV9GX0FTTjFfVkVSSUZZCQkJCSAxMzcKLSNkZWZpbmUgQVNOMV9GX0I2NF9SRUFEX0FTTjEJCQkJIDIwOAotI2RlZmluZSBBU04xX0ZfQjY0X1dSSVRFX0FTTjEJCQkJIDIwOQorI2RlZmluZSBBU04xX0ZfQjY0X1JFQURfQVNOMQkJCQkgMjA5CisjZGVmaW5lIEFTTjFfRl9CNjRfV1JJVEVfQVNOMQkJCQkgMjEwCisjZGVmaW5lIEFTTjFfRl9CSU9fTkVXX05ERUYJCQkJIDIwOAogI2RlZmluZSBBU04xX0ZfQklUU1RSX0NCCQkJCSAxODAKICNkZWZpbmUgQVNOMV9GX0JOX1RPX0FTTjFfRU5VTUVSQVRFRAkJCSAxMzgKICNkZWZpbmUgQVNOMV9GX0JOX1RPX0FTTjFfSU5URUdFUgkJCSAxMzkKQEAgLTExNzgsNiArMTI0MSw3IEBACiAjZGVmaW5lIEFTTjFfRl9EMklfQVNOMV9UWVBFX0JZVEVTCQkJIDE0OQogI2RlZmluZSBBU04xX0ZfRDJJX0FTTjFfVUlOVEVHRVIJCQkgMTUwCiAjZGVmaW5lIEFTTjFfRl9EMklfQVNOMV9VVENUSU1FCQkJCSAxNTEKKyNkZWZpbmUgQVNOMV9GX0QySV9BVVRPUFJJVkFURUtFWQkJCSAyMDcKICNkZWZpbmUgQVNOMV9GX0QySV9ORVRTQ0FQRV9SU0EJCQkJIDE1MgogI2RlZmluZSBBU04xX0ZfRDJJX05FVFNDQVBFX1JTQV8yCQkJIDE1MwogI2RlZmluZSBBU04xX0ZfRDJJX1BSSVZBVEVLRVkJCQkJIDE1NApAQCAtMTE4Nyw2ICsxMjUxLDcgQEAKICNkZWZpbmUgQVNOMV9GX0QySV9YNTA5CQkJCQkgMTU2CiAjZGVmaW5lIEFTTjFfRl9EMklfWDUwOV9DSU5GCQkJCSAxNTcKICNkZWZpbmUgQVNOMV9GX0QySV9YNTA5X1BLRVkJCQkJIDE1OQorI2RlZmluZSBBU04xX0ZfSTJEX0FTTjFfQklPX1NUUkVBTQkJCSAyMTEKICNkZWZpbmUgQVNOMV9GX0kyRF9BU04xX1NFVAkJCQkgMTg4CiAjZGVmaW5lIEFTTjFfRl9JMkRfQVNOMV9USU1FCQkJCSAxNjAKICNkZWZpbmUgQVNOMV9GX0kyRF9EU0FfUFVCS0VZCQkJCSAxNjEKQEAgLTExOTgsMTAgKzEyNjMsMTEgQEAKICNkZWZpbmUgQVNOMV9GX0xPTkdfQzJJCQkJCQkgMTY2CiAjZGVmaW5lIEFTTjFfRl9PSURfTU9EVUxFX0lOSVQJCQkJIDE3NAogI2RlZmluZSBBU04xX0ZfUEFSU0VfVEFHR0lORwkJCQkgMTgyCi0jZGVmaW5lIEFTTjFfRl9QS0NTNV9QQkUyX1NFVAkJCQkgMTY3CisjZGVmaW5lIEFTTjFfRl9QS0NTNV9QQkUyX1NFVF9JVgkJCSAxNjcKICNkZWZpbmUgQVNOMV9GX1BLQ1M1X1BCRV9TRVQJCQkJIDIwMgotI2RlZmluZSBBU04xX0ZfU01JTUVfUkVBRF9BU04xCQkJCSAyMTAKLSNkZWZpbmUgQVNOMV9GX1NNSU1FX1RFWFQJCQkJIDIxMQorI2RlZmluZSBBU04xX0ZfUEtDUzVfUEJFX1NFVDBfQUxHT1IJCQkgMjE1CisjZGVmaW5lIEFTTjFfRl9TTUlNRV9SRUFEX0FTTjEJCQkJIDIxMgorI2RlZmluZSBBU04xX0ZfU01JTUVfVEVYVAkJCQkgMjEzCiAjZGVmaW5lIEFTTjFfRl9YNTA5X0NJTkZfTkVXCQkJCSAxNjgKICNkZWZpbmUgQVNOMV9GX1g1MDlfQ1JMX0FERDBfUkVWT0tFRAkJCSAxNjkKICNkZWZpbmUgQVNOMV9GX1g1MDlfSU5GT19ORVcJCQkJIDE3MApAQCAtMTIxMywxNCArMTI3OSwxNCBAQAogCiAvKiBSZWFzb24gY29kZXMuICovCiAjZGVmaW5lIEFTTjFfUl9BRERJTkdfT0JKRUNUCQkJCSAxNzEKLSNkZWZpbmUgQVNOMV9SX0FTTjFfUEFSU0VfRVJST1IJCQkJIDE5OAotI2RlZmluZSBBU04xX1JfQVNOMV9TSUdfUEFSU0VfRVJST1IJCQkgMTk5CisjZGVmaW5lIEFTTjFfUl9BU04xX1BBUlNFX0VSUk9SCQkJCSAyMDMKKyNkZWZpbmUgQVNOMV9SX0FTTjFfU0lHX1BBUlNFX0VSUk9SCQkJIDIwNAogI2RlZmluZSBBU04xX1JfQVVYX0VSUk9SCQkJCSAxMDAKICNkZWZpbmUgQVNOMV9SX0JBRF9DTEFTUwkJCQkgMTAxCiAjZGVmaW5lIEFTTjFfUl9CQURfT0JKRUNUX0hFQURFUgkJCSAxMDIKICNkZWZpbmUgQVNOMV9SX0JBRF9QQVNTV09SRF9SRUFECQkJIDEwMwogI2RlZmluZSBBU04xX1JfQkFEX1RBRwkJCQkJIDEwNAotI2RlZmluZSBBU04xX1JfQk1QU1RSSU5HX0lTX1dST05HX0xFTkdUSAkJIDIxMAorI2RlZmluZSBBU04xX1JfQk1QU1RSSU5HX0lTX1dST05HX0xFTkdUSAkJIDIxNAogI2RlZmluZSBBU04xX1JfQk5fTElCCQkJCQkgMTA1CiAjZGVmaW5lIEFTTjFfUl9CT09MRUFOX0lTX1dST05HX0xFTkdUSAkJCSAxMDYKICNkZWZpbmUgQVNOMV9SX0JVRkZFUl9UT09fU01BTEwJCQkJIDEwNwpAQCAtMTIyOSw2ICsxMjk1LDcgQEAKICNkZWZpbmUgQVNOMV9SX0RFQ09ERV9FUlJPUgkJCQkgMTEwCiAjZGVmaW5lIEFTTjFfUl9ERUNPRElOR19FUlJPUgkJCQkgMTExCiAjZGVmaW5lIEFTTjFfUl9ERVBUSF9FWENFRURFRAkJCQkgMTc0CisjZGVmaW5lIEFTTjFfUl9ESUdFU1RfQU5EX0tFWV9UWVBFX05PVF9TVVBQT1JURUQJIDE5OAogI2RlZmluZSBBU04xX1JfRU5DT0RFX0VSUk9SCQkJCSAxMTIKICNkZWZpbmUgQVNOMV9SX0VSUk9SX0dFVFRJTkdfVElNRQkJCSAxNzMKICNkZWZpbmUgQVNOMV9SX0VSUk9SX0xPQURJTkdfU0VDVElPTgkJCSAxNzIKQEAgLTEyNjIsMTAgKzEzMjksMTAgQEAKICNkZWZpbmUgQVNOMV9SX0lOVEVHRVJfVE9PX0xBUkdFX0ZPUl9MT05HCQkgMTI4CiAjZGVmaW5lIEFTTjFfUl9JTlZBTElEX0JNUFNUUklOR19MRU5HVEgJCQkgMTI5CiAjZGVmaW5lIEFTTjFfUl9JTlZBTElEX0RJR0lUCQkJCSAxMzAKLSNkZWZpbmUgQVNOMV9SX0lOVkFMSURfTUlNRV9UWVBFCQkJIDIwMAorI2RlZmluZSBBU04xX1JfSU5WQUxJRF9NSU1FX1RZUEUJCQkgMjA1CiAjZGVmaW5lIEFTTjFfUl9JTlZBTElEX01PRElGSUVSCQkJCSAxODYKICNkZWZpbmUgQVNOMV9SX0lOVkFMSURfTlVNQkVSCQkJCSAxODcKLSNkZWZpbmUgQVNOMV9SX0lOVkFMSURfT0JKRUNUX0VOQ09ESU5HCQkJIDIxMgorI2RlZmluZSBBU04xX1JfSU5WQUxJRF9PQkpFQ1RfRU5DT0RJTkcJCQkgMjE2CiAjZGVmaW5lIEFTTjFfUl9JTlZBTElEX1NFUEFSQVRPUgkJCSAxMzEKICNkZWZpbmUgQVNOMV9SX0lOVkFMSURfVElNRV9GT1JNQVQJCQkgMTMyCiAjZGVmaW5lIEFTTjFfUl9JTlZBTElEX1VOSVZFUlNBTFNUUklOR19MRU5HVEgJCSAxMzMKQEAgLTEyNzMsOSArMTM0MCw5IEBACiAjZGVmaW5lIEFTTjFfUl9JVl9UT09fTEFSR0UJCQkJIDEzNQogI2RlZmluZSBBU04xX1JfTEVOR1RIX0VSUk9SCQkJCSAxMzYKICNkZWZpbmUgQVNOMV9SX0xJU1RfRVJST1IJCQkJIDE4OAotI2RlZmluZSBBU04xX1JfTUlNRV9OT19DT05URU5UX1RZUEUJCQkgMjAxCi0jZGVmaW5lIEFTTjFfUl9NSU1FX1BBUlNFX0VSUk9SCQkJCSAyMDIKLSNkZWZpbmUgQVNOMV9SX01JTUVfU0lHX1BBUlNFX0VSUk9SCQkJIDIwMworI2RlZmluZSBBU04xX1JfTUlNRV9OT19DT05URU5UX1RZUEUJCQkgMjA2CisjZGVmaW5lIEFTTjFfUl9NSU1FX1BBUlNFX0VSUk9SCQkJCSAyMDcKKyNkZWZpbmUgQVNOMV9SX01JTUVfU0lHX1BBUlNFX0VSUk9SCQkJIDIwOAogI2RlZmluZSBBU04xX1JfTUlTU0lOR19FT0MJCQkJIDEzNwogI2RlZmluZSBBU04xX1JfTUlTU0lOR19TRUNPTkRfTlVNQkVSCQkJIDEzOAogI2RlZmluZSBBU04xX1JfTUlTU0lOR19WQUxVRQkJCQkgMTg5CkBAIC0xMjg1LDExICsxMzUyLDEyIEBACiAjZGVmaW5lIEFTTjFfUl9OT05fSEVYX0NIQVJBQ1RFUlMJCQkgMTQxCiAjZGVmaW5lIEFTTjFfUl9OT1RfQVNDSUlfRk9STUFUCQkJCSAxOTAKICNkZWZpbmUgQVNOMV9SX05PVF9FTk9VR0hfREFUQQkJCQkgMTQyCi0jZGVmaW5lIEFTTjFfUl9OT19DT05URU5UX1RZUEUJCQkJIDIwNAorI2RlZmluZSBBU04xX1JfTk9fQ09OVEVOVF9UWVBFCQkJCSAyMDkKKyNkZWZpbmUgQVNOMV9SX05PX0RFRkFVTFRfRElHRVNUCQkJIDIwMQogI2RlZmluZSBBU04xX1JfTk9fTUFUQ0hJTkdfQ0hPSUNFX1RZUEUJCQkgMTQzCi0jZGVmaW5lIEFTTjFfUl9OT19NVUxUSVBBUlRfQk9EWV9GQUlMVVJFCQkgMjA1Ci0jZGVmaW5lIEFTTjFfUl9OT19NVUxUSVBBUlRfQk9VTkRBUlkJCQkgMjA2Ci0jZGVmaW5lIEFTTjFfUl9OT19TSUdfQ09OVEVOVF9UWVBFCQkJIDIwNworI2RlZmluZSBBU04xX1JfTk9fTVVMVElQQVJUX0JPRFlfRkFJTFVSRQkJIDIxMAorI2RlZmluZSBBU04xX1JfTk9fTVVMVElQQVJUX0JPVU5EQVJZCQkJIDIxMQorI2RlZmluZSBBU04xX1JfTk9fU0lHX0NPTlRFTlRfVFlQRQkJCSAyMTIKICNkZWZpbmUgQVNOMV9SX05VTExfSVNfV1JPTkdfTEVOR1RICQkJIDE0NAogI2RlZmluZSBBU04xX1JfT0JKRUNUX05PVF9BU0NJSV9GT1JNQVQJCQkgMTkxCiAjZGVmaW5lIEFTTjFfUl9PRERfTlVNQkVSX09GX0NIQVJTCQkJIDE0NQpAQCAtMTI5OSw4ICsxMzY3LDggQEAKICNkZWZpbmUgQVNOMV9SX1NFUVVFTkNFX05PVF9DT05TVFJVQ1RFRAkJCSAxNDkKICNkZWZpbmUgQVNOMV9SX1NFUVVFTkNFX09SX1NFVF9ORUVEU19DT05GSUcJCSAxOTIKICNkZWZpbmUgQVNOMV9SX1NIT1JUX0xJTkUJCQkJIDE1MAotI2RlZmluZSBBU04xX1JfU0lHX0lOVkFMSURfTUlNRV9UWVBFCQkJIDIwOAotI2RlZmluZSBBU04xX1JfU1RSRUFNSU5HX05PVF9TVVBQT1JURUQJCQkgMjA5CisjZGVmaW5lIEFTTjFfUl9TSUdfSU5WQUxJRF9NSU1FX1RZUEUJCQkgMjEzCisjZGVmaW5lIEFTTjFfUl9TVFJFQU1JTkdfTk9UX1NVUFBPUlRFRAkJCSAyMDIKICNkZWZpbmUgQVNOMV9SX1NUUklOR19UT09fTE9ORwkJCQkgMTUxCiAjZGVmaW5lIEFTTjFfUl9TVFJJTkdfVE9PX1NIT1JUCQkJCSAxNTIKICNkZWZpbmUgQVNOMV9SX1RBR19WQUxVRV9UT09fSElHSAkJCSAxNTMKQEAgLTEzMTEsMTEgKzEzNzksMTIgQEAKICNkZWZpbmUgQVNOMV9SX1VOQUJMRV9UT19ERUNPREVfUlNBX0tFWQkJCSAxNTcKICNkZWZpbmUgQVNOMV9SX1VOQUJMRV9UT19ERUNPREVfUlNBX1BSSVZBVEVfS0VZCQkgMTU4CiAjZGVmaW5lIEFTTjFfUl9VTkVYUEVDVEVEX0VPQwkJCQkgMTU5Ci0jZGVmaW5lIEFTTjFfUl9VTklWRVJTQUxTVFJJTkdfSVNfV1JPTkdfTEVOR1RICQkgMjExCisjZGVmaW5lIEFTTjFfUl9VTklWRVJTQUxTVFJJTkdfSVNfV1JPTkdfTEVOR1RICQkgMjE1CiAjZGVmaW5lIEFTTjFfUl9VTktOT1dOX0ZPUk1BVAkJCQkgMTYwCiAjZGVmaW5lIEFTTjFfUl9VTktOT1dOX01FU1NBR0VfRElHRVNUX0FMR09SSVRITQkJIDE2MQogI2RlZmluZSBBU04xX1JfVU5LTk9XTl9PQkpFQ1RfVFlQRQkJCSAxNjIKICNkZWZpbmUgQVNOMV9SX1VOS05PV05fUFVCTElDX0tFWV9UWVBFCQkJIDE2MworI2RlZmluZSBBU04xX1JfVU5LTk9XTl9TSUdOQVRVUkVfQUxHT1JJVEhNCQkgMTk5CiAjZGVmaW5lIEFTTjFfUl9VTktOT1dOX1RBRwkJCQkgMTk0CiAjZGVmaW5lIEFTTjFfUl9VTktPV05fRk9STUFUCQkJCSAxOTUKICNkZWZpbmUgQVNOMV9SX1VOU1VQUE9SVEVEX0FOWV9ERUZJTkVEX0JZX1RZUEUJCSAxNjQKQEAgLTEzMjMsNiArMTM5Miw3IEBACiAjZGVmaW5lIEFTTjFfUl9VTlNVUFBPUlRFRF9FTkNSWVBUSU9OX0FMR09SSVRITQkJIDE2NgogI2RlZmluZSBBU04xX1JfVU5TVVBQT1JURURfUFVCTElDX0tFWV9UWVBFCQkgMTY3CiAjZGVmaW5lIEFTTjFfUl9VTlNVUFBPUlRFRF9UWVBFCQkJCSAxOTYKKyNkZWZpbmUgQVNOMV9SX1dST05HX1BVQkxJQ19LRVlfVFlQRQkJCSAyMDAKICNkZWZpbmUgQVNOMV9SX1dST05HX1RBRwkJCQkgMTY4CiAjZGVmaW5lIEFTTjFfUl9XUk9OR19UWVBFCQkJCSAxNjkKIApkaWZmIC0tZ2l0IGEvY3J5cHRvL2FzbjEvYXNuMV9lcnIuYyBiL2NyeXB0by9hc24xL2FzbjFfZXJyLmMKaW5kZXggYmE4OGViMy4uNmUwNGQwOCAxMDA2NDQKLS0tIGEvY3J5cHRvL2FzbjEvYXNuMV9lcnIuYworKysgYi9jcnlwdG8vYXNuMS9hc24xX2Vyci5jCkBAIC0xLDYgKzEsNiBAQAogLyogY3J5cHRvL2FzbjEvYXNuMV9lcnIuYyAqLwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA4IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDkgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkwLDEwICs5MCwxMSBAQAoge0VSUl9GVU5DKEFTTjFfRl9BU04xX0VOVU1FUkFURURfVE9fQk4pLAkiQVNOMV9FTlVNRVJBVEVEX3RvX0JOIn0sCiB7RVJSX0ZVTkMoQVNOMV9GX0FTTjFfRVhfQzJJKSwJIkFTTjFfRVhfQzJJIn0sCiB7RVJSX0ZVTkMoQVNOMV9GX0FTTjFfRklORF9FTkQpLAkiQVNOMV9GSU5EX0VORCJ9LAore0VSUl9GVU5DKEFTTjFfRl9BU04xX0dFTkVSQUxJWkVEVElNRV9BREopLAkiQVNOMV9HRU5FUkFMSVpFRFRJTUVfYWRqIn0sCiB7RVJSX0ZVTkMoQVNOMV9GX0FTTjFfR0VORVJBTElaRURUSU1FX1NFVCksCSJBU04xX0dFTkVSQUxJWkVEVElNRV9zZXQifSwKIHtFUlJfRlVOQyhBU04xX0ZfQVNOMV9HRU5FUkFURV9WMyksCSJBU04xX2dlbmVyYXRlX3YzIn0sCiB7RVJSX0ZVTkMoQVNOMV9GX0FTTjFfR0VUX09CSkVDVCksCSJBU04xX2dldF9vYmplY3QifSwKLXtFUlJfRlVOQyhBU04xX0ZfQVNOMV9IRUFERVJfTkVXKSwJIkFTTjFfSEVBREVSX25ldyJ9LAore0VSUl9GVU5DKEFTTjFfRl9BU04xX0hFQURFUl9ORVcpLAkiQVNOMV9IRUFERVJfTkVXIn0sCiB7RVJSX0ZVTkMoQVNOMV9GX0FTTjFfSTJEX0JJTyksCSJBU04xX2kyZF9iaW8ifSwKIHtFUlJfRlVOQyhBU04xX0ZfQVNOMV9JMkRfRlApLAkiQVNOMV9pMmRfZnAifSwKIHtFUlJfRlVOQyhBU04xX0ZfQVNOMV9JTlRFR0VSX1NFVCksCSJBU04xX0lOVEVHRVJfc2V0In0sCkBAIC0xMTIsNyArMTEzLDcgQEAKIHtFUlJfRlVOQyhBU04xX0ZfQVNOMV9PQkpFQ1RfTkVXKSwJIkFTTjFfT0JKRUNUX25ldyJ9LAoge0VSUl9GVU5DKEFTTjFfRl9BU04xX09VVFBVVF9EQVRBKSwJIkFTTjFfT1VUUFVUX0RBVEEifSwKIHtFUlJfRlVOQyhBU04xX0ZfQVNOMV9QQUNLX1NUUklORyksCSJBU04xX3BhY2tfc3RyaW5nIn0sCi17RVJSX0ZVTkMoQVNOMV9GX0FTTjFfUENUWF9ORVcpLAkiQVNOMV9QQ1RYX05FVyJ9LAore0VSUl9GVU5DKEFTTjFfRl9BU04xX1BDVFhfTkVXKSwJIkFTTjFfUENUWF9uZXcifSwKIHtFUlJfRlVOQyhBU04xX0ZfQVNOMV9QS0NTNV9QQkVfU0VUKSwJIkFTTjFfUEtDUzVfUEJFX1NFVCJ9LAoge0VSUl9GVU5DKEFTTjFfRl9BU04xX1NFUV9QQUNLKSwJIkFTTjFfc2VxX3BhY2sifSwKIHtFUlJfRlVOQyhBU04xX0ZfQVNOMV9TRVFfVU5QQUNLKSwJIkFTTjFfc2VxX3VucGFjayJ9LApAQCAtMTI0LDE0ICsxMjUsMTcgQEAKIHtFUlJfRlVOQyhBU04xX0ZfQVNOMV9URU1QTEFURV9FWF9EMkkpLAkiQVNOMV9URU1QTEFURV9FWF9EMkkifSwKIHtFUlJfRlVOQyhBU04xX0ZfQVNOMV9URU1QTEFURV9ORVcpLAkiQVNOMV9URU1QTEFURV9ORVcifSwKIHtFUlJfRlVOQyhBU04xX0ZfQVNOMV9URU1QTEFURV9OT0VYUF9EMkkpLAkiQVNOMV9URU1QTEFURV9OT0VYUF9EMkkifSwKK3tFUlJfRlVOQyhBU04xX0ZfQVNOMV9USU1FX0FESiksCSJBU04xX1RJTUVfYWRqIn0sCiB7RVJSX0ZVTkMoQVNOMV9GX0FTTjFfVElNRV9TRVQpLAkiQVNOMV9USU1FX3NldCJ9LAoge0VSUl9GVU5DKEFTTjFfRl9BU04xX1RZUEVfR0VUX0lOVF9PQ1RFVFNUUklORyksCSJBU04xX1RZUEVfZ2V0X2ludF9vY3RldHN0cmluZyJ9LAoge0VSUl9GVU5DKEFTTjFfRl9BU04xX1RZUEVfR0VUX09DVEVUU1RSSU5HKSwJIkFTTjFfVFlQRV9nZXRfb2N0ZXRzdHJpbmcifSwKIHtFUlJfRlVOQyhBU04xX0ZfQVNOMV9VTlBBQ0tfU1RSSU5HKSwJIkFTTjFfdW5wYWNrX3N0cmluZyJ9LAore0VSUl9GVU5DKEFTTjFfRl9BU04xX1VUQ1RJTUVfQURKKSwJIkFTTjFfVVRDVElNRV9hZGoifSwKIHtFUlJfRlVOQyhBU04xX0ZfQVNOMV9VVENUSU1FX1NFVCksCSJBU04xX1VUQ1RJTUVfc2V0In0sCiB7RVJSX0ZVTkMoQVNOMV9GX0FTTjFfVkVSSUZZKSwJIkFTTjFfdmVyaWZ5In0sCiB7RVJSX0ZVTkMoQVNOMV9GX0I2NF9SRUFEX0FTTjEpLAkiQjY0X1JFQURfQVNOMSJ9LAoge0VSUl9GVU5DKEFTTjFfRl9CNjRfV1JJVEVfQVNOMSksCSJCNjRfV1JJVEVfQVNOMSJ9LAore0VSUl9GVU5DKEFTTjFfRl9CSU9fTkVXX05ERUYpLAkiQklPX25ld19OREVGIn0sCiB7RVJSX0ZVTkMoQVNOMV9GX0JJVFNUUl9DQiksCSJCSVRTVFJfQ0IifSwKIHtFUlJfRlVOQyhBU04xX0ZfQk5fVE9fQVNOMV9FTlVNRVJBVEVEKSwJIkJOX3RvX0FTTjFfRU5VTUVSQVRFRCJ9LAoge0VSUl9GVU5DKEFTTjFfRl9CTl9UT19BU04xX0lOVEVHRVIpLAkiQk5fdG9fQVNOMV9JTlRFR0VSIn0sCkBAIC0xNDMsMTMgKzE0NywxNCBAQAoge0VSUl9GVU5DKEFTTjFfRl9EMklfQVNOMV9CT09MRUFOKSwJImQyaV9BU04xX0JPT0xFQU4ifSwKIHtFUlJfRlVOQyhBU04xX0ZfRDJJX0FTTjFfQllURVMpLAkiZDJpX0FTTjFfYnl0ZXMifSwKIHtFUlJfRlVOQyhBU04xX0ZfRDJJX0FTTjFfR0VORVJBTElaRURUSU1FKSwJIkQySV9BU04xX0dFTkVSQUxJWkVEVElNRSJ9LAote0VSUl9GVU5DKEFTTjFfRl9EMklfQVNOMV9IRUFERVIpLAkiZDJpX0FTTjFfSEVBREVSIn0sCit7RVJSX0ZVTkMoQVNOMV9GX0QySV9BU04xX0hFQURFUiksCSJEMklfQVNOMV9IRUFERVIifSwKIHtFUlJfRlVOQyhBU04xX0ZfRDJJX0FTTjFfSU5URUdFUiksCSJEMklfQVNOMV9JTlRFR0VSIn0sCiB7RVJSX0ZVTkMoQVNOMV9GX0QySV9BU04xX09CSkVDVCksCSJkMmlfQVNOMV9PQkpFQ1QifSwKIHtFUlJfRlVOQyhBU04xX0ZfRDJJX0FTTjFfU0VUKSwJImQyaV9BU04xX1NFVCJ9LAoge0VSUl9GVU5DKEFTTjFfRl9EMklfQVNOMV9UWVBFX0JZVEVTKSwJImQyaV9BU04xX3R5cGVfYnl0ZXMifSwKIHtFUlJfRlVOQyhBU04xX0ZfRDJJX0FTTjFfVUlOVEVHRVIpLAkiZDJpX0FTTjFfVUlOVEVHRVIifSwKIHtFUlJfRlVOQyhBU04xX0ZfRDJJX0FTTjFfVVRDVElNRSksCSJEMklfQVNOMV9VVENUSU1FIn0sCit7RVJSX0ZVTkMoQVNOMV9GX0QySV9BVVRPUFJJVkFURUtFWSksCSJkMmlfQXV0b1ByaXZhdGVLZXkifSwKIHtFUlJfRlVOQyhBU04xX0ZfRDJJX05FVFNDQVBFX1JTQSksCSJkMmlfTmV0c2NhcGVfUlNBIn0sCiB7RVJSX0ZVTkMoQVNOMV9GX0QySV9ORVRTQ0FQRV9SU0FfMiksCSJEMklfTkVUU0NBUEVfUlNBXzIifSwKIHtFUlJfRlVOQyhBU04xX0ZfRDJJX1BSSVZBVEVLRVkpLAkiZDJpX1ByaXZhdGVLZXkifSwKQEAgLTE1OSw2ICsxNjQsNyBAQAoge0VSUl9GVU5DKEFTTjFfRl9EMklfWDUwOSksCSJEMklfWDUwOSJ9LAoge0VSUl9GVU5DKEFTTjFfRl9EMklfWDUwOV9DSU5GKSwJIkQySV9YNTA5X0NJTkYifSwKIHtFUlJfRlVOQyhBU04xX0ZfRDJJX1g1MDlfUEtFWSksCSJkMmlfWDUwOV9QS0VZIn0sCit7RVJSX0ZVTkMoQVNOMV9GX0kyRF9BU04xX0JJT19TVFJFQU0pLAkiaTJkX0FTTjFfYmlvX3N0cmVhbSJ9LAoge0VSUl9GVU5DKEFTTjFfRl9JMkRfQVNOMV9TRVQpLAkiaTJkX0FTTjFfU0VUIn0sCiB7RVJSX0ZVTkMoQVNOMV9GX0kyRF9BU04xX1RJTUUpLAkiSTJEX0FTTjFfVElNRSJ9LAoge0VSUl9GVU5DKEFTTjFfRl9JMkRfRFNBX1BVQktFWSksCSJpMmRfRFNBX1BVQktFWSJ9LApAQCAtMTcwLDggKzE3Niw5IEBACiB7RVJSX0ZVTkMoQVNOMV9GX0xPTkdfQzJJKSwJIkxPTkdfQzJJIn0sCiB7RVJSX0ZVTkMoQVNOMV9GX09JRF9NT0RVTEVfSU5JVCksCSJPSURfTU9EVUxFX0lOSVQifSwKIHtFUlJfRlVOQyhBU04xX0ZfUEFSU0VfVEFHR0lORyksCSJQQVJTRV9UQUdHSU5HIn0sCi17RVJSX0ZVTkMoQVNOMV9GX1BLQ1M1X1BCRTJfU0VUKSwJIlBLQ1M1X3BiZTJfc2V0In0sCit7RVJSX0ZVTkMoQVNOMV9GX1BLQ1M1X1BCRTJfU0VUX0lWKSwJIlBLQ1M1X3BiZTJfc2V0X2l2In0sCiB7RVJSX0ZVTkMoQVNOMV9GX1BLQ1M1X1BCRV9TRVQpLAkiUEtDUzVfcGJlX3NldCJ9LAore0VSUl9GVU5DKEFTTjFfRl9QS0NTNV9QQkVfU0VUMF9BTEdPUiksCSJQS0NTNV9wYmVfc2V0MF9hbGdvciJ9LAoge0VSUl9GVU5DKEFTTjFfRl9TTUlNRV9SRUFEX0FTTjEpLAkiU01JTUVfcmVhZF9BU04xIn0sCiB7RVJSX0ZVTkMoQVNOMV9GX1NNSU1FX1RFWFQpLAkiU01JTUVfdGV4dCJ9LAoge0VSUl9GVU5DKEFTTjFfRl9YNTA5X0NJTkZfTkVXKSwJIlg1MDlfQ0lORl9ORVcifSwKQEAgLTIwNCw2ICsyMTEsNyBAQAoge0VSUl9SRUFTT04oQVNOMV9SX0RFQ09ERV9FUlJPUikgICAgICAgICAsImRlY29kZSBlcnJvciJ9LAoge0VSUl9SRUFTT04oQVNOMV9SX0RFQ09ESU5HX0VSUk9SKSAgICAgICAsImRlY29kaW5nIGVycm9yIn0sCiB7RVJSX1JFQVNPTihBU04xX1JfREVQVEhfRVhDRUVERUQpICAgICAgICwiZGVwdGggZXhjZWVkZWQifSwKK3tFUlJfUkVBU09OKEFTTjFfUl9ESUdFU1RfQU5EX0tFWV9UWVBFX05PVF9TVVBQT1JURUQpLCJkaWdlc3QgYW5kIGtleSB0eXBlIG5vdCBzdXBwb3J0ZWQifSwKIHtFUlJfUkVBU09OKEFTTjFfUl9FTkNPREVfRVJST1IpICAgICAgICAgLCJlbmNvZGUgZXJyb3IifSwKIHtFUlJfUkVBU09OKEFTTjFfUl9FUlJPUl9HRVRUSU5HX1RJTUUpICAgLCJlcnJvciBnZXR0aW5nIHRpbWUifSwKIHtFUlJfUkVBU09OKEFTTjFfUl9FUlJPUl9MT0FESU5HX1NFQ1RJT04pLCJlcnJvciBsb2FkaW5nIHNlY3Rpb24ifSwKQEAgLTI2MSw2ICsyNjksNyBAQAoge0VSUl9SRUFTT04oQVNOMV9SX05PVF9BU0NJSV9GT1JNQVQpICAgICAsIm5vdCBhc2NpaSBmb3JtYXQifSwKIHtFUlJfUkVBU09OKEFTTjFfUl9OT1RfRU5PVUdIX0RBVEEpICAgICAgLCJub3QgZW5vdWdoIGRhdGEifSwKIHtFUlJfUkVBU09OKEFTTjFfUl9OT19DT05URU5UX1RZUEUpICAgICAgLCJubyBjb250ZW50IHR5cGUifSwKK3tFUlJfUkVBU09OKEFTTjFfUl9OT19ERUZBVUxUX0RJR0VTVCkgICAgLCJubyBkZWZhdWx0IGRpZ2VzdCJ9LAoge0VSUl9SRUFTT04oQVNOMV9SX05PX01BVENISU5HX0NIT0lDRV9UWVBFKSwibm8gbWF0Y2hpbmcgY2hvaWNlIHR5cGUifSwKIHtFUlJfUkVBU09OKEFTTjFfUl9OT19NVUxUSVBBUlRfQk9EWV9GQUlMVVJFKSwibm8gbXVsdGlwYXJ0IGJvZHkgZmFpbHVyZSJ9LAoge0VSUl9SRUFTT04oQVNOMV9SX05PX01VTFRJUEFSVF9CT1VOREFSWSksIm5vIG11bHRpcGFydCBib3VuZGFyeSJ9LApAQCAtMjkxLDYgKzMwMCw3IEBACiB7RVJSX1JFQVNPTihBU04xX1JfVU5LTk9XTl9NRVNTQUdFX0RJR0VTVF9BTEdPUklUSE0pLCJ1bmtub3duIG1lc3NhZ2UgZGlnZXN0IGFsZ29yaXRobSJ9LAoge0VSUl9SRUFTT04oQVNOMV9SX1VOS05PV05fT0JKRUNUX1RZUEUpICAsInVua25vd24gb2JqZWN0IHR5cGUifSwKIHtFUlJfUkVBU09OKEFTTjFfUl9VTktOT1dOX1BVQkxJQ19LRVlfVFlQRSksInVua25vd24gcHVibGljIGtleSB0eXBlIn0sCit7RVJSX1JFQVNPTihBU04xX1JfVU5LTk9XTl9TSUdOQVRVUkVfQUxHT1JJVEhNKSwidW5rbm93biBzaWduYXR1cmUgYWxnb3JpdGhtIn0sCiB7RVJSX1JFQVNPTihBU04xX1JfVU5LTk9XTl9UQUcpICAgICAgICAgICwidW5rbm93biB0YWcifSwKIHtFUlJfUkVBU09OKEFTTjFfUl9VTktPV05fRk9STUFUKSAgICAgICAgLCJ1bmtvd24gZm9ybWF0In0sCiB7RVJSX1JFQVNPTihBU04xX1JfVU5TVVBQT1JURURfQU5ZX0RFRklORURfQllfVFlQRSksInVuc3VwcG9ydGVkIGFueSBkZWZpbmVkIGJ5IHR5cGUifSwKQEAgLTI5OCw2ICszMDgsNyBAQAoge0VSUl9SRUFTT04oQVNOMV9SX1VOU1VQUE9SVEVEX0VOQ1JZUFRJT05fQUxHT1JJVEhNKSwidW5zdXBwb3J0ZWQgZW5jcnlwdGlvbiBhbGdvcml0aG0ifSwKIHtFUlJfUkVBU09OKEFTTjFfUl9VTlNVUFBPUlRFRF9QVUJMSUNfS0VZX1RZUEUpLCJ1bnN1cHBvcnRlZCBwdWJsaWMga2V5IHR5cGUifSwKIHtFUlJfUkVBU09OKEFTTjFfUl9VTlNVUFBPUlRFRF9UWVBFKSAgICAgLCJ1bnN1cHBvcnRlZCB0eXBlIn0sCit7RVJSX1JFQVNPTihBU04xX1JfV1JPTkdfUFVCTElDX0tFWV9UWVBFKSwid3JvbmcgcHVibGljIGtleSB0eXBlIn0sCiB7RVJSX1JFQVNPTihBU04xX1JfV1JPTkdfVEFHKSAgICAgICAgICAgICwid3JvbmcgdGFnIn0sCiB7RVJSX1JFQVNPTihBU04xX1JfV1JPTkdfVFlQRSkgICAgICAgICAgICwid3JvbmcgdHlwZSJ9LAogezAsTlVMTH0KZGlmZiAtLWdpdCBhL2NyeXB0by9hc24xL2FzbjFfZ2VuLmMgYi9jcnlwdG8vYXNuMS9hc24xX2dlbi5jCmluZGV4IDIxM2E4ZTkuLjRmYzI0MTkgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hc24xL2FzbjFfZ2VuLmMKKysrIGIvY3J5cHRvL2FzbjEvYXNuMV9nZW4uYwpAQCAtMjQ3LDggKzI0NywxNCBAQAogCS8qIElmIElNUExJQ0lULCBvdXRwdXQgdGFnICovCiAKIAlpZiAoYXNuMV90YWdzLmltcF90YWcgIT0gLTEpCisJCXsKKwkJaWYgKGFzbjFfdGFncy5pbXBfY2xhc3MgPT0gVl9BU04xX1VOSVZFUlNBTCAKKwkJICAgICYmIChhc24xX3RhZ3MuaW1wX3RhZyA9PSBWX0FTTjFfU0VRVUVOQ0UKKwkJICAgICB8fCBhc24xX3RhZ3MuaW1wX3RhZyA9PSBWX0FTTjFfU0VUKSApCisJCQloZHJfY29uc3RydWN0ZWQgPSBWX0FTTjFfQ09OU1RSVUNURUQ7CiAJCUFTTjFfcHV0X29iamVjdCgmcCwgaGRyX2NvbnN0cnVjdGVkLCBoZHJfbGVuLAogCQkJCQlhc24xX3RhZ3MuaW1wX3RhZywgYXNuMV90YWdzLmltcF9jbGFzcyk7CisJCX0KIAogCS8qIENvcHkgYWNyb3NzIG9yaWdpbmFsIGVuY29kaW5nICovCiAJbWVtY3B5KHAsIGNweV9zdGFydCwgY3B5X2xlbik7CkBAIC00NDEsMTIgKzQ0NywxMiBAQAogCiBzdGF0aWMgQVNOMV9UWVBFICphc24xX211bHRpKGludCB1dHlwZSwgY29uc3QgY2hhciAqc2VjdGlvbiwgWDUwOVYzX0NUWCAqY25mKQogCXsKLQlBU04xX1RZUEUgKnJldCA9IE5VTEwsICp0eXAgPSBOVUxMOworCUFTTjFfVFlQRSAqcmV0ID0gTlVMTDsKIAlTVEFDS19PRihBU04xX1RZUEUpICpzayA9IE5VTEw7CiAJU1RBQ0tfT0YoQ09ORl9WQUxVRSkgKnNlY3QgPSBOVUxMOwotCXVuc2lnbmVkIGNoYXIgKmRlciA9IE5VTEwsICpwOworCXVuc2lnbmVkIGNoYXIgKmRlciA9IE5VTEw7CiAJaW50IGRlcmxlbjsKLQlpbnQgaSwgaXNfc2V0OworCWludCBpOwogCXNrID0gc2tfQVNOMV9UWVBFX25ld19udWxsKCk7CiAJaWYgKCFzaykKIAkJZ290byBiYWQ7CkBAIC00NTksMzEgKzQ2NSwyMyBAQAogCQkJZ290byBiYWQ7CiAJCWZvciAoaSA9IDA7IGkgPCBza19DT05GX1ZBTFVFX251bShzZWN0KTsgaSsrKQogCQkJewotCQkJdHlwID0gQVNOMV9nZW5lcmF0ZV92Myhza19DT05GX1ZBTFVFX3ZhbHVlKHNlY3QsIGkpLT52YWx1ZSwgY25mKTsKKwkJCUFTTjFfVFlQRSAqdHlwID0gQVNOMV9nZW5lcmF0ZV92Myhza19DT05GX1ZBTFVFX3ZhbHVlKHNlY3QsIGkpLT52YWx1ZSwgY25mKTsKIAkJCWlmICghdHlwKQogCQkJCWdvdG8gYmFkOwogCQkJaWYgKCFza19BU04xX1RZUEVfcHVzaChzaywgdHlwKSkKIAkJCQlnb3RvIGJhZDsKLQkJCXR5cCA9IE5VTEw7CiAJCQl9CiAJCX0KIAogCS8qIE5vdyB3ZSBoYXMgYSBTVEFDSyBvZiB0aGUgY29tcG9uZW50cywgY29udmVydCB0byB0aGUgY29ycmVjdCBmb3JtICovCiAKIAlpZiAodXR5cGUgPT0gVl9BU04xX1NFVCkKLQkJaXNfc2V0ID0gMTsKKwkJZGVybGVuID0gaTJkX0FTTjFfU0VUX0FOWShzaywgJmRlcik7CiAJZWxzZQotCQlpc19zZXQgPSAwOworCQlkZXJsZW4gPSBpMmRfQVNOMV9TRVFVRU5DRV9BTlkoc2ssICZkZXIpOwogCi0KLQlkZXJsZW4gPSBpMmRfQVNOMV9TRVRfT0ZfQVNOMV9UWVBFKHNrLCBOVUxMLCBpMmRfQVNOMV9UWVBFLCB1dHlwZSwKLQkJCQkJICAgVl9BU04xX1VOSVZFUlNBTCwgaXNfc2V0KTsKLQlkZXIgPSBPUEVOU1NMX21hbGxvYyhkZXJsZW4pOwotCWlmICghZGVyKQorCWlmIChkZXJsZW4gPCAwKQogCQlnb3RvIGJhZDsKLQlwID0gZGVyOwotCWkyZF9BU04xX1NFVF9PRl9BU04xX1RZUEUoc2ssICZwLCBpMmRfQVNOMV9UWVBFLCB1dHlwZSwKLQkJCQkgIFZfQVNOMV9VTklWRVJTQUwsIGlzX3NldCk7CiAKIAlpZiAoIShyZXQgPSBBU04xX1RZUEVfbmV3KCkpKQogCQlnb3RvIGJhZDsKQEAgLTUwNSw4ICs1MDMsNiBAQAogCiAJaWYgKHNrKQogCQlza19BU04xX1RZUEVfcG9wX2ZyZWUoc2ssIEFTTjFfVFlQRV9mcmVlKTsKLQlpZiAodHlwKQotCQlBU04xX1RZUEVfZnJlZSh0eXApOwogCWlmIChzZWN0KQogCQlYNTA5VjNfc2VjdGlvbl9mcmVlKGNuZiwgc2VjdCk7CiAKQEAgLTU1Niw3ICs1NTIsNyBAQAogc3RhdGljIGludCBhc24xX3N0cjJ0YWcoY29uc3QgY2hhciAqdGFnc3RyLCBpbnQgbGVuKQogCXsKIAl1bnNpZ25lZCBpbnQgaTsKLQlzdGF0aWMgc3RydWN0IHRhZ19uYW1lX3N0ICp0bnRtcCwgdG5zdCBbXSA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHRhZ19uYW1lX3N0ICp0bnRtcCwgdG5zdCBbXSA9IHsKIAkJQVNOMV9HRU5fU1RSKCJCT09MIiwgVl9BU04xX0JPT0xFQU4pLAogCQlBU04xX0dFTl9TVFIoIkJPT0xFQU4iLCBWX0FTTjFfQk9PTEVBTiksCiAJCUFTTjFfR0VOX1NUUigiTlVMTCIsIFZfQVNOMV9OVUxMKSwKQEAgLTU5MSw2ICs1ODcsOCBAQAogCQlBU04xX0dFTl9TVFIoIlRFTEVURVhTVFJJTkciLCBWX0FTTjFfVDYxU1RSSU5HKSwKIAkJQVNOMV9HRU5fU1RSKCJHZW5lcmFsU3RyaW5nIiwgVl9BU04xX0dFTkVSQUxTVFJJTkcpLAogCQlBU04xX0dFTl9TVFIoIkdFTlNUUiIsIFZfQVNOMV9HRU5FUkFMU1RSSU5HKSwKKwkJQVNOMV9HRU5fU1RSKCJOVU1FUklDIiwgVl9BU04xX05VTUVSSUNTVFJJTkcpLAorCQlBU04xX0dFTl9TVFIoIk5VTUVSSUNTVFJJTkciLCBWX0FTTjFfTlVNRVJJQ1NUUklORyksCiAKIAkJLyogU3BlY2lhbCBjYXNlcyAqLwogCQlBU04xX0dFTl9TVFIoIlNFUVVFTkNFIiwgVl9BU04xX1NFUVVFTkNFKSwKQEAgLTczNiw2ICs3MzQsNyBAQAogCQljYXNlIFZfQVNOMV9WSVNJQkxFU1RSSU5HOgogCQljYXNlIFZfQVNOMV9VTklWRVJTQUxTVFJJTkc6CiAJCWNhc2UgVl9BU04xX0dFTkVSQUxTVFJJTkc6CisJCWNhc2UgVl9BU04xX05VTUVSSUNTVFJJTkc6CiAKIAkJaWYgKGZvcm1hdCA9PSBBU04xX0dFTl9GT1JNQVRfQVNDSUkpCiAJCQlmb3JtYXQgPSBNQlNUUklOR19BU0M7CmRpZmYgLS1naXQgYS9jcnlwdG8vYXNuMS9hc24xX2xpYi5jIGIvY3J5cHRvL2FzbjEvYXNuMV9saWIuYwppbmRleCA1YWY1NTllLi4xYmNiNDRhIDEwMDY0NAotLS0gYS9jcnlwdG8vYXNuMS9hc24xX2xpYi5jCisrKyBiL2NyeXB0by9hc24xL2FzbjFfbGliLmMKQEAgLTM0MCwyMCArMzQwLDMxIEBACiAJcmV0dXJuKDEpOwogCX0KIAotQVNOMV9TVFJJTkcgKkFTTjFfU1RSSU5HX2R1cChBU04xX1NUUklORyAqc3RyKQoraW50IEFTTjFfU1RSSU5HX2NvcHkoQVNOMV9TVFJJTkcgKmRzdCwgY29uc3QgQVNOMV9TVFJJTkcgKnN0cikKKwl7CisJaWYgKHN0ciA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKwlkc3QtPnR5cGUgPSBzdHItPnR5cGU7CisJaWYgKCFBU04xX1NUUklOR19zZXQoZHN0LHN0ci0+ZGF0YSxzdHItPmxlbmd0aCkpCisJCXJldHVybiAwOworCWRzdC0+ZmxhZ3MgPSBzdHItPmZsYWdzOworCXJldHVybiAxOworCX0KKworQVNOMV9TVFJJTkcgKkFTTjFfU1RSSU5HX2R1cChjb25zdCBBU04xX1NUUklORyAqc3RyKQogCXsKIAlBU04xX1NUUklORyAqcmV0OwotCi0JaWYgKHN0ciA9PSBOVUxMKSByZXR1cm4oTlVMTCk7Ci0JaWYgKChyZXQ9QVNOMV9TVFJJTkdfdHlwZV9uZXcoc3RyLT50eXBlKSkgPT0gTlVMTCkKLQkJcmV0dXJuKE5VTEwpOwotCWlmICghQVNOMV9TVFJJTkdfc2V0KHJldCxzdHItPmRhdGEsc3RyLT5sZW5ndGgpKQorCWlmICghc3RyKQorCQkgcmV0dXJuIE5VTEw7CisJcmV0PUFTTjFfU1RSSU5HX25ldygpOworCWlmICghcmV0KQorCQlyZXR1cm4gTlVMTDsKKwlpZiAoIUFTTjFfU1RSSU5HX2NvcHkocmV0LHN0cikpCiAJCXsKIAkJQVNOMV9TVFJJTkdfZnJlZShyZXQpOwotCQlyZXR1cm4oTlVMTCk7CisJCXJldHVybiBOVUxMOwogCQl9Ci0JcmV0LT5mbGFncyA9IHN0ci0+ZmxhZ3M7Ci0JcmV0dXJuKHJldCk7CisJcmV0dXJuIHJldDsKIAl9CiAKIGludCBBU04xX1NUUklOR19zZXQoQVNOMV9TVFJJTkcgKnN0ciwgY29uc3Qgdm9pZCAqX2RhdGEsIGludCBsZW4pCkBAIC00MjcsMTEgKzQzOCwxMiBAQAogdm9pZCBBU04xX1NUUklOR19mcmVlKEFTTjFfU1RSSU5HICphKQogCXsKIAlpZiAoYSA9PSBOVUxMKSByZXR1cm47Ci0JaWYgKGEtPmRhdGEgIT0gTlVMTCkgT1BFTlNTTF9mcmVlKGEtPmRhdGEpOworCWlmIChhLT5kYXRhICYmICEoYS0+ZmxhZ3MgJiBBU04xX1NUUklOR19GTEFHX05ERUYpKQorCQlPUEVOU1NMX2ZyZWUoYS0+ZGF0YSk7CiAJT1BFTlNTTF9mcmVlKGEpOwogCX0KIAotaW50IEFTTjFfU1RSSU5HX2NtcChBU04xX1NUUklORyAqYSwgQVNOMV9TVFJJTkcgKmIpCitpbnQgQVNOMV9TVFJJTkdfY21wKGNvbnN0IEFTTjFfU1RSSU5HICphLCBjb25zdCBBU04xX1NUUklORyAqYikKIAl7CiAJaW50IGk7CiAKQEAgLTQ1Nyw3ICs0NjksNyBAQAogCUVSUl9hZGRfZXJyb3JfZGF0YSg0LCJhZGRyZXNzPSIsYnVmMSwiIG9mZnNldD0iLGJ1ZjIpOwogCX0KIAotaW50IEFTTjFfU1RSSU5HX2xlbmd0aChBU04xX1NUUklORyAqeCkKK2ludCBBU04xX1NUUklOR19sZW5ndGgoY29uc3QgQVNOMV9TVFJJTkcgKngpCiB7IHJldHVybiBNX0FTTjFfU1RSSU5HX2xlbmd0aCh4KTsgfQogCiB2b2lkIEFTTjFfU1RSSU5HX2xlbmd0aF9zZXQoQVNOMV9TVFJJTkcgKngsIGludCBsZW4pCmRpZmYgLS1naXQgYS9jcnlwdG8vYXNuMS9hc24xX2xvY2wuaCBiL2NyeXB0by9hc24xL2FzbjFfbG9jbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhYTY1ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vYXNuMS9hc24xX2xvY2wuaApAQCAtMCwwICsxLDEzNCBAQAorLyogYXNuMXQuaCAqLworLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisgKiBwcm9qZWN0IDIwMDYuCisgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisgKgorICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgorICoKKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorICoKKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKyAqICAgIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCisgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAqCisgKi8KKworLyogSW50ZXJuYWwgQVNOMSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnM6IG5vdCBmb3IgYXBwbGljYXRpb24gdXNlICovCisKKy8qIEFTTjEgcHJpbnQgY29udGV4dCBzdHJ1Y3R1cmUgKi8KKworc3RydWN0IGFzbjFfcGN0eF9zdAorCXsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgbm1fZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBjZXJ0X2ZsYWdzOworCXVuc2lnbmVkIGxvbmcgb2lkX2ZsYWdzOworCXVuc2lnbmVkIGxvbmcgc3RyX2ZsYWdzOworCX0gLyogQVNOMV9QQ1RYICovOworCisvKiBBU04xIHB1YmxpYyBrZXkgbWV0aG9kIHN0cnVjdHVyZSAqLworCitzdHJ1Y3QgZXZwX3BrZXlfYXNuMV9tZXRob2Rfc3QKKwl7CisJaW50IHBrZXlfaWQ7CisJaW50IHBrZXlfYmFzZV9pZDsKKwl1bnNpZ25lZCBsb25nIHBrZXlfZmxhZ3M7CisKKwljaGFyICpwZW1fc3RyOworCWNoYXIgKmluZm87CisKKwlpbnQgKCpwdWJfZGVjb2RlKShFVlBfUEtFWSAqcGssIFg1MDlfUFVCS0VZICpwdWIpOworCWludCAoKnB1Yl9lbmNvZGUpKFg1MDlfUFVCS0VZICpwdWIsIGNvbnN0IEVWUF9QS0VZICpwayk7CisJaW50ICgqcHViX2NtcCkoY29uc3QgRVZQX1BLRVkgKmEsIGNvbnN0IEVWUF9QS0VZICpiKTsKKwlpbnQgKCpwdWJfcHJpbnQpKEJJTyAqb3V0LCBjb25zdCBFVlBfUEtFWSAqcGtleSwgaW50IGluZGVudCwKKwkJCQkJCQlBU04xX1BDVFggKnBjdHgpOworCisJaW50ICgqcHJpdl9kZWNvZGUpKEVWUF9QS0VZICpwaywgUEtDUzhfUFJJVl9LRVlfSU5GTyAqcDhpbmYpOworCWludCAoKnByaXZfZW5jb2RlKShQS0NTOF9QUklWX0tFWV9JTkZPICpwOCwgY29uc3QgRVZQX1BLRVkgKnBrKTsKKwlpbnQgKCpwcml2X3ByaW50KShCSU8gKm91dCwgY29uc3QgRVZQX1BLRVkgKnBrZXksIGludCBpbmRlbnQsCisJCQkJCQkJQVNOMV9QQ1RYICpwY3R4KTsKKworCWludCAoKnBrZXlfc2l6ZSkoY29uc3QgRVZQX1BLRVkgKnBrKTsKKwlpbnQgKCpwa2V5X2JpdHMpKGNvbnN0IEVWUF9QS0VZICpwayk7CisKKwlpbnQgKCpwYXJhbV9kZWNvZGUpKEVWUF9QS0VZICpwa2V5LAorCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKipwZGVyLCBpbnQgZGVybGVuKTsKKwlpbnQgKCpwYXJhbV9lbmNvZGUpKGNvbnN0IEVWUF9QS0VZICpwa2V5LCB1bnNpZ25lZCBjaGFyICoqcGRlcik7CisJaW50ICgqcGFyYW1fbWlzc2luZykoY29uc3QgRVZQX1BLRVkgKnBrKTsKKwlpbnQgKCpwYXJhbV9jb3B5KShFVlBfUEtFWSAqdG8sIGNvbnN0IEVWUF9QS0VZICpmcm9tKTsKKwlpbnQgKCpwYXJhbV9jbXApKGNvbnN0IEVWUF9QS0VZICphLCBjb25zdCBFVlBfUEtFWSAqYik7CisJaW50ICgqcGFyYW1fcHJpbnQpKEJJTyAqb3V0LCBjb25zdCBFVlBfUEtFWSAqcGtleSwgaW50IGluZGVudCwKKwkJCQkJCQlBU04xX1BDVFggKnBjdHgpOworCisJdm9pZCAoKnBrZXlfZnJlZSkoRVZQX1BLRVkgKnBrZXkpOworCWludCAoKnBrZXlfY3RybCkoRVZQX1BLRVkgKnBrZXksIGludCBvcCwgbG9uZyBhcmcxLCB2b2lkICphcmcyKTsKKworCS8qIExlZ2FjeSBmdW5jdGlvbnMgZm9yIG9sZCBQRU0gKi8KKworCWludCAoKm9sZF9wcml2X2RlY29kZSkoRVZQX1BLRVkgKnBrZXksCisJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqKnBkZXIsIGludCBkZXJsZW4pOworCWludCAoKm9sZF9wcml2X2VuY29kZSkoY29uc3QgRVZQX1BLRVkgKnBrZXksIHVuc2lnbmVkIGNoYXIgKipwZGVyKTsKKworCX0gLyogRVZQX1BLRVlfQVNOMV9NRVRIT0QgKi87CisKKy8qIE1ldGhvZCB0byBoYW5kbGUgQ1JMIGFjY2Vzcy4KKyAqIEluIGdlbmVyYWwgYSBDUkwgY291bGQgYmUgdmVyeSBsYXJnZSAoc2V2ZXJhbCBNYikgYW5kIGNhbiBjb25zdW1lIGxhcmdlCisgKiBhbW91bnRzIG9mIHJlc291cmNlcyBpZiBzdG9yZWQgaW4gbWVtb3J5IGJ5IG11bHRpcGxlIHByb2Nlc3Nlcy4KKyAqIFRoaXMgbWV0aG9kIGFsbG93cyBnZW5lcmFsIENSTCBvcGVyYXRpb25zIHRvIGJlIHJlZGlyZWN0ZWQgdG8gbW9yZQorICogZWZmaWNpZW50IGNhbGxiYWNrczogZm9yIGV4YW1wbGUgYSBDUkwgZW50cnkgZGF0YWJhc2UuCisgKi8KKworI2RlZmluZSBYNTA5X0NSTF9NRVRIT0RfRFlOQU1JQwkJMQorCitzdHJ1Y3QgeDUwOV9jcmxfbWV0aG9kX3N0CisJeworCWludCBmbGFnczsKKwlpbnQgKCpjcmxfaW5pdCkoWDUwOV9DUkwgKmNybCk7CisJaW50ICgqY3JsX2ZyZWUpKFg1MDlfQ1JMICpjcmwpOworCWludCAoKmNybF9sb29rdXApKFg1MDlfQ1JMICpjcmwsIFg1MDlfUkVWT0tFRCAqKnJldCwKKwkJCQlBU04xX0lOVEVHRVIgKnNlciwgWDUwOV9OQU1FICppc3N1ZXIpOworCWludCAoKmNybF92ZXJpZnkpKFg1MDlfQ1JMICpjcmwsIEVWUF9QS0VZICpwayk7CisJfTsKZGlmZiAtLWdpdCBhL2NyeXB0by9hc24xL2FzbjFfbWFjLmggYi9jcnlwdG8vYXNuMS9hc24xX21hYy5oCmluZGV4IGQ5NThjYTYuLjg3YmQwZTkgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hc24xL2FzbjFfbWFjLmgKKysrIGIvY3J5cHRvL2FzbjEvYXNuMV9tYWMuaApAQCAtMTUzLDYgKzE1MywxMyBAQAogCQlNX0FTTjFfRDJJX2dldChiLGZ1bmMpOyBcCiAJCX0KIAorI2RlZmluZSBNX0FTTjFfRDJJX2dldF9pbnRfb3B0KGIsZnVuYyx0eXBlKSBcCisJaWYgKChjLnNsZW4gIT0gMCkgJiYgKChNX0FTTjFfbmV4dCAmICh+Vl9BU04xX0NPTlNUUlVDVEVEKSkgXAorCQk9PSAoVl9BU04xX1VOSVZFUlNBTHwodHlwZSkpKSkgXAorCQl7IFwKKwkJTV9BU04xX0QySV9nZXRfaW50KGIsZnVuYyk7IFwKKwkJfQorCiAjZGVmaW5lIE1fQVNOMV9EMklfZ2V0X2ltcChiLGZ1bmMsIHR5cGUpIFwKIAlNX0FTTjFfbmV4dD0oX3RtcCYgVl9BU04xX0NPTlNUUlVDVEVEKXx0eXBlOyBcCiAJYy5xPWMucDsgXApkaWZmIC0tZ2l0IGEvY3J5cHRvL2FzbjEvYXNuMV9wYXIuYyBiL2NyeXB0by9hc24xL2FzbjFfcGFyLmMKaW5kZXggY2IwOGUxNS4uYWFjYTY5YSAxMDA2NDQKLS0tIGEvY3J5cHRvL2FzbjEvYXNuMV9wYXIuYworKysgYi9jcnlwdG8vYXNuMS9hc24xX3Bhci5jCkBAIC03MCw5ICs3MCw4IEBACiAJICAgICBpbnQgaW5kZW50KQogCXsKIAlzdGF0aWMgY29uc3QgY2hhciBmbXRbXT0iJS0xOHMiOwotCXN0YXRpYyBjb25zdCBjaGFyIGZtdDJbXT0iJTJkICUtMTVzIjsKIAljaGFyIHN0clsxMjhdOwotCWNvbnN0IGNoYXIgKnAsKnAyPU5VTEw7CisJY29uc3QgY2hhciAqcDsKIAogCWlmIChjb25zdHJ1Y3RlZCAmIFZfQVNOMV9DT05TVFJVQ1RFRCkKIAkJcD0iY29uczogIjsKQEAgLTkzLDE0ICs5Miw4IEBACiAJZWxzZQogCQlwID0gQVNOMV90YWcyc3RyKHRhZyk7CiAKLQlpZiAocDIgIT0gTlVMTCkKLQkJewotCQlpZiAoQklPX3ByaW50ZihicCxmbXQyLHRhZyxwMikgPD0gMCkgZ290byBlcnI7Ci0JCX0KLQllbHNlCi0JCXsKLQkJaWYgKEJJT19wcmludGYoYnAsZm10LHApIDw9IDApIGdvdG8gZXJyOwotCQl9CisJaWYgKEJJT19wcmludGYoYnAsZm10LHApIDw9IDApCisJCWdvdG8gZXJyOwogCXJldHVybigxKTsKIGVycjoKIAlyZXR1cm4oMCk7CkBAIC00MjQsNyArNDE3LDcgQEAKIAogY29uc3QgY2hhciAqQVNOMV90YWcyc3RyKGludCB0YWcpCiB7Ci0Jc3RhdGljIGNvbnN0IGNoYXIgKnRhZzJzdHJbXSA9IHsKKwlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHRhZzJzdHJbXSA9IHsKIAkgIkVPQyIsICJCT09MRUFOIiwgIklOVEVHRVIiLCAiQklUIFNUUklORyIsICJPQ1RFVCBTVFJJTkciLCAvKiAwLTQgKi8KIAkgIk5VTEwiLCAiT0JKRUNUIiwgIk9CSkVDVCBERVNDUklQVE9SIiwgIkVYVEVSTkFMIiwgIlJFQUwiLCAvKiA1LTkgKi8KIAkgIkVOVU1FUkFURUQiLCAiPEFTTjEgMTE+IiwgIlVURjhTVFJJTkciLCAiPEFTTjEgMTM+IiwgCSAgICAvKiAxMC0xMyAqLwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FzbjEvYXNuMXQuaCBiL2NyeXB0by9hc24xL2FzbjF0LmgKaW5kZXggYWMxNGY5NC4uZDIzMGU0YiAxMDA2NDQKLS0tIGEvY3J5cHRvL2FzbjEvYXNuMXQuaAorKysgYi9jcnlwdG8vYXNuMS9hc24xdC5oCkBAIC0zLDcgKzMsNyBAQAogICogcHJvamVjdCAyMDAwLgogICovCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChjKSAyMDAwIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIxOCw2ICsyMTgsMTggQEAKIAkJI3N0bmFtZSBcCiAJQVNOMV9JVEVNX2VuZCh0bmFtZSkKIAorI2RlZmluZSBBU04xX05ERUZfU0VRVUVOQ0VfRU5EX2NiKHN0bmFtZSwgdG5hbWUpIFwKKwk7XAorCUFTTjFfSVRFTV9zdGFydCh0bmFtZSkgXAorCQlBU04xX0lUWVBFX05ERUZfU0VRVUVOQ0UsXAorCQlWX0FTTjFfU0VRVUVOQ0UsXAorCQl0bmFtZSMjX3NlcV90dCxcCisJCXNpemVvZih0bmFtZSMjX3NlcV90dCkgLyBzaXplb2YoQVNOMV9URU1QTEFURSksXAorCQkmdG5hbWUjI19hdXgsXAorCQlzaXplb2Yoc3RuYW1lKSxcCisJCSNzdG5hbWUgXAorCUFTTjFfSVRFTV9lbmQodG5hbWUpCisKIAogLyogVGhpcyBwYWlyIGhlbHBzIGRlY2xhcmUgYSBDSE9JQ0UgdHlwZS4gV2UgY2FuIGRvOgogICoKQEAgLTY1MSw4ICs2NjMsMTMgQEAKIHR5cGVkZWYgaW50IEFTTjFfZXhfbmV3X2Z1bmMoQVNOMV9WQUxVRSAqKnB2YWwsIGNvbnN0IEFTTjFfSVRFTSAqaXQpOwogdHlwZWRlZiB2b2lkIEFTTjFfZXhfZnJlZV9mdW5jKEFTTjFfVkFMVUUgKipwdmFsLCBjb25zdCBBU04xX0lURU0gKml0KTsKIAordHlwZWRlZiBpbnQgQVNOMV9leF9wcmludF9mdW5jKEJJTyAqb3V0LCBBU04xX1ZBTFVFICoqcHZhbCwgCisJCQkJCQlpbnQgaW5kZW50LCBjb25zdCBjaGFyICpmbmFtZSwgCisJCQkJCQljb25zdCBBU04xX1BDVFggKnBjdHgpOworCiB0eXBlZGVmIGludCBBU04xX3ByaW1pdGl2ZV9pMmMoQVNOMV9WQUxVRSAqKnB2YWwsIHVuc2lnbmVkIGNoYXIgKmNvbnQsIGludCAqcHV0eXBlLCBjb25zdCBBU04xX0lURU0gKml0KTsKIHR5cGVkZWYgaW50IEFTTjFfcHJpbWl0aXZlX2MyaShBU04xX1ZBTFVFICoqcHZhbCwgY29uc3QgdW5zaWduZWQgY2hhciAqY29udCwgaW50IGxlbiwgaW50IHV0eXBlLCBjaGFyICpmcmVlX2NvbnQsIGNvbnN0IEFTTjFfSVRFTSAqaXQpOwordHlwZWRlZiBpbnQgQVNOMV9wcmltaXRpdmVfcHJpbnQoQklPICpvdXQsIEFTTjFfVkFMVUUgKipwdmFsLCBjb25zdCBBU04xX0lURU0gKml0LCBpbnQgaW5kZW50LCBjb25zdCBBU04xX1BDVFggKnBjdHgpOwogCiB0eXBlZGVmIHN0cnVjdCBBU04xX0NPTVBBVF9GVU5DU19zdCB7CiAJQVNOMV9uZXdfZnVuYyAqYXNuMV9uZXc7CkBAIC02NjgsNiArNjg1LDcgQEAKIAlBU04xX2V4X2ZyZWVfZnVuYyAqYXNuMV9leF9jbGVhcjsKIAlBU04xX2V4X2QyaSAqYXNuMV9leF9kMmk7CiAJQVNOMV9leF9pMmQgKmFzbjFfZXhfaTJkOworCUFTTjFfZXhfcHJpbnRfZnVuYyAqYXNuMV9leF9wcmludDsKIH0gQVNOMV9FWFRFUk5fRlVOQ1M7CiAKIHR5cGVkZWYgc3RydWN0IEFTTjFfUFJJTUlUSVZFX0ZVTkNTX3N0IHsKQEAgLTY3OCw2ICs2OTYsNyBAQAogCUFTTjFfZXhfZnJlZV9mdW5jICpwcmltX2NsZWFyOwogCUFTTjFfcHJpbWl0aXZlX2MyaSAqcHJpbV9jMmk7CiAJQVNOMV9wcmltaXRpdmVfaTJjICpwcmltX2kyYzsKKwlBU04xX3ByaW1pdGl2ZV9wcmludCAqcHJpbV9wcmludDsKIH0gQVNOMV9QUklNSVRJVkVfRlVOQ1M7CiAKIC8qIFRoaXMgaXMgdGhlIEFTTjFfQVVYIHN0cnVjdHVyZTogaXQgaGFuZGxlcyB2YXJpb3VzCkBAIC02OTcsNyArNzE2LDggQEAKICAqIHRoZW4gYW4gZXh0ZXJuYWwgdHlwZSBpcyBtb3JlIGFwcHJvcHJpYXRlLgogICovCiAKLXR5cGVkZWYgaW50IEFTTjFfYXV4X2NiKGludCBvcGVyYXRpb24sIEFTTjFfVkFMVUUgKippbiwgY29uc3QgQVNOMV9JVEVNICppdCk7Cit0eXBlZGVmIGludCBBU04xX2F1eF9jYihpbnQgb3BlcmF0aW9uLCBBU04xX1ZBTFVFICoqaW4sIGNvbnN0IEFTTjFfSVRFTSAqaXQsCisJCQkJdm9pZCAqZXhhcmcpOwogCiB0eXBlZGVmIHN0cnVjdCBBU04xX0FVWF9zdCB7CiAJdm9pZCAqYXBwX2RhdGE7CkBAIC03MDgsNiArNzI4LDIzIEBACiAJaW50IGVuY19vZmZzZXQ7CQkvKiBPZmZzZXQgb2YgQVNOMV9FTkNPRElORyBzdHJ1Y3R1cmUgKi8KIH0gQVNOMV9BVVg7CiAKKy8qIEZvciBwcmludCByZWxhdGVkIGNhbGxiYWNrcyBleGFyZyBwb2ludHMgdG8gdGhpcyBzdHJ1Y3R1cmUgKi8KK3R5cGVkZWYgc3RydWN0IEFTTjFfUFJJTlRfQVJHX3N0IHsKKwlCSU8gKm91dDsKKwlpbnQgaW5kZW50OworCWNvbnN0IEFTTjFfUENUWCAqcGN0eDsKK30gQVNOMV9QUklOVF9BUkc7CisKKy8qIEZvciBzdHJlYW1pbmcgcmVsYXRlZCBjYWxsYmFja3MgZXhhcmcgcG9pbnRzIHRvIHRoaXMgc3RydWN0dXJlICovCit0eXBlZGVmIHN0cnVjdCBBU04xX1NUUkVBTV9BUkdfc3QgeworCS8qIEJJTyB0byBzdHJlYW0gdGhyb3VnaCAqLworCUJJTyAqb3V0OworCS8qIEJJTyB3aXRoIGZpbHRlcnMgYXBwZW5kZWQgKi8KKwlCSU8gKm5kZWZfYmlvOworCS8qIFN0cmVhbWluZyBJL08gYm91bmRhcnkgKi8KKwl1bnNpZ25lZCBjaGFyICoqYm91bmRhcnk7Cit9IEFTTjFfU1RSRUFNX0FSRzsKKwogLyogRmxhZ3MgaW4gQVNOMV9BVVggKi8KIAogLyogVXNlIGEgcmVmZXJlbmNlIGNvdW50ICovCkBAIC03MjcsNiArNzY0LDEyIEBACiAjZGVmaW5lIEFTTjFfT1BfRDJJX1BPU1QJNQogI2RlZmluZSBBU04xX09QX0kyRF9QUkUJCTYKICNkZWZpbmUgQVNOMV9PUF9JMkRfUE9TVAk3CisjZGVmaW5lIEFTTjFfT1BfUFJJTlRfUFJFCTgKKyNkZWZpbmUgQVNOMV9PUF9QUklOVF9QT1NUCTkKKyNkZWZpbmUgQVNOMV9PUF9TVFJFQU1fUFJFCTEwCisjZGVmaW5lIEFTTjFfT1BfU1RSRUFNX1BPU1QJMTEKKyNkZWZpbmUgQVNOMV9PUF9ERVRBQ0hFRF9QUkUJMTIKKyNkZWZpbmUgQVNOMV9PUF9ERVRBQ0hFRF9QT1NUCTEzCiAKIC8qIE1hY3JvIHRvIGltcGxlbWVudCBhIHByaW1pdGl2ZSB0eXBlICovCiAjZGVmaW5lIElNUExFTUVOVF9BU04xX1RZUEUoc3RuYW1lKSBJTVBMRU1FTlRfQVNOMV9UWVBFX2V4KHN0bmFtZSwgc3RuYW1lLCAwKQpAQCAtNzgyLDkgKzgyNSwyMiBAQAogI2RlZmluZSBJTVBMRU1FTlRfQVNOMV9GVU5DVElPTlNfRU5DT0RFX25hbWUoc3RuYW1lLCBpdG5hbWUpIFwKIAkJCUlNUExFTUVOVF9BU04xX0ZVTkNUSU9OU19FTkNPREVfZm5hbWUoc3RuYW1lLCBpdG5hbWUsIGl0bmFtZSkKIAorI2RlZmluZSBJTVBMRU1FTlRfU1RBVElDX0FTTjFfQUxMT0NfRlVOQ1RJT05TKHN0bmFtZSkgXAorCQlJTVBMRU1FTlRfQVNOMV9BTExPQ19GVU5DVElPTlNfcGZuYW1lKHN0YXRpYywgc3RuYW1lLCBzdG5hbWUsIHN0bmFtZSkKKwogI2RlZmluZSBJTVBMRU1FTlRfQVNOMV9BTExPQ19GVU5DVElPTlMoc3RuYW1lKSBcCiAJCUlNUExFTUVOVF9BU04xX0FMTE9DX0ZVTkNUSU9OU19mbmFtZShzdG5hbWUsIHN0bmFtZSwgc3RuYW1lKQogCisjZGVmaW5lIElNUExFTUVOVF9BU04xX0FMTE9DX0ZVTkNUSU9OU19wZm5hbWUocHJlLCBzdG5hbWUsIGl0bmFtZSwgZm5hbWUpIFwKKwlwcmUgc3RuYW1lICpmbmFtZSMjX25ldyh2b2lkKSBcCisJeyBcCisJCXJldHVybiAoc3RuYW1lICopQVNOMV9pdGVtX25ldyhBU04xX0lURU1fcnB0cihpdG5hbWUpKTsgXAorCX0gXAorCXByZSB2b2lkIGZuYW1lIyNfZnJlZShzdG5hbWUgKmEpIFwKKwl7IFwKKwkJQVNOMV9pdGVtX2ZyZWUoKEFTTjFfVkFMVUUgKilhLCBBU04xX0lURU1fcnB0cihpdG5hbWUpKTsgXAorCX0KKwogI2RlZmluZSBJTVBMRU1FTlRfQVNOMV9BTExPQ19GVU5DVElPTlNfZm5hbWUoc3RuYW1lLCBpdG5hbWUsIGZuYW1lKSBcCiAJc3RuYW1lICpmbmFtZSMjX25ldyh2b2lkKSBcCiAJeyBcCkBAIC04MzQsNiArODkwLDE3IEBACiAgICAgICAgIHJldHVybiBBU04xX2l0ZW1fZHVwKEFTTjFfSVRFTV9ycHRyKHN0bmFtZSksIHgpOyBcCiAgICAgICAgIH0KIAorI2RlZmluZSBJTVBMRU1FTlRfQVNOMV9QUklOVF9GVU5DVElPTihzdG5hbWUpIFwKKwlJTVBMRU1FTlRfQVNOMV9QUklOVF9GVU5DVElPTl9mbmFtZShzdG5hbWUsIHN0bmFtZSwgc3RuYW1lKQorCisjZGVmaW5lIElNUExFTUVOVF9BU04xX1BSSU5UX0ZVTkNUSU9OX2ZuYW1lKHN0bmFtZSwgaXRuYW1lLCBmbmFtZSkgXAorCWludCBmbmFtZSMjX3ByaW50X2N0eChCSU8gKm91dCwgc3RuYW1lICp4LCBpbnQgaW5kZW50LCBcCisJCQkJCQljb25zdCBBU04xX1BDVFggKnBjdHgpIFwKKwl7IFwKKwkJcmV0dXJuIEFTTjFfaXRlbV9wcmludChvdXQsIChBU04xX1ZBTFVFICopeCwgaW5kZW50LCBcCisJCQlBU04xX0lURU1fcnB0cihpdG5hbWUpLCBwY3R4KTsgXAorCX0gCisKICNkZWZpbmUgSU1QTEVNRU5UX0FTTjFfRlVOQ1RJT05TX2NvbnN0KG5hbWUpIFwKIAkJSU1QTEVNRU5UX0FTTjFfRlVOQ1RJT05TX2NvbnN0X2ZuYW1lKG5hbWUsIG5hbWUsIG5hbWUpCiAKZGlmZiAtLWdpdCBhL2NyeXB0by9hc24xL2Fzbl9taW1lLmMgYi9jcnlwdG8vYXNuMS9hc25fbWltZS5jCmluZGV4IGQ4ZDllNzYuLmMxZDFiMTIgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hc24xL2Fzbl9taW1lLmMKKysrIGIvY3J5cHRvL2FzbjEvYXNuX21pbWUuYwpAQCAtNTksNiArNTksNyBAQAogI2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgogI2luY2x1ZGUgPG9wZW5zc2wvYXNuMS5oPgogI2luY2x1ZGUgPG9wZW5zc2wvYXNuMXQuaD4KKyNpbmNsdWRlICJhc24xX2xvY2wuaCIKIAogLyogR2VuZXJhbGlzZWQgTUlNRSBsaWtlIHV0aWxpdGllcyBmb3Igc3RyZWFtaW5nIEFTTjEuIEFsdGhvdWdoIG1hbnkKICAqIGhhdmUgYSBQS0NTNy9DTVMgbGlrZSBmbGF2b3VyIG90aGVycyBhcmUgbW9yZSBnZW5lcmFsIHB1cnBvc2UuCkBAIC04Niw2ICs4Nyw4IEBACiBERUNMQVJFX1NUQUNLX09GKE1JTUVfSEVBREVSKQogSU1QTEVNRU5UX1NUQUNLX09GKE1JTUVfSEVBREVSKQogCitzdGF0aWMgaW50IGFzbjFfb3V0cHV0X2RhdGEoQklPICpvdXQsIEJJTyAqZGF0YSwgQVNOMV9WQUxVRSAqdmFsLCBpbnQgZmxhZ3MsCisJCQkJCWNvbnN0IEFTTjFfSVRFTSAqaXQpOwogc3RhdGljIGNoYXIgKiBzdHJpcF9lbmRzKGNoYXIgKm5hbWUpOwogc3RhdGljIGNoYXIgKiBzdHJpcF9zdGFydChjaGFyICpuYW1lKTsKIHN0YXRpYyBjaGFyICogc3RyaXBfZW5kKGNoYXIgKm5hbWUpOwpAQCAtMTA3LDYgKzExMCwzOSBAQAogI2RlZmluZSBNQVhfU01MRU4gMTAyNAogI2RlZmluZSBtaW1lX2RlYnVnKHgpIC8qIHggKi8KIAorLyogT3V0cHV0IGFuIEFTTjEgc3RydWN0dXJlIGluIEJFUiBmb3JtYXQgc3RyZWFtaW5nIGlmIG5lY2Vzc2FyeSAqLworCitpbnQgaTJkX0FTTjFfYmlvX3N0cmVhbShCSU8gKm91dCwgQVNOMV9WQUxVRSAqdmFsLCBCSU8gKmluLCBpbnQgZmxhZ3MsCisJCQkJY29uc3QgQVNOMV9JVEVNICppdCkKKwl7CisJLyogSWYgc3RyZWFtaW5nIGNyZWF0ZSBzdHJlYW0gQklPIGFuZCBjb3B5IGFsbCBjb250ZW50IHRocm91Z2ggaXQgKi8KKwlpZiAoZmxhZ3MgJiBTTUlNRV9TVFJFQU0pCisJCXsKKwkJQklPICpiaW8sICp0YmlvOworCQliaW8gPSBCSU9fbmV3X05ERUYob3V0LCB2YWwsIGl0KTsKKwkJaWYgKCFiaW8pCisJCQl7CisJCQlBU04xZXJyKEFTTjFfRl9JMkRfQVNOMV9CSU9fU1RSRUFNLEVSUl9SX01BTExPQ19GQUlMVVJFKTsKKwkJCXJldHVybiAwOworCQkJfQorCQlTTUlNRV9jcmxmX2NvcHkoaW4sIGJpbywgZmxhZ3MpOworCQkodm9pZClCSU9fZmx1c2goYmlvKTsKKwkJLyogRnJlZSB1cCBzdWNjZXNzaXZlIEJJT3MgdW50aWwgd2UgaGl0IHRoZSBvbGQgb3V0cHV0IEJJTyAqLworCQlkbworCQkJeworCQkJdGJpbyA9IEJJT19wb3AoYmlvKTsKKwkJCUJJT19mcmVlKGJpbyk7CisJCQliaW8gPSB0YmlvOworCQkJfSB3aGlsZSAoYmlvICE9IG91dCk7CisJCX0KKwkvKiBlbHNlIGp1c3Qgd3JpdGUgb3V0IEFTTjEgc3RydWN0dXJlIHdoaWNoIHdpbGwgaGF2ZSBhbGwgY29udGVudAorCSAqIHN0b3JlZCBpbnRlcm5hbGx5CisJICovCisJZWxzZQorCQlBU04xX2l0ZW1faTJkX2JpbyhpdCwgb3V0LCB2YWwpOworCXJldHVybiAxOworCX0KKwogLyogQmFzZSA2NCByZWFkIGFuZCB3cml0ZSBvZiBBU04xIHN0cnVjdHVyZSAqLwogCiBzdGF0aWMgaW50IEI2NF93cml0ZV9BU04xKEJJTyAqb3V0LCBBU04xX1ZBTFVFICp2YWwsIEJJTyAqaW4sIGludCBmbGFncywKQEAgLTEyMywxMyArMTU5LDI2IEBACiAJLyogcHJlcGVuZCB0aGUgYjY0IEJJTyBzbyBhbGwgZGF0YSBpcyBiYXNlNjQgZW5jb2RlZC4KIAkgKi8KIAlvdXQgPSBCSU9fcHVzaChiNjQsIG91dCk7Ci0JciA9IEFTTjFfaXRlbV9pMmRfYmlvKGl0LCBvdXQsIHZhbCk7CisJciA9IGkyZF9BU04xX2Jpb19zdHJlYW0ob3V0LCB2YWwsIGluLCBmbGFncywgaXQpOwogCSh2b2lkKUJJT19mbHVzaChvdXQpOwogCUJJT19wb3Aob3V0KTsKIAlCSU9fZnJlZShiNjQpOwogCXJldHVybiByOwogCX0KIAorLyogU3RyZWFtaW5nIEFTTjEgUEVNIHdyaXRlICovCisKK2ludCBQRU1fd3JpdGVfYmlvX0FTTjFfc3RyZWFtKEJJTyAqb3V0LCBBU04xX1ZBTFVFICp2YWwsIEJJTyAqaW4sIGludCBmbGFncywKKwkJCQljb25zdCBjaGFyICpoZHIsCisJCQkJY29uc3QgQVNOMV9JVEVNICppdCkKKwl7CisJaW50IHI7CisJQklPX3ByaW50ZihvdXQsICItLS0tLUJFR0lOICVzLS0tLS1cbiIsIGhkcik7CisJciA9IEI2NF93cml0ZV9BU04xKG91dCwgdmFsLCBpbiwgZmxhZ3MsIGl0KTsKKwlCSU9fcHJpbnRmKG91dCwgIi0tLS0tRU5EICVzLS0tLS1cbiIsIGhkcik7CisJcmV0dXJuIHI7CisJfQorCiBzdGF0aWMgQVNOMV9WQUxVRSAqYjY0X3JlYWRfYXNuMShCSU8gKmJpbywgY29uc3QgQVNOMV9JVEVNICppdCkKIHsKIAlCSU8gKmI2NDsKQEAgLTE1Miw3ICsyMDEsOCBAQAogCiBzdGF0aWMgaW50IGFzbjFfd3JpdGVfbWljYWxnKEJJTyAqb3V0LCBTVEFDS19PRihYNTA5X0FMR09SKSAqbWRhbGdzKQogCXsKLQlpbnQgaSwgaGF2ZV91bmtub3duID0gMCwgd3JpdGVfY29tbWEsIG1kX25pZDsKKwljb25zdCBFVlBfTUQgKm1kOworCWludCBpLCBoYXZlX3Vua25vd24gPSAwLCB3cml0ZV9jb21tYSwgcmV0ID0gMCwgbWRfbmlkOwogCWhhdmVfdW5rbm93biA9IDA7CiAJd3JpdGVfY29tbWEgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBza19YNTA5X0FMR09SX251bShtZGFsZ3MpOyBpKyspCkBAIC0xNjEsNiArMjExLDIxIEBACiAJCQlCSU9fd3JpdGUob3V0LCAiLCIsIDEpOwogCQl3cml0ZV9jb21tYSA9IDE7CiAJCW1kX25pZCA9IE9CSl9vYmoybmlkKHNrX1g1MDlfQUxHT1JfdmFsdWUobWRhbGdzLCBpKS0+YWxnb3JpdGhtKTsKKwkJbWQgPSBFVlBfZ2V0X2RpZ2VzdGJ5bmlkKG1kX25pZCk7CisJCWlmIChtZCAmJiBtZC0+bWRfY3RybCkKKwkJCXsKKwkJCWludCBydjsKKwkJCWNoYXIgKm1pY3N0cjsKKwkJCXJ2ID0gbWQtPm1kX2N0cmwoTlVMTCwgRVZQX01EX0NUUkxfTUlDQUxHLCAwLCAmbWljc3RyKTsKKwkJCWlmIChydiA+IDApCisJCQkJeworCQkJCUJJT19wdXRzKG91dCwgbWljc3RyKTsKKwkJCQlPUEVOU1NMX2ZyZWUobWljc3RyKTsKKwkJCQljb250aW51ZTsKKwkJCQl9CisJCQlpZiAocnYgIT0gLTIpCisJCQkJZ290byBlcnI7CisJCQl9CiAJCXN3aXRjaChtZF9uaWQpCiAJCQl7CiAJCQljYXNlIE5JRF9zaGExOgpAQCAtMTgzLDYgKzI0OCwxMSBAQAogCQkJQklPX3B1dHMob3V0LCAic2hhLTUxMiIpOwogCQkJYnJlYWs7CiAKKwkJCWNhc2UgTklEX2lkX0dvc3RSMzQxMV85NDoKKwkJCUJJT19wdXRzKG91dCwgImdvc3RyMzQxMS05NCIpOworCQkJCWdvdG8gZXJyOworCQkJYnJlYWs7CisKIAkJCWRlZmF1bHQ6CiAJCQlpZiAoaGF2ZV91bmtub3duKQogCQkJCXdyaXRlX2NvbW1hID0gMDsKQEAgLTE5NiwxNiArMjY2LDE4IEBACiAJCQl9CiAJCX0KIAotCXJldHVybiAxOworCXJldCA9IDE7CisJZXJyOgorCisJcmV0dXJuIHJldDsKIAogCX0KIAogLyogU01JTUUgc2VuZGVyICovCiAKLWludCBpbnRfc21pbWVfd3JpdGVfQVNOMShCSU8gKmJpbywgQVNOMV9WQUxVRSAqdmFsLCBCSU8gKmRhdGEsIGludCBmbGFncywKK2ludCBTTUlNRV93cml0ZV9BU04xKEJJTyAqYmlvLCBBU04xX1ZBTFVFICp2YWwsIEJJTyAqZGF0YSwgaW50IGZsYWdzLAogCQkJCWludCBjdHlwZV9uaWQsIGludCBlY29udF9uaWQsCiAJCQkJU1RBQ0tfT0YoWDUwOV9BTEdPUikgKm1kYWxncywKLQkJCQlhc24xX291dHB1dF9kYXRhX2ZuICpkYXRhX2ZuLAogCQkJCWNvbnN0IEFTTjFfSVRFTSAqaXQpCiB7CiAJY2hhciBib3VuZFszM10sIGM7CkBAIC0yNDMsNyArMzE1LDcgQEAKIAkJCQkJCW1pbWVfZW9sLCBtaW1lX2VvbCk7CiAJCS8qIE5vdyB3cml0ZSBvdXQgdGhlIGZpcnN0IHBhcnQgKi8KIAkJQklPX3ByaW50ZihiaW8sICItLS0tLS0lcyVzIiwgYm91bmQsIG1pbWVfZW9sKTsKLQkJaWYgKCFkYXRhX2ZuKGJpbywgZGF0YSwgdmFsLCBmbGFncywgaXQpKQorCQlpZiAoIWFzbjFfb3V0cHV0X2RhdGEoYmlvLCBkYXRhLCB2YWwsIGZsYWdzLCBpdCkpCiAJCQlyZXR1cm4gMDsKIAkJQklPX3ByaW50ZihiaW8sICIlcy0tLS0tLSVzJXMiLCBtaW1lX2VvbCwgYm91bmQsIG1pbWVfZW9sKTsKIApAQCAtMjk2LDggKzM2OCw2IEBACiAJcmV0dXJuIDE7CiB9CiAKLSNpZiAwCi0KIC8qIEhhbmRsZSBvdXRwdXQgb2YgQVNOMSBkYXRhICovCiAKIApAQCAtMzUwLDggKzQyMCw2IEBACiAKIAl9CiAKLSNlbmRpZgotCiAvKiBTTUlNRSByZWFkZXI6IGhhbmRsZSBtdWx0aXBhcnQvc2lnbmVkIGFuZCBvcGFxdWUgc2lnbmluZy4KICAqIGluIG11bHRpcGFydCBjYXNlIHRoZSBjb250ZW50IGlzIHBsYWNlZCBpbiBhIG1lbW9yeSBCSU8KICAqIHBvaW50ZWQgdG8gYnkgImJjb250Ii4gSW4gb3BhcXVlIHRoaXMgaXMgc2V0IHRvIE5VTEwKZGlmZiAtLWdpdCBhL2NyeXB0by9hc24xL2Fzbl9wYWNrLmMgYi9jcnlwdG8vYXNuMS9hc25fcGFjay5jCmluZGV4IGYxYTVhMDUuLmFkNzM4MjEgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hc24xL2Fzbl9wYWNrLmMKKysrIGIvY3J5cHRvL2FzbjEvYXNuX3BhY2suYwpAQCAtNjYsMTAgKzY2LDEwIEBACiAKIC8qIFR1cm4gYW4gQVNOMSBlbmNvZGVkIFNFUVVFTkNFIE9GIGludG8gYSBTVEFDSyBvZiBzdHJ1Y3R1cmVzICovCiAKLVNUQUNLICpBU04xX3NlcV91bnBhY2soY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbGVuLAotCQkgICAgICAgZDJpX29mX3ZvaWQgKmQyaSx2b2lkICgqZnJlZV9mdW5jKSh2b2lkICopKQorU1RBQ0tfT0YoT1BFTlNTTF9CTE9DSykgKkFTTjFfc2VxX3VucGFjayhjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4sCisJCQkgZDJpX29mX3ZvaWQgKmQyaSwgdm9pZCAoKmZyZWVfZnVuYykoT1BFTlNTTF9CTE9DSykpCiB7Ci0gICAgU1RBQ0sgKnNrOworICAgIFNUQUNLX09GKE9QRU5TU0xfQkxPQ0spICpzazsKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwYnVmOwogICAgIHBidWYgPSAgYnVmOwogICAgIGlmICghKHNrID0gZDJpX0FTTjFfU0VUKE5VTEwsICZwYnVmLCBsZW4sIGQyaSwgZnJlZV9mdW5jLApAQCAtODIsNyArODIsNyBAQAogICogT1BFTlNTTF9tYWxsb2MnZWQgYnVmZmVyCiAgKi8KIAotdW5zaWduZWQgY2hhciAqQVNOMV9zZXFfcGFjayhTVEFDSyAqc2FmZXMsIGkyZF9vZl92b2lkICppMmQsCit1bnNpZ25lZCBjaGFyICpBU04xX3NlcV9wYWNrKFNUQUNLX09GKE9QRU5TU0xfQkxPQ0spICpzYWZlcywgaTJkX29mX3ZvaWQgKmkyZCwKIAkJCSAgICAgdW5zaWduZWQgY2hhciAqKmJ1ZiwgaW50ICpsZW4pCiB7CiAJaW50IHNhZmVsZW47CmRpZmYgLS1naXQgYS9jcnlwdG8vYXNuMS9iaW9fYXNuMS5jIGIvY3J5cHRvL2FzbjEvYmlvX2FzbjEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzdlZmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL2FzbjEvYmlvX2FzbjEuYwpAQCAtMCwwICsxLDQ5NSBAQAorLyogYmlvX2FzbjEuYyAqLworLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisgKiBwcm9qZWN0LgorICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChjKSAyMDA2IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorICoKKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKyAqCisgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKyAqCisgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisgKiAgICBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZworICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQorICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisgKgorICovCisKKy8qIEV4cGVyaW1lbnRhbCBBU04xIEJJTy4gV2hlbiB3cml0dGVuIHRocm91Z2ggdGhlIGRhdGEgaXMgY29udmVydGVkCisgKiB0byBhbiBBU04xIHN0cmluZyB0eXBlOiBkZWZhdWx0IGlzIE9DVEVUIFNUUklORy4gQWRkaXRpb25hbCBmdW5jdGlvbnMKKyAqIGNhbiBiZSBwcm92aWRlZCB0byBhZGQgcHJlZml4IGFuZCBzdWZmaXggZGF0YS4KKyAqLworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2FzbjEuaD4KKworLyogTXVzdCBiZSBsYXJnZSBlbm91Z2ggZm9yIGJpZ2dlc3QgdGFnK2xlbmd0aCAqLworI2RlZmluZSBERUZBVUxUX0FTTjFfQlVGX1NJWkUgMjAKKwordHlwZWRlZiBlbnVtIAorCXsKKwlBU04xX1NUQVRFX1NUQVJULAorCUFTTjFfU1RBVEVfUFJFX0NPUFksCisJQVNOMV9TVEFURV9IRUFERVIsCisJQVNOMV9TVEFURV9IRUFERVJfQ09QWSwKKwlBU04xX1NUQVRFX0RBVEFfQ09QWSwKKwlBU04xX1NUQVRFX1BPU1RfQ09QWSwKKwlBU04xX1NUQVRFX0RPTkUKKwl9IGFzbjFfYmlvX3N0YXRlX3Q7CisKK3R5cGVkZWYgc3RydWN0IEJJT19BU04xX0VYX0ZVTkNTX3N0CisJeworCWFzbjFfcHNfZnVuYwkqZXhfZnVuYzsKKwlhc24xX3BzX2Z1bmMJKmV4X2ZyZWVfZnVuYzsKKwl9IEJJT19BU04xX0VYX0ZVTkNTOworCit0eXBlZGVmIHN0cnVjdCBCSU9fQVNOMV9CVUZfQ1RYX3QKKwl7CisJLyogSW50ZXJuYWwgc3RhdGUgKi8KKwlhc24xX2Jpb19zdGF0ZV90IHN0YXRlOworCS8qIEludGVybmFsIGJ1ZmZlciAqLworCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKKwkvKiBTaXplIG9mIGJ1ZmZlciAqLworCWludCBidWZzaXplOworCS8qIEN1cnJlbnQgcG9zaXRpb24gaW4gYnVmZmVyICovCisJaW50IGJ1ZnBvczsKKwkvKiBDdXJyZW50IGJ1ZmZlciBsZW5ndGggKi8KKwlpbnQgYnVmbGVuOworCS8qIEFtb3VudCBvZiBkYXRhIHRvIGNvcHkgKi8KKwlpbnQgY29weWxlbjsKKwkvKiBDbGFzcyBhbmQgdGFnIHRvIHVzZSAqLworCWludCBhc24xX2NsYXNzLCBhc24xX3RhZzsKKwlhc24xX3BzX2Z1bmMgKnByZWZpeCwgKnByZWZpeF9mcmVlLCAqc3VmZml4LCAqc3VmZml4X2ZyZWU7CisJLyogRXh0cmEgYnVmZmVyIGZvciBwcmVmaXggYW5kIHN1ZmZpeCBkYXRhICovCisJdW5zaWduZWQgY2hhciAqZXhfYnVmOworCWludCBleF9sZW47CisJaW50IGV4X3BvczsKKwl2b2lkICpleF9hcmc7CisJfSBCSU9fQVNOMV9CVUZfQ1RYOworCisKK3N0YXRpYyBpbnQgYXNuMV9iaW9fd3JpdGUoQklPICpoLCBjb25zdCBjaGFyICpidWYsaW50IG51bSk7CitzdGF0aWMgaW50IGFzbjFfYmlvX3JlYWQoQklPICpoLCBjaGFyICpidWYsIGludCBzaXplKTsKK3N0YXRpYyBpbnQgYXNuMV9iaW9fcHV0cyhCSU8gKmgsIGNvbnN0IGNoYXIgKnN0cik7CitzdGF0aWMgaW50IGFzbjFfYmlvX2dldHMoQklPICpoLCBjaGFyICpzdHIsIGludCBzaXplKTsKK3N0YXRpYyBsb25nIGFzbjFfYmlvX2N0cmwoQklPICpoLCBpbnQgY21kLCBsb25nIGFyZzEsIHZvaWQgKmFyZzIpOworc3RhdGljIGludCBhc24xX2Jpb19uZXcoQklPICpoKTsKK3N0YXRpYyBpbnQgYXNuMV9iaW9fZnJlZShCSU8gKmRhdGEpOworc3RhdGljIGxvbmcgYXNuMV9iaW9fY2FsbGJhY2tfY3RybChCSU8gKmgsIGludCBjbWQsIGJpb19pbmZvX2NiICpmcCk7CisKK3N0YXRpYyBpbnQgYXNuMV9iaW9faW5pdChCSU9fQVNOMV9CVUZfQ1RYICpjdHgsIGludCBzaXplKTsKK3N0YXRpYyBpbnQgYXNuMV9iaW9fZmx1c2hfZXgoQklPICpiLCBCSU9fQVNOMV9CVUZfQ1RYICpjdHgsCisJCQkJYXNuMV9wc19mdW5jICpjbGVhbnVwLCBhc24xX2Jpb19zdGF0ZV90IG5leHQpOworc3RhdGljIGludCBhc24xX2Jpb19zZXR1cF9leChCSU8gKmIsIEJJT19BU04xX0JVRl9DVFggKmN0eCwKKwkJCQlhc24xX3BzX2Z1bmMgKnNldHVwLCAKKwkJCQlhc24xX2Jpb19zdGF0ZV90IGV4X3N0YXRlLAorCQkJCWFzbjFfYmlvX3N0YXRlX3Qgb3RoZXJfc3RhdGUpOworCitzdGF0aWMgQklPX01FVEhPRCBtZXRob2RzX2FzbjE9CisJeworCUJJT19UWVBFX0FTTjEsCisJImFzbjEiLAorCWFzbjFfYmlvX3dyaXRlLAorCWFzbjFfYmlvX3JlYWQsCisJYXNuMV9iaW9fcHV0cywKKwlhc24xX2Jpb19nZXRzLAorCWFzbjFfYmlvX2N0cmwsCisJYXNuMV9iaW9fbmV3LAorCWFzbjFfYmlvX2ZyZWUsCisJYXNuMV9iaW9fY2FsbGJhY2tfY3RybCwKKwl9OworCitCSU9fTUVUSE9EICpCSU9fZl9hc24xKHZvaWQpCisJeworCXJldHVybigmbWV0aG9kc19hc24xKTsKKwl9CisKKworc3RhdGljIGludCBhc24xX2Jpb19uZXcoQklPICpiKQorCXsKKwlCSU9fQVNOMV9CVUZfQ1RYICpjdHg7CisJY3R4ID0gT1BFTlNTTF9tYWxsb2Moc2l6ZW9mKEJJT19BU04xX0JVRl9DVFgpKTsKKwlpZiAoIWN0eCkKKwkJcmV0dXJuIDA7CisJaWYgKCFhc24xX2Jpb19pbml0KGN0eCwgREVGQVVMVF9BU04xX0JVRl9TSVpFKSkKKwkJcmV0dXJuIDA7CisJYi0+aW5pdCA9IDE7CisJYi0+cHRyID0gKGNoYXIgKiljdHg7CisJYi0+ZmxhZ3MgPSAwOworCXJldHVybiAxOworCX0KKworc3RhdGljIGludCBhc24xX2Jpb19pbml0KEJJT19BU04xX0JVRl9DVFggKmN0eCwgaW50IHNpemUpCisJeworCWN0eC0+YnVmID0gT1BFTlNTTF9tYWxsb2Moc2l6ZSk7CisJaWYgKCFjdHgtPmJ1ZikKKwkJcmV0dXJuIDA7CisJY3R4LT5idWZzaXplID0gc2l6ZTsKKwljdHgtPmJ1ZnBvcyA9IDA7CisJY3R4LT5idWZsZW4gPSAwOworCWN0eC0+Y29weWxlbiA9IDA7CisJY3R4LT5hc24xX2NsYXNzID0gVl9BU04xX1VOSVZFUlNBTDsKKwljdHgtPmFzbjFfdGFnID0gVl9BU04xX09DVEVUX1NUUklORzsKKwljdHgtPmV4X2J1ZiA9IDA7CisJY3R4LT5leF9wb3MgPSAwOworCWN0eC0+ZXhfbGVuID0gMDsKKwljdHgtPnN0YXRlID0gQVNOMV9TVEFURV9TVEFSVDsKKwlyZXR1cm4gMTsKKwl9CisKK3N0YXRpYyBpbnQgYXNuMV9iaW9fZnJlZShCSU8gKmIpCisJeworCUJJT19BU04xX0JVRl9DVFggKmN0eDsKKwljdHggPSAoQklPX0FTTjFfQlVGX0NUWCAqKSBiLT5wdHI7CisJaWYgKGN0eCA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKwlpZiAoY3R4LT5idWYpCisJCU9QRU5TU0xfZnJlZShjdHgtPmJ1Zik7CisJT1BFTlNTTF9mcmVlKGN0eCk7CisJYi0+aW5pdCA9IDA7CisJYi0+cHRyID0gTlVMTDsKKwliLT5mbGFncyA9IDA7CisJcmV0dXJuIDE7CisJfQorCitzdGF0aWMgaW50IGFzbjFfYmlvX3dyaXRlKEJJTyAqYiwgY29uc3QgY2hhciAqaW4gLCBpbnQgaW5sKQorCXsKKwlCSU9fQVNOMV9CVUZfQ1RYICpjdHg7CisJaW50IHdybWF4LCB3cmxlbiwgcmV0OworCXVuc2lnbmVkIGNoYXIgKnA7CisJaWYgKCFpbiB8fCAoaW5sIDwgMCkgfHwgKGItPm5leHRfYmlvID09IE5VTEwpKQorCQlyZXR1cm4gMDsKKwljdHggPSAoQklPX0FTTjFfQlVGX0NUWCAqKSBiLT5wdHI7CisJaWYgKGN0eCA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCXdybGVuID0gMDsKKwlyZXQgPSAtMTsKKworCWZvcig7OykKKwkJeworCQlzd2l0Y2ggKGN0eC0+c3RhdGUpCisJCQl7CisKKwkJCS8qIFNldHVwIHByZWZpeCBkYXRhLCBjYWxsIGl0ICovCisJCQljYXNlIEFTTjFfU1RBVEVfU1RBUlQ6CisJCQlpZiAoIWFzbjFfYmlvX3NldHVwX2V4KGIsIGN0eCwgY3R4LT5wcmVmaXgsCisJCQkJQVNOMV9TVEFURV9QUkVfQ09QWSwgQVNOMV9TVEFURV9IRUFERVIpKQorCQkJCXJldHVybiAwOworCQkJYnJlYWs7CisKKwkJCS8qIENvcHkgYW55IHByZSBkYXRhIGZpcnN0ICovCisJCQljYXNlIEFTTjFfU1RBVEVfUFJFX0NPUFk6CisKKwkJCXJldCA9IGFzbjFfYmlvX2ZsdXNoX2V4KGIsIGN0eCwgY3R4LT5wcmVmaXhfZnJlZSwKKwkJCQkJCQlBU04xX1NUQVRFX0hFQURFUik7CisKKwkJCWlmIChyZXQgPD0gMCkKKwkJCQlnb3RvIGRvbmU7CisKKwkJCWJyZWFrOworCisJCQljYXNlIEFTTjFfU1RBVEVfSEVBREVSOgorCQkJY3R4LT5idWZsZW4gPQorCQkJCUFTTjFfb2JqZWN0X3NpemUoMCwgaW5sLCBjdHgtPmFzbjFfdGFnKSAtIGlubDsKKwkJCU9QRU5TU0xfYXNzZXJ0KGN0eC0+YnVmbGVuIDw9IGN0eC0+YnVmc2l6ZSk7CisJCQlwID0gY3R4LT5idWY7CisJCQlBU04xX3B1dF9vYmplY3QoJnAsIDAsIGlubCwKKwkJCQkJY3R4LT5hc24xX3RhZywgY3R4LT5hc24xX2NsYXNzKTsKKwkJCWN0eC0+Y29weWxlbiA9IGlubDsKKwkJCWN0eC0+c3RhdGUgPSBBU04xX1NUQVRFX0hFQURFUl9DT1BZOworCisJCQlicmVhazsKKworCQkJY2FzZSBBU04xX1NUQVRFX0hFQURFUl9DT1BZOgkKKwkJCXJldCA9IEJJT193cml0ZShiLT5uZXh0X2JpbywKKwkJCQkJY3R4LT5idWYgKyBjdHgtPmJ1ZnBvcywgY3R4LT5idWZsZW4pOworCQkJaWYgKHJldCA8PSAwKQorCQkJCWdvdG8gZG9uZTsKKworCQkJY3R4LT5idWZsZW4gLT0gcmV0OworCQkJaWYgKGN0eC0+YnVmbGVuKQorCQkJCWN0eC0+YnVmcG9zICs9IHJldDsKKwkJCWVsc2UKKwkJCQl7CisJCQkJY3R4LT5idWZwb3MgPSAwOworCQkJCWN0eC0+c3RhdGUgPSBBU04xX1NUQVRFX0RBVEFfQ09QWTsKKwkJCQl9CisKKwkJCWJyZWFrOworCisJCQljYXNlIEFTTjFfU1RBVEVfREFUQV9DT1BZOgorCisJCQlpZiAoaW5sID4gY3R4LT5jb3B5bGVuKQorCQkJCXdybWF4ID0gY3R4LT5jb3B5bGVuOworCQkJZWxzZQorCQkJCXdybWF4ID0gaW5sOworCQkJcmV0ID0gQklPX3dyaXRlKGItPm5leHRfYmlvLCBpbiwgd3JtYXgpOworCQkJaWYgKHJldCA8PSAwKQorCQkJCWJyZWFrOworCQkJd3JsZW4gKz0gcmV0OworCQkJY3R4LT5jb3B5bGVuIC09IHJldDsKKwkJCWluICs9IHJldDsKKwkJCWlubCAtPSByZXQ7CisKKwkJCWlmIChjdHgtPmNvcHlsZW4gPT0gMCkKKwkJCQljdHgtPnN0YXRlID0gQVNOMV9TVEFURV9IRUFERVI7CisKKwkJCWlmIChpbmwgPT0gMCkKKwkJCQlnb3RvIGRvbmU7CisKKwkJCWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJQklPX2NsZWFyX3JldHJ5X2ZsYWdzKGIpOworCQkJcmV0dXJuIDA7CisKKwkJCX0KKworCQl9CisKKwlkb25lOgorCUJJT19jbGVhcl9yZXRyeV9mbGFncyhiKTsKKwlCSU9fY29weV9uZXh0X3JldHJ5KGIpOworCisJcmV0dXJuICh3cmxlbiA+IDApID8gd3JsZW4gOiByZXQ7CisKKwl9CisKK3N0YXRpYyBpbnQgYXNuMV9iaW9fZmx1c2hfZXgoQklPICpiLCBCSU9fQVNOMV9CVUZfQ1RYICpjdHgsCisJCQkJYXNuMV9wc19mdW5jICpjbGVhbnVwLCBhc24xX2Jpb19zdGF0ZV90IG5leHQpCisJeworCWludCByZXQ7CisJaWYgKGN0eC0+ZXhfbGVuIDw9IDApCisJCXJldHVybiAxOworCWZvcig7OykKKwkJeworCQlyZXQgPSBCSU9fd3JpdGUoYi0+bmV4dF9iaW8sIGN0eC0+ZXhfYnVmICsgY3R4LT5leF9wb3MsCisJCQkJCQkJCWN0eC0+ZXhfbGVuKTsKKwkJaWYgKHJldCA8PSAwKQorCQkJYnJlYWs7CisJCWN0eC0+ZXhfbGVuIC09IHJldDsKKwkJaWYgKGN0eC0+ZXhfbGVuID4gMCkKKwkJCWN0eC0+ZXhfcG9zICs9IHJldDsKKwkJZWxzZQorCQkJeworCQkJaWYoY2xlYW51cCkKKwkJCQljbGVhbnVwKGIsICZjdHgtPmV4X2J1ZiwgJmN0eC0+ZXhfbGVuLAorCQkJCQkJCQkmY3R4LT5leF9hcmcpOworCQkJY3R4LT5zdGF0ZSA9IG5leHQ7CisJCQljdHgtPmV4X3BvcyA9IDA7CisJCQlicmVhazsKKwkJCX0KKwkJfQorCXJldHVybiByZXQ7CisJfQorCitzdGF0aWMgaW50IGFzbjFfYmlvX3NldHVwX2V4KEJJTyAqYiwgQklPX0FTTjFfQlVGX0NUWCAqY3R4LAorCQkJCWFzbjFfcHNfZnVuYyAqc2V0dXAsIAorCQkJCWFzbjFfYmlvX3N0YXRlX3QgZXhfc3RhdGUsCisJCQkJYXNuMV9iaW9fc3RhdGVfdCBvdGhlcl9zdGF0ZSkKKwl7CisJaWYgKHNldHVwICYmICFzZXR1cChiLCAmY3R4LT5leF9idWYsICZjdHgtPmV4X2xlbiwgJmN0eC0+ZXhfYXJnKSkKKwkJeworCQlCSU9fY2xlYXJfcmV0cnlfZmxhZ3MoYik7CisJCXJldHVybiAwOworCQl9CisJaWYgKGN0eC0+ZXhfbGVuID4gMCkKKwkJY3R4LT5zdGF0ZSA9IGV4X3N0YXRlOworCWVsc2UKKwkJY3R4LT5zdGF0ZSA9IG90aGVyX3N0YXRlOworCXJldHVybiAxOworCX0KKworc3RhdGljIGludCBhc24xX2Jpb19yZWFkKEJJTyAqYiwgY2hhciAqaW4gLCBpbnQgaW5sKQorCXsKKwlpZiAoIWItPm5leHRfYmlvKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gQklPX3JlYWQoYi0+bmV4dF9iaW8sIGluICwgaW5sKTsKKwl9CisKK3N0YXRpYyBpbnQgYXNuMV9iaW9fcHV0cyhCSU8gKmIsIGNvbnN0IGNoYXIgKnN0cikKKwl7CisJcmV0dXJuIGFzbjFfYmlvX3dyaXRlKGIsIHN0ciwgc3RybGVuKHN0cikpOworCX0KKworc3RhdGljIGludCBhc24xX2Jpb19nZXRzKEJJTyAqYiwgY2hhciAqc3RyLCBpbnQgc2l6ZSkKKwl7CisJaWYgKCFiLT5uZXh0X2JpbykKKwkJcmV0dXJuIDA7CisJcmV0dXJuIEJJT19nZXRzKGItPm5leHRfYmlvLCBzdHIgLCBzaXplKTsKKwl9CisKK3N0YXRpYyBsb25nIGFzbjFfYmlvX2NhbGxiYWNrX2N0cmwoQklPICpiLCBpbnQgY21kLCBiaW9faW5mb19jYiAqZnApCisJeworCWlmIChiLT5uZXh0X2JpbyA9PSBOVUxMKSByZXR1cm4oMCk7CisJcmV0dXJuIEJJT19jYWxsYmFja19jdHJsKGItPm5leHRfYmlvLGNtZCxmcCk7CisJfQorCitzdGF0aWMgbG9uZyBhc24xX2Jpb19jdHJsKEJJTyAqYiwgaW50IGNtZCwgbG9uZyBhcmcxLCB2b2lkICphcmcyKQorCXsKKwlCSU9fQVNOMV9CVUZfQ1RYICpjdHg7CisJQklPX0FTTjFfRVhfRlVOQ1MgKmV4X2Z1bmM7CisJbG9uZyByZXQgPSAxOworCWN0eCA9IChCSU9fQVNOMV9CVUZfQ1RYICopIGItPnB0cjsKKwlpZiAoY3R4ID09IE5VTEwpCisJCXJldHVybiAwOworCXN3aXRjaChjbWQpCisJCXsKKworCQljYXNlIEJJT19DX1NFVF9QUkVGSVg6CisJCWV4X2Z1bmMgPSBhcmcyOworCQljdHgtPnByZWZpeCAgPSBleF9mdW5jLT5leF9mdW5jOworCQljdHgtPnByZWZpeF9mcmVlICA9IGV4X2Z1bmMtPmV4X2ZyZWVfZnVuYzsKKwkJYnJlYWs7CisKKwkJY2FzZSBCSU9fQ19HRVRfUFJFRklYOgorCQlleF9mdW5jID0gYXJnMjsKKwkJZXhfZnVuYy0+ZXhfZnVuYyA9IGN0eC0+cHJlZml4OworCQlleF9mdW5jLT5leF9mcmVlX2Z1bmMgPSBjdHgtPnByZWZpeF9mcmVlOworCQlicmVhazsKKworCQljYXNlIEJJT19DX1NFVF9TVUZGSVg6CisJCWV4X2Z1bmMgPSBhcmcyOworCQljdHgtPnN1ZmZpeCAgPSBleF9mdW5jLT5leF9mdW5jOworCQljdHgtPnN1ZmZpeF9mcmVlICA9IGV4X2Z1bmMtPmV4X2ZyZWVfZnVuYzsKKwkJYnJlYWs7CisKKwkJY2FzZSBCSU9fQ19HRVRfU1VGRklYOgorCQlleF9mdW5jID0gYXJnMjsKKwkJZXhfZnVuYy0+ZXhfZnVuYyA9IGN0eC0+c3VmZml4OworCQlleF9mdW5jLT5leF9mcmVlX2Z1bmMgPSBjdHgtPnN1ZmZpeF9mcmVlOworCQlicmVhazsKKworCQljYXNlIEJJT19DX1NFVF9FWF9BUkc6CisJCWN0eC0+ZXhfYXJnID0gYXJnMjsKKwkJYnJlYWs7CisKKwkJY2FzZSBCSU9fQ19HRVRfRVhfQVJHOgorCQkqKHZvaWQgKiopYXJnMiA9IGN0eC0+ZXhfYXJnOworCQlicmVhazsKKworCQljYXNlIEJJT19DVFJMX0ZMVVNIOgorCQlpZiAoIWItPm5leHRfYmlvKQorCQkJcmV0dXJuIDA7CisKKwkJLyogQ2FsbCBwb3N0IGZ1bmN0aW9uIGlmIHBvc3NpYmxlICovCisJCWlmIChjdHgtPnN0YXRlID09IEFTTjFfU1RBVEVfSEVBREVSKQorCQkJeworCQkJaWYgKCFhc24xX2Jpb19zZXR1cF9leChiLCBjdHgsIGN0eC0+c3VmZml4LAorCQkJCUFTTjFfU1RBVEVfUE9TVF9DT1BZLCBBU04xX1NUQVRFX0RPTkUpKQorCQkJCXJldHVybiAwOworCQkJfQorCisJCWlmIChjdHgtPnN0YXRlID09IEFTTjFfU1RBVEVfUE9TVF9DT1BZKQorCQkJeworCQkJcmV0ID0gYXNuMV9iaW9fZmx1c2hfZXgoYiwgY3R4LCBjdHgtPnN1ZmZpeF9mcmVlLAorCQkJCQkJCUFTTjFfU1RBVEVfRE9ORSk7CisJCQlpZiAocmV0IDw9IDApCisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKworCQlpZiAoY3R4LT5zdGF0ZSA9PSBBU04xX1NUQVRFX0RPTkUpCisJCQlyZXR1cm4gQklPX2N0cmwoYi0+bmV4dF9iaW8sIGNtZCwgYXJnMSwgYXJnMik7CisJCWVsc2UKKwkJCXsKKwkJCUJJT19jbGVhcl9yZXRyeV9mbGFncyhiKTsKKwkJCXJldHVybiAwOworCQkJfQorCQlicmVhazsKKworCisJCWRlZmF1bHQ6CisJCWlmICghYi0+bmV4dF9iaW8pCisJCQlyZXR1cm4gMDsKKwkJcmV0dXJuIEJJT19jdHJsKGItPm5leHRfYmlvLCBjbWQsIGFyZzEsIGFyZzIpOworCisJCX0KKworCXJldHVybiByZXQ7CisJfQorCitzdGF0aWMgaW50IGFzbjFfYmlvX3NldF9leChCSU8gKmIsIGludCBjbWQsCisJCWFzbjFfcHNfZnVuYyAqZXhfZnVuYywgYXNuMV9wc19mdW5jICpleF9mcmVlX2Z1bmMpCisJeworCUJJT19BU04xX0VYX0ZVTkNTIGV4dG1wOworCWV4dG1wLmV4X2Z1bmMgPSBleF9mdW5jOworCWV4dG1wLmV4X2ZyZWVfZnVuYyA9IGV4X2ZyZWVfZnVuYzsKKwlyZXR1cm4gQklPX2N0cmwoYiwgY21kLCAwLCAmZXh0bXApOworCX0KKworc3RhdGljIGludCBhc24xX2Jpb19nZXRfZXgoQklPICpiLCBpbnQgY21kLAorCQlhc24xX3BzX2Z1bmMgKipleF9mdW5jLCBhc24xX3BzX2Z1bmMgKipleF9mcmVlX2Z1bmMpCisJeworCUJJT19BU04xX0VYX0ZVTkNTIGV4dG1wOworCWludCByZXQ7CisJcmV0ID0gQklPX2N0cmwoYiwgY21kLCAwLCAmZXh0bXApOworCWlmIChyZXQgPiAwKQorCQl7CisJCSpleF9mdW5jID0gZXh0bXAuZXhfZnVuYzsKKwkJKmV4X2ZyZWVfZnVuYyA9IGV4dG1wLmV4X2ZyZWVfZnVuYzsKKwkJfQorCXJldHVybiByZXQ7CisJfQorCitpbnQgQklPX2FzbjFfc2V0X3ByZWZpeChCSU8gKmIsIGFzbjFfcHNfZnVuYyAqcHJlZml4LCBhc24xX3BzX2Z1bmMgKnByZWZpeF9mcmVlKQorCXsKKwlyZXR1cm4gYXNuMV9iaW9fc2V0X2V4KGIsIEJJT19DX1NFVF9QUkVGSVgsIHByZWZpeCwgcHJlZml4X2ZyZWUpOworCX0KKworaW50IEJJT19hc24xX2dldF9wcmVmaXgoQklPICpiLCBhc24xX3BzX2Z1bmMgKipwcHJlZml4LCBhc24xX3BzX2Z1bmMgKipwcHJlZml4X2ZyZWUpCisJeworCXJldHVybiBhc24xX2Jpb19nZXRfZXgoYiwgQklPX0NfR0VUX1BSRUZJWCwgcHByZWZpeCwgcHByZWZpeF9mcmVlKTsKKwl9CisKK2ludCBCSU9fYXNuMV9zZXRfc3VmZml4KEJJTyAqYiwgYXNuMV9wc19mdW5jICpzdWZmaXgsIGFzbjFfcHNfZnVuYyAqc3VmZml4X2ZyZWUpCisJeworCXJldHVybiBhc24xX2Jpb19zZXRfZXgoYiwgQklPX0NfU0VUX1NVRkZJWCwgc3VmZml4LCBzdWZmaXhfZnJlZSk7CisJfQorCitpbnQgQklPX2FzbjFfZ2V0X3N1ZmZpeChCSU8gKmIsIGFzbjFfcHNfZnVuYyAqKnBzdWZmaXgsIGFzbjFfcHNfZnVuYyAqKnBzdWZmaXhfZnJlZSkKKwl7CisJcmV0dXJuIGFzbjFfYmlvX2dldF9leChiLCBCSU9fQ19HRVRfU1VGRklYLCBwc3VmZml4LCBwc3VmZml4X2ZyZWUpOworCX0KZGlmZiAtLWdpdCBhL2NyeXB0by9hc24xL2Jpb19uZGVmLmMgYi9jcnlwdG8vYXNuMS9iaW9fbmRlZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3MDM4OWIKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vYXNuMS9iaW9fbmRlZi5jCkBAIC0wLDAgKzEsMjQ2IEBACisvKiBiaW9fbmRlZi5jICovCisvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKyAqIHByb2plY3QuCisgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKGMpIDIwMDggVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisgKgorICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgorICoKKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorICoKKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKyAqICAgIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICovCisKKyNpbmNsdWRlIDxvcGVuc3NsL2FzbjEuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2FzbjF0Lmg+CisjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorCisjaWZuZGVmIE9QRU5TU0xfU1lTTkFNRV9ORVRXQVJFCisjaW5jbHVkZSA8bWVtb3J5Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRpby5oPgorCisvKiBFeHBlcmltZW50YWwgTkRFRiBBU04xIEJJTyBzdXBwb3J0IHJvdXRpbmVzICovCisKKy8qIFRoZSB1c2FnZSBpcyBxdWl0ZSBzaW1wbGUsIGluaXRpYWxpemUgYW4gQVNOMSBzdHJ1Y3R1cmUsCisgKiBnZXQgYSBCSU8gZnJvbSBpdCB0aGVuIGFueSBkYXRhIHdyaXR0ZW4gdGhyb3VnaCB0aGUgQklPCisgKiB3aWxsIGVuZCB1cCB0cmFuc2xhdGVkIHRvIGFwcHJvcHRpYXRlIGZvcm1hdCBvbiB0aGUgZmx5LgorICogVGhlIGRhdGEgaXMgc3RyZWFtZWQgb3V0IGFuZCBkb2VzICpub3QqIG5lZWQgdG8gYmUKKyAqIGFsbCBoZWxkIGluIG1lbW9yeSBhdCBvbmNlLgorICoKKyAqIFdoZW4gdGhlIEJJTyBpcyBmbHVzaGVkIHRoZSBvdXRwdXQgaXMgZmluYWxpemVkIGFuZCBhbnkKKyAqIHNpZ25hdHVyZXMgZXRjIHdyaXR0ZW4gb3V0LgorICoKKyAqIFRoZSBCSU8gaXMgYSAncHJvcGVyJyBCSU8gYW5kIGNhbiBoYW5kbGUgbm9uIGJsb2NraW5nIEkvTworICogY29ycmVjdGx5LgorICoKKyAqIFRoZSB1c2FnZSBpcyBzaW1wbGUuIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyAqbm90Ki4uLgorICovCisKKy8qIEJJTyBzdXBwb3J0IGRhdGEgc3RvcmVkIGluIHRoZSBBU04xIEJJTyBleF9hcmcgKi8KKwordHlwZWRlZiBzdHJ1Y3QgbmRlZl9hdXhfc3QKKwl7CisJLyogQVNOMSBzdHJ1Y3R1cmUgdGhpcyBCSU8gcmVmZXJzIHRvICovCisJQVNOMV9WQUxVRSAqdmFsOworCWNvbnN0IEFTTjFfSVRFTSAqaXQ7CisJLyogVG9wIG9mIHRoZSBCSU8gY2hhaW4gKi8KKwlCSU8gKm5kZWZfYmlvOworCS8qIE91dHB1dCBCSU8gKi8KKwlCSU8gKm91dDsKKwkvKiBCb3VuZGFyeSB3aGVyZSBjb250ZW50IGlzIGluc2VydGVkICovCisJdW5zaWduZWQgY2hhciAqKmJvdW5kYXJ5OworCS8qIERFUiBidWZmZXIgc3RhcnQgKi8KKwl1bnNpZ25lZCBjaGFyICpkZXJidWY7CisJfSBOREVGX1NVUFBPUlQ7CisKK3N0YXRpYyBpbnQgbmRlZl9wcmVmaXgoQklPICpiLCB1bnNpZ25lZCBjaGFyICoqcGJ1ZiwgaW50ICpwbGVuLCB2b2lkICpwYXJnKTsKK3N0YXRpYyBpbnQgbmRlZl9wcmVmaXhfZnJlZShCSU8gKmIsIHVuc2lnbmVkIGNoYXIgKipwYnVmLCBpbnQgKnBsZW4sIHZvaWQgKnBhcmcpOworc3RhdGljIGludCBuZGVmX3N1ZmZpeChCSU8gKmIsIHVuc2lnbmVkIGNoYXIgKipwYnVmLCBpbnQgKnBsZW4sIHZvaWQgKnBhcmcpOworc3RhdGljIGludCBuZGVmX3N1ZmZpeF9mcmVlKEJJTyAqYiwgdW5zaWduZWQgY2hhciAqKnBidWYsIGludCAqcGxlbiwgdm9pZCAqcGFyZyk7CisKK0JJTyAqQklPX25ld19OREVGKEJJTyAqb3V0LCBBU04xX1ZBTFVFICp2YWwsIGNvbnN0IEFTTjFfSVRFTSAqaXQpCisJeworCU5ERUZfU1VQUE9SVCAqbmRlZl9hdXggPSBOVUxMOworCUJJTyAqYXNuX2JpbyA9IE5VTEw7CisJY29uc3QgQVNOMV9BVVggKmF1eCA9IGl0LT5mdW5jczsKKwlBU04xX1NUUkVBTV9BUkcgc2FyZzsKKworCWlmICghYXV4IHx8ICFhdXgtPmFzbjFfY2IpCisJCXsKKwkJQVNOMWVycihBU04xX0ZfQklPX05FV19OREVGLCBBU04xX1JfU1RSRUFNSU5HX05PVF9TVVBQT1JURUQpOworCQlyZXR1cm4gTlVMTDsKKwkJfQorCW5kZWZfYXV4ID0gT1BFTlNTTF9tYWxsb2Moc2l6ZW9mKE5ERUZfU1VQUE9SVCkpOworCWFzbl9iaW8gPSBCSU9fbmV3KEJJT19mX2FzbjEoKSk7CisKKwkvKiBBU04xIGJpbyBuZWVkcyB0byBiZSBuZXh0IHRvIG91dHB1dCBCSU8gKi8KKworCW91dCA9IEJJT19wdXNoKGFzbl9iaW8sIG91dCk7CisKKwlpZiAoIW5kZWZfYXV4IHx8ICFhc25fYmlvIHx8ICFvdXQpCisJCWdvdG8gZXJyOworCisJQklPX2FzbjFfc2V0X3ByZWZpeChhc25fYmlvLCBuZGVmX3ByZWZpeCwgbmRlZl9wcmVmaXhfZnJlZSk7CisJQklPX2FzbjFfc2V0X3N1ZmZpeChhc25fYmlvLCBuZGVmX3N1ZmZpeCwgbmRlZl9zdWZmaXhfZnJlZSk7CisKKwkvKiBOb3cgbGV0IGNhbGxiYWNrIHByZXBlbmQgYW55IGRpZ2VzdCwgY2lwaGVyIGV0YyBCSU9zCisJICogQVNOMSBzdHJ1Y3R1cmUgbmVlZHMuCisJICovCisKKwlzYXJnLm91dCA9IG91dDsKKwlzYXJnLm5kZWZfYmlvID0gTlVMTDsKKwlzYXJnLmJvdW5kYXJ5ID0gTlVMTDsKKworCWlmIChhdXgtPmFzbjFfY2IoQVNOMV9PUF9TVFJFQU1fUFJFLCAmdmFsLCBpdCwgJnNhcmcpIDw9IDApCisJCWdvdG8gZXJyOworCisJbmRlZl9hdXgtPnZhbCA9IHZhbDsKKwluZGVmX2F1eC0+aXQgPSBpdDsKKwluZGVmX2F1eC0+bmRlZl9iaW8gPSBzYXJnLm5kZWZfYmlvOworCW5kZWZfYXV4LT5ib3VuZGFyeSA9IHNhcmcuYm91bmRhcnk7CisJbmRlZl9hdXgtPm91dCA9IG91dDsKKworCUJJT19jdHJsKGFzbl9iaW8sIEJJT19DX1NFVF9FWF9BUkcsIDAsIG5kZWZfYXV4KTsKKworCXJldHVybiBzYXJnLm5kZWZfYmlvOworCisJZXJyOgorCWlmIChhc25fYmlvKQorCQlCSU9fZnJlZShhc25fYmlvKTsKKwlpZiAobmRlZl9hdXgpCisJCU9QRU5TU0xfZnJlZShuZGVmX2F1eCk7CisJcmV0dXJuIE5VTEw7CisJfQorCitzdGF0aWMgaW50IG5kZWZfcHJlZml4KEJJTyAqYiwgdW5zaWduZWQgY2hhciAqKnBidWYsIGludCAqcGxlbiwgdm9pZCAqcGFyZykKKwl7CisJTkRFRl9TVVBQT1JUICpuZGVmX2F1eDsKKwl1bnNpZ25lZCBjaGFyICpwOworCWludCBkZXJsZW47CisKKwlpZiAoIXBhcmcpCisJCXJldHVybiAwOworCisJbmRlZl9hdXggPSAqKE5ERUZfU1VQUE9SVCAqKilwYXJnOworCisJZGVybGVuID0gQVNOMV9pdGVtX25kZWZfaTJkKG5kZWZfYXV4LT52YWwsIE5VTEwsIG5kZWZfYXV4LT5pdCk7CisJcCA9IE9QRU5TU0xfbWFsbG9jKGRlcmxlbik7CisJbmRlZl9hdXgtPmRlcmJ1ZiA9IHA7CisJKnBidWYgPSBwOworCWRlcmxlbiA9IEFTTjFfaXRlbV9uZGVmX2kyZChuZGVmX2F1eC0+dmFsLCAmcCwgbmRlZl9hdXgtPml0KTsKKworCWlmICghKm5kZWZfYXV4LT5ib3VuZGFyeSkKKwkJcmV0dXJuIDA7CisKKwkqcGxlbiA9ICpuZGVmX2F1eC0+Ym91bmRhcnkgLSAqcGJ1ZjsKKworCXJldHVybiAxOworCX0KKworc3RhdGljIGludCBuZGVmX3ByZWZpeF9mcmVlKEJJTyAqYiwgdW5zaWduZWQgY2hhciAqKnBidWYsIGludCAqcGxlbiwgdm9pZCAqcGFyZykKKwl7CisJTkRFRl9TVVBQT1JUICpuZGVmX2F1eDsKKworCWlmICghcGFyZykKKwkJcmV0dXJuIDA7CisKKwluZGVmX2F1eCA9ICooTkRFRl9TVVBQT1JUICoqKXBhcmc7CisKKwlpZiAobmRlZl9hdXgtPmRlcmJ1ZikKKwkJT1BFTlNTTF9mcmVlKG5kZWZfYXV4LT5kZXJidWYpOworCisJbmRlZl9hdXgtPmRlcmJ1ZiA9IE5VTEw7CisJKnBidWYgPSBOVUxMOworCSpwbGVuID0gMDsKKwlyZXR1cm4gMTsKKwl9CisKK3N0YXRpYyBpbnQgbmRlZl9zdWZmaXhfZnJlZShCSU8gKmIsIHVuc2lnbmVkIGNoYXIgKipwYnVmLCBpbnQgKnBsZW4sIHZvaWQgKnBhcmcpCisJeworCU5ERUZfU1VQUE9SVCAqKnBuZGVmX2F1eCA9IChOREVGX1NVUFBPUlQgKiopcGFyZzsKKwlpZiAoIW5kZWZfcHJlZml4X2ZyZWUoYiwgcGJ1ZiwgcGxlbiwgcGFyZykpCisJCXJldHVybiAwOworCU9QRU5TU0xfZnJlZSgqcG5kZWZfYXV4KTsKKwkqcG5kZWZfYXV4ID0gTlVMTDsKKwlyZXR1cm4gMTsKKwl9CisKK3N0YXRpYyBpbnQgbmRlZl9zdWZmaXgoQklPICpiLCB1bnNpZ25lZCBjaGFyICoqcGJ1ZiwgaW50ICpwbGVuLCB2b2lkICpwYXJnKQorCXsKKwlOREVGX1NVUFBPUlQgKm5kZWZfYXV4OworCXVuc2lnbmVkIGNoYXIgKnA7CisJaW50IGRlcmxlbjsKKwljb25zdCBBU04xX0FVWCAqYXV4OworCUFTTjFfU1RSRUFNX0FSRyBzYXJnOworCisJaWYgKCFwYXJnKQorCQlyZXR1cm4gMDsKKworCW5kZWZfYXV4ID0gKihOREVGX1NVUFBPUlQgKiopcGFyZzsKKworCWF1eCA9IG5kZWZfYXV4LT5pdC0+ZnVuY3M7CisKKwkvKiBGaW5hbGl6ZSBzdHJ1Y3R1cmVzICovCisJc2FyZy5uZGVmX2JpbyA9IG5kZWZfYXV4LT5uZGVmX2JpbzsKKwlzYXJnLm91dCA9IG5kZWZfYXV4LT5vdXQ7CisJc2FyZy5ib3VuZGFyeSA9IG5kZWZfYXV4LT5ib3VuZGFyeTsKKwlpZiAoYXV4LT5hc24xX2NiKEFTTjFfT1BfU1RSRUFNX1BPU1QsCisJCQkJJm5kZWZfYXV4LT52YWwsIG5kZWZfYXV4LT5pdCwgJnNhcmcpIDw9IDApCisJCXJldHVybiAwOworCisJZGVybGVuID0gQVNOMV9pdGVtX25kZWZfaTJkKG5kZWZfYXV4LT52YWwsIE5VTEwsIG5kZWZfYXV4LT5pdCk7CisJcCA9IE9QRU5TU0xfbWFsbG9jKGRlcmxlbik7CisJbmRlZl9hdXgtPmRlcmJ1ZiA9IHA7CisJKnBidWYgPSBwOworCWRlcmxlbiA9IEFTTjFfaXRlbV9uZGVmX2kyZChuZGVmX2F1eC0+dmFsLCAmcCwgbmRlZl9hdXgtPml0KTsKKworCWlmICghKm5kZWZfYXV4LT5ib3VuZGFyeSkKKwkJcmV0dXJuIDA7CisJKnBidWYgPSAqbmRlZl9hdXgtPmJvdW5kYXJ5OworCSpwbGVuID0gZGVybGVuIC0gKCpuZGVmX2F1eC0+Ym91bmRhcnkgLSBuZGVmX2F1eC0+ZGVyYnVmKTsKKworCXJldHVybiAxOworCX0KZGlmZiAtLWdpdCBhL2NyeXB0by9hc24xL2NoYXJtYXAuaCBiL2NyeXB0by9hc24xL2NoYXJtYXAuaAppbmRleCBiZDAyMGE5Li5iNTVlNjM4IDEwMDY0NAotLS0gYS9jcnlwdG8vYXNuMS9jaGFybWFwLmgKKysrIGIvY3J5cHRvL2FzbjEvY2hhcm1hcC5oCkBAIC0yLDcgKzIsNyBAQAogICogTWFzayBvZiB2YXJpb3VzIGNoYXJhY3RlciBwcm9wZXJ0aWVzCiAgKi8KIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgY2hhcl90eXBlW10gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjaGFyX3R5cGVbXSA9IHsKICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLAogIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsCiAxMjAsIDAsIDEsNDAsIDAsIDAsIDAsMTYsMTYsMTYsIDAsMjUsMjUsMTYsMTYsMTYsCmRpZmYgLS1naXQgYS9jcnlwdG8vYXNuMS9kMmlfcHIuYyBiL2NyeXB0by9hc24xL2QyaV9wci5jCmluZGV4IDIwN2NjZGEuLjI4Mjg5NDQgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hc24xL2QyaV9wci5jCisrKyBiL2NyeXB0by9hc24xL2QyaV9wci5jCkBAIC02MSwxNiArNjEsMTIgQEAKICNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KKyNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKKyNpbmNsdWRlIDxvcGVuc3NsL2VuZ2luZS5oPgorI2VuZGlmCisjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9hc24xLmg+Ci0jaWZuZGVmIE9QRU5TU0xfTk9fUlNBCi0jaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KLSNlbmRpZgotI2lmbmRlZiBPUEVOU1NMX05PX0RTQQotI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+Ci0jZW5kaWYKLSNpZm5kZWYgT1BFTlNTTF9OT19FQwotI2luY2x1ZGUgPG9wZW5zc2wvZWMuaD4KLSNlbmRpZgorI2luY2x1ZGUgImFzbjFfbG9jbC5oIgogCiBFVlBfUEtFWSAqZDJpX1ByaXZhdGVLZXkoaW50IHR5cGUsIEVWUF9QS0VZICoqYSwgY29uc3QgdW5zaWduZWQgY2hhciAqKnBwLAogCSAgICAgbG9uZyBsZW5ndGgpCkBAIC04NSw0NyArODEsNDMgQEAKIAkJCXJldHVybihOVUxMKTsKIAkJCX0KIAkJfQotCWVsc2UJcmV0PSAqYTsKLQotCXJldC0+c2F2ZV90eXBlPXR5cGU7Ci0JcmV0LT50eXBlPUVWUF9QS0VZX3R5cGUodHlwZSk7Ci0Jc3dpdGNoIChyZXQtPnR5cGUpCisJZWxzZQogCQl7Ci0jaWZuZGVmIE9QRU5TU0xfTk9fUlNBCi0JY2FzZSBFVlBfUEtFWV9SU0E6Ci0JCWlmICgocmV0LT5wa2V5LnJzYT1kMmlfUlNBUHJpdmF0ZUtleShOVUxMLAotCQkJKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiopcHAsbGVuZ3RoKSkgPT0gTlVMTCkgLyogVE1QIFVHTFkgQ0FTVCAqLworCQlyZXQ9ICphOworI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQorCQlpZiAocmV0LT5lbmdpbmUpCiAJCQl7Ci0JCQlBU04xZXJyKEFTTjFfRl9EMklfUFJJVkFURUtFWSxFUlJfUl9BU04xX0xJQik7Ci0JCQlnb3RvIGVycjsKKwkJCUVOR0lORV9maW5pc2gocmV0LT5lbmdpbmUpOworCQkJcmV0LT5lbmdpbmUgPSBOVUxMOwogCQkJfQotCQlicmVhazsKICNlbmRpZgotI2lmbmRlZiBPUEVOU1NMX05PX0RTQQotCWNhc2UgRVZQX1BLRVlfRFNBOgotCQlpZiAoKHJldC0+cGtleS5kc2E9ZDJpX0RTQVByaXZhdGVLZXkoTlVMTCwKLQkJCShjb25zdCB1bnNpZ25lZCBjaGFyICoqKXBwLGxlbmd0aCkpID09IE5VTEwpIC8qIFRNUCBVR0xZIENBU1QgKi8KLQkJCXsKLQkJCUFTTjFlcnIoQVNOMV9GX0QySV9QUklWQVRFS0VZLEVSUl9SX0FTTjFfTElCKTsKLQkJCWdvdG8gZXJyOwotCQkJfQotCQlicmVhazsKLSNlbmRpZgotI2lmbmRlZiBPUEVOU1NMX05PX0VDCi0JY2FzZSBFVlBfUEtFWV9FQzoKLQkJaWYgKChyZXQtPnBrZXkuZWMgPSBkMmlfRUNQcml2YXRlS2V5KE5VTEwsIAotCQkJKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiopcHAsIGxlbmd0aCkpID09IE5VTEwpCi0JCQl7Ci0JCQlBU04xZXJyKEFTTjFfRl9EMklfUFJJVkFURUtFWSwgRVJSX1JfQVNOMV9MSUIpOwotCQkJZ290byBlcnI7Ci0JCQl9Ci0JCWJyZWFrOwotI2VuZGlmCi0JZGVmYXVsdDoKKwkJfQorCisJaWYgKCFFVlBfUEtFWV9zZXRfdHlwZShyZXQsIHR5cGUpKQorCQl7CiAJCUFTTjFlcnIoQVNOMV9GX0QySV9QUklWQVRFS0VZLEFTTjFfUl9VTktOT1dOX1BVQkxJQ19LRVlfVFlQRSk7CiAJCWdvdG8gZXJyOwotCQkvKiBicmVhazsgKi8KIAkJfQorCisJaWYgKCFyZXQtPmFtZXRoLT5vbGRfcHJpdl9kZWNvZGUgfHwKKwkJCSFyZXQtPmFtZXRoLT5vbGRfcHJpdl9kZWNvZGUocmV0LCBwcCwgbGVuZ3RoKSkKKwkJeworCQlpZiAocmV0LT5hbWV0aC0+cHJpdl9kZWNvZGUpIAorCQkJeworCQkJUEtDUzhfUFJJVl9LRVlfSU5GTyAqcDg9TlVMTDsKKwkJCXA4PWQyaV9QS0NTOF9QUklWX0tFWV9JTkZPKE5VTEwscHAsbGVuZ3RoKTsKKwkJCWlmICghcDgpIGdvdG8gZXJyOworCQkJRVZQX1BLRVlfZnJlZShyZXQpOworCQkJcmV0ID0gRVZQX1BLQ1M4MlBLRVkocDgpOworCQkJUEtDUzhfUFJJVl9LRVlfSU5GT19mcmVlKHA4KTsKKworCQkJfSAKKwkJZWxzZSAKKwkJCXsKKwkJCUFTTjFlcnIoQVNOMV9GX0QySV9QUklWQVRFS0VZLEVSUl9SX0FTTjFfTElCKTsKKwkJCWdvdG8gZXJyOworCQkJfQorCQl9CQogCWlmIChhICE9IE5VTEwpICgqYSk9cmV0OwogCXJldHVybihyZXQpOwogZXJyOgpAQCAtMTQ2LDggKzEzOCw3IEBACiAJICogYnkgYW5hbHl6aW5nIGl0IHdlIGNhbiBkZXRlcm1pbmUgdGhlIHBhc3NlZCBzdHJ1Y3R1cmU6IHRoaXMKIAkgKiBhc3N1bWVzIHRoZSBpbnB1dCBpcyBzdXJyb3VuZGVkIGJ5IGFuIEFTTjEgU0VRVUVOQ0UuCiAJICovCi0JaW5rZXkgPSBkMmlfQVNOMV9TRVRfT0ZfQVNOMV9UWVBFKE5VTEwsICZwLCBsZW5ndGgsIGQyaV9BU04xX1RZUEUsIAotCQkJQVNOMV9UWVBFX2ZyZWUsIFZfQVNOMV9TRVFVRU5DRSwgVl9BU04xX1VOSVZFUlNBTCk7CisJaW5rZXkgPSBkMmlfQVNOMV9TRVFVRU5DRV9BTlkoTlVMTCwgJnAsIGxlbmd0aCk7CiAJLyogU2luY2Ugd2Ugb25seSBuZWVkIHRvIGRpc2Nlcm4gInRyYWRpdGlvbmFsIGZvcm1hdCIgUlNBIGFuZCBEU0EKIAkgKiBrZXlzIHdlIGNhbiBqdXN0IGNvdW50IHRoZSBlbGVtZW50cy4KICAgICAgICAgICovCkBAIC0xNTUsNiArMTQ2LDI0IEBACiAJCWtleXR5cGUgPSBFVlBfUEtFWV9EU0E7CiAJZWxzZSBpZiAoc2tfQVNOMV9UWVBFX251bShpbmtleSkgPT0gNCkKIAkJa2V5dHlwZSA9IEVWUF9QS0VZX0VDOworCWVsc2UgaWYgKHNrX0FTTjFfVFlQRV9udW0oaW5rZXkpID09IDMpICAKKwkJeyAvKiBUaGlzIHNlZW1zIHRvIGJlIFBLQ1M4LCBub3QgdHJhZGl0aW9uYWwgZm9ybWF0ICovCisJCQlQS0NTOF9QUklWX0tFWV9JTkZPICpwOCA9IGQyaV9QS0NTOF9QUklWX0tFWV9JTkZPKE5VTEwscHAsbGVuZ3RoKTsKKwkJCUVWUF9QS0VZICpyZXQ7CisKKwkJCXNrX0FTTjFfVFlQRV9wb3BfZnJlZShpbmtleSwgQVNOMV9UWVBFX2ZyZWUpOworCQkJaWYgKCFwOCkgCisJCQkJeworCQkJCUFTTjFlcnIoQVNOMV9GX0QySV9BVVRPUFJJVkFURUtFWSxBU04xX1JfVU5TVVBQT1JURURfUFVCTElDX0tFWV9UWVBFKTsKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCQl9CisJCQlyZXQgPSBFVlBfUEtDUzgyUEtFWShwOCk7CisJCQlQS0NTOF9QUklWX0tFWV9JTkZPX2ZyZWUocDgpOworCQkJaWYgKGEpIHsKKwkJCQkqYSA9IHJldDsKKwkJCX0JCisJCQlyZXR1cm4gcmV0OworCQl9CiAJZWxzZSBrZXl0eXBlID0gRVZQX1BLRVlfUlNBOwogCXNrX0FTTjFfVFlQRV9wb3BfZnJlZShpbmtleSwgQVNOMV9UWVBFX2ZyZWUpOwogCXJldHVybiBkMmlfUHJpdmF0ZUtleShrZXl0eXBlLCBhLCBwcCwgbGVuZ3RoKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9hc24xL2QyaV9wdS5jIGIvY3J5cHRvL2FzbjEvZDJpX3B1LmMKaW5kZXggMzY5NGY1MS4uYzhmMzljZSAxMDA2NDQKLS0tIGEvY3J5cHRvL2FzbjEvZDJpX3B1LmMKKysrIGIvY3J5cHRvL2FzbjEvZDJpX3B1LmMKQEAgLTg3LDkgKzg3LDEzIEBACiAJCX0KIAllbHNlCXJldD0gKmE7CiAKLQlyZXQtPnNhdmVfdHlwZT10eXBlOwotCXJldC0+dHlwZT1FVlBfUEtFWV90eXBlKHR5cGUpOwotCXN3aXRjaCAocmV0LT50eXBlKQorCWlmICghRVZQX1BLRVlfc2V0X3R5cGUocmV0LCB0eXBlKSkKKwkJeworCQlBU04xZXJyKEFTTjFfRl9EMklfUFVCTElDS0VZLEVSUl9SX0VWUF9MSUIpOworCQlnb3RvIGVycjsKKwkJfQorCisJc3dpdGNoIChFVlBfUEtFWV9pZChyZXQpKQogCQl7CiAjaWZuZGVmIE9QRU5TU0xfTk9fUlNBCiAJY2FzZSBFVlBfUEtFWV9SU0E6CmRpZmYgLS1naXQgYS9jcnlwdG8vYXNuMS9pMmRfcHIuYyBiL2NyeXB0by9hc24xL2kyZF9wci5jCmluZGV4IDBiZTUyYzUuLmUzOThiNjIgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hc24xL2kyZF9wci5jCisrKyBiL2NyeXB0by9hc24xL2kyZF9wci5jCkBAIC01OCw0MSArNTgsMjIgQEAKIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSAiY3J5cHRsaWIuaCIKLSNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KLSNpZm5kZWYgT1BFTlNTTF9OT19SU0EKLSNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotI2VuZGlmCi0jaWZuZGVmIE9QRU5TU0xfTk9fRFNBCi0jaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KLSNlbmRpZgotI2lmbmRlZiBPUEVOU1NMX05PX0VDCi0jaW5jbHVkZSA8b3BlbnNzbC9lYy5oPgotI2VuZGlmCisjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+CisjaW5jbHVkZSAiYXNuMV9sb2NsLmgiCiAKIGludCBpMmRfUHJpdmF0ZUtleShFVlBfUEtFWSAqYSwgdW5zaWduZWQgY2hhciAqKnBwKQogCXsKLSNpZm5kZWYgT1BFTlNTTF9OT19SU0EKLQlpZiAoYS0+dHlwZSA9PSBFVlBfUEtFWV9SU0EpCisJaWYgKGEtPmFtZXRoICYmIGEtPmFtZXRoLT5vbGRfcHJpdl9lbmNvZGUpCiAJCXsKLQkJcmV0dXJuKGkyZF9SU0FQcml2YXRlS2V5KGEtPnBrZXkucnNhLHBwKSk7CisJCXJldHVybiBhLT5hbWV0aC0+b2xkX3ByaXZfZW5jb2RlKGEsIHBwKTsKIAkJfQotCWVsc2UKLSNlbmRpZgotI2lmbmRlZiBPUEVOU1NMX05PX0RTQQotCWlmIChhLT50eXBlID09IEVWUF9QS0VZX0RTQSkKLQkJewotCQlyZXR1cm4oaTJkX0RTQVByaXZhdGVLZXkoYS0+cGtleS5kc2EscHApKTsKLQkJfQotI2VuZGlmCi0jaWZuZGVmIE9QRU5TU0xfTk9fRUMKLQlpZiAoYS0+dHlwZSA9PSBFVlBfUEtFWV9FQykKLQkJewotCQlyZXR1cm4oaTJkX0VDUHJpdmF0ZUtleShhLT5wa2V5LmVjLCBwcCkpOwotCQl9Ci0jZW5kaWYKLQorCWlmIChhLT5hbWV0aCAmJiBhLT5hbWV0aC0+cHJpdl9lbmNvZGUpIHsKKwkJUEtDUzhfUFJJVl9LRVlfSU5GTyAqcDggPSBFVlBfUEtFWTJQS0NTOChhKTsKKwkJaW50IHJldCA9IGkyZF9QS0NTOF9QUklWX0tFWV9JTkZPKHA4LHBwKTsKKwkJUEtDUzhfUFJJVl9LRVlfSU5GT19mcmVlKHA4KTsKKwkJcmV0dXJuIHJldDsKKwl9CQogCUFTTjFlcnIoQVNOMV9GX0kyRF9QUklWQVRFS0VZLEFTTjFfUl9VTlNVUFBPUlRFRF9QVUJMSUNfS0VZX1RZUEUpOwogCXJldHVybigtMSk7CiAJfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FzbjEvbnNzZXEuYyBiL2NyeXB0by9hc24xL25zc2VxLmMKaW5kZXggZTU1MWM1Ny4uYjhjNDIwMiAxMDA2NDQKLS0tIGEvY3J5cHRvL2FzbjEvbnNzZXEuYworKysgYi9jcnlwdG8vYXNuMS9uc3NlcS5jCkBAIC0zLDcgKzMsNyBAQAogICogcHJvamVjdCAxOTk5LgogICovCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChjKSAxOTk5IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYyLDcgKzYyLDggQEAKICNpbmNsdWRlIDxvcGVuc3NsL3g1MDkuaD4KICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KIAotc3RhdGljIGludCBuc3NlcV9jYihpbnQgb3BlcmF0aW9uLCBBU04xX1ZBTFVFICoqcHZhbCwgY29uc3QgQVNOMV9JVEVNICppdCkKK3N0YXRpYyBpbnQgbnNzZXFfY2IoaW50IG9wZXJhdGlvbiwgQVNOMV9WQUxVRSAqKnB2YWwsIGNvbnN0IEFTTjFfSVRFTSAqaXQsCisJCQkJCQkJdm9pZCAqZXhhcmcpCiB7CiAJaWYob3BlcmF0aW9uID09IEFTTjFfT1BfTkVXX1BPU1QpIHsKIAkJTkVUU0NBUEVfQ0VSVF9TRVFVRU5DRSAqbnNzZXE7CmRpZmYgLS1naXQgYS9jcnlwdG8vYXNuMS9wNV9wYmUuYyBiL2NyeXB0by9hc24xL3A1X3BiZS5jCmluZGV4IGM0NTgyZjguLjk0YmMzOGIgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hc24xL3A1X3BiZS5jCisrKyBiL2NyeXB0by9hc24xL3A1X3BiZS5jCkBAIC03MSw2MSArNzEsNzggQEAKIAogSU1QTEVNRU5UX0FTTjFfRlVOQ1RJT05TKFBCRVBBUkFNKQogCisKKy8qIFNldCBhbiBhbGdvcml0aG0gaWRlbnRpZmllciBmb3IgYSBQS0NTIzUgUEJFIGFsZ29yaXRobSAqLworCitpbnQgUEtDUzVfcGJlX3NldDBfYWxnb3IoWDUwOV9BTEdPUiAqYWxnb3IsIGludCBhbGcsIGludCBpdGVyLAorCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNhbHQsIGludCBzYWx0bGVuKQorCXsKKwlQQkVQQVJBTSAqcGJlPU5VTEw7CisJQVNOMV9TVFJJTkcgKnBiZV9zdHI9TlVMTDsKKwl1bnNpZ25lZCBjaGFyICpzc3RyOworCisJcGJlID0gUEJFUEFSQU1fbmV3KCk7CisJaWYgKCFwYmUpCisJCXsKKwkJQVNOMWVycihBU04xX0ZfUEtDUzVfUEJFX1NFVDBfQUxHT1IsRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOworCQlnb3RvIGVycjsKKwkJfQorCWlmKGl0ZXIgPD0gMCkKKwkJaXRlciA9IFBLQ1M1X0RFRkFVTFRfSVRFUjsKKwlpZiAoIUFTTjFfSU5URUdFUl9zZXQocGJlLT5pdGVyLCBpdGVyKSkKKwkJeworCQlBU04xZXJyKEFTTjFfRl9QS0NTNV9QQkVfU0VUMF9BTEdPUixFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CisJCWdvdG8gZXJyOworCQl9CisJaWYgKCFzYWx0bGVuKQorCQlzYWx0bGVuID0gUEtDUzVfU0FMVF9MRU47CisJaWYgKCFBU04xX1NUUklOR19zZXQocGJlLT5zYWx0LCBOVUxMLCBzYWx0bGVuKSkKKwkJeworCQlBU04xZXJyKEFTTjFfRl9QS0NTNV9QQkVfU0VUMF9BTEdPUixFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CisJCWdvdG8gZXJyOworCQl9CisJc3N0ciA9IEFTTjFfU1RSSU5HX2RhdGEocGJlLT5zYWx0KTsKKwlpZiAoc2FsdCkKKwkJbWVtY3B5KHNzdHIsIHNhbHQsIHNhbHRsZW4pOworCWVsc2UgaWYgKFJBTkRfcHNldWRvX2J5dGVzKHNzdHIsIHNhbHRsZW4pIDwgMCkKKwkJZ290byBlcnI7CisKKwlpZighQVNOMV9pdGVtX3BhY2socGJlLCBBU04xX0lURU1fcnB0cihQQkVQQVJBTSksICZwYmVfc3RyKSkKKwkJeworCQlBU04xZXJyKEFTTjFfRl9QS0NTNV9QQkVfU0VUMF9BTEdPUixFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CisJCWdvdG8gZXJyOworCQl9CisKKwlQQkVQQVJBTV9mcmVlKHBiZSk7CisJcGJlID0gTlVMTDsKKworCWlmIChYNTA5X0FMR09SX3NldDAoYWxnb3IsIE9CSl9uaWQyb2JqKGFsZyksIFZfQVNOMV9TRVFVRU5DRSwgcGJlX3N0cikpCisJCXJldHVybiAxOworCitlcnI6CisJaWYgKHBiZSAhPSBOVUxMKQorCQlQQkVQQVJBTV9mcmVlKHBiZSk7CisJaWYgKHBiZV9zdHIgIT0gTlVMTCkKKwkJQVNOMV9TVFJJTkdfZnJlZShwYmVfc3RyKTsKKwlyZXR1cm4gMDsKKwl9CisKIC8qIFJldHVybiBhbiBhbGdvcml0aG0gaWRlbnRpZmllciBmb3IgYSBQS0NTIzUgUEJFIGFsZ29yaXRobSAqLwogCi1YNTA5X0FMR09SICpQS0NTNV9wYmVfc2V0KGludCBhbGcsIGludCBpdGVyLCB1bnNpZ25lZCBjaGFyICpzYWx0LAotCSAgICAgaW50IHNhbHRsZW4pCi17Ci0JUEJFUEFSQU0gKnBiZT1OVUxMOwotCUFTTjFfT0JKRUNUICphbDsKLQlYNTA5X0FMR09SICphbGdvcjsKLQlBU04xX1RZUEUgKmFzdHlwZT1OVUxMOworWDUwOV9BTEdPUiAqUEtDUzVfcGJlX3NldChpbnQgYWxnLCBpbnQgaXRlciwKKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpzYWx0LCBpbnQgc2FsdGxlbikKKwl7CisJWDUwOV9BTEdPUiAqcmV0OworCXJldCA9IFg1MDlfQUxHT1JfbmV3KCk7CisJaWYgKCFyZXQpCisJCXsKKwkJQVNOMWVycihBU04xX0ZfUEtDUzVfUEJFX1NFVCxFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CisJCXJldHVybiBOVUxMOworCQl9CiAKLQlpZiAoIShwYmUgPSBQQkVQQVJBTV9uZXcgKCkpKSB7Ci0JCUFTTjFlcnIoQVNOMV9GX1BLQ1M1X1BCRV9TRVQsRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwotCQlnb3RvIGVycjsKLQl9Ci0JaWYoaXRlciA8PSAwKSBpdGVyID0gUEtDUzVfREVGQVVMVF9JVEVSOwotCWlmICghQVNOMV9JTlRFR0VSX3NldChwYmUtPml0ZXIsIGl0ZXIpKSB7Ci0JCUFTTjFlcnIoQVNOMV9GX1BLQ1M1X1BCRV9TRVQsRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwotCQlnb3RvIGVycjsKLQl9Ci0JaWYgKCFzYWx0bGVuKSBzYWx0bGVuID0gUEtDUzVfU0FMVF9MRU47Ci0JaWYgKCEocGJlLT5zYWx0LT5kYXRhID0gT1BFTlNTTF9tYWxsb2MgKHNhbHRsZW4pKSkgewotCQlBU04xZXJyKEFTTjFfRl9QS0NTNV9QQkVfU0VULEVSUl9SX01BTExPQ19GQUlMVVJFKTsKLQkJZ290byBlcnI7Ci0JfQotCXBiZS0+c2FsdC0+bGVuZ3RoID0gc2FsdGxlbjsKLQlpZiAoc2FsdCkgbWVtY3B5IChwYmUtPnNhbHQtPmRhdGEsIHNhbHQsIHNhbHRsZW4pOwotCWVsc2UgaWYgKFJBTkRfcHNldWRvX2J5dGVzIChwYmUtPnNhbHQtPmRhdGEsIHNhbHRsZW4pIDwgMCkKLQkJZ290byBlcnI7CisJaWYgKFBLQ1M1X3BiZV9zZXQwX2FsZ29yKHJldCwgYWxnLCBpdGVyLCBzYWx0LCBzYWx0bGVuKSkgCisJCXJldHVybiByZXQ7CiAKLQlpZiAoIShhc3R5cGUgPSBBU04xX1RZUEVfbmV3KCkpKSB7Ci0JCUFTTjFlcnIoQVNOMV9GX1BLQ1M1X1BCRV9TRVQsRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwotCQlnb3RvIGVycjsKLQl9Ci0KLQlhc3R5cGUtPnR5cGUgPSBWX0FTTjFfU0VRVUVOQ0U7Ci0JaWYoIUFTTjFfcGFja19zdHJpbmdfb2YoUEJFUEFSQU0sIHBiZSwgaTJkX1BCRVBBUkFNLAotCQkJCSZhc3R5cGUtPnZhbHVlLnNlcXVlbmNlKSkgewotCQlBU04xZXJyKEFTTjFfRl9QS0NTNV9QQkVfU0VULEVSUl9SX01BTExPQ19GQUlMVVJFKTsKLQkJZ290byBlcnI7Ci0JfQotCVBCRVBBUkFNX2ZyZWUgKHBiZSk7Ci0JcGJlID0gTlVMTDsKLQkKLQlhbCA9IE9CSl9uaWQyb2JqKGFsZyk7IC8qIG5ldmVyIG5lZWQgdG8gZnJlZSBhbCAqLwotCWlmICghKGFsZ29yID0gWDUwOV9BTEdPUl9uZXcoKSkpIHsKLQkJQVNOMWVycihBU04xX0ZfUEtDUzVfUEJFX1NFVCxFUlJfUl9NQUxMT0NfRkFJTFVSRSk7Ci0JCWdvdG8gZXJyOwotCX0KLQlBU04xX09CSkVDVF9mcmVlKGFsZ29yLT5hbGdvcml0aG0pOwotCWFsZ29yLT5hbGdvcml0aG0gPSBhbDsKLQlhbGdvci0+cGFyYW1ldGVyID0gYXN0eXBlOwotCi0JcmV0dXJuIChhbGdvcik7Ci1lcnI6Ci0JaWYgKHBiZSAhPSBOVUxMKSBQQkVQQVJBTV9mcmVlKHBiZSk7Ci0JaWYgKGFzdHlwZSAhPSBOVUxMKSBBU04xX1RZUEVfZnJlZShhc3R5cGUpOworCVg1MDlfQUxHT1JfZnJlZShyZXQpOwogCXJldHVybiBOVUxMOwotfQorCX0KZGlmZiAtLWdpdCBhL2NyeXB0by9hc24xL3A1X3BiZXYyLmMgYi9jcnlwdG8vYXNuMS9wNV9wYmV2Mi5jCmluZGV4IDJiMDUxNmEuLmNiNDliNjYgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hc24xL3A1X3BiZXYyLmMKKysrIGIvY3J5cHRvL2FzbjEvcDVfcGJldjIuYwpAQCAtODIsMTAgKzgyLDEzIEBACiAKIC8qIFJldHVybiBhbiBhbGdvcml0aG0gaWRlbnRpZmllciBmb3IgYSBQS0NTIzUgdjIuMCBQQkUgYWxnb3JpdGhtOgogICogeWVzIEkga25vdyB0aGlzIGlzIGhvcnJpYmxlIQorICoKKyAqIEV4dGVuZGVkIHZlcnNpb24gdG8gYWxsb3cgYXBwbGljYXRpb24gc3VwcGxpZWQgUFJGIE5JRCBhbmQgSVYuCiAgKi8KIAotWDUwOV9BTEdPUiAqUEtDUzVfcGJlMl9zZXQoY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyLCBpbnQgaXRlciwKLQkJCQkgdW5zaWduZWQgY2hhciAqc2FsdCwgaW50IHNhbHRsZW4pCitYNTA5X0FMR09SICpQS0NTNV9wYmUyX3NldF9pdihjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIsIGludCBpdGVyLAorCQkJCSB1bnNpZ25lZCBjaGFyICpzYWx0LCBpbnQgc2FsdGxlbiwKKwkJCQkgdW5zaWduZWQgY2hhciAqYWl2LCBpbnQgcHJmX25pZCkKIHsKIAlYNTA5X0FMR09SICpzY2hlbWUgPSBOVUxMLCAqa2FsZyA9IE5VTEwsICpyZXQgPSBOVUxMOwogCWludCBhbGdfbmlkOwpAQCAtOTgsNyArMTAxLDcgQEAKIAogCWFsZ19uaWQgPSBFVlBfQ0lQSEVSX3R5cGUoY2lwaGVyKTsKIAlpZihhbGdfbmlkID09IE5JRF91bmRlZikgewotCQlBU04xZXJyKEFTTjFfRl9QS0NTNV9QQkUyX1NFVCwKKwkJQVNOMWVycihBU04xX0ZfUEtDUzVfUEJFMl9TRVRfSVYsCiAJCQkJQVNOMV9SX0NJUEhFUl9IQVNfTk9fT0JKRUNUX0lERU5USUZJRVIpOwogCQlnb3RvIGVycjsKIAl9CkBAIC0xMTMsMjAgKzExNiwzMyBAQAogCWlmKCEoc2NoZW1lLT5wYXJhbWV0ZXIgPSBBU04xX1RZUEVfbmV3KCkpKSBnb3RvIG1lcnI7CiAKIAkvKiBDcmVhdGUgcmFuZG9tIElWICovCi0JaWYgKEVWUF9DSVBIRVJfaXZfbGVuZ3RoKGNpcGhlcikgJiYKLQkJUkFORF9wc2V1ZG9fYnl0ZXMoaXYsIEVWUF9DSVBIRVJfaXZfbGVuZ3RoKGNpcGhlcikpIDwgMCkKLSAgCQlnb3RvIGVycjsKKwlpZiAoRVZQX0NJUEhFUl9pdl9sZW5ndGgoY2lwaGVyKSkKKwkJeworCQlpZiAoYWl2KQorCQkJbWVtY3B5KGl2LCBhaXYsIEVWUF9DSVBIRVJfaXZfbGVuZ3RoKGNpcGhlcikpOworCQllbHNlIGlmIChSQU5EX3BzZXVkb19ieXRlcyhpdiwgRVZQX0NJUEhFUl9pdl9sZW5ndGgoY2lwaGVyKSkgPCAwKQorICAJCQlnb3RvIGVycjsKKwkJfQogCiAJRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKIAotCS8qIER1bW15IGNpcGhlcmluaXQgdG8ganVzdCBzZXR1cCB0aGUgSVYgKi8KKwkvKiBEdW1teSBjaXBoZXJpbml0IHRvIGp1c3Qgc2V0dXAgdGhlIElWLCBhbmQgUFJGICovCiAJRVZQX0NpcGhlckluaXRfZXgoJmN0eCwgY2lwaGVyLCBOVUxMLCBOVUxMLCBpdiwgMCk7CiAJaWYoRVZQX0NJUEhFUl9wYXJhbV90b19hc24xKCZjdHgsIHNjaGVtZS0+cGFyYW1ldGVyKSA8IDApIHsKLQkJQVNOMWVycihBU04xX0ZfUEtDUzVfUEJFMl9TRVQsCisJCUFTTjFlcnIoQVNOMV9GX1BLQ1M1X1BCRTJfU0VUX0lWLAogCQkJCQlBU04xX1JfRVJST1JfU0VUVElOR19DSVBIRVJfUEFSQU1TKTsKIAkJRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKIAkJZ290byBlcnI7CiAJfQorCS8qIElmIHByZiBOSUQgdW5zcGVjaWZpZWQgc2VlIGlmIGNpcGhlciBoYXMgYSBwcmVmZXJlbmNlLgorCSAqIEFuIGVycm9yIGlzIE9LIGhlcmU6IGp1c3QgbWVhbnMgdXNlIGRlZmF1bHQgUFJGLgorCSAqLworCWlmICgocHJmX25pZCA9PSAtMSkgJiYgCisJRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBFVlBfQ1RSTF9QQkVfUFJGX05JRCwgMCwgJnByZl9uaWQpIDw9IDApCisJCXsKKwkJRVJSX2NsZWFyX2Vycm9yKCk7CisJCXByZl9uaWQgPSBOSURfaG1hY1dpdGhTSEExOworCQl9CiAJRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKIAogCWlmKCEoa2RmID0gUEJLREYyUEFSQU1fbmV3KCkpKSBnb3RvIG1lcnI7CkBAIC0xNTQsNyArMTcwLDE1IEBACiAJCQkJIEVWUF9DSVBIRVJfa2V5X2xlbmd0aChjaXBoZXIpKSkgZ290byBtZXJyOwogCX0KIAotCS8qIHByZiBjYW4gc3RheSBOVUxMIGJlY2F1c2Ugd2UgYXJlIHVzaW5nIGhtYWNXaXRoU0hBMSAqLworCS8qIHByZiBjYW4gc3RheSBOVUxMIGlmIHdlIGFyZSB1c2luZyBobWFjV2l0aFNIQTEgKi8KKwlpZiAocHJmX25pZCAhPSBOSURfaG1hY1dpdGhTSEExKQorCQl7CisJCWtkZi0+cHJmID0gWDUwOV9BTEdPUl9uZXcoKTsKKwkJaWYgKCFrZGYtPnByZikKKwkJCWdvdG8gbWVycjsKKwkJWDUwOV9BTEdPUl9zZXQwKGtkZi0+cHJmLCBPQkpfbmlkMm9iaihwcmZfbmlkKSwKKwkJCQkJVl9BU04xX05VTEwsIE5VTEwpOworCQl9CiAKIAkvKiBOb3cgc2V0dXAgdGhlIFBCRTJQQVJBTSBrZXlmdW5jIHN0cnVjdHVyZSAqLwogCkBAIC0xNjQsNyArMTg4LDcgQEAKIAogCWlmKCEocGJlMi0+a2V5ZnVuYy0+cGFyYW1ldGVyID0gQVNOMV9UWVBFX25ldygpKSkgZ290byBtZXJyOwogCi0JaWYoIUFTTjFfcGFja19zdHJpbmdfb2YoUEJLREYyUEFSQU0sIGtkZiwgaTJkX1BCS0RGMlBBUkFNLAorCWlmKCFBU04xX2l0ZW1fcGFjayhrZGYsIEFTTjFfSVRFTV9ycHRyKFBCS0RGMlBBUkFNKSwKIAkJCSAmcGJlMi0+a2V5ZnVuYy0+cGFyYW1ldGVyLT52YWx1ZS5zZXF1ZW5jZSkpIGdvdG8gbWVycjsKIAlwYmUyLT5rZXlmdW5jLT5wYXJhbWV0ZXItPnR5cGUgPSBWX0FTTjFfU0VRVUVOQ0U7CiAKQEAgLTE4MCw3ICsyMDQsNyBAQAogCiAJLyogRW5jb2RlIFBCRTJQQVJBTSBpbnRvIHBhcmFtZXRlciAqLwogCi0JaWYoIUFTTjFfcGFja19zdHJpbmdfb2YoUEJFMlBBUkFNLCBwYmUyLCBpMmRfUEJFMlBBUkFNLAorCWlmKCFBU04xX2l0ZW1fcGFjayhwYmUyLCBBU04xX0lURU1fcnB0cihQQkUyUEFSQU0pLAogCQkJCSAmcmV0LT5wYXJhbWV0ZXItPnZhbHVlLnNlcXVlbmNlKSkgZ290byBtZXJyOwogCXJldC0+cGFyYW1ldGVyLT50eXBlID0gVl9BU04xX1NFUVVFTkNFOwogCkBAIC0xOTAsNyArMjE0LDcgQEAKIAlyZXR1cm4gcmV0OwogCiAJbWVycjoKLQlBU04xZXJyKEFTTjFfRl9QS0NTNV9QQkUyX1NFVCxFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CisJQVNOMWVycihBU04xX0ZfUEtDUzVfUEJFMl9TRVRfSVYsRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwogCiAJZXJyOgogCVBCRTJQQVJBTV9mcmVlKHBiZTIpOwpAQCAtMjAzLDMgKzIyNyw5IEBACiAJcmV0dXJuIE5VTEw7CiAKIH0KKworWDUwOV9BTEdPUiAqUEtDUzVfcGJlMl9zZXQoY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyLCBpbnQgaXRlciwKKwkJCQkgdW5zaWduZWQgY2hhciAqc2FsdCwgaW50IHNhbHRsZW4pCisJeworCXJldHVybiBQS0NTNV9wYmUyX3NldF9pdihjaXBoZXIsIGl0ZXIsIHNhbHQsIHNhbHRsZW4sIE5VTEwsIC0xKTsKKwl9CmRpZmYgLS1naXQgYS9jcnlwdG8vYXNuMS9wOF9rZXkuYyBiL2NyeXB0by9hc24xL3A4X2tleS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTMxMjQ4Li4wMDAwMDAwCi0tLSBhL2NyeXB0by9hc24xL3A4X2tleS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTMxICswLDAgQEAKLS8qIGNyeXB0by9hc24xL3A4X2tleS5jICovCi0vKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCi0gKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCi0gKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCi0gKiAKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcwotICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAotICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCi0gKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCi0gKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSAqIAotICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KLSAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KLSAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KLSAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCi0gKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKLSAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKLSAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCi0gKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKLSAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgotICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCi0gKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgotICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICogCi0gKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgotICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCi0gKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCi0gKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQotICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgImNyeXB0bGliLmgiCi0jaW5jbHVkZSA8b3BlbnNzbC9hc24xX21hYy5oPgotI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgotCi1pbnQgaTJkX1g1MDlfS0VZKFg1MDkgKmEsIHVuc2lnbmVkIGNoYXIgKipwcCkKLQl7Ci0JTV9BU04xX0kyRF92YXJzKGEpOwotCi0JTV9BU04xX0kyRF9sZW4oYS0+Y2VydF9pbmZvLAlpMmRfWDUwOV9DSU5GKTsKLQlNX0FTTjFfSTJEX2xlbihhLT5zaWdfYWxnLAlpMmRfWDUwOV9BTEdPUik7Ci0JTV9BU04xX0kyRF9sZW4oYS0+c2lnbmF0dXJlLAlpMmRfQVNOMV9CSVRfU1RSSU5HKTsKLQotCU1fQVNOMV9JMkRfc2VxX3RvdGFsKCk7Ci0KLQlNX0FTTjFfSTJEX3B1dChhLT5jZXJ0X2luZm8sCWkyZF9YNTA5X0NJTkYpOwotCU1fQVNOMV9JMkRfcHV0KGEtPnNpZ19hbGcsCWkyZF9YNTA5X0FMR09SKTsKLQlNX0FTTjFfSTJEX3B1dChhLT5zaWduYXR1cmUsCWkyZF9BU04xX0JJVF9TVFJJTkcpOwotCi0JTV9BU04xX0kyRF9maW5pc2goKTsKLQl9Ci0KLVg1MDkgKmQyaV9YNTA5X0tFWShYNTA5ICoqYSwgdW5zaWduZWQgY2hhciAqKnBwLCBsb25nIGxlbmd0aCkKLQl7Ci0JTV9BU04xX0QySV92YXJzKGEsWDUwOSAqLFg1MDlfbmV3KTsKLQotCU1fQVNOMV9EMklfSW5pdCgpOwotCU1fQVNOMV9EMklfc3RhcnRfc2VxdWVuY2UoKTsKLQlNX0FTTjFfRDJJX2dldChyZXQtPmNlcnRfaW5mbyxkMmlfWDUwOV9DSU5GKTsKLQlNX0FTTjFfRDJJX2dldChyZXQtPnNpZ19hbGcsZDJpX1g1MDlfQUxHT1IpOwotCU1fQVNOMV9EMklfZ2V0KHJldC0+c2lnbmF0dXJlLGQyaV9BU04xX0JJVF9TVFJJTkcpOwotCU1fQVNOMV9EMklfRmluaXNoKGEsWDUwOV9mcmVlLEFTTjFfRl9EMklfWDUwOSk7Ci0JfQotCi1YNTA5ICpYNTA5X0tFWV9uZXcodm9pZCkKLQl7Ci0JWDUwOV9LRVkgKnJldD1OVUxMOwotCi0JTV9BU04xX05ld19PUEVOU1NMX21hbGxvYyhyZXQsWDUwOV9LRVkpOwotCXJldC0+cmVmZXJlbmNlcz0xOwotCXJldC0+dHlwZT1OSUQKLQlNX0FTTjFfTmV3KHJldC0+Y2VydF9pbmZvLFg1MDlfQ0lORl9uZXcpOwotCU1fQVNOMV9OZXcocmV0LT5zaWdfYWxnLFg1MDlfQUxHT1JfbmV3KTsKLQlNX0FTTjFfTmV3KHJldC0+c2lnbmF0dXJlLEFTTjFfQklUX1NUUklOR19uZXcpOwotCXJldHVybihyZXQpOwotCU1fQVNOMV9OZXdfRXJyb3IoQVNOMV9GX1g1MDlfTkVXKTsKLQl9Ci0KLXZvaWQgWDUwOV9LRVlfZnJlZShYNTA5ICphKQotCXsKLQlpbnQgaTsKLQotCWlmIChhID09IE5VTEwpIHJldHVybjsKLQotCWk9Q1JZUFRPX2FkZF9sb2NrKCZhLT5yZWZlcmVuY2VzLC0xLENSWVBUT19MT0NLX1g1MDlfS0VZKTsKLSNpZmRlZiBSRUZfUFJJTlQKLQlSRUZfUFJJTlQoIlg1MDlfS0VZIixhKTsKLSNlbmRpZgotCWlmIChpID4gMCkgcmV0dXJuOwotI2lmZGVmIFJFRl9DSEVDSwotCWlmIChpIDwgMCkKLQkJewotCQlmcHJpbnRmKHN0ZGVyciwiWDUwOV9LRVlfZnJlZSwgYmFkIHJlZmVyZW5jZSBjb3VudFxuIik7Ci0JCWFib3J0KCk7Ci0JCX0KLSNlbmRpZgotCi0JWDUwOV9DSU5GX2ZyZWUoYS0+Y2VydF9pbmZvKTsKLQlYNTA5X0FMR09SX2ZyZWUoYS0+c2lnX2FsZyk7Ci0JQVNOMV9CSVRfU1RSSU5HX2ZyZWUoYS0+c2lnbmF0dXJlKTsKLQlPUEVOU1NMX2ZyZWUoYSk7Ci0JfQotCmRpZmYgLS1naXQgYS9jcnlwdG8vYXNuMS9wOF9wa2V5LmMgYi9jcnlwdG8vYXNuMS9wOF9wa2V5LmMKaW5kZXggMGExOTU3NS4uMTdiNjhkMyAxMDA2NDQKLS0tIGEvY3J5cHRvL2FzbjEvcDhfcGtleS5jCisrKyBiL2NyeXB0by9hc24xL3A4X3BrZXkuYwpAQCAtMyw3ICszLDcgQEAKICAqIHByb2plY3QgMTk5OS4KICAqLwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoYykgMTk5OSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA1IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Miw3ICs2Miw4IEBACiAjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+CiAKIC8qIE1pbm9yIHR3ZWFrIHRvIG9wZXJhdGlvbjogemVybyBwcml2YXRlIGtleSBkYXRhICovCi1zdGF0aWMgaW50IHBrZXlfY2IoaW50IG9wZXJhdGlvbiwgQVNOMV9WQUxVRSAqKnB2YWwsIGNvbnN0IEFTTjFfSVRFTSAqaXQpCitzdGF0aWMgaW50IHBrZXlfY2IoaW50IG9wZXJhdGlvbiwgQVNOMV9WQUxVRSAqKnB2YWwsIGNvbnN0IEFTTjFfSVRFTSAqaXQsCisJCQkJCQkJdm9pZCAqZXhhcmcpCiB7CiAJLyogU2luY2UgdGhlIHN0cnVjdHVyZSBtdXN0IHN0aWxsIGJlIHZhbGlkIHVzZSBBU04xX09QX0ZSRUVfUFJFICovCiAJaWYob3BlcmF0aW9uID09IEFTTjFfT1BfRlJFRV9QUkUpIHsKQEAgLTgyLDMgKzgzLDczIEBACiB9IEFTTjFfU0VRVUVOQ0VfRU5EX2NiKFBLQ1M4X1BSSVZfS0VZX0lORk8sIFBLQ1M4X1BSSVZfS0VZX0lORk8pCiAKIElNUExFTUVOVF9BU04xX0ZVTkNUSU9OUyhQS0NTOF9QUklWX0tFWV9JTkZPKQorCitpbnQgUEtDUzhfcGtleV9zZXQwKFBLQ1M4X1BSSVZfS0VZX0lORk8gKnByaXYsIEFTTjFfT0JKRUNUICphb2JqLAorCQkJCQlpbnQgdmVyc2lvbiwKKwkJCQkJaW50IHB0eXBlLCB2b2lkICpwdmFsLAorCQkJCQl1bnNpZ25lZCBjaGFyICpwZW5jLCBpbnQgcGVuY2xlbikKKwl7CisJdW5zaWduZWQgY2hhciAqKnBwZW5jID0gTlVMTDsKKwlpZiAodmVyc2lvbiA+PSAwKQorCQl7CisJCWlmICghQVNOMV9JTlRFR0VSX3NldChwcml2LT52ZXJzaW9uLCB2ZXJzaW9uKSkKKwkJCXJldHVybiAwOworCQl9CisJaWYgKHBlbmMpCisJCXsKKwkJaW50IHBtdHlwZTsKKwkJQVNOMV9PQ1RFVF9TVFJJTkcgKm9jdDsKKwkJb2N0ID0gQVNOMV9PQ1RFVF9TVFJJTkdfbmV3KCk7CisJCWlmICghb2N0KQorCQkJcmV0dXJuIDA7CisJCW9jdC0+ZGF0YSA9IHBlbmM7CisJCXBwZW5jID0gJm9jdC0+ZGF0YTsKKwkJb2N0LT5sZW5ndGggPSBwZW5jbGVuOworCQlpZiAocHJpdi0+YnJva2VuID09IFBLQ1M4X05PX09DVEVUKQorCQkJcG10eXBlID0gVl9BU04xX1NFUVVFTkNFOworCQllbHNlCisJCQlwbXR5cGUgPSBWX0FTTjFfT0NURVRfU1RSSU5HOworCQlBU04xX1RZUEVfc2V0KHByaXYtPnBrZXksIHBtdHlwZSwgb2N0KTsKKwkJfQorCWlmICghWDUwOV9BTEdPUl9zZXQwKHByaXYtPnBrZXlhbGcsIGFvYmosIHB0eXBlLCBwdmFsKSkKKwkJeworCQkvKiBJZiBjYWxsIGZhaWxzIGRvIG5vdCBzd2FsbG93ICdlbmMnICovCisJCWlmIChwcGVuYykKKwkJCSpwcGVuYyA9IE5VTEw7CisJCXJldHVybiAwOworCQl9CisJcmV0dXJuIDE7CisJfQorCitpbnQgUEtDUzhfcGtleV9nZXQwKEFTTjFfT0JKRUNUICoqcHBrYWxnLAorCQljb25zdCB1bnNpZ25lZCBjaGFyICoqcGssIGludCAqcHBrbGVuLAorCQlYNTA5X0FMR09SICoqcGEsCisJCVBLQ1M4X1BSSVZfS0VZX0lORk8gKnA4KQorCXsKKwlpZiAocHBrYWxnKQorCQkqcHBrYWxnID0gcDgtPnBrZXlhbGctPmFsZ29yaXRobTsKKwlpZihwOC0+cGtleS0+dHlwZSA9PSBWX0FTTjFfT0NURVRfU1RSSU5HKQorCQl7CisJCXA4LT5icm9rZW4gPSBQS0NTOF9PSzsKKwkJaWYgKHBrKQorCQkJeworCQkJKnBrID0gcDgtPnBrZXktPnZhbHVlLm9jdGV0X3N0cmluZy0+ZGF0YTsKKwkJCSpwcGtsZW4gPSBwOC0+cGtleS0+dmFsdWUub2N0ZXRfc3RyaW5nLT5sZW5ndGg7CisJCQl9CisJCX0KKwllbHNlIGlmIChwOC0+cGtleS0+dHlwZSA9PSBWX0FTTjFfU0VRVUVOQ0UpCisJCXsKKwkJcDgtPmJyb2tlbiA9IFBLQ1M4X05PX09DVEVUOworCQlpZiAocGspCisJCQl7CisJCQkqcGsgPSBwOC0+cGtleS0+dmFsdWUuc2VxdWVuY2UtPmRhdGE7CisJCQkqcHBrbGVuID0gcDgtPnBrZXktPnZhbHVlLnNlcXVlbmNlLT5sZW5ndGg7CisJCQl9CisJCX0KKwllbHNlCisJCXJldHVybiAwOworCWlmIChwYSkKKwkJKnBhID0gcDgtPnBrZXlhbGc7CisJcmV0dXJuIDE7CisJfQorCmRpZmYgLS1naXQgYS9jcnlwdG8vYXNuMS90X3BrZXkuYyBiL2NyeXB0by9hc24xL3RfcGtleS5jCmluZGV4IGFmYjk1ZDYuLjlkZDE4ZjYgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hc24xL3RfcGtleS5jCisrKyBiL2NyeXB0by9hc24xL3RfcGtleS5jCkBAIC01NSw1MjAgKzU1LDE1IEBACiAgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCiAgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQogICovCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IDIwMDIgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBTEwgUklHSFRTIFJFU0VSVkVELgotICogQmluYXJ5IHBvbHlub21pYWwgRUNDIHN1cHBvcnQgaW4gT3BlblNTTCBvcmlnaW5hbGx5IGRldmVsb3BlZCBieSAKLSAqIFNVTiBNSUNST1NZU1RFTVMsIElOQy4sIGFuZCBjb250cmlidXRlZCB0byB0aGUgT3BlblNTTCBwcm9qZWN0LgotICovCiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgImNyeXB0bGliLmgiCiAjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9idWZmZXIuaD4KICNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0jaWZuZGVmIE9QRU5TU0xfTk9fUlNBCi0jaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KLSNlbmRpZgotI2lmbmRlZiBPUEVOU1NMX05PX0RICi0jaW5jbHVkZSA8b3BlbnNzbC9kaC5oPgotI2VuZGlmCi0jaWZuZGVmIE9QRU5TU0xfTk9fRFNBCi0jaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KLSNlbmRpZgotI2lmbmRlZiBPUEVOU1NMX05PX0VDCi0jaW5jbHVkZSA8b3BlbnNzbC9lYy5oPgotI2VuZGlmCiAKLXN0YXRpYyBpbnQgcHJpbnQoQklPICpmcCxjb25zdCBjaGFyICpzdHIsIGNvbnN0IEJJR05VTSAqbnVtLAotCQl1bnNpZ25lZCBjaGFyICpidWYsaW50IG9mZik7Ci0jaWZuZGVmIE9QRU5TU0xfTk9fRUMKLXN0YXRpYyBpbnQgcHJpbnRfYmluKEJJTyAqZnAsIGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgdW5zaWduZWQgY2hhciAqbnVtLAotCQlzaXplX3QgbGVuLCBpbnQgb2ZmKTsKLSNlbmRpZgotI2lmbmRlZiBPUEVOU1NMX05PX1JTQQotI2lmbmRlZiBPUEVOU1NMX05PX0ZQX0FQSQotaW50IFJTQV9wcmludF9mcChGSUxFICpmcCwgY29uc3QgUlNBICp4LCBpbnQgb2ZmKQotCXsKLQlCSU8gKmI7Ci0JaW50IHJldDsKLQotCWlmICgoYj1CSU9fbmV3KEJJT19zX2ZpbGUoKSkpID09IE5VTEwpCi0JCXsKLQkJUlNBZXJyKFJTQV9GX1JTQV9QUklOVF9GUCxFUlJfUl9CVUZfTElCKTsKLQkJcmV0dXJuKDApOwotCQl9Ci0JQklPX3NldF9mcChiLGZwLEJJT19OT0NMT1NFKTsKLQlyZXQ9UlNBX3ByaW50KGIseCxvZmYpOwotCUJJT19mcmVlKGIpOwotCXJldHVybihyZXQpOwotCX0KLSNlbmRpZgotCi1pbnQgUlNBX3ByaW50KEJJTyAqYnAsIGNvbnN0IFJTQSAqeCwgaW50IG9mZikKLQl7Ci0JY2hhciBzdHJbMTI4XTsKLQljb25zdCBjaGFyICpzOwotCXVuc2lnbmVkIGNoYXIgKm09TlVMTDsKLQlpbnQgcmV0PTAsIG1vZF9sZW4gPSAwOwotCXNpemVfdCBidWZfbGVuPTAsIGk7Ci0KLQlpZiAoeC0+bikKLQkJYnVmX2xlbiA9IChzaXplX3QpQk5fbnVtX2J5dGVzKHgtPm4pOwotCWlmICh4LT5lKQotCQlpZiAoYnVmX2xlbiA8IChpID0gKHNpemVfdClCTl9udW1fYnl0ZXMoeC0+ZSkpKQotCQkJYnVmX2xlbiA9IGk7Ci0JaWYgKHgtPmQpCi0JCWlmIChidWZfbGVuIDwgKGkgPSAoc2l6ZV90KUJOX251bV9ieXRlcyh4LT5kKSkpCi0JCQlidWZfbGVuID0gaTsKLQlpZiAoeC0+cCkKLQkJaWYgKGJ1Zl9sZW4gPCAoaSA9IChzaXplX3QpQk5fbnVtX2J5dGVzKHgtPnApKSkKLQkJCWJ1Zl9sZW4gPSBpOwotCWlmICh4LT5xKQotCQlpZiAoYnVmX2xlbiA8IChpID0gKHNpemVfdClCTl9udW1fYnl0ZXMoeC0+cSkpKQotCQkJYnVmX2xlbiA9IGk7Ci0JaWYgKHgtPmRtcDEpCi0JCWlmIChidWZfbGVuIDwgKGkgPSAoc2l6ZV90KUJOX251bV9ieXRlcyh4LT5kbXAxKSkpCi0JCQlidWZfbGVuID0gaTsKLQlpZiAoeC0+ZG1xMSkKLQkJaWYgKGJ1Zl9sZW4gPCAoaSA9IChzaXplX3QpQk5fbnVtX2J5dGVzKHgtPmRtcTEpKSkKLQkJCWJ1Zl9sZW4gPSBpOwotCWlmICh4LT5pcW1wKQotCQlpZiAoYnVmX2xlbiA8IChpID0gKHNpemVfdClCTl9udW1fYnl0ZXMoeC0+aXFtcCkpKQotCQkJYnVmX2xlbiA9IGk7Ci0KLQltPSh1bnNpZ25lZCBjaGFyICopT1BFTlNTTF9tYWxsb2MoYnVmX2xlbisxMCk7Ci0JaWYgKG0gPT0gTlVMTCkKLQkJewotCQlSU0FlcnIoUlNBX0ZfUlNBX1BSSU5ULEVSUl9SX01BTExPQ19GQUlMVVJFKTsKLQkJZ290byBlcnI7Ci0JCX0KLQotCWlmICh4LT5uICE9IE5VTEwpCi0JCW1vZF9sZW4gPSBCTl9udW1fYml0cyh4LT5uKTsKLQotCWlmICh4LT5kICE9IE5VTEwpCi0JCXsKLQkJaWYoIUJJT19pbmRlbnQoYnAsb2ZmLDEyOCkpCi0JCSAgIGdvdG8gZXJyOwotCQlpZiAoQklPX3ByaW50ZihicCwiUHJpdmF0ZS1LZXk6ICglZCBiaXQpXG4iLCBtb2RfbGVuKQotCQkJPD0gMCkgZ290byBlcnI7Ci0JCX0KLQotCWlmICh4LT5kID09IE5VTEwpCi0JCUJJT19zbnByaW50ZihzdHIsc2l6ZW9mIHN0ciwiTW9kdWx1cyAoJWQgYml0KToiLCBtb2RfbGVuKTsKLQllbHNlCi0JCUJVRl9zdHJsY3B5KHN0ciwibW9kdWx1czoiLHNpemVvZiBzdHIpOwotCWlmICghcHJpbnQoYnAsc3RyLHgtPm4sbSxvZmYpKSBnb3RvIGVycjsKLQlzPSh4LT5kID09IE5VTEwpPyJFeHBvbmVudDoiOiJwdWJsaWNFeHBvbmVudDoiOwotCWlmICgoeC0+ZSAhPSBOVUxMKSAmJiAhcHJpbnQoYnAscyx4LT5lLG0sb2ZmKSkKLQkJZ290byBlcnI7Ci0JaWYgKCh4LT5kICE9IE5VTEwpICYmICFwcmludChicCwicHJpdmF0ZUV4cG9uZW50OiIseC0+ZCxtLG9mZikpCi0JCWdvdG8gZXJyOwotCWlmICgoeC0+cCAhPSBOVUxMKSAmJiAhcHJpbnQoYnAsInByaW1lMToiLHgtPnAsbSxvZmYpKQotCQlnb3RvIGVycjsKLQlpZiAoKHgtPnEgIT0gTlVMTCkgJiYgIXByaW50KGJwLCJwcmltZTI6Iix4LT5xLG0sb2ZmKSkKLQkJZ290byBlcnI7Ci0JaWYgKCh4LT5kbXAxICE9IE5VTEwpICYmICFwcmludChicCwiZXhwb25lbnQxOiIseC0+ZG1wMSxtLG9mZikpCi0JCWdvdG8gZXJyOwotCWlmICgoeC0+ZG1xMSAhPSBOVUxMKSAmJiAhcHJpbnQoYnAsImV4cG9uZW50MjoiLHgtPmRtcTEsbSxvZmYpKQotCQlnb3RvIGVycjsKLQlpZiAoKHgtPmlxbXAgIT0gTlVMTCkgJiYgIXByaW50KGJwLCJjb2VmZmljaWVudDoiLHgtPmlxbXAsbSxvZmYpKQotCQlnb3RvIGVycjsKLQlyZXQ9MTsKLWVycjoKLQlpZiAobSAhPSBOVUxMKSBPUEVOU1NMX2ZyZWUobSk7Ci0JcmV0dXJuKHJldCk7Ci0JfQotI2VuZGlmIC8qIE9QRU5TU0xfTk9fUlNBICovCi0KLSNpZm5kZWYgT1BFTlNTTF9OT19EU0EKLSNpZm5kZWYgT1BFTlNTTF9OT19GUF9BUEkKLWludCBEU0FfcHJpbnRfZnAoRklMRSAqZnAsIGNvbnN0IERTQSAqeCwgaW50IG9mZikKLQl7Ci0JQklPICpiOwotCWludCByZXQ7Ci0KLQlpZiAoKGI9QklPX25ldyhCSU9fc19maWxlKCkpKSA9PSBOVUxMKQotCQl7Ci0JCURTQWVycihEU0FfRl9EU0FfUFJJTlRfRlAsRVJSX1JfQlVGX0xJQik7Ci0JCXJldHVybigwKTsKLQkJfQotCUJJT19zZXRfZnAoYixmcCxCSU9fTk9DTE9TRSk7Ci0JcmV0PURTQV9wcmludChiLHgsb2ZmKTsKLQlCSU9fZnJlZShiKTsKLQlyZXR1cm4ocmV0KTsKLQl9Ci0jZW5kaWYKLQotaW50IERTQV9wcmludChCSU8gKmJwLCBjb25zdCBEU0EgKngsIGludCBvZmYpCi0JewotCXVuc2lnbmVkIGNoYXIgKm09TlVMTDsKLQlpbnQgcmV0PTA7Ci0Jc2l6ZV90IGJ1Zl9sZW49MCxpOwotCi0JaWYgKHgtPnApCi0JCWJ1Zl9sZW4gPSAoc2l6ZV90KUJOX251bV9ieXRlcyh4LT5wKTsKLQllbHNlCi0JCXsKLQkJRFNBZXJyKERTQV9GX0RTQV9QUklOVCxEU0FfUl9NSVNTSU5HX1BBUkFNRVRFUlMpOwotCQlnb3RvIGVycjsKLQkJfQotCWlmICh4LT5xKQotCQlpZiAoYnVmX2xlbiA8IChpID0gKHNpemVfdClCTl9udW1fYnl0ZXMoeC0+cSkpKQotCQkJYnVmX2xlbiA9IGk7Ci0JaWYgKHgtPmcpCi0JCWlmIChidWZfbGVuIDwgKGkgPSAoc2l6ZV90KUJOX251bV9ieXRlcyh4LT5nKSkpCi0JCQlidWZfbGVuID0gaTsKLQlpZiAoeC0+cHJpdl9rZXkpCi0JCWlmIChidWZfbGVuIDwgKGkgPSAoc2l6ZV90KUJOX251bV9ieXRlcyh4LT5wcml2X2tleSkpKQotCQkJYnVmX2xlbiA9IGk7Ci0JaWYgKHgtPnB1Yl9rZXkpCi0JCWlmIChidWZfbGVuIDwgKGkgPSAoc2l6ZV90KUJOX251bV9ieXRlcyh4LT5wdWJfa2V5KSkpCi0JCQlidWZfbGVuID0gaTsKLQotCW09KHVuc2lnbmVkIGNoYXIgKilPUEVOU1NMX21hbGxvYyhidWZfbGVuKzEwKTsKLQlpZiAobSA9PSBOVUxMKQotCQl7Ci0JCURTQWVycihEU0FfRl9EU0FfUFJJTlQsRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwotCQlnb3RvIGVycjsKLQkJfQotCi0JaWYgKHgtPnByaXZfa2V5ICE9IE5VTEwpCi0JCXsKLQkJaWYoIUJJT19pbmRlbnQoYnAsb2ZmLDEyOCkpCi0JCSAgIGdvdG8gZXJyOwotCQlpZiAoQklPX3ByaW50ZihicCwiUHJpdmF0ZS1LZXk6ICglZCBiaXQpXG4iLEJOX251bV9iaXRzKHgtPnApKQotCQkJPD0gMCkgZ290byBlcnI7Ci0JCX0KLQotCWlmICgoeC0+cHJpdl9rZXkgIT0gTlVMTCkgJiYgIXByaW50KGJwLCJwcml2OiIseC0+cHJpdl9rZXksbSxvZmYpKQotCQlnb3RvIGVycjsKLQlpZiAoKHgtPnB1Yl9rZXkgICE9IE5VTEwpICYmICFwcmludChicCwicHViOiAiLHgtPnB1Yl9rZXksbSxvZmYpKQotCQlnb3RvIGVycjsKLQlpZiAoKHgtPnAgIT0gTlVMTCkgJiYgIXByaW50KGJwLCJQOiAgICIseC0+cCxtLG9mZikpIGdvdG8gZXJyOwotCWlmICgoeC0+cSAhPSBOVUxMKSAmJiAhcHJpbnQoYnAsIlE6ICAgIix4LT5xLG0sb2ZmKSkgZ290byBlcnI7Ci0JaWYgKCh4LT5nICE9IE5VTEwpICYmICFwcmludChicCwiRzogICAiLHgtPmcsbSxvZmYpKSBnb3RvIGVycjsKLQlyZXQ9MTsKLWVycjoKLQlpZiAobSAhPSBOVUxMKSBPUEVOU1NMX2ZyZWUobSk7Ci0JcmV0dXJuKHJldCk7Ci0JfQotI2VuZGlmIC8qICFPUEVOU1NMX05PX0RTQSAqLwotCi0jaWZuZGVmIE9QRU5TU0xfTk9fRUMKLSNpZm5kZWYgT1BFTlNTTF9OT19GUF9BUEkKLWludCBFQ1BLUGFyYW1ldGVyc19wcmludF9mcChGSUxFICpmcCwgY29uc3QgRUNfR1JPVVAgKngsIGludCBvZmYpCi0JewotCUJJTyAqYjsKLQlpbnQgcmV0OwotCi0JaWYgKChiPUJJT19uZXcoQklPX3NfZmlsZSgpKSkgPT0gTlVMTCkKLQkJewotCQlFQ2VycihFQ19GX0VDUEtQQVJBTUVURVJTX1BSSU5UX0ZQLEVSUl9SX0JVRl9MSUIpOwotCQlyZXR1cm4oMCk7Ci0JCX0KLQlCSU9fc2V0X2ZwKGIsIGZwLCBCSU9fTk9DTE9TRSk7Ci0JcmV0ID0gRUNQS1BhcmFtZXRlcnNfcHJpbnQoYiwgeCwgb2ZmKTsKLQlCSU9fZnJlZShiKTsKLQlyZXR1cm4ocmV0KTsKLQl9Ci0KLWludCBFQ19LRVlfcHJpbnRfZnAoRklMRSAqZnAsIGNvbnN0IEVDX0tFWSAqeCwgaW50IG9mZikKLQl7Ci0JQklPICpiOwotCWludCByZXQ7Ci0gCi0JaWYgKChiPUJJT19uZXcoQklPX3NfZmlsZSgpKSkgPT0gTlVMTCkKLQkJewotCQlFQ2VycihFQ19GX0VDX0tFWV9QUklOVF9GUCwgRVJSX1JfQklPX0xJQik7Ci0JCXJldHVybigwKTsKLQkJfQotCUJJT19zZXRfZnAoYiwgZnAsIEJJT19OT0NMT1NFKTsKLQlyZXQgPSBFQ19LRVlfcHJpbnQoYiwgeCwgb2ZmKTsKLQlCSU9fZnJlZShiKTsKLQlyZXR1cm4ocmV0KTsKLQl9Ci0jZW5kaWYKLQotaW50IEVDUEtQYXJhbWV0ZXJzX3ByaW50KEJJTyAqYnAsIGNvbnN0IEVDX0dST1VQICp4LCBpbnQgb2ZmKQotCXsKLQl1bnNpZ25lZCBjaGFyICpidWZmZXI9TlVMTDsKLQlzaXplX3QJYnVmX2xlbj0wLCBpOwotCWludCAgICAgcmV0PTAsIHJlYXNvbj1FUlJfUl9CSU9fTElCOwotCUJOX0NUWCAgKmN0eD1OVUxMOwotCWNvbnN0IEVDX1BPSU5UICpwb2ludD1OVUxMOwotCUJJR05VTQkqcD1OVUxMLCAqYT1OVUxMLCAqYj1OVUxMLCAqZ2VuPU5VTEwsCi0JCSpvcmRlcj1OVUxMLCAqY29mYWN0b3I9TlVMTDsKLQljb25zdCB1bnNpZ25lZCBjaGFyICpzZWVkOwotCXNpemVfdAlzZWVkX2xlbj0wOwotCQotCXN0YXRpYyBjb25zdCBjaGFyICpnZW5fY29tcHJlc3NlZCA9ICJHZW5lcmF0b3IgKGNvbXByZXNzZWQpOiI7Ci0Jc3RhdGljIGNvbnN0IGNoYXIgKmdlbl91bmNvbXByZXNzZWQgPSAiR2VuZXJhdG9yICh1bmNvbXByZXNzZWQpOiI7Ci0Jc3RhdGljIGNvbnN0IGNoYXIgKmdlbl9oeWJyaWQgPSAiR2VuZXJhdG9yIChoeWJyaWQpOiI7Ci0gCi0JaWYgKCF4KQotCQl7Ci0JCXJlYXNvbiA9IEVSUl9SX1BBU1NFRF9OVUxMX1BBUkFNRVRFUjsKLQkJZ290byBlcnI7Ci0JCX0KLQotCWlmIChFQ19HUk9VUF9nZXRfYXNuMV9mbGFnKHgpKQotCQl7Ci0JCS8qIHRoZSBjdXJ2ZSBwYXJhbWV0ZXIgYXJlIGdpdmVuIGJ5IGFuIGFzbjEgT0lEICovCi0JCWludCBuaWQ7Ci0KLQkJaWYgKCFCSU9faW5kZW50KGJwLCBvZmYsIDEyOCkpCi0JCQlnb3RvIGVycjsKLQotCQluaWQgPSBFQ19HUk9VUF9nZXRfY3VydmVfbmFtZSh4KTsKLQkJaWYgKG5pZCA9PSAwKQotCQkJZ290byBlcnI7Ci0KLQkJaWYgKEJJT19wcmludGYoYnAsICJBU04xIE9JRDogJXMiLCBPQkpfbmlkMnNuKG5pZCkpIDw9IDApCi0JCQlnb3RvIGVycjsKLQkJaWYgKEJJT19wcmludGYoYnAsICJcbiIpIDw9IDApCi0JCQlnb3RvIGVycjsKLQkJfQotCWVsc2UKLQkJewotCQkvKiBleHBsaWNpdCBwYXJhbWV0ZXJzICovCi0JCWludCBpc19jaGFyX3R3byA9IDA7Ci0JCXBvaW50X2NvbnZlcnNpb25fZm9ybV90IGZvcm07Ci0JCWludCB0bXBfbmlkID0gRUNfTUVUSE9EX2dldF9maWVsZF90eXBlKEVDX0dST1VQX21ldGhvZF9vZih4KSk7Ci0KLQkJaWYgKHRtcF9uaWQgPT0gTklEX1g5XzYyX2NoYXJhY3RlcmlzdGljX3R3b19maWVsZCkKLQkJCWlzX2NoYXJfdHdvID0gMTsKLQotCQlpZiAoKHAgPSBCTl9uZXcoKSkgPT0gTlVMTCB8fCAoYSA9IEJOX25ldygpKSA9PSBOVUxMIHx8Ci0JCQkoYiA9IEJOX25ldygpKSA9PSBOVUxMIHx8IChvcmRlciA9IEJOX25ldygpKSA9PSBOVUxMIHx8Ci0JCQkoY29mYWN0b3IgPSBCTl9uZXcoKSkgPT0gTlVMTCkKLQkJCXsKLQkJCXJlYXNvbiA9IEVSUl9SX01BTExPQ19GQUlMVVJFOwotCQkJZ290byBlcnI7Ci0JCQl9Ci0KLQkJaWYgKGlzX2NoYXJfdHdvKQotCQkJewotCQkJaWYgKCFFQ19HUk9VUF9nZXRfY3VydmVfR0YybSh4LCBwLCBhLCBiLCBjdHgpKQotCQkJCXsKLQkJCQlyZWFzb24gPSBFUlJfUl9FQ19MSUI7Ci0JCQkJZ290byBlcnI7Ci0JCQkJfQotCQkJfQotCQllbHNlIC8qIHByaW1lIGZpZWxkICovCi0JCQl7Ci0JCQlpZiAoIUVDX0dST1VQX2dldF9jdXJ2ZV9HRnAoeCwgcCwgYSwgYiwgY3R4KSkKLQkJCQl7Ci0JCQkJcmVhc29uID0gRVJSX1JfRUNfTElCOwotCQkJCWdvdG8gZXJyOwotCQkJCX0KLQkJCX0KLQotCQlpZiAoKHBvaW50ID0gRUNfR1JPVVBfZ2V0MF9nZW5lcmF0b3IoeCkpID09IE5VTEwpCi0JCQl7Ci0JCQlyZWFzb24gPSBFUlJfUl9FQ19MSUI7Ci0JCQlnb3RvIGVycjsKLQkJCX0KLQkJaWYgKCFFQ19HUk9VUF9nZXRfb3JkZXIoeCwgb3JkZXIsIE5VTEwpIHx8IAotICAgICAgICAgICAgCQkhRUNfR1JPVVBfZ2V0X2NvZmFjdG9yKHgsIGNvZmFjdG9yLCBOVUxMKSkKLQkJCXsKLQkJCXJlYXNvbiA9IEVSUl9SX0VDX0xJQjsKLQkJCWdvdG8gZXJyOwotCQkJfQotCQkKLQkJZm9ybSA9IEVDX0dST1VQX2dldF9wb2ludF9jb252ZXJzaW9uX2Zvcm0oeCk7Ci0KLQkJaWYgKChnZW4gPSBFQ19QT0lOVF9wb2ludDJibih4LCBwb2ludCwgCi0JCQkJZm9ybSwgTlVMTCwgY3R4KSkgPT0gTlVMTCkKLQkJCXsKLQkJCXJlYXNvbiA9IEVSUl9SX0VDX0xJQjsKLQkJCWdvdG8gZXJyOwotCQkJfQotCi0JCWJ1Zl9sZW4gPSAoc2l6ZV90KUJOX251bV9ieXRlcyhwKTsKLQkJaWYgKGJ1Zl9sZW4gPCAoaSA9IChzaXplX3QpQk5fbnVtX2J5dGVzKGEpKSkKLQkJCWJ1Zl9sZW4gPSBpOwotCQlpZiAoYnVmX2xlbiA8IChpID0gKHNpemVfdClCTl9udW1fYnl0ZXMoYikpKQotCQkJYnVmX2xlbiA9IGk7Ci0JCWlmIChidWZfbGVuIDwgKGkgPSAoc2l6ZV90KUJOX251bV9ieXRlcyhnZW4pKSkKLQkJCWJ1Zl9sZW4gPSBpOwotCQlpZiAoYnVmX2xlbiA8IChpID0gKHNpemVfdClCTl9udW1fYnl0ZXMob3JkZXIpKSkKLQkJCWJ1Zl9sZW4gPSBpOwotCQlpZiAoYnVmX2xlbiA8IChpID0gKHNpemVfdClCTl9udW1fYnl0ZXMoY29mYWN0b3IpKSkgCi0JCQlidWZfbGVuID0gaTsKLQotCQlpZiAoKHNlZWQgPSBFQ19HUk9VUF9nZXQwX3NlZWQoeCkpICE9IE5VTEwpCi0JCQlzZWVkX2xlbiA9IEVDX0dST1VQX2dldF9zZWVkX2xlbih4KTsKLQotCQlidWZfbGVuICs9IDEwOwotCQlpZiAoKGJ1ZmZlciA9IE9QRU5TU0xfbWFsbG9jKGJ1Zl9sZW4pKSA9PSBOVUxMKQotCQkJewotCQkJcmVhc29uID0gRVJSX1JfTUFMTE9DX0ZBSUxVUkU7Ci0JCQlnb3RvIGVycjsKLQkJCX0KLQotCQlpZiAoIUJJT19pbmRlbnQoYnAsIG9mZiwgMTI4KSkKLQkJCWdvdG8gZXJyOwotCi0JCS8qIHByaW50IHRoZSAnc2hvcnQgbmFtZScgb2YgdGhlIGZpZWxkIHR5cGUgKi8KLQkJaWYgKEJJT19wcmludGYoYnAsICJGaWVsZCBUeXBlOiAlc1xuIiwgT0JKX25pZDJzbih0bXBfbmlkKSkKLQkJCTw9IDApCi0JCQlnb3RvIGVycjsgIAotCi0JCWlmIChpc19jaGFyX3R3bykKLQkJCXsKLQkJCS8qIHByaW50IHRoZSAnc2hvcnQgbmFtZScgb2YgdGhlIGJhc2UgdHlwZSBPSUQgKi8KLQkJCWludCBiYXNpc190eXBlID0gRUNfR1JPVVBfZ2V0X2Jhc2lzX3R5cGUoeCk7Ci0JCQlpZiAoYmFzaXNfdHlwZSA9PSAwKQotCQkJCWdvdG8gZXJyOwotCi0JCQlpZiAoIUJJT19pbmRlbnQoYnAsIG9mZiwgMTI4KSkKLQkJCQlnb3RvIGVycjsKLQotCQkJaWYgKEJJT19wcmludGYoYnAsICJCYXNpcyBUeXBlOiAlc1xuIiwgCi0JCQkJT0JKX25pZDJzbihiYXNpc190eXBlKSkgPD0gMCkKLQkJCQlnb3RvIGVycjsKLQotCQkJLyogcHJpbnQgdGhlIHBvbHlub21pYWwgKi8KLQkJCWlmICgocCAhPSBOVUxMKSAmJiAhcHJpbnQoYnAsICJQb2x5bm9taWFsOiIsIHAsIGJ1ZmZlciwKLQkJCQlvZmYpKQotCQkJCWdvdG8gZXJyOwotCQkJfQotCQllbHNlCi0JCQl7Ci0JCQlpZiAoKHAgIT0gTlVMTCkgJiYgIXByaW50KGJwLCAiUHJpbWU6IiwgcCwgYnVmZmVyLG9mZikpCi0JCQkJZ290byBlcnI7Ci0JCQl9Ci0JCWlmICgoYSAhPSBOVUxMKSAmJiAhcHJpbnQoYnAsICJBOiAgICIsIGEsIGJ1ZmZlciwgb2ZmKSkgCi0JCQlnb3RvIGVycjsKLQkJaWYgKChiICE9IE5VTEwpICYmICFwcmludChicCwgIkI6ICAgIiwgYiwgYnVmZmVyLCBvZmYpKQotCQkJZ290byBlcnI7Ci0JCWlmIChmb3JtID09IFBPSU5UX0NPTlZFUlNJT05fQ09NUFJFU1NFRCkKLQkJCXsKLQkJCWlmICgoZ2VuICE9IE5VTEwpICYmICFwcmludChicCwgZ2VuX2NvbXByZXNzZWQsIGdlbiwKLQkJCQlidWZmZXIsIG9mZikpCi0JCQkJZ290byBlcnI7Ci0JCQl9Ci0JCWVsc2UgaWYgKGZvcm0gPT0gUE9JTlRfQ09OVkVSU0lPTl9VTkNPTVBSRVNTRUQpCi0JCQl7Ci0JCQlpZiAoKGdlbiAhPSBOVUxMKSAmJiAhcHJpbnQoYnAsIGdlbl91bmNvbXByZXNzZWQsIGdlbiwKLQkJCQlidWZmZXIsIG9mZikpCi0JCQkJZ290byBlcnI7Ci0JCQl9Ci0JCWVsc2UgLyogZm9ybSA9PSBQT0lOVF9DT05WRVJTSU9OX0hZQlJJRCAqLwotCQkJewotCQkJaWYgKChnZW4gIT0gTlVMTCkgJiYgIXByaW50KGJwLCBnZW5faHlicmlkLCBnZW4sCi0JCQkJYnVmZmVyLCBvZmYpKQotCQkJCWdvdG8gZXJyOwotCQkJfQotCQlpZiAoKG9yZGVyICE9IE5VTEwpICYmICFwcmludChicCwgIk9yZGVyOiAiLCBvcmRlciwgCi0JCQlidWZmZXIsIG9mZikpIGdvdG8gZXJyOwotCQlpZiAoKGNvZmFjdG9yICE9IE5VTEwpICYmICFwcmludChicCwgIkNvZmFjdG9yOiAiLCBjb2ZhY3RvciwgCi0JCQlidWZmZXIsIG9mZikpIGdvdG8gZXJyOwotCQlpZiAoc2VlZCAmJiAhcHJpbnRfYmluKGJwLCAiU2VlZDoiLCBzZWVkLCBzZWVkX2xlbiwgb2ZmKSkKLQkJCWdvdG8gZXJyOwotCQl9Ci0JcmV0PTE7Ci1lcnI6Ci0JaWYgKCFyZXQpCi0gCQlFQ2VycihFQ19GX0VDUEtQQVJBTUVURVJTX1BSSU5ULCByZWFzb24pOwotCWlmIChwKSAKLQkJQk5fZnJlZShwKTsKLQlpZiAoYSkgCi0JCUJOX2ZyZWUoYSk7Ci0JaWYgKGIpCi0JCUJOX2ZyZWUoYik7Ci0JaWYgKGdlbikKLQkJQk5fZnJlZShnZW4pOwotCWlmIChvcmRlcikKLQkJQk5fZnJlZShvcmRlcik7Ci0JaWYgKGNvZmFjdG9yKQotCQlCTl9mcmVlKGNvZmFjdG9yKTsKLQlpZiAoY3R4KQotCQlCTl9DVFhfZnJlZShjdHgpOwotCWlmIChidWZmZXIgIT0gTlVMTCkgCi0JCU9QRU5TU0xfZnJlZShidWZmZXIpOwotCXJldHVybihyZXQpOwkKLQl9Ci0KLWludCBFQ19LRVlfcHJpbnQoQklPICpicCwgY29uc3QgRUNfS0VZICp4LCBpbnQgb2ZmKQotCXsKLQl1bnNpZ25lZCBjaGFyICpidWZmZXI9TlVMTDsKLQlzaXplX3QJYnVmX2xlbj0wLCBpOwotCWludCAgICAgcmV0PTAsIHJlYXNvbj1FUlJfUl9CSU9fTElCOwotCUJJR05VTSAgKnB1Yl9rZXk9TlVMTCwgKm9yZGVyPU5VTEw7Ci0JQk5fQ1RYICAqY3R4PU5VTEw7Ci0JY29uc3QgRUNfR1JPVVAgKmdyb3VwOwotCWNvbnN0IEVDX1BPSU5UICpwdWJsaWNfa2V5OwotCWNvbnN0IEJJR05VTSAqcHJpdl9rZXk7Ci0gCi0JaWYgKHggPT0gTlVMTCB8fCAoZ3JvdXAgPSBFQ19LRVlfZ2V0MF9ncm91cCh4KSkgPT0gTlVMTCkKLQkJewotCQlyZWFzb24gPSBFUlJfUl9QQVNTRURfTlVMTF9QQVJBTUVURVI7Ci0JCWdvdG8gZXJyOwotCQl9Ci0KLQlwdWJsaWNfa2V5ID0gRUNfS0VZX2dldDBfcHVibGljX2tleSh4KTsKLQlpZiAoKHB1Yl9rZXkgPSBFQ19QT0lOVF9wb2ludDJibihncm91cCwgcHVibGljX2tleSwKLQkJRUNfS0VZX2dldF9jb252X2Zvcm0oeCksIE5VTEwsIGN0eCkpID09IE5VTEwpCi0JCXsKLQkJcmVhc29uID0gRVJSX1JfRUNfTElCOwotCQlnb3RvIGVycjsKLQkJfQotCi0JYnVmX2xlbiA9IChzaXplX3QpQk5fbnVtX2J5dGVzKHB1Yl9rZXkpOwotCXByaXZfa2V5ID0gRUNfS0VZX2dldDBfcHJpdmF0ZV9rZXkoeCk7Ci0JaWYgKHByaXZfa2V5ICE9IE5VTEwpCi0JCXsKLQkJaWYgKChpID0gKHNpemVfdClCTl9udW1fYnl0ZXMocHJpdl9rZXkpKSA+IGJ1Zl9sZW4pCi0JCQlidWZfbGVuID0gaTsKLQkJfQotCi0JYnVmX2xlbiArPSAxMDsKLQlpZiAoKGJ1ZmZlciA9IE9QRU5TU0xfbWFsbG9jKGJ1Zl9sZW4pKSA9PSBOVUxMKQotCQl7Ci0JCXJlYXNvbiA9IEVSUl9SX01BTExPQ19GQUlMVVJFOwotCQlnb3RvIGVycjsKLQkJfQotCi0JaWYgKHByaXZfa2V5ICE9IE5VTEwpCi0JCXsKLQkJaWYgKCFCSU9faW5kZW50KGJwLCBvZmYsIDEyOCkpCi0JCQlnb3RvIGVycjsKLQkJaWYgKChvcmRlciA9IEJOX25ldygpKSA9PSBOVUxMKQotCQkJZ290byBlcnI7Ci0JCWlmICghRUNfR1JPVVBfZ2V0X29yZGVyKGdyb3VwLCBvcmRlciwgTlVMTCkpCi0JCQlnb3RvIGVycjsKLQkJaWYgKEJJT19wcmludGYoYnAsICJQcml2YXRlLUtleTogKCVkIGJpdClcbiIsIAotCQkJQk5fbnVtX2JpdHMob3JkZXIpKSA8PSAwKSBnb3RvIGVycjsKLQkJfQotICAKLQlpZiAoKHByaXZfa2V5ICE9IE5VTEwpICYmICFwcmludChicCwgInByaXY6IiwgcHJpdl9rZXksIAotCQlidWZmZXIsIG9mZikpCi0JCWdvdG8gZXJyOwotCWlmICgocHViX2tleSAhPSBOVUxMKSAmJiAhcHJpbnQoYnAsICJwdWI6ICIsIHB1Yl9rZXksCi0JCWJ1ZmZlciwgb2ZmKSkKLQkJZ290byBlcnI7Ci0JaWYgKCFFQ1BLUGFyYW1ldGVyc19wcmludChicCwgZ3JvdXAsIG9mZikpCi0JCWdvdG8gZXJyOwotCXJldD0xOwotZXJyOgotCWlmICghcmV0KQotIAkJRUNlcnIoRUNfRl9FQ19LRVlfUFJJTlQsIHJlYXNvbik7Ci0JaWYgKHB1Yl9rZXkpIAotCQlCTl9mcmVlKHB1Yl9rZXkpOwotCWlmIChvcmRlcikKLQkJQk5fZnJlZShvcmRlcik7Ci0JaWYgKGN0eCkKLQkJQk5fQ1RYX2ZyZWUoY3R4KTsKLQlpZiAoYnVmZmVyICE9IE5VTEwpCi0JCU9QRU5TU0xfZnJlZShidWZmZXIpOwotCXJldHVybihyZXQpOwotCX0KLSNlbmRpZiAvKiBPUEVOU1NMX05PX0VDICovCi0KLXN0YXRpYyBpbnQgcHJpbnQoQklPICpicCwgY29uc3QgY2hhciAqbnVtYmVyLCBjb25zdCBCSUdOVU0gKm51bSwgdW5zaWduZWQgY2hhciAqYnVmLAotCSAgICAgaW50IG9mZikKK2ludCBBU04xX2JuX3ByaW50KEJJTyAqYnAsIGNvbnN0IGNoYXIgKm51bWJlciwgY29uc3QgQklHTlVNICpudW0sCisJCQl1bnNpZ25lZCBjaGFyICpidWYsIGludCBvZmYpCiAJewogCWludCBuLGk7CiAJY29uc3QgY2hhciAqbmVnOwpAQCAtNjE3LDIyMyArMTEyLDMgQEAKIAkJfQogCXJldHVybigxKTsKIAl9Ci0KLSNpZm5kZWYgT1BFTlNTTF9OT19FQwotc3RhdGljIGludCBwcmludF9iaW4oQklPICpmcCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAotCQlzaXplX3QgbGVuLCBpbnQgb2ZmKQotCXsKLQlzaXplX3QgaTsKLQljaGFyIHN0clsxMjhdOwotCi0JaWYgKGJ1ZiA9PSBOVUxMKQotCQlyZXR1cm4gMTsKLQlpZiAob2ZmKQotCQl7Ci0JCWlmIChvZmYgPiAxMjgpCi0JCQlvZmY9MTI4OwotCQltZW1zZXQoc3RyLCcgJyxvZmYpOwotCQlpZiAoQklPX3dyaXRlKGZwLCBzdHIsIG9mZikgPD0gMCkKLQkJCXJldHVybiAwOwotCQl9Ci0KLQlpZiAoQklPX3ByaW50ZihmcCwiJXMiLCBuYW1lKSA8PSAwKQotCQlyZXR1cm4gMDsKLQotCWZvciAoaT0wOyBpPGxlbjsgaSsrKQotCQl7Ci0JCWlmICgoaSUxNSkgPT0gMCkKLQkJCXsKLQkJCXN0clswXT0nXG4nOwotCQkJbWVtc2V0KCYoc3RyWzFdKSwnICcsb2ZmKzQpOwotCQkJaWYgKEJJT193cml0ZShmcCwgc3RyLCBvZmYrMSs0KSA8PSAwKQotCQkJCXJldHVybiAwOwotCQkJfQotCQlpZiAoQklPX3ByaW50ZihmcCwiJTAyeCVzIixidWZbaV0sKChpKzEpID09IGxlbik/IiI6IjoiKSA8PSAwKQotCQkJcmV0dXJuIDA7Ci0JCX0KLQlpZiAoQklPX3dyaXRlKGZwLCJcbiIsMSkgPD0gMCkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gMTsKLQl9Ci0jZW5kaWYKLQotI2lmbmRlZiBPUEVOU1NMX05PX0RICi0jaWZuZGVmIE9QRU5TU0xfTk9fRlBfQVBJCi1pbnQgREhwYXJhbXNfcHJpbnRfZnAoRklMRSAqZnAsIGNvbnN0IERIICp4KQotCXsKLQlCSU8gKmI7Ci0JaW50IHJldDsKLQotCWlmICgoYj1CSU9fbmV3KEJJT19zX2ZpbGUoKSkpID09IE5VTEwpCi0JCXsKLQkJREhlcnIoREhfRl9ESFBBUkFNU19QUklOVF9GUCxFUlJfUl9CVUZfTElCKTsKLQkJcmV0dXJuKDApOwotCQl9Ci0JQklPX3NldF9mcChiLGZwLEJJT19OT0NMT1NFKTsKLQlyZXQ9REhwYXJhbXNfcHJpbnQoYiwgeCk7Ci0JQklPX2ZyZWUoYik7Ci0JcmV0dXJuKHJldCk7Ci0JfQotI2VuZGlmCi0KLWludCBESHBhcmFtc19wcmludChCSU8gKmJwLCBjb25zdCBESCAqeCkKLQl7Ci0JdW5zaWduZWQgY2hhciAqbT1OVUxMOwotCWludCByZWFzb249RVJSX1JfQlVGX0xJQixyZXQ9MDsKLQlzaXplX3QgYnVmX2xlbj0wLCBpOwotCi0JaWYgKHgtPnApCi0JCWJ1Zl9sZW4gPSAoc2l6ZV90KUJOX251bV9ieXRlcyh4LT5wKTsKLQllbHNlCi0JCXsKLQkJcmVhc29uID0gRVJSX1JfUEFTU0VEX05VTExfUEFSQU1FVEVSOwotCQlnb3RvIGVycjsKLQkJfQotCWlmICh4LT5nKQotCQlpZiAoYnVmX2xlbiA8IChpID0gKHNpemVfdClCTl9udW1fYnl0ZXMoeC0+ZykpKQotCQkJYnVmX2xlbiA9IGk7Ci0JbT0odW5zaWduZWQgY2hhciAqKU9QRU5TU0xfbWFsbG9jKGJ1Zl9sZW4rMTApOwotCWlmIChtID09IE5VTEwpCi0JCXsKLQkJcmVhc29uPUVSUl9SX01BTExPQ19GQUlMVVJFOwotCQlnb3RvIGVycjsKLQkJfQotCi0JaWYgKEJJT19wcmludGYoYnAsIkRpZmZpZS1IZWxsbWFuLVBhcmFtZXRlcnM6ICglZCBiaXQpXG4iLAotCQlCTl9udW1fYml0cyh4LT5wKSkgPD0gMCkKLQkJZ290byBlcnI7Ci0JaWYgKCFwcmludChicCwicHJpbWU6Iix4LT5wLG0sNCkpIGdvdG8gZXJyOwotCWlmICghcHJpbnQoYnAsImdlbmVyYXRvcjoiLHgtPmcsbSw0KSkgZ290byBlcnI7Ci0JaWYgKHgtPmxlbmd0aCAhPSAwKQotCQl7Ci0JCWlmIChCSU9fcHJpbnRmKGJwLCIgICAgcmVjb21tZW5kZWQtcHJpdmF0ZS1sZW5ndGg6ICVkIGJpdHNcbiIsCi0JCQkoaW50KXgtPmxlbmd0aCkgPD0gMCkgZ290byBlcnI7Ci0JCX0KLQlyZXQ9MTsKLQlpZiAoMCkKLQkJewotZXJyOgotCQlESGVycihESF9GX0RIUEFSQU1TX1BSSU5ULHJlYXNvbik7Ci0JCX0KLQlpZiAobSAhPSBOVUxMKSBPUEVOU1NMX2ZyZWUobSk7Ci0JcmV0dXJuKHJldCk7Ci0JfQotI2VuZGlmCi0KLSNpZm5kZWYgT1BFTlNTTF9OT19EU0EKLSNpZm5kZWYgT1BFTlNTTF9OT19GUF9BUEkKLWludCBEU0FwYXJhbXNfcHJpbnRfZnAoRklMRSAqZnAsIGNvbnN0IERTQSAqeCkKLQl7Ci0JQklPICpiOwotCWludCByZXQ7Ci0KLQlpZiAoKGI9QklPX25ldyhCSU9fc19maWxlKCkpKSA9PSBOVUxMKQotCQl7Ci0JCURTQWVycihEU0FfRl9EU0FQQVJBTVNfUFJJTlRfRlAsRVJSX1JfQlVGX0xJQik7Ci0JCXJldHVybigwKTsKLQkJfQotCUJJT19zZXRfZnAoYixmcCxCSU9fTk9DTE9TRSk7Ci0JcmV0PURTQXBhcmFtc19wcmludChiLCB4KTsKLQlCSU9fZnJlZShiKTsKLQlyZXR1cm4ocmV0KTsKLQl9Ci0jZW5kaWYKLQotaW50IERTQXBhcmFtc19wcmludChCSU8gKmJwLCBjb25zdCBEU0EgKngpCi0JewotCXVuc2lnbmVkIGNoYXIgKm09TlVMTDsKLQlpbnQgcmV0PTA7Ci0Jc2l6ZV90IGJ1Zl9sZW49MCxpOwotCi0JaWYgKHgtPnApCi0JCWJ1Zl9sZW4gPSAoc2l6ZV90KUJOX251bV9ieXRlcyh4LT5wKTsKLQllbHNlCi0JCXsKLQkJRFNBZXJyKERTQV9GX0RTQVBBUkFNU19QUklOVCxEU0FfUl9NSVNTSU5HX1BBUkFNRVRFUlMpOwotCQlnb3RvIGVycjsKLQkJfQotCWlmICh4LT5xKQotCQlpZiAoYnVmX2xlbiA8IChpID0gKHNpemVfdClCTl9udW1fYnl0ZXMoeC0+cSkpKQotCQkJYnVmX2xlbiA9IGk7Ci0JaWYgKHgtPmcpCi0JCWlmIChidWZfbGVuIDwgKGkgPSAoc2l6ZV90KUJOX251bV9ieXRlcyh4LT5nKSkpCi0JCQlidWZfbGVuID0gaTsKLQltPSh1bnNpZ25lZCBjaGFyICopT1BFTlNTTF9tYWxsb2MoYnVmX2xlbisxMCk7Ci0JaWYgKG0gPT0gTlVMTCkKLQkJewotCQlEU0FlcnIoRFNBX0ZfRFNBUEFSQU1TX1BSSU5ULEVSUl9SX01BTExPQ19GQUlMVVJFKTsKLQkJZ290byBlcnI7Ci0JCX0KLQotCWlmIChCSU9fcHJpbnRmKGJwLCJEU0EtUGFyYW1ldGVyczogKCVkIGJpdClcbiIsCi0JCUJOX251bV9iaXRzKHgtPnApKSA8PSAwKQotCQlnb3RvIGVycjsKLQlpZiAoIXByaW50KGJwLCJwOiIseC0+cCxtLDQpKSBnb3RvIGVycjsKLQlpZiAoKHgtPnEgIT0gTlVMTCkgJiYgIXByaW50KGJwLCJxOiIseC0+cSxtLDQpKSBnb3RvIGVycjsKLQlpZiAoKHgtPmcgIT0gTlVMTCkgJiYgIXByaW50KGJwLCJnOiIseC0+ZyxtLDQpKSBnb3RvIGVycjsKLQlyZXQ9MTsKLWVycjoKLQlpZiAobSAhPSBOVUxMKSBPUEVOU1NMX2ZyZWUobSk7Ci0JcmV0dXJuKHJldCk7Ci0JfQotCi0jZW5kaWYgLyogIU9QRU5TU0xfTk9fRFNBICovCi0KLSNpZm5kZWYgT1BFTlNTTF9OT19FQwotI2lmbmRlZiBPUEVOU1NMX05PX0ZQX0FQSQotaW50IEVDUGFyYW1ldGVyc19wcmludF9mcChGSUxFICpmcCwgY29uc3QgRUNfS0VZICp4KQotCXsKLQlCSU8gKmI7Ci0JaW50IHJldDsKLSAKLQlpZiAoKGI9QklPX25ldyhCSU9fc19maWxlKCkpKSA9PSBOVUxMKQotCQl7Ci0JCUVDZXJyKEVDX0ZfRUNQQVJBTUVURVJTX1BSSU5UX0ZQLCBFUlJfUl9CSU9fTElCKTsKLQkJcmV0dXJuKDApOwotCQl9Ci0JQklPX3NldF9mcChiLCBmcCwgQklPX05PQ0xPU0UpOwotCXJldCA9IEVDUGFyYW1ldGVyc19wcmludChiLCB4KTsKLQlCSU9fZnJlZShiKTsKLQlyZXR1cm4ocmV0KTsKLQl9Ci0jZW5kaWYKLQotaW50IEVDUGFyYW1ldGVyc19wcmludChCSU8gKmJwLCBjb25zdCBFQ19LRVkgKngpCi0JewotCWludCAgICAgcmVhc29uPUVSUl9SX0VDX0xJQiwgcmV0PTA7Ci0JQklHTlVNCSpvcmRlcj1OVUxMOwotCWNvbnN0IEVDX0dST1VQICpncm91cDsKLSAKLQlpZiAoeCA9PSBOVUxMIHx8IChncm91cCA9IEVDX0tFWV9nZXQwX2dyb3VwKHgpKSA9PSBOVUxMKQotCQl7Ci0JCXJlYXNvbiA9IEVSUl9SX1BBU1NFRF9OVUxMX1BBUkFNRVRFUjs7Ci0JCWdvdG8gZXJyOwotCQl9Ci0KLQlpZiAoKG9yZGVyID0gQk5fbmV3KCkpID09IE5VTEwpCi0JCXsKLQkJcmVhc29uID0gRVJSX1JfTUFMTE9DX0ZBSUxVUkU7Ci0JCWdvdG8gZXJyOwotCQl9Ci0KLQlpZiAoIUVDX0dST1VQX2dldF9vcmRlcihncm91cCwgb3JkZXIsIE5VTEwpKQotCQl7Ci0JCXJlYXNvbiA9IEVSUl9SX0VDX0xJQjsKLQkJZ290byBlcnI7Ci0JCX0KLSAKLQlpZiAoQklPX3ByaW50ZihicCwgIkVDRFNBLVBhcmFtZXRlcnM6ICglZCBiaXQpXG4iLCAKLQkJQk5fbnVtX2JpdHMob3JkZXIpKSA8PSAwKQotCQlnb3RvIGVycjsKLQlpZiAoIUVDUEtQYXJhbWV0ZXJzX3ByaW50KGJwLCBncm91cCwgNCkpCi0JCWdvdG8gZXJyOwotCXJldD0xOwotZXJyOgotCWlmIChvcmRlcikKLQkJQk5fZnJlZShvcmRlcik7Ci0JRUNlcnIoRUNfRl9FQ1BBUkFNRVRFUlNfUFJJTlQsIHJlYXNvbik7Ci0JcmV0dXJuKHJldCk7Ci0JfQotICAKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FzbjEvdF9yZXEuYyBiL2NyeXB0by9hc24xL3RfcmVxLmMKaW5kZXggNTU1N2UwNi4uZWExNzk0ZSAxMDA2NDQKLS0tIGEvY3J5cHRvL2FzbjEvdF9yZXEuYworKysgYi9jcnlwdG8vYXNuMS90X3JlcS5jCkBAIC0xNDksMzQgKzE0OSwxMCBAQAogCQkJRVJSX3ByaW50X2Vycm9ycyhicCk7CiAJCQl9CiAJCWVsc2UKLSNpZm5kZWYgT1BFTlNTTF9OT19SU0EKLQkJaWYgKHBrZXktPnR5cGUgPT0gRVZQX1BLRVlfUlNBKQogCQkJewotCQkJQklPX3ByaW50ZihicCwiJTEyc1JTQSBQdWJsaWMgS2V5OiAoJWQgYml0KVxuIiwiIiwKLQkJCUJOX251bV9iaXRzKHBrZXktPnBrZXkucnNhLT5uKSk7Ci0JCQlSU0FfcHJpbnQoYnAscGtleS0+cGtleS5yc2EsMTYpOworCQkJRVZQX1BLRVlfcHJpbnRfcHVibGljKGJwLCBwa2V5LCAxNiwgTlVMTCk7CisJCQlFVlBfUEtFWV9mcmVlKHBrZXkpOwogCQkJfQotCQllbHNlCi0jZW5kaWYKLSNpZm5kZWYgT1BFTlNTTF9OT19EU0EKLQkJaWYgKHBrZXktPnR5cGUgPT0gRVZQX1BLRVlfRFNBKQotCQkJewotCQkJQklPX3ByaW50ZihicCwiJTEyc0RTQSBQdWJsaWMgS2V5OlxuIiwiIik7Ci0JCQlEU0FfcHJpbnQoYnAscGtleS0+cGtleS5kc2EsMTYpOwotCQkJfQotCQllbHNlCi0jZW5kaWYKLSNpZm5kZWYgT1BFTlNTTF9OT19FQwotCQlpZiAocGtleS0+dHlwZSA9PSBFVlBfUEtFWV9FQykKLQkJewotCQkJQklPX3ByaW50ZihicCwgIiUxMnNFQyBQdWJsaWMgS2V5OiBcbiIsIiIpOwotCQkJRUNfS0VZX3ByaW50KGJwLCBwa2V5LT5wa2V5LmVjLCAxNik7Ci0JCX0KLQllbHNlCi0jZW5kaWYKLQkJCUJJT19wcmludGYoYnAsIiUxMnNVbmtub3duIFB1YmxpYyBLZXk6XG4iLCIiKTsKLQotCQlFVlBfUEtFWV9mcmVlKHBrZXkpOwogCQl9CiAKIAlpZighKGNmbGFnICYgWDUwOV9GTEFHX05PX0FUVFJJQlVURVMpKQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FzbjEvdF9zcGtpLmMgYi9jcnlwdG8vYXNuMS90X3Nwa2kuYwppbmRleCBhNzMzNjliLi4wNzljMDgxIDEwMDY0NAotLS0gYS9jcnlwdG8vYXNuMS90X3Nwa2kuYworKysgYi9jcnlwdG8vYXNuMS90X3Nwa2kuYwpAQCAtODIsMzYgKzgyLDExIEBACiAJCQkJKGkgPT0gTklEX3VuZGVmKT8iVU5LTk9XTiI6T0JKX25pZDJsbihpKSk7CiAJcGtleSA9IFg1MDlfUFVCS0VZX2dldChzcGtpLT5zcGthYy0+cHVia2V5KTsKIAlpZighcGtleSkgQklPX3ByaW50ZihvdXQsICIgIFVuYWJsZSB0byBsb2FkIHB1YmxpYyBrZXlcbiIpOwotCWVsc2UgewotI2lmbmRlZiBPUEVOU1NMX05PX1JTQQotCQlpZiAocGtleS0+dHlwZSA9PSBFVlBfUEtFWV9SU0EpCi0JCQl7Ci0JCQlCSU9fcHJpbnRmKG91dCwiICBSU0EgUHVibGljIEtleTogKCVkIGJpdClcbiIsCi0JCQkJQk5fbnVtX2JpdHMocGtleS0+cGtleS5yc2EtPm4pKTsKLQkJCVJTQV9wcmludChvdXQscGtleS0+cGtleS5yc2EsMik7Ci0JCQl9Ci0JCWVsc2UgCi0jZW5kaWYKLSNpZm5kZWYgT1BFTlNTTF9OT19EU0EKLQkJaWYgKHBrZXktPnR5cGUgPT0gRVZQX1BLRVlfRFNBKQorCWVsc2UKIAkJewotCQlCSU9fcHJpbnRmKG91dCwiICBEU0EgUHVibGljIEtleTpcbiIpOwotCQlEU0FfcHJpbnQob3V0LHBrZXktPnBrZXkuZHNhLDIpOwotCQl9Ci0JCWVsc2UKLSNlbmRpZgotI2lmbmRlZiBPUEVOU1NMX05PX0VDCi0JCWlmIChwa2V5LT50eXBlID09IEVWUF9QS0VZX0VDKQotCQl7Ci0JCQlCSU9fcHJpbnRmKG91dCwgIiAgRUMgUHVibGljIEtleTpcbiIpOwotCQkJRUNfS0VZX3ByaW50KG91dCwgcGtleS0+cGtleS5lYywyKTsKLQkJfQotCQllbHNlCi0jZW5kaWYKLQotCQkJQklPX3ByaW50ZihvdXQsIiAgVW5rbm93biBQdWJsaWMgS2V5OlxuIik7CisJCUVWUF9QS0VZX3ByaW50X3B1YmxpYyhvdXQsIHBrZXksIDQsIE5VTEwpOwogCQlFVlBfUEtFWV9mcmVlKHBrZXkpOwotCX0KKwkJfQogCWNoYWwgPSBzcGtpLT5zcGthYy0+Y2hhbGxlbmdlOwogCWlmKGNoYWwtPmxlbmd0aCkKIAkJQklPX3ByaW50ZihvdXQsICIgIENoYWxsZW5nZSBTdHJpbmc6ICVzXG4iLCBjaGFsLT5kYXRhKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9hc24xL3RfeDUwOS5jIGIvY3J5cHRvL2FzbjEvdF94NTA5LmMKaW5kZXggNmYyOTViNC4uZTA2MWYyZiAxMDA2NDQKLS0tIGEvY3J5cHRvL2FzbjEvdF94NTA5LmMKKysrIGIvY3J5cHRvL2FzbjEvdF94NTA5LmMKQEAgLTExMSw3ICsxMTEsNiBAQAogCUFTTjFfSU5URUdFUiAqYnM7CiAJRVZQX1BLRVkgKnBrZXk9TlVMTDsKIAljb25zdCBjaGFyICpuZWc7Ci0JQVNOMV9TVFJJTkcgKnN0cj1OVUxMOwogCiAJaWYoKG5tZmxhZ3MgJiBYTl9GTEFHX1NFUF9NQVNLKSA9PSBYTl9GTEFHX1NFUF9NVUxUSUxJTkUpIHsKIAkJCW1sY2ggPSAnXG4nOwpAQCAtMjE1LDM0ICsyMTQsMTAgQEAKIAkJCUVSUl9wcmludF9lcnJvcnMoYnApOwogCQkJfQogCQllbHNlCi0jaWZuZGVmIE9QRU5TU0xfTk9fUlNBCi0JCWlmIChwa2V5LT50eXBlID09IEVWUF9QS0VZX1JTQSkKIAkJCXsKLQkJCUJJT19wcmludGYoYnAsIiUxMnNSU0EgUHVibGljIEtleTogKCVkIGJpdClcbiIsIiIsCi0JCQlCTl9udW1fYml0cyhwa2V5LT5wa2V5LnJzYS0+bikpOwotCQkJUlNBX3ByaW50KGJwLHBrZXktPnBrZXkucnNhLDE2KTsKKwkJCUVWUF9QS0VZX3ByaW50X3B1YmxpYyhicCwgcGtleSwgMTYsIE5VTEwpOworCQkJRVZQX1BLRVlfZnJlZShwa2V5KTsKIAkJCX0KLQkJZWxzZQotI2VuZGlmCi0jaWZuZGVmIE9QRU5TU0xfTk9fRFNBCi0JCWlmIChwa2V5LT50eXBlID09IEVWUF9QS0VZX0RTQSkKLQkJCXsKLQkJCUJJT19wcmludGYoYnAsIiUxMnNEU0EgUHVibGljIEtleTpcbiIsIiIpOwotCQkJRFNBX3ByaW50KGJwLHBrZXktPnBrZXkuZHNhLDE2KTsKLQkJCX0KLQkJZWxzZQotI2VuZGlmCi0jaWZuZGVmIE9QRU5TU0xfTk9fRUMKLQkJaWYgKHBrZXktPnR5cGUgPT0gRVZQX1BLRVlfRUMpCi0JCQl7Ci0JCQlCSU9fcHJpbnRmKGJwLCAiJTEyc0VDIFB1YmxpYyBLZXk6XG4iLCIiKTsKLQkJCUVDX0tFWV9wcmludChicCwgcGtleS0+cGtleS5lYywgMTYpOwotCQkJfQotCQllbHNlCi0jZW5kaWYKLQkJCUJJT19wcmludGYoYnAsIiUxMnNVbmtub3duIFB1YmxpYyBLZXk6XG4iLCIiKTsKLQotCQlFVlBfUEtFWV9mcmVlKHBrZXkpOwogCQl9CiAKIAlpZiAoIShjZmxhZyAmIFg1MDlfRkxBR19OT19FWFRFTlNJT05TKSkKQEAgLTI1OSw3ICsyMzQsNiBAQAogCQl9CiAJcmV0PTE7CiBlcnI6Ci0JaWYgKHN0ciAhPSBOVUxMKSBBU04xX1NUUklOR19mcmVlKHN0cik7CiAJaWYgKG0gIT0gTlVMTCkgT1BFTlNTTF9mcmVlKG0pOwogCXJldHVybihyZXQpOwogCX0KQEAgLTMyOSwxNCArMzAzLDE1IEBACiAJcmV0dXJuIDE7CiB9CiAKLWludCBBU04xX1NUUklOR19wcmludChCSU8gKmJwLCBBU04xX1NUUklORyAqdikKK2ludCBBU04xX1NUUklOR19wcmludChCSU8gKmJwLCBjb25zdCBBU04xX1NUUklORyAqdikKIAl7CiAJaW50IGksbjsKLQljaGFyIGJ1Zls4MF0sKnA7CisJY2hhciBidWZbODBdOworCWNvbnN0IGNoYXIgKnA7CiAKIAlpZiAodiA9PSBOVUxMKSByZXR1cm4oMCk7CiAJbj0wOwotCXA9KGNoYXIgKil2LT5kYXRhOworCXA9KGNvbnN0IGNoYXIgKil2LT5kYXRhOwogCWZvciAoaT0wOyBpPHYtPmxlbmd0aDsgaSsrKQogCQl7CiAJCWlmICgocFtpXSA+ICd+JykgfHwgKChwW2ldIDwgJyAnKSAmJgpAQCAtMzU4LDcgKzMzMyw3IEBACiAJcmV0dXJuKDEpOwogCX0KIAotaW50IEFTTjFfVElNRV9wcmludChCSU8gKmJwLCBBU04xX1RJTUUgKnRtKQoraW50IEFTTjFfVElNRV9wcmludChCSU8gKmJwLCBjb25zdCBBU04xX1RJTUUgKnRtKQogewogCWlmKHRtLT50eXBlID09IFZfQVNOMV9VVENUSU1FKSByZXR1cm4gQVNOMV9VVENUSU1FX3ByaW50KGJwLCB0bSk7CiAJaWYodG0tPnR5cGUgPT0gVl9BU04xX0dFTkVSQUxJWkVEVElNRSkKQEAgLTM3Myw3ICszNDgsNyBAQAogICAgICJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiCiAgICAgfTsKIAotaW50IEFTTjFfR0VORVJBTElaRURUSU1FX3ByaW50KEJJTyAqYnAsIEFTTjFfR0VORVJBTElaRURUSU1FICp0bSkKK2ludCBBU04xX0dFTkVSQUxJWkVEVElNRV9wcmludChCSU8gKmJwLCBjb25zdCBBU04xX0dFTkVSQUxJWkVEVElNRSAqdG0pCiAJewogCWNoYXIgKnY7CiAJaW50IGdtdD0wOwpAQCAtNDIxLDE1ICszOTYsMTUgQEAKIAlyZXR1cm4oMCk7CiAJfQogCi1pbnQgQVNOMV9VVENUSU1FX3ByaW50KEJJTyAqYnAsIEFTTjFfVVRDVElNRSAqdG0pCitpbnQgQVNOMV9VVENUSU1FX3ByaW50KEJJTyAqYnAsIGNvbnN0IEFTTjFfVVRDVElNRSAqdG0pCiAJewotCWNoYXIgKnY7CisJY29uc3QgY2hhciAqdjsKIAlpbnQgZ210PTA7CiAJaW50IGk7CiAJaW50IHk9MCxNPTAsZD0wLGg9MCxtPTAscz0wOwogCiAJaT10bS0+bGVuZ3RoOwotCXY9KGNoYXIgKil0bS0+ZGF0YTsKKwl2PShjb25zdCBjaGFyICopdG0tPmRhdGE7CiAKIAlpZiAoaSA8IDEwKSBnb3RvIGVycjsKIAlpZiAodltpLTFdID09ICdaJykgZ210PTE7CmRpZmYgLS1naXQgYS9jcnlwdG8vYXNuMS90YXNuX2RlYy5jIGIvY3J5cHRvL2FzbjEvdGFzbl9kZWMuYwppbmRleCA0OGJjMWMwLi4zYmVlNDM5IDEwMDY0NAotLS0gYS9jcnlwdG8vYXNuMS90YXNuX2RlYy5jCisrKyBiL2NyeXB0by9hc24xL3Rhc25fZGVjLmMKQEAgLTExNCw2ICsxMTQsOCBAQAogLyogTWFjcm8gdG8gaW5pdGlhbGl6ZSBhbmQgaW52YWxpZGF0ZSB0aGUgY2FjaGUgKi8KIAogI2RlZmluZSBhc24xX3RsY19jbGVhcihjKQlpZiAoYykgKGMpLT52YWxpZCA9IDAKKy8qIFZlcnNpb24gdG8gYXZvaWQgY29tcGlsZXIgd2FybmluZyBhYm91dCAnYycgYWx3YXlzIG5vbi1OVUxMICovCisjZGVmaW5lIGFzbjFfdGxjX2NsZWFyX25jKGMpCShjKS0+dmFsaWQgPSAwCiAKIC8qIERlY29kZSBhbiBBU04xIGl0ZW0sIHRoaXMgY3VycmVudGx5IGJlaGF2ZXMganVzdCAKICAqIGxpa2UgYSBzdGFuZGFyZCAnZDJpJyBmdW5jdGlvbi4gJ2luJyBwb2ludHMgdG8gCkBAIC0xMzAsNyArMTMyLDcgQEAKIAlBU04xX1ZBTFVFICpwdG1wdmFsID0gTlVMTDsKIAlpZiAoIXB2YWwpCiAJCXB2YWwgPSAmcHRtcHZhbDsKLQljLnZhbGlkID0gMDsKKwlhc24xX3RsY19jbGVhcl9uYygmYyk7CiAJaWYgKEFTTjFfaXRlbV9leF9kMmkocHZhbCwgaW4sIGxlbiwgaXQsIC0xLCAwLCAwLCAmYykgPiAwKSAKIAkJcmV0dXJuICpwdmFsOwogCXJldHVybiBOVUxMOwpAQCAtMTQwLDcgKzE0Miw3IEBACiAJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKippbiwgbG9uZyBsZW4sIGNvbnN0IEFTTjFfVEVNUExBVEUgKnR0KQogCXsKIAlBU04xX1RMQyBjOwotCWMudmFsaWQgPSAwOworCWFzbjFfdGxjX2NsZWFyX25jKCZjKTsKIAlyZXR1cm4gYXNuMV90ZW1wbGF0ZV9leF9kMmkocHZhbCwgaW4sIGxlbiwgdHQsIDAsICZjKTsKIAl9CiAKQEAgLTMwNiw3ICszMDgsNyBAQAogCiAKIAkJY2FzZSBBU04xX0lUWVBFX0NIT0lDRToKLQkJaWYgKGFzbjFfY2IgJiYgIWFzbjFfY2IoQVNOMV9PUF9EMklfUFJFLCBwdmFsLCBpdCkpCisJCWlmIChhc24xX2NiICYmICFhc24xX2NiKEFTTjFfT1BfRDJJX1BSRSwgcHZhbCwgaXQsIE5VTEwpKQogCQkJCWdvdG8gYXV4ZXJyOwogCiAJCS8qIEFsbG9jYXRlIHN0cnVjdHVyZSAqLwpAQCAtMzU2LDcgKzM1OCw3IEBACiAKIAkJYXNuMV9zZXRfY2hvaWNlX3NlbGVjdG9yKHB2YWwsIGksIGl0KTsKIAkJKmluID0gcDsKLQkJaWYgKGFzbjFfY2IgJiYgIWFzbjFfY2IoQVNOMV9PUF9EMklfUE9TVCwgcHZhbCwgaXQpKQorCQlpZiAoYXNuMV9jYiAmJiAhYXNuMV9jYihBU04xX09QX0QySV9QT1NULCBwdmFsLCBpdCwgTlVMTCkpCiAJCQkJZ290byBhdXhlcnI7CiAJCXJldHVybiAxOwogCkBAIC00MDMsNyArNDA1LDcgQEAKIAkJCWdvdG8gZXJyOwogCQkJfQogCi0JCWlmIChhc24xX2NiICYmICFhc24xX2NiKEFTTjFfT1BfRDJJX1BSRSwgcHZhbCwgaXQpKQorCQlpZiAoYXNuMV9jYiAmJiAhYXNuMV9jYihBU04xX09QX0QySV9QUkUsIHB2YWwsIGl0LCBOVUxMKSkKIAkJCQlnb3RvIGF1eGVycjsKIAogCQkvKiBHZXQgZWFjaCBmaWVsZCBlbnRyeSAqLwpAQCAtNTA1LDcgKzUwNyw3IEBACiAJCWlmICghYXNuMV9lbmNfc2F2ZShwdmFsLCAqaW4sIHAgLSAqaW4sIGl0KSkKIAkJCWdvdG8gYXV4ZXJyOwogCQkqaW4gPSBwOwotCQlpZiAoYXNuMV9jYiAmJiAhYXNuMV9jYihBU04xX09QX0QySV9QT1NULCBwdmFsLCBpdCkpCisJCWlmIChhc24xX2NiICYmICFhc24xX2NiKEFTTjFfT1BfRDJJX1BPU1QsIHB2YWwsIGl0LCBOVUxMKSkKIAkJCQlnb3RvIGF1eGVycjsKIAkJcmV0dXJuIDE7CiAKQEAgLTY2NSwxMSArNjY3LDEyIEBACiAJCWVsc2UKIAkJCXsKIAkJCS8qIFdlJ3ZlIGdvdCBhIHZhbGlkIFNUQUNLOiBmcmVlIHVwIGFueSBpdGVtcyBwcmVzZW50ICovCi0JCQlTVEFDSyAqc2t0bXAgPSAoU1RBQ0sgKikqdmFsOworCQkJU1RBQ0tfT0YoQVNOMV9WQUxVRSkgKnNrdG1wCisJCQkgICAgPSAoU1RBQ0tfT0YoQVNOMV9WQUxVRSkgKikqdmFsOwogCQkJQVNOMV9WQUxVRSAqdnRtcDsKLQkJCXdoaWxlKHNrX251bShza3RtcCkgPiAwKQorCQkJd2hpbGUoc2tfQVNOMV9WQUxVRV9udW0oc2t0bXApID4gMCkKIAkJCQl7Ci0JCQkJdnRtcCA9IChBU04xX1ZBTFVFICopc2tfcG9wKHNrdG1wKTsKKwkJCQl2dG1wID0gc2tfQVNOMV9WQUxVRV9wb3Aoc2t0bXApOwogCQkJCUFTTjFfaXRlbV9leF9mcmVlKCZ2dG1wLAogCQkJCQkJQVNOMV9JVEVNX3B0cih0dC0+aXRlbSkpOwogCQkJCX0KQEAgLTcxMCw3ICs3MTMsOCBAQAogCQkJCWdvdG8gZXJyOwogCQkJCX0KIAkJCWxlbiAtPSBwIC0gcTsKLQkJCWlmICghc2tfcHVzaCgoU1RBQ0sgKikqdmFsLCAoY2hhciAqKXNrZmllbGQpKQorCQkJaWYgKCFza19BU04xX1ZBTFVFX3B1c2goKFNUQUNLX09GKEFTTjFfVkFMVUUpICopKnZhbCwKKwkJCQkJCXNrZmllbGQpKQogCQkJCXsKIAkJCQlBU04xZXJyKEFTTjFfRl9BU04xX1RFTVBMQVRFX05PRVhQX0QySSwKIAkJCQkJCUVSUl9SX01BTExPQ19GQUlMVVJFKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9hc24xL3Rhc25fZW5jLmMgYi9jcnlwdG8vYXNuMS90YXNuX2VuYy5jCmluZGV4IDI3MjFmOTAuLjkzNmFkMWYgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hc24xL3Rhc25fZW5jLmMKKysrIGIvY3J5cHRvL2FzbjEvdGFzbl9lbmMuYwpAQCAtMTU4LDcgKzE1OCw3IEBACiAJCXJldHVybiBhc24xX2kyZF9leF9wcmltaXRpdmUocHZhbCwgb3V0LCBpdCwgLTEsIGFjbGFzcyk7CiAKIAkJY2FzZSBBU04xX0lUWVBFX0NIT0lDRToKLQkJaWYgKGFzbjFfY2IgJiYgIWFzbjFfY2IoQVNOMV9PUF9JMkRfUFJFLCBwdmFsLCBpdCkpCisJCWlmIChhc24xX2NiICYmICFhc24xX2NiKEFTTjFfT1BfSTJEX1BSRSwgcHZhbCwgaXQsIE5VTEwpKQogCQkJCXJldHVybiAwOwogCQlpID0gYXNuMV9nZXRfY2hvaWNlX3NlbGVjdG9yKHB2YWwsIGl0KTsKIAkJaWYgKChpID49IDApICYmIChpIDwgaXQtPnRjb3VudCkpCkBAIC0xNzEsNyArMTcxLDcgQEAKIAkJCQkJCQkJLTEsIGFjbGFzcyk7CiAJCQl9CiAJCS8qIEZpeG1lOiBlcnJvciBjb25kaXRpb24gaWYgc2VsZWN0b3Igb3V0IG9mIHJhbmdlICovCi0JCWlmIChhc24xX2NiICYmICFhc24xX2NiKEFTTjFfT1BfSTJEX1BPU1QsIHB2YWwsIGl0KSkKKwkJaWYgKGFzbjFfY2IgJiYgIWFzbjFfY2IoQVNOMV9PUF9JMkRfUE9TVCwgcHZhbCwgaXQsIE5VTEwpKQogCQkJCXJldHVybiAwOwogCQlicmVhazsKIApAQCAtMjE2LDcgKzIxNiw3IEBACiAJCQlhY2xhc3MgPSAoYWNsYXNzICYgfkFTTjFfVEZMR19UQUdfQ0xBU1MpCiAJCQkJCXwgVl9BU04xX1VOSVZFUlNBTDsKIAkJCX0KLQkJaWYgKGFzbjFfY2IgJiYgIWFzbjFfY2IoQVNOMV9PUF9JMkRfUFJFLCBwdmFsLCBpdCkpCisJCWlmIChhc24xX2NiICYmICFhc24xX2NiKEFTTjFfT1BfSTJEX1BSRSwgcHZhbCwgaXQsIE5VTEwpKQogCQkJCXJldHVybiAwOwogCQkvKiBGaXJzdCB3b3JrIG91dCBzZXF1ZW5jZSBjb250ZW50IGxlbmd0aCAqLwogCQlmb3IgKGkgPSAwLCB0dCA9IGl0LT50ZW1wbGF0ZXM7IGkgPCBpdC0+dGNvdW50OyB0dCsrLCBpKyspCkBAIC0yNTAsNyArMjUwLDcgQEAKIAkJCX0KIAkJaWYgKG5kZWYgPT0gMikKIAkJCUFTTjFfcHV0X2VvYyhvdXQpOwotCQlpZiAoYXNuMV9jYiAgJiYgIWFzbjFfY2IoQVNOMV9PUF9JMkRfUE9TVCwgcHZhbCwgaXQpKQorCQlpZiAoYXNuMV9jYiAmJiAhYXNuMV9jYihBU04xX09QX0kyRF9QT1NULCBwdmFsLCBpdCwgTlVMTCkpCiAJCQkJcmV0dXJuIDA7CiAJCXJldHVybiBzZXFsZW47CiAKQEAgLTU2OSw3ICs1NjksOCBAQAogCUFTTjFfU1RSSU5HICpzdHJ0bXA7CiAJQVNOMV9PQkpFQ1QgKm90bXA7CiAJaW50IHV0eXBlOwotCXVuc2lnbmVkIGNoYXIgKmNvbnQsIGM7CisJY29uc3QgdW5zaWduZWQgY2hhciAqY29udDsKKwl1bnNpZ25lZCBjaGFyIGM7CiAJaW50IGxlbjsKIAljb25zdCBBU04xX1BSSU1JVElWRV9GVU5DUyAqcGY7CiAJcGYgPSBpdC0+ZnVuY3M7CmRpZmYgLS1naXQgYS9jcnlwdG8vYXNuMS90YXNuX2ZyZS5jIGIvY3J5cHRvL2FzbjEvdGFzbl9mcmUuYwppbmRleCBkN2MwMTdmLi43N2QzMDkyIDEwMDY0NAotLS0gYS9jcnlwdG8vYXNuMS90YXNuX2ZyZS5jCisrKyBiL2NyeXB0by9hc24xL3Rhc25fZnJlLmMKQEAgLTExMCw3ICsxMTAsNyBAQAogCQljYXNlIEFTTjFfSVRZUEVfQ0hPSUNFOgogCQlpZiAoYXNuMV9jYikKIAkJCXsKLQkJCWkgPSBhc24xX2NiKEFTTjFfT1BfRlJFRV9QUkUsIHB2YWwsIGl0KTsKKwkJCWkgPSBhc24xX2NiKEFTTjFfT1BfRlJFRV9QUkUsIHB2YWwsIGl0LCBOVUxMKTsKIAkJCWlmIChpID09IDIpCiAJCQkJcmV0dXJuOwogCQkJfQpAQCAtMTIzLDcgKzEyMyw3IEBACiAJCQlBU04xX3RlbXBsYXRlX2ZyZWUocGNodmFsLCB0dCk7CiAJCQl9CiAJCWlmIChhc24xX2NiKQotCQkJYXNuMV9jYihBU04xX09QX0ZSRUVfUE9TVCwgcHZhbCwgaXQpOworCQkJYXNuMV9jYihBU04xX09QX0ZSRUVfUE9TVCwgcHZhbCwgaXQsIE5VTEwpOwogCQlpZiAoIWNvbWJpbmUpCiAJCQl7CiAJCQlPUEVOU1NMX2ZyZWUoKnB2YWwpOwpAQCAtMTQ5LDcgKzE0OSw3IEBACiAJCQlyZXR1cm47CiAJCWlmIChhc24xX2NiKQogCQkJewotCQkJaSA9IGFzbjFfY2IoQVNOMV9PUF9GUkVFX1BSRSwgcHZhbCwgaXQpOworCQkJaSA9IGFzbjFfY2IoQVNOMV9PUF9GUkVFX1BSRSwgcHZhbCwgaXQsIE5VTEwpOwogCQkJaWYgKGkgPT0gMikKIAkJCQlyZXR1cm47CiAJCQl9CQkKQEAgLTE3MCw3ICsxNzAsNyBAQAogCQkJQVNOMV90ZW1wbGF0ZV9mcmVlKHBzZXF2YWwsIHNlcXR0KTsKIAkJCX0KIAkJaWYgKGFzbjFfY2IpCi0JCQlhc24xX2NiKEFTTjFfT1BfRlJFRV9QT1NULCBwdmFsLCBpdCk7CisJCQlhc24xX2NiKEFTTjFfT1BfRlJFRV9QT1NULCBwdmFsLCBpdCwgTlVMTCk7CiAJCWlmICghY29tYmluZSkKIAkJCXsKIAkJCU9QRU5TU0xfZnJlZSgqcHZhbCk7CmRpZmYgLS1naXQgYS9jcnlwdG8vYXNuMS90YXNuX25ldy5jIGIvY3J5cHRvL2FzbjEvdGFzbl9uZXcuYwppbmRleCA1YzZhMmViLi4wZDllNzhjIDEwMDY0NAotLS0gYS9jcnlwdG8vYXNuMS90YXNuX25ldy5jCisrKyBiL2NyeXB0by9hc24xL3Rhc25fbmV3LmMKQEAgLTY4LDcgKzY4LDcgQEAKIAkJCQkJCQkJaW50IGNvbWJpbmUpOwogc3RhdGljIHZvaWQgYXNuMV9pdGVtX2NsZWFyKEFTTjFfVkFMVUUgKipwdmFsLCBjb25zdCBBU04xX0lURU0gKml0KTsKIHN0YXRpYyB2b2lkIGFzbjFfdGVtcGxhdGVfY2xlYXIoQVNOMV9WQUxVRSAqKnB2YWwsIGNvbnN0IEFTTjFfVEVNUExBVEUgKnR0KTsKLXZvaWQgYXNuMV9wcmltaXRpdmVfY2xlYXIoQVNOMV9WQUxVRSAqKnB2YWwsIGNvbnN0IEFTTjFfSVRFTSAqaXQpOworc3RhdGljIHZvaWQgYXNuMV9wcmltaXRpdmVfY2xlYXIoQVNOMV9WQUxVRSAqKnB2YWwsIGNvbnN0IEFTTjFfSVRFTSAqaXQpOwogCiBBU04xX1ZBTFVFICpBU04xX2l0ZW1fbmV3KGNvbnN0IEFTTjFfSVRFTSAqaXQpCiAJewpAQCAtMTQ2LDcgKzE0Niw3IEBACiAJCWNhc2UgQVNOMV9JVFlQRV9DSE9JQ0U6CiAJCWlmIChhc24xX2NiKQogCQkJewotCQkJaSA9IGFzbjFfY2IoQVNOMV9PUF9ORVdfUFJFLCBwdmFsLCBpdCk7CisJCQlpID0gYXNuMV9jYihBU04xX09QX05FV19QUkUsIHB2YWwsIGl0LCBOVUxMKTsKIAkJCWlmICghaSkKIAkJCQlnb3RvIGF1eGVycjsKIAkJCWlmIChpPT0yKQpAQCAtMTY2LDcgKzE2Niw3IEBACiAJCQltZW1zZXQoKnB2YWwsIDAsIGl0LT5zaXplKTsKIAkJCX0KIAkJYXNuMV9zZXRfY2hvaWNlX3NlbGVjdG9yKHB2YWwsIC0xLCBpdCk7Ci0JCWlmIChhc24xX2NiICYmICFhc24xX2NiKEFTTjFfT1BfTkVXX1BPU1QsIHB2YWwsIGl0KSkKKwkJaWYgKGFzbjFfY2IgJiYgIWFzbjFfY2IoQVNOMV9PUF9ORVdfUE9TVCwgcHZhbCwgaXQsIE5VTEwpKQogCQkJCWdvdG8gYXV4ZXJyOwogCQlicmVhazsKIApAQCAtMTc0LDcgKzE3NCw3IEBACiAJCWNhc2UgQVNOMV9JVFlQRV9TRVFVRU5DRToKIAkJaWYgKGFzbjFfY2IpCiAJCQl7Ci0JCQlpID0gYXNuMV9jYihBU04xX09QX05FV19QUkUsIHB2YWwsIGl0KTsKKwkJCWkgPSBhc24xX2NiKEFTTjFfT1BfTkVXX1BSRSwgcHZhbCwgaXQsIE5VTEwpOwogCQkJaWYgKCFpKQogCQkJCWdvdG8gYXV4ZXJyOwogCQkJaWYgKGk9PTIpCkBAIC0yMDEsNyArMjAxLDcgQEAKIAkJCWlmICghQVNOMV90ZW1wbGF0ZV9uZXcocHNlcXZhbCwgdHQpKQogCQkJCWdvdG8gbWVtZXJyOwogCQkJfQotCQlpZiAoYXNuMV9jYiAmJiAhYXNuMV9jYihBU04xX09QX05FV19QT1NULCBwdmFsLCBpdCkpCisJCWlmIChhc24xX2NiICYmICFhc24xX2NiKEFTTjFfT1BfTkVXX1BPU1QsIHB2YWwsIGl0LCBOVUxMKSkKIAkJCQlnb3RvIGF1eGVycjsKIAkJYnJlYWs7CiAJfQpAQCAtMzI1LDYgKzMyNSw3IEBACiBpbnQgQVNOMV9wcmltaXRpdmVfbmV3KEFTTjFfVkFMVUUgKipwdmFsLCBjb25zdCBBU04xX0lURU0gKml0KQogCXsKIAlBU04xX1RZUEUgKnR5cDsKKwlBU04xX1NUUklORyAqc3RyOwogCWludCB1dHlwZTsKIAogCWlmIChpdCAmJiBpdC0+ZnVuY3MpCkBAIC0zNDUsMTAgKzM0Niw3IEBACiAJCXJldHVybiAxOwogCiAJCWNhc2UgVl9BU04xX0JPT0xFQU46Ci0JCWlmIChpdCkKLQkJCSooQVNOMV9CT09MRUFOICopcHZhbCA9IGl0LT5zaXplOwotCQllbHNlCi0JCQkqKEFTTjFfQk9PTEVBTiAqKXB2YWwgPSAtMTsKKwkJKihBU04xX0JPT0xFQU4gKilwdmFsID0gaXQtPnNpemU7CiAJCXJldHVybiAxOwogCiAJCWNhc2UgVl9BU04xX05VTEw6CkBAIC0zNjUsNyArMzYzLDEwIEBACiAJCWJyZWFrOwogCiAJCWRlZmF1bHQ6Ci0JCSpwdmFsID0gKEFTTjFfVkFMVUUgKilBU04xX1NUUklOR190eXBlX25ldyh1dHlwZSk7CisJCXN0ciA9IEFTTjFfU1RSSU5HX3R5cGVfbmV3KHV0eXBlKTsKKwkJaWYgKGl0LT5pdHlwZSA9PSBBU04xX0lUWVBFX01TVFJJTkcgJiYgc3RyKQorCQkJc3RyLT5mbGFncyB8PSBBU04xX1NUUklOR19GTEFHX01TVFJJTkc7CisJCSpwdmFsID0gKEFTTjFfVkFMVUUgKilzdHI7CiAJCWJyZWFrOwogCQl9CiAJaWYgKCpwdmFsKQpAQCAtMzczLDcgKzM3NCw3IEBACiAJcmV0dXJuIDA7CiAJfQogCi12b2lkIGFzbjFfcHJpbWl0aXZlX2NsZWFyKEFTTjFfVkFMVUUgKipwdmFsLCBjb25zdCBBU04xX0lURU0gKml0KQorc3RhdGljIHZvaWQgYXNuMV9wcmltaXRpdmVfY2xlYXIoQVNOMV9WQUxVRSAqKnB2YWwsIGNvbnN0IEFTTjFfSVRFTSAqaXQpCiAJewogCWludCB1dHlwZTsKIAlpZiAoaXQgJiYgaXQtPmZ1bmNzKQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FzbjEvdGFzbl9wcm4uYyBiL2NyeXB0by9hc24xL3Rhc25fcHJuLmMKaW5kZXggYjljOTZhNi4uNDUzNjk4MCAxMDA2NDQKLS0tIGEvY3J5cHRvL2FzbjEvdGFzbl9wcm4uYworKysgYi9jcnlwdG8vYXNuMS90YXNuX3Bybi5jCkBAIC0zLDcgKzMsNyBAQAogICogcHJvamVjdCAyMDAwLgogICovCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChjKSAyMDAwIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDAwLDIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU4LDE0MSArNTgsNTcwIEBACiAKIAogI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgImNyeXB0bGliLmgiCiAjaW5jbHVkZSA8b3BlbnNzbC9hc24xLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9hc24xdC5oPgogI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgogI2luY2x1ZGUgPG9wZW5zc2wvYnVmZmVyLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSNpbmNsdWRlIDxvcGVuc3NsL25hc24uaD4KKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgorI2luY2x1ZGUgImFzbjFfbG9jbC5oIgogCi0vKiBQcmludCByb3V0aW5lcy4gUHJpbnQgb3V0IGEgd2hvbGUgc3RydWN0dXJlIGZyb20gYSB0ZW1wbGF0ZS4KKy8qIFByaW50IHJvdXRpbmVzLgogICovCiAKLXN0YXRpYyBpbnQgYXNuMV9pdGVtX3ByaW50X25tKEJJTyAqb3V0LCB2b2lkICpmbGQsIGludCBpbmRlbnQsIGNvbnN0IEFTTjFfSVRFTSAqaXQsIGNvbnN0IGNoYXIgKm5hbWUpOworLyogQVNOMV9QQ1RYIHJvdXRpbmVzICovCiAKLWludCBBU04xX2l0ZW1fcHJpbnQoQklPICpvdXQsIHZvaWQgKmZsZCwgaW50IGluZGVudCwgY29uc3QgQVNOMV9JVEVNICppdCkKLXsKLQlyZXR1cm4gYXNuMV9pdGVtX3ByaW50X25tKG91dCwgZmxkLCBpbmRlbnQsIGl0LCBpdC0+c25hbWUpOwotfQorQVNOMV9QQ1RYIGRlZmF1bHRfcGN0eCA9IAorCXsKKwlBU04xX1BDVFhfRkxBR1NfU0hPV19BQlNFTlQsCS8qIGZsYWdzICovCisJMCwJLyogbm1fZmxhZ3MgKi8KKwkwLAkvKiBjZXJ0X2ZsYWdzICovCisJMCwJLyogb2lkX2ZsYWdzICovCisJMAkvKiBzdHJfZmxhZ3MgKi8KKwl9OworCQogCi1zdGF0aWMgaW50IGFzbjFfaXRlbV9wcmludF9ubShCSU8gKm91dCwgdm9pZCAqZmxkLCBpbnQgaW5kZW50LCBjb25zdCBBU04xX0lURU0gKml0LCBjb25zdCBjaGFyICpuYW1lKQotewotCUFTTjFfU1RSSU5HICpzdHI7Ci0JY29uc3QgQVNOMV9URU1QTEFURSAqdHQ7Ci0Jdm9pZCAqdG1wZmxkOwotCWludCBpOwotCWlmKCFmbGQpIHsKLQkJQklPX3ByaW50ZihvdXQsICIlKnMlcyBBQlNFTlRcbiIsIGluZGVudCwgIiIsIG5hbWUpOwotCQlyZXR1cm4gMTsKK0FTTjFfUENUWCAqQVNOMV9QQ1RYX25ldyh2b2lkKQorCXsKKwlBU04xX1BDVFggKnJldDsKKwlyZXQgPSBPUEVOU1NMX21hbGxvYyhzaXplb2YoQVNOMV9QQ1RYKSk7CisJaWYgKHJldCA9PSBOVUxMKQorCQl7CisJCUFTTjFlcnIoQVNOMV9GX0FTTjFfUENUWF9ORVcsIEVSUl9SX01BTExPQ19GQUlMVVJFKTsKKwkJcmV0dXJuIE5VTEw7CisJCX0KKwlyZXQtPmZsYWdzID0gMDsKKwlyZXQtPm5tX2ZsYWdzID0gMDsKKwlyZXQtPmNlcnRfZmxhZ3MgPSAwOworCXJldC0+b2lkX2ZsYWdzID0gMDsKKwlyZXQtPnN0cl9mbGFncyA9IDA7CisJcmV0dXJuIHJldDsKIAl9Ci0Jc3dpdGNoKGl0LT5pdHlwZSkgewogCit2b2lkIEFTTjFfUENUWF9mcmVlKEFTTjFfUENUWCAqcCkKKwl7CisJT1BFTlNTTF9mcmVlKHApOworCX0KKwordW5zaWduZWQgbG9uZyBBU04xX1BDVFhfZ2V0X2ZsYWdzKEFTTjFfUENUWCAqcCkKKwl7CisJcmV0dXJuIHAtPmZsYWdzOworCX0KKwordm9pZCBBU04xX1BDVFhfc2V0X2ZsYWdzKEFTTjFfUENUWCAqcCwgdW5zaWduZWQgbG9uZyBmbGFncykKKwl7CisJcC0+ZmxhZ3MgPSBmbGFnczsKKwl9CisKK3Vuc2lnbmVkIGxvbmcgQVNOMV9QQ1RYX2dldF9ubV9mbGFncyhBU04xX1BDVFggKnApCisJeworCXJldHVybiBwLT5ubV9mbGFnczsKKwl9CisKK3ZvaWQgQVNOMV9QQ1RYX3NldF9ubV9mbGFncyhBU04xX1BDVFggKnAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCisJeworCXAtPm5tX2ZsYWdzID0gZmxhZ3M7CisJfQorCit1bnNpZ25lZCBsb25nIEFTTjFfUENUWF9nZXRfY2VydF9mbGFncyhBU04xX1BDVFggKnApCisJeworCXJldHVybiBwLT5jZXJ0X2ZsYWdzOworCX0KKwordm9pZCBBU04xX1BDVFhfc2V0X2NlcnRfZmxhZ3MoQVNOMV9QQ1RYICpwLCB1bnNpZ25lZCBsb25nIGZsYWdzKQorCXsKKwlwLT5jZXJ0X2ZsYWdzID0gZmxhZ3M7CisJfQorCit1bnNpZ25lZCBsb25nIEFTTjFfUENUWF9nZXRfb2lkX2ZsYWdzKEFTTjFfUENUWCAqcCkKKwl7CisJcmV0dXJuIHAtPm9pZF9mbGFnczsKKwl9CisKK3ZvaWQgQVNOMV9QQ1RYX3NldF9vaWRfZmxhZ3MoQVNOMV9QQ1RYICpwLCB1bnNpZ25lZCBsb25nIGZsYWdzKQorCXsKKwlwLT5vaWRfZmxhZ3MgPSBmbGFnczsKKwl9CisKK3Vuc2lnbmVkIGxvbmcgQVNOMV9QQ1RYX2dldF9zdHJfZmxhZ3MoQVNOMV9QQ1RYICpwKQorCXsKKwlyZXR1cm4gcC0+c3RyX2ZsYWdzOworCX0KKwordm9pZCBBU04xX1BDVFhfc2V0X3N0cl9mbGFncyhBU04xX1BDVFggKnAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCisJeworCXAtPnN0cl9mbGFncyA9IGZsYWdzOworCX0KKworLyogTWFpbiBwcmludCByb3V0aW5lcyAqLworCitzdGF0aWMgaW50IGFzbjFfaXRlbV9wcmludF9jdHgoQklPICpvdXQsIEFTTjFfVkFMVUUgKipmbGQsIGludCBpbmRlbnQsCisJCQkJY29uc3QgQVNOMV9JVEVNICppdCwKKwkJCQljb25zdCBjaGFyICpmbmFtZSwgY29uc3QgY2hhciAqc25hbWUsCisJCQkJaW50IG5vaGRyLCBjb25zdCBBU04xX1BDVFggKnBjdHgpOworCitpbnQgYXNuMV90ZW1wbGF0ZV9wcmludF9jdHgoQklPICpvdXQsIEFTTjFfVkFMVUUgKipmbGQsIGludCBpbmRlbnQsCisJCQkJY29uc3QgQVNOMV9URU1QTEFURSAqdHQsIGNvbnN0IEFTTjFfUENUWCAqcGN0eCk7CisKK3N0YXRpYyBpbnQgYXNuMV9wcmltaXRpdmVfcHJpbnQoQklPICpvdXQsIEFTTjFfVkFMVUUgKipmbGQsCisJCQkJY29uc3QgQVNOMV9JVEVNICppdCwgaW50IGluZGVudCwKKwkJCQljb25zdCBjaGFyICpmbmFtZSwgY29uc3QgY2hhciAqc25hbWUsCisJCQkJY29uc3QgQVNOMV9QQ1RYICpwY3R4KTsKKworc3RhdGljIGludCBhc24xX3ByaW50X2ZzbmFtZShCSU8gKm91dCwgaW50IGluZGVudCwKKwkJCWNvbnN0IGNoYXIgKmZuYW1lLCBjb25zdCBjaGFyICpzbmFtZSwKKwkJCWNvbnN0IEFTTjFfUENUWCAqcGN0eCk7CisKK2ludCBBU04xX2l0ZW1fcHJpbnQoQklPICpvdXQsIEFTTjFfVkFMVUUgKmlmbGQsIGludCBpbmRlbnQsCisJCQkJY29uc3QgQVNOMV9JVEVNICppdCwgY29uc3QgQVNOMV9QQ1RYICpwY3R4KQorCXsKKwljb25zdCBjaGFyICpzbmFtZTsKKwlpZiAocGN0eCA9PSBOVUxMKQorCQlwY3R4ID0gJmRlZmF1bHRfcGN0eDsKKwlpZiAocGN0eC0+ZmxhZ3MgJiBBU04xX1BDVFhfRkxBR1NfTk9fU1RSVUNUX05BTUUpCisJCXNuYW1lID0gTlVMTDsKKwllbHNlCisJCXNuYW1lID0gaXQtPnNuYW1lOworCXJldHVybiBhc24xX2l0ZW1fcHJpbnRfY3R4KG91dCwgJmlmbGQsIGluZGVudCwgaXQsCisJCQkJCQkJTlVMTCwgc25hbWUsIDAsIHBjdHgpOworCX0KKworc3RhdGljIGludCBhc24xX2l0ZW1fcHJpbnRfY3R4KEJJTyAqb3V0LCBBU04xX1ZBTFVFICoqZmxkLCBpbnQgaW5kZW50LAorCQkJCWNvbnN0IEFTTjFfSVRFTSAqaXQsCisJCQkJY29uc3QgY2hhciAqZm5hbWUsIGNvbnN0IGNoYXIgKnNuYW1lLAorCQkJCWludCBub2hkciwgY29uc3QgQVNOMV9QQ1RYICpwY3R4KQorCXsKKwljb25zdCBBU04xX1RFTVBMQVRFICp0dDsKKwljb25zdCBBU04xX0VYVEVSTl9GVU5DUyAqZWY7CisJQVNOMV9WQUxVRSAqKnRtcGZsZDsKKwljb25zdCBBU04xX0FVWCAqYXV4ID0gaXQtPmZ1bmNzOworCUFTTjFfYXV4X2NiICphc24xX2NiOworCUFTTjFfUFJJTlRfQVJHIHBhcmc7CisJaW50IGk7CisJaWYgKGF1eCAmJiBhdXgtPmFzbjFfY2IpCisJCXsKKwkJcGFyZy5vdXQgPSBvdXQ7CisJCXBhcmcuaW5kZW50ID0gaW5kZW50OworCQlwYXJnLnBjdHggPSBwY3R4OworCQlhc24xX2NiID0gYXV4LT5hc24xX2NiOworCQl9CisJZWxzZSBhc24xX2NiID0gMDsKKworCWlmKCpmbGQgPT0gTlVMTCkKKwkJeworCQlpZiAocGN0eC0+ZmxhZ3MgJiBBU04xX1BDVFhfRkxBR1NfU0hPV19BQlNFTlQpCisJCQl7CisJCQlpZiAoIW5vaGRyICYmICFhc24xX3ByaW50X2ZzbmFtZShvdXQsIGluZGVudCwKKwkJCQkJCQlmbmFtZSwgc25hbWUsIHBjdHgpKQorCQkJCXJldHVybiAwOworCQkJaWYgKEJJT19wdXRzKG91dCwgIjxBQlNFTlQ+XG4iKSA8PSAwKQorCQkJCXJldHVybiAwOworCQkJfQorCQlyZXR1cm4gMTsKKwkJfQorCisJc3dpdGNoKGl0LT5pdHlwZSkKKwkJewogCQljYXNlIEFTTjFfSVRZUEVfUFJJTUlUSVZFOgogCQlpZihpdC0+dGVtcGxhdGVzKQotCQkJcmV0dXJuIEFTTjFfdGVtcGxhdGVfcHJpbnQob3V0LCBmbGQsIGluZGVudCwgaXQtPnRlbXBsYXRlcyk7Ci0JCXJldHVybiBhc24xX3ByaW1pdGl2ZV9wcmludChvdXQsIGZsZCwgaXQtPnV0eXBlLCBpbmRlbnQsIG5hbWUpOworCQkJeworCQkJaWYgKCFhc24xX3RlbXBsYXRlX3ByaW50X2N0eChvdXQsIGZsZCwgaW5kZW50LAorCQkJCQkJCWl0LT50ZW1wbGF0ZXMsIHBjdHgpKQorCQkJCXJldHVybiAwOworCQkJfQorCQkvKiBmYWxsIHRocnUgKi8KKwkJY2FzZSBBU04xX0lUWVBFX01TVFJJTkc6CisJCWlmICghYXNuMV9wcmltaXRpdmVfcHJpbnQob3V0LCBmbGQsIGl0LAorCQkJCWluZGVudCwgZm5hbWUsIHNuYW1lLHBjdHgpKQorCQkJcmV0dXJuIDA7CiAJCWJyZWFrOwogCi0JCWNhc2UgQVNOMV9JVFlQRV9NU1RSSU5HOgotCQlzdHIgPSBmbGQ7Ci0JCXJldHVybiBhc24xX3ByaW1pdGl2ZV9wcmludChvdXQsIGZsZCwgc3RyLT50eXBlLCBpbmRlbnQsIG5hbWUpOwotCiAJCWNhc2UgQVNOMV9JVFlQRV9FWFRFUk46Ci0JCUJJT19wcmludGYob3V0LCAiJSpzJXM6RVhURVJOQUwgVFlQRSAlcyAlc1xuIiwgaW5kZW50LCAiIiwgbmFtZSwgaXQtPnNuYW1lLCBmbGQgPyAiIiA6ICJBQlNFTlQiKTsKLQkJcmV0dXJuIDE7Ci0JCWNhc2UgQVNOMV9JVFlQRV9DT01QQVQ6Ci0JCUJJT19wcmludGYob3V0LCAiJSpzJXM6Q09NUEFUSUJMRSBUWVBFICVzICVzXG4iLCBpbmRlbnQsICIiLCBuYW1lLCBpdC0+c25hbWUsIGZsZCA/ICIiIDogIkFCU0VOVCIpOwotCQlyZXR1cm4gMTsKLQorCQlpZiAoIW5vaGRyICYmICFhc24xX3ByaW50X2ZzbmFtZShvdXQsIGluZGVudCwgZm5hbWUsIHNuYW1lLCBwY3R4KSkKKwkJCXJldHVybiAwOworCQkvKiBVc2UgbmV3IHN0eWxlIHByaW50IHJvdXRpbmUgaWYgcG9zc2libGUgKi8KKwkJZWYgPSBpdC0+ZnVuY3M7CisJCWlmIChlZiAmJiBlZi0+YXNuMV9leF9wcmludCkKKwkJCXsKKwkJCWkgPSBlZi0+YXNuMV9leF9wcmludChvdXQsIGZsZCwgaW5kZW50LCAiIiwgcGN0eCk7CisJCQlpZiAoIWkpCisJCQkJcmV0dXJuIDA7CisJCQlpZiAoKGkgPT0gMikgJiYgKEJJT19wdXRzKG91dCwgIlxuIikgPD0gMCkpCisJCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gMTsKKwkJCX0KKwkJZWxzZSBpZiAoc25hbWUgJiYgCisJCQlCSU9fcHJpbnRmKG91dCwgIjpFWFRFUk5BTCBUWVBFICVzXG4iLCBzbmFtZSkgPD0gMCkKKwkJCXJldHVybiAwOworCQlicmVhazsKIAogCQljYXNlIEFTTjFfSVRZUEVfQ0hPSUNFOgorI2lmIDAKKwkJaWYgKCFub2hkciAmJiAhYXNuMV9wcmludF9mc25hbWUob3V0LCBpbmRlbnQsIGZuYW1lLCBzbmFtZSwgcGN0eCkpCisJCQlyZXR1cm4gMDsKKyNlbmRpZgogCQkvKiBDSE9JQ0UgdHlwZSwgZ2V0IHNlbGVjdG9yICovCiAJCWkgPSBhc24xX2dldF9jaG9pY2Vfc2VsZWN0b3IoZmxkLCBpdCk7CiAJCS8qIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4uLiAqLwotCQlpZigoaSA8IDApIHx8IChpID49IGl0LT50Y291bnQpKSB7Ci0JCQlCSU9fcHJpbnRmKG91dCwgIiVzIHNlbGVjdG9yIFslZF0gb3V0IG9mIHJhbmdlXG4iLCBpdC0+c25hbWUsIGkpOworCQlpZigoaSA8IDApIHx8IChpID49IGl0LT50Y291bnQpKQorCQkJeworCQkJaWYgKEJJT19wcmludGYob3V0LAorCQkJCSJFUlJPUjogc2VsZWN0b3IgWyVkXSBpbnZhbGlkXG4iLCBpKSA8PSAwKQorCQkJCXJldHVybiAwOwogCQkJcmV0dXJuIDE7Ci0JCX0KKwkJCX0KIAkJdHQgPSBpdC0+dGVtcGxhdGVzICsgaTsKLQkJdG1wZmxkID0gYXNuMV9nZXRfZmllbGQoZmxkLCB0dCk7Ci0JCXJldHVybiBBU04xX3RlbXBsYXRlX3ByaW50KG91dCwgdG1wZmxkLCBpbmRlbnQsIHR0KTsKKwkJdG1wZmxkID0gYXNuMV9nZXRfZmllbGRfcHRyKGZsZCwgdHQpOworCQlpZiAoIWFzbjFfdGVtcGxhdGVfcHJpbnRfY3R4KG91dCwgdG1wZmxkLCBpbmRlbnQsIHR0LCBwY3R4KSkKKwkJCXJldHVybiAwOworCQlicmVhazsKIAogCQljYXNlIEFTTjFfSVRZUEVfU0VRVUVOQ0U6Ci0JCUJJT19wcmludGYob3V0LCAiJSpzJXMge1xuIiwgaW5kZW50LCAiIiwgbmFtZSk7Ci0JCS8qIEdldCBlYWNoIGZpZWxkIGVudHJ5ICovCi0JCWZvcihpID0gMCwgdHQgPSBpdC0+dGVtcGxhdGVzOyBpIDwgaXQtPnRjb3VudDsgaSsrLCB0dCsrKSB7Ci0JCQl0bXBmbGQgPSBhc24xX2dldF9maWVsZChmbGQsIHR0KTsKLQkJCUFTTjFfdGVtcGxhdGVfcHJpbnQob3V0LCB0bXBmbGQsIGluZGVudCArIDIsIHR0KTsKLQkJfQotCQlCSU9fcHJpbnRmKG91dCwgIiUqc31cbiIsIGluZGVudCwgIiIpOwotCQlyZXR1cm4gMTsKKwkJY2FzZSBBU04xX0lUWVBFX05ERUZfU0VRVUVOQ0U6CisJCWlmICghbm9oZHIgJiYgIWFzbjFfcHJpbnRfZnNuYW1lKG91dCwgaW5kZW50LCBmbmFtZSwgc25hbWUsIHBjdHgpKQorCQkJcmV0dXJuIDA7CisJCWlmIChmbmFtZSB8fCBzbmFtZSkKKwkJCXsKKwkJCWlmIChwY3R4LT5mbGFncyAmIEFTTjFfUENUWF9GTEFHU19TSE9XX1NFUVVFTkNFKQorCQkJCXsKKwkJCQlpZiAoQklPX3B1dHMob3V0LCAiIHtcbiIpIDw9IDApCisJCQkJCXJldHVybiAwOworCQkJCX0KKwkJCWVsc2UKKwkJCQl7CisJCQkJaWYgKEJJT19wdXRzKG91dCwgIlxuIikgPD0gMCkKKwkJCQkJcmV0dXJuIDA7CisJCQkJfQorCQkJfQorCisJCWlmIChhc24xX2NiKQorCQkJeworCQkJaSA9IGFzbjFfY2IoQVNOMV9PUF9QUklOVF9QUkUsIGZsZCwgaXQsICZwYXJnKTsKKwkJCWlmIChpID09IDApCisJCQkJcmV0dXJuIDA7CisJCQlpZiAoaSA9PSAyKQorCQkJCXJldHVybiAxOworCQkJfQorCisJCS8qIFByaW50IGVhY2ggZmllbGQgZW50cnkgKi8KKwkJZm9yKGkgPSAwLCB0dCA9IGl0LT50ZW1wbGF0ZXM7IGkgPCBpdC0+dGNvdW50OyBpKyssIHR0KyspCisJCQl7CisJCQljb25zdCBBU04xX1RFTVBMQVRFICpzZXF0dDsKKwkJCXNlcXR0ID0gYXNuMV9kb19hZGIoZmxkLCB0dCwgMSk7CisJCQl0bXBmbGQgPSBhc24xX2dldF9maWVsZF9wdHIoZmxkLCBzZXF0dCk7CisJCQlpZiAoIWFzbjFfdGVtcGxhdGVfcHJpbnRfY3R4KG91dCwgdG1wZmxkLAorCQkJCQkJaW5kZW50ICsgMiwgc2VxdHQsIHBjdHgpKQorCQkJCXJldHVybiAwOworCQkJfQorCQlpZiAocGN0eC0+ZmxhZ3MgJiBBU04xX1BDVFhfRkxBR1NfU0hPV19TRVFVRU5DRSkKKwkJCXsKKwkJCWlmIChCSU9fcHJpbnRmKG91dCwgIiUqc31cbiIsIGluZGVudCwgIiIpIDwgMCkKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKworCQlpZiAoYXNuMV9jYikKKwkJCXsKKwkJCWkgPSBhc24xX2NiKEFTTjFfT1BfUFJJTlRfUE9TVCwgZmxkLCBpdCwgJnBhcmcpOworCQkJaWYgKGkgPT0gMCkKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKKwkJQklPX3ByaW50ZihvdXQsICJVbnByb2Nlc3NlZCB0eXBlICVkXG4iLCBpdC0+aXR5cGUpOwogCQlyZXR1cm4gMDsKLQl9Ci19Ci0KLWludCBBU04xX3RlbXBsYXRlX3ByaW50KEJJTyAqb3V0LCB2b2lkICpmbGQsIGludCBpbmRlbnQsIGNvbnN0IEFTTjFfVEVNUExBVEUgKnR0KQotewotCWludCBpLCBmbGFnczsKLSNpZiAwCi0JaWYoIWZsZCkgcmV0dXJuIDA7IAotI2VuZGlmCi0JZmxhZ3MgPSB0dC0+ZmxhZ3M7Ci0JaWYoZmxhZ3MgJiBBU04xX1RGTEdfU0tfTUFTSykgewotCQljaGFyICp0bmFtZTsKLQkJdm9pZCAqc2tpdGVtOwotCQkvKiBTRVQgT0YsIFNFUVVFTkNFIE9GICovCi0JCWlmKGZsYWdzICYgQVNOMV9URkxHX1NFVF9PRikgdG5hbWUgPSAiU0VUIjsKLQkJZWxzZSB0bmFtZSA9ICJTRVFVRU5DRSI7Ci0JCWlmKGZsZCkgewotCQkJQklPX3ByaW50ZihvdXQsICIlKnMlcyBPRiAlcyB7XG4iLCBpbmRlbnQsICIiLCB0bmFtZSwgdHQtPmZpZWxkX25hbWUpOwotCQkJZm9yKGkgPSAwOyBpIDwgc2tfbnVtKGZsZCk7IGkrKykgewotCQkJCXNraXRlbSA9IHNrX3ZhbHVlKGZsZCwgaSk7Ci0JCQkJYXNuMV9pdGVtX3ByaW50X25tKG91dCwgc2tpdGVtLCBpbmRlbnQgKyAyLCB0dC0+aXRlbSwgIiIpOwotCQkJfQotCQkJQklPX3ByaW50ZihvdXQsICIlKnN9XG4iLCBpbmRlbnQsICIiKTsKLQkJfSBlbHNlIAotCQkJQklPX3ByaW50ZihvdXQsICIlKnMlcyBPRiAlcyBBQlNFTlRcbiIsIGluZGVudCwgIiIsIHRuYW1lLCB0dC0+ZmllbGRfbmFtZSk7Ci0JCXJldHVybiAxOwotCX0KLQlyZXR1cm4gYXNuMV9pdGVtX3ByaW50X25tKG91dCwgZmxkLCBpbmRlbnQsIHR0LT5pdGVtLCB0dC0+ZmllbGRfbmFtZSk7Ci19Ci0KLXN0YXRpYyBpbnQgYXNuMV9wcmltaXRpdmVfcHJpbnQoQklPICpvdXQsIHZvaWQgKmZsZCwgbG9uZyB1dHlwZSwgaW50IGluZGVudCwgY29uc3QgY2hhciAqbmFtZSkKLXsKLQlBU04xX1NUUklORyAqc3RyID0gZmxkOwotCWlmKGZsZCkgewotCQlpZih1dHlwZSA9PSBWX0FTTjFfQk9PTEVBTikgewotCQkJaW50ICpib29sID0gZmxkOwotaWYoKmJvb2wgPT0gLTEpIHByaW50ZigiQk9PTCBNSVNTSU5HXG4iKTsKLQkJCUJJT19wcmludGYob3V0LCAiJSpzJXM6JXMiLCBpbmRlbnQsICIiLCAiQk9PTEVBTiIsICpib29sID8gIlRSVUUiIDogIkZBTFNFIik7Ci0JCX0gZWxzZSBpZigodXR5cGUgPT0gVl9BU04xX0lOVEVHRVIpIAotCQkJICB8fCAodXR5cGUgPT0gVl9BU04xX0VOVU1FUkFURUQpKSB7Ci0JCQljaGFyICpzLCAqbm07Ci0JCQlzID0gaTJzX0FTTjFfSU5URUdFUihOVUxMLCBmbGQpOwotCQkJaWYodXR5cGUgPT0gVl9BU04xX0lOVEVHRVIpIG5tID0gIklOVEVHRVIiOwotCQkJZWxzZSBubSA9ICJFTlVNRVJBVEVEIjsKLQkJCUJJT19wcmludGYob3V0LCAiJSpzJXM6JXMiLCBpbmRlbnQsICIiLCBubSwgcyk7Ci0JCQlPUEVOU1NMX2ZyZWUocyk7Ci0JCX0gZWxzZSBpZih1dHlwZSA9PSBWX0FTTjFfTlVMTCkgewotCQkJQklPX3ByaW50ZihvdXQsICIlKnMlcyIsIGluZGVudCwgIiIsICJOVUxMIik7Ci0JCX0gZWxzZSBpZih1dHlwZSA9PSBWX0FTTjFfVVRDVElNRSkgewotCQkJQklPX3ByaW50ZihvdXQsICIlKnMlczolczoiLCBpbmRlbnQsICIiLCBuYW1lLCAiVVRDVElNRSIpOwotCQkJQVNOMV9VVENUSU1FX3ByaW50KG91dCwgc3RyKTsKLQkJfSBlbHNlIGlmKHV0eXBlID09IFZfQVNOMV9HRU5FUkFMSVpFRFRJTUUpIHsKLQkJCUJJT19wcmludGYob3V0LCAiJSpzJXM6JXM6IiwgaW5kZW50LCAiIiwgbmFtZSwgIkdFTkVSQUxJWkVEVElNRSIpOwotCQkJQVNOMV9HRU5FUkFMSVpFRFRJTUVfcHJpbnQob3V0LCBzdHIpOwotCQl9IGVsc2UgaWYodXR5cGUgPT0gVl9BU04xX09CSkVDVCkgewotCQkJY2hhciBvYmpidWZbODBdLCAqbG47Ci0JCQlsbiA9IE9CSl9uaWQybG4oT0JKX29iajJuaWQoZmxkKSk7Ci0JCQlpZighbG4pIGxuID0gIiI7Ci0JCQlPQkpfb2JqMnR4dChvYmpidWYsIHNpemVvZiBvYmpidWYsIGZsZCwgMSk7Ci0JCQlCSU9fcHJpbnRmKG91dCwgIiUqcyVzOiVzICglcykiLCBpbmRlbnQsICIiLCAiT0JKRUNUIiwgbG4sIG9iamJ1Zik7Ci0JCX0gZWxzZSB7Ci0JCQlCSU9fcHJpbnRmKG91dCwgIiUqcyVzOiIsIGluZGVudCwgIiIsIG5hbWUpOwotCQkJQVNOMV9TVFJJTkdfcHJpbnRfZXgob3V0LCBzdHIsIEFTTjFfU1RSRkxHU19EVU1QX1VOS05PV058QVNOMV9TVFJGTEdTX1NIT1dfVFlQRSk7CiAJCX0KLQkJQklPX3ByaW50ZihvdXQsICJcbiIpOwotCX0gZWxzZSBCSU9fcHJpbnRmKG91dCwgIiUqcyVzIFtBQlNFTlRdXG4iLCBpbmRlbnQsICIiLCBuYW1lKTsKKwogCXJldHVybiAxOwotfQorCX0KKworaW50IGFzbjFfdGVtcGxhdGVfcHJpbnRfY3R4KEJJTyAqb3V0LCBBU04xX1ZBTFVFICoqZmxkLCBpbnQgaW5kZW50LAorCQkJCWNvbnN0IEFTTjFfVEVNUExBVEUgKnR0LCBjb25zdCBBU04xX1BDVFggKnBjdHgpCisJeworCWludCBpLCBmbGFnczsKKwljb25zdCBjaGFyICpzbmFtZSwgKmZuYW1lOworCWZsYWdzID0gdHQtPmZsYWdzOworCWlmKHBjdHgtPmZsYWdzICYgQVNOMV9QQ1RYX0ZMQUdTX1NIT1dfRklFTERfU1RSVUNUX05BTUUpCisJCXNuYW1lID0gQVNOMV9JVEVNX3B0cih0dC0+aXRlbSktPnNuYW1lOworCWVsc2UKKwkJc25hbWUgPSBOVUxMOworCWlmKHBjdHgtPmZsYWdzICYgQVNOMV9QQ1RYX0ZMQUdTX05PX0ZJRUxEX05BTUUpCisJCWZuYW1lID0gTlVMTDsKKwllbHNlCisJCWZuYW1lID0gdHQtPmZpZWxkX25hbWU7CisJaWYoZmxhZ3MgJiBBU04xX1RGTEdfU0tfTUFTSykKKwkJeworCQljaGFyICp0bmFtZTsKKwkJQVNOMV9WQUxVRSAqc2tpdGVtOworCQlTVEFDS19PRihBU04xX1ZBTFVFKSAqc3RhY2s7CisKKwkJLyogU0VUIE9GLCBTRVFVRU5DRSBPRiAqLworCQlpZiAoZm5hbWUpCisJCQl7CisJCQlpZihwY3R4LT5mbGFncyAmIEFTTjFfUENUWF9GTEFHU19TSE9XX1NTT0YpCisJCQkJeworCQkJCWlmKGZsYWdzICYgQVNOMV9URkxHX1NFVF9PRikKKwkJCQkJdG5hbWUgPSAiU0VUIjsKKwkJCQllbHNlCisJCQkJCXRuYW1lID0gIlNFUVVFTkNFIjsKKwkJCQlpZiAoQklPX3ByaW50ZihvdXQsICIlKnMlcyBPRiAlcyB7XG4iLAorCQkJCQlpbmRlbnQsICIiLCB0bmFtZSwgdHQtPmZpZWxkX25hbWUpIDw9IDApCisJCQkJCXJldHVybiAwOworCQkJCX0KKwkJCWVsc2UgaWYgKEJJT19wcmludGYob3V0LCAiJSpzJXM6XG4iLCBpbmRlbnQsICIiLAorCQkJCQlmbmFtZSkgPD0gMCkKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJc3RhY2sgPSAoU1RBQ0tfT0YoQVNOMV9WQUxVRSkgKikqZmxkOworCQlmb3IoaSA9IDA7IGkgPCBza19BU04xX1ZBTFVFX251bShzdGFjayk7IGkrKykKKwkJCXsKKwkJCWlmICgoaSA+IDApICYmIChCSU9fcHV0cyhvdXQsICJcbiIpIDw9IDApKQorCQkJCXJldHVybiAwOworCisJCQlza2l0ZW0gPSBza19BU04xX1ZBTFVFX3ZhbHVlKHN0YWNrLCBpKTsKKwkJCWlmICghYXNuMV9pdGVtX3ByaW50X2N0eChvdXQsICZza2l0ZW0sIGluZGVudCArIDIsCisJCQkJQVNOMV9JVEVNX3B0cih0dC0+aXRlbSksIE5VTEwsIE5VTEwsIDEsIHBjdHgpKQorCQkJCXJldHVybiAwOworCQkJfQorCQlpZiAoIWkgJiYgQklPX3ByaW50ZihvdXQsICIlKnM8RU1QVFk+XG4iLCBpbmRlbnQgKyAyLCAiIikgPD0gMCkKKwkJCQlyZXR1cm4gMDsKKwkJaWYocGN0eC0+ZmxhZ3MgJiBBU04xX1BDVFhfRkxBR1NfU0hPV19TRVFVRU5DRSkKKwkJCXsKKwkJCWlmIChCSU9fcHJpbnRmKG91dCwgIiUqc31cbiIsIGluZGVudCwgIiIpIDw9IDApCisJCQkJcmV0dXJuIDA7CisJCQl9CisJCXJldHVybiAxOworCQl9CisJcmV0dXJuIGFzbjFfaXRlbV9wcmludF9jdHgob3V0LCBmbGQsIGluZGVudCwgQVNOMV9JVEVNX3B0cih0dC0+aXRlbSksCisJCQkJCQkJZm5hbWUsIHNuYW1lLCAwLCBwY3R4KTsKKwl9CisKK3N0YXRpYyBpbnQgYXNuMV9wcmludF9mc25hbWUoQklPICpvdXQsIGludCBpbmRlbnQsCisJCQljb25zdCBjaGFyICpmbmFtZSwgY29uc3QgY2hhciAqc25hbWUsCisJCQljb25zdCBBU04xX1BDVFggKnBjdHgpCisJeworCXN0YXRpYyBjaGFyIHNwYWNlc1tdID0gIiAgICAgICAgICAgICAgICAgICAgIjsKKwljb25zdCBpbnQgbnNwYWNlcyA9IHNpemVvZihzcGFjZXMpIC0gMTsKKworI2lmIDAKKwlpZiAoIXNuYW1lICYmICFmbmFtZSkKKwkJcmV0dXJuIDE7CisjZW5kaWYKKworCXdoaWxlIChpbmRlbnQgPiBuc3BhY2VzKQorCQl7CisJCWlmIChCSU9fd3JpdGUob3V0LCBzcGFjZXMsIG5zcGFjZXMpICE9IG5zcGFjZXMpCisJCQlyZXR1cm4gMDsKKwkJaW5kZW50IC09IG5zcGFjZXM7CisJCX0KKwlpZiAoQklPX3dyaXRlKG91dCwgc3BhY2VzLCBpbmRlbnQpICE9IGluZGVudCkKKwkJcmV0dXJuIDA7CisJaWYgKHBjdHgtPmZsYWdzICYgQVNOMV9QQ1RYX0ZMQUdTX05PX1NUUlVDVF9OQU1FKQorCQlzbmFtZSA9IE5VTEw7CisJaWYgKHBjdHgtPmZsYWdzICYgQVNOMV9QQ1RYX0ZMQUdTX05PX0ZJRUxEX05BTUUpCisJCWZuYW1lID0gTlVMTDsKKwlpZiAoIXNuYW1lICYmICFmbmFtZSkKKwkJcmV0dXJuIDE7CisJaWYgKGZuYW1lKQorCQl7CisJCWlmIChCSU9fcHV0cyhvdXQsIGZuYW1lKSA8PSAwKQorCQkJcmV0dXJuIDA7CisJCX0KKwlpZiAoc25hbWUpCisJCXsKKwkJaWYgKGZuYW1lKQorCQkJeworCQkJaWYgKEJJT19wcmludGYob3V0LCAiICglcykiLCBzbmFtZSkgPD0gMCkKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJZWxzZQorCQkJeworCQkJaWYgKEJJT19wdXRzKG91dCwgc25hbWUpIDw9IDApCisJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKwlpZiAoQklPX3dyaXRlKG91dCwgIjogIiwgMikgIT0gMikKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7CisJfQorCitzdGF0aWMgaW50IGFzbjFfcHJpbnRfYm9vbGVhbl9jdHgoQklPICpvdXQsIGNvbnN0IGludCBib29sLAorCQkJCQkJCWNvbnN0IEFTTjFfUENUWCAqcGN0eCkKKwl7CisJY29uc3QgY2hhciAqc3RyOworCXN3aXRjaCAoYm9vbCkKKwkJeworCQljYXNlIC0xOgorCQlzdHIgPSAiQk9PTCBBQlNFTlQiOworCQlicmVhazsKKworCQljYXNlIDA6CisJCXN0ciA9ICJGQUxTRSI7CisJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCXN0ciA9ICJUUlVFIjsKKwkJYnJlYWs7CisKKwkJfQorCisJaWYgKEJJT19wdXRzKG91dCwgc3RyKSA8PSAwKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKKworCX0KKworc3RhdGljIGludCBhc24xX3ByaW50X2ludGVnZXJfY3R4KEJJTyAqb3V0LCBBU04xX0lOVEVHRVIgKnN0ciwKKwkJCQkJCWNvbnN0IEFTTjFfUENUWCAqcGN0eCkKKwl7CisJY2hhciAqczsKKwlpbnQgcmV0ID0gMTsKKwlzID0gaTJzX0FTTjFfSU5URUdFUihOVUxMLCBzdHIpOworCWlmIChCSU9fcHV0cyhvdXQsIHMpIDw9IDApCisJCXJldCA9IDA7CisJT1BFTlNTTF9mcmVlKHMpOworCXJldHVybiByZXQ7CisJfQorCitzdGF0aWMgaW50IGFzbjFfcHJpbnRfb2lkX2N0eChCSU8gKm91dCwgY29uc3QgQVNOMV9PQkpFQ1QgKm9pZCwKKwkJCQkJCWNvbnN0IEFTTjFfUENUWCAqcGN0eCkKKwl7CisJY2hhciBvYmpidWZbODBdOworCWNvbnN0IGNoYXIgKmxuOworCWxuID0gT0JKX25pZDJsbihPQkpfb2JqMm5pZChvaWQpKTsKKwlpZighbG4pCisJCWxuID0gIiI7CisJT0JKX29iajJ0eHQob2JqYnVmLCBzaXplb2Ygb2JqYnVmLCBvaWQsIDEpOworCWlmIChCSU9fcHJpbnRmKG91dCwgIiVzICglcykiLCBsbiwgb2JqYnVmKSA8PSAwKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKKwl9CisKK3N0YXRpYyBpbnQgYXNuMV9wcmludF9vYnN0cmluZ19jdHgoQklPICpvdXQsIEFTTjFfU1RSSU5HICpzdHIsIGludCBpbmRlbnQsCisJCQkJCQljb25zdCBBU04xX1BDVFggKnBjdHgpCisJeworCWlmIChzdHItPnR5cGUgPT0gVl9BU04xX0JJVF9TVFJJTkcpCisJCXsKKwkJaWYgKEJJT19wcmludGYob3V0LCAiICglbGQgdW51c2VkIGJpdHMpXG4iLAorCQkJCQlzdHItPmZsYWdzICYgMHg3KSA8PSAwKQorCQkJCXJldHVybiAwOworCQl9CisJZWxzZSBpZiAoQklPX3B1dHMob3V0LCAiXG4iKSA8PSAwKQorCQlyZXR1cm4gMDsKKwlpZiAoKHN0ci0+bGVuZ3RoID4gMCkKKwkJJiYgQklPX2R1bXBfaW5kZW50KG91dCwgKGNoYXIgKilzdHItPmRhdGEsIHN0ci0+bGVuZ3RoLAorCQkJCWluZGVudCArIDIpIDw9IDApCisJCXJldHVybiAwOworCXJldHVybiAxOworCX0KKworc3RhdGljIGludCBhc24xX3ByaW1pdGl2ZV9wcmludChCSU8gKm91dCwgQVNOMV9WQUxVRSAqKmZsZCwKKwkJCQljb25zdCBBU04xX0lURU0gKml0LCBpbnQgaW5kZW50LAorCQkJCWNvbnN0IGNoYXIgKmZuYW1lLCBjb25zdCBjaGFyICpzbmFtZSwKKwkJCQljb25zdCBBU04xX1BDVFggKnBjdHgpCisJeworCWxvbmcgdXR5cGU7CisJQVNOMV9TVFJJTkcgKnN0cjsKKwlpbnQgcmV0ID0gMSwgbmVlZGxmID0gMTsKKwljb25zdCBjaGFyICpwbmFtZTsKKwljb25zdCBBU04xX1BSSU1JVElWRV9GVU5DUyAqcGY7CisJcGYgPSBpdC0+ZnVuY3M7CisJaWYgKCFhc24xX3ByaW50X2ZzbmFtZShvdXQsIGluZGVudCwgZm5hbWUsIHNuYW1lLCBwY3R4KSkKKwkJCXJldHVybiAwOworCWlmIChwZiAmJiBwZi0+cHJpbV9wcmludCkKKwkJcmV0dXJuIHBmLT5wcmltX3ByaW50KG91dCwgZmxkLCBpdCwgaW5kZW50LCBwY3R4KTsKKwlzdHIgPSAoQVNOMV9TVFJJTkcgKikqZmxkOworCWlmIChpdC0+aXR5cGUgPT0gQVNOMV9JVFlQRV9NU1RSSU5HKQorCQl1dHlwZSA9IHN0ci0+dHlwZSAmIH5WX0FTTjFfTkVHOworCWVsc2UKKwkJdXR5cGUgPSBpdC0+dXR5cGU7CisJaWYgKHV0eXBlID09IFZfQVNOMV9BTlkpCisJCXsKKwkJQVNOMV9UWVBFICphdHlwZSA9IChBU04xX1RZUEUgKikqZmxkOworCQl1dHlwZSA9IGF0eXBlLT50eXBlOworCQlmbGQgPSAmYXR5cGUtPnZhbHVlLmFzbjFfdmFsdWU7CisJCXN0ciA9IChBU04xX1NUUklORyAqKSpmbGQ7CisJCWlmIChwY3R4LT5mbGFncyAmIEFTTjFfUENUWF9GTEFHU19OT19BTllfVFlQRSkKKwkJCXBuYW1lID0gTlVMTDsKKwkJZWxzZSAKKwkJCXBuYW1lID0gQVNOMV90YWcyc3RyKHV0eXBlKTsKKwkJfQorCWVsc2UKKwkJeworCQlpZiAocGN0eC0+ZmxhZ3MgJiBBU04xX1BDVFhfRkxBR1NfU0hPV19UWVBFKQorCQkJcG5hbWUgPSBBU04xX3RhZzJzdHIodXR5cGUpOworCQllbHNlIAorCQkJcG5hbWUgPSBOVUxMOworCQl9CisKKwlpZiAodXR5cGUgPT0gVl9BU04xX05VTEwpCisJCXsKKwkJaWYgKEJJT19wdXRzKG91dCwgIk5VTExcbiIpIDw9IDApCisJCQlyZXR1cm4gMDsKKwkJcmV0dXJuIDE7CisJCX0KKworCWlmIChwbmFtZSkKKwkJeworCQlpZiAoQklPX3B1dHMob3V0LCBwbmFtZSkgPD0gMCkKKwkJCXJldHVybiAwOworCQlpZiAoQklPX3B1dHMob3V0LCAiOiIpIDw9IDApCisJCQlyZXR1cm4gMDsKKwkJfQorCisJc3dpdGNoICh1dHlwZSkKKwkJeworCQljYXNlIFZfQVNOMV9CT09MRUFOOgorCQkJeworCQkJaW50IGJvb2wgPSAqKGludCAqKWZsZDsKKwkJCWlmIChib29sID09IC0xKQorCQkJCWJvb2wgPSBpdC0+c2l6ZTsKKwkJCXJldCA9IGFzbjFfcHJpbnRfYm9vbGVhbl9jdHgob3V0LCBib29sLCBwY3R4KTsKKwkJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBWX0FTTjFfSU5URUdFUjoKKwkJY2FzZSBWX0FTTjFfRU5VTUVSQVRFRDoKKwkJcmV0ID0gYXNuMV9wcmludF9pbnRlZ2VyX2N0eChvdXQsIHN0ciwgcGN0eCk7CisJCWJyZWFrOworCisJCWNhc2UgVl9BU04xX1VUQ1RJTUU6CisJCXJldCA9IEFTTjFfVVRDVElNRV9wcmludChvdXQsIHN0cik7CisJCWJyZWFrOworCisJCWNhc2UgVl9BU04xX0dFTkVSQUxJWkVEVElNRToKKwkJcmV0ID0gQVNOMV9HRU5FUkFMSVpFRFRJTUVfcHJpbnQob3V0LCBzdHIpOworCQlicmVhazsKKworCQljYXNlIFZfQVNOMV9PQkpFQ1Q6CisJCXJldCA9IGFzbjFfcHJpbnRfb2lkX2N0eChvdXQsIChjb25zdCBBU04xX09CSkVDVCAqKSpmbGQsIHBjdHgpOworCQlicmVhazsKKworCQljYXNlIFZfQVNOMV9PQ1RFVF9TVFJJTkc6CisJCWNhc2UgVl9BU04xX0JJVF9TVFJJTkc6CisJCXJldCA9IGFzbjFfcHJpbnRfb2JzdHJpbmdfY3R4KG91dCwgc3RyLCBpbmRlbnQsIHBjdHgpOworCQluZWVkbGYgPSAwOworCQlicmVhazsKKworCQljYXNlIFZfQVNOMV9TRVFVRU5DRToKKwkJY2FzZSBWX0FTTjFfU0VUOgorCQljYXNlIFZfQVNOMV9PVEhFUjoKKwkJaWYgKEJJT19wdXRzKG91dCwgIlxuIikgPD0gMCkKKwkJCXJldHVybiAwOworCQlpZiAoQVNOMV9wYXJzZV9kdW1wKG91dCwgc3RyLT5kYXRhLCBzdHItPmxlbmd0aCwKKwkJCQkJCWluZGVudCwgMCkgPD0gMCkKKwkJCXJldCA9IDA7CisJCW5lZWRsZiA9IDA7CisJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCXJldCA9IEFTTjFfU1RSSU5HX3ByaW50X2V4KG91dCwgc3RyLCBwY3R4LT5zdHJfZmxhZ3MpOworCisJCX0KKwlpZiAoIXJldCkKKwkJcmV0dXJuIDA7CisJaWYgKG5lZWRsZiAmJiBCSU9fcHV0cyhvdXQsICJcbiIpIDw9IDApCisJCXJldHVybiAwOworCXJldHVybiAxOworCX0KZGlmZiAtLWdpdCBhL2NyeXB0by9hc24xL3Rhc25fdHlwLmMgYi9jcnlwdG8vYXNuMS90YXNuX3R5cC5jCmluZGV4IDYyNTIyMTMuLjZmYjFjMzcgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hc24xL3Rhc25fdHlwLmMKKysrIGIvY3J5cHRvL2FzbjEvdGFzbl90eXAuYwpAQCAtMTM1LDMgKzEzNSwxNCBAQAogLyogU3BlY2lhbCwgT0NURVQgU1RSSU5HIHdpdGggaW5kZWZpbml0ZSBsZW5ndGggY29uc3RydWN0ZWQgc3VwcG9ydCAqLwogCiBJTVBMRU1FTlRfQVNOMV9UWVBFX2V4KEFTTjFfT0NURVRfU1RSSU5HX05ERUYsIEFTTjFfT0NURVRfU1RSSU5HLCBBU04xX1RGTEdfTkRFRikKKworQVNOMV9JVEVNX1RFTVBMQVRFKEFTTjFfU0VRVUVOQ0VfQU5ZKSA9IAorCUFTTjFfRVhfVEVNUExBVEVfVFlQRShBU04xX1RGTEdfU0VRVUVOQ0VfT0YsIDAsIEFTTjFfU0VRVUVOQ0VfQU5ZLCBBU04xX0FOWSkKK0FTTjFfSVRFTV9URU1QTEFURV9FTkQoQVNOMV9TRVFVRU5DRV9BTlkpCisKK0FTTjFfSVRFTV9URU1QTEFURShBU04xX1NFVF9BTlkpID0gCisJQVNOMV9FWF9URU1QTEFURV9UWVBFKEFTTjFfVEZMR19TRVRfT0YsIDAsIEFTTjFfU0VUX0FOWSwgQVNOMV9BTlkpCitBU04xX0lURU1fVEVNUExBVEVfRU5EKEFTTjFfU0VUX0FOWSkKKworSU1QTEVNRU5UX0FTTjFfRU5DT0RFX0ZVTkNUSU9OU19jb25zdF9mbmFtZShBU04xX1NFUVVFTkNFX0FOWSwgQVNOMV9TRVFVRU5DRV9BTlksIEFTTjFfU0VRVUVOQ0VfQU5ZKQorSU1QTEVNRU5UX0FTTjFfRU5DT0RFX0ZVTkNUSU9OU19jb25zdF9mbmFtZShBU04xX1NFUVVFTkNFX0FOWSwgQVNOMV9TRVRfQU5ZLCBBU04xX1NFVF9BTlkpCmRpZmYgLS1naXQgYS9jcnlwdG8vYXNuMS94X2NybC5jIGIvY3J5cHRvL2FzbjEveF9jcmwuYwppbmRleCA3MGQ1NmE2Li5jNTFjNjkwIDEwMDY0NAotLS0gYS9jcnlwdG8vYXNuMS94X2NybC5jCisrKyBiL2NyeXB0by9hc24xL3hfY3JsLmMKQEAgLTU4LDExICs1OCwxNCBAQAogCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlICJjcnlwdGxpYi5oIgorI2luY2x1ZGUgImFzbjFfbG9jbC5oIgogI2luY2x1ZGUgPG9wZW5zc2wvYXNuMXQuaD4KICNpbmNsdWRlIDxvcGVuc3NsL3g1MDkuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgogCiBzdGF0aWMgaW50IFg1MDlfUkVWT0tFRF9jbXAoY29uc3QgWDUwOV9SRVZPS0VEICogY29uc3QgKmEsCiAJCQkJY29uc3QgWDUwOV9SRVZPS0VEICogY29uc3QgKmIpOworc3RhdGljIHZvaWQgc2V0dXBfaWRwKFg1MDlfQ1JMICpjcmwsIElTU1VJTkdfRElTVF9QT0lOVCAqaWRwKTsKIAogQVNOMV9TRVFVRU5DRShYNTA5X1JFVk9LRUQpID0gewogCUFTTjFfU0lNUExFKFg1MDlfUkVWT0tFRCxzZXJpYWxOdW1iZXIsIEFTTjFfSU5URUdFUiksCkBAIC03MCwxMSArNzMsMjYgQEAKIAlBU04xX1NFUVVFTkNFX09GX09QVChYNTA5X1JFVk9LRUQsZXh0ZW5zaW9ucywgWDUwOV9FWFRFTlNJT04pCiB9IEFTTjFfU0VRVUVOQ0VfRU5EKFg1MDlfUkVWT0tFRCkKIAorc3RhdGljIGludCBkZWZfY3JsX3ZlcmlmeShYNTA5X0NSTCAqY3JsLCBFVlBfUEtFWSAqcik7CitzdGF0aWMgaW50IGRlZl9jcmxfbG9va3VwKFg1MDlfQ1JMICpjcmwsCisJCVg1MDlfUkVWT0tFRCAqKnJldCwgQVNOMV9JTlRFR0VSICpzZXJpYWwsIFg1MDlfTkFNRSAqaXNzdWVyKTsKKworc3RhdGljIFg1MDlfQ1JMX01FVEhPRCBpbnRfY3JsX21ldGggPQorCXsKKwkwLAorCTAsMCwKKwlkZWZfY3JsX2xvb2t1cCwKKwlkZWZfY3JsX3ZlcmlmeQorCX07CisKK3N0YXRpYyBjb25zdCBYNTA5X0NSTF9NRVRIT0QgKmRlZmF1bHRfY3JsX21ldGhvZCA9ICZpbnRfY3JsX21ldGg7CisKIC8qIFRoZSBYNTA5X0NSTF9JTkZPIHN0cnVjdHVyZSBuZWVkcyBhIGJpdCBvZiBjdXN0b21pc2F0aW9uLgogICogU2luY2Ugd2UgY2FjaGUgdGhlIG9yaWdpbmFsIGVuY29kaW5nIHRoZSBzaWduYXR1cmUgd29udCBiZSBhZmZlY3RlZCBieQogICogcmVvcmRlcmluZyBvZiB0aGUgcmV2b2tlZCBmaWVsZC4KICAqLwotc3RhdGljIGludCBjcmxfaW5mX2NiKGludCBvcGVyYXRpb24sIEFTTjFfVkFMVUUgKipwdmFsLCBjb25zdCBBU04xX0lURU0gKml0KQorc3RhdGljIGludCBjcmxfaW5mX2NiKGludCBvcGVyYXRpb24sIEFTTjFfVkFMVUUgKipwdmFsLCBjb25zdCBBU04xX0lURU0gKml0LAorCQkJCQkJCQl2b2lkICpleGFyZykKIHsKIAlYNTA5X0NSTF9JTkZPICphID0gKFg1MDlfQ1JMX0lORk8gKikqcHZhbDsKIApAQCAtMTAxLDcgKzExOSwyMzcgQEAKIAlBU04xX0VYUF9TRVFVRU5DRV9PRl9PUFQoWDUwOV9DUkxfSU5GTywgZXh0ZW5zaW9ucywgWDUwOV9FWFRFTlNJT04sIDApCiB9IEFTTjFfU0VRVUVOQ0VfRU5EX2VuYyhYNTA5X0NSTF9JTkZPLCBYNTA5X0NSTF9JTkZPKQogCi1BU04xX1NFUVVFTkNFX3JlZihYNTA5X0NSTCwgMCwgQ1JZUFRPX0xPQ0tfWDUwOV9DUkwpID0geworLyogU2V0IENSTCBlbnRyeSBpc3N1ZXIgYWNjb3JkaW5nIHRvIENSTCBjZXJ0aWZpY2F0ZSBpc3N1ZXIgZXh0ZW5zaW9uLgorICogQ2hlY2sgZm9yIHVuaGFuZGxlZCBjcml0aWNhbCBDUkwgZW50cnkgZXh0ZW5zaW9ucy4KKyAqLworCitzdGF0aWMgaW50IGNybF9zZXRfaXNzdWVycyhYNTA5X0NSTCAqY3JsKQorCXsKKworCWludCBpLCBqOworCUdFTkVSQUxfTkFNRVMgKmdlbnMsICpndG1wOworCVNUQUNLX09GKFg1MDlfUkVWT0tFRCkgKnJldm9rZWQ7CisKKwlyZXZva2VkID0gWDUwOV9DUkxfZ2V0X1JFVk9LRUQoY3JsKTsKKworCWdlbnMgPSBOVUxMOworCWZvciAoaSA9IDA7IGkgPCBza19YNTA5X1JFVk9LRURfbnVtKHJldm9rZWQpOyBpKyspCisJCXsKKwkJWDUwOV9SRVZPS0VEICpyZXYgPSBza19YNTA5X1JFVk9LRURfdmFsdWUocmV2b2tlZCwgaSk7CisJCVNUQUNLX09GKFg1MDlfRVhURU5TSU9OKSAqZXh0czsKKwkJQVNOMV9FTlVNRVJBVEVEICpyZWFzb247CisJCVg1MDlfRVhURU5TSU9OICpleHQ7CisJCWd0bXAgPSBYNTA5X1JFVk9LRURfZ2V0X2V4dF9kMmkocmV2LCAKKwkJCQkJCU5JRF9jZXJ0aWZpY2F0ZV9pc3N1ZXIsCisJCQkJCQkmaiwgTlVMTCk7CisJCWlmICghZ3RtcCAmJiAoaiAhPSAtMSkpCisJCQl7CisJCQljcmwtPmZsYWdzIHw9IEVYRkxBR19JTlZBTElEOworCQkJcmV0dXJuIDE7CisJCQl9CisKKwkJaWYgKGd0bXApCisJCQl7CisJCQlnZW5zID0gZ3RtcDsKKwkJCWlmICghY3JsLT5pc3N1ZXJzKQorCQkJCXsKKwkJCQljcmwtPmlzc3VlcnMgPSBza19HRU5FUkFMX05BTUVTX25ld19udWxsKCk7CisJCQkJaWYgKCFjcmwtPmlzc3VlcnMpCisJCQkJCXJldHVybiAwOworCQkJCX0KKwkJCWlmICghc2tfR0VORVJBTF9OQU1FU19wdXNoKGNybC0+aXNzdWVycywgZ3RtcCkpCisJCQkJcmV0dXJuIDA7CisJCQl9CisJCXJldi0+aXNzdWVyID0gZ2VuczsKKworCQlyZWFzb24gPSBYNTA5X1JFVk9LRURfZ2V0X2V4dF9kMmkocmV2LCBOSURfY3JsX3JlYXNvbiwKKwkJCQkJCQkJJmosIE5VTEwpOworCQlpZiAoIXJlYXNvbiAmJiAoaiAhPSAtMSkpCisJCQl7CisJCQljcmwtPmZsYWdzIHw9IEVYRkxBR19JTlZBTElEOworCQkJcmV0dXJuIDE7CisJCQl9CisKKwkJaWYgKHJlYXNvbikKKwkJCXsKKwkJCXJldi0+cmVhc29uID0gQVNOMV9FTlVNRVJBVEVEX2dldChyZWFzb24pOworCQkJQVNOMV9FTlVNRVJBVEVEX2ZyZWUocmVhc29uKTsKKwkJCX0KKwkJZWxzZQorCQkJcmV2LT5yZWFzb24gPSBDUkxfUkVBU09OX05PTkU7CQorCisJCS8qIENoZWNrIGZvciBjcml0aWNhbCBDUkwgZW50cnkgZXh0ZW5zaW9ucyAqLworCisJCWV4dHMgPSByZXYtPmV4dGVuc2lvbnM7CisKKwkJZm9yIChqID0gMDsgaiA8IHNrX1g1MDlfRVhURU5TSU9OX251bShleHRzKTsgaisrKQorCQkJeworCQkJZXh0ID0gc2tfWDUwOV9FWFRFTlNJT05fdmFsdWUoZXh0cywgaik7CisJCQlpZiAoZXh0LT5jcml0aWNhbCA+IDApCisJCQkJeworCQkJCWlmIChPQkpfb2JqMm5pZChleHQtPm9iamVjdCkgPT0KKwkJCQkJTklEX2NlcnRpZmljYXRlX2lzc3VlcikKKwkJCQkJY29udGludWU7CisJCQkJY3JsLT5mbGFncyB8PSBFWEZMQUdfQ1JJVElDQUw7CisJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCisKKwkJfQorCisJcmV0dXJuIDE7CisKKwl9CisKKy8qIFRoZSBYNTA5X0NSTCBzdHJ1Y3R1cmUgbmVlZHMgYSBiaXQgb2YgY3VzdG9taXNhdGlvbi4gQ2FjaGUgc29tZSBleHRlbnNpb25zCisgKiBhbmQgaGFzaCBvZiB0aGUgd2hvbGUgQ1JMLgorICovCitzdGF0aWMgaW50IGNybF9jYihpbnQgb3BlcmF0aW9uLCBBU04xX1ZBTFVFICoqcHZhbCwgY29uc3QgQVNOMV9JVEVNICppdCwKKwkJCQkJCQkJdm9pZCAqZXhhcmcpCisJeworCVg1MDlfQ1JMICpjcmwgPSAoWDUwOV9DUkwgKikqcHZhbDsKKwlTVEFDS19PRihYNTA5X0VYVEVOU0lPTikgKmV4dHM7CisJWDUwOV9FWFRFTlNJT04gKmV4dDsKKwlpbnQgaWR4OworCisJc3dpdGNoKG9wZXJhdGlvbikKKwkJeworCQljYXNlIEFTTjFfT1BfTkVXX1BPU1Q6CisJCWNybC0+aWRwID0gTlVMTDsKKwkJY3JsLT5ha2lkID0gTlVMTDsKKwkJY3JsLT5mbGFncyA9IDA7CisJCWNybC0+aWRwX2ZsYWdzID0gMDsKKwkJY3JsLT5pZHBfcmVhc29ucyA9IENSTERQX0FMTF9SRUFTT05TOworCQljcmwtPm1ldGggPSBkZWZhdWx0X2NybF9tZXRob2Q7CisJCWNybC0+bWV0aF9kYXRhID0gTlVMTDsKKwkJY3JsLT5pc3N1ZXJzID0gTlVMTDsKKwkJY3JsLT5jcmxfbnVtYmVyID0gTlVMTDsKKwkJY3JsLT5iYXNlX2NybF9udW1iZXIgPSBOVUxMOworCQlicmVhazsKKworCQljYXNlIEFTTjFfT1BfRDJJX1BPU1Q6CisjaWZuZGVmIE9QRU5TU0xfTk9fU0hBCisJCVg1MDlfQ1JMX2RpZ2VzdChjcmwsIEVWUF9zaGExKCksIGNybC0+c2hhMV9oYXNoLCBOVUxMKTsKKyNlbmRpZgorCQljcmwtPmlkcCA9IFg1MDlfQ1JMX2dldF9leHRfZDJpKGNybCwKKwkJCQlOSURfaXNzdWluZ19kaXN0cmlidXRpb25fcG9pbnQsIE5VTEwsIE5VTEwpOworCQlpZiAoY3JsLT5pZHApCisJCQlzZXR1cF9pZHAoY3JsLCBjcmwtPmlkcCk7CisKKwkJY3JsLT5ha2lkID0gWDUwOV9DUkxfZ2V0X2V4dF9kMmkoY3JsLAorCQkJCU5JRF9hdXRob3JpdHlfa2V5X2lkZW50aWZpZXIsIE5VTEwsIE5VTEwpOwkKKworCQljcmwtPmNybF9udW1iZXIgPSBYNTA5X0NSTF9nZXRfZXh0X2QyaShjcmwsCisJCQkJTklEX2NybF9udW1iZXIsIE5VTEwsIE5VTEwpOwkKKworCQljcmwtPmJhc2VfY3JsX251bWJlciA9IFg1MDlfQ1JMX2dldF9leHRfZDJpKGNybCwKKwkJCQlOSURfZGVsdGFfY3JsLCBOVUxMLCBOVUxMKTsJCisJCS8qIERlbHRhIENSTHMgbXVzdCBoYXZlIENSTCBudW1iZXIgKi8KKwkJaWYgKGNybC0+YmFzZV9jcmxfbnVtYmVyICYmICFjcmwtPmNybF9udW1iZXIpCisJCQljcmwtPmZsYWdzIHw9IEVYRkxBR19JTlZBTElEOworCisJCS8qIFNlZSBpZiB3ZSBoYXZlIGFueSB1bmhhbmRsZWQgY3JpdGljYWwgQ1JMIGV4dGVuc2lvbnMgYW5kIAorCQkgKiBpbmRpY2F0ZSB0aGlzIGluIGEgZmxhZy4gV2Ugb25seSBjdXJyZW50bHkgaGFuZGxlIElEUCBzbworCQkgKiBhbnl0aGluZyBlbHNlIGNyaXRpY2FsIHNldHMgdGhlIGZsYWcuCisJCSAqCisJCSAqIFRoaXMgY29kZSBhY2Nlc3NlcyB0aGUgWDUwOV9DUkwgc3RydWN0dXJlIGRpcmVjdGx5OgorCQkgKiBhcHBsaWNhdGlvbnMgc2hvdWxkbid0IGRvIHRoaXMuCisJCSAqLworCisJCWV4dHMgPSBjcmwtPmNybC0+ZXh0ZW5zaW9uczsKKworCQlmb3IgKGlkeCA9IDA7IGlkeCA8IHNrX1g1MDlfRVhURU5TSU9OX251bShleHRzKTsgaWR4KyspCisJCQl7CisJCQlpbnQgbmlkOworCQkJZXh0ID0gc2tfWDUwOV9FWFRFTlNJT05fdmFsdWUoZXh0cywgaWR4KTsKKwkJCW5pZCA9IE9CSl9vYmoybmlkKGV4dC0+b2JqZWN0KTsKKwkJCWlmIChuaWQgPT0gTklEX2ZyZXNoZXN0X2NybCkKKwkJCQljcmwtPmZsYWdzIHw9IEVYRkxBR19GUkVTSEVTVDsKKwkJCWlmIChleHQtPmNyaXRpY2FsID4gMCkKKwkJCQl7CisJCQkJLyogV2UgaGFuZGxlIElEUCBhbmQgZGVsdGFzICovCisJCQkJaWYgKChuaWQgPT0gTklEX2lzc3VpbmdfZGlzdHJpYnV0aW9uX3BvaW50KQorCQkJCQl8fCAobmlkID09IE5JRF9kZWx0YV9jcmwpKQorCQkJCQlicmVhazs7CisJCQkJY3JsLT5mbGFncyB8PSBFWEZMQUdfQ1JJVElDQUw7CisJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCisKKwkJaWYgKCFjcmxfc2V0X2lzc3VlcnMoY3JsKSkKKwkJCXJldHVybiAwOworCisJCWlmIChjcmwtPm1ldGgtPmNybF9pbml0KQorCQkJeworCQkJaWYgKGNybC0+bWV0aC0+Y3JsX2luaXQoY3JsKSA9PSAwKQorCQkJCXJldHVybiAwOworCQkJfQorCQlicmVhazsKKworCQljYXNlIEFTTjFfT1BfRlJFRV9QT1NUOgorCQlpZiAoY3JsLT5tZXRoLT5jcmxfZnJlZSkKKwkJCXsKKwkJCWlmICghY3JsLT5tZXRoLT5jcmxfZnJlZShjcmwpKQorCQkJCXJldHVybiAwOworCQkJfQorCQlpZiAoY3JsLT5ha2lkKQorCQkJQVVUSE9SSVRZX0tFWUlEX2ZyZWUoY3JsLT5ha2lkKTsKKwkJaWYgKGNybC0+aWRwKQorCQkJSVNTVUlOR19ESVNUX1BPSU5UX2ZyZWUoY3JsLT5pZHApOworCQlBU04xX0lOVEVHRVJfZnJlZShjcmwtPmNybF9udW1iZXIpOworCQlBU04xX0lOVEVHRVJfZnJlZShjcmwtPmJhc2VfY3JsX251bWJlcik7CisJCXNrX0dFTkVSQUxfTkFNRVNfcG9wX2ZyZWUoY3JsLT5pc3N1ZXJzLCBHRU5FUkFMX05BTUVTX2ZyZWUpOworCQlicmVhazsKKwkJfQorCXJldHVybiAxOworCX0KKworLyogQ29udmVydCBJRFAgaW50byBhIG1vcmUgY29udmVuaWVudCBmb3JtICovCisKK3N0YXRpYyB2b2lkIHNldHVwX2lkcChYNTA5X0NSTCAqY3JsLCBJU1NVSU5HX0RJU1RfUE9JTlQgKmlkcCkKKwl7CisJaW50IGlkcF9vbmx5ID0gMDsKKwkvKiBTZXQgdmFyaW91cyBmbGFncyBhY2NvcmRpbmcgdG8gSURQICovCisJY3JsLT5pZHBfZmxhZ3MgfD0gSURQX1BSRVNFTlQ7CisJaWYgKGlkcC0+b25seXVzZXIgPiAwKQorCQl7CisJCWlkcF9vbmx5Kys7CisJCWNybC0+aWRwX2ZsYWdzIHw9IElEUF9PTkxZVVNFUjsKKwkJfQorCWlmIChpZHAtPm9ubHlDQSA+IDApCisJCXsKKwkJaWRwX29ubHkrKzsKKwkJY3JsLT5pZHBfZmxhZ3MgfD0gSURQX09OTFlDQTsKKwkJfQorCWlmIChpZHAtPm9ubHlhdHRyID4gMCkKKwkJeworCQlpZHBfb25seSsrOworCQljcmwtPmlkcF9mbGFncyB8PSBJRFBfT05MWUFUVFI7CisJCX0KKworCWlmIChpZHBfb25seSA+IDEpCisJCWNybC0+aWRwX2ZsYWdzIHw9IElEUF9JTlZBTElEOworCisJaWYgKGlkcC0+aW5kaXJlY3RDUkwgPiAwKQorCQljcmwtPmlkcF9mbGFncyB8PSBJRFBfSU5ESVJFQ1Q7CisKKwlpZiAoaWRwLT5vbmx5c29tZXJlYXNvbnMpCisJCXsKKwkJY3JsLT5pZHBfZmxhZ3MgfD0gSURQX1JFQVNPTlM7CisJCWlmIChpZHAtPm9ubHlzb21lcmVhc29ucy0+bGVuZ3RoID4gMCkKKwkJCWNybC0+aWRwX3JlYXNvbnMgPSBpZHAtPm9ubHlzb21lcmVhc29ucy0+ZGF0YVswXTsKKwkJaWYgKGlkcC0+b25seXNvbWVyZWFzb25zLT5sZW5ndGggPiAxKQorCQkJY3JsLT5pZHBfcmVhc29ucyB8PQorCQkJCShpZHAtPm9ubHlzb21lcmVhc29ucy0+ZGF0YVsxXSA8PCA4KTsKKwkJY3JsLT5pZHBfcmVhc29ucyAmPSBDUkxEUF9BTExfUkVBU09OUzsKKwkJfQorCisJRElTVF9QT0lOVF9zZXRfZHBuYW1lKGlkcC0+ZGlzdHBvaW50LCBYNTA5X0NSTF9nZXRfaXNzdWVyKGNybCkpOworCX0KKworQVNOMV9TRVFVRU5DRV9yZWYoWDUwOV9DUkwsIGNybF9jYiwgQ1JZUFRPX0xPQ0tfWDUwOV9DUkwpID0gewogCUFTTjFfU0lNUExFKFg1MDlfQ1JMLCBjcmwsIFg1MDlfQ1JMX0lORk8pLAogCUFTTjFfU0lNUExFKFg1MDlfQ1JMLCBzaWdfYWxnLCBYNTA5X0FMR09SKSwKIAlBU04xX1NJTVBMRShYNTA5X0NSTCwgc2lnbmF0dXJlLCBBU04xX0JJVF9TVFJJTkcpCkBAIC0xMzQsNiArMzgyLDE0NSBAQAogCXJldHVybiAxOwogfQogCitpbnQgWDUwOV9DUkxfdmVyaWZ5KFg1MDlfQ1JMICpjcmwsIEVWUF9QS0VZICpyKQorCXsKKwlpZiAoY3JsLT5tZXRoLT5jcmxfdmVyaWZ5KQorCQlyZXR1cm4gY3JsLT5tZXRoLT5jcmxfdmVyaWZ5KGNybCwgcik7CisJcmV0dXJuIDA7CisJfQorCitpbnQgWDUwOV9DUkxfZ2V0MF9ieV9zZXJpYWwoWDUwOV9DUkwgKmNybCwKKwkJWDUwOV9SRVZPS0VEICoqcmV0LCBBU04xX0lOVEVHRVIgKnNlcmlhbCkKKwl7CisJaWYgKGNybC0+bWV0aC0+Y3JsX2xvb2t1cCkKKwkJcmV0dXJuIGNybC0+bWV0aC0+Y3JsX2xvb2t1cChjcmwsIHJldCwgc2VyaWFsLCBOVUxMKTsKKwlyZXR1cm4gMDsKKwl9CisKK2ludCBYNTA5X0NSTF9nZXQwX2J5X2NlcnQoWDUwOV9DUkwgKmNybCwgWDUwOV9SRVZPS0VEICoqcmV0LCBYNTA5ICp4KQorCXsKKwlpZiAoY3JsLT5tZXRoLT5jcmxfbG9va3VwKQorCQlyZXR1cm4gY3JsLT5tZXRoLT5jcmxfbG9va3VwKGNybCwgcmV0LAorCQkJCQkJWDUwOV9nZXRfc2VyaWFsTnVtYmVyKHgpLAorCQkJCQkJWDUwOV9nZXRfaXNzdWVyX25hbWUoeCkpOworCXJldHVybiAwOworCX0KKworc3RhdGljIGludCBkZWZfY3JsX3ZlcmlmeShYNTA5X0NSTCAqY3JsLCBFVlBfUEtFWSAqcikKKwl7CisJcmV0dXJuKEFTTjFfaXRlbV92ZXJpZnkoQVNOMV9JVEVNX3JwdHIoWDUwOV9DUkxfSU5GTyksCisJCWNybC0+c2lnX2FsZywgY3JsLT5zaWduYXR1cmUsY3JsLT5jcmwscikpOworCX0KKworc3RhdGljIGludCBjcmxfcmV2b2tlZF9pc3N1ZXJfbWF0Y2goWDUwOV9DUkwgKmNybCwgWDUwOV9OQU1FICpubSwKKwkJCQkJCVg1MDlfUkVWT0tFRCAqcmV2KQorCXsKKwlpbnQgaTsKKworCWlmICghcmV2LT5pc3N1ZXIpCisJCXsKKwkJaWYgKCFubSkKKwkJCXJldHVybiAxOworCQlpZiAoIVg1MDlfTkFNRV9jbXAobm0sIFg1MDlfQ1JMX2dldF9pc3N1ZXIoY3JsKSkpCisJCQlyZXR1cm4gMTsKKwkJcmV0dXJuIDA7CisJCX0KKworCWlmICghbm0pCisJCW5tID0gWDUwOV9DUkxfZ2V0X2lzc3VlcihjcmwpOworCisJZm9yIChpID0gMDsgaSA8IHNrX0dFTkVSQUxfTkFNRV9udW0ocmV2LT5pc3N1ZXIpOyBpKyspCisJCXsKKwkJR0VORVJBTF9OQU1FICpnZW4gPSBza19HRU5FUkFMX05BTUVfdmFsdWUocmV2LT5pc3N1ZXIsIGkpOworCQlpZiAoZ2VuLT50eXBlICE9IEdFTl9ESVJOQU1FKQorCQkJY29udGludWU7CisJCWlmICghWDUwOV9OQU1FX2NtcChubSwgZ2VuLT5kLmRpcmVjdG9yeU5hbWUpKQorCQkJcmV0dXJuIDE7CisJCX0KKwlyZXR1cm4gMDsKKworCX0KKworc3RhdGljIGludCBkZWZfY3JsX2xvb2t1cChYNTA5X0NSTCAqY3JsLAorCQlYNTA5X1JFVk9LRUQgKipyZXQsIEFTTjFfSU5URUdFUiAqc2VyaWFsLCBYNTA5X05BTUUgKmlzc3VlcikKKwl7CisJWDUwOV9SRVZPS0VEIHJ0bXAsICpyZXY7CisJaW50IGlkeDsKKwlydG1wLnNlcmlhbE51bWJlciA9IHNlcmlhbDsKKwkvKiBTb3J0IHJldm9rZWQgaW50byBzZXJpYWwgbnVtYmVyIG9yZGVyIGlmIG5vdCBhbHJlYWR5IHNvcnRlZC4KKwkgKiBEbyB0aGlzIHVuZGVyIGEgbG9jayB0byBhdm9pZCByYWNlIGNvbmRpdGlvbi4KKyAJICovCisJaWYgKCFza19YNTA5X1JFVk9LRURfaXNfc29ydGVkKGNybC0+Y3JsLT5yZXZva2VkKSkKKwkJeworCQlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1g1MDlfQ1JMKTsKKwkJc2tfWDUwOV9SRVZPS0VEX3NvcnQoY3JsLT5jcmwtPnJldm9rZWQpOworCQlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfWDUwOV9DUkwpOworCQl9CisJaWR4ID0gc2tfWDUwOV9SRVZPS0VEX2ZpbmQoY3JsLT5jcmwtPnJldm9rZWQsICZydG1wKTsKKwlpZihpZHggPCAwKQorCQlyZXR1cm4gMDsKKwkvKiBOZWVkIHRvIGxvb2sgZm9yIG1hdGNoaW5nIG5hbWUgKi8KKwlmb3IoO2lkeCA8IHNrX1g1MDlfUkVWT0tFRF9udW0oY3JsLT5jcmwtPnJldm9rZWQpOyBpZHgrKykKKwkJeworCQlyZXYgPSBza19YNTA5X1JFVk9LRURfdmFsdWUoY3JsLT5jcmwtPnJldm9rZWQsIGlkeCk7CisJCWlmIChBU04xX0lOVEVHRVJfY21wKHJldi0+c2VyaWFsTnVtYmVyLCBzZXJpYWwpKQorCQkJcmV0dXJuIDA7CisJCWlmIChjcmxfcmV2b2tlZF9pc3N1ZXJfbWF0Y2goY3JsLCBpc3N1ZXIsIHJldikpCisJCQl7CisJCQlpZiAocmV0KQorCQkJCSpyZXQgPSByZXY7CisJCQlpZiAocmV2LT5yZWFzb24gPT0gQ1JMX1JFQVNPTl9SRU1PVkVfRlJPTV9DUkwpCisJCQkJcmV0dXJuIDI7CisJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfQorCXJldHVybiAwOworCX0KKwordm9pZCBYNTA5X0NSTF9zZXRfZGVmYXVsdF9tZXRob2QoY29uc3QgWDUwOV9DUkxfTUVUSE9EICptZXRoKQorCXsKKwlpZiAobWV0aCA9PSBOVUxMKQorCQlkZWZhdWx0X2NybF9tZXRob2QgPSAmaW50X2NybF9tZXRoOworCWVsc2UgCisJCWRlZmF1bHRfY3JsX21ldGhvZCA9IG1ldGg7CisJfQorCitYNTA5X0NSTF9NRVRIT0QgKlg1MDlfQ1JMX01FVEhPRF9uZXcoCisJaW50ICgqY3JsX2luaXQpKFg1MDlfQ1JMICpjcmwpLAorCWludCAoKmNybF9mcmVlKShYNTA5X0NSTCAqY3JsKSwKKwlpbnQgKCpjcmxfbG9va3VwKShYNTA5X0NSTCAqY3JsLCBYNTA5X1JFVk9LRUQgKipyZXQsCisJCQkJQVNOMV9JTlRFR0VSICpzZXIsIFg1MDlfTkFNRSAqaXNzdWVyKSwKKwlpbnQgKCpjcmxfdmVyaWZ5KShYNTA5X0NSTCAqY3JsLCBFVlBfUEtFWSAqcGspKQorCXsKKwlYNTA5X0NSTF9NRVRIT0QgKm07CisJbSA9IE9QRU5TU0xfbWFsbG9jKHNpemVvZihYNTA5X0NSTF9NRVRIT0QpKTsKKwlpZiAoIW0pCisJCXJldHVybiBOVUxMOworCW0tPmNybF9pbml0ID0gY3JsX2luaXQ7CisJbS0+Y3JsX2ZyZWUgPSBjcmxfZnJlZTsKKwltLT5jcmxfbG9va3VwID0gY3JsX2xvb2t1cDsKKwltLT5jcmxfdmVyaWZ5ID0gY3JsX3ZlcmlmeTsKKwltLT5mbGFncyA9IFg1MDlfQ1JMX01FVEhPRF9EWU5BTUlDOworCXJldHVybiBtOworCX0KKwordm9pZCBYNTA5X0NSTF9NRVRIT0RfZnJlZShYNTA5X0NSTF9NRVRIT0QgKm0pCisJeworCWlmICghKG0tPmZsYWdzICYgWDUwOV9DUkxfTUVUSE9EX0RZTkFNSUMpKQorCQlyZXR1cm47CisJT1BFTlNTTF9mcmVlKG0pOworCX0KKwordm9pZCBYNTA5X0NSTF9zZXRfbWV0aF9kYXRhKFg1MDlfQ1JMICpjcmwsIHZvaWQgKmRhdCkKKwl7CisJY3JsLT5tZXRoX2RhdGEgPSBkYXQ7CisJfQorCit2b2lkICpYNTA5X0NSTF9nZXRfbWV0aF9kYXRhKFg1MDlfQ1JMICpjcmwpCisJeworCXJldHVybiBjcmwtPm1ldGhfZGF0YTsKKwl9CisKIElNUExFTUVOVF9TVEFDS19PRihYNTA5X1JFVk9LRUQpCiBJTVBMRU1FTlRfQVNOMV9TRVRfT0YoWDUwOV9SRVZPS0VEKQogSU1QTEVNRU5UX1NUQUNLX09GKFg1MDlfQ1JMKQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FzbjEveF9sb25nLmMgYi9jcnlwdG8vYXNuMS94X2xvbmcuYwppbmRleCBiZjM1NDU3Li43NTMxNzQxIDEwMDY0NAotLS0gYS9jcnlwdG8vYXNuMS94X2xvbmcuYworKysgYi9jcnlwdG8vYXNuMS94X2xvbmcuYwpAQCAtNzEsNiArNzEsNyBAQAogCiBzdGF0aWMgaW50IGxvbmdfaTJjKEFTTjFfVkFMVUUgKipwdmFsLCB1bnNpZ25lZCBjaGFyICpjb250LCBpbnQgKnB1dHlwZSwgY29uc3QgQVNOMV9JVEVNICppdCk7CiBzdGF0aWMgaW50IGxvbmdfYzJpKEFTTjFfVkFMVUUgKipwdmFsLCBjb25zdCB1bnNpZ25lZCBjaGFyICpjb250LCBpbnQgbGVuLCBpbnQgdXR5cGUsIGNoYXIgKmZyZWVfY29udCwgY29uc3QgQVNOMV9JVEVNICppdCk7CitzdGF0aWMgaW50IGxvbmdfcHJpbnQoQklPICpvdXQsIEFTTjFfVkFMVUUgKipwdmFsLCBjb25zdCBBU04xX0lURU0gKml0LCBpbnQgaW5kZW50LCBjb25zdCBBU04xX1BDVFggKnBjdHgpOwogCiBzdGF0aWMgQVNOMV9QUklNSVRJVkVfRlVOQ1MgbG9uZ19wZiA9IHsKIAlOVUxMLCAwLApAQCAtNzgsNyArNzksOCBAQAogCWxvbmdfZnJlZSwKIAlsb25nX2ZyZWUsCS8qIENsZWFyIHNob3VsZCBzZXQgdG8gaW5pdGlhbCB2YWx1ZSAqLwogCWxvbmdfYzJpLAotCWxvbmdfaTJjCisJbG9uZ19pMmMsCisJbG9uZ19wcmludAogfTsKIAogQVNOMV9JVEVNX3N0YXJ0KExPTkcpCkBAIC0xNjksMyArMTcxLDkgQEAKIAltZW1jcHkoY3AsICZsdG1wLCBzaXplb2YobG9uZykpOwogCXJldHVybiAxOwogfQorCitzdGF0aWMgaW50IGxvbmdfcHJpbnQoQklPICpvdXQsIEFTTjFfVkFMVUUgKipwdmFsLCBjb25zdCBBU04xX0lURU0gKml0LAorCQkJaW50IGluZGVudCwgY29uc3QgQVNOMV9QQ1RYICpwY3R4KQorCXsKKwlyZXR1cm4gQklPX3ByaW50ZihvdXQsICIlbGRcbiIsICoobG9uZyAqKXB2YWwpOworCX0KZGlmZiAtLWdpdCBhL2NyeXB0by9hc24xL3hfbmFtZS5jIGIvY3J5cHRvL2FzbjEveF9uYW1lLmMKaW5kZXggMDQzODBhYi4uY2FhNDQwOSAxMDA2NDQKLS0tIGEvY3J5cHRvL2FzbjEveF9uYW1lLmMKKysrIGIvY3J5cHRvL2FzbjEveF9uYW1lLmMKQEAgLTU3LDE4ICs1NywzNiBAQAogICovCiAKICNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSAiY3J5cHRsaWIuaCIKICNpbmNsdWRlIDxvcGVuc3NsL2FzbjF0Lmg+CiAjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+CisjaW5jbHVkZSAiYXNuMV9sb2NsLmgiCiAKLXN0YXRpYyBpbnQgeDUwOV9uYW1lX2V4X2QyaShBU04xX1ZBTFVFICoqdmFsLCBjb25zdCB1bnNpZ25lZCBjaGFyICoqaW4sIGxvbmcgbGVuLCBjb25zdCBBU04xX0lURU0gKml0LAotCQkJCQlpbnQgdGFnLCBpbnQgYWNsYXNzLCBjaGFyIG9wdCwgQVNOMV9UTEMgKmN0eCk7Cit0eXBlZGVmIFNUQUNLX09GKFg1MDlfTkFNRV9FTlRSWSkgU1RBQ0tfT0ZfWDUwOV9OQU1FX0VOVFJZOworREVDTEFSRV9TVEFDS19PRihTVEFDS19PRl9YNTA5X05BTUVfRU5UUlkpCiAKLXN0YXRpYyBpbnQgeDUwOV9uYW1lX2V4X2kyZChBU04xX1ZBTFVFICoqdmFsLCB1bnNpZ25lZCBjaGFyICoqb3V0LCBjb25zdCBBU04xX0lURU0gKml0LCBpbnQgdGFnLCBpbnQgYWNsYXNzKTsKK3N0YXRpYyBpbnQgeDUwOV9uYW1lX2V4X2QyaShBU04xX1ZBTFVFICoqdmFsLAorCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKippbiwgbG9uZyBsZW4sCisJCQkJY29uc3QgQVNOMV9JVEVNICppdCwKKwkJCQlpbnQgdGFnLCBpbnQgYWNsYXNzLCBjaGFyIG9wdCwgQVNOMV9UTEMgKmN0eCk7CisKK3N0YXRpYyBpbnQgeDUwOV9uYW1lX2V4X2kyZChBU04xX1ZBTFVFICoqdmFsLCB1bnNpZ25lZCBjaGFyICoqb3V0LAorCQkJCWNvbnN0IEFTTjFfSVRFTSAqaXQsIGludCB0YWcsIGludCBhY2xhc3MpOwogc3RhdGljIGludCB4NTA5X25hbWVfZXhfbmV3KEFTTjFfVkFMVUUgKip2YWwsIGNvbnN0IEFTTjFfSVRFTSAqaXQpOwogc3RhdGljIHZvaWQgeDUwOV9uYW1lX2V4X2ZyZWUoQVNOMV9WQUxVRSAqKnZhbCwgY29uc3QgQVNOMV9JVEVNICppdCk7CiAKIHN0YXRpYyBpbnQgeDUwOV9uYW1lX2VuY29kZShYNTA5X05BTUUgKmEpOworc3RhdGljIGludCB4NTA5X25hbWVfY2Fub24oWDUwOV9OQU1FICphKTsKK3N0YXRpYyBpbnQgYXNuMV9zdHJpbmdfY2Fub24oQVNOMV9TVFJJTkcgKm91dCwgQVNOMV9TVFJJTkcgKmluKTsKK3N0YXRpYyBpbnQgaTJkX25hbWVfY2Fub24oU1RBQ0tfT0YoU1RBQ0tfT0ZfWDUwOV9OQU1FX0VOVFJZKSAqaW50bmFtZSwKKwkJCSAgdW5zaWduZWQgY2hhciAqKmluKTsKKworCitzdGF0aWMgaW50IHg1MDlfbmFtZV9leF9wcmludChCSU8gKm91dCwgQVNOMV9WQUxVRSAqKnB2YWwsCisJCQkJCQlpbnQgaW5kZW50LAorCQkJCQkJY29uc3QgY2hhciAqZm5hbWUsIAorCQkJCQkJY29uc3QgQVNOMV9QQ1RYICpwY3R4KTsKIAogQVNOMV9TRVFVRU5DRShYNTA5X05BTUVfRU5UUlkpID0gewogCUFTTjFfU0lNUExFKFg1MDlfTkFNRV9FTlRSWSwgb2JqZWN0LCBBU04xX09CSkVDVCksCkBAIC0xMDIsNyArMTIwLDggQEAKIAl4NTA5X25hbWVfZXhfZnJlZSwKIAkwLAkvKiBEZWZhdWx0IGNsZWFyIGJlaGF2aW91ciBpcyBPSyAqLwogCXg1MDlfbmFtZV9leF9kMmksCi0JeDUwOV9uYW1lX2V4X2kyZAorCXg1MDlfbmFtZV9leF9pMmQsCisJeDUwOV9uYW1lX2V4X3ByaW50CiB9OwogCiBJTVBMRU1FTlRfRVhURVJOX0FTTjEoWDUwOV9OQU1FLCBWX0FTTjFfU0VRVUVOQ0UsIHg1MDlfbmFtZV9mZikgCkBAIC0xMTgsNiArMTM3LDggQEAKIAlpZiAoKHJldC0+ZW50cmllcz1za19YNTA5X05BTUVfRU5UUllfbmV3X251bGwoKSkgPT0gTlVMTCkKIAkJZ290byBtZW1lcnI7CiAJaWYoKHJldC0+Ynl0ZXMgPSBCVUZfTUVNX25ldygpKSA9PSBOVUxMKSBnb3RvIG1lbWVycjsKKwlyZXQtPmNhbm9uX2VuYyA9IE5VTEw7CisJcmV0LT5jYW5vbl9lbmNsZW4gPSAwOwogCXJldC0+bW9kaWZpZWQ9MTsKIAkqdmFsID0gKEFTTjFfVkFMVUUgKilyZXQ7CiAJcmV0dXJuIDE7CkBAIC0xNDIsMjUgKzE2MywxOSBAQAogCiAJQlVGX01FTV9mcmVlKGEtPmJ5dGVzKTsKIAlza19YNTA5X05BTUVfRU5UUllfcG9wX2ZyZWUoYS0+ZW50cmllcyxYNTA5X05BTUVfRU5UUllfZnJlZSk7CisJaWYgKGEtPmNhbm9uX2VuYykKKwkJT1BFTlNTTF9mcmVlKGEtPmNhbm9uX2VuYyk7CiAJT1BFTlNTTF9mcmVlKGEpOwogCSpwdmFsID0gTlVMTDsKIH0KIAotLyogVXNlZCB3aXRoIHNrX3BvcF9mcmVlKCkgdG8gZnJlZSB1cCB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24uCi0gKiBOQjogd2Ugb25seSBmcmVlIHRoZSBTVEFDSyBhbmQgbm90IGl0cyBjb250ZW50cyBiZWNhdXNlIGl0IGlzCi0gKiBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIFg1MDlfTkFNRSBzdHJ1Y3R1cmUuCi0gKi8KLQotc3RhdGljIHZvaWQgc2tfaW50ZXJuYWxfZnJlZSh2b2lkICphKQotewotCXNrX2ZyZWUoYSk7Ci19Ci0KLXN0YXRpYyBpbnQgeDUwOV9uYW1lX2V4X2QyaShBU04xX1ZBTFVFICoqdmFsLCBjb25zdCB1bnNpZ25lZCBjaGFyICoqaW4sIGxvbmcgbGVuLCBjb25zdCBBU04xX0lURU0gKml0LAotCQkJCQlpbnQgdGFnLCBpbnQgYWNsYXNzLCBjaGFyIG9wdCwgQVNOMV9UTEMgKmN0eCkKK3N0YXRpYyBpbnQgeDUwOV9uYW1lX2V4X2QyaShBU04xX1ZBTFVFICoqdmFsLAorCQkJY29uc3QgdW5zaWduZWQgY2hhciAqKmluLCBsb25nIGxlbiwgY29uc3QgQVNOMV9JVEVNICppdCwKKwkJCQlpbnQgdGFnLCBpbnQgYWNsYXNzLCBjaGFyIG9wdCwgQVNOMV9UTEMgKmN0eCkKIHsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpwID0gKmluLCAqcTsKLQl1bmlvbiB7IFNUQUNLICpzOyBBU04xX1ZBTFVFICphOyB9IGludG5hbWUgPSB7TlVMTH07CisJdW5pb24geyBTVEFDS19PRihTVEFDS19PRl9YNTA5X05BTUVfRU5UUlkpICpzOworCQlBU04xX1ZBTFVFICphOyB9IGludG5hbWUgPSB7TlVMTH07CiAJdW5pb24geyBYNTA5X05BTUUgKng7IEFTTjFfVkFMVUUgKmE7IH0gbm0gPSB7TlVMTH07CiAJaW50IGksIGosIHJldDsKIAlTVEFDS19PRihYNTA5X05BTUVfRU5UUlkpICplbnRyaWVzOwpAQCAtMTgxLDggKzE5Niw4IEBACiAJbWVtY3B5KG5tLngtPmJ5dGVzLT5kYXRhLCBxLCBwIC0gcSk7CiAKIAkvKiBDb252ZXJ0IGludGVybmFsIHJlcHJlc2VudGF0aW9uIHRvIFg1MDlfTkFNRSBzdHJ1Y3R1cmUgKi8KLQlmb3IoaSA9IDA7IGkgPCBza19udW0oaW50bmFtZS5zKTsgaSsrKSB7Ci0JCWVudHJpZXMgPSAoU1RBQ0tfT0YoWDUwOV9OQU1FX0VOVFJZKSAqKXNrX3ZhbHVlKGludG5hbWUucywgaSk7CisJZm9yKGkgPSAwOyBpIDwgc2tfU1RBQ0tfT0ZfWDUwOV9OQU1FX0VOVFJZX251bShpbnRuYW1lLnMpOyBpKyspIHsKKwkJZW50cmllcyA9IHNrX1NUQUNLX09GX1g1MDlfTkFNRV9FTlRSWV92YWx1ZShpbnRuYW1lLnMsIGkpOwogCQlmb3IoaiA9IDA7IGogPCBza19YNTA5X05BTUVfRU5UUllfbnVtKGVudHJpZXMpOyBqKyspIHsKIAkJCWVudHJ5ID0gc2tfWDUwOV9OQU1FX0VOVFJZX3ZhbHVlKGVudHJpZXMsIGopOwogCQkJZW50cnktPnNldCA9IGk7CkBAIC0xOTEsNyArMjA2LDEwIEBACiAJCX0KIAkJc2tfWDUwOV9OQU1FX0VOVFJZX2ZyZWUoZW50cmllcyk7CiAJfQotCXNrX2ZyZWUoaW50bmFtZS5zKTsKKwlza19TVEFDS19PRl9YNTA5X05BTUVfRU5UUllfZnJlZShpbnRuYW1lLnMpOworCXJldCA9IHg1MDlfbmFtZV9jYW5vbihubS54KTsKKwlpZiAoIXJldCkKKwkJZ290byBlcnI7CiAJbm0ueC0+bW9kaWZpZWQgPSAwOwogCSp2YWwgPSBubS5hOwogCSppbiA9IHA7CkBAIC0yMDYsOCArMjI0LDEyIEBACiAJaW50IHJldDsKIAlYNTA5X05BTUUgKmEgPSAoWDUwOV9OQU1FICopKnZhbDsKIAlpZihhLT5tb2RpZmllZCkgewotCQlyZXQgPSB4NTA5X25hbWVfZW5jb2RlKChYNTA5X05BTUUgKilhKTsKLQkJaWYocmV0IDwgMCkgcmV0dXJuIHJldDsKKwkJcmV0ID0geDUwOV9uYW1lX2VuY29kZShhKTsKKwkJaWYocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJCXJldCA9IHg1MDlfbmFtZV9jYW5vbihhKTsKKwkJaWYocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CiAJfQogCXJldCA9IGEtPmJ5dGVzLT5sZW5ndGg7CiAJaWYob3V0ICE9IE5VTEwpIHsKQEAgLTIxNywyMiArMjM5LDM1IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHZvaWQgbG9jYWxfc2tfWDUwOV9OQU1FX0VOVFJZX2ZyZWUoU1RBQ0tfT0YoWDUwOV9OQU1FX0VOVFJZKSAqbmUpCisJeworCXNrX1g1MDlfTkFNRV9FTlRSWV9mcmVlKG5lKTsKKwl9CisKK3N0YXRpYyB2b2lkIGxvY2FsX3NrX1g1MDlfTkFNRV9FTlRSWV9wb3BfZnJlZShTVEFDS19PRihYNTA5X05BTUVfRU5UUlkpICpuZSkKKwl7CisJc2tfWDUwOV9OQU1FX0VOVFJZX3BvcF9mcmVlKG5lLCBYNTA5X05BTUVfRU5UUllfZnJlZSk7CisJfQorCiBzdGF0aWMgaW50IHg1MDlfbmFtZV9lbmNvZGUoWDUwOV9OQU1FICphKQogewotCXVuaW9uIHsgU1RBQ0sgKnM7IEFTTjFfVkFMVUUgKmE7IH0gaW50bmFtZSA9IHtOVUxMfTsKKwl1bmlvbiB7IFNUQUNLX09GKFNUQUNLX09GX1g1MDlfTkFNRV9FTlRSWSkgKnM7CisJCUFTTjFfVkFMVUUgKmE7IH0gaW50bmFtZSA9IHtOVUxMfTsKIAlpbnQgbGVuOwogCXVuc2lnbmVkIGNoYXIgKnA7CiAJU1RBQ0tfT0YoWDUwOV9OQU1FX0VOVFJZKSAqZW50cmllcyA9IE5VTEw7CiAJWDUwOV9OQU1FX0VOVFJZICplbnRyeTsKIAlpbnQgaSwgc2V0ID0gLTE7Ci0JaW50bmFtZS5zID0gc2tfbmV3X251bGwoKTsKKwlpbnRuYW1lLnMgPSBza19TVEFDS19PRl9YNTA5X05BTUVfRU5UUllfbmV3X251bGwoKTsKIAlpZighaW50bmFtZS5zKSBnb3RvIG1lbWVycjsKIAlmb3IoaSA9IDA7IGkgPCBza19YNTA5X05BTUVfRU5UUllfbnVtKGEtPmVudHJpZXMpOyBpKyspIHsKIAkJZW50cnkgPSBza19YNTA5X05BTUVfRU5UUllfdmFsdWUoYS0+ZW50cmllcywgaSk7CiAJCWlmKGVudHJ5LT5zZXQgIT0gc2V0KSB7CiAJCQllbnRyaWVzID0gc2tfWDUwOV9OQU1FX0VOVFJZX25ld19udWxsKCk7CiAJCQlpZighZW50cmllcykgZ290byBtZW1lcnI7Ci0JCQlpZighc2tfcHVzaChpbnRuYW1lLnMsIChjaGFyICopZW50cmllcykpIGdvdG8gbWVtZXJyOworCQkJaWYoIXNrX1NUQUNLX09GX1g1MDlfTkFNRV9FTlRSWV9wdXNoKGludG5hbWUucywKKwkJCQkJCQkgICAgIGVudHJpZXMpKQorCQkJCWdvdG8gbWVtZXJyOwogCQkJc2V0ID0gZW50cnktPnNldDsKIAkJfQogCQlpZighc2tfWDUwOV9OQU1FX0VOVFJZX3B1c2goZW50cmllcywgZW50cnkpKSBnb3RvIG1lbWVycjsKQEAgLTI0MywxNSArMjc4LDIyMiBAQAogCXA9KHVuc2lnbmVkIGNoYXIgKilhLT5ieXRlcy0+ZGF0YTsKIAlBU04xX2l0ZW1fZXhfaTJkKCZpbnRuYW1lLmEsCiAJCQkgJnAsIEFTTjFfSVRFTV9ycHRyKFg1MDlfTkFNRV9JTlRFUk5BTCksIC0xLCAtMSk7Ci0Jc2tfcG9wX2ZyZWUoaW50bmFtZS5zLCBza19pbnRlcm5hbF9mcmVlKTsKKwlza19TVEFDS19PRl9YNTA5X05BTUVfRU5UUllfcG9wX2ZyZWUoaW50bmFtZS5zLAorCQkJCQkgICAgIGxvY2FsX3NrX1g1MDlfTkFNRV9FTlRSWV9mcmVlKTsKIAlhLT5tb2RpZmllZCA9IDA7CiAJcmV0dXJuIGxlbjsKLQltZW1lcnI6Ci0Jc2tfcG9wX2ZyZWUoaW50bmFtZS5zLCBza19pbnRlcm5hbF9mcmVlKTsKK21lbWVycjoKKwlza19TVEFDS19PRl9YNTA5X05BTUVfRU5UUllfcG9wX2ZyZWUoaW50bmFtZS5zLAorCQkJCQkgICAgIGxvY2FsX3NrX1g1MDlfTkFNRV9FTlRSWV9mcmVlKTsKIAlBU04xZXJyKEFTTjFfRl9YNTA5X05BTUVfRU5DT0RFLCBFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CiAJcmV0dXJuIC0xOwogfQogCitzdGF0aWMgaW50IHg1MDlfbmFtZV9leF9wcmludChCSU8gKm91dCwgQVNOMV9WQUxVRSAqKnB2YWwsCisJCQkJCQlpbnQgaW5kZW50LAorCQkJCQkJY29uc3QgY2hhciAqZm5hbWUsIAorCQkJCQkJY29uc3QgQVNOMV9QQ1RYICpwY3R4KQorCXsKKwlpZiAoWDUwOV9OQU1FX3ByaW50X2V4KG91dCwgKFg1MDlfTkFNRSAqKSpwdmFsLAorCQkJCQlpbmRlbnQsIHBjdHgtPm5tX2ZsYWdzKSA8PSAwKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMjsKKwl9CisKKy8qIFRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIHRoZSBjYW5vbmljYWwgZW5jb2Rpbmcgb2YgdGhlIE5hbWUgc3RydWN0dXJlLgorICogSW4gaXQgYWxsIHN0cmluZ3MgYXJlIGNvbnZlcnRlZCB0byBVVEY4LCBsZWFkaW5nLCB0cmFpbGluZyBhbmQKKyAqIG11bHRpcGxlIHNwYWNlcyBjb2xsYXBzZWQsIGNvbnZlcnRlZCB0byBsb3dlciBjYXNlIGFuZCB0aGUgbGVhZGluZworICogU0VRVUVOQ0UgaGVhZGVyIHJlbW92ZWQuCisgKgorICogSW4gZnV0dXJlIHdlIGNvdWxkIGFsc28gbm9ybWFsaXplIHRoZSBVVEY4IHRvby4KKyAqCisgKiBCeSBkb2luZyB0aGlzIGNvbXBhcmlzb24gb2YgTmFtZSBzdHJ1Y3R1cmVzIGNhbiBiZSByYXBpZGx5CisgKiBwZXJmb21lZCBieSBqdXN0IHVzaW5nIG1lbWNtcCgpIG9mIHRoZSBjYW5vbmljYWwgZW5jb2RpbmcuCisgKiBCeSBvbWl0dGluZyB0aGUgbGVhZGluZyBTRVFVRU5DRSBuYW1lIGNvbnN0cmFpbnRzIG9mIHR5cGUKKyAqIGRpck5hbWUgY2FuIGFsc28gYmUgY2hlY2tlZCB3aXRoIGEgc2ltcGxlIG1lbWNtcCgpLgorICovCisKK3N0YXRpYyBpbnQgeDUwOV9uYW1lX2Nhbm9uKFg1MDlfTkFNRSAqYSkKKwl7CisJdW5zaWduZWQgY2hhciAqcDsKKwlTVEFDS19PRihTVEFDS19PRl9YNTA5X05BTUVfRU5UUlkpICppbnRuYW1lID0gTlVMTDsKKwlTVEFDS19PRihYNTA5X05BTUVfRU5UUlkpICplbnRyaWVzID0gTlVMTDsKKwlYNTA5X05BTUVfRU5UUlkgKmVudHJ5LCAqdG1wZW50cnkgPSBOVUxMOworCWludCBpLCBzZXQgPSAtMSwgcmV0ID0gMDsKKworCWlmIChhLT5jYW5vbl9lbmMpCisJCXsKKwkJT1BFTlNTTF9mcmVlKGEtPmNhbm9uX2VuYyk7CisJCWEtPmNhbm9uX2VuYyA9IE5VTEw7CisJCX0KKwkvKiBTcGVjaWFsIGNhc2U6IGVtcHR5IFg1MDlfTkFNRSA9PiBudWxsIGVuY29kaW5nICovCisJaWYgKHNrX1g1MDlfTkFNRV9FTlRSWV9udW0oYS0+ZW50cmllcykgPT0gMCkKKwkJeworCQlhLT5jYW5vbl9lbmNsZW4gPSAwOworCQlyZXR1cm4gMTsKKwkJfQorCWludG5hbWUgPSBza19TVEFDS19PRl9YNTA5X05BTUVfRU5UUllfbmV3X251bGwoKTsKKwlpZighaW50bmFtZSkKKwkJZ290byBlcnI7CisJZm9yKGkgPSAwOyBpIDwgc2tfWDUwOV9OQU1FX0VOVFJZX251bShhLT5lbnRyaWVzKTsgaSsrKQorCQl7CisJCWVudHJ5ID0gc2tfWDUwOV9OQU1FX0VOVFJZX3ZhbHVlKGEtPmVudHJpZXMsIGkpOworCQlpZihlbnRyeS0+c2V0ICE9IHNldCkKKwkJCXsKKwkJCWVudHJpZXMgPSBza19YNTA5X05BTUVfRU5UUllfbmV3X251bGwoKTsKKwkJCWlmKCFlbnRyaWVzKQorCQkJCWdvdG8gZXJyOworCQkJaWYoIXNrX1NUQUNLX09GX1g1MDlfTkFNRV9FTlRSWV9wdXNoKGludG5hbWUsIGVudHJpZXMpKQorCQkJCWdvdG8gZXJyOworCQkJc2V0ID0gZW50cnktPnNldDsKKwkJCX0KKwkJdG1wZW50cnkgPSBYNTA5X05BTUVfRU5UUllfbmV3KCk7CisJCXRtcGVudHJ5LT5vYmplY3QgPSBPQkpfZHVwKGVudHJ5LT5vYmplY3QpOworCQlpZiAoIWFzbjFfc3RyaW5nX2Nhbm9uKHRtcGVudHJ5LT52YWx1ZSwgZW50cnktPnZhbHVlKSkKKwkJCWdvdG8gZXJyOworCQlpZighc2tfWDUwOV9OQU1FX0VOVFJZX3B1c2goZW50cmllcywgdG1wZW50cnkpKQorCQkJZ290byBlcnI7CisJCXRtcGVudHJ5ID0gTlVMTDsKKwkJfQorCisJLyogRmluYWxseSBnZW5lcmF0ZSBlbmNvZGluZyAqLworCisJYS0+Y2Fub25fZW5jbGVuID0gaTJkX25hbWVfY2Fub24oaW50bmFtZSwgTlVMTCk7CisKKwlwID0gT1BFTlNTTF9tYWxsb2MoYS0+Y2Fub25fZW5jbGVuKTsKKworCWlmICghcCkKKwkJZ290byBlcnI7CisKKwlhLT5jYW5vbl9lbmMgPSBwOworCisJaTJkX25hbWVfY2Fub24oaW50bmFtZSwgJnApOworCisJcmV0ID0gMTsKKworCWVycjoKKworCWlmICh0bXBlbnRyeSkKKwkJWDUwOV9OQU1FX0VOVFJZX2ZyZWUodG1wZW50cnkpOworCWlmIChpbnRuYW1lKQorCQlza19TVEFDS19PRl9YNTA5X05BTUVfRU5UUllfcG9wX2ZyZWUoaW50bmFtZSwKKwkJCQkJbG9jYWxfc2tfWDUwOV9OQU1FX0VOVFJZX3BvcF9mcmVlKTsKKwlyZXR1cm4gcmV0OworCX0KKworLyogQml0bWFwIG9mIGFsbCB0aGUgdHlwZXMgb2Ygc3RyaW5nIHRoYXQgd2lsbCBiZSBjYW5vbmljYWxpemVkLiAqLworCisjZGVmaW5lIEFTTjFfTUFTS19DQU5PTglcCisJKEJfQVNOMV9VVEY4U1RSSU5HIHwgQl9BU04xX0JNUFNUUklORyB8IEJfQVNOMV9VTklWRVJTQUxTVFJJTkcgXAorCXwgQl9BU04xX1BSSU5UQUJMRVNUUklORyB8IEJfQVNOMV9UNjFTVFJJTkcgfCBCX0FTTjFfSUE1U1RSSU5HIFwKKwl8IEJfQVNOMV9WSVNJQkxFU1RSSU5HKQorCQorCitzdGF0aWMgaW50IGFzbjFfc3RyaW5nX2Nhbm9uKEFTTjFfU1RSSU5HICpvdXQsIEFTTjFfU1RSSU5HICppbikKKwl7CisJdW5zaWduZWQgY2hhciAqdG8sICpmcm9tOworCWludCBsZW4sIGk7CisKKwkvKiBJZiB0eXBlIG5vdCBpbiBiaXRtYXNrIGp1c3QgY29weSBzdHJpbmcgYWNyb3NzICovCisJaWYgKCEoQVNOMV90YWcyYml0KGluLT50eXBlKSAmIEFTTjFfTUFTS19DQU5PTikpCisJCXsKKwkJb3V0LT50eXBlID0gaW4tPnR5cGU7CisJCWlmICghQVNOMV9TVFJJTkdfc2V0KG91dCwgaW4tPmRhdGEsIGluLT5sZW5ndGgpKQorCQkJcmV0dXJuIDA7CisJCXJldHVybiAxOworCQl9CisKKwlvdXQtPnR5cGUgPSBWX0FTTjFfVVRGOFNUUklORzsKKwlvdXQtPmxlbmd0aCA9IEFTTjFfU1RSSU5HX3RvX1VURjgoJm91dC0+ZGF0YSwgaW4pOworCWlmIChvdXQtPmxlbmd0aCA9PSAtMSkKKwkJcmV0dXJuIDA7CisKKwl0byA9IG91dC0+ZGF0YTsKKwlmcm9tID0gdG87CisKKwlsZW4gPSBvdXQtPmxlbmd0aDsKKworCS8qIENvbnZlcnQgc3RyaW5nIGluIHBsYWNlIHRvIGNhbm9uaWNhbCBmb3JtLgorCSAqIFVsdGltYXRlbHkgd2UgbWF5IG5lZWQgdG8gaGFuZGxlIGEgd2lkZXIgcmFuZ2Ugb2YgY2hhcmFjdGVycworCSAqIGJ1dCBmb3Igbm93IGlnbm9yZSBhbnl0aGluZyB3aXRoIE1TQiBzZXQgYW5kIHJlbHkgb24gdGhlCisJICogaXNzcGFjZSgpIGFuZCB0b2xvd2VyKCkgZnVuY3Rpb25zLgorCSAqLworCisJLyogSWdub3JlIGxlYWRpbmcgc3BhY2VzICovCisJd2hpbGUoKGxlbiA+IDApICYmICEoKmZyb20gJiAweDgwKSAmJiBpc3NwYWNlKCpmcm9tKSkKKwkJeworCQlmcm9tKys7CisJCWxlbi0tOworCQl9CisKKwl0byA9IGZyb20gKyBsZW4gLSAxOworCisJLyogSWdub3JlIHRyYWlsaW5nIHNwYWNlcyAqLworCXdoaWxlICgobGVuID4gMCkgJiYgISgqdG8gJiAweDgwKSAmJiBpc3NwYWNlKCp0bykpCisJCXsKKwkJdG8tLTsKKwkJbGVuLS07CisJCX0KKworCXRvID0gb3V0LT5kYXRhOworCisJaSA9IDA7CisJd2hpbGUoaSA8IGxlbikKKwkJeworCQkvKiBJZiBNU0Igc2V0IGp1c3QgY29weSBhY3Jvc3MgKi8KKwkJaWYgKCpmcm9tICYgMHg4MCkKKwkJCXsKKwkJCSp0bysrID0gKmZyb20rKzsKKwkJCWkrKzsKKwkJCX0KKwkJLyogQ29sbGFwc2UgbXVsdGlwbGUgc3BhY2VzICovCisJCWVsc2UgaWYgKGlzc3BhY2UoKmZyb20pKQorCQkJeworCQkJLyogQ29weSBvbmUgc3BhY2UgYWNyb3NzICovCisJCQkqdG8rKyA9ICcgJzsKKwkJCS8qIElnbm9yZSBzdWJzZXF1ZW50IHNwYWNlcy4gTm90ZTogZG9uJ3QgbmVlZCB0bworCQkJICogY2hlY2sgbGVuIGhlcmUgYmVjYXVzZSB3ZSBrbm93IHRoZSBsYXN0IAorCQkJICogY2hhcmFjdGVyIGlzIGEgbm9uLXNwYWNlIHNvIHdlIGNhbid0IG92ZXJmbG93LgorCQkJICovCisJCQlkbworCQkJCXsKKwkJCQlmcm9tKys7CisJCQkJaSsrOworCQkJCX0KKwkJCXdoaWxlKCEoKmZyb20gJiAweDgwKSAmJiBpc3NwYWNlKCpmcm9tKSk7CisJCQl9CisJCWVsc2UKKwkJCXsKKwkJCSp0bysrID0gdG9sb3dlcigqZnJvbSsrKTsKKwkJCWkrKzsKKwkJCX0KKwkJfQorCisJb3V0LT5sZW5ndGggPSB0byAtIG91dC0+ZGF0YTsKKworCXJldHVybiAxOworCisJfQorCitzdGF0aWMgaW50IGkyZF9uYW1lX2Nhbm9uKFNUQUNLX09GKFNUQUNLX09GX1g1MDlfTkFNRV9FTlRSWSkgKl9pbnRuYW1lLAorCQkJICB1bnNpZ25lZCBjaGFyICoqaW4pCisJeworCWludCBpLCBsZW4sIGx0bXA7CisJQVNOMV9WQUxVRSAqdjsKKwlTVEFDS19PRihBU04xX1ZBTFVFKSAqaW50bmFtZSA9IChTVEFDS19PRihBU04xX1ZBTFVFKSAqKV9pbnRuYW1lOworCisJbGVuID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgc2tfQVNOMV9WQUxVRV9udW0oaW50bmFtZSk7IGkrKykKKwkJeworCQl2ID0gc2tfQVNOMV9WQUxVRV92YWx1ZShpbnRuYW1lLCBpKTsKKwkJbHRtcCA9IEFTTjFfaXRlbV9leF9pMmQoJnYsIGluLAorCQkJQVNOMV9JVEVNX3JwdHIoWDUwOV9OQU1FX0VOVFJJRVMpLCAtMSwgLTEpOworCQlpZiAobHRtcCA8IDApCisJCQlyZXR1cm4gbHRtcDsKKwkJbGVuICs9IGx0bXA7CisJCX0KKwlyZXR1cm4gbGVuOworCX0KIAogaW50IFg1MDlfTkFNRV9zZXQoWDUwOV9OQU1FICoqeG4sIFg1MDlfTkFNRSAqbmFtZSkKIAl7CmRpZmYgLS1naXQgYS9jcnlwdG8vcmM0L3JjNF9mYmxrLmMgYi9jcnlwdG8vYXNuMS94X254NTA5LmMKc2ltaWxhcml0eSBpbmRleCA3OSUKcmVuYW1lIGZyb20gY3J5cHRvL3JjNC9yYzRfZmJsay5jCnJlbmFtZSB0byBjcnlwdG8vYXNuMS94X254NTA5LmMKaW5kZXggMWIyYTQyOS4uZmJkOWEyMiAxMDA2NDQKLS0tIGEvY3J5cHRvL3JjNC9yYzRfZmJsay5jCisrKyBiL2NyeXB0by9hc24xL3hfbng1MDkuYwpAQCAtMSw5ICsxLDkgQEAKLS8qIGNyeXB0by9yYzQvcmM0X2ZibGsuYyAqLworLyogeF9ueDUwOS5jICovCiAvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKLSAqIHByb2plY3QuCisgKiBwcm9qZWN0IDIwMDUuCiAgKi8KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDggVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ5LDI3ICs0OSwyNCBAQAogICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAogICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorICoKICAqLwogCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+CisjaW5jbHVkZSA8b3BlbnNzbC9hc24xLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9hc24xdC5oPgogCi0jaW5jbHVkZSA8b3BlbnNzbC9yYzQuaD4KLSNpbmNsdWRlICJyYzRfbG9jbC5oIgotI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KLSNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotI2lmZGVmIE9QRU5TU0xfRklQUwotI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotI2VuZGlmCisvKiBPbGQgbmV0c2NhcGUgY2VydGlmaWNhdGUgd3JhcHBlciBmb3JtYXQgKi8KIAotLyogRklQUyBtb2RlIGJsb2NraW5nIGZvciBSQzQgaGFzIHRvIGJlIGRvbmUgc2VwYXJhdGVseSBzaW5jZSBSQzRfc2V0X2tleQotICogbWF5IGJlIGltcGxlbWVudGVkIGluIGFuIGFzc2VtYmx5IGxhbmd1YWdlIGZpbGUuCi0gKi8KK0FTTjFfU0VRVUVOQ0UoTkVUU0NBUEVfWDUwOSkgPSB7CisJQVNOMV9TSU1QTEUoTkVUU0NBUEVfWDUwOSwgaGVhZGVyLCBBU04xX09DVEVUX1NUUklORyksCisJQVNOMV9PUFQoTkVUU0NBUEVfWDUwOSwgY2VydCwgWDUwOSkKK30gQVNOMV9TRVFVRU5DRV9FTkQoTkVUU0NBUEVfWDUwOSkKIAotI2lmZGVmIE9QRU5TU0xfRklQUwotdm9pZCBSQzRfc2V0X2tleShSQzRfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCi0JewotCWlmIChGSVBTX21vZGUoKSkKLQkJRklQU19CQURfQUJPUlQoUkM0KQotCXByaXZhdGVfUkM0X3NldF9rZXkoa2V5LCBsZW4sIGRhdGEpOwotCX0KLSNlbmRpZgorSU1QTEVNRU5UX0FTTjFfRlVOQ1RJT05TKE5FVFNDQVBFX1g1MDkpCiAKZGlmZiAtLWdpdCBhL2NyeXB0by9hc24xL3hfcHVia2V5LmMgYi9jcnlwdG8vYXNuMS94X3B1YmtleS5jCmluZGV4IDkxYzI3NTYuLmQ0MmI2YTIgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hc24xL3hfcHVia2V5LmMKKysrIGIvY3J5cHRvL2FzbjEveF9wdWJrZXkuYwpAQCAtNjAsNiArNjAsNyBAQAogI2luY2x1ZGUgImNyeXB0bGliLmgiCiAjaW5jbHVkZSA8b3BlbnNzbC9hc24xdC5oPgogI2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgorI2luY2x1ZGUgImFzbjFfbG9jbC5oIgogI2lmbmRlZiBPUEVOU1NMX05PX1JTQQogI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CiAjZW5kaWYKQEAgLTY4LDcgKzY5LDggQEAKICNlbmRpZgogCiAvKiBNaW5vciB0d2VhayB0byBvcGVyYXRpb246IGZyZWUgdXAgRVZQX1BLRVkgKi8KLXN0YXRpYyBpbnQgcHVia2V5X2NiKGludCBvcGVyYXRpb24sIEFTTjFfVkFMVUUgKipwdmFsLCBjb25zdCBBU04xX0lURU0gKml0KQorc3RhdGljIGludCBwdWJrZXlfY2IoaW50IG9wZXJhdGlvbiwgQVNOMV9WQUxVRSAqKnB2YWwsIGNvbnN0IEFTTjFfSVRFTSAqaXQsCisJCQl2b2lkICpleGFyZykKIAl7CiAJaWYgKG9wZXJhdGlvbiA9PSBBU04xX09QX0ZSRUVfUE9TVCkKIAkJewpAQCAtODgsMTY5ICs5MCw0MiBAQAogaW50IFg1MDlfUFVCS0VZX3NldChYNTA5X1BVQktFWSAqKngsIEVWUF9QS0VZICpwa2V5KQogCXsKIAlYNTA5X1BVQktFWSAqcGs9TlVMTDsKLQlYNTA5X0FMR09SICphOwotCUFTTjFfT0JKRUNUICpvOwotCXVuc2lnbmVkIGNoYXIgKnMsKnAgPSBOVUxMOwotCWludCBpOwogCiAJaWYgKHggPT0gTlVMTCkgcmV0dXJuKDApOwogCi0JaWYgKChwaz1YNTA5X1BVQktFWV9uZXcoKSkgPT0gTlVMTCkgZ290byBlcnI7Ci0JYT1way0+YWxnb3I7CisJaWYgKChwaz1YNTA5X1BVQktFWV9uZXcoKSkgPT0gTlVMTCkgZ290byBlcnJvcjsKIAotCS8qIHNldCB0aGUgYWxnb3JpdGhtIGlkICovCi0JaWYgKChvPU9CSl9uaWQyb2JqKHBrZXktPnR5cGUpKSA9PSBOVUxMKSBnb3RvIGVycjsKLQlBU04xX09CSkVDVF9mcmVlKGEtPmFsZ29yaXRobSk7Ci0JYS0+YWxnb3JpdGhtPW87Ci0KLQkvKiBTZXQgdGhlIHBhcmFtZXRlciBsaXN0ICovCi0JaWYgKCFwa2V5LT5zYXZlX3BhcmFtZXRlcnMgfHwgKHBrZXktPnR5cGUgPT0gRVZQX1BLRVlfUlNBKSkKKwlpZiAocGtleS0+YW1ldGgpCiAJCXsKLQkJaWYgKChhLT5wYXJhbWV0ZXIgPT0gTlVMTCkgfHwKLQkJCShhLT5wYXJhbWV0ZXItPnR5cGUgIT0gVl9BU04xX05VTEwpKQorCQlpZiAocGtleS0+YW1ldGgtPnB1Yl9lbmNvZGUpCiAJCQl7Ci0JCQlBU04xX1RZUEVfZnJlZShhLT5wYXJhbWV0ZXIpOwotCQkJaWYgKCEoYS0+cGFyYW1ldGVyPUFTTjFfVFlQRV9uZXcoKSkpCisJCQlpZiAoIXBrZXktPmFtZXRoLT5wdWJfZW5jb2RlKHBrLCBwa2V5KSkKIAkJCQl7Ci0JCQkJWDUwOWVycihYNTA5X0ZfWDUwOV9QVUJLRVlfU0VULEVSUl9SX01BTExPQ19GQUlMVVJFKTsKLQkJCQlnb3RvIGVycjsKKwkJCQlYNTA5ZXJyKFg1MDlfRl9YNTA5X1BVQktFWV9TRVQsCisJCQkJCVg1MDlfUl9QVUJMSUNfS0VZX0VOQ09ERV9FUlJPUik7CisJCQkJZ290byBlcnJvcjsKIAkJCQl9Ci0JCQlhLT5wYXJhbWV0ZXItPnR5cGU9Vl9BU04xX05VTEw7CisJCQl9CisJCWVsc2UKKwkJCXsKKwkJCVg1MDllcnIoWDUwOV9GX1g1MDlfUFVCS0VZX1NFVCwKKwkJCQlYNTA5X1JfTUVUSE9EX05PVF9TVVBQT1JURUQpOworCQkJZ290byBlcnJvcjsKIAkJCX0KIAkJfQotI2lmbmRlZiBPUEVOU1NMX05PX0RTQQotCWVsc2UgaWYgKHBrZXktPnR5cGUgPT0gRVZQX1BLRVlfRFNBKQotCQl7Ci0JCXVuc2lnbmVkIGNoYXIgKnBwOwotCQlEU0EgKmRzYTsKLQkJCi0JCWRzYT1wa2V5LT5wa2V5LmRzYTsKLQkJZHNhLT53cml0ZV9wYXJhbXM9MDsKLQkJQVNOMV9UWVBFX2ZyZWUoYS0+cGFyYW1ldGVyKTsKLQkJaWYgKChpPWkyZF9EU0FwYXJhbXMoZHNhLE5VTEwpKSA8PSAwKQotCQkJZ290byBlcnI7Ci0JCWlmICghKHA9KHVuc2lnbmVkIGNoYXIgKilPUEVOU1NMX21hbGxvYyhpKSkpCi0JCQl7Ci0JCQlYNTA5ZXJyKFg1MDlfRl9YNTA5X1BVQktFWV9TRVQsRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwotCQkJZ290byBlcnI7Ci0JCQl9Ci0JCXBwPXA7Ci0JCWkyZF9EU0FwYXJhbXMoZHNhLCZwcCk7Ci0JCWlmICghKGEtPnBhcmFtZXRlcj1BU04xX1RZUEVfbmV3KCkpKQotCQkJewotCQkJT1BFTlNTTF9mcmVlKHApOwotCQkJWDUwOWVycihYNTA5X0ZfWDUwOV9QVUJLRVlfU0VULEVSUl9SX01BTExPQ19GQUlMVVJFKTsKLQkJCWdvdG8gZXJyOwotCQkJfQotCQlhLT5wYXJhbWV0ZXItPnR5cGU9Vl9BU04xX1NFUVVFTkNFOwotCQlpZiAoIShhLT5wYXJhbWV0ZXItPnZhbHVlLnNlcXVlbmNlPUFTTjFfU1RSSU5HX25ldygpKSkKLQkJCXsKLQkJCU9QRU5TU0xfZnJlZShwKTsKLQkJCVg1MDllcnIoWDUwOV9GX1g1MDlfUFVCS0VZX1NFVCxFUlJfUl9NQUxMT0NfRkFJTFVSRSk7Ci0JCQlnb3RvIGVycjsKLQkJCX0KLQkJaWYgKCFBU04xX1NUUklOR19zZXQoYS0+cGFyYW1ldGVyLT52YWx1ZS5zZXF1ZW5jZSxwLGkpKQotCQkJewotCQkJT1BFTlNTTF9mcmVlKHApOwotCQkJWDUwOWVycihYNTA5X0ZfWDUwOV9QVUJLRVlfU0VULEVSUl9SX01BTExPQ19GQUlMVVJFKTsKLQkJCWdvdG8gZXJyOwotCQkJfQotCQlPUEVOU1NMX2ZyZWUocCk7Ci0JCX0KLSNlbmRpZgotI2lmbmRlZiBPUEVOU1NMX05PX0VDCi0JZWxzZSBpZiAocGtleS0+dHlwZSA9PSBFVlBfUEtFWV9FQykKLQkJewotCQlpbnQgbmlkPTA7Ci0JCXVuc2lnbmVkIGNoYXIgKnBwOwotCQlFQ19LRVkgKmVjX2tleTsKLQkJY29uc3QgRUNfR1JPVVAgKmdyb3VwOwotCQkKLQkJZWNfa2V5ID0gcGtleS0+cGtleS5lYzsKLQkJQVNOMV9UWVBFX2ZyZWUoYS0+cGFyYW1ldGVyKTsKLQotCQlpZiAoKGEtPnBhcmFtZXRlciA9IEFTTjFfVFlQRV9uZXcoKSkgPT0gTlVMTCkKLQkJCXsKLQkJCVg1MDllcnIoWDUwOV9GX1g1MDlfUFVCS0VZX1NFVCwgRVJSX1JfQVNOMV9MSUIpOwotCQkJZ290byBlcnI7Ci0JCQl9Ci0KLQkJZ3JvdXAgPSBFQ19LRVlfZ2V0MF9ncm91cChlY19rZXkpOwotCQlpZiAoRUNfR1JPVVBfZ2V0X2FzbjFfZmxhZyhncm91cCkKLSAgICAgICAgICAgICAgICAgICAgICYmIChuaWQgPSBFQ19HUk9VUF9nZXRfY3VydmVfbmFtZShncm91cCkpKQotCQkJewotCQkJLyoganVzdCBzZXQgdGhlIE9JRCAqLwotCQkJYS0+cGFyYW1ldGVyLT50eXBlID0gVl9BU04xX09CSkVDVDsKLQkJCWEtPnBhcmFtZXRlci0+dmFsdWUub2JqZWN0ID0gT0JKX25pZDJvYmoobmlkKTsKLQkJCX0KLQkJZWxzZSAvKiBleHBsaWNpdCBwYXJhbWV0ZXJzICovCi0JCQl7Ci0JCQlpZiAoKGkgPSBpMmRfRUNQYXJhbWV0ZXJzKGVjX2tleSwgTlVMTCkpID09IDApCi0JCQkJewotCQkJCVg1MDllcnIoWDUwOV9GX1g1MDlfUFVCS0VZX1NFVCwgRVJSX1JfRUNfTElCKTsKLQkJCQlnb3RvIGVycjsKLQkJCQl9Ci0JCQlpZiAoKHAgPSAodW5zaWduZWQgY2hhciAqKSBPUEVOU1NMX21hbGxvYyhpKSkgPT0gTlVMTCkKLQkJCQl7Ci0JCQkJWDUwOWVycihYNTA5X0ZfWDUwOV9QVUJLRVlfU0VULCBFUlJfUl9NQUxMT0NfRkFJTFVSRSk7Ci0JCQkJZ290byBlcnI7Ci0JCQkJfQkKLQkJCXBwID0gcDsKLQkJCWlmICghaTJkX0VDUGFyYW1ldGVycyhlY19rZXksICZwcCkpCi0JCQkJewotCQkJCVg1MDllcnIoWDUwOV9GX1g1MDlfUFVCS0VZX1NFVCwgRVJSX1JfRUNfTElCKTsKLQkJCQlPUEVOU1NMX2ZyZWUocCk7Ci0JCQkJZ290byBlcnI7Ci0JCQkJfQotCQkJYS0+cGFyYW1ldGVyLT50eXBlID0gVl9BU04xX1NFUVVFTkNFOwotCQkJaWYgKChhLT5wYXJhbWV0ZXItPnZhbHVlLnNlcXVlbmNlID0gQVNOMV9TVFJJTkdfbmV3KCkpID09IE5VTEwpCi0JCQkJewotCQkJCVg1MDllcnIoWDUwOV9GX1g1MDlfUFVCS0VZX1NFVCwgRVJSX1JfQVNOMV9MSUIpOwotCQkJCU9QRU5TU0xfZnJlZShwKTsKLQkJCQlnb3RvIGVycjsKLQkJCQl9Ci0JCQlBU04xX1NUUklOR19zZXQoYS0+cGFyYW1ldGVyLT52YWx1ZS5zZXF1ZW5jZSwgcCwgaSk7Ci0JCQlPUEVOU1NMX2ZyZWUocCk7Ci0JCQl9Ci0JCX0KLSNlbmRpZgotCWVsc2UgaWYgKDEpCisJZWxzZQogCQl7CiAJCVg1MDllcnIoWDUwOV9GX1g1MDlfUFVCS0VZX1NFVCxYNTA5X1JfVU5TVVBQT1JURURfQUxHT1JJVEhNKTsKLQkJZ290byBlcnI7CisJCWdvdG8gZXJyb3I7CiAJCX0KIAotCWlmICgoaT1pMmRfUHVibGljS2V5KHBrZXksTlVMTCkpIDw9IDApIGdvdG8gZXJyOwotCWlmICgocz0odW5zaWduZWQgY2hhciAqKU9QRU5TU0xfbWFsbG9jKGkrMSkpID09IE5VTEwpCi0JCXsKLQkJWDUwOWVycihYNTA5X0ZfWDUwOV9QVUJLRVlfU0VULEVSUl9SX01BTExPQ19GQUlMVVJFKTsKLQkJZ290byBlcnI7Ci0JCX0KLQlwPXM7Ci0JaTJkX1B1YmxpY0tleShwa2V5LCZwKTsKLQlpZiAoIU1fQVNOMV9CSVRfU1RSSU5HX3NldChway0+cHVibGljX2tleSxzLGkpKQotCQl7Ci0JCVg1MDllcnIoWDUwOV9GX1g1MDlfUFVCS0VZX1NFVCxFUlJfUl9NQUxMT0NfRkFJTFVSRSk7Ci0JCWdvdG8gZXJyOwotCQl9Ci0gIAkvKiBTZXQgbnVtYmVyIG9mIHVudXNlZCBiaXRzIHRvIHplcm8gKi8KLQlway0+cHVibGljX2tleS0+ZmxhZ3MmPSB+KEFTTjFfU1RSSU5HX0ZMQUdfQklUU19MRUZUfDB4MDcpOwotCXBrLT5wdWJsaWNfa2V5LT5mbGFnc3w9QVNOMV9TVFJJTkdfRkxBR19CSVRTX0xFRlQ7Ci0KLQlPUEVOU1NMX2ZyZWUocyk7Ci0KLSNpZiAwCi0JQ1JZUFRPX2FkZCgmcGtleS0+cmVmZXJlbmNlcywxLENSWVBUT19MT0NLX0VWUF9QS0VZKTsKLQlway0+cGtleT1wa2V5OwotI2VuZGlmCi0KIAlpZiAoKnggIT0gTlVMTCkKIAkJWDUwOV9QVUJLRVlfZnJlZSgqeCk7CiAKIAkqeD1wazsKIAogCXJldHVybiAxOwotZXJyOgorZXJyb3I6CiAJaWYgKHBrICE9IE5VTEwpIFg1MDlfUFVCS0VZX2ZyZWUocGspOwogCXJldHVybiAwOwogCX0KQEAgLTI1OCwxMTkgKzEzMyw1MCBAQAogRVZQX1BLRVkgKlg1MDlfUFVCS0VZX2dldChYNTA5X1BVQktFWSAqa2V5KQogCXsKIAlFVlBfUEtFWSAqcmV0PU5VTEw7Ci0JbG9uZyBqOwotCWludCB0eXBlOwotCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnA7Ci0jaWYgIWRlZmluZWQoT1BFTlNTTF9OT19EU0EpIHx8ICFkZWZpbmVkKE9QRU5TU0xfTk9fRUNEU0EpCi0JY29uc3QgdW5zaWduZWQgY2hhciAqY3A7Ci0JWDUwOV9BTEdPUiAqYTsKLSNlbmRpZgogCi0JaWYgKGtleSA9PSBOVUxMKSBnb3RvIGVycjsKKwlpZiAoa2V5ID09IE5VTEwpIGdvdG8gZXJyb3I7CiAKIAlpZiAoa2V5LT5wa2V5ICE9IE5VTEwpCiAJCXsKIAkJQ1JZUFRPX2FkZCgma2V5LT5wa2V5LT5yZWZlcmVuY2VzLCAxLCBDUllQVE9fTE9DS19FVlBfUEtFWSk7Ci0JCXJldHVybihrZXktPnBrZXkpOworCQlyZXR1cm4ga2V5LT5wa2V5OwogCQl9CiAKLQlpZiAoa2V5LT5wdWJsaWNfa2V5ID09IE5VTEwpIGdvdG8gZXJyOworCWlmIChrZXktPnB1YmxpY19rZXkgPT0gTlVMTCkgZ290byBlcnJvcjsKIAotCXR5cGU9T0JKX29iajJuaWQoa2V5LT5hbGdvci0+YWxnb3JpdGhtKTsKIAlpZiAoKHJldCA9IEVWUF9QS0VZX25ldygpKSA9PSBOVUxMKQogCQl7CiAJCVg1MDllcnIoWDUwOV9GX1g1MDlfUFVCS0VZX0dFVCwgRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwotCQlnb3RvIGVycjsKKwkJZ290byBlcnJvcjsKIAkJfQotCXJldC0+dHlwZSA9IEVWUF9QS0VZX3R5cGUodHlwZSk7CiAKLQkvKiB0aGUgcGFyYW1ldGVycyBtdXN0IGJlIGV4dHJhY3RlZCBiZWZvcmUgdGhlIHB1YmxpYyBrZXkgKEVDRFNBISkgKi8KLQkKLSNpZiAhZGVmaW5lZChPUEVOU1NMX05PX0RTQSkgfHwgIWRlZmluZWQoT1BFTlNTTF9OT19FQ0RTQSkKLQlhPWtleS0+YWxnb3I7Ci0jZW5kaWYKLQotCWlmICgwKQotCQk7Ci0jaWZuZGVmIE9QRU5TU0xfTk9fRFNBCi0JZWxzZSBpZiAocmV0LT50eXBlID09IEVWUF9QS0VZX0RTQSkKKwlpZiAoIUVWUF9QS0VZX3NldF90eXBlKHJldCwgT0JKX29iajJuaWQoa2V5LT5hbGdvci0+YWxnb3JpdGhtKSkpCiAJCXsKLQkJaWYgKGEtPnBhcmFtZXRlciAmJiAoYS0+cGFyYW1ldGVyLT50eXBlID09IFZfQVNOMV9TRVFVRU5DRSkpCi0JCQl7Ci0JCQlpZiAoKHJldC0+cGtleS5kc2EgPSBEU0FfbmV3KCkpID09IE5VTEwpCi0JCQkJewotCQkJCVg1MDllcnIoWDUwOV9GX1g1MDlfUFVCS0VZX0dFVCwgRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwotCQkJCWdvdG8gZXJyOwotCQkJCX0KLQkJCXJldC0+cGtleS5kc2EtPndyaXRlX3BhcmFtcz0wOwotCQkJY3A9cD1hLT5wYXJhbWV0ZXItPnZhbHVlLnNlcXVlbmNlLT5kYXRhOwotCQkJaj1hLT5wYXJhbWV0ZXItPnZhbHVlLnNlcXVlbmNlLT5sZW5ndGg7Ci0JCQlpZiAoIWQyaV9EU0FwYXJhbXMoJnJldC0+cGtleS5kc2EsICZjcCwgKGxvbmcpaikpCi0JCQkJZ290byBlcnI7Ci0JCQl9Ci0JCXJldC0+c2F2ZV9wYXJhbWV0ZXJzPTE7CisJCVg1MDllcnIoWDUwOV9GX1g1MDlfUFVCS0VZX0dFVCxYNTA5X1JfVU5TVVBQT1JURURfQUxHT1JJVEhNKTsKKwkJZ290byBlcnJvcjsKIAkJfQotI2VuZGlmCi0jaWZuZGVmIE9QRU5TU0xfTk9fRUMKLQllbHNlIGlmIChyZXQtPnR5cGUgPT0gRVZQX1BLRVlfRUMpCi0JCXsKLQkJaWYgKGEtPnBhcmFtZXRlciAmJiAoYS0+cGFyYW1ldGVyLT50eXBlID09IFZfQVNOMV9TRVFVRU5DRSkpCi0JCQl7Ci0JCQkvKiB0eXBlID09IFZfQVNOMV9TRVFVRU5DRSA9PiB3ZSBoYXZlIGV4cGxpY2l0IHBhcmFtZXRlcnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIChlLmcuIHBhcmFtZXRlcnMgaW4gdGhlIFg5XzYyX0VDX1BBUkFNRVRFUlMtc3RydWN0dXJlICkKLQkJCSAqLwotCQkJaWYgKChyZXQtPnBrZXkuZWM9IEVDX0tFWV9uZXcoKSkgPT0gTlVMTCkKLQkJCQl7Ci0JCQkJWDUwOWVycihYNTA5X0ZfWDUwOV9QVUJLRVlfR0VULCAKLQkJCQkJRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwotCQkJCWdvdG8gZXJyOwotCQkJCX0KLQkJCWNwID0gcCA9IGEtPnBhcmFtZXRlci0+dmFsdWUuc2VxdWVuY2UtPmRhdGE7Ci0JCQlqID0gYS0+cGFyYW1ldGVyLT52YWx1ZS5zZXF1ZW5jZS0+bGVuZ3RoOwotCQkJaWYgKCFkMmlfRUNQYXJhbWV0ZXJzKCZyZXQtPnBrZXkuZWMsICZjcCwgKGxvbmcpaikpCi0JCQkJewotCQkJCVg1MDllcnIoWDUwOV9GX1g1MDlfUFVCS0VZX0dFVCwgRVJSX1JfRUNfTElCKTsKLQkJCQlnb3RvIGVycjsKLQkJCQl9Ci0JCQl9Ci0JCWVsc2UgaWYgKGEtPnBhcmFtZXRlciAmJiAoYS0+cGFyYW1ldGVyLT50eXBlID09IFZfQVNOMV9PQkpFQ1QpKQotCQkJewotCQkJLyogdHlwZSA9PSBWX0FTTjFfT0JKRUNUID0+IHRoZSBwYXJhbWV0ZXJzIGFyZSBnaXZlbgotCQkJICogYnkgYW4gYXNuMSBPSUQKLQkJCSAqLwotCQkJRUNfS0VZICAgKmVjX2tleTsKLQkJCUVDX0dST1VQICpncm91cDsKIAotCQkJaWYgKHJldC0+cGtleS5lYyA9PSBOVUxMKQotCQkJCXJldC0+cGtleS5lYyA9IEVDX0tFWV9uZXcoKTsKLQkJCWVjX2tleSA9IHJldC0+cGtleS5lYzsKLQkJCWlmIChlY19rZXkgPT0gTlVMTCkKLQkJCQlnb3RvIGVycjsKLQkJCWdyb3VwID0gRUNfR1JPVVBfbmV3X2J5X2N1cnZlX25hbWUoT0JKX29iajJuaWQoYS0+cGFyYW1ldGVyLT52YWx1ZS5vYmplY3QpKTsKLQkJCWlmIChncm91cCA9PSBOVUxMKQotCQkJCWdvdG8gZXJyOwotCQkJRUNfR1JPVVBfc2V0X2FzbjFfZmxhZyhncm91cCwgT1BFTlNTTF9FQ19OQU1FRF9DVVJWRSk7Ci0JCQlpZiAoRUNfS0VZX3NldF9ncm91cChlY19rZXksIGdyb3VwKSA9PSAwKQotCQkJCWdvdG8gZXJyOwotCQkJRUNfR1JPVVBfZnJlZShncm91cCk7CisJaWYgKHJldC0+YW1ldGgtPnB1Yl9kZWNvZGUpCisJCXsKKwkJaWYgKCFyZXQtPmFtZXRoLT5wdWJfZGVjb2RlKHJldCwga2V5KSkKKwkJCXsKKwkJCVg1MDllcnIoWDUwOV9GX1g1MDlfUFVCS0VZX0dFVCwKKwkJCQkJCVg1MDlfUl9QVUJMSUNfS0VZX0RFQ09ERV9FUlJPUik7CisJCQlnb3RvIGVycm9yOwogCQkJfQotCQkJLyogdGhlIGNhc2UgaW1wbGljaXRseUNBIGlzIGN1cnJlbnRseSBub3QgaW1wbGVtZW50ZWQgKi8KLQkJcmV0LT5zYXZlX3BhcmFtZXRlcnMgPSAxOwogCQl9Ci0jZW5kaWYKLQotCXA9a2V5LT5wdWJsaWNfa2V5LT5kYXRhOwotICAgICAgICBqPWtleS0+cHVibGljX2tleS0+bGVuZ3RoOwotICAgICAgICBpZiAoIWQyaV9QdWJsaWNLZXkodHlwZSwgJnJldCwgJnAsIChsb25nKWopKQorCWVsc2UKIAkJewotCQlYNTA5ZXJyKFg1MDlfRl9YNTA5X1BVQktFWV9HRVQsIFg1MDlfUl9FUlJfQVNOMV9MSUIpOwotCQlnb3RvIGVycjsKKwkJWDUwOWVycihYNTA5X0ZfWDUwOV9QVUJLRVlfR0VULCBYNTA5X1JfTUVUSE9EX05PVF9TVVBQT1JURUQpOworCQlnb3RvIGVycm9yOwogCQl9CiAKIAlrZXktPnBrZXkgPSByZXQ7CiAJQ1JZUFRPX2FkZCgmcmV0LT5yZWZlcmVuY2VzLCAxLCBDUllQVE9fTE9DS19FVlBfUEtFWSk7Ci0JcmV0dXJuKHJldCk7Ci1lcnI6CisKKwlyZXR1cm4gcmV0OworCisJZXJyb3I6CiAJaWYgKHJldCAhPSBOVUxMKQogCQlFVlBfUEtFWV9mcmVlKHJldCk7CiAJcmV0dXJuKE5VTEwpOwpAQCAtNTI5LDMgKzMzNSwzOSBAQAogCXJldHVybihyZXQpOwogCX0KICNlbmRpZgorCitpbnQgWDUwOV9QVUJLRVlfc2V0MF9wYXJhbShYNTA5X1BVQktFWSAqcHViLCBBU04xX09CSkVDVCAqYW9iaiwKKwkJCQkJaW50IHB0eXBlLCB2b2lkICpwdmFsLAorCQkJCQl1bnNpZ25lZCBjaGFyICpwZW5jLCBpbnQgcGVuY2xlbikKKwl7CisJaWYgKCFYNTA5X0FMR09SX3NldDAocHViLT5hbGdvciwgYW9iaiwgcHR5cGUsIHB2YWwpKQorCQlyZXR1cm4gMDsKKwlpZiAocGVuYykKKwkJeworCQlpZiAocHViLT5wdWJsaWNfa2V5LT5kYXRhKQorCQkJT1BFTlNTTF9mcmVlKHB1Yi0+cHVibGljX2tleS0+ZGF0YSk7CisJCXB1Yi0+cHVibGljX2tleS0+ZGF0YSA9IHBlbmM7CisJCXB1Yi0+cHVibGljX2tleS0+bGVuZ3RoID0gcGVuY2xlbjsKKyAgCQkvKiBTZXQgbnVtYmVyIG9mIHVudXNlZCBiaXRzIHRvIHplcm8gKi8KKwkJcHViLT5wdWJsaWNfa2V5LT5mbGFncyY9IH4oQVNOMV9TVFJJTkdfRkxBR19CSVRTX0xFRlR8MHgwNyk7CisJCXB1Yi0+cHVibGljX2tleS0+ZmxhZ3N8PUFTTjFfU1RSSU5HX0ZMQUdfQklUU19MRUZUOworCQl9CisJcmV0dXJuIDE7CisJfQorCitpbnQgWDUwOV9QVUJLRVlfZ2V0MF9wYXJhbShBU04xX09CSkVDVCAqKnBwa2FsZywKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqKnBrLCBpbnQgKnBwa2xlbiwKKwkJWDUwOV9BTEdPUiAqKnBhLAorCQlYNTA5X1BVQktFWSAqcHViKQorCXsKKwlpZiAocHBrYWxnKQorCQkqcHBrYWxnID0gcHViLT5hbGdvci0+YWxnb3JpdGhtOworCWlmIChwaykKKwkJeworCQkqcGsgPSBwdWItPnB1YmxpY19rZXktPmRhdGE7CisJCSpwcGtsZW4gPSBwdWItPnB1YmxpY19rZXktPmxlbmd0aDsKKwkJfQorCWlmIChwYSkKKwkJKnBhID0gcHViLT5hbGdvcjsKKwlyZXR1cm4gMTsKKwl9CmRpZmYgLS1naXQgYS9jcnlwdG8vYXNuMS94X3JlcS5jIGIvY3J5cHRvL2FzbjEveF9yZXEuYwppbmRleCA1OWNhOGNlLi5kNTc1NTU4IDEwMDY0NAotLS0gYS9jcnlwdG8vYXNuMS94X3JlcS5jCisrKyBiL2NyeXB0by9hc24xL3hfcmVxLmMKQEAgLTc5LDcgKzc5LDggQEAKICAqCiAgKi8KIAotc3RhdGljIGludCByaW5mX2NiKGludCBvcGVyYXRpb24sIEFTTjFfVkFMVUUgKipwdmFsLCBjb25zdCBBU04xX0lURU0gKml0KQorc3RhdGljIGludCByaW5mX2NiKGludCBvcGVyYXRpb24sIEFTTjFfVkFMVUUgKipwdmFsLCBjb25zdCBBU04xX0lURU0gKml0LAorCQkJCQkJCXZvaWQgKmV4YXJnKQogewogCVg1MDlfUkVRX0lORk8gKnJpbmYgPSAoWDUwOV9SRVFfSU5GTyAqKSpwdmFsOwogCmRpZmYgLS1naXQgYS9jcnlwdG8vYXNuMS94X3g1MDkuYyBiL2NyeXB0by9hc24xL3hfeDUwOS5jCmluZGV4IGUxMTg2OTYuLmRhZmQzY2MgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hc24xL3hfeDUwOS5jCisrKyBiL2NyeXB0by9hc24xL3hfeDUwOS5jCkBAIC04MSw3ICs4MSw4IEBACiAKIGV4dGVybiB2b2lkIHBvbGljeV9jYWNoZV9mcmVlKFg1MDlfUE9MSUNZX0NBQ0hFICpjYWNoZSk7CiAKLXN0YXRpYyBpbnQgeDUwOV9jYihpbnQgb3BlcmF0aW9uLCBBU04xX1ZBTFVFICoqcHZhbCwgY29uc3QgQVNOMV9JVEVNICppdCkKK3N0YXRpYyBpbnQgeDUwOV9jYihpbnQgb3BlcmF0aW9uLCBBU04xX1ZBTFVFICoqcHZhbCwgY29uc3QgQVNOMV9JVEVNICppdCwKKwkJCQkJCQkJdm9pZCAqZXhhcmcpCiB7CiAJWDUwOSAqcmV0ID0gKFg1MDkgKikqcHZhbDsKIApAQCAtOTksNiArMTAwLDcgQEAKIAkJcmV0LT5yZmMzNzc5X2FzaWQgPSBOVUxMOwogI2VuZGlmCiAJCXJldC0+YXV4ID0gTlVMTDsKKwkJcmV0LT5jcmxkcCA9IE5VTEw7CiAJCUNSWVBUT19uZXdfZXhfZGF0YShDUllQVE9fRVhfSU5ERVhfWDUwOSwgcmV0LCAmcmV0LT5leF9kYXRhKTsKIAkJYnJlYWs7CiAKQEAgLTExMiw3ICsxMTQsMTAgQEAKIAkJWDUwOV9DRVJUX0FVWF9mcmVlKHJldC0+YXV4KTsKIAkJQVNOMV9PQ1RFVF9TVFJJTkdfZnJlZShyZXQtPnNraWQpOwogCQlBVVRIT1JJVFlfS0VZSURfZnJlZShyZXQtPmFraWQpOworCQlDUkxfRElTVF9QT0lOVFNfZnJlZShyZXQtPmNybGRwKTsKIAkJcG9saWN5X2NhY2hlX2ZyZWUocmV0LT5wb2xpY3lfY2FjaGUpOworCQlHRU5FUkFMX05BTUVTX2ZyZWUocmV0LT5hbHRuYW1lKTsKKwkJTkFNRV9DT05TVFJBSU5UU19mcmVlKHJldC0+bmMpOwogI2lmbmRlZiBPUEVOU1NMX05PX1JGQzM3NzkKIAkJc2tfSVBBZGRyZXNzRmFtaWx5X3BvcF9mcmVlKHJldC0+cmZjMzc3OV9hZGRyLCBJUEFkZHJlc3NGYW1pbHlfZnJlZSk7CiAJCUFTSWRlbnRpZmllcnNfZnJlZShyZXQtPnJmYzM3NzlfYXNpZCk7CkBAIC0xMzYsMTkgKzE0MSw2IEBACiBJTVBMRU1FTlRfQVNOMV9GVU5DVElPTlMoWDUwOSkKIElNUExFTUVOVF9BU04xX0RVUF9GVU5DVElPTihYNTA5KQogCi1zdGF0aWMgQVNOMV9NRVRIT0QgbWV0aD0KLSAgICB7Ci0gICAgKEkyRF9PRih2b2lkKSkgIGkyZF9YNTA5LAotICAgIChEMklfT0Yodm9pZCkpIGQyaV9YNTA5LAotICAgICh2b2lkICooKikodm9pZCkpWDUwOV9uZXcsCi0gICAgKHZvaWQgKCopKHZvaWQgKikpIFg1MDlfZnJlZQotICAgIH07Ci0KLUFTTjFfTUVUSE9EICpYNTA5X2FzbjFfbWV0aCh2b2lkKQotCXsKLQlyZXR1cm4oJm1ldGgpOwotCX0KLQogaW50IFg1MDlfZ2V0X2V4X25ld19pbmRleChsb25nIGFyZ2wsIHZvaWQgKmFyZ3AsIENSWVBUT19FWF9uZXcgKm5ld19mdW5jLAogCSAgICAgQ1JZUFRPX0VYX2R1cCAqZHVwX2Z1bmMsIENSWVBUT19FWF9mcmVlICpmcmVlX2Z1bmMpCiAgICAgICAgIHsKZGlmZiAtLWdpdCBhL2NyeXB0by9iaW8vTWFrZWZpbGUgYi9jcnlwdG8vYmlvL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxY2Q3NmNlLi4wMDAwMDAwCi0tLSBhL2NyeXB0by9iaW8vTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwyMjEgKzAsMCBAQAotIwotIyBPcGVuU1NML2NyeXB0by9iaW8vTWFrZWZpbGUKLSMKLQotRElSPQliaW8KLVRPUD0JLi4vLi4KLUNDPQljYwotSU5DTFVERVM9IC1JLi4gLUkkKFRPUCkgLUkuLi8uLi9pbmNsdWRlCi1DRkxBRz0tZwotTUFLRUZJTEU9CU1ha2VmaWxlCi1BUj0JCWFyIHIKLQotQ0ZMQUdTPSAkKElOQ0xVREVTKSAkKENGTEFHKQotCi1HRU5FUkFMPU1ha2VmaWxlCi1URVNUPQotQVBQUz0KLQotTElCPSQoVE9QKS9saWJjcnlwdG8uYQotTElCU1JDPSBiaW9fbGliLmMgYmlvX2NiLmMgYmlvX2Vyci5jIFwKLQlic3NfbWVtLmMgYnNzX251bGwuYyBic3NfZmQuYyBcCi0JYnNzX2ZpbGUuYyBic3Nfc29jay5jIGJzc19jb25uLmMgXAotCWJmX251bGwuYyBiZl9idWZmLmMgYl9wcmludC5jIGJfZHVtcC5jIFwKLQliX3NvY2suYyBic3NfYWNwdC5jIGJmX25iaW8uYyBic3NfbG9nLmMgYnNzX2Jpby5jIFwKLQlic3NfZGdyYW0uYwotIwliZl9sYnVmLmMKLUxJQk9CSj0gYmlvX2xpYi5vIGJpb19jYi5vIGJpb19lcnIubyBcCi0JYnNzX21lbS5vIGJzc19udWxsLm8gYnNzX2ZkLm8gXAotCWJzc19maWxlLm8gYnNzX3NvY2subyBic3NfY29ubi5vIFwKLQliZl9udWxsLm8gYmZfYnVmZi5vIGJfcHJpbnQubyBiX2R1bXAubyBcCi0JYl9zb2NrLm8gYnNzX2FjcHQubyBiZl9uYmlvLm8gYnNzX2xvZy5vIGJzc19iaW8ubyBcCi0JYnNzX2RncmFtLm8KLSMJYmZfbGJ1Zi5vCi0KLVNSQz0gJChMSUJTUkMpCi0KLUVYSEVBREVSPSBiaW8uaAotSEVBREVSPQliaW9fbGNsLmggJChFWEhFQURFUikKLQotQUxMPSAgICAkKEdFTkVSQUwpICQoU1JDKSAkKEhFQURFUikKLQotdG9wOgotCShjZCAuLi8uLjsgJChNQUtFKSBESVJTPWNyeXB0byBTRElSUz0kKERJUikgc3ViX2FsbCkKLQotYWxsOglsaWIKLQotbGliOgkkKExJQk9CSikKLQkkKEFSWCkgJChMSUIpICQoTElCT0JKKQotCSQoUkFOTElCKSAkKExJQikgfHwgZWNobyBOZXZlciBtaW5kLgotCUB0b3VjaCBsaWIKLQotZmlsZXM6Ci0JJChQRVJMKSAkKFRPUCkvdXRpbC9maWxlcy5wbCBNYWtlZmlsZSA+PiAkKFRPUCkvTUlORk8KLQotbGlua3M6Ci0JQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL2luY2x1ZGUvb3BlbnNzbCAkKEVYSEVBREVSKQotCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi90ZXN0ICQoVEVTVCkKLQlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vYXBwcyAkKEFQUFMpCi0KLWluc3RhbGw6Ci0JQFsgLW4gIiQoSU5TVEFMTFRPUCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHRvcCBNYWtlZmlsZS4uLgotCUBoZWFkZXJsaXN0PSIkKEVYSEVBREVSKSI7IGZvciBpIGluICQkaGVhZGVybGlzdDsgXAotCWRvICBcCi0JKGNwICQkaSAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaTsgXAotCWNobW9kIDY0NCAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaSApOyBcCi0JZG9uZTsKLQotdGFnczoKLQljdGFncyAkKFNSQykKLQotdGVzdHM6Ci0KLWxpbnQ6Ci0JbGludCAtRExJTlQgJChJTkNMVURFUykgJChTUkMpPmZsdWZmCi0KLWRlcGVuZDoKLQlAWyAtbiAiJChNQUtFREVQRU5EKSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdXBwZXIgTWFrZWZpbGUuLi4KLQkkKE1BS0VERVBFTkQpIC0tICQoQ0ZMQUcpICQoSU5DTFVERVMpICQoREVQRkxBRykgLS0gJChQUk9HUykgJChMSUJTUkMpCi0KLWRjbGVhbjoKLQkkKFBFUkwpIC1wZSAnaWYgKC9eIyBETyBOT1QgREVMRVRFIFRISVMgTElORS8pIHtwcmludDsgZXhpdCgwKTt9JyAkKE1BS0VGSUxFKSA+TWFrZWZpbGUubmV3Ci0JbXYgLWYgTWFrZWZpbGUubmV3ICQoTUFLRUZJTEUpCi0KLWNsZWFuOgotCXJtIC1mICoubyAqLm9iaiBsaWIgdGFncyBjb3JlIC5wdXJlIC5uZnMqICoub2xkICouYmFrIGZsdWZmCi0KLSMgRE8gTk9UIERFTEVURSBUSElTIExJTkUgLS0gbWFrZSBkZXBlbmQgZGVwZW5kcyBvbiBpdC4KLQotYl9kdW1wLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWJfZHVtcC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1iX2R1bXAubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1iX2R1bXAubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWJfZHVtcC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotYl9kdW1wLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotYl9kdW1wLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggYl9kdW1wLmMgYmlvX2xjbC5oCi1iX3ByaW50Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmgKLWJfcHJpbnQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotYl9wcmludC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWJfcHJpbnQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWJfcHJpbnQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWJfcHJpbnQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1iX3ByaW50Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggYl9wcmludC5jCi1iX3NvY2subzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotYl9zb2NrLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWJfc29jay5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWJfc29jay5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotYl9zb2NrLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1iX3NvY2subzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1iX3NvY2subzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBiX3NvY2suYwotYmZfYnVmZi5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1iZl9idWZmLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWJmX2J1ZmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1iZl9idWZmLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1iZl9idWZmLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1iZl9idWZmLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotYmZfYnVmZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGJmX2J1ZmYuYwotYmZfbmJpby5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1iZl9uYmlvLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWJmX25iaW8ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1iZl9uYmlvLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1iZl9uYmlvLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1iZl9uYmlvLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1iZl9uYmlvLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1iZl9uYmlvLm86IC4uL2NyeXB0bGliLmggYmZfbmJpby5jCi1iZl9udWxsLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWJmX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotYmZfbnVsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWJmX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWJmX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWJmX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1iZl9udWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggYmZfbnVsbC5jCi1iaW9fY2IubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotYmlvX2NiLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWJpb19jYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWJpb19jYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotYmlvX2NiLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1iaW9fY2IubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1iaW9fY2IubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBiaW9fY2IuYwotYmlvX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1iaW9fZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotYmlvX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotYmlvX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotYmlvX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWJpb19lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggYmlvX2Vyci5jCi1iaW9fbGliLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWJpb19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotYmlvX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWJpb19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWJpb19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWJpb19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1iaW9fbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggYmlvX2xpYi5jCi1ic3NfYWNwdC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1ic3NfYWNwdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1ic3NfYWNwdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWJzc19hY3B0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1ic3NfYWNwdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotYnNzX2FjcHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1ic3NfYWNwdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGJzc19hY3B0LmMKLWJzc19iaW8ubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotYnNzX2Jpby5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLWJzc19iaW8ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1ic3NfYmlvLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi1ic3NfYmlvLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotYnNzX2Jpby5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotYnNzX2Jpby5vOiBic3NfYmlvLmMKLWJzc19jb25uLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWJzc19jb25uLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWJzc19jb25uLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotYnNzX2Nvbm4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWJzc19jb25uLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1ic3NfY29ubi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWJzc19jb25uLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggYnNzX2Nvbm4uYwotYnNzX2RncmFtLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWJzc19kZ3JhbS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1ic3NfZGdyYW0ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1ic3NfZGdyYW0ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWJzc19kZ3JhbS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotYnNzX2RncmFtLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotYnNzX2RncmFtLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggYnNzX2RncmFtLmMKLWJzc19mZC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1ic3NfZmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotYnNzX2ZkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotYnNzX2ZkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1ic3NfZmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWJzc19mZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWJzc19mZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGJpb19sY2wuaCBic3NfZmQuYwotYnNzX2ZpbGUubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotYnNzX2ZpbGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotYnNzX2ZpbGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1ic3NfZmlsZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotYnNzX2ZpbGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWJzc19maWxlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotYnNzX2ZpbGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBiaW9fbGNsLmggYnNzX2ZpbGUuYwotYnNzX2xvZy5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1ic3NfbG9nLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWJzc19sb2cubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1ic3NfbG9nLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1ic3NfbG9nLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1ic3NfbG9nLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotYnNzX2xvZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGJzc19sb2cuYwotYnNzX21lbS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1ic3NfbWVtLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWJzc19tZW0ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1ic3NfbWVtLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1ic3NfbWVtLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1ic3NfbWVtLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotYnNzX21lbS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGJzc19tZW0uYwotYnNzX251bGwubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotYnNzX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotYnNzX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1ic3NfbnVsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotYnNzX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWJzc19udWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotYnNzX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBic3NfbnVsbC5jCi1ic3Nfc29jay5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1ic3Nfc29jay5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1ic3Nfc29jay5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWJzc19zb2NrLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1ic3Nfc29jay5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotYnNzX3NvY2subzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1ic3Nfc29jay5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGJzc19zb2NrLmMKZGlmZiAtLWdpdCBhL2NyeXB0by9iaW8vYl9wcmludC5jIGIvY3J5cHRvL2Jpby9iX3ByaW50LmMKaW5kZXggM2E4N2IwZS4uMTQzYTdjZiAxMDA2NDQKLS0tIGEvY3J5cHRvL2Jpby9iX3ByaW50LmMKKysrIGIvY3J5cHRvL2Jpby9iX3ByaW50LmMKQEAgLTExNSw4ICsxMTUsOCBAQAogI2RlZmluZSBMRE9VQkxFIGRvdWJsZQogI2VuZGlmCiAKLSNpZiBIQVZFX0xPTkdfTE9ORwotIyBpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX1dJTjMyKSAmJiAhZGVmaW5lZChfX0dOVUNfXykKKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworIyBpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19HTlVDX18pCiAjIGRlZmluZSBMTE9ORyBfX2ludDY0CiAjIGVsc2UKICMgZGVmaW5lIExMT05HIGxvbmcgbG9uZwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Jpby9iX3NvY2suYyBiL2NyeXB0by9iaW8vYl9zb2NrLmMKaW5kZXggZWFkNDc3ZC4uNWVhNjIxYyAxMDA2NDQKLS0tIGEvY3J5cHRvL2Jpby9iX3NvY2suYworKysgYi9jcnlwdG8vYmlvL2Jfc29jay5jCkBAIC03MiwxMSArNzIsOSBAQAogCiAjaWZuZGVmIE9QRU5TU0xfTk9fU09DSwogCi0jaWZkZWYgT1BFTlNTTF9TWVNfV0lOMTYKLSNkZWZpbmUgU09DS0VUX1BST1RPQ09MIDAgLyogbW9yZSBtaWNyb3NvZnQgc3R1cGlkaXR5ICovCi0jZWxzZQorI2luY2x1ZGUgPG9wZW5zc2wvZHNvLmg+CisKICNkZWZpbmUgU09DS0VUX1BST1RPQ09MIElQUFJPVE9fVENQCi0jZW5kaWYKIAogI2lmZGVmIFNPX01BWENPTk4KICNkZWZpbmUgTUFYX0xJU1RFTiAgU09fTUFYQ09OTgpAQCAtOTAsNiArODgsMTcgQEAKIHN0YXRpYyBpbnQgd3NhX2luaXRfZG9uZT0wOwogI2VuZGlmCiAKKy8qCisgKiBXU0FBUEkgc3BlY2lmaWVyIGlzIHJlcXVpcmVkIHRvIG1ha2UgaW5kaXJlY3QgY2FsbHMgdG8gcnVuLXRpbWUKKyAqIGxpbmtlZCBXaW5Tb2NrIDIgZnVuY3Rpb25zIHVzZWQgaW4gdGhpcyBtb2R1bGUsIHRvIGJlIHNwZWNpZmljCisgKiBbZ2V0fGZyZWVdYWRkcmluZm8gYW5kIGdldG5hbWVpbmZvLiBUaGlzIGlzIGJlY2F1c2UgV2luU29jayB1c2VzCisgKiB1c2VzIG5vbi1DIGNhbGxpbmcgY29udmVudGlvbiwgX19zdGRjYWxsIHZzLiBfX2NkZWNsLCBvbiB4ODYKKyAqIFdpbmRvd3MuIE9uIG5vbi1XaW5Tb2NrIHBsYXRmb3JtcyBXU0FBUEkgbmVlZHMgdG8gYmUgdm9pZC4KKyAqLworI2lmbmRlZiBXU0FBUEkKKyNkZWZpbmUgV1NBQVBJCisjZW5kaWYKKwogI2lmIDAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIEJJT19naGJuX2hpdHM9MEw7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBCSU9fZ2hibl9taXNzPTBMOwpAQCAtMjI2LDYgKzIzNSwxMCBAQAogCWludCBqLGk7CiAJaW50IHNpemU7CiAJCSAKKyNpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX0JFT1NfUjUpCisJcmV0dXJuIDA7CisjZW5kaWYKKwkJIAogCXNpemU9c2l6ZW9mKGludCk7CiAJLyogTm90ZTogdW5kZXIgV2luZG93cyB0aGUgdGhpcmQgcGFyYW1ldGVyIGlzIG9mIHR5cGUgKGNoYXIgKikKIAkgKiB3aGVyZWFzIHVuZGVyIG90aGVyIHN5c3RlbXMgaXQgaXMgKHZvaWQgKikgaWYgeW91IGRvbid0IGhhdmUKQEAgLTQ2Niw3ICs0NzksMTIgQEAKIAkgIAogCQl3c2FfaW5pdF9kb25lPTE7CiAJCW1lbXNldCgmd3NhX3N0YXRlLDAsc2l6ZW9mKHdzYV9zdGF0ZSkpOwotCQlpZiAoV1NBU3RhcnR1cCgweDAxMDEsJndzYV9zdGF0ZSkhPTApCisJCS8qIE5vdCBtYWtpbmcgd3NhX3N0YXRlIGF2YWlsYWJsZSB0byB0aGUgcmVzdCBvZiB0aGUKKwkJICogY29kZSBpcyBmb3JtYWxseSB3cm9uZy4gQnV0IHRoZSBzdHJ1Y3R1cmVzIHdlIHVzZQorCQkgKiBhcmUgW2JlbGVpdmVkIHRvIGJlXSBpbnZhcmlhYmxlIGFtb25nIFdpbnNvY2sgRExMcywKKwkJICogd2hpbGUgQVBJIGF2YWlsYWJpbGl0eSBpcyBbZXhwZWN0ZWQgdG8gYmVdIHByb2JlZAorCQkgKiBhdCBydW4tdGltZSB3aXRoIERTT19nbG9iYWxfbG9va3VwLiAqLworCQlpZiAoV1NBU3RhcnR1cCgweDAyMDIsJndzYV9zdGF0ZSkhPTApCiAJCQl7CiAJCQllcnI9V1NBR2V0TGFzdEVycm9yKCk7CiAJCQlTWVNlcnIoU1lTX0ZfV1NBU1RBUlRVUCxlcnIpOwpAQCAtNTEwLDggKzUyOCw4IEBACiAJaWYgKHdzYV9pbml0X2RvbmUpCiAJCXsKIAkJd3NhX2luaXRfZG9uZT0wOwotI2lmbmRlZiBPUEVOU1NMX1NZU19XSU5DRQotCQlXU0FDYW5jZWxCbG9ja2luZ0NhbGwoKTsJLyogV2luc29jayAxLjEgc3BlY2lmaWMgKi8KKyNpZiAwCQkvKiB0aGlzIGNhbGwgaXMgY2xhaW1lZCB0byBiZSBub24tcHJlc2VudCBpbiBXaW5zb2NrMiAqLworCQlXU0FDYW5jZWxCbG9ja2luZ0NhbGwoKTsKICNlbmRpZgogCQlXU0FDbGVhbnVwKCk7CiAJCX0KQEAgLTU4MSwxMiArNTk5LDE4IEBACiBpbnQgQklPX2dldF9hY2NlcHRfc29ja2V0KGNoYXIgKmhvc3QsIGludCBiaW5kX21vZGUpCiAJewogCWludCByZXQ9MDsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2VydmVyLGNsaWVudDsKLQlpbnQgcz1JTlZBTElEX1NPQ0tFVCxjczsKKwl1bmlvbiB7CisJCXN0cnVjdCBzb2NrYWRkciBzYTsKKwkJc3RydWN0IHNvY2thZGRyX2luIHNhX2luOworI2lmIE9QRU5TU0xfVVNFX0lQVjYKKwkJc3RydWN0IHNvY2thZGRyX2luNiBzYV9pbjY7CisjZW5kaWYKKwl9IHNlcnZlcixjbGllbnQ7CisJaW50IHM9SU5WQUxJRF9TT0NLRVQsY3MsYWRkcmxlbjsKIAl1bnNpZ25lZCBjaGFyIGlwWzRdOwogCXVuc2lnbmVkIHNob3J0IHBvcnQ7CiAJY2hhciAqc3RyPU5VTEwsKmU7Ci0JY29uc3QgY2hhciAqaCwqcDsKKwljaGFyICpoLCpwOwogCXVuc2lnbmVkIGxvbmcgbDsKIAlpbnQgZXJyX251bTsKIApAQCAtNjAwLDggKzYyNCw3IEBACiAJCXsKIAkJaWYgKCplID09ICc6JykKIAkJCXsKLQkJCXA9ICYoZVsxXSk7Ci0JCQkqZT0nXDAnOworCQkJcD1lOwogCQkJfQogCQllbHNlIGlmICgqZSA9PSAnLycpCiAJCQl7CkBAIC02MDksMjEgKzYzMiw3MCBAQAogCQkJYnJlYWs7CiAJCQl9CiAJCX0KKwlpZiAocCkJKnArKz0nXDAnOwkvKiBwb2ludHMgYXQgbGFzdCAnOicsICc6OnBvcnQnIGlzIHNwZWNpYWwgW3NlZSBiZWxvd10gKi8KKwllbHNlCXA9aCxoPU5VTEw7CiAKLQlpZiAocCA9PSBOVUxMKQorI2lmZGVmIEVBSV9GQU1JTFkKKwlkbyB7CisJc3RhdGljIHVuaW9uIHsJdm9pZCAqcDsKKwkJCWludCAoV1NBQVBJICpmKShjb25zdCBjaGFyICosY29uc3QgY2hhciAqLAorCQkJCSBjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKiwKKwkJCQkgc3RydWN0IGFkZHJpbmZvICoqKTsKKwkJCX0gcF9nZXRhZGRyaW5mbyA9IHtOVUxMfTsKKwlzdGF0aWMgdW5pb24gewl2b2lkICpwOworCQkJdm9pZCAoV1NBQVBJICpmKShzdHJ1Y3QgYWRkcmluZm8gKik7CisJCQl9IHBfZnJlZWFkZHJpbmZvID0ge05VTEx9OworCXN0cnVjdCBhZGRyaW5mbyAqcmVzLGhpbnQ7CisKKwlpZiAocF9nZXRhZGRyaW5mby5wPT1OVUxMKQogCQl7Ci0JCXA9aDsKLQkJaD0iKiI7CisJCWlmICgocF9nZXRhZGRyaW5mby5wPURTT19nbG9iYWxfbG9va3VwKCJnZXRhZGRyaW5mbyIpKT09TlVMTCB8fAorCQkgICAgKHBfZnJlZWFkZHJpbmZvLnA9RFNPX2dsb2JhbF9sb29rdXAoImZyZWVhZGRyaW5mbyIpKT09TlVMTCkKKwkJCXBfZ2V0YWRkcmluZm8ucD0odm9pZCopLTE7CiAJCX0KKwlpZiAocF9nZXRhZGRyaW5mby5wPT0odm9pZCAqKS0xKSBicmVhazsKKworCS8qICc6OnBvcnQnIGVuZm9yY2VzIElQdjYgd2lsZGNhcmQgbGlzdGVuZXIuIFNvbWUgT1NlcywKKwkgKiBlLmcuIFNvbGFyaXMsIGRlZmF1bHQgdG8gSVB2NiB3aXRob3V0IGFueSBoaW50LiBBbHNvCisJICogbm90ZSB0aGF0IGNvbW1vbmx5IElQdjYgd2lsZGNoYXJkIHNvY2tldCBjYW4gc2VydmljZQorCSAqIElQdjQgY29ubmVjdGlvbnMganVzdCBhcyB3ZWxsLi4uICAqLworCW1lbXNldCgmaGludCwwLHNpemVvZihoaW50KSk7CisJaWYgKGgpCisJCXsKKwkJaWYgKHN0cmNocihoLCc6JykpCisJCQl7CisJCQlpZiAoaFsxXT09J1wwJykgaD1OVUxMOworI2lmIE9QRU5TU0xfVVNFX0lQVjYKKwkJCWhpbnQuYWlfZmFtaWx5ID0gQUZfSU5FVDY7CisjZWxzZQorCQkJaD1OVUxMOworI2VuZGlmCisJCQl9CisJICAgIAllbHNlIGlmIChoWzBdPT0nKicgJiYgaFsxXT09J1wwJykKKwkJCWg9TlVMTDsKKwkJfQorCisJaWYgKCgqcF9nZXRhZGRyaW5mby5mKShoLHAsJmhpbnQsJnJlcykpIGJyZWFrOworCisJYWRkcmxlbiA9IHJlcy0+YWlfYWRkcmxlbjw9c2l6ZW9mKHNlcnZlcikgPworCQkJcmVzLT5haV9hZGRybGVuIDoKKwkJCXNpemVvZihzZXJ2ZXIpOworCW1lbWNweSgmc2VydmVyLCByZXMtPmFpX2FkZHIsIGFkZHJsZW4pOworCisJKCpwX2ZyZWVhZGRyaW5mby5mKShyZXMpOworCWdvdG8gYWdhaW47CisJfSB3aGlsZSAoMCk7CisjZW5kaWYKIAogCWlmICghQklPX2dldF9wb3J0KHAsJnBvcnQpKSBnb3RvIGVycjsKIAogCW1lbXNldCgoY2hhciAqKSZzZXJ2ZXIsMCxzaXplb2Yoc2VydmVyKSk7Ci0Jc2VydmVyLnNpbl9mYW1pbHk9QUZfSU5FVDsKLQlzZXJ2ZXIuc2luX3BvcnQ9aHRvbnMocG9ydCk7CisJc2VydmVyLnNhX2luLnNpbl9mYW1pbHk9QUZfSU5FVDsKKwlzZXJ2ZXIuc2FfaW4uc2luX3BvcnQ9aHRvbnMocG9ydCk7CisJYWRkcmxlbiA9IHNpemVvZihzZXJ2ZXIuc2FfaW4pOwogCi0JaWYgKHN0cmNtcChoLCIqIikgPT0gMCkKLQkJc2VydmVyLnNpbl9hZGRyLnNfYWRkcj1JTkFERFJfQU5ZOworCWlmIChoID09IE5VTEwgfHwgc3RyY21wKGgsIioiKSA9PSAwKQorCQlzZXJ2ZXIuc2FfaW4uc2luX2FkZHIuc19hZGRyPUlOQUREUl9BTlk7CiAJZWxzZQogCQl7CiAgICAgICAgICAgICAgICAgaWYgKCFCSU9fZ2V0X2hvc3RfaXAoaCwmKGlwWzBdKSkpIGdvdG8gZXJyOwpAQCAtNjMyLDExICs3MDQsMTEgQEAKIAkJCSgodW5zaWduZWQgbG9uZylpcFsxXTw8MTZMKXwKIAkJCSgodW5zaWduZWQgbG9uZylpcFsyXTw8IDhMKXwKIAkJCSgodW5zaWduZWQgbG9uZylpcFszXSk7Ci0JCXNlcnZlci5zaW5fYWRkci5zX2FkZHI9aHRvbmwobCk7CisJCXNlcnZlci5zYV9pbi5zaW5fYWRkci5zX2FkZHI9aHRvbmwobCk7CiAJCX0KIAogYWdhaW46Ci0Jcz1zb2NrZXQoQUZfSU5FVCxTT0NLX1NUUkVBTSxTT0NLRVRfUFJPVE9DT0wpOworCXM9c29ja2V0KHNlcnZlci5zYS5zYV9mYW1pbHksU09DS19TVFJFQU0sU09DS0VUX1BST1RPQ09MKTsKIAlpZiAocyA9PSBJTlZBTElEX1NPQ0tFVCkKIAkJewogCQlTWVNlcnIoU1lTX0ZfU09DS0VULGdldF9sYXN0X3NvY2tldF9lcnJvcigpKTsKQEAgLTY1NCwyMiArNzI2LDM1IEBACiAJCWJpbmRfbW9kZT1CSU9fQklORF9OT1JNQUw7CiAJCX0KICNlbmRpZgotCWlmIChiaW5kKHMsKHN0cnVjdCBzb2NrYWRkciAqKSZzZXJ2ZXIsc2l6ZW9mKHNlcnZlcikpID09IC0xKQorCWlmIChiaW5kKHMsJnNlcnZlci5zYSxhZGRybGVuKSA9PSAtMSkKIAkJewogI2lmZGVmIFNPX1JFVVNFQUREUgogCQllcnJfbnVtPWdldF9sYXN0X3NvY2tldF9lcnJvcigpOwogCQlpZiAoKGJpbmRfbW9kZSA9PSBCSU9fQklORF9SRVVTRUFERFJfSUZfVU5VU0VEKSAmJgogCQkJKGVycl9udW0gPT0gRUFERFJJTlVTRSkpCiAJCQl7Ci0JCQltZW1jcHkoKGNoYXIgKikmY2xpZW50LChjaGFyICopJnNlcnZlcixzaXplb2Yoc2VydmVyKSk7Ci0JCQlpZiAoc3RyY21wKGgsIioiKSA9PSAwKQotCQkJCWNsaWVudC5zaW5fYWRkci5zX2FkZHI9aHRvbmwoMHg3RjAwMDAwMSk7Ci0JCQljcz1zb2NrZXQoQUZfSU5FVCxTT0NLX1NUUkVBTSxTT0NLRVRfUFJPVE9DT0wpOworCQkJY2xpZW50ID0gc2VydmVyOworCQkJaWYgKGggPT0gTlVMTCB8fCBzdHJjbXAoaCwiKiIpID09IDApCisJCQkJeworI2lmIE9QRU5TU0xfVVNFX0lQVjYKKwkJCQlpZiAoY2xpZW50LnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikKKwkJCQkJeworCQkJCQltZW1zZXQoJmNsaWVudC5zYV9pbjYuc2luNl9hZGRyLDAsc2l6ZW9mKGNsaWVudC5zYV9pbjYuc2luNl9hZGRyKSk7CisJCQkJCWNsaWVudC5zYV9pbjYuc2luNl9hZGRyLnM2X2FkZHJbMTVdPTE7CisJCQkJCX0KKwkJCQllbHNlCisjZW5kaWYKKwkJCQlpZiAoY2xpZW50LnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKQorCQkJCQl7CisJCQkJCWNsaWVudC5zYV9pbi5zaW5fYWRkci5zX2FkZHI9aHRvbmwoMHg3RjAwMDAwMSk7CisJCQkJCX0KKwkJCQllbHNlCWdvdG8gZXJyOworCQkJCX0KKwkJCWNzPXNvY2tldChjbGllbnQuc2Euc2FfZmFtaWx5LFNPQ0tfU1RSRUFNLFNPQ0tFVF9QUk9UT0NPTCk7CiAJCQlpZiAoY3MgIT0gSU5WQUxJRF9TT0NLRVQpCiAJCQkJewogCQkJCWludCBpaTsKLQkJCQlpaT1jb25uZWN0KGNzLChzdHJ1Y3Qgc29ja2FkZHIgKikmY2xpZW50LAotCQkJCQlzaXplb2YoY2xpZW50KSk7CisJCQkJaWk9Y29ubmVjdChjcywmY2xpZW50LnNhLGFkZHJsZW4pOwogCQkJCWNsb3Nlc29ja2V0KGNzKTsKIAkJCQlpZiAoaWkgPT0gSU5WQUxJRF9TT0NLRVQpCiAJCQkJCXsKQEAgLTcwOCwyMCArNzkzLDUyIEBACiBpbnQgQklPX2FjY2VwdChpbnQgc29jaywgY2hhciAqKmFkZHIpCiAJewogCWludCByZXQ9SU5WQUxJRF9TT0NLRVQ7Ci0Jc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9pbiBmcm9tOwogCXVuc2lnbmVkIGxvbmcgbDsKIAl1bnNpZ25lZCBzaG9ydCBwb3J0OwotCWludCBsZW47CiAJY2hhciAqcDsKIAotCW1lbXNldCgoY2hhciAqKSZmcm9tLDAsc2l6ZW9mKGZyb20pKTsKLQlsZW49c2l6ZW9mKGZyb20pOwotCS8qIE5vdGU6IHVuZGVyIFZNUyB3aXRoIFNPQ0tFVFNIUiB0aGUgZm91cnRoIHBhcmFtZXRlciBpcyBjdXJyZW50bHkKLQkgKiBvZiB0eXBlIChpbnQgKikgd2hlcmVhcyB1bmRlciBvdGhlciBzeXN0ZW1zIGl0IGlzICh2b2lkICopIGlmCi0JICogeW91IGRvbid0IGhhdmUgYSBjYXN0IGl0IHdpbGwgY2hva2UgdGhlIGNvbXBpbGVyOiBpZiB5b3UgZG8KLQkgKiBoYXZlIGEgY2FzdCB0aGVuIHlvdSBjYW4gZWl0aGVyIGdvIGZvciAoaW50ICopIG9yICh2b2lkICopLgorCXN0cnVjdCB7CisJLyoKKwkgKiBBcyBmb3IgZm9sbG93aW5nIHVuaW9uLiBUcm91YmxlIGlzIHRoYXQgdGhlcmUgYXJlIHBsYXRmb3JtcworCSAqIHRoYXQgaGF2ZSBzb2NrbGVuX3QgYW5kIHRoZXJlIGFyZSBwbGF0Zm9ybXMgdGhhdCBkb24ndCwgb24KKwkgKiBzb21lIHBsYXRmb3JtcyBzb2NrbGVuX3QgaXMgaW50IGFuZCBvbiBzb21lIHNpemVfdC4gU28gd2hhdAorCSAqIG9uZSBjYW4gZG8/IE9uZSBjYW4gY29vayAjaWZkZWYgc3BhZ2hldHRpLCB3aGljaCBpcyBub3RoaW5nCisJICogYnV0IG1hc29jaGlzdGljLiBPciBvbmUgY2FuIGRvIHVuaW9uIGJldHdlZW4gaW50IGFuZCBzaXplX3QuCisJICogT25lIG5hdHVyYWxseSBkb2VzIGl0IHByaW1hcmlseSBmb3IgNjQtYml0IHBsYXRmb3JtcyB3aGVyZQorCSAqIHNpemVvZihpbnQpICE9IHNpemVvZihzaXplX3QpLiBCdXQgd291bGQgaXQgd29yaz8gTm90ZSB0aGF0CisJICogaWYgc2l6ZV90IG1lbWJlciBpcyBpbml0aWFsaXplZCB0byAwLCB0aGVuIGxhdGVyIGludCBtZW1iZXIKKwkgKiBhc3NpZ25tZW50IG5hdHVyYWxseSBkb2VzIHRoZSBqb2Igb24gbGl0dGxlLWVuZGlhbiBwbGF0Zm9ybXMKKwkgKiByZWdhcmRsZXNzIGFjY2VwdCdzIGV4cGVjdGF0aW9ucyEgV2hhdCBhYm91dCBiaWctZW5kaWFucz8KKwkgKiBJZiBhY2NlcHQgZXhwZWN0cyBpbnQqLCB0aGVuIGl0IHdvcmtzLCBhbmQgaWYgc2l6ZV90KiwgdGhlbgorCSAqIGxlbmd0aCB2YWx1ZSB3b3VsZCBhcHBlYXIgYXMgdW5yZWFzb25hYmx5IGxhcmdlLiBCdXQgdGhpcworCSAqIHdvbid0IHByZXZlbnQgaXQgZnJvbSBmaWxsaW5nIGluIHRoZSBhZGRyZXNzIHN0cnVjdHVyZS4gVGhlCisJICogdHJvdWJsZSBvZiBjb3Vyc2Ugd291bGQgYmUgaWYgYWNjZXB0IHJldHVybnMgbW9yZSBkYXRhIHRoYW4KKwkgKiBhY3R1YWwgYnVmZmVyIGNhbiBhY2NvbW9kYXRlIGFuZCBvdmVyd3JpdGUgc3RhY2suLi4gVGhhdCdzCisJICogd2hlcmUgZWFybHkgT1BFTlNTTF9hc3NlcnQgY29tZXMgaW50byBwaWN0dXJlLiBCZXNpZGVzLCB0aGUKKwkgKiBvbmx5IDY0LWJpdCBiaWctZW5kaWFuIHBsYXRmb3JtIGZvdW5kIHNvIGZhciB0aGF0IGV4cGVjdHMKKwkgKiBzaXplX3QqIGlzIEhQLVVYLCB3aGVyZSBzdGFjayBncm93cyB0b3dhcmRzIGhpZ2hlciBhZGRyZXNzLgorCSAqIDxhcHBybz4KIAkgKi8KLQlyZXQ9YWNjZXB0KHNvY2ssKHN0cnVjdCBzb2NrYWRkciAqKSZmcm9tLCh2b2lkICopJmxlbik7CisJdW5pb24geyBzaXplX3QgczsgaW50IGk7IH0gbGVuOworCXVuaW9uIHsKKwkJc3RydWN0IHNvY2thZGRyIHNhOworCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2FfaW47CisjaWYgT1BFTlNTTF9VU0VfSVBWNgorCQlzdHJ1Y3Qgc29ja2FkZHJfaW42IHNhX2luNjsKKyNlbmRpZgorCQl9IGZyb207CisJfSBzYTsKKworCXNhLmxlbi5zPTA7CisJc2EubGVuLmk9c2l6ZW9mKHNhLmZyb20pOworCW1lbXNldCgmc2EuZnJvbSwwLHNpemVvZihzYS5mcm9tKSk7CisJcmV0PWFjY2VwdChzb2NrLCZzYS5mcm9tLnNhLCh2b2lkICopJnNhLmxlbik7CisJaWYgKHNpemVvZihzYS5sZW4uaSkhPXNpemVvZihzYS5sZW4ucykgJiYgc2EubGVuLmk9PTApCisJCXsKKwkJT1BFTlNTTF9hc3NlcnQoc2EubGVuLnM8PXNpemVvZihzYS5mcm9tKSk7CisJCXNhLmxlbi5pID0gKGludClzYS5sZW4uczsKKwkJLyogdXNlIHNhLmxlbi5pIGZyb20gdGhpcyBwb2ludCAqLworCQl9CiAJaWYgKHJldCA9PSBJTlZBTElEX1NPQ0tFVCkKIAkJewogCQlpZihCSU9fc29ja19zaG91bGRfcmV0cnkocmV0KSkgcmV0dXJuIC0yOwpAQCAtNzMyLDggKzg0OSw0NiBAQAogCiAJaWYgKGFkZHIgPT0gTlVMTCkgZ290byBlbmQ7CiAKLQlsPW50b2hsKGZyb20uc2luX2FkZHIuc19hZGRyKTsKLQlwb3J0PW50b2hzKGZyb20uc2luX3BvcnQpOworI2lmZGVmIEVBSV9GQU1JTFkKKwlkbyB7CisJY2hhciAgIGhbTklfTUFYSE9TVF0sc1tOSV9NQVhTRVJWXTsKKwlzaXplX3Qgbmw7CisJc3RhdGljIHVuaW9uIHsJdm9pZCAqcDsKKwkJCWludCAoV1NBQVBJICpmKShjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKixzaXplX3QvKnNvY2tsZW5fdCovLAorCQkJCSBjaGFyICosc2l6ZV90LGNoYXIgKixzaXplX3QsaW50KTsKKwkJCX0gcF9nZXRuYW1laW5mbyA9IHtOVUxMfTsKKwkJCS8qIDJuZCBhcmd1bWVudCB0byBnZXRuYW1laW5mbyBpcyBzcGVjaWZpZWQgdG8KKwkJCSAqIGJlIHNvY2tsZW5fdC4gVW5mb3J0dW5hdGVseSB0aGVyZSBpcyBhIG51bWJlcgorCQkJICogb2YgZW52aXJvbm1lbnRzIHdoZXJlIHNvY2tsZW5fdCBpcyBub3QgZGVmaW5lZC4KKwkJCSAqIEFzIGl0J3MgcGFzc2VkIGJ5IHZhbHVlLCBpdCdzIHNhZmUgdG8gcGFzcyBpdAorCQkJICogYXMgc2l6ZV90Li4uIDxhcHBybz4gKi8KKworCWlmIChwX2dldG5hbWVpbmZvLnA9PU5VTEwpCisJCXsKKwkJaWYgKChwX2dldG5hbWVpbmZvLnA9RFNPX2dsb2JhbF9sb29rdXAoImdldG5hbWVpbmZvIikpPT1OVUxMKQorCQkJcF9nZXRuYW1laW5mby5wPSh2b2lkKiktMTsKKwkJfQorCWlmIChwX2dldG5hbWVpbmZvLnA9PSh2b2lkICopLTEpIGJyZWFrOworCisJaWYgKCgqcF9nZXRuYW1laW5mby5mKSgmc2EuZnJvbS5zYSxzYS5sZW4uaSxoLHNpemVvZihoKSxzLHNpemVvZihzKSwKKwkgICAgTklfTlVNRVJJQ0hPU1R8TklfTlVNRVJJQ1NFUlYpKSBicmVhazsKKwlubCA9IHN0cmxlbihoKStzdHJsZW4ocykrMjsKKwlwID0gKmFkZHI7CisJaWYgKHApCXsgKnAgPSAnXDAnOyBwID0gT1BFTlNTTF9yZWFsbG9jKHAsbmwpOwl9CisJZWxzZQl7IHAgPSBPUEVOU1NMX21hbGxvYyhubCk7CQl9CisJaWYgKHA9PU5VTEwpCisJCXsKKwkJQklPZXJyKEJJT19GX0JJT19BQ0NFUFQsRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOworCQlnb3RvIGVuZDsKKwkJfQorCSphZGRyID0gcDsKKwlCSU9fc25wcmludGYoKmFkZHIsbmwsIiVzOiVzIixoLHMpOworCWdvdG8gZW5kOworCX0gd2hpbGUoMCk7CisjZW5kaWYKKwlpZiAoc2EuZnJvbS5zYS5zYV9mYW1pbHkgIT0gQUZfSU5FVCkgZ290byBlbmQ7CisJbD1udG9obChzYS5mcm9tLnNhX2luLnNpbl9hZGRyLnNfYWRkcik7CisJcG9ydD1udG9ocyhzYS5mcm9tLnNhX2luLnNpbl9wb3J0KTsKIAlpZiAoKmFkZHIgPT0gTlVMTCkKIAkJewogCQlpZiAoKHA9T1BFTlNTTF9tYWxsb2MoMjQpKSA9PSBOVUxMKQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Jpby9iaW8uaCBiL2NyeXB0by9iaW8vYmlvLmgKaW5kZXggZWJiNDI3OC4uMTUyODAyZiAxMDA2NDQKLS0tIGEvY3J5cHRvL2Jpby9iaW8uaAorKysgYi9jcnlwdG8vYmlvL2Jpby5oCkBAIC05NSw2ICs5NSw3IEBACiAjZGVmaW5lIEJJT19UWVBFX0JJTwkJKDE5fDB4MDQwMCkJCS8qIChoYWxmIGEpIEJJTyBwYWlyICovCiAjZGVmaW5lIEJJT19UWVBFX0xJTkVCVUZGRVIJKDIwfDB4MDIwMCkJCS8qIGZpbHRlciAqLwogI2RlZmluZSBCSU9fVFlQRV9ER1JBTQkJKDIxfDB4MDQwMHwweDAxMDApCisjZGVmaW5lIEJJT19UWVBFX0FTTjEgCQkoMjJ8MHgwMjAwKQkJLyogZmlsdGVyICovCiAjZGVmaW5lIEJJT19UWVBFX0NPTVAgCQkoMjN8MHgwMjAwKQkJLyogZmlsdGVyICovCiAKICNkZWZpbmUgQklPX1RZUEVfREVTQ1JJUFRPUgkweDAxMDAJLyogc29ja2V0LCBmZCwgY29ubmVjdCBvciBhY2NlcHQgKi8KQEAgLTI2NSw3ICsyNjYsNiBAQAogCiB0eXBlZGVmIHZvaWQgYmlvX2luZm9fY2Ioc3RydWN0IGJpb19zdCAqLCBpbnQsIGNvbnN0IGNoYXIgKiwgaW50LCBsb25nLCBsb25nKTsKIAotI2lmbmRlZiBPUEVOU1NMX1NZU19XSU4xNgogdHlwZWRlZiBzdHJ1Y3QgYmlvX21ldGhvZF9zdAogCXsKIAlpbnQgdHlwZTsKQEAgLTI3OSwyMSArMjc5LDYgQEAKIAlpbnQgKCpkZXN0cm95KShCSU8gKik7CiAgICAgICAgIGxvbmcgKCpjYWxsYmFja19jdHJsKShCSU8gKiwgaW50LCBiaW9faW5mb19jYiAqKTsKIAl9IEJJT19NRVRIT0Q7Ci0jZWxzZQotdHlwZWRlZiBzdHJ1Y3QgYmlvX21ldGhvZF9zdAotCXsKLQlpbnQgdHlwZTsKLQljb25zdCBjaGFyICpuYW1lOwotCWludCAoX2ZhciAqYndyaXRlKSgpOwotCWludCAoX2ZhciAqYnJlYWQpKCk7Ci0JaW50IChfZmFyICpicHV0cykoKTsKLQlpbnQgKF9mYXIgKmJnZXRzKSgpOwotCWxvbmcgKF9mYXIgKmN0cmwpKCk7Ci0JaW50IChfZmFyICpjcmVhdGUpKCk7Ci0JaW50IChfZmFyICpkZXN0cm95KSgpOwotCWxvbmcgKF9mYXIgKmNhbGxiYWNrX2N0cmwpKCk7Ci0JfSBCSU9fTUVUSE9EOwotI2VuZGlmCiAKIHN0cnVjdCBiaW9fc3QKIAl7CkBAIC0zMzQsNiArMzE5LDkgQEAKIAlpbnQgb2J1Zl9vZmY7CQkvKiB3cml0ZS9yZWFkIG9mZnNldCAqLwogCX0gQklPX0ZfQlVGRkVSX0NUWDsKIAorLyogUHJlZml4IGFuZCBzdWZmaXggY2FsbGJhY2sgaW4gQVNOMSBCSU8gKi8KK3R5cGVkZWYgaW50IGFzbjFfcHNfZnVuYyhCSU8gKmIsIHVuc2lnbmVkIGNoYXIgKipwYnVmLCBpbnQgKnBsZW4sIHZvaWQgKnBhcmcpOworCiAvKiBjb25uZWN0IEJJTyBzdHVmZiAqLwogI2RlZmluZSBCSU9fQ09OTl9TX0JFRk9SRQkJMQogI2RlZmluZSBCSU9fQ09OTl9TX0dFVF9JUAkJMgpAQCAtMzk2LDYgKzM4NCwxMyBAQAogI2RlZmluZSBCSU9fQ19SRVNFVF9SRUFEX1JFUVVFU1QJCTE0NwogI2RlZmluZSBCSU9fQ19TRVRfTURfQ1RYCQkJMTQ4CiAKKyNkZWZpbmUgQklPX0NfU0VUX1BSRUZJWAkJCTE0OQorI2RlZmluZSBCSU9fQ19HRVRfUFJFRklYCQkJMTUwCisjZGVmaW5lIEJJT19DX1NFVF9TVUZGSVgJCQkxNTEKKyNkZWZpbmUgQklPX0NfR0VUX1NVRkZJWAkJCTE1MgorCisjZGVmaW5lIEJJT19DX1NFVF9FWF9BUkcJCQkxNTMKKyNkZWZpbmUgQklPX0NfR0VUX0VYX0FSRwkJCTE1NAogCiAjZGVmaW5lIEJJT19zZXRfYXBwX2RhdGEocyxhcmcpCQlCSU9fc2V0X2V4X2RhdGEocywwLGFyZykKICNkZWZpbmUgQklPX2dldF9hcHBfZGF0YShzKQkJQklPX2dldF9leF9kYXRhKHMsMCkKQEAgLTU1OSwyMiArNTU0LDIxIEBACiB1bnNpZ25lZCBsb25nIEJJT19udW1iZXJfcmVhZChCSU8gKmJpbyk7CiB1bnNpZ25lZCBsb25nIEJJT19udW1iZXJfd3JpdHRlbihCSU8gKmJpbyk7CiAKKy8qIEZvciBCSU9fZl9hc24xKCkgKi8KK2ludCBCSU9fYXNuMV9zZXRfcHJlZml4KEJJTyAqYiwgYXNuMV9wc19mdW5jICpwcmVmaXgsCisJCQkJCWFzbjFfcHNfZnVuYyAqcHJlZml4X2ZyZWUpOworaW50IEJJT19hc24xX2dldF9wcmVmaXgoQklPICpiLCBhc24xX3BzX2Z1bmMgKipwcHJlZml4LAorCQkJCQlhc24xX3BzX2Z1bmMgKipwcHJlZml4X2ZyZWUpOworaW50IEJJT19hc24xX3NldF9zdWZmaXgoQklPICpiLCBhc24xX3BzX2Z1bmMgKnN1ZmZpeCwKKwkJCQkJYXNuMV9wc19mdW5jICpzdWZmaXhfZnJlZSk7CitpbnQgQklPX2FzbjFfZ2V0X3N1ZmZpeChCSU8gKmIsIGFzbjFfcHNfZnVuYyAqKnBzdWZmaXgsCisJCQkJCWFzbjFfcHNfZnVuYyAqKnBzdWZmaXhfZnJlZSk7CisKICMgaWZuZGVmIE9QRU5TU0xfTk9fRlBfQVBJCi0jICBpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX1dJTjE2KSAmJiBkZWZpbmVkKF9XSU5ETEwpCi1CSU9fTUVUSE9EICpCSU9fc19maWxlX2ludGVybmFsKHZvaWQpOwotQklPICpCSU9fbmV3X2ZpbGVfaW50ZXJuYWwoY2hhciAqZmlsZW5hbWUsIGNoYXIgKm1vZGUpOwotQklPICpCSU9fbmV3X2ZwX2ludGVybmFsKEZJTEUgKnN0cmVhbSwgaW50IGNsb3NlX2ZsYWcpOwotIyAgICBkZWZpbmUgQklPX3NfZmlsZQlCSU9fc19maWxlX2ludGVybmFsCi0jICAgIGRlZmluZSBCSU9fbmV3X2ZpbGUJQklPX25ld19maWxlX2ludGVybmFsCi0jICAgIGRlZmluZSBCSU9fbmV3X2ZwCUJJT19uZXdfZnBfaW50ZXJuYWwKLSMgIGVsc2UgLyogRlBfQVBJICovCiBCSU9fTUVUSE9EICpCSU9fc19maWxlKHZvaWQgKTsKIEJJTyAqQklPX25ld19maWxlKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICptb2RlKTsKIEJJTyAqQklPX25ld19mcChGSUxFICpzdHJlYW0sIGludCBjbG9zZV9mbGFnKTsKLSMgICAgZGVmaW5lIEJJT19zX2ZpbGVfaW50ZXJuYWwJCUJJT19zX2ZpbGUKLSMgICAgZGVmaW5lIEJJT19uZXdfZmlsZV9pbnRlcm5hbAlCSU9fbmV3X2ZpbGUKLSMgICAgZGVmaW5lIEJJT19uZXdfZnBfaW50ZXJuYWwJCUJJT19zX2ZpbGUKLSMgIGVuZGlmIC8qIEZQX0FQSSAqLworIyBkZWZpbmUgQklPX3NfZmlsZV9pbnRlcm5hbAlCSU9fc19maWxlCiAjIGVuZGlmCiBCSU8gKglCSU9fbmV3KEJJT19NRVRIT0QgKnR5cGUpOwogaW50CUJJT19zZXQoQklPICphLEJJT19NRVRIT0QgKnR5cGUpOwpAQCAtNjAzLDEzICs1OTcsOCBAQAogaW50IEJJT19ud3JpdGUwKEJJTyAqYmlvLCBjaGFyICoqYnVmKTsKIGludCBCSU9fbndyaXRlKEJJTyAqYmlvLCBjaGFyICoqYnVmLCBpbnQgbnVtKTsKIAotI2lmbmRlZiBPUEVOU1NMX1NZU19XSU4xNgogbG9uZyBCSU9fZGVidWdfY2FsbGJhY2soQklPICpiaW8saW50IGNtZCxjb25zdCBjaGFyICphcmdwLGludCBhcmdpLAogCWxvbmcgYXJnbCxsb25nIHJldCk7Ci0jZWxzZQotbG9uZyBfZmFyIF9sb2FkZHMgQklPX2RlYnVnX2NhbGxiYWNrKEJJTyAqYmlvLGludCBjbWQsY29uc3QgY2hhciAqYXJncCxpbnQgYXJnaSwKLQlsb25nIGFyZ2wsbG9uZyByZXQpOwotI2VuZGlmCiAKIEJJT19NRVRIT0QgKkJJT19zX21lbSh2b2lkKTsKIEJJTyAqQklPX25ld19tZW1fYnVmKHZvaWQgKmJ1ZiwgaW50IGxlbik7CmRpZmYgLS1naXQgYS9jcnlwdG8vYmlvL2Jpb19jYi5jIGIvY3J5cHRvL2Jpby9iaW9fY2IuYwppbmRleCA2ZjQyNTRhLi45YmNiYzMyIDEwMDY0NAotLS0gYS9jcnlwdG8vYmlvL2Jpb19jYi5jCisrKyBiL2NyeXB0by9iaW8vYmlvX2NiLmMKQEAgLTg1LDI4ICs4NSwzMiBAQAogCQlicmVhazsKIAljYXNlIEJJT19DQl9SRUFEOgogCQlpZiAoYmlvLT5tZXRob2QtPnR5cGUgJiBCSU9fVFlQRV9ERVNDUklQVE9SKQotCQkJQklPX3NucHJpbnRmKHAscF9tYXhsZW4sInJlYWQoJWQsJWQpIC0gJXMgZmQ9JWRcbiIsCi0JCQkJIGJpby0+bnVtLGFyZ2ksYmlvLT5tZXRob2QtPm5hbWUsYmlvLT5udW0pOworCQkJQklPX3NucHJpbnRmKHAscF9tYXhsZW4sInJlYWQoJWQsJWx1KSAtICVzIGZkPSVkXG4iLAorCQkJCSBiaW8tPm51bSwodW5zaWduZWQgbG9uZylhcmdpLAorCQkJCSBiaW8tPm1ldGhvZC0+bmFtZSxiaW8tPm51bSk7CiAJCWVsc2UKLQkJCUJJT19zbnByaW50ZihwLHBfbWF4bGVuLCJyZWFkKCVkLCVkKSAtICVzXG4iLAotCQkJCSBiaW8tPm51bSxhcmdpLGJpby0+bWV0aG9kLT5uYW1lKTsKKwkJCUJJT19zbnByaW50ZihwLHBfbWF4bGVuLCJyZWFkKCVkLCVsdSkgLSAlc1xuIiwKKwkJCQkgYmlvLT5udW0sKHVuc2lnbmVkIGxvbmcpYXJnaSwKKwkJCQkgYmlvLT5tZXRob2QtPm5hbWUpOwogCQlicmVhazsKIAljYXNlIEJJT19DQl9XUklURToKIAkJaWYgKGJpby0+bWV0aG9kLT50eXBlICYgQklPX1RZUEVfREVTQ1JJUFRPUikKLQkJCUJJT19zbnByaW50ZihwLHBfbWF4bGVuLCJ3cml0ZSglZCwlZCkgLSAlcyBmZD0lZFxuIiwKLQkJCQkgYmlvLT5udW0sYXJnaSxiaW8tPm1ldGhvZC0+bmFtZSxiaW8tPm51bSk7CisJCQlCSU9fc25wcmludGYocCxwX21heGxlbiwid3JpdGUoJWQsJWx1KSAtICVzIGZkPSVkXG4iLAorCQkJCSBiaW8tPm51bSwodW5zaWduZWQgbG9uZylhcmdpLAorCQkJCSBiaW8tPm1ldGhvZC0+bmFtZSxiaW8tPm51bSk7CiAJCWVsc2UKLQkJCUJJT19zbnByaW50ZihwLHBfbWF4bGVuLCJ3cml0ZSglZCwlZCkgLSAlc1xuIiwKLQkJCQkgYmlvLT5udW0sYXJnaSxiaW8tPm1ldGhvZC0+bmFtZSk7CisJCQlCSU9fc25wcmludGYocCxwX21heGxlbiwid3JpdGUoJWQsJWx1KSAtICVzXG4iLAorCQkJCSBiaW8tPm51bSwodW5zaWduZWQgbG9uZylhcmdpLAorCQkJCSBiaW8tPm1ldGhvZC0+bmFtZSk7CiAJCWJyZWFrOwogCWNhc2UgQklPX0NCX1BVVFM6CiAJCUJJT19zbnByaW50ZihwLHBfbWF4bGVuLCJwdXRzKCkgLSAlc1xuIixiaW8tPm1ldGhvZC0+bmFtZSk7CiAJCWJyZWFrOwogCWNhc2UgQklPX0NCX0dFVFM6Ci0JCUJJT19zbnByaW50ZihwLHBfbWF4bGVuLCJnZXRzKCVkKSAtICVzXG4iLGFyZ2ksYmlvLT5tZXRob2QtPm5hbWUpOworCQlCSU9fc25wcmludGYocCxwX21heGxlbiwiZ2V0cyglbHUpIC0gJXNcbiIsKHVuc2lnbmVkIGxvbmcpYXJnaSxiaW8tPm1ldGhvZC0+bmFtZSk7CiAJCWJyZWFrOwogCWNhc2UgQklPX0NCX0NUUkw6Ci0JCUJJT19zbnByaW50ZihwLHBfbWF4bGVuLCJjdHJsKCVkKSAtICVzXG4iLGFyZ2ksYmlvLT5tZXRob2QtPm5hbWUpOworCQlCSU9fc25wcmludGYocCxwX21heGxlbiwiY3RybCglbHUpIC0gJXNcbiIsKHVuc2lnbmVkIGxvbmcpYXJnaSxiaW8tPm1ldGhvZC0+bmFtZSk7CiAJCWJyZWFrOwogCWNhc2UgQklPX0NCX1JFVFVSTnxCSU9fQ0JfUkVBRDoKIAkJQklPX3NucHJpbnRmKHAscF9tYXhsZW4sInJlYWQgcmV0dXJuICVsZFxuIixyZXQpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Jpby9iaW9fZXJyLmMgYi9jcnlwdG8vYmlvL2Jpb19lcnIuYwppbmRleCA2NjAzZjFjLi5hMjI0ZWRkIDEwMDY0NAotLS0gYS9jcnlwdG8vYmlvL2Jpb19lcnIuYworKysgYi9jcnlwdG8vYmlvL2Jpb19lcnIuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIGNyeXB0by9iaW8vYmlvX2Vyci5jICovCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNiBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Jpby9iaW9fbGNsLmggYi9jcnlwdG8vYmlvL2Jpb19sY2wuaAppbmRleCBkYmEyOTE5Li5lN2Y3ZWM4IDEwMDY0NAotLS0gYS9jcnlwdG8vYmlvL2Jpb19sY2wuaAorKysgYi9jcnlwdG8vYmlvL2Jpb19sY2wuaApAQCAtMTgsMTEgKzE4LDE5IEBACiAjZGVmaW5lCVVQX2Z0ZWxsCWZ0ZWxsCiAjZGVmaW5lCVVQX2ZmbHVzaAlmZmx1c2gKICNkZWZpbmUJVVBfZmVycm9yCWZlcnJvcgorI2lmZGVmIF9XSU4zMgorI2RlZmluZQlVUF9maWxlbm8JX2ZpbGVubworI2RlZmluZQlVUF9vcGVuCQlfb3BlbgorI2RlZmluZQlVUF9yZWFkCQlfcmVhZAorI2RlZmluZQlVUF93cml0ZQlfd3JpdGUKKyNkZWZpbmUJVVBfbHNlZWsJX2xzZWVrCisjZGVmaW5lCVVQX2Nsb3NlCV9jbG9zZQorI2Vsc2UKICNkZWZpbmUJVVBfZmlsZW5vCWZpbGVubwotCiAjZGVmaW5lCVVQX29wZW4JCW9wZW4KICNkZWZpbmUJVVBfcmVhZAkJcmVhZAogI2RlZmluZQlVUF93cml0ZQl3cml0ZQogI2RlZmluZQlVUF9sc2Vlawlsc2VlawogI2RlZmluZQlVUF9jbG9zZQljbG9zZQogI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NyeXB0by9iaW8vYmlvX2xpYi5jIGIvY3J5cHRvL2Jpby9iaW9fbGliLmMKaW5kZXggM2Y1MmFlOS4uNzdmNGRlOSAxMDA2NDQKLS0tIGEvY3J5cHRvL2Jpby9iaW9fbGliLmMKKysrIGIvY3J5cHRvL2Jpby9iaW9fbGliLmMKQEAgLTQyOSw3ICs0MjksNyBAQAogCWlmIChiaW8gIT0gTlVMTCkKIAkJYmlvLT5wcmV2X2Jpbz1sYjsKIAkvKiBjYWxsZWQgdG8gZG8gaW50ZXJuYWwgcHJvY2Vzc2luZyAqLwotCUJJT19jdHJsKGIsQklPX0NUUkxfUFVTSCwwLE5VTEwpOworCUJJT19jdHJsKGIsQklPX0NUUkxfUFVTSCwwLGxiKTsKIAlyZXR1cm4oYik7CiAJfQogCkBAIC00NDEsNyArNDQxLDcgQEAKIAlpZiAoYiA9PSBOVUxMKSByZXR1cm4oTlVMTCk7CiAJcmV0PWItPm5leHRfYmlvOwogCi0JQklPX2N0cmwoYixCSU9fQ1RSTF9QT1AsMCxOVUxMKTsKKwlCSU9fY3RybChiLEJJT19DVFJMX1BPUCwwLGIpOwogCiAJaWYgKGItPnByZXZfYmlvICE9IE5VTEwpCiAJCWItPnByZXZfYmlvLT5uZXh0X2Jpbz1iLT5uZXh0X2JpbzsKZGlmZiAtLWdpdCBhL2NyeXB0by9iaW8vYnNzX2FjcHQuYyBiL2NyeXB0by9iaW8vYnNzX2FjcHQuYwppbmRleCBkMDkwYjcyLi44MjZmNzYxIDEwMDY0NAotLS0gYS9jcnlwdG8vYmlvL2Jzc19hY3B0LmMKKysrIGIvY3J5cHRvL2Jpby9ic3NfYWNwdC5jCkBAIC0xMDAsOCArMTAwLDggQEAKIHN0YXRpYyBpbnQgYWNwdF9mcmVlKEJJTyAqZGF0YSk7CiBzdGF0aWMgaW50IGFjcHRfc3RhdGUoQklPICpiLCBCSU9fQUNDRVBUICpjKTsKIHN0YXRpYyB2b2lkIGFjcHRfY2xvc2Vfc29ja2V0KEJJTyAqZGF0YSk7Ci1CSU9fQUNDRVBUICpCSU9fQUNDRVBUX25ldyh2b2lkICk7Ci12b2lkIEJJT19BQ0NFUFRfZnJlZShCSU9fQUNDRVBUICphKTsKK3N0YXRpYyBCSU9fQUNDRVBUICpCSU9fQUNDRVBUX25ldyh2b2lkICk7CitzdGF0aWMgdm9pZCBCSU9fQUNDRVBUX2ZyZWUoQklPX0FDQ0VQVCAqYSk7CiAKICNkZWZpbmUgQUNQVF9TX0JFRk9SRQkJCTEKICNkZWZpbmUgQUNQVF9TX0dFVF9BQ0NFUFRfU09DS0VUCTIKQEAgLTE0MSw3ICsxNDEsNyBAQAogCXJldHVybigxKTsKIAl9CiAKLUJJT19BQ0NFUFQgKkJJT19BQ0NFUFRfbmV3KHZvaWQpCitzdGF0aWMgQklPX0FDQ0VQVCAqQklPX0FDQ0VQVF9uZXcodm9pZCkKIAl7CiAJQklPX0FDQ0VQVCAqcmV0OwogCkBAIC0xNTQsNyArMTU0LDcgQEAKIAlyZXR1cm4ocmV0KTsKIAl9CiAKLXZvaWQgQklPX0FDQ0VQVF9mcmVlKEJJT19BQ0NFUFQgKmEpCitzdGF0aWMgdm9pZCBCSU9fQUNDRVBUX2ZyZWUoQklPX0FDQ0VQVCAqYSkKIAl7CiAJaWYoYSA9PSBOVUxMKQogCSAgICByZXR1cm47CmRpZmYgLS1naXQgYS9jcnlwdG8vYmlvL2Jzc19kZ3JhbS5jIGIvY3J5cHRvL2Jpby9ic3NfZGdyYW0uYwppbmRleCAxNGNhODU0Li5lYjdlMzY1IDEwMDY0NAotLS0gYS9jcnlwdG8vYmlvL2Jzc19kZ3JhbS5jCisrKyBiL2NyeXB0by9iaW8vYnNzX2RncmFtLmMKQEAgLTEwOCw3ICsxMDgsMTMgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgYmlvX2RncmFtX2RhdGFfc3QKIAl7Ci0Jc3RydWN0IHNvY2thZGRyIHBlZXI7CisJdW5pb24geworCQlzdHJ1Y3Qgc29ja2FkZHIgc2E7CisJCXN0cnVjdCBzb2NrYWRkcl9pbiBzYV9pbjsKKyNpZiBPUEVOU1NMX1VTRV9JUFY2CisJCXN0cnVjdCBzb2NrYWRkcl9pbjYgc2FfaW42OworI2VuZGlmCisJfSBwZWVyOwogCXVuc2lnbmVkIGludCBjb25uZWN0ZWQ7CiAJdW5zaWduZWQgaW50IF9lcnJubzsKIAl1bnNpZ25lZCBpbnQgbXR1OwpAQCAtMjc0LDI0ICsyODAsMzggQEAKIAlpbnQgcmV0PTA7CiAJYmlvX2RncmFtX2RhdGEgKmRhdGEgPSAoYmlvX2RncmFtX2RhdGEgKiliLT5wdHI7CiAKLQlzdHJ1Y3Qgc29ja2FkZHIgcGVlcjsKLQlpbnQgcGVlcmxlbiA9IHNpemVvZihwZWVyKTsKKwlzdHJ1Y3QJeworCS8qCisJICogU2VlIGNvbW1lbnRhcnkgaW4gYl9zb2NrLmMuIDxhcHBybz4KKwkgKi8KKwl1bmlvbgl7IHNpemVfdCBzOyBpbnQgaTsgfSBsZW47CisJdW5pb24JeworCQlzdHJ1Y3Qgc29ja2FkZHIgc2E7CisJCXN0cnVjdCBzb2NrYWRkcl9pbiBzYV9pbjsKKyNpZiBPUEVOU1NMX1VTRV9JUFY2CisJCXN0cnVjdCBzb2NrYWRkcl9pbjYgc2FfaW42OworI2VuZGlmCisJCX0gcGVlcjsKKwl9IHNhOworCisJc2EubGVuLnM9MDsKKwlzYS5sZW4uaT1zaXplb2Yoc2EucGVlcik7CiAKIAlpZiAob3V0ICE9IE5VTEwpCiAJCXsKIAkJY2xlYXJfc29ja2V0X2Vycm9yKCk7Ci0JCW1lbXNldCgmcGVlciwgMHgwMCwgcGVlcmxlbik7Ci0JCS8qIExhc3QgYXJnIGluIHJlY3Zmcm9tIGlzIHNpZ25lZCBvbiBzb21lIHBsYXRmb3JtcyBhbmQKLQkJICogdW5zaWduZWQgb24gb3RoZXJzLiBJdCBpcyBvZiB0eXBlIHNvY2tsZW5fdCBvbiBzb21lCi0JCSAqIGJ1dCB0aGlzIGlzIG5vdCB1bml2ZXJzYWwuIENhc3QgdG8gKHZvaWQgKikgdG8gYXZvaWQKLQkJICogY29tcGlsZXIgd2FybmluZ3MuCi0JCSAqLworCQltZW1zZXQoJnNhLnBlZXIsIDB4MDAsIHNpemVvZihzYS5wZWVyKSk7CiAJCWRncmFtX2FkanVzdF9yY3ZfdGltZW91dChiKTsKLQkJcmV0PXJlY3Zmcm9tKGItPm51bSxvdXQsb3V0bCwwLCZwZWVyLCh2b2lkICopJnBlZXJsZW4pOworCQlyZXQ9cmVjdmZyb20oYi0+bnVtLG91dCxvdXRsLDAsJnNhLnBlZXIuc2EsKHZvaWQgKikmc2EubGVuKTsKKwkJaWYgKHNpemVvZihzYS5sZW4uaSkhPXNpemVvZihzYS5sZW4ucykgJiYgc2EubGVuLmk9PTApCisJCQl7CisJCQlPUEVOU1NMX2Fzc2VydChzYS5sZW4uczw9c2l6ZW9mKHNhLnBlZXIpKTsKKwkJCXNhLmxlbi5pID0gKGludClzYS5sZW4uczsKKwkJCX0KIAkJZGdyYW1fcmVzZXRfcmN2X3RpbWVvdXQoYik7CiAKIAkJaWYgKCAhIGRhdGEtPmNvbm5lY3RlZCAgJiYgcmV0ID49IDApCi0JCQlCSU9fY3RybChiLCBCSU9fQ1RSTF9ER1JBTV9TRVRfUEVFUiwgMCwgJnBlZXIpOworCQkJQklPX2N0cmwoYiwgQklPX0NUUkxfREdSQU1fU0VUX1BFRVIsIDAsICZzYS5wZWVyKTsKIAogCQlCSU9fY2xlYXJfcmV0cnlfZmxhZ3MoYik7CiAJCWlmIChyZXQgPCAwKQpAQCAtMzEyLDE0ICszMzIsMjQgQEAKIAliaW9fZGdyYW1fZGF0YSAqZGF0YSA9IChiaW9fZGdyYW1fZGF0YSAqKWItPnB0cjsKIAljbGVhcl9zb2NrZXRfZXJyb3IoKTsKIAotICAgIGlmICggZGF0YS0+Y29ubmVjdGVkICkKLSAgICAgICAgcmV0PXdyaXRlc29ja2V0KGItPm51bSxpbixpbmwpOwotICAgIGVsc2UKLSNpZiBkZWZpbmVkKE5FVFdBUkVfQ0xJQikgJiYgZGVmaW5lZChORVRXQVJFX0JTRFNPQ0spCi0gICAgICAgIHJldD1zZW5kdG8oYi0+bnVtLCAoY2hhciAqKWluLCBpbmwsIDAsICZkYXRhLT5wZWVyLCBzaXplb2YoZGF0YS0+cGVlcikpOwotI2Vsc2UKLSAgICAgICAgcmV0PXNlbmR0byhiLT5udW0sIGluLCBpbmwsIDAsICZkYXRhLT5wZWVyLCBzaXplb2YoZGF0YS0+cGVlcikpOworCWlmICggZGF0YS0+Y29ubmVjdGVkICkKKwkJcmV0PXdyaXRlc29ja2V0KGItPm51bSxpbixpbmwpOworCWVsc2UKKwkJeworCQlpbnQgcGVlcmxlbiA9IHNpemVvZihkYXRhLT5wZWVyKTsKKworCQlpZiAoZGF0YS0+cGVlci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCkKKwkJCXBlZXJsZW4gPSBzaXplb2YoZGF0YS0+cGVlci5zYV9pbik7CisjaWYgT1BFTlNTTF9VU0VfSVZQNgorCQllbHNlIGlmIChkYXRhLT5wZWVyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikKKwkJCXBlZXJsZW4gPSBzaXplb2YoZGF0YS0+cGVlci5zYV9pbjYpOwogI2VuZGlmCisjaWYgZGVmaW5lZChORVRXQVJFX0NMSUIpICYmIGRlZmluZWQoTkVUV0FSRV9CU0RTT0NLKQorCQlyZXQ9c2VuZHRvKGItPm51bSwgKGNoYXIgKilpbiwgaW5sLCAwLCAmZGF0YS0+cGVlci5zYSwgcGVlcmxlbik7CisjZWxzZQorCQlyZXQ9c2VuZHRvKGItPm51bSwgaW4sIGlubCwgMCwgJmRhdGEtPnBlZXIuc2EsIHBlZXJsZW4pOworI2VuZGlmCisJCX0KIAogCUJJT19jbGVhcl9yZXRyeV9mbGFncyhiKTsKIAlpZiAocmV0IDw9IDApCkBAIC0zNTEsNyArMzgxLDEzIEBACiAjZW5kaWYKICNpZmRlZiBPUEVOU1NMX1NZU19MSU5VWAogCXNvY2tsZW5fdCBhZGRyX2xlbjsKLQlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBhZGRyOworCXVuaW9uCXsKKwkJc3RydWN0IHNvY2thZGRyCXNhOworCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gczQ7CisjaWYgT1BFTlNTTF9VU0VfSVBWNgorCQlzdHJ1Y3Qgc29ja2FkZHJfaW42IHM2OworI2VuZGlmCisJCX0gYWRkcjsKICNlbmRpZgogCiAJZGF0YSA9IChiaW9fZGdyYW1fZGF0YSAqKWItPnB0cjsKQEAgLTQwNSw3ICs0NDEsMjAgQEAKIAkJZWxzZQogCQkJewogI2VuZGlmCi0JCQltZW1jcHkoJihkYXRhLT5wZWVyKSx0bywgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikpOworCQkJc3dpdGNoICh0by0+c2FfZmFtaWx5KQorCQkJCXsKKwkJCQljYXNlIEFGX0lORVQ6CisJCQkJCW1lbWNweSgmZGF0YS0+cGVlcix0byxzaXplb2YoZGF0YS0+cGVlci5zYV9pbikpOworCQkJCQlicmVhazsKKyNpZiBPUEVOU1NMX1VTRV9JUFY2CisJCQkJY2FzZSBBRl9JTkVUNjoKKwkJCQkJbWVtY3B5KCZkYXRhLT5wZWVyLHRvLHNpemVvZihkYXRhLT5wZWVyLnNhX2luNikpOworCQkJCQlicmVhazsKKyNlbmRpZgorCQkJCWRlZmF1bHQ6CisJCQkJCW1lbWNweSgmZGF0YS0+cGVlcix0byxzaXplb2YoZGF0YS0+cGVlci5zYSkpOworCQkJCQlicmVhazsKKwkJCQl9CiAjaWYgMAogCQkJfQogI2VuZGlmCkBAIC00MTMsMTUgKzQ2MiwxNSBAQAogCQkvKiAoTGludXgpa2VybmVsIHNldHMgREYgYml0IG9uIG91dGdvaW5nIElQIHBhY2tldHMgKi8KIAljYXNlIEJJT19DVFJMX0RHUkFNX01UVV9ESVNDT1ZFUjoKICNpZmRlZiBPUEVOU1NMX1NZU19MSU5VWAotCQlhZGRyX2xlbiA9IChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlKTsKLQkJbWVtc2V0KCh2b2lkICopJmFkZHIsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSkpOwotCQlpZiAoZ2V0c29ja25hbWUoYi0+bnVtLCAodm9pZCAqKSZhZGRyLCAmYWRkcl9sZW4pIDwgMCkKKwkJYWRkcl9sZW4gPSAoc29ja2xlbl90KXNpemVvZihhZGRyKTsKKwkJbWVtc2V0KCh2b2lkICopJmFkZHIsIDAsIHNpemVvZihhZGRyKSk7CisJCWlmIChnZXRzb2NrbmFtZShiLT5udW0sICZhZGRyLnNhLCAmYWRkcl9sZW4pIDwgMCkKIAkJCXsKIAkJCXJldCA9IDA7CiAJCQlicmVhazsKIAkJCX0KIAkJc29ja29wdF9sZW4gPSBzaXplb2Yoc29ja29wdF92YWwpOwotCQlzd2l0Y2ggKGFkZHIuc3NfZmFtaWx5KQorCQlzd2l0Y2ggKGFkZHIuc2Euc2FfZmFtaWx5KQogCQkJewogCQljYXNlIEFGX0lORVQ6CiAJCQlzb2Nrb3B0X3ZhbCA9IElQX1BNVFVESVNDX0RPOwpAQCAtNDI5LDEyICs0NzgsMTQgQEAKIAkJCQkmc29ja29wdF92YWwsIHNpemVvZihzb2Nrb3B0X3ZhbCkpKSA8IDApCiAJCQkJcGVycm9yKCJzZXRzb2Nrb3B0Iik7CiAJCQlicmVhazsKKyNpZiBPUEVOU1NMX1VTRV9JUFY2ICYmIGRlZmluZWQoSVBWNl9NVFVfRElTQ09WRVIpCiAJCWNhc2UgQUZfSU5FVDY6CiAJCQlzb2Nrb3B0X3ZhbCA9IElQVjZfUE1UVURJU0NfRE87CiAJCQlpZiAoKHJldCA9IHNldHNvY2tvcHQoYi0+bnVtLCBJUFBST1RPX0lQVjYsIElQVjZfTVRVX0RJU0NPVkVSLAogCQkJCSZzb2Nrb3B0X3ZhbCwgc2l6ZW9mKHNvY2tvcHRfdmFsKSkpIDwgMCkKIAkJCQlwZXJyb3IoInNldHNvY2tvcHQiKTsKIAkJCWJyZWFrOworI2VuZGlmCiAJCWRlZmF1bHQ6CiAJCQlyZXQgPSAtMTsKIAkJCWJyZWFrOwpAQCAtNDQ1LDE1ICs0OTYsMTUgQEAKICNlbmRpZgogCWNhc2UgQklPX0NUUkxfREdSQU1fUVVFUllfTVRVOgogI2lmZGVmIE9QRU5TU0xfU1lTX0xJTlVYCi0JCWFkZHJfbGVuID0gKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UpOwotCQltZW1zZXQoKHZvaWQgKikmYWRkciwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlKSk7Ci0JCWlmIChnZXRzb2NrbmFtZShiLT5udW0sICh2b2lkICopJmFkZHIsICZhZGRyX2xlbikgPCAwKQorCQlhZGRyX2xlbiA9IChzb2NrbGVuX3Qpc2l6ZW9mKGFkZHIpOworCQltZW1zZXQoKHZvaWQgKikmYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTsKKwkJaWYgKGdldHNvY2tuYW1lKGItPm51bSwgJmFkZHIuc2EsICZhZGRyX2xlbikgPCAwKQogCQkJewogCQkJcmV0ID0gMDsKIAkJCWJyZWFrOwogCQkJfQogCQlzb2Nrb3B0X2xlbiA9IHNpemVvZihzb2Nrb3B0X3ZhbCk7Ci0JCXN3aXRjaCAoYWRkci5zc19mYW1pbHkpCisJCXN3aXRjaCAoYWRkci5zYS5zYV9mYW1pbHkpCiAJCQl7CiAJCWNhc2UgQUZfSU5FVDoKIAkJCWlmICgocmV0ID0gZ2V0c29ja29wdChiLT5udW0sIElQUFJPVE9fSVAsIElQX01UVSwgKHZvaWQgKikmc29ja29wdF92YWwsCkBAIC00NzAsNiArNTIxLDcgQEAKIAkJCQlyZXQgPSBkYXRhLT5tdHU7CiAJCQkJfQogCQkJYnJlYWs7CisjaWYgT1BFTlNTTF9VU0VfSVBWNiAmJiBkZWZpbmVkKElQVjZfTVRVKQogCQljYXNlIEFGX0lORVQ2OgogCQkJaWYgKChyZXQgPSBnZXRzb2Nrb3B0KGItPm51bSwgSVBQUk9UT19JUFY2LCBJUFY2X01UVSwgKHZvaWQgKikmc29ja29wdF92YWwsCiAJCQkJJnNvY2tvcHRfbGVuKSkgPCAwIHx8IHNvY2tvcHRfdmFsIDwgMCkKQEAgLTQ4NSw2ICs1MzcsNyBAQAogCQkJCXJldCA9IGRhdGEtPm10dTsKIAkJCQl9CiAJCQlicmVhazsKKyNlbmRpZgogCQlkZWZhdWx0OgogCQkJcmV0ID0gMDsKIAkJCWJyZWFrOwpAQCAtNTA2LDI3ICs1NTksNjUgQEAKIAkJaWYgKCB0byAhPSBOVUxMKQogCQkJewogCQkJZGF0YS0+Y29ubmVjdGVkID0gMTsKLQkJCW1lbWNweSgmKGRhdGEtPnBlZXIpLHRvLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSk7CisJCQlzd2l0Y2ggKHRvLT5zYV9mYW1pbHkpCisJCQkJeworCQkJCWNhc2UgQUZfSU5FVDoKKwkJCQkJbWVtY3B5KCZkYXRhLT5wZWVyLHRvLHNpemVvZihkYXRhLT5wZWVyLnNhX2luKSk7CisJCQkJCWJyZWFrOworI2lmIE9QRU5TU0xfVVNFX0lQVjYKKwkJCQljYXNlIEFGX0lORVQ2OgorCQkJCQltZW1jcHkoJmRhdGEtPnBlZXIsdG8sc2l6ZW9mKGRhdGEtPnBlZXIuc2FfaW42KSk7CisJCQkJCWJyZWFrOworI2VuZGlmCisJCQkJZGVmYXVsdDoKKwkJCQkJbWVtY3B5KCZkYXRhLT5wZWVyLHRvLHNpemVvZihkYXRhLT5wZWVyLnNhKSk7CisJCQkJCWJyZWFrOworCQkJCX0KIAkJCX0KIAkJZWxzZQogCQkJewogCQkJZGF0YS0+Y29ubmVjdGVkID0gMDsKLQkJCW1lbXNldCgmKGRhdGEtPnBlZXIpLCAweDAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSk7CisJCQltZW1zZXQoJihkYXRhLT5wZWVyKSwgMHgwMCwgc2l6ZW9mKGRhdGEtPnBlZXIpKTsKIAkJCX0KIAkJYnJlYWs7Ci0gICAgY2FzZSBCSU9fQ1RSTF9ER1JBTV9HRVRfUEVFUjoKLSAgICAgICAgdG8gPSAoc3RydWN0IHNvY2thZGRyICopIHB0cjsKLQotICAgICAgICBtZW1jcHkodG8sICYoZGF0YS0+cGVlciksIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKTsKLQkJcmV0ID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQklPX0NUUkxfREdSQU1fU0VUX1BFRVI6Ci0gICAgICAgIHRvID0gKHN0cnVjdCBzb2NrYWRkciAqKSBwdHI7Ci0KLSAgICAgICAgbWVtY3B5KCYoZGF0YS0+cGVlciksIHRvLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSk7Ci0gICAgICAgIGJyZWFrOworCWNhc2UgQklPX0NUUkxfREdSQU1fR0VUX1BFRVI6CisJCXN3aXRjaCAoZGF0YS0+cGVlci5zYS5zYV9mYW1pbHkpCisJCQl7CisJCQljYXNlIEFGX0lORVQ6CisJCQkJcmV0PXNpemVvZihkYXRhLT5wZWVyLnNhX2luKTsKKwkJCQlicmVhazsKKyNpZiBPUEVOU1NMX1VTRV9JUFY2CisJCQljYXNlIEFGX0lORVQ2OgorCQkJCXJldD1zaXplb2YoZGF0YS0+cGVlci5zYV9pbjYpOworCQkJCWJyZWFrOworI2VuZGlmCisJCQlkZWZhdWx0OgorCQkJCXJldD1zaXplb2YoZGF0YS0+cGVlci5zYSk7CisJCQkJYnJlYWs7CisJCQl9CisJCWlmIChudW09PTAgfHwgbnVtPnJldCkKKwkJCW51bT1yZXQ7CisJCW1lbWNweShwdHIsJmRhdGEtPnBlZXIsKHJldD1udW0pKTsKKwkJYnJlYWs7CisJY2FzZSBCSU9fQ1RSTF9ER1JBTV9TRVRfUEVFUjoKKwkJdG8gPSAoc3RydWN0IHNvY2thZGRyICopIHB0cjsKKwkJc3dpdGNoICh0by0+c2FfZmFtaWx5KQorCQkJeworCQkJY2FzZSBBRl9JTkVUOgorCQkJCW1lbWNweSgmZGF0YS0+cGVlcix0byxzaXplb2YoZGF0YS0+cGVlci5zYV9pbikpOworCQkJCWJyZWFrOworI2lmIE9QRU5TU0xfVVNFX0lQVjYKKwkJCWNhc2UgQUZfSU5FVDY6CisJCQkJbWVtY3B5KCZkYXRhLT5wZWVyLHRvLHNpemVvZihkYXRhLT5wZWVyLnNhX2luNikpOworCQkJCWJyZWFrOworI2VuZGlmCisJCQlkZWZhdWx0OgorCQkJCW1lbWNweSgmZGF0YS0+cGVlcix0byxzaXplb2YoZGF0YS0+cGVlci5zYSkpOworCQkJCWJyZWFrOworCQkJfQorCQlicmVhazsKIAljYXNlIEJJT19DVFJMX0RHUkFNX1NFVF9ORVhUX1RJTUVPVVQ6Ci0JCW1lbWNweSgmKGRhdGEtPm5leHRfdGltZW91dCksIHB0ciwgc2l6ZW9mKHN0cnVjdCB0aW1ldmFsKSk7CQkKKwkJbWVtY3B5KCYoZGF0YS0+bmV4dF90aW1lb3V0KSwgcHRyLCBzaXplb2Yoc3RydWN0IHRpbWV2YWwpKTsKIAkJYnJlYWs7CiAjaWYgZGVmaW5lZChTT19SQ1ZUSU1FTykKIAljYXNlIEJJT19DVFJMX0RHUkFNX1NFVF9SRUNWX1RJTUVPVVQ6CmRpZmYgLS1naXQgYS9jcnlwdG8vYmlvL2Jzc19mZC5jIGIvY3J5cHRvL2Jpby9ic3NfZmQuYwppbmRleCA0YzIyOWJmLi5kMWJmODVhIDEwMDY0NAotLS0gYS9jcnlwdG8vYmlvL2Jzc19mZC5jCisrKyBiL2NyeXB0by9iaW8vYnNzX2ZkLmMKQEAgLTYwLDYgKzYwLDEzIEBACiAjaW5jbHVkZSA8ZXJybm8uaD4KICNkZWZpbmUgVVNFX1NPQ0tFVFMKICNpbmNsdWRlICJjcnlwdGxpYi5oIgorCisjaWYgZGVmaW5lZChPUEVOU1NMX05PX1BPU0lYX0lPKQorLyoKKyAqIE9uZSBjYW4gYXJndWUgdGhhdCBvbmUgc2hvdWxkIGltcGxlbWVudCBkdW1teSBwbGFjZWhvbGRlciBmb3IKKyAqIEJJT19zX2ZkIGhlcmUuLi4KKyAqLworI2Vsc2UKIC8qCiAgKiBBcyBmb3IgdW5jb25kaXRpb25hbCB1c2FnZSBvZiAiVVBMSU5LIiBpbnRlcmZhY2UgaW4gdGhpcyBtb2R1bGUuCiAgKiBUcm91YmxlIGlzIHRoYXQgdW5saWtlIFVuaXggZmlsZSBkZXNjcmlwdG9ycyBbd2hpY2ggYXJlIGluZGV4ZXMKQEAgLTc3LDYgKzg0LDcgQEAKIHN0YXRpYyBpbnQgZmRfd3JpdGUoQklPICpoLCBjb25zdCBjaGFyICpidWYsIGludCBudW0pOwogc3RhdGljIGludCBmZF9yZWFkKEJJTyAqaCwgY2hhciAqYnVmLCBpbnQgc2l6ZSk7CiBzdGF0aWMgaW50IGZkX3B1dHMoQklPICpoLCBjb25zdCBjaGFyICpzdHIpOworc3RhdGljIGludCBmZF9nZXRzKEJJTyAqaCwgY2hhciAqYnVmLCBpbnQgc2l6ZSk7CiBzdGF0aWMgbG9uZyBmZF9jdHJsKEJJTyAqaCwgaW50IGNtZCwgbG9uZyBhcmcxLCB2b2lkICphcmcyKTsKIHN0YXRpYyBpbnQgZmRfbmV3KEJJTyAqaCk7CiBzdGF0aWMgaW50IGZkX2ZyZWUoQklPICpkYXRhKTsKQEAgLTg4LDcgKzk2LDcgQEAKIAlmZF93cml0ZSwKIAlmZF9yZWFkLAogCWZkX3B1dHMsCi0JTlVMTCwgLyogZmRfZ2V0cywgKi8KKwlmZF9nZXRzLAogCWZkX2N0cmwsCiAJZmRfbmV3LAogCWZkX2ZyZWUsCkBAIC0yMjcsNiArMjM1LDIyIEBACiAJcmV0dXJuKHJldCk7CiAJfQogCitzdGF0aWMgaW50IGZkX2dldHMoQklPICpicCwgY2hhciAqYnVmLCBpbnQgc2l6ZSkKKyAgICAgICAgeworCWludCByZXQ9MDsKKwljaGFyICpwdHI9YnVmOworCWNoYXIgKmVuZD1idWYrc2l6ZS0xOworCisJd2hpbGUgKCAocHRyIDwgZW5kKSAmJiAoZmRfcmVhZChicCwgcHRyLCAxKSA+IDApICYmIChwdHJbMF0gIT0gJ1xuJykgKQorCQlwdHIrKzsKKworCXB0clswXT0nXDAnOworCisJaWYgKGJ1ZlswXSAhPSAnXDAnKQorCQlyZXQ9c3RybGVuKGJ1Zik7CisJcmV0dXJuKHJldCk7CisgICAgICAgIH0KKwogaW50IEJJT19mZF9zaG91bGRfcmV0cnkoaW50IGkpCiAJewogCWludCBlcnI7CkBAIC0yOTIsMyArMzE2LDQgQEAKIAkJfQogCXJldHVybigwKTsKIAl9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2NyeXB0by9iaW8vYnNzX2ZpbGUuYyBiL2NyeXB0by9iaW8vYnNzX2ZpbGUuYwppbmRleCA2MmMxMDczLi5iYTRmOGU5IDEwMDY0NAotLS0gYS9jcnlwdG8vYmlvL2Jzc19maWxlLmMKKysrIGIvY3J5cHRvL2Jpby9ic3NfZmlsZS5jCkBAIC0xMzEsNyArMTMxLDcgQEAKIAkJCUJJT2VycihCSU9fRl9CSU9fTkVXX0ZJTEUsRVJSX1JfU1lTX0xJQik7CiAJCXJldHVybihOVUxMKTsKIAkJfQotCWlmICgocmV0PUJJT19uZXcoQklPX3NfZmlsZV9pbnRlcm5hbCgpKSkgPT0gTlVMTCkKKwlpZiAoKHJldD1CSU9fbmV3KEJJT19zX2ZpbGUoKSkpID09IE5VTEwpCiAJCXsKIAkJZmNsb3NlKGZpbGUpOwogCQlyZXR1cm4oTlVMTCk7CkBAIC0yNzIsOSArMjcyLDkgQEAKIAkJCUJJT19jbGVhcl9mbGFncyhiLEJJT19GTEFHU19VUExJTkspOwogI2VuZGlmCiAjZW5kaWYKLSNpZmRlZiBVUF9mc2V0bW9kZQorI2lmZGVmIFVQX2ZzZXRtb2QKIAkJaWYgKGItPmZsYWdzJkJJT19GTEFHU19VUExJTkspCi0JCQlVUF9mc2V0bW9kZShiLT5wdHIsbnVtJkJJT19GUF9URVhUPyd0JzonYicpOworCQkJVVBfZnNldG1vZChiLT5wdHIsKGNoYXIpKChudW0mQklPX0ZQX1RFWFQpPyd0JzonYicpKTsKIAkJZWxzZQogI2VuZGlmCiAJCXsKQEAgLTI4Niw4ICsyODYsNyBAQAogCQkJX3NldG1vZGUoZmQsX09fQklOQVJZKTsKICNlbGlmIGRlZmluZWQoT1BFTlNTTF9TWVNfTkVUV0FSRSkgJiYgZGVmaW5lZChORVRXQVJFX0NMSUIpCiAJCWludCBmZCA9IGZpbGVubygoRklMRSopcHRyKTsKLSAgICAgICAgIC8qIFVuZGVyIENMaWIgdGhlcmUgYXJlIGRpZmZlcmVuY2VzIGluIGZpbGUgbW9kZXMKLSAgICAgICAgICovCisJCS8qIFVuZGVyIENMaWIgdGhlcmUgYXJlIGRpZmZlcmVuY2VzIGluIGZpbGUgbW9kZXMgKi8KIAkJaWYgKG51bSAmIEJJT19GUF9URVhUKQogCQkJc2V0bW9kZShmZCxPX1RFWFQpOwogCQllbHNlCkBAIC0zMDgsNyArMzA3LDcgQEAKIAkJCWVsc2UKIAkJCQlfc2V0bW9kZShmZCxfT19CSU5BUlkpOwogCQkJfQotI2VsaWYgZGVmaW5lZChPUEVOU1NMX1NZU19PUzIpCisjZWxpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX09TMikgfHwgZGVmaW5lZChPUEVOU1NMX1NZU19XSU4zMl9DWUdXSU4pCiAJCWludCBmZCA9IGZpbGVubygoRklMRSopcHRyKTsKIAkJaWYgKG51bSAmIEJJT19GUF9URVhUKQogCQkJc2V0bW9kZShmZCwgT19URVhUKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9iaW8vYnNzX2xvZy5jIGIvY3J5cHRvL2Jpby9ic3NfbG9nLmMKaW5kZXggNjM2MGRiYy4uN2VhZDA0NCAxMDA2NDQKLS0tIGEvY3J5cHRvL2Jpby9ic3NfbG9nLmMKKysrIGIvY3J5cHRvL2Jpby9ic3NfbG9nLmMKQEAgLTcwLDcgKzcwLDYgQEAKIAogI2lmIGRlZmluZWQoT1BFTlNTTF9TWVNfV0lOQ0UpCiAjZWxpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX1dJTjMyKQotIyAgaW5jbHVkZSA8cHJvY2Vzcy5oPgogI2VsaWYgZGVmaW5lZChPUEVOU1NMX1NZU19WTVMpCiAjICBpbmNsdWRlIDxvcGNkZWYuaD4KICMgIGluY2x1ZGUgPGRlc2NyaXAuaD4KQEAgLTEyMiwxOCArMTIxLDYgQEAKIHN0YXRpYyB2b2lkIHhvcGVubG9nKEJJTyogYnAsIGNoYXIqIG5hbWUsIGludCBsZXZlbCk7CiBzdGF0aWMgdm9pZCB4c3lzbG9nKEJJTyogYnAsIGludCBwcmlvcml0eSwgY29uc3QgY2hhciogc3RyaW5nKTsKIHN0YXRpYyB2b2lkIHhjbG9zZWxvZyhCSU8qIGJwKTsKLSNpZmRlZiBPUEVOU1NMX1NZU19XSU4zMgotTE9ORwkoV0lOQVBJICpnb19mb3JfYWR2YXBpKSgpCT0gUmVnT3BlbktleUV4OwotSEFORExFCShXSU5BUEkgKnJlZ2lzdGVyX2V2ZW50X3NvdXJjZSkoKQk9IE5VTEw7Ci1CT09MCShXSU5BUEkgKmRlcmVnaXN0ZXJfZXZlbnRfc291cmNlKSgpCT0gTlVMTDsKLUJPT0wJKFdJTkFQSSAqcmVwb3J0X2V2ZW50KSgpCT0gTlVMTDsKLSNkZWZpbmUgRExfUFJPQyhtLGYpCShHZXRQcm9jQWRkcmVzcyggbSwgZiApKQotI2lmZGVmIFVOSUNPREUKLSNkZWZpbmUgRExfUFJPQ19YKG0sZikgRExfUFJPQyggbSwgZiAiVyIgKQotI2Vsc2UKLSNkZWZpbmUgRExfUFJPQ19YKG0sZikgRExfUFJPQyggbSwgZiAiQSIgKQotI2VuZGlmCi0jZW5kaWYKIAogc3RhdGljIEJJT19NRVRIT0QgbWV0aG9kc19zbGc9CiAJewpAQCAtMTc1LDcgKzE2Miw3IEBACiAJY2hhciogYnVmOwogCWNoYXIqIHBwOwogCWludCBwcmlvcml0eSwgaTsKLQlzdGF0aWMgc3RydWN0CisJc3RhdGljIGNvbnN0IHN0cnVjdAogCQl7CiAJCWludCBzdHJsOwogCQljaGFyIHN0clsxMF07CkBAIC0yNDksMzUgKzIzNiwyMCBAQAogCiBzdGF0aWMgdm9pZCB4b3BlbmxvZyhCSU8qIGJwLCBjaGFyKiBuYW1lLCBpbnQgbGV2ZWwpCiB7Ci0JaWYgKCAhcmVnaXN0ZXJfZXZlbnRfc291cmNlICkKLQkJewotCQlIQU5ETEUJYWR2YXBpOwotCQlpZiAoICEoYWR2YXBpID0gR2V0TW9kdWxlSGFuZGxlKCJhZHZhcGkzMiIpKSApCi0JCQlyZXR1cm47Ci0JCXJlZ2lzdGVyX2V2ZW50X3NvdXJjZSA9IChIQU5ETEUgKFdJTkFQSSAqKSgpKURMX1BST0NfWChhZHZhcGksCi0JCQkiUmVnaXN0ZXJFdmVudFNvdXJjZSIgKTsKLQkJZGVyZWdpc3Rlcl9ldmVudF9zb3VyY2UgPSAoQk9PTCAoV0lOQVBJICopKCkpRExfUFJPQyhhZHZhcGksCi0JCQkiRGVyZWdpc3RlckV2ZW50U291cmNlIik7Ci0JCXJlcG9ydF9ldmVudCA9IChCT09MIChXSU5BUEkgKikoKSlETF9QUk9DX1goYWR2YXBpLAotCQkJIlJlcG9ydEV2ZW50IiApOwotCQlpZiAoICEocmVnaXN0ZXJfZXZlbnRfc291cmNlICYmIGRlcmVnaXN0ZXJfZXZlbnRfc291cmNlICYmCi0JCQkJcmVwb3J0X2V2ZW50KSApCi0JCQl7Ci0JCQlyZWdpc3Rlcl9ldmVudF9zb3VyY2UgPSBOVUxMOwotCQkJZGVyZWdpc3Rlcl9ldmVudF9zb3VyY2UgPSBOVUxMOwotCQkJcmVwb3J0X2V2ZW50ID0gTlVMTDsKLQkJCXJldHVybjsKLQkJCX0KLQkJfQotCWJwLT5wdHI9IChjaGFyICopcmVnaXN0ZXJfZXZlbnRfc291cmNlKE5VTEwsIG5hbWUpOworCWlmIChHZXRWZXJzaW9uKCkgPCAweDgwMDAwMDAwKQorCQlicC0+cHRyID0gUmVnaXN0ZXJFdmVudFNvdXJjZUEoTlVMTCxuYW1lKTsKKwllbHNlCisJCWJwLT5wdHIgPSBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCB4c3lzbG9nKEJJTyAqYnAsIGludCBwcmlvcml0eSwgY29uc3QgY2hhciAqc3RyaW5nKQogewogCUxQQ1NUUiBscHN6U3RyaW5nc1syXTsKIAlXT1JEIGV2dHlwZT0gRVZFTlRMT0dfRVJST1JfVFlQRTsKLQlpbnQgcGlkID0gX2dldHBpZCgpOwotCWNoYXIgcGlkYnVmW0RFQ0lNQUxfU0laRShwaWQpKzRdOworCWNoYXIgcGlkYnVmW0RFQ0lNQUxfU0laRShEV09SRCkrNF07CisKKwlpZiAoYnAtPnB0ciA9PSBOVUxMKQorCQlyZXR1cm47CiAKIAlzd2l0Y2ggKHByaW9yaXR5KQogCQl7CkBAIC0zMDEsMTkgKzI3MywxOCBAQAogCQlicmVhazsKIAkJfQogCi0Jc3ByaW50ZihwaWRidWYsICJbJWRdICIsIHBpZCk7CisJc3ByaW50ZihwaWRidWYsICJbJXVdICIsIEdldEN1cnJlbnRQcm9jZXNzSWQoKSk7CiAJbHBzelN0cmluZ3NbMF0gPSBwaWRidWY7CiAJbHBzelN0cmluZ3NbMV0gPSBzdHJpbmc7CiAKLQlpZihyZXBvcnRfZXZlbnQgJiYgYnAtPnB0cikKLQkJcmVwb3J0X2V2ZW50KGJwLT5wdHIsIGV2dHlwZSwgMCwgMTAyNCwgTlVMTCwgMiwgMCwKKwlSZXBvcnRFdmVudEEoYnAtPnB0ciwgZXZ0eXBlLCAwLCAxMDI0LCBOVUxMLCAyLCAwLAogCQkJCWxwc3pTdHJpbmdzLCBOVUxMKTsKIH0KIAkKIHN0YXRpYyB2b2lkIHhjbG9zZWxvZyhCSU8qIGJwKQogewotCWlmKGRlcmVnaXN0ZXJfZXZlbnRfc291cmNlICYmIGJwLT5wdHIpCi0JCWRlcmVnaXN0ZXJfZXZlbnRfc291cmNlKChIQU5ETEUpKGJwLT5wdHIpKTsKKwlpZihicC0+cHRyKQorCQlEZXJlZ2lzdGVyRXZlbnRTb3VyY2UoKEhBTkRMRSkoYnAtPnB0cikpOwogCWJwLT5wdHI9IE5VTEw7CiB9CiAKZGlmZiAtLWdpdCBhL2NyeXB0by9iaW8vYnNzX21lbS5jIGIvY3J5cHRvL2Jpby9ic3NfbWVtLmMKaW5kZXggZTdhYjljYi4uMzdkNDE5NCAxMDA2NDQKLS0tIGEvY3J5cHRvL2Jpby9ic3NfbWVtLmMKKysrIGIvY3J5cHRvL2Jpby9ic3NfbWVtLmMKQEAgLTk0LDE2ICs5NCwxOCBAQAogewogCUJJTyAqcmV0OwogCUJVRl9NRU0gKmI7CisJc2l6ZV90IHN6OworCiAJaWYgKCFidWYpIHsKIAkJQklPZXJyKEJJT19GX0JJT19ORVdfTUVNX0JVRixCSU9fUl9OVUxMX1BBUkFNRVRFUik7CiAJCXJldHVybiBOVUxMOwogCX0KLQlpZihsZW4gPT0gLTEpIGxlbiA9IHN0cmxlbihidWYpOworCXN6ID0gKGxlbjwwKSA/IHN0cmxlbihidWYpIDogKHNpemVfdClsZW47CiAJaWYoIShyZXQgPSBCSU9fbmV3KEJJT19zX21lbSgpKSkgKSByZXR1cm4gTlVMTDsKIAliID0gKEJVRl9NRU0gKilyZXQtPnB0cjsKIAliLT5kYXRhID0gYnVmOwotCWItPmxlbmd0aCA9IGxlbjsKLQliLT5tYXggPSBsZW47CisJYi0+bGVuZ3RoID0gc3o7CisJYi0+bWF4ID0gc3o7CiAJcmV0LT5mbGFncyB8PSBCSU9fRkxBR1NfTUVNX1JET05MWTsKIAkvKiBTaW5jZSB0aGlzIGlzIHN0YXRpYyBkYXRhIHJldHJ5aW5nIHdvbnQgaGVscCAqLwogCXJldC0+bnVtID0gMDsKQEAgLTE0NCwyMiArMTQ2LDE2IEBACiAJewogCWludCByZXQ9IC0xOwogCUJVRl9NRU0gKmJtOwotCWludCBpOwotCWNoYXIgKmZyb20sKnRvOwogCiAJYm09KEJVRl9NRU0gKiliLT5wdHI7CiAJQklPX2NsZWFyX3JldHJ5X2ZsYWdzKGIpOwotCXJldD0ob3V0bCA+IGJtLT5sZW5ndGgpP2JtLT5sZW5ndGg6b3V0bDsKKwlyZXQ9KG91dGwgPj0wICYmIChzaXplX3Qpb3V0bCA+IGJtLT5sZW5ndGgpPyhpbnQpYm0tPmxlbmd0aDpvdXRsOwogCWlmICgob3V0ICE9IE5VTEwpICYmIChyZXQgPiAwKSkgewogCQltZW1jcHkob3V0LGJtLT5kYXRhLHJldCk7CiAJCWJtLT5sZW5ndGgtPXJldDsKLQkJLyogbWVtbW92ZSgmKGJtLT5kYXRhWzBdKSwmKGJtLT5kYXRhW3JldF0pLCBibS0+bGVuZ3RoKTsgKi8KIAkJaWYoYi0+ZmxhZ3MgJiBCSU9fRkxBR1NfTUVNX1JET05MWSkgYm0tPmRhdGEgKz0gcmV0OwogCQllbHNlIHsKLQkJCWZyb209KGNoYXIgKikmKGJtLT5kYXRhW3JldF0pOwotCQkJdG89KGNoYXIgKikmKGJtLT5kYXRhWzBdKTsKLQkJCWZvciAoaT0wOyBpPGJtLT5sZW5ndGg7IGkrKykKLQkJCQl0b1tpXT1mcm9tW2ldOworCQkJbWVtbW92ZSgmKGJtLT5kYXRhWzBdKSwmKGJtLT5kYXRhW3JldF0pLGJtLT5sZW5ndGgpOwogCQl9CiAJfSBlbHNlIGlmIChibS0+bGVuZ3RoID09IDApCiAJCXsKZGlmZiAtLWdpdCBhL2NyeXB0by9iaW8vYnNzX3NvY2suYyBiL2NyeXB0by9iaW8vYnNzX3NvY2suYwppbmRleCAzMGMzY2VhLi4zZGYzMTkzIDEwMDY0NAotLS0gYS9jcnlwdG8vYmlvL2Jzc19zb2NrLmMKKysrIGIvY3J5cHRvL2Jpby9ic3Nfc29jay5jCkBAIC0xNzIsMTUgKzE3Miw2IEBACiAKIAlzd2l0Y2ggKGNtZCkKIAkJewotCWNhc2UgQklPX0NUUkxfUkVTRVQ6Ci0JCW51bT0wOwotCWNhc2UgQklPX0NfRklMRV9TRUVLOgotCQlyZXQ9MDsKLQkJYnJlYWs7Ci0JY2FzZSBCSU9fQ19GSUxFX1RFTEw6Ci0JY2FzZSBCSU9fQ1RSTF9JTkZPOgotCQlyZXQ9MDsKLQkJYnJlYWs7CiAJY2FzZSBCSU9fQ19TRVRfRkQ6CiAJCXNvY2tfZnJlZShiKTsKIAkJYi0+bnVtPSAqKChpbnQgKilwdHIpOwpAQCAtMjAzLDEwICsxOTQsNiBAQAogCWNhc2UgQklPX0NUUkxfU0VUX0NMT1NFOgogCQliLT5zaHV0ZG93bj0oaW50KW51bTsKIAkJYnJlYWs7Ci0JY2FzZSBCSU9fQ1RSTF9QRU5ESU5HOgotCWNhc2UgQklPX0NUUkxfV1BFTkRJTkc6Ci0JCXJldD0wOwotCQlicmVhazsKIAljYXNlIEJJT19DVFJMX0RVUDoKIAljYXNlIEJJT19DVFJMX0ZMVVNIOgogCQlyZXQ9MTsKZGlmZiAtLWdpdCBhL2NyeXB0by9ibi9NYWtlZmlsZSBiL2NyeXB0by9ibi9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjVlOGY2NS4uMDAwMDAwMAotLS0gYS9jcnlwdG8vYm4vTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwzNjIgKzAsMCBAQAotIwotIyBPcGVuU1NML2NyeXB0by9ibi9NYWtlZmlsZQotIwotCi1ESVI9CWJuCi1UT1A9CS4uLy4uCi1DQz0JY2MKLUNQUD0gICAgJChDQykgLUUKLUlOQ0xVREVTPSAtSS4uIC1JJChUT1ApIC1JLi4vLi4vaW5jbHVkZQotQ0ZMQUc9LWcKLU1BS0VGSUxFPQlNYWtlZmlsZQotQVI9CQlhciByCi0KLUJOX0FTTT0JCWJuX2FzbS5vCi0jIG9yIHVzZQotI0JOX0FTTT0JYm44Ni1lbGYubwotCi1DRkxBR1M9ICQoSU5DTFVERVMpICQoQ0ZMQUcpCi1BU0ZMQUdTPSAkKElOQ0xVREVTKSAkKEFTRkxBRykKLUFGTEFHUz0gJChBU0ZMQUdTKQotCi1HRU5FUkFMPU1ha2VmaWxlCi1URVNUPWJudGVzdC5jIGV4cHRlc3QuYwotQVBQUz0KLQotTElCPSQoVE9QKS9saWJjcnlwdG8uYQotTElCU1JDPQlibl9hZGQuYyBibl9kaXYuYyBibl9leHAuYyBibl9saWIuYyBibl9jdHguYyBibl9tdWwuYyBibl9tb2QuYyBcCi0JYm5fcHJpbnQuYyBibl9yYW5kLmMgYm5fc2hpZnQuYyBibl93b3JkLmMgYm5fYmxpbmQuYyBcCi0JYm5fa3Jvbi5jIGJuX3NxcnQuYyBibl9nY2QuYyBibl9wcmltZS5jIGJuX2Vyci5jIGJuX3Nxci5jIGJuX2FzbS5jIFwKLQlibl9yZWNwLmMgYm5fbW9udC5jIGJuX21waS5jIGJuX2V4cDIuYyBibl9nZjJtLmMgYm5fbmlzdC5jIFwKLQlibl9kZXByLmMgYm5feDkzMXAuYyBibl9jb25zdC5jIGJuX29wdC5jCi0KLUxJQk9CSj0JYm5fYWRkLm8gYm5fZGl2Lm8gYm5fZXhwLm8gYm5fbGliLm8gYm5fY3R4Lm8gYm5fbXVsLm8gYm5fbW9kLm8gXAotCWJuX3ByaW50Lm8gYm5fcmFuZC5vIGJuX3NoaWZ0Lm8gYm5fd29yZC5vIGJuX2JsaW5kLm8gXAotCWJuX2tyb24ubyBibl9zcXJ0Lm8gYm5fZ2NkLm8gYm5fcHJpbWUubyBibl9lcnIubyBibl9zcXIubyAkKEJOX0FTTSkgXAotCWJuX3JlY3AubyBibl9tb250Lm8gYm5fbXBpLm8gYm5fZXhwMi5vIGJuX2dmMm0ubyBibl9uaXN0Lm8gXAotCWJuX2RlcHIubyBibl94OTMxcC5vIGJuX2NvbnN0Lm8gYm5fb3B0Lm8KLQotU1JDPSAkKExJQlNSQykKLQotRVhIRUFERVI9IGJuLmgKLUhFQURFUj0JYm5fbGNsLmggYm5fcHJpbWUuaCAkKEVYSEVBREVSKQotCi1BTEw9ICAgICQoR0VORVJBTCkgJChTUkMpICQoSEVBREVSKQotCi10b3A6Ci0JKGNkIC4uLy4uOyAkKE1BS0UpIERJUlM9Y3J5cHRvIFNESVJTPSQoRElSKSBzdWJfYWxsKQotCi1hbGw6CWxpYgotCi1ibl9wcmltZS5oOiBibl9wcmltZS5wbAotCSQoUEVSTCkgYm5fcHJpbWUucGwgPmJuX3ByaW1lLmgKLQotZGl2dGVzdDogZGl2dGVzdC5jIC4uLy4uL2xpYmNyeXB0by5hCi0JY2MgLUkuLi8uLi9pbmNsdWRlIGRpdnRlc3QuYyAtbyBkaXZ0ZXN0IC4uLy4uL2xpYmNyeXB0by5hCi0KLWJuYnVnOiBibmJ1Zy5jIC4uLy4uL2xpYmNyeXB0by5hIHRvcAotCWNjIC1nIC1JLi4vLi4vaW5jbHVkZSBibmJ1Zy5jIC1vIGJuYnVnIC4uLy4uL2xpYmNyeXB0by5hCi0KLWxpYjoJJChMSUJPQkopCi0JJChBUlgpICQoTElCKSAkKExJQk9CSikKLQkkKFJBTkxJQikgJChMSUIpIHx8IGVjaG8gTmV2ZXIgbWluZC4KLQlAdG91Y2ggbGliCi0KLSMgRUxGCi1ibjg2LWVsZi5zOglhc20vYm4tNTg2LnBsIC4uL3Blcmxhc20veDg2YXNtLnBsCi0JKGNkIGFzbTsgJChQRVJMKSBibi01ODYucGwgZWxmICQoQ0ZMQUdTKSA+IC4uLyRAKQotY284Ni1lbGYuczoJYXNtL2NvLTU4Ni5wbCAuLi9wZXJsYXNtL3g4NmFzbS5wbAotCShjZCBhc207ICQoUEVSTCkgY28tNTg2LnBsIGVsZiAkKENGTEFHUykgPiAuLi8kQCkKLW1vODYtZWxmLnM6CWFzbS9tby01ODYucGwgLi4vcGVybGFzbS94ODZhc20ucGwKLQkoY2QgYXNtOyAkKFBFUkwpIG1vLTU4Ni5wbCBlbGYgJChDRkxBR1MpID4gLi4vJEApCi0jIENPRkYKLWJuODYtY29mLnM6IGFzbS9ibi01ODYucGwgLi4vcGVybGFzbS94ODZhc20ucGwKLQkoY2QgYXNtOyAkKFBFUkwpIGJuLTU4Ni5wbCBjb2ZmICQoQ0ZMQUdTKSA+IC4uLyRAKQotY284Ni1jb2YuczogYXNtL2NvLTU4Ni5wbCAuLi9wZXJsYXNtL3g4NmFzbS5wbAotCShjZCBhc207ICQoUEVSTCkgY28tNTg2LnBsIGNvZmYgJChDRkxBR1MpID4gLi4vJEApCi1tbzg2LWNvZi5zOiBhc20vbW8tNTg2LnBsIC4uL3Blcmxhc20veDg2YXNtLnBsCi0JKGNkIGFzbTsgJChQRVJMKSBtby01ODYucGwgY29mZiAkKENGTEFHUykgPiAuLi8kQCkKLSMgYS5vdXQKLWJuODYtb3V0LnM6IGFzbS9ibi01ODYucGwgLi4vcGVybGFzbS94ODZhc20ucGwKLQkoY2QgYXNtOyAkKFBFUkwpIGJuLTU4Ni5wbCBhLm91dCAkKENGTEFHUykgPiAuLi8kQCkKLWNvODYtb3V0LnM6IGFzbS9jby01ODYucGwgLi4vcGVybGFzbS94ODZhc20ucGwKLQkoY2QgYXNtOyAkKFBFUkwpIGNvLTU4Ni5wbCBhLm91dCAkKENGTEFHUykgPiAuLi8kQCkKLW1vODYtb3V0LnM6IGFzbS9tby01ODYucGwgLi4vcGVybGFzbS94ODZhc20ucGwKLQkoY2QgYXNtOyAkKFBFUkwpIG1vLTU4Ni5wbCBhLm91dCAkKENGTEFHUykgPiAuLi8kQCkKLQotc3BhcmN2OC5vOglhc20vc3BhcmN2OC5TCi0JJChDQykgJChDRkxBR1MpIC1jIGFzbS9zcGFyY3Y4LlMKLXNwYXJjdjhwbHVzLm86CWFzbS9zcGFyY3Y4cGx1cy5TCi0JJChDQykgJChDRkxBR1MpIC1jIGFzbS9zcGFyY3Y4cGx1cy5TCi0KLWJuLW1pcHMzLm86CWFzbS9taXBzMy5zCi0JQGlmIFsgIiQoQ0MpIiA9ICJnY2MiIF07IHRoZW4gXAotCQlBQkk9YGV4cHIgIiQoQ0ZMQUdTKSIgOiAiLiotbWFiaT1cKFtuMzI2NF0qXCkiYCAmJiBcCi0JCWFzIC0kJEFCSSAtTyAtbyAkQCBhc20vbWlwczMuczsgXAotCWVsc2UJJChDQykgLWMgJChDRkxBR1MpIC1vICRAIGFzbS9taXBzMy5zOyBmaQotCi14ODZfNjQtZ2NjLm86CWFzbS94ODZfNjQtZ2NjLmMKLQkkKENDKSAkKENGTEFHUykgLWMgLW8gJEAgYXNtL3g4Nl82NC1nY2MuYwoteDg2XzY0LW1vbnQuczoJYXNtL3g4Nl82NC1tb250LnBsCi0JJChQRVJMKSBhc20veDg2XzY0LW1vbnQucGwgJEAKLQotYm4taWE2NC5zOglhc20vaWE2NC5TCi0JJChDQykgJChDRkxBR1MpIC1FIGFzbS9pYTY0LlMgPiAkQAotCi0jIEdOVSBhc3NlbWJsZXIgZmFpbHMgdG8gY29tcGlsZSBQQS1SSVNDMiBtb2R1bGVzLCBpbnNpc3Qgb24gY2FsbGluZwotIyB2ZW5kb3IgYXNzZW1ibGVyLi4uCi1wYS1yaXNjMlcubzogYXNtL3BhLXJpc2MyVy5zCi0JL3Vzci9jY3MvYmluL2FzIC1vIHBhLXJpc2MyVy5vIGFzbS9wYS1yaXNjMlcucwotcGEtcmlzYzIubzogYXNtL3BhLXJpc2MyLnMKLQkvdXNyL2Njcy9iaW4vYXMgLW8gcGEtcmlzYzIubyBhc20vcGEtcmlzYzIucwotCi0jIHBwYyAtIEFJWCwgTGludXgsIE1hY09TIFguLi4KLWxpbnV4X3BwYzMyLnM6IGFzbS9wcGMucGw7CSQoUEVSTCkgJDwgJEAKLWxpbnV4X3BwYzY0LnM6IGFzbS9wcGMucGw7CSQoUEVSTCkgJDwgJEAKLWFpeF9wcGMzMi5zOiBhc20vcHBjLnBsOwkkKFBFUkwpIGFzbS9wcGMucGwgJEAKLWFpeF9wcGM2NC5zOiBhc20vcHBjLnBsOwkkKFBFUkwpIGFzbS9wcGMucGwgJEAKLW9zeF9wcGMzMi5zOiBhc20vcHBjLnBsOwkkKFBFUkwpICQ8ICRACi1vc3hfcHBjNjQuczogYXNtL3BwYy5wbDsJJChQRVJMKSAkPCAkQAotCi1maWxlczoKLQkkKFBFUkwpICQoVE9QKS91dGlsL2ZpbGVzLnBsIE1ha2VmaWxlID4+ICQoVE9QKS9NSU5GTwotCi1saW5rczoKLQlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vaW5jbHVkZS9vcGVuc3NsICQoRVhIRUFERVIpCi0JQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL3Rlc3QgJChURVNUKQotCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9hcHBzICQoQVBQUykKLQotaW5zdGFsbDoKLQlAWyAtbiAiJChJTlNUQUxMVE9QKSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdG9wIE1ha2VmaWxlLi4uCi0JQGhlYWRlcmxpc3Q9IiQoRVhIRUFERVIpIjsgZm9yIGkgaW4gJCRoZWFkZXJsaXN0IDsgXAotCWRvICBcCi0JKGNwICQkaSAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaTsgXAotCWNobW9kIDY0NCAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaSApOyBcCi0JZG9uZTsKLQotZXhwdGVzdDoKLQlybSAtZiBleHB0ZXN0Ci0JZ2NjIC1JLi4vLi4vaW5jbHVkZSAtZzIgLWdnZGIgLW8gZXhwdGVzdCBleHB0ZXN0LmMgLi4vLi4vbGliY3J5cHRvLmEKLQotZGl2OgotCXJtIC1mIGEub3V0Ci0JZ2NjIC1JLi4gLWcgZGl2LmMgLi4vLi4vbGliY3J5cHRvLmEKLQotdGFnczoKLQljdGFncyAkKFNSQykKLQotdGVzdHM6Ci0KLWxpbnQ6Ci0JbGludCAtRExJTlQgJChJTkNMVURFUykgJChTUkMpPmZsdWZmCi0KLWRlcGVuZDoKLQlAWyAtbiAiJChNQUtFREVQRU5EKSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdXBwZXIgTWFrZWZpbGUuLi4KLQkkKE1BS0VERVBFTkQpIC0tICQoQ0ZMQUcpICQoSU5DTFVERVMpICQoREVQRkxBRykgLS0gJChQUk9HUykgJChMSUJTUkMpCi0KLWRjbGVhbjoKLQkkKFBFUkwpIC1wZSAnaWYgKC9eIyBETyBOT1QgREVMRVRFIFRISVMgTElORS8pIHtwcmludDsgZXhpdCgwKTt9JyAkKE1BS0VGSUxFKSA+TWFrZWZpbGUubmV3Ci0JbXYgLWYgTWFrZWZpbGUubmV3ICQoTUFLRUZJTEUpCi0KLWNsZWFuOgotCXJtIC1mICoucyAqLm8gKi5vYmogbGliIHRhZ3MgY29yZSAucHVyZSAubmZzKiAqLm9sZCAqLmJhayBmbHVmZgotCi0jIERPIE5PVCBERUxFVEUgVEhJUyBMSU5FIC0tIG1ha2UgZGVwZW5kIGRlcGVuZHMgb24gaXQuCi0KLWJuX2FkZC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oCi1ibl9hZGQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotYm5fYWRkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotYm5fYWRkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1ibl9hZGQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWJuX2FkZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWJuX2FkZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGJuX2FkZC5jIGJuX2xjbC5oCi1ibl9hc20ubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaAotYm5fYXNtLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWJuX2FzbS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWJuX2FzbS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotYm5fYXNtLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1ibl9hc20ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1ibl9hc20ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBibl9hc20uYyBibl9sY2wuaAotYm5fYmxpbmQubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaAotYm5fYmxpbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotYm5fYmxpbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1ibl9ibGluZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotYm5fYmxpbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWJuX2JsaW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotYm5fYmxpbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBibl9ibGluZC5jIGJuX2xjbC5oCi1ibl9jb25zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotYm5fY29uc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggYm4uaCBibl9jb25zdC5jCi1ibl9jdHgubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaAotYm5fY3R4Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWJuX2N0eC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWJuX2N0eC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotYm5fY3R4Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1ibl9jdHgubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1ibl9jdHgubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBibl9jdHguYyBibl9sY2wuaAotYm5fZGVwci5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oCi1ibl9kZXByLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWJuX2RlcHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1ibl9kZXByLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1ibl9kZXByLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1ibl9kZXByLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1ibl9kZXByLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1ibl9kZXByLm86IC4uL2NyeXB0bGliLmggYm5fZGVwci5jIGJuX2xjbC5oCi1ibl9kaXYubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaAotYm5fZGl2Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWJuX2Rpdi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWJuX2Rpdi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotYm5fZGl2Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1ibl9kaXYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1ibl9kaXYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBibl9kaXYuYyBibl9sY2wuaAotYm5fZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaAotYm5fZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotYm5fZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotYm5fZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi1ibl9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1ibl9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLWJuX2Vyci5vOiBibl9lcnIuYwotYm5fZXhwLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmgKLWJuX2V4cC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1ibl9leHAubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1ibl9leHAubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWJuX2V4cC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotYm5fZXhwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotYm5fZXhwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggYm5fZXhwLmMgYm5fbGNsLmgKLWJuX2V4cDIubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaAotYm5fZXhwMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1ibl9leHAyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotYm5fZXhwMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotYm5fZXhwMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotYm5fZXhwMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWJuX2V4cDIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBibl9leHAyLmMgYm5fbGNsLmgKLWJuX2djZC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oCi1ibl9nY2QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotYm5fZ2NkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotYm5fZ2NkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1ibl9nY2QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWJuX2djZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWJuX2djZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGJuX2djZC5jIGJuX2xjbC5oCi1ibl9nZjJtLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmgKLWJuX2dmMm0ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotYm5fZ2YybS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWJuX2dmMm0ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWJuX2dmMm0ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWJuX2dmMm0ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1ibl9nZjJtLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggYm5fZ2YybS5jIGJuX2xjbC5oCi1ibl9rcm9uLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmgKLWJuX2tyb24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotYm5fa3Jvbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWJuX2tyb24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWJuX2tyb24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWJuX2tyb24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1ibl9rcm9uLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggYm5fa3Jvbi5jIGJuX2xjbC5oCi1ibl9saWIubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaAotYm5fbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWJuX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWJuX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotYm5fbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1ibl9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1ibl9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBibl9sY2wuaCBibl9saWIuYwotYm5fbW9kLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmgKLWJuX21vZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1ibl9tb2QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1ibl9tb2QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWJuX21vZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotYm5fbW9kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotYm5fbW9kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggYm5fbGNsLmggYm5fbW9kLmMKLWJuX21vbnQubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaAotYm5fbW9udC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1ibl9tb250Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotYm5fbW9udC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotYm5fbW9udC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotYm5fbW9udC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWJuX21vbnQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBibl9sY2wuaCBibl9tb250LmMKLWJuX21waS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oCi1ibl9tcGkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotYm5fbXBpLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotYm5fbXBpLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1ibl9tcGkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWJuX21waS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWJuX21waS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGJuX2xjbC5oIGJuX21waS5jCi1ibl9tdWwubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaAotYm5fbXVsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWJuX211bC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWJuX211bC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotYm5fbXVsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1ibl9tdWwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1ibl9tdWwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBibl9sY2wuaCBibl9tdWwuYwotYm5fbmlzdC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oCi1ibl9uaXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWJuX25pc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1ibl9uaXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1ibl9uaXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1ibl9uaXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotYm5fbmlzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGJuX2xjbC5oIGJuX25pc3QuYwotYm5fb3B0Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmgKLWJuX29wdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1ibl9vcHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1ibl9vcHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWJuX29wdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotYm5fb3B0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotYm5fb3B0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggYm5fbGNsLmggYm5fb3B0LmMKLWJuX3ByaW1lLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmgKLWJuX3ByaW1lLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWJuX3ByaW1lLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotYm5fcHJpbWUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWJuX3ByaW1lLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1ibl9wcmltZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotYm5fcHJpbWUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLWJuX3ByaW1lLm86IC4uL2NyeXB0bGliLmggYm5fbGNsLmggYm5fcHJpbWUuYyBibl9wcmltZS5oCi1ibl9wcmludC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oCi1ibl9wcmludC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1ibl9wcmludC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWJuX3ByaW50Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1ibl9wcmludC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotYm5fcHJpbnQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1ibl9wcmludC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGJuX2xjbC5oIGJuX3ByaW50LmMKLWJuX3JhbmQubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaAotYm5fcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1ibl9yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotYm5fcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotYm5fcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotYm5fcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotYm5fcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotYm5fcmFuZC5vOiAuLi9jcnlwdGxpYi5oIGJuX2xjbC5oIGJuX3JhbmQuYwotYm5fcmVjcC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oCi1ibl9yZWNwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWJuX3JlY3AubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1ibl9yZWNwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1ibl9yZWNwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1ibl9yZWNwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotYm5fcmVjcC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGJuX2xjbC5oIGJuX3JlY3AuYwotYm5fc2hpZnQubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaAotYm5fc2hpZnQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotYm5fc2hpZnQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1ibl9zaGlmdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotYm5fc2hpZnQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWJuX3NoaWZ0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotYm5fc2hpZnQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBibl9sY2wuaCBibl9zaGlmdC5jCi1ibl9zcXIubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaAotYm5fc3FyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWJuX3Nxci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWJuX3Nxci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotYm5fc3FyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1ibl9zcXIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1ibl9zcXIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBibl9sY2wuaCBibl9zcXIuYwotYm5fc3FydC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oCi1ibl9zcXJ0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWJuX3NxcnQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1ibl9zcXJ0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1ibl9zcXJ0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1ibl9zcXJ0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotYm5fc3FydC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGJuX2xjbC5oIGJuX3NxcnQuYwotYm5fd29yZC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oCi1ibl93b3JkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWJuX3dvcmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1ibl93b3JkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1ibl93b3JkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1ibl93b3JkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotYm5fd29yZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGJuX2xjbC5oIGJuX3dvcmQuYwotYm5feDkzMXAubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLWJuX3g5MzFwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1ibl94OTMxcC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCBibl94OTMxcC5jCmRpZmYgLS1naXQgYS9jcnlwdG8vYm4vYXNtL2FscGhhLW1vbnQucGwgYi9jcnlwdG8vYm4vYXNtL2FscGhhLW1vbnQucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2EyY2MzMQotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9ibi9hc20vYWxwaGEtbW9udC5wbApAQCAtMCwwICsxLDMxNyBAQAorIyEvdXNyL2Jpbi9lbnYgcGVybAorIworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPiBmb3IgdGhlIE9wZW5TU0wKKyMgcHJvamVjdC4gVGhlIG1vZHVsZSBpcywgaG93ZXZlciwgZHVhbCBsaWNlbnNlZCB1bmRlciBPcGVuU1NMIGFuZAorIyBDUllQVE9HQU1TIGxpY2Vuc2VzIGRlcGVuZGluZyBvbiB3aGVyZSB5b3Ugb2J0YWluIGl0LiBGb3IgZnVydGhlcgorIyBkZXRhaWxzIHNlZSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL35hcHByby9jcnlwdG9nYW1zLy4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMKKyMgT24gMjEyNjQgUlNBIHNpZ24gcGVyZm9ybWFuY2UgaW1wcm92ZXMgYnkgNzAvMzUvMjAvMTUgcGVyY2VudCBmb3IKKyMgNTEyLzEwMjQvMjA0OC80MDk2IGJpdCBrZXkgbGVuZ3Rocy4gVGhpcyBpcyBhZ2FpbnN0IHZlbmRvciBjb21waWxlcgorIyBpbnN0cnVjdGVkIHRvICctdHVuZSBob3N0JyBjb2RlIHdpdGggaW4tbGluZSBhc3NlbWJsZXIuIE90aGVyCisjIGJlbmNobWFya3MgaW1wcm92ZSBieSAxNS0yMCUuIFRvIGFuY2hvciBpdCB0byBzb21ldGhpbmcgZWxzZSwgdGhlCisjIGNvZGUgcHJvdmlkZXMgYXBwcm94aW1hdGVseSB0aGUgc2FtZSBwZXJmb3JtYW5jZSBwZXIgR0h6IGFzIEFNRDY0LgorIyBJLmUuIGlmIHlvdSBjb21wYXJlIDFHSHogMjEyNjQgYW5kIDJHSHogT3B0ZXJvbiwgeW91J2xsIG9ic2VydmUgfjJ4CisjIGRpZmZlcmVuY2UuCisKKyMgaW50IGJuX211bF9tb250KAorJHJwPSJhMCI7CSMgQk5fVUxPTkcgKnJwLAorJGFwPSJhMSI7CSMgY29uc3QgQk5fVUxPTkcgKmFwLAorJGJwPSJhMiI7CSMgY29uc3QgQk5fVUxPTkcgKmJwLAorJG5wPSJhMyI7CSMgY29uc3QgQk5fVUxPTkcgKm5wLAorJG4wPSJhNCI7CSMgY29uc3QgQk5fVUxPTkcgKm4wLAorJG51bT0iYTUiOwkjIGludCBudW0pOworCiskbG8wPSJ0MCI7CiskaGkwPSJ0MSI7CiskbG8xPSJ0MiI7CiskaGkxPSJ0MyI7CiskYWo9InQ0IjsKKyRiaT0idDUiOworJG5qPSJ0NiI7CiskdHA9InQ3IjsKKyRhbG89InQ4IjsKKyRhaGk9InQ5IjsKKyRubG89InQxMCI7CiskbmhpPSJ0MTEiOworJHRqPSJ0MTIiOworJGk9InMzIjsKKyRqPSJzNCI7CiskbTE9InM1IjsKKworJGNvZGU9PDxfX187CisjaW5jbHVkZSA8YXNtLmg+CisjaW5jbHVkZSA8cmVnZGVmLmg+CisKKy50ZXh0CisKKy5zZXQJbm9hdAorLnNldAlub3Jlb3JkZXIKKworLmdsb2JsCWJuX211bF9tb250CisuYWxpZ24JNQorLmVudAlibl9tdWxfbW9udAorYm5fbXVsX21vbnQ6CisJbGRhCXNwLC00MChzcCkKKwlzdHEJcmEsMChzcCkKKwlzdHEJczMsOChzcCkKKwlzdHEJczQsMTYoc3ApCisJc3RxCXM1LDI0KHNwKQorCXN0cQlmcCwzMihzcCkKKwltb3YJc3AsZnAKKwkubWFzawkweDA0MDBmMDAwLC00MAorCS5mcmFtZQlmcCw0MCxyYQorCS5wcm9sb2d1ZSAwCisKKwkuYWxpZ24JNAorCS5zZXQJcmVvcmRlcgorCXNleHRsCSRudW0sJG51bQorCW1vdgkwLHYwCisJY21wbHQJJG51bSw0LEFUCisJYm5lCUFULC5MZXhpdAorCisJbGRxCSRoaTAsMCgkYXApCSMgYXBbMF0KKwlzOGFkZHEJJG51bSwxNixBVAorCWxkcQkkYWosOCgkYXApCisJc3VicQlzcCxBVCxzcAorCWxkcQkkYmksMCgkYnApCSMgYnBbMF0KKwltb3YJLTQwOTYsQVQKKwlsZHEJJG4wLDAoJG4wKQorCWFuZAlzcCxBVCxzcAorCisJbXVscQkkaGkwLCRiaSwkbG8wCisJbGRxCSRoaTEsMCgkbnApCSMgbnBbMF0KKwl1bXVsaAkkaGkwLCRiaSwkaGkwCisJbGRxCSRuaiw4KCRucCkKKworCW11bHEJJGxvMCwkbjAsJG0xCisKKwltdWxxCSRoaTEsJG0xLCRsbzEKKwl1bXVsaAkkaGkxLCRtMSwkaGkxCisKKwlhZGRxCSRsbzEsJGxvMCwkbG8xCisJY21wdWx0CSRsbzEsJGxvMCxBVAorCWFkZHEJJGhpMSxBVCwkaGkxCisKKwltdWxxCSRhaiwkYmksJGFsbworCW1vdgkyLCRqCisJdW11bGgJJGFqLCRiaSwkYWhpCisJbW92CXNwLCR0cAorCisJbXVscQkkbmosJG0xLCRubG8KKwlzOGFkZHEJJGosJGFwLCRhagorCXVtdWxoCSRuaiwkbTEsJG5oaQorCXM4YWRkcQkkaiwkbnAsJG5qCisuYWxpZ24JNAorLkwxc3Q6CisJLnNldAlub3Jlb3JkZXIKKwlsZHEJJGFqLCgkYWopCisJYWRkbAkkaiwxLCRqCisJbGRxCSRuaiwoJG5qKQorCWxkYQkkdHAsOCgkdHApCisKKwlhZGRxCSRhbG8sJGhpMCwkbG8wCisJbXVscQkkYWosJGJpLCRhbG8KKwljbXB1bHQJJGxvMCwkaGkwLEFUCisJYWRkcQkkbmxvLCRoaTEsJGxvMQorCisJbXVscQkkbmosJG0xLCRubG8KKwlhZGRxCSRhaGksQVQsJGhpMAorCWNtcHVsdAkkbG8xLCRoaTEsdjAKKwljbXBsdAkkaiwkbnVtLCR0agorCisJdW11bGgJJGFqLCRiaSwkYWhpCisJYWRkcQkkbmhpLHYwLCRoaTEKKwlhZGRxCSRsbzEsJGxvMCwkbG8xCisJczhhZGRxCSRqLCRhcCwkYWoKKworCXVtdWxoCSRuaiwkbTEsJG5oaQorCWNtcHVsdAkkbG8xLCRsbzAsdjAKKwlhZGRxCSRoaTEsdjAsJGhpMQorCXM4YWRkcQkkaiwkbnAsJG5qCisKKwlzdHEJJGxvMSwtOCgkdHApCisJbm9wCisJdW5vcAorCWJuZQkkdGosLkwxc3QKKwkuc2V0CXJlb3JkZXIKKworCWFkZHEJJGFsbywkaGkwLCRsbzAKKwlhZGRxCSRubG8sJGhpMSwkbG8xCisJY21wdWx0CSRsbzAsJGhpMCxBVAorCWNtcHVsdAkkbG8xLCRoaTEsdjAKKwlhZGRxCSRhaGksQVQsJGhpMAorCWFkZHEJJG5oaSx2MCwkaGkxCisKKwlhZGRxCSRsbzEsJGxvMCwkbG8xCisJY21wdWx0CSRsbzEsJGxvMCx2MAorCWFkZHEJJGhpMSx2MCwkaGkxCisKKwlzdHEJJGxvMSwwKCR0cCkKKworCWFkZHEJJGhpMSwkaGkwLCRoaTEKKwljbXB1bHQJJGhpMSwkaGkwLEFUCisJc3RxCSRoaTEsOCgkdHApCisJc3RxCUFULDE2KCR0cCkKKworCW1vdgkxLCRpCisuYWxpZ24JNAorLkxvdXRlcjoKKwlzOGFkZHEJJGksJGJwLCRiaQorCWxkcQkkaGkwLCgkYXApCisJbGRxCSRhaiw4KCRhcCkKKwlsZHEJJGJpLCgkYmkpCisJbGRxCSRoaTEsKCRucCkKKwlsZHEJJG5qLDgoJG5wKQorCWxkcQkkdGosKHNwKQorCisJbXVscQkkaGkwLCRiaSwkbG8wCisJdW11bGgJJGhpMCwkYmksJGhpMAorCisJYWRkcQkkbG8wLCR0aiwkbG8wCisJY21wdWx0CSRsbzAsJHRqLEFUCisJYWRkcQkkaGkwLEFULCRoaTAKKworCW11bHEJJGxvMCwkbjAsJG0xCisKKwltdWxxCSRoaTEsJG0xLCRsbzEKKwl1bXVsaAkkaGkxLCRtMSwkaGkxCisKKwlhZGRxCSRsbzEsJGxvMCwkbG8xCisJY21wdWx0CSRsbzEsJGxvMCxBVAorCW1vdgkyLCRqCisJYWRkcQkkaGkxLEFULCRoaTEKKworCW11bHEJJGFqLCRiaSwkYWxvCisJbW92CXNwLCR0cAorCXVtdWxoCSRhaiwkYmksJGFoaQorCisJbXVscQkkbmosJG0xLCRubG8KKwlzOGFkZHEJJGosJGFwLCRhagorCXVtdWxoCSRuaiwkbTEsJG5oaQorLmFsaWduCTQKKy5MaW5uZXI6CisJLnNldAlub3Jlb3JkZXIKKwlsZHEJJHRqLDgoJHRwKQkjTDAKKwlub3AJCQkjVTEKKwlsZHEJJGFqLCgkYWopCSNMMQorCXM4YWRkcQkkaiwkbnAsJG5qCSNVMAorCisJbGRxCSRuaiwoJG5qKQkjTDAKKwlub3AJCQkjVTEKKwlhZGRxCSRhbG8sJGhpMCwkbG8wCSNMMQorCWxkYQkkdHAsOCgkdHApCisKKwltdWxxCSRhaiwkYmksJGFsbwkjVTEKKwljbXB1bHQJJGxvMCwkaGkwLEFUCSNMMAorCWFkZHEJJG5sbywkaGkxLCRsbzEJI0wxCisJYWRkbAkkaiwxLCRqCisKKwltdWxxCSRuaiwkbTEsJG5sbwkjVTEKKwlhZGRxCSRhaGksQVQsJGhpMAkjTDAKKwlhZGRxCSRsbzAsJHRqLCRsbzAJI0wxCisJY21wdWx0CSRsbzEsJGhpMSx2MAkjVTAKKworCXVtdWxoCSRhaiwkYmksJGFoaQkjVTEKKwljbXB1bHQJJGxvMCwkdGosQVQJI0wwCisJYWRkcQkkbG8xLCRsbzAsJGxvMQkjTDEKKwlhZGRxCSRuaGksdjAsJGhpMQkjVTAKKworCXVtdWxoCSRuaiwkbTEsJG5oaQkjVTEKKwlzOGFkZHEJJGosJGFwLCRhagkjTDAKKwljbXB1bHQJJGxvMSwkbG8wLHYwCSNMMQorCWNtcGx0CSRqLCRudW0sJHRqCSNVMAkjIGJvcnJvdyAkdGoKKworCWFkZHEJJGhpMCxBVCwkaGkwCSNMMAorCWFkZHEJJGhpMSx2MCwkaGkxCSNVMQorCXN0cQkkbG8xLC04KCR0cCkJI0wxCisJYm5lCSR0aiwuTGlubmVyCSNVMAorCS5zZXQJcmVvcmRlcgorCisJbGRxCSR0aiw4KCR0cCkKKwlhZGRxCSRhbG8sJGhpMCwkbG8wCisJYWRkcQkkbmxvLCRoaTEsJGxvMQorCWNtcHVsdAkkbG8wLCRoaTAsQVQKKwljbXB1bHQJJGxvMSwkaGkxLHYwCisJYWRkcQkkYWhpLEFULCRoaTAKKwlhZGRxCSRuaGksdjAsJGhpMQorCisJYWRkcQkkbG8wLCR0aiwkbG8wCisJY21wdWx0CSRsbzAsJHRqLEFUCisJYWRkcQkkaGkwLEFULCRoaTAKKworCWxkcQkkdGosMTYoJHRwKQorCWFkZHEJJGxvMSwkbG8wLCRqCisJY21wdWx0CSRqLCRsbzAsdjAKKwlhZGRxCSRoaTEsdjAsJGhpMQorCisJYWRkcQkkaGkxLCRoaTAsJGxvMQorCXN0cQkkaiwoJHRwKQorCWNtcHVsdAkkbG8xLCRoaTAsJGhpMQorCWFkZHEJJGxvMSwkdGosJGxvMQorCWNtcHVsdAkkbG8xLCR0aixBVAorCWFkZGwJJGksMSwkaQorCWFkZHEJJGhpMSxBVCwkaGkxCisJc3RxCSRsbzEsOCgkdHApCisJY21wbHQJJGksJG51bSwkdGoJIyBib3Jyb3cgJHRqCisJc3RxCSRoaTEsMTYoJHRwKQorCWJuZQkkdGosLkxvdXRlcgorDAorCXM4YWRkcQkkbnVtLHNwLCR0agkjICZ0cFtudW1dCisJbW92CSRycCwkYnAJCSMgcHV0IHJwIGFzaWRlCisJbW92CXNwLCR0cAorCW1vdglzcCwkYXAKKwltb3YJMCwkaGkwCQkjIGNsZWFyIGJvcnJvdyBiaXQKKworLmFsaWduCTQKKy5Mc3ViOglsZHEJJGxvMCwoJHRwKQorCWxkcQkkbG8xLCgkbnApCisJbGRhCSR0cCw4KCR0cCkKKwlsZGEJJG5wLDgoJG5wKQorCXN1YnEJJGxvMCwkbG8xLCRsbzEJIyB0cFtpXS1ucFtpXQorCWNtcHVsdAkkbG8wLCRsbzEsQVQKKwlzdWJxCSRsbzEsJGhpMCwkbG8wCisJY21wdWx0CSRsbzEsJGxvMCwkaGkwCisJb3IJJGhpMCxBVCwkaGkwCisJc3RxCSRsbzAsKCRycCkKKwljbXB1bHQJJHRwLCR0aix2MAorCWxkYQkkcnAsOCgkcnApCisJYm5lCXYwLC5Mc3ViCisKKwlzdWJxCSRoaTEsJGhpMCwkaGkwCSMgaGFuZGxlIHVwbW9zdCBvdmVyZmxvdyBiaXQKKwltb3YJc3AsJHRwCisJbW92CSRicCwkcnAJCSMgcmVzdG9yZSBycAorCisJYW5kCXNwLCRoaTAsJGFwCisJYmljCSRicCwkaGkwLCRicAorCWJpcwkkYnAsJGFwLCRhcAkjIGFwPWJvcnJvdz90cDpycAorCisuYWxpZ24JNAorLkxjb3B5OglsZHEJJGFqLCgkYXApCSMgY29weSBvciBpbi1wbGFjZSByZWZyZXNoCisJbGRhCSR0cCw4KCR0cCkKKwlsZGEJJHJwLDgoJHJwKQorCWxkYQkkYXAsOCgkYXApCisJc3RxCXplcm8sLTgoJHRwKQkjIHphcCB0cAorCWNtcHVsdAkkdHAsJHRqLEFUCisJc3RxCSRhaiwtOCgkcnApCisJYm5lCUFULC5MY29weQorCW1vdgkxLHYwCisKKy5MZXhpdDoKKwkuc2V0CW5vcmVvcmRlcgorCW1vdglmcCxzcAorCS8qbGRxCXJhLDAoc3ApKi8KKwlsZHEJczMsOChzcCkKKwlsZHEJczQsMTYoc3ApCisJbGRxCXM1LDI0KHNwKQorCWxkcQlmcCwzMihzcCkKKwlsZGEJc3AsNDAoc3ApCisJcmV0CShyYSkKKy5lbmQJYm5fbXVsX21vbnQKKy5yZGF0YQorLmFzY2lpegkiTW9udGdvbWVyeSBNdWx0aXBsaWNhdGlvbiBmb3IgQWxwaGEsIENSWVBUT0dBTVMgYnkgPGFwcHJvXEBvcGVuc3NsLm9yZz4iCitfX18KKworcHJpbnQgJGNvZGU7CitjbG9zZSBTVERPVVQ7CmRpZmYgLS1naXQgYS9jcnlwdG8vMC45LjktZGV2L2JuL2FybXY0LW1vbnQucGwgYi9jcnlwdG8vYm4vYXNtL2FybXY0LW1vbnQucGwKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gY3J5cHRvLzAuOS45LWRldi9ibi9hcm12NC1tb250LnBsCnJlbmFtZSB0byBjcnlwdG8vYm4vYXNtL2FybXY0LW1vbnQucGwKaW5kZXggMDVkNWRjMS4uMTRlMGQyZCAxMDA2NDQKLS0tIGEvY3J5cHRvLzAuOS45LWRldi9ibi9hcm12NC1tb250LnBsCisrKyBiL2NyeXB0by9ibi9hc20vYXJtdjQtbW9udC5wbApAQCAtMTkzLDYgKzE5Myw3IEBACiAJYngJbHIJCQlAIGludGVyb3BlcmFibGUgd2l0aCBUaHVtYiBJU0E6LSkKIC5zaXplCWJuX211bF9tb250LC4tYm5fbXVsX21vbnQKIC5hc2NpegkiTW9udGdvbWVyeSBtdWx0aXBsaWNhdGlvbiBmb3IgQVJNdjQsIENSWVBUT0dBTVMgYnkgPGFwcHJvXEBvcGVuc3NsLm9yZz4iCisuYWxpZ24JMgogX19fCiAKICRjb2RlID1+IHMvXGJieFxzK2xyXGIvLndvcmRcdDB4ZTEyZmZmMWUvZ207CSMgbWFrZSBpdCBwb3NzaWJsZSB0byBjb21waWxlIHdpdGggLW1hcmNoPWFybXY0CmRpZmYgLS1naXQgYS9jcnlwdG8vMC45LjktZGV2L2JuL2FybXY0LW1vbnQucyBiL2NyeXB0by9ibi9hc20vYXJtdjQtbW9udC5zCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBjcnlwdG8vMC45LjktZGV2L2JuL2FybXY0LW1vbnQucwpyZW5hbWUgdG8gY3J5cHRvL2JuL2FzbS9hcm12NC1tb250LnMKZGlmZiAtLWdpdCBhL2NyeXB0by9ibi9hc20vYm4tNTg2LnBsIGIvY3J5cHRvL2JuL2FzbS9ibi01ODYucGwKaW5kZXggMjZjMjY4NS4uMzMyZWYzZSAxMDA2NDQKLS0tIGEvY3J5cHRvL2JuL2FzbS9ibi01ODYucGwKKysrIGIvY3J5cHRvL2JuL2FzbS9ibi01ODYucGwKQEAgLTEsNiArMSw3IEBACiAjIS91c3IvbG9jYWwvYmluL3BlcmwKIAotcHVzaChASU5DLCJwZXJsYXNtIiwiLi4vLi4vcGVybGFzbSIpOworJDAgPX4gbS8oLipbXC9cXF0pW15cL1xcXSskLzsgJGRpcj0kMTsKK3B1c2goQElOQywiJHtkaXJ9IiwiJHtkaXJ9Li4vLi4vcGVybGFzbSIpOwogcmVxdWlyZSAieDg2YXNtLnBsIjsKIAogJmFzbV9pbml0KCRBUkdWWzBdLCQwKTsKQEAgLTI0LDM4ICsyNSwyNSBAQAogCXsKIAlsb2NhbCgkbmFtZSk9QF87CiAKLQkmZnVuY3Rpb25fYmVnaW4oJG5hbWUsJHNzZTI/IkVYVFJOXHRfT1BFTlNTTF9pYTMyY2FwX1A6RFdPUkQiOiIiKTsKKwkmZnVuY3Rpb25fYmVnaW5fQigkbmFtZSwkc3NlMj8iRVhUUk5cdF9PUEVOU1NMX2lhMzJjYXBfUDpEV09SRCI6IiIpOwogCi0JJmNvbW1lbnQoIiIpOwotCSRMb3c9ImVheCI7Ci0JJEhpZ2g9ImVkeCI7Ci0JJGE9ImVieCI7Ci0JJHc9ImVicCI7Ci0JJHI9ImVkaSI7Ci0JJGM9ImVzaSI7Ci0KLQkmeG9yKCRjLCRjKTsJCSMgY2xlYXIgY2FycnkKLQkmbW92KCRyLCZ3cGFyYW0oMCkpOwkjCi0KLQkmbW92KCJlY3giLCZ3cGFyYW0oMikpOwkjCi0JJm1vdigkYSwmd3BhcmFtKDEpKTsJIwotCi0JJmFuZCgiZWN4IiwweGZmZmZmZmY4KTsJIyBudW0gLyA4Ci0JJm1vdigkdywmd3BhcmFtKDMpKTsJIwotCi0JJnB1c2goImVjeCIpOwkJIyBVcCB0aGUgc3RhY2sgZm9yIGEgdG1wIHZhcmlhYmxlCi0KLQkmanooJmxhYmVsKCJtYXdfZmluaXNoIikpOworCSRyPSJlYXgiOworCSRhPSJlZHgiOworCSRjPSJlY3giOwogCiAJaWYgKCRzc2UyKSB7CiAJCSZwaWNtZXVwKCJlYXgiLCJPUEVOU1NMX2lhMzJjYXBfUCIpOwogCQkmYnQoJkRXUCgwLCJlYXgiKSwyNik7Ci0JCSZqbmMoJmxhYmVsKCJtYXdfbG9vcCIpKTsKKwkJJmpuYygmbGFiZWwoIm1hd19ub25fc3NlMiIpKTsKIAotCQkmbW92ZCgibW0wIiwkdyk7CQkjIG1tMCA9IHcKKwkJJm1vdigkciwmd3BhcmFtKDApKTsKKwkJJm1vdigkYSwmd3BhcmFtKDEpKTsKKwkJJm1vdigkYywmd3BhcmFtKDIpKTsKKwkJJm1vdmQoIm1tMCIsJndwYXJhbSgzKSk7CSMgbW0wID0gdwogCQkmcHhvcigibW0xIiwibW0xIik7CQkjIG1tMSA9IGNhcnJ5X2luCi0KLQkJJnNldF9sYWJlbCgibWF3X3NzZTJfbG9vcCIsMCk7CisJCSZqbXAoJmxhYmVsKCJtYXdfc3NlMl9lbnRyeSIpKTsKKwkJCisJJnNldF9sYWJlbCgibWF3X3NzZTJfdW5yb2xsZWQiLDE2KTsKIAkJJm1vdmQoIm1tMyIsJkRXUCgwLCRyLCIiLDApKTsJIyBtbTMgPSByWzBdCiAJCSZwYWRkcSgibW0xIiwibW0zIik7CQkjIG1tMSA9IGNhcnJ5X2luICsgclswXQogCQkmbW92ZCgibW0yIiwmRFdQKDAsJGEsIiIsMCkpOwkjIG1tMiA9IGFbMF0KQEAgLTExMiw0MiArMTAwLDgyIEBACiAJCSZwc3JscSgibW0xIiwzMik7CQkjIG1tMSA9IGNhcnJ5NgogCQkmcGFkZHEoIm1tMSIsIm1tMyIpOwkJIyBtbTEgPSBjYXJyeTYgKyByWzddICsgdyphWzddCiAJCSZtb3ZkKCZEV1AoMjgsJHIsIiIsMCksIm1tMSIpOwotCQkmYWRkKCRyLDMyKTsKKwkJJmxlYSgkciwmRFdQKDMyLCRyKSk7CiAJCSZwc3JscSgibW0xIiwzMik7CQkjIG1tMSA9IGNhcnJ5X291dAogCi0JCSZzdWIoImVjeCIsOCk7CisJCSZzdWIoJGMsOCk7CisJCSZqeigmbGFiZWwoIm1hd19zc2UyX2V4aXQiKSk7CisJJnNldF9sYWJlbCgibWF3X3NzZTJfZW50cnkiKTsKKwkJJnRlc3QoJGMsMHhmZmZmZmZmOCk7CisJCSZqbnooJmxhYmVsKCJtYXdfc3NlMl91bnJvbGxlZCIpKTsKKworCSZzZXRfbGFiZWwoIm1hd19zc2UyX2xvb3AiLDQpOworCQkmbW92ZCgibW0yIiwmRFdQKDAsJGEpKTsJIyBtbTIgPSBhW2ldCisJCSZtb3ZkKCJtbTMiLCZEV1AoMCwkcikpOwkjIG1tMyA9IHJbaV0KKwkJJnBtdWx1ZHEoIm1tMiIsIm1tMCIpOwkJIyBhW2ldICo9IHcKKwkJJmxlYSgkYSwmRFdQKDQsJGEpKTsKKwkJJnBhZGRxKCJtbTEiLCJtbTMiKTsJCSMgY2FycnkgKz0gcltpXQorCQkmcGFkZHEoIm1tMSIsIm1tMiIpOwkJIyBjYXJyeSArPSBhW2ldKncKKwkJJm1vdmQoJkRXUCgwLCRyKSwibW0xIik7CSMgcltpXSA9IGNhcnJ5X2xvdworCQkmc3ViKCRjLDEpOworCQkmcHNybHEoIm1tMSIsMzIpOwkJIyBjYXJyeSA9IGNhcnJ5X2hpZ2gKKwkJJmxlYSgkciwmRFdQKDQsJHIpKTsKIAkJJmpueigmbGFiZWwoIm1hd19zc2UyX2xvb3AiKSk7Ci0KLQkJJm1vdmQoJGMsIm1tMSIpOwkJIyBjID0gY2Fycnlfb3V0CisJJnNldF9sYWJlbCgibWF3X3NzZTJfZXhpdCIpOworCQkmbW92ZCgiZWF4IiwibW0xIik7CQkjIGMgPSBjYXJyeV9vdXQKIAkJJmVtbXMoKTsKKwkJJnJldCgpOwogCi0JCSZqbXAoJmxhYmVsKCJtYXdfZmluaXNoIikpOworCSZzZXRfbGFiZWwoIm1hd19ub25fc3NlMiIsMTYpOwogCX0KIAotCSZzZXRfbGFiZWwoIm1hd19sb29wIiwwKTsKKwkjIGZ1bmN0aW9uX2JlZ2luIHByb2xvZ3VlCisJJnB1c2goImVicCIpOworCSZwdXNoKCJlYngiKTsKKwkmcHVzaCgiZXNpIik7CisJJnB1c2goImVkaSIpOwogCi0JJm1vdigmc3d0bXAoMCksImVjeCIpOwkjCisJJmNvbW1lbnQoIiIpOworCSRMb3c9ImVheCI7CisJJEhpZ2g9ImVkeCI7CisJJGE9ImVieCI7CisJJHc9ImVicCI7CisJJHI9ImVkaSI7CisJJGM9ImVzaSI7CisKKwkmeG9yKCRjLCRjKTsJCSMgY2xlYXIgY2FycnkKKwkmbW92KCRyLCZ3cGFyYW0oMCkpOwkjCisKKwkmbW92KCJlY3giLCZ3cGFyYW0oMikpOwkjCisJJm1vdigkYSwmd3BhcmFtKDEpKTsJIworCisJJmFuZCgiZWN4IiwweGZmZmZmZmY4KTsJIyBudW0gLyA4CisJJm1vdigkdywmd3BhcmFtKDMpKTsJIworCisJJnB1c2goImVjeCIpOwkJIyBVcCB0aGUgc3RhY2sgZm9yIGEgdG1wIHZhcmlhYmxlCisKKwkmanooJmxhYmVsKCJtYXdfZmluaXNoIikpOworCisJJnNldF9sYWJlbCgibWF3X2xvb3AiLDE2KTsKIAogCWZvciAoJGk9MDsgJGk8MzI7ICRpKz00KQogCQl7CiAJCSZjb21tZW50KCJSb3VuZCAkaSIpOwogCi0JCSAmbW92KCJlYXgiLCZEV1AoJGksJGEsIiIsMCkpOyAJIyAqYQorCQkgJm1vdigiZWF4IiwmRFdQKCRpLCRhKSk7IAkjICphCiAJCSZtdWwoJHcpOwkJCSMgKmEgKiB3Ci0JCSZhZGQoImVheCIsJGMpOwkJIyBMKHQpKz0gKnIKLQkJICZtb3YoJGMsJkRXUCgkaSwkciwiIiwwKSk7CSMgTCh0KSs9ICpyCisJCSZhZGQoImVheCIsJGMpOwkJCSMgTCh0KSs9IGMKIAkJJmFkYygiZWR4IiwwKTsJCQkjIEgodCkrPWNhcnJ5Ci0JCSAmYWRkKCJlYXgiLCRjKTsJCSMgTCh0KSs9YworCQkgJmFkZCgiZWF4IiwmRFdQKCRpLCRyKSk7CSMgTCh0KSs9ICpyCiAJCSZhZGMoImVkeCIsMCk7CQkJIyBIKHQpKz1jYXJyeQotCQkgJm1vdigmRFdQKCRpLCRyLCIiLDApLCJlYXgiKTsJIyAqcj0gTCh0KTsKKwkJICZtb3YoJkRXUCgkaSwkciksImVheCIpOwkjICpyPSBMKHQpOwogCQkmbW92KCRjLCJlZHgiKTsJCQkjIGM9ICBIKHQpOwogCQl9CiAKIAkmY29tbWVudCgiIik7Ci0JJm1vdigiZWN4Iiwmc3d0bXAoMCkpOwkjCi0JJmFkZCgkYSwzMik7Ci0JJmFkZCgkciwzMik7CiAJJnN1YigiZWN4Iiw4KTsKKwkmbGVhKCRhLCZEV1AoMzIsJGEpKTsKKwkmbGVhKCRyLCZEV1AoMzIsJHIpKTsKIAkmam56KCZsYWJlbCgibWF3X2xvb3AiKSk7CiAKIAkmc2V0X2xhYmVsKCJtYXdfZmluaXNoIiwwKTsKQEAgLTE2MCwxNiArMTg4LDE1IEBACiAJZm9yICgkaT0wOyAkaTw3OyAkaSsrKQogCQl7CiAJCSZjb21tZW50KCJUYWlsIFJvdW5kICRpIik7Ci0JCSAmbW92KCJlYXgiLCZEV1AoJGkqNCwkYSwiIiwwKSk7IyAqYQorCQkgJm1vdigiZWF4IiwmRFdQKCRpKjQsJGEpKTsJIyAqYQogCQkmbXVsKCR3KTsJCQkjICphICogdwogCQkmYWRkKCJlYXgiLCRjKTsJCQkjIEwodCkrPWMKLQkJICZtb3YoJGMsJkRXUCgkaSo0LCRyLCIiLDApKTsJIyBMKHQpKz0gKnIKIAkJJmFkYygiZWR4IiwwKTsJCQkjIEgodCkrPWNhcnJ5Ci0JCSAmYWRkKCJlYXgiLCRjKTsKKwkJICZhZGQoImVheCIsJkRXUCgkaSo0LCRyKSk7CSMgTCh0KSs9ICpyCiAJCSZhZGMoImVkeCIsMCk7CQkJIyBIKHQpKz1jYXJyeQogCQkgJmRlYygiZWN4IikgaWYgKCRpICE9IDctMSk7Ci0JCSZtb3YoJkRXUCgkaSo0LCRyLCIiLDApLCJlYXgiKTsJIyAqcj0gTCh0KTsKLQkJICZtb3YoJGMsImVkeCIpOwkJCSMgYz0gIEgodCk7CisJCSZtb3YoJkRXUCgkaSo0LCRyKSwiZWF4Iik7CSMgKnI9IEwodCk7CisJCSAmbW92KCRjLCJlZHgiKTsJCSMgYz0gIEgodCk7CiAJCSZqeigmbGFiZWwoIm1hd19lbmQiKSkgaWYgKCRpICE9IDctMSk7CiAJCX0KIAkmc2V0X2xhYmVsKCJtYXdfZW5kIiwwKTsKQEAgLTE4NCw3ICsyMTEsNDUgQEAKIAl7CiAJbG9jYWwoJG5hbWUpPUBfOwogCi0JJmZ1bmN0aW9uX2JlZ2luKCRuYW1lLCIiKTsKKwkmZnVuY3Rpb25fYmVnaW5fQigkbmFtZSwkc3NlMj8iRVhUUk5cdF9PUEVOU1NMX2lhMzJjYXBfUDpEV09SRCI6IiIpOworCisJJHI9ImVheCI7CisJJGE9ImVkeCI7CisJJGM9ImVjeCI7CisKKwlpZiAoJHNzZTIpIHsKKwkJJnBpY21ldXAoImVheCIsIk9QRU5TU0xfaWEzMmNhcF9QIik7CisJCSZidCgmRFdQKDAsImVheCIpLDI2KTsKKwkJJmpuYygmbGFiZWwoIm13X25vbl9zc2UyIikpOworCisJCSZtb3YoJHIsJndwYXJhbSgwKSk7CisJCSZtb3YoJGEsJndwYXJhbSgxKSk7CisJCSZtb3YoJGMsJndwYXJhbSgyKSk7CisJCSZtb3ZkKCJtbTAiLCZ3cGFyYW0oMykpOwkjIG1tMCA9IHcKKwkJJnB4b3IoIm1tMSIsIm1tMSIpOwkJIyBtbTEgPSBjYXJyeSA9IDAKKworCSZzZXRfbGFiZWwoIm13X3NzZTJfbG9vcCIsMTYpOworCQkmbW92ZCgibW0yIiwmRFdQKDAsJGEpKTsJIyBtbTIgPSBhW2ldCisJCSZwbXVsdWRxKCJtbTIiLCJtbTAiKTsJCSMgYVtpXSAqPSB3CisJCSZsZWEoJGEsJkRXUCg0LCRhKSk7CisJCSZwYWRkcSgibW0xIiwibW0yIik7CQkjIGNhcnJ5ICs9IGFbaV0qdworCQkmbW92ZCgmRFdQKDAsJHIpLCJtbTEiKTsJIyByW2ldID0gY2FycnlfbG93CisJCSZzdWIoJGMsMSk7CisJCSZwc3JscSgibW0xIiwzMik7CQkjIGNhcnJ5ID0gY2FycnlfaGlnaAorCQkmbGVhKCRyLCZEV1AoNCwkcikpOworCQkmam56KCZsYWJlbCgibXdfc3NlMl9sb29wIikpOworCisJCSZtb3ZkKCJlYXgiLCJtbTEiKTsJCSMgcmV0dXJuIGNhcnJ5CisJCSZlbW1zKCk7CisJCSZyZXQoKTsKKwkmc2V0X2xhYmVsKCJtd19ub25fc3NlMiIsMTYpOworCX0KKworCSMgZnVuY3Rpb25fYmVnaW4gcHJvbG9ndWUKKwkmcHVzaCgiZWJwIik7CisJJnB1c2goImVieCIpOworCSZwdXNoKCJlc2kiKTsKKwkmcHVzaCgiZWRpIik7CiAKIAkmY29tbWVudCgiIik7CiAJJExvdz0iZWF4IjsKQEAgLTI1Nyw3ICszMjIsNDAgQEAKIAl7CiAJbG9jYWwoJG5hbWUpPUBfOwogCi0JJmZ1bmN0aW9uX2JlZ2luKCRuYW1lLCIiKTsKKwkmZnVuY3Rpb25fYmVnaW5fQigkbmFtZSwkc3NlMj8iRVhUUk5cdF9PUEVOU1NMX2lhMzJjYXBfUDpEV09SRCI6IiIpOworCisJJHI9ImVheCI7CisJJGE9ImVkeCI7CisJJGM9ImVjeCI7CisKKwlpZiAoJHNzZTIpIHsKKwkJJnBpY21ldXAoImVheCIsIk9QRU5TU0xfaWEzMmNhcF9QIik7CisJCSZidCgmRFdQKDAsImVheCIpLDI2KTsKKwkJJmpuYygmbGFiZWwoInNxcl9ub25fc3NlMiIpKTsKKworCQkmbW92KCRyLCZ3cGFyYW0oMCkpOworCQkmbW92KCRhLCZ3cGFyYW0oMSkpOworCQkmbW92KCRjLCZ3cGFyYW0oMikpOworCisJJnNldF9sYWJlbCgic3FyX3NzZTJfbG9vcCIsMTYpOworCQkmbW92ZCgibW0wIiwmRFdQKDAsJGEpKTsJIyBtbTAgPSBhW2ldCisJCSZwbXVsdWRxKCJtbTAiLCJtbTAiKTsJCSMgYVtpXSAqPSBhW2ldCisJCSZsZWEoJGEsJkRXUCg0LCRhKSk7CQkjIGErKworCQkmbW92cSgmUVdQKDAsJHIpLCJtbTAiKTsJIyByW2ldID0gYVtpXSphW2ldCisJCSZzdWIoJGMsMSk7CisJCSZsZWEoJHIsJkRXUCg4LCRyKSk7CQkjIHIgKz0gMgorCQkmam56KCZsYWJlbCgic3FyX3NzZTJfbG9vcCIpKTsKKworCQkmZW1tcygpOworCQkmcmV0KCk7CisJJnNldF9sYWJlbCgic3FyX25vbl9zc2UyIiwxNik7CisJfQorCisJIyBmdW5jdGlvbl9iZWdpbiBwcm9sb2d1ZQorCSZwdXNoKCJlYnAiKTsKKwkmcHVzaCgiZWJ4Iik7CisJJnB1c2goImVzaSIpOworCSZwdXNoKCJlZGkiKTsKIAogCSZjb21tZW50KCIiKTsKIAkkcj0iZXNpIjsKQEAgLTMxMywxMiArNDExLDEzIEBACiAJewogCWxvY2FsKCRuYW1lKT1AXzsKIAotCSZmdW5jdGlvbl9iZWdpbigkbmFtZSwiIik7CisJJmZ1bmN0aW9uX2JlZ2luX0IoJG5hbWUsIiIpOwogCSZtb3YoImVkeCIsJndwYXJhbSgwKSk7CSMKIAkmbW92KCJlYXgiLCZ3cGFyYW0oMSkpOwkjCi0JJm1vdigiZWJ4Iiwmd3BhcmFtKDIpKTsJIwotCSZkaXYoImVieCIpOwotCSZmdW5jdGlvbl9lbmQoJG5hbWUpOworCSZtb3YoImVjeCIsJndwYXJhbSgyKSk7CSMKKwkmZGl2KCJlY3giKTsKKwkmcmV0KCk7CisJJmZ1bmN0aW9uX2VuZF9CKCRuYW1lKTsKIAl9CiAKIHN1YiBibl9hZGRfd29yZHMKZGlmZiAtLWdpdCBhL2NyeXB0by9ibi9hc20vY28tNTg2LnBsIGIvY3J5cHRvL2JuL2FzbS9jby01ODYucGwKaW5kZXggNWQ5NjJjYi4uNTcxMDFhNiAxMDA2NDQKLS0tIGEvY3J5cHRvL2JuL2FzbS9jby01ODYucGwKKysrIGIvY3J5cHRvL2JuL2FzbS9jby01ODYucGwKQEAgLTEsNiArMSw3IEBACiAjIS91c3IvbG9jYWwvYmluL3BlcmwKIAotcHVzaChASU5DLCJwZXJsYXNtIiwiLi4vLi4vcGVybGFzbSIpOworJDAgPX4gbS8oLipbXC9cXF0pW15cL1xcXSskLzsgJGRpcj0kMTsKK3B1c2goQElOQywiJHtkaXJ9IiwiJHtkaXJ9Li4vLi4vcGVybGFzbSIpOwogcmVxdWlyZSAieDg2YXNtLnBsIjsKIAogJmFzbV9pbml0KCRBUkdWWzBdLCQwKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9ibi9hc20vbWlwczMtbW9udC5wbCBiL2NyeXB0by9ibi9hc20vbWlwczMtbW9udC5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjkxNTZlCi0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL2JuL2FzbS9taXBzMy1tb250LnBsCkBAIC0wLDAgKzEsMzI3IEBACisjIS91c3IvYmluL2VudiBwZXJsCisjCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFdyaXR0ZW4gYnkgQW5keSBQb2x5YWtvdiA8YXBwcm9AZnkuY2hhbG1lcnMuc2U+IGZvciB0aGUgT3BlblNTTAorIyBwcm9qZWN0LiBUaGUgbW9kdWxlIGlzLCBob3dldmVyLCBkdWFsIGxpY2Vuc2VkIHVuZGVyIE9wZW5TU0wgYW5kCisjIENSWVBUT0dBTVMgbGljZW5zZXMgZGVwZW5kaW5nIG9uIHdoZXJlIHlvdSBvYnRhaW4gaXQuIEZvciBmdXJ0aGVyCisjIGRldGFpbHMgc2VlIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvfmFwcHJvL2NyeXB0b2dhbXMvLgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjIFRoaXMgbW9kdWxlIGRvZXNuJ3QgcHJlc2VudCBkaXJlY3QgaW50ZXJlc3QgZm9yIE9wZW5TU0wsIGJlY2F1c2UgaXQKKyMgZG9lc24ndCBwcm92aWRlIGJldHRlciBwZXJmb3JtYW5jZSBmb3IgbG9uZ2VyIGtleXMuIFdoaWxlIDUxMi1iaXQKKyMgUlNBIHByaXZhdGUga2V5IG9wZXJhdGlvbnMgYXJlIDQwJSBmYXN0ZXIsIDEwMjQtYml0IG9uZXMgYXJlIGhhcmRseQorIyBmYXN0ZXIgYXQgYWxsLCB3aGlsZSBsb25nZXIga2V5IG9wZXJhdGlvbnMgYXJlIHNsb3dlciBieSB1cCB0byAyMCUuCisjIEl0IG1pZ2h0IGJlIG9mIGludGVyZXN0IHRvIGVtYmVkZGVkIHN5c3RlbSBkZXZlbG9wZXJzIHRob3VnaCwgYXMKKyMgaXQncyBzbWFsbGVyIHRoYW4gMUtCLCB5ZXQgb2ZmZXJzIH4zeCBpbXByb3ZlbWVudCBvdmVyIGNvbXBpbGVyCisjIGdlbmVyYXRlZCBjb2RlLgorIworIyBUaGUgbW9kdWxlIHRhcmdldHMgTjMyIGFuZCBONjQgTUlQUyBBQklzIGFuZCBjdXJyZW50bHkgaXMgYSBiaXQKKyMgSVJJWC1jZW50cmljLCBpLmUuIGlzIGxpa2VseSB0byByZXF1aXJlIGFkYXB0YXRpb24gZm9yIG90aGVyIE9TZXMuCisKKyMgaW50IGJuX211bF9tb250KAorJHJwPSJhMCI7CSMgQk5fVUxPTkcgKnJwLAorJGFwPSJhMSI7CSMgY29uc3QgQk5fVUxPTkcgKmFwLAorJGJwPSJhMiI7CSMgY29uc3QgQk5fVUxPTkcgKmJwLAorJG5wPSJhMyI7CSMgY29uc3QgQk5fVUxPTkcgKm5wLAorJG4wPSJhNCI7CSMgY29uc3QgQk5fVUxPTkcgKm4wLAorJG51bT0iYTUiOwkjIGludCBudW0pOworCiskbG8wPSJhNiI7CiskaGkwPSJhNyI7CiskbG8xPSJ2MCI7CiskaGkxPSJ2MSI7CiskYWo9InQwIjsKKyRiaT0idDEiOworJG5qPSJ0MiI7CiskdHA9InQzIjsKKyRhbG89InMwIjsKKyRhaGk9InMxIjsKKyRubG89InMyIjsKKyRuaGk9InMzIjsKKyR0aj0iczQiOworJGk9InM1IjsKKyRqPSJzNiI7CiskZnA9InQ4IjsKKyRtMT0idDkiOworCiskRlJBTUU9OCooMis4KTsKKworJGNvZGU9PDxfX187CisjaW5jbHVkZSA8YXNtLmg+CisjaW5jbHVkZSA8cmVnZGVmLmg+CisKKy50ZXh0CisKKy5zZXQJbm9hdAorLnNldAlyZW9yZGVyCisKKy5hbGlnbgk1CisuZ2xvYmwJYm5fbXVsX21vbnQKKy5lbnQJYm5fbXVsX21vbnQKK2JuX211bF9tb250OgorCS5zZXQJbm9yZW9yZGVyCisJUFRSX1NVQglzcCw2NAorCW1vdmUJJGZwLHNwCisJLmZyYW1lCSRmcCw2NCxyYQorCXNsdAlBVCwkbnVtLDQKKwlsaQl2MCwwCisJYmVxemwJQVQsLkxwcm9jZWVkCisJbm9wCisJanIJcmEKKwlQVFJfQURECXNwLCRmcCw2NAorCS5zZXQJcmVvcmRlcgorLmFsaWduCTUKKy5McHJvY2VlZDoKKwlsZAkkbjAsMCgkbjApCisJbGQJJGJpLDAoJGJwKQkjIGJwWzBdCisJbGQJJGFqLDAoJGFwKQkjIGFwWzBdCisJbGQJJG5qLDAoJG5wKQkjIG5wWzBdCisJUFRSX1NVQglzcCwxNgkJIyBwbGFjZSBmb3IgdHdvIGV4dHJhIHdvcmRzCisJc2xsCSRudW0sMworCWxpCUFULC00MDk2CisJUFRSX1NVQglzcCwkbnVtCisJYW5kCXNwLEFUCisKKwlzZAlzMCwwKCRmcCkKKwlzZAlzMSw4KCRmcCkKKwlzZAlzMiwxNigkZnApCisJc2QJczMsMjQoJGZwKQorCXNkCXM0LDMyKCRmcCkKKwlzZAlzNSw0MCgkZnApCisJc2QJczYsNDgoJGZwKQorCXNkCXM3LDU2KCRmcCkKKworCWRtdWx0dQkkYWosJGJpCisJbGQJJGFsbyw4KCRhcCkKKwlsZAkkbmxvLDgoJG5wKQorCW1mbG8JJGxvMAorCW1maGkJJGhpMAorCWRtdWx0dQkkbG8wLCRuMAorCW1mbG8JJG0xCisKKwlkbXVsdHUJJGFsbywkYmkKKwltZmxvCSRhbG8KKwltZmhpCSRhaGkKKworCWRtdWx0dQkkbmosJG0xCisJbWZsbwkkbG8xCisJbWZoaQkkaGkxCisJZG11bHR1CSRubG8sJG0xCisJZGFkZHUJJGxvMSwkbG8wCisJc2x0dQlBVCwkbG8xLCRsbzAKKwlkYWRkdQkkaGkxLEFUCisJbWZsbwkkbmxvCisJbWZoaQkkbmhpCisKKwltb3ZlCSR0cCxzcAorCWxpCSRqLDE2CisuYWxpZ24JNAorLkwxc3Q6CisJLnNldAlub3Jlb3JkZXIKKwlQVFJfQURECSRhaiwkYXAsJGoKKwlsZAkkYWosKCRhaikKKwlQVFJfQURECSRuaiwkbnAsJGoKKwlsZAkkbmosKCRuaikKKworCWRtdWx0dQkkYWosJGJpCisJZGFkZHUJJGxvMCwkYWxvLCRoaTAKKwlkYWRkdQkkbG8xLCRubG8sJGhpMQorCXNsdHUJQVQsJGxvMCwkaGkwCisJc2x0dQlzNywkbG8xLCRoaTEKKwlkYWRkdQkkaGkwLCRhaGksQVQKKwlkYWRkdQkkaGkxLCRuaGksczcKKwltZmxvCSRhbG8KKwltZmhpCSRhaGkKKworCWRhZGR1CSRsbzEsJGxvMAorCXNsdHUJQVQsJGxvMSwkbG8wCisJZG11bHR1CSRuaiwkbTEKKwlkYWRkdQkkaGkxLEFUCisJYWRkdQkkaiw4CisJc2QJJGxvMSwoJHRwKQorCXNsdHUJczcsJGosJG51bQorCW1mbG8JJG5sbworCW1maGkJJG5oaQorCisJYm5leglzNywuTDFzdAorCVBUUl9BREQJJHRwLDgKKwkuc2V0CXJlb3JkZXIKKworCWRhZGR1CSRsbzAsJGFsbywkaGkwCisJc2x0dQlBVCwkbG8wLCRoaTAKKwlkYWRkdQkkaGkwLCRhaGksQVQKKworCWRhZGR1CSRsbzEsJG5sbywkaGkxCisJc2x0dQlzNywkbG8xLCRoaTEKKwlkYWRkdQkkaGkxLCRuaGksczcKKwlkYWRkdQkkbG8xLCRsbzAKKwlzbHR1CUFULCRsbzEsJGxvMAorCWRhZGR1CSRoaTEsQVQKKworCXNkCSRsbzEsKCR0cCkKKworCWRhZGR1CSRoaTEsJGhpMAorCXNsdHUJQVQsJGhpMSwkaGkwCisJc2QJJGhpMSw4KCR0cCkKKwlzZAlBVCwxNigkdHApCisKKwlsaQkkaSw4CisuYWxpZ24JNAorLkxvdXRlcjoKKwlQVFJfQURECSRiaSwkYnAsJGkKKwlsZAkkYmksKCRiaSkKKwlsZAkkYWosKCRhcCkKKwlsZAkkYWxvLDgoJGFwKQorCWxkCSR0aiwoc3ApCisKKwlkbXVsdHUJJGFqLCRiaQorCWxkCSRuaiwoJG5wKQorCWxkCSRubG8sOCgkbnApCisJbWZsbwkkbG8wCisJbWZoaQkkaGkwCisJZGFkZHUJJGxvMCwkdGoKKwlkbXVsdHUJJGxvMCwkbjAKKwlzbHR1CUFULCRsbzAsJHRqCisJZGFkZHUJJGhpMCxBVAorCW1mbG8JJG0xCisKKwlkbXVsdHUJJGFsbywkYmkKKwltZmxvCSRhbG8KKwltZmhpCSRhaGkKKworCWRtdWx0dQkkbmosJG0xCisJbWZsbwkkbG8xCisJbWZoaQkkaGkxCisKKwlkbXVsdHUJJG5sbywkbTEKKwlkYWRkdQkkbG8xLCRsbzAKKwlzbHR1CUFULCRsbzEsJGxvMAorCWRhZGR1CSRoaTEsQVQKKwltZmxvCSRubG8KKwltZmhpCSRuaGkKKworCW1vdmUJJHRwLHNwCisJbGkJJGosMTYKKwlsZAkkdGosOCgkdHApCisuYWxpZ24JNAorLkxpbm5lcjoKKwkuc2V0CW5vcmVvcmRlcgorCVBUUl9BREQJJGFqLCRhcCwkagorCWxkCSRhaiwoJGFqKQorCVBUUl9BREQJJG5qLCRucCwkagorCWxkCSRuaiwoJG5qKQorCisJZG11bHR1CSRhaiwkYmkKKwlkYWRkdQkkbG8wLCRhbG8sJGhpMAorCWRhZGR1CSRsbzEsJG5sbywkaGkxCisJc2x0dQlBVCwkbG8wLCRoaTAKKwlzbHR1CXM3LCRsbzEsJGhpMQorCWRhZGR1CSRoaTAsJGFoaSxBVAorCWRhZGR1CSRoaTEsJG5oaSxzNworCW1mbG8JJGFsbworCW1maGkJJGFoaQorCisJZGFkZHUJJGxvMCwkdGoKKwlhZGR1CSRqLDgKKwlkbXVsdHUJJG5qLCRtMQorCXNsdHUJQVQsJGxvMCwkdGoKKwlkYWRkdQkkbG8xLCRsbzAKKwlkYWRkdQkkaGkwLEFUCisJc2x0dQlzNywkbG8xLCRsbzAKKwlsZAkkdGosMTYoJHRwKQorCWRhZGR1CSRoaTEsczcKKwlzbHR1CUFULCRqLCRudW0KKwltZmxvCSRubG8KKwltZmhpCSRuaGkKKwlzZAkkbG8xLCgkdHApCisJYm5leglBVCwuTGlubmVyCisJUFRSX0FERAkkdHAsOAorCS5zZXQJcmVvcmRlcgorCisJZGFkZHUJJGxvMCwkYWxvLCRoaTAKKwlzbHR1CUFULCRsbzAsJGhpMAorCWRhZGR1CSRoaTAsJGFoaSxBVAorCWRhZGR1CSRsbzAsJHRqCisJc2x0dQlzNywkbG8wLCR0agorCWRhZGR1CSRoaTAsczcKKworCWxkCSR0aiwxNigkdHApCisJZGFkZHUJJGxvMSwkbmxvLCRoaTEKKwlzbHR1CUFULCRsbzEsJGhpMQorCWRhZGR1CSRoaTEsJG5oaSxBVAorCWRhZGR1CSRsbzEsJGxvMAorCXNsdHUJczcsJGxvMSwkbG8wCisJZGFkZHUJJGhpMSxzNworCXNkCSRsbzEsKCR0cCkKKworCWRhZGR1CSRsbzEsJGhpMSwkaGkwCisJc2x0dQkkaGkxLCRsbzEsJGhpMAorCWRhZGR1CSRsbzEsJHRqCisJc2x0dQlBVCwkbG8xLCR0agorCWRhZGR1CSRoaTEsQVQKKwlzZAkkbG8xLDgoJHRwKQorCXNkCSRoaTEsMTYoJHRwKQorCisJYWRkdQkkaSw4CisJc2x0dQlzNywkaSwkbnVtCisJYm5leglzNywuTG91dGVyCisMCisJLnNldAlub3Jlb3JkZXIKKwlQVFJfQURECSR0aixzcCwkbnVtCSMgJnRwW251bV0KKwltb3ZlCSR0cCxzcAorCW1vdmUJJGFwLHNwCisJbGkJJGhpMCwwCQkjIGNsZWFyIGJvcnJvdyBiaXQKKworLmFsaWduCTQKKy5Mc3ViOglsZAkkbG8wLCgkdHApCisJbGQJJGxvMSwoJG5wKQorCVBUUl9BREQJJHRwLDgKKwlQVFJfQURECSRucCw4CisJZHN1YnUJJGxvMSwkbG8wLCRsbzEJIyB0cFtpXS1ucFtpXQorCXNndHUJQVQsJGxvMSwkbG8wCisJZHN1YnUJJGxvMCwkbG8xLCRoaTAKKwlzZ3R1CSRoaTAsJGxvMCwkbG8xCisJc2QJJGxvMCwoJHJwKQorCW9yCSRoaTAsQVQKKwlzbHR1CUFULCR0cCwkdGoKKwlibmV6CUFULC5Mc3ViCisJUFRSX0FERAkkcnAsOAorCisJZHN1YnUJJGhpMCwkaGkxLCRoaTAJIyBoYW5kbGUgdXBtb3N0IG92ZXJmbG93IGJpdAorCW1vdmUJJHRwLHNwCisJUFRSX1NVQgkkcnAsJG51bQkjIHJlc3RvcmUgcnAKKwlub3QJJGhpMSwkaGkwCisKKwlhbmQJJGFwLCRoaTAsc3AKKwlhbmQJJGJwLCRoaTEsJHJwCisJb3IJJGFwLCRhcCwkYnAJIyBhcD1ib3Jyb3c/dHA6cnAKKworLmFsaWduCTQKKy5MY29weToJbGQJJGFqLCgkYXApCisJUFRSX0FERAkkYXAsOAorCVBUUl9BREQJJHRwLDgKKwlzZAl6ZXJvLC04KCR0cCkKKwlzbHR1CUFULCR0cCwkdGoKKwlzZAkkYWosKCRycCkKKwlibmV6CUFULC5MY29weQorCVBUUl9BREQJJHJwLDgKKworCWxkCXMwLDAoJGZwKQorCWxkCXMxLDgoJGZwKQorCWxkCXMyLDE2KCRmcCkKKwlsZAlzMywyNCgkZnApCisJbGQJczQsMzIoJGZwKQorCWxkCXM1LDQwKCRmcCkKKwlsZAlzNiw0OCgkZnApCisJbGQJczcsNTYoJGZwKQorCWxpCXYwLDEKKwlqcglyYQorCVBUUl9BREQJc3AsJGZwLDY0CisJLnNldAlyZW9yZGVyCitFTkQoYm5fbXVsX21vbnQpCisucmRhdGEKKy5hc2NpaXoJIk1vbnRnb21lcnkgTXVsdGlwbGljYXRpb24gZm9yIE1JUFMgSUlJL0lWLCBDUllQVE9HQU1TIGJ5IDxhcHByb1xAb3BlbnNzbC5vcmc+IgorX19fCisKK3ByaW50ICRjb2RlOworY2xvc2UgU1RET1VUOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2JuL2FzbS9wcGMtbW9udC5wbCBiL2NyeXB0by9ibi9hc20vcHBjLW1vbnQucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg0OWVhZQotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9ibi9hc20vcHBjLW1vbnQucGwKQEAgLTAsMCArMSwzMjMgQEAKKyMhL3Vzci9iaW4vZW52IHBlcmwKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPiBmb3IgdGhlIE9wZW5TU0wKKyMgcHJvamVjdC4gVGhlIG1vZHVsZSBpcywgaG93ZXZlciwgZHVhbCBsaWNlbnNlZCB1bmRlciBPcGVuU1NMIGFuZAorIyBDUllQVE9HQU1TIGxpY2Vuc2VzIGRlcGVuZGluZyBvbiB3aGVyZSB5b3Ugb2J0YWluIGl0LiBGb3IgZnVydGhlcgorIyBkZXRhaWxzIHNlZSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL35hcHByby9jcnlwdG9nYW1zLy4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyBBcHJpbCAyMDA2CisKKyMgIlRlYXNlciIgTW9udGdvbWVyeSBtdWx0aXBsaWNhdGlvbiBtb2R1bGUgZm9yIFBvd2VyUEMuIEl0J3MgcG9zc2libGUKKyMgdG8gZ2FpbiBhIGJpdCBtb3JlIGJ5IG1vZHVsby1zY2hlZHVsaW5nIG91dGVyIGxvb3AsIHRoZW4gZGVkaWNhdGVkCisjIHNxdWFyaW5nIHByb2NlZHVyZSBzaG91bGQgZ2l2ZSBmdXJ0aGVyIDIwJSBhbmQgY29kZSBjYW4gYmUgYWRhcHRlZAorIyBmb3IgMzItYml0IGFwcGxpY2F0aW9uIHJ1bm5pbmcgb24gNjQtYml0IENQVS4gQXMgZm9yIHRoZSBsYXR0ZXIuCisjIEl0IHdvbid0IGJlIGFibGUgdG8gYWNoaWV2ZSAibmF0aXZlIiA2NC1iaXQgcGVyZm9ybWFuY2UsIGJlY2F1c2UgaW4KKyMgMzItYml0IGFwcGxpY2F0aW9uIGNvbnRleHQgZXZlcnkgYWRkYyBpbnN0cnVjdGlvbiB3aWxsIGhhdmUgdG8gYmUKKyMgZXhwYW5kZWQgYXMgYWRkYywgdHdpY2UgcmlnaHQgc2hpZnQgYnkgMzIgYW5kIGZpbmFsbHkgYWRkZSwgZXRjLgorIyBTbyBmYXIgUlNBICpzaWduKiBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBvdmVyIHByZS1ibl9tdWxfbW9udCBhc20KKyMgZm9yIDY0LWJpdCBhcHBsaWNhdGlvbiBydW5uaW5nIG9uIFBQQzk3MC9HNSBpczoKKyMKKyMgNTEyLWJpdAkrNjUlCQorIyAxMDI0LWJpdAkrMzUlCisjIDIwNDgtYml0CSsxOCUKKyMgNDA5Ni1iaXQJKzQlCisKKyRmbGF2b3VyID0gc2hpZnQ7CisKK2lmICgkZmxhdm91ciA9fiAvMzIvKSB7CisJJEJJVFM9CTMyOworCSRCTlNaPQkkQklUUy84OworCSRTSVpFX1Q9NDsKKwkkUlpPTkU9CTIyNDsKKwkkRlJBTUU9CSRTSVpFX1QqMTY7CisKKwkkTEQ9CSJsd3oiOwkJIyBsb2FkCisJJExEVT0JImx3enUiOwkJIyBsb2FkIGFuZCB1cGRhdGUKKwkkTERYPQkibHd6eCI7CQkjIGxvYWQgaW5kZXhlZAorCSRTVD0JInN0dyI7CQkjIHN0b3JlCisJJFNUVT0JInN0d3UiOwkJIyBzdG9yZSBhbmQgdXBkYXRlCisJJFNUWD0JInN0d3giOwkJIyBzdG9yZSBpbmRleGVkCisJJFNUVVg9CSJzdHd1eCI7CSMgc3RvcmUgaW5kZXhlZCBhbmQgdXBkYXRlCisJJFVNVUxMPQkibXVsbHciOwkjIHVuc2lnbmVkIG11bHRpcGx5IGxvdworCSRVTVVMSD0JIm11bGh3dSI7CSMgdW5zaWduZWQgbXVsdGlwbHkgaGlnaAorCSRVQ01QPQkiY21wbHciOwkjIHVuc2lnbmVkIGNvbXBhcmUKKwkkU0hSST0JInNyd2kiOwkJIyB1bnNpZ25lZCBzaGlmdCByaWdodCBieSBpbW1lZGlhdGUJCisJJFBVU0g9CSRTVDsKKwkkUE9QPQkkTEQ7Cit9IGVsc2lmICgkZmxhdm91ciA9fiAvNjQvKSB7CisJJEJJVFM9CTY0OworCSRCTlNaPQkkQklUUy84OworCSRTSVpFX1Q9ODsKKwkkUlpPTkU9CTI4ODsKKwkkRlJBTUU9CSRTSVpFX1QqMTY7CisKKwkjIHNhbWUgYXMgYWJvdmUsIGJ1dCA2NC1iaXQgbW5lbW9uaWNzLi4uCisJJExEPQkibGQiOwkJIyBsb2FkCisJJExEVT0JImxkdSI7CQkjIGxvYWQgYW5kIHVwZGF0ZQorCSRMRFg9CSJsZHgiOwkJIyBsb2FkIGluZGV4ZWQKKwkkU1Q9CSJzdGQiOwkJIyBzdG9yZQorCSRTVFU9CSJzdGR1IjsJCSMgc3RvcmUgYW5kIHVwZGF0ZQorCSRTVFg9CSJzdGR4IjsJCSMgc3RvcmUgaW5kZXhlZAorCSRTVFVYPQkic3RkdXgiOwkjIHN0b3JlIGluZGV4ZWQgYW5kIHVwZGF0ZQorCSRVTVVMTD0JIm11bGxkIjsJIyB1bnNpZ25lZCBtdWx0aXBseSBsb3cKKwkkVU1VTEg9CSJtdWxoZHUiOwkjIHVuc2lnbmVkIG11bHRpcGx5IGhpZ2gKKwkkVUNNUD0JImNtcGxkIjsJIyB1bnNpZ25lZCBjb21wYXJlCisJJFNIUkk9CSJzcmRpIjsJCSMgdW5zaWduZWQgc2hpZnQgcmlnaHQgYnkgaW1tZWRpYXRlCQorCSRQVVNIPQkkU1Q7CisJJFBPUD0JJExEOworfSBlbHNlIHsgZGllICJub25zZW5zZSAkZmxhdm91ciI7IH0KKworJDAgPX4gbS8oLipbXC9cXF0pW15cL1xcXSskLzsgJGRpcj0kMTsKKyggJHhsYXRlPSIke2Rpcn1wcGMteGxhdGUucGwiIGFuZCAtZiAkeGxhdGUgKSBvcgorKCAkeGxhdGU9IiR7ZGlyfS4uLy4uL3Blcmxhc20vcHBjLXhsYXRlLnBsIiBhbmQgLWYgJHhsYXRlKSBvcgorZGllICJjYW4ndCBsb2NhdGUgcHBjLXhsYXRlLnBsIjsKKworb3BlbiBTVERPVVQsInwgJF5YICR4bGF0ZSAkZmxhdm91ciAiLnNoaWZ0IHx8IGRpZSAiY2FuJ3QgY2FsbCAkeGxhdGU6ICQhIjsKKworJHNwPSJyMSI7CiskdG9jPSJyMiI7CiskcnA9InIzIjsJJG92Zj0icjMiOworJGFwPSJyNCI7CiskYnA9InI1IjsKKyRucD0icjYiOworJG4wPSJyNyI7CiskbnVtPSJyOCI7CiskcnA9InI5IjsJIyAkcnAgaXMgcmVhc3NpZ25lZAorJGFqPSJyMTAiOworJG5qPSJyMTEiOworJHRqPSJyMTIiOworIyBub24tdm9sYXRpbGUgcmVnaXN0ZXJzCiskaT0icjE0IjsKKyRqPSJyMTUiOworJHRwPSJyMTYiOworJG0wPSJyMTciOworJG0xPSJyMTgiOworJGxvMD0icjE5IjsKKyRoaTA9InIyMCI7CiskbG8xPSJyMjEiOworJGhpMT0icjIyIjsKKyRhbG89InIyMyI7CiskYWhpPSJyMjQiOworJG5sbz0icjI1IjsKKyMKKyRuaGk9InIwIjsKKworJGNvZGU9PDxfX187CisubWFjaGluZSAiYW55IgorLnRleHQKKworLmdsb2JsCS5ibl9tdWxfbW9udAorLmFsaWduCTQKKy5ibl9tdWxfbW9udDoKKwljbXB3aQkkbnVtLDQKKwltcgkkcnAscjMJCTsgJHJwIGlzIHJlYXNzaWduZWQKKwlsaQlyMywwCisJYmx0bHIKKworCXNsd2kJJG51bSwkbnVtLGBsb2coJEJOU1opL2xvZygyKWAKKwlsaQkkdGosLTQwOTYKKwlhZGRpCSRvdmYsJG51bSxgJEZSQU1FKyRSWk9ORWAKKwlzdWJmCSRvdmYsJG92Ziwkc3AJOyAkc3AtJG92ZgorCWFuZAkkb3ZmLCRvdmYsJHRqCTsgbWluaW1pemUgVExCIHVzYWdlCisJc3ViZgkkb3ZmLCRzcCwkb3ZmCTsgJG92Zi0kc3AKKwlzcndpCSRudW0sJG51bSxgbG9nKCRCTlNaKS9sb2coMilgCisJJFNUVVgJJHNwLCRzcCwkb3ZmCisKKwkkUFVTSAlyMTQsYDQqJFNJWkVfVGAoJHNwKQorCSRQVVNICXIxNSxgNSokU0laRV9UYCgkc3ApCisJJFBVU0gJcjE2LGA2KiRTSVpFX1RgKCRzcCkKKwkkUFVTSAlyMTcsYDcqJFNJWkVfVGAoJHNwKQorCSRQVVNICXIxOCxgOCokU0laRV9UYCgkc3ApCisJJFBVU0gJcjE5LGA5KiRTSVpFX1RgKCRzcCkKKwkkUFVTSAlyMjAsYDEwKiRTSVpFX1RgKCRzcCkKKwkkUFVTSAlyMjEsYDExKiRTSVpFX1RgKCRzcCkKKwkkUFVTSAlyMjIsYDEyKiRTSVpFX1RgKCRzcCkKKwkkUFVTSAlyMjMsYDEzKiRTSVpFX1RgKCRzcCkKKwkkUFVTSAlyMjQsYDE0KiRTSVpFX1RgKCRzcCkKKwkkUFVTSAlyMjUsYDE1KiRTSVpFX1RgKCRzcCkKKworCSRMRAkkbjAsMCgkbjApCTsgcHVsbCBuMFswXSB2YWx1ZQorCWFkZGkJJG51bSwkbnVtLC0yCTsgYWRqdXN0ICRudW0gZm9yIGNvdW50ZXIgcmVnaXN0ZXIKKwwKKwkkTEQJJG0wLDAoJGJwKQk7IG0wPWJwWzBdCisJJExECSRhaiwwKCRhcCkJOyBhcFswXQorCWFkZGkJJHRwLCRzcCwkRlJBTUUKKwkkVU1VTEwJJGxvMCwkYWosJG0wCTsgYXBbMF0qYnBbMF0KKwkkVU1VTEgJJGhpMCwkYWosJG0wCisKKwkkTEQJJGFqLCRCTlNaKCRhcCkJOyBhcFsxXQorCSRMRAkkbmosMCgkbnApCTsgbnBbMF0KKworCSRVTVVMTAkkbTEsJGxvMCwkbjAJOyAidHBbMF0iKm4wCisKKwkkVU1VTEwJJGFsbywkYWosJG0wCTsgYXBbMV0qYnBbMF0KKwkkVU1VTEgJJGFoaSwkYWosJG0wCisKKwkkVU1VTEwJJGxvMSwkbmosJG0xCTsgbnBbMF0qbTEKKwkkVU1VTEgJJGhpMSwkbmosJG0xCisJJExECSRuaiwkQk5TWigkbnApCTsgbnBbMV0KKwlhZGRjCSRsbzEsJGxvMSwkbG8wCisJYWRkemUJJGhpMSwkaGkxCisKKwkkVU1VTEwJJG5sbywkbmosJG0xCTsgbnBbMV0qbTEKKwkkVU1VTEgJJG5oaSwkbmosJG0xCisKKwltdGN0cgkkbnVtCisJbGkJJGosYDIqJEJOU1pgCisuYWxpZ24JNAorTDFzdDoKKwkkTERYCSRhaiwkYXAsJGoJOyBhcFtqXQorCWFkZGMJJGxvMCwkYWxvLCRoaTAKKwkkTERYCSRuaiwkbnAsJGoJOyBucFtqXQorCWFkZHplCSRoaTAsJGFoaQorCSRVTVVMTAkkYWxvLCRhaiwkbTAJOyBhcFtqXSpicFswXQorCWFkZGMJJGxvMSwkbmxvLCRoaTEKKwkkVU1VTEgJJGFoaSwkYWosJG0wCisJYWRkemUJJGhpMSwkbmhpCisJJFVNVUxMCSRubG8sJG5qLCRtMQk7IG5wW2pdKm0xCisJYWRkYwkkbG8xLCRsbzEsJGxvMAk7IG5wW2pdKm0xK2FwW2pdKmJwWzBdCisJJFVNVUxICSRuaGksJG5qLCRtMQorCWFkZHplCSRoaTEsJGhpMQorCSRTVAkkbG8xLDAoJHRwKQk7IHRwW2otMV0KKworCWFkZGkJJGosJGosJEJOU1oJOyBqKysKKwlhZGRpCSR0cCwkdHAsJEJOU1oJOyB0cCsrCisJYmRuei0JTDFzdAorO0wxc3QKKwlhZGRjCSRsbzAsJGFsbywkaGkwCisJYWRkemUJJGhpMCwkYWhpCisKKwlhZGRjCSRsbzEsJG5sbywkaGkxCisJYWRkemUJJGhpMSwkbmhpCisJYWRkYwkkbG8xLCRsbzEsJGxvMAk7IG5wW2pdKm0xK2FwW2pdKmJwWzBdCisJYWRkemUJJGhpMSwkaGkxCisJJFNUCSRsbzEsMCgkdHApCTsgdHBbai0xXQorCisJbGkJJG92ZiwwCisJYWRkYwkkaGkxLCRoaTEsJGhpMAorCWFkZHplCSRvdmYsJG92Zgk7IHVwbW9zdCBvdmVyZmxvdyBiaXQKKwkkU1QJJGhpMSwkQk5TWigkdHApCisMCisJbGkJJGksJEJOU1oKKy5hbGlnbgk0CitMb3V0ZXI6CisJJExEWAkkbTAsJGJwLCRpCTsgbTA9YnBbaV0KKwkkTEQJJGFqLDAoJGFwKQk7IGFwWzBdCisJYWRkaQkkdHAsJHNwLCRGUkFNRQorCSRMRAkkdGosJEZSQU1FKCRzcCkJOyB0cFswXQorCSRVTVVMTAkkbG8wLCRhaiwkbTAJOyBhcFswXSpicFtpXQorCSRVTVVMSAkkaGkwLCRhaiwkbTAKKwkkTEQJJGFqLCRCTlNaKCRhcCkJOyBhcFsxXQorCSRMRAkkbmosMCgkbnApCTsgbnBbMF0KKwlhZGRjCSRsbzAsJGxvMCwkdGoJOyBhcFswXSpicFtpXSt0cFswXQorCSRVTVVMTAkkYWxvLCRhaiwkbTAJOyBhcFtqXSpicFtpXQorCWFkZHplCSRoaTAsJGhpMAorCSRVTVVMTAkkbTEsJGxvMCwkbjAJOyB0cFswXSpuMAorCSRVTVVMSAkkYWhpLCRhaiwkbTAKKwkkVU1VTEwJJGxvMSwkbmosJG0xCTsgbnBbMF0qbTEKKwkkVU1VTEgJJGhpMSwkbmosJG0xCisJJExECSRuaiwkQk5TWigkbnApCTsgbnBbMV0KKwlhZGRjCSRsbzEsJGxvMSwkbG8wCisJJFVNVUxMCSRubG8sJG5qLCRtMQk7IG5wWzFdKm0xCisJYWRkemUJJGhpMSwkaGkxCisJJFVNVUxICSRuaGksJG5qLCRtMQorDAorCW10Y3RyCSRudW0KKwlsaQkkaixgMiokQk5TWmAKKy5hbGlnbgk0CitMaW5uZXI6CisJJExEWAkkYWosJGFwLCRqCTsgYXBbal0KKwlhZGRjCSRsbzAsJGFsbywkaGkwCisJJExECSR0aiwkQk5TWigkdHApCTsgdHBbal0KKwlhZGR6ZQkkaGkwLCRhaGkKKwkkTERYCSRuaiwkbnAsJGoJOyBucFtqXQorCWFkZGMJJGxvMSwkbmxvLCRoaTEKKwkkVU1VTEwJJGFsbywkYWosJG0wCTsgYXBbal0qYnBbaV0KKwlhZGR6ZQkkaGkxLCRuaGkKKwkkVU1VTEgJJGFoaSwkYWosJG0wCisJYWRkYwkkbG8wLCRsbzAsJHRqCTsgYXBbal0qYnBbaV0rdHBbal0KKwkkVU1VTEwJJG5sbywkbmosJG0xCTsgbnBbal0qbTEKKwlhZGR6ZQkkaGkwLCRoaTAKKwkkVU1VTEgJJG5oaSwkbmosJG0xCisJYWRkYwkkbG8xLCRsbzEsJGxvMAk7IG5wW2pdKm0xK2FwW2pdKmJwW2ldK3RwW2pdCisJYWRkaQkkaiwkaiwkQk5TWgk7IGorKworCWFkZHplCSRoaTEsJGhpMQorCSRTVAkkbG8xLDAoJHRwKQk7IHRwW2otMV0KKwlhZGRpCSR0cCwkdHAsJEJOU1oJOyB0cCsrCisJYmRuei0JTGlubmVyCis7TGlubmVyCisJJExECSR0aiwkQk5TWigkdHApCTsgdHBbal0KKwlhZGRjCSRsbzAsJGFsbywkaGkwCisJYWRkemUJJGhpMCwkYWhpCisJYWRkYwkkbG8wLCRsbzAsJHRqCTsgYXBbal0qYnBbaV0rdHBbal0KKwlhZGR6ZQkkaGkwLCRoaTAKKworCWFkZGMJJGxvMSwkbmxvLCRoaTEKKwlhZGR6ZQkkaGkxLCRuaGkKKwlhZGRjCSRsbzEsJGxvMSwkbG8wCTsgbnBbal0qbTErYXBbal0qYnBbaV0rdHBbal0KKwlhZGR6ZQkkaGkxLCRoaTEKKwkkU1QJJGxvMSwwKCR0cCkJOyB0cFtqLTFdCisKKwlhZGRpYwkkb3ZmLCRvdmYsLTEJOyBtb3ZlIHVwbW9zdCBvdmVyZmxvdyB0byBYRVJbQ0FdCisJbGkJJG92ZiwwCisJYWRkZQkkaGkxLCRoaTEsJGhpMAorCWFkZHplCSRvdmYsJG92ZgorCSRTVAkkaGkxLCRCTlNaKCR0cCkKKzsKKwlzbHdpCSR0aiwkbnVtLGBsb2coJEJOU1opL2xvZygyKWAKKwkkVUNNUAkkaSwkdGoKKwlhZGRpCSRpLCRpLCRCTlNaCisJYmxlLQlMb3V0ZXIKKwwKKwlhZGRpCSRudW0sJG51bSwyCTsgcmVzdG9yZSAkbnVtCisJc3ViZmMJJGosJGosJGoJOyBqPTAgYW5kICJjbGVhciIgWEVSW0NBXQorCWFkZGkJJHRwLCRzcCwkRlJBTUUKKwltdGN0cgkkbnVtCisKKy5hbGlnbgk0CitMc3ViOgkkTERYCSR0aiwkdHAsJGoKKwkkTERYCSRuaiwkbnAsJGoKKwlzdWJmZQkkYWosJG5qLCR0agk7IHRwW2pdLW5wW2pdCisJJFNUWAkkYWosJHJwLCRqCisJYWRkaQkkaiwkaiwkQk5TWgorCWJkbnotCUxzdWIKKworCWxpCSRqLDAKKwltdGN0cgkkbnVtCisJc3ViZmUJJG92Ziwkaiwkb3ZmCTsgaGFuZGxlIHVwbW9zdCBvdmVyZmxvdyBiaXQKKwlhbmQJJGFwLCR0cCwkb3ZmCisJYW5kYwkkbnAsJHJwLCRvdmYKKwlvcgkkYXAsJGFwLCRucAk7IGFwPWJvcnJvdz90cDpycAorCisuYWxpZ24JNAorTGNvcHk6CQkJCTsgY29weSBvciBpbi1wbGFjZSByZWZyZXNoCisJJExEWAkkdGosJGFwLCRqCisJJFNUWAkkdGosJHJwLCRqCisJJFNUWAkkaiwkdHAsJGoJOyB6YXAgYXQgb25jZQorCWFkZGkJJGosJGosJEJOU1oKKwliZG56LQlMY29weQorCisJJFBPUAlyMTQsYDQqJFNJWkVfVGAoJHNwKQorCSRQT1AJcjE1LGA1KiRTSVpFX1RgKCRzcCkKKwkkUE9QCXIxNixgNiokU0laRV9UYCgkc3ApCisJJFBPUAlyMTcsYDcqJFNJWkVfVGAoJHNwKQorCSRQT1AJcjE4LGA4KiRTSVpFX1RgKCRzcCkKKwkkUE9QCXIxOSxgOSokU0laRV9UYCgkc3ApCisJJFBPUAlyMjAsYDEwKiRTSVpFX1RgKCRzcCkKKwkkUE9QCXIyMSxgMTEqJFNJWkVfVGAoJHNwKQorCSRQT1AJcjIyLGAxMiokU0laRV9UYCgkc3ApCisJJFBPUAlyMjMsYDEzKiRTSVpFX1RgKCRzcCkKKwkkUE9QCXIyNCxgMTQqJFNJWkVfVGAoJHNwKQorCSRQT1AJcjI1LGAxNSokU0laRV9UYCgkc3ApCisJJFBPUAkkc3AsMCgkc3ApCisJbGkJcjMsMQorCWJscgorCS5sb25nCTAKKy5hc2NpeiAgIk1vbnRnb21lcnkgTXVsdGlwbGljYXRpb24gZm9yIFBQQywgQ1JZUFRPR0FNUyBieSA8YXBwcm9cQGZ5LmNoYWxtZXJzLnNlPiIKK19fXworCiskY29kZSA9fiBzL1xgKFteXGBdKilcYC9ldmFsICQxL2dlbTsKK3ByaW50ICRjb2RlOworY2xvc2UgU1RET1VUOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2JuL2FzbS9wcGMucGwgYi9jcnlwdG8vYm4vYXNtL3BwYy5wbAppbmRleCAwOGUwMDUzLi4zN2M2NWQzIDEwMDY0NAotLS0gYS9jcnlwdG8vYm4vYXNtL3BwYy5wbAorKysgYi9jcnlwdG8vYm4vYXNtL3BwYy5wbApAQCAtMTAwLDkgKzEwMCw5IEBACiAjCW1lIGEgbm90ZSBhdCBzY2hhcmlAdXMuaWJtLmNvbQogIwogCi0kb3BmID0gc2hpZnQ7CiskZmxhdm91ciA9IHNoaWZ0OwogCi1pZiAoJG9wZiA9fiAvMzJcLnMvKSB7CitpZiAoJGZsYXZvdXIgPX4gLzMyLykgewogCSRCSVRTPQkzMjsKIAkkQk5TWj0JJEJJVFMvODsKIAkkSVNBPQkiXCJwcGNcIiI7CkBAIC0xMjUsNyArMTI1LDcgQEAKIAkkSU5TUj0JImluc3J3aSI7CSMgaW5zZXJ0IHJpZ2h0CiAJJFJPVEw9CSJyb3Rsd2kiOwkjIHJvdGF0ZSBsZWZ0IGJ5IGltbWVkaWF0ZQogCSRUUj0JInR3IjsJCSMgY29uZGl0aW9uYWwgdHJhcAotfSBlbHNpZiAoJG9wZiA9fiAvNjRcLnMvKSB7Cit9IGVsc2lmICgkZmxhdm91ciA9fiAvNjQvKSB7CiAJJEJJVFM9CTY0OwogCSRCTlNaPQkkQklUUy84OwogCSRJU0E9CSJcInBwYzY0XCIiOwpAQCAtMTQ5LDkzICsxNDksMTYgQEAKIAkkSU5TUj0JImluc3JkaSI7CSMgaW5zZXJ0IHJpZ2h0IAogCSRST1RMPQkicm90bGRpIjsJIyByb3RhdGUgbGVmdCBieSBpbW1lZGlhdGUKIAkkVFI9CSJ0ZCI7CQkjIGNvbmRpdGlvbmFsIHRyYXAKLX0gZWxzZSB7IGRpZSAibm9uc2Vuc2UgJG9wZiI7IH0KK30gZWxzZSB7IGRpZSAibm9uc2Vuc2UgJGZsYXZvdXIiOyB9CiAKLSggZGVmaW5lZCBzaGlmdCB8fCBvcGVuIFNURE9VVCwiPiRvcGYiICkgfHwgZGllICJjYW4ndCBvcGVuICRvcGY6ICQhIjsKKyQwID1+IG0vKC4qW1wvXFxdKVteXC9cXF0rJC87ICRkaXI9JDE7CisoICR4bGF0ZT0iJHtkaXJ9cHBjLXhsYXRlLnBsIiBhbmQgLWYgJHhsYXRlICkgb3IKKyggJHhsYXRlPSIke2Rpcn0uLi8uLi9wZXJsYXNtL3BwYy14bGF0ZS5wbCIgYW5kIC1mICR4bGF0ZSkgb3IKK2RpZSAiY2FuJ3QgbG9jYXRlIHBwYy14bGF0ZS5wbCI7CiAKLSMgZnVuY3Rpb24gZW50cnkgcG9pbnRzIGZyb20gdGhlIEFJWCBjb2RlCi0jCi0jIFRoZXJlIGFyZSBvdGhlciwgbW9yZSBlbGVnYW50LCB3YXlzIHRvIGhhbmRsZSB0aGlzLiBXZSAoSUJNKSBjaG9zZQotIyB0aGlzIGFwcHJvYWNoIGFzIGl0IHBsYXlzIHdlbGwgd2l0aCBzY3JpcHRzIHdlIHJ1biB0byAnbmFtZXNwYWNlJwotIyBPcGVuU1NMIC5pLmUuIHdlIGFkZCBhIHByZWZpeCB0byBhbGwgdGhlIHB1YmxpYyBzeW1ib2xzIHNvIHdlIGNhbgotIyBjby1leGlzdCBpbiB0aGUgc2FtZSBwcm9jZXNzIHdpdGggb3RoZXIgaW1wbGVtZW50YXRpb25zIG9mIE9wZW5TU0wuCi0jICdjbGV2ZXJlcicgd2F5cyBvZiBkb2luZyB0aGVzZSBzdWJzdGl0dXRpb25zIHRlbmQgdG8gaGlkZSBkYXRhIHdlCi0jIG5lZWQgdG8gYmUgb2J2aW91cy4KLSMKLW15IEBpdGVtcyA9ICgiYm5fc3FyX2NvbWJhNCIsCi0JICAgICAiYm5fc3FyX2NvbWJhOCIsCi0JICAgICAiYm5fbXVsX2NvbWJhNCIsCi0JICAgICAiYm5fbXVsX2NvbWJhOCIsCi0JICAgICAiYm5fc3ViX3dvcmRzIiwKLQkgICAgICJibl9hZGRfd29yZHMiLAotCSAgICAgImJuX2Rpdl93b3JkcyIsCi0JICAgICAiYm5fc3FyX3dvcmRzIiwKLQkgICAgICJibl9tdWxfd29yZHMiLAotCSAgICAgImJuX211bF9hZGRfd29yZHMiKTsKK29wZW4gU1RET1VULCJ8ICReWCAkeGxhdGUgJGZsYXZvdXIgIi5zaGlmdCB8fCBkaWUgImNhbid0IGNhbGwgJHhsYXRlOiAkISI7CiAKLWlmICAgICgkb3BmID1+IC9saW51eC8pCXsgIGRvX2xpbnV4KCk7CX0KLWVsc2lmICgkb3BmID1+IC9haXgvKQl7ICBkb19haXgoKTsJfQotZWxzaWYgKCRvcGYgPX4gL29zeC8pCXsgIGRvX29zeCgpOwl9Ci1lbHNlCQkJeyAgZG9fYnNkKCk7CX0KLQotc3ViIGRvX2xpbnV4IHsKLSAgICAkZD0mZGF0YSgpOwotCi0gICAgaWYgKCRCSVRTPT02NCkgewotICAgICAgZm9yZWFjaCAkdCAoQGl0ZW1zKSB7Ci0gICAgICAgICRkID1+IHMvXC4kdDovXAotXHQuc2VjdGlvblx0Ii5vcGQiLCJhdyJcCi1cdC5hbGlnblx0M1wKLVx0Lmdsb2JsXHQkdFwKLSR0OlwKLVx0LnF1YWRcdC4kdCwuVE9DLlxAdG9jYmFzZSwwXAotXHQuc2l6ZVx0JHQsMjRcCi1cdC5wcmV2aW91c1xuXAotXHQudHlwZVx0LiR0LFxAZnVuY3Rpb25cCi1cdC5nbG9ibFx0LiR0XAotLiR0Oi9nOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIGZvcmVhY2ggJHQgKEBpdGVtcykgewotICAgICAgICAkZD1+cy9cLiR0LyR0L2c7Ci0gICAgICB9Ci0gICAgfQotICAgICMgaGlkZSBpbnRlcm5hbCBsYWJlbHMgdG8gYXZvaWQgcG9sbHV0aW9uIG9mIG5hbWUgdGFibGUuLi4KLSAgICAkZD1+cy9McHBjYXNtXy8uTHBwY2FzbV8vZ207Ci0gICAgcHJpbnQgJGQ7Ci19Ci0KLXN1YiBkb19haXggewotICAgICMgQUlYIGFzc2VtYmxlciBpcyBzbWFydCBlbm91Z2ggdG8gcGxlYXNlIHRoZSBsaW5rZXIgd2l0aG91dAotICAgICMgbWFraW5nIHVzIGRvIHNvbWV0aGluZyBzcGVjaWFsLi4uCi0gICAgcHJpbnQgJmRhdGEoKTsKLX0KLQotIyBNYWNPU1ggMzIgYml0Ci1zdWIgZG9fb3N4IHsKLSAgICAkZD0mZGF0YSgpOwotICAgICMgQ2hhbmdlIHRoZSBibiBzeW1ib2wgcHJlZml4IGZyb20gJy4nIHRvICdfJwotICAgIGZvcmVhY2ggJHQgKEBpdGVtcykgewotICAgICAgJGQ9fnMvXC4kdC9fJHQvZzsKLSAgICB9Ci0gICAgIyBDaGFuZ2UgLm1hY2hpbmUgdG8gc29tZXRoaW5nIE9TIFggYXNtIHdpbGwgYWNjZXB0Ci0gICAgJGQ9fnMvXC5tYWNoaW5lLiovLnRleHQvZzsKLSAgICAkZD1+cy9cIy87L2c7ICMgY2hhbmdlIGNvbW1lbnQgZnJvbSAnIycgdG8gJzsnCi0gICAgcHJpbnQgJGQ7Ci19Ci0KLSMgQlNEIChVbnRlc3RlZCkKLXN1YiBkb19ic2QgewotICAgICRkPSZkYXRhKCk7Ci0gICAgZm9yZWFjaCAkdCAoQGl0ZW1zKSB7Ci0gICAgICAkZD1+cy9cLiR0L18kdC9nOwotICAgIH0KLSAgICBwcmludCAkZDsKLX0KLQotc3ViIGRhdGEgewotCWxvY2FsKCRkYXRhKT08PEVPRjsKKyRkYXRhPTw8RU9GOwogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjCiAjCkBAIC0yOTcsMzMgKzIyMCwyMCBAQAogIwogIwlEZWZpbmVzIHRvIGJlIHVzZWQgaW4gdGhlIGFzc2VtYmx5IGNvZGUuCiAjCQotLnNldCByMCwwCSMgd2UgdXNlIGl0IGFzIHN0b3JhZ2UgZm9yIHZhbHVlIG9mIDAKLS5zZXQgU1AsMQkjIHByZXNlcnZlZAotLnNldCBSVE9DLDIJIyBwcmVzZXJ2ZWQgCi0uc2V0IHIzLDMJIyAxc3QgYXJndW1lbnQvcmV0dXJuIHZhbHVlCi0uc2V0IHI0LDQJIyAybmQgYXJndW1lbnQvdm9sYXRpbGUgcmVnaXN0ZXIKLS5zZXQgcjUsNQkjIDNyZCBhcmd1bWVudC92b2xhdGlsZSByZWdpc3RlcgotLnNldCByNiw2CSMgLi4uCi0uc2V0IHI3LDcKLS5zZXQgcjgsOAotLnNldCByOSw5Ci0uc2V0IHIxMCwxMAotLnNldCByMTEsMTEKLS5zZXQgcjEyLDEyCi0uc2V0IHIxMywxMwkjIG5vdCB1c2VkLCBub3IgYW55IG90aGVyICJiZWxvdyIgaXQuLi4KLQotLnNldCBCT19JRl9OT1QsNAotLnNldCBCT19JRiwxMgotLnNldCBCT19kQ1RSX05aRVJPLDE2Ci0uc2V0IEJPX2RDVFJfWkVSTywxOAotLnNldCBCT19BTFdBWVMsMjAKLS5zZXQgQ1IwX0xULDA7Ci0uc2V0IENSMF9HVCwxOwotLnNldCBDUjBfRVEsMgotLnNldCBDUjFfRlgsNDsKLS5zZXQgQ1IxX0ZFWCw1OwotLnNldCBDUjFfVlgsNgotLnNldCBMUiw4CisjLnNldCByMCwwCSMgd2UgdXNlIGl0IGFzIHN0b3JhZ2UgZm9yIHZhbHVlIG9mIDAKKyMuc2V0IFNQLDEJIyBwcmVzZXJ2ZWQKKyMuc2V0IFJUT0MsMgkjIHByZXNlcnZlZCAKKyMuc2V0IHIzLDMJIyAxc3QgYXJndW1lbnQvcmV0dXJuIHZhbHVlCisjLnNldCByNCw0CSMgMm5kIGFyZ3VtZW50L3ZvbGF0aWxlIHJlZ2lzdGVyCisjLnNldCByNSw1CSMgM3JkIGFyZ3VtZW50L3ZvbGF0aWxlIHJlZ2lzdGVyCisjLnNldCByNiw2CSMgLi4uCisjLnNldCByNyw3CisjLnNldCByOCw4CisjLnNldCByOSw5CisjLnNldCByMTAsMTAKKyMuc2V0IHIxMSwxMQorIy5zZXQgcjEyLDEyCisjLnNldCByMTMsMTMJIyBub3QgdXNlZCwgbm9yIGFueSBvdGhlciAiYmVsb3ciIGl0Li4uCiAKICMJRGVjbGFyZSBmdW5jdGlvbiBuYW1lcyB0byBiZSBnbG9iYWwKICMJTk9URToJRm9yIGdjYyB0aGVzZSBuYW1lcyBNVVNUIGJlIGNoYW5nZWQgdG8gcmVtb3ZlCkBAIC0zNDQsNyArMjU0LDcgQEAKIAkKICMgLnRleHQgc2VjdGlvbgogCQotCS5tYWNoaW5lCSRJU0EKKwkubWFjaGluZQkiYW55IgogCiAjCiAjCU5PVEU6CVRoZSBmb2xsb3dpbmcgbGFiZWwgbmFtZSBzaG91bGQgYmUgY2hhbmdlZCB0bwpAQCAtNDc4LDcgKzM4OCw3IEBACiAKIAkkU1QJCXI5LGA2KiRCTlNaYChyMykJI3JbNl09YzEKIAkkU1QJCXIxMCxgNyokQk5TWmAocjMpCSNyWzddPWMyCi0JYmNscglCT19BTFdBWVMsQ1IwX0xUCisJYmxyCiAJLmxvbmcJMHgwMDAwMDAwMAogCiAjCkBAIC05MDMsNyArODEzLDcgQEAKIAkkU1QJCXI5LCBgMTUqJEJOU1pgKHIzKQkjclsxNV09YzE7CiAKIAotCWJjbHIJQk9fQUxXQVlTLENSMF9MVAorCWJscgogCiAJLmxvbmcJMHgwMDAwMDAwMAogCkBAIC0xMDU1LDcgKzk2NSw3IEBACiAKIAkkU1QJcjEwLGA2KiRCTlNaYChyMykJI3JbNl09YzEKIAkkU1QJcjExLGA3KiRCTlNaYChyMykJI3JbN109YzIKLQliY2xyCUJPX0FMV0FZUyxDUjBfTFQKKwlibHIKIAkubG9uZwkweDAwMDAwMDAwCiAKICMKQEAgLTE1OTEsNyArMTUwMSw3IEBACiAJYWRkZQlyMTAscjEwLHI5CiAJJFNUCXIxMixgMTQqJEJOU1pgKHIzKQkjclsxNF09YzM7CiAJJFNUCXIxMCxgMTUqJEJOU1pgKHIzKQkjclsxNV09YzE7Ci0JYmNscglCT19BTFdBWVMsQ1IwX0xUCisJYmxyCiAJLmxvbmcJMHgwMDAwMDAwMAogCiAjCkBAIC0xNjIzLDcgKzE1MzMsNyBAQAogCXN1YmZjLglyNyxyMCxyNiAgICAgICAgIyBJZiByNiBpcyAwIHRoZW4gcmVzdWx0IGlzIDAuCiAJCQkJIyBpZiByNiA+IDAgdGhlbiByZXN1bHQgIT0wCiAJCQkJIyBJbiBlaXRoZXIgY2FzZSBjYXJyeSBiaXQgaXMgc2V0LgotCWJjCUJPX0lGLENSMF9FUSxMcHBjYXNtX3N1Yl9hZGlvcworCWJlcQlMcHBjYXNtX3N1Yl9hZGlvcwogCWFkZGkJcjQscjQsLSRCTlNaCiAJYWRkaQlyMyxyMywtJEJOU1oKIAlhZGRpCXI1LHI1LC0kQk5TWgpAQCAtMTYzNSwxMSArMTU0NSwxMSBAQAogCQkJCSMgaWYgY2FycnkgPSAxIHRoaXMgaXMgcjctcjguIEVsc2UgaXQKIAkJCQkjIGlzIHI3LXI4IC0xIGFzIHdlIG5lZWQuCiAJJFNUVQlyNiwkQk5TWihyMykKLQliYwlCT19kQ1RSX05aRVJPLENSMF9FUSxMcHBjYXNtX3N1Yl9tYWlubG9vcAorCWJkbnotCUxwcGNhc21fc3ViX21haW5sb29wCiBMcHBjYXNtX3N1Yl9hZGlvczoJCiAJc3ViZnplCXIzLHIwCQkjIGlmIGNhcnJ5IGJpdCBpcyBzZXQgdGhlbiByMyA9IDAgZWxzZSAtMQogCWFuZGkuCXIzLHIzLDEgICAgICAgICAjIGtlZXAgb25seSBsYXN0IGJpdC4KLQliY2xyCUJPX0FMV0FZUyxDUjBfTFQKKwlibHIKIAkubG9uZwkweDAwMDAwMDAwCiAKIApAQCAtMTY3MCw3ICsxNTgwLDcgQEAKICMJY2hlY2sgZm9yIHI2ID0gMC4gSXMgdGhpcyBuZWVkZWQ/CiAjCiAJYWRkaWMuCXI2LHI2LDAJCSN0ZXN0IHI2IGFuZCBjbGVhciBjYXJyeSBiaXQuCi0JYmMJQk9fSUYsQ1IwX0VRLExwcGNhc21fYWRkX2FkaW9zCisJYmVxCUxwcGNhc21fYWRkX2FkaW9zCiAJYWRkaQlyNCxyNCwtJEJOU1oKIAlhZGRpCXIzLHIzLC0kQk5TWgogCWFkZGkJcjUscjUsLSRCTlNaCkBAIC0xNjgwLDEwICsxNTkwLDEwIEBACiAJJExEVQlyOCwkQk5TWihyNSkKIAlhZGRlCXI4LHI3LHI4CiAJJFNUVQlyOCwkQk5TWihyMykKLQliYwlCT19kQ1RSX05aRVJPLENSMF9FUSxMcHBjYXNtX2FkZF9tYWlubG9vcAorCWJkbnotCUxwcGNhc21fYWRkX21haW5sb29wCiBMcHBjYXNtX2FkZF9hZGlvczoJCiAJYWRkemUJcjMscjAJCQkjcmV0dXJuIGNhcnJ5IGJpdC4KLQliY2xyCUJPX0FMV0FZUyxDUjBfTFQKKwlibHIKIAkubG9uZwkweDAwMDAwMDAwCiAKICMKQEAgLTE3MDcsMjQgKzE2MTcsMjQgQEAKICMJcjUgPSBkCiAJCiAJJFVDTVBJCTAscjUsMAkJCSMgY29tcGFyZSByNSBhbmQgMAotCWJjCUJPX0lGX05PVCxDUjBfRVEsTHBwY2FzbV9kaXYxCSMgcHJvY2VlZCBpZiBkIT0wCisJYm5lCUxwcGNhc21fZGl2MQkJIyBwcm9jZWVkIGlmIGQhPTAKIAlsaQlyMywtMQkJCSMgZD0wIHJldHVybiAtMQotCWJjbHIJQk9fQUxXQVlTLENSMF9MVAkKKwlibHIKIExwcGNhc21fZGl2MToKIAl4b3IJcjAscjAscjAJCSNyMD0wCiAJbGkJcjgsJEJJVFMKIAkkQ05UTFouCXI3LHI1CQkJI3I3ID0gbnVtIGxlYWRpbmcgMHMgaW4gZC4KLQliYwlCT19JRixDUjBfRVEsTHBwY2FzbV9kaXYyCSNwcm9jZWVkIGlmIG5vIGxlYWRpbmcgemVyb3MKKwliZXEJTHBwY2FzbV9kaXYyCQkjcHJvY2VlZCBpZiBubyBsZWFkaW5nIHplcm9zCiAJc3ViZglyOCxyNyxyOAkJI3I4ID0gQk5fbnVtX2JpdHNfd29yZChkKQogCSRTSFIuCXI5LHIzLHI4CQkjYXJlIHRoZXJlIGFueSBiaXRzIGFib3ZlIHI4J3RoPwogCSRUUgkxNixyOSxyMAkJI2lmIHRoZXJlJ3JlLCBzaWduYWwgdG8gZHVtcCBjb3JlLi4uCiBMcHBjYXNtX2RpdjI6CiAJJFVDTVAJMCxyMyxyNQkJCSNoPj1kPwotCWJjCUJPX0lGLENSMF9MVCxMcHBjYXNtX2RpdjMJI2dvdG8gTHBwY2FzbV9kaXYzIGlmIG5vdAorCWJsdAlMcHBjYXNtX2RpdjMJCSNnb3RvIExwcGNhc21fZGl2MyBpZiBub3QKIAlzdWJmCXIzLHI1LHIzCQkjaC09ZCA7IAogTHBwY2FzbV9kaXYzOgkJCQkjcjcgPSBCTl9CSVRTMi1pLiBzbyByNz1pCiAJY21waQkwLDAscjcsMAkJIyBpcyAoaSA9PSAwKT8KLQliYwlCT19JRixDUjBfRVEsTHBwY2FzbV9kaXY0CisJYmVxCUxwcGNhc21fZGl2NAogCSRTSEwJcjMscjMscjcJCSMgaCA9IChoPDwgaSkKIAkkU0hSCXI4LHI0LHI4CQkjIHI4ID0gKGwgPj4gQk5fQklUUzIgLWkpCiAJJFNITAlyNSxyNSxyNwkJIyBkPDw9aQpAQCAtMTc0MSw3ICsxNjUxLDcgQEAKIAkkU0hSSQlyMTEscjQsYCRCSVRTLzJgCSNyMTE9IChsJkJOX01BU0syaCk+PkJOX0JJVFM0CiAJCQkJCSMgY29tcHV0ZSBoZXJlIGZvciBpbm5lcmxvb3AuCiAJJFVDTVAJMCxyOCxyOQkJCSMgaXMgKGg+PkJOX0JJVFM0KT09ZGgKLQliYwlCT19JRl9OT1QsQ1IwX0VRLExwcGNhc21fZGl2NQkjIGdvdG8gTHBwY2FzbV9kaXY1IGlmIG5vdAorCWJuZQlMcHBjYXNtX2RpdjUJCSMgZ290byBMcHBjYXNtX2RpdjUgaWYgbm90CiAKIAlsaQlyOCwtMQogCSRDTFJVCXI4LHI4LGAkQklUUy8yYAkJI3EgPSBCTl9NQVNLMmwgCkBAIC0xNzYyLDkgKzE2NzIsOSBAQAogCQkJCQkjIHRoZSBmb2xsb3dpbmcgMiBpbnN0cnVjdGlvbnMgZG8gdGhhdAogCSRTSExJCXI3LHIxMCxgJEJJVFMvMmAJIyByNyA9ICh0PDxCTl9CSVRTNCkKIAlvcglyNyxyNyxyMTEJCSMgcjd8PSgobCZCTl9NQVNLMmgpPj5CTl9CSVRTNCkKLQkkVUNNUAkxLHI2LHI3CQkJIyBjb21wYXJlICh0bCA8PSByNykKLQliYwlCT19JRl9OT1QsQ1IwX0VRLExwcGNhc21fZGl2aW5uZXJleGl0Ci0JYmMJQk9fSUZfTk9ULENSMV9GRVgsTHBwY2FzbV9kaXZpbm5lcmV4aXQKKwkkVUNNUAljcjEscjYscjcJCSMgY29tcGFyZSAodGwgPD0gcjcpCisJYm5lCUxwcGNhc21fZGl2aW5uZXJleGl0CisJYmxlCWNyMSxMcHBjYXNtX2RpdmlubmVyZXhpdAogCWFkZGkJcjgscjgsLTEJCSNxLS0KIAlzdWJmCXIxMixyOSxyMTIJCSN0aCAtPWRoCiAJJENMUlUJcjEwLHI1LGAkQklUUy8yYAkjcjEwPWRsLiB0IGlzIG5vIGxvbmdlciBuZWVkZWQgaW4gbG9vcC4KQEAgLTE3NzMsMTQgKzE2ODMsMTQgQEAKIExwcGNhc21fZGl2aW5uZXJleGl0OgogCSRTSFJJCXIxMCxyNixgJEJJVFMvMmAJI3Q9KHRsPj5CTl9CSVRTNCkKIAkkU0hMSQlyMTEscjYsYCRCSVRTLzJgCSN0bD0odGw8PEJOX0JJVFM0KSZCTl9NQVNLMmg7Ci0JJFVDTVAJMSxyNCxyMTEJCSMgY29tcGFyZSBsIGFuZCB0bAorCSRVQ01QCWNyMSxyNCxyMTEJCSMgY29tcGFyZSBsIGFuZCB0bAogCWFkZAlyMTIscjEyLHIxMAkJIyB0aCs9dAotCWJjCUJPX0lGX05PVCxDUjFfRlgsTHBwY2FzbV9kaXY3ICAjIGlmIChsPj10bCkgZ290byBMcHBjYXNtX2RpdjcKKwliZ2UJY3IxLExwcGNhc21fZGl2NwkjIGlmIChsPj10bCkgZ290byBMcHBjYXNtX2RpdjcKIAlhZGRpCXIxMixyMTIsMQkJIyB0aCsrCiBMcHBjYXNtX2Rpdjc6CiAJc3ViZglyMTEscjExLHI0CQkjcjExPWwtdGwKLQkkVUNNUAkxLHIzLHIxMgkJI2NvbXBhcmUgaCBhbmQgdGgKLQliYwlCT19JRl9OT1QsQ1IxX0ZYLExwcGNhc21fZGl2OAkjaWYgKGg+PXRoKSBnb3RvIExwcGNhc21fZGl2OAorCSRVQ01QCWNyMSxyMyxyMTIJCSNjb21wYXJlIGggYW5kIHRoCisJYmdlCWNyMSxMcHBjYXNtX2RpdjgJI2lmIChoPj10aCkgZ290byBMcHBjYXNtX2RpdjgKIAlhZGRpCXI4LHI4LC0xCQkjIHEtLQogCWFkZAlyMyxyNSxyMwkJIyBoKz1kCiBMcHBjYXNtX2Rpdjg6CkBAIC0xNzkxLDEyICsxNzAxLDEyIEBACiAJCQkJCSMgdGhlIGZvbGxvd2luZyAyIGluc3RydWN0aW9ucyB3aWxsIGRvIHRoaXMuCiAJJElOU1IJcjExLHIxMixgJEJJVFMvMmAsYCRCSVRTLzJgCSMgcjExIGlzIHRoZSB2YWx1ZSB3ZSB3YW50IHJvdGF0ZWQgJEJJVFMvMi4KIAkkUk9UTAlyMyxyMTEsYCRCSVRTLzJgCSMgcm90YXRlIGJ5ICRCSVRTLzIgYW5kIHN0b3JlIGluIHIzCi0JYmMJQk9fZENUUl9aRVJPLENSMF9FUSxMcHBjYXNtX2RpdjkjaWYgKGNvdW50PT0wKSBicmVhayA7CisJYmR6CUxwcGNhc21fZGl2OQkJI2lmIChjb3VudD09MCkgYnJlYWsgOwogCSRTSExJCXIwLHI4LGAkQklUUy8yYAkJI3JldCA9cTw8Qk5fQklUUzQKIAliCUxwcGNhc21fZGl2b3V0ZXJsb29wCiBMcHBjYXNtX2Rpdjk6CiAJb3IJcjMscjgscjAKLQliY2xyCUJPX0FMV0FZUyxDUjBfTFQKKwlibHIKIAkubG9uZwkweDAwMDAwMDAwCiAKICMKQEAgLTE4MjIsNyArMTczMiw3IEBACiAjCU5vIHVucm9sbGluZyBkb25lIGhlcmUuIE5vdCBwZXJmb3JtYW5jZSBjcml0aWNhbC4KIAogCWFkZGljLglyNSxyNSwwCQkJI3Rlc3QgcjUuCi0JYmMJQk9fSUYsQ1IwX0VRLExwcGNhc21fc3FyX2FkaW9zCisJYmVxCUxwcGNhc21fc3FyX2FkaW9zCiAJYWRkaQlyNCxyNCwtJEJOU1oKIAlhZGRpCXIzLHIzLC0kQk5TWgogCW10Y3RyCXI1CkBAIC0xODMzLDkgKzE3NDMsOSBAQAogCSRVTVVMSCAgcjgscjYscjYKIAkkU1RVCXI3LCRCTlNaKHIzKQogCSRTVFUJcjgsJEJOU1oocjMpCi0JYmMJQk9fZENUUl9OWkVSTyxDUjBfRVEsTHBwY2FzbV9zcXJfbWFpbmxvb3AKKwliZG56LQlMcHBjYXNtX3Nxcl9tYWlubG9vcAogTHBwY2FzbV9zcXJfYWRpb3M6CQotCWJjbHIJQk9fQUxXQVlTLENSMF9MVAorCWJscgogCS5sb25nCTB4MDAwMDAwMDAKIAogCkBAIC0xODU4LDcgKzE3NjgsNyBAQAogCXhvcglyMCxyMCxyMAogCXhvcglyMTIscjEyLHIxMgkJIyB1c2VkIGZvciBjYXJyeQogCXJsd2lubS4JcjcscjUsMzAsMiwzMQkJIyBudW0gPj4gMgotCWJjCUJPX0lGLENSMF9FUSxMcHBjYXNtX213X1JFTQorCWJlcQlMcHBjYXNtX213X1JFTQogCW10Y3RyCXI3CiBMcHBjYXNtX213X0xPT1A6CQogCQkJCQkjbXVsKHJwWzBdLGFwWzBdLHcsYzEpOwpAQCAtMTg5NiwxMSArMTgwNiwxMSBAQAogCQogCWFkZGkJcjMscjMsYDQqJEJOU1pgCiAJYWRkaQlyNCxyNCxgNCokQk5TWmAKLQliYwlCT19kQ1RSX05aRVJPLENSMF9FUSxMcHBjYXNtX213X0xPT1AKKwliZG56LQlMcHBjYXNtX213X0xPT1AKIAogTHBwY2FzbV9td19SRU06CiAJYW5kaS4JcjUscjUsMHgzCi0JYmMJQk9fSUYsQ1IwX0VRLExwcGNhc21fbXdfT1ZFUgorCWJlcQlMcHBjYXNtX213X09WRVIKIAkJCQkJI211bChycFswXSxhcFswXSx3LGMxKTsKIAkkTEQJcjgsYDAqJEJOU1pgKHI0KQogCSRVTVVMTAlyOSxyNixyOApAQCAtMTkxMiw3ICsxODIyLDcgQEAKIAkKIAlhZGRpCXI1LHI1LC0xCiAJY21wbGkJMCwwLHI1LDAKLQliYwlCT19JRixDUjBfRVEsTHBwY2FzbV9td19PVkVSCisJYmVxCUxwcGNhc21fbXdfT1ZFUgogCiAJCiAJCQkJCSNtdWwocnBbMV0sYXBbMV0sdyxjMSk7CkBAIC0xOTI2LDcgKzE4MzYsNyBAQAogCQogCWFkZGkJcjUscjUsLTEKIAljbXBsaQkwLDAscjUsMAotCWJjCUJPX0lGLENSMF9FUSxMcHBjYXNtX213X09WRVIKKwliZXEJTHBwY2FzbV9td19PVkVSCiAJCiAJCQkJCSNtdWxfYWRkKHJwWzJdLGFwWzJdLHcsYzEpOwogCSRMRAlyOCxgMiokQk5TWmAocjQpCkBAIC0xOTM5LDcgKzE4NDksNyBAQAogCQkKIExwcGNhc21fbXdfT1ZFUjoJCiAJYWRkaQlyMyxyMTIsMAotCWJjbHIJQk9fQUxXQVlTLENSMF9MVAorCWJscgogCS5sb25nCTB4MDAwMDAwMDAKIAogIwpAQCAtMTk2NCw3ICsxODc0LDcgQEAKIAl4b3IJcjAscjAscjAJCSNyMCA9IDAKIAl4b3IJcjEyLHIxMixyMTIgIAkJI3IxMiA9IDAgLiB1c2VkIGZvciBjYXJyeQkJCiAJcmx3aW5tLglyNyxyNSwzMCwyLDMxCQkjIG51bSA+PiAyCi0JYmMJQk9fSUYsQ1IwX0VRLExwcGNhc21fbWF3X2xlZnRvdmVyCSMgaWYgKG51bSA8IDQpIGdvIExQUENBU01fbWF3X2xlZnRvdmVyCisJYmVxCUxwcGNhc21fbWF3X2xlZnRvdmVyCSMgaWYgKG51bSA8IDQpIGdvIExQUENBU01fbWF3X2xlZnRvdmVyCiAJbXRjdHIJcjcKIExwcGNhc21fbWF3X21haW5sb29wOgkKIAkJCQkJI211bF9hZGQocnBbMF0sYXBbMF0sdyxjMSk7CkBAIC0yMDE3LDExICsxOTI3LDExIEBACiAJJFNUCXIxMSxgMyokQk5TWmAocjMpCiAJYWRkaQlyMyxyMyxgNCokQk5TWmAKIAlhZGRpCXI0LHI0LGA0KiRCTlNaYAotCWJjCUJPX2RDVFJfTlpFUk8sQ1IwX0VRLExwcGNhc21fbWF3X21haW5sb29wCisJYmRuei0JTHBwY2FzbV9tYXdfbWFpbmxvb3AKIAkKIExwcGNhc21fbWF3X2xlZnRvdmVyOgogCWFuZGkuCXI1LHI1LDB4MwotCWJjCUJPX0lGLENSMF9FUSxMcHBjYXNtX21hd19hZGlvcworCWJlcQlMcHBjYXNtX21hd19hZGlvcwogCWFkZGkJcjMscjMsLSRCTlNaCiAJYWRkaQlyNCxyNCwtJEJOU1oKIAkJCQkJI211bF9hZGQocnBbMF0sYXBbMF0sdyxjMSk7CkBAIC0yMDM2LDcgKzE5NDYsNyBAQAogCWFkZHplCXIxMixyMTAKIAkkU1QJcjksMChyMykKIAkKLQliYwlCT19kQ1RSX1pFUk8sQ1IwX0VRLExwcGNhc21fbWF3X2FkaW9zCisJYmR6CUxwcGNhc21fbWF3X2FkaW9zCiAJCQkJCSNtdWxfYWRkKHJwWzFdLGFwWzFdLHcsYzEpOwogCSRMRFUJcjgsJEJOU1oocjQpCQogCSRVTVVMTAlyOSxyNixyOApAQCAtMjA0OCw3ICsxOTU4LDcgQEAKIAlhZGR6ZQlyMTIscjEwCiAJJFNUCXI5LDAocjMpCiAJCi0JYmMJQk9fZENUUl9aRVJPLENSMF9FUSxMcHBjYXNtX21hd19hZGlvcworCWJkeglMcHBjYXNtX21hd19hZGlvcwogCQkJCQkjbXVsX2FkZChycFsyXSxhcFsyXSx3LGMxKTsKIAkkTERVCXI4LCRCTlNaKHI0KQogCSRVTVVMTAlyOSxyNixyOApAQCAtMjA2MiwxNyArMTk3MiwxMCBAQAogCQkKIExwcGNhc21fbWF3X2FkaW9zOgkKIAlhZGRpCXIzLHIxMiwwCi0JYmNscglCT19BTFdBWVMsQ1IwX0xUCisJYmxyCiAJLmxvbmcJMHgwMDAwMDAwMAogCS5hbGlnbgk0CiBFT0YKLQkkZGF0YSA9fiBzL1xgKFteXGBdKilcYC9ldmFsICQxL2dlbTsKLQotCSMgaWYgc29tZSBhc3NlbWJsZXIgY2hva2VzIG9uIHNvbWUgc2ltcGxpZmllZCBtbmVtb25pYywKLQkjIHRoaXMgaXMgdGhlIHNwb3QgdG8gZml4IGl0IHVwLCBlLmcuOgotCSMgR05VIGFzIGRvZXNuJ3Qgc2VlbSB0byBhY2NlcHQgY21wbHcsIDMyLWJpdCB1bnNpZ25lZCBjb21wYXJlCi0JJGRhdGEgPX4gcy9eKFxzKiljbXBsdyhccyspKFteLF0rKSwoLiopLyQxY21wbCQyJDMsMCwkNC9nbTsKLQkjIGFzc2VtYmxlciBYIGRvZXNuJ3QgYWNjZXB0IGxpLCBsb2FkIGltbWVkaWF0ZSB2YWx1ZQotCSMkZGF0YSA9fiBzL14oXHMqKWxpKFxzKykoW14sXSspLCguKikvJDFhZGRpJDIkMywwLCQ0L2dtOwotCXJldHVybigkZGF0YSk7Ci19CiskZGF0YSA9fiBzL1xgKFteXGBdKilcYC9ldmFsICQxL2dlbTsKK3ByaW50ICRkYXRhOworY2xvc2UgU1RET1VUOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2JuL2FzbS9wcGM2NC1tb250LnBsIGIvY3J5cHRvL2JuL2FzbS9wcGM2NC1tb250LnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NDliMzUKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vYm4vYXNtL3BwYzY0LW1vbnQucGwKQEAgLTAsMCArMSw5MTggQEAKKyMhL3Vzci9iaW4vZW52IHBlcmwKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPiBmb3IgdGhlIE9wZW5TU0wKKyMgcHJvamVjdC4gVGhlIG1vZHVsZSBpcywgaG93ZXZlciwgZHVhbCBsaWNlbnNlZCB1bmRlciBPcGVuU1NMIGFuZAorIyBDUllQVE9HQU1TIGxpY2Vuc2VzIGRlcGVuZGluZyBvbiB3aGVyZSB5b3Ugb2J0YWluIGl0LiBGb3IgZnVydGhlcgorIyBkZXRhaWxzIHNlZSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL35hcHByby9jcnlwdG9nYW1zLy4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyBEZWNlbWJlciAyMDA3CisKKyMgVGhlIHJlYXNvbiBmb3IgdW5kZXJ0YWtlbiBlZmZvcnQgaXMgYmFzaWNhbGx5IGZvbGxvd2luZy4gRXZlbiB0aG91Z2gKKyMgUG93ZXIgNiBDUFUgb3BlcmF0ZXMgYXQgaW5jcmVkaWJsZSA0LjdHSHogY2xvY2sgZnJlcXVlbmN5LCBpdHMgUEtJCisjIHBlcmZvcm1hbmNlIHdhcyBvYnNlcnZlZCB0byBiZSBsZXNzIHRoYW4gaW1wcmVzc2l2ZSwgZXNzZW50aWFsbHkgYXMKKyMgZmFzdCBhcyAxLjhHSHogUFBDOTcwLCBvciAyLjYgdGltZXMoISkgc2xvd2VyIHRoYW4gb25lIHdvdWxkIGhvcGUuCisjIFdlbGwsIGl0J3Mgbm90IHN1cnByaXNpbmcgdGhhdCBJQk0gaGFkIHRvIG1ha2Ugc29tZSBzYWNyaWZpY2VzIHRvCisjIGJvb3N0IHRoZSBjbG9jayBmcmVxdWVuY3kgdGhhdCBtdWNoLCBidXQgbm8gb3ZlcmFsbCBpbXByb3ZlbWVudD8KKyMgSGF2aW5nIG9ic2VydmVkIGhvdyBtdWNoIGRpZmZlcmVuY2UgZGlkIHN3aXRjaGluZyB0byBGUFUgbWFrZSBvbgorIyBVbHRyYVNQQVJDLCBwbGF5aW5nIHNhbWUgc3R1bnQgb24gUG93ZXIgNiBhcHBlYXJlZCBhcHByb3ByaWF0ZS4uLgorIyBVbmZvcnR1bmF0ZWx5IHRoZSByZXN1bHRpbmcgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgaXMgbm90IGFzCisjIGltcHJlc3NpdmUsIH4zMCUsIGFuZCBpbiBhYnNvbHV0ZSB0ZXJtcyBpcyBzdGlsbCB2ZXJ5IGZhciBmcm9tIHdoYXQKKyMgb25lIHdvdWxkIGV4cGVjdCBmcm9tIDQuN0dIeiBDUFUuIFRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgSSdtIGRvaW5nCisjIHNvbWV0aGluZyB3cm9uZywgYnV0IGluIHRoZSBsYWNrIG9mIGFzc2VtYmxlciBsZXZlbCBtaWNyby1wcm9maWxpbmcKKyMgZGF0YSBvciBhdCBsZWFzdCBkZWNlbnQgcGxhdGZvcm0gZ3VpZGUgSSBjYW4ndCB0ZWxsLi4uIE9yIGJldHRlcgorIyByZXN1bHRzIG1pZ2h0IGJlIGFjaGlldmVkIHdpdGggVk1YLi4uIEFueXdheSwgdGhpcyBtb2R1bGUgcHJvdmlkZXMKKyMgKndvcnNlKiBwZXJmb3JtYW5jZSBvbiBvdGhlciBQb3dlclBDIGltcGxlbWVudGF0aW9ucywgfjQwLTE1JSBzbG93ZXIKKyMgb24gUFBDOTcwIGRlcGVuZGluZyBvbiBrZXkgbGVuZ3RoIGFuZCB+NDAlIHNsb3dlciBvbiBQb3dlciA1IGZvciBhbGwKKyMga2V5IGxlbmd0aHMuIEFzIGl0J3Mgb2J2aW91c2x5IGluYXBwcm9wcmlhdGUgYXMgImJlc3QgYWxsLXJvdW5kIgorIyBhbHRlcm5hdGl2ZSwgaXQgaGFzIHRvIGJlIGNvbXBsZW1lbnRlZCB3aXRoIHJ1bi10aW1lIENQVSBmYW1pbHkKKyMgZGV0ZWN0aW9uLiBPaCEgSXQgc2hvdWxkIGFsc28gYmUgbm90ZWQgdGhhdCB1bmxpa2Ugb3RoZXIgUG93ZXJQQworIyBpbXBsZW1lbnRhdGlvbiBJQUxVIHBwYy1tb250LnBsIG1vZHVsZSBwZXJmb3JtcyAqc3Vib3B0aW1hbHkqIG9uCisjID49MTAyNC1iaXQga2V5IGxlbmd0aHMgb24gUG93ZXIgNi4gSXQgc2hvdWxkIGFsc28gYmUgbm90ZWQgdGhhdAorIyAqZXZlcnl0aGluZyogc2FpZCBzbyBmYXIgYXBwbGllcyB0byA2NC1iaXQgYnVpbGRzISBBcyBmYXIgYXMgMzItYml0CisjIGFwcGxpY2F0aW9uIGV4ZWN1dGVkIG9uIDY0LWJpdCBDUFUgZ29lcywgdGhpcyBtb2R1bGUgaXMgbGlrZWx5IHRvCisjIGJlY29tZSBwcmVmZXJyZWQgY2hvaWNlLCBiZWNhdXNlIGl0J3MgZWFzeSB0byBhZGFwdCBpdCBmb3Igc3VjaAorIyBjYXNlIGFuZCAqaXMqIGZhc3RlciB0aGFuIDMyLWJpdCBwcGMtbW9udC5wbCBvbiAqYWxsKiBwcm9jZXNzb3JzLgorCisjIEZlYnJ1YXJ5IDIwMDgKKworIyBNaWNyby1wcm9maWxpbmcgYXNzaXN0ZWQgb3B0aW1pemF0aW9uIHJlc3VsdHMgaW4gfjE1JSBpbXByb3ZlbWVudAorIyBvdmVyIG9yaWdpbmFsIHBwYzY0LW1vbnQucGwgdmVyc2lvbiwgb3Igb3ZlcmFsbCB+NTAlIGltcHJvdmVtZW50CisjIG92ZXIgcHBjLnBsIG1vZHVsZSBvbiBQb3dlciA2LiBJZiBjb21wYXJlZCB0byBwcGMtbW9udC5wbCBvbiBzYW1lCisjIFBvd2VyIDYgQ1BVLCB0aGlzIG1vZHVsZSBpcyA1LTE1MCUgZmFzdGVyIGRlcGVuZGluZyBvbiBrZXkgbGVuZ3RoLAorIyBbaGVyZWFmdGVyXSBtb3JlIGZvciBsb25nZXIga2V5cy4gQnV0IGlmIGNvbXBhcmVkIHRvIHBwYy1tb250LnBsCisjIG9uIDEuOEdIeiBQUEM5NzAsIGl0J3Mgb25seSA1LTU1JSBmYXN0ZXIuIFN0aWxsIGZhciBmcm9tIGltcHJlc3NpdmUKKyMgaW4gYWJzb2x1dGUgdGVybXMsIGJ1dCBpdCdzIGFwcGFyZW50bHkgdGhlIHdheSBQb3dlciA2IGlzLi4uCisKKyRmbGF2b3VyID0gc2hpZnQ7CisKK2lmICgkZmxhdm91ciA9fiAvMzIvKSB7CisJJFNJWkVfVD00OworCSRSWk9ORT0JMjI0OworCSRGUkFNRT0JJFNJWkVfVCoxMis4KjEyOworCSRmbmFtZT0JImJuX211bF9tb250X3BwYzY0IjsKKworCSRTVFVYPQkic3R3dXgiOwkjIHN0b3JlIGluZGV4ZWQgYW5kIHVwZGF0ZQorCSRQVVNIPQkic3R3IjsKKwkkUE9QPQkibHd6IjsKKwlkaWUgIm5vdCBpbXBsZW1lbnRlZCB5ZXQiOworfSBlbHNpZiAoJGZsYXZvdXIgPX4gLzY0LykgeworCSRTSVpFX1Q9ODsKKwkkUlpPTkU9CTI4ODsKKwkkRlJBTUU9CSRTSVpFX1QqMTIrOCoxMjsKKwkkZm5hbWU9CSJibl9tdWxfbW9udCI7CisKKwkjIHNhbWUgYXMgYWJvdmUsIGJ1dCA2NC1iaXQgbW5lbW9uaWNzLi4uCisJJFNUVVg9CSJzdGR1eCI7CSMgc3RvcmUgaW5kZXhlZCBhbmQgdXBkYXRlCisJJFBVU0g9CSJzdGQiOworCSRQT1A9CSJsZCI7Cit9IGVsc2UgeyBkaWUgIm5vbnNlbnNlICRmbGF2b3VyIjsgfQorCiskMCA9fiBtLyguKltcL1xcXSlbXlwvXFxdKyQvOyAkZGlyPSQxOworKCAkeGxhdGU9IiR7ZGlyfXBwYy14bGF0ZS5wbCIgYW5kIC1mICR4bGF0ZSApIG9yCisoICR4bGF0ZT0iJHtkaXJ9Li4vLi4vcGVybGFzbS9wcGMteGxhdGUucGwiIGFuZCAtZiAkeGxhdGUpIG9yCitkaWUgImNhbid0IGxvY2F0ZSBwcGMteGxhdGUucGwiOworCitvcGVuIFNURE9VVCwifCAkXlggJHhsYXRlICRmbGF2b3VyICIuc2hpZnQgfHwgZGllICJjYW4ndCBjYWxsICR4bGF0ZTogJCEiOworCiskRlJBTUU9KCRGUkFNRSs2MykmfjYzOworJFRSQU5TRkVSPTE2Kjg7CisKKyRjYXJyeT0icjAiOworJHNwPSJyMSI7CiskdG9jPSJyMiI7CiskcnA9InIzIjsJJG92Zj0icjMiOworJGFwPSJyNCI7CiskYnA9InI1IjsKKyRucD0icjYiOworJG4wPSJyNyI7CiskbnVtPSJyOCI7CiskcnA9InI5IjsJIyAkcnAgaXMgcmVhc3NpZ25lZAorJHRwPSJyMTAiOworJGo9InIxMSI7CiskaT0icjEyIjsKKyMgbm9uLXZvbGF0aWxlIHJlZ2lzdGVycworJG5hcF9kPSJyMTQiOwkjIGludGVybGVhdmVkIGFwIGFuZCBucCBpbiBkb3VibGUgZm9ybWF0CiskYTA9InIxNSI7CSMgYXBbMF0KKyR0MD0icjE2IjsJIyB0ZW1wb3JhcnkgcmVnaXN0ZXJzCiskdDE9InIxNyI7CiskdDI9InIxOCI7CiskdDM9InIxOSI7CiskdDQ9InIyMCI7CiskdDU9InIyMSI7CiskdDY9InIyMiI7CiskdDc9InIyMyI7CisKKyMgUFBDIG9mZmVycyBlbm91Z2ggcmVnaXN0ZXIgYmFuayBjYXBhY2l0eSB0byB1bnJvbGwgaW5uZXIgbG9vcHMgdHdpY2UKKyMKKyMgICAgIC4uQTNBMkExQTAKKyMgICAgICAgICAgIGRjYmEKKyMgICAgLS0tLS0tLS0tLS0KKyMgICAgICAgICAgICBBMGEKKyMgICAgICAgICAgIEEwYgorIyAgICAgICAgICBBMGMKKyMgICAgICAgICBBMGQKKyMgICAgICAgICAgQTFhCisjICAgICAgICAgQTFiCisjICAgICAgICBBMWMKKyMgICAgICAgQTFkCisjICAgICAgICBBMmEKKyMgICAgICAgQTJiCisjICAgICAgQTJjCisjICAgICBBMmQKKyMgICAgICBBM2EKKyMgICAgIEEzYgorIyAgICBBM2MKKyMgICBBM2QKKyMgICAgLi5hCisjICAgLi5iCisjCiskYmE9ImYwIjsJJGJiPSJmMSI7CSRiYz0iZjIiOwkkYmQ9ImYzIjsKKyRuYT0iZjQiOwkkbmI9ImY1IjsJJG5jPSJmNiI7CSRuZD0iZjciOworJGRvdGE9ImY4IjsJJGRvdGI9ImY5IjsKKyRBMD0iZjEwIjsJJEExPSJmMTEiOwkkQTI9ImYxMiI7CSRBMz0iZjEzIjsKKyROMD0iZjE0IjsJJE4xPSJmMTUiOwkkTjI9ImYxNiI7CSROMz0iZjE3IjsKKyRUMGE9ImYxOCI7CSRUMGI9ImYxOSI7CiskVDFhPSJmMjAiOwkkVDFiPSJmMjEiOworJFQyYT0iZjIyIjsJJFQyYj0iZjIzIjsKKyRUM2E9ImYyNCI7CSRUM2I9ImYyNSI7CisMCisjIHNwLS0tLS0tLS0tLS0+Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisjCQl8IHNhdmVkIHNwCQkJfAorIwkJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisjCQl8CQkJCXwKKyMJCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworIwkJfCAxMCBzYXZlZCBncHIsIHIxNC1yMjMJCXwKKyMJCS4JCQkJLgorIwkJLgkJCQkuCisjICAgKzEyKnNpemVfdAkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyMJCXwgMTIgc2F2ZWQgZnByLCBmMTQtZjI1CQl8CisjCQkuCQkJCS4KKyMJCS4JCQkJLgorIyAgICsxMio4CSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworIwkJfCBwYWRkaW5nIHRvIDY0IGJ5dGUgYm91bmRhcnkJfAorIwkJLgkJCQkuCisjICAgK1gJCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworIwkJfCAxNiBncHI8LT5mcHIgdHJhbnNmZXIgem9uZQl8CisjCQkuCQkJCS4KKyMJCS4JCQkJLgorIyAgICsxNio4CSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworIwkJfCBfX2ludDY0IHRtcFstMV0JCXwKKyMJCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworIwkJfCBfX2ludDY0IHRtcFtudW1dCQl8CisjCQkuCQkJCS4KKyMJCS4JCQkJLgorIwkJLgkJCQkuCisjICAgKyhudW0rMSkqOAkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyMJCXwgcGFkZGluZyB0byA2NCBieXRlIGJvdW5kYXJ5CXwKKyMJCS4JCQkJLgorIyAgICtYCQkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyMJCXwgZG91YmxlIG5hcF9kWzQqbnVtXQkJfAorIwkJLgkJCQkuCisjCQkuCQkJCS4KKyMJCS4JCQkJLgorIwkJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisMCiskY29kZT08PF9fXzsKKy5tYWNoaW5lICJhbnkiCisudGV4dAorCisuZ2xvYmwJLiRmbmFtZQorLmFsaWduCTUKKy4kZm5hbWU6CisJY21wd2kJJG51bSw0CisJbXIJJHJwLHIzCQk7ICRycCBpcyByZWFzc2lnbmVkCisJbGkJcjMsMAkJOyBwb3NzaWJsZSAibm90IGhhbmRsZWQiIHJldHVybiBjb2RlCisJYmx0bHItCisJYW5kaS4JcjAsJG51bSwxCTsgJG51bSBoYXMgdG8gYmUgZXZlbgorCWJuZWxyLQorCisJc2x3aQkkbnVtLCRudW0sMwk7IG51bSo9OAorCWxpCSRpLC00MDk2CisJc2x3aQkkdHAsJG51bSwyCTsgcGxhY2UgZm9yIHthbn1wX3tsaH1bbnVtXSwgaS5lLiA0Km51bQorCWFkZAkkdHAsJHRwLCRudW0JOyBwbGFjZSBmb3IgdHBbbnVtKzFdCisJYWRkaQkkdHAsJHRwLGAkRlJBTUUrJFRSQU5TRkVSKzgrNjQrJFJaT05FYAorCXN1YmYJJHRwLCR0cCwkc3AJOyAkc3AtJHRwCisJYW5kCSR0cCwkdHAsJGkJOyBtaW5pbWl6ZSBUTEIgdXNhZ2UKKwlzdWJmCSR0cCwkc3AsJHRwCTsgJHRwLSRzcAorCSRTVFVYCSRzcCwkc3AsJHRwCTsgYWxsb2NhCisKKwkkUFVTSAlyMTQsYDIqJFNJWkVfVGAoJHNwKQorCSRQVVNICXIxNSxgMyokU0laRV9UYCgkc3ApCisJJFBVU0gJcjE2LGA0KiRTSVpFX1RgKCRzcCkKKwkkUFVTSAlyMTcsYDUqJFNJWkVfVGAoJHNwKQorCSRQVVNICXIxOCxgNiokU0laRV9UYCgkc3ApCisJJFBVU0gJcjE5LGA3KiRTSVpFX1RgKCRzcCkKKwkkUFVTSAlyMjAsYDgqJFNJWkVfVGAoJHNwKQorCSRQVVNICXIyMSxgOSokU0laRV9UYCgkc3ApCisJJFBVU0gJcjIyLGAxMCokU0laRV9UYCgkc3ApCisJJFBVU0gJcjIzLGAxMSokU0laRV9UYCgkc3ApCisJc3RmZAlmMTQsYDEyKiRTSVpFX1QrMGAoJHNwKQorCXN0ZmQJZjE1LGAxMiokU0laRV9UKzhgKCRzcCkKKwlzdGZkCWYxNixgMTIqJFNJWkVfVCsxNmAoJHNwKQorCXN0ZmQJZjE3LGAxMiokU0laRV9UKzI0YCgkc3ApCisJc3RmZAlmMTgsYDEyKiRTSVpFX1QrMzJgKCRzcCkKKwlzdGZkCWYxOSxgMTIqJFNJWkVfVCs0MGAoJHNwKQorCXN0ZmQJZjIwLGAxMiokU0laRV9UKzQ4YCgkc3ApCisJc3RmZAlmMjEsYDEyKiRTSVpFX1QrNTZgKCRzcCkKKwlzdGZkCWYyMixgMTIqJFNJWkVfVCs2NGAoJHNwKQorCXN0ZmQJZjIzLGAxMiokU0laRV9UKzcyYCgkc3ApCisJc3RmZAlmMjQsYDEyKiRTSVpFX1QrODBgKCRzcCkKKwlzdGZkCWYyNSxgMTIqJFNJWkVfVCs4OGAoJHNwKQorCisJbGQJJGEwLDAoJGFwKQk7IHB1bGwgYXBbMF0gdmFsdWUKKwlsZAkkbjAsMCgkbjApCTsgcHVsbCBuMFswXSB2YWx1ZQorCWxkCSR0MywwKCRicCkJOyBicFswXQorCisJYWRkaQkkdHAsJHNwLGAkRlJBTUUrJFRSQU5TRkVSKzgrNjRgCisJbGkJJGksLTY0CisJYWRkCSRuYXBfZCwkdHAsJG51bQorCWFuZAkkbmFwX2QsJG5hcF9kLCRpCTsgYWxpZ24gdG8gNjQgYnl0ZXMKKwwKKwltdWxsZAkkdDcsJGEwLCR0Mwk7IGFwWzBdKmJwWzBdCisJOyBuYXBfZCBpcyBvZmYgYnkgMSwgYmVjYXVzZSBpdCdzIHVzZWQgd2l0aCBzdGZkdS9sZmR1CisJYWRkaQkkbmFwX2QsJG5hcF9kLC04CisJc3J3aQkkaiwkbnVtLGAzKzFgCTsgY291bnRlciByZWdpc3RlciwgbnVtLzIKKwltdWxsZAkkdDcsJHQ3LCRuMAk7IHRwWzBdKm4wCisJYWRkaQkkaiwkaiwtMQorCWFkZGkJJHRwLCRzcCxgJEZSQU1FKyRUUkFOU0ZFUi04YAorCWxpCSRjYXJyeSwwCisJbXRjdHIJJGoKKworCTsgdHJhbnNmZXIgYnBbMF0gdG8gRlBVIGFzIDR4MTYtYml0IHZhbHVlcworCWV4dHJkaQkkdDAsJHQzLDE2LDQ4CisJZXh0cmRpCSR0MSwkdDMsMTYsMzIKKwlleHRyZGkJJHQyLCR0MywxNiwxNgorCWV4dHJkaQkkdDMsJHQzLDE2LDAKKwlzdGQJJHQwLGAkRlJBTUUrMGAoJHNwKQorCXN0ZAkkdDEsYCRGUkFNRSs4YCgkc3ApCisJc3RkCSR0MixgJEZSQU1FKzE2YCgkc3ApCisJc3RkCSR0MyxgJEZSQU1FKzI0YCgkc3ApCisJOyB0cmFuc2ZlciAoYXBbMF0qYnBbMF0pKm4wIHRvIEZQVSBhcyA0eDE2LWJpdCB2YWx1ZXMKKwlleHRyZGkJJHQ0LCR0NywxNiw0OAorCWV4dHJkaQkkdDUsJHQ3LDE2LDMyCisJZXh0cmRpCSR0NiwkdDcsMTYsMTYKKwlleHRyZGkJJHQ3LCR0NywxNiwwCisJc3RkCSR0NCxgJEZSQU1FKzMyYCgkc3ApCisJc3RkCSR0NSxgJEZSQU1FKzQwYCgkc3ApCisJc3RkCSR0NixgJEZSQU1FKzQ4YCgkc3ApCisJc3RkCSR0NyxgJEZSQU1FKzU2YCgkc3ApCisJbHd6CSR0MCw0KCRhcCkJCTsgbG9hZCBhW2pdIGFzIDMyLWJpdCB3b3JkIHBhaXIKKwlsd3oJJHQxLDAoJGFwKQorCWx3egkkdDIsMTIoJGFwKQkJOyBsb2FkIGFbaisxXSBhcyAzMi1iaXQgd29yZCBwYWlyCisJbHd6CSR0Myw4KCRhcCkKKwlsd3oJJHQ0LDQoJG5wKQkJOyBsb2FkIG5bal0gYXMgMzItYml0IHdvcmQgcGFpcgorCWx3egkkdDUsMCgkbnApCisJbHd6CSR0NiwxMigkbnApCQk7IGxvYWQgbltqKzFdIGFzIDMyLWJpdCB3b3JkIHBhaXIKKwlsd3oJJHQ3LDgoJG5wKQorCWxmZAkkYmEsYCRGUkFNRSswYCgkc3ApCisJbGZkCSRiYixgJEZSQU1FKzhgKCRzcCkKKwlsZmQJJGJjLGAkRlJBTUUrMTZgKCRzcCkKKwlsZmQJJGJkLGAkRlJBTUUrMjRgKCRzcCkKKwlsZmQJJG5hLGAkRlJBTUUrMzJgKCRzcCkKKwlsZmQJJG5iLGAkRlJBTUUrNDBgKCRzcCkKKwlsZmQJJG5jLGAkRlJBTUUrNDhgKCRzcCkKKwlsZmQJJG5kLGAkRlJBTUUrNTZgKCRzcCkKKwlzdGQJJHQwLGAkRlJBTUUrNjRgKCRzcCkKKwlzdGQJJHQxLGAkRlJBTUUrNzJgKCRzcCkKKwlzdGQJJHQyLGAkRlJBTUUrODBgKCRzcCkKKwlzdGQJJHQzLGAkRlJBTUUrODhgKCRzcCkKKwlzdGQJJHQ0LGAkRlJBTUUrOTZgKCRzcCkKKwlzdGQJJHQ1LGAkRlJBTUUrMTA0YCgkc3ApCisJc3RkCSR0NixgJEZSQU1FKzExMmAoJHNwKQorCXN0ZAkkdDcsYCRGUkFNRSsxMjBgKCRzcCkKKwlmY2ZpZAkkYmEsJGJhCisJZmNmaWQJJGJiLCRiYgorCWZjZmlkCSRiYywkYmMKKwlmY2ZpZAkkYmQsJGJkCisJZmNmaWQJJG5hLCRuYQorCWZjZmlkCSRuYiwkbmIKKwlmY2ZpZAkkbmMsJG5jCisJZmNmaWQJJG5kLCRuZAorCisJbGZkCSRBMCxgJEZSQU1FKzY0YCgkc3ApCisJbGZkCSRBMSxgJEZSQU1FKzcyYCgkc3ApCisJbGZkCSRBMixgJEZSQU1FKzgwYCgkc3ApCisJbGZkCSRBMyxgJEZSQU1FKzg4YCgkc3ApCisJbGZkCSROMCxgJEZSQU1FKzk2YCgkc3ApCisJbGZkCSROMSxgJEZSQU1FKzEwNGAoJHNwKQorCWxmZAkkTjIsYCRGUkFNRSsxMTJgKCRzcCkKKwlsZmQJJE4zLGAkRlJBTUUrMTIwYCgkc3ApCisJZmNmaWQJJEEwLCRBMAorCWZjZmlkCSRBMSwkQTEKKwlmY2ZpZAkkQTIsJEEyCisJZmNmaWQJJEEzLCRBMworCWZjZmlkCSROMCwkTjAKKwlmY2ZpZAkkTjEsJE4xCisJZmNmaWQJJE4yLCROMgorCWZjZmlkCSROMywkTjMKKwlhZGRpCSRhcCwkYXAsMTYKKwlhZGRpCSRucCwkbnAsMTYKKworCWZtdWwJJFQxYSwkQTEsJGJhCisJZm11bAkkVDFiLCRBMSwkYmIKKwlzdGZkCSRBMCw4KCRuYXBfZCkJCTsgc2F2ZSBhW2pdIGluIGRvdWJsZSBmb3JtYXQKKwlzdGZkCSRBMSwxNigkbmFwX2QpCisJZm11bAkkVDJhLCRBMiwkYmEKKwlmbXVsCSRUMmIsJEEyLCRiYgorCXN0ZmQJJEEyLDI0KCRuYXBfZCkJCTsgc2F2ZSBhW2orMV0gaW4gZG91YmxlIGZvcm1hdAorCXN0ZmQJJEEzLDMyKCRuYXBfZCkKKwlmbXVsCSRUM2EsJEEzLCRiYQorCWZtdWwJJFQzYiwkQTMsJGJiCisJc3RmZAkkTjAsNDAoJG5hcF9kKQkJOyBzYXZlIG5bal0gaW4gZG91YmxlIGZvcm1hdAorCXN0ZmQJJE4xLDQ4KCRuYXBfZCkKKwlmbXVsCSRUMGEsJEEwLCRiYQorCWZtdWwJJFQwYiwkQTAsJGJiCisJc3RmZAkkTjIsNTYoJG5hcF9kKQkJOyBzYXZlIG5baisxXSBpbiBkb3VibGUgZm9ybWF0CisJc3RmZHUJJE4zLDY0KCRuYXBfZCkKKworCWZtYWRkCSRUMWEsJEEwLCRiYywkVDFhCisJZm1hZGQJJFQxYiwkQTAsJGJkLCRUMWIKKwlmbWFkZAkkVDJhLCRBMSwkYmMsJFQyYQorCWZtYWRkCSRUMmIsJEExLCRiZCwkVDJiCisJZm1hZGQJJFQzYSwkQTIsJGJjLCRUM2EKKwlmbWFkZAkkVDNiLCRBMiwkYmQsJFQzYgorCWZtdWwJJGRvdGEsJEEzLCRiYworCWZtdWwJJGRvdGIsJEEzLCRiZAorCisJZm1hZGQJJFQxYSwkTjEsJG5hLCRUMWEKKwlmbWFkZAkkVDFiLCROMSwkbmIsJFQxYgorCWZtYWRkCSRUMmEsJE4yLCRuYSwkVDJhCisJZm1hZGQJJFQyYiwkTjIsJG5iLCRUMmIKKwlmbWFkZAkkVDNhLCROMywkbmEsJFQzYQorCWZtYWRkCSRUM2IsJE4zLCRuYiwkVDNiCisJZm1hZGQJJFQwYSwkTjAsJG5hLCRUMGEKKwlmbWFkZAkkVDBiLCROMCwkbmIsJFQwYgorCisJZm1hZGQJJFQxYSwkTjAsJG5jLCRUMWEKKwlmbWFkZAkkVDFiLCROMCwkbmQsJFQxYgorCWZtYWRkCSRUMmEsJE4xLCRuYywkVDJhCisJZm1hZGQJJFQyYiwkTjEsJG5kLCRUMmIKKwlmbWFkZAkkVDNhLCROMiwkbmMsJFQzYQorCWZtYWRkCSRUM2IsJE4yLCRuZCwkVDNiCisJZm1hZGQJJGRvdGEsJE4zLCRuYywkZG90YQorCWZtYWRkCSRkb3RiLCROMywkbmQsJGRvdGIKKworCWZjdGlkCSRUMGEsJFQwYQorCWZjdGlkCSRUMGIsJFQwYgorCWZjdGlkCSRUMWEsJFQxYQorCWZjdGlkCSRUMWIsJFQxYgorCWZjdGlkCSRUMmEsJFQyYQorCWZjdGlkCSRUMmIsJFQyYgorCWZjdGlkCSRUM2EsJFQzYQorCWZjdGlkCSRUM2IsJFQzYgorCisJc3RmZAkkVDBhLGAkRlJBTUUrMGAoJHNwKQorCXN0ZmQJJFQwYixgJEZSQU1FKzhgKCRzcCkKKwlzdGZkCSRUMWEsYCRGUkFNRSsxNmAoJHNwKQorCXN0ZmQJJFQxYixgJEZSQU1FKzI0YCgkc3ApCisJc3RmZAkkVDJhLGAkRlJBTUUrMzJgKCRzcCkKKwlzdGZkCSRUMmIsYCRGUkFNRSs0MGAoJHNwKQorCXN0ZmQJJFQzYSxgJEZSQU1FKzQ4YCgkc3ApCisJc3RmZAkkVDNiLGAkRlJBTUUrNTZgKCRzcCkKKwwKKy5hbGlnbgk1CitMMXN0OgorCWx3egkkdDAsNCgkYXApCQk7IGxvYWQgYVtqXSBhcyAzMi1iaXQgd29yZCBwYWlyCisJbHd6CSR0MSwwKCRhcCkKKwlsd3oJJHQyLDEyKCRhcCkJCTsgbG9hZCBhW2orMV0gYXMgMzItYml0IHdvcmQgcGFpcgorCWx3egkkdDMsOCgkYXApCisJbHd6CSR0NCw0KCRucCkJCTsgbG9hZCBuW2pdIGFzIDMyLWJpdCB3b3JkIHBhaXIKKwlsd3oJJHQ1LDAoJG5wKQorCWx3egkkdDYsMTIoJG5wKQkJOyBsb2FkIG5baisxXSBhcyAzMi1iaXQgd29yZCBwYWlyCisJbHd6CSR0Nyw4KCRucCkKKwlzdGQJJHQwLGAkRlJBTUUrNjRgKCRzcCkKKwlzdGQJJHQxLGAkRlJBTUUrNzJgKCRzcCkKKwlzdGQJJHQyLGAkRlJBTUUrODBgKCRzcCkKKwlzdGQJJHQzLGAkRlJBTUUrODhgKCRzcCkKKwlzdGQJJHQ0LGAkRlJBTUUrOTZgKCRzcCkKKwlzdGQJJHQ1LGAkRlJBTUUrMTA0YCgkc3ApCisJc3RkCSR0NixgJEZSQU1FKzExMmAoJHNwKQorCXN0ZAkkdDcsYCRGUkFNRSsxMjBgKCRzcCkKKwlsZAkkdDAsYCRGUkFNRSswYCgkc3ApCisJbGQJJHQxLGAkRlJBTUUrOGAoJHNwKQorCWxkCSR0MixgJEZSQU1FKzE2YCgkc3ApCisJbGQJJHQzLGAkRlJBTUUrMjRgKCRzcCkKKwlsZAkkdDQsYCRGUkFNRSszMmAoJHNwKQorCWxkCSR0NSxgJEZSQU1FKzQwYCgkc3ApCisJbGQJJHQ2LGAkRlJBTUUrNDhgKCRzcCkKKwlsZAkkdDcsYCRGUkFNRSs1NmAoJHNwKQorCWxmZAkkQTAsYCRGUkFNRSs2NGAoJHNwKQorCWxmZAkkQTEsYCRGUkFNRSs3MmAoJHNwKQorCWxmZAkkQTIsYCRGUkFNRSs4MGAoJHNwKQorCWxmZAkkQTMsYCRGUkFNRSs4OGAoJHNwKQorCWxmZAkkTjAsYCRGUkFNRSs5NmAoJHNwKQorCWxmZAkkTjEsYCRGUkFNRSsxMDRgKCRzcCkKKwlsZmQJJE4yLGAkRlJBTUUrMTEyYCgkc3ApCisJbGZkCSROMyxgJEZSQU1FKzEyMGAoJHNwKQorCWZjZmlkCSRBMCwkQTAKKwlmY2ZpZAkkQTEsJEExCisJZmNmaWQJJEEyLCRBMgorCWZjZmlkCSRBMywkQTMKKwlmY2ZpZAkkTjAsJE4wCisJZmNmaWQJJE4xLCROMQorCWZjZmlkCSROMiwkTjIKKwlmY2ZpZAkkTjMsJE4zCisJYWRkaQkkYXAsJGFwLDE2CisJYWRkaQkkbnAsJG5wLDE2CisKKwlmbXVsCSRUMWEsJEExLCRiYQorCWZtdWwJJFQxYiwkQTEsJGJiCisJZm11bAkkVDJhLCRBMiwkYmEKKwlmbXVsCSRUMmIsJEEyLCRiYgorCXN0ZmQJJEEwLDgoJG5hcF9kKQkJOyBzYXZlIGFbal0gaW4gZG91YmxlIGZvcm1hdAorCXN0ZmQJJEExLDE2KCRuYXBfZCkKKwlmbXVsCSRUM2EsJEEzLCRiYQorCWZtdWwJJFQzYiwkQTMsJGJiCisJZm1hZGQJJFQwYSwkQTAsJGJhLCRkb3RhCisJZm1hZGQJJFQwYiwkQTAsJGJiLCRkb3RiCisJc3RmZAkkQTIsMjQoJG5hcF9kKQkJOyBzYXZlIGFbaisxXSBpbiBkb3VibGUgZm9ybWF0CisJc3RmZAkkQTMsMzIoJG5hcF9kKQorCisJZm1hZGQJJFQxYSwkQTAsJGJjLCRUMWEKKwlmbWFkZAkkVDFiLCRBMCwkYmQsJFQxYgorCWZtYWRkCSRUMmEsJEExLCRiYywkVDJhCisJZm1hZGQJJFQyYiwkQTEsJGJkLCRUMmIKKwlzdGZkCSROMCw0MCgkbmFwX2QpCQk7IHNhdmUgbltqXSBpbiBkb3VibGUgZm9ybWF0CisJc3RmZAkkTjEsNDgoJG5hcF9kKQorCWZtYWRkCSRUM2EsJEEyLCRiYywkVDNhCisJZm1hZGQJJFQzYiwkQTIsJGJkLCRUM2IKKwkgYWRkCSR0MCwkdDAsJGNhcnJ5CQk7IGNhbiBub3Qgb3ZlcmZsb3cKKwlmbXVsCSRkb3RhLCRBMywkYmMKKwlmbXVsCSRkb3RiLCRBMywkYmQKKwlzdGZkCSROMiw1NigkbmFwX2QpCQk7IHNhdmUgbltqKzFdIGluIGRvdWJsZSBmb3JtYXQKKwlzdGZkdQkkTjMsNjQoJG5hcF9kKQorCSBzcmRpCSRjYXJyeSwkdDAsMTYKKwkgYWRkCSR0MSwkdDEsJGNhcnJ5CisJIHNyZGkJJGNhcnJ5LCR0MSwxNgorCisJZm1hZGQJJFQxYSwkTjEsJG5hLCRUMWEKKwlmbWFkZAkkVDFiLCROMSwkbmIsJFQxYgorCSBpbnNyZGkJJHQwLCR0MSwxNiwzMgorCWZtYWRkCSRUMmEsJE4yLCRuYSwkVDJhCisJZm1hZGQJJFQyYiwkTjIsJG5iLCRUMmIKKwkgYWRkCSR0MiwkdDIsJGNhcnJ5CisJZm1hZGQJJFQzYSwkTjMsJG5hLCRUM2EKKwlmbWFkZAkkVDNiLCROMywkbmIsJFQzYgorCSBzcmRpCSRjYXJyeSwkdDIsMTYKKwlmbWFkZAkkVDBhLCROMCwkbmEsJFQwYQorCWZtYWRkCSRUMGIsJE4wLCRuYiwkVDBiCisJIGluc3JkaQkkdDAsJHQyLDE2LDE2CisJIGFkZAkkdDMsJHQzLCRjYXJyeQorCSBzcmRpCSRjYXJyeSwkdDMsMTYKKworCWZtYWRkCSRUMWEsJE4wLCRuYywkVDFhCisJZm1hZGQJJFQxYiwkTjAsJG5kLCRUMWIKKwkgaW5zcmRpCSR0MCwkdDMsMTYsMAkJOyAwLi42MyBiaXRzCisJZm1hZGQJJFQyYSwkTjEsJG5jLCRUMmEKKwlmbWFkZAkkVDJiLCROMSwkbmQsJFQyYgorCSBhZGQJJHQ0LCR0NCwkY2FycnkKKwlmbWFkZAkkVDNhLCROMiwkbmMsJFQzYQorCWZtYWRkCSRUM2IsJE4yLCRuZCwkVDNiCisJIHNyZGkJJGNhcnJ5LCR0NCwxNgorCWZtYWRkCSRkb3RhLCROMywkbmMsJGRvdGEKKwlmbWFkZAkkZG90YiwkTjMsJG5kLCRkb3RiCisJIGFkZAkkdDUsJHQ1LCRjYXJyeQorCSBzcmRpCSRjYXJyeSwkdDUsMTYKKwkgaW5zcmRpCSR0NCwkdDUsMTYsMzIKKworCWZjdGlkCSRUMGEsJFQwYQorCWZjdGlkCSRUMGIsJFQwYgorCSBhZGQJJHQ2LCR0NiwkY2FycnkKKwlmY3RpZAkkVDFhLCRUMWEKKwlmY3RpZAkkVDFiLCRUMWIKKwkgc3JkaQkkY2FycnksJHQ2LDE2CisJZmN0aWQJJFQyYSwkVDJhCisJZmN0aWQJJFQyYiwkVDJiCisJIGluc3JkaQkkdDQsJHQ2LDE2LDE2CisJZmN0aWQJJFQzYSwkVDNhCisJZmN0aWQJJFQzYiwkVDNiCisJIGFkZAkkdDcsJHQ3LCRjYXJyeQorCSBpbnNyZGkJJHQ0LCR0NywxNiwwCQk7IDY0Li4xMjcgYml0cworCSBzcmRpCSRjYXJyeSwkdDcsMTYJCTsgdXBwZXIgMzMgYml0cworCisJc3RmZAkkVDBhLGAkRlJBTUUrMGAoJHNwKQorCXN0ZmQJJFQwYixgJEZSQU1FKzhgKCRzcCkKKwlzdGZkCSRUMWEsYCRGUkFNRSsxNmAoJHNwKQorCXN0ZmQJJFQxYixgJEZSQU1FKzI0YCgkc3ApCisJc3RmZAkkVDJhLGAkRlJBTUUrMzJgKCRzcCkKKwlzdGZkCSRUMmIsYCRGUkFNRSs0MGAoJHNwKQorCXN0ZmQJJFQzYSxgJEZSQU1FKzQ4YCgkc3ApCisJc3RmZAkkVDNiLGAkRlJBTUUrNTZgKCRzcCkKKwkgc3RkCSR0MCw4KCR0cCkJCTsgdHBbai0xXQorCSBzdGR1CSR0NCwxNigkdHApCQk7IHRwW2pdCisJYmRuei0JTDFzdAorDAorCWZjdGlkCSRkb3RhLCRkb3RhCisJZmN0aWQJJGRvdGIsJGRvdGIKKworCWxkCSR0MCxgJEZSQU1FKzBgKCRzcCkKKwlsZAkkdDEsYCRGUkFNRSs4YCgkc3ApCisJbGQJJHQyLGAkRlJBTUUrMTZgKCRzcCkKKwlsZAkkdDMsYCRGUkFNRSsyNGAoJHNwKQorCWxkCSR0NCxgJEZSQU1FKzMyYCgkc3ApCisJbGQJJHQ1LGAkRlJBTUUrNDBgKCRzcCkKKwlsZAkkdDYsYCRGUkFNRSs0OGAoJHNwKQorCWxkCSR0NyxgJEZSQU1FKzU2YCgkc3ApCisJc3RmZAkkZG90YSxgJEZSQU1FKzY0YCgkc3ApCisJc3RmZAkkZG90YixgJEZSQU1FKzcyYCgkc3ApCisKKwlhZGQJJHQwLCR0MCwkY2FycnkJCTsgY2FuIG5vdCBvdmVyZmxvdworCXNyZGkJJGNhcnJ5LCR0MCwxNgorCWFkZAkkdDEsJHQxLCRjYXJyeQorCXNyZGkJJGNhcnJ5LCR0MSwxNgorCWluc3JkaQkkdDAsJHQxLDE2LDMyCisJYWRkCSR0MiwkdDIsJGNhcnJ5CisJc3JkaQkkY2FycnksJHQyLDE2CisJaW5zcmRpCSR0MCwkdDIsMTYsMTYKKwlhZGQJJHQzLCR0MywkY2FycnkKKwlzcmRpCSRjYXJyeSwkdDMsMTYKKwlpbnNyZGkJJHQwLCR0MywxNiwwCQk7IDAuLjYzIGJpdHMKKwlhZGQJJHQ0LCR0NCwkY2FycnkKKwlzcmRpCSRjYXJyeSwkdDQsMTYKKwlhZGQJJHQ1LCR0NSwkY2FycnkKKwlzcmRpCSRjYXJyeSwkdDUsMTYKKwlpbnNyZGkJJHQ0LCR0NSwxNiwzMgorCWFkZAkkdDYsJHQ2LCRjYXJyeQorCXNyZGkJJGNhcnJ5LCR0NiwxNgorCWluc3JkaQkkdDQsJHQ2LDE2LDE2CisJYWRkCSR0NywkdDcsJGNhcnJ5CisJaW5zcmRpCSR0NCwkdDcsMTYsMAkJOyA2NC4uMTI3IGJpdHMKKwlzcmRpCSRjYXJyeSwkdDcsMTYJCTsgdXBwZXIgMzMgYml0cworCWxkCSR0NixgJEZSQU1FKzY0YCgkc3ApCisJbGQJJHQ3LGAkRlJBTUUrNzJgKCRzcCkKKworCXN0ZAkkdDAsOCgkdHApCQk7IHRwW2otMV0KKwlzdGR1CSR0NCwxNigkdHApCQk7IHRwW2pdCisKKwlhZGQJJHQ2LCR0NiwkY2FycnkJCTsgY2FuIG5vdCBvdmVyZmxvdworCXNyZGkJJGNhcnJ5LCR0NiwxNgorCWFkZAkkdDcsJHQ3LCRjYXJyeQorCWluc3JkaQkkdDYsJHQ3LDQ4LDAKKwlzcmRpCSRvdmYsJHQ3LDQ4CisJc3RkCSR0Niw4KCR0cCkJCTsgdHBbbnVtLTFdCisKKwlzbHdpCSR0NywkbnVtLDIKKwlzdWJmCSRuYXBfZCwkdDcsJG5hcF9kCTsgcmV3aW5kIHBvaW50ZXIKKwwKKwlsaQkkaSw4CQkJOyBpPTEKKy5hbGlnbgk1CitMb3V0ZXI6CisJbGR4CSR0MywkYnAsJGkJOyBicFtpXQorCWxkCSR0NixgJEZSQU1FKyRUUkFOU0ZFUis4YCgkc3ApCTsgdHBbMF0KKwltdWxsZAkkdDcsJGEwLCR0Mwk7IGFwWzBdKmJwW2ldCisKKwlhZGRpCSR0cCwkc3AsYCRGUkFNRSskVFJBTlNGRVJgCisJYWRkCSR0NywkdDcsJHQ2CTsgYXBbMF0qYnBbaV0rdHBbMF0KKwlsaQkkY2FycnksMAorCW11bGxkCSR0NywkdDcsJG4wCTsgdHBbMF0qbjAKKwltdGN0cgkkagorCisJOyB0cmFuc2ZlciBicFtpXSB0byBGUFUgYXMgNHgxNi1iaXQgdmFsdWVzCisJZXh0cmRpCSR0MCwkdDMsMTYsNDgKKwlleHRyZGkJJHQxLCR0MywxNiwzMgorCWV4dHJkaQkkdDIsJHQzLDE2LDE2CisJZXh0cmRpCSR0MywkdDMsMTYsMAorCXN0ZAkkdDAsYCRGUkFNRSswYCgkc3ApCisJc3RkCSR0MSxgJEZSQU1FKzhgKCRzcCkKKwlzdGQJJHQyLGAkRlJBTUUrMTZgKCRzcCkKKwlzdGQJJHQzLGAkRlJBTUUrMjRgKCRzcCkKKwk7IHRyYW5zZmVyIChhcFswXSpicFtpXSt0cFswXSkqbjAgdG8gRlBVIGFzIDR4MTYtYml0IHZhbHVlcworCWV4dHJkaQkkdDQsJHQ3LDE2LDQ4CisJZXh0cmRpCSR0NSwkdDcsMTYsMzIKKwlleHRyZGkJJHQ2LCR0NywxNiwxNgorCWV4dHJkaQkkdDcsJHQ3LDE2LDAKKwlzdGQJJHQ0LGAkRlJBTUUrMzJgKCRzcCkKKwlzdGQJJHQ1LGAkRlJBTUUrNDBgKCRzcCkKKwlzdGQJJHQ2LGAkRlJBTUUrNDhgKCRzcCkKKwlzdGQJJHQ3LGAkRlJBTUUrNTZgKCRzcCkKKworCWxmZAkkQTAsOCgkbmFwX2QpCQk7IGxvYWQgYVtqXSBpbiBkb3VibGUgZm9ybWF0CisJbGZkCSRBMSwxNigkbmFwX2QpCisJbGZkCSRBMiwyNCgkbmFwX2QpCQk7IGxvYWQgYVtqKzFdIGluIGRvdWJsZSBmb3JtYXQKKwlsZmQJJEEzLDMyKCRuYXBfZCkKKwlsZmQJJE4wLDQwKCRuYXBfZCkJCTsgbG9hZCBuW2pdIGluIGRvdWJsZSBmb3JtYXQKKwlsZmQJJE4xLDQ4KCRuYXBfZCkKKwlsZmQJJE4yLDU2KCRuYXBfZCkJCTsgbG9hZCBuW2orMV0gaW4gZG91YmxlIGZvcm1hdAorCWxmZHUJJE4zLDY0KCRuYXBfZCkKKworCWxmZAkkYmEsYCRGUkFNRSswYCgkc3ApCisJbGZkCSRiYixgJEZSQU1FKzhgKCRzcCkKKwlsZmQJJGJjLGAkRlJBTUUrMTZgKCRzcCkKKwlsZmQJJGJkLGAkRlJBTUUrMjRgKCRzcCkKKwlsZmQJJG5hLGAkRlJBTUUrMzJgKCRzcCkKKwlsZmQJJG5iLGAkRlJBTUUrNDBgKCRzcCkKKwlsZmQJJG5jLGAkRlJBTUUrNDhgKCRzcCkKKwlsZmQJJG5kLGAkRlJBTUUrNTZgKCRzcCkKKworCWZjZmlkCSRiYSwkYmEKKwlmY2ZpZAkkYmIsJGJiCisJZmNmaWQJJGJjLCRiYworCWZjZmlkCSRiZCwkYmQKKwlmY2ZpZAkkbmEsJG5hCisJZmNmaWQJJG5iLCRuYgorCWZjZmlkCSRuYywkbmMKKwlmY2ZpZAkkbmQsJG5kCisKKwlmbXVsCSRUMWEsJEExLCRiYQorCWZtdWwJJFQxYiwkQTEsJGJiCisJZm11bAkkVDJhLCRBMiwkYmEKKwlmbXVsCSRUMmIsJEEyLCRiYgorCWZtdWwJJFQzYSwkQTMsJGJhCisJZm11bAkkVDNiLCRBMywkYmIKKwlmbXVsCSRUMGEsJEEwLCRiYQorCWZtdWwJJFQwYiwkQTAsJGJiCisKKwlmbWFkZAkkVDFhLCRBMCwkYmMsJFQxYQorCWZtYWRkCSRUMWIsJEEwLCRiZCwkVDFiCisJZm1hZGQJJFQyYSwkQTEsJGJjLCRUMmEKKwlmbWFkZAkkVDJiLCRBMSwkYmQsJFQyYgorCWZtYWRkCSRUM2EsJEEyLCRiYywkVDNhCisJZm1hZGQJJFQzYiwkQTIsJGJkLCRUM2IKKwlmbXVsCSRkb3RhLCRBMywkYmMKKwlmbXVsCSRkb3RiLCRBMywkYmQKKworCWZtYWRkCSRUMWEsJE4xLCRuYSwkVDFhCisJZm1hZGQJJFQxYiwkTjEsJG5iLCRUMWIKKwkgbGZkCSRBMCw4KCRuYXBfZCkJCTsgbG9hZCBhW2pdIGluIGRvdWJsZSBmb3JtYXQKKwkgbGZkCSRBMSwxNigkbmFwX2QpCisJZm1hZGQJJFQyYSwkTjIsJG5hLCRUMmEKKwlmbWFkZAkkVDJiLCROMiwkbmIsJFQyYgorCSBsZmQJJEEyLDI0KCRuYXBfZCkJCTsgbG9hZCBhW2orMV0gaW4gZG91YmxlIGZvcm1hdAorCSBsZmQJJEEzLDMyKCRuYXBfZCkKKwlmbWFkZAkkVDNhLCROMywkbmEsJFQzYQorCWZtYWRkCSRUM2IsJE4zLCRuYiwkVDNiCisJZm1hZGQJJFQwYSwkTjAsJG5hLCRUMGEKKwlmbWFkZAkkVDBiLCROMCwkbmIsJFQwYgorCisJZm1hZGQJJFQxYSwkTjAsJG5jLCRUMWEKKwlmbWFkZAkkVDFiLCROMCwkbmQsJFQxYgorCWZtYWRkCSRUMmEsJE4xLCRuYywkVDJhCisJZm1hZGQJJFQyYiwkTjEsJG5kLCRUMmIKKwlmbWFkZAkkVDNhLCROMiwkbmMsJFQzYQorCWZtYWRkCSRUM2IsJE4yLCRuZCwkVDNiCisJZm1hZGQJJGRvdGEsJE4zLCRuYywkZG90YQorCWZtYWRkCSRkb3RiLCROMywkbmQsJGRvdGIKKworCWZjdGlkCSRUMGEsJFQwYQorCWZjdGlkCSRUMGIsJFQwYgorCWZjdGlkCSRUMWEsJFQxYQorCWZjdGlkCSRUMWIsJFQxYgorCWZjdGlkCSRUMmEsJFQyYQorCWZjdGlkCSRUMmIsJFQyYgorCWZjdGlkCSRUM2EsJFQzYQorCWZjdGlkCSRUM2IsJFQzYgorCisJc3RmZAkkVDBhLGAkRlJBTUUrMGAoJHNwKQorCXN0ZmQJJFQwYixgJEZSQU1FKzhgKCRzcCkKKwlzdGZkCSRUMWEsYCRGUkFNRSsxNmAoJHNwKQorCXN0ZmQJJFQxYixgJEZSQU1FKzI0YCgkc3ApCisJc3RmZAkkVDJhLGAkRlJBTUUrMzJgKCRzcCkKKwlzdGZkCSRUMmIsYCRGUkFNRSs0MGAoJHNwKQorCXN0ZmQJJFQzYSxgJEZSQU1FKzQ4YCgkc3ApCisJc3RmZAkkVDNiLGAkRlJBTUUrNTZgKCRzcCkKKwwKKy5hbGlnbgk1CitMaW5uZXI6CisJZm11bAkkVDFhLCRBMSwkYmEKKwlmbXVsCSRUMWIsJEExLCRiYgorCWZtdWwJJFQyYSwkQTIsJGJhCisJZm11bAkkVDJiLCRBMiwkYmIKKwlsZmQJJE4wLDQwKCRuYXBfZCkJCTsgbG9hZCBuW2pdIGluIGRvdWJsZSBmb3JtYXQKKwlsZmQJJE4xLDQ4KCRuYXBfZCkKKwlmbXVsCSRUM2EsJEEzLCRiYQorCWZtdWwJJFQzYiwkQTMsJGJiCisJZm1hZGQJJFQwYSwkQTAsJGJhLCRkb3RhCisJZm1hZGQJJFQwYiwkQTAsJGJiLCRkb3RiCisJbGZkCSROMiw1NigkbmFwX2QpCQk7IGxvYWQgbltqKzFdIGluIGRvdWJsZSBmb3JtYXQKKwlsZmR1CSROMyw2NCgkbmFwX2QpCisKKwlmbWFkZAkkVDFhLCRBMCwkYmMsJFQxYQorCWZtYWRkCSRUMWIsJEEwLCRiZCwkVDFiCisJZm1hZGQJJFQyYSwkQTEsJGJjLCRUMmEKKwlmbWFkZAkkVDJiLCRBMSwkYmQsJFQyYgorCSBsZmQJJEEwLDgoJG5hcF9kKQkJOyBsb2FkIGFbal0gaW4gZG91YmxlIGZvcm1hdAorCSBsZmQJJEExLDE2KCRuYXBfZCkKKwlmbWFkZAkkVDNhLCRBMiwkYmMsJFQzYQorCWZtYWRkCSRUM2IsJEEyLCRiZCwkVDNiCisJZm11bAkkZG90YSwkQTMsJGJjCisJZm11bAkkZG90YiwkQTMsJGJkCisJIGxmZAkkQTIsMjQoJG5hcF9kKQkJOyBsb2FkIGFbaisxXSBpbiBkb3VibGUgZm9ybWF0CisJIGxmZAkkQTMsMzIoJG5hcF9kKQorCisJZm1hZGQJJFQxYSwkTjEsJG5hLCRUMWEKKwlmbWFkZAkkVDFiLCROMSwkbmIsJFQxYgorCSBsZAkkdDAsYCRGUkFNRSswYCgkc3ApCisJIGxkCSR0MSxgJEZSQU1FKzhgKCRzcCkKKwlmbWFkZAkkVDJhLCROMiwkbmEsJFQyYQorCWZtYWRkCSRUMmIsJE4yLCRuYiwkVDJiCisJIGxkCSR0MixgJEZSQU1FKzE2YCgkc3ApCisJIGxkCSR0MyxgJEZSQU1FKzI0YCgkc3ApCisJZm1hZGQJJFQzYSwkTjMsJG5hLCRUM2EKKwlmbWFkZAkkVDNiLCROMywkbmIsJFQzYgorCSBhZGQJJHQwLCR0MCwkY2FycnkJCTsgY2FuIG5vdCBvdmVyZmxvdworCSBsZAkkdDQsYCRGUkFNRSszMmAoJHNwKQorCSBsZAkkdDUsYCRGUkFNRSs0MGAoJHNwKQorCWZtYWRkCSRUMGEsJE4wLCRuYSwkVDBhCisJZm1hZGQJJFQwYiwkTjAsJG5iLCRUMGIKKwkgc3JkaQkkY2FycnksJHQwLDE2CisJIGFkZAkkdDEsJHQxLCRjYXJyeQorCSBzcmRpCSRjYXJyeSwkdDEsMTYKKwkgbGQJJHQ2LGAkRlJBTUUrNDhgKCRzcCkKKwkgbGQJJHQ3LGAkRlJBTUUrNTZgKCRzcCkKKworCWZtYWRkCSRUMWEsJE4wLCRuYywkVDFhCisJZm1hZGQJJFQxYiwkTjAsJG5kLCRUMWIKKwkgaW5zcmRpCSR0MCwkdDEsMTYsMzIKKwkgbGQJJHQxLDgoJHRwKQkJOyB0cFtqXQorCWZtYWRkCSRUMmEsJE4xLCRuYywkVDJhCisJZm1hZGQJJFQyYiwkTjEsJG5kLCRUMmIKKwkgYWRkCSR0MiwkdDIsJGNhcnJ5CisJZm1hZGQJJFQzYSwkTjIsJG5jLCRUM2EKKwlmbWFkZAkkVDNiLCROMiwkbmQsJFQzYgorCSBzcmRpCSRjYXJyeSwkdDIsMTYKKwkgaW5zcmRpCSR0MCwkdDIsMTYsMTYKKwlmbWFkZAkkZG90YSwkTjMsJG5jLCRkb3RhCisJZm1hZGQJJGRvdGIsJE4zLCRuZCwkZG90YgorCSBhZGQJJHQzLCR0MywkY2FycnkKKwkgbGR1CSR0MiwxNigkdHApCQk7IHRwW2orMV0KKwkgc3JkaQkkY2FycnksJHQzLDE2CisJIGluc3JkaQkkdDAsJHQzLDE2LDAJCTsgMC4uNjMgYml0cworCSBhZGQJJHQ0LCR0NCwkY2FycnkKKworCWZjdGlkCSRUMGEsJFQwYQorCWZjdGlkCSRUMGIsJFQwYgorCSBzcmRpCSRjYXJyeSwkdDQsMTYKKwlmY3RpZAkkVDFhLCRUMWEKKwlmY3RpZAkkVDFiLCRUMWIKKwkgYWRkCSR0NSwkdDUsJGNhcnJ5CisJZmN0aWQJJFQyYSwkVDJhCisJZmN0aWQJJFQyYiwkVDJiCisJIHNyZGkJJGNhcnJ5LCR0NSwxNgorCSBpbnNyZGkJJHQ0LCR0NSwxNiwzMgorCWZjdGlkCSRUM2EsJFQzYQorCWZjdGlkCSRUM2IsJFQzYgorCSBhZGQJJHQ2LCR0NiwkY2FycnkKKwkgc3JkaQkkY2FycnksJHQ2LDE2CisJIGluc3JkaQkkdDQsJHQ2LDE2LDE2CisKKwlzdGZkCSRUMGEsYCRGUkFNRSswYCgkc3ApCisJc3RmZAkkVDBiLGAkRlJBTUUrOGAoJHNwKQorCSBhZGQJJHQ3LCR0NywkY2FycnkKKwkgYWRkYwkkdDMsJHQwLCR0MQorCXN0ZmQJJFQxYSxgJEZSQU1FKzE2YCgkc3ApCisJc3RmZAkkVDFiLGAkRlJBTUUrMjRgKCRzcCkKKwkgaW5zcmRpCSR0NCwkdDcsMTYsMAkJOyA2NC4uMTI3IGJpdHMKKwkgc3JkaQkkY2FycnksJHQ3LDE2CQk7IHVwcGVyIDMzIGJpdHMKKwlzdGZkCSRUMmEsYCRGUkFNRSszMmAoJHNwKQorCXN0ZmQJJFQyYixgJEZSQU1FKzQwYCgkc3ApCisJIGFkZGUJJHQ1LCR0NCwkdDIKKwlzdGZkCSRUM2EsYCRGUkFNRSs0OGAoJHNwKQorCXN0ZmQJJFQzYixgJEZSQU1FKzU2YCgkc3ApCisJIGFkZHplCSRjYXJyeSwkY2FycnkKKwkgc3RkCSR0MywtMTYoJHRwKQkJOyB0cFtqLTFdCisJIHN0ZAkkdDUsLTgoJHRwKQkJOyB0cFtqXQorCWJkbnotCUxpbm5lcgorDAorCWZjdGlkCSRkb3RhLCRkb3RhCisJZmN0aWQJJGRvdGIsJGRvdGIKKwlsZAkkdDAsYCRGUkFNRSswYCgkc3ApCisJbGQJJHQxLGAkRlJBTUUrOGAoJHNwKQorCWxkCSR0MixgJEZSQU1FKzE2YCgkc3ApCisJbGQJJHQzLGAkRlJBTUUrMjRgKCRzcCkKKwlsZAkkdDQsYCRGUkFNRSszMmAoJHNwKQorCWxkCSR0NSxgJEZSQU1FKzQwYCgkc3ApCisJbGQJJHQ2LGAkRlJBTUUrNDhgKCRzcCkKKwlsZAkkdDcsYCRGUkFNRSs1NmAoJHNwKQorCXN0ZmQJJGRvdGEsYCRGUkFNRSs2NGAoJHNwKQorCXN0ZmQJJGRvdGIsYCRGUkFNRSs3MmAoJHNwKQorCisJYWRkCSR0MCwkdDAsJGNhcnJ5CQk7IGNhbiBub3Qgb3ZlcmZsb3cKKwlzcmRpCSRjYXJyeSwkdDAsMTYKKwlhZGQJJHQxLCR0MSwkY2FycnkKKwlzcmRpCSRjYXJyeSwkdDEsMTYKKwlpbnNyZGkJJHQwLCR0MSwxNiwzMgorCWFkZAkkdDIsJHQyLCRjYXJyeQorCWxkCSR0MSw4KCR0cCkJCTsgdHBbal0KKwlzcmRpCSRjYXJyeSwkdDIsMTYKKwlpbnNyZGkJJHQwLCR0MiwxNiwxNgorCWFkZAkkdDMsJHQzLCRjYXJyeQorCWxkdQkkdDIsMTYoJHRwKQkJOyB0cFtqKzFdCisJc3JkaQkkY2FycnksJHQzLDE2CisJaW5zcmRpCSR0MCwkdDMsMTYsMAkJOyAwLi42MyBiaXRzCisJYWRkCSR0NCwkdDQsJGNhcnJ5CisJc3JkaQkkY2FycnksJHQ0LDE2CisJYWRkCSR0NSwkdDUsJGNhcnJ5CisJc3JkaQkkY2FycnksJHQ1LDE2CisJaW5zcmRpCSR0NCwkdDUsMTYsMzIKKwlhZGQJJHQ2LCR0NiwkY2FycnkKKwlzcmRpCSRjYXJyeSwkdDYsMTYKKwlpbnNyZGkJJHQ0LCR0NiwxNiwxNgorCWFkZAkkdDcsJHQ3LCRjYXJyeQorCWluc3JkaQkkdDQsJHQ3LDE2LDAJCTsgNjQuLjEyNyBiaXRzCisJc3JkaQkkY2FycnksJHQ3LDE2CQk7IHVwcGVyIDMzIGJpdHMKKwlsZAkkdDYsYCRGUkFNRSs2NGAoJHNwKQorCWxkCSR0NyxgJEZSQU1FKzcyYCgkc3ApCisKKwlhZGRjCSR0MywkdDAsJHQxCisJYWRkZQkkdDUsJHQ0LCR0MgorCWFkZHplCSRjYXJyeSwkY2FycnkKKworCXN0ZAkkdDMsLTE2KCR0cCkJCTsgdHBbai0xXQorCXN0ZAkkdDUsLTgoJHRwKQkJOyB0cFtqXQorCisJYWRkCSRjYXJyeSwkY2FycnksJG92Zgk7IGNvbXN1bWUgdXBtb3N0IG92ZXJmbG93CisJYWRkCSR0NiwkdDYsJGNhcnJ5CQk7IGNhbiBub3Qgb3ZlcmZsb3cKKwlzcmRpCSRjYXJyeSwkdDYsMTYKKwlhZGQJJHQ3LCR0NywkY2FycnkKKwlpbnNyZGkJJHQ2LCR0Nyw0OCwwCisJc3JkaQkkb3ZmLCR0Nyw0OAorCXN0ZAkkdDYsMCgkdHApCQk7IHRwW251bS0xXQorCisJc2x3aQkkdDcsJG51bSwyCisJYWRkaQkkaSwkaSw4CisJc3ViZgkkbmFwX2QsJHQ3LCRuYXBfZAk7IHJld2luZCBwb2ludGVyCisJY21wdwkkaSwkbnVtCisJYmx0LQlMb3V0ZXIKKwwKKwlzdWJmCSRucCwkbnVtLCRucAk7IHJld2luZCBucAorCWFkZGkJJGosJGosMQkJOyByZXN0b3JlIGNvdW50ZXIKKwlzdWJmYwkkaSwkaSwkaQk7IGo9MCBhbmQgImNsZWFyIiBYRVJbQ0FdCisJYWRkaQkkdHAsJHNwLGAkRlJBTUUrJFRSQU5TRkVSKzhgCisJYWRkaQkkdDQsJHNwLGAkRlJBTUUrJFRSQU5TRkVSKzE2YAorCWFkZGkJJHQ1LCRucCw4CisJYWRkaQkkdDYsJHJwLDgKKwltdGN0cgkkagorCisuYWxpZ24JNAorTHN1YjoJbGR4CSR0MCwkdHAsJGkKKwlsZHgJJHQxLCRucCwkaQorCWxkeAkkdDIsJHQ0LCRpCisJbGR4CSR0MywkdDUsJGkKKwlzdWJmZQkkdDAsJHQxLCR0MAk7IHRwW2pdLW5wW2pdCisJc3ViZmUJJHQyLCR0MywkdDIJOyB0cFtqKzFdLW5wW2orMV0KKwlzdGR4CSR0MCwkcnAsJGkKKwlzdGR4CSR0MiwkdDYsJGkKKwlhZGRpCSRpLCRpLDE2CisJYmRuei0JTHN1YgorCisJbGkJJGksMAorCXN1YmZlCSRvdmYsJGksJG92Zgk7IGhhbmRsZSB1cG1vc3Qgb3ZlcmZsb3cgYml0CisJYW5kCSRhcCwkdHAsJG92ZgorCWFuZGMJJG5wLCRycCwkb3ZmCisJb3IJJGFwLCRhcCwkbnAJOyBhcD1ib3Jyb3c/dHA6cnAKKwlhZGRpCSR0NywkYXAsOAorCW10Y3RyCSRqCisKKy5hbGlnbgk0CitMY29weToJCQkJOyBjb3B5IG9yIGluLXBsYWNlIHJlZnJlc2gKKwlsZHgJJHQwLCRhcCwkaQorCWxkeAkkdDEsJHQ3LCRpCisJc3RkCSRpLDgoJG5hcF9kKQk7IHphcCBuYXBfZAorCXN0ZAkkaSwxNigkbmFwX2QpCisJc3RkCSRpLDI0KCRuYXBfZCkKKwlzdGQJJGksMzIoJG5hcF9kKQorCXN0ZAkkaSw0MCgkbmFwX2QpCisJc3RkCSRpLDQ4KCRuYXBfZCkKKwlzdGQJJGksNTYoJG5hcF9kKQorCXN0ZHUJJGksNjQoJG5hcF9kKQorCXN0ZHgJJHQwLCRycCwkaQorCXN0ZHgJJHQxLCR0NiwkaQorCXN0ZHgJJGksJHRwLCRpCTsgemFwIHRwIGF0IG9uY2UKKwlzdGR4CSRpLCR0NCwkaQorCWFkZGkJJGksJGksMTYKKwliZG56LQlMY29weQorDAorCSRQT1AJcjE0LGAyKiRTSVpFX1RgKCRzcCkKKwkkUE9QCXIxNSxgMyokU0laRV9UYCgkc3ApCisJJFBPUAlyMTYsYDQqJFNJWkVfVGAoJHNwKQorCSRQT1AJcjE3LGA1KiRTSVpFX1RgKCRzcCkKKwkkUE9QCXIxOCxgNiokU0laRV9UYCgkc3ApCisJJFBPUAlyMTksYDcqJFNJWkVfVGAoJHNwKQorCSRQT1AJcjIwLGA4KiRTSVpFX1RgKCRzcCkKKwkkUE9QCXIyMSxgOSokU0laRV9UYCgkc3ApCisJJFBPUAlyMjIsYDEwKiRTSVpFX1RgKCRzcCkKKwkkUE9QCXIyMyxgMTEqJFNJWkVfVGAoJHNwKQorCWxmZAlmMTQsYDEyKiRTSVpFX1QrMGAoJHNwKQorCWxmZAlmMTUsYDEyKiRTSVpFX1QrOGAoJHNwKQorCWxmZAlmMTYsYDEyKiRTSVpFX1QrMTZgKCRzcCkKKwlsZmQJZjE3LGAxMiokU0laRV9UKzI0YCgkc3ApCisJbGZkCWYxOCxgMTIqJFNJWkVfVCszMmAoJHNwKQorCWxmZAlmMTksYDEyKiRTSVpFX1QrNDBgKCRzcCkKKwlsZmQJZjIwLGAxMiokU0laRV9UKzQ4YCgkc3ApCisJbGZkCWYyMSxgMTIqJFNJWkVfVCs1NmAoJHNwKQorCWxmZAlmMjIsYDEyKiRTSVpFX1QrNjRgKCRzcCkKKwlsZmQJZjIzLGAxMiokU0laRV9UKzcyYCgkc3ApCisJbGZkCWYyNCxgMTIqJFNJWkVfVCs4MGAoJHNwKQorCWxmZAlmMjUsYDEyKiRTSVpFX1QrODhgKCRzcCkKKwkkUE9QCSRzcCwwKCRzcCkKKwlsaQlyMywxCTsgc2lnbmFsICJoYW5kbGVkIgorCWJscgorCS5sb25nCTAKKy5hc2NpeiAgIk1vbnRnb21lcnkgTXVsdGlwbGljYXRpb24gZm9yIFBQQzY0LCBDUllQVE9HQU1TIGJ5IDxhcHByb1xAZnkuY2hhbG1lcnMuc2U+IgorX19fCisKKyRjb2RlID1+IHMvXGAoW15cYF0qKVxgL2V2YWwgJDEvZ2VtOworcHJpbnQgJGNvZGU7CitjbG9zZSBTVERPVVQ7CmRpZmYgLS1naXQgYS9jcnlwdG8vYm4vYXNtL3MzOTB4LW1vbnQucGwgYi9jcnlwdG8vYm4vYXNtL3MzOTB4LW1vbnQucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIzMjUxMAotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9ibi9hc20vczM5MHgtbW9udC5wbApAQCAtMCwwICsxLDIyNSBAQAorIyEvdXNyL2Jpbi9lbnYgcGVybAorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFdyaXR0ZW4gYnkgQW5keSBQb2x5YWtvdiA8YXBwcm9AZnkuY2hhbG1lcnMuc2U+IGZvciB0aGUgT3BlblNTTAorIyBwcm9qZWN0LiBUaGUgbW9kdWxlIGlzLCBob3dldmVyLCBkdWFsIGxpY2Vuc2VkIHVuZGVyIE9wZW5TU0wgYW5kCisjIENSWVBUT0dBTVMgbGljZW5zZXMgZGVwZW5kaW5nIG9uIHdoZXJlIHlvdSBvYnRhaW4gaXQuIEZvciBmdXJ0aGVyCisjIGRldGFpbHMgc2VlIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvfmFwcHJvL2NyeXB0b2dhbXMvLgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjIEFwcmlsIDIwMDcuCisjCisjIFBlcmZvcm1hbmNlIGltcHJvdmVtZW50IG92ZXIgdmFuaWxsYSBDIGNvZGUgdmFyaWVzIGZyb20gODUlIHRvIDQ1JQorIyBkZXBlbmRpbmcgb24ga2V5IGxlbmd0aCBhbmQgYmVuY2htYXJrLiBVbmZvcnR1bmF0ZWx5IGluIHRoaXMgY29udGV4dAorIyB0aGVzZSBhcmUgbm90IHZlcnkgaW1wcmVzc2l2ZSByZXN1bHRzIFtmb3IgY29kZSB0aGF0IHV0aWxpemVzICJ3aWRlIgorIyA2NHg2ND0xMjgtYml0IG11bHRpcGxpY2F0aW9uLCB3aGljaCBpcyBub3QgY29tbW9ubHkgYXZhaWxhYmxlIHRvIEMKKyMgcHJvZ3JhbW1lcnNdLCBhdCBsZWFzdCBoYW5kLWNvZGVkIGJuX2FzbS5jIHJlcGxhY2VtZW50IGlzIGtub3duIHRvCisjIHByb3ZpZGUgMzAtNDAlIGJldHRlciByZXN1bHRzIGZvciBsb25nZXN0IGtleXMuIFdlbGwsIG9uIGEgc2Vjb25kCisjIHRob3VnaHQgaXQncyBub3QgdmVyeSBzdXJwcmlzaW5nLCBiZWNhdXNlIHotQ1BVcyBhcmUgc2luZ2xlLWlzc3VlCisjIGFuZCBfc3RyaWN0bHlfIGluLW9yZGVyIGV4ZWN1dGlvbiwgd2hpbGUgYm5fbXVsX21vbnQgaXMgbW9yZSBvciBsZXNzCisjIGRlcGVuZGVudCBvbiBDUFUgYWJpbGl0eSB0byBwaXBlLWxpbmUgaW5zdHJ1Y3Rpb25zIGFuZCBoYXZlIHNldmVyYWwKKyMgb2YgdGhlbSAiaW4tZmxpZ2h0IiBhdCB0aGUgc2FtZSB0aW1lLiBJIG1lYW4gd2hpbGUgb3RoZXIgbWV0aG9kcywKKyMgZm9yIGV4YW1wbGUgS2FyYXRzdWJhLCBhaW0gdG8gbWluaW1pemUgYW1vdW50IG9mIG11bHRpcGxpY2F0aW9ucyBhdAorIyB0aGUgY29zdCBvZiBvdGhlciBvcGVyYXRpb25zIGluY3JlYXNlLCBibl9tdWxfbW9udCBhaW0gdG8gbmVhdGx5CisjICJvdmVybGFwIiBtdWx0aXBsaWNhdGlvbnMgYW5kIHRoZSBvdGhlciBvcGVyYXRpb25zIFthbmQgb24gbW9zdAorIyBwbGF0Zm9ybXMgZXZlbiBtaW5pbWl6ZSB0aGUgYW1vdW50IG9mIHRoZSBvdGhlciBvcGVyYXRpb25zLCBpbgorIyBwYXJ0aWN1bGFyIHJlZmVyZW5jZXMgdG8gbWVtb3J5XS4gQnV0IGl0J3MgcG9zc2libGUgdG8gaW1wcm92ZSB0aGlzCisjIG1vZHVsZSBwZXJmb3JtYW5jZSBieSBpbXBsZW1lbnRpbmcgZGVkaWNhdGVkIHNxdWFyaW5nIGNvZGUtcGF0aCBhbmQKKyMgcG9zc2libHkgYnkgdW5yb2xsaW5nIGxvb3BzLi4uCisKKyMgSmFudWFyeSAyMDA5LgorIworIyBSZXNjaGVkdWxlIHRvIG1pbmltaXplL2F2b2lkIEFkZHJlc3MgR2VuZXJhdGlvbiBJbnRlcmxvY2sgaGF6YXJkLAorIyBtYWtlIGlubmVyIGxvb3BzIGNvdW50ZXItYmFzZWQuCisKKyRtbjA9IiVyMCI7CiskbnVtPSIlcjEiOworCisjIGludCBibl9tdWxfbW9udCgKKyRycD0iJXIyIjsJCSMgQk5fVUxPTkcgKnJwLAorJGFwPSIlcjMiOwkJIyBjb25zdCBCTl9VTE9ORyAqYXAsCiskYnA9IiVyNCI7CQkjIGNvbnN0IEJOX1VMT05HICpicCwKKyRucD0iJXI1IjsJCSMgY29uc3QgQk5fVUxPTkcgKm5wLAorJG4wPSIlcjYiOwkJIyBjb25zdCBCTl9VTE9ORyAqbjAsCisjJG51bT0iMTYwKCVyMTUpIgkjIGludCBudW0pOworCiskYmk9IiVyMiI7CSMgemFwcyBycAorJGo9IiVyNyI7CisKKyRhaGk9IiVyOCI7CiskYWxvPSIlcjkiOworJG5oaT0iJXIxMCI7CiskbmxvPSIlcjExIjsKKyRBSEk9IiVyMTIiOworJE5IST0iJXIxMyI7CiskY291bnQ9IiVyMTQiOworJHNwPSIlcjE1IjsKKworJGNvZGUuPTw8X19fOworLnRleHQKKy5nbG9ibAlibl9tdWxfbW9udAorLnR5cGUJYm5fbXVsX21vbnQsXEBmdW5jdGlvbgorYm5fbXVsX21vbnQ6CisJbGdmCSRudW0sMTY0KCRzcCkJIyBwdWxsICRudW0KKwlzbGEJJG51bSwzCQkjICRudW0gdG8gZW51bWVyYXRlIGJ5dGVzCisJbGEJJGJwLDAoJG51bSwkYnApCisKKwlzdGcJJXIyLDE2KCRzcCkKKworCWNnaGkJJG51bSwxNgkJIworCWxnaGkJJXIyLDAJCSMKKwlibHIJJXIxNAkJIyBpZigkbnVtPDE2KSByZXR1cm4gMDsKKwljZ2hpCSRudW0sMTI4CSMKKwliaHIJJXIxNAkJIyBpZigkbnVtPjEyOCkgcmV0dXJuIDA7CisKKwlzdG1nCSVyMywlcjE1LDI0KCRzcCkKKworCWxnaGkJJHJwLC0xNjAtOAkjIGxlYXZlIHJvb20gZm9yIGNhcnJ5IGJpdAorCWxjZ3IJJGosJG51bQkJIyAtJG51bQorCWxncgklcjAsJHNwCisJbGEJJHJwLDAoJHJwLCRzcCkKKwlsYQkkc3AsMCgkaiwkcnApCSMgYWxsb2NhCisJc3RnCSVyMCwwKCRzcCkJIyBiYWNrIGNoYWluCisKKwlzcmEJJG51bSwzCQkjIHJlc3RvcmUgJG51bQorCWxhCSRicCwwKCRqLCRicCkJIyByZXN0b3JlICRicAorCWFoaQkkbnVtLC0xCQkjIGFkanVzdCAkbnVtIGZvciBpbm5lciBsb29wCisJbGcJJG4wLDAoJG4wKQkjIHB1bGwgbjAKKworCWxnCSRiaSwwKCRicCkKKwlsZwkkYWxvLDAoJGFwKQorCW1sZ3IJJGFoaSwkYmkJIyBhcFswXSpicFswXQorCWxncgkkQUhJLCRhaGkKKworCWxncgkkbW4wLCRhbG8JIyAidHBbMF0iKm4wCisJbXNncgkkbW4wLCRuMAorCisJbGcJJG5sbywwKCRucCkJIworCW1sZ3IJJG5oaSwkbW4wCSMgbnBbMF0qbTEKKwlhbGdyCSRubG8sJGFsbwkjICs9InRwWzBdIgorCWxnaGkJJE5ISSwwCisJYWxjZ3IJJE5ISSwkbmhpCisKKwlsYQkkaiw4KCVyMCkJIyBqPTEKKwlscgkkY291bnQsJG51bQorCisuYWxpZ24JMTYKKy5MMXN0OgorCWxnCSRhbG8sMCgkaiwkYXApCisJbWxncgkkYWhpLCRiaQkjIGFwW2pdKmJwWzBdCisJYWxncgkkYWxvLCRBSEkKKwlsZ2hpCSRBSEksMAorCWFsY2dyCSRBSEksJGFoaQorCisJbGcJJG5sbywwKCRqLCRucCkKKwltbGdyCSRuaGksJG1uMAkjIG5wW2pdKm0xCisJYWxncgkkbmxvLCROSEkKKwlsZ2hpCSROSEksMAorCWFsY2dyCSRuaGksJE5ISQkjICs9InRwW2pdIgorCWFsZ3IJJG5sbywkYWxvCisJYWxjZ3IJJE5ISSwkbmhpCisKKwlzdGcJJG5sbywxNjAtOCgkaiwkc3ApCSMgdHBbai0xXT0KKwlsYQkkaiw4KCRqKQkjIGorKworCWJyY3QJJGNvdW50LC5MMXN0CisKKwlhbGdyCSROSEksJEFISQorCWxnaGkJJEFISSwwCisJYWxjZ3IJJEFISSwkQUhJCSMgdXBtb3N0IG92ZXJmbG93IGJpdAorCXN0ZwkkTkhJLDE2MC04KCRqLCRzcCkKKwlzdGcJJEFISSwxNjAoJGosJHNwKQorCWxhCSRicCw4KCRicCkJIyBicCsrCisKKy5Mb3V0ZXI6CisJbGcJJGJpLDAoJGJwKQkjIGJwW2ldCisJbGcJJGFsbywwKCRhcCkKKwltbGdyCSRhaGksJGJpCSMgYXBbMF0qYnBbaV0KKwlhbGcJJGFsbywxNjAoJHNwKQkjICs9dHBbMF0KKwlsZ2hpCSRBSEksMAorCWFsY2dyCSRBSEksJGFoaQorCisJbGdyCSRtbjAsJGFsbworCW1zZ3IJJG1uMCwkbjAJIyB0cFswXSpuMAorCisJbGcJJG5sbywwKCRucCkJIyBucFswXQorCW1sZ3IJJG5oaSwkbW4wCSMgbnBbMF0qbTEKKwlhbGdyCSRubG8sJGFsbwkjICs9InRwWzBdIgorCWxnaGkJJE5ISSwwCisJYWxjZ3IJJE5ISSwkbmhpCisKKwlsYQkkaiw4KCVyMCkJIyBqPTEKKwlscgkkY291bnQsJG51bQorCisuYWxpZ24JMTYKKy5MaW5uZXI6CisJbGcJJGFsbywwKCRqLCRhcCkKKwltbGdyCSRhaGksJGJpCSMgYXBbal0qYnBbaV0KKwlhbGdyCSRhbG8sJEFISQorCWxnaGkJJEFISSwwCisJYWxjZ3IJJGFoaSwkQUhJCisJYWxnCSRhbG8sMTYwKCRqLCRzcCkjICs9dHBbal0KKwlhbGNncgkkQUhJLCRhaGkKKworCWxnCSRubG8sMCgkaiwkbnApCisJbWxncgkkbmhpLCRtbjAJIyBucFtqXSptMQorCWFsZ3IJJG5sbywkTkhJCisJbGdoaQkkTkhJLDAKKwlhbGNncgkkbmhpLCROSEkKKwlhbGdyCSRubG8sJGFsbwkjICs9InRwW2pdIgorCWFsY2dyCSROSEksJG5oaQorCisJc3RnCSRubG8sMTYwLTgoJGosJHNwKQkjIHRwW2otMV09CisJbGEJJGosOCgkaikJIyBqKysKKwlicmN0CSRjb3VudCwuTGlubmVyCisKKwlhbGdyCSROSEksJEFISQorCWxnaGkJJEFISSwwCisJYWxjZ3IJJEFISSwkQUhJCisJYWxnCSROSEksMTYwKCRqLCRzcCkjIGFjY3VtdWxhdGUgcHJldmlvdXMgdXBtb3N0IG92ZXJmbG93IGJpdAorCWxnaGkJJGFoaSwwCisJYWxjZ3IJJEFISSwkYWhpCSMgbmV3IHVwbW9zdCBvdmVyZmxvdyBiaXQKKwlzdGcJJE5ISSwxNjAtOCgkaiwkc3ApCisJc3RnCSRBSEksMTYwKCRqLCRzcCkKKworCWxhCSRicCw4KCRicCkJIyBicCsrCisJY2xnCSRicCwxNjArOCszMigkaiwkc3ApCSMgY29tcGFyZSB0byAmYnBbbnVtXQorCWpuZQkuTG91dGVyCisKKwlsZwkkcnAsMTYwKzgrMTYoJGosJHNwKQkjIHJlaW5jYXJuYXRlIHJwCisJbGEJJGFwLDE2MCgkc3ApCisJYWhpCSRudW0sMQkJIyByZXN0b3JlICRudW0sIGluY2lkZW50YWxseSBjbGVhcnMgImJvcnJvdyIKKworCWxhCSRqLDAoJXIwKQorCWxyCSRjb3VudCwkbnVtCisuTHN1YjoJbGcJJGFsbywwKCRqLCRhcCkKKwlzbGJnCSRhbG8sMCgkaiwkbnApCisJc3RnCSRhbG8sMCgkaiwkcnApCisJbGEJJGosOCgkaikKKwlicmN0CSRjb3VudCwuTHN1YgorCWxnaGkJJGFoaSwwCisJc2xiZ3IJJEFISSwkYWhpCSMgaGFuZGxlIHVwbW9zdCBjYXJyeQorCisJbmdyCSRhcCwkQUhJCisJbGdoaQkkbnAsLTEKKwl4Z3IJJG5wLCRBSEkKKwluZ3IJJG5wLCRycAorCW9ncgkkYXAsJG5wCQkjIGFwPWJvcnJvdz90cDpycAorCisJbGEJJGosMCglcjApCisJbGdyCSRjb3VudCwkbnVtCisuTGNvcHk6CWxnCSRhbG8sMCgkaiwkYXApCSMgY29weSBvciBpbi1wbGFjZSByZWZyZXNoCisJc3RnCSRqLDE2MCgkaiwkc3ApCSMgemFwIHRwCisJc3RnCSRhbG8sMCgkaiwkcnApCisJbGEJJGosOCgkaikKKwlicmN0CSRjb3VudCwuTGNvcHkKKworCWxhCSVyMSwxNjArOCs0OCgkaiwkc3ApCisJbG1nCSVyNiwlcjE1LDAoJXIxKQorCWxnaGkJJXIyLDEJCSMgc2lnbmFsICJwcm9jZXNzZWQiCisJYnIJJXIxNAorLnNpemUJYm5fbXVsX21vbnQsLi1ibl9tdWxfbW9udAorLnN0cmluZwkiTW9udGdvbWVyeSBNdWx0aXBsaWNhdGlvbiBmb3IgczM5MHgsIENSWVBUT0dBTVMgYnkgPGFwcHJvXEBvcGVuc3NsLm9yZz4iCitfX18KKworcHJpbnQgJGNvZGU7CitjbG9zZSBTVERPVVQ7CmRpZmYgLS1naXQgYS9jcnlwdG8vYm4vYXNtL3MzOTB4LlMgYi9jcnlwdG8vYm4vYXNtL3MzOTB4LlMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGY0NWY1ZAotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9ibi9hc20vczM5MHguUwpAQCAtMCwwICsxLDY3OCBAQAorLmlkZW50ICJzMzkweC5TLCB2ZXJzaW9uIDEuMCIKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPiBmb3IgdGhlIE9wZW5TU0wKKy8vIHByb2plY3QuCisvLworLy8gUmlnaHRzIGZvciByZWRpc3RyaWJ1dGlvbiBhbmQgdXNhZ2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMgYXJlCisvLyBncmFudGVkIGFjY29yZGluZyB0byB0aGUgT3BlblNTTCBsaWNlbnNlLiBXYXJyYW50eSBvZiBhbnkga2luZCBpcworLy8gZGlzY2xhaW1lZC4KKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy50ZXh0CisKKyNkZWZpbmUgemVybwklcjAKKworLy8gQk5fVUxPTkcgYm5fbXVsX2FkZF93b3JkcyhCTl9VTE9ORyAqcjIsQk5fVUxPTkcgKnIzLGludCByNCxCTl9VTE9ORyByNSk7CisuZ2xvYmwJYm5fbXVsX2FkZF93b3JkcworLnR5cGUJYm5fbXVsX2FkZF93b3JkcyxAZnVuY3Rpb24KKy5hbGlnbgk0Citibl9tdWxfYWRkX3dvcmRzOgorCWxnaGkJemVybywwCQkvLyB6ZXJvID0gMAorCWxhCSVyMSwwKCVyMikJLy8gcHV0IHJwIGFzaWRlCisJbGdoaQklcjIsMAkJLy8gaT0wOworCWx0Z2ZyCSVyNCwlcjQKKwlibGVyCSVyMTQJCS8vIGlmIChsZW48PTApIHJldHVybiAwOworCisJc3RtZwklcjYsJXIxMCw0OCglcjE1KQorCWxnaGkJJXI4LDAJCS8vIGNhcnJ5ID0gMAorCXNyYWcJJXIxMCwlcjQsMgkvLyBjbnQ9bGVuLzQKKwlqegkuTG9vcDFfbWFkZAorCisuTG9vcDRfbWFkZDoKKwlsZwklcjcsMCglcjIsJXIzKQkvLyBhcFtpXQorCW1sZ3IJJXI2LCVyNQkJLy8gKj13CisJYWxncgklcjcsJXI4CQkvLyArPWNhcnJ5CisJYWxjZ3IJJXI2LHplcm8KKwlhbGcJJXI3LDAoJXIyLCVyMSkJLy8gKz1ycFtpXQorCWFsY2dyCSVyNix6ZXJvCisJc3RnCSVyNywwKCVyMiwlcjEpCS8vIHJwW2ldPQorCisJbGcJJXI5LDgoJXIyLCVyMykKKwltbGdyCSVyOCwlcjUKKwlhbGdyCSVyOSwlcjYKKwlhbGNncgklcjgsemVybworCWFsZwklcjksOCglcjIsJXIxKQorCWFsY2dyCSVyOCx6ZXJvCisJc3RnCSVyOSw4KCVyMiwlcjEpCisKKwlsZwklcjcsMTYoJXIyLCVyMykKKwltbGdyCSVyNiwlcjUKKwlhbGdyCSVyNywlcjgKKwlhbGNncgklcjYsemVybworCWFsZwklcjcsMTYoJXIyLCVyMSkKKwlhbGNncgklcjYsemVybworCXN0ZwklcjcsMTYoJXIyLCVyMSkKKworCWxnCSVyOSwyNCglcjIsJXIzKQorCW1sZ3IJJXI4LCVyNQorCWFsZ3IJJXI5LCVyNgorCWFsY2dyCSVyOCx6ZXJvCisJYWxnCSVyOSwyNCglcjIsJXIxKQorCWFsY2dyCSVyOCx6ZXJvCisJc3RnCSVyOSwyNCglcjIsJXIxKQorCisJbGEJJXIyLDMyKCVyMikJLy8gaSs9NAorCWJyY3QJJXIxMCwuTG9vcDRfbWFkZAorCisJbGdoaQklcjEwLDMKKwlucgklcjQsJXIxMAkvLyBjbnQ9bGVuJTQKKwlqegkuTGVuZF9tYWRkCisKKy5Mb29wMV9tYWRkOgorCWxnCSVyNywwKCVyMiwlcjMpCS8vIGFwW2ldCisJbWxncgklcjYsJXI1CQkvLyAqPXcKKwlhbGdyCSVyNywlcjgJCS8vICs9Y2FycnkKKwlhbGNncgklcjYsemVybworCWFsZwklcjcsMCglcjIsJXIxKQkvLyArPXJwW2ldCisJYWxjZ3IJJXI2LHplcm8KKwlzdGcJJXI3LDAoJXIyLCVyMSkJLy8gcnBbaV09CisKKwlsZ3IJJXI4LCVyNgorCWxhCSVyMiw4KCVyMikJLy8gaSsrCisJYnJjdAklcjQsLkxvb3AxX21hZGQKKworLkxlbmRfbWFkZDoKKwlsZ3IJJXIyLCVyOAorCWxtZwklcjYsJXIxMCw0OCglcjE1KQorCWJyCSVyMTQKKy5zaXplCWJuX211bF9hZGRfd29yZHMsLi1ibl9tdWxfYWRkX3dvcmRzCisKKy8vIEJOX1VMT05HIGJuX211bF93b3JkcyhCTl9VTE9ORyAqcjIsQk5fVUxPTkcgKnIzLGludCByNCxCTl9VTE9ORyByNSk7CisuZ2xvYmwJYm5fbXVsX3dvcmRzCisudHlwZQlibl9tdWxfd29yZHMsQGZ1bmN0aW9uCisuYWxpZ24JNAorYm5fbXVsX3dvcmRzOgorCWxnaGkJemVybywwCQkvLyB6ZXJvID0gMAorCWxhCSVyMSwwKCVyMikJLy8gcHV0IHJwIGFzaWRlCisJbGdoaQklcjIsMAkJLy8gaT0wOworCWx0Z2ZyCSVyNCwlcjQKKwlibGVyCSVyMTQJCS8vIGlmIChsZW48PTApIHJldHVybiAwOworCisJc3RtZwklcjYsJXIxMCw0OCglcjE1KQorCWxnaGkJJXI4LDAJCS8vIGNhcnJ5ID0gMAorCXNyYWcJJXIxMCwlcjQsMgkvLyBjbnQ9bGVuLzQKKwlqegkuTG9vcDFfbXVsCisKKy5Mb29wNF9tdWw6CisJbGcJJXI3LDAoJXIyLCVyMykJLy8gYXBbaV0KKwltbGdyCSVyNiwlcjUJCS8vICo9dworCWFsZ3IJJXI3LCVyOAkJLy8gKz1jYXJyeQorCWFsY2dyCSVyNix6ZXJvCisJc3RnCSVyNywwKCVyMiwlcjEpCS8vIHJwW2ldPQorCisJbGcJJXI5LDgoJXIyLCVyMykKKwltbGdyCSVyOCwlcjUKKwlhbGdyCSVyOSwlcjYKKwlhbGNncgklcjgsemVybworCXN0ZwklcjksOCglcjIsJXIxKQorCisJbGcJJXI3LDE2KCVyMiwlcjMpCisJbWxncgklcjYsJXI1CisJYWxncgklcjcsJXI4CisJYWxjZ3IJJXI2LHplcm8KKwlzdGcJJXI3LDE2KCVyMiwlcjEpCisKKwlsZwklcjksMjQoJXIyLCVyMykKKwltbGdyCSVyOCwlcjUKKwlhbGdyCSVyOSwlcjYKKwlhbGNncgklcjgsemVybworCXN0ZwklcjksMjQoJXIyLCVyMSkKKworCWxhCSVyMiwzMiglcjIpCS8vIGkrPTQKKwlicmN0CSVyMTAsLkxvb3A0X211bAorCisJbGdoaQklcjEwLDMKKwlucgklcjQsJXIxMAkvLyBjbnQ9bGVuJTQKKwlqegkuTGVuZF9tdWwKKworLkxvb3AxX211bDoKKwlsZwklcjcsMCglcjIsJXIzKQkvLyBhcFtpXQorCW1sZ3IJJXI2LCVyNQkJLy8gKj13CisJYWxncgklcjcsJXI4CQkvLyArPWNhcnJ5CisJYWxjZ3IJJXI2LHplcm8KKwlzdGcJJXI3LDAoJXIyLCVyMSkJLy8gcnBbaV09CisKKwlsZ3IJJXI4LCVyNgorCWxhCSVyMiw4KCVyMikJLy8gaSsrCisJYnJjdAklcjQsLkxvb3AxX211bAorCisuTGVuZF9tdWw6CisJbGdyCSVyMiwlcjgKKwlsbWcJJXI2LCVyMTAsNDgoJXIxNSkKKwlicgklcjE0Cisuc2l6ZQlibl9tdWxfd29yZHMsLi1ibl9tdWxfd29yZHMKKworLy8gdm9pZCBibl9zcXJfd29yZHMoQk5fVUxPTkcgKnIyLEJOX1VMT05HICpyMixpbnQgcjQpCisuZ2xvYmwJYm5fc3FyX3dvcmRzCisudHlwZQlibl9zcXJfd29yZHMsQGZ1bmN0aW9uCisuYWxpZ24JNAorYm5fc3FyX3dvcmRzOgorCWx0Z2ZyCSVyNCwlcjQKKwlibGVyCSVyMTQKKworCXN0bWcJJXI2LCVyNyw0OCglcjE1KQorCXNyYWcJJXIxLCVyNCwyCS8vIGNudD1sZW4vNAorCWp6CS5Mb29wMV9zcXIKKworLkxvb3A0X3NxcjoKKwlsZwklcjcsMCglcjMpCisJbWxncgklcjYsJXI3CisJc3RnCSVyNywwKCVyMikKKwlzdGcJJXI2LDgoJXIyKQorCisJbGcJJXI3LDgoJXIzKQorCW1sZ3IJJXI2LCVyNworCXN0ZwklcjcsMTYoJXIyKQorCXN0ZwklcjYsMjQoJXIyKQorCisJbGcJJXI3LDE2KCVyMykKKwltbGdyCSVyNiwlcjcKKwlzdGcJJXI3LDMyKCVyMikKKwlzdGcJJXI2LDQwKCVyMikKKworCWxnCSVyNywyNCglcjMpCisJbWxncgklcjYsJXI3CisJc3RnCSVyNyw0OCglcjIpCisJc3RnCSVyNiw1NiglcjIpCisKKwlsYQklcjMsMzIoJXIzKQorCWxhCSVyMiw2NCglcjIpCisJYnJjdAklcjEsLkxvb3A0X3NxcgorCisJbGdoaQklcjEsMworCW5yCSVyNCwlcjEJCS8vIGNudD1sZW4lNAorCWp6CS5MZW5kX3NxcgorCisuTG9vcDFfc3FyOgorCWxnCSVyNywwKCVyMykKKwltbGdyCSVyNiwlcjcKKwlzdGcJJXI3LDAoJXIyKQorCXN0ZwklcjYsOCglcjIpCisKKwlsYQklcjMsOCglcjMpCisJbGEJJXIyLDE2KCVyMikKKwlicmN0CSVyNCwuTG9vcDFfc3FyCisKKy5MZW5kX3NxcjoKKwlsbWcJJXI2LCVyNyw0OCglcjE1KQorCWJyCSVyMTQKKy5zaXplCWJuX3Nxcl93b3JkcywuLWJuX3Nxcl93b3JkcworCisvLyBCTl9VTE9ORyBibl9kaXZfd29yZHMoQk5fVUxPTkcgaCxCTl9VTE9ORyBsLEJOX1VMT05HIGQpOworLmdsb2JsCWJuX2Rpdl93b3JkcworLnR5cGUJYm5fZGl2X3dvcmRzLEBmdW5jdGlvbgorLmFsaWduCTQKK2JuX2Rpdl93b3JkczoKKwlkbGdyCSVyMiwlcjQKKwlsZ3IJJXIyLCVyMworCWJyCSVyMTQKKy5zaXplCWJuX2Rpdl93b3JkcywuLWJuX2Rpdl93b3JkcworCisvLyBCTl9VTE9ORyBibl9hZGRfd29yZHMoQk5fVUxPTkcgKnIyLEJOX1VMT05HICpyMyxCTl9VTE9ORyAqcjQsaW50IHI1KTsKKy5nbG9ibAlibl9hZGRfd29yZHMKKy50eXBlCWJuX2FkZF93b3JkcyxAZnVuY3Rpb24KKy5hbGlnbgk0Citibl9hZGRfd29yZHM6CisJbGEJJXIxLDAoJXIyKQkvLyBwdXQgcnAgYXNpZGUKKwlsZ2hpCSVyMiwwCQkvLyBpPTAKKwlsdGdmcgklcjUsJXI1CisJYmxlcgklcjE0CQkvLyBpZiAobGVuPD0wKSByZXR1cm4gMDsKKworCXN0ZwklcjYsNDgoJXIxNSkKKwlsZ2hpCSVyNiwzCisJbnIJJXI2LCVyNQkJLy8gbGVuJTQKKwlzcmEJJXI1LDIJCS8vIGxlbi80LCB1c2Ugc3JhIGJlY2F1c2UgaXQgc2V0cyBjb25kaXRpb24gY29kZQorCWp6CS5Mb29wMV9hZGQJLy8gY2FycnkgaXMgaW5jaWRlbnRhbGx5IGNsZWFyZWQgaWYgYnJhbmNoIHRha2VuCisJYWxncgklcjIsJXIyCQkvLyBjbGVhciBjYXJyeQorCisuTG9vcDRfYWRkOgorCWxnCSVyMCwwKCVyMiwlcjMpCisJYWxjZwklcjAsMCglcjIsJXI0KQorCXN0ZwklcjAsMCglcjIsJXIxKQorCWxnCSVyMCw4KCVyMiwlcjMpCisJYWxjZwklcjAsOCglcjIsJXI0KQorCXN0ZwklcjAsOCglcjIsJXIxKQorCWxnCSVyMCwxNiglcjIsJXIzKQorCWFsY2cJJXIwLDE2KCVyMiwlcjQpCisJc3RnCSVyMCwxNiglcjIsJXIxKQorCWxnCSVyMCwyNCglcjIsJXIzKQorCWFsY2cJJXIwLDI0KCVyMiwlcjQpCisJc3RnCSVyMCwyNCglcjIsJXIxKQorCisJbGEJJXIyLDMyKCVyMikJLy8gaSs9NAorCWJyY3QJJXI1LC5Mb29wNF9hZGQKKworCWxhCSVyNiwxKCVyNikJLy8gc2VlIGlmIGxlbiU0IGlzIHplcm8gLi4uCisJYnJjdAklcjYsLkxvb3AxX2FkZAkvLyB3aXRob3V0IHRvdWNoaW5nIGNvbmRpdGlvbiBjb2RlOi0pCisKKy5MZXhpdF9hZGQ6CisJbGdoaQklcjIsMAorCWFsY2dyCSVyMiwlcjIKKwlsZwklcjYsNDgoJXIxNSkKKwlicgklcjE0CisKKy5Mb29wMV9hZGQ6CisJbGcJJXIwLDAoJXIyLCVyMykKKwlhbGNnCSVyMCwwKCVyMiwlcjQpCisJc3RnCSVyMCwwKCVyMiwlcjEpCisKKwlsYQklcjIsOCglcjIpCS8vIGkrKworCWJyY3QJJXI2LC5Mb29wMV9hZGQKKworCWoJLkxleGl0X2FkZAorLnNpemUJYm5fYWRkX3dvcmRzLC4tYm5fYWRkX3dvcmRzCisKKy8vIEJOX1VMT05HIGJuX3N1Yl93b3JkcyhCTl9VTE9ORyAqcjIsQk5fVUxPTkcgKnIzLEJOX1VMT05HICpyNCxpbnQgcjUpOworLmdsb2JsCWJuX3N1Yl93b3JkcworLnR5cGUJYm5fc3ViX3dvcmRzLEBmdW5jdGlvbgorLmFsaWduCTQKK2JuX3N1Yl93b3JkczoKKwlsYQklcjEsMCglcjIpCS8vIHB1dCBycCBhc2lkZQorCWxnaGkJJXIyLDAJCS8vIGk9MAorCWx0Z2ZyCSVyNSwlcjUKKwlibGVyCSVyMTQJCS8vIGlmIChsZW48PTApIHJldHVybiAwOworCisJc3RnCSVyNiw0OCglcjE1KQorCWxnaGkJJXI2LDMKKwlucgklcjYsJXI1CQkvLyBsZW4lNAorCXNyYQklcjUsMgkJLy8gbGVuLzQsIHVzZSBzcmEgYmVjYXVzZSBpdCBzZXRzIGNvbmRpdGlvbiBjb2RlCisJam56CS5Mb29wNF9zdWIJLy8gYm9ycm93IGlzIGluY2lkZW50YWxseSBjbGVhcmVkIGlmIGJyYW5jaCB0YWtlbgorCXNsZ3IJJXIyLCVyMgkJLy8gY2xlYXIgYm9ycm93CisKKy5Mb29wMV9zdWI6CisJbGcJJXIwLDAoJXIyLCVyMykKKwlzbGJnCSVyMCwwKCVyMiwlcjQpCisJc3RnCSVyMCwwKCVyMiwlcjEpCisKKwlsYQklcjIsOCglcjIpCS8vIGkrKworCWJyY3QJJXI2LC5Mb29wMV9zdWIKKwlqCS5MZXhpdF9zdWIKKworLkxvb3A0X3N1YjoKKwlsZwklcjAsMCglcjIsJXIzKQorCXNsYmcJJXIwLDAoJXIyLCVyNCkKKwlzdGcJJXIwLDAoJXIyLCVyMSkKKwlsZwklcjAsOCglcjIsJXIzKQorCXNsYmcJJXIwLDgoJXIyLCVyNCkKKwlzdGcJJXIwLDgoJXIyLCVyMSkKKwlsZwklcjAsMTYoJXIyLCVyMykKKwlzbGJnCSVyMCwxNiglcjIsJXI0KQorCXN0ZwklcjAsMTYoJXIyLCVyMSkKKwlsZwklcjAsMjQoJXIyLCVyMykKKwlzbGJnCSVyMCwyNCglcjIsJXI0KQorCXN0ZwklcjAsMjQoJXIyLCVyMSkKKworCWxhCSVyMiwzMiglcjIpCS8vIGkrPTQKKwlicmN0CSVyNSwuTG9vcDRfc3ViCisKKwlsYQklcjYsMSglcjYpCS8vIHNlZSBpZiBsZW4lNCBpcyB6ZXJvIC4uLgorCWJyY3QJJXI2LC5Mb29wMV9zdWIJLy8gd2l0aG91dCB0b3VjaGluZyBjb25kaXRpb24gY29kZTotKQorCisuTGV4aXRfc3ViOgorCWxnaGkJJXIyLDAKKwlzbGJncgklcjIsJXIyCisJbGNncgklcjIsJXIyCisJbGcJJXI2LDQ4KCVyMTUpCisJYnIJJXIxNAorLnNpemUJYm5fc3ViX3dvcmRzLC4tYm5fc3ViX3dvcmRzCisKKyNkZWZpbmUgYzEJJXIxCisjZGVmaW5lIGMyCSVyNQorI2RlZmluZSBjMwklcjgKKworI2RlZmluZSBtdWxfYWRkX2MoYWksYmksYzEsYzIsYzMpCVwKKwlsZwklcjcsYWkqOCglcjMpOwkJXAorCW1sZwklcjYsYmkqOCglcjQpOwkJXAorCWFsZ3IJYzEsJXI3OwkJCVwKKwlhbGNncgljMiwlcjY7CQkJXAorCWFsY2dyCWMzLHplcm8KKworLy8gdm9pZCBibl9tdWxfY29tYmE4KEJOX1VMT05HICpyMixCTl9VTE9ORyAqcjMsQk5fVUxPTkcgKnI0KTsKKy5nbG9ibAlibl9tdWxfY29tYmE4CisudHlwZQlibl9tdWxfY29tYmE4LEBmdW5jdGlvbgorLmFsaWduCTQKK2JuX211bF9jb21iYTg6CisJc3RtZwklcjYsJXI4LDQ4KCVyMTUpCisKKwlsZ2hpCWMxLDAKKwlsZ2hpCWMyLDAKKwlsZ2hpCWMzLDAKKwlsZ2hpCXplcm8sMAorCisJbXVsX2FkZF9jKDAsMCxjMSxjMixjMyk7CisJc3RnCWMxLDAqOCglcjIpCisJbGdoaQljMSwwCisKKwltdWxfYWRkX2MoMCwxLGMyLGMzLGMxKTsKKwltdWxfYWRkX2MoMSwwLGMyLGMzLGMxKTsKKwlzdGcJYzIsMSo4KCVyMikKKwlsZ2hpCWMyLDAKKworCW11bF9hZGRfYygyLDAsYzMsYzEsYzIpOworCW11bF9hZGRfYygxLDEsYzMsYzEsYzIpOworCW11bF9hZGRfYygwLDIsYzMsYzEsYzIpOworCXN0ZwljMywyKjgoJXIyKQorCWxnaGkJYzMsMAorCisJbXVsX2FkZF9jKDAsMyxjMSxjMixjMyk7CisJbXVsX2FkZF9jKDEsMixjMSxjMixjMyk7CisJbXVsX2FkZF9jKDIsMSxjMSxjMixjMyk7CisJbXVsX2FkZF9jKDMsMCxjMSxjMixjMyk7CisJc3RnCWMxLDMqOCglcjIpCisJbGdoaQljMSwwCisKKwltdWxfYWRkX2MoNCwwLGMyLGMzLGMxKTsKKwltdWxfYWRkX2MoMywxLGMyLGMzLGMxKTsKKwltdWxfYWRkX2MoMiwyLGMyLGMzLGMxKTsKKwltdWxfYWRkX2MoMSwzLGMyLGMzLGMxKTsKKwltdWxfYWRkX2MoMCw0LGMyLGMzLGMxKTsKKwlzdGcJYzIsNCo4KCVyMikKKwlsZ2hpCWMyLDAKKworCW11bF9hZGRfYygwLDUsYzMsYzEsYzIpOworCW11bF9hZGRfYygxLDQsYzMsYzEsYzIpOworCW11bF9hZGRfYygyLDMsYzMsYzEsYzIpOworCW11bF9hZGRfYygzLDIsYzMsYzEsYzIpOworCW11bF9hZGRfYyg0LDEsYzMsYzEsYzIpOworCW11bF9hZGRfYyg1LDAsYzMsYzEsYzIpOworCXN0ZwljMyw1KjgoJXIyKQorCWxnaGkJYzMsMAorCisJbXVsX2FkZF9jKDYsMCxjMSxjMixjMyk7CisJbXVsX2FkZF9jKDUsMSxjMSxjMixjMyk7CisJbXVsX2FkZF9jKDQsMixjMSxjMixjMyk7CisJbXVsX2FkZF9jKDMsMyxjMSxjMixjMyk7CisJbXVsX2FkZF9jKDIsNCxjMSxjMixjMyk7CisJbXVsX2FkZF9jKDEsNSxjMSxjMixjMyk7CisJbXVsX2FkZF9jKDAsNixjMSxjMixjMyk7CisJc3RnCWMxLDYqOCglcjIpCisJbGdoaQljMSwwCisKKwltdWxfYWRkX2MoMCw3LGMyLGMzLGMxKTsKKwltdWxfYWRkX2MoMSw2LGMyLGMzLGMxKTsKKwltdWxfYWRkX2MoMiw1LGMyLGMzLGMxKTsKKwltdWxfYWRkX2MoMyw0LGMyLGMzLGMxKTsKKwltdWxfYWRkX2MoNCwzLGMyLGMzLGMxKTsKKwltdWxfYWRkX2MoNSwyLGMyLGMzLGMxKTsKKwltdWxfYWRkX2MoNiwxLGMyLGMzLGMxKTsKKwltdWxfYWRkX2MoNywwLGMyLGMzLGMxKTsKKwlzdGcJYzIsNyo4KCVyMikKKwlsZ2hpCWMyLDAKKworCW11bF9hZGRfYyg3LDEsYzMsYzEsYzIpOworCW11bF9hZGRfYyg2LDIsYzMsYzEsYzIpOworCW11bF9hZGRfYyg1LDMsYzMsYzEsYzIpOworCW11bF9hZGRfYyg0LDQsYzMsYzEsYzIpOworCW11bF9hZGRfYygzLDUsYzMsYzEsYzIpOworCW11bF9hZGRfYygyLDYsYzMsYzEsYzIpOworCW11bF9hZGRfYygxLDcsYzMsYzEsYzIpOworCXN0ZwljMyw4KjgoJXIyKQorCWxnaGkJYzMsMAorCisJbXVsX2FkZF9jKDIsNyxjMSxjMixjMyk7CisJbXVsX2FkZF9jKDMsNixjMSxjMixjMyk7CisJbXVsX2FkZF9jKDQsNSxjMSxjMixjMyk7CisJbXVsX2FkZF9jKDUsNCxjMSxjMixjMyk7CisJbXVsX2FkZF9jKDYsMyxjMSxjMixjMyk7CisJbXVsX2FkZF9jKDcsMixjMSxjMixjMyk7CisJc3RnCWMxLDkqOCglcjIpCisJbGdoaQljMSwwCisKKwltdWxfYWRkX2MoNywzLGMyLGMzLGMxKTsKKwltdWxfYWRkX2MoNiw0LGMyLGMzLGMxKTsKKwltdWxfYWRkX2MoNSw1LGMyLGMzLGMxKTsKKwltdWxfYWRkX2MoNCw2LGMyLGMzLGMxKTsKKwltdWxfYWRkX2MoMyw3LGMyLGMzLGMxKTsKKwlzdGcJYzIsMTAqOCglcjIpCisJbGdoaQljMiwwCisKKwltdWxfYWRkX2MoNCw3LGMzLGMxLGMyKTsKKwltdWxfYWRkX2MoNSw2LGMzLGMxLGMyKTsKKwltdWxfYWRkX2MoNiw1LGMzLGMxLGMyKTsKKwltdWxfYWRkX2MoNyw0LGMzLGMxLGMyKTsKKwlzdGcJYzMsMTEqOCglcjIpCisJbGdoaQljMywwCisKKwltdWxfYWRkX2MoNyw1LGMxLGMyLGMzKTsKKwltdWxfYWRkX2MoNiw2LGMxLGMyLGMzKTsKKwltdWxfYWRkX2MoNSw3LGMxLGMyLGMzKTsKKwlzdGcJYzEsMTIqOCglcjIpCisJbGdoaQljMSwwCisKKworCW11bF9hZGRfYyg2LDcsYzIsYzMsYzEpOworCW11bF9hZGRfYyg3LDYsYzIsYzMsYzEpOworCXN0ZwljMiwxMyo4KCVyMikKKwlsZ2hpCWMyLDAKKworCW11bF9hZGRfYyg3LDcsYzMsYzEsYzIpOworCXN0ZwljMywxNCo4KCVyMikKKwlzdGcJYzEsMTUqOCglcjIpCisKKwlsbWcJJXI2LCVyOCw0OCglcjE1KQorCWJyCSVyMTQKKy5zaXplCWJuX211bF9jb21iYTgsLi1ibl9tdWxfY29tYmE4CisKKy8vIHZvaWQgYm5fbXVsX2NvbWJhNChCTl9VTE9ORyAqcjIsQk5fVUxPTkcgKnIzLEJOX1VMT05HICpyNCk7CisuZ2xvYmwJYm5fbXVsX2NvbWJhNAorLnR5cGUJYm5fbXVsX2NvbWJhNCxAZnVuY3Rpb24KKy5hbGlnbgk0Citibl9tdWxfY29tYmE0OgorCXN0bWcJJXI2LCVyOCw0OCglcjE1KQorCisJbGdoaQljMSwwCisJbGdoaQljMiwwCisJbGdoaQljMywwCisJbGdoaQl6ZXJvLDAKKworCW11bF9hZGRfYygwLDAsYzEsYzIsYzMpOworCXN0ZwljMSwwKjgoJXIzKQorCWxnaGkJYzEsMAorCisJbXVsX2FkZF9jKDAsMSxjMixjMyxjMSk7CisJbXVsX2FkZF9jKDEsMCxjMixjMyxjMSk7CisJc3RnCWMyLDEqOCglcjIpCisJbGdoaQljMiwwCisKKwltdWxfYWRkX2MoMiwwLGMzLGMxLGMyKTsKKwltdWxfYWRkX2MoMSwxLGMzLGMxLGMyKTsKKwltdWxfYWRkX2MoMCwyLGMzLGMxLGMyKTsKKwlzdGcJYzMsMio4KCVyMikKKwlsZ2hpCWMzLDAKKworCW11bF9hZGRfYygwLDMsYzEsYzIsYzMpOworCW11bF9hZGRfYygxLDIsYzEsYzIsYzMpOworCW11bF9hZGRfYygyLDEsYzEsYzIsYzMpOworCW11bF9hZGRfYygzLDAsYzEsYzIsYzMpOworCXN0ZwljMSwzKjgoJXIyKQorCWxnaGkJYzEsMAorCisJbXVsX2FkZF9jKDMsMSxjMixjMyxjMSk7CisJbXVsX2FkZF9jKDIsMixjMixjMyxjMSk7CisJbXVsX2FkZF9jKDEsMyxjMixjMyxjMSk7CisJc3RnCWMyLDQqOCglcjIpCisJbGdoaQljMiwwCisKKwltdWxfYWRkX2MoMiwzLGMzLGMxLGMyKTsKKwltdWxfYWRkX2MoMywyLGMzLGMxLGMyKTsKKwlzdGcJYzMsNSo4KCVyMikKKwlsZ2hpCWMzLDAKKworCW11bF9hZGRfYygzLDMsYzEsYzIsYzMpOworCXN0ZwljMSw2KjgoJXIyKQorCXN0ZwljMiw3KjgoJXIyKQorCisJc3RtZwklcjYsJXI4LDQ4KCVyMTUpCisJYnIJJXIxNAorLnNpemUJYm5fbXVsX2NvbWJhNCwuLWJuX211bF9jb21iYTQKKworI2RlZmluZSBzcXJfYWRkX2MoYWksYzEsYzIsYzMpCQlcCisJbGcJJXI3LGFpKjgoJXIzKTsJCVwKKwltbGdyCSVyNiwlcjc7CQlcCisJYWxncgljMSwlcjc7CQkJXAorCWFsY2dyCWMyLCVyNjsJCQlcCisJYWxjZ3IJYzMsemVybworCisjZGVmaW5lIHNxcl9hZGRfYzIoYWksYWosYzEsYzIsYzMpCVwKKwlsZwklcjcsYWkqOCglcjMpOwkJXAorCW1sZwklcjYsYWoqOCglcjMpOwkJXAorCWFsZ3IJYzEsJXI3OwkJCVwKKwlhbGNncgljMiwlcjY7CQkJXAorCWFsY2dyCWMzLHplcm87CQlcCisJYWxncgljMSwlcjc7CQkJXAorCWFsY2dyCWMyLCVyNjsJCQlcCisJYWxjZ3IJYzMsemVybworCisvLyB2b2lkIGJuX3Nxcl9jb21iYTgoQk5fVUxPTkcgKnIyLEJOX1VMT05HICpyMyk7CisuZ2xvYmwJYm5fc3FyX2NvbWJhOAorLnR5cGUJYm5fc3FyX2NvbWJhOCxAZnVuY3Rpb24KKy5hbGlnbgk0Citibl9zcXJfY29tYmE4OgorCXN0bWcJJXI2LCVyOCw0OCglcjE1KQorCisJbGdoaQljMSwwCisJbGdoaQljMiwwCisJbGdoaQljMywwCisJbGdoaQl6ZXJvLDAKKworCXNxcl9hZGRfYygwLGMxLGMyLGMzKTsKKwlzdGcJYzEsMCo4KCVyMikKKwlsZ2hpCWMxLDAKKworCXNxcl9hZGRfYzIoMSwwLGMyLGMzLGMxKTsKKwlzdGcJYzIsMSo4KCVyMikKKwlsZ2hpCWMyLDAKKworCXNxcl9hZGRfYygxLGMzLGMxLGMyKTsKKwlzcXJfYWRkX2MyKDIsMCxjMyxjMSxjMik7CisJc3RnCWMzLDIqOCglcjIpCisJbGdoaQljMywwCisKKwlzcXJfYWRkX2MyKDMsMCxjMSxjMixjMyk7CisJc3FyX2FkZF9jMigyLDEsYzEsYzIsYzMpOworCXN0ZwljMSwzKjgoJXIyKQorCWxnaGkJYzEsMAorCisJc3FyX2FkZF9jKDIsYzIsYzMsYzEpOworCXNxcl9hZGRfYzIoMywxLGMyLGMzLGMxKTsKKwlzcXJfYWRkX2MyKDQsMCxjMixjMyxjMSk7CisJc3RnCWMyLDQqOCglcjIpCisJbGdoaQljMiwwCisKKwlzcXJfYWRkX2MyKDUsMCxjMyxjMSxjMik7CisJc3FyX2FkZF9jMig0LDEsYzMsYzEsYzIpOworCXNxcl9hZGRfYzIoMywyLGMzLGMxLGMyKTsKKwlzdGcJYzMsNSo4KCVyMikKKwlsZ2hpCWMzLDAKKworCXNxcl9hZGRfYygzLGMxLGMyLGMzKTsKKwlzcXJfYWRkX2MyKDQsMixjMSxjMixjMyk7CisJc3FyX2FkZF9jMig1LDEsYzEsYzIsYzMpOworCXNxcl9hZGRfYzIoNiwwLGMxLGMyLGMzKTsKKwlzdGcJYzEsNio4KCVyMikKKwlsZ2hpCWMxLDAKKworCXNxcl9hZGRfYzIoNywwLGMyLGMzLGMxKTsKKwlzcXJfYWRkX2MyKDYsMSxjMixjMyxjMSk7CisJc3FyX2FkZF9jMig1LDIsYzIsYzMsYzEpOworCXNxcl9hZGRfYzIoNCwzLGMyLGMzLGMxKTsKKwlzdGcJYzIsNyo4KCVyMikKKwlsZ2hpCWMyLDAKKworCXNxcl9hZGRfYyg0LGMzLGMxLGMyKTsKKwlzcXJfYWRkX2MyKDUsMyxjMyxjMSxjMik7CisJc3FyX2FkZF9jMig2LDIsYzMsYzEsYzIpOworCXNxcl9hZGRfYzIoNywxLGMzLGMxLGMyKTsKKwlzdGcJYzMsOCo4KCVyMikKKwlsZ2hpCWMzLDAKKworCXNxcl9hZGRfYzIoNywyLGMxLGMyLGMzKTsKKwlzcXJfYWRkX2MyKDYsMyxjMSxjMixjMyk7CisJc3FyX2FkZF9jMig1LDQsYzEsYzIsYzMpOworCXN0ZwljMSw5KjgoJXIyKQorCWxnaGkJYzEsMAorCisJc3FyX2FkZF9jKDUsYzIsYzMsYzEpOworCXNxcl9hZGRfYzIoNiw0LGMyLGMzLGMxKTsKKwlzcXJfYWRkX2MyKDcsMyxjMixjMyxjMSk7CisJc3RnCWMyLDEwKjgoJXIyKQorCWxnaGkJYzIsMAorCisJc3FyX2FkZF9jMig3LDQsYzMsYzEsYzIpOworCXNxcl9hZGRfYzIoNiw1LGMzLGMxLGMyKTsKKwlzdGcJYzMsMTEqOCglcjIpCisJbGdoaQljMywwCisKKwlzcXJfYWRkX2MoNixjMSxjMixjMyk7CisJc3FyX2FkZF9jMig3LDUsYzEsYzIsYzMpOworCXN0ZwljMSwxMio4KCVyMikKKwlsZ2hpCWMxLDAKKworCXNxcl9hZGRfYzIoNyw2LGMyLGMzLGMxKTsKKwlzdGcJYzIsMTMqOCglcjIpCisJbGdoaQljMiwwCisKKwlzcXJfYWRkX2MoNyxjMyxjMSxjMik7CisJc3RnCWMzLDE0KjgoJXIyKQorCXN0ZwljMSwxNSo4KCVyMikKKworCWxtZwklcjYsJXI4LDQ4KCVyMTUpCisJYnIJJXIxNAorLnNpemUJYm5fc3FyX2NvbWJhOCwuLWJuX3Nxcl9jb21iYTgKKworLy8gdm9pZCBibl9zcXJfY29tYmE0KEJOX1VMT05HICpyMixCTl9VTE9ORyAqcjMpOworLmdsb2JsIGJuX3Nxcl9jb21iYTQKKy50eXBlCWJuX3Nxcl9jb21iYTQsQGZ1bmN0aW9uCisuYWxpZ24JNAorYm5fc3FyX2NvbWJhNDoKKwlzdG1nCSVyNiwlcjgsNDgoJXIxNSkKKworCWxnaGkJYzEsMAorCWxnaGkJYzIsMAorCWxnaGkJYzMsMAorCWxnaGkJemVybywwCisKKwlzcXJfYWRkX2MoMCxjMSxjMixjMyk7CisJc3RnCWMxLDAqOCglcjIpCisJbGdoaQljMSwwCisKKwlzcXJfYWRkX2MyKDEsMCxjMixjMyxjMSk7CisJc3RnCWMyLDEqOCglcjIpCisJbGdoaQljMiwwCisKKwlzcXJfYWRkX2MoMSxjMyxjMSxjMik7CisJc3FyX2FkZF9jMigyLDAsYzMsYzEsYzIpOworCXN0ZwljMywyKjgoJXIyKQorCWxnaGkJYzMsMAorCisJc3FyX2FkZF9jMigzLDAsYzEsYzIsYzMpOworCXNxcl9hZGRfYzIoMiwxLGMxLGMyLGMzKTsKKwlzdGcJYzEsMyo4KCVyMikKKwlsZ2hpCWMxLDAKKworCXNxcl9hZGRfYygyLGMyLGMzLGMxKTsKKwlzcXJfYWRkX2MyKDMsMSxjMixjMyxjMSk7CisJc3RnCWMyLDQqOCglcjIpCisJbGdoaQljMiwwCisKKwlzcXJfYWRkX2MyKDMsMixjMyxjMSxjMik7CisJc3RnCWMzLDUqOCglcjIpCisJbGdoaQljMywwCisKKwlzcXJfYWRkX2MoMyxjMSxjMixjMyk7CisJc3RnCWMxLDYqOCglcjIpCisJc3RnCWMyLDcqOCglcjIpCisKKwlsbWcJJXI2LCVyOCw0OCglcjE1KQorCWJyCSVyMTQKKy5zaXplCWJuX3Nxcl9jb21iYTQsLi1ibl9zcXJfY29tYmE0CmRpZmYgLS1naXQgYS9jcnlwdG8vYm4vYXNtL3NwYXJjdjhwbHVzLlMgYi9jcnlwdG8vYm4vYXNtL3NwYXJjdjhwbHVzLlMKaW5kZXggOGM1NmUyZS4uNjNkZTE4NiAxMDA2NDQKLS0tIGEvY3J5cHRvL2JuL2FzbS9zcGFyY3Y4cGx1cy5TCisrKyBiL2NyeXB0by9ibi9hc20vc3BhcmN2OHBsdXMuUwpAQCAtMTQ0LDYgKzE0NCwxOSBAQAogICoJICAgIH0KICAqLwogCisjaWYgZGVmaW5lZChfX1NVTlBST19DKSAmJiBkZWZpbmVkKF9fc3BhcmN2OSkKKyAgLyogVGhleSd2ZSBzYWlkIC14YXJjaD12OSBhdCBjb21tYW5kIGxpbmUgKi8KKyAgLnJlZ2lzdGVyCSVnMiwjc2NyYXRjaAorICAucmVnaXN0ZXIJJWczLCNzY3JhdGNoCisjIGRlZmluZQlGUkFNRV9TSVpFCS0xOTIKKyNlbGlmIGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoX19hcmNoNjRfXykKKyAgLyogVGhleSd2ZSBzYWlkIC1tNjQgYXQgY29tbWFuZCBsaW5lICovCisgIC5yZWdpc3RlcgklZzIsI3NjcmF0Y2gKKyAgLnJlZ2lzdGVyCSVnMywjc2NyYXRjaAorIyBkZWZpbmUJRlJBTUVfU0laRQktMTkyCisjZWxzZSAKKyMgZGVmaW5lCUZSQU1FX1NJWkUJLTk2CisjZW5kaWYgCiAvKgogICogR05VIGFzc2VtYmxlciBjYW4ndCBzdGFuZCBzdHV3Oi0oCiAgKi8KQEAgLTYxOSw4ICs2MzIsNiBAQAogICoJCQkJCQkJQW5keS4KICAqLwogCi0jZGVmaW5lIEZSQU1FX1NJWkUJLTk2Ci0KIC8qCiAgKiBIZXJlIGlzIHJlZ2lzdGVyIHVzYWdlIG1hcCBmb3IgKmFsbCogcm91dGluZXMgYmVsb3cuCiAgKi8KZGlmZiAtLWdpdCBhL2NyeXB0by9ibi9hc20vc3BhcmN2OS1tb250LnBsIGIvY3J5cHRvL2JuL2FzbS9zcGFyY3Y5LW1vbnQucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhmYjFlOAotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9ibi9hc20vc3BhcmN2OS1tb250LnBsCkBAIC0wLDAgKzEsNjA2IEBACisjIS91c3IvYmluL2VudiBwZXJsCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgV3JpdHRlbiBieSBBbmR5IFBvbHlha292IDxhcHByb0BmeS5jaGFsbWVycy5zZT4gZm9yIHRoZSBPcGVuU1NMCisjIHByb2plY3QuIFRoZSBtb2R1bGUgaXMsIGhvd2V2ZXIsIGR1YWwgbGljZW5zZWQgdW5kZXIgT3BlblNTTCBhbmQKKyMgQ1JZUFRPR0FNUyBsaWNlbnNlcyBkZXBlbmRpbmcgb24gd2hlcmUgeW91IG9idGFpbiBpdC4gRm9yIGZ1cnRoZXIKKyMgZGV0YWlscyBzZWUgaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9+YXBwcm8vY3J5cHRvZ2Ftcy8uCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgRGVjZW1iZXIgMjAwNQorIworIyBQdXJlIFNQQVJDdjkvOCsgYW5kIElBTFUtb25seSBibl9tdWxfbW9udCBpbXBsZW1lbnRhdGlvbi4gVGhlIHJlYXNvbnMKKyMgZm9yIHVuZGVydGFrZW4gZWZmb3J0IGFyZSBtdWx0aXBsZS4gRmlyc3Qgb2YgYWxsLCBVbHRyYVNQQVJDIGlzIG5vdAorIyB0aGUgd2hvbGUgU1BBUkN2OSB1bml2ZXJzZSBhbmQgb3RoZXIgVklTLWZyZWUgaW1wbGVtZW50YXRpb25zIGRlc2VydmUKKyMgb3B0aW1pemVkIGNvZGUgYXMgbXVjaC4gU2Vjb25kbHksIG5ld2x5IGludHJvZHVjZWQgVWx0cmFTUEFSQyBUMSwKKyMgYS5rLmEuIE5pYWdhcmEsIGhhcyBzaGFyZWQgRlBVIGFuZCBjb25jdXJyZW50IEZQVS1pbnRlbnNpdmUgcGF0aGVzLAorIyBzdWNoIGFzIHNwYXJjdjlhLW1vbnQsIHdpbGwgc2ltcGx5IHNpbmsgaXQuIFllcywgVDEgaXMgZXF1aXBwZWQgd2l0aAorIyBzZXZlcmFsIGludGVncmF0ZWQgUlNBL0RTQSBhY2NlbGVyYXRvciBjaXJjdWl0cyBhY2Nlc3NpYmxlIHRocm91Z2gKKyMga2VybmVsIGRyaXZlciBbb25seSgqKV0sIGJ1dCBoYXZpbmcgZGVjZW50IHVzZXItbGFuZCBzb2Z0d2FyZQorIyBpbXBsZW1lbnRhdGlvbiBpcyBpbXBvcnRhbnQgdG9vLiBGaW5hbGx5LCByZWFzb25zIGxpa2UgZGVzaXJlIHRvCisjIGV4cGVyaW1lbnQgd2l0aCBkZWRpY2F0ZWQgc3F1YXJpbmcgcHJvY2VkdXJlLiBZZXMsIHRoaXMgbW9kdWxlCisjIGltcGxlbWVudHMgb25lLCBiZWNhdXNlIGl0IHdhcyBlYXNpZXN0IHRvIGRyYWZ0IGl0IGluIFNQQVJDdjkKKyMgaW5zdHJ1Y3Rpb25zLi4uCisKKyMgKCopCUVuZ2luZSBhY2Nlc3NpbmcgdGhlIGRyaXZlciBpbiBxdWVzdGlvbiBpcyBvbiBteSBUT0RPIGxpc3QuCisjCUZvciByZWZlcmVuY2UsIGFjY2VsZWF0b3IgaXMgZXN0aW1hdGVkIHRvIGdpdmUgNiB0byAxMCB0aW1lcworIwlpbXByb3ZlbWVudCBvbiBzaW5nbGUtdGhyZWFkZWQgUlNBIHNpZ24uIEl0IHNob3VsZCBiZSBub3RlZAorIwl0aGF0IDYtMTB4IGltcHJvdmVtZW50IGNvZWZmaWNpZW50IGRvZXMgbm90IGFjdHVhbGx5IG1lYW4KKyMJc29tZXRoaW5nIGV4dHJhb3JkaW5hcnkgaW4gdGVybXMgb2YgYWJzb2x1dGUgW3NpbmdsZS10aHJlYWRlZF0KKyMJcGVyZm9ybWFuY2UsIGFzIFNQQVJDdjkgaW5zdHJ1Y3Rpb24gc2V0IGlzIGJ5IGFsbCBtZWFucyBsZWFzdAorIwlzdWl0YWJsZSBmb3IgaGlnaCBwZXJmb3JtYW5jZSBjcnlwdG8gYW1vbmcgb3RoZXIgNjQgYml0CisjCXBsYXRmb3Jtcy4gNi0xMHggZmFjdG9yIHNpbXBseSBwbGFjZXMgVDEgaW4gc2FtZSBwZXJmb3JtYW5jZQorIwlkb21haW4gYXMgc2F5IEFNRDY0IGFuZCBJQS02NC4gSW1wcm92ZW1lbnQgb2YgUlNBIHZlcmlmeSBkb24ndAorIwlhcHBlYXIgaW1wcmVzc2l2ZSBhdCBhbGwsIGJ1dCBpdCdzIHRoZSBzaWduIG9wZXJhdGlvbiB3aGljaCBpcworIwlmYXIgbW9yZSBjcml0aWNhbC9pbnRlcmVzdGluZy4KKworIyBZb3UgbWlnaHQgbm90aWNlIHRoYXQgaW5uZXIgbG9vcHMgYXJlIG1vZHVsby1zY2hlZHVsZWQ6LSkgVGhpcyBoYXMKKyMgZXNzZW50aWFsbHkgbmVnbGlnaWJsZSBpbXBhY3Qgb24gVWx0cmFTUEFSQyBwZXJmb3JtYW5jZSwgaXQncworIyBGdWppdHN1IFNQQVJDNjQgViB1c2VycyB3aG8gc2hvdWxkIG5vdGljZSBhbmQgaG9wZWZ1bGx5IGFwcHJlY2lhdGUKKyMgdGhlIGFkdmFudGFnZS4uLiBDdXJyZW50bHkgdGhpcyBtb2R1bGUgc3VycGFzc2VzIHNwYXJjdjlhLW1vbnQucGwKKyMgYnkgfjIwJSBvbiBVbHRyYVNQQVJDLUlJSSBhbmQgbGF0ZXIgY29yZXMsIGJ1dCByZWNhbGwgdGhhdCBzcGFyY3Y5YQorIyBtb2R1bGUgc3RpbGwgaGF2ZSBoaWRkZW4gcG90ZW50aWFsIFtzZWUgVE9ETyBsaXN0IHRoZXJlXSwgd2hpY2ggaXMKKyMgZXN0aW1hdGVkIHRvIGJlIGxhcmdlciB0aGFuIDIwJS4uLgorCisjIGludCBibl9tdWxfbW9udCgKKyRycD0iJWkwIjsJIyBCTl9VTE9ORyAqcnAsCiskYXA9IiVpMSI7CSMgY29uc3QgQk5fVUxPTkcgKmFwLAorJGJwPSIlaTIiOwkjIGNvbnN0IEJOX1VMT05HICpicCwKKyRucD0iJWkzIjsJIyBjb25zdCBCTl9VTE9ORyAqbnAsCiskbjA9IiVpNCI7CSMgY29uc3QgQk5fVUxPTkcgKm4wLAorJG51bT0iJWk1IjsJIyBpbnQgbnVtKTsKKworJGJpdHM9MzI7Citmb3IgKEBBUkdWKQl7ICRiaXRzPTY0IGlmICgvXC1tNjQvIHx8IC9cLXhhcmNoXD12OS8pOyB9CitpZiAoJGJpdHM9PTY0KQl7ICRiaWFzPTIwNDc7ICRmcmFtZT0xOTI7IH0KK2Vsc2UJCXsgJGJpYXM9MDsgICAgJGZyYW1lPTEyODsgfQorCiskY2FyMD0iJW8wIjsKKyRjYXIxPSIlbzEiOworJGNhcjI9IiVvMiI7CSMgMSBiaXQKKyRhY2MwPSIlbzMiOworJGFjYzE9IiVvNCI7CiskbWFzaz0iJWcxIjsJIyAzMiBiaXRzLCB3aGF0IGEgd2FzdGUuLi4KKyR0bXAwPSIlZzQiOworJHRtcDE9IiVnNSI7CisKKyRpPSIlbDAiOworJGo9IiVsMSI7CiskbXVsMD0iJWwyIjsKKyRtdWwxPSIlbDMiOworJHRwPSIlbDQiOworJGFwaj0iJWw1IjsKKyRucGo9IiVsNiI7CiskdHBqPSIlbDciOworCiskZm5hbWU9ImJuX211bF9tb250X2ludCI7CisKKyRjb2RlPTw8X19fOworLnNlY3Rpb24JIi50ZXh0IiwjYWxsb2MsI2V4ZWNpbnN0cgorCisuZ2xvYmFsCSRmbmFtZQorLmFsaWduCTMyCiskZm5hbWU6CisJY21wCSVvNSw0CQkJISAxMjggYml0cyBtaW5pbXVtCisJYmdlLHB0CSVpY2MsLkxlbnRlcgorCXNldGhpCSVoaSgweGZmZmZmZmZmKSwkbWFzaworCXJldGwKKwljbHIJJW8wCisuYWxpZ24JMzIKKy5MZW50ZXI6CisJc2F2ZQklc3AsLSRmcmFtZSwlc3AKKwlzbGwJJG51bSwyLCRudW0JCSEgbnVtKj00CisJb3IJJG1hc2ssJWxvKDB4ZmZmZmZmZmYpLCRtYXNrCisJbGQJWyRuMF0sJG4wCisJY21wCSRhcCwkYnAKKwlhbmQJJG51bSwkbWFzaywkbnVtCisJbGQJWyRicF0sJG11bDAJCSEgYnBbMF0KKwlub3AKKworCWFkZAklc3AsJGJpYXMsJW83CQkhIHJlYWwgdG9wIG9mIHN0YWNrCisJbGQJWyRhcF0sJGNhcjAJCSEgYXBbMF0gISByZWR1bmRhbnQgaW4gc3F1YXJpbmcgY29udGV4dAorCXN1YgklbzcsJG51bSwlbzcKKwlsZAlbJGFwKzRdLCRhcGoJCSEgYXBbMV0KKwlhbmQJJW83LC0xMDI0LCVvNworCWxkCVskbnBdLCRjYXIxCQkhIG5wWzBdCisJc3ViCSVvNywkYmlhcywlc3AJCSEgYWxsb2NhCisJbGQJWyRucCs0XSwkbnBqCQkhIG5wWzFdCisJYmUscHQJYCRiaXRzPT0zMj8iJWljYyI6IiV4Y2MiYCwuTGJuX3Nxcl9tb250CisJbW92CTEyLCRqCisKKwltdWx4CSRjYXIwLCRtdWwwLCRjYXIwCSEgYXBbMF0qYnBbMF0KKwltdWx4CSRhcGosJG11bDAsJHRtcDAJIXByb2xvZ3VlISBhcFsxXSpicFswXQorCWFuZAkkY2FyMCwkbWFzaywkYWNjMAorCWFkZAklc3AsJGJpYXMrJGZyYW1lLCR0cAorCWxkCVskYXArOF0sJGFwagkJIXByb2xvZ3VlIQorCisJbXVseAkkbjAsJGFjYzAsJG11bDEJCSEgInRbMF0iKm4wCisJYW5kCSRtdWwxLCRtYXNrLCRtdWwxCisKKwltdWx4CSRjYXIxLCRtdWwxLCRjYXIxCSEgbnBbMF0qInRbMF0iKm4wCisJbXVseAkkbnBqLCRtdWwxLCRhY2MxCSFwcm9sb2d1ZSEgbnBbMV0qInRbMF0iKm4wCisJc3JseAkkY2FyMCwzMiwkY2FyMAorCWFkZAkkYWNjMCwkY2FyMSwkY2FyMQorCWxkCVskbnArOF0sJG5wagkJIXByb2xvZ3VlIQorCXNybHgJJGNhcjEsMzIsJGNhcjEKKwltb3YJJHRtcDAsJGFjYzAJCSFwcm9sb2d1ZSEKKworLkwxc3Q6CisJbXVseAkkYXBqLCRtdWwwLCR0bXAwCisJbXVseAkkbnBqLCRtdWwxLCR0bXAxCisJYWRkCSRhY2MwLCRjYXIwLCRjYXIwCisJbGQJWyRhcCskal0sJGFwagkJISBhcFtqXQorCWFuZAkkY2FyMCwkbWFzaywkYWNjMAorCWFkZAkkYWNjMSwkY2FyMSwkY2FyMQorCWxkCVskbnArJGpdLCRucGoJCSEgbnBbal0KKwlzcmx4CSRjYXIwLDMyLCRjYXIwCisJYWRkCSRhY2MwLCRjYXIxLCRjYXIxCisJYWRkCSRqLDQsJGoJCQkhIGorKworCW1vdgkkdG1wMCwkYWNjMAorCXN0CSRjYXIxLFskdHBdCisJY21wCSRqLCRudW0KKwltb3YJJHRtcDEsJGFjYzEKKwlzcmx4CSRjYXIxLDMyLCRjYXIxCisJYmwJJWljYywuTDFzdAorCWFkZAkkdHAsNCwkdHAJCSEgdHArKworIS5MMXN0CisKKwltdWx4CSRhcGosJG11bDAsJHRtcDAJIWVwaWxvZ3VlIQorCW11bHgJJG5waiwkbXVsMSwkdG1wMQorCWFkZAkkYWNjMCwkY2FyMCwkY2FyMAorCWFuZAkkY2FyMCwkbWFzaywkYWNjMAorCWFkZAkkYWNjMSwkY2FyMSwkY2FyMQorCXNybHgJJGNhcjAsMzIsJGNhcjAKKwlhZGQJJGFjYzAsJGNhcjEsJGNhcjEKKwlzdAkkY2FyMSxbJHRwXQorCXNybHgJJGNhcjEsMzIsJGNhcjEKKworCWFkZAkkdG1wMCwkY2FyMCwkY2FyMAorCWFuZAkkY2FyMCwkbWFzaywkYWNjMAorCWFkZAkkdG1wMSwkY2FyMSwkY2FyMQorCXNybHgJJGNhcjAsMzIsJGNhcjAKKwlhZGQJJGFjYzAsJGNhcjEsJGNhcjEKKwlzdAkkY2FyMSxbJHRwKzRdCisJc3JseAkkY2FyMSwzMiwkY2FyMQorCisJYWRkCSRjYXIwLCRjYXIxLCRjYXIxCisJc3QJJGNhcjEsWyR0cCs4XQorCXNybHgJJGNhcjEsMzIsJGNhcjIKKwwKKwltb3YJNCwkaQkJCSEgaSsrCisJbGQJWyRicCs0XSwkbXVsMAkJISBicFsxXQorLkxvdXRlcjoKKwlhZGQJJXNwLCRiaWFzKyRmcmFtZSwkdHAKKwlsZAlbJGFwXSwkY2FyMAkJISBhcFswXQorCWxkCVskYXArNF0sJGFwagkJISBhcFsxXQorCWxkCVskbnBdLCRjYXIxCQkhIG5wWzBdCisJbGQJWyRucCs0XSwkbnBqCQkhIG5wWzFdCisJbGQJWyR0cF0sJHRtcDEJCSEgdHBbMF0KKwlsZAlbJHRwKzRdLCR0cGoJCSEgdHBbMV0KKwltb3YJMTIsJGoKKworCW11bHgJJGNhcjAsJG11bDAsJGNhcjAKKwltdWx4CSRhcGosJG11bDAsJHRtcDAJIXByb2xvZ3VlIQorCWFkZAkkdG1wMSwkY2FyMCwkY2FyMAorCWxkCVskYXArOF0sJGFwagkJIXByb2xvZ3VlIQorCWFuZAkkY2FyMCwkbWFzaywkYWNjMAorCisJbXVseAkkbjAsJGFjYzAsJG11bDEKKwlhbmQJJG11bDEsJG1hc2ssJG11bDEKKworCW11bHgJJGNhcjEsJG11bDEsJGNhcjEKKwltdWx4CSRucGosJG11bDEsJGFjYzEJIXByb2xvZ3VlIQorCXNybHgJJGNhcjAsMzIsJGNhcjAKKwlhZGQJJGFjYzAsJGNhcjEsJGNhcjEKKwlsZAlbJG5wKzhdLCRucGoJCSFwcm9sb2d1ZSEKKwlzcmx4CSRjYXIxLDMyLCRjYXIxCisJbW92CSR0bXAwLCRhY2MwCQkhcHJvbG9ndWUhCisKKy5MaW5uZXI6CisJbXVseAkkYXBqLCRtdWwwLCR0bXAwCisJbXVseAkkbnBqLCRtdWwxLCR0bXAxCisJYWRkCSR0cGosJGNhcjAsJGNhcjAKKwlsZAlbJGFwKyRqXSwkYXBqCQkhIGFwW2pdCisJYWRkCSRhY2MwLCRjYXIwLCRjYXIwCisJYWRkCSRhY2MxLCRjYXIxLCRjYXIxCisJbGQJWyRucCskal0sJG5wagkJISBucFtqXQorCWFuZAkkY2FyMCwkbWFzaywkYWNjMAorCWxkCVskdHArOF0sJHRwagkJISB0cFtqXQorCXNybHgJJGNhcjAsMzIsJGNhcjAKKwlhZGQJJGFjYzAsJGNhcjEsJGNhcjEKKwlhZGQJJGosNCwkagkJCSEgaisrCisJbW92CSR0bXAwLCRhY2MwCisJc3QJJGNhcjEsWyR0cF0JCSEgdHBbai0xXQorCXNybHgJJGNhcjEsMzIsJGNhcjEKKwltb3YJJHRtcDEsJGFjYzEKKwljbXAJJGosJG51bQorCWJsCSVpY2MsLkxpbm5lcgorCWFkZAkkdHAsNCwkdHAJCSEgdHArKworIS5MaW5uZXIKKworCW11bHgJJGFwaiwkbXVsMCwkdG1wMAkhZXBpbG9ndWUhCisJbXVseAkkbnBqLCRtdWwxLCR0bXAxCisJYWRkCSR0cGosJGNhcjAsJGNhcjAKKwlhZGQJJGFjYzAsJGNhcjAsJGNhcjAKKwlsZAlbJHRwKzhdLCR0cGoJCSEgdHBbal0KKwlhbmQJJGNhcjAsJG1hc2ssJGFjYzAKKwlhZGQJJGFjYzEsJGNhcjEsJGNhcjEKKwlzcmx4CSRjYXIwLDMyLCRjYXIwCisJYWRkCSRhY2MwLCRjYXIxLCRjYXIxCisJc3QJJGNhcjEsWyR0cF0JCSEgdHBbai0xXQorCXNybHgJJGNhcjEsMzIsJGNhcjEKKworCWFkZAkkdHBqLCRjYXIwLCRjYXIwCisJYWRkCSR0bXAwLCRjYXIwLCRjYXIwCisJYW5kCSRjYXIwLCRtYXNrLCRhY2MwCisJYWRkCSR0bXAxLCRjYXIxLCRjYXIxCisJYWRkCSRhY2MwLCRjYXIxLCRjYXIxCisJc3QJJGNhcjEsWyR0cCs0XQkJISB0cFtqLTFdCisJc3JseAkkY2FyMCwzMiwkY2FyMAorCWFkZAkkaSw0LCRpCQkJISBpKysKKwlzcmx4CSRjYXIxLDMyLCRjYXIxCisKKwlhZGQJJGNhcjAsJGNhcjEsJGNhcjEKKwljbXAJJGksJG51bQorCWFkZAkkY2FyMiwkY2FyMSwkY2FyMQorCXN0CSRjYXIxLFskdHArOF0KKworCXNybHgJJGNhcjEsMzIsJGNhcjIKKwlibCxhCSVpY2MsLkxvdXRlcgorCWxkCVskYnArJGldLCRtdWwwCQkhIGJwW2ldCishLkxvdXRlcgorCisJYWRkCSR0cCwxMiwkdHAKKwwKKy5MdGFpbDoKKwlhZGQJJG5wLCRudW0sJG5wCisJYWRkCSRycCwkbnVtLCRycAorCW1vdgkkdHAsJGFwCisJc3ViCSVnMCwkbnVtLCVvNwkJISBrPS1udW0KKwliYQkuTHN1YgorCXN1YmNjCSVnMCwlZzAsJWcwCQkhIGNsZWFyICVpY2MuYworLmFsaWduCTE2CisuTHN1YjoKKwlsZAlbJHRwKyVvN10sJW8wCisJbGQJWyRucCslbzddLCVvMQorCXN1YmNjYwklbzAsJW8xLCVvMQkJISB0cFtqXS1ucFtqXQorCWFkZAkkcnAsJW83LCRpCisJYWRkCSVvNyw0LCVvNworCWJybnoJJW83LC5Mc3ViCisJc3QJJW8xLFskaV0KKwlzdWJjCSRjYXIyLDAsJGNhcjIJCSEgaGFuZGxlIHVwbW9zdCBvdmVyZmxvdyBiaXQKKwlhbmQJJHRwLCRjYXIyLCRhcAorCWFuZG4JJHJwLCRjYXIyLCRucAorCW9yCSRhcCwkbnAsJGFwCisJc3ViCSVnMCwkbnVtLCVvNworCisuTGNvcHk6CisJbGQJWyRhcCslbzddLCVvMAkJISBjb3B5IG9yIGluLXBsYWNlIHJlZnJlc2gKKwlzdAklZzAsWyR0cCslbzddCQkhIHphcCB0cAorCXN0CSVvMCxbJHJwKyVvN10KKwlhZGQJJW83LDQsJW83CisJYnJuegklbzcsLkxjb3B5CisJbm9wCisJbW92CTEsJWkwCisJcmV0CisJcmVzdG9yZQorX19fCisMCisjIyMjIyMjIworIyMjIyMjIyMgLkxibl9zcXJfbW9udCBnaXZlcyB1cCB0byAyMCUgKm92ZXJhbGwqIGltcHJvdmVtZW50IG92ZXIKKyMjIyMjIyMjIGNvZGUgd2l0aG91dCBmb2xsb3dpbmcgZGVkaWNhdGVkIHNxdWFyaW5nIHByb2NlZHVyZS4KKyMjIyMjIyMjCiskc2JpdD0iJWkyIjsJCSMgcmUtdXNlICRicCEKKworJGNvZGUuPTw8X19fOworLmFsaWduCTMyCisuTGJuX3Nxcl9tb250OgorCW11bHgJJG11bDAsJG11bDAsJGNhcjAJCSEgYXBbMF0qYXBbMF0KKwltdWx4CSRhcGosJG11bDAsJHRtcDAJCSFwcm9sb2d1ZSEKKwlhbmQJJGNhcjAsJG1hc2ssJGFjYzAKKwlhZGQJJXNwLCRiaWFzKyRmcmFtZSwkdHAKKwlsZAlbJGFwKzhdLCRhcGoJCQkhcHJvbG9ndWUhCisKKwltdWx4CSRuMCwkYWNjMCwkbXVsMQkJCSEgInRbMF0iKm4wCisJc3JseAkkY2FyMCwzMiwkY2FyMAorCWFuZAkkbXVsMSwkbWFzaywkbXVsMQorCisJbXVseAkkY2FyMSwkbXVsMSwkY2FyMQkJISBucFswXSoidFswXSIqbjAKKwltdWx4CSRucGosJG11bDEsJGFjYzEJCSFwcm9sb2d1ZSEKKwlhbmQJJGNhcjAsMSwkc2JpdAorCWxkCVskbnArOF0sJG5wagkJCSFwcm9sb2d1ZSEKKwlzcmx4CSRjYXIwLDEsJGNhcjAKKwlhZGQJJGFjYzAsJGNhcjEsJGNhcjEKKwlzcmx4CSRjYXIxLDMyLCRjYXIxCisJbW92CSR0bXAwLCRhY2MwCQkJIXByb2xvZ3VlIQorCisuTHNxcl8xc3Q6CisJbXVseAkkYXBqLCRtdWwwLCR0bXAwCisJbXVseAkkbnBqLCRtdWwxLCR0bXAxCisJYWRkCSRhY2MwLCRjYXIwLCRjYXIwCQkhIGFwW2pdKmEwK2MwCisJYWRkCSRhY2MxLCRjYXIxLCRjYXIxCisJbGQJWyRhcCskal0sJGFwagkJCSEgYXBbal0KKwlhbmQJJGNhcjAsJG1hc2ssJGFjYzAKKwlsZAlbJG5wKyRqXSwkbnBqCQkJISBucFtqXQorCXNybHgJJGNhcjAsMzIsJGNhcjAKKwlhZGQJJGFjYzAsJGFjYzAsJGFjYzAKKwlvcgkkc2JpdCwkYWNjMCwkYWNjMAorCW1vdgkkdG1wMSwkYWNjMQorCXNybHgJJGFjYzAsMzIsJHNiaXQKKwlhZGQJJGosNCwkagkJCQkhIGorKworCWFuZAkkYWNjMCwkbWFzaywkYWNjMAorCWNtcAkkaiwkbnVtCisJYWRkCSRhY2MwLCRjYXIxLCRjYXIxCisJc3QJJGNhcjEsWyR0cF0KKwltb3YJJHRtcDAsJGFjYzAKKwlzcmx4CSRjYXIxLDMyLCRjYXIxCisJYmwJJWljYywuTHNxcl8xc3QKKwlhZGQJJHRwLDQsJHRwCQkJISB0cCsrCishLkxzcXJfMXN0CisKKwltdWx4CSRhcGosJG11bDAsJHRtcDAJCSEgZXBpbG9ndWUKKwltdWx4CSRucGosJG11bDEsJHRtcDEKKwlhZGQJJGFjYzAsJGNhcjAsJGNhcjAJCSEgYXBbal0qYTArYzAKKwlhZGQJJGFjYzEsJGNhcjEsJGNhcjEKKwlhbmQJJGNhcjAsJG1hc2ssJGFjYzAKKwlzcmx4CSRjYXIwLDMyLCRjYXIwCisJYWRkCSRhY2MwLCRhY2MwLCRhY2MwCisJb3IJJHNiaXQsJGFjYzAsJGFjYzAKKwlzcmx4CSRhY2MwLDMyLCRzYml0CisJYW5kCSRhY2MwLCRtYXNrLCRhY2MwCisJYWRkCSRhY2MwLCRjYXIxLCRjYXIxCisJc3QJJGNhcjEsWyR0cF0KKwlzcmx4CSRjYXIxLDMyLCRjYXIxCisKKwlhZGQJJHRtcDAsJGNhcjAsJGNhcjAJCSEgYXBbal0qYTArYzAKKwlhZGQJJHRtcDEsJGNhcjEsJGNhcjEKKwlhbmQJJGNhcjAsJG1hc2ssJGFjYzAKKwlzcmx4CSRjYXIwLDMyLCRjYXIwCisJYWRkCSRhY2MwLCRhY2MwLCRhY2MwCisJb3IJJHNiaXQsJGFjYzAsJGFjYzAKKwlzcmx4CSRhY2MwLDMyLCRzYml0CisJYW5kCSRhY2MwLCRtYXNrLCRhY2MwCisJYWRkCSRhY2MwLCRjYXIxLCRjYXIxCisJc3QJJGNhcjEsWyR0cCs0XQorCXNybHgJJGNhcjEsMzIsJGNhcjEKKworCWFkZAkkY2FyMCwkY2FyMCwkY2FyMAorCW9yCSRzYml0LCRjYXIwLCRjYXIwCisJYWRkCSRjYXIwLCRjYXIxLCRjYXIxCisJc3QJJGNhcjEsWyR0cCs4XQorCXNybHgJJGNhcjEsMzIsJGNhcjIKKwwKKwlsZAlbJXNwKyRiaWFzKyRmcmFtZV0sJHRtcDAJISB0cFswXQorCWxkCVslc3ArJGJpYXMrJGZyYW1lKzRdLCR0bXAxCSEgdHBbMV0KKwlsZAlbJXNwKyRiaWFzKyRmcmFtZSs4XSwkdHBqCSEgdHBbMl0KKwlsZAlbJGFwKzRdLCRtdWwwCQkJISBhcFsxXQorCWxkCVskYXArOF0sJGFwagkJCSEgYXBbMl0KKwlsZAlbJG5wXSwkY2FyMQkJCSEgbnBbMF0KKwlsZAlbJG5wKzRdLCRucGoJCQkhIG5wWzFdCisJbXVseAkkbjAsJHRtcDAsJG11bDEKKworCW11bHgJJG11bDAsJG11bDAsJGNhcjAKKwlhbmQJJG11bDEsJG1hc2ssJG11bDEKKworCW11bHgJJGNhcjEsJG11bDEsJGNhcjEKKwltdWx4CSRucGosJG11bDEsJGFjYzEKKwlhZGQJJHRtcDAsJGNhcjEsJGNhcjEKKwlhbmQJJGNhcjAsJG1hc2ssJGFjYzAKKwlsZAlbJG5wKzhdLCRucGoJCQkhIG5wWzJdCisJc3JseAkkY2FyMSwzMiwkY2FyMQorCWFkZAkkdG1wMSwkY2FyMSwkY2FyMQorCXNybHgJJGNhcjAsMzIsJGNhcjAKKwlhZGQJJGFjYzAsJGNhcjEsJGNhcjEKKwlhbmQJJGNhcjAsMSwkc2JpdAorCWFkZAkkYWNjMSwkY2FyMSwkY2FyMQorCXNybHgJJGNhcjAsMSwkY2FyMAorCW1vdgkxMiwkagorCXN0CSRjYXIxLFslc3ArJGJpYXMrJGZyYW1lXQkhIHRwWzBdPQorCXNybHgJJGNhcjEsMzIsJGNhcjEKKwlhZGQJJXNwLCRiaWFzKyRmcmFtZSs0LCR0cAorCisuTHNxcl8ybmQ6CisJbXVseAkkYXBqLCRtdWwwLCRhY2MwCisJbXVseAkkbnBqLCRtdWwxLCRhY2MxCisJYWRkCSRhY2MwLCRjYXIwLCRjYXIwCisJYWRkCSR0cGosJGNhcjEsJGNhcjEKKwlsZAlbJGFwKyRqXSwkYXBqCQkJISBhcFtqXQorCWFuZAkkY2FyMCwkbWFzaywkYWNjMAorCWxkCVskbnArJGpdLCRucGoJCQkhIG5wW2pdCisJc3JseAkkY2FyMCwzMiwkY2FyMAorCWFkZAkkYWNjMSwkY2FyMSwkY2FyMQorCWxkCVskdHArOF0sJHRwagkJCSEgdHBbal0KKwlhZGQJJGFjYzAsJGFjYzAsJGFjYzAKKwlhZGQJJGosNCwkagkJCQkhIGorKworCW9yCSRzYml0LCRhY2MwLCRhY2MwCisJc3JseAkkYWNjMCwzMiwkc2JpdAorCWFuZAkkYWNjMCwkbWFzaywkYWNjMAorCWNtcAkkaiwkbnVtCisJYWRkCSRhY2MwLCRjYXIxLCRjYXIxCisJc3QJJGNhcjEsWyR0cF0JCQkhIHRwW2otMV0KKwlzcmx4CSRjYXIxLDMyLCRjYXIxCisJYmwJJWljYywuTHNxcl8ybmQKKwlhZGQJJHRwLDQsJHRwCQkJISB0cCsrCishLkxzcXJfMm5kCisKKwltdWx4CSRhcGosJG11bDAsJGFjYzAKKwltdWx4CSRucGosJG11bDEsJGFjYzEKKwlhZGQJJGFjYzAsJGNhcjAsJGNhcjAKKwlhZGQJJHRwaiwkY2FyMSwkY2FyMQorCWFuZAkkY2FyMCwkbWFzaywkYWNjMAorCXNybHgJJGNhcjAsMzIsJGNhcjAKKwlhZGQJJGFjYzEsJGNhcjEsJGNhcjEKKwlhZGQJJGFjYzAsJGFjYzAsJGFjYzAKKwlvcgkkc2JpdCwkYWNjMCwkYWNjMAorCXNybHgJJGFjYzAsMzIsJHNiaXQKKwlhbmQJJGFjYzAsJG1hc2ssJGFjYzAKKwlhZGQJJGFjYzAsJGNhcjEsJGNhcjEKKwlzdAkkY2FyMSxbJHRwXQkJCSEgdHBbai0xXQorCXNybHgJJGNhcjEsMzIsJGNhcjEKKworCWFkZAkkY2FyMCwkY2FyMCwkY2FyMAorCW9yCSRzYml0LCRjYXIwLCRjYXIwCisJYWRkCSRjYXIwLCRjYXIxLCRjYXIxCisJYWRkCSRjYXIyLCRjYXIxLCRjYXIxCisJc3QJJGNhcjEsWyR0cCs0XQorCXNybHgJJGNhcjEsMzIsJGNhcjIKKwwKKwlsZAlbJXNwKyRiaWFzKyRmcmFtZV0sJHRtcDEJISB0cFswXQorCWxkCVslc3ArJGJpYXMrJGZyYW1lKzRdLCR0cGoJISB0cFsxXQorCWxkCVskYXArOF0sJG11bDAJCQkhIGFwWzJdCisJbGQJWyRucF0sJGNhcjEJCQkhIG5wWzBdCisJbGQJWyRucCs0XSwkbnBqCQkJISBucFsxXQorCW11bHgJJG4wLCR0bXAxLCRtdWwxCisJYW5kCSRtdWwxLCRtYXNrLCRtdWwxCisJbW92CTgsJGkKKworCW11bHgJJG11bDAsJG11bDAsJGNhcjAKKwltdWx4CSRjYXIxLCRtdWwxLCRjYXIxCisJYW5kCSRjYXIwLCRtYXNrLCRhY2MwCisJYWRkCSR0bXAxLCRjYXIxLCRjYXIxCisJc3JseAkkY2FyMCwzMiwkY2FyMAorCWFkZAklc3AsJGJpYXMrJGZyYW1lLCR0cAorCXNybHgJJGNhcjEsMzIsJGNhcjEKKwlhbmQJJGNhcjAsMSwkc2JpdAorCXNybHgJJGNhcjAsMSwkY2FyMAorCW1vdgk0LCRqCisKKy5Mc3FyX291dGVyOgorLkxzcXJfaW5uZXIxOgorCW11bHgJJG5waiwkbXVsMSwkYWNjMQorCWFkZAkkdHBqLCRjYXIxLCRjYXIxCisJYWRkCSRqLDQsJGoKKwlsZAlbJHRwKzhdLCR0cGoKKwljbXAJJGosJGkKKwlhZGQJJGFjYzEsJGNhcjEsJGNhcjEKKwlsZAlbJG5wKyRqXSwkbnBqCisJc3QJJGNhcjEsWyR0cF0KKwlzcmx4CSRjYXIxLDMyLCRjYXIxCisJYmwJJWljYywuTHNxcl9pbm5lcjEKKwlhZGQJJHRwLDQsJHRwCishLkxzcXJfaW5uZXIxCisKKwlhZGQJJGosNCwkagorCWxkCVskYXArJGpdLCRhcGoJCQkhIGFwW2pdCisJbXVseAkkbnBqLCRtdWwxLCRhY2MxCisJYWRkCSR0cGosJGNhcjEsJGNhcjEKKwlsZAlbJG5wKyRqXSwkbnBqCQkJISBucFtqXQorCWFkZAkkYWNjMCwkY2FyMSwkY2FyMQorCWxkCVskdHArOF0sJHRwagkJCSEgdHBbal0KKwlhZGQJJGFjYzEsJGNhcjEsJGNhcjEKKwlzdAkkY2FyMSxbJHRwXQorCXNybHgJJGNhcjEsMzIsJGNhcjEKKworCWFkZAkkaiw0LCRqCisJY21wCSRqLCRudW0KKwliZSxwbgklaWNjLC5Mc3FyX25vX2lubmVyMgorCWFkZAkkdHAsNCwkdHAKKworLkxzcXJfaW5uZXIyOgorCW11bHgJJGFwaiwkbXVsMCwkYWNjMAorCW11bHgJJG5waiwkbXVsMSwkYWNjMQorCWFkZAkkdHBqLCRjYXIxLCRjYXIxCisJYWRkCSRhY2MwLCRjYXIwLCRjYXIwCisJbGQJWyRhcCskal0sJGFwagkJCSEgYXBbal0KKwlhbmQJJGNhcjAsJG1hc2ssJGFjYzAKKwlsZAlbJG5wKyRqXSwkbnBqCQkJISBucFtqXQorCXNybHgJJGNhcjAsMzIsJGNhcjAKKwlhZGQJJGFjYzAsJGFjYzAsJGFjYzAKKwlsZAlbJHRwKzhdLCR0cGoJCQkhIHRwW2pdCisJb3IJJHNiaXQsJGFjYzAsJGFjYzAKKwlhZGQJJGosNCwkagkJCQkhIGorKworCXNybHgJJGFjYzAsMzIsJHNiaXQKKwlhbmQJJGFjYzAsJG1hc2ssJGFjYzAKKwljbXAJJGosJG51bQorCWFkZAkkYWNjMCwkY2FyMSwkY2FyMQorCWFkZAkkYWNjMSwkY2FyMSwkY2FyMQorCXN0CSRjYXIxLFskdHBdCQkJISB0cFtqLTFdCisJc3JseAkkY2FyMSwzMiwkY2FyMQorCWJsCSVpY2MsLkxzcXJfaW5uZXIyCisJYWRkCSR0cCw0LCR0cAkJCSEgdHArKworCisuTHNxcl9ub19pbm5lcjI6CisJbXVseAkkYXBqLCRtdWwwLCRhY2MwCisJbXVseAkkbnBqLCRtdWwxLCRhY2MxCisJYWRkCSR0cGosJGNhcjEsJGNhcjEKKwlhZGQJJGFjYzAsJGNhcjAsJGNhcjAKKwlhbmQJJGNhcjAsJG1hc2ssJGFjYzAKKwlzcmx4CSRjYXIwLDMyLCRjYXIwCisJYWRkCSRhY2MwLCRhY2MwLCRhY2MwCisJb3IJJHNiaXQsJGFjYzAsJGFjYzAKKwlzcmx4CSRhY2MwLDMyLCRzYml0CisJYW5kCSRhY2MwLCRtYXNrLCRhY2MwCisJYWRkCSRhY2MwLCRjYXIxLCRjYXIxCisJYWRkCSRhY2MxLCRjYXIxLCRjYXIxCisJc3QJJGNhcjEsWyR0cF0JCQkhIHRwW2otMV0KKwlzcmx4CSRjYXIxLDMyLCRjYXIxCisKKwlhZGQJJGNhcjAsJGNhcjAsJGNhcjAKKwlvcgkkc2JpdCwkY2FyMCwkY2FyMAorCWFkZAkkY2FyMCwkY2FyMSwkY2FyMQorCWFkZAkkY2FyMiwkY2FyMSwkY2FyMQorCXN0CSRjYXIxLFskdHArNF0KKwlzcmx4CSRjYXIxLDMyLCRjYXIyCisMCisJYWRkCSRpLDQsJGkJCQkJISBpKysKKwlsZAlbJXNwKyRiaWFzKyRmcmFtZV0sJHRtcDEJISB0cFswXQorCWxkCVslc3ArJGJpYXMrJGZyYW1lKzRdLCR0cGoJISB0cFsxXQorCWxkCVskYXArJGldLCRtdWwwCQkJISBhcFtqXQorCWxkCVskbnBdLCRjYXIxCQkJISBucFswXQorCWxkCVskbnArNF0sJG5wagkJCSEgbnBbMV0KKwltdWx4CSRuMCwkdG1wMSwkbXVsMQorCWFuZAkkbXVsMSwkbWFzaywkbXVsMQorCWFkZAkkaSw0LCR0bXAwCisKKwltdWx4CSRtdWwwLCRtdWwwLCRjYXIwCisJbXVseAkkY2FyMSwkbXVsMSwkY2FyMQorCWFuZAkkY2FyMCwkbWFzaywkYWNjMAorCWFkZAkkdG1wMSwkY2FyMSwkY2FyMQorCXNybHgJJGNhcjAsMzIsJGNhcjAKKwlhZGQJJXNwLCRiaWFzKyRmcmFtZSwkdHAKKwlzcmx4CSRjYXIxLDMyLCRjYXIxCisJYW5kCSRjYXIwLDEsJHNiaXQKKwlzcmx4CSRjYXIwLDEsJGNhcjAKKworCWNtcAkkdG1wMCwkbnVtCQkJISBpPG51bS0xCisJYmwJJWljYywuTHNxcl9vdXRlcgorCW1vdgk0LCRqCisMCisuTHNxcl9sYXN0OgorCW11bHgJJG5waiwkbXVsMSwkYWNjMQorCWFkZAkkdHBqLCRjYXIxLCRjYXIxCisJYWRkCSRqLDQsJGoKKwlsZAlbJHRwKzhdLCR0cGoKKwljbXAJJGosJGkKKwlhZGQJJGFjYzEsJGNhcjEsJGNhcjEKKwlsZAlbJG5wKyRqXSwkbnBqCisJc3QJJGNhcjEsWyR0cF0KKwlzcmx4CSRjYXIxLDMyLCRjYXIxCisJYmwJJWljYywuTHNxcl9sYXN0CisJYWRkCSR0cCw0LCR0cAorIS5Mc3FyX2xhc3QKKworCW11bHgJJG5waiwkbXVsMSwkYWNjMQorCWFkZAkkdHBqLCRjYXIxLCRjYXIxCisJYWRkCSRhY2MwLCRjYXIxLCRjYXIxCisJYWRkCSRhY2MxLCRjYXIxLCRjYXIxCisJc3QJJGNhcjEsWyR0cF0KKwlzcmx4CSRjYXIxLDMyLCRjYXIxCisKKwlhZGQJJGNhcjAsJGNhcjAsJGNhcjAJCSEgcmVjb3ZlciAkY2FyMAorCW9yCSRzYml0LCRjYXIwLCRjYXIwCisJYWRkCSRjYXIwLCRjYXIxLCRjYXIxCisJYWRkCSRjYXIyLCRjYXIxLCRjYXIxCisJc3QJJGNhcjEsWyR0cCs0XQorCXNybHgJJGNhcjEsMzIsJGNhcjIKKworCWJhCS5MdGFpbAorCWFkZAkkdHAsOCwkdHAKKy50eXBlCSRmbmFtZSwjZnVuY3Rpb24KKy5zaXplCSRmbmFtZSwoLi0kZm5hbWUpCisuYXNjaXoJIk1vbnRnb21lcnkgTXVsdGlwbHRpY2F0aW9uIGZvciBTUEFSQ3Y5LCBDUllQVE9HQU1TIGJ5IDxhcHByb1xAb3BlbnNzbC5vcmc+IgorLmFsaWduCTMyCitfX18KKyRjb2RlID1+IHMvXGAoW15cYF0qKVxgL2V2YWwoJDEpL2dlbTsKK3ByaW50ICRjb2RlOworY2xvc2UgU1RET1VUOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2JuL2FzbS9zcGFyY3Y5YS1tb250LnBsIGIvY3J5cHRvL2JuL2FzbS9zcGFyY3Y5YS1tb250LnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmExNDIwNWYKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vYm4vYXNtL3NwYXJjdjlhLW1vbnQucGwKQEAgLTAsMCArMSw4ODIgQEAKKyMhL3Vzci9iaW4vZW52IHBlcmwKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPiBmb3IgdGhlIE9wZW5TU0wKKyMgcHJvamVjdC4gVGhlIG1vZHVsZSBpcywgaG93ZXZlciwgZHVhbCBsaWNlbnNlZCB1bmRlciBPcGVuU1NMIGFuZAorIyBDUllQVE9HQU1TIGxpY2Vuc2VzIGRlcGVuZGluZyBvbiB3aGVyZSB5b3Ugb2J0YWluIGl0LiBGb3IgZnVydGhlcgorIyBkZXRhaWxzIHNlZSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL35hcHByby9jcnlwdG9nYW1zLy4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyBPY3RvYmVyIDIwMDUKKyMKKyMgIlRlYXNlciIgTW9udGdvbWVyeSBtdWx0aXBsaWNhdGlvbiBtb2R1bGUgZm9yIFVsdHJhU1BBUkMuIFdoeSBGUFU/CisjIEJlY2F1c2UgdW5saWtlIGludGVnZXIgbXVsdGlwbGllciwgd2hpY2ggc2ltcGx5IHN0YWxscyB3aG9sZSBDUFUsCisjIEZQVSBpcyBmdWxseSBwaXBlbGluZWQgYW5kIGNhbiBlZmZlY3RpdmVseSBlbWl0IDQ4IGJpdCBwYXJ0aWFsCisjIHByb2R1Y3QgZXZlcnkgY3ljbGUuIFdoeSBub3QgYmxlbmRlZCBTUEFSQyB2OT8gT25lIGNhbiBhcmd1ZSB0aGF0CisjIG1ha2luZyB0aGlzIG1vZHVsZSBkZXBlbmRlbnQgb24gVWx0cmFTUEFSQyBWSVMgZXh0ZW5zaW9uIGxpbWl0cyBpdHMKKyMgYmluYXJ5IGNvbXBhdGliaWxpdHkuIFdlbGwgeWVzLCBpdCBkb2VzIGV4Y2x1ZGUgU1BBUkM2NCBwcmlvci1WKCEpCisjIGltcGxlbWVudGF0aW9ucyBmcm9tIGNvbXBhdGliaWxpdHkgbWF0cml4LiBCdXQgdGhlIHJlc3QsIHdob2xlIFN1bgorIyBVbHRyYVNQQVJDIGZhbWlseSBhbmQgYnJhbmQgbmV3IEZ1aml0c3UncyBTUEFSQzY0IFYsIGFsbCBzdXBwb3J0CisjIFZJUyBleHRlbnNpb24gaW5zdHJ1Y3Rpb25zIHVzZWQgaW4gdGhpcyBtb2R1bGUuIFRoaXMgaXMgY29uc2lkZXJlZAorIyBnb29kIGVub3VnaCB0byBub3QgY2FyZSBhYm91dCBIQUwgU1BBUkM2NCB1c2VycyBbaWYgYW55XSB3aG8gaGF2ZQorIyBpbnRlZ2VyLW9ubHkgcHVyZSBTUEFSQ3Y5IG1vZHVsZSB0byAiZmFsbCBkb3duIiB0by4KKworIyBVU0kmSUkgY29yZXMgY3VycmVudGx5IGV4aGliaXQgdW5pZm9ybSAyeCBpbXByb3ZlbWVudCBbb3ZlciBwcmUtCisjIGJuX211bF9tb250IGNvZGViYXNlXSBmb3IgYWxsIGtleSBsZW5ndGhzIGFuZCBiZW5jaG1hcmtzLiBPbiBVU0lJSQorIyBwZXJmb3JtYW5jZSBpbXByb3ZlcyBmZXcgcGVyY2VudHMgZm9yIHNob3J0ZXIga2V5cyBhbmQgd29yc2VucyBmZXcKKyMgcGVyY2VudHMgZm9yIGxvbmdlciBrZXlzLiBUaGlzIGlzIGJlY2F1c2UgVVNJSUkgaW50ZWdlciBtdWx0aXBsaWVyCisjIGlzID4zeCBmYXN0ZXIgdGhhbiBVU0kmSUkgb25lLCB3aGljaCBpcyBoYXJkZXIgdG8gbWF0Y2ggW2J1dCBzZWUKKyMgVE9ETyBsaXN0IGJlbG93XS4gSXQgc2hvdWxkIGFsc28gYmUgbm90ZWQgdGhhdCBTUEFSQzY0IFYgZmVhdHVyZXMKKyMgb3V0LW9mLW9yZGVyIGV4ZWN1dGlvbiwgd2hpY2ggKm1pZ2h0KiBtZWFuIHRoYXQgaW50ZWdlciBtdWx0aXBsaWVyCisjIGlzIHBpcGVsaW5lZCwgd2hpY2ggaW4gdHVybiAqbWlnaHQqIGJlIGltcG9zc2libGUgdG8gbWF0Y2guLi4gT24KKyMgYWRkaXRpb25hbCBub3RlLCBTUEFSQzY0IFYgaW1wbGVtZW50cyBGUCBNdWx0aXBseS1BZGQgaW5zdHJ1Y3Rpb24sCisjIHdoaWNoIGlzIHBlcmZlY3RseSB1c2FibGUgaW4gdGhpcyBjb250ZXh0Li4uIEluIG90aGVyIHdvcmRzLCBhcyBmYXIKKyMgYXMgRnVqaXRzdSBTUEFSQzY0IFYgZ29lcywgdGFsayB0byB0aGUgYXV0aG9yOi0pCisKKyMgVGhlIGltcGxlbWVudGF0aW9uIGltcGxpZXMgZm9sbG93aW5nICJub24tbmF0dXJhbCIgbGltaXRhdGlvbnMgb24KKyMgaW5wdXQgYXJndW1lbnRzOgorIyAtIG51bSBtYXkgbm90IGJlIGxlc3MgdGhhbiA0OworIyAtIG51bSBoYXMgdG8gYmUgZXZlbjsKKyMgRmFpbHVyZSB0byBtZWV0IGVpdGhlciBjb25kaXRpb24gaGFzIG5vIGZhdGFsIGVmZmVjdHMsIHNpbXBseQorIyBkb2Vzbid0IGdpdmUgYW55IHBlcmZvcm1hbmNlIGdhaW4uCisKKyMgVE9ETzoKKyMgLSBtb2R1bG8tc2NoZWR1bGUgaW5uZXIgbG9vcCBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlIChvbiBpbi1vcmRlcgorIyAgIGV4ZWN1dGlvbiBjb3JlIHN1Y2ggYXMgVWx0cmFTUEFSQyB0aGlzIHNoYWxsIHJlc3VsdCBpbiBmdXJ0aGVyCisjICAgbm90aWNlYWJsZSghKSBpbXByb3ZlbWVudCk7CisjIC0gZGVkaWNhdGVkIHNxdWFyaW5nIHByb2NlZHVyZVs/XTsKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBOb3ZlbWJlciAyMDA2CisjCisjIE1vZHVsby1zY2hlZHVsZWQgaW5uZXIgbG9vcHMgYWxsb3cgdG8gaW50ZXJsZWF2ZSBmbG9hdGluZyBwb2ludCBhbmQKKyMgaW50ZWdlciBpbnN0cnVjdGlvbnMgYW5kIG1pbmltaXplIFJlYWQtQWZ0ZXItV3JpdGUgcGVuYWx0aWVzLiBUaGlzCisjIHJlc3VsdHMgaW4gKmZ1cnRoZXIqIDIwLTUwJSBwZXJmcm9tYW5jZSBpbXByb3ZlbWVudCBbZGVwZW5kaW5nIG9uCisjIGtleSBsZW5ndGgsIG1vcmUgZm9yIGxvbmdlciBrZXlzXSBvbiBVU0kmSUkgY29yZXMgYW5kIDMwLTgwJSAtIG9uCisjIFVTSUlJJklWLgorCiskZm5hbWU9ImJuX211bF9tb250X2ZwdSI7CiskYml0cz0zMjsKK2ZvciAoQEFSR1YpIHsgJGJpdHM9NjQgaWYgKC9cLW02NC8gfHwgL1wteGFyY2hcPXY5Lyk7IH0KKworaWYgKCRiaXRzPT02NCkgeworCSRiaWFzPTIwNDc7CisJJGZyYW1lPTE5MjsKK30gZWxzZSB7CisJJGJpYXM9MDsKKwkkZnJhbWU9MTI4OwkjIDk2IHJvdW5kZWQgdXAgdG8gbGFyZ2VzdCBrbm93biBjYWNoZS1saW5lCit9CiskbG9jYWxzPTY0OworCisjIEluIG9yZGVyIHRvIHByb3ZpZGUgZm9yIDMyLS82NC1iaXQgQUJJIGR1YWxpdHksIEkga2VlcCBpbnRlZ2VycyB3aWRlcgorIyB0aGFuIDMyIGJpdCBpbiAlZzEtJWc0IGFuZCAlbzAtJW81LiAlbDAtJWw3IGFuZCAlaTAtJWk1IGFyZSB1c2VkCisjIGV4Y2x1c2l2ZWx5IGZvciBwb2ludGVycywgaW5kZXhlcyBhbmQgb3RoZXIgc21hbGwgdmFsdWVzLi4uCisjIGludCBibl9tdWxfbW9udCgKKyRycD0iJWkwIjsJIyBCTl9VTE9ORyAqcnAsCiskYXA9IiVpMSI7CSMgY29uc3QgQk5fVUxPTkcgKmFwLAorJGJwPSIlaTIiOwkjIGNvbnN0IEJOX1VMT05HICpicCwKKyRucD0iJWkzIjsJIyBjb25zdCBCTl9VTE9ORyAqbnAsCiskbjA9IiVpNCI7CSMgY29uc3QgQk5fVUxPTkcgKm4wLAorJG51bT0iJWk1IjsJIyBpbnQgbnVtKTsKKworJHRwPSIlbDAiOwkjIHRbbnVtXQorJGFwX2w9IiVsMSI7CSMgYVtudW1dLG5bbnVtXSBhcmUgc21hc2hlZCB0byAzMi1iaXQgd29yZHMgYW5kIHNhdmVkCiskYXBfaD0iJWwyIjsJIyB0byB0aGVzZSBmb3VyIHZlY3RvcnMgYXMgZG91YmxlLXByZWNpc2lvbiBGUCB2YWx1ZXMuCiskbnBfbD0iJWwzIjsJIyBUaGlzIHdheSBhIGJ1bmNoIG9mIGZ4dG9kcyBhcmUgZWxpbWluYXRlZCBpbiBzZWNvbmQKKyRucF9oPSIlbDQiOwkjIGxvb3AgYW5kIEwxLWNhY2hlIGFsaWFzaW5nIGlzIG1pbmltaXplZC4uLgorJGk9IiVsNSI7Ciskaj0iJWw2IjsKKyRtYXNrPSIlbDciOwkjIDE2LWJpdCBtYXNrLCAweGZmZmYKKworJG4wPSIlZzQiOwkjIHJlYXNzaWduZWQoISkgdG8gIjY0LWJpdCIgcmVnaXN0ZXIKKyRjYXJyeT0iJWk0IjsJIyAlaTQgcmV1c2VkKCEpIGZvciBhIGNhcnJ5IGJpdAorCisjIEZQIHJlZ2lzdGVyIG5hbWluZyBjaGFydAorIworIyAgICAgLi5ISUxPCisjICAgICAgIGRjYmEKKyMgICAtLS0tLS0tLQorIyAgICAgICAgTE9hCisjICAgICAgIExPYgorIyAgICAgIExPYworIyAgICAgTE9kCisjICAgICAgSElhCisjICAgICBISWIKKyMgICAgSEljCisjICAgSElkCisjICAgIC4uYQorIyAgIC4uYgorJGJhPSIlZjAiOyAgICAkYmI9IiVmMiI7ICAgICRiYz0iJWY0IjsgICAgJGJkPSIlZjYiOworJG5hPSIlZjgiOyAgICAkbmI9IiVmMTAiOyAgICRuYz0iJWYxMiI7ICAgJG5kPSIlZjE0IjsKKyRhbG89IiVmMTYiOyAgJGFsb189IiVmMTciOyAkYWhpPSIlZjE4IjsgICRhaGlfPSIlZjE5IjsKKyRubG89IiVmMjAiOyAgJG5sb189IiVmMjEiOyAkbmhpPSIlZjIyIjsgICRuaGlfPSIlZjIzIjsKKworJGRvdGE9IiVmMjQiOyAkZG90Yj0iJWYyNiI7CisKKyRhbG9hPSIlZjMyIjsgJGFsb2I9IiVmMzQiOyAkYWxvYz0iJWYzNiI7ICRhbG9kPSIlZjM4IjsKKyRhaGlhPSIlZjQwIjsgJGFoaWI9IiVmNDIiOyAkYWhpYz0iJWY0NCI7ICRhaGlkPSIlZjQ2IjsKKyRubG9hPSIlZjQ4IjsgJG5sb2I9IiVmNTAiOyAkbmxvYz0iJWY1MiI7ICRubG9kPSIlZjU0IjsKKyRuaGlhPSIlZjU2IjsgJG5oaWI9IiVmNTgiOyAkbmhpYz0iJWY2MCI7ICRuaGlkPSIlZjYyIjsKKworJEFTSV9GTDE2X1A9MHhEMjsJIyBtYWdpYyBBU0kgdmFsdWUgdG8gZW5nYWdlIDE2LWJpdCBGUCBsb2FkCisKKyRjb2RlPTw8X19fOworLnNlY3Rpb24JIi50ZXh0IiwjYWxsb2MsI2V4ZWNpbnN0cgorCisuZ2xvYmFsICRmbmFtZQorLmFsaWduICAzMgorJGZuYW1lOgorCXNhdmUJJXNwLC0kZnJhbWUtJGxvY2Fscywlc3AKKworCWNtcAkkbnVtLDQKKwlibCxhLHBuICVpY2MsLkxyZXQKKwljbHIJJWkwCisJYW5kY2MJJG51bSwxLCVnMAkJISAkbnVtIGhhcyB0byBiZSBldmVuLi4uCisJYm56LGEscG4gJWljYywuTHJldAorCWNscgklaTAJCQkhIHNpZ25hbCAidW5zdXBwb3J0ZWQgaW5wdXQgdmFsdWUiCisKKwlzcmwJJG51bSwxLCRudW0KKwlzZXRoaQklaGkoMHhmZmZmKSwkbWFzaworCWxkCVslaTQrMF0sJG4wCQkhICRuMCByZWFzc2lnbmVkLCByZW1lbWJlcj8KKwlvcgkkbWFzaywlbG8oMHhmZmZmKSwkbWFzaworCWxkCVslaTQrNF0sJW8wCisJc2xseAklbzAsMzIsJW8wCisJb3IJJW8wLCRuMCwkbjAJCSEgJG4wPW4wWzFdLm4wWzBdCisKKwlzbGwJJG51bSwzLCRudW0JCSEgbnVtKj04CisKKwlhZGQJJXNwLCRiaWFzLCVvMAkJISByZWFsIHRvcCBvZiBzdGFjaworCXNsbAkkbnVtLDIsJW8xCisJYWRkCSVvMSwkbnVtLCVvMQkJISAlbzE9bnVtKjUKKwlzdWIJJW8wLCVvMSwlbzAKKwlhbmQJJW8wLC0yMDQ4LCVvMAkJISBvcHRpbWl6ZSBUTEIgdXRpbGl6YXRpb24KKwlzdWIJJW8wLCRiaWFzLCVzcAkJISBhbGxvY2EoNSpudW0qOCkKKworCXJkCSVhc2ksJW83CQkhIHNhdmUgJWFzaQorCWFkZAklc3AsJGJpYXMrJGZyYW1lKyRsb2NhbHMsJHRwCisJYWRkCSR0cCwkbnVtLCRhcF9sCisJYWRkCSRhcF9sLCRudW0sJGFwX2wJISBbYW5dcF9bbGhdIHBvaW50IGF0IHRoZSB2ZWN0b3JzJyBlbmRzICEKKwlhZGQJJGFwX2wsJG51bSwkYXBfaAorCWFkZAkkYXBfaCwkbnVtLCRucF9sCisJYWRkCSRucF9sLCRudW0sJG5wX2gKKworCXdyCSVnMCwkQVNJX0ZMMTZfUCwlYXNpCSEgc2V0dXAgJWFzaSBmb3IgMTYtYml0IEZQIGxvYWRzCisKKwlhZGQJJHJwLCRudW0sJHJwCQkhIHJlYWRqdXN0IGlucHV0IHBvaW50ZXJzIHRvIHBvaW50CisJYWRkCSRhcCwkbnVtLCRhcAkJISBhdCB0aGUgZW5kcyB0b28uLi4KKwlhZGQJJGJwLCRudW0sJGJwCisJYWRkCSRucCwkbnVtLCRucAorCisJc3R4CSVvNyxbJXNwKyRiaWFzKyRmcmFtZSs0OF0JISBzYXZlICVhc2kKKwwKKwlzdWIJJWcwLCRudW0sJGkJCSEgaT0tbnVtCisJc3ViCSVnMCwkbnVtLCRqCQkhIGo9LW51bQorCisJYWRkCSRhcCwkaiwlbzMKKwlhZGQJJGJwLCRpLCVvNAorCisJbGQJWyVvMys0XSwlZzEJCSEgYnBbMF0KKwlsZAlbJW8zKzBdLCVvMAorCWxkCVslbzQrNF0sJWc1CQkhIGFwWzBdCisJc2xseAklZzEsMzIsJWcxCisJbGQJWyVvNCswXSwlbzEKKwlzbGx4CSVnNSwzMiwlZzUKKwlvcgklZzEsJW8wLCVvMAorCW9yCSVnNSwlbzEsJW8xCisKKwlhZGQJJG5wLCRqLCVvNQorCisJbXVseAklbzEsJW8wLCVvMAkJISBhcFswXSpicFswXQorCW11bHgJJG4wLCVvMCwlbzAJCSEgYXBbMF0qYnBbMF0qbjAKKwlzdHgJJW8wLFslc3ArJGJpYXMrJGZyYW1lKzBdCisKKwlsZAlbJW8zKzBdLCRhbG9fCSEgbG9hZCBhW2pdIGFzIHBhaXIgb2YgMzItYml0IHdvcmRzCisJZnplcm9zCSRhbG8KKwlsZAlbJW8zKzRdLCRhaGlfCisJZnplcm9zCSRhaGkKKwlsZAlbJW81KzBdLCRubG9fCSEgbG9hZCBuW2pdIGFzIHBhaXIgb2YgMzItYml0IHdvcmRzCisJZnplcm9zCSRubG8KKwlsZAlbJW81KzRdLCRuaGlfCisJZnplcm9zCSRuaGkKKworCSEgdHJhbnNmZXIgYltpXSB0byBGUFUgYXMgNHgxNi1iaXQgdmFsdWVzCisJbGRkYQlbJW80KzJdJWFzaSwkYmEKKwlmeHRvZAkkYWxvLCRhbG8KKwlsZGRhCVslbzQrMF0lYXNpLCRiYgorCWZ4dG9kCSRhaGksJGFoaQorCWxkZGEJWyVvNCs2XSVhc2ksJGJjCisJZnh0b2QJJG5sbywkbmxvCisJbGRkYQlbJW80KzRdJWFzaSwkYmQKKwlmeHRvZAkkbmhpLCRuaGkKKworCSEgdHJhbnNmZXIgYXBbMF0qYlswXSpuMCB0byBGUFUgYXMgNHgxNi1iaXQgdmFsdWVzCisJbGRkYQlbJXNwKyRiaWFzKyRmcmFtZSs2XSVhc2ksJG5hCisJZnh0b2QJJGJhLCRiYQorCWxkZGEJWyVzcCskYmlhcyskZnJhbWUrNF0lYXNpLCRuYgorCWZ4dG9kCSRiYiwkYmIKKwlsZGRhCVslc3ArJGJpYXMrJGZyYW1lKzJdJWFzaSwkbmMKKwlmeHRvZAkkYmMsJGJjCisJbGRkYQlbJXNwKyRiaWFzKyRmcmFtZSswXSVhc2ksJG5kCisJZnh0b2QJJGJkLCRiZAorCisJc3RkCSRhbG8sWyRhcF9sKyRqXQkJISBzYXZlIHNtYXNoZWQgYXBbal0gaW4gZG91YmxlIGZvcm1hdAorCWZ4dG9kCSRuYSwkbmEKKwlzdGQJJGFoaSxbJGFwX2grJGpdCisJZnh0b2QJJG5iLCRuYgorCXN0ZAkkbmxvLFskbnBfbCskal0JCSEgc2F2ZSBzbWFzaGVkIG5wW2pdIGluIGRvdWJsZSBmb3JtYXQKKwlmeHRvZAkkbmMsJG5jCisJc3RkCSRuaGksWyRucF9oKyRqXQorCWZ4dG9kCSRuZCwkbmQKKworCQlmbXVsZAkkYWxvLCRiYSwkYWxvYQorCQlmbXVsZAkkbmxvLCRuYSwkbmxvYQorCQlmbXVsZAkkYWxvLCRiYiwkYWxvYgorCQlmbXVsZAkkbmxvLCRuYiwkbmxvYgorCQlmbXVsZAkkYWxvLCRiYywkYWxvYworCWZhZGRkCSRhbG9hLCRubG9hLCRubG9hCisJCWZtdWxkCSRubG8sJG5jLCRubG9jCisJCWZtdWxkCSRhbG8sJGJkLCRhbG9kCisJZmFkZGQJJGFsb2IsJG5sb2IsJG5sb2IKKwkJZm11bGQJJG5sbywkbmQsJG5sb2QKKwkJZm11bGQJJGFoaSwkYmEsJGFoaWEKKwlmYWRkZAkkYWxvYywkbmxvYywkbmxvYworCQlmbXVsZAkkbmhpLCRuYSwkbmhpYQorCQlmbXVsZAkkYWhpLCRiYiwkYWhpYgorCWZhZGRkCSRhbG9kLCRubG9kLCRubG9kCisJCWZtdWxkCSRuaGksJG5iLCRuaGliCisJCWZtdWxkCSRhaGksJGJjLCRhaGljCisJZmFkZGQJJGFoaWEsJG5oaWEsJG5oaWEKKwkJZm11bGQJJG5oaSwkbmMsJG5oaWMKKwkJZm11bGQJJGFoaSwkYmQsJGFoaWQKKwlmYWRkZAkkYWhpYiwkbmhpYiwkbmhpYgorCQlmbXVsZAkkbmhpLCRuZCwkbmhpZAorCisJZmFkZGQJJGFoaWMsJG5oaWMsJGRvdGEJISAkbmhpYworCWZhZGRkCSRhaGlkLCRuaGlkLCRkb3RiCSEgJG5oaWQKKworCWZhZGRkCSRubG9jLCRuaGlhLCRubG9jCisJZmFkZGQJJG5sb2QsJG5oaWIsJG5sb2QKKworCWZkdG94CSRubG9hLCRubG9hCisJZmR0b3gJJG5sb2IsJG5sb2IKKwlmZHRveAkkbmxvYywkbmxvYworCWZkdG94CSRubG9kLCRubG9kCisKKwlzdGQJJG5sb2EsWyVzcCskYmlhcyskZnJhbWUrMF0KKwlhZGQJJGosOCwkagorCXN0ZAkkbmxvYixbJXNwKyRiaWFzKyRmcmFtZSs4XQorCWFkZAkkYXAsJGosJW80CisJc3RkCSRubG9jLFslc3ArJGJpYXMrJGZyYW1lKzE2XQorCWFkZAkkbnAsJGosJW81CisJc3RkCSRubG9kLFslc3ArJGJpYXMrJGZyYW1lKzI0XQorDAorCWxkCVslbzQrMF0sJGFsb18JISBsb2FkIGFbal0gYXMgcGFpciBvZiAzMi1iaXQgd29yZHMKKwlmemVyb3MJJGFsbworCWxkCVslbzQrNF0sJGFoaV8KKwlmemVyb3MJJGFoaQorCWxkCVslbzUrMF0sJG5sb18JISBsb2FkIG5bal0gYXMgcGFpciBvZiAzMi1iaXQgd29yZHMKKwlmemVyb3MJJG5sbworCWxkCVslbzUrNF0sJG5oaV8KKwlmemVyb3MJJG5oaQorCisJZnh0b2QJJGFsbywkYWxvCisJZnh0b2QJJGFoaSwkYWhpCisJZnh0b2QJJG5sbywkbmxvCisJZnh0b2QJJG5oaSwkbmhpCisKKwlsZHgJWyVzcCskYmlhcyskZnJhbWUrMF0sJW8wCisJCWZtdWxkCSRhbG8sJGJhLCRhbG9hCisJbGR4CVslc3ArJGJpYXMrJGZyYW1lKzhdLCVvMQorCQlmbXVsZAkkbmxvLCRuYSwkbmxvYQorCWxkeAlbJXNwKyRiaWFzKyRmcmFtZSsxNl0sJW8yCisJCWZtdWxkCSRhbG8sJGJiLCRhbG9iCisJbGR4CVslc3ArJGJpYXMrJGZyYW1lKzI0XSwlbzMKKwkJZm11bGQJJG5sbywkbmIsJG5sb2IKKworCXNybHgJJW8wLDE2LCVvNworCXN0ZAkkYWxvLFskYXBfbCskal0JCSEgc2F2ZSBzbWFzaGVkIGFwW2pdIGluIGRvdWJsZSBmb3JtYXQKKwkJZm11bGQJJGFsbywkYmMsJGFsb2MKKwlhZGQJJW83LCVvMSwlbzEKKwlzdGQJJGFoaSxbJGFwX2grJGpdCisJCWZhZGRkCSRhbG9hLCRubG9hLCRubG9hCisJCWZtdWxkCSRubG8sJG5jLCRubG9jCisJc3JseAklbzEsMTYsJW83CisJc3RkCSRubG8sWyRucF9sKyRqXQkJISBzYXZlIHNtYXNoZWQgbnBbal0gaW4gZG91YmxlIGZvcm1hdAorCQlmbXVsZAkkYWxvLCRiZCwkYWxvZAorCWFkZAklbzcsJW8yLCVvMgorCXN0ZAkkbmhpLFskbnBfaCskal0KKwkJZmFkZGQJJGFsb2IsJG5sb2IsJG5sb2IKKwkJZm11bGQJJG5sbywkbmQsJG5sb2QKKwlzcmx4CSVvMiwxNiwlbzcKKwkJZm11bGQJJGFoaSwkYmEsJGFoaWEKKwlhZGQJJW83LCVvMywlbzMJCSEgJW8zLiVvMlswLi4xNV0uJW8xWzAuLjE1XS4lbzBbMC4uMTVdCisJCWZhZGRkCSRhbG9jLCRubG9jLCRubG9jCisJCWZtdWxkCSRuaGksJG5hLCRuaGlhCisJIWFuZAklbzAsJG1hc2ssJW8wCisJIWFuZAklbzEsJG1hc2ssJW8xCisJIWFuZAklbzIsJG1hc2ssJW8yCisJIXNsbHgJJW8xLDE2LCVvMQorCSFzbGx4CSVvMiwzMiwlbzIKKwkhc2xseAklbzMsNDgsJW83CisJIW9yCSVvMSwlbzAsJW8wCisJIW9yCSVvMiwlbzAsJW8wCisJIW9yCSVvNywlbzAsJW8wCQkhIDY0LWJpdCByZXN1bHQKKwlzcmx4CSVvMywxNiwlZzEJCSEgMzQtYml0IGNhcnJ5CisJCWZtdWxkCSRhaGksJGJiLCRhaGliCisKKwlmYWRkZAkkYWxvZCwkbmxvZCwkbmxvZAorCQlmbXVsZAkkbmhpLCRuYiwkbmhpYgorCQlmbXVsZAkkYWhpLCRiYywkYWhpYworCWZhZGRkCSRhaGlhLCRuaGlhLCRuaGlhCisJCWZtdWxkCSRuaGksJG5jLCRuaGljCisJCWZtdWxkCSRhaGksJGJkLCRhaGlkCisJZmFkZGQJJGFoaWIsJG5oaWIsJG5oaWIKKwkJZm11bGQJJG5oaSwkbmQsJG5oaWQKKworCWZhZGRkCSRkb3RhLCRubG9hLCRubG9hCisJZmFkZGQJJGRvdGIsJG5sb2IsJG5sb2IKKwlmYWRkZAkkYWhpYywkbmhpYywkZG90YQkhICRuaGljCisJZmFkZGQJJGFoaWQsJG5oaWQsJGRvdGIJISAkbmhpZAorCisJZmFkZGQJJG5sb2MsJG5oaWEsJG5sb2MKKwlmYWRkZAkkbmxvZCwkbmhpYiwkbmxvZAorCisJZmR0b3gJJG5sb2EsJG5sb2EKKwlmZHRveAkkbmxvYiwkbmxvYgorCWZkdG94CSRubG9jLCRubG9jCisJZmR0b3gJJG5sb2QsJG5sb2QKKworCXN0ZAkkbmxvYSxbJXNwKyRiaWFzKyRmcmFtZSswXQorCXN0ZAkkbmxvYixbJXNwKyRiaWFzKyRmcmFtZSs4XQorCWFkZGNjCSRqLDgsJGoKKwlzdGQJJG5sb2MsWyVzcCskYmlhcyskZnJhbWUrMTZdCisJYnoscG4JJWljYywuTDFzdHNraXAKKwlzdGQJJG5sb2QsWyVzcCskYmlhcyskZnJhbWUrMjRdCisMCisuYWxpZ24JMzIJCQkhIGluY2lkZW50YWxseSBhbHJlYWR5IGFsaWduZWQgIQorLkwxc3Q6CisJYWRkCSRhcCwkaiwlbzQKKwlhZGQJJG5wLCRqLCVvNQorCWxkCVslbzQrMF0sJGFsb18JISBsb2FkIGFbal0gYXMgcGFpciBvZiAzMi1iaXQgd29yZHMKKwlmemVyb3MJJGFsbworCWxkCVslbzQrNF0sJGFoaV8KKwlmemVyb3MJJGFoaQorCWxkCVslbzUrMF0sJG5sb18JISBsb2FkIG5bal0gYXMgcGFpciBvZiAzMi1iaXQgd29yZHMKKwlmemVyb3MJJG5sbworCWxkCVslbzUrNF0sJG5oaV8KKwlmemVyb3MJJG5oaQorCisJZnh0b2QJJGFsbywkYWxvCisJZnh0b2QJJGFoaSwkYWhpCisJZnh0b2QJJG5sbywkbmxvCisJZnh0b2QJJG5oaSwkbmhpCisKKwlsZHgJWyVzcCskYmlhcyskZnJhbWUrMF0sJW8wCisJCWZtdWxkCSRhbG8sJGJhLCRhbG9hCisJbGR4CVslc3ArJGJpYXMrJGZyYW1lKzhdLCVvMQorCQlmbXVsZAkkbmxvLCRuYSwkbmxvYQorCWxkeAlbJXNwKyRiaWFzKyRmcmFtZSsxNl0sJW8yCisJCWZtdWxkCSRhbG8sJGJiLCRhbG9iCisJbGR4CVslc3ArJGJpYXMrJGZyYW1lKzI0XSwlbzMKKwkJZm11bGQJJG5sbywkbmIsJG5sb2IKKworCXNybHgJJW8wLDE2LCVvNworCXN0ZAkkYWxvLFskYXBfbCskal0JCSEgc2F2ZSBzbWFzaGVkIGFwW2pdIGluIGRvdWJsZSBmb3JtYXQKKwkJZm11bGQJJGFsbywkYmMsJGFsb2MKKwlhZGQJJW83LCVvMSwlbzEKKwlzdGQJJGFoaSxbJGFwX2grJGpdCisJCWZhZGRkCSRhbG9hLCRubG9hLCRubG9hCisJCWZtdWxkCSRubG8sJG5jLCRubG9jCisJc3JseAklbzEsMTYsJW83CisJc3RkCSRubG8sWyRucF9sKyRqXQkJISBzYXZlIHNtYXNoZWQgbnBbal0gaW4gZG91YmxlIGZvcm1hdAorCQlmbXVsZAkkYWxvLCRiZCwkYWxvZAorCWFkZAklbzcsJW8yLCVvMgorCXN0ZAkkbmhpLFskbnBfaCskal0KKwkJZmFkZGQJJGFsb2IsJG5sb2IsJG5sb2IKKwkJZm11bGQJJG5sbywkbmQsJG5sb2QKKwlzcmx4CSVvMiwxNiwlbzcKKwkJZm11bGQJJGFoaSwkYmEsJGFoaWEKKwlhZGQJJW83LCVvMywlbzMJCSEgJW8zLiVvMlswLi4xNV0uJW8xWzAuLjE1XS4lbzBbMC4uMTVdCisJYW5kCSVvMCwkbWFzaywlbzAKKwkJZmFkZGQJJGFsb2MsJG5sb2MsJG5sb2MKKwkJZm11bGQJJG5oaSwkbmEsJG5oaWEKKwlhbmQJJW8xLCRtYXNrLCVvMQorCWFuZAklbzIsJG1hc2ssJW8yCisJCWZtdWxkCSRhaGksJGJiLCRhaGliCisJc2xseAklbzEsMTYsJW8xCisJCWZhZGRkCSRhbG9kLCRubG9kLCRubG9kCisJCWZtdWxkCSRuaGksJG5iLCRuaGliCisJc2xseAklbzIsMzIsJW8yCisJCWZtdWxkCSRhaGksJGJjLCRhaGljCisJc2xseAklbzMsNDgsJW83CisJb3IJJW8xLCVvMCwlbzAKKwkJZmFkZGQJJGFoaWEsJG5oaWEsJG5oaWEKKwkJZm11bGQJJG5oaSwkbmMsJG5oaWMKKwlvcgklbzIsJW8wLCVvMAorCQlmbXVsZAkkYWhpLCRiZCwkYWhpZAorCW9yCSVvNywlbzAsJW8wCQkhIDY0LWJpdCByZXN1bHQKKwkJZmFkZGQJJGFoaWIsJG5oaWIsJG5oaWIKKwkJZm11bGQJJG5oaSwkbmQsJG5oaWQKKwlhZGRjYwklZzEsJW8wLCVvMAorCQlmYWRkZAkkZG90YSwkbmxvYSwkbmxvYQorCXNybHgJJW8zLDE2LCVnMQkJISAzNC1iaXQgY2FycnkKKwkJZmFkZGQJJGRvdGIsJG5sb2IsJG5sb2IKKwliY3MsYQkleGNjLC4rOAorCWFkZAklZzEsMSwlZzEKKworCXN0eAklbzAsWyR0cF0JCSEgdHBbai0xXT0KKworCWZhZGRkCSRhaGljLCRuaGljLCRkb3RhCSEgJG5oaWMKKwlmYWRkZAkkYWhpZCwkbmhpZCwkZG90YgkhICRuaGlkCisKKwlmYWRkZAkkbmxvYywkbmhpYSwkbmxvYworCWZhZGRkCSRubG9kLCRuaGliLCRubG9kCisKKwlmZHRveAkkbmxvYSwkbmxvYQorCWZkdG94CSRubG9iLCRubG9iCisJZmR0b3gJJG5sb2MsJG5sb2MKKwlmZHRveAkkbmxvZCwkbmxvZAorCisJc3RkCSRubG9hLFslc3ArJGJpYXMrJGZyYW1lKzBdCisJc3RkCSRubG9iLFslc3ArJGJpYXMrJGZyYW1lKzhdCisJc3RkCSRubG9jLFslc3ArJGJpYXMrJGZyYW1lKzE2XQorCXN0ZAkkbmxvZCxbJXNwKyRiaWFzKyRmcmFtZSsyNF0KKworCWFkZGNjCSRqLDgsJGoKKwlibnoscHQJJWljYywuTDFzdAorCWFkZAkkdHAsOCwkdHAKKwwKKy5MMXN0c2tpcDoKKwlmZHRveAkkZG90YSwkZG90YQorCWZkdG94CSRkb3RiLCRkb3RiCisKKwlsZHgJWyVzcCskYmlhcyskZnJhbWUrMF0sJW8wCisJbGR4CVslc3ArJGJpYXMrJGZyYW1lKzhdLCVvMQorCWxkeAlbJXNwKyRiaWFzKyRmcmFtZSsxNl0sJW8yCisJbGR4CVslc3ArJGJpYXMrJGZyYW1lKzI0XSwlbzMKKworCXNybHgJJW8wLDE2LCVvNworCXN0ZAkkZG90YSxbJXNwKyRiaWFzKyRmcmFtZSszMl0KKwlhZGQJJW83LCVvMSwlbzEKKwlzdGQJJGRvdGIsWyVzcCskYmlhcyskZnJhbWUrNDBdCisJc3JseAklbzEsMTYsJW83CisJYWRkCSVvNywlbzIsJW8yCisJc3JseAklbzIsMTYsJW83CisJYWRkCSVvNywlbzMsJW8zCQkhICVvMy4lbzJbMC4uMTVdLiVvMVswLi4xNV0uJW8wWzAuLjE1XQorCWFuZAklbzAsJG1hc2ssJW8wCisJYW5kCSVvMSwkbWFzaywlbzEKKwlhbmQJJW8yLCRtYXNrLCVvMgorCXNsbHgJJW8xLDE2LCVvMQorCXNsbHgJJW8yLDMyLCVvMgorCXNsbHgJJW8zLDQ4LCVvNworCW9yCSVvMSwlbzAsJW8wCisJb3IJJW8yLCVvMCwlbzAKKwlvcgklbzcsJW8wLCVvMAkJISA2NC1iaXQgcmVzdWx0CisJbGR4CVslc3ArJGJpYXMrJGZyYW1lKzMyXSwlbzQKKwlhZGRjYwklZzEsJW8wLCVvMAorCWxkeAlbJXNwKyRiaWFzKyRmcmFtZSs0MF0sJW81CisJc3JseAklbzMsMTYsJWcxCQkhIDM0LWJpdCBjYXJyeQorCWJjcyxhCSV4Y2MsLis4CisJYWRkCSVnMSwxLCVnMQorCisJc3R4CSVvMCxbJHRwXQkJISB0cFtqLTFdPQorCWFkZAkkdHAsOCwkdHAKKworCXNybHgJJW80LDE2LCVvNworCWFkZAklbzcsJW81LCVvNQorCWFuZAklbzQsJG1hc2ssJW80CisJc2xseAklbzUsMTYsJW83CisJb3IJJW83LCVvNCwlbzQKKwlhZGRjYwklZzEsJW80LCVvNAorCXNybHgJJW81LDQ4LCVnMQorCWJjcyxhCSV4Y2MsLis4CisJYWRkCSVnMSwxLCVnMQorCisJbW92CSVnMSwkY2FycnkKKwlzdHgJJW80LFskdHBdCQkhIHRwW251bS0xXT0KKwwKKwliYQkuTG91dGVyCisJYWRkCSRpLDgsJGkKKy5hbGlnbgkzMgorLkxvdXRlcjoKKwlzdWIJJWcwLCRudW0sJGoJCSEgaj0tbnVtCisJYWRkCSVzcCwkYmlhcyskZnJhbWUrJGxvY2FscywkdHAKKworCWFkZAkkYXAsJGosJW8zCisJYWRkCSRicCwkaSwlbzQKKworCWxkCVslbzMrNF0sJWcxCQkhIGJwW2ldCisJbGQJWyVvMyswXSwlbzAKKwlsZAlbJW80KzRdLCVnNQkJISBhcFswXQorCXNsbHgJJWcxLDMyLCVnMQorCWxkCVslbzQrMF0sJW8xCisJc2xseAklZzUsMzIsJWc1CisJb3IJJWcxLCVvMCwlbzAKKwlvcgklZzUsJW8xLCVvMQorCisJbGR4CVskdHBdLCVvMgkJISB0cFswXQorCW11bHgJJW8xLCVvMCwlbzAKKwlhZGRjYwklbzIsJW8wLCVvMAorCW11bHgJJG4wLCVvMCwlbzAJCSEgKGFwWzBdKmJwW2ldK3RbMF0pKm4wCisJc3R4CSVvMCxbJXNwKyRiaWFzKyRmcmFtZSswXQorCisJISB0cmFuc2ZlciBiW2ldIHRvIEZQVSBhcyA0eDE2LWJpdCB2YWx1ZXMKKwlsZGRhCVslbzQrMl0lYXNpLCRiYQorCWxkZGEJWyVvNCswXSVhc2ksJGJiCisJbGRkYQlbJW80KzZdJWFzaSwkYmMKKwlsZGRhCVslbzQrNF0lYXNpLCRiZAorCisJISB0cmFuc2ZlciAoYXBbMF0qYltpXSt0WzBdKSpuMCB0byBGUFUgYXMgNHgxNi1iaXQgdmFsdWVzCisJbGRkYQlbJXNwKyRiaWFzKyRmcmFtZSs2XSVhc2ksJG5hCisJZnh0b2QJJGJhLCRiYQorCWxkZGEJWyVzcCskYmlhcyskZnJhbWUrNF0lYXNpLCRuYgorCWZ4dG9kCSRiYiwkYmIKKwlsZGRhCVslc3ArJGJpYXMrJGZyYW1lKzJdJWFzaSwkbmMKKwlmeHRvZAkkYmMsJGJjCisJbGRkYQlbJXNwKyRiaWFzKyRmcmFtZSswXSVhc2ksJG5kCisJZnh0b2QJJGJkLCRiZAorCWxkZAlbJGFwX2wrJGpdLCRhbG8JCSEgbG9hZCBhW2pdIGluIGRvdWJsZSBmb3JtYXQKKwlmeHRvZAkkbmEsJG5hCisJbGRkCVskYXBfaCskal0sJGFoaQorCWZ4dG9kCSRuYiwkbmIKKwlsZGQJWyRucF9sKyRqXSwkbmxvCQkhIGxvYWQgbltqXSBpbiBkb3VibGUgZm9ybWF0CisJZnh0b2QJJG5jLCRuYworCWxkZAlbJG5wX2grJGpdLCRuaGkKKwlmeHRvZAkkbmQsJG5kCisKKwkJZm11bGQJJGFsbywkYmEsJGFsb2EKKwkJZm11bGQJJG5sbywkbmEsJG5sb2EKKwkJZm11bGQJJGFsbywkYmIsJGFsb2IKKwkJZm11bGQJJG5sbywkbmIsJG5sb2IKKwkJZm11bGQJJGFsbywkYmMsJGFsb2MKKwlmYWRkZAkkYWxvYSwkbmxvYSwkbmxvYQorCQlmbXVsZAkkbmxvLCRuYywkbmxvYworCQlmbXVsZAkkYWxvLCRiZCwkYWxvZAorCWZhZGRkCSRhbG9iLCRubG9iLCRubG9iCisJCWZtdWxkCSRubG8sJG5kLCRubG9kCisJCWZtdWxkCSRhaGksJGJhLCRhaGlhCisJZmFkZGQJJGFsb2MsJG5sb2MsJG5sb2MKKwkJZm11bGQJJG5oaSwkbmEsJG5oaWEKKwkJZm11bGQJJGFoaSwkYmIsJGFoaWIKKwlmYWRkZAkkYWxvZCwkbmxvZCwkbmxvZAorCQlmbXVsZAkkbmhpLCRuYiwkbmhpYgorCQlmbXVsZAkkYWhpLCRiYywkYWhpYworCWZhZGRkCSRhaGlhLCRuaGlhLCRuaGlhCisJCWZtdWxkCSRuaGksJG5jLCRuaGljCisJCWZtdWxkCSRhaGksJGJkLCRhaGlkCisJZmFkZGQJJGFoaWIsJG5oaWIsJG5oaWIKKwkJZm11bGQJJG5oaSwkbmQsJG5oaWQKKworCWZhZGRkCSRhaGljLCRuaGljLCRkb3RhCSEgJG5oaWMKKwlmYWRkZAkkYWhpZCwkbmhpZCwkZG90YgkhICRuaGlkCisKKwlmYWRkZAkkbmxvYywkbmhpYSwkbmxvYworCWZhZGRkCSRubG9kLCRuaGliLCRubG9kCisKKwlmZHRveAkkbmxvYSwkbmxvYQorCWZkdG94CSRubG9iLCRubG9iCisJZmR0b3gJJG5sb2MsJG5sb2MKKwlmZHRveAkkbmxvZCwkbmxvZAorCisJc3RkCSRubG9hLFslc3ArJGJpYXMrJGZyYW1lKzBdCisJc3RkCSRubG9iLFslc3ArJGJpYXMrJGZyYW1lKzhdCisJc3RkCSRubG9jLFslc3ArJGJpYXMrJGZyYW1lKzE2XQorCWFkZAkkaiw4LCRqCisJc3RkCSRubG9kLFslc3ArJGJpYXMrJGZyYW1lKzI0XQorDAorCWxkZAlbJGFwX2wrJGpdLCRhbG8JCSEgbG9hZCBhW2pdIGluIGRvdWJsZSBmb3JtYXQKKwlsZGQJWyRhcF9oKyRqXSwkYWhpCisJbGRkCVskbnBfbCskal0sJG5sbwkJISBsb2FkIG5bal0gaW4gZG91YmxlIGZvcm1hdAorCWxkZAlbJG5wX2grJGpdLCRuaGkKKworCQlmbXVsZAkkYWxvLCRiYSwkYWxvYQorCQlmbXVsZAkkbmxvLCRuYSwkbmxvYQorCQlmbXVsZAkkYWxvLCRiYiwkYWxvYgorCQlmbXVsZAkkbmxvLCRuYiwkbmxvYgorCQlmbXVsZAkkYWxvLCRiYywkYWxvYworCWxkeAlbJXNwKyRiaWFzKyRmcmFtZSswXSwlbzAKKwkJZmFkZGQJJGFsb2EsJG5sb2EsJG5sb2EKKwkJZm11bGQJJG5sbywkbmMsJG5sb2MKKwlsZHgJWyVzcCskYmlhcyskZnJhbWUrOF0sJW8xCisJCWZtdWxkCSRhbG8sJGJkLCRhbG9kCisJbGR4CVslc3ArJGJpYXMrJGZyYW1lKzE2XSwlbzIKKwkJZmFkZGQJJGFsb2IsJG5sb2IsJG5sb2IKKwkJZm11bGQJJG5sbywkbmQsJG5sb2QKKwlsZHgJWyVzcCskYmlhcyskZnJhbWUrMjRdLCVvMworCQlmbXVsZAkkYWhpLCRiYSwkYWhpYQorCisJc3JseAklbzAsMTYsJW83CisJCWZhZGRkCSRhbG9jLCRubG9jLCRubG9jCisJCWZtdWxkCSRuaGksJG5hLCRuaGlhCisJYWRkCSVvNywlbzEsJW8xCisJCWZtdWxkCSRhaGksJGJiLCRhaGliCisJc3JseAklbzEsMTYsJW83CisJCWZhZGRkCSRhbG9kLCRubG9kLCRubG9kCisJCWZtdWxkCSRuaGksJG5iLCRuaGliCisJYWRkCSVvNywlbzIsJW8yCisJCWZtdWxkCSRhaGksJGJjLCRhaGljCisJc3JseAklbzIsMTYsJW83CisJCWZhZGRkCSRhaGlhLCRuaGlhLCRuaGlhCisJCWZtdWxkCSRuaGksJG5jLCRuaGljCisJYWRkCSVvNywlbzMsJW8zCQkhICVvMy4lbzJbMC4uMTVdLiVvMVswLi4xNV0uJW8wWzAuLjE1XQorCSEgd2h5PworCWFuZAklbzAsJG1hc2ssJW8wCisJCWZtdWxkCSRhaGksJGJkLCRhaGlkCisJYW5kCSVvMSwkbWFzaywlbzEKKwlhbmQJJW8yLCRtYXNrLCVvMgorCQlmYWRkZAkkYWhpYiwkbmhpYiwkbmhpYgorCQlmbXVsZAkkbmhpLCRuZCwkbmhpZAorCXNsbHgJJW8xLDE2LCVvMQorCQlmYWRkZAkkZG90YSwkbmxvYSwkbmxvYQorCXNsbHgJJW8yLDMyLCVvMgorCQlmYWRkZAkkZG90YiwkbmxvYiwkbmxvYgorCXNsbHgJJW8zLDQ4LCVvNworCW9yCSVvMSwlbzAsJW8wCisJCWZhZGRkCSRhaGljLCRuaGljLCRkb3RhCSEgJG5oaWMKKwlvcgklbzIsJW8wLCVvMAorCQlmYWRkZAkkYWhpZCwkbmhpZCwkZG90YgkhICRuaGlkCisJb3IJJW83LCVvMCwlbzAJCSEgNjQtYml0IHJlc3VsdAorCWxkeAlbJHRwXSwlbzcKKwkJZmFkZGQJJG5sb2MsJG5oaWEsJG5sb2MKKwlhZGRjYwklbzcsJW8wLCVvMAorCSEgZW5kLW9mLXdoeT8KKwkJZmFkZGQJJG5sb2QsJG5oaWIsJG5sb2QKKwlzcmx4CSVvMywxNiwlZzEJCSEgMzQtYml0IGNhcnJ5CisJCWZkdG94CSRubG9hLCRubG9hCisJYmNzLGEJJXhjYywuKzgKKwlhZGQJJWcxLDEsJWcxCisKKwlmZHRveAkkbmxvYiwkbmxvYgorCWZkdG94CSRubG9jLCRubG9jCisJZmR0b3gJJG5sb2QsJG5sb2QKKworCXN0ZAkkbmxvYSxbJXNwKyRiaWFzKyRmcmFtZSswXQorCXN0ZAkkbmxvYixbJXNwKyRiaWFzKyRmcmFtZSs4XQorCWFkZGNjCSRqLDgsJGoKKwlzdGQJJG5sb2MsWyVzcCskYmlhcyskZnJhbWUrMTZdCisJYnoscG4JJWljYywuTGlubmVyc2tpcAorCXN0ZAkkbmxvZCxbJXNwKyRiaWFzKyRmcmFtZSsyNF0KKwwKKwliYQkuTGlubmVyCisJbm9wCisuYWxpZ24JMzIKKy5MaW5uZXI6CisJbGRkCVskYXBfbCskal0sJGFsbwkJISBsb2FkIGFbal0gaW4gZG91YmxlIGZvcm1hdAorCWxkZAlbJGFwX2grJGpdLCRhaGkKKwlsZGQJWyRucF9sKyRqXSwkbmxvCQkhIGxvYWQgbltqXSBpbiBkb3VibGUgZm9ybWF0CisJbGRkCVskbnBfaCskal0sJG5oaQorCisJCWZtdWxkCSRhbG8sJGJhLCRhbG9hCisJCWZtdWxkCSRubG8sJG5hLCRubG9hCisJCWZtdWxkCSRhbG8sJGJiLCRhbG9iCisJCWZtdWxkCSRubG8sJG5iLCRubG9iCisJCWZtdWxkCSRhbG8sJGJjLCRhbG9jCisJbGR4CVslc3ArJGJpYXMrJGZyYW1lKzBdLCVvMAorCQlmYWRkZAkkYWxvYSwkbmxvYSwkbmxvYQorCQlmbXVsZAkkbmxvLCRuYywkbmxvYworCWxkeAlbJXNwKyRiaWFzKyRmcmFtZSs4XSwlbzEKKwkJZm11bGQJJGFsbywkYmQsJGFsb2QKKwlsZHgJWyVzcCskYmlhcyskZnJhbWUrMTZdLCVvMgorCQlmYWRkZAkkYWxvYiwkbmxvYiwkbmxvYgorCQlmbXVsZAkkbmxvLCRuZCwkbmxvZAorCWxkeAlbJXNwKyRiaWFzKyRmcmFtZSsyNF0sJW8zCisJCWZtdWxkCSRhaGksJGJhLCRhaGlhCisKKwlzcmx4CSVvMCwxNiwlbzcKKwkJZmFkZGQJJGFsb2MsJG5sb2MsJG5sb2MKKwkJZm11bGQJJG5oaSwkbmEsJG5oaWEKKwlhZGQJJW83LCVvMSwlbzEKKwkJZm11bGQJJGFoaSwkYmIsJGFoaWIKKwlzcmx4CSVvMSwxNiwlbzcKKwkJZmFkZGQJJGFsb2QsJG5sb2QsJG5sb2QKKwkJZm11bGQJJG5oaSwkbmIsJG5oaWIKKwlhZGQJJW83LCVvMiwlbzIKKwkJZm11bGQJJGFoaSwkYmMsJGFoaWMKKwlzcmx4CSVvMiwxNiwlbzcKKwkJZmFkZGQJJGFoaWEsJG5oaWEsJG5oaWEKKwkJZm11bGQJJG5oaSwkbmMsJG5oaWMKKwlhZGQJJW83LCVvMywlbzMJCSEgJW8zLiVvMlswLi4xNV0uJW8xWzAuLjE1XS4lbzBbMC4uMTVdCisJYW5kCSVvMCwkbWFzaywlbzAKKwkJZm11bGQJJGFoaSwkYmQsJGFoaWQKKwlhbmQJJW8xLCRtYXNrLCVvMQorCWFuZAklbzIsJG1hc2ssJW8yCisJCWZhZGRkCSRhaGliLCRuaGliLCRuaGliCisJCWZtdWxkCSRuaGksJG5kLCRuaGlkCisJc2xseAklbzEsMTYsJW8xCisJCWZhZGRkCSRkb3RhLCRubG9hLCRubG9hCisJc2xseAklbzIsMzIsJW8yCisJCWZhZGRkCSRkb3RiLCRubG9iLCRubG9iCisJc2xseAklbzMsNDgsJW83CisJb3IJJW8xLCVvMCwlbzAKKwkJZmFkZGQJJGFoaWMsJG5oaWMsJGRvdGEJISAkbmhpYworCW9yCSVvMiwlbzAsJW8wCisJCWZhZGRkCSRhaGlkLCRuaGlkLCRkb3RiCSEgJG5oaWQKKwlvcgklbzcsJW8wLCVvMAkJISA2NC1iaXQgcmVzdWx0CisJCWZhZGRkCSRubG9jLCRuaGlhLCRubG9jCisJYWRkY2MJJWcxLCVvMCwlbzAKKwlsZHgJWyR0cCs4XSwlbzcJCSEgdHBbal0KKwkJZmFkZGQJJG5sb2QsJG5oaWIsJG5sb2QKKwlzcmx4CSVvMywxNiwlZzEJCSEgMzQtYml0IGNhcnJ5CisJCWZkdG94CSRubG9hLCRubG9hCisJYmNzLGEJJXhjYywuKzgKKwlhZGQJJWcxLDEsJWcxCisJCWZkdG94CSRubG9iLCRubG9iCisJYWRkY2MJJW83LCVvMCwlbzAKKwkJZmR0b3gJJG5sb2MsJG5sb2MKKwliY3MsYQkleGNjLC4rOAorCWFkZAklZzEsMSwlZzEKKworCXN0eAklbzAsWyR0cF0JCSEgdHBbai0xXQorCQlmZHRveAkkbmxvZCwkbmxvZAorCisJc3RkCSRubG9hLFslc3ArJGJpYXMrJGZyYW1lKzBdCisJc3RkCSRubG9iLFslc3ArJGJpYXMrJGZyYW1lKzhdCisJc3RkCSRubG9jLFslc3ArJGJpYXMrJGZyYW1lKzE2XQorCWFkZGNjCSRqLDgsJGoKKwlzdGQJJG5sb2QsWyVzcCskYmlhcyskZnJhbWUrMjRdCisJYm56LHB0CSVpY2MsLkxpbm5lcgorCWFkZAkkdHAsOCwkdHAKKwwKKy5MaW5uZXJza2lwOgorCWZkdG94CSRkb3RhLCRkb3RhCisJZmR0b3gJJGRvdGIsJGRvdGIKKworCWxkeAlbJXNwKyRiaWFzKyRmcmFtZSswXSwlbzAKKwlsZHgJWyVzcCskYmlhcyskZnJhbWUrOF0sJW8xCisJbGR4CVslc3ArJGJpYXMrJGZyYW1lKzE2XSwlbzIKKwlsZHgJWyVzcCskYmlhcyskZnJhbWUrMjRdLCVvMworCisJc3JseAklbzAsMTYsJW83CisJc3RkCSRkb3RhLFslc3ArJGJpYXMrJGZyYW1lKzMyXQorCWFkZAklbzcsJW8xLCVvMQorCXN0ZAkkZG90YixbJXNwKyRiaWFzKyRmcmFtZSs0MF0KKwlzcmx4CSVvMSwxNiwlbzcKKwlhZGQJJW83LCVvMiwlbzIKKwlzcmx4CSVvMiwxNiwlbzcKKwlhZGQJJW83LCVvMywlbzMJCSEgJW8zLiVvMlswLi4xNV0uJW8xWzAuLjE1XS4lbzBbMC4uMTVdCisJYW5kCSVvMCwkbWFzaywlbzAKKwlhbmQJJW8xLCRtYXNrLCVvMQorCWFuZAklbzIsJG1hc2ssJW8yCisJc2xseAklbzEsMTYsJW8xCisJc2xseAklbzIsMzIsJW8yCisJc2xseAklbzMsNDgsJW83CisJb3IJJW8xLCVvMCwlbzAKKwlvcgklbzIsJW8wLCVvMAorCWxkeAlbJXNwKyRiaWFzKyRmcmFtZSszMl0sJW80CisJb3IJJW83LCVvMCwlbzAJCSEgNjQtYml0IHJlc3VsdAorCWxkeAlbJXNwKyRiaWFzKyRmcmFtZSs0MF0sJW81CisJYWRkY2MJJWcxLCVvMCwlbzAKKwlsZHgJWyR0cCs4XSwlbzcJCSEgdHBbal0KKwlzcmx4CSVvMywxNiwlZzEJCSEgMzQtYml0IGNhcnJ5CisJYmNzLGEJJXhjYywuKzgKKwlhZGQJJWcxLDEsJWcxCisKKwlhZGRjYwklbzcsJW8wLCVvMAorCWJjcyxhCSV4Y2MsLis4CisJYWRkCSVnMSwxLCVnMQorCisJc3R4CSVvMCxbJHRwXQkJISB0cFtqLTFdCisJYWRkCSR0cCw4LCR0cAorCisJc3JseAklbzQsMTYsJW83CisJYWRkCSVvNywlbzUsJW81CisJYW5kCSVvNCwkbWFzaywlbzQKKwlzbGx4CSVvNSwxNiwlbzcKKwlvcgklbzcsJW80LCVvNAorCWFkZGNjCSVnMSwlbzQsJW80CisJc3JseAklbzUsNDgsJWcxCisJYmNzLGEJJXhjYywuKzgKKwlhZGQJJWcxLDEsJWcxCisKKwlhZGRjYwkkY2FycnksJW80LCVvNAorCXN0eAklbzQsWyR0cF0JCSEgdHBbbnVtLTFdCisJbW92CSVnMSwkY2FycnkKKwliY3MsYQkleGNjLC4rOAorCWFkZAkkY2FycnksMSwkY2FycnkKKworCWFkZGNjCSRpLDgsJGkKKwlibnoJJWljYywuTG91dGVyCisJbm9wCisMCisJYWRkCSR0cCw4LCR0cAkJISBhZGp1c3QgdHAgdG8gcG9pbnQgYXQgdGhlIGVuZAorCW9ybgklZzAsJWcwLCVnNAorCXN1YgklZzAsJG51bSwlbzcJCSEgbj0tbnVtCisJYmEJLkxzdWIKKwlzdWJjYwklZzAsJWcwLCVnMAkJISBjbGVhciAlaWNjLmMKKworLmFsaWduCTMyCisuTHN1YjoKKwlsZHgJWyR0cCslbzddLCVvMAorCWFkZAkkbnAsJW83LCVnMQorCWxkCVslZzErMF0sJW8yCisJbGQJWyVnMSs0XSwlbzMKKwlzcmx4CSVvMCwzMiwlbzEKKwlzdWJjY2MJJW8wLCVvMiwlbzIKKwlhZGQJJHJwLCVvNywlZzEKKwlzdWJjY2MJJW8xLCVvMywlbzMKKwlzdAklbzIsWyVnMSswXQorCWFkZAklbzcsOCwlbzcKKwlicm56LHB0CSVvNywuTHN1YgorCXN0CSVvMyxbJWcxKzRdCisJc3ViYwkkY2FycnksMCwlZzQKKwlzdWIJJWcwLCRudW0sJW83CQkhIG49LW51bQorCWJhCS5MY29weQorCW5vcAorCisuYWxpZ24JMzIKKy5MY29weToKKwlsZHgJWyR0cCslbzddLCVvMAorCWFkZAkkcnAsJW83LCVnMQorCWxkCVslZzErMF0sJW8yCisJbGQJWyVnMSs0XSwlbzMKKwlzdHgJJWcwLFskdHArJW83XQorCWFuZAklbzAsJWc0LCVvMAorCXNybHgJJW8wLDMyLCVvMQorCWFuZG4JJW8yLCVnNCwlbzIKKwlhbmRuCSVvMywlZzQsJW8zCisJb3IJJW8yLCVvMCwlbzAKKwlvcgklbzMsJW8xLCVvMQorCXN0CSVvMCxbJWcxKzBdCisJYWRkCSVvNyw4LCVvNworCWJybnoscHQJJW83LC5MY29weQorCXN0CSVvMSxbJWcxKzRdCisJc3ViCSVnMCwkbnVtLCVvNwkJISBuPS1udW0KKworLkx6YXA6CisJc3R4CSVnMCxbJGFwX2wrJW83XQorCXN0eAklZzAsWyRhcF9oKyVvN10KKwlzdHgJJWcwLFskbnBfbCslbzddCisJc3R4CSVnMCxbJG5wX2grJW83XQorCWFkZAklbzcsOCwlbzcKKwlicm56LHB0CSVvNywuTHphcAorCW5vcAorCisJbGR4CVslc3ArJGJpYXMrJGZyYW1lKzQ4XSwlbzcKKwl3cgklZzAsJW83LCVhc2kJCSEgcmVzdG9yZSAlYXNpCisKKwltb3YJMSwlaTAKKy5McmV0OgorCXJldAorCXJlc3RvcmUKKy50eXBlICAgJGZuYW1lLCNmdW5jdGlvbgorLnNpemUJJGZuYW1lLCguLSRmbmFtZSkKKy5hc2NpegkiTW9udGdvbWVyeSBNdWx0aXBsdGljYXRpb24gZm9yIFVsdHJhU1BBUkMsIENSWVBUT0dBTVMgYnkgPGFwcHJvXEBvcGVuc3NsLm9yZz4iCisuYWxpZ24JMzIKK19fXworCiskY29kZSA9fiBzL1xgKFteXGBdKilcYC9ldmFsKCQxKS9nZW07CisKKyMgQmVsb3cgc3Vic3RpdHV0aW9uIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGNvbXBpbGUgd2l0aG91dCBkZW1hbmRpbmcKKyMgVklTIGV4dGVudGlvbnMgb24gY29tbWFuZCBsaW5lLCBlLmcuIC14YXJjaD12OSB2cy4gLXhhcmNoPXY5YS4gSQorIyBkYXJlIHRvIGRvIHRoaXMsIGJlY2F1c2UgVklTIGNhcGFiaWxpdHkgaXMgZGV0ZWN0ZWQgYXQgcnVuLXRpbWUgbm93CisjIGFuZCB0aGlzIHJvdXRpbmUgaXMgbm90IGNhbGxlZCBvbiBDUFUgbm90IGNhcGFibGUgdG8gZXhlY3V0ZSBpdC4gRG8KKyMgbm90ZSB0aGF0IGZ6ZXJvcyBpcyBub3QgdGhlIG9ubHkgVklTIGRlcGVuZGVuY3khIEFub3RoZXIgZGVwZW5kZW5jeQorIyBpcyBpbXBsaWNpdCBhbmQgaXMganVzdCBfYV8gbnVtZXJpY2FsIHZhbHVlIGxvYWRlZCB0byAlYXNpIHJlZ2lzdGVyLAorIyB3aGljaCBhc3NlbWJsZXIgY2FuJ3QgcmVjb2duaXplIGFzIFZJUyBzcGVjaWZpYy4uLgorJGNvZGUgPX4gcy9memVyb3NccyslZihbMC05XSspLworCSAgIHNwcmludGYoIi53b3JkXHQweCV4XHQhIGZ6ZXJvcyAlJWYlZCIsMHg4MWIwMGMyMHwoJDE8PDI1KSwkMSkKKwkgIC9nZW07CisKK3ByaW50ICRjb2RlOworIyBmbHVzaAorY2xvc2UgU1RET1VUOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2JuL2FzbS92aWEtbW9udC5wbCBiL2NyeXB0by9ibi9hc20vdmlhLW1vbnQucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA0NmE1MQotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9ibi9hc20vdmlhLW1vbnQucGwKQEAgLTAsMCArMSwyNDIgQEAKKyMhL3Vzci9iaW4vZW52IHBlcmwKKyMKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgV3JpdHRlbiBieSBBbmR5IFBvbHlha292IDxhcHByb0BmeS5jaGFsbWVycy5zZT4gZm9yIHRoZSBPcGVuU1NMCisjIHByb2plY3QuIFRoZSBtb2R1bGUgaXMsIGhvd2V2ZXIsIGR1YWwgbGljZW5zZWQgdW5kZXIgT3BlblNTTCBhbmQKKyMgQ1JZUFRPR0FNUyBsaWNlbnNlcyBkZXBlbmRpbmcgb24gd2hlcmUgeW91IG9idGFpbiBpdC4gRm9yIGZ1cnRoZXIKKyMgZGV0YWlscyBzZWUgaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9+YXBwcm8vY3J5cHRvZ2Ftcy8uCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjCisjIFdyYXBwZXIgYXJvdW5kICdyZXAgbW9udG11bCcsIFZJQS1zcGVjaWZpYyBpbnN0cnVjdGlvbiBhY2Nlc3NpbmcKKyMgUGFkTG9jayBNb250Z29tZXJ5IE11bHRpcGxpZXIuIFRoZSB3cmFwcGVyIGlzIGRlc2lnbmVkIGFzIGRyb3AtaW4KKyMgcmVwbGFjZW1lbnQgZm9yIE9wZW5TU0wgYm5fbXVsX21vbnQgW2ZpcnN0IGltcGxlbWVudGVkIGluIDAuOS45XS4KKyMKKyMgQmVsb3cgYXJlIGludGVybGVhdmVkIG91dHB1dHMgZnJvbSAnb3BlbnNzbCBzcGVlZCByc2EgZHNhJyBmb3IgNAorIyBkaWZmZXJlbnQgc29mdHdhcmUgY29uZmlndXJhdGlvbnMgb24gMS41R0h6IFZJQSBFc3RoZXIgcHJvY2Vzc29yLgorIyBMaW5lcyBtYXJrZWQgd2l0aCAic29mdHdhcmUgaW50ZWdlciIgZGVub3RlIHBlcmZvcm1hbmNlIG9mIGhhbmQtCisjIGNvZGVkIGludGVnZXItb25seSBhc3NlbWJsZXIgZm91bmQgaW4gT3BlblNTTCAwLjkuNy4gIlNvZnR3YXJlIFNTRTIiCisjIHJlZmVycyB0byBoYW5kLWNvZGVkIFNTRTIgTW9udGdvbWVyeSBtdWx0aXBsaWNhdGlvbiBwcm9jZWR1cmUgZm91bmQKKyMgT3BlblNTTCAwLjkuOS4gIkhhcmR3YXJlIFZJQSBTREsiIHJlZmVycyB0byBwYWRsb2NrX3BtbSByb3V0aW5lIGZyb20KKyMgUGFkbG9jayBTREsgMi4wLjEgYXZhaWxhYmxlIGZvciBkb3dubG9hZCBmcm9tIFZJQSwgd2hpY2ggbmF0dXJhbGx5CisjIHV0aWxpemVzIHRoZSBtYWdpYyAncmVweiBtb250bXVsJyBpbnN0cnVjdGlvbi4gQW5kIGZpbmFsbHkgImhhcmR3YXJlCisjIHRoaXMiIHJlZmVycyB0byAqdGhpcyogaW1wbGVtZW50YXRpb24gd2hpY2ggYWxzbyB1c2VzICdyZXB6IG1vbnRtdWwnCisjCisjICAgICAgICAgICAgICAgICAgIHNpZ24gICAgdmVyaWZ5ICAgIHNpZ24vcyB2ZXJpZnkvcworIyByc2EgIDUxMiBiaXRzIDAuMDAxNzIwcyAwLjAwMDE0MHMgICAgNTgxLjQgICA3MTQ5LjcJc29mdHdhcmUgaW50ZWdlcgorIyByc2EgIDUxMiBiaXRzIDAuMDAwNjkwcyAwLjAwMDA4NnMgICAxNDUwLjMgIDExNjA2LjAJc29mdHdhcmUgU1NFMgorIyByc2EgIDUxMiBiaXRzIDAuMDA2MTM2cyAwLjAwMDIwMXMgICAgMTYzLjAgICA0OTc0LjUJaGFyZHdhcmUgVklBIFNESworIyByc2EgIDUxMiBiaXRzIDAuMDAwNzEycyAwLjAwMDA1MHMgICAxNDA0LjkgIDE5ODU4LjUJaGFyZHdhcmUgdGhpcworIworIyByc2EgMTAyNCBiaXRzIDAuMDA4NTE4cyAwLjAwMDQxM3MgICAgMTE3LjQgICAyNDIwLjgJc29mdHdhcmUgaW50ZWdlcgorIyByc2EgMTAyNCBiaXRzIDAuMDA0Mjc1cyAwLjAwMDI3N3MgICAgMjMzLjkgICAzNjA5LjcJc29mdHdhcmUgU1NFMgorIyByc2EgMTAyNCBiaXRzIDAuMDEyMTM2cyAwLjAwMDI2MHMgICAgIDgyLjQgICAzODQ0LjUJaGFyZHdhcmUgVklBIFNESworIyByc2EgMTAyNCBiaXRzIDAuMDAyNTIycyAwLjAwMDExNnMgICAgMzk2LjUgICA4NjUwLjkJaGFyZHdhcmUgdGhpcworIworIyByc2EgMjA0OCBiaXRzIDAuMDUwMTAxcyAwLjAwMTM3MXMgICAgIDIwLjAgICAgNzI5LjYJc29mdHdhcmUgaW50ZWdlcgorIyByc2EgMjA0OCBiaXRzIDAuMDMwMjczcyAwLjAwMTAwOHMgICAgIDMzLjAgICAgOTkxLjkJc29mdHdhcmUgU1NFMgorIyByc2EgMjA0OCBiaXRzIDAuMDMwODMzcyAwLjAwMDk3NnMgICAgIDMyLjQgICAxMDI1LjEJaGFyZHdhcmUgVklBIFNESworIyByc2EgMjA0OCBiaXRzIDAuMDExODc5cyAwLjAwMDM0MnMgICAgIDg0LjIgICAyOTIxLjcJaGFyZHdhcmUgdGhpcworIworIyByc2EgNDA5NiBiaXRzIDAuMzI3MDk3cyAwLjAwNDg1OXMgICAgICAzLjEgICAgMjA1LjgJc29mdHdhcmUgaW50ZWdlcgorIyByc2EgNDA5NiBiaXRzIDAuMjI5MzE4cyAwLjAwMzg1OXMgICAgICA0LjQgICAgMjU5LjIJc29mdHdhcmUgU1NFMgorIyByc2EgNDA5NiBiaXRzIDAuMjMzOTUzcyAwLjAwMzI3NHMgICAgICA0LjMgICAgMzA1LjQJaGFyZHdhcmUgVklBIFNESworIyByc2EgNDA5NiBiaXRzIDAuMDcwNDkzcyAwLjAwMTE2NnMgICAgIDE0LjIgICAgODU3LjYJaGFyZHdhcmUgdGhpcworIworIyBkc2EgIDUxMiBiaXRzIDAuMDAxMzQycyAwLjAwMTY1MXMgICAgNzQ1LjIgICAgNjA1LjcJc29mdHdhcmUgaW50ZWdlcgorIyBkc2EgIDUxMiBiaXRzIDAuMDAwODQ0cyAwLjAwMDk4N3MgICAxMTg1LjMgICAxMDEzLjEJc29mdHdhcmUgU1NFMgorIyBkc2EgIDUxMiBiaXRzIDAuMDAxOTAycyAwLjAwMjI0N3MgICAgNTI1LjYgICAgNDQ0LjkJaGFyZHdhcmUgVklBIFNESworIyBkc2EgIDUxMiBiaXRzIDAuMDAwNDU4cyAwLjAwMDUyNHMgICAyMTgyLjIgICAxOTA5LjEJaGFyZHdhcmUgdGhpcworIworIyBkc2EgMTAyNCBiaXRzIDAuMDAzOTY0cyAwLjAwNDkyNnMgICAgMjUyLjMgICAgMjAzLjAJc29mdHdhcmUgaW50ZWdlcgorIyBkc2EgMTAyNCBiaXRzIDAuMDAyNjg2cyAwLjAwMzE2NnMgICAgMzcyLjMgICAgMzE1LjgJc29mdHdhcmUgU1NFMgorIyBkc2EgMTAyNCBiaXRzIDAuMDAyMzk3cyAwLjAwMjgyM3MgICAgNDE3LjEgICAgMzU0LjMJaGFyZHdhcmUgVklBIFNESworIyBkc2EgMTAyNCBiaXRzIDAuMDAwOTc4cyAwLjAwMTE3MHMgICAxMDIyLjIgICAgODU1LjAJaGFyZHdhcmUgdGhpcworIworIyBkc2EgMjA0OCBiaXRzIDAuMDEzMjgwcyAwLjAxNjUxOHMgICAgIDc1LjMgICAgIDYwLjUJc29mdHdhcmUgaW50ZWdlcgorIyBkc2EgMjA0OCBiaXRzIDAuMDA5OTExcyAwLjAxMTUyMnMgICAgMTAwLjkgICAgIDg2LjgJc29mdHdhcmUgU1NFMgorIyBkc2EgMjA0OCBiaXRzIDAuMDA5NTQycyAwLjAxMTc2M3MgICAgMTA0LjggICAgIDg1LjAJaGFyZHdhcmUgVklBIFNESworIyBkc2EgMjA0OCBiaXRzIDAuMDAyODg0cyAwLjAwMzM1MnMgICAgMzQ2LjggICAgMjk4LjMJaGFyZHdhcmUgdGhpcworIworIyBUbyBnaXZlIHlvdSBzb21lIG90aGVyIHJlZmVyZW5jZSBwb2ludCBoZXJlIGlzIG91dHB1dCBmb3IgMi40R0h6IFA0CisjIHJ1bm5pbmcgaGFuZC1jb2RlZCBTU0UyIGJuX211bF9tb250IGZvdW5kIGluIDAuOS45LCBpLmUuICJzb2Z0d2FyZQorIyBTU0UyIiBpbiBhYm92ZSB0ZXJtcy4KKyMKKyMgcnNhICA1MTIgYml0cyAwLjAwMDQwN3MgMC4wMDAwNDdzICAgMjQ1NC4yICAyMTEzNy4wCisjIHJzYSAxMDI0IGJpdHMgMC4wMDI0MjZzIDAuMDAwMTQxcyAgICA0MTIuMSAgIDcxMDAuMAorIyByc2EgMjA0OCBiaXRzIDAuMDE1MDQ2cyAwLjAwMDQ5MXMgICAgIDY2LjUgICAyMDM0LjkKKyMgcnNhIDQwOTYgYml0cyAwLjEwOTc3MHMgMC4wMDIzNzlzICAgICAgOS4xICAgIDQyMC4zCisjIGRzYSAgNTEyIGJpdHMgMC4wMDA0MzhzIDAuMDAwNTI1cyAgIDIyODEuMSAgIDE5MDQuMQorIyBkc2EgMTAyNCBiaXRzIDAuMDAxMzQ2cyAwLjAwMTU5NXMgICAgNzQyLjcgICAgNjI3LjAKKyMgZHNhIDIwNDggYml0cyAwLjAwNDc0NXMgMC4wMDU1ODJzICAgIDIxMC43ICAgIDE3OS4xCisjCisjIENvbmNsdXNpb25zOiAKKyMgLSBWSUEgU0RLIGxlYXZlcyBhICpsb3QqIG9mIHJvb20gZm9yIGltcHJvdmVtZW50ICh3aGljaCB0aGlzCisjICAgaW1wbGVtZW50YXRpb24gc3VjY2Vzc2Z1bGx5IGZpbGxzOi0pOworIyAtICdyZXAgbW9udG11bCcgZ2l2ZXMgdXAgdG8gPjN4IHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IGRlcGVuZGluZyBvbgorIyAgIGtleSBsZW5ndGg7CisjIC0gaW4gdGVybXMgb2YgYWJzb2x1dGUgcGVyZm9ybWFuY2UgaXQgZGVsaXZlcnMgYXBwcm94aW1hdGVseSBhcyBtdWNoCisjICAgYXMgbW9kZXJuIG91dC1vZi1vcmRlciAzMi1iaXQgY29yZXMgW2FnYWluLCBmb3IgbG9uZ2VyIGtleXNdLgorCiskMCA9fiBtLyguKltcL1xcXSlbXlwvXFxdKyQvOyAkZGlyPSQxOworcHVzaChASU5DLCIke2Rpcn0iLCIke2Rpcn0uLi8uLi9wZXJsYXNtIik7CityZXF1aXJlICJ4ODZhc20ucGwiOworCismYXNtX2luaXQoJEFSR1ZbMF0sInZpYS1tb250LnBsIik7CisKKyMgaW50IGJuX211bF9tb250KEJOX1VMT05HICpycCwgY29uc3QgQk5fVUxPTkcgKmFwLCBjb25zdCBCTl9VTE9ORyAqYnAsIGNvbnN0IEJOX1VMT05HICpucCxjb25zdCBCTl9VTE9ORyAqbjAsIGludCBudW0pOworJGZ1bmM9ImJuX211bF9tb250X3BhZGxvY2siOworCiskcGFkPTE2KjE7CSMgYW1vdW50IG9mIHJlc2VydmVkIGJ5dGVzIG9uIHRvcCBvZiBldmVyeSB2ZWN0b3IKKworIyBzdGFjayBsYXlvdXQKKyRtWmVyb1ByaW1lPSZEV1AoMCwiZXNwIik7CQkjIHRoZXNlIGFyZSBzcGVjaWZpZWQgYnkgVklBCiskQT0mRFdQKDQsImVzcCIpOworJEI9JkRXUCg4LCJlc3AiKTsKKyRUPSZEV1AoMTIsImVzcCIpOworJE09JkRXUCgxNiwiZXNwIik7Ciskc2NyYXRjaD0mRFdQKDIwLCJlc3AiKTsKKyRycD0mRFdQKDI0LCJlc3AiKTsJCQkjIHRoZXNlIGFyZSBtaW5lCiskc3A9JkRXUCgyOCwiZXNwIik7CisjICZEV1AoMzIsImVzcCIpCQkJIyAzMiBieXRlIHNjcmF0Y2ggYXJlYQorIyAmRFdQKDY0Kyg0KiRudW0rJHBhZCkqMCwiZXNwIikJIyBwYWRkZWQgdHBbbnVtXQorIyAmRFdQKDY0Kyg0KiRudW0rJHBhZCkqMSwiZXNwIikJIyBwYWRkZWQgY29weSBvZiBhcFtudW1dCisjICZEV1AoNjQrKDQqJG51bSskcGFkKSoyLCJlc3AiKQkjIHBhZGRlZCBjb3B5IG9mIGJwW251bV0KKyMgJkRXUCg2NCsoNCokbnVtKyRwYWQpKjMsImVzcCIpCSMgcGFkZGVkIGNvcHkgb2YgbnBbbnVtXQorIyBOb3RlIHRoYXQgU0RLIHN1Z2dlc3RzIHRvIHVuY29uZGl0aW9uYWxseSBhbGxvY2F0ZSAySyBwZXIgdmVjdG9yLiBUaGlzCisjIGhhcyBxdWl0ZSBhbiBpbXBhY3Qgb24gcGVyZm9ybWFuY2UuIEl0IG5hdHVyYWxseSBkZXBlbmRzIG9uIGtleSBsZW5ndGgsCisjIGJ1dCB0byBnaXZlIGFuIGV4YW1wbGUgMTAyNCBiaXQgcHJpdmF0ZSBSU0Ega2V5IG9wZXJhdGlvbnMgc3VmZmVyID4zMCUKKyMgcGVuYWx0eS4gSSBhbGxvY2F0ZSBvbmx5IGFzIG11Y2ggYXMgYWN0dWFsbHkgcmVxdWlyZWQuLi4KKworJmZ1bmN0aW9uX2JlZ2luKCRmdW5jKTsKKwkmeG9yCSgiZWF4IiwiZWF4Iik7CisJJm1vdgkoImVjeCIsJndwYXJhbSg1KSk7CSMgbnVtCisJIyBtZWV0IFZJQSdzIGxpbWl0YXRpb25zIGZvciBudW0gW25vdGUgdGhhdCB0aGUgc3BlY2lmaWNhdGlvbgorCSMgZXhwcmVzc2VzIHRoZW0gaW4gYml0cywgd2hpbGUgd2Ugd29yayB3aXRoIGFtb3VudCBvZiAzMi1iaXQgd29yZHNdCisJJnRlc3QJKCJlY3giLDMpOworCSZqbnoJKCZsYWJlbCgibGVhdmUiKSk7CSMgbnVtICUgNCAhPSAwCisJJmNtcAkoImVjeCIsOCk7CisJJmpiCSgmbGFiZWwoImxlYXZlIikpOwkjIG51bSA8IDgKKwkmY21wCSgiZWN4IiwxMDI0KTsKKwkmamEJKCZsYWJlbCgibGVhdmUiKSk7CSMgbnVtID4gMTAyNAorCisJJnB1c2hmCSgpOworCSZjbGQJKCk7CisKKwkmbW92CSgiZWRpIiwmd3BhcmFtKDApKTsJIyBycAorCSZtb3YJKCJlYXgiLCZ3cGFyYW0oMSkpOwkjIGFwCisJJm1vdgkoImVieCIsJndwYXJhbSgyKSk7CSMgYnAKKwkmbW92CSgiZWR4Iiwmd3BhcmFtKDMpKTsJIyBucAorCSZtb3YJKCJlc2kiLCZ3cGFyYW0oNCkpOwkjIG4wCisJJm1vdgkoImVzaSIsJkRXUCgwLCJlc2kiKSk7CSMgKm4wCisKKwkmbGVhCSgiZWN4IiwmRFdQKCRwYWQsIiIsImVjeCIsNCkpOwkjIGVjeCBiZWNvbWVzIHZlY3RvciBzaXplIGluIGJ5dGVzCisJJmxlYQkoImVicCIsJkRXUCg2NCwiIiwiZWN4Iiw0KSk7CSMgYWxsb2NhdGUgNCB2ZWN0b3JzICsgNjQgYnl0ZXMKKwkmbmVnCSgiZWJwIik7CisJJmFkZAkoImVicCIsImVzcCIpOworCSZhbmQJKCJlYnAiLC02NCk7CQkjIGFsaWduIHRvIGNhY2hlLWxpbmUKKwkmeGNoZwkoImVicCIsImVzcCIpOwkJIyBhbGxvY2EKKworCSZtb3YJKCRycCwiZWRpIik7CQkjIHNhdmUgcnAKKwkmbW92CSgkc3AsImVicCIpOwkJIyBzYXZlIGVzcAorCisJJm1vdgkoJG1aZXJvUHJpbWUsImVzaSIpOworCSZsZWEJKCJlc2kiLCZEV1AoNjQsImVzcCIpKTsJIyB0cAorCSZtb3YJKCRULCJlc2kiKTsKKwkmbGVhCSgiZWRpIiwmRFdQKDMyLCJlc3AiKSk7CSMgc2NyYXRjaCBhcmVhCisJJm1vdgkoJHNjcmF0Y2gsImVkaSIpOworCSZtb3YJKCJlc2kiLCJlYXgiKTsKKworCSZsZWEJKCJlYnAiLCZEV1AoLSRwYWQsImVjeCIpKTsKKwkmc2hyCSgiZWJwIiwyKTsJCSMgcmVzdG9yZSBvcmlnaW5hbCBudW0gdmFsdWUgaW4gZWJwCisKKwkmeG9yCSgiZWF4IiwiZWF4Iik7CisKKwkmbW92CSgiZWN4IiwiZWJwIik7CisJJmxlYQkoImVjeCIsJkRXUCgoMzIrJHBhZCkvNCwiZWN4IikpOyMgcGFkZGVkIHRwICsgc2NyYXRjaAorCSZkYXRhX2J5dGUoMHhmMywweGFiKTsJCSMgcmVwIHN0b3NsLCBiemVybworCisJJm1vdgkoImVjeCIsImVicCIpOworCSZsZWEJKCJlZGkiLCZEV1AoNjQrJHBhZCwiZXNwIiwiZWN4Iiw0KSk7IyBwb2ludGVyIHRvIGFwIGNvcHkKKwkmbW92CSgkQSwiZWRpIik7CisJJmRhdGFfYnl0ZSgweGYzLDB4YTUpOwkJIyByZXAgbW92c2wsIG1lbWNweQorCSZtb3YJKCJlY3giLCRwYWQvNCk7CisJJmRhdGFfYnl0ZSgweGYzLDB4YWIpOwkJIyByZXAgc3Rvc2wsIGJ6ZXJvIHBhZAorCSMgZWRpIHBvaW50cyBhdCB0aGUgZW5kIG9mIHBhZGRlZCBhcCBjb3B5Li4uCisKKwkmbW92CSgiZWN4IiwiZWJwIik7CisJJm1vdgkoImVzaSIsImVieCIpOworCSZtb3YJKCRCLCJlZGkiKTsKKwkmZGF0YV9ieXRlKDB4ZjMsMHhhNSk7CQkjIHJlcCBtb3ZzbCwgbWVtY3B5CisJJm1vdgkoImVjeCIsJHBhZC80KTsKKwkmZGF0YV9ieXRlKDB4ZjMsMHhhYik7CQkjIHJlcCBzdG9zbCwgYnplcm8gcGFkCisJIyBlZGkgcG9pbnRzIGF0IHRoZSBlbmQgb2YgcGFkZGVkIGJwIGNvcHkuLi4KKworCSZtb3YJKCJlY3giLCJlYnAiKTsKKwkmbW92CSgiZXNpIiwiZWR4Iik7CisJJm1vdgkoJE0sImVkaSIpOworCSZkYXRhX2J5dGUoMHhmMywweGE1KTsJCSMgcmVwIG1vdnNsLCBtZW1jcHkKKwkmbW92CSgiZWN4IiwkcGFkLzQpOworCSZkYXRhX2J5dGUoMHhmMywweGFiKTsJCSMgcmVwIHN0b3NsLCBiemVybyBwYWQKKwkjIGVkaSBwb2ludHMgYXQgdGhlIGVuZCBvZiBwYWRkZWQgbnAgY29weS4uLgorCisJIyBsZXQgbWFnaWMgaGFwcGVuLi4uCisJJm1vdgkoImVjeCIsImVicCIpOworCSZtb3YJKCJlc2kiLCJlc3AiKTsKKwkmc2hsCSgiZWN4Iiw1KTsJCSMgY29udmVydCB3b3JkIGNvdW50ZXIgdG8gYml0IGNvdW50ZXIKKwkmYWxpZ24JKDQpOworCSZkYXRhX2J5dGUoMHhmMywweDBmLDB4YTYsMHhjMCk7IyByZXAgbW9udG11bAorCisJJm1vdgkoImVjeCIsImVicCIpOworCSZsZWEJKCJlc2kiLCZEV1AoNjQsImVzcCIpKTsJCSMgdHAKKwkjIGVkaSBzdGlsbCBwb2ludHMgYXQgdGhlIGVuZCBvZiBwYWRkZWQgbnAgY29weS4uLgorCSZuZWcJKCJlYnAiKTsKKwkmbGVhCSgiZWJwIiwmRFdQKC0kcGFkLCJlZGkiLCJlYnAiLDQpKTsJIyBzbyBqdXN0ICJyZXdpbmQiCisJJm1vdgkoImVkaSIsJHJwKTsJCQkjIHJlc3RvcmUgcnAKKwkmeG9yCSgiZWR4IiwiZWR4Iik7CQkJIyBpPTAgYW5kIGNsZWFyIENGCisKKyZzZXRfbGFiZWwoInN1YiIsOCk7CisJJm1vdgkoImVheCIsJkRXUCgwLCJlc2kiLCJlZHgiLDQpKTsKKwkmc2JiCSgiZWF4IiwmRFdQKDAsImVicCIsImVkeCIsNCkpOworCSZtb3YJKCZEV1AoMCwiZWRpIiwiZWR4Iiw0KSwiZWF4Iik7CSMgcnBbaV09dHBbaV0tbnBbaV0KKwkmbGVhCSgiZWR4IiwmRFdQKDEsImVkeCIpKTsJCSMgaSsrCisJJmxvb3AJKCZsYWJlbCgic3ViIikpOwkJIyBkb2Vzbid0IGFmZmVjdCBDRiEKKworCSZtb3YJKCJlYXgiLCZEV1AoMCwiZXNpIiwiZWR4Iiw0KSk7CSMgdXBtb3N0IG92ZXJmbG93IGJpdAorCSZzYmIJKCJlYXgiLDApOworCSZhbmQJKCJlc2kiLCJlYXgiKTsKKwkmbm90CSgiZWF4Iik7CisJJm1vdgkoImVicCIsImVkaSIpOworCSZhbmQJKCJlYnAiLCJlYXgiKTsKKwkmb3IJKCJlc2kiLCJlYnAiKTsJCQkjIHRwPWNhcnJ5P3RwOnJwCisKKwkmbW92CSgiZWN4IiwiZWR4Iik7CQkJIyBudW0KKwkmeG9yCSgiZWR4IiwiZWR4Iik7CQkJIyBpPTAKKworJnNldF9sYWJlbCgiY29weSIsOCk7CisJJm1vdgkoImVheCIsJkRXUCgwLCJlc2kiLCJlZHgiLDQpKTsKKwkmbW92CSgmRFdQKDY0LCJlc3AiLCJlZHgiLDQpLCJlY3giKTsJIyB6YXAgdHAKKwkmbW92CSgmRFdQKDAsImVkaSIsImVkeCIsNCksImVheCIpOworCSZsZWEJKCJlZHgiLCZEV1AoMSwiZWR4IikpOwkJIyBpKysKKwkmbG9vcAkoJmxhYmVsKCJjb3B5IikpOworCisJJm1vdgkoImVicCIsJHNwKTsKKwkmeG9yCSgiZWF4IiwiZWF4Iik7CisKKwkmbW92CSgiZWN4Iiw2NC80KTsKKwkmbW92CSgiZWRpIiwiZXNwIik7CQkjIHphcCBmcmFtZSBpbmNsdWRpbmcgc2NyYXRjaCBhcmVhCisJJmRhdGFfYnl0ZSgweGYzLDB4YWIpOwkJIyByZXAgc3Rvc2wsIGJ6ZXJvCisKKwkjIHphcCBjb3BpZXMgb2YgYXAsIGJwIGFuZCBucAorCSZsZWEJKCJlZGkiLCZEV1AoNjQrJHBhZCwiZXNwIiwiZWR4Iiw0KSk7IyBwb2ludGVyIHRvIGFwCisJJmxlYQkoImVjeCIsJkRXUCgzKiRwYWQvNCwiZWR4IiwiZWR4IiwyKSk7CisJJmRhdGFfYnl0ZSgweGYzLDB4YWIpOwkJIyByZXAgc3Rvc2wsIGJ6ZXJvCisKKwkmbW92CSgiZXNwIiwiZWJwIik7CisJJmluYwkoImVheCIpOwkJIyBzaWduYWwgImRvbmUiCisJJnBvcGYJKCk7Cismc2V0X2xhYmVsKCJsZWF2ZSIpOworJmZ1bmN0aW9uX2VuZCgkZnVuYyk7CisKKyZhc2NpeigiUGFkbG9jayBNb250Z29tZXJ5IE11bHRpcGxpY2F0aW9uLCBDUllQVE9HQU1TIGJ5IDxhcHByb1xAb3BlbnNzbC5vcmc+Iik7CisKKyZhc21fZmluaXNoKCk7CmRpZmYgLS1naXQgYS9jcnlwdG8vYm4vYXNtL21vLTU4Ni5wbCBiL2NyeXB0by9ibi9hc20veDg2LW1vbnQucGwKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBjcnlwdG8vYm4vYXNtL21vLTU4Ni5wbApyZW5hbWUgdG8gY3J5cHRvL2JuL2FzbS94ODYtbW9udC5wbAppbmRleCAwOTgyMjkzLi41Y2QzY2QyCi0tLSBhL2NyeXB0by9ibi9hc20vbW8tNTg2LnBsCisrKyBiL2NyeXB0by9ibi9hc20veDg2LW1vbnQucGwKQEAgLTEsMTggKzEsNSBAQAogIyEvdXNyL2Jpbi9lbnYgcGVybAogCi0jIFRoaXMgaXMgY3J5cHRvL2JuL2FzbS94ODYtbW9udC5wbCAod2l0aCBhc2NpeiBmcm9tIGNyeXB0by9wZXJsYXNtL3g4NmFzbS5wbCkKLSMgZnJvbSBPcGVuU1NMIDAuOS45LWRldiAKLQotc3ViIDo6YXNjaXoKLXsgbXkgQHN0cj11bnBhY2soIkMqIixzaGlmdCk7Ci0gICAgcHVzaCBAc3RyLDA7Ci0gICAgd2hpbGUgKCQjc3RyPjE1KSB7Ci0JJmRhdGFfYnl0ZShAc3RyWzAuLjE1XSk7Ci0JZm9yZWFjaCAoMC4uMTUpIHsgc2hpZnQgQHN0cjsgfQotICAgIH0KLSAgICAmZGF0YV9ieXRlKEBzdHIpIGlmIChAc3RyKTsKLX0KLQogIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPiBmb3IgdGhlIE9wZW5TU0wKICMgcHJvamVjdC4gVGhlIG1vZHVsZSBpcywgaG93ZXZlciwgZHVhbCBsaWNlbnNlZCB1bmRlciBPcGVuU1NMIGFuZApAQCAtMzksNyArMjYsOCBAQAogIyBJbnRlZ2VyLW9ubHkgY29kZSBbYmVpbmcgZXF1aXBwZWQgd2l0aCBkZWRpY2F0ZWQgc3F1YXJpbmcgcHJvY2VkdXJlXQogIyBnaXZlcyB+NDAlIG9uIHJzYTUxMiBzaWduIGJlbmNobWFyay4uLgogCi1wdXNoKEBJTkMsInBlcmxhc20iLCIuLi8uLi9wZXJsYXNtIik7CiskMCA9fiBtLyguKltcL1xcXSlbXlwvXFxdKyQvOyAkZGlyPSQxOworcHVzaChASU5DLCIke2Rpcn0iLCIke2Rpcn0uLi8uLi9wZXJsYXNtIik7CiByZXF1aXJlICJ4ODZhc20ucGwiOwogCiAmYXNtX2luaXQoJEFSR1ZbMF0sJDApOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2JuL2FzbS94ODZfNjQtZ2NjLmMgYi9jcnlwdG8vYm4vYXNtL3g4Nl82NC1nY2MuYwppbmRleCAyYjJiYzFlLi5hY2IwYjQwIDEwMDY0NAotLS0gYS9jcnlwdG8vYm4vYXNtL3g4Nl82NC1nY2MuYworKysgYi9jcnlwdG8vYm4vYXNtL3g4Nl82NC1nY2MuYwpAQCAtMSw1ICsxLDUgQEAKICNpbmNsdWRlICIuLi9ibl9sY2wuaCIKLSNpZmRlZiBfX1NVTlBST19DCisjaWYgIShkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXz49MikKICMgaW5jbHVkZSAiLi4vYm5fYXNtLmMiCS8qIGtpbmQgb2YgZGlydHkgaGFjayBmb3IgU3VuIFN0dWRpbyAqLwogI2Vsc2UKIC8qCkBAIC01NSwxMCArNTUsMTUgQEAKICAqICAgIG1hY2hpbmUuCiAgKi8KIAorI2lmZGVmIF9XSU42NAorI2RlZmluZSBCTl9VTE9ORyB1bnNpZ25lZCBsb25nIGxvbmcKKyNlbHNlCiAjZGVmaW5lIEJOX1VMT05HIHVuc2lnbmVkIGxvbmcKKyNlbmRpZgogCiAjdW5kZWYgbXVsCiAjdW5kZWYgbXVsX2FkZAorI3VuZGVmIHNxcgogCiAvKgogICogIm0iKGEpLCAiK20iKHIpCWlzIHRoZSB3YXkgdG8gZmF2b3IgRGlyZWN0UGF0aCC1LWNvZGU7CkBAIC0xODYsNyArMTkxLDcgQEAKIAogCWFzbSAoCiAJIglzdWJxCSUyLCUyCQlcbiIKLQkiLmFsaWduIDE2CQkJXG4iCisJIi5wMmFsaWduIDQJCQlcbiIKIAkiMToJbW92cQkoJTQsJTIsOCksJTAJXG4iCiAJIglhZGNxCSglNSwlMiw4KSwlMAlcbiIKIAkiCW1vdnEJJTAsKCUzLCUyLDgpCVxuIgpAQCAtMjA5LDcgKzIxNCw3IEBACiAKIAlhc20gKAogCSIJc3VicQklMiwlMgkJXG4iCi0JIi5hbGlnbiAxNgkJCVxuIgorCSIucDJhbGlnbiA0CQkJXG4iCiAJIjE6CW1vdnEJKCU0LCUyLDgpLCUwCVxuIgogCSIJc2JicQkoJTUsJTIsOCksJTAJXG4iCiAJIgltb3ZxCSUwLCglMywlMiw4KQlcbiIKZGlmZiAtLWdpdCBhL2NyeXB0by9ibi9hc20veDg2XzY0LW1vbnQucGwgYi9jcnlwdG8vYm4vYXNtL3g4Nl82NC1tb250LnBsCmluZGV4IGM0M2I2OTUuLjNiN2E2ZjIgMTAwNzU1Ci0tLSBhL2NyeXB0by9ibi9hc20veDg2XzY0LW1vbnQucGwKKysrIGIvY3J5cHRvL2JuL2FzbS94ODZfNjQtbW9udC5wbApAQCAtMTUsMTQgKzE1LDE4IEBACiAjIHJlc3BlY3RmdWwgNTAlLiBJdCByZW1haW5zIHRvIGJlIHNlZW4gaWYgbG9vcCB1bnJvbGxpbmcgYW5kCiAjIGRlZGljYXRlZCBzcXVhcmluZyByb3V0aW5lIGNhbiBwcm92aWRlIGZ1cnRoZXIgaW1wcm92ZW1lbnQuLi4KIAotJG91dHB1dD1zaGlmdDsKKyRmbGF2b3VyID0gc2hpZnQ7Ciskb3V0cHV0ICA9IHNoaWZ0OworaWYgKCRmbGF2b3VyID1+IC9cLi8pIHsgJG91dHB1dCA9ICRmbGF2b3VyOyB1bmRlZiAkZmxhdm91cjsgfQorCiskd2luNjQ9MDsgJHdpbjY0PTEgaWYgKCRmbGF2b3VyID1+IC9bbm1dYXNtfG1pbmd3NjQvIHx8ICRvdXRwdXQgPX4gL1wuYXNtJC8pOwogCiAkMCA9fiBtLyguKltcL1xcXSlbXlwvXFxdKyQvOyAkZGlyPSQxOwogKCAkeGxhdGU9IiR7ZGlyfXg4Nl82NC14bGF0ZS5wbCIgYW5kIC1mICR4bGF0ZSApIG9yCiAoICR4bGF0ZT0iJHtkaXJ9Li4vLi4vcGVybGFzbS94ODZfNjQteGxhdGUucGwiIGFuZCAtZiAkeGxhdGUpIG9yCiBkaWUgImNhbid0IGxvY2F0ZSB4ODZfNjQteGxhdGUucGwiOwogCi1vcGVuIFNURE9VVCwifCAkXlggJHhsYXRlICRvdXRwdXQiOworb3BlbiBTVERPVVQsInwgJF5YICR4bGF0ZSAkZmxhdm91ciAkb3V0cHV0IjsKIAogIyBpbnQgYm5fbXVsX21vbnQoCiAkcnA9IiVyZGkiOwkjIEJOX1VMT05HICpycCwKQEAgLTU1LDEzICs1OSwxNCBAQAogCXB1c2gJJXIxNQogCiAJbW92CSR7bnVtfWQsJHtudW19ZAotCWxlYQkyKCRudW0pLCVyYXgKLQltb3YJJXJzcCwlcmJwCi0JbmVnCSVyYXgKLQlsZWEJKCVyc3AsJXJheCw4KSwlcnNwCSMgdHA9YWxsb2NhKDgqKG51bSsyKSkKKwlsZWEJMigkbnVtKSwlcjEwCisJbW92CSVyc3AsJXIxMQorCW5lZwklcjEwCisJbGVhCSglcnNwLCVyMTAsOCksJXJzcAkjIHRwPWFsbG9jYSg4KihudW0rMikpCiAJYW5kCVwkLTEwMjQsJXJzcAkJIyBtaW5pbWl6ZSBUTEIgdXNhZ2UKIAotCW1vdgklcmJwLDgoJXJzcCwkbnVtLDgpCSMgdHBbbnVtKzFdPSVyc3AKKwltb3YJJXIxMSw4KCVyc3AsJG51bSw4KQkjIHRwW251bSsxXT0lcnNwCisuTHByb2xvZ3VlOgogCW1vdgklcmR4LCRicAkJIyAkYnAgcmVhc3NpZ25lZCwgcmVtZW1iZXI/CiAKIAltb3YJKCRuMCksJG4wCQkjIHB1bGwgbjBbMF0gdmFsdWUKQEAgLTE5NywxOCArMjAyLDEyOSBAQAogCWRlYwkkagogCWpnZQkuTGNvcHkKIAotCW1vdgk4KCVyc3AsJG51bSw4KSwlcnNwCSMgcmVzdG9yZSAlcnNwCisJbW92CTgoJXJzcCwkbnVtLDgpLCVyc2kJIyByZXN0b3JlICVyc3AKIAltb3YJXCQxLCVyYXgKKwltb3YJKCVyc2kpLCVyMTUKKwltb3YJOCglcnNpKSwlcjE0CisJbW92CTE2KCVyc2kpLCVyMTMKKwltb3YJMjQoJXJzaSksJXIxMgorCW1vdgkzMiglcnNpKSwlcmJwCisJbW92CTQwKCVyc2kpLCVyYngKKwlsZWEJNDgoJXJzaSksJXJzcAorLkxlcGlsb2d1ZToKKwlyZXQKKy5zaXplCWJuX211bF9tb250LC4tYm5fbXVsX21vbnQKKy5hc2NpegkiTW9udGdvbWVyeSBNdWx0aXBsaWNhdGlvbiBmb3IgeDg2XzY0LCBDUllQVE9HQU1TIGJ5IDxhcHByb1xAb3BlbnNzbC5vcmc+IgorLmFsaWduCTE2CitfX18KKworIyBFWENFUFRJT05fRElTUE9TSVRJT04gaGFuZGxlciAoRVhDRVBUSU9OX1JFQ09SRCAqcmVjLFVMT05HNjQgZnJhbWUsCisjCQlDT05URVhUICpjb250ZXh0LERJU1BBVENIRVJfQ09OVEVYVCAqZGlzcCkKK2lmICgkd2luNjQpIHsKKyRyZWM9IiVyY3giOworJGZyYW1lPSIlcmR4IjsKKyRjb250ZXh0PSIlcjgiOworJGRpc3A9IiVyOSI7CisKKyRjb2RlLj08PF9fXzsKKy5leHRlcm4JX19pbXBfUnRsVmlydHVhbFVud2luZAorLnR5cGUJc2VfaGFuZGxlcixcQGFiaS1vbW5pcG90ZW50CisuYWxpZ24JMTYKK3NlX2hhbmRsZXI6CisJcHVzaAklcnNpCisJcHVzaAklcmRpCisJcHVzaAklcmJ4CisJcHVzaAklcmJwCisJcHVzaAklcjEyCisJcHVzaAklcjEzCisJcHVzaAklcjE0CisJcHVzaAklcjE1CisJcHVzaGZxCisJc3ViCVwkNjQsJXJzcAorCisJbW92CTEyMCgkY29udGV4dCksJXJheAkjIHB1bGwgY29udGV4dC0+UmF4CisJbW92CTI0OCgkY29udGV4dCksJXJieAkjIHB1bGwgY29udGV4dC0+UmlwCisKKwlsZWEJLkxwcm9sb2d1ZSglcmlwKSwlcjEwCisJY21wCSVyMTAsJXJieAkJIyBjb250ZXh0LT5SaXA8Lkxwcm9sb2d1ZQorCWpiCS5MaW5fcHJvbG9ndWUKKworCW1vdgkxNTIoJGNvbnRleHQpLCVyYXgJIyBwdWxsIGNvbnRleHQtPlJzcAorCisJbGVhCS5MZXBpbG9ndWUoJXJpcCksJXIxMAorCWNtcAklcjEwLCVyYngJCSMgY29udGV4dC0+UmlwPj0uTGVwaWxvZ3VlCisJamFlCS5MaW5fcHJvbG9ndWUKKworCW1vdgkxOTIoJGNvbnRleHQpLCVyMTAJIyBwdWxsICRudW0KKwltb3YJOCglcmF4LCVyMTAsOCksJXJheAkjIHB1bGwgc2F2ZWQgc3RhY2sgcG9pbnRlcgorCWxlYQk0OCglcmF4KSwlcmF4CisKKwltb3YJLTgoJXJheCksJXJieAorCW1vdgktMTYoJXJheCksJXJicAorCW1vdgktMjQoJXJheCksJXIxMgorCW1vdgktMzIoJXJheCksJXIxMworCW1vdgktNDAoJXJheCksJXIxNAorCW1vdgktNDgoJXJheCksJXIxNQorCW1vdgklcmJ4LDE0NCgkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlJieAorCW1vdgklcmJwLDE2MCgkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlJicAorCW1vdgklcjEyLDIxNigkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlIxMgorCW1vdgklcjEzLDIyNCgkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlIxMworCW1vdgklcjE0LDIzMigkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlIxNAorCW1vdgklcjE1LDI0MCgkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlIxNQorCisuTGluX3Byb2xvZ3VlOgorCW1vdgk4KCVyYXgpLCVyZGkKKwltb3YJMTYoJXJheCksJXJzaQorCW1vdgklcmF4LDE1MigkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlJzcAorCW1vdgklcnNpLDE2OCgkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlJzaQorCW1vdgklcmRpLDE3NigkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlJkaQorCisJbW92CTQwKCRkaXNwKSwlcmRpCQkjIGRpc3AtPkNvbnRleHRSZWNvcmQKKwltb3YJJGNvbnRleHQsJXJzaQkJIyBjb250ZXh0CisJbW92CVwkMTU0LCVlY3gJCSMgc2l6ZW9mKENPTlRFWFQpCisJLmxvbmcJMHhhNTQ4ZjNmYwkJIyBjbGQ7IHJlcCBtb3ZzcQorCisJbW92CSRkaXNwLCVyc2kKKwl4b3IJJXJjeCwlcmN4CQkjIGFyZzEsIFVOV19GTEFHX05IQU5ETEVSCisJbW92CTgoJXJzaSksJXJkeAkJIyBhcmcyLCBkaXNwLT5JbWFnZUJhc2UKKwltb3YJMCglcnNpKSwlcjgJCSMgYXJnMywgZGlzcC0+Q29udHJvbFBjCisJbW92CTE2KCVyc2kpLCVyOQkJIyBhcmc0LCBkaXNwLT5GdW5jdGlvbkVudHJ5CisJbW92CTQwKCVyc2kpLCVyMTAJCSMgZGlzcC0+Q29udGV4dFJlY29yZAorCWxlYQk1NiglcnNpKSwlcjExCQkjICZkaXNwLT5IYW5kbGVyRGF0YQorCWxlYQkyNCglcnNpKSwlcjEyCQkjICZkaXNwLT5Fc3RhYmxpc2hlckZyYW1lCisJbW92CSVyMTAsMzIoJXJzcCkJCSMgYXJnNQorCW1vdgklcjExLDQwKCVyc3ApCQkjIGFyZzYKKwltb3YJJXIxMiw0OCglcnNwKQkJIyBhcmc3CisJbW92CSVyY3gsNTYoJXJzcCkJCSMgYXJnOCwgKE5VTEwpCisJY2FsbAkqX19pbXBfUnRsVmlydHVhbFVud2luZCglcmlwKQorCisJbW92CVwkMSwlZWF4CQkjIEV4Y2VwdGlvbkNvbnRpbnVlU2VhcmNoCisJYWRkCVwkNjQsJXJzcAorCXBvcGZxCiAJcG9wCSVyMTUKIAlwb3AJJXIxNAogCXBvcAklcjEzCiAJcG9wCSVyMTIKIAlwb3AJJXJicAogCXBvcAklcmJ4CisJcG9wCSVyZGkKKwlwb3AJJXJzaQogCXJldAotLnNpemUJYm5fbXVsX21vbnQsLi1ibl9tdWxfbW9udAotLmFzY2l6CSJNb250Z29tZXJ5IE11bHRpcGxpY2F0aW9uIGZvciB4ODZfNjQsIENSWVBUT0dBTVMgYnkgPGFwcHJvXEBvcGVuc3NsLm9yZz4iCisuc2l6ZQlzZV9oYW5kbGVyLC4tc2VfaGFuZGxlcgorCisuc2VjdGlvbgkucGRhdGEKKy5hbGlnbgk0CisJLnJ2YQkuTFNFSF9iZWdpbl9ibl9tdWxfbW9udAorCS5ydmEJLkxTRUhfZW5kX2JuX211bF9tb250CisJLnJ2YQkuTFNFSF9pbmZvX2JuX211bF9tb250CisKKy5zZWN0aW9uCS54ZGF0YQorLmFsaWduCTgKKy5MU0VIX2luZm9fYm5fbXVsX21vbnQ6CisJLmJ5dGUJOSwwLDAsMAorCS5ydmEJc2VfaGFuZGxlcgogX19fCit9CiAKIHByaW50ICRjb2RlOwogY2xvc2UgU1RET1VUOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2JuL2JuLmggYi9jcnlwdG8vYm4vYm4uaAppbmRleCBmMTcxOWE1Li5lNDg0YjdmIDEwMDY0NAotLS0gYS9jcnlwdG8vYm4vYm4uaAorKysgYi9jcnlwdG8vYm4vYm4uaApAQCAtNTYsNiArNTYsNTkgQEAKICAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCiAgKi8KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKyAqCisgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisgKgorICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisgKgorICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworICogICAgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorICoKKyAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIENvcHlyaWdodCAyMDAyIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQUxMIFJJR0hUUyBSRVNFUlZFRC4KICAqCiAgKiBQb3J0aW9ucyBvZiB0aGUgYXR0YWNoZWQgc29mdHdhcmUgKCJDb250cmlidXRpb24iKSBhcmUgZGV2ZWxvcGVkIGJ5IApAQCAtNzcsNiArMTMwLDcgQEAKICNpbmNsdWRlIDxzdGRpby5oPiAvKiBGSUxFICovCiAjZW5kaWYKICNpbmNsdWRlIDxvcGVuc3NsL29zc2xfdHlwLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KIAogI2lmZGVmICBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CkBAIC05NCw5ICsxNDgsMTEgQEAKIC8qICNkZWZpbmUgQk5fREVCVUcgKi8KIC8qICNkZWZpbmUgQk5fREVCVUdfUkFORCAqLwogCisjaWZuZGVmIE9QRU5TU0xfU01BTExfRk9PVFBSSU5UCiAjZGVmaW5lIEJOX01VTF9DT01CQQogI2RlZmluZSBCTl9TUVJfQ09NQkEKICNkZWZpbmUgQk5fUkVDVVJTSU9OCisjZW5kaWYKIAogLyogVGhpcyBuZXh0IG9wdGlvbiB1c2VzIHRoZSBDIGxpYnJhcmllcyAoMiB3b3JkKS8oMSB3b3JkKSBmdW5jdGlvbi4KICAqIElmIGl0IGlzIG5vdCBkZWZpbmVkLCBJIHVzZSBteSBDIHZlcnNpb24gKHdoaWNoIGlzIHNsb3dlcikuCkBAIC0xMzcsNiArMTkzLDggQEAKICNkZWZpbmUgQk5fREVDX0ZNVDEJIiVsdSIKICNkZWZpbmUgQk5fREVDX0ZNVDIJIiUwMTlsdSIKICNkZWZpbmUgQk5fREVDX05VTQkxOQorI2RlZmluZSBCTl9IRVhfRk1UMQkiJWxYIgorI2RlZmluZSBCTl9IRVhfRk1UMgkiJTAxNmxYIgogI2VuZGlmCiAKIC8qIFRoaXMgaXMgd2hlcmUgdGhlIGxvbmcgbG9uZyBkYXRhIHR5cGUgaXMgNjQgYml0cywgYnV0IGxvbmcgaXMgMzIuCkBAIC0xNjIsODMgKzIyMCwzNyBAQAogI2RlZmluZSBCTl9ERUNfRk1UMQkiJWxsdSIKICNkZWZpbmUgQk5fREVDX0ZNVDIJIiUwMTlsbHUiCiAjZGVmaW5lIEJOX0RFQ19OVU0JMTkKKyNkZWZpbmUgQk5fSEVYX0ZNVDEJIiVsbFgiCisjZGVmaW5lIEJOX0hFWF9GTVQyCSIlMDE2bGxYIgogI2VuZGlmCiAKICNpZmRlZiBUSElSVFlfVFdPX0JJVAogI2lmZGVmIEJOX0xMT05HCi0jIGlmIGRlZmluZWQoT1BFTlNTTF9TWVNfV0lOMzIpICYmICFkZWZpbmVkKF9fR05VQ19fKQorIyBpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19HTlVDX18pCiAjICBkZWZpbmUgQk5fVUxMT05HCXVuc2lnbmVkIF9faW50NjQKKyMgIGRlZmluZSBCTl9NQVNLCSgweGZmZmZmZmZmZmZmZmZmZmZJNjQpCiAjIGVsc2UKICMgIGRlZmluZSBCTl9VTExPTkcJdW5zaWduZWQgbG9uZyBsb25nCisjICBkZWZpbmUgQk5fTUFTSwkoMHhmZmZmZmZmZmZmZmZmZmZmTEwpCiAjIGVuZGlmCiAjZW5kaWYKLSNkZWZpbmUgQk5fVUxPTkcJdW5zaWduZWQgbG9uZwotI2RlZmluZSBCTl9MT05HCQlsb25nCisjZGVmaW5lIEJOX1VMT05HCXVuc2lnbmVkIGludAorI2RlZmluZSBCTl9MT05HCQlpbnQKICNkZWZpbmUgQk5fQklUUwkJNjQKICNkZWZpbmUgQk5fQllURVMJNAogI2RlZmluZSBCTl9CSVRTMgkzMgogI2RlZmluZSBCTl9CSVRTNAkxNgotI2lmZGVmIE9QRU5TU0xfU1lTX1dJTjMyCi0vKiBWQysrIGRvZXNuJ3QgbGlrZSB0aGUgTEwgc3VmZml4ICovCi0jZGVmaW5lIEJOX01BU0sJCSgweGZmZmZmZmZmZmZmZmZmZmZMKQotI2Vsc2UKLSNkZWZpbmUgQk5fTUFTSwkJKDB4ZmZmZmZmZmZmZmZmZmZmZkxMKQotI2VuZGlmCiAjZGVmaW5lIEJOX01BU0syCSgweGZmZmZmZmZmTCkKICNkZWZpbmUgQk5fTUFTSzJsCSgweGZmZmYpCiAjZGVmaW5lIEJOX01BU0syaDEJKDB4ZmZmZjgwMDBMKQogI2RlZmluZSBCTl9NQVNLMmgJKDB4ZmZmZjAwMDBMKQogI2RlZmluZSBCTl9UQklUCQkoMHg4MDAwMDAwMEwpCiAjZGVmaW5lIEJOX0RFQ19DT05WCSgxMDAwMDAwMDAwTCkKLSNkZWZpbmUgQk5fREVDX0ZNVDEJIiVsdSIKLSNkZWZpbmUgQk5fREVDX0ZNVDIJIiUwOWx1IgorI2RlZmluZSBCTl9ERUNfRk1UMQkiJXUiCisjZGVmaW5lIEJOX0RFQ19GTVQyCSIlMDl1IgogI2RlZmluZSBCTl9ERUNfTlVNCTkKLSNlbmRpZgotCi0jaWZkZWYgU0lYVEVFTl9CSVQKLSNpZm5kZWYgQk5fRElWMlcKLSNkZWZpbmUgQk5fRElWMlcKLSNlbmRpZgotI2RlZmluZSBCTl9VTExPTkcJdW5zaWduZWQgbG9uZwotI2RlZmluZSBCTl9VTE9ORwl1bnNpZ25lZCBzaG9ydAotI2RlZmluZSBCTl9MT05HCQlzaG9ydAotI2RlZmluZSBCTl9CSVRTCQkzMgotI2RlZmluZSBCTl9CWVRFUwkyCi0jZGVmaW5lIEJOX0JJVFMyCTE2Ci0jZGVmaW5lIEJOX0JJVFM0CTgKLSNkZWZpbmUgQk5fTUFTSwkJKDB4ZmZmZmZmZmYpCi0jZGVmaW5lIEJOX01BU0syCSgweGZmZmYpCi0jZGVmaW5lIEJOX01BU0sybAkoMHhmZikKLSNkZWZpbmUgQk5fTUFTSzJoMQkoMHhmZjgwKQotI2RlZmluZSBCTl9NQVNLMmgJKDB4ZmYwMCkKLSNkZWZpbmUgQk5fVEJJVAkJKDB4ODAwMCkKLSNkZWZpbmUgQk5fREVDX0NPTlYJKDEwMDAwMCkKLSNkZWZpbmUgQk5fREVDX0ZNVDEJIiV1IgotI2RlZmluZSBCTl9ERUNfRk1UMgkiJTA1dSIKLSNkZWZpbmUgQk5fREVDX05VTQk1Ci0jZW5kaWYKLQotI2lmZGVmIEVJR0hUX0JJVAotI2lmbmRlZiBCTl9ESVYyVwotI2RlZmluZSBCTl9ESVYyVwotI2VuZGlmCi0jZGVmaW5lIEJOX1VMTE9ORwl1bnNpZ25lZCBzaG9ydAotI2RlZmluZSBCTl9VTE9ORwl1bnNpZ25lZCBjaGFyCi0jZGVmaW5lIEJOX0xPTkcJCWNoYXIKLSNkZWZpbmUgQk5fQklUUwkJMTYKLSNkZWZpbmUgQk5fQllURVMJMQotI2RlZmluZSBCTl9CSVRTMgk4Ci0jZGVmaW5lIEJOX0JJVFM0CTQKLSNkZWZpbmUgQk5fTUFTSwkJKDB4ZmZmZikKLSNkZWZpbmUgQk5fTUFTSzIJKDB4ZmYpCi0jZGVmaW5lIEJOX01BU0sybAkoMHhmKQotI2RlZmluZSBCTl9NQVNLMmgxCSgweGY4KQotI2RlZmluZSBCTl9NQVNLMmgJKDB4ZjApCi0jZGVmaW5lIEJOX1RCSVQJCSgweDgwKQotI2RlZmluZSBCTl9ERUNfQ09OVgkoMTAwKQotI2RlZmluZSBCTl9ERUNfRk1UMQkiJXUiCi0jZGVmaW5lIEJOX0RFQ19GTVQyCSIlMDJ1IgotI2RlZmluZSBCTl9ERUNfTlVNCTIKKyNkZWZpbmUgQk5fSEVYX0ZNVDEJIiVYIgorI2RlZmluZSBCTl9IRVhfRk1UMgkiJTA4WCIKICNlbmRpZgogCiAjZGVmaW5lIEJOX0RFRkFVTFRfQklUUwkxMjgwCkBAIC0zMDMsMTIgKzMxNSw4IEBACiAJQklHTlVNIE47ICAgICAgLyogVGhlIG1vZHVsdXMgKi8KIAlCSUdOVU0gTmk7ICAgICAvKiBSKigxL1IgbW9kIE4pIC0gTipOaSA9IDEKIAkgICAgICAgICAgICAgICAgKiAoTmkgaXMgb25seSBzdG9yZWQgZm9yIGJpZ251bSBhbGdvcml0aG0pICovCi0jaWYgMAotCS8qIE9wZW5TU0wgMC45LjkgcHJldmlldzogKi8KLQlCTl9VTE9ORyBuMFsyXTsvKiBsZWFzdCBzaWduaWZpY2FudCB3b3JkKHMpIG9mIE5pICovCi0jZWxzZQotCUJOX1VMT05HIG4wOyAgIC8qIGxlYXN0IHNpZ25pZmljYW50IHdvcmQgb2YgTmkgKi8KLSNlbmRpZgorCUJOX1VMT05HIG4wWzJdOy8qIGxlYXN0IHNpZ25pZmljYW50IHdvcmQocykgb2YgTmk7CisJICAgICAgICAgICAgICAgICAgKHR5cGUgY2hhbmdlZCB3aXRoIDAuOS45LCB3YXMgIkJOX1VMT05HIG4wOyIgYmVmb3JlKSAqLwogCWludCBmbGFnczsKIAl9OwogCkBAIC01MDQsNiArNTEyLDcgQEAKIGNoYXIgKglCTl9ibjJkZWMoY29uc3QgQklHTlVNICphKTsKIGludCAJQk5faGV4MmJuKEJJR05VTSAqKmEsIGNvbnN0IGNoYXIgKnN0cik7CiBpbnQgCUJOX2RlYzJibihCSUdOVU0gKiphLCBjb25zdCBjaGFyICpzdHIpOworaW50CUJOX2FzYzJibihCSUdOVU0gKiphLCBjb25zdCBjaGFyICpzdHIpOwogaW50CUJOX2djZChCSUdOVU0gKnIsY29uc3QgQklHTlVNICphLGNvbnN0IEJJR05VTSAqYixCTl9DVFggKmN0eCk7CiBpbnQJQk5fa3JvbmVja2VyKGNvbnN0IEJJR05VTSAqYSxjb25zdCBCSUdOVU0gKmIsQk5fQ1RYICpjdHgpOyAvKiByZXR1cm5zIC0yIGZvciBlcnJvciAqLwogQklHTlVNICpCTl9tb2RfaW52ZXJzZShCSUdOVU0gKnJldCwKQEAgLTUzMSwxNyArNTQwLDYgQEAKIGludAlCTl9pc19wcmltZV9mYXN0dGVzdF9leChjb25zdCBCSUdOVU0gKnAsaW50IG5jaGVja3MsIEJOX0NUWCAqY3R4LAogCQlpbnQgZG9fdHJpYWxfZGl2aXNpb24sIEJOX0dFTkNCICpjYik7CiAKLWludCBCTl9YOTMxX2dlbmVyYXRlX1hwcShCSUdOVU0gKlhwLCBCSUdOVU0gKlhxLCBpbnQgbmJpdHMsIEJOX0NUWCAqY3R4KTsKLQotaW50IEJOX1g5MzFfZGVyaXZlX3ByaW1lX2V4KEJJR05VTSAqcCwgQklHTlVNICpwMSwgQklHTlVNICpwMiwKLQkJCWNvbnN0IEJJR05VTSAqWHAsIGNvbnN0IEJJR05VTSAqWHAxLCBjb25zdCBCSUdOVU0gKlhwMiwKLQkJCWNvbnN0IEJJR05VTSAqZSwgQk5fQ1RYICpjdHgsIEJOX0dFTkNCICpjYik7Ci1pbnQgQk5fWDkzMV9nZW5lcmF0ZV9wcmltZV9leChCSUdOVU0gKnAsIEJJR05VTSAqcDEsIEJJR05VTSAqcDIsCi0JCQlCSUdOVU0gKlhwMSwgQklHTlVNICpYcDIsCi0JCQljb25zdCBCSUdOVU0gKlhwLAotCQkJY29uc3QgQklHTlVNICplLCBCTl9DVFggKmN0eCwKLQkJCUJOX0dFTkNCICpjYik7Ci0KIEJOX01PTlRfQ1RYICpCTl9NT05UX0NUWF9uZXcodm9pZCApOwogdm9pZCBCTl9NT05UX0NUWF9pbml0KEJOX01PTlRfQ1RYICpjdHgpOwogaW50IEJOX21vZF9tdWxfbW9udGdvbWVyeShCSUdOVU0gKnIsY29uc3QgQklHTlVNICphLGNvbnN0IEJJR05VTSAqYiwKQEAgLTU2MCwxOSArNTU4LDIyIEBACiAjZGVmaW5lCUJOX0JMSU5ESU5HX05PX1VQREFURQkweDAwMDAwMDAxCiAjZGVmaW5lCUJOX0JMSU5ESU5HX05PX1JFQ1JFQVRFCTB4MDAwMDAwMDIKIAotQk5fQkxJTkRJTkcgKkJOX0JMSU5ESU5HX25ldyhjb25zdCBCSUdOVU0gKkEsIGNvbnN0IEJJR05VTSAqQWksIC8qIGNvbnN0ICovIEJJR05VTSAqbW9kKTsKK0JOX0JMSU5ESU5HICpCTl9CTElORElOR19uZXcoY29uc3QgQklHTlVNICpBLCBjb25zdCBCSUdOVU0gKkFpLCBCSUdOVU0gKm1vZCk7CiB2b2lkIEJOX0JMSU5ESU5HX2ZyZWUoQk5fQkxJTkRJTkcgKmIpOwogaW50IEJOX0JMSU5ESU5HX3VwZGF0ZShCTl9CTElORElORyAqYixCTl9DVFggKmN0eCk7CiBpbnQgQk5fQkxJTkRJTkdfY29udmVydChCSUdOVU0gKm4sIEJOX0JMSU5ESU5HICpiLCBCTl9DVFggKmN0eCk7CiBpbnQgQk5fQkxJTkRJTkdfaW52ZXJ0KEJJR05VTSAqbiwgQk5fQkxJTkRJTkcgKmIsIEJOX0NUWCAqY3R4KTsKIGludCBCTl9CTElORElOR19jb252ZXJ0X2V4KEJJR05VTSAqbiwgQklHTlVNICpyLCBCTl9CTElORElORyAqYiwgQk5fQ1RYICopOwogaW50IEJOX0JMSU5ESU5HX2ludmVydF9leChCSUdOVU0gKm4sIGNvbnN0IEJJR05VTSAqciwgQk5fQkxJTkRJTkcgKmIsIEJOX0NUWCAqKTsKKyNpZm5kZWYgT1BFTlNTTF9OT19ERVBSRUNBVEVECiB1bnNpZ25lZCBsb25nIEJOX0JMSU5ESU5HX2dldF90aHJlYWRfaWQoY29uc3QgQk5fQkxJTkRJTkcgKik7CiB2b2lkIEJOX0JMSU5ESU5HX3NldF90aHJlYWRfaWQoQk5fQkxJTkRJTkcgKiwgdW5zaWduZWQgbG9uZyk7CisjZW5kaWYKK0NSWVBUT19USFJFQURJRCAqQk5fQkxJTkRJTkdfdGhyZWFkX2lkKEJOX0JMSU5ESU5HICopOwogdW5zaWduZWQgbG9uZyBCTl9CTElORElOR19nZXRfZmxhZ3MoY29uc3QgQk5fQkxJTkRJTkcgKik7CiB2b2lkIEJOX0JMSU5ESU5HX3NldF9mbGFncyhCTl9CTElORElORyAqLCB1bnNpZ25lZCBsb25nKTsKIEJOX0JMSU5ESU5HICpCTl9CTElORElOR19jcmVhdGVfcGFyYW0oQk5fQkxJTkRJTkcgKmIsCi0JY29uc3QgQklHTlVNICplLCAvKiBjb25zdCAqLyBCSUdOVU0gKm0sIEJOX0NUWCAqY3R4LAorCWNvbnN0IEJJR05VTSAqZSwgQklHTlVNICptLCBCTl9DVFggKmN0eCwKIAlpbnQgKCpibl9tb2RfZXhwKShCSUdOVU0gKnIsIGNvbnN0IEJJR05VTSAqYSwgY29uc3QgQklHTlVNICpwLAogCQkJICBjb25zdCBCSUdOVU0gKm0sIEJOX0NUWCAqY3R4LCBCTl9NT05UX0NUWCAqbV9jdHgpLAogCUJOX01PTlRfQ1RYICptX2N0eCk7CkBAIC02MjUsMjQgKzYyNiwyNCBAQAogICogICAgIHRecFswXSArIHRecFsxXSArIC4uLiArIHRecFtrXQogICogd2hlcmUgbSA9IHBbMF0gPiBwWzFdID4gLi4uID4gcFtrXSA9IDAuCiAgKi8KLWludAlCTl9HRjJtX21vZF9hcnIoQklHTlVNICpyLCBjb25zdCBCSUdOVU0gKmEsIGNvbnN0IHVuc2lnbmVkIGludCBwW10pOworaW50CUJOX0dGMm1fbW9kX2FycihCSUdOVU0gKnIsIGNvbnN0IEJJR05VTSAqYSwgY29uc3QgaW50IHBbXSk7CiAJLyogciA9IGEgbW9kIHAgKi8KIGludAlCTl9HRjJtX21vZF9tdWxfYXJyKEJJR05VTSAqciwgY29uc3QgQklHTlVNICphLCBjb25zdCBCSUdOVU0gKmIsCi0JY29uc3QgdW5zaWduZWQgaW50IHBbXSwgQk5fQ1RYICpjdHgpOyAvKiByID0gKGEgKiBiKSBtb2QgcCAqLwotaW50CUJOX0dGMm1fbW9kX3Nxcl9hcnIoQklHTlVNICpyLCBjb25zdCBCSUdOVU0gKmEsIGNvbnN0IHVuc2lnbmVkIGludCBwW10sCisJY29uc3QgaW50IHBbXSwgQk5fQ1RYICpjdHgpOyAvKiByID0gKGEgKiBiKSBtb2QgcCAqLworaW50CUJOX0dGMm1fbW9kX3Nxcl9hcnIoQklHTlVNICpyLCBjb25zdCBCSUdOVU0gKmEsIGNvbnN0IGludCBwW10sCiAJQk5fQ1RYICpjdHgpOyAvKiByID0gKGEgKiBhKSBtb2QgcCAqLwotaW50CUJOX0dGMm1fbW9kX2ludl9hcnIoQklHTlVNICpyLCBjb25zdCBCSUdOVU0gKmIsIGNvbnN0IHVuc2lnbmVkIGludCBwW10sCitpbnQJQk5fR0YybV9tb2RfaW52X2FycihCSUdOVU0gKnIsIGNvbnN0IEJJR05VTSAqYiwgY29uc3QgaW50IHBbXSwKIAlCTl9DVFggKmN0eCk7IC8qIHIgPSAoMSAvIGIpIG1vZCBwICovCiBpbnQJQk5fR0YybV9tb2RfZGl2X2FycihCSUdOVU0gKnIsIGNvbnN0IEJJR05VTSAqYSwgY29uc3QgQklHTlVNICpiLAotCWNvbnN0IHVuc2lnbmVkIGludCBwW10sIEJOX0NUWCAqY3R4KTsgLyogciA9IChhIC8gYikgbW9kIHAgKi8KKwljb25zdCBpbnQgcFtdLCBCTl9DVFggKmN0eCk7IC8qIHIgPSAoYSAvIGIpIG1vZCBwICovCiBpbnQJQk5fR0YybV9tb2RfZXhwX2FycihCSUdOVU0gKnIsIGNvbnN0IEJJR05VTSAqYSwgY29uc3QgQklHTlVNICpiLAotCWNvbnN0IHVuc2lnbmVkIGludCBwW10sIEJOX0NUWCAqY3R4KTsgLyogciA9IChhIF4gYikgbW9kIHAgKi8KKwljb25zdCBpbnQgcFtdLCBCTl9DVFggKmN0eCk7IC8qIHIgPSAoYSBeIGIpIG1vZCBwICovCiBpbnQJQk5fR0YybV9tb2Rfc3FydF9hcnIoQklHTlVNICpyLCBjb25zdCBCSUdOVU0gKmEsCi0JY29uc3QgdW5zaWduZWQgaW50IHBbXSwgQk5fQ1RYICpjdHgpOyAvKiByID0gc3FydChhKSBtb2QgcCAqLworCWNvbnN0IGludCBwW10sIEJOX0NUWCAqY3R4KTsgLyogciA9IHNxcnQoYSkgbW9kIHAgKi8KIGludAlCTl9HRjJtX21vZF9zb2x2ZV9xdWFkX2FycihCSUdOVU0gKnIsIGNvbnN0IEJJR05VTSAqYSwKLQljb25zdCB1bnNpZ25lZCBpbnQgcFtdLCBCTl9DVFggKmN0eCk7IC8qIHJeMiArIHIgPSBhIG1vZCBwICovCi1pbnQJQk5fR0YybV9wb2x5MmFycihjb25zdCBCSUdOVU0gKmEsIHVuc2lnbmVkIGludCBwW10sIGludCBtYXgpOwotaW50CUJOX0dGMm1fYXJyMnBvbHkoY29uc3QgdW5zaWduZWQgaW50IHBbXSwgQklHTlVNICphKTsKKwljb25zdCBpbnQgcFtdLCBCTl9DVFggKmN0eCk7IC8qIHJeMiArIHIgPSBhIG1vZCBwICovCitpbnQJQk5fR0YybV9wb2x5MmFycihjb25zdCBCSUdOVU0gKmEsIGludCBwW10sIGludCBtYXgpOworaW50CUJOX0dGMm1fYXJyMnBvbHkoY29uc3QgaW50IHBbXSwgQklHTlVNICphKTsKIAogLyogZmFzdGVyIG1vZCBmdW5jdGlvbnMgZm9yIHRoZSAnTklTVCBwcmltZXMnIAogICogMCA8PSBhIDwgcF4yICovCkBAIC03NTEsMTAgKzc1MiwxMiBAQAogI2RlZmluZSBibl9jb3JyZWN0X3RvcChhKSBcCiAgICAgICAgIHsgXAogICAgICAgICBCTl9VTE9ORyAqZnRsOyBcCi0JaWYgKChhKS0+dG9wID4gMCkgXAorCWludCB0bXBfdG9wID0gKGEpLT50b3A7IFwKKwlpZiAodG1wX3RvcCA+IDApIFwKIAkJeyBcCi0JCWZvciAoZnRsPSAmKChhKS0+ZFsoYSktPnRvcC0xXSk7IChhKS0+dG9wID4gMDsgKGEpLT50b3AtLSkgXAotCQlpZiAoKihmdGwtLSkpIGJyZWFrOyBcCisJCWZvciAoZnRsPSAmKChhKS0+ZFt0bXBfdG9wLTFdKTsgdG1wX3RvcCA+IDA7IHRtcF90b3AtLSkgXAorCQkJaWYgKCooZnRsLS0pKSBicmVhazsgXAorCQkoYSktPnRvcCA9IHRtcF90b3A7IFwKIAkJfSBcCiAJYm5fcG9sbHV0ZShhKTsgXAogCX0KZGlmZiAtLWdpdCBhL2NyeXB0by9ibi9ibl9hc20uYyBiL2NyeXB0by9ibi9ibl9hc20uYwppbmRleCA5OWJjMmRlLi5jNDNjOTFjIDEwMDY0NAotLS0gYS9jcnlwdG8vYm4vYm5fYXNtLmMKKysrIGIvY3J5cHRvL2JuL2JuX2FzbS5jCkBAIC03NSw2ICs3NSw3IEBACiAJYXNzZXJ0KG51bSA+PSAwKTsKIAlpZiAobnVtIDw9IDApIHJldHVybihjMSk7CiAKKyNpZm5kZWYgT1BFTlNTTF9TTUFMTF9GT09UUFJJTlQKIAl3aGlsZSAobnVtJn4zKQogCQl7CiAJCW11bF9hZGQocnBbMF0sYXBbMF0sdyxjMSk7CkBAIC04MywxMSArODQsMTEgQEAKIAkJbXVsX2FkZChycFszXSxhcFszXSx3LGMxKTsKIAkJYXArPTQ7IHJwKz00OyBudW0tPTQ7CiAJCX0KLQlpZiAobnVtKQorI2VuZGlmCisJd2hpbGUgKG51bSkKIAkJewotCQltdWxfYWRkKHJwWzBdLGFwWzBdLHcsYzEpOyBpZiAoLS1udW09PTApIHJldHVybiBjMTsKLQkJbXVsX2FkZChycFsxXSxhcFsxXSx3LGMxKTsgaWYgKC0tbnVtPT0wKSByZXR1cm4gYzE7Ci0JCW11bF9hZGQocnBbMl0sYXBbMl0sdyxjMSk7IHJldHVybiBjMTsKKwkJbXVsX2FkZChycFswXSxhcFswXSx3LGMxKTsKKwkJYXArKzsgcnArKzsgbnVtLS07CiAJCX0KIAkKIAlyZXR1cm4oYzEpOwpAQCAtMTAwLDYgKzEwMSw3IEBACiAJYXNzZXJ0KG51bSA+PSAwKTsKIAlpZiAobnVtIDw9IDApIHJldHVybihjMSk7CiAKKyNpZm5kZWYgT1BFTlNTTF9TTUFMTF9GT09UUFJJTlQKIAl3aGlsZSAobnVtJn4zKQogCQl7CiAJCW11bChycFswXSxhcFswXSx3LGMxKTsKQEAgLTEwOCwxMSArMTEwLDExIEBACiAJCW11bChycFszXSxhcFszXSx3LGMxKTsKIAkJYXArPTQ7IHJwKz00OyBudW0tPTQ7CiAJCX0KLQlpZiAobnVtKQorI2VuZGlmCisJd2hpbGUgKG51bSkKIAkJewotCQltdWwocnBbMF0sYXBbMF0sdyxjMSk7IGlmICgtLW51bSA9PSAwKSByZXR1cm4gYzE7Ci0JCW11bChycFsxXSxhcFsxXSx3LGMxKTsgaWYgKC0tbnVtID09IDApIHJldHVybiBjMTsKLQkJbXVsKHJwWzJdLGFwWzJdLHcsYzEpOworCQltdWwocnBbMF0sYXBbMF0sdyxjMSk7CisJCWFwKys7IHJwKys7IG51bS0tOwogCQl9CiAJcmV0dXJuKGMxKTsKIAl9IApAQCAtMTIxLDYgKzEyMyw4IEBACiAgICAgICAgIHsKIAlhc3NlcnQobiA+PSAwKTsKIAlpZiAobiA8PSAwKSByZXR1cm47CisKKyNpZm5kZWYgT1BFTlNTTF9TTUFMTF9GT09UUFJJTlQKIAl3aGlsZSAobiZ+MykKIAkJewogCQlzcXIoclswXSxyWzFdLGFbMF0pOwpAQCAtMTI5LDExICsxMzMsMTEgQEAKIAkJc3FyKHJbNl0scls3XSxhWzNdKTsKIAkJYSs9NDsgcis9ODsgbi09NDsKIAkJfQotCWlmIChuKQorI2VuZGlmCisJd2hpbGUgKG4pCiAJCXsKLQkJc3FyKHJbMF0sclsxXSxhWzBdKTsgaWYgKC0tbiA9PSAwKSByZXR1cm47Ci0JCXNxcihyWzJdLHJbM10sYVsxXSk7IGlmICgtLW4gPT0gMCkgcmV0dXJuOwotCQlzcXIocls0XSxyWzVdLGFbMl0pOworCQlzcXIoclswXSxyWzFdLGFbMF0pOworCQlhKys7IHIrPTI7IG4tLTsKIAkJfQogCX0KIApAQCAtMTUwLDE4ICsxNTQsMjAgQEAKIAlibD1MQklUUyh3KTsKIAliaD1IQklUUyh3KTsKIAotCWZvciAoOzspCisjaWZuZGVmIE9QRU5TU0xfU01BTExfRk9PVFBSSU5UCisJd2hpbGUgKG51bSZ+MykKIAkJewogCQltdWxfYWRkKHJwWzBdLGFwWzBdLGJsLGJoLGMpOwotCQlpZiAoLS1udW0gPT0gMCkgYnJlYWs7CiAJCW11bF9hZGQocnBbMV0sYXBbMV0sYmwsYmgsYyk7Ci0JCWlmICgtLW51bSA9PSAwKSBicmVhazsKIAkJbXVsX2FkZChycFsyXSxhcFsyXSxibCxiaCxjKTsKLQkJaWYgKC0tbnVtID09IDApIGJyZWFrOwogCQltdWxfYWRkKHJwWzNdLGFwWzNdLGJsLGJoLGMpOwotCQlpZiAoLS1udW0gPT0gMCkgYnJlYWs7Ci0JCWFwKz00OwotCQlycCs9NDsKKwkJYXArPTQ7IHJwKz00OyBudW0tPTQ7CisJCX0KKyNlbmRpZgorCXdoaWxlIChudW0pCisJCXsKKwkJbXVsX2FkZChycFswXSxhcFswXSxibCxiaCxjKTsKKwkJYXArKzsgcnArKzsgbnVtLS07CiAJCX0KIAlyZXR1cm4oYyk7CiAJfSAKQEAgLTE3NywxOCArMTgzLDIwIEBACiAJYmw9TEJJVFModyk7CiAJYmg9SEJJVFModyk7CiAKLQlmb3IgKDs7KQorI2lmbmRlZiBPUEVOU1NMX1NNQUxMX0ZPT1RQUklOVAorCXdoaWxlIChudW0mfjMpCiAJCXsKIAkJbXVsKHJwWzBdLGFwWzBdLGJsLGJoLGNhcnJ5KTsKLQkJaWYgKC0tbnVtID09IDApIGJyZWFrOwogCQltdWwocnBbMV0sYXBbMV0sYmwsYmgsY2FycnkpOwotCQlpZiAoLS1udW0gPT0gMCkgYnJlYWs7CiAJCW11bChycFsyXSxhcFsyXSxibCxiaCxjYXJyeSk7Ci0JCWlmICgtLW51bSA9PSAwKSBicmVhazsKIAkJbXVsKHJwWzNdLGFwWzNdLGJsLGJoLGNhcnJ5KTsKLQkJaWYgKC0tbnVtID09IDApIGJyZWFrOwotCQlhcCs9NDsKLQkJcnArPTQ7CisJCWFwKz00OyBycCs9NDsgbnVtLT00OworCQl9CisjZW5kaWYKKwl3aGlsZSAobnVtKQorCQl7CisJCW11bChycFswXSxhcFswXSxibCxiaCxjYXJyeSk7CisJCWFwKys7IHJwKys7IG51bS0tOwogCQl9CiAJcmV0dXJuKGNhcnJ5KTsKIAl9IApAQCAtMTk3LDIyICsyMDUsMjEgQEAKICAgICAgICAgewogCWFzc2VydChuID49IDApOwogCWlmIChuIDw9IDApIHJldHVybjsKLQlmb3IgKDs7KQorCisjaWZuZGVmIE9QRU5TU0xfU01BTExfRk9PVFBSSU5UCisJd2hpbGUgKG4mfjMpCiAJCXsKIAkJc3FyNjQoclswXSxyWzFdLGFbMF0pOwotCQlpZiAoLS1uID09IDApIGJyZWFrOwotCiAJCXNxcjY0KHJbMl0sclszXSxhWzFdKTsKLQkJaWYgKC0tbiA9PSAwKSBicmVhazsKLQogCQlzcXI2NChyWzRdLHJbNV0sYVsyXSk7Ci0JCWlmICgtLW4gPT0gMCkgYnJlYWs7Ci0KIAkJc3FyNjQocls2XSxyWzddLGFbM10pOwotCQlpZiAoLS1uID09IDApIGJyZWFrOwotCi0JCWErPTQ7Ci0JCXIrPTg7CisJCWErPTQ7IHIrPTg7IG4tPTQ7CisJCX0KKyNlbmRpZgorCXdoaWxlIChuKQorCQl7CisJCXNxcjY0KHJbMF0sclsxXSxhWzBdKTsKKwkJYSsrOyByKz0yOyBuLS07CiAJCX0KIAl9CiAKQEAgLTMwMywzMSArMzEwLDMwIEBACiAJYXNzZXJ0KG4gPj0gMCk7CiAJaWYgKG4gPD0gMCkgcmV0dXJuKChCTl9VTE9ORykwKTsKIAotCWZvciAoOzspCisjaWZuZGVmIE9QRU5TU0xfU01BTExfRk9PVFBSSU5UCisJd2hpbGUgKG4mfjMpCiAJCXsKIAkJbGwrPShCTl9VTExPTkcpYVswXStiWzBdOwogCQlyWzBdPShCTl9VTE9ORylsbCZCTl9NQVNLMjsKIAkJbGw+Pj1CTl9CSVRTMjsKLQkJaWYgKC0tbiA8PSAwKSBicmVhazsKLQogCQlsbCs9KEJOX1VMTE9ORylhWzFdK2JbMV07CiAJCXJbMV09KEJOX1VMT05HKWxsJkJOX01BU0syOwogCQlsbD4+PUJOX0JJVFMyOwotCQlpZiAoLS1uIDw9IDApIGJyZWFrOwotCiAJCWxsKz0oQk5fVUxMT05HKWFbMl0rYlsyXTsKIAkJclsyXT0oQk5fVUxPTkcpbGwmQk5fTUFTSzI7CiAJCWxsPj49Qk5fQklUUzI7Ci0JCWlmICgtLW4gPD0gMCkgYnJlYWs7Ci0KIAkJbGwrPShCTl9VTExPTkcpYVszXStiWzNdOwogCQlyWzNdPShCTl9VTE9ORylsbCZCTl9NQVNLMjsKIAkJbGw+Pj1CTl9CSVRTMjsKLQkJaWYgKC0tbiA8PSAwKSBicmVhazsKLQotCQlhKz00OwotCQliKz00OwotCQlyKz00OworCQlhKz00OyBiKz00OyByKz00OyBuLT00OworCQl9CisjZW5kaWYKKwl3aGlsZSAobikKKwkJeworCQlsbCs9KEJOX1VMTE9ORylhWzBdK2JbMF07CisJCXJbMF09KEJOX1VMT05HKWxsJkJOX01BU0syOworCQlsbD4+PUJOX0JJVFMyOworCQlhKys7IGIrKzsgcisrOyBuLS07CiAJCX0KIAlyZXR1cm4oKEJOX1VMT05HKWxsKTsKIAl9CkBAIC0zNDAsNyArMzQ2LDggQEAKIAlpZiAobiA8PSAwKSByZXR1cm4oKEJOX1VMT05HKTApOwogCiAJYz0wOwotCWZvciAoOzspCisjaWZuZGVmIE9QRU5TU0xfU01BTExfRk9PVFBSSU5UCisJd2hpbGUgKG4mfjMpCiAJCXsKIAkJdD1hWzBdOwogCQl0PSh0K2MpJkJOX01BU0syOwpAQCAtMzQ4LDM1ICszNTUsMzYgQEAKIAkJbD0odCtiWzBdKSZCTl9NQVNLMjsKIAkJYys9KGwgPCB0KTsKIAkJclswXT1sOwotCQlpZiAoLS1uIDw9IDApIGJyZWFrOwotCiAJCXQ9YVsxXTsKIAkJdD0odCtjKSZCTl9NQVNLMjsKIAkJYz0odCA8IGMpOwogCQlsPSh0K2JbMV0pJkJOX01BU0syOwogCQljKz0obCA8IHQpOwogCQlyWzFdPWw7Ci0JCWlmICgtLW4gPD0gMCkgYnJlYWs7Ci0KIAkJdD1hWzJdOwogCQl0PSh0K2MpJkJOX01BU0syOwogCQljPSh0IDwgYyk7CiAJCWw9KHQrYlsyXSkmQk5fTUFTSzI7CiAJCWMrPShsIDwgdCk7CiAJCXJbMl09bDsKLQkJaWYgKC0tbiA8PSAwKSBicmVhazsKLQogCQl0PWFbM107CiAJCXQ9KHQrYykmQk5fTUFTSzI7CiAJCWM9KHQgPCBjKTsKIAkJbD0odCtiWzNdKSZCTl9NQVNLMjsKIAkJYys9KGwgPCB0KTsKIAkJclszXT1sOwotCQlpZiAoLS1uIDw9IDApIGJyZWFrOwotCi0JCWErPTQ7Ci0JCWIrPTQ7Ci0JCXIrPTQ7CisJCWErPTQ7IGIrPTQ7IHIrPTQ7IG4tPTQ7CisJCX0KKyNlbmRpZgorCXdoaWxlKG4pCisJCXsKKwkJdD1hWzBdOworCQl0PSh0K2MpJkJOX01BU0syOworCQljPSh0IDwgYyk7CisJCWw9KHQrYlswXSkmQk5fTUFTSzI7CisJCWMrPShsIDwgdCk7CisJCXJbMF09bDsKKwkJYSsrOyBiKys7IHIrKzsgbi0tOwogCQl9CiAJcmV0dXJuKChCTl9VTE9ORyljKTsKIAl9CkBAIC0zOTAsMzYgKzM5OCwzNSBAQAogCWFzc2VydChuID49IDApOwogCWlmIChuIDw9IDApIHJldHVybigoQk5fVUxPTkcpMCk7CiAKLQlmb3IgKDs7KQorI2lmbmRlZiBPUEVOU1NMX1NNQUxMX0ZPT1RQUklOVAorCXdoaWxlIChuJn4zKQogCQl7CiAJCXQxPWFbMF07IHQyPWJbMF07CiAJCXJbMF09KHQxLXQyLWMpJkJOX01BU0syOwogCQlpZiAodDEgIT0gdDIpIGM9KHQxIDwgdDIpOwotCQlpZiAoLS1uIDw9IDApIGJyZWFrOwotCiAJCXQxPWFbMV07IHQyPWJbMV07CiAJCXJbMV09KHQxLXQyLWMpJkJOX01BU0syOwogCQlpZiAodDEgIT0gdDIpIGM9KHQxIDwgdDIpOwotCQlpZiAoLS1uIDw9IDApIGJyZWFrOwotCiAJCXQxPWFbMl07IHQyPWJbMl07CiAJCXJbMl09KHQxLXQyLWMpJkJOX01BU0syOwogCQlpZiAodDEgIT0gdDIpIGM9KHQxIDwgdDIpOwotCQlpZiAoLS1uIDw9IDApIGJyZWFrOwotCiAJCXQxPWFbM107IHQyPWJbM107CiAJCXJbM109KHQxLXQyLWMpJkJOX01BU0syOwogCQlpZiAodDEgIT0gdDIpIGM9KHQxIDwgdDIpOwotCQlpZiAoLS1uIDw9IDApIGJyZWFrOwotCi0JCWErPTQ7Ci0JCWIrPTQ7Ci0JCXIrPTQ7CisJCWErPTQ7IGIrPTQ7IHIrPTQ7IG4tPTQ7CisJCX0KKyNlbmRpZgorCXdoaWxlIChuKQorCQl7CisJCXQxPWFbMF07IHQyPWJbMF07CisJCXJbMF09KHQxLXQyLWMpJkJOX01BU0syOworCQlpZiAodDEgIT0gdDIpIGM9KHQxIDwgdDIpOworCQlhKys7IGIrKzsgcisrOyBuLS07CiAJCX0KIAlyZXR1cm4oYyk7CiAJfQogCi0jaWZkZWYgQk5fTVVMX0NPTUJBCisjaWYgZGVmaW5lZChCTl9NVUxfQ09NQkEpICYmICFkZWZpbmVkKE9QRU5TU0xfU01BTExfRk9PVFBSSU5UKQogCiAjdW5kZWYgYm5fbXVsX2NvbWJhOAogI3VuZGVmIGJuX211bF9jb21iYTQKQEAgLTgyMCwxOCArODI3LDEzNCBAQAogCXJbNl09YzE7CiAJcls3XT1jMjsKIAl9CisKKyNpZmRlZiBPUEVOU1NMX05PX0FTTQorI2lmZGVmIE9QRU5TU0xfQk5fQVNNX01PTlQKKyNpbmNsdWRlIDxhbGxvY2EuaD4KKy8qCisgKiBUaGlzIGlzIGVzc2VudGlhbGx5IHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggbWF5IG9yIG1heSBub3QKKyAqIHJlc3VsdCBpbiBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudC4gRS5nLiBvbiBJQS0zMiB0aGlzIHJvdXRpbmUgd2FzCisgKiBvYnNlcnZlZCB0byBnaXZlIDQwJSBmYXN0ZXIgcnNhMTAyNCBwcml2YXRlIGtleSBvcGVyYXRpb25zIGFuZCAxMCUKKyAqIGZhc3RlciByc2E0MDk2IG9uZXMsIHdoaWxlIG9uIEFNRDY0IGl0IGltcHJvdmVzIHJzYTEwMjQgc2lnbiBvbmx5CisgKiBieSAxMCUgYW5kICp3b3JzZW5zKiByc2E0MDk2IHNpZ24gYnkgMTUlLiBPbmNlIGFnYWluLCBpdCdzIGEKKyAqIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiwgb25lIHRvIGJlIHVzZWQgYXMgc3RhcnRpbmcgcG9pbnQgZm9yCisgKiBwbGF0Zm9ybS1zcGVjaWZpYyBhc3NlbWJsZXIuIE1lbnRpb25lZCBudW1iZXJzIGFwcGx5IHRvIGNvbXBpbGVyCisgKiBnZW5lcmF0ZWQgY29kZSBjb21waWxlZCB3aXRoIGFuZCB3aXRob3V0IC1ET1BFTlNTTF9CTl9BU01fTU9OVCBhbmQKKyAqIGNhbiB2YXJ5IG5vdCBvbmx5IGZyb20gcGxhdGZvcm0gdG8gcGxhdGZvcm0sIGJ1dCBldmVuIGZvciBjb21waWxlcgorICogdmVyc2lvbnMuIEFzc2VtYmxlciB2cy4gYXNzZW1ibGVyIGltcHJvdmVtZW50IGNvZWZmaWNpZW50cyBjYW4KKyAqIFthbmQgYXJlIGtub3duIHRvXSBkaWZmZXIgYW5kIGFyZSB0byBiZSBkb2N1bWVudGVkIGVsc2V3aGVyZS4KKyAqLworaW50IGJuX211bF9tb250KEJOX1VMT05HICpycCwgY29uc3QgQk5fVUxPTkcgKmFwLCBjb25zdCBCTl9VTE9ORyAqYnAsIGNvbnN0IEJOX1VMT05HICpucCxjb25zdCBCTl9VTE9ORyAqbjBwLCBpbnQgbnVtKQorCXsKKwlCTl9VTE9ORyBjMCxjMSxtbCwqdHAsbjA7CisjaWZkZWYgbXVsNjQKKwlCTl9VTE9ORyBtaDsKKyNlbmRpZgorCXZvbGF0aWxlIEJOX1VMT05HICp2cDsKKwlpbnQgaT0wLGo7CisKKyNpZiAwCS8qIHRlbXBsYXRlIGZvciBwbGF0Zm9ybS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiAqLworCWlmIChhcD09YnApCXJldHVybiBibl9zcXJfbW9udChycCxhcCxucCxuMHAsbnVtKTsKKyNlbmRpZgorCXZwID0gdHAgPSBhbGxvY2EoKG51bSsyKSpzaXplb2YoQk5fVUxPTkcpKTsKKworCW4wID0gKm4wcDsKKworCWMwID0gMDsKKwltbCA9IGJwWzBdOworI2lmZGVmIG11bDY0CisJbWggPSBIQklUUyhtbCk7CisJbWwgPSBMQklUUyhtbCk7CisJZm9yIChqPTA7ajxudW07KytqKQorCQltdWwodHBbal0sYXBbal0sbWwsbWgsYzApOworI2Vsc2UKKwlmb3IgKGo9MDtqPG51bTsrK2opCisJCW11bCh0cFtqXSxhcFtqXSxtbCxjMCk7CisjZW5kaWYKKworCXRwW251bV0gICA9IGMwOworCXRwW251bSsxXSA9IDA7CisJZ290byBlbnRlcjsKKworCWZvcihpPTA7aTxudW07aSsrKQorCQl7CisJCWMwID0gMDsKKwkJbWwgPSBicFtpXTsKKyNpZmRlZiBtdWw2NAorCQltaCA9IEhCSVRTKG1sKTsKKwkJbWwgPSBMQklUUyhtbCk7CisJCWZvciAoaj0wO2o8bnVtOysraikKKwkJCW11bF9hZGQodHBbal0sYXBbal0sbWwsbWgsYzApOworI2Vsc2UKKwkJZm9yIChqPTA7ajxudW07KytqKQorCQkJbXVsX2FkZCh0cFtqXSxhcFtqXSxtbCxjMCk7CisjZW5kaWYKKwkJYzEgPSAodHBbbnVtXSArIGMwKSZCTl9NQVNLMjsKKwkJdHBbbnVtXSAgID0gYzE7CisJCXRwW251bSsxXSA9IChjMTxjMD8xOjApOworCWVudGVyOgorCQljMSAgPSB0cFswXTsKKwkJbWwgPSAoYzEqbjApJkJOX01BU0syOworCQljMCA9IDA7CisjaWZkZWYgbXVsNjQKKwkJbWggPSBIQklUUyhtbCk7CisJCW1sID0gTEJJVFMobWwpOworCQltdWxfYWRkKGMxLG5wWzBdLG1sLG1oLGMwKTsKKyNlbHNlCisJCW11bF9hZGQoYzEsbWwsbnBbMF0sYzApOworI2VuZGlmCisJCWZvcihqPTE7ajxudW07aisrKQorCQkJeworCQkJYzEgPSB0cFtqXTsKKyNpZmRlZiBtdWw2NAorCQkJbXVsX2FkZChjMSxucFtqXSxtbCxtaCxjMCk7CisjZWxzZQorCQkJbXVsX2FkZChjMSxtbCxucFtqXSxjMCk7CisjZW5kaWYKKwkJCXRwW2otMV0gPSBjMSZCTl9NQVNLMjsKKwkJCX0KKwkJYzEgICAgICAgID0gKHRwW251bV0gKyBjMCkmQk5fTUFTSzI7CisJCXRwW251bS0xXSA9IGMxOworCQl0cFtudW1dICAgPSB0cFtudW0rMV0gKyAoYzE8YzA/MTowKTsKKwkJfQorCisJaWYgKHRwW251bV0hPTAgfHwgdHBbbnVtLTFdPj1ucFtudW0tMV0pCisJCXsKKwkJYzAgPSBibl9zdWJfd29yZHMocnAsdHAsbnAsbnVtKTsKKwkJaWYgKHRwW251bV0hPTAgfHwgYzA9PTApCisJCQl7CisJCQlmb3IoaT0wO2k8bnVtKzI7aSsrKQl2cFtpXSA9IDA7CisJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfQorCWZvcihpPTA7aTxudW07aSsrKQlycFtpXSA9IHRwW2ldLAl2cFtpXSA9IDA7CisJdnBbbnVtXSAgID0gMDsKKwl2cFtudW0rMV0gPSAwOworCXJldHVybiAxOworCX0KKyNlbHNlCisvKgorICogUmV0dXJuIHZhbHVlIG9mIDAgaW5kaWNhdGVzIHRoYXQgbXVsdGlwbGljYXRpb24vY29udm9sdXRpb24gd2FzIG5vdAorICogcGVyZm9ybWVkIHRvIHNpZ25hbCB0aGUgY2FsbGVyIHRvIGZhbGwgZG93biB0byBhbHRlcm5hdGl2ZS9vcmlnaW5hbAorICogY29kZS1wYXRoLgorICovCitpbnQgYm5fbXVsX21vbnQoQk5fVUxPTkcgKnJwLCBjb25zdCBCTl9VTE9ORyAqYXAsIGNvbnN0IEJOX1VMT05HICpicCwgY29uc3QgQk5fVUxPTkcgKm5wLGNvbnN0IEJOX1VMT05HICpuMCwgaW50IG51bSkKK3sJcmV0dXJuIDA7CX0KKyNlbmRpZiAvKiBPUEVOU1NMX0JOX0FTTV9NT05UICovCisjZW5kaWYKKwogI2Vsc2UgLyogIUJOX01VTF9DT01CQSAqLwogCiAvKiBobW0uLi4gaXMgaXQgZmFzdGVyIGp1c3QgdG8gZG8gYSBtdWx0aXBseT8gKi8KICN1bmRlZiBibl9zcXJfY29tYmE0Ci12b2lkIGJuX3Nxcl9jb21iYTQoQk5fVUxPTkcgKnIsIEJOX1VMT05HICphKQordm9pZCBibl9zcXJfY29tYmE0KEJOX1VMT05HICpyLCBjb25zdCBCTl9VTE9ORyAqYSkKIAl7CiAJQk5fVUxPTkcgdFs4XTsKIAlibl9zcXJfbm9ybWFsKHIsYSw0LHQpOwogCX0KIAogI3VuZGVmIGJuX3Nxcl9jb21iYTgKLXZvaWQgYm5fc3FyX2NvbWJhOChCTl9VTE9ORyAqciwgQk5fVUxPTkcgKmEpCit2b2lkIGJuX3Nxcl9jb21iYTgoQk5fVUxPTkcgKnIsIGNvbnN0IEJOX1VMT05HICphKQogCXsKIAlCTl9VTE9ORyB0WzE2XTsKIAlibl9zcXJfbm9ybWFsKHIsYSw4LHQpOwpAQCAtODU3LDQgKzk4MCw1MSBAQAogCXJbMTVdPWJuX211bF9hZGRfd29yZHMoJihyWzddKSxhLDgsYls3XSk7CiAJfQogCisjaWZkZWYgT1BFTlNTTF9OT19BU00KKyNpZmRlZiBPUEVOU1NMX0JOX0FTTV9NT05UCisjaW5jbHVkZSA8YWxsb2NhLmg+CitpbnQgYm5fbXVsX21vbnQoQk5fVUxPTkcgKnJwLCBjb25zdCBCTl9VTE9ORyAqYXAsIGNvbnN0IEJOX1VMT05HICpicCwgY29uc3QgQk5fVUxPTkcgKm5wLGNvbnN0IEJOX1VMT05HICpuMHAsIGludCBudW0pCisJeworCUJOX1VMT05HIGMwLGMxLCp0cCxuMD0qbjBwOworCXZvbGF0aWxlIEJOX1VMT05HICp2cDsKKwlpbnQgaT0wLGo7CisKKwl2cCA9IHRwID0gYWxsb2NhKChudW0rMikqc2l6ZW9mKEJOX1VMT05HKSk7CisKKwlmb3IoaT0wO2k8PW51bTtpKyspCXRwW2ldPTA7CisKKwlmb3IoaT0wO2k8bnVtO2krKykKKwkJeworCQljMCAgICAgICAgID0gYm5fbXVsX2FkZF93b3Jkcyh0cCxhcCxudW0sYnBbaV0pOworCQljMSAgICAgICAgID0gKHRwW251bV0gKyBjMCkmQk5fTUFTSzI7CisJCXRwW251bV0gICAgPSBjMTsKKwkJdHBbbnVtKzFdICA9IChjMTxjMD8xOjApOworCisJCWMwICAgICAgICAgPSBibl9tdWxfYWRkX3dvcmRzKHRwLG5wLG51bSx0cFswXSpuMCk7CisJCWMxICAgICAgICAgPSAodHBbbnVtXSArIGMwKSZCTl9NQVNLMjsKKwkJdHBbbnVtXSAgICA9IGMxOworCQl0cFtudW0rMV0gKz0gKGMxPGMwPzE6MCk7CisJCWZvcihqPTA7ajw9bnVtO2orKykJdHBbal09dHBbaisxXTsKKwkJfQorCisJaWYgKHRwW251bV0hPTAgfHwgdHBbbnVtLTFdPj1ucFtudW0tMV0pCisJCXsKKwkJYzAgPSBibl9zdWJfd29yZHMocnAsdHAsbnAsbnVtKTsKKwkJaWYgKHRwW251bV0hPTAgfHwgYzA9PTApCisJCQl7CisJCQlmb3IoaT0wO2k8bnVtKzI7aSsrKQl2cFtpXSA9IDA7CisJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfQorCWZvcihpPTA7aTxudW07aSsrKQlycFtpXSA9IHRwW2ldLAl2cFtpXSA9IDA7CisJdnBbbnVtXSAgID0gMDsKKwl2cFtudW0rMV0gPSAwOworCXJldHVybiAxOworCX0KKyNlbHNlCitpbnQgYm5fbXVsX21vbnQoQk5fVUxPTkcgKnJwLCBjb25zdCBCTl9VTE9ORyAqYXAsIGNvbnN0IEJOX1VMT05HICpicCwgY29uc3QgQk5fVUxPTkcgKm5wLGNvbnN0IEJOX1VMT05HICpuMCwgaW50IG51bSkKK3sJcmV0dXJuIDA7CX0KKyNlbmRpZiAvKiBPUEVOU1NMX0JOX0FTTV9NT05UICovCisjZW5kaWYKKwogI2VuZGlmIC8qICFCTl9NVUxfQ09NQkEgKi8KZGlmZiAtLWdpdCBhL2NyeXB0by9ibi9ibl9ibGluZC5jIGIvY3J5cHRvL2JuL2JuX2JsaW5kLmMKaW5kZXggYzExZmI0Yy4uZTA2MDU5MiAxMDA2NDQKLS0tIGEvY3J5cHRvL2JuL2JuX2JsaW5kLmMKKysrIGIvY3J5cHRvL2JuL2JuX2JsaW5kLmMKQEAgLTEsNiArMSw2IEBACiAvKiBjcnlwdG8vYm4vYm5fYmxpbmQuYyAqLwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA1IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyMSw4ICsxMjEsMTEgQEAKIAlCSUdOVU0gKkFpOwogCUJJR05VTSAqZTsKIAlCSUdOVU0gKm1vZDsgLyoganVzdCBhIHJlZmVyZW5jZSAqLworI2lmbmRlZiBPUEVOU1NMX05PX0RFUFJFQ0FURUQKIAl1bnNpZ25lZCBsb25nIHRocmVhZF9pZDsgLyogYWRkZWQgaW4gT3BlblNTTCAwLjkuNmogYW5kIDAuOS43YjsKIAkJCQkgICogdXNlZCBvbmx5IGJ5IGNyeXB0by9yc2EvcnNhX2VheS5jLCByc2FfbGliLmMgKi8KKyNlbmRpZgorCUNSWVBUT19USFJFQURJRCB0aWQ7CiAJdW5zaWduZWQgaW50ICBjb3VudGVyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJQk5fTU9OVF9DVFggKm1fY3R4OwpAQCAtMTMxLDcgKzEzNCw3IEBACiAJCQkgIEJOX01PTlRfQ1RYICptX2N0eCk7CiAJfTsKIAotQk5fQkxJTkRJTkcgKkJOX0JMSU5ESU5HX25ldyhjb25zdCBCSUdOVU0gKkEsIGNvbnN0IEJJR05VTSAqQWksIC8qIGNvbnN0ICovIEJJR05VTSAqbW9kKQorQk5fQkxJTkRJTkcgKkJOX0JMSU5ESU5HX25ldyhjb25zdCBCSUdOVU0gKkEsIGNvbnN0IEJJR05VTSAqQWksIEJJR05VTSAqbW9kKQogCXsKIAlCTl9CTElORElORyAqcmV0PU5VTEw7CiAKQEAgLTE1OCw2ICsxNjEsNyBAQAogCQlCTl9zZXRfZmxhZ3MocmV0LT5tb2QsIEJOX0ZMR19DT05TVFRJTUUpOwogCiAJcmV0LT5jb3VudGVyID0gQk5fQkxJTkRJTkdfQ09VTlRFUjsKKwlDUllQVE9fVEhSRUFESURfY3VycmVudCgmcmV0LT50aWQpOwogCXJldHVybihyZXQpOwogZXJyOgogCWlmIChyZXQgIT0gTlVMTCkgQk5fQkxJTkRJTkdfZnJlZShyZXQpOwpAQCAtMjYzLDYgKzI2Nyw3IEBACiAJcmV0dXJuKHJldCk7CiAJfQogCisjaWZuZGVmIE9QRU5TU0xfTk9fREVQUkVDQVRFRAogdW5zaWduZWQgbG9uZyBCTl9CTElORElOR19nZXRfdGhyZWFkX2lkKGNvbnN0IEJOX0JMSU5ESU5HICpiKQogCXsKIAlyZXR1cm4gYi0+dGhyZWFkX2lkOwpAQCAtMjcyLDYgKzI3NywxMiBAQAogCXsKIAliLT50aHJlYWRfaWQgPSBuOwogCX0KKyNlbmRpZgorCitDUllQVE9fVEhSRUFESUQgKkJOX0JMSU5ESU5HX3RocmVhZF9pZChCTl9CTElORElORyAqYikKKwl7CisJcmV0dXJuICZiLT50aWQ7CisJfQogCiB1bnNpZ25lZCBsb25nIEJOX0JMSU5ESU5HX2dldF9mbGFncyhjb25zdCBCTl9CTElORElORyAqYikKIAl7CkBAIC0yODQsNyArMjk1LDcgQEAKIAl9CiAKIEJOX0JMSU5ESU5HICpCTl9CTElORElOR19jcmVhdGVfcGFyYW0oQk5fQkxJTkRJTkcgKmIsCi0JY29uc3QgQklHTlVNICplLCAvKiBjb25zdCAqLyBCSUdOVU0gKm0sIEJOX0NUWCAqY3R4LAorCWNvbnN0IEJJR05VTSAqZSwgQklHTlVNICptLCBCTl9DVFggKmN0eCwKIAlpbnQgKCpibl9tb2RfZXhwKShCSUdOVU0gKnIsIGNvbnN0IEJJR05VTSAqYSwgY29uc3QgQklHTlVNICpwLAogCQkJICBjb25zdCBCSUdOVU0gKm0sIEJOX0NUWCAqY3R4LCBCTl9NT05UX0NUWCAqbV9jdHgpLAogCUJOX01PTlRfQ1RYICptX2N0eCkKZGlmZiAtLWdpdCBhL2NyeXB0by9ibi9ibl9jdHguYyBiL2NyeXB0by9ibi9ibl9jdHguYwppbmRleCBiMzQ1MmYxLi4zZjIyNTZmIDEwMDY0NAotLS0gYS9jcnlwdG8vYm4vYm5fY3R4LmMKKysrIGIvY3J5cHRvL2JuL2JuX2N0eC5jCkBAIC0xNjEsNyArMTYxLDcgQEAKIAlmcHJpbnRmKHN0ZGVyciwiKCUwOHgpOiAiLCAodW5zaWduZWQgaW50KWN0eCk7CiAJd2hpbGUoYm5pZHggPCBjdHgtPnVzZWQpCiAJCXsKLQkJZnByaW50ZihzdGRlcnIsIiUwMnggIiwgaXRlbS0+dmFsc1tibmlkeCsrICUgQk5fQ1RYX1BPT0xfU0laRV0uZG1heCk7CisJCWZwcmludGYoc3RkZXJyLCIlMDN4ICIsIGl0ZW0tPnZhbHNbYm5pZHgrKyAlIEJOX0NUWF9QT09MX1NJWkVdLmRtYXgpOwogCQlpZighKGJuaWR4ICUgQk5fQ1RYX1BPT0xfU0laRSkpCiAJCQlpdGVtID0gaXRlbS0+bmV4dDsKIAkJfQpAQCAtMTcxLDggKzE3MSw4IEBACiAJd2hpbGUoZnBpZHggPCBzdGFjay0+ZGVwdGgpCiAJCXsKIAkJd2hpbGUoYm5pZHgrKyA8IHN0YWNrLT5pbmRleGVzW2ZwaWR4XSkKLQkJCWZwcmludGYoc3RkZXJyLCIgICAiKTsKLQkJZnByaW50ZihzdGRlcnIsIl5eICIpOworCQkJZnByaW50ZihzdGRlcnIsIiAgICAiKTsKKwkJZnByaW50ZihzdGRlcnIsIl5eXiAiKTsKIAkJYm5pZHgrKzsKIAkJZnBpZHgrKzsKIAkJfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2JuL2JuX2Rpdi5jIGIvY3J5cHRvL2JuL2JuX2Rpdi5jCmluZGV4IDdjMzU1NDUuLjgwMmE0M2QgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ibi9ibl9kaXYuYworKysgYi9jcnlwdG8vYm4vYm5fZGl2LmMKQEAgLTMzNyw3ICszMzcsNyBAQAogCQkJCXQyIC09IGQxOwogCQkJCX0KICNlbHNlIC8qICFCTl9MTE9ORyAqLwotCQkJQk5fVUxPTkcgdDJsLHQyaCxxbCxxaDsKKwkJCUJOX1VMT05HIHQybCx0Mmg7CiAKIAkJCXE9Ym5fZGl2X3dvcmRzKG4wLG4xLGQwKTsKICNpZmRlZiBCTl9ERUJVR19MRVZJVFRFCkBAIC0zNTUsOSArMzU1LDEyIEBACiAJCQl0MmwgPSBkMSAqIHE7CiAJCQl0MmggPSBCTl9VTVVMVF9ISUdIKGQxLHEpOwogI2Vsc2UKKwkJCXsKKwkJCUJOX1VMT05HIHFsLCBxaDsKIAkJCXQybD1MQklUUyhkMSk7IHQyaD1IQklUUyhkMSk7CiAJCQlxbCA9TEJJVFMocSk7ICBxaCA9SEJJVFMocSk7CiAJCQltdWw2NCh0MmwsdDJoLHFsLHFoKTsgLyogdDI9KEJOX1VMTE9ORylkMSpxOyAqLworCQkJfQogI2VuZGlmCiAKIAkJCWZvciAoOzspCkBAIC01NjEsNyArNTY0LDcgQEAKIAkJCQl0MiAtPSBkMTsKIAkJCQl9CiAjZWxzZSAvKiAhQk5fTExPTkcgKi8KLQkJCUJOX1VMT05HIHQybCx0MmgscWwscWg7CisJCQlCTl9VTE9ORyB0MmwsdDJoOwogCiAJCQlxPWJuX2Rpdl93b3JkcyhuMCxuMSxkMCk7CiAjaWZkZWYgQk5fREVCVUdfTEVWSVRURQpAQCAtNTc5LDkgKzU4MiwxMiBAQAogCQkJdDJsID0gZDEgKiBxOwogCQkJdDJoID0gQk5fVU1VTFRfSElHSChkMSxxKTsKICNlbHNlCisJCQl7CisJCQlCTl9VTE9ORyBxbCwgcWg7CiAJCQl0Mmw9TEJJVFMoZDEpOyB0Mmg9SEJJVFMoZDEpOwogCQkJcWwgPUxCSVRTKHEpOyAgcWggPUhCSVRTKHEpOwogCQkJbXVsNjQodDJsLHQyaCxxbCxxaCk7IC8qIHQyPShCTl9VTExPTkcpZDEqcTsgKi8KKwkJCX0KICNlbmRpZgogCiAJCQlmb3IgKDs7KQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2JuL2JuX2dmMm0uYyBiL2NyeXB0by9ibi9ibl9nZjJtLmMKaW5kZXggYWU2NDJjYy4uNTI3YjBmYSAxMDA2NDQKLS0tIGEvY3J5cHRvL2JuL2JuX2dmMm0uYworKysgYi9jcnlwdG8vYm4vYm5fZ2YybS5jCkBAIC0xMjEsNzQgKzEyMSwxMiBAQAogICAgIFNRUl90YlsodykgPj4gMTIgJiAweEZdIDw8IDI0IHwgU1FSX3RiWyh3KSA+PiAgOCAmIDB4Rl0gPDwgMTYgfCBcCiAgICAgU1FSX3RiWyh3KSA+PiAgNCAmIDB4Rl0gPDwgIDggfCBTUVJfdGJbKHcpICAgICAgICYgMHhGXQogI2VuZGlmCi0jaWZkZWYgU0lYVEVFTl9CSVQKLSNkZWZpbmUgU1FSMSh3KSBcCi0gICAgU1FSX3RiWyh3KSA+PiAxMiAmIDB4Rl0gPDwgIDggfCBTUVJfdGJbKHcpID4+ICA4ICYgMHhGXQotI2RlZmluZSBTUVIwKHcpIFwKLSAgICBTUVJfdGJbKHcpID4+ICA0ICYgMHhGXSA8PCAgOCB8IFNRUl90YlsodykgICAgICAgJiAweEZdCi0jZW5kaWYKLSNpZmRlZiBFSUdIVF9CSVQKLSNkZWZpbmUgU1FSMSh3KSBcCi0gICAgU1FSX3RiWyh3KSA+PiAgNCAmIDB4Rl0KLSNkZWZpbmUgU1FSMCh3KSBcCi0gICAgU1FSX3RiWyh3KSAgICAgICAmIDE1XQotI2VuZGlmCiAKIC8qIFByb2R1Y3Qgb2YgdHdvIHBvbHlub21pYWxzIGEsIGIgZWFjaCB3aXRoIGRlZ3JlZSA8IEJOX0JJVFMyIC0gMSwKICAqIHJlc3VsdCBpcyBhIHBvbHlub21pYWwgciB3aXRoIGRlZ3JlZSA8IDIgKiBCTl9CSVRTIC0gMQogICogVGhlIGNhbGxlciBNVVNUIGVuc3VyZSB0aGF0IHRoZSB2YXJpYWJsZXMgaGF2ZSB0aGUgcmlnaHQgYW1vdW50CiAgKiBvZiBzcGFjZSBhbGxvY2F0ZWQuCiAgKi8KLSNpZmRlZiBFSUdIVF9CSVQKLXN0YXRpYyB2b2lkIGJuX0dGMm1fbXVsXzF4MShCTl9VTE9ORyAqcjEsIEJOX1VMT05HICpyMCwgY29uc3QgQk5fVUxPTkcgYSwgY29uc3QgQk5fVUxPTkcgYikKLQl7Ci0JcmVnaXN0ZXIgQk5fVUxPTkcgaCwgbCwgczsKLQlCTl9VTE9ORyB0YWJbNF0sIHRvcDFiID0gYSA+PiA3OwotCXJlZ2lzdGVyIEJOX1VMT05HIGExLCBhMjsKLQotCWExID0gYSAmICgweDdGKTsgYTIgPSBhMSA8PCAxOwotCi0JdGFiWzBdID0gMDsgdGFiWzFdID0gYTE7IHRhYlsyXSA9IGEyOyB0YWJbM10gPSBhMV5hMjsKLQotCXMgPSB0YWJbYiAgICAgICYgMHgzXTsgbCAgPSBzOwotCXMgPSB0YWJbYiA+PiAyICYgMHgzXTsgbCBePSBzIDw8IDI7IGggID0gcyA+PiA2OwotCXMgPSB0YWJbYiA+PiA0ICYgMHgzXTsgbCBePSBzIDw8IDQ7IGggXj0gcyA+PiA0OwotCXMgPSB0YWJbYiA+PiA2ICAgICAgXTsgbCBePSBzIDw8IDY7IGggXj0gcyA+PiAyOwotCQotCS8qIGNvbXBlbnNhdGUgZm9yIHRoZSB0b3AgYml0IG9mIGEgKi8KLQotCWlmICh0b3AxYiAmIDAxKSB7IGwgXj0gYiA8PCA3OyBoIF49IGIgPj4gMTsgfSAKLQotCSpyMSA9IGg7ICpyMCA9IGw7Ci0JfSAKLSNlbmRpZgotI2lmZGVmIFNJWFRFRU5fQklUCi1zdGF0aWMgdm9pZCBibl9HRjJtX211bF8xeDEoQk5fVUxPTkcgKnIxLCBCTl9VTE9ORyAqcjAsIGNvbnN0IEJOX1VMT05HIGEsIGNvbnN0IEJOX1VMT05HIGIpCi0JewotCXJlZ2lzdGVyIEJOX1VMT05HIGgsIGwsIHM7Ci0JQk5fVUxPTkcgdGFiWzRdLCB0b3AxYiA9IGEgPj4gMTU7IAotCXJlZ2lzdGVyIEJOX1VMT05HIGExLCBhMjsKLQotCWExID0gYSAmICgweDdGRkYpOyBhMiA9IGExIDw8IDE7Ci0KLQl0YWJbMF0gPSAwOyB0YWJbMV0gPSBhMTsgdGFiWzJdID0gYTI7IHRhYlszXSA9IGExXmEyOwotCi0JcyA9IHRhYltiICAgICAgJiAweDNdOyBsICA9IHM7Ci0JcyA9IHRhYltiID4+IDIgJiAweDNdOyBsIF49IHMgPDwgIDI7IGggID0gcyA+PiAxNDsKLQlzID0gdGFiW2IgPj4gNCAmIDB4M107IGwgXj0gcyA8PCAgNDsgaCBePSBzID4+IDEyOwotCXMgPSB0YWJbYiA+PiA2ICYgMHgzXTsgbCBePSBzIDw8ICA2OyBoIF49IHMgPj4gMTA7Ci0JcyA9IHRhYltiID4+IDggJiAweDNdOyBsIF49IHMgPDwgIDg7IGggXj0gcyA+PiAgODsKLQlzID0gdGFiW2IgPj4xMCAmIDB4M107IGwgXj0gcyA8PCAxMDsgaCBePSBzID4+ICA2OwotCXMgPSB0YWJbYiA+PjEyICYgMHgzXTsgbCBePSBzIDw8IDEyOyBoIF49IHMgPj4gIDQ7Ci0JcyA9IHRhYltiID4+MTQgICAgICBdOyBsIF49IHMgPDwgMTQ7IGggXj0gcyA+PiAgMjsKLQotCS8qIGNvbXBlbnNhdGUgZm9yIHRoZSB0b3AgYml0IG9mIGEgKi8KLQotCWlmICh0b3AxYiAmIDAxKSB7IGwgXj0gYiA8PCAxNTsgaCBePSBiID4+IDE7IH0gCi0KLQkqcjEgPSBoOyAqcjAgPSBsOwotCX0gCi0jZW5kaWYKICNpZmRlZiBUSElSVFlfVFdPX0JJVAogc3RhdGljIHZvaWQgYm5fR0YybV9tdWxfMXgxKEJOX1VMT05HICpyMSwgQk5fVUxPTkcgKnIwLCBjb25zdCBCTl9VTE9ORyBhLCBjb25zdCBCTl9VTE9ORyBiKQogCXsKQEAgLTMyMSw3ICsyNTksNyBAQAogCiAKIC8qIFBlcmZvcm1zIG1vZHVsYXIgcmVkdWN0aW9uIG9mIGEgYW5kIHN0b3JlIHJlc3VsdCBpbiByLiAgciBjb3VsZCBiZSBhLiAqLwotaW50IEJOX0dGMm1fbW9kX2FycihCSUdOVU0gKnIsIGNvbnN0IEJJR05VTSAqYSwgY29uc3QgdW5zaWduZWQgaW50IHBbXSkKK2ludCBCTl9HRjJtX21vZF9hcnIoQklHTlVNICpyLCBjb25zdCBCSUdOVU0gKmEsIGNvbnN0IGludCBwW10pCiAJewogCWludCBqLCBrOwogCWludCBuLCBkTiwgZDAsIGQxOwpAQCAtNDIyLDExICszNjAsMTEgQEAKIGludAlCTl9HRjJtX21vZChCSUdOVU0gKnIsIGNvbnN0IEJJR05VTSAqYSwgY29uc3QgQklHTlVNICpwKQogCXsKIAlpbnQgcmV0ID0gMDsKLQljb25zdCBpbnQgbWF4ID0gQk5fbnVtX2JpdHMocCk7Ci0JdW5zaWduZWQgaW50ICphcnI9TlVMTDsKKwljb25zdCBpbnQgbWF4ID0gQk5fbnVtX2JpdHMocCkgKyAxOworCWludCAqYXJyPU5VTEw7CiAJYm5fY2hlY2tfdG9wKGEpOwogCWJuX2NoZWNrX3RvcChwKTsKLQlpZiAoKGFyciA9ICh1bnNpZ25lZCBpbnQgKilPUEVOU1NMX21hbGxvYyhzaXplb2YodW5zaWduZWQgaW50KSAqIG1heCkpID09IE5VTEwpIGdvdG8gZXJyOworCWlmICgoYXJyID0gKGludCAqKU9QRU5TU0xfbWFsbG9jKHNpemVvZihpbnQpICogbWF4KSkgPT0gTlVMTCkgZ290byBlcnI7CiAJcmV0ID0gQk5fR0YybV9wb2x5MmFycihwLCBhcnIsIG1heCk7CiAJaWYgKCFyZXQgfHwgcmV0ID4gbWF4KQogCQl7CkBAIC00NDQsNyArMzgyLDcgQEAKIC8qIENvbXB1dGUgdGhlIHByb2R1Y3Qgb2YgdHdvIHBvbHlub21pYWxzIGEgYW5kIGIsIHJlZHVjZSBtb2R1bG8gcCwgYW5kIHN0b3JlCiAgKiB0aGUgcmVzdWx0IGluIHIuICByIGNvdWxkIGJlIGEgb3IgYjsgYSBjb3VsZCBiZSBiLgogICovCi1pbnQJQk5fR0YybV9tb2RfbXVsX2FycihCSUdOVU0gKnIsIGNvbnN0IEJJR05VTSAqYSwgY29uc3QgQklHTlVNICpiLCBjb25zdCB1bnNpZ25lZCBpbnQgcFtdLCBCTl9DVFggKmN0eCkKK2ludAlCTl9HRjJtX21vZF9tdWxfYXJyKEJJR05VTSAqciwgY29uc3QgQklHTlVNICphLCBjb25zdCBCSUdOVU0gKmIsIGNvbnN0IGludCBwW10sIEJOX0NUWCAqY3R4KQogCXsKIAlpbnQgemxlbiwgaSwgaiwgaywgcmV0ID0gMDsKIAlCSUdOVU0gKnM7CkBAIC01MDAsMTIgKzQzOCwxMiBAQAogaW50CUJOX0dGMm1fbW9kX211bChCSUdOVU0gKnIsIGNvbnN0IEJJR05VTSAqYSwgY29uc3QgQklHTlVNICpiLCBjb25zdCBCSUdOVU0gKnAsIEJOX0NUWCAqY3R4KQogCXsKIAlpbnQgcmV0ID0gMDsKLQljb25zdCBpbnQgbWF4ID0gQk5fbnVtX2JpdHMocCk7Ci0JdW5zaWduZWQgaW50ICphcnI9TlVMTDsKKwljb25zdCBpbnQgbWF4ID0gQk5fbnVtX2JpdHMocCkgKyAxOworCWludCAqYXJyPU5VTEw7CiAJYm5fY2hlY2tfdG9wKGEpOwogCWJuX2NoZWNrX3RvcChiKTsKIAlibl9jaGVja190b3AocCk7Ci0JaWYgKChhcnIgPSAodW5zaWduZWQgaW50ICopT1BFTlNTTF9tYWxsb2Moc2l6ZW9mKHVuc2lnbmVkIGludCkgKiBtYXgpKSA9PSBOVUxMKSBnb3RvIGVycjsKKwlpZiAoKGFyciA9IChpbnQgKilPUEVOU1NMX21hbGxvYyhzaXplb2YoaW50KSAqIG1heCkpID09IE5VTEwpIGdvdG8gZXJyOwogCXJldCA9IEJOX0dGMm1fcG9seTJhcnIocCwgYXJyLCBtYXgpOwogCWlmICghcmV0IHx8IHJldCA+IG1heCkKIAkJewpAQCAtNTIxLDcgKzQ1OSw3IEBACiAKIAogLyogU3F1YXJlIGEsIHJlZHVjZSB0aGUgcmVzdWx0IG1vZCBwLCBhbmQgc3RvcmUgaXQgaW4gYS4gIHIgY291bGQgYmUgYS4gKi8KLWludAlCTl9HRjJtX21vZF9zcXJfYXJyKEJJR05VTSAqciwgY29uc3QgQklHTlVNICphLCBjb25zdCB1bnNpZ25lZCBpbnQgcFtdLCBCTl9DVFggKmN0eCkKK2ludAlCTl9HRjJtX21vZF9zcXJfYXJyKEJJR05VTSAqciwgY29uc3QgQklHTlVNICphLCBjb25zdCBpbnQgcFtdLCBCTl9DVFggKmN0eCkKIAl7CiAJaW50IGksIHJldCA9IDA7CiAJQklHTlVNICpzOwpAQCAtNTU2LDEyICs0OTQsMTIgQEAKIGludAlCTl9HRjJtX21vZF9zcXIoQklHTlVNICpyLCBjb25zdCBCSUdOVU0gKmEsIGNvbnN0IEJJR05VTSAqcCwgQk5fQ1RYICpjdHgpCiAJewogCWludCByZXQgPSAwOwotCWNvbnN0IGludCBtYXggPSBCTl9udW1fYml0cyhwKTsKLQl1bnNpZ25lZCBpbnQgKmFycj1OVUxMOworCWNvbnN0IGludCBtYXggPSBCTl9udW1fYml0cyhwKSArIDE7CisJaW50ICphcnI9TlVMTDsKIAogCWJuX2NoZWNrX3RvcChhKTsKIAlibl9jaGVja190b3AocCk7Ci0JaWYgKChhcnIgPSAodW5zaWduZWQgaW50ICopT1BFTlNTTF9tYWxsb2Moc2l6ZW9mKHVuc2lnbmVkIGludCkgKiBtYXgpKSA9PSBOVUxMKSBnb3RvIGVycjsKKwlpZiAoKGFyciA9IChpbnQgKilPUEVOU1NMX21hbGxvYyhzaXplb2YoaW50KSAqIG1heCkpID09IE5VTEwpIGdvdG8gZXJyOwogCXJldCA9IEJOX0dGMm1fcG9seTJhcnIocCwgYXJyLCBtYXgpOwogCWlmICghcmV0IHx8IHJldCA+IG1heCkKIAkJewpAQCAtNjQzLDcgKzU4MSw3IEBACiAgKiBmdW5jdGlvbiBpcyBvbmx5IHByb3ZpZGVkIGZvciBjb252ZW5pZW5jZTsgZm9yIGJlc3QgcGVyZm9ybWFuY2UsIHVzZSB0aGUgCiAgKiBCTl9HRjJtX21vZF9pbnYgZnVuY3Rpb24uCiAgKi8KLWludCBCTl9HRjJtX21vZF9pbnZfYXJyKEJJR05VTSAqciwgY29uc3QgQklHTlVNICp4eCwgY29uc3QgdW5zaWduZWQgaW50IHBbXSwgQk5fQ1RYICpjdHgpCitpbnQgQk5fR0YybV9tb2RfaW52X2FycihCSUdOVU0gKnIsIGNvbnN0IEJJR05VTSAqeHgsIGNvbnN0IGludCBwW10sIEJOX0NUWCAqY3R4KQogCXsKIAlCSUdOVU0gKmZpZWxkOwogCWludCByZXQgPSAwOwpAQCAtNzY5LDcgKzcwNyw3IEBACiAgKiBmdW5jdGlvbiBpcyBvbmx5IHByb3ZpZGVkIGZvciBjb252ZW5pZW5jZTsgZm9yIGJlc3QgcGVyZm9ybWFuY2UsIHVzZSB0aGUgCiAgKiBCTl9HRjJtX21vZF9kaXYgZnVuY3Rpb24uCiAgKi8KLWludCBCTl9HRjJtX21vZF9kaXZfYXJyKEJJR05VTSAqciwgY29uc3QgQklHTlVNICp5eSwgY29uc3QgQklHTlVNICp4eCwgY29uc3QgdW5zaWduZWQgaW50IHBbXSwgQk5fQ1RYICpjdHgpCitpbnQgQk5fR0YybV9tb2RfZGl2X2FycihCSUdOVU0gKnIsIGNvbnN0IEJJR05VTSAqeXksIGNvbnN0IEJJR05VTSAqeHgsIGNvbnN0IGludCBwW10sIEJOX0NUWCAqY3R4KQogCXsKIAlCSUdOVU0gKmZpZWxkOwogCWludCByZXQgPSAwOwpAQCAtNzk0LDcgKzczMiw3IEBACiAgKiB0aGUgcmVzdWx0IGluIHIuICByIGNvdWxkIGJlIGEuCiAgKiBVc2VzIHNpbXBsZSBzcXVhcmUtYW5kLW11bHRpcGx5IGFsZ29yaXRobSBBLjUuMSBmcm9tIElFRUUgUDEzNjMuCiAgKi8KLWludAlCTl9HRjJtX21vZF9leHBfYXJyKEJJR05VTSAqciwgY29uc3QgQklHTlVNICphLCBjb25zdCBCSUdOVU0gKmIsIGNvbnN0IHVuc2lnbmVkIGludCBwW10sIEJOX0NUWCAqY3R4KQoraW50CUJOX0dGMm1fbW9kX2V4cF9hcnIoQklHTlVNICpyLCBjb25zdCBCSUdOVU0gKmEsIGNvbnN0IEJJR05VTSAqYiwgY29uc3QgaW50IHBbXSwgQk5fQ1RYICpjdHgpCiAJewogCWludCByZXQgPSAwLCBpLCBuOwogCUJJR05VTSAqdTsKQEAgLTg0MCwxMiArNzc4LDEyIEBACiBpbnQgQk5fR0YybV9tb2RfZXhwKEJJR05VTSAqciwgY29uc3QgQklHTlVNICphLCBjb25zdCBCSUdOVU0gKmIsIGNvbnN0IEJJR05VTSAqcCwgQk5fQ1RYICpjdHgpCiAJewogCWludCByZXQgPSAwOwotCWNvbnN0IGludCBtYXggPSBCTl9udW1fYml0cyhwKTsKLQl1bnNpZ25lZCBpbnQgKmFycj1OVUxMOworCWNvbnN0IGludCBtYXggPSBCTl9udW1fYml0cyhwKSArIDE7CisJaW50ICphcnI9TlVMTDsKIAlibl9jaGVja190b3AoYSk7CiAJYm5fY2hlY2tfdG9wKGIpOwogCWJuX2NoZWNrX3RvcChwKTsKLQlpZiAoKGFyciA9ICh1bnNpZ25lZCBpbnQgKilPUEVOU1NMX21hbGxvYyhzaXplb2YodW5zaWduZWQgaW50KSAqIG1heCkpID09IE5VTEwpIGdvdG8gZXJyOworCWlmICgoYXJyID0gKGludCAqKU9QRU5TU0xfbWFsbG9jKHNpemVvZihpbnQpICogbWF4KSkgPT0gTlVMTCkgZ290byBlcnI7CiAJcmV0ID0gQk5fR0YybV9wb2x5MmFycihwLCBhcnIsIG1heCk7CiAJaWYgKCFyZXQgfHwgcmV0ID4gbWF4KQogCQl7CkBAIC04NjMsNyArODAxLDcgQEAKICAqIHRoZSByZXN1bHQgaW4gci4gIHIgY291bGQgYmUgYS4KICAqIFVzZXMgZXhwb25lbnRpYXRpb24gYXMgaW4gYWxnb3JpdGhtIEEuNC4xIGZyb20gSUVFRSBQMTM2My4KICAqLwotaW50CUJOX0dGMm1fbW9kX3NxcnRfYXJyKEJJR05VTSAqciwgY29uc3QgQklHTlVNICphLCBjb25zdCB1bnNpZ25lZCBpbnQgcFtdLCBCTl9DVFggKmN0eCkKK2ludAlCTl9HRjJtX21vZF9zcXJ0X2FycihCSUdOVU0gKnIsIGNvbnN0IEJJR05VTSAqYSwgY29uc3QgaW50IHBbXSwgQk5fQ1RYICpjdHgpCiAJewogCWludCByZXQgPSAwOwogCUJJR05VTSAqdTsKQEAgLTg5OSwxMSArODM3LDExIEBACiBpbnQgQk5fR0YybV9tb2Rfc3FydChCSUdOVU0gKnIsIGNvbnN0IEJJR05VTSAqYSwgY29uc3QgQklHTlVNICpwLCBCTl9DVFggKmN0eCkKIAl7CiAJaW50IHJldCA9IDA7Ci0JY29uc3QgaW50IG1heCA9IEJOX251bV9iaXRzKHApOwotCXVuc2lnbmVkIGludCAqYXJyPU5VTEw7CisJY29uc3QgaW50IG1heCA9IEJOX251bV9iaXRzKHApICsgMTsKKwlpbnQgKmFycj1OVUxMOwogCWJuX2NoZWNrX3RvcChhKTsKIAlibl9jaGVja190b3AocCk7Ci0JaWYgKChhcnIgPSAodW5zaWduZWQgaW50ICopT1BFTlNTTF9tYWxsb2Moc2l6ZW9mKHVuc2lnbmVkIGludCkgKiBtYXgpKSA9PSBOVUxMKSBnb3RvIGVycjsKKwlpZiAoKGFyciA9IChpbnQgKilPUEVOU1NMX21hbGxvYyhzaXplb2YoaW50KSAqIG1heCkpID09IE5VTEwpIGdvdG8gZXJyOwogCXJldCA9IEJOX0dGMm1fcG9seTJhcnIocCwgYXJyLCBtYXgpOwogCWlmICghcmV0IHx8IHJldCA+IG1heCkKIAkJewpAQCAtOTIwLDEwICs4NTgsOSBAQAogLyogRmluZCByIHN1Y2ggdGhhdCByXjIgKyByID0gYSBtb2QgcC4gIHIgY291bGQgYmUgYS4gSWYgbm8gciBleGlzdHMgcmV0dXJucyAwLgogICogVXNlcyBhbGdvcml0aG1zIEEuNC43IGFuZCBBLjQuNiBmcm9tIElFRUUgUDEzNjMuCiAgKi8KLWludCBCTl9HRjJtX21vZF9zb2x2ZV9xdWFkX2FycihCSUdOVU0gKnIsIGNvbnN0IEJJR05VTSAqYV8sIGNvbnN0IHVuc2lnbmVkIGludCBwW10sIEJOX0NUWCAqY3R4KQoraW50IEJOX0dGMm1fbW9kX3NvbHZlX3F1YWRfYXJyKEJJR05VTSAqciwgY29uc3QgQklHTlVNICphXywgY29uc3QgaW50IHBbXSwgQk5fQ1RYICpjdHgpCiAJewotCWludCByZXQgPSAwLCBjb3VudCA9IDA7Ci0JdW5zaWduZWQgaW50IGo7CisJaW50IHJldCA9IDAsIGNvdW50ID0gMCwgajsKIAlCSUdOVU0gKmEsICp6LCAqcmhvLCAqdywgKncyLCAqdG1wOwogCiAJYm5fY2hlY2tfdG9wKGFfKTsKQEAgLTEwMTgsMTEgKzk1NSwxMSBAQAogaW50IEJOX0dGMm1fbW9kX3NvbHZlX3F1YWQoQklHTlVNICpyLCBjb25zdCBCSUdOVU0gKmEsIGNvbnN0IEJJR05VTSAqcCwgQk5fQ1RYICpjdHgpCiAJewogCWludCByZXQgPSAwOwotCWNvbnN0IGludCBtYXggPSBCTl9udW1fYml0cyhwKTsKLQl1bnNpZ25lZCBpbnQgKmFycj1OVUxMOworCWNvbnN0IGludCBtYXggPSBCTl9udW1fYml0cyhwKSArIDE7CisJaW50ICphcnI9TlVMTDsKIAlibl9jaGVja190b3AoYSk7CiAJYm5fY2hlY2tfdG9wKHApOwotCWlmICgoYXJyID0gKHVuc2lnbmVkIGludCAqKU9QRU5TU0xfbWFsbG9jKHNpemVvZih1bnNpZ25lZCBpbnQpICoKKwlpZiAoKGFyciA9IChpbnQgKilPUEVOU1NMX21hbGxvYyhzaXplb2YoaW50KSAqCiAJCQkJCQltYXgpKSA9PSBOVUxMKSBnb3RvIGVycjsKIAlyZXQgPSBCTl9HRjJtX3BvbHkyYXJyKHAsIGFyciwgbWF4KTsKIAlpZiAoIXJldCB8fCByZXQgPiBtYXgpCkBAIC0xMDM4LDIwICs5NzUsMTcgQEAKIAl9CiAKIC8qIENvbnZlcnQgdGhlIGJpdC1zdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBwb2x5bm9taWFsCi0gKiAoIFxzdW1fe2k9MH1ebiBhX2kgKiB4XmkgLCB3aGVyZSBhXzAgaXMgKm5vdCogemVybykgaW50byBhbiBhcnJheQotICogb2YgaW50ZWdlcnMgY29ycmVzcG9uZGluZyB0byB0aGUgYml0cyB3aXRoIG5vbi16ZXJvIGNvZWZmaWNpZW50LgorICogKCBcc3VtX3tpPTB9Xm4gYV9pICogeF5pKSBpbnRvIGFuIGFycmF5IG9mIGludGVnZXJzIGNvcnJlc3BvbmRpbmcgCisgKiB0byB0aGUgYml0cyB3aXRoIG5vbi16ZXJvIGNvZWZmaWNpZW50LiAgQXJyYXkgaXMgdGVybWluYXRlZCB3aXRoIC0xLgogICogVXAgdG8gbWF4IGVsZW1lbnRzIG9mIHRoZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4gIFJldHVybiB2YWx1ZSBpcyB0b3RhbAotICogbnVtYmVyIG9mIGNvZWZmaWNpZW50cyB0aGF0IHdvdWxkIGJlIGV4dHJhY3RlZCBpZiBhcnJheSB3YXMgbGFyZ2UgZW5vdWdoLgorICogbnVtYmVyIG9mIGFycmF5IGVsZW1lbnRzIHRoYXQgd291bGQgYmUgZmlsbGVkIGlmIGFycmF5IHdhcyBsYXJnZSBlbm91Z2guCiAgKi8KLWludCBCTl9HRjJtX3BvbHkyYXJyKGNvbnN0IEJJR05VTSAqYSwgdW5zaWduZWQgaW50IHBbXSwgaW50IG1heCkKK2ludCBCTl9HRjJtX3BvbHkyYXJyKGNvbnN0IEJJR05VTSAqYSwgaW50IHBbXSwgaW50IG1heCkKIAl7CiAJaW50IGksIGosIGsgPSAwOwogCUJOX1VMT05HIG1hc2s7CiAKLQlpZiAoQk5faXNfemVybyhhKSB8fCAhQk5faXNfYml0X3NldChhLCAwKSkKLQkJLyogYV8wID09IDAgPT4gcmV0dXJuIGVycm9yICh0aGUgdW5zaWduZWQgaW50IGFycmF5Ci0JCSAqIG11c3QgYmUgdGVybWluYXRlZCBieSAwKQotCQkgKi8KKwlpZiAoQk5faXNfemVybyhhKSkKIAkJcmV0dXJuIDA7CiAKIAlmb3IgKGkgPSBhLT50b3AgLSAxOyBpID49IDA7IGktLSkKQEAgLTEwNzEsMjQgKzEwMDUsMjggQEAKIAkJCX0KIAkJfQogCisJaWYgKGsgPCBtYXgpIHsKKwkJcFtrXSA9IC0xOworCQlrKys7CisJfQorCiAJcmV0dXJuIGs7CiAJfQogCiAvKiBDb252ZXJ0IHRoZSBjb2VmZmljaWVudCBhcnJheSByZXByZXNlbnRhdGlvbiBvZiBhIHBvbHlub21pYWwgdG8gYSAKLSAqIGJpdC1zdHJpbmcuICBUaGUgYXJyYXkgbXVzdCBiZSB0ZXJtaW5hdGVkIGJ5IDAuCisgKiBiaXQtc3RyaW5nLiAgVGhlIGFycmF5IG11c3QgYmUgdGVybWluYXRlZCBieSAtMS4KICAqLwotaW50IEJOX0dGMm1fYXJyMnBvbHkoY29uc3QgdW5zaWduZWQgaW50IHBbXSwgQklHTlVNICphKQoraW50IEJOX0dGMm1fYXJyMnBvbHkoY29uc3QgaW50IHBbXSwgQklHTlVNICphKQogCXsKIAlpbnQgaTsKIAogCWJuX2NoZWNrX3RvcChhKTsKIAlCTl96ZXJvKGEpOwotCWZvciAoaSA9IDA7IHBbaV0gIT0gMDsgaSsrKQorCWZvciAoaSA9IDA7IHBbaV0gIT0gLTE7IGkrKykKIAkJewogCQlpZiAoQk5fc2V0X2JpdChhLCBwW2ldKSA9PSAwKQogCQkJcmV0dXJuIDA7CiAJCX0KLQlCTl9zZXRfYml0KGEsIDApOwogCWJuX2NoZWNrX3RvcChhKTsKIAogCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2JuL2JuX2xjbC5oIGIvY3J5cHRvL2JuL2JuX2xjbC5oCmluZGV4IDI3YWM0MzkuLjhlNWU5OGUgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ibi9ibl9sY2wuaAorKysgYi9jcnlwdG8vYm4vYm5fbGNsLmgKQEAgLTI1NSw3ICsyNTUsOCBAQAogCSAgICAgOiAiciIoYSksICJyIihiKSk7CQlcCiAJcmV0OwkJCX0pCiAjICBlbmRpZgkvKiBjb21waWxlciAqLwotIyBlbGlmIGRlZmluZWQoX194ODZfNjQpICYmIGRlZmluZWQoU0lYVFlfRk9VUl9CSVRfTE9ORykKKyMgZWxpZiAoZGVmaW5lZChfX3g4Nl82NCkgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSkgJiYgXAorICAgICAgIChkZWZpbmVkKFNJWFRZX0ZPVVJfQklUX0xPTkcpIHx8IGRlZmluZWQoU0lYVFlfRk9VUl9CSVQpKQogIyAgaWYgZGVmaW5lZChfX0dOVUNfXykKICMgICBkZWZpbmUgQk5fVU1VTFRfSElHSChhLGIpCSh7CVwKIAlyZWdpc3RlciBCTl9VTE9ORyByZXQsZGlzY2FyZDsJXApkaWZmIC0tZ2l0IGEvY3J5cHRvL2JuL2JuX2xpYi5jIGIvY3J5cHRvL2JuL2JuX2xpYi5jCmluZGV4IDMyYThmYmEuLjU0NzBmYmUgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ibi9ibl9saWIuYworKysgYi9jcnlwdG8vYm4vYm5fbGliLmMKQEAgLTEzMywxNSArMTMzLDM0IEBACiAKIGNvbnN0IEJJR05VTSAqQk5fdmFsdWVfb25lKHZvaWQpCiAJewotCXN0YXRpYyBCTl9VTE9ORyBkYXRhX29uZT0xTDsKLQlzdGF0aWMgQklHTlVNIGNvbnN0X29uZT17JmRhdGFfb25lLDEsMSwwLEJOX0ZMR19TVEFUSUNfREFUQX07CisJc3RhdGljIGNvbnN0IEJOX1VMT05HIGRhdGFfb25lPTFMOworCXN0YXRpYyBjb25zdCBCSUdOVU0gY29uc3Rfb25lPXsoQk5fVUxPTkcgKikmZGF0YV9vbmUsMSwxLDAsQk5fRkxHX1NUQVRJQ19EQVRBfTsKIAogCXJldHVybigmY29uc3Rfb25lKTsKIAl9CiAKK2NoYXIgKkJOX29wdGlvbnModm9pZCkKKwl7CisJc3RhdGljIGludCBpbml0PTA7CisJc3RhdGljIGNoYXIgZGF0YVsxNl07CisKKwlpZiAoIWluaXQpCisJCXsKKwkJaW5pdCsrOworI2lmZGVmIEJOX0xMT05HCisJCUJJT19zbnByaW50ZihkYXRhLHNpemVvZiBkYXRhLCJibiglZCwlZCkiLAorCQkJICAgICAoaW50KXNpemVvZihCTl9VTExPTkcpKjgsKGludClzaXplb2YoQk5fVUxPTkcpKjgpOworI2Vsc2UKKwkJQklPX3NucHJpbnRmKGRhdGEsc2l6ZW9mIGRhdGEsImJuKCVkLCVkKSIsCisJCQkgICAgIChpbnQpc2l6ZW9mKEJOX1VMT05HKSo4LChpbnQpc2l6ZW9mKEJOX1VMT05HKSo4KTsKKyNlbmRpZgorCQl9CisJcmV0dXJuKGRhdGEpOworCX0KKwogaW50IEJOX251bV9iaXRzX3dvcmQoQk5fVUxPTkcgbCkKIAl7Ci0Jc3RhdGljIGNvbnN0IGNoYXIgYml0c1syNTZdPXsKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBiaXRzWzI1Nl09ewogCQkwLDEsMiwyLDMsMywzLDMsNCw0LDQsNCw0LDQsNCw0LAogCQk1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LAogCQk2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LApAQCAtMjE2LDcgKzIzNSw3IEBACiAJCWVsc2UKICNlbmRpZgogCQkJewotI2lmIGRlZmluZWQoU0lYVEVFTl9CSVQpIHx8IGRlZmluZWQoVEhJUlRZX1RXT19CSVQpIHx8IGRlZmluZWQoU0lYVFlfRk9VUl9CSVQpIHx8IGRlZmluZWQoU0lYVFlfRk9VUl9CSVRfTE9ORykKKyNpZiBkZWZpbmVkKFRISVJUWV9UV09fQklUKSB8fCBkZWZpbmVkKFNJWFRZX0ZPVVJfQklUKSB8fCBkZWZpbmVkKFNJWFRZX0ZPVVJfQklUX0xPTkcpCiAJCQlpZiAobCAmIDB4ZmYwMEwpCiAJCQkJcmV0dXJuKGJpdHNbKGludCkobD4+OCldKzgpOwogCQkJZWxzZQkKQEAgLTc0NCw3ICs3NjMsNyBAQAogCWk9bi9CTl9CSVRTMjsKIAlqPW4lQk5fQklUUzI7CiAJaWYgKGEtPnRvcCA8PSBpKSByZXR1cm4gMDsKLQlyZXR1cm4oKChhLT5kW2ldKT4+aikmKChCTl9VTE9ORykxKSk7CisJcmV0dXJuIChpbnQpKCgoYS0+ZFtpXSk+PmopJigoQk5fVUxPTkcpMSkpOwogCX0KIAogaW50IEJOX21hc2tfYml0cyhCSUdOVU0gKmEsIGludCBuKQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2JuL2JuX21vbnQuYyBiL2NyeXB0by9ibi9ibl9tb250LmMKaW5kZXggNDc5OWIxNS4uNzIyNDYzNyAxMDA2NDQKLS0tIGEvY3J5cHRvL2JuL2JuX21vbnQuYworKysgYi9jcnlwdG8vYm4vYm5fbW9udC5jCkBAIC0xMjIsMjYgKzEyMiwxMCBAQAogCiAjZGVmaW5lIE1PTlRfV09SRCAvKiB1c2UgdGhlIGZhc3RlciB3b3JkLWJhc2VkIGFsZ29yaXRobSAqLwogCi0jaWYgZGVmaW5lZChNT05UX1dPUkQpICYmIGRlZmluZWQoT1BFTlNTTF9CTl9BU01fTU9OVCkgJiYgKEJOX0JJVFMyPD0zMikKLS8qIFRoaXMgY29uZGl0aW9uIG1lYW5zIHdlIGhhdmUgYSBzcGVjaWZpYyBub24tZGVmYXVsdCBidWlsZDoKLSAqIEluIHRoZSAwLjkuOCBicmFuY2gsIE9QRU5TU0xfQk5fQVNNX01PTlQgaXMgbm9ybWFsbHkgbm90IHNldCBmb3IgYW55Ci0gKiBCTl9CSVRTMjw9MzIgcGxhdGZvcm07IGFuIGV4cGxpY2l0ICJlbmFibGUtbW9udGFzbSIgaXMgcmVxdWlyZWQuCi0gKiBJLmUuLCBpZiB3ZSBhcmUgaGVyZSwgdGhlIHVzZXIgaW50ZW50aW9uYWxseSBkZXZpYXRlcyBmcm9tIHRoZQotICogbm9ybWFsIHN0YWJsZSBidWlsZCB0byBnZXQgYmV0dGVyIE1vbnRnb21lcnkgcGVyZm9ybWFuY2UgZnJvbQotICogdGhlIDAuOS45LWRldiBiYWNrcG9ydC4KLSAqCi0gKiBJbiB0aGlzIGNhc2Ugb25seSwgd2UgYWxzbyBlbmFibGUgQk5fZnJvbV9tb250Z29tZXJ5X3dvcmQoKQotICogKGFub3RoZXIgbm9uLXN0YWJsZSBmZWF0dXJlIGZyb20gMC45LjktZGV2KS4KLSAqLwotI2RlZmluZSBNT05UX0ZST01fV09SRF9fX05PTl9ERUZBVUxUXzBfOV84X0JVSUxECi0jZW5kaWYKLQotI2lmZGVmIE1PTlRfRlJPTV9XT1JEX19fTk9OX0RFRkFVTFRfMF85XzhfQlVJTEQKKyNpZmRlZiBNT05UX1dPUkQKIHN0YXRpYyBpbnQgQk5fZnJvbV9tb250Z29tZXJ5X3dvcmQoQklHTlVNICpyZXQsIEJJR05VTSAqciwgQk5fTU9OVF9DVFggKm1vbnQpOwogI2VuZGlmCiAKLQotCiBpbnQgQk5fbW9kX211bF9tb250Z29tZXJ5KEJJR05VTSAqciwgY29uc3QgQklHTlVNICphLCBjb25zdCBCSUdOVU0gKmIsCiAJCQkgIEJOX01PTlRfQ1RYICptb250LCBCTl9DVFggKmN0eCkKIAl7CkBAIC0xNTMsMTEgKzEzNyw3IEBACiAJaWYgKG51bT4xICYmIGEtPnRvcD09bnVtICYmIGItPnRvcD09bnVtKQogCQl7CiAJCWlmIChibl93ZXhwYW5kKHIsbnVtKSA9PSBOVUxMKSByZXR1cm4oMCk7Ci0jaWYgMCAvKiBmb3IgT3BlblNTTCAwLjkuOSBtb250LT5uMCAqLwogCQlpZiAoYm5fbXVsX21vbnQoci0+ZCxhLT5kLGItPmQsbW9udC0+Ti5kLG1vbnQtPm4wLG51bSkpCi0jZWxzZQotCQlpZiAoYm5fbXVsX21vbnQoci0+ZCxhLT5kLGItPmQsbW9udC0+Ti5kLCZtb250LT5uMCxudW0pKQotI2VuZGlmCiAJCQl7CiAJCQlyLT5uZWcgPSBhLT5uZWdeYi0+bmVnOwogCQkJci0+dG9wID0gbnVtOwpAQCAtMTgxLDcgKzE2MSw3IEBACiAJCWlmICghQk5fbXVsKHRtcCxhLGIsY3R4KSkgZ290byBlcnI7CiAJCX0KIAkvKiByZWR1Y2UgZnJvbSBhUlIgdG8gYVIgKi8KLSNpZmRlZiBNT05UX0ZST01fV09SRF9fX05PTl9ERUZBVUxUXzBfOV84X0JVSUxECisjaWZkZWYgTU9OVF9XT1JECiAJaWYgKCFCTl9mcm9tX21vbnRnb21lcnlfd29yZChyLHRtcCxtb250KSkgZ290byBlcnI7CiAjZWxzZQogCWlmICghQk5fZnJvbV9tb250Z29tZXJ5KHIsdG1wLG1vbnQsY3R4KSkgZ290byBlcnI7CkBAIC0xOTMsNyArMTczLDcgQEAKIAlyZXR1cm4ocmV0KTsKIAl9CiAKLSNpZmRlZiBNT05UX0ZST01fV09SRF9fX05PTl9ERUZBVUxUXzBfOV84X0JVSUxECisjaWZkZWYgTU9OVF9XT1JECiBzdGF0aWMgaW50IEJOX2Zyb21fbW9udGdvbWVyeV93b3JkKEJJR05VTSAqcmV0LCBCSUdOVU0gKnIsIEJOX01PTlRfQ1RYICptb250KQogCXsKIAlCSUdOVU0gKm47CkBAIC0yMTcsMTUgKzE5NywxNSBAQAogCW5ycD0gJihyLT5kW25sXSk7CiAKIAkvKiBjbGVhciB0aGUgdG9wIHdvcmRzIG9mIFQgKi8KKyNpZiAxCiAJZm9yIChpPXItPnRvcDsgaTxtYXg7IGkrKykgLyogbWVtc2V0PyBYWFggKi8KIAkJci0+ZFtpXT0wOworI2Vsc2UKKwltZW1zZXQoJihyLT5kW3ItPnRvcF0pLDAsKG1heC1yLT50b3ApKnNpemVvZihCTl9VTE9ORykpOyAKKyNlbmRpZgogCiAJci0+dG9wPW1heDsKLSNpZiAwIC8qIGZvciBPcGVuU1NMIDAuOS45IG1vbnQtPm4wICovCiAJbjA9bW9udC0+bjBbMF07Ci0jZWxzZQotCW4wPW1vbnQtPm4wOwotI2VuZGlmCiAKICNpZmRlZiBCTl9DT1VOVAogCWZwcmludGYoc3RkZXJyLCJ3b3JkIEJOX2Zyb21fbW9udGdvbWVyeV93b3JkICVkICogJWRcbiIsbmwsbmwpOwpAQCAtMjcwLDYgKzI1MCw4IEBACiAJCX0KIAlhbD1yLT50b3Atcmk7CiAKKyNkZWZpbmUgQlJBTkNIX0ZSRUUgMQorI2lmIEJSQU5DSF9GUkVFCiAJaWYgKGJuX3dleHBhbmQocmV0LHJpKSA9PSBOVUxMKSByZXR1cm4oMCk7CiAJeD0wLSgoKGFsLXJpKT4+KHNpemVvZihhbCkqOC0xKSkmMSk7CiAJcmV0LT50b3A9eD0ocmkmfngpfChhbCZ4KTsJLyogbWluKHJpLGFsKSAqLwpAQCAtMzE3LDE2NCArMjk5LDggQEAKIAkJcnBbaV09bnJwW2ldLCBhcFtpXT0wOwogCWJuX2NvcnJlY3RfdG9wKHIpOwogCWJuX2NvcnJlY3RfdG9wKHJldCk7Ci0JYm5fY2hlY2tfdG9wKHJldCk7Ci0KLQlyZXR1cm4oMSk7Ci0JfQotCi1pbnQgQk5fZnJvbV9tb250Z29tZXJ5KEJJR05VTSAqcmV0LCBjb25zdCBCSUdOVU0gKmEsIEJOX01PTlRfQ1RYICptb250LAotCSAgICAgQk5fQ1RYICpjdHgpCi0JewotCWludCByZXRuPTA7Ci0JQklHTlVNICp0OwotCi0JQk5fQ1RYX3N0YXJ0KGN0eCk7Ci0JaWYgKCh0ID0gQk5fQ1RYX2dldChjdHgpKSAmJiBCTl9jb3B5KHQsYSkpCi0JCXJldG4gPSBCTl9mcm9tX21vbnRnb21lcnlfd29yZChyZXQsdCxtb250KTsKLQlCTl9DVFhfZW5kKGN0eCk7Ci0JcmV0dXJuIHJldG47Ci0JfQotCi0jZWxzZSAvKiAhTU9OVF9GUk9NX1dPUkRfX19OT05fREVGQVVMVF8wXzlfOF9CVUlMRCAqLwotCi1pbnQgQk5fZnJvbV9tb250Z29tZXJ5KEJJR05VTSAqcmV0LCBjb25zdCBCSUdOVU0gKmEsIEJOX01PTlRfQ1RYICptb250LAotCSAgICAgQk5fQ1RYICpjdHgpCi0JewotCWludCByZXRuPTA7Ci0KLSNpZmRlZiBNT05UX1dPUkQKLQlCSUdOVU0gKm4sKnI7Ci0JQk5fVUxPTkcgKmFwLCpucCwqcnAsbjAsdiwqbnJwOwotCWludCBhbCxubCxtYXgsaSx4LHJpOwotCi0JQk5fQ1RYX3N0YXJ0KGN0eCk7Ci0JaWYgKChyID0gQk5fQ1RYX2dldChjdHgpKSA9PSBOVUxMKSBnb3RvIGVycjsKLQotCWlmICghQk5fY29weShyLGEpKSBnb3RvIGVycjsKLQluPSAmKG1vbnQtPk4pOwotCi0JYXA9YS0+ZDsKLQkvKiBtb250LT5yaSBpcyB0aGUgc2l6ZSBvZiBtb250LT5OIGluIGJpdHMgKHJvdW5kZWQgdXAKLQkgICB0byB0aGUgd29yZCBzaXplKSAqLwotCWFsPXJpPW1vbnQtPnJpL0JOX0JJVFMyOwotCQotCW5sPW4tPnRvcDsKLQlpZiAoKGFsID09IDApIHx8IChubCA9PSAwKSkgeyByLT50b3A9MDsgcmV0dXJuKDEpOyB9Ci0KLQltYXg9KG5sK2FsKzEpOyAvKiBhbGxvdyBmb3Igb3ZlcmZsb3cgKG5vPykgWFhYICovCi0JaWYgKGJuX3dleHBhbmQocixtYXgpID09IE5VTEwpIGdvdG8gZXJyOwotCi0Jci0+bmVnPWEtPm5lZ15uLT5uZWc7Ci0JbnA9bi0+ZDsKLQlycD1yLT5kOwotCW5ycD0gJihyLT5kW25sXSk7Ci0KLQkvKiBjbGVhciB0aGUgdG9wIHdvcmRzIG9mIFQgKi8KLSNpZiAxCi0JZm9yIChpPXItPnRvcDsgaTxtYXg7IGkrKykgLyogbWVtc2V0PyBYWFggKi8KLQkJci0+ZFtpXT0wOwogI2Vsc2UKLQltZW1zZXQoJihyLT5kW3ItPnRvcF0pLDAsKG1heC1yLT50b3ApKnNpemVvZihCTl9VTE9ORykpOyAKLSNlbmRpZgotCi0Jci0+dG9wPW1heDsKLQluMD1tb250LT5uMDsKLQotI2lmZGVmIEJOX0NPVU5UCi0JZnByaW50ZihzdGRlcnIsIndvcmQgQk5fZnJvbV9tb250Z29tZXJ5ICVkICogJWRcbiIsbmwsbmwpOwotI2VuZGlmCi0JZm9yIChpPTA7IGk8bmw7IGkrKykKLQkJewotI2lmZGVmIF9fVEFOREVNCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgIGxvbmcgbG9uZyB0MTsKLSAgICAgICAgICAgICAgICAgICBsb25nIGxvbmcgdDI7Ci0gICAgICAgICAgICAgICAgICAgbG9uZyBsb25nIHQzOwotICAgICAgICAgICAgICAgICAgIHQxID0gcnBbMF0gKiAobjAgJiAwMTc3Nzc3KTsKLSAgICAgICAgICAgICAgICAgICB0MiA9IDAzNzc3NzYwMDAwMGw7Ci0gICAgICAgICAgICAgICAgICAgdDIgPSBuMCAmIHQyOwotICAgICAgICAgICAgICAgICAgIHQzID0gcnBbMF0gJiAwMTc3Nzc3OwotICAgICAgICAgICAgICAgICAgIHQyID0gKHQzICogdDIpICYgQk5fTUFTSzI7Ci0gICAgICAgICAgICAgICAgICAgdDEgPSB0MSArIHQyOwotICAgICAgICAgICAgICAgICAgIHY9Ym5fbXVsX2FkZF93b3JkcyhycCxucCxubCwoQk5fVUxPTkcpIHQxKTsKLSAgICAgICAgICAgICAgICB9Ci0jZWxzZQotCQl2PWJuX211bF9hZGRfd29yZHMocnAsbnAsbmwsKHJwWzBdKm4wKSZCTl9NQVNLMik7Ci0jZW5kaWYKLQkJbnJwKys7Ci0JCXJwKys7Ci0JCWlmICgoKG5ycFstMV0rPXYpJkJOX01BU0syKSA+PSB2KQotCQkJY29udGludWU7Ci0JCWVsc2UKLQkJCXsKLQkJCWlmICgoKCsrbnJwWzBdKSZCTl9NQVNLMikgIT0gMCkgY29udGludWU7Ci0JCQlpZiAoKCgrK25ycFsxXSkmQk5fTUFTSzIpICE9IDApIGNvbnRpbnVlOwotCQkJZm9yICh4PTI7ICgoKCsrbnJwW3hdKSZCTl9NQVNLMikgPT0gMCk7IHgrKykgOwotCQkJfQotCQl9Ci0JYm5fY29ycmVjdF90b3Aocik7Ci0JCi0JLyogbW9udC0+cmkgd2lsbCBiZSBhIG11bHRpcGxlIG9mIHRoZSB3b3JkIHNpemUgYW5kIGJlbG93IGNvZGUKLQkgKiBpcyBraW5kIG9mIEJOX3JzaGlmdChyZXQscixtb250LT5yaSkgZXF1aXZhbGVudCAqLwotCWlmIChyLT50b3AgPD0gcmkpCi0JCXsKLQkJcmV0LT50b3A9MDsKLQkJcmV0bj0xOwotCQlnb3RvIGVycjsKLQkJfQotCWFsPXItPnRvcC1yaTsKLQotIyBkZWZpbmUgQlJBTkNIX0ZSRUUgMQotIyBpZiBCUkFOQ0hfRlJFRQotCWlmIChibl93ZXhwYW5kKHJldCxyaSkgPT0gTlVMTCkgZ290byBlcnI7Ci0JeD0wLSgoKGFsLXJpKT4+KHNpemVvZihhbCkqOC0xKSkmMSk7Ci0JcmV0LT50b3A9eD0ocmkmfngpfChhbCZ4KTsJLyogbWluKHJpLGFsKSAqLwotCXJldC0+bmVnPXItPm5lZzsKLQotCXJwPXJldC0+ZDsKLQlhcD0mKHItPmRbcmldKTsKLQotCXsKLQlzaXplX3QgbTEsbTI7Ci0KLQl2PWJuX3N1Yl93b3JkcyhycCxhcCxucCxyaSk7Ci0JLyogdGhpcyAtLS0tLS0tLS0tLS0tLS0tXl4gd29ya3MgZXZlbiBpbiBhbDxyaSBjYXNlCi0JICogdGhhbmtzIHRvIHplYWxvdXMgemVyb2luZyBvZiB0b3Agb2YgdGhlIHZlY3RvciBpbiB0aGUKLQkgKiBiZWdpbm5pbmcuICovCi0KLQkvKiBpZiAoYWw9PXJpICYmICF2KSB8fCBhbD5yaSkgbnJwPXJwOyBlbHNlIG5ycD1hcDsgKi8KLQkvKiBpbiBvdGhlciB3b3JkcyBpZiBzdWJ0cmFjdGlvbiByZXN1bHQgaXMgcmVhbCwgdGhlbgotCSAqIHRyaWNrIHVuY29uZGl0aW9uYWwgbWVtY3B5IGJlbG93IHRvIHBlcmZvcm0gaW4tcGxhY2UKLQkgKiAicmVmcmVzaCIgaW5zdGVhZCBvZiBhY3R1YWwgY29weS4gKi8KLQltMT0wLShzaXplX3QpKCgoYWwtcmkpPj4oc2l6ZW9mKGFsKSo4LTEpKSYxKTsJLyogYWw8cmkgKi8KLQltMj0wLShzaXplX3QpKCgocmktYWwpPj4oc2l6ZW9mKGFsKSo4LTEpKSYxKTsJLyogYWw+cmkgKi8KLQltMXw9bTI7CQkJLyogKGFsIT1yaSkgKi8KLQltMXw9KDAtKHNpemVfdCl2KTsJLyogKGFsIT1yaSB8fCB2KSAqLwotCW0xJj1+bTI7CQkvKiAoYWwhPXJpIHx8IHYpICYmICFhbD5yaSAqLwotCW5ycD0oQk5fVUxPTkcgKikoKChzaXplX3QpcnAmfm0xKXwoKHNpemVfdClhcCZtMSkpOwotCX0KLQotCS8qICdpPHJpJyBpcyBjaG9zZW4gdG8gZWxpbWluYXRlIGRlcGVuZGVuY3kgb24gaW5wdXQgZGF0YSwgZXZlbgotCSAqIHRob3VnaCBpdCByZXN1bHRzIGluIHJlZHVuZGFudCBjb3B5IGluIGFsPHJpIGNhc2UuICovCi0JZm9yIChpPTAscmktPTQ7IGk8cmk7IGkrPTQpCi0JCXsKLQkJQk5fVUxPTkcgdDEsdDIsdDMsdDQ7Ci0JCQotCQl0MT1ucnBbaSswXTsKLQkJdDI9bnJwW2krMV07Ci0JCXQzPW5ycFtpKzJdOwlhcFtpKzBdPTA7Ci0JCXQ0PW5ycFtpKzNdOwlhcFtpKzFdPTA7Ci0JCXJwW2krMF09dDE7CWFwW2krMl09MDsKLQkJcnBbaSsxXT10MjsJYXBbaSszXT0wOwotCQlycFtpKzJdPXQzOwotCQlycFtpKzNdPXQ0OwotCQl9Ci0JZm9yIChyaSs9NDsgaTxyaTsgaSsrKQotCQlycFtpXT1ucnBbaV0sIGFwW2ldPTA7Ci0JYm5fY29ycmVjdF90b3Aocik7Ci0JYm5fY29ycmVjdF90b3AocmV0KTsKLSMgZWxzZQotCWlmIChibl93ZXhwYW5kKHJldCxhbCkgPT0gTlVMTCkgZ290byBlcnI7CisJaWYgKGJuX3dleHBhbmQocmV0LGFsKSA9PSBOVUxMKSByZXR1cm4oMCk7CiAJcmV0LT50b3A9YWw7CiAJcmV0LT5uZWc9ci0+bmVnOwogCkBAIC00OTcsOCArMzIzLDMwIEBACiAJYWwrPTQ7CiAJZm9yICg7IGk8YWw7IGkrKykKIAkJcnBbaV09YXBbaV07Ci0jIGVuZGlmCi0jZWxzZSAvKiAhTU9OVF9XT1JEICovIAorCisJaWYgKEJOX3VjbXAocmV0LCAmKG1vbnQtPk4pKSA+PSAwKQorCQl7CisJCWlmICghQk5fdXN1YihyZXQscmV0LCYobW9udC0+TikpKSByZXR1cm4oMCk7CisJCX0KKyNlbmRpZgorCWJuX2NoZWNrX3RvcChyZXQpOworCisJcmV0dXJuKDEpOworCX0KKyNlbmRpZgkvKiBNT05UX1dPUkQgKi8KKworaW50IEJOX2Zyb21fbW9udGdvbWVyeShCSUdOVU0gKnJldCwgY29uc3QgQklHTlVNICphLCBCTl9NT05UX0NUWCAqbW9udCwKKwkgICAgIEJOX0NUWCAqY3R4KQorCXsKKwlpbnQgcmV0bj0wOworI2lmZGVmIE1PTlRfV09SRAorCUJJR05VTSAqdDsKKworCUJOX0NUWF9zdGFydChjdHgpOworCWlmICgodCA9IEJOX0NUWF9nZXQoY3R4KSkgJiYgQk5fY29weSh0LGEpKQorCQlyZXRuID0gQk5fZnJvbV9tb250Z29tZXJ5X3dvcmQocmV0LHQsbW9udCk7CisJQk5fQ1RYX2VuZChjdHgpOworI2Vsc2UgLyogIU1PTlRfV09SRCAqLwogCUJJR05VTSAqdDEsKnQyOwogCiAJQk5fQ1RYX3N0YXJ0KGN0eCk7CkBAIC01MTUsMjEgKzM2MywxOCBAQAogCWlmICghQk5fbXVsKHQxLHQyLCZtb250LT5OLGN0eCkpIGdvdG8gZXJyOwogCWlmICghQk5fYWRkKHQyLGEsdDEpKSBnb3RvIGVycjsKIAlpZiAoIUJOX3JzaGlmdChyZXQsdDIsbW9udC0+cmkpKSBnb3RvIGVycjsKLSNlbmRpZiAvKiBNT05UX1dPUkQgKi8KIAotI2lmICFkZWZpbmVkKEJSQU5DSF9GUkVFKSB8fCBCUkFOQ0hfRlJFRT09MAogCWlmIChCTl91Y21wKHJldCwgJihtb250LT5OKSkgPj0gMCkKIAkJewogCQlpZiAoIUJOX3VzdWIocmV0LHJldCwmKG1vbnQtPk4pKSkgZ290byBlcnI7CiAJCX0KLSNlbmRpZgogCXJldG49MTsKIAlibl9jaGVja190b3AocmV0KTsKICBlcnI6CiAJQk5fQ1RYX2VuZChjdHgpOworI2VuZGlmIC8qIE1PTlRfV09SRCAqLwogCXJldHVybihyZXRuKTsKIAl9Ci0jZW5kaWYgLyogTU9OVF9GUk9NX1dPUkRfX19OT05fREVGQVVMVF8wXzlfOF9CVUlMRCAqLwogCiBCTl9NT05UX0NUWCAqQk5fTU9OVF9DVFhfbmV3KHZvaWQpCiAJewpAQCAtNTQ5LDExICszOTQsNyBAQAogCUJOX2luaXQoJihjdHgtPlJSKSk7CiAJQk5faW5pdCgmKGN0eC0+TikpOwogCUJOX2luaXQoJihjdHgtPk5pKSk7Ci0jaWYgMCAvKiBmb3IgT3BlblNTTCAwLjkuOSBtb250LT5uMCAqLwogCWN0eC0+bjBbMF0gPSBjdHgtPm4wWzFdID0gMDsKLSNlbHNlCi0JY3R4LT5uMCA9IDA7Ci0jZW5kaWYKIAljdHgtPmZsYWdzPTA7CiAJfQogCkBAIC01ODUsMjYgKzQyNiwyMiBAQAogCQlCSUdOVU0gdG1vZDsKIAkJQk5fVUxPTkcgYnVmWzJdOwogCi0JCW1vbnQtPnJpPShCTl9udW1fYml0cyhtb2QpKyhCTl9CSVRTMi0xKSkvQk5fQklUUzIqQk5fQklUUzI7Ci0JCUJOX3plcm8oUik7Ci0jaWYgMCAvKiBmb3IgT3BlblNTTCAwLjkuOSBtb250LT5uMCwgd291bGQgYmUgIiNpZiBkZWZpbmVkKE9QRU5TU0xfQk5fQVNNX01PTlQpICYmIChCTl9CSVRTMjw9MzIpIiwKLSAgICAgICAgIG9ubHkgY2VydGFpbiBCTl9CSVRTMjw9MzIgcGxhdGZvcm1zIGFjdHVhbGx5IG5lZWQgdGhpcyAqLwotCQlpZiAoIShCTl9zZXRfYml0KFIsMipCTl9CSVRTMikpKSBnb3RvIGVycjsJLyogUiAqLwotI2Vsc2UKLQkJaWYgKCEoQk5fc2V0X2JpdChSLEJOX0JJVFMyKSkpIGdvdG8gZXJyOwkvKiBSICovCi0jZW5kaWYKLQotCQlidWZbMF09bW9kLT5kWzBdOyAvKiB0bW9kID0gTiBtb2Qgd29yZCBzaXplICovCi0JCWJ1ZlsxXT0wOwotCiAJCUJOX2luaXQoJnRtb2QpOwogCQl0bW9kLmQ9YnVmOwotCQl0bW9kLnRvcCA9IGJ1ZlswXSAhPSAwID8gMSA6IDA7CiAJCXRtb2QuZG1heD0yOwogCQl0bW9kLm5lZz0wOwogCi0jaWYgMCAvKiBmb3IgT3BlblNTTCAwLjkuOSBtb250LT5uMCwgd291bGQgYmUgIiNpZiBkZWZpbmVkKE9QRU5TU0xfQk5fQVNNX01PTlQpICYmIChCTl9CSVRTMjw9MzIpIjsKLSAgICAgICAgIG9ubHkgY2VydGFpbiBCTl9CSVRTMjw9MzIgcGxhdGZvcm1zIGFjdHVhbGx5IG5lZWQgdGhpcyAqLworCQltb250LT5yaT0oQk5fbnVtX2JpdHMobW9kKSsoQk5fQklUUzItMSkpL0JOX0JJVFMyKkJOX0JJVFMyOworCisjaWYgZGVmaW5lZChPUEVOU1NMX0JOX0FTTV9NT05UKSAmJiAoQk5fQklUUzI8PTMyKQorCQkvKiBPbmx5IGNlcnRhaW4gQk5fQklUUzI8PTMyIHBsYXRmb3JtcyBhY3R1YWxseSBtYWtlIHVzZSBvZgorCQkgKiBuMFsxXSwgYW5kIHdlIGNvdWxkIHVzZSB0aGUgI2Vsc2UgY2FzZSAod2l0aCBhIHNob3J0ZXIgUgorCQkgKiB2YWx1ZSkgZm9yIHRoZSBvdGhlcnMuICBIb3dldmVyLCBjdXJyZW50bHkgb25seSB0aGUgYXNzZW1ibGVyCisJCSAqIGZpbGVzIGRvIGtub3cgd2hpY2ggaXMgd2hpY2guICovCisKKwkJQk5femVybyhSKTsKKwkJaWYgKCEoQk5fc2V0X2JpdChSLDIqQk5fQklUUzIpKSkgZ290byBlcnI7CisKIAkJCQkJCQkJdG1vZC50b3A9MDsKIAkJaWYgKChidWZbMF0gPSBtb2QtPmRbMF0pKQkJCXRtb2QudG9wPTE7CiAJCWlmICgoYnVmWzFdID0gbW9kLT50b3A+MSA/IG1vZC0+ZFsxXSA6IDApKQl0bW9kLnRvcD0yOwpAQCAtNjMyLDYgKzQ2OSwxMiBAQAogCQltb250LT5uMFswXSA9IChSaS0+dG9wID4gMCkgPyBSaS0+ZFswXSA6IDA7CiAJCW1vbnQtPm4wWzFdID0gKFJpLT50b3AgPiAxKSA/IFJpLT5kWzFdIDogMDsKICNlbHNlCisJCUJOX3plcm8oUik7CisJCWlmICghKEJOX3NldF9iaXQoUixCTl9CSVRTMikpKSBnb3RvIGVycjsJLyogUiAqLworCisJCWJ1ZlswXT1tb2QtPmRbMF07IC8qIHRtb2QgPSBOIG1vZCB3b3JkIHNpemUgKi8KKwkJYnVmWzFdPTA7CisJCXRtb2QudG9wID0gYnVmWzBdICE9IDAgPyAxIDogMDsKIAkJCQkJCQkvKiBSaSA9IFJeLTEgbW9kIE4qLwogCQlpZiAoKEJOX21vZF9pbnZlcnNlKFJpLFIsJnRtb2QsY3R4KSkgPT0gTlVMTCkKIAkJCWdvdG8gZXJyOwpAQCAtNjQ3LDEyICs0OTAsOCBAQAogCQlpZiAoIUJOX2RpdihSaSxOVUxMLFJpLCZ0bW9kLGN0eCkpIGdvdG8gZXJyOwogCQkvKiBOaSA9IChSKlJpLTEpL04sCiAJCSAqIGtlZXAgb25seSBsZWFzdCBzaWduaWZpY2FudCB3b3JkOiAqLwotIyBpZiAwIC8qIGZvciBPcGVuU1NMIDAuOS45IG1vbnQtPm4wICovCiAJCW1vbnQtPm4wWzBdID0gKFJpLT50b3AgPiAwKSA/IFJpLT5kWzBdIDogMDsKIAkJbW9udC0+bjBbMV0gPSAwOwotIyBlbHNlCi0JCW1vbnQtPm4wID0gKFJpLT50b3AgPiAwKSA/IFJpLT5kWzBdIDogMDsKLSMgZW5kaWYKICNlbmRpZgogCQl9CiAjZWxzZSAvKiAhTU9OVF9XT1JEICovCkBAIC02ODksMTIgKzUyOCw4IEBACiAJaWYgKCFCTl9jb3B5KCYodG8tPk4pLCYoZnJvbS0+TikpKSByZXR1cm4gTlVMTDsKIAlpZiAoIUJOX2NvcHkoJih0by0+TmkpLCYoZnJvbS0+TmkpKSkgcmV0dXJuIE5VTEw7CiAJdG8tPnJpPWZyb20tPnJpOwotI2lmIDAgLyogZm9yIE9wZW5TU0wgMC45LjkgbW9udC0+bjAgKi8KIAl0by0+bjBbMF09ZnJvbS0+bjBbMF07CiAJdG8tPm4wWzFdPWZyb20tPm4wWzFdOwotI2Vsc2UKLQl0by0+bjA9ZnJvbS0+bjA7Ci0jZW5kaWYKIAlyZXR1cm4odG8pOwogCX0KIApkaWZmIC0tZ2l0IGEvY3J5cHRvL2JuL2JuX29wdC5jIGIvY3J5cHRvL2JuL2JuX29wdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMWNiYjM4Li4wMDAwMDAwCi0tLSBhL2NyeXB0by9ibi9ibl9vcHQuYworKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8qIGNyeXB0by9ibi9ibl9vcHQuYyAqLwotLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgotICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgotICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgotICogCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKLSAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKLSAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgotICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcwotICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0gKiAKLSAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCi0gKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCi0gKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCi0gKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgotICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCi0gKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5Ci0gKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgotICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5Ci0gKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KLSAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAotICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKLSAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqIAotICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKLSAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQotICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQotICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KLSAqLwotCi0jaWZuZGVmIEJOX0RFQlVHCi0jIHVuZGVmIE5ERUJVRyAvKiBhdm9pZCBjb25mbGljdGluZyBkZWZpbml0aW9ucyAqLwotIyBkZWZpbmUgTkRFQlVHCi0jZW5kaWYKLQotI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPGxpbWl0cy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSAiY3J5cHRsaWIuaCIKLSNpbmNsdWRlICJibl9sY2wuaCIKLQotY2hhciAqQk5fb3B0aW9ucyh2b2lkKQotCXsKLQlzdGF0aWMgaW50IGluaXQ9MDsKLQlzdGF0aWMgY2hhciBkYXRhWzE2XTsKLQotCWlmICghaW5pdCkKLQkJewotCQlpbml0Kys7Ci0jaWZkZWYgQk5fTExPTkcKLQkJQklPX3NucHJpbnRmKGRhdGEsc2l6ZW9mIGRhdGEsImJuKCVkLCVkKSIsCi0JCQkgICAgIChpbnQpc2l6ZW9mKEJOX1VMTE9ORykqOCwoaW50KXNpemVvZihCTl9VTE9ORykqOCk7Ci0jZWxzZQotCQlCSU9fc25wcmludGYoZGF0YSxzaXplb2YgZGF0YSwiYm4oJWQsJWQpIiwKLQkJCSAgICAgKGludClzaXplb2YoQk5fVUxPTkcpKjgsKGludClzaXplb2YoQk5fVUxPTkcpKjgpOwotI2VuZGlmCi0JCX0KLQlyZXR1cm4oZGF0YSk7Ci0JfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2JuL2JuX3ByaW50LmMgYi9jcnlwdG8vYm4vYm5fcHJpbnQuYwppbmRleCA4MTBkZGUzLi5iZWJiNDY2IDEwMDY0NAotLS0gYS9jcnlwdG8vYm4vYm5fcHJpbnQuYworKysgYi9jcnlwdG8vYm4vYm5fcHJpbnQuYwpAQCAtMjk0LDYgKzI5NCwyNyBAQAogCXJldHVybigwKTsKIAl9CiAKK2ludCBCTl9hc2MyYm4oQklHTlVNICoqYm4sIGNvbnN0IGNoYXIgKmEpCisJeworCWNvbnN0IGNoYXIgKnAgPSBhOworCWlmICgqcCA9PSAnLScpCisJCXArKzsKKworCWlmIChwWzBdID09ICcwJyAmJiAocFsxXSA9PSAnWCcgfHwgcFsxXSA9PSAneCcpKQorCQl7CQkKKwkJaWYgKCFCTl9oZXgyYm4oYm4sIHAgKyAyKSkKKwkJCXJldHVybiAwOworCQl9CisJZWxzZQorCQl7CisJCWlmICghQk5fZGVjMmJuKGJuLCBwKSkKKwkJCXJldHVybiAwOworCQl9CisJaWYgKCphID09ICctJykKKwkJKCpibiktPm5lZyA9IDE7CisJcmV0dXJuIDE7CisJfQorCiAjaWZuZGVmIE9QRU5TU0xfTk9fQklPCiAjaWZuZGVmIE9QRU5TU0xfTk9fRlBfQVBJCiBpbnQgQk5fcHJpbnRfZnAoRklMRSAqZnAsIGNvbnN0IEJJR05VTSAqYSkKZGlmZiAtLWdpdCBhL2NyeXB0by9ibi9ibl94OTMxcC5jIGIvY3J5cHRvL2JuL2JuX3g5MzFwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0YzVjODcuLjAwMDAwMDAKLS0tIGEvY3J5cHRvL2JuL2JuX3g5MzFwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNzIgKzAsMCBAQAotLyogYm5feDkzMXAuYyAqLwotLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCi0gKiBwcm9qZWN0IDIwMDUuCi0gKi8KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0gKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0gKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0gKgotICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0gKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgotICoKLSAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotICoKLSAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSAqICAgIGFja25vd2xlZGdtZW50OgotICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0gKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKgotICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCi0gKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCi0gKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotCi0vKiBYOS4zMSByb3V0aW5lcyBmb3IgcHJpbWUgZGVyaXZhdGlvbiAqLwotCi0vKiBYOS4zMSBwcmltZSBkZXJpdmF0aW9uLiBUaGlzIGlzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHByaW1lcyBwaQotICogKHAxLCBwMiwgcTEsIHEyKSBmcm9tIGEgcGFyYW1ldGVyIFhwaSBieSBjaGVja2luZyBzdWNjZXNzaXZlIG9kZAotICogaW50ZWdlcnMuCi0gKi8KLQotc3RhdGljIGludCBibl94OTMxX2Rlcml2ZV9waShCSUdOVU0gKnBpLCBjb25zdCBCSUdOVU0gKlhwaSwgQk5fQ1RYICpjdHgsCi0JCQlCTl9HRU5DQiAqY2IpCi0JewotCWludCBpID0gMDsKLQlpZiAoIUJOX2NvcHkocGksIFhwaSkpCi0JCXJldHVybiAwOwotCWlmICghQk5faXNfb2RkKHBpKSAmJiAhQk5fYWRkX3dvcmQocGksIDEpKQotCQlyZXR1cm4gMDsKLQlmb3IoOzspCi0JCXsKLQkJaSsrOwotCQlCTl9HRU5DQl9jYWxsKGNiLCAwLCBpKTsKLQkJLyogTkIgMjcgTVIgaXMgc3BlY2lmaWNlZCBpbiBYOS4zMSAqLwotCQlpZiAoQk5faXNfcHJpbWVfZmFzdHRlc3RfZXgocGksIDI3LCBjdHgsIDEsIGNiKSkKLQkJCWJyZWFrOwotCQlpZiAoIUJOX2FkZF93b3JkKHBpLCAyKSkKLQkJCXJldHVybiAwOwotCQl9Ci0JQk5fR0VOQ0JfY2FsbChjYiwgMiwgaSk7Ci0JcmV0dXJuIDE7Ci0JfQotCi0vKiBUaGlzIGlzIHRoZSBtYWluIFg5LjMxIHByaW1lIGRlcml2YXRpb24gZnVuY3Rpb24uIEZyb20gcGFyYW1ldGVycwotICogWHAxLCBYcDIgYW5kIFhwIGRlcml2ZSB0aGUgcHJpbWUgcC4gSWYgdGhlIHBhcmFtZXRlcnMgcDEgb3IgcDIgYXJlCi0gKiBub3QgTlVMTCB0aGV5IHdpbGwgYmUgcmV0dXJuZWQgdG9vOiB0aGlzIGlzIG5lZWRlZCBmb3IgdGVzdGluZy4KLSAqLwotCi1pbnQgQk5fWDkzMV9kZXJpdmVfcHJpbWVfZXgoQklHTlVNICpwLCBCSUdOVU0gKnAxLCBCSUdOVU0gKnAyLAotCQkJY29uc3QgQklHTlVNICpYcCwgY29uc3QgQklHTlVNICpYcDEsIGNvbnN0IEJJR05VTSAqWHAyLAotCQkJY29uc3QgQklHTlVNICplLCBCTl9DVFggKmN0eCwgQk5fR0VOQ0IgKmNiKQotCXsKLQlpbnQgcmV0ID0gMDsKLQotCUJJR05VTSAqdCwgKnAxcDIsICpwbTE7Ci0KLQkvKiBPbmx5IGV2ZW4gZSBzdXBwb3J0ZWQgKi8KLQlpZiAoIUJOX2lzX29kZChlKSkKLQkJcmV0dXJuIDA7Ci0KLQlCTl9DVFhfc3RhcnQoY3R4KTsKLQlpZiAoIXAxKQotCQlwMSA9IEJOX0NUWF9nZXQoY3R4KTsKLQotCWlmICghcDIpCi0JCXAyID0gQk5fQ1RYX2dldChjdHgpOwotCi0JdCA9IEJOX0NUWF9nZXQoY3R4KTsKLQotCXAxcDIgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0KLQlwbTEgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0KLQlpZiAoIWJuX3g5MzFfZGVyaXZlX3BpKHAxLCBYcDEsIGN0eCwgY2IpKQotCQlnb3RvIGVycjsKLQotCWlmICghYm5feDkzMV9kZXJpdmVfcGkocDIsIFhwMiwgY3R4LCBjYikpCi0JCWdvdG8gZXJyOwotCi0JaWYgKCFCTl9tdWwocDFwMiwgcDEsIHAyLCBjdHgpKQotCQlnb3RvIGVycjsKLQotCS8qIEZpcnN0IHNldCBwIHRvIHZhbHVlIG9mIFJwICovCi0KLQlpZiAoIUJOX21vZF9pbnZlcnNlKHAsIHAyLCBwMSwgY3R4KSkKLQkJZ290byBlcnI7Ci0KLQlpZiAoIUJOX211bChwLCBwLCBwMiwgY3R4KSkKLQkJZ290byBlcnI7Ci0KLQlpZiAoIUJOX21vZF9pbnZlcnNlKHQsIHAxLCBwMiwgY3R4KSkKLQkJZ290byBlcnI7Ci0KLQlpZiAoIUJOX211bCh0LCB0LCBwMSwgY3R4KSkKLQkJZ290byBlcnI7Ci0KLQlpZiAoIUJOX3N1YihwLCBwLCB0KSkKLQkJZ290byBlcnI7Ci0KLQlpZiAocC0+bmVnICYmICFCTl9hZGQocCwgcCwgcDFwMikpCi0JCWdvdG8gZXJyOwotCi0JLyogcCBub3cgZXF1YWxzIFJwICovCi0KLQlpZiAoIUJOX21vZF9zdWIocCwgcCwgWHAsIHAxcDIsIGN0eCkpCi0JCWdvdG8gZXJyOwotCi0JaWYgKCFCTl9hZGQocCwgcCwgWHApKQotCQlnb3RvIGVycjsKLQotCS8qIHAgbm93IGVxdWFscyBZcDAgKi8KLQotCWZvciAoOzspCi0JCXsKLQkJaW50IGkgPSAxOwotCQlCTl9HRU5DQl9jYWxsKGNiLCAwLCBpKyspOwotCQlpZiAoIUJOX2NvcHkocG0xLCBwKSkKLQkJCWdvdG8gZXJyOwotCQlpZiAoIUJOX3N1Yl93b3JkKHBtMSwgMSkpCi0JCQlnb3RvIGVycjsKLQkJaWYgKCFCTl9nY2QodCwgcG0xLCBlLCBjdHgpKQotCQkJZ290byBlcnI7Ci0JCWlmIChCTl9pc19vbmUodCkKLQkJLyogWDkuMzEgc3BlY2lmaWVzIDggTVIgYW5kIDEgTHVjYXMgdGVzdCBvciBhbnkgcHJpbWUgdGVzdAotCQkgKiBvZmZlcmluZyBzaW1pbGFyIG9yIGJldHRlciBndWFyYW50ZWVzIDUwIE1SIGlzIGNvbnNpZGVyYWJseSAKLQkJICogYmV0dGVyLgotCQkgKi8KLQkJCSYmIEJOX2lzX3ByaW1lX2Zhc3R0ZXN0X2V4KHAsIDUwLCBjdHgsIDEsIGNiKSkKLQkJCWJyZWFrOwotCQlpZiAoIUJOX2FkZChwLCBwLCBwMXAyKSkKLQkJCWdvdG8gZXJyOwotCQl9Ci0KLQlCTl9HRU5DQl9jYWxsKGNiLCAzLCAwKTsKLQotCXJldCA9IDE7Ci0KLQllcnI6Ci0KLQlCTl9DVFhfZW5kKGN0eCk7Ci0KLQlyZXR1cm4gcmV0OwotCX0KLQotLyogR2VuZXJhdGUgcGFpciBvZiBwYXJhbXRlcnMgWHAsIFhxIGZvciBYOS4zMSBwcmltZSBnZW5lcmF0aW9uLgotICogTm90ZTogbmJpdHMgcGFyYW10ZXIgaXMgc3VtIG9mIG51bWJlciBvZiBiaXRzIGluIGJvdGguCi0gKi8KLQotaW50IEJOX1g5MzFfZ2VuZXJhdGVfWHBxKEJJR05VTSAqWHAsIEJJR05VTSAqWHEsIGludCBuYml0cywgQk5fQ1RYICpjdHgpCi0JewotCUJJR05VTSAqdDsKLQlpbnQgaTsKLQkvKiBOdW1iZXIgb2YgYml0cyBmb3IgZWFjaCBwcmltZSBpcyBvZiB0aGUgZm9ybQotCSAqIDUxMisxMjhzIGZvciBzID0gMCwgMSwgLi4uCi0JICovCi0JaWYgKChuYml0cyA8IDEwMjQpIHx8IChuYml0cyAmIDB4ZmYpKQotCQlyZXR1cm4gMDsKLQluYml0cyA+Pj0gMTsKLQkvKiBUaGUgcmFuZG9tIHZhbHVlIFhwIG11c3QgYmUgYmV0d2VlbiBzcXJ0KDIpICogMl4obmJpdHMtMSkgYW5kCi0JICogMl5uYml0cyAtIDEuIEJ5IHNldHRpbmcgdGhlIHRvcCB0d28gYml0cyB3ZSBlbnN1cmUgdGhhdCB0aGUgbG93ZXIKLQkgKiBib3VuZCBpcyBleGNlZWRlZC4KLQkgKi8KLQlpZiAoIUJOX3JhbmQoWHAsIG5iaXRzLCAxLCAwKSkKLQkJcmV0dXJuIDA7Ci0KLQlCTl9DVFhfc3RhcnQoY3R4KTsKLQl0ID0gQk5fQ1RYX2dldChjdHgpOwotCi0JZm9yIChpID0gMDsgaSA8IDEwMDA7IGkrKykKLQkJewotCQlpZiAoIUJOX3JhbmQoWHEsIG5iaXRzLCAxLCAwKSkKLQkJCXJldHVybiAwOwotCQkvKiBDaGVjayB0aGF0IHxYcCAtIFhxfCA+IDJeKG5iaXRzIC0gMTAwKSAqLwotCQlCTl9zdWIodCwgWHAsIFhxKTsKLQkJaWYgKEJOX251bV9iaXRzKHQpID4gKG5iaXRzIC0gMTAwKSkKLQkJCWJyZWFrOwotCQl9Ci0KLQlCTl9DVFhfZW5kKGN0eCk7Ci0KLQlpZiAoaSA8IDEwMDApCi0JCXJldHVybiAxOwotCi0JcmV0dXJuIDA7Ci0KLQl9Ci0KLS8qIEdlbmVyYXRlIHByaW1lcyB1c2luZyBYOS4zMSBhbGdvcml0aG0uIE9mIHRoZSB2YWx1ZXMgcCwgcDEsIHAyLCBYcDEKLSAqIGFuZCBYcDIgb25seSAncCcgbmVlZHMgdG8gYmUgbm9uLU5VTEwuIElmIGFueSBvZiB0aGUgb3RoZXJzIGFyZSBub3QgTlVMTAotICogdGhlIHJlbGV2YW50IHBhcmFtZXRlciB3aWxsIGJlIHN0b3JlZCBpbiBpdC4KLSAqCi0gKiBEdWUgdG8gdGhlIGZhY3QgdGhhdCB8WHAgLSBYcXwgPiAyXihuYml0cyAtIDEwMCkgbXVzdCBiZSBzYXRpc2ZpZWQgWHAgYW5kIFhxCi0gKiBhcmUgZ2VuZXJhdGVkIHVzaW5nIHRoZSBwcmV2aW91cyBmdW5jdGlvbiBhbmQgc3VwcGxpZWQgYXMgaW5wdXQuCi0gKi8KLQotaW50IEJOX1g5MzFfZ2VuZXJhdGVfcHJpbWVfZXgoQklHTlVNICpwLCBCSUdOVU0gKnAxLCBCSUdOVU0gKnAyLAotCQkJQklHTlVNICpYcDEsIEJJR05VTSAqWHAyLAotCQkJY29uc3QgQklHTlVNICpYcCwKLQkJCWNvbnN0IEJJR05VTSAqZSwgQk5fQ1RYICpjdHgsCi0JCQlCTl9HRU5DQiAqY2IpCi0JewotCWludCByZXQgPSAwOwotCi0JQk5fQ1RYX3N0YXJ0KGN0eCk7Ci0JaWYgKCFYcDEpCi0JCVhwMSA9IEJOX0NUWF9nZXQoY3R4KTsKLQlpZiAoIVhwMikKLQkJWHAyID0gQk5fQ1RYX2dldChjdHgpOwotCi0JaWYgKCFCTl9yYW5kKFhwMSwgMTAxLCAwLCAwKSkKLQkJZ290byBlcnJvcjsKLQlpZiAoIUJOX3JhbmQoWHAyLCAxMDEsIDAsIDApKQotCQlnb3RvIGVycm9yOwotCWlmICghQk5fWDkzMV9kZXJpdmVfcHJpbWVfZXgocCwgcDEsIHAyLCBYcCwgWHAxLCBYcDIsIGUsIGN0eCwgY2IpKQotCQlnb3RvIGVycm9yOwotCi0JcmV0ID0gMTsKLQotCWVycm9yOgotCUJOX0NUWF9lbmQoY3R4KTsKLQotCXJldHVybiByZXQ7Ci0KLQl9Ci0KZGlmZiAtLWdpdCBhL2NyeXB0by9ibi9ibnRlc3QuYyBiL2NyeXB0by9ibi9ibnRlc3QuYwppbmRleCBkNDFkYWFjLi4wY2Q5OWM1IDEwMDY0NAotLS0gYS9jcnlwdG8vYm4vYm50ZXN0LmMKKysrIGIvY3J5cHRvL2JuL2JudGVzdC5jCkBAIC00ODYsNyArNDg2LDcgQEAKIAkJcmV0dXJuOwogCQl9CiAjZW5kaWYKLQlCSU9fcHJpbnRmKGJwLCIlbFgiLHcpOworCUJJT19wcmludGYoYnAsQk5fSEVYX0ZNVDEsdyk7CiAJfQogCiBpbnQgdGVzdF9kaXZfd29yZChCSU8gKmJwKQpAQCAtNzMyLDYgKzczMiw4IEBACiAJQk5faW5pdCgmbik7CiAKIAltb250PUJOX01PTlRfQ1RYX25ldygpOworCWlmIChtb250ID09IE5VTEwpCisJCXJldHVybiAwOwogCiAJQk5fYm50ZXN0X3JhbmQoJmEsMTAwLDAsMCk7IC8qKi8KIAlCTl9ibnRlc3RfcmFuZCgmYiwxMDAsMCwwKTsgLyoqLwpAQCAtMTExNiw4ICsxMTE4LDggQEAKIAl7CiAJQklHTlVNICphLCpiWzJdLCpjLCpkLCplOwogCWludCBpLCBqLCByZXQgPSAwOwotCXVuc2lnbmVkIGludCBwMFtdID0gezE2Myw3LDYsMywwfTsKLQl1bnNpZ25lZCBpbnQgcDFbXSA9IHsxOTMsMTUsMH07CisJaW50IHAwW10gPSB7MTYzLDcsNiwzLDAsLTF9OworCWludCBwMVtdID0gezE5MywxNSwwLC0xfTsKIAogCWE9Qk5fbmV3KCk7CiAJYlswXT1CTl9uZXcoKTsKQEAgLTExNzQsOCArMTE3Niw4IEBACiAJewogCUJJR05VTSAqYSwqYlsyXSwqYywqZCwqZSwqZiwqZywqaDsKIAlpbnQgaSwgaiwgcmV0ID0gMDsKLQl1bnNpZ25lZCBpbnQgcDBbXSA9IHsxNjMsNyw2LDMsMH07Ci0JdW5zaWduZWQgaW50IHAxW10gPSB7MTkzLDE1LDB9OworCWludCBwMFtdID0gezE2Myw3LDYsMywwLC0xfTsKKwlpbnQgcDFbXSA9IHsxOTMsMTUsMCwtMX07CiAKIAlhPUJOX25ldygpOwogCWJbMF09Qk5fbmV3KCk7CkBAIC0xMjQ1LDggKzEyNDcsOCBAQAogCXsKIAlCSUdOVU0gKmEsKmJbMl0sKmMsKmQ7CiAJaW50IGksIGosIHJldCA9IDA7Ci0JdW5zaWduZWQgaW50IHAwW10gPSB7MTYzLDcsNiwzLDB9OwotCXVuc2lnbmVkIGludCBwMVtdID0gezE5MywxNSwwfTsKKwlpbnQgcDBbXSA9IHsxNjMsNyw2LDMsMCwtMX07CisJaW50IHAxW10gPSB7MTkzLDE1LDAsLTF9OwogCiAJYT1CTl9uZXcoKTsKIAliWzBdPUJOX25ldygpOwpAQCAtMTMwNCw4ICsxMzA2LDggQEAKIAl7CiAJQklHTlVNICphLCpiWzJdLCpjLCpkOwogCWludCBpLCBqLCByZXQgPSAwOwotCXVuc2lnbmVkIGludCBwMFtdID0gezE2Myw3LDYsMywwfTsKLQl1bnNpZ25lZCBpbnQgcDFbXSA9IHsxOTMsMTUsMH07CisJaW50IHAwW10gPSB7MTYzLDcsNiwzLDAsLTF9OworCWludCBwMVtdID0gezE5MywxNSwwLC0xfTsKIAogCWE9Qk5fbmV3KCk7CiAJYlswXT1CTl9uZXcoKTsKQEAgLTEzNTksOCArMTM2MSw4IEBACiAJewogCUJJR05VTSAqYSwqYlsyXSwqYywqZCwqZSwqZjsKIAlpbnQgaSwgaiwgcmV0ID0gMDsKLQl1bnNpZ25lZCBpbnQgcDBbXSA9IHsxNjMsNyw2LDMsMH07Ci0JdW5zaWduZWQgaW50IHAxW10gPSB7MTkzLDE1LDB9OworCWludCBwMFtdID0gezE2Myw3LDYsMywwLC0xfTsKKwlpbnQgcDFbXSA9IHsxOTMsMTUsMCwtMX07CiAKIAlhPUJOX25ldygpOwogCWJbMF09Qk5fbmV3KCk7CkBAIC0xNDIyLDggKzE0MjQsOCBAQAogCXsKIAlCSUdOVU0gKmEsKmJbMl0sKmMsKmQsKmUsKmY7CiAJaW50IGksIGosIHJldCA9IDA7Ci0JdW5zaWduZWQgaW50IHAwW10gPSB7MTYzLDcsNiwzLDB9OwotCXVuc2lnbmVkIGludCBwMVtdID0gezE5MywxNSwwfTsKKwlpbnQgcDBbXSA9IHsxNjMsNyw2LDMsMCwtMX07CisJaW50IHAxW10gPSB7MTkzLDE1LDAsLTF9OwogCiAJYT1CTl9uZXcoKTsKIAliWzBdPUJOX25ldygpOwpAQCAtMTQ5Myw4ICsxNDk1LDggQEAKIAl7CiAJQklHTlVNICphLCpiWzJdLCpjLCpkLCplLCpmOwogCWludCBpLCBqLCByZXQgPSAwOwotCXVuc2lnbmVkIGludCBwMFtdID0gezE2Myw3LDYsMywwfTsKLQl1bnNpZ25lZCBpbnQgcDFbXSA9IHsxOTMsMTUsMH07CisJaW50IHAwW10gPSB7MTYzLDcsNiwzLDAsLTF9OworCWludCBwMVtdID0gezE5MywxNSwwLC0xfTsKIAogCWE9Qk5fbmV3KCk7CiAJYlswXT1CTl9uZXcoKTsKQEAgLTE1NTIsOCArMTU1NCw4IEBACiAJewogCUJJR05VTSAqYSwqYlsyXSwqYywqZCwqZTsKIAlpbnQgaSwgaiwgcyA9IDAsIHQsIHJldCA9IDA7Ci0JdW5zaWduZWQgaW50IHAwW10gPSB7MTYzLDcsNiwzLDB9OwotCXVuc2lnbmVkIGludCBwMVtdID0gezE5MywxNSwwfTsKKwlpbnQgcDBbXSA9IHsxNjMsNyw2LDMsMCwtMX07CisJaW50IHAxW10gPSB7MTkzLDE1LDAsLTF9OwogCiAJYT1CTl9uZXcoKTsKIAliWzBdPUJOX25ldygpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2JuL2V4cHRlc3QuYyBiL2NyeXB0by9ibi9leHB0ZXN0LmMKaW5kZXggZjU5OGEwNy4uMDc0YThlOCAxMDA2NDQKLS0tIGEvY3J5cHRvL2JuL2V4cHRlc3QuYworKysgYi9jcnlwdG8vYm4vZXhwdGVzdC5jCkBAIC0xNjMsNyArMTYzLDcgQEAKIAkJICAJewogCQkJaWYgKEJOX2NtcChyX3NpbXBsZSxyX21vbnQpICE9IDApCiAJCQkJcHJpbnRmKCJcbnNpbXBsZSBhbmQgbW9udCByZXN1bHRzIGRpZmZlclxuIik7Ci0JCQlpZiAoQk5fY21wKHJfc2ltcGxlLHJfbW9udCkgIT0gMCkKKwkJCWlmIChCTl9jbXAocl9zaW1wbGUscl9tb250X2NvbnN0KSAhPSAwKQogCQkJCXByaW50ZigiXG5zaW1wbGUgYW5kIG1vbnQgY29uc3QgdGltZSByZXN1bHRzIGRpZmZlclxuIik7CiAJCQlpZiAoQk5fY21wKHJfc2ltcGxlLHJfcmVjcCkgIT0gMCkKIAkJCQlwcmludGYoIlxuc2ltcGxlIGFuZCByZWNwIHJlc3VsdHMgZGlmZmVyXG4iKTsKQEAgLTE4Nyw3ICsxODcsNyBAQAogCUJOX2ZyZWUoYik7CiAJQk5fZnJlZShtKTsKIAlCTl9DVFhfZnJlZShjdHgpOwotCUVSUl9yZW1vdmVfc3RhdGUoMCk7CisJRVJSX3JlbW92ZV90aHJlYWRfc3RhdGUoTlVMTCk7CiAJQ1JZUFRPX21lbV9sZWFrcyhvdXQpOwogCUJJT19mcmVlKG91dCk7CiAJcHJpbnRmKCIgZG9uZVxuIik7CmRpZmYgLS1naXQgYS9jcnlwdG8vYnVmZmVyL01ha2VmaWxlIGIvY3J5cHRvL2J1ZmZlci9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWUwZjQ2ZS4uMDAwMDAwMAotLS0gYS9jcnlwdG8vYnVmZmVyL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotIwotIyBPcGVuU1NML2NyeXB0by9idWZmZXIvTWFrZWZpbGUKLSMKLQotRElSPQlidWZmZXIKLVRPUD0JLi4vLi4KLUNDPQljYwotSU5DTFVERVM9IC1JLi4gLUkkKFRPUCkgLUkuLi8uLi9pbmNsdWRlCi1DRkxBRz0tZwotTUFLRUZJTEU9CU1ha2VmaWxlCi1BUj0JCWFyIHIKLQotQ0ZMQUdTPSAkKElOQ0xVREVTKSAkKENGTEFHKQotCi1HRU5FUkFMPU1ha2VmaWxlCi1URVNUPQotQVBQUz0KLQotTElCPSQoVE9QKS9saWJjcnlwdG8uYQotTElCU1JDPSBidWZmZXIuYyBidWZfc3RyLmMgYnVmX2Vyci5jCi1MSUJPQko9IGJ1ZmZlci5vIGJ1Zl9zdHIubyBidWZfZXJyLm8KLQotU1JDPSAkKExJQlNSQykKLQotRVhIRUFERVI9IGJ1ZmZlci5oCi1IRUFERVI9CSQoRVhIRUFERVIpCi0KLUFMTD0gICAgJChHRU5FUkFMKSAkKFNSQykgJChIRUFERVIpCi0KLXRvcDoKLQkoY2QgLi4vLi47ICQoTUFLRSkgRElSUz1jcnlwdG8gU0RJUlM9JChESVIpIHN1Yl9hbGwpCi0KLWFsbDoJbGliCi0KLWxpYjoJJChMSUJPQkopCi0JJChBUlgpICQoTElCKSAkKExJQk9CSikKLQkkKFJBTkxJQikgJChMSUIpIHx8IGVjaG8gTmV2ZXIgbWluZC4KLQlAdG91Y2ggbGliCi0KLWZpbGVzOgotCSQoUEVSTCkgJChUT1ApL3V0aWwvZmlsZXMucGwgTWFrZWZpbGUgPj4gJChUT1ApL01JTkZPCi0KLWxpbmtzOgotCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9pbmNsdWRlL29wZW5zc2wgJChFWEhFQURFUikKLQlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vdGVzdCAkKFRFU1QpCi0JQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL2FwcHMgJChBUFBTKQotCi1pbnN0YWxsOgotCUBbIC1uICIkKElOU1RBTExUT1ApIiBdICMgc2hvdWxkIGJlIHNldCBieSB0b3AgTWFrZWZpbGUuLi4KLQlAaGVhZGVybGlzdD0iJChFWEhFQURFUikiOyBmb3IgaSBpbiAkJGhlYWRlcmxpc3QgOyBcCi0JZG8gIFwKLQkoY3AgJCRpICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpOyBcCi0JY2htb2QgNjQ0ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpICk7IFwKLQlkb25lOwotCi10YWdzOgotCWN0YWdzICQoU1JDKQotCi10ZXN0czoKLQotbGludDoKLQlsaW50IC1ETElOVCAkKElOQ0xVREVTKSAkKFNSQyk+Zmx1ZmYKLQotZGVwZW5kOgotCUBbIC1uICIkKE1BS0VERVBFTkQpIiBdICMgc2hvdWxkIGJlIHNldCBieSB1cHBlciBNYWtlZmlsZS4uLgotCSQoTUFLRURFUEVORCkgLS0gJChDRkxBRykgJChJTkNMVURFUykgJChERVBGTEFHKSAtLSAkKFBST0dTKSAkKExJQlNSQykKLQotZGNsZWFuOgotCSQoUEVSTCkgLXBlICdpZiAoL14jIERPIE5PVCBERUxFVEUgVEhJUyBMSU5FLykge3ByaW50OyBleGl0KDApO30nICQoTUFLRUZJTEUpID5NYWtlZmlsZS5uZXcKLQltdiAtZiBNYWtlZmlsZS5uZXcgJChNQUtFRklMRSkKLQotY2xlYW46Ci0Jcm0gLWYgKi5vICoub2JqIGxpYiB0YWdzIGNvcmUgLnB1cmUgLm5mcyogKi5vbGQgKi5iYWsgZmx1ZmYKLQotIyBETyBOT1QgREVMRVRFIFRISVMgTElORSAtLSBtYWtlIGRlcGVuZCBkZXBlbmRzIG9uIGl0LgotCi1idWZfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLWJ1Zl9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1idWZfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotYnVmX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotYnVmX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLWJ1Zl9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLWJ1Zl9lcnIubzogYnVmX2Vyci5jCi1idWZfc3RyLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWJ1Zl9zdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotYnVmX3N0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWJ1Zl9zdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWJ1Zl9zdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWJ1Zl9zdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1idWZfc3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggYnVmX3N0ci5jCi1idWZmZXIubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotYnVmZmVyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWJ1ZmZlci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWJ1ZmZlci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotYnVmZmVyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1idWZmZXIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1idWZmZXIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBidWZmZXIuYwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2J1ZmZlci9idWZfZXJyLmMgYi9jcnlwdG8vYnVmZmVyL2J1Zl9lcnIuYwppbmRleCAzZTI1YmJlLi44ZjFkZTYxIDEwMDY0NAotLS0gYS9jcnlwdG8vYnVmZmVyL2J1Zl9lcnIuYworKysgYi9jcnlwdG8vYnVmZmVyL2J1Zl9lcnIuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIGNyeXB0by9idWZmZXIvYnVmX2Vyci5jICovCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNiBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2J1ZmZlci9idWZmZXIuYyBiL2NyeXB0by9idWZmZXIvYnVmZmVyLmMKaW5kZXggYjNlOTQ3Ny4uNjIwZWE4ZCAxMDA2NDQKLS0tIGEvY3J5cHRvL2J1ZmZlci9idWZmZXIuYworKysgYi9jcnlwdG8vYnVmZmVyL2J1ZmZlci5jCkBAIC04OSwxMCArODksMTAgQEAKIAlPUEVOU1NMX2ZyZWUoYSk7CiAJfQogCi1pbnQgQlVGX01FTV9ncm93KEJVRl9NRU0gKnN0ciwgaW50IGxlbikKK2ludCBCVUZfTUVNX2dyb3coQlVGX01FTSAqc3RyLCBzaXplX3QgbGVuKQogCXsKIAljaGFyICpyZXQ7Ci0JdW5zaWduZWQgaW50IG47CisJc2l6ZV90IG47CiAKIAlpZiAoc3RyLT5sZW5ndGggPj0gbGVuKQogCQl7CkBAIC0xMjUsMTAgKzEyNSwxMCBAQAogCXJldHVybihsZW4pOwogCX0KIAotaW50IEJVRl9NRU1fZ3Jvd19jbGVhbihCVUZfTUVNICpzdHIsIGludCBsZW4pCitpbnQgQlVGX01FTV9ncm93X2NsZWFuKEJVRl9NRU0gKnN0ciwgc2l6ZV90IGxlbikKIAl7CiAJY2hhciAqcmV0OwotCXVuc2lnbmVkIGludCBuOworCXNpemVfdCBuOwogCiAJaWYgKHN0ci0+bGVuZ3RoID49IGxlbikKIAkJewpAQCAtMTYxLDMgKzE2MSw4NCBAQAogCQl9CiAJcmV0dXJuKGxlbik7CiAJfQorCitjaGFyICpCVUZfc3RyZHVwKGNvbnN0IGNoYXIgKnN0cikKKwl7CisJaWYgKHN0ciA9PSBOVUxMKSByZXR1cm4oTlVMTCk7CisJcmV0dXJuIEJVRl9zdHJuZHVwKHN0ciwgc3RybGVuKHN0cikpOworCX0KKworY2hhciAqQlVGX3N0cm5kdXAoY29uc3QgY2hhciAqc3RyLCBzaXplX3Qgc2l6KQorCXsKKwljaGFyICpyZXQ7CisKKwlpZiAoc3RyID09IE5VTEwpIHJldHVybihOVUxMKTsKKworCXJldD1PUEVOU1NMX21hbGxvYyhzaXorMSk7CisJaWYgKHJldCA9PSBOVUxMKSAKKwkJeworCQlCVUZlcnIoQlVGX0ZfQlVGX1NUUk5EVVAsRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOworCQlyZXR1cm4oTlVMTCk7CisJCX0KKwlCVUZfc3RybGNweShyZXQsc3RyLHNpeisxKTsKKwlyZXR1cm4ocmV0KTsKKwl9CisKK3ZvaWQgKkJVRl9tZW1kdXAoY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IHNpeikKKwl7CisJdm9pZCAqcmV0OworCisJaWYgKGRhdGEgPT0gTlVMTCkgcmV0dXJuKE5VTEwpOworCisJcmV0PU9QRU5TU0xfbWFsbG9jKHNpeik7CisJaWYgKHJldCA9PSBOVUxMKSAKKwkJeworCQlCVUZlcnIoQlVGX0ZfQlVGX01FTURVUCxFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CisJCXJldHVybihOVUxMKTsKKwkJfQorCXJldHVybiBtZW1jcHkocmV0LCBkYXRhLCBzaXopOworCX0JCisKK3NpemVfdCBCVUZfc3RybGNweShjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNpemUpCisJeworCXNpemVfdCBsID0gMDsKKwlmb3IoOyBzaXplID4gMSAmJiAqc3JjOyBzaXplLS0pCisJCXsKKwkJKmRzdCsrID0gKnNyYysrOworCQlsKys7CisJCX0KKwlpZiAoc2l6ZSkKKwkJKmRzdCA9ICdcMCc7CisJcmV0dXJuIGwgKyBzdHJsZW4oc3JjKTsKKwl9CisKK3NpemVfdCBCVUZfc3RybGNhdChjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNpemUpCisJeworCXNpemVfdCBsID0gMDsKKwlmb3IoOyBzaXplID4gMCAmJiAqZHN0OyBzaXplLS0sIGRzdCsrKQorCQlsKys7CisJcmV0dXJuIGwgKyBCVUZfc3RybGNweShkc3QsIHNyYywgc2l6ZSk7CisJfQorCit2b2lkIEJVRl9yZXZlcnNlKHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBzaXplKQorCXsKKwlzaXplX3QgaTsKKwlpZiAoaW4pCisJCXsKKwkJb3V0ICs9IHNpemUgLSAxOworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorCQkJKmluKysgPSAqb3V0LS07CisJCX0KKwllbHNlCisJCXsKKwkJdW5zaWduZWQgY2hhciAqcTsKKwkJY2hhciBjOworCQlxID0gb3V0ICsgc2l6ZSAtIDE7CisJCWZvciAoaSA9IDA7IGkgPCBzaXplLzI7IGkrKykKKwkJCXsKKwkJCWMgPSAqcTsKKwkJCSpxLS0gPSAqb3V0OworCQkJKm91dCsrID0gYzsKKwkJCX0KKwkJfQorCX0KZGlmZiAtLWdpdCBhL2NyeXB0by9idWZmZXIvYnVmZmVyLmggYi9jcnlwdG8vYnVmZmVyL2J1ZmZlci5oCmluZGV4IDFkYjk2MDcuLjE3OGU0MTggMTAwNjQ0Ci0tLSBhL2NyeXB0by9idWZmZXIvYnVmZmVyLmgKKysrIGIvY3J5cHRvL2J1ZmZlci9idWZmZXIuaApAQCAtNzYsMTggKzc2LDE5IEBACiAKIHN0cnVjdCBidWZfbWVtX3N0CiAJewotCWludCBsZW5ndGg7CS8qIGN1cnJlbnQgbnVtYmVyIG9mIGJ5dGVzICovCisJc2l6ZV90IGxlbmd0aDsJLyogY3VycmVudCBudW1iZXIgb2YgYnl0ZXMgKi8KIAljaGFyICpkYXRhOwotCWludCBtYXg7CS8qIHNpemUgb2YgYnVmZmVyICovCisJc2l6ZV90IG1heDsJLyogc2l6ZSBvZiBidWZmZXIgKi8KIAl9OwogCiBCVUZfTUVNICpCVUZfTUVNX25ldyh2b2lkKTsKIHZvaWQJQlVGX01FTV9mcmVlKEJVRl9NRU0gKmEpOwotaW50CUJVRl9NRU1fZ3JvdyhCVUZfTUVNICpzdHIsIGludCBsZW4pOwotaW50CUJVRl9NRU1fZ3Jvd19jbGVhbihCVUZfTUVNICpzdHIsIGludCBsZW4pOworaW50CUJVRl9NRU1fZ3JvdyhCVUZfTUVNICpzdHIsIHNpemVfdCBsZW4pOworaW50CUJVRl9NRU1fZ3Jvd19jbGVhbihCVUZfTUVNICpzdHIsIHNpemVfdCBsZW4pOwogY2hhciAqCUJVRl9zdHJkdXAoY29uc3QgY2hhciAqc3RyKTsKIGNoYXIgKglCVUZfc3RybmR1cChjb25zdCBjaGFyICpzdHIsIHNpemVfdCBzaXopOwogdm9pZCAqCUJVRl9tZW1kdXAoY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IHNpeik7Cit2b2lkCUJVRl9yZXZlcnNlKHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBzaXopOwogCiAvKiBzYWZlIHN0cmluZyBmdW5jdGlvbnMgKi8KIHNpemVfdCBCVUZfc3RybGNweShjaGFyICpkc3QsY29uc3QgY2hhciAqc3JjLHNpemVfdCBzaXopOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2NhbWVsbGlhL01ha2VmaWxlIGIvY3J5cHRvL2NhbWVsbGlhL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZmQxYTc1Li4wMDAwMDAwCi0tLSBhL2NyeXB0by9jYW1lbGxpYS9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi0jCi0jIGNyeXB0by9jYW1lbGxpYS9NYWtlZmlsZQotIwotCi1ESVI9IGNhbWVsbGlhCi1UT1A9CS4uLy4uCi1DQz0JY2MKLUNQUD0JJChDQykgLUUKLUlOQ0xVREVTPQotQ0ZMQUc9LWcKLU1BS0VGSUxFPQlNYWtlZmlsZQotQVI9CQlhciByCi0KLUNBTUVMTElBX0FTTV9PQko9Ci0KLUNGTEFHUz0gJChJTkNMVURFUykgJChDRkxBRykKLUFTRkxBR1M9ICQoSU5DTFVERVMpICQoQVNGTEFHKQotQUZMQUdTPSAkKEFTRkxBR1MpCi0KLUdFTkVSQUw9TWFrZWZpbGUKLSNURVNUPWNhbWVsbGlhdGVzdC5jCi1BUFBTPQotCi1MSUI9JChUT1ApL2xpYmNyeXB0by5hCi1MSUJTUkM9Y2FtZWxsaWEuYyBjbWxsX21pc2MuYyBjbWxsX2VjYi5jIGNtbGxfY2JjLmMgY21sbF9vZmIuYyBcCi0JICAgY21sbF9jZmIuYyBjbWxsX2N0ci5jIAotCi1MSUJPQko9IGNhbWVsbGlhLm8gY21sbF9taXNjLm8gY21sbF9lY2IubyBjbWxsX2NiYy5vIGNtbGxfb2ZiLm8gXAotCQljbWxsX2NmYi5vIGNtbGxfY3RyLm8gJChDQU1FTExJQV9BU01fT0JKKQotCi1TUkM9ICQoTElCU1JDKQotCi1FWEhFQURFUj0gY2FtZWxsaWEuaAotSEVBREVSPSBjbWxsX2xvY2wuaCAkKEVYSEVBREVSKQotCi1BTEw9ICAgICQoR0VORVJBTCkgJChTUkMpICQoSEVBREVSKQotCi10b3A6Ci0JKGNkIC4uLy4uOyAkKE1BS0UpIERJUlM9Y3J5cHRvIFNESVJTPSQoRElSKSBzdWJfYWxsKQotCi1hbGw6CWxpYgotCi1saWI6CSQoTElCT0JKKQotCSQoQVJYKSAkKExJQikgJChMSUJPQkopCi0JJChSQU5MSUIpICQoTElCKSB8fCBlY2hvIE5ldmVyIG1pbmQuCi0JQHRvdWNoIGxpYgotCi0kKExJQk9CSik6ICQoTElCU1JDKQotCi0KLWZpbGVzOgotCSQoUEVSTCkgJChUT1ApL3V0aWwvZmlsZXMucGwgTWFrZWZpbGUgPj4gJChUT1ApL01JTkZPCi0KLWxpbmtzOgotCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9pbmNsdWRlL29wZW5zc2wgJChFWEhFQURFUikKLQlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vdGVzdCAkKFRFU1QpCi0JQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL2FwcHMgJChBUFBTKQotCi1pbnN0YWxsOgotCUBbIC1uICIkKElOU1RBTExUT1ApIiBdICMgc2hvdWxkIGJlIHNldCBieSB0b3AgTWFrZWZpbGUuLi4KLQlAaGVhZGVybGlzdD0iJChFWEhFQURFUikiOyBmb3IgaSBpbiAkJGhlYWRlcmxpc3QgOyBcCi0JZG8gIFwKLQkoY3AgJCRpICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpOyBcCi0JY2htb2QgNjQ0ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpICk7IFwKLQlkb25lOwotCi10YWdzOgotCWN0YWdzICQoU1JDKQotCi10ZXN0czoKLQotbGludDoKLQlsaW50IC1ETElOVCAkKElOQ0xVREVTKSAkKFNSQyk+Zmx1ZmYKLQotZGVwZW5kOgotCUBbIC1uICIkKE1BS0VERVBFTkQpIiBdICMgc2hvdWxkIGJlIHNldCBieSB1cHBlciBNYWtlZmlsZS4uLgotCSQoTUFLRURFUEVORCkgLS0gJChDRkxBRykgJChJTkNMVURFUykgJChERVBGTEFHKSAtLSAkKFBST0dTKSAkKExJQlNSQykKLQotZGNsZWFuOgotCSQoUEVSTCkgLXBlICdpZiAoL14jIERPIE5PVCBERUxFVEUgVEhJUyBMSU5FLykge3ByaW50OyBleGl0KDApO30nICQoTUFLRUZJTEUpID5NYWtlZmlsZS5uZXcKLQltdiAtZiBNYWtlZmlsZS5uZXcgJChNQUtFRklMRSkKLQotY2xlYW46Ci0Jcm0gLWYgKi5zICoubyAqLm9iaiBsaWIgdGFncyBjb3JlIC5wdXJlIC5uZnMqICoub2xkICouYmFrIGZsdWZmCi0KLSMgRE8gTk9UIERFTEVURSBUSElTIExJTkUgLS0gbWFrZSBkZXBlbmQgZGVwZW5kcyBvbiBpdC4KLQotY2FtZWxsaWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWNhbWVsbGlhLm86IGNhbWVsbGlhLmMgY2FtZWxsaWEuaCBjbWxsX2xvY2wuaAotY21sbF9jYmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NhbWVsbGlhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLWNtbGxfY2JjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIGNtbGxfY2JjLmMgY21sbF9sb2NsLmgKLWNtbGxfY2ZiLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY2FtZWxsaWEuaAotY21sbF9jZmIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWNtbGxfY2ZiLm86IGNtbGxfY2ZiLmMgY21sbF9sb2NsLmgKLWNtbGxfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jYW1lbGxpYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1jbWxsX2N0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCBjbWxsX2N0ci5jIGNtbGxfbG9jbC5oCi1jbWxsX2VjYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY2FtZWxsaWEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotY21sbF9lY2IubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggY21sbF9lY2IuYyBjbWxsX2xvY2wuaAotY21sbF9taXNjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jYW1lbGxpYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotY21sbF9taXNjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLWNtbGxfbWlzYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotY21sbF9taXNjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1jbWxsX21pc2MubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1jbWxsX21pc2MubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggY21sbF9sb2NsLmggY21sbF9taXNjLmMKLWNtbGxfb2ZiLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jYW1lbGxpYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1jbWxsX29mYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCBjbWxsX2xvY2wuaCBjbWxsX29mYi5jCmRpZmYgLS1naXQgYS9jcnlwdG8vY2FtZWxsaWEvY2FtZWxsaWEuYyBiL2NyeXB0by9jYW1lbGxpYS9jYW1lbGxpYS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTFjMjZiLi4wMDAwMDAwCi0tLSBhL2NyeXB0by9jYW1lbGxpYS9jYW1lbGxpYS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTYyNCArMCwwIEBACi0vKiBjcnlwdG8vY2FtZWxsaWEvY2FtZWxsaWEuYyAtKi0gbW9kZTpDOyBjLWZpbGUtc3R5bGU6ICJlYXkiIC0qLSAqLwotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAyMDA2IE5UVCAoTmlwcG9uIFRlbGVncmFwaCBhbmQgVGVsZXBob25lIENvcnBvcmF0aW9uKSAuIAotICogQUxMIFJJR0hUUyBSRVNFUlZFRC4KLSAqCi0gKiBJbnRlbGxlY3R1YWwgUHJvcGVydHkgaW5mb3JtYXRpb24gZm9yIENhbWVsbGlhOgotICogICAgIGh0dHA6Ly9pbmZvLmlzbC5udHQuY28uanAvY3J5cHQvZW5nL2luZm8vY2hpdGVraS5odG1sCi0gKgotICogTmV3cyBSZWxlYXNlIGZvciBBbm5vdW5jZW1lbnQgb2YgQ2FtZWxsaWEgb3BlbiBzb3VyY2U6Ci0gKiAgICAgaHR0cDovL3d3dy5udHQuY28uanAvbmV3cy9uZXdzMDZlLzA2MDQvMDYwNDEzYS5odG1sCi0gKgotICogVGhlIENhbWVsbGlhIENvZGUgaW5jbHVkZWQgaGVyZWluIGlzIGRldmVsb3BlZCBieQotICogTlRUIChOaXBwb24gVGVsZWdyYXBoIGFuZCBUZWxlcGhvbmUgQ29ycG9yYXRpb24pLCBhbmQgaXMgY29udHJpYnV0ZWQKLSAqIHRvIHRoZSBPcGVuU1NMIHByb2plY3QuCi0gKgotICogVGhlIENhbWVsbGlhIENvZGUgaXMgbGljZW5zZWQgcHVyc3VhbnQgdG8gdGhlIE9wZW5TU0wgb3BlbiBzb3VyY2UKLSAqIGxpY2Vuc2UgcHJvdmlkZWQgYmVsb3cuCi0gKi8KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0gKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0gKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0gKgotICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0gKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotICoKLSAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotICoKLSAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSAqICAgIGFja25vd2xlZGdtZW50OgotICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0gKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotLyogQWxnb3JpdGhtIFNwZWNpZmljYXRpb24gCi0gICBodHRwOi8vaW5mby5pc2wubnR0LmNvLmpwL2NyeXB0L2VuZy9jYW1lbGxpYS9zcGVjaWZpY2F0aW9ucy5odG1sCi0qLwotCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotI2luY2x1ZGUgImNhbWVsbGlhLmgiCi0jaW5jbHVkZSAiY21sbF9sb2NsLmgiCi0KLS8qIGtleSBjb25zdGFudHMgKi8KLSNkZWZpbmUgQ0FNRUxMSUFfU0lHTUExTCAoMHhBMDlFNjY3RkwpCi0jZGVmaW5lIENBTUVMTElBX1NJR01BMVIgKDB4M0JDQzkwOEJMKQotI2RlZmluZSBDQU1FTExJQV9TSUdNQTJMICgweEI2N0FFODU4TCkKLSNkZWZpbmUgQ0FNRUxMSUFfU0lHTUEyUiAoMHg0Q0FBNzNCMkwpCi0jZGVmaW5lIENBTUVMTElBX1NJR01BM0wgKDB4QzZFRjM3MkZMKQotI2RlZmluZSBDQU1FTExJQV9TSUdNQTNSICgweEU5NEY4MkJFTCkKLSNkZWZpbmUgQ0FNRUxMSUFfU0lHTUE0TCAoMHg1NEZGNTNBNUwpCi0jZGVmaW5lIENBTUVMTElBX1NJR01BNFIgKDB4RjFEMzZGMUNMKQotI2RlZmluZSBDQU1FTExJQV9TSUdNQTVMICgweDEwRTUyN0ZBTCkKLSNkZWZpbmUgQ0FNRUxMSUFfU0lHTUE1UiAoMHhERTY4MkQxREwpCi0jZGVmaW5lIENBTUVMTElBX1NJR01BNkwgKDB4QjA1Njg4QzJMKQotI2RlZmluZSBDQU1FTExJQV9TSUdNQTZSICgweEIzRTZDMUZETCkKLQotLyoKLSAqICBtYWNyb3MKLSAqLwotCi0vKiBlIGlzIHBvaW50ZXIgb2Ygc3Via2V5ICovCi0jZGVmaW5lIENhbWVsbGlhU3Via2V5TChJTkRFWCkgKHN1YmtleVsoSU5ERVgpKjJdKQotI2RlZmluZSBDYW1lbGxpYVN1YmtleVIoSU5ERVgpIChzdWJrZXlbKElOREVYKSoyICsgMV0pCi0KLS8qIHJvdGF0aW9uIHJpZ2h0IHNoaWZ0IDFieXRlICovCi0jZGVmaW5lIENBTUVMTElBX1JSOCh4KSAoKCh4KSA+PiA4KSArICgoeCkgPDwgMjQpKQotLyogcm90YXRpb24gbGVmdCBzaGlmdCAxYml0ICovCi0jZGVmaW5lIENBTUVMTElBX1JMMSh4KSAoKCh4KSA8PCAxKSArICgoeCkgPj4gMzEpKQotLyogcm90YXRpb24gbGVmdCBzaGlmdCAxYnl0ZSAqLwotI2RlZmluZSBDQU1FTExJQV9STDgoeCkgKCgoeCkgPDwgOCkgKyAoKHgpID4+IDI0KSkKLQotI2RlZmluZSBDQU1FTExJQV9ST0xEUShsbCwgbHIsIHJsLCByciwgdzAsIHcxLCBiaXRzKQlcCi1kbwkJCQkJCQlcCi0JewkJCQkJCVwKLQl3MCA9IGxsOwkJCQkJXAotCWxsID0gKGxsIDw8IGJpdHMpICsgKGxyID4+ICgzMiAtIGJpdHMpKTsJXAotCWxyID0gKGxyIDw8IGJpdHMpICsgKHJsID4+ICgzMiAtIGJpdHMpKTsJXAotCXJsID0gKHJsIDw8IGJpdHMpICsgKHJyID4+ICgzMiAtIGJpdHMpKTsJXAotCXJyID0gKHJyIDw8IGJpdHMpICsgKHcwID4+ICgzMiAtIGJpdHMpKTsJXAotCX0gd2hpbGUoMCkKLQotI2RlZmluZSBDQU1FTExJQV9ST0xEUW8zMihsbCwgbHIsIHJsLCByciwgdzAsIHcxLCBiaXRzKQlcCi1kbwkJCQkJCQlcCi0JewkJCQkJCVwKLQl3MCA9IGxsOwkJCQkJXAotCXcxID0gbHI7CQkJCQlcCi0JbGwgPSAobHIgPDwgKGJpdHMgLSAzMikpICsgKHJsID4+ICg2NCAtIGJpdHMpKTsJXAotCWxyID0gKHJsIDw8IChiaXRzIC0gMzIpKSArIChyciA+PiAoNjQgLSBiaXRzKSk7CVwKLQlybCA9IChyciA8PCAoYml0cyAtIDMyKSkgKyAodzAgPj4gKDY0IC0gYml0cykpOwlcCi0JcnIgPSAodzAgPDwgKGJpdHMgLSAzMikpICsgKHcxID4+ICg2NCAtIGJpdHMpKTsJXAotCX0gd2hpbGUoMCkKLQotI2RlZmluZSBDQU1FTExJQV9TUDExMTAoSU5ERVgpIChjYW1lbGxpYV9zcDExMTBbKElOREVYKV0pCi0jZGVmaW5lIENBTUVMTElBX1NQMDIyMihJTkRFWCkgKGNhbWVsbGlhX3NwMDIyMlsoSU5ERVgpXSkKLSNkZWZpbmUgQ0FNRUxMSUFfU1AzMDMzKElOREVYKSAoY2FtZWxsaWFfc3AzMDMzWyhJTkRFWCldKQotI2RlZmluZSBDQU1FTExJQV9TUDQ0MDQoSU5ERVgpIChjYW1lbGxpYV9zcDQ0MDRbKElOREVYKV0pCi0KLSNkZWZpbmUgQ0FNRUxMSUFfRih4bCwgeHIsIGtsLCBrciwgeWwsIHlyLCBpbCwgaXIsIHQwLCB0MSkJCVwKLWRvCQkJCQkJCQkJXAotCXsJCQkJCQkJCVwKLQlpbCA9IHhsIF4ga2w7CQkJCQkJCVwKLQlpciA9IHhyIF4ga3I7CQkJCQkJCVwKLQl0MCA9IGlsID4+IDE2OwkJCQkJCQlcCi0JdDEgPSBpciA+PiAxNjsJCQkJCQkJXAotCXlsID0gQ0FNRUxMSUFfU1AxMTEwKGlyICYgMHhmZikJCQkJCVwKLQkJXiBDQU1FTExJQV9TUDAyMjIoKHQxID4+IDgpICYgMHhmZikJCQlcCi0JCV4gQ0FNRUxMSUFfU1AzMDMzKHQxICYgMHhmZikJCQkJXAotCQleIENBTUVMTElBX1NQNDQwNCgoaXIgPj4gOCkgJiAweGZmKTsJCQlcCi0JeXIgPSBDQU1FTExJQV9TUDExMTAoKHQwID4+IDgpICYgMHhmZikJCQkJXAotCQleIENBTUVMTElBX1NQMDIyMih0MCAmIDB4ZmYpCQkJCVwKLQkJXiBDQU1FTExJQV9TUDMwMzMoKGlsID4+IDgpICYgMHhmZikJCQlcCi0JCV4gQ0FNRUxMSUFfU1A0NDA0KGlsICYgMHhmZik7CQkJCVwKLQl5bCBePSB5cjsJCQkJCQkJXAotCXlyID0gQ0FNRUxMSUFfUlI4KHlyKTsJCQkJCQlcCi0JeXIgXj0geWw7CQkJCQkJCVwKLQl9IHdoaWxlKDApCi0KLQotLyoKLSAqIGZvciBzcGVlZCB1cAotICoKLSAqLwotI2RlZmluZSBDQU1FTExJQV9GTFMobGwsIGxyLCBybCwgcnIsIGtsbCwga2xyLCBrcmwsIGtyciwgdDAsIHQxLCB0MiwgdDMpIFwKLWRvCQkJCQkJCQkJXAotCXsJCQkJCQkJCVwKLQl0MCA9IGtsbDsJCQkJCQkJXAotCXQwICY9IGxsOwkJCQkJCQlcCi0JbHIgXj0gQ0FNRUxMSUFfUkwxKHQwKTsJCQkJCQlcCi0JdDEgPSBrbHI7CQkJCQkJCVwKLQl0MSB8PSBscjsJCQkJCQkJXAotCWxsIF49IHQxOwkJCQkJCQlcCi0JCQkJCQkJCQlcCi0JdDIgPSBrcnI7CQkJCQkJCVwKLQl0MiB8PSBycjsJCQkJCQkJXAotCXJsIF49IHQyOwkJCQkJCQlcCi0JdDMgPSBrcmw7CQkJCQkJCVwKLQl0MyAmPSBybDsJCQkJCQkJXAotCXJyIF49IENBTUVMTElBX1JMMSh0Myk7CQkJCQkJXAotCX0gd2hpbGUoMCkKLQotI2RlZmluZSBDQU1FTExJQV9ST1VORFNNKHhsLCB4ciwga2wsIGtyLCB5bCwgeXIsIGlsLCBpciwgdDAsIHQxKQlcCi1kbwkJCQkJCQkJCVwKLQl7CQkJCQkJCQlcCi0JaWwgPSB4bDsJCQkJCQkJXAotCWlyID0geHI7CQkJCQkJCVwKLQl0MCA9IGlsID4+IDE2OwkJCQkJCQlcCi0JdDEgPSBpciA+PiAxNjsJCQkJCQkJXAotCWlyID0gQ0FNRUxMSUFfU1AxMTEwKGlyICYgMHhmZikJCQkJCVwKLQkJXiBDQU1FTExJQV9TUDAyMjIoKHQxID4+IDgpICYgMHhmZikJCQlcCi0JCV4gQ0FNRUxMSUFfU1AzMDMzKHQxICYgMHhmZikJCQkJXAotCQleIENBTUVMTElBX1NQNDQwNCgoaXIgPj4gOCkgJiAweGZmKTsJCQlcCi0JaWwgPSBDQU1FTExJQV9TUDExMTAoKHQwID4+IDgpICYgMHhmZikJCQkJXAotCQleIENBTUVMTElBX1NQMDIyMih0MCAmIDB4ZmYpCQkJCVwKLQkJXiBDQU1FTExJQV9TUDMwMzMoKGlsID4+IDgpICYgMHhmZikJCQlcCi0JCV4gQ0FNRUxMSUFfU1A0NDA0KGlsICYgMHhmZik7CQkJCVwKLQlpbCBePSBrbDsJCQkJCQkJXAotCWlyIF49IGtyOwkJCQkJCQlcCi0JaXIgXj0gaWw7CQkJCQkJCVwKLQlpbCA9IENBTUVMTElBX1JSOChpbCk7CQkJCQkJXAotCWlsIF49IGlyOwkJCQkJCQlcCi0JeWwgXj0gaXI7CQkJCQkJCVwKLQl5ciBePSBpbDsJCQkJCQkJXAotCX0gd2hpbGUoMCkKLQotc3RhdGljIGNvbnN0IHUzMiBjYW1lbGxpYV9zcDExMTBbMjU2XSA9Ci0JewotCTB4NzA3MDcwMDAsMHg4MjgyODIwMCwweDJjMmMyYzAwLDB4ZWNlY2VjMDAsCi0JMHhiM2IzYjMwMCwweDI3MjcyNzAwLDB4YzBjMGMwMDAsMHhlNWU1ZTUwMCwKLQkweGU0ZTRlNDAwLDB4ODU4NTg1MDAsMHg1NzU3NTcwMCwweDM1MzUzNTAwLAotCTB4ZWFlYWVhMDAsMHgwYzBjMGMwMCwweGFlYWVhZTAwLDB4NDE0MTQxMDAsCi0JMHgyMzIzMjMwMCwweGVmZWZlZjAwLDB4NmI2YjZiMDAsMHg5MzkzOTMwMCwKLQkweDQ1NDU0NTAwLDB4MTkxOTE5MDAsMHhhNWE1YTUwMCwweDIxMjEyMTAwLAotCTB4ZWRlZGVkMDAsMHgwZTBlMGUwMCwweDRmNGY0ZjAwLDB4NGU0ZTRlMDAsCi0JMHgxZDFkMWQwMCwweDY1NjU2NTAwLDB4OTI5MjkyMDAsMHhiZGJkYmQwMCwKLQkweDg2ODY4NjAwLDB4YjhiOGI4MDAsMHhhZmFmYWYwMCwweDhmOGY4ZjAwLAotCTB4N2M3YzdjMDAsMHhlYmViZWIwMCwweDFmMWYxZjAwLDB4Y2VjZWNlMDAsCi0JMHgzZTNlM2UwMCwweDMwMzAzMDAwLDB4ZGNkY2RjMDAsMHg1ZjVmNWYwMCwKLQkweDVlNWU1ZTAwLDB4YzVjNWM1MDAsMHgwYjBiMGIwMCwweDFhMWExYTAwLAotCTB4YTZhNmE2MDAsMHhlMWUxZTEwMCwweDM5MzkzOTAwLDB4Y2FjYWNhMDAsCi0JMHhkNWQ1ZDUwMCwweDQ3NDc0NzAwLDB4NWQ1ZDVkMDAsMHgzZDNkM2QwMCwKLQkweGQ5ZDlkOTAwLDB4MDEwMTAxMDAsMHg1YTVhNWEwMCwweGQ2ZDZkNjAwLAotCTB4NTE1MTUxMDAsMHg1NjU2NTYwMCwweDZjNmM2YzAwLDB4NGQ0ZDRkMDAsCi0JMHg4YjhiOGIwMCwweDBkMGQwZDAwLDB4OWE5YTlhMDAsMHg2NjY2NjYwMCwKLQkweGZiZmJmYjAwLDB4Y2NjY2NjMDAsMHhiMGIwYjAwMCwweDJkMmQyZDAwLAotCTB4NzQ3NDc0MDAsMHgxMjEyMTIwMCwweDJiMmIyYjAwLDB4MjAyMDIwMDAsCi0JMHhmMGYwZjAwMCwweGIxYjFiMTAwLDB4ODQ4NDg0MDAsMHg5OTk5OTkwMCwKLQkweGRmZGZkZjAwLDB4NGM0YzRjMDAsMHhjYmNiY2IwMCwweGMyYzJjMjAwLAotCTB4MzQzNDM0MDAsMHg3ZTdlN2UwMCwweDc2NzY3NjAwLDB4MDUwNTA1MDAsCi0JMHg2ZDZkNmQwMCwweGI3YjdiNzAwLDB4YTlhOWE5MDAsMHgzMTMxMzEwMCwKLQkweGQxZDFkMTAwLDB4MTcxNzE3MDAsMHgwNDA0MDQwMCwweGQ3ZDdkNzAwLAotCTB4MTQxNDE0MDAsMHg1ODU4NTgwMCwweDNhM2EzYTAwLDB4NjE2MTYxMDAsCi0JMHhkZWRlZGUwMCwweDFiMWIxYjAwLDB4MTExMTExMDAsMHgxYzFjMWMwMCwKLQkweDMyMzIzMjAwLDB4MGYwZjBmMDAsMHg5YzljOWMwMCwweDE2MTYxNjAwLAotCTB4NTM1MzUzMDAsMHgxODE4MTgwMCwweGYyZjJmMjAwLDB4MjIyMjIyMDAsCi0JMHhmZWZlZmUwMCwweDQ0NDQ0NDAwLDB4Y2ZjZmNmMDAsMHhiMmIyYjIwMCwKLQkweGMzYzNjMzAwLDB4YjViNWI1MDAsMHg3YTdhN2EwMCwweDkxOTE5MTAwLAotCTB4MjQyNDI0MDAsMHgwODA4MDgwMCwweGU4ZThlODAwLDB4YThhOGE4MDAsCi0JMHg2MDYwNjAwMCwweGZjZmNmYzAwLDB4Njk2OTY5MDAsMHg1MDUwNTAwMCwKLQkweGFhYWFhYTAwLDB4ZDBkMGQwMDAsMHhhMGEwYTAwMCwweDdkN2Q3ZDAwLAotCTB4YTFhMWExMDAsMHg4OTg5ODkwMCwweDYyNjI2MjAwLDB4OTc5Nzk3MDAsCi0JMHg1NDU0NTQwMCwweDViNWI1YjAwLDB4MWUxZTFlMDAsMHg5NTk1OTUwMCwKLQkweGUwZTBlMDAwLDB4ZmZmZmZmMDAsMHg2NDY0NjQwMCwweGQyZDJkMjAwLAotCTB4MTAxMDEwMDAsMHhjNGM0YzQwMCwweDAwMDAwMDAwLDB4NDg0ODQ4MDAsCi0JMHhhM2EzYTMwMCwweGY3ZjdmNzAwLDB4NzU3NTc1MDAsMHhkYmRiZGIwMCwKLQkweDhhOGE4YTAwLDB4MDMwMzAzMDAsMHhlNmU2ZTYwMCwweGRhZGFkYTAwLAotCTB4MDkwOTA5MDAsMHgzZjNmM2YwMCwweGRkZGRkZDAwLDB4OTQ5NDk0MDAsCi0JMHg4Nzg3ODcwMCwweDVjNWM1YzAwLDB4ODM4MzgzMDAsMHgwMjAyMDIwMCwKLQkweGNkY2RjZDAwLDB4NGE0YTRhMDAsMHg5MDkwOTAwMCwweDMzMzMzMzAwLAotCTB4NzM3MzczMDAsMHg2NzY3NjcwMCwweGY2ZjZmNjAwLDB4ZjNmM2YzMDAsCi0JMHg5ZDlkOWQwMCwweDdmN2Y3ZjAwLDB4YmZiZmJmMDAsMHhlMmUyZTIwMCwKLQkweDUyNTI1MjAwLDB4OWI5YjliMDAsMHhkOGQ4ZDgwMCwweDI2MjYyNjAwLAotCTB4YzhjOGM4MDAsMHgzNzM3MzcwMCwweGM2YzZjNjAwLDB4M2IzYjNiMDAsCi0JMHg4MTgxODEwMCwweDk2OTY5NjAwLDB4NmY2ZjZmMDAsMHg0YjRiNGIwMCwKLQkweDEzMTMxMzAwLDB4YmViZWJlMDAsMHg2MzYzNjMwMCwweDJlMmUyZTAwLAotCTB4ZTllOWU5MDAsMHg3OTc5NzkwMCwweGE3YTdhNzAwLDB4OGM4YzhjMDAsCi0JMHg5ZjlmOWYwMCwweDZlNmU2ZTAwLDB4YmNiY2JjMDAsMHg4ZThlOGUwMCwKLQkweDI5MjkyOTAwLDB4ZjVmNWY1MDAsMHhmOWY5ZjkwMCwweGI2YjZiNjAwLAotCTB4MmYyZjJmMDAsMHhmZGZkZmQwMCwweGI0YjRiNDAwLDB4NTk1OTU5MDAsCi0JMHg3ODc4NzgwMCwweDk4OTg5ODAwLDB4MDYwNjA2MDAsMHg2YTZhNmEwMCwKLQkweGU3ZTdlNzAwLDB4NDY0NjQ2MDAsMHg3MTcxNzEwMCwweGJhYmFiYTAwLAotCTB4ZDRkNGQ0MDAsMHgyNTI1MjUwMCwweGFiYWJhYjAwLDB4NDI0MjQyMDAsCi0JMHg4ODg4ODgwMCwweGEyYTJhMjAwLDB4OGQ4ZDhkMDAsMHhmYWZhZmEwMCwKLQkweDcyNzI3MjAwLDB4MDcwNzA3MDAsMHhiOWI5YjkwMCwweDU1NTU1NTAwLAotCTB4ZjhmOGY4MDAsMHhlZWVlZWUwMCwweGFjYWNhYzAwLDB4MGEwYTBhMDAsCi0JMHgzNjM2MzYwMCwweDQ5NDk0OTAwLDB4MmEyYTJhMDAsMHg2ODY4NjgwMCwKLQkweDNjM2MzYzAwLDB4MzgzODM4MDAsMHhmMWYxZjEwMCwweGE0YTRhNDAwLAotCTB4NDA0MDQwMDAsMHgyODI4MjgwMCwweGQzZDNkMzAwLDB4N2I3YjdiMDAsCi0JMHhiYmJiYmIwMCwweGM5YzljOTAwLDB4NDM0MzQzMDAsMHhjMWMxYzEwMCwKLQkweDE1MTUxNTAwLDB4ZTNlM2UzMDAsMHhhZGFkYWQwMCwweGY0ZjRmNDAwLAotCTB4Nzc3Nzc3MDAsMHhjN2M3YzcwMCwweDgwODA4MDAwLDB4OWU5ZTllMDAsCi0JfTsKLQotc3RhdGljIGNvbnN0IHUzMiBjYW1lbGxpYV9zcDAyMjJbMjU2XSA9Ci0JewotCTB4MDBlMGUwZTAsMHgwMDA1MDUwNSwweDAwNTg1ODU4LDB4MDBkOWQ5ZDksCi0JMHgwMDY3Njc2NywweDAwNGU0ZTRlLDB4MDA4MTgxODEsMHgwMGNiY2JjYiwKLQkweDAwYzljOWM5LDB4MDAwYjBiMGIsMHgwMGFlYWVhZSwweDAwNmE2YTZhLAotCTB4MDBkNWQ1ZDUsMHgwMDE4MTgxOCwweDAwNWQ1ZDVkLDB4MDA4MjgyODIsCi0JMHgwMDQ2NDY0NiwweDAwZGZkZmRmLDB4MDBkNmQ2ZDYsMHgwMDI3MjcyNywKLQkweDAwOGE4YThhLDB4MDAzMjMyMzIsMHgwMDRiNGI0YiwweDAwNDI0MjQyLAotCTB4MDBkYmRiZGIsMHgwMDFjMWMxYywweDAwOWU5ZTllLDB4MDA5YzljOWMsCi0JMHgwMDNhM2EzYSwweDAwY2FjYWNhLDB4MDAyNTI1MjUsMHgwMDdiN2I3YiwKLQkweDAwMGQwZDBkLDB4MDA3MTcxNzEsMHgwMDVmNWY1ZiwweDAwMWYxZjFmLAotCTB4MDBmOGY4ZjgsMHgwMGQ3ZDdkNywweDAwM2UzZTNlLDB4MDA5ZDlkOWQsCi0JMHgwMDdjN2M3YywweDAwNjA2MDYwLDB4MDBiOWI5YjksMHgwMGJlYmViZSwKLQkweDAwYmNiY2JjLDB4MDA4YjhiOGIsMHgwMDE2MTYxNiwweDAwMzQzNDM0LAotCTB4MDA0ZDRkNGQsMHgwMGMzYzNjMywweDAwNzI3MjcyLDB4MDA5NTk1OTUsCi0JMHgwMGFiYWJhYiwweDAwOGU4ZThlLDB4MDBiYWJhYmEsMHgwMDdhN2E3YSwKLQkweDAwYjNiM2IzLDB4MDAwMjAyMDIsMHgwMGI0YjRiNCwweDAwYWRhZGFkLAotCTB4MDBhMmEyYTIsMHgwMGFjYWNhYywweDAwZDhkOGQ4LDB4MDA5YTlhOWEsCi0JMHgwMDE3MTcxNywweDAwMWExYTFhLDB4MDAzNTM1MzUsMHgwMGNjY2NjYywKLQkweDAwZjdmN2Y3LDB4MDA5OTk5OTksMHgwMDYxNjE2MSwweDAwNWE1YTVhLAotCTB4MDBlOGU4ZTgsMHgwMDI0MjQyNCwweDAwNTY1NjU2LDB4MDA0MDQwNDAsCi0JMHgwMGUxZTFlMSwweDAwNjM2MzYzLDB4MDAwOTA5MDksMHgwMDMzMzMzMywKLQkweDAwYmZiZmJmLDB4MDA5ODk4OTgsMHgwMDk3OTc5NywweDAwODU4NTg1LAotCTB4MDA2ODY4NjgsMHgwMGZjZmNmYywweDAwZWNlY2VjLDB4MDAwYTBhMGEsCi0JMHgwMGRhZGFkYSwweDAwNmY2ZjZmLDB4MDA1MzUzNTMsMHgwMDYyNjI2MiwKLQkweDAwYTNhM2EzLDB4MDAyZTJlMmUsMHgwMDA4MDgwOCwweDAwYWZhZmFmLAotCTB4MDAyODI4MjgsMHgwMGIwYjBiMCwweDAwNzQ3NDc0LDB4MDBjMmMyYzIsCi0JMHgwMGJkYmRiZCwweDAwMzYzNjM2LDB4MDAyMjIyMjIsMHgwMDM4MzgzOCwKLQkweDAwNjQ2NDY0LDB4MDAxZTFlMWUsMHgwMDM5MzkzOSwweDAwMmMyYzJjLAotCTB4MDBhNmE2YTYsMHgwMDMwMzAzMCwweDAwZTVlNWU1LDB4MDA0NDQ0NDQsCi0JMHgwMGZkZmRmZCwweDAwODg4ODg4LDB4MDA5ZjlmOWYsMHgwMDY1NjU2NSwKLQkweDAwODc4Nzg3LDB4MDA2YjZiNmIsMHgwMGY0ZjRmNCwweDAwMjMyMzIzLAotCTB4MDA0ODQ4NDgsMHgwMDEwMTAxMCwweDAwZDFkMWQxLDB4MDA1MTUxNTEsCi0JMHgwMGMwYzBjMCwweDAwZjlmOWY5LDB4MDBkMmQyZDIsMHgwMGEwYTBhMCwKLQkweDAwNTU1NTU1LDB4MDBhMWExYTEsMHgwMDQxNDE0MSwweDAwZmFmYWZhLAotCTB4MDA0MzQzNDMsMHgwMDEzMTMxMywweDAwYzRjNGM0LDB4MDAyZjJmMmYsCi0JMHgwMGE4YThhOCwweDAwYjZiNmI2LDB4MDAzYzNjM2MsMHgwMDJiMmIyYiwKLQkweDAwYzFjMWMxLDB4MDBmZmZmZmYsMHgwMGM4YzhjOCwweDAwYTVhNWE1LAotCTB4MDAyMDIwMjAsMHgwMDg5ODk4OSwweDAwMDAwMDAwLDB4MDA5MDkwOTAsCi0JMHgwMDQ3NDc0NywweDAwZWZlZmVmLDB4MDBlYWVhZWEsMHgwMGI3YjdiNywKLQkweDAwMTUxNTE1LDB4MDAwNjA2MDYsMHgwMGNkY2RjZCwweDAwYjViNWI1LAotCTB4MDAxMjEyMTIsMHgwMDdlN2U3ZSwweDAwYmJiYmJiLDB4MDAyOTI5MjksCi0JMHgwMDBmMGYwZiwweDAwYjhiOGI4LDB4MDAwNzA3MDcsMHgwMDA0MDQwNCwKLQkweDAwOWI5YjliLDB4MDA5NDk0OTQsMHgwMDIxMjEyMSwweDAwNjY2NjY2LAotCTB4MDBlNmU2ZTYsMHgwMGNlY2VjZSwweDAwZWRlZGVkLDB4MDBlN2U3ZTcsCi0JMHgwMDNiM2IzYiwweDAwZmVmZWZlLDB4MDA3ZjdmN2YsMHgwMGM1YzVjNSwKLQkweDAwYTRhNGE0LDB4MDAzNzM3MzcsMHgwMGIxYjFiMSwweDAwNGM0YzRjLAotCTB4MDA5MTkxOTEsMHgwMDZlNmU2ZSwweDAwOGQ4ZDhkLDB4MDA3Njc2NzYsCi0JMHgwMDAzMDMwMywweDAwMmQyZDJkLDB4MDBkZWRlZGUsMHgwMDk2OTY5NiwKLQkweDAwMjYyNjI2LDB4MDA3ZDdkN2QsMHgwMGM2YzZjNiwweDAwNWM1YzVjLAotCTB4MDBkM2QzZDMsMHgwMGYyZjJmMiwweDAwNGY0ZjRmLDB4MDAxOTE5MTksCi0JMHgwMDNmM2YzZiwweDAwZGNkY2RjLDB4MDA3OTc5NzksMHgwMDFkMWQxZCwKLQkweDAwNTI1MjUyLDB4MDBlYmViZWIsMHgwMGYzZjNmMywweDAwNmQ2ZDZkLAotCTB4MDA1ZTVlNWUsMHgwMGZiZmJmYiwweDAwNjk2OTY5LDB4MDBiMmIyYjIsCi0JMHgwMGYwZjBmMCwweDAwMzEzMTMxLDB4MDAwYzBjMGMsMHgwMGQ0ZDRkNCwKLQkweDAwY2ZjZmNmLDB4MDA4YzhjOGMsMHgwMGUyZTJlMiwweDAwNzU3NTc1LAotCTB4MDBhOWE5YTksMHgwMDRhNGE0YSwweDAwNTc1NzU3LDB4MDA4NDg0ODQsCi0JMHgwMDExMTExMSwweDAwNDU0NTQ1LDB4MDAxYjFiMWIsMHgwMGY1ZjVmNSwKLQkweDAwZTRlNGU0LDB4MDAwZTBlMGUsMHgwMDczNzM3MywweDAwYWFhYWFhLAotCTB4MDBmMWYxZjEsMHgwMGRkZGRkZCwweDAwNTk1OTU5LDB4MDAxNDE0MTQsCi0JMHgwMDZjNmM2YywweDAwOTI5MjkyLDB4MDA1NDU0NTQsMHgwMGQwZDBkMCwKLQkweDAwNzg3ODc4LDB4MDA3MDcwNzAsMHgwMGUzZTNlMywweDAwNDk0OTQ5LAotCTB4MDA4MDgwODAsMHgwMDUwNTA1MCwweDAwYTdhN2E3LDB4MDBmNmY2ZjYsCi0JMHgwMDc3Nzc3NywweDAwOTM5MzkzLDB4MDA4Njg2ODYsMHgwMDgzODM4MywKLQkweDAwMmEyYTJhLDB4MDBjN2M3YzcsMHgwMDViNWI1YiwweDAwZTllOWU5LAotCTB4MDBlZWVlZWUsMHgwMDhmOGY4ZiwweDAwMDEwMTAxLDB4MDAzZDNkM2QsCi0JfTsKLQotc3RhdGljIGNvbnN0IHUzMiBjYW1lbGxpYV9zcDMwMzNbMjU2XSA9Ci0JewotCTB4MzgwMDM4MzgsMHg0MTAwNDE0MSwweDE2MDAxNjE2LDB4NzYwMDc2NzYsCi0JMHhkOTAwZDlkOSwweDkzMDA5MzkzLDB4NjAwMDYwNjAsMHhmMjAwZjJmMiwKLQkweDcyMDA3MjcyLDB4YzIwMGMyYzIsMHhhYjAwYWJhYiwweDlhMDA5YTlhLAotCTB4NzUwMDc1NzUsMHgwNjAwMDYwNiwweDU3MDA1NzU3LDB4YTAwMGEwYTAsCi0JMHg5MTAwOTE5MSwweGY3MDBmN2Y3LDB4YjUwMGI1YjUsMHhjOTAwYzljOSwKLQkweGEyMDBhMmEyLDB4OGMwMDhjOGMsMHhkMjAwZDJkMiwweDkwMDA5MDkwLAotCTB4ZjYwMGY2ZjYsMHgwNzAwMDcwNywweGE3MDBhN2E3LDB4MjcwMDI3MjcsCi0JMHg4ZTAwOGU4ZSwweGIyMDBiMmIyLDB4NDkwMDQ5NDksMHhkZTAwZGVkZSwKLQkweDQzMDA0MzQzLDB4NWMwMDVjNWMsMHhkNzAwZDdkNywweGM3MDBjN2M3LAotCTB4M2UwMDNlM2UsMHhmNTAwZjVmNSwweDhmMDA4ZjhmLDB4NjcwMDY3NjcsCi0JMHgxZjAwMWYxZiwweDE4MDAxODE4LDB4NmUwMDZlNmUsMHhhZjAwYWZhZiwKLQkweDJmMDAyZjJmLDB4ZTIwMGUyZTIsMHg4NTAwODU4NSwweDBkMDAwZDBkLAotCTB4NTMwMDUzNTMsMHhmMDAwZjBmMCwweDljMDA5YzljLDB4NjUwMDY1NjUsCi0JMHhlYTAwZWFlYSwweGEzMDBhM2EzLDB4YWUwMGFlYWUsMHg5ZTAwOWU5ZSwKLQkweGVjMDBlY2VjLDB4ODAwMDgwODAsMHgyZDAwMmQyZCwweDZiMDA2YjZiLAotCTB4YTgwMGE4YTgsMHgyYjAwMmIyYiwweDM2MDAzNjM2LDB4YTYwMGE2YTYsCi0JMHhjNTAwYzVjNSwweDg2MDA4Njg2LDB4NGQwMDRkNGQsMHgzMzAwMzMzMywKLQkweGZkMDBmZGZkLDB4NjYwMDY2NjYsMHg1ODAwNTg1OCwweDk2MDA5Njk2LAotCTB4M2EwMDNhM2EsMHgwOTAwMDkwOSwweDk1MDA5NTk1LDB4MTAwMDEwMTAsCi0JMHg3ODAwNzg3OCwweGQ4MDBkOGQ4LDB4NDIwMDQyNDIsMHhjYzAwY2NjYywKLQkweGVmMDBlZmVmLDB4MjYwMDI2MjYsMHhlNTAwZTVlNSwweDYxMDA2MTYxLAotCTB4MWEwMDFhMWEsMHgzZjAwM2YzZiwweDNiMDAzYjNiLDB4ODIwMDgyODIsCi0JMHhiNjAwYjZiNiwweGRiMDBkYmRiLDB4ZDQwMGQ0ZDQsMHg5ODAwOTg5OCwKLQkweGU4MDBlOGU4LDB4OGIwMDhiOGIsMHgwMjAwMDIwMiwweGViMDBlYmViLAotCTB4MGEwMDBhMGEsMHgyYzAwMmMyYywweDFkMDAxZDFkLDB4YjAwMGIwYjAsCi0JMHg2ZjAwNmY2ZiwweDhkMDA4ZDhkLDB4ODgwMDg4ODgsMHgwZTAwMGUwZSwKLQkweDE5MDAxOTE5LDB4ODcwMDg3ODcsMHg0ZTAwNGU0ZSwweDBiMDAwYjBiLAotCTB4YTkwMGE5YTksMHgwYzAwMGMwYywweDc5MDA3OTc5LDB4MTEwMDExMTEsCi0JMHg3ZjAwN2Y3ZiwweDIyMDAyMjIyLDB4ZTcwMGU3ZTcsMHg1OTAwNTk1OSwKLQkweGUxMDBlMWUxLDB4ZGEwMGRhZGEsMHgzZDAwM2QzZCwweGM4MDBjOGM4LAotCTB4MTIwMDEyMTIsMHgwNDAwMDQwNCwweDc0MDA3NDc0LDB4NTQwMDU0NTQsCi0JMHgzMDAwMzAzMCwweDdlMDA3ZTdlLDB4YjQwMGI0YjQsMHgyODAwMjgyOCwKLQkweDU1MDA1NTU1LDB4NjgwMDY4NjgsMHg1MDAwNTA1MCwweGJlMDBiZWJlLAotCTB4ZDAwMGQwZDAsMHhjNDAwYzRjNCwweDMxMDAzMTMxLDB4Y2IwMGNiY2IsCi0JMHgyYTAwMmEyYSwweGFkMDBhZGFkLDB4MGYwMDBmMGYsMHhjYTAwY2FjYSwKLQkweDcwMDA3MDcwLDB4ZmYwMGZmZmYsMHgzMjAwMzIzMiwweDY5MDA2OTY5LAotCTB4MDgwMDA4MDgsMHg2MjAwNjI2MiwweDAwMDAwMDAwLDB4MjQwMDI0MjQsCi0JMHhkMTAwZDFkMSwweGZiMDBmYmZiLDB4YmEwMGJhYmEsMHhlZDAwZWRlZCwKLQkweDQ1MDA0NTQ1LDB4ODEwMDgxODEsMHg3MzAwNzM3MywweDZkMDA2ZDZkLAotCTB4ODQwMDg0ODQsMHg5ZjAwOWY5ZiwweGVlMDBlZWVlLDB4NGEwMDRhNGEsCi0JMHhjMzAwYzNjMywweDJlMDAyZTJlLDB4YzEwMGMxYzEsMHgwMTAwMDEwMSwKLQkweGU2MDBlNmU2LDB4MjUwMDI1MjUsMHg0ODAwNDg0OCwweDk5MDA5OTk5LAotCTB4YjkwMGI5YjksMHhiMzAwYjNiMywweDdiMDA3YjdiLDB4ZjkwMGY5ZjksCi0JMHhjZTAwY2VjZSwweGJmMDBiZmJmLDB4ZGYwMGRmZGYsMHg3MTAwNzE3MSwKLQkweDI5MDAyOTI5LDB4Y2QwMGNkY2QsMHg2YzAwNmM2YywweDEzMDAxMzEzLAotCTB4NjQwMDY0NjQsMHg5YjAwOWI5YiwweDYzMDA2MzYzLDB4OWQwMDlkOWQsCi0JMHhjMDAwYzBjMCwweDRiMDA0YjRiLDB4YjcwMGI3YjcsMHhhNTAwYTVhNSwKLQkweDg5MDA4OTg5LDB4NWYwMDVmNWYsMHhiMTAwYjFiMSwweDE3MDAxNzE3LAotCTB4ZjQwMGY0ZjQsMHhiYzAwYmNiYywweGQzMDBkM2QzLDB4NDYwMDQ2NDYsCi0JMHhjZjAwY2ZjZiwweDM3MDAzNzM3LDB4NWUwMDVlNWUsMHg0NzAwNDc0NywKLQkweDk0MDA5NDk0LDB4ZmEwMGZhZmEsMHhmYzAwZmNmYywweDViMDA1YjViLAotCTB4OTcwMDk3OTcsMHhmZTAwZmVmZSwweDVhMDA1YTVhLDB4YWMwMGFjYWMsCi0JMHgzYzAwM2MzYywweDRjMDA0YzRjLDB4MDMwMDAzMDMsMHgzNTAwMzUzNSwKLQkweGYzMDBmM2YzLDB4MjMwMDIzMjMsMHhiODAwYjhiOCwweDVkMDA1ZDVkLAotCTB4NmEwMDZhNmEsMHg5MjAwOTI5MiwweGQ1MDBkNWQ1LDB4MjEwMDIxMjEsCi0JMHg0NDAwNDQ0NCwweDUxMDA1MTUxLDB4YzYwMGM2YzYsMHg3ZDAwN2Q3ZCwKLQkweDM5MDAzOTM5LDB4ODMwMDgzODMsMHhkYzAwZGNkYywweGFhMDBhYWFhLAotCTB4N2MwMDdjN2MsMHg3NzAwNzc3NywweDU2MDA1NjU2LDB4MDUwMDA1MDUsCi0JMHgxYjAwMWIxYiwweGE0MDBhNGE0LDB4MTUwMDE1MTUsMHgzNDAwMzQzNCwKLQkweDFlMDAxZTFlLDB4MWMwMDFjMWMsMHhmODAwZjhmOCwweDUyMDA1MjUyLAotCTB4MjAwMDIwMjAsMHgxNDAwMTQxNCwweGU5MDBlOWU5LDB4YmQwMGJkYmQsCi0JMHhkZDAwZGRkZCwweGU0MDBlNGU0LDB4YTEwMGExYTEsMHhlMDAwZTBlMCwKLQkweDhhMDA4YThhLDB4ZjEwMGYxZjEsMHhkNjAwZDZkNiwweDdhMDA3YTdhLAotCTB4YmIwMGJiYmIsMHhlMzAwZTNlMywweDQwMDA0MDQwLDB4NGYwMDRmNGYsCi0JfTsKLQotc3RhdGljIGNvbnN0IHUzMiBjYW1lbGxpYV9zcDQ0MDRbMjU2XSA9Ci0JewotCTB4NzA3MDAwNzAsMHgyYzJjMDAyYywweGIzYjMwMGIzLDB4YzBjMDAwYzAsCi0JMHhlNGU0MDBlNCwweDU3NTcwMDU3LDB4ZWFlYTAwZWEsMHhhZWFlMDBhZSwKLQkweDIzMjMwMDIzLDB4NmI2YjAwNmIsMHg0NTQ1MDA0NSwweGE1YTUwMGE1LAotCTB4ZWRlZDAwZWQsMHg0ZjRmMDA0ZiwweDFkMWQwMDFkLDB4OTI5MjAwOTIsCi0JMHg4Njg2MDA4NiwweGFmYWYwMGFmLDB4N2M3YzAwN2MsMHgxZjFmMDAxZiwKLQkweDNlM2UwMDNlLDB4ZGNkYzAwZGMsMHg1ZTVlMDA1ZSwweDBiMGIwMDBiLAotCTB4YTZhNjAwYTYsMHgzOTM5MDAzOSwweGQ1ZDUwMGQ1LDB4NWQ1ZDAwNWQsCi0JMHhkOWQ5MDBkOSwweDVhNWEwMDVhLDB4NTE1MTAwNTEsMHg2YzZjMDA2YywKLQkweDhiOGIwMDhiLDB4OWE5YTAwOWEsMHhmYmZiMDBmYiwweGIwYjAwMGIwLAotCTB4NzQ3NDAwNzQsMHgyYjJiMDAyYiwweGYwZjAwMGYwLDB4ODQ4NDAwODQsCi0JMHhkZmRmMDBkZiwweGNiY2IwMGNiLDB4MzQzNDAwMzQsMHg3Njc2MDA3NiwKLQkweDZkNmQwMDZkLDB4YTlhOTAwYTksMHhkMWQxMDBkMSwweDA0MDQwMDA0LAotCTB4MTQxNDAwMTQsMHgzYTNhMDAzYSwweGRlZGUwMGRlLDB4MTExMTAwMTEsCi0JMHgzMjMyMDAzMiwweDljOWMwMDljLDB4NTM1MzAwNTMsMHhmMmYyMDBmMiwKLQkweGZlZmUwMGZlLDB4Y2ZjZjAwY2YsMHhjM2MzMDBjMywweDdhN2EwMDdhLAotCTB4MjQyNDAwMjQsMHhlOGU4MDBlOCwweDYwNjAwMDYwLDB4Njk2OTAwNjksCi0JMHhhYWFhMDBhYSwweGEwYTAwMGEwLDB4YTFhMTAwYTEsMHg2MjYyMDA2MiwKLQkweDU0NTQwMDU0LDB4MWUxZTAwMWUsMHhlMGUwMDBlMCwweDY0NjQwMDY0LAotCTB4MTAxMDAwMTAsMHgwMDAwMDAwMCwweGEzYTMwMGEzLDB4NzU3NTAwNzUsCi0JMHg4YThhMDA4YSwweGU2ZTYwMGU2LDB4MDkwOTAwMDksMHhkZGRkMDBkZCwKLQkweDg3ODcwMDg3LDB4ODM4MzAwODMsMHhjZGNkMDBjZCwweDkwOTAwMDkwLAotCTB4NzM3MzAwNzMsMHhmNmY2MDBmNiwweDlkOWQwMDlkLDB4YmZiZjAwYmYsCi0JMHg1MjUyMDA1MiwweGQ4ZDgwMGQ4LDB4YzhjODAwYzgsMHhjNmM2MDBjNiwKLQkweDgxODEwMDgxLDB4NmY2ZjAwNmYsMHgxMzEzMDAxMywweDYzNjMwMDYzLAotCTB4ZTllOTAwZTksMHhhN2E3MDBhNywweDlmOWYwMDlmLDB4YmNiYzAwYmMsCi0JMHgyOTI5MDAyOSwweGY5ZjkwMGY5LDB4MmYyZjAwMmYsMHhiNGI0MDBiNCwKLQkweDc4NzgwMDc4LDB4MDYwNjAwMDYsMHhlN2U3MDBlNywweDcxNzEwMDcxLAotCTB4ZDRkNDAwZDQsMHhhYmFiMDBhYiwweDg4ODgwMDg4LDB4OGQ4ZDAwOGQsCi0JMHg3MjcyMDA3MiwweGI5YjkwMGI5LDB4ZjhmODAwZjgsMHhhY2FjMDBhYywKLQkweDM2MzYwMDM2LDB4MmEyYTAwMmEsMHgzYzNjMDAzYywweGYxZjEwMGYxLAotCTB4NDA0MDAwNDAsMHhkM2QzMDBkMywweGJiYmIwMGJiLDB4NDM0MzAwNDMsCi0JMHgxNTE1MDAxNSwweGFkYWQwMGFkLDB4Nzc3NzAwNzcsMHg4MDgwMDA4MCwKLQkweDgyODIwMDgyLDB4ZWNlYzAwZWMsMHgyNzI3MDAyNywweGU1ZTUwMGU1LAotCTB4ODU4NTAwODUsMHgzNTM1MDAzNSwweDBjMGMwMDBjLDB4NDE0MTAwNDEsCi0JMHhlZmVmMDBlZiwweDkzOTMwMDkzLDB4MTkxOTAwMTksMHgyMTIxMDAyMSwKLQkweDBlMGUwMDBlLDB4NGU0ZTAwNGUsMHg2NTY1MDA2NSwweGJkYmQwMGJkLAotCTB4YjhiODAwYjgsMHg4ZjhmMDA4ZiwweGViZWIwMGViLDB4Y2VjZTAwY2UsCi0JMHgzMDMwMDAzMCwweDVmNWYwMDVmLDB4YzVjNTAwYzUsMHgxYTFhMDAxYSwKLQkweGUxZTEwMGUxLDB4Y2FjYTAwY2EsMHg0NzQ3MDA0NywweDNkM2QwMDNkLAotCTB4MDEwMTAwMDEsMHhkNmQ2MDBkNiwweDU2NTYwMDU2LDB4NGQ0ZDAwNGQsCi0JMHgwZDBkMDAwZCwweDY2NjYwMDY2LDB4Y2NjYzAwY2MsMHgyZDJkMDAyZCwKLQkweDEyMTIwMDEyLDB4MjAyMDAwMjAsMHhiMWIxMDBiMSwweDk5OTkwMDk5LAotCTB4NGM0YzAwNGMsMHhjMmMyMDBjMiwweDdlN2UwMDdlLDB4MDUwNTAwMDUsCi0JMHhiN2I3MDBiNywweDMxMzEwMDMxLDB4MTcxNzAwMTcsMHhkN2Q3MDBkNywKLQkweDU4NTgwMDU4LDB4NjE2MTAwNjEsMHgxYjFiMDAxYiwweDFjMWMwMDFjLAotCTB4MGYwZjAwMGYsMHgxNjE2MDAxNiwweDE4MTgwMDE4LDB4MjIyMjAwMjIsCi0JMHg0NDQ0MDA0NCwweGIyYjIwMGIyLDB4YjViNTAwYjUsMHg5MTkxMDA5MSwKLQkweDA4MDgwMDA4LDB4YThhODAwYTgsMHhmY2ZjMDBmYywweDUwNTAwMDUwLAotCTB4ZDBkMDAwZDAsMHg3ZDdkMDA3ZCwweDg5ODkwMDg5LDB4OTc5NzAwOTcsCi0JMHg1YjViMDA1YiwweDk1OTUwMDk1LDB4ZmZmZjAwZmYsMHhkMmQyMDBkMiwKLQkweGM0YzQwMGM0LDB4NDg0ODAwNDgsMHhmN2Y3MDBmNywweGRiZGIwMGRiLAotCTB4MDMwMzAwMDMsMHhkYWRhMDBkYSwweDNmM2YwMDNmLDB4OTQ5NDAwOTQsCi0JMHg1YzVjMDA1YywweDAyMDIwMDAyLDB4NGE0YTAwNGEsMHgzMzMzMDAzMywKLQkweDY3NjcwMDY3LDB4ZjNmMzAwZjMsMHg3ZjdmMDA3ZiwweGUyZTIwMGUyLAotCTB4OWI5YjAwOWIsMHgyNjI2MDAyNiwweDM3MzcwMDM3LDB4M2IzYjAwM2IsCi0JMHg5Njk2MDA5NiwweDRiNGIwMDRiLDB4YmViZTAwYmUsMHgyZTJlMDAyZSwKLQkweDc5NzkwMDc5LDB4OGM4YzAwOGMsMHg2ZTZlMDA2ZSwweDhlOGUwMDhlLAotCTB4ZjVmNTAwZjUsMHhiNmI2MDBiNiwweGZkZmQwMGZkLDB4NTk1OTAwNTksCi0JMHg5ODk4MDA5OCwweDZhNmEwMDZhLDB4NDY0NjAwNDYsMHhiYWJhMDBiYSwKLQkweDI1MjUwMDI1LDB4NDI0MjAwNDIsMHhhMmEyMDBhMiwweGZhZmEwMGZhLAotCTB4MDcwNzAwMDcsMHg1NTU1MDA1NSwweGVlZWUwMGVlLDB4MGEwYTAwMGEsCi0JMHg0OTQ5MDA0OSwweDY4NjgwMDY4LDB4MzgzODAwMzgsMHhhNGE0MDBhNCwKLQkweDI4MjgwMDI4LDB4N2I3YjAwN2IsMHhjOWM5MDBjOSwweGMxYzEwMGMxLAotCTB4ZTNlMzAwZTMsMHhmNGY0MDBmNCwweGM3YzcwMGM3LDB4OWU5ZTAwOWUsCi0JfTsKLQotLyoqCi0gKiBTdHVmZiByZWxhdGVkIHRvIHRoZSBDYW1lbGxpYSBrZXkgc2NoZWR1bGUKLSAqLwotI2RlZmluZSBzdWJsKHgpIHN1YkxbKHgpXQotI2RlZmluZSBzdWJyKHgpIHN1YlJbKHgpXQotCi12b2lkIGNhbWVsbGlhX3NldHVwMTI4KGNvbnN0IHU4ICprZXksIHUzMiAqc3Via2V5KQotCXsKLQl1MzIga2xsLCBrbHIsIGtybCwga3JyOwotCXUzMiBpbCwgaXIsIHQwLCB0MSwgdzAsIHcxOwotCXUzMiBrdzRsLCBrdzRyLCBkdywgdGwsIHRyOwotCXUzMiBzdWJMWzI2XTsKLQl1MzIgc3ViUlsyNl07Ci0KLQkvKioKLQkgKiAgayA9PSBrbGwgfHwga2xyIHx8IGtybCB8fCBrcnIgKHx8IGlzIGNvbmNhdGluYXRpb24pCi0JICovCi0Ja2xsID0gR0VUVTMyKGtleSAgICAgKTsKLQlrbHIgPSBHRVRVMzIoa2V5ICsgIDQpOwotCWtybCA9IEdFVFUzMihrZXkgKyAgOCk7Ci0Ja3JyID0gR0VUVTMyKGtleSArIDEyKTsKLQkvKioKLQkgKiBnZW5lcmF0ZSBLTCBkZXBlbmRlbnQgc3Via2V5cwotCSAqLwotCS8qIGt3MSAqLwotCXN1YmwoMCkgPSBrbGw7IHN1YnIoMCkgPSBrbHI7Ci0JLyoga3cyICovCi0Jc3VibCgxKSA9IGtybDsgc3VicigxKSA9IGtycjsKLQkvKiByb3RhdGlvbiBsZWZ0IHNoaWZ0IDE1Yml0ICovCi0JQ0FNRUxMSUFfUk9MRFEoa2xsLCBrbHIsIGtybCwga3JyLCB3MCwgdzEsIDE1KTsKLQkvKiBrMyAqLwotCXN1YmwoNCkgPSBrbGw7IHN1YnIoNCkgPSBrbHI7Ci0JLyogazQgKi8KLQlzdWJsKDUpID0ga3JsOyBzdWJyKDUpID0ga3JyOwotCS8qIHJvdGF0aW9uIGxlZnQgc2hpZnQgMTUrMzBiaXQgKi8KLQlDQU1FTExJQV9ST0xEUShrbGwsIGtsciwga3JsLCBrcnIsIHcwLCB3MSwgMzApOwotCS8qIGs3ICovCi0Jc3VibCgxMCkgPSBrbGw7IHN1YnIoMTApID0ga2xyOwotCS8qIGs4ICovCi0Jc3VibCgxMSkgPSBrcmw7IHN1YnIoMTEpID0ga3JyOwotCS8qIHJvdGF0aW9uIGxlZnQgc2hpZnQgMTUrMzArMTViaXQgKi8KLQlDQU1FTExJQV9ST0xEUShrbGwsIGtsciwga3JsLCBrcnIsIHcwLCB3MSwgMTUpOwotCS8qIGsxMCAqLwotCXN1YmwoMTMpID0ga3JsOyBzdWJyKDEzKSA9IGtycjsKLQkvKiByb3RhdGlvbiBsZWZ0IHNoaWZ0IDE1KzMwKzE1KzE3IGJpdCAqLwotCUNBTUVMTElBX1JPTERRKGtsbCwga2xyLCBrcmwsIGtyciwgdzAsIHcxLCAxNyk7Ci0JLyoga2wzICovCi0Jc3VibCgxNikgPSBrbGw7IHN1YnIoMTYpID0ga2xyOwotCS8qIGtsNCAqLwotCXN1YmwoMTcpID0ga3JsOyBzdWJyKDE3KSA9IGtycjsKLQkvKiByb3RhdGlvbiBsZWZ0IHNoaWZ0IDE1KzMwKzE1KzE3KzE3IGJpdCAqLwotCUNBTUVMTElBX1JPTERRKGtsbCwga2xyLCBrcmwsIGtyciwgdzAsIHcxLCAxNyk7Ci0JLyogazEzICovCi0Jc3VibCgxOCkgPSBrbGw7IHN1YnIoMTgpID0ga2xyOwotCS8qIGsxNCAqLwotCXN1YmwoMTkpID0ga3JsOyBzdWJyKDE5KSA9IGtycjsKLQkvKiByb3RhdGlvbiBsZWZ0IHNoaWZ0IDE1KzMwKzE1KzE3KzE3KzE3IGJpdCAqLwotCUNBTUVMTElBX1JPTERRKGtsbCwga2xyLCBrcmwsIGtyciwgdzAsIHcxLCAxNyk7Ci0JLyogazE3ICovCi0Jc3VibCgyMikgPSBrbGw7IHN1YnIoMjIpID0ga2xyOwotCS8qIGsxOCAqLwotCXN1YmwoMjMpID0ga3JsOyBzdWJyKDIzKSA9IGtycjsKLQotCS8qIGdlbmVyYXRlIEtBICovCi0Ja2xsID0gc3VibCgwKTsga2xyID0gc3VicigwKTsKLQlrcmwgPSBzdWJsKDEpOyBrcnIgPSBzdWJyKDEpOwotCUNBTUVMTElBX0Yoa2xsLCBrbHIsCi0JCUNBTUVMTElBX1NJR01BMUwsIENBTUVMTElBX1NJR01BMVIsCi0JCXcwLCB3MSwgaWwsIGlyLCB0MCwgdDEpOwotCWtybCBePSB3MDsga3JyIF49IHcxOwotCUNBTUVMTElBX0Yoa3JsLCBrcnIsCi0JCUNBTUVMTElBX1NJR01BMkwsIENBTUVMTElBX1NJR01BMlIsCi0JCWtsbCwga2xyLCBpbCwgaXIsIHQwLCB0MSk7Ci0JLyogY3VycmVudCBzdGF0dXMgPT0gKGtsbCwga2xyLCB3MCwgdzEpICovCi0JQ0FNRUxMSUFfRihrbGwsIGtsciwKLQkJQ0FNRUxMSUFfU0lHTUEzTCwgQ0FNRUxMSUFfU0lHTUEzUiwKLQkJa3JsLCBrcnIsIGlsLCBpciwgdDAsIHQxKTsKLQlrcmwgXj0gdzA7IGtyciBePSB3MTsKLQlDQU1FTExJQV9GKGtybCwga3JyLAotCQlDQU1FTExJQV9TSUdNQTRMLCBDQU1FTExJQV9TSUdNQTRSLAotCQl3MCwgdzEsIGlsLCBpciwgdDAsIHQxKTsKLQlrbGwgXj0gdzA7IGtsciBePSB3MTsKLQotCS8qIGdlbmVyYXRlIEtBIGRlcGVuZGVudCBzdWJrZXlzICovCi0JLyogazEsIGsyICovCi0Jc3VibCgyKSA9IGtsbDsgc3VicigyKSA9IGtscjsKLQlzdWJsKDMpID0ga3JsOyBzdWJyKDMpID0ga3JyOwotCUNBTUVMTElBX1JPTERRKGtsbCwga2xyLCBrcmwsIGtyciwgdzAsIHcxLCAxNSk7Ci0JLyogazUsazYgKi8KLQlzdWJsKDYpID0ga2xsOyBzdWJyKDYpID0ga2xyOwotCXN1YmwoNykgPSBrcmw7IHN1YnIoNykgPSBrcnI7Ci0JQ0FNRUxMSUFfUk9MRFEoa2xsLCBrbHIsIGtybCwga3JyLCB3MCwgdzEsIDE1KTsKLQkvKiBrbDEsIGtsMiAqLwotCXN1YmwoOCkgPSBrbGw7IHN1YnIoOCkgPSBrbHI7Ci0Jc3VibCg5KSA9IGtybDsgc3Vicig5KSA9IGtycjsKLQlDQU1FTExJQV9ST0xEUShrbGwsIGtsciwga3JsLCBrcnIsIHcwLCB3MSwgMTUpOwotCS8qIGs5ICovCi0Jc3VibCgxMikgPSBrbGw7IHN1YnIoMTIpID0ga2xyOwotCUNBTUVMTElBX1JPTERRKGtsbCwga2xyLCBrcmwsIGtyciwgdzAsIHcxLCAxNSk7Ci0JLyogazExLCBrMTIgKi8KLQlzdWJsKDE0KSA9IGtsbDsgc3VicigxNCkgPSBrbHI7Ci0Jc3VibCgxNSkgPSBrcmw7IHN1YnIoMTUpID0ga3JyOwotCUNBTUVMTElBX1JPTERRbzMyKGtsbCwga2xyLCBrcmwsIGtyciwgdzAsIHcxLCAzNCk7Ci0JLyogazE1LCBrMTYgKi8KLQlzdWJsKDIwKSA9IGtsbDsgc3VicigyMCkgPSBrbHI7Ci0Jc3VibCgyMSkgPSBrcmw7IHN1YnIoMjEpID0ga3JyOwotCUNBTUVMTElBX1JPTERRKGtsbCwga2xyLCBrcmwsIGtyciwgdzAsIHcxLCAxNyk7Ci0JLyoga3czLCBrdzQgKi8KLQlzdWJsKDI0KSA9IGtsbDsgc3VicigyNCkgPSBrbHI7Ci0Jc3VibCgyNSkgPSBrcmw7IHN1YnIoMjUpID0ga3JyOwotCi0KLQkvKiBhYnNvcmIga3cyIHRvIG90aGVyIHN1YmtleXMgKi8KLS8qIHJvdW5kIDIgKi8KLQlzdWJsKDMpIF49IHN1YmwoMSk7IHN1YnIoMykgXj0gc3VicigxKTsKLS8qIHJvdW5kIDQgKi8KLQlzdWJsKDUpIF49IHN1YmwoMSk7IHN1YnIoNSkgXj0gc3VicigxKTsKLS8qIHJvdW5kIDYgKi8KLQlzdWJsKDcpIF49IHN1YmwoMSk7IHN1YnIoNykgXj0gc3VicigxKTsKLQlzdWJsKDEpIF49IHN1YnIoMSkgJiB+c3Vicig5KTsKLQlkdyA9IHN1YmwoMSkgJiBzdWJsKDkpLAotCQlzdWJyKDEpIF49IENBTUVMTElBX1JMMShkdyk7IC8qIG1vZGlmaWVkIGZvciBGTGludihrbDIpICovCi0vKiByb3VuZCA4ICovCi0Jc3VibCgxMSkgXj0gc3VibCgxKTsgc3VicigxMSkgXj0gc3VicigxKTsKLS8qIHJvdW5kIDEwICovCi0Jc3VibCgxMykgXj0gc3VibCgxKTsgc3VicigxMykgXj0gc3VicigxKTsKLS8qIHJvdW5kIDEyICovCi0Jc3VibCgxNSkgXj0gc3VibCgxKTsgc3VicigxNSkgXj0gc3VicigxKTsKLQlzdWJsKDEpIF49IHN1YnIoMSkgJiB+c3VicigxNyk7Ci0JZHcgPSBzdWJsKDEpICYgc3VibCgxNyksCi0JCXN1YnIoMSkgXj0gQ0FNRUxMSUFfUkwxKGR3KTsgLyogbW9kaWZpZWQgZm9yIEZMaW52KGtsNCkgKi8KLS8qIHJvdW5kIDE0ICovCi0Jc3VibCgxOSkgXj0gc3VibCgxKTsgc3VicigxOSkgXj0gc3VicigxKTsKLS8qIHJvdW5kIDE2ICovCi0Jc3VibCgyMSkgXj0gc3VibCgxKTsgc3VicigyMSkgXj0gc3VicigxKTsKLS8qIHJvdW5kIDE4ICovCi0Jc3VibCgyMykgXj0gc3VibCgxKTsgc3VicigyMykgXj0gc3VicigxKTsKLS8qIGt3MyAqLwotCXN1YmwoMjQpIF49IHN1YmwoMSk7IHN1YnIoMjQpIF49IHN1YnIoMSk7Ci0KLQkvKiBhYnNvcmIga3c0IHRvIG90aGVyIHN1YmtleXMgKi8KLQlrdzRsID0gc3VibCgyNSk7IGt3NHIgPSBzdWJyKDI1KTsKLS8qIHJvdW5kIDE3ICovCi0Jc3VibCgyMikgXj0ga3c0bDsgc3VicigyMikgXj0ga3c0cjsKLS8qIHJvdW5kIDE1ICovCi0Jc3VibCgyMCkgXj0ga3c0bDsgc3VicigyMCkgXj0ga3c0cjsKLS8qIHJvdW5kIDEzICovCi0Jc3VibCgxOCkgXj0ga3c0bDsgc3VicigxOCkgXj0ga3c0cjsKLQlrdzRsIF49IGt3NHIgJiB+c3VicigxNik7Ci0JZHcgPSBrdzRsICYgc3VibCgxNiksCi0JCWt3NHIgXj0gQ0FNRUxMSUFfUkwxKGR3KTsgLyogbW9kaWZpZWQgZm9yIEZMKGtsMykgKi8KLS8qIHJvdW5kIDExICovCi0Jc3VibCgxNCkgXj0ga3c0bDsgc3VicigxNCkgXj0ga3c0cjsKLS8qIHJvdW5kIDkgKi8KLQlzdWJsKDEyKSBePSBrdzRsOyBzdWJyKDEyKSBePSBrdzRyOwotLyogcm91bmQgNyAqLwotCXN1YmwoMTApIF49IGt3NGw7IHN1YnIoMTApIF49IGt3NHI7Ci0Ja3c0bCBePSBrdzRyICYgfnN1YnIoOCk7Ci0JZHcgPSBrdzRsICYgc3VibCg4KSwKLQkJa3c0ciBePSBDQU1FTExJQV9STDEoZHcpOyAvKiBtb2RpZmllZCBmb3IgRkwoa2wxKSAqLwotLyogcm91bmQgNSAqLwotCXN1YmwoNikgXj0ga3c0bDsgc3Vicig2KSBePSBrdzRyOwotLyogcm91bmQgMyAqLwotCXN1YmwoNCkgXj0ga3c0bDsgc3Vicig0KSBePSBrdzRyOwotLyogcm91bmQgMSAqLwotCXN1YmwoMikgXj0ga3c0bDsgc3VicigyKSBePSBrdzRyOwotLyoga3cxICovCi0Jc3VibCgwKSBePSBrdzRsOyBzdWJyKDApIF49IGt3NHI7Ci0KLQotCS8qIGtleSBYT1IgaXMgZW5kIG9mIEYtZnVuY3Rpb24gKi8KLQlDYW1lbGxpYVN1YmtleUwoMCkgPSBzdWJsKDApIF4gc3VibCgyKTsvKiBrdzEgKi8KLQlDYW1lbGxpYVN1YmtleVIoMCkgPSBzdWJyKDApIF4gc3VicigyKTsKLQlDYW1lbGxpYVN1YmtleUwoMikgPSBzdWJsKDMpOyAgICAgICAvKiByb3VuZCAxICovCi0JQ2FtZWxsaWFTdWJrZXlSKDIpID0gc3VicigzKTsKLQlDYW1lbGxpYVN1YmtleUwoMykgPSBzdWJsKDIpIF4gc3VibCg0KTsgLyogcm91bmQgMiAqLwotCUNhbWVsbGlhU3Via2V5UigzKSA9IHN1YnIoMikgXiBzdWJyKDQpOwotCUNhbWVsbGlhU3Via2V5TCg0KSA9IHN1YmwoMykgXiBzdWJsKDUpOyAvKiByb3VuZCAzICovCi0JQ2FtZWxsaWFTdWJrZXlSKDQpID0gc3VicigzKSBeIHN1YnIoNSk7Ci0JQ2FtZWxsaWFTdWJrZXlMKDUpID0gc3VibCg0KSBeIHN1YmwoNik7IC8qIHJvdW5kIDQgKi8KLQlDYW1lbGxpYVN1YmtleVIoNSkgPSBzdWJyKDQpIF4gc3Vicig2KTsKLQlDYW1lbGxpYVN1YmtleUwoNikgPSBzdWJsKDUpIF4gc3VibCg3KTsgLyogcm91bmQgNSAqLwotCUNhbWVsbGlhU3Via2V5Uig2KSA9IHN1YnIoNSkgXiBzdWJyKDcpOwotCXRsID0gc3VibCgxMCkgXiAoc3VicigxMCkgJiB+c3Vicig4KSk7Ci0JZHcgPSB0bCAmIHN1YmwoOCksICAvKiBGTChrbDEpICovCi0JCXRyID0gc3VicigxMCkgXiBDQU1FTExJQV9STDEoZHcpOwotCUNhbWVsbGlhU3Via2V5TCg3KSA9IHN1YmwoNikgXiB0bDsgLyogcm91bmQgNiAqLwotCUNhbWVsbGlhU3Via2V5Uig3KSA9IHN1YnIoNikgXiB0cjsKLQlDYW1lbGxpYVN1YmtleUwoOCkgPSBzdWJsKDgpOyAgICAgICAvKiBGTChrbDEpICovCi0JQ2FtZWxsaWFTdWJrZXlSKDgpID0gc3Vicig4KTsKLQlDYW1lbGxpYVN1YmtleUwoOSkgPSBzdWJsKDkpOyAgICAgICAvKiBGTGludihrbDIpICovCi0JQ2FtZWxsaWFTdWJrZXlSKDkpID0gc3Vicig5KTsKLQl0bCA9IHN1YmwoNykgXiAoc3Vicig3KSAmIH5zdWJyKDkpKTsKLQlkdyA9IHRsICYgc3VibCg5KSwgIC8qIEZMaW52KGtsMikgKi8KLQkJdHIgPSBzdWJyKDcpIF4gQ0FNRUxMSUFfUkwxKGR3KTsKLQlDYW1lbGxpYVN1YmtleUwoMTApID0gdGwgXiBzdWJsKDExKTsgLyogcm91bmQgNyAqLwotCUNhbWVsbGlhU3Via2V5UigxMCkgPSB0ciBeIHN1YnIoMTEpOwotCUNhbWVsbGlhU3Via2V5TCgxMSkgPSBzdWJsKDEwKSBeIHN1YmwoMTIpOyAvKiByb3VuZCA4ICovCi0JQ2FtZWxsaWFTdWJrZXlSKDExKSA9IHN1YnIoMTApIF4gc3VicigxMik7Ci0JQ2FtZWxsaWFTdWJrZXlMKDEyKSA9IHN1YmwoMTEpIF4gc3VibCgxMyk7IC8qIHJvdW5kIDkgKi8KLQlDYW1lbGxpYVN1YmtleVIoMTIpID0gc3VicigxMSkgXiBzdWJyKDEzKTsKLQlDYW1lbGxpYVN1YmtleUwoMTMpID0gc3VibCgxMikgXiBzdWJsKDE0KTsgLyogcm91bmQgMTAgKi8KLQlDYW1lbGxpYVN1YmtleVIoMTMpID0gc3VicigxMikgXiBzdWJyKDE0KTsKLQlDYW1lbGxpYVN1YmtleUwoMTQpID0gc3VibCgxMykgXiBzdWJsKDE1KTsgLyogcm91bmQgMTEgKi8KLQlDYW1lbGxpYVN1YmtleVIoMTQpID0gc3VicigxMykgXiBzdWJyKDE1KTsKLQl0bCA9IHN1YmwoMTgpIF4gKHN1YnIoMTgpICYgfnN1YnIoMTYpKTsKLQlkdyA9IHRsICYgc3VibCgxNiksIC8qIEZMKGtsMykgKi8KLQkJdHIgPSBzdWJyKDE4KSBeIENBTUVMTElBX1JMMShkdyk7Ci0JQ2FtZWxsaWFTdWJrZXlMKDE1KSA9IHN1YmwoMTQpIF4gdGw7IC8qIHJvdW5kIDEyICovCi0JQ2FtZWxsaWFTdWJrZXlSKDE1KSA9IHN1YnIoMTQpIF4gdHI7Ci0JQ2FtZWxsaWFTdWJrZXlMKDE2KSA9IHN1YmwoMTYpOyAgICAgLyogRkwoa2wzKSAqLwotCUNhbWVsbGlhU3Via2V5UigxNikgPSBzdWJyKDE2KTsKLQlDYW1lbGxpYVN1YmtleUwoMTcpID0gc3VibCgxNyk7ICAgICAvKiBGTGludihrbDQpICovCi0JQ2FtZWxsaWFTdWJrZXlSKDE3KSA9IHN1YnIoMTcpOwotCXRsID0gc3VibCgxNSkgXiAoc3VicigxNSkgJiB+c3VicigxNykpOwotCWR3ID0gdGwgJiBzdWJsKDE3KSwgLyogRkxpbnYoa2w0KSAqLwotCQl0ciA9IHN1YnIoMTUpIF4gQ0FNRUxMSUFfUkwxKGR3KTsKLQlDYW1lbGxpYVN1YmtleUwoMTgpID0gdGwgXiBzdWJsKDE5KTsgLyogcm91bmQgMTMgKi8KLQlDYW1lbGxpYVN1YmtleVIoMTgpID0gdHIgXiBzdWJyKDE5KTsKLQlDYW1lbGxpYVN1YmtleUwoMTkpID0gc3VibCgxOCkgXiBzdWJsKDIwKTsgLyogcm91bmQgMTQgKi8KLQlDYW1lbGxpYVN1YmtleVIoMTkpID0gc3VicigxOCkgXiBzdWJyKDIwKTsKLQlDYW1lbGxpYVN1YmtleUwoMjApID0gc3VibCgxOSkgXiBzdWJsKDIxKTsgLyogcm91bmQgMTUgKi8KLQlDYW1lbGxpYVN1YmtleVIoMjApID0gc3VicigxOSkgXiBzdWJyKDIxKTsKLQlDYW1lbGxpYVN1YmtleUwoMjEpID0gc3VibCgyMCkgXiBzdWJsKDIyKTsgLyogcm91bmQgMTYgKi8KLQlDYW1lbGxpYVN1YmtleVIoMjEpID0gc3VicigyMCkgXiBzdWJyKDIyKTsKLQlDYW1lbGxpYVN1YmtleUwoMjIpID0gc3VibCgyMSkgXiBzdWJsKDIzKTsgLyogcm91bmQgMTcgKi8KLQlDYW1lbGxpYVN1YmtleVIoMjIpID0gc3VicigyMSkgXiBzdWJyKDIzKTsKLQlDYW1lbGxpYVN1YmtleUwoMjMpID0gc3VibCgyMik7ICAgICAvKiByb3VuZCAxOCAqLwotCUNhbWVsbGlhU3Via2V5UigyMykgPSBzdWJyKDIyKTsKLQlDYW1lbGxpYVN1YmtleUwoMjQpID0gc3VibCgyNCkgXiBzdWJsKDIzKTsgLyoga3czICovCi0JQ2FtZWxsaWFTdWJrZXlSKDI0KSA9IHN1YnIoMjQpIF4gc3VicigyMyk7Ci0KLQkvKiBhcHBseSB0aGUgaW52ZXJzZSBvZiB0aGUgbGFzdCBoYWxmIG9mIFAtZnVuY3Rpb24gKi8KLQlkdyA9IENhbWVsbGlhU3Via2V5TCgyKSBeIENhbWVsbGlhU3Via2V5UigyKSwKLQkJZHcgPSBDQU1FTExJQV9STDgoZHcpOy8qIHJvdW5kIDEgKi8KLQlDYW1lbGxpYVN1YmtleVIoMikgPSBDYW1lbGxpYVN1YmtleUwoMikgXiBkdywKLQkJQ2FtZWxsaWFTdWJrZXlMKDIpID0gZHc7Ci0JZHcgPSBDYW1lbGxpYVN1YmtleUwoMykgXiBDYW1lbGxpYVN1YmtleVIoMyksCi0JCWR3ID0gQ0FNRUxMSUFfUkw4KGR3KTsvKiByb3VuZCAyICovCi0JQ2FtZWxsaWFTdWJrZXlSKDMpID0gQ2FtZWxsaWFTdWJrZXlMKDMpIF4gZHcsCi0JCUNhbWVsbGlhU3Via2V5TCgzKSA9IGR3OwotCWR3ID0gQ2FtZWxsaWFTdWJrZXlMKDQpIF4gQ2FtZWxsaWFTdWJrZXlSKDQpLAotCQlkdyA9IENBTUVMTElBX1JMOChkdyk7Lyogcm91bmQgMyAqLwotCUNhbWVsbGlhU3Via2V5Uig0KSA9IENhbWVsbGlhU3Via2V5TCg0KSBeIGR3LAotCQlDYW1lbGxpYVN1YmtleUwoNCkgPSBkdzsKLQlkdyA9IENhbWVsbGlhU3Via2V5TCg1KSBeIENhbWVsbGlhU3Via2V5Uig1KSwKLQkJZHcgPSBDQU1FTExJQV9STDgoZHcpOy8qIHJvdW5kIDQgKi8KLQlDYW1lbGxpYVN1YmtleVIoNSkgPSBDYW1lbGxpYVN1YmtleUwoNSkgXiBkdywKLQkJQ2FtZWxsaWFTdWJrZXlMKDUpID0gZHc7Ci0JZHcgPSBDYW1lbGxpYVN1YmtleUwoNikgXiBDYW1lbGxpYVN1YmtleVIoNiksCi0JCWR3ID0gQ0FNRUxMSUFfUkw4KGR3KTsvKiByb3VuZCA1ICovCi0JQ2FtZWxsaWFTdWJrZXlSKDYpID0gQ2FtZWxsaWFTdWJrZXlMKDYpIF4gZHcsCi0JCUNhbWVsbGlhU3Via2V5TCg2KSA9IGR3OwotCWR3ID0gQ2FtZWxsaWFTdWJrZXlMKDcpIF4gQ2FtZWxsaWFTdWJrZXlSKDcpLAotCQlkdyA9IENBTUVMTElBX1JMOChkdyk7Lyogcm91bmQgNiAqLwotCUNhbWVsbGlhU3Via2V5Uig3KSA9IENhbWVsbGlhU3Via2V5TCg3KSBeIGR3LAotCQlDYW1lbGxpYVN1YmtleUwoNykgPSBkdzsKLQlkdyA9IENhbWVsbGlhU3Via2V5TCgxMCkgXiBDYW1lbGxpYVN1YmtleVIoMTApLAotCQlkdyA9IENBTUVMTElBX1JMOChkdyk7Lyogcm91bmQgNyAqLwotCUNhbWVsbGlhU3Via2V5UigxMCkgPSBDYW1lbGxpYVN1YmtleUwoMTApIF4gZHcsCi0JCUNhbWVsbGlhU3Via2V5TCgxMCkgPSBkdzsKLQlkdyA9IENhbWVsbGlhU3Via2V5TCgxMSkgXiBDYW1lbGxpYVN1YmtleVIoMTEpLAotCQlkdyA9IENBTUVMTElBX1JMOChkdyk7Lyogcm91bmQgOCAqLwotCUNhbWVsbGlhU3Via2V5UigxMSkgPSBDYW1lbGxpYVN1YmtleUwoMTEpIF4gZHcsCi0JCUNhbWVsbGlhU3Via2V5TCgxMSkgPSBkdzsKLQlkdyA9IENhbWVsbGlhU3Via2V5TCgxMikgXiBDYW1lbGxpYVN1YmtleVIoMTIpLAotCQlkdyA9IENBTUVMTElBX1JMOChkdyk7Lyogcm91bmQgOSAqLwotCUNhbWVsbGlhU3Via2V5UigxMikgPSBDYW1lbGxpYVN1YmtleUwoMTIpIF4gZHcsCi0JCUNhbWVsbGlhU3Via2V5TCgxMikgPSBkdzsKLQlkdyA9IENhbWVsbGlhU3Via2V5TCgxMykgXiBDYW1lbGxpYVN1YmtleVIoMTMpLAotCQlkdyA9IENBTUVMTElBX1JMOChkdyk7Lyogcm91bmQgMTAgKi8KLQlDYW1lbGxpYVN1YmtleVIoMTMpID0gQ2FtZWxsaWFTdWJrZXlMKDEzKSBeIGR3LAotCQlDYW1lbGxpYVN1YmtleUwoMTMpID0gZHc7Ci0JZHcgPSBDYW1lbGxpYVN1YmtleUwoMTQpIF4gQ2FtZWxsaWFTdWJrZXlSKDE0KSwKLQkJZHcgPSBDQU1FTExJQV9STDgoZHcpOy8qIHJvdW5kIDExICovCi0JQ2FtZWxsaWFTdWJrZXlSKDE0KSA9IENhbWVsbGlhU3Via2V5TCgxNCkgXiBkdywKLQkJQ2FtZWxsaWFTdWJrZXlMKDE0KSA9IGR3OwotCWR3ID0gQ2FtZWxsaWFTdWJrZXlMKDE1KSBeIENhbWVsbGlhU3Via2V5UigxNSksCi0JCWR3ID0gQ0FNRUxMSUFfUkw4KGR3KTsvKiByb3VuZCAxMiAqLwotCUNhbWVsbGlhU3Via2V5UigxNSkgPSBDYW1lbGxpYVN1YmtleUwoMTUpIF4gZHcsCi0JCUNhbWVsbGlhU3Via2V5TCgxNSkgPSBkdzsKLQlkdyA9IENhbWVsbGlhU3Via2V5TCgxOCkgXiBDYW1lbGxpYVN1YmtleVIoMTgpLAotCQlkdyA9IENBTUVMTElBX1JMOChkdyk7Lyogcm91bmQgMTMgKi8KLQlDYW1lbGxpYVN1YmtleVIoMTgpID0gQ2FtZWxsaWFTdWJrZXlMKDE4KSBeIGR3LAotCQlDYW1lbGxpYVN1YmtleUwoMTgpID0gZHc7Ci0JZHcgPSBDYW1lbGxpYVN1YmtleUwoMTkpIF4gQ2FtZWxsaWFTdWJrZXlSKDE5KSwKLQkJZHcgPSBDQU1FTExJQV9STDgoZHcpOy8qIHJvdW5kIDE0ICovCi0JQ2FtZWxsaWFTdWJrZXlSKDE5KSA9IENhbWVsbGlhU3Via2V5TCgxOSkgXiBkdywKLQkJQ2FtZWxsaWFTdWJrZXlMKDE5KSA9IGR3OwotCWR3ID0gQ2FtZWxsaWFTdWJrZXlMKDIwKSBeIENhbWVsbGlhU3Via2V5UigyMCksCi0JCWR3ID0gQ0FNRUxMSUFfUkw4KGR3KTsvKiByb3VuZCAxNSAqLwotCUNhbWVsbGlhU3Via2V5UigyMCkgPSBDYW1lbGxpYVN1YmtleUwoMjApIF4gZHcsCi0JCUNhbWVsbGlhU3Via2V5TCgyMCkgPSBkdzsKLQlkdyA9IENhbWVsbGlhU3Via2V5TCgyMSkgXiBDYW1lbGxpYVN1YmtleVIoMjEpLAotCQlkdyA9IENBTUVMTElBX1JMOChkdyk7Lyogcm91bmQgMTYgKi8KLQlDYW1lbGxpYVN1YmtleVIoMjEpID0gQ2FtZWxsaWFTdWJrZXlMKDIxKSBeIGR3LAotCQlDYW1lbGxpYVN1YmtleUwoMjEpID0gZHc7Ci0JZHcgPSBDYW1lbGxpYVN1YmtleUwoMjIpIF4gQ2FtZWxsaWFTdWJrZXlSKDIyKSwKLQkJZHcgPSBDQU1FTExJQV9STDgoZHcpOy8qIHJvdW5kIDE3ICovCi0JQ2FtZWxsaWFTdWJrZXlSKDIyKSA9IENhbWVsbGlhU3Via2V5TCgyMikgXiBkdywKLQkJQ2FtZWxsaWFTdWJrZXlMKDIyKSA9IGR3OwotCWR3ID0gQ2FtZWxsaWFTdWJrZXlMKDIzKSBeIENhbWVsbGlhU3Via2V5UigyMyksCi0JCWR3ID0gQ0FNRUxMSUFfUkw4KGR3KTsvKiByb3VuZCAxOCAqLwotCUNhbWVsbGlhU3Via2V5UigyMykgPSBDYW1lbGxpYVN1YmtleUwoMjMpIF4gZHcsCi0JCUNhbWVsbGlhU3Via2V5TCgyMykgPSBkdzsKLQotCXJldHVybjsKLQl9Ci0KLXZvaWQgY2FtZWxsaWFfc2V0dXAyNTYoY29uc3QgdTggKmtleSwgdTMyICpzdWJrZXkpCi0JewotCXUzMiBrbGwsa2xyLGtybCxrcnI7ICAgICAgICAgICAvKiBsZWZ0IGhhbGYgb2Yga2V5ICovCi0JdTMyIGtybGwsa3JscixrcnJsLGtycnI7ICAgICAgIC8qIHJpZ2h0IGhhbGYgb2Yga2V5ICovCi0JdTMyIGlsLCBpciwgdDAsIHQxLCB3MCwgdzE7ICAgIC8qIHRlbXBvcmFyeSB2YXJpYWJsZXMgKi8KLQl1MzIga3c0bCwga3c0ciwgZHcsIHRsLCB0cjsKLQl1MzIgc3ViTFszNF07Ci0JdTMyIHN1YlJbMzRdOwotCi0JLyoqCi0JICogIGtleSA9IChrbGwgfHwga2xyIHx8IGtybCB8fCBrcnIgfHwga3JsbCB8fCBrcmxyIHx8IGtycmwgfHwga3JycikKLQkgKiAgKHx8IGlzIGNvbmNhdGluYXRpb24pCi0JICovCi0KLQlrbGwgID0gR0VUVTMyKGtleSAgICAgKTsKLQlrbHIgID0gR0VUVTMyKGtleSArICA0KTsKLQlrcmwgID0gR0VUVTMyKGtleSArICA4KTsKLQlrcnIgID0gR0VUVTMyKGtleSArIDEyKTsKLQlrcmxsID0gR0VUVTMyKGtleSArIDE2KTsKLQlrcmxyID0gR0VUVTMyKGtleSArIDIwKTsKLQlrcnJsID0gR0VUVTMyKGtleSArIDI0KTsKLQlrcnJyID0gR0VUVTMyKGtleSArIDI4KTsKLQotCS8qIGdlbmVyYXRlIEtMIGRlcGVuZGVudCBzdWJrZXlzICovCi0JLyoga3cxICovCi0Jc3VibCgwKSA9IGtsbDsgc3VicigwKSA9IGtscjsKLQkvKiBrdzIgKi8KLQlzdWJsKDEpID0ga3JsOyBzdWJyKDEpID0ga3JyOwotCUNBTUVMTElBX1JPTERRbzMyKGtsbCwga2xyLCBrcmwsIGtyciwgdzAsIHcxLCA0NSk7Ci0JLyogazkgKi8KLQlzdWJsKDEyKSA9IGtsbDsgc3VicigxMikgPSBrbHI7Ci0JLyogazEwICovCi0Jc3VibCgxMykgPSBrcmw7IHN1YnIoMTMpID0ga3JyOwotCUNBTUVMTElBX1JPTERRKGtsbCwga2xyLCBrcmwsIGtyciwgdzAsIHcxLCAxNSk7Ci0JLyoga2wzICovCi0Jc3VibCgxNikgPSBrbGw7IHN1YnIoMTYpID0ga2xyOwotCS8qIGtsNCAqLwotCXN1YmwoMTcpID0ga3JsOyBzdWJyKDE3KSA9IGtycjsKLQlDQU1FTExJQV9ST0xEUShrbGwsIGtsciwga3JsLCBrcnIsIHcwLCB3MSwgMTcpOwotCS8qIGsxNyAqLwotCXN1YmwoMjIpID0ga2xsOyBzdWJyKDIyKSA9IGtscjsKLQkvKiBrMTggKi8KLQlzdWJsKDIzKSA9IGtybDsgc3VicigyMykgPSBrcnI7Ci0JQ0FNRUxMSUFfUk9MRFFvMzIoa2xsLCBrbHIsIGtybCwga3JyLCB3MCwgdzEsIDM0KTsKLQkvKiBrMjMgKi8KLQlzdWJsKDMwKSA9IGtsbDsgc3VicigzMCkgPSBrbHI7Ci0JLyogazI0ICovCi0Jc3VibCgzMSkgPSBrcmw7IHN1YnIoMzEpID0ga3JyOwotCi0JLyogZ2VuZXJhdGUgS1IgZGVwZW5kZW50IHN1YmtleXMgKi8KLQlDQU1FTExJQV9ST0xEUShrcmxsLCBrcmxyLCBrcnJsLCBrcnJyLCB3MCwgdzEsIDE1KTsKLQkvKiBrMyAqLwotCXN1YmwoNCkgPSBrcmxsOyBzdWJyKDQpID0ga3JscjsKLQkvKiBrNCAqLwotCXN1YmwoNSkgPSBrcnJsOyBzdWJyKDUpID0ga3JycjsKLQlDQU1FTExJQV9ST0xEUShrcmxsLCBrcmxyLCBrcnJsLCBrcnJyLCB3MCwgdzEsIDE1KTsKLQkvKiBrbDEgKi8KLQlzdWJsKDgpID0ga3JsbDsgc3Vicig4KSA9IGtybHI7Ci0JLyoga2wyICovCi0Jc3VibCg5KSA9IGtycmw7IHN1YnIoOSkgPSBrcnJyOwotCUNBTUVMTElBX1JPTERRKGtybGwsIGtybHIsIGtycmwsIGtycnIsIHcwLCB3MSwgMzApOwotCS8qIGsxMyAqLwotCXN1YmwoMTgpID0ga3JsbDsgc3VicigxOCkgPSBrcmxyOwotCS8qIGsxNCAqLwotCXN1YmwoMTkpID0ga3JybDsgc3VicigxOSkgPSBrcnJyOwotCUNBTUVMTElBX1JPTERRbzMyKGtybGwsIGtybHIsIGtycmwsIGtycnIsIHcwLCB3MSwgMzQpOwotCS8qIGsxOSAqLwotCXN1YmwoMjYpID0ga3JsbDsgc3VicigyNikgPSBrcmxyOwotCS8qIGsyMCAqLwotCXN1YmwoMjcpID0ga3JybDsgc3VicigyNykgPSBrcnJyOwotCUNBTUVMTElBX1JPTERRbzMyKGtybGwsIGtybHIsIGtycmwsIGtycnIsIHcwLCB3MSwgMzQpOwotCi0JLyogZ2VuZXJhdGUgS0EgKi8KLQlrbGwgPSBzdWJsKDApIF4ga3JsbDsga2xyID0gc3VicigwKSBeIGtybHI7Ci0Ja3JsID0gc3VibCgxKSBeIGtycmw7IGtyciA9IHN1YnIoMSkgXiBrcnJyOwotCUNBTUVMTElBX0Yoa2xsLCBrbHIsCi0JCUNBTUVMTElBX1NJR01BMUwsIENBTUVMTElBX1NJR01BMVIsCi0JCXcwLCB3MSwgaWwsIGlyLCB0MCwgdDEpOwotCWtybCBePSB3MDsga3JyIF49IHcxOwotCUNBTUVMTElBX0Yoa3JsLCBrcnIsCi0JCUNBTUVMTElBX1NJR01BMkwsIENBTUVMTElBX1NJR01BMlIsCi0JCWtsbCwga2xyLCBpbCwgaXIsIHQwLCB0MSk7Ci0Ja2xsIF49IGtybGw7IGtsciBePSBrcmxyOwotCUNBTUVMTElBX0Yoa2xsLCBrbHIsCi0JCUNBTUVMTElBX1NJR01BM0wsIENBTUVMTElBX1NJR01BM1IsCi0JCWtybCwga3JyLCBpbCwgaXIsIHQwLCB0MSk7Ci0Ja3JsIF49IHcwIF4ga3JybDsga3JyIF49IHcxIF4ga3JycjsKLQlDQU1FTExJQV9GKGtybCwga3JyLAotCQlDQU1FTExJQV9TSUdNQTRMLCBDQU1FTExJQV9TSUdNQTRSLAotCQl3MCwgdzEsIGlsLCBpciwgdDAsIHQxKTsKLQlrbGwgXj0gdzA7IGtsciBePSB3MTsKLQotCS8qIGdlbmVyYXRlIEtCICovCi0Ja3JsbCBePSBrbGw7IGtybHIgXj0ga2xyOwotCWtycmwgXj0ga3JsOyBrcnJyIF49IGtycjsKLQlDQU1FTExJQV9GKGtybGwsIGtybHIsCi0JCUNBTUVMTElBX1NJR01BNUwsIENBTUVMTElBX1NJR01BNVIsCi0JCXcwLCB3MSwgaWwsIGlyLCB0MCwgdDEpOwotCWtycmwgXj0gdzA7IGtycnIgXj0gdzE7Ci0JQ0FNRUxMSUFfRihrcnJsLCBrcnJyLAotCQlDQU1FTExJQV9TSUdNQTZMLCBDQU1FTExJQV9TSUdNQTZSLAotCQl3MCwgdzEsIGlsLCBpciwgdDAsIHQxKTsKLQlrcmxsIF49IHcwOyBrcmxyIF49IHcxOwotCi0JLyogZ2VuZXJhdGUgS0EgZGVwZW5kZW50IHN1YmtleXMgKi8KLQlDQU1FTExJQV9ST0xEUShrbGwsIGtsciwga3JsLCBrcnIsIHcwLCB3MSwgMTUpOwotCS8qIGs1ICovCi0Jc3VibCg2KSA9IGtsbDsgc3Vicig2KSA9IGtscjsKLQkvKiBrNiAqLwotCXN1YmwoNykgPSBrcmw7IHN1YnIoNykgPSBrcnI7Ci0JQ0FNRUxMSUFfUk9MRFEoa2xsLCBrbHIsIGtybCwga3JyLCB3MCwgdzEsIDMwKTsKLQkvKiBrMTEgKi8KLQlzdWJsKDE0KSA9IGtsbDsgc3VicigxNCkgPSBrbHI7Ci0JLyogazEyICovCi0Jc3VibCgxNSkgPSBrcmw7IHN1YnIoMTUpID0ga3JyOwotCS8qIHJvdGF0aW9uIGxlZnQgc2hpZnQgMzJiaXQgKi8KLQkvKiBrbDUgKi8KLQlzdWJsKDI0KSA9IGtscjsgc3VicigyNCkgPSBrcmw7Ci0JLyoga2w2ICovCi0Jc3VibCgyNSkgPSBrcnI7IHN1YnIoMjUpID0ga2xsOwotCS8qIHJvdGF0aW9uIGxlZnQgc2hpZnQgNDkgZnJvbSBrMTEsazEyIC0+IGsyMSxrMjIgKi8KLQlDQU1FTExJQV9ST0xEUW8zMihrbGwsIGtsciwga3JsLCBrcnIsIHcwLCB3MSwgNDkpOwotCS8qIGsyMSAqLwotCXN1YmwoMjgpID0ga2xsOyBzdWJyKDI4KSA9IGtscjsKLQkvKiBrMjIgKi8KLQlzdWJsKDI5KSA9IGtybDsgc3VicigyOSkgPSBrcnI7Ci0KLQkvKiBnZW5lcmF0ZSBLQiBkZXBlbmRlbnQgc3Via2V5cyAqLwotCS8qIGsxICovCi0Jc3VibCgyKSA9IGtybGw7IHN1YnIoMikgPSBrcmxyOwotCS8qIGsyICovCi0Jc3VibCgzKSA9IGtycmw7IHN1YnIoMykgPSBrcnJyOwotCUNBTUVMTElBX1JPTERRKGtybGwsIGtybHIsIGtycmwsIGtycnIsIHcwLCB3MSwgMzApOwotCS8qIGs3ICovCi0Jc3VibCgxMCkgPSBrcmxsOyBzdWJyKDEwKSA9IGtybHI7Ci0JLyogazggKi8KLQlzdWJsKDExKSA9IGtycmw7IHN1YnIoMTEpID0ga3JycjsKLQlDQU1FTExJQV9ST0xEUShrcmxsLCBrcmxyLCBrcnJsLCBrcnJyLCB3MCwgdzEsIDMwKTsKLQkvKiBrMTUgKi8KLQlzdWJsKDIwKSA9IGtybGw7IHN1YnIoMjApID0ga3JscjsKLQkvKiBrMTYgKi8KLQlzdWJsKDIxKSA9IGtycmw7IHN1YnIoMjEpID0ga3JycjsKLQlDQU1FTExJQV9ST0xEUW8zMihrcmxsLCBrcmxyLCBrcnJsLCBrcnJyLCB3MCwgdzEsIDUxKTsKLQkvKiBrdzMgKi8KLQlzdWJsKDMyKSA9IGtybGw7IHN1YnIoMzIpID0ga3JscjsKLQkvKiBrdzQgKi8KLQlzdWJsKDMzKSA9IGtycmw7IHN1YnIoMzMpID0ga3JycjsKLQotCS8qIGFic29yYiBrdzIgdG8gb3RoZXIgc3Via2V5cyAqLwotLyogcm91bmQgMiAqLwotCXN1YmwoMykgXj0gc3VibCgxKTsgc3VicigzKSBePSBzdWJyKDEpOwotLyogcm91bmQgNCAqLwotCXN1YmwoNSkgXj0gc3VibCgxKTsgc3Vicig1KSBePSBzdWJyKDEpOwotLyogcm91bmQgNiAqLwotCXN1YmwoNykgXj0gc3VibCgxKTsgc3Vicig3KSBePSBzdWJyKDEpOwotCXN1YmwoMSkgXj0gc3VicigxKSAmIH5zdWJyKDkpOwotCWR3ID0gc3VibCgxKSAmIHN1YmwoOSksCi0JCXN1YnIoMSkgXj0gQ0FNRUxMSUFfUkwxKGR3KTsgLyogbW9kaWZpZWQgZm9yIEZMaW52KGtsMikgKi8KLS8qIHJvdW5kIDggKi8KLQlzdWJsKDExKSBePSBzdWJsKDEpOyBzdWJyKDExKSBePSBzdWJyKDEpOwotLyogcm91bmQgMTAgKi8KLQlzdWJsKDEzKSBePSBzdWJsKDEpOyBzdWJyKDEzKSBePSBzdWJyKDEpOwotLyogcm91bmQgMTIgKi8KLQlzdWJsKDE1KSBePSBzdWJsKDEpOyBzdWJyKDE1KSBePSBzdWJyKDEpOwotCXN1YmwoMSkgXj0gc3VicigxKSAmIH5zdWJyKDE3KTsKLQlkdyA9IHN1YmwoMSkgJiBzdWJsKDE3KSwKLQkJc3VicigxKSBePSBDQU1FTExJQV9STDEoZHcpOyAvKiBtb2RpZmllZCBmb3IgRkxpbnYoa2w0KSAqLwotLyogcm91bmQgMTQgKi8KLQlzdWJsKDE5KSBePSBzdWJsKDEpOyBzdWJyKDE5KSBePSBzdWJyKDEpOwotLyogcm91bmQgMTYgKi8KLQlzdWJsKDIxKSBePSBzdWJsKDEpOyBzdWJyKDIxKSBePSBzdWJyKDEpOwotLyogcm91bmQgMTggKi8KLQlzdWJsKDIzKSBePSBzdWJsKDEpOyBzdWJyKDIzKSBePSBzdWJyKDEpOwotCXN1YmwoMSkgXj0gc3VicigxKSAmIH5zdWJyKDI1KTsKLQlkdyA9IHN1YmwoMSkgJiBzdWJsKDI1KSwKLQkJc3VicigxKSBePSBDQU1FTExJQV9STDEoZHcpOyAvKiBtb2RpZmllZCBmb3IgRkxpbnYoa2w2KSAqLwotLyogcm91bmQgMjAgKi8KLQlzdWJsKDI3KSBePSBzdWJsKDEpOyBzdWJyKDI3KSBePSBzdWJyKDEpOwotLyogcm91bmQgMjIgKi8KLQlzdWJsKDI5KSBePSBzdWJsKDEpOyBzdWJyKDI5KSBePSBzdWJyKDEpOwotLyogcm91bmQgMjQgKi8KLQlzdWJsKDMxKSBePSBzdWJsKDEpOyBzdWJyKDMxKSBePSBzdWJyKDEpOwotLyoga3czICovCi0Jc3VibCgzMikgXj0gc3VibCgxKTsgc3VicigzMikgXj0gc3VicigxKTsKLQotCi0JLyogYWJzb3JiIGt3NCB0byBvdGhlciBzdWJrZXlzICovCi0Ja3c0bCA9IHN1YmwoMzMpOyBrdzRyID0gc3VicigzMyk7Ci0vKiByb3VuZCAyMyAqLwotCXN1YmwoMzApIF49IGt3NGw7IHN1YnIoMzApIF49IGt3NHI7Ci0vKiByb3VuZCAyMSAqLwotCXN1YmwoMjgpIF49IGt3NGw7IHN1YnIoMjgpIF49IGt3NHI7Ci0vKiByb3VuZCAxOSAqLwotCXN1YmwoMjYpIF49IGt3NGw7IHN1YnIoMjYpIF49IGt3NHI7Ci0Ja3c0bCBePSBrdzRyICYgfnN1YnIoMjQpOwotCWR3ID0ga3c0bCAmIHN1YmwoMjQpLAotCQlrdzRyIF49IENBTUVMTElBX1JMMShkdyk7IC8qIG1vZGlmaWVkIGZvciBGTChrbDUpICovCi0vKiByb3VuZCAxNyAqLwotCXN1YmwoMjIpIF49IGt3NGw7IHN1YnIoMjIpIF49IGt3NHI7Ci0vKiByb3VuZCAxNSAqLwotCXN1YmwoMjApIF49IGt3NGw7IHN1YnIoMjApIF49IGt3NHI7Ci0vKiByb3VuZCAxMyAqLwotCXN1YmwoMTgpIF49IGt3NGw7IHN1YnIoMTgpIF49IGt3NHI7Ci0Ja3c0bCBePSBrdzRyICYgfnN1YnIoMTYpOwotCWR3ID0ga3c0bCAmIHN1YmwoMTYpLAotCQlrdzRyIF49IENBTUVMTElBX1JMMShkdyk7IC8qIG1vZGlmaWVkIGZvciBGTChrbDMpICovCi0vKiByb3VuZCAxMSAqLwotCXN1YmwoMTQpIF49IGt3NGw7IHN1YnIoMTQpIF49IGt3NHI7Ci0vKiByb3VuZCA5ICovCi0Jc3VibCgxMikgXj0ga3c0bDsgc3VicigxMikgXj0ga3c0cjsKLS8qIHJvdW5kIDcgKi8KLQlzdWJsKDEwKSBePSBrdzRsOyBzdWJyKDEwKSBePSBrdzRyOwotCWt3NGwgXj0ga3c0ciAmIH5zdWJyKDgpOwotCWR3ID0ga3c0bCAmIHN1YmwoOCksCi0JCWt3NHIgXj0gQ0FNRUxMSUFfUkwxKGR3KTsgLyogbW9kaWZpZWQgZm9yIEZMKGtsMSkgKi8KLS8qIHJvdW5kIDUgKi8KLQlzdWJsKDYpIF49IGt3NGw7IHN1YnIoNikgXj0ga3c0cjsKLS8qIHJvdW5kIDMgKi8KLQlzdWJsKDQpIF49IGt3NGw7IHN1YnIoNCkgXj0ga3c0cjsKLS8qIHJvdW5kIDEgKi8KLQlzdWJsKDIpIF49IGt3NGw7IHN1YnIoMikgXj0ga3c0cjsKLS8qIGt3MSAqLwotCXN1YmwoMCkgXj0ga3c0bDsgc3VicigwKSBePSBrdzRyOwotCi0JLyoga2V5IFhPUiBpcyBlbmQgb2YgRi1mdW5jdGlvbiAqLwotCUNhbWVsbGlhU3Via2V5TCgwKSA9IHN1YmwoMCkgXiBzdWJsKDIpOy8qIGt3MSAqLwotCUNhbWVsbGlhU3Via2V5UigwKSA9IHN1YnIoMCkgXiBzdWJyKDIpOwotCUNhbWVsbGlhU3Via2V5TCgyKSA9IHN1YmwoMyk7ICAgICAgIC8qIHJvdW5kIDEgKi8KLQlDYW1lbGxpYVN1YmtleVIoMikgPSBzdWJyKDMpOwotCUNhbWVsbGlhU3Via2V5TCgzKSA9IHN1YmwoMikgXiBzdWJsKDQpOyAvKiByb3VuZCAyICovCi0JQ2FtZWxsaWFTdWJrZXlSKDMpID0gc3VicigyKSBeIHN1YnIoNCk7Ci0JQ2FtZWxsaWFTdWJrZXlMKDQpID0gc3VibCgzKSBeIHN1YmwoNSk7IC8qIHJvdW5kIDMgKi8KLQlDYW1lbGxpYVN1YmtleVIoNCkgPSBzdWJyKDMpIF4gc3Vicig1KTsKLQlDYW1lbGxpYVN1YmtleUwoNSkgPSBzdWJsKDQpIF4gc3VibCg2KTsgLyogcm91bmQgNCAqLwotCUNhbWVsbGlhU3Via2V5Uig1KSA9IHN1YnIoNCkgXiBzdWJyKDYpOwotCUNhbWVsbGlhU3Via2V5TCg2KSA9IHN1YmwoNSkgXiBzdWJsKDcpOyAvKiByb3VuZCA1ICovCi0JQ2FtZWxsaWFTdWJrZXlSKDYpID0gc3Vicig1KSBeIHN1YnIoNyk7Ci0JdGwgPSBzdWJsKDEwKSBeIChzdWJyKDEwKSAmIH5zdWJyKDgpKTsKLQlkdyA9IHRsICYgc3VibCg4KSwgIC8qIEZMKGtsMSkgKi8KLQkJdHIgPSBzdWJyKDEwKSBeIENBTUVMTElBX1JMMShkdyk7Ci0JQ2FtZWxsaWFTdWJrZXlMKDcpID0gc3VibCg2KSBeIHRsOyAvKiByb3VuZCA2ICovCi0JQ2FtZWxsaWFTdWJrZXlSKDcpID0gc3Vicig2KSBeIHRyOwotCUNhbWVsbGlhU3Via2V5TCg4KSA9IHN1YmwoOCk7ICAgICAgIC8qIEZMKGtsMSkgKi8KLQlDYW1lbGxpYVN1YmtleVIoOCkgPSBzdWJyKDgpOwotCUNhbWVsbGlhU3Via2V5TCg5KSA9IHN1YmwoOSk7ICAgICAgIC8qIEZMaW52KGtsMikgKi8KLQlDYW1lbGxpYVN1YmtleVIoOSkgPSBzdWJyKDkpOwotCXRsID0gc3VibCg3KSBeIChzdWJyKDcpICYgfnN1YnIoOSkpOwotCWR3ID0gdGwgJiBzdWJsKDkpLCAgLyogRkxpbnYoa2wyKSAqLwotCQl0ciA9IHN1YnIoNykgXiBDQU1FTExJQV9STDEoZHcpOwotCUNhbWVsbGlhU3Via2V5TCgxMCkgPSB0bCBeIHN1YmwoMTEpOyAvKiByb3VuZCA3ICovCi0JQ2FtZWxsaWFTdWJrZXlSKDEwKSA9IHRyIF4gc3VicigxMSk7Ci0JQ2FtZWxsaWFTdWJrZXlMKDExKSA9IHN1YmwoMTApIF4gc3VibCgxMik7IC8qIHJvdW5kIDggKi8KLQlDYW1lbGxpYVN1YmtleVIoMTEpID0gc3VicigxMCkgXiBzdWJyKDEyKTsKLQlDYW1lbGxpYVN1YmtleUwoMTIpID0gc3VibCgxMSkgXiBzdWJsKDEzKTsgLyogcm91bmQgOSAqLwotCUNhbWVsbGlhU3Via2V5UigxMikgPSBzdWJyKDExKSBeIHN1YnIoMTMpOwotCUNhbWVsbGlhU3Via2V5TCgxMykgPSBzdWJsKDEyKSBeIHN1YmwoMTQpOyAvKiByb3VuZCAxMCAqLwotCUNhbWVsbGlhU3Via2V5UigxMykgPSBzdWJyKDEyKSBeIHN1YnIoMTQpOwotCUNhbWVsbGlhU3Via2V5TCgxNCkgPSBzdWJsKDEzKSBeIHN1YmwoMTUpOyAvKiByb3VuZCAxMSAqLwotCUNhbWVsbGlhU3Via2V5UigxNCkgPSBzdWJyKDEzKSBeIHN1YnIoMTUpOwotCXRsID0gc3VibCgxOCkgXiAoc3VicigxOCkgJiB+c3VicigxNikpOwotCWR3ID0gdGwgJiBzdWJsKDE2KSwgLyogRkwoa2wzKSAqLwotCQl0ciA9IHN1YnIoMTgpIF4gQ0FNRUxMSUFfUkwxKGR3KTsKLQlDYW1lbGxpYVN1YmtleUwoMTUpID0gc3VibCgxNCkgXiB0bDsgLyogcm91bmQgMTIgKi8KLQlDYW1lbGxpYVN1YmtleVIoMTUpID0gc3VicigxNCkgXiB0cjsKLQlDYW1lbGxpYVN1YmtleUwoMTYpID0gc3VibCgxNik7ICAgICAvKiBGTChrbDMpICovCi0JQ2FtZWxsaWFTdWJrZXlSKDE2KSA9IHN1YnIoMTYpOwotCUNhbWVsbGlhU3Via2V5TCgxNykgPSBzdWJsKDE3KTsgICAgIC8qIEZMaW52KGtsNCkgKi8KLQlDYW1lbGxpYVN1YmtleVIoMTcpID0gc3VicigxNyk7Ci0JdGwgPSBzdWJsKDE1KSBeIChzdWJyKDE1KSAmIH5zdWJyKDE3KSk7Ci0JZHcgPSB0bCAmIHN1YmwoMTcpLCAvKiBGTGludihrbDQpICovCi0JCXRyID0gc3VicigxNSkgXiBDQU1FTExJQV9STDEoZHcpOwotCUNhbWVsbGlhU3Via2V5TCgxOCkgPSB0bCBeIHN1YmwoMTkpOyAvKiByb3VuZCAxMyAqLwotCUNhbWVsbGlhU3Via2V5UigxOCkgPSB0ciBeIHN1YnIoMTkpOwotCUNhbWVsbGlhU3Via2V5TCgxOSkgPSBzdWJsKDE4KSBeIHN1YmwoMjApOyAvKiByb3VuZCAxNCAqLwotCUNhbWVsbGlhU3Via2V5UigxOSkgPSBzdWJyKDE4KSBeIHN1YnIoMjApOwotCUNhbWVsbGlhU3Via2V5TCgyMCkgPSBzdWJsKDE5KSBeIHN1YmwoMjEpOyAvKiByb3VuZCAxNSAqLwotCUNhbWVsbGlhU3Via2V5UigyMCkgPSBzdWJyKDE5KSBeIHN1YnIoMjEpOwotCUNhbWVsbGlhU3Via2V5TCgyMSkgPSBzdWJsKDIwKSBeIHN1YmwoMjIpOyAvKiByb3VuZCAxNiAqLwotCUNhbWVsbGlhU3Via2V5UigyMSkgPSBzdWJyKDIwKSBeIHN1YnIoMjIpOwotCUNhbWVsbGlhU3Via2V5TCgyMikgPSBzdWJsKDIxKSBeIHN1YmwoMjMpOyAvKiByb3VuZCAxNyAqLwotCUNhbWVsbGlhU3Via2V5UigyMikgPSBzdWJyKDIxKSBeIHN1YnIoMjMpOwotCXRsID0gc3VibCgyNikgXiAoc3VicigyNikKLQkJJiB+c3VicigyNCkpOwotCWR3ID0gdGwgJiBzdWJsKDI0KSwgLyogRkwoa2w1KSAqLwotCQl0ciA9IHN1YnIoMjYpIF4gQ0FNRUxMSUFfUkwxKGR3KTsKLQlDYW1lbGxpYVN1YmtleUwoMjMpID0gc3VibCgyMikgXiB0bDsgLyogcm91bmQgMTggKi8KLQlDYW1lbGxpYVN1YmtleVIoMjMpID0gc3VicigyMikgXiB0cjsKLQlDYW1lbGxpYVN1YmtleUwoMjQpID0gc3VibCgyNCk7ICAgICAvKiBGTChrbDUpICovCi0JQ2FtZWxsaWFTdWJrZXlSKDI0KSA9IHN1YnIoMjQpOwotCUNhbWVsbGlhU3Via2V5TCgyNSkgPSBzdWJsKDI1KTsgICAgIC8qIEZMaW52KGtsNikgKi8KLQlDYW1lbGxpYVN1YmtleVIoMjUpID0gc3VicigyNSk7Ci0JdGwgPSBzdWJsKDIzKSBeIChzdWJyKDIzKSAmCi0JCX5zdWJyKDI1KSk7Ci0JZHcgPSB0bCAmIHN1YmwoMjUpLCAvKiBGTGludihrbDYpICovCi0JCXRyID0gc3VicigyMykgXiBDQU1FTExJQV9STDEoZHcpOwotCUNhbWVsbGlhU3Via2V5TCgyNikgPSB0bCBeIHN1YmwoMjcpOyAvKiByb3VuZCAxOSAqLwotCUNhbWVsbGlhU3Via2V5UigyNikgPSB0ciBeIHN1YnIoMjcpOwotCUNhbWVsbGlhU3Via2V5TCgyNykgPSBzdWJsKDI2KSBeIHN1YmwoMjgpOyAvKiByb3VuZCAyMCAqLwotCUNhbWVsbGlhU3Via2V5UigyNykgPSBzdWJyKDI2KSBeIHN1YnIoMjgpOwotCUNhbWVsbGlhU3Via2V5TCgyOCkgPSBzdWJsKDI3KSBeIHN1YmwoMjkpOyAvKiByb3VuZCAyMSAqLwotCUNhbWVsbGlhU3Via2V5UigyOCkgPSBzdWJyKDI3KSBeIHN1YnIoMjkpOwotCUNhbWVsbGlhU3Via2V5TCgyOSkgPSBzdWJsKDI4KSBeIHN1YmwoMzApOyAvKiByb3VuZCAyMiAqLwotCUNhbWVsbGlhU3Via2V5UigyOSkgPSBzdWJyKDI4KSBeIHN1YnIoMzApOwotCUNhbWVsbGlhU3Via2V5TCgzMCkgPSBzdWJsKDI5KSBeIHN1YmwoMzEpOyAvKiByb3VuZCAyMyAqLwotCUNhbWVsbGlhU3Via2V5UigzMCkgPSBzdWJyKDI5KSBeIHN1YnIoMzEpOwotCUNhbWVsbGlhU3Via2V5TCgzMSkgPSBzdWJsKDMwKTsgICAgIC8qIHJvdW5kIDI0ICovCi0JQ2FtZWxsaWFTdWJrZXlSKDMxKSA9IHN1YnIoMzApOwotCUNhbWVsbGlhU3Via2V5TCgzMikgPSBzdWJsKDMyKSBeIHN1YmwoMzEpOyAvKiBrdzMgKi8KLQlDYW1lbGxpYVN1YmtleVIoMzIpID0gc3VicigzMikgXiBzdWJyKDMxKTsKLQotCS8qIGFwcGx5IHRoZSBpbnZlcnNlIG9mIHRoZSBsYXN0IGhhbGYgb2YgUC1mdW5jdGlvbiAqLwotCWR3ID0gQ2FtZWxsaWFTdWJrZXlMKDIpIF4gQ2FtZWxsaWFTdWJrZXlSKDIpLAotCQlkdyA9IENBTUVMTElBX1JMOChkdyk7Lyogcm91bmQgMSAqLwotCUNhbWVsbGlhU3Via2V5UigyKSA9IENhbWVsbGlhU3Via2V5TCgyKSBeIGR3LAotCQlDYW1lbGxpYVN1YmtleUwoMikgPSBkdzsKLQlkdyA9IENhbWVsbGlhU3Via2V5TCgzKSBeIENhbWVsbGlhU3Via2V5UigzKSwKLQkJZHcgPSBDQU1FTExJQV9STDgoZHcpOy8qIHJvdW5kIDIgKi8KLQlDYW1lbGxpYVN1YmtleVIoMykgPSBDYW1lbGxpYVN1YmtleUwoMykgXiBkdywKLQkJQ2FtZWxsaWFTdWJrZXlMKDMpID0gZHc7Ci0JZHcgPSBDYW1lbGxpYVN1YmtleUwoNCkgXiBDYW1lbGxpYVN1YmtleVIoNCksCi0JCWR3ID0gQ0FNRUxMSUFfUkw4KGR3KTsvKiByb3VuZCAzICovCi0JQ2FtZWxsaWFTdWJrZXlSKDQpID0gQ2FtZWxsaWFTdWJrZXlMKDQpIF4gZHcsCi0JCUNhbWVsbGlhU3Via2V5TCg0KSA9IGR3OwotCWR3ID0gQ2FtZWxsaWFTdWJrZXlMKDUpIF4gQ2FtZWxsaWFTdWJrZXlSKDUpLAotCQlkdyA9IENBTUVMTElBX1JMOChkdyk7Lyogcm91bmQgNCAqLwotCUNhbWVsbGlhU3Via2V5Uig1KSA9IENhbWVsbGlhU3Via2V5TCg1KSBeIGR3LAotCQlDYW1lbGxpYVN1YmtleUwoNSkgPSBkdzsKLQlkdyA9IENhbWVsbGlhU3Via2V5TCg2KSBeIENhbWVsbGlhU3Via2V5Uig2KSwKLQkJZHcgPSBDQU1FTExJQV9STDgoZHcpOy8qIHJvdW5kIDUgKi8KLQlDYW1lbGxpYVN1YmtleVIoNikgPSBDYW1lbGxpYVN1YmtleUwoNikgXiBkdywKLQkJQ2FtZWxsaWFTdWJrZXlMKDYpID0gZHc7Ci0JZHcgPSBDYW1lbGxpYVN1YmtleUwoNykgXiBDYW1lbGxpYVN1YmtleVIoNyksCi0JCWR3ID0gQ0FNRUxMSUFfUkw4KGR3KTsvKiByb3VuZCA2ICovCi0JQ2FtZWxsaWFTdWJrZXlSKDcpID0gQ2FtZWxsaWFTdWJrZXlMKDcpIF4gZHcsCi0JCUNhbWVsbGlhU3Via2V5TCg3KSA9IGR3OwotCWR3ID0gQ2FtZWxsaWFTdWJrZXlMKDEwKSBeIENhbWVsbGlhU3Via2V5UigxMCksCi0JCWR3ID0gQ0FNRUxMSUFfUkw4KGR3KTsvKiByb3VuZCA3ICovCi0JQ2FtZWxsaWFTdWJrZXlSKDEwKSA9IENhbWVsbGlhU3Via2V5TCgxMCkgXiBkdywKLQkJQ2FtZWxsaWFTdWJrZXlMKDEwKSA9IGR3OwotCWR3ID0gQ2FtZWxsaWFTdWJrZXlMKDExKSBeIENhbWVsbGlhU3Via2V5UigxMSksCi0JCWR3ID0gQ0FNRUxMSUFfUkw4KGR3KTsvKiByb3VuZCA4ICovCi0JQ2FtZWxsaWFTdWJrZXlSKDExKSA9IENhbWVsbGlhU3Via2V5TCgxMSkgXiBkdywKLQkJQ2FtZWxsaWFTdWJrZXlMKDExKSA9IGR3OwotCWR3ID0gQ2FtZWxsaWFTdWJrZXlMKDEyKSBeIENhbWVsbGlhU3Via2V5UigxMiksCi0JCWR3ID0gQ0FNRUxMSUFfUkw4KGR3KTsvKiByb3VuZCA5ICovCi0JQ2FtZWxsaWFTdWJrZXlSKDEyKSA9IENhbWVsbGlhU3Via2V5TCgxMikgXiBkdywKLQkJQ2FtZWxsaWFTdWJrZXlMKDEyKSA9IGR3OwotCWR3ID0gQ2FtZWxsaWFTdWJrZXlMKDEzKSBeIENhbWVsbGlhU3Via2V5UigxMyksCi0JCWR3ID0gQ0FNRUxMSUFfUkw4KGR3KTsvKiByb3VuZCAxMCAqLwotCUNhbWVsbGlhU3Via2V5UigxMykgPSBDYW1lbGxpYVN1YmtleUwoMTMpIF4gZHcsCi0JCUNhbWVsbGlhU3Via2V5TCgxMykgPSBkdzsKLQlkdyA9IENhbWVsbGlhU3Via2V5TCgxNCkgXiBDYW1lbGxpYVN1YmtleVIoMTQpLAotCQlkdyA9IENBTUVMTElBX1JMOChkdyk7Lyogcm91bmQgMTEgKi8KLQlDYW1lbGxpYVN1YmtleVIoMTQpID0gQ2FtZWxsaWFTdWJrZXlMKDE0KSBeIGR3LAotCQlDYW1lbGxpYVN1YmtleUwoMTQpID0gZHc7Ci0JZHcgPSBDYW1lbGxpYVN1YmtleUwoMTUpIF4gQ2FtZWxsaWFTdWJrZXlSKDE1KSwKLQkJZHcgPSBDQU1FTExJQV9STDgoZHcpOy8qIHJvdW5kIDEyICovCi0JQ2FtZWxsaWFTdWJrZXlSKDE1KSA9IENhbWVsbGlhU3Via2V5TCgxNSkgXiBkdywKLQkJQ2FtZWxsaWFTdWJrZXlMKDE1KSA9IGR3OwotCWR3ID0gQ2FtZWxsaWFTdWJrZXlMKDE4KSBeIENhbWVsbGlhU3Via2V5UigxOCksCi0JCWR3ID0gQ0FNRUxMSUFfUkw4KGR3KTsvKiByb3VuZCAxMyAqLwotCUNhbWVsbGlhU3Via2V5UigxOCkgPSBDYW1lbGxpYVN1YmtleUwoMTgpIF4gZHcsCi0JCUNhbWVsbGlhU3Via2V5TCgxOCkgPSBkdzsKLQlkdyA9IENhbWVsbGlhU3Via2V5TCgxOSkgXiBDYW1lbGxpYVN1YmtleVIoMTkpLAotCQlkdyA9IENBTUVMTElBX1JMOChkdyk7Lyogcm91bmQgMTQgKi8KLQlDYW1lbGxpYVN1YmtleVIoMTkpID0gQ2FtZWxsaWFTdWJrZXlMKDE5KSBeIGR3LAotCQlDYW1lbGxpYVN1YmtleUwoMTkpID0gZHc7Ci0JZHcgPSBDYW1lbGxpYVN1YmtleUwoMjApIF4gQ2FtZWxsaWFTdWJrZXlSKDIwKSwKLQkJZHcgPSBDQU1FTExJQV9STDgoZHcpOy8qIHJvdW5kIDE1ICovCi0JQ2FtZWxsaWFTdWJrZXlSKDIwKSA9IENhbWVsbGlhU3Via2V5TCgyMCkgXiBkdywKLQkJQ2FtZWxsaWFTdWJrZXlMKDIwKSA9IGR3OwotCWR3ID0gQ2FtZWxsaWFTdWJrZXlMKDIxKSBeIENhbWVsbGlhU3Via2V5UigyMSksCi0JCWR3ID0gQ0FNRUxMSUFfUkw4KGR3KTsvKiByb3VuZCAxNiAqLwotCUNhbWVsbGlhU3Via2V5UigyMSkgPSBDYW1lbGxpYVN1YmtleUwoMjEpIF4gZHcsCi0JCUNhbWVsbGlhU3Via2V5TCgyMSkgPSBkdzsKLQlkdyA9IENhbWVsbGlhU3Via2V5TCgyMikgXiBDYW1lbGxpYVN1YmtleVIoMjIpLAotCQlkdyA9IENBTUVMTElBX1JMOChkdyk7Lyogcm91bmQgMTcgKi8KLQlDYW1lbGxpYVN1YmtleVIoMjIpID0gQ2FtZWxsaWFTdWJrZXlMKDIyKSBeIGR3LAotCQlDYW1lbGxpYVN1YmtleUwoMjIpID0gZHc7Ci0JZHcgPSBDYW1lbGxpYVN1YmtleUwoMjMpIF4gQ2FtZWxsaWFTdWJrZXlSKDIzKSwKLQkJZHcgPSBDQU1FTExJQV9STDgoZHcpOy8qIHJvdW5kIDE4ICovCi0JQ2FtZWxsaWFTdWJrZXlSKDIzKSA9IENhbWVsbGlhU3Via2V5TCgyMykgXiBkdywKLQkJQ2FtZWxsaWFTdWJrZXlMKDIzKSA9IGR3OwotCWR3ID0gQ2FtZWxsaWFTdWJrZXlMKDI2KSBeIENhbWVsbGlhU3Via2V5UigyNiksCi0JCWR3ID0gQ0FNRUxMSUFfUkw4KGR3KTsvKiByb3VuZCAxOSAqLwotCUNhbWVsbGlhU3Via2V5UigyNikgPSBDYW1lbGxpYVN1YmtleUwoMjYpIF4gZHcsCi0JCUNhbWVsbGlhU3Via2V5TCgyNikgPSBkdzsKLQlkdyA9IENhbWVsbGlhU3Via2V5TCgyNykgXiBDYW1lbGxpYVN1YmtleVIoMjcpLAotCQlkdyA9IENBTUVMTElBX1JMOChkdyk7Lyogcm91bmQgMjAgKi8KLQlDYW1lbGxpYVN1YmtleVIoMjcpID0gQ2FtZWxsaWFTdWJrZXlMKDI3KSBeIGR3LAotCQlDYW1lbGxpYVN1YmtleUwoMjcpID0gZHc7Ci0JZHcgPSBDYW1lbGxpYVN1YmtleUwoMjgpIF4gQ2FtZWxsaWFTdWJrZXlSKDI4KSwKLQkJZHcgPSBDQU1FTExJQV9STDgoZHcpOy8qIHJvdW5kIDIxICovCi0JQ2FtZWxsaWFTdWJrZXlSKDI4KSA9IENhbWVsbGlhU3Via2V5TCgyOCkgXiBkdywKLQkJQ2FtZWxsaWFTdWJrZXlMKDI4KSA9IGR3OwotCWR3ID0gQ2FtZWxsaWFTdWJrZXlMKDI5KSBeIENhbWVsbGlhU3Via2V5UigyOSksCi0JCWR3ID0gQ0FNRUxMSUFfUkw4KGR3KTsvKiByb3VuZCAyMiAqLwotCUNhbWVsbGlhU3Via2V5UigyOSkgPSBDYW1lbGxpYVN1YmtleUwoMjkpIF4gZHcsCi0JCUNhbWVsbGlhU3Via2V5TCgyOSkgPSBkdzsKLQlkdyA9IENhbWVsbGlhU3Via2V5TCgzMCkgXiBDYW1lbGxpYVN1YmtleVIoMzApLAotCQlkdyA9IENBTUVMTElBX1JMOChkdyk7Lyogcm91bmQgMjMgKi8KLQlDYW1lbGxpYVN1YmtleVIoMzApID0gQ2FtZWxsaWFTdWJrZXlMKDMwKSBeIGR3LAotCQlDYW1lbGxpYVN1YmtleUwoMzApID0gZHc7Ci0JZHcgPSBDYW1lbGxpYVN1YmtleUwoMzEpIF4gQ2FtZWxsaWFTdWJrZXlSKDMxKSwKLQkJZHcgPSBDQU1FTExJQV9STDgoZHcpOy8qIHJvdW5kIDI0ICovCi0JQ2FtZWxsaWFTdWJrZXlSKDMxKSA9IENhbWVsbGlhU3Via2V5TCgzMSkgXiBkdywKLQkJQ2FtZWxsaWFTdWJrZXlMKDMxKSA9IGR3OwotCi0gICAgCi0JcmV0dXJuOwotCX0KLQotdm9pZCBjYW1lbGxpYV9zZXR1cDE5Mihjb25zdCB1OCAqa2V5LCB1MzIgKnN1YmtleSkKLQl7Ci0JdTgga2tbMzJdOwotCXUzMiBrcmxsLCBrcmxyLCBrcnJsLGtycnI7Ci0KLQltZW1jcHkoa2ssIGtleSwgMjQpOwotCW1lbWNweSgodTggKikma3JsbCwga2V5KzE2LDQpOwotCW1lbWNweSgodTggKikma3Jsciwga2V5KzIwLDQpOwotCWtycmwgPSB+a3JsbDsKLQlrcnJyID0gfmtybHI7Ci0JbWVtY3B5KGtrKzI0LCAodTggKikma3JybCwgNCk7Ci0JbWVtY3B5KGtrKzI4LCAodTggKikma3JyciwgNCk7Ci0JY2FtZWxsaWFfc2V0dXAyNTYoa2ssIHN1YmtleSk7Ci0JcmV0dXJuOwotCX0KLQotCi0vKioKLSAqIFN0dWZmIHJlbGF0ZWQgdG8gY2FtZWxsaWEgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCi0gKi8KLXZvaWQgY2FtZWxsaWFfZW5jcnlwdDEyOChjb25zdCB1MzIgKnN1YmtleSwgdTMyICppbykKLQl7Ci0JdTMyIGlsLCBpciwgdDAsIHQxOwotCi0JLyogcHJlIHdoaXRlbmluZyBidXQgYWJzb3JiIGt3MiovCi0JaW9bMF0gXj0gQ2FtZWxsaWFTdWJrZXlMKDApOwotCWlvWzFdIF49IENhbWVsbGlhU3Via2V5UigwKTsKLQkvKiBtYWluIGl0ZXJhdGlvbiAqLwotCi0JQ0FNRUxMSUFfUk9VTkRTTShpb1swXSxpb1sxXSwKLQkJQ2FtZWxsaWFTdWJrZXlMKDIpLENhbWVsbGlhU3Via2V5UigyKSwKLQkJaW9bMl0saW9bM10saWwsaXIsdDAsdDEpOwotCUNBTUVMTElBX1JPVU5EU00oaW9bMl0saW9bM10sCi0JCUNhbWVsbGlhU3Via2V5TCgzKSxDYW1lbGxpYVN1YmtleVIoMyksCi0JCWlvWzBdLGlvWzFdLGlsLGlyLHQwLHQxKTsKLQlDQU1FTExJQV9ST1VORFNNKGlvWzBdLGlvWzFdLAotCQlDYW1lbGxpYVN1YmtleUwoNCksQ2FtZWxsaWFTdWJrZXlSKDQpLAotCQlpb1syXSxpb1szXSxpbCxpcix0MCx0MSk7Ci0JQ0FNRUxMSUFfUk9VTkRTTShpb1syXSxpb1szXSwKLQkJQ2FtZWxsaWFTdWJrZXlMKDUpLENhbWVsbGlhU3Via2V5Uig1KSwKLQkJaW9bMF0saW9bMV0saWwsaXIsdDAsdDEpOwotCUNBTUVMTElBX1JPVU5EU00oaW9bMF0saW9bMV0sCi0JCUNhbWVsbGlhU3Via2V5TCg2KSxDYW1lbGxpYVN1YmtleVIoNiksCi0JCWlvWzJdLGlvWzNdLGlsLGlyLHQwLHQxKTsKLQlDQU1FTExJQV9ST1VORFNNKGlvWzJdLGlvWzNdLAotCQlDYW1lbGxpYVN1YmtleUwoNyksQ2FtZWxsaWFTdWJrZXlSKDcpLAotCQlpb1swXSxpb1sxXSxpbCxpcix0MCx0MSk7Ci0KLQlDQU1FTExJQV9GTFMoaW9bMF0saW9bMV0saW9bMl0saW9bM10sCi0JCUNhbWVsbGlhU3Via2V5TCg4KSxDYW1lbGxpYVN1YmtleVIoOCksCi0JCUNhbWVsbGlhU3Via2V5TCg5KSxDYW1lbGxpYVN1YmtleVIoOSksCi0JCXQwLHQxLGlsLGlyKTsKLQotCUNBTUVMTElBX1JPVU5EU00oaW9bMF0saW9bMV0sCi0JCUNhbWVsbGlhU3Via2V5TCgxMCksQ2FtZWxsaWFTdWJrZXlSKDEwKSwKLQkJaW9bMl0saW9bM10saWwsaXIsdDAsdDEpOwotCUNBTUVMTElBX1JPVU5EU00oaW9bMl0saW9bM10sCi0JCUNhbWVsbGlhU3Via2V5TCgxMSksQ2FtZWxsaWFTdWJrZXlSKDExKSwKLQkJaW9bMF0saW9bMV0saWwsaXIsdDAsdDEpOwotCUNBTUVMTElBX1JPVU5EU00oaW9bMF0saW9bMV0sCi0JCUNhbWVsbGlhU3Via2V5TCgxMiksQ2FtZWxsaWFTdWJrZXlSKDEyKSwKLQkJaW9bMl0saW9bM10saWwsaXIsdDAsdDEpOwotCUNBTUVMTElBX1JPVU5EU00oaW9bMl0saW9bM10sCi0JCUNhbWVsbGlhU3Via2V5TCgxMyksQ2FtZWxsaWFTdWJrZXlSKDEzKSwKLQkJaW9bMF0saW9bMV0saWwsaXIsdDAsdDEpOwotCUNBTUVMTElBX1JPVU5EU00oaW9bMF0saW9bMV0sCi0JCUNhbWVsbGlhU3Via2V5TCgxNCksQ2FtZWxsaWFTdWJrZXlSKDE0KSwKLQkJaW9bMl0saW9bM10saWwsaXIsdDAsdDEpOwotCUNBTUVMTElBX1JPVU5EU00oaW9bMl0saW9bM10sCi0JCUNhbWVsbGlhU3Via2V5TCgxNSksQ2FtZWxsaWFTdWJrZXlSKDE1KSwKLQkJaW9bMF0saW9bMV0saWwsaXIsdDAsdDEpOwotCi0JQ0FNRUxMSUFfRkxTKGlvWzBdLGlvWzFdLGlvWzJdLGlvWzNdLAotCQlDYW1lbGxpYVN1YmtleUwoMTYpLENhbWVsbGlhU3Via2V5UigxNiksCi0JCUNhbWVsbGlhU3Via2V5TCgxNyksQ2FtZWxsaWFTdWJrZXlSKDE3KSwKLQkJdDAsdDEsaWwsaXIpOwotCi0JQ0FNRUxMSUFfUk9VTkRTTShpb1swXSxpb1sxXSwKLQkJQ2FtZWxsaWFTdWJrZXlMKDE4KSxDYW1lbGxpYVN1YmtleVIoMTgpLAotCQlpb1syXSxpb1szXSxpbCxpcix0MCx0MSk7Ci0JQ0FNRUxMSUFfUk9VTkRTTShpb1syXSxpb1szXSwKLQkJQ2FtZWxsaWFTdWJrZXlMKDE5KSxDYW1lbGxpYVN1YmtleVIoMTkpLAotCQlpb1swXSxpb1sxXSxpbCxpcix0MCx0MSk7Ci0JQ0FNRUxMSUFfUk9VTkRTTShpb1swXSxpb1sxXSwKLQkJQ2FtZWxsaWFTdWJrZXlMKDIwKSxDYW1lbGxpYVN1YmtleVIoMjApLAotCQlpb1syXSxpb1szXSxpbCxpcix0MCx0MSk7Ci0JQ0FNRUxMSUFfUk9VTkRTTShpb1syXSxpb1szXSwKLQkJQ2FtZWxsaWFTdWJrZXlMKDIxKSxDYW1lbGxpYVN1YmtleVIoMjEpLAotCQlpb1swXSxpb1sxXSxpbCxpcix0MCx0MSk7Ci0JQ0FNRUxMSUFfUk9VTkRTTShpb1swXSxpb1sxXSwKLQkJQ2FtZWxsaWFTdWJrZXlMKDIyKSxDYW1lbGxpYVN1YmtleVIoMjIpLAotCQlpb1syXSxpb1szXSxpbCxpcix0MCx0MSk7Ci0JQ0FNRUxMSUFfUk9VTkRTTShpb1syXSxpb1szXSwKLQkJQ2FtZWxsaWFTdWJrZXlMKDIzKSxDYW1lbGxpYVN1YmtleVIoMjMpLAotCQlpb1swXSxpb1sxXSxpbCxpcix0MCx0MSk7Ci0KLQkvKiBwb3N0IHdoaXRlbmluZyBidXQga3c0ICovCi0JaW9bMl0gXj0gQ2FtZWxsaWFTdWJrZXlMKDI0KTsKLQlpb1szXSBePSBDYW1lbGxpYVN1YmtleVIoMjQpOwotCi0JdDAgPSBpb1swXTsKLQl0MSA9IGlvWzFdOwotCWlvWzBdID0gaW9bMl07Ci0JaW9bMV0gPSBpb1szXTsKLQlpb1syXSA9IHQwOwotCWlvWzNdID0gdDE7Ci0KLQlyZXR1cm47Ci0JfQotCi12b2lkIGNhbWVsbGlhX2RlY3J5cHQxMjgoY29uc3QgdTMyICpzdWJrZXksIHUzMiAqaW8pCi0JewotCXUzMiBpbCxpcix0MCx0MTsgICAgICAgICAgICAgICAvKiB0ZW1wb3JhcnkgdmFsaWFibGVzICovCi0KLQkvKiBwcmUgd2hpdGVuaW5nIGJ1dCBhYnNvcmIga3cyKi8KLQlpb1swXSBePSBDYW1lbGxpYVN1YmtleUwoMjQpOwotCWlvWzFdIF49IENhbWVsbGlhU3Via2V5UigyNCk7Ci0KLQkvKiBtYWluIGl0ZXJhdGlvbiAqLwotCUNBTUVMTElBX1JPVU5EU00oaW9bMF0saW9bMV0sCi0JCUNhbWVsbGlhU3Via2V5TCgyMyksQ2FtZWxsaWFTdWJrZXlSKDIzKSwKLQkJaW9bMl0saW9bM10saWwsaXIsdDAsdDEpOwotCUNBTUVMTElBX1JPVU5EU00oaW9bMl0saW9bM10sCi0JCUNhbWVsbGlhU3Via2V5TCgyMiksQ2FtZWxsaWFTdWJrZXlSKDIyKSwKLQkJaW9bMF0saW9bMV0saWwsaXIsdDAsdDEpOwotCUNBTUVMTElBX1JPVU5EU00oaW9bMF0saW9bMV0sCi0JCUNhbWVsbGlhU3Via2V5TCgyMSksQ2FtZWxsaWFTdWJrZXlSKDIxKSwKLQkJaW9bMl0saW9bM10saWwsaXIsdDAsdDEpOwotCUNBTUVMTElBX1JPVU5EU00oaW9bMl0saW9bM10sCi0JCUNhbWVsbGlhU3Via2V5TCgyMCksQ2FtZWxsaWFTdWJrZXlSKDIwKSwKLQkJaW9bMF0saW9bMV0saWwsaXIsdDAsdDEpOwotCUNBTUVMTElBX1JPVU5EU00oaW9bMF0saW9bMV0sCi0JCUNhbWVsbGlhU3Via2V5TCgxOSksQ2FtZWxsaWFTdWJrZXlSKDE5KSwKLQkJaW9bMl0saW9bM10saWwsaXIsdDAsdDEpOwotCUNBTUVMTElBX1JPVU5EU00oaW9bMl0saW9bM10sCi0JCUNhbWVsbGlhU3Via2V5TCgxOCksQ2FtZWxsaWFTdWJrZXlSKDE4KSwKLQkJaW9bMF0saW9bMV0saWwsaXIsdDAsdDEpOwotCi0JQ0FNRUxMSUFfRkxTKGlvWzBdLGlvWzFdLGlvWzJdLGlvWzNdLAotCQlDYW1lbGxpYVN1YmtleUwoMTcpLENhbWVsbGlhU3Via2V5UigxNyksCi0JCUNhbWVsbGlhU3Via2V5TCgxNiksQ2FtZWxsaWFTdWJrZXlSKDE2KSwKLQkJdDAsdDEsaWwsaXIpOwotCi0JQ0FNRUxMSUFfUk9VTkRTTShpb1swXSxpb1sxXSwKLQkJQ2FtZWxsaWFTdWJrZXlMKDE1KSxDYW1lbGxpYVN1YmtleVIoMTUpLAotCQlpb1syXSxpb1szXSxpbCxpcix0MCx0MSk7Ci0JQ0FNRUxMSUFfUk9VTkRTTShpb1syXSxpb1szXSwKLQkJQ2FtZWxsaWFTdWJrZXlMKDE0KSxDYW1lbGxpYVN1YmtleVIoMTQpLAotCQlpb1swXSxpb1sxXSxpbCxpcix0MCx0MSk7Ci0JQ0FNRUxMSUFfUk9VTkRTTShpb1swXSxpb1sxXSwKLQkJQ2FtZWxsaWFTdWJrZXlMKDEzKSxDYW1lbGxpYVN1YmtleVIoMTMpLAotCQlpb1syXSxpb1szXSxpbCxpcix0MCx0MSk7Ci0JQ0FNRUxMSUFfUk9VTkRTTShpb1syXSxpb1szXSwKLQkJQ2FtZWxsaWFTdWJrZXlMKDEyKSxDYW1lbGxpYVN1YmtleVIoMTIpLAotCQlpb1swXSxpb1sxXSxpbCxpcix0MCx0MSk7Ci0JQ0FNRUxMSUFfUk9VTkRTTShpb1swXSxpb1sxXSwKLQkJQ2FtZWxsaWFTdWJrZXlMKDExKSxDYW1lbGxpYVN1YmtleVIoMTEpLAotCQlpb1syXSxpb1szXSxpbCxpcix0MCx0MSk7Ci0JQ0FNRUxMSUFfUk9VTkRTTShpb1syXSxpb1szXSwKLQkJQ2FtZWxsaWFTdWJrZXlMKDEwKSxDYW1lbGxpYVN1YmtleVIoMTApLAotCQlpb1swXSxpb1sxXSxpbCxpcix0MCx0MSk7Ci0KLQlDQU1FTExJQV9GTFMoaW9bMF0saW9bMV0saW9bMl0saW9bM10sCi0JCUNhbWVsbGlhU3Via2V5TCg5KSxDYW1lbGxpYVN1YmtleVIoOSksCi0JCUNhbWVsbGlhU3Via2V5TCg4KSxDYW1lbGxpYVN1YmtleVIoOCksCi0JCXQwLHQxLGlsLGlyKTsKLQotCUNBTUVMTElBX1JPVU5EU00oaW9bMF0saW9bMV0sCi0JCUNhbWVsbGlhU3Via2V5TCg3KSxDYW1lbGxpYVN1YmtleVIoNyksCi0JCWlvWzJdLGlvWzNdLGlsLGlyLHQwLHQxKTsKLQlDQU1FTExJQV9ST1VORFNNKGlvWzJdLGlvWzNdLAotCQlDYW1lbGxpYVN1YmtleUwoNiksQ2FtZWxsaWFTdWJrZXlSKDYpLAotCQlpb1swXSxpb1sxXSxpbCxpcix0MCx0MSk7Ci0JQ0FNRUxMSUFfUk9VTkRTTShpb1swXSxpb1sxXSwKLQkJQ2FtZWxsaWFTdWJrZXlMKDUpLENhbWVsbGlhU3Via2V5Uig1KSwKLQkJaW9bMl0saW9bM10saWwsaXIsdDAsdDEpOwotCUNBTUVMTElBX1JPVU5EU00oaW9bMl0saW9bM10sCi0JCUNhbWVsbGlhU3Via2V5TCg0KSxDYW1lbGxpYVN1YmtleVIoNCksCi0JCWlvWzBdLGlvWzFdLGlsLGlyLHQwLHQxKTsKLQlDQU1FTExJQV9ST1VORFNNKGlvWzBdLGlvWzFdLAotCQlDYW1lbGxpYVN1YmtleUwoMyksQ2FtZWxsaWFTdWJrZXlSKDMpLAotCQlpb1syXSxpb1szXSxpbCxpcix0MCx0MSk7Ci0JQ0FNRUxMSUFfUk9VTkRTTShpb1syXSxpb1szXSwKLQkJQ2FtZWxsaWFTdWJrZXlMKDIpLENhbWVsbGlhU3Via2V5UigyKSwKLQkJaW9bMF0saW9bMV0saWwsaXIsdDAsdDEpOwotCi0JLyogcG9zdCB3aGl0ZW5pbmcgYnV0IGt3NCAqLwotCWlvWzJdIF49IENhbWVsbGlhU3Via2V5TCgwKTsKLQlpb1szXSBePSBDYW1lbGxpYVN1YmtleVIoMCk7Ci0KLQl0MCA9IGlvWzBdOwotCXQxID0gaW9bMV07Ci0JaW9bMF0gPSBpb1syXTsKLQlpb1sxXSA9IGlvWzNdOwotCWlvWzJdID0gdDA7Ci0JaW9bM10gPSB0MTsKLQotCXJldHVybjsKLQl9Ci0KLS8qKgotICogc3R1ZmYgZm9yIDE5MiBhbmQgMjU2Yml0IGVuY3J5cHRpb24vZGVjcnlwdGlvbgotICovCi12b2lkIGNhbWVsbGlhX2VuY3J5cHQyNTYoY29uc3QgdTMyICpzdWJrZXksIHUzMiAqaW8pCi0JewotCXUzMiBpbCxpcix0MCx0MTsgICAgICAgICAgIC8qIHRlbXBvcmFyeSB2YWxpYWJsZXMgKi8KLQotCS8qIHByZSB3aGl0ZW5pbmcgYnV0IGFic29yYiBrdzIqLwotCWlvWzBdIF49IENhbWVsbGlhU3Via2V5TCgwKTsKLQlpb1sxXSBePSBDYW1lbGxpYVN1YmtleVIoMCk7Ci0KLQkvKiBtYWluIGl0ZXJhdGlvbiAqLwotCUNBTUVMTElBX1JPVU5EU00oaW9bMF0saW9bMV0sCi0JCUNhbWVsbGlhU3Via2V5TCgyKSxDYW1lbGxpYVN1YmtleVIoMiksCi0JCWlvWzJdLGlvWzNdLGlsLGlyLHQwLHQxKTsKLQlDQU1FTExJQV9ST1VORFNNKGlvWzJdLGlvWzNdLAotCQlDYW1lbGxpYVN1YmtleUwoMyksQ2FtZWxsaWFTdWJrZXlSKDMpLAotCQlpb1swXSxpb1sxXSxpbCxpcix0MCx0MSk7Ci0JQ0FNRUxMSUFfUk9VTkRTTShpb1swXSxpb1sxXSwKLQkJQ2FtZWxsaWFTdWJrZXlMKDQpLENhbWVsbGlhU3Via2V5Uig0KSwKLQkJaW9bMl0saW9bM10saWwsaXIsdDAsdDEpOwotCUNBTUVMTElBX1JPVU5EU00oaW9bMl0saW9bM10sCi0JCUNhbWVsbGlhU3Via2V5TCg1KSxDYW1lbGxpYVN1YmtleVIoNSksCi0JCWlvWzBdLGlvWzFdLGlsLGlyLHQwLHQxKTsKLQlDQU1FTExJQV9ST1VORFNNKGlvWzBdLGlvWzFdLAotCQlDYW1lbGxpYVN1YmtleUwoNiksQ2FtZWxsaWFTdWJrZXlSKDYpLAotCQlpb1syXSxpb1szXSxpbCxpcix0MCx0MSk7Ci0JQ0FNRUxMSUFfUk9VTkRTTShpb1syXSxpb1szXSwKLQkJQ2FtZWxsaWFTdWJrZXlMKDcpLENhbWVsbGlhU3Via2V5Uig3KSwKLQkJaW9bMF0saW9bMV0saWwsaXIsdDAsdDEpOwotCi0JQ0FNRUxMSUFfRkxTKGlvWzBdLGlvWzFdLGlvWzJdLGlvWzNdLAotCQlDYW1lbGxpYVN1YmtleUwoOCksQ2FtZWxsaWFTdWJrZXlSKDgpLAotCQlDYW1lbGxpYVN1YmtleUwoOSksQ2FtZWxsaWFTdWJrZXlSKDkpLAotCQl0MCx0MSxpbCxpcik7Ci0KLQlDQU1FTExJQV9ST1VORFNNKGlvWzBdLGlvWzFdLAotCQlDYW1lbGxpYVN1YmtleUwoMTApLENhbWVsbGlhU3Via2V5UigxMCksCi0JCWlvWzJdLGlvWzNdLGlsLGlyLHQwLHQxKTsKLQlDQU1FTExJQV9ST1VORFNNKGlvWzJdLGlvWzNdLAotCQlDYW1lbGxpYVN1YmtleUwoMTEpLENhbWVsbGlhU3Via2V5UigxMSksCi0JCWlvWzBdLGlvWzFdLGlsLGlyLHQwLHQxKTsKLQlDQU1FTExJQV9ST1VORFNNKGlvWzBdLGlvWzFdLAotCQlDYW1lbGxpYVN1YmtleUwoMTIpLENhbWVsbGlhU3Via2V5UigxMiksCi0JCWlvWzJdLGlvWzNdLGlsLGlyLHQwLHQxKTsKLQlDQU1FTExJQV9ST1VORFNNKGlvWzJdLGlvWzNdLAotCQlDYW1lbGxpYVN1YmtleUwoMTMpLENhbWVsbGlhU3Via2V5UigxMyksCi0JCWlvWzBdLGlvWzFdLGlsLGlyLHQwLHQxKTsKLQlDQU1FTExJQV9ST1VORFNNKGlvWzBdLGlvWzFdLAotCQlDYW1lbGxpYVN1YmtleUwoMTQpLENhbWVsbGlhU3Via2V5UigxNCksCi0JCWlvWzJdLGlvWzNdLGlsLGlyLHQwLHQxKTsKLQlDQU1FTExJQV9ST1VORFNNKGlvWzJdLGlvWzNdLAotCQlDYW1lbGxpYVN1YmtleUwoMTUpLENhbWVsbGlhU3Via2V5UigxNSksCi0JCWlvWzBdLGlvWzFdLGlsLGlyLHQwLHQxKTsKLQotCUNBTUVMTElBX0ZMUyhpb1swXSxpb1sxXSxpb1syXSxpb1szXSwKLQkJQ2FtZWxsaWFTdWJrZXlMKDE2KSxDYW1lbGxpYVN1YmtleVIoMTYpLAotCQlDYW1lbGxpYVN1YmtleUwoMTcpLENhbWVsbGlhU3Via2V5UigxNyksCi0JCXQwLHQxLGlsLGlyKTsKLQotCUNBTUVMTElBX1JPVU5EU00oaW9bMF0saW9bMV0sCi0JCUNhbWVsbGlhU3Via2V5TCgxOCksQ2FtZWxsaWFTdWJrZXlSKDE4KSwKLQkJaW9bMl0saW9bM10saWwsaXIsdDAsdDEpOwotCUNBTUVMTElBX1JPVU5EU00oaW9bMl0saW9bM10sCi0JCUNhbWVsbGlhU3Via2V5TCgxOSksQ2FtZWxsaWFTdWJrZXlSKDE5KSwKLQkJaW9bMF0saW9bMV0saWwsaXIsdDAsdDEpOwotCUNBTUVMTElBX1JPVU5EU00oaW9bMF0saW9bMV0sCi0JCUNhbWVsbGlhU3Via2V5TCgyMCksQ2FtZWxsaWFTdWJrZXlSKDIwKSwKLQkJaW9bMl0saW9bM10saWwsaXIsdDAsdDEpOwotCUNBTUVMTElBX1JPVU5EU00oaW9bMl0saW9bM10sCi0JCUNhbWVsbGlhU3Via2V5TCgyMSksQ2FtZWxsaWFTdWJrZXlSKDIxKSwKLQkJaW9bMF0saW9bMV0saWwsaXIsdDAsdDEpOwotCUNBTUVMTElBX1JPVU5EU00oaW9bMF0saW9bMV0sCi0JCUNhbWVsbGlhU3Via2V5TCgyMiksQ2FtZWxsaWFTdWJrZXlSKDIyKSwKLQkJaW9bMl0saW9bM10saWwsaXIsdDAsdDEpOwotCUNBTUVMTElBX1JPVU5EU00oaW9bMl0saW9bM10sCi0JCUNhbWVsbGlhU3Via2V5TCgyMyksQ2FtZWxsaWFTdWJrZXlSKDIzKSwKLQkJaW9bMF0saW9bMV0saWwsaXIsdDAsdDEpOwotCi0JQ0FNRUxMSUFfRkxTKGlvWzBdLGlvWzFdLGlvWzJdLGlvWzNdLAotCQlDYW1lbGxpYVN1YmtleUwoMjQpLENhbWVsbGlhU3Via2V5UigyNCksCi0JCUNhbWVsbGlhU3Via2V5TCgyNSksQ2FtZWxsaWFTdWJrZXlSKDI1KSwKLQkJdDAsdDEsaWwsaXIpOwotCi0JQ0FNRUxMSUFfUk9VTkRTTShpb1swXSxpb1sxXSwKLQkJQ2FtZWxsaWFTdWJrZXlMKDI2KSxDYW1lbGxpYVN1YmtleVIoMjYpLAotCQlpb1syXSxpb1szXSxpbCxpcix0MCx0MSk7Ci0JQ0FNRUxMSUFfUk9VTkRTTShpb1syXSxpb1szXSwKLQkJQ2FtZWxsaWFTdWJrZXlMKDI3KSxDYW1lbGxpYVN1YmtleVIoMjcpLAotCQlpb1swXSxpb1sxXSxpbCxpcix0MCx0MSk7Ci0JQ0FNRUxMSUFfUk9VTkRTTShpb1swXSxpb1sxXSwKLQkJQ2FtZWxsaWFTdWJrZXlMKDI4KSxDYW1lbGxpYVN1YmtleVIoMjgpLAotCQlpb1syXSxpb1szXSxpbCxpcix0MCx0MSk7Ci0JQ0FNRUxMSUFfUk9VTkRTTShpb1syXSxpb1szXSwKLQkJQ2FtZWxsaWFTdWJrZXlMKDI5KSxDYW1lbGxpYVN1YmtleVIoMjkpLAotCQlpb1swXSxpb1sxXSxpbCxpcix0MCx0MSk7Ci0JQ0FNRUxMSUFfUk9VTkRTTShpb1swXSxpb1sxXSwKLQkJQ2FtZWxsaWFTdWJrZXlMKDMwKSxDYW1lbGxpYVN1YmtleVIoMzApLAotCQlpb1syXSxpb1szXSxpbCxpcix0MCx0MSk7Ci0JQ0FNRUxMSUFfUk9VTkRTTShpb1syXSxpb1szXSwKLQkJQ2FtZWxsaWFTdWJrZXlMKDMxKSxDYW1lbGxpYVN1YmtleVIoMzEpLAotCQlpb1swXSxpb1sxXSxpbCxpcix0MCx0MSk7Ci0KLQkvKiBwb3N0IHdoaXRlbmluZyBidXQga3c0ICovCi0JaW9bMl0gXj0gQ2FtZWxsaWFTdWJrZXlMKDMyKTsKLQlpb1szXSBePSBDYW1lbGxpYVN1YmtleVIoMzIpOwotCi0JdDAgPSBpb1swXTsKLQl0MSA9IGlvWzFdOwotCWlvWzBdID0gaW9bMl07Ci0JaW9bMV0gPSBpb1szXTsKLQlpb1syXSA9IHQwOwotCWlvWzNdID0gdDE7Ci0KLQlyZXR1cm47Ci0JfQotCi12b2lkIGNhbWVsbGlhX2RlY3J5cHQyNTYoY29uc3QgdTMyICpzdWJrZXksIHUzMiAqaW8pCi0JewotCXUzMiBpbCxpcix0MCx0MTsgICAgICAgICAgIC8qIHRlbXBvcmFyeSB2YWxpYWJsZXMgKi8KLQotCS8qIHByZSB3aGl0ZW5pbmcgYnV0IGFic29yYiBrdzIqLwotCWlvWzBdIF49IENhbWVsbGlhU3Via2V5TCgzMik7Ci0JaW9bMV0gXj0gQ2FtZWxsaWFTdWJrZXlSKDMyKTsKLQkKLQkvKiBtYWluIGl0ZXJhdGlvbiAqLwotCUNBTUVMTElBX1JPVU5EU00oaW9bMF0saW9bMV0sCi0JCUNhbWVsbGlhU3Via2V5TCgzMSksQ2FtZWxsaWFTdWJrZXlSKDMxKSwKLQkJaW9bMl0saW9bM10saWwsaXIsdDAsdDEpOwotCUNBTUVMTElBX1JPVU5EU00oaW9bMl0saW9bM10sCi0JCUNhbWVsbGlhU3Via2V5TCgzMCksQ2FtZWxsaWFTdWJrZXlSKDMwKSwKLQkJaW9bMF0saW9bMV0saWwsaXIsdDAsdDEpOwotCUNBTUVMTElBX1JPVU5EU00oaW9bMF0saW9bMV0sCi0JCUNhbWVsbGlhU3Via2V5TCgyOSksQ2FtZWxsaWFTdWJrZXlSKDI5KSwKLQkJaW9bMl0saW9bM10saWwsaXIsdDAsdDEpOwotCUNBTUVMTElBX1JPVU5EU00oaW9bMl0saW9bM10sCi0JCUNhbWVsbGlhU3Via2V5TCgyOCksQ2FtZWxsaWFTdWJrZXlSKDI4KSwKLQkJaW9bMF0saW9bMV0saWwsaXIsdDAsdDEpOwotCUNBTUVMTElBX1JPVU5EU00oaW9bMF0saW9bMV0sCi0JCUNhbWVsbGlhU3Via2V5TCgyNyksQ2FtZWxsaWFTdWJrZXlSKDI3KSwKLQkJaW9bMl0saW9bM10saWwsaXIsdDAsdDEpOwotCUNBTUVMTElBX1JPVU5EU00oaW9bMl0saW9bM10sCi0JCUNhbWVsbGlhU3Via2V5TCgyNiksQ2FtZWxsaWFTdWJrZXlSKDI2KSwKLQkJaW9bMF0saW9bMV0saWwsaXIsdDAsdDEpOwotCi0JQ0FNRUxMSUFfRkxTKGlvWzBdLGlvWzFdLGlvWzJdLGlvWzNdLAotCQlDYW1lbGxpYVN1YmtleUwoMjUpLENhbWVsbGlhU3Via2V5UigyNSksCi0JCUNhbWVsbGlhU3Via2V5TCgyNCksQ2FtZWxsaWFTdWJrZXlSKDI0KSwKLQkJdDAsdDEsaWwsaXIpOwotCi0JQ0FNRUxMSUFfUk9VTkRTTShpb1swXSxpb1sxXSwKLQkJQ2FtZWxsaWFTdWJrZXlMKDIzKSxDYW1lbGxpYVN1YmtleVIoMjMpLAotCQlpb1syXSxpb1szXSxpbCxpcix0MCx0MSk7Ci0JQ0FNRUxMSUFfUk9VTkRTTShpb1syXSxpb1szXSwKLQkJQ2FtZWxsaWFTdWJrZXlMKDIyKSxDYW1lbGxpYVN1YmtleVIoMjIpLAotCQlpb1swXSxpb1sxXSxpbCxpcix0MCx0MSk7Ci0JQ0FNRUxMSUFfUk9VTkRTTShpb1swXSxpb1sxXSwKLQkJQ2FtZWxsaWFTdWJrZXlMKDIxKSxDYW1lbGxpYVN1YmtleVIoMjEpLAotCQlpb1syXSxpb1szXSxpbCxpcix0MCx0MSk7Ci0JQ0FNRUxMSUFfUk9VTkRTTShpb1syXSxpb1szXSwKLQkJQ2FtZWxsaWFTdWJrZXlMKDIwKSxDYW1lbGxpYVN1YmtleVIoMjApLAotCQlpb1swXSxpb1sxXSxpbCxpcix0MCx0MSk7Ci0JQ0FNRUxMSUFfUk9VTkRTTShpb1swXSxpb1sxXSwKLQkJQ2FtZWxsaWFTdWJrZXlMKDE5KSxDYW1lbGxpYVN1YmtleVIoMTkpLAotCQlpb1syXSxpb1szXSxpbCxpcix0MCx0MSk7Ci0JQ0FNRUxMSUFfUk9VTkRTTShpb1syXSxpb1szXSwKLQkJQ2FtZWxsaWFTdWJrZXlMKDE4KSxDYW1lbGxpYVN1YmtleVIoMTgpLAotCQlpb1swXSxpb1sxXSxpbCxpcix0MCx0MSk7Ci0KLQlDQU1FTExJQV9GTFMoaW9bMF0saW9bMV0saW9bMl0saW9bM10sCi0JCUNhbWVsbGlhU3Via2V5TCgxNyksQ2FtZWxsaWFTdWJrZXlSKDE3KSwKLQkJQ2FtZWxsaWFTdWJrZXlMKDE2KSxDYW1lbGxpYVN1YmtleVIoMTYpLAotCQl0MCx0MSxpbCxpcik7Ci0KLQlDQU1FTExJQV9ST1VORFNNKGlvWzBdLGlvWzFdLAotCQlDYW1lbGxpYVN1YmtleUwoMTUpLENhbWVsbGlhU3Via2V5UigxNSksCi0JCWlvWzJdLGlvWzNdLGlsLGlyLHQwLHQxKTsKLQlDQU1FTExJQV9ST1VORFNNKGlvWzJdLGlvWzNdLAotCQlDYW1lbGxpYVN1YmtleUwoMTQpLENhbWVsbGlhU3Via2V5UigxNCksCi0JCWlvWzBdLGlvWzFdLGlsLGlyLHQwLHQxKTsKLQlDQU1FTExJQV9ST1VORFNNKGlvWzBdLGlvWzFdLAotCQlDYW1lbGxpYVN1YmtleUwoMTMpLENhbWVsbGlhU3Via2V5UigxMyksCi0JCWlvWzJdLGlvWzNdLGlsLGlyLHQwLHQxKTsKLQlDQU1FTExJQV9ST1VORFNNKGlvWzJdLGlvWzNdLAotCQlDYW1lbGxpYVN1YmtleUwoMTIpLENhbWVsbGlhU3Via2V5UigxMiksCi0JCWlvWzBdLGlvWzFdLGlsLGlyLHQwLHQxKTsKLQlDQU1FTExJQV9ST1VORFNNKGlvWzBdLGlvWzFdLAotCQlDYW1lbGxpYVN1YmtleUwoMTEpLENhbWVsbGlhU3Via2V5UigxMSksCi0JCWlvWzJdLGlvWzNdLGlsLGlyLHQwLHQxKTsKLQlDQU1FTExJQV9ST1VORFNNKGlvWzJdLGlvWzNdLAotCQlDYW1lbGxpYVN1YmtleUwoMTApLENhbWVsbGlhU3Via2V5UigxMCksCi0JCWlvWzBdLGlvWzFdLGlsLGlyLHQwLHQxKTsKLQotCUNBTUVMTElBX0ZMUyhpb1swXSxpb1sxXSxpb1syXSxpb1szXSwKLQkJQ2FtZWxsaWFTdWJrZXlMKDkpLENhbWVsbGlhU3Via2V5Uig5KSwKLQkJQ2FtZWxsaWFTdWJrZXlMKDgpLENhbWVsbGlhU3Via2V5Uig4KSwKLQkJdDAsdDEsaWwsaXIpOwotCi0JQ0FNRUxMSUFfUk9VTkRTTShpb1swXSxpb1sxXSwKLQkJQ2FtZWxsaWFTdWJrZXlMKDcpLENhbWVsbGlhU3Via2V5Uig3KSwKLQkJaW9bMl0saW9bM10saWwsaXIsdDAsdDEpOwotCUNBTUVMTElBX1JPVU5EU00oaW9bMl0saW9bM10sCi0JCUNhbWVsbGlhU3Via2V5TCg2KSxDYW1lbGxpYVN1YmtleVIoNiksCi0JCWlvWzBdLGlvWzFdLGlsLGlyLHQwLHQxKTsKLQlDQU1FTExJQV9ST1VORFNNKGlvWzBdLGlvWzFdLAotCQlDYW1lbGxpYVN1YmtleUwoNSksQ2FtZWxsaWFTdWJrZXlSKDUpLAotCQlpb1syXSxpb1szXSxpbCxpcix0MCx0MSk7Ci0JQ0FNRUxMSUFfUk9VTkRTTShpb1syXSxpb1szXSwKLQkJQ2FtZWxsaWFTdWJrZXlMKDQpLENhbWVsbGlhU3Via2V5Uig0KSwKLQkJaW9bMF0saW9bMV0saWwsaXIsdDAsdDEpOwotCUNBTUVMTElBX1JPVU5EU00oaW9bMF0saW9bMV0sCi0JCUNhbWVsbGlhU3Via2V5TCgzKSxDYW1lbGxpYVN1YmtleVIoMyksCi0JCWlvWzJdLGlvWzNdLGlsLGlyLHQwLHQxKTsKLQlDQU1FTExJQV9ST1VORFNNKGlvWzJdLGlvWzNdLAotCQlDYW1lbGxpYVN1YmtleUwoMiksQ2FtZWxsaWFTdWJrZXlSKDIpLAotCQlpb1swXSxpb1sxXSxpbCxpcix0MCx0MSk7Ci0KLQkvKiBwb3N0IHdoaXRlbmluZyBidXQga3c0ICovCi0JaW9bMl0gXj0gQ2FtZWxsaWFTdWJrZXlMKDApOwotCWlvWzNdIF49IENhbWVsbGlhU3Via2V5UigwKTsKLQotCXQwID0gaW9bMF07Ci0JdDEgPSBpb1sxXTsKLQlpb1swXSA9IGlvWzJdOwotCWlvWzFdID0gaW9bM107Ci0JaW9bMl0gPSB0MDsKLQlpb1szXSA9IHQxOwotCi0JcmV0dXJuOwotCX0KLQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2NhbWVsbGlhL2NhbWVsbGlhLmggYi9jcnlwdG8vY2FtZWxsaWEvY2FtZWxsaWEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjhhOGI2ZS4uMDAwMDAwMAotLS0gYS9jcnlwdG8vY2FtZWxsaWEvY2FtZWxsaWEuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzNCArMCwwIEBACi0vKiBjcnlwdG8vY2FtZWxsaWEvY2FtZWxsaWEuaCAtKi0gbW9kZTpDOyBjLWZpbGUtc3R5bGU6ICJlYXkiIC0qLSAqLwotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoYykgMjAwNiBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0gKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSAqCi0gKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0gKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0gKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0gKgotICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0gKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0gKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0gKgotICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotICogICAgYWNrbm93bGVkZ21lbnQ6Ci0gKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0gKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqCi0gKi8KLQotI2lmbmRlZiBIRUFERVJfQ0FNRUxMSUFfSAotI2RlZmluZSBIRUFERVJfQ0FNRUxMSUFfSAotCi0jaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgotCi0jaWZkZWYgT1BFTlNTTF9OT19DQU1FTExJQQotI2Vycm9yIENBTUVMTElBIGlzIGRpc2FibGVkLgotI2VuZGlmCi0KLSNkZWZpbmUgQ0FNRUxMSUFfRU5DUllQVAkxCi0jZGVmaW5lIENBTUVMTElBX0RFQ1JZUFQJMAotCi0vKiBCZWNhdXNlIGFycmF5IHNpemUgY2FuJ3QgYmUgYSBjb25zdCBpbiBDLCB0aGUgZm9sbG93aW5nIHR3byBhcmUgbWFjcm9zLgotICAgQm90aCBzaXplcyBhcmUgaW4gYnl0ZXMuICovCi0KLSNpZmRlZiAgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi0KLS8qIFRoaXMgc2hvdWxkIGJlIGEgaGlkZGVuIHR5cGUsIGJ1dCBFVlAgcmVxdWlyZXMgdGhhdCB0aGUgc2l6ZSBiZSBrbm93biAqLwotCi0jZGVmaW5lIENBTUVMTElBX0JMT0NLX1NJWkUgMTYKLSNkZWZpbmUgQ0FNRUxMSUFfVEFCTEVfQllURV9MRU4gMjcyCi0jZGVmaW5lIENBTUVMTElBX1RBQkxFX1dPUkRfTEVOIChDQU1FTExJQV9UQUJMRV9CWVRFX0xFTiAvIDQpCi0KLSAvKiB0byBtYXRjaCB3aXRoIFdPUkQgKi8KLXR5cGVkZWYgdW5zaWduZWQgaW50IEtFWV9UQUJMRV9UWVBFW0NBTUVMTElBX1RBQkxFX1dPUkRfTEVOXTsKLQotc3RydWN0IGNhbWVsbGlhX2tleV9zdCAKLQl7Ci0JS0VZX1RBQkxFX1RZUEUgcmRfa2V5OwotCWludCBiaXRMZW5ndGg7Ci0Jdm9pZCAoKmVuYykoY29uc3QgdW5zaWduZWQgaW50ICpzdWJrZXksIHVuc2lnbmVkIGludCAqaW8pOwotCXZvaWQgKCpkZWMpKGNvbnN0IHVuc2lnbmVkIGludCAqc3Via2V5LCB1bnNpZ25lZCBpbnQgKmlvKTsKLQl9OwotCi10eXBlZGVmIHN0cnVjdCBjYW1lbGxpYV9rZXlfc3QgQ0FNRUxMSUFfS0VZOwotCi0jaWZkZWYgT1BFTlNTTF9GSVBTCi1pbnQgcHJpdmF0ZV9DYW1lbGxpYV9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRzLAotCUNBTUVMTElBX0tFWSAqa2V5KTsKLSNlbmRpZgotCi1pbnQgQ2FtZWxsaWFfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywKLQlDQU1FTExJQV9LRVkgKmtleSk7Ci0KLXZvaWQgQ2FtZWxsaWFfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAotCWNvbnN0IENBTUVMTElBX0tFWSAqa2V5KTsKLXZvaWQgQ2FtZWxsaWFfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAotCWNvbnN0IENBTUVMTElBX0tFWSAqa2V5KTsKLQotdm9pZCBDYW1lbGxpYV9lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAotCWNvbnN0IENBTUVMTElBX0tFWSAqa2V5LCBjb25zdCBpbnQgZW5jKTsKLXZvaWQgQ2FtZWxsaWFfY2JjX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKLQljb25zdCB1bnNpZ25lZCBsb25nIGxlbmd0aCwgY29uc3QgQ0FNRUxMSUFfS0VZICprZXksCi0JdW5zaWduZWQgY2hhciAqaXZlYywgY29uc3QgaW50IGVuYyk7Ci12b2lkIENhbWVsbGlhX2NmYjEyOF9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCi0JY29uc3QgdW5zaWduZWQgbG9uZyBsZW5ndGgsIGNvbnN0IENBTUVMTElBX0tFWSAqa2V5LAotCXVuc2lnbmVkIGNoYXIgKml2ZWMsIGludCAqbnVtLCBjb25zdCBpbnQgZW5jKTsKLXZvaWQgQ2FtZWxsaWFfY2ZiMV9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCi0JY29uc3QgdW5zaWduZWQgbG9uZyBsZW5ndGgsIGNvbnN0IENBTUVMTElBX0tFWSAqa2V5LAotCXVuc2lnbmVkIGNoYXIgKml2ZWMsIGludCAqbnVtLCBjb25zdCBpbnQgZW5jKTsKLXZvaWQgQ2FtZWxsaWFfY2ZiOF9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCi0JY29uc3QgdW5zaWduZWQgbG9uZyBsZW5ndGgsIGNvbnN0IENBTUVMTElBX0tFWSAqa2V5LAotCXVuc2lnbmVkIGNoYXIgKml2ZWMsIGludCAqbnVtLCBjb25zdCBpbnQgZW5jKTsKLXZvaWQgQ2FtZWxsaWFfY2Zicl9lbmNyeXB0X2Jsb2NrKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLHVuc2lnbmVkIGNoYXIgKm91dCwKLQljb25zdCBpbnQgbmJpdHMsY29uc3QgQ0FNRUxMSUFfS0VZICprZXksCi0JdW5zaWduZWQgY2hhciAqaXZlYyxjb25zdCBpbnQgZW5jKTsKLXZvaWQgQ2FtZWxsaWFfb2ZiMTI4X2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKLQljb25zdCB1bnNpZ25lZCBsb25nIGxlbmd0aCwgY29uc3QgQ0FNRUxMSUFfS0VZICprZXksCi0JdW5zaWduZWQgY2hhciAqaXZlYywgaW50ICpudW0pOwotdm9pZCBDYW1lbGxpYV9jdHIxMjhfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAotCWNvbnN0IHVuc2lnbmVkIGxvbmcgbGVuZ3RoLCBjb25zdCBDQU1FTExJQV9LRVkgKmtleSwKLQl1bnNpZ25lZCBjaGFyIGl2ZWNbQ0FNRUxMSUFfQkxPQ0tfU0laRV0sCi0JdW5zaWduZWQgY2hhciBlY291bnRfYnVmW0NBTUVMTElBX0JMT0NLX1NJWkVdLAotCXVuc2lnbmVkIGludCAqbnVtKTsKLQotI2lmZGVmICBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLSNlbmRpZiAvKiAhSEVBREVSX0NhbWVsbGlhX0ggKi8KLQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2NhbWVsbGlhL2NtbGxfY2JjLmMgYi9jcnlwdG8vY2FtZWxsaWEvY21sbF9jYmMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDE0MWE3Yi4uMDAwMDAwMAotLS0gYS9jcnlwdG8vY2FtZWxsaWEvY21sbF9jYmMuYworKysgL2Rldi9udWxsCkBAIC0xLDI3MyArMCwwIEBACi0vKiBjcnlwdG8vY2FtZWxsaWEvY2FtZWxsaWFfY2JjLmMgLSotIG1vZGU6QzsgYy1maWxlLXN0eWxlOiAiZWF5IiAtKi0gKi8KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0gKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0gKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0gKgotICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0gKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotICoKLSAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotICoKLSAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSAqICAgIGFja25vd2xlZGdtZW50OgotICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0gKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKgotICovCi0KLSNpZm5kZWYgQ0FNRUxMSUFfREVCVUcKLSMgaWZuZGVmIE5ERUJVRwotIyAgZGVmaW5lIE5ERUJVRwotIyBlbmRpZgotI2VuZGlmCi0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgPG9wZW5zc2wvY2FtZWxsaWEuaD4KLSNpbmNsdWRlICJjbWxsX2xvY2wuaCIKLQotdm9pZCBDYW1lbGxpYV9jYmNfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAotCQkgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgbGVuZ3RoLCBjb25zdCBDQU1FTExJQV9LRVkgKmtleSwKLQkJICAgICB1bnNpZ25lZCBjaGFyICppdmVjLCBjb25zdCBpbnQgZW5jKSB7Ci0KLQl1bnNpZ25lZCBsb25nIG47Ci0JdW5zaWduZWQgbG9uZyBsZW4gPSBsZW5ndGg7Ci0JY29uc3QgdW5zaWduZWQgY2hhciAqaXYgPSBpdmVjOwotCXVuaW9uIHsJdTMyIHQzMltDQU1FTExJQV9CTE9DS19TSVpFL3NpemVvZih1MzIpXTsKLQkJdTggIHQ4IFtDQU1FTExJQV9CTE9DS19TSVpFXTsgfSB0bXA7Ci0JY29uc3QgdW5pb24geyBsb25nIG9uZTsgY2hhciBsaXR0bGU7IH0gY2FtZWxsaWFfZW5kaWFuID0gezF9OwotCi0KLQlhc3NlcnQoaW4gJiYgb3V0ICYmIGtleSAmJiBpdmVjKTsKLQlhc3NlcnQoKENBTUVMTElBX0VOQ1JZUFQgPT0gZW5jKXx8KENBTUVMTElBX0RFQ1JZUFQgPT0gZW5jKSk7Ci0KLQlpZigoKHNpemVfdClpbnwoc2l6ZV90KW91dHwoc2l6ZV90KWl2ZWMpICUgc2l6ZW9mKHUzMikgPT0gMCkKLQkJewotCQlpZiAoQ0FNRUxMSUFfRU5DUllQVCA9PSBlbmMpCi0JCQl7Ci0JCQl3aGlsZSAobGVuID49IENBTUVMTElBX0JMT0NLX1NJWkUpCi0JCQkJewotCQkJCVhPUjRXT1JEMigodTMyICopb3V0LAotCQkJCQkodTMyICopaW4sICh1MzIgKilpdik7Ci0JCQkJaWYgKGNhbWVsbGlhX2VuZGlhbi5saXR0bGUpCi0JCQkJCVNXQVA0V09SRCgodTMyICopb3V0KTsKLQkJCQlrZXktPmVuYyhrZXktPnJkX2tleSwgKHUzMiAqKW91dCk7Ci0JCQkJaWYgKGNhbWVsbGlhX2VuZGlhbi5saXR0bGUpCi0JCQkJCVNXQVA0V09SRCgodTMyICopb3V0KTsKLQkJCQlpdiA9IG91dDsKLQkJCQlsZW4gLT0gQ0FNRUxMSUFfQkxPQ0tfU0laRTsKLQkJCQlpbiArPSBDQU1FTExJQV9CTE9DS19TSVpFOwotCQkJCW91dCArPSBDQU1FTExJQV9CTE9DS19TSVpFOwotCQkJCX0KLQkJCWlmIChsZW4pCi0JCQkJewotCQkJCWZvcihuPTA7IG4gPCBsZW47ICsrbikKLQkJCQkJb3V0W25dID0gaW5bbl0gXiBpdltuXTsKLQkJCQlmb3Iobj1sZW47IG4gPCBDQU1FTExJQV9CTE9DS19TSVpFOyArK24pCi0JCQkJCW91dFtuXSA9IGl2W25dOwotCQkJCWlmIChjYW1lbGxpYV9lbmRpYW4ubGl0dGxlKQotCQkJCQlTV0FQNFdPUkQoKHUzMiAqKW91dCk7Ci0JCQkJa2V5LT5lbmMoa2V5LT5yZF9rZXksICh1MzIgKilvdXQpOwotCQkJCWlmIChjYW1lbGxpYV9lbmRpYW4ubGl0dGxlKQotCQkJCQlTV0FQNFdPUkQoKHUzMiAqKW91dCk7Ci0JCQkJaXYgPSBvdXQ7Ci0JCQkJfQotCQkJbWVtY3B5KGl2ZWMsaXYsQ0FNRUxMSUFfQkxPQ0tfU0laRSk7Ci0JCQl9Ci0JCWVsc2UgaWYgKGluICE9IG91dCkKLQkJCXsKLQkJCXdoaWxlIChsZW4gPj0gQ0FNRUxMSUFfQkxPQ0tfU0laRSkKLQkJCQl7Ci0JCQkJbWVtY3B5KG91dCxpbixDQU1FTExJQV9CTE9DS19TSVpFKTsKLQkJCQlpZiAoY2FtZWxsaWFfZW5kaWFuLmxpdHRsZSkKLQkJCQkJU1dBUDRXT1JEKCh1MzIgKilvdXQpOwotCQkJCWtleS0+ZGVjKGtleS0+cmRfa2V5LCh1MzIgKilvdXQpOwotCQkJCWlmIChjYW1lbGxpYV9lbmRpYW4ubGl0dGxlKQotCQkJCQlTV0FQNFdPUkQoKHUzMiAqKW91dCk7Ci0JCQkJWE9SNFdPUkQoKHUzMiAqKW91dCwgKHUzMiAqKWl2KTsKLQkJCQlpdiA9IGluOwotCQkJCWxlbiAtPSBDQU1FTExJQV9CTE9DS19TSVpFOwotCQkJCWluICArPSBDQU1FTExJQV9CTE9DS19TSVpFOwotCQkJCW91dCArPSBDQU1FTExJQV9CTE9DS19TSVpFOwotCQkJCX0KLQkJCWlmIChsZW4pCi0JCQkJewotCQkJCW1lbWNweSh0bXAudDgsIGluLCBDQU1FTExJQV9CTE9DS19TSVpFKTsKLQkJCQlpZiAoY2FtZWxsaWFfZW5kaWFuLmxpdHRsZSkKLQkJCQkJU1dBUDRXT1JEKHRtcC50MzIpOwotCQkJCWtleS0+ZGVjKGtleS0+cmRfa2V5LCB0bXAudDMyKTsKLQkJCQlpZiAoY2FtZWxsaWFfZW5kaWFuLmxpdHRsZSkKLQkJCQkJU1dBUDRXT1JEKHRtcC50MzIpOwotCQkJCWZvcihuPTA7IG4gPCBsZW47ICsrbikKLQkJCQkJb3V0W25dID0gdG1wLnQ4W25dIF4gaXZbbl07Ci0JCQkJaXYgPSBpbjsKLQkJCQl9Ci0JCQltZW1jcHkoaXZlYyxpdixDQU1FTExJQV9CTE9DS19TSVpFKTsKLQkJCX0KLQkJZWxzZSAvKiBpbiA9PSBvdXQgKi8KLQkJCXsKLQkJCXdoaWxlIChsZW4gPj0gQ0FNRUxMSUFfQkxPQ0tfU0laRSkKLQkJCQl7Ci0JCQkJbWVtY3B5KHRtcC50OCwgaW4sIENBTUVMTElBX0JMT0NLX1NJWkUpOwotCQkJCWlmIChjYW1lbGxpYV9lbmRpYW4ubGl0dGxlKQotCQkJCQlTV0FQNFdPUkQoKHUzMiAqKW91dCk7Ci0JCQkJa2V5LT5kZWMoa2V5LT5yZF9rZXksICh1MzIgKilvdXQpOwotCQkJCWlmIChjYW1lbGxpYV9lbmRpYW4ubGl0dGxlKQotCQkJCQlTV0FQNFdPUkQoKHUzMiAqKW91dCk7Ci0JCQkJWE9SNFdPUkQoKHUzMiAqKW91dCwgKHUzMiAqKWl2ZWMpOwotCQkJCW1lbWNweShpdmVjLCB0bXAudDgsIENBTUVMTElBX0JMT0NLX1NJWkUpOwotCQkJCWxlbiAtPSBDQU1FTExJQV9CTE9DS19TSVpFOwotCQkJCWluICs9IENBTUVMTElBX0JMT0NLX1NJWkU7Ci0JCQkJb3V0ICs9IENBTUVMTElBX0JMT0NLX1NJWkU7Ci0JCQkJfQotCQkJaWYgKGxlbikKLQkJCQl7Ci0JCQkJbWVtY3B5KHRtcC50OCwgaW4sIENBTUVMTElBX0JMT0NLX1NJWkUpOwotCQkJCWlmIChjYW1lbGxpYV9lbmRpYW4ubGl0dGxlKQotCQkJCQlTV0FQNFdPUkQoKHUzMiAqKW91dCk7Ci0JCQkJa2V5LT5kZWMoa2V5LT5yZF9rZXksKHUzMiAqKW91dCk7Ci0JCQkJaWYgKGNhbWVsbGlhX2VuZGlhbi5saXR0bGUpCi0JCQkJCVNXQVA0V09SRCgodTMyICopb3V0KTsKLQkJCQlmb3Iobj0wOyBuIDwgbGVuOyArK24pCi0JCQkJCW91dFtuXSBePSBpdmVjW25dOwotCQkJCWZvcihuPWxlbjsgbiA8IENBTUVMTElBX0JMT0NLX1NJWkU7ICsrbikKLQkJCQkJb3V0W25dID0gdG1wLnQ4W25dOwotCQkJCW1lbWNweShpdmVjLCB0bXAudDgsIENBTUVMTElBX0JMT0NLX1NJWkUpOwotCQkJCX0KLQkJCX0KLQkJfQotCWVsc2UgLyogbm8gYWxpZ25lZCAqLwotCQl7Ci0JCWlmIChDQU1FTExJQV9FTkNSWVBUID09IGVuYykKLQkJCXsKLQkJCXdoaWxlIChsZW4gPj0gQ0FNRUxMSUFfQkxPQ0tfU0laRSkKLQkJCQl7Ci0JCQkJZm9yKG49MDsgbiA8IENBTUVMTElBX0JMT0NLX1NJWkU7ICsrbikKLQkJCQkJdG1wLnQ4W25dID0gaW5bbl0gXiBpdltuXTsKLQkJCQlpZiAoY2FtZWxsaWFfZW5kaWFuLmxpdHRsZSkKLQkJCQkJU1dBUDRXT1JEKHRtcC50MzIpOwotCQkJCWtleS0+ZW5jKGtleS0+cmRfa2V5LCB0bXAudDMyKTsKLQkJCQlpZiAoY2FtZWxsaWFfZW5kaWFuLmxpdHRsZSkKLQkJCQkJU1dBUDRXT1JEKHRtcC50MzIpOwotCQkJCW1lbWNweShvdXQsIHRtcC50OCwgQ0FNRUxMSUFfQkxPQ0tfU0laRSk7Ci0JCQkJaXYgPSBvdXQ7Ci0JCQkJbGVuIC09IENBTUVMTElBX0JMT0NLX1NJWkU7Ci0JCQkJaW4gKz0gQ0FNRUxMSUFfQkxPQ0tfU0laRTsKLQkJCQlvdXQgKz0gQ0FNRUxMSUFfQkxPQ0tfU0laRTsKLQkJCQl9Ci0JCQlpZiAobGVuKQotCQkJCXsKLQkJCQlmb3Iobj0wOyBuIDwgbGVuOyArK24pCi0JCQkJCXRtcC50OFtuXSA9IGluW25dIF4gaXZbbl07Ci0JCQkJZm9yKG49bGVuOyBuIDwgQ0FNRUxMSUFfQkxPQ0tfU0laRTsgKytuKQotCQkJCQl0bXAudDhbbl0gPSBpdltuXTsKLQkJCQlpZiAoY2FtZWxsaWFfZW5kaWFuLmxpdHRsZSkKLQkJCQkJU1dBUDRXT1JEKHRtcC50MzIpOwotCQkJCWtleS0+ZW5jKGtleS0+cmRfa2V5LCB0bXAudDMyKTsKLQkJCQlpZiAoY2FtZWxsaWFfZW5kaWFuLmxpdHRsZSkKLQkJCQkJU1dBUDRXT1JEKHRtcC50MzIpOwotCQkJCW1lbWNweShvdXQsIHRtcC50OCwgQ0FNRUxMSUFfQkxPQ0tfU0laRSk7Ci0JCQkJaXYgPSBvdXQ7Ci0JCQkJfQotCQkJbWVtY3B5KGl2ZWMsaXYsQ0FNRUxMSUFfQkxPQ0tfU0laRSk7Ci0JCQl9Ci0JCWVsc2UgaWYgKGluICE9IG91dCkKLQkJCXsKLQkJCXdoaWxlIChsZW4gPj0gQ0FNRUxMSUFfQkxPQ0tfU0laRSkKLQkJCQl7Ci0JCQkJbWVtY3B5KHRtcC50OCxpbixDQU1FTExJQV9CTE9DS19TSVpFKTsKLQkJCQlpZiAoY2FtZWxsaWFfZW5kaWFuLmxpdHRsZSkKLQkJCQkJU1dBUDRXT1JEKHRtcC50MzIpOwotCQkJCWtleS0+ZGVjKGtleS0+cmRfa2V5LHRtcC50MzIpOwotCQkJCWlmIChjYW1lbGxpYV9lbmRpYW4ubGl0dGxlKQotCQkJCQlTV0FQNFdPUkQodG1wLnQzMik7Ci0JCQkJZm9yKG49MDsgbiA8IENBTUVMTElBX0JMT0NLX1NJWkU7ICsrbikKLQkJCQkJb3V0W25dID0gdG1wLnQ4W25dIF4gaXZbbl07Ci0JCQkJaXYgPSBpbjsKLQkJCQlsZW4gLT0gQ0FNRUxMSUFfQkxPQ0tfU0laRTsKLQkJCQlpbiAgKz0gQ0FNRUxMSUFfQkxPQ0tfU0laRTsKLQkJCQlvdXQgKz0gQ0FNRUxMSUFfQkxPQ0tfU0laRTsKLQkJCQl9Ci0JCQlpZiAobGVuKQotCQkJCXsKLQkJCQltZW1jcHkodG1wLnQ4LCBpbiwgQ0FNRUxMSUFfQkxPQ0tfU0laRSk7Ci0JCQkJaWYgKGNhbWVsbGlhX2VuZGlhbi5saXR0bGUpCi0JCQkJCVNXQVA0V09SRCh0bXAudDMyKTsKLQkJCQlrZXktPmRlYyhrZXktPnJkX2tleSwgdG1wLnQzMik7Ci0JCQkJaWYgKGNhbWVsbGlhX2VuZGlhbi5saXR0bGUpCi0JCQkJCVNXQVA0V09SRCh0bXAudDMyKTsKLQkJCQlmb3Iobj0wOyBuIDwgbGVuOyArK24pCi0JCQkJCW91dFtuXSA9IHRtcC50OFtuXSBeIGl2W25dOwotCQkJCWl2ID0gaW47Ci0JCQkJfQotCQkJbWVtY3B5KGl2ZWMsaXYsQ0FNRUxMSUFfQkxPQ0tfU0laRSk7Ci0JCQl9Ci0JCWVsc2UKLQkJCXsKLQkJCXdoaWxlIChsZW4gPj0gQ0FNRUxMSUFfQkxPQ0tfU0laRSkKLQkJCQl7Ci0JCQkJbWVtY3B5KHRtcC50OCwgaW4sIENBTUVMTElBX0JMT0NLX1NJWkUpOwotCQkJCWlmIChjYW1lbGxpYV9lbmRpYW4ubGl0dGxlKQotCQkJCQlTV0FQNFdPUkQodG1wLnQzMik7Ci0JCQkJa2V5LT5kZWMoa2V5LT5yZF9rZXksIHRtcC50MzIpOwotCQkJCWlmIChjYW1lbGxpYV9lbmRpYW4ubGl0dGxlKQotCQkJCQlTV0FQNFdPUkQodG1wLnQzMik7Ci0JCQkJZm9yKG49MDsgbiA8IENBTUVMTElBX0JMT0NLX1NJWkU7ICsrbikKLQkJCQkJdG1wLnQ4W25dIF49IGl2ZWNbbl07Ci0JCQkJbWVtY3B5KGl2ZWMsIGluLCBDQU1FTExJQV9CTE9DS19TSVpFKTsKLQkJCQltZW1jcHkob3V0LCB0bXAudDgsIENBTUVMTElBX0JMT0NLX1NJWkUpOwotCQkJCWxlbiAtPSBDQU1FTExJQV9CTE9DS19TSVpFOwotCQkJCWluICs9IENBTUVMTElBX0JMT0NLX1NJWkU7Ci0JCQkJb3V0ICs9IENBTUVMTElBX0JMT0NLX1NJWkU7Ci0JCQkJfQotCQkJaWYgKGxlbikKLQkJCQl7Ci0JCQkJbWVtY3B5KHRtcC50OCwgaW4sIENBTUVMTElBX0JMT0NLX1NJWkUpOwotCQkJCWlmIChjYW1lbGxpYV9lbmRpYW4ubGl0dGxlKQotCQkJCQlTV0FQNFdPUkQodG1wLnQzMik7Ci0JCQkJa2V5LT5kZWMoa2V5LT5yZF9rZXksdG1wLnQzMik7Ci0JCQkJaWYgKGNhbWVsbGlhX2VuZGlhbi5saXR0bGUpCi0JCQkJCVNXQVA0V09SRCh0bXAudDMyKTsKLQkJCQlmb3Iobj0wOyBuIDwgbGVuOyArK24pCi0JCQkJCXRtcC50OFtuXSBePSBpdmVjW25dOwotCQkJCW1lbWNweShpdmVjLCBpbiwgQ0FNRUxMSUFfQkxPQ0tfU0laRSk7Ci0JCQkJbWVtY3B5KG91dCx0bXAudDgsbGVuKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLX0KZGlmZiAtLWdpdCBhL2NyeXB0by9jYW1lbGxpYS9jbWxsX2NmYi5jIGIvY3J5cHRvL2NhbWVsbGlhL2NtbGxfY2ZiLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmMGY5ZjQuLjAwMDAwMDAKLS0tIGEvY3J5cHRvL2NhbWVsbGlhL2NtbGxfY2ZiLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMzUgKzAsMCBAQAotLyogY3J5cHRvL2NhbWVsbGlhL2NhbWVsbGlhX2NmYi5jIC0qLSBtb2RlOkM7IGMtZmlsZS1zdHlsZTogImVheSIgLSotICovCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChjKSAyMDA2IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICoKLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotICoKLSAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSAqCi0gKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSAqCi0gKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0gKiAgICBhY2tub3dsZWRnbWVudDoKLSAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0gKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0gKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICoKLSAqLwotLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgotICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgotICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgotICogCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKLSAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKLSAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgotICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcwotICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0gKiAKLSAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCi0gKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCi0gKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCi0gKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgotICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCi0gKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5Ci0gKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgotICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5Ci0gKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KLSAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAotICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKLSAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqIAotICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKLSAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQotICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQotICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KLSAqLwotCi0jaWZuZGVmIENBTUVMTElBX0RFQlVHCi0jIGlmbmRlZiBOREVCVUcKLSMgIGRlZmluZSBOREVCVUcKLSMgZW5kaWYKLSNlbmRpZgotI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSA8b3BlbnNzbC9jYW1lbGxpYS5oPgotI2luY2x1ZGUgImNtbGxfbG9jbC5oIgotI2luY2x1ZGUgImVfb3MuaCIKLQotCi0vKiBUaGUgaW5wdXQgYW5kIG91dHB1dCBlbmNyeXB0ZWQgYXMgdGhvdWdoIDEyOGJpdCBjZmIgbW9kZSBpcyBiZWluZwotICogdXNlZC4gIFRoZSBleHRyYSBzdGF0ZSBpbmZvcm1hdGlvbiB0byByZWNvcmQgaG93IG11Y2ggb2YgdGhlCi0gKiAxMjhiaXQgYmxvY2sgd2UgaGF2ZSB1c2VkIGlzIGNvbnRhaW5lZCBpbiAqbnVtOwotICovCi0KLXZvaWQgQ2FtZWxsaWFfY2ZiMTI4X2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKLQljb25zdCB1bnNpZ25lZCBsb25nIGxlbmd0aCwgY29uc3QgQ0FNRUxMSUFfS0VZICprZXksCi0JdW5zaWduZWQgY2hhciAqaXZlYywgaW50ICpudW0sIGNvbnN0IGludCBlbmMpCi0JewotCi0JdW5zaWduZWQgaW50IG47Ci0JdW5zaWduZWQgbG9uZyBsID0gbGVuZ3RoOwotCXVuc2lnbmVkIGNoYXIgYzsKLQotCWFzc2VydChpbiAmJiBvdXQgJiYga2V5ICYmIGl2ZWMgJiYgbnVtKTsKLQotCW4gPSAqbnVtOwotCi0JaWYgKGVuYykgCi0JCXsKLQkJd2hpbGUgKGwtLSkgCi0JCQl7Ci0JCQlpZiAobiA9PSAwKSAKLQkJCQl7Ci0JCQkJQ2FtZWxsaWFfZW5jcnlwdChpdmVjLCBpdmVjLCBrZXkpOwotCQkJCX0KLQkJCWl2ZWNbbl0gPSAqKG91dCsrKSA9ICooaW4rKykgXiBpdmVjW25dOwotCQkJbiA9IChuKzEpICUgQ0FNRUxMSUFfQkxPQ0tfU0laRTsKLQkJCX0KLQkJfSAKLQllbHNlIAotCQl7Ci0JCXdoaWxlIChsLS0pIAotCQkJewotCQkJaWYgKG4gPT0gMCkgCi0JCQkJewotCQkJCUNhbWVsbGlhX2VuY3J5cHQoaXZlYywgaXZlYywga2V5KTsKLQkJCQl9Ci0JCQljID0gKihpbik7Ci0JCQkqKG91dCsrKSA9ICooaW4rKykgXiBpdmVjW25dOwotCQkJaXZlY1tuXSA9IGM7Ci0JCQluID0gKG4rMSkgJSBDQU1FTExJQV9CTE9DS19TSVpFOwotCQkJfQotCQl9Ci0KLQkqbnVtPW47Ci0JfQotCi0vKiBUaGlzIGV4cGVjdHMgYSBzaW5nbGUgYmxvY2sgb2Ygc2l6ZSBuYml0cyBmb3IgYm90aCBpbiBhbmQgb3V0LiBOb3RlIHRoYXQKLSAgIGl0IGNvcnJ1cHRzIGFueSBleHRyYSBiaXRzIGluIHRoZSBsYXN0IGJ5dGUgb2Ygb3V0ICovCi12b2lkIENhbWVsbGlhX2NmYnJfZW5jcnlwdF9ibG9jayhjb25zdCB1bnNpZ25lZCBjaGFyICppbix1bnNpZ25lZCBjaGFyICpvdXQsCi0JY29uc3QgaW50IG5iaXRzLGNvbnN0IENBTUVMTElBX0tFWSAqa2V5LAotCXVuc2lnbmVkIGNoYXIgKml2ZWMsY29uc3QgaW50IGVuYykKLQl7Ci0JaW50IG4scmVtLG51bTsKLQl1bnNpZ25lZCBjaGFyIG92ZWNbQ0FNRUxMSUFfQkxPQ0tfU0laRSoyXTsKLQotCWlmIChuYml0czw9MCB8fCBuYml0cz4xMjgpIHJldHVybjsKLQotCS8qIGZpbGwgaW4gdGhlIGZpcnN0IGhhbGYgb2YgdGhlIG5ldyBJViB3aXRoIHRoZSBjdXJyZW50IElWICovCi0JbWVtY3B5KG92ZWMsaXZlYyxDQU1FTExJQV9CTE9DS19TSVpFKTsKLQkvKiBjb25zdHJ1Y3QgdGhlIG5ldyBJViAqLwotCUNhbWVsbGlhX2VuY3J5cHQoaXZlYyxpdmVjLGtleSk7Ci0JbnVtID0gKG5iaXRzKzcpLzg7Ci0JaWYgKGVuYykJLyogZW5jcnlwdCB0aGUgaW5wdXQgKi8KLQkJZm9yKG49MCA7IG4gPCBudW0gOyArK24pCi0JCQlvdXRbbl0gPSAob3ZlY1tDQU1FTExJQV9CTE9DS19TSVpFK25dID0gaW5bbl0gXiBpdmVjW25dKTsKLQllbHNlCQkvKiBkZWNyeXB0IHRoZSBpbnB1dCAqLwotCQlmb3Iobj0wIDsgbiA8IG51bSA7ICsrbikKLQkJCW91dFtuXSA9IChvdmVjW0NBTUVMTElBX0JMT0NLX1NJWkUrbl0gPSBpbltuXSkgXiBpdmVjW25dOwotCS8qIHNoaWZ0IG92ZWMgbGVmdC4uLiAqLwotCXJlbSA9IG5iaXRzJTg7Ci0JbnVtID0gbmJpdHMvODsKLQlpZihyZW09PTApCi0JCW1lbWNweShpdmVjLG92ZWMrbnVtLENBTUVMTElBX0JMT0NLX1NJWkUpOwotCWVsc2UKLQkJZm9yKG49MCA7IG4gPCBDQU1FTExJQV9CTE9DS19TSVpFIDsgKytuKQotCQkJaXZlY1tuXSA9IG92ZWNbbitudW1dPDxyZW0gfCBvdmVjW24rbnVtKzFdPj4oOC1yZW0pOwotCi0JLyogaXQgaXMgbm90IG5lY2Vzc2FyeSB0byBjbGVhbnNlIG92ZWMsIHNpbmNlIHRoZSBJViBpcyBub3Qgc2VjcmV0ICovCi0JfQotCi0vKiBOLkIuIFRoaXMgZXhwZWN0cyB0aGUgaW5wdXQgdG8gYmUgcGFja2VkLCBNUyBiaXQgZmlyc3QgKi8KLXZvaWQgQ2FtZWxsaWFfY2ZiMV9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCi0JY29uc3QgdW5zaWduZWQgbG9uZyBsZW5ndGgsIGNvbnN0IENBTUVMTElBX0tFWSAqa2V5LAotCXVuc2lnbmVkIGNoYXIgKml2ZWMsIGludCAqbnVtLCBjb25zdCBpbnQgZW5jKQotCXsKLQl1bnNpZ25lZCBpbnQgbjsKLQl1bnNpZ25lZCBjaGFyIGNbMV0sZFsxXTsKLQotCWFzc2VydChpbiAmJiBvdXQgJiYga2V5ICYmIGl2ZWMgJiYgbnVtKTsKLQlhc3NlcnQoKm51bSA9PSAwKTsKLQotCW1lbXNldChvdXQsMCwobGVuZ3RoKzcpLzgpOwotCWZvcihuPTAgOyBuIDwgbGVuZ3RoIDsgKytuKQotCQl7Ci0JCWNbMF09KGluW24vOF0mKDEgPDwgKDctbiU4KSkpID8gMHg4MCA6IDA7Ci0JCUNhbWVsbGlhX2NmYnJfZW5jcnlwdF9ibG9jayhjLGQsMSxrZXksaXZlYyxlbmMpOwotCQlvdXRbbi84XT0ob3V0W24vOF0mfigxIDw8ICg3LW4lOCkpKXwoKGRbMF0mMHg4MCkgPj4gKG4lOCkpOwotCQl9Ci0JfQotCi12b2lkIENhbWVsbGlhX2NmYjhfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAotCWNvbnN0IHVuc2lnbmVkIGxvbmcgbGVuZ3RoLCBjb25zdCBDQU1FTExJQV9LRVkgKmtleSwKLQl1bnNpZ25lZCBjaGFyICppdmVjLCBpbnQgKm51bSwgY29uc3QgaW50IGVuYykKLQl7Ci0JdW5zaWduZWQgaW50IG47Ci0KLQlhc3NlcnQoaW4gJiYgb3V0ICYmIGtleSAmJiBpdmVjICYmIG51bSk7Ci0JYXNzZXJ0KCpudW0gPT0gMCk7Ci0KLQlmb3Iobj0wIDsgbiA8IGxlbmd0aCA7ICsrbikKLQkJQ2FtZWxsaWFfY2Zicl9lbmNyeXB0X2Jsb2NrKCZpbltuXSwmb3V0W25dLDgsa2V5LGl2ZWMsZW5jKTsKLQl9Ci0KZGlmZiAtLWdpdCBhL2NyeXB0by9jYW1lbGxpYS9jbWxsX2N0ci5jIGIvY3J5cHRvL2NhbWVsbGlhL2NtbGxfY3RyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjMjFiNzAuLjAwMDAwMDAKLS0tIGEvY3J5cHRvL2NhbWVsbGlhL2NtbGxfY3RyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDMgKzAsMCBAQAotLyogY3J5cHRvL2NhbWVsbGlhL2NhbWVsbGlhX2N0ci5jIC0qLSBtb2RlOkM7IGMtZmlsZS1zdHlsZTogImVheSIgLSotICovCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChjKSAyMDA2IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICoKLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotICoKLSAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSAqCi0gKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSAqCi0gKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0gKiAgICBhY2tub3dsZWRnbWVudDoKLSAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0gKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0gKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICoKLSAqLwotCi0jaWZuZGVmIENBTUVMTElBX0RFQlVHCi0jIGlmbmRlZiBOREVCVUcKLSMgIGRlZmluZSBOREVCVUcKLSMgZW5kaWYKLSNlbmRpZgotI2luY2x1ZGUgPGFzc2VydC5oPgotCi0jaW5jbHVkZSA8b3BlbnNzbC9jYW1lbGxpYS5oPgotI2luY2x1ZGUgImNtbGxfbG9jbC5oIgotCi0vKiBOT1RFOiB0aGUgSVYvY291bnRlciBDVFIgbW9kZSBpcyBiaWctZW5kaWFuLiAgVGhlIHJlc3Qgb2YgdGhlIENhbWVsbGlhIGNvZGUKLSAqIGlzIGVuZGlhbi1uZXV0cmFsLiAqLwotLyogaW5jcmVtZW50IGNvdW50ZXIgKDEyOC1iaXQgaW50KSBieSAxICovCi1zdGF0aWMgdm9pZCBDYW1lbGxpYV9jdHIxMjhfaW5jKHVuc2lnbmVkIGNoYXIgKmNvdW50ZXIpIAotCXsKLQl1bnNpZ25lZCBsb25nIGM7Ci0KLQkvKiBHcmFiIGJvdHRvbSBkd29yZCBvZiBjb3VudGVyIGFuZCBpbmNyZW1lbnQgKi8KLQljID0gR0VUVTMyKGNvdW50ZXIgKyAxMik7Ci0JYysrOwljICY9IDB4RkZGRkZGRkY7Ci0JUFVUVTMyKGNvdW50ZXIgKyAxMiwgYyk7Ci0KLQkvKiBpZiBubyBvdmVyZmxvdywgd2UncmUgZG9uZSAqLwotCWlmIChjKQotCQlyZXR1cm47Ci0KLQkvKiBHcmFiIDFzdCBkd29yZCBvZiBjb3VudGVyIGFuZCBpbmNyZW1lbnQgKi8KLQljID0gR0VUVTMyKGNvdW50ZXIgKyAgOCk7Ci0JYysrOwljICY9IDB4RkZGRkZGRkY7Ci0JUFVUVTMyKGNvdW50ZXIgKyAgOCwgYyk7Ci0KLQkvKiBpZiBubyBvdmVyZmxvdywgd2UncmUgZG9uZSAqLwotCWlmIChjKQotCQlyZXR1cm47Ci0KLQkvKiBHcmFiIDJuZCBkd29yZCBvZiBjb3VudGVyIGFuZCBpbmNyZW1lbnQgKi8KLQljID0gR0VUVTMyKGNvdW50ZXIgKyAgNCk7Ci0JYysrOwljICY9IDB4RkZGRkZGRkY7Ci0JUFVUVTMyKGNvdW50ZXIgKyAgNCwgYyk7Ci0KLQkvKiBpZiBubyBvdmVyZmxvdywgd2UncmUgZG9uZSAqLwotCWlmIChjKQotCQlyZXR1cm47Ci0KLQkvKiBHcmFiIHRvcCBkd29yZCBvZiBjb3VudGVyIGFuZCBpbmNyZW1lbnQgKi8KLQljID0gR0VUVTMyKGNvdW50ZXIgKyAgMCk7Ci0JYysrOwljICY9IDB4RkZGRkZGRkY7Ci0JUFVUVTMyKGNvdW50ZXIgKyAgMCwgYyk7Ci0JfQotCi0vKiBUaGUgaW5wdXQgZW5jcnlwdGVkIGFzIHRob3VnaCAxMjhiaXQgY291bnRlciBtb2RlIGlzIGJlaW5nCi0gKiB1c2VkLiAgVGhlIGV4dHJhIHN0YXRlIGluZm9ybWF0aW9uIHRvIHJlY29yZCBob3cgbXVjaCBvZiB0aGUKLSAqIDEyOGJpdCBibG9jayB3ZSBoYXZlIHVzZWQgaXMgY29udGFpbmVkIGluICpudW0sIGFuZCB0aGUKLSAqIGVuY3J5cHRlZCBjb3VudGVyIGlzIGtlcHQgaW4gZWNvdW50X2J1Zi4gIEJvdGggKm51bSBhbmQKLSAqIGVjb3VudF9idWYgbXVzdCBiZSBpbml0aWFsaXNlZCB3aXRoIHplcm9zIGJlZm9yZSB0aGUgZmlyc3QKLSAqIGNhbGwgdG8gQ2FtZWxsaWFfY3RyMTI4X2VuY3J5cHQoKS4KLSAqCi0gKiBUaGlzIGFsZ29yaXRobSBhc3N1bWVzIHRoYXQgdGhlIGNvdW50ZXIgaXMgaW4gdGhlIHggbG93ZXIgYml0cwotICogb2YgdGhlIElWIChpdmVjKSwgYW5kIHRoYXQgdGhlIGFwcGxpY2F0aW9uIGhhcyBmdWxsIGNvbnRyb2wgb3ZlcgotICogb3ZlcmZsb3cgYW5kIHRoZSByZXN0IG9mIHRoZSBJVi4gIFRoaXMgaW1wbGVtZW50YXRpb24gdGFrZXMgTk8KLSAqIHJlc3BvbnNhYmlsaXR5IGZvciBjaGVja2luZyB0aGF0IHRoZSBjb3VudGVyIGRvZXNuJ3Qgb3ZlcmZsb3cKLSAqIGludG8gdGhlIHJlc3Qgb2YgdGhlIElWIHdoZW4gaW5jcmVtZW50ZWQuCi0gKi8KLXZvaWQgQ2FtZWxsaWFfY3RyMTI4X2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKLQljb25zdCB1bnNpZ25lZCBsb25nIGxlbmd0aCwgY29uc3QgQ0FNRUxMSUFfS0VZICprZXksCi0JdW5zaWduZWQgY2hhciBpdmVjW0NBTUVMTElBX0JMT0NLX1NJWkVdLAotCXVuc2lnbmVkIGNoYXIgZWNvdW50X2J1ZltDQU1FTExJQV9CTE9DS19TSVpFXSwKLQl1bnNpZ25lZCBpbnQgKm51bSkgCi0JewotCi0JdW5zaWduZWQgaW50IG47Ci0JdW5zaWduZWQgbG9uZyBsPWxlbmd0aDsKLQotCWFzc2VydChpbiAmJiBvdXQgJiYga2V5ICYmIGNvdW50ZXIgJiYgbnVtKTsKLQlhc3NlcnQoKm51bSA8IENBTUVMTElBX0JMT0NLX1NJWkUpOwotCi0JbiA9ICpudW07Ci0KLQl3aGlsZSAobC0tKSAKLQkJewotCQlpZiAobiA9PSAwKSAKLQkJCXsKLQkJCUNhbWVsbGlhX2VuY3J5cHQoaXZlYywgZWNvdW50X2J1Ziwga2V5KTsKLQkJCUNhbWVsbGlhX2N0cjEyOF9pbmMoaXZlYyk7Ci0JCQl9Ci0JCSoob3V0KyspID0gKihpbisrKSBeIGVjb3VudF9idWZbbl07Ci0JCW4gPSAobisxKSAlIENBTUVMTElBX0JMT0NLX1NJWkU7Ci0JCX0KLQotCSpudW09bjsKLQl9Ci0KZGlmZiAtLWdpdCBhL2NyeXB0by9jYW1lbGxpYS9jbWxsX2xvY2wuaCBiL2NyeXB0by9jYW1lbGxpYS9jbWxsX2xvY2wuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmFjMmU5NS4uMDAwMDAwMAotLS0gYS9jcnlwdG8vY2FtZWxsaWEvY21sbF9sb2NsLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjUgKzAsMCBAQAotLyogY3J5cHRvL2NhbWVsbGlhL2NhbWVsbGlhX2xvY2wuaCAtKi0gbW9kZTpDOyBjLWZpbGUtc3R5bGU6ICJlYXkiIC0qLSAqLwotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAyMDA2IE5UVCAoTmlwcG9uIFRlbGVncmFwaCBhbmQgVGVsZXBob25lIENvcnBvcmF0aW9uKSAuIAotICogQUxMIFJJR0hUUyBSRVNFUlZFRC4KLSAqCi0gKiBJbnRlbGxlY3R1YWwgUHJvcGVydHkgaW5mb3JtYXRpb24gZm9yIENhbWVsbGlhOgotICogICAgIGh0dHA6Ly9pbmZvLmlzbC5udHQuY28uanAvY3J5cHQvZW5nL2luZm8vY2hpdGVraS5odG1sCi0gKgotICogTmV3cyBSZWxlYXNlIGZvciBBbm5vdW5jZW1lbnQgb2YgQ2FtZWxsaWEgb3BlbiBzb3VyY2U6Ci0gKiAgICAgaHR0cDovL3d3dy5udHQuY28uanAvbmV3cy9uZXdzMDZlLzA2MDQvMDYwNDEzYS5odG1sCi0gKgotICogVGhlIENhbWVsbGlhIENvZGUgaW5jbHVkZWQgaGVyZWluIGlzIGRldmVsb3BlZCBieQotICogTlRUIChOaXBwb24gVGVsZWdyYXBoIGFuZCBUZWxlcGhvbmUgQ29ycG9yYXRpb24pLCBhbmQgaXMgY29udHJpYnV0ZWQKLSAqIHRvIHRoZSBPcGVuU1NMIHByb2plY3QuCi0gKgotICogVGhlIENhbWVsbGlhIENvZGUgaXMgbGljZW5zZWQgcHVyc3VhbnQgdG8gdGhlIE9wZW5TU0wgb3BlbiBzb3VyY2UKLSAqIGxpY2Vuc2UgcHJvdmlkZWQgYmVsb3cuCi0gKi8KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0gKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0gKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0gKgotICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0gKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotICoKLSAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotICoKLSAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSAqICAgIGFja25vd2xlZGdtZW50OgotICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0gKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotI2lmbmRlZiBIRUFERVJfQ0FNRUxMSUFfTE9DTF9ICi0jZGVmaW5lIEhFQURFUl9DQU1FTExJQV9MT0NMX0gKLQotI2luY2x1ZGUgIm9wZW5zc2wvZV9vczIuaCIKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgdTg7Ci10eXBlZGVmIHVuc2lnbmVkIGludCB1MzI7Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoX01TQ19WRVIpICYmIChkZWZpbmVkKF9NX0lYODYpIHx8IGRlZmluZWQoX01fQU1ENjQpIHx8IGRlZmluZWQoX01fWDY0KSkKLSMgZGVmaW5lIFNXQVAoeCkgKCBfbHJvdGwoeCwgOCkgJiAweDAwZmYwMGZmIHwgX2xyb3RyKHgsIDgpICYgMHhmZjAwZmYwMCApCi0jIGRlZmluZSBHRVRVMzIocCkgU1dBUCgqKCh1MzIgKikocCkpKQotIyBkZWZpbmUgUFVUVTMyKGN0LCBzdCkgeyAqKCh1MzIgKikoY3QpKSA9IFNXQVAoKHN0KSk7IH0KLSMgZGVmaW5lIENBTUVMTElBX1NXQVA0KHgpICh4ID0gKCBfbHJvdGwoeCwgOCkgJiAweDAwZmYwMGZmIHwgX2xyb3RyKHgsIDgpICYgMHhmZjAwZmYwMCkgKQotCi0jZWxzZSAvKiBub3Qgd2luZG93cyAqLwotIyBkZWZpbmUgR0VUVTMyKHB0KSAoKCh1MzIpKHB0KVswXSA8PCAyNCkgXAotCV4gKCh1MzIpKHB0KVsxXSA8PCAxNikgXAotCV4gKCh1MzIpKHB0KVsyXSA8PCAgOCkgXAotCV4gKCh1MzIpKHB0KVszXSkpCi0KLSMgZGVmaW5lIFBVVFUzMihjdCwgc3QpIHsgKGN0KVswXSA9ICh1OCkoKHN0KSA+PiAyNCk7IFwKLQkoY3QpWzFdID0gKHU4KSgoc3QpID4+IDE2KTsgXAotCShjdClbMl0gPSAodTgpKChzdCkgPj4gIDgpOyBcCi0JKGN0KVszXSA9ICh1OCkoc3QpOyB9Ci0KLSNpZiAoZGVmaW5lZCAoX19HTlVDX18pICYmIChkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX194ODZfNjQpKSkKLSNkZWZpbmUgQ0FNRUxMSUFfU1dBUDQoeCkgXAotICBkb3tcCi0gICAgYXNtKCJic3dhcCAlMSIgOiAiK3IiICh4KSk7XAotICB9d2hpbGUoMCkKLSNlbHNlCi0jZGVmaW5lIENBTUVMTElBX1NXQVA0KHgpIFwKLSAgIGRve1wKLSAgICAgeCA9ICgodTMyKXggPDwgMTYpICsgKCh1MzIpeCA+PiAxNik7XAotICAgICB4ID0gKCgodTMyKXggJiAweGZmMDBmZikgPDwgOCkgKyAoKCh1MzIpeCA+PiA4KSAmIDB4ZmYwMGZmKTtcCi0gICB9IHdoaWxlKDApCi0jZW5kaWYKLSNlbmRpZgotCi0jZGVmaW5lIENPUFk0V09SRChkc3QsIHNyYykJIFwKLQkgICAgIGRvCQkJIFwKLQkJICAgICB7CQkgXAotCQkgICAgIChkc3QpWzBdPShzcmMpWzBdOwkJXAotCQkgICAgIChkc3QpWzFdPShzcmMpWzFdOwkJXAotCQkgICAgIChkc3QpWzJdPShzcmMpWzJdOwkJXAotCQkgICAgIChkc3QpWzNdPShzcmMpWzNdOwkJXAotCQkgICAgIH13aGlsZSgwKQotCi0jZGVmaW5lIFNXQVA0V09SRCh3b3JkKQkJCQlcCi0gICBkbwkJCQkJCVwKLQkgICB7CQkJCQlcCi0JICAgQ0FNRUxMSUFfU1dBUDQoKHdvcmQpWzBdKTsJCQlcCi0JICAgQ0FNRUxMSUFfU1dBUDQoKHdvcmQpWzFdKTsJCQlcCi0JICAgQ0FNRUxMSUFfU1dBUDQoKHdvcmQpWzJdKTsJCQlcCi0JICAgQ0FNRUxMSUFfU1dBUDQoKHdvcmQpWzNdKTsJCQlcCi0JICAgfXdoaWxlKDApCi0KLSNkZWZpbmUgWE9SNFdPUkQoYSwgYikvKiBhID0gYSBeIGIgKi8JCVwKLSAgIGRvCQkJCQkJXAotCXsJCQkJCVwKLQkoYSlbMF1ePShiKVswXTsJCQkJXAotCShhKVsxXV49KGIpWzFdOwkJCQlcCi0JKGEpWzJdXj0oYilbMl07CQkJCVwKLQkoYSlbM11ePShiKVszXTsJCQkJXAotCX13aGlsZSgwKQotCi0jZGVmaW5lIFhPUjRXT1JEMihhLCBiLCBjKS8qIGEgPSBiIF4gYyAqLwlcCi0gICBkbwkJCQkJCVwKLQl7CQkJCQlcCi0JKGEpWzBdPShiKVswXV4oYylbMF07CQkJXAotCShhKVsxXT0oYilbMV1eKGMpWzFdOwkJCQlcCi0JKGEpWzJdPShiKVsyXV4oYylbMl07CQkJCVwKLQkoYSlbM109KGIpWzNdXihjKVszXTsJCQkJXAotCX13aGlsZSgwKQotCi0KLXZvaWQgY2FtZWxsaWFfc2V0dXAxMjgoY29uc3QgdTggKmtleSwgdTMyICpzdWJrZXkpOwotdm9pZCBjYW1lbGxpYV9zZXR1cDE5Mihjb25zdCB1OCAqa2V5LCB1MzIgKnN1YmtleSk7Ci12b2lkIGNhbWVsbGlhX3NldHVwMjU2KGNvbnN0IHU4ICprZXksIHUzMiAqc3Via2V5KTsKLQotdm9pZCBjYW1lbGxpYV9lbmNyeXB0MTI4KGNvbnN0IHUzMiAqc3Via2V5LCB1MzIgKmlvKTsKLXZvaWQgY2FtZWxsaWFfZGVjcnlwdDEyOChjb25zdCB1MzIgKnN1YmtleSwgdTMyICppbyk7Ci12b2lkIGNhbWVsbGlhX2VuY3J5cHQyNTYoY29uc3QgdTMyICpzdWJrZXksIHUzMiAqaW8pOwotdm9pZCBjYW1lbGxpYV9kZWNyeXB0MjU2KGNvbnN0IHUzMiAqc3Via2V5LCB1MzIgKmlvKTsKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotI2VuZGlmIC8qICNpZm5kZWYgSEVBREVSX0NBTUVMTElBX0xPQ0xfSCAqLwotCmRpZmYgLS1naXQgYS9jcnlwdG8vY2FtZWxsaWEvY21sbF9taXNjLmMgYi9jcnlwdG8vY2FtZWxsaWEvY21sbF9taXNjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjZDdhYmEuLjAwMDAwMDAKLS0tIGEvY3J5cHRvL2NhbWVsbGlhL2NtbGxfbWlzYy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAgQEAKLS8qIGNyeXB0by9jYW1lbGxpYS9jYW1lbGxpYV9taXNjLmMgLSotIG1vZGU6QzsgYy1maWxlLXN0eWxlOiAiZWF5IiAtKi0gKi8KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0gKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0gKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0gKgotICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0gKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotICoKLSAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotICoKLSAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSAqICAgIGFja25vd2xlZGdtZW50OgotICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0gKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKgotICovCi0gCi0jaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgotI2luY2x1ZGUgPG9wZW5zc2wvY2FtZWxsaWEuaD4KLSNpbmNsdWRlICJjbWxsX2xvY2wuaCIKLSNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotI2lmZGVmIE9QRU5TU0xfRklQUwotI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotI2VuZGlmCi0KLWNvbnN0IGNoYXIgQ0FNRUxMSUFfdmVyc2lvbltdPSJDQU1FTExJQSIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOwotCi1pbnQgQ2FtZWxsaWFfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywKLQlDQU1FTExJQV9LRVkgKmtleSkKLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLQl7Ci0JaWYgKEZJUFNfbW9kZSgpKQotCQlGSVBTX0JBRF9BQk9SVChDQU1FTExJQSkKLQlyZXR1cm4gcHJpdmF0ZV9DYW1lbGxpYV9zZXRfa2V5KHVzZXJLZXksIGJpdHMsIGtleSk7Ci0JfQotaW50IHByaXZhdGVfQ2FtZWxsaWFfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywKLQlDQU1FTExJQV9LRVkgKmtleSkKLSNlbmRpZgotCXsKLQlpZiAoIXVzZXJLZXkgfHwgIWtleSkKLQkJewotCQlyZXR1cm4gLTE7Ci0JCX0KLQkKLQlzd2l0Y2goYml0cykKLQkJewotCWNhc2UgMTI4OgotCQljYW1lbGxpYV9zZXR1cDEyOCh1c2VyS2V5LCAodW5zaWduZWQgaW50ICopa2V5LT5yZF9rZXkpOwotCQlrZXktPmVuYyA9IGNhbWVsbGlhX2VuY3J5cHQxMjg7Ci0JCWtleS0+ZGVjID0gY2FtZWxsaWFfZGVjcnlwdDEyODsKLQkJYnJlYWs7Ci0JY2FzZSAxOTI6Ci0JCWNhbWVsbGlhX3NldHVwMTkyKHVzZXJLZXksICh1bnNpZ25lZCBpbnQgKilrZXktPnJkX2tleSk7Ci0JCWtleS0+ZW5jID0gY2FtZWxsaWFfZW5jcnlwdDI1NjsKLQkJa2V5LT5kZWMgPSBjYW1lbGxpYV9kZWNyeXB0MjU2OwotCQlicmVhazsKLQljYXNlIDI1NjoKLQkJY2FtZWxsaWFfc2V0dXAyNTYodXNlcktleSwgKHVuc2lnbmVkIGludCAqKWtleS0+cmRfa2V5KTsKLQkJa2V5LT5lbmMgPSBjYW1lbGxpYV9lbmNyeXB0MjU2OwotCQlrZXktPmRlYyA9IGNhbWVsbGlhX2RlY3J5cHQyNTY7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtMjsKLQkJfQotCQotCWtleS0+Yml0TGVuZ3RoID0gYml0czsKLQlyZXR1cm4gMDsKLQl9Ci0KLXZvaWQgQ2FtZWxsaWFfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAotCWNvbnN0IENBTUVMTElBX0tFWSAqa2V5KQotCXsKLQl1MzIgdG1wW0NBTUVMTElBX0JMT0NLX1NJWkUvc2l6ZW9mKHUzMildOwotCWNvbnN0IHVuaW9uIHsgbG9uZyBvbmU7IGNoYXIgbGl0dGxlOyB9IGNhbWVsbGlhX2VuZGlhbiA9IHsxfTsKLQotCW1lbWNweSh0bXAsIGluLCBDQU1FTExJQV9CTE9DS19TSVpFKTsKLQlpZiAoY2FtZWxsaWFfZW5kaWFuLmxpdHRsZSkgU1dBUDRXT1JEKHRtcCk7Ci0Ja2V5LT5lbmMoa2V5LT5yZF9rZXksIHRtcCk7Ci0JaWYgKGNhbWVsbGlhX2VuZGlhbi5saXR0bGUpIFNXQVA0V09SRCh0bXApOwotCW1lbWNweShvdXQsIHRtcCwgQ0FNRUxMSUFfQkxPQ0tfU0laRSk7Ci0JfQotCi12b2lkIENhbWVsbGlhX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKLQljb25zdCBDQU1FTExJQV9LRVkgKmtleSkKLQl7Ci0JdTMyIHRtcFtDQU1FTExJQV9CTE9DS19TSVpFL3NpemVvZih1MzIpXTsKLQljb25zdCB1bmlvbiB7IGxvbmcgb25lOyBjaGFyIGxpdHRsZTsgfSBjYW1lbGxpYV9lbmRpYW4gPSB7MX07Ci0KLQltZW1jcHkodG1wLCBpbiwgQ0FNRUxMSUFfQkxPQ0tfU0laRSk7Ci0JaWYgKGNhbWVsbGlhX2VuZGlhbi5saXR0bGUpIFNXQVA0V09SRCh0bXApOwotCWtleS0+ZGVjKGtleS0+cmRfa2V5LCB0bXApOwotCWlmIChjYW1lbGxpYV9lbmRpYW4ubGl0dGxlKSBTV0FQNFdPUkQodG1wKTsKLQltZW1jcHkob3V0LCB0bXAsIENBTUVMTElBX0JMT0NLX1NJWkUpOwotCX0KLQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2NhbWVsbGlhL2NtbGxfb2ZiLmMgYi9jcnlwdG8vY2FtZWxsaWEvY21sbF9vZmIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDg5Y2Y5Zi4uMDAwMDAwMAotLS0gYS9jcnlwdG8vY2FtZWxsaWEvY21sbF9vZmIuYworKysgL2Rldi9udWxsCkBAIC0xLDE0MSArMCwwIEBACi0vKiBjcnlwdG8vY2FtZWxsaWEvY2FtZWxsaWFfb2ZiLmMgLSotIG1vZGU6QzsgYy1maWxlLXN0eWxlOiAiZWF5IiAtKi0gKi8KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0gKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0gKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0gKgotICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0gKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotICoKLSAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotICoKLSAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSAqICAgIGFja25vd2xlZGdtZW50OgotICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0gKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKgotICovCi0vKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCi0gKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCi0gKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCi0gKiAKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcwotICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAotICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCi0gKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCi0gKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSAqIAotICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KLSAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KLSAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KLSAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCi0gKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKLSAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKLSAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCi0gKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKLSAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgotICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCi0gKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgotICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICogCi0gKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgotICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCi0gKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCi0gKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQotICovCi0KLSNpZm5kZWYgQ0FNRUxMSUFfREVCVUcKLSMgaWZuZGVmIE5ERUJVRwotIyAgZGVmaW5lIE5ERUJVRwotIyBlbmRpZgotI2VuZGlmCi0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jaW5jbHVkZSA8b3BlbnNzbC9jYW1lbGxpYS5oPgotI2luY2x1ZGUgImNtbGxfbG9jbC5oIgotCi0vKiBUaGUgaW5wdXQgYW5kIG91dHB1dCBlbmNyeXB0ZWQgYXMgdGhvdWdoIDEyOGJpdCBvZmIgbW9kZSBpcyBiZWluZwotICogdXNlZC4gIFRoZSBleHRyYSBzdGF0ZSBpbmZvcm1hdGlvbiB0byByZWNvcmQgaG93IG11Y2ggb2YgdGhlCi0gKiAxMjhiaXQgYmxvY2sgd2UgaGF2ZSB1c2VkIGlzIGNvbnRhaW5lZCBpbiAqbnVtOwotICovCi12b2lkIENhbWVsbGlhX29mYjEyOF9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCi0JY29uc3QgdW5zaWduZWQgbG9uZyBsZW5ndGgsIGNvbnN0IENBTUVMTElBX0tFWSAqa2V5LAotCXVuc2lnbmVkIGNoYXIgKml2ZWMsIGludCAqbnVtKSB7Ci0KLQl1bnNpZ25lZCBpbnQgbjsKLQl1bnNpZ25lZCBsb25nIGw9bGVuZ3RoOwotCi0JYXNzZXJ0KGluICYmIG91dCAmJiBrZXkgJiYgaXZlYyAmJiBudW0pOwotCi0JbiA9ICpudW07Ci0KLQl3aGlsZSAobC0tKSB7Ci0JCWlmIChuID09IDApIHsKLQkJCUNhbWVsbGlhX2VuY3J5cHQoaXZlYywgaXZlYywga2V5KTsKLQkJfQotCQkqKG91dCsrKSA9ICooaW4rKykgXiBpdmVjW25dOwotCQluID0gKG4rMSkgJSBDQU1FTExJQV9CTE9DS19TSVpFOwotCX0KLQotCSpudW09bjsKLX0KZGlmZiAtLWdpdCBhL2NyeXB0by9jb21wL01ha2VmaWxlIGIvY3J5cHRvL2NvbXAvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkMzY0YjguLjAwMDAwMDAKLS0tIGEvY3J5cHRvL2NvbXAvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwxMDggKzAsMCBAQAotIwotIyBPcGVuU1NML2NyeXB0by9jb21wL01ha2VmaWxlCi0jCi0KLURJUj0JY29tcAotVE9QPQkuLi8uLgotQ0M9CWNjCi1JTkNMVURFUz0gLUkuLiAtSSQoVE9QKSAtSS4uLy4uL2luY2x1ZGUKLUNGTEFHPS1nCi1NQUtFRklMRT0JTWFrZWZpbGUKLUFSPQkJYXIgcgotCi1DRkxBR1M9ICQoSU5DTFVERVMpICQoQ0ZMQUcpCi0KLUdFTkVSQUw9TWFrZWZpbGUKLVRFU1Q9Ci1BUFBTPQotCi1MSUI9JChUT1ApL2xpYmNyeXB0by5hCi1MSUJTUkM9IGNvbXBfbGliLmMgY29tcF9lcnIuYyBcCi0JY19ybGUuYyBjX3psaWIuYwotCi1MSUJPQko9CWNvbXBfbGliLm8gY29tcF9lcnIubyBcCi0JY19ybGUubyBjX3psaWIubwotCi1TUkM9ICQoTElCU1JDKQotCi1FWEhFQURFUj0gY29tcC5oCi1IRUFERVI9CSQoRVhIRUFERVIpCi0KLUFMTD0gICAgJChHRU5FUkFMKSAkKFNSQykgJChIRUFERVIpCi0KLXRvcDoKLQkoY2QgLi4vLi47ICQoTUFLRSkgRElSUz1jcnlwdG8gU0RJUlM9JChESVIpIHN1Yl9hbGwpCi0KLWFsbDoJbGliCi0KLWxpYjoJJChMSUJPQkopCi0JJChBUlgpICQoTElCKSAkKExJQk9CSikKLQkkKFJBTkxJQikgJChMSUIpIHx8IGVjaG8gTmV2ZXIgbWluZC4KLQlAdG91Y2ggbGliCi0KLWZpbGVzOgotCSQoUEVSTCkgJChUT1ApL3V0aWwvZmlsZXMucGwgTWFrZWZpbGUgPj4gJChUT1ApL01JTkZPCi0KLWxpbmtzOgotCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9pbmNsdWRlL29wZW5zc2wgJChFWEhFQURFUikKLQlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vdGVzdCAkKFRFU1QpCi0JQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL2FwcHMgJChBUFBTKQotCi1pbnN0YWxsOgotCUBbIC1uICIkKElOU1RBTExUT1ApIiBdICMgc2hvdWxkIGJlIHNldCBieSB0b3AgTWFrZWZpbGUuLi4KLQlAaGVhZGVybGlzdD0iJChFWEhFQURFUikiOyBmb3IgaSBpbiAkJGhlYWRlcmxpc3QgOyBcCi0JZG8gIFwKLQkoY3AgJCRpICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpOyBcCi0JY2htb2QgNjQ0ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpICk7IFwKLQlkb25lOwotCi10YWdzOgotCWN0YWdzICQoU1JDKQotCi10ZXN0czoKLQotbGludDoKLQlsaW50IC1ETElOVCAkKElOQ0xVREVTKSAkKFNSQyk+Zmx1ZmYKLQotZGVwZW5kOgotCUBbIC1uICIkKE1BS0VERVBFTkQpIiBdICMgc2hvdWxkIGJlIHNldCBieSB1cHBlciBNYWtlZmlsZS4uLgotCSQoTUFLRURFUEVORCkgLS0gJChDRkxBRykgJChJTkNMVURFUykgJChERVBGTEFHKSAtLSAkKExJQlNSQykKLQotZGNsZWFuOgotCSQoUEVSTCkgLXBlICdpZiAoL14jIERPIE5PVCBERUxFVEUgVEhJUyBMSU5FLykge3ByaW50OyBleGl0KDApO30nICQoTUFLRUZJTEUpID5NYWtlZmlsZS5uZXcKLQltdiAtZiBNYWtlZmlsZS5uZXcgJChNQUtFRklMRSkKLQotY2xlYW46Ci0Jcm0gLWYgKi5vICoub2JqIGxpYiB0YWdzIGNvcmUgLnB1cmUgLm5mcyogKi5vbGQgKi5iYWsgZmx1ZmYKLQotIyBETyBOT1QgREVMRVRFIFRISVMgTElORSAtLSBtYWtlIGRlcGVuZCBkZXBlbmRzIG9uIGl0LgotCi1jX3JsZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotY19ybGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWNfcmxlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLWNfcmxlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWNfcmxlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1jX3JsZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWNfcmxlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGNfcmxlLmMKLWNfemxpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotY196bGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jb21wLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1jX3psaWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1jX3psaWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotY196bGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWNfemxpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotY196bGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotY196bGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGNfemxpYi5jCi1jb21wX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaAotY29tcF9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1jb21wX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLWNvbXBfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1jb21wX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotY29tcF9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1jb21wX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBjb21wX2Vyci5jCi1jb21wX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotY29tcF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWNvbXBfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLWNvbXBfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWNvbXBfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1jb21wX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWNvbXBfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGNvbXBfbGliLmMKZGlmZiAtLWdpdCBhL2NyeXB0by9jb21wL2NfemxpYi5jIGIvY3J5cHRvL2NvbXAvY196bGliLmMKaW5kZXggOGRmNzc5Mi4uOGFkZjM1ZiAxMDA2NDQKLS0tIGEvY3J5cHRvL2NvbXAvY196bGliLmMKKysrIGIvY3J5cHRvL2NvbXAvY196bGliLmMKQEAgLTc4MSw2ICs3ODEsNyBAQAogCWRlZmF1bHQ6CiAJCXJldCA9IEJJT19jdHJsKGItPm5leHRfYmlvLCBjbWQsIG51bSwgcHRyKTsKIAkJYnJlYWs7CisKIAkJfQogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2NyeXB0by9jb21wL2NvbXBfZXJyLmMgYi9jcnlwdG8vY29tcC9jb21wX2Vyci5jCmluZGV4IDE4N2Q2OGIuLjY2MWM5NGMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9jb21wL2NvbXBfZXJyLmMKKysrIGIvY3J5cHRvL2NvbXAvY29tcF9lcnIuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIGNyeXB0by9jb21wL2NvbXBfZXJyLmMgKi8KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwOCBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCmRpZmYgLS1naXQgYS9jcnlwdG8vY29uZi9NYWtlZmlsZSBiL2NyeXB0by9jb25mL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjY2QwNzIxLi4wMDAwMDAwCi0tLSBhL2NyeXB0by9jb25mL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMTUzICswLDAgQEAKLSMKLSMgT3BlblNTTC9jcnlwdG8vY29uZi9NYWtlZmlsZQotIwotCi1ESVI9CWNvbmYKLVRPUD0JLi4vLi4KLUNDPQljYwotSU5DTFVERVM9IC1JLi4gLUkkKFRPUCkgLUkuLi8uLi9pbmNsdWRlCi1DRkxBRz0tZwotTUFLRUZJTEU9CU1ha2VmaWxlCi1BUj0JCWFyIHIKLQotQ0ZMQUdTPSAkKElOQ0xVREVTKSAkKENGTEFHKQotCi1HRU5FUkFMPU1ha2VmaWxlCi1URVNUPQotQVBQUz0KLQotTElCPSQoVE9QKS9saWJjcnlwdG8uYQotTElCU1JDPSBjb25mX2Vyci5jIGNvbmZfbGliLmMgY29uZl9hcGkuYyBjb25mX2RlZi5jIGNvbmZfbW9kLmMgXAotCSBjb25mX21hbGwuYyBjb25mX3NhcC5jCi0KLUxJQk9CSj0JY29uZl9lcnIubyBjb25mX2xpYi5vIGNvbmZfYXBpLm8gY29uZl9kZWYubyBjb25mX21vZC5vIFwKLQljb25mX21hbGwubyBjb25mX3NhcC5vCi0KLVNSQz0gJChMSUJTUkMpCi0KLUVYSEVBREVSPSBjb25mLmggY29uZl9hcGkuaAotSEVBREVSPQljb25mX2RlZi5oICQoRVhIRUFERVIpCi0KLUFMTD0gICAgJChHRU5FUkFMKSAkKFNSQykgJChIRUFERVIpCi0KLXRvcDoKLQkoY2QgLi4vLi47ICQoTUFLRSkgRElSUz1jcnlwdG8gU0RJUlM9JChESVIpIHN1Yl9hbGwpCi0KLWFsbDoJbGliCi0KLWxpYjoJJChMSUJPQkopCi0JJChBUlgpICQoTElCKSAkKExJQk9CSikKLQkkKFJBTkxJQikgJChMSUIpIHx8IGVjaG8gTmV2ZXIgbWluZC4KLQlAdG91Y2ggbGliCi0KLWZpbGVzOgotCSQoUEVSTCkgJChUT1ApL3V0aWwvZmlsZXMucGwgTWFrZWZpbGUgPj4gJChUT1ApL01JTkZPCi0KLWxpbmtzOgotCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9pbmNsdWRlL29wZW5zc2wgJChFWEhFQURFUikKLQlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vdGVzdCAkKFRFU1QpCi0JQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL2FwcHMgJChBUFBTKQotCi1pbnN0YWxsOgotCUBbIC1uICIkKElOU1RBTExUT1ApIiBdICMgc2hvdWxkIGJlIHNldCBieSB0b3AgTWFrZWZpbGUuLi4KLQlAaGVhZGVybGlzdD0iJChFWEhFQURFUikiOyBmb3IgaSBpbiAkJGhlYWRlcmxpc3QgOyBcCi0JZG8gIFwKLQkoY3AgJCRpICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpOyBcCi0JY2htb2QgNjQ0ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpICk7IFwKLQlkb25lOwotCi10YWdzOgotCWN0YWdzICQoU1JDKQotCi10ZXN0czoKLQotbGludDoKLQlsaW50IC1ETElOVCAkKElOQ0xVREVTKSAkKFNSQyk+Zmx1ZmYKLQotZGVwZW5kOgotCUBbIC1uICIkKE1BS0VERVBFTkQpIiBdICMgc2hvdWxkIGJlIHNldCBieSB1cHBlciBNYWtlZmlsZS4uLgotCSQoTUFLRURFUEVORCkgLS0gJChDRkxBRykgJChJTkNMVURFUykgJChERVBGTEFHKSAtLSAkKExJQlNSQykKLQotZGNsZWFuOgotCSQoUEVSTCkgLXBlICdpZiAoL14jIERPIE5PVCBERUxFVEUgVEhJUyBMSU5FLykge3ByaW50OyBleGl0KDApO30nICQoTUFLRUZJTEUpID5NYWtlZmlsZS5uZXcKLQltdiAtZiBNYWtlZmlsZS5uZXcgJChNQUtFRklMRSkKLQotY2xlYW46Ci0Jcm0gLWYgKi5vICoub2JqIGxpYiB0YWdzIGNvcmUgLnB1cmUgLm5mcyogKi5vbGQgKi5iYWsgZmx1ZmYKLQotIyBETyBOT1QgREVMRVRFIFRISVMgTElORSAtLSBtYWtlIGRlcGVuZCBkZXBlbmRzIG9uIGl0LgotCi1jb25mX2FwaS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1jb25mX2FwaS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jb25mX2FwaS5oCi1jb25mX2FwaS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLWNvbmZfYXBpLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1jb25mX2FwaS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotY29uZl9hcGkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1jb25mX2FwaS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBjb25mX2FwaS5jCi1jb25mX2RlZi5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1jb25mX2RlZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NvbmYuaAotY29uZl9kZWYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NvbmZfYXBpLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1jb25mX2RlZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWNvbmZfZGVmLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1jb25mX2RlZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotY29uZl9kZWYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1jb25mX2RlZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGNvbmZfZGVmLmMKLWNvbmZfZGVmLm86IGNvbmZfZGVmLmgKLWNvbmZfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY29uZi5oCi1jb25mX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLWNvbmZfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotY29uZl9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWNvbmZfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1jb25mX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWNvbmZfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGNvbmZfZXJyLmMKLWNvbmZfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY29uZi5oCi1jb25mX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY29uZl9hcGkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWNvbmZfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotY29uZl9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWNvbmZfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1jb25mX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWNvbmZfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGNvbmZfbGliLmMKLWNvbmZfbWFsbC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotY29uZl9tYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLWNvbmZfbWFsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotY29uZl9tYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kc28uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotY29uZl9tYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKLWNvbmZfbWFsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZW5naW5lLmgKLWNvbmZfbWFsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1jb25mX21hbGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotY29uZl9tYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotY29uZl9tYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1jb25mX21hbGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWNvbmZfbWFsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLWNvbmZfbWFsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWNvbmZfbWFsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi1jb25mX21hbGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vY3J5cHRsaWIuaCBjb25mX21hbGwuYwotY29uZl9tb2QubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLWNvbmZfbW9kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLWNvbmZfbW9kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1jb25mX21vZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZHNvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLWNvbmZfbW9kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKLWNvbmZfbW9kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotY29uZl9tb2QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLWNvbmZfbW9kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLWNvbmZfbW9kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWNvbmZfbW9kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1jb25mX21vZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLWNvbmZfbW9kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotY29uZl9tb2QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotY29uZl9tb2QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vY3J5cHRsaWIuaCBjb25mX21vZC5jCi1jb25mX3NhcC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotY29uZl9zYXAubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotY29uZl9zYXAubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWNvbmZfc2FwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kc28uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotY29uZl9zYXAubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotY29uZl9zYXAubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oCi1jb25mX3NhcC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1jb25mX3NhcC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1jb25mX3NhcC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLWNvbmZfc2FwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1jb25mX3NhcC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotY29uZl9zYXAubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1jb25mX3NhcC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWNvbmZfc2FwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLWNvbmZfc2FwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2NyeXB0bGliLmggY29uZl9zYXAuYwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2NvbmYvUkVBRE1FIGIvY3J5cHRvL2NvbmYvUkVBRE1FCmluZGV4IGNhNThkMDIuLjk2ZTUzYjMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9jb25mL1JFQURNRQorKysgYi9jcnlwdG8vY29uZi9SRUFETUUKQEAgLTEsOCArMSwzIEBACi1XQVJOSU5HIFdBUk5JTkcgV0FSTklORyEhIQotCi1UaGlzIHN0dWZmIGlzIGV4cGVyaW1lbnRhbCwgbWF5IGNoYW5nZSByYWRpY2FsbHkgb3IgYmUgZGVsZXRlZCBhbHRvZ2V0aGVyCi1iZWZvcmUgT3BlblNTTCAwLjkuNyByZWxlYXNlLiBZb3UgaGF2ZSBiZWVuIHdhcm5lZCEKLQogQ29uZmlndXJhdGlvbiBtb2R1bGVzLiBUaGVzZSBhcmUgYSBzZXQgb2YgbW9kdWxlcyB3aGljaCBjYW4gcGVyZm9ybQogdmFyaW91cyBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucy4KIApAQCAtMTMsNyArOCw3IEBACiAKIC0tLS0tCiAjZGVmYXVsdCBzZWN0aW9uCi1vcGVuc3NsX2luaXQ9aW5pdF9zZWN0aW9uCitvcGVuc3NsX2NvbmY9aW5pdF9zZWN0aW9uCiAKIFtpbml0X3NlY3Rpb25dCiAKQEAgLTMwLDI5ICsyNSwyNyBAQAogb3RoZXJfc3R1ZmY9b3RoZXJfdmFsdWUKIC0tLS0KIAotV2hlbiB0aGlzIGZpbGUgaXMgbG9hZGVkIGEgY29uZmlndXJhdGlvbiBtb2R1bGUgd2l0aCB0aGUgc3BlY2lmaWVkCi1zdHJpbmcgKG1vZHVsZSogaW4gdGhlIGFib3ZlIGV4YW1wbGUpIGlzIGxvb2tlZCB1cCBhbmQgaXRzIGluaXQKLWZ1bmN0aW9uIGNhbGxlZCBhczoKK1doZW4gdGhpcyBmaWxlIGlzIGxvYWRlZCBhIGNvbmZpZ3VyYXRpb24gbW9kdWxlIHdpdGggdGhlIHNwZWNpZmllZCBzdHJpbmcKKyhtb2R1bGUqIGluIHRoZSBhYm92ZSBleGFtcGxlKSBpcyBsb29rZWQgdXAgYW5kIGl0cyBpbml0IGZ1bmN0aW9uIGNhbGxlZCBhczoKIAogaW50IGNvbmZfaW5pdF9mdW5jKENPTkZfSU1PRFVMRSAqbWQsIENPTkYgKmNuZik7CiAKLVRoZSBmdW5jdGlvbiBjYW4gdGhlbiB0YWtlIHdoYXRldmVyIGFjdGlvbiBpcyBhcHByb3ByaWF0ZSwgZm9yIGV4YW1wbGUKLWZ1cnRoZXIgbG9va3VwcyBiYXNlZCBvbiB0aGUgdmFsdWUuIE11bHRpcGxlIGluc3RhbmNlcyBvZiB0aGUgc2FtZSAKLWNvbmZpZyBtb2R1bGUgY2FuIGJlIGxvYWRlZC4KK1RoZSBmdW5jdGlvbiBjYW4gdGhlbiB0YWtlIHdoYXRldmVyIGFjdGlvbiBpcyBhcHByb3ByaWF0ZSwgZm9yIGV4YW1wbGUgZnVydGhlcgorbG9va3VwcyBiYXNlZCBvbiB0aGUgdmFsdWUuIE11bHRpcGxlIGluc3RhbmNlcyBvZiB0aGUgc2FtZSBjb25maWcgbW9kdWxlIGNhbiBiZQorbG9hZGVkLgogCi1XaGVuIHRoZSBhcHBsaWNhdGlvbiBjbG9zZXMgZG93biB0aGUgbW9kdWxlcyBhcmUgY2xlYW5lZCB1cCBieSBjYWxsaW5nCi1hbiBvcHRpb25hbCBmaW5pc2ggZnVuY3Rpb246CitXaGVuIHRoZSBhcHBsaWNhdGlvbiBjbG9zZXMgZG93biB0aGUgbW9kdWxlcyBhcmUgY2xlYW5lZCB1cCBieSBjYWxsaW5nIGFuCitvcHRpb25hbCBmaW5pc2ggZnVuY3Rpb246CiAKIHZvaWQgY29uZl9maW5pc2hfZnVuYyhDT05GX0lNT0RVTEUgKm1kKTsKIAogVGhlIGZpbmlzaCBmdW5jdGlvbnMgYXJlIGNhbGxlZCBpbiByZXZlcnNlIG9yZGVyOiB0aGF0IGlzIHRoZSBsYXN0IG1vZHVsZQogbG9hZGVkIGlzIHRoZSBmaXJzdCBvbmUgY2xlYW5lZCB1cC4KIAotSWYgbm8gbW9kdWxlIGV4aXN0cyB3aXRoIGEgZ2l2ZW4gbmFtZSB0aGVuIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBsb2FkCi1hIERTTyB3aXRoIHRoZSBzdXBwbGllZCBuYW1lLiBUaGlzIG1pZ2h0IG1lYW4gdGhhdCAibW9kdWxlMyIgYXR0ZW1wdHMKLXRvIGxvYWQgYSBEU08gY2FsbGVkIGxpYm1vZHVsZTMuc28gb3IgbW9kdWxlMy5kbGwgZm9yIGV4YW1wbGUuIEFuIGV4cGxpY2l0Ci1EU08gbmFtZSBjYW4gYmUgZ2l2ZW4gYnkgaW5jbHVkaW5nIGEgc2VwYXJhdGUgc2VjdGlvbiBhcyBpbiB0aGUgbW9kdWxlNCBleGFtcGxlCi1hYm92ZS4KK0lmIG5vIG1vZHVsZSBleGlzdHMgd2l0aCBhIGdpdmVuIG5hbWUgdGhlbiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gbG9hZCBhIERTTword2l0aCB0aGUgc3VwcGxpZWQgbmFtZS4gVGhpcyBtaWdodCBtZWFuIHRoYXQgIm1vZHVsZTMiIGF0dGVtcHRzIHRvIGxvYWQgYSBEU08KK2NhbGxlZCBsaWJtb2R1bGUzLnNvIG9yIG1vZHVsZTMuZGxsIGZvciBleGFtcGxlLiBBbiBleHBsaWNpdCBEU08gbmFtZSBjYW4gYmUKK2dpdmVuIGJ5IGluY2x1ZGluZyBhIHNlcGFyYXRlIHNlY3Rpb24gYXMgaW4gdGhlIG1vZHVsZTQgZXhhbXBsZSBhYm92ZS4KIAogVGhlIERTTyBpcyBleHBlY3RlZCB0byBhdCBsZWFzdCBjb250YWluIGFuIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uOgogCkBAIC02NCwxNSArNTcsMTcgQEAKIAogU3RhdGljIG1vZHVsZXMgY2FuIGFsc28gYmUgYWRkZWQgdXNpbmcsCiAKLWludCBDT05GX21vZHVsZV9hZGQoY2hhciAqbmFtZSwgZHNvX21vZF9pbml0X2Z1bmMgKmlmdW5jLCBkc29fbW9kX2ZpbmlzaF9mdW5jICpmZnVuYyk7CitpbnQgQ09ORl9tb2R1bGVfYWRkKGNoYXIgKm5hbWUsIGRzb19tb2RfaW5pdF9mdW5jICppZnVuYywgZHNvX21vZF9maW5pc2hfZnVuYworKmZmdW5jKTsKIAotd2hlcmUgIm5hbWUiIGlzIHRoZSBuYW1lIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgdGhpcyBmdW5jdGlvbiBjb3JyZXNwb25kcyB0by4KK3doZXJlICJuYW1lIiBpcyB0aGUgbmFtZSBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIHRoaXMgZnVuY3Rpb24gY29ycmVzcG9uZHMKK3RvLgogCi1BIHNldCBvZiBidWlsdGluIG1vZHVsZXMgKGN1cnJlbnRseSBvbmx5IGFuIEFTTjEgbm9uIGZ1bmN0aW9uYWwgdGVzdCBtb2R1bGUpIGNhbiBiZSAKLWFkZGVkIGJ5IGNhbGxpbmcgT1BFTlNTTF9sb2FkX2J1aWx0aW5fbW9kdWxlcygpLiAKK0Egc2V0IG9mIGJ1aWx0aW4gbW9kdWxlcyAoY3VycmVudGx5IG9ubHkgYW4gQVNOMSBub24gZnVuY3Rpb25hbCB0ZXN0IG1vZHVsZSkKK2NhbiBiZSBhZGRlZCBieSBjYWxsaW5nIE9QRU5TU0xfbG9hZF9idWlsdGluX21vZHVsZXMoKS4gCiAKLVRoZSBmdW5jdGlvbiBPUEVOU1NMX2NvbmZpZygpIGlzIGludGVuZGVkIGFzIGEgc2ltcGxlIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb24gdGhhdAotYW55IGFwcGxpY2F0aW9uIGNhbiBjYWxsIHRvIHBlcmZvcm0gdmFyaW91cyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGFza3MuIEl0IHVzZXMgdGhlCi1maWxlIG9wZW5zc2wuY25mIGluIHRoZSB1c3VhbCBsb2NhdGlvbnMuCitUaGUgZnVuY3Rpb24gT1BFTlNTTF9jb25maWcoKSBpcyBpbnRlbmRlZCBhcyBhIHNpbXBsZSBjb25maWd1cmF0aW9uIGZ1bmN0aW9uCit0aGF0IGFueSBhcHBsaWNhdGlvbiBjYW4gY2FsbCB0byBwZXJmb3JtIHZhcmlvdXMgZGVmYXVsdCBjb25maWd1cmF0aW9uIHRhc2tzLgorSXQgdXNlcyB0aGUgZmlsZSBvcGVuc3NsLmNuZiBpbiB0aGUgdXN1YWwgbG9jYXRpb25zLgogCiAKZGlmZiAtLWdpdCBhL2NyeXB0by9jb25mL2NvbmYuaCBiL2NyeXB0by9jb25mL2NvbmYuaAppbmRleCA4YWEwNmJjLi5jMjE5OTk3IDEwMDY0NAotLS0gYS9jcnlwdG8vY29uZi9jb25mLmgKKysrIGIvY3J5cHRvL2NvbmYvY29uZi5oCkBAIC03OSw4ICs3OSw3IEBACiAJfSBDT05GX1ZBTFVFOwogCiBERUNMQVJFX1NUQUNLX09GKENPTkZfVkFMVUUpCi1ERUNMQVJFX1NUQUNLX09GKENPTkZfTU9EVUxFKQotREVDTEFSRV9TVEFDS19PRihDT05GX0lNT0RVTEUpCitERUNMQVJFX0xIQVNIX09GKENPTkZfVkFMVUUpOwogCiBzdHJ1Y3QgY29uZl9zdDsKIHN0cnVjdCBjb25mX21ldGhvZF9zdDsKQEAgLTEwNSw2ICsxMDQsOSBAQAogdHlwZWRlZiBzdHJ1Y3QgY29uZl9pbW9kdWxlX3N0IENPTkZfSU1PRFVMRTsKIHR5cGVkZWYgc3RydWN0IGNvbmZfbW9kdWxlX3N0IENPTkZfTU9EVUxFOwogCitERUNMQVJFX1NUQUNLX09GKENPTkZfTU9EVUxFKQorREVDTEFSRV9TVEFDS19PRihDT05GX0lNT0RVTEUpCisKIC8qIERTTyBtb2R1bGUgZnVuY3Rpb24gdHlwZWRlZnMgKi8KIHR5cGVkZWYgaW50IGNvbmZfaW5pdF9mdW5jKENPTkZfSU1PRFVMRSAqbWQsIGNvbnN0IENPTkYgKmNuZik7CiB0eXBlZGVmIHZvaWQgY29uZl9maW5pc2hfZnVuYyhDT05GX0lNT0RVTEUgKm1kKTsKQEAgLTExNywxOCArMTE5LDIzIEBACiAjZGVmaW5lIENPTkZfTUZMQUdTX0RFRkFVTFRfU0VDVElPTgkweDIwCiAKIGludCBDT05GX3NldF9kZWZhdWx0X21ldGhvZChDT05GX01FVEhPRCAqbWV0aCk7Ci12b2lkIENPTkZfc2V0X25jb25mKENPTkYgKmNvbmYsTEhBU0ggKmhhc2gpOwotTEhBU0ggKkNPTkZfbG9hZChMSEFTSCAqY29uZixjb25zdCBjaGFyICpmaWxlLGxvbmcgKmVsaW5lKTsKK3ZvaWQgQ09ORl9zZXRfbmNvbmYoQ09ORiAqY29uZixMSEFTSF9PRihDT05GX1ZBTFVFKSAqaGFzaCk7CitMSEFTSF9PRihDT05GX1ZBTFVFKSAqQ09ORl9sb2FkKExIQVNIX09GKENPTkZfVkFMVUUpICpjb25mLGNvbnN0IGNoYXIgKmZpbGUsCisJCQkJbG9uZyAqZWxpbmUpOwogI2lmbmRlZiBPUEVOU1NMX05PX0ZQX0FQSQotTEhBU0ggKkNPTkZfbG9hZF9mcChMSEFTSCAqY29uZiwgRklMRSAqZnAsbG9uZyAqZWxpbmUpOworTEhBU0hfT0YoQ09ORl9WQUxVRSkgKkNPTkZfbG9hZF9mcChMSEFTSF9PRihDT05GX1ZBTFVFKSAqY29uZiwgRklMRSAqZnAsCisJCQkJICAgbG9uZyAqZWxpbmUpOwogI2VuZGlmCi1MSEFTSCAqQ09ORl9sb2FkX2JpbyhMSEFTSCAqY29uZiwgQklPICpicCxsb25nICplbGluZSk7Ci1TVEFDS19PRihDT05GX1ZBTFVFKSAqQ09ORl9nZXRfc2VjdGlvbihMSEFTSCAqY29uZixjb25zdCBjaGFyICpzZWN0aW9uKTsKLWNoYXIgKkNPTkZfZ2V0X3N0cmluZyhMSEFTSCAqY29uZixjb25zdCBjaGFyICpncm91cCxjb25zdCBjaGFyICpuYW1lKTsKLWxvbmcgQ09ORl9nZXRfbnVtYmVyKExIQVNIICpjb25mLGNvbnN0IGNoYXIgKmdyb3VwLGNvbnN0IGNoYXIgKm5hbWUpOwotdm9pZCBDT05GX2ZyZWUoTEhBU0ggKmNvbmYpOwotaW50IENPTkZfZHVtcF9mcChMSEFTSCAqY29uZiwgRklMRSAqb3V0KTsKLWludCBDT05GX2R1bXBfYmlvKExIQVNIICpjb25mLCBCSU8gKm91dCk7CitMSEFTSF9PRihDT05GX1ZBTFVFKSAqQ09ORl9sb2FkX2JpbyhMSEFTSF9PRihDT05GX1ZBTFVFKSAqY29uZiwgQklPICpicCxsb25nICplbGluZSk7CitTVEFDS19PRihDT05GX1ZBTFVFKSAqQ09ORl9nZXRfc2VjdGlvbihMSEFTSF9PRihDT05GX1ZBTFVFKSAqY29uZiwKKwkJCQkgICAgICAgY29uc3QgY2hhciAqc2VjdGlvbik7CitjaGFyICpDT05GX2dldF9zdHJpbmcoTEhBU0hfT0YoQ09ORl9WQUxVRSkgKmNvbmYsY29uc3QgY2hhciAqZ3JvdXAsCisJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUpOworbG9uZyBDT05GX2dldF9udW1iZXIoTEhBU0hfT0YoQ09ORl9WQUxVRSkgKmNvbmYsY29uc3QgY2hhciAqZ3JvdXAsCisJCSAgICAgY29uc3QgY2hhciAqbmFtZSk7Cit2b2lkIENPTkZfZnJlZShMSEFTSF9PRihDT05GX1ZBTFVFKSAqY29uZik7CitpbnQgQ09ORl9kdW1wX2ZwKExIQVNIX09GKENPTkZfVkFMVUUpICpjb25mLCBGSUxFICpvdXQpOworaW50IENPTkZfZHVtcF9iaW8oTEhBU0hfT0YoQ09ORl9WQUxVRSkgKmNvbmYsIEJJTyAqb3V0KTsKIAogdm9pZCBPUEVOU1NMX2NvbmZpZyhjb25zdCBjaGFyICpjb25maWdfbmFtZSk7CiB2b2lkIE9QRU5TU0xfbm9fY29uZmlnKHZvaWQpOwpAQCAtMTQwLDcgKzE0Nyw3IEBACiAJewogCUNPTkZfTUVUSE9EICptZXRoOwogCXZvaWQgKm1ldGhfZGF0YTsKLQlMSEFTSCAqZGF0YTsKKwlMSEFTSF9PRihDT05GX1ZBTFVFKSAqZGF0YTsKIAl9OwogCiBDT05GICpOQ09ORl9uZXcoQ09ORl9NRVRIT0QgKm1ldGgpOwpAQCAtMjE0LDYgKzIyMSw3IEBACiAjZGVmaW5lIENPTkZfRl9DT05GX0xPQURfQklPCQkJCSAxMDIKICNkZWZpbmUgQ09ORl9GX0NPTkZfTE9BRF9GUAkJCQkgMTAzCiAjZGVmaW5lIENPTkZfRl9DT05GX01PRFVMRVNfTE9BRAkJCSAxMTYKKyNkZWZpbmUgQ09ORl9GX0NPTkZfUEFSU0VfTElTVAkJCQkgMTE5CiAjZGVmaW5lIENPTkZfRl9ERUZfTE9BRAkJCQkJIDEyMAogI2RlZmluZSBDT05GX0ZfREVGX0xPQURfQklPCQkJCSAxMjEKICNkZWZpbmUgQ09ORl9GX01PRFVMRV9JTklUCQkJCSAxMTUKQEAgLTIzMyw2ICsyNDEsNyBAQAogCiAvKiBSZWFzb24gY29kZXMuICovCiAjZGVmaW5lIENPTkZfUl9FUlJPUl9MT0FESU5HX0RTTwkJCSAxMTAKKyNkZWZpbmUgQ09ORl9SX0xJU1RfQ0FOTk9UX0JFX05VTEwJCQkgMTE1CiAjZGVmaW5lIENPTkZfUl9NSVNTSU5HX0NMT1NFX1NRVUFSRV9CUkFDS0VUCQkgMTAwCiAjZGVmaW5lIENPTkZfUl9NSVNTSU5HX0VRVUFMX1NJR04JCQkgMTAxCiAjZGVmaW5lIENPTkZfUl9NSVNTSU5HX0ZJTklTSF9GVU5DVElPTgkJCSAxMTEKZGlmZiAtLWdpdCBhL2NyeXB0by9jb25mL2NvbmZfYXBpLmMgYi9jcnlwdG8vY29uZi9jb25mX2FwaS5jCmluZGV4IDkwOWQ3MmIuLjIyNjE3ZTUgMTAwNjQ0Ci0tLSBhL2NyeXB0by9jb25mL2NvbmZfYXBpLmMKKysrIGIvY3J5cHRvL2NvbmYvY29uZl9hcGkuYwpAQCAtNjksMTYgKzY5LDEyIEBACiAjaW5jbHVkZSA8b3BlbnNzbC9jb25mX2FwaS5oPgogI2luY2x1ZGUgImVfb3MuaCIKIAotc3RhdGljIHZvaWQgdmFsdWVfZnJlZV9oYXNoKENPTkZfVkFMVUUgKmEsIExIQVNIICpjb25mKTsKLXN0YXRpYyB2b2lkIHZhbHVlX2ZyZWVfc3RhY2soQ09ORl9WQUxVRSAqYSxMSEFTSCAqY29uZik7Ci1zdGF0aWMgSU1QTEVNRU5UX0xIQVNIX0RPQUxMX0FSR19GTih2YWx1ZV9mcmVlX2hhc2gsIENPTkZfVkFMVUUgKiwgTEhBU0ggKikKLXN0YXRpYyBJTVBMRU1FTlRfTEhBU0hfRE9BTExfQVJHX0ZOKHZhbHVlX2ZyZWVfc3RhY2ssIENPTkZfVkFMVUUgKiwgTEhBU0ggKikKLS8qIFdlIGRvbid0IHVzZSBmdW5jdGlvbiBwb2ludGVyIGNhc3Rpbmcgb3Igd3JhcHBlciBmdW5jdGlvbnMgLSBidXQgY2FzdCBlYWNoCi0gKiBjYWxsYmFjayBwYXJhbWV0ZXIgaW5zaWRlIHRoZSBjYWxsYmFjayBmdW5jdGlvbnMuICovCi0vKiBzdGF0aWMgdW5zaWduZWQgbG9uZyBoYXNoKENPTkZfVkFMVUUgKnYpOyAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgaGFzaChjb25zdCB2b2lkICp2X3ZvaWQpOwotLyogc3RhdGljIGludCBjbXBfY29uZihDT05GX1ZBTFVFICphLENPTkZfVkFMVUUgKmIpOyAqLwotc3RhdGljIGludCBjbXBfY29uZihjb25zdCB2b2lkICphX3ZvaWQsY29uc3Qgdm9pZCAqYl92b2lkKTsKK3N0YXRpYyB2b2lkIHZhbHVlX2ZyZWVfaGFzaF9kb2FsbF9hcmcoQ09ORl9WQUxVRSAqYSwKKwkJCQkgICAgICBMSEFTSF9PRihDT05GX1ZBTFVFKSAqY29uZik7CitzdGF0aWMgdm9pZCB2YWx1ZV9mcmVlX3N0YWNrX2RvYWxsKENPTkZfVkFMVUUgKmEpOworc3RhdGljIElNUExFTUVOVF9MSEFTSF9ET0FMTF9BUkdfRk4odmFsdWVfZnJlZV9oYXNoLCBDT05GX1ZBTFVFLAorCQkJCSAgICBMSEFTSF9PRihDT05GX1ZBTFVFKSkKK3N0YXRpYyBJTVBMRU1FTlRfTEhBU0hfRE9BTExfRk4odmFsdWVfZnJlZV9zdGFjaywgQ09ORl9WQUxVRSkKIAogLyogVXAgdW50aWwgT3BlblNTTCAwLjkuNWEsIHRoaXMgd2FzIGdldF9zZWN0aW9uICovCiBDT05GX1ZBTFVFICpfQ09ORl9nZXRfc2VjdGlvbihjb25zdCBDT05GICpjb25mLCBjb25zdCBjaGFyICpzZWN0aW9uKQpAQCAtODgsNyArODQsNyBAQAogCWlmICgoY29uZiA9PSBOVUxMKSB8fCAoc2VjdGlvbiA9PSBOVUxMKSkgcmV0dXJuKE5VTEwpOwogCXZ2Lm5hbWU9TlVMTDsKIAl2di5zZWN0aW9uPShjaGFyICopc2VjdGlvbjsKLQl2PShDT05GX1ZBTFVFICopbGhfcmV0cmlldmUoY29uZi0+ZGF0YSwmdnYpOworCXY9bGhfQ09ORl9WQUxVRV9yZXRyaWV2ZShjb25mLT5kYXRhLCZ2dik7CiAJcmV0dXJuKHYpOwogCX0KIApAQCAtMTE4LDcgKzExNCw3IEBACiAJCXJldHVybiAwOwogCQl9CiAKLQl2ID0gKENPTkZfVkFMVUUgKilsaF9pbnNlcnQoY29uZi0+ZGF0YSwgdmFsdWUpOworCXYgPSBsaF9DT05GX1ZBTFVFX2luc2VydChjb25mLT5kYXRhLCB2YWx1ZSk7CiAJaWYgKHYgIT0gTlVMTCkKIAkJewogCQkodm9pZClza19DT05GX1ZBTFVFX2RlbGV0ZV9wdHIodHMsdik7CkBAIC0xNDEsMjQgKzEzNywyNCBAQAogCQkJewogCQkJdnYubmFtZT0oY2hhciAqKW5hbWU7CiAJCQl2di5zZWN0aW9uPShjaGFyICopc2VjdGlvbjsKLQkJCXY9KENPTkZfVkFMVUUgKilsaF9yZXRyaWV2ZShjb25mLT5kYXRhLCZ2dik7CisJCQl2PWxoX0NPTkZfVkFMVUVfcmV0cmlldmUoY29uZi0+ZGF0YSwmdnYpOwogCQkJaWYgKHYgIT0gTlVMTCkgcmV0dXJuKHYtPnZhbHVlKTsKIAkJCWlmIChzdHJjbXAoc2VjdGlvbiwiRU5WIikgPT0gMCkKIAkJCQl7Ci0JCQkJcD1HZXRlbnYobmFtZSk7CisJCQkJcD1nZXRlbnYobmFtZSk7CiAJCQkJaWYgKHAgIT0gTlVMTCkgcmV0dXJuKHApOwogCQkJCX0KIAkJCX0KIAkJdnYuc2VjdGlvbj0iZGVmYXVsdCI7CiAJCXZ2Lm5hbWU9KGNoYXIgKiluYW1lOwotCQl2PShDT05GX1ZBTFVFICopbGhfcmV0cmlldmUoY29uZi0+ZGF0YSwmdnYpOworCQl2PWxoX0NPTkZfVkFMVUVfcmV0cmlldmUoY29uZi0+ZGF0YSwmdnYpOwogCQlpZiAodiAhPSBOVUxMKQogCQkJcmV0dXJuKHYtPnZhbHVlKTsKIAkJZWxzZQogCQkJcmV0dXJuKE5VTEwpOwogCQl9CiAJZWxzZQotCQlyZXR1cm4oR2V0ZW52KG5hbWUpKTsKKwkJcmV0dXJuKGdldGVudihuYW1lKSk7CiAJfQogCiAjaWYgMCAvKiBUaGVyZSdzIG5vIHdheSB0byBwcm92aWRlIGVycm9yIGNoZWNraW5nIHdpdGggdGhpcyBmdW5jdGlvbiwgc28KQEAgLTE4Miw3OSArMTc4LDE1IEBACiAJfQogI2VuZGlmCiAKLWludCBfQ09ORl9uZXdfZGF0YShDT05GICpjb25mKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgY29uZl92YWx1ZV9oYXNoKGNvbnN0IENPTkZfVkFMVUUgKnYpCiAJewotCWlmIChjb25mID09IE5VTEwpCi0JCXsKLQkJcmV0dXJuIDA7Ci0JCX0KLQlpZiAoY29uZi0+ZGF0YSA9PSBOVUxMKQotCQlpZiAoKGNvbmYtPmRhdGEgPSBsaF9uZXcoaGFzaCwgY21wX2NvbmYpKSA9PSBOVUxMKQotCQkJewotCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JcmV0dXJuIDE7CisJcmV0dXJuIChsaF9zdHJoYXNoKHYtPnNlY3Rpb24pPDwyKV5saF9zdHJoYXNoKHYtPm5hbWUpOwogCX0KK3N0YXRpYyBJTVBMRU1FTlRfTEhBU0hfSEFTSF9GTihjb25mX3ZhbHVlLCBDT05GX1ZBTFVFKQogCi12b2lkIF9DT05GX2ZyZWVfZGF0YShDT05GICpjb25mKQotCXsKLQlpZiAoY29uZiA9PSBOVUxMIHx8IGNvbmYtPmRhdGEgPT0gTlVMTCkgcmV0dXJuOwotCi0JY29uZi0+ZGF0YS0+ZG93bl9sb2FkPTA7IC8qIGV2aWwgdGhpbmcgdG8gbWFrZSBzdXJlIHRoZSAnT1BFTlNTTF9mcmVlKCknCi0JCQkJICAqIHdvcmtzIGFzIGV4cGVjdGVkICovCi0JbGhfZG9hbGxfYXJnKGNvbmYtPmRhdGEsIExIQVNIX0RPQUxMX0FSR19GTih2YWx1ZV9mcmVlX2hhc2gpLAotCQkJY29uZi0+ZGF0YSk7Ci0KLQkvKiBXZSBub3cgaGF2ZSBvbmx5ICdzZWN0aW9uJyBlbnRyaWVzIGluIHRoZSBoYXNoIHRhYmxlLgotCSAqIER1ZSB0byBwcm9ibGVtcyB3aXRoICovCi0KLQlsaF9kb2FsbF9hcmcoY29uZi0+ZGF0YSwgTEhBU0hfRE9BTExfQVJHX0ZOKHZhbHVlX2ZyZWVfc3RhY2spLAotCQkJY29uZi0+ZGF0YSk7Ci0JbGhfZnJlZShjb25mLT5kYXRhKTsKLQl9Ci0KLXN0YXRpYyB2b2lkIHZhbHVlX2ZyZWVfaGFzaChDT05GX1ZBTFVFICphLCBMSEFTSCAqY29uZikKLQl7Ci0JaWYgKGEtPm5hbWUgIT0gTlVMTCkKLQkJewotCQlhPShDT05GX1ZBTFVFICopbGhfZGVsZXRlKGNvbmYsYSk7Ci0JCX0KLQl9Ci0KLXN0YXRpYyB2b2lkIHZhbHVlX2ZyZWVfc3RhY2soQ09ORl9WQUxVRSAqYSwgTEhBU0ggKmNvbmYpCi0JewotCUNPTkZfVkFMVUUgKnZ2OwotCVNUQUNLICpzazsKLQlpbnQgaTsKLQotCWlmIChhLT5uYW1lICE9IE5VTEwpIHJldHVybjsKLQotCXNrPShTVEFDSyAqKWEtPnZhbHVlOwotCWZvciAoaT1za19udW0oc2spLTE7IGk+PTA7IGktLSkKLQkJewotCQl2dj0oQ09ORl9WQUxVRSAqKXNrX3ZhbHVlKHNrLGkpOwotCQlPUEVOU1NMX2ZyZWUodnYtPnZhbHVlKTsKLQkJT1BFTlNTTF9mcmVlKHZ2LT5uYW1lKTsKLQkJT1BFTlNTTF9mcmVlKHZ2KTsKLQkJfQotCWlmIChzayAhPSBOVUxMKSBza19mcmVlKHNrKTsKLQlPUEVOU1NMX2ZyZWUoYS0+c2VjdGlvbik7Ci0JT1BFTlNTTF9mcmVlKGEpOwotCX0KLQotLyogc3RhdGljIHVuc2lnbmVkIGxvbmcgaGFzaChDT05GX1ZBTFVFICp2KSAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgaGFzaChjb25zdCB2b2lkICp2X3ZvaWQpCi0JewotCUNPTkZfVkFMVUUgKnYgPSAoQ09ORl9WQUxVRSAqKXZfdm9pZDsKLQlyZXR1cm4oKGxoX3N0cmhhc2godi0+c2VjdGlvbik8PDIpXmxoX3N0cmhhc2godi0+bmFtZSkpOwotCX0KLQotLyogc3RhdGljIGludCBjbXBfY29uZihDT05GX1ZBTFVFICphLCBDT05GX1ZBTFVFICpiKSAqLwotc3RhdGljIGludCBjbXBfY29uZihjb25zdCB2b2lkICphX3ZvaWQsY29uc3QgIHZvaWQgKmJfdm9pZCkKK3N0YXRpYyBpbnQgY29uZl92YWx1ZV9jbXAoY29uc3QgQ09ORl9WQUxVRSAqYSwgY29uc3QgQ09ORl9WQUxVRSAqYikKIAl7CiAJaW50IGk7Ci0JQ09ORl9WQUxVRSAqYSA9IChDT05GX1ZBTFVFICopYV92b2lkOwotCUNPTkZfVkFMVUUgKmIgPSAoQ09ORl9WQUxVRSAqKWJfdm9pZDsKIAogCWlmIChhLT5zZWN0aW9uICE9IGItPnNlY3Rpb24pCiAJCXsKQEAgLTI3MiwzMyArMjA0LDkzIEBACiAJZWxzZQogCQlyZXR1cm4oKGEtPm5hbWUgPT0gTlVMTCk/LTE6MSk7CiAJfQorc3RhdGljIElNUExFTUVOVF9MSEFTSF9DT01QX0ZOKGNvbmZfdmFsdWUsIENPTkZfVkFMVUUpCisKK2ludCBfQ09ORl9uZXdfZGF0YShDT05GICpjb25mKQorCXsKKwlpZiAoY29uZiA9PSBOVUxMKQorCQl7CisJCXJldHVybiAwOworCQl9CisJaWYgKGNvbmYtPmRhdGEgPT0gTlVMTCkKKwkJaWYgKChjb25mLT5kYXRhID0gbGhfQ09ORl9WQUxVRV9uZXcoKSkgPT0gTlVMTCkKKwkJCXsKKwkJCXJldHVybiAwOworCQkJfQorCXJldHVybiAxOworCX0KKwordm9pZCBfQ09ORl9mcmVlX2RhdGEoQ09ORiAqY29uZikKKwl7CisJaWYgKGNvbmYgPT0gTlVMTCB8fCBjb25mLT5kYXRhID09IE5VTEwpIHJldHVybjsKKworCWxoX0NPTkZfVkFMVUVfZG93bl9sb2FkKGNvbmYtPmRhdGEpPTA7IC8qIGV2aWwgdGhpbmcgdG8gbWFrZQorCQkJCSAgKiBzdXJlIHRoZSAnT1BFTlNTTF9mcmVlKCknIHdvcmtzIGFzCisJCQkJICAqIGV4cGVjdGVkICovCisJbGhfQ09ORl9WQUxVRV9kb2FsbF9hcmcoY29uZi0+ZGF0YSwKKwkJCQlMSEFTSF9ET0FMTF9BUkdfRk4odmFsdWVfZnJlZV9oYXNoKSwKKwkJCQlMSEFTSF9PRihDT05GX1ZBTFVFKSwgY29uZi0+ZGF0YSk7CisKKwkvKiBXZSBub3cgaGF2ZSBvbmx5ICdzZWN0aW9uJyBlbnRyaWVzIGluIHRoZSBoYXNoIHRhYmxlLgorCSAqIER1ZSB0byBwcm9ibGVtcyB3aXRoICovCisKKwlsaF9DT05GX1ZBTFVFX2RvYWxsKGNvbmYtPmRhdGEsIExIQVNIX0RPQUxMX0ZOKHZhbHVlX2ZyZWVfc3RhY2spKTsKKwlsaF9DT05GX1ZBTFVFX2ZyZWUoY29uZi0+ZGF0YSk7CisJfQorCitzdGF0aWMgdm9pZCB2YWx1ZV9mcmVlX2hhc2hfZG9hbGxfYXJnKENPTkZfVkFMVUUgKmEsIExIQVNIX09GKENPTkZfVkFMVUUpICpjb25mKQorCXsKKwlpZiAoYS0+bmFtZSAhPSBOVUxMKQorCQkodm9pZClsaF9DT05GX1ZBTFVFX2RlbGV0ZShjb25mLGEpOworCX0KKworc3RhdGljIHZvaWQgdmFsdWVfZnJlZV9zdGFja19kb2FsbChDT05GX1ZBTFVFICphKQorCXsKKwlDT05GX1ZBTFVFICp2djsKKwlTVEFDS19PRihDT05GX1ZBTFVFKSAqc2s7CisJaW50IGk7CisKKwlpZiAoYS0+bmFtZSAhPSBOVUxMKSByZXR1cm47CisKKwlzaz0oU1RBQ0tfT0YoQ09ORl9WQUxVRSkgKilhLT52YWx1ZTsKKwlmb3IgKGk9c2tfQ09ORl9WQUxVRV9udW0oc2spLTE7IGk+PTA7IGktLSkKKwkJeworCQl2dj1za19DT05GX1ZBTFVFX3ZhbHVlKHNrLGkpOworCQlPUEVOU1NMX2ZyZWUodnYtPnZhbHVlKTsKKwkJT1BFTlNTTF9mcmVlKHZ2LT5uYW1lKTsKKwkJT1BFTlNTTF9mcmVlKHZ2KTsKKwkJfQorCWlmIChzayAhPSBOVUxMKSBza19DT05GX1ZBTFVFX2ZyZWUoc2spOworCU9QRU5TU0xfZnJlZShhLT5zZWN0aW9uKTsKKwlPUEVOU1NMX2ZyZWUoYSk7CisJfQogCiAvKiBVcCB1bnRpbCBPcGVuU1NMIDAuOS41YSwgdGhpcyB3YXMgbmV3X3NlY3Rpb24gKi8KIENPTkZfVkFMVUUgKl9DT05GX25ld19zZWN0aW9uKENPTkYgKmNvbmYsIGNvbnN0IGNoYXIgKnNlY3Rpb24pCiAJewotCVNUQUNLICpzaz1OVUxMOworCVNUQUNLX09GKENPTkZfVkFMVUUpICpzaz1OVUxMOwogCWludCBvaz0wLGk7CiAJQ09ORl9WQUxVRSAqdj1OVUxMLCp2djsKIAotCWlmICgoc2s9c2tfbmV3X251bGwoKSkgPT0gTlVMTCkKKwlpZiAoKHNrPXNrX0NPTkZfVkFMVUVfbmV3X251bGwoKSkgPT0gTlVMTCkKIAkJZ290byBlcnI7Ci0JaWYgKCh2PShDT05GX1ZBTFVFICopT1BFTlNTTF9tYWxsb2Moc2l6ZW9mKENPTkZfVkFMVUUpKSkgPT0gTlVMTCkKKwlpZiAoKHY9T1BFTlNTTF9tYWxsb2Moc2l6ZW9mKENPTkZfVkFMVUUpKSkgPT0gTlVMTCkKIAkJZ290byBlcnI7CiAJaT1zdHJsZW4oc2VjdGlvbikrMTsKLQlpZiAoKHYtPnNlY3Rpb249KGNoYXIgKilPUEVOU1NMX21hbGxvYyhpKSkgPT0gTlVMTCkKKwlpZiAoKHYtPnNlY3Rpb249T1BFTlNTTF9tYWxsb2MoaSkpID09IE5VTEwpCiAJCWdvdG8gZXJyOwogCiAJbWVtY3B5KHYtPnNlY3Rpb24sc2VjdGlvbixpKTsKIAl2LT5uYW1lPU5VTEw7CiAJdi0+dmFsdWU9KGNoYXIgKilzazsKIAkKLQl2dj0oQ09ORl9WQUxVRSAqKWxoX2luc2VydChjb25mLT5kYXRhLHYpOworCXZ2PWxoX0NPTkZfVkFMVUVfaW5zZXJ0KGNvbmYtPmRhdGEsdik7CiAJYXNzZXJ0KHZ2ID09IE5VTEwpOwogCW9rPTE7CiBlcnI6CiAJaWYgKCFvaykKIAkJewotCQlpZiAoc2sgIT0gTlVMTCkgc2tfZnJlZShzayk7CisJCWlmIChzayAhPSBOVUxMKSBza19DT05GX1ZBTFVFX2ZyZWUoc2spOwogCQlpZiAodiAhPSBOVUxMKSBPUEVOU1NMX2ZyZWUodik7CiAJCXY9TlVMTDsKIAkJfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2NvbmYvY29uZl9kZWYuYyBiL2NyeXB0by9jb25mL2NvbmZfZGVmLmMKaW5kZXggZDhiY2U4Ny4uMGI1NzFiMCAxMDA2NDQKLS0tIGEvY3J5cHRvL2NvbmYvY29uZl9kZWYuYworKysgYi9jcnlwdG8vY29uZi9jb25mX2RlZi5jCkBAIC0xMjksNyArMTI5LDcgQEAKIAl7CiAJQ09ORiAqcmV0OwogCi0JcmV0ID0gKENPTkYgKilPUEVOU1NMX21hbGxvYyhzaXplb2YoQ09ORikgKyBzaXplb2YodW5zaWduZWQgc2hvcnQgKikpOworCXJldCA9IE9QRU5TU0xfbWFsbG9jKHNpemVvZihDT05GKSArIHNpemVvZih1bnNpZ25lZCBzaG9ydCAqKSk7CiAJaWYgKHJldCkKIAkJaWYgKG1ldGgtPmluaXQocmV0KSA9PSAwKQogCQkJewpAQCAtMTQ1LDcgKzE0NSw3IEBACiAJCXJldHVybiAwOwogCiAJY29uZi0+bWV0aCA9ICZkZWZhdWx0X21ldGhvZDsKLQljb25mLT5tZXRoX2RhdGEgPSAodm9pZCAqKUNPTkZfdHlwZV9kZWZhdWx0OworCWNvbmYtPm1ldGhfZGF0YSA9IENPTkZfdHlwZV9kZWZhdWx0OwogCWNvbmYtPmRhdGEgPSBOVUxMOwogCiAJcmV0dXJuIDE7CkBAIC03MjIsNyArNzIyLDcgQEAKIAlyZXR1cm4ocCk7CiAJfQogCi1zdGF0aWMgdm9pZCBkdW1wX3ZhbHVlKENPTkZfVkFMVUUgKmEsIEJJTyAqb3V0KQorc3RhdGljIHZvaWQgZHVtcF92YWx1ZV9kb2FsbF9hcmcoQ09ORl9WQUxVRSAqYSwgQklPICpvdXQpCiAJewogCWlmIChhLT5uYW1lKQogCQlCSU9fcHJpbnRmKG91dCwgIlslc10gJXM9JXNcbiIsIGEtPnNlY3Rpb24sIGEtPm5hbWUsIGEtPnZhbHVlKTsKQEAgLTczMCwxMSArNzMwLDEyIEBACiAJCUJJT19wcmludGYob3V0LCAiW1slc11dXG4iLCBhLT5zZWN0aW9uKTsKIAl9CiAKLXN0YXRpYyBJTVBMRU1FTlRfTEhBU0hfRE9BTExfQVJHX0ZOKGR1bXBfdmFsdWUsIENPTkZfVkFMVUUgKiwgQklPICopCitzdGF0aWMgSU1QTEVNRU5UX0xIQVNIX0RPQUxMX0FSR19GTihkdW1wX3ZhbHVlLCBDT05GX1ZBTFVFLCBCSU8pCiAKIHN0YXRpYyBpbnQgZGVmX2R1bXAoY29uc3QgQ09ORiAqY29uZiwgQklPICpvdXQpCiAJewotCWxoX2RvYWxsX2FyZyhjb25mLT5kYXRhLCBMSEFTSF9ET0FMTF9BUkdfRk4oZHVtcF92YWx1ZSksIG91dCk7CisJbGhfQ09ORl9WQUxVRV9kb2FsbF9hcmcoY29uZi0+ZGF0YSwgTEhBU0hfRE9BTExfQVJHX0ZOKGR1bXBfdmFsdWUpLAorCQkJCUJJTywgb3V0KTsKIAlyZXR1cm4gMTsKIAl9CiAKZGlmZiAtLWdpdCBhL2NyeXB0by9jb25mL2NvbmZfZXJyLmMgYi9jcnlwdG8vY29uZi9jb25mX2Vyci5jCmluZGV4IGExNmE1ZTAuLjI1YmI1ZGMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9jb25mL2NvbmZfZXJyLmMKKysrIGIvY3J5cHRvL2NvbmYvY29uZl9lcnIuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIGNyeXB0by9jb25mL2NvbmZfZXJyLmMgKi8KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03NSw2ICs3NSw3IEBACiB7RVJSX0ZVTkMoQ09ORl9GX0NPTkZfTE9BRF9CSU8pLAkiQ09ORl9sb2FkX2JpbyJ9LAoge0VSUl9GVU5DKENPTkZfRl9DT05GX0xPQURfRlApLAkiQ09ORl9sb2FkX2ZwIn0sCiB7RVJSX0ZVTkMoQ09ORl9GX0NPTkZfTU9EVUxFU19MT0FEKSwJIkNPTkZfbW9kdWxlc19sb2FkIn0sCit7RVJSX0ZVTkMoQ09ORl9GX0NPTkZfUEFSU0VfTElTVCksCSJDT05GX3BhcnNlX2xpc3QifSwKIHtFUlJfRlVOQyhDT05GX0ZfREVGX0xPQUQpLAkiREVGX0xPQUQifSwKIHtFUlJfRlVOQyhDT05GX0ZfREVGX0xPQURfQklPKSwJIkRFRl9MT0FEX0JJTyJ9LAoge0VSUl9GVU5DKENPTkZfRl9NT0RVTEVfSU5JVCksCSJNT0RVTEVfSU5JVCJ9LApAQCAtOTcsNiArOTgsNyBAQAogc3RhdGljIEVSUl9TVFJJTkdfREFUQSBDT05GX3N0cl9yZWFzb25zW109CiAJewoge0VSUl9SRUFTT04oQ09ORl9SX0VSUk9SX0xPQURJTkdfRFNPKSAgICAsImVycm9yIGxvYWRpbmcgZHNvIn0sCit7RVJSX1JFQVNPTihDT05GX1JfTElTVF9DQU5OT1RfQkVfTlVMTCkgICwibGlzdCBjYW5ub3QgYmUgbnVsbCJ9LAoge0VSUl9SRUFTT04oQ09ORl9SX01JU1NJTkdfQ0xPU0VfU1FVQVJFX0JSQUNLRVQpLCJtaXNzaW5nIGNsb3NlIHNxdWFyZSBicmFja2V0In0sCiB7RVJSX1JFQVNPTihDT05GX1JfTUlTU0lOR19FUVVBTF9TSUdOKSAgICwibWlzc2luZyBlcXVhbCBzaWduIn0sCiB7RVJSX1JFQVNPTihDT05GX1JfTUlTU0lOR19GSU5JU0hfRlVOQ1RJT04pLCJtaXNzaW5nIGZpbmlzaCBmdW5jdGlvbiJ9LApkaWZmIC0tZ2l0IGEvY3J5cHRvL2NvbmYvY29uZl9saWIuYyBiL2NyeXB0by9jb25mL2NvbmZfbGliLmMKaW5kZXggMmEzMzk5ZC4uNTQwNDZkZSAxMDA2NDQKLS0tIGEvY3J5cHRvL2NvbmYvY29uZl9saWIuYworKysgYi9jcnlwdG8vY29uZi9jb25mX2xpYi5jCkBAIC02OSw3ICs2OSw3IEBACiAKIC8qIEluaXQgYSAnQ09ORicgc3RydWN0dXJlIGZyb20gYW4gb2xkIExIQVNIICovCiAKLXZvaWQgQ09ORl9zZXRfbmNvbmYoQ09ORiAqY29uZiwgTEhBU0ggKmhhc2gpCit2b2lkIENPTkZfc2V0X25jb25mKENPTkYgKmNvbmYsIExIQVNIX09GKENPTkZfVkFMVUUpICpoYXNoKQogCXsKIAlpZiAoZGVmYXVsdF9DT05GX21ldGhvZCA9PSBOVUxMKQogCQlkZWZhdWx0X0NPTkZfbWV0aG9kID0gTkNPTkZfZGVmYXVsdCgpOwpAQCAtODcsOSArODcsMTAgQEAKIAlyZXR1cm4gMTsKIAl9CiAKLUxIQVNIICpDT05GX2xvYWQoTEhBU0ggKmNvbmYsIGNvbnN0IGNoYXIgKmZpbGUsIGxvbmcgKmVsaW5lKQorTEhBU0hfT0YoQ09ORl9WQUxVRSkgKkNPTkZfbG9hZChMSEFTSF9PRihDT05GX1ZBTFVFKSAqY29uZiwgY29uc3QgY2hhciAqZmlsZSwKKwkJCQlsb25nICplbGluZSkKIAl7Ci0JTEhBU0ggKmx0bXA7CisJTEhBU0hfT0YoQ09ORl9WQUxVRSkgKmx0bXA7CiAJQklPICppbj1OVUxMOwogCiAjaWZkZWYgT1BFTlNTTF9TWVNfVk1TCkBAIC0xMTAsMTAgKzExMSwxMSBAQAogCX0KIAogI2lmbmRlZiBPUEVOU1NMX05PX0ZQX0FQSQotTEhBU0ggKkNPTkZfbG9hZF9mcChMSEFTSCAqY29uZiwgRklMRSAqZnAsbG9uZyAqZWxpbmUpCitMSEFTSF9PRihDT05GX1ZBTFVFKSAqQ09ORl9sb2FkX2ZwKExIQVNIX09GKENPTkZfVkFMVUUpICpjb25mLCBGSUxFICpmcCwKKwkJCQkgICBsb25nICplbGluZSkKIAl7CiAJQklPICpidG1wOwotCUxIQVNIICpsdG1wOworCUxIQVNIX09GKENPTkZfVkFMVUUpICpsdG1wOwogCWlmKCEoYnRtcCA9IEJJT19uZXdfZnAoZnAsIEJJT19OT0NMT1NFKSkpIHsKIAkJQ09ORmVycihDT05GX0ZfQ09ORl9MT0FEX0ZQLEVSUl9SX0JVRl9MSUIpOwogCQlyZXR1cm4gTlVMTDsKQEAgLTEyNCw3ICsxMjYsOCBAQAogCX0KICNlbmRpZgogCi1MSEFTSCAqQ09ORl9sb2FkX2JpbyhMSEFTSCAqY29uZiwgQklPICpicCxsb25nICplbGluZSkKK0xIQVNIX09GKENPTkZfVkFMVUUpICpDT05GX2xvYWRfYmlvKExIQVNIX09GKENPTkZfVkFMVUUpICpjb25mLCBCSU8gKmJwLAorCQkJCSAgICBsb25nICplbGluZSkKIAl7CiAJQ09ORiBjdG1wOwogCWludCByZXQ7CkBAIC0xMzcsNyArMTQwLDggQEAKIAlyZXR1cm4gTlVMTDsKIAl9CiAKLVNUQUNLX09GKENPTkZfVkFMVUUpICpDT05GX2dldF9zZWN0aW9uKExIQVNIICpjb25mLGNvbnN0IGNoYXIgKnNlY3Rpb24pCitTVEFDS19PRihDT05GX1ZBTFVFKSAqQ09ORl9nZXRfc2VjdGlvbihMSEFTSF9PRihDT05GX1ZBTFVFKSAqY29uZiwKKwkJCQkgICAgICAgY29uc3QgY2hhciAqc2VjdGlvbikKIAl7CiAJaWYgKGNvbmYgPT0gTlVMTCkKIAkJewpAQCAtMTUxLDcgKzE1NSw4IEBACiAJCX0KIAl9CiAKLWNoYXIgKkNPTkZfZ2V0X3N0cmluZyhMSEFTSCAqY29uZixjb25zdCBjaGFyICpncm91cCxjb25zdCBjaGFyICpuYW1lKQorY2hhciAqQ09ORl9nZXRfc3RyaW5nKExIQVNIX09GKENPTkZfVkFMVUUpICpjb25mLGNvbnN0IGNoYXIgKmdyb3VwLAorCQkgICAgICBjb25zdCBjaGFyICpuYW1lKQogCXsKIAlpZiAoY29uZiA9PSBOVUxMKQogCQl7CkBAIC0xNjUsNyArMTcwLDggQEAKIAkJfQogCX0KIAotbG9uZyBDT05GX2dldF9udW1iZXIoTEhBU0ggKmNvbmYsY29uc3QgY2hhciAqZ3JvdXAsY29uc3QgY2hhciAqbmFtZSkKK2xvbmcgQ09ORl9nZXRfbnVtYmVyKExIQVNIX09GKENPTkZfVkFMVUUpICpjb25mLGNvbnN0IGNoYXIgKmdyb3VwLAorCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUpCiAJewogCWludCBzdGF0dXM7CiAJbG9uZyByZXN1bHQgPSAwOwpAQCAtMTg5LDcgKzE5NSw3IEBACiAJcmV0dXJuIHJlc3VsdDsKIAl9CiAKLXZvaWQgQ09ORl9mcmVlKExIQVNIICpjb25mKQordm9pZCBDT05GX2ZyZWUoTEhBU0hfT0YoQ09ORl9WQUxVRSkgKmNvbmYpCiAJewogCUNPTkYgY3RtcDsKIAlDT05GX3NldF9uY29uZigmY3RtcCwgY29uZik7CkBAIC0xOTcsNyArMjAzLDcgQEAKIAl9CiAKICNpZm5kZWYgT1BFTlNTTF9OT19GUF9BUEkKLWludCBDT05GX2R1bXBfZnAoTEhBU0ggKmNvbmYsIEZJTEUgKm91dCkKK2ludCBDT05GX2R1bXBfZnAoTEhBU0hfT0YoQ09ORl9WQUxVRSkgKmNvbmYsIEZJTEUgKm91dCkKIAl7CiAJQklPICpidG1wOwogCWludCByZXQ7CkBAIC0yMTIsNyArMjE4LDcgQEAKIAl9CiAjZW5kaWYKIAotaW50IENPTkZfZHVtcF9iaW8oTEhBU0ggKmNvbmYsIEJJTyAqb3V0KQoraW50IENPTkZfZHVtcF9iaW8oTEhBU0hfT0YoQ09ORl9WQUxVRSkgKmNvbmYsIEJJTyAqb3V0KQogCXsKIAlDT05GIGN0bXA7CiAJQ09ORl9zZXRfbmNvbmYoJmN0bXAsIGNvbmYpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2NvbmYvY29uZl9tYWxsLmMgYi9jcnlwdG8vY29uZi9jb25mX21hbGwuYwppbmRleCAxY2MxZmQ1Li5jNmY0Y2IyIDEwMDY0NAotLS0gYS9jcnlwdG8vY29uZi9jb25mX21hbGwuYworKysgYi9jcnlwdG8vY29uZi9jb25mX21hbGwuYwpAQCAtNjMsNyArNjMsNiBAQAogI2luY2x1ZGUgPG9wZW5zc2wvZHNvLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9hc24xLmg+Ci0jaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKICNpbmNsdWRlIDxvcGVuc3NsL2VuZ2luZS5oPgogI2VuZGlmCkBAIC03Nyw2ICs3Niw1IEBACiAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCiAJRU5HSU5FX2FkZF9jb25mX21vZHVsZSgpOwogI2VuZGlmCi0JRVZQX2FkZF9hbGdfbW9kdWxlKCk7CiAJfQogCmRpZmYgLS1naXQgYS9jcnlwdG8vY29uZi9jb25mX21vZC5jIGIvY3J5cHRvL2NvbmYvY29uZl9tb2QuYwppbmRleCBlZTljNjc3Li5kZjE2NDJhIDEwMDY0NAotLS0gYS9jcnlwdG8vY29uZi9jb25mX21vZC5jCisrKyBiL2NyeXB0by9jb25mL2NvbmZfbW9kLmMKQEAgLTU4Miw4ICs1ODIsMTQgQEAKIAl7CiAJaW50IHJldDsKIAljb25zdCBjaGFyICpsc3RhcnQsICp0bXBlbmQsICpwOwotCWxzdGFydCA9IGxpc3RfOwogCisJaWYobGlzdF8gPT0gTlVMTCkKKwkJeworCQlDT05GZXJyKENPTkZfRl9DT05GX1BBUlNFX0xJU1QsIENPTkZfUl9MSVNUX0NBTk5PVF9CRV9OVUxMKTsKKwkJcmV0dXJuIDA7CisJCX0KKworCWxzdGFydCA9IGxpc3RfOwogCWZvcig7OykKIAkJewogCQlpZiAobm9zcGMpCmRpZmYgLS1naXQgYS9jcnlwdG8vY3B0X2Vyci5jIGIvY3J5cHRvL2NwdF9lcnIuYwppbmRleCA5ZmQ0MWZmLi4xMzliOTI4IDEwMDY0NAotLS0gYS9jcnlwdG8vY3B0X2Vyci5jCisrKyBiL2NyeXB0by9jcHRfZXJyLmMKQEAgLTEsNiArMSw2IEBACiAvKiBjcnlwdG8vY3B0X2Vyci5jICovCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNiBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2NyeXB0bGliLmMgYi9jcnlwdG8vY3J5cHRsaWIuYwppbmRleCA0OTdkMDAzLi45YTM5ZDdlIDEwMDY0NAotLS0gYS9jcnlwdG8vY3J5cHRsaWIuYworKysgYi9jcnlwdG8vY3J5cHRsaWIuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIGNyeXB0by9jcnlwdGxpYi5jICovCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTIxLDE3ICsxMjEsMjc5IEBACiBzdGF0aWMgZG91YmxlIFNTTGVheV9NU1ZDNV9oYWNrPTAuMDsgLyogYW5kIGZvciBWQzEuNSAqLwogI2VuZGlmCiAKK0RFQ0xBUkVfU1RBQ0tfT0YoQ1JZUFRPX2R5bmxvY2spCisKKy8qIHJlYWwgI2RlZmluZXMgaW4gY3J5cHRvLmgsIGtlZXAgdGhlc2UgdXB0byBkYXRlICovCitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgbG9ja19uYW1lc1tDUllQVE9fTlVNX0xPQ0tTXSA9CisJeworCSI8PEVSUk9SPj4iLAorCSJlcnIiLAorCSJleF9kYXRhIiwKKwkieDUwOSIsCisJIng1MDlfaW5mbyIsCisJIng1MDlfcGtleSIsCisJIng1MDlfY3JsIiwKKwkieDUwOV9yZXEiLAorCSJkc2EiLAorCSJyc2EiLAorCSJldnBfcGtleSIsCisJIng1MDlfc3RvcmUiLAorCSJzc2xfY3R4IiwKKwkic3NsX2NlcnQiLAorCSJzc2xfc2Vzc2lvbiIsCisJInNzbF9zZXNzX2NlcnQiLAorCSJzc2wiLAorCSJzc2xfbWV0aG9kIiwKKwkicmFuZCIsCisJInJhbmQyIiwKKwkiZGVidWdfbWFsbG9jIiwKKwkiQklPIiwKKwkiZ2V0aG9zdGJ5bmFtZSIsCisJImdldHNlcnZieW5hbWUiLAorCSJyZWFkZGlyIiwKKwkiUlNBX2JsaW5kaW5nIiwKKwkiZGgiLAorCSJkZWJ1Z19tYWxsb2MyIiwKKwkiZHNvIiwKKwkiZHlubG9jayIsCisJImVuZ2luZSIsCisJInVpIiwKKwkiZWNkc2EiLAorCSJlYyIsCisJImVjZGgiLAorCSJibiIsCisJImVjX3ByZV9jb21wIiwKKwkic3RvcmUiLAorCSJjb21wIiwKKwkiZmlwcyIsCisJImZpcHMyIiwKKyNpZiBDUllQVE9fTlVNX0xPQ0tTICE9IDQxCisjIGVycm9yICJJbmNvbnNpc3RlbmN5IGJldHdlZW4gY3J5cHRvLmggYW5kIGNyeXB0bGliLmMiCisjZW5kaWYKKwl9OworCisvKiBUaGlzIGlzIGZvciBhcHBsaWNhdGlvbnMgdG8gYWxsb2NhdGUgbmV3IHR5cGUgbmFtZXMgaW4gdGhlIG5vbi1keW5hbWljCisgICBhcnJheSBvZiBsb2NrIG5hbWVzLiAgVGhlc2UgYXJlIG51bWJlcmVkIHdpdGggcG9zaXRpdmUgbnVtYmVycy4gICovCitzdGF0aWMgU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpICphcHBfbG9ja3M9TlVMTDsKKworLyogRm9yIGFwcGxpY2F0aW9ucyB0aGF0IHdhbnQgYSBtb3JlIGR5bmFtaWMgd2F5IG9mIGhhbmRsaW5nIHRocmVhZHMsIHRoZQorICAgZm9sbG93aW5nIHN0YWNrIGlzIHVzZWQuICBUaGVzZSBhcmUgZXh0ZXJuYWxseSBudW1iZXJlZCB3aXRoIG5lZ2F0aXZlCisgICBudW1iZXJzLiAgKi8KK3N0YXRpYyBTVEFDS19PRihDUllQVE9fZHlubG9jaykgKmR5bl9sb2Nrcz1OVUxMOworCisKIHN0YXRpYyB2b2lkIChNU19GQVIgKmxvY2tpbmdfY2FsbGJhY2spKGludCBtb2RlLGludCB0eXBlLAotCWNvbnN0IGNoYXIgKmZpbGUsaW50IGxpbmUpPU5VTEw7CisJY29uc3QgY2hhciAqZmlsZSxpbnQgbGluZSk9MDsKIHN0YXRpYyBpbnQgKE1TX0ZBUiAqYWRkX2xvY2tfY2FsbGJhY2spKGludCAqcG9pbnRlcixpbnQgYW1vdW50LAotCWludCB0eXBlLGNvbnN0IGNoYXIgKmZpbGUsaW50IGxpbmUpPU5VTEw7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyAoTVNfRkFSICppZF9jYWxsYmFjaykodm9pZCk9TlVMTDsKKwlpbnQgdHlwZSxjb25zdCBjaGFyICpmaWxlLGludCBsaW5lKT0wOworI2lmbmRlZiBPUEVOU1NMX05PX0RFUFJFQ0FURUQKK3N0YXRpYyB1bnNpZ25lZCBsb25nIChNU19GQVIgKmlkX2NhbGxiYWNrKSh2b2lkKT0wOworI2VuZGlmCitzdGF0aWMgdm9pZCAoTVNfRkFSICp0aHJlYWRpZF9jYWxsYmFjaykoQ1JZUFRPX1RIUkVBRElEICopPTA7CitzdGF0aWMgc3RydWN0IENSWVBUT19keW5sb2NrX3ZhbHVlICooTVNfRkFSICpkeW5sb2NrX2NyZWF0ZV9jYWxsYmFjaykKKwkoY29uc3QgY2hhciAqZmlsZSxpbnQgbGluZSk9MDsKK3N0YXRpYyB2b2lkIChNU19GQVIgKmR5bmxvY2tfbG9ja19jYWxsYmFjaykoaW50IG1vZGUsCisJc3RydWN0IENSWVBUT19keW5sb2NrX3ZhbHVlICpsLCBjb25zdCBjaGFyICpmaWxlLGludCBsaW5lKT0wOworc3RhdGljIHZvaWQgKE1TX0ZBUiAqZHlubG9ja19kZXN0cm95X2NhbGxiYWNrKShzdHJ1Y3QgQ1JZUFRPX2R5bmxvY2tfdmFsdWUgKmwsCisJY29uc3QgY2hhciAqZmlsZSxpbnQgbGluZSk9MDsKKworaW50IENSWVBUT19nZXRfbmV3X2xvY2tpZChjaGFyICpuYW1lKQorCXsKKwljaGFyICpzdHI7CisJaW50IGk7CisKKyNpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX1dJTjMyKSB8fCBkZWZpbmVkKE9QRU5TU0xfU1lTX1dJTjE2KQorCS8qIEEgaGFjayB0byBtYWtlIFZpc3VhbCBDKysgNS4wIHdvcmsgY29ycmVjdGx5IHdoZW4gbGlua2luZyBhcworCSAqIGEgRExMIHVzaW5nIC9NVC4gV2l0aG91dCB0aGlzLCB0aGUgYXBwbGljYXRpb24gY2Fubm90IHVzZQorCSAqIGFueSBmbG9hdGluZyBwb2ludCBwcmludGYncy4KKwkgKiBJdCBhbHNvIHNlZW1zIHRvIGJlIG5lZWRlZCBmb3IgVmlzdWFsIEMgMS41ICh3aW4xNikgKi8KKwlTU0xlYXlfTVNWQzVfaGFjaz0oZG91YmxlKW5hbWVbMF0qKGRvdWJsZSluYW1lWzFdOworI2VuZGlmCisKKwlpZiAoKGFwcF9sb2NrcyA9PSBOVUxMKSAmJiAoKGFwcF9sb2Nrcz1za19PUEVOU1NMX1NUUklOR19uZXdfbnVsbCgpKSA9PSBOVUxMKSkKKwkJeworCQlDUllQVE9lcnIoQ1JZUFRPX0ZfQ1JZUFRPX0dFVF9ORVdfTE9DS0lELEVSUl9SX01BTExPQ19GQUlMVVJFKTsKKwkJcmV0dXJuKDApOworCQl9CisJaWYgKChzdHI9QlVGX3N0cmR1cChuYW1lKSkgPT0gTlVMTCkKKwkJeworCQlDUllQVE9lcnIoQ1JZUFRPX0ZfQ1JZUFRPX0dFVF9ORVdfTE9DS0lELEVSUl9SX01BTExPQ19GQUlMVVJFKTsKKwkJcmV0dXJuKDApOworCQl9CisJaT1za19PUEVOU1NMX1NUUklOR19wdXNoKGFwcF9sb2NrcyxzdHIpOworCWlmICghaSkKKwkJT1BFTlNTTF9mcmVlKHN0cik7CisJZWxzZQorCQlpKz1DUllQVE9fTlVNX0xPQ0tTOyAvKiBnYXAgb2Ygb25lIDotKSAqLworCXJldHVybihpKTsKKwl9CiAKIGludCBDUllQVE9fbnVtX2xvY2tzKHZvaWQpCiAJewogCXJldHVybiBDUllQVE9fTlVNX0xPQ0tTOwogCX0KIAoraW50IENSWVBUT19nZXRfbmV3X2R5bmxvY2tpZCh2b2lkKQorCXsKKwlpbnQgaSA9IDA7CisJQ1JZUFRPX2R5bmxvY2sgKnBvaW50ZXIgPSBOVUxMOworCisJaWYgKGR5bmxvY2tfY3JlYXRlX2NhbGxiYWNrID09IE5VTEwpCisJCXsKKwkJQ1JZUFRPZXJyKENSWVBUT19GX0NSWVBUT19HRVRfTkVXX0RZTkxPQ0tJRCxDUllQVE9fUl9OT19EWU5MT0NLX0NSRUFURV9DQUxMQkFDSyk7CisJCXJldHVybigwKTsKKwkJfQorCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfRFlOTE9DSyk7CisJaWYgKChkeW5fbG9ja3MgPT0gTlVMTCkKKwkJJiYgKChkeW5fbG9ja3M9c2tfQ1JZUFRPX2R5bmxvY2tfbmV3X251bGwoKSkgPT0gTlVMTCkpCisJCXsKKwkJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX0RZTkxPQ0spOworCQlDUllQVE9lcnIoQ1JZUFRPX0ZfQ1JZUFRPX0dFVF9ORVdfRFlOTE9DS0lELEVSUl9SX01BTExPQ19GQUlMVVJFKTsKKwkJcmV0dXJuKDApOworCQl9CisJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX0RZTkxPQ0spOworCisJcG9pbnRlciA9IChDUllQVE9fZHlubG9jayAqKU9QRU5TU0xfbWFsbG9jKHNpemVvZihDUllQVE9fZHlubG9jaykpOworCWlmIChwb2ludGVyID09IE5VTEwpCisJCXsKKwkJQ1JZUFRPZXJyKENSWVBUT19GX0NSWVBUT19HRVRfTkVXX0RZTkxPQ0tJRCxFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CisJCXJldHVybigwKTsKKwkJfQorCXBvaW50ZXItPnJlZmVyZW5jZXMgPSAxOworCXBvaW50ZXItPmRhdGEgPSBkeW5sb2NrX2NyZWF0ZV9jYWxsYmFjayhfX0ZJTEVfXyxfX0xJTkVfXyk7CisJaWYgKHBvaW50ZXItPmRhdGEgPT0gTlVMTCkKKwkJeworCQlPUEVOU1NMX2ZyZWUocG9pbnRlcik7CisJCUNSWVBUT2VycihDUllQVE9fRl9DUllQVE9fR0VUX05FV19EWU5MT0NLSUQsRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOworCQlyZXR1cm4oMCk7CisJCX0KKworCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfRFlOTE9DSyk7CisJLyogRmlyc3QsIHRyeSB0byBmaW5kIGFuIGV4aXN0aW5nIGVtcHR5IHNsb3QgKi8KKwlpPXNrX0NSWVBUT19keW5sb2NrX2ZpbmQoZHluX2xvY2tzLE5VTEwpOworCS8qIElmIHRoZXJlIHdhcyBub25lLCBwdXNoLCB0aGVyZWJ5IGNyZWF0aW5nIGEgbmV3IG9uZSAqLworCWlmIChpID09IC0xKQorCQkvKiBTaW5jZSBza19wdXNoKCkgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zIG9uIHRoZQorCQkgICBzdGFjaywgbm90IHRoZSBsb2NhdGlvbiBvZiB0aGUgcHVzaGVkIGl0ZW0sIHdlIG5lZWQKKwkJICAgdG8gdHJhbnNmb3JtIHRoZSByZXR1cm5lZCBudW1iZXIgaW50byBhIHBvc2l0aW9uLAorCQkgICBieSBkZWNyZWFzaW5nIGl0LiAgKi8KKwkJaT1za19DUllQVE9fZHlubG9ja19wdXNoKGR5bl9sb2Nrcyxwb2ludGVyKSAtIDE7CisJZWxzZQorCQkvKiBJZiB3ZSBmb3VuZCBhIHBsYWNlIHdpdGggYSBOVUxMIHBvaW50ZXIsIHB1dCBvdXIgcG9pbnRlcgorCQkgICBpbiBpdC4gICovCisJCSh2b2lkKXNrX0NSWVBUT19keW5sb2NrX3NldChkeW5fbG9ja3MsaSxwb2ludGVyKTsKKwlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfRFlOTE9DSyk7CisKKwlpZiAoaSA9PSAtMSkKKwkJeworCQlkeW5sb2NrX2Rlc3Ryb3lfY2FsbGJhY2socG9pbnRlci0+ZGF0YSxfX0ZJTEVfXyxfX0xJTkVfXyk7CisJCU9QRU5TU0xfZnJlZShwb2ludGVyKTsKKwkJfQorCWVsc2UKKwkJaSArPSAxOyAvKiB0byBhdm9pZCAwICovCisJcmV0dXJuIC1pOworCX0KKwordm9pZCBDUllQVE9fZGVzdHJveV9keW5sb2NraWQoaW50IGkpCisJeworCUNSWVBUT19keW5sb2NrICpwb2ludGVyID0gTlVMTDsKKwlpZiAoaSkKKwkJaSA9IC1pLTE7CisJaWYgKGR5bmxvY2tfZGVzdHJveV9jYWxsYmFjayA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX0RZTkxPQ0spOworCisJaWYgKGR5bl9sb2NrcyA9PSBOVUxMIHx8IGkgPj0gc2tfQ1JZUFRPX2R5bmxvY2tfbnVtKGR5bl9sb2NrcykpCisJCXsKKwkJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX0RZTkxPQ0spOworCQlyZXR1cm47CisJCX0KKwlwb2ludGVyID0gc2tfQ1JZUFRPX2R5bmxvY2tfdmFsdWUoZHluX2xvY2tzLCBpKTsKKwlpZiAocG9pbnRlciAhPSBOVUxMKQorCQl7CisJCS0tcG9pbnRlci0+cmVmZXJlbmNlczsKKyNpZmRlZiBSRUZfQ0hFQ0sKKwkJaWYgKHBvaW50ZXItPnJlZmVyZW5jZXMgPCAwKQorCQkJeworCQkJZnByaW50ZihzdGRlcnIsIkNSWVBUT19kZXN0cm95X2R5bmxvY2tpZCwgYmFkIHJlZmVyZW5jZSBjb3VudFxuIik7CisJCQlhYm9ydCgpOworCQkJfQorCQllbHNlCisjZW5kaWYKKwkJCWlmIChwb2ludGVyLT5yZWZlcmVuY2VzIDw9IDApCisJCQkJeworCQkJCSh2b2lkKXNrX0NSWVBUT19keW5sb2NrX3NldChkeW5fbG9ja3MsIGksIE5VTEwpOworCQkJCX0KKwkJCWVsc2UKKwkJCQlwb2ludGVyID0gTlVMTDsKKwkJfQorCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19EWU5MT0NLKTsKKworCWlmIChwb2ludGVyKQorCQl7CisJCWR5bmxvY2tfZGVzdHJveV9jYWxsYmFjayhwb2ludGVyLT5kYXRhLF9fRklMRV9fLF9fTElORV9fKTsKKwkJT1BFTlNTTF9mcmVlKHBvaW50ZXIpOworCQl9CisJfQorCitzdHJ1Y3QgQ1JZUFRPX2R5bmxvY2tfdmFsdWUgKkNSWVBUT19nZXRfZHlubG9ja192YWx1ZShpbnQgaSkKKwl7CisJQ1JZUFRPX2R5bmxvY2sgKnBvaW50ZXIgPSBOVUxMOworCWlmIChpKQorCQlpID0gLWktMTsKKworCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfRFlOTE9DSyk7CisKKwlpZiAoZHluX2xvY2tzICE9IE5VTEwgJiYgaSA8IHNrX0NSWVBUT19keW5sb2NrX251bShkeW5fbG9ja3MpKQorCQlwb2ludGVyID0gc2tfQ1JZUFRPX2R5bmxvY2tfdmFsdWUoZHluX2xvY2tzLCBpKTsKKwlpZiAocG9pbnRlcikKKwkJcG9pbnRlci0+cmVmZXJlbmNlcysrOworCisJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX0RZTkxPQ0spOworCisJaWYgKHBvaW50ZXIpCisJCXJldHVybiBwb2ludGVyLT5kYXRhOworCXJldHVybiBOVUxMOworCX0KKworc3RydWN0IENSWVBUT19keW5sb2NrX3ZhbHVlICooKkNSWVBUT19nZXRfZHlubG9ja19jcmVhdGVfY2FsbGJhY2sodm9pZCkpCisJKGNvbnN0IGNoYXIgKmZpbGUsaW50IGxpbmUpCisJeworCXJldHVybihkeW5sb2NrX2NyZWF0ZV9jYWxsYmFjayk7CisJfQorCit2b2lkICgqQ1JZUFRPX2dldF9keW5sb2NrX2xvY2tfY2FsbGJhY2sodm9pZCkpKGludCBtb2RlLAorCXN0cnVjdCBDUllQVE9fZHlubG9ja192YWx1ZSAqbCwgY29uc3QgY2hhciAqZmlsZSxpbnQgbGluZSkKKwl7CisJcmV0dXJuKGR5bmxvY2tfbG9ja19jYWxsYmFjayk7CisJfQorCit2b2lkICgqQ1JZUFRPX2dldF9keW5sb2NrX2Rlc3Ryb3lfY2FsbGJhY2sodm9pZCkpCisJKHN0cnVjdCBDUllQVE9fZHlubG9ja192YWx1ZSAqbCwgY29uc3QgY2hhciAqZmlsZSxpbnQgbGluZSkKKwl7CisJcmV0dXJuKGR5bmxvY2tfZGVzdHJveV9jYWxsYmFjayk7CisJfQorCit2b2lkIENSWVBUT19zZXRfZHlubG9ja19jcmVhdGVfY2FsbGJhY2soc3RydWN0IENSWVBUT19keW5sb2NrX3ZhbHVlICooKmZ1bmMpCisJKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKSkKKwl7CisJZHlubG9ja19jcmVhdGVfY2FsbGJhY2s9ZnVuYzsKKwl9CisKK3ZvaWQgQ1JZUFRPX3NldF9keW5sb2NrX2xvY2tfY2FsbGJhY2sodm9pZCAoKmZ1bmMpKGludCBtb2RlLAorCXN0cnVjdCBDUllQVE9fZHlubG9ja192YWx1ZSAqbCwgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUpKQorCXsKKwlkeW5sb2NrX2xvY2tfY2FsbGJhY2s9ZnVuYzsKKwl9CisKK3ZvaWQgQ1JZUFRPX3NldF9keW5sb2NrX2Rlc3Ryb3lfY2FsbGJhY2sodm9pZCAoKmZ1bmMpCisJKHN0cnVjdCBDUllQVE9fZHlubG9ja192YWx1ZSAqbCwgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUpKQorCXsKKwlkeW5sb2NrX2Rlc3Ryb3lfY2FsbGJhY2s9ZnVuYzsKKwl9CisKKwogdm9pZCAoKkNSWVBUT19nZXRfbG9ja2luZ19jYWxsYmFjayh2b2lkKSkoaW50IG1vZGUsaW50IHR5cGUsY29uc3QgY2hhciAqZmlsZSwKIAkJaW50IGxpbmUpCiAJewpAQCAtMTU2LDYgKzQxOCwxMDggQEAKIAlhZGRfbG9ja19jYWxsYmFjaz1mdW5jOwogCX0KIAorLyogdGhlIG1lbXNldCgpIGhlcmUgYW5kIGluIHNldF9wb2ludGVyKCkgc2VlbSBvdmVya2lsbCwgYnV0IGZvciB0aGUgc2FrZSBvZgorICogQ1JZUFRPX1RIUkVBRElEX2NtcCgpIHRoaXMgYXZvaWRzIGFueSBwbGF0Zm9ybSBzaWxsaW5lc3MgdGhhdCBtaWdodCBjYXVzZSB0d28KKyAqICJlcXVhbCIgVEhSRUFESUQgc3RydWN0cyB0byBub3QgYmUgbWVtY21wKCktaWRlbnRpY2FsLiAqLwordm9pZCBDUllQVE9fVEhSRUFESURfc2V0X251bWVyaWMoQ1JZUFRPX1RIUkVBRElEICppZCwgdW5zaWduZWQgbG9uZyB2YWwpCisJeworCW1lbXNldChpZCwgMCwgc2l6ZW9mKCppZCkpOworCWlkLT52YWwgPSB2YWw7CisJfQorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBoYXNoX2NvZWZmc1tdID0geyAzLCA1LCA3LCAxMSwgMTMsIDE3LCAxOSwgMjMgfTsKK3ZvaWQgQ1JZUFRPX1RIUkVBRElEX3NldF9wb2ludGVyKENSWVBUT19USFJFQURJRCAqaWQsIHZvaWQgKnB0cikKKwl7CisJdW5zaWduZWQgY2hhciAqZGVzdCA9ICh2b2lkICopJmlkLT52YWw7CisJdW5zaWduZWQgaW50IGFjY3VtID0gMDsKKwl1bnNpZ25lZCBjaGFyIGRudW0gPSBzaXplb2YoaWQtPnZhbCk7CisKKwltZW1zZXQoaWQsIDAsIHNpemVvZigqaWQpKTsKKwlpZC0+cHRyID0gcHRyOworCWlmIChzaXplb2YoaWQtPnZhbCkgPj0gc2l6ZW9mKGlkLT5wdHIpKQorCQl7CisJCS8qICdwdHInIGNhbiBiZSBlbWJlZGRlZCBpbiAndmFsJyB3aXRob3V0IGxvc3Mgb2YgdW5pcXVlbmVzcyAqLworCQlpZC0+dmFsID0gKHVuc2lnbmVkIGxvbmcpaWQtPnB0cjsKKwkJcmV0dXJuOworCQl9CisJLyogaGFzaCBwdHIgPT0+IHZhbC4gRWFjaCBieXRlIG9mICd2YWwnIGdldHMgdGhlIG1vZC0yNTYgdG90YWwgb2YgYQorCSAqIGxpbmVhciBmdW5jdGlvbiBvdmVyIHRoZSBieXRlcyBpbiAncHRyJywgdGhlIGNvLWVmZmljaWVudHMgb2Ygd2hpY2gKKwkgKiBhcmUgYSBzZXF1ZW5jZSBvZiBsb3ctcHJpbWVzIChoYXNoX2NvZWZmcyBpcyBhbiA4LWVsZW1lbnQgY3ljbGUpIC0KKwkgKiB0aGUgc3RhcnRpbmcgcHJpbWUgZm9yIHRoZSBzZXF1ZW5jZSB2YXJpZXMgZm9yIGVhY2ggYnl0ZSBvZiAndmFsJworCSAqICh1bmlxdWUgcG9seW5vbWlhbHMgdW5sZXNzIHBvaW50ZXJzIGFyZSA+NjQtYml0KS4gRm9yIGFkZGVkIHNwaWNlLAorCSAqIHRoZSB0b3RhbHMgYWNjdW11bGF0ZSByYXRoZXIgdGhhbiByZXN0YXJ0aW5nIGZyb20gemVybywgYW5kIHRoZSBpbmRleAorCSAqIG9mIHRoZSAndmFsJyBieXRlIGlzIGFkZGVkIGVhY2ggdGltZSAocG9zaXRpb24gZGVwZW5kZW5jZSkuIElmIEkgd2FzCisJICogYSBibGFjay1iZWx0LCBJJ2Qgc2NhbiBiaWctZW5kaWFuIHBvaW50ZXJzIGluIHJldmVyc2UgdG8gZ2l2ZQorCSAqIGxvdy1vcmRlciBiaXRzIG1vcmUgcGxheSwgYnV0IHRoaXMgaXNuJ3QgY3J5cHRvIGFuZCBJJ2QgcHJlZmVyIG5vYm9keQorCSAqIG1pc3Rha2UgaXQgYXMgc3VjaC4gUGx1cyBJJ20gbGF6eS4gKi8KKwl3aGlsZSAoZG51bS0tKQorCQl7CisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYyA9ICh2b2lkICopJmlkLT5wdHI7CisJCXVuc2lnbmVkIGNoYXIgc251bSA9IHNpemVvZihpZC0+cHRyKTsKKwkJd2hpbGUgKHNudW0tLSkKKwkJCWFjY3VtICs9ICooc3JjKyspICogaGFzaF9jb2VmZnNbKHNudW0gKyBkbnVtKSAmIDddOworCQlhY2N1bSArPSBkbnVtOworCQkqKGRlc3QrKykgPSBhY2N1bSAmIDI1NTsKKwkJfQorCX0KKworaW50IENSWVBUT19USFJFQURJRF9zZXRfY2FsbGJhY2sodm9pZCAoKmZ1bmMpKENSWVBUT19USFJFQURJRCAqKSkKKwl7CisJaWYgKHRocmVhZGlkX2NhbGxiYWNrKQorCQlyZXR1cm4gMDsKKwl0aHJlYWRpZF9jYWxsYmFjayA9IGZ1bmM7CisJcmV0dXJuIDE7CisJfQorCit2b2lkICgqQ1JZUFRPX1RIUkVBRElEX2dldF9jYWxsYmFjayh2b2lkKSkoQ1JZUFRPX1RIUkVBRElEICopCisJeworCXJldHVybiB0aHJlYWRpZF9jYWxsYmFjazsKKwl9CisKK3ZvaWQgQ1JZUFRPX1RIUkVBRElEX2N1cnJlbnQoQ1JZUFRPX1RIUkVBRElEICppZCkKKwl7CisJaWYgKHRocmVhZGlkX2NhbGxiYWNrKQorCQl7CisJCXRocmVhZGlkX2NhbGxiYWNrKGlkKTsKKwkJcmV0dXJuOworCQl9CisjaWZuZGVmIE9QRU5TU0xfTk9fREVQUkVDQVRFRAorCS8qIElmIHRoZSBkZXByZWNhdGVkIGNhbGxiYWNrIHdhcyBzZXQsIGZhbGwgYmFjayB0byB0aGF0ICovCisJaWYgKGlkX2NhbGxiYWNrKQorCQl7CisJCUNSWVBUT19USFJFQURJRF9zZXRfbnVtZXJpYyhpZCwgaWRfY2FsbGJhY2soKSk7CisJCXJldHVybjsKKwkJfQorI2VuZGlmCisJLyogRWxzZSBwaWNrIGEgYmFja3VwICovCisjaWZkZWYgT1BFTlNTTF9TWVNfV0lOMTYKKwlDUllQVE9fVEhSRUFESURfc2V0X251bWVyaWMoaWQsICh1bnNpZ25lZCBsb25nKUdldEN1cnJlbnRUYXNrKCkpOworI2VsaWYgZGVmaW5lZChPUEVOU1NMX1NZU19XSU4zMikKKwlDUllQVE9fVEhSRUFESURfc2V0X251bWVyaWMoaWQsICh1bnNpZ25lZCBsb25nKUdldEN1cnJlbnRUaHJlYWRJZCgpKTsKKyNlbGlmIGRlZmluZWQoT1BFTlNTTF9TWVNfQkVPUykKKwlDUllQVE9fVEhSRUFESURfc2V0X251bWVyaWMoaWQsICh1bnNpZ25lZCBsb25nKWZpbmRfdGhyZWFkKE5VTEwpKTsKKyNlbHNlCisJLyogRm9yIGV2ZXJ5dGhpbmcgZWxzZSwgZGVmYXVsdCB0byB1c2luZyB0aGUgYWRkcmVzcyBvZiAnZXJybm8nICovCisJQ1JZUFRPX1RIUkVBRElEX3NldF9wb2ludGVyKGlkLCAmZXJybm8pOworI2VuZGlmCisJfQorCitpbnQgQ1JZUFRPX1RIUkVBRElEX2NtcChjb25zdCBDUllQVE9fVEhSRUFESUQgKmEsIGNvbnN0IENSWVBUT19USFJFQURJRCAqYikKKwl7CisJcmV0dXJuIG1lbWNtcChhLCBiLCBzaXplb2YoKmEpKTsKKwl9CisKK3ZvaWQgQ1JZUFRPX1RIUkVBRElEX2NweShDUllQVE9fVEhSRUFESUQgKmRlc3QsIGNvbnN0IENSWVBUT19USFJFQURJRCAqc3JjKQorCXsKKwltZW1jcHkoZGVzdCwgc3JjLCBzaXplb2YoKnNyYykpOworCX0KKwordW5zaWduZWQgbG9uZyBDUllQVE9fVEhSRUFESURfaGFzaChjb25zdCBDUllQVE9fVEhSRUFESUQgKmlkKQorCXsKKwlyZXR1cm4gaWQtPnZhbDsKKwl9CisKKyNpZm5kZWYgT1BFTlNTTF9OT19ERVBSRUNBVEVECiB1bnNpZ25lZCBsb25nICgqQ1JZUFRPX2dldF9pZF9jYWxsYmFjayh2b2lkKSkodm9pZCkKIAl7CiAJcmV0dXJuKGlkX2NhbGxiYWNrKTsKQEAgLTE3OCw2ICs1NDIsOCBAQAogCQlyZXQ9KHVuc2lnbmVkIGxvbmcpR2V0Q3VycmVudFRocmVhZElkKCk7CiAjZWxpZiBkZWZpbmVkKEdFVFBJRF9JU19NRUFOSU5HTEVTUykKIAkJcmV0PTFMOworI2VsaWYgZGVmaW5lZChPUEVOU1NMX1NZU19CRU9TKQorCQlyZXQ9KHVuc2lnbmVkIGxvbmcpZmluZF90aHJlYWQoTlVMTCk7CiAjZWxzZQogCQlyZXQ9KHVuc2lnbmVkIGxvbmcpZ2V0cGlkKCk7CiAjZW5kaWYKQEAgLTE4NiwxOSArNTUyLDEzIEBACiAJCXJldD1pZF9jYWxsYmFjaygpOwogCXJldHVybihyZXQpOwogCX0KLQotc3RhdGljIHZvaWQgKCpkb19keW5sb2NrX2NiKShpbnQgbW9kZSwgaW50IHR5cGUsIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKTsKLQotdm9pZCBpbnRfQ1JZUFRPX3NldF9kb19keW5sb2NrX2NhbGxiYWNrKAotCXZvaWQgKCpkeW5fY2IpKGludCBtb2RlLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUpKQotCXsKLQlkb19keW5sb2NrX2NiID0gZHluX2NiOwotCX0KKyNlbmRpZgogCiB2b2lkIENSWVBUT19sb2NrKGludCBtb2RlLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUpCiAJewogI2lmZGVmIExPQ0tfREVCVUcKIAkJeworCQlDUllQVE9fVEhSRUFESUQgaWQ7CiAJCWNoYXIgKnJ3X3RleHQsKm9wZXJhdGlvbl90ZXh0OwogCiAJCWlmIChtb2RlICYgQ1JZUFRPX0xPQ0spCkBAIC0yMTUsMTUgKzU3NSwyNSBAQAogCQllbHNlCiAJCQlyd190ZXh0PSJFUlJPUiI7CiAKKwkJQ1JZUFRPX1RIUkVBRElEX2N1cnJlbnQoJmlkKTsKIAkJZnByaW50ZihzdGRlcnIsImxvY2s6JTA4bHg6KCVzKSVzICUtMThzICVzOiVkXG4iLAotCQkJQ1JZUFRPX3RocmVhZF9pZCgpLCByd190ZXh0LCBvcGVyYXRpb25fdGV4dCwKKwkJCUNSWVBUT19USFJFQURJRF9oYXNoKCZpZCksIHJ3X3RleHQsIG9wZXJhdGlvbl90ZXh0LAogCQkJQ1JZUFRPX2dldF9sb2NrX25hbWUodHlwZSksIGZpbGUsIGxpbmUpOwogCQl9CiAjZW5kaWYKIAlpZiAodHlwZSA8IDApCiAJCXsKLQkJaWYgKGRvX2R5bmxvY2tfY2IpCi0JCQlkb19keW5sb2NrX2NiKG1vZGUsIHR5cGUsIGZpbGUsIGxpbmUpOworCQlpZiAoZHlubG9ja19sb2NrX2NhbGxiYWNrICE9IE5VTEwpCisJCQl7CisJCQlzdHJ1Y3QgQ1JZUFRPX2R5bmxvY2tfdmFsdWUgKnBvaW50ZXIKKwkJCQk9IENSWVBUT19nZXRfZHlubG9ja192YWx1ZSh0eXBlKTsKKworCQkJT1BFTlNTTF9hc3NlcnQocG9pbnRlciAhPSBOVUxMKTsKKworCQkJZHlubG9ja19sb2NrX2NhbGxiYWNrKG1vZGUsIHBvaW50ZXIsIGZpbGUsIGxpbmUpOworCisJCQlDUllQVE9fZGVzdHJveV9keW5sb2NraWQodHlwZSk7CisJCQl9CiAJCX0KIAllbHNlCiAJCWlmIChsb2NraW5nX2NhbGxiYWNrICE9IE5VTEwpCkBAIC0yNDMsMTEgKzYxMywxNCBAQAogCiAJCXJldD1hZGRfbG9ja19jYWxsYmFjayhwb2ludGVyLGFtb3VudCx0eXBlLGZpbGUsbGluZSk7CiAjaWZkZWYgTE9DS19ERUJVRworCQl7CisJCUNSWVBUT19USFJFQURJRCBpZDsKKwkJQ1JZUFRPX1RIUkVBRElEX2N1cnJlbnQoJmlkKTsKIAkJZnByaW50ZihzdGRlcnIsImxhZGQ6JTA4bHg6JTJkKyUyZC0+JTJkICUtMThzICVzOiVkXG4iLAotCQkJQ1JZUFRPX3RocmVhZF9pZCgpLAotCQkJYmVmb3JlLGFtb3VudCxyZXQsCisJCQlDUllQVE9fVEhSRUFESURfaGFzaCgmaWQpLCBiZWZvcmUsYW1vdW50LHJldCwKIAkJCUNSWVBUT19nZXRfbG9ja19uYW1lKHR5cGUpLAogCQkJZmlsZSxsaW5lKTsKKwkJfQogI2VuZGlmCiAJCX0KIAllbHNlCkBAIC0yNTYsMTEgKzYyOSwxNSBAQAogCiAJCXJldD0gKnBvaW50ZXIrYW1vdW50OwogI2lmZGVmIExPQ0tfREVCVUcKKwkJeworCQlDUllQVE9fVEhSRUFESUQgaWQ7CisJCUNSWVBUT19USFJFQURJRF9jdXJyZW50KCZpZCk7CiAJCWZwcmludGYoc3RkZXJyLCJsYWRkOiUwOGx4OiUyZCslMmQtPiUyZCAlLTE4cyAlczolZFxuIiwKLQkJCUNSWVBUT190aHJlYWRfaWQoKSwKKwkJCUNSWVBUT19USFJFQURJRF9oYXNoKCZpZCksCiAJCQkqcG9pbnRlcixhbW91bnQscmV0LAogCQkJQ1JZUFRPX2dldF9sb2NrX25hbWUodHlwZSksCiAJCQlmaWxlLGxpbmUpOworCQl9CiAjZW5kaWYKIAkJKnBvaW50ZXI9cmV0OwogCQlDUllQVE9fbG9jayhDUllQVE9fVU5MT0NLfENSWVBUT19XUklURSx0eXBlLGZpbGUsbGluZSk7CkBAIC0yNjgsNiArNjQ1LDE4IEBACiAJcmV0dXJuKHJldCk7CiAJfQogCitjb25zdCBjaGFyICpDUllQVE9fZ2V0X2xvY2tfbmFtZShpbnQgdHlwZSkKKwl7CisJaWYgKHR5cGUgPCAwKQorCQlyZXR1cm4oImR5bmFtaWMiKTsKKwllbHNlIGlmICh0eXBlIDwgQ1JZUFRPX05VTV9MT0NLUykKKwkJcmV0dXJuKGxvY2tfbmFtZXNbdHlwZV0pOworCWVsc2UgaWYgKHR5cGUtQ1JZUFRPX05VTV9MT0NLUyA+IHNrX09QRU5TU0xfU1RSSU5HX251bShhcHBfbG9ja3MpKQorCQlyZXR1cm4oIkVSUk9SIik7CisJZWxzZQorCQlyZXR1cm4oc2tfT1BFTlNTTF9TVFJJTkdfdmFsdWUoYXBwX2xvY2tzLHR5cGUtQ1JZUFRPX05VTV9MT0NLUykpOworCX0KKwogI2lmCWRlZmluZWQoX19pMzg2KSAgIHx8IGRlZmluZWQoX19pMzg2X18pICAgfHwgZGVmaW5lZChfTV9JWDg2KSB8fCBcCiAJZGVmaW5lZChfX0lOVEVMX18pIHx8IFwKIAlkZWZpbmVkKF9feDg2XzY0KSB8fCBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX01fQU1ENjQpIHx8IGRlZmluZWQoX01fWDY0KQpAQCAtMzAxLDcwICs2OTAsMTYgQEAKIHVuc2lnbmVkIGxvbmcgKk9QRU5TU0xfaWEzMmNhcF9sb2Modm9pZCkgeyByZXR1cm4gTlVMTDsgfQogI2VuZGlmCiBpbnQgT1BFTlNTTF9OT05QSUNfcmVsb2NhdGVkID0gMDsKLSNpZiAhZGVmaW5lZChPUEVOU1NMX0NQVUlEX1NFVFVQKQorI2lmICFkZWZpbmVkKE9QRU5TU0xfQ1BVSURfU0VUVVApICYmICFkZWZpbmVkKE9QRU5TU0xfQ1BVSURfT0JKKQogdm9pZCBPUEVOU1NMX2NwdWlkX3NldHVwKHZvaWQpIHt9CiAjZW5kaWYKIAogI2lmIChkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSkgJiYgZGVmaW5lZChfV0lORExMKQotCi0jaWZkZWYgT1BFTlNTTF9GSVBTCi0KLSNpbmNsdWRlIDx0bGhlbHAzMi5oPgotI2lmIGRlZmluZWQoX19HTlVDX18pICYmIF9fR05VQ19fPj0yCi1zdGF0aWMgaW50IERsbEluaXQodm9pZCkgX19hdHRyaWJ1dGVfXygoY29uc3RydWN0b3IpKTsKLSNlbGlmIGRlZmluZWQoX01TQ19WRVIpCi1zdGF0aWMgaW50IERsbEluaXQodm9pZCk7Ci0jIGlmZGVmIF9XSU42NAotIyBwcmFnbWEgc2VjdGlvbigiLkNSVCRYQ1UiLHJlYWQpCi0gIF9fZGVjbHNwZWMoYWxsb2NhdGUoIi5DUlQkWENVIikpCi0jIGVsc2UKLSMgcHJhZ21hIGRhdGFfc2VnKCIuQ1JUJFhDVSIpCi0jIGVuZGlmCi0gIHN0YXRpYyBpbnQgKCpwKSh2b2lkKSA9IERsbEluaXQ7Ci0jIHByYWdtYSBkYXRhX3NlZygpCi0jZW5kaWYKLQotc3RhdGljIGludCBEbGxJbml0KHZvaWQpCi17Ci0jaWYgZGVmaW5lZChfV0lOMzJfV0lOTlQpCi0JdW5pb24JeyBpbnQoKmYpKHZvaWQpOyBCWVRFICpwOyB9IHQgPSB7IERsbEluaXQgfTsKLSAgICAgICAgSEFORExFCWhNb2R1bGVTbmFwID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7Ci0JSU1BR0VfRE9TX0hFQURFUiAqZG9zX2hlYWRlcjsKLQlJTUFHRV9OVF9IRUFERVJTICpudF9oZWFkZXJzOwotCU1PRFVMRUVOVFJZMzIgbWUzMiA9IHtzaXplb2YobWUzMil9OwotCi0JaE1vZHVsZVNuYXAgPSBDcmVhdGVUb29saGVscDMyU25hcHNob3QoVEgzMkNTX1NOQVBNT0RVTEUsMCk7Ci0JaWYgKGhNb2R1bGVTbmFwICE9IElOVkFMSURfSEFORExFX1ZBTFVFICYmCi0JICAgIE1vZHVsZTMyRmlyc3QoaE1vZHVsZVNuYXAsJm1lMzIpKSBkbwotCQl7Ci0JCWlmICh0LnAgPj0gbWUzMi5tb2RCYXNlQWRkciAmJgotCQkgICAgdC5wIDwgIG1lMzIubW9kQmFzZUFkZHIrbWUzMi5tb2RCYXNlU2l6ZSkKLQkJCXsKLQkJCWRvc19oZWFkZXI9KElNQUdFX0RPU19IRUFERVIgKiltZTMyLm1vZEJhc2VBZGRyOwotCQkJaWYgKGRvc19oZWFkZXItPmVfbWFnaWM9PUlNQUdFX0RPU19TSUdOQVRVUkUpCi0JCQkJewotCQkJCW50X2hlYWRlcnM9KElNQUdFX05UX0hFQURFUlMgKikKLQkJCQkJKChCWVRFICopZG9zX2hlYWRlcitkb3NfaGVhZGVyLT5lX2xmYW5ldyk7Ci0JCQkJaWYgKG50X2hlYWRlcnMtPlNpZ25hdHVyZT09SU1BR0VfTlRfU0lHTkFUVVJFICYmCi0JCQkJICAgIG1lMzIubW9kQmFzZUFkZHIhPShCWVRFKiludF9oZWFkZXJzLT5PcHRpb25hbEhlYWRlci5JbWFnZUJhc2UpCi0JCQkJCU9QRU5TU0xfTk9OUElDX3JlbG9jYXRlZD0xOwotCQkJCX0KLQkJCWJyZWFrOwotCQkJfQotCQl9IHdoaWxlIChNb2R1bGUzMk5leHQoaE1vZHVsZVNuYXAsJm1lMzIpKTsKLQotCWlmIChoTW9kdWxlU25hcCAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKLQkJQ2xvc2VIYW5kbGUoaE1vZHVsZVNuYXApOwotI2VuZGlmCi0JT1BFTlNTTF9jcHVpZF9zZXR1cCgpOwotCXJldHVybiAwOwotfQotCi0jZWxzZQotCiAjaWZkZWYgX19DWUdXSU5fXwogLyogcGljayBETExfW1BST0NFU1N8VEhSRUFEXV9bQVRUQUNIfERFVEFDSF0gZGVmaW5pdGlvbnMgKi8KICNpbmNsdWRlIDx3aW5kb3dzLmg+CisvKiB0aGlzIGhhcyBzaWRlLWVmZmVjdCBvZiBfV0lOMzIgZ2V0dGluZyBkZWZpbmVkLCB3aGljaCBvdGhlcndpc2UKKyAqIGlzIG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIF9fQ1lHV0lOX18uLi4gKi8KICNlbmRpZgogCiAvKiBBbGwgd2UgcmVhbGx5IG5lZWQgdG8gZG8gaXMgcmVtb3ZlIHRoZSAnZXJyb3InIHN0YXRlIHdoZW4gYSB0aHJlYWQKQEAgLTQwNSwxMCArNzQwLDkgQEAKIAl9CiAjZW5kaWYKIAotI2VuZGlmCi0KICNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19DWUdXSU5fXykKICNpbmNsdWRlIDx0Y2hhci5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgogCiAjaWYgZGVmaW5lZChfV0lOMzJfV0lOTlQpICYmIF9XSU4zMl9XSU5OVD49MHgwMzMzCiBpbnQgT1BFTlNTTF9pc3NlcnZpY2Uodm9pZCkKQEAgLTUzOSw3ICs4NzMsMTMgQEAKIAlPUEVOU1NMX3Nob3dmYXRhbCgKIAkJIiVzKCVkKTogT3BlblNTTCBpbnRlcm5hbCBlcnJvciwgYXNzZXJ0aW9uIGZhaWxlZDogJXNcbiIsCiAJCWZpbGUsbGluZSxhc3NlcnRpb24pOworI2lmICFkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKQogCWFib3J0KCk7CisjZWxzZQorCS8qIFdpbjMyIGFib3J0KCkgY3VzdG9tYXJpbHkgc2hvd3MgYSBkaWFsb2csIGJ1dCB3ZSBqdXN0IGRpZCB0aGF0Li4uICovCisJcmFpc2UoU0lHQUJSVCk7CisJX2V4aXQoMyk7CisjZW5kaWYKIAl9CiAKIHZvaWQgKk9QRU5TU0xfc3RkZXJyKHZvaWQpCXsgcmV0dXJuIHN0ZGVycjsgfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2NyeXB0by1saWIuY29tIGIvY3J5cHRvL2NyeXB0by1saWIuY29tCmluZGV4IDk5NjA5ZDAuLjhmYTU2ZGQgMTAwNjQ0Ci0tLSBhL2NyeXB0by9jcnlwdG8tbGliLmNvbQorKysgYi9jcnlwdG8vY3J5cHRvLWxpYi5jb20KQEAgLTgyLDEzICs4MiwxMyBAQAogJCEKICQgRU5DUllQVF9UWVBFUyA9ICJCYXNpYywiKyAtCiAJCSAgIk9CSkVDVFMsIisgLQotCQkgICJNRDIsTUQ0LE1ENSxTSEEsTURDMixITUFDLFJJUEVNRCwiKyAtCi0JCSAgIkRFUyxSQzIsUkM0LFJDNSxJREVBLEJGLENBU1QsQ0FNRUxMSUEsU0VFRCwiKyAtCi0JCSAgIkJOLEVDLFJTQSxEU0EsRUNEU0EsREgsRUNESCxEU08sRU5HSU5FLEFFUywiKyAtCisJCSAgIk1EMixNRDQsTUQ1LFNIQSxNREMyLEhNQUMsUklQRU1ELFdIUkxQT09MLCIrIC0KKwkJICAiREVTLEFFUyxSQzIsUkM0LFJDNSxJREVBLEJGLENBU1QsQ0FNRUxMSUEsU0VFRCxNT0RFUywiKyAtCisJCSAgIkJOLEVDLFJTQSxEU0EsRUNEU0EsREgsRUNESCxEU08sRU5HSU5FLCIrIC0KIAkJICAiQlVGRkVSLEJJTyxTVEFDSyxMSEFTSCxSQU5ELEVSUiwiKyAtCi0JCSAgIkVWUCxFVlBfMixBU04xLEFTTjFfMixQRU0sWDUwOSxYNTA5VjMsIisgLQorCQkgICJFVlAsRVZQXzIsRVZQXzMsQVNOMSxBU04xXzIsUEVNLFg1MDksWDUwOVYzLCIrIC0KIAkJICAiQ09ORixUWFRfREIsUEtDUzcsUEtDUzEyLENPTVAsT0NTUCxVSSxLUkI1LCIrIC0KLQkJICAiU1RPUkUsQ01TLFBRVUVVRSxKUEFLRSIKKwkJICAiU1RPUkUsQ01TLFBRVUVVRSxUUyxKUEFLRSIKICQhIERlZmluZSBUaGUgT0JKIERpcmVjdG9yeS4KICQhCiAkIE9CSl9ESVIgOj0gU1lTJERJU0s6Wy0uJ0FSQ0gnLk9CSi5DUllQVE9dCkBAIC0xNjYsMTUgKzE2NiwxNiBAQAogJCBBUFBTX0RFUyA9ICJERVMvREVTLENCQzNfRU5DIgogJCBBUFBTX1BLQ1M3ID0gIkVOQy9FTkM7REVDL0RFQztTSUdOL1NJR047VkVSSUZZL1ZFUklGWSxFWEFNUExFIgogJAotJCBMSUJfID0gImNyeXB0bGliLGR5bl9sY2ssbWVtLG1lbV9jbHIsbWVtX2RiZyxjdmVyc2lvbixleF9kYXRhLHRtZGlmZixjcHRfZXJyLGViY2RpYyx1aWQsb190aW1lLG9fc3RyLG9fZGlyLG9faW5pdCxmaXBzX2VyciIKKyQgTElCXyA9ICJjcnlwdGxpYixtZW0sbWVtX2NscixtZW1fZGJnLGN2ZXJzaW9uLGV4X2RhdGEsY3B0X2VycixlYmNkaWMsdWlkLG9fdGltZSxvX3N0cixvX2RpciIKICQgTElCX01EMiA9ICJtZDJfZGdzdCxtZDJfb25lIgogJCBMSUJfTUQ0ID0gIm1kNF9kZ3N0LG1kNF9vbmUiCiAkIExJQl9NRDUgPSAibWQ1X2Rnc3QsbWQ1X29uZSIKICQgTElCX1NIQSA9ICJzaGFfZGdzdCxzaGExZGdzdCxzaGFfb25lLHNoYTFfb25lLHNoYTI1NixzaGE1MTIiCiAkIExJQl9NREMyID0gIm1kYzJkZ3N0LG1kYzJfb25lIgotJCBMSUJfSE1BQyA9ICJobWFjIgorJCBMSUJfSE1BQyA9ICJobWFjLGhtX2FtZXRoLGhtX3BtZXRoIgogJCBMSUJfUklQRU1EID0gInJtZF9kZ3N0LHJtZF9vbmUiCi0kIExJQl9ERVMgPSAiZGVzX2xpYixzZXRfa2V5LGVjYl9lbmMsY2JjX2VuYywiKyAtCiskIExJQl9XSFJMUE9PTCA9ICJ3cF9kZ3N0LHdwX2Jsb2NrIgorJCBMSUJfREVTID0gInNldF9rZXksZWNiX2VuYyxjYmNfZW5jLCIrIC0KIAkiZWNiM19lbmMsY2ZiNjRlbmMsY2ZiNjRlZGUsY2ZiX2VuYyxvZmI2NGVkZSwiKyAtCiAJImVuY19yZWFkLGVuY193cml0LG9mYjY0ZW5jLCIrIC0KIAkib2ZiX2VuYyxzdHIya2V5LHBjYmNfZW5jLHF1ZF9ja3NtLHJhbmRfa2V5LCIrIC0KQEAgLTE4OSw3ICsxOTAsOCBAQAogJCBMSUJfQ0FTVCA9ICJjX3NrZXksY19lY2IsY19lbmMsY19jZmI2NCxjX29mYjY0IgogJCBMSUJfQ0FNRUxMSUEgPSAiY2FtZWxsaWEsY21sbF9taXNjLGNtbGxfZWNiLGNtbGxfY2JjLGNtbGxfb2ZiLCIrIC0KIAkiY21sbF9jZmIsY21sbF9jdHIiCi0kIExJQl9TRUVEID0gInNlZWQsc2VlZF9jYmMsc2VlZF9lY2Isc2VlZF9jZmIsc2VlZF9vZmIiCiskIExJQl9TRUVEID0gInNlZWQsc2VlZF9lY2Isc2VlZF9jYmMsc2VlZF9jZmIsc2VlZF9vZmIiCiskIExJQl9NT0RFUyA9ICJjYmMxMjgsY3RyMTI4LGNmYjEyOCxvZmIxMjgiCiAkIExJQl9CTl9BU00gPSAiWy5hc21ddm1zLm1hcix2bXMtaGVscGVyIgogJCBJRiBGJFRSTkxOTSgiT1BFTlNTTF9OT19BU00iKSAuT1IuIEFSQ0ggLk5FUy4gIlZBWCIgVEhFTiAtCiAgICAgIExJQl9CTl9BU00gPSAiYm5fYXNtIgpAQCAtMTk3LDI4ICsxOTksMzAgQEAKIAkiYm5fcHJpbnQsYm5fcmFuZCxibl9zaGlmdCxibl93b3JkLGJuX2JsaW5kLCIrIC0KIAkiYm5fa3Jvbixibl9zcXJ0LGJuX2djZCxibl9wcmltZSxibl9lcnIsYm5fc3FyLCIrTElCX0JOX0FTTSsiLCIrIC0KIAkiYm5fcmVjcCxibl9tb250LGJuX21waSxibl9leHAyLGJuX2dmMm0sYm5fbmlzdCwiKyAtCi0JImJuX2RlcHIsYm5feDkzMXAsYm5fY29uc3QsYm5fb3B0IgorCSJibl9kZXByLGJuX2NvbnN0IgogJCBMSUJfRUMgPSAiZWNfbGliLGVjcF9zbXBsLGVjcF9tb250LGVjcF9uaXN0LGVjX2N2dCxlY19tdWx0LCIrIC0KIAkiZWNfZXJyLGVjX2N1cnZlLGVjX2NoZWNrLGVjX3ByaW50LGVjX2FzbjEsZWNfa2V5LCIrIC0KLQkiZWMyX3NtcGwsZWMyX211bHQiCisJImVjMl9zbXBsLGVjMl9tdWx0LGVjX2FtZXRoLGVjX3BtZXRoLGVja19wcm4iCiAkIExJQl9SU0EgPSAicnNhX2VheSxyc2FfZ2VuLHJzYV9saWIscnNhX3NpZ24scnNhX3Nhb3MscnNhX2VyciwiKyAtCiAJInJzYV9wazEscnNhX3NzbCxyc2Ffbm9uZSxyc2Ffb2FlcCxyc2FfY2hrLHJzYV9udWxsLCIrIC0KLQkicnNhX3Bzcyxyc2FfeDkzMSxyc2FfeDkzMWcscnNhX2FzbjEscnNhX2RlcHIscnNhX2VuZyIKKwkicnNhX3Bzcyxyc2FfeDkzMSxyc2FfYXNuMSxyc2FfZGVwcixyc2FfYW1ldGgscnNhX3BybiwiKyAtCisJInJzYV9wbWV0aCIKICQgTElCX0RTQSA9ICJkc2FfZ2VuLGRzYV9rZXksZHNhX2xpYixkc2FfYXNuMSxkc2FfdnJmLGRzYV9zaWduLCIrIC0KLQkiZHNhX2Vycixkc2Ffb3NzbCxkc2FfZGVwcixkc2FfdXRsIgorCSJkc2FfZXJyLGRzYV9vc3NsLGRzYV9kZXByLGRzYV9hbWV0aCxkc2FfcG1ldGgsZHNhX3BybiIKICQgTElCX0VDRFNBID0gImVjc19saWIsZWNzX2FzbjEsZWNzX29zc2wsZWNzX3NpZ24sZWNzX3ZyZixlY3NfZXJyIgotJCBMSUJfREggPSAiZGhfYXNuMSxkaF9nZW4sZGhfa2V5LGRoX2xpYixkaF9jaGVjayxkaF9lcnIsZGhfZGVwciIKKyQgTElCX0RIID0gImRoX2FzbjEsZGhfZ2VuLGRoX2tleSxkaF9saWIsZGhfY2hlY2ssZGhfZXJyLGRoX2RlcHIsIisgLQorCSJkaF9hbWV0aCxkaF9wbWV0aCxkaF9wcm4iCiAkIExJQl9FQ0RIID0gImVjaF9saWIsZWNoX29zc2wsZWNoX2tleSxlY2hfZXJyIgogJCBMSUJfRFNPID0gImRzb19kbCxkc29fZGxmY24sZHNvX2Vycixkc29fbGliLGRzb19udWxsLCIrIC0KLQkiZHNvX29wZW5zc2wsZHNvX3dpbjMyLGRzb192bXMiCisJImRzb19vcGVuc3NsLGRzb193aW4zMixkc29fdm1zLGRzb19iZW9zIgogJCBMSUJfRU5HSU5FID0gImVuZ19lcnIsZW5nX2xpYixlbmdfbGlzdCxlbmdfaW5pdCxlbmdfY3RybCwiKyAtCiAJImVuZ190YWJsZSxlbmdfcGtleSxlbmdfZmF0LGVuZ19hbGwsIisgLQogCSJ0Yl9yc2EsdGJfZHNhLHRiX2VjZHNhLHRiX2RoLHRiX2VjZGgsdGJfcmFuZCx0Yl9zdG9yZSwiKyAtCi0JInRiX2NpcGhlcix0Yl9kaWdlc3QsIisgLQotCSJlbmdfb3BlbnNzbCxlbmdfZHluLGVuZ19jbmYsZW5nX2NyeXB0b2RldixlbmdfcGFkbG9jayIKLSQgTElCX0FFUyA9ICJhZXNfY29yZSxhZXNfbWlzYyxhZXNfZWNiLGFlc19jYmMsYWVzX2NmYixhZXNfb2ZiLCIrIC0KLQkiYWVzX2N0cixhZXNfaWdlLGFlc193cmFwIgotJCBMSUJfQlVGRkVSID0gImJ1ZmZlcixidWZfc3RyLGJ1Zl9lcnIiCisJInRiX2NpcGhlcix0Yl9kaWdlc3QsdGJfcGttZXRoLHRiX2Fzbm10aCwiKyAtCisJImVuZ19vcGVuc3NsLGVuZ19keW4sZW5nX2NuZixlbmdfY3J5cHRvZGV2IgorJCBMSUJfQUVTID0gImFlc19jb3JlLGFlc19taXNjLGFlc19lY2IsYWVzX2NiYyxhZXNfY2ZiLGFlc19vZmIsYWVzX2N0ciwiKyAtCisJImFlc19pZ2UsYWVzX3dyYXAiCiskIExJQl9CVUZGRVIgPSAiYnVmZmVyLGJ1Zl9lcnIiCiAkIExJQl9CSU8gPSAiYmlvX2xpYixiaW9fY2IsYmlvX2VyciwiKyAtCiAJImJzc19tZW0sYnNzX251bGwsYnNzX2ZkLCIrIC0KIAkiYnNzX2ZpbGUsYnNzX3NvY2ssYnNzX2Nvbm4sIisgLQpAQCAtMjMwLDMzICsyMzQsMzQgQEAKICQgTElCX0xIQVNIID0gImxoYXNoLGxoX3N0YXRzIgogJCBMSUJfUkFORCA9ICJtZF9yYW5kLHJhbmRmaWxlLHJhbmRfbGliLHJhbmRfZXJyLHJhbmRfZWdkLCIrIC0KIAkicmFuZF92bXMiCi0kIExJQl9FUlIgPSAiZXJyLGVycl9kZWYsZXJyX2FsbCxlcnJfcHJuLGVycl9zdHIsZXJyX2JpbyIKLSQgTElCX09CSkVDVFMgPSAib19uYW1lcyxvYmpfZGF0LG9ial9saWIsb2JqX2VyciIKLSQgTElCX0VWUCA9ICJlbmNvZGUsZGlnZXN0LGRpZ19lbmcsZXZwX2VuYyxldnBfa2V5LGV2cF9hY25mLGV2cF9jbmYsIisgLQorJCBMSUJfRVJSID0gImVycixlcnJfYWxsLGVycl9wcm4iCiskIExJQl9PQkpFQ1RTID0gIm9fbmFtZXMsb2JqX2RhdCxvYmpfbGliLG9ial9lcnIsb2JqX3hyZWYiCiskIExJQl9FVlAgPSAiZW5jb2RlLGRpZ2VzdCxldnBfZW5jLGV2cF9rZXksZXZwX2FjbmYsIisgLQogCSJlX2RlcyxlX2JmLGVfaWRlYSxlX2RlczMsZV9jYW1lbGxpYSwiKyAtCiAJImVfcmM0LGVfYWVzLG5hbWVzLGVfc2VlZCwiKyAtCi0JImVfeGNiY19kLGVfcmMyLGVfY2FzdCxlX3JjNSxlbmNfbWluIgotJCBMSUJfRVZQXzIgPSAibV9udWxsLG1fbWQyLG1fbWQ0LG1fbWQ1LG1fc2hhLG1fc2hhMSwiICsgLQorCSJlX3hjYmNfZCxlX3JjMixlX2Nhc3QsZV9yYzUiCiskIExJQl9FVlBfMiA9ICJtX251bGwsbV9tZDIsbV9tZDQsbV9tZDUsbV9zaGEsbV9zaGExLG1fd3AsIiArIC0KIAkibV9kc3MsbV9kc3MxLG1fbWRjMixtX3JpcGVtZCxtX2VjZHNhLCIrIC0KIAkicF9vcGVuLHBfc2VhbCxwX3NpZ24scF92ZXJpZnkscF9saWIscF9lbmMscF9kZWMsIisgLQogCSJiaW9fbWQsYmlvX2I2NCxiaW9fZW5jLGV2cF9lcnIsZV9udWxsLCIrIC0KIAkiY19hbGwsY19hbGxjLGNfYWxsZCxldnBfbGliLGJpb19vaywiKy0KIAkiZXZwX3BrZXksZXZwX3BiZSxwNV9jcnB0LHA1X2NycHQyIgotJCBMSUJfRVZQXzMgPSAiZV9vbGQiCiskIExJQl9FVlBfMyA9ICJlX29sZCxwbWV0aF9saWIscG1ldGhfZm4scG1ldGhfZ24sbV9zaWd2ZXIiCiAkIExJQl9BU04xID0gImFfb2JqZWN0LGFfYml0c3RyLGFfdXRjdG0sYV9nZW50bSxhX3RpbWUsYV9pbnQsYV9vY3RldCwiKyAtCiAJImFfcHJpbnQsYV90eXBlLGFfc2V0LGFfZHVwLGFfZDJpX2ZwLGFfaTJkX2ZwLCIrIC0KIAkiYV9lbnVtLGFfdXRmOCxhX3NpZ24sYV9kaWdlc3QsYV92ZXJpZnksYV9tYnN0cixhX3N0cmV4LCIrIC0KIAkieF9hbGdvcix4X3ZhbCx4X3B1YmtleSx4X3NpZyx4X3JlcSx4X2F0dHJpYix4X2JpZ251bSwiKyAtCiAJInhfbG9uZyx4X25hbWUseF94NTA5LHhfeDUwOWEseF9jcmwseF9pbmZvLHhfc3BraSxuc3NlcSwiKyAtCi0JImQyaV9wdSxkMmlfcHIsaTJkX3B1LGkyZF9wciIKKwkieF9ueDUwOSxkMmlfcHUsZDJpX3ByLGkyZF9wdSxpMmRfcHIiCiAkIExJQl9BU04xXzIgPSAidF9yZXEsdF94NTA5LHRfeDUwOWEsdF9jcmwsdF9wa2V5LHRfc3BraSx0X2JpdHN0LCIrIC0KIAkidGFzbl9uZXcsdGFzbl9mcmUsdGFzbl9lbmMsdGFzbl9kZWMsdGFzbl91dGwsdGFzbl90eXAsIisgLQorCSJ0YXNuX3BybixhbWV0aF9saWIsIisgLQogCSJmX2ludCxmX3N0cmluZyxuX3BrZXksIisgLQotCSJmX2VudW0sYV9oZHIseF9wa2V5LGFfYm9vbCx4X2V4dGVuLGFzbl9taW1lLCIrIC0KLQkiYXNuMV9nZW4sYXNuMV9wYXIsYXNuMV9saWIsYXNuMV9lcnIsYV9tZXRoLGFfYnl0ZXMsYV9zdHJuaWQsIisgLQorCSJmX2VudW0seF9wa2V5LGFfYm9vbCx4X2V4dGVuLGJpb19hc24xLGJpb19uZGVmLGFzbl9taW1lLCIrIC0KKwkiYXNuMV9nZW4sYXNuMV9wYXIsYXNuMV9saWIsYXNuMV9lcnIsYV9ieXRlcyxhX3N0cm5pZCwiKyAtCiAJImV2cF9hc24xLGFzbl9wYWNrLHA1X3BiZSxwNV9wYmV2MixwOF9wa2V5LGFzbl9tb2lkIgogJCBMSUJfUEVNID0gInBlbV9zaWduLHBlbV9zZWFsLHBlbV9pbmZvLHBlbV9saWIscGVtX2FsbCxwZW1fZXJyLCIrIC0KLQkicGVtX3g1MDkscGVtX3hhdXgscGVtX290aCxwZW1fcGs4LHBlbV9wa2V5IgorCSJwZW1feDUwOSxwZW1feGF1eCxwZW1fb3RoLHBlbV9wazgscGVtX3BrZXkscHZrZm10IgogJCBMSUJfWDUwOSA9ICJ4NTA5X2RlZix4NTA5X2QyLHg1MDlfcjJ4LHg1MDlfY21wLCIrIC0KIAkieDUwOV9vYmoseDUwOV9yZXEseDUwOXNwa2kseDUwOV92ZnksIisgLQogCSJ4NTA5X3NldCx4NTA5Y3NldCx4NTA5cnNldCx4NTA5X2VyciwiKyAtCkBAIC0yNzIsNyArMjc3LDcgQEAKICQgTElCX0NPTkYgPSAiY29uZl9lcnIsY29uZl9saWIsY29uZl9hcGksY29uZl9kZWYsY29uZl9tb2QsY29uZl9tYWxsLGNvbmZfc2FwIgogJCBMSUJfVFhUX0RCID0gInR4dF9kYiIKICQgTElCX1BLQ1M3ID0gInBrN19hc24xLHBrN19saWIscGtjczdlcnIscGs3X2RvaXQscGs3X3NtaW1lLHBrN19hdHRyLCIrIC0KLQkicGs3X21pbWUiCisJInBrN19taW1lLGJpb19wazciCiAkIExJQl9QS0NTMTIgPSAicDEyX2FkZCxwMTJfYXNuLHAxMl9hdHRyLHAxMl9jcnB0LHAxMl9jcnQscDEyX2RlY3IsIisgLQogCSJwMTJfaW5pdCxwMTJfa2V5LHAxMl9raXNzLHAxMl9tdXRsLCIrIC0KIAkicDEyX3V0bCxwMTJfbnBhcyxwazEyZXJyLHAxMl9wOGQscDEyX3A4ZSIKQEAgLTI4Nyw2ICsyOTIsOSBAQAogJCBMSUJfQ01TID0gImNtc19saWIsY21zX2FzbjEsY21zX2F0dCxjbXNfaW8sY21zX3NtaW1lLGNtc19lcnIsIisgLQogCSJjbXNfc2QsY21zX2RkLGNtc19jZCxjbXNfZW52LGNtc19lbmMsY21zX2VzcyIKICQgTElCX1BRVUVVRSA9ICJwcXVldWUiCiskIExJQl9UUyA9ICJ0c19lcnIsdHNfcmVxX3V0aWxzLHRzX3JlcV9wcmludCx0c19yc3BfdXRpbHMsdHNfcnNwX3ByaW50LCIrIC0KKwkidHNfcnNwX3NpZ24sdHNfcnNwX3ZlcmlmeSx0c192ZXJpZnlfY3R4LHRzX2xpYix0c19jb25mLCIrIC0KKwkidHNfYXNuMSIKICQgTElCX0pQQUtFID0gImpwYWtlLGpwYWtlX2VyciIKICQhCiAkISBTZXR1cCBleGNlcHRpb25hbCBjb21waWxhdGlvbnMKQEAgLTEwMjYsNyArMTAzNCw3IEBACiAJIFRIRU4gQ0MgPSAiQ0MvREVDQyIKICQgICAgIENDID0gQ0MgKyAiLycnQ0NfT1BUSU1JWkUnLycnREVCVUdHRVInL1NUQU5EQVJEPUFOU0k4OSIgKyAtCiAgICAgICAgICAgICIvTk9MSVNUL1BSRUZJWD1BTEwiICsgLQotCSAgICIvSU5DTFVERT0oU1lTJERJU0s6W10sU1lTJERJU0s6Wy4nJ0FSQ0gnXSxTWVMkRElTSzpbLV0sU1lTJERJU0s6Wy5FTkdJTkUuVkVORE9SX0RFRk5TXSxTWVMkRElTSzpbLkVWUF0pIiArIC0KKwkgICAiL0lOQ0xVREU9KFNZUyRESVNLOltdLFNZUyRESVNLOlsuJydBUkNIJ10sU1lTJERJU0s6Wy1dLFNZUyRESVNLOlsuRU5HSU5FLlZFTkRPUl9ERUZOU10sU1lTJERJU0s6Wy5FVlBdLFNZUyRESVNLOlsuQVNOMV0pIiArIC0KIAkgICBDQ0VYVFJBRkxBR1MKICQhCiAkISAgICBEZWZpbmUgVGhlIExpbmtlciBPcHRpb25zIEZpbGUgTmFtZS4KQEAgLTEwNjAsNyArMTA2OCw3IEBACiAkICAgICBFTkRJRgogJCAgICAgSUYgRiRUUk5MTk0oIkRFQ0MkQ0NfREVGQVVMVCIpLkVRUy4iL0RFQ0MiIFRIRU4gQ0MgPSAiQ0MvVkFYQyIKICQgICAgIENDID0gQ0MgKyAiLycnQ0NfT1BUSU1JWkUnLycnREVCVUdHRVInL05PTElTVCIgKyAtCi0JICAgIi9JTkNMVURFPShTWVMkRElTSzpbXSxTWVMkRElTSzpbLicnQVJDSCddLFNZUyRESVNLOlstXSxTWVMkRElTSzpbLkVOR0lORS5WRU5ET1JfREVGTlNdKSIgKyAtCisJICAgIi9JTkNMVURFPShTWVMkRElTSzpbXSxTWVMkRElTSzpbLicnQVJDSCddLFNZUyRESVNLOlstXSxTWVMkRElTSzpbLkVOR0lORS5WRU5ET1JfREVGTlNdLFNZUyRESVNLOlsuRVZQXSxTWVMkRElTSzpbLkFTTjFdKSIgKyAtCiAJICAgQ0NFWFRSQUZMQUdTCiAkICAgICBDQ0RFRlMgPSAiIiJWQVhDIiIsIiArIENDREVGUwogJCEKQEAgLTEwOTIsNyArMTEwMCw3IEBACiAkISAgICBVc2UgR05VIEMuLi4KICQhCiAkICAgICBDQyA9ICJHQ0MvTk9DQVNFX0hBQ0svJydHQ0NfT1BUSU1JWkUnLycnREVCVUdHRVInL05PTElTVCIgKyAtCi0JICAgIi9JTkNMVURFPShTWVMkRElTSzpbXSxTWVMkRElTSzpbLicnQVJDSCddLFNZUyRESVNLOlstXSxTWVMkRElTSzpbLkVOR0lORS5WRU5ET1JfREVGTlNdKSIgKyAtCisJICAgIi9JTkNMVURFPShTWVMkRElTSzpbXSxTWVMkRElTSzpbLicnQVJDSCddLFNZUyRESVNLOlstXSxTWVMkRElTSzpbLkVOR0lORS5WRU5ET1JfREVGTlNdLFNZUyRESVNLOlsuRVZQXSxTWVMkRElTSzpbLkFTTjFdKSIgKyAtCiAJICAgQ0NFWFRSQUZMQUdTCiAkIQogJCEgICAgRGVmaW5lIFRoZSBMaW5rZXIgT3B0aW9ucyBGaWxlIE5hbWUuCmRpZmYgLS1naXQgYS9jcnlwdG8vY3J5cHRvLmggYi9jcnlwdG8vY3J5cHRvLmgKaW5kZXggMGU0ZmIwNy4uYjAzNjBjZSAxMDA2NDQKLS0tIGEvY3J5cHRvL2NyeXB0by5oCisrKyBiL2NyeXB0by9jcnlwdG8uaApAQCAtMSw2ICsxLDYgQEAKIC8qIGNyeXB0by9jcnlwdG8uaCAqLwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIxOSwxMyArMjE5LDkgQEAKICNkZWZpbmUgQ1JZUFRPX0xPQ0tfRUNfUFJFX0NPTVAJCTM2CiAjZGVmaW5lIENSWVBUT19MT0NLX1NUT1JFCQkzNwogI2RlZmluZSBDUllQVE9fTE9DS19DT01QCQkzOAotI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSNkZWZpbmUgQ1JZUFRPX05VTV9MT0NLUwkJMzkKLSNlbHNlCiAjZGVmaW5lIENSWVBUT19MT0NLX0ZJUFMJCTM5CiAjZGVmaW5lIENSWVBUT19MT0NLX0ZJUFMyCQk0MAogI2RlZmluZSBDUllQVE9fTlVNX0xPQ0tTCQk0MQotI2VuZGlmCiAKICNkZWZpbmUgQ1JZUFRPX0xPQ0sJCTEKICNkZWZpbmUgQ1JZUFRPX1VOTE9DSwkJMgpAQCAtMjg4LDkgKzI4NCwxMCBAQAogCiBzdHJ1Y3QgY3J5cHRvX2V4X2RhdGFfc3QKIAl7Ci0JU1RBQ0sgKnNrOworCVNUQUNLX09GKHZvaWQpICpzazsKIAlpbnQgZHVtbXk7IC8qIGdjYyBpcyBzY3Jld2luZyB1cCB0aGlzIGRhdGEgc3RydWN0dXJlIDotKCAqLwogCX07CitERUNMQVJFX1NUQUNLX09GKHZvaWQpCiAKIC8qIFRoaXMgc3R1ZmYgaXMgYmFzaWNhbGx5IGNsYXNzIGNhbGxiYWNrIGZ1bmN0aW9ucwogICogVGhlIGN1cnJlbnQgY2xhc3NlcyBhcmUgU1NMX0NUWCwgU1NMLCBTU0xfU0VTU0lPTiwgYW5kIGEgZmV3IG1vcmUgKi8KQEAgLTM0Nyw3ICszNDQsMTQgQEAKIAogLyogU2V0IHN0YW5kYXJkIGRlYnVnZ2luZyBmdW5jdGlvbnMgKG5vdCBkb25lIGJ5IGRlZmF1bHQKICAqIHVubGVzcyBDUllQVE9fTURFQlVHIGlzIGRlZmluZWQpICovCi12b2lkIENSWVBUT19tYWxsb2NfZGVidWdfaW5pdCh2b2lkKTsKKyNkZWZpbmUgQ1JZUFRPX21hbGxvY19kZWJ1Z19pbml0KCkJZG8ge1wKKwlDUllQVE9fc2V0X21lbV9kZWJ1Z19mdW5jdGlvbnMoXAorCQlDUllQVE9fZGJnX21hbGxvYyxcCisJCUNSWVBUT19kYmdfcmVhbGxvYyxcCisJCUNSWVBUT19kYmdfZnJlZSxcCisJCUNSWVBUT19kYmdfc2V0X29wdGlvbnMsXAorCQlDUllQVE9fZGJnX2dldF9vcHRpb25zKTtcCisJfSB3aGlsZSgwKQogCiBpbnQgQ1JZUFRPX21lbV9jdHJsKGludCBtb2RlKTsKIGludCBDUllQVE9faXNfbWVtX2NoZWNrX29uKHZvaWQpOwpAQCAtNDIwLDE2ICs0MjQsMzIgQEAKIAkJCQkJICAgICAgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUpKTsKIGludCAoKkNSWVBUT19nZXRfYWRkX2xvY2tfY2FsbGJhY2sodm9pZCkpKGludCAqbnVtLGludCBtb3VudCxpbnQgdHlwZSwKIAkJCQkJICBjb25zdCBjaGFyICpmaWxlLGludCBsaW5lKTsKKworLyogRG9uJ3QgdXNlIHRoaXMgc3RydWN0dXJlIGRpcmVjdGx5LiAqLwordHlwZWRlZiBzdHJ1Y3QgY3J5cHRvX3RocmVhZGlkX3N0CisJeworCXZvaWQgKnB0cjsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwl9IENSWVBUT19USFJFQURJRDsKKy8qIE9ubHkgdXNlIENSWVBUT19USFJFQURJRF9zZXRfW251bWVyaWN8cG9pbnRlcl0oKSB3aXRoaW4gY2FsbGJhY2tzICovCit2b2lkIENSWVBUT19USFJFQURJRF9zZXRfbnVtZXJpYyhDUllQVE9fVEhSRUFESUQgKmlkLCB1bnNpZ25lZCBsb25nIHZhbCk7Cit2b2lkIENSWVBUT19USFJFQURJRF9zZXRfcG9pbnRlcihDUllQVE9fVEhSRUFESUQgKmlkLCB2b2lkICpwdHIpOworaW50IENSWVBUT19USFJFQURJRF9zZXRfY2FsbGJhY2sodm9pZCAoKnRocmVhZGlkX2Z1bmMpKENSWVBUT19USFJFQURJRCAqKSk7Cit2b2lkICgqQ1JZUFRPX1RIUkVBRElEX2dldF9jYWxsYmFjayh2b2lkKSkoQ1JZUFRPX1RIUkVBRElEICopOwordm9pZCBDUllQVE9fVEhSRUFESURfY3VycmVudChDUllQVE9fVEhSRUFESUQgKmlkKTsKK2ludCBDUllQVE9fVEhSRUFESURfY21wKGNvbnN0IENSWVBUT19USFJFQURJRCAqYSwgY29uc3QgQ1JZUFRPX1RIUkVBRElEICpiKTsKK3ZvaWQgQ1JZUFRPX1RIUkVBRElEX2NweShDUllQVE9fVEhSRUFESUQgKmRlc3QsIGNvbnN0IENSWVBUT19USFJFQURJRCAqc3JjKTsKK3Vuc2lnbmVkIGxvbmcgQ1JZUFRPX1RIUkVBRElEX2hhc2goY29uc3QgQ1JZUFRPX1RIUkVBRElEICppZCk7CisjaWZuZGVmIE9QRU5TU0xfTk9fREVQUkVDQVRFRAogdm9pZCBDUllQVE9fc2V0X2lkX2NhbGxiYWNrKHVuc2lnbmVkIGxvbmcgKCpmdW5jKSh2b2lkKSk7CiB1bnNpZ25lZCBsb25nICgqQ1JZUFRPX2dldF9pZF9jYWxsYmFjayh2b2lkKSkodm9pZCk7CiB1bnNpZ25lZCBsb25nIENSWVBUT190aHJlYWRfaWQodm9pZCk7CisjZW5kaWYKKwogY29uc3QgY2hhciAqQ1JZUFRPX2dldF9sb2NrX25hbWUoaW50IHR5cGUpOwogaW50IENSWVBUT19hZGRfbG9jayhpbnQgKnBvaW50ZXIsaW50IGFtb3VudCxpbnQgdHlwZSwgY29uc3QgY2hhciAqZmlsZSwKIAkJICAgIGludCBsaW5lKTsKIAotdm9pZCBpbnRfQ1JZUFRPX3NldF9kb19keW5sb2NrX2NhbGxiYWNrKAotCXZvaWQgKCpkb19keW5sb2NrX2NiKShpbnQgbW9kZSwgaW50IHR5cGUsIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKSk7Ci0KIGludCBDUllQVE9fZ2V0X25ld19keW5sb2NraWQodm9pZCk7CiB2b2lkIENSWVBUT19kZXN0cm95X2R5bmxvY2tpZChpbnQgaSk7CiBzdHJ1Y3QgQ1JZUFRPX2R5bmxvY2tfdmFsdWUgKkNSWVBUT19nZXRfZHlubG9ja192YWx1ZShpbnQgaSk7CkBAIC00NTQsMTAgKzQ3NCw2IEBACiAJCQkJICAgdm9pZCAoKmYpKHZvaWQgKixpbnQpLAogCQkJCSAgIHZvaWQgKCpzbykobG9uZyksCiAJCQkJICAgbG9uZyAoKmdvKSh2b2lkKSk7Ci12b2lkIENSWVBUT19zZXRfbWVtX2luZm9fZnVuY3Rpb25zKAotCWludCAgKCpwdXNoX2luZm9fZm4pKGNvbnN0IGNoYXIgKmluZm8sIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKSwKLQlpbnQgICgqcG9wX2luZm9fZm4pKHZvaWQpLAotCWludCAoKnJlbW92ZV9hbGxfaW5mb19mbikodm9pZCkpOwogdm9pZCBDUllQVE9fZ2V0X21lbV9mdW5jdGlvbnModm9pZCAqKCoqbSkoc2l6ZV90KSx2b2lkICooKipyKSh2b2lkICosIHNpemVfdCksIHZvaWQgKCoqZikodm9pZCAqKSk7CiB2b2lkIENSWVBUT19nZXRfbG9ja2VkX21lbV9mdW5jdGlvbnModm9pZCAqKCoqbSkoc2l6ZV90KSwgdm9pZCAoKipmKSh2b2lkICopKTsKIHZvaWQgQ1JZUFRPX2dldF9tZW1fZXhfZnVuY3Rpb25zKHZvaWQgKigqKm0pKHNpemVfdCxjb25zdCBjaGFyICosaW50KSwKQEAgLTUxNCw5ICs1MzAsNiBAQAogdm9pZCBDUllQVE9fZGJnX3NldF9vcHRpb25zKGxvbmcgYml0cyk7CiBsb25nIENSWVBUT19kYmdfZ2V0X29wdGlvbnModm9pZCk7CiAKLWludCBDUllQVE9fZGJnX3B1c2hfaW5mbyhjb25zdCBjaGFyICppbmZvLCBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSk7Ci1pbnQgQ1JZUFRPX2RiZ19wb3BfaW5mbyh2b2lkKTsKLWludCBDUllQVE9fZGJnX3JlbW92ZV9hbGxfaW5mbyh2b2lkKTsKIAogI2lmbmRlZiBPUEVOU1NMX05PX0ZQX0FQSQogdm9pZCBDUllQVE9fbWVtX2xlYWtzX2ZwKEZJTEUgKik7CkBAIC01MzQsNjkgKzU0NywxMiBAQAogI2RlZmluZSBPUEVOU1NMX2lhMzJjYXAgKCooT1BFTlNTTF9pYTMyY2FwX2xvYygpKSkKIGludCBPUEVOU1NMX2lzc2VydmljZSh2b2lkKTsKIAotI2lmZGVmIE9QRU5TU0xfRklQUwotI2RlZmluZSBGSVBTX0VSUk9SX0lHTk9SRUQoYWxnKSBPcGVuU1NMRGllKF9fRklMRV9fLCBfX0xJTkVfXywgXAotCQlhbGcgIiBwcmV2aW91cyBGSVBTIGZvcmJpZGRlbiBhbGdvcml0aG0gZXJyb3IgaWdub3JlZCIpOwotCi0jZGVmaW5lIEZJUFNfQkFEX0FCT1JUKGFsZykgT3BlblNTTERpZShfX0ZJTEVfXywgX19MSU5FX18sIFwKLQkJI2FsZyAiIEFsZ29yaXRobSBmb3JiaWRkZW4gaW4gRklQUyBtb2RlIik7Ci0KLSNpZmRlZiBPUEVOU1NMX0ZJUFNfU1RSSUNUCi0jZGVmaW5lIEZJUFNfQkFEX0FMR09SSVRITShhbGcpIEZJUFNfQkFEX0FCT1JUKGFsZykKLSNlbHNlCi0jZGVmaW5lIEZJUFNfQkFEX0FMR09SSVRITShhbGcpIFwKLQl7IFwKLQlGSVBTZXJyKEZJUFNfRl9IQVNIX0ZJTkFMLEZJUFNfUl9OT05fRklQU19NRVRIT0QpOyBcCi0JRVJSX2FkZF9lcnJvcl9kYXRhKDIsICJBbGdvcml0aG09IiwgI2FsZyk7IFwKLQlyZXR1cm4gMDsgXAotCX0KLSNlbmRpZgotCi0vKiBMb3cgbGV2ZWwgZGlnZXN0IEFQSSBibG9ja2luZyBtYWNybyAqLwotCi0jZGVmaW5lIEZJUFNfTk9OX0ZJUFNfTURfSW5pdChhbGcpIFwKLQlpbnQgYWxnIyNfSW5pdChhbGcjI19DVFggKmMpIFwKLQkJeyBcCi0JCWlmIChGSVBTX21vZGUoKSkgXAotCQkJRklQU19CQURfQUxHT1JJVEhNKGFsZykgXAotCQlyZXR1cm4gcHJpdmF0ZV8jI2FsZyMjX0luaXQoYyk7IFwKLQkJfSBcCi0JaW50IHByaXZhdGVfIyNhbGcjI19Jbml0KGFsZyMjX0NUWCAqYykKLQotLyogRm9yIGNpcGhlcnMgdGhlIEFQSSBvZnRlbiB2YXJpZXMgZnJvbSBjaXBoZXIgdG8gY2lwaGVyIGFuZCBlYWNoIG5lZWRzIHRvCi0gKiBiZSB0cmVhdGVkIGFzIGEgc3BlY2lhbCBjYXNlLiBWYXJpYWJsZSBrZXkgbGVuZ3RoIGNpcGhlcnMgKEJsb3dmaXNoLCBSQzQsCi0gKiBDQVNUKSBob3dldmVyIGFyZSB2ZXJ5IHNpbWlsYXIgYW5kIGNhbiB1c2UgYSBibG9ja2luZyBtYWNyby4KLSAqLwotCi0jZGVmaW5lIEZJUFNfTk9OX0ZJUFNfVkNJUEhFUl9Jbml0KGFsZykgXAotCXZvaWQgYWxnIyNfc2V0X2tleShhbGcjI19LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkgXAotCQl7IFwKLQkJaWYgKEZJUFNfbW9kZSgpKSBcCi0JCQlGSVBTX0JBRF9BQk9SVChhbGcpIFwKLQkJcHJpdmF0ZV8jI2FsZyMjX3NldF9rZXkoa2V5LCBsZW4sIGRhdGEpOyBcCi0JCX0gXAotCXZvaWQgcHJpdmF0ZV8jI2FsZyMjX3NldF9rZXkoYWxnIyNfS0VZICprZXksIGludCBsZW4sIFwKLQkJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKLQotI2Vsc2UKLQotI2RlZmluZSBGSVBTX05PTl9GSVBTX1ZDSVBIRVJfSW5pdChhbGcpIFwKLQl2b2lkIGFsZyMjX3NldF9rZXkoYWxnIyNfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCi0KLSNkZWZpbmUgRklQU19OT05fRklQU19NRF9Jbml0KGFsZykgXAotCWludCBhbGcjI19Jbml0KGFsZyMjX0NUWCAqYykgCi0KLSNlbmRpZiAvKiBkZWYgT1BFTlNTTF9GSVBTICovCi0KIC8qIEJFR0lOIEVSUk9SIENPREVTICovCiAvKiBUaGUgZm9sbG93aW5nIGxpbmVzIGFyZSBhdXRvIGdlbmVyYXRlZCBieSB0aGUgc2NyaXB0IG1rZXJyLnBsLiBBbnkgY2hhbmdlcwogICogbWFkZSBhZnRlciB0aGlzIHBvaW50IG1heSBiZSBvdmVyd3JpdHRlbiB3aGVuIHRoZSBzY3JpcHQgaXMgbmV4dCBydW4uCiAgKi8KIHZvaWQgRVJSX2xvYWRfQ1JZUFRPX3N0cmluZ3Modm9pZCk7CiAKLSNkZWZpbmUgT1BFTlNTTF9IQVZFX0lOSVQJMQotdm9pZCBPUEVOU1NMX2luaXQodm9pZCk7Ci0KIC8qIEVycm9yIGNvZGVzIGZvciB0aGUgQ1JZUFRPIGZ1bmN0aW9ucy4gKi8KIAogLyogRnVuY3Rpb24gY29kZXMuICovCmRpZmYgLS1naXQgYS9jcnlwdG8vZGVzL01ha2VmaWxlIGIvY3J5cHRvL2Rlcy9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg2ZTY4OC4uMDAwMDAwMAotLS0gYS9jcnlwdG8vZGVzL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMjk3ICswLDAgQEAKLSMKLSMgT3BlblNTTC9jcnlwdG8vZGVzL01ha2VmaWxlCi0jCi0KLURJUj0JZGVzCi1UT1A9CS4uLy4uCi1DQz0JY2MKLUNQUD0JJChDQykgLUUKLUlOQ0xVREVTPS1JJChUT1ApIC1JLi4vLi4vaW5jbHVkZQotQ0ZMQUc9LWcKLU1BS0VGSUxFPQlNYWtlZmlsZQotQVI9CQlhciByCi1SQU5MSUI9CQlyYW5saWIKLURFU19FTkM9CWRlc19lbmMubyBmY3J5cHRfYi5vCi0jIG9yIHVzZQotI0RFU19FTkM9CWR4ODYtZWxmLm8geXg4Ni1lbGYubwotCi1DRkxBR1M9ICQoSU5DTFVERVMpICQoQ0ZMQUcpCi1BU0ZMQUdTPSAkKElOQ0xVREVTKSAkKEFTRkxBRykKLUFGTEFHUz0gJChBU0ZMQUdTKQotCi1HRU5FUkFMPU1ha2VmaWxlCi1URVNUPWRlc3Rlc3QuYwotQVBQUz0KLQotTElCPSQoVE9QKS9saWJjcnlwdG8uYQotTElCU1JDPQlkZXNfbGliLmMgY2JjX2Nrc20uYyBjYmNfZW5jLmMgIGNmYjY0ZW5jLmMgY2ZiX2VuYy5jICBcCi0JZWNiM19lbmMuYyBlY2JfZW5jLmMgIGVuY19yZWFkLmMgZW5jX3dyaXQuYyBcCi0JZmNyeXB0LmMgb2ZiNjRlbmMuYyBvZmJfZW5jLmMgIHBjYmNfZW5jLmMgXAotCXF1ZF9ja3NtLmMgcmFuZF9rZXkuYyBycGNfZW5jLmMgIHNldF9rZXkuYyAgXAotCWRlc19lbmMuYyBmY3J5cHRfYi5jIFwKLQl4Y2JjX2VuYy5jIFwKLQlzdHIya2V5LmMgIGNmYjY0ZWRlLmMgb2ZiNjRlZGUuYyBlZGVfY2JjbV9lbmMuYyBkZXNfb2xkLmMgZGVzX29sZDIuYyBcCi0JcmVhZDJwd2QuYwotCi1MSUJPQko9IGRlc19saWIubyBzZXRfa2V5Lm8gIGVjYl9lbmMubyAgY2JjX2VuYy5vIFwKLQllY2IzX2VuYy5vIGNmYjY0ZW5jLm8gY2ZiNjRlZGUubyBjZmJfZW5jLm8gIG9mYjY0ZWRlLm8gXAotCWVuY19yZWFkLm8gZW5jX3dyaXQubyBvZmI2NGVuYy5vIFwKLQlvZmJfZW5jLm8gIHN0cjJrZXkubyAgcGNiY19lbmMubyBxdWRfY2tzbS5vIHJhbmRfa2V5Lm8gXAotCSR7REVTX0VOQ30gXAotCWZjcnlwdC5vIHhjYmNfZW5jLm8gcnBjX2VuYy5vICBjYmNfY2tzbS5vIFwKLQllZGVfY2JjbV9lbmMubyBkZXNfb2xkLm8gZGVzX29sZDIubyByZWFkMnB3ZC5vCi0KLVNSQz0gJChMSUJTUkMpCi0KLUVYSEVBREVSPSBkZXMuaCBkZXNfb2xkLmgKLUhFQURFUj0JZGVzX2xvY2wuaCBycGNfZGVzLmggc3ByLmggZGVzX3Zlci5oICQoRVhIRUFERVIpCi0KLUFMTD0gICAgJChHRU5FUkFMKSAkKFNSQykgJChIRUFERVIpCi0KLXRvcDoKLQkoY2QgLi4vLi47ICQoTUFLRSkgRElSUz1jcnlwdG8gU0RJUlM9JChESVIpIHN1Yl9hbGwpCi0KLWFsbDoJbGliCi0KLWxpYjoJJChMSUJPQkopCi0JJChBUlgpICQoTElCKSAkKExJQk9CSikKLQkkKFJBTkxJQikgJChMSUIpIHx8IGVjaG8gTmV2ZXIgbWluZC4KLQlAdG91Y2ggbGliCi0KLWRlczogZGVzLm8gY2JjM19lbmMubyBsaWIKLQkkKENDKSAkKENGTEFHUykgLW8gZGVzIGRlcy5vIGNiYzNfZW5jLm8gJChMSUIpCi0KLWRlc19lbmMtc3BhcmMuUzoJYXNtL2Rlc19lbmMubTQKLQltNCAtQiA4MTkyIGFzbS9kZXNfZW5jLm00ID4gZGVzX2VuYy1zcGFyYy5TCi0KLSMgRUxGCi1keDg2LWVsZi5zOglhc20vZGVzLTU4Ni5wbCAuLi9wZXJsYXNtL3g4NmFzbS5wbCAuLi9wZXJsYXNtL2NiYy5wbAotCShjZCBhc207ICQoUEVSTCkgZGVzLTU4Ni5wbCBlbGYgJChDRkxBR1MpID4gLi4vJEApCi15eDg2LWVsZi5zOglhc20vY3J5cHQ1ODYucGwgLi4vcGVybGFzbS94ODZhc20ucGwgLi4vcGVybGFzbS9jYmMucGwKLQkoY2QgYXNtOyAkKFBFUkwpIGNyeXB0NTg2LnBsIGVsZiAkKENGTEFHUykgPiAuLi8kQCkKLSMgQ09GRgotZHg4Ni1jb2YuczogYXNtL2Rlcy01ODYucGwgLi4vcGVybGFzbS94ODZhc20ucGwgLi4vcGVybGFzbS9jYmMucGwKLQkoY2QgYXNtOyAkKFBFUkwpIGRlcy01ODYucGwgY29mZiAkKENGTEFHUykgPiAuLi8kQCkKLXl4ODYtY29mLnM6IGFzbS9jcnlwdDU4Ni5wbCAuLi9wZXJsYXNtL3g4NmFzbS5wbCAuLi9wZXJsYXNtL2NiYy5wbAotCShjZCBhc207ICQoUEVSTCkgY3J5cHQ1ODYucGwgY29mZiAkKENGTEFHUykgPiAuLi8kQCkKLSMgYS5vdXQKLWR4ODYtb3V0LnM6IGFzbS9kZXMtNTg2LnBsIC4uL3Blcmxhc20veDg2YXNtLnBsIC4uL3Blcmxhc20vY2JjLnBsCi0JKGNkIGFzbTsgJChQRVJMKSBkZXMtNTg2LnBsIGEub3V0ICQoQ0ZMQUdTKSA+IC4uLyRAKQoteXg4Ni1vdXQuczogYXNtL2NyeXB0NTg2LnBsIC4uL3Blcmxhc20veDg2YXNtLnBsIC4uL3Blcmxhc20vY2JjLnBsCi0JKGNkIGFzbTsgJChQRVJMKSBjcnlwdDU4Ni5wbCBhLm91dCAkKENGTEFHUykgPiAuLi8kQCkKLQotZmlsZXM6Ci0JJChQRVJMKSAkKFRPUCkvdXRpbC9maWxlcy5wbCBNYWtlZmlsZSA+PiAkKFRPUCkvTUlORk8KLQotbGlua3M6Ci0JQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL2luY2x1ZGUvb3BlbnNzbCAkKEVYSEVBREVSKQotCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi90ZXN0ICQoVEVTVCkKLQlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vYXBwcyAkKEFQUFMpCi0KLSMgV2UgbmVlZCB0byB1c2UgZm9yY2UgYmVjYXVzZSAnaW5zdGFsbCcgbWF0Y2hlcyAnSU5TVEFMTCcgb24gY2FzZQotIyBpbnNlbnNpdGl2ZSBzeXN0ZW1zCi1GUkMuaW5zdGFsbDoKLWluc3RhbGw6IEZSQy5pbnN0YWxsCi0JQFsgLW4gIiQoSU5TVEFMTFRPUCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHRvcCBNYWtlZmlsZS4uLgotCUBoZWFkZXJsaXN0PSIkKEVYSEVBREVSKSI7IGZvciBpIGluICQkaGVhZGVybGlzdCA7IFwKLQlkbyAgXAotCShjcCAkJGkgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGk7IFwKLQljaG1vZCA2NDQgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGkgKTsgXAotCWRvbmU7Ci0KLXRhZ3M6Ci0JY3RhZ3MgJChTUkMpCi0KLXRlc3RzOgotCi1saW50OgotCWxpbnQgLURMSU5UICQoSU5DTFVERVMpICQoU1JDKT5mbHVmZgotCi1kZXBlbmQ6Ci0JQFsgLW4gIiQoTUFLRURFUEVORCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHVwcGVyIE1ha2VmaWxlLi4uCi0JJChNQUtFREVQRU5EKSAtLSAkKENGTEFHKSAkKElOQ0xVREVTKSAkKERFUEZMQUcpIC0tICQoUFJPR1MpICQoTElCU1JDKQotCi1kY2xlYW46Ci0JJChQRVJMKSAtcGUgJ2lmICgvXiMgRE8gTk9UIERFTEVURSBUSElTIExJTkUvKSB7cHJpbnQ7IGV4aXQoMCk7fScgJChNQUtFRklMRSkgPk1ha2VmaWxlLm5ldwotCW12IC1mIE1ha2VmaWxlLm5ldyAkKE1BS0VGSUxFKQotCi1jbGVhbjoKLQlybSAtZiAqLnMgKi5vICoub2JqIGRlcyBsaWIgdGFncyBjb3JlIC5wdXJlIC5uZnMqICoub2xkICouYmFrIGZsdWZmCi0KLSMgRE8gTk9UIERFTEVURSBUSElTIExJTkUgLS0gbWFrZSBkZXBlbmQgZGVwZW5kcyBvbiBpdC4KLQotY2JjX2Nrc20ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Rlcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kZXNfb2xkLmgKLWNiY19ja3NtLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1jYmNfY2tzbS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLWNiY19ja3NtLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1jYmNfY2tzbS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvdWkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvdWlfY29tcGF0LmgKLWNiY19ja3NtLm86IGNiY19ja3NtLmMgZGVzX2xvY2wuaAotY2JjX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZGVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Rlc19vbGQuaAotY2JjX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotY2JjX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLWNiY19lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLWNiY19lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3VpLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3VpX2NvbXBhdC5oCi1jYmNfZW5jLm86IGNiY19lbmMuYyBkZXNfbG9jbC5oIG5jYmNfZW5jLmMKLWNmYjY0ZWRlLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZGVzLmgKLWNmYjY0ZWRlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kZXNfb2xkLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLWNmYjY0ZWRlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1jZmI2NGVkZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLWNmYjY0ZWRlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1jZmI2NGVkZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvdWkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvdWlfY29tcGF0LmgKLWNmYjY0ZWRlLm86IGNmYjY0ZWRlLmMgZGVzX2xvY2wuaAotY2ZiNjRlbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Rlcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kZXNfb2xkLmgKLWNmYjY0ZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1jZmI2NGVuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLWNmYjY0ZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1jZmI2NGVuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvdWkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvdWlfY29tcGF0LmgKLWNmYjY0ZW5jLm86IGNmYjY0ZW5jLmMgZGVzX2xvY2wuaAotY2ZiX2VuYy5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Rlcy5oCi1jZmJfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kZXNfb2xkLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLWNmYl9lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWNmYl9lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1jZmJfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC91aS5oCi1jZmJfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC91aV9jb21wYXQuaCBjZmJfZW5jLmMgZGVzX2xvY2wuaAotZGVzX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZGVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Rlc19vbGQuaAotZGVzX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotZGVzX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLWRlc19lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLWRlc19lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3VpLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3VpX2NvbXBhdC5oCi1kZXNfZW5jLm86IGRlc19lbmMuYyBkZXNfbG9jbC5oIG5jYmNfZW5jLmMKLWRlc19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotZGVzX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZGVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Rlc19vbGQuaAotZGVzX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotZGVzX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotZGVzX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWRlc19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3VpLmgKLWRlc19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3VpX2NvbXBhdC5oIGRlc19saWIuYyBkZXNfbG9jbC5oIGRlc192ZXIuaAotZGVzX29sZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZGVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Rlc19vbGQuaAotZGVzX29sZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotZGVzX29sZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCi1kZXNfb2xkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotZGVzX29sZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvdWkuaAotZGVzX29sZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvdWlfY29tcGF0LmggZGVzX29sZC5jCi1kZXNfb2xkMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZGVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Rlc19vbGQuaAotZGVzX29sZDIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWRlc19vbGQyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKLWRlc19vbGQyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotZGVzX29sZDIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3VpLmgKLWRlc19vbGQyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC91aV9jb21wYXQuaCBkZXNfb2xkMi5jCi1lY2IzX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZGVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Rlc19vbGQuaAotZWNiM19lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWVjYjNfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotZWNiM19lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLWVjYjNfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC91aS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC91aV9jb21wYXQuaAotZWNiM19lbmMubzogZGVzX2xvY2wuaCBlY2IzX2VuYy5jCi1lY2JfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZGVzX29sZC5oCi1lY2JfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1lY2JfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotZWNiX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotZWNiX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvdWkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvdWlfY29tcGF0LmgKLWVjYl9lbmMubzogZGVzX2xvY2wuaCBlY2JfZW5jLmMgc3ByLmgKLWVkZV9jYmNtX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZGVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Rlc19vbGQuaAotZWRlX2NiY21fZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1lZGVfY2JjbV9lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWVkZV9jYmNtX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotZWRlX2NiY21fZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotZWRlX2NiY21fZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC91aS5oCi1lZGVfY2JjbV9lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3VpX2NvbXBhdC5oIGRlc19sb2NsLmggZWRlX2NiY21fZW5jLmMKLWVuY19yZWFkLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWVuY19yZWFkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWVuY19yZWFkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZGVzX29sZC5oCi1lbmNfcmVhZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWVuY19yZWFkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1lbmNfcmVhZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotZW5jX3JlYWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1lbmNfcmVhZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvdWkuaAotZW5jX3JlYWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3VpX2NvbXBhdC5oIC4uL2NyeXB0bGliLmggZGVzX2xvY2wuaAotZW5jX3JlYWQubzogZW5jX3JlYWQuYwotZW5jX3dyaXQubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotZW5jX3dyaXQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotZW5jX3dyaXQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Rlcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kZXNfb2xkLmgKLWVuY193cml0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotZW5jX3dyaXQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWVuY193cml0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1lbmNfd3JpdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotZW5jX3dyaXQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLWVuY193cml0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC91aS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC91aV9jb21wYXQuaAotZW5jX3dyaXQubzogLi4vY3J5cHRsaWIuaCBkZXNfbG9jbC5oIGVuY193cml0LmMKLWZjcnlwdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZGVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Rlc19vbGQuaAotZmNyeXB0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1mY3J5cHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1mY3J5cHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLWZjcnlwdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvdWkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvdWlfY29tcGF0LmgKLWZjcnlwdC5vOiBkZXNfbG9jbC5oIGZjcnlwdC5jCi1mY3J5cHRfYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZGVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Rlc19vbGQuaAotZmNyeXB0X2IubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWZjcnlwdF9iLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotZmNyeXB0X2IubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLWZjcnlwdF9iLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC91aS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC91aV9jb21wYXQuaAotZmNyeXB0X2IubzogZGVzX2xvY2wuaCBmY3J5cHRfYi5jCi1vZmI2NGVkZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZGVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Rlc19vbGQuaAotb2ZiNjRlZGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLW9mYjY0ZWRlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotb2ZiNjRlZGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLW9mYjY0ZWRlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC91aS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC91aV9jb21wYXQuaAotb2ZiNjRlZGUubzogZGVzX2xvY2wuaCBvZmI2NGVkZS5jCi1vZmI2NGVuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZGVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Rlc19vbGQuaAotb2ZiNjRlbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLW9mYjY0ZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotb2ZiNjRlbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLW9mYjY0ZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC91aS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC91aV9jb21wYXQuaAotb2ZiNjRlbmMubzogZGVzX2xvY2wuaCBvZmI2NGVuYy5jCi1vZmJfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZGVzX29sZC5oCi1vZmJfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1vZmJfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotb2ZiX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotb2ZiX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvdWkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvdWlfY29tcGF0LmgKLW9mYl9lbmMubzogZGVzX2xvY2wuaCBvZmJfZW5jLmMKLXBjYmNfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZGVzX29sZC5oCi1wY2JjX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotcGNiY19lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1wY2JjX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotcGNiY19lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3VpLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3VpX2NvbXBhdC5oCi1wY2JjX2VuYy5vOiBkZXNfbG9jbC5oIHBjYmNfZW5jLmMKLXF1ZF9ja3NtLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZGVzX29sZC5oCi1xdWRfY2tzbS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotcXVkX2Nrc20ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1xdWRfY2tzbS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotcXVkX2Nrc20ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3VpLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3VpX2NvbXBhdC5oCi1xdWRfY2tzbS5vOiBkZXNfbG9jbC5oIHF1ZF9ja3NtLmMKLXJhbmRfa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZGVzX29sZC5oCi1yYW5kX2tleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotcmFuZF9rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAotcmFuZF9rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1yYW5kX2tleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvdWkuaAotcmFuZF9rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3VpX2NvbXBhdC5oIHJhbmRfa2V5LmMKLXJlYWQycHdkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZGVzLmgKLXJlYWQycHdkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kZXNfb2xkLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLXJlYWQycHdkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1yZWFkMnB3ZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotcmVhZDJwd2QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1yZWFkMnB3ZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvdWkuaAotcmVhZDJwd2QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3VpX2NvbXBhdC5oIHJlYWQycHdkLmMKLXJwY19lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Rlcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kZXNfb2xkLmgKLXJwY19lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXJwY19lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1ycGNfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1ycGNfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC91aS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC91aV9jb21wYXQuaAotcnBjX2VuYy5vOiBkZXNfbG9jbC5oIGRlc192ZXIuaCBycGNfZGVzLmggcnBjX2VuYy5jCi1zZXRfa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZGVzX29sZC5oCi1zZXRfa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLXNldF9rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXNldF9rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1zZXRfa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC91aS5oCi1zZXRfa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC91aV9jb21wYXQuaCBkZXNfbG9jbC5oIHNldF9rZXkuYwotc3RyMmtleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Rlcy5oCi1zdHIya2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kZXNfb2xkLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLXN0cjJrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLXN0cjJrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1zdHIya2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1zdHIya2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC91aS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC91aV9jb21wYXQuaAotc3RyMmtleS5vOiBkZXNfbG9jbC5oIHN0cjJrZXkuYwoteGNiY19lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Rlcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kZXNfb2xkLmgKLXhjYmNfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi14Y2JjX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLXhjYmNfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi14Y2JjX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvdWkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvdWlfY29tcGF0LmgKLXhjYmNfZW5jLm86IGRlc19sb2NsLmggeGNiY19lbmMuYwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Rlcy9hc20vY3J5cHQ1ODYucGwgYi9jcnlwdG8vZGVzL2FzbS9jcnlwdDU4Ni5wbAppbmRleCAxZDA0ZWQ2Li5lMzZmN2Q0IDEwMDY0NAotLS0gYS9jcnlwdG8vZGVzL2FzbS9jcnlwdDU4Ni5wbAorKysgYi9jcnlwdG8vZGVzL2FzbS9jcnlwdDU4Ni5wbApAQCAtNiw3ICs2LDggQEAKICMgdGhpbmdzIHBlcmZlY3QuCiAjCiAKLXB1c2goQElOQywicGVybGFzbSIsIi4uLy4uL3Blcmxhc20iKTsKKyQwID1+IG0vKC4qW1wvXFxdKVteXC9cXF0rJC87ICRkaXI9JDE7CitwdXNoKEBJTkMsIiR7ZGlyfSIsIiR7ZGlyfS4uLy4uL3Blcmxhc20iKTsKIHJlcXVpcmUgIng4NmFzbS5wbCI7CiAKICZhc21faW5pdCgkQVJHVlswXSwiY3J5cHQ1ODYucGwiKTsKQEAgLTIyLDcgKzIzLDcgQEAKIAl7CiAJbG9jYWwoJG5hbWUsJGRvX2lwKT1AXzsKIAotCSZmdW5jdGlvbl9iZWdpbigkbmFtZSwiRVhUUk4gICBfREVTX1NQdHJhbnM6RFdPUkQiKTsKKwkmZnVuY3Rpb25fYmVnaW4oJG5hbWUpOwogCiAJJmNvbW1lbnQoIiIpOwogCSZjb21tZW50KCJMb2FkIHRoZSAyIHdvcmRzIik7CmRpZmYgLS1naXQgYS9jcnlwdG8vZGVzL2FzbS9kZXMtNTg2LnBsIGIvY3J5cHRvL2Rlcy9hc20vZGVzLTU4Ni5wbAppbmRleCBiNzVkM2M2Li41YjVmMzljIDEwMDY0NAotLS0gYS9jcnlwdG8vZGVzL2FzbS9kZXMtNTg2LnBsCisrKyBiL2NyeXB0by9kZXMvYXNtL2Rlcy01ODYucGwKQEAgLTQsNyArNCw4IEBACiAjIFN2ZW5kIE9sYWYgTWlra2Vsc2VuIDxzdm9sYWZAaW5ldC51bmktYy5kaz4KICMKIAotcHVzaChASU5DLCJwZXJsYXNtIiwiLi4vLi4vcGVybGFzbSIpOworJDAgPX4gbS8oLipbXC9cXF0pW15cL1xcXSskLzsgJGRpcj0kMTsKK3B1c2goQElOQywiJHtkaXJ9IiwiJHtkaXJ9Li4vLi4vcGVybGFzbSIpOwogcmVxdWlyZSAieDg2YXNtLnBsIjsKIHJlcXVpcmUgImNiYy5wbCI7CiByZXF1aXJlICJkZXNib3RoLnBsIjsKQEAgLTE4LDI5ICsxOSwxMTAgQEAKIAogJEw9ImVkaSI7CiAkUj0iZXNpIjsKKyR0cmFucz0iZWJwIjsKKyRzbWFsbF9mb290cHJpbnQ9MSBpZiAoZ3JlcCgvXC1ET1BFTlNTTF9TTUFMTF9GT09UUFJJTlQvLEBBUkdWKSk7CisjIG9uZSBjYW4gZGlzY3VzcyBzZXR0aW5nIHRoaXMgdmFyaWFibGUgdG8gMSB1bmNvbmRpdGlvbmFsbHksIGFzCisjIHRoZSBmb2xkZWQgbG9vcCBpcyBvbmx5IDMlIHNsb3dlciB0aGFuIHVucm9sbGVkLCBidXQgPjcgdGltZXMgc21hbGxlcgogCi0mZXh0ZXJuYWxfbGFiZWwoIkRFU19TUHRyYW5zIik7CismcHVibGljX2xhYmVsKCJERVNfU1B0cmFucyIpOworCismREVTX2VuY3J5cHRfaW50ZXJuYWwoKTsKKyZERVNfZGVjcnlwdF9pbnRlcm5hbCgpOwogJkRFU19lbmNyeXB0KCJERVNfZW5jcnlwdDEiLDEpOwogJkRFU19lbmNyeXB0KCJERVNfZW5jcnlwdDIiLDApOwogJkRFU19lbmNyeXB0MygiREVTX2VuY3J5cHQzIiwxKTsKICZERVNfZW5jcnlwdDMoIkRFU19kZWNyeXB0MyIsMCk7CiAmY2JjKCJERVNfbmNiY19lbmNyeXB0IiwiREVTX2VuY3J5cHQxIiwiREVTX2VuY3J5cHQxIiwwLDQsNSwzLDUsLTEpOwogJmNiYygiREVTX2VkZTNfY2JjX2VuY3J5cHQiLCJERVNfZW5jcnlwdDMiLCJERVNfZGVjcnlwdDMiLDAsNiw3LDMsNCw1KTsKKyZERVNfU1B0cmFucygpOwogCiAmYXNtX2ZpbmlzaCgpOwogCitzdWIgREVTX2VuY3J5cHRfaW50ZXJuYWwoKQorCXsKKwkmZnVuY3Rpb25fYmVnaW5fQigiX3g4Nl9ERVNfZW5jcnlwdCIpOworCisJaWYgKCRzbWFsbF9mb290cHJpbnQpCisJICAgIHsKKwkgICAgJmxlYSgiZWR4IiwmRFdQKDEyOCwiZWN4IikpOworCSAgICAmcHVzaCgiZWR4Iik7CisJICAgICZwdXNoKCJlY3giKTsKKwkgICAgJnNldF9sYWJlbCgiZWxvb3AiKTsKKwkJJkRfRU5DUllQVCgwLCRMLCRSLDAsJHRyYW5zLCJlYXgiLCJlYngiLCJlY3giLCJlZHgiLCZzd3RtcCgwKSk7CisJCSZjb21tZW50KCIiKTsKKwkJJkRfRU5DUllQVCgxLCRSLCRMLDIsJHRyYW5zLCJlYXgiLCJlYngiLCJlY3giLCJlZHgiLCZzd3RtcCgwKSk7CisJCSZjb21tZW50KCIiKTsKKwkJJmFkZCgiZWN4IiwxNik7CisJCSZjbXAoImVjeCIsJnN3dG1wKDEpKTsKKwkJJm1vdigmc3d0bXAoMCksImVjeCIpOworCQkmamIoJmxhYmVsKCJlbG9vcCIpKTsKKwkgICAgJmFkZCgiZXNwIiw4KTsKKwkgICAgfQorCWVsc2UKKwkgICAgeworCSAgICAmcHVzaCgiZWN4Iik7CisJICAgIGZvciAoJGk9MDsgJGk8MTY7ICRpKz0yKQorCQl7CisJCSZjb21tZW50KCJSb3VuZCAkaSIpOworCQkmRF9FTkNSWVBUKCRpLCRMLCRSLCRpKjIsJHRyYW5zLCJlYXgiLCJlYngiLCJlY3giLCJlZHgiLCZzd3RtcCgwKSk7CisJCSZjb21tZW50KCJSb3VuZCAiLnNwcmludGYoIiVkIiwkaSsxKSk7CisJCSZEX0VOQ1JZUFQoJGkrMSwkUiwkTCwoJGkrMSkqMiwkdHJhbnMsImVheCIsImVieCIsImVjeCIsImVkeCIsJnN3dG1wKDApKTsKKwkJfQorCSAgICAmYWRkKCJlc3AiLDQpOworCX0KKwkmcmV0KCk7CisKKwkmZnVuY3Rpb25fZW5kX0IoIl94ODZfREVTX2VuY3J5cHQiKTsKKwl9CisJCitzdWIgREVTX2RlY3J5cHRfaW50ZXJuYWwoKQorCXsKKwkmZnVuY3Rpb25fYmVnaW5fQigiX3g4Nl9ERVNfZGVjcnlwdCIpOworCisJaWYgKCRzbWFsbF9mb290cHJpbnQpCisJICAgIHsKKwkgICAgJnB1c2goImVjeCIpOworCSAgICAmbGVhKCJlY3giLCZEV1AoMTI4LCJlY3giKSk7CisJICAgICZwdXNoKCJlY3giKTsKKwkgICAgJnNldF9sYWJlbCgiZGxvb3AiKTsKKwkJJkRfRU5DUllQVCgwLCRMLCRSLC0yLCR0cmFucywiZWF4IiwiZWJ4IiwiZWN4IiwiZWR4Iiwmc3d0bXAoMCkpOworCQkmY29tbWVudCgiIik7CisJCSZEX0VOQ1JZUFQoMSwkUiwkTCwtNCwkdHJhbnMsImVheCIsImVieCIsImVjeCIsImVkeCIsJnN3dG1wKDApKTsKKwkJJmNvbW1lbnQoIiIpOworCQkmc3ViKCJlY3giLDE2KTsKKwkJJmNtcCgiZWN4Iiwmc3d0bXAoMSkpOworCQkmbW92KCZzd3RtcCgwKSwiZWN4Iik7CisJCSZqYSgmbGFiZWwoImRsb29wIikpOworCSAgICAmYWRkKCJlc3AiLDgpOworCSAgICB9CisJZWxzZQorCSAgICB7CisJICAgICZwdXNoKCJlY3giKTsKKwkgICAgZm9yICgkaT0xNTsgJGk+MDsgJGktPTIpCisJCXsKKwkJJmNvbW1lbnQoIlJvdW5kICRpIik7CisJCSZEX0VOQ1JZUFQoMTUtJGksJEwsJFIsJGkqMiwkdHJhbnMsImVheCIsImVieCIsImVjeCIsImVkeCIsJnN3dG1wKDApKTsKKwkJJmNvbW1lbnQoIlJvdW5kICIuc3ByaW50ZigiJWQiLCRpLTEpKTsKKwkJJkRfRU5DUllQVCgxNS0kaSsxLCRSLCRMLCgkaS0xKSoyLCR0cmFucywiZWF4IiwiZWJ4IiwiZWN4IiwiZWR4Iiwmc3d0bXAoMCkpOworCQl9CisJICAgICZhZGQoImVzcCIsNCk7CisJICAgIH0KKwkmcmV0KCk7CisKKwkmZnVuY3Rpb25fZW5kX0IoIl94ODZfREVTX2RlY3J5cHQiKTsKKwl9CisJCiBzdWIgREVTX2VuY3J5cHQKIAl7CiAJbG9jYWwoJG5hbWUsJGRvX2lwKT1AXzsKIAotCSZmdW5jdGlvbl9iZWdpbl9CKCRuYW1lLCJFWFRSTiAgIF9ERVNfU1B0cmFuczpEV09SRCIpOworCSZmdW5jdGlvbl9iZWdpbl9CKCRuYW1lKTsKIAogCSZwdXNoKCJlc2kiKTsKIAkmcHVzaCgiZWRpIik7CiAKIAkmY29tbWVudCgiIik7CiAJJmNvbW1lbnQoIkxvYWQgdGhlIDIgd29yZHMiKTsKLQkkdHJhbnM9ImVicCI7CiAKIAlpZiAoJGRvX2lwKQogCQl7CkBAIC03MywzOSArMTU1LDIwIEBACiAJCX0KIAogCSMgUElDLWlmaWNhdGlvbjotKQotCSZwaWNtZXVwKCR0cmFucywiREVTX1NQdHJhbnMiKTsKLQkjaWYgKCRjcHApCXsgJnBpY21ldXAoJHRyYW5zLCJERVNfU1B0cmFucyIpOyAgIH0KLQkjZWxzZQkJeyAmbGVhKCR0cmFucywmRFdQKCJERVNfU1B0cmFucyIpKTsgfQorCSZjYWxsCSgmbGFiZWwoInBpY19wb2ludCIpKTsKKwkmc2V0X2xhYmVsKCJwaWNfcG9pbnQiKTsKKwkmYmxpbmRwb3AoJHRyYW5zKTsKKwkmbGVhCSgkdHJhbnMsJkRXUCgmbGFiZWwoIkRFU19TUHRyYW5zIikuIi0iLiZsYWJlbCgicGljX3BvaW50IiksJHRyYW5zKSk7CiAKIAkmbW92KAkiZWN4IiwJJndwYXJhbSgxKQkpOworCiAJJmNtcCgiZWJ4IiwiMCIpOwotCSZqZSgmbGFiZWwoInN0YXJ0X2RlY3J5cHQiKSk7Ci0KLQlmb3IgKCRpPTA7ICRpPDE2OyAkaSs9MikKLQkJewotCQkmY29tbWVudCgiIik7Ci0JCSZjb21tZW50KCJSb3VuZCAkaSIpOwotCQkmRF9FTkNSWVBUKCRpLCRMLCRSLCRpKjIsJHRyYW5zLCJlYXgiLCJlYngiLCJlY3giLCJlZHgiKTsKLQotCQkmY29tbWVudCgiIik7Ci0JCSZjb21tZW50KCJSb3VuZCAiLnNwcmludGYoIiVkIiwkaSsxKSk7Ci0JCSZEX0VOQ1JZUFQoJGkrMSwkUiwkTCwoJGkrMSkqMiwkdHJhbnMsImVheCIsImVieCIsImVjeCIsImVkeCIpOwotCQl9Ci0JJmptcCgmbGFiZWwoImVuZCIpKTsKLQotCSZzZXRfbGFiZWwoInN0YXJ0X2RlY3J5cHQiKTsKLQotCWZvciAoJGk9MTU7ICRpPjA7ICRpLT0yKQotCQl7Ci0JCSZjb21tZW50KCIiKTsKLQkJJmNvbW1lbnQoIlJvdW5kICRpIik7Ci0JCSZEX0VOQ1JZUFQoMTUtJGksJEwsJFIsJGkqMiwkdHJhbnMsImVheCIsImVieCIsImVjeCIsImVkeCIpOwotCQkmY29tbWVudCgiIik7Ci0JCSZjb21tZW50KCJSb3VuZCAiLnNwcmludGYoIiVkIiwkaS0xKSk7Ci0JCSZEX0VOQ1JZUFQoMTUtJGkrMSwkUiwkTCwoJGktMSkqMiwkdHJhbnMsImVheCIsImVieCIsImVjeCIsImVkeCIpOwotCQl9Ci0KLQkmc2V0X2xhYmVsKCJlbmQiKTsKKwkmamUoJmxhYmVsKCJkZWNyeXB0IikpOworCSZjYWxsKCJfeDg2X0RFU19lbmNyeXB0Iik7CisJJmptcCgmbGFiZWwoImRvbmUiKSk7CisJJnNldF9sYWJlbCgiZGVjcnlwdCIpOworCSZjYWxsKCJfeDg2X0RFU19kZWNyeXB0Iik7CisJJnNldF9sYWJlbCgiZG9uZSIpOwogCiAJaWYgKCRkb19pcCkKIAkJewpAQCAtMTM5LDcgKzIwMiw3IEBACiAKIHN1YiBEX0VOQ1JZUFQKIAl7Ci0JbG9jYWwoJHIsJEwsJFIsJFMsJHRyYW5zLCR1LCR0bXAxLCR0bXAyLCR0KT1AXzsKKwlsb2NhbCgkciwkTCwkUiwkUywkdHJhbnMsJHUsJHRtcDEsJHRtcDIsJHQsJHdwMSk9QF87CiAKIAkgJm1vdigJJHUsCQkmRFdQKCZuMmEoJFMqNCksJHRtcDIsIiIsMCkpOwogCSZ4b3IoCSR0bXAxLAkJJHRtcDEpOwpAQCAtMTY2LDcgKzIyOSw3IEBACiAJJmFuZCgJJHQsCQkiMHhmZiIJKTsKIAkgJnhvcigJJEwsCQkmRFdQKCIweDYwMCIsJHRyYW5zLCR0bXAxLDApKTsKIAkgJnhvcigJJEwsCQkmRFdQKCIweDcwMCIsJHRyYW5zLCR0bXAyLDApKTsKLQkmbW92KAkkdG1wMiwJCSZ3cGFyYW0oMSkJKTsKKwkmbW92KAkkdG1wMiwJCSR3cDEJKTsKIAkgJnhvcigJJEwsCQkmRFdQKCIweDQwMCIsJHRyYW5zLCR1LDApKTsKIAkgJnhvcigJJEwsCQkmRFdQKCIweDUwMCIsJHRyYW5zLCR0LDApKTsKIAl9CkBAIC0yNDksMyArMzEyLDE0MiBAQAogCSZyb3RyKCR0dAksIDQpOwogCX0KIAorc3ViIERFU19TUHRyYW5zCisJeworCSZzZXRfbGFiZWwoIkRFU19TUHRyYW5zIiw2NCk7CisJJmRhdGFfd29yZCgweDAyMDgwODAwLCAweDAwMDgwMDAwLCAweDAyMDAwMDAyLCAweDAyMDgwODAyKTsKKwkmZGF0YV93b3JkKDB4MDIwMDAwMDAsIDB4MDAwODA4MDIsIDB4MDAwODAwMDIsIDB4MDIwMDAwMDIpOworCSZkYXRhX3dvcmQoMHgwMDA4MDgwMiwgMHgwMjA4MDgwMCwgMHgwMjA4MDAwMCwgMHgwMDAwMDgwMik7CisJJmRhdGFfd29yZCgweDAyMDAwODAyLCAweDAyMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDgwMDAyKTsKKwkmZGF0YV93b3JkKDB4MDAwODAwMDAsIDB4MDAwMDAwMDIsIDB4MDIwMDA4MDAsIDB4MDAwODA4MDApOworCSZkYXRhX3dvcmQoMHgwMjA4MDgwMiwgMHgwMjA4MDAwMCwgMHgwMDAwMDgwMiwgMHgwMjAwMDgwMCk7CisJJmRhdGFfd29yZCgweDAwMDAwMDAyLCAweDAwMDAwODAwLCAweDAwMDgwODAwLCAweDAyMDgwMDAyKTsKKwkmZGF0YV93b3JkKDB4MDAwMDA4MDAsIDB4MDIwMDA4MDIsIDB4MDIwODAwMDIsIDB4MDAwMDAwMDApOworCSZkYXRhX3dvcmQoMHgwMDAwMDAwMCwgMHgwMjA4MDgwMiwgMHgwMjAwMDgwMCwgMHgwMDA4MDAwMik7CisJJmRhdGFfd29yZCgweDAyMDgwODAwLCAweDAwMDgwMDAwLCAweDAwMDAwODAyLCAweDAyMDAwODAwKTsKKwkmZGF0YV93b3JkKDB4MDIwODAwMDIsIDB4MDAwMDA4MDAsIDB4MDAwODA4MDAsIDB4MDIwMDAwMDIpOworCSZkYXRhX3dvcmQoMHgwMDA4MDgwMiwgMHgwMDAwMDAwMiwgMHgwMjAwMDAwMiwgMHgwMjA4MDAwMCk7CisJJmRhdGFfd29yZCgweDAyMDgwODAyLCAweDAwMDgwODAwLCAweDAyMDgwMDAwLCAweDAyMDAwODAyKTsKKwkmZGF0YV93b3JkKDB4MDIwMDAwMDAsIDB4MDAwMDA4MDIsIDB4MDAwODAwMDIsIDB4MDAwMDAwMDApOworCSZkYXRhX3dvcmQoMHgwMDA4MDAwMCwgMHgwMjAwMDAwMCwgMHgwMjAwMDgwMiwgMHgwMjA4MDgwMCk7CisJJmRhdGFfd29yZCgweDAwMDAwMDAyLCAweDAyMDgwMDAyLCAweDAwMDAwODAwLCAweDAwMDgwODAyKTsKKwkjIG5pYmJsZSAxCisJJmRhdGFfd29yZCgweDQwMTA4MDEwLCAweDAwMDAwMDAwLCAweDAwMTA4MDAwLCAweDQwMTAwMDAwKTsKKwkmZGF0YV93b3JkKDB4NDAwMDAwMTAsIDB4MDAwMDgwMTAsIDB4NDAwMDgwMDAsIDB4MDAxMDgwMDApOworCSZkYXRhX3dvcmQoMHgwMDAwODAwMCwgMHg0MDEwMDAxMCwgMHgwMDAwMDAxMCwgMHg0MDAwODAwMCk7CisJJmRhdGFfd29yZCgweDAwMTAwMDEwLCAweDQwMTA4MDAwLCAweDQwMTAwMDAwLCAweDAwMDAwMDEwKTsKKwkmZGF0YV93b3JkKDB4MDAxMDAwMDAsIDB4NDAwMDgwMTAsIDB4NDAxMDAwMTAsIDB4MDAwMDgwMDApOworCSZkYXRhX3dvcmQoMHgwMDEwODAxMCwgMHg0MDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDEwMDAxMCk7CisJJmRhdGFfd29yZCgweDQwMDA4MDEwLCAweDAwMTA4MDEwLCAweDQwMTA4MDAwLCAweDQwMDAwMDEwKTsKKwkmZGF0YV93b3JkKDB4NDAwMDAwMDAsIDB4MDAxMDAwMDAsIDB4MDAwMDgwMTAsIDB4NDAxMDgwMTApOworCSZkYXRhX3dvcmQoMHgwMDEwMDAxMCwgMHg0MDEwODAwMCwgMHg0MDAwODAwMCwgMHgwMDEwODAxMCk7CisJJmRhdGFfd29yZCgweDQwMTA4MDEwLCAweDAwMTAwMDEwLCAweDQwMDAwMDEwLCAweDAwMDAwMDAwKTsKKwkmZGF0YV93b3JkKDB4NDAwMDAwMDAsIDB4MDAwMDgwMTAsIDB4MDAxMDAwMDAsIDB4NDAxMDAwMTApOworCSZkYXRhX3dvcmQoMHgwMDAwODAwMCwgMHg0MDAwMDAwMCwgMHgwMDEwODAxMCwgMHg0MDAwODAxMCk7CisJJmRhdGFfd29yZCgweDQwMTA4MDAwLCAweDAwMDA4MDAwLCAweDAwMDAwMDAwLCAweDQwMDAwMDEwKTsKKwkmZGF0YV93b3JkKDB4MDAwMDAwMTAsIDB4NDAxMDgwMTAsIDB4MDAxMDgwMDAsIDB4NDAxMDAwMDApOworCSZkYXRhX3dvcmQoMHg0MDEwMDAxMCwgMHgwMDEwMDAwMCwgMHgwMDAwODAxMCwgMHg0MDAwODAwMCk7CisJJmRhdGFfd29yZCgweDQwMDA4MDEwLCAweDAwMDAwMDEwLCAweDQwMTAwMDAwLCAweDAwMTA4MDAwKTsKKwkjIG5pYmJsZSAyCisJJmRhdGFfd29yZCgweDA0MDAwMDAxLCAweDA0MDQwMTAwLCAweDAwMDAwMTAwLCAweDA0MDAwMTAxKTsKKwkmZGF0YV93b3JkKDB4MDAwNDAwMDEsIDB4MDQwMDAwMDAsIDB4MDQwMDAxMDEsIDB4MDAwNDAxMDApOworCSZkYXRhX3dvcmQoMHgwNDAwMDEwMCwgMHgwMDA0MDAwMCwgMHgwNDA0MDAwMCwgMHgwMDAwMDAwMSk7CisJJmRhdGFfd29yZCgweDA0MDQwMTAxLCAweDAwMDAwMTAxLCAweDAwMDAwMDAxLCAweDA0MDQwMDAxKTsKKwkmZGF0YV93b3JkKDB4MDAwMDAwMDAsIDB4MDAwNDAwMDEsIDB4MDQwNDAxMDAsIDB4MDAwMDAxMDApOworCSZkYXRhX3dvcmQoMHgwMDAwMDEwMSwgMHgwNDA0MDEwMSwgMHgwMDA0MDAwMCwgMHgwNDAwMDAwMSk7CisJJmRhdGFfd29yZCgweDA0MDQwMDAxLCAweDA0MDAwMTAwLCAweDAwMDQwMTAxLCAweDA0MDQwMDAwKTsKKwkmZGF0YV93b3JkKDB4MDAwNDAxMDAsIDB4MDAwMDAwMDAsIDB4MDQwMDAwMDAsIDB4MDAwNDAxMDEpOworCSZkYXRhX3dvcmQoMHgwNDA0MDEwMCwgMHgwMDAwMDEwMCwgMHgwMDAwMDAwMSwgMHgwMDA0MDAwMCk7CisJJmRhdGFfd29yZCgweDAwMDAwMTAxLCAweDAwMDQwMDAxLCAweDA0MDQwMDAwLCAweDA0MDAwMTAxKTsKKwkmZGF0YV93b3JkKDB4MDAwMDAwMDAsIDB4MDQwNDAxMDAsIDB4MDAwNDAxMDAsIDB4MDQwNDAwMDEpOworCSZkYXRhX3dvcmQoMHgwMDA0MDAwMSwgMHgwNDAwMDAwMCwgMHgwNDA0MDEwMSwgMHgwMDAwMDAwMSk7CisJJmRhdGFfd29yZCgweDAwMDQwMTAxLCAweDA0MDAwMDAxLCAweDA0MDAwMDAwLCAweDA0MDQwMTAxKTsKKwkmZGF0YV93b3JkKDB4MDAwNDAwMDAsIDB4MDQwMDAxMDAsIDB4MDQwMDAxMDEsIDB4MDAwNDAxMDApOworCSZkYXRhX3dvcmQoMHgwNDAwMDEwMCwgMHgwMDAwMDAwMCwgMHgwNDA0MDAwMSwgMHgwMDAwMDEwMSk7CisJJmRhdGFfd29yZCgweDA0MDAwMDAxLCAweDAwMDQwMTAxLCAweDAwMDAwMTAwLCAweDA0MDQwMDAwKTsKKwkjIG5pYmJsZSAzCisJJmRhdGFfd29yZCgweDAwNDAxMDA4LCAweDEwMDAxMDAwLCAweDAwMDAwMDA4LCAweDEwNDAxMDA4KTsKKwkmZGF0YV93b3JkKDB4MDAwMDAwMDAsIDB4MTA0MDAwMDAsIDB4MTAwMDEwMDgsIDB4MDA0MDAwMDgpOworCSZkYXRhX3dvcmQoMHgxMDQwMTAwMCwgMHgxMDAwMDAwOCwgMHgxMDAwMDAwMCwgMHgwMDAwMTAwOCk7CisJJmRhdGFfd29yZCgweDEwMDAwMDA4LCAweDAwNDAxMDA4LCAweDAwNDAwMDAwLCAweDEwMDAwMDAwKTsKKwkmZGF0YV93b3JkKDB4MTA0MDAwMDgsIDB4MDA0MDEwMDAsIDB4MDAwMDEwMDAsIDB4MDAwMDAwMDgpOworCSZkYXRhX3dvcmQoMHgwMDQwMTAwMCwgMHgxMDAwMTAwOCwgMHgxMDQwMDAwMCwgMHgwMDAwMTAwMCk7CisJJmRhdGFfd29yZCgweDAwMDAxMDA4LCAweDAwMDAwMDAwLCAweDAwNDAwMDA4LCAweDEwNDAxMDAwKTsKKwkmZGF0YV93b3JkKDB4MTAwMDEwMDAsIDB4MTA0MDAwMDgsIDB4MTA0MDEwMDgsIDB4MDA0MDAwMDApOworCSZkYXRhX3dvcmQoMHgxMDQwMDAwOCwgMHgwMDAwMTAwOCwgMHgwMDQwMDAwMCwgMHgxMDAwMDAwOCk7CisJJmRhdGFfd29yZCgweDAwNDAxMDAwLCAweDEwMDAxMDAwLCAweDAwMDAwMDA4LCAweDEwNDAwMDAwKTsKKwkmZGF0YV93b3JkKDB4MTAwMDEwMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDEwMDAsIDB4MDA0MDAwMDgpOworCSZkYXRhX3dvcmQoMHgwMDAwMDAwMCwgMHgxMDQwMDAwOCwgMHgxMDQwMTAwMCwgMHgwMDAwMTAwMCk7CisJJmRhdGFfd29yZCgweDEwMDAwMDAwLCAweDEwNDAxMDA4LCAweDAwNDAxMDA4LCAweDAwNDAwMDAwKTsKKwkmZGF0YV93b3JkKDB4MTA0MDEwMDgsIDB4MDAwMDAwMDgsIDB4MTAwMDEwMDAsIDB4MDA0MDEwMDgpOworCSZkYXRhX3dvcmQoMHgwMDQwMDAwOCwgMHgwMDQwMTAwMCwgMHgxMDQwMDAwMCwgMHgxMDAwMTAwOCk7CisJJmRhdGFfd29yZCgweDAwMDAxMDA4LCAweDEwMDAwMDAwLCAweDEwMDAwMDA4LCAweDEwNDAxMDAwKTsKKwkjIG5pYmJsZSA0CisJJmRhdGFfd29yZCgweDA4MDAwMDAwLCAweDAwMDEwMDAwLCAweDAwMDAwNDAwLCAweDA4MDEwNDIwKTsKKwkmZGF0YV93b3JkKDB4MDgwMTAwMjAsIDB4MDgwMDA0MDAsIDB4MDAwMTA0MjAsIDB4MDgwMTAwMDApOworCSZkYXRhX3dvcmQoMHgwMDAxMDAwMCwgMHgwMDAwMDAyMCwgMHgwODAwMDAyMCwgMHgwMDAxMDQwMCk7CisJJmRhdGFfd29yZCgweDA4MDAwNDIwLCAweDA4MDEwMDIwLCAweDA4MDEwNDAwLCAweDAwMDAwMDAwKTsKKwkmZGF0YV93b3JkKDB4MDAwMTA0MDAsIDB4MDgwMDAwMDAsIDB4MDAwMTAwMjAsIDB4MDAwMDA0MjApOworCSZkYXRhX3dvcmQoMHgwODAwMDQwMCwgMHgwMDAxMDQyMCwgMHgwMDAwMDAwMCwgMHgwODAwMDAyMCk7CisJJmRhdGFfd29yZCgweDAwMDAwMDIwLCAweDA4MDAwNDIwLCAweDA4MDEwNDIwLCAweDAwMDEwMDIwKTsKKwkmZGF0YV93b3JkKDB4MDgwMTAwMDAsIDB4MDAwMDA0MDAsIDB4MDAwMDA0MjAsIDB4MDgwMTA0MDApOworCSZkYXRhX3dvcmQoMHgwODAxMDQwMCwgMHgwODAwMDQyMCwgMHgwMDAxMDAyMCwgMHgwODAxMDAwMCk7CisJJmRhdGFfd29yZCgweDAwMDEwMDAwLCAweDAwMDAwMDIwLCAweDA4MDAwMDIwLCAweDA4MDAwNDAwKTsKKwkmZGF0YV93b3JkKDB4MDgwMDAwMDAsIDB4MDAwMTA0MDAsIDB4MDgwMTA0MjAsIDB4MDAwMDAwMDApOworCSZkYXRhX3dvcmQoMHgwMDAxMDQyMCwgMHgwODAwMDAwMCwgMHgwMDAwMDQwMCwgMHgwMDAxMDAyMCk7CisJJmRhdGFfd29yZCgweDA4MDAwNDIwLCAweDAwMDAwNDAwLCAweDAwMDAwMDAwLCAweDA4MDEwNDIwKTsKKwkmZGF0YV93b3JkKDB4MDgwMTAwMjAsIDB4MDgwMTA0MDAsIDB4MDAwMDA0MjAsIDB4MDAwMTAwMDApOworCSZkYXRhX3dvcmQoMHgwMDAxMDQwMCwgMHgwODAxMDAyMCwgMHgwODAwMDQwMCwgMHgwMDAwMDQyMCk7CisJJmRhdGFfd29yZCgweDAwMDAwMDIwLCAweDAwMDEwNDIwLCAweDA4MDEwMDAwLCAweDA4MDAwMDIwKTsKKwkjIG5pYmJsZSA1CisJJmRhdGFfd29yZCgweDgwMDAwMDQwLCAweDAwMjAwMDQwLCAweDAwMDAwMDAwLCAweDgwMjAyMDAwKTsKKwkmZGF0YV93b3JkKDB4MDAyMDAwNDAsIDB4MDAwMDIwMDAsIDB4ODAwMDIwNDAsIDB4MDAyMDAwMDApOworCSZkYXRhX3dvcmQoMHgwMDAwMjA0MCwgMHg4MDIwMjA0MCwgMHgwMDIwMjAwMCwgMHg4MDAwMDAwMCk7CisJJmRhdGFfd29yZCgweDgwMDAyMDAwLCAweDgwMDAwMDQwLCAweDgwMjAwMDAwLCAweDAwMjAyMDQwKTsKKwkmZGF0YV93b3JkKDB4MDAyMDAwMDAsIDB4ODAwMDIwNDAsIDB4ODAyMDAwNDAsIDB4MDAwMDAwMDApOworCSZkYXRhX3dvcmQoMHgwMDAwMjAwMCwgMHgwMDAwMDA0MCwgMHg4MDIwMjAwMCwgMHg4MDIwMDA0MCk7CisJJmRhdGFfd29yZCgweDgwMjAyMDQwLCAweDgwMjAwMDAwLCAweDgwMDAwMDAwLCAweDAwMDAyMDQwKTsKKwkmZGF0YV93b3JkKDB4MDAwMDAwNDAsIDB4MDAyMDIwMDAsIDB4MDAyMDIwNDAsIDB4ODAwMDIwMDApOworCSZkYXRhX3dvcmQoMHgwMDAwMjA0MCwgMHg4MDAwMDAwMCwgMHg4MDAwMjAwMCwgMHgwMDIwMjA0MCk7CisJJmRhdGFfd29yZCgweDgwMjAyMDAwLCAweDAwMjAwMDQwLCAweDAwMDAwMDAwLCAweDgwMDAyMDAwKTsKKwkmZGF0YV93b3JkKDB4ODAwMDAwMDAsIDB4MDAwMDIwMDAsIDB4ODAyMDAwNDAsIDB4MDAyMDAwMDApOworCSZkYXRhX3dvcmQoMHgwMDIwMDA0MCwgMHg4MDIwMjA0MCwgMHgwMDIwMjAwMCwgMHgwMDAwMDA0MCk7CisJJmRhdGFfd29yZCgweDgwMjAyMDQwLCAweDAwMjAyMDAwLCAweDAwMjAwMDAwLCAweDgwMDAyMDQwKTsKKwkmZGF0YV93b3JkKDB4ODAwMDAwNDAsIDB4ODAyMDAwMDAsIDB4MDAyMDIwNDAsIDB4MDAwMDAwMDApOworCSZkYXRhX3dvcmQoMHgwMDAwMjAwMCwgMHg4MDAwMDA0MCwgMHg4MDAwMjA0MCwgMHg4MDIwMjAwMCk7CisJJmRhdGFfd29yZCgweDgwMjAwMDAwLCAweDAwMDAyMDQwLCAweDAwMDAwMDQwLCAweDgwMjAwMDQwKTsKKwkjIG5pYmJsZSA2CisJJmRhdGFfd29yZCgweDAwMDA0MDAwLCAweDAwMDAwMjAwLCAweDAxMDAwMjAwLCAweDAxMDAwMDA0KTsKKwkmZGF0YV93b3JkKDB4MDEwMDQyMDQsIDB4MDAwMDQwMDQsIDB4MDAwMDQyMDAsIDB4MDAwMDAwMDApOworCSZkYXRhX3dvcmQoMHgwMTAwMDAwMCwgMHgwMTAwMDIwNCwgMHgwMDAwMDIwNCwgMHgwMTAwNDAwMCk7CisJJmRhdGFfd29yZCgweDAwMDAwMDA0LCAweDAxMDA0MjAwLCAweDAxMDA0MDAwLCAweDAwMDAwMjA0KTsKKwkmZGF0YV93b3JkKDB4MDEwMDAyMDQsIDB4MDAwMDQwMDAsIDB4MDAwMDQwMDQsIDB4MDEwMDQyMDQpOworCSZkYXRhX3dvcmQoMHgwMDAwMDAwMCwgMHgwMTAwMDIwMCwgMHgwMTAwMDAwNCwgMHgwMDAwNDIwMCk7CisJJmRhdGFfd29yZCgweDAxMDA0MDA0LCAweDAwMDA0MjA0LCAweDAxMDA0MjAwLCAweDAwMDAwMDA0KTsKKwkmZGF0YV93b3JkKDB4MDAwMDQyMDQsIDB4MDEwMDQwMDQsIDB4MDAwMDAyMDAsIDB4MDEwMDAwMDApOworCSZkYXRhX3dvcmQoMHgwMDAwNDIwNCwgMHgwMTAwNDAwMCwgMHgwMTAwNDAwNCwgMHgwMDAwMDIwNCk7CisJJmRhdGFfd29yZCgweDAwMDA0MDAwLCAweDAwMDAwMjAwLCAweDAxMDAwMDAwLCAweDAxMDA0MDA0KTsKKwkmZGF0YV93b3JkKDB4MDEwMDAyMDQsIDB4MDAwMDQyMDQsIDB4MDAwMDQyMDAsIDB4MDAwMDAwMDApOworCSZkYXRhX3dvcmQoMHgwMDAwMDIwMCwgMHgwMTAwMDAwNCwgMHgwMDAwMDAwNCwgMHgwMTAwMDIwMCk7CisJJmRhdGFfd29yZCgweDAwMDAwMDAwLCAweDAxMDAwMjA0LCAweDAxMDAwMjAwLCAweDAwMDA0MjAwKTsKKwkmZGF0YV93b3JkKDB4MDAwMDAyMDQsIDB4MDAwMDQwMDAsIDB4MDEwMDQyMDQsIDB4MDEwMDAwMDApOworCSZkYXRhX3dvcmQoMHgwMTAwNDIwMCwgMHgwMDAwMDAwNCwgMHgwMDAwNDAwNCwgMHgwMTAwNDIwNCk7CisJJmRhdGFfd29yZCgweDAxMDAwMDA0LCAweDAxMDA0MjAwLCAweDAxMDA0MDAwLCAweDAwMDA0MDA0KTsKKwkjIG5pYmJsZSA3CisJJmRhdGFfd29yZCgweDIwODAwMDgwLCAweDIwODIwMDAwLCAweDAwMDIwMDgwLCAweDAwMDAwMDAwKTsKKwkmZGF0YV93b3JkKDB4MjAwMjAwMDAsIDB4MDA4MDAwODAsIDB4MjA4MDAwMDAsIDB4MjA4MjAwODApOworCSZkYXRhX3dvcmQoMHgwMDAwMDA4MCwgMHgyMDAwMDAwMCwgMHgwMDgyMDAwMCwgMHgwMDAyMDA4MCk7CisJJmRhdGFfd29yZCgweDAwODIwMDgwLCAweDIwMDIwMDgwLCAweDIwMDAwMDgwLCAweDIwODAwMDAwKTsKKwkmZGF0YV93b3JkKDB4MDAwMjAwMDAsIDB4MDA4MjAwODAsIDB4MDA4MDAwODAsIDB4MjAwMjAwMDApOworCSZkYXRhX3dvcmQoMHgyMDgyMDA4MCwgMHgyMDAwMDA4MCwgMHgwMDAwMDAwMCwgMHgwMDgyMDAwMCk7CisJJmRhdGFfd29yZCgweDIwMDAwMDAwLCAweDAwODAwMDAwLCAweDIwMDIwMDgwLCAweDIwODAwMDgwKTsKKwkmZGF0YV93b3JkKDB4MDA4MDAwMDAsIDB4MDAwMjAwMDAsIDB4MjA4MjAwMDAsIDB4MDAwMDAwODApOworCSZkYXRhX3dvcmQoMHgwMDgwMDAwMCwgMHgwMDAyMDAwMCwgMHgyMDAwMDA4MCwgMHgyMDgyMDA4MCk7CisJJmRhdGFfd29yZCgweDAwMDIwMDgwLCAweDIwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwODIwMDAwKTsKKwkmZGF0YV93b3JkKDB4MjA4MDAwODAsIDB4MjAwMjAwODAsIDB4MjAwMjAwMDAsIDB4MDA4MDAwODApOworCSZkYXRhX3dvcmQoMHgyMDgyMDAwMCwgMHgwMDAwMDA4MCwgMHgwMDgwMDA4MCwgMHgyMDAyMDAwMCk7CisJJmRhdGFfd29yZCgweDIwODIwMDgwLCAweDAwODAwMDAwLCAweDIwODAwMDAwLCAweDIwMDAwMDgwKTsKKwkmZGF0YV93b3JkKDB4MDA4MjAwMDAsIDB4MDAwMjAwODAsIDB4MjAwMjAwODAsIDB4MjA4MDAwMDApOworCSZkYXRhX3dvcmQoMHgwMDAwMDA4MCwgMHgyMDgyMDAwMCwgMHgwMDgyMDA4MCwgMHgwMDAwMDAwMCk7CisJJmRhdGFfd29yZCgweDIwMDAwMDAwLCAweDIwODAwMDgwLCAweDAwMDIwMDAwLCAweDAwODIwMDgwKTsKKwl9CmRpZmYgLS1naXQgYS9jcnlwdG8vZGVzL2FzbS9kZXM2ODYucGwgYi9jcnlwdG8vZGVzL2FzbS9kZXM2ODYucGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzYWQ1ZDUuLjAwMDAwMDAKLS0tIGEvY3J5cHRvL2Rlcy9hc20vZGVzNjg2LnBsCisrKyAvZGV2L251bGwKQEAgLTEsMjMwICswLDAgQEAKLSMhL3Vzci9sb2NhbC9iaW4vcGVybAotCi0kcHJvZz0iZGVzNjg2LnBsIjsKLQotIyBiYXNlIGNvZGUgaXMgaW4gbWljcm9zZnQKLSMgb3AgZGVzdCwgc291cmNlCi0jIGZvcm1hdC4KLSMKLQotIyBXSUxMIE5PVCBXT1JLIEFOWU1PUkUgV0lUSCBkZXNib3RoLnBsCi1yZXF1aXJlICJkZXNib3RoLnBsIjsKLQotaWYgKAkoJEFSR1ZbMF0gZXEgImVsZiIpKQotCXsgcmVxdWlyZSAieDg2dW5peC5wbCI7IH0KLWVsc2lmICgJKCRBUkdWWzBdIGVxICJhLm91dCIpKQotCXsgJGFvdXQ9MTsgcmVxdWlyZSAieDg2dW5peC5wbCI7IH0KLWVsc2lmICgJKCRBUkdWWzBdIGVxICJzb2wiKSkKLQl7ICRzb2w9MTsgcmVxdWlyZSAieDg2dW5peC5wbCI7IH0KLWVsc2lmICggKCRBUkdWWzBdIGVxICJjcHAiKSkKLQl7ICRjcHA9MTsgcmVxdWlyZSAieDg2dW5peC5wbCI7IH0KLWVsc2lmICgJKCRBUkdWWzBdIGVxICJ3aW4zMiIpKQotCXsgcmVxdWlyZSAieDg2bXMucGwiOyB9Ci1lbHNlCi0JewotCXByaW50IFNUREVSUiA8PCJFT0YiOwotUGljayBvbmUgdGFyZ2V0IHR5cGUgZnJvbQotCWVsZgktIGxpbnV4LCBGcmVlQlNEIGV0YwotCWEub3V0CS0gb2xkIGxpbnV4Ci0Jc29sCS0geDg2IHNvbGFyaXMKLQljcHAJLSBmb3JtYXQgc28geDg2dW5peC5jcHAgY2FuIGJlIHVzZWQKLQl3aW4zMgktIFdpbmRvd3MgOTUvV2luZG93cyBOVAotRU9GCi0JZXhpdCgxKTsKLQl9Ci0KLSZjb21tZW50KCJEb24ndCBldmVuIHRoaW5rIG9mIHJlYWRpbmcgdGhpcyBjb2RlIik7Ci0mY29tbWVudCgiSXQgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5ICRwcm9nIik7Ci0mY29tbWVudCgiV2hpY2ggaXMgYSBwZXJsIHByb2dyYW0gdXNlZCB0byBnZW5lcmF0ZSB0aGUgeDg2IGFzc2VtYmVyIGZvciIpOwotJmNvbW1lbnQoImFueSBvZiBlbGYsIGEub3V0LCBXaW4zMiwgb3IgU29sYXJpcyIpOwotJmNvbW1lbnQoIkl0IGNhbiBiZSBmb3VuZCBpbiBTU0xlYXkgMC42LjUrIG9yIGluIGxpYmRlcyAzLjI2KyIpOwotJmNvbW1lbnQoImVyaWMgPGVheVxAY3J5cHRzb2Z0LmNvbT4iKTsKLSZjb21tZW50KCIiKTsKLQotJmZpbGUoImR4ODZ4eHh4Iik7Ci0KLSRMPSJlZGkiOwotJFI9ImVzaSI7Ci0KLSZERVNfZW5jcnlwdCgiREVTX2VuY3J5cHQxIiwxKTsKLSZERVNfZW5jcnlwdCgiREVTX2VuY3J5cHQyIiwwKTsKLQotJkRFU19lbmNyeXB0MygiREVTX2VuY3J5cHQzIiwxKTsKLSZERVNfZW5jcnlwdDMoIkRFU19kZWNyeXB0MyIsMCk7Ci0KLSZmaWxlX2VuZCgpOwotCi1zdWIgREVTX2VuY3J5cHQKLQl7Ci0JbG9jYWwoJG5hbWUsJGRvX2lwKT1AXzsKLQotCSZmdW5jdGlvbl9iZWdpbigkbmFtZSwiRVhUUk4gICBfREVTX1NQdHJhbnM6RFdPUkQiKTsKLQotCSZjb21tZW50KCIiKTsKLQkmY29tbWVudCgiTG9hZCB0aGUgMiB3b3JkcyIpOwotCSZtb3YoImVheCIsJndwYXJhbSgwKSk7Ci0JJm1vdigkTCwmRFdQKDAsImVheCIsIiIsMCkpOwotCSZtb3YoJFIsJkRXUCg0LCJlYXgiLCIiLDApKTsKLQotCSRrc3A9JndwYXJhbSgxKTsKLQotCWlmICgkZG9faXApCi0JCXsKLQkJJmNvbW1lbnQoIiIpOwotCQkmY29tbWVudCgiSVAiKTsKLQkJJklQX25ldygkTCwkUiwiZWF4Iik7Ci0JCX0KLQotCSZjb21tZW50KCIiKTsKLQkmY29tbWVudCgiZml4dXAgcm90YXRlIik7Ci0JJnJvdGwoJFIsMyk7Ci0JJnJvdGwoJEwsMyk7Ci0JJmV4Y2goJEwsJFIpOwotCi0JJmNvbW1lbnQoIiIpOwotCSZjb21tZW50KCJsb2FkIGNvdW50ZXIsIGtleV9zY2hlZHVsZSBhbmQgZW5jIGZsYWciKTsKLQkmbW92KCJlYXgiLCZ3cGFyYW0oMikpOwkjIGdldCBlbmNyeXB0IGZsYWcKLQkmbW92KCJlYnAiLCZ3cGFyYW0oMSkpOwkjIGdldCBrcwotCSZjbXAoImVheCIsIjAiKTsKLQkmamUoJmxhYmVsKCJzdGFydF9kZWNyeXB0IikpOwotCi0JIyBlbmNyeXB0aW5nIHBhcnQKLQotCWZvciAoJGk9MDsgJGk8MTY7ICRpKz0yKQotCQl7Ci0JCSZjb21tZW50KCIiKTsKLQkJJmNvbW1lbnQoIlJvdW5kICRpIik7Ci0JCSZEX0VOQ1JZUFQoJEwsJFIsJGkqMiwiZWJwIiwiREVTX1NQdHJhbnMiLCJlY3giLCJlZHgiLCJlYXgiLCJlYngiKTsKLQotCQkmY29tbWVudCgiIik7Ci0JCSZjb21tZW50KCJSb3VuZCAiLnNwcmludGYoIiVkIiwkaSsxKSk7Ci0JCSZEX0VOQ1JZUFQoJFIsJEwsKCRpKzEpKjIsImVicCIsIkRFU19TUHRyYW5zIiwiZWN4IiwiZWR4IiwiZWF4IiwiZWJ4Iik7Ci0JCX0KLQkmam1wKCZsYWJlbCgiZW5kIikpOwotCi0JJnNldF9sYWJlbCgic3RhcnRfZGVjcnlwdCIpOwotCi0JZm9yICgkaT0xNTsgJGk+MDsgJGktPTIpCi0JCXsKLQkJJmNvbW1lbnQoIiIpOwotCQkmY29tbWVudCgiUm91bmQgJGkiKTsKLQkJJkRfRU5DUllQVCgkTCwkUiwkaSoyLCJlYnAiLCJERVNfU1B0cmFucyIsImVjeCIsImVkeCIsImVheCIsImVieCIpOwotCQkmY29tbWVudCgiIik7Ci0JCSZjb21tZW50KCJSb3VuZCAiLnNwcmludGYoIiVkIiwkaS0xKSk7Ci0JCSZEX0VOQ1JZUFQoJFIsJEwsKCRpLTEpKjIsImVicCIsIkRFU19TUHRyYW5zIiwiZWN4IiwiZWR4IiwiZWF4IiwiZWJ4Iik7Ci0JCX0KLQotCSZzZXRfbGFiZWwoImVuZCIpOwotCi0JJmNvbW1lbnQoIiIpOwotCSZjb21tZW50KCJGaXh1cCIpOwotCSZyb3RyKCRMLDMpOwkJIyByCi0JJnJvdHIoJFIsMyk7CQkjIGwKLQotCWlmICgkZG9faXApCi0JCXsKLQkJJmNvbW1lbnQoIiIpOwotCQkmY29tbWVudCgiRlAiKTsKLQkJJkZQX25ldygkUiwkTCwiZWF4Iik7Ci0JCX0KLQotCSZtb3YoImVheCIsJndwYXJhbSgwKSk7Ci0JJm1vdigmRFdQKDAsImVheCIsIiIsMCksJEwpOwotCSZtb3YoJkRXUCg0LCJlYXgiLCIiLDApLCRSKTsKLQotCSZmdW5jdGlvbl9lbmQoJG5hbWUpOwotCX0KLQotCi0jIFRoZSBsb2dpYyBpcyB0byBsb2FkIFIgaW50byAyIHJlZ2lzdGVycyBhbmQgb3BlcmF0ZSBvbiBib3RoIGF0IHRoZSBzYW1lIHRpbWUuCi0jIFdlIGFsc28gbG9hZCB0aGUgMiBSJ3MgaW50byAyIG1vcmUgcmVnaXN0ZXJzIHNvIHdlIGNhbiBkbyB0aGUgJ21vdmUgd29yZCBkb3duIGEgYnl0ZScKLSMgd2hpbGUgYWxzbyBtYXNraW5nIHRoZSBvdGhlciBjb3B5IGFuZCBkb2luZyBhIGxvb2t1cC4gIFdlIHRoZW4gYWxzbyBhY2N1bXVsYXRlIHRoZQotIyBMIHZhbHVlIGluIDIgcmVnaXN0ZXJzIHRoZW4gY29tYmluZSB0aGVtIGF0IHRoZSBlbmQuCi1zdWIgRF9FTkNSWVBUCi0JewotCWxvY2FsKCRMLCRSLCRTLCRrcywkZGVzU1AsJHUsJHQsJHRtcDEsJHRtcDIsJHRtcDMpPUBfOwotCi0JJm1vdigJJHUsCQkmRFdQKCZuMmEoJFMqNCksJGtzLCIiLDApKTsKLQkmbW92KAkkdCwJCSZEV1AoJm4yYSgoJFMrMSkqNCksJGtzLCIiLDApKTsKLQkmeG9yKAkkdSwJCSRSCQkpOwotCSZ4b3IoCSR0LAkJJFIJCSk7Ci0JJnJvdHIoCSR0LAkJNAkJKTsKLQotCSMgdGhlIG51bWJlcnMgYXQgdGhlIGVuZCBvZiB0aGUgbGluZSBhcmUgb3JpZ2lvbmFsIGluc3RydWN0aW9uIG9yZGVyCi0JJm1vdigJJHRtcDIsCQkkdQkJKTsJCQkjIDEgMgotCSZtb3YoCSR0bXAxLAkJJHQJCSk7CQkJIyAxIDEKLQkmYW5kKAkkdG1wMiwJCSIweGZjIgkJKTsJCQkjIDEgNAotCSZhbmQoCSR0bXAxLAkJIjB4ZmMiCQkpOwkJCSMgMSAzCi0JJnNocigJJHQsCQk4CQkpOwkJCSMgMSA1Ci0JJnhvcigJJEwsCQkmRFdQKCIweDEwMCskZGVzU1AiLCR0bXAxLCIiLDApKTsJIyAxIDcKLQkmc2hyKAkkdSwJCTgJCSk7CQkJIyAxIDYKLQkmbW92KAkkdG1wMSwJCSZEV1AoIiAgICAgICRkZXNTUCIsJHRtcDIsIiIsMCkpOwkjIDEgOAotCi0JJm1vdigJJHRtcDIsCQkkdQkJKTsJCQkjIDIgMgotCSZ4b3IoCSRMLAkJJHRtcDEJCSk7CQkJIyAxIDkKLQkmYW5kKAkkdG1wMiwJCSIweGZjIgkJKTsJCQkjIDIgNAotCSZtb3YoCSR0bXAxLAkJJHQJCSk7CQkJIyAyIDEKLQkmYW5kKAkkdG1wMSwJCSIweGZjIgkJKTsJCQkjIDIgMwotCSZzaHIoCSR0LAkJOAkJKTsJCQkjIDIgNQotCSZ4b3IoCSRMLAkJJkRXUCgiMHgzMDArJGRlc1NQIiwkdG1wMSwiIiwwKSk7CSMgMiA3Ci0JJnNocigJJHUsCQk4CQkpOwkJCSMgMiA2Ci0JJm1vdigJJHRtcDEsCQkmRFdQKCIweDIwMCskZGVzU1AiLCR0bXAyLCIiLDApKTsJIyAyIDgKLQkmbW92KAkkdG1wMiwJCSR1CQkpOwkJCSMgMyAyCi0KLQkmeG9yKAkkTCwJCSR0bXAxCQkpOwkJCSMgMiA5Ci0JJmFuZCgJJHRtcDIsCQkiMHhmYyIJCSk7CQkJIyAzIDQKLQotCSZtb3YoCSR0bXAxLAkJJHQJCSk7CQkJIyAzIDEgCi0JJnNocigJJHUsCQk4CQkpOwkJCSMgMyA2Ci0JJmFuZCgJJHRtcDEsCQkiMHhmYyIJCSk7CQkJIyAzIDMKLQkmc2hyKAkkdCwJCTgJCSk7CQkJIyAzIDUKLQkmeG9yKAkkTCwJCSZEV1AoIjB4NTAwKyRkZXNTUCIsJHRtcDEsIiIsMCkpOwkjIDMgNwotCSZtb3YoCSR0bXAxLAkJJkRXUCgiMHg0MDArJGRlc1NQIiwkdG1wMiwiIiwwKSk7CSMgMyA4Ci0KLQkmYW5kKAkkdCwJCSIweGZjIgkJKTsJCQkjIDQgMQotCSZ4b3IoCSRMLAkJJHRtcDEJCSk7CQkJIyAzIDkKLQotCSZhbmQoCSR1LAkJIjB4ZmMiCQkpOwkJCSMgNCAyCi0JJnhvcigJJEwsCQkmRFdQKCIweDcwMCskZGVzU1AiLCR0LCIiLDApKTsJCSMgNCAzCi0JJnhvcigJJEwsCQkmRFdQKCIweDYwMCskZGVzU1AiLCR1LCIiLDApKTsJCSMgNCA0Ci0JfQotCi1zdWIgUEVSTV9PUAotCXsKLQlsb2NhbCgkYSwkYiwkdHQsJHNoaWZ0LCRtYXNrKT1AXzsKLQotCSZtb3YoCSR0dCwJCSRhCQkpOwotCSZzaHIoCSR0dCwJCSRzaGlmdAkJKTsKLQkmeG9yKAkkdHQsCQkkYgkJKTsKLQkmYW5kKAkkdHQsCQkkbWFzawkJKTsKLQkmeG9yKAkkYiwJCSR0dAkJKTsKLQkmc2hsKAkkdHQsCQkkc2hpZnQJCSk7Ci0JJnhvcigJJGEsCQkkdHQJCSk7Ci0JfQotCi1zdWIgSVBfbmV3Ci0JewotCWxvY2FsKCRsLCRyLCR0dCk9QF87Ci0KLQkmUEVSTV9PUCgkciwkbCwkdHQsIDQsIjB4MGYwZjBmMGYiKTsKLQkmUEVSTV9PUCgkbCwkciwkdHQsMTYsIjB4MDAwMGZmZmYiKTsKLQkmUEVSTV9PUCgkciwkbCwkdHQsIDIsIjB4MzMzMzMzMzMiKTsKLQkmUEVSTV9PUCgkbCwkciwkdHQsIDgsIjB4MDBmZjAwZmYiKTsKLQkmUEVSTV9PUCgkciwkbCwkdHQsIDEsIjB4NTU1NTU1NTUiKTsKLQl9Ci0KLXN1YiBGUF9uZXcKLQl7Ci0JbG9jYWwoJGwsJHIsJHR0KT1AXzsKLQotCSZQRVJNX09QKCRsLCRyLCR0dCwgMSwiMHg1NTU1NTU1NSIpOwotICAgICAgICAmUEVSTV9PUCgkciwkbCwkdHQsIDgsIjB4MDBmZjAwZmYiKTsKLSAgICAgICAgJlBFUk1fT1AoJGwsJHIsJHR0LCAyLCIweDMzMzMzMzMzIik7Ci0gICAgICAgICZQRVJNX09QKCRyLCRsLCR0dCwxNiwiMHgwMDAwZmZmZiIpOwotICAgICAgICAmUEVSTV9PUCgkbCwkciwkdHQsIDQsIjB4MGYwZjBmMGYiKTsKLQl9Ci0KLXN1YiBuMmEKLQl7Ci0Jc3ByaW50ZigiJWQiLCRfWzBdKTsKLQl9CmRpZmYgLS1naXQgYS9jcnlwdG8vZGVzL2FzbS9kZXNfZW5jLm00IGIvY3J5cHRvL2Rlcy9hc20vZGVzX2VuYy5tNAppbmRleCBmNTkzMzNhLi4zMjgwNTk1IDEwMDY0NAotLS0gYS9jcnlwdG8vZGVzL2FzbS9kZXNfZW5jLm00CisrKyBiL2NyeXB0by9kZXMvYXNtL2Rlc19lbmMubTQKQEAgLTE5NTQsOSArMTk1NCwxMSBAQAogCS53b3JkCUxPT1BTICAgICAgICAgICAgICAgICAgICAgISAyODAKIAkud29yZAkweDAwMDBGQzAwICAgICAgICAgICAgICAgICEgMjg0CiAKLQkudHlwZQkuUElDLkRFU19TUHRyYW5zLCNvYmplY3QKLQkuc2l6ZQkuUElDLkRFU19TUHRyYW5zLDIwNDgKKwkuZ2xvYmFsCURFU19TUHRyYW5zCisJLnR5cGUJREVTX1NQdHJhbnMsI29iamVjdAorCS5zaXplCURFU19TUHRyYW5zLDIwNDgKIC5hbGlnbgk2NAorREVTX1NQdHJhbnM6CiAuUElDLkRFU19TUHRyYW5zOgogCSEgbmliYmxlIDAKIAkud29yZAkweDAyMDgwODAwLCAweDAwMDgwMDAwLCAweDAyMDAwMDAyLCAweDAyMDgwODAyCmRpZmYgLS1naXQgYS9jcnlwdG8vZGVzL2Rlc19lbmMuYyBiL2NyeXB0by9kZXMvZGVzX2VuYy5jCmluZGV4IGNmNzE5NjUuLjgyOGZlYmEgMTAwNjQ0Ci0tLSBhL2NyeXB0by9kZXMvZGVzX2VuYy5jCisrKyBiL2NyeXB0by9kZXMvZGVzX2VuYy5jCkBAIC01Nyw2ICs1Nyw3IEBACiAgKi8KIAogI2luY2x1ZGUgImRlc19sb2NsLmgiCisjaW5jbHVkZSAic3ByLmgiCiAKIHZvaWQgREVTX2VuY3J5cHQxKERFU19MT05HICpkYXRhLCBERVNfa2V5X3NjaGVkdWxlICprcywgaW50IGVuYykKIAl7CkBAIC0xMDcsMTIgKzEwOCwxMCBAQAogCQlEX0VOQ1JZUFQobCxyLDI4KTsgLyogIDE1ICovCiAJCURfRU5DUllQVChyLGwsMzApOyAvKiAgMTYgKi8KICNlbHNlCi0JCWZvciAoaT0wOyBpPDMyOyBpKz04KQorCQlmb3IgKGk9MDsgaTwzMjsgaSs9NCkKIAkJCXsKIAkJCURfRU5DUllQVChsLHIsaSswKTsgLyogIDEgKi8KIAkJCURfRU5DUllQVChyLGwsaSsyKTsgLyogIDIgKi8KLQkJCURfRU5DUllQVChsLHIsaSs0KTsgLyogIDMgKi8KLQkJCURfRU5DUllQVChyLGwsaSs2KTsgLyogIDQgKi8KIAkJCX0KICNlbmRpZgogCQl9CkBAIC0xMzYsMTIgKzEzNSwxMCBAQAogCQlEX0VOQ1JZUFQobCxyLCAyKTsgLyogIDIgKi8KIAkJRF9FTkNSWVBUKHIsbCwgMCk7IC8qICAxICovCiAjZWxzZQotCQlmb3IgKGk9MzA7IGk+MDsgaS09OCkKKwkJZm9yIChpPTMwOyBpPjA7IGktPTQpCiAJCQl7CiAJCQlEX0VOQ1JZUFQobCxyLGktMCk7IC8qIDE2ICovCiAJCQlEX0VOQ1JZUFQocixsLGktMik7IC8qIDE1ICovCi0JCQlEX0VOQ1JZUFQobCxyLGktNCk7IC8qIDE0ICovCi0JCQlEX0VOQ1JZUFQocixsLGktNik7IC8qIDEzICovCiAJCQl9CiAjZW5kaWYKIAkJfQpAQCAtMjAzLDEyICsyMDAsMTAgQEAKIAkJRF9FTkNSWVBUKGwsciwyOCk7IC8qICAxNSAqLwogCQlEX0VOQ1JZUFQocixsLDMwKTsgLyogIDE2ICovCiAjZWxzZQotCQlmb3IgKGk9MDsgaTwzMjsgaSs9OCkKKwkJZm9yIChpPTA7IGk8MzI7IGkrPTQpCiAJCQl7CiAJCQlEX0VOQ1JZUFQobCxyLGkrMCk7IC8qICAxICovCiAJCQlEX0VOQ1JZUFQocixsLGkrMik7IC8qICAyICovCi0JCQlEX0VOQ1JZUFQobCxyLGkrNCk7IC8qICAzICovCi0JCQlEX0VOQ1JZUFQocixsLGkrNik7IC8qICA0ICovCiAJCQl9CiAjZW5kaWYKIAkJfQpAQCAtMjMyLDEyICsyMjcsMTAgQEAKIAkJRF9FTkNSWVBUKGwsciwgMik7IC8qICAyICovCiAJCURfRU5DUllQVChyLGwsIDApOyAvKiAgMSAqLwogI2Vsc2UKLQkJZm9yIChpPTMwOyBpPjA7IGktPTgpCisJCWZvciAoaT0zMDsgaT4wOyBpLT00KQogCQkJewogCQkJRF9FTkNSWVBUKGwscixpLTApOyAvKiAxNiAqLwogCQkJRF9FTkNSWVBUKHIsbCxpLTIpOyAvKiAxNSAqLwotCQkJRF9FTkNSWVBUKGwscixpLTQpOyAvKiAxNCAqLwotCQkJRF9FTkNSWVBUKHIsbCxpLTYpOyAvKiAxMyAqLwogCQkJfQogI2VuZGlmCiAJCX0KQEAgLTI4OSw4ICsyODIsNiBAQAogCiAjaWZuZGVmIERFU19ERUZBVUxUX09QVElPTlMKIAotI2lmICFkZWZpbmVkKE9QRU5TU0xfRklQU19ERVNfQVNNKQotCiAjdW5kZWYgQ0JDX0VOQ19DX19ET05UX1VQREFURV9JVgogI2luY2x1ZGUgIm5jYmNfZW5jLmMiIC8qIERFU19uY2JjX2VuY3J5cHQgKi8KIApAQCAtNDA2LDYgKzM5Nyw0IEBACiAJdGluWzBdPXRpblsxXT0wOwogCX0KIAotI2VuZGlmCi0KICNlbmRpZiAvKiBERVNfREVGQVVMVF9PUFRJT05TICovCmRpZmYgLS1naXQgYS9jcnlwdG8vZGVzL2Rlc19saWIuYyBiL2NyeXB0by9kZXMvZGVzX2xpYi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNGIzMDQ3Li4wMDAwMDAwCi0tLSBhL2NyeXB0by9kZXMvZGVzX2xpYi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLS8qIGNyeXB0by9kZXMvZWNiX2VuYy5jICovCi0vKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCi0gKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCi0gKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCi0gKiAKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcwotICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAotICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCi0gKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCi0gKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSAqIAotICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KLSAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KLSAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KLSAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCi0gKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKLSAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKLSAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCi0gKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKLSAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgotICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCi0gKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgotICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICogCi0gKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgotICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCi0gKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCi0gKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQotICovCi0KLSNpbmNsdWRlICJkZXNfbG9jbC5oIgotI2luY2x1ZGUgImRlc192ZXIuaCIKLSNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+Ci0jaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KLQotT1BFTlNTTF9HTE9CQUwgY29uc3QgY2hhciBsaWJkZXNfdmVyc2lvbltdPSJsaWJkZXMiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKLU9QRU5TU0xfR0xPQkFMIGNvbnN0IGNoYXIgREVTX3ZlcnNpb25bXT0iREVTIiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7Ci0KLWNvbnN0IGNoYXIgKkRFU19vcHRpb25zKHZvaWQpCi0JewotCXN0YXRpYyBpbnQgaW5pdD0xOwotCXN0YXRpYyBjaGFyIGJ1ZlszMl07Ci0KLQlpZiAoaW5pdCkKLQkJewotCQljb25zdCBjaGFyICpwdHIsKnVucm9sbCwqcmlzYywqc2l6ZTsKLQotI2lmZGVmIERFU19QVFIKLQkJcHRyPSJwdHIiOwotI2Vsc2UKLQkJcHRyPSJpZHgiOwotI2VuZGlmCi0jaWYgZGVmaW5lZChERVNfUklTQzEpIHx8IGRlZmluZWQoREVTX1JJU0MyKQotI2lmZGVmIERFU19SSVNDMQotCQlyaXNjPSJyaXNjMSI7Ci0jZW5kaWYKLSNpZmRlZiBERVNfUklTQzIKLQkJcmlzYz0icmlzYzIiOwotI2VuZGlmCi0jZWxzZQotCQlyaXNjPSJjaXNjIjsKLSNlbmRpZgotI2lmZGVmIERFU19VTlJPTEwKLQkJdW5yb2xsPSIxNiI7Ci0jZWxzZQotCQl1bnJvbGw9IjQiOwotI2VuZGlmCi0JCWlmIChzaXplb2YoREVTX0xPTkcpICE9IHNpemVvZihsb25nKSkKLQkJCXNpemU9ImludCI7Ci0JCWVsc2UKLQkJCXNpemU9ImxvbmciOwotCQlCSU9fc25wcmludGYoYnVmLHNpemVvZiBidWYsImRlcyglcywlcywlcywlcykiLHB0cixyaXNjLHVucm9sbCwKLQkJCSAgICAgc2l6ZSk7Ci0JCWluaXQ9MDsKLQkJfQotCXJldHVybihidWYpOwotCX0KLQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Rlcy9kZXNfbG9jbC5oIGIvY3J5cHRvL2Rlcy9kZXNfbG9jbC5oCmluZGV4IDRiOWVjZmYuLmEzYjUxMmUgMTAwNjQ0Ci0tLSBhL2NyeXB0by9kZXMvZGVzX2xvY2wuaAorKysgYi9jcnlwdG8vZGVzL2Rlc19sb2NsLmgKQEAgLTYxLDcgKzYxLDcgQEAKIAogI2luY2x1ZGUgPG9wZW5zc2wvZV9vczIuaD4KIAotI2lmIGRlZmluZWQoT1BFTlNTTF9TWVNfV0lOMzIpIHx8IGRlZmluZWQoT1BFTlNTTF9TWVNfV0lOMTYpCisjaWYgZGVmaW5lZChPUEVOU1NMX1NZU19XSU4zMikKICNpZm5kZWYgT1BFTlNTTF9TWVNfTVNET1MKICNkZWZpbmUgT1BFTlNTTF9TWVNfTVNET1MKICNlbmRpZgpAQCAtNDI1LDQgKzQyNSw4IEBACiAKIHZvaWQgZmNyeXB0X2JvZHkoREVTX0xPTkcgKm91dCxERVNfa2V5X3NjaGVkdWxlICprcywKIAkJIERFU19MT05HIEVzd2FwMCwgREVTX0xPTkcgRXN3YXAxKTsKKworI2lmZGVmIE9QRU5TU0xfU01BTExfRk9PVFBSSU5UCisjdW5kZWYgREVTX1VOUk9MTAorI2VuZGlmCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2NyeXB0by9kZXMvZWNiX2VuYy5jIGIvY3J5cHRvL2Rlcy9lY2JfZW5jLmMKaW5kZXggNzVhZTZjZi4uMDY4NGU3NiAxMDA2NDQKLS0tIGEvY3J5cHRvL2Rlcy9lY2JfZW5jLmMKKysrIGIvY3J5cHRvL2Rlcy9lY2JfZW5jLmMKQEAgLTU3LDcgKzU3LDUzIEBACiAgKi8KIAogI2luY2x1ZGUgImRlc19sb2NsLmgiCi0jaW5jbHVkZSAic3ByLmgiCisjaW5jbHVkZSAiZGVzX3Zlci5oIgorI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgorCitPUEVOU1NMX0dMT0JBTCBjb25zdCBjaGFyIGxpYmRlc192ZXJzaW9uW109ImxpYmRlcyIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOworT1BFTlNTTF9HTE9CQUwgY29uc3QgY2hhciBERVNfdmVyc2lvbltdPSJERVMiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKKworY29uc3QgY2hhciAqREVTX29wdGlvbnModm9pZCkKKwl7CisJc3RhdGljIGludCBpbml0PTE7CisJc3RhdGljIGNoYXIgYnVmWzMyXTsKKworCWlmIChpbml0KQorCQl7CisJCWNvbnN0IGNoYXIgKnB0ciwqdW5yb2xsLCpyaXNjLCpzaXplOworCisjaWZkZWYgREVTX1BUUgorCQlwdHI9InB0ciI7CisjZWxzZQorCQlwdHI9ImlkeCI7CisjZW5kaWYKKyNpZiBkZWZpbmVkKERFU19SSVNDMSkgfHwgZGVmaW5lZChERVNfUklTQzIpCisjaWZkZWYgREVTX1JJU0MxCisJCXJpc2M9InJpc2MxIjsKKyNlbmRpZgorI2lmZGVmIERFU19SSVNDMgorCQlyaXNjPSJyaXNjMiI7CisjZW5kaWYKKyNlbHNlCisJCXJpc2M9ImNpc2MiOworI2VuZGlmCisjaWZkZWYgREVTX1VOUk9MTAorCQl1bnJvbGw9IjE2IjsKKyNlbHNlCisJCXVucm9sbD0iMiI7CisjZW5kaWYKKwkJaWYgKHNpemVvZihERVNfTE9ORykgIT0gc2l6ZW9mKGxvbmcpKQorCQkJc2l6ZT0iaW50IjsKKwkJZWxzZQorCQkJc2l6ZT0ibG9uZyI7CisJCUJJT19zbnByaW50ZihidWYsc2l6ZW9mIGJ1ZiwiZGVzKCVzLCVzLCVzLCVzKSIscHRyLHJpc2MsdW5yb2xsLAorCQkJICAgICBzaXplKTsKKwkJaW5pdD0wOworCQl9CisJcmV0dXJuKGJ1Zik7CisJfQorCQkKIAogdm9pZCBERVNfZWNiX2VuY3J5cHQoY29uc3RfREVTX2NibG9jayAqaW5wdXQsIERFU19jYmxvY2sgKm91dHB1dCwKIAkJICAgICBERVNfa2V5X3NjaGVkdWxlICprcywgaW50IGVuYykKZGlmZiAtLWdpdCBhL2NyeXB0by9kZXMvZW5jX3JlYWQuYyBiL2NyeXB0by9kZXMvZW5jX3JlYWQuYwppbmRleCBlN2RhMmVjLi5lZGI2NjIwIDEwMDY0NAotLS0gYS9jcnlwdG8vZGVzL2VuY19yZWFkLmMKKysrIGIvY3J5cHRvL2Rlcy9lbmNfcmVhZC5jCkBAIC02Myw3ICs2Myw3IEBACiAKIC8qIFRoaXMgaGFzIHNvbWUgdWdsaWVzIGluIGl0IGJ1dCBpdCB3b3JrcyAtIGV2ZW4gb3ZlciBzb2NrZXRzLiAqLwogLypleHRlcm4gaW50IGVycm5vOyovCi1PUEVOU1NMX0lNUExFTUVOVF9HTE9CQUwoaW50LERFU19yd19tb2RlKT1ERVNfUENCQ19NT0RFOworT1BFTlNTTF9JTVBMRU1FTlRfR0xPQkFMKGludCxERVNfcndfbW9kZSxERVNfUENCQ19NT0RFKQogCiAKIC8qCkBAIC04Nyw2ICs4Nyw5IEBACiBpbnQgREVTX2VuY19yZWFkKGludCBmZCwgdm9pZCAqYnVmLCBpbnQgbGVuLCBERVNfa2V5X3NjaGVkdWxlICpzY2hlZCwKIAkJIERFU19jYmxvY2sgKml2KQogCXsKKyNpZiBkZWZpbmVkKE9QRU5TU0xfTk9fUE9TSVhfSU8pCisJcmV0dXJuKDApOworI2Vsc2UKIAkvKiBkYXRhIHRvIGJlIHVuZW5jcnlwdGVkICovCiAJaW50IG5ldF9udW09MDsKIAlzdGF0aWMgdW5zaWduZWQgY2hhciAqbmV0PU5VTEw7CkBAIC0xNDcsNyArMTUwLDcgQEAKIAkvKiBmaXJzdCAtIGdldCB0aGUgbGVuZ3RoICovCiAJd2hpbGUgKG5ldF9udW0gPCBIRFJTSVpFKSAKIAkJewotI2lmbmRlZiBfV0lOMzIKKyNpZm5kZWYgT1BFTlNTTF9TWVNfV0lOMzIKIAkJaT1yZWFkKGZkLCh2b2lkICopJihuZXRbbmV0X251bV0pLEhEUlNJWkUtbmV0X251bSk7CiAjZWxzZQogCQlpPV9yZWFkKGZkLCh2b2lkICopJihuZXRbbmV0X251bV0pLEhEUlNJWkUtbmV0X251bSk7CkBAIC0xNzMsNyArMTc2LDExIEBACiAJbmV0X251bT0wOwogCXdoaWxlIChuZXRfbnVtIDwgcm51bSkKIAkJeworI2lmbmRlZiBPUEVOU1NMX1NZU19XSU4zMgogCQlpPXJlYWQoZmQsKHZvaWQgKikmKG5ldFtuZXRfbnVtXSkscm51bS1uZXRfbnVtKTsKKyNlbHNlCisJCWk9X3JlYWQoZmQsKHZvaWQgKikmKG5ldFtuZXRfbnVtXSkscm51bS1uZXRfbnVtKTsKKyNlbmRpZgogI2lmZGVmIEVJTlRSCiAJCWlmICgoaSA9PSAtMSkgJiYgKGVycm5vID09IEVJTlRSKSkgY29udGludWU7CiAjZW5kaWYKQEAgLTIyOCw1ICsyMzUsNiBAQAogCQkJfQogCQl9CiAJcmV0dXJuIG51bTsKKyNlbmRpZiAvKiBPUEVOU1NMX05PX1BPU0lYX0lPICovCiAJfQogCmRpZmYgLS1naXQgYS9jcnlwdG8vZGVzL2VuY193cml0LmMgYi9jcnlwdG8vZGVzL2VuY193cml0LmMKaW5kZXggYzJmMDMyYy4uMjM1M2FjMSAxMDA2NDQKLS0tIGEvY3J5cHRvL2Rlcy9lbmNfd3JpdC5jCisrKyBiL2NyeXB0by9kZXMvZW5jX3dyaXQuYwpAQCAtODAsNiArODAsOSBAQAogaW50IERFU19lbmNfd3JpdGUoaW50IGZkLCBjb25zdCB2b2lkICpfYnVmLCBpbnQgbGVuLAogCQkgIERFU19rZXlfc2NoZWR1bGUgKnNjaGVkLCBERVNfY2Jsb2NrICppdikKIAl7CisjaWYgZGVmaW5lZChPUEVOU1NMX05PX1BPU0lYX0lPKQorCXJldHVybiAoLTEpOworI2Vsc2UKICNpZmRlZiBfTElCQwogCWV4dGVybiB1bnNpZ25lZCBsb25nIHRpbWUoKTsKIAlleHRlcm4gaW50IHdyaXRlKCk7CkBAIC0xNzIsNCArMTc1LDUgQEAKIAkJfQogCiAJcmV0dXJuKGxlbik7CisjZW5kaWYgLyogT1BFTlNTTF9OT19QT1NJWF9JTyAqLwogCX0KZGlmZiAtLWdpdCBhL2NyeXB0by9kZXMvZmNyeXB0X2IuYyBiL2NyeXB0by9kZXMvZmNyeXB0X2IuYwppbmRleCAxMzkwMTM4Li44ODIyODE2IDEwMDY0NAotLS0gYS9jcnlwdG8vZGVzL2ZjcnlwdF9iLmMKKysrIGIvY3J5cHRvL2Rlcy9mY3J5cHRfYi5jCkBAIC0xMDAsMTIgKzEwMCwxMCBAQAogI2lmbmRlZiBERVNfVU5ST0xMCiAJCXJlZ2lzdGVyIGludCBpOwogCi0JCWZvciAoaT0wOyBpPDMyOyBpKz04KQorCQlmb3IgKGk9MDsgaTwzMjsgaSs9NCkKIAkJCXsKIAkJCURfRU5DUllQVChsLHIsaSswKTsgLyogIDEgKi8KIAkJCURfRU5DUllQVChyLGwsaSsyKTsgLyogIDIgKi8KLQkJCURfRU5DUllQVChsLHIsaSs0KTsgLyogIDEgKi8KLQkJCURfRU5DUllQVChyLGwsaSs2KTsgLyogIDIgKi8KIAkJCX0KICNlbHNlCiAJCURfRU5DUllQVChsLHIsIDApOyAvKiAgMSAqLwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Rlcy9zZXRfa2V5LmMgYi9jcnlwdG8vZGVzL3NldF9rZXkuYwppbmRleCBjMDgwNmQ1Li4zMDA0Y2MzIDEwMDY0NAotLS0gYS9jcnlwdG8vZGVzL3NldF9rZXkuYworKysgYi9jcnlwdG8vZGVzL3NldF9rZXkuYwpAQCAtNjQsMTIgKzY0LDggQEAKICAqIDEuMCBGaXJzdCB3b3JraW5nIHZlcnNpb24KICAqLwogI2luY2x1ZGUgImRlc19sb2NsLmgiCi0jaWZkZWYgT1BFTlNTTF9GSVBTCi0jaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0jZW5kaWYKIAotCi1PUEVOU1NMX0lNUExFTUVOVF9HTE9CQUwoaW50LERFU19jaGVja19rZXkpOwkvKiBkZWZhdWx0cyB0byBmYWxzZSAqLworT1BFTlNTTF9JTVBMRU1FTlRfR0xPQkFMKGludCxERVNfY2hlY2tfa2V5LDApCS8qIGRlZmF1bHRzIHRvIGZhbHNlICovCiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG9kZF9wYXJpdHlbMjU2XT17CiAgIDEsICAxLCAgMiwgIDIsICA0LCAgNCwgIDcsICA3LCAgOCwgIDgsIDExLCAxMSwgMTMsIDEzLCAxNCwgMTQsCkBAIC0zNDAsNyArMzM2LDcgQEAKIAogdm9pZCBERVNfc2V0X2tleV91bmNoZWNrZWQoY29uc3RfREVTX2NibG9jayAqa2V5LCBERVNfa2V5X3NjaGVkdWxlICpzY2hlZHVsZSkKIAl7Ci0Jc3RhdGljIGludCBzaGlmdHMyWzE2XT17MCwwLDEsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDEsMH07CisJc3RhdGljIGNvbnN0IGludCBzaGlmdHMyWzE2XT17MCwwLDEsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDEsMH07CiAJcmVnaXN0ZXIgREVTX0xPTkcgYyxkLHQscyx0MjsKIAlyZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICppbjsKIAlyZWdpc3RlciBERVNfTE9ORyAqazsKQEAgLTM1MywxMCArMzQ5LDYgQEAKIAlrID0gJnNjaGVkdWxlLT5rcy0+ZGVzbG9uZ1swXTsKIAlpbiA9ICYoKmtleSlbMF07CiAKLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLQlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0jZW5kaWYKLQogCWMybChpbixjKTsKIAljMmwoaW4sZCk7CiAKQEAgLTQxMyw0ICs0MDUsMyBAQAogCWRlc19zZXRfb2RkX3Bhcml0eShrZXkpOwogCX0KICovCi0KZGlmZiAtLWdpdCBhL2NyeXB0by9kZXMveGNiY19lbmMuYyBiL2NyeXB0by9kZXMveGNiY19lbmMuYwppbmRleCBkYzBjNzYxLi4wNThjYWI2IDEwMDY0NAotLS0gYS9jcnlwdG8vZGVzL3hjYmNfZW5jLmMKKysrIGIvY3J5cHRvL2Rlcy94Y2JjX2VuYy5jCkBAIC02MSw3ICs2MSw3IEBACiAvKiBSU0EncyBERVNYICovCiAKICNpZiAwIC8qIGJyb2tlbiBjb2RlLCBwcmVzZXJ2ZWQganVzdCBpbiBjYXNlIGFueW9uZSBzcGVjaWZpY2FsbHkgbG9va3MgZm9yIHRoaXMgKi8KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGRlc3hfd2hpdGVfaW4yb3V0WzI1Nl09eworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGVzeF93aGl0ZV9pbjJvdXRbMjU2XT17CiAweEJELDB4NTYsMHhFQSwweEYyLDB4QTIsMHhGMSwweEFDLDB4MkEsMHhCMCwweDkzLDB4RDEsMHg5QywweDFCLDB4MzMsMHhGRCwweEQwLAogMHgzMCwweDA0LDB4QjYsMHhEQywweDdELDB4REYsMHgzMiwweDRCLDB4RjcsMHhDQiwweDQ1LDB4OUIsMHgzMSwweEJCLDB4MjEsMHg1QSwKIDB4NDEsMHg5RiwweEUxLDB4RDksMHg0QSwweDRELDB4OUUsMHhEQSwweEEwLDB4NjgsMHgyQywweEMzLDB4MjcsMHg1RiwweDgwLDB4MzYsCmRpZmYgLS1naXQgYS9jcnlwdG8vZGgvTWFrZWZpbGUgYi9jcnlwdG8vZGgvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwMWZhOTYuLjAwMDAwMDAKLS0tIGEvY3J5cHRvL2RoL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAgQEAKLSMKLSMgT3BlblNTTC9jcnlwdG8vZGgvTWFrZWZpbGUKLSMKLQotRElSPQlkaAotVE9QPQkuLi8uLgotQ0M9CWNjCi1JTkNMVURFUz0gLUkuLiAtSSQoVE9QKSAtSS4uLy4uL2luY2x1ZGUKLUNGTEFHPS1nCi1NQUtFRklMRT0JTWFrZWZpbGUKLUFSPQkJYXIgcgotCi1DRkxBR1M9ICQoSU5DTFVERVMpICQoQ0ZMQUcpCi0KLUdFTkVSQUw9TWFrZWZpbGUKLVRFU1Q9IGRodGVzdC5jCi1BUFBTPQotCi1MSUI9JChUT1ApL2xpYmNyeXB0by5hCi1MSUJTUkM9IGRoX2FzbjEuYyBkaF9nZW4uYyBkaF9rZXkuYyBkaF9saWIuYyBkaF9jaGVjay5jIGRoX2Vyci5jIGRoX2RlcHIuYwotTElCT0JKPSBkaF9hc24xLm8gZGhfZ2VuLm8gZGhfa2V5Lm8gZGhfbGliLm8gZGhfY2hlY2subyBkaF9lcnIubyBkaF9kZXByLm8KLQotU1JDPSAkKExJQlNSQykKLQotRVhIRUFERVI9IGRoLmgKLUhFQURFUj0JJChFWEhFQURFUikKLQotQUxMPSAgICAkKEdFTkVSQUwpICQoU1JDKSAkKEhFQURFUikKLQotdG9wOgotCShjZCAuLi8uLjsgJChNQUtFKSBESVJTPWNyeXB0byBTRElSUz0kKERJUikgc3ViX2FsbCkKLQotYWxsOglsaWIKLQotbGliOgkkKExJQk9CSikKLQkkKEFSWCkgJChMSUIpICQoTElCT0JKKQotCSQoUkFOTElCKSAkKExJQikgfHwgZWNobyBOZXZlciBtaW5kLgotCUB0b3VjaCBsaWIKLQotZmlsZXM6Ci0JJChQRVJMKSAkKFRPUCkvdXRpbC9maWxlcy5wbCBNYWtlZmlsZSA+PiAkKFRPUCkvTUlORk8KLQotbGlua3M6Ci0JQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL2luY2x1ZGUvb3BlbnNzbCAkKEVYSEVBREVSKQotCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi90ZXN0ICQoVEVTVCkKLQlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vYXBwcyAkKEFQUFMpCi0KLWluc3RhbGw6Ci0JQFsgLW4gIiQoSU5TVEFMTFRPUCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHRvcCBNYWtlZmlsZS4uLgotCUBoZWFkZXJsaXN0PSIkKEVYSEVBREVSKSI7IGZvciBpIGluICQkaGVhZGVybGlzdCA7IFwKLQlkbyAgXAotCShjcCAkJGkgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGk7IFwKLQljaG1vZCA2NDQgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGkgKTsgXAotCWRvbmU7Ci0KLXRhZ3M6Ci0JY3RhZ3MgJChTUkMpCi0KLXRlc3RzOgotCi1saW50OgotCWxpbnQgLURMSU5UICQoSU5DTFVERVMpICQoU1JDKT5mbHVmZgotCi1kZXBlbmQ6Ci0JQFsgLW4gIiQoTUFLRURFUEVORCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHVwcGVyIE1ha2VmaWxlLi4uCi0JJChNQUtFREVQRU5EKSAtLSAkKENGTEFHKSAkKElOQ0xVREVTKSAkKERFUEZMQUcpIC0tICQoUFJPR1MpICQoTElCU1JDKQotCi1kY2xlYW46Ci0JJChQRVJMKSAtcGUgJ2lmICgvXiMgRE8gTk9UIERFTEVURSBUSElTIExJTkUvKSB7cHJpbnQ7IGV4aXQoMCk7fScgJChNQUtFRklMRSkgPk1ha2VmaWxlLm5ldwotCW12IC1mIE1ha2VmaWxlLm5ldyAkKE1BS0VGSUxFKQotCi1jbGVhbjoKLQlybSAtZiAqLm8gKi8qLm8gKi5vYmogbGliIHRhZ3MgY29yZSAucHVyZSAubmZzKiAqLm9sZCAqLmJhayBmbHVmZgotCi0jIERPIE5PVCBERUxFVEUgVEhJUyBMSU5FIC0tIG1ha2UgZGVwZW5kIGRlcGVuZHMgb24gaXQuCi0KLWRoX2FzbjEubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLWRoX2FzbjEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjF0LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1kaF9hc24xLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotZGhfYXNuMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2RoLmgKLWRoX2FzbjEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1kaF9hc24xLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLWRoX2FzbjEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotZGhfYXNuMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotZGhfYXNuMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWRoX2FzbjEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBkaF9hc24xLmMKLWRoX2NoZWNrLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmgKLWRoX2NoZWNrLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWRoX2NoZWNrLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1kaF9jaGVjay5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLWRoX2NoZWNrLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1kaF9jaGVjay5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotZGhfY2hlY2subzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1kaF9jaGVjay5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGRoX2NoZWNrLmMKLWRoX2RlcHIubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaAotZGhfZGVwci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1kaF9kZXByLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1kaF9kZXByLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotZGhfZGVwci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotZGhfZGVwci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLWRoX2RlcHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLWRoX2RlcHIubzogLi4vY3J5cHRsaWIuaCBkaF9kZXByLmMKLWRoX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1kaF9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2RoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLWRoX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLWRoX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotZGhfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotZGhfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1kaF9lcnIubzogZGhfZXJyLmMKLWRoX2dlbi5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oCi1kaF9nZW4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotZGhfZ2VuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1kaF9nZW4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1kaF9nZW4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLWRoX2dlbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLWRoX2dlbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotZGhfZ2VuLm86IC4uL2NyeXB0bGliLmggZGhfZ2VuLmMKLWRoX2tleS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oCi1kaF9rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotZGhfa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1kaF9rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1kaF9rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLWRoX2tleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCi1kaF9rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1kaF9rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBkaF9rZXkuYwotZGhfbGliLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotZGhfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotZGhfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZGguaAotZGhfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1kaF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotZGhfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lbmdpbmUuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWRoX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotZGhfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLWRoX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1kaF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWRoX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLWRoX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWRoX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi1kaF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vY3J5cHRsaWIuaCBkaF9saWIuYwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2RoL2RoLmggYi9jcnlwdG8vZGgvZGguaAppbmRleCAxMDQ3NWFjLi44NDkzMDlhIDEwMDY0NAotLS0gYS9jcnlwdG8vZGgvZGguaAorKysgYi9jcnlwdG8vZGgvZGguaApAQCAtNzcsOCArNzcsNiBAQAogIyBkZWZpbmUgT1BFTlNTTF9ESF9NQVhfTU9EVUxVU19CSVRTCTEwMDAwCiAjZW5kaWYKIAotI2RlZmluZSBPUEVOU1NMX0RIX0ZJUFNfTUlOX01PRFVMVVNfQklUUyAxMDI0Ci0KICNkZWZpbmUgREhfRkxBR19DQUNIRV9NT05UX1AgICAgIDB4MDEKICNkZWZpbmUgREhfRkxBR19OT19FWFBfQ09OU1RUSU1FIDB4MDIgLyogbmV3IHdpdGggMC45LjdoOyB0aGUgYnVpbHQtaW4gREgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaW1wbGVtZW50YXRpb24gbm93IHVzZXMgY29uc3RhbnQgdGltZQpAQCAtMTU5LDcgKzE1Nyw2IEBACiAgICB0aGlzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OiAqLwogI2RlZmluZSBESF9DSEVDS19QX05PVF9TVFJPTkdfUFJJTUUJREhfQ0hFQ0tfUF9OT1RfU0FGRV9QUklNRQogCi0jZGVmaW5lIERIcGFyYW1zX2R1cCh4KSBBU04xX2R1cF9vZl9jb25zdChESCxpMmRfREhwYXJhbXMsZDJpX0RIcGFyYW1zLHgpCiAjZGVmaW5lIGQyaV9ESHBhcmFtc19mcChmcCx4KSAoREggKilBU04xX2QyaV9mcCgoY2hhciAqKCopKCkpREhfbmV3LCBcCiAJCShjaGFyICooKikoKSlkMmlfREhwYXJhbXMsKGZwKSwodW5zaWduZWQgY2hhciAqKikoeCkpCiAjZGVmaW5lIGkyZF9ESHBhcmFtc19mcChmcCx4KSBBU04xX2kyZF9mcChpMmRfREhwYXJhbXMsKGZwKSwgXApAQCAtMTY3LDEyICsxNjQsOSBAQAogI2RlZmluZSBkMmlfREhwYXJhbXNfYmlvKGJwLHgpIEFTTjFfZDJpX2Jpb19vZihESCxESF9uZXcsZDJpX0RIcGFyYW1zLGJwLHgpCiAjZGVmaW5lIGkyZF9ESHBhcmFtc19iaW8oYnAseCkgQVNOMV9pMmRfYmlvX29mX2NvbnN0KERILGkyZF9ESHBhcmFtcyxicCx4KQogCi1jb25zdCBESF9NRVRIT0QgKkRIX09wZW5TU0wodm9pZCk7CitESCAqREhwYXJhbXNfZHVwKERIICopOwogCi0jaWZkZWYgT1BFTlNTTF9GSVBTCi1ESCAqCUZJUFNfZGhfbmV3KHZvaWQpOwotdm9pZAlGSVBTX2RoX2ZyZWUoREggKmRoKTsKLSNlbmRpZgorY29uc3QgREhfTUVUSE9EICpESF9PcGVuU1NMKHZvaWQpOwogCiB2b2lkIERIX3NldF9kZWZhdWx0X21ldGhvZChjb25zdCBESF9NRVRIT0QgKm1ldGgpOwogY29uc3QgREhfTUVUSE9EICpESF9nZXRfZGVmYXVsdF9tZXRob2Qodm9pZCk7CkBAIC0yMTIsNiArMjA2LDE4IEBACiBpbnQJREhwYXJhbXNfcHJpbnQoY2hhciAqYnAsIGNvbnN0IERIICp4KTsKICNlbmRpZgogCisjZGVmaW5lIEVWUF9QS0VZX0NUWF9zZXRfZGhfcGFyYW1nZW5fcHJpbWVfbGVuKGN0eCwgbGVuKSBcCisJRVZQX1BLRVlfQ1RYX2N0cmwoY3R4LCBFVlBfUEtFWV9ESCwgRVZQX1BLRVlfT1BfUEFSQU1HRU4sIFwKKwkJCUVWUF9QS0VZX0NUUkxfREhfUEFSQU1HRU5fUFJJTUVfTEVOLCBsZW4sIE5VTEwpCisKKyNkZWZpbmUgRVZQX1BLRVlfQ1RYX3NldF9kaF9wYXJhbWdlbl9nZW5lcmF0b3IoY3R4LCBnZW4pIFwKKwlFVlBfUEtFWV9DVFhfY3RybChjdHgsIEVWUF9QS0VZX0RILCBFVlBfUEtFWV9PUF9QQVJBTUdFTiwgXAorCQkJRVZQX1BLRVlfQ1RSTF9ESF9QQVJBTUdFTl9HRU5FUkFUT1IsIGdlbiwgTlVMTCkKKworI2RlZmluZQlFVlBfUEtFWV9DVFJMX0RIX1BBUkFNR0VOX1BSSU1FX0xFTgkoRVZQX1BLRVlfQUxHX0NUUkwgKyAxKQorI2RlZmluZQlFVlBfUEtFWV9DVFJMX0RIX1BBUkFNR0VOX0dFTkVSQVRPUgkoRVZQX1BLRVlfQUxHX0NUUkwgKyAyKQorCQkKKwogLyogQkVHSU4gRVJST1IgQ09ERVMgKi8KIC8qIFRoZSBmb2xsb3dpbmcgbGluZXMgYXJlIGF1dG8gZ2VuZXJhdGVkIGJ5IHRoZSBzY3JpcHQgbWtlcnIucGwuIEFueSBjaGFuZ2VzCiAgKiBtYWRlIGFmdGVyIHRoaXMgcG9pbnQgbWF5IGJlIG92ZXJ3cml0dGVuIHdoZW4gdGhlIHNjcmlwdCBpcyBuZXh0IHJ1bi4KQEAgLTIyMiwyMiArMjI4LDMxIEBACiAKIC8qIEZ1bmN0aW9uIGNvZGVzLiAqLwogI2RlZmluZSBESF9GX0NPTVBVVEVfS0VZCQkJCSAxMDIKLSNkZWZpbmUgREhfRl9ESFBBUkFNU19QUklOVAkJCQkgMTAwCiAjZGVmaW5lIERIX0ZfREhQQVJBTVNfUFJJTlRfRlAJCQkJIDEwMQogI2RlZmluZSBESF9GX0RIX0JVSUxUSU5fR0VOUEFSQU1TCQkJIDEwNgotI2RlZmluZSBESF9GX0RIX0NPTVBVVEVfS0VZCQkJCSAxMDcKLSNkZWZpbmUgREhfRl9ESF9HRU5FUkFURV9LRVkJCQkJIDEwOAotI2RlZmluZSBESF9GX0RIX0dFTkVSQVRFX1BBUkFNRVRFUlMJCQkgMTA5CiAjZGVmaW5lIERIX0ZfREhfTkVXX01FVEhPRAkJCQkgMTA1CisjZGVmaW5lIERIX0ZfREhfUEFSQU1fREVDT0RFCQkJCSAxMDcKKyNkZWZpbmUgREhfRl9ESF9QUklWX0RFQ09ERQkJCQkgMTEwCisjZGVmaW5lIERIX0ZfREhfUFJJVl9FTkNPREUJCQkJIDExMQorI2RlZmluZSBESF9GX0RIX1BVQl9ERUNPREUJCQkJIDEwOAorI2RlZmluZSBESF9GX0RIX1BVQl9FTkNPREUJCQkJIDEwOQorI2RlZmluZSBESF9GX0RPX0RIX1BSSU5UCQkJCSAxMDAKICNkZWZpbmUgREhfRl9HRU5FUkFURV9LRVkJCQkJIDEwMwogI2RlZmluZSBESF9GX0dFTkVSQVRFX1BBUkFNRVRFUlMJCQkgMTA0CisjZGVmaW5lIERIX0ZfUEtFWV9ESF9ERVJJVkUJCQkJIDExMgorI2RlZmluZSBESF9GX1BLRVlfREhfS0VZR0VOCQkJCSAxMTMKIAogLyogUmVhc29uIGNvZGVzLiAqLwogI2RlZmluZSBESF9SX0JBRF9HRU5FUkFUT1IJCQkJIDEwMQorI2RlZmluZSBESF9SX0JOX0RFQ09ERV9FUlJPUgkJCQkgMTA5CisjZGVmaW5lIERIX1JfQk5fRVJST1IJCQkJCSAxMDYKKyNkZWZpbmUgREhfUl9ERUNPREVfRVJST1IJCQkJIDEwNAogI2RlZmluZSBESF9SX0lOVkFMSURfUFVCS0VZCQkJCSAxMDIKLSNkZWZpbmUgREhfUl9LRVlfU0laRV9UT09fU01BTEwJCQkJIDEwNAorI2RlZmluZSBESF9SX0tFWVNfTk9UX1NFVAkJCQkgMTA4CiAjZGVmaW5lIERIX1JfTU9EVUxVU19UT09fTEFSR0UJCQkJIDEwMworI2RlZmluZSBESF9SX05PX1BBUkFNRVRFUlNfU0VUCQkJCSAxMDcKICNkZWZpbmUgREhfUl9OT19QUklWQVRFX1ZBTFVFCQkJCSAxMDAKKyNkZWZpbmUgREhfUl9QQVJBTUVURVJfRU5DT0RJTkdfRVJST1IJCQkgMTA1CiAKICNpZmRlZiAgX19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL2NyeXB0by9kaC9kaF9hbWV0aC5jIGIvY3J5cHRvL2RoL2RoX2FtZXRoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc3Y2FmOQotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9kaC9kaF9hbWV0aC5jCkBAIC0wLDAgKzEsNTAwIEBACisvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKyAqIHByb2plY3QgMjAwNi4KKyAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoYykgMjAwNiBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKyAqCisgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisgKgorICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisgKgorICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworICogICAgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorICoKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJjcnlwdGxpYi5oIgorI2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgorI2luY2x1ZGUgPG9wZW5zc2wvYXNuMS5oPgorI2luY2x1ZGUgPG9wZW5zc2wvZGguaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisjaW5jbHVkZSAiYXNuMV9sb2NsLmgiCisKK3N0YXRpYyB2b2lkIGludF9kaF9mcmVlKEVWUF9QS0VZICpwa2V5KQorCXsKKwlESF9mcmVlKHBrZXktPnBrZXkuZGgpOworCX0KKworc3RhdGljIGludCBkaF9wdWJfZGVjb2RlKEVWUF9QS0VZICpwa2V5LCBYNTA5X1BVQktFWSAqcHVia2V5KQorCXsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpwLCAqcG07CisJaW50IHBrbGVuLCBwbWxlbjsKKwlpbnQgcHR5cGU7CisJdm9pZCAqcHZhbDsKKwlBU04xX1NUUklORyAqcHN0cjsKKwlYNTA5X0FMR09SICpwYWxnOworCUFTTjFfSU5URUdFUiAqcHVibGljX2tleSA9IE5VTEw7CisKKwlESCAqZGggPSBOVUxMOworCisJaWYgKCFYNTA5X1BVQktFWV9nZXQwX3BhcmFtKE5VTEwsICZwLCAmcGtsZW4sICZwYWxnLCBwdWJrZXkpKQorCQlyZXR1cm4gMDsKKwlYNTA5X0FMR09SX2dldDAoTlVMTCwgJnB0eXBlLCAmcHZhbCwgcGFsZyk7CisKKwlpZiAocHR5cGUgIT0gVl9BU04xX1NFUVVFTkNFKQorCQl7CisJCURIZXJyKERIX0ZfREhfUFVCX0RFQ09ERSwgREhfUl9QQVJBTUVURVJfRU5DT0RJTkdfRVJST1IpOworCQlnb3RvIGVycjsKKwkJfQorCisJcHN0ciA9IHB2YWw7CQorCXBtID0gcHN0ci0+ZGF0YTsKKwlwbWxlbiA9IHBzdHItPmxlbmd0aDsKKworCWlmICghKGRoID0gZDJpX0RIcGFyYW1zKE5VTEwsICZwbSwgcG1sZW4pKSkKKwkJeworCQlESGVycihESF9GX0RIX1BVQl9ERUNPREUsIERIX1JfREVDT0RFX0VSUk9SKTsKKwkJZ290byBlcnI7CisJCX0KKworCWlmICghKHB1YmxpY19rZXk9ZDJpX0FTTjFfSU5URUdFUihOVUxMLCAmcCwgcGtsZW4pKSkKKwkJeworCQlESGVycihESF9GX0RIX1BVQl9ERUNPREUsIERIX1JfREVDT0RFX0VSUk9SKTsKKwkJZ290byBlcnI7CisJCX0KKworCS8qIFdlIGhhdmUgcGFyYW1ldGVycyBub3cgc2V0IHB1YmxpYyBrZXkgKi8KKwlpZiAoIShkaC0+cHViX2tleSA9IEFTTjFfSU5URUdFUl90b19CTihwdWJsaWNfa2V5LCBOVUxMKSkpCisJCXsKKwkJREhlcnIoREhfRl9ESF9QVUJfREVDT0RFLCBESF9SX0JOX0RFQ09ERV9FUlJPUik7CisJCWdvdG8gZXJyOworCQl9CisKKwlBU04xX0lOVEVHRVJfZnJlZShwdWJsaWNfa2V5KTsKKwlFVlBfUEtFWV9hc3NpZ25fREgocGtleSwgZGgpOworCXJldHVybiAxOworCisJZXJyOgorCWlmIChwdWJsaWNfa2V5KQorCQlBU04xX0lOVEVHRVJfZnJlZShwdWJsaWNfa2V5KTsKKwlpZiAoZGgpCisJCURIX2ZyZWUoZGgpOworCXJldHVybiAwOworCisJfQorCitzdGF0aWMgaW50IGRoX3B1Yl9lbmNvZGUoWDUwOV9QVUJLRVkgKnBrLCBjb25zdCBFVlBfUEtFWSAqcGtleSkKKwl7CisJREggKmRoOworCXZvaWQgKnB2YWwgPSBOVUxMOworCWludCBwdHlwZTsKKwl1bnNpZ25lZCBjaGFyICpwZW5jID0gTlVMTDsKKwlpbnQgcGVuY2xlbjsKKwlBU04xX1NUUklORyAqc3RyOworCUFTTjFfSU5URUdFUiAqcHViX2tleSA9IE5VTEw7CisKKwlkaD1wa2V5LT5wa2V5LmRoOworCisJc3RyID0gQVNOMV9TVFJJTkdfbmV3KCk7CisJc3RyLT5sZW5ndGggPSBpMmRfREhwYXJhbXMoZGgsICZzdHItPmRhdGEpOworCWlmIChzdHItPmxlbmd0aCA8PSAwKQorCQl7CisJCURIZXJyKERIX0ZfREhfUFVCX0VOQ09ERSwgRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOworCQlnb3RvIGVycjsKKwkJfQorCXB2YWwgPSBzdHI7CisJcHR5cGUgPSBWX0FTTjFfU0VRVUVOQ0U7CisKKwlwdWJfa2V5ID0gQk5fdG9fQVNOMV9JTlRFR0VSKGRoLT5wdWJfa2V5LCBOVUxMKTsKKwlpZiAoIXB1Yl9rZXkpCisJCWdvdG8gZXJyOworCisJcGVuY2xlbiA9IGkyZF9BU04xX0lOVEVHRVIocHViX2tleSwgJnBlbmMpOworCisJQVNOMV9JTlRFR0VSX2ZyZWUocHViX2tleSk7CisKKwlpZiAocGVuY2xlbiA8PSAwKQorCQl7CisJCURIZXJyKERIX0ZfREhfUFVCX0VOQ09ERSwgRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOworCQlnb3RvIGVycjsKKwkJfQorCisJaWYgKFg1MDlfUFVCS0VZX3NldDBfcGFyYW0ocGssIE9CSl9uaWQyb2JqKEVWUF9QS0VZX0RIKSwKKwkJCQlwdHlwZSwgcHZhbCwgcGVuYywgcGVuY2xlbikpCisJCXJldHVybiAxOworCisJZXJyOgorCWlmIChwZW5jKQorCQlPUEVOU1NMX2ZyZWUocGVuYyk7CisJaWYgKHB2YWwpCisJCUFTTjFfU1RSSU5HX2ZyZWUocHZhbCk7CisKKwlyZXR1cm4gMDsKKwl9CisKKworLyogUEtDUyM4IERIIGlzIGRlZmluZWQgaW4gUEtDUyMxMSBvZiBhbGwgcGxhY2VzLiBJdCBpcyBzaW1pbGFyIHRvIERIIGluCisgKiB0aGF0IHRoZSBBbGdvcml0aG1JZGVudGlmaWVyIGNvbnRhaW5zIHRoZSBwYXJhbWF0ZXJzLCB0aGUgcHJpdmF0ZSBrZXkKKyAqIGlzIGV4cGxjaXRseSBpbmNsdWRlZCBhbmQgdGhlIHB1YmtleSBtdXN0IGJlIHJlY2FsY3VsYXRlZC4KKyAqLworCQorc3RhdGljIGludCBkaF9wcml2X2RlY29kZShFVlBfUEtFWSAqcGtleSwgUEtDUzhfUFJJVl9LRVlfSU5GTyAqcDgpCisJeworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnAsICpwbTsKKwlpbnQgcGtsZW4sIHBtbGVuOworCWludCBwdHlwZTsKKwl2b2lkICpwdmFsOworCUFTTjFfU1RSSU5HICpwc3RyOworCVg1MDlfQUxHT1IgKnBhbGc7CisJQVNOMV9JTlRFR0VSICpwcml2a2V5ID0gTlVMTDsKKworCURIICpkaCA9IE5VTEw7CisKKwlpZiAoIVBLQ1M4X3BrZXlfZ2V0MChOVUxMLCAmcCwgJnBrbGVuLCAmcGFsZywgcDgpKQorCQlyZXR1cm4gMDsKKworCVg1MDlfQUxHT1JfZ2V0MChOVUxMLCAmcHR5cGUsICZwdmFsLCBwYWxnKTsKKworCWlmIChwdHlwZSAhPSBWX0FTTjFfU0VRVUVOQ0UpCisJCQlnb3RvIGRlY2VycjsKKworCWlmICghKHByaXZrZXk9ZDJpX0FTTjFfSU5URUdFUihOVUxMLCAmcCwgcGtsZW4pKSkKKwkJZ290byBkZWNlcnI7CisKKworCXBzdHIgPSBwdmFsOwkKKwlwbSA9IHBzdHItPmRhdGE7CisJcG1sZW4gPSBwc3RyLT5sZW5ndGg7CisJaWYgKCEoZGggPSBkMmlfREhwYXJhbXMoTlVMTCwgJnBtLCBwbWxlbikpKQorCQlnb3RvIGRlY2VycjsKKwkvKiBXZSBoYXZlIHBhcmFtZXRlcnMgbm93IHNldCBwcml2YXRlIGtleSAqLworCWlmICghKGRoLT5wcml2X2tleSA9IEFTTjFfSU5URUdFUl90b19CTihwcml2a2V5LCBOVUxMKSkpCisJCXsKKwkJREhlcnIoREhfRl9ESF9QUklWX0RFQ09ERSxESF9SX0JOX0VSUk9SKTsKKwkJZ290byBkaGVycjsKKwkJfQorCS8qIENhbGN1bGF0ZSBwdWJsaWMga2V5ICovCisJaWYgKCFESF9nZW5lcmF0ZV9rZXkoZGgpKQorCQlnb3RvIGRoZXJyOworCisJRVZQX1BLRVlfYXNzaWduX0RIKHBrZXksIGRoKTsKKworCUFTTjFfSU5URUdFUl9mcmVlKHByaXZrZXkpOworCisJcmV0dXJuIDE7CisKKwlkZWNlcnI6CisJREhlcnIoREhfRl9ESF9QUklWX0RFQ09ERSwgRVZQX1JfREVDT0RFX0VSUk9SKTsKKwlkaGVycjoKKwlESF9mcmVlKGRoKTsKKwlyZXR1cm4gMDsKKwl9CisKK3N0YXRpYyBpbnQgZGhfcHJpdl9lbmNvZGUoUEtDUzhfUFJJVl9LRVlfSU5GTyAqcDgsIGNvbnN0IEVWUF9QS0VZICpwa2V5KQoreworCUFTTjFfU1RSSU5HICpwYXJhbXMgPSBOVUxMOworCUFTTjFfSU5URUdFUiAqcHJrZXkgPSBOVUxMOworCXVuc2lnbmVkIGNoYXIgKmRwID0gTlVMTDsKKwlpbnQgZHBsZW47CisKKwlwYXJhbXMgPSBBU04xX1NUUklOR19uZXcoKTsKKworCWlmICghcGFyYW1zKQorCQl7CisJCURIZXJyKERIX0ZfREhfUFJJVl9FTkNPREUsRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOworCQlnb3RvIGVycjsKKwkJfQorCisJcGFyYW1zLT5sZW5ndGggPSBpMmRfREhwYXJhbXMocGtleS0+cGtleS5kaCwgJnBhcmFtcy0+ZGF0YSk7CisJaWYgKHBhcmFtcy0+bGVuZ3RoIDw9IDApCisJCXsKKwkJREhlcnIoREhfRl9ESF9QUklWX0VOQ09ERSxFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CisJCWdvdG8gZXJyOworCQl9CisJcGFyYW1zLT50eXBlID0gVl9BU04xX1NFUVVFTkNFOworCisJLyogR2V0IHByaXZhdGUga2V5IGludG8gaW50ZWdlciAqLworCXBya2V5ID0gQk5fdG9fQVNOMV9JTlRFR0VSKHBrZXktPnBrZXkuZGgtPnByaXZfa2V5LCBOVUxMKTsKKworCWlmICghcHJrZXkpCisJCXsKKwkJREhlcnIoREhfRl9ESF9QUklWX0VOQ09ERSxESF9SX0JOX0VSUk9SKTsKKwkJZ290byBlcnI7CisJCX0KKworCWRwbGVuID0gaTJkX0FTTjFfSU5URUdFUihwcmtleSwgJmRwKTsKKworCUFTTjFfSU5URUdFUl9mcmVlKHBya2V5KTsKKworCWlmICghUEtDUzhfcGtleV9zZXQwKHA4LCBPQkpfbmlkMm9iaihOSURfZGhLZXlBZ3JlZW1lbnQpLCAwLAorCQkJCVZfQVNOMV9TRVFVRU5DRSwgcGFyYW1zLCBkcCwgZHBsZW4pKQorCQlnb3RvIGVycjsKKworCXJldHVybiAxOworCitlcnI6CisJaWYgKGRwICE9IE5VTEwpCisJCU9QRU5TU0xfZnJlZShkcCk7CisJaWYgKHBhcmFtcyAhPSBOVUxMKQorCQlBU04xX1NUUklOR19mcmVlKHBhcmFtcyk7CisJaWYgKHBya2V5ICE9IE5VTEwpCisJCUFTTjFfSU5URUdFUl9mcmVlKHBya2V5KTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZCB1cGRhdGVfYnVmbGVuKGNvbnN0IEJJR05VTSAqYiwgc2l6ZV90ICpwYnVmbGVuKQorCXsKKwlzaXplX3QgaTsKKwlpZiAoIWIpCisJCXJldHVybjsKKwlpZiAoKnBidWZsZW4gPCAoaSA9IChzaXplX3QpQk5fbnVtX2J5dGVzKGIpKSkKKwkJCSpwYnVmbGVuID0gaTsKKwl9CisKK3N0YXRpYyBpbnQgZGhfcGFyYW1fZGVjb2RlKEVWUF9QS0VZICpwa2V5LAorCQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICoqcGRlciwgaW50IGRlcmxlbikKKwl7CisJREggKmRoOworCWlmICghKGRoID0gZDJpX0RIcGFyYW1zKE5VTEwsIHBkZXIsIGRlcmxlbikpKQorCQl7CisJCURIZXJyKERIX0ZfREhfUEFSQU1fREVDT0RFLCBFUlJfUl9ESF9MSUIpOworCQlyZXR1cm4gMDsKKwkJfQorCUVWUF9QS0VZX2Fzc2lnbl9ESChwa2V5LCBkaCk7CisJcmV0dXJuIDE7CisJfQorCitzdGF0aWMgaW50IGRoX3BhcmFtX2VuY29kZShjb25zdCBFVlBfUEtFWSAqcGtleSwgdW5zaWduZWQgY2hhciAqKnBkZXIpCisJeworCXJldHVybiBpMmRfREhwYXJhbXMocGtleS0+cGtleS5kaCwgcGRlcik7CisJfQorCitzdGF0aWMgaW50IGRvX2RoX3ByaW50KEJJTyAqYnAsIGNvbnN0IERIICp4LCBpbnQgaW5kZW50LAorCQkJCQkJQVNOMV9QQ1RYICpjdHgsIGludCBwdHlwZSkKKwl7CisJdW5zaWduZWQgY2hhciAqbT1OVUxMOworCWludCByZWFzb249RVJSX1JfQlVGX0xJQixyZXQ9MDsKKwlzaXplX3QgYnVmX2xlbj0wOworCisJY29uc3QgY2hhciAqa3R5cGUgPSBOVUxMOworCisJQklHTlVNICpwcml2X2tleSwgKnB1Yl9rZXk7CisKKwlpZiAocHR5cGUgPT0gMikKKwkJcHJpdl9rZXkgPSB4LT5wcml2X2tleTsKKwllbHNlCisJCXByaXZfa2V5ID0gTlVMTDsKKworCWlmIChwdHlwZSA+IDApCisJCXB1Yl9rZXkgPSB4LT5wdWJfa2V5OworCWVsc2UKKwkJcHViX2tleSA9IE5VTEw7CisKKwl1cGRhdGVfYnVmbGVuKHgtPnAsICZidWZfbGVuKTsKKworCWlmIChidWZfbGVuID09IDApCisJCXsKKwkJcmVhc29uID0gRVJSX1JfUEFTU0VEX05VTExfUEFSQU1FVEVSOworCQlnb3RvIGVycjsKKwkJfQorCisJdXBkYXRlX2J1Zmxlbih4LT5nLCAmYnVmX2xlbik7CisJdXBkYXRlX2J1ZmxlbihwdWJfa2V5LCAmYnVmX2xlbik7CisJdXBkYXRlX2J1Zmxlbihwcml2X2tleSwgJmJ1Zl9sZW4pOworCisJaWYgKHB0eXBlID09IDIpCisJCWt0eXBlID0gIlBLQ1MjMyBESCBQcml2YXRlLUtleSI7CisJZWxzZSBpZiAocHR5cGUgPT0gMSkKKwkJa3R5cGUgPSAiUEtDUyMzIERIIFB1YmxpYy1LZXkiOworCWVsc2UKKwkJa3R5cGUgPSAiUEtDUyMzIERIIFBhcmFtZXRlcnMiOworCisJbT0gT1BFTlNTTF9tYWxsb2MoYnVmX2xlbisxMCk7CisJaWYgKG0gPT0gTlVMTCkKKwkJeworCQlyZWFzb249RVJSX1JfTUFMTE9DX0ZBSUxVUkU7CisJCWdvdG8gZXJyOworCQl9CisKKwlCSU9faW5kZW50KGJwLCBpbmRlbnQsIDEyOCk7CisJaWYgKEJJT19wcmludGYoYnAsIiVzOiAoJWQgYml0KVxuIiwga3R5cGUsIEJOX251bV9iaXRzKHgtPnApKSA8PSAwKQorCQlnb3RvIGVycjsKKwlpbmRlbnQgKz0gNDsKKworCWlmICghQVNOMV9ibl9wcmludChicCwicHJpdmF0ZS1rZXk6Iixwcml2X2tleSxtLGluZGVudCkpIGdvdG8gZXJyOworCWlmICghQVNOMV9ibl9wcmludChicCwicHVibGljLWtleToiLHB1Yl9rZXksbSxpbmRlbnQpKSBnb3RvIGVycjsKKworCWlmICghQVNOMV9ibl9wcmludChicCwicHJpbWU6Iix4LT5wLG0saW5kZW50KSkgZ290byBlcnI7CisJaWYgKCFBU04xX2JuX3ByaW50KGJwLCJnZW5lcmF0b3I6Iix4LT5nLG0saW5kZW50KSkgZ290byBlcnI7CisJaWYgKHgtPmxlbmd0aCAhPSAwKQorCQl7CisJCUJJT19pbmRlbnQoYnAsIGluZGVudCwgMTI4KTsKKwkJaWYgKEJJT19wcmludGYoYnAsInJlY29tbWVuZGVkLXByaXZhdGUtbGVuZ3RoOiAlZCBiaXRzXG4iLAorCQkJKGludCl4LT5sZW5ndGgpIDw9IDApIGdvdG8gZXJyOworCQl9CisKKworCXJldD0xOworCWlmICgwKQorCQl7CitlcnI6CisJCURIZXJyKERIX0ZfRE9fREhfUFJJTlQscmVhc29uKTsKKwkJfQorCWlmIChtICE9IE5VTEwpIE9QRU5TU0xfZnJlZShtKTsKKwlyZXR1cm4ocmV0KTsKKwl9CisKK3N0YXRpYyBpbnQgaW50X2RoX3NpemUoY29uc3QgRVZQX1BLRVkgKnBrZXkpCisJeworCXJldHVybihESF9zaXplKHBrZXktPnBrZXkuZGgpKTsKKwl9CisKK3N0YXRpYyBpbnQgZGhfYml0cyhjb25zdCBFVlBfUEtFWSAqcGtleSkKKwl7CisJcmV0dXJuIEJOX251bV9iaXRzKHBrZXktPnBrZXkuZGgtPnApOworCX0KKworc3RhdGljIGludCBkaF9jbXBfcGFyYW1ldGVycyhjb25zdCBFVlBfUEtFWSAqYSwgY29uc3QgRVZQX1BLRVkgKmIpCisJeworCWlmICgJQk5fY21wKGEtPnBrZXkuZGgtPnAsYi0+cGtleS5kaC0+cCkgfHwKKwkJQk5fY21wKGEtPnBrZXkuZGgtPmcsYi0+cGtleS5kaC0+ZykpCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIDE7CisJfQorCitzdGF0aWMgaW50IGRoX2NvcHlfcGFyYW1ldGVycyhFVlBfUEtFWSAqdG8sIGNvbnN0IEVWUF9QS0VZICpmcm9tKQorCXsKKwlCSUdOVU0gKmE7CisKKwlpZiAoKGE9Qk5fZHVwKGZyb20tPnBrZXkuZGgtPnApKSA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKwlpZiAodG8tPnBrZXkuZGgtPnAgIT0gTlVMTCkKKwkJQk5fZnJlZSh0by0+cGtleS5kaC0+cCk7CisJdG8tPnBrZXkuZGgtPnA9YTsKKworCWlmICgoYT1CTl9kdXAoZnJvbS0+cGtleS5kaC0+ZykpID09IE5VTEwpCisJCXJldHVybiAwOworCWlmICh0by0+cGtleS5kaC0+ZyAhPSBOVUxMKQorCQlCTl9mcmVlKHRvLT5wa2V5LmRoLT5nKTsKKwl0by0+cGtleS5kaC0+Zz1hOworCisJcmV0dXJuIDE7CisJfQorCitzdGF0aWMgaW50IGRoX21pc3NpbmdfcGFyYW1ldGVycyhjb25zdCBFVlBfUEtFWSAqYSkKKwl7CisJaWYgKCFhLT5wa2V5LmRoLT5wIHx8ICFhLT5wa2V5LmRoLT5nKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKKwl9CisKK3N0YXRpYyBpbnQgZGhfcHViX2NtcChjb25zdCBFVlBfUEtFWSAqYSwgY29uc3QgRVZQX1BLRVkgKmIpCisJeworCWlmIChkaF9jbXBfcGFyYW1ldGVycyhhLCBiKSA9PSAwKQorCQlyZXR1cm4gMDsKKwlpZiAoQk5fY21wKGItPnBrZXkuZGgtPnB1Yl9rZXksYS0+cGtleS5kaC0+cHViX2tleSkgIT0gMCkKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gMTsKKwl9CisKK3N0YXRpYyBpbnQgZGhfcGFyYW1fcHJpbnQoQklPICpicCwgY29uc3QgRVZQX1BLRVkgKnBrZXksIGludCBpbmRlbnQsCisJCQkJCQkJQVNOMV9QQ1RYICpjdHgpCisJeworCXJldHVybiBkb19kaF9wcmludChicCwgcGtleS0+cGtleS5kaCwgaW5kZW50LCBjdHgsIDApOworCX0KKworc3RhdGljIGludCBkaF9wdWJsaWNfcHJpbnQoQklPICpicCwgY29uc3QgRVZQX1BLRVkgKnBrZXksIGludCBpbmRlbnQsCisJCQkJCQkJQVNOMV9QQ1RYICpjdHgpCisJeworCXJldHVybiBkb19kaF9wcmludChicCwgcGtleS0+cGtleS5kaCwgaW5kZW50LCBjdHgsIDEpOworCX0KKworc3RhdGljIGludCBkaF9wcml2YXRlX3ByaW50KEJJTyAqYnAsIGNvbnN0IEVWUF9QS0VZICpwa2V5LCBpbnQgaW5kZW50LAorCQkJCQkJCUFTTjFfUENUWCAqY3R4KQorCXsKKwlyZXR1cm4gZG9fZGhfcHJpbnQoYnAsIHBrZXktPnBrZXkuZGgsIGluZGVudCwgY3R4LCAyKTsKKwl9CisKK2ludCBESHBhcmFtc19wcmludChCSU8gKmJwLCBjb25zdCBESCAqeCkKKwl7CisJcmV0dXJuIGRvX2RoX3ByaW50KGJwLCB4LCA0LCBOVUxMLCAwKTsKKwl9CisKK2NvbnN0IEVWUF9QS0VZX0FTTjFfTUVUSE9EIGRoX2FzbjFfbWV0aCA9IAorCXsKKwlFVlBfUEtFWV9ESCwKKwlFVlBfUEtFWV9ESCwKKwkwLAorCisJIkRIIiwKKwkiT3BlblNTTCBQS0NTIzMgREggbWV0aG9kIiwKKworCWRoX3B1Yl9kZWNvZGUsCisJZGhfcHViX2VuY29kZSwKKwlkaF9wdWJfY21wLAorCWRoX3B1YmxpY19wcmludCwKKworCWRoX3ByaXZfZGVjb2RlLAorCWRoX3ByaXZfZW5jb2RlLAorCWRoX3ByaXZhdGVfcHJpbnQsCisKKwlpbnRfZGhfc2l6ZSwKKwlkaF9iaXRzLAorCisJZGhfcGFyYW1fZGVjb2RlLAorCWRoX3BhcmFtX2VuY29kZSwKKwlkaF9taXNzaW5nX3BhcmFtZXRlcnMsCisJZGhfY29weV9wYXJhbWV0ZXJzLAorCWRoX2NtcF9wYXJhbWV0ZXJzLAorCWRoX3BhcmFtX3ByaW50LAorCisJaW50X2RoX2ZyZWUsCisJMAorCX07CisKZGlmZiAtLWdpdCBhL2NyeXB0by9kaC9kaF9hc24xLmMgYi9jcnlwdG8vZGgvZGhfYXNuMS5jCmluZGV4IDc2NzQwYWYuLjBiNDM1N2QgMTAwNjQ0Ci0tLSBhL2NyeXB0by9kaC9kaF9hc24xLmMKKysrIGIvY3J5cHRvL2RoL2RoX2FzbjEuYwpAQCAtMyw3ICszLDcgQEAKICAqIHByb2plY3QgMjAwMC4KICAqLwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoYykgMjAwMCBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwMC0yMDA1IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NCw3ICs2NCw4IEBACiAjaW5jbHVkZSA8b3BlbnNzbC9hc24xdC5oPgogCiAvKiBPdmVycmlkZSB0aGUgZGVmYXVsdCBmcmVlIGFuZCBuZXcgbWV0aG9kcyAqLwotc3RhdGljIGludCBkaF9jYihpbnQgb3BlcmF0aW9uLCBBU04xX1ZBTFVFICoqcHZhbCwgY29uc3QgQVNOMV9JVEVNICppdCkKK3N0YXRpYyBpbnQgZGhfY2IoaW50IG9wZXJhdGlvbiwgQVNOMV9WQUxVRSAqKnB2YWwsIGNvbnN0IEFTTjFfSVRFTSAqaXQsCisJCQkJCQl2b2lkICpleGFyZykKIHsKIAlpZihvcGVyYXRpb24gPT0gQVNOMV9PUF9ORVdfUFJFKSB7CiAJCSpwdmFsID0gKEFTTjFfVkFMVUUgKilESF9uZXcoKTsKQEAgLTg1LDMgKzg2LDggQEAKIH0gQVNOMV9TRVFVRU5DRV9FTkRfY2IoREgsIERIcGFyYW1zKQogCiBJTVBMRU1FTlRfQVNOMV9FTkNPREVfRlVOQ1RJT05TX2NvbnN0X2ZuYW1lKERILCBESHBhcmFtcywgREhwYXJhbXMpCisKK0RIICpESHBhcmFtc19kdXAoREggKmRoKQorCXsKKwlyZXR1cm4gQVNOMV9pdGVtX2R1cChBU04xX0lURU1fcnB0cihESHBhcmFtcyksIGRoKTsKKwl9CmRpZmYgLS1naXQgYS9jcnlwdG8vZGgvZGhfY2hlY2suYyBiL2NyeXB0by9kaC9kaF9jaGVjay5jCmluZGV4IDMxNmNiOTIuLjA2Njg5ODEgMTAwNjQ0Ci0tLSBhL2NyeXB0by9kaC9kaF9jaGVjay5jCisrKyBiL2NyeXB0by9kaC9kaF9jaGVjay5jCkBAIC03MCw4ICs3MCw2IEBACiAgKiBzaG91bGQgaG9sZC4KICAqLwogCi0jaWZuZGVmIE9QRU5TU0xfRklQUwotCiBpbnQgREhfY2hlY2soY29uc3QgREggKmRoLCBpbnQgKnJldCkKIAl7CiAJaW50IG9rPTA7CkBAIC0xMzAsMTEgKzEyOCwxMSBAQAogCXE9Qk5fbmV3KCk7CiAJaWYgKHEgPT0gTlVMTCkgZ290byBlcnI7CiAJQk5fc2V0X3dvcmQocSwxKTsKLQlpZiAoQk5fY21wKHB1Yl9rZXkscSkgPD0gMCkKKwlpZiAoQk5fY21wKHB1Yl9rZXkscSk8PTApCiAJCSpyZXR8PURIX0NIRUNLX1BVQktFWV9UT09fU01BTEw7CiAJQk5fY29weShxLGRoLT5wKTsKIAlCTl9zdWJfd29yZChxLDEpOwotCWlmIChCTl9jbXAocHViX2tleSxxKSA+PSAwKQorCWlmIChCTl9jbXAocHViX2tleSxxKT49MCkKIAkJKnJldHw9REhfQ0hFQ0tfUFVCS0VZX1RPT19MQVJHRTsKIAogCW9rID0gMTsKQEAgLTE0Miw1ICsxNDAsMyBAQAogCWlmIChxICE9IE5VTEwpIEJOX2ZyZWUocSk7CiAJcmV0dXJuKG9rKTsKIAl9Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvY3J5cHRvL2RoL2RoX2Vyci5jIGIvY3J5cHRvL2RoL2RoX2Vyci5jCmluZGV4IDEzMjYzYzguLmQ1Y2YwYzIgMTAwNjQ0Ci0tLSBhL2NyeXB0by9kaC9kaF9lcnIuYworKysgYi9jcnlwdG8vZGgvZGhfZXJyLmMKQEAgLTEsNiArMSw2IEBACiAvKiBjcnlwdG8vZGgvZGhfZXJyLmMgKi8KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA2IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MSwyNSArNzEsMzQgQEAKIHN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgREhfc3RyX2Z1bmN0c1tdPQogCXsKIHtFUlJfRlVOQyhESF9GX0NPTVBVVEVfS0VZKSwJIkNPTVBVVEVfS0VZIn0sCi17RVJSX0ZVTkMoREhfRl9ESFBBUkFNU19QUklOVCksCSJESHBhcmFtc19wcmludCJ9LAoge0VSUl9GVU5DKERIX0ZfREhQQVJBTVNfUFJJTlRfRlApLAkiREhwYXJhbXNfcHJpbnRfZnAifSwKIHtFUlJfRlVOQyhESF9GX0RIX0JVSUxUSU5fR0VOUEFSQU1TKSwJIkRIX0JVSUxUSU5fR0VOUEFSQU1TIn0sCi17RVJSX0ZVTkMoREhfRl9ESF9DT01QVVRFX0tFWSksCSJESF9jb21wdXRlX2tleSJ9LAote0VSUl9GVU5DKERIX0ZfREhfR0VORVJBVEVfS0VZKSwJIkRIX2dlbmVyYXRlX2tleSJ9LAote0VSUl9GVU5DKERIX0ZfREhfR0VORVJBVEVfUEFSQU1FVEVSUyksCSJESF9nZW5lcmF0ZV9wYXJhbWV0ZXJzIn0sCiB7RVJSX0ZVTkMoREhfRl9ESF9ORVdfTUVUSE9EKSwJIkRIX25ld19tZXRob2QifSwKK3tFUlJfRlVOQyhESF9GX0RIX1BBUkFNX0RFQ09ERSksCSJESF9QQVJBTV9ERUNPREUifSwKK3tFUlJfRlVOQyhESF9GX0RIX1BSSVZfREVDT0RFKSwJIkRIX1BSSVZfREVDT0RFIn0sCit7RVJSX0ZVTkMoREhfRl9ESF9QUklWX0VOQ09ERSksCSJESF9QUklWX0VOQ09ERSJ9LAore0VSUl9GVU5DKERIX0ZfREhfUFVCX0RFQ09ERSksCSJESF9QVUJfREVDT0RFIn0sCit7RVJSX0ZVTkMoREhfRl9ESF9QVUJfRU5DT0RFKSwJIkRIX1BVQl9FTkNPREUifSwKK3tFUlJfRlVOQyhESF9GX0RPX0RIX1BSSU5UKSwJIkRPX0RIX1BSSU5UIn0sCiB7RVJSX0ZVTkMoREhfRl9HRU5FUkFURV9LRVkpLAkiR0VORVJBVEVfS0VZIn0sCiB7RVJSX0ZVTkMoREhfRl9HRU5FUkFURV9QQVJBTUVURVJTKSwJIkdFTkVSQVRFX1BBUkFNRVRFUlMifSwKK3tFUlJfRlVOQyhESF9GX1BLRVlfREhfREVSSVZFKSwJIlBLRVlfREhfREVSSVZFIn0sCit7RVJSX0ZVTkMoREhfRl9QS0VZX0RIX0tFWUdFTiksCSJQS0VZX0RIX0tFWUdFTiJ9LAogezAsTlVMTH0KIAl9OwogCiBzdGF0aWMgRVJSX1NUUklOR19EQVRBIERIX3N0cl9yZWFzb25zW109CiAJewoge0VSUl9SRUFTT04oREhfUl9CQURfR0VORVJBVE9SKSAgICAgICAgICAsImJhZCBnZW5lcmF0b3IifSwKK3tFUlJfUkVBU09OKERIX1JfQk5fREVDT0RFX0VSUk9SKSAgICAgICAgLCJibiBkZWNvZGUgZXJyb3IifSwKK3tFUlJfUkVBU09OKERIX1JfQk5fRVJST1IpICAgICAgICAgICAgICAgLCJibiBlcnJvciJ9LAore0VSUl9SRUFTT04oREhfUl9ERUNPREVfRVJST1IpICAgICAgICAgICAsImRlY29kZSBlcnJvciJ9LAoge0VSUl9SRUFTT04oREhfUl9JTlZBTElEX1BVQktFWSkgICAgICAgICAsImludmFsaWQgcHVibGljIGtleSJ9LAote0VSUl9SRUFTT04oREhfUl9LRVlfU0laRV9UT09fU01BTEwpICAgICAsImtleSBzaXplIHRvbyBzbWFsbCJ9LAore0VSUl9SRUFTT04oREhfUl9LRVlTX05PVF9TRVQpICAgICAgICAgICAsImtleXMgbm90IHNldCJ9LAoge0VSUl9SRUFTT04oREhfUl9NT0RVTFVTX1RPT19MQVJHRSkgICAgICAsIm1vZHVsdXMgdG9vIGxhcmdlIn0sCit7RVJSX1JFQVNPTihESF9SX05PX1BBUkFNRVRFUlNfU0VUKSAgICAgICwibm8gcGFyYW1ldGVycyBzZXQifSwKIHtFUlJfUkVBU09OKERIX1JfTk9fUFJJVkFURV9WQUxVRSkgICAgICAgLCJubyBwcml2YXRlIHZhbHVlIn0sCit7RVJSX1JFQVNPTihESF9SX1BBUkFNRVRFUl9FTkNPRElOR19FUlJPUiksInBhcmFtZXRlciBlbmNvZGluZyBlcnJvciJ9LAogezAsTlVMTH0KIAl9OwogCmRpZmYgLS1naXQgYS9jcnlwdG8vZGgvZGhfZ2VuLmMgYi9jcnlwdG8vZGgvZGhfZ2VuLmMKaW5kZXggOTk5ZTFkZS4uY2ZkNWIxMSAxMDA2NDQKLS0tIGEvY3J5cHRvL2RoL2RoX2dlbi5jCisrKyBiL2NyeXB0by9kaC9kaF9nZW4uYwpAQCAtNjYsOCArNjYsNiBAQAogI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KICNpbmNsdWRlIDxvcGVuc3NsL2RoLmg+CiAKLSNpZm5kZWYgT1BFTlNTTF9GSVBTCi0KIHN0YXRpYyBpbnQgZGhfYnVpbHRpbl9nZW5wYXJhbXMoREggKnJldCwgaW50IHByaW1lX2xlbiwgaW50IGdlbmVyYXRvciwgQk5fR0VOQ0IgKmNiKTsKIAogaW50IERIX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoREggKnJldCwgaW50IHByaW1lX2xlbiwgaW50IGdlbmVyYXRvciwgQk5fR0VOQ0IgKmNiKQpAQCAtMTc1LDUgKzE3MywzIEBACiAJCX0KIAlyZXR1cm4gb2s7CiAJfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2NyeXB0by9kaC9kaF9rZXkuYyBiL2NyeXB0by9kaC9kaF9rZXkuYwppbmRleCA3OWRkMzMxLi5lN2RiNDQwIDEwMDY0NAotLS0gYS9jcnlwdG8vZGgvZGhfa2V5LmMKKysrIGIvY3J5cHRvL2RoL2RoX2tleS5jCkBAIC02Miw4ICs2Miw2IEBACiAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9kaC5oPgogCi0jaWZuZGVmIE9QRU5TU0xfRklQUwotCiBzdGF0aWMgaW50IGdlbmVyYXRlX2tleShESCAqZGgpOwogc3RhdGljIGludCBjb21wdXRlX2tleSh1bnNpZ25lZCBjaGFyICprZXksIGNvbnN0IEJJR05VTSAqcHViX2tleSwgREggKmRoKTsKIHN0YXRpYyBpbnQgZGhfYm5fbW9kX2V4cChjb25zdCBESCAqZGgsIEJJR05VTSAqciwKQEAgLTI2Myw1ICsyNjEsMyBAQAogCQlCTl9NT05UX0NUWF9mcmVlKGRoLT5tZXRob2RfbW9udF9wKTsKIAlyZXR1cm4oMSk7CiAJfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2NyeXB0by9kaC9kaF9wbWV0aC5jIGIvY3J5cHRvL2RoL2RoX3BtZXRoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFlNzJiNwotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9kaC9kaF9wbWV0aC5jCkBAIC0wLDAgKzEsMjU0IEBACisvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKyAqIHByb2plY3QgMjAwNi4KKyAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoYykgMjAwNiBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKyAqCisgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisgKgorICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisgKgorICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworICogICAgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorICoKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJjcnlwdGxpYi5oIgorI2luY2x1ZGUgPG9wZW5zc2wvYXNuMXQuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDkuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorI2luY2x1ZGUgPG9wZW5zc2wvZGguaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisjaW5jbHVkZSAiZXZwX2xvY2wuaCIKKworLyogREggcGtleSBjb250ZXh0IHN0cnVjdHVyZSAqLworCit0eXBlZGVmIHN0cnVjdAorCXsKKwkvKiBQYXJhbWV0ZXIgZ2VuIHBhcmFtZXRlcnMgKi8KKwlpbnQgcHJpbWVfbGVuOworCWludCBnZW5lcmF0b3I7CisJaW50IHVzZV9kc2E7CisJLyogS2V5Z2VuIGNhbGxiYWNrIGluZm8gKi8KKwlpbnQgZ2VudG1wWzJdOworCS8qIG1lc3NhZ2UgZGlnZXN0ICovCisJfSBESF9QS0VZX0NUWDsKKworc3RhdGljIGludCBwa2V5X2RoX2luaXQoRVZQX1BLRVlfQ1RYICpjdHgpCisJeworCURIX1BLRVlfQ1RYICpkY3R4OworCWRjdHggPSBPUEVOU1NMX21hbGxvYyhzaXplb2YoREhfUEtFWV9DVFgpKTsKKwlpZiAoIWRjdHgpCisJCXJldHVybiAwOworCWRjdHgtPnByaW1lX2xlbiA9IDEwMjQ7CisJZGN0eC0+Z2VuZXJhdG9yID0gMjsKKwlkY3R4LT51c2VfZHNhID0gMDsKKworCWN0eC0+ZGF0YSA9IGRjdHg7CisJY3R4LT5rZXlnZW5faW5mbyA9IGRjdHgtPmdlbnRtcDsKKwljdHgtPmtleWdlbl9pbmZvX2NvdW50ID0gMjsKKwkKKwlyZXR1cm4gMTsKKwl9CisKK3N0YXRpYyBpbnQgcGtleV9kaF9jb3B5KEVWUF9QS0VZX0NUWCAqZHN0LCBFVlBfUEtFWV9DVFggKnNyYykKKwl7CisJREhfUEtFWV9DVFggKmRjdHgsICpzY3R4OworCWlmICghcGtleV9kaF9pbml0KGRzdCkpCisJCXJldHVybiAwOworICAgICAgIAlzY3R4ID0gc3JjLT5kYXRhOworCWRjdHggPSBkc3QtPmRhdGE7CisJZGN0eC0+cHJpbWVfbGVuID0gc2N0eC0+cHJpbWVfbGVuOworCWRjdHgtPmdlbmVyYXRvciA9IHNjdHgtPmdlbmVyYXRvcjsKKwlkY3R4LT51c2VfZHNhID0gc2N0eC0+dXNlX2RzYTsKKwlyZXR1cm4gMTsKKwl9CisKK3N0YXRpYyB2b2lkIHBrZXlfZGhfY2xlYW51cChFVlBfUEtFWV9DVFggKmN0eCkKKwl7CisJREhfUEtFWV9DVFggKmRjdHggPSBjdHgtPmRhdGE7CisJaWYgKGRjdHgpCisJCU9QRU5TU0xfZnJlZShkY3R4KTsKKwl9CisKK3N0YXRpYyBpbnQgcGtleV9kaF9jdHJsKEVWUF9QS0VZX0NUWCAqY3R4LCBpbnQgdHlwZSwgaW50IHAxLCB2b2lkICpwMikKKwl7CisJREhfUEtFWV9DVFggKmRjdHggPSBjdHgtPmRhdGE7CisJc3dpdGNoICh0eXBlKQorCQl7CisJCWNhc2UgRVZQX1BLRVlfQ1RSTF9ESF9QQVJBTUdFTl9QUklNRV9MRU46CisJCWlmIChwMSA8IDI1NikKKwkJCXJldHVybiAtMjsKKwkJZGN0eC0+cHJpbWVfbGVuID0gcDE7CisJCXJldHVybiAxOworCisJCWNhc2UgRVZQX1BLRVlfQ1RSTF9ESF9QQVJBTUdFTl9HRU5FUkFUT1I6CisJCWRjdHgtPmdlbmVyYXRvciA9IHAxOworCQlyZXR1cm4gMTsKKworCQljYXNlIEVWUF9QS0VZX0NUUkxfUEVFUl9LRVk6CisJCS8qIERlZmF1bHQgYmVoYXZpb3VyIGlzIE9LICovCisJCXJldHVybiAxOworCisJCWRlZmF1bHQ6CisJCXJldHVybiAtMjsKKworCQl9CisJfQorCisJCQkKK3N0YXRpYyBpbnQgcGtleV9kaF9jdHJsX3N0cihFVlBfUEtFWV9DVFggKmN0eCwKKwkJCWNvbnN0IGNoYXIgKnR5cGUsIGNvbnN0IGNoYXIgKnZhbHVlKQorCXsKKwlpZiAoIXN0cmNtcCh0eXBlLCAiZGhfcGFyYW1nZW5fcHJpbWVfbGVuIikpCisJCXsKKwkJaW50IGxlbjsKKwkJbGVuID0gYXRvaSh2YWx1ZSk7CisJCXJldHVybiBFVlBfUEtFWV9DVFhfc2V0X2RoX3BhcmFtZ2VuX3ByaW1lX2xlbihjdHgsIGxlbik7CisJCX0KKwlpZiAoIXN0cmNtcCh0eXBlLCAiZGhfcGFyYW1nZW5fZ2VuZXJhdG9yIikpCisJCXsKKwkJaW50IGxlbjsKKwkJbGVuID0gYXRvaSh2YWx1ZSk7CisJCXJldHVybiBFVlBfUEtFWV9DVFhfc2V0X2RoX3BhcmFtZ2VuX2dlbmVyYXRvcihjdHgsIGxlbik7CisJCX0KKwlyZXR1cm4gLTI7CisJfQorCitzdGF0aWMgaW50IHBrZXlfZGhfcGFyYW1nZW4oRVZQX1BLRVlfQ1RYICpjdHgsIEVWUF9QS0VZICpwa2V5KQorCXsKKwlESCAqZGggPSBOVUxMOworCURIX1BLRVlfQ1RYICpkY3R4ID0gY3R4LT5kYXRhOworCUJOX0dFTkNCICpwY2IsIGNiOworCWludCByZXQ7CisJaWYgKGN0eC0+cGtleV9nZW5jYikKKwkJeworCQlwY2IgPSAmY2I7CisJCWV2cF9wa2V5X3NldF9jYl90cmFuc2xhdGUocGNiLCBjdHgpOworCQl9CisJZWxzZQorCQlwY2IgPSBOVUxMOworCWRoID0gREhfbmV3KCk7CisJaWYgKCFkaCkKKwkJcmV0dXJuIDA7CisJcmV0ID0gREhfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkaCwKKwkJCQkJZGN0eC0+cHJpbWVfbGVuLCBkY3R4LT5nZW5lcmF0b3IsIHBjYik7CisJaWYgKHJldCkKKwkJRVZQX1BLRVlfYXNzaWduX0RIKHBrZXksIGRoKTsKKwllbHNlCisJCURIX2ZyZWUoZGgpOworCXJldHVybiByZXQ7CisJfQorCitzdGF0aWMgaW50IHBrZXlfZGhfa2V5Z2VuKEVWUF9QS0VZX0NUWCAqY3R4LCBFVlBfUEtFWSAqcGtleSkKKwl7CisJREggKmRoID0gTlVMTDsKKwlpZiAoY3R4LT5wa2V5ID09IE5VTEwpCisJCXsKKwkJREhlcnIoREhfRl9QS0VZX0RIX0tFWUdFTiwgREhfUl9OT19QQVJBTUVURVJTX1NFVCk7CisJCXJldHVybiAwOworCQl9CisJZGggPSBESF9uZXcoKTsKKwlpZiAoIWRoKQorCQlyZXR1cm4gMDsKKwlFVlBfUEtFWV9hc3NpZ25fREgocGtleSwgZGgpOworCS8qIE5vdGU6IGlmIGVycm9yIHJldHVybiwgcGtleSBpcyBmcmVlZCBieSBwYXJlbnQgcm91dGluZSAqLworCWlmICghRVZQX1BLRVlfY29weV9wYXJhbWV0ZXJzKHBrZXksIGN0eC0+cGtleSkpCisJCXJldHVybiAwOworCXJldHVybiBESF9nZW5lcmF0ZV9rZXkocGtleS0+cGtleS5kaCk7CisJfQorCitzdGF0aWMgaW50IHBrZXlfZGhfZGVyaXZlKEVWUF9QS0VZX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICprZXksIHNpemVfdCAqa2V5bGVuKQorCXsKKwlpbnQgcmV0OworCWlmICghY3R4LT5wa2V5IHx8ICFjdHgtPnBlZXJrZXkpCisJCXsKKwkJREhlcnIoREhfRl9QS0VZX0RIX0RFUklWRSwgREhfUl9LRVlTX05PVF9TRVQpOworCQlyZXR1cm4gMDsKKwkJfQorCXJldCA9IERIX2NvbXB1dGVfa2V5KGtleSwgY3R4LT5wZWVya2V5LT5wa2V5LmRoLT5wdWJfa2V5LAorCQkJCQkJCWN0eC0+cGtleS0+cGtleS5kaCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJKmtleWxlbiA9IHJldDsKKwlyZXR1cm4gMTsKKwl9CisKK2NvbnN0IEVWUF9QS0VZX01FVEhPRCBkaF9wa2V5X21ldGggPSAKKwl7CisJRVZQX1BLRVlfREgsCisJRVZQX1BLRVlfRkxBR19BVVRPQVJHTEVOLAorCXBrZXlfZGhfaW5pdCwKKwlwa2V5X2RoX2NvcHksCisJcGtleV9kaF9jbGVhbnVwLAorCisJMCwKKwlwa2V5X2RoX3BhcmFtZ2VuLAorCisJMCwKKwlwa2V5X2RoX2tleWdlbiwKKworCTAsCisJMCwKKworCTAsCisJMCwKKworCTAsMCwKKworCTAsMCwwLDAsCisKKwkwLDAsCisKKwkwLDAsCisKKwkwLAorCXBrZXlfZGhfZGVyaXZlLAorCisJcGtleV9kaF9jdHJsLAorCXBrZXlfZGhfY3RybF9zdHIKKworCX07CmRpZmYgLS1naXQgYS9jcnlwdG8vZHNhL01ha2VmaWxlIGIvY3J5cHRvL2RzYS9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmM5NTc4Yy4uMDAwMDAwMAotLS0gYS9jcnlwdG8vZHNhL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMTg4ICswLDAgQEAKLSMKLSMgT3BlblNTTC9jcnlwdG8vZHNhL01ha2VmaWxlCi0jCi0KLURJUj0JZHNhCi1UT1A9CS4uLy4uCi1DQz0JY2MKLUlOQ0xVREVTPSAtSS4uIC1JJChUT1ApIC1JLi4vLi4vaW5jbHVkZQotQ0ZMQUc9LWcKLU1BS0VGSUxFPQlNYWtlZmlsZQotQVI9CQlhciByCi0KLUNGTEFHUz0gJChJTkNMVURFUykgJChDRkxBRykKLQotR0VORVJBTD1NYWtlZmlsZQotVEVTVD1kc2F0ZXN0LmMKLUFQUFM9Ci0KLUxJQj0kKFRPUCkvbGliY3J5cHRvLmEKLUxJQlNSQz0gZHNhX2dlbi5jIGRzYV9rZXkuYyBkc2FfbGliLmMgZHNhX2FzbjEuYyBkc2FfdnJmLmMgZHNhX3NpZ24uYyBcCi0JZHNhX2Vyci5jIGRzYV9vc3NsLmMgZHNhX2RlcHIuYyBkc2FfdXRsLmMKLUxJQk9CSj0gZHNhX2dlbi5vIGRzYV9rZXkubyBkc2FfbGliLm8gZHNhX2FzbjEubyBkc2FfdnJmLm8gZHNhX3NpZ24ubyBcCi0JZHNhX2Vyci5vIGRzYV9vc3NsLm8gZHNhX2RlcHIubyBkc2FfdXRsLm8KLQotU1JDPSAkKExJQlNSQykKLQotRVhIRUFERVI9IGRzYS5oCi1IRUFERVI9CSQoRVhIRUFERVIpCi0KLUFMTD0gICAgJChHRU5FUkFMKSAkKFNSQykgJChIRUFERVIpCi0KLXRvcDoKLQkoY2QgLi4vLi47ICQoTUFLRSkgRElSUz1jcnlwdG8gU0RJUlM9JChESVIpIHN1Yl9hbGwpCi0KLWFsbDoJbGliCi0KLWxpYjoJJChMSUJPQkopCi0JJChBUlgpICQoTElCKSAkKExJQk9CSikKLQkkKFJBTkxJQikgJChMSUIpIHx8IGVjaG8gTmV2ZXIgbWluZC4KLQlAdG91Y2ggbGliCi0KLWZpbGVzOgotCSQoUEVSTCkgJChUT1ApL3V0aWwvZmlsZXMucGwgTWFrZWZpbGUgPj4gJChUT1ApL01JTkZPCi0KLWxpbmtzOgotCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9pbmNsdWRlL29wZW5zc2wgJChFWEhFQURFUikKLQlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vdGVzdCAkKFRFU1QpCi0JQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL2FwcHMgJChBUFBTKQotCi1pbnN0YWxsOgotCUBbIC1uICIkKElOU1RBTExUT1ApIiBdICMgc2hvdWxkIGJlIHNldCBieSB0b3AgTWFrZWZpbGUuLi4KLQlAaGVhZGVybGlzdD0iJChFWEhFQURFUikiOyBmb3IgaSBpbiAkJGhlYWRlcmxpc3QgOyBcCi0JZG8gIFwKLQkoY3AgJCRpICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpOyBcCi0JY2htb2QgNjQ0ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpICk7IFwKLQlkb25lOwotCi10YWdzOgotCWN0YWdzICQoU1JDKQotCi10ZXN0czoKLQotbGludDoKLQlsaW50IC1ETElOVCAkKElOQ0xVREVTKSAkKFNSQyk+Zmx1ZmYKLQotZGVwZW5kOgotCUBbIC1uICIkKE1BS0VERVBFTkQpIiBdICMgc2hvdWxkIGJlIHNldCBieSB1cHBlciBNYWtlZmlsZS4uLgotCSQoTUFLRURFUEVORCkgLS0gJChDRkxBRykgJChJTkNMVURFUykgJChERVBGTEFHKSAtLSAkKFBST0dTKSAkKExJQlNSQykKLQotZGNsZWFuOgotCSQoUEVSTCkgLXBlICdpZiAoL14jIERPIE5PVCBERUxFVEUgVEhJUyBMSU5FLykge3ByaW50OyBleGl0KDApO30nICQoTUFLRUZJTEUpID5NYWtlZmlsZS5uZXcKLQltdiAtZiBNYWtlZmlsZS5uZXcgJChNQUtFRklMRSkKLQotY2xlYW46Ci0Jcm0gLWYgKi5vICovKi5vICoub2JqIGxpYiB0YWdzIGNvcmUgLnB1cmUgLm5mcyogKi5vbGQgKi5iYWsgZmx1ZmYKLQotIyBETyBOT1QgREVMRVRFIFRISVMgTElORSAtLSBtYWtlIGRlcGVuZCBkZXBlbmRzIG9uIGl0LgotCi1kc2FfYXNuMS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotZHNhX2FzbjEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjF0LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1kc2FfYXNuMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLWRzYV9hc24xLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZHNhLmgKLWRzYV9hc24xLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotZHNhX2FzbjEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotZHNhX2FzbjEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWRzYV9hc24xLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1kc2FfYXNuMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotZHNhX2FzbjEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLWRzYV9hc24xLm86IC4uL2NyeXB0bGliLmggZHNhX2FzbjEuYwotZHNhX2RlcHIubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLWRzYV9kZXByLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaAotZHNhX2RlcHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotZHNhX2RlcHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1kc2FfZGVwci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1kc2FfZGVwci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1kc2FfZGVwci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLWRzYV9kZXByLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1kc2FfZGVwci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotZHNhX2RlcHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLWRzYV9kZXByLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotZHNhX2RlcHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBkc2FfZGVwci5jCi1kc2FfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWRzYV9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1kc2FfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotZHNhX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotZHNhX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLWRzYV9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLWRzYV9lcnIubzogZHNhX2Vyci5jCi1kc2FfZ2VuLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi1kc2FfZ2VuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaAotZHNhX2dlbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1kc2FfZ2VuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotZHNhX2dlbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1kc2FfZ2VuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLWRzYV9nZW4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi1kc2FfZ2VuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi1kc2FfZ2VuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKLWRzYV9nZW4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotZHNhX2dlbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotZHNhX2dlbi5vOiAuLi9jcnlwdGxpYi5oIGRzYV9nZW4uYwotZHNhX2tleS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oCi1kc2Ffa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWRzYV9rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1kc2Ffa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotZHNhX2tleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotZHNhX2tleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCi1kc2Ffa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotZHNhX2tleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGRzYV9rZXkuYwotZHNhX2xpYi5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotZHNhX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmgKLWRzYV9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotZHNhX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZHNhLmgKLWRzYV9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLWRzYV9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotZHNhX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZW5naW5lLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1kc2FfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi1kc2FfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLWRzYV9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotZHNhX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotZHNhX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLWRzYV9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1kc2FfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLWRzYV9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vY3J5cHRsaWIuaCBkc2FfbGliLmMKLWRzYV9vc3NsLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi1kc2Ffb3NzbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmgKLWRzYV9vc3NsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWRzYV9vc3NsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotZHNhX29zc2wubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1kc2Ffb3NzbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotZHNhX29zc2wubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWRzYV9vc3NsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1kc2Ffb3NzbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotZHNhX29zc2wubzogLi4vY3J5cHRsaWIuaCBkc2Ffb3NzbC5jCi1kc2Ffc2lnbi5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotZHNhX3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oCi1kc2Ffc2lnbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1kc2Ffc2lnbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLWRzYV9zaWduLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi1kc2Ffc2lnbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotZHNhX3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWRzYV9zaWduLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1kc2Ffc2lnbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotZHNhX3NpZ24ubzogLi4vY3J5cHRsaWIuaCBkc2Ffc2lnbi5jCi1kc2FfdXRsLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi1kc2FfdXRsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaAotZHNhX3V0bC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1kc2FfdXRsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaAotZHNhX3V0bC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotZHNhX3V0bC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi1kc2FfdXRsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lbmdpbmUuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWRzYV91dGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLWRzYV91dGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotZHNhX3V0bC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1kc2FfdXRsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1kc2FfdXRsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotZHNhX3V0bC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWRzYV91dGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotZHNhX3V0bC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9jcnlwdGxpYi5oIGRzYV91dGwuYwotZHNhX3ZyZi5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotZHNhX3ZyZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMV9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWRzYV92cmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1kc2FfdnJmLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZHNhLmgKLWRzYV92cmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1kc2FfdnJmLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLWRzYV92cmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLWRzYV92cmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAotZHNhX3ZyZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWRzYV92cmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBkc2FfdnJmLmMKZGlmZiAtLWdpdCBhL2NyeXB0by9kc2EvZHNhLmggYi9jcnlwdG8vZHNhL2RzYS5oCmluZGV4IDcwMmM1MGQuLmFjNTBhNWMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9kc2EvZHNhLmgKKysrIGIvY3J5cHRvL2RzYS9kc2EuaApAQCAtODgsOCArODgsNiBAQAogIyBkZWZpbmUgT1BFTlNTTF9EU0FfTUFYX01PRFVMVVNfQklUUwkxMDAwMAogI2VuZGlmCiAKLSNkZWZpbmUgT1BFTlNTTF9EU0FfRklQU19NSU5fTU9EVUxVU19CSVRTIDEwMjQKLQogI2RlZmluZSBEU0FfRkxBR19DQUNIRV9NT05UX1AJMHgwMQogI2RlZmluZSBEU0FfRkxBR19OT19FWFBfQ09OU1RUSU1FICAgICAgIDB4MDIgLyogbmV3IHdpdGggMC45LjdoOyB0aGUgYnVpbHQtaW4gRFNBCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpbXBsZW1lbnRhdGlvbiBub3cgdXNlcyBjb25zdGFudCB0aW1lCkBAIC05OSwyNSArOTcsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYmUgdXNlZCBmb3IgYWxsIGV4cG9uZW50cy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCi0vKiBJZiB0aGlzIGZsYWcgaXMgc2V0IHRoZSBEU0EgbWV0aG9kIGlzIEZJUFMgY29tcGxpYW50IGFuZCBjYW4gYmUgdXNlZAotICogaW4gRklQUyBtb2RlLiBUaGlzIGlzIHNldCBpbiB0aGUgdmFsaWRhdGVkIG1vZHVsZSBtZXRob2QuIElmIGFuCi0gKiBhcHBsaWNhdGlvbiBzZXRzIHRoaXMgZmxhZyBpbiBpdHMgb3duIG1ldGhvZHMgaXQgaXMgaXRzIHJlcG9zaWJpbGl0eQotICogdG8gZW5zdXJlIHRoZSByZXN1bHQgaXMgY29tcGxpYW50LgotICovCi0KLSNkZWZpbmUgRFNBX0ZMQUdfRklQU19NRVRIT0QJCQkweDA0MDAKLQotLyogSWYgdGhpcyBmbGFnIGlzIHNldCB0aGUgb3BlcmF0aW9ucyBub3JtYWxseSBkaXNhYmxlZCBpbiBGSVBTIG1vZGUgYXJlCi0gKiBwZXJtaXR0ZWQgaXQgaXMgdGhlbiB0aGUgYXBwbGljYXRpb25zIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZSB0aGF0IHRoZQotICogdXNhZ2UgaXMgY29tcGxpYW50LgotICovCi0KLSNkZWZpbmUgRFNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cJCQkweDA0MDAKLQotI2lmZGVmIE9QRU5TU0xfRklQUwotI2RlZmluZSBGSVBTX0RTQV9TSVpFX1QJaW50Ci0jZW5kaWYKLQogI2lmZGVmICBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CiAjZW5kaWYKQEAgLTEzOSw3ICsxMTgsNyBAQAogCWludCAoKmRzYV9zaWduX3NldHVwKShEU0EgKmRzYSwgQk5fQ1RYICpjdHhfaW4sIEJJR05VTSAqKmtpbnZwLAogCQkJCQkJCQlCSUdOVU0gKipycCk7CiAJaW50ICgqZHNhX2RvX3ZlcmlmeSkoY29uc3QgdW5zaWduZWQgY2hhciAqZGdzdCwgaW50IGRnc3RfbGVuLAotCQkJCQkJCURTQV9TSUcgKnNpZywgRFNBICpkc2EpOworCQkJICAgICBEU0FfU0lHICpzaWcsIERTQSAqZHNhKTsKIAlpbnQgKCpkc2FfbW9kX2V4cCkoRFNBICpkc2EsIEJJR05VTSAqcnIsIEJJR05VTSAqYTEsIEJJR05VTSAqcDEsCiAJCQlCSUdOVU0gKmEyLCBCSUdOVU0gKnAyLCBCSUdOVU0gKm0sIEJOX0NUWCAqY3R4LAogCQkJQk5fTU9OVF9DVFggKmluX21vbnQpOwpAQCAtMTUyLDcgKzEzMSw3IEBACiAJY2hhciAqYXBwX2RhdGE7CiAJLyogSWYgdGhpcyBpcyBub24tTlVMTCwgaXQgaXMgdXNlZCB0byBnZW5lcmF0ZSBEU0EgcGFyYW1ldGVycyAqLwogCWludCAoKmRzYV9wYXJhbWdlbikoRFNBICpkc2EsIGludCBiaXRzLAotCQkJdW5zaWduZWQgY2hhciAqc2VlZCwgaW50IHNlZWRfbGVuLAorCQkJY29uc3QgdW5zaWduZWQgY2hhciAqc2VlZCwgaW50IHNlZWRfbGVuLAogCQkJaW50ICpjb3VudGVyX3JldCwgdW5zaWduZWQgbG9uZyAqaF9yZXQsCiAJCQlCTl9HRU5DQiAqY2IpOwogCS8qIElmIHRoaXMgaXMgbm9uLU5VTEwsIGl0IGlzIHVzZWQgdG8gZ2VuZXJhdGUgRFNBIGtleXMgKi8KQEAgLTE4Niw3ICsxNjUsNiBAQAogCUVOR0lORSAqZW5naW5lOwogCX07CiAKLSNkZWZpbmUgRFNBcGFyYW1zX2R1cCh4KSBBU04xX2R1cF9vZl9jb25zdChEU0EsaTJkX0RTQXBhcmFtcyxkMmlfRFNBcGFyYW1zLHgpCiAjZGVmaW5lIGQyaV9EU0FwYXJhbXNfZnAoZnAseCkgKERTQSAqKUFTTjFfZDJpX2ZwKChjaGFyICooKikoKSlEU0FfbmV3LCBcCiAJCShjaGFyICooKikoKSlkMmlfRFNBcGFyYW1zLChmcCksKHVuc2lnbmVkIGNoYXIgKiopKHgpKQogI2RlZmluZSBpMmRfRFNBcGFyYW1zX2ZwKGZwLHgpIEFTTjFfaTJkX2ZwKGkyZF9EU0FwYXJhbXMsKGZwKSwgXApAQCAtMTk1LDYgKzE3Myw3IEBACiAjZGVmaW5lIGkyZF9EU0FwYXJhbXNfYmlvKGJwLHgpIEFTTjFfaTJkX2Jpb19vZl9jb25zdChEU0EsaTJkX0RTQXBhcmFtcyxicCx4KQogCiAKK0RTQSAqRFNBcGFyYW1zX2R1cChEU0EgKngpOwogRFNBX1NJRyAqIERTQV9TSUdfbmV3KHZvaWQpOwogdm9pZAlEU0FfU0lHX2ZyZWUoRFNBX1NJRyAqYSk7CiBpbnQJaTJkX0RTQV9TSUcoY29uc3QgRFNBX1NJRyAqYSwgdW5zaWduZWQgY2hhciAqKnBwKTsKQEAgLTIxMCwxMSArMTg5LDYgQEAKIGNvbnN0IERTQV9NRVRIT0QgKkRTQV9nZXRfZGVmYXVsdF9tZXRob2Qodm9pZCk7CiBpbnQJRFNBX3NldF9tZXRob2QoRFNBICpkc2EsIGNvbnN0IERTQV9NRVRIT0QgKik7CiAKLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLURTQSAqCUZJUFNfZHNhX25ldyh2b2lkKTsKLXZvaWQJRklQU19kc2FfZnJlZSAoRFNBICpyKTsKLSNlbmRpZgotCiBEU0EgKglEU0FfbmV3KHZvaWQpOwogRFNBICoJRFNBX25ld19tZXRob2QoRU5HSU5FICplbmdpbmUpOwogdm9pZAlEU0FfZnJlZSAoRFNBICpyKTsKQEAgLTI0Niw3ICsyMjAsNyBAQAogCiAvKiBOZXcgdmVyc2lvbiAqLwogaW50CURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KERTQSAqZHNhLCBpbnQgYml0cywKLQkJdW5zaWduZWQgY2hhciAqc2VlZCxpbnQgc2VlZF9sZW4sCisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlZWQsaW50IHNlZWRfbGVuLAogCQlpbnQgKmNvdW50ZXJfcmV0LCB1bnNpZ25lZCBsb25nICpoX3JldCwgQk5fR0VOQ0IgKmNiKTsKIAogaW50CURTQV9nZW5lcmF0ZV9rZXkoRFNBICphKTsKQEAgLTI3NSwxMCArMjQ5LDEzIEBACiBESCAqRFNBX2R1cF9ESChjb25zdCBEU0EgKnIpOwogI2VuZGlmCiAKLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLWludCBGSVBTX2RzYV9zaWdfZW5jb2RlKHVuc2lnbmVkIGNoYXIgKm91dCwgRFNBX1NJRyAqc2lnKTsKLWludCBGSVBTX2RzYV9zaWdfZGVjb2RlKERTQV9TSUcgKnNpZywgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIGludCBpbmxlbik7Ci0jZW5kaWYKKyNkZWZpbmUgRVZQX1BLRVlfQ1RYX3NldF9kc2FfcGFyYW1nZW5fYml0cyhjdHgsIG5iaXRzKSBcCisJRVZQX1BLRVlfQ1RYX2N0cmwoY3R4LCBFVlBfUEtFWV9EU0EsIEVWUF9QS0VZX09QX1BBUkFNR0VOLCBcCisJCQkJRVZQX1BLRVlfQ1RSTF9EU0FfUEFSQU1HRU5fQklUUywgbmJpdHMsIE5VTEwpCisKKyNkZWZpbmUJRVZQX1BLRVlfQ1RSTF9EU0FfUEFSQU1HRU5fQklUUwkJKEVWUF9QS0VZX0FMR19DVFJMICsgMSkKKyNkZWZpbmUJRVZQX1BLRVlfQ1RSTF9EU0FfUEFSQU1HRU5fUV9CSVRTCShFVlBfUEtFWV9BTEdfQ1RSTCArIDIpCisjZGVmaW5lCUVWUF9QS0VZX0NUUkxfRFNBX1BBUkFNR0VOX01ECQkoRVZQX1BLRVlfQUxHX0NUUkwgKyAzKQogCiAvKiBCRUdJTiBFUlJPUiBDT0RFUyAqLwogLyogVGhlIGZvbGxvd2luZyBsaW5lcyBhcmUgYXV0byBnZW5lcmF0ZWQgYnkgdGhlIHNjcmlwdCBta2Vyci5wbC4gQW55IGNoYW5nZXMKQEAgLTI5MCwzMyArMjY3LDM5IEBACiAKIC8qIEZ1bmN0aW9uIGNvZGVzLiAqLwogI2RlZmluZSBEU0FfRl9EMklfRFNBX1NJRwkJCQkgMTEwCisjZGVmaW5lIERTQV9GX0RPX0RTQV9QUklOVAkJCQkgMTA0CiAjZGVmaW5lIERTQV9GX0RTQVBBUkFNU19QUklOVAkJCQkgMTAwCiAjZGVmaW5lIERTQV9GX0RTQVBBUkFNU19QUklOVF9GUAkJCSAxMDEKLSNkZWZpbmUgRFNBX0ZfRFNBX0JVSUxUSU5fS0VZR0VOCQkJIDExOQotI2RlZmluZSBEU0FfRl9EU0FfQlVJTFRJTl9QQVJBTUdFTgkJCSAxMTgKICNkZWZpbmUgRFNBX0ZfRFNBX0RPX1NJR04JCQkJIDExMgogI2RlZmluZSBEU0FfRl9EU0FfRE9fVkVSSUZZCQkJCSAxMTMKLSNkZWZpbmUgRFNBX0ZfRFNBX0dFTkVSQVRFX1BBUkFNRVRFUlMJCQkgMTE3CiAjZGVmaW5lIERTQV9GX0RTQV9ORVdfTUVUSE9ECQkJCSAxMDMKLSNkZWZpbmUgRFNBX0ZfRFNBX1BSSU5UCQkJCQkgMTA0CisjZGVmaW5lIERTQV9GX0RTQV9QQVJBTV9ERUNPREUJCQkJIDExOQogI2RlZmluZSBEU0FfRl9EU0FfUFJJTlRfRlAJCQkJIDEwNQotI2RlZmluZSBEU0FfRl9EU0FfU0VUX0RFRkFVTFRfTUVUSE9ECQkJIDExNQotI2RlZmluZSBEU0FfRl9EU0FfU0VUX01FVEhPRAkJCQkgMTE2CisjZGVmaW5lIERTQV9GX0RTQV9QUklWX0RFQ09ERQkJCQkgMTE1CisjZGVmaW5lIERTQV9GX0RTQV9QUklWX0VOQ09ERQkJCQkgMTE2CisjZGVmaW5lIERTQV9GX0RTQV9QVUJfREVDT0RFCQkJCSAxMTcKKyNkZWZpbmUgRFNBX0ZfRFNBX1BVQl9FTkNPREUJCQkJIDExOAogI2RlZmluZSBEU0FfRl9EU0FfU0lHTgkJCQkJIDEwNgogI2RlZmluZSBEU0FfRl9EU0FfU0lHTl9TRVRVUAkJCQkgMTA3CiAjZGVmaW5lIERTQV9GX0RTQV9TSUdfTkVXCQkJCSAxMDkKICNkZWZpbmUgRFNBX0ZfRFNBX1ZFUklGWQkJCQkgMTA4CiAjZGVmaW5lIERTQV9GX0kyRF9EU0FfU0lHCQkJCSAxMTEKKyNkZWZpbmUgRFNBX0ZfT0xEX0RTQV9QUklWX0RFQ09ERQkJCSAxMjIKKyNkZWZpbmUgRFNBX0ZfUEtFWV9EU0FfQ1RSTAkJCQkgMTIwCisjZGVmaW5lIERTQV9GX1BLRVlfRFNBX0tFWUdFTgkJCQkgMTIxCiAjZGVmaW5lIERTQV9GX1NJR19DQgkJCQkJIDExNAogCiAvKiBSZWFzb24gY29kZXMuICovCiAjZGVmaW5lIERTQV9SX0JBRF9RX1ZBTFVFCQkJCSAxMDIKKyNkZWZpbmUgRFNBX1JfQk5fREVDT0RFX0VSUk9SCQkJCSAxMDgKKyNkZWZpbmUgRFNBX1JfQk5fRVJST1IJCQkJCSAxMDkKICNkZWZpbmUgRFNBX1JfREFUQV9UT09fTEFSR0VfRk9SX0tFWV9TSVpFCQkgMTAwCi0jZGVmaW5lIERTQV9SX0tFWV9TSVpFX1RPT19TTUFMTAkJCSAxMDYKKyNkZWZpbmUgRFNBX1JfREVDT0RFX0VSUk9SCQkJCSAxMDQKKyNkZWZpbmUgRFNBX1JfSU5WQUxJRF9ESUdFU1RfVFlQRQkJCSAxMDYKICNkZWZpbmUgRFNBX1JfTUlTU0lOR19QQVJBTUVURVJTCQkJIDEwMQogI2RlZmluZSBEU0FfUl9NT0RVTFVTX1RPT19MQVJHRQkJCQkgMTAzCi0jZGVmaW5lIERTQV9SX05PTl9GSVBTX01FVEhPRAkJCQkgMTA0Ci0jZGVmaW5lIERTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBTX01PREUJIDEwNQorI2RlZmluZSBEU0FfUl9OT19QQVJBTUVURVJTX1NFVAkJCQkgMTA3CisjZGVmaW5lIERTQV9SX1BBUkFNRVRFUl9FTkNPRElOR19FUlJPUgkJCSAxMDUKIAogI2lmZGVmICBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2RzYS9kc2FfYW1ldGguYyBiL2NyeXB0by9kc2EvZHNhX2FtZXRoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ4MjMzMAotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9kc2EvZHNhX2FtZXRoLmMKQEAgLTAsMCArMSw2NTcgQEAKKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorICogcHJvamVjdCAyMDA2LgorICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChjKSAyMDA2IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorICoKKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKyAqCisgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKyAqCisgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisgKiAgICBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZworICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQorICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisgKgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgImNyeXB0bGliLmgiCisjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+CisjaW5jbHVkZSA8b3BlbnNzbC9hc24xLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisjaWZuZGVmIE9QRU5TU0xfTk9fQ01TCisjaW5jbHVkZSA8b3BlbnNzbC9jbXMuaD4KKyNlbmRpZgorI2luY2x1ZGUgImFzbjFfbG9jbC5oIgorCitzdGF0aWMgaW50IGRzYV9wdWJfZGVjb2RlKEVWUF9QS0VZICpwa2V5LCBYNTA5X1BVQktFWSAqcHVia2V5KQorCXsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpwLCAqcG07CisJaW50IHBrbGVuLCBwbWxlbjsKKwlpbnQgcHR5cGU7CisJdm9pZCAqcHZhbDsKKwlBU04xX1NUUklORyAqcHN0cjsKKwlYNTA5X0FMR09SICpwYWxnOworCUFTTjFfSU5URUdFUiAqcHVibGljX2tleSA9IE5VTEw7CisKKwlEU0EgKmRzYSA9IE5VTEw7CisKKwlpZiAoIVg1MDlfUFVCS0VZX2dldDBfcGFyYW0oTlVMTCwgJnAsICZwa2xlbiwgJnBhbGcsIHB1YmtleSkpCisJCXJldHVybiAwOworCVg1MDlfQUxHT1JfZ2V0MChOVUxMLCAmcHR5cGUsICZwdmFsLCBwYWxnKTsKKworCisJaWYgKHB0eXBlID09IFZfQVNOMV9TRVFVRU5DRSkKKwkJeworCQlwc3RyID0gcHZhbDsJCisJCXBtID0gcHN0ci0+ZGF0YTsKKwkJcG1sZW4gPSBwc3RyLT5sZW5ndGg7CisKKwkJaWYgKCEoZHNhID0gZDJpX0RTQXBhcmFtcyhOVUxMLCAmcG0sIHBtbGVuKSkpCisJCQl7CisJCQlEU0FlcnIoRFNBX0ZfRFNBX1BVQl9ERUNPREUsIERTQV9SX0RFQ09ERV9FUlJPUik7CisJCQlnb3RvIGVycjsKKwkJCX0KKworCQl9CisJZWxzZSBpZiAoKHB0eXBlID09IFZfQVNOMV9OVUxMKSB8fCAocHR5cGUgPT0gVl9BU04xX1VOREVGKSkKKwkJeworCQlpZiAoIShkc2EgPSBEU0FfbmV3KCkpKQorCQkJeworCQkJRFNBZXJyKERTQV9GX0RTQV9QVUJfREVDT0RFLCBFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CisJCQlnb3RvIGVycjsKKwkJCX0KKwkJfQorCWVsc2UKKwkJeworCQlEU0FlcnIoRFNBX0ZfRFNBX1BVQl9ERUNPREUsIERTQV9SX1BBUkFNRVRFUl9FTkNPRElOR19FUlJPUik7CisJCWdvdG8gZXJyOworCQl9CisKKwlpZiAoIShwdWJsaWNfa2V5PWQyaV9BU04xX0lOVEVHRVIoTlVMTCwgJnAsIHBrbGVuKSkpCisJCXsKKwkJRFNBZXJyKERTQV9GX0RTQV9QVUJfREVDT0RFLCBEU0FfUl9ERUNPREVfRVJST1IpOworCQlnb3RvIGVycjsKKwkJfQorCisJaWYgKCEoZHNhLT5wdWJfa2V5ID0gQVNOMV9JTlRFR0VSX3RvX0JOKHB1YmxpY19rZXksIE5VTEwpKSkKKwkJeworCQlEU0FlcnIoRFNBX0ZfRFNBX1BVQl9ERUNPREUsIERTQV9SX0JOX0RFQ09ERV9FUlJPUik7CisJCWdvdG8gZXJyOworCQl9CisKKwlBU04xX0lOVEVHRVJfZnJlZShwdWJsaWNfa2V5KTsKKwlFVlBfUEtFWV9hc3NpZ25fRFNBKHBrZXksIGRzYSk7CisJcmV0dXJuIDE7CisKKwllcnI6CisJaWYgKHB1YmxpY19rZXkpCisJCUFTTjFfSU5URUdFUl9mcmVlKHB1YmxpY19rZXkpOworCWlmIChkc2EpCisJCURTQV9mcmVlKGRzYSk7CisJcmV0dXJuIDA7CisKKwl9CisKK3N0YXRpYyBpbnQgZHNhX3B1Yl9lbmNvZGUoWDUwOV9QVUJLRVkgKnBrLCBjb25zdCBFVlBfUEtFWSAqcGtleSkKKwl7CisJRFNBICpkc2E7CisJdm9pZCAqcHZhbCA9IE5VTEw7CisJaW50IHB0eXBlOworCXVuc2lnbmVkIGNoYXIgKnBlbmMgPSBOVUxMOworCWludCBwZW5jbGVuOworCisJZHNhPXBrZXktPnBrZXkuZHNhOworCWlmIChwa2V5LT5zYXZlX3BhcmFtZXRlcnMgJiYgZHNhLT5wICYmIGRzYS0+cSAmJiBkc2EtPmcpCisJCXsKKwkJQVNOMV9TVFJJTkcgKnN0cjsKKwkJc3RyID0gQVNOMV9TVFJJTkdfbmV3KCk7CisJCXN0ci0+bGVuZ3RoID0gaTJkX0RTQXBhcmFtcyhkc2EsICZzdHItPmRhdGEpOworCQlpZiAoc3RyLT5sZW5ndGggPD0gMCkKKwkJCXsKKwkJCURTQWVycihEU0FfRl9EU0FfUFVCX0VOQ09ERSwgRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOworCQkJZ290byBlcnI7CisJCQl9CisJCXB2YWwgPSBzdHI7CisJCXB0eXBlID0gVl9BU04xX1NFUVVFTkNFOworCQl9CisJZWxzZQorCQlwdHlwZSA9IFZfQVNOMV9VTkRFRjsKKworCWRzYS0+d3JpdGVfcGFyYW1zPTA7CisKKwlwZW5jbGVuID0gaTJkX0RTQVB1YmxpY0tleShkc2EsICZwZW5jKTsKKworCWlmIChwZW5jbGVuIDw9IDApCisJCXsKKwkJRFNBZXJyKERTQV9GX0RTQV9QVUJfRU5DT0RFLCBFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CisJCWdvdG8gZXJyOworCQl9CisKKwlpZiAoWDUwOV9QVUJLRVlfc2V0MF9wYXJhbShwaywgT0JKX25pZDJvYmooRVZQX1BLRVlfRFNBKSwKKwkJCQlwdHlwZSwgcHZhbCwgcGVuYywgcGVuY2xlbikpCisJCXJldHVybiAxOworCisJZXJyOgorCWlmIChwZW5jKQorCQlPUEVOU1NMX2ZyZWUocGVuYyk7CisJaWYgKHB2YWwpCisJCUFTTjFfU1RSSU5HX2ZyZWUocHZhbCk7CisKKwlyZXR1cm4gMDsKKwl9CisKKy8qIEluIFBLQ1MjOCBEU0E6IHlvdSBqdXN0IGdldCBhIHByaXZhdGUga2V5IGludGVnZXIgYW5kIHBhcmFtZXRlcnMgaW4gdGhlCisgKiBBbGdvcml0aG1JZGVudGlmaWVyIHRoZSBwdWJrZXkgbXVzdCBiZSByZWNhbGN1bGF0ZWQuCisgKi8KKwkKK3N0YXRpYyBpbnQgZHNhX3ByaXZfZGVjb2RlKEVWUF9QS0VZICpwa2V5LCBQS0NTOF9QUklWX0tFWV9JTkZPICpwOCkKKwl7CisJY29uc3QgdW5zaWduZWQgY2hhciAqcCwgKnBtOworCWludCBwa2xlbiwgcG1sZW47CisJaW50IHB0eXBlOworCXZvaWQgKnB2YWw7CisJQVNOMV9TVFJJTkcgKnBzdHI7CisJWDUwOV9BTEdPUiAqcGFsZzsKKwlBU04xX0lOVEVHRVIgKnByaXZrZXkgPSBOVUxMOworCUJOX0NUWCAqY3R4ID0gTlVMTDsKKworCVNUQUNLX09GKEFTTjFfVFlQRSkgKm5kc2EgPSBOVUxMOworCURTQSAqZHNhID0gTlVMTDsKKworCWlmICghUEtDUzhfcGtleV9nZXQwKE5VTEwsICZwLCAmcGtsZW4sICZwYWxnLCBwOCkpCisJCXJldHVybiAwOworCVg1MDlfQUxHT1JfZ2V0MChOVUxMLCAmcHR5cGUsICZwdmFsLCBwYWxnKTsKKworCS8qIENoZWNrIGZvciBicm9rZW4gRFNBIFBLQ1MjOCwgVUdIISAqLworCWlmICgqcCA9PSAoVl9BU04xX1NFUVVFTkNFfFZfQVNOMV9DT05TVFJVQ1RFRCkpCisJCXsKKwkJQVNOMV9UWVBFICp0MSwgKnQyOworCSAgICAJaWYoIShuZHNhID0gZDJpX0FTTjFfU0VRVUVOQ0VfQU5ZKE5VTEwsICZwLCBwa2xlbikpKTsKKwkJCWdvdG8gZGVjZXJyOworCQlpZiAoc2tfQVNOMV9UWVBFX251bShuZHNhKSAhPSAyKQorCQkJZ290byBkZWNlcnI7CisJCS8qIEhhbmRsZSBUd28gYnJva2VuIHR5cGVzOgorCSAgICAJICogU0VRVUVOQ0Uge3BhcmFtZXRlcnMsIHByaXZfa2V5fQorCQkgKiBTRVFVRU5DRSB7cHViX2tleSwgcHJpdl9rZXl9CisJCSAqLworCisJCXQxID0gc2tfQVNOMV9UWVBFX3ZhbHVlKG5kc2EsIDApOworCQl0MiA9IHNrX0FTTjFfVFlQRV92YWx1ZShuZHNhLCAxKTsKKwkJaWYgKHQxLT50eXBlID09IFZfQVNOMV9TRVFVRU5DRSkKKwkJCXsKKwkJCXA4LT5icm9rZW4gPSBQS0NTOF9FTUJFRERFRF9QQVJBTTsKKwkJCXB2YWwgPSB0MS0+dmFsdWUucHRyOworCQkJfQorCQllbHNlIGlmIChwdHlwZSA9PSBWX0FTTjFfU0VRVUVOQ0UpCisJCQlwOC0+YnJva2VuID0gUEtDUzhfTlNfREI7CisJCWVsc2UKKwkJCWdvdG8gZGVjZXJyOworCisJCWlmICh0Mi0+dHlwZSAhPSBWX0FTTjFfSU5URUdFUikKKwkJCWdvdG8gZGVjZXJyOworCisJCXByaXZrZXkgPSB0Mi0+dmFsdWUuaW50ZWdlcjsKKwkJfQorCWVsc2UKKwkJeworCQljb25zdCB1bnNpZ25lZCBjaGFyICpxID0gcDsKKwkJaWYgKCEocHJpdmtleT1kMmlfQVNOMV9JTlRFR0VSKE5VTEwsICZwLCBwa2xlbikpKQorCQkJZ290byBkZWNlcnI7CisJCWlmIChwcml2a2V5LT50eXBlID09IFZfQVNOMV9ORUdfSU5URUdFUikKKwkJCXsKKwkJCXA4LT5icm9rZW4gPSBQS0NTOF9ORUdfUFJJVktFWTsKKwkJCUFTTjFfSU5URUdFUl9mcmVlKHByaXZrZXkpOworCQkJaWYgKCEocHJpdmtleT1kMmlfQVNOMV9VSU5URUdFUihOVUxMLCAmcSwgcGtsZW4pKSkKKwkJCQlnb3RvIGRlY2VycjsKKwkJCX0KKwkJaWYgKHB0eXBlICE9IFZfQVNOMV9TRVFVRU5DRSkKKwkJCWdvdG8gZGVjZXJyOworCQl9CisKKwlwc3RyID0gcHZhbDsJCisJcG0gPSBwc3RyLT5kYXRhOworCXBtbGVuID0gcHN0ci0+bGVuZ3RoOworCWlmICghKGRzYSA9IGQyaV9EU0FwYXJhbXMoTlVMTCwgJnBtLCBwbWxlbikpKQorCQlnb3RvIGRlY2VycjsKKwkvKiBXZSBoYXZlIHBhcmFtZXRlcnMgbm93IHNldCBwcml2YXRlIGtleSAqLworCWlmICghKGRzYS0+cHJpdl9rZXkgPSBBU04xX0lOVEVHRVJfdG9fQk4ocHJpdmtleSwgTlVMTCkpKQorCQl7CisJCURTQWVycihEU0FfRl9EU0FfUFJJVl9ERUNPREUsRFNBX1JfQk5fRVJST1IpOworCQlnb3RvIGRzYWVycjsKKwkJfQorCS8qIENhbGN1bGF0ZSBwdWJsaWMga2V5ICovCisJaWYgKCEoZHNhLT5wdWJfa2V5ID0gQk5fbmV3KCkpKQorCQl7CisJCURTQWVycihEU0FfRl9EU0FfUFJJVl9ERUNPREUsIEVSUl9SX01BTExPQ19GQUlMVVJFKTsKKwkJZ290byBkc2FlcnI7CisJCX0KKwlpZiAoIShjdHggPSBCTl9DVFhfbmV3KCkpKQorCQl7CisJCURTQWVycihEU0FfRl9EU0FfUFJJVl9ERUNPREUsIEVSUl9SX01BTExPQ19GQUlMVVJFKTsKKwkJZ290byBkc2FlcnI7CisJCX0KKwkJCQorCWlmICghQk5fbW9kX2V4cChkc2EtPnB1Yl9rZXksIGRzYS0+ZywgZHNhLT5wcml2X2tleSwgZHNhLT5wLCBjdHgpKQorCQl7CisJCURTQWVycihEU0FfRl9EU0FfUFJJVl9ERUNPREUsRFNBX1JfQk5fRVJST1IpOworCQlnb3RvIGRzYWVycjsKKwkJfQorCisJRVZQX1BLRVlfYXNzaWduX0RTQShwa2V5LCBkc2EpOworCUJOX0NUWF9mcmVlIChjdHgpOworCWlmKG5kc2EpCisJCXNrX0FTTjFfVFlQRV9wb3BfZnJlZShuZHNhLCBBU04xX1RZUEVfZnJlZSk7CisJZWxzZQorCQlBU04xX0lOVEVHRVJfZnJlZShwcml2a2V5KTsKKworCXJldHVybiAxOworCisJZGVjZXJyOgorCURTQWVycihEU0FfRl9EU0FfUFJJVl9ERUNPREUsIEVWUF9SX0RFQ09ERV9FUlJPUik7CisJZHNhZXJyOgorCUJOX0NUWF9mcmVlIChjdHgpOworCWlmIChwcml2a2V5KQorCQlBU04xX0lOVEVHRVJfZnJlZShwcml2a2V5KTsKKwlza19BU04xX1RZUEVfcG9wX2ZyZWUobmRzYSwgQVNOMV9UWVBFX2ZyZWUpOworCURTQV9mcmVlKGRzYSk7CisJcmV0dXJuIDA7CisJfQorCitzdGF0aWMgaW50IGRzYV9wcml2X2VuY29kZShQS0NTOF9QUklWX0tFWV9JTkZPICpwOCwgY29uc3QgRVZQX1BLRVkgKnBrZXkpCit7CisJQVNOMV9TVFJJTkcgKnBhcmFtcyA9IE5VTEw7CisJQVNOMV9JTlRFR0VSICpwcmtleSA9IE5VTEw7CisJdW5zaWduZWQgY2hhciAqZHAgPSBOVUxMOworCWludCBkcGxlbjsKKworCXBhcmFtcyA9IEFTTjFfU1RSSU5HX25ldygpOworCisJaWYgKCFwYXJhbXMpCisJCXsKKwkJRFNBZXJyKERTQV9GX0RTQV9QUklWX0VOQ09ERSxFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CisJCWdvdG8gZXJyOworCQl9CisKKwlwYXJhbXMtPmxlbmd0aCA9IGkyZF9EU0FwYXJhbXMocGtleS0+cGtleS5kc2EsICZwYXJhbXMtPmRhdGEpOworCWlmIChwYXJhbXMtPmxlbmd0aCA8PSAwKQorCQl7CisJCURTQWVycihEU0FfRl9EU0FfUFJJVl9FTkNPREUsRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOworCQlnb3RvIGVycjsKKwkJfQorCXBhcmFtcy0+dHlwZSA9IFZfQVNOMV9TRVFVRU5DRTsKKworCS8qIEdldCBwcml2YXRlIGtleSBpbnRvIGludGVnZXIgKi8KKwlwcmtleSA9IEJOX3RvX0FTTjFfSU5URUdFUihwa2V5LT5wa2V5LmRzYS0+cHJpdl9rZXksIE5VTEwpOworCisJaWYgKCFwcmtleSkKKwkJeworCQlEU0FlcnIoRFNBX0ZfRFNBX1BSSVZfRU5DT0RFLERTQV9SX0JOX0VSUk9SKTsKKwkJZ290byBlcnI7CisJCX0KKworCWRwbGVuID0gaTJkX0FTTjFfSU5URUdFUihwcmtleSwgJmRwKTsKKworCUFTTjFfSU5URUdFUl9mcmVlKHBya2V5KTsKKworCWlmICghUEtDUzhfcGtleV9zZXQwKHA4LCBPQkpfbmlkMm9iaihOSURfZHNhKSwgMCwKKwkJCQlWX0FTTjFfU0VRVUVOQ0UsIHBhcmFtcywgZHAsIGRwbGVuKSkKKwkJZ290byBlcnI7CisKKwlyZXR1cm4gMTsKKworZXJyOgorCWlmIChkcCAhPSBOVUxMKQorCQlPUEVOU1NMX2ZyZWUoZHApOworCWlmIChwYXJhbXMgIT0gTlVMTCkKKwkJQVNOMV9TVFJJTkdfZnJlZShwYXJhbXMpOworCWlmIChwcmtleSAhPSBOVUxMKQorCQlBU04xX0lOVEVHRVJfZnJlZShwcmtleSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW50X2RzYV9zaXplKGNvbnN0IEVWUF9QS0VZICpwa2V5KQorCXsKKwlyZXR1cm4oRFNBX3NpemUocGtleS0+cGtleS5kc2EpKTsKKwl9CisKK3N0YXRpYyBpbnQgZHNhX2JpdHMoY29uc3QgRVZQX1BLRVkgKnBrZXkpCisJeworCXJldHVybiBCTl9udW1fYml0cyhwa2V5LT5wa2V5LmRzYS0+cCk7CisJfQorCitzdGF0aWMgaW50IGRzYV9taXNzaW5nX3BhcmFtZXRlcnMoY29uc3QgRVZQX1BLRVkgKnBrZXkpCisJeworCURTQSAqZHNhOworCWRzYT1wa2V5LT5wa2V5LmRzYTsKKwlpZiAoKGRzYS0+cCA9PSBOVUxMKSB8fCAoZHNhLT5xID09IE5VTEwpIHx8IChkc2EtPmcgPT0gTlVMTCkpCisJCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKKwl9CisKK3N0YXRpYyBpbnQgZHNhX2NvcHlfcGFyYW1ldGVycyhFVlBfUEtFWSAqdG8sIGNvbnN0IEVWUF9QS0VZICpmcm9tKQorCXsKKwlCSUdOVU0gKmE7CisKKwlpZiAoKGE9Qk5fZHVwKGZyb20tPnBrZXkuZHNhLT5wKSkgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisJaWYgKHRvLT5wa2V5LmRzYS0+cCAhPSBOVUxMKQorCQlCTl9mcmVlKHRvLT5wa2V5LmRzYS0+cCk7CisJdG8tPnBrZXkuZHNhLT5wPWE7CisKKwlpZiAoKGE9Qk5fZHVwKGZyb20tPnBrZXkuZHNhLT5xKSkgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisJaWYgKHRvLT5wa2V5LmRzYS0+cSAhPSBOVUxMKQorCQlCTl9mcmVlKHRvLT5wa2V5LmRzYS0+cSk7CisJdG8tPnBrZXkuZHNhLT5xPWE7CisKKwlpZiAoKGE9Qk5fZHVwKGZyb20tPnBrZXkuZHNhLT5nKSkgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisJaWYgKHRvLT5wa2V5LmRzYS0+ZyAhPSBOVUxMKQorCQlCTl9mcmVlKHRvLT5wa2V5LmRzYS0+Zyk7CisJdG8tPnBrZXkuZHNhLT5nPWE7CisJcmV0dXJuIDE7CisJfQorCitzdGF0aWMgaW50IGRzYV9jbXBfcGFyYW1ldGVycyhjb25zdCBFVlBfUEtFWSAqYSwgY29uc3QgRVZQX1BLRVkgKmIpCisJeworCWlmICgJQk5fY21wKGEtPnBrZXkuZHNhLT5wLGItPnBrZXkuZHNhLT5wKSB8fAorCQlCTl9jbXAoYS0+cGtleS5kc2EtPnEsYi0+cGtleS5kc2EtPnEpIHx8CisJCUJOX2NtcChhLT5wa2V5LmRzYS0+ZyxiLT5wa2V5LmRzYS0+ZykpCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIDE7CisJfQorCitzdGF0aWMgaW50IGRzYV9wdWJfY21wKGNvbnN0IEVWUF9QS0VZICphLCBjb25zdCBFVlBfUEtFWSAqYikKKwl7CisJaWYgKEJOX2NtcChiLT5wa2V5LmRzYS0+cHViX2tleSxhLT5wa2V5LmRzYS0+cHViX2tleSkgIT0gMCkKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gMTsKKwl9CisKK3N0YXRpYyB2b2lkIGludF9kc2FfZnJlZShFVlBfUEtFWSAqcGtleSkKKwl7CisJRFNBX2ZyZWUocGtleS0+cGtleS5kc2EpOworCX0KKworc3RhdGljIHZvaWQgdXBkYXRlX2J1Zmxlbihjb25zdCBCSUdOVU0gKmIsIHNpemVfdCAqcGJ1ZmxlbikKKwl7CisJc2l6ZV90IGk7CisJaWYgKCFiKQorCQlyZXR1cm47CisJaWYgKCpwYnVmbGVuIDwgKGkgPSAoc2l6ZV90KUJOX251bV9ieXRlcyhiKSkpCisJCQkqcGJ1ZmxlbiA9IGk7CisJfQorCitzdGF0aWMgaW50IGRvX2RzYV9wcmludChCSU8gKmJwLCBjb25zdCBEU0EgKngsIGludCBvZmYsIGludCBwdHlwZSkKKwl7CisJdW5zaWduZWQgY2hhciAqbT1OVUxMOworCWludCByZXQ9MDsKKwlzaXplX3QgYnVmX2xlbj0wOworCWNvbnN0IGNoYXIgKmt0eXBlID0gTlVMTDsKKworCWNvbnN0IEJJR05VTSAqcHJpdl9rZXksICpwdWJfa2V5OworCisJaWYgKHB0eXBlID09IDIpCisJCXByaXZfa2V5ID0geC0+cHJpdl9rZXk7CisJZWxzZQorCQlwcml2X2tleSA9IE5VTEw7CisKKwlpZiAocHR5cGUgPiAwKQorCQlwdWJfa2V5ID0geC0+cHViX2tleTsKKwllbHNlCisJCXB1Yl9rZXkgPSBOVUxMOworCisJaWYgKHB0eXBlID09IDIpCisJCWt0eXBlID0gIlByaXZhdGUtS2V5IjsKKwllbHNlIGlmIChwdHlwZSA9PSAxKQorCQlrdHlwZSA9ICJQdWJsaWMtS2V5IjsKKwllbHNlCisJCWt0eXBlID0gIkRTQS1QYXJhbWV0ZXJzIjsKKworCXVwZGF0ZV9idWZsZW4oeC0+cCwgJmJ1Zl9sZW4pOworCXVwZGF0ZV9idWZsZW4oeC0+cSwgJmJ1Zl9sZW4pOworCXVwZGF0ZV9idWZsZW4oeC0+ZywgJmJ1Zl9sZW4pOworCXVwZGF0ZV9idWZsZW4ocHJpdl9rZXksICZidWZfbGVuKTsKKwl1cGRhdGVfYnVmbGVuKHB1Yl9rZXksICZidWZfbGVuKTsKKworCW09KHVuc2lnbmVkIGNoYXIgKilPUEVOU1NMX21hbGxvYyhidWZfbGVuKzEwKTsKKwlpZiAobSA9PSBOVUxMKQorCQl7CisJCURTQWVycihEU0FfRl9ET19EU0FfUFJJTlQsRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOworCQlnb3RvIGVycjsKKwkJfQorCisJaWYgKHByaXZfa2V5KQorCQl7CisJCWlmKCFCSU9faW5kZW50KGJwLG9mZiwxMjgpKQorCQkgICBnb3RvIGVycjsKKwkJaWYgKEJJT19wcmludGYoYnAsIiVzOiAoJWQgYml0KVxuIixrdHlwZSwgQk5fbnVtX2JpdHMoeC0+cCkpCisJCQk8PSAwKSBnb3RvIGVycjsKKwkJfQorCisJaWYgKCFBU04xX2JuX3ByaW50KGJwLCJwcml2OiIscHJpdl9rZXksbSxvZmYpKQorCQlnb3RvIGVycjsKKwlpZiAoIUFTTjFfYm5fcHJpbnQoYnAsInB1YjogIixwdWJfa2V5LG0sb2ZmKSkKKwkJZ290byBlcnI7CisJaWYgKCFBU04xX2JuX3ByaW50KGJwLCJQOiAgICIseC0+cCxtLG9mZikpIGdvdG8gZXJyOworCWlmICghQVNOMV9ibl9wcmludChicCwiUTogICAiLHgtPnEsbSxvZmYpKSBnb3RvIGVycjsKKwlpZiAoIUFTTjFfYm5fcHJpbnQoYnAsIkc6ICAgIix4LT5nLG0sb2ZmKSkgZ290byBlcnI7CisJcmV0PTE7CitlcnI6CisJaWYgKG0gIT0gTlVMTCkgT1BFTlNTTF9mcmVlKG0pOworCXJldHVybihyZXQpOworCX0KKworc3RhdGljIGludCBkc2FfcGFyYW1fZGVjb2RlKEVWUF9QS0VZICpwa2V5LAorCQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICoqcGRlciwgaW50IGRlcmxlbikKKwl7CisJRFNBICpkc2E7CisJaWYgKCEoZHNhID0gZDJpX0RTQXBhcmFtcyhOVUxMLCBwZGVyLCBkZXJsZW4pKSkKKwkJeworCQlEU0FlcnIoRFNBX0ZfRFNBX1BBUkFNX0RFQ09ERSwgRVJSX1JfRFNBX0xJQik7CisJCXJldHVybiAwOworCQl9CisJRVZQX1BLRVlfYXNzaWduX0RTQShwa2V5LCBkc2EpOworCXJldHVybiAxOworCX0KKworc3RhdGljIGludCBkc2FfcGFyYW1fZW5jb2RlKGNvbnN0IEVWUF9QS0VZICpwa2V5LCB1bnNpZ25lZCBjaGFyICoqcGRlcikKKwl7CisJcmV0dXJuIGkyZF9EU0FwYXJhbXMocGtleS0+cGtleS5kc2EsIHBkZXIpOworCX0KKworc3RhdGljIGludCBkc2FfcGFyYW1fcHJpbnQoQklPICpicCwgY29uc3QgRVZQX1BLRVkgKnBrZXksIGludCBpbmRlbnQsCisJCQkJCQkJQVNOMV9QQ1RYICpjdHgpCisJeworCXJldHVybiBkb19kc2FfcHJpbnQoYnAsIHBrZXktPnBrZXkuZHNhLCBpbmRlbnQsIDApOworCX0KKworc3RhdGljIGludCBkc2FfcHViX3ByaW50KEJJTyAqYnAsIGNvbnN0IEVWUF9QS0VZICpwa2V5LCBpbnQgaW5kZW50LAorCQkJCQkJCUFTTjFfUENUWCAqY3R4KQorCXsKKwlyZXR1cm4gZG9fZHNhX3ByaW50KGJwLCBwa2V5LT5wa2V5LmRzYSwgaW5kZW50LCAxKTsKKwl9CisKKworc3RhdGljIGludCBkc2FfcHJpdl9wcmludChCSU8gKmJwLCBjb25zdCBFVlBfUEtFWSAqcGtleSwgaW50IGluZGVudCwKKwkJCQkJCQlBU04xX1BDVFggKmN0eCkKKwl7CisJcmV0dXJuIGRvX2RzYV9wcmludChicCwgcGtleS0+cGtleS5kc2EsIGluZGVudCwgMik7CisJfQorCitzdGF0aWMgaW50IG9sZF9kc2FfcHJpdl9kZWNvZGUoRVZQX1BLRVkgKnBrZXksCisJCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKipwZGVyLCBpbnQgZGVybGVuKQorCXsKKwlEU0EgKmRzYTsKKwlpZiAoIShkc2EgPSBkMmlfRFNBUHJpdmF0ZUtleSAoTlVMTCwgcGRlciwgZGVybGVuKSkpCisJCXsKKwkJRFNBZXJyKERTQV9GX09MRF9EU0FfUFJJVl9ERUNPREUsIEVSUl9SX0RTQV9MSUIpOworCQlyZXR1cm4gMDsKKwkJfQorCUVWUF9QS0VZX2Fzc2lnbl9EU0EocGtleSwgZHNhKTsKKwlyZXR1cm4gMTsKKwl9CisKK3N0YXRpYyBpbnQgb2xkX2RzYV9wcml2X2VuY29kZShjb25zdCBFVlBfUEtFWSAqcGtleSwgdW5zaWduZWQgY2hhciAqKnBkZXIpCisJeworCXJldHVybiBpMmRfRFNBUHJpdmF0ZUtleShwa2V5LT5wa2V5LmRzYSwgcGRlcik7CisJfQorCitzdGF0aWMgaW50IGRzYV9wa2V5X2N0cmwoRVZQX1BLRVkgKnBrZXksIGludCBvcCwgbG9uZyBhcmcxLCB2b2lkICphcmcyKQorCXsKKwlzd2l0Y2ggKG9wKQorCQl7CisJCWNhc2UgQVNOMV9QS0VZX0NUUkxfUEtDUzdfU0lHTjoKKwkJaWYgKGFyZzEgPT0gMCkKKwkJCXsKKwkJCWludCBzbmlkLCBobmlkOworCQkJWDUwOV9BTEdPUiAqYWxnMSwgKmFsZzI7CisJCQlQS0NTN19TSUdORVJfSU5GT19nZXQwX2FsZ3MoYXJnMiwgTlVMTCwgJmFsZzEsICZhbGcyKTsKKwkJCWlmIChhbGcxID09IE5VTEwgfHwgYWxnMS0+YWxnb3JpdGhtID09IE5VTEwpCisJCQkJcmV0dXJuIC0xOworCQkJaG5pZCA9IE9CSl9vYmoybmlkKGFsZzEtPmFsZ29yaXRobSk7CisJCQlpZiAoaG5pZCA9PSBOSURfdW5kZWYpCisJCQkJcmV0dXJuIC0xOworCQkJaWYgKCFPQkpfZmluZF9zaWdpZF9ieV9hbGdzKCZzbmlkLCBobmlkLCBFVlBfUEtFWV9pZChwa2V5KSkpCisJCQkJcmV0dXJuIC0xOyAKKwkJCVg1MDlfQUxHT1Jfc2V0MChhbGcyLCBPQkpfbmlkMm9iaihzbmlkKSwgVl9BU04xX1VOREVGLCAwKTsKKwkJCX0KKwkJcmV0dXJuIDE7CisjaWZuZGVmIE9QRU5TU0xfTk9fQ01TCisJCWNhc2UgQVNOMV9QS0VZX0NUUkxfQ01TX1NJR046CisJCWlmIChhcmcxID09IDApCisJCQl7CisJCQlpbnQgc25pZCwgaG5pZDsKKwkJCVg1MDlfQUxHT1IgKmFsZzEsICphbGcyOworCQkJQ01TX1NpZ25lckluZm9fZ2V0MF9hbGdzKGFyZzIsIE5VTEwsIE5VTEwsICZhbGcxLCAmYWxnMik7CisJCQlpZiAoYWxnMSA9PSBOVUxMIHx8IGFsZzEtPmFsZ29yaXRobSA9PSBOVUxMKQorCQkJCXJldHVybiAtMTsKKwkJCWhuaWQgPSBPQkpfb2JqMm5pZChhbGcxLT5hbGdvcml0aG0pOworCQkJaWYgKGhuaWQgPT0gTklEX3VuZGVmKQorCQkJCXJldHVybiAtMTsKKwkJCWlmICghT0JKX2ZpbmRfc2lnaWRfYnlfYWxncygmc25pZCwgaG5pZCwgRVZQX1BLRVlfaWQocGtleSkpKQorCQkJCXJldHVybiAtMTsgCisJCQlYNTA5X0FMR09SX3NldDAoYWxnMiwgT0JKX25pZDJvYmooc25pZCksIFZfQVNOMV9VTkRFRiwgMCk7CisJCQl9CisJCXJldHVybiAxOworI2VuZGlmCisKKwkJY2FzZSBBU04xX1BLRVlfQ1RSTF9ERUZBVUxUX01EX05JRDoKKwkJKihpbnQgKilhcmcyID0gTklEX3NoYTE7CisJCXJldHVybiAyOworCisJCWRlZmF1bHQ6CisJCXJldHVybiAtMjsKKworCQl9CisKKwl9CisKKy8qIE5CIHRoZXNlIGFyZSBzb3J0ZWQgaW4gcGtleV9pZCBvcmRlciwgbG93ZXN0IGZpcnN0ICovCisKK2NvbnN0IEVWUF9QS0VZX0FTTjFfTUVUSE9EIGRzYV9hc24xX21ldGhzW10gPSAKKwl7CisKKwkJeworCQlFVlBfUEtFWV9EU0EyLAorCQlFVlBfUEtFWV9EU0EsCisJCUFTTjFfUEtFWV9BTElBUworCQl9LAorCisJCXsKKwkJRVZQX1BLRVlfRFNBMSwKKwkJRVZQX1BLRVlfRFNBLAorCQlBU04xX1BLRVlfQUxJQVMKKwkJfSwKKworCQl7CisJCUVWUF9QS0VZX0RTQTQsCisJCUVWUF9QS0VZX0RTQSwKKwkJQVNOMV9QS0VZX0FMSUFTCisJCX0sCisKKwkJeworCQlFVlBfUEtFWV9EU0EzLAorCQlFVlBfUEtFWV9EU0EsCisJCUFTTjFfUEtFWV9BTElBUworCQl9LAorCisJCXsKKwkJRVZQX1BLRVlfRFNBLAorCQlFVlBfUEtFWV9EU0EsCisJCTAsCisKKwkJIkRTQSIsCisJCSJPcGVuU1NMIERTQSBtZXRob2QiLAorCisJCWRzYV9wdWJfZGVjb2RlLAorCQlkc2FfcHViX2VuY29kZSwKKwkJZHNhX3B1Yl9jbXAsCisJCWRzYV9wdWJfcHJpbnQsCisKKwkJZHNhX3ByaXZfZGVjb2RlLAorCQlkc2FfcHJpdl9lbmNvZGUsCisJCWRzYV9wcml2X3ByaW50LAorCisJCWludF9kc2Ffc2l6ZSwKKwkJZHNhX2JpdHMsCisKKwkJZHNhX3BhcmFtX2RlY29kZSwKKwkJZHNhX3BhcmFtX2VuY29kZSwKKwkJZHNhX21pc3NpbmdfcGFyYW1ldGVycywKKwkJZHNhX2NvcHlfcGFyYW1ldGVycywKKwkJZHNhX2NtcF9wYXJhbWV0ZXJzLAorCQlkc2FfcGFyYW1fcHJpbnQsCisKKwkJaW50X2RzYV9mcmVlLAorCQlkc2FfcGtleV9jdHJsLAorCQlvbGRfZHNhX3ByaXZfZGVjb2RlLAorCQlvbGRfZHNhX3ByaXZfZW5jb2RlCisJCX0KKwl9OworCmRpZmYgLS1naXQgYS9jcnlwdG8vZHNhL2RzYV9hc24xLmMgYi9jcnlwdG8vZHNhL2RzYV9hc24xLmMKaW5kZXggYmM3ZDdhMC4uYzM3NDYwYiAxMDA2NDQKLS0tIGEvY3J5cHRvL2RzYS9kc2FfYXNuMS5jCisrKyBiL2NyeXB0by9kc2EvZHNhX2FzbjEuYwpAQCAtMyw3ICszLDcgQEAKICAqIHByb2plY3QgMjAwMC4KICAqLwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoYykgMjAwMCBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwMC0yMDA1IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02MSwyNSArNjEsMjMgQEAKICNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgogI2luY2x1ZGUgPG9wZW5zc2wvYXNuMS5oPgogI2luY2x1ZGUgPG9wZW5zc2wvYXNuMXQuaD4KLSNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0jaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0jaWZkZWYgT1BFTlNTTF9GSVBTCi0jaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0jZW5kaWYKLQogCiAvKiBPdmVycmlkZSB0aGUgZGVmYXVsdCBuZXcgbWV0aG9kcyAqLwotc3RhdGljIGludCBzaWdfY2IoaW50IG9wZXJhdGlvbiwgQVNOMV9WQUxVRSAqKnB2YWwsIGNvbnN0IEFTTjFfSVRFTSAqaXQpCitzdGF0aWMgaW50IHNpZ19jYihpbnQgb3BlcmF0aW9uLCBBU04xX1ZBTFVFICoqcHZhbCwgY29uc3QgQVNOMV9JVEVNICppdCwKKwkJCQkJCQkJdm9pZCAqZXhhcmcpCiB7CiAJaWYob3BlcmF0aW9uID09IEFTTjFfT1BfTkVXX1BSRSkgewogCQlEU0FfU0lHICpzaWc7CiAJCXNpZyA9IE9QRU5TU0xfbWFsbG9jKHNpemVvZihEU0FfU0lHKSk7CisJCWlmICghc2lnKQorCQkJeworCQkJRFNBZXJyKERTQV9GX1NJR19DQiwgRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOworCQkJcmV0dXJuIDA7CisJCQl9CiAJCXNpZy0+ciA9IE5VTEw7CiAJCXNpZy0+cyA9IE5VTEw7CiAJCSpwdmFsID0gKEFTTjFfVkFMVUUgKilzaWc7Ci0JCWlmKHNpZykgcmV0dXJuIDI7Ci0JCURTQWVycihEU0FfRl9TSUdfQ0IsIEVSUl9SX01BTExPQ19GQUlMVVJFKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiAyOwogCX0KIAlyZXR1cm4gMTsKIH0KQEAgLTg5LDEwICs4NywxMSBAQAogCUFTTjFfU0lNUExFKERTQV9TSUcsIHMsIENCSUdOVU0pCiB9IEFTTjFfU0VRVUVOQ0VfRU5EX2NiKERTQV9TSUcsIERTQV9TSUcpCiAKLUlNUExFTUVOVF9BU04xX0VOQ09ERV9GVU5DVElPTlNfY29uc3RfZm5hbWUoRFNBX1NJRyxEU0FfU0lHLERTQV9TSUcpCitJTVBMRU1FTlRfQVNOMV9GVU5DVElPTlNfY29uc3QoRFNBX1NJRykKIAogLyogT3ZlcnJpZGUgdGhlIGRlZmF1bHQgZnJlZSBhbmQgbmV3IG1ldGhvZHMgKi8KLXN0YXRpYyBpbnQgZHNhX2NiKGludCBvcGVyYXRpb24sIEFTTjFfVkFMVUUgKipwdmFsLCBjb25zdCBBU04xX0lURU0gKml0KQorc3RhdGljIGludCBkc2FfY2IoaW50IG9wZXJhdGlvbiwgQVNOMV9WQUxVRSAqKnB2YWwsIGNvbnN0IEFTTjFfSVRFTSAqaXQsCisJCQkJCQkJdm9pZCAqZXhhcmcpCiB7CiAJaWYob3BlcmF0aW9uID09IEFTTjFfT1BfTkVXX1BSRSkgewogCQkqcHZhbCA9IChBU04xX1ZBTFVFICopRFNBX25ldygpOwpAQCAtMTQ1LDc2ICsxNDQsNyBAQAogCiBJTVBMRU1FTlRfQVNOMV9FTkNPREVfRlVOQ1RJT05TX2NvbnN0X2ZuYW1lKERTQSwgRFNBUHVibGljS2V5LCBEU0FQdWJsaWNLZXkpCiAKLWludCBEU0Ffc2lnbihpbnQgdHlwZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGdzdCwgaW50IGRsZW4sIHVuc2lnbmVkIGNoYXIgKnNpZywKLQkgICAgIHVuc2lnbmVkIGludCAqc2lnbGVuLCBEU0EgKmRzYSkKK0RTQSAqRFNBcGFyYW1zX2R1cChEU0EgKmRzYSkKIAl7Ci0JRFNBX1NJRyAqczsKLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLQlpZihGSVBTX21vZGUoKSAmJiAhKGRzYS0+ZmxhZ3MgJiBEU0FfRkxBR19OT05fRklQU19BTExPVykpCi0JCXsKLQkJRFNBZXJyKERTQV9GX0RTQV9TSUdOLCBEU0FfUl9PUEVSQVRJT05fTk9UX0FMTE9XRURfSU5fRklQU19NT0RFKTsKLQkJcmV0dXJuIDA7Ci0JCX0KLSNlbmRpZgotCVJBTkRfc2VlZChkZ3N0LCBkbGVuKTsKLQlzPURTQV9kb19zaWduKGRnc3QsZGxlbixkc2EpOwotCWlmIChzID09IE5VTEwpCi0JCXsKLQkJKnNpZ2xlbj0wOwotCQlyZXR1cm4oMCk7Ci0JCX0KLQkqc2lnbGVuPWkyZF9EU0FfU0lHKHMsJnNpZyk7Ci0JRFNBX1NJR19mcmVlKHMpOwotCXJldHVybigxKTsKKwlyZXR1cm4gQVNOMV9pdGVtX2R1cChBU04xX0lURU1fcnB0cihEU0FwYXJhbXMpLCBkc2EpOwogCX0KLQotaW50IERTQV9zaXplKGNvbnN0IERTQSAqcikKLQl7Ci0JaW50IHJldCxpOwotCUFTTjFfSU5URUdFUiBiczsKLQl1bnNpZ25lZCBjaGFyIGJ1Zls0XTsJLyogNCBieXRlcyBsb29rcyByZWFsbHkgc21hbGwuCi0JCQkJICAgSG93ZXZlciwgaTJkX0FTTjFfSU5URUdFUigpIHdpbGwgbm90IGxvb2sKLQkJCQkgICBiZXlvbmQgdGhlIGZpcnN0IGJ5dGUsIGFzIGxvbmcgYXMgdGhlIHNlY29uZAotCQkJCSAgIHBhcmFtZXRlciBpcyBOVUxMLiAqLwotCi0JaT1CTl9udW1fYml0cyhyLT5xKTsKLQlicy5sZW5ndGg9KGkrNykvODsKLQlicy5kYXRhPWJ1ZjsKLQlicy50eXBlPVZfQVNOMV9JTlRFR0VSOwotCS8qIElmIHRoZSB0b3AgYml0IGlzIHNldCB0aGUgYXNuMSBlbmNvZGluZyBpcyAxIGxhcmdlci4gKi8KLQlidWZbMF09MHhmZjsJCi0KLQlpPWkyZF9BU04xX0lOVEVHRVIoJmJzLE5VTEwpOwotCWkrPWk7IC8qIHIgYW5kIHMgKi8KLQlyZXQ9QVNOMV9vYmplY3Rfc2l6ZSgxLGksVl9BU04xX1NFUVVFTkNFKTsKLQlyZXR1cm4ocmV0KTsKLQl9Ci0KLS8qIGRhdGEgaGFzIGFscmVhZHkgYmVlbiBoYXNoZWQgKHByb2JhYmx5IHdpdGggU0hBIG9yIFNIQS0xKS4gKi8KLS8qIHJldHVybnMKLSAqICAgICAgMTogY29ycmVjdCBzaWduYXR1cmUKLSAqICAgICAgMDogaW5jb3JyZWN0IHNpZ25hdHVyZQotICogICAgIC0xOiBlcnJvcgotICovCi1pbnQgRFNBX3ZlcmlmeShpbnQgdHlwZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGdzdCwgaW50IGRnc3RfbGVuLAotCSAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2lnYnVmLCBpbnQgc2lnbGVuLCBEU0EgKmRzYSkKLQl7Ci0JRFNBX1NJRyAqczsKLQlpbnQgcmV0PS0xOwotI2lmZGVmIE9QRU5TU0xfRklQUwotCWlmKEZJUFNfbW9kZSgpICYmICEoZHNhLT5mbGFncyAmIERTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSkKLQkJewotCQlEU0FlcnIoRFNBX0ZfRFNBX1ZFUklGWSwgRFNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERSk7Ci0JCXJldHVybiAwOwotCQl9Ci0jZW5kaWYKLQotCXMgPSBEU0FfU0lHX25ldygpOwotCWlmIChzID09IE5VTEwpIHJldHVybihyZXQpOwotCWlmIChkMmlfRFNBX1NJRygmcywmc2lnYnVmLHNpZ2xlbikgPT0gTlVMTCkgZ290byBlcnI7Ci0JcmV0PURTQV9kb192ZXJpZnkoZGdzdCxkZ3N0X2xlbixzLGRzYSk7Ci1lcnI6Ci0JRFNBX1NJR19mcmVlKHMpOwotCXJldHVybihyZXQpOwotCX0KLQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2RzYS9kc2FfZXJyLmMgYi9jcnlwdG8vZHNhL2RzYV9lcnIuYwppbmRleCA4NzI4MzlhLi5iYmE5ODRlIDEwMDY0NAotLS0gYS9jcnlwdG8vZHNhL2RzYV9lcnIuYworKysgYi9jcnlwdG8vZHNhL2RzYV9lcnIuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIGNyeXB0by9kc2EvZHNhX2Vyci5jICovCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDcgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNiBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzEsMjMgKzcxLDI2IEBACiBzdGF0aWMgRVJSX1NUUklOR19EQVRBIERTQV9zdHJfZnVuY3RzW109CiAJewoge0VSUl9GVU5DKERTQV9GX0QySV9EU0FfU0lHKSwJImQyaV9EU0FfU0lHIn0sCit7RVJSX0ZVTkMoRFNBX0ZfRE9fRFNBX1BSSU5UKSwJIkRPX0RTQV9QUklOVCJ9LAoge0VSUl9GVU5DKERTQV9GX0RTQVBBUkFNU19QUklOVCksCSJEU0FwYXJhbXNfcHJpbnQifSwKIHtFUlJfRlVOQyhEU0FfRl9EU0FQQVJBTVNfUFJJTlRfRlApLAkiRFNBcGFyYW1zX3ByaW50X2ZwIn0sCi17RVJSX0ZVTkMoRFNBX0ZfRFNBX0JVSUxUSU5fS0VZR0VOKSwJIkRTQV9CVUlMVElOX0tFWUdFTiJ9LAote0VSUl9GVU5DKERTQV9GX0RTQV9CVUlMVElOX1BBUkFNR0VOKSwJIkRTQV9CVUlMVElOX1BBUkFNR0VOIn0sCiB7RVJSX0ZVTkMoRFNBX0ZfRFNBX0RPX1NJR04pLAkiRFNBX2RvX3NpZ24ifSwKIHtFUlJfRlVOQyhEU0FfRl9EU0FfRE9fVkVSSUZZKSwJIkRTQV9kb192ZXJpZnkifSwKLXtFUlJfRlVOQyhEU0FfRl9EU0FfR0VORVJBVEVfUEFSQU1FVEVSUyksCSJEU0FfZ2VuZXJhdGVfcGFyYW1ldGVycyJ9LAoge0VSUl9GVU5DKERTQV9GX0RTQV9ORVdfTUVUSE9EKSwJIkRTQV9uZXdfbWV0aG9kIn0sCi17RVJSX0ZVTkMoRFNBX0ZfRFNBX1BSSU5UKSwJIkRTQV9wcmludCJ9LAore0VSUl9GVU5DKERTQV9GX0RTQV9QQVJBTV9ERUNPREUpLAkiRFNBX1BBUkFNX0RFQ09ERSJ9LAoge0VSUl9GVU5DKERTQV9GX0RTQV9QUklOVF9GUCksCSJEU0FfcHJpbnRfZnAifSwKLXtFUlJfRlVOQyhEU0FfRl9EU0FfU0VUX0RFRkFVTFRfTUVUSE9EKSwJIkRTQV9zZXRfZGVmYXVsdF9tZXRob2QifSwKLXtFUlJfRlVOQyhEU0FfRl9EU0FfU0VUX01FVEhPRCksCSJEU0Ffc2V0X21ldGhvZCJ9LAore0VSUl9GVU5DKERTQV9GX0RTQV9QUklWX0RFQ09ERSksCSJEU0FfUFJJVl9ERUNPREUifSwKK3tFUlJfRlVOQyhEU0FfRl9EU0FfUFJJVl9FTkNPREUpLAkiRFNBX1BSSVZfRU5DT0RFIn0sCit7RVJSX0ZVTkMoRFNBX0ZfRFNBX1BVQl9ERUNPREUpLAkiRFNBX1BVQl9ERUNPREUifSwKK3tFUlJfRlVOQyhEU0FfRl9EU0FfUFVCX0VOQ09ERSksCSJEU0FfUFVCX0VOQ09ERSJ9LAoge0VSUl9GVU5DKERTQV9GX0RTQV9TSUdOKSwJIkRTQV9zaWduIn0sCiB7RVJSX0ZVTkMoRFNBX0ZfRFNBX1NJR05fU0VUVVApLAkiRFNBX3NpZ25fc2V0dXAifSwKIHtFUlJfRlVOQyhEU0FfRl9EU0FfU0lHX05FVyksCSJEU0FfU0lHX25ldyJ9LAoge0VSUl9GVU5DKERTQV9GX0RTQV9WRVJJRlkpLAkiRFNBX3ZlcmlmeSJ9LAoge0VSUl9GVU5DKERTQV9GX0kyRF9EU0FfU0lHKSwJImkyZF9EU0FfU0lHIn0sCit7RVJSX0ZVTkMoRFNBX0ZfT0xEX0RTQV9QUklWX0RFQ09ERSksCSJPTERfRFNBX1BSSVZfREVDT0RFIn0sCit7RVJSX0ZVTkMoRFNBX0ZfUEtFWV9EU0FfQ1RSTCksCSJQS0VZX0RTQV9DVFJMIn0sCit7RVJSX0ZVTkMoRFNBX0ZfUEtFWV9EU0FfS0VZR0VOKSwJIlBLRVlfRFNBX0tFWUdFTiJ9LAoge0VSUl9GVU5DKERTQV9GX1NJR19DQiksCSJTSUdfQ0IifSwKIHswLE5VTEx9CiAJfTsKQEAgLTk1LDEyICs5OCwxNSBAQAogc3RhdGljIEVSUl9TVFJJTkdfREFUQSBEU0Ffc3RyX3JlYXNvbnNbXT0KIAl7CiB7RVJSX1JFQVNPTihEU0FfUl9CQURfUV9WQUxVRSkgICAgICAgICAgICwiYmFkIHEgdmFsdWUifSwKK3tFUlJfUkVBU09OKERTQV9SX0JOX0RFQ09ERV9FUlJPUikgICAgICAgLCJibiBkZWNvZGUgZXJyb3IifSwKK3tFUlJfUkVBU09OKERTQV9SX0JOX0VSUk9SKSAgICAgICAgICAgICAgLCJibiBlcnJvciJ9LAoge0VSUl9SRUFTT04oRFNBX1JfREFUQV9UT09fTEFSR0VfRk9SX0tFWV9TSVpFKSwiZGF0YSB0b28gbGFyZ2UgZm9yIGtleSBzaXplIn0sCi17RVJSX1JFQVNPTihEU0FfUl9LRVlfU0laRV9UT09fU01BTEwpICAgICwia2V5IHNpemUgdG9vIHNtYWxsIn0sCit7RVJSX1JFQVNPTihEU0FfUl9ERUNPREVfRVJST1IpICAgICAgICAgICwiZGVjb2RlIGVycm9yIn0sCit7RVJSX1JFQVNPTihEU0FfUl9JTlZBTElEX0RJR0VTVF9UWVBFKSAgICwiaW52YWxpZCBkaWdlc3QgdHlwZSJ9LAoge0VSUl9SRUFTT04oRFNBX1JfTUlTU0lOR19QQVJBTUVURVJTKSAgICAsIm1pc3NpbmcgcGFyYW1ldGVycyJ9LAoge0VSUl9SRUFTT04oRFNBX1JfTU9EVUxVU19UT09fTEFSR0UpICAgICAsIm1vZHVsdXMgdG9vIGxhcmdlIn0sCi17RVJSX1JFQVNPTihEU0FfUl9OT05fRklQU19NRVRIT0QpICAgICAgICwibm9uIGZpcHMgbWV0aG9kIn0sCi17RVJSX1JFQVNPTihEU0FfUl9PUEVSQVRJT05fTk9UX0FMTE9XRURfSU5fRklQU19NT0RFKSwib3BlcmF0aW9uIG5vdCBhbGxvd2VkIGluIGZpcHMgbW9kZSJ9LAore0VSUl9SRUFTT04oRFNBX1JfTk9fUEFSQU1FVEVSU19TRVQpICAgICAsIm5vIHBhcmFtZXRlcnMgc2V0In0sCit7RVJSX1JFQVNPTihEU0FfUl9QQVJBTUVURVJfRU5DT0RJTkdfRVJST1IpLCJwYXJhbWV0ZXIgZW5jb2RpbmcgZXJyb3IifSwKIHswLE5VTEx9CiAJfTsKIApkaWZmIC0tZ2l0IGEvY3J5cHRvL2RzYS9kc2FfZ2VuLmMgYi9jcnlwdG8vZHNhL2RzYV9nZW4uYwppbmRleCA2ZjE3MjhlLi4wZmNkMjVmIDEwMDY0NAotLS0gYS9jcnlwdG8vZHNhL2RzYV9nZW4uYworKysgYi9jcnlwdG8vZHNhL2RzYV9nZW4uYwpAQCAtNzQsNjkgKzc0LDg4IEBACiAjaWZuZGVmIE9QRU5TU0xfTk9fU0hBCiAKICNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHRpbWUuaD4KICNpbmNsdWRlICJjcnlwdGxpYi5oIgogI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KLQotI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLQotc3RhdGljIGludCBkc2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwgaW50IGJpdHMsCi0JCXVuc2lnbmVkIGNoYXIgKnNlZWRfaW4sIGludCBzZWVkX2xlbiwKLQkJaW50ICpjb3VudGVyX3JldCwgdW5zaWduZWQgbG9uZyAqaF9yZXQsIEJOX0dFTkNCICpjYik7CisjaW5jbHVkZSAiZHNhX2xvY2wuaCIKIAogaW50IERTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KERTQSAqcmV0LCBpbnQgYml0cywKLQkJdW5zaWduZWQgY2hhciAqc2VlZF9pbiwgaW50IHNlZWRfbGVuLAorCQljb25zdCB1bnNpZ25lZCBjaGFyICpzZWVkX2luLCBpbnQgc2VlZF9sZW4sCiAJCWludCAqY291bnRlcl9yZXQsIHVuc2lnbmVkIGxvbmcgKmhfcmV0LCBCTl9HRU5DQiAqY2IpCiAJewogCWlmKHJldC0+bWV0aC0+ZHNhX3BhcmFtZ2VuKQogCQlyZXR1cm4gcmV0LT5tZXRoLT5kc2FfcGFyYW1nZW4ocmV0LCBiaXRzLCBzZWVkX2luLCBzZWVkX2xlbiwKIAkJCQljb3VudGVyX3JldCwgaF9yZXQsIGNiKTsKLQlyZXR1cm4gZHNhX2J1aWx0aW5fcGFyYW1nZW4ocmV0LCBiaXRzLCBzZWVkX2luLCBzZWVkX2xlbiwKLQkJCWNvdW50ZXJfcmV0LCBoX3JldCwgY2IpOworCWVsc2UKKwkJeworCQljb25zdCBFVlBfTUQgKmV2cG1kOworCQlzaXplX3QgcWJpdHMgPSBiaXRzID49IDIwNDggPyAyNTYgOiAxNjA7CisKKwkJaWYgKGJpdHMgPj0gMjA0OCkKKwkJCXsKKwkJCXFiaXRzID0gMjU2OworCQkJZXZwbWQgPSBFVlBfc2hhMjU2KCk7CisJCQl9CisJCWVsc2UKKwkJCXsKKwkJCXFiaXRzID0gMTYwOworCQkJZXZwbWQgPSBFVlBfc2hhMSgpOworCQkJfQorCisJCXJldHVybiBkc2FfYnVpbHRpbl9wYXJhbWdlbihyZXQsIGJpdHMsIHFiaXRzLCBldnBtZCwKKwkJCQlzZWVkX2luLCBzZWVkX2xlbiwgY291bnRlcl9yZXQsIGhfcmV0LCBjYik7CisJCX0KIAl9CiAKLXN0YXRpYyBpbnQgZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQsIGludCBiaXRzLAotCQl1bnNpZ25lZCBjaGFyICpzZWVkX2luLCBpbnQgc2VlZF9sZW4sCi0JCWludCAqY291bnRlcl9yZXQsIHVuc2lnbmVkIGxvbmcgKmhfcmV0LCBCTl9HRU5DQiAqY2IpCitpbnQgZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVfdCBiaXRzLCBzaXplX3QgcWJpdHMsCisJY29uc3QgRVZQX01EICpldnBtZCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2VlZF9pbiwgc2l6ZV90IHNlZWRfbGVuLAorCWludCAqY291bnRlcl9yZXQsIHVuc2lnbmVkIGxvbmcgKmhfcmV0LCBCTl9HRU5DQiAqY2IpCiAJewogCWludCBvaz0wOwotCXVuc2lnbmVkIGNoYXIgc2VlZFtTSEFfRElHRVNUX0xFTkdUSF07Ci0JdW5zaWduZWQgY2hhciBtZFtTSEFfRElHRVNUX0xFTkdUSF07Ci0JdW5zaWduZWQgY2hhciBidWZbU0hBX0RJR0VTVF9MRU5HVEhdLGJ1ZjJbU0hBX0RJR0VTVF9MRU5HVEhdOworCXVuc2lnbmVkIGNoYXIgc2VlZFtTSEEyNTZfRElHRVNUX0xFTkdUSF07CisJdW5zaWduZWQgY2hhciBtZFtTSEEyNTZfRElHRVNUX0xFTkdUSF07CisJdW5zaWduZWQgY2hhciBidWZbU0hBMjU2X0RJR0VTVF9MRU5HVEhdLGJ1ZjJbU0hBMjU2X0RJR0VTVF9MRU5HVEhdOwogCUJJR05VTSAqcjAsKlcsKlgsKmMsKnRlc3Q7CiAJQklHTlVNICpnPU5VTEwsKnE9TlVMTCwqcD1OVUxMOwogCUJOX01PTlRfQ1RYICptb250PU5VTEw7Ci0JaW50IGssbj0wLGksYixtPTA7CisJaW50IGksIGssbj0wLGIsbT0wLCBxc2l6ZSA9IHFiaXRzID4+IDM7CiAJaW50IGNvdW50ZXI9MDsKIAlpbnQgcj0wOwogCUJOX0NUWCAqY3R4PU5VTEw7CiAJdW5zaWduZWQgaW50IGg9MjsKIAotCWlmIChiaXRzIDwgNTEyKSBiaXRzPTUxMjsKLQliaXRzPShiaXRzKzYzKS82NCo2NDsKKwlpZiAocXNpemUgIT0gU0hBX0RJR0VTVF9MRU5HVEggJiYgcXNpemUgIT0gU0hBMjI0X0RJR0VTVF9MRU5HVEggJiYKKwkgICAgcXNpemUgIT0gU0hBMjU2X0RJR0VTVF9MRU5HVEgpCisJCS8qIGludmFsaWQgcSBzaXplICovCisJCXJldHVybiAwOworCisJaWYgKGV2cG1kID09IE5VTEwpCisJCS8qIHVzZSBTSEExIGFzIGRlZmF1bHQgKi8KKwkJZXZwbWQgPSBFVlBfc2hhMSgpOworCisJaWYgKGJpdHMgPCA1MTIpCisJCWJpdHMgPSA1MTI7CisKKwliaXRzID0gKGJpdHMrNjMpLzY0KjY0OwogCiAJLyogTkI6IHNlZWRfbGVuID09IDAgaXMgc3BlY2lhbCBjYXNlOiBjb3B5IGdlbmVyYXRlZCBzZWVkIHRvCiAgCSAqIHNlZWRfaW4gaWYgaXQgaXMgbm90IE5VTEwuCiAgCSAqLwotCWlmIChzZWVkX2xlbiAmJiAoc2VlZF9sZW4gPCAyMCkpCi0JCXNlZWRfaW4gPSBOVUxMOyAvKiBzZWVkIGJ1ZmZlciB0b28gc21hbGwgLS0gaWdub3JlICovCi0JaWYgKHNlZWRfbGVuID4gMjApIAotCQlzZWVkX2xlbiA9IDIwOyAvKiBBcHAuIDIuMiBvZiBGSVBTIFBVQiAxODYgYWxsb3dzIGxhcmdlciBTRUVELAotCQkgICAgICAgICAgICAgICAgKiBidXQgb3VyIGludGVybmFsIGJ1ZmZlcnMgYXJlIHJlc3RyaWN0ZWQgdG8gMTYwIGJpdHMqLwotCWlmICgoc2VlZF9pbiAhPSBOVUxMKSAmJiAoc2VlZF9sZW4gPT0gMjApKQotCQl7Ci0JCW1lbWNweShzZWVkLHNlZWRfaW4sc2VlZF9sZW4pOwotCQkvKiBzZXQgc2VlZF9pbiB0byBOVUxMIHRvIGF2b2lkIGl0IGJlaW5nIGNvcGllZCBiYWNrICovCi0JCXNlZWRfaW4gPSBOVUxMOwotCQl9CisJaWYgKHNlZWRfbGVuICYmIChzZWVkX2xlbiA8IChzaXplX3QpcXNpemUpKQorCQlzZWVkX2luID0gTlVMTDsJCS8qIHNlZWQgYnVmZmVyIHRvbyBzbWFsbCAtLSBpZ25vcmUgKi8KKwlpZiAoc2VlZF9sZW4gPiAoc2l6ZV90KXFzaXplKSAKKwkJc2VlZF9sZW4gPSBxc2l6ZTsJLyogQXBwLiAyLjIgb2YgRklQUyBQVUIgMTg2IGFsbG93cyBsYXJnZXIgU0VFRCwKKwkJCQkJICogYnV0IG91ciBpbnRlcm5hbCBidWZmZXJzIGFyZSByZXN0cmljdGVkIHRvIDE2MCBiaXRzKi8KKwlpZiAoc2VlZF9pbiAhPSBOVUxMKQorCQltZW1jcHkoc2VlZCwgc2VlZF9pbiwgc2VlZF9sZW4pOwogCi0JaWYgKChjdHg9Qk5fQ1RYX25ldygpKSA9PSBOVUxMKSBnb3RvIGVycjsKKwlpZiAoKGN0eD1CTl9DVFhfbmV3KCkpID09IE5VTEwpCisJCWdvdG8gZXJyOwogCi0JaWYgKChtb250PUJOX01PTlRfQ1RYX25ldygpKSA9PSBOVUxMKSBnb3RvIGVycjsKKwlpZiAoKG1vbnQ9Qk5fTU9OVF9DVFhfbmV3KCkpID09IE5VTEwpCisJCWdvdG8gZXJyOwogCiAJQk5fQ1RYX3N0YXJ0KGN0eCk7CiAJcjAgPSBCTl9DVFhfZ2V0KGN0eCk7CkBAIC0xNjMsNyArMTgyLDcgQEAKIAogCQkJaWYgKCFzZWVkX2xlbikKIAkJCQl7Ci0JCQkJUkFORF9wc2V1ZG9fYnl0ZXMoc2VlZCxTSEFfRElHRVNUX0xFTkdUSCk7CisJCQkJUkFORF9wc2V1ZG9fYnl0ZXMoc2VlZCwgcXNpemUpOwogCQkJCXNlZWRfaXNfcmFuZG9tID0gMTsKIAkJCQl9CiAJCQllbHNlCkBAIC0xNzEsMjUgKzE5MCwyNyBAQAogCQkJCXNlZWRfaXNfcmFuZG9tID0gMDsKIAkJCQlzZWVkX2xlbj0wOyAvKiB1c2UgcmFuZG9tIHNlZWQgaWYgJ3NlZWRfaW4nIHR1cm5zIG91dCB0byBiZSBiYWQqLwogCQkJCX0KLQkJCW1lbWNweShidWYsc2VlZCxTSEFfRElHRVNUX0xFTkdUSCk7Ci0JCQltZW1jcHkoYnVmMixzZWVkLFNIQV9ESUdFU1RfTEVOR1RIKTsKKwkJCW1lbWNweShidWYgLCBzZWVkLCBxc2l6ZSk7CisJCQltZW1jcHkoYnVmMiwgc2VlZCwgcXNpemUpOwogCQkJLyogcHJlY29tcHV0ZSAiU0VFRCArIDEiIGZvciBzdGVwIDc6ICovCi0JCQlmb3IgKGk9U0hBX0RJR0VTVF9MRU5HVEgtMTsgaSA+PSAwOyBpLS0pCisJCQlmb3IgKGkgPSBxc2l6ZS0xOyBpID49IDA7IGktLSkKIAkJCQl7CiAJCQkJYnVmW2ldKys7Ci0JCQkJaWYgKGJ1ZltpXSAhPSAwKSBicmVhazsKKwkJCQlpZiAoYnVmW2ldICE9IDApCisJCQkJCWJyZWFrOwogCQkJCX0KIAogCQkJLyogc3RlcCAyICovCi0JCQlFVlBfRGlnZXN0KHNlZWQsU0hBX0RJR0VTVF9MRU5HVEgsbWQsTlVMTCxIQVNILCBOVUxMKTsKLQkJCUVWUF9EaWdlc3QoYnVmLFNIQV9ESUdFU1RfTEVOR1RILGJ1ZjIsTlVMTCxIQVNILCBOVUxMKTsKLQkJCWZvciAoaT0wOyBpPFNIQV9ESUdFU1RfTEVOR1RIOyBpKyspCisJCQlFVlBfRGlnZXN0KHNlZWQsIHFzaXplLCBtZCwgICBOVUxMLCBldnBtZCwgTlVMTCk7CisJCQlFVlBfRGlnZXN0KGJ1ZiwgIHFzaXplLCBidWYyLCBOVUxMLCBldnBtZCwgTlVMTCk7CisJCQlmb3IgKGkgPSAwOyBpIDwgcXNpemU7IGkrKykKIAkJCQltZFtpXV49YnVmMltpXTsKIAogCQkJLyogc3RlcCAzICovCi0JCQltZFswXXw9MHg4MDsKLQkJCW1kW1NIQV9ESUdFU1RfTEVOR1RILTFdfD0weDAxOwotCQkJaWYgKCFCTl9iaW4yYm4obWQsU0hBX0RJR0VTVF9MRU5HVEgscSkpIGdvdG8gZXJyOworCQkJbWRbMF0gfD0gMHg4MDsKKwkJCW1kW3FzaXplLTFdIHw9IDB4MDE7CisJCQlpZiAoIUJOX2JpbjJibihtZCwgcXNpemUsIHEpKQorCQkJCWdvdG8gZXJyOwogCiAJCQkvKiBzdGVwIDQgKi8KIAkJCXIgPSBCTl9pc19wcmltZV9mYXN0dGVzdF9leChxLCBEU1NfcHJpbWVfY2hlY2tzLCBjdHgsCkBAIC0yMjQsMTggKzI0NSwxOSBAQAogCQkJZm9yIChrPTA7IGs8PW47IGsrKykKIAkJCQl7CiAJCQkJLyogb2J0YWluICJTRUVEICsgb2Zmc2V0ICsgayIgYnkgaW5jcmVtZW50aW5nOiAqLwotCQkJCWZvciAoaT1TSEFfRElHRVNUX0xFTkdUSC0xOyBpID49IDA7IGktLSkKKwkJCQlmb3IgKGkgPSBxc2l6ZS0xOyBpID49IDA7IGktLSkKIAkJCQkJewogCQkJCQlidWZbaV0rKzsKLQkJCQkJaWYgKGJ1ZltpXSAhPSAwKSBicmVhazsKKwkJCQkJaWYgKGJ1ZltpXSAhPSAwKQorCQkJCQkJYnJlYWs7CiAJCQkJCX0KIAotCQkJCUVWUF9EaWdlc3QoYnVmLFNIQV9ESUdFU1RfTEVOR1RILG1kLE5VTEwsSEFTSCwgTlVMTCk7CisJCQkJRVZQX0RpZ2VzdChidWYsIHFzaXplLCBtZCAsTlVMTCwgZXZwbWQsIE5VTEwpOwogCiAJCQkJLyogc3RlcCA4ICovCi0JCQkJaWYgKCFCTl9iaW4yYm4obWQsU0hBX0RJR0VTVF9MRU5HVEgscjApKQorCQkJCWlmICghQk5fYmluMmJuKG1kLCBxc2l6ZSwgcjApKQogCQkJCQlnb3RvIGVycjsKLQkJCQlpZiAoIUJOX2xzaGlmdChyMCxyMCwxNjAqaykpIGdvdG8gZXJyOworCQkJCWlmICghQk5fbHNoaWZ0KHIwLHIwLChxc2l6ZSA8PCAzKSprKSkgZ290byBlcnI7CiAJCQkJaWYgKCFCTl9hZGQoVyxXLHIwKSkgZ290byBlcnI7CiAJCQkJfQogCkBAIC0zMDksNyArMzMxLDYgQEAKIAkJCW9rPTA7CiAJCQlnb3RvIGVycjsKIAkJCX0KLQkJaWYgKHNlZWRfaW4gIT0gTlVMTCkgbWVtY3B5KHNlZWRfaW4sc2VlZCwyMCk7CiAJCWlmIChjb3VudGVyX3JldCAhPSBOVUxMKSAqY291bnRlcl9yZXQ9Y291bnRlcjsKIAkJaWYgKGhfcmV0ICE9IE5VTEwpICpoX3JldD1oOwogCQl9CkBAIC0zMjIsNCArMzQzLDMgQEAKIAlyZXR1cm4gb2s7CiAJfQogI2VuZGlmCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2NyeXB0by9kc2EvZHNhX2tleS5jIGIvY3J5cHRvL2RzYS9kc2Ffa2V5LmMKaW5kZXggNWUzOTEyNC4uYzRhYTg2YiAxMDA2NDQKLS0tIGEvY3J5cHRvL2RzYS9kc2Ffa2V5LmMKKysrIGIvY3J5cHRvL2RzYS9kc2Ffa2V5LmMKQEAgLTY0LDggKzY0LDYgQEAKICNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgogI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgogCi0jaWZuZGVmIE9QRU5TU0xfRklQUwotCiBzdGF0aWMgaW50IGRzYV9idWlsdGluX2tleWdlbihEU0EgKmRzYSk7CiAKIGludCBEU0FfZ2VuZXJhdGVfa2V5KERTQSAqZHNhKQpAQCAtMTI4LDUgKzEyNiwzIEBACiAJcmV0dXJuKG9rKTsKIAl9CiAjZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9jcnlwdG8vZHNhL2RzYV9saWIuYyBiL2NyeXB0by9kc2EvZHNhX2xpYi5jCmluZGV4IDg1NTU2ZDEuLmU5Yjc1OTAgMTAwNjQ0Ci0tLSBhL2NyeXB0by9kc2EvZHNhX2xpYi5jCisrKyBiL2NyeXB0by9kc2EvZHNhX2xpYi5jCkBAIC03NiwxNCArNzYsNiBAQAogCiB2b2lkIERTQV9zZXRfZGVmYXVsdF9tZXRob2QoY29uc3QgRFNBX01FVEhPRCAqbWV0aCkKIAl7Ci0jaWZkZWYgT1BFTlNTTF9GSVBTCi0JaWYgKEZJUFNfbW9kZSgpICYmICEobWV0aC0+ZmxhZ3MgJiBEU0FfRkxBR19GSVBTX01FVEhPRCkpCi0JCXsKLQkJRFNBZXJyKERTQV9GX0RTQV9TRVRfREVGQVVMVF9NRVRIT0QsIERTQV9SX05PTl9GSVBTX01FVEhPRCk7Ci0JCXJldHVybjsKLQkJfQotI2VuZGlmCi0JCQogCWRlZmF1bHRfRFNBX21ldGhvZCA9IG1ldGg7CiAJfQogCkBAIC0xMDQsMTMgKzk2LDYgQEAKIAkvKiBOQjogVGhlIGNhbGxlciBpcyBzcGVjaWZpY2FsbHkgc2V0dGluZyBhIG1ldGhvZCwgc28gaXQncyBub3QgdXAgdG8gdXMKIAkgKiB0byBkZWFsIHdpdGggd2hpY2ggRU5HSU5FIGl0IGNvbWVzIGZyb20uICovCiAgICAgICAgIGNvbnN0IERTQV9NRVRIT0QgKm10bXA7Ci0jaWZkZWYgT1BFTlNTTF9GSVBTCi0JaWYgKEZJUFNfbW9kZSgpICYmICEobWV0aC0+ZmxhZ3MgJiBEU0FfRkxBR19GSVBTX01FVEhPRCkpCi0JCXsKLQkJRFNBZXJyKERTQV9GX0RTQV9TRVRfTUVUSE9ELCBEU0FfUl9OT05fRklQU19NRVRIT0QpOwotCQlyZXR1cm4gMDsKLQkJfQotI2VuZGlmCiAgICAgICAgIG10bXAgPSBkc2EtPm1ldGg7CiAgICAgICAgIGlmIChtdG1wLT5maW5pc2gpIG10bXAtPmZpbmlzaChkc2EpOwogI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQpAQCAtMTYyLDE4ICsxNDcsNiBAQAogCQkJfQogCQl9CiAjZW5kaWYKLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLQlpZiAoRklQU19tb2RlKCkgJiYgIShyZXQtPm1ldGgtPmZsYWdzICYgRFNBX0ZMQUdfRklQU19NRVRIT0QpKQotCQl7Ci0JCURTQWVycihEU0FfRl9EU0FfTkVXX01FVEhPRCwgRFNBX1JfTk9OX0ZJUFNfTUVUSE9EKTsKLSNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKLQkJaWYgKHJldC0+ZW5naW5lKQotCQkJRU5HSU5FX2ZpbmlzaChyZXQtPmVuZ2luZSk7Ci0jZW5kaWYKLQkJT1BFTlNTTF9mcmVlKHJldCk7Ci0JCXJldHVybiBOVUxMOwotCQl9Ci0jZW5kaWYKIAogCXJldC0+cGFkPTA7CiAJcmV0LT52ZXJzaW9uPTA7CkBAIC0xOTAsNyArMTYzLDcgQEAKIAlyZXQtPm1ldGhvZF9tb250X3A9TlVMTDsKIAogCXJldC0+cmVmZXJlbmNlcz0xOwotCXJldC0+ZmxhZ3M9cmV0LT5tZXRoLT5mbGFncyAmIH5EU0FfRkxBR19OT05fRklQU19BTExPVzsKKwlyZXQtPmZsYWdzPXJldC0+bWV0aC0+ZmxhZ3M7CiAJQ1JZUFRPX25ld19leF9kYXRhKENSWVBUT19FWF9JTkRFWF9EU0EsIHJldCwgJnJldC0+ZXhfZGF0YSk7CiAJaWYgKChyZXQtPm1ldGgtPmluaXQgIT0gTlVMTCkgJiYgIXJldC0+bWV0aC0+aW5pdChyZXQpKQogCQl7CkBAIC0yNjAsNiArMjMzLDI4IEBACiAJcmV0dXJuICgoaSA+IDEpID8gMSA6IDApOwogCX0KIAoraW50IERTQV9zaXplKGNvbnN0IERTQSAqcikKKwl7CisJaW50IHJldCxpOworCUFTTjFfSU5URUdFUiBiczsKKwl1bnNpZ25lZCBjaGFyIGJ1Zls0XTsJLyogNCBieXRlcyBsb29rcyByZWFsbHkgc21hbGwuCisJCQkJICAgSG93ZXZlciwgaTJkX0FTTjFfSU5URUdFUigpIHdpbGwgbm90IGxvb2sKKwkJCQkgICBiZXlvbmQgdGhlIGZpcnN0IGJ5dGUsIGFzIGxvbmcgYXMgdGhlIHNlY29uZAorCQkJCSAgIHBhcmFtZXRlciBpcyBOVUxMLiAqLworCisJaT1CTl9udW1fYml0cyhyLT5xKTsKKwlicy5sZW5ndGg9KGkrNykvODsKKwlicy5kYXRhPWJ1ZjsKKwlicy50eXBlPVZfQVNOMV9JTlRFR0VSOworCS8qIElmIHRoZSB0b3AgYml0IGlzIHNldCB0aGUgYXNuMSBlbmNvZGluZyBpcyAxIGxhcmdlci4gKi8KKwlidWZbMF09MHhmZjsJCisKKwlpPWkyZF9BU04xX0lOVEVHRVIoJmJzLE5VTEwpOworCWkrPWk7IC8qIHIgYW5kIHMgKi8KKwlyZXQ9QVNOMV9vYmplY3Rfc2l6ZSgxLGksVl9BU04xX1NFUVVFTkNFKTsKKwlyZXR1cm4ocmV0KTsKKwl9CisKIGludCBEU0FfZ2V0X2V4X25ld19pbmRleChsb25nIGFyZ2wsIHZvaWQgKmFyZ3AsIENSWVBUT19FWF9uZXcgKm5ld19mdW5jLAogCSAgICAgQ1JZUFRPX0VYX2R1cCAqZHVwX2Z1bmMsIENSWVBUT19FWF9mcmVlICpmcmVlX2Z1bmMpCiAgICAgICAgIHsKZGlmZiAtLWdpdCBhL2NyeXB0by9jYW1lbGxpYS9jbWxsX2VjYi5jIGIvY3J5cHRvL2RzYS9kc2FfbG9jbC5oCnNpbWlsYXJpdHkgaW5kZXggNzklCnJlbmFtZSBmcm9tIGNyeXB0by9jYW1lbGxpYS9jbWxsX2VjYi5jCnJlbmFtZSB0byBjcnlwdG8vZHNhL2RzYV9sb2NsLmgKaW5kZXggNzBkYzBlNS4uMmI4Y2ZlZSAxMDA2NDQKLS0tIGEvY3J5cHRvL2NhbWVsbGlhL2NtbGxfZWNiLmMKKysrIGIvY3J5cHRvL2RzYS9kc2FfbG9jbC5oCkBAIC0xLDYgKzEsNSBAQAotLyogY3J5cHRvL2NhbWVsbGlhL2NhbWVsbGlhX2VjYi5jIC0qLSBtb2RlOkM7IGMtZmlsZS1zdHlsZTogImVheSIgLSotICovCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChjKSAyMDA2IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NywyOCArNDYsMTQgQEAKICAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKgorICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCisgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAqCiAgKi8KIAotI2lmbmRlZiBDQU1FTExJQV9ERUJVRwotIyBpZm5kZWYgTkRFQlVHCi0jICBkZWZpbmUgTkRFQlVHCi0jIGVuZGlmCi0jZW5kaWYKLSNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgogCi0jaW5jbHVkZSA8b3BlbnNzbC9jYW1lbGxpYS5oPgotI2luY2x1ZGUgImNtbGxfbG9jbC5oIgotCi12b2lkIENhbWVsbGlhX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCi0JY29uc3QgQ0FNRUxMSUFfS0VZICprZXksIGNvbnN0IGludCBlbmMpIAotCXsKLQotCWFzc2VydChpbiAmJiBvdXQgJiYga2V5KTsKLQlhc3NlcnQoKENBTUVMTElBX0VOQ1JZUFQgPT0gZW5jKXx8KENBTUVMTElBX0RFQ1JZUFQgPT0gZW5jKSk7Ci0KLQlpZiAoQ0FNRUxMSUFfRU5DUllQVCA9PSBlbmMpCi0JCUNhbWVsbGlhX2VuY3J5cHQoaW4sIG91dCwga2V5KTsKLQllbHNlCi0JCUNhbWVsbGlhX2RlY3J5cHQoaW4sIG91dCwga2V5KTsKLQl9Ci0KK2ludCBkc2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV90IGJpdHMsIHNpemVfdCBxYml0cywKKwljb25zdCBFVlBfTUQgKmV2cG1kLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWVkX2luLCBzaXplX3Qgc2VlZF9sZW4sCisJaW50ICpjb3VudGVyX3JldCwgdW5zaWduZWQgbG9uZyAqaF9yZXQsIEJOX0dFTkNCICpjYik7CmRpZmYgLS1naXQgYS9jcnlwdG8vZHNhL2RzYV9vc3NsLmMgYi9jcnlwdG8vZHNhL2RzYV9vc3NsLmMKaW5kZXggNDEyY2YxZC4uNGZlYWQwNyAxMDA2NDQKLS0tIGEvY3J5cHRvL2RzYS9kc2Ffb3NzbC5jCisrKyBiL2NyeXB0by9kc2EvZHNhX29zc2wuYwpAQCAtNjEsMTYgKzYxLDE1IEBACiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlICJjcnlwdGxpYi5oIgogI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKyNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgogI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9hc24xLmg+CiAKLSNpZm5kZWYgT1BFTlNTTF9GSVBTCi0KIHN0YXRpYyBEU0FfU0lHICpkc2FfZG9fc2lnbihjb25zdCB1bnNpZ25lZCBjaGFyICpkZ3N0LCBpbnQgZGxlbiwgRFNBICpkc2EpOwogc3RhdGljIGludCBkc2Ffc2lnbl9zZXR1cChEU0EgKmRzYSwgQk5fQ1RYICpjdHhfaW4sIEJJR05VTSAqKmtpbnZwLCBCSUdOVU0gKipycCk7CiBzdGF0aWMgaW50IGRzYV9kb192ZXJpZnkoY29uc3QgdW5zaWduZWQgY2hhciAqZGdzdCwgaW50IGRnc3RfbGVuLCBEU0FfU0lHICpzaWcsCi0JCSAgRFNBICpkc2EpOworCQkJIERTQSAqZHNhKTsKIHN0YXRpYyBpbnQgZHNhX2luaXQoRFNBICpkc2EpOwogc3RhdGljIGludCBkc2FfZmluaXNoKERTQSAqZHNhKTsKIApAQCAtMTM1LDcgKzEzNCw3IEBACiAJQklHTlVNIG07CiAJQklHTlVNIHhyOwogCUJOX0NUWCAqY3R4PU5VTEw7Ci0JaW50IGkscmVhc29uPUVSUl9SX0JOX0xJQjsKKwlpbnQgcmVhc29uPUVSUl9SX0JOX0xJQjsKIAlEU0FfU0lHICpyZXQ9TlVMTDsKIAogCUJOX2luaXQoJm0pOwpAQCAtMTUwLDggKzE0OSw5IEBACiAJcz1CTl9uZXcoKTsKIAlpZiAocyA9PSBOVUxMKSBnb3RvIGVycjsKIAotCWk9Qk5fbnVtX2J5dGVzKGRzYS0+cSk7IC8qIHNob3VsZCBiZSAyMCAqLwotCWlmICgoZGxlbiA+IGkpIHx8IChkbGVuID4gNTApKQorCS8qIHJlamVjdCBhIGV4Y2Vzc2l2ZSBkaWdlc3QgbGVuZ3RoIChjdXJyZW50bHkgYXQgbW9zdAorCSAqIGRzYS13aXRoLVNIQTI1NiBpcyBzdXBwb3J0ZWQpICovCisJaWYgKGRsZW4gPiBTSEEyNTZfRElHRVNUX0xFTkdUSCkKIAkJewogCQlyZWFzb249RFNBX1JfREFUQV9UT09fTEFSR0VfRk9SX0tFWV9TSVpFOwogCQlnb3RvIGVycjsKQEAgLTE3Miw3ICsxNzIsMTQgQEAKIAkJZHNhLT5yPU5VTEw7CiAJCX0KIAotCWlmIChCTl9iaW4yYm4oZGdzdCxkbGVuLCZtKSA9PSBOVUxMKSBnb3RvIGVycjsKKwkKKwlpZiAoZGxlbiA+IEJOX251bV9ieXRlcyhkc2EtPnEpKQorCQkvKiBpZiB0aGUgZGlnZXN0IGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gdGhlIHNpemUgb2YgcSB1c2UgdGhlCisJCSAqIEJOX251bV9iaXRzKGRzYS0+cSkgbGVmdG1vc3QgYml0cyBvZiB0aGUgZGlnZXN0LCBzZWUKKwkJICogZmlwcyAxODYtMywgNC4yICovCisJCWRsZW4gPSBCTl9udW1fYnl0ZXMoZHNhLT5xKTsKKwlpZiAoQk5fYmluMmJuKGRnc3QsZGxlbiwmbSkgPT0gTlVMTCkKKwkJZ290byBlcnI7CiAKIAkvKiBDb21wdXRlICBzID0gaW52KGspIChtICsgeHIpIG1vZCBxICovCiAJaWYgKCFCTl9tb2RfbXVsKCZ4cixkc2EtPnByaXZfa2V5LHIsZHNhLT5xLGN0eCkpIGdvdG8gZXJyOy8qIHMgPSB4ciAqLwpAQCAtMjgzLDMwICsyOTAsMzEgQEAKIAlpZiAoIXJldCkKIAkJewogCQlEU0FlcnIoRFNBX0ZfRFNBX1NJR05fU0VUVVAsRVJSX1JfQk5fTElCKTsKLQkJaWYgKGtpbnYgIT0gTlVMTCkgQk5fY2xlYXJfZnJlZShraW52KTsKLQkJaWYgKHIgIT0gTlVMTCkgQk5fY2xlYXJfZnJlZShyKTsKKwkJaWYgKHIgIT0gTlVMTCkKKwkJCUJOX2NsZWFyX2ZyZWUocik7CiAJCX0KIAlpZiAoY3R4X2luID09IE5VTEwpIEJOX0NUWF9mcmVlKGN0eCk7Ci0JaWYgKGtpbnYgIT0gTlVMTCkgQk5fY2xlYXJfZnJlZShraW52KTsKIAlCTl9jbGVhcl9mcmVlKCZrKTsKIAlCTl9jbGVhcl9mcmVlKCZrcSk7CiAJcmV0dXJuKHJldCk7CiAJfQogCiBzdGF0aWMgaW50IGRzYV9kb192ZXJpZnkoY29uc3QgdW5zaWduZWQgY2hhciAqZGdzdCwgaW50IGRnc3RfbGVuLCBEU0FfU0lHICpzaWcsCi0JCSAgRFNBICpkc2EpCisJCQkgRFNBICpkc2EpCiAJewogCUJOX0NUWCAqY3R4OwogCUJJR05VTSB1MSx1Mix0MTsKIAlCTl9NT05UX0NUWCAqbW9udD1OVUxMOwotCWludCByZXQgPSAtMTsKKwlpbnQgcmV0ID0gLTEsIGk7CiAJaWYgKCFkc2EtPnAgfHwgIWRzYS0+cSB8fCAhZHNhLT5nKQogCQl7CiAJCURTQWVycihEU0FfRl9EU0FfRE9fVkVSSUZZLERTQV9SX01JU1NJTkdfUEFSQU1FVEVSUyk7CiAJCXJldHVybiAtMTsKIAkJfQogCi0JaWYgKEJOX251bV9iaXRzKGRzYS0+cSkgIT0gMTYwKQorCWkgPSBCTl9udW1fYml0cyhkc2EtPnEpOworCS8qIGZpcHMgMTg2LTMgYWxsb3dzIG9ubHkgZGlmZmVyZW50IHNpemVzIGZvciBxICovCisJaWYgKGkgIT0gMTYwICYmIGkgIT0gMjI0ICYmIGkgIT0gMjU2KQogCQl7CiAJCURTQWVycihEU0FfRl9EU0FfRE9fVkVSSUZZLERTQV9SX0JBRF9RX1ZBTFVFKTsKIAkJcmV0dXJuIC0xOwpAQCAtMzE4LDYgKzMyNiwxNCBAQAogCQlyZXR1cm4gLTE7CiAJCX0KIAorCS8qIHJlamVjdCBhIGV4Y2Vzc2l2ZSBkaWdlc3QgbGVuZ3RoIChjdXJyZW50bHkgYXQgbW9zdAorCSAqIGRzYS13aXRoLVNIQTI1NiBpcyBzdXBwb3J0ZWQpICovCisJaWYgKGRnc3RfbGVuID4gU0hBMjU2X0RJR0VTVF9MRU5HVEgpCisJCXsKKwkJRFNBZXJyKERTQV9GX0RTQV9ET19WRVJJRlksRFNBX1JfREFUQV9UT09fTEFSR0VfRk9SX0tFWV9TSVpFKTsKKwkJcmV0dXJuIC0xOworCQl9CisKIAlCTl9pbml0KCZ1MSk7CiAJQk5faW5pdCgmdTIpOwogCUJOX2luaXQoJnQxKTsKQEAgLTM0Miw2ICszNTgsMTEgQEAKIAlpZiAoKEJOX21vZF9pbnZlcnNlKCZ1MixzaWctPnMsZHNhLT5xLGN0eCkpID09IE5VTEwpIGdvdG8gZXJyOwogCiAJLyogc2F2ZSBNIGluIHUxICovCisJaWYgKGRnc3RfbGVuID4gKGkgPj4gMykpCisJCS8qIGlmIHRoZSBkaWdlc3QgbGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiB0aGUgc2l6ZSBvZiBxIHVzZSB0aGUKKwkJICogQk5fbnVtX2JpdHMoZHNhLT5xKSBsZWZ0bW9zdCBiaXRzIG9mIHRoZSBkaWdlc3QsIHNlZQorCQkgKiBmaXBzIDE4Ni0zLCA0LjIgKi8KKwkJZGdzdF9sZW4gPSAoaSA+PiAzKTsKIAlpZiAoQk5fYmluMmJuKGRnc3QsZGdzdF9sZW4sJnUxKSA9PSBOVUxMKSBnb3RvIGVycjsKIAogCS8qIHUxID0gTSAqIHcgbW9kIHEgKi8KQEAgLTM5Myw0ICs0MTQsMyBAQAogCXJldHVybigxKTsKIH0KIAotI2VuZGlmCmRpZmYgLS1naXQgYS9jcnlwdG8vZHNhL2RzYV9wbWV0aC5jIGIvY3J5cHRvL2RzYS9kc2FfcG1ldGguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2U5MWUyCi0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL2RzYS9kc2FfcG1ldGguYwpAQCAtMCwwICsxLDMxNSBAQAorLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisgKiBwcm9qZWN0IDIwMDYuCisgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisgKgorICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgorICoKKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorICoKKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKyAqICAgIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCisgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAqCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAiY3J5cHRsaWIuaCIKKyNpbmNsdWRlIDxvcGVuc3NsL2FzbjF0Lmg+CisjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+CisjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisjaW5jbHVkZSAiZXZwX2xvY2wuaCIKKyNpbmNsdWRlICJkc2FfbG9jbC5oIgorCisvKiBEU0EgcGtleSBjb250ZXh0IHN0cnVjdHVyZSAqLworCit0eXBlZGVmIHN0cnVjdAorCXsKKwkvKiBQYXJhbWV0ZXIgZ2VuIHBhcmFtZXRlcnMgKi8KKwlpbnQgbmJpdHM7CQkvKiBzaXplIG9mIHAgaW4gYml0cyAoZGVmYXVsdDogMTAyNCkgKi8KKwlpbnQgcWJpdHM7CQkvKiBzaXplIG9mIHEgaW4gYml0cyAoZGVmYXVsdDogMTYwKSAgKi8KKwljb25zdCBFVlBfTUQgKnBtZDsJLyogTUQgZm9yIHBhcmFtZXRlciBnZW5lcmF0aW9uICovCisJLyogS2V5Z2VuIGNhbGxiYWNrIGluZm8gKi8KKwlpbnQgZ2VudG1wWzJdOworCS8qIG1lc3NhZ2UgZGlnZXN0ICovCisJY29uc3QgRVZQX01EICptZDsJLyogTUQgZm9yIHRoZSBzaWduYXR1cmUgKi8KKwl9IERTQV9QS0VZX0NUWDsKKworc3RhdGljIGludCBwa2V5X2RzYV9pbml0KEVWUF9QS0VZX0NUWCAqY3R4KQorCXsKKwlEU0FfUEtFWV9DVFggKmRjdHg7CisJZGN0eCA9IE9QRU5TU0xfbWFsbG9jKHNpemVvZihEU0FfUEtFWV9DVFgpKTsKKwlpZiAoIWRjdHgpCisJCXJldHVybiAwOworCWRjdHgtPm5iaXRzID0gMTAyNDsKKwlkY3R4LT5xYml0cyA9IDE2MDsKKwlkY3R4LT5wbWQgPSBOVUxMOworCWRjdHgtPm1kID0gTlVMTDsKKworCWN0eC0+ZGF0YSA9IGRjdHg7CisJY3R4LT5rZXlnZW5faW5mbyA9IGRjdHgtPmdlbnRtcDsKKwljdHgtPmtleWdlbl9pbmZvX2NvdW50ID0gMjsKKwkKKwlyZXR1cm4gMTsKKwl9CisKK3N0YXRpYyBpbnQgcGtleV9kc2FfY29weShFVlBfUEtFWV9DVFggKmRzdCwgRVZQX1BLRVlfQ1RYICpzcmMpCisJeworCURTQV9QS0VZX0NUWCAqZGN0eCwgKnNjdHg7CisJaWYgKCFwa2V5X2RzYV9pbml0KGRzdCkpCisJCXJldHVybiAwOworICAgICAgIAlzY3R4ID0gc3JjLT5kYXRhOworCWRjdHggPSBkc3QtPmRhdGE7CisJZGN0eC0+bmJpdHMgPSBzY3R4LT5uYml0czsKKwlkY3R4LT5xYml0cyA9IHNjdHgtPnFiaXRzOworCWRjdHgtPnBtZCA9IHNjdHgtPnBtZDsKKwlkY3R4LT5tZCAgPSBzY3R4LT5tZDsKKwlyZXR1cm4gMTsKKwl9CisKK3N0YXRpYyB2b2lkIHBrZXlfZHNhX2NsZWFudXAoRVZQX1BLRVlfQ1RYICpjdHgpCisJeworCURTQV9QS0VZX0NUWCAqZGN0eCA9IGN0eC0+ZGF0YTsKKwlpZiAoZGN0eCkKKwkJT1BFTlNTTF9mcmVlKGRjdHgpOworCX0KKworc3RhdGljIGludCBwa2V5X2RzYV9zaWduKEVWUF9QS0VZX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpzaWcsIHNpemVfdCAqc2lnbGVuLAorCQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICp0YnMsIHNpemVfdCB0YnNsZW4pCisJeworCWludCByZXQsIHR5cGU7CisJdW5zaWduZWQgaW50IHNsdG1wOworCURTQV9QS0VZX0NUWCAqZGN0eCA9IGN0eC0+ZGF0YTsKKwlEU0EgKmRzYSA9IGN0eC0+cGtleS0+cGtleS5kc2E7CisKKwlpZiAoZGN0eC0+bWQpCisJCXR5cGUgPSBFVlBfTURfdHlwZShkY3R4LT5tZCk7CisJZWxzZQorCQl0eXBlID0gTklEX3NoYTE7CisKKwlyZXQgPSBEU0Ffc2lnbih0eXBlLCB0YnMsIHRic2xlbiwgc2lnLCAmc2x0bXAsIGRzYSk7CisKKwlpZiAocmV0IDw9IDApCisJCXJldHVybiByZXQ7CisJKnNpZ2xlbiA9IHNsdG1wOworCXJldHVybiAxOworCX0KKworc3RhdGljIGludCBwa2V5X2RzYV92ZXJpZnkoRVZQX1BLRVlfQ1RYICpjdHgsCisJCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZywgc2l6ZV90IHNpZ2xlbiwKKwkJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqdGJzLCBzaXplX3QgdGJzbGVuKQorCXsKKwlpbnQgcmV0LCB0eXBlOworCURTQV9QS0VZX0NUWCAqZGN0eCA9IGN0eC0+ZGF0YTsKKwlEU0EgKmRzYSA9IGN0eC0+cGtleS0+cGtleS5kc2E7CisKKwlpZiAoZGN0eC0+bWQpCisJCXR5cGUgPSBFVlBfTURfdHlwZShkY3R4LT5tZCk7CisJZWxzZQorCQl0eXBlID0gTklEX3NoYTE7CisKKwlyZXQgPSBEU0FfdmVyaWZ5KHR5cGUsIHRicywgdGJzbGVuLCBzaWcsIHNpZ2xlbiwgZHNhKTsKKworCXJldHVybiByZXQ7CisJfQorCitzdGF0aWMgaW50IHBrZXlfZHNhX2N0cmwoRVZQX1BLRVlfQ1RYICpjdHgsIGludCB0eXBlLCBpbnQgcDEsIHZvaWQgKnAyKQorCXsKKwlEU0FfUEtFWV9DVFggKmRjdHggPSBjdHgtPmRhdGE7CisJc3dpdGNoICh0eXBlKQorCQl7CisJCWNhc2UgRVZQX1BLRVlfQ1RSTF9EU0FfUEFSQU1HRU5fQklUUzoKKwkJaWYgKHAxIDwgMjU2KQorCQkJcmV0dXJuIC0yOworCQlkY3R4LT5uYml0cyA9IHAxOworCQlyZXR1cm4gMTsKKworCQljYXNlIEVWUF9QS0VZX0NUUkxfRFNBX1BBUkFNR0VOX1FfQklUUzoKKwkJaWYgKHAxICE9IDE2MCAmJiBwMSAhPSAyMjQgJiYgcDEgJiYgcDEgIT0gMjU2KQorCQkJcmV0dXJuIC0yOworCQlkY3R4LT5xYml0cyA9IHAxOworCQlyZXR1cm4gMTsKKworCQljYXNlIEVWUF9QS0VZX0NUUkxfRFNBX1BBUkFNR0VOX01EOgorCQlpZiAoRVZQX01EX3R5cGUoKGNvbnN0IEVWUF9NRCAqKXAyKSAhPSBOSURfc2hhMSAgICYmCisJCSAgICBFVlBfTURfdHlwZSgoY29uc3QgRVZQX01EICopcDIpICE9IE5JRF9zaGEyMjQgJiYKKwkJICAgIEVWUF9NRF90eXBlKChjb25zdCBFVlBfTUQgKilwMikgIT0gTklEX3NoYTI1NikKKwkJCXsKKwkJCURTQWVycihEU0FfRl9QS0VZX0RTQV9DVFJMLCBEU0FfUl9JTlZBTElEX0RJR0VTVF9UWVBFKTsKKwkJCXJldHVybiAwOworCQkJfQorCQlkY3R4LT5tZCA9IHAyOworCQlyZXR1cm4gMTsKKworCQljYXNlIEVWUF9QS0VZX0NUUkxfTUQ6CisJCWlmIChFVlBfTURfdHlwZSgoY29uc3QgRVZQX01EICopcDIpICE9IE5JRF9zaGExICAgJiYKKwkJICAgIEVWUF9NRF90eXBlKChjb25zdCBFVlBfTUQgKilwMikgIT0gTklEX2RzYSAgICAmJgorCQkgICAgRVZQX01EX3R5cGUoKGNvbnN0IEVWUF9NRCAqKXAyKSAhPSBOSURfc2hhMjI0ICYmCisJCSAgICBFVlBfTURfdHlwZSgoY29uc3QgRVZQX01EICopcDIpICE9IE5JRF9zaGEyNTYpCisJCQl7CisJCQlEU0FlcnIoRFNBX0ZfUEtFWV9EU0FfQ1RSTCwgRFNBX1JfSU5WQUxJRF9ESUdFU1RfVFlQRSk7CisJCQlyZXR1cm4gMDsKKwkJCX0KKwkJZGN0eC0+bWQgPSBwMjsKKwkJcmV0dXJuIDE7CisKKwkJY2FzZSBFVlBfUEtFWV9DVFJMX0RJR0VTVElOSVQ6CisJCWNhc2UgRVZQX1BLRVlfQ1RSTF9QS0NTN19TSUdOOgorCQljYXNlIEVWUF9QS0VZX0NUUkxfQ01TX1NJR046CisJCXJldHVybiAxOworCQkKKwkJY2FzZSBFVlBfUEtFWV9DVFJMX1BFRVJfS0VZOgorCQkJRFNBZXJyKERTQV9GX1BLRVlfRFNBX0NUUkwsCisJCQlFVlBfUl9PUEVSQVRJT05fTk9UX1NVUFBPUlRFRF9GT1JfVEhJU19LRVlUWVBFKTsKKwkJCXJldHVybiAtMjsJCisJCWRlZmF1bHQ6CisJCXJldHVybiAtMjsKKworCQl9CisJfQorCQkJCitzdGF0aWMgaW50IHBrZXlfZHNhX2N0cmxfc3RyKEVWUF9QS0VZX0NUWCAqY3R4LAorCQkJY29uc3QgY2hhciAqdHlwZSwgY29uc3QgY2hhciAqdmFsdWUpCisJeworCWlmICghc3RyY21wKHR5cGUsICJkc2FfcGFyYW1nZW5fYml0cyIpKQorCQl7CisJCWludCBuYml0czsKKwkJbmJpdHMgPSBhdG9pKHZhbHVlKTsKKwkJcmV0dXJuIEVWUF9QS0VZX0NUWF9zZXRfZHNhX3BhcmFtZ2VuX2JpdHMoY3R4LCBuYml0cyk7CisJCX0KKwlpZiAoIXN0cmNtcCh0eXBlLCAiZHNhX3BhcmFtZ2VuX3FfYml0cyIpKQorCQl7CisJCWludCBxYml0cyA9IGF0b2kodmFsdWUpOworCQlyZXR1cm4gRVZQX1BLRVlfQ1RYX2N0cmwoY3R4LCBFVlBfUEtFWV9EU0EsIEVWUF9QS0VZX09QX1BBUkFNR0VOLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgRVZQX1BLRVlfQ1RSTF9EU0FfUEFSQU1HRU5fUV9CSVRTLCBxYml0cywgTlVMTCk7CisJCX0KKwlpZiAoIXN0cmNtcCh0eXBlLCAiZHNhX3BhcmFtZ2VuX21kIikpCisJCXsKKwkJcmV0dXJuIEVWUF9QS0VZX0NUWF9jdHJsKGN0eCwgRVZQX1BLRVlfRFNBLCBFVlBfUEtFWV9PUF9QQVJBTUdFTiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgIEVWUF9QS0VZX0NUUkxfRFNBX1BBUkFNR0VOX01ELCAwLCAKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopRVZQX2dldF9kaWdlc3RieW5hbWUodmFsdWUpKTsKKwkJfQorCXJldHVybiAtMjsKKwl9CisKK3N0YXRpYyBpbnQgcGtleV9kc2FfcGFyYW1nZW4oRVZQX1BLRVlfQ1RYICpjdHgsIEVWUF9QS0VZICpwa2V5KQorCXsKKwlEU0EgKmRzYSA9IE5VTEw7CisJRFNBX1BLRVlfQ1RYICpkY3R4ID0gY3R4LT5kYXRhOworCUJOX0dFTkNCICpwY2IsIGNiOworCWludCByZXQ7CisJaWYgKGN0eC0+cGtleV9nZW5jYikKKwkJeworCQlwY2IgPSAmY2I7CisJCWV2cF9wa2V5X3NldF9jYl90cmFuc2xhdGUocGNiLCBjdHgpOworCQl9CisJZWxzZQorCQlwY2IgPSBOVUxMOworCWRzYSA9IERTQV9uZXcoKTsKKwlpZiAoIWRzYSkKKwkJcmV0dXJuIDA7CisJcmV0ID0gZHNhX2J1aWx0aW5fcGFyYW1nZW4oZHNhLCBkY3R4LT5uYml0cywgZGN0eC0+cWJpdHMsIGRjdHgtPnBtZCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCBOVUxMLCBOVUxMLCBwY2IpOworCWlmIChyZXQpCisJCUVWUF9QS0VZX2Fzc2lnbl9EU0EocGtleSwgZHNhKTsKKwllbHNlCisJCURTQV9mcmVlKGRzYSk7CisJcmV0dXJuIHJldDsKKwl9CisKK3N0YXRpYyBpbnQgcGtleV9kc2Ffa2V5Z2VuKEVWUF9QS0VZX0NUWCAqY3R4LCBFVlBfUEtFWSAqcGtleSkKKwl7CisJRFNBICpkc2EgPSBOVUxMOworCWlmIChjdHgtPnBrZXkgPT0gTlVMTCkKKwkJeworCQlEU0FlcnIoRFNBX0ZfUEtFWV9EU0FfS0VZR0VOLCBEU0FfUl9OT19QQVJBTUVURVJTX1NFVCk7CisJCXJldHVybiAwOworCQl9CisJZHNhID0gRFNBX25ldygpOworCWlmICghZHNhKQorCQlyZXR1cm4gMDsKKwlFVlBfUEtFWV9hc3NpZ25fRFNBKHBrZXksIGRzYSk7CisJLyogTm90ZTogaWYgZXJyb3IgcmV0dXJuLCBwa2V5IGlzIGZyZWVkIGJ5IHBhcmVudCByb3V0aW5lICovCisJaWYgKCFFVlBfUEtFWV9jb3B5X3BhcmFtZXRlcnMocGtleSwgY3R4LT5wa2V5KSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIERTQV9nZW5lcmF0ZV9rZXkocGtleS0+cGtleS5kc2EpOworCX0KKworY29uc3QgRVZQX1BLRVlfTUVUSE9EIGRzYV9wa2V5X21ldGggPSAKKwl7CisJRVZQX1BLRVlfRFNBLAorCUVWUF9QS0VZX0ZMQUdfQVVUT0FSR0xFTiwKKwlwa2V5X2RzYV9pbml0LAorCXBrZXlfZHNhX2NvcHksCisJcGtleV9kc2FfY2xlYW51cCwKKworCTAsCisJcGtleV9kc2FfcGFyYW1nZW4sCisKKwkwLAorCXBrZXlfZHNhX2tleWdlbiwKKworCTAsCisJcGtleV9kc2Ffc2lnbiwKKworCTAsCisJcGtleV9kc2FfdmVyaWZ5LAorCisJMCwwLAorCisJMCwwLDAsMCwKKworCTAsMCwKKworCTAsMCwKKworCTAsMCwKKworCXBrZXlfZHNhX2N0cmwsCisJcGtleV9kc2FfY3RybF9zdHIKKworCisJfTsKZGlmZiAtLWdpdCBhL2NyeXB0by9idWZmZXIvYnVmX3N0ci5jIGIvY3J5cHRvL2RzYS9kc2FfcHJuLmMKc2ltaWxhcml0eSBpbmRleCA2OCUKcmVuYW1lIGZyb20gY3J5cHRvL2J1ZmZlci9idWZfc3RyLmMKcmVuYW1lIHRvIGNyeXB0by9kc2EvZHNhX3Bybi5jCmluZGV4IDI4ZGQxZTQuLjZmMjlmNWUgMTAwNjQ0Ci0tLSBhL2NyeXB0by9idWZmZXIvYnVmX3N0ci5jCisrKyBiL2NyeXB0by9kc2EvZHNhX3Bybi5jCkBAIC0xLDYgKzEsOSBAQAotLyogY3J5cHRvL2J1ZmZlci9idWZfc3RyLmMgKi8KKy8qIGNyeXB0by9kc2EvZHNhX3Bybi5jICovCisvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKyAqIHByb2plY3QgMjAwNi4KKyAqLwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoYykgMjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNiBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTUsNjIgKzU4LDY0IEBACiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgImNyeXB0bGliLmgiCi0jaW5jbHVkZSA8b3BlbnNzbC9idWZmZXIuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+CiAKLWNoYXIgKkJVRl9zdHJkdXAoY29uc3QgY2hhciAqc3RyKQorI2lmbmRlZiBPUEVOU1NMX05PX0ZQX0FQSQoraW50IERTQV9wcmludF9mcChGSUxFICpmcCwgY29uc3QgRFNBICp4LCBpbnQgb2ZmKQogCXsKLQlpZiAoc3RyID09IE5VTEwpIHJldHVybihOVUxMKTsKLQlyZXR1cm4gQlVGX3N0cm5kdXAoc3RyLCBzdHJsZW4oc3RyKSk7Ci0JfQorCUJJTyAqYjsKKwlpbnQgcmV0OwogCi1jaGFyICpCVUZfc3RybmR1cChjb25zdCBjaGFyICpzdHIsIHNpemVfdCBzaXopCi0JewotCWNoYXIgKnJldDsKLQotCWlmIChzdHIgPT0gTlVMTCkgcmV0dXJuKE5VTEwpOwotCi0JcmV0PU9QRU5TU0xfbWFsbG9jKHNpeisxKTsKLQlpZiAocmV0ID09IE5VTEwpIAorCWlmICgoYj1CSU9fbmV3KEJJT19zX2ZpbGUoKSkpID09IE5VTEwpCiAJCXsKLQkJQlVGZXJyKEJVRl9GX0JVRl9TVFJORFVQLEVSUl9SX01BTExPQ19GQUlMVVJFKTsKLQkJcmV0dXJuKE5VTEwpOworCQlEU0FlcnIoRFNBX0ZfRFNBX1BSSU5UX0ZQLEVSUl9SX0JVRl9MSUIpOworCQlyZXR1cm4oMCk7CiAJCX0KLQlCVUZfc3RybGNweShyZXQsc3RyLHNpeisxKTsKKwlCSU9fc2V0X2ZwKGIsZnAsQklPX05PQ0xPU0UpOworCXJldD1EU0FfcHJpbnQoYix4LG9mZik7CisJQklPX2ZyZWUoYik7CiAJcmV0dXJuKHJldCk7CiAJfQogCi12b2lkICpCVUZfbWVtZHVwKGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBzaXopCitpbnQgRFNBcGFyYW1zX3ByaW50X2ZwKEZJTEUgKmZwLCBjb25zdCBEU0EgKngpCiAJewotCXZvaWQgKnJldDsKKwlCSU8gKmI7CisJaW50IHJldDsKIAotCWlmIChkYXRhID09IE5VTEwpIHJldHVybihOVUxMKTsKLQotCXJldD1PUEVOU1NMX21hbGxvYyhzaXopOwotCWlmIChyZXQgPT0gTlVMTCkgCisJaWYgKChiPUJJT19uZXcoQklPX3NfZmlsZSgpKSkgPT0gTlVMTCkKIAkJewotCQlCVUZlcnIoQlVGX0ZfQlVGX01FTURVUCxFUlJfUl9NQUxMT0NfRkFJTFVSRSk7Ci0JCXJldHVybihOVUxMKTsKKwkJRFNBZXJyKERTQV9GX0RTQVBBUkFNU19QUklOVF9GUCxFUlJfUl9CVUZfTElCKTsKKwkJcmV0dXJuKDApOwogCQl9Ci0JcmV0dXJuIG1lbWNweShyZXQsIGRhdGEsIHNpeik7Ci0JfQkKKwlCSU9fc2V0X2ZwKGIsZnAsQklPX05PQ0xPU0UpOworCXJldD1EU0FwYXJhbXNfcHJpbnQoYiwgeCk7CisJQklPX2ZyZWUoYik7CisJcmV0dXJuKHJldCk7CisJfQorI2VuZGlmCiAKLXNpemVfdCBCVUZfc3RybGNweShjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNpemUpCitpbnQgRFNBX3ByaW50KEJJTyAqYnAsIGNvbnN0IERTQSAqeCwgaW50IG9mZikKIAl7Ci0Jc2l6ZV90IGwgPSAwOwotCWZvcig7IHNpemUgPiAxICYmICpzcmM7IHNpemUtLSkKLQkJewotCQkqZHN0KysgPSAqc3JjKys7Ci0JCWwrKzsKLQkJfQotCWlmIChzaXplKQotCQkqZHN0ID0gJ1wwJzsKLQlyZXR1cm4gbCArIHN0cmxlbihzcmMpOworCUVWUF9QS0VZICpwazsKKwlpbnQgcmV0OworCXBrID0gRVZQX1BLRVlfbmV3KCk7CisJaWYgKCFwayB8fCAhRVZQX1BLRVlfc2V0MV9EU0EocGssIChEU0EgKil4KSkKKwkJcmV0dXJuIDA7CisJcmV0ID0gRVZQX1BLRVlfcHJpbnRfcHJpdmF0ZShicCwgcGssIG9mZiwgTlVMTCk7CisJRVZQX1BLRVlfZnJlZShwayk7CisJcmV0dXJuIHJldDsKIAl9CiAKLXNpemVfdCBCVUZfc3RybGNhdChjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNpemUpCitpbnQgRFNBcGFyYW1zX3ByaW50KEJJTyAqYnAsIGNvbnN0IERTQSAqeCkKIAl7Ci0Jc2l6ZV90IGwgPSAwOwotCWZvcig7IHNpemUgPiAwICYmICpkc3Q7IHNpemUtLSwgZHN0KyspCi0JCWwrKzsKLQlyZXR1cm4gbCArIEJVRl9zdHJsY3B5KGRzdCwgc3JjLCBzaXplKTsKKwlFVlBfUEtFWSAqcGs7CisJaW50IHJldDsKKwlwayA9IEVWUF9QS0VZX25ldygpOworCWlmICghcGsgfHwgIUVWUF9QS0VZX3NldDFfRFNBKHBrLCAoRFNBICopeCkpCisJCXJldHVybiAwOworCXJldCA9IEVWUF9QS0VZX3ByaW50X3BhcmFtcyhicCwgcGssIDQsIE5VTEwpOworCUVWUF9QS0VZX2ZyZWUocGspOworCXJldHVybiByZXQ7CiAJfQorCmRpZmYgLS1naXQgYS9jcnlwdG8vZHNhL2RzYV9zaWduLmMgYi9jcnlwdG8vZHNhL2RzYV9zaWduLmMKaW5kZXggNGNmYmJlNS4uMTc1NTVlNSAxMDA2NDQKLS0tIGEvY3J5cHRvL2RzYS9kc2Ffc2lnbi5jCisrKyBiL2NyeXB0by9kc2EvZHNhX3NpZ24uYwpAQCAtNTgsMzggKzU4LDMzIEBACiAKIC8qIE9yaWdpbmFsIHZlcnNpb24gZnJvbSBTdGV2ZW4gU2Nob2NoIDxzY2hvY2hAc2hlYmEuYXJjLm5hc2EuZ292PiAqLwogCi0jaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlICJjcnlwdGxpYi5oIgotI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KICNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgogI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotI2luY2x1ZGUgPG9wZW5zc2wvYXNuMS5oPgotI2lmZGVmIE9QRU5TU0xfRklQUwotI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotI2VuZGlmCi0KIAogRFNBX1NJRyAqIERTQV9kb19zaWduKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRnc3QsIGludCBkbGVuLCBEU0EgKmRzYSkKIAl7Ci0jaWZkZWYgT1BFTlNTTF9GSVBTCi0JaWYoRklQU19tb2RlKCkgJiYgIShkc2EtPmZsYWdzICYgRFNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQotCQl7Ci0JCURTQWVycihEU0FfRl9EU0FfRE9fU0lHTiwgRFNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERSk7Ci0JCXJldHVybiBOVUxMOwotCQl9Ci0jZW5kaWYKIAlyZXR1cm4gZHNhLT5tZXRoLT5kc2FfZG9fc2lnbihkZ3N0LCBkbGVuLCBkc2EpOwogCX0KIAoraW50IERTQV9zaWduKGludCB0eXBlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkZ3N0LCBpbnQgZGxlbiwgdW5zaWduZWQgY2hhciAqc2lnLAorCSAgICAgdW5zaWduZWQgaW50ICpzaWdsZW4sIERTQSAqZHNhKQorCXsKKwlEU0FfU0lHICpzOworCVJBTkRfc2VlZChkZ3N0LCBkbGVuKTsKKwlzPURTQV9kb19zaWduKGRnc3QsZGxlbixkc2EpOworCWlmIChzID09IE5VTEwpCisJCXsKKwkJKnNpZ2xlbj0wOworCQlyZXR1cm4oMCk7CisJCX0KKwkqc2lnbGVuPWkyZF9EU0FfU0lHKHMsJnNpZyk7CisJRFNBX1NJR19mcmVlKHMpOworCXJldHVybigxKTsKKwl9CisKIGludCBEU0Ffc2lnbl9zZXR1cChEU0EgKmRzYSwgQk5fQ1RYICpjdHhfaW4sIEJJR05VTSAqKmtpbnZwLCBCSUdOVU0gKipycCkKIAl7Ci0jaWZkZWYgT1BFTlNTTF9GSVBTCi0JaWYoRklQU19tb2RlKCkgJiYgIShkc2EtPmZsYWdzICYgRFNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQotCQl7Ci0JCURTQWVycihEU0FfRl9EU0FfU0lHTl9TRVRVUCwgRFNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERSk7Ci0JCXJldHVybiAwOwotCQl9Ci0jZW5kaWYKIAlyZXR1cm4gZHNhLT5tZXRoLT5kc2Ffc2lnbl9zZXR1cChkc2EsIGN0eF9pbiwga2ludnAsIHJwKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2NyeXB0by9kc2EvZHNhX3V0bC5jIGIvY3J5cHRvL2RzYS9kc2FfdXRsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0YzAyMWQuLjAwMDAwMDAKLS0tIGEvY3J5cHRvL2RzYS9kc2FfdXRsLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi0vKiBjcnlwdG8vZHNhL2RzYV9saWIuYyAqLwotLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgotICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgotICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgotICogCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKLSAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKLSAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgotICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcwotICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0gKiAKLSAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCi0gKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCi0gKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCi0gKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgotICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCi0gKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5Ci0gKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgotICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5Ci0gKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KLSAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAotICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKLSAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqIAotICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKLSAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQotICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQotICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KLSAqLwotCi0vKiBPcmlnaW5hbCB2ZXJzaW9uIGZyb20gU3RldmVuIFNjaG9jaCA8c2Nob2NoQHNoZWJhLmFyYy5uYXNhLmdvdj4gKi8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSAiY3J5cHRsaWIuaCIKLSNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0jaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KLSNpbmNsdWRlIDxvcGVuc3NsL2FzbjEuaD4KLSNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKLSNpbmNsdWRlIDxvcGVuc3NsL2VuZ2luZS5oPgotI2VuZGlmCi0jaWZuZGVmIE9QRU5TU0xfTk9fREgKLSNpbmNsdWRlIDxvcGVuc3NsL2RoLmg+Ci0jZW5kaWYKLQotRFNBX1NJRyAqRFNBX1NJR19uZXcodm9pZCkKLQl7Ci0JRFNBX1NJRyAqc2lnOwotCXNpZyA9IE9QRU5TU0xfbWFsbG9jKHNpemVvZihEU0FfU0lHKSk7Ci0JaWYgKCFzaWcpCi0JCXJldHVybiBOVUxMOwotCXNpZy0+ciA9IE5VTEw7Ci0Jc2lnLT5zID0gTlVMTDsKLQlyZXR1cm4gc2lnOwotCX0KLQotdm9pZCBEU0FfU0lHX2ZyZWUoRFNBX1NJRyAqc2lnKQotCXsKLQlpZiAoc2lnKQotCQl7Ci0JCWlmIChzaWctPnIpCi0JCQlCTl9mcmVlKHNpZy0+cik7Ci0JCWlmIChzaWctPnMpCi0JCQlCTl9mcmVlKHNpZy0+cyk7Ci0JCU9QRU5TU0xfZnJlZShzaWcpOwotCQl9Ci0JfQotCmRpZmYgLS1naXQgYS9jcnlwdG8vZHNhL2RzYV92cmYuYyBiL2NyeXB0by9kc2EvZHNhX3ZyZi5jCmluZGV4IGM3NWU0MjMuLjIyNmE3NWYgMTAwNjQ0Ci0tLSBhL2NyeXB0by9kc2EvZHNhX3ZyZi5jCisrKyBiL2NyeXB0by9kc2EvZHNhX3ZyZi5jCkBAIC01OCwyNyArNTgsMzIgQEAKIAogLyogT3JpZ2luYWwgdmVyc2lvbiBmcm9tIFN0ZXZlbiBTY2hvY2ggPHNjaG9jaEBzaGViYS5hcmMubmFzYS5nb3Y+ICovCiAKLSNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgImNyeXB0bGliLmgiCi0jaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgogI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+Ci0jaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0jaW5jbHVkZSA8b3BlbnNzbC9hc24xLmg+Ci0jaWZkZWYgT1BFTlNTTF9GSVBTCi0jaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPG9wZW5zc2wvYXNuMV9tYWMuaD4KIAogaW50IERTQV9kb192ZXJpZnkoY29uc3QgdW5zaWduZWQgY2hhciAqZGdzdCwgaW50IGRnc3RfbGVuLCBEU0FfU0lHICpzaWcsCiAJCSAgRFNBICpkc2EpCiAJewotI2lmZGVmIE9QRU5TU0xfRklQUwotCWlmKEZJUFNfbW9kZSgpICYmICEoZHNhLT5mbGFncyAmIERTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSkKLQkJewotCQlEU0FlcnIoRFNBX0ZfRFNBX0RPX1ZFUklGWSwgRFNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERSk7Ci0JCXJldHVybiAwOwotCQl9Ci0jZW5kaWYKIAlyZXR1cm4gZHNhLT5tZXRoLT5kc2FfZG9fdmVyaWZ5KGRnc3QsIGRnc3RfbGVuLCBzaWcsIGRzYSk7CiAJfQorCisvKiBkYXRhIGhhcyBhbHJlYWR5IGJlZW4gaGFzaGVkIChwcm9iYWJseSB3aXRoIFNIQSBvciBTSEEtMSkuICovCisvKiByZXR1cm5zCisgKiAgICAgIDE6IGNvcnJlY3Qgc2lnbmF0dXJlCisgKiAgICAgIDA6IGluY29ycmVjdCBzaWduYXR1cmUKKyAqICAgICAtMTogZXJyb3IKKyAqLworaW50IERTQV92ZXJpZnkoaW50IHR5cGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRnc3QsIGludCBkZ3N0X2xlbiwKKwkgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZ2J1ZiwgaW50IHNpZ2xlbiwgRFNBICpkc2EpCisJeworCURTQV9TSUcgKnM7CisJaW50IHJldD0tMTsKKworCXMgPSBEU0FfU0lHX25ldygpOworCWlmIChzID09IE5VTEwpIHJldHVybihyZXQpOworCWlmIChkMmlfRFNBX1NJRygmcywmc2lnYnVmLHNpZ2xlbikgPT0gTlVMTCkgZ290byBlcnI7CisJcmV0PURTQV9kb192ZXJpZnkoZGdzdCxkZ3N0X2xlbixzLGRzYSk7CitlcnI6CisJRFNBX1NJR19mcmVlKHMpOworCXJldHVybihyZXQpOworCX0KZGlmZiAtLWdpdCBhL2NyeXB0by9kc2EvZHNhdGVzdC5jIGIvY3J5cHRvL2RzYS9kc2F0ZXN0LmMKaW5kZXggOTEyMzE3Yi4uZWRmZmQyNCAxMDA2NDQKLS0tIGEvY3J5cHRvL2RzYS9kc2F0ZXN0LmMKKysrIGIvY3J5cHRvL2RzYS9kc2F0ZXN0LmMKQEAgLTE2OSw3ICsxNjksNiBAQAogCQl9CiAJQklPX3ByaW50ZihiaW9fZXJyLCJcbmNvdW50ZXI9JWQgaD0lbGRcbiIsY291bnRlcixoKTsKIAkJCi0JaWYgKGRzYSA9PSBOVUxMKSBnb3RvIGVuZDsKIAlEU0FfcHJpbnQoYmlvX2Vycixkc2EsMCk7CiAJaWYgKGNvdW50ZXIgIT0gMTA1KSAKIAkJewpAQCAtMjIzLDcgKzIyMiw3IEBACiAJCUVSUl9wcmludF9lcnJvcnMoYmlvX2Vycik7CiAJaWYgKGRzYSAhPSBOVUxMKSBEU0FfZnJlZShkc2EpOwogCUNSWVBUT19jbGVhbnVwX2FsbF9leF9kYXRhKCk7Ci0JRVJSX3JlbW92ZV9zdGF0ZSgwKTsKKwlFUlJfcmVtb3ZlX3RocmVhZF9zdGF0ZShOVUxMKTsKIAlFUlJfZnJlZV9zdHJpbmdzKCk7CiAJQ1JZUFRPX21lbV9sZWFrcyhiaW9fZXJyKTsKIAlpZiAoYmlvX2VyciAhPSBOVUxMKQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Rzby9NYWtlZmlsZSBiL2NyeXB0by9kc28vTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyZjE1MjguLjAwMDAwMDAKLS0tIGEvY3J5cHRvL2Rzby9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi0jCi0jIE9wZW5TU0wvY3J5cHRvL2Rzby9NYWtlZmlsZQotIwotCi1ESVI9CWRzbwotVE9QPQkuLi8uLgotQ0M9CWNjCi1JTkNMVURFUz0gLUkuLiAtSSQoVE9QKSAtSS4uLy4uL2luY2x1ZGUKLUNGTEFHPS1nCi1NQUtFRklMRT0JTWFrZWZpbGUKLUFSPQkJYXIgcgotCi1DRkxBR1M9ICQoSU5DTFVERVMpICQoQ0ZMQUcpCi0KLUdFTkVSQUw9TWFrZWZpbGUKLVRFU1Q9Ci1BUFBTPQotCi1MSUI9JChUT1ApL2xpYmNyeXB0by5hCi1MSUJTUkM9IGRzb19kbC5jIGRzb19kbGZjbi5jIGRzb19lcnIuYyBkc29fbGliLmMgZHNvX251bGwuYyBcCi0JZHNvX29wZW5zc2wuYyBkc29fd2luMzIuYyBkc29fdm1zLmMKLUxJQk9CSj0gZHNvX2RsLm8gZHNvX2RsZmNuLm8gZHNvX2Vyci5vIGRzb19saWIubyBkc29fbnVsbC5vIFwKLQlkc29fb3BlbnNzbC5vIGRzb193aW4zMi5vIGRzb192bXMubwotCi1TUkM9ICQoTElCU1JDKQotCi1FWEhFQURFUj0gZHNvLmgKLUhFQURFUj0JJChFWEhFQURFUikKLQotQUxMPSAgICAkKEdFTkVSQUwpICQoU1JDKSAkKEhFQURFUikKLQotdG9wOgotCShjZCAuLi8uLjsgJChNQUtFKSBESVJTPWNyeXB0byBTRElSUz0kKERJUikgc3ViX2FsbCkKLQotYWxsOglsaWIKLQotbGliOgkkKExJQk9CSikKLQkkKEFSWCkgJChMSUIpICQoTElCT0JKKQotCSQoUkFOTElCKSAkKExJQikgfHwgZWNobyBOZXZlciBtaW5kLgotCUB0b3VjaCBsaWIKLQotZmlsZXM6Ci0JJChQRVJMKSAkKFRPUCkvdXRpbC9maWxlcy5wbCBNYWtlZmlsZSA+PiAkKFRPUCkvTUlORk8KLQotbGlua3M6Ci0JQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL2luY2x1ZGUvb3BlbnNzbCAkKEVYSEVBREVSKQotCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi90ZXN0ICQoVEVTVCkKLQlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vYXBwcyAkKEFQUFMpCi0KLWluc3RhbGw6Ci0JQFsgLW4gIiQoSU5TVEFMTFRPUCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHRvcCBNYWtlZmlsZS4uLgotCUBoZWFkZXJsaXN0PSIkKEVYSEVBREVSKSI7IGZvciBpIGluICQkaGVhZGVybGlzdCA7IFwKLQlkbyAgXAotCShjcCAkJGkgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGk7IFwKLQljaG1vZCA2NDQgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGkgKTsgXAotCWRvbmU7Ci0KLXRhZ3M6Ci0JY3RhZ3MgJChTUkMpCi0KLXRlc3RzOgotCi1saW50OgotCWxpbnQgLURMSU5UICQoSU5DTFVERVMpICQoU1JDKT5mbHVmZgotCi1kZXBlbmQ6Ci0JQFsgLW4gIiQoTUFLRURFUEVORCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHVwcGVyIE1ha2VmaWxlLi4uCi0JJChNQUtFREVQRU5EKSAtLSAkKENGTEFHKSAkKElOQ0xVREVTKSAkKERFUEZMQUcpIC0tICQoUFJPR1MpICQoTElCU1JDKQotCi1kY2xlYW46Ci0JJChQRVJMKSAtcGUgJ2lmICgvXiMgRE8gTk9UIERFTEVURSBUSElTIExJTkUvKSB7cHJpbnQ7IGV4aXQoMCk7fScgJChNQUtFRklMRSkgPk1ha2VmaWxlLm5ldwotCW12IC1mIE1ha2VmaWxlLm5ldyAkKE1BS0VGSUxFKQotCi1jbGVhbjoKLQlybSAtZiAqLm8gKi8qLm8gKi5vYmogbGliIHRhZ3MgY29yZSAucHVyZSAubmZzKiAqLm9sZCAqLmJhayBmbHVmZgotCi0jIERPIE5PVCBERUxFVEUgVEhJUyBMSU5FIC0tIG1ha2UgZGVwZW5kIGRlcGVuZHMgb24gaXQuCi0KLWRzb19kbC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1kc29fZGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotZHNvX2RsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kc28uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotZHNvX2RsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotZHNvX2RsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi1kc29fZGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1kc29fZGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLWRzb19kbC5vOiAuLi9jcnlwdGxpYi5oIGRzb19kbC5jCi1kc29fZGxmY24ubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotZHNvX2RsZmNuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWRzb19kbGZjbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZHNvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLWRzb19kbGZjbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLWRzb19kbGZjbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotZHNvX2RsZmNuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1kc29fZGxmY24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1kc29fZGxmY24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBkc29fZGxmY24uYwotZHNvX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1kc29fZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kc28uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotZHNvX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLWRzb19lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLWRzb19lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1kc29fZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1kc29fZXJyLm86IGRzb19lcnIuYwotZHNvX2xpYi5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1kc29fbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWRzb19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Rzby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1kc29fbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotZHNvX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotZHNvX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLWRzb19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLWRzb19saWIubzogLi4vY3J5cHRsaWIuaCBkc29fbGliLmMKLWRzb19udWxsLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWRzb19udWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWRzb19udWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kc28uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotZHNvX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1kc29fbnVsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotZHNvX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWRzb19udWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotZHNvX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBkc29fbnVsbC5jCi1kc29fb3BlbnNzbC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1kc29fb3BlbnNzbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1kc29fb3BlbnNzbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZHNvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLWRzb19vcGVuc3NsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotZHNvX29wZW5zc2wubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWRzb19vcGVuc3NsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi1kc29fb3BlbnNzbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotZHNvX29wZW5zc2wubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1kc29fb3BlbnNzbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGRzb19vcGVuc3NsLmMKLWRzb192bXMubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotZHNvX3Ztcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1kc29fdm1zLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kc28uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotZHNvX3Ztcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLWRzb192bXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLWRzb192bXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1kc29fdm1zLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1kc29fdm1zLm86IC4uL2NyeXB0bGliLmggZHNvX3Ztcy5jCi1kc29fd2luMzIubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotZHNvX3dpbjMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWRzb193aW4zMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZHNvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLWRzb193aW4zMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLWRzb193aW4zMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotZHNvX3dpbjMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1kc29fd2luMzIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1kc29fd2luMzIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBkc29fd2luMzIuYwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Rzby9kc28uaCBiL2NyeXB0by9kc28vZHNvLmgKaW5kZXggM2U1MTkxMy4uODM5ZjJlMCAxMDA2NDQKLS0tIGEvY3J5cHRvL2Rzby9kc28uaAorKysgYi9jcnlwdG8vZHNvL2Rzby5oCkBAIC0xNzAsNiArMTcwLDExIEBACiAJLyogW0RlXUluaXRpYWxpc2F0aW9uIGhhbmRsZXJzLiAqLwogCWludCAoKmluaXQpKERTTyAqZHNvKTsKIAlpbnQgKCpmaW5pc2gpKERTTyAqZHNvKTsKKworCS8qIFJldHVybiBwYXRobmFtZSBvZiB0aGUgbW9kdWxlIGNvbnRhaW5pbmcgbG9jYXRpb24gKi8KKwlpbnQgKCpwYXRoYnlhZGRyKSh2b2lkICphZGRyLGNoYXIgKnBhdGgsaW50IHN6KTsKKwkvKiBQZXJmb3JtIGdsb2JhbCBzeW1ib2wgbG9va3VwLCBpLmUuIGFtb25nICphbGwqIG1vZHVsZXMgKi8KKwl2b2lkICooKmdsb2JhbGxvb2t1cCkoY29uc3QgY2hhciAqc3ltbmFtZSk7CiAJfSBEU09fTUVUSE9EOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE4Myw3ICsxODgsNyBAQAogCSAqIGZvciB1c2UgaW4gdGhlIGRzb19iaW5kIGhhbmRsZXIuIEFsbCBpbiBhbGwsIGxldCBlYWNoCiAJICogbWV0aG9kIGNvbnRyb2wgaXRzIG93biBkZXN0aW55LiAiSGFuZGxlcyIgYW5kIHN1Y2ggZ28gaW4KIAkgKiBhIFNUQUNLLiAqLwotCVNUQUNLICptZXRoX2RhdGE7CisJU1RBQ0tfT0Yodm9pZCkgKm1ldGhfZGF0YTsKIAlpbnQgcmVmZXJlbmNlczsKIAlpbnQgZmxhZ3M7CiAJLyogRm9yIHVzZSBieSBhcHBsaWNhdGlvbnMgZXRjIC4uLiB1c2UgdGhpcyBmb3IgeW91ciBiaXRzJ24ncGllY2VzLApAQCAtMjk2LDYgKzMwMSwzMCBAQAogLyogSWYgVk1TIGlzIGRlZmluZWQsIHVzZSBzaGFyZWQgaW1hZ2VzLiBJZiBub3QsIHJldHVybiBOVUxMLiAqLwogRFNPX01FVEhPRCAqRFNPX01FVEhPRF92bXModm9pZCk7CiAKKy8qIFRoaXMgZnVuY3Rpb24gd3JpdGVzIG51bGwtdGVybWluYXRlZCBwYXRobmFtZSBvZiBEU08gbW9kdWxlCisgKiBjb250YWluaW5nICdhZGRyJyBpbnRvICdzeicgbGFyZ2UgY2FsbGVyLXByb3ZpZGVkICdwYXRoJyBhbmQKKyAqIHJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIFtpbmNsdWRpbmcgdHJhaWxpbmcgemVyb10KKyAqIHdyaXR0ZW4gdG8gaXQuIElmICdzeicgaXMgMCBvciBuZWdhdGl2ZSwgJ3BhdGgnIGlzIGlnbm9yZWQgYW5kCisgKiByZXF1aXJlZCBhbW91bnQgb2YgY2hhcmFjaGVycyBbaW5jbHVkaW5nIHRyYWlsaW5nIHplcm9dIHRvCisgKiBhY2NvbW9kYXRlIHBhdGhuYW1lIGlzIHJldHVybmVkLiBJZiAnYWRkcicgaXMgTlVMTCwgdGhlbgorICogcGF0aG5hbWUgb2YgY3J5cHRvbGliIGl0c2VsZiBpcyByZXR1cm5lZC4gTmVnYXRpdmUgb3IgemVybworICogcmV0dXJuIHZhbHVlIGRlbm90ZXMgZXJyb3IuCisgKi8KK2ludCBEU09fcGF0aGJ5YWRkcih2b2lkICphZGRyLGNoYXIgKnBhdGgsaW50IHN6KTsKKworLyogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgdXNlZCB3aXRoIGNhdXRpb24hIEl0IGxvb2tzIHVwIHN5bWJvbHMgaW4KKyAqICphbGwqIGxvYWRlZCBtb2R1bGVzIGFuZCBpZiBtb2R1bGUgZ2V0cyB1bmxvYWRlZCBieSBzb21lYm9keSBlbHNlCisgKiBhdHRlbXB0IHRvIGRlcmVmZXJlbmNlIHRoZSBwb2ludGVyIGlzIGRvb21lZCB0byBoYXZlIGZhdGFsCisgKiBjb25zZXF1ZW5jZXMuIFByaW1hcnkgdXNhZ2UgZm9yIHRoaXMgZnVuY3Rpb24gaXMgdG8gcHJvYmUgKmNvcmUqCisgKiBzeXN0ZW0gZnVuY3Rpb25hbGl0eSwgZS5nLiBjaGVjayBpZiBnZXRuYW1laW5mbygzKSBpcyBhdmFpbGFibGUKKyAqIGF0IHJ1bi10aW1lIHdpdGhvdXQgYm90aGVyaW5nIGFib3V0IE9TLXNwZWNpZmljIGRldGFpbHMgc3VjaCBhcworICogbGliYy5zby52ZXJzaW9uaW5nIG9yIHdoZXJlIGRvZXMgaXQgYWN0dWFsbHkgcmVzaWRlOiBpbiBsaWJjCisgKiBpdHNlbGYgb3IgbGlic29ja2V0LiAqLwordm9pZCAqRFNPX2dsb2JhbF9sb29rdXAoY29uc3QgY2hhciAqbmFtZSk7CisKKy8qIElmIEJlT1MgaXMgZGVmaW5lZCwgdXNlIHNoYXJlZCBpbWFnZXMuIElmIG5vdCwgcmV0dXJuIE5VTEwuICovCitEU09fTUVUSE9EICpEU09fTUVUSE9EX2Jlb3Modm9pZCk7CisKIC8qIEJFR0lOIEVSUk9SIENPREVTICovCiAvKiBUaGUgZm9sbG93aW5nIGxpbmVzIGFyZSBhdXRvIGdlbmVyYXRlZCBieSB0aGUgc2NyaXB0IG1rZXJyLnBsLiBBbnkgY2hhbmdlcwogICogbWFkZSBhZnRlciB0aGlzIHBvaW50IG1heSBiZSBvdmVyd3JpdHRlbiB3aGVuIHRoZSBzY3JpcHQgaXMgbmV4dCBydW4uCkBAIC0zMDUsNiArMzM0LDExIEBACiAvKiBFcnJvciBjb2RlcyBmb3IgdGhlIERTTyBmdW5jdGlvbnMuICovCiAKIC8qIEZ1bmN0aW9uIGNvZGVzLiAqLworI2RlZmluZSBEU09fRl9CRU9TX0JJTkRfRlVOQwkJCQkgMTQ0CisjZGVmaW5lIERTT19GX0JFT1NfQklORF9WQVIJCQkJIDE0NQorI2RlZmluZSBEU09fRl9CRU9TX0xPQUQJCQkJCSAxNDYKKyNkZWZpbmUgRFNPX0ZfQkVPU19OQU1FX0NPTlZFUlRFUgkJCSAxNDcKKyNkZWZpbmUgRFNPX0ZfQkVPU19VTkxPQUQJCQkJIDE0OAogI2RlZmluZSBEU09fRl9ETEZDTl9CSU5EX0ZVTkMJCQkJIDEwMAogI2RlZmluZSBEU09fRl9ETEZDTl9CSU5EX1ZBUgkJCQkgMTAxCiAjZGVmaW5lIERTT19GX0RMRkNOX0xPQUQJCQkJIDEwMgpAQCAtMzI0LDIyICszNTgsMjkgQEAKICNkZWZpbmUgRFNPX0ZfRFNPX0ZSRUUJCQkJCSAxMTEKICNkZWZpbmUgRFNPX0ZfRFNPX0dFVF9GSUxFTkFNRQkJCQkgMTI3CiAjZGVmaW5lIERTT19GX0RTT19HRVRfTE9BREVEX0ZJTEVOQU1FCQkJIDEyOAorI2RlZmluZSBEU09fRl9EU09fR0xPQkFMX0xPT0tVUAkJCQkgMTM5CiAjZGVmaW5lIERTT19GX0RTT19MT0FECQkJCQkgMTEyCiAjZGVmaW5lIERTT19GX0RTT19NRVJHRQkJCQkJIDEzMgogI2RlZmluZSBEU09fRl9EU09fTkVXX01FVEhPRAkJCQkgMTEzCisjZGVmaW5lIERTT19GX0RTT19QQVRIQllBRERSCQkJCSAxNDAKICNkZWZpbmUgRFNPX0ZfRFNPX1NFVF9GSUxFTkFNRQkJCQkgMTI5CiAjZGVmaW5lIERTT19GX0RTT19TRVRfTkFNRV9DT05WRVJURVIJCQkgMTIyCiAjZGVmaW5lIERTT19GX0RTT19VUF9SRUYJCQkJIDExNAorI2RlZmluZSBEU09fRl9HTE9CQUxfTE9PS1VQX0ZVTkMJCQkgMTM4CisjZGVmaW5lIERTT19GX1BBVEhCWUFERFIJCQkJIDEzNwogI2RlZmluZSBEU09fRl9WTVNfQklORF9TWU0JCQkJIDExNQogI2RlZmluZSBEU09fRl9WTVNfTE9BRAkJCQkJIDExNgogI2RlZmluZSBEU09fRl9WTVNfTUVSR0VSCQkJCSAxMzMKICNkZWZpbmUgRFNPX0ZfVk1TX1VOTE9BRAkJCQkgMTE3CiAjZGVmaW5lIERTT19GX1dJTjMyX0JJTkRfRlVOQwkJCQkgMTE4CiAjZGVmaW5lIERTT19GX1dJTjMyX0JJTkRfVkFSCQkJCSAxMTkKKyNkZWZpbmUgRFNPX0ZfV0lOMzJfR0xPQkFMTE9PS1VQCQkJIDE0MgorI2RlZmluZSBEU09fRl9XSU4zMl9HTE9CQUxMT09LVVBfRlVOQwkJCSAxNDMKICNkZWZpbmUgRFNPX0ZfV0lOMzJfSk9JTkVSCQkJCSAxMzUKICNkZWZpbmUgRFNPX0ZfV0lOMzJfTE9BRAkJCQkgMTIwCiAjZGVmaW5lIERTT19GX1dJTjMyX01FUkdFUgkJCQkgMTM0CiAjZGVmaW5lIERTT19GX1dJTjMyX05BTUVfQ09OVkVSVEVSCQkJIDEyNQorI2RlZmluZSBEU09fRl9XSU4zMl9QQVRIQllBRERSCQkJCSAxNDEKICNkZWZpbmUgRFNPX0ZfV0lOMzJfU1BMSVRURVIJCQkJIDEzNgogI2RlZmluZSBEU09fRl9XSU4zMl9VTkxPQUQJCQkJIDEyMQogCmRpZmYgLS1naXQgYS9jcnlwdG8vZHNvL2Rzb19kbC5jIGIvY3J5cHRvL2Rzby9kc29fZGwuYwppbmRleCA0MTdhYmI2Li5mYzQyMzZiIDEwMDY0NAotLS0gYS9jcnlwdG8vZHNvL2Rzb19kbC5jCisrKyBiL2NyeXB0by9kc28vZHNvX2RsLmMKQEAgLTg1LDYgKzg1LDggQEAKICNlbmRpZgogc3RhdGljIGNoYXIgKmRsX25hbWVfY29udmVydGVyKERTTyAqZHNvLCBjb25zdCBjaGFyICpmaWxlbmFtZSk7CiBzdGF0aWMgY2hhciAqZGxfbWVyZ2VyKERTTyAqZHNvLCBjb25zdCBjaGFyICpmaWxlc3BlYzEsIGNvbnN0IGNoYXIgKmZpbGVzcGVjMik7CitzdGF0aWMgaW50IGRsX3BhdGhieWFkZHIodm9pZCAqYWRkcixjaGFyICpwYXRoLGludCBzeik7CitzdGF0aWMgdm9pZCAqZGxfZ2xvYmFsbG9va3VwKGNvbnN0IGNoYXIgKm5hbWUpOwogCiBzdGF0aWMgRFNPX01FVEhPRCBkc29fbWV0aF9kbCA9IHsKIAkiT3BlblNTTCAnZGwnIHNoYXJlZCBsaWJyYXJ5IG1ldGhvZCIsCkBAIC0xMDEsNyArMTAzLDkgQEAKIAlkbF9uYW1lX2NvbnZlcnRlciwKIAlkbF9tZXJnZXIsCiAJTlVMTCwgLyogaW5pdCAqLwotCU5VTEwgIC8qIGZpbmlzaCAqLworCU5VTEwsIC8qIGZpbmlzaCAqLworCWRsX3BhdGhieWFkZHIsCisJZGxfZ2xvYmFsbG9va3VwCiAJfTsKIAogRFNPX01FVEhPRCAqRFNPX01FVEhPRF9kbCh2b2lkKQpAQCAtMzUwLDQgKzM1NCw0MCBAQAogCXJldHVybih0cmFuc2xhdGVkKTsKIAl9CiAKK3N0YXRpYyBpbnQgZGxfcGF0aGJ5YWRkcih2b2lkICphZGRyLGNoYXIgKnBhdGgsaW50IHN6KQorCXsKKwlzdHJ1Y3Qgc2hsX2Rlc2NyaXB0b3IgaW5mOworCWludCBpLGxlbjsKKworCWlmIChhZGRyID09IE5VTEwpCisJCXsKKwkJdW5pb24JeyBpbnQoKmYpKHZvaWQqLGNoYXIqLGludCk7IHZvaWQgKnA7IH0gdCA9CisJCQl7IGRsX3BhdGhieWFkZHIgfTsKKwkJYWRkciA9IHQucDsKKwkJfQorCisJZm9yIChpPS0xO3NobF9nZXRfcihpLCZpbmYpPT0wO2krKykKKwkJeworCQlpZiAoKChzaXplX3QpYWRkciA+PSBpbmYudHN0YXJ0ICYmIChzaXplX3QpYWRkciA8IGluZi50ZW5kKSB8fAorCQkgICAgKChzaXplX3QpYWRkciA+PSBpbmYuZHN0YXJ0ICYmIChzaXplX3QpYWRkciA8IGluZi5kZW5kKSkKKwkJCXsKKwkJCWxlbiA9IChpbnQpc3RybGVuKGluZi5maWxlbmFtZSk7CisJCQlpZiAoc3ogPD0gMCkgcmV0dXJuIGxlbisxOworCQkJaWYgKGxlbiA+PSBzeikgbGVuPXN6LTE7CisJCQltZW1jcHkocGF0aCxpbmYuZmlsZW5hbWUsbGVuKTsKKwkJCXBhdGhbbGVuKytdID0gMDsKKwkJCXJldHVybiBsZW47CisJCQl9CisJCX0KKworCXJldHVybiAtMTsKKwl9CisKK3N0YXRpYyB2b2lkICpkbF9nbG9iYWxsb29rdXAoY29uc3QgY2hhciAqbmFtZSkKKwl7CisJdm9pZCAqcmV0OworCXNobF90IGggPSBOVUxMOworCisJcmV0dXJuIHNobF9maW5kc3ltKCZoLG5hbWUsVFlQRV9VTkRFRklORUQsJnJldCkgPyBOVUxMIDogcmV0OworCX0KICNlbmRpZiAvKiBEU09fREwgKi8KZGlmZiAtLWdpdCBhL2NyeXB0by9kc28vZHNvX2RsZmNuLmMgYi9jcnlwdG8vZHNvL2Rzb19kbGZjbi5jCmluZGV4IGQ5MWU4MjEuLjE0YmQzMjIgMTAwNjQ0Ci0tLSBhL2NyeXB0by9kc28vZHNvX2RsZmNuLmMKKysrIGIvY3J5cHRvL2Rzby9kc29fZGxmY24uYwpAQCAtNTYsNiArNTYsMTYgQEAKICAqCiAgKi8KIAorLyogV2UgbmVlZCB0byBkbyB0aGlzIGVhcmx5LCBiZWNhdXNlIHN0ZGlvLmggaW5jbHVkZXMgdGhlIGhlYWRlciBmaWxlcworICAgdGhhdCBoYW5kbGUgX0dOVV9TT1VSQ0UgYW5kIG90aGVyIHNpbWlsYXIgbWFjcm9zLiAgRGVmaW5pbmcgaXQgbGF0ZXIKKyAgIGlzIHNpbXBseSB0b28gbGF0ZSwgYmVjYXVzZSB0aG9zZSBoZWFkZXJzIGFyZSBwcm90ZWN0ZWQgZnJvbSByZS0KKyAgIGluY2x1c2lvbi4gICovCisjaWZkZWYgX19saW51eAorIyBpZm5kZWYgX0dOVV9TT1VSQ0UKKyMgIGRlZmluZSBfR05VX1NPVVJDRQkvKiBtYWtlIHN1cmUgZGxhZGRyIGlzIGRlY2xhcmVkICovCisjIGVuZGlmCisjZW5kaWYKKwogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSAiY3J5cHRsaWIuaCIKICNpbmNsdWRlIDxvcGVuc3NsL2Rzby5oPgpAQCAtNjgsNyArNzgsMTYgQEAKICNlbHNlCiAKICNpZmRlZiBIQVZFX0RMRkNOX0gKLSNpbmNsdWRlIDxkbGZjbi5oPgorIyBpZmRlZiBfX29zZl9fCisjICBkZWZpbmUgX19FWFRFTlNJT05TX18KKyMgZW5kaWYKKyMgaW5jbHVkZSA8ZGxmY24uaD4KKyMgZGVmaW5lIEhBVkVfRExJTkZPIDEKKyMgaWYgZGVmaW5lZChfQUlYKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IFwKKyAgICAgZGVmaW5lZChfX1NDT19WRVJTSU9OX18pIHx8IGRlZmluZWQoX1NDT19FTEYpIHx8IFwKKyAgICAgKGRlZmluZWQoX19PcGVuQlNEX18pICYmICFkZWZpbmVkKFJUTERfU0VMRikpCisjICB1bmRlZiBIQVZFX0RMSU5GTworIyBlbmRpZgogI2VuZGlmCiAKIC8qIFBhcnQgb2YgdGhlIGhhY2sgaW4gImRsZmNuX2xvYWQiIC4uLiAqLwpAQCAtODcsNiArMTA2LDggQEAKIHN0YXRpYyBjaGFyICpkbGZjbl9uYW1lX2NvbnZlcnRlcihEU08gKmRzbywgY29uc3QgY2hhciAqZmlsZW5hbWUpOwogc3RhdGljIGNoYXIgKmRsZmNuX21lcmdlcihEU08gKmRzbywgY29uc3QgY2hhciAqZmlsZXNwZWMxLAogCWNvbnN0IGNoYXIgKmZpbGVzcGVjMik7CitzdGF0aWMgaW50IGRsZmNuX3BhdGhieWFkZHIodm9pZCAqYWRkcixjaGFyICpwYXRoLGludCBzeik7CitzdGF0aWMgdm9pZCAqZGxmY25fZ2xvYmFsbG9va3VwKGNvbnN0IGNoYXIgKm5hbWUpOwogCiBzdGF0aWMgRFNPX01FVEhPRCBkc29fbWV0aF9kbGZjbiA9IHsKIAkiT3BlblNTTCAnZGxmY24nIHNoYXJlZCBsaWJyYXJ5IG1ldGhvZCIsCkBAIC0xMDMsNyArMTI0LDkgQEAKIAlkbGZjbl9uYW1lX2NvbnZlcnRlciwKIAlkbGZjbl9tZXJnZXIsCiAJTlVMTCwgLyogaW5pdCAqLwotCU5VTEwgIC8qIGZpbmlzaCAqLworCU5VTEwsIC8qIGZpbmlzaCAqLworCWRsZmNuX3BhdGhieWFkZHIsCisJZGxmY25fZ2xvYmFsbG9va3VwCiAJfTsKIAogRFNPX01FVEhPRCAqRFNPX01FVEhPRF9kbGZjbih2b2lkKQpAQCAtMTYzLDcgKzE4Niw3IEBACiAJCUVSUl9hZGRfZXJyb3JfZGF0YSg0LCAiZmlsZW5hbWUoIiwgZmlsZW5hbWUsICIpOiAiLCBkbGVycm9yKCkpOwogCQlnb3RvIGVycjsKIAkJfQotCWlmKCFza19wdXNoKGRzby0+bWV0aF9kYXRhLCAoY2hhciAqKXB0cikpCisJaWYoIXNrX3ZvaWRfcHVzaChkc28tPm1ldGhfZGF0YSwgKGNoYXIgKilwdHIpKQogCQl7CiAJCURTT2VycihEU09fRl9ETEZDTl9MT0FELERTT19SX1NUQUNLX0VSUk9SKTsKIAkJZ290byBlcnI7CkBAIC0xODgsMTUgKzIxMSwxNSBAQAogCQlEU09lcnIoRFNPX0ZfRExGQ05fVU5MT0FELEVSUl9SX1BBU1NFRF9OVUxMX1BBUkFNRVRFUik7CiAJCXJldHVybigwKTsKIAkJfQotCWlmKHNrX251bShkc28tPm1ldGhfZGF0YSkgPCAxKQorCWlmKHNrX3ZvaWRfbnVtKGRzby0+bWV0aF9kYXRhKSA8IDEpCiAJCXJldHVybigxKTsKLQlwdHIgPSAodm9pZCAqKXNrX3BvcChkc28tPm1ldGhfZGF0YSk7CisJcHRyID0gc2tfdm9pZF9wb3AoZHNvLT5tZXRoX2RhdGEpOwogCWlmKHB0ciA9PSBOVUxMKQogCQl7CiAJCURTT2VycihEU09fRl9ETEZDTl9VTkxPQUQsRFNPX1JfTlVMTF9IQU5ETEUpOwogCQkvKiBTaG91bGQgcHVzaCB0aGUgdmFsdWUgYmFjayBvbnRvIHRoZSBzdGFjayBpbgogCQkgKiBjYXNlIG9mIGEgcmV0cnkuICovCi0JCXNrX3B1c2goZHNvLT5tZXRoX2RhdGEsIChjaGFyICopcHRyKTsKKwkJc2tfdm9pZF9wdXNoKGRzby0+bWV0aF9kYXRhLCBwdHIpOwogCQlyZXR1cm4oMCk7CiAJCX0KIAkvKiBGb3Igbm93IEknbSBub3QgYXdhcmUgb2YgYW55IGVycm9ycyBhc3NvY2lhdGVkIHdpdGggZGxjbG9zZSgpICovCkBAIC0yMTMsMTIgKzIzNiwxMiBAQAogCQlEU09lcnIoRFNPX0ZfRExGQ05fQklORF9WQVIsRVJSX1JfUEFTU0VEX05VTExfUEFSQU1FVEVSKTsKIAkJcmV0dXJuKE5VTEwpOwogCQl9Ci0JaWYoc2tfbnVtKGRzby0+bWV0aF9kYXRhKSA8IDEpCisJaWYoc2tfdm9pZF9udW0oZHNvLT5tZXRoX2RhdGEpIDwgMSkKIAkJewogCQlEU09lcnIoRFNPX0ZfRExGQ05fQklORF9WQVIsRFNPX1JfU1RBQ0tfRVJST1IpOwogCQlyZXR1cm4oTlVMTCk7CiAJCX0KLQlwdHIgPSAodm9pZCAqKXNrX3ZhbHVlKGRzby0+bWV0aF9kYXRhLCBza19udW0oZHNvLT5tZXRoX2RhdGEpIC0gMSk7CisJcHRyID0gc2tfdm9pZF92YWx1ZShkc28tPm1ldGhfZGF0YSwgc2tfdm9pZF9udW0oZHNvLT5tZXRoX2RhdGEpIC0gMSk7CiAJaWYocHRyID09IE5VTEwpCiAJCXsKIAkJRFNPZXJyKERTT19GX0RMRkNOX0JJTkRfVkFSLERTT19SX05VTExfSEFORExFKTsKQEAgLTI0NywxMiArMjcwLDEyIEBACiAJCURTT2VycihEU09fRl9ETEZDTl9CSU5EX0ZVTkMsRVJSX1JfUEFTU0VEX05VTExfUEFSQU1FVEVSKTsKIAkJcmV0dXJuKE5VTEwpOwogCQl9Ci0JaWYoc2tfbnVtKGRzby0+bWV0aF9kYXRhKSA8IDEpCisJaWYoc2tfdm9pZF9udW0oZHNvLT5tZXRoX2RhdGEpIDwgMSkKIAkJewogCQlEU09lcnIoRFNPX0ZfRExGQ05fQklORF9GVU5DLERTT19SX1NUQUNLX0VSUk9SKTsKIAkJcmV0dXJuKE5VTEwpOwogCQl9Ci0JcHRyID0gKHZvaWQgKilza192YWx1ZShkc28tPm1ldGhfZGF0YSwgc2tfbnVtKGRzby0+bWV0aF9kYXRhKSAtIDEpOworCXB0ciA9IHNrX3ZvaWRfdmFsdWUoZHNvLT5tZXRoX2RhdGEsIHNrX3ZvaWRfbnVtKGRzby0+bWV0aF9kYXRhKSAtIDEpOwogCWlmKHB0ciA9PSBOVUxMKQogCQl7CiAJCURTT2VycihEU09fRl9ETEZDTl9CSU5EX0ZVTkMsRFNPX1JfTlVMTF9IQU5ETEUpOwpAQCAtMjgxLDEzICszMDQsMTIgQEAKIAkJfQogCS8qIElmIHRoZSBmaXJzdCBmaWxlIHNwZWNpZmljYXRpb24gaXMgYSByb290ZWQgcGF0aCwgaXQgcnVsZXMuCiAJICAgc2FtZSBnb2VzIGlmIHRoZSBzZWNvbmQgZmlsZSBzcGVjaWZpY2F0aW9uIGlzIG1pc3NpbmcuICovCi0JaWYgKCFmaWxlc3BlYzIgfHwgZmlsZXNwZWMxWzBdID09ICcvJykKKwlpZiAoIWZpbGVzcGVjMiB8fCAoZmlsZXNwZWMxICE9IE5VTEwgJiYgZmlsZXNwZWMxWzBdID09ICcvJykpCiAJCXsKIAkJbWVyZ2VkID0gT1BFTlNTTF9tYWxsb2Moc3RybGVuKGZpbGVzcGVjMSkgKyAxKTsKIAkJaWYoIW1lcmdlZCkKIAkJCXsKLQkJCURTT2VycihEU09fRl9ETEZDTl9NRVJHRVIsCi0JCQkJRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOworCQkJRFNPZXJyKERTT19GX0RMRkNOX01FUkdFUiwgRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwogCQkJcmV0dXJuKE5VTEwpOwogCQkJfQogCQlzdHJjcHkobWVyZ2VkLCBmaWxlc3BlYzEpOwpAQCAtMzEzLDcgKzMzNSw3IEBACiAJCXsKIAkJaW50IHNwZWMybGVuLCBsZW47CiAKLQkJc3BlYzJsZW4gPSAoZmlsZXNwZWMyID8gc3RybGVuKGZpbGVzcGVjMikgOiAwKTsKKwkJc3BlYzJsZW4gPSBzdHJsZW4oZmlsZXNwZWMyKTsKIAkJbGVuID0gc3BlYzJsZW4gKyAoZmlsZXNwZWMxID8gc3RybGVuKGZpbGVzcGVjMSkgOiAwKTsKIAogCQlpZihmaWxlc3BlYzIgJiYgZmlsZXNwZWMyW3NwZWMybGVuIC0gMV0gPT0gJy8nKQpAQCAtMzc4LDQgKzQwMCw4MyBAQAogCXJldHVybih0cmFuc2xhdGVkKTsKIAl9CiAKKyNpZmRlZiBfX3NnaQorLyoKK1RoaXMgaXMgYSBxdW90ZSBmcm9tIElSSVggbWFudWFsIGZvciBkbGFkZHIoM2MpOgorCisgICAgIDxkbGZjbi5oPiBkb2VzIG5vdCBjb250YWluIGEgcHJvdG90eXBlIGZvciBkbGFkZHIgb3IgZGVmaW5pdGlvbiBvZgorICAgICBEbF9pbmZvLiAgVGhlICNpbmNsdWRlIDxkbGZjbi5oPiAgaW4gdGhlIFNZTk9QU0lTIGxpbmUgaXMgdHJhZGl0aW9uYWwsCisgICAgIGJ1dCBjb250YWlucyBubyBkbGFkZHIgcHJvdG90eXBlIGFuZCBubyBJUklYIGxpYnJhcnkgY29udGFpbnMgYW4KKyAgICAgaW1wbGVtZW50YXRpb24uICBXcml0ZSB5b3VyIG93biBkZWNsYXJhdGlvbiBiYXNlZCBvbiB0aGUgY29kZSBiZWxvdy4KKworICAgICBUaGUgZm9sbG93aW5nIGNvZGUgaXMgZGVwZW5kZW50IG9uIGludGVybmFsIGludGVyZmFjZXMgdGhhdCBhcmUgbm90CisgICAgIHBhcnQgb2YgdGhlIElSSVggY29tcGF0aWJpbGl0eSBndWFyYW50ZWU7IGhvd2V2ZXIsIHRoZXJlIGlzIG5vIGZ1dHVyZQorICAgICBpbnRlbnRpb24gdG8gY2hhbmdlIHRoaXMgaW50ZXJmYWNlLCBzbyBvbiBhIHByYWN0aWNhbCBsZXZlbCwgdGhlIGNvZGUKKyAgICAgYmVsb3cgaXMgc2FmZSB0byB1c2Ugb24gSVJJWC4KKyovCisjaW5jbHVkZSA8cmxkX2ludGVyZmFjZS5oPgorI2lmbmRlZiBfUkxEX0lOVEVSRkFDRV9ETEZDTl9IX0RMQUREUgorI2RlZmluZSBfUkxEX0lOVEVSRkFDRV9ETEZDTl9IX0RMQUREUgordHlwZWRlZiBzdHJ1Y3QgRGxfaW5mbyB7CisgICAgY29uc3QgY2hhciAqIGRsaV9mbmFtZTsKKyAgICB2b2lkICAgICAgICogZGxpX2ZiYXNlOworICAgIGNvbnN0IGNoYXIgKiBkbGlfc25hbWU7CisgICAgdm9pZCAgICAgICAqIGRsaV9zYWRkcjsKKyAgICBpbnQgICAgICAgICAgZGxpX3ZlcnNpb247CisgICAgaW50ICAgICAgICAgIGRsaV9yZXNlcnZlZDE7CisgICAgbG9uZyAgICAgICAgIGRsaV9yZXNlcnZlZFs0XTsKK30gRGxfaW5mbzsKKyNlbHNlCit0eXBlZGVmIHN0cnVjdCBEbF9pbmZvIERsX2luZm87CisjZW5kaWYKKyNkZWZpbmUgX1JMRF9ETEFERFIgICAgICAgICAgICAgMTQKKworc3RhdGljIGludCBkbGFkZHIodm9pZCAqYWRkcmVzcywgRGxfaW5mbyAqZGwpCit7CisJdm9pZCAqdjsKKwl2ID0gX3JsZF9uZXdfaW50ZXJmYWNlKF9STERfRExBRERSLGFkZHJlc3MsZGwpOworCXJldHVybiAoaW50KXY7Cit9CisjZW5kaWYgLyogX19zZ2kgKi8KKworc3RhdGljIGludCBkbGZjbl9wYXRoYnlhZGRyKHZvaWQgKmFkZHIsY2hhciAqcGF0aCxpbnQgc3opCisJeworI2lmZGVmIEhBVkVfRExJTkZPCisJRGxfaW5mbyBkbGk7CisJaW50IGxlbjsKKworCWlmIChhZGRyID09IE5VTEwpCisJCXsKKwkJdW5pb24JeyBpbnQoKmYpKHZvaWQqLGNoYXIqLGludCk7IHZvaWQgKnA7IH0gdCA9CisJCQl7IGRsZmNuX3BhdGhieWFkZHIgfTsKKwkJYWRkciA9IHQucDsKKwkJfQorCisJaWYgKGRsYWRkcihhZGRyLCZkbGkpKQorCQl7CisJCWxlbiA9IChpbnQpc3RybGVuKGRsaS5kbGlfZm5hbWUpOworCQlpZiAoc3ogPD0gMCkgcmV0dXJuIGxlbisxOworCQlpZiAobGVuID49IHN6KSBsZW49c3otMTsKKwkJbWVtY3B5KHBhdGgsZGxpLmRsaV9mbmFtZSxsZW4pOworCQlwYXRoW2xlbisrXT0wOworCQlyZXR1cm4gbGVuOworCQl9CisKKwlFUlJfYWRkX2Vycm9yX2RhdGEoNCwgImRsZmNuX3BhdGhieWFkZHIoKTogIiwgZGxlcnJvcigpKTsKKyNlbmRpZgorCXJldHVybiAtMTsKKwl9CisKK3N0YXRpYyB2b2lkICpkbGZjbl9nbG9iYWxsb29rdXAoY29uc3QgY2hhciAqbmFtZSkKKwl7CisJdm9pZCAqcmV0ID0gTlVMTCwqaGFuZGxlID0gZGxvcGVuKE5VTEwsUlRMRF9MQVpZKTsKKwkKKwlpZiAoaGFuZGxlKQorCQl7CisJCXJldCA9IGRsc3ltKGhhbmRsZSxuYW1lKTsKKwkJZGxjbG9zZShoYW5kbGUpOworCQl9CisKKwlyZXR1cm4gcmV0OworCX0KICNlbmRpZiAvKiBEU09fRExGQ04gKi8KZGlmZiAtLWdpdCBhL2NyeXB0by9kc28vZHNvX2Vyci5jIGIvY3J5cHRvL2Rzby9kc29fZXJyLmMKaW5kZXggYThiMGEyMS4uMmJiMDdjMiAxMDA2NDQKLS0tIGEvY3J5cHRvL2Rzby9kc29fZXJyLmMKKysrIGIvY3J5cHRvL2Rzby9kc29fZXJyLmMKQEAgLTEsNiArMSw2IEBACiAvKiBjcnlwdG8vZHNvL2Rzb19lcnIuYyAqLwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA1IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDYgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcwLDYgKzcwLDExIEBACiAKIHN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgRFNPX3N0cl9mdW5jdHNbXT0KIAl7Cit7RVJSX0ZVTkMoRFNPX0ZfQkVPU19CSU5EX0ZVTkMpLAkiQkVPU19CSU5EX0ZVTkMifSwKK3tFUlJfRlVOQyhEU09fRl9CRU9TX0JJTkRfVkFSKSwJIkJFT1NfQklORF9WQVIifSwKK3tFUlJfRlVOQyhEU09fRl9CRU9TX0xPQUQpLAkiQkVPU19MT0FEIn0sCit7RVJSX0ZVTkMoRFNPX0ZfQkVPU19OQU1FX0NPTlZFUlRFUiksCSJCRU9TX05BTUVfQ09OVkVSVEVSIn0sCit7RVJSX0ZVTkMoRFNPX0ZfQkVPU19VTkxPQUQpLAkiQkVPU19VTkxPQUQifSwKIHtFUlJfRlVOQyhEU09fRl9ETEZDTl9CSU5EX0ZVTkMpLAkiRExGQ05fQklORF9GVU5DIn0sCiB7RVJSX0ZVTkMoRFNPX0ZfRExGQ05fQklORF9WQVIpLAkiRExGQ05fQklORF9WQVIifSwKIHtFUlJfRlVOQyhEU09fRl9ETEZDTl9MT0FEKSwJIkRMRkNOX0xPQUQifSwKQEAgLTg5LDIyICs5NCwyOSBAQAoge0VSUl9GVU5DKERTT19GX0RTT19GUkVFKSwJIkRTT19mcmVlIn0sCiB7RVJSX0ZVTkMoRFNPX0ZfRFNPX0dFVF9GSUxFTkFNRSksCSJEU09fZ2V0X2ZpbGVuYW1lIn0sCiB7RVJSX0ZVTkMoRFNPX0ZfRFNPX0dFVF9MT0FERURfRklMRU5BTUUpLAkiRFNPX2dldF9sb2FkZWRfZmlsZW5hbWUifSwKK3tFUlJfRlVOQyhEU09fRl9EU09fR0xPQkFMX0xPT0tVUCksCSJEU09fZ2xvYmFsX2xvb2t1cCJ9LAoge0VSUl9GVU5DKERTT19GX0RTT19MT0FEKSwJIkRTT19sb2FkIn0sCiB7RVJSX0ZVTkMoRFNPX0ZfRFNPX01FUkdFKSwJIkRTT19tZXJnZSJ9LAoge0VSUl9GVU5DKERTT19GX0RTT19ORVdfTUVUSE9EKSwJIkRTT19uZXdfbWV0aG9kIn0sCit7RVJSX0ZVTkMoRFNPX0ZfRFNPX1BBVEhCWUFERFIpLAkiRFNPX3BhdGhieWFkZHIifSwKIHtFUlJfRlVOQyhEU09fRl9EU09fU0VUX0ZJTEVOQU1FKSwJIkRTT19zZXRfZmlsZW5hbWUifSwKIHtFUlJfRlVOQyhEU09fRl9EU09fU0VUX05BTUVfQ09OVkVSVEVSKSwJIkRTT19zZXRfbmFtZV9jb252ZXJ0ZXIifSwKIHtFUlJfRlVOQyhEU09fRl9EU09fVVBfUkVGKSwJIkRTT191cF9yZWYifSwKK3tFUlJfRlVOQyhEU09fRl9HTE9CQUxfTE9PS1VQX0ZVTkMpLAkiR0xPQkFMX0xPT0tVUF9GVU5DIn0sCit7RVJSX0ZVTkMoRFNPX0ZfUEFUSEJZQUREUiksCSJQQVRIQllBRERSIn0sCiB7RVJSX0ZVTkMoRFNPX0ZfVk1TX0JJTkRfU1lNKSwJIlZNU19CSU5EX1NZTSJ9LAoge0VSUl9GVU5DKERTT19GX1ZNU19MT0FEKSwJIlZNU19MT0FEIn0sCiB7RVJSX0ZVTkMoRFNPX0ZfVk1TX01FUkdFUiksCSJWTVNfTUVSR0VSIn0sCiB7RVJSX0ZVTkMoRFNPX0ZfVk1TX1VOTE9BRCksCSJWTVNfVU5MT0FEIn0sCiB7RVJSX0ZVTkMoRFNPX0ZfV0lOMzJfQklORF9GVU5DKSwJIldJTjMyX0JJTkRfRlVOQyJ9LAoge0VSUl9GVU5DKERTT19GX1dJTjMyX0JJTkRfVkFSKSwJIldJTjMyX0JJTkRfVkFSIn0sCit7RVJSX0ZVTkMoRFNPX0ZfV0lOMzJfR0xPQkFMTE9PS1VQKSwJIldJTjMyX0dMT0JBTExPT0tVUCJ9LAore0VSUl9GVU5DKERTT19GX1dJTjMyX0dMT0JBTExPT0tVUF9GVU5DKSwJIldJTjMyX0dMT0JBTExPT0tVUF9GVU5DIn0sCiB7RVJSX0ZVTkMoRFNPX0ZfV0lOMzJfSk9JTkVSKSwJIldJTjMyX0pPSU5FUiJ9LAoge0VSUl9GVU5DKERTT19GX1dJTjMyX0xPQUQpLAkiV0lOMzJfTE9BRCJ9LAoge0VSUl9GVU5DKERTT19GX1dJTjMyX01FUkdFUiksCSJXSU4zMl9NRVJHRVIifSwKIHtFUlJfRlVOQyhEU09fRl9XSU4zMl9OQU1FX0NPTlZFUlRFUiksCSJXSU4zMl9OQU1FX0NPTlZFUlRFUiJ9LAore0VSUl9GVU5DKERTT19GX1dJTjMyX1BBVEhCWUFERFIpLAkiV0lOMzJfUEFUSEJZQUREUiJ9LAoge0VSUl9GVU5DKERTT19GX1dJTjMyX1NQTElUVEVSKSwJIldJTjMyX1NQTElUVEVSIn0sCiB7RVJSX0ZVTkMoRFNPX0ZfV0lOMzJfVU5MT0FEKSwJIldJTjMyX1VOTE9BRCJ9LAogezAsTlVMTH0KZGlmZiAtLWdpdCBhL2NyeXB0by9kc28vZHNvX2xpYi5jIGIvY3J5cHRvL2Rzby9kc29fbGliLmMKaW5kZXggNDliZGQ3MS4uOGExNWI3OSAxMDA2NDQKLS0tIGEvY3J5cHRvL2Rzby9kc29fbGliLmMKKysrIGIvY3J5cHRvL2Rzby9kc29fbGliLmMKQEAgLTEwNyw3ICsxMDcsNyBAQAogCQlyZXR1cm4oTlVMTCk7CiAJCX0KIAltZW1zZXQocmV0LCAwLCBzaXplb2YoRFNPKSk7Ci0JcmV0LT5tZXRoX2RhdGEgPSBza19uZXdfbnVsbCgpOworCXJldC0+bWV0aF9kYXRhID0gc2tfdm9pZF9uZXdfbnVsbCgpOwogCWlmKHJldC0+bWV0aF9kYXRhID09IE5VTEwpCiAJCXsKIAkJLyogc2tfbmV3IGRvZXNuJ3QgZ2VuZXJhdGUgYW55IGVycm9ycyBzbyB3ZSBkbyAqLwpAQCAtMTYzLDcgKzE2Myw3IEBACiAJCXJldHVybigwKTsKIAkJfQogCQotCXNrX2ZyZWUoZHNvLT5tZXRoX2RhdGEpOworCXNrX3ZvaWRfZnJlZShkc28tPm1ldGhfZGF0YSk7CiAJaWYoZHNvLT5maWxlbmFtZSAhPSBOVUxMKQogCQlPUEVOU1NMX2ZyZWUoZHNvLT5maWxlbmFtZSk7CiAJaWYoZHNvLT5sb2FkZWRfZmlsZW5hbWUgIT0gTlVMTCkKQEAgLTM5OSwxMyArMzk5LDYgQEAKIAkJRFNPZXJyKERTT19GX0RTT19NRVJHRSxFUlJfUl9QQVNTRURfTlVMTF9QQVJBTUVURVIpOwogCQlyZXR1cm4oTlVMTCk7CiAJCX0KLQlpZihmaWxlc3BlYzEgPT0gTlVMTCkKLQkJZmlsZXNwZWMxID0gZHNvLT5maWxlbmFtZTsKLQlpZihmaWxlc3BlYzEgPT0gTlVMTCkKLQkJewotCQlEU09lcnIoRFNPX0ZfRFNPX01FUkdFLERTT19SX05PX0ZJTEVfU1BFQ0lGSUNBVElPTik7Ci0JCXJldHVybihOVUxMKTsKLQkJfQogCWlmKChkc28tPmZsYWdzICYgRFNPX0ZMQUdfTk9fTkFNRV9UUkFOU0xBVElPTikgPT0gMCkKIAkJewogCQlpZihkc28tPm1lcmdlciAhPSBOVUxMKQpAQCAtNDY0LDMgKzQ1NywyNyBAQAogCQl9CiAJcmV0dXJuKGRzby0+bG9hZGVkX2ZpbGVuYW1lKTsKIAl9CisKK2ludCBEU09fcGF0aGJ5YWRkcih2b2lkICphZGRyLGNoYXIgKnBhdGgsaW50IHN6KQorCXsKKwlEU09fTUVUSE9EICptZXRoID0gZGVmYXVsdF9EU09fbWV0aDsKKwlpZiAobWV0aCA9PSBOVUxMKSBtZXRoID0gRFNPX01FVEhPRF9vcGVuc3NsKCk7CisJaWYgKG1ldGgtPnBhdGhieWFkZHIgPT0gTlVMTCkKKwkJeworCQlEU09lcnIoRFNPX0ZfRFNPX1BBVEhCWUFERFIsRFNPX1JfVU5TVVBQT1JURUQpOworCQlyZXR1cm4gLTE7CisJCX0KKwlyZXR1cm4gKCptZXRoLT5wYXRoYnlhZGRyKShhZGRyLHBhdGgsc3opOworCX0KKwordm9pZCAqRFNPX2dsb2JhbF9sb29rdXAoY29uc3QgY2hhciAqbmFtZSkKKwl7CisJRFNPX01FVEhPRCAqbWV0aCA9IGRlZmF1bHRfRFNPX21ldGg7CisJaWYgKG1ldGggPT0gTlVMTCkgbWV0aCA9IERTT19NRVRIT0Rfb3BlbnNzbCgpOworCWlmIChtZXRoLT5nbG9iYWxsb29rdXAgPT0gTlVMTCkKKwkJeworCQlEU09lcnIoRFNPX0ZfRFNPX0dMT0JBTF9MT09LVVAsRFNPX1JfVU5TVVBQT1JURUQpOworCQlyZXR1cm4gTlVMTDsKKwkJfQorCXJldHVybiAoKm1ldGgtPmdsb2JhbGxvb2t1cCkobmFtZSk7CisJfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Rzby9kc29fbnVsbC5jIGIvY3J5cHRvL2Rzby9kc29fbnVsbC5jCmluZGV4IDQ5NzI5ODQuLjQ5ZDg0MmQgMTAwNjQ0Ci0tLSBhL2NyeXB0by9kc28vZHNvX251bGwuYworKysgYi9jcnlwdG8vZHNvL2Rzb19udWxsLmMKQEAgLTc4LDcgKzc4LDkgQEAKIAlOVUxMLCAvKiBkc29fbmFtZV9jb252ZXJ0ZXIgKi8KIAlOVUxMLCAvKiBkc29fbWVyZ2VyICovCiAJTlVMTCwgLyogaW5pdCAqLwotCU5VTEwgIC8qIGZpbmlzaCAqLworCU5VTEwsIC8qIGZpbmlzaCAqLworCU5VTEwsIC8qIHBhdGhieWFkZHIgKi8KKwlOVUxMICAvKiBnbG9iYWxsb29rdXAgKi8KIAl9OwogCiBEU09fTUVUSE9EICpEU09fTUVUSE9EX251bGwodm9pZCkKZGlmZiAtLWdpdCBhL2NyeXB0by9kc28vZHNvX29wZW5zc2wuYyBiL2NyeXB0by9kc28vZHNvX29wZW5zc2wuYwppbmRleCBhNDM5NWViLi5iMTdlOGU4IDEwMDY0NAotLS0gYS9jcnlwdG8vZHNvL2Rzb19vcGVuc3NsLmMKKysrIGIvY3J5cHRvL2Rzby9kc29fb3BlbnNzbC5jCkBAIC03NCw2ICs3NCw4IEBACiAJcmV0dXJuKERTT19NRVRIT0Rfd2luMzIoKSk7CiAjZWxpZiBkZWZpbmVkKERTT19WTVMpCiAJcmV0dXJuKERTT19NRVRIT0Rfdm1zKCkpOworI2VsaWYgZGVmaW5lZChEU09fQkVPUykKKwlyZXR1cm4oRFNPX01FVEhPRF9iZW9zKCkpOwogI2Vsc2UKIAlyZXR1cm4oRFNPX01FVEhPRF9udWxsKCkpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9jcnlwdG8vZHNvL2Rzb192bXMuYyBiL2NyeXB0by9kc28vZHNvX3Ztcy5jCmluZGV4IDJjNDM0ZWUuLjMyMTUxMjcgMTAwNjQ0Ci0tLSBhL2NyeXB0by9kc28vZHNvX3Ztcy5jCisrKyBiL2NyeXB0by9kc28vZHNvX3Ztcy5jCkBAIC0yMTUsNyArMjE1LDcgQEAKIAlwLT5pbWFnZW5hbWVfZHNjLmRzYyRiX2NsYXNzID0gRFNDJEtfQ0xBU1NfUzsKIAlwLT5pbWFnZW5hbWVfZHNjLmRzYyRhX3BvaW50ZXIgPSBwLT5pbWFnZW5hbWU7CiAKLQlpZighc2tfcHVzaChkc28tPm1ldGhfZGF0YSwgKGNoYXIgKilwKSkKKwlpZighc2tfdm9pZF9wdXNoKGRzby0+bWV0aF9kYXRhLCAoY2hhciAqKXApKQogCQl7CiAJCURTT2VycihEU09fRl9WTVNfTE9BRCxEU09fUl9TVEFDS19FUlJPUik7CiAJCWdvdG8gZXJyOwpAQCAtMjQ1LDkgKzI0NSw5IEBACiAJCURTT2VycihEU09fRl9WTVNfVU5MT0FELEVSUl9SX1BBU1NFRF9OVUxMX1BBUkFNRVRFUik7CiAJCXJldHVybigwKTsKIAkJfQotCWlmKHNrX251bShkc28tPm1ldGhfZGF0YSkgPCAxKQorCWlmKHNrX3ZvaWRfbnVtKGRzby0+bWV0aF9kYXRhKSA8IDEpCiAJCXJldHVybigxKTsKLQlwID0gKERTT19WTVNfSU5URVJOQUwgKilza19wb3AoZHNvLT5tZXRoX2RhdGEpOworCXAgPSAoRFNPX1ZNU19JTlRFUk5BTCAqKXNrX3ZvaWRfcG9wKGRzby0+bWV0aF9kYXRhKTsKIAlpZihwID09IE5VTEwpCiAJCXsKIAkJRFNPZXJyKERTT19GX1ZNU19VTkxPQUQsRFNPX1JfTlVMTF9IQU5ETEUpOwpAQCAtMzAyLDEzICszMDIsMTMgQEAKIAkJRFNPZXJyKERTT19GX1ZNU19CSU5EX1NZTSxFUlJfUl9QQVNTRURfTlVMTF9QQVJBTUVURVIpOwogCQlyZXR1cm47CiAJCX0KLQlpZihza19udW0oZHNvLT5tZXRoX2RhdGEpIDwgMSkKKwlpZihza192b2lkX251bShkc28tPm1ldGhfZGF0YSkgPCAxKQogCQl7CiAJCURTT2VycihEU09fRl9WTVNfQklORF9TWU0sRFNPX1JfU1RBQ0tfRVJST1IpOwogCQlyZXR1cm47CiAJCX0KLQlwdHIgPSAoRFNPX1ZNU19JTlRFUk5BTCAqKXNrX3ZhbHVlKGRzby0+bWV0aF9kYXRhLAotCQlza19udW0oZHNvLT5tZXRoX2RhdGEpIC0gMSk7CisJcHRyID0gKERTT19WTVNfSU5URVJOQUwgKilza192b2lkX3ZhbHVlKGRzby0+bWV0aF9kYXRhLAorCQlza192b2lkX251bShkc28tPm1ldGhfZGF0YSkgLSAxKTsKIAlpZihwdHIgPT0gTlVMTCkKIAkJewogCQlEU09lcnIoRFNPX0ZfVk1TX0JJTkRfU1lNLERTT19SX05VTExfSEFORExFKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9kc28vZHNvX3dpbjMyLmMgYi9jcnlwdG8vZHNvL2Rzb193aW4zMi5jCmluZGV4IGYzNDAwNTIuLjZmYjZjNTQgMTAwNjQ0Ci0tLSBhL2NyeXB0by9kc28vZHNvX3dpbjMyLmMKKysrIGIvY3J5cHRvL2Rzby9kc29fd2luMzIuYwpAQCAtOTYsNyArOTYsMTEgQEAKICNlbHNlCiAJZm5hbXcgPSAoV0NIQVIgKilhbGxvY2EgKGxlbl8wKnNpemVvZihXQ0hBUikpOwogI2VuZGlmCi0JaWYgKGZuYW13ID09IE5VTEwpIHJldHVybiBOVUxMOworCWlmIChmbmFtdyA9PSBOVUxMKQorCQl7CisJCVNldExhc3RFcnJvcihFUlJPUl9OT1RfRU5PVUdIX01FTU9SWSk7CisJCXJldHVybiBOVUxMOworCQl9CiAKICNpZiBkZWZpbmVkKF9XSU4zMl9XQ0UpICYmIF9XSU4zMl9XQ0U+PTEwMQogCWlmICghTXVsdGlCeXRlVG9XaWRlQ2hhcihDUF9BQ1AsMCxscExpYkZpbGVOYW1lLGxlbl8wLGZuYW13LGxlbl8wKSkKQEAgLTEyNCw2ICsxMjgsOCBAQAogc3RhdGljIGNoYXIgKndpbjMyX25hbWVfY29udmVydGVyKERTTyAqZHNvLCBjb25zdCBjaGFyICpmaWxlbmFtZSk7CiBzdGF0aWMgY2hhciAqd2luMzJfbWVyZ2VyKERTTyAqZHNvLCBjb25zdCBjaGFyICpmaWxlc3BlYzEsCiAJY29uc3QgY2hhciAqZmlsZXNwZWMyKTsKK3N0YXRpYyBpbnQgd2luMzJfcGF0aGJ5YWRkcih2b2lkICphZGRyLGNoYXIgKnBhdGgsaW50IHN6KTsKK3N0YXRpYyB2b2lkICp3aW4zMl9nbG9iYWxsb29rdXAoY29uc3QgY2hhciAqbmFtZSk7CiAKIHN0YXRpYyBjb25zdCBjaGFyICpvcGVuc3NsX3N0cm5jaHIoY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgYywgc2l6ZV90IGxlbik7CiAKQEAgLTE0Miw3ICsxNDgsOSBAQAogCXdpbjMyX25hbWVfY29udmVydGVyLAogCXdpbjMyX21lcmdlciwKIAlOVUxMLCAvKiBpbml0ICovCi0JTlVMTCAgLyogZmluaXNoICovCisJTlVMTCwgLyogZmluaXNoICovCisJd2luMzJfcGF0aGJ5YWRkciwKKwl3aW4zMl9nbG9iYWxsb29rdXAKIAl9OwogCiBEU09fTUVUSE9EICpEU09fTUVUSE9EX3dpbjMyKHZvaWQpCkBAIC0xODAsNyArMTg4LDcgQEAKIAkJZ290byBlcnI7CiAJCX0KIAkqcCA9IGg7Ci0JaWYoIXNrX3B1c2goZHNvLT5tZXRoX2RhdGEsIChjaGFyICopcCkpCisJaWYoIXNrX3ZvaWRfcHVzaChkc28tPm1ldGhfZGF0YSwgcCkpCiAJCXsKIAkJRFNPZXJyKERTT19GX1dJTjMyX0xPQUQsRFNPX1JfU1RBQ0tfRVJST1IpOwogCQlnb3RvIGVycjsKQEAgLTIwNyw5ICsyMTUsOSBAQAogCQlEU09lcnIoRFNPX0ZfV0lOMzJfVU5MT0FELEVSUl9SX1BBU1NFRF9OVUxMX1BBUkFNRVRFUik7CiAJCXJldHVybigwKTsKIAkJfQotCWlmKHNrX251bShkc28tPm1ldGhfZGF0YSkgPCAxKQorCWlmKHNrX3ZvaWRfbnVtKGRzby0+bWV0aF9kYXRhKSA8IDEpCiAJCXJldHVybigxKTsKLQlwID0gKEhJTlNUQU5DRSAqKXNrX3BvcChkc28tPm1ldGhfZGF0YSk7CisJcCA9IHNrX3ZvaWRfcG9wKGRzby0+bWV0aF9kYXRhKTsKIAlpZihwID09IE5VTEwpCiAJCXsKIAkJRFNPZXJyKERTT19GX1dJTjMyX1VOTE9BRCxEU09fUl9OVUxMX0hBTkRMRSk7CkBAIC0yMjAsNyArMjI4LDcgQEAKIAkJRFNPZXJyKERTT19GX1dJTjMyX1VOTE9BRCxEU09fUl9VTkxPQURfRkFJTEVEKTsKIAkJLyogV2Ugc2hvdWxkIHB1c2ggdGhlIHZhbHVlIGJhY2sgb250byB0aGUgc3RhY2sgaW4KIAkJICogY2FzZSBvZiBhIHJldHJ5LiAqLwotCQlza19wdXNoKGRzby0+bWV0aF9kYXRhLCAoY2hhciAqKXApOworCQlza192b2lkX3B1c2goZHNvLT5tZXRoX2RhdGEsIHApOwogCQlyZXR1cm4oMCk7CiAJCX0KIAkvKiBDbGVhbnVwICovCkBAIC0yNDAsMTIgKzI0OCwxMiBAQAogCQlEU09lcnIoRFNPX0ZfV0lOMzJfQklORF9WQVIsRVJSX1JfUEFTU0VEX05VTExfUEFSQU1FVEVSKTsKIAkJcmV0dXJuKE5VTEwpOwogCQl9Ci0JaWYoc2tfbnVtKGRzby0+bWV0aF9kYXRhKSA8IDEpCisJaWYoc2tfdm9pZF9udW0oZHNvLT5tZXRoX2RhdGEpIDwgMSkKIAkJewogCQlEU09lcnIoRFNPX0ZfV0lOMzJfQklORF9WQVIsRFNPX1JfU1RBQ0tfRVJST1IpOwogCQlyZXR1cm4oTlVMTCk7CiAJCX0KLQlwdHIgPSAoSElOU1RBTkNFICopc2tfdmFsdWUoZHNvLT5tZXRoX2RhdGEsIHNrX251bShkc28tPm1ldGhfZGF0YSkgLSAxKTsKKwlwdHIgPSBza192b2lkX3ZhbHVlKGRzby0+bWV0aF9kYXRhLCBza192b2lkX251bShkc28tPm1ldGhfZGF0YSkgLSAxKTsKIAlpZihwdHIgPT0gTlVMTCkKIAkJewogCQlEU09lcnIoRFNPX0ZfV0lOMzJfQklORF9WQVIsRFNPX1JfTlVMTF9IQU5ETEUpOwpAQCAtMjcxLDEyICsyNzksMTIgQEAKIAkJRFNPZXJyKERTT19GX1dJTjMyX0JJTkRfRlVOQyxFUlJfUl9QQVNTRURfTlVMTF9QQVJBTUVURVIpOwogCQlyZXR1cm4oTlVMTCk7CiAJCX0KLQlpZihza19udW0oZHNvLT5tZXRoX2RhdGEpIDwgMSkKKwlpZihza192b2lkX251bShkc28tPm1ldGhfZGF0YSkgPCAxKQogCQl7CiAJCURTT2VycihEU09fRl9XSU4zMl9CSU5EX0ZVTkMsRFNPX1JfU1RBQ0tfRVJST1IpOwogCQlyZXR1cm4oTlVMTCk7CiAJCX0KLQlwdHIgPSAoSElOU1RBTkNFICopc2tfdmFsdWUoZHNvLT5tZXRoX2RhdGEsIHNrX251bShkc28tPm1ldGhfZGF0YSkgLSAxKTsKKwlwdHIgPSBza192b2lkX3ZhbHVlKGRzby0+bWV0aF9kYXRhLCBza192b2lkX251bShkc28tPm1ldGhfZGF0YSkgLSAxKTsKIAlpZihwdHIgPT0gTlVMTCkKIAkJewogCQlEU09lcnIoRFNPX0ZfV0lOMzJfQklORF9GVU5DLERTT19SX05VTExfSEFORExFKTsKQEAgLTM1MSw3ICszNTksNyBAQAogCQkJCXJldHVybihOVUxMKTsKIAkJCQl9CiAJCQlyZXN1bHQtPmRldmljZSA9IHN0YXJ0OwotCQkJcmVzdWx0LT5kZXZpY2VsZW4gPSBmaWxlbmFtZSAtIHN0YXJ0OworCQkJcmVzdWx0LT5kZXZpY2VsZW4gPSAoaW50KShmaWxlbmFtZSAtIHN0YXJ0KTsKIAkJCXBvc2l0aW9uID0gSU5fRklMRTsKIAkJCXN0YXJ0ID0gKytmaWxlbmFtZTsKIAkJCXJlc3VsdC0+ZGlyID0gc3RhcnQ7CkBAIC0zNjAsNyArMzY4LDcgQEAKIAkJY2FzZSAnLyc6CiAJCQlpZihwb3NpdGlvbiA9PSBJTl9OT0RFKQogCQkJCXsKLQkJCQlyZXN1bHQtPm5vZGVsZW4gPSBmaWxlbmFtZSAtIHN0YXJ0OworCQkJCXJlc3VsdC0+bm9kZWxlbiA9IChpbnQpKGZpbGVuYW1lIC0gc3RhcnQpOwogCQkJCXBvc2l0aW9uID0gSU5fRklMRTsKIAkJCQlzdGFydCA9ICsrZmlsZW5hbWU7CiAJCQkJcmVzdWx0LT5kaXIgPSBzdGFydDsKQEAgLTM3MCwyMCArMzc4LDIwIEBACiAJCQkJcG9zaXRpb24gPSBJTl9GSUxFOwogCQkJCWZpbGVuYW1lKys7CiAJCQkJcmVzdWx0LT5kaXIgPSBzdGFydDsKLQkJCQlyZXN1bHQtPmRpcmxlbiA9IGZpbGVuYW1lIC0gc3RhcnQ7CisJCQkJcmVzdWx0LT5kaXJsZW4gPSAoaW50KShmaWxlbmFtZSAtIHN0YXJ0KTsKIAkJCQlzdGFydCA9IGZpbGVuYW1lOwogCQkJCX0KIAkJCWVsc2UKIAkJCQl7CiAJCQkJZmlsZW5hbWUrKzsKLQkJCQlyZXN1bHQtPmRpcmxlbiArPSBmaWxlbmFtZSAtIHN0YXJ0OworCQkJCXJlc3VsdC0+ZGlybGVuICs9IChpbnQpKGZpbGVuYW1lIC0gc3RhcnQpOwogCQkJCXN0YXJ0ID0gZmlsZW5hbWU7CiAJCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgJ1wwJzoKIAkJCWlmKHBvc2l0aW9uID09IElOX05PREUpCiAJCQkJewotCQkJCXJlc3VsdC0+bm9kZWxlbiA9IGZpbGVuYW1lIC0gc3RhcnQ7CisJCQkJcmVzdWx0LT5ub2RlbGVuID0gKGludCkoZmlsZW5hbWUgLSBzdGFydCk7CiAJCQkJfQogCQkJZWxzZQogCQkJCXsKQEAgLTM5NywxMyArNDA1LDEzIEBACiAJCQkJCQkJcmVzdWx0LT5kaXJsZW4gPSAwOwogCQkJCQkJCX0KIAkJCQkJCXJlc3VsdC0+ZGlybGVuICs9Ci0JCQkJCQkJZmlsZW5hbWUgLSBzdGFydDsKKwkJCQkJCQkoaW50KShmaWxlbmFtZSAtIHN0YXJ0KTsKIAkJCQkJCX0KIAkJCQkJZWxzZQogCQkJCQkJewogCQkJCQkJcmVzdWx0LT5maWxlID0gc3RhcnQ7CiAJCQkJCQlyZXN1bHQtPmZpbGVsZW4gPQotCQkJCQkJCWZpbGVuYW1lIC0gc3RhcnQ7CisJCQkJCQkJKGludCkoZmlsZW5hbWUgLSBzdGFydCk7CiAJCQkJCQl9CiAJCQkJCX0KIAkJCQl9CkBAIC00OTcsNyArNTA1LDcgQEAKIAkJCQkrIGZpbGVfc3BsaXQtPnByZWRpcmxlbgogCQkJCS0gKHN0YXJ0IC0gZmlsZV9zcGxpdC0+cHJlZGlyKTsKIAkJc3RybmNweSgmcmVzdWx0W29mZnNldF0sIHN0YXJ0LAotCQkJZW5kIC0gc3RhcnQpOyBvZmZzZXQgKz0gZW5kIC0gc3RhcnQ7CisJCQllbmQgLSBzdGFydCk7IG9mZnNldCArPSAoaW50KShlbmQgLSBzdGFydCk7CiAJCXJlc3VsdFtvZmZzZXRdID0gJ1xcJzsgb2Zmc2V0Kys7CiAJCXN0YXJ0ID0gZW5kICsgMTsKIAkJfQpAQCAtNTE4LDcgKzUyNiw3IEBACiAJCQkJKyBmaWxlX3NwbGl0LT5kaXJsZW4KIAkJCQktIChzdGFydCAtIGZpbGVfc3BsaXQtPmRpcik7CiAJCXN0cm5jcHkoJnJlc3VsdFtvZmZzZXRdLCBzdGFydCwKLQkJCWVuZCAtIHN0YXJ0KTsgb2Zmc2V0ICs9IGVuZCAtIHN0YXJ0OworCQkJZW5kIC0gc3RhcnQpOyBvZmZzZXQgKz0gKGludCkoZW5kIC0gc3RhcnQpOwogCQlyZXN1bHRbb2Zmc2V0XSA9ICdcXCc7IG9mZnNldCsrOwogCQlzdGFydCA9IGVuZCArIDE7CiAJCX0KQEAgLTY1OSw1ICs2NjcsMTc4IEBACiAJcmV0dXJuIE5VTEw7CiAJfQogCisjaW5jbHVkZSA8dGxoZWxwMzIuaD4KKyNpZmRlZiBfV0lOMzJfV0NFCisjIGRlZmluZSBETExOQU1FICJUT09MSEVMUC5ETEwiCisjZWxzZQorIyBpZmRlZiBNT0RVTEVFTlRSWTMyCisjIHVuZGVmIE1PRFVMRUVOVFJZMzIJLyogdW5tYXNrIHRoZSBBU0NJSSB2ZXJzaW9uISAqLworIyBlbmRpZgorIyBkZWZpbmUgRExMTkFNRSAiS0VSTkVMMzIuRExMIgorI2VuZGlmCiAKLSNlbmRpZiAvKiBPUEVOU1NMX1NZU19XSU4zMiAqLwordHlwZWRlZiBIQU5ETEUgKFdJTkFQSSAqQ1JFQVRFVE9PTEhFTFAzMlNOQVBTSE9UKShEV09SRCwgRFdPUkQpOwordHlwZWRlZiBCT09MIChXSU5BUEkgKkNMT1NFVE9PTEhFTFAzMlNOQVBTSE9UKShIQU5ETEUpOwordHlwZWRlZiBCT09MIChXSU5BUEkgKk1PRFVMRTMyKShIQU5ETEUsIE1PRFVMRUVOVFJZMzIgKik7CisKK3N0YXRpYyBpbnQgd2luMzJfcGF0aGJ5YWRkcih2b2lkICphZGRyLGNoYXIgKnBhdGgsaW50IHN6KQorCXsKKwlITU9EVUxFIGRsbDsKKwlIQU5ETEUgaE1vZHVsZVNuYXAgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsgCisJTU9EVUxFRU5UUlkzMiBtZTMyOyAKKwlDUkVBVEVUT09MSEVMUDMyU05BUFNIT1QgY3JlYXRlX3NuYXA7CisJQ0xPU0VUT09MSEVMUDMyU05BUFNIT1QgIGNsb3NlX3NuYXA7CisJTU9EVUxFMzIgbW9kdWxlX2ZpcnN0LCBtb2R1bGVfbmV4dDsKKwlpbnQgbGVuOworIAorCWlmIChhZGRyID09IE5VTEwpCisJCXsKKwkJdW5pb24JeyBpbnQoKmYpKHZvaWQqLGNoYXIqLGludCk7IHZvaWQgKnA7IH0gdCA9CisJCQl7IHdpbjMyX3BhdGhieWFkZHIgfTsKKwkJYWRkciA9IHQucDsKKwkJfQorCisJZGxsID0gTG9hZExpYnJhcnkoVEVYVChETExOQU1FKSk7CisJaWYgKGRsbCA9PSBOVUxMKQorCQl7CisJCURTT2VycihEU09fRl9XSU4zMl9QQVRIQllBRERSLERTT19SX1VOU1VQUE9SVEVEKTsKKwkJcmV0dXJuIC0xOworCQl9CisKKwljcmVhdGVfc25hcCA9IChDUkVBVEVUT09MSEVMUDMyU05BUFNIT1QpCisJCUdldFByb2NBZGRyZXNzKGRsbCwiQ3JlYXRlVG9vbGhlbHAzMlNuYXBzaG90Iik7CisJaWYgKGNyZWF0ZV9zbmFwID09IE5VTEwpCisJCXsKKwkJRnJlZUxpYnJhcnkoZGxsKTsKKwkJRFNPZXJyKERTT19GX1dJTjMyX1BBVEhCWUFERFIsRFNPX1JfVU5TVVBQT1JURUQpOworCQlyZXR1cm4gLTE7CisJCX0KKwkvKiBXZSB0YWtlIHRoZSByZXN0IGZvciBncmFudGVkLi4uICovCisjaWZkZWYgX1dJTjMyX1dDRQorCWNsb3NlX3NuYXAgPSAoQ0xPU0VUT09MSEVMUDMyU05BUFNIT1QpCisJCUdldFByb2NBZGRyZXNzKGRsbCwiQ2xvc2VUb29saGVscDMyU25hcHNob3QiKTsKKyNlbHNlCisJY2xvc2Vfc25hcCA9IChDTE9TRVRPT0xIRUxQMzJTTkFQU0hPVClDbG9zZUhhbmRsZTsKKyNlbmRpZgorCW1vZHVsZV9maXJzdCA9IChNT0RVTEUzMilHZXRQcm9jQWRkcmVzcyhkbGwsIk1vZHVsZTMyRmlyc3QiKTsKKwltb2R1bGVfbmV4dCAgPSAoTU9EVUxFMzIpR2V0UHJvY0FkZHJlc3MoZGxsLCJNb2R1bGUzMk5leHQiKTsKKworCWhNb2R1bGVTbmFwID0gKCpjcmVhdGVfc25hcCkoVEgzMkNTX1NOQVBNT0RVTEUsMCk7IAorCWlmKCBoTW9kdWxlU25hcCA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSApIAorCQl7IAorCQlGcmVlTGlicmFyeShkbGwpOworCQlEU09lcnIoRFNPX0ZfV0lOMzJfUEFUSEJZQUREUixEU09fUl9VTlNVUFBPUlRFRCk7CisJCXJldHVybiAtMTsKKwkJfSAKKyAKKwltZTMyLmR3U2l6ZSA9IHNpemVvZihtZTMyKTsgCisgCisJaWYoISgqbW9kdWxlX2ZpcnN0KShoTW9kdWxlU25hcCwmbWUzMikpIAorCQl7IAorCQkoKmNsb3NlX3NuYXApKGhNb2R1bGVTbmFwKTsKKwkJRnJlZUxpYnJhcnkoZGxsKTsKKwkJRFNPZXJyKERTT19GX1dJTjMyX1BBVEhCWUFERFIsRFNPX1JfRkFJTFVSRSk7CisJCXJldHVybiAtMTsKKwkJfQorIAorCWRvCXsgCisJCWlmICgoQllURSAqKWFkZHIgPj0gbWUzMi5tb2RCYXNlQWRkciAmJgorCQkgICAgKEJZVEUgKilhZGRyIDwgIG1lMzIubW9kQmFzZUFkZHIrbWUzMi5tb2RCYXNlU2l6ZSkKKwkJCXsKKwkJCSgqY2xvc2Vfc25hcCkoaE1vZHVsZVNuYXApOworCQkJRnJlZUxpYnJhcnkoZGxsKTsKKyNpZmRlZiBfV0lOMzJfV0NFCisjIGlmIF9XSU4zMl9XQ0UgPj0gMTAxCisJCQlyZXR1cm4gV2lkZUNoYXJUb011bHRpQnl0ZShDUF9BQ1AsMCxtZTMyLnN6RXhlUGF0aCwtMSwKKwkJCQkJCQlwYXRoLHN6LE5VTEwsTlVMTCk7CisjIGVsc2UKKwkJCWxlbiA9IChpbnQpd2NzbGVuKG1lMzIuc3pFeGVQYXRoKTsKKwkJCWlmIChzeiA8PSAwKSByZXR1cm4gbGVuKzE7CisJCQlpZiAobGVuID49IHN6KSBsZW49c3otMTsKKwkJCWZvcihpPTA7aTxsZW47aSsrKQorCQkJCXBhdGhbaV0gPSAoY2hhciltZTMyLnN6RXhlUGF0aFtpXTsKKwkJCXBhdGhbbGVuKytdID0gMDsKKwkJCXJldHVybiBsZW47CisjIGVuZGlmCisjZWxzZQorCQkJbGVuID0gKGludClzdHJsZW4obWUzMi5zekV4ZVBhdGgpOworCQkJaWYgKHN6IDw9IDApIHJldHVybiBsZW4rMTsKKwkJCWlmIChsZW4gPj0gc3opIGxlbj1zei0xOworCQkJbWVtY3B5KHBhdGgsbWUzMi5zekV4ZVBhdGgsbGVuKTsKKwkJCXBhdGhbbGVuKytdID0gMDsKKwkJCXJldHVybiBsZW47CisjZW5kaWYKKwkJCX0gCisJCX0gd2hpbGUoKCptb2R1bGVfbmV4dCkoaE1vZHVsZVNuYXAsICZtZTMyKSk7IAorIAorCSgqY2xvc2Vfc25hcCkoaE1vZHVsZVNuYXApOyAKKwlGcmVlTGlicmFyeShkbGwpOworCXJldHVybiAwOworCX0KKworc3RhdGljIHZvaWQgKndpbjMyX2dsb2JhbGxvb2t1cChjb25zdCBjaGFyICpuYW1lKQorCXsKKwlITU9EVUxFIGRsbDsKKwlIQU5ETEUgaE1vZHVsZVNuYXAgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKKwlNT0RVTEVFTlRSWTMyIG1lMzI7CisJQ1JFQVRFVE9PTEhFTFAzMlNOQVBTSE9UIGNyZWF0ZV9zbmFwOworCUNMT1NFVE9PTEhFTFAzMlNOQVBTSE9UICBjbG9zZV9zbmFwOworCU1PRFVMRTMyIG1vZHVsZV9maXJzdCwgbW9kdWxlX25leHQ7CisJRkFSUFJPQyByZXQ9TlVMTDsKKworCWRsbCA9IExvYWRMaWJyYXJ5KFRFWFQoRExMTkFNRSkpOworCWlmIChkbGwgPT0gTlVMTCkKKwkJeworCQlEU09lcnIoRFNPX0ZfV0lOMzJfR0xPQkFMTE9PS1VQLERTT19SX1VOU1VQUE9SVEVEKTsKKwkJcmV0dXJuIE5VTEw7CisJCX0KKworCWNyZWF0ZV9zbmFwID0gKENSRUFURVRPT0xIRUxQMzJTTkFQU0hPVCkKKwkJR2V0UHJvY0FkZHJlc3MoZGxsLCJDcmVhdGVUb29saGVscDMyU25hcHNob3QiKTsKKwlpZiAoY3JlYXRlX3NuYXAgPT0gTlVMTCkKKwkJeworCQlGcmVlTGlicmFyeShkbGwpOworCQlEU09lcnIoRFNPX0ZfV0lOMzJfR0xPQkFMTE9PS1VQLERTT19SX1VOU1VQUE9SVEVEKTsKKwkJcmV0dXJuIE5VTEw7CisJCX0KKwkvKiBXZSB0YWtlIHRoZSByZXN0IGZvciBncmFudGVkLi4uICovCisjaWZkZWYgX1dJTjMyX1dDRQorCWNsb3NlX3NuYXAgPSAoQ0xPU0VUT09MSEVMUDMyU05BUFNIT1QpCisJCUdldFByb2NBZGRyZXNzKGRsbCwiQ2xvc2VUb29saGVscDMyU25hcHNob3QiKTsKKyNlbHNlCisJY2xvc2Vfc25hcCA9IChDTE9TRVRPT0xIRUxQMzJTTkFQU0hPVClDbG9zZUhhbmRsZTsKKyNlbmRpZgorCW1vZHVsZV9maXJzdCA9IChNT0RVTEUzMilHZXRQcm9jQWRkcmVzcyhkbGwsIk1vZHVsZTMyRmlyc3QiKTsKKwltb2R1bGVfbmV4dCAgPSAoTU9EVUxFMzIpR2V0UHJvY0FkZHJlc3MoZGxsLCJNb2R1bGUzMk5leHQiKTsKKworCWhNb2R1bGVTbmFwID0gKCpjcmVhdGVfc25hcCkoVEgzMkNTX1NOQVBNT0RVTEUsMCk7CisJaWYoIGhNb2R1bGVTbmFwID09IElOVkFMSURfSEFORExFX1ZBTFVFICkKKwkJeworCQlGcmVlTGlicmFyeShkbGwpOworCQlEU09lcnIoRFNPX0ZfV0lOMzJfR0xPQkFMTE9PS1VQLERTT19SX1VOU1VQUE9SVEVEKTsKKwkJcmV0dXJuIE5VTEw7CisJCX0KKworCW1lMzIuZHdTaXplID0gc2l6ZW9mKG1lMzIpOworCisJaWYgKCEoKm1vZHVsZV9maXJzdCkoaE1vZHVsZVNuYXAsJm1lMzIpKQorCQl7CisJCSgqY2xvc2Vfc25hcCkoaE1vZHVsZVNuYXApOworCQlGcmVlTGlicmFyeShkbGwpOworCQlyZXR1cm4gTlVMTDsKKwkJfQorCisJZG8JeworCQlpZiAoKHJldCA9IEdldFByb2NBZGRyZXNzKG1lMzIuaE1vZHVsZSxuYW1lKSkpCisJCQl7CisJCQkoKmNsb3NlX3NuYXApKGhNb2R1bGVTbmFwKTsKKwkJCUZyZWVMaWJyYXJ5KGRsbCk7CisJCQlyZXR1cm4gcmV0OworCQkJfQorCQl9IHdoaWxlKCgqbW9kdWxlX25leHQpKGhNb2R1bGVTbmFwLCZtZTMyKSk7CisKKwkoKmNsb3NlX3NuYXApKGhNb2R1bGVTbmFwKTsgCisJRnJlZUxpYnJhcnkoZGxsKTsKKwlyZXR1cm4gTlVMTDsKKwl9CisjZW5kaWYgLyogRFNPX1dJTjMyICovCmRpZmYgLS1naXQgYS9jcnlwdG8vZHluX2xjay5jIGIvY3J5cHRvL2R5bl9sY2suYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Y4MmM0MS4uMDAwMDAwMAotLS0gYS9jcnlwdG8vZHluX2xjay5jCisrKyAvZGV2L251bGwKQEAgLTEsNDI4ICswLDAgQEAKLS8qIGNyeXB0by9jcnlwdGxpYi5jICovCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0gKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0gKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0gKgotICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0gKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotICoKLSAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotICoKLSAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSAqICAgIGFja25vd2xlZGdtZW50OgotICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0gKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKgotICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCi0gKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCi0gKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSAqCi0gKi8KLS8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KLSAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KLSAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KLSAqIAotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCi0gKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCi0gKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KLSAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKLSAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgotICogCi0gKiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgotICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgotICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgotICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KLSAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgotICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0gKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQotICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKLSAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQotICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCi0gKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKLSAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6Ci0gKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKiAKLSAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCi0gKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKLSAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKLSAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCi0gKi8KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgMjAwMiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFMTCBSSUdIVFMgUkVTRVJWRUQuCi0gKiBFQ0RIIHN1cHBvcnQgaW4gT3BlblNTTCBvcmlnaW5hbGx5IGRldmVsb3BlZCBieSAKLSAqIFNVTiBNSUNST1NZU1RFTVMsIElOQy4sIGFuZCBjb250cmlidXRlZCB0byB0aGUgT3BlblNTTCBwcm9qZWN0LgotICovCi0KLSNpbmNsdWRlICJjcnlwdGxpYi5oIgotI2luY2x1ZGUgPG9wZW5zc2wvc2FmZXN0YWNrLmg+Ci0KLSNpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX1dJTjMyKSB8fCBkZWZpbmVkKE9QRU5TU0xfU1lTX1dJTjE2KQotc3RhdGljIGRvdWJsZSBTU0xlYXlfTVNWQzVfaGFjaz0wLjA7IC8qIGFuZCBmb3IgVkMxLjUgKi8KLSNlbmRpZgotCi1ERUNMQVJFX1NUQUNLX09GKENSWVBUT19keW5sb2NrKQotSU1QTEVNRU5UX1NUQUNLX09GKENSWVBUT19keW5sb2NrKQotCi0vKiByZWFsICNkZWZpbmVzIGluIGNyeXB0by5oLCBrZWVwIHRoZXNlIHVwdG8gZGF0ZSAqLwotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGxvY2tfbmFtZXNbQ1JZUFRPX05VTV9MT0NLU10gPQotCXsKLQkiPDxFUlJPUj4+IiwKLQkiZXJyIiwKLQkiZXhfZGF0YSIsCi0JIng1MDkiLAotCSJ4NTA5X2luZm8iLAotCSJ4NTA5X3BrZXkiLAotCSJ4NTA5X2NybCIsCi0JIng1MDlfcmVxIiwKLQkiZHNhIiwKLQkicnNhIiwKLQkiZXZwX3BrZXkiLAotCSJ4NTA5X3N0b3JlIiwKLQkic3NsX2N0eCIsCi0JInNzbF9jZXJ0IiwKLQkic3NsX3Nlc3Npb24iLAotCSJzc2xfc2Vzc19jZXJ0IiwKLQkic3NsIiwKLQkic3NsX21ldGhvZCIsCi0JInJhbmQiLAotCSJyYW5kMiIsCi0JImRlYnVnX21hbGxvYyIsCi0JIkJJTyIsCi0JImdldGhvc3RieW5hbWUiLAotCSJnZXRzZXJ2YnluYW1lIiwKLQkicmVhZGRpciIsCi0JIlJTQV9ibGluZGluZyIsCi0JImRoIiwKLQkiZGVidWdfbWFsbG9jMiIsCi0JImRzbyIsCi0JImR5bmxvY2siLAotCSJlbmdpbmUiLAotCSJ1aSIsCi0JImVjZHNhIiwKLQkiZWMiLAotCSJlY2RoIiwKLQkiYm4iLAotCSJlY19wcmVfY29tcCIsCi0JInN0b3JlIiwKLQkiY29tcCIsCi0jaWZuZGVmIE9QRU5TU0xfRklQUwotIyBpZiBDUllQVE9fTlVNX0xPQ0tTICE9IDM5Ci0jICBlcnJvciAiSW5jb25zaXN0ZW5jeSBiZXR3ZWVuIGNyeXB0by5oIGFuZCBjcnlwdGxpYi5jIgotIyBlbmRpZgotI2Vsc2UKLQkiZmlwcyIsCi0JImZpcHMyIiwKLSMgaWYgQ1JZUFRPX05VTV9MT0NLUyAhPSA0MQotIyAgZXJyb3IgIkluY29uc2lzdGVuY3kgYmV0d2VlbiBjcnlwdG8uaCBhbmQgY3J5cHRsaWIuYyIKLSMgZW5kaWYKLSNlbmRpZgotCX07Ci0KLS8qIFRoaXMgaXMgZm9yIGFwcGxpY2F0aW9ucyB0byBhbGxvY2F0ZSBuZXcgdHlwZSBuYW1lcyBpbiB0aGUgbm9uLWR5bmFtaWMKLSAgIGFycmF5IG9mIGxvY2sgbmFtZXMuICBUaGVzZSBhcmUgbnVtYmVyZWQgd2l0aCBwb3NpdGl2ZSBudW1iZXJzLiAgKi8KLXN0YXRpYyBTVEFDSyAqYXBwX2xvY2tzPU5VTEw7Ci0KLS8qIEZvciBhcHBsaWNhdGlvbnMgdGhhdCB3YW50IGEgbW9yZSBkeW5hbWljIHdheSBvZiBoYW5kbGluZyB0aHJlYWRzLCB0aGUKLSAgIGZvbGxvd2luZyBzdGFjayBpcyB1c2VkLiAgVGhlc2UgYXJlIGV4dGVybmFsbHkgbnVtYmVyZWQgd2l0aCBuZWdhdGl2ZQotICAgbnVtYmVycy4gICovCi1zdGF0aWMgU1RBQ0tfT0YoQ1JZUFRPX2R5bmxvY2spICpkeW5fbG9ja3M9TlVMTDsKLQotCi1zdGF0aWMgc3RydWN0IENSWVBUT19keW5sb2NrX3ZhbHVlICooTVNfRkFSICpkeW5sb2NrX2NyZWF0ZV9jYWxsYmFjaykKLQkoY29uc3QgY2hhciAqZmlsZSxpbnQgbGluZSk9TlVMTDsKLXN0YXRpYyB2b2lkIChNU19GQVIgKmR5bmxvY2tfbG9ja19jYWxsYmFjaykoaW50IG1vZGUsCi0Jc3RydWN0IENSWVBUT19keW5sb2NrX3ZhbHVlICpsLCBjb25zdCBjaGFyICpmaWxlLGludCBsaW5lKT1OVUxMOwotc3RhdGljIHZvaWQgKE1TX0ZBUiAqZHlubG9ja19kZXN0cm95X2NhbGxiYWNrKShzdHJ1Y3QgQ1JZUFRPX2R5bmxvY2tfdmFsdWUgKmwsCi0JY29uc3QgY2hhciAqZmlsZSxpbnQgbGluZSk9TlVMTDsKLQotaW50IENSWVBUT19nZXRfbmV3X2xvY2tpZChjaGFyICpuYW1lKQotCXsKLQljaGFyICpzdHI7Ci0JaW50IGk7Ci0KLSNpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX1dJTjMyKSB8fCBkZWZpbmVkKE9QRU5TU0xfU1lTX1dJTjE2KQotCS8qIEEgaGFjayB0byBtYWtlIFZpc3VhbCBDKysgNS4wIHdvcmsgY29ycmVjdGx5IHdoZW4gbGlua2luZyBhcwotCSAqIGEgRExMIHVzaW5nIC9NVC4gV2l0aG91dCB0aGlzLCB0aGUgYXBwbGljYXRpb24gY2Fubm90IHVzZQotCSAqIGFuZCBmbG9hdGluZyBwb2ludCBwcmludGYncy4KLQkgKiBJdCBhbHNvIHNlZW1zIHRvIGJlIG5lZWRlZCBmb3IgVmlzdWFsIEMgMS41ICh3aW4xNikgKi8KLQlTU0xlYXlfTVNWQzVfaGFjaz0oZG91YmxlKW5hbWVbMF0qKGRvdWJsZSluYW1lWzFdOwotI2VuZGlmCi0KLQlpZiAoKGFwcF9sb2NrcyA9PSBOVUxMKSAmJiAoKGFwcF9sb2Nrcz1za19uZXdfbnVsbCgpKSA9PSBOVUxMKSkKLQkJewotCQlDUllQVE9lcnIoQ1JZUFRPX0ZfQ1JZUFRPX0dFVF9ORVdfTE9DS0lELEVSUl9SX01BTExPQ19GQUlMVVJFKTsKLQkJcmV0dXJuKDApOwotCQl9Ci0JaWYgKChzdHI9QlVGX3N0cmR1cChuYW1lKSkgPT0gTlVMTCkKLQkJewotCQlDUllQVE9lcnIoQ1JZUFRPX0ZfQ1JZUFRPX0dFVF9ORVdfTE9DS0lELEVSUl9SX01BTExPQ19GQUlMVVJFKTsKLQkJcmV0dXJuKDApOwotCQl9Ci0JaT1za19wdXNoKGFwcF9sb2NrcyxzdHIpOwotCWlmICghaSkKLQkJT1BFTlNTTF9mcmVlKHN0cik7Ci0JZWxzZQotCQlpKz1DUllQVE9fTlVNX0xPQ0tTOyAvKiBnYXAgb2Ygb25lIDotKSAqLwotCXJldHVybihpKTsKLQl9Ci0KLWludCBDUllQVE9fZ2V0X25ld19keW5sb2NraWQodm9pZCkKLQl7Ci0JaW50IGkgPSAwOwotCUNSWVBUT19keW5sb2NrICpwb2ludGVyID0gTlVMTDsKLQotCWlmIChkeW5sb2NrX2NyZWF0ZV9jYWxsYmFjayA9PSBOVUxMKQotCQl7Ci0JCUNSWVBUT2VycihDUllQVE9fRl9DUllQVE9fR0VUX05FV19EWU5MT0NLSUQsQ1JZUFRPX1JfTk9fRFlOTE9DS19DUkVBVEVfQ0FMTEJBQ0spOwotCQlyZXR1cm4oMCk7Ci0JCX0KLQlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX0RZTkxPQ0spOwotCWlmICgoZHluX2xvY2tzID09IE5VTEwpCi0JCSYmICgoZHluX2xvY2tzPXNrX0NSWVBUT19keW5sb2NrX25ld19udWxsKCkpID09IE5VTEwpKQotCQl7Ci0JCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19EWU5MT0NLKTsKLQkJQ1JZUFRPZXJyKENSWVBUT19GX0NSWVBUT19HRVRfTkVXX0RZTkxPQ0tJRCxFUlJfUl9NQUxMT0NfRkFJTFVSRSk7Ci0JCXJldHVybigwKTsKLQkJfQotCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19EWU5MT0NLKTsKLQotCXBvaW50ZXIgPSAoQ1JZUFRPX2R5bmxvY2sgKilPUEVOU1NMX21hbGxvYyhzaXplb2YoQ1JZUFRPX2R5bmxvY2spKTsKLQlpZiAocG9pbnRlciA9PSBOVUxMKQotCQl7Ci0JCUNSWVBUT2VycihDUllQVE9fRl9DUllQVE9fR0VUX05FV19EWU5MT0NLSUQsRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwotCQlyZXR1cm4oMCk7Ci0JCX0KLQlwb2ludGVyLT5yZWZlcmVuY2VzID0gMTsKLQlwb2ludGVyLT5kYXRhID0gZHlubG9ja19jcmVhdGVfY2FsbGJhY2soX19GSUxFX18sX19MSU5FX18pOwotCWlmIChwb2ludGVyLT5kYXRhID09IE5VTEwpCi0JCXsKLQkJT1BFTlNTTF9mcmVlKHBvaW50ZXIpOwotCQlDUllQVE9lcnIoQ1JZUFRPX0ZfQ1JZUFRPX0dFVF9ORVdfRFlOTE9DS0lELEVSUl9SX01BTExPQ19GQUlMVVJFKTsKLQkJcmV0dXJuKDApOwotCQl9Ci0KLQlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX0RZTkxPQ0spOwotCS8qIEZpcnN0LCB0cnkgdG8gZmluZCBhbiBleGlzdGluZyBlbXB0eSBzbG90ICovCi0JaT1za19DUllQVE9fZHlubG9ja19maW5kKGR5bl9sb2NrcyxOVUxMKTsKLQkvKiBJZiB0aGVyZSB3YXMgbm9uZSwgcHVzaCwgdGhlcmVieSBjcmVhdGluZyBhIG5ldyBvbmUgKi8KLQlpZiAoaSA9PSAtMSkKLQkJLyogU2luY2Ugc2tfcHVzaCgpIHJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcyBvbiB0aGUKLQkJICAgc3RhY2ssIG5vdCB0aGUgbG9jYXRpb24gb2YgdGhlIHB1c2hlZCBpdGVtLCB3ZSBuZWVkCi0JCSAgIHRvIHRyYW5zZm9ybSB0aGUgcmV0dXJuZWQgbnVtYmVyIGludG8gYSBwb3NpdGlvbiwKLQkJICAgYnkgZGVjcmVhc2luZyBpdC4gICovCi0JCWk9c2tfQ1JZUFRPX2R5bmxvY2tfcHVzaChkeW5fbG9ja3MscG9pbnRlcikgLSAxOwotCWVsc2UKLQkJLyogSWYgd2UgZm91bmQgYSBwbGFjZSB3aXRoIGEgTlVMTCBwb2ludGVyLCBwdXQgb3VyIHBvaW50ZXIKLQkJICAgaW4gaXQuICAqLwotCQkodm9pZClza19DUllQVE9fZHlubG9ja19zZXQoZHluX2xvY2tzLGkscG9pbnRlcik7Ci0JQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX0RZTkxPQ0spOwotCi0JaWYgKGkgPT0gLTEpCi0JCXsKLQkJZHlubG9ja19kZXN0cm95X2NhbGxiYWNrKHBvaW50ZXItPmRhdGEsX19GSUxFX18sX19MSU5FX18pOwotCQlPUEVOU1NMX2ZyZWUocG9pbnRlcik7Ci0JCX0KLQllbHNlCi0JCWkgKz0gMTsgLyogdG8gYXZvaWQgMCAqLwotCXJldHVybiAtaTsKLQl9Ci0KLXZvaWQgQ1JZUFRPX2Rlc3Ryb3lfZHlubG9ja2lkKGludCBpKQotCXsKLQlDUllQVE9fZHlubG9jayAqcG9pbnRlciA9IE5VTEw7Ci0JaWYgKGkpCi0JCWkgPSAtaS0xOwotCWlmIChkeW5sb2NrX2Rlc3Ryb3lfY2FsbGJhY2sgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19EWU5MT0NLKTsKLQotCWlmIChkeW5fbG9ja3MgPT0gTlVMTCB8fCBpID49IHNrX0NSWVBUT19keW5sb2NrX251bShkeW5fbG9ja3MpKQotCQl7Ci0JCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19EWU5MT0NLKTsKLQkJcmV0dXJuOwotCQl9Ci0JcG9pbnRlciA9IHNrX0NSWVBUT19keW5sb2NrX3ZhbHVlKGR5bl9sb2NrcywgaSk7Ci0JaWYgKHBvaW50ZXIgIT0gTlVMTCkKLQkJewotCQktLXBvaW50ZXItPnJlZmVyZW5jZXM7Ci0jaWZkZWYgUkVGX0NIRUNLCi0JCWlmIChwb2ludGVyLT5yZWZlcmVuY2VzIDwgMCkKLQkJCXsKLQkJCWZwcmludGYoc3RkZXJyLCJDUllQVE9fZGVzdHJveV9keW5sb2NraWQsIGJhZCByZWZlcmVuY2UgY291bnRcbiIpOwotCQkJYWJvcnQoKTsKLQkJCX0KLQkJZWxzZQotI2VuZGlmCi0JCQlpZiAocG9pbnRlci0+cmVmZXJlbmNlcyA8PSAwKQotCQkJCXsKLQkJCQkodm9pZClza19DUllQVE9fZHlubG9ja19zZXQoZHluX2xvY2tzLCBpLCBOVUxMKTsKLQkJCQl9Ci0JCQllbHNlCi0JCQkJcG9pbnRlciA9IE5VTEw7Ci0JCX0KLQlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfRFlOTE9DSyk7Ci0KLQlpZiAocG9pbnRlcikKLQkJewotCQlkeW5sb2NrX2Rlc3Ryb3lfY2FsbGJhY2socG9pbnRlci0+ZGF0YSxfX0ZJTEVfXyxfX0xJTkVfXyk7Ci0JCU9QRU5TU0xfZnJlZShwb2ludGVyKTsKLQkJfQotCX0KLQotc3RydWN0IENSWVBUT19keW5sb2NrX3ZhbHVlICpDUllQVE9fZ2V0X2R5bmxvY2tfdmFsdWUoaW50IGkpCi0JewotCUNSWVBUT19keW5sb2NrICpwb2ludGVyID0gTlVMTDsKLQlpZiAoaSkKLQkJaSA9IC1pLTE7Ci0KLQlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX0RZTkxPQ0spOwotCi0JaWYgKGR5bl9sb2NrcyAhPSBOVUxMICYmIGkgPCBza19DUllQVE9fZHlubG9ja19udW0oZHluX2xvY2tzKSkKLQkJcG9pbnRlciA9IHNrX0NSWVBUT19keW5sb2NrX3ZhbHVlKGR5bl9sb2NrcywgaSk7Ci0JaWYgKHBvaW50ZXIpCi0JCXBvaW50ZXItPnJlZmVyZW5jZXMrKzsKLQotCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19EWU5MT0NLKTsKLQotCWlmIChwb2ludGVyKQotCQlyZXR1cm4gcG9pbnRlci0+ZGF0YTsKLQlyZXR1cm4gTlVMTDsKLQl9Ci0KLXN0cnVjdCBDUllQVE9fZHlubG9ja192YWx1ZSAqKCpDUllQVE9fZ2V0X2R5bmxvY2tfY3JlYXRlX2NhbGxiYWNrKHZvaWQpKQotCShjb25zdCBjaGFyICpmaWxlLGludCBsaW5lKQotCXsKLQlyZXR1cm4oZHlubG9ja19jcmVhdGVfY2FsbGJhY2spOwotCX0KLQotdm9pZCAoKkNSWVBUT19nZXRfZHlubG9ja19sb2NrX2NhbGxiYWNrKHZvaWQpKShpbnQgbW9kZSwKLQlzdHJ1Y3QgQ1JZUFRPX2R5bmxvY2tfdmFsdWUgKmwsIGNvbnN0IGNoYXIgKmZpbGUsaW50IGxpbmUpCi0JewotCXJldHVybihkeW5sb2NrX2xvY2tfY2FsbGJhY2spOwotCX0KLQotdm9pZCAoKkNSWVBUT19nZXRfZHlubG9ja19kZXN0cm95X2NhbGxiYWNrKHZvaWQpKQotCShzdHJ1Y3QgQ1JZUFRPX2R5bmxvY2tfdmFsdWUgKmwsIGNvbnN0IGNoYXIgKmZpbGUsaW50IGxpbmUpCi0JewotCXJldHVybihkeW5sb2NrX2Rlc3Ryb3lfY2FsbGJhY2spOwotCX0KLQotdm9pZCBDUllQVE9fc2V0X2R5bmxvY2tfY3JlYXRlX2NhbGxiYWNrKHN0cnVjdCBDUllQVE9fZHlubG9ja192YWx1ZSAqKCpmdW5jKQotCShjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSkpCi0JewotCWR5bmxvY2tfY3JlYXRlX2NhbGxiYWNrPWZ1bmM7Ci0JfQotCi1zdGF0aWMgdm9pZCBkb19keW5sb2NrKGludCBtb2RlLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUpCi0JewotCWlmIChkeW5sb2NrX2xvY2tfY2FsbGJhY2sgIT0gTlVMTCkKLQkJewotCQlzdHJ1Y3QgQ1JZUFRPX2R5bmxvY2tfdmFsdWUgKnBvaW50ZXIKLQkJCQk9IENSWVBUT19nZXRfZHlubG9ja192YWx1ZSh0eXBlKTsKLQotCQlPUEVOU1NMX2Fzc2VydChwb2ludGVyICE9IE5VTEwpOwotCi0JCWR5bmxvY2tfbG9ja19jYWxsYmFjayhtb2RlLCBwb2ludGVyLCBmaWxlLCBsaW5lKTsKLQotCQlDUllQVE9fZGVzdHJveV9keW5sb2NraWQodHlwZSk7Ci0JCX0KLQl9Ci0KLXZvaWQgQ1JZUFRPX3NldF9keW5sb2NrX2xvY2tfY2FsbGJhY2sodm9pZCAoKmZ1bmMpKGludCBtb2RlLAotCXN0cnVjdCBDUllQVE9fZHlubG9ja192YWx1ZSAqbCwgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUpKQotCXsKLQkvKiBTZXQgY2FsbGJhY2sgc28gQ1JZUFRPX2xvY2soKSBjYW4gbm93IGhhbmRsZSBkeW5hbWljIGxvY2tzLgotCSAqIFRoaXMgaXMgT0sgYmVjYXVzZSBhdCB0aGlzIHBvaW50IGFuZCBhcHBsaWNhdGlvbiBzaG91bGRuJ3QgYmUgdXNpbmcKLQkgKiBPcGVuU1NMIGZyb20gbXVsdGlwbGUgdGhyZWFkcyBiZWNhdXNlIGl0IGlzIHNldHRpbmcgdXAgdGhlIGxvY2tpbmcKLQkgKiBjYWxsYmFja3MuCi0JICovCi0Jc3RhdGljIGludCBkb25lID0gMDsKLQlpZiAoIWRvbmUpCi0JCXsKLQkJaW50X0NSWVBUT19zZXRfZG9fZHlubG9ja19jYWxsYmFjayhkb19keW5sb2NrKTsKLQkJZG9uZSA9IDE7Ci0JCX0KLQkJCi0JZHlubG9ja19sb2NrX2NhbGxiYWNrPWZ1bmM7Ci0JfQotCi12b2lkIENSWVBUT19zZXRfZHlubG9ja19kZXN0cm95X2NhbGxiYWNrKHZvaWQgKCpmdW5jKQotCShzdHJ1Y3QgQ1JZUFRPX2R5bmxvY2tfdmFsdWUgKmwsIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKSkKLQl7Ci0JZHlubG9ja19kZXN0cm95X2NhbGxiYWNrPWZ1bmM7Ci0JfQotCi1jb25zdCBjaGFyICpDUllQVE9fZ2V0X2xvY2tfbmFtZShpbnQgdHlwZSkKLQl7Ci0JaWYgKHR5cGUgPCAwKQotCQlyZXR1cm4oImR5bmFtaWMiKTsKLQllbHNlIGlmICh0eXBlIDwgQ1JZUFRPX05VTV9MT0NLUykKLQkJcmV0dXJuKGxvY2tfbmFtZXNbdHlwZV0pOwotCWVsc2UgaWYgKHR5cGUtQ1JZUFRPX05VTV9MT0NLUyA+IHNrX251bShhcHBfbG9ja3MpKQotCQlyZXR1cm4oIkVSUk9SIik7Ci0JZWxzZQotCQlyZXR1cm4oc2tfdmFsdWUoYXBwX2xvY2tzLHR5cGUtQ1JZUFRPX05VTV9MT0NLUykpOwotCX0KLQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2VjL01ha2VmaWxlIGIvY3J5cHRvL2VjL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNWJiYzlmLi4wMDAwMDAwCi0tLSBhL2NyeXB0by9lYy9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDE5MyArMCwwIEBACi0jCi0jIGNyeXB0by9lYy9NYWtlZmlsZQotIwotCi1ESVI9CWVjCi1UT1A9CS4uLy4uCi1DQz0JY2MKLUlOQ0xVREVTPSAtSS4uIC1JJChUT1ApIC1JLi4vLi4vaW5jbHVkZQotQ0ZMQUc9LWcKLU1BS0VGSUxFPQlNYWtlZmlsZQotQVI9CQlhciByCi0KLUNGTEFHUz0gJChJTkNMVURFUykgJChDRkxBRykKLQotR0VORVJBTD1NYWtlZmlsZQotVEVTVD1lY3Rlc3QuYwotQVBQUz0KLQotTElCPSQoVE9QKS9saWJjcnlwdG8uYQotTElCU1JDPQllY19saWIuYyBlY3Bfc21wbC5jIGVjcF9tb250LmMgZWNwX25pc3QuYyBlY19jdnQuYyBlY19tdWx0LmNcCi0JZWNfZXJyLmMgZWNfY3VydmUuYyBlY19jaGVjay5jIGVjX3ByaW50LmMgZWNfYXNuMS5jIGVjX2tleS5jXAotCWVjMl9zbXBsLmMgZWMyX3NtcHQuYyBlYzJfbXVsdC5jCi0KLUxJQk9CSj0JZWNfbGliLm8gZWNwX3NtcGwubyBlY3BfbW9udC5vIGVjcF9uaXN0Lm8gZWNfY3Z0Lm8gZWNfbXVsdC5vXAotCWVjX2Vyci5vIGVjX2N1cnZlLm8gZWNfY2hlY2subyBlY19wcmludC5vIGVjX2FzbjEubyBlY19rZXkub1wKLQllYzJfc21wbC5vIGVjMl9tdWx0Lm8KLQotU1JDPSAkKExJQlNSQykKLQotRVhIRUFERVI9IGVjLmgKLUhFQURFUj0JZWNfbGNsLmggJChFWEhFQURFUikKLQotQUxMPSAgICAkKEdFTkVSQUwpICQoU1JDKSAkKEhFQURFUikKLQotdG9wOgotCShjZCAuLi8uLjsgJChNQUtFKSBESVJTPWNyeXB0byBTRElSUz0kKERJUikgc3ViX2FsbCkKLQotYWxsOglsaWIKLQotbGliOgkkKExJQk9CSikKLQkkKEFSWCkgJChMSUIpICQoTElCT0JKKQotCSQoUkFOTElCKSAkKExJQikgfHwgZWNobyBOZXZlciBtaW5kLgotCUB0b3VjaCBsaWIKLQotZmlsZXM6Ci0JJChQRVJMKSAkKFRPUCkvdXRpbC9maWxlcy5wbCBNYWtlZmlsZSA+PiAkKFRPUCkvTUlORk8KLQotbGlua3M6Ci0JQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL2luY2x1ZGUvb3BlbnNzbCAkKEVYSEVBREVSKQotCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi90ZXN0ICQoVEVTVCkKLQlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vYXBwcyAkKEFQUFMpCi0KLWluc3RhbGw6Ci0JQFsgLW4gIiQoSU5TVEFMTFRPUCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHRvcCBNYWtlZmlsZS4uLgotCUBoZWFkZXJsaXN0PSIkKEVYSEVBREVSKSI7IGZvciBpIGluICQkaGVhZGVybGlzdCA7IFwKLQlkbyAgXAotCShjcCAkJGkgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGk7IFwKLQljaG1vZCA2NDQgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGkgKTsgXAotCWRvbmU7Ci0KLXRhZ3M6Ci0JY3RhZ3MgJChTUkMpCi0KLXRlc3RzOgotCi1saW50OgotCWxpbnQgLURMSU5UICQoSU5DTFVERVMpICQoU1JDKT5mbHVmZgotCi1kZXBlbmQ6Ci0JQFsgLW4gIiQoTUFLRURFUEVORCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHVwcGVyIE1ha2VmaWxlLi4uCi0JJChNQUtFREVQRU5EKSAtLSAkKENGTEFHKSAkKElOQ0xVREVTKSAkKERFUEZMQUcpIC0tICQoUFJPR1MpICQoTElCU1JDKQotCi1kY2xlYW46Ci0JJChQRVJMKSAtcGUgJ2lmICgvXiMgRE8gTk9UIERFTEVURSBUSElTIExJTkUvKSB7cHJpbnQ7IGV4aXQoMCk7fScgJChNQUtFRklMRSkgPk1ha2VmaWxlLm5ldwotCW12IC1mIE1ha2VmaWxlLm5ldyAkKE1BS0VGSUxFKQotCi1jbGVhbjoKLQlybSAtZiAqLm8gKi8qLm8gKi5vYmogbGliIHRhZ3MgY29yZSAucHVyZSAubmZzKiAqLm9sZCAqLmJhayBmbHVmZgotCi0jIERPIE5PVCBERUxFVEUgVEhJUyBMSU5FIC0tIG1ha2UgZGVwZW5kIGRlcGVuZHMgb24gaXQuCi0KLWVjMl9tdWx0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1lYzJfbXVsdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWVjMl9tdWx0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1lYzJfbXVsdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLWVjMl9tdWx0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWVjMl9tdWx0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1lYzJfbXVsdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWVjMl9tdWx0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGVjMl9tdWx0LmMgZWNfbGNsLmgKLWVjMl9zbXBsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1lYzJfc21wbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWVjMl9zbXBsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1lYzJfc21wbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLWVjMl9zbXBsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWVjMl9zbXBsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1lYzJfc21wbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWVjMl9zbXBsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGVjMl9zbXBsLmMgZWMyX3NtcHQuYyBlY19sY2wuaAotZWMyX3NtcHQubzogZWMyX3NtcHQuYwotZWNfYXNuMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xdC5oCi1lY19hc24xLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaAotZWNfYXNuMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLWVjX2FzbjEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1lY19hc24xLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLWVjX2FzbjEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotZWNfYXNuMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotZWNfYXNuMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWVjX2FzbjEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZWNfYXNuMS5jIGVjX2xjbC5oCi1lY19jaGVjay5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotZWNfY2hlY2subzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1lY19jaGVjay5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotZWNfY2hlY2subzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1lY19jaGVjay5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1lY19jaGVjay5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotZWNfY2hlY2subzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1lY19jaGVjay5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBlY19jaGVjay5jIGVjX2xjbC5oCi1lY19jdXJ2ZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotZWNfY3VydmUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1lY19jdXJ2ZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotZWNfY3VydmUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1lY19jdXJ2ZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1lY19jdXJ2ZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotZWNfY3VydmUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1lY19jdXJ2ZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBlY19jdXJ2ZS5jIGVjX2xjbC5oCi1lY19jdnQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWVjX2N2dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWVjX2N2dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotZWNfY3Z0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotZWNfY3Z0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWVjX2N2dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotZWNfY3Z0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotZWNfY3Z0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGVjX2N2dC5jIGVjX2xjbC5oCi1lY19lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWVjX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLWVjX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWVjX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotZWNfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1lY19lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1lY19lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZWNfZXJyLmMKLWVjX2tleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotZWNfa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotZWNfa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1lY19rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1lY19rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotZWNfa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1lY19rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1lY19rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZWNfa2V5LmMgZWNfbGNsLmgKLWVjX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotZWNfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotZWNfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1lY19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1lY19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotZWNfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1lY19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1lY19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZWNfbGNsLmggZWNfbGliLmMKLWVjX211bHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWVjX211bHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1lY19tdWx0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1lY19tdWx0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotZWNfbXVsdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1lY19tdWx0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1lY19tdWx0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotZWNfbXVsdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBlY19sY2wuaCBlY19tdWx0LmMKLWVjX3ByaW50Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1lY19wcmludC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWVjX3ByaW50Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1lY19wcmludC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1lY19wcmludC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotZWNfcHJpbnQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1lY19wcmludC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBlY19sY2wuaCBlY19wcmludC5jCi1lY3BfbW9udC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotZWNwX21vbnQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1lY3BfbW9udC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotZWNwX21vbnQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1lY3BfbW9udC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1lY3BfbW9udC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotZWNwX21vbnQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1lY3BfbW9udC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBlY19sY2wuaCBlY3BfbW9udC5jCi1lY3BfbmlzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotZWNwX25pc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1lY3BfbmlzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotZWNwX25pc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1lY3BfbmlzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1lY3BfbmlzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotZWNwX25pc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1lY3BfbmlzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBlY19sY2wuaCBlY3BfbmlzdC5jCi1lY3Bfc21wbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotZWNwX3NtcGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1lY3Bfc21wbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotZWNwX3NtcGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1lY3Bfc21wbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1lY3Bfc21wbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotZWNwX3NtcGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1lY3Bfc21wbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBlY19sY2wuaCBlY3Bfc21wbC5jCmRpZmYgLS1naXQgYS9jcnlwdG8vZWMvZWMuaCBiL2NyeXB0by9lYy9lYy5oCmluZGV4IDhiYzJhMjMuLmVlNzA3ODEgMTAwNjQ0Ci0tLSBhL2NyeXB0by9lYy9lYy5oCisrKyBiL2NyeXB0by9lYy9lYy5oCkBAIC0yLDggKzIsMTIgQEAKIC8qCiAgKiBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgQm9kbyBNb2VsbGVyIGZvciB0aGUgT3BlblNTTCBwcm9qZWN0LgogICovCisvKioKKyAqIFxmaWxlIGNyeXB0by9lYy9lYy5oIEluY2x1ZGUgZmlsZSBmb3IgdGhlIE9wZW5TU0wgRUMgZnVuY3Rpb25zCisgKiBcYXV0aG9yIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBCb2RvIE1vZWxsZXIgZm9yIHRoZSBPcGVuU1NMIHByb2plY3QKKyAqLwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkyLDE1ICs5NiwyMSBAQAogIyBlbmRpZgogI2VuZGlmCiAKLQorICAKICNpZm5kZWYgT1BFTlNTTF9FQ0NfTUFYX0ZJRUxEX0JJVFMKICMgZGVmaW5lIE9QRU5TU0xfRUNDX01BWF9GSUVMRF9CSVRTIDY2MQogI2VuZGlmCiAKKy8qKiBFbnVtIGZvciB0aGUgcG9pbnQgY29udmVyc2lvbiBmb3JtIGFzIGRlZmluZWQgaW4gWDkuNjIgKEVDRFNBKQorICogIGZvciB0aGUgZW5jb2Rpbmcgb2YgYSBlbGxpcHRpYyBjdXJ2ZSBwb2ludCAoeCx5KSAqLwogdHlwZWRlZiBlbnVtIHsKLQkvKiB2YWx1ZXMgYXMgZGVmaW5lZCBpbiBYOS42MiAoRUNEU0EpIGFuZCBlbHNld2hlcmUgKi8KKwkvKiogdGhlIHBvaW50IGlzIGVuY29kZWQgYXMgenx8eCwgd2hlcmUgdGhlIG9jdGV0IHogc3BlY2lmaWVzIAorCSAqICB3aGljaCBzb2x1dGlvbiBvZiB0aGUgcXVhZHJhdGljIGVxdWF0aW9uIHkgaXMgICovCiAJUE9JTlRfQ09OVkVSU0lPTl9DT01QUkVTU0VEID0gMiwKKwkvKiogdGhlIHBvaW50IGlzIGVuY29kZWQgYXMgenx8eHx8eSwgd2hlcmUgeiBpcyB0aGUgb2N0ZXQgMHgwMiAgKi8KIAlQT0lOVF9DT05WRVJTSU9OX1VOQ09NUFJFU1NFRCA9IDQsCisJLyoqIHRoZSBwb2ludCBpcyBlbmNvZGVkIGFzIHp8fHh8fHksIHdoZXJlIHRoZSBvY3RldCB6IHNwZWNpZmllcworICAgICAgICAgKiAgd2hpY2ggc29sdXRpb24gb2YgdGhlIHF1YWRyYXRpYyBlcXVhdGlvbiB5IGlzICAqLwogCVBPSU5UX0NPTlZFUlNJT05fSFlCUklEID0gNgogfSBwb2ludF9jb252ZXJzaW9uX2Zvcm1fdDsKIApAQCAtMTIxLDM3ICsxMzEsMTI5IEBACiB0eXBlZGVmIHN0cnVjdCBlY19wb2ludF9zdCBFQ19QT0lOVDsKIAogCi0vKiBFQ19NRVRIT0RzIGZvciBjdXJ2ZXMgb3ZlciBHRihwKS4KLSAqIEVDX0dGcF9zaW1wbGVfbWV0aG9kIHByb3ZpZGVzIHRoZSBiYXNpcyBmb3IgdGhlIG9wdGltaXplZCBtZXRob2RzLgorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICBFQ19NRVRIT0RzIGZvciBjdXJ2ZXMgb3ZlciBHRihwKSAgICAgICAgICAgICAgICAgICAqLyAgICAgICAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqIFJldHVybnMgdGhlIGJhc2ljIEdGcCBlYyBtZXRob2RzIHdoaWNoIHByb3ZpZGVzIHRoZSBiYXNpcyBmb3IgdGhlCisgKiAgb3B0aW1pemVkIG1ldGhvZHMuIAorICogIFxyZXR1cm4gIEVDX01FVEhPRCBvYmplY3QKICAqLwogY29uc3QgRUNfTUVUSE9EICpFQ19HRnBfc2ltcGxlX21ldGhvZCh2b2lkKTsKKworLyoqIFJldHVybnMgR0ZwIG1ldGhvZHMgdXNpbmcgbW9udGdvbWVyeSBtdWx0aXBsaWNhdGlvbi4KKyAqICBccmV0dXJuICBFQ19NRVRIT0Qgb2JqZWN0CisgKi8KIGNvbnN0IEVDX01FVEhPRCAqRUNfR0ZwX21vbnRfbWV0aG9kKHZvaWQpOworCisvKiogUmV0dXJucyBHRnAgbWV0aG9kcyB1c2luZyBvcHRpbWl6ZWQgbWV0aG9kcyBmb3IgTklTVCByZWNvbW1lbmRlZCBjdXJ2ZXMKKyAqICBccmV0dXJuICBFQ19NRVRIT0Qgb2JqZWN0CisgKi8KIGNvbnN0IEVDX01FVEhPRCAqRUNfR0ZwX25pc3RfbWV0aG9kKHZvaWQpOwogCi0vKiBFQ19NRVRIT0QgZm9yIGN1cnZlcyBvdmVyIEdGKDJebSkuCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gCisvKiAgICAgICAgICAgRUNfTUVUSE9EIGZvciBjdXJ2ZXMgb3ZlciBHRigyXm0pICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKiBSZXR1cm5zIHRoZSBiYXNpYyBHRjJtIGVjIG1ldGhvZCAKKyAqICBccmV0dXJuICBFQ19NRVRIT0Qgb2JqZWN0CiAgKi8KIGNvbnN0IEVDX01FVEhPRCAqRUNfR0YybV9zaW1wbGVfbWV0aG9kKHZvaWQpOwogCiAKLUVDX0dST1VQICpFQ19HUk9VUF9uZXcoY29uc3QgRUNfTUVUSE9EICopOwotdm9pZCBFQ19HUk9VUF9mcmVlKEVDX0dST1VQICopOwotdm9pZCBFQ19HUk9VUF9jbGVhcl9mcmVlKEVDX0dST1VQICopOwotaW50IEVDX0dST1VQX2NvcHkoRUNfR1JPVVAgKiwgY29uc3QgRUNfR1JPVVAgKik7Ci1FQ19HUk9VUCAqRUNfR1JPVVBfZHVwKGNvbnN0IEVDX0dST1VQICopOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgRUNfR1JPVVAgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1jb25zdCBFQ19NRVRIT0QgKkVDX0dST1VQX21ldGhvZF9vZihjb25zdCBFQ19HUk9VUCAqKTsKLWludCBFQ19NRVRIT0RfZ2V0X2ZpZWxkX3R5cGUoY29uc3QgRUNfTUVUSE9EICopOworLyoqIENyZWF0ZXMgYSBuZXcgRUNfR1JPVVAgb2JqZWN0CisgKiAgXHBhcmFtICAgbWV0aCAgRUNfTUVUSE9EIHRvIHVzZQorICogIFxyZXR1cm4gIG5ld2x5IGNyZWF0ZWQgRUNfR1JPVVAgb2JqZWN0IG9yIE5VTEwgaW4gY2FzZSBvZiBhbiBlcnJvci4KKyAqLworRUNfR1JPVVAgKkVDX0dST1VQX25ldyhjb25zdCBFQ19NRVRIT0QgKm1ldGgpOwogCi1pbnQgRUNfR1JPVVBfc2V0X2dlbmVyYXRvcihFQ19HUk9VUCAqLCBjb25zdCBFQ19QT0lOVCAqZ2VuZXJhdG9yLCBjb25zdCBCSUdOVU0gKm9yZGVyLCBjb25zdCBCSUdOVU0gKmNvZmFjdG9yKTsKLWNvbnN0IEVDX1BPSU5UICpFQ19HUk9VUF9nZXQwX2dlbmVyYXRvcihjb25zdCBFQ19HUk9VUCAqKTsKLWludCBFQ19HUk9VUF9nZXRfb3JkZXIoY29uc3QgRUNfR1JPVVAgKiwgQklHTlVNICpvcmRlciwgQk5fQ1RYICopOwotaW50IEVDX0dST1VQX2dldF9jb2ZhY3Rvcihjb25zdCBFQ19HUk9VUCAqLCBCSUdOVU0gKmNvZmFjdG9yLCBCTl9DVFggKik7CisvKiogRnJlZXMgYSBFQ19HUk9VUCBvYmplY3QKKyAqICBccGFyYW0gIGdyb3VwICBFQ19HUk9VUCBvYmplY3QgdG8gYmUgZnJlZWQuCisgKi8KK3ZvaWQgRUNfR1JPVVBfZnJlZShFQ19HUk9VUCAqZ3JvdXApOwogCi12b2lkIEVDX0dST1VQX3NldF9jdXJ2ZV9uYW1lKEVDX0dST1VQICosIGludCBuaWQpOwotaW50IEVDX0dST1VQX2dldF9jdXJ2ZV9uYW1lKGNvbnN0IEVDX0dST1VQICopOworLyoqIENsZWFycyBhbmQgZnJlZXMgYSBFQ19HUk9VUCBvYmplY3QKKyAqICBccGFyYW0gIGdyb3VwICBFQ19HUk9VUCBvYmplY3QgdG8gYmUgY2xlYXJlZCBhbmQgZnJlZWQuCisgKi8KK3ZvaWQgRUNfR1JPVVBfY2xlYXJfZnJlZShFQ19HUk9VUCAqZ3JvdXApOwogCi12b2lkIEVDX0dST1VQX3NldF9hc24xX2ZsYWcoRUNfR1JPVVAgKiwgaW50IGZsYWcpOwotaW50IEVDX0dST1VQX2dldF9hc24xX2ZsYWcoY29uc3QgRUNfR1JPVVAgKik7CisvKiogQ29waWVzIEVDX0dST1VQIG9iamVjdHMuIE5vdGU6IGJvdGggRUNfR1JPVVBzIG11c3QgdXNlIHRoZSBzYW1lIEVDX01FVEhPRC4KKyAqICBccGFyYW0gIGRzdCAgZGVzdGluYXRpb24gRUNfR1JPVVAgb2JqZWN0CisgKiAgXHBhcmFtICBzcmMgIHNvdXJjZSBFQ19HUk9VUCBvYmplY3QKKyAqICBccmV0dXJuIDEgb24gc3VjY2VzcyBhbmQgMCBpZiBhbiBlcnJvciBvY2N1cnJlZC4KKyAqLworaW50IEVDX0dST1VQX2NvcHkoRUNfR1JPVVAgKmRzdCwgY29uc3QgRUNfR1JPVVAgKnNyYyk7CisKKy8qKiBDcmVhdGVzIGEgbmV3IEVDX0dST1VQIG9iamVjdCBhbmQgY29waWVzIHRoZSBjb3BpZXMgdGhlIGNvbnRlbnQKKyAqICBmb3JtIHNyYyB0byB0aGUgbmV3bHkgY3JlYXRlZCBFQ19LRVkgb2JqZWN0CisgKiAgXHBhcmFtICBzcmMgIHNvdXJjZSBFQ19HUk9VUCBvYmplY3QKKyAqICBccmV0dXJuIG5ld2x5IGNyZWF0ZWQgRUNfR1JPVVAgb2JqZWN0IG9yIE5VTEwgaW4gY2FzZSBvZiBhbiBlcnJvci4KKyAqLworRUNfR1JPVVAgKkVDX0dST1VQX2R1cChjb25zdCBFQ19HUk9VUCAqc3JjKTsKKworLyoqIFJldHVybnMgdGhlIEVDX01FVEhPRCBvZiB0aGUgRUNfR1JPVVAgb2JqZWN0LgorICogIFxwYXJhbSAgZ3JvdXAgIEVDX0dST1VQIG9iamVjdCAKKyAqICBccmV0dXJuIEVDX01FVEhPRCB1c2VkIGluIHRoaXMgRUNfR1JPVVAgb2JqZWN0LgorICovCitjb25zdCBFQ19NRVRIT0QgKkVDX0dST1VQX21ldGhvZF9vZihjb25zdCBFQ19HUk9VUCAqZ3JvdXApOworCisvKiogUmV0dXJucyB0aGUgZmllbGQgdHlwZSBvZiB0aGUgRUNfTUVUSE9ELgorICogIFxwYXJhbSAgbWV0aCAgRUNfTUVUSE9EIG9iamVjdAorICogIFxyZXR1cm4gTklEIG9mIHRoZSB1bmRlcmx5aW5nIGZpZWxkIHR5cGUgT0lELgorICovCitpbnQgRUNfTUVUSE9EX2dldF9maWVsZF90eXBlKGNvbnN0IEVDX01FVEhPRCAqbWV0aCk7CisKKy8qKiBTZXRzIHRoZSBnZW5lcmF0b3IgYW5kIGl0J3Mgb3JkZXIvY29mYWN0b3Igb2YgYSBFQ19HUk9VUCBvYmplY3QuCisgKiAgXHBhcmFtICBncm91cCAgICAgIEVDX0dST1VQIG9iamVjdCAKKyAqICBccGFyYW0gIGdlbmVyYXRvciAgRUNfUE9JTlQgb2JqZWN0IHdpdGggdGhlIGdlbmVyYXRvci4KKyAqICBccGFyYW0gIG9yZGVyICAgICAgdGhlIG9yZGVyIG9mIHRoZSBncm91cCBnZW5lcmF0ZWQgYnkgdGhlIGdlbmVyYXRvci4KKyAqICBccGFyYW0gIGNvZmFjdG9yICAgdGhlIGluZGV4IG9mIHRoZSBzdWItZ3JvdXAgZ2VuZXJhdGVkIGJ5IHRoZSBnZW5lcmF0b3IKKyAqICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGdyb3VwIG9mIGFsbCBwb2ludHMgb24gdGhlIGVsbGlwdGljIGN1cnZlLgorICogIFxyZXR1cm4gMSBvbiBzdWNjZXNzIGFuZCAwIGlmIGFuIGVycm9yIG9jY3VyZWQKKyAqLworaW50IEVDX0dST1VQX3NldF9nZW5lcmF0b3IoRUNfR1JPVVAgKmdyb3VwLCBjb25zdCBFQ19QT0lOVCAqZ2VuZXJhdG9yLCBjb25zdCBCSUdOVU0gKm9yZGVyLCBjb25zdCBCSUdOVU0gKmNvZmFjdG9yKTsKKworLyoqIFJldHVybnMgdGhlIGdlbmVyYXRvciBvZiBhIEVDX0dST1VQIG9iamVjdC4KKyAqICBccGFyYW0gIGdyb3VwICBFQ19HUk9VUCBvYmplY3QKKyAqICBccmV0dXJuIHRoZSBjdXJyZW50bHkgdXNlZCBnZW5lcmF0b3IgKHBvc3NpYmx5IE5VTEwpLgorICovCitjb25zdCBFQ19QT0lOVCAqRUNfR1JPVVBfZ2V0MF9nZW5lcmF0b3IoY29uc3QgRUNfR1JPVVAgKmdyb3VwKTsKKworLyoqIEdldHMgdGhlIG9yZGVyIG9mIGEgRUNfR1JPVVAKKyAqICBccGFyYW0gIGdyb3VwICBFQ19HUk9VUCBvYmplY3QKKyAqICBccGFyYW0gIG9yZGVyICBCSUdOVU0gdG8gd2hpY2ggdGhlIG9yZGVyIGlzIGNvcGllZAorICogIFxwYXJhbSAgY3R4ICAgIEJOX0NUWCBvYmplY3QgKG9wdGlvbmFsKQorICogIFxyZXR1cm4gMSBvbiBzdWNjZXNzIGFuZCAwIGlmIGFuIGVycm9yIG9jY3VyZWQKKyAqLworaW50IEVDX0dST1VQX2dldF9vcmRlcihjb25zdCBFQ19HUk9VUCAqZ3JvdXAsIEJJR05VTSAqb3JkZXIsIEJOX0NUWCAqY3R4KTsKKworLyoqIEdldHMgdGhlIGNvZmFjdG9yIG9mIGEgRUNfR1JPVVAKKyAqICBccGFyYW0gIGdyb3VwICAgICBFQ19HUk9VUCBvYmplY3QKKyAqICBccGFyYW0gIGNvZmFjdG9yICBCSUdOVU0gdG8gd2hpY2ggdGhlIGNvZmFjdG9yIGlzIGNvcGllZAorICogIFxwYXJhbSAgY3R4ICAgICAgIEJOX0NUWCBvYmplY3QgKG9wdGlvbmFsKQorICogIFxyZXR1cm4gMSBvbiBzdWNjZXNzIGFuZCAwIGlmIGFuIGVycm9yIG9jY3VyZWQKKyAqLworaW50IEVDX0dST1VQX2dldF9jb2ZhY3Rvcihjb25zdCBFQ19HUk9VUCAqZ3JvdXAsIEJJR05VTSAqY29mYWN0b3IsIEJOX0NUWCAqY3R4KTsKKworLyoqIFNldHMgdGhlIG5hbWUgb2YgYSBFQ19HUk9VUCBvYmplY3QKKyAqICBccGFyYW0gIGdyb3VwICBFQ19HUk9VUCBvYmplY3QKKyAqICBccGFyYW0gIG5pZCAgICBOSUQgb2YgdGhlIGN1cnZlIG5hbWUgT0lECisgKi8KK3ZvaWQgRUNfR1JPVVBfc2V0X2N1cnZlX25hbWUoRUNfR1JPVVAgKmdyb3VwLCBpbnQgbmlkKTsKKworLyoqIFJldHVybnMgdGhlIGN1cnZlIG5hbWUgb2YgYSBFQ19HUk9VUCBvYmplY3QKKyAqICBccGFyYW0gIGdyb3VwICBFQ19HUk9VUCBvYmplY3QKKyAqICBccmV0dXJuIE5JRCBvZiB0aGUgY3VydmUgbmFtZSBPSUQgb3IgMCBpZiBub3Qgc2V0LgorICovCitpbnQgRUNfR1JPVVBfZ2V0X2N1cnZlX25hbWUoY29uc3QgRUNfR1JPVVAgKmdyb3VwKTsKKwordm9pZCBFQ19HUk9VUF9zZXRfYXNuMV9mbGFnKEVDX0dST1VQICpncm91cCwgaW50IGZsYWcpOworaW50IEVDX0dST1VQX2dldF9hc24xX2ZsYWcoY29uc3QgRUNfR1JPVVAgKmdyb3VwKTsKIAogdm9pZCBFQ19HUk9VUF9zZXRfcG9pbnRfY29udmVyc2lvbl9mb3JtKEVDX0dST1VQICosIHBvaW50X2NvbnZlcnNpb25fZm9ybV90KTsKIHBvaW50X2NvbnZlcnNpb25fZm9ybV90IEVDX0dST1VQX2dldF9wb2ludF9jb252ZXJzaW9uX2Zvcm0oY29uc3QgRUNfR1JPVVAgKik7CkBAIC0xNjAsMzYgKzI2MiwxMTQgQEAKIHNpemVfdCBFQ19HUk9VUF9nZXRfc2VlZF9sZW4oY29uc3QgRUNfR1JPVVAgKik7CiBzaXplX3QgRUNfR1JPVVBfc2V0X3NlZWQoRUNfR1JPVVAgKiwgY29uc3QgdW5zaWduZWQgY2hhciAqLCBzaXplX3QgbGVuKTsKIAotaW50IEVDX0dST1VQX3NldF9jdXJ2ZV9HRnAoRUNfR1JPVVAgKiwgY29uc3QgQklHTlVNICpwLCBjb25zdCBCSUdOVU0gKmEsIGNvbnN0IEJJR05VTSAqYiwgQk5fQ1RYICopOwotaW50IEVDX0dST1VQX2dldF9jdXJ2ZV9HRnAoY29uc3QgRUNfR1JPVVAgKiwgQklHTlVNICpwLCBCSUdOVU0gKmEsIEJJR05VTSAqYiwgQk5fQ1RYICopOwotaW50IEVDX0dST1VQX3NldF9jdXJ2ZV9HRjJtKEVDX0dST1VQICosIGNvbnN0IEJJR05VTSAqcCwgY29uc3QgQklHTlVNICphLCBjb25zdCBCSUdOVU0gKmIsIEJOX0NUWCAqKTsKLWludCBFQ19HUk9VUF9nZXRfY3VydmVfR0YybShjb25zdCBFQ19HUk9VUCAqLCBCSUdOVU0gKnAsIEJJR05VTSAqYSwgQklHTlVNICpiLCBCTl9DVFggKik7CisvKiogU2V0cyB0aGUgcGFyYW1ldGVyIG9mIGEgZWMgb3ZlciBHRnAgZGVmaW5lZCBieSB5XjIgPSB4XjMgKyBhKnggKyBiCisgKiAgXHBhcmFtICBncm91cCAgRUNfR1JPVVAgb2JqZWN0CisgKiAgXHBhcmFtICBwICAgICAgQklHTlVNIHdpdGggdGhlIHByaW1lIG51bWJlcgorICogIFxwYXJhbSAgYSAgICAgIEJJR05VTSB3aXRoIHBhcmFtZXRlciBhIG9mIHRoZSBlcXVhdGlvbgorICogIFxwYXJhbSAgYiAgICAgIEJJR05VTSB3aXRoIHBhcmFtZXRlciBiIG9mIHRoZSBlcXVhdGlvbgorICogIFxwYXJhbSAgY3R4ICAgIEJOX0NUWCBvYmplY3QgKG9wdGlvbmFsKQorICogIFxyZXR1cm4gMSBvbiBzdWNjZXNzIGFuZCAwIGlmIGFuIGVycm9yIG9jY3VyZWQKKyAqLworaW50IEVDX0dST1VQX3NldF9jdXJ2ZV9HRnAoRUNfR1JPVVAgKmdyb3VwLCBjb25zdCBCSUdOVU0gKnAsIGNvbnN0IEJJR05VTSAqYSwgY29uc3QgQklHTlVNICpiLCBCTl9DVFggKmN0eCk7CiAKLS8qIHJldHVybnMgdGhlIG51bWJlciBvZiBiaXRzIG5lZWRlZCB0byByZXByZXNlbnQgYSBmaWVsZCBlbGVtZW50ICovCi1pbnQgRUNfR1JPVVBfZ2V0X2RlZ3JlZShjb25zdCBFQ19HUk9VUCAqKTsKKy8qKiBHZXRzIHRoZSBwYXJhbWV0ZXIgb2YgdGhlIGVjIG92ZXIgR0ZwIGRlZmluZWQgYnkgeV4yID0geF4zICsgYSp4ICsgYgorICogIFxwYXJhbSAgZ3JvdXAgIEVDX0dST1VQIG9iamVjdAorICogIFxwYXJhbSAgcCAgICAgIEJJR05VTSBmb3IgdGhlIHByaW1lIG51bWJlcgorICogIFxwYXJhbSAgYSAgICAgIEJJR05VTSBmb3IgcGFyYW1ldGVyIGEgb2YgdGhlIGVxdWF0aW9uCisgKiAgXHBhcmFtICBiICAgICAgQklHTlVNIGZvciBwYXJhbWV0ZXIgYiBvZiB0aGUgZXF1YXRpb24KKyAqICBccGFyYW0gIGN0eCAgICBCTl9DVFggb2JqZWN0IChvcHRpb25hbCkKKyAqICBccmV0dXJuIDEgb24gc3VjY2VzcyBhbmQgMCBpZiBhbiBlcnJvciBvY2N1cmVkCisgKi8KK2ludCBFQ19HUk9VUF9nZXRfY3VydmVfR0ZwKGNvbnN0IEVDX0dST1VQICpncm91cCwgQklHTlVNICpwLCBCSUdOVU0gKmEsIEJJR05VTSAqYiwgQk5fQ1RYICpjdHgpOwogCi0vKiBFQ19HUk9VUF9jaGVjaygpIHJldHVybnMgMSBpZiAnZ3JvdXAnIGRlZmluZXMgYSB2YWxpZCBncm91cCwgMCBvdGhlcndpc2UgKi8KKy8qKiBTZXRzIHRoZSBwYXJhbWV0ZXIgb2YgYSBlYyBvdmVyIEdGMm0gZGVmaW5lZCBieSB5XjIgKyB4KnkgPSB4XjMgKyBhKnheMiArIGIKKyAqICBccGFyYW0gIGdyb3VwICBFQ19HUk9VUCBvYmplY3QKKyAqICBccGFyYW0gIHAgICAgICBCSUdOVU0gd2l0aCB0aGUgcG9seW5vbWlhbCBkZWZpbmluZyB0aGUgdW5kZXJseWluZyBmaWVsZAorICogIFxwYXJhbSAgYSAgICAgIEJJR05VTSB3aXRoIHBhcmFtZXRlciBhIG9mIHRoZSBlcXVhdGlvbgorICogIFxwYXJhbSAgYiAgICAgIEJJR05VTSB3aXRoIHBhcmFtZXRlciBiIG9mIHRoZSBlcXVhdGlvbgorICogIFxwYXJhbSAgY3R4ICAgIEJOX0NUWCBvYmplY3QgKG9wdGlvbmFsKQorICogIFxyZXR1cm4gMSBvbiBzdWNjZXNzIGFuZCAwIGlmIGFuIGVycm9yIG9jY3VyZWQKKyAqLworaW50IEVDX0dST1VQX3NldF9jdXJ2ZV9HRjJtKEVDX0dST1VQICpncm91cCwgY29uc3QgQklHTlVNICpwLCBjb25zdCBCSUdOVU0gKmEsIGNvbnN0IEJJR05VTSAqYiwgQk5fQ1RYICpjdHgpOworCisvKiogR2V0cyB0aGUgcGFyYW1ldGVyIG9mIHRoZSBlYyBvdmVyIEdGMm0gZGVmaW5lZCBieSB5XjIgKyB4KnkgPSB4XjMgKyBhKnheMiArIGIKKyAqICBccGFyYW0gIGdyb3VwICBFQ19HUk9VUCBvYmplY3QKKyAqICBccGFyYW0gIHAgICAgICBCSUdOVU0gZm9yIHRoZSBwb2x5bm9taWFsIGRlZmluaW5nIHRoZSB1bmRlcmx5aW5nIGZpZWxkCisgKiAgXHBhcmFtICBhICAgICAgQklHTlVNIGZvciBwYXJhbWV0ZXIgYSBvZiB0aGUgZXF1YXRpb24KKyAqICBccGFyYW0gIGIgICAgICBCSUdOVU0gZm9yIHBhcmFtZXRlciBiIG9mIHRoZSBlcXVhdGlvbgorICogIFxwYXJhbSAgY3R4ICAgIEJOX0NUWCBvYmplY3QgKG9wdGlvbmFsKQorICogIFxyZXR1cm4gMSBvbiBzdWNjZXNzIGFuZCAwIGlmIGFuIGVycm9yIG9jY3VyZWQKKyAqLworaW50IEVDX0dST1VQX2dldF9jdXJ2ZV9HRjJtKGNvbnN0IEVDX0dST1VQICpncm91cCwgQklHTlVNICpwLCBCSUdOVU0gKmEsIEJJR05VTSAqYiwgQk5fQ1RYICpjdHgpOworCisvKiogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJpdHMgbmVlZGVkIHRvIHJlcHJlc2VudCBhIGZpZWxkIGVsZW1lbnQgCisgKiAgXHBhcmFtICBncm91cCAgRUNfR1JPVVAgb2JqZWN0CisgKiAgXHJldHVybiBudW1iZXIgb2YgYml0cyBuZWVkZWQgdG8gcmVwcmVzZW50IGEgZmllbGQgZWxlbWVudAorICovCitpbnQgRUNfR1JPVVBfZ2V0X2RlZ3JlZShjb25zdCBFQ19HUk9VUCAqZ3JvdXApOworCisvKiogQ2hlY2tzIHdoZXRoZXIgdGhlIHBhcmFtZXRlciBpbiB0aGUgRUNfR1JPVVAgZGVmaW5lIGEgdmFsaWQgZWMgZ3JvdXAKKyAqICBccGFyYW0gIGdyb3VwICBFQ19HUk9VUCBvYmplY3QKKyAqICBccGFyYW0gIGN0eCAgICBCTl9DVFggb2JqZWN0IChvcHRpb25hbCkKKyAqICBccmV0dXJuIDEgaWYgZ3JvdXAgaXMgYSB2YWxpZCBlYyBncm91cCBhbmQgMCBvdGhlcndpc2UKKyAqLwogaW50IEVDX0dST1VQX2NoZWNrKGNvbnN0IEVDX0dST1VQICpncm91cCwgQk5fQ1RYICpjdHgpOwotLyogRUNfR1JPVVBfY2hlY2tfZGlzY3JpbWluYW50KCkgcmV0dXJucyAxIGlmIHRoZSBkaXNjcmltaW5hbnQgb2YgdGhlCi0gKiBlbGxpcHRpYyBjdXJ2ZSBpcyBub3QgemVybywgMCBvdGhlcndpc2UgKi8KLWludCBFQ19HUk9VUF9jaGVja19kaXNjcmltaW5hbnQoY29uc3QgRUNfR1JPVVAgKiwgQk5fQ1RYICopOwogCi0vKiBFQ19HUk9VUF9jbXAoKSByZXR1cm5zIDAgaWYgYm90aCBncm91cHMgYXJlIGVxdWFsIGFuZCAxIG90aGVyd2lzZSAqLwotaW50IEVDX0dST1VQX2NtcChjb25zdCBFQ19HUk9VUCAqLCBjb25zdCBFQ19HUk9VUCAqLCBCTl9DVFggKik7CisvKiogQ2hlY2tzIHdoZXRoZXIgdGhlIGRpc2NyaW1pbmFudCBvZiB0aGUgZWxsaXB0aWMgY3VydmUgaXMgemVybyBvciBub3QKKyAqICBccGFyYW0gIGdyb3VwICBFQ19HUk9VUCBvYmplY3QKKyAqICBccGFyYW0gIGN0eCAgICBCTl9DVFggb2JqZWN0IChvcHRpb25hbCkKKyAqICBccmV0dXJuIDEgaWYgdGhlIGRpc2NyaW1pbmFudCBpcyBub3QgemVybyBhbmQgMCBvdGhlcndpc2UKKyAqLworaW50IEVDX0dST1VQX2NoZWNrX2Rpc2NyaW1pbmFudChjb25zdCBFQ19HUk9VUCAqZ3JvdXAsIEJOX0NUWCAqY3R4KTsKKworLyoqIENvbXBhcmVzIHR3byBFQ19HUk9VUCBvYmplY3RzCisgKiAgXHBhcmFtICBhICAgIGZpcnN0IEVDX0dST1VQIG9iamVjdAorICogIFxwYXJhbSAgYiAgICBzZWNvbmQgRUNfR1JPVVAgb2JqZWN0CisgKiAgXHBhcmFtICBjdHggIEJOX0NUWCBvYmplY3QgKG9wdGlvbmFsKQorICogIFxyZXR1cm4gMCBpZiBib3RoIGdyb3VwcyBhcmUgZXF1YWwgYW5kIDEgb3RoZXJ3aXNlCisgKi8KK2ludCBFQ19HUk9VUF9jbXAoY29uc3QgRUNfR1JPVVAgKmEsIGNvbnN0IEVDX0dST1VQICpiLCBCTl9DVFggKmN0eCk7CiAKIC8qIEVDX0dST1VQX25ld19HRiooKSBjYWxscyBFQ19HUk9VUF9uZXcoKSBhbmQgRUNfR1JPVVBfc2V0X0dGKigpCiAgKiBhZnRlciBjaG9vc2luZyBhbiBhcHByb3ByaWF0ZSBFQ19NRVRIT0QgKi8KLUVDX0dST1VQICpFQ19HUk9VUF9uZXdfY3VydmVfR0ZwKGNvbnN0IEJJR05VTSAqcCwgY29uc3QgQklHTlVNICphLCBjb25zdCBCSUdOVU0gKmIsIEJOX0NUWCAqKTsKLUVDX0dST1VQICpFQ19HUk9VUF9uZXdfY3VydmVfR0YybShjb25zdCBCSUdOVU0gKnAsIGNvbnN0IEJJR05VTSAqYSwgY29uc3QgQklHTlVNICpiLCBCTl9DVFggKik7CiAKLS8qIEVDX0dST1VQX25ld19ieV9jdXJ2ZV9uYW1lKCkgY3JlYXRlcyBhIEVDX0dST1VQIHN0cnVjdHVyZQotICogc3BlY2lmaWVkIGJ5IGEgY3VydmUgbmFtZSAoaW4gZm9ybSBvZiBhIE5JRCkgKi8KKy8qKiBDcmVhdGVzIGEgbmV3IEVDX0dST1VQIG9iamVjdCB3aXRoIHRoZSBzcGVjaWZpZWQgcGFyYW1ldGVycyBkZWZpbmVkCisgKiAgb3ZlciBHRnAgKGRlZmluZWQgYnkgdGhlIGVxdWF0aW9uIHleMiA9IHheMyArIGEqeCArIGIpCisgKiAgXHBhcmFtICBwICAgIEJJR05VTSB3aXRoIHRoZSBwcmltZSBudW1iZXIKKyAqICBccGFyYW0gIGEgICAgQklHTlVNIHdpdGggdGhlIHBhcmFtZXRlciBhIG9mIHRoZSBlcXVhdGlvbgorICogIFxwYXJhbSAgYiAgICBCSUdOVU0gd2l0aCB0aGUgcGFyYW1ldGVyIGIgb2YgdGhlIGVxdWF0aW9uCisgKiAgXHBhcmFtICBjdHggIEJOX0NUWCBvYmplY3QgKG9wdGlvbmFsKQorICogIFxyZXR1cm4gbmV3bHkgY3JlYXRlZCBFQ19HUk9VUCBvYmplY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIHBhcmFtZXRlcnMKKyAqLworRUNfR1JPVVAgKkVDX0dST1VQX25ld19jdXJ2ZV9HRnAoY29uc3QgQklHTlVNICpwLCBjb25zdCBCSUdOVU0gKmEsIGNvbnN0IEJJR05VTSAqYiwgQk5fQ1RYICpjdHgpOworCisvKiogQ3JlYXRlcyBhIG5ldyBFQ19HUk9VUCBvYmplY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIHBhcmFtZXRlcnMgZGVmaW5lZAorICogIG92ZXIgR0YybSAoZGVmaW5lZCBieSB0aGUgZXF1YXRpb24geV4yICsgeCp5ID0geF4zICsgYSp4XjIgKyBiKQorICogIFxwYXJhbSAgcCAgICBCSUdOVU0gd2l0aCB0aGUgcG9seW5vbWlhbCBkZWZpbmluZyB0aGUgdW5kZXJseWluZyBmaWVsZAorICogIFxwYXJhbSAgYSAgICBCSUdOVU0gd2l0aCB0aGUgcGFyYW1ldGVyIGEgb2YgdGhlIGVxdWF0aW9uCisgKiAgXHBhcmFtICBiICAgIEJJR05VTSB3aXRoIHRoZSBwYXJhbWV0ZXIgYiBvZiB0aGUgZXF1YXRpb24KKyAqICBccGFyYW0gIGN0eCAgQk5fQ1RYIG9iamVjdCAob3B0aW9uYWwpCisgKiAgXHJldHVybiBuZXdseSBjcmVhdGVkIEVDX0dST1VQIG9iamVjdCB3aXRoIHRoZSBzcGVjaWZpZWQgcGFyYW1ldGVycworICovCitFQ19HUk9VUCAqRUNfR1JPVVBfbmV3X2N1cnZlX0dGMm0oY29uc3QgQklHTlVNICpwLCBjb25zdCBCSUdOVU0gKmEsIGNvbnN0IEJJR05VTSAqYiwgQk5fQ1RYICpjdHgpOworCisvKiogQ3JlYXRlcyBhIEVDX0dST1VQIG9iamVjdCB3aXRoIGEgY3VydmUgc3BlY2lmaWVkIGJ5IGEgTklECisgKiAgXHBhcmFtICBuaWQgIE5JRCBvZiB0aGUgT0lEIG9mIHRoZSBjdXJ2ZSBuYW1lCisgKiAgXHJldHVybiBuZXdseSBjcmVhdGVkIEVDX0dST1VQIG9iamVjdCB3aXRoIHNwZWNpZmllZCBjdXJ2ZSBvciBOVUxMCisgKiAgICAgICAgICBpZiBhbiBlcnJvciBvY2N1cnJlZAorICovCiBFQ19HUk9VUCAqRUNfR1JPVVBfbmV3X2J5X2N1cnZlX25hbWUoaW50IG5pZCk7Ci0vKiBoYW5kbGluZyBvZiBpbnRlcm5hbCBjdXJ2ZXMgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgIGhhbmRsaW5nIG9mIGludGVybmFsIGN1cnZlcyAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKIHR5cGVkZWYgc3RydWN0IHsgCiAJaW50IG5pZDsKIAljb25zdCBjaGFyICpjb21tZW50OwogCX0gRUNfYnVpbHRpbl9jdXJ2ZTsKKwogLyogRUNfYnVpbHRpbl9jdXJ2ZXMoRUNfYnVpbHRpbl9jdXJ2ZSAqciwgc2l6ZV90IHNpemUpIHJldHVybnMgbnVtYmVyIAogICogb2YgYWxsIGF2YWlsYWJsZSBjdXJ2ZXMgb3IgemVybyBpZiBhIGVycm9yIG9jY3VycmVkLiAKICAqIEluIGNhc2UgciBpc3Qgbm90IHplcm8gbml0ZW1zIEVDX2J1aWx0aW5fY3VydmUgc3RydWN0dXJlcyAKQEAgLTE5NywzOSArMzc3LDE2OCBAQAogc2l6ZV90IEVDX2dldF9idWlsdGluX2N1cnZlcyhFQ19idWlsdGluX2N1cnZlICpyLCBzaXplX3Qgbml0ZW1zKTsKIAogCi0vKiBFQ19QT0lOVCBmdW5jdGlvbnMgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICBFQ19QT0lOVCBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotRUNfUE9JTlQgKkVDX1BPSU5UX25ldyhjb25zdCBFQ19HUk9VUCAqKTsKLXZvaWQgRUNfUE9JTlRfZnJlZShFQ19QT0lOVCAqKTsKLXZvaWQgRUNfUE9JTlRfY2xlYXJfZnJlZShFQ19QT0lOVCAqKTsKLWludCBFQ19QT0lOVF9jb3B5KEVDX1BPSU5UICosIGNvbnN0IEVDX1BPSU5UICopOwotRUNfUE9JTlQgKkVDX1BPSU5UX2R1cChjb25zdCBFQ19QT0lOVCAqLCBjb25zdCBFQ19HUk9VUCAqKTsKKy8qKiBDcmVhdGVzIGEgbmV3IEVDX1BPSU5UIG9iamVjdCBmb3IgdGhlIHNwZWNpZmllZCBFQ19HUk9VUAorICogIFxwYXJhbSAgZ3JvdXAgIEVDX0dST1VQIHRoZSB1bmRlcmx5aW5nIEVDX0dST1VQIG9iamVjdAorICogIFxyZXR1cm4gbmV3bHkgY3JlYXRlZCBFQ19QT0lOVCBvYmplY3Qgb3IgTlVMTCBpZiBhbiBlcnJvciBvY2N1cnJlZAorICovCitFQ19QT0lOVCAqRUNfUE9JTlRfbmV3KGNvbnN0IEVDX0dST1VQICpncm91cCk7CisKKy8qKiBGcmVlcyBhIEVDX1BPSU5UIG9iamVjdAorICogIFxwYXJhbSAgcG9pbnQgIEVDX1BPSU5UIG9iamVjdCB0byBiZSBmcmVlZAorICovCit2b2lkIEVDX1BPSU5UX2ZyZWUoRUNfUE9JTlQgKnBvaW50KTsKKworLyoqIENsZWFycyBhbmQgZnJlZXMgYSBFQ19QT0lOVCBvYmplY3QKKyAqICBccGFyYW0gIHBvaW50ICBFQ19QT0lOVCBvYmplY3QgdG8gYmUgY2xlYXJlZCBhbmQgZnJlZWQKKyAqLwordm9pZCBFQ19QT0lOVF9jbGVhcl9mcmVlKEVDX1BPSU5UICpwb2ludCk7CisKKy8qKiBDb3BpZXMgRUNfUE9JTlQgb2JqZWN0CisgKiAgXHBhcmFtICBkc3QgIGRlc3RpbmF0aW9uIEVDX1BPSU5UIG9iamVjdAorICogIFxwYXJhbSAgc3JjICBzb3VyY2UgRUNfUE9JTlQgb2JqZWN0CisgKiAgXHJldHVybiAxIG9uIHN1Y2Nlc3MgYW5kIDAgaWYgYW4gZXJyb3Igb2NjdXJlZAorICovCitpbnQgRUNfUE9JTlRfY29weShFQ19QT0lOVCAqZHN0LCBjb25zdCBFQ19QT0lOVCAqc3JjKTsKKworLyoqIENyZWF0ZXMgYSBuZXcgRUNfUE9JTlQgb2JqZWN0IGFuZCBjb3BpZXMgdGhlIGNvbnRlbnQgb2YgdGhlIHN1cHBsaWVkCisgKiAgRUNfUE9JTlQKKyAqICBccGFyYW0gIHNyYyAgICBzb3VyY2UgRUNfUE9JTlQgb2JqZWN0CisgKiAgXHBhcmFtICBncm91cCAgdW5kZXJseWluZyB0aGUgRUNfR1JPVVAgb2JqZWN0CisgKiAgXHJldHVybiBuZXdseSBjcmVhdGVkIEVDX1BPSU5UIG9iamVjdCBvciBOVUxMIGlmIGFuIGVycm9yIG9jY3VycmVkIAorICovCitFQ19QT0lOVCAqRUNfUE9JTlRfZHVwKGNvbnN0IEVDX1BPSU5UICpzcmMsIGNvbnN0IEVDX0dST1VQICpncm91cCk7CiAgCi1jb25zdCBFQ19NRVRIT0QgKkVDX1BPSU5UX21ldGhvZF9vZihjb25zdCBFQ19QT0lOVCAqKTsKKy8qKiBSZXR1cm5zIHRoZSBFQ19NRVRIT0QgdXNlZCBpbiBFQ19QT0lOVCBvYmplY3QgCisgKiAgXHBhcmFtICBwb2ludCAgRUNfUE9JTlQgb2JqZWN0CisgKiAgXHJldHVybiB0aGUgRUNfTUVUSE9EIHVzZWQKKyAqLworY29uc3QgRUNfTUVUSE9EICpFQ19QT0lOVF9tZXRob2Rfb2YoY29uc3QgRUNfUE9JTlQgKnBvaW50KTsKIAotaW50IEVDX1BPSU5UX3NldF90b19pbmZpbml0eShjb25zdCBFQ19HUk9VUCAqLCBFQ19QT0lOVCAqKTsKLWludCBFQ19QT0lOVF9zZXRfSnByb2plY3RpdmVfY29vcmRpbmF0ZXNfR0ZwKGNvbnN0IEVDX0dST1VQICosIEVDX1BPSU5UICosCi0JY29uc3QgQklHTlVNICp4LCBjb25zdCBCSUdOVU0gKnksIGNvbnN0IEJJR05VTSAqeiwgQk5fQ1RYICopOwotaW50IEVDX1BPSU5UX2dldF9KcHJvamVjdGl2ZV9jb29yZGluYXRlc19HRnAoY29uc3QgRUNfR1JPVVAgKiwgY29uc3QgRUNfUE9JTlQgKiwKLQlCSUdOVU0gKngsIEJJR05VTSAqeSwgQklHTlVNICp6LCBCTl9DVFggKik7Ci1pbnQgRUNfUE9JTlRfc2V0X2FmZmluZV9jb29yZGluYXRlc19HRnAoY29uc3QgRUNfR1JPVVAgKiwgRUNfUE9JTlQgKiwKLQljb25zdCBCSUdOVU0gKngsIGNvbnN0IEJJR05VTSAqeSwgQk5fQ1RYICopOwotaW50IEVDX1BPSU5UX2dldF9hZmZpbmVfY29vcmRpbmF0ZXNfR0ZwKGNvbnN0IEVDX0dST1VQICosIGNvbnN0IEVDX1BPSU5UICosCi0JQklHTlVNICp4LCBCSUdOVU0gKnksIEJOX0NUWCAqKTsKLWludCBFQ19QT0lOVF9zZXRfY29tcHJlc3NlZF9jb29yZGluYXRlc19HRnAoY29uc3QgRUNfR1JPVVAgKiwgRUNfUE9JTlQgKiwKLQljb25zdCBCSUdOVU0gKngsIGludCB5X2JpdCwgQk5fQ1RYICopOworLyoqIFNldHMgYSBwb2ludCB0byBpbmZpbml0eSAobmV1dHJhbCBlbGVtZW50KQorICogIFxwYXJhbSAgZ3JvdXAgIHVuZGVybHlpbmcgRUNfR1JPVVAgb2JqZWN0CisgKiAgXHBhcmFtICBwb2ludCAgRUNfUE9JTlQgdG8gc2V0IHRvIGluZmluaXR5CisgKiAgXHJldHVybiAxIG9uIHN1Y2Nlc3MgYW5kIDAgaWYgYW4gZXJyb3Igb2NjdXJlZAorICovCitpbnQgRUNfUE9JTlRfc2V0X3RvX2luZmluaXR5KGNvbnN0IEVDX0dST1VQICpncm91cCwgRUNfUE9JTlQgKnBvaW50KTsKIAotaW50IEVDX1BPSU5UX3NldF9hZmZpbmVfY29vcmRpbmF0ZXNfR0YybShjb25zdCBFQ19HUk9VUCAqLCBFQ19QT0lOVCAqLAotCWNvbnN0IEJJR05VTSAqeCwgY29uc3QgQklHTlVNICp5LCBCTl9DVFggKik7Ci1pbnQgRUNfUE9JTlRfZ2V0X2FmZmluZV9jb29yZGluYXRlc19HRjJtKGNvbnN0IEVDX0dST1VQICosIGNvbnN0IEVDX1BPSU5UICosCi0JQklHTlVNICp4LCBCSUdOVU0gKnksIEJOX0NUWCAqKTsKLWludCBFQ19QT0lOVF9zZXRfY29tcHJlc3NlZF9jb29yZGluYXRlc19HRjJtKGNvbnN0IEVDX0dST1VQICosIEVDX1BPSU5UICosCi0JY29uc3QgQklHTlVNICp4LCBpbnQgeV9iaXQsIEJOX0NUWCAqKTsKKy8qKiBTZXRzIHRoZSBqYWNvYmlhbiBwcm9qZWN0aXZlIGNvb3JkaW5hdGVzIG9mIGEgRUNfUE9JTlQgb3ZlciBHRnAKKyAqICBccGFyYW0gIGdyb3VwICB1bmRlcmx5aW5nIEVDX0dST1VQIG9iamVjdAorICogIFxwYXJhbSAgcCAgICAgIEVDX1BPSU5UIG9iamVjdAorICogIFxwYXJhbSAgeCAgICAgIEJJR05VTSB3aXRoIHRoZSB4LWNvb3JkaW5hdGUKKyAqICBccGFyYW0gIHkgICAgICBCSUdOVU0gd2l0aCB0aGUgeS1jb29yZGluYXRlCisgKiAgXHBhcmFtICB6ICAgICAgQklHTlVNIHdpdGggdGhlIHotY29vcmRpbmF0ZQorICogIFxwYXJhbSAgY3R4ICAgIEJOX0NUWCBvYmplY3QgKG9wdGlvbmFsKQorICogIFxyZXR1cm4gMSBvbiBzdWNjZXNzIGFuZCAwIGlmIGFuIGVycm9yIG9jY3VyZWQKKyAqLworaW50IEVDX1BPSU5UX3NldF9KcHJvamVjdGl2ZV9jb29yZGluYXRlc19HRnAoY29uc3QgRUNfR1JPVVAgKmdyb3VwLCBFQ19QT0lOVCAqcCwKKwljb25zdCBCSUdOVU0gKngsIGNvbnN0IEJJR05VTSAqeSwgY29uc3QgQklHTlVNICp6LCBCTl9DVFggKmN0eCk7CiAKLXNpemVfdCBFQ19QT0lOVF9wb2ludDJvY3QoY29uc3QgRUNfR1JPVVAgKiwgY29uc3QgRUNfUE9JTlQgKiwgcG9pbnRfY29udmVyc2lvbl9mb3JtX3QgZm9ybSwKLSAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgbGVuLCBCTl9DVFggKik7Ci1pbnQgRUNfUE9JTlRfb2N0MnBvaW50KGNvbnN0IEVDX0dST1VQICosIEVDX1BPSU5UICosCi0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwgQk5fQ1RYICopOworLyoqIEdldHMgdGhlIGphY29iaWFuIHByb2plY3RpdmUgY29vcmRpbmF0ZXMgb2YgYSBFQ19QT0lOVCBvdmVyIEdGcAorICogIFxwYXJhbSAgZ3JvdXAgIHVuZGVybHlpbmcgRUNfR1JPVVAgb2JqZWN0CisgKiAgXHBhcmFtICBwICAgICAgRUNfUE9JTlQgb2JqZWN0CisgKiAgXHBhcmFtICB4ICAgICAgQklHTlVNIGZvciB0aGUgeC1jb29yZGluYXRlCisgKiAgXHBhcmFtICB5ICAgICAgQklHTlVNIGZvciB0aGUgeS1jb29yZGluYXRlCisgKiAgXHBhcmFtICB6ICAgICAgQklHTlVNIGZvciB0aGUgei1jb29yZGluYXRlCisgKiAgXHBhcmFtICBjdHggICAgQk5fQ1RYIG9iamVjdCAob3B0aW9uYWwpCisgKiAgXHJldHVybiAxIG9uIHN1Y2Nlc3MgYW5kIDAgaWYgYW4gZXJyb3Igb2NjdXJlZAorICovCitpbnQgRUNfUE9JTlRfZ2V0X0pwcm9qZWN0aXZlX2Nvb3JkaW5hdGVzX0dGcChjb25zdCBFQ19HUk9VUCAqZ3JvdXAsCisJY29uc3QgRUNfUE9JTlQgKnAsIEJJR05VTSAqeCwgQklHTlVNICp5LCBCSUdOVU0gKnosIEJOX0NUWCAqY3R4KTsKKworLyoqIFNldHMgdGhlIGFmZmluZSBjb29yZGluYXRlcyBvZiBhIEVDX1BPSU5UIG92ZXIgR0ZwCisgKiAgXHBhcmFtICBncm91cCAgdW5kZXJseWluZyBFQ19HUk9VUCBvYmplY3QKKyAqICBccGFyYW0gIHAgICAgICBFQ19QT0lOVCBvYmplY3QKKyAqICBccGFyYW0gIHggICAgICBCSUdOVU0gd2l0aCB0aGUgeC1jb29yZGluYXRlCisgKiAgXHBhcmFtICB5ICAgICAgQklHTlVNIHdpdGggdGhlIHktY29vcmRpbmF0ZQorICogIFxwYXJhbSAgY3R4ICAgIEJOX0NUWCBvYmplY3QgKG9wdGlvbmFsKQorICogIFxyZXR1cm4gMSBvbiBzdWNjZXNzIGFuZCAwIGlmIGFuIGVycm9yIG9jY3VyZWQKKyAqLworaW50IEVDX1BPSU5UX3NldF9hZmZpbmVfY29vcmRpbmF0ZXNfR0ZwKGNvbnN0IEVDX0dST1VQICpncm91cCwgRUNfUE9JTlQgKnAsCisJY29uc3QgQklHTlVNICp4LCBjb25zdCBCSUdOVU0gKnksIEJOX0NUWCAqY3R4KTsKKworLyoqIEdldHMgdGhlIGFmZmluZSBjb29yZGluYXRlcyBvZiBhIEVDX1BPSU5UIG92ZXIgR0ZwCisgKiAgXHBhcmFtICBncm91cCAgdW5kZXJseWluZyBFQ19HUk9VUCBvYmplY3QKKyAqICBccGFyYW0gIHAgICAgICBFQ19QT0lOVCBvYmplY3QKKyAqICBccGFyYW0gIHggICAgICBCSUdOVU0gZm9yIHRoZSB4LWNvb3JkaW5hdGUKKyAqICBccGFyYW0gIHkgICAgICBCSUdOVU0gZm9yIHRoZSB5LWNvb3JkaW5hdGUKKyAqICBccGFyYW0gIGN0eCAgICBCTl9DVFggb2JqZWN0IChvcHRpb25hbCkKKyAqICBccmV0dXJuIDEgb24gc3VjY2VzcyBhbmQgMCBpZiBhbiBlcnJvciBvY2N1cmVkCisgKi8KK2ludCBFQ19QT0lOVF9nZXRfYWZmaW5lX2Nvb3JkaW5hdGVzX0dGcChjb25zdCBFQ19HUk9VUCAqZ3JvdXAsCisJY29uc3QgRUNfUE9JTlQgKnAsIEJJR05VTSAqeCwgQklHTlVNICp5LCBCTl9DVFggKmN0eCk7CisKKy8qKiBTZXRzIHRoZSB4OS42MiBjb21wcmVzc2VkIGNvb3JkaW5hdGVzIG9mIGEgRUNfUE9JTlQgb3ZlciBHRnAKKyAqICBccGFyYW0gIGdyb3VwICB1bmRlcmx5aW5nIEVDX0dST1VQIG9iamVjdAorICogIFxwYXJhbSAgcCAgICAgIEVDX1BPSU5UIG9iamVjdAorICogIFxwYXJhbSAgeCAgICAgIEJJR05VTSB3aXRoIHgtY29vcmRpbmF0ZQorICogIFxwYXJhbSAgeV9iaXQgIGludGVnZXIgd2l0aCB0aGUgeS1CaXQgKGVpdGhlciAwIG9yIDEpCisgKiAgXHBhcmFtICBjdHggICAgQk5fQ1RYIG9iamVjdCAob3B0aW9uYWwpCisgKiAgXHJldHVybiAxIG9uIHN1Y2Nlc3MgYW5kIDAgaWYgYW4gZXJyb3Igb2NjdXJlZAorICovCitpbnQgRUNfUE9JTlRfc2V0X2NvbXByZXNzZWRfY29vcmRpbmF0ZXNfR0ZwKGNvbnN0IEVDX0dST1VQICpncm91cCwgRUNfUE9JTlQgKnAsCisJY29uc3QgQklHTlVNICp4LCBpbnQgeV9iaXQsIEJOX0NUWCAqY3R4KTsKKworLyoqIFNldHMgdGhlIGFmZmluZSBjb29yZGluYXRlcyBvZiBhIEVDX1BPSU5UIG92ZXIgR0YybQorICogIFxwYXJhbSAgZ3JvdXAgIHVuZGVybHlpbmcgRUNfR1JPVVAgb2JqZWN0CisgKiAgXHBhcmFtICBwICAgICAgRUNfUE9JTlQgb2JqZWN0CisgKiAgXHBhcmFtICB4ICAgICAgQklHTlVNIHdpdGggdGhlIHgtY29vcmRpbmF0ZQorICogIFxwYXJhbSAgeSAgICAgIEJJR05VTSB3aXRoIHRoZSB5LWNvb3JkaW5hdGUKKyAqICBccGFyYW0gIGN0eCAgICBCTl9DVFggb2JqZWN0IChvcHRpb25hbCkKKyAqICBccmV0dXJuIDEgb24gc3VjY2VzcyBhbmQgMCBpZiBhbiBlcnJvciBvY2N1cmVkCisgKi8KK2ludCBFQ19QT0lOVF9zZXRfYWZmaW5lX2Nvb3JkaW5hdGVzX0dGMm0oY29uc3QgRUNfR1JPVVAgKmdyb3VwLCBFQ19QT0lOVCAqcCwKKwljb25zdCBCSUdOVU0gKngsIGNvbnN0IEJJR05VTSAqeSwgQk5fQ1RYICpjdHgpOworCisvKiogR2V0cyB0aGUgYWZmaW5lIGNvb3JkaW5hdGVzIG9mIGEgRUNfUE9JTlQgb3ZlciBHRjJtCisgKiAgXHBhcmFtICBncm91cCAgdW5kZXJseWluZyBFQ19HUk9VUCBvYmplY3QKKyAqICBccGFyYW0gIHAgICAgICBFQ19QT0lOVCBvYmplY3QKKyAqICBccGFyYW0gIHggICAgICBCSUdOVU0gZm9yIHRoZSB4LWNvb3JkaW5hdGUKKyAqICBccGFyYW0gIHkgICAgICBCSUdOVU0gZm9yIHRoZSB5LWNvb3JkaW5hdGUKKyAqICBccGFyYW0gIGN0eCAgICBCTl9DVFggb2JqZWN0IChvcHRpb25hbCkKKyAqICBccmV0dXJuIDEgb24gc3VjY2VzcyBhbmQgMCBpZiBhbiBlcnJvciBvY2N1cmVkCisgKi8KK2ludCBFQ19QT0lOVF9nZXRfYWZmaW5lX2Nvb3JkaW5hdGVzX0dGMm0oY29uc3QgRUNfR1JPVVAgKmdyb3VwLAorCWNvbnN0IEVDX1BPSU5UICpwLCBCSUdOVU0gKngsIEJJR05VTSAqeSwgQk5fQ1RYICpjdHgpOworCisvKiogU2V0cyB0aGUgeDkuNjIgY29tcHJlc3NlZCBjb29yZGluYXRlcyBvZiBhIEVDX1BPSU5UIG92ZXIgR0YybQorICogIFxwYXJhbSAgZ3JvdXAgIHVuZGVybHlpbmcgRUNfR1JPVVAgb2JqZWN0CisgKiAgXHBhcmFtICBwICAgICAgRUNfUE9JTlQgb2JqZWN0CisgKiAgXHBhcmFtICB4ICAgICAgQklHTlVNIHdpdGggeC1jb29yZGluYXRlCisgKiAgXHBhcmFtICB5X2JpdCAgaW50ZWdlciB3aXRoIHRoZSB5LUJpdCAoZWl0aGVyIDAgb3IgMSkKKyAqICBccGFyYW0gIGN0eCAgICBCTl9DVFggb2JqZWN0IChvcHRpb25hbCkKKyAqICBccmV0dXJuIDEgb24gc3VjY2VzcyBhbmQgMCBpZiBhbiBlcnJvciBvY2N1cmVkCisgKi8KK2ludCBFQ19QT0lOVF9zZXRfY29tcHJlc3NlZF9jb29yZGluYXRlc19HRjJtKGNvbnN0IEVDX0dST1VQICpncm91cCwgRUNfUE9JTlQgKnAsCisJY29uc3QgQklHTlVNICp4LCBpbnQgeV9iaXQsIEJOX0NUWCAqY3R4KTsKKworLyoqIEVuY29kZXMgYSBFQ19QT0lOVCBvYmplY3QgdG8gYSBvY3RldCBzdHJpbmcKKyAqICBccGFyYW0gIGdyb3VwICB1bmRlcmx5aW5nIEVDX0dST1VQIG9iamVjdAorICogIFxwYXJhbSAgcCAgICAgIEVDX1BPSU5UIG9iamVjdAorICogIFxwYXJhbSAgZm9ybSAgIHBvaW50IGNvbnZlcnNpb24gZm9ybQorICogIFxwYXJhbSAgYnVmICAgIG1lbW9yeSBidWZmZXIgZm9yIHRoZSByZXN1bHQuIElmIE5VTEwgdGhlIGZ1bmN0aW9uIHJldHVybnMKKyAqICAgICAgICAgICAgICAgICByZXF1aXJlZCBidWZmZXIgc2l6ZS4KKyAqICBccGFyYW0gIGxlbiAgICBsZW5ndGggb2YgdGhlIG1lbW9yeSBidWZmZXIKKyAqICBccGFyYW0gIGN0eCAgICBCTl9DVFggb2JqZWN0IChvcHRpb25hbCkKKyAqICBccmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGVuY29kZWQgb2N0ZXQgc3RyaW5nIG9yIDAgaWYgYW4gZXJyb3Igb2NjdXJyZWQKKyAqLworc2l6ZV90IEVDX1BPSU5UX3BvaW50Mm9jdChjb25zdCBFQ19HUk9VUCAqZ3JvdXAsIGNvbnN0IEVDX1BPSU5UICpwLAorCXBvaW50X2NvbnZlcnNpb25fZm9ybV90IGZvcm0sCisgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwgQk5fQ1RYICpjdHgpOworCisvKiogRGVjb2RlcyBhIEVDX1BPSU5UIGZyb20gYSBvY3RldCBzdHJpbmcKKyAqICBccGFyYW0gIGdyb3VwICB1bmRlcmx5aW5nIEVDX0dST1VQIG9iamVjdAorICogIFxwYXJhbSAgcCAgICAgIEVDX1BPSU5UIG9iamVjdAorICogIFxwYXJhbSAgYnVmICAgIG1lbW9yeSBidWZmZXIgd2l0aCB0aGUgZW5jb2RlZCBlYyBwb2ludAorICogIFxwYXJhbSAgbGVuICAgIGxlbmd0aCBvZiB0aGUgZW5jb2RlZCBlYyBwb2ludAorICogIFxwYXJhbSAgY3R4ICAgIEJOX0NUWCBvYmplY3QgKG9wdGlvbmFsKQorICogIFxyZXR1cm4gMSBvbiBzdWNjZXNzIGFuZCAwIGlmIGFuIGVycm9yIG9jY3VyZWQKKyAqLworaW50IEVDX1BPSU5UX29jdDJwb2ludChjb25zdCBFQ19HUk9VUCAqZ3JvdXAsIEVDX1BPSU5UICpwLAorICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBsZW4sIEJOX0NUWCAqY3R4KTsKIAogLyogb3RoZXIgaW50ZXJmYWNlcyB0byBwb2ludDJvY3Qvb2N0MnBvaW50OiAqLwogQklHTlVNICpFQ19QT0lOVF9wb2ludDJibihjb25zdCBFQ19HUk9VUCAqLCBjb25zdCBFQ19QT0lOVCAqLApAQCAtMjQxLDI5ICs1NTAsMTA1IEBACiBFQ19QT0lOVCAqRUNfUE9JTlRfaGV4MnBvaW50KGNvbnN0IEVDX0dST1VQICosIGNvbnN0IGNoYXIgKiwKIAlFQ19QT0lOVCAqLCBCTl9DVFggKik7CiAKLWludCBFQ19QT0lOVF9hZGQoY29uc3QgRUNfR1JPVVAgKiwgRUNfUE9JTlQgKnIsIGNvbnN0IEVDX1BPSU5UICphLCBjb25zdCBFQ19QT0lOVCAqYiwgQk5fQ1RYICopOwotaW50IEVDX1BPSU5UX2RibChjb25zdCBFQ19HUk9VUCAqLCBFQ19QT0lOVCAqciwgY29uc3QgRUNfUE9JTlQgKmEsIEJOX0NUWCAqKTsKLWludCBFQ19QT0lOVF9pbnZlcnQoY29uc3QgRUNfR1JPVVAgKiwgRUNfUE9JTlQgKiwgQk5fQ1RYICopOwogCi1pbnQgRUNfUE9JTlRfaXNfYXRfaW5maW5pdHkoY29uc3QgRUNfR1JPVVAgKiwgY29uc3QgRUNfUE9JTlQgKik7Ci1pbnQgRUNfUE9JTlRfaXNfb25fY3VydmUoY29uc3QgRUNfR1JPVVAgKiwgY29uc3QgRUNfUE9JTlQgKiwgQk5fQ1RYICopOwotaW50IEVDX1BPSU5UX2NtcChjb25zdCBFQ19HUk9VUCAqLCBjb25zdCBFQ19QT0lOVCAqYSwgY29uc3QgRUNfUE9JTlQgKmIsIEJOX0NUWCAqKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgZnVuY3Rpb25zIGZvciBkb2luZyBFQ19QT0lOVCBhcml0aG1ldGljICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqIENvbXB1dGVzIHRoZSBzdW0gb2YgdHdvIEVDX1BPSU5UIAorICogIFxwYXJhbSAgZ3JvdXAgIHVuZGVybHlpbmcgRUNfR1JPVVAgb2JqZWN0CisgKiAgXHBhcmFtICByICAgICAgRUNfUE9JTlQgb2JqZWN0IGZvciB0aGUgcmVzdWx0IChyID0gYSArIGIpCisgKiAgXHBhcmFtICBhICAgICAgRUNfUE9JTlQgb2JqZWN0IHdpdGggdGhlIGZpcnN0IHN1bW1hbmQKKyAqICBccGFyYW0gIGIgICAgICBFQ19QT0lOVCBvYmplY3Qgd2l0aCB0aGUgc2Vjb25kIHN1bW1hbmQKKyAqICBccGFyYW0gIGN0eCAgICBCTl9DVFggb2JqZWN0IChvcHRpb25hbCkKKyAqICBccmV0dXJuIDEgb24gc3VjY2VzcyBhbmQgMCBpZiBhbiBlcnJvciBvY2N1cmVkCisgKi8KK2ludCBFQ19QT0lOVF9hZGQoY29uc3QgRUNfR1JPVVAgKmdyb3VwLCBFQ19QT0lOVCAqciwgY29uc3QgRUNfUE9JTlQgKmEsIGNvbnN0IEVDX1BPSU5UICpiLCBCTl9DVFggKmN0eCk7CisKKy8qKiBDb21wdXRlcyB0aGUgZG91YmxlIG9mIGEgRUNfUE9JTlQKKyAqICBccGFyYW0gIGdyb3VwICB1bmRlcmx5aW5nIEVDX0dST1VQIG9iamVjdAorICogIFxwYXJhbSAgciAgICAgIEVDX1BPSU5UIG9iamVjdCBmb3IgdGhlIHJlc3VsdCAociA9IDIgKiBhKQorICogIFxwYXJhbSAgYSAgICAgIEVDX1BPSU5UIG9iamVjdCAKKyAqICBccGFyYW0gIGN0eCAgICBCTl9DVFggb2JqZWN0IChvcHRpb25hbCkKKyAqICBccmV0dXJuIDEgb24gc3VjY2VzcyBhbmQgMCBpZiBhbiBlcnJvciBvY2N1cmVkCisgKi8KK2ludCBFQ19QT0lOVF9kYmwoY29uc3QgRUNfR1JPVVAgKmdyb3VwLCBFQ19QT0lOVCAqciwgY29uc3QgRUNfUE9JTlQgKmEsIEJOX0NUWCAqY3R4KTsKKworLyoqIENvbXB1dGVzIHRoZSBpbnZlcnNlIG9mIGEgRUNfUE9JTlQKKyAqICBccGFyYW0gIGdyb3VwICB1bmRlcmx5aW5nIEVDX0dST1VQIG9iamVjdAorICogIFxwYXJhbSAgYSAgICAgIEVDX1BPSU5UIG9iamVjdCB0byBiZSBpbnZlcnRlZCAoaXQncyB1c2VkIGZvciB0aGUgcmVzdWx0IGFzIHdlbGwpCisgKiAgXHBhcmFtICBjdHggICAgQk5fQ1RYIG9iamVjdCAob3B0aW9uYWwpCisgKiAgXHJldHVybiAxIG9uIHN1Y2Nlc3MgYW5kIDAgaWYgYW4gZXJyb3Igb2NjdXJlZAorICovCitpbnQgRUNfUE9JTlRfaW52ZXJ0KGNvbnN0IEVDX0dST1VQICpncm91cCwgRUNfUE9JTlQgKmEsIEJOX0NUWCAqY3R4KTsKKworLyoqIENoZWNrcyB3aGV0aGVyIHRoZSBwb2ludCBpcyB0aGUgbmV1dHJhbCBlbGVtZW50IG9mIHRoZSBncm91cAorICogIFxwYXJhbSAgZ3JvdXAgIHRoZSB1bmRlcmx5aW5nIEVDX0dST1VQIG9iamVjdAorICogIFxwYXJhbSAgcCAgICAgIEVDX1BPSU5UIG9iamVjdAorICogIFxyZXR1cm4gMSBpZiB0aGUgcG9pbnQgaXMgdGhlIG5ldXRyYWwgZWxlbWVudCBhbmQgMCBvdGhlcndpc2UKKyAqLworaW50IEVDX1BPSU5UX2lzX2F0X2luZmluaXR5KGNvbnN0IEVDX0dST1VQICpncm91cCwgY29uc3QgRUNfUE9JTlQgKnApOworCisvKiogQ2hlY2tzIHdoZXRoZXIgdGhlIHBvaW50IGlzIG9uIHRoZSBjdXJ2ZSAKKyAqICBccGFyYW0gIGdyb3VwICB1bmRlcmx5aW5nIEVDX0dST1VQIG9iamVjdAorICogIFxwYXJhbSAgcG9pbnQgIEVDX1BPSU5UIG9iamVjdCB0byBjaGVjaworICogIFxwYXJhbSAgY3R4ICAgIEJOX0NUWCBvYmplY3QgKG9wdGlvbmFsKQorICogIFxyZXR1cm4gMSBpZiBwb2ludCBpZiBvbiB0aGUgY3VydmUgYW5kIDAgb3RoZXJ3aXNlCisgKi8KK2ludCBFQ19QT0lOVF9pc19vbl9jdXJ2ZShjb25zdCBFQ19HUk9VUCAqZ3JvdXAsIGNvbnN0IEVDX1BPSU5UICpwb2ludCwgQk5fQ1RYICpjdHgpOworCisvKiogQ29tcGFyZXMgdHdvIEVDX1BPSU5UcyAKKyAqICBccGFyYW0gIGdyb3VwICB1bmRlcmx5aW5nIEVDX0dST1VQIG9iamVjdAorICogIFxwYXJhbSAgYSAgICAgIGZpcnN0IEVDX1BPSU5UIG9iamVjdAorICogIFxwYXJhbSAgYiAgICAgIHNlY29uZCBFQ19QT0lOVCBvYmplY3QKKyAqICBccGFyYW0gIGN0eCAgICBCTl9DVFggb2JqZWN0IChvcHRpb25hbCkKKyAqICBccmV0dXJuIDAgaWYgYm90aCBwb2ludHMgYXJlIGVxdWFsIGFuZCBhIHZhbHVlICE9IDAgb3RoZXJ3aXNlCisgKi8KK2ludCBFQ19QT0lOVF9jbXAoY29uc3QgRUNfR1JPVVAgKmdyb3VwLCBjb25zdCBFQ19QT0lOVCAqYSwgY29uc3QgRUNfUE9JTlQgKmIsIEJOX0NUWCAqY3R4KTsKIAogaW50IEVDX1BPSU5UX21ha2VfYWZmaW5lKGNvbnN0IEVDX0dST1VQICosIEVDX1BPSU5UICosIEJOX0NUWCAqKTsKIGludCBFQ19QT0lOVHNfbWFrZV9hZmZpbmUoY29uc3QgRUNfR1JPVVAgKiwgc2l6ZV90IG51bSwgRUNfUE9JTlQgKltdLCBCTl9DVFggKik7CiAKKy8qKiBDb21wdXRlcyByID0gZ2VuZXJhdG9yICogbiBzdW1fe2k9MH1ebnVtIHBbaV0gKiBtW2ldCisgKiAgXHBhcmFtICBncm91cCAgdW5kZXJseWluZyBFQ19HUk9VUCBvYmplY3QKKyAqICBccGFyYW0gIHIgICAgICBFQ19QT0lOVCBvYmplY3QgZm9yIHRoZSByZXN1bHQKKyAqICBccGFyYW0gIG4gICAgICBCSUdOVU0gd2l0aCB0aGUgbXVsdGlwbGllciBmb3IgdGhlIGdyb3VwIGdlbmVyYXRvciAob3B0aW9uYWwpCisgKiAgXHBhcmFtICBudW0gICAgbnVtYmVyIGZ1dGhlciBzdW1tYW5kcworICogIFxwYXJhbSAgcCAgICAgIGFycmF5IG9mIHNpemUgbnVtIG9mIEVDX1BPSU5UIG9iamVjdHMKKyAqICBccGFyYW0gIG0gICAgICBhcnJheSBvZiBzaXplIG51bSBvZiBCSUdOVU0gb2JqZWN0cworICogIFxwYXJhbSAgY3R4ICAgIEJOX0NUWCBvYmplY3QgKG9wdGlvbmFsKQorICogIFxyZXR1cm4gMSBvbiBzdWNjZXNzIGFuZCAwIGlmIGFuIGVycm9yIG9jY3VyZWQKKyAqLworaW50IEVDX1BPSU5Uc19tdWwoY29uc3QgRUNfR1JPVVAgKmdyb3VwLCBFQ19QT0lOVCAqciwgY29uc3QgQklHTlVNICpuLCBzaXplX3QgbnVtLCBjb25zdCBFQ19QT0lOVCAqcFtdLCBjb25zdCBCSUdOVU0gKm1bXSwgQk5fQ1RYICpjdHgpOwogCi1pbnQgRUNfUE9JTlRzX211bChjb25zdCBFQ19HUk9VUCAqLCBFQ19QT0lOVCAqciwgY29uc3QgQklHTlVNICosIHNpemVfdCBudW0sIGNvbnN0IEVDX1BPSU5UICpbXSwgY29uc3QgQklHTlVNICpbXSwgQk5fQ1RYICopOwotaW50IEVDX1BPSU5UX211bChjb25zdCBFQ19HUk9VUCAqLCBFQ19QT0lOVCAqciwgY29uc3QgQklHTlVNICosIGNvbnN0IEVDX1BPSU5UICosIGNvbnN0IEJJR05VTSAqLCBCTl9DVFggKik7CisvKiogQ29tcHV0ZXMgciA9IGdlbmVyYXRvciAqIG4gKyBxICogbQorICogIFxwYXJhbSAgZ3JvdXAgIHVuZGVybHlpbmcgRUNfR1JPVVAgb2JqZWN0CisgKiAgXHBhcmFtICByICAgICAgRUNfUE9JTlQgb2JqZWN0IGZvciB0aGUgcmVzdWx0CisgKiAgXHBhcmFtICBuICAgICAgQklHTlVNIHdpdGggdGhlIG11bHRpcGxpZXIgZm9yIHRoZSBncm91cCBnZW5lcmF0b3IgKG9wdGlvbmFsKQorICogIFxwYXJhbSAgcSAgICAgIEVDX1BPSU5UIG9iamVjdCB3aXRoIHRoZSBmaXJzdCBmYWN0b3Igb2YgdGhlIHNlY29uZCBzdW1tYW5kCisgKiAgXHBhcmFtICBtICAgICAgQklHTlVNIHdpdGggdGhlIHNlY29uZCBmYWN0b3Igb2YgdGhlIHNlY29uZCBzdW1tYW5kCisgKiAgXHBhcmFtICBjdHggICAgQk5fQ1RYIG9iamVjdCAob3B0aW9uYWwpCisgKiAgXHJldHVybiAxIG9uIHN1Y2Nlc3MgYW5kIDAgaWYgYW4gZXJyb3Igb2NjdXJlZAorICovCitpbnQgRUNfUE9JTlRfbXVsKGNvbnN0IEVDX0dST1VQICpncm91cCwgRUNfUE9JTlQgKnIsIGNvbnN0IEJJR05VTSAqbiwgY29uc3QgRUNfUE9JTlQgKnEsIGNvbnN0IEJJR05VTSAqbSwgQk5fQ1RYICpjdHgpOwogCi0vKiBFQ19HUk9VUF9wcmVjb21wdXRlX211bHQoKSBzdG9yZXMgbXVsdGlwbGVzIG9mIGdlbmVyYXRvciBmb3IgZmFzdGVyIHBvaW50IG11bHRpcGxpY2F0aW9uICovCi1pbnQgRUNfR1JPVVBfcHJlY29tcHV0ZV9tdWx0KEVDX0dST1VQICosIEJOX0NUWCAqKTsKLS8qIEVDX0dST1VQX2hhdmVfcHJlY29tcHV0ZV9tdWx0KCkgcmVwb3J0cyB3aGV0aGVyIHN1Y2ggcHJlY29tcHV0YXRpb24gaGFzIGJlZW4gZG9uZSAqLwotaW50IEVDX0dST1VQX2hhdmVfcHJlY29tcHV0ZV9tdWx0KGNvbnN0IEVDX0dST1VQICopOworLyoqIFN0b3JlcyBtdWx0aXBsZXMgb2YgZ2VuZXJhdG9yIGZvciBmYXN0ZXIgcG9pbnQgbXVsdGlwbGljYXRpb24KKyAqICBccGFyYW0gIGdyb3VwICBFQ19HUk9VUCBvYmplY3QKKyAqICBccGFyYW0gIGN0eCAgICBCTl9DVFggb2JqZWN0IChvcHRpb25hbCkKKyAqICBccmV0dXJuIDEgb24gc3VjY2VzcyBhbmQgMCBpZiBhbiBlcnJvciBvY2N1cmVkCisgKi8KK2ludCBFQ19HUk9VUF9wcmVjb21wdXRlX211bHQoRUNfR1JPVVAgKmdyb3VwLCBCTl9DVFggKmN0eCk7CisKKy8qKiBSZXBvcnRzIHdoZXRoZXIgYSBwcmVjb21wdXRhdGlvbiBoYXMgYmVlbiBkb25lCisgKiAgXHBhcmFtICBncm91cCAgRUNfR1JPVVAgb2JqZWN0CisgKiAgXHJldHVybiAxIGlmIGEgcHJlLWNvbXB1dGF0aW9uIGhhcyBiZWVuIGRvbmUgYW5kIDAgb3RoZXJ3aXNlCisgKi8KK2ludCBFQ19HUk9VUF9oYXZlX3ByZWNvbXB1dGVfbXVsdChjb25zdCBFQ19HUk9VUCAqZ3JvdXApOwogCiAKLQotLyogQVNOMSBzdHVmZiAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgIEFTTjEgc3R1ZmYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKiBFQ19HUk9VUF9nZXRfYmFzaXNfdHlwZSgpIHJldHVybnMgdGhlIE5JRCBvZiB0aGUgYmFzaXMgdHlwZQogICogdXNlZCB0byByZXByZXNlbnQgdGhlIGZpZWxkIGVsZW1lbnRzICovCkBAIC0yOTMsMjggKzY3OCw5NiBAQAogaW50ICAgICBFQ1BLUGFyYW1ldGVyc19wcmludF9mcChGSUxFICpmcCwgY29uc3QgRUNfR1JPVVAgKngsIGludCBvZmYpOwogI2VuZGlmCiAKLS8qIHRoZSBFQ19LRVkgc3R1ZmYgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgRUNfS0VZIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCiB0eXBlZGVmIHN0cnVjdCBlY19rZXlfc3QgRUNfS0VZOwogCiAvKiBzb21lIHZhbHVlcyBmb3IgdGhlIGVuY29kaW5nX2ZsYWcgKi8KICNkZWZpbmUgRUNfUEtFWV9OT19QQVJBTUVURVJTCTB4MDAxCiAjZGVmaW5lIEVDX1BLRVlfTk9fUFVCS0VZCTB4MDAyCiAKKy8qKiBDcmVhdGVzIGEgbmV3IEVDX0tFWSBvYmplY3QuCisgKiAgXHJldHVybiBFQ19LRVkgb2JqZWN0IG9yIE5VTEwgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCisgKi8KIEVDX0tFWSAqRUNfS0VZX25ldyh2b2lkKTsKKworLyoqIENyZWF0ZXMgYSBuZXcgRUNfS0VZIG9iamVjdCB1c2luZyBhIG5hbWVkIGN1cnZlIGFzIHVuZGVybHlpbmcKKyAqICBFQ19HUk9VUCBvYmplY3QuCisgKiAgXHBhcmFtICBuaWQgIE5JRCBvZiB0aGUgbmFtZWQgY3VydmUuCisgKiAgXHJldHVybiBFQ19LRVkgb2JqZWN0IG9yIE5VTEwgaWYgYW4gZXJyb3Igb2NjdXJyZWQuIAorICovCiBFQ19LRVkgKkVDX0tFWV9uZXdfYnlfY3VydmVfbmFtZShpbnQgbmlkKTsKLXZvaWQgRUNfS0VZX2ZyZWUoRUNfS0VZICopOwotRUNfS0VZICpFQ19LRVlfY29weShFQ19LRVkgKiwgY29uc3QgRUNfS0VZICopOwotRUNfS0VZICpFQ19LRVlfZHVwKGNvbnN0IEVDX0tFWSAqKTsKIAotaW50IEVDX0tFWV91cF9yZWYoRUNfS0VZICopOworLyoqIEZyZWVzIGEgRUNfS0VZIG9iamVjdC4KKyAqICBccGFyYW0gIGtleSAgRUNfS0VZIG9iamVjdCB0byBiZSBmcmVlZC4KKyAqLwordm9pZCBFQ19LRVlfZnJlZShFQ19LRVkgKmtleSk7CiAKLWNvbnN0IEVDX0dST1VQICpFQ19LRVlfZ2V0MF9ncm91cChjb25zdCBFQ19LRVkgKik7Ci1pbnQgRUNfS0VZX3NldF9ncm91cChFQ19LRVkgKiwgY29uc3QgRUNfR1JPVVAgKik7Ci1jb25zdCBCSUdOVU0gKkVDX0tFWV9nZXQwX3ByaXZhdGVfa2V5KGNvbnN0IEVDX0tFWSAqKTsKLWludCBFQ19LRVlfc2V0X3ByaXZhdGVfa2V5KEVDX0tFWSAqLCBjb25zdCBCSUdOVU0gKik7Ci1jb25zdCBFQ19QT0lOVCAqRUNfS0VZX2dldDBfcHVibGljX2tleShjb25zdCBFQ19LRVkgKik7Ci1pbnQgRUNfS0VZX3NldF9wdWJsaWNfa2V5KEVDX0tFWSAqLCBjb25zdCBFQ19QT0lOVCAqKTsKLXVuc2lnbmVkIEVDX0tFWV9nZXRfZW5jX2ZsYWdzKGNvbnN0IEVDX0tFWSAqKTsKKy8qKiBDb3BpZXMgYSBFQ19LRVkgb2JqZWN0LgorICogIFxwYXJhbSAgZHN0ICBkZXN0aW5hdGlvbiBFQ19LRVkgb2JqZWN0CisgKiAgXHBhcmFtICBzcmMgIHNyYyBFQ19LRVkgb2JqZWN0CisgKiAgXHJldHVybiBkc3Qgb3IgTlVMTCBpZiBhbiBlcnJvciBvY2N1cnJlZC4KKyAqLworRUNfS0VZICpFQ19LRVlfY29weShFQ19LRVkgKmRzdCwgY29uc3QgRUNfS0VZICpzcmMpOworCisvKiogQ3JlYXRlcyBhIG5ldyBFQ19LRVkgb2JqZWN0IGFuZCBjb3BpZXMgdGhlIGNvbnRlbnQgZnJvbSBzcmMgdG8gaXQuCisgKiAgXHBhcmFtICBzcmMgIHRoZSBzb3VyY2UgRUNfS0VZIG9iamVjdAorICogIFxyZXR1cm4gbmV3bHkgY3JlYXRlZCBFQ19LRVkgb2JqZWN0IG9yIE5VTEwgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCisgKi8KK0VDX0tFWSAqRUNfS0VZX2R1cChjb25zdCBFQ19LRVkgKnNyYyk7CisKKy8qKiBJbmNyZWFzZXMgdGhlIGludGVybmFsIHJlZmVyZW5jZSBjb3VudCBvZiBhIEVDX0tFWSBvYmplY3QuCisgKiAgXHBhcmFtICBrZXkgIEVDX0tFWSBvYmplY3QKKyAqICBccmV0dXJuIDEgb24gc3VjY2VzcyBhbmQgMCBpZiBhbiBlcnJvciBvY2N1cnJlZC4KKyAqLworaW50IEVDX0tFWV91cF9yZWYoRUNfS0VZICprZXkpOworCisvKiogUmV0dXJucyB0aGUgRUNfR1JPVVAgb2JqZWN0IG9mIGEgRUNfS0VZIG9iamVjdAorICogIFxwYXJhbSAga2V5ICBFQ19LRVkgb2JqZWN0CisgKiAgXHJldHVybiB0aGUgRUNfR1JPVVAgb2JqZWN0IChwb3NzaWJseSBOVUxMKS4KKyAqLworY29uc3QgRUNfR1JPVVAgKkVDX0tFWV9nZXQwX2dyb3VwKGNvbnN0IEVDX0tFWSAqa2V5KTsKKworLyoqIFNldHMgdGhlIEVDX0dST1VQIG9mIGEgRUNfS0VZIG9iamVjdC4KKyAqICBccGFyYW0gIGtleSAgICBFQ19LRVkgb2JqZWN0CisgKiAgXHBhcmFtICBncm91cCAgRUNfR1JPVVAgdG8gdXNlIGluIHRoZSBFQ19LRVkgb2JqZWN0IChub3RlOiB0aGUgRUNfS0VZCisgKiAgICAgICAgICAgICAgICAgb2JqZWN0IHdpbGwgdXNlIGFuIG93biBjb3B5IG9mIHRoZSBFQ19HUk9VUCkuCisgKiAgXHJldHVybiAxIG9uIHN1Y2Nlc3MgYW5kIDAgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCisgKi8KK2ludCBFQ19LRVlfc2V0X2dyb3VwKEVDX0tFWSAqa2V5LCBjb25zdCBFQ19HUk9VUCAqZ3JvdXApOworCisvKiogUmV0dXJucyB0aGUgcHJpdmF0ZSBrZXkgb2YgYSBFQ19LRVkgb2JqZWN0LgorICogIFxwYXJhbSAga2V5ICBFQ19LRVkgb2JqZWN0CisgKiAgXHJldHVybiBhIEJJR05VTSB3aXRoIHRoZSBwcml2YXRlIGtleSAocG9zc2libHkgTlVMTCkuCisgKi8KK2NvbnN0IEJJR05VTSAqRUNfS0VZX2dldDBfcHJpdmF0ZV9rZXkoY29uc3QgRUNfS0VZICprZXkpOworCisvKiogU2V0cyB0aGUgcHJpdmF0ZSBrZXkgb2YgYSBFQ19LRVkgb2JqZWN0LgorICogIFxwYXJhbSAga2V5ICBFQ19LRVkgb2JqZWN0CisgKiAgXHBhcmFtICBwcnYgIEJJR05VTSB3aXRoIHRoZSBwcml2YXRlIGtleSAobm90ZTogdGhlIEVDX0tFWSBvYmplY3QKKyAqICAgICAgICAgICAgICAgd2lsbCB1c2UgYW4gb3duIGNvcHkgb2YgdGhlIEJJR05VTSkuCisgKiAgXHJldHVybiAxIG9uIHN1Y2Nlc3MgYW5kIDAgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCisgKi8KK2ludCBFQ19LRVlfc2V0X3ByaXZhdGVfa2V5KEVDX0tFWSAqa2V5LCBjb25zdCBCSUdOVU0gKnBydik7CisKKy8qKiBSZXR1cm5zIHRoZSBwdWJsaWMga2V5IG9mIGEgRUNfS0VZIG9iamVjdC4KKyAqICBccGFyYW0gIGtleSAgdGhlIEVDX0tFWSBvYmplY3QKKyAqICBccmV0dXJuIGEgRUNfUE9JTlQgb2JqZWN0IHdpdGggdGhlIHB1YmxpYyBrZXkgKHBvc3NpYmx5IE5VTEwpCisgKi8KK2NvbnN0IEVDX1BPSU5UICpFQ19LRVlfZ2V0MF9wdWJsaWNfa2V5KGNvbnN0IEVDX0tFWSAqa2V5KTsKKworLyoqIFNldHMgdGhlIHB1YmxpYyBrZXkgb2YgYSBFQ19LRVkgb2JqZWN0LgorICogIFxwYXJhbSAga2V5ICBFQ19LRVkgb2JqZWN0CisgKiAgXHBhcmFtICBwdWIgIEVDX1BPSU5UIG9iamVjdCB3aXRoIHRoZSBwdWJsaWMga2V5IChub3RlOiB0aGUgRUNfS0VZIG9iamVjdAorICogICAgICAgICAgICAgICB3aWxsIHVzZSBhbiBvd24gY29weSBvZiB0aGUgRUNfUE9JTlQgb2JqZWN0KS4KKyAqICBccmV0dXJuIDEgb24gc3VjY2VzcyBhbmQgMCBpZiBhbiBlcnJvciBvY2N1cnJlZC4KKyAqLworaW50IEVDX0tFWV9zZXRfcHVibGljX2tleShFQ19LRVkgKmtleSwgY29uc3QgRUNfUE9JTlQgKnB1Yik7CisKK3Vuc2lnbmVkIEVDX0tFWV9nZXRfZW5jX2ZsYWdzKGNvbnN0IEVDX0tFWSAqa2V5KTsKIHZvaWQgRUNfS0VZX3NldF9lbmNfZmxhZ3MoRUNfS0VZICosIHVuc2lnbmVkIGludCk7CiBwb2ludF9jb252ZXJzaW9uX2Zvcm1fdCBFQ19LRVlfZ2V0X2NvbnZfZm9ybShjb25zdCBFQ19LRVkgKik7CiB2b2lkIEVDX0tFWV9zZXRfY29udl9mb3JtKEVDX0tFWSAqLCBwb2ludF9jb252ZXJzaW9uX2Zvcm1fdCk7CkBAIC0zMjUsMzEgKzc3OCwxMjYgQEAKIAl2b2lkICooKmR1cF9mdW5jKSh2b2lkICopLCB2b2lkICgqZnJlZV9mdW5jKSh2b2lkICopLCB2b2lkICgqY2xlYXJfZnJlZV9mdW5jKSh2b2lkICopKTsKIC8qIHdyYXBwZXIgZnVuY3Rpb25zIGZvciB0aGUgdW5kZXJseWluZyBFQ19HUk9VUCBvYmplY3QgKi8KIHZvaWQgRUNfS0VZX3NldF9hc24xX2ZsYWcoRUNfS0VZICosIGludCk7Ci1pbnQgRUNfS0VZX3ByZWNvbXB1dGVfbXVsdChFQ19LRVkgKiwgQk5fQ1RYICpjdHgpOwogCi0vKiBFQ19LRVlfZ2VuZXJhdGVfa2V5KCkgY3JlYXRlcyBhIGVjIHByaXZhdGUgKHB1YmxpYykga2V5ICovCi1pbnQgRUNfS0VZX2dlbmVyYXRlX2tleShFQ19LRVkgKik7Ci0vKiBFQ19LRVlfY2hlY2tfa2V5KCkgKi8KLWludCBFQ19LRVlfY2hlY2tfa2V5KGNvbnN0IEVDX0tFWSAqKTsKKy8qKiBDcmVhdGVzIGEgdGFibGUgb2YgcHJlLWNvbXB1dGVkIG11bHRpcGxlcyBvZiB0aGUgZ2VuZXJhdG9yIHRvIAorICogIGFjY2VsZXJhdGUgZnVydGhlciBFQ19LRVkgb3BlcmF0aW9ucy4KKyAqICBccGFyYW0gIGtleSAgRUNfS0VZIG9iamVjdAorICogIFxwYXJhbSAgY3R4ICBCTl9DVFggb2JqZWN0IChvcHRpb25hbCkKKyAqICBccmV0dXJuIDEgb24gc3VjY2VzcyBhbmQgMCBpZiBhbiBlcnJvciBvY2N1cnJlZC4KKyAqLworaW50IEVDX0tFWV9wcmVjb21wdXRlX211bHQoRUNfS0VZICprZXksIEJOX0NUWCAqY3R4KTsKIAotLyogZGUtIGFuZCBlbmNvZGluZyBmdW5jdGlvbnMgZm9yIFNFQzEgRUNQcml2YXRlS2V5ICovCi1FQ19LRVkgKmQyaV9FQ1ByaXZhdGVLZXkoRUNfS0VZICoqYSwgY29uc3QgdW5zaWduZWQgY2hhciAqKmluLCBsb25nIGxlbik7Ci1pbnQgaTJkX0VDUHJpdmF0ZUtleShFQ19LRVkgKmEsIHVuc2lnbmVkIGNoYXIgKipvdXQpOwotLyogZGUtIGFuZCBlbmNvZGluZyBmdW5jdGlvbnMgZm9yIEVDIHBhcmFtZXRlcnMgKi8KLUVDX0tFWSAqZDJpX0VDUGFyYW1ldGVycyhFQ19LRVkgKiphLCBjb25zdCB1bnNpZ25lZCBjaGFyICoqaW4sIGxvbmcgbGVuKTsKLWludCBpMmRfRUNQYXJhbWV0ZXJzKEVDX0tFWSAqYSwgdW5zaWduZWQgY2hhciAqKm91dCk7Ci0vKiBkZS0gYW5kIGVuY29kaW5nIGZ1bmN0aW9ucyBmb3IgRUMgcHVibGljIGtleQotICogKG9jdGV0IHN0cmluZywgbm90IERFUiAtLSBoZW5jZSAnbzJpJyBhbmQgJ2kybycpICovCi1FQ19LRVkgKm8yaV9FQ1B1YmxpY0tleShFQ19LRVkgKiphLCBjb25zdCB1bnNpZ25lZCBjaGFyICoqaW4sIGxvbmcgbGVuKTsKLWludCBpMm9fRUNQdWJsaWNLZXkoRUNfS0VZICphLCB1bnNpZ25lZCBjaGFyICoqb3V0KTsKKy8qKiBDcmVhdGVzIGEgbmV3IGVjIHByaXZhdGUgKGFuZCBvcHRpb25hbCBhIG5ldyBwdWJsaWMpIGtleS4KKyAqICBccGFyYW0gIGtleSAgRUNfS0VZIG9iamVjdAorICogIFxyZXR1cm4gMSBvbiBzdWNjZXNzIGFuZCAwIGlmIGFuIGVycm9yIG9jY3VycmVkLgorICovCitpbnQgRUNfS0VZX2dlbmVyYXRlX2tleShFQ19LRVkgKmtleSk7CisKKy8qKiBWZXJpZmllcyB0aGF0IGEgcHJpdmF0ZSBhbmQvb3IgcHVibGljIGtleSBpcyB2YWxpZC4KKyAqICBccGFyYW0gIGtleSAgdGhlIEVDX0tFWSBvYmplY3QKKyAqICBccmV0dXJuIDEgb24gc3VjY2VzcyBhbmQgMCBvdGhlcndpc2UuCisgKi8KK2ludCBFQ19LRVlfY2hlY2tfa2V5KGNvbnN0IEVDX0tFWSAqa2V5KTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgZGUtIGFuZCBlbmNvZGluZyBmdW5jdGlvbnMgZm9yIFNFQzEgRUNQcml2YXRlS2V5ICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKiBEZWNvZGVzIGEgcHJpdmF0ZSBrZXkgZnJvbSBhIG1lbW9yeSBidWZmZXIuCisgKiAgXHBhcmFtICBrZXkgIGEgcG9pbnRlciB0byBhIEVDX0tFWSBvYmplY3Qgd2hpY2ggc2hvdWxkIGJlIHVzZWQgKG9yIE5VTEwpCisgKiAgXHBhcmFtICBpbiAgIHBvaW50ZXIgdG8gbWVtb3J5IHdpdGggdGhlIERFUiBlbmNvZGVkIHByaXZhdGUga2V5CisgKiAgXHBhcmFtICBsZW4gIGxlbmd0aCBvZiB0aGUgREVSIGVuY29kZWQgcHJpdmF0ZSBrZXkKKyAqICBccmV0dXJuIHRoZSBkZWNvZGVkIHByaXZhdGUga2V5IG9yIE5VTEwgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCisgKi8KK0VDX0tFWSAqZDJpX0VDUHJpdmF0ZUtleShFQ19LRVkgKiprZXksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKippbiwgbG9uZyBsZW4pOworCisvKiogRW5jb2RlcyBhIHByaXZhdGUga2V5IG9iamVjdCBhbmQgc3RvcmVzIHRoZSByZXN1bHQgaW4gYSBidWZmZXIuCisgKiAgXHBhcmFtICBrZXkgIHRoZSBFQ19LRVkgb2JqZWN0IHRvIGVuY29kZQorICogIFxwYXJhbSAgb3V0ICB0aGUgYnVmZmVyIGZvciB0aGUgcmVzdWx0IChpZiBOVUxMIHRoZSBmdW5jdGlvbiByZXR1cm5zIG51bWJlcgorICogICAgICAgICAgICAgICBvZiBieXRlcyBuZWVkZWQpLgorICogIFxyZXR1cm4gMSBvbiBzdWNjZXNzIGFuZCAwIGlmIGFuIGVycm9yIG9jY3VycmVkLgorICovCitpbnQgaTJkX0VDUHJpdmF0ZUtleShFQ19LRVkgKmtleSwgdW5zaWduZWQgY2hhciAqKm91dCk7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgIGRlLSBhbmQgZW5jb2RpbmcgZnVuY3Rpb25zIGZvciBFQyBwYXJhbWV0ZXJzICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiogRGVjb2RlcyBlYyBwYXJhbWV0ZXIgZnJvbSBhIG1lbW9yeSBidWZmZXIuCisgKiAgXHBhcmFtICBrZXkgIGEgcG9pbnRlciB0byBhIEVDX0tFWSBvYmplY3Qgd2hpY2ggc2hvdWxkIGJlIHVzZWQgKG9yIE5VTEwpCisgKiAgXHBhcmFtICBpbiAgIHBvaW50ZXIgdG8gbWVtb3J5IHdpdGggdGhlIERFUiBlbmNvZGVkIGVjIHBhcmFtZXRlcnMKKyAqICBccGFyYW0gIGxlbiAgbGVuZ3RoIG9mIHRoZSBERVIgZW5jb2RlZCBlYyBwYXJhbWV0ZXJzCisgKiAgXHJldHVybiBhIEVDX0tFWSBvYmplY3Qgd2l0aCB0aGUgZGVjb2RlZCBwYXJhbWV0ZXJzIG9yIE5VTEwgaWYgYW4gZXJyb3IKKyAqICAgICAgICAgIG9jY3VycmVkLgorICovCitFQ19LRVkgKmQyaV9FQ1BhcmFtZXRlcnMoRUNfS0VZICoqa2V5LCBjb25zdCB1bnNpZ25lZCBjaGFyICoqaW4sIGxvbmcgbGVuKTsKKworLyoqIEVuY29kZXMgZWMgcGFyYW1ldGVyIGFuZCBzdG9yZXMgdGhlIHJlc3VsdCBpbiBhIGJ1ZmZlci4KKyAqICBccGFyYW0gIGtleSAgdGhlIEVDX0tFWSBvYmplY3Qgd2l0aCBlYyBwYXJhbXRlcnMgdG8gZW5jb2RlCisgKiAgXHBhcmFtICBvdXQgIHRoZSBidWZmZXIgZm9yIHRoZSByZXN1bHQgKGlmIE5VTEwgdGhlIGZ1bmN0aW9uIHJldHVybnMgbnVtYmVyCisgKiAgICAgICAgICAgICAgIG9mIGJ5dGVzIG5lZWRlZCkuCisgKiAgXHJldHVybiAxIG9uIHN1Y2Nlc3MgYW5kIDAgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCisgKi8KK2ludCBpMmRfRUNQYXJhbWV0ZXJzKEVDX0tFWSAqa2V5LCB1bnNpZ25lZCBjaGFyICoqb3V0KTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgIGRlLSBhbmQgZW5jb2RpbmcgZnVuY3Rpb25zIGZvciBFQyBwdWJsaWMga2V5ICAgICAgICAgICAgICovCisvKiAgICAgICAgIChvY3RldCBzdHJpbmcsIG5vdCBERVIgLS0gaGVuY2UgJ28yaScgYW5kICdpMm8nKSAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKiBEZWNvZGVzIGEgZWMgcHVibGljIGtleSBmcm9tIGEgb2N0ZXQgc3RyaW5nLgorICogIFxwYXJhbSAga2V5ICBhIHBvaW50ZXIgdG8gYSBFQ19LRVkgb2JqZWN0IHdoaWNoIHNob3VsZCBiZSB1c2VkCisgKiAgXHBhcmFtICBpbiAgIG1lbW9yeSBidWZmZXIgd2l0aCB0aGUgZW5jb2RlZCBwdWJsaWMga2V5CisgKiAgXHBhcmFtICBsZW4gIGxlbmd0aCBvZiB0aGUgZW5jb2RlZCBwdWJsaWMga2V5CisgKiAgXHJldHVybiBFQ19LRVkgb2JqZWN0IHdpdGggZGVjb2RlZCBwdWJsaWMga2V5IG9yIE5VTEwgaWYgYW4gZXJyb3IKKyAqICAgICAgICAgIG9jY3VycmVkLgorICovCitFQ19LRVkgKm8yaV9FQ1B1YmxpY0tleShFQ19LRVkgKiprZXksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKippbiwgbG9uZyBsZW4pOworCisvKiogRW5jb2RlcyBhIGVjIHB1YmxpYyBrZXkgaW4gYW4gb2N0ZXQgc3RyaW5nLgorICogIFxwYXJhbSAga2V5ICB0aGUgRUNfS0VZIG9iamVjdCB3aXRoIHRoZSBwdWJsaWMga2V5CisgKiAgXHBhcmFtICBvdXQgIHRoZSBidWZmZXIgZm9yIHRoZSByZXN1bHQgKGlmIE5VTEwgdGhlIGZ1bmN0aW9uIHJldHVybnMgbnVtYmVyCisgKiAgICAgICAgICAgICAgIG9mIGJ5dGVzIG5lZWRlZCkuCisgKiAgXHJldHVybiAxIG9uIHN1Y2Nlc3MgYW5kIDAgaWYgYW4gZXJyb3Igb2NjdXJyZWQKKyAqLworaW50IGkyb19FQ1B1YmxpY0tleShFQ19LRVkgKmtleSwgdW5zaWduZWQgY2hhciAqKm91dCk7CiAKICNpZm5kZWYgT1BFTlNTTF9OT19CSU8KLWludAlFQ1BhcmFtZXRlcnNfcHJpbnQoQklPICpicCwgY29uc3QgRUNfS0VZICp4KTsKLWludAlFQ19LRVlfcHJpbnQoQklPICpicCwgY29uc3QgRUNfS0VZICp4LCBpbnQgb2ZmKTsKKy8qKiBQcmludHMgb3V0IHRoZSBlYyBwYXJhbWV0ZXJzIG9uIGh1bWFuIHJlYWRhYmxlIGZvcm0uCisgKiAgXHBhcmFtICBicCAgIEJJTyBvYmplY3QgdG8gd2hpY2ggdGhlIGluZm9ybWF0aW9uIGlzIHByaW50ZWQKKyAqICBccGFyYW0gIGtleSAgRUNfS0VZIG9iamVjdAorICogIFxyZXR1cm4gMSBvbiBzdWNjZXNzIGFuZCAwIGlmIGFuIGVycm9yIG9jY3VycmVkCisgKi8KK2ludAlFQ1BhcmFtZXRlcnNfcHJpbnQoQklPICpicCwgY29uc3QgRUNfS0VZICprZXkpOworCisvKiogUHJpbnRzIG91dCB0aGUgY29udGVudHMgb2YgYSBFQ19LRVkgb2JqZWN0CisgKiAgXHBhcmFtICBicCAgIEJJTyBvYmplY3QgdG8gd2hpY2ggdGhlIGluZm9ybWF0aW9uIGlzIHByaW50ZWQKKyAqICBccGFyYW0gIGtleSAgRUNfS0VZIG9iamVjdAorICogIFxwYXJhbSAgb2ZmICBsaW5lIG9mZnNldCAKKyAqICBccmV0dXJuIDEgb24gc3VjY2VzcyBhbmQgMCBpZiBhbiBlcnJvciBvY2N1cnJlZAorICovCitpbnQJRUNfS0VZX3ByaW50KEJJTyAqYnAsIGNvbnN0IEVDX0tFWSAqa2V5LCBpbnQgb2ZmKTsKKwogI2VuZGlmCiAjaWZuZGVmIE9QRU5TU0xfTk9fRlBfQVBJCi1pbnQJRUNQYXJhbWV0ZXJzX3ByaW50X2ZwKEZJTEUgKmZwLCBjb25zdCBFQ19LRVkgKngpOwotaW50CUVDX0tFWV9wcmludF9mcChGSUxFICpmcCwgY29uc3QgRUNfS0VZICp4LCBpbnQgb2ZmKTsKKy8qKiBQcmludHMgb3V0IHRoZSBlYyBwYXJhbWV0ZXJzIG9uIGh1bWFuIHJlYWRhYmxlIGZvcm0uCisgKiAgXHBhcmFtICBmcCAgIGZpbGUgZGVzY3JpcHRvciB0byB3aGljaCB0aGUgaW5mb3JtYXRpb24gaXMgcHJpbnRlZAorICogIFxwYXJhbSAga2V5ICBFQ19LRVkgb2JqZWN0CisgKiAgXHJldHVybiAxIG9uIHN1Y2Nlc3MgYW5kIDAgaWYgYW4gZXJyb3Igb2NjdXJyZWQKKyAqLworaW50CUVDUGFyYW1ldGVyc19wcmludF9mcChGSUxFICpmcCwgY29uc3QgRUNfS0VZICprZXkpOworCisvKiogUHJpbnRzIG91dCB0aGUgY29udGVudHMgb2YgYSBFQ19LRVkgb2JqZWN0CisgKiAgXHBhcmFtICBmcCAgIGZpbGUgZGVzY3JpcHRvciB0byB3aGljaCB0aGUgaW5mb3JtYXRpb24gaXMgcHJpbnRlZAorICogIFxwYXJhbSAga2V5ICBFQ19LRVkgb2JqZWN0CisgKiAgXHBhcmFtICBvZmYgIGxpbmUgb2Zmc2V0IAorICogIFxyZXR1cm4gMSBvbiBzdWNjZXNzIGFuZCAwIGlmIGFuIGVycm9yIG9jY3VycmVkCisgKi8KK2ludAlFQ19LRVlfcHJpbnRfZnAoRklMRSAqZnAsIGNvbnN0IEVDX0tFWSAqa2V5LCBpbnQgb2ZmKTsKKwogI2VuZGlmCiAKICNkZWZpbmUgRUNQYXJhbWV0ZXJzX2R1cCh4KSBBU04xX2R1cF9vZihFQ19LRVksaTJkX0VDUGFyYW1ldGVycyxkMmlfRUNQYXJhbWV0ZXJzLHgpCkBAIC0zNjIsNiArOTEwLDEzIEBACiAjIGVuZGlmCiAjZW5kaWYKIAorI2RlZmluZSBFVlBfUEtFWV9DVFhfc2V0X2VjX3BhcmFtZ2VuX2N1cnZlX25pZChjdHgsIG5pZCkgXAorCUVWUF9QS0VZX0NUWF9jdHJsKGN0eCwgRVZQX1BLRVlfRUMsIEVWUF9QS0VZX09QX1BBUkFNR0VOLCBcCisJCQkJRVZQX1BLRVlfQ1RSTF9FQ19QQVJBTUdFTl9DVVJWRV9OSUQsIG5pZCwgTlVMTCkKKworCisjZGVmaW5lIEVWUF9QS0VZX0NUUkxfRUNfUEFSQU1HRU5fQ1VSVkVfTklECQkoRVZQX1BLRVlfQUxHX0NUUkwgKyAxKQorCiAvKiBCRUdJTiBFUlJPUiBDT0RFUyAqLwogLyogVGhlIGZvbGxvd2luZyBsaW5lcyBhcmUgYXV0byBnZW5lcmF0ZWQgYnkgdGhlIHNjcmlwdCBta2Vyci5wbC4gQW55IGNoYW5nZXMKICAqIG1hZGUgYWZ0ZXIgdGhpcyBwb2ludCBtYXkgYmUgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgc2NyaXB0IGlzIG5leHQgcnVuLgpAQCAtMzc1LDYgKzkzMCwxNCBAQAogI2RlZmluZSBFQ19GX0QySV9FQ1BBUkFNRVRFUlMJCQkJIDE0NAogI2RlZmluZSBFQ19GX0QySV9FQ1BLUEFSQU1FVEVSUwkJCQkgMTQ1CiAjZGVmaW5lIEVDX0ZfRDJJX0VDUFJJVkFURUtFWQkJCQkgMTQ2CisjZGVmaW5lIEVDX0ZfRE9fRUNfS0VZX1BSSU5UCQkJCSAyMjEKKyNkZWZpbmUgRUNfRl9FQ0tFWV9QQVJBTTJUWVBFCQkJCSAyMjMKKyNkZWZpbmUgRUNfRl9FQ0tFWV9QQVJBTV9ERUNPREUJCQkJIDIxMgorI2RlZmluZSBFQ19GX0VDS0VZX1BSSVZfREVDT0RFCQkJCSAyMTMKKyNkZWZpbmUgRUNfRl9FQ0tFWV9QUklWX0VOQ09ERQkJCQkgMjE0CisjZGVmaW5lIEVDX0ZfRUNLRVlfUFVCX0RFQ09ERQkJCQkgMjE1CisjZGVmaW5lIEVDX0ZfRUNLRVlfUFVCX0VOQ09ERQkJCQkgMjE2CisjZGVmaW5lIEVDX0ZfRUNLRVlfVFlQRTJQQVJBTQkJCQkgMjIwCiAjZGVmaW5lIEVDX0ZfRUNQQVJBTUVURVJTX1BSSU5UCQkJCSAxNDcKICNkZWZpbmUgRUNfRl9FQ1BBUkFNRVRFUlNfUFJJTlRfRlAJCQkgMTQ4CiAjZGVmaW5lIEVDX0ZfRUNQS1BBUkFNRVRFUlNfUFJJTlQJCQkgMTQ5CkBAIC00NDgsNyArMTAxMSw2IEBACiAjZGVmaW5lIEVDX0ZfRUNfS0VZX1BSSU5UCQkJCSAxODAKICNkZWZpbmUgRUNfRl9FQ19LRVlfUFJJTlRfRlAJCQkJIDE4MQogI2RlZmluZSBFQ19GX0VDX1BPSU5UU19NQUtFX0FGRklORQkJCSAxMzYKLSNkZWZpbmUgRUNfRl9FQ19QT0lOVFNfTVVMCQkJCSAxMzgKICNkZWZpbmUgRUNfRl9FQ19QT0lOVF9BREQJCQkJIDExMgogI2RlZmluZSBFQ19GX0VDX1BPSU5UX0NNUAkJCQkgMTEzCiAjZGVmaW5lIEVDX0ZfRUNfUE9JTlRfQ09QWQkJCQkgMTE0CkBAIC00NzksMjEgKzEwNDEsMzEgQEAKICNkZWZpbmUgRUNfRl9JMkRfRUNQUklWQVRFS0VZCQkJCSAxOTIKICNkZWZpbmUgRUNfRl9JMk9fRUNQVUJMSUNLRVkJCQkJIDE1MQogI2RlZmluZSBFQ19GX08ySV9FQ1BVQkxJQ0tFWQkJCQkgMTUyCisjZGVmaW5lIEVDX0ZfT0xEX0VDX1BSSVZfREVDT0RFCQkJCSAyMjIKKyNkZWZpbmUgRUNfRl9QS0VZX0VDX0NUUkwJCQkJIDE5NworI2RlZmluZSBFQ19GX1BLRVlfRUNfQ1RSTF9TVFIJCQkJIDE5OAorI2RlZmluZSBFQ19GX1BLRVlfRUNfREVSSVZFCQkJCSAyMTcKKyNkZWZpbmUgRUNfRl9QS0VZX0VDX0tFWUdFTgkJCQkgMTk5CisjZGVmaW5lIEVDX0ZfUEtFWV9FQ19QQVJBTUdFTgkJCQkgMjE5CisjZGVmaW5lIEVDX0ZfUEtFWV9FQ19TSUdOCQkJCSAyMTgKIAogLyogUmVhc29uIGNvZGVzLiAqLwogI2RlZmluZSBFQ19SX0FTTjFfRVJST1IJCQkJCSAxMTUKICNkZWZpbmUgRUNfUl9BU04xX1VOS05PV05fRklFTEQJCQkJIDExNgogI2RlZmluZSBFQ19SX0JVRkZFUl9UT09fU01BTEwJCQkJIDEwMAogI2RlZmluZSBFQ19SX0QySV9FQ1BLUEFSQU1FVEVSU19GQUlMVVJFCQkJIDExNworI2RlZmluZSBFQ19SX0RFQ09ERV9FUlJPUgkJCQkgMTQyCiAjZGVmaW5lIEVDX1JfRElTQ1JJTUlOQU5UX0lTX1pFUk8JCQkgMTE4CiAjZGVmaW5lIEVDX1JfRUNfR1JPVVBfTkVXX0JZX05BTUVfRkFJTFVSRQkJIDExOQotI2RlZmluZSBFQ19SX0ZJRUxEX1RPT19MQVJHRQkJCQkgMTM4CisjZGVmaW5lIEVDX1JfRklFTERfVE9PX0xBUkdFCQkJCSAxNDMKICNkZWZpbmUgRUNfUl9HUk9VUDJQS1BBUkFNRVRFUlNfRkFJTFVSRQkJCSAxMjAKICNkZWZpbmUgRUNfUl9JMkRfRUNQS1BBUkFNRVRFUlNfRkFJTFVSRQkJCSAxMjEKICNkZWZpbmUgRUNfUl9JTkNPTVBBVElCTEVfT0JKRUNUUwkJCSAxMDEKICNkZWZpbmUgRUNfUl9JTlZBTElEX0FSR1VNRU5UCQkJCSAxMTIKICNkZWZpbmUgRUNfUl9JTlZBTElEX0NPTVBSRVNTRURfUE9JTlQJCQkgMTEwCiAjZGVmaW5lIEVDX1JfSU5WQUxJRF9DT01QUkVTU0lPTl9CSVQJCQkgMTA5CisjZGVmaW5lIEVDX1JfSU5WQUxJRF9DVVJWRQkJCQkgMTQxCisjZGVmaW5lIEVDX1JfSU5WQUxJRF9ESUdFU1RfVFlQRQkJCSAxMzgKICNkZWZpbmUgRUNfUl9JTlZBTElEX0VOQ09ESU5HCQkJCSAxMDIKICNkZWZpbmUgRUNfUl9JTlZBTElEX0ZJRUxECQkJCSAxMDMKICNkZWZpbmUgRUNfUl9JTlZBTElEX0ZPUk0JCQkJIDEwNApAQCAtNTAxLDYgKzEwNzMsNyBAQAogI2RlZmluZSBFQ19SX0lOVkFMSURfUEVOVEFOT01JQUxfQkFTSVMJCQkgMTMyCiAjZGVmaW5lIEVDX1JfSU5WQUxJRF9QUklWQVRFX0tFWQkJCSAxMjMKICNkZWZpbmUgRUNfUl9JTlZBTElEX1RSSU5PTUlBTF9CQVNJUwkJCSAxMzcKKyNkZWZpbmUgRUNfUl9LRVlTX05PVF9TRVQJCQkJIDE0MAogI2RlZmluZSBFQ19SX01JU1NJTkdfUEFSQU1FVEVSUwkJCQkgMTI0CiAjZGVmaW5lIEVDX1JfTUlTU0lOR19QUklWQVRFX0tFWQkJCSAxMjUKICNkZWZpbmUgRUNfUl9OT1RfQV9OSVNUX1BSSU1FCQkJCSAxMzUKQEAgLTUwOCw2ICsxMDgxLDcgQEAKICNkZWZpbmUgRUNfUl9OT1RfSU1QTEVNRU5URUQJCQkJIDEyNgogI2RlZmluZSBFQ19SX05PVF9JTklUSUFMSVpFRAkJCQkgMTExCiAjZGVmaW5lIEVDX1JfTk9fRklFTERfTU9ECQkJCSAxMzMKKyNkZWZpbmUgRUNfUl9OT19QQVJBTUVURVJTX1NFVAkJCQkgMTM5CiAjZGVmaW5lIEVDX1JfUEFTU0VEX05VTExfUEFSQU1FVEVSCQkJIDEzNAogI2RlZmluZSBFQ19SX1BLUEFSQU1FVEVSUzJHUk9VUF9GQUlMVVJFCQkJIDEyNwogI2RlZmluZSBFQ19SX1BPSU5UX0FUX0lORklOSVRZCQkJCSAxMDYKZGlmZiAtLWdpdCBhL2NyeXB0by9lYy9lYzJfbXVsdC5jIGIvY3J5cHRvL2VjL2VjMl9tdWx0LmMKaW5kZXggZmYzNjhmZC4uYWI2MzFhNSAxMDA2NDQKLS0tIGEvY3J5cHRvL2VjL2VjMl9tdWx0LmMKKysrIGIvY3J5cHRvL2VjL2VjMl9tdWx0LmMKQEAgLTc2LDcgKzc2LDcgQEAKICAqIGNvb3JkaW5hdGVzLgogICogVXNlcyBhbGdvcml0aG0gTWRvdWJsZSBpbiBhcHBlbmRpeCBvZiAKICAqICAgICBMb3BleiwgSi4gYW5kIERhaGFiLCBSLiAgIkZhc3QgbXVsdGlwbGljYXRpb24gb24gZWxsaXB0aWMgY3VydmVzIG92ZXIgCi0gKiAgICAgR0YoMl5tKSB3aXRob3V0IHByZWNvbXB1dGF0aW9uIi4KKyAqICAgICBHRigyXm0pIHdpdGhvdXQgcHJlY29tcHV0YXRpb24iIChDSEVTICc5OSwgTE5DUyAxNzE3KS4KICAqIG1vZGlmaWVkIHRvIG5vdCByZXF1aXJlIHByZWNvbXB1dGF0aW9uIG9mIGM9Yl57Ml57bS0xfX0uCiAgKi8KIHN0YXRpYyBpbnQgZ2YybV9NZG91YmxlKGNvbnN0IEVDX0dST1VQICpncm91cCwgQklHTlVNICp4LCBCSUdOVU0gKnosIEJOX0NUWCAqY3R4KQpAQCAtMTA3LDggKzEwNyw4IEBACiAvKiBDb21wdXRlIHRoZSB4LWNvb3JkaW5hdGUgeDEvejEgZm9yIHRoZSBwb2ludCAoeDEvejEpKyh4Mi94MikgaW4gTW9udGdvbWVyeSAKICAqIHByb2plY3RpdmUgY29vcmRpbmF0ZXMuCiAgKiBVc2VzIGFsZ29yaXRobSBNYWRkIGluIGFwcGVuZGl4IG9mIAotICogICAgIExvcGV4LCBKLiBhbmQgRGFoYWIsIFIuICAiRmFzdCBtdWx0aXBsaWNhdGlvbiBvbiBlbGxpcHRpYyBjdXJ2ZXMgb3ZlciAKLSAqICAgICBHRigyXm0pIHdpdGhvdXQgcHJlY29tcHV0YXRpb24iLgorICogICAgIExvcGV6LCBKLiBhbmQgRGFoYWIsIFIuICAiRmFzdCBtdWx0aXBsaWNhdGlvbiBvbiBlbGxpcHRpYyBjdXJ2ZXMgb3ZlciAKKyAqICAgICBHRigyXm0pIHdpdGhvdXQgcHJlY29tcHV0YXRpb24iIChDSEVTICc5OSwgTE5DUyAxNzE3KS4KICAqLwogc3RhdGljIGludCBnZjJtX01hZGQoY29uc3QgRUNfR1JPVVAgKmdyb3VwLCBjb25zdCBCSUdOVU0gKngsIEJJR05VTSAqeDEsIEJJR05VTSAqejEsIAogCWNvbnN0IEJJR05VTSAqeDIsIGNvbnN0IEJJR05VTSAqejIsIEJOX0NUWCAqY3R4KQpAQCAtMTQwLDggKzE0MCw4IEBACiAKIC8qIENvbXB1dGUgdGhlIHgsIHkgYWZmaW5lIGNvb3JkaW5hdGVzIGZyb20gdGhlIHBvaW50ICh4MSwgejEpICh4MiwgejIpIAogICogdXNpbmcgTW9udGdvbWVyeSBwb2ludCBtdWx0aXBsaWNhdGlvbiBhbGdvcml0aG0gTXh5KCkgaW4gYXBwZW5kaXggb2YgCi0gKiAgICAgTG9wZXgsIEouIGFuZCBEYWhhYiwgUi4gICJGYXN0IG11bHRpcGxpY2F0aW9uIG9uIGVsbGlwdGljIGN1cnZlcyBvdmVyIAotICogICAgIEdGKDJebSkgd2l0aG91dCBwcmVjb21wdXRhdGlvbiIuCisgKiAgICAgTG9wZXosIEouIGFuZCBEYWhhYiwgUi4gICJGYXN0IG11bHRpcGxpY2F0aW9uIG9uIGVsbGlwdGljIGN1cnZlcyBvdmVyIAorICogICAgIEdGKDJebSkgd2l0aG91dCBwcmVjb21wdXRhdGlvbiIgKENIRVMgJzk5LCBMTkNTIDE3MTcpLgogICogUmV0dXJuczoKICAqICAgICAwIG9uIGVycm9yCiAgKiAgICAgMSBpZiByZXR1cm4gdmFsdWUgc2hvdWxkIGJlIHRoZSBwb2ludCBhdCBpbmZpbml0eQpAQCAtMjA5LDE1ICsyMDksMTUgQEAKIC8qIENvbXB1dGVzIHNjYWxhcipwb2ludCBhbmQgc3RvcmVzIHRoZSByZXN1bHQgaW4gci4KICAqIHBvaW50IGNhbiBub3QgZXF1YWwgci4KICAqIFVzZXMgYWxnb3JpdGhtIDJQIG9mCi0gKiAgICAgTG9wZXgsIEouIGFuZCBEYWhhYiwgUi4gICJGYXN0IG11bHRpcGxpY2F0aW9uIG9uIGVsbGlwdGljIGN1cnZlcyBvdmVyIAotICogICAgIEdGKDJebSkgd2l0aG91dCBwcmVjb21wdXRhdGlvbiIuCisgKiAgICAgTG9wZXosIEouIGFuZCBEYWhhYiwgUi4gICJGYXN0IG11bHRpcGxpY2F0aW9uIG9uIGVsbGlwdGljIGN1cnZlcyBvdmVyIAorICogICAgIEdGKDJebSkgd2l0aG91dCBwcmVjb21wdXRhdGlvbiIgKENIRVMgJzk5LCBMTkNTIDE3MTcpLgogICovCiBzdGF0aWMgaW50IGVjX0dGMm1fbW9udGdvbWVyeV9wb2ludF9tdWx0aXBseShjb25zdCBFQ19HUk9VUCAqZ3JvdXAsIEVDX1BPSU5UICpyLCBjb25zdCBCSUdOVU0gKnNjYWxhciwKIAljb25zdCBFQ19QT0lOVCAqcG9pbnQsIEJOX0NUWCAqY3R4KQogCXsKIAlCSUdOVU0gKngxLCAqeDIsICp6MSwgKnoyOwotCWludCByZXQgPSAwLCBpLCBqOwotCUJOX1VMT05HIG1hc2s7CisJaW50IHJldCA9IDAsIGk7CisJQk5fVUxPTkcgbWFzayx3b3JkOwogCiAJaWYgKHIgPT0gcG9pbnQpCiAJCXsKQEAgLTI1MSwyMiArMjUxLDI0IEBACiAJaWYgKCFCTl9HRjJtX2FkZCh4MiwgeDIsICZncm91cC0+YikpIGdvdG8gZXJyOyAvKiB4MiA9IHheNCArIGIgKi8KIAogCS8qIGZpbmQgdG9wIG1vc3QgYml0IGFuZCBnbyBvbmUgcGFzdCBpdCAqLwotCWkgPSBzY2FsYXItPnRvcCAtIDE7IGogPSBCTl9CSVRTMiAtIDE7CisJaSA9IHNjYWxhci0+dG9wIC0gMTsKIAltYXNrID0gQk5fVEJJVDsKLQl3aGlsZSAoIShzY2FsYXItPmRbaV0gJiBtYXNrKSkgeyBtYXNrID4+PSAxOyBqLS07IH0KLQltYXNrID4+PSAxOyBqLS07CisJd29yZCA9IHNjYWxhci0+ZFtpXTsKKwl3aGlsZSAoISh3b3JkICYgbWFzaykpIG1hc2sgPj49IDE7CisJbWFzayA+Pj0gMTsKIAkvKiBpZiB0b3AgbW9zdCBiaXQgd2FzIGF0IHdvcmQgYnJlYWssIGdvIHRvIG5leHQgd29yZCAqLwogCWlmICghbWFzaykgCiAJCXsKLQkJaS0tOyBqID0gQk5fQklUUzIgLSAxOworCQlpLS07CiAJCW1hc2sgPSBCTl9UQklUOwogCQl9CiAKIAlmb3IgKDsgaSA+PSAwOyBpLS0pCiAJCXsKLQkJZm9yICg7IGogPj0gMDsgai0tKQorCQl3b3JkID0gc2NhbGFyLT5kW2ldOworCQl3aGlsZSAobWFzaykKIAkJCXsKLQkJCWlmIChzY2FsYXItPmRbaV0gJiBtYXNrKQorCQkJaWYgKHdvcmQgJiBtYXNrKQogCQkJCXsKIAkJCQlpZiAoIWdmMm1fTWFkZChncm91cCwgJnBvaW50LT5YLCB4MSwgejEsIHgyLCB6MiwgY3R4KSkgZ290byBlcnI7CiAJCQkJaWYgKCFnZjJtX01kb3VibGUoZ3JvdXAsIHgyLCB6MiwgY3R4KSkgZ290byBlcnI7CkBAIC0yNzgsNyArMjgwLDYgQEAKIAkJCQl9CiAJCQltYXNrID4+PSAxOwogCQkJfQotCQlqID0gQk5fQklUUzIgLSAxOwogCQltYXNrID0gQk5fVEJJVDsKIAkJfQogCmRpZmYgLS1naXQgYS9jcnlwdG8vZWMvZWMyX3NtcGwuYyBiL2NyeXB0by9lYy9lYzJfc21wbC5jCmluZGV4IDUyMmQwMzYuLmNmMzU3YjQgMTAwNjQ0Ci0tLSBhL2NyeXB0by9lYy9lYzJfc21wbC5jCisrKyBiL2NyeXB0by9lYy9lYzJfc21wbC5jCkBAIC0xNCw3ICsxNCw3IEBACiAgKgogICovCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTU3LDYgKzE1Nyw3IEBACiAJZ3JvdXAtPnBvbHlbMl0gPSAwOwogCWdyb3VwLT5wb2x5WzNdID0gMDsKIAlncm91cC0+cG9seVs0XSA9IDA7CisJZ3JvdXAtPnBvbHlbNV0gPSAtMTsKIAl9CiAKIApAQCAtMTc0LDEwICsxNzUsOSBAQAogCWRlc3QtPnBvbHlbMl0gPSBzcmMtPnBvbHlbMl07CiAJZGVzdC0+cG9seVszXSA9IHNyYy0+cG9seVszXTsKIAlkZXN0LT5wb2x5WzRdID0gc3JjLT5wb2x5WzRdOwotCWlmKGJuX3dleHBhbmQoJmRlc3QtPmEsIChpbnQpKGRlc3QtPnBvbHlbMF0gKyBCTl9CSVRTMiAtIDEpIC8gQk5fQklUUzIpID09IE5VTEwpCi0JCXJldHVybiAwOwotCWlmKGJuX3dleHBhbmQoJmRlc3QtPmIsIChpbnQpKGRlc3QtPnBvbHlbMF0gKyBCTl9CSVRTMiAtIDEpIC8gQk5fQklUUzIpID09IE5VTEwpCi0JCXJldHVybiAwOworCWRlc3QtPnBvbHlbNV0gPSBzcmMtPnBvbHlbNV07CisJaWYgKGJuX3dleHBhbmQoJmRlc3QtPmEsIChpbnQpKGRlc3QtPnBvbHlbMF0gKyBCTl9CSVRTMiAtIDEpIC8gQk5fQklUUzIpID09IE5VTEwpIHJldHVybiAwOworCWlmIChibl93ZXhwYW5kKCZkZXN0LT5iLCAoaW50KShkZXN0LT5wb2x5WzBdICsgQk5fQklUUzIgLSAxKSAvIEJOX0JJVFMyKSA9PSBOVUxMKSByZXR1cm4gMDsKIAlmb3IgKGkgPSBkZXN0LT5hLnRvcDsgaSA8IGRlc3QtPmEuZG1heDsgaSsrKSBkZXN0LT5hLmRbaV0gPSAwOwogCWZvciAoaSA9IGRlc3QtPmIudG9wOyBpIDwgZGVzdC0+Yi5kbWF4OyBpKyspIGRlc3QtPmIuZFtpXSA9IDA7CiAJcmV0dXJuIDE7CkBAIC0xOTIsNyArMTkyLDcgQEAKIAogCS8qIGdyb3VwLT5maWVsZCAqLwogCWlmICghQk5fY29weSgmZ3JvdXAtPmZpZWxkLCBwKSkgZ290byBlcnI7Ci0JaSA9IEJOX0dGMm1fcG9seTJhcnIoJmdyb3VwLT5maWVsZCwgZ3JvdXAtPnBvbHksIDUpOworCWkgPSBCTl9HRjJtX3BvbHkyYXJyKCZncm91cC0+ZmllbGQsIGdyb3VwLT5wb2x5LCA2KSAtIDE7CiAJaWYgKChpICE9IDUpICYmIChpICE9IDMpKQogCQl7CiAJCUVDZXJyKEVDX0ZfRUNfR0YyTV9TSU1QTEVfR1JPVVBfU0VUX0NVUlZFLCBFQ19SX1VOU1VQUE9SVEVEX0ZJRUxEKTsKQEAgLTQwNiwxOCArNDA2LDk0IEBACiAJfQogCiAKLS8qIEluY2x1ZGUgcGF0ZW50ZWQgYWxnb3JpdGhtcy4gKi8KLSNpbmNsdWRlICJlYzJfc21wdC5jIgorLyogQ2FsY3VsYXRlcyBhbmQgc2V0cyB0aGUgYWZmaW5lIGNvb3JkaW5hdGVzIG9mIGFuIEVDX1BPSU5UIGZyb20gdGhlIGdpdmVuCisgKiBjb21wcmVzc2VkIGNvb3JkaW5hdGVzLiAgVXNlcyBhbGdvcml0aG0gMi4zLjQgb2YgU0VDIDEuIAorICogTm90ZSB0aGF0IHRoZSBzaW1wbGUgaW1wbGVtZW50YXRpb24gb25seSB1c2VzIGFmZmluZSBjb29yZGluYXRlcy4KKyAqCisgKiBUaGUgbWV0aG9kIGlzIGZyb20gdGhlIGZvbGxvd2luZyBwdWJsaWNhdGlvbjoKKyAqIAorICogICAgIEhhcnBlciwgTWVuZXplcywgVmFuc3RvbmU6CisgKiAgICAgIlB1YmxpYy1LZXkgQ3J5cHRvc3lzdGVtcyB3aXRoIFZlcnkgU21hbGwgS2V5IExlbmd0aHMiLAorICogICAgIEVVUk9DUllQVCAnOTIsIFNwcmluZ2VyLVZlcmxhZyBMTkNTIDY1OCwKKyAqICAgICBwdWJsaXNoZWQgRmVicnVhcnkgMTk5MworICoKKyAqIFVTIFBhdGVudHMgNiwxNDEsNDIwIGFuZCA2LDYxOCw0ODMgKFZhbnN0b25lLCBNdWxsaW4sIEFnbmV3KSBkZXNjcmliZQorICogdGhlIHNhbWUgbWV0aG9kLCBidXQgY2xhaW0gbm8gcHJpb3JpdHkgZGF0ZSBlYXJsaWVyIHRoYW4gSnVseSAyOSwgMTk5NAorICogKGFuZCBhZGRpdGlvbmFsbHkgZmFpbCB0byBjaXRlIHRoZSBFVVJPQ1JZUFQgJzkyIHB1YmxpY2F0aW9uIGFzIHByaW9yIGFydCkuCisgKi8KK2ludCBlY19HRjJtX3NpbXBsZV9zZXRfY29tcHJlc3NlZF9jb29yZGluYXRlcyhjb25zdCBFQ19HUk9VUCAqZ3JvdXAsIEVDX1BPSU5UICpwb2ludCwKKwljb25zdCBCSUdOVU0gKnhfLCBpbnQgeV9iaXQsIEJOX0NUWCAqY3R4KQorCXsKKwlCTl9DVFggKm5ld19jdHggPSBOVUxMOworCUJJR05VTSAqdG1wLCAqeCwgKnksICp6OworCWludCByZXQgPSAwLCB6MDsKKworCS8qIGNsZWFyIGVycm9yIHF1ZXVlICovCisJRVJSX2NsZWFyX2Vycm9yKCk7CisKKwlpZiAoY3R4ID09IE5VTEwpCisJCXsKKwkJY3R4ID0gbmV3X2N0eCA9IEJOX0NUWF9uZXcoKTsKKwkJaWYgKGN0eCA9PSBOVUxMKQorCQkJcmV0dXJuIDA7CisJCX0KKworCXlfYml0ID0gKHlfYml0ICE9IDApID8gMSA6IDA7CisKKwlCTl9DVFhfc3RhcnQoY3R4KTsKKwl0bXAgPSBCTl9DVFhfZ2V0KGN0eCk7CisJeCA9IEJOX0NUWF9nZXQoY3R4KTsKKwl5ID0gQk5fQ1RYX2dldChjdHgpOworCXogPSBCTl9DVFhfZ2V0KGN0eCk7CisJaWYgKHogPT0gTlVMTCkgZ290byBlcnI7CisKKwlpZiAoIUJOX0dGMm1fbW9kX2Fycih4LCB4XywgZ3JvdXAtPnBvbHkpKSBnb3RvIGVycjsKKwlpZiAoQk5faXNfemVybyh4KSkKKwkJeworCQlpZiAoIUJOX0dGMm1fbW9kX3NxcnRfYXJyKHksICZncm91cC0+YiwgZ3JvdXAtPnBvbHksIGN0eCkpIGdvdG8gZXJyOworCQl9CisJZWxzZQorCQl7CisJCWlmICghZ3JvdXAtPm1ldGgtPmZpZWxkX3Nxcihncm91cCwgdG1wLCB4LCBjdHgpKSBnb3RvIGVycjsKKwkJaWYgKCFncm91cC0+bWV0aC0+ZmllbGRfZGl2KGdyb3VwLCB0bXAsICZncm91cC0+YiwgdG1wLCBjdHgpKSBnb3RvIGVycjsKKwkJaWYgKCFCTl9HRjJtX2FkZCh0bXAsICZncm91cC0+YSwgdG1wKSkgZ290byBlcnI7CisJCWlmICghQk5fR0YybV9hZGQodG1wLCB4LCB0bXApKSBnb3RvIGVycjsKKwkJaWYgKCFCTl9HRjJtX21vZF9zb2x2ZV9xdWFkX2Fycih6LCB0bXAsIGdyb3VwLT5wb2x5LCBjdHgpKQorCQkJeworCQkJdW5zaWduZWQgbG9uZyBlcnIgPSBFUlJfcGVla19sYXN0X2Vycm9yKCk7CisJCQkKKwkJCWlmIChFUlJfR0VUX0xJQihlcnIpID09IEVSUl9MSUJfQk4gJiYgRVJSX0dFVF9SRUFTT04oZXJyKSA9PSBCTl9SX05PX1NPTFVUSU9OKQorCQkJCXsKKwkJCQlFUlJfY2xlYXJfZXJyb3IoKTsKKwkJCQlFQ2VycihFQ19GX0VDX0dGMk1fU0lNUExFX1NFVF9DT01QUkVTU0VEX0NPT1JESU5BVEVTLCBFQ19SX0lOVkFMSURfQ09NUFJFU1NFRF9QT0lOVCk7CisJCQkJfQorCQkJZWxzZQorCQkJCUVDZXJyKEVDX0ZfRUNfR0YyTV9TSU1QTEVfU0VUX0NPTVBSRVNTRURfQ09PUkRJTkFURVMsIEVSUl9SX0JOX0xJQik7CisJCQlnb3RvIGVycjsKKwkJCX0KKwkJejAgPSAoQk5faXNfb2RkKHopKSA/IDEgOiAwOworCQlpZiAoIWdyb3VwLT5tZXRoLT5maWVsZF9tdWwoZ3JvdXAsIHksIHgsIHosIGN0eCkpIGdvdG8gZXJyOworCQlpZiAoejAgIT0geV9iaXQpCisJCQl7CisJCQlpZiAoIUJOX0dGMm1fYWRkKHksIHksIHgpKSBnb3RvIGVycjsKKwkJCX0KKwkJfQorCisJaWYgKCFFQ19QT0lOVF9zZXRfYWZmaW5lX2Nvb3JkaW5hdGVzX0dGMm0oZ3JvdXAsIHBvaW50LCB4LCB5LCBjdHgpKSBnb3RvIGVycjsKKworCXJldCA9IDE7CisKKyBlcnI6CisJQk5fQ1RYX2VuZChjdHgpOworCWlmIChuZXdfY3R4ICE9IE5VTEwpCisJCUJOX0NUWF9mcmVlKG5ld19jdHgpOworCXJldHVybiByZXQ7CisJfQogCiAKIC8qIENvbnZlcnRzIGFuIEVDX1BPSU5UIHRvIGFuIG9jdGV0IHN0cmluZy4gIAogICogSWYgYnVmIGlzIE5VTEwsIHRoZSBlbmNvZGVkIGxlbmd0aCB3aWxsIGJlIHJldHVybmVkLgogICogSWYgdGhlIGxlbmd0aCBsZW4gb2YgYnVmIGlzIHNtYWxsZXIgdGhhbiByZXF1aXJlZCBhbiBlcnJvciB3aWxsIGJlIHJldHVybmVkLgotICoKLSAqIFRoZSBwb2ludCBjb21wcmVzc2lvbiBzZWN0aW9uIG9mIHRoaXMgZnVuY3Rpb24gaXMgcGF0ZW50ZWQgYnkgQ2VydGljb20gQ29ycC4gCi0gKiB1bmRlciBVUyBQYXRlbnQgNiwxNDEsNDIwLiAgUG9pbnQgY29tcHJlc3Npb24gaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCBhbmQgY2FuIAotICogYmUgZW5hYmxlZCBieSBkZWZpbmluZyB0aGUgcHJlcHJvY2Vzc29yIG1hY3JvIE9QRU5TU0xfRUNfQklOX1BUX0NPTVAgYXQgCi0gKiBDb25maWd1cmUtdGltZS4KICAqLwogc2l6ZV90IGVjX0dGMm1fc2ltcGxlX3BvaW50Mm9jdChjb25zdCBFQ19HUk9VUCAqZ3JvdXAsIGNvbnN0IEVDX1BPSU5UICpwb2ludCwgcG9pbnRfY29udmVyc2lvbl9mb3JtX3QgZm9ybSwKIAl1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBsZW4sIEJOX0NUWCAqY3R4KQpAQCAtNDI4LDE0ICs1MDQsNiBAQAogCUJJR05VTSAqeCwgKnksICp5eGk7CiAJc2l6ZV90IGZpZWxkX2xlbiwgaSwgc2tpcDsKIAotI2lmbmRlZiBPUEVOU1NMX0VDX0JJTl9QVF9DT01QCi0JaWYgKChmb3JtID09IFBPSU5UX0NPTlZFUlNJT05fQ09NUFJFU1NFRCkgfHwgKGZvcm0gPT0gUE9JTlRfQ09OVkVSU0lPTl9IWUJSSUQpKSAKLQkJewotCQlFQ2VycihFQ19GX0VDX0dGMk1fU0lNUExFX1BPSU5UMk9DVCwgRVJSX1JfRElTQUJMRUQpOwotCQlnb3RvIGVycjsKLQkJfQotI2VuZGlmCi0KIAlpZiAoKGZvcm0gIT0gUE9JTlRfQ09OVkVSU0lPTl9DT01QUkVTU0VEKQogCQkmJiAoZm9ybSAhPSBQT0lOVF9DT05WRVJTSU9OX1VOQ09NUFJFU1NFRCkKIAkJJiYgKGZvcm0gIT0gUE9JTlRfQ09OVkVSU0lPTl9IWUJSSUQpKQpAQCAtNDkwLDEzICs1NTgsMTEgQEAKIAkJaWYgKCFFQ19QT0lOVF9nZXRfYWZmaW5lX2Nvb3JkaW5hdGVzX0dGMm0oZ3JvdXAsIHBvaW50LCB4LCB5LCBjdHgpKSBnb3RvIGVycjsKIAogCQlidWZbMF0gPSBmb3JtOwotI2lmZGVmIE9QRU5TU0xfRUNfQklOX1BUX0NPTVAKIAkJaWYgKChmb3JtICE9IFBPSU5UX0NPTlZFUlNJT05fVU5DT01QUkVTU0VEKSAmJiAhQk5faXNfemVybyh4KSkKIAkJCXsKIAkJCWlmICghZ3JvdXAtPm1ldGgtPmZpZWxkX2Rpdihncm91cCwgeXhpLCB5LCB4LCBjdHgpKSBnb3RvIGVycjsKIAkJCWlmIChCTl9pc19vZGQoeXhpKSkgYnVmWzBdKys7CiAJCQl9Ci0jZW5kaWYKIAogCQlpID0gMTsKIAkJCmRpZmYgLS1naXQgYS9jcnlwdG8vZWMvZWMyX3NtcHQuYyBiL2NyeXB0by9lYy9lYzJfc21wdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmE4ZDU3Li4wMDAwMDAwCi0tLSBhL2NyeXB0by9lYy9lYzJfc21wdC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQxICswLDAgQEAKLS8qIGNyeXB0by9lYy9lYzJfc21wdC5jICovCi0vKiBUaGlzIGNvZGUgd2FzIG9yaWdpbmFsbHkgd3JpdHRlbiBieSBEb3VnbGFzIFN0ZWJpbGEgCi0gKiA8ZHN0ZWJpbGFAc3R1ZGVudC5tYXRoLnV3YXRlcmxvby5jYT4gZm9yIHRoZSBPcGVuU1NMIHByb2plY3QuCi0gKi8KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMiBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0gKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSAqCi0gKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0gKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0gKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0gKgotICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0gKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0gKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0gKgotICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotICogICAgYWNrbm93bGVkZ21lbnQ6Ci0gKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0gKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqCi0gKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKLSAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KLSAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgotICoKLSAqLwotCi0KLS8qIENhbGFjdWxhdGVzIGFuZCBzZXRzIHRoZSBhZmZpbmUgY29vcmRpbmF0ZXMgb2YgYW4gRUNfUE9JTlQgZnJvbSB0aGUgZ2l2ZW4KLSAqIGNvbXByZXNzZWQgY29vcmRpbmF0ZXMuICBVc2VzIGFsZ29yaXRobSAyLjMuNCBvZiBTRUMgMS4gCi0gKiBOb3RlIHRoYXQgdGhlIHNpbXBsZSBpbXBsZW1lbnRhdGlvbiBvbmx5IHVzZXMgYWZmaW5lIGNvb3JkaW5hdGVzLgotICoKLSAqIFRoaXMgYWxnb3JpdGhtIGlzIHBhdGVudGVkIGJ5IENlcnRpY29tIENvcnAuIHVuZGVyIFVTIFBhdGVudCA2LDE0MSw0MjAKLSAqIChmb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uLCBjb250YWN0IGxpY2Vuc2luZ0BjZXJ0aWNvbS5jb20pLgotICogVGhpcyBmdW5jdGlvbiBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IGFuZCBjYW4gYmUgZW5hYmxlZCBieSBkZWZpbmluZyB0aGUgCi0gKiBwcmVwcm9jZXNzb3IgbWFjcm8gT1BFTlNTTF9FQ19CSU5fUFRfQ09NUCBhdCBDb25maWd1cmUtdGltZS4KLSAqLwotaW50IGVjX0dGMm1fc2ltcGxlX3NldF9jb21wcmVzc2VkX2Nvb3JkaW5hdGVzKGNvbnN0IEVDX0dST1VQICpncm91cCwgRUNfUE9JTlQgKnBvaW50LAotCWNvbnN0IEJJR05VTSAqeF8sIGludCB5X2JpdCwgQk5fQ1RYICpjdHgpCi0JewotI2lmbmRlZiBPUEVOU1NMX0VDX0JJTl9QVF9DT01QCQotCUVDZXJyKEVDX0ZfRUNfR0YyTV9TSU1QTEVfU0VUX0NPTVBSRVNTRURfQ09PUkRJTkFURVMsIEVSUl9SX0RJU0FCTEVEKTsKLQlyZXR1cm4gMDsKLSNlbHNlCi0JQk5fQ1RYICpuZXdfY3R4ID0gTlVMTDsKLQlCSUdOVU0gKnRtcCwgKngsICp5LCAqejsKLQlpbnQgcmV0ID0gMCwgejA7Ci0KLQkvKiBjbGVhciBlcnJvciBxdWV1ZSAqLwotCUVSUl9jbGVhcl9lcnJvcigpOwotCi0JaWYgKGN0eCA9PSBOVUxMKQotCQl7Ci0JCWN0eCA9IG5ld19jdHggPSBCTl9DVFhfbmV3KCk7Ci0JCWlmIChjdHggPT0gTlVMTCkKLQkJCXJldHVybiAwOwotCQl9Ci0KLQl5X2JpdCA9ICh5X2JpdCAhPSAwKSA/IDEgOiAwOwotCi0JQk5fQ1RYX3N0YXJ0KGN0eCk7Ci0JdG1wID0gQk5fQ1RYX2dldChjdHgpOwotCXggPSBCTl9DVFhfZ2V0KGN0eCk7Ci0JeSA9IEJOX0NUWF9nZXQoY3R4KTsKLQl6ID0gQk5fQ1RYX2dldChjdHgpOwotCWlmICh6ID09IE5VTEwpIGdvdG8gZXJyOwotCi0JaWYgKCFCTl9HRjJtX21vZF9hcnIoeCwgeF8sIGdyb3VwLT5wb2x5KSkgZ290byBlcnI7Ci0JaWYgKEJOX2lzX3plcm8oeCkpCi0JCXsKLQkJaWYgKCFCTl9HRjJtX21vZF9zcXJ0X2Fycih5LCAmZ3JvdXAtPmIsIGdyb3VwLT5wb2x5LCBjdHgpKSBnb3RvIGVycjsKLQkJfQotCWVsc2UKLQkJewotCQlpZiAoIWdyb3VwLT5tZXRoLT5maWVsZF9zcXIoZ3JvdXAsIHRtcCwgeCwgY3R4KSkgZ290byBlcnI7Ci0JCWlmICghZ3JvdXAtPm1ldGgtPmZpZWxkX2Rpdihncm91cCwgdG1wLCAmZ3JvdXAtPmIsIHRtcCwgY3R4KSkgZ290byBlcnI7Ci0JCWlmICghQk5fR0YybV9hZGQodG1wLCAmZ3JvdXAtPmEsIHRtcCkpIGdvdG8gZXJyOwotCQlpZiAoIUJOX0dGMm1fYWRkKHRtcCwgeCwgdG1wKSkgZ290byBlcnI7Ci0JCWlmICghQk5fR0YybV9tb2Rfc29sdmVfcXVhZF9hcnIoeiwgdG1wLCBncm91cC0+cG9seSwgY3R4KSkKLQkJCXsKLQkJCXVuc2lnbmVkIGxvbmcgZXJyID0gRVJSX3BlZWtfbGFzdF9lcnJvcigpOwotCQkJCi0JCQlpZiAoRVJSX0dFVF9MSUIoZXJyKSA9PSBFUlJfTElCX0JOICYmIEVSUl9HRVRfUkVBU09OKGVycikgPT0gQk5fUl9OT19TT0xVVElPTikKLQkJCQl7Ci0JCQkJRVJSX2NsZWFyX2Vycm9yKCk7Ci0JCQkJRUNlcnIoRUNfRl9FQ19HRjJNX1NJTVBMRV9TRVRfQ09NUFJFU1NFRF9DT09SRElOQVRFUywgRUNfUl9JTlZBTElEX0NPTVBSRVNTRURfUE9JTlQpOwotCQkJCX0KLQkJCWVsc2UKLQkJCQlFQ2VycihFQ19GX0VDX0dGMk1fU0lNUExFX1NFVF9DT01QUkVTU0VEX0NPT1JESU5BVEVTLCBFUlJfUl9CTl9MSUIpOwotCQkJZ290byBlcnI7Ci0JCQl9Ci0JCXowID0gKEJOX2lzX29kZCh6KSkgPyAxIDogMDsKLQkJaWYgKCFncm91cC0+bWV0aC0+ZmllbGRfbXVsKGdyb3VwLCB5LCB4LCB6LCBjdHgpKSBnb3RvIGVycjsKLQkJaWYgKHowICE9IHlfYml0KQotCQkJewotCQkJaWYgKCFCTl9HRjJtX2FkZCh5LCB5LCB4KSkgZ290byBlcnI7Ci0JCQl9Ci0JCX0KLQotCWlmICghRUNfUE9JTlRfc2V0X2FmZmluZV9jb29yZGluYXRlc19HRjJtKGdyb3VwLCBwb2ludCwgeCwgeSwgY3R4KSkgZ290byBlcnI7Ci0KLQlyZXQgPSAxOwotCi0gZXJyOgotCUJOX0NUWF9lbmQoY3R4KTsKLQlpZiAobmV3X2N0eCAhPSBOVUxMKQotCQlCTl9DVFhfZnJlZShuZXdfY3R4KTsKLQlyZXR1cm4gcmV0OwotI2VuZGlmCi0JfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2VjL2VjX2N1cnZlLmMgYi9jcnlwdG8vZWMvZWNfY3VydmUuYwppbmRleCBiZWFjMjA5Li4yMzI3NGU0IDEwMDY0NAotLS0gYS9jcnlwdG8vZWMvZWNfY3VydmUuYworKysgYi9jcnlwdG8vZWMvZWNfY3VydmUuYwpAQCAtNzMsOTI2ICs3MywxNjkwIEBACiAjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KICNpbmNsdWRlIDxvcGVuc3NsL29ial9tYWMuaD4KIAotdHlwZWRlZiBzdHJ1Y3QgZWNfY3VydmVfZGF0YV9zdCB7Ci0JaW50CWZpZWxkX3R5cGU7CS8qIGVpdGhlciBOSURfWDlfNjJfcHJpbWVfZmllbGQgb3IKK3R5cGVkZWYgc3RydWN0IHsKKwlpbnQJZmllbGRfdHlwZSwJLyogZWl0aGVyIE5JRF9YOV82Ml9wcmltZV9maWVsZCBvcgogCQkJCSAqIE5JRF9YOV82Ml9jaGFyYWN0ZXJpc3RpY190d29fZmllbGQgKi8KLQljb25zdCBjaGFyICpwOwkJLyogZWl0aGVyIGEgcHJpbWUgbnVtYmVyIG9yIGEgcG9seW5vbWlhbCAqLwotCWNvbnN0IGNoYXIgKmE7Ci0JY29uc3QgY2hhciAqYjsKLQljb25zdCBjaGFyICp4OwkJLyogdGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgZ2VuZXJhdG9yICovCi0JY29uc3QgY2hhciAqeTsJCS8qIHRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIGdlbmVyYXRvciAqLwotCWNvbnN0IGNoYXIgKm9yZGVyOwkvKiB0aGUgb3JkZXIgb2YgdGhlIGdyb3VwIGdlbmVyYXRlZCBieSB0aGUKLQkJCQkgKiBnZW5lcmF0b3IgKi8KLQljb25zdCBCTl9VTE9ORyBjb2ZhY3RvcjsvKiB0aGUgY29mYWN0b3IgKi8KLQljb25zdCB1bnNpZ25lZCBjaGFyICpzZWVkOy8qIHRoZSBzZWVkIChvcHRpb25hbCkgKi8KLQlzaXplX3QJc2VlZF9sZW47Ci0JY29uc3QgY2hhciAqY29tbWVudDsJLyogYSBzaG9ydCBkZXNjcmlwdGlvbiBvZiB0aGUgY3VydmUgKi8KKwkJc2VlZF9sZW4sCisJCXBhcmFtX2xlbjsKKwl1bnNpZ25lZCBpbnQgY29mYWN0b3I7CS8qIHByb21vdGVkIHRvIEJOX1VMT05HICovCiB9IEVDX0NVUlZFX0RBVEE7CiAKIC8qIHRoZSBuaXN0IHByaW1lIGN1cnZlcyAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgX0VDX05JU1RfUFJJTUVfMTkyX1NFRURbXSA9IHsKLQkweDMwLDB4NDUsMHhBRSwweDZGLDB4QzgsMHg0MiwweDJGLDB4NjQsMHhFRCwweDU3LAotCTB4OTUsMHgyOCwweEQzLDB4ODEsMHgyMCwweEVBLDB4RTEsMHgyMSwweDk2LDB4RDV9Owotc3RhdGljIGNvbnN0IEVDX0NVUlZFX0RBVEEgX0VDX05JU1RfUFJJTUVfMTkyID0gewotCU5JRF9YOV82Ml9wcmltZV9maWVsZCwKLQkiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVGRkZGRkZGRkZGRkZGRkZGIiwKLQkiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVGRkZGRkZGRkZGRkZGRkZDIiwKLQkiNjQyMTA1MTlFNTlDODBFNzBGQTdFOUFCNzIyNDMwNDlGRUI4REVFQ0MxNDZCOUIxIiwKLQkiMTg4REE4MEVCMDMwOTBGNjdDQkYyMEVCNDNBMTg4MDBGNEZGMEFGRDgyRkYxMDEyIiwKLQkiMDcxOTJiOTVmZmM4ZGE3ODYzMTAxMWVkNmIyNGNkZDU3M2Y5NzdhMTFlNzk0ODExIiwKLQkiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGOTlERUY4MzYxNDZCQzlCMUI0RDIyODMxIiwxLAotCV9FQ19OSVNUX1BSSU1FXzE5Ml9TRUVELCAyMCwKLQkiTklTVC9YOS42Mi9TRUNHIGN1cnZlIG92ZXIgYSAxOTIgYml0IHByaW1lIGZpZWxkIgorc3RhdGljIGNvbnN0IHN0cnVjdCB7IEVDX0NVUlZFX0RBVEEgaDsgdW5zaWduZWQgY2hhciBkYXRhWzIwKzI0KjZdOyB9CisJX0VDX05JU1RfUFJJTUVfMTkyID0geworCXsgTklEX1g5XzYyX3ByaW1lX2ZpZWxkLDIwLDI0LDEgfSwKKwl7IDB4MzAsMHg0NSwweEFFLDB4NkYsMHhDOCwweDQyLDB4MkYsMHg2NCwweEVELDB4NTcsCS8qIHNlZWQgKi8KKwkgIDB4OTUsMHgyOCwweEQzLDB4ODEsMHgyMCwweEVBLDB4RTEsMHgyMSwweDk2LDB4RDUsCisKKwkgIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCS8qIHAgKi8KKwkgIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZFLDB4RkYsMHhGRiwweEZGLDB4RkYsCisJICAweEZGLDB4RkYsMHhGRiwweEZGLAorCSAgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwJLyogYSAqLworCSAgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkUsMHhGRiwweEZGLDB4RkYsMHhGRiwKKwkgIDB4RkYsMHhGRiwweEZGLDB4RkMsCisJICAweDY0LDB4MjEsMHgwNSwweDE5LDB4RTUsMHg5QywweDgwLDB4RTcsMHgwRiwweEE3LAkvKiBiICovCisJICAweEU5LDB4QUIsMHg3MiwweDI0LDB4MzAsMHg0OSwweEZFLDB4QjgsMHhERSwweEVDLAorCSAgMHhDMSwweDQ2LDB4QjksMHhCMSwKKwkgIDB4MTgsMHg4RCwweEE4LDB4MEUsMHhCMCwweDMwLDB4OTAsMHhGNiwweDdDLDB4QkYsCS8qIHggKi8KKwkgIDB4MjAsMHhFQiwweDQzLDB4QTEsMHg4OCwweDAwLDB4RjQsMHhGRiwweDBBLDB4RkQsCisJICAweDgyLDB4RkYsMHgxMCwweDEyLAorCSAgMHgwNywweDE5LDB4MmIsMHg5NSwweGZmLDB4YzgsMHhkYSwweDc4LDB4NjMsMHgxMCwJLyogeSAqLworCSAgMHgxMSwweGVkLDB4NmIsMHgyNCwweGNkLDB4ZDUsMHg3MywweGY5LDB4NzcsMHhhMSwKKwkgIDB4MWUsMHg3OSwweDQ4LDB4MTEsCisJICAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAkvKiBvcmRlciAqLworCSAgMHhGRiwweEZGLDB4OTksMHhERSwweEY4LDB4MzYsMHgxNCwweDZCLDB4QzksMHhCMSwKKwkgIDB4QjQsMHhEMiwweDI4LDB4MzEgfQogCX07CiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIF9FQ19OSVNUX1BSSU1FXzIyNF9TRUVEW10gPSB7Ci0JMHhCRCwweDcxLDB4MzQsMHg0NywweDk5LDB4RDUsMHhDNywweEZDLDB4REMsMHg0NSwKLQkweEI1LDB4OUYsMHhBMywweEI5LDB4QUIsMHg4RiwweDZBLDB4OTQsMHg4QiwweEM1fTsKLXN0YXRpYyBjb25zdCBFQ19DVVJWRV9EQVRBIF9FQ19OSVNUX1BSSU1FXzIyNCA9IHsKLQlOSURfWDlfNjJfcHJpbWVfZmllbGQsCi0JIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIiwKLQkiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkUiLAotCSJCNDA1MEE4NTBDMDRCM0FCRjU0MTMyNTY1MDQ0QjBCN0Q3QkZEOEJBMjcwQjM5NDMyMzU1RkZCNCIsCi0JIkI3MEUwQ0JENkJCNEJGN0YzMjEzOTBCOTRBMDNDMUQzNTZDMjExMjIzNDMyODBENjExNUMxRDIxIiwKLQkiYmQzNzYzODhiNWY3MjNmYjRjMjJkZmU2Y2Q0Mzc1YTA1YTA3NDc2NDQ0ZDU4MTk5ODUwMDdlMzQiLAotCSJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMTZBMkUwQjhGMDNFMTNERDI5NDU1QzVDMkEzRCIsMSwKLQlfRUNfTklTVF9QUklNRV8yMjRfU0VFRCwgMjAsCi0JIk5JU1QvU0VDRyBjdXJ2ZSBvdmVyIGEgMjI0IGJpdCBwcmltZSBmaWVsZCIKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeyBFQ19DVVJWRV9EQVRBIGg7IHVuc2lnbmVkIGNoYXIgZGF0YVsyMCsyOCo2XTsgfQorCV9FQ19OSVNUX1BSSU1FXzIyNCA9IHsKKwl7IE5JRF9YOV82Ml9wcmltZV9maWVsZCwyMCwyOCwxIH0sCisJeyAweEJELDB4NzEsMHgzNCwweDQ3LDB4OTksMHhENSwweEM3LDB4RkMsMHhEQywweDQ1LAkvKiBzZWVkICovCisJICAweEI1LDB4OUYsMHhBMywweEI5LDB4QUIsMHg4RiwweDZBLDB4OTQsMHg4QiwweEM1LAorCisJICAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAkvKiBwICovCisJICAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweDAwLDB4MDAsMHgwMCwweDAwLAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLAorCSAgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwJLyogYSAqLworCSAgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkUsMHhGRiwweEZGLDB4RkYsMHhGRiwKKwkgIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRSwKKwkgIDB4QjQsMHgwNSwweDBBLDB4ODUsMHgwQywweDA0LDB4QjMsMHhBQiwweEY1LDB4NDEsCS8qIGIgKi8KKwkgIDB4MzIsMHg1NiwweDUwLDB4NDQsMHhCMCwweEI3LDB4RDcsMHhCRiwweEQ4LDB4QkEsCisJICAweDI3LDB4MEIsMHgzOSwweDQzLDB4MjMsMHg1NSwweEZGLDB4QjQsCisJICAweEI3LDB4MEUsMHgwQywweEJELDB4NkIsMHhCNCwweEJGLDB4N0YsMHgzMiwweDEzLAkvKiB4ICovCisJICAweDkwLDB4QjksMHg0QSwweDAzLDB4QzEsMHhEMywweDU2LDB4QzIsMHgxMSwweDIyLAorCSAgMHgzNCwweDMyLDB4ODAsMHhENiwweDExLDB4NUMsMHgxRCwweDIxLAorCSAgMHhiZCwweDM3LDB4NjMsMHg4OCwweGI1LDB4ZjcsMHgyMywweGZiLDB4NGMsMHgyMiwJLyogeSAqLworCSAgMHhkZiwweGU2LDB4Y2QsMHg0MywweDc1LDB4YTAsMHg1YSwweDA3LDB4NDcsMHg2NCwKKwkgIDB4NDQsMHhkNSwweDgxLDB4OTksMHg4NSwweDAwLDB4N2UsMHgzNCwKKwkgIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCS8qIG9yZGVyICovCisJICAweEZGLDB4RkYsMHhGRiwweEZGLDB4MTYsMHhBMiwweEUwLDB4QjgsMHhGMCwweDNFLAorCSAgMHgxMywweERELDB4MjksMHg0NSwweDVDLDB4NUMsMHgyQSwweDNEIH0KIAl9OwogCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBfRUNfTklTVF9QUklNRV8zODRfU0VFRFtdID0gewotCTB4QTMsMHgzNSwweDkyLDB4NkEsMHhBMywweDE5LDB4QTIsMHg3QSwweDFELDB4MDAsCi0JMHg4OSwweDZBLDB4NjcsMHg3MywweEE0LDB4ODIsMHg3QSwweENELDB4QUMsMHg3M307Ci1zdGF0aWMgY29uc3QgRUNfQ1VSVkVfREFUQSBfRUNfTklTVF9QUklNRV8zODQgPSB7Ci0JTklEX1g5XzYyX3ByaW1lX2ZpZWxkLAotCSJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkYiCi0JIkZGRjAwMDAwMDAwMDAwMDAwMDBGRkZGRkZGRiIsCi0JIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVGRkZGRiIKLQkiRkZGMDAwMDAwMDAwMDAwMDAwMEZGRkZGRkZDIiwKLQkiQjMzMTJGQTdFMjNFRTdFNDk4OEUwNTZCRTNGODJEMTkxODFEOUM2RUZFODE0MTEyMDMxNDA4OEY1MDEzODc1QUM2NTYzIgotCSI5OEQ4QTJFRDE5RDJBODVDOEVERDNFQzJBRUYiLAotCSJBQTg3Q0EyMkJFOEIwNTM3OEVCMUM3MUVGMzIwQUQ3NDZFMUQzQjYyOEJBNzlCOTg1OUY3NDFFMDgyNTQyQTM4NTUwMkYiCi0JIjI1REJGNTUyOTZDM0E1NDVFMzg3Mjc2MEFCNyIsCi0JIjM2MTdkZTRhOTYyNjJjNmY1ZDllOThiZjkyOTJkYzI5ZjhmNDFkYmQyODlhMTQ3Y2U5ZGEzMTEzYjVmMGI4YzAwYTYwYiIKLQkiMWNlMWQ3ZTgxOWQ3YTQzMWQ3YzkwZWEwZTVmIiwKLQkiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQzc2MzREODFGNDM3MkRERjU4MUEwIgotCSJEQjI0OEIwQTc3QUVDRUMxOTZBQ0NDNTI5NzMiLDEsCi0JX0VDX05JU1RfUFJJTUVfMzg0X1NFRUQsIDIwLAotCSJOSVNUL1NFQ0cgY3VydmUgb3ZlciBhIDM4NCBiaXQgcHJpbWUgZmllbGQiCitzdGF0aWMgY29uc3Qgc3RydWN0IHsgRUNfQ1VSVkVfREFUQSBoOyB1bnNpZ25lZCBjaGFyIGRhdGFbMjArNDgqNl07IH0KKwlfRUNfTklTVF9QUklNRV8zODQgPSB7CisJeyBOSURfWDlfNjJfcHJpbWVfZmllbGQsMjAsNDgsMSB9LAorCXsgMHhBMywweDM1LDB4OTIsMHg2QSwweEEzLDB4MTksMHhBMiwweDdBLDB4MUQsMHgwMCwJLyogc2VlZCAqLworCSAgMHg4OSwweDZBLDB4NjcsMHg3MywweEE0LDB4ODIsMHg3QSwweENELDB4QUMsMHg3MywKKworCSAgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwJLyogcCAqLworCSAgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwKKwkgIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisJICAweEZGLDB4RkUsMHhGRiwweEZGLDB4RkYsMHhGRiwweDAwLDB4MDAsMHgwMCwweDAwLAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweEZGLDB4RkYsMHhGRiwweEZGLAorCSAgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwJLyogYSAqLworCSAgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwKKwkgIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisJICAweEZGLDB4RkUsMHhGRiwweEZGLDB4RkYsMHhGRiwweDAwLDB4MDAsMHgwMCwweDAwLAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweEZGLDB4RkYsMHhGRiwweEZDLAorCSAgMHhCMywweDMxLDB4MkYsMHhBNywweEUyLDB4M0UsMHhFNywweEU0LDB4OTgsMHg4RSwJLyogYiAqLworCSAgMHgwNSwweDZCLDB4RTMsMHhGOCwweDJELDB4MTksMHgxOCwweDFELDB4OUMsMHg2RSwKKwkgIDB4RkUsMHg4MSwweDQxLDB4MTIsMHgwMywweDE0LDB4MDgsMHg4RiwweDUwLDB4MTMsCisJICAweDg3LDB4NUEsMHhDNiwweDU2LDB4MzksMHg4RCwweDhBLDB4MkUsMHhEMSwweDlELAorCSAgMHgyQSwweDg1LDB4QzgsMHhFRCwweEQzLDB4RUMsMHgyQSwweEVGLAorCSAgMHhBQSwweDg3LDB4Q0EsMHgyMiwweEJFLDB4OEIsMHgwNSwweDM3LDB4OEUsMHhCMSwJLyogeCAqLworCSAgMHhDNywweDFFLDB4RjMsMHgyMCwweEFELDB4NzQsMHg2RSwweDFELDB4M0IsMHg2MiwKKwkgIDB4OEIsMHhBNywweDlCLDB4OTgsMHg1OSwweEY3LDB4NDEsMHhFMCwweDgyLDB4NTQsCisJICAweDJBLDB4MzgsMHg1NSwweDAyLDB4RjIsMHg1RCwweEJGLDB4NTUsMHgyOSwweDZDLAorCSAgMHgzQSwweDU0LDB4NUUsMHgzOCwweDcyLDB4NzYsMHgwQSwweEI3LAorCSAgMHgzNiwweDE3LDB4ZGUsMHg0YSwweDk2LDB4MjYsMHgyYywweDZmLDB4NWQsMHg5ZSwJLyogeSAqLworCSAgMHg5OCwweGJmLDB4OTIsMHg5MiwweGRjLDB4MjksMHhmOCwweGY0LDB4MWQsMHhiZCwKKwkgIDB4MjgsMHg5YSwweDE0LDB4N2MsMHhlOSwweGRhLDB4MzEsMHgxMywweGI1LDB4ZjAsCisJICAweGI4LDB4YzAsMHgwYSwweDYwLDB4YjEsMHhjZSwweDFkLDB4N2UsMHg4MSwweDlkLAorCSAgMHg3YSwweDQzLDB4MWQsMHg3YywweDkwLDB4ZWEsMHgwZSwweDVmLAorCSAgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwJLyogb3JkZXIgKi8KKwkgIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisJICAweEZGLDB4RkYsMHhGRiwweEZGLDB4QzcsMHg2MywweDRELDB4ODEsMHhGNCwweDM3LAorCSAgMHgyRCwweERGLDB4NTgsMHgxQSwweDBELDB4QjIsMHg0OCwweEIwLDB4QTcsMHg3QSwKKwkgIDB4RUMsMHhFQywweDE5LDB4NkEsMHhDQywweEM1LDB4MjksMHg3MyB9CiAJfTsKIAotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgX0VDX05JU1RfUFJJTUVfNTIxX1NFRURbXSA9IHsKLQkweEQwLDB4OUUsMHg4OCwweDAwLDB4MjksMHgxQywweEI4LDB4NTMsMHg5NiwweENDLAotCTB4NjcsMHgxNywweDM5LDB4MzIsMHg4NCwweEFBLDB4QTAsMHhEQSwweDY0LDB4QkF9Owotc3RhdGljIGNvbnN0IEVDX0NVUlZFX0RBVEEgX0VDX05JU1RfUFJJTUVfNTIxID0gewotCU5JRF9YOV82Ml9wcmltZV9maWVsZCwKLQkiMUZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGIgotCSJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRiIsCi0JIjFGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRiIKLQkiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkMiLAotCSIwNTE5NTNFQjk2MThFMUM5QTFGOTI5QTIxQTBCNjg1NDBFRUEyREE3MjVCOTlCMzE1RjNCOEI0ODk5MThFRjEwOUUxNTYiCi0JIjE5Mzk1MUVDN0U5MzdCMTY1MkMwQkQzQkIxQkYwNzM1NzNERjg4M0QyQzM0RjFFRjQ1MUZENDZCNTAzRjAwIiwKLQkiQzY4NThFMDZCNzA0MDRFOUNEOUUzRUNCNjYyMzk1QjQ0MjlDNjQ4MTM5MDUzRkI1MjFGODI4QUY2MDZCNEQzREJBQTE0IgotCSJCNUU3N0VGRTc1OTI4RkUxREMxMjdBMkZGQThERTMzNDhCM0MxODU2QTQyOUJGOTdFN0UzMUMyRTVCRDY2IiwKLQkiMDExODM5Mjk2YTc4OWEzYmMwMDQ1YzhhNWZiNDJjN2QxYmQ5OThmNTQ0NDk1NzliNDQ2ODE3YWZiZDE3MjczZTY2MmM5IgotCSI3ZWU3Mjk5NWVmNDI2NDBjNTUwYjkwMTNmYWQwNzYxMzUzYzcwODZhMjcyYzI0MDg4YmU5NDc2OWZkMTY2NTAiLAotCSIxRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZBNTEiCi0JIjg2ODc4M0JGMkY5NjZCN0ZDQzAxNDhGNzA5QTVEMDNCQjVDOUI4ODk5QzQ3QUVCQjZGQjcxRTkxMzg2NDA5IiwxLAotCV9FQ19OSVNUX1BSSU1FXzUyMV9TRUVELCAyMCwKLQkiTklTVC9TRUNHIGN1cnZlIG92ZXIgYSA1MjEgYml0IHByaW1lIGZpZWxkIgorc3RhdGljIGNvbnN0IHN0cnVjdCB7IEVDX0NVUlZFX0RBVEEgaDsgdW5zaWduZWQgY2hhciBkYXRhWzIwKzY2KjZdOyB9CisJX0VDX05JU1RfUFJJTUVfNTIxID0geworCXsgTklEX1g5XzYyX3ByaW1lX2ZpZWxkLDIwLDY2LDEgfSwKKwl7IDB4RDAsMHg5RSwweDg4LDB4MDAsMHgyOSwweDFDLDB4QjgsMHg1MywweDk2LDB4Q0MsCS8qIHNlZWQgKi8KKwkgIDB4NjcsMHgxNywweDM5LDB4MzIsMHg4NCwweEFBLDB4QTAsMHhEQSwweDY0LDB4QkEsCisKKwkgIDB4MDEsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCS8qIHAgKi8KKwkgIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisJICAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorCSAgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwKKwkgIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisJICAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorCSAgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisJICAweDAxLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAkvKiBhICovCisJICAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorCSAgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwKKwkgIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisJICAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorCSAgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwKKwkgIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZDLAorCSAgMHgwMCwweDUxLDB4OTUsMHgzRSwweEI5LDB4NjEsMHg4RSwweDFDLDB4OUEsMHgxRiwJLyogYiAqLworCSAgMHg5MiwweDlBLDB4MjEsMHhBMCwweEI2LDB4ODUsMHg0MCwweEVFLDB4QTIsMHhEQSwKKwkgIDB4NzIsMHg1QiwweDk5LDB4QjMsMHgxNSwweEYzLDB4QjgsMHhCNCwweDg5LDB4OTEsCisJICAweDhFLDB4RjEsMHgwOSwweEUxLDB4NTYsMHgxOSwweDM5LDB4NTEsMHhFQywweDdFLAorCSAgMHg5MywweDdCLDB4MTYsMHg1MiwweEMwLDB4QkQsMHgzQiwweEIxLDB4QkYsMHgwNywKKwkgIDB4MzUsMHg3MywweERGLDB4ODgsMHgzRCwweDJDLDB4MzQsMHhGMSwweEVGLDB4NDUsCisJICAweDFGLDB4RDQsMHg2QiwweDUwLDB4M0YsMHgwMCwKKwkgIDB4MDAsMHhDNiwweDg1LDB4OEUsMHgwNiwweEI3LDB4MDQsMHgwNCwweEU5LDB4Q0QsCS8qIHggKi8KKwkgIDB4OUUsMHgzRSwweENCLDB4NjYsMHgyMywweDk1LDB4QjQsMHg0MiwweDlDLDB4NjQsCisJICAweDgxLDB4MzksMHgwNSwweDNGLDB4QjUsMHgyMSwweEY4LDB4MjgsMHhBRiwweDYwLAorCSAgMHg2QiwweDRELDB4M0QsMHhCQSwweEExLDB4NEIsMHg1RSwweDc3LDB4RUYsMHhFNywKKwkgIDB4NTksMHgyOCwweEZFLDB4MUQsMHhDMSwweDI3LDB4QTIsMHhGRiwweEE4LDB4REUsCisJICAweDMzLDB4NDgsMHhCMywweEMxLDB4ODUsMHg2QSwweDQyLDB4OUIsMHhGOSwweDdFLAorCSAgMHg3RSwweDMxLDB4QzIsMHhFNSwweEJELDB4NjYsCisJICAweDAxLDB4MTgsMHgzOSwweDI5LDB4NmEsMHg3OCwweDlhLDB4M2IsMHhjMCwweDA0LAkvKiB5ICovCisJICAweDVjLDB4OGEsMHg1ZiwweGI0LDB4MmMsMHg3ZCwweDFiLDB4ZDksMHg5OCwweGY1LAorCSAgMHg0NCwweDQ5LDB4NTcsMHg5YiwweDQ0LDB4NjgsMHgxNywweGFmLDB4YmQsMHgxNywKKwkgIDB4MjcsMHgzZSwweDY2LDB4MmMsMHg5NywweGVlLDB4NzIsMHg5OSwweDVlLDB4ZjQsCisJICAweDI2LDB4NDAsMHhjNSwweDUwLDB4YjksMHgwMSwweDNmLDB4YWQsMHgwNywweDYxLAorCSAgMHgzNSwweDNjLDB4NzAsMHg4NiwweGEyLDB4NzIsMHhjMiwweDQwLDB4ODgsMHhiZSwKKwkgIDB4OTQsMHg3NiwweDlmLDB4ZDEsMHg2NiwweDUwLAorCSAgMHgwMSwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwJLyogb3JkZXIgKi8KKwkgIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisJICAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorCSAgMHhGRiwweEZGLDB4RkYsMHhGQSwweDUxLDB4ODYsMHg4NywweDgzLDB4QkYsMHgyRiwKKwkgIDB4OTYsMHg2QiwweDdGLDB4Q0MsMHgwMSwweDQ4LDB4RjcsMHgwOSwweEE1LDB4RDAsCisJICAweDNCLDB4QjUsMHhDOSwweEI4LDB4ODksMHg5QywweDQ3LDB4QUUsMHhCQiwweDZGLAorCSAgMHhCNywweDFFLDB4OTEsMHgzOCwweDY0LDB4MDkgfQogCX07CisKIC8qIHRoZSB4OS42MiBwcmltZSBjdXJ2ZXMgKG1pbnVzIHRoZSBuaXN0IHByaW1lIGN1cnZlcykgKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIF9FQ19YOV82Ml9QUklNRV8xOTJWMl9TRUVEW10gPSB7Ci0JMHgzMSwweEE5LDB4MkUsMHhFMiwweDAyLDB4OUYsMHhEMSwweDBELDB4OTAsMHgxQiwKLQkweDExLDB4M0UsMHg5OSwweDA3LDB4MTAsMHhGMCwweEQyLDB4MUEsMHhDNiwweEI2fTsKLXN0YXRpYyBjb25zdCBFQ19DVVJWRV9EQVRBIF9FQ19YOV82Ml9QUklNRV8xOTJWMiA9IHsKLQlOSURfWDlfNjJfcHJpbWVfZmllbGQsCi0JIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkZGRkZGRkZGRkZGRiIsCi0JIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkZGRkZGRkZGRkZGQyIsCi0JIkNDMjJENkRGQjk1QzZCMjVFNDlDMEQ2MzY0QTRFNTk4MEMzOTNBQTIxNjY4RDk1MyIsCi0JIkVFQTJCQUU3RTE0OTc4NDJGMkRFNzc2OUNGRTlDOTg5QzA3MkFENjk2RjQ4MDM0QSIsCi0JIjY1NzRkMTFkNjliNmVjN2E2NzJiYjgyYTA4M2RmMmYyYjA4NDdkZTk3MGIyZGUxNSIsCi0JIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRTVGQjFBNzI0REM4MDQxODY0OEQ4REQzMSIsMSwKLQlfRUNfWDlfNjJfUFJJTUVfMTkyVjJfU0VFRCwgMjAsCi0JIlg5LjYyIGN1cnZlIG92ZXIgYSAxOTIgYml0IHByaW1lIGZpZWxkIgorc3RhdGljIGNvbnN0IHN0cnVjdCB7IEVDX0NVUlZFX0RBVEEgaDsgdW5zaWduZWQgY2hhciBkYXRhWzIwKzI0KjZdOyB9CisJX0VDX1g5XzYyX1BSSU1FXzE5MlYyID0geworCXsgTklEX1g5XzYyX3ByaW1lX2ZpZWxkLDIwLDI0LDEgfSwKKwl7IDB4MzEsMHhBOSwweDJFLDB4RTIsMHgwMiwweDlGLDB4RDEsMHgwRCwweDkwLDB4MUIsCS8qIHNlZWQgKi8KKwkgIDB4MTEsMHgzRSwweDk5LDB4MDcsMHgxMCwweEYwLDB4RDIsMHgxQSwweEM2LDB4QjYsCisKKwkgIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCS8qIHAgKi8KKwkgIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZFLDB4RkYsMHhGRiwweEZGLDB4RkYsCisJICAweEZGLDB4RkYsMHhGRiwweEZGLAorCSAgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwJLyogYSAqLworCSAgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkUsMHhGRiwweEZGLDB4RkYsMHhGRiwKKwkgIDB4RkYsMHhGRiwweEZGLDB4RkMsCisJICAweENDLDB4MjIsMHhENiwweERGLDB4QjksMHg1QywweDZCLDB4MjUsMHhFNCwweDlDLAkvKiBiICovCisJICAweDBELDB4NjMsMHg2NCwweEE0LDB4RTUsMHg5OCwweDBDLDB4MzksMHgzQSwweEEyLAorCSAgMHgxNiwweDY4LDB4RDksMHg1MywKKwkgIDB4RUUsMHhBMiwweEJBLDB4RTcsMHhFMSwweDQ5LDB4NzgsMHg0MiwweEYyLDB4REUsCS8qIHggKi8KKwkgIDB4NzcsMHg2OSwweENGLDB4RTksMHhDOSwweDg5LDB4QzAsMHg3MiwweEFELDB4NjksCisJICAweDZGLDB4NDgsMHgwMywweDRBLAorCSAgMHg2NSwweDc0LDB4ZDEsMHgxZCwweDY5LDB4YjYsMHhlYywweDdhLDB4NjcsMHgyYiwJLyogeSAqLworCSAgMHhiOCwweDJhLDB4MDgsMHgzZCwweGYyLDB4ZjIsMHhiMCwweDg0LDB4N2QsMHhlOSwKKwkgIDB4NzAsMHhiMiwweGRlLDB4MTUsCisJICAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAkvKiBvcmRlciAqLworCSAgMHhGRiwweEZFLDB4NUYsMHhCMSwweEE3LDB4MjQsMHhEQywweDgwLDB4NDEsMHg4NiwKKwkgIDB4NDgsMHhEOCwweERELDB4MzEgfQogCX07CiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIF9FQ19YOV82Ml9QUklNRV8xOTJWM19TRUVEW10gPSB7Ci0JMHhDNCwweDY5LDB4NjgsMHg0NCwweDM1LDB4REUsMHhCMywweDc4LDB4QzQsMHhCNiwKLQkweDVDLDB4QTksMHg1OSwweDFFLDB4MkEsMHg1NywweDYzLDB4MDUsMHg5QSwweDJFfTsKLXN0YXRpYyBjb25zdCBFQ19DVVJWRV9EQVRBIF9FQ19YOV82Ml9QUklNRV8xOTJWMyA9IHsKLQlOSURfWDlfNjJfcHJpbWVfZmllbGQsCi0JIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkZGRkZGRkZGRkZGRiIsCi0JIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkZGRkZGRkZGRkZGQyIsCi0JIjIyMTIzREMyMzk1QTA1Q0FBNzQyM0RBRUNDQzk0NzYwQTdENDYyMjU2QkQ1NjkxNiIsCi0JIjdEMjk3NzgxMDBDNjVBMURBMTc4MzcxNjU4OERDRTJCOEI0QUVFOEUyMjhGMTg5NiIsCi0JIjM4YTkwZjIyNjM3MzM3MzM0YjQ5ZGNiNjZhNmRjOGY5OTc4YWNhNzY0OGE5NDNiMCIsCi0JIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjdBNjJEMDMxQzgzRjQyOTRGNjQwRUMxMyIsMSwKLQlfRUNfWDlfNjJfUFJJTUVfMTkyVjNfU0VFRCwgMjAsCi0JIlg5LjYyIGN1cnZlIG92ZXIgYSAxOTIgYml0IHByaW1lIGZpZWxkIgorc3RhdGljIGNvbnN0IHN0cnVjdCB7IEVDX0NVUlZFX0RBVEEgaDsgdW5zaWduZWQgY2hhciBkYXRhWzIwKzI0KjZdOyB9CisJX0VDX1g5XzYyX1BSSU1FXzE5MlYzID0geworCXsgTklEX1g5XzYyX3ByaW1lX2ZpZWxkLDIwLDI0LDEgfSwKKwl7IDB4QzQsMHg2OSwweDY4LDB4NDQsMHgzNSwweERFLDB4QjMsMHg3OCwweEM0LDB4QjYsCS8qIHNlZWQgKi8KKwkgIDB4NUMsMHhBOSwweDU5LDB4MUUsMHgyQSwweDU3LDB4NjMsMHgwNSwweDlBLDB4MkUsCisKKwkgIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCS8qIHAgKi8KKwkgIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZFLDB4RkYsMHhGRiwweEZGLDB4RkYsCisJICAweEZGLDB4RkYsMHhGRiwweEZGLAorCSAgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwJLyogYSAqLworCSAgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkUsMHhGRiwweEZGLDB4RkYsMHhGRiwKKwkgIDB4RkYsMHhGRiwweEZGLDB4RkMsCisJICAweDIyLDB4MTIsMHgzRCwweEMyLDB4MzksMHg1QSwweDA1LDB4Q0EsMHhBNywweDQyLAkvKiBiICovCisJICAweDNELDB4QUUsMHhDQywweEM5LDB4NDcsMHg2MCwweEE3LDB4RDQsMHg2MiwweDI1LAorCSAgMHg2QiwweEQ1LDB4NjksMHgxNiwKKwkgIDB4N0QsMHgyOSwweDc3LDB4ODEsMHgwMCwweEM2LDB4NUEsMHgxRCwweEExLDB4NzgsCS8qIHggKi8KKwkgIDB4MzcsMHgxNiwweDU4LDB4OEQsMHhDRSwweDJCLDB4OEIsMHg0QSwweEVFLDB4OEUsCisJICAweDIyLDB4OEYsMHgxOCwweDk2LAorCSAgMHgzOCwweGE5LDB4MGYsMHgyMiwweDYzLDB4NzMsMHgzNywweDMzLDB4NGIsMHg0OSwJLyogeSAqLworCSAgMHhkYywweGI2LDB4NmEsMHg2ZCwweGM4LDB4ZjksMHg5NywweDhhLDB4Y2EsMHg3NiwKKwkgIDB4NDgsMHhhOSwweDQzLDB4YjAsCisJICAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAkvKiBvcmRlciAqLworCSAgMHhGRiwweEZGLDB4N0EsMHg2MiwweEQwLDB4MzEsMHhDOCwweDNGLDB4NDIsMHg5NCwKKwkgIDB4RjYsMHg0MCwweEVDLDB4MTMgfQogCX07CiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIF9FQ19YOV82Ml9QUklNRV8yMzlWMV9TRUVEW10gPSB7Ci0JMHhFNCwweDNCLDB4QjQsMHg2MCwweEYwLDB4QjgsMHgwQywweEMwLDB4QzAsMHhCMCwKLQkweDc1LDB4NzksMHg4RSwweDk0LDB4ODAsMHg2MCwweEY4LDB4MzIsMHgxQiwweDdEfTsKLXN0YXRpYyBjb25zdCBFQ19DVVJWRV9EQVRBIF9FQ19YOV82Ml9QUklNRV8yMzlWMSA9IHsKLQlOSURfWDlfNjJfcHJpbWVfZmllbGQsCi0JIjdGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjdGRkZGRkZGRkZGRjgwMDAwMDAwMDAwMDdGRkZGRkZGRkZGRiIsCi0JIjdGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjdGRkZGRkZGRkZGRjgwMDAwMDAwMDAwMDdGRkZGRkZGRkZGQyIsCi0JIjZCMDE2QzNCRENGMTg5NDFEMEQ2NTQ5MjE0NzVDQTcxQTlEQjJGQjI3RDFEMzc3OTYxODVDMjk0MkMwQSIsCi0JIjBGRkE5NjNDRENBODgxNkNDQzMzQjg2NDJCRURGOTA1QzNEMzU4NTczRDNGMjdGQkJEM0IzQ0I5QUFBRiIsCi0JIjdkZWJlOGU0ZTkwYTVkYWU2ZTQwNTRjYTUzMGJhMDQ2NTRiMzY4MThjZTIyNmIzOWZjY2I3YjAyZjFhZSIsCi0JIjdGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjdGRkZGRjlFNUU5QTlGNUQ5MDcxRkJEMTUyMjY4ODkwOUQwQiIsMSwKLQlfRUNfWDlfNjJfUFJJTUVfMjM5VjFfU0VFRCwgMjAsCi0JIlg5LjYyIGN1cnZlIG92ZXIgYSAyMzkgYml0IHByaW1lIGZpZWxkIgorc3RhdGljIGNvbnN0IHN0cnVjdCB7IEVDX0NVUlZFX0RBVEEgaDsgdW5zaWduZWQgY2hhciBkYXRhWzIwKzMwKjZdOyB9CisJX0VDX1g5XzYyX1BSSU1FXzIzOVYxID0geworCXsgTklEX1g5XzYyX3ByaW1lX2ZpZWxkLDIwLDMwLDEgfSwKKwl7IDB4RTQsMHgzQiwweEI0LDB4NjAsMHhGMCwweEI4LDB4MEMsMHhDMCwweEMwLDB4QjAsCS8qIHNlZWQgKi8KKwkgIDB4NzUsMHg3OSwweDhFLDB4OTQsMHg4MCwweDYwLDB4RjgsMHgzMiwweDFCLDB4N0QsCisKKwkgIDB4N0YsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCS8qIHAgKi8KKwkgIDB4RkYsMHhGRiwweDdGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweDgwLDB4MDAsCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4N0YsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorCisJICAweDdGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAkvKiBhICovCisJICAweEZGLDB4RkYsMHg3RiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHg4MCwweDAwLAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDdGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGQywKKworCSAgMHg2QiwweDAxLDB4NkMsMHgzQiwweERDLDB4RjEsMHg4OSwweDQxLDB4RDAsMHhENiwJLyogYiAqLworCSAgMHg1NCwweDkyLDB4MTQsMHg3NSwweENBLDB4NzEsMHhBOSwweERCLDB4MkYsMHhCMiwKKwkgIDB4N0QsMHgxRCwweDM3LDB4NzksMHg2MSwweDg1LDB4QzIsMHg5NCwweDJDLDB4MEEsCisKKwkgIDB4MEYsMHhGQSwweDk2LDB4M0MsMHhEQywweEE4LDB4ODEsMHg2QywweENDLDB4MzMsCS8qIHggKi8KKwkgIDB4QjgsMHg2NCwweDJCLDB4RUQsMHhGOSwweDA1LDB4QzMsMHhEMywweDU4LDB4NTcsCisJICAweDNELDB4M0YsMHgyNywweEZCLDB4QkQsMHgzQiwweDNDLDB4QjksMHhBQSwweEFGLAorCisJICAweDdkLDB4ZWIsMHhlOCwweGU0LDB4ZTksMHgwYSwweDVkLDB4YWUsMHg2ZSwweDQwLAkvKiB5ICovCisJICAweDU0LDB4Y2EsMHg1MywweDBiLDB4YTAsMHg0NiwweDU0LDB4YjMsMHg2OCwweDE4LAorCSAgMHhjZSwweDIyLDB4NmIsMHgzOSwweGZjLDB4Y2IsMHg3YiwweDAyLDB4ZjEsMHhhZSwKKworCSAgMHg3RiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwJLyogb3JkZXIgKi8KKwkgIDB4RkYsMHhGRiwweDdGLDB4RkYsMHhGRiwweDlFLDB4NUUsMHg5QSwweDlGLDB4NUQsCisJICAweDkwLDB4NzEsMHhGQiwweEQxLDB4NTIsMHgyNiwweDg4LDB4OTAsMHg5RCwweDBCIH0KIAl9OwogCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBfRUNfWDlfNjJfUFJJTUVfMjM5VjJfU0VFRFtdID0gewotCTB4RTgsMHhCNCwweDAxLDB4MTYsMHgwNCwweDA5LDB4NTMsMHgwMywweENBLDB4M0IsCi0JMHg4MCwweDk5LDB4OTgsMHgyQiwweEUwLDB4OUYsMHhDQiwweDlBLDB4RTYsMHgxNn07Ci1zdGF0aWMgY29uc3QgRUNfQ1VSVkVfREFUQSBfRUNfWDlfNjJfUFJJTUVfMjM5VjIgPSB7Ci0JTklEX1g5XzYyX3ByaW1lX2ZpZWxkLAotCSI3RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY3RkZGRkZGRkZGRkY4MDAwMDAwMDAwMDA3RkZGRkZGRkZGRkYiLAotCSI3RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY3RkZGRkZGRkZGRkY4MDAwMDAwMDAwMDA3RkZGRkZGRkZGRkMiLAotCSI2MTdGQUI2ODMyNTc2Q0JCRkVENTBEOTlGMDI0OUMzRkVFNThCOTRCQTAwMzhDN0FFODRDOEM4MzJGMkMiLAotCSIzOEFGMDlEOTg3Mjc3MDUxMjBDOTIxQkI1RTlFMjYyOTZBM0NEQ0YyRjM1NzU3QTBFQUZEODdCODMwRTciLAotCSI1YjAxMjVlNGRiZWEwZWM3MjA2ZGEwZmMwMWQ5YjA4MTMyOWZiNTU1ZGU2ZWY0NjAyMzdkZmY4YmU0YmEiLAotCSI3RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY4MDAwMDBDRkE3RTg1OTQzNzdENDE0QzAzODIxQkM1ODIwNjMiLDEsCi0JX0VDX1g5XzYyX1BSSU1FXzIzOVYyX1NFRUQsIDIwLAotCSJYOS42MiBjdXJ2ZSBvdmVyIGEgMjM5IGJpdCBwcmltZSBmaWVsZCIKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeyBFQ19DVVJWRV9EQVRBIGg7IHVuc2lnbmVkIGNoYXIgZGF0YVsyMCszMCo2XTsgfQorCV9FQ19YOV82Ml9QUklNRV8yMzlWMiA9IHsKKwl7IE5JRF9YOV82Ml9wcmltZV9maWVsZCwyMCwzMCwxIH0sCisJeyAweEU4LDB4QjQsMHgwMSwweDE2LDB4MDQsMHgwOSwweDUzLDB4MDMsMHhDQSwweDNCLAkvKiBzZWVkICovCisJICAweDgwLDB4OTksMHg5OCwweDJCLDB4RTAsMHg5RiwweENCLDB4OUEsMHhFNiwweDE2LAorCisJICAweDdGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAkvKiBwICovCisJICAweEZGLDB4RkYsMHg3RiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHg4MCwweDAwLAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDdGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwKKworCSAgMHg3RiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwJLyogYSAqLworCSAgMHhGRiwweEZGLDB4N0YsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4ODAsMHgwMCwKKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHg3RiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkMsCisKKwkgIDB4NjEsMHg3RiwweEFCLDB4NjgsMHgzMiwweDU3LDB4NkMsMHhCQiwweEZFLDB4RDUsCS8qIGIgKi8KKwkgIDB4MEQsMHg5OSwweEYwLDB4MjQsMHg5QywweDNGLDB4RUUsMHg1OCwweEI5LDB4NEIsCisJICAweEEwLDB4MDMsMHg4QywweDdBLDB4RTgsMHg0QywweDhDLDB4ODMsMHgyRiwweDJDLAorCisJICAweDM4LDB4QUYsMHgwOSwweEQ5LDB4ODcsMHgyNywweDcwLDB4NTEsMHgyMCwweEM5LAkvKiB4ICovCisJICAweDIxLDB4QkIsMHg1RSwweDlFLDB4MjYsMHgyOSwweDZBLDB4M0MsMHhEQywweEYyLAorCSAgMHhGMywweDU3LDB4NTcsMHhBMCwweEVBLDB4RkQsMHg4NywweEI4LDB4MzAsMHhFNywKKworCSAgMHg1YiwweDAxLDB4MjUsMHhlNCwweGRiLDB4ZWEsMHgwZSwweGM3LDB4MjAsMHg2ZCwJLyogeSAqLworCSAgMHhhMCwweGZjLDB4MDEsMHhkOSwweGIwLDB4ODEsMHgzMiwweDlmLDB4YjUsMHg1NSwKKwkgIDB4ZGUsMHg2ZSwweGY0LDB4NjAsMHgyMywweDdkLDB4ZmYsMHg4YiwweGU0LDB4YmEsCisKKwkgIDB4N0YsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCS8qIG9yZGVyICovCisJICAweEZGLDB4RkYsMHg4MCwweDAwLDB4MDAsMHhDRiwweEE3LDB4RTgsMHg1OSwweDQzLAorCSAgMHg3NywweEQ0LDB4MTQsMHhDMCwweDM4LDB4MjEsMHhCQywweDU4LDB4MjAsMHg2MyB9CiAJfTsKIAotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgX0VDX1g5XzYyX1BSSU1FXzIzOVYzX1NFRURbXSA9IHsKLQkweDdELDB4NzMsMHg3NCwweDE2LDB4OEYsMHhGRSwweDM0LDB4NzEsMHhCNiwweDBBLAotCTB4ODUsMHg3NiwweDg2LDB4QTEsMHg5NCwweDc1LDB4RDMsMHhCRiwweEEyLDB4RkZ9Owotc3RhdGljIGNvbnN0IEVDX0NVUlZFX0RBVEEgX0VDX1g5XzYyX1BSSU1FXzIzOVYzID0gewotCU5JRF9YOV82Ml9wcmltZV9maWVsZCwKLQkiN0ZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGN0ZGRkZGRkZGRkZGODAwMDAwMDAwMDAwN0ZGRkZGRkZGRkZGIiwKLQkiN0ZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGN0ZGRkZGRkZGRkZGODAwMDAwMDAwMDAwN0ZGRkZGRkZGRkZDIiwKLQkiMjU1NzA1RkEyQTMwNjY1NEIxRjRDQjAzRDZBNzUwQTMwQzI1MDEwMkQ0OTg4NzE3RDlCQTE1QUI2RDNFIiwKLQkiNjc2OEFFOEUxOEJCOTJDRkNGMDA1Qzk0OUFBMkM2RDk0ODUzRDBFNjYwQkJGODU0QjFDOTUwNUZFOTVBIiwKLQkiMTYwN2U2ODk4ZjM5MGMwNmJjMWQ1NTJiYWQyMjZmM2I2ZmNmZTQ4YjZlODE4NDk5YWYxOGUzZWQ2Y2YzIiwKLQkiN0ZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGN0ZGRkZGOTc1REVCNDFCM0E2MDU3QzNDNDMyMTQ2NTI2NTUxIiwxLAotCV9FQ19YOV82Ml9QUklNRV8yMzlWM19TRUVELCAyMCwKLQkiWDkuNjIgY3VydmUgb3ZlciBhIDIzOSBiaXQgcHJpbWUgZmllbGQiCitzdGF0aWMgY29uc3Qgc3RydWN0IHsgRUNfQ1VSVkVfREFUQSBoOyB1bnNpZ25lZCBjaGFyIGRhdGFbMjArMzAqNl07IH0KKwlfRUNfWDlfNjJfUFJJTUVfMjM5VjMgPSB7CisJeyBOSURfWDlfNjJfcHJpbWVfZmllbGQsMjAsMzAsMSB9LAorCXsgMHg3RCwweDczLDB4NzQsMHgxNiwweDhGLDB4RkUsMHgzNCwweDcxLDB4QjYsMHgwQSwJLyogc2VlZCAqLworCSAgMHg4NSwweDc2LDB4ODYsMHhBMSwweDk0LDB4NzUsMHhEMywweEJGLDB4QTIsMHhGRiwKKworCSAgMHg3RiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwJLyogcCAqLworCSAgMHhGRiwweEZGLDB4N0YsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4ODAsMHgwMCwKKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHg3RiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisKKwkgIDB4N0YsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCS8qIGEgKi8KKwkgIDB4RkYsMHhGRiwweDdGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweDgwLDB4MDAsCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4N0YsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZDLAorCisJICAweDI1LDB4NTcsMHgwNSwweEZBLDB4MkEsMHgzMCwweDY2LDB4NTQsMHhCMSwweEY0LAkvKiBiICovCisJICAweENCLDB4MDMsMHhENiwweEE3LDB4NTAsMHhBMywweDBDLDB4MjUsMHgwMSwweDAyLAorCSAgMHhENCwweDk4LDB4ODcsMHgxNywweEQ5LDB4QkEsMHgxNSwweEFCLDB4NkQsMHgzRSwKKworCSAgMHg2NywweDY4LDB4QUUsMHg4RSwweDE4LDB4QkIsMHg5MiwweENGLDB4Q0YsMHgwMCwJLyogeCAqLworCSAgMHg1QywweDk0LDB4OUEsMHhBMiwweEM2LDB4RDksMHg0OCwweDUzLDB4RDAsMHhFNiwKKwkgIDB4NjAsMHhCQiwweEY4LDB4NTQsMHhCMSwweEM5LDB4NTAsMHg1RiwweEU5LDB4NUEsCisKKwkgIDB4MTYsMHgwNywweGU2LDB4ODksMHg4ZiwweDM5LDB4MGMsMHgwNiwweGJjLDB4MWQsCS8qIHkgKi8KKwkgIDB4NTUsMHgyYiwweGFkLDB4MjIsMHg2ZiwweDNiLDB4NmYsMHhjZiwweGU0LDB4OGIsCisJICAweDZlLDB4ODEsMHg4NCwweDk5LDB4YWYsMHgxOCwweGUzLDB4ZWQsMHg2YywweGYzLAorCisJICAweDdGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAkvKiBvcmRlciAqLworCSAgMHhGRiwweEZGLDB4N0YsMHhGRiwweEZGLDB4OTcsMHg1RCwweEVCLDB4NDEsMHhCMywKKwkgIDB4QTYsMHgwNSwweDdDLDB4M0MsMHg0MywweDIxLDB4NDYsMHg1MiwweDY1LDB4NTEgfQogCX07CiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIF9FQ19YOV82Ml9QUklNRV8yNTZWMV9TRUVEW10gPSB7Ci0JMHhDNCwweDlELDB4MzYsMHgwOCwweDg2LDB4RTcsMHgwNCwweDkzLDB4NkEsMHg2NiwKLQkweDc4LDB4RTEsMHgxMywweDlELDB4MjYsMHhCNywweDgxLDB4OUYsMHg3RSwweDkwfTsKLXN0YXRpYyBjb25zdCBFQ19DVVJWRV9EQVRBIF9FQ19YOV82Ml9QUklNRV8yNTZWMSA9IHsKLQlOSURfWDlfNjJfcHJpbWVfZmllbGQsCi0JIkZGRkZGRkZGMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYiLAotCSJGRkZGRkZGRjAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZDIiwKLQkiNUFDNjM1RDhBQTNBOTNFN0IzRUJCRDU1NzY5ODg2QkM2NTFEMDZCMENDNTNCMEY2M0JDRTNDM0UyN0QyNjA0QiIsCi0JIjZCMTdEMUYyRTEyQzQyNDdGOEJDRTZFNTYzQTQ0MEYyNzcwMzdEODEyREVCMzNBMEY0QTEzOTQ1RDg5OEMyOTYiLAotCSI0ZmUzNDJlMmZlMWE3ZjliOGVlN2ViNGE3YzBmOWUxNjJiY2UzMzU3NmIzMTVlY2VjYmI2NDA2ODM3YmY1MWY1IiwKLQkiRkZGRkZGRkYwMDAwMDAwMEZGRkZGRkZGRkZGRkZGRkZCQ0U2RkFBREE3MTc5RTg0RjNCOUNBQzJGQzYzMjU1MSIsMSwKLQlfRUNfWDlfNjJfUFJJTUVfMjU2VjFfU0VFRCwgMjAsCi0JIlg5LjYyL1NFQ0cgY3VydmUgb3ZlciBhIDI1NiBiaXQgcHJpbWUgZmllbGQiCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeyBFQ19DVVJWRV9EQVRBIGg7IHVuc2lnbmVkIGNoYXIgZGF0YVsyMCszMio2XTsgfQorCV9FQ19YOV82Ml9QUklNRV8yNTZWMSA9IHsKKwl7IE5JRF9YOV82Ml9wcmltZV9maWVsZCwyMCwzMiwxIH0sCisJeyAweEM0LDB4OUQsMHgzNiwweDA4LDB4ODYsMHhFNywweDA0LDB4OTMsMHg2QSwweDY2LAkvKiBzZWVkICovCisJICAweDc4LDB4RTEsMHgxMywweDlELDB4MjYsMHhCNywweDgxLDB4OUYsMHg3RSwweDkwLAorCisJICAweEZGLDB4RkYsMHhGRiwweEZGLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDAwLAkvKiBwICovCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCSAgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwKKwkgIDB4RkYsMHhGRiwKKwkgIDB4RkYsMHhGRiwweEZGLDB4RkYsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsCS8qIGEgKi8KKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJICAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorCSAgMHhGRiwweEZDLAorCSAgMHg1QSwweEM2LDB4MzUsMHhEOCwweEFBLDB4M0EsMHg5MywweEU3LDB4QjMsMHhFQiwJLyogYiAqLworCSAgMHhCRCwweDU1LDB4NzYsMHg5OCwweDg2LDB4QkMsMHg2NSwweDFELDB4MDYsMHhCMCwKKwkgIDB4Q0MsMHg1MywweEIwLDB4RjYsMHgzQiwweENFLDB4M0MsMHgzRSwweDI3LDB4RDIsCisJICAweDYwLDB4NEIsCisJICAweDZCLDB4MTcsMHhEMSwweEYyLDB4RTEsMHgyQywweDQyLDB4NDcsMHhGOCwweEJDLAkvKiB4ICovCisJICAweEU2LDB4RTUsMHg2MywweEE0LDB4NDAsMHhGMiwweDc3LDB4MDMsMHg3RCwweDgxLAorCSAgMHgyRCwweEVCLDB4MzMsMHhBMCwweEY0LDB4QTEsMHgzOSwweDQ1LDB4RDgsMHg5OCwKKwkgIDB4QzIsMHg5NiwKKwkgIDB4NGYsMHhlMywweDQyLDB4ZTIsMHhmZSwweDFhLDB4N2YsMHg5YiwweDhlLDB4ZTcsCS8qIHkgKi8KKwkgIDB4ZWIsMHg0YSwweDdjLDB4MGYsMHg5ZSwweDE2LDB4MmIsMHhjZSwweDMzLDB4NTcsCisJICAweDZiLDB4MzEsMHg1ZSwweGNlLDB4Y2IsMHhiNiwweDQwLDB4NjgsMHgzNywweGJmLAorCSAgMHg1MSwweGY1LAorCSAgMHhGRiwweEZGLDB4RkYsMHhGRiwweDAwLDB4MDAsMHgwMCwweDAwLDB4RkYsMHhGRiwJLyogb3JkZXIgKi8KKwkgIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4QkMsMHhFNiwweEZBLDB4QUQsCisJICAweEE3LDB4MTcsMHg5RSwweDg0LDB4RjMsMHhCOSwweENBLDB4QzIsMHhGQywweDYzLAorCSAgMHgyNSwweDUxIH0KIAl9OworCiAvKiB0aGUgc2VjZyBwcmltZSBjdXJ2ZXMgKG1pbnVzIHRoZSBuaXN0IGFuZCB4OS42MiBwcmltZSBjdXJ2ZXMpICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBfRUNfU0VDR19QUklNRV8xMTJSMV9TRUVEW10gPSB7Ci0JMHgwMCwweEY1LDB4MEIsMHgwMiwweDhFLDB4NEQsMHg2OSwweDZFLDB4NjcsMHg2OCwKLQkweDc1LDB4NjEsMHg1MSwweDc1LDB4MjksMHgwNCwweDcyLDB4NzgsMHgzRiwweEIxfTsKLXN0YXRpYyBjb25zdCBFQ19DVVJWRV9EQVRBIF9FQ19TRUNHX1BSSU1FXzExMlIxID0gewotCU5JRF9YOV82Ml9wcmltZV9maWVsZCwKLQkiREI3QzJBQkY2MkUzNUU2NjgwNzZCRUFEMjA4QiIsCi0JIkRCN0MyQUJGNjJFMzVFNjY4MDc2QkVBRDIwODgiLAotCSI2NTlFRjhCQTA0MzkxNkVFREU4OTExNzAyQjIyIiwKLQkiMDk0ODcyMzk5OTVBNUVFNzZCNTVGOUMyRjA5OCIsCi0JImE4OWNlNWFmODcyNGMwYTIzZTBlMGZmNzc1MDAiLAotCSJEQjdDMkFCRjYyRTM1RTc2MjhERkFDNjU2MUM1IiwxLAotCV9FQ19TRUNHX1BSSU1FXzExMlIxX1NFRUQsIDIwLAotCSJTRUNHL1dUTFMgY3VydmUgb3ZlciBhIDExMiBiaXQgcHJpbWUgZmllbGQiCitzdGF0aWMgY29uc3Qgc3RydWN0IHsgRUNfQ1VSVkVfREFUQSBoOyB1bnNpZ25lZCBjaGFyIGRhdGFbMjArMTQqNl07IH0KKwlfRUNfU0VDR19QUklNRV8xMTJSMSA9IHsKKwl7IE5JRF9YOV82Ml9wcmltZV9maWVsZCwyMCwxNCwxIH0sCisJeyAweDAwLDB4RjUsMHgwQiwweDAyLDB4OEUsMHg0RCwweDY5LDB4NkUsMHg2NywweDY4LAkvKiBzZWVkICovCisJICAweDc1LDB4NjEsMHg1MSwweDc1LDB4MjksMHgwNCwweDcyLDB4NzgsMHgzRiwweEIxLAorCisJICAweERCLDB4N0MsMHgyQSwweEJGLDB4NjIsMHhFMywweDVFLDB4NjYsMHg4MCwweDc2LAkvKiBwICovCisJICAweEJFLDB4QUQsMHgyMCwweDhCLAorCSAgMHhEQiwweDdDLDB4MkEsMHhCRiwweDYyLDB4RTMsMHg1RSwweDY2LDB4ODAsMHg3NiwJLyogYSAqLworCSAgMHhCRSwweEFELDB4MjAsMHg4OCwKKwkgIDB4NjUsMHg5RSwweEY4LDB4QkEsMHgwNCwweDM5LDB4MTYsMHhFRSwweERFLDB4ODksCS8qIGIgKi8KKwkgIDB4MTEsMHg3MCwweDJCLDB4MjIsCisJICAweDA5LDB4NDgsMHg3MiwweDM5LDB4OTksMHg1QSwweDVFLDB4RTcsMHg2QiwweDU1LAkvKiB4ICovCisJICAweEY5LDB4QzIsMHhGMCwweDk4LAorCSAgMHhhOCwweDljLDB4ZTUsMHhhZiwweDg3LDB4MjQsMHhjMCwweGEyLDB4M2UsMHgwZSwJLyogeSAqLworCSAgMHgwZiwweGY3LDB4NzUsMHgwMCwKKwkgIDB4REIsMHg3QywweDJBLDB4QkYsMHg2MiwweEUzLDB4NUUsMHg3NiwweDI4LDB4REYsCS8qIG9yZGVyICovCisJICAweEFDLDB4NjUsMHg2MSwweEM1IH0KIAl9OwogCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBfRUNfU0VDR19QUklNRV8xMTJSMl9TRUVEW10gPSB7Ci0JMHgwMCwweDI3LDB4NTcsMHhBMSwweDExLDB4NEQsMHg2OSwweDZFLDB4NjcsMHg2OCwKLQkweDc1LDB4NjEsMHg1MSwweDc1LDB4NTMsMHgxNiwweEMwLDB4NUUsMHgwQiwweEQ0fTsKLXN0YXRpYyBjb25zdCBFQ19DVVJWRV9EQVRBIF9FQ19TRUNHX1BSSU1FXzExMlIyID0gewotCU5JRF9YOV82Ml9wcmltZV9maWVsZCwKLQkiREI3QzJBQkY2MkUzNUU2NjgwNzZCRUFEMjA4QiIsCi0JIjYxMjdDMjRDMDVGMzhBMEFBQUY2NUMwRUYwMkMiLAotCSI1MURFRjE4MTVEQjVFRDc0RkNDMzRDODVENzA5IiwKLQkiNEJBMzBBQjVFODkyQjRFMTY0OUREMDkyODY0MyIsCi0JImFkY2Q0NmY1ODgyZTM3NDdkZWYzNmU5NTZlOTciLAotCSIzNkRGMEFBRkQ4QjhENzU5N0NBMTA1MjBEMDRCIiw0LCAKLQlfRUNfU0VDR19QUklNRV8xMTJSMl9TRUVELCAyMCwKLQkiU0VDRyBjdXJ2ZSBvdmVyIGEgMTEyIGJpdCBwcmltZSBmaWVsZCIKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeyBFQ19DVVJWRV9EQVRBIGg7IHVuc2lnbmVkIGNoYXIgZGF0YVsyMCsxNCo2XTsgfQorCV9FQ19TRUNHX1BSSU1FXzExMlIyID0geworCXsgTklEX1g5XzYyX3ByaW1lX2ZpZWxkLDIwLDE0LDQgfSwKKwl7IDB4MDAsMHgyNywweDU3LDB4QTEsMHgxMSwweDRELDB4NjksMHg2RSwweDY3LDB4NjgsCS8qIHNlZWQgKi8KKwkgIDB4NzUsMHg2MSwweDUxLDB4NzUsMHg1MywweDE2LDB4QzAsMHg1RSwweDBCLDB4RDQsCisKKwkgIDB4REIsMHg3QywweDJBLDB4QkYsMHg2MiwweEUzLDB4NUUsMHg2NiwweDgwLDB4NzYsCS8qIHAgKi8KKwkgIDB4QkUsMHhBRCwweDIwLDB4OEIsCisJICAweDYxLDB4MjcsMHhDMiwweDRDLDB4MDUsMHhGMywweDhBLDB4MEEsMHhBQSwweEY2LAkvKiBhICovCisJICAweDVDLDB4MEUsMHhGMCwweDJDLAorCSAgMHg1MSwweERFLDB4RjEsMHg4MSwweDVELDB4QjUsMHhFRCwweDc0LDB4RkMsMHhDMywJLyogYiAqLworCSAgMHg0QywweDg1LDB4RDcsMHgwOSwKKwkgIDB4NEIsMHhBMywweDBBLDB4QjUsMHhFOCwweDkyLDB4QjQsMHhFMSwweDY0LDB4OUQsCS8qIHggKi8KKwkgIDB4RDAsMHg5MiwweDg2LDB4NDMsCisJICAweGFkLDB4Y2QsMHg0NiwweGY1LDB4ODgsMHgyZSwweDM3LDB4NDcsMHhkZSwweGYzLAkvKiB5ICovCisJICAweDZlLDB4OTUsMHg2ZSwweDk3LAorCSAgMHgzNiwweERGLDB4MEEsMHhBRiwweEQ4LDB4QjgsMHhENywweDU5LDB4N0MsMHhBMSwJLyogb3JkZXIgKi8KKwkgIDB4MDUsMHgyMCwweEQwLDB4NEIgfQogCX07CiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIF9FQ19TRUNHX1BSSU1FXzEyOFIxX1NFRURbXSA9IHsKLQkweDAwLDB4MEUsMHgwRCwweDRELDB4NjksMHg2RSwweDY3LDB4NjgsMHg3NSwweDYxLAotCTB4NTEsMHg3NSwweDBDLDB4QzAsMHgzQSwweDQ0LDB4NzMsMHhEMCwweDM2LDB4Nzl9Owotc3RhdGljIGNvbnN0IEVDX0NVUlZFX0RBVEEgX0VDX1NFQ0dfUFJJTUVfMTI4UjEgPSB7Ci0JTklEX1g5XzYyX3ByaW1lX2ZpZWxkLAotCSJGRkZGRkZGREZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRiIsCi0JIkZGRkZGRkZERkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZDIiwKLQkiRTg3NTc5QzExMDc5RjQzREQ4MjQ5OTNDMkNFRTVFRDMiLAotCSIxNjFGRjc1MjhCODk5QjJEMEMyODYwN0NBNTJDNUI4NiIsCi0JImNmNWFjODM5NWJhZmViMTNjMDJkYTI5MmRkZWQ3YTgzIiwKLQkiRkZGRkZGRkUwMDAwMDAwMDc1QTMwRDFCOTAzOEExMTUiLDEsCi0JX0VDX1NFQ0dfUFJJTUVfMTI4UjFfU0VFRCwgMjAsCi0JIlNFQ0cgY3VydmUgb3ZlciBhIDEyOCBiaXQgcHJpbWUgZmllbGQiCitzdGF0aWMgY29uc3Qgc3RydWN0IHsgRUNfQ1VSVkVfREFUQSBoOyB1bnNpZ25lZCBjaGFyIGRhdGFbMjArMTYqNl07IH0KKwlfRUNfU0VDR19QUklNRV8xMjhSMSA9IHsKKwl7IE5JRF9YOV82Ml9wcmltZV9maWVsZCwyMCwxNiwxIH0sCisJeyAweDAwLDB4MEUsMHgwRCwweDRELDB4NjksMHg2RSwweDY3LDB4NjgsMHg3NSwweDYxLAkvKiBzZWVkICovCisJICAweDUxLDB4NzUsMHgwQywweEMwLDB4M0EsMHg0NCwweDczLDB4RDAsMHgzNiwweDc5LAorCisJICAweEZGLDB4RkYsMHhGRiwweEZELDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAkvKiBwICovCisJICAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwKKwkgIDB4RkYsMHhGRiwweEZGLDB4RkQsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCS8qIGEgKi8KKwkgIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZDLAorCSAgMHhFOCwweDc1LDB4NzksMHhDMSwweDEwLDB4NzksMHhGNCwweDNELDB4RDgsMHgyNCwJLyogYiAqLworCSAgMHg5OSwweDNDLDB4MkMsMHhFRSwweDVFLDB4RDMsCisJICAweDE2LDB4MUYsMHhGNywweDUyLDB4OEIsMHg4OSwweDlCLDB4MkQsMHgwQywweDI4LAkvKiB4ICovCisJICAweDYwLDB4N0MsMHhBNSwweDJDLDB4NUIsMHg4NiwKKwkgIDB4Y2YsMHg1YSwweGM4LDB4MzksMHg1YiwweGFmLDB4ZWIsMHgxMywweGMwLDB4MmQsCS8qIHkgKi8KKwkgIDB4YTIsMHg5MiwweGRkLDB4ZWQsMHg3YSwweDgzLAorCSAgMHhGRiwweEZGLDB4RkYsMHhGRSwweDAwLDB4MDAsMHgwMCwweDAwLDB4NzUsMHhBMywJLyogb3JkZXIgKi8KKwkgIDB4MEQsMHgxQiwweDkwLDB4MzgsMHhBMSwweDE1IH0KIAl9OwogCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBfRUNfU0VDR19QUklNRV8xMjhSMl9TRUVEW10gPSB7Ci0JMHgwMCwweDRELDB4NjksMHg2RSwweDY3LDB4NjgsMHg3NSwweDYxLDB4NTEsMHg3NSwKLQkweDEyLDB4RDgsMHhGMCwweDM0LDB4MzEsMHhGQywweEU2LDB4M0IsMHg4OCwweEY0fTsKLXN0YXRpYyBjb25zdCBFQ19DVVJWRV9EQVRBIF9FQ19TRUNHX1BSSU1FXzEyOFIyID0gewotCU5JRF9YOV82Ml9wcmltZV9maWVsZCwKLQkiRkZGRkZGRkRGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYiLAotCSJENjAzMTk5OEQxQjNCQkZFQkY1OUNDOUJCRkY5QUVFMSIsCi0JIjVFRUVGQ0EzODBEMDI5MTlEQzJDNjU1OEJCNkQ4QTVEIiwKLQkiN0I2QUE1RDg1RTU3Mjk4M0U2RkIzMkE3Q0RFQkMxNDAiLAotCSIyN2I2OTE2YTg5NGQzYWVlNzEwNmZlODA1ZmMzNGI0NCIsCi0JIjNGRkZGRkZGN0ZGRkZGRkZCRTAwMjQ3MjA2MTNCNUEzIiw0LAotCV9FQ19TRUNHX1BSSU1FXzEyOFIyX1NFRUQsIDIwLAotCSJTRUNHIGN1cnZlIG92ZXIgYSAxMjggYml0IHByaW1lIGZpZWxkIgorc3RhdGljIGNvbnN0IHN0cnVjdCB7IEVDX0NVUlZFX0RBVEEgaDsgdW5zaWduZWQgY2hhciBkYXRhWzIwKzE2KjZdOyB9CisJX0VDX1NFQ0dfUFJJTUVfMTI4UjIgPSB7CisJeyBOSURfWDlfNjJfcHJpbWVfZmllbGQsMjAsMTYsNCB9LAorCXsgMHgwMCwweDRELDB4NjksMHg2RSwweDY3LDB4NjgsMHg3NSwweDYxLDB4NTEsMHg3NSwJLyogc2VlZCAqLworCSAgMHgxMiwweEQ4LDB4RjAsMHgzNCwweDMxLDB4RkMsMHhFNiwweDNCLDB4ODgsMHhGNCwKKworCSAgMHhGRiwweEZGLDB4RkYsMHhGRCwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwJLyogcCAqLworCSAgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisJICAweEQ2LDB4MDMsMHgxOSwweDk4LDB4RDEsMHhCMywweEJCLDB4RkUsMHhCRiwweDU5LAkvKiBhICovCisJICAweENDLDB4OUIsMHhCRiwweEY5LDB4QUUsMHhFMSwKKwkgIDB4NUUsMHhFRSwweEZDLDB4QTMsMHg4MCwweEQwLDB4MjksMHgxOSwweERDLDB4MkMsCS8qIGIgKi8KKwkgIDB4NjUsMHg1OCwweEJCLDB4NkQsMHg4QSwweDVELAorCSAgMHg3QiwweDZBLDB4QTUsMHhEOCwweDVFLDB4NTcsMHgyOSwweDgzLDB4RTYsMHhGQiwJLyogeCAqLworCSAgMHgzMiwweEE3LDB4Q0QsMHhFQiwweEMxLDB4NDAsCisJICAweDI3LDB4YjYsMHg5MSwweDZhLDB4ODksMHg0ZCwweDNhLDB4ZWUsMHg3MSwweDA2LAkvKiB5ICovCisJICAweGZlLDB4ODAsMHg1ZiwweGMzLDB4NGIsMHg0NCwKKwkgIDB4M0YsMHhGRiwweEZGLDB4RkYsMHg3RiwweEZGLDB4RkYsMHhGRiwweEJFLDB4MDAsCS8qIG9yZGVyICovCisJICAweDI0LDB4NzIsMHgwNiwweDEzLDB4QjUsMHhBMyB9CiAJfTsKIAotc3RhdGljIGNvbnN0IEVDX0NVUlZFX0RBVEEgX0VDX1NFQ0dfUFJJTUVfMTYwSzEgPSB7Ci0JTklEX1g5XzYyX3ByaW1lX2ZpZWxkLAotCSJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRUZGRkZBQzczIiwKLQkiMCIsCi0JIjciLAotCSIzQjRDMzgyQ0UzN0FBMTkyQTQwMTlFNzYzMDM2RjRGNURENEQ3RUJCIiwKLQkiOTM4Y2Y5MzUzMThmZGNlZDZiYzI4Mjg2NTMxNzMzYzNmMDNjNGZlZSIsCi0JIjAxMDAwMDAwMDAwMDAwMDAwMDAwMDFCOEZBMTZERkFCOUFDQTE2QjZCMyIsMSwKLQlOVUxMLCAwLAotCSJTRUNHIGN1cnZlIG92ZXIgYSAxNjAgYml0IHByaW1lIGZpZWxkIgorc3RhdGljIGNvbnN0IHN0cnVjdCB7IEVDX0NVUlZFX0RBVEEgaDsgdW5zaWduZWQgY2hhciBkYXRhWzArMjEqNl07IH0KKwlfRUNfU0VDR19QUklNRV8xNjBLMSA9IHsKKwl7IE5JRF9YOV82Ml9wcmltZV9maWVsZCwwLDIxLDEgfSwKKwl7CQkJCQkJCS8qIG5vIHNlZWQgKi8KKwkgIDB4MDAsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCS8qIHAgKi8KKwkgIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkUsMHhGRiwweEZGLDB4QUMsCisJICAweDczLAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwJLyogYSAqLworCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkgIDB4MDAsCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAkvKiBiICovCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCSAgMHgwNywKKwkgIDB4MDAsMHgzQiwweDRDLDB4MzgsMHgyQywweEUzLDB4N0EsMHhBMSwweDkyLDB4QTQsCS8qIHggKi8KKwkgIDB4MDEsMHg5RSwweDc2LDB4MzAsMHgzNiwweEY0LDB4RjUsMHhERCwweDRELDB4N0UsCisJICAweEJCLAorCSAgMHgwMCwweDkzLDB4OGMsMHhmOSwweDM1LDB4MzEsMHg4ZiwweGRjLDB4ZWQsMHg2YiwJLyogeSAqLworCSAgMHhjMiwweDgyLDB4ODYsMHg1MywweDE3LDB4MzMsMHhjMywweGYwLDB4M2MsMHg0ZiwKKwkgIDB4ZWUsCisJICAweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAkvKiBvcmRlciAqLworCSAgMHgwMSwweEI4LDB4RkEsMHgxNiwweERGLDB4QUIsMHg5QSwweENBLDB4MTYsMHhCNiwKKwkgIDB4QjMgfQogCX07CiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIF9FQ19TRUNHX1BSSU1FXzE2MFIxX1NFRURbXSA9IHsKLQkweDEwLDB4NTMsMHhDRCwweEU0LDB4MkMsMHgxNCwweEQ2LDB4OTYsMHhFNiwweDc2LAotCTB4ODcsMHg1NiwweDE1LDB4MTcsMHg1MywweDNCLDB4RjMsMHhGOCwweDMzLDB4NDV9Owotc3RhdGljIGNvbnN0IEVDX0NVUlZFX0RBVEEgX0VDX1NFQ0dfUFJJTUVfMTYwUjEgPSB7Ci0JTklEX1g5XzYyX3ByaW1lX2ZpZWxkLAotCSJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjdGRkZGRkZGIiwKLQkiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY3RkZGRkZGQyIsCi0JIjFDOTdCRUZDNTRCRDdBOEI2NUFDRjg5RjgxRDRENEFEQzU2NUZBNDUiLAotCSI0QTk2QjU2ODhFRjU3MzI4NDY2NDY5ODk2OEMzOEJCOTEzQ0JGQzgyIiwKLQkiMjNhNjI4NTUzMTY4OTQ3ZDU5ZGNjOTEyMDQyMzUxMzc3YWM1ZmIzMiIsCi0JIjAxMDAwMDAwMDAwMDAwMDAwMDAwMDFGNEM4RjkyN0FFRDNDQTc1MjI1NyIsMSwKLQlfRUNfU0VDR19QUklNRV8xNjBSMV9TRUVELCAyMCwKLQkiU0VDRyBjdXJ2ZSBvdmVyIGEgMTYwIGJpdCBwcmltZSBmaWVsZCIKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeyBFQ19DVVJWRV9EQVRBIGg7IHVuc2lnbmVkIGNoYXIgZGF0YVsyMCsyMSo2XTsgfQorCV9FQ19TRUNHX1BSSU1FXzE2MFIxID0geworCXsgTklEX1g5XzYyX3ByaW1lX2ZpZWxkLDIwLDIxLDEgfSwKKwl7IDB4MTAsMHg1MywweENELDB4RTQsMHgyQywweDE0LDB4RDYsMHg5NiwweEU2LDB4NzYsCS8qIHNlZWQgKi8KKwkgIDB4ODcsMHg1NiwweDE1LDB4MTcsMHg1MywweDNCLDB4RjMsMHhGOCwweDMzLDB4NDUsCisKKwkgIDB4MDAsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCS8qIHAgKi8KKwkgIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHg3RiwweEZGLDB4RkYsCisJICAweEZGLAorCSAgMHgwMCwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwJLyogYSAqLworCSAgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweDdGLDB4RkYsMHhGRiwKKwkgIDB4RkMsCisJICAweDAwLDB4MUMsMHg5NywweEJFLDB4RkMsMHg1NCwweEJELDB4N0EsMHg4QiwweDY1LAkvKiBiICovCisJICAweEFDLDB4RjgsMHg5RiwweDgxLDB4RDQsMHhENCwweEFELDB4QzUsMHg2NSwweEZBLAorCSAgMHg0NSwKKwkgIDB4MDAsMHg0QSwweDk2LDB4QjUsMHg2OCwweDhFLDB4RjUsMHg3MywweDI4LDB4NDYsCS8qIHggKi8KKwkgIDB4NjQsMHg2OSwweDg5LDB4NjgsMHhDMywweDhCLDB4QjksMHgxMywweENCLDB4RkMsCisJICAweDgyLAorCSAgMHgwMCwweDIzLDB4YTYsMHgyOCwweDU1LDB4MzEsMHg2OCwweDk0LDB4N2QsMHg1OSwJLyogeSAqLworCSAgMHhkYywweGM5LDB4MTIsMHgwNCwweDIzLDB4NTEsMHgzNywweDdhLDB4YzUsMHhmYiwKKwkgIDB4MzIsCisJICAweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAkvKiBvcmRlciAqLworCSAgMHgwMSwweEY0LDB4QzgsMHhGOSwweDI3LDB4QUUsMHhEMywweENBLDB4NzUsMHgyMiwKKwkgIDB4NTcgfQogCX07CiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIF9FQ19TRUNHX1BSSU1FXzE2MFIyX1NFRURbXSA9IHsKLQkweEI5LDB4OUIsMHg5OSwweEIwLDB4OTksMHhCMywweDIzLDB4RTAsMHgyNywweDA5LAotCTB4QTQsMHhENiwweDk2LDB4RTYsMHg3NiwweDg3LDB4NTYsMHgxNSwweDE3LDB4NTF9Owotc3RhdGljIGNvbnN0IEVDX0NVUlZFX0RBVEEgX0VDX1NFQ0dfUFJJTUVfMTYwUjIgPSB7Ci0JTklEX1g5XzYyX3ByaW1lX2ZpZWxkLAotCSJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRUZGRkZBQzczIiwKLQkiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVGRkZGQUM3MCIsCi0JIkI0RTEzNEQzRkI1OUVCOEJBQjU3Mjc0OTA0NjY0RDVBRjUwMzg4QkEiLAotCSI1MkRDQjAzNDI5M0ExMTdFMUY0RkYxMUIzMEY3MTk5RDMxNDRDRTZEIiwKLQkiZmVhZmZlZjJlMzMxZjI5NmUwNzFmYTBkZjk5ODJjZmVhN2Q0M2YyZSIsCi0JIjAxMDAwMDAwMDAwMDAwMDAwMDAwMDAzNTFFRTc4NkE4MThGM0ExQTE2QiIsMSwKLQlfRUNfU0VDR19QUklNRV8xNjBSMl9TRUVELCAyMCwKLQkiU0VDRy9XVExTIGN1cnZlIG92ZXIgYSAxNjAgYml0IHByaW1lIGZpZWxkIgorc3RhdGljIGNvbnN0IHN0cnVjdCB7IEVDX0NVUlZFX0RBVEEgaDsgdW5zaWduZWQgY2hhciBkYXRhWzIwKzIxKjZdOyB9CisJX0VDX1NFQ0dfUFJJTUVfMTYwUjIgPSB7CisJeyBOSURfWDlfNjJfcHJpbWVfZmllbGQsMjAsMjEsMSB9LAorCXsgMHhCOSwweDlCLDB4OTksMHhCMCwweDk5LDB4QjMsMHgyMywweEUwLDB4MjcsMHgwOSwJLyogc2VlZCAqLworCSAgMHhBNCwweEQ2LDB4OTYsMHhFNiwweDc2LDB4ODcsMHg1NiwweDE1LDB4MTcsMHg1MSwKKworCSAgMHgwMCwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwJLyogcCAqLworCSAgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRSwweEZGLDB4RkYsMHhBQywKKwkgIDB4NzMsCisJICAweDAwLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAkvKiBhICovCisJICAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZFLDB4RkYsMHhGRiwweEFDLAorCSAgMHg3MCwKKwkgIDB4MDAsMHhCNCwweEUxLDB4MzQsMHhEMywweEZCLDB4NTksMHhFQiwweDhCLDB4QUIsCS8qIGIgKi8KKwkgIDB4NTcsMHgyNywweDQ5LDB4MDQsMHg2NiwweDRELDB4NUEsMHhGNSwweDAzLDB4ODgsCisJICAweEJBLAorCSAgMHgwMCwweDUyLDB4REMsMHhCMCwweDM0LDB4MjksMHgzQSwweDExLDB4N0UsMHgxRiwJLyogeCAqLworCSAgMHg0RiwweEYxLDB4MUIsMHgzMCwweEY3LDB4MTksMHg5RCwweDMxLDB4NDQsMHhDRSwKKwkgIDB4NkQsCisJICAweDAwLDB4ZmUsMHhhZiwweGZlLDB4ZjIsMHhlMywweDMxLDB4ZjIsMHg5NiwweGUwLAkvKiB5ICovCisJICAweDcxLDB4ZmEsMHgwZCwweGY5LDB4OTgsMHgyYywweGZlLDB4YTcsMHhkNCwweDNmLAorCSAgMHgyZSwKKwkgIDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCS8qIG9yZGVyICovCisJICAweDAwLDB4MzUsMHgxRSwweEU3LDB4ODYsMHhBOCwweDE4LDB4RjMsMHhBMSwweEExLAorCSAgMHg2QiB9CiAJfTsKIAotc3RhdGljIGNvbnN0IEVDX0NVUlZFX0RBVEEgX0VDX1NFQ0dfUFJJTUVfMTkySzEgPSB7Ci0JTklEX1g5XzYyX3ByaW1lX2ZpZWxkLAotCSJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkVFMzciLAotCSIwIiwKLQkiMyIsCi0JIkRCNEZGMTBFQzA1N0U5QUUyNkIwN0QwMjgwQjdGNDM0MURBNUQxQjFFQUUwNkM3RCIsCi0JIjliMmYyZjZkOWM1NjI4YTc4NDQxNjNkMDE1YmU4NjM0NDA4MmFhODhkOTVlMmY5ZCIsCi0JIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRTI2RjJGQzE3MEY2OTQ2NkE3NERFRkQ4RCIsMSwKLQlOVUxMLCAyMCwKLQkiU0VDRyBjdXJ2ZSBvdmVyIGEgMTkyIGJpdCBwcmltZSBmaWVsZCIKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeyBFQ19DVVJWRV9EQVRBIGg7IHVuc2lnbmVkIGNoYXIgZGF0YVswKzI0KjZdOyB9CisJX0VDX1NFQ0dfUFJJTUVfMTkySzEgPSB7CisJeyBOSURfWDlfNjJfcHJpbWVfZmllbGQsMCwyNCwxIH0sCisJewkJCQkJCQkvKiBubyBzZWVkICovCisJICAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAkvKiBwICovCisJICAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZFLAorCSAgMHhGRiwweEZGLDB4RUUsMHgzNywKKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCS8qIGEgKi8KKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJICAweDAwLDB4MDAsMHgwMCwweDAwLAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwJLyogYiAqLworCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkgIDB4MDAsMHgwMCwweDAwLDB4MDMsCisJICAweERCLDB4NEYsMHhGMSwweDBFLDB4QzAsMHg1NywweEU5LDB4QUUsMHgyNiwweEIwLAkvKiB4ICovCisJICAweDdELDB4MDIsMHg4MCwweEI3LDB4RjQsMHgzNCwweDFELDB4QTUsMHhEMSwweEIxLAorCSAgMHhFQSwweEUwLDB4NkMsMHg3RCwKKwkgIDB4OWIsMHgyZiwweDJmLDB4NmQsMHg5YywweDU2LDB4MjgsMHhhNywweDg0LDB4NDEsCS8qIHkgKi8KKwkgIDB4NjMsMHhkMCwweDE1LDB4YmUsMHg4NiwweDM0LDB4NDAsMHg4MiwweGFhLDB4ODgsCisJICAweGQ5LDB4NWUsMHgyZiwweDlkLAorCSAgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwJLyogb3JkZXIgKi8KKwkgIDB4RkYsMHhGRSwweDI2LDB4RjIsMHhGQywweDE3LDB4MEYsMHg2OSwweDQ2LDB4NkEsCisJICAweDc0LDB4REUsMHhGRCwweDhEIH0KIAl9OwogCi1zdGF0aWMgY29uc3QgRUNfQ1VSVkVfREFUQSBfRUNfU0VDR19QUklNRV8yMjRLMSA9IHsKLQlOSURfWDlfNjJfcHJpbWVfZmllbGQsCi0JIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRUZGRkZFNTZEIiwKLQkiMCIsCi0JIjUiLAotCSJBMTQ1NUIzMzRERjA5OURGMzBGQzI4QTE2OUE0NjdFOUU0NzA3NUE5MEY3RTY1MEVCNkI3QTQ1QyIsCi0JIjdlMDg5ZmVkN2ZiYTM0NDI4MmNhZmJkNmY3ZTMxOWY3YzBiMGJkNTllMmNhNGJkYjU1NmQ2MWE1IiwKLQkiMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRENFOEQyRUM2MTg0Q0FGMEE5NzE3NjlGQjFGNyIsMSwKLQlOVUxMLCAyMCwKLQkiU0VDRyBjdXJ2ZSBvdmVyIGEgMjI0IGJpdCBwcmltZSBmaWVsZCIKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeyBFQ19DVVJWRV9EQVRBIGg7IHVuc2lnbmVkIGNoYXIgZGF0YVswKzI5KjZdOyB9CisJX0VDX1NFQ0dfUFJJTUVfMjI0SzEgPSB7CisJeyBOSURfWDlfNjJfcHJpbWVfZmllbGQsMCwyOSwxIH0sCisJewkJCQkJCQkvKiBubyBzZWVkICovCisJICAweDAwLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAkvKiBwICovCisJICAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorCSAgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZFLDB4RkYsMHhGRiwweEU1LDB4NkQsCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAkvKiBhICovCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAkvKiBiICovCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsCisJICAweDAwLDB4QTEsMHg0NSwweDVCLDB4MzMsMHg0RCwweEYwLDB4OTksMHhERiwweDMwLAkvKiB4ICovCisJICAweEZDLDB4MjgsMHhBMSwweDY5LDB4QTQsMHg2NywweEU5LDB4RTQsMHg3MCwweDc1LAorCSAgMHhBOSwweDBGLDB4N0UsMHg2NSwweDBFLDB4QjYsMHhCNywweEE0LDB4NUMsCisJICAweDAwLDB4N2UsMHgwOCwweDlmLDB4ZWQsMHg3ZiwweGJhLDB4MzQsMHg0MiwweDgyLAkvKiB5ICovCisJICAweGNhLDB4ZmIsMHhkNiwweGY3LDB4ZTMsMHgxOSwweGY3LDB4YzAsMHhiMCwweGJkLAorCSAgMHg1OSwweGUyLDB4Y2EsMHg0YiwweGRiLDB4NTUsMHg2ZCwweDYxLDB4YTUsCisJICAweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAkvKiBvcmRlciAqLworCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4REMsMHhFOCwweEQyLDB4RUMsMHg2MSwKKwkgIDB4ODQsMHhDQSwweEYwLDB4QTksMHg3MSwweDc2LDB4OUYsMHhCMSwweEY3IH0KIAl9OwogCi1zdGF0aWMgY29uc3QgRUNfQ1VSVkVfREFUQSBfRUNfU0VDR19QUklNRV8yNTZLMSA9IHsKLQlOSURfWDlfNjJfcHJpbWVfZmllbGQsCi0JIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkZDMkYiLAotCSIwIiwKLQkiNyIsCi0JIjc5QkU2NjdFRjlEQ0JCQUM1NUEwNjI5NUNFODcwQjA3MDI5QkZDREIyRENFMjhEOTU5RjI4MTVCMTZGODE3OTgiLAotCSI0ODNhZGE3NzI2YTNjNDY1NWRhNGZiZmMwZTExMDhhOGZkMTdiNDQ4YTY4NTU0MTk5YzQ3ZDA4ZmZiMTBkNGI4IiwKLQkiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVCQUFFRENFNkFGNDhBMDNCQkZEMjVFOENEMDM2NDE0MSIsMSwKLQlOVUxMLCAyMCwKLQkiU0VDRyBjdXJ2ZSBvdmVyIGEgMjU2IGJpdCBwcmltZSBmaWVsZCIKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeyBFQ19DVVJWRV9EQVRBIGg7IHVuc2lnbmVkIGNoYXIgZGF0YVswKzMyKjZdOyB9CisJX0VDX1NFQ0dfUFJJTUVfMjU2SzEgPSB7CisJeyBOSURfWDlfNjJfcHJpbWVfZmllbGQsMCwzMiwxIH0sCisJewkJCQkJCQkvKiBubyBzZWVkICovCisJICAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAkvKiBwICovCisJICAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorCSAgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZFLDB4RkYsMHhGRiwKKwkgIDB4RkMsMHgyRiwKKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCS8qIGEgKi8KKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCSAgMHgwMCwweDAwLAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwJLyogYiAqLworCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJICAweDAwLDB4MDcsCisJICAweDc5LDB4QkUsMHg2NiwweDdFLDB4RjksMHhEQywweEJCLDB4QUMsMHg1NSwweEEwLAkvKiB4ICovCisJICAweDYyLDB4OTUsMHhDRSwweDg3LDB4MEIsMHgwNywweDAyLDB4OUIsMHhGQywweERCLAorCSAgMHgyRCwweENFLDB4MjgsMHhEOSwweDU5LDB4RjIsMHg4MSwweDVCLDB4MTYsMHhGOCwKKwkgIDB4MTcsMHg5OCwKKwkgIDB4NDgsMHgzYSwweGRhLDB4NzcsMHgyNiwweGEzLDB4YzQsMHg2NSwweDVkLDB4YTQsCS8qIHkgKi8KKwkgIDB4ZmIsMHhmYywweDBlLDB4MTEsMHgwOCwweGE4LDB4ZmQsMHgxNywweGI0LDB4NDgsCisJICAweGE2LDB4ODUsMHg1NCwweDE5LDB4OWMsMHg0NywweGQwLDB4OGYsMHhmYiwweDEwLAorCSAgMHhkNCwweGI4LAorCSAgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwJLyogb3JkZXIgKi8KKwkgIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZFLDB4QkEsMHhBRSwweERDLDB4RTYsCisJICAweEFGLDB4NDgsMHhBMCwweDNCLDB4QkYsMHhEMiwweDVFLDB4OEMsMHhEMCwweDM2LAorCSAgMHg0MSwweDQxIH0KIAl9OwogCiAvKiBzb21lIHdhcC93dGxzIGN1cnZlcyAqLwotc3RhdGljIGNvbnN0IEVDX0NVUlZFX0RBVEEgX0VDX1dUTFNfOCA9IHsKLQlOSURfWDlfNjJfcHJpbWVfZmllbGQsCi0JIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZERTciLAotCSIwIiwKLQkiMyIsCi0JIjEiLAotCSIyIiwKLQkiMDEwMDAwMDAwMDAwMDAwMUVDRUE1NTFBRDgzN0U5IiwxLAotCU5VTEwsIDIwLAotCSJXVExTIGN1cnZlIG92ZXIgYSAxMTIgYml0IHByaW1lIGZpZWxkIgorc3RhdGljIGNvbnN0IHN0cnVjdCB7IEVDX0NVUlZFX0RBVEEgaDsgdW5zaWduZWQgY2hhciBkYXRhWzArMTUqNl07IH0KKwlfRUNfV1RMU184ID0geworCXsgTklEX1g5XzYyX3ByaW1lX2ZpZWxkLDAsMTUsMSB9LAorCXsJCQkJCQkJLyogbm8gc2VlZCAqLworCSAgMHgwMCwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwJLyogcCAqLworCSAgMHhGRiwweEZGLDB4RkYsMHhGRCwweEU3LAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwJLyogYSAqLworCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwJLyogYiAqLworCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAzLAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwJLyogeCAqLworCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwJLyogeSAqLworCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLAorCSAgMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4RUMsMHhFQSwJLyogb3JkZXIgKi8KKwkgIDB4NTUsMHgxQSwweEQ4LDB4MzcsMHhFOSB9CiAJfTsKIAotc3RhdGljIGNvbnN0IEVDX0NVUlZFX0RBVEEgX0VDX1dUTFNfOSA9IHsKLQlOSURfWDlfNjJfcHJpbWVfZmllbGQsCi0JIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQzgwOEYiLAotCSIwIiwKLQkiMyIsCi0JIjEiLAotCSIyIiwKLQkiMDEwMDAwMDAwMDAwMDAwMDAwMDAwMUNEQzk4QUUwRTJERTU3NEFCRjMzIiwxLAotCU5VTEwsIDIwLAotCSJXVExTIGN1cnZlIG92ZXIgYSAxNjAgYml0IHByaW1lIGZpZWxkIgorc3RhdGljIGNvbnN0IHN0cnVjdCB7IEVDX0NVUlZFX0RBVEEgaDsgdW5zaWduZWQgY2hhciBkYXRhWzArMjEqNl07IH0KKwlfRUNfV1RMU185ID0geworCXsgTklEX1g5XzYyX3ByaW1lX2ZpZWxkLDAsMjEsMSB9LAorCXsJCQkJCQkJLyogbm8gc2VlZCAqLworCSAgMHgwMCwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwJLyogcCAqLworCSAgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkMsMHg4MCwKKwkgIDB4OEYsCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAkvKiBhICovCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCSAgMHgwMCwKKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCS8qIGIgKi8KKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJICAweDAzLAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwJLyogeCAqLworCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkgIDB4MDEsCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAkvKiB5ICovCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCSAgMHgwMiwKKwkgIDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCS8qIG9yZGVyICovCisJICAweDAxLDB4Q0QsMHhDOSwweDhBLDB4RTAsMHhFMiwweERFLDB4NTcsMHg0QSwweEJGLAorCSAgMHgzMyB9CiAJfTsKIAotc3RhdGljIGNvbnN0IEVDX0NVUlZFX0RBVEEgX0VDX1dUTFNfMTIgPSB7Ci0JTklEX1g5XzYyX3ByaW1lX2ZpZWxkLAotCSJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIsCi0JIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFIiwKLQkiQjQwNTBBODUwQzA0QjNBQkY1NDEzMjU2NTA0NEIwQjdEN0JGRDhCQTI3MEIzOTQzMjM1NUZGQjQiLAotCSJCNzBFMENCRDZCQjRCRjdGMzIxMzkwQjk0QTAzQzFEMzU2QzIxMTIyMzQzMjgwRDYxMTVDMUQyMSIsCi0JImJkMzc2Mzg4YjVmNzIzZmI0YzIyZGZlNmNkNDM3NWEwNWEwNzQ3NjQ0NGQ1ODE5OTg1MDA3ZTM0IiwKLQkiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjE2QTJFMEI4RjAzRTEzREQyOTQ1NUM1QzJBM0QiLCAxLAotCU5VTEwsIDAsCi0JIldUTFMgY3VydnMgb3ZlciBhIDIyNCBiaXQgcHJpbWUgZmllbGQiCitzdGF0aWMgY29uc3Qgc3RydWN0IHsgRUNfQ1VSVkVfREFUQSBoOyB1bnNpZ25lZCBjaGFyIGRhdGFbMCsyOCo2XTsgfQorCV9FQ19XVExTXzEyID0geworCXsgTklEX1g5XzYyX3ByaW1lX2ZpZWxkLDAsMjgsMSB9LAorCXsJCQkJCQkJLyogbm8gc2VlZCAqLworCSAgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwJLyogcCAqLworCSAgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwKKwkgIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCS8qIGEgKi8KKwkgIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZFLDB4RkYsMHhGRiwweEZGLDB4RkYsCisJICAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkUsCisJICAweEI0LDB4MDUsMHgwQSwweDg1LDB4MEMsMHgwNCwweEIzLDB4QUIsMHhGNSwweDQxLAkvKiBiICovCisJICAweDMyLDB4NTYsMHg1MCwweDQ0LDB4QjAsMHhCNywweEQ3LDB4QkYsMHhEOCwweEJBLAorCSAgMHgyNywweDBCLDB4MzksMHg0MywweDIzLDB4NTUsMHhGRiwweEI0LAorCSAgMHhCNywweDBFLDB4MEMsMHhCRCwweDZCLDB4QjQsMHhCRiwweDdGLDB4MzIsMHgxMywJLyogeCAqLworCSAgMHg5MCwweEI5LDB4NEEsMHgwMywweEMxLDB4RDMsMHg1NiwweEMyLDB4MTEsMHgyMiwKKwkgIDB4MzQsMHgzMiwweDgwLDB4RDYsMHgxMSwweDVDLDB4MUQsMHgyMSwKKwkgIDB4YmQsMHgzNywweDYzLDB4ODgsMHhiNSwweGY3LDB4MjMsMHhmYiwweDRjLDB4MjIsCS8qIHkgKi8KKwkgIDB4ZGYsMHhlNiwweGNkLDB4NDMsMHg3NSwweGEwLDB4NWEsMHgwNywweDQ3LDB4NjQsCisJICAweDQ0LDB4ZDUsMHg4MSwweDk5LDB4ODUsMHgwMCwweDdlLDB4MzQsCisJICAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAkvKiBvcmRlciAqLworCSAgMHhGRiwweEZGLDB4RkYsMHhGRiwweDE2LDB4QTIsMHhFMCwweEI4LDB4RjAsMHgzRSwKKwkgIDB4MTMsMHhERCwweDI5LDB4NDUsMHg1QywweDVDLDB4MkEsMHgzRCB9CiAJfTsKIAogLyogY2hhcmFjdGVyaXN0aWMgdHdvIGN1cnZlcyAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgX0VDX1NFQ0dfQ0hBUjJfMTEzUjFfU0VFRFtdID0gewotCTB4MTAsMHhFNywweDIzLDB4QUIsMHgxNCwweEQ2LDB4OTYsMHhFNiwweDc2LDB4ODcsCi0JMHg1NiwweDE1LDB4MTcsMHg1NiwweEZFLDB4QkYsMHg4RiwweENCLDB4NDksMHhBOX07Ci1zdGF0aWMgY29uc3QgRUNfQ1VSVkVfREFUQSBfRUNfU0VDR19DSEFSMl8xMTNSMSA9IHsKLQlOSURfWDlfNjJfY2hhcmFjdGVyaXN0aWNfdHdvX2ZpZWxkLAotCSIwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDEiLAotCSIwMDMwODgyNTBDQTZFN0M3RkU2NDlDRTg1ODIwRjciLAotCSIwMEU4QkVFNEQzRTIyNjA3NDQxODhCRTBFOUM3MjMiLAotCSIwMDlENzM2MTZGMzVGNEFCMTQwN0Q3MzU2MkMxMEYiLAotCSIwMEE1MjgzMDI3Nzk1OEVFODREMTMxNUVEMzE4ODYiLAotCSIwMTAwMDAwMDAwMDAwMDAwRDlDQ0VDOEEzOUU1NkYiLCAyLAotCV9FQ19TRUNHX0NIQVIyXzExM1IxX1NFRUQsIDIwLAotCSJTRUNHIGN1cnZlIG92ZXIgYSAxMTMgYml0IGJpbmFyeSBmaWVsZCIKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeyBFQ19DVVJWRV9EQVRBIGg7IHVuc2lnbmVkIGNoYXIgZGF0YVsyMCsxNSo2XTsgfQorCV9FQ19TRUNHX0NIQVIyXzExM1IxID0geworCXsgTklEX1g5XzYyX2NoYXJhY3RlcmlzdGljX3R3b19maWVsZCwyMCwxNSwyIH0sCisJeyAweDEwLDB4RTcsMHgyMywweEFCLDB4MTQsMHhENiwweDk2LDB4RTYsMHg3NiwweDg3LAkvKiBzZWVkICovCisJICAweDU2LDB4MTUsMHgxNywweDU2LDB4RkUsMHhCRiwweDhGLDB4Q0IsMHg0OSwweEE5LAorCisJICAweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAkvKiBwICovCisJICAweDAwLDB4MDAsMHgwMCwweDAyLDB4MDEsCisJICAweDAwLDB4MzAsMHg4OCwweDI1LDB4MEMsMHhBNiwweEU3LDB4QzcsMHhGRSwweDY0LAkvKiBhICovCisJICAweDlDLDB4RTgsMHg1OCwweDIwLDB4RjcsCisJICAweDAwLDB4RTgsMHhCRSwweEU0LDB4RDMsMHhFMiwweDI2LDB4MDcsMHg0NCwweDE4LAkvKiBiICovCisJICAweDhCLDB4RTAsMHhFOSwweEM3LDB4MjMsCisJICAweDAwLDB4OUQsMHg3MywweDYxLDB4NkYsMHgzNSwweEY0LDB4QUIsMHgxNCwweDA3LAkvKiB4ICovCisJICAweEQ3LDB4MzUsMHg2MiwweEMxLDB4MEYsCisJICAweDAwLDB4QTUsMHgyOCwweDMwLDB4MjcsMHg3OSwweDU4LDB4RUUsMHg4NCwweEQxLAkvKiB5ICovCisJICAweDMxLDB4NUUsMHhEMywweDE4LDB4ODYsCisJICAweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhEOSwweENDLAkvKiBvcmRlciAqLworCSAgMHhFQywweDhBLDB4MzksMHhFNSwweDZGIH0KIAl9OwogCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBfRUNfU0VDR19DSEFSMl8xMTNSMl9TRUVEW10gPSB7Ci0JMHgxMCwweEMwLDB4RkIsMHgxNSwweDc2LDB4MDgsMHg2MCwweERFLDB4RjEsMHhFRSwKLQkweEY0LDB4RDYsMHg5NiwweEU2LDB4NzYsMHg4NywweDU2LDB4MTUsMHgxNywweDVEfTsKLXN0YXRpYyBjb25zdCBFQ19DVVJWRV9EQVRBIF9FQ19TRUNHX0NIQVIyXzExM1IyID0gewotCU5JRF9YOV82Ml9jaGFyYWN0ZXJpc3RpY190d29fZmllbGQsCi0JIjAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMSIsCi0JIjAwNjg5OTE4REJFQzdFNUEwREQ2REZDMEFBNTVDNyIsCi0JIjAwOTVFOUE5RUM5QjI5N0JENEJGMzZFMDU5MTg0RiIsCi0JIjAxQTU3QTZBN0IyNkNBNUVGNTJGQ0RCODE2NDc5NyIsCi0JIjAwQjNBREM5NEVEMUZFNjc0QzA2RTY5NUJBQkExRCIsCi0JIjAxMDAwMDAwMDAwMDAwMDEwODc4OUIyNDk2QUY5MyIsIDIsCi0JX0VDX1NFQ0dfQ0hBUjJfMTEzUjJfU0VFRCwgMjAsCi0JIlNFQ0cgY3VydmUgb3ZlciBhIDExMyBiaXQgYmluYXJ5IGZpZWxkIgorc3RhdGljIGNvbnN0IHN0cnVjdCB7IEVDX0NVUlZFX0RBVEEgaDsgdW5zaWduZWQgY2hhciBkYXRhWzIwKzE1KjZdOyB9CisJX0VDX1NFQ0dfQ0hBUjJfMTEzUjIgPSB7CisJeyBOSURfWDlfNjJfY2hhcmFjdGVyaXN0aWNfdHdvX2ZpZWxkLDIwLDE1LDIgfSwKKwl7IDB4MTAsMHhDMCwweEZCLDB4MTUsMHg3NiwweDA4LDB4NjAsMHhERSwweEYxLDB4RUUsCS8qIHNlZWQgKi8KKwkgIDB4RjQsMHhENiwweDk2LDB4RTYsMHg3NiwweDg3LDB4NTYsMHgxNSwweDE3LDB4NUQsCisKKwkgIDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCS8qIHAgKi8KKwkgIDB4MDAsMHgwMCwweDAwLDB4MDIsMHgwMSwKKwkgIDB4MDAsMHg2OCwweDk5LDB4MTgsMHhEQiwweEVDLDB4N0UsMHg1QSwweDBELDB4RDYsCS8qIGEgKi8KKwkgIDB4REYsMHhDMCwweEFBLDB4NTUsMHhDNywKKwkgIDB4MDAsMHg5NSwweEU5LDB4QTksMHhFQywweDlCLDB4MjksMHg3QiwweEQ0LDB4QkYsCS8qIGIgKi8KKwkgIDB4MzYsMHhFMCwweDU5LDB4MTgsMHg0RiwKKwkgIDB4MDEsMHhBNSwweDdBLDB4NkEsMHg3QiwweDI2LDB4Q0EsMHg1RSwweEY1LDB4MkYsCS8qIHggKi8KKwkgIDB4Q0QsMHhCOCwweDE2LDB4NDcsMHg5NywKKwkgIDB4MDAsMHhCMywweEFELDB4QzksMHg0RSwweEQxLDB4RkUsMHg2NywweDRDLDB4MDYsCS8qIHkgKi8KKwkgIDB4RTYsMHg5NSwweEJBLDB4QkEsMHgxRCwKKwkgIDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDA4LDB4NzgsCS8qIG9yZGVyICovCisJICAweDlCLDB4MjQsMHg5NiwweEFGLDB4OTMgfQogCX07CiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIF9FQ19TRUNHX0NIQVIyXzEzMVIxX1NFRURbXSA9IHsKLQkweDRELDB4NjksMHg2RSwweDY3LDB4NjgsMHg3NSwweDYxLDB4NTEsMHg3NSwweDk4LAotCTB4NUIsMHhEMywweEFELDB4QkEsMHhEQSwweDIxLDB4QjQsMHgzQSwweDk3LDB4RTJ9Owotc3RhdGljIGNvbnN0IEVDX0NVUlZFX0RBVEEgX0VDX1NFQ0dfQ0hBUjJfMTMxUjEgPSB7Ci0JTklEX1g5XzYyX2NoYXJhY3RlcmlzdGljX3R3b19maWVsZCwKLQkiMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwRCIsCi0JIjA3QTExQjA5QTc2QjU2MjE0NDQxOEZGM0ZGOEMyNTcwQjgiLAotCSIwMjE3QzA1NjEwODg0QjYzQjlDNkM3MjkxNjc4RjlEMzQxIiwKLQkiMDA4MUJBRjkxRkRGOTgzM0M0MEY5QzE4MTM0MzYzODM5OSIsCi0JIjA3OEM2RTdFQTM4QzAwMUY3M0M4MTM0QjFCNEVGOUUxNTAiLAotCSIwNDAwMDAwMDAwMDAwMDAwMDIzMTIzOTUzQTk0NjRCNTREIiwgMiwKLQlfRUNfU0VDR19DSEFSMl8xMzFSMV9TRUVELCAyMCwKLQkiU0VDRy9XVExTIGN1cnZlIG92ZXIgYSAxMzEgYml0IGJpbmFyeSBmaWVsZCIKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeyBFQ19DVVJWRV9EQVRBIGg7IHVuc2lnbmVkIGNoYXIgZGF0YVsyMCsxNyo2XTsgfQorCV9FQ19TRUNHX0NIQVIyXzEzMVIxID0geworCXsgTklEX1g5XzYyX2NoYXJhY3RlcmlzdGljX3R3b19maWVsZCwyMCwxNywyIH0sCisJeyAweDRELDB4NjksMHg2RSwweDY3LDB4NjgsMHg3NSwweDYxLDB4NTEsMHg3NSwweDk4LAkvKiBzZWVkICovCisJICAweDVCLDB4RDMsMHhBRCwweEJBLDB4REEsMHgyMSwweEI0LDB4M0EsMHg5NywweEUyLAorCisJICAweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAkvKiBwICovCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDBELAorCSAgMHgwNywweEExLDB4MUIsMHgwOSwweEE3LDB4NkIsMHg1NiwweDIxLDB4NDQsMHg0MSwJLyogYSAqLworCSAgMHg4RiwweEYzLDB4RkYsMHg4QywweDI1LDB4NzAsMHhCOCwKKwkgIDB4MDIsMHgxNywweEMwLDB4NTYsMHgxMCwweDg4LDB4NEIsMHg2MywweEI5LDB4QzYsCS8qIGIgKi8KKwkgIDB4QzcsMHgyOSwweDE2LDB4NzgsMHhGOSwweEQzLDB4NDEsCisJICAweDAwLDB4ODEsMHhCQSwweEY5LDB4MUYsMHhERiwweDk4LDB4MzMsMHhDNCwweDBGLAkvKiB4ICovCisJICAweDlDLDB4MTgsMHgxMywweDQzLDB4NjMsMHg4MywweDk5LAorCSAgMHgwNywweDhDLDB4NkUsMHg3RSwweEEzLDB4OEMsMHgwMCwweDFGLDB4NzMsMHhDOCwJLyogeSAqLworCSAgMHgxMywweDRCLDB4MUIsMHg0RSwweEY5LDB4RTEsMHg1MCwKKwkgIDB4MDQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4MzEsCS8qIG9yZGVyICovCisJICAweDIzLDB4OTUsMHgzQSwweDk0LDB4NjQsMHhCNSwweDREIH0KIAl9OwogCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBfRUNfU0VDR19DSEFSMl8xMzFSMl9TRUVEW10gPSB7Ci0JMHg5OCwweDVCLDB4RDMsMHhBRCwweEJBLDB4RDQsMHhENiwweDk2LDB4RTYsMHg3NiwKLQkweDg3LDB4NTYsMHgxNSwweDE3LDB4NUEsMHgyMSwweEI0LDB4M0EsMHg5NywweEUzfTsKLXN0YXRpYyBjb25zdCBFQ19DVVJWRV9EQVRBIF9FQ19TRUNHX0NIQVIyXzEzMVIyID0gewotCU5JRF9YOV82Ml9jaGFyYWN0ZXJpc3RpY190d29fZmllbGQsCi0JIjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMEQiLAotCSIwM0U1QTg4OTE5RDdDQUZDQkY0MTVGMDdDMjE3NjU3M0IyIiwKLQkiMDRCODI2NkE0NkM1NTY1N0FDNzM0Q0UzOEYwMThGMjE5MiIsCi0JIjAzNTZEQ0Q4RjJGOTUwMzFBRDY1MkQyMzk1MUJCMzY2QTgiLAotCSIwNjQ4RjA2RDg2Nzk0MEE1MzY2RDlFMjY1REU5RUIyNDBGIiwKLQkiMDQwMDAwMDAwMDAwMDAwMDAxNjk1NEEyMzMwNDlCQTk4RiIsIDIsCi0JX0VDX1NFQ0dfQ0hBUjJfMTMxUjJfU0VFRCwgMjAsCi0JIlNFQ0cgY3VydmUgb3ZlciBhIDEzMSBiaXQgYmluYXJ5IGZpZWxkIgorc3RhdGljIGNvbnN0IHN0cnVjdCB7IEVDX0NVUlZFX0RBVEEgaDsgdW5zaWduZWQgY2hhciBkYXRhWzIwKzE3KjZdOyB9CisJX0VDX1NFQ0dfQ0hBUjJfMTMxUjIgPSB7CisJeyBOSURfWDlfNjJfY2hhcmFjdGVyaXN0aWNfdHdvX2ZpZWxkLDIwLDE3LDIgfSwKKwl7IDB4OTgsMHg1QiwweEQzLDB4QUQsMHhCQSwweEQ0LDB4RDYsMHg5NiwweEU2LDB4NzYsCS8qIHNlZWQgKi8KKwkgIDB4ODcsMHg1NiwweDE1LDB4MTcsMHg1QSwweDIxLDB4QjQsMHgzQSwweDk3LDB4RTMsCisKKwkgIDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCS8qIHAgKi8KKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MEQsCisJICAweDAzLDB4RTUsMHhBOCwweDg5LDB4MTksMHhENywweENBLDB4RkMsMHhCRiwweDQxLAkvKiBhICovCisJICAweDVGLDB4MDcsMHhDMiwweDE3LDB4NjUsMHg3MywweEIyLAorCSAgMHgwNCwweEI4LDB4MjYsMHg2QSwweDQ2LDB4QzUsMHg1NiwweDU3LDB4QUMsMHg3MywJLyogYiAqLworCSAgMHg0QywweEUzLDB4OEYsMHgwMSwweDhGLDB4MjEsMHg5MiwKKwkgIDB4MDMsMHg1NiwweERDLDB4RDgsMHhGMiwweEY5LDB4NTAsMHgzMSwweEFELDB4NjUsCS8qIHggKi8KKwkgIDB4MkQsMHgyMywweDk1LDB4MUIsMHhCMywweDY2LDB4QTgsCisJICAweDA2LDB4NDgsMHhGMCwweDZELDB4ODYsMHg3OSwweDQwLDB4QTUsMHgzNiwweDZELAkvKiB5ICovCisJICAweDlFLDB4MjYsMHg1RCwweEU5LDB4RUIsMHgyNCwweDBGLAorCSAgMHgwNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHg2OSwJLyogb3JkZXIgKi8KKwkgIDB4NTQsMHhBMiwweDMzLDB4MDQsMHg5QiwweEE5LDB4OEYgfQogCX07CiAKLXN0YXRpYyBjb25zdCBFQ19DVVJWRV9EQVRBIF9FQ19OSVNUX0NIQVIyXzE2M0sgPSB7Ci0JTklEX1g5XzYyX2NoYXJhY3RlcmlzdGljX3R3b19maWVsZCwKLQkiMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM5IiwKLQkiMSIsCi0JIjEiLAotCSIwMkZFMTNDMDUzN0JCQzExQUNBQTA3RDc5M0RFNEU2RDVFNUM5NEVFRTgiLAotCSIwMjg5MDcwRkIwNUQzOEZGNTgzMjFGMkU4MDA1MzZENTM4Q0NEQUEzRDkiLAotCSIwNDAwMDAwMDAwMDAwMDAwMDAwMDAyMDEwOEEyRTBDQzBEOTlGOEE1RUYiLCAyLAotCU5VTEwsIDAsCi0JIk5JU1QvU0VDRy9XVExTIGN1cnZlIG92ZXIgYSAxNjMgYml0IGJpbmFyeSBmaWVsZCIKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeyBFQ19DVVJWRV9EQVRBIGg7IHVuc2lnbmVkIGNoYXIgZGF0YVswKzIxKjZdOyB9CisJX0VDX05JU1RfQ0hBUjJfMTYzSyA9IHsKKwl7IE5JRF9YOV82Ml9jaGFyYWN0ZXJpc3RpY190d29fZmllbGQsMCwyMSwyIH0sCisJewkJCQkJCQkvKiBubyBzZWVkICovCisJICAweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAkvKiBwICovCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCSAgMHhDOSwKKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCS8qIGEgKi8KKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJICAweDAxLAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwJLyogYiAqLworCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkgIDB4MDEsCisJICAweDAyLDB4RkUsMHgxMywweEMwLDB4NTMsMHg3QiwweEJDLDB4MTEsMHhBQywweEFBLAkvKiB4ICovCisJICAweDA3LDB4RDcsMHg5MywweERFLDB4NEUsMHg2RCwweDVFLDB4NUMsMHg5NCwweEVFLAorCSAgMHhFOCwKKwkgIDB4MDIsMHg4OSwweDA3LDB4MEYsMHhCMCwweDVELDB4MzgsMHhGRiwweDU4LDB4MzIsCS8qIHkgKi8KKwkgIDB4MUYsMHgyRSwweDgwLDB4MDUsMHgzNiwweEQ1LDB4MzgsMHhDQywweERBLDB4QTMsCisJICAweEQ5LAorCSAgMHgwNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwJLyogb3JkZXIgKi8KKwkgIDB4MDIsMHgwMSwweDA4LDB4QTIsMHhFMCwweENDLDB4MEQsMHg5OSwweEY4LDB4QTUsCisJICAweEVGIH0KIAl9OwogCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBfRUNfU0VDR19DSEFSMl8xNjNSMV9TRUVEW10gPSB7Ci0JMHgyNCwweEI3LDB4QjEsMHgzNywweEM4LDB4QTEsMHg0RCwweDY5LDB4NkUsMHg2NywKLQkweDY4LDB4NzUsMHg2MSwweDUxLDB4NzUsMHg2RiwweEQwLDB4REEsMHgyRSwweDVDfTsKLXN0YXRpYyBjb25zdCBFQ19DVVJWRV9EQVRBIF9FQ19TRUNHX0NIQVIyXzE2M1IxID0gewotCU5JRF9YOV82Ml9jaGFyYWN0ZXJpc3RpY190d29fZmllbGQsCi0JIjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOSIsCi0JIjA3QjY4ODJDQUFFRkE4NEY5NTU0RkY4NDI4QkQ4OEUyNDZEMjc4MkFFMiIsCi0JIjA3MTM2MTJEQ0REQ0I0MEFBQjk0NkJEQTI5Q0E5MUY3M0FGOTU4QUZEOSIsCi0JIjAzNjk5Nzk2OTdBQjQzODk3Nzg5NTY2Nzg5NTY3Rjc4N0E3ODc2QTY1NCIsCi0JIjAwNDM1RURCNDJFRkFGQjI5ODlENTFGRUZDRTNDODA5ODhGNDFGRjg4MyIsCi0JIjAzRkZGRkZGRkZGRkZGRkZGRkZGRkY0OEFBQjY4OUMyOUNBNzEwMjc5QiIsIDIsCitzdGF0aWMgY29uc3Qgc3RydWN0IHsgRUNfQ1VSVkVfREFUQSBoOyB1bnNpZ25lZCBjaGFyIGRhdGFbMCsyMSo2XTsgfQorCV9FQ19TRUNHX0NIQVIyXzE2M1IxID0geworCXsgTklEX1g5XzYyX2NoYXJhY3RlcmlzdGljX3R3b19maWVsZCwwLDIxLDIgfSwKKwl7CQkJCQkJCS8qIG5vIHNlZWQgKi8KKyNpZiAwCiAvKiBUaGUgYWxnb3JpdGhtIHVzZWQgdG8gZGVyaXZlIHRoZSBjdXJ2ZSBwYXJhbWV0ZXJzIGZyb20KICAqIHRoZSBzZWVkIHVzZWQgaGVyZSBpcyBzbGlnaHRseSBkaWZmZXJlbnQgdGhhbiB0aGUKLSAqIGFsZ29yaXRobSBkZXNjcmliZWQgaW4gWDkuNjIgLgotICovCi0jaWYgMAotCV9FQ19TRUNHX0NIQVIyXzE2M1IxX1NFRUQsIDIwLAotI2Vsc2UKLQlOVUxMLCAwLAorICogYWxnb3JpdGhtIGRlc2NyaWJlZCBpbiBYOS42MiAuICovCisJICAweDI0LDB4QjcsMHhCMSwweDM3LDB4QzgsMHhBMSwweDRELDB4NjksMHg2RSwweDY3LAorCSAgMHg2OCwweDc1LDB4NjEsMHg1MSwweDc1LDB4NkYsMHhEMCwweERBLDB4MkUsMHg1QywKICNlbmRpZgotCSJTRUNHIGN1cnZlIG92ZXIgYSAxNjMgYml0IGJpbmFyeSBmaWVsZCIKKwkgIDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCS8qIHAgKi8KKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJICAweEM5LAorCSAgMHgwNywweEI2LDB4ODgsMHgyQywweEFBLDB4RUYsMHhBOCwweDRGLDB4OTUsMHg1NCwJLyogYSAqLworCSAgMHhGRiwweDg0LDB4MjgsMHhCRCwweDg4LDB4RTIsMHg0NiwweEQyLDB4NzgsMHgyQSwKKwkgIDB4RTIsCisJICAweDA3LDB4MTMsMHg2MSwweDJELDB4Q0QsMHhEQywweEI0LDB4MEEsMHhBQiwweDk0LAkvKiBiICovCisJICAweDZCLDB4REEsMHgyOSwweENBLDB4OTEsMHhGNywweDNBLDB4RjksMHg1OCwweEFGLAorCSAgMHhEOSwKKwkgIDB4MDMsMHg2OSwweDk3LDB4OTYsMHg5NywweEFCLDB4NDMsMHg4OSwweDc3LDB4ODksCS8qIHggKi8KKwkgIDB4NTYsMHg2NywweDg5LDB4NTYsMHg3RiwweDc4LDB4N0EsMHg3OCwweDc2LDB4QTYsCisJICAweDU0LAorCSAgMHgwMCwweDQzLDB4NUUsMHhEQiwweDQyLDB4RUYsMHhBRiwweEIyLDB4OTgsMHg5RCwJLyogeSAqLworCSAgMHg1MSwweEZFLDB4RkMsMHhFMywweEM4LDB4MDksMHg4OCwweEY0LDB4MUYsMHhGOCwKKwkgIDB4ODMsCisJICAweDAzLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAkvKiBvcmRlciAqLworCSAgMHhGRiwweDQ4LDB4QUEsMHhCNiwweDg5LDB4QzIsMHg5QywweEE3LDB4MTAsMHgyNywKKwkgIDB4OUIgfQogCX07CiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIF9FQ19OSVNUX0NIQVIyXzE2M0JfU0VFRFtdID0gewotCTB4ODUsMHhFMiwweDVCLDB4RkUsMHg1QywweDg2LDB4MjIsMHg2QywweERCLDB4MTIsCi0JMHgwMSwweDZGLDB4NzUsMHg1MywweEY5LDB4RDAsMHhFNiwweDkzLDB4QTIsMHg2OH07Ci1zdGF0aWMgY29uc3QgRUNfQ1VSVkVfREFUQSBfRUNfTklTVF9DSEFSMl8xNjNCID17Ci0JTklEX1g5XzYyX2NoYXJhY3RlcmlzdGljX3R3b19maWVsZCwKLQkiMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM5IiwKLQkiMSIsCi0JIjAyMEE2MDE5MDdCOEM5NTNDQTE0ODFFQjEwNTEyRjc4NzQ0QTMyMDVGRCIsCi0JIjAzRjBFQkExNjI4NkEyRDU3RUEwOTkxMTY4RDQ5OTQ2MzdFODM0M0UzNiIsCi0JIjAwRDUxRkJDNkM3MUEwMDk0RkEyQ0RENTQ1QjExQzVDMEM3OTczMjRGMSIsCi0JIjA0MDAwMDAwMDAwMDAwMDAwMDAwMDI5MkZFNzdFNzBDMTJBNDIzNEMzMyIsIDIsCitzdGF0aWMgY29uc3Qgc3RydWN0IHsgRUNfQ1VSVkVfREFUQSBoOyB1bnNpZ25lZCBjaGFyIGRhdGFbMCsyMSo2XTsgfQorCV9FQ19OSVNUX0NIQVIyXzE2M0IgPSB7CisJeyBOSURfWDlfNjJfY2hhcmFjdGVyaXN0aWNfdHdvX2ZpZWxkLDAsMjEsMiB9LAorCXsJCQkJCQkJLyogbm8gc2VlZCAqLworI2lmIDAKIC8qIFRoZSBzZWVkIGhlcmUgd2FzIHVzZWQgdG8gY3JlYXRlZCB0aGUgY3VydmUgcGFyYW1ldGVycyBpbiBub3JtYWwKLSAqIGJhc2lzIHJlcHJlc2VudGF0aW9uIChhbmQgbm90IHRoZSBwb2x5bm9taWFsIHJlcHJlc2VudGF0aW9uIHVzZWQgaGVyZSkgCi0gKi8KLSNpZiAwCi0JX0VDX05JU1RfQ0hBUjJfMTYzQl9TRUVELCAyMCwKLSNlbHNlCi0JTlVMTCwgMCwKKyAqIGJhc2lzIHJlcHJlc2VudGF0aW9uIChhbmQgbm90IHRoZSBwb2x5bm9taWFsIHJlcHJlc2VudGF0aW9uIHVzZWQgaGVyZSkgKi8KKwkgIDB4ODUsMHhFMiwweDVCLDB4RkUsMHg1QywweDg2LDB4MjIsMHg2QywweERCLDB4MTIsCisJICAweDAxLDB4NkYsMHg3NSwweDUzLDB4RjksMHhEMCwweEU2LDB4OTMsMHhBMiwweDY4LAogI2VuZGlmCi0JIk5JU1QvU0VDRyBjdXJ2ZSBvdmVyIGEgMTYzIGJpdCBiaW5hcnkgZmllbGQiCisJICAweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAkvKiBwICovCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCSAgMHhDOSwKKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCS8qIGEgKi8KKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJICAweDAxLAorCSAgMHgwMiwweDBBLDB4NjAsMHgxOSwweDA3LDB4QjgsMHhDOSwweDUzLDB4Q0EsMHgxNCwJLyogYiAqLworCSAgMHg4MSwweEVCLDB4MTAsMHg1MSwweDJGLDB4NzgsMHg3NCwweDRBLDB4MzIsMHgwNSwKKwkgIDB4RkQsCisJICAweDAzLDB4RjAsMHhFQiwweEExLDB4NjIsMHg4NiwweEEyLDB4RDUsMHg3RSwweEEwLAkvKiB4ICovCisJICAweDk5LDB4MTEsMHg2OCwweEQ0LDB4OTksMHg0NiwweDM3LDB4RTgsMHgzNCwweDNFLAorCSAgMHgzNiwKKwkgIDB4MDAsMHhENSwweDFGLDB4QkMsMHg2QywweDcxLDB4QTAsMHgwOSwweDRGLDB4QTIsCS8qIHkgKi8KKwkgIDB4Q0QsMHhENSwweDQ1LDB4QjEsMHgxQywweDVDLDB4MEMsMHg3OSwweDczLDB4MjQsCisJICAweEYxLAorCSAgMHgwNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwJLyogb3JkZXIgKi8KKwkgIDB4MDIsMHg5MiwweEZFLDB4NzcsMHhFNywweDBDLDB4MTIsMHhBNCwweDIzLDB4NEMsCisJICAweDMzIH0KIAl9OwogCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBfRUNfU0VDR19DSEFSMl8xOTNSMV9TRUVEW10gPSB7Ci0JMHgxMCwweDNGLDB4QUUsMHhDNywweDRELDB4NjksMHg2RSwweDY3LDB4NjgsMHg3NSwKLQkweDYxLDB4NTEsMHg3NSwweDc3LDB4N0YsMHhDNSwweEIxLDB4OTEsMHhFRiwweDMwfTsKLXN0YXRpYyBjb25zdCBFQ19DVVJWRV9EQVRBIF9FQ19TRUNHX0NIQVIyXzE5M1IxID0gewotCU5JRF9YOV82Ml9jaGFyYWN0ZXJpc3RpY190d29fZmllbGQsCi0JIjAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAxIiwKLQkiMDAxNzg1OEZFQjdBOTg5NzUxNjlFMTcxRjc3QjQwODdERTA5OEFDOEE5MTFERjdCMDEiLAotCSIwMEZERkI0OUJGRTZDM0E4OUZBQ0FEQUE3QTFFNUJCQzdDQzFDMkU1RDgzMTQ3ODgxNCIsCi0JIjAxRjQ4MUJDNUYwRkY4NEE3NEFENkNERjZGREVGNEJGNjE3OTYyNTM3MkQ4QzBDNUUxIiwKLQkiMDAyNUUzOTlGMjkwMzcxMkNDRjNFQTlFM0ExQUQxN0ZCMEIzMjAxQjZBRjdDRTFCMDUiLAotCSIwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM3RjM0QTc3OEY0NDNBQ0M5MjBFQkE0OSIsIDIsCi0JX0VDX1NFQ0dfQ0hBUjJfMTkzUjFfU0VFRCwgMjAsCi0JIlNFQ0cgY3VydmUgb3ZlciBhIDE5MyBiaXQgYmluYXJ5IGZpZWxkIgorc3RhdGljIGNvbnN0IHN0cnVjdCB7IEVDX0NVUlZFX0RBVEEgaDsgdW5zaWduZWQgY2hhciBkYXRhWzIwKzI1KjZdOyB9CisJX0VDX1NFQ0dfQ0hBUjJfMTkzUjEgPSB7CisJeyBOSURfWDlfNjJfY2hhcmFjdGVyaXN0aWNfdHdvX2ZpZWxkLDIwLDI1LDIgfSwKKwl7IDB4MTAsMHgzRiwweEFFLDB4QzcsMHg0RCwweDY5LDB4NkUsMHg2NywweDY4LDB4NzUsCS8qIHNlZWQgKi8KKwkgIDB4NjEsMHg1MSwweDc1LDB4NzcsMHg3RiwweEM1LDB4QjEsMHg5MSwweEVGLDB4MzAsCisKKwkgIDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCS8qIHAgKi8KKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJICAweDAwLDB4MDAsMHgwMCwweDgwLDB4MDEsCisJICAweDAwLDB4MTcsMHg4NSwweDhGLDB4RUIsMHg3QSwweDk4LDB4OTcsMHg1MSwweDY5LAkvKiBhICovCisJICAweEUxLDB4NzEsMHhGNywweDdCLDB4NDAsMHg4NywweERFLDB4MDksMHg4QSwweEM4LAorCSAgMHhBOSwweDExLDB4REYsMHg3QiwweDAxLAorCSAgMHgwMCwweEZELDB4RkIsMHg0OSwweEJGLDB4RTYsMHhDMywweEE4LDB4OUYsMHhBQywJLyogYiAqLworCSAgMHhBRCwweEFBLDB4N0EsMHgxRSwweDVCLDB4QkMsMHg3QywweEMxLDB4QzIsMHhFNSwKKwkgIDB4RDgsMHgzMSwweDQ3LDB4ODgsMHgxNCwKKwkgIDB4MDEsMHhGNCwweDgxLDB4QkMsMHg1RiwweDBGLDB4RjgsMHg0QSwweDc0LDB4QUQsCS8qIHggKi8KKwkgIDB4NkMsMHhERiwweDZGLDB4REUsMHhGNCwweEJGLDB4NjEsMHg3OSwweDYyLDB4NTMsCisJICAweDcyLDB4RDgsMHhDMCwweEM1LDB4RTEsCisJICAweDAwLDB4MjUsMHhFMywweDk5LDB4RjIsMHg5MCwweDM3LDB4MTIsMHhDQywweEYzLAkvKiB5ICovCisJICAweEVBLDB4OUUsMHgzQSwweDFBLDB4RDEsMHg3RiwweEIwLDB4QjMsMHgyMCwweDFCLAorCSAgMHg2QSwweEY3LDB4Q0UsMHgxQiwweDA1LAorCSAgMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwJLyogb3JkZXIgKi8KKwkgIDB4MDAsMHgwMCwweDAwLDB4QzcsMHhGMywweDRBLDB4NzcsMHg4RiwweDQ0LDB4M0EsCisJICAweENDLDB4OTIsMHgwRSwweEJBLDB4NDkgfQogCX07CiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIF9FQ19TRUNHX0NIQVIyXzE5M1IyX1NFRURbXSA9IHsKLQkweDEwLDB4QjcsMHhCNCwweEQ2LDB4OTYsMHhFNiwweDc2LDB4ODcsMHg1NiwweDE1LAotCTB4MTcsMHg1MSwweDM3LDB4QzgsMHhBMSwweDZGLDB4RDAsMHhEQSwweDIyLDB4MTF9Owotc3RhdGljIGNvbnN0IEVDX0NVUlZFX0RBVEEgX0VDX1NFQ0dfQ0hBUjJfMTkzUjIgPSB7Ci0JTklEX1g5XzYyX2NoYXJhY3RlcmlzdGljX3R3b19maWVsZCwKLQkiMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDEiLAotCSIwMTYzRjM1QTUxMzdDMkNFM0VBNkVEODY2NzE5MEIwQkM0M0VDRDY5OTc3NzAyNzA5QiIsCi0JIjAwQzlCQjlFODkyN0Q0RDY0QzM3N0UyQUIyODU2QTVCMTZFM0VGQjdGNjFENDMxNkFFIiwKLQkiMDBEOUI2N0QxOTJFMDM2N0M4MDNGMzlFMUE3RTgyQ0ExNEE2NTEzNTBBQUU2MTdFOEYiLAotCSIwMUNFOTQzMzU2MDdDMzA0QUMyOUU3REVGQkQ5Q0EwMUY1OTZGOTI3MjI0Q0RFQ0Y2QyIsCi0JIjAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNUFBQjU2MUIwMDU0MTNDQ0Q0RUU5OUQ1IiwgMiwKLQlfRUNfU0VDR19DSEFSMl8xOTNSMl9TRUVELCAyMCwKLQkiU0VDRyBjdXJ2ZSBvdmVyIGEgMTkzIGJpdCBiaW5hcnkgZmllbGQiCitzdGF0aWMgY29uc3Qgc3RydWN0IHsgRUNfQ1VSVkVfREFUQSBoOyB1bnNpZ25lZCBjaGFyIGRhdGFbMjArMjUqNl07IH0KKwlfRUNfU0VDR19DSEFSMl8xOTNSMiA9IHsKKwl7IE5JRF9YOV82Ml9jaGFyYWN0ZXJpc3RpY190d29fZmllbGQsMjAsMjUsMiB9LAorCXsgMHgxMCwweEI3LDB4QjQsMHhENiwweDk2LDB4RTYsMHg3NiwweDg3LDB4NTYsMHgxNSwJLyogc2VlZCAqLworCSAgMHgxNywweDUxLDB4MzcsMHhDOCwweEExLDB4NkYsMHhEMCwweERBLDB4MjIsMHgxMSwKKworCSAgMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwJLyogcCAqLworCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkgIDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwMSwKKwkgIDB4MDEsMHg2MywweEYzLDB4NUEsMHg1MSwweDM3LDB4QzIsMHhDRSwweDNFLDB4QTYsCS8qIGEgKi8KKwkgIDB4RUQsMHg4NiwweDY3LDB4MTksMHgwQiwweDBCLDB4QzQsMHgzRSwweENELDB4NjksCisJICAweDk3LDB4NzcsMHgwMiwweDcwLDB4OUIsCisJICAweDAwLDB4QzksMHhCQiwweDlFLDB4ODksMHgyNywweEQ0LDB4RDYsMHg0QywweDM3LAkvKiBiICovCisJICAweDdFLDB4MkEsMHhCMiwweDg1LDB4NkEsMHg1QiwweDE2LDB4RTMsMHhFRiwweEI3LAorCSAgMHhGNiwweDFELDB4NDMsMHgxNiwweEFFLAorCSAgMHgwMCwweEQ5LDB4QjYsMHg3RCwweDE5LDB4MkUsMHgwMywweDY3LDB4QzgsMHgwMywJLyogeCAqLworCSAgMHhGMywweDlFLDB4MUEsMHg3RSwweDgyLDB4Q0EsMHgxNCwweEE2LDB4NTEsMHgzNSwKKwkgIDB4MEEsMHhBRSwweDYxLDB4N0UsMHg4RiwKKwkgIDB4MDEsMHhDRSwweDk0LDB4MzMsMHg1NiwweDA3LDB4QzMsMHgwNCwweEFDLDB4MjksCS8qIHkgKi8KKwkgIDB4RTcsMHhERSwweEZCLDB4RDksMHhDQSwweDAxLDB4RjUsMHg5NiwweEY5LDB4MjcsCisJICAweDIyLDB4NEMsMHhERSwweENGLDB4NkMsCisJICAweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAkvKiBvcmRlciAqLworCSAgMHgwMCwweDAwLDB4MDEsMHg1QSwweEFCLDB4NTYsMHgxQiwweDAwLDB4NTQsMHgxMywKKwkgIDB4Q0MsMHhENCwweEVFLDB4OTksMHhENSB9CiAJfTsKIAotc3RhdGljIGNvbnN0IEVDX0NVUlZFX0RBVEEgX0VDX05JU1RfQ0hBUjJfMjMzSyA9IHsKLQlOSURfWDlfNjJfY2hhcmFjdGVyaXN0aWNfdHdvX2ZpZWxkLAotCSIwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDEiLAotCSIwIiwKLQkiMSIsCi0JIjAxNzIzMkJBODUzQTdFNzMxQUYxMjlGMjJGRjQxNDk1NjNBNDE5QzI2QkY1MEE0QzlENkVFRkFENjEyNiIsCi0JIjAxREI1MzdERUNFODE5QjdGNzBGNTU1QTY3QzQyN0E4Q0Q5QkYxOEFFQjlCNTZFMEMxMTA1NkZBRTZBMyIsCi0JIjAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OUQ1QkI5MTVCQ0Q0NkVGQjFBRDVGMTczQUJERiIsIDQsCi0JTlVMTCwgMCwKLQkiTklTVC9TRUNHL1dUTFMgY3VydmUgb3ZlciBhIDIzMyBiaXQgYmluYXJ5IGZpZWxkIgorc3RhdGljIGNvbnN0IHN0cnVjdCB7IEVDX0NVUlZFX0RBVEEgaDsgdW5zaWduZWQgY2hhciBkYXRhWzArMzAqNl07IH0KKwlfRUNfTklTVF9DSEFSMl8yMzNLID0geworCXsgTklEX1g5XzYyX2NoYXJhY3RlcmlzdGljX3R3b19maWVsZCwwLDMwLDQgfSwKKwl7CQkJCQkJCS8qIG5vIHNlZWQgKi8KKwkgIDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCSAgMHgwNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwKKworCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwJLyogYSAqLworCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisKKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCS8qIGIgKi8KKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLAorCisJICAweDAxLDB4NzIsMHgzMiwweEJBLDB4ODUsMHgzQSwweDdFLDB4NzMsMHgxQSwweEYxLAkvKiB4ICovCisJICAweDI5LDB4RjIsMHgyRiwweEY0LDB4MTQsMHg5NSwweDYzLDB4QTQsMHgxOSwweEMyLAorCSAgMHg2QiwweEY1LDB4MEEsMHg0QywweDlELDB4NkUsMHhFRiwweEFELDB4NjEsMHgyNiwKKworCSAgMHgwMSwweERCLDB4NTMsMHg3RCwweEVDLDB4RTgsMHgxOSwweEI3LDB4RjcsMHgwRiwJLyogeSAqLworCSAgMHg1NSwweDVBLDB4NjcsMHhDNCwweDI3LDB4QTgsMHhDRCwweDlCLDB4RjEsMHg4QSwKKwkgIDB4RUIsMHg5QiwweDU2LDB4RTAsMHhDMSwweDEwLDB4NTYsMHhGQSwweEU2LDB4QTMsCisKKwkgIDB4MDAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCS8qIG9yZGVyICovCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNiwweDlELDB4NUIsMHhCOSwweDE1LAorCSAgMHhCQywweEQ0LDB4NkUsMHhGQiwweDFBLDB4RDUsMHhGMSwweDczLDB4QUIsMHhERiB9CiAJfTsKIAotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgX0VDX05JU1RfQ0hBUjJfMjMzQl9TRUVEW10gPSB7Ci0JMHg3NCwweEQ1LDB4OUYsMHhGMCwweDdGLDB4NkIsMHg0MSwweDNELDB4MEUsMHhBMSwKLQkweDRCLDB4MzQsMHg0QiwweDIwLDB4QTIsMHhEQiwweDA0LDB4OUIsMHg1MCwweEMzfTsKLXN0YXRpYyBjb25zdCBFQ19DVVJWRV9EQVRBIF9FQ19OSVNUX0NIQVIyXzIzM0IgPSB7Ci0JTklEX1g5XzYyX2NoYXJhY3RlcmlzdGljX3R3b19maWVsZCwKLQkiMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAxIiwKLQkiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIiwKLQkiMDA2NjY0N0VERTZDMzMyQzdGOEMwOTIzQkI1ODIxM0IzMzNCMjBFOUNFNDI4MUZFMTE1RjdEOEY5MEFEIiwKLQkiMDBGQUM5REZDQkFDODMxM0JCMjEzOUYxQkI3NTVGRUY2NUJDMzkxRjhCMzZGOEY4RUI3MzcxRkQ1NThCIiwKLQkiMDEwMDZBMDhBNDE5MDMzNTA2NzhFNTg1MjhCRUJGOEEwQkVGRjg2N0E3Q0EzNjcxNkY3RTAxRjgxMDUyIiwKLQkiMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTNFOTc0RTcyRjhBNjkyMjAzMUQyNjAzQ0ZFMEQ3IiwgMiwKLQlfRUNfTklTVF9DSEFSMl8yMzNCX1NFRUQsIDIwLAotCSJOSVNUL1NFQ0cvV1RMUyBjdXJ2ZSBvdmVyIGEgMjMzIGJpdCBiaW5hcnkgZmllbGQiCitzdGF0aWMgY29uc3Qgc3RydWN0IHsgRUNfQ1VSVkVfREFUQSBoOyB1bnNpZ25lZCBjaGFyIGRhdGFbMjArMzAqNl07IH0KKwlfRUNfTklTVF9DSEFSMl8yMzNCID0geworCXsgTklEX1g5XzYyX2NoYXJhY3RlcmlzdGljX3R3b19maWVsZCwyMCwzMCwyIH0sCisJeyAweDc0LDB4RDUsMHg5RiwweEYwLDB4N0YsMHg2QiwweDQxLDB4M0QsMHgwRSwweEExLAkvKiBzZWVkICovCisJICAweDRCLDB4MzQsMHg0QiwweDIwLDB4QTIsMHhEQiwweDA0LDB4OUIsMHg1MCwweEMzLAorCisJICAweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAkvKiBwICovCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCSAgMHgwNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwKKworCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwJLyogYSAqLworCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsCisKKwkgIDB4MDAsMHg2NiwweDY0LDB4N0UsMHhERSwweDZDLDB4MzMsMHgyQywweDdGLDB4OEMsCS8qIGIgKi8KKwkgIDB4MDksMHgyMywweEJCLDB4NTgsMHgyMSwweDNCLDB4MzMsMHgzQiwweDIwLDB4RTksCisJICAweENFLDB4NDIsMHg4MSwweEZFLDB4MTEsMHg1RiwweDdELDB4OEYsMHg5MCwweEFELAorCisJICAweDAwLDB4RkEsMHhDOSwweERGLDB4Q0IsMHhBQywweDgzLDB4MTMsMHhCQiwweDIxLAkvKiB4ICovCisJICAweDM5LDB4RjEsMHhCQiwweDc1LDB4NUYsMHhFRiwweDY1LDB4QkMsMHgzOSwweDFGLAorCSAgMHg4QiwweDM2LDB4RjgsMHhGOCwweEVCLDB4NzMsMHg3MSwweEZELDB4NTUsMHg4QiwKKworCSAgMHgwMSwweDAwLDB4NkEsMHgwOCwweEE0LDB4MTksMHgwMywweDM1LDB4MDYsMHg3OCwJLyogeSAqLworCSAgMHhFNSwweDg1LDB4MjgsMHhCRSwweEJGLDB4OEEsMHgwQiwweEVGLDB4RjgsMHg2NywKKwkgIDB4QTcsMHhDQSwweDM2LDB4NzEsMHg2RiwweDdFLDB4MDEsMHhGOCwweDEwLDB4NTIsCisKKwkgIDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCS8qIG9yZGVyICovCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMywweEU5LDB4NzQsMHhFNywweDJGLAorCSAgMHg4QSwweDY5LDB4MjIsMHgwMywweDFELDB4MjYsMHgwMywweENGLDB4RTAsMHhENyB9CiAJfTsKIAotc3RhdGljIGNvbnN0IEVDX0NVUlZFX0RBVEEgX0VDX1NFQ0dfQ0hBUjJfMjM5SzEgPSB7Ci0JTklEX1g5XzYyX2NoYXJhY3RlcmlzdGljX3R3b19maWVsZCwKLQkiODAwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIiwKLQkiMCIsCi0JIjEiLAotCSIyOUEwQjZBODg3QTk4M0U5NzMwOTg4QTY4NzI3QThCMkQxMjZDNDRDQzJDQzdCMkE2NTU1MTkzMDM1REMiLAotCSI3NjMxMDgwNEYxMkU1NDlCREIwMTFDMTAzMDg5RTczNTEwQUNCMjc1RkMzMTJBNURDNkI3NjU1M0YwQ0EiLAotCSIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QTc5RkVDNjdDQjZFOTFGMUMxREE4MDBFNDc4QTUiLCA0LAotCU5VTEwsIDAsCi0JIlNFQ0cgY3VydmUgb3ZlciBhIDIzOSBiaXQgYmluYXJ5IGZpZWxkIgorc3RhdGljIGNvbnN0IHN0cnVjdCB7IEVDX0NVUlZFX0RBVEEgaDsgdW5zaWduZWQgY2hhciBkYXRhWzArMzAqNl07IH0KKwlfRUNfU0VDR19DSEFSMl8yMzlLMSA9IHsKKwl7IE5JRF9YOV82Ml9jaGFyYWN0ZXJpc3RpY190d29fZmllbGQsMCwzMCw0IH0sCisJewkJCQkJCQkvKiBubyBzZWVkICovCisJICAweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCSAgMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsCisKKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCS8qIGEgKi8KKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAkvKiBiICovCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwKKworCSAgMHgyOSwweEEwLDB4QjYsMHhBOCwweDg3LDB4QTksMHg4MywweEU5LDB4NzMsMHgwOSwJLyogeCAqLworCSAgMHg4OCwweEE2LDB4ODcsMHgyNywweEE4LDB4QjIsMHhEMSwweDI2LDB4QzQsMHg0QywKKwkgIDB4QzIsMHhDQywweDdCLDB4MkEsMHg2NSwweDU1LDB4MTksMHgzMCwweDM1LDB4REMsCisKKwkgIDB4NzYsMHgzMSwweDA4LDB4MDQsMHhGMSwweDJFLDB4NTQsMHg5QiwweERCLDB4MDEsCS8qIHkgKi8KKwkgIDB4MUMsMHgxMCwweDMwLDB4ODksMHhFNywweDM1LDB4MTAsMHhBQywweEIyLDB4NzUsCisJICAweEZDLDB4MzEsMHgyQSwweDVELDB4QzYsMHhCNywweDY1LDB4NTMsMHhGMCwweENBLAorCisJICAweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAkvKiBvcmRlciAqLworCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NUEsMHg3OSwweEZFLDB4QzYsMHg3QywKKwkgIDB4QjYsMHhFOSwweDFGLDB4MUMsMHgxRCwweEE4LDB4MDAsMHhFNCwweDc4LDB4QTUgfQogCX07CiAKLXN0YXRpYyBjb25zdCBFQ19DVVJWRV9EQVRBIF9FQ19OSVNUX0NIQVIyXzI4M0sgPSB7Ci0JTklEX1g5XzYyX2NoYXJhY3RlcmlzdGljX3R3b19maWVsZCwKLQkiMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIgotCSIwQTEiLAotCSIwIiwKLQkiMSIsCi0JIjA1MDMyMTNGNzhDQTQ0ODgzRjFBM0I4MTYyRjE4OEU1NTNDRDI2NUYyM0MxNTY3QTE2ODc2OTEzQjBDMkFDMjQ1ODQ5MiIKLQkiODM2IiwKLQkiMDFDQ0RBMzgwRjFDOUUzMThEOTBGOTVEMDdFNTQyNkZFODdFNDVDMEU4MTg0Njk4RTQ1OTYyMzY0RTM0MTE2MTc3REQyIgotCSIyNTkiLAotCSIwMUZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFOUFFMkVEMDc1NzcyNjVERkY3Rjk0NDUxRTA2MUUxNjMiCi0JIkM2MSIsIDQsCi0JTlVMTCwgMjAsCi0JIk5JU1QvU0VDRyBjdXJ2ZSBvdmVyIGEgMjgzIGJpdCBiaW5hcnkgZmllbGQiCitzdGF0aWMgY29uc3Qgc3RydWN0IHsgRUNfQ1VSVkVfREFUQSBoOyB1bnNpZ25lZCBjaGFyIGRhdGFbMCszNio2XTsgfQorCV9FQ19OSVNUX0NIQVIyXzI4M0sgPSB7CisJeyBOSURfWDlfNjJfY2hhcmFjdGVyaXN0aWNfdHdvX2ZpZWxkLDAsMzYsNCB9LAorCXsJCQkJCQkJLyogbm8gc2VlZCAqLworCSAgMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4QTEsCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAkvKiBhICovCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwJLyogYiAqLworCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwKKwkgIDB4MDUsMHgwMywweDIxLDB4M0YsMHg3OCwweENBLDB4NDQsMHg4OCwweDNGLDB4MUEsCS8qIHggKi8KKwkgIDB4M0IsMHg4MSwweDYyLDB4RjEsMHg4OCwweEU1LDB4NTMsMHhDRCwweDI2LDB4NUYsCisJICAweDIzLDB4QzEsMHg1NiwweDdBLDB4MTYsMHg4NywweDY5LDB4MTMsMHhCMCwweEMyLAorCSAgMHhBQywweDI0LDB4NTgsMHg0OSwweDI4LDB4MzYsCisJICAweDAxLDB4Q0MsMHhEQSwweDM4LDB4MEYsMHgxQywweDlFLDB4MzEsMHg4RCwweDkwLAkvKiB5ICovCisJICAweEY5LDB4NUQsMHgwNywweEU1LDB4NDIsMHg2RiwweEU4LDB4N0UsMHg0NSwweEMwLAorCSAgMHhFOCwweDE4LDB4NDYsMHg5OCwweEU0LDB4NTksMHg2MiwweDM2LDB4NEUsMHgzNCwKKwkgIDB4MTEsMHg2MSwweDc3LDB4REQsMHgyMiwweDU5LAorCSAgMHgwMSwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwJLyogb3JkZXIgKi8KKwkgIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEU5LDB4QUUsCisJICAweDJFLDB4RDAsMHg3NSwweDc3LDB4MjYsMHg1RCwweEZGLDB4N0YsMHg5NCwweDQ1LAorCSAgMHgxRSwweDA2LDB4MUUsMHgxNiwweDNDLDB4NjEgfQogCX07CiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIF9FQ19OSVNUX0NIQVIyXzI4M0JfU0VFRFtdID0gewotCTB4NzcsMHhFMiwweEIwLDB4NzMsMHg3MCwweEVCLDB4MEYsMHg4MywweDJBLDB4NkQsCi0JMHhENSwweEI2LDB4MkQsMHhGQywweDg4LDB4Q0QsMHgwNiwweEJCLDB4ODQsMHhCRX07Ci1zdGF0aWMgY29uc3QgRUNfQ1VSVkVfREFUQSBfRUNfTklTVF9DSEFSMl8yODNCID0gewotCU5JRF9YOV82Ml9jaGFyYWN0ZXJpc3RpY190d29fZmllbGQsCi0JIjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIKLQkiMEExIiwKLQkiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgotCSIwMDEiLAotCSIwMjdCNjgwQUM4Qjg1OTZEQTVBNEFGOEExOUEwMzAzRkNBOTdGRDc2NDUzMDlGQTJBNTgxNDg1QUY2MjYzRTMxM0I3OUEiCi0JIjJGNSIsCi0JIjA1RjkzOTI1OERCN0REOTBFMTkzNEY4QzcwQjBERkVDMkVFRDI1Qjg1NTdFQUM5QzgwRTJFMTk4RjhDREJFQ0Q4NkIxMiIKLQkiMDUzIiwKLQkiMDM2NzY4NTRGRTI0MTQxQ0I5OEZFNkQ0QjIwRDAyQjQ1MTZGRjcwMjM1MEVEREIwODI2Nzc5QzgxM0YwREY0NUJFODExIgotCSIyRjQiLAotCSIwM0ZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRjkwMzk5NjYwRkM5MzhBOTAxNjVCMDQyQTdDRUZBREIiCi0JIjMwNyIsIDIsCi0JX0VDX05JU1RfQ0hBUjJfMjgzQl9TRUVELCAyMCwKLQkiTklTVC9TRUNHIGN1cnZlIG92ZXIgYSAyODMgYml0IGJpbmFyeSBmaWVsZCIKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeyBFQ19DVVJWRV9EQVRBIGg7IHVuc2lnbmVkIGNoYXIgZGF0YVsyMCszNio2XTsgfQorCV9FQ19OSVNUX0NIQVIyXzI4M0IgPSB7CisJeyBOSURfWDlfNjJfY2hhcmFjdGVyaXN0aWNfdHdvX2ZpZWxkLDIwLDM2LDIgfSwKKwl7IDB4NzcsMHhFMiwweEIwLDB4NzMsMHg3MCwweEVCLDB4MEYsMHg4MywweDJBLDB4NkQsCS8qIG5vIHNlZWQgKi8KKwkgIDB4RDUsMHhCNiwweDJELDB4RkMsMHg4OCwweENELDB4MDYsMHhCQiwweDg0LDB4QkUsCisKKwkgIDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCS8qIHAgKi8KKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4QTEsCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAkvKiBhICovCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLAorCSAgMHgwMiwweDdCLDB4NjgsMHgwQSwweEM4LDB4QjgsMHg1OSwweDZELDB4QTUsMHhBNCwJLyogYiAqLworCSAgMHhBRiwweDhBLDB4MTksMHhBMCwweDMwLDB4M0YsMHhDQSwweDk3LDB4RkQsMHg3NiwKKwkgIDB4NDUsMHgzMCwweDlGLDB4QTIsMHhBNSwweDgxLDB4NDgsMHg1QSwweEY2LDB4MjYsCisJICAweDNFLDB4MzEsMHgzQiwweDc5LDB4QTIsMHhGNSwKKwkgIDB4MDUsMHhGOSwweDM5LDB4MjUsMHg4RCwweEI3LDB4REQsMHg5MCwweEUxLDB4OTMsCS8qIHggKi8KKwkgIDB4NEYsMHg4QywweDcwLDB4QjAsMHhERiwweEVDLDB4MkUsMHhFRCwweDI1LDB4QjgsCisJICAweDU1LDB4N0UsMHhBQywweDlDLDB4ODAsMHhFMiwweEUxLDB4OTgsMHhGOCwweENELAorCSAgMHhCRSwweENELDB4ODYsMHhCMSwweDIwLDB4NTMsCisJICAweDAzLDB4NjcsMHg2OCwweDU0LDB4RkUsMHgyNCwweDE0LDB4MUMsMHhCOSwweDhGLAkvKiB5ICovCisJICAweEU2LDB4RDQsMHhCMiwweDBELDB4MDIsMHhCNCwweDUxLDB4NkYsMHhGNywweDAyLAorCSAgMHgzNSwweDBFLDB4REQsMHhCMCwweDgyLDB4NjcsMHg3OSwweEM4LDB4MTMsMHhGMCwKKwkgIDB4REYsMHg0NSwweEJFLDB4ODEsMHgxMiwweEY0LAorCSAgMHgwMywweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwJLyogb3JkZXIgKi8KKwkgIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEVGLDB4OTAsCisJICAweDM5LDB4OTYsMHg2MCwweEZDLDB4OTMsMHg4QSwweDkwLDB4MTYsMHg1QiwweDA0LAorCSAgMHgyQSwweDdDLDB4RUYsMHhBRCwweEIzLDB4MDcgfQogCX07CiAKLXN0YXRpYyBjb25zdCBFQ19DVVJWRV9EQVRBIF9FQ19OSVNUX0NIQVIyXzQwOUsgPSB7Ci0JTklEX1g5XzYyX2NoYXJhY3RlcmlzdGljX3R3b19maWVsZCwKLQkiMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgotCSIwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMSIsCi0JIjAiLAotCSIxIiwKLQkiMDA2MEYwNUY2NThGNDlDMUFEM0FCMTg5MEY3MTg0MjEwRUZEMDk4N0UzMDdDODRDMjdBQ0NGQjhGOUY2N0NDMkM0NjAxIgotCSI4OUVCNUFBQUE2MkVFMjIyRUIxQjM1NTQwQ0ZFOTAyMzc0NiIsCi0JIjAxRTM2OTA1MEI3QzRFNDJBQ0JBMURBQ0JGMDQyOTlDMzQ2MDc4MkY5MThFQTQyN0U2MzI1MTY1RTlFQTEwRTNEQTVGNiIKLQkiQzQyRTlDNTUyMTVBQTlDQTI3QTU4NjNFQzQ4RDhFMDI4NkIiLAotCSIwMDdGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkU1RjgzQjJENEVBMjA0MDAiCi0JIkVDNDU1N0Q1RUQzRTNFN0NBNUI0QjVDODNCOEUwMUU1RkNGIiwgNCwKLQlOVUxMLCAwLAotCSJOSVNUL1NFQ0cgY3VydmUgb3ZlciBhIDQwOSBiaXQgYmluYXJ5IGZpZWxkIgorc3RhdGljIGNvbnN0IHN0cnVjdCB7IEVDX0NVUlZFX0RBVEEgaDsgdW5zaWduZWQgY2hhciBkYXRhWzArNTIqNl07IH0KKwlfRUNfTklTVF9DSEFSMl80MDlLID0geworCXsgTklEX1g5XzYyX2NoYXJhY3RlcmlzdGljX3R3b19maWVsZCwwLDUyLDQgfSwKKwl7CQkJCQkJCS8qIG5vIHNlZWQgKi8KKwkgIDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCS8qIHAgKi8KKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkgIDB4MDAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJICAweDAwLDB4MDEsCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAkvKiBhICovCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCSAgMHgwMCwweDAwLAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwJLyogYiAqLworCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkgIDB4MDAsMHgwMSwKKwkgIDB4MDAsMHg2MCwweEYwLDB4NUYsMHg2NSwweDhGLDB4NDksMHhDMSwweEFELDB4M0EsCS8qIHggKi8KKwkgIDB4QjEsMHg4OSwweDBGLDB4NzEsMHg4NCwweDIxLDB4MEUsMHhGRCwweDA5LDB4ODcsCisJICAweEUzLDB4MDcsMHhDOCwweDRDLDB4MjcsMHhBQywweENGLDB4QjgsMHhGOSwweEY2LAorCSAgMHg3QywweEMyLDB4QzQsMHg2MCwweDE4LDB4OUUsMHhCNSwweEFBLDB4QUEsMHg2MiwKKwkgIDB4RUUsMHgyMiwweDJFLDB4QjEsMHhCMywweDU1LDB4NDAsMHhDRiwweEU5LDB4MDIsCisJICAweDM3LDB4NDYsCisJICAweDAxLDB4RTMsMHg2OSwweDA1LDB4MEIsMHg3QywweDRFLDB4NDIsMHhBQywweEJBLAkvKiB5ICovCisJICAweDFELDB4QUMsMHhCRiwweDA0LDB4MjksMHg5QywweDM0LDB4NjAsMHg3OCwweDJGLAorCSAgMHg5MSwweDhFLDB4QTQsMHgyNywweEU2LDB4MzIsMHg1MSwweDY1LDB4RTksMHhFQSwKKwkgIDB4MTAsMHhFMywweERBLDB4NUYsMHg2QywweDQyLDB4RTksMHhDNSwweDUyLDB4MTUsCisJICAweEFBLDB4OUMsMHhBMiwweDdBLDB4NTgsMHg2MywweEVDLDB4NDgsMHhEOCwweEUwLAorCSAgMHgyOCwweDZCLAorCSAgMHgwMCwweDdGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwJLyogb3JkZXIgKi8KKwkgIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisJICAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZFLDB4NUYsMHg4MywweEIyLAorCSAgMHhENCwweEVBLDB4MjAsMHg0MCwweDBFLDB4QzQsMHg1NSwweDdELDB4NUUsMHhEMywKKwkgIDB4RTMsMHhFNywweENBLDB4NUIsMHg0QiwweDVDLDB4ODMsMHhCOCwweEUwLDB4MUUsCisJICAweDVGLDB4Q0YgfQogCX07CiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIF9FQ19OSVNUX0NIQVIyXzQwOUJfU0VFRFtdID0gewotCTB4NDAsMHg5OSwweEI1LDB4QTQsMHg1NywweEY5LDB4RDYsMHg5RiwweDc5LDB4MjEsCi0JMHgzRCwweDA5LDB4NEMsMHg0QiwweENELDB4NEQsMHg0MiwweDYyLDB4MjEsMHgwQn07Ci1zdGF0aWMgY29uc3QgRUNfQ1VSVkVfREFUQSBfRUNfTklTVF9DSEFSMl80MDlCID0gewotCU5JRF9YOV82Ml9jaGFyYWN0ZXJpc3RpY190d29fZmllbGQsCi0JIjAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIKLQkiMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDEiLAotCSIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCi0JIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIiwKLQkiMDAyMUE1QzJDOEVFOUZFQjVDNEI5QTc1M0I3QjQ3NkI3RkQ2NDIyRUYxRjNERDY3NDc2MUZBOTlENkFDMjdDOEE5QTE5IgotCSI3QjI3MjgyMkY2Q0Q1N0E1NUFBNEY1MEFFMzE3QjEzNTQ1RiIsCi0JIjAxNUQ0ODYwRDA4OEREQjM0OTZCMEM2MDY0NzU2MjYwNDQxQ0RFNEFGMTc3MUQ0REIwMUZGRTVCMzRFNTk3MDNEQzI1NSIKLQkiQTg2OEExMTgwNTE1NjAzQUVBQjYwNzk0RTU0QkI3OTk2QTciLAotCSIwMDYxQjFDRkFCNkJFNUYzMkJCRkE3ODMyNEVEMTA2QTc2MzZCOUM1QTdCRDE5OEQwMTU4QUE0RjU0ODhEMDhGMzg1MTQiCi0JIkYxRkRGNEI0RjQwRDIxODFCMzY4MUMzNjRCQTAyNzNDNzA2IiwKLQkiMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRTJBQUQ2QTYxMkYzMzMwIgotCSI3QkU1RkE0N0MzQzlFMDUyRjgzODE2NENEMzdEOUEyMTE3MyIsIDIsCi0JX0VDX05JU1RfQ0hBUjJfNDA5Ql9TRUVELCAyMCwKLQkiTklTVC9TRUNHIGN1cnZlIG92ZXIgYSA0MDkgYml0IGJpbmFyeSBmaWVsZCIKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeyBFQ19DVVJWRV9EQVRBIGg7IHVuc2lnbmVkIGNoYXIgZGF0YVsyMCs1Mio2XTsgfQorCV9FQ19OSVNUX0NIQVIyXzQwOUIgPSB7CisJeyBOSURfWDlfNjJfY2hhcmFjdGVyaXN0aWNfdHdvX2ZpZWxkLDIwLDUyLDIgfSwKKwl7IDB4NDAsMHg5OSwweEI1LDB4QTQsMHg1NywweEY5LDB4RDYsMHg5RiwweDc5LDB4MjEsCS8qIHNlZWQgKi8KKwkgIDB4M0QsMHgwOSwweDRDLDB4NEIsMHhDRCwweDRELDB4NDIsMHg2MiwweDIxLDB4MEIsCisKKwkgIDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCS8qIHAgKi8KKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkgIDB4MDAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJICAweDAwLDB4MDEsCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAkvKiBhICovCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCSAgMHgwMCwweDAxLAorCSAgMHgwMCwweDIxLDB4QTUsMHhDMiwweEM4LDB4RUUsMHg5RiwweEVCLDB4NUMsMHg0QiwJLyogYiAqLworCSAgMHg5QSwweDc1LDB4M0IsMHg3QiwweDQ3LDB4NkIsMHg3RiwweEQ2LDB4NDIsMHgyRSwKKwkgIDB4RjEsMHhGMywweERELDB4NjcsMHg0NywweDYxLDB4RkEsMHg5OSwweEQ2LDB4QUMsCisJICAweDI3LDB4QzgsMHhBOSwweEExLDB4OTcsMHhCMiwweDcyLDB4ODIsMHgyRiwweDZDLAorCSAgMHhENSwweDdBLDB4NTUsMHhBQSwweDRGLDB4NTAsMHhBRSwweDMxLDB4N0IsMHgxMywKKwkgIDB4NTQsMHg1RiwKKwkgIDB4MDEsMHg1RCwweDQ4LDB4NjAsMHhEMCwweDg4LDB4REQsMHhCMywweDQ5LDB4NkIsCS8qIHggKi8KKwkgIDB4MEMsMHg2MCwweDY0LDB4NzUsMHg2MiwweDYwLDB4NDQsMHgxQywweERFLDB4NEEsCisJICAweEYxLDB4NzcsMHgxRCwweDRELDB4QjAsMHgxRiwweEZFLDB4NUIsMHgzNCwweEU1LAorCSAgMHg5NywweDAzLDB4REMsMHgyNSwweDVBLDB4ODYsMHg4QSwweDExLDB4ODAsMHg1MSwKKwkgIDB4NTYsMHgwMywweEFFLDB4QUIsMHg2MCwweDc5LDB4NEUsMHg1NCwweEJCLDB4NzksCisJICAweDk2LDB4QTcsCisJICAweDAwLDB4NjEsMHhCMSwweENGLDB4QUIsMHg2QiwweEU1LDB4RjMsMHgyQiwweEJGLAkvKiB5ICovCisJICAweEE3LDB4ODMsMHgyNCwweEVELDB4MTAsMHg2QSwweDc2LDB4MzYsMHhCOSwweEM1LAorCSAgMHhBNywweEJELDB4MTksMHg4RCwweDAxLDB4NTgsMHhBQSwweDRGLDB4NTQsMHg4OCwKKwkgIDB4RDAsMHg4RiwweDM4LDB4NTEsMHg0RiwweDFGLDB4REYsMHg0QiwweDRGLDB4NDAsCisJICAweEQyLDB4MTgsMHgxQiwweDM2LDB4ODEsMHhDMywweDY0LDB4QkEsMHgwMiwweDczLAorCSAgMHhDNywweDA2LAorCSAgMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwJLyogb3JkZXIgKi8KKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4RTIsMHhBQSwweEQ2LAorCSAgMHhBNiwweDEyLDB4RjMsMHgzMywweDA3LDB4QkUsMHg1RiwweEE0LDB4N0MsMHgzQywKKwkgIDB4OUUsMHgwNSwweDJGLDB4ODMsMHg4MSwweDY0LDB4Q0QsMHgzNywweEQ5LDB4QTIsCisJICAweDExLDB4NzMgfQogCX07CiAKLXN0YXRpYyBjb25zdCBFQ19DVVJWRV9EQVRBIF9FQ19OSVNUX0NIQVIyXzU3MUsgPSB7Ci0JTklEX1g5XzYyX2NoYXJhY3RlcmlzdGljX3R3b19maWVsZCwKLQkiODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgotCSIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCi0JIjAwNDI1IiwKLQkiMCIsCi0JIjEiLAotCSIwMjZFQjdBODU5OTIzRkJDODIxODk2MzFGODEwM0ZFNEFDOUNBMjk3MDAxMkQ1RDQ2MDI0ODA0ODAxODQxQ0E0NDM3MDkiCi0JIjU4NDkzQjIwNUU2NDdEQTMwNERCNENFQjA4Q0JCRDFCQTM5NDk0Nzc2RkI5ODhCNDcxNzREQ0E4OEM3RTI5NDUyODNBMCIKLQkiMUM4OTcyIiwKLQkiMDM0OURDODA3RjRGQkYzNzRGNEFFQURFM0JDQTk1MzE0REQ1OENFQzlGMzA3QTU0RkZDNjFFRkMwMDZEOEEyQzlENDk3IgotCSI5QzBBQzQ0QUVBNzRGQkVCQkI5Rjc3MkFFRENCNjIwQjAxQTdCQTdBRjFCMzIwNDMwQzg1OTE5ODRGNjAxQ0Q0QzE0M0UiCi0JIkYxQzdBMyIsCi0JIjAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIKLQkiMDAwMTMxODUwRTFGMTlBNjNFNEIzOTFBOERCOTE3RjQxMzhCNjMwRDg0QkU1RDYzOTM4MUU5MURFQjQ1Q0ZFNzc4RjYzIgotCSI3QzEwMDEiLCA0LAotCU5VTEwsIDAsCi0JIk5JU1QvU0VDRyBjdXJ2ZSBvdmVyIGEgNTcxIGJpdCBiaW5hcnkgZmllbGQiCitzdGF0aWMgY29uc3Qgc3RydWN0IHsgRUNfQ1VSVkVfREFUQSBoOyB1bnNpZ25lZCBjaGFyIGRhdGFbMCs3Mio2XTsgfQorCV9FQ19OSVNUX0NIQVIyXzU3MUsgPSB7CisJeyBOSURfWDlfNjJfY2hhcmFjdGVyaXN0aWNfdHdvX2ZpZWxkLDAsNzIsNCB9LAorCXsJCQkJCQkJLyogbm8gc2VlZCAqLworCSAgMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwJLyogcCAqLworCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCSAgMHgwNCwweDI1LAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwJLyogYSAqLworCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCSAgMHgwMCwweDAwLAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwJLyogYiAqLworCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCSAgMHgwMCwweDAxLAorCSAgMHgwMiwweDZFLDB4QjcsMHhBOCwweDU5LDB4OTIsMHgzRiwweEJDLDB4ODIsMHgxOCwJLyogeCAqLworCSAgMHg5NiwweDMxLDB4RjgsMHgxMCwweDNGLDB4RTQsMHhBQywweDlDLDB4QTIsMHg5NywKKwkgIDB4MDAsMHgxMiwweEQ1LDB4RDQsMHg2MCwweDI0LDB4ODAsMHg0OCwweDAxLDB4ODQsCisJICAweDFDLDB4QTQsMHg0MywweDcwLDB4OTUsMHg4NCwweDkzLDB4QjIsMHgwNSwweEU2LAorCSAgMHg0NywweERBLDB4MzAsMHg0RCwweEI0LDB4Q0UsMHhCMCwweDhDLDB4QkIsMHhEMSwKKwkgIDB4QkEsMHgzOSwweDQ5LDB4NDcsMHg3NiwweEZCLDB4OTgsMHg4QiwweDQ3LDB4MTcsCisJICAweDRELDB4Q0EsMHg4OCwweEM3LDB4RTIsMHg5NCwweDUyLDB4ODMsMHhBMCwweDFDLAorCSAgMHg4OSwweDcyLAorCSAgMHgwMywweDQ5LDB4REMsMHg4MCwweDdGLDB4NEYsMHhCRiwweDM3LDB4NEYsMHg0QSwJLyogeSAqLworCSAgMHhFQSwweERFLDB4M0IsMHhDQSwweDk1LDB4MzEsMHg0RCwweEQ1LDB4OEMsMHhFQywKKwkgIDB4OUYsMHgzMCwweDdBLDB4NTQsMHhGRiwweEM2LDB4MUUsMHhGQywweDAwLDB4NkQsCisJICAweDhBLDB4MkMsMHg5RCwweDQ5LDB4NzksMHhDMCwweEFDLDB4NDQsMHhBRSwweEE3LAorCSAgMHg0RiwweEJFLDB4QkIsMHhCOSwweEY3LDB4NzIsMHhBRSwweERDLDB4QjYsMHgyMCwKKwkgIDB4QjAsMHgxQSwweDdCLDB4QTcsMHhBRiwweDFCLDB4MzIsMHgwNCwweDMwLDB4QzgsCisJICAweDU5LDB4MTksMHg4NCwweEY2LDB4MDEsMHhDRCwweDRDLDB4MTQsMHgzRSwweEYxLAorCSAgMHhDNywweEEzLAorCSAgMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwJLyogb3JkZXIgKi8KKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMywweDE4LDB4NTAsMHhFMSwKKwkgIDB4RjEsMHg5QSwweDYzLDB4RTQsMHhCMywweDkxLDB4QTgsMHhEQiwweDkxLDB4N0YsCisJICAweDQxLDB4MzgsMHhCNiwweDMwLDB4RDgsMHg0QiwweEU1LDB4RDYsMHgzOSwweDM4LAorCSAgMHgxRSwweDkxLDB4REUsMHhCNCwweDVDLDB4RkUsMHg3NywweDhGLDB4NjMsMHg3QywKKwkgIDB4MTAsMHgwMSB9CiAJfTsKIAotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgX0VDX05JU1RfQ0hBUjJfNTcxQl9TRUVEW10gPSB7Ci0JMHgyQSwweEEwLDB4NTgsMHhGNywweDNBLDB4MEUsMHgzMywweEFCLDB4NDgsMHg2QiwKLQkweDBGLDB4NjEsMHgwNCwweDEwLDB4QzUsMHgzQSwweDdGLDB4MTMsMHgyMywweDEwfTsKLXN0YXRpYyBjb25zdCBFQ19DVVJWRV9EQVRBIF9FQ19OSVNUX0NIQVIyXzU3MUIgPSB7Ci0JTklEX1g5XzYyX2NoYXJhY3RlcmlzdGljX3R3b19maWVsZCwKLQkiODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgotCSIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCi0JIjAwNDI1IiwKLQkiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgotCSIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCi0JIjAwMDAwMSIsCi0JIjAyRjQwRTdFMjIyMUYyOTVERTI5NzExN0I3RjNENjJGNUM2QTk3RkZDQjhDRUZGMUNENkJBOENFNEE5QTE4QUQ4NEZGQSIKLQkiQkJEOEVGQTU5MzMyQkU3QUQ2NzU2QTY2RTI5NEFGRDE4NUE3OEZGMTJBQTUyMEU0REU3MzlCQUNBMEM3RkZFRkY3RjI5IgotCSI1NTcyN0EiLAotCSIwMzAzMDAxRDM0Qjg1NjI5NkMxNkMwRDQwRDNDRDc3NTBBOTNEMUQyOTU1RkE4MEFBNUY0MEZDOERCN0IyQUJEQkRFNTMiCi0JIjk1MEY0QzBEMjkzQ0RENzExQTM1QjY3RkIxNDk5QUU2MDAzODYxNEYxMzk0QUJGQTNCNEM4NTBEOTI3RTFFNzc2OUM4RSIKLQkiRUMyRDE5IiwKLQkiMDM3QkYyNzM0MkRBNjM5QjZEQ0NGRkZFQjczRDY5RDc4QzZDMjdBNjAwOUNCQkNBMTk4MEY4NTMzOTIxRThBNjg0NDIzIgotCSJFNDNCQUIwOEE1NzYyOTFBRjhGNDYxQkIyQThCMzUzMUQyRjA0ODVDMTlCMTZFMkYxNTE2RTIzREQzQzFBNDgyN0FGMUIiCi0JIjhBQzE1QiIsCi0JIjAzRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRiIKLQkiRkZGRTY2MUNFMThGRjU1OTg3MzA4MDU5QjE4NjgyMzg1MUVDN0REOUNBMTE2MURFOTNENTE3NEQ2NkU4MzgyRTlCQjJGIgotCSJFODRFNDciLCAyLAotCV9FQ19OSVNUX0NIQVIyXzU3MUJfU0VFRCwgMjAsCi0JIk5JU1QvU0VDRyBjdXJ2ZSBvdmVyIGEgNTcxIGJpdCBiaW5hcnkgZmllbGQiCitzdGF0aWMgY29uc3Qgc3RydWN0IHsgRUNfQ1VSVkVfREFUQSBoOyB1bnNpZ25lZCBjaGFyIGRhdGFbMjArNzIqNl07IH0KKwlfRUNfTklTVF9DSEFSMl81NzFCID0geworCXsgTklEX1g5XzYyX2NoYXJhY3RlcmlzdGljX3R3b19maWVsZCwyMCw3MiwyIH0sCisJeyAweDJBLDB4QTAsMHg1OCwweEY3LDB4M0EsMHgwRSwweDMzLDB4QUIsMHg0OCwweDZCLAkvKiBzZWVkICovCisJICAweDBGLDB4NjEsMHgwNCwweDEwLDB4QzUsMHgzQSwweDdGLDB4MTMsMHgyMywweDEwLAorCisJICAweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAkvKiBwICovCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJICAweDA0LDB4MjUsCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAkvKiBhICovCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJICAweDAwLDB4MDEsCisJICAweDAyLDB4RjQsMHgwRSwweDdFLDB4MjIsMHgyMSwweEYyLDB4OTUsMHhERSwweDI5LAkvKiBiICovCisJICAweDcxLDB4MTcsMHhCNywweEYzLDB4RDYsMHgyRiwweDVDLDB4NkEsMHg5NywweEZGLAorCSAgMHhDQiwweDhDLDB4RUYsMHhGMSwweENELDB4NkIsMHhBOCwweENFLDB4NEEsMHg5QSwKKwkgIDB4MTgsMHhBRCwweDg0LDB4RkYsMHhBQiwweEJELDB4OEUsMHhGQSwweDU5LDB4MzMsCisJICAweDJCLDB4RTcsMHhBRCwweDY3LDB4NTYsMHhBNiwweDZFLDB4MjksMHg0QSwweEZELAorCSAgMHgxOCwweDVBLDB4NzgsMHhGRiwweDEyLDB4QUEsMHg1MiwweDBFLDB4NEQsMHhFNywKKwkgIDB4MzksMHhCQSwweENBLDB4MEMsMHg3RiwweEZFLDB4RkYsMHg3RiwweDI5LDB4NTUsCisJICAweDcyLDB4N0EsCisJICAweDAzLDB4MDMsMHgwMCwweDFELDB4MzQsMHhCOCwweDU2LDB4MjksMHg2QywweDE2LAkvKiB4ICovCisJICAweEMwLDB4RDQsMHgwRCwweDNDLDB4RDcsMHg3NSwweDBBLDB4OTMsMHhEMSwweEQyLAorCSAgMHg5NSwweDVGLDB4QTgsMHgwQSwweEE1LDB4RjQsMHgwRiwweEM4LDB4REIsMHg3QiwKKwkgIDB4MkEsMHhCRCwweEJELDB4RTUsMHgzOSwweDUwLDB4RjQsMHhDMCwweEQyLDB4OTMsCisJICAweENELDB4RDcsMHgxMSwweEEzLDB4NUIsMHg2NywweEZCLDB4MTQsMHg5OSwweEFFLAorCSAgMHg2MCwweDAzLDB4ODYsMHgxNCwweEYxLDB4MzksMHg0QSwweEJGLDB4QTMsMHhCNCwKKwkgIDB4QzgsMHg1MCwweEQ5LDB4MjcsMHhFMSwweEU3LDB4NzYsMHg5QywweDhFLDB4RUMsCisJICAweDJELDB4MTksCisJICAweDAzLDB4N0IsMHhGMiwweDczLDB4NDIsMHhEQSwweDYzLDB4OUIsMHg2RCwweENDLAkvKiB5ICovCisJICAweEZGLDB4RkUsMHhCNywweDNELDB4NjksMHhENywweDhDLDB4NkMsMHgyNywweEE2LAorCSAgMHgwMCwweDlDLDB4QkIsMHhDQSwweDE5LDB4ODAsMHhGOCwweDUzLDB4MzksMHgyMSwKKwkgIDB4RTgsMHhBNiwweDg0LDB4NDIsMHgzRSwweDQzLDB4QkEsMHhCMCwweDhBLDB4NTcsCisJICAweDYyLDB4OTEsMHhBRiwweDhGLDB4NDYsMHgxQiwweEIyLDB4QTgsMHhCMywweDUzLAorCSAgMHgxRCwweDJGLDB4MDQsMHg4NSwweEMxLDB4OUIsMHgxNiwweEUyLDB4RjEsMHg1MSwKKwkgIDB4NkUsMHgyMywweERELDB4M0MsMHgxQSwweDQ4LDB4MjcsMHhBRiwweDFCLDB4OEEsCisJICAweEMxLDB4NUIsCisJICAweDAzLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAkvKiBvcmRlciAqLworCSAgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwKKwkgIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisJICAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEU2LDB4NjEsMHhDRSwweDE4LAorCSAgMHhGRiwweDU1LDB4OTgsMHg3MywweDA4LDB4MDUsMHg5QiwweDE4LDB4NjgsMHgyMywKKwkgIDB4ODUsMHgxRSwweEM3LDB4REQsMHg5QywweEExLDB4MTYsMHgxRCwweEU5LDB4M0QsCisJICAweDUxLDB4NzQsMHhENiwweDZFLDB4ODMsMHg4MiwweEU5LDB4QkIsMHgyRiwweEU4LAorCSAgMHg0RSwweDQ3IH0KIAl9OwogCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBfRUNfWDlfNjJfQ0hBUjJfMTYzVjFfU0VFRFtdID0gewotCTB4RDIsMHhDMCwweEZCLDB4MTUsMHg3NiwweDA4LDB4NjAsMHhERSwweEYxLDB4RUUsCi0JMHhGNCwweEQ2LDB4OTYsMHhFNiwweDc2LDB4ODcsMHg1NiwweDE1LDB4MTcsMHg1NH07Ci1zdGF0aWMgY29uc3QgRUNfQ1VSVkVfREFUQSBfRUNfWDlfNjJfQ0hBUjJfMTYzVjEgPSB7Ci0JTklEX1g5XzYyX2NoYXJhY3RlcmlzdGljX3R3b19maWVsZCwKLQkiMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTA3IiwKLQkiMDcyNTQ2QjU0MzUyMzRBNDIyRTA3ODk2NzVGNDMyQzg5NDM1REU1MjQyIiwKLQkiMDBDOTUxN0QwNkQ1MjQwRDNDRkYzOEM3NEIyMEI2Q0Q0RDZGOURENEQ5IiwKLQkiMDdBRjY5OTg5NTQ2MTAzRDc5MzI5RkNDM0Q3NDg4MEYzM0JCRTgwM0NCIiwKLQkiMDFFQzIzMjExQjU5NjZBREVBMUQzRjg3RjdFQTU4NDhBRUYwQjdDQTlGIiwKLQkiMDQwMDAwMDAwMDAwMDAwMDAwMDAwMUU2MEZDODgyMUNDNzREQUVBRkMxIiwgMiwKLQlfRUNfWDlfNjJfQ0hBUjJfMTYzVjFfU0VFRCwgMjAsCi0JIlg5LjYyIGN1cnZlIG92ZXIgYSAxNjMgYml0IGJpbmFyeSBmaWVsZCIKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeyBFQ19DVVJWRV9EQVRBIGg7IHVuc2lnbmVkIGNoYXIgZGF0YVsyMCsyMSo2XTsgfQorCV9FQ19YOV82Ml9DSEFSMl8xNjNWMSA9IHsKKwl7IE5JRF9YOV82Ml9jaGFyYWN0ZXJpc3RpY190d29fZmllbGQsMjAsMjEsMiB9LAorCXsgMHhEMiwweEMwLDB4RkIsMHgxNSwweDc2LDB4MDgsMHg2MCwweERFLDB4RjEsMHhFRSwKKwkgIDB4RjQsMHhENiwweDk2LDB4RTYsMHg3NiwweDg3LDB4NTYsMHgxNSwweDE3LDB4NTQsCS8qIHNlZWQgKi8KKworCSAgMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwJLyogcCAqLworCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwKKwkgIDB4MDcsCisJICAweDA3LDB4MjUsMHg0NiwweEI1LDB4NDMsMHg1MiwweDM0LDB4QTQsMHgyMiwweEUwLAkvKiBhICovCisJICAweDc4LDB4OTYsMHg3NSwweEY0LDB4MzIsMHhDOCwweDk0LDB4MzUsMHhERSwweDUyLAorCSAgMHg0MiwKKwkgIDB4MDAsMHhDOSwweDUxLDB4N0QsMHgwNiwweEQ1LDB4MjQsMHgwRCwweDNDLDB4RkYsCS8qIGIgKi8KKwkgIDB4MzgsMHhDNywweDRCLDB4MjAsMHhCNiwweENELDB4NEQsMHg2RiwweDlELDB4RDQsCisJICAweEQ5LAorCSAgMHgwNywweEFGLDB4NjksMHg5OCwweDk1LDB4NDYsMHgxMCwweDNELDB4NzksMHgzMiwJLyogeCAqLworCSAgMHg5RiwweENDLDB4M0QsMHg3NCwweDg4LDB4MEYsMHgzMywweEJCLDB4RTgsMHgwMywKKwkgIDB4Q0IsCisJICAweDAxLDB4RUMsMHgyMywweDIxLDB4MUIsMHg1OSwweDY2LDB4QUQsMHhFQSwweDFELAkvKiB5ICovCisJICAweDNGLDB4ODcsMHhGNywweEVBLDB4NTgsMHg0OCwweEFFLDB4RjAsMHhCNywweENBLAorCSAgMHg5RiwKKwkgIDB4MDQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCS8qIG9yZGVyICovCisJICAweDAxLDB4RTYsMHgwRiwweEM4LDB4ODIsMHgxQywweEM3LDB4NEQsMHhBRSwweEFGLAorCSAgMHhDMSB9CiAJfTsKIAotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgX0VDX1g5XzYyX0NIQVIyXzE2M1YyX1NFRURbXSA9IHsKLQkweDUzLDB4ODEsMHg0QywweDA1LDB4MEQsMHg0NCwweEQ2LDB4OTYsMHhFNiwweDc2LAotCTB4ODcsMHg1NiwweDE1LDB4MTcsMHg1OCwweDBDLDB4QTQsMHhFMiwweDlGLDB4RkR9Owotc3RhdGljIGNvbnN0IEVDX0NVUlZFX0RBVEEgX0VDX1g5XzYyX0NIQVIyXzE2M1YyID0gewotCU5JRF9YOV82Ml9jaGFyYWN0ZXJpc3RpY190d29fZmllbGQsCi0gCSIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDciLAotCSIwMTA4QjM5RTc3QzRCMTA4QkVEOTgxRUQwRTg5MEUxMTdDNTExQ0YwNzIiLAotCSIwNjY3QUNFQjM4QUY0RTQ4OEM0MDc0MzNGRkFFNEYxQzgxMTYzOERGMjAiLAotCSIwMDI0MjY2RTRFQjUxMDZEMEE5NjREOTJDNDg2MEUyNjcxREI5QjZDQzUiLAotCSIwNzlGNjg0RERGNjY4NEM1Q0QyNThCMzg5MDAyMUIyMzg2REZEMTlGQzUiLAotCSIwM0ZGRkZGRkZGRkZGRkZGRkZGRkZERjY0REUxMTUxQURCQjc4RjEwQTciLCAyLAotCV9FQ19YOV82Ml9DSEFSMl8xNjNWMl9TRUVELCAyMCwKLQkiWDkuNjIgY3VydmUgb3ZlciBhIDE2MyBiaXQgYmluYXJ5IGZpZWxkIgorc3RhdGljIGNvbnN0IHN0cnVjdCB7IEVDX0NVUlZFX0RBVEEgaDsgdW5zaWduZWQgY2hhciBkYXRhWzIwKzIxKjZdOyB9CisJX0VDX1g5XzYyX0NIQVIyXzE2M1YyID0geworCXsgTklEX1g5XzYyX2NoYXJhY3RlcmlzdGljX3R3b19maWVsZCwyMCwyMSwyIH0sCisJeyAweDUzLDB4ODEsMHg0QywweDA1LDB4MEQsMHg0NCwweEQ2LDB4OTYsMHhFNiwweDc2LAkvKiBzZWVkICovCisJICAweDg3LDB4NTYsMHgxNSwweDE3LDB4NTgsMHgwQywweEE0LDB4RTIsMHg5RiwweEZELAorCisgCSAgMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwJLyogcCAqLworCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwKKwkgIDB4MDcsCisJICAweDAxLDB4MDgsMHhCMywweDlFLDB4NzcsMHhDNCwweEIxLDB4MDgsMHhCRSwweEQ5LAkvKiBhICovCisJICAweDgxLDB4RUQsMHgwRSwweDg5LDB4MEUsMHgxMSwweDdDLDB4NTEsMHgxQywweEYwLAorCSAgMHg3MiwKKwkgIDB4MDYsMHg2NywweEFDLDB4RUIsMHgzOCwweEFGLDB4NEUsMHg0OCwweDhDLDB4NDAsCS8qIGIgKi8KKwkgIDB4NzQsMHgzMywweEZGLDB4QUUsMHg0RiwweDFDLDB4ODEsMHgxNiwweDM4LDB4REYsCisJICAweDIwLAorCSAgMHgwMCwweDI0LDB4MjYsMHg2RSwweDRFLDB4QjUsMHgxMCwweDZELDB4MEEsMHg5NiwJLyogeCAqLworCSAgMHg0RCwweDkyLDB4QzQsMHg4NiwweDBFLDB4MjYsMHg3MSwweERCLDB4OUIsMHg2QywKKwkgIDB4QzUsCisJICAweDA3LDB4OUYsMHg2OCwweDRELDB4REYsMHg2NiwweDg0LDB4QzUsMHhDRCwweDI1LAkvKiB5ICovCisJICAweDhCLDB4MzgsMHg5MCwweDAyLDB4MUIsMHgyMywweDg2LDB4REYsMHhEMSwweDlGLAorCSAgMHhDNSwKKwkgIDB4MDMsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCS8qIG9yZGVyICovCisJICAweEZELDB4RjYsMHg0RCwweEUxLDB4MTUsMHgxQSwweERCLDB4QjcsMHg4RiwweDEwLAorCSAgMHhBNyB9CiAJfTsKIAotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgX0VDX1g5XzYyX0NIQVIyXzE2M1YzX1NFRURbXSA9IHsKLQkweDUwLDB4Q0IsMHhGMSwweEQ5LDB4NUMsMHhBOSwweDRELDB4NjksMHg2RSwweDY3LAotCTB4NjgsMHg3NSwweDYxLDB4NTEsMHg3NSwweEYxLDB4NkEsMHgzNiwweEEzLDB4Qjh9Owotc3RhdGljIGNvbnN0IEVDX0NVUlZFX0RBVEEgX0VDX1g5XzYyX0NIQVIyXzE2M1YzID0gewotCU5JRF9YOV82Ml9jaGFyYWN0ZXJpc3RpY190d29fZmllbGQsCi0JIjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwNyIsCi0JIjA3QTUyNkM2M0QzRTI1QTI1NkEwMDc2OTlGNTQ0N0UzMkFFNDU2QjUwRSIsCi0JIjAzRjcwNjE3OThFQjk5RTIzOEZENkYxQkY5NUI0OEZFRUI0ODU0MjUyQiIsCi0JIjAyRjlGODdCN0M1NzREMEJERUNGOEEyMkU2NTI0Nzc1Rjk4Q0RFQkRDQiIsCi0JIjA1QjkzNTU5MEMxNTVFMTdFQTQ4RUIzRkYzNzE4Qjg5M0RGNTlBMDVEMCIsCi0JIjAzRkZGRkZGRkZGRkZGRkZGRkZGRkUxQUVFMTQwRjExMEFGRjk2MTMwOSIsIDIsCi0JX0VDX1g5XzYyX0NIQVIyXzE2M1YzX1NFRUQsIDIwLAotCSJYOS42MiBjdXJ2ZSBvdmVyIGEgMTYzIGJpdCBiaW5hcnkgZmllbGQiCitzdGF0aWMgY29uc3Qgc3RydWN0IHsgRUNfQ1VSVkVfREFUQSBoOyB1bnNpZ25lZCBjaGFyIGRhdGFbMjArMjEqNl07IH0KKwlfRUNfWDlfNjJfQ0hBUjJfMTYzVjMgPSB7CisJeyBOSURfWDlfNjJfY2hhcmFjdGVyaXN0aWNfdHdvX2ZpZWxkLDIwLDIxLDIgfSwKKwl7IDB4NTAsMHhDQiwweEYxLDB4RDksMHg1QywweEE5LDB4NEQsMHg2OSwweDZFLDB4NjcsCS8qIHNlZWQgKi8KKwkgIDB4NjgsMHg3NSwweDYxLDB4NTEsMHg3NSwweEYxLDB4NkEsMHgzNiwweEEzLDB4QjgsCisKKwkgIDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCS8qIHAgKi8KKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsCisJICAweDA3LAorCSAgMHgwNywweEE1LDB4MjYsMHhDNiwweDNELDB4M0UsMHgyNSwweEEyLDB4NTYsMHhBMCwJLyogYSAqLworCSAgMHgwNywweDY5LDB4OUYsMHg1NCwweDQ3LDB4RTMsMHgyQSwweEU0LDB4NTYsMHhCNSwKKwkgIDB4MEUsCisJICAweDAzLDB4RjcsMHgwNiwweDE3LDB4OTgsMHhFQiwweDk5LDB4RTIsMHgzOCwweEZELAkvKiBiICovCisJICAweDZGLDB4MUIsMHhGOSwweDVCLDB4NDgsMHhGRSwweEVCLDB4NDgsMHg1NCwweDI1LAorCSAgMHgyQiwKKwkgIDB4MDIsMHhGOSwweEY4LDB4N0IsMHg3QywweDU3LDB4NEQsMHgwQiwweERFLDB4Q0YsCS8qIHggKi8KKwkgIDB4OEEsMHgyMiwweEU2LDB4NTIsMHg0NywweDc1LDB4RjksMHg4QywweERFLDB4QkQsCisJICAweENCLAorCSAgMHgwNSwweEI5LDB4MzUsMHg1OSwweDBDLDB4MTUsMHg1RSwweDE3LDB4RUEsMHg0OCwJLyogeSAqLworCSAgMHhFQiwweDNGLDB4RjMsMHg3MSwweDhCLDB4ODksMHgzRCwweEY1LDB4OUEsMHgwNSwKKwkgIDB4RDAsCisJICAweDAzLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAkvKiBvcmRlciAqLworCSAgMHhGRSwweDFBLDB4RUUsMHgxNCwweDBGLDB4MTEsMHgwQSwweEZGLDB4OTYsMHgxMywKKwkgIDB4MDkgfQogCX07CiAKLXN0YXRpYyBjb25zdCBFQ19DVVJWRV9EQVRBIF9FQ19YOV82Ml9DSEFSMl8xNzZWMSA9IHsKLQlOSURfWDlfNjJfY2hhcmFjdGVyaXN0aWNfdHdvX2ZpZWxkLAotCSIwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDA3IiwKLQkiRTRFNkRCMjk5NTA2NUM0MDdEOUQzOUI4RDA5NjdCOTY3MDRCQThFOUM5MEIiLAotCSI1RERBNDcwQUJFNjQxNERFOEVDMTMzQUUyOEU5QkJEN0ZDRUMwQUUwRkZGMiIsCi0JIjhEMTZDMjg2Njc5OEI2MDBGOUYwOEJCNEE4RTg2MEYzMjk4Q0UwNEE1Nzk4IiwKLQkiNkZBNDUzOUMyREFERERENkJBQjUxNjdENjFCNDM2RTFEOTJCQjE2QTU2MkMiLAotCSIwMDAxMDA5MjUzNzM5N0VDQTRGNjE0NTc5OUQ2MkIwQTE5Q0UwNkZFMjZBRCIsIDB4RkY2RSwKLQlOVUxMLCAwLAotCSJYOS42MiBjdXJ2ZSBvdmVyIGEgMTc2IGJpdCBiaW5hcnkgZmllbGQiCitzdGF0aWMgY29uc3Qgc3RydWN0IHsgRUNfQ1VSVkVfREFUQSBoOyB1bnNpZ25lZCBjaGFyIGRhdGFbMCsyMyo2XTsgfQorCV9FQ19YOV82Ml9DSEFSMl8xNzZWMSA9IHsKKwl7IE5JRF9YOV82Ml9jaGFyYWN0ZXJpc3RpY190d29fZmllbGQsMCwyMywweEZGNkUgfSwKKwl7CQkJCQkJCS8qIG5vIHNlZWQgKi8KKwkgIDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCS8qIHAgKi8KKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MDAsCisJICAweDAwLDB4MDAsMHgwNywKKwkgIDB4MDAsMHhFNCwweEU2LDB4REIsMHgyOSwweDk1LDB4MDYsMHg1QywweDQwLDB4N0QsCS8qIGEgKi8KKwkgIDB4OUQsMHgzOSwweEI4LDB4RDAsMHg5NiwweDdCLDB4OTYsMHg3MCwweDRCLDB4QTgsCisJICAweEU5LDB4QzksMHgwQiwKKwkgIDB4MDAsMHg1RCwweERBLDB4NDcsMHgwQSwweEJFLDB4NjQsMHgxNCwweERFLDB4OEUsCS8qIGIgKi8KKwkgIDB4QzEsMHgzMywweEFFLDB4MjgsMHhFOSwweEJCLDB4RDcsMHhGQywweEVDLDB4MEEsCisJICAweEUwLDB4RkYsMHhGMiwKKwkgIDB4MDAsMHg4RCwweDE2LDB4QzIsMHg4NiwweDY3LDB4OTgsMHhCNiwweDAwLDB4RjksCS8qIHggKi8KKwkgIDB4RjAsMHg4QiwweEI0LDB4QTgsMHhFOCwweDYwLDB4RjMsMHgyOSwweDhDLDB4RTAsCisJICAweDRBLDB4NTcsMHg5OCwKKwkgIDB4MDAsMHg2RiwweEE0LDB4NTMsMHg5QywweDJELDB4QUQsMHhERCwweEQ2LDB4QkEsCS8qIHkgKi8KKwkgIDB4QjUsMHgxNiwweDdELDB4NjEsMHhCNCwweDM2LDB4RTEsMHhEOSwweDJCLDB4QjEsCisJICAweDZBLDB4NTYsMHgyQywKKwkgIDB4MDAsMHgwMCwweDAxLDB4MDAsMHg5MiwweDUzLDB4NzMsMHg5NywweEVDLDB4QTQsCS8qIG9yZGVyICovCisJICAweEY2LDB4MTQsMHg1NywweDk5LDB4RDYsMHgyQiwweDBBLDB4MTksMHhDRSwweDA2LAorCSAgMHhGRSwweDI2LDB4QUQgfQogCX07CiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIF9FQ19YOV82Ml9DSEFSMl8xOTFWMV9TRUVEW10gPSB7Ci0JMHg0RSwweDEzLDB4Q0EsMHg1NCwweDI3LDB4NDQsMHhENiwweDk2LDB4RTYsMHg3NiwKLQkweDg3LDB4NTYsMHgxNSwweDE3LDB4NTUsMHgyRiwweDI3LDB4OUEsMHg4QywweDg0fTsKLXN0YXRpYyBjb25zdCBFQ19DVVJWRV9EQVRBIF9FQ19YOV82Ml9DSEFSMl8xOTFWMSA9IHsKLQlOSURfWDlfNjJfY2hhcmFjdGVyaXN0aWNfdHdvX2ZpZWxkLAotCSI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDEiLAotCSIyODY2NTM3QjY3Njc1MjYzNkE2OEY1NjU1NEUxMjY0MDI3NkI2NDlFRjc1MjYyNjciLAotCSIyRTQ1RUY1NzFGMDA3ODZGNjdCMDA4MUI5NDk1QTNEOTU0NjJGNURFMEFBMTg1RUMiLAotCSIzNkIzREFGOEEyMzIwNkY5QzRGMjk5RDdCMjFBOUMzNjkxMzdGMkM4NEFFMUFBMEQiLAotCSI3NjVCRTczNDMzQjNGOTVFMzMyOTMyRTcwRUEyNDVDQTI0MThFQTBFRjk4MDE4RkIiLAotCSI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEEyMEU5MEMzOTA2N0M4OTNCQkI5QTUiLCAyLAotCV9FQ19YOV82Ml9DSEFSMl8xOTFWMV9TRUVELCAyMCwKLQkiWDkuNjIgY3VydmUgb3ZlciBhIDE5MSBiaXQgYmluYXJ5IGZpZWxkIgorc3RhdGljIGNvbnN0IHN0cnVjdCB7IEVDX0NVUlZFX0RBVEEgaDsgdW5zaWduZWQgY2hhciBkYXRhWzIwKzI0KjZdOyB9CisJX0VDX1g5XzYyX0NIQVIyXzE5MVYxID0geworCXsgTklEX1g5XzYyX2NoYXJhY3RlcmlzdGljX3R3b19maWVsZCwyMCwyNCwyIH0sCisJeyAweDRFLDB4MTMsMHhDQSwweDU0LDB4MjcsMHg0NCwweEQ2LDB4OTYsMHhFNiwweDc2LAkvKiBzZWVkICovCisJICAweDg3LDB4NTYsMHgxNSwweDE3LDB4NTUsMHgyRiwweDI3LDB4OUEsMHg4QywweDg0LAorCisJICAweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAkvKiBwICovCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCSAgMHgwMCwweDAwLDB4MDIsMHgwMSwKKwkgIDB4MjgsMHg2NiwweDUzLDB4N0IsMHg2NywweDY3LDB4NTIsMHg2MywweDZBLDB4NjgsCS8qIGEgKi8KKwkgIDB4RjUsMHg2NSwweDU0LDB4RTEsMHgyNiwweDQwLDB4MjcsMHg2QiwweDY0LDB4OUUsCisJICAweEY3LDB4NTIsMHg2MiwweDY3LAorCSAgMHgyRSwweDQ1LDB4RUYsMHg1NywweDFGLDB4MDAsMHg3OCwweDZGLDB4NjcsMHhCMCwJLyogYiAqLworCSAgMHgwOCwweDFCLDB4OTQsMHg5NSwweEEzLDB4RDksMHg1NCwweDYyLDB4RjUsMHhERSwKKwkgIDB4MEEsMHhBMSwweDg1LDB4RUMsCisJICAweDM2LDB4QjMsMHhEQSwweEY4LDB4QTIsMHgzMiwweDA2LDB4RjksMHhDNCwweEYyLAkvKiB4ICovCisJICAweDk5LDB4RDcsMHhCMiwweDFBLDB4OUMsMHgzNiwweDkxLDB4MzcsMHhGMiwweEM4LAorCSAgMHg0QSwweEUxLDB4QUEsMHgwRCwKKwkgIDB4NzYsMHg1QiwweEU3LDB4MzQsMHgzMywweEIzLDB4RjksMHg1RSwweDMzLDB4MjksCS8qIHkgKi8KKwkgIDB4MzIsMHhFNywweDBFLDB4QTIsMHg0NSwweENBLDB4MjQsMHgxOCwweEVBLDB4MEUsCisJICAweEY5LDB4ODAsMHgxOCwweEZCLAorCSAgMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwJLyogb3JkZXIgKi8KKwkgIDB4MDAsMHgwMCwweDA0LDB4QTIsMHgwRSwweDkwLDB4QzMsMHg5MCwweDY3LDB4QzgsCisJICAweDkzLDB4QkIsMHhCOSwweEE1IH0KIAl9OwogCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBfRUNfWDlfNjJfQ0hBUjJfMTkxVjJfU0VFRFtdID0gewotCTB4MDgsMHg3MSwweEVGLDB4MkYsMHhFRiwweDI0LDB4RDYsMHg5NiwweEU2LDB4NzYsCi0JMHg4NywweDU2LDB4MTUsMHgxNywweDU4LDB4QkUsMHhFMCwweEQ5LDB4NUMsMHgxNX07Ci1zdGF0aWMgY29uc3QgRUNfQ1VSVkVfREFUQSBfRUNfWDlfNjJfQ0hBUjJfMTkxVjIgPSB7Ci0JTklEX1g5XzYyX2NoYXJhY3RlcmlzdGljX3R3b19maWVsZCwKLQkiODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAxIiwKLQkiNDAxMDI4Nzc0RDc3NzdDN0I3NjY2RDEzNjZFQTQzMjA3MTI3NEY4OUZGMDFFNzE4IiwKLQkiMDYyMDA0OEQyOEJDQkQwM0I2MjQ5Qzk5MTgyQjdDOENEMTk3MDBDMzYyQzQ2QTAxIiwKLQkiMzgwOUIyQjdDQzFCMjhDQzVBODc5MjZBQUQ4M0ZEMjg3ODlFODFFMkM5RTNCRjEwIiwKLQkiMTc0MzQzODY2MjZEMTRGM0RCRjAxNzYwRDkyMTNBM0UxQ0YzN0FFQzQzN0Q2NjhBIiwKLQkiMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTA1MDhDQjg5RjY1MjgyNEUwNkI4MTczIiwgNCwKLQlfRUNfWDlfNjJfQ0hBUjJfMTkxVjJfU0VFRCwgMjAsCi0JIlg5LjYyIGN1cnZlIG92ZXIgYSAxOTEgYml0IGJpbmFyeSBmaWVsZCIKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeyBFQ19DVVJWRV9EQVRBIGg7IHVuc2lnbmVkIGNoYXIgZGF0YVsyMCsyNCo2XTsgfQorCV9FQ19YOV82Ml9DSEFSMl8xOTFWMiA9IHsKKwl7IE5JRF9YOV82Ml9jaGFyYWN0ZXJpc3RpY190d29fZmllbGQsMjAsMjQsNCB9LAorCXsgMHgwOCwweDcxLDB4RUYsMHgyRiwweEVGLDB4MjQsMHhENiwweDk2LDB4RTYsMHg3NiwJLyogc2VlZCAqLworCSAgMHg4NywweDU2LDB4MTUsMHgxNywweDU4LDB4QkUsMHhFMCwweEQ5LDB4NUMsMHgxNSwKKworCSAgMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwJLyogcCAqLworCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkgIDB4MDAsMHgwMCwweDAyLDB4MDEsCisJICAweDQwLDB4MTAsMHgyOCwweDc3LDB4NEQsMHg3NywweDc3LDB4QzcsMHhCNywweDY2LAkvKiBhICovCisJICAweDZELDB4MTMsMHg2NiwweEVBLDB4NDMsMHgyMCwweDcxLDB4MjcsMHg0RiwweDg5LAorCSAgMHhGRiwweDAxLDB4RTcsMHgxOCwKKwkgIDB4MDYsMHgyMCwweDA0LDB4OEQsMHgyOCwweEJDLDB4QkQsMHgwMywweEI2LDB4MjQsCS8qIGIgKi8KKwkgIDB4OUMsMHg5OSwweDE4LDB4MkIsMHg3QywweDhDLDB4RDEsMHg5NywweDAwLDB4QzMsCisJICAweDYyLDB4QzQsMHg2QSwweDAxLAorCSAgMHgzOCwweDA5LDB4QjIsMHhCNywweENDLDB4MUIsMHgyOCwweENDLDB4NUEsMHg4NywJLyogeCAqLworCSAgMHg5MiwweDZBLDB4QUQsMHg4MywweEZELDB4MjgsMHg3OCwweDlFLDB4ODEsMHhFMiwKKwkgIDB4QzksMHhFMywweEJGLDB4MTAsCisJICAweDE3LDB4NDMsMHg0MywweDg2LDB4NjIsMHg2RCwweDE0LDB4RjMsMHhEQiwweEYwLAkvKiB5ICovCisJICAweDE3LDB4NjAsMHhEOSwweDIxLDB4M0EsMHgzRSwweDFDLDB4RjMsMHg3QSwweEVDLAorCSAgMHg0MywweDdELDB4NjYsMHg4QSwKKwkgIDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCS8qIG9yZGVyICovCisJICAweDAwLDB4MDAsMHg1MCwweDUwLDB4OEMsMHhCOCwweDlGLDB4NjUsMHgyOCwweDI0LAorCSAgMHhFMCwweDZCLDB4ODEsMHg3MyB9CiAJfTsKIAotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgX0VDX1g5XzYyX0NIQVIyXzE5MVYzX1NFRURbXSA9IHsKLQkweEUwLDB4NTMsMHg1MSwweDJELDB4QzYsMHg4NCwweEQ2LDB4OTYsMHhFNiwweDc2LAotCTB4ODcsMHg1NiwweDE1LDB4MTcsMHg1MCwweDY3LDB4QUUsMHg3OCwweDZELDB4MUZ9Owotc3RhdGljIGNvbnN0IEVDX0NVUlZFX0RBVEEgX0VDX1g5XzYyX0NIQVIyXzE5MVYzID0gewotCU5JRF9YOV82Ml9jaGFyYWN0ZXJpc3RpY190d29fZmllbGQsCi0JIjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMSIsCi0JIjZDMDEwNzQ3NTYwOTkxMjIyMjEwNTY5MTFDNzdENzdFNzdBNzc3RTdFN0U3N0ZDQiIsCi0JIjcxRkUxQUY5MjZDRjg0Nzk4OUVGRUY4REI0NTlGNjYzOTREOTBGMzJBRDNGMTVFOCIsCi0JIjM3NUQ0Q0UyNEZERTQzNDQ4OURFODc0NkU3MTc4NjAxNTAwOUU2NkUzOEE5MjZERCIsCi0JIjU0NUEzOTE3NjE5NjU3NUQ5ODU5OTkzNjZFNkFEMzRDRTBBNzdDRDcxMjdCMDZCRSIsCi0JIjE1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTYxMEMwQjE5NjgxMkJGQjYyODhBM0VBMyIsIDYsCi0JX0VDX1g5XzYyX0NIQVIyXzE5MVYzX1NFRUQsIDIwLAotCSJYOS42MiBjdXJ2ZSBvdmVyIGEgMTkxIGJpdCBiaW5hcnkgZmllbGQiCitzdGF0aWMgY29uc3Qgc3RydWN0IHsgRUNfQ1VSVkVfREFUQSBoOyB1bnNpZ25lZCBjaGFyIGRhdGFbMjArMjQqNl07IH0KKwlfRUNfWDlfNjJfQ0hBUjJfMTkxVjMgPSB7CisJeyBOSURfWDlfNjJfY2hhcmFjdGVyaXN0aWNfdHdvX2ZpZWxkLDIwLDI0LDYgfSwKKwl7IDB4RTAsMHg1MywweDUxLDB4MkQsMHhDNiwweDg0LDB4RDYsMHg5NiwweEU2LDB4NzYsCS8qIHNlZWQgKi8KKwkgIDB4ODcsMHg1NiwweDE1LDB4MTcsMHg1MCwweDY3LDB4QUUsMHg3OCwweDZELDB4MUYsCisKKwkgIDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCS8qIHAgKi8KKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJICAweDAwLDB4MDAsMHgwMiwweDAxLAorCSAgMHg2QywweDAxLDB4MDcsMHg0NywweDU2LDB4MDksMHg5MSwweDIyLDB4MjIsMHgxMCwJLyogYSAqLworCSAgMHg1NiwweDkxLDB4MUMsMHg3NywweEQ3LDB4N0UsMHg3NywweEE3LDB4NzcsMHhFNywKKwkgIDB4RTcsMHhFNywweDdGLDB4Q0IsCisJICAweDcxLDB4RkUsMHgxQSwweEY5LDB4MjYsMHhDRiwweDg0LDB4NzksMHg4OSwweEVGLAkvKiBiICovCisJICAweEVGLDB4OEQsMHhCNCwweDU5LDB4RjYsMHg2MywweDk0LDB4RDksMHgwRiwweDMyLAorCSAgMHhBRCwweDNGLDB4MTUsMHhFOCwKKwkgIDB4MzcsMHg1RCwweDRDLDB4RTIsMHg0RiwweERFLDB4NDMsMHg0NCwweDg5LDB4REUsCS8qIHggKi8KKwkgIDB4ODcsMHg0NiwweEU3LDB4MTcsMHg4NiwweDAxLDB4NTAsMHgwOSwweEU2LDB4NkUsCisJICAweDM4LDB4QTksMHgyNiwweERELAorCSAgMHg1NCwweDVBLDB4MzksMHgxNywweDYxLDB4OTYsMHg1NywweDVELDB4OTgsMHg1OSwJLyogeSAqLworCSAgMHg5OSwweDM2LDB4NkUsMHg2QSwweEQzLDB4NEMsMHhFMCwweEE3LDB4N0MsMHhENywKKwkgIDB4MTIsMHg3QiwweDA2LDB4QkUsCisJICAweDE1LDB4NTUsMHg1NSwweDU1LDB4NTUsMHg1NSwweDU1LDB4NTUsMHg1NSwweDU1LAkvKiBvcmRlciAqLworCSAgMHg1NSwweDU1LDB4NjEsMHgwQywweDBCLDB4MTksMHg2OCwweDEyLDB4QkYsMHhCNiwKKwkgIDB4MjgsMHg4QSwweDNFLDB4QTMgfQogCX07CiAKLXN0YXRpYyBjb25zdCBFQ19DVVJWRV9EQVRBIF9FQ19YOV82Ml9DSEFSMl8yMDhXMSA9IHsKLQlOSURfWDlfNjJfY2hhcmFjdGVyaXN0aWNfdHdvX2ZpZWxkLAotCSIwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDciLAotCSIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwKLQkiQzg2MTlFRDQ1QTYyRTYyMTJFMTE2MDM0OUUyQkZBODQ0NDM5RkFGQzJBM0ZEMTYzOEY5RSIsCi0JIjg5RkRGQkU0QUJFMTkzREY5NTU5RUNGMDdBQzBDRTc4NTU0RTI3ODRFQjhDMUVEMUE1N0EiLAotCSIwRjU1QjUxQTA2RTc4RTlBQzM4QTAzNUZGNTIwRDhCMDE3ODFCRUIxQTZCQjA4NjE3REUzIiwKLQkiMDAwMTAxQkFGOTVDOTcyM0M1N0I2QzIxREEyRUZGMkQ1RUQ1ODhCREQ1NzE3RTIxMkY5RCIsIDB4RkU0OCwKLQlOVUxMLCAwLAotCSJYOS42MiBjdXJ2ZSBvdmVyIGEgMjA4IGJpdCBiaW5hcnkgZmllbGQiCitzdGF0aWMgY29uc3Qgc3RydWN0IHsgRUNfQ1VSVkVfREFUQSBoOyB1bnNpZ25lZCBjaGFyIGRhdGFbMCsyNyo2XTsgfQorCV9FQ19YOV82Ml9DSEFSMl8yMDhXMSA9IHsKKwl7IE5JRF9YOV82Ml9jaGFyYWN0ZXJpc3RpY190d29fZmllbGQsMCwyNywweEZFNDggfSwKKwl7CQkJCQkJCS8qIG5vIHNlZWQgKi8KKwkgIDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCS8qIHAgKi8KKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA3LAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwJLyogYSAqLworCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJICAweDAwLDB4QzgsMHg2MSwweDlFLDB4RDQsMHg1QSwweDYyLDB4RTYsMHgyMSwweDJFLAkvKiBiICovCisJICAweDExLDB4NjAsMHgzNCwweDlFLDB4MkIsMHhGQSwweDg0LDB4NDQsMHgzOSwweEZBLAorCSAgMHhGQywweDJBLDB4M0YsMHhEMSwweDYzLDB4OEYsMHg5RSwKKwkgIDB4MDAsMHg4OSwweEZELDB4RkIsMHhFNCwweEFCLDB4RTEsMHg5MywweERGLDB4OTUsCS8qIHggKi8KKwkgIDB4NTksMHhFQywweEYwLDB4N0EsMHhDMCwweENFLDB4NzgsMHg1NSwweDRFLDB4MjcsCisJICAweDg0LDB4RUIsMHg4QywweDFFLDB4RDEsMHhBNSwweDdBLAorCSAgMHgwMCwweDBGLDB4NTUsMHhCNSwweDFBLDB4MDYsMHhFNywweDhFLDB4OUEsMHhDMywJLyogeSAqLworCSAgMHg4QSwweDAzLDB4NUYsMHhGNSwweDIwLDB4RDgsMHhCMCwweDE3LDB4ODEsMHhCRSwKKwkgIDB4QjEsMHhBNiwweEJCLDB4MDgsMHg2MSwweDdELDB4RTMsCisJICAweDAwLDB4MDAsMHgwMSwweDAxLDB4QkEsMHhGOSwweDVDLDB4OTcsMHgyMywweEM1LAkvKiBvcmRlciAqLworCSAgMHg3QiwweDZDLDB4MjEsMHhEQSwweDJFLDB4RkYsMHgyRCwweDVFLDB4RDUsMHg4OCwKKwkgIDB4QkQsMHhENSwweDcxLDB4N0UsMHgyMSwweDJGLDB4OUQgfQogCX07CiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIF9FQ19YOV82Ml9DSEFSMl8yMzlWMV9TRUVEW10gPSB7Ci0JMHhEMywweDRCLDB4OUEsMHg0RCwweDY5LDB4NkUsMHg2NywweDY4LDB4NzUsMHg2MSwKLQkweDUxLDB4NzUsMHhDQSwweDcxLDB4QjksMHgyMCwweEJGLDB4RUYsMHhCMCwweDVEfTsKLXN0YXRpYyBjb25zdCBFQ19DVVJWRV9EQVRBIF9FQ19YOV82Ml9DSEFSMl8yMzlWMSA9IHsKLQlOSURfWDlfNjJfY2hhcmFjdGVyaXN0aWNfdHdvX2ZpZWxkLAotCSI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDEiLAotCSIzMjAxMDg1NzA3N0M1NDMxMTIzQTQ2QjgwODkwNjc1NkY1NDM0MjNFOEQyNzg3NzU3ODEyNTc3OEFDNzYiLAotCSI3OTA0MDhGMkVFREFGMzkyQjAxMkVERUZCMzM5MkYzMEY0MzI3QzBDQTNGMzFGQzM4M0M0MjJBQThDMTYiLAotCSI1NzkyNzA5OEZBOTMyRTdDMEE5NkQzRkQ1QjcwNkVGN0U1RjVDMTU2RTE2QjdFN0M4NjAzODU1MkU5MUQiLAotCSI2MUQ4RUU1MDc3QzMzRkVDRjZGMUExNkIyNjhERTQ2OUMzQzc3NDRFQTlBOTcxNjQ5RkM3QTk2MTYzMDUiLAotCSIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjRENDJGRkUxNDkyQTQ5OTNGMUNBRDY2NkU0NDciLCA0LAotCV9FQ19YOV82Ml9DSEFSMl8yMzlWMV9TRUVELCAyMCwKLQkiWDkuNjIgY3VydmUgb3ZlciBhIDIzOSBiaXQgYmluYXJ5IGZpZWxkIgorc3RhdGljIGNvbnN0IHN0cnVjdCB7IEVDX0NVUlZFX0RBVEEgaDsgdW5zaWduZWQgY2hhciBkYXRhWzIwKzMwKjZdOyB9CisJX0VDX1g5XzYyX0NIQVIyXzIzOVYxID0geworCXsgTklEX1g5XzYyX2NoYXJhY3RlcmlzdGljX3R3b19maWVsZCwyMCwzMCw0IH0sCisJeyAweEQzLDB4NEIsMHg5QSwweDRELDB4NjksMHg2RSwweDY3LDB4NjgsMHg3NSwweDYxLAkvKiBzZWVkICovCisJICAweDUxLDB4NzUsMHhDQSwweDcxLDB4QjksMHgyMCwweEJGLDB4RUYsMHhCMCwweDVELAorCisJICAweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAkvKiBwICovCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMSwKKworCSAgMHgzMiwweDAxLDB4MDgsMHg1NywweDA3LDB4N0MsMHg1NCwweDMxLDB4MTIsMHgzQSwJLyogYSAqLworCSAgMHg0NiwweEI4LDB4MDgsMHg5MCwweDY3LDB4NTYsMHhGNSwweDQzLDB4NDIsMHgzRSwKKwkgIDB4OEQsMHgyNywweDg3LDB4NzUsMHg3OCwweDEyLDB4NTcsMHg3OCwweEFDLDB4NzYsCisKKwkgIDB4NzksMHgwNCwweDA4LDB4RjIsMHhFRSwweERBLDB4RjMsMHg5MiwweEIwLDB4MTIsCS8qIGIgKi8KKwkgIDB4RUQsMHhFRiwweEIzLDB4MzksMHgyRiwweDMwLDB4RjQsMHgzMiwweDdDLDB4MEMsCisJICAweEEzLDB4RjMsMHgxRiwweEMzLDB4ODMsMHhDNCwweDIyLDB4QUEsMHg4QywweDE2LAorCisJICAweDU3LDB4OTIsMHg3MCwweDk4LDB4RkEsMHg5MywweDJFLDB4N0MsMHgwQSwweDk2LAkvKiB4ICovCisJICAweEQzLDB4RkQsMHg1QiwweDcwLDB4NkUsMHhGNywweEU1LDB4RjUsMHhDMSwweDU2LAorCSAgMHhFMSwweDZCLDB4N0UsMHg3QywweDg2LDB4MDMsMHg4NSwweDUyLDB4RTksMHgxRCwKKworCSAgMHg2MSwweEQ4LDB4RUUsMHg1MCwweDc3LDB4QzMsMHgzRiwweEVDLDB4RjYsMHhGMSwJLyogeSAqLworCSAgMHhBMSwweDZCLDB4MjYsMHg4RCwweEU0LDB4NjksMHhDMywweEM3LDB4NzQsMHg0RSwKKwkgIDB4QTksMHhBOSwweDcxLDB4NjQsMHg5RiwweEM3LDB4QTksMHg2MSwweDYzLDB4MDUsCisKKwkgIDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCS8qIG9yZGVyICovCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwRiwweDRELDB4NDIsMHhGRiwweEUxLAorCSAgMHg0OSwweDJBLDB4NDksMHg5MywweEYxLDB4Q0EsMHhENiwweDY2LDB4RTQsMHg0NyB9CiAJfTsKIAotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgX0VDX1g5XzYyX0NIQVIyXzIzOVYyX1NFRURbXSA9IHsKLQkweDJBLDB4QTYsMHg5OCwweDJGLDB4REYsMHhBNCwweEQ2LDB4OTYsMHhFNiwweDc2LAotCTB4ODcsMHg1NiwweDE1LDB4MTcsMHg1RCwweDI2LDB4NjcsMHgyNywweDI3LDB4N0R9Owotc3RhdGljIGNvbnN0IEVDX0NVUlZFX0RBVEEgX0VDX1g5XzYyX0NIQVIyXzIzOVYyID0gewotCU5JRF9YOV82Ml9jaGFyYWN0ZXJpc3RpY190d29fZmllbGQsCi0JIjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMSIsCi0JIjQyMzAwMTc3NTdBNzY3RkFFNDIzOTg1NjlCNzQ2MzI1RDQ1MzEzQUYwNzY2MjY2NDc5Qjc1NjU0RTY1RiIsCi0JIjUwMzdFQTY1NDE5NkNGRjBDRDgyQjJDMTRBMkZDRjJFM0ZGODc3NTI4NUI1NDU3MjJGMDNFQUNEQjc0QiIsCi0JIjI4RjlEMDRFOTAwMDY5QzhEQzQ3QTA4NTM0RkU3NkQyQjkwMEI3RDdFRjMxRjU3MDlGMjAwQzRDQTIwNSIsCi0JIjU2NjczMzRDNDVBRkYzQjVBMDNCQUQ5REQ3NUUyQzcxQTk5MzYyNTY3RDU0NTNGN0ZBNkUyMjdFQzgzMyIsCi0JIjE1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTNDNkYyODg1MjU5QzMxRTNGQ0RGMTU0NjI0NTIyRCIsIDYsCi0JX0VDX1g5XzYyX0NIQVIyXzIzOVYyX1NFRUQsIDIwLAotCSJYOS42MiBjdXJ2ZSBvdmVyIGEgMjM5IGJpdCBiaW5hcnkgZmllbGQiCitzdGF0aWMgY29uc3Qgc3RydWN0IHsgRUNfQ1VSVkVfREFUQSBoOyB1bnNpZ25lZCBjaGFyIGRhdGFbMjArMzAqNl07IH0KKwlfRUNfWDlfNjJfQ0hBUjJfMjM5VjIgPSB7CisJeyBOSURfWDlfNjJfY2hhcmFjdGVyaXN0aWNfdHdvX2ZpZWxkLDIwLDMwLDYgfSwKKwl7IDB4MkEsMHhBNiwweDk4LDB4MkYsMHhERiwweEE0LDB4RDYsMHg5NiwweEU2LDB4NzYsCS8qIHNlZWQgKi8KKwkgIDB4ODcsMHg1NiwweDE1LDB4MTcsMHg1RCwweDI2LDB4NjcsMHgyNywweDI3LDB4N0QsCisKKwkgIDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCS8qIHAgKi8KKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAxLAorCisJICAweDQyLDB4MzAsMHgwMSwweDc3LDB4NTcsMHhBNywweDY3LDB4RkEsMHhFNCwweDIzLAkvKiBhICovCisJICAweDk4LDB4NTYsMHg5QiwweDc0LDB4NjMsMHgyNSwweEQ0LDB4NTMsMHgxMywweEFGLAorCSAgMHgwNywweDY2LDB4MjYsMHg2NCwweDc5LDB4QjcsMHg1NiwweDU0LDB4RTYsMHg1RiwKKworCSAgMHg1MCwweDM3LDB4RUEsMHg2NSwweDQxLDB4OTYsMHhDRiwweEYwLDB4Q0QsMHg4MiwJLyogYiAqLworCSAgMHhCMiwweEMxLDB4NEEsMHgyRiwweENGLDB4MkUsMHgzRiwweEY4LDB4NzcsMHg1MiwKKwkgIDB4ODUsMHhCNSwweDQ1LDB4NzIsMHgyRiwweDAzLDB4RUEsMHhDRCwweEI3LDB4NEIsCisKKwkgIDB4MjgsMHhGOSwweEQwLDB4NEUsMHg5MCwweDAwLDB4NjksMHhDOCwweERDLDB4NDcsCS8qIHggKi8KKwkgIDB4QTAsMHg4NSwweDM0LDB4RkUsMHg3NiwweEQyLDB4QjksMHgwMCwweEI3LDB4RDcsCisJICAweEVGLDB4MzEsMHhGNSwweDcwLDB4OUYsMHgyMCwweDBDLDB4NEMsMHhBMiwweDA1LAorCisJICAweDU2LDB4NjcsMHgzMywweDRDLDB4NDUsMHhBRiwweEYzLDB4QjUsMHhBMCwweDNCLAkvKiB5ICovCisJICAweEFELDB4OUQsMHhENywweDVFLDB4MkMsMHg3MSwweEE5LDB4OTMsMHg2MiwweDU2LAorCSAgMHg3RCwweDU0LDB4NTMsMHhGNywweEZBLDB4NkUsMHgyMiwweDdFLDB4QzgsMHgzMywKKworCSAgMHgxNSwweDU1LDB4NTUsMHg1NSwweDU1LDB4NTUsMHg1NSwweDU1LDB4NTUsMHg1NSwJLyogb3JkZXIgKi8KKwkgIDB4NTUsMHg1NSwweDU1LDB4NTUsMHg1NSwweDNDLDB4NkYsMHgyOCwweDg1LDB4MjUsCisJICAweDlDLDB4MzEsMHhFMywweEZDLDB4REYsMHgxNSwweDQ2LDB4MjQsMHg1MiwweDJEIH0KIAl9OwogCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBfRUNfWDlfNjJfQ0hBUjJfMjM5VjNfU0VFRFtdID0gewotCTB4OUUsMHgwNywweDZGLDB4NEQsMHg2OSwweDZFLDB4NjcsMHg2OCwweDc1LDB4NjEsCi0JMHg1MSwweDc1LDB4RTEsMHgxRSwweDlGLDB4REQsMHg3NywweEY5LDB4MjAsMHg0MX07Ci1zdGF0aWMgY29uc3QgRUNfQ1VSVkVfREFUQSBfRUNfWDlfNjJfQ0hBUjJfMjM5VjMgPSB7Ci0JTklEX1g5XzYyX2NoYXJhY3RlcmlzdGljX3R3b19maWVsZCwKLQkiODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAxIiwKLQkiMDEyMzg3NzQ2NjZBNjc3NjZENjY3NkY3NzhFNjc2QjY2OTk5MTc2NjY2RTY4NzY2NkQ4NzY2QzY2QTlGIiwKLQkiNkE5NDE5NzdCQTlGNkE0MzUxOTlBQ0ZDNTEwNjdFRDU4N0Y1MTlDNUVDQjU0MUI4RTQ0MTExREUxRDQwIiwKLQkiNzBGNkU5RDA0RDI4OUM0RTg5OTEzQ0UzNTMwQkZERTkwMzk3N0Q0MkIxNDZENTM5QkYxQkRFNEU5QzkyIiwKLQkiMkU1QTBFQUY2RTVFMTMwNUI5MDA0RENFNUMwRUQ3RkU1OUEzNTYwOEYzMzgzN0M4MTZEODBCNzlGNDYxIiwKLQkiMENDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQUM0OTEyRDJEOURGOTAzRUY5ODg4QjhBMEU0Q0ZGIiwgMHhBLAotCV9FQ19YOV82Ml9DSEFSMl8yMzlWM19TRUVELCAyMCwKLQkiWDkuNjIgY3VydmUgb3ZlciBhIDIzOSBiaXQgYmluYXJ5IGZpZWxkIgorc3RhdGljIGNvbnN0IHN0cnVjdCB7IEVDX0NVUlZFX0RBVEEgaDsgdW5zaWduZWQgY2hhciBkYXRhWzIwKzMwKjZdOyB9CisJX0VDX1g5XzYyX0NIQVIyXzIzOVYzID0geworCXsgTklEX1g5XzYyX2NoYXJhY3RlcmlzdGljX3R3b19maWVsZCwyMCwzMCwweEEgfSwKKwl7IDB4OUUsMHgwNywweDZGLDB4NEQsMHg2OSwweDZFLDB4NjcsMHg2OCwweDc1LDB4NjEsCS8qIHNlZWQgKi8KKwkgIDB4NTEsMHg3NSwweEUxLDB4MUUsMHg5RiwweERELDB4NzcsMHhGOSwweDIwLDB4NDEsCisKKwkgIDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCS8qIHAgKi8KKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAxLAorCisJICAweDAxLDB4MjMsMHg4NywweDc0LDB4NjYsMHg2QSwweDY3LDB4NzYsMHg2RCwweDY2LAkvKiBhICovCisJICAweDc2LDB4RjcsMHg3OCwweEU2LDB4NzYsMHhCNiwweDY5LDB4OTksMHgxNywweDY2LAorCSAgMHg2NiwweEU2LDB4ODcsMHg2NiwweDZELDB4ODcsMHg2NiwweEM2LDB4NkEsMHg5RiwKKworCSAgMHg2QSwweDk0LDB4MTksMHg3NywweEJBLDB4OUYsMHg2QSwweDQzLDB4NTEsMHg5OSwJLyogYiAqLworCSAgMHhBQywweEZDLDB4NTEsMHgwNiwweDdFLDB4RDUsMHg4NywweEY1LDB4MTksMHhDNSwKKwkgIDB4RUMsMHhCNSwweDQxLDB4QjgsMHhFNCwweDQxLDB4MTEsMHhERSwweDFELDB4NDAsCisKKwkgIDB4NzAsMHhGNiwweEU5LDB4RDAsMHg0RCwweDI4LDB4OUMsMHg0RSwweDg5LDB4OTEsCS8qIHggKi8KKwkgIDB4M0MsMHhFMywweDUzLDB4MEIsMHhGRCwweEU5LDB4MDMsMHg5NywweDdELDB4NDIsCisJICAweEIxLDB4NDYsMHhENSwweDM5LDB4QkYsMHgxQiwweERFLDB4NEUsMHg5QywweDkyLAorCisJICAweDJFLDB4NUEsMHgwRSwweEFGLDB4NkUsMHg1RSwweDEzLDB4MDUsMHhCOSwweDAwLAkvKiB5ICovCisJICAweDRELDB4Q0UsMHg1QywweDBFLDB4RDcsMHhGRSwweDU5LDB4QTMsMHg1NiwweDA4LAorCSAgMHhGMywweDM4LDB4MzcsMHhDOCwweDE2LDB4RDgsMHgwQiwweDc5LDB4RjQsMHg2MSwKKworCSAgMHgwQywweENDLDB4Q0MsMHhDQywweENDLDB4Q0MsMHhDQywweENDLDB4Q0MsMHhDQywJLyogb3JkZXIgKi8KKwkgIDB4Q0MsMHhDQywweENDLDB4Q0MsMHhDQywweEFDLDB4NDksMHgxMiwweEQyLDB4RDksCisJICAweERGLDB4OTAsMHgzRSwweEY5LDB4ODgsMHg4QiwweDhBLDB4MEUsMHg0QywweEZGIH0KIAl9OwogCi1zdGF0aWMgY29uc3QgRUNfQ1VSVkVfREFUQSBfRUNfWDlfNjJfQ0hBUjJfMjcyVzEgPSB7Ci0JTklEX1g5XzYyX2NoYXJhY3RlcmlzdGljX3R3b19maWVsZCwKLQkiMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwIgotCSJCIiwKLQkiOTFBMDkxRjAzQjVGQkE0QUIyQ0NGNDlDNEVERDIyMEZCMDI4NzEyRDQyQkU3NTJCMkM0MDA5NERCQUNEQjU4NkZCMjAiLAotCSI3MTY3RUZDOTJCQjJFM0NFN0M4QUFBRkYzNEUxMkE5QzU1NzAwM0Q3QzczQTZGQUYwMDNGOTlGNkNDODQ4MkU1NDBGNyIsCi0JIjYxMDhCQUJCMkNFRUJDRjc4NzA1OEEwNTZDQkUwQ0ZFNjIyRDc3MjNBMjg5RTA4QTA3QUUxM0VGMEQxMEQxNzFERDhEIiwKLQkiMTBDNzY5NTcxNjg1MUVFRjZCQTdGNjg3MkU2MTQyRkJEMjQxQjgzMEZGNUVGQ0FDRUNDQUIwNUUwMjAwNURERTlEMjMiLAotCSIwMDAxMDBGQUY1MTM1NEUwRTM5RTQ4OTJERjZFMzE5QzcyQzgxNjE2MDNGQTQ1QUE3Qjk5OEExNjdCOEYxRTYyOTUyMSIsCi0JMHhGRjA2LAotCU5VTEwsIDAsCi0JIlg5LjYyIGN1cnZlIG92ZXIgYSAyNzIgYml0IGJpbmFyeSBmaWVsZCIKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeyBFQ19DVVJWRV9EQVRBIGg7IHVuc2lnbmVkIGNoYXIgZGF0YVswKzM1KjZdOyB9CisJX0VDX1g5XzYyX0NIQVIyXzI3MlcxID0geworCXsgTklEX1g5XzYyX2NoYXJhY3RlcmlzdGljX3R3b19maWVsZCwwLDM1LDB4RkYwNiB9LAorCXsJCQkJCQkJLyogbm8gc2VlZCAqLworCSAgMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwJLyogcCAqLworCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MEIsCisJICAweDAwLDB4OTEsMHhBMCwweDkxLDB4RjAsMHgzQiwweDVGLDB4QkEsMHg0QSwweEIyLAkvKiBhICovCisJICAweENDLDB4RjQsMHg5QywweDRFLDB4REQsMHgyMiwweDBGLDB4QjAsMHgyOCwweDcxLAorCSAgMHgyRCwweDQyLDB4QkUsMHg3NSwweDJCLDB4MkMsMHg0MCwweDA5LDB4NEQsMHhCQSwKKwkgIDB4Q0QsMHhCNSwweDg2LDB4RkIsMHgyMCwKKwkgIDB4MDAsMHg3MSwweDY3LDB4RUYsMHhDOSwweDJCLDB4QjIsMHhFMywweENFLDB4N0MsCS8qIGIgKi8KKwkgIDB4OEEsMHhBQSwweEZGLDB4MzQsMHhFMSwweDJBLDB4OUMsMHg1NSwweDcwLDB4MDMsCisJICAweEQ3LDB4QzcsMHgzQSwweDZGLDB4QUYsMHgwMCwweDNGLDB4OTksMHhGNiwweENDLAorCSAgMHg4NCwweDgyLDB4RTUsMHg0MCwweEY3LAorCSAgMHgwMCwweDYxLDB4MDgsMHhCQSwweEJCLDB4MkMsMHhFRSwweEJDLDB4RjcsMHg4NywJLyogeCAqLworCSAgMHgwNSwweDhBLDB4MDUsMHg2QywweEJFLDB4MEMsMHhGRSwweDYyLDB4MkQsMHg3NywKKwkgIDB4MjMsMHhBMiwweDg5LDB4RTAsMHg4QSwweDA3LDB4QUUsMHgxMywweEVGLDB4MEQsCisJICAweDEwLDB4RDEsMHg3MSwweERELDB4OEQsCisJICAweDAwLDB4MTAsMHhDNywweDY5LDB4NTcsMHgxNiwweDg1LDB4MUUsMHhFRiwweDZCLAkvKiB5ICovCisJICAweEE3LDB4RjYsMHg4NywweDJFLDB4NjEsMHg0MiwweEZCLDB4RDIsMHg0MSwweEI4LAorCSAgMHgzMCwweEZGLDB4NUUsMHhGQywweEFDLDB4RUMsMHhDQSwweEIwLDB4NUUsMHgwMiwKKwkgIDB4MDAsMHg1RCwweERFLDB4OUQsMHgyMywKKwkgIDB4MDAsMHgwMCwweDAxLDB4MDAsMHhGQSwweEY1LDB4MTMsMHg1NCwweEUwLDB4RTMsCS8qIG9yZGVyICovCisJICAweDlFLDB4NDgsMHg5MiwweERGLDB4NkUsMHgzMSwweDlDLDB4NzIsMHhDOCwweDE2LAorCSAgMHgxNiwweDAzLDB4RkEsMHg0NSwweEFBLDB4N0IsMHg5OSwweDhBLDB4MTYsMHg3QiwKKwkgIDB4OEYsMHgxRSwweDYyLDB4OTUsMHgyMSB9CiAJfTsKIAotc3RhdGljIGNvbnN0IEVDX0NVUlZFX0RBVEEgX0VDX1g5XzYyX0NIQVIyXzMwNFcxID0gewotCU5JRF9YOV82Ml9jaGFyYWN0ZXJpc3RpY190d29fZmllbGQsCi0JIjAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIKLQkiMDAwMDAwODA3IiwKLQkiRkQwRDY5MzE0OUExMThGNjUxRTZEQ0U2ODAyMDg1Mzc3RTVGODgyRDFCNTEwQjQ0MTYwMDc0QzEyODgwNzgzNjVBMDM5IgotCSI2QzhFNjgxIiwKLQkiQkREQjk3RTU1NUE1MEE5MDhFNDNCMDFDNzk4RUE1REFBNjc4OEYxRUEyNzk0RUZDRjU3MTY2QjhDMTQwMzk2MDFFNTU4IgotCSIyNzM0MEJFIiwKLQkiMTk3QjA3ODQ1RTlCRTJEOTZBREIwRjVGM0M3RjJDRkZCRDdBM0VCOEI2RkVDMzVDN0ZENjdGMjZEREY2Mjg1QTY0NEY3IgotCSI0MEEyNjE0IiwKLQkiRTE5RkJFQjc2RTBEQTE3MTUxN0VDRjQwMUI1MDI4OUJGMDE0MTAzMjg4NTI3QTlCNDE2QTEwNUU4MDI2MEI1NDlGREMxIgotCSJCOTJDMDNCIiwKLQkiMDAwMTAxRDU1NjU3MkFBQkFDODAwMTAxRDU1NjU3MkFBQkFDODAwMTAyMkQ1QzkxREQxNzNGOEZCNTYxREE2ODk5MTY0IgotCSI0NDMwNTFEIiwgMHhGRTJFLAotCU5VTEwsIDAsCi0JIlg5LjYyIGN1cnZlIG92ZXIgYSAzMDQgYml0IGJpbmFyeSBmaWVsZCIKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeyBFQ19DVVJWRV9EQVRBIGg7IHVuc2lnbmVkIGNoYXIgZGF0YVswKzM5KjZdOyB9CisJX0VDX1g5XzYyX0NIQVIyXzMwNFcxID0geworCXsgTklEX1g5XzYyX2NoYXJhY3RlcmlzdGljX3R3b19maWVsZCwwLDM5LDB4RkUyRSB9LAorCXsJCQkJCQkJLyogbm8gc2VlZCAqLworCSAgMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwJLyogcCAqLworCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNywKKwkgIDB4MDAsMHhGRCwweDBELDB4NjksMHgzMSwweDQ5LDB4QTEsMHgxOCwweEY2LDB4NTEsCS8qIGEgKi8KKwkgIDB4RTYsMHhEQywweEU2LDB4ODAsMHgyMCwweDg1LDB4MzcsMHg3RSwweDVGLDB4ODgsCisJICAweDJELDB4MUIsMHg1MSwweDBCLDB4NDQsMHgxNiwweDAwLDB4NzQsMHhDMSwweDI4LAorCSAgMHg4MCwweDc4LDB4MzYsMHg1QSwweDAzLDB4OTYsMHhDOCwweEU2LDB4ODEsCisJICAweDAwLDB4QkQsMHhEQiwweDk3LDB4RTUsMHg1NSwweEE1LDB4MEEsMHg5MCwweDhFLAkvKiBiICovCisJICAweDQzLDB4QjAsMHgxQywweDc5LDB4OEUsMHhBNSwweERBLDB4QTYsMHg3OCwweDhGLAorCSAgMHgxRSwweEEyLDB4NzksMHg0RSwweEZDLDB4RjUsMHg3MSwweDY2LDB4QjgsMHhDMSwKKwkgIDB4NDAsMHgzOSwweDYwLDB4MUUsMHg1NSwweDgyLDB4NzMsMHg0MCwweEJFLAorCSAgMHgwMCwweDE5LDB4N0IsMHgwNywweDg0LDB4NUUsMHg5QiwweEUyLDB4RDksMHg2QSwJLyogeCAqLworCSAgMHhEQiwweDBGLDB4NUYsMHgzQywweDdGLDB4MkMsMHhGRiwweEJELDB4N0EsMHgzRSwKKwkgIDB4QjgsMHhCNiwweEZFLDB4QzMsMHg1QywweDdGLDB4RDYsMHg3RiwweDI2LDB4REQsCisJICAweEY2LDB4MjgsMHg1QSwweDY0LDB4NEYsMHg3NCwweDBBLDB4MjYsMHgxNCwKKwkgIDB4MDAsMHhFMSwweDlGLDB4QkUsMHhCNywweDZFLDB4MEQsMHhBMSwweDcxLDB4NTEsCS8qIHkgKi8KKwkgIDB4N0UsMHhDRiwweDQwLDB4MUIsMHg1MCwweDI4LDB4OUIsMHhGMCwweDE0LDB4MTAsCisJICAweDMyLDB4ODgsMHg1MiwweDdBLDB4OUIsMHg0MSwweDZBLDB4MTAsMHg1RSwweDgwLAorCSAgMHgyNiwweDBCLDB4NTQsMHg5RiwweERDLDB4MUIsMHg5MiwweEMwLDB4M0IsCisJICAweDAwLDB4MDAsMHgwMSwweDAxLDB4RDUsMHg1NiwweDU3LDB4MkEsMHhBQiwweEFDLAkvKiBvcmRlciAqLworCSAgMHg4MCwweDAxLDB4MDEsMHhENSwweDU2LDB4NTcsMHgyQSwweEFCLDB4QUMsMHg4MCwKKwkgIDB4MDEsMHgwMiwweDJELDB4NUMsMHg5MSwweERELDB4MTcsMHgzRiwweDhGLDB4QjUsCisJICAweDYxLDB4REEsMHg2OCwweDk5LDB4MTYsMHg0NCwweDQzLDB4MDUsMHgxRCB9CiAJfTsKIAotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgX0VDX1g5XzYyX0NIQVIyXzM1OVYxX1NFRURbXSA9IHsKLQkweDJCLDB4MzUsMHg0OSwweDIwLDB4QjcsMHgyNCwweEQ2LDB4OTYsMHhFNiwweDc2LAotCTB4ODcsMHg1NiwweDE1LDB4MTcsMHg1OCwweDVCLDB4QTEsMHgzMywweDJELDB4QzZ9Owotc3RhdGljIGNvbnN0IEVDX0NVUlZFX0RBVEEgX0VDX1g5XzYyX0NIQVIyXzM1OVYxID0gewotCU5JRF9YOV82Ml9jaGFyYWN0ZXJpc3RpY190d29fZmllbGQsCi0JIjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIKLQkiMDAwMTAwMDAwMDAwMDAwMDAwMDAxIiwKLQkiNTY2NzY3NkE2NTRCMjA3NTRGMzU2RUE5MjAxN0Q5NDY1NjdDNDY2NzU1NTZGMTk1NTZBMDQ2MTZCNTY3RDIyM0E1RTA1IgotCSI2NTZGQjU0OTAxNkE5NjY1NkE1NTciLAotCSIyNDcyRTJEMDE5N0M0OTM2M0YxRkU3RjVCNkRCMDc1RDUyQjY5NDdEMTM1RDhDQTQ0NTgwNUQzOUJDMzQ1NjI2MDg5NjgiCi0JIjc3NDJCNjMyOUU3MDY4MDIzMTk4OCIsCi0JIjNDMjU4RUYzMDQ3NzY3RTdFREUwRjFGREFBNzlEQUVFMzg0MTM2NkExMzJFMTYzQUNFRDRFRDI0MDFERjlDNkJEQ0RFOSIKLQkiOEU4RTcwN0MwN0EyMjM5QjFCMDk3IiwKLQkiNTNEN0UwODUyOTU0NzA0ODEyMUU5Qzk1RjM3OTFERDgwNDk2Mzk0OEYzNEZBRTdCRjQ0RUE4MjM2NURDNzg2OEZFNTdFIgotCSI0QUUyREUyMTEzMDVBNDA3MTA0QkQiLAotCSIwMUFGMjg2QkNBMUFGMjg2QkNBMUFGMjg2QkNBMUFGMjg2QkNBMUFGMjg2QkM5RkI4RjZCODVDNTU2ODkyQzIwQTdFQjkiCi0JIjY0RkU3NzE5RTc0RjQ5MDc1OEQzQiIsIDB4NEMsCi0JX0VDX1g5XzYyX0NIQVIyXzM1OVYxX1NFRUQsIDIwLAotCSJYOS42MiBjdXJ2ZSBvdmVyIGEgMzU5IGJpdCBiaW5hcnkgZmllbGQiCitzdGF0aWMgY29uc3Qgc3RydWN0IHsgRUNfQ1VSVkVfREFUQSBoOyB1bnNpZ25lZCBjaGFyIGRhdGFbMjArNDUqNl07IH0KKwlfRUNfWDlfNjJfQ0hBUjJfMzU5VjEgPSB7CisJeyBOSURfWDlfNjJfY2hhcmFjdGVyaXN0aWNfdHdvX2ZpZWxkLDIwLDQ1LDB4NEMgfSwKKwl7IDB4MkIsMHgzNSwweDQ5LDB4MjAsMHhCNywweDI0LDB4RDYsMHg5NiwweEU2LDB4NzYsCS8qIHNlZWQgKi8KKwkgIDB4ODcsMHg1NiwweDE1LDB4MTcsMHg1OCwweDVCLDB4QTEsMHgzMywweDJELDB4QzYsCisKKwkgIDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCS8qIHAgKi8KKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwKKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwKKwkgIDB4NTYsMHg2NywweDY3LDB4NkEsMHg2NSwweDRCLDB4MjAsMHg3NSwweDRGLDB4MzUsCS8qIGEgKi8KKwkgIDB4NkUsMHhBOSwweDIwLDB4MTcsMHhEOSwweDQ2LDB4NTYsMHg3QywweDQ2LDB4NjcsCisJICAweDU1LDB4NTYsMHhGMSwweDk1LDB4NTYsMHhBMCwweDQ2LDB4MTYsMHhCNSwweDY3LAorCSAgMHhEMiwweDIzLDB4QTUsMHhFMCwweDU2LDB4NTYsMHhGQiwweDU0LDB4OTAsMHgxNiwKKwkgIDB4QTksMHg2NiwweDU2LDB4QTUsMHg1NywKKwkgIDB4MjQsMHg3MiwweEUyLDB4RDAsMHgxOSwweDdDLDB4NDksMHgzNiwweDNGLDB4MUYsCS8qIGIgKi8KKwkgIDB4RTcsMHhGNSwweEI2LDB4REIsMHgwNywweDVELDB4NTIsMHhCNiwweDk0LDB4N0QsCisJICAweDEzLDB4NUQsMHg4QywweEE0LDB4NDUsMHg4MCwweDVELDB4MzksMHhCQywweDM0LAorCSAgMHg1NiwweDI2LDB4MDgsMHg5NiwweDg3LDB4NzQsMHgyQiwweDYzLDB4MjksMHhFNywKKwkgIDB4MDYsMHg4MCwweDIzLDB4MTksMHg4OCwKKwkgIDB4M0MsMHgyNSwweDhFLDB4RjMsMHgwNCwweDc3LDB4NjcsMHhFNywweEVELDB4RTAsCS8qIHggKi8KKwkgIDB4RjEsMHhGRCwweEFBLDB4NzksMHhEQSwweEVFLDB4MzgsMHg0MSwweDM2LDB4NkEsCisJICAweDEzLDB4MkUsMHgxNiwweDNBLDB4Q0UsMHhENCwweEVELDB4MjQsMHgwMSwweERGLAorCSAgMHg5QywweDZCLDB4REMsMHhERSwweDk4LDB4RTgsMHhFNywweDA3LDB4QzAsMHg3QSwKKwkgIDB4MjIsMHgzOSwweEIxLDB4QjAsMHg5NywKKwkgIDB4NTMsMHhENywweEUwLDB4ODUsMHgyOSwweDU0LDB4NzAsMHg0OCwweDEyLDB4MUUsCS8qIHkgKi8KKwkgIDB4OUMsMHg5NSwweEYzLDB4NzksMHgxRCwweEQ4LDB4MDQsMHg5NiwweDM5LDB4NDgsCisJICAweEYzLDB4NEYsMHhBRSwweDdCLDB4RjQsMHg0RSwweEE4LDB4MjMsMHg2NSwweERDLAorCSAgMHg3OCwweDY4LDB4RkUsMHg1NywweEU0LDB4QUUsMHgyRCwweEUyLDB4MTEsMHgzMCwKKwkgIDB4NUEsMHg0MCwweDcxLDB4MDQsMHhCRCwKKwkgIDB4MDEsMHhBRiwweDI4LDB4NkIsMHhDQSwweDFBLDB4RjIsMHg4NiwweEJDLDB4QTEsCS8qIG9yZGVyICovCisJICAweEFGLDB4MjgsMHg2QiwweENBLDB4MUEsMHhGMiwweDg2LDB4QkMsMHhBMSwweEFGLAorCSAgMHgyOCwweDZCLDB4QzksMHhGQiwweDhGLDB4NkIsMHg4NSwweEM1LDB4NTYsMHg4OSwKKwkgIDB4MkMsMHgyMCwweEE3LDB4RUIsMHg5NiwweDRGLDB4RTcsMHg3MSwweDlFLDB4NzQsCisJICAweEY0LDB4OTAsMHg3NSwweDhELDB4M0IgfQogCX07CiAKLXN0YXRpYyBjb25zdCBFQ19DVVJWRV9EQVRBIF9FQ19YOV82Ml9DSEFSMl8zNjhXMSA9IHsKLQlOSURfWDlfNjJfY2hhcmFjdGVyaXN0aWNfdHdvX2ZpZWxkLAotCSIwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCi0JIjAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDciLAotCSJFMEQyRUUyNTA5NTIwNkY1RTJBNEY5RUQyMjlGMUYyNTZFNzlBMEUyQjQ1NTk3MEQ4RDBEODY1QkQ5NDc3OEM1NzZENjIiCi0JIkYwQUI3NTE5Q0NEMkExQTkwNkFFMzBEIiwKLQkiRkMxMjE3RDQzMjBBOTA0NTJDNzYwQTU4RURDRDMwQzhERDA2OUIzQzM0NDUzODM3QTM0RUQ1MENCNTQ5MTdFMUMyMTEyIgotCSJEODREMTY0RjQ0NEY4Rjc0Nzg2MDQ2QSIsCi0JIjEwODVFMjc1NTM4MURDQ0NFM0MxNTU3QUZBMTBDMkYwQzBDMjgyNTY0NkM1QjM0QTM5NENCQ0ZBOEJDMTZCMjJFN0U3OCIKLQkiOUU5MjdCRTIxNkYwMkUxRkIxMzZBNUYiLAotCSI3QjNFQjFCRERDQkE2MkQ1RDhCMjA1OUI1MjU3OTdGQzczODIyQzU5MDU5QzYyM0E0NUZGMzg0M0NFRThGODdDRDE4NTUiCi0JIkFEQUE4MUUyQTA3NTBCODBGREEyMzEwIiwKLQkiMDAwMTAwOTA1MTJEQTlBRjcyQjA4MzQ5RDk4QTVERDRDN0IwNTMyRUNBNTFDRTAzRTJEMTBGM0I3QUM1NzlCRDg3RTkwIgotCSI5QUU0MEE2RjEzMUU5Q0ZDRTVCRDk2NyIsIDB4RkY3MCwKLQlOVUxMLCAwLAotCSJYOS42MiBjdXJ2ZSBvdmVyIGEgMzY4IGJpdCBiaW5hcnkgZmllbGQiCitzdGF0aWMgY29uc3Qgc3RydWN0IHsgRUNfQ1VSVkVfREFUQSBoOyB1bnNpZ25lZCBjaGFyIGRhdGFbMCs0Nyo2XTsgfQorCV9FQ19YOV82Ml9DSEFSMl8zNjhXMSA9IHsKKwl7IE5JRF9YOV82Ml9jaGFyYWN0ZXJpc3RpY190d29fZmllbGQsMCw0NywweEZGNzAgfSwKKwl7CQkJCQkJCS8qIG5vIHNlZWQgKi8KKwkgIDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCS8qIHAgKi8KKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwKKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDcsCisJICAweDAwLDB4RTAsMHhEMiwweEVFLDB4MjUsMHgwOSwweDUyLDB4MDYsMHhGNSwweEUyLAkvKiBhICovCisJICAweEE0LDB4RjksMHhFRCwweDIyLDB4OUYsMHgxRiwweDI1LDB4NkUsMHg3OSwweEEwLAorCSAgMHhFMiwweEI0LDB4NTUsMHg5NywweDBELDB4OEQsMHgwRCwweDg2LDB4NUIsMHhEOSwKKwkgIDB4NDcsMHg3OCwweEM1LDB4NzYsMHhENiwweDJGLDB4MEEsMHhCNywweDUxLDB4OUMsCisJICAweENELDB4MkEsMHgxQSwweDkwLDB4NkEsMHhFMywweDBELAorCSAgMHgwMCwweEZDLDB4MTIsMHgxNywweEQ0LDB4MzIsMHgwQSwweDkwLDB4NDUsMHgyQywJLyogYiAqLworCSAgMHg3NiwweDBBLDB4NTgsMHhFRCwweENELDB4MzAsMHhDOCwweERELDB4MDYsMHg5QiwKKwkgIDB4M0MsMHgzNCwweDQ1LDB4MzgsMHgzNywweEEzLDB4NEUsMHhENSwweDBDLDB4QjUsCisJICAweDQ5LDB4MTcsMHhFMSwweEMyLDB4MTEsMHgyRCwweDg0LDB4RDEsMHg2NCwweEY0LAorCSAgMHg0NCwweEY4LDB4RjcsMHg0NywweDg2LDB4MDQsMHg2QSwKKwkgIDB4MDAsMHgxMCwweDg1LDB4RTIsMHg3NSwweDUzLDB4ODEsMHhEQywweENDLDB4RTMsCS8qIHggKi8KKwkgIDB4QzEsMHg1NSwweDdBLDB4RkEsMHgxMCwweEMyLDB4RjAsMHhDMCwweEMyLDB4ODIsCisJICAweDU2LDB4NDYsMHhDNSwweEIzLDB4NEEsMHgzOSwweDRDLDB4QkMsMHhGQSwweDhCLAorCSAgMHhDMSwweDZCLDB4MjIsMHhFNywweEU3LDB4ODksMHhFOSwweDI3LDB4QkUsMHgyMSwKKwkgIDB4NkYsMHgwMiwweEUxLDB4RkIsMHgxMywweDZBLDB4NUYsCisJICAweDAwLDB4N0IsMHgzRSwweEIxLDB4QkQsMHhEQywweEJBLDB4NjIsMHhENSwweEQ4LAkvKiB5ICovCisJICAweEIyLDB4MDUsMHg5QiwweDUyLDB4NTcsMHg5NywweEZDLDB4NzMsMHg4MiwweDJDLAorCSAgMHg1OSwweDA1LDB4OUMsMHg2MiwweDNBLDB4NDUsMHhGRiwweDM4LDB4NDMsMHhDRSwKKwkgIDB4RTgsMHhGOCwweDdDLDB4RDEsMHg4NSwweDVBLDB4REEsMHhBOCwweDFFLDB4MkEsCisJICAweDA3LDB4NTAsMHhCOCwweDBGLDB4REEsMHgyMywweDEwLAorCSAgMHgwMCwweDAwLDB4MDEsMHgwMCwweDkwLDB4NTEsMHgyRCwweEE5LDB4QUYsMHg3MiwJLyogb3JkZXIgKi8KKwkgIDB4QjAsMHg4MywweDQ5LDB4RDksMHg4QSwweDVELDB4RDQsMHhDNywweEIwLDB4NTMsCisJICAweDJFLDB4Q0EsMHg1MSwweENFLDB4MDMsMHhFMiwweEQxLDB4MEYsMHgzQiwweDdBLAorCSAgMHhDNSwweDc5LDB4QkQsMHg4NywweEU5LDB4MDksMHhBRSwweDQwLDB4QTYsMHhGMSwKKwkgIDB4MzEsMHhFOSwweENGLDB4Q0UsMHg1QiwweEQ5LDB4NjcgfQogCX07CiAKLXN0YXRpYyBjb25zdCBFQ19DVVJWRV9EQVRBIF9FQ19YOV82Ml9DSEFSMl80MzFSMSA9IHsKLQlOSURfWDlfNjJfY2hhcmFjdGVyaXN0aWNfdHdvX2ZpZWxkLAotCSI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCi0JIjAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIsCi0JIjFBODI3RUYwMERENkZDMEUyMzRDQUYwNDZDNkE1RDhBODUzOTVCMjM2Q0M0QUQyQ0YzMkEwQ0FEQkRDOURERjYyMEIwRSIKLQkiQjk5MDZEMDk1N0Y2QzZGRUFDRDYxNTQ2OERGMTA0REUyOTZDRDhGIiwKLQkiMTBEOUI0QTNEOTA0N0Q4QjE1NDM1OUFCRkIxQjdGNTQ4NUIwNENFQjg2ODIzN0REQzlERURBOTgyQTY3OUE1QTkxOUI2IgotCSIyNkQ0RTUwQThERDczMUIxMDdBOTk2MjM4MUZCNUQ4MDdCRjI2MTgiLAotCSIxMjBGQzA1RDNDNjdBOTlERTE2MUQyRjQwOTI2MjJGRUNBNzAxQkU0RjUwRjQ3NTg3MTRFOEE4N0JCRjJBNjU4RUY4QzIiCi0JIjFFN0M1RUZFOTY1MzYxRjZDMjk5OUMwQzI0N0IwREJENzBDRTZCNyIsCi0JIjIwRDBBRjg5MDNBOTZGOEQ1RkEyQzI1NTc0NUQzQzQ1MUIzMDJDOTM0NkQ5QjdFNDg1RTdCQ0U0MUY2QjU5MUYzRThGNiIKLQkiQUREQ0JCMEJDNEMyRjk0N0E3REUxQTg5QjYyNUQ2QTU5OEIzNzYwIiwKLQkiMDM0MDM0MDM0MDM0MDM0MDM0MDM0MDM0MDM0MDM0MDM0MDM0MDM0MDM0MDM0MDM0MDM0MDM0MDMyM0MzMTNGQUI1MDU4IgotCSI5NzAzQjVFQzY4RDM1ODdGRUM2MEQxNjFDQzE0OUMxQUQ0QTkxIiwgMHgyNzYwLAotCU5VTEwsIDAsCi0JIlg5LjYyIGN1cnZlIG92ZXIgYSA0MzEgYml0IGJpbmFyeSBmaWVsZCIKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeyBFQ19DVVJWRV9EQVRBIGg7IHVuc2lnbmVkIGNoYXIgZGF0YVswKzU0KjZdOyB9CisJX0VDX1g5XzYyX0NIQVIyXzQzMVIxID0geworCXsgTklEX1g5XzYyX2NoYXJhY3RlcmlzdGljX3R3b19maWVsZCwwLDU0LDB4Mjc2MCB9LAorCXsJCQkJCQkJLyogbm8gc2VlZCAqLworCSAgMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwJLyogcCAqLworCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkgIDB4MDAsMHgwMCwweDAwLDB4MDEsCisJICAweDFBLDB4ODIsMHg3RSwweEYwLDB4MEQsMHhENiwweEZDLDB4MEUsMHgyMywweDRDLAkvKiBhICovCisJICAweEFGLDB4MDQsMHg2QywweDZBLDB4NUQsMHg4QSwweDg1LDB4MzksMHg1QiwweDIzLAorCSAgMHg2QywweEM0LDB4QUQsMHgyQywweEYzLDB4MkEsMHgwQywweEFELDB4QkQsMHhDOSwKKwkgIDB4REQsMHhGNiwweDIwLDB4QjAsMHhFQiwweDk5LDB4MDYsMHhEMCwweDk1LDB4N0YsCisJICAweDZDLDB4NkYsMHhFQSwweENELDB4NjEsMHg1NCwweDY4LDB4REYsMHgxMCwweDRELAorCSAgMHhFMiwweDk2LDB4Q0QsMHg4RiwKKwkgIDB4MTAsMHhEOSwweEI0LDB4QTMsMHhEOSwweDA0LDB4N0QsMHg4QiwweDE1LDB4NDMsCS8qIGIgKi8KKwkgIDB4NTksMHhBQiwweEZCLDB4MUIsMHg3RiwweDU0LDB4ODUsMHhCMCwweDRDLDB4RUIsCisJICAweDg2LDB4ODIsMHgzNywweERELDB4QzksMHhERSwweERBLDB4OTgsMHgyQSwweDY3LAorCSAgMHg5QSwweDVBLDB4OTEsMHg5QiwweDYyLDB4NkQsMHg0RSwweDUwLDB4QTgsMHhERCwKKwkgIDB4NzMsMHgxQiwweDEwLDB4N0EsMHg5OSwweDYyLDB4MzgsMHgxRiwweEI1LDB4RDgsCisJICAweDA3LDB4QkYsMHgyNiwweDE4LAorCSAgMHgxMiwweDBGLDB4QzAsMHg1RCwweDNDLDB4NjcsMHhBOSwweDlELDB4RTEsMHg2MSwJLyogeCAqLworCSAgMHhEMiwweEY0LDB4MDksMHgyNiwweDIyLDB4RkUsMHhDQSwweDcwLDB4MUIsMHhFNCwKKwkgIDB4RjUsMHgwRiwweDQ3LDB4NTgsMHg3MSwweDRFLDB4OEEsMHg4NywweEJCLDB4RjIsCisJICAweEE2LDB4NTgsMHhFRiwweDhDLDB4MjEsMHhFNywweEM1LDB4RUYsMHhFOSwweDY1LAorCSAgMHgzNiwweDFGLDB4NkMsMHgyOSwweDk5LDB4QzAsMHhDMiwweDQ3LDB4QjAsMHhEQiwKKwkgIDB4RDcsMHgwQywweEU2LDB4QjcsCisJICAweDIwLDB4RDAsMHhBRiwweDg5LDB4MDMsMHhBOSwweDZGLDB4OEQsMHg1RiwweEEyLAkvKiB5ICovCisJICAweEMyLDB4NTUsMHg3NCwweDVELDB4M0MsMHg0NSwweDFCLDB4MzAsMHgyQywweDkzLAorCSAgMHg0NiwweEQ5LDB4QjcsMHhFNCwweDg1LDB4RTcsMHhCQywweEU0LDB4MUYsMHg2QiwKKwkgIDB4NTksMHgxRiwweDNFLDB4OEYsMHg2QSwweERELDB4Q0IsMHhCMCwweEJDLDB4NEMsCisJICAweDJGLDB4OTQsMHg3QSwweDdELDB4RTEsMHhBOCwweDlCLDB4NjIsMHg1RCwweDZBLAorCSAgMHg1OSwweDhCLDB4MzcsMHg2MCwKKwkgIDB4MDAsMHgwMywweDQwLDB4MzQsMHgwMywweDQwLDB4MzQsMHgwMywweDQwLDB4MzQsCS8qIG9yZGVyICovCisJICAweDAzLDB4NDAsMHgzNCwweDAzLDB4NDAsMHgzNCwweDAzLDB4NDAsMHgzNCwweDAzLAorCSAgMHg0MCwweDM0LDB4MDMsMHg0MCwweDM0LDB4MDMsMHg0MCwweDM0LDB4MDMsMHgyMywKKwkgIDB4QzMsMHgxMywweEZBLDB4QjUsMHgwNSwweDg5LDB4NzAsMHgzQiwweDVFLDB4QzYsCisJICAweDhELDB4MzUsMHg4NywweEZFLDB4QzYsMHgwRCwweDE2LDB4MUMsMHhDMSwweDQ5LAorCSAgMHhDMSwweEFELDB4NEEsMHg5MSB9CiAJfTsKIAotc3RhdGljIGNvbnN0IEVDX0NVUlZFX0RBVEEgX0VDX1dUTFNfMSA9IHsKLQlOSURfWDlfNjJfY2hhcmFjdGVyaXN0aWNfdHdvX2ZpZWxkLAotCSIwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDEiLAotCSIxIiwKLQkiMSIsCi0JIjAxNjY3OTc5QTQwQkE0OTdFNUQ1QzI3MDc4MDYxNyIsCi0JIjAwRjQ0QjRBRjFFQ0MyNjMwRTA4Nzg1Q0VCQ0MxNSIsCi0JIjAwRkZGRkZGRkZGRkZGRkZGREJGOTFBRjZERUE3MyIsIDIsCi0JTlVMTCwgMCwKLQkiV1RMUyBjdXJ2ZSBvdmVyIGEgMTEzIGJpdCBiaW5hcnkgZmllbGQiCitzdGF0aWMgY29uc3Qgc3RydWN0IHsgRUNfQ1VSVkVfREFUQSBoOyB1bnNpZ25lZCBjaGFyIGRhdGFbMCsxNSo2XTsgfQorCV9FQ19XVExTXzEgPSB7CisJeyBOSURfWDlfNjJfY2hhcmFjdGVyaXN0aWNfdHdvX2ZpZWxkLDAsMTUsMiB9LAorCXsJCQkJCQkJLyogbm8gc2VlZCAqLworCSAgMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwJLyogcCAqLworCSAgMHgwMCwweDAwLDB4MDAsMHgwMiwweDAxLAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwJLyogYSAqLworCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwJLyogYiAqLworCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLAorCSAgMHgwMSwweDY2LDB4NzksMHg3OSwweEE0LDB4MEIsMHhBNCwweDk3LDB4RTUsMHhENSwJLyogeCAqLworCSAgMHhDMiwweDcwLDB4NzgsMHgwNiwweDE3LAorCSAgMHgwMCwweEY0LDB4NEIsMHg0QSwweEYxLDB4RUMsMHhDMiwweDYzLDB4MEUsMHgwOCwJLyogeSAqLworCSAgMHg3OCwweDVDLDB4RUIsMHhDQywweDE1LAorCSAgMHgwMCwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkQsMHhCRiwJLyogb3JkZXIgKi8KKwkgIDB4OTEsMHhBRiwweDZELDB4RUEsMHg3MyB9CiAJfTsKIAogLyogSVBTZWMgY3VydmVzICovCkBAIC0xMDAxLDE3ICsxNzY1LDI3IEBACiAgKiBBcyB0aGUgZ3JvdXAgb3JkZXIgaXMgbm90IGEgcHJpbWUgdGhpcyBjdXJ2ZSBpcyBub3Qgc3VpdGFibGUKICAqIGZvciBFQ0RTQS4KICAqLwotc3RhdGljIGNvbnN0IEVDX0NVUlZFX0RBVEEgX0VDX0lQU0VDXzE1NV9JRDMgPSB7Ci0JTklEX1g5XzYyX2NoYXJhY3RlcmlzdGljX3R3b19maWVsZCwKLQkiMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMSIsCi0JIjAiLAotCSIwNzMzOGYiLAotCSI3YiIsCi0JIjFjOCIsCi0JIjJBQUFBQUFBQUFBQUFBQUFBQUFDN0YzQzc4ODFCRDA4NjhGQTg2QyIsMywKLQlOVUxMLCAwLAotCSJcblx0SVBTZWMvSUtFL09ha2xleSBjdXJ2ZSAjMyBvdmVyIGEgMTU1IGJpdCBiaW5hcnkgZmllbGQuXG4iCi0JIlx0Tm90IHN1aXRhYmxlIGZvciBFQ0RTQS5cblx0UXVlc3Rpb25hYmxlIGV4dGVuc2lvbiBmaWVsZCEiCitzdGF0aWMgY29uc3Qgc3RydWN0IHsgRUNfQ1VSVkVfREFUQSBoOyB1bnNpZ25lZCBjaGFyIGRhdGFbMCsyMCo2XTsgfQorCV9FQ19JUFNFQ18xNTVfSUQzID0geworCXsgTklEX1g5XzYyX2NoYXJhY3RlcmlzdGljX3R3b19maWVsZCwwLDIwLDMgfSwKKwl7CQkJCQkJCS8qIG5vIHNlZWQgKi8KKwkgIDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCS8qIHAgKi8KKwkgIDB4MDAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsCisKKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCS8qIGEgKi8KKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisKKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCS8qIGIgKi8KKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNywweDMzLDB4OGYsCisKKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCS8qIHggKi8KKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4N2IsCisKKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCS8qIHkgKi8KKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4YzgsCisKKwkgIDB4MDIsMHhBQSwweEFBLDB4QUEsMHhBQSwweEFBLDB4QUEsMHhBQSwweEFBLDB4QUEsCS8qIG9yZGVyICovCisJICAweEM3LDB4RjMsMHhDNywweDg4LDB4MUIsMHhEMCwweDg2LDB4OEYsMHhBOCwweDZDIH0KIAl9OwogCiAvKiBOT1RFOiBUaGUgb2YgY3VydmVzIG92ZXIgYSBleHRlbnNpb24gZmllbGQgb2Ygbm9uIHByaW1lIGRlZ3JlZQpAQCAtMTAxOSwxMDYgKzE3OTMsMTE4IEBACiAgKiBBcyB0aGUgZ3JvdXAgb3JkZXIgaXMgbm90IGEgcHJpbWUgdGhpcyBjdXJ2ZSBpcyBub3Qgc3VpdGFibGUKICAqIGZvciBFQ0RTQS4KICAqLwotc3RhdGljIGNvbnN0IEVDX0NVUlZFX0RBVEEgX0VDX0lQU0VDXzE4NV9JRDQgPSB7Ci0JTklEX1g5XzYyX2NoYXJhY3RlcmlzdGljX3R3b19maWVsZCwKLQkiMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDAxIiwKLQkiMCIsCi0JIjFlZTkiLAotCSIxOCIsCi0JIjBkIiwKLQkiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVERjk3QzQ0REI5RjI0MjBCQUZDQTc1RSIsMiwKLQlOVUxMLCAwLAotCSJcblx0SVBTZWMvSUtFL09ha2xleSBjdXJ2ZSAjNCBvdmVyIGEgMTg1IGJpdCBiaW5hcnkgZmllbGQuXG4iCi0JIlx0Tm90IHN1aXRhYmxlIGZvciBFQ0RTQS5cblx0UXVlc3Rpb25hYmxlIGV4dGVuc2lvbiBmaWVsZCEiCitzdGF0aWMgY29uc3Qgc3RydWN0IHsgRUNfQ1VSVkVfREFUQSBoOyB1bnNpZ25lZCBjaGFyIGRhdGFbMCsyNCo2XTsgfQorCV9FQ19JUFNFQ18xODVfSUQ0ID0geworCXsgTklEX1g5XzYyX2NoYXJhY3RlcmlzdGljX3R3b19maWVsZCwwLDI0LDIgfSwKKwl7CQkJCQkJCS8qIG5vIHNlZWQgKi8KKwkgIDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCS8qIHAgKi8KKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJICAweDAwLDB4MDAsMHgwMCwweDAxLAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwJLyogYSAqLworCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAkvKiBiICovCisJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCSAgMHgwMCwweDAwLDB4MWUsMHhlOSwKKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCS8qIHggKi8KKwkgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJICAweDAwLDB4MDAsMHgwMCwweDE4LAorCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwJLyogeSAqLworCSAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkgIDB4MDAsMHgwMCwweDAwLDB4MGQsCisJICAweDAwLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAkvKiBvcmRlciAqLworCSAgMHhGRiwweEZGLDB4RUQsMHhGOSwweDdDLDB4NDQsMHhEQiwweDlGLDB4MjQsMHgyMCwKKwkgIDB4QkEsMHhGQywweEE3LDB4NUUgfQogCX07CiAKIHR5cGVkZWYgc3RydWN0IF9lY19saXN0X2VsZW1lbnRfc3QgewogCWludAluaWQ7CiAJY29uc3QgRUNfQ1VSVkVfREFUQSAqZGF0YTsKKwljb25zdCBjaGFyICpjb21tZW50OwogCX0gZWNfbGlzdF9lbGVtZW50OwogCiBzdGF0aWMgY29uc3QgZWNfbGlzdF9lbGVtZW50IGN1cnZlX2xpc3RbXSA9IHsKIAkvKiBwcmltZSBmaWVsZCBjdXJ2ZXMgKi8JCiAJLyogc2VjZyBjdXJ2ZXMgKi8KLQl7IE5JRF9zZWNwMTEycjEsICZfRUNfU0VDR19QUklNRV8xMTJSMX0sCi0JeyBOSURfc2VjcDExMnIyLCAmX0VDX1NFQ0dfUFJJTUVfMTEyUjJ9LAotCXsgTklEX3NlY3AxMjhyMSwgJl9FQ19TRUNHX1BSSU1FXzEyOFIxfSwKLQl7IE5JRF9zZWNwMTI4cjIsICZfRUNfU0VDR19QUklNRV8xMjhSMn0sCi0JeyBOSURfc2VjcDE2MGsxLCAmX0VDX1NFQ0dfUFJJTUVfMTYwSzF9LAotCXsgTklEX3NlY3AxNjByMSwgJl9FQ19TRUNHX1BSSU1FXzE2MFIxfSwKLQl7IE5JRF9zZWNwMTYwcjIsICZfRUNfU0VDR19QUklNRV8xNjBSMn0sCisJeyBOSURfc2VjcDExMnIxLCAmX0VDX1NFQ0dfUFJJTUVfMTEyUjEuaCwgIlNFQ0cvV1RMUyBjdXJ2ZSBvdmVyIGEgMTEyIGJpdCBwcmltZSBmaWVsZCJ9LAorCXsgTklEX3NlY3AxMTJyMiwgJl9FQ19TRUNHX1BSSU1FXzExMlIyLmgsICJTRUNHIGN1cnZlIG92ZXIgYSAxMTIgYml0IHByaW1lIGZpZWxkIn0sCisJeyBOSURfc2VjcDEyOHIxLCAmX0VDX1NFQ0dfUFJJTUVfMTI4UjEuaCwgIlNFQ0cgY3VydmUgb3ZlciBhIDEyOCBiaXQgcHJpbWUgZmllbGQifSwKKwl7IE5JRF9zZWNwMTI4cjIsICZfRUNfU0VDR19QUklNRV8xMjhSMi5oLCAiU0VDRyBjdXJ2ZSBvdmVyIGEgMTI4IGJpdCBwcmltZSBmaWVsZCJ9LAorCXsgTklEX3NlY3AxNjBrMSwgJl9FQ19TRUNHX1BSSU1FXzE2MEsxLmgsICJTRUNHIGN1cnZlIG92ZXIgYSAxNjAgYml0IHByaW1lIGZpZWxkIn0sCisJeyBOSURfc2VjcDE2MHIxLCAmX0VDX1NFQ0dfUFJJTUVfMTYwUjEuaCwgIlNFQ0cgY3VydmUgb3ZlciBhIDE2MCBiaXQgcHJpbWUgZmllbGQifSwKKwl7IE5JRF9zZWNwMTYwcjIsICZfRUNfU0VDR19QUklNRV8xNjBSMi5oLCAiU0VDRy9XVExTIGN1cnZlIG92ZXIgYSAxNjAgYml0IHByaW1lIGZpZWxkIn0sCiAJLyogU0VDRyBzZWNwMTkycjEgaXMgdGhlIHNhbWUgYXMgWDkuNjIgcHJpbWUxOTJ2MSBhbmQgaGVuY2Ugb21pdHRlZCAqLwotCXsgTklEX3NlY3AxOTJrMSwgJl9FQ19TRUNHX1BSSU1FXzE5MksxfSwKLQl7IE5JRF9zZWNwMjI0azEsICZfRUNfU0VDR19QUklNRV8yMjRLMX0sCi0JeyBOSURfc2VjcDIyNHIxLCAmX0VDX05JU1RfUFJJTUVfMjI0fSwKLQl7IE5JRF9zZWNwMjU2azEsICZfRUNfU0VDR19QUklNRV8yNTZLMX0sCisJeyBOSURfc2VjcDE5MmsxLCAmX0VDX1NFQ0dfUFJJTUVfMTkySzEuaCwgIlNFQ0cgY3VydmUgb3ZlciBhIDE5MiBiaXQgcHJpbWUgZmllbGQifSwKKwl7IE5JRF9zZWNwMjI0azEsICZfRUNfU0VDR19QUklNRV8yMjRLMS5oLCAiU0VDRyBjdXJ2ZSBvdmVyIGEgMjI0IGJpdCBwcmltZSBmaWVsZCJ9LAorCXsgTklEX3NlY3AyMjRyMSwgJl9FQ19OSVNUX1BSSU1FXzIyNC5oLCAgICJOSVNUL1NFQ0cgY3VydmUgb3ZlciBhIDIyNCBiaXQgcHJpbWUgZmllbGQifSwKKwl7IE5JRF9zZWNwMjU2azEsICZfRUNfU0VDR19QUklNRV8yNTZLMS5oLCAiU0VDRyBjdXJ2ZSBvdmVyIGEgMjU2IGJpdCBwcmltZSBmaWVsZCJ9LAogCS8qIFNFQ0cgc2VjcDI1NnIxIGlzIHRoZSBzYW1lIGFzIFg5LjYyIHByaW1lMjU2djEgYW5kIGhlbmNlIG9taXR0ZWQgKi8KLQl7IE5JRF9zZWNwMzg0cjEsICZfRUNfTklTVF9QUklNRV8zODR9LAotCXsgTklEX3NlY3A1MjFyMSwgJl9FQ19OSVNUX1BSSU1FXzUyMX0sCisJeyBOSURfc2VjcDM4NHIxLCAmX0VDX05JU1RfUFJJTUVfMzg0LmgsICJOSVNUL1NFQ0cgY3VydmUgb3ZlciBhIDM4NCBiaXQgcHJpbWUgZmllbGQifSwKKwl7IE5JRF9zZWNwNTIxcjEsICZfRUNfTklTVF9QUklNRV81MjEuaCwgIk5JU1QvU0VDRyBjdXJ2ZSBvdmVyIGEgNTIxIGJpdCBwcmltZSBmaWVsZCJ9LAogCS8qIFg5LjYyIGN1cnZlcyAqLwotCXsgTklEX1g5XzYyX3ByaW1lMTkydjEsICZfRUNfTklTVF9QUklNRV8xOTJ9LAotCXsgTklEX1g5XzYyX3ByaW1lMTkydjIsICZfRUNfWDlfNjJfUFJJTUVfMTkyVjJ9LAotCXsgTklEX1g5XzYyX3ByaW1lMTkydjMsICZfRUNfWDlfNjJfUFJJTUVfMTkyVjN9LAotCXsgTklEX1g5XzYyX3ByaW1lMjM5djEsICZfRUNfWDlfNjJfUFJJTUVfMjM5VjF9LAotCXsgTklEX1g5XzYyX3ByaW1lMjM5djIsICZfRUNfWDlfNjJfUFJJTUVfMjM5VjJ9LAotCXsgTklEX1g5XzYyX3ByaW1lMjM5djMsICZfRUNfWDlfNjJfUFJJTUVfMjM5VjN9LAotCXsgTklEX1g5XzYyX3ByaW1lMjU2djEsICZfRUNfWDlfNjJfUFJJTUVfMjU2VjF9LAorCXsgTklEX1g5XzYyX3ByaW1lMTkydjEsICZfRUNfTklTVF9QUklNRV8xOTIuaCwgIk5JU1QvWDkuNjIvU0VDRyBjdXJ2ZSBvdmVyIGEgMTkyIGJpdCBwcmltZSBmaWVsZCJ9LAorCXsgTklEX1g5XzYyX3ByaW1lMTkydjIsICZfRUNfWDlfNjJfUFJJTUVfMTkyVjIuaCwgIlg5LjYyIGN1cnZlIG92ZXIgYSAxOTIgYml0IHByaW1lIGZpZWxkIn0sCisJeyBOSURfWDlfNjJfcHJpbWUxOTJ2MywgJl9FQ19YOV82Ml9QUklNRV8xOTJWMy5oLCAiWDkuNjIgY3VydmUgb3ZlciBhIDE5MiBiaXQgcHJpbWUgZmllbGQifSwKKwl7IE5JRF9YOV82Ml9wcmltZTIzOXYxLCAmX0VDX1g5XzYyX1BSSU1FXzIzOVYxLmgsICJYOS42MiBjdXJ2ZSBvdmVyIGEgMjM5IGJpdCBwcmltZSBmaWVsZCJ9LAorCXsgTklEX1g5XzYyX3ByaW1lMjM5djIsICZfRUNfWDlfNjJfUFJJTUVfMjM5VjIuaCwgIlg5LjYyIGN1cnZlIG92ZXIgYSAyMzkgYml0IHByaW1lIGZpZWxkIn0sCisJeyBOSURfWDlfNjJfcHJpbWUyMzl2MywgJl9FQ19YOV82Ml9QUklNRV8yMzlWMy5oLCAiWDkuNjIgY3VydmUgb3ZlciBhIDIzOSBiaXQgcHJpbWUgZmllbGQifSwKKwl7IE5JRF9YOV82Ml9wcmltZTI1NnYxLCAmX0VDX1g5XzYyX1BSSU1FXzI1NlYxLmgsICJYOS42Mi9TRUNHIGN1cnZlIG92ZXIgYSAyNTYgYml0IHByaW1lIGZpZWxkIn0sCiAJLyogY2hhcmFjdGVyaXN0aWMgdHdvIGZpZWxkIGN1cnZlcyAqLwogCS8qIE5JU1QvU0VDRyBjdXJ2ZXMgKi8KLQl7IE5JRF9zZWN0MTEzcjEsICZfRUNfU0VDR19DSEFSMl8xMTNSMX0sCi0JeyBOSURfc2VjdDExM3IyLCAmX0VDX1NFQ0dfQ0hBUjJfMTEzUjJ9LAotCXsgTklEX3NlY3QxMzFyMSwgJl9FQ19TRUNHX0NIQVIyXzEzMVIxfSwKLQl7IE5JRF9zZWN0MTMxcjIsICZfRUNfU0VDR19DSEFSMl8xMzFSMn0sCi0JeyBOSURfc2VjdDE2M2sxLCAmX0VDX05JU1RfQ0hBUjJfMTYzSyB9LAotCXsgTklEX3NlY3QxNjNyMSwgJl9FQ19TRUNHX0NIQVIyXzE2M1IxfSwKLQl7IE5JRF9zZWN0MTYzcjIsICZfRUNfTklTVF9DSEFSMl8xNjNCIH0sCi0JeyBOSURfc2VjdDE5M3IxLCAmX0VDX1NFQ0dfQ0hBUjJfMTkzUjF9LAotCXsgTklEX3NlY3QxOTNyMiwgJl9FQ19TRUNHX0NIQVIyXzE5M1IyfSwKLQl7IE5JRF9zZWN0MjMzazEsICZfRUNfTklTVF9DSEFSMl8yMzNLIH0sCi0JeyBOSURfc2VjdDIzM3IxLCAmX0VDX05JU1RfQ0hBUjJfMjMzQiB9LAotCXsgTklEX3NlY3QyMzlrMSwgJl9FQ19TRUNHX0NIQVIyXzIzOUsxfSwKLQl7IE5JRF9zZWN0MjgzazEsICZfRUNfTklTVF9DSEFSMl8yODNLIH0sCi0JeyBOSURfc2VjdDI4M3IxLCAmX0VDX05JU1RfQ0hBUjJfMjgzQiB9LAotCXsgTklEX3NlY3Q0MDlrMSwgJl9FQ19OSVNUX0NIQVIyXzQwOUsgfSwKLQl7IE5JRF9zZWN0NDA5cjEsICZfRUNfTklTVF9DSEFSMl80MDlCIH0sCi0JeyBOSURfc2VjdDU3MWsxLCAmX0VDX05JU1RfQ0hBUjJfNTcxSyB9LAotCXsgTklEX3NlY3Q1NzFyMSwgJl9FQ19OSVNUX0NIQVIyXzU3MUIgfSwKKwl7IE5JRF9zZWN0MTEzcjEsICZfRUNfU0VDR19DSEFSMl8xMTNSMS5oLCAiU0VDRyBjdXJ2ZSBvdmVyIGEgMTEzIGJpdCBiaW5hcnkgZmllbGQifSwKKwl7IE5JRF9zZWN0MTEzcjIsICZfRUNfU0VDR19DSEFSMl8xMTNSMi5oLCAiU0VDRyBjdXJ2ZSBvdmVyIGEgMTEzIGJpdCBiaW5hcnkgZmllbGQifSwKKwl7IE5JRF9zZWN0MTMxcjEsICZfRUNfU0VDR19DSEFSMl8xMzFSMS5oLCAiU0VDRy9XVExTIGN1cnZlIG92ZXIgYSAxMzEgYml0IGJpbmFyeSBmaWVsZCJ9LAorCXsgTklEX3NlY3QxMzFyMiwgJl9FQ19TRUNHX0NIQVIyXzEzMVIyLmgsICJTRUNHIGN1cnZlIG92ZXIgYSAxMzEgYml0IGJpbmFyeSBmaWVsZCJ9LAorCXsgTklEX3NlY3QxNjNrMSwgJl9FQ19OSVNUX0NIQVIyXzE2M0suaCwgICJOSVNUL1NFQ0cvV1RMUyBjdXJ2ZSBvdmVyIGEgMTYzIGJpdCBiaW5hcnkgZmllbGQiIH0sCisJeyBOSURfc2VjdDE2M3IxLCAmX0VDX1NFQ0dfQ0hBUjJfMTYzUjEuaCwgIlNFQ0cgY3VydmUgb3ZlciBhIDE2MyBiaXQgYmluYXJ5IGZpZWxkIn0sCisJeyBOSURfc2VjdDE2M3IyLCAmX0VDX05JU1RfQ0hBUjJfMTYzQi5oLCAgIk5JU1QvU0VDRyBjdXJ2ZSBvdmVyIGEgMTYzIGJpdCBiaW5hcnkgZmllbGQiIH0sCisJeyBOSURfc2VjdDE5M3IxLCAmX0VDX1NFQ0dfQ0hBUjJfMTkzUjEuaCwgIlNFQ0cgY3VydmUgb3ZlciBhIDE5MyBiaXQgYmluYXJ5IGZpZWxkIn0sCisJeyBOSURfc2VjdDE5M3IyLCAmX0VDX1NFQ0dfQ0hBUjJfMTkzUjIuaCwgIlNFQ0cgY3VydmUgb3ZlciBhIDE5MyBiaXQgYmluYXJ5IGZpZWxkIn0sCisJeyBOSURfc2VjdDIzM2sxLCAmX0VDX05JU1RfQ0hBUjJfMjMzSy5oLCAgIk5JU1QvU0VDRy9XVExTIGN1cnZlIG92ZXIgYSAyMzMgYml0IGJpbmFyeSBmaWVsZCIgfSwKKwl7IE5JRF9zZWN0MjMzcjEsICZfRUNfTklTVF9DSEFSMl8yMzNCLmgsICAiTklTVC9TRUNHL1dUTFMgY3VydmUgb3ZlciBhIDIzMyBiaXQgYmluYXJ5IGZpZWxkIiB9LAorCXsgTklEX3NlY3QyMzlrMSwgJl9FQ19TRUNHX0NIQVIyXzIzOUsxLmgsICJTRUNHIGN1cnZlIG92ZXIgYSAyMzkgYml0IGJpbmFyeSBmaWVsZCJ9LAorCXsgTklEX3NlY3QyODNrMSwgJl9FQ19OSVNUX0NIQVIyXzI4M0suaCwgICJOSVNUL1NFQ0cgY3VydmUgb3ZlciBhIDI4MyBiaXQgYmluYXJ5IGZpZWxkIiB9LAorCXsgTklEX3NlY3QyODNyMSwgJl9FQ19OSVNUX0NIQVIyXzI4M0IuaCwgICJOSVNUL1NFQ0cgY3VydmUgb3ZlciBhIDI4MyBiaXQgYmluYXJ5IGZpZWxkIiB9LAorCXsgTklEX3NlY3Q0MDlrMSwgJl9FQ19OSVNUX0NIQVIyXzQwOUsuaCwgICJOSVNUL1NFQ0cgY3VydmUgb3ZlciBhIDQwOSBiaXQgYmluYXJ5IGZpZWxkIiB9LAorCXsgTklEX3NlY3Q0MDlyMSwgJl9FQ19OSVNUX0NIQVIyXzQwOUIuaCwgICJOSVNUL1NFQ0cgY3VydmUgb3ZlciBhIDQwOSBiaXQgYmluYXJ5IGZpZWxkIiB9LAorCXsgTklEX3NlY3Q1NzFrMSwgJl9FQ19OSVNUX0NIQVIyXzU3MUsuaCwgICJOSVNUL1NFQ0cgY3VydmUgb3ZlciBhIDU3MSBiaXQgYmluYXJ5IGZpZWxkIiB9LAorCXsgTklEX3NlY3Q1NzFyMSwgJl9FQ19OSVNUX0NIQVIyXzU3MUIuaCwgICJOSVNUL1NFQ0cgY3VydmUgb3ZlciBhIDU3MSBiaXQgYmluYXJ5IGZpZWxkIiB9LAogCS8qIFg5LjYyIGN1cnZlcyAqLwotCXsgTklEX1g5XzYyX2MycG5iMTYzdjEsICZfRUNfWDlfNjJfQ0hBUjJfMTYzVjF9LAotCXsgTklEX1g5XzYyX2MycG5iMTYzdjIsICZfRUNfWDlfNjJfQ0hBUjJfMTYzVjJ9LAotCXsgTklEX1g5XzYyX2MycG5iMTYzdjMsICZfRUNfWDlfNjJfQ0hBUjJfMTYzVjN9LAotCXsgTklEX1g5XzYyX2MycG5iMTc2djEsICZfRUNfWDlfNjJfQ0hBUjJfMTc2VjF9LAotCXsgTklEX1g5XzYyX2MydG5iMTkxdjEsICZfRUNfWDlfNjJfQ0hBUjJfMTkxVjF9LAotCXsgTklEX1g5XzYyX2MydG5iMTkxdjIsICZfRUNfWDlfNjJfQ0hBUjJfMTkxVjJ9LAotCXsgTklEX1g5XzYyX2MydG5iMTkxdjMsICZfRUNfWDlfNjJfQ0hBUjJfMTkxVjN9LAotCXsgTklEX1g5XzYyX2MycG5iMjA4dzEsICZfRUNfWDlfNjJfQ0hBUjJfMjA4VzF9LAotCXsgTklEX1g5XzYyX2MydG5iMjM5djEsICZfRUNfWDlfNjJfQ0hBUjJfMjM5VjF9LAotCXsgTklEX1g5XzYyX2MydG5iMjM5djIsICZfRUNfWDlfNjJfQ0hBUjJfMjM5VjJ9LAotCXsgTklEX1g5XzYyX2MydG5iMjM5djMsICZfRUNfWDlfNjJfQ0hBUjJfMjM5VjN9LAotCXsgTklEX1g5XzYyX2MycG5iMjcydzEsICZfRUNfWDlfNjJfQ0hBUjJfMjcyVzF9LAotCXsgTklEX1g5XzYyX2MycG5iMzA0dzEsICZfRUNfWDlfNjJfQ0hBUjJfMzA0VzF9LAotCXsgTklEX1g5XzYyX2MydG5iMzU5djEsICZfRUNfWDlfNjJfQ0hBUjJfMzU5VjF9LAotCXsgTklEX1g5XzYyX2MycG5iMzY4dzEsICZfRUNfWDlfNjJfQ0hBUjJfMzY4VzF9LAotCXsgTklEX1g5XzYyX2MydG5iNDMxcjEsICZfRUNfWDlfNjJfQ0hBUjJfNDMxUjF9LAorCXsgTklEX1g5XzYyX2MycG5iMTYzdjEsICZfRUNfWDlfNjJfQ0hBUjJfMTYzVjEuaCwgIlg5LjYyIGN1cnZlIG92ZXIgYSAxNjMgYml0IGJpbmFyeSBmaWVsZCJ9LAorCXsgTklEX1g5XzYyX2MycG5iMTYzdjIsICZfRUNfWDlfNjJfQ0hBUjJfMTYzVjIuaCwgIlg5LjYyIGN1cnZlIG92ZXIgYSAxNjMgYml0IGJpbmFyeSBmaWVsZCJ9LAorCXsgTklEX1g5XzYyX2MycG5iMTYzdjMsICZfRUNfWDlfNjJfQ0hBUjJfMTYzVjMuaCwgIlg5LjYyIGN1cnZlIG92ZXIgYSAxNjMgYml0IGJpbmFyeSBmaWVsZCJ9LAorCXsgTklEX1g5XzYyX2MycG5iMTc2djEsICZfRUNfWDlfNjJfQ0hBUjJfMTc2VjEuaCwgIlg5LjYyIGN1cnZlIG92ZXIgYSAxNzYgYml0IGJpbmFyeSBmaWVsZCJ9LAorCXsgTklEX1g5XzYyX2MydG5iMTkxdjEsICZfRUNfWDlfNjJfQ0hBUjJfMTkxVjEuaCwgIlg5LjYyIGN1cnZlIG92ZXIgYSAxOTEgYml0IGJpbmFyeSBmaWVsZCJ9LAorCXsgTklEX1g5XzYyX2MydG5iMTkxdjIsICZfRUNfWDlfNjJfQ0hBUjJfMTkxVjIuaCwgIlg5LjYyIGN1cnZlIG92ZXIgYSAxOTEgYml0IGJpbmFyeSBmaWVsZCJ9LAorCXsgTklEX1g5XzYyX2MydG5iMTkxdjMsICZfRUNfWDlfNjJfQ0hBUjJfMTkxVjMuaCwgIlg5LjYyIGN1cnZlIG92ZXIgYSAxOTEgYml0IGJpbmFyeSBmaWVsZCJ9LAorCXsgTklEX1g5XzYyX2MycG5iMjA4dzEsICZfRUNfWDlfNjJfQ0hBUjJfMjA4VzEuaCwgIlg5LjYyIGN1cnZlIG92ZXIgYSAyMDggYml0IGJpbmFyeSBmaWVsZCJ9LAorCXsgTklEX1g5XzYyX2MydG5iMjM5djEsICZfRUNfWDlfNjJfQ0hBUjJfMjM5VjEuaCwgIlg5LjYyIGN1cnZlIG92ZXIgYSAyMzkgYml0IGJpbmFyeSBmaWVsZCJ9LAorCXsgTklEX1g5XzYyX2MydG5iMjM5djIsICZfRUNfWDlfNjJfQ0hBUjJfMjM5VjIuaCwgIlg5LjYyIGN1cnZlIG92ZXIgYSAyMzkgYml0IGJpbmFyeSBmaWVsZCJ9LAorCXsgTklEX1g5XzYyX2MydG5iMjM5djMsICZfRUNfWDlfNjJfQ0hBUjJfMjM5VjMuaCwgIlg5LjYyIGN1cnZlIG92ZXIgYSAyMzkgYml0IGJpbmFyeSBmaWVsZCJ9LAorCXsgTklEX1g5XzYyX2MycG5iMjcydzEsICZfRUNfWDlfNjJfQ0hBUjJfMjcyVzEuaCwgIlg5LjYyIGN1cnZlIG92ZXIgYSAyNzIgYml0IGJpbmFyeSBmaWVsZCJ9LAorCXsgTklEX1g5XzYyX2MycG5iMzA0dzEsICZfRUNfWDlfNjJfQ0hBUjJfMzA0VzEuaCwgIlg5LjYyIGN1cnZlIG92ZXIgYSAzMDQgYml0IGJpbmFyeSBmaWVsZCJ9LAorCXsgTklEX1g5XzYyX2MydG5iMzU5djEsICZfRUNfWDlfNjJfQ0hBUjJfMzU5VjEuaCwgIlg5LjYyIGN1cnZlIG92ZXIgYSAzNTkgYml0IGJpbmFyeSBmaWVsZCJ9LAorCXsgTklEX1g5XzYyX2MycG5iMzY4dzEsICZfRUNfWDlfNjJfQ0hBUjJfMzY4VzEuaCwgIlg5LjYyIGN1cnZlIG92ZXIgYSAzNjggYml0IGJpbmFyeSBmaWVsZCJ9LAorCXsgTklEX1g5XzYyX2MydG5iNDMxcjEsICZfRUNfWDlfNjJfQ0hBUjJfNDMxUjEuaCwgIlg5LjYyIGN1cnZlIG92ZXIgYSA0MzEgYml0IGJpbmFyeSBmaWVsZCJ9LAogCS8qIHRoZSBXQVAvV1RMUyBjdXJ2ZXMKIAkgKiBbdW5saWtlIFNFQ0csIHNwZWMgaGFzIGl0cyBvd24gT0lEcyBmb3IgY3VydmVzIGZyb20gWDkuNjJdICovCi0JeyBOSURfd2FwX3dzZ19pZG1fZWNpZF93dGxzMSwgJl9FQ19XVExTXzF9LAotCXsgTklEX3dhcF93c2dfaWRtX2VjaWRfd3RsczMsICZfRUNfTklTVF9DSEFSMl8xNjNLfSwKLQl7IE5JRF93YXBfd3NnX2lkbV9lY2lkX3d0bHM0LCAmX0VDX1NFQ0dfQ0hBUjJfMTEzUjF9LAotCXsgTklEX3dhcF93c2dfaWRtX2VjaWRfd3RsczUsICZfRUNfWDlfNjJfQ0hBUjJfMTYzVjF9LAotCXsgTklEX3dhcF93c2dfaWRtX2VjaWRfd3RsczYsICZfRUNfU0VDR19QUklNRV8xMTJSMX0sCi0JeyBOSURfd2FwX3dzZ19pZG1fZWNpZF93dGxzNywgJl9FQ19TRUNHX1BSSU1FXzE2MFIyfSwKLQl7IE5JRF93YXBfd3NnX2lkbV9lY2lkX3d0bHM4LCAmX0VDX1dUTFNfOH0sCi0JeyBOSURfd2FwX3dzZ19pZG1fZWNpZF93dGxzOSwgJl9FQ19XVExTXzkgfSwKLQl7IE5JRF93YXBfd3NnX2lkbV9lY2lkX3d0bHMxMCwgJl9FQ19OSVNUX0NIQVIyXzIzM0t9LAotCXsgTklEX3dhcF93c2dfaWRtX2VjaWRfd3RsczExLCAmX0VDX05JU1RfQ0hBUjJfMjMzQn0sCi0JeyBOSURfd2FwX3dzZ19pZG1fZWNpZF93dGxzMTIsICZfRUNfV1RMU18xMn0sCisJeyBOSURfd2FwX3dzZ19pZG1fZWNpZF93dGxzMSwgJl9FQ19XVExTXzEuaCwgIldUTFMgY3VydmUgb3ZlciBhIDExMyBiaXQgYmluYXJ5IGZpZWxkIn0sCisJeyBOSURfd2FwX3dzZ19pZG1fZWNpZF93dGxzMywgJl9FQ19OSVNUX0NIQVIyXzE2M0suaCwgICAiTklTVC9TRUNHL1dUTFMgY3VydmUgb3ZlciBhIDE2MyBiaXQgYmluYXJ5IGZpZWxkIn0sCisJeyBOSURfd2FwX3dzZ19pZG1fZWNpZF93dGxzNCwgJl9FQ19TRUNHX0NIQVIyXzExM1IxLmgsICAiU0VDRyBjdXJ2ZSBvdmVyIGEgMTEzIGJpdCBiaW5hcnkgZmllbGQifSwKKwl7IE5JRF93YXBfd3NnX2lkbV9lY2lkX3d0bHM1LCAmX0VDX1g5XzYyX0NIQVIyXzE2M1YxLmgsICJYOS42MiBjdXJ2ZSBvdmVyIGEgMTYzIGJpdCBiaW5hcnkgZmllbGQifSwKKwl7IE5JRF93YXBfd3NnX2lkbV9lY2lkX3d0bHM2LCAmX0VDX1NFQ0dfUFJJTUVfMTEyUjEuaCwgICJTRUNHL1dUTFMgY3VydmUgb3ZlciBhIDExMiBiaXQgcHJpbWUgZmllbGQifSwKKwl7IE5JRF93YXBfd3NnX2lkbV9lY2lkX3d0bHM3LCAmX0VDX1NFQ0dfUFJJTUVfMTYwUjIuaCwgICJTRUNHL1dUTFMgY3VydmUgb3ZlciBhIDE2MCBiaXQgcHJpbWUgZmllbGQifSwKKwl7IE5JRF93YXBfd3NnX2lkbV9lY2lkX3d0bHM4LCAmX0VDX1dUTFNfOC5oLCAiV1RMUyBjdXJ2ZSBvdmVyIGEgMTEyIGJpdCBwcmltZSBmaWVsZCJ9LAorCXsgTklEX3dhcF93c2dfaWRtX2VjaWRfd3RsczksICZfRUNfV1RMU185LmgsICJXVExTIGN1cnZlIG92ZXIgYSAxNjAgYml0IHByaW1lIGZpZWxkIiB9LAorCXsgTklEX3dhcF93c2dfaWRtX2VjaWRfd3RsczEwLCAmX0VDX05JU1RfQ0hBUjJfMjMzSy5oLCAiTklTVC9TRUNHL1dUTFMgY3VydmUgb3ZlciBhIDIzMyBiaXQgYmluYXJ5IGZpZWxkIn0sCisJeyBOSURfd2FwX3dzZ19pZG1fZWNpZF93dGxzMTEsICZfRUNfTklTVF9DSEFSMl8yMzNCLmgsICJOSVNUL1NFQ0cvV1RMUyBjdXJ2ZSBvdmVyIGEgMjMzIGJpdCBiaW5hcnkgZmllbGQifSwKKwl7IE5JRF93YXBfd3NnX2lkbV9lY2lkX3d0bHMxMiwgJl9FQ19XVExTXzEyLmgsICJXVExTIGN1cnZzIG92ZXIgYSAyMjQgYml0IHByaW1lIGZpZWxkIn0sCiAJLyogSVBTZWMgY3VydmVzICovCi0JeyBOSURfaXBzZWMzLCAmX0VDX0lQU0VDXzE1NV9JRDN9LAotCXsgTklEX2lwc2VjNCwgJl9FQ19JUFNFQ18xODVfSUQ0fSwKKwl7IE5JRF9pcHNlYzMsICZfRUNfSVBTRUNfMTU1X0lEMy5oLCAiXG5cdElQU2VjL0lLRS9PYWtsZXkgY3VydmUgIzMgb3ZlciBhIDE1NSBiaXQgYmluYXJ5IGZpZWxkLlxuIiJcdE5vdCBzdWl0YWJsZSBmb3IgRUNEU0EuXG5cdFF1ZXN0aW9uYWJsZSBleHRlbnNpb24gZmllbGQhIn0sCisJeyBOSURfaXBzZWM0LCAmX0VDX0lQU0VDXzE4NV9JRDQuaCwgIlxuXHRJUFNlYy9JS0UvT2FrbGV5IGN1cnZlICM0IG92ZXIgYSAxODUgYml0IGJpbmFyeSBmaWVsZC5cbiIiXHROb3Qgc3VpdGFibGUgZm9yIEVDRFNBLlxuXHRRdWVzdGlvbmFibGUgZXh0ZW5zaW9uIGZpZWxkISJ9LAogfTsKIAotc3RhdGljIHNpemVfdCBjdXJ2ZV9saXN0X2xlbmd0aCA9IHNpemVvZihjdXJ2ZV9saXN0KS9zaXplb2YoZWNfbGlzdF9lbGVtZW50KTsKKyNkZWZpbmUgY3VydmVfbGlzdF9sZW5ndGggKHNpemVvZihjdXJ2ZV9saXN0KS9zaXplb2YoZWNfbGlzdF9lbGVtZW50KSkKIAogc3RhdGljIEVDX0dST1VQICplY19ncm91cF9uZXdfZnJvbV9kYXRhKGNvbnN0IEVDX0NVUlZFX0RBVEEgKmRhdGEpCiAJewpAQCAtMTEyNywyMiArMTkxMywyMyBAQAogCUJOX0NUWAkgKmN0eD1OVUxMOwogCUJJR05VTSAJICpwPU5VTEwsICphPU5VTEwsICpiPU5VTEwsICp4PU5VTEwsICp5PU5VTEwsICpvcmRlcj1OVUxMOwogCWludAkgb2s9MDsKKwlpbnQJIHNlZWRfbGVuLHBhcmFtX2xlbjsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpwYXJhbXM7CiAKIAlpZiAoKGN0eCA9IEJOX0NUWF9uZXcoKSkgPT0gTlVMTCkKIAkJewogCQlFQ2VycihFQ19GX0VDX0dST1VQX05FV19GUk9NX0RBVEEsIEVSUl9SX01BTExPQ19GQUlMVVJFKTsKIAkJZ290byBlcnI7CiAJCX0KLQlpZiAoKHAgPSBCTl9uZXcoKSkgPT0gTlVMTCB8fCAoYSA9IEJOX25ldygpKSA9PSBOVUxMIHx8IAotCQkoYiA9IEJOX25ldygpKSA9PSBOVUxMIHx8ICh4ID0gQk5fbmV3KCkpID09IE5VTEwgfHwKLQkJKHkgPSBCTl9uZXcoKSkgPT0gTlVMTCB8fCAob3JkZXIgPSBCTl9uZXcoKSkgPT0gTlVMTCkKLQkJewotCQlFQ2VycihFQ19GX0VDX0dST1VQX05FV19GUk9NX0RBVEEsIEVSUl9SX01BTExPQ19GQUlMVVJFKTsKLQkJZ290byBlcnI7Ci0JCX0KLQkKLQlpZiAoIUJOX2hleDJibigmcCwgZGF0YS0+cCkgfHwgIUJOX2hleDJibigmYSwgZGF0YS0+YSkKLQkJfHwgIUJOX2hleDJibigmYiwgZGF0YS0+YikpCisKKwlzZWVkX2xlbiAgPSBkYXRhLT5zZWVkX2xlbjsKKwlwYXJhbV9sZW4gPSBkYXRhLT5wYXJhbV9sZW47CisJcGFyYW1zICAgID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikoZGF0YSsxKTsJLyogc2tpcCBoZWFkZXIgKi8KKwlwYXJhbXMgICArPSBzZWVkX2xlbjsJCQkJLyogc2tpcCBzZWVkICAgKi8KKworCWlmICghKHAgPSBCTl9iaW4yYm4ocGFyYW1zKzAqcGFyYW1fbGVuLCBwYXJhbV9sZW4sIE5VTEwpKQorCQl8fCAhKGEgPSBCTl9iaW4yYm4ocGFyYW1zKzEqcGFyYW1fbGVuLCBwYXJhbV9sZW4sIE5VTEwpKQorCQl8fCAhKGIgPSBCTl9iaW4yYm4ocGFyYW1zKzIqcGFyYW1fbGVuLCBwYXJhbV9sZW4sIE5VTEwpKSkKIAkJewogCQlFQ2VycihFQ19GX0VDX0dST1VQX05FV19GUk9NX0RBVEEsIEVSUl9SX0JOX0xJQik7CiAJCWdvdG8gZXJyOwpAQCAtMTE1Niw4ICsxOTQzLDggQEAKIAkJCWdvdG8gZXJyOwogCQkJfQogCQl9Ci0JCWVsc2UKLQkJeyAvKiBmaWVsZF90eXBlID09IE5JRF9YOV82Ml9jaGFyYWN0ZXJpc3RpY190d29fZmllbGQgKi8KKwllbHNlCS8qIGZpZWxkX3R5cGUgPT0gTklEX1g5XzYyX2NoYXJhY3RlcmlzdGljX3R3b19maWVsZCAqLworCQl7CiAJCWlmICgoZ3JvdXAgPSBFQ19HUk9VUF9uZXdfY3VydmVfR0YybShwLCBhLCBiLCBjdHgpKSA9PSBOVUxMKQogCQkJewogCQkJRUNlcnIoRUNfRl9FQ19HUk9VUF9ORVdfRlJPTV9EQVRBLCBFUlJfUl9FQ19MSUIpOwpAQCAtMTE3MSw3ICsxOTU4LDggQEAKIAkJZ290byBlcnI7CiAJCX0KIAkKLQlpZiAoIUJOX2hleDJibigmeCwgZGF0YS0+eCkgfHwgIUJOX2hleDJibigmeSwgZGF0YS0+eSkpCisJaWYgKCEoeCA9IEJOX2JpbjJibihwYXJhbXMrMypwYXJhbV9sZW4sIHBhcmFtX2xlbiwgTlVMTCkpCisJCXx8ICEoeSA9IEJOX2JpbjJibihwYXJhbXMrNCpwYXJhbV9sZW4sIHBhcmFtX2xlbiwgTlVMTCkpKQogCQl7CiAJCUVDZXJyKEVDX0ZfRUNfR1JPVVBfTkVXX0ZST01fREFUQSwgRVJSX1JfQk5fTElCKTsKIAkJZ290byBlcnI7CkBAIC0xMTgxLDcgKzE5NjksOCBAQAogCQlFQ2VycihFQ19GX0VDX0dST1VQX05FV19GUk9NX0RBVEEsIEVSUl9SX0VDX0xJQik7CiAJCWdvdG8gZXJyOwogCQl9Ci0JaWYgKCFCTl9oZXgyYm4oJm9yZGVyLCBkYXRhLT5vcmRlcikgfHwgIUJOX3NldF93b3JkKHgsIGRhdGEtPmNvZmFjdG9yKSkKKwlpZiAoIShvcmRlciA9IEJOX2JpbjJibihwYXJhbXMrNSpwYXJhbV9sZW4sIHBhcmFtX2xlbiwgTlVMTCkpCisJCXx8ICFCTl9zZXRfd29yZCh4LCAoQk5fVUxPTkcpZGF0YS0+Y29mYWN0b3IpKQogCQl7CiAJCUVDZXJyKEVDX0ZfRUNfR1JPVVBfTkVXX0ZST01fREFUQSwgRVJSX1JfQk5fTElCKTsKIAkJZ290byBlcnI7CkBAIC0xMTkxLDkgKzE5ODAsOSBAQAogCQlFQ2VycihFQ19GX0VDX0dST1VQX05FV19GUk9NX0RBVEEsIEVSUl9SX0VDX0xJQik7CiAJCWdvdG8gZXJyOwogCQl9Ci0JaWYgKGRhdGEtPnNlZWQpCisJaWYgKHNlZWRfbGVuKQogCQl7Ci0JCWlmICghRUNfR1JPVVBfc2V0X3NlZWQoZ3JvdXAsIGRhdGEtPnNlZWQsIGRhdGEtPnNlZWRfbGVuKSkKKwkJaWYgKCFFQ19HUk9VUF9zZXRfc2VlZChncm91cCwgcGFyYW1zLXNlZWRfbGVuLCBzZWVkX2xlbikpCiAJCQl7CiAJCQlFQ2VycihFQ19GX0VDX0dST1VQX05FV19GUk9NX0RBVEEsIEVSUl9SX0VDX0xJQik7CiAJCQlnb3RvIGVycjsKQEAgLTEyNjMsNyArMjA1Miw3IEBACiAJZm9yIChpID0gMDsgaSA8IG1pbjsgaSsrKQogCQl7CiAJCXJbaV0ubmlkID0gY3VydmVfbGlzdFtpXS5uaWQ7Ci0JCXJbaV0uY29tbWVudCA9IGN1cnZlX2xpc3RbaV0uZGF0YS0+Y29tbWVudDsKKwkJcltpXS5jb21tZW50ID0gY3VydmVfbGlzdFtpXS5jb21tZW50OwogCQl9CiAKIAlyZXR1cm4gY3VydmVfbGlzdF9sZW5ndGg7CmRpZmYgLS1naXQgYS9jcnlwdG8vZWMvZWNfZXJyLmMgYi9jcnlwdG8vZWMvZWNfZXJyLmMKaW5kZXggZDA0Yzg5NS4uODRiNDgzMyAxMDA2NDQKLS0tIGEvY3J5cHRvL2VjL2VjX2Vyci5jCisrKyBiL2NyeXB0by9lYy9lY19lcnIuYwpAQCAtNzQsNiArNzQsMTQgQEAKIHtFUlJfRlVOQyhFQ19GX0QySV9FQ1BBUkFNRVRFUlMpLAkiZDJpX0VDUGFyYW1ldGVycyJ9LAoge0VSUl9GVU5DKEVDX0ZfRDJJX0VDUEtQQVJBTUVURVJTKSwJImQyaV9FQ1BLUGFyYW1ldGVycyJ9LAoge0VSUl9GVU5DKEVDX0ZfRDJJX0VDUFJJVkFURUtFWSksCSJkMmlfRUNQcml2YXRlS2V5In0sCit7RVJSX0ZVTkMoRUNfRl9ET19FQ19LRVlfUFJJTlQpLAkiRE9fRUNfS0VZX1BSSU5UIn0sCit7RVJSX0ZVTkMoRUNfRl9FQ0tFWV9QQVJBTTJUWVBFKSwJIkVDS0VZX1BBUkFNMlRZUEUifSwKK3tFUlJfRlVOQyhFQ19GX0VDS0VZX1BBUkFNX0RFQ09ERSksCSJFQ0tFWV9QQVJBTV9ERUNPREUifSwKK3tFUlJfRlVOQyhFQ19GX0VDS0VZX1BSSVZfREVDT0RFKSwJIkVDS0VZX1BSSVZfREVDT0RFIn0sCit7RVJSX0ZVTkMoRUNfRl9FQ0tFWV9QUklWX0VOQ09ERSksCSJFQ0tFWV9QUklWX0VOQ09ERSJ9LAore0VSUl9GVU5DKEVDX0ZfRUNLRVlfUFVCX0RFQ09ERSksCSJFQ0tFWV9QVUJfREVDT0RFIn0sCit7RVJSX0ZVTkMoRUNfRl9FQ0tFWV9QVUJfRU5DT0RFKSwJIkVDS0VZX1BVQl9FTkNPREUifSwKK3tFUlJfRlVOQyhFQ19GX0VDS0VZX1RZUEUyUEFSQU0pLAkiRUNLRVlfVFlQRTJQQVJBTSJ9LAoge0VSUl9GVU5DKEVDX0ZfRUNQQVJBTUVURVJTX1BSSU5UKSwJIkVDUGFyYW1ldGVyc19wcmludCJ9LAoge0VSUl9GVU5DKEVDX0ZfRUNQQVJBTUVURVJTX1BSSU5UX0ZQKSwJIkVDUGFyYW1ldGVyc19wcmludF9mcCJ9LAoge0VSUl9GVU5DKEVDX0ZfRUNQS1BBUkFNRVRFUlNfUFJJTlQpLAkiRUNQS1BhcmFtZXRlcnNfcHJpbnQifSwKQEAgLTE0Nyw3ICsxNTUsNiBAQAoge0VSUl9GVU5DKEVDX0ZfRUNfS0VZX1BSSU5UKSwJIkVDX0tFWV9wcmludCJ9LAoge0VSUl9GVU5DKEVDX0ZfRUNfS0VZX1BSSU5UX0ZQKSwJIkVDX0tFWV9wcmludF9mcCJ9LAoge0VSUl9GVU5DKEVDX0ZfRUNfUE9JTlRTX01BS0VfQUZGSU5FKSwJIkVDX1BPSU5Uc19tYWtlX2FmZmluZSJ9LAote0VSUl9GVU5DKEVDX0ZfRUNfUE9JTlRTX01VTCksCSJFQ19QT0lOVHNfbXVsIn0sCiB7RVJSX0ZVTkMoRUNfRl9FQ19QT0lOVF9BREQpLAkiRUNfUE9JTlRfYWRkIn0sCiB7RVJSX0ZVTkMoRUNfRl9FQ19QT0lOVF9DTVApLAkiRUNfUE9JTlRfY21wIn0sCiB7RVJSX0ZVTkMoRUNfRl9FQ19QT0lOVF9DT1BZKSwJIkVDX1BPSU5UX2NvcHkifSwKQEAgLTE3OCw2ICsxODUsMTMgQEAKIHtFUlJfRlVOQyhFQ19GX0kyRF9FQ1BSSVZBVEVLRVkpLAkiaTJkX0VDUHJpdmF0ZUtleSJ9LAoge0VSUl9GVU5DKEVDX0ZfSTJPX0VDUFVCTElDS0VZKSwJImkyb19FQ1B1YmxpY0tleSJ9LAoge0VSUl9GVU5DKEVDX0ZfTzJJX0VDUFVCTElDS0VZKSwJIm8yaV9FQ1B1YmxpY0tleSJ9LAore0VSUl9GVU5DKEVDX0ZfT0xEX0VDX1BSSVZfREVDT0RFKSwJIk9MRF9FQ19QUklWX0RFQ09ERSJ9LAore0VSUl9GVU5DKEVDX0ZfUEtFWV9FQ19DVFJMKSwJIlBLRVlfRUNfQ1RSTCJ9LAore0VSUl9GVU5DKEVDX0ZfUEtFWV9FQ19DVFJMX1NUUiksCSJQS0VZX0VDX0NUUkxfU1RSIn0sCit7RVJSX0ZVTkMoRUNfRl9QS0VZX0VDX0RFUklWRSksCSJQS0VZX0VDX0RFUklWRSJ9LAore0VSUl9GVU5DKEVDX0ZfUEtFWV9FQ19LRVlHRU4pLAkiUEtFWV9FQ19LRVlHRU4ifSwKK3tFUlJfRlVOQyhFQ19GX1BLRVlfRUNfUEFSQU1HRU4pLAkiUEtFWV9FQ19QQVJBTUdFTiJ9LAore0VSUl9GVU5DKEVDX0ZfUEtFWV9FQ19TSUdOKSwJIlBLRVlfRUNfU0lHTiJ9LAogezAsTlVMTH0KIAl9OwogCkBAIC0xODcsNiArMjAxLDcgQEAKIHtFUlJfUkVBU09OKEVDX1JfQVNOMV9VTktOT1dOX0ZJRUxEKSAgICAgLCJhc24xIHVua25vd24gZmllbGQifSwKIHtFUlJfUkVBU09OKEVDX1JfQlVGRkVSX1RPT19TTUFMTCkgICAgICAgLCJidWZmZXIgdG9vIHNtYWxsIn0sCiB7RVJSX1JFQVNPTihFQ19SX0QySV9FQ1BLUEFSQU1FVEVSU19GQUlMVVJFKSwiZDJpIGVjcGtwYXJhbWV0ZXJzIGZhaWx1cmUifSwKK3tFUlJfUkVBU09OKEVDX1JfREVDT0RFX0VSUk9SKSAgICAgICAgICAgLCJkZWNvZGUgZXJyb3IifSwKIHtFUlJfUkVBU09OKEVDX1JfRElTQ1JJTUlOQU5UX0lTX1pFUk8pICAgLCJkaXNjcmltaW5hbnQgaXMgemVybyJ9LAoge0VSUl9SRUFTT04oRUNfUl9FQ19HUk9VUF9ORVdfQllfTkFNRV9GQUlMVVJFKSwiZWMgZ3JvdXAgbmV3IGJ5IG5hbWUgZmFpbHVyZSJ9LAoge0VSUl9SRUFTT04oRUNfUl9GSUVMRF9UT09fTEFSR0UpICAgICAgICAsImZpZWxkIHRvbyBsYXJnZSJ9LApAQCAtMTk2LDYgKzIxMSw4IEBACiB7RVJSX1JFQVNPTihFQ19SX0lOVkFMSURfQVJHVU1FTlQpICAgICAgICwiaW52YWxpZCBhcmd1bWVudCJ9LAoge0VSUl9SRUFTT04oRUNfUl9JTlZBTElEX0NPTVBSRVNTRURfUE9JTlQpLCJpbnZhbGlkIGNvbXByZXNzZWQgcG9pbnQifSwKIHtFUlJfUkVBU09OKEVDX1JfSU5WQUxJRF9DT01QUkVTU0lPTl9CSVQpLCJpbnZhbGlkIGNvbXByZXNzaW9uIGJpdCJ9LAore0VSUl9SRUFTT04oRUNfUl9JTlZBTElEX0NVUlZFKSAgICAgICAgICAsImludmFsaWQgY3VydmUifSwKK3tFUlJfUkVBU09OKEVDX1JfSU5WQUxJRF9ESUdFU1RfVFlQRSkgICAgLCJpbnZhbGlkIGRpZ2VzdCB0eXBlIn0sCiB7RVJSX1JFQVNPTihFQ19SX0lOVkFMSURfRU5DT0RJTkcpICAgICAgICwiaW52YWxpZCBlbmNvZGluZyJ9LAoge0VSUl9SRUFTT04oRUNfUl9JTlZBTElEX0ZJRUxEKSAgICAgICAgICAsImludmFsaWQgZmllbGQifSwKIHtFUlJfUkVBU09OKEVDX1JfSU5WQUxJRF9GT1JNKSAgICAgICAgICAgLCJpbnZhbGlkIGZvcm0ifSwKQEAgLTIwMyw2ICsyMjAsNyBAQAoge0VSUl9SRUFTT04oRUNfUl9JTlZBTElEX1BFTlRBTk9NSUFMX0JBU0lTKSwiaW52YWxpZCBwZW50YW5vbWlhbCBiYXNpcyJ9LAoge0VSUl9SRUFTT04oRUNfUl9JTlZBTElEX1BSSVZBVEVfS0VZKSAgICAsImludmFsaWQgcHJpdmF0ZSBrZXkifSwKIHtFUlJfUkVBU09OKEVDX1JfSU5WQUxJRF9UUklOT01JQUxfQkFTSVMpLCJpbnZhbGlkIHRyaW5vbWlhbCBiYXNpcyJ9LAore0VSUl9SRUFTT04oRUNfUl9LRVlTX05PVF9TRVQpICAgICAgICAgICAsImtleXMgbm90IHNldCJ9LAoge0VSUl9SRUFTT04oRUNfUl9NSVNTSU5HX1BBUkFNRVRFUlMpICAgICAsIm1pc3NpbmcgcGFyYW1ldGVycyJ9LAoge0VSUl9SRUFTT04oRUNfUl9NSVNTSU5HX1BSSVZBVEVfS0VZKSAgICAsIm1pc3NpbmcgcHJpdmF0ZSBrZXkifSwKIHtFUlJfUkVBU09OKEVDX1JfTk9UX0FfTklTVF9QUklNRSkgICAgICAgLCJub3QgYSBOSVNUIHByaW1lIn0sCkBAIC0yMTAsNiArMjI4LDcgQEAKIHtFUlJfUkVBU09OKEVDX1JfTk9UX0lNUExFTUVOVEVEKSAgICAgICAgLCJub3QgaW1wbGVtZW50ZWQifSwKIHtFUlJfUkVBU09OKEVDX1JfTk9UX0lOSVRJQUxJWkVEKSAgICAgICAgLCJub3QgaW5pdGlhbGl6ZWQifSwKIHtFUlJfUkVBU09OKEVDX1JfTk9fRklFTERfTU9EKSAgICAgICAgICAgLCJubyBmaWVsZCBtb2QifSwKK3tFUlJfUkVBU09OKEVDX1JfTk9fUEFSQU1FVEVSU19TRVQpICAgICAgLCJubyBwYXJhbWV0ZXJzIHNldCJ9LAoge0VSUl9SRUFTT04oRUNfUl9QQVNTRURfTlVMTF9QQVJBTUVURVIpICAsInBhc3NlZCBudWxsIHBhcmFtZXRlciJ9LAoge0VSUl9SRUFTT04oRUNfUl9QS1BBUkFNRVRFUlMyR1JPVVBfRkFJTFVSRSksInBrcGFyYW1ldGVyczJncm91cCBmYWlsdXJlIn0sCiB7RVJSX1JFQVNPTihFQ19SX1BPSU5UX0FUX0lORklOSVRZKSAgICAgICwicG9pbnQgYXQgaW5maW5pdHkifSwKZGlmZiAtLWdpdCBhL2NyeXB0by9lYy9lY19sY2wuaCBiL2NyeXB0by9lYy9lY19sY2wuaAppbmRleCBmZGQ3YWEyLi4zZTJjMzRiIDEwMDY0NAotLS0gYS9jcnlwdG8vZWMvZWNfbGNsLmgKKysrIGIvY3J5cHRvL2VjL2VjX2xjbC5oCkBAIC0yMDUsMTEgKzIwNSwxNCBAQAogCSAgICAgICAgICAgICAgICogaXJyZWR1Y2libGUgcG9seW5vbWlhbCBkZWZpbmluZyB0aGUgZmllbGQuCiAJICAgICAgICAgICAgICAgKi8KIAotCXVuc2lnbmVkIGludCBwb2x5WzVdOyAvKiBGaWVsZCBzcGVjaWZpY2F0aW9uIGZvciBjdXJ2ZXMgb3ZlciBHRigyXm0pLgotCSAgICAgICAgICAgICAgICAgICAgICAgKiBUaGUgaXJyZWR1Y2libGUgZih0KSBpcyB0aGVuIG9mIHRoZSBmb3JtOgotCSAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgdF5wb2x5WzBdICsgdF5wb2x5WzFdICsgLi4uICsgdF5wb2x5W2tdCi0JICAgICAgICAgICAgICAgICAgICAgICAqIHdoZXJlIG0gPSBwb2x5WzBdID4gcG9seVsxXSA+IC4uLiA+IHBvbHlba10gPSAwLgotCSAgICAgICAgICAgICAgICAgICAgICAgKi8KKwlpbnQgcG9seVs2XTsgLyogRmllbGQgc3BlY2lmaWNhdGlvbiBmb3IgY3VydmVzIG92ZXIgR0YoMl5tKS4KKwkgICAgICAgICAgICAgICogVGhlIGlycmVkdWNpYmxlIGYodCkgaXMgdGhlbiBvZiB0aGUgZm9ybToKKwkgICAgICAgICAgICAgICogICAgIHRecG9seVswXSArIHRecG9seVsxXSArIC4uLiArIHRecG9seVtrXQorCSAgICAgICAgICAgICAgKiB3aGVyZSBtID0gcG9seVswXSA+IHBvbHlbMV0gPiAuLi4gPiBwb2x5W2tdID0gMC4KKwkgICAgICAgICAgICAgICogVGhlIGFycmF5IGlzIHRlcm1pbmF0ZWQgd2l0aCBwb2x5W2srMV09LTEuCisJICAgICAgICAgICAgICAqIEFsbCBlbGxpcHRpYyBjdXJ2ZSBpcnJlZHVjaWJsZXMgaGF2ZSBhdCBtb3N0IDUKKwkgICAgICAgICAgICAgICogbm9uLXplcm8gdGVybXMuCisJICAgICAgICAgICAgICAqLwogCiAJQklHTlVNIGEsIGI7IC8qIEN1cnZlIGNvZWZmaWNpZW50cy4KIAkgICAgICAgICAgICAgICogKEhlcmUgdGhlIGFzc3VtcHRpb24gaXMgdGhhdCBCSUdOVU1zIGNhbiBiZSB1c2VkCmRpZmYgLS1naXQgYS9jcnlwdG8vZWMvZWNfbGliLmMgYi9jcnlwdG8vZWMvZWNfbGliLmMKaW5kZXggNWFmODQzNy4uZGQ3ZGEwZiAxMDA2NDQKLS0tIGEvY3J5cHRvL2VjL2VjX2xpYi5jCisrKyBiL2NyeXB0by9lYy9lY19saWIuYwpAQCAtNzksNyArNzksNyBAQAogCiAJaWYgKG1ldGggPT0gTlVMTCkKIAkJewotCQlFQ2VycihFQ19GX0VDX0dST1VQX05FVywgRVJSX1JfUEFTU0VEX05VTExfUEFSQU1FVEVSKTsKKwkJRUNlcnIoRUNfRl9FQ19HUk9VUF9ORVcsIEVDX1JfU0xPVF9GVUxMKTsKIAkJcmV0dXJuIE5VTEw7CiAJCX0KIAlpZiAobWV0aC0+Z3JvdXBfaW5pdCA9PSAwKQpAQCAtNzQwLDcgKzc0MCw3IEBACiAKIAlpZiAocG9pbnQtPm1ldGgtPnBvaW50X2NsZWFyX2ZpbmlzaCAhPSAwKQogCQlwb2ludC0+bWV0aC0+cG9pbnRfY2xlYXJfZmluaXNoKHBvaW50KTsKLQllbHNlIGlmIChwb2ludC0+bWV0aCAhPSBOVUxMICYmIHBvaW50LT5tZXRoLT5wb2ludF9maW5pc2ggIT0gMCkKKwllbHNlIGlmIChwb2ludC0+bWV0aC0+cG9pbnRfZmluaXNoICE9IDApCiAJCXBvaW50LT5tZXRoLT5wb2ludF9maW5pc2gocG9pbnQpOwogCU9QRU5TU0xfY2xlYW5zZShwb2ludCwgc2l6ZW9mICpwb2ludCk7CiAJT1BFTlNTTF9mcmVlKHBvaW50KTsKZGlmZiAtLWdpdCBhL2NyeXB0by9lYy9lY19tdWx0LmMgYi9jcnlwdG8vZWMvZWNfbXVsdC5jCmluZGV4IDJiYTE3M2UuLmYwNWRmNTMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9lYy9lY19tdWx0LmMKKysrIGIvY3J5cHRvL2VjL2VjX211bHQuYwpAQCAtMjI0LDYgKzIyNCwxMiBAQAogCQlzaWduID0gLTE7CiAJCX0KIAorCWlmIChzY2FsYXItPmQgPT0gTlVMTCB8fCBzY2FsYXItPnRvcCA9PSAwKQorCQl7CisJCUVDZXJyKEVDX0ZfQ09NUFVURV9XTkFGLCBFUlJfUl9JTlRFUk5BTF9FUlJPUik7CisJCWdvdG8gZXJyOworCQl9CisKIAlsZW4gPSBCTl9udW1fYml0cyhzY2FsYXIpOwogCXIgPSBPUEVOU1NMX21hbGxvYyhsZW4gKyAxKTsgLyogbW9kaWZpZWQgd05BRiBtYXkgYmUgb25lIGRpZ2l0IGxvbmdlciB0aGFuIGJpbmFyeSByZXByZXNlbnRhdGlvbgogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogKCpyZXRfbGVuIHdpbGwgYmUgc2V0IHRvIHRoZSBhY3R1YWwgbGVuZ3RoLCBpLmUuIGF0IG1vc3QKQEAgLTIzMywxMiArMjM5LDYgQEAKIAkJRUNlcnIoRUNfRl9DT01QVVRFX1dOQUYsIEVSUl9SX01BTExPQ19GQUlMVVJFKTsKIAkJZ290byBlcnI7CiAJCX0KLQotCWlmIChzY2FsYXItPmQgPT0gTlVMTCB8fCBzY2FsYXItPnRvcCA9PSAwKQotCQl7Ci0JCUVDZXJyKEVDX0ZfQ09NUFVURV9XTkFGLCBFUlJfUl9JTlRFUk5BTF9FUlJPUik7Ci0JCWdvdG8gZXJyOwotCQl9CiAJd2luZG93X3ZhbCA9IHNjYWxhci0+ZFswXSAmIG1hc2s7CiAJaiA9IDA7CiAJd2hpbGUgKCh3aW5kb3dfdmFsICE9IDApIHx8IChqICsgdyArIDEgPCBsZW4pKSAvKiBpZiBqK3crMSA+PSBsZW4sIHdpbmRvd192YWwgd2lsbCBub3QgaW5jcmVhc2UgKi8KQEAgLTQxOSw3ICs0MTksNyBAQAogCQkJaWYgKG51bWJsb2NrcyA+IHByZV9jb21wLT5udW1ibG9ja3MpCiAJCQkJbnVtYmxvY2tzID0gcHJlX2NvbXAtPm51bWJsb2NrczsKIAotCQkJcHJlX3BvaW50c19wZXJfYmxvY2sgPSAxdSA8PCAocHJlX2NvbXAtPncgLSAxKTsKKwkJCXByZV9wb2ludHNfcGVyX2Jsb2NrID0gKHNpemVfdCkxIDw8IChwcmVfY29tcC0+dyAtIDEpOwogCiAJCQkvKiBjaGVjayB0aGF0IHByZV9jb21wIGxvb2tzIHNhbmUgKi8KIAkJCWlmIChwcmVfY29tcC0+bnVtICE9IChwcmVfY29tcC0+bnVtYmxvY2tzICogcHJlX3BvaW50c19wZXJfYmxvY2spKQpAQCAtNDYxLDcgKzQ2MSw3IEBACiAKIAkJYml0cyA9IGkgPCBudW0gPyBCTl9udW1fYml0cyhzY2FsYXJzW2ldKSA6IEJOX251bV9iaXRzKHNjYWxhcik7CiAJCXdzaXplW2ldID0gRUNfd2luZG93X2JpdHNfZm9yX3NjYWxhcl9zaXplKGJpdHMpOwotCQludW1fdmFsICs9IDF1IDw8ICh3c2l6ZVtpXSAtIDEpOworCQludW1fdmFsICs9IChzaXplX3QpMSA8PCAod3NpemVbaV0gLSAxKTsKIAkJd05BRltpICsgMV0gPSBOVUxMOyAvKiBtYWtlIHN1cmUgd2UgYWx3YXlzIGhhdmUgYSBwaXZvdCAqLwogCQl3TkFGW2ldID0gY29tcHV0ZV93TkFGKChpIDwgbnVtID8gc2NhbGFyc1tpXSA6IHNjYWxhciksIHdzaXplW2ldLCAmd05BRl9sZW5baV0pOwogCQlpZiAod05BRltpXSA9PSBOVUxMKQpAQCAtNjAwLDcgKzYwMCw3IEBACiAJZm9yIChpID0gMDsgaSA8IG51bSArIG51bV9zY2FsYXI7IGkrKykKIAkJewogCQl2YWxfc3ViW2ldID0gdjsKLQkJZm9yIChqID0gMDsgaiA8ICgxdSA8PCAod3NpemVbaV0gLSAxKSk7IGorKykKKwkJZm9yIChqID0gMDsgaiA8ICgoc2l6ZV90KTEgPDwgKHdzaXplW2ldIC0gMSkpOyBqKyspCiAJCQl7CiAJCQkqdiA9IEVDX1BPSU5UX25ldyhncm91cCk7CiAJCQlpZiAoKnYgPT0gTlVMTCkgZ290byBlcnI7CkBAIC02MzYsNyArNjM2LDcgQEAKIAkJaWYgKHdzaXplW2ldID4gMSkKIAkJCXsKIAkJCWlmICghRUNfUE9JTlRfZGJsKGdyb3VwLCB0bXAsIHZhbF9zdWJbaV1bMF0sIGN0eCkpIGdvdG8gZXJyOwotCQkJZm9yIChqID0gMTsgaiA8ICgxdSA8PCAod3NpemVbaV0gLSAxKSk7IGorKykKKwkJCWZvciAoaiA9IDE7IGogPCAoKHNpemVfdCkxIDw8ICh3c2l6ZVtpXSAtIDEpKTsgaisrKQogCQkJCXsKIAkJCQlpZiAoIUVDX1BPSU5UX2FkZChncm91cCwgdmFsX3N1YltpXVtqXSwgdmFsX3N1YltpXVtqIC0gMV0sIHRtcCwgY3R4KSkgZ290byBlcnI7CiAJCQkJfQpAQCAtODIwLDcgKzgyMCw3IEBACiAKIAludW1ibG9ja3MgPSAoYml0cyArIGJsb2Nrc2l6ZSAtIDEpIC8gYmxvY2tzaXplOyAvKiBtYXguIG51bWJlciBvZiBibG9ja3MgdG8gdXNlIGZvciB3TkFGIHNwbGl0dGluZyAqLwogCQotCXByZV9wb2ludHNfcGVyX2Jsb2NrID0gMXUgPDwgKHcgLSAxKTsKKwlwcmVfcG9pbnRzX3Blcl9ibG9jayA9IChzaXplX3QpMSA8PCAodyAtIDEpOwogCW51bSA9IHByZV9wb2ludHNfcGVyX2Jsb2NrICogbnVtYmxvY2tzOyAvKiBudW1iZXIgb2YgcG9pbnRzIHRvIGNvbXB1dGUgYW5kIHN0b3JlICovCiAKIAlwb2ludHMgPSBPUEVOU1NMX21hbGxvYyhzaXplb2YgKEVDX1BPSU5UKikqKG51bSArIDEpKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9lYy9lY3BfbmlzdC5jIGIvY3J5cHRvL2VjL2VjcF9uaXN0LmMKaW5kZXggNzE4OTNkNS4uMmE1NjgyZSAxMDA2NDQKLS0tIGEvY3J5cHRvL2VjL2VjcF9uaXN0LmMKKysrIGIvY3J5cHRvL2VjL2VjcF9uaXN0LmMKQEAgLTExMiwxMCArMTEyLDYgQEAKIAlyZXR1cm4gJnJldDsKIAl9CiAKLSNpZiBCTl9CSVRTMiA9PSA2NAotI2RlZmluZQlOT18zMl9CSVRfVFlQRQotI2VuZGlmCi0KIGludCBlY19HRnBfbmlzdF9ncm91cF9jb3B5KEVDX0dST1VQICpkZXN0LCBjb25zdCBFQ19HUk9VUCAqc3JjKQogCXsKIAlkZXN0LT5maWVsZF9tb2RfZnVuYyA9IHNyYy0+ZmllbGRfbW9kX2Z1bmM7CkBAIC0xMzksMzQgKzEzNSwxMiBAQAogCWlmIChCTl91Y21wKEJOX2dldDBfbmlzdF9wcmltZV8xOTIoKSwgcCkgPT0gMCkKIAkJZ3JvdXAtPmZpZWxkX21vZF9mdW5jID0gQk5fbmlzdF9tb2RfMTkyOwogCWVsc2UgaWYgKEJOX3VjbXAoQk5fZ2V0MF9uaXN0X3ByaW1lXzIyNCgpLCBwKSA9PSAwKQotCQl7Ci0jaWZuZGVmIE5PXzMyX0JJVF9UWVBFCiAJCWdyb3VwLT5maWVsZF9tb2RfZnVuYyA9IEJOX25pc3RfbW9kXzIyNDsKLSNlbHNlCi0JCUVDZXJyKEVDX0ZfRUNfR0ZQX05JU1RfR1JPVVBfU0VUX0NVUlZFLCBFQ19SX05PVF9BX1NVUFBPUlRFRF9OSVNUX1BSSU1FKTsKLQkJZ290byBlcnI7Ci0jZW5kaWYKLQkJfQogCWVsc2UgaWYgKEJOX3VjbXAoQk5fZ2V0MF9uaXN0X3ByaW1lXzI1NigpLCBwKSA9PSAwKQotCQl7Ci0jaWZuZGVmIE5PXzMyX0JJVF9UWVBFCiAJCWdyb3VwLT5maWVsZF9tb2RfZnVuYyA9IEJOX25pc3RfbW9kXzI1NjsKLSNlbHNlCi0JCUVDZXJyKEVDX0ZfRUNfR0ZQX05JU1RfR1JPVVBfU0VUX0NVUlZFLCBFQ19SX05PVF9BX1NVUFBPUlRFRF9OSVNUX1BSSU1FKTsKLQkJZ290byBlcnI7Ci0jZW5kaWYKLQkJfQogCWVsc2UgaWYgKEJOX3VjbXAoQk5fZ2V0MF9uaXN0X3ByaW1lXzM4NCgpLCBwKSA9PSAwKQotCQl7Ci0jaWZuZGVmIE5PXzMyX0JJVF9UWVBFCiAJCWdyb3VwLT5maWVsZF9tb2RfZnVuYyA9IEJOX25pc3RfbW9kXzM4NDsKLSNlbHNlCi0JCUVDZXJyKEVDX0ZfRUNfR0ZQX05JU1RfR1JPVVBfU0VUX0NVUlZFLCBFQ19SX05PVF9BX1NVUFBPUlRFRF9OSVNUX1BSSU1FKTsKLQkJZ290byBlcnI7Ci0jZW5kaWYKLQkJfQogCWVsc2UgaWYgKEJOX3VjbXAoQk5fZ2V0MF9uaXN0X3ByaW1lXzUyMSgpLCBwKSA9PSAwKQotCQkvKiB0aGlzIG9uZSB3b3JrcyBpbiB0aGUgTk9fMzJfQklUX1RZUEUgY2FzZSAqLwogCQlncm91cC0+ZmllbGRfbW9kX2Z1bmMgPSBCTl9uaXN0X21vZF81MjE7CiAJZWxzZQogCQl7CmRpZmYgLS1naXQgYS9jcnlwdG8vZWMvZWN0ZXN0LmMgYi9jcnlwdG8vZWMvZWN0ZXN0LmMKaW5kZXggNjE0OGQ1NS4uNzUwOWNiOSAxMDA2NDQKLS0tIGEvY3J5cHRvL2VjL2VjdGVzdC5jCisrKyBiL2NyeXB0by9lYy9lY3Rlc3QuYwpAQCAtNDMyLDkgKzQzMiw3IEBACiAJaWYgKCFFQ19QT0lOVF9pc19hdF9pbmZpbml0eShncm91cCwgUSkpIEFCT1JUOwogCWZwcmludGYoc3Rkb3V0LCAiLiIpOwogCWZmbHVzaChzdGRvdXQpOwotI2lmIDAKIAlpZiAoIUVDX0dST1VQX3ByZWNvbXB1dGVfbXVsdChncm91cCwgY3R4KSkgQUJPUlQ7Ci0jZW5kaWYKIAlpZiAoIUVDX1BPSU5UX211bChncm91cCwgUSwgeiwgTlVMTCwgTlVMTCwgY3R4KSkgQUJPUlQ7CiAJaWYgKCFFQ19QT0lOVF9pc19hdF9pbmZpbml0eShncm91cCwgUSkpIEFCT1JUOwogCWZwcmludGYoc3Rkb3V0LCAiIG9rXG4iKTsKQEAgLTQ3OCw5ICs0NzYsNyBAQAogCWlmICghRUNfUE9JTlRfaXNfYXRfaW5maW5pdHkoZ3JvdXAsIFEpKSBBQk9SVDsKIAlmcHJpbnRmKHN0ZG91dCwgIi4iKTsKIAlmZmx1c2goc3Rkb3V0KTsKLSNpZiAwCiAJaWYgKCFFQ19HUk9VUF9wcmVjb21wdXRlX211bHQoZ3JvdXAsIGN0eCkpIEFCT1JUOwotI2VuZGlmCiAJaWYgKCFFQ19QT0lOVF9tdWwoZ3JvdXAsIFEsIHosIE5VTEwsIE5VTEwsIGN0eCkpIEFCT1JUOwogCWlmICghRUNfUE9JTlRfaXNfYXRfaW5maW5pdHkoZ3JvdXAsIFEpKSBBQk9SVDsKIAlmcHJpbnRmKHN0ZG91dCwgIiBva1xuIik7CkBAIC01MjUsOSArNTIxLDcgQEAKIAlpZiAoIUVDX1BPSU5UX2lzX2F0X2luZmluaXR5KGdyb3VwLCBRKSkgQUJPUlQ7CiAJZnByaW50ZihzdGRvdXQsICIuIik7CiAJZmZsdXNoKHN0ZG91dCk7Ci0jaWYgMAogCWlmICghRUNfR1JPVVBfcHJlY29tcHV0ZV9tdWx0KGdyb3VwLCBjdHgpKSBBQk9SVDsKLSNlbmRpZgogCWlmICghRUNfUE9JTlRfbXVsKGdyb3VwLCBRLCB6LCBOVUxMLCBOVUxMLCBjdHgpKSBBQk9SVDsKIAlpZiAoIUVDX1BPSU5UX2lzX2F0X2luZmluaXR5KGdyb3VwLCBRKSkgQUJPUlQ7CiAJZnByaW50ZihzdGRvdXQsICIgb2tcbiIpOwpAQCAtNTc3LDkgKzU3MSw3IEBACiAJaWYgKCFFQ19QT0lOVF9pc19hdF9pbmZpbml0eShncm91cCwgUSkpIEFCT1JUOwogCWZwcmludGYoc3Rkb3V0LCAiLiIpOwogCWZmbHVzaChzdGRvdXQpOwotI2lmIDAKIAlpZiAoIUVDX0dST1VQX3ByZWNvbXB1dGVfbXVsdChncm91cCwgY3R4KSkgQUJPUlQ7Ci0jZW5kaWYKIAlpZiAoIUVDX1BPSU5UX211bChncm91cCwgUSwgeiwgTlVMTCwgTlVMTCwgY3R4KSkgQUJPUlQ7CiAJaWYgKCFFQ19QT0lOVF9pc19hdF9pbmZpbml0eShncm91cCwgUSkpIEFCT1JUOwogCWZwcmludGYoc3Rkb3V0LCAiIG9rXG4iKTsKQEAgLTYzNSw5ICs2MjcsNyBAQAogCWlmICghRUNfUE9JTlRfaXNfYXRfaW5maW5pdHkoZ3JvdXAsIFEpKSBBQk9SVDsKIAlmcHJpbnRmKHN0ZG91dCwgIi4iKTsKIAlmZmx1c2goc3Rkb3V0KTsKLSNpZiAwCiAJaWYgKCFFQ19HUk9VUF9wcmVjb21wdXRlX211bHQoZ3JvdXAsIGN0eCkpIEFCT1JUOwotI2VuZGlmCiAJaWYgKCFFQ19QT0lOVF9tdWwoZ3JvdXAsIFEsIHosIE5VTEwsIE5VTEwsIGN0eCkpIEFCT1JUOwogCWlmICghRUNfUE9JTlRfaXNfYXRfaW5maW5pdHkoZ3JvdXAsIFEpKSBBQk9SVDsKIAlmcHJpbnRmKHN0ZG91dCwgIiBva1xuIik7CkBAIC04MDksNyArNzk5LDcgQEAKIAlpZiAoIUVDX1BPSU5UX2lzX2F0X2luZmluaXR5KGdyb3VwLCBRKSkgQUJPUlQ7IFwKIAlmcHJpbnRmKHN0ZG91dCwgIi4iKTsgXAogCWZmbHVzaChzdGRvdXQpOyBcCi0JLyogaWYgKCFFQ19HUk9VUF9wcmVjb21wdXRlX211bHQoZ3JvdXAsIGN0eCkpIEFCT1JUOyAqLyBcCisJaWYgKCFFQ19HUk9VUF9wcmVjb21wdXRlX211bHQoZ3JvdXAsIGN0eCkpIEFCT1JUOyBcCiAJaWYgKCFFQ19QT0lOVF9tdWwoZ3JvdXAsIFEsIHosIE5VTEwsIE5VTEwsIGN0eCkpIEFCT1JUOyBcCiAJaWYgKCFFQ19QT0lOVF9pc19hdF9pbmZpbml0eShncm91cCwgUSkpIEFCT1JUOyBcCiAJZnByaW50ZihzdGRvdXQsICIgb2tcbiIpOyBcCkBAIC0xMzM2LDcgKzEzMjYsNyBAQAogI2VuZGlmCiAJQ1JZUFRPX2NsZWFudXBfYWxsX2V4X2RhdGEoKTsKIAlFUlJfZnJlZV9zdHJpbmdzKCk7Ci0JRVJSX3JlbW92ZV9zdGF0ZSgwKTsKKwlFUlJfcmVtb3ZlX3RocmVhZF9zdGF0ZShOVUxMKTsKIAlDUllQVE9fbWVtX2xlYWtzX2ZwKHN0ZGVycik7CiAJCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9jcnlwdG8vZWNkaC9NYWtlZmlsZSBiL2NyeXB0by9lY2RoL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTdiNjE4Li4wMDAwMDAwCi0tLSBhL2NyeXB0by9lY2RoL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLSMKLSMgY3J5cHRvL2VjZGgvTWFrZWZpbGUKLSMKLQotRElSPQllY2RoCi1UT1A9CS4uLy4uCi1DQz0JY2MKLUlOQ0xVREVTPSAtSS4uIC1JJChUT1ApIC1JLi4vLi4vaW5jbHVkZQotQ0ZMQUc9LWcgLVdhbGwKLU1BS0VGSUxFPQlNYWtlZmlsZQotQVI9CQlhciByCi0KLUNGTEFHUz0gJChJTkNMVURFUykgJChDRkxBRykKLQotR0VORVJBTD1NYWtlZmlsZQotVEVTVD1lY2RodGVzdC5jCi1BUFBTPQotCi1MSUI9JChUT1ApL2xpYmNyeXB0by5hCi1MSUJTUkM9CWVjaF9saWIuYyBlY2hfb3NzbC5jIGVjaF9rZXkuYyBlY2hfZXJyLmMKLQotTElCT0JKPQllY2hfbGliLm8gZWNoX29zc2wubyBlY2hfa2V5Lm8gZWNoX2Vyci5vCi0KLVNSQz0gJChMSUJTUkMpCi0KLUVYSEVBREVSPSBlY2RoLmgKLUhFQURFUj0JZWNoX2xvY2wuaCAkKEVYSEVBREVSKQotCi1BTEw9ICAgICQoR0VORVJBTCkgJChTUkMpICQoSEVBREVSKQotCi10b3A6Ci0JKGNkIC4uLy4uOyAkKE1BS0UpIERJUlM9Y3J5cHRvIFNESVJTPSQoRElSKSBzdWJfYWxsKQotCi1hbGw6CWxpYgotCi1saWI6CSQoTElCT0JKKQotCSQoQVJYKSAkKExJQikgJChMSUJPQkopCi0JJChSQU5MSUIpICQoTElCKSB8fCBlY2hvIE5ldmVyIG1pbmQuCi0JQHRvdWNoIGxpYgotCi1maWxlczoKLQkkKFBFUkwpICQoVE9QKS91dGlsL2ZpbGVzLnBsIE1ha2VmaWxlID4+ICQoVE9QKS9NSU5GTwotCi1saW5rczoKLQlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vaW5jbHVkZS9vcGVuc3NsICQoRVhIRUFERVIpCi0JQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL3Rlc3QgJChURVNUKQotCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9hcHBzICQoQVBQUykKLQotaW5zdGFsbDoKLQlAWyAtbiAiJChJTlNUQUxMVE9QKSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdG9wIE1ha2VmaWxlLi4uCi0JQGhlYWRlcmxpc3Q9IiQoRVhIRUFERVIpIjsgZm9yIGkgaW4gJCRoZWFkZXJsaXN0OyBcCi0JZG8gIFwKLQkoY3AgJCRpICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpOyBcCi0JY2htb2QgNjQ0ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpICk7IFwKLQlkb25lOwotCi10YWdzOgotCWN0YWdzICQoU1JDKQotCi10ZXN0czoKLQotbGludDoKLQlsaW50IC1ETElOVCAkKElOQ0xVREVTKSAkKFNSQyk+Zmx1ZmYKLQotZGVwZW5kOgotCUBbIC1uICIkKE1BS0VERVBFTkQpIiBdICMgc2hvdWxkIGJlIHNldCBieSB1cHBlciBNYWtlZmlsZS4uLgotCSQoTUFLRURFUEVORCkgLS0gJChDRkxBRykgJChJTkNMVURFUykgJChERVBGTEFHKSAtLSAkKFBST0dTKSAkKExJQlNSQykKLQotZGNsZWFuOgotCSQoUEVSTCkgLXBlICdpZiAoL14jIERPIE5PVCBERUxFVEUgVEhJUyBMSU5FLykge3ByaW50OyBleGl0KDApO30nICQoTUFLRUZJTEUpID5NYWtlZmlsZS5uZXcKLQltdiAtZiBNYWtlZmlsZS5uZXcgJChNQUtFRklMRSkKLQotY2xlYW46Ci0Jcm0gLWYgKi5vICovKi5vICoub2JqIGxpYiB0YWdzIGNvcmUgLnB1cmUgLm5mcyogKi5vbGQgKi5iYWsgZmx1ZmYKLQotIyBETyBOT1QgREVMRVRFIFRISVMgTElORSAtLSBtYWtlIGRlcGVuZCBkZXBlbmRzIG9uIGl0LgotCi1lY2hfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1lY2hfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotZWNoX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi1lY2hfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotZWNoX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotZWNoX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLWVjaF9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLWVjaF9lcnIubzogZWNoX2Vyci5jCi1lY2hfa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1lY2hfa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWVjaF9rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLWVjaF9rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotZWNoX2tleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZW5naW5lLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1lY2hfa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLWVjaF9rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi1lY2hfa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi1lY2hfa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi1lY2hfa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLWVjaF9rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLWVjaF9rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAotZWNoX2tleS5vOiBlY2hfa2V5LmMgZWNoX2xvY2wuaAotZWNoX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotZWNoX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1lY2hfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1lY2hfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLWVjaF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotZWNoX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotZWNoX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi1lY2hfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWVjaF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWVjaF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1lY2hfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotZWNoX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi1lY2hfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIGVjaF9saWIuYyBlY2hfbG9jbC5oCi1lY2hfb3NzbC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotZWNoX29zc2wubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oCi1lY2hfb3NzbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1lY2hfb3NzbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotZWNoX29zc2wubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWVjaF9vc3NsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLWVjaF9vc3NsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1lY2hfb3NzbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotZWNoX29zc2wubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotZWNoX29zc2wubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLWVjaF9vc3NsLm86IC4uL2NyeXB0bGliLmggZWNoX2xvY2wuaCBlY2hfb3NzbC5jCmRpZmYgLS1naXQgYS9jcnlwdG8vZWNkaC9lY2RodGVzdC5jIGIvY3J5cHRvL2VjZGgvZWNkaHRlc3QuYwppbmRleCAxNTc1MDA2Li4yMTJhODdlIDEwMDY0NAotLS0gYS9jcnlwdG8vZWNkaC9lY2RodGVzdC5jCisrKyBiL2NyeXB0by9lY2RoL2VjZGh0ZXN0LmMKQEAgLTM0Myw3ICszNDMsNyBAQAogCWlmIChjdHgpIEJOX0NUWF9mcmVlKGN0eCk7CiAJQklPX2ZyZWUob3V0KTsKIAlDUllQVE9fY2xlYW51cF9hbGxfZXhfZGF0YSgpOwotCUVSUl9yZW1vdmVfc3RhdGUoMCk7CisJRVJSX3JlbW92ZV90aHJlYWRfc3RhdGUoTlVMTCk7CiAJQ1JZUFRPX21lbV9sZWFrc19mcChzdGRlcnIpOwogCUVYSVQocmV0KTsKIAlyZXR1cm4ocmV0KTsKZGlmZiAtLWdpdCBhL2NyeXB0by9lY2RoL2VjaF9lcnIuYyBiL2NyeXB0by9lY2RoL2VjaF9lcnIuYwppbmRleCA0ZDJlZGU3Li42ZjRiMGM5IDEwMDY0NAotLS0gYS9jcnlwdG8vZWNkaC9lY2hfZXJyLmMKKysrIGIvY3J5cHRvL2VjZGgvZWNoX2Vyci5jCkBAIC0xLDYgKzEsNiBAQAogLyogY3J5cHRvL2VjZGgvZWNoX2Vyci5jICovCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNiBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzEsNyArNzEsNyBAQAogc3RhdGljIEVSUl9TVFJJTkdfREFUQSBFQ0RIX3N0cl9mdW5jdHNbXT0KIAl7CiB7RVJSX0ZVTkMoRUNESF9GX0VDREhfQ09NUFVURV9LRVkpLAkiRUNESF9jb21wdXRlX2tleSJ9LAote0VSUl9GVU5DKEVDREhfRl9FQ0RIX0RBVEFfTkVXX01FVEhPRCksCSJFQ0RIX0RBVEFfTkVXX01FVEhPRCJ9LAore0VSUl9GVU5DKEVDREhfRl9FQ0RIX0RBVEFfTkVXX01FVEhPRCksCSJFQ0RIX0RBVEFfbmV3X21ldGhvZCJ9LAogezAsTlVMTH0KIAl9OwogCmRpZmYgLS1naXQgYS9jcnlwdG8vZWNkc2EvTWFrZWZpbGUgYi9jcnlwdG8vZWNkc2EvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5ZTI2ODEuLjAwMDAwMDAKLS0tIGEvY3J5cHRvL2VjZHNhL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMTQzICswLDAgQEAKLSMKLSMgY3J5cHRvL2VjZHNhL01ha2VmaWxlCi0jCi0KLURJUj0JZWNkc2EKLVRPUD0JLi4vLi4KLUNDPQljYwotSU5DTFVERVM9IC1JLi4gLUkkKFRPUCkgLUkuLi8uLi9pbmNsdWRlCi1DRkxBRz0tZyAtV2FsbAotTUFLRUZJTEU9CU1ha2VmaWxlCi1BUj0JCWFyIHIKLQotQ0ZMQUdTPSAkKElOQ0xVREVTKSAkKENGTEFHKQotCi1HRU5FUkFMPU1ha2VmaWxlCi1URVNUPWVjZHNhdGVzdC5jCi1BUFBTPQotCi1MSUI9JChUT1ApL2xpYmNyeXB0by5hCi1MSUJTUkM9CWVjc19saWIuYyBlY3NfYXNuMS5jIGVjc19vc3NsLmMgZWNzX3NpZ24uYyBlY3NfdnJmLmMgZWNzX2Vyci5jCi0KLUxJQk9CSj0JZWNzX2xpYi5vIGVjc19hc24xLm8gZWNzX29zc2wubyBlY3Nfc2lnbi5vIGVjc192cmYubyBlY3NfZXJyLm8KLQotU1JDPSAkKExJQlNSQykKLQotRVhIRUFERVI9IGVjZHNhLmgKLUhFQURFUj0JZWNzX2xvY2wuaCAkKEVYSEVBREVSKQotCi1BTEw9ICAgICQoR0VORVJBTCkgJChTUkMpICQoSEVBREVSKQotCi10b3A6Ci0JKGNkIC4uLy4uOyAkKE1BS0UpIERJUlM9Y3J5cHRvIFNESVJTPSQoRElSKSBzdWJfYWxsKQotCi1hbGw6CWxpYgotCi1saWI6CSQoTElCT0JKKQotCSQoQVJYKSAkKExJQikgJChMSUJPQkopCi0JJChSQU5MSUIpICQoTElCKSB8fCBlY2hvIE5ldmVyIG1pbmQuCi0JQHRvdWNoIGxpYgotCi1maWxlczoKLQkkKFBFUkwpICQoVE9QKS91dGlsL2ZpbGVzLnBsIE1ha2VmaWxlID4+ICQoVE9QKS9NSU5GTwotCi1saW5rczoKLQlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vaW5jbHVkZS9vcGVuc3NsICQoRVhIRUFERVIpCi0JQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL3Rlc3QgJChURVNUKQotCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9hcHBzICQoQVBQUykKLQotaW5zdGFsbDoKLQlAWyAtbiAiJChJTlNUQUxMVE9QKSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdG9wIE1ha2VmaWxlLi4uCi0JQGhlYWRlcmxpc3Q9IiQoRVhIRUFERVIpIjsgZm9yIGkgaW4gJCRoZWFkZXJsaXN0OyBcCi0JZG8gIFwKLQkoY3AgJCRpICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpOyBcCi0JY2htb2QgNjQ0ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpICk7IFwKLQlkb25lOwotCi10YWdzOgotCWN0YWdzICQoU1JDKQotCi10ZXN0czoKLQotbGludDoKLQlsaW50IC1ETElOVCAkKElOQ0xVREVTKSAkKFNSQyk+Zmx1ZmYKLQotZGVwZW5kOgotCUBbIC1uICIkKE1BS0VERVBFTkQpIiBdICMgc2hvdWxkIGJlIHNldCBieSB1cHBlciBNYWtlZmlsZS4uLgotCSQoTUFLRURFUEVORCkgLS0gJChDRkxBRykgJChJTkNMVURFUykgJChERVBGTEFHKSAtLSAkKFBST0dTKSAkKExJQlNSQykKLQotZGNsZWFuOgotCSQoUEVSTCkgLXBlICdpZiAoL14jIERPIE5PVCBERUxFVEUgVEhJUyBMSU5FLykge3ByaW50OyBleGl0KDApO30nICQoTUFLRUZJTEUpID5NYWtlZmlsZS5uZXcKLQltdiAtZiBNYWtlZmlsZS5uZXcgJChNQUtFRklMRSkKLQotY2xlYW46Ci0Jcm0gLWYgKi5vICovKi5vICoub2JqIGxpYiB0YWdzIGNvcmUgLnB1cmUgLm5mcyogKi5vbGQgKi5iYWsgZmx1ZmYKLQotIyBETyBOT1QgREVMRVRFIFRISVMgTElORSAtLSBtYWtlIGRlcGVuZCBkZXBlbmRzIG9uIGl0LgotCi1lY3NfYXNuMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xdC5oCi1lY3NfYXNuMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1lY3NfYXNuMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotZWNzX2FzbjEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1lY3NfYXNuMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotZWNzX2FzbjEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWVjc19hc24xLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotZWNzX2FzbjEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZWNzX2FzbjEuYyBlY3NfbG9jbC5oCi1lY3NfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1lY3NfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotZWNzX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotZWNzX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLWVjc19lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLWVjc19lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1lY3NfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1lY3NfZXJyLm86IGVjc19lcnIuYwotZWNzX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotZWNzX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLWVjc19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1lY3NfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKLWVjc19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oCi1lY3NfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLWVjc19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotZWNzX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLWVjc19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLWVjc19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLWVjc19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotZWNzX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotZWNzX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oCi1lY3NfbGliLm86IGVjc19saWIuYyBlY3NfbG9jbC5oCi1lY3Nfb3NzbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotZWNzX29zc2wubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1lY3Nfb3NzbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotZWNzX29zc2wubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1lY3Nfb3NzbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi1lY3Nfb3NzbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotZWNzX29zc2wubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWVjc19vc3NsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotZWNzX29zc2wubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZWNzX2xvY2wuaCBlY3Nfb3NzbC5jCi1lY3Nfc2lnbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotZWNzX3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotZWNzX3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLWVjc19zaWduLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLWVjc19zaWduLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lbmdpbmUuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLWVjc19zaWduLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLWVjc19zaWduLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotZWNzX3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWVjc19zaWduLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1lY3Nfc2lnbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCi1lY3Nfc2lnbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCi1lY3Nfc2lnbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotZWNzX3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAotZWNzX3NpZ24ubzogZWNzX2xvY2wuaCBlY3Nfc2lnbi5jCi1lY3NfdnJmLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1lY3NfdnJmLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWVjc192cmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLWVjc192cmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotZWNzX3ZyZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZW5naW5lLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1lY3NfdnJmLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLWVjc192cmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi1lY3NfdnJmLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi1lY3NfdnJmLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi1lY3NfdnJmLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLWVjc192cmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLWVjc192cmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAotZWNzX3ZyZi5vOiBlY3NfbG9jbC5oIGVjc192cmYuYwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2VjZHNhL2VjZHNhLmggYi9jcnlwdG8vZWNkc2EvZWNkc2EuaAppbmRleCBmMjBjOGVlLi5lNjFjNTM5IDEwMDY0NAotLS0gYS9jcnlwdG8vZWNkc2EvZWNkc2EuaAorKysgYi9jcnlwdG8vZWNkc2EvZWNkc2EuaApAQCAtNCw3ICs0LDcgQEAKICAqIFxhdXRob3IgV3JpdHRlbiBieSBOaWxzIExhcnNjaCBmb3IgdGhlIE9wZW5TU0wgcHJvamVjdAogICovCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODEsMTU2ICs4MSwxNDMgQEAKIAlCSUdOVU0gKnM7CiAJfSBFQ0RTQV9TSUc7CiAKLS8qKiBFQ0RTQV9TSUcgKkVDRFNBX1NJR19uZXcodm9pZCkKLSAqIGFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZSBhIEVDRFNBX1NJRyBzdHJ1Y3R1cmUKLSAqIFxyZXR1cm4gcG9pbnRlciB0byBhIEVDRFNBX1NJRyBzdHJ1Y3R1cmUgb3IgTlVMTCBpZiBhbiBlcnJvciBvY2N1cnJlZAorLyoqIEFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZSBhIEVDRFNBX1NJRyBzdHJ1Y3R1cmUKKyAqICBccmV0dXJuIHBvaW50ZXIgdG8gYSBFQ0RTQV9TSUcgc3RydWN0dXJlIG9yIE5VTEwgaWYgYW4gZXJyb3Igb2NjdXJyZWQKICAqLwogRUNEU0FfU0lHICpFQ0RTQV9TSUdfbmV3KHZvaWQpOwogCi0vKiogRUNEU0FfU0lHX2ZyZWUKLSAqIGZyZWVzIGEgRUNEU0FfU0lHIHN0cnVjdHVyZQotICogXHBhcmFtIGEgcG9pbnRlciB0byB0aGUgRUNEU0FfU0lHIHN0cnVjdHVyZQorLyoqIGZyZWVzIGEgRUNEU0FfU0lHIHN0cnVjdHVyZQorICogIFxwYXJhbSAgc2lnICBwb2ludGVyIHRvIHRoZSBFQ0RTQV9TSUcgc3RydWN0dXJlCiAgKi8KLXZvaWQJICBFQ0RTQV9TSUdfZnJlZShFQ0RTQV9TSUcgKmEpOwordm9pZAkgIEVDRFNBX1NJR19mcmVlKEVDRFNBX1NJRyAqc2lnKTsKIAotLyoqIGkyZF9FQ0RTQV9TSUcKLSAqIERFUiBlbmNvZGUgY29udGVudCBvZiBFQ0RTQV9TSUcgb2JqZWN0IChub3RlOiB0aGlzIGZ1bmN0aW9uIG1vZGlmaWVzICpwcAotICogKCpwcCArPSBsZW5ndGggb2YgdGhlIERFUiBlbmNvZGVkIHNpZ25hdHVyZSkpLgotICogXHBhcmFtIGEgIHBvaW50ZXIgdG8gdGhlIEVDRFNBX1NJRyBvYmplY3QKLSAqIFxwYXJhbSBwcCBwb2ludGVyIHRvIGEgdW5zaWduZWQgY2hhciBwb2ludGVyIGZvciB0aGUgb3V0cHV0IG9yIE5VTEwKLSAqIFxyZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgREVSIGVuY29kZWQgRUNEU0FfU0lHIG9iamVjdCBvciAwIAorLyoqIERFUiBlbmNvZGUgY29udGVudCBvZiBFQ0RTQV9TSUcgb2JqZWN0IChub3RlOiB0aGlzIGZ1bmN0aW9uIG1vZGlmaWVzICpwcAorICogICgqcHAgKz0gbGVuZ3RoIG9mIHRoZSBERVIgZW5jb2RlZCBzaWduYXR1cmUpKS4KKyAqICBccGFyYW0gIHNpZyAgcG9pbnRlciB0byB0aGUgRUNEU0FfU0lHIG9iamVjdAorICogIFxwYXJhbSAgcHAgICBwb2ludGVyIHRvIGEgdW5zaWduZWQgY2hhciBwb2ludGVyIGZvciB0aGUgb3V0cHV0IG9yIE5VTEwKKyAqICBccmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIERFUiBlbmNvZGVkIEVDRFNBX1NJRyBvYmplY3Qgb3IgMCAKICAqLwotaW50CSAgaTJkX0VDRFNBX1NJRyhjb25zdCBFQ0RTQV9TSUcgKmEsIHVuc2lnbmVkIGNoYXIgKipwcCk7CitpbnQJICBpMmRfRUNEU0FfU0lHKGNvbnN0IEVDRFNBX1NJRyAqc2lnLCB1bnNpZ25lZCBjaGFyICoqcHApOwogCi0vKiogZDJpX0VDRFNBX1NJRwotICogZGVjb2RlcyBhIERFUiBlbmNvZGVkIEVDRFNBIHNpZ25hdHVyZSAobm90ZTogdGhpcyBmdW5jdGlvbiBjaGFuZ2VzICpwcAotICogKCpwcCArPSBsZW4pKS4gCi0gKiBccGFyYW0gdiBwb2ludGVyIHRvIEVDRFNBX1NJRyBwb2ludGVyIChtYXkgYmUgTlVMTCkKLSAqIFxwYXJhbSBwcCBidWZmZXIgd2l0aCB0aGUgREVSIGVuY29kZWQgc2lnbmF0dXJlCi0gKiBccGFyYW0gbGVuIGJ1ZmZlcmxlbmd0aAotICogXHJldHVybiBwb2ludGVyIHRvIHRoZSBkZWNvZGVkIEVDRFNBX1NJRyBzdHJ1Y3R1cmUgKG9yIE5VTEwpCisvKiogRGVjb2RlcyBhIERFUiBlbmNvZGVkIEVDRFNBIHNpZ25hdHVyZSAobm90ZTogdGhpcyBmdW5jdGlvbiBjaGFuZ2VzICpwcAorICogICgqcHAgKz0gbGVuKSkuIAorICogIFxwYXJhbSAgc2lnICBwb2ludGVyIHRvIEVDRFNBX1NJRyBwb2ludGVyIChtYXkgYmUgTlVMTCkKKyAqICBccGFyYW0gIHBwICAgbWVtb3J5IGJ1ZmZlciB3aXRoIHRoZSBERVIgZW5jb2RlZCBzaWduYXR1cmUKKyAqICBccGFyYW0gIGxlbiAgbGVuZ3RoIG9mIHRoZSBidWZmZXIKKyAqICBccmV0dXJuIHBvaW50ZXIgdG8gdGhlIGRlY29kZWQgRUNEU0FfU0lHIHN0cnVjdHVyZSAob3IgTlVMTCkKICAqLwotRUNEU0FfU0lHICpkMmlfRUNEU0FfU0lHKEVDRFNBX1NJRyAqKnYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKipwcCwgbG9uZyBsZW4pOworRUNEU0FfU0lHICpkMmlfRUNEU0FfU0lHKEVDRFNBX1NJRyAqKnNpZywgY29uc3QgdW5zaWduZWQgY2hhciAqKnBwLCBsb25nIGxlbik7CiAKLS8qKiBFQ0RTQV9kb19zaWduCi0gKiBjb21wdXRlcyB0aGUgRUNEU0Egc2lnbmF0dXJlIG9mIHRoZSBnaXZlbiBoYXNoIHZhbHVlIHVzaW5nCi0gKiB0aGUgc3VwcGxpZWQgcHJpdmF0ZSBrZXkgYW5kIHJldHVybnMgdGhlIGNyZWF0ZWQgc2lnbmF0dXJlLgotICogXHBhcmFtIGRnc3QgcG9pbnRlciB0byB0aGUgaGFzaCB2YWx1ZQotICogXHBhcmFtIGRnc3RfbGVuIGxlbmd0aCBvZiB0aGUgaGFzaCB2YWx1ZQotICogXHBhcmFtIGVja2V5IHBvaW50ZXIgdG8gdGhlIEVDX0tFWSBvYmplY3QgY29udGFpbmluZyBhIHByaXZhdGUgRUMga2V5Ci0gKiBccmV0dXJuIHBvaW50ZXIgdG8gYSBFQ0RTQV9TSUcgc3RydWN0dXJlIG9yIE5VTEwKKy8qKiBDb21wdXRlcyB0aGUgRUNEU0Egc2lnbmF0dXJlIG9mIHRoZSBnaXZlbiBoYXNoIHZhbHVlIHVzaW5nCisgKiAgdGhlIHN1cHBsaWVkIHByaXZhdGUga2V5IGFuZCByZXR1cm5zIHRoZSBjcmVhdGVkIHNpZ25hdHVyZS4KKyAqICBccGFyYW0gIGRnc3QgICAgICBwb2ludGVyIHRvIHRoZSBoYXNoIHZhbHVlCisgKiAgXHBhcmFtICBkZ3N0X2xlbiAgbGVuZ3RoIG9mIHRoZSBoYXNoIHZhbHVlCisgKiAgXHBhcmFtICBlY2tleSAgICAgRUNfS0VZIG9iamVjdCBjb250YWluaW5nIGEgcHJpdmF0ZSBFQyBrZXkKKyAqICBccmV0dXJuIHBvaW50ZXIgdG8gYSBFQ0RTQV9TSUcgc3RydWN0dXJlIG9yIE5VTEwgaWYgYW4gZXJyb3Igb2NjdXJyZWQKICAqLwogRUNEU0FfU0lHICpFQ0RTQV9kb19zaWduKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRnc3QsaW50IGRnc3RfbGVuLEVDX0tFWSAqZWNrZXkpOwogCi0vKiogRUNEU0FfZG9fc2lnbl9leAotICogY29tcHV0ZXMgRUNEU0Egc2lnbmF0dXJlIG9mIGEgZ2l2ZW4gaGFzaCB2YWx1ZSB1c2luZyB0aGUgc3VwcGxpZWQKLSAqIHByaXZhdGUga2V5IChub3RlOiBzaWcgbXVzdCBwb2ludCB0byBFQ0RTQV9zaXplKGVja2V5KSBieXRlcyBvZiBtZW1vcnkpLgotICogXHBhcmFtIGRnc3QgcG9pbnRlciB0byB0aGUgaGFzaCB2YWx1ZSB0byBzaWduCi0gKiBccGFyYW0gZGdzdGxlbiBsZW5ndGggb2YgdGhlIGhhc2ggdmFsdWUKLSAqIFxwYXJhbSBraW52IG9wdGlvbmFsIHBvaW50ZXIgdG8gYSBwcmUtY29tcHV0ZWQgaW52ZXJzZSBrCi0gKiBccGFyYW0gcnAgb3B0aW9uYWwgcG9pbnRlciB0byB0aGUgcHJlLWNvbXB1dGVkIHJwIHZhbHVlIChzZWUgCi0gKiAgICAgICAgRUNEU0Ffc2lnbl9zZXR1cAotICogXHBhcmFtIGVja2V5IHBvaW50ZXIgdG8gdGhlIEVDX0tFWSBvYmplY3QgY29udGFpbmluZyBhIHByaXZhdGUgRUMga2V5Ci0gKiBccmV0dXJuIHBvaW50ZXIgdG8gYSBFQ0RTQV9TSUcgc3RydWN0dXJlIG9yIE5VTEwKKy8qKiBDb21wdXRlcyBFQ0RTQSBzaWduYXR1cmUgb2YgYSBnaXZlbiBoYXNoIHZhbHVlIHVzaW5nIHRoZSBzdXBwbGllZAorICogIHByaXZhdGUga2V5IChub3RlOiBzaWcgbXVzdCBwb2ludCB0byBFQ0RTQV9zaXplKGVja2V5KSBieXRlcyBvZiBtZW1vcnkpLgorICogIFxwYXJhbSAgZGdzdCAgICAgcG9pbnRlciB0byB0aGUgaGFzaCB2YWx1ZSB0byBzaWduCisgKiAgXHBhcmFtICBkZ3N0bGVuICBsZW5ndGggb2YgdGhlIGhhc2ggdmFsdWUKKyAqICBccGFyYW0gIGtpbnYgICAgIEJJR05VTSB3aXRoIGEgcHJlLWNvbXB1dGVkIGludmVyc2UgayAob3B0aW9uYWwpCisgKiAgXHBhcmFtICBycCAgICAgICBCSUdOVU0gd2l0aCBhIHByZS1jb21wdXRlZCBycCB2YWx1ZSAob3B0aW9hbmwpLCAKKyAqICAgICAgICAgICAgICAgICAgIHNlZSBFQ0RTQV9zaWduX3NldHVwCisgKiAgXHBhcmFtICBlY2tleSAgICBFQ19LRVkgb2JqZWN0IGNvbnRhaW5pbmcgYSBwcml2YXRlIEVDIGtleQorICogIFxyZXR1cm4gcG9pbnRlciB0byBhIEVDRFNBX1NJRyBzdHJ1Y3R1cmUgb3IgTlVMTCBpZiBhbiBlcnJvciBvY2N1cnJlZAogICovCiBFQ0RTQV9TSUcgKkVDRFNBX2RvX3NpZ25fZXgoY29uc3QgdW5zaWduZWQgY2hhciAqZGdzdCwgaW50IGRnc3RsZW4sIAogCQljb25zdCBCSUdOVU0gKmtpbnYsIGNvbnN0IEJJR05VTSAqcnAsIEVDX0tFWSAqZWNrZXkpOwogCi0vKiogRUNEU0FfZG9fdmVyaWZ5Ci0gKiB2ZXJpZmllcyB0aGF0IHRoZSBzdXBwbGllZCBzaWduYXR1cmUgaXMgYSB2YWxpZCBFQ0RTQQotICogc2lnbmF0dXJlIG9mIHRoZSBzdXBwbGllZCBoYXNoIHZhbHVlIHVzaW5nIHRoZSBzdXBwbGllZCBwdWJsaWMga2V5LgotICogXHBhcmFtIGRnc3QgcG9pbnRlciB0byB0aGUgaGFzaCB2YWx1ZQotICogXHBhcmFtIGRnc3RfbGVuIGxlbmd0aCBvZiB0aGUgaGFzaCB2YWx1ZQotICogXHBhcmFtIHNpZyAgcG9pbnRlciB0byB0aGUgRUNEU0FfU0lHIHN0cnVjdHVyZQotICogXHBhcmFtIGVja2V5IHBvaW50ZXIgdG8gdGhlIEVDX0tFWSBvYmplY3QgY29udGFpbmluZyBhIHB1YmxpYyBFQyBrZXkKLSAqIFxyZXR1cm4gMSBpZiB0aGUgc2lnbmF0dXJlIGlzIHZhbGlkLCAwIGlmIHRoZSBzaWduYXR1cmUgaXMgaW52YWxpZCBhbmQgLTEgb24gZXJyb3IKKy8qKiBWZXJpZmllcyB0aGF0IHRoZSBzdXBwbGllZCBzaWduYXR1cmUgaXMgYSB2YWxpZCBFQ0RTQQorICogIHNpZ25hdHVyZSBvZiB0aGUgc3VwcGxpZWQgaGFzaCB2YWx1ZSB1c2luZyB0aGUgc3VwcGxpZWQgcHVibGljIGtleS4KKyAqICBccGFyYW0gIGRnc3QgICAgICBwb2ludGVyIHRvIHRoZSBoYXNoIHZhbHVlCisgKiAgXHBhcmFtICBkZ3N0X2xlbiAgbGVuZ3RoIG9mIHRoZSBoYXNoIHZhbHVlCisgKiAgXHBhcmFtICBzaWcgICAgICAgRUNEU0FfU0lHIHN0cnVjdHVyZQorICogIFxwYXJhbSAgZWNrZXkgICAgIEVDX0tFWSBvYmplY3QgY29udGFpbmluZyBhIHB1YmxpYyBFQyBrZXkKKyAqICBccmV0dXJuIDEgaWYgdGhlIHNpZ25hdHVyZSBpcyB2YWxpZCwgMCBpZiB0aGUgc2lnbmF0dXJlIGlzIGludmFsaWQKKyAqICAgICAgICAgIGFuZCAtMSBvbiBlcnJvcgogICovCiBpbnQJICBFQ0RTQV9kb192ZXJpZnkoY29uc3QgdW5zaWduZWQgY2hhciAqZGdzdCwgaW50IGRnc3RfbGVuLAogCQljb25zdCBFQ0RTQV9TSUcgKnNpZywgRUNfS0VZKiBlY2tleSk7CiAKIGNvbnN0IEVDRFNBX01FVEhPRCAqRUNEU0FfT3BlblNTTCh2b2lkKTsKIAotLyoqIEVDRFNBX3NldF9kZWZhdWx0X21ldGhvZAotICogc2V0cyB0aGUgZGVmYXVsdCBFQ0RTQSBtZXRob2QKLSAqIFxwYXJhbSBtZXRoIHRoZSBuZXcgZGVmYXVsdCBFQ0RTQV9NRVRIT0QKKy8qKiBTZXRzIHRoZSBkZWZhdWx0IEVDRFNBIG1ldGhvZAorICogIFxwYXJhbSAgbWV0aCAgbmV3IGRlZmF1bHQgRUNEU0FfTUVUSE9ECiAgKi8KIHZvaWQJICBFQ0RTQV9zZXRfZGVmYXVsdF9tZXRob2QoY29uc3QgRUNEU0FfTUVUSE9EICptZXRoKTsKIAotLyoqIEVDRFNBX2dldF9kZWZhdWx0X21ldGhvZAotICogcmV0dXJucyB0aGUgZGVmYXVsdCBFQ0RTQSBtZXRob2QKLSAqIFxyZXR1cm4gcG9pbnRlciB0byBFQ0RTQV9NRVRIT0Qgc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlIGRlZmF1bHQgbWV0aG9kCisvKiogUmV0dXJucyB0aGUgZGVmYXVsdCBFQ0RTQSBtZXRob2QKKyAqICBccmV0dXJuIHBvaW50ZXIgdG8gRUNEU0FfTUVUSE9EIHN0cnVjdHVyZSBjb250YWluaW5nIHRoZSBkZWZhdWx0IG1ldGhvZAogICovCiBjb25zdCBFQ0RTQV9NRVRIT0QgKkVDRFNBX2dldF9kZWZhdWx0X21ldGhvZCh2b2lkKTsKIAotLyoqIEVDRFNBX3NldF9tZXRob2QKLSAqIHNldHMgbWV0aG9kIHRvIGJlIHVzZWQgZm9yIHRoZSBFQ0RTQSBvcGVyYXRpb25zCi0gKiBccGFyYW0gZWNrZXkgcG9pbnRlciB0byB0aGUgRUNfS0VZIG9iamVjdAotICogXHBhcmFtIG1ldGggIHBvaW50ZXIgdG8gdGhlIG5ldyBtZXRob2QKLSAqIFxyZXR1cm4gMSBvbiBzdWNjZXNzIGFuZCAwIG90aGVyd2lzZSAKKy8qKiBTZXRzIG1ldGhvZCB0byBiZSB1c2VkIGZvciB0aGUgRUNEU0Egb3BlcmF0aW9ucworICogIFxwYXJhbSAgZWNrZXkgIEVDX0tFWSBvYmplY3QKKyAqICBccGFyYW0gIG1ldGggICBuZXcgbWV0aG9kCisgKiAgXHJldHVybiAxIG9uIHN1Y2Nlc3MgYW5kIDAgb3RoZXJ3aXNlIAogICovCiBpbnQgCSAgRUNEU0Ffc2V0X21ldGhvZChFQ19LRVkgKmVja2V5LCBjb25zdCBFQ0RTQV9NRVRIT0QgKm1ldGgpOwogCi0vKiogRUNEU0Ffc2l6ZQotICogcmV0dXJucyB0aGUgbWF4aW11bSBsZW5ndGggb2YgdGhlIERFUiBlbmNvZGVkIHNpZ25hdHVyZQotICogXHBhcmFtICBlY2tleSBwb2ludGVyIHRvIGEgRUNfS0VZIG9iamVjdAotICogXHJldHVybiBudW1iZXJzIG9mIGJ5dGVzIHJlcXVpcmVkIGZvciB0aGUgREVSIGVuY29kZWQgc2lnbmF0dXJlCisvKiogUmV0dXJucyB0aGUgbWF4aW11bSBsZW5ndGggb2YgdGhlIERFUiBlbmNvZGVkIHNpZ25hdHVyZQorICogIFxwYXJhbSAgZWNrZXkgIEVDX0tFWSBvYmplY3QKKyAqICBccmV0dXJuIG51bWJlcnMgb2YgYnl0ZXMgcmVxdWlyZWQgZm9yIHRoZSBERVIgZW5jb2RlZCBzaWduYXR1cmUKICAqLwogaW50CSAgRUNEU0Ffc2l6ZShjb25zdCBFQ19LRVkgKmVja2V5KTsKIAotLyoqIEVDRFNBX3NpZ25fc2V0dXAKLSAqIHByZWNvbXB1dGUgcGFydHMgb2YgdGhlIHNpZ25pbmcgb3BlcmF0aW9uLiAKLSAqIFxwYXJhbSBlY2tleSBwb2ludGVyIHRvIHRoZSBFQ19LRVkgb2JqZWN0IGNvbnRhaW5pbmcgYSBwcml2YXRlIEVDIGtleQotICogXHBhcmFtIGN0eCAgcG9pbnRlciB0byBhIEJOX0NUWCBvYmplY3QgKG1heSBiZSBOVUxMKQotICogXHBhcmFtIGtpbnYgcG9pbnRlciB0byBhIEJJR05VTSBwb2ludGVyIGZvciB0aGUgaW52ZXJzZSBvZiBrCi0gKiBccGFyYW0gcnAgICBwb2ludGVyIHRvIGEgQklHTlVNIHBvaW50ZXIgZm9yIHggY29vcmRpbmF0ZSBvZiBrICogZ2VuZXJhdG9yCi0gKiBccmV0dXJuIDEgb24gc3VjY2VzcyBhbmQgMCBvdGhlcndpc2UKKy8qKiBQcmVjb21wdXRlIHBhcnRzIG9mIHRoZSBzaWduaW5nIG9wZXJhdGlvbgorICogIFxwYXJhbSAgZWNrZXkgIEVDX0tFWSBvYmplY3QgY29udGFpbmluZyBhIHByaXZhdGUgRUMga2V5CisgKiAgXHBhcmFtICBjdHggICAgQk5fQ1RYIG9iamVjdCAob3B0aW9uYWwpCisgKiAgXHBhcmFtICBraW52ICAgQklHTlVNIHBvaW50ZXIgZm9yIHRoZSBpbnZlcnNlIG9mIGsKKyAqICBccGFyYW0gIHJwICAgICBCSUdOVU0gcG9pbnRlciBmb3IgeCBjb29yZGluYXRlIG9mIGsgKiBnZW5lcmF0b3IKKyAqICBccmV0dXJuIDEgb24gc3VjY2VzcyBhbmQgMCBvdGhlcndpc2UKICAqLwogaW50IAkgIEVDRFNBX3NpZ25fc2V0dXAoRUNfS0VZICplY2tleSwgQk5fQ1RYICpjdHgsIEJJR05VTSAqKmtpbnYsIAogCQlCSUdOVU0gKipycCk7CiAKLS8qKiBFQ0RTQV9zaWduCi0gKiBjb21wdXRlcyBFQ0RTQSBzaWduYXR1cmUgb2YgYSBnaXZlbiBoYXNoIHZhbHVlIHVzaW5nIHRoZSBzdXBwbGllZAotICogcHJpdmF0ZSBrZXkgKG5vdGU6IHNpZyBtdXN0IHBvaW50IHRvIEVDRFNBX3NpemUoZWNrZXkpIGJ5dGVzIG9mIG1lbW9yeSkuCi0gKiBccGFyYW0gdHlwZSB0aGlzIHBhcmFtZXRlciBpcyBpZ25vcmVkCi0gKiBccGFyYW0gZGdzdCBwb2ludGVyIHRvIHRoZSBoYXNoIHZhbHVlIHRvIHNpZ24KLSAqIFxwYXJhbSBkZ3N0bGVuIGxlbmd0aCBvZiB0aGUgaGFzaCB2YWx1ZQotICogXHBhcmFtIHNpZyBidWZmZXIgdG8gaG9sZCB0aGUgREVSIGVuY29kZWQgc2lnbmF0dXJlCi0gKiBccGFyYW0gc2lnbGVuIHBvaW50ZXIgdG8gdGhlIGxlbmd0aCBvZiB0aGUgcmV0dXJuZWQgc2lnbmF0dXJlCi0gKiBccGFyYW0gZWNrZXkgcG9pbnRlciB0byB0aGUgRUNfS0VZIG9iamVjdCBjb250YWluaW5nIGEgcHJpdmF0ZSBFQyBrZXkKLSAqIFxyZXR1cm4gMSBvbiBzdWNjZXNzIGFuZCAwIG90aGVyd2lzZQorLyoqIENvbXB1dGVzIEVDRFNBIHNpZ25hdHVyZSBvZiBhIGdpdmVuIGhhc2ggdmFsdWUgdXNpbmcgdGhlIHN1cHBsaWVkCisgKiAgcHJpdmF0ZSBrZXkgKG5vdGU6IHNpZyBtdXN0IHBvaW50IHRvIEVDRFNBX3NpemUoZWNrZXkpIGJ5dGVzIG9mIG1lbW9yeSkuCisgKiAgXHBhcmFtICB0eXBlICAgICB0aGlzIHBhcmFtZXRlciBpcyBpZ25vcmVkCisgKiAgXHBhcmFtICBkZ3N0ICAgICBwb2ludGVyIHRvIHRoZSBoYXNoIHZhbHVlIHRvIHNpZ24KKyAqICBccGFyYW0gIGRnc3RsZW4gIGxlbmd0aCBvZiB0aGUgaGFzaCB2YWx1ZQorICogIFxwYXJhbSAgc2lnICAgICAgbWVtb3J5IGZvciB0aGUgREVSIGVuY29kZWQgY3JlYXRlZCBzaWduYXR1cmUKKyAqICBccGFyYW0gIHNpZ2xlbiAgIHBvaW50ZXIgdG8gdGhlIGxlbmd0aCBvZiB0aGUgcmV0dXJuZWQgc2lnbmF0dXJlCisgKiAgXHBhcmFtICBlY2tleSAgICBFQ19LRVkgb2JqZWN0IGNvbnRhaW5pbmcgYSBwcml2YXRlIEVDIGtleQorICogIFxyZXR1cm4gMSBvbiBzdWNjZXNzIGFuZCAwIG90aGVyd2lzZQogICovCiBpbnQJICBFQ0RTQV9zaWduKGludCB0eXBlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkZ3N0LCBpbnQgZGdzdGxlbiwgCiAJCXVuc2lnbmVkIGNoYXIgKnNpZywgdW5zaWduZWQgaW50ICpzaWdsZW4sIEVDX0tFWSAqZWNrZXkpOwogCiAKLS8qKiBFQ0RTQV9zaWduX2V4Ci0gKiBjb21wdXRlcyBFQ0RTQSBzaWduYXR1cmUgb2YgYSBnaXZlbiBoYXNoIHZhbHVlIHVzaW5nIHRoZSBzdXBwbGllZAotICogcHJpdmF0ZSBrZXkgKG5vdGU6IHNpZyBtdXN0IHBvaW50IHRvIEVDRFNBX3NpemUoZWNrZXkpIGJ5dGVzIG9mIG1lbW9yeSkuCi0gKiBccGFyYW0gdHlwZSB0aGlzIHBhcmFtZXRlciBpcyBpZ25vcmVkCi0gKiBccGFyYW0gZGdzdCBwb2ludGVyIHRvIHRoZSBoYXNoIHZhbHVlIHRvIHNpZ24KLSAqIFxwYXJhbSBkZ3N0bGVuIGxlbmd0aCBvZiB0aGUgaGFzaCB2YWx1ZQotICogXHBhcmFtIHNpZyBidWZmZXIgdG8gaG9sZCB0aGUgREVSIGVuY29kZWQgc2lnbmF0dXJlCi0gKiBccGFyYW0gc2lnbGVuIHBvaW50ZXIgdG8gdGhlIGxlbmd0aCBvZiB0aGUgcmV0dXJuZWQgc2lnbmF0dXJlCi0gKiBccGFyYW0ga2ludiBvcHRpb25hbCBwb2ludGVyIHRvIGEgcHJlLWNvbXB1dGVkIGludmVyc2UgawotICogXHBhcmFtIHJwIG9wdGlvbmFsIHBvaW50ZXIgdG8gdGhlIHByZS1jb21wdXRlZCBycCB2YWx1ZSAoc2VlIAotICogICAgICAgIEVDRFNBX3NpZ25fc2V0dXAKLSAqIFxwYXJhbSBlY2tleSBwb2ludGVyIHRvIHRoZSBFQ19LRVkgb2JqZWN0IGNvbnRhaW5pbmcgYSBwcml2YXRlIEVDIGtleQotICogXHJldHVybiAxIG9uIHN1Y2Nlc3MgYW5kIDAgb3RoZXJ3aXNlCisvKiogQ29tcHV0ZXMgRUNEU0Egc2lnbmF0dXJlIG9mIGEgZ2l2ZW4gaGFzaCB2YWx1ZSB1c2luZyB0aGUgc3VwcGxpZWQKKyAqICBwcml2YXRlIGtleSAobm90ZTogc2lnIG11c3QgcG9pbnQgdG8gRUNEU0Ffc2l6ZShlY2tleSkgYnl0ZXMgb2YgbWVtb3J5KS4KKyAqICBccGFyYW0gIHR5cGUgICAgIHRoaXMgcGFyYW1ldGVyIGlzIGlnbm9yZWQKKyAqICBccGFyYW0gIGRnc3QgICAgIHBvaW50ZXIgdG8gdGhlIGhhc2ggdmFsdWUgdG8gc2lnbgorICogIFxwYXJhbSAgZGdzdGxlbiAgbGVuZ3RoIG9mIHRoZSBoYXNoIHZhbHVlCisgKiAgXHBhcmFtICBzaWcgICAgICBidWZmZXIgdG8gaG9sZCB0aGUgREVSIGVuY29kZWQgc2lnbmF0dXJlCisgKiAgXHBhcmFtICBzaWdsZW4gICBwb2ludGVyIHRvIHRoZSBsZW5ndGggb2YgdGhlIHJldHVybmVkIHNpZ25hdHVyZQorICogIFxwYXJhbSAga2ludiAgICAgQklHTlVNIHdpdGggYSBwcmUtY29tcHV0ZWQgaW52ZXJzZSBrIChvcHRpb25hbCkKKyAqICBccGFyYW0gIHJwICAgICAgIEJJR05VTSB3aXRoIGEgcHJlLWNvbXB1dGVkIHJwIHZhbHVlIChvcHRpb2FubCksIAorICogICAgICAgICAgICAgICAgICAgc2VlIEVDRFNBX3NpZ25fc2V0dXAKKyAqICBccGFyYW0gIGVja2V5ICAgIEVDX0tFWSBvYmplY3QgY29udGFpbmluZyBhIHByaXZhdGUgRUMga2V5CisgKiAgXHJldHVybiAxIG9uIHN1Y2Nlc3MgYW5kIDAgb3RoZXJ3aXNlCiAgKi8KIGludAkgIEVDRFNBX3NpZ25fZXgoaW50IHR5cGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRnc3QsIGludCBkZ3N0bGVuLCAKIAkJdW5zaWduZWQgY2hhciAqc2lnLCB1bnNpZ25lZCBpbnQgKnNpZ2xlbiwgY29uc3QgQklHTlVNICpraW52LAogCQljb25zdCBCSUdOVU0gKnJwLCBFQ19LRVkgKmVja2V5KTsKIAotLyoqIEVDRFNBX3ZlcmlmeQotICogdmVyaWZpZXMgdGhhdCB0aGUgZ2l2ZW4gc2lnbmF0dXJlIGlzIHZhbGlkIEVDRFNBIHNpZ25hdHVyZQotICogb2YgdGhlIHN1cHBsaWVkIGhhc2ggdmFsdWUgdXNpbmcgdGhlIHNwZWNpZmllZCBwdWJsaWMga2V5LgotICogXHBhcmFtIHR5cGUgdGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZAotICogXHBhcmFtIGRnc3QgcG9pbnRlciB0byB0aGUgaGFzaCB2YWx1ZSAKLSAqIFxwYXJhbSBkZ3N0bGVuIGxlbmd0aCBvZiB0aGUgaGFzaCB2YWx1ZQotICogXHBhcmFtIHNpZyAgcG9pbnRlciB0byB0aGUgREVSIGVuY29kZWQgc2lnbmF0dXJlCi0gKiBccGFyYW0gc2lnbGVuIGxlbmd0aCBvZiB0aGUgREVSIGVuY29kZWQgc2lnbmF0dXJlCi0gKiBccGFyYW0gZWNrZXkgcG9pbnRlciB0byB0aGUgRUNfS0VZIG9iamVjdCBjb250YWluaW5nIGEgcHVibGljIEVDIGtleQotICogXHJldHVybiAxIGlmIHRoZSBzaWduYXR1cmUgaXMgdmFsaWQsIDAgaWYgdGhlIHNpZ25hdHVyZSBpcyBpbnZhbGlkIGFuZCAtMSBvbiBlcnJvcgorLyoqIFZlcmlmaWVzIHRoYXQgdGhlIGdpdmVuIHNpZ25hdHVyZSBpcyB2YWxpZCBFQ0RTQSBzaWduYXR1cmUKKyAqICBvZiB0aGUgc3VwcGxpZWQgaGFzaCB2YWx1ZSB1c2luZyB0aGUgc3BlY2lmaWVkIHB1YmxpYyBrZXkuCisgKiAgXHBhcmFtICB0eXBlICAgICB0aGlzIHBhcmFtZXRlciBpcyBpZ25vcmVkCisgKiAgXHBhcmFtICBkZ3N0ICAgICBwb2ludGVyIHRvIHRoZSBoYXNoIHZhbHVlIAorICogIFxwYXJhbSAgZGdzdGxlbiAgbGVuZ3RoIG9mIHRoZSBoYXNoIHZhbHVlCisgKiAgXHBhcmFtICBzaWcgICAgICBwb2ludGVyIHRvIHRoZSBERVIgZW5jb2RlZCBzaWduYXR1cmUKKyAqICBccGFyYW0gIHNpZ2xlbiAgIGxlbmd0aCBvZiB0aGUgREVSIGVuY29kZWQgc2lnbmF0dXJlCisgKiAgXHBhcmFtICBlY2tleSAgICBFQ19LRVkgb2JqZWN0IGNvbnRhaW5pbmcgYSBwdWJsaWMgRUMga2V5CisgKiAgXHJldHVybiAxIGlmIHRoZSBzaWduYXR1cmUgaXMgdmFsaWQsIDAgaWYgdGhlIHNpZ25hdHVyZSBpcyBpbnZhbGlkCisgKiAgICAgICAgICBhbmQgLTEgb24gZXJyb3IKICAqLwogaW50IAkgIEVDRFNBX3ZlcmlmeShpbnQgdHlwZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGdzdCwgaW50IGRnc3RsZW4sIAogCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaWcsIGludCBzaWdsZW4sIEVDX0tFWSAqZWNrZXkpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2VjZHNhL2VjZHNhdGVzdC5jIGIvY3J5cHRvL2VjZHNhL2VjZHNhdGVzdC5jCmluZGV4IGIwN2UzMTIuLmFhNGUxNDggMTAwNjQ0Ci0tLSBhL2NyeXB0by9lY2RzYS9lY2RzYXRlc3QuYworKysgYi9jcnlwdG8vZWNkc2EvZWNkc2F0ZXN0LmMKQEAgLTQ5MCw3ICs0OTAsNyBAQAogCWlmIChyZXQpCiAJCUVSUl9wcmludF9lcnJvcnMob3V0KTsKIAlDUllQVE9fY2xlYW51cF9hbGxfZXhfZGF0YSgpOwotCUVSUl9yZW1vdmVfc3RhdGUoMCk7CisJRVJSX3JlbW92ZV90aHJlYWRfc3RhdGUoTlVMTCk7CiAJRVJSX2ZyZWVfc3RyaW5ncygpOwogCUNSWVBUT19tZW1fbGVha3Mob3V0KTsKIAlpZiAob3V0ICE9IE5VTEwpCmRpZmYgLS1naXQgYS9jcnlwdG8vZWNkc2EvZWNzX2Vyci5jIGIvY3J5cHRvL2VjZHNhL2Vjc19lcnIuYwppbmRleCBkMmE1MzczLi45OGUzOGQ1IDEwMDY0NAotLS0gYS9jcnlwdG8vZWNkc2EvZWNzX2Vyci5jCisrKyBiL2NyeXB0by9lY2RzYS9lY3NfZXJyLmMKQEAgLTEsNiArMSw2IEBACiAvKiBjcnlwdG8vZWNkc2EvZWNzX2Vyci5jICovCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNiBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2VuZ2luZS9NYWtlZmlsZSBiL2NyeXB0by9lbmdpbmUvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1MmZhNDguLjAwMDAwMDAKLS0tIGEvY3J5cHRvL2VuZ2luZS9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDQxNSArMCwwIEBACi0jCi0jIE9wZW5TU0wvY3J5cHRvL2VuZ2luZS9NYWtlZmlsZQotIwotCi1ESVI9CWVuZ2luZQotVE9QPQkuLi8uLgotQ0M9CWNjCi1JTkNMVURFUz0gLUkuLiAtSSQoVE9QKSAtSS4uLy4uL2luY2x1ZGUKLUNGTEFHPS1nCi1NQUtFRklMRT0JTWFrZWZpbGUKLUFSPQkJYXIgcgotCi1DRkxBR1M9ICQoSU5DTFVERVMpICQoQ0ZMQUcpCi0KLUdFTkVSQUw9TWFrZWZpbGUKLVRFU1Q9IGVuZ2luZXRlc3QuYwotQVBQUz0KLQotTElCPSQoVE9QKS9saWJjcnlwdG8uYQotTElCU1JDPSBlbmdfZXJyLmMgZW5nX2xpYi5jIGVuZ19saXN0LmMgZW5nX2luaXQuYyBlbmdfY3RybC5jIFwKLQllbmdfdGFibGUuYyBlbmdfcGtleS5jIGVuZ19mYXQuYyBlbmdfYWxsLmMgXAotCXRiX3JzYS5jIHRiX2RzYS5jIHRiX2VjZHNhLmMgdGJfZGguYyB0Yl9lY2RoLmMgdGJfcmFuZC5jIHRiX3N0b3JlLmMgXAotCXRiX2NpcGhlci5jIHRiX2RpZ2VzdC5jIFwKLQllbmdfb3BlbnNzbC5jIGVuZ19jbmYuYyBlbmdfZHluLmMgZW5nX2NyeXB0b2Rldi5jIGVuZ19wYWRsb2NrLmMKLUxJQk9CSj0gZW5nX2Vyci5vIGVuZ19saWIubyBlbmdfbGlzdC5vIGVuZ19pbml0Lm8gZW5nX2N0cmwubyBcCi0JZW5nX3RhYmxlLm8gZW5nX3BrZXkubyBlbmdfZmF0Lm8gZW5nX2FsbC5vIFwKLQl0Yl9yc2EubyB0Yl9kc2EubyB0Yl9lY2RzYS5vIHRiX2RoLm8gdGJfZWNkaC5vIHRiX3JhbmQubyB0Yl9zdG9yZS5vIFwKLQl0Yl9jaXBoZXIubyB0Yl9kaWdlc3QubyBcCi0JZW5nX29wZW5zc2wubyBlbmdfY25mLm8gZW5nX2R5bi5vIGVuZ19jcnlwdG9kZXYubyBlbmdfcGFkbG9jay5vCi0KLVNSQz0gJChMSUJTUkMpCi0KLUVYSEVBREVSPSBlbmdpbmUuaAotSEVBREVSPQkkKEVYSEVBREVSKQotCi1BTEw9ICAgICQoR0VORVJBTCkgJChTUkMpICQoSEVBREVSKQotCi10b3A6Ci0JKGNkIC4uLy4uOyAkKE1BS0UpIERJUlM9Y3J5cHRvIFNESVJTPSQoRElSKSBzdWJfYWxsKQotCi1hbGw6CWxpYgotCi1saWI6CSQoTElCT0JKKQotCSQoQVJYKSAkKExJQikgJChMSUJPQkopCi0JJChSQU5MSUIpICQoTElCKSB8fCBlY2hvIE5ldmVyIG1pbmQuCi0JQHRvdWNoIGxpYgotCi1maWxlczoKLQkkKFBFUkwpICQoVE9QKS91dGlsL2ZpbGVzLnBsIE1ha2VmaWxlID4+ICQoVE9QKS9NSU5GTwotCi1saW5rczoKLQlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vaW5jbHVkZS9vcGVuc3NsICQoRVhIRUFERVIpCi0JQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL3Rlc3QgJChURVNUKQotCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9hcHBzICQoQVBQUykKLQotaW5zdGFsbDoKLQlAWyAtbiAiJChJTlNUQUxMVE9QKSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdG9wIE1ha2VmaWxlLi4uCi0JQGhlYWRlcmxpc3Q9IiQoRVhIRUFERVIpIjsgZm9yIGkgaW4gJCRoZWFkZXJsaXN0IDsgXAotCWRvICBcCi0JKGNwICQkaSAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaTsgXAotCWNobW9kIDY0NCAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaSApOyBcCi0JZG9uZTsKLQotdGFnczoKLQljdGFncyAkKFNSQykKLQotdGVzdHM6Ci0KLWxpbnQ6Ci0JbGludCAtRExJTlQgJChJTkNMVURFUykgJChTUkMpPmZsdWZmCi0KLWRlcGVuZDoKLQlAWyAtbiAiJChNQUtFREVQRU5EKSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdXBwZXIgTWFrZWZpbGUuLi4KLQkkKE1BS0VERVBFTkQpIC0tICQoQ0ZMQUcpICQoSU5DTFVERVMpICQoREVQRkxBRykgLS0gJChQUk9HUykgJChMSUJTUkMpCi0KLWRjbGVhbjoKLQkkKFBFUkwpIC1wZSAnaWYgKC9eIyBETyBOT1QgREVMRVRFIFRISVMgTElORS8pIHtwcmludDsgZXhpdCgwKTt9JyAkKE1BS0VGSUxFKSA+TWFrZWZpbGUubmV3Ci0JbXYgLWYgTWFrZWZpbGUubmV3ICQoTUFLRUZJTEUpCi0KLWNsZWFuOgotCXJtIC1mICoubyAqLyoubyAqLm9iaiBsaWIgdGFncyBjb3JlIC5wdXJlIC5uZnMqICoub2xkICouYmFrIGZsdWZmCi0KLSMgRE8gTk9UIERFTEVURSBUSElTIExJTkUgLS0gbWFrZSBkZXBlbmQgZGVwZW5kcyBvbiBpdC4KLQotZW5nX2FsbC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotZW5nX2FsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1lbmdfYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotZW5nX2FsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi1lbmdfYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lbmdpbmUuaAotZW5nX2FsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1lbmdfYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLWVuZ19hbGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi1lbmdfYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi1lbmdfYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi1lbmdfYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLWVuZ19hbGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLWVuZ19hbGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAotZW5nX2FsbC5vOiAuLi9jcnlwdGxpYi5oIGVuZ19hbGwuYyBlbmdfaW50LmgKLWVuZ19jbmYubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLWVuZ19jbmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotZW5nX2NuZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotZW5nX2NuZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotZW5nX2NuZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi1lbmdfY25mLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lbmdpbmUuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWVuZ19jbmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLWVuZ19jbmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotZW5nX2NuZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1lbmdfY25mLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1lbmdfY25mLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotZW5nX2NuZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWVuZ19jbmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotZW5nX2NuZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9jcnlwdGxpYi5oIGVuZ19jbmYuYyBlbmdfaW50LmgKLWVuZ19jcnlwdG9kZXYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWVuZ19jcnlwdG9kZXYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1lbmdfY3J5cHRvZGV2Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZGguaAotZW5nX2NyeXB0b2Rldi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLWVuZ19jcnlwdG9kZXYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotZW5nX2NyeXB0b2Rldi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZW5naW5lLmgKLWVuZ19jcnlwdG9kZXYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotZW5nX2NyeXB0b2Rldi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1lbmdfY3J5cHRvZGV2Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLWVuZ19jcnlwdG9kZXYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotZW5nX2NyeXB0b2Rldi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotZW5nX2NyeXB0b2Rldi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotZW5nX2NyeXB0b2Rldi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAotZW5nX2NyeXB0b2Rldi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcnNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1lbmdfY3J5cHRvZGV2Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotZW5nX2NyeXB0b2Rldi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi1lbmdfY3J5cHRvZGV2Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIGVuZ19jcnlwdG9kZXYuYwotZW5nX2N0cmwubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLWVuZ19jdHJsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLWVuZ19jdHJsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotZW5nX2N0cmwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotZW5nX2N0cmwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oCi1lbmdfY3RybC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1lbmdfY3RybC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1lbmdfY3RybC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLWVuZ19jdHJsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1lbmdfY3RybC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotZW5nX2N0cmwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1lbmdfY3RybC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWVuZ19jdHJsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLWVuZ19jdHJsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2NyeXB0bGliLmggZW5nX2N0cmwuYyBlbmdfaW50LmgKLWVuZ19keW4ubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLWVuZ19keW4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotZW5nX2R5bi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Rzby5oCi1lbmdfZHluLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1lbmdfZHluLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLWVuZ19keW4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotZW5nX2R5bi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotZW5nX2R5bi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi1lbmdfZHluLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWVuZ19keW4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWVuZ19keW4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1lbmdfZHluLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotZW5nX2R5bi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi1lbmdfZHluLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2NyeXB0bGliLmggZW5nX2R5bi5jIGVuZ19pbnQuaAotZW5nX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotZW5nX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1lbmdfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1lbmdfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLWVuZ19lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotZW5nX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotZW5nX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi1lbmdfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWVuZ19lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWVuZ19lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1lbmdfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotZW5nX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi1lbmdfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIGVuZ19lcnIuYwotZW5nX2ZhdC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotZW5nX2ZhdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1lbmdfZmF0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1lbmdfZmF0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1lbmdfZmF0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLWVuZ19mYXQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotZW5nX2ZhdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotZW5nX2ZhdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi1lbmdfZmF0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWVuZ19mYXQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWVuZ19mYXQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1lbmdfZmF0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotZW5nX2ZhdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi1lbmdfZmF0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2NyeXB0bGliLmggZW5nX2ZhdC5jIGVuZ19pbnQuaAotZW5nX2luaXQubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLWVuZ19pbml0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLWVuZ19pbml0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotZW5nX2luaXQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotZW5nX2luaXQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oCi1lbmdfaW5pdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1lbmdfaW5pdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1lbmdfaW5pdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLWVuZ19pbml0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1lbmdfaW5pdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotZW5nX2luaXQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1lbmdfaW5pdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWVuZ19pbml0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLWVuZ19pbml0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2NyeXB0bGliLmggZW5nX2luaXQuYyBlbmdfaW50LmgKLWVuZ19saWIubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLWVuZ19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotZW5nX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLWVuZ19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotZW5nX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZW5naW5lLmgKLWVuZ19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotZW5nX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1lbmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotZW5nX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotZW5nX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAotZW5nX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotZW5nX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWVuZ19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotZW5nX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9jcnlwdGxpYi5oIGVuZ19pbnQuaCBlbmdfbGliLmMKLWVuZ19saXN0Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi1lbmdfbGlzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1lbmdfbGlzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLWVuZ19saXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKLWVuZ19saXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lbmdpbmUuaAotZW5nX2xpc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotZW5nX2xpc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotZW5nX2xpc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi1lbmdfbGlzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotZW5nX2xpc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWVuZ19saXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotZW5nX2xpc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1lbmdfbGlzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi1lbmdfbGlzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9jcnlwdGxpYi5oIGVuZ19pbnQuaCBlbmdfbGlzdC5jCi1lbmdfb3BlbnNzbC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotZW5nX29wZW5zc2wubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotZW5nX29wZW5zc2wubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kaC5oCi1lbmdfb3BlbnNzbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Rzby5oCi1lbmdfb3BlbnNzbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotZW5nX29wZW5zc2wubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotZW5nX29wZW5zc2wubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotZW5nX29wZW5zc2wubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLWVuZ19vcGVuc3NsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLWVuZ19vcGVuc3NsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLWVuZ19vcGVuc3NsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1lbmdfb3BlbnNzbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotZW5nX29wZW5zc2wubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BlbS5oCi1lbmdfb3BlbnNzbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGVtMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi1lbmdfb3BlbnNzbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYzQuaAotZW5nX29wZW5zc2wubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotZW5nX29wZW5zc2wubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1lbmdfb3BlbnNzbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi1lbmdfb3BlbnNzbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9jcnlwdGxpYi5oIGVuZ19vcGVuc3NsLmMKLWVuZ19wYWRsb2NrLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi1lbmdfcGFkbG9jay5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1lbmdfcGFkbG9jay5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Rzby5oCi1lbmdfcGFkbG9jay5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotZW5nX3BhZGxvY2subzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotZW5nX3BhZGxvY2subzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotZW5nX3BhZGxvY2subzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLWVuZ19wYWRsb2NrLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLWVuZ19wYWRsb2NrLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLWVuZ19wYWRsb2NrLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1lbmdfcGFkbG9jay5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotZW5nX3BhZGxvY2subzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLWVuZ19wYWRsb2NrLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1lbmdfcGFkbG9jay5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWVuZ19wYWRsb2NrLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLWVuZ19wYWRsb2NrLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIGVuZ19wYWRsb2NrLmMKLWVuZ19wa2V5Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi1lbmdfcGtleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1lbmdfcGtleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLWVuZ19wa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKLWVuZ19wa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lbmdpbmUuaAotZW5nX3BrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotZW5nX3BrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotZW5nX3BrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi1lbmdfcGtleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotZW5nX3BrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWVuZ19wa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotZW5nX3BrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1lbmdfcGtleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi1lbmdfcGtleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9jcnlwdGxpYi5oIGVuZ19pbnQuaCBlbmdfcGtleS5jCi1lbmdfdGFibGUubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLWVuZ190YWJsZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1lbmdfdGFibGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1lbmdfdGFibGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotZW5nX3RhYmxlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lbmdpbmUuaAotZW5nX3RhYmxlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLWVuZ190YWJsZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1lbmdfdGFibGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi1lbmdfdGFibGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWVuZ190YWJsZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotZW5nX3RhYmxlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotZW5nX3RhYmxlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotZW5nX3RhYmxlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLWVuZ190YWJsZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9jcnlwdGxpYi5oIGVuZ19pbnQuaAotZW5nX3RhYmxlLm86IGVuZ190YWJsZS5jCi10Yl9jaXBoZXIubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLXRiX2NpcGhlci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi10Yl9jaXBoZXIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi10Yl9jaXBoZXIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotdGJfY2lwaGVyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lbmdpbmUuaAotdGJfY2lwaGVyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLXRiX2NpcGhlci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi10Yl9jaXBoZXIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi10Yl9jaXBoZXIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXRiX2NpcGhlci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotdGJfY2lwaGVyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotdGJfY2lwaGVyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotdGJfY2lwaGVyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLXRiX2NpcGhlci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9jcnlwdGxpYi5oIGVuZ19pbnQuaAotdGJfY2lwaGVyLm86IHRiX2NpcGhlci5jCi10Yl9kaC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXRiX2RoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLXRiX2RoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi10Yl9kaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi10Yl9kaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZW5naW5lLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi10Yl9kaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotdGJfZGgubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotdGJfZGgubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotdGJfZGgubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXRiX2RoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotdGJfZGgubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi10Yl9kaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi10Yl9kaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9jcnlwdGxpYi5oIGVuZ19pbnQuaCB0Yl9kaC5jCi10Yl9kaWdlc3QubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLXRiX2RpZ2VzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi10Yl9kaWdlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi10Yl9kaWdlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotdGJfZGlnZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lbmdpbmUuaAotdGJfZGlnZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLXRiX2RpZ2VzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi10Yl9kaWdlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi10Yl9kaWdlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXRiX2RpZ2VzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotdGJfZGlnZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotdGJfZGlnZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotdGJfZGlnZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLXRiX2RpZ2VzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9jcnlwdGxpYi5oIGVuZ19pbnQuaAotdGJfZGlnZXN0Lm86IHRiX2RpZ2VzdC5jCi10Yl9kc2EubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi10Yl9kc2EubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotdGJfZHNhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi10Yl9kc2EubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotdGJfZHNhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lbmdpbmUuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLXRiX2RzYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotdGJfZHNhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLXRiX2RzYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi10Yl9kc2EubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXRiX2RzYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLXRiX2RzYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLXRiX2RzYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi10Yl9kc2EubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vY3J5cHRsaWIuaCBlbmdfaW50LmggdGJfZHNhLmMKLXRiX2VjZGgubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLXRiX2VjZGgubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotdGJfZWNkaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLXRiX2VjZGgubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotdGJfZWNkaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZW5naW5lLmgKLXRiX2VjZGgubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotdGJfZWNkaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi10Yl9lY2RoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotdGJfZWNkaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotdGJfZWNkaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAotdGJfZWNkaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCi10Yl9lY2RoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi10Yl9lY2RoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmgKLXRiX2VjZGgubzogLi4vY3J5cHRsaWIuaCBlbmdfaW50LmggdGJfZWNkaC5jCi10Yl9lY2RzYS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotdGJfZWNkc2EubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotdGJfZWNkc2EubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi10Yl9lY2RzYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi10Yl9lY2RzYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZW5naW5lLmgKLXRiX2VjZHNhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLXRiX2VjZHNhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLXRiX2VjZHNhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotdGJfZWNkc2EubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXRiX2VjZHNhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi10Yl9lY2RzYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLXRiX2VjZHNhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotdGJfZWNkc2EubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotdGJfZWNkc2EubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vY3J5cHRsaWIuaCBlbmdfaW50LmggdGJfZWNkc2EuYwotdGJfcmFuZC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotdGJfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi10Yl9yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotdGJfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi10Yl9yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lbmdpbmUuaAotdGJfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi10Yl9yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLXRiX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi10Yl9yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi10Yl9yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi10Yl9yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLXRiX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLXRiX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAotdGJfcmFuZC5vOiAuLi9jcnlwdGxpYi5oIGVuZ19pbnQuaCB0Yl9yYW5kLmMKLXRiX3JzYS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXRiX3JzYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi10Yl9yc2EubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLXRiX3JzYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi10Yl9yc2EubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotdGJfcnNhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi10Yl9yc2EubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotdGJfcnNhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXRiX3JzYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotdGJfcnNhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotdGJfcnNhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotdGJfcnNhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLXRiX3JzYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9jcnlwdGxpYi5oIGVuZ19pbnQuaCB0Yl9yc2EuYwotdGJfc3RvcmUubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLXRiX3N0b3JlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXRiX3N0b3JlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotdGJfc3RvcmUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotdGJfc3RvcmUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oCi10Yl9zdG9yZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi10Yl9zdG9yZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi10Yl9zdG9yZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLXRiX3N0b3JlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi10Yl9zdG9yZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotdGJfc3RvcmUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi10Yl9zdG9yZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLXRiX3N0b3JlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLXRiX3N0b3JlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2NyeXB0bGliLmggZW5nX2ludC5oIHRiX3N0b3JlLmMKZGlmZiAtLWdpdCBhL2NyeXB0by9lbmdpbmUvZW5nX2FsbC5jIGIvY3J5cHRvL2VuZ2luZS9lbmdfYWxsLmMKaW5kZXggZDI5Y2Q1Ny4uMjJjMTIwNCAxMDA2NDQKLS0tIGEvY3J5cHRvL2VuZ2luZS9lbmdfYWxsLmMKKysrIGIvY3J5cHRvL2VuZ2luZS9lbmdfYWxsLmMKQEAgLTYxLDE1ICs2MSwxNSBAQAogCiB2b2lkIEVOR0lORV9sb2FkX2J1aWx0aW5fZW5naW5lcyh2b2lkKQogCXsKKyNpZiAwCiAJLyogVGhlcmUncyBubyBsb25nZXIgYW55IG5lZWQgZm9yIGFuICJvcGVuc3NsIiBFTkdJTkUgdW5sZXNzLCBvbmUgZGF5LAogCSAqIGl0IGlzIHRoZSAqb25seSogd2F5IGZvciBzdGFuZGFyZCBidWlsdGluIGltcGxlbWVudGF0aW9ucyB0byBiZSBiZQogCSAqIGFjY2Vzc2VkIChpZS4gaXQgd291bGQgYmUgcG9zc2libGUgdG8gc3RhdGljYWxseSBsaW5rIGJpbmFyaWVzIHdpdGgKIAkgKiAqbm8qIGJ1aWx0aW4gaW1wbGVtZW50YXRpb25zKS4gKi8KLSNpZiAwCiAJRU5HSU5FX2xvYWRfb3BlbnNzbCgpOwogI2VuZGlmCi0jaWYgIWRlZmluZWQoT1BFTlNTTF9OT19IVykgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19IV19QQURMT0NLKQotCUVOR0lORV9sb2FkX3BhZGxvY2soKTsKKyNpZiAhZGVmaW5lZChPUEVOU1NMX05PX0hXKSAmJiAoZGVmaW5lZChfX09wZW5CU0RfXykgfHwgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChIQVZFX0NSWVBUT0RFVikpCisJRU5HSU5FX2xvYWRfY3J5cHRvZGV2KCk7CiAjZW5kaWYKIAlFTkdJTkVfbG9hZF9keW5hbWljKCk7CiAjaWZuZGVmIE9QRU5TU0xfTk9fU1RBVElDX0VOR0lORQpAQCAtOTgsMjIgKzk4LDIzIEBACiAjaWZuZGVmIE9QRU5TU0xfTk9fSFdfVUJTRUMKIAlFTkdJTkVfbG9hZF91YnNlYygpOwogI2VuZGlmCisjaWZuZGVmIE9QRU5TU0xfTk9fSFdfUEFETE9DSworCUVOR0lORV9sb2FkX3BhZGxvY2soKTsKICNlbmRpZgotI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fR01QKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX0hXX0dNUCkKKyNlbmRpZgorI2lmbmRlZiBPUEVOU1NMX05PX0dPU1QKKwlFTkdJTkVfbG9hZF9nb3N0KCk7CisjZW5kaWYKKyNpZm5kZWYgT1BFTlNTTF9OT19HTVAKIAlFTkdJTkVfbG9hZF9nbXAoKTsKICNlbmRpZgotI2VuZGlmCi0jaWZuZGVmIE9QRU5TU0xfTk9fSFcKLSNpZiBkZWZpbmVkKF9fT3BlbkJTRF9fKSB8fCBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCUVOR0lORV9sb2FkX2NyeXB0b2RldigpOwotI2VuZGlmCiAjaWYgZGVmaW5lZChPUEVOU1NMX1NZU19XSU4zMikgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19DQVBJRU5HKQogCUVOR0lORV9sb2FkX2NhcGkoKTsKICNlbmRpZgogI2VuZGlmCiAJfQogCi0jaWYgZGVmaW5lZChfX09wZW5CU0RfXykgfHwgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyNpZiBkZWZpbmVkKF9fT3BlbkJTRF9fKSB8fCBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKEhBVkVfQ1JZUFRPREVWKQogdm9pZCBFTkdJTkVfc2V0dXBfYnNkX2NyeXB0b2Rldih2b2lkKSB7CiAJc3RhdGljIGludCBic2RfY3J5cHRvZGV2X2RlZmF1bHRfbG9hZGVkID0gMDsKIAlpZiAoIWJzZF9jcnlwdG9kZXZfZGVmYXVsdF9sb2FkZWQpIHsKZGlmZiAtLWdpdCBhL2NyeXB0by9lbmdpbmUvZW5nX2NyeXB0b2Rldi5jIGIvY3J5cHRvL2VuZ2luZS9lbmdfY3J5cHRvZGV2LmMKaW5kZXggMWExZTFjMi4uNTJmNGNhMyAxMDA2NDQKLS0tIGEvY3J5cHRvL2VuZ2luZS9lbmdfY3J5cHRvZGV2LmMKKysrIGIvY3J5cHRvL2VuZ2luZS9lbmdfY3J5cHRvZGV2LmMKQEAgLTMwLDEwICszMCw2IEBACiAjaW5jbHVkZSA8b3BlbnNzbC9lbmdpbmUuaD4KICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgogI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgotI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0jaW5jbHVkZSA8b3BlbnNzbC9kaC5oPgotI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CiAKICNpZiAoZGVmaW5lZChfX3VuaXhfXykgfHwgZGVmaW5lZCh1bml4KSkgJiYgIWRlZmluZWQoVVNHKSAmJiBcCiAJKGRlZmluZWQoT3BlbkJTRCkgfHwgZGVmaW5lZChfX0ZyZWVCU0RfXykpCkBAIC01OSw2ICs1NSwxMCBAQAogIAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPGNyeXB0by9jcnlwdG9kZXYuaD4KKyNpbmNsdWRlIDxjcnlwdG8vZGgvZGguaD4KKyNpbmNsdWRlIDxjcnlwdG8vZHNhL2RzYS5oPgorI2luY2x1ZGUgPGNyeXB0by9lcnIvZXJyLmg+CisjaW5jbHVkZSA8Y3J5cHRvL3JzYS9yc2EuaD4KICNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC03Miw2ICs3MiwxNiBAQAogc3RydWN0IGRldl9jcnlwdG9fc3RhdGUgewogCXN0cnVjdCBzZXNzaW9uX29wIGRfc2VzczsKIAlpbnQgZF9mZDsKKworI2lmZGVmIFVTRV9DUllQVE9ERVZfRElHRVNUUworCWNoYXIgZHVtbXlfbWFjX2tleVtIQVNIX01BWF9MRU5dOworCisJdW5zaWduZWQgY2hhciBkaWdlc3RfcmVzW0hBU0hfTUFYX0xFTl07CisJY2hhciAqbWFjX2RhdGE7CisJaW50IG1hY19sZW47CisKKwlpbnQgY29weTsKKyNlbmRpZgogfTsKIAogc3RhdGljIHVfaW50MzJfdCBjcnlwdG9kZXZfYXN5bWZlYXQgPSAwOwpAQCAtNzksMTUgKzg5LDE0IEBACiBzdGF0aWMgaW50IGdldF9hc3ltX2Rldl9jcnlwdG8odm9pZCk7CiBzdGF0aWMgaW50IG9wZW5fZGV2X2NyeXB0byh2b2lkKTsKIHN0YXRpYyBpbnQgZ2V0X2Rldl9jcnlwdG8odm9pZCk7Ci1zdGF0aWMgaW50IGNyeXB0b2Rldl9tYXhfaXYoaW50IGNpcGhlcik7Ci1zdGF0aWMgaW50IGNyeXB0b2Rldl9rZXlfbGVuZ3RoX3ZhbGlkKGludCBjaXBoZXIsIGludCBsZW4pOwotc3RhdGljIGludCBjaXBoZXJfbmlkX3RvX2NyeXB0b2RldihpbnQgbmlkKTsKIHN0YXRpYyBpbnQgZ2V0X2NyeXB0b2Rldl9jaXBoZXJzKGNvbnN0IGludCAqKmNuaWRzKTsKLS8qc3RhdGljIGludCBnZXRfY3J5cHRvZGV2X2RpZ2VzdHMoY29uc3QgaW50ICoqY25pZHMpOyovCisjaWZkZWYgVVNFX0NSWVBUT0RFVl9ESUdFU1RTCitzdGF0aWMgaW50IGdldF9jcnlwdG9kZXZfZGlnZXN0cyhjb25zdCBpbnQgKipjbmlkcyk7CisjZW5kaWYKIHN0YXRpYyBpbnQgY3J5cHRvZGV2X3VzYWJsZV9jaXBoZXJzKGNvbnN0IGludCAqKm5pZHMpOwogc3RhdGljIGludCBjcnlwdG9kZXZfdXNhYmxlX2RpZ2VzdHMoY29uc3QgaW50ICoqbmlkcyk7CiBzdGF0aWMgaW50IGNyeXB0b2Rldl9jaXBoZXIoRVZQX0NJUEhFUl9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LAotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBpbnQgaW5sKTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGlubCk7CiBzdGF0aWMgaW50IGNyeXB0b2Rldl9pbml0X2tleShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsIGludCBlbmMpOwogc3RhdGljIGludCBjcnlwdG9kZXZfY2xlYW51cChFVlBfQ0lQSEVSX0NUWCAqY3R4KTsKQEAgLTEyMSw3ICsxMzAsNyBAQAogc3RhdGljIGludCBjcnlwdG9kZXZfZGhfY29tcHV0ZV9rZXkodW5zaWduZWQgY2hhciAqa2V5LAogICAgIGNvbnN0IEJJR05VTSAqcHViX2tleSwgREggKmRoKTsKIHN0YXRpYyBpbnQgY3J5cHRvZGV2X2N0cmwoRU5HSU5FICplLCBpbnQgY21kLCBsb25nIGksIHZvaWQgKnAsCi0gICAgdm9pZCAoKmYpKCkpOworICAgIHZvaWQgKCpmKSh2b2lkKSk7CiB2b2lkIEVOR0lORV9sb2FkX2NyeXB0b2Rldih2b2lkKTsKIAogc3RhdGljIGNvbnN0IEVOR0lORV9DTURfREVGTiBjcnlwdG9kZXZfZGVmbnNbXSA9IHsKQEAgLTEzNCwyNyArMTQzLDMyIEBACiAJaW50CWl2bWF4OwogCWludAlrZXlsZW47CiB9IGNpcGhlcnNbXSA9IHsKKwl7IENSWVBUT19BUkM0LAkJCU5JRF9yYzQsCQkwLAkxNiwgfSwKIAl7IENSWVBUT19ERVNfQ0JDLAkJTklEX2Rlc19jYmMsCQk4LAkgOCwgfSwKIAl7IENSWVBUT18zREVTX0NCQywJCU5JRF9kZXNfZWRlM19jYmMsCTgsCTI0LCB9LAogCXsgQ1JZUFRPX0FFU19DQkMsCQlOSURfYWVzXzEyOF9jYmMsCTE2LAkxNiwgfSwKKwl7IENSWVBUT19BRVNfQ0JDLAkJTklEX2Flc18xOTJfY2JjLAkxNiwJMjQsIH0sCisJeyBDUllQVE9fQUVTX0NCQywJCU5JRF9hZXNfMjU2X2NiYywJMTYsCTMyLCB9LAogCXsgQ1JZUFRPX0JMRl9DQkMsCQlOSURfYmZfY2JjLAkJOCwJMTYsIH0sCiAJeyBDUllQVE9fQ0FTVF9DQkMsCQlOSURfY2FzdDVfY2JjLAkJOCwJMTYsIH0sCiAJeyBDUllQVE9fU0tJUEpBQ0tfQ0JDLAkJTklEX3VuZGVmLAkJMCwJIDAsIH0sCiAJeyAwLAkJCQlOSURfdW5kZWYsCQkwLAkgMCwgfSwKIH07CiAKLSNpZiAwCisjaWZkZWYgVVNFX0NSWVBUT0RFVl9ESUdFU1RTCiBzdGF0aWMgc3RydWN0IHsKIAlpbnQJaWQ7CiAJaW50CW5pZDsKKwlpbnQgCWtleWxlbjsKIH0gZGlnZXN0c1tdID0gewotCXsgQ1JZUFRPX1NIQTFfSE1BQywJCU5JRF9obWFjV2l0aFNIQTEsCX0sCi0JeyBDUllQVE9fUklQRU1EMTYwX0hNQUMsCU5JRF9yaXBlbWQxNjAsCQl9LAotCXsgQ1JZUFRPX01ENV9LUERLLAkJTklEX3VuZGVmLAkJfSwKLQl7IENSWVBUT19TSEExX0tQREssCQlOSURfdW5kZWYsCQl9LAotCXsgQ1JZUFRPX01ENSwJCQlOSURfbWQ1LAkJfSwKLQl7IENSWVBUT19TSEExLAkJCU5JRF91bmRlZiwJCX0sCi0JeyAwLAkJCQlOSURfdW5kZWYsCQl9LAorCXsgQ1JZUFRPX01ENV9ITUFDLAkJTklEX2htYWNXaXRoTUQ1LAkxNn0sCisJeyBDUllQVE9fU0hBMV9ITUFDLAkJTklEX2htYWNXaXRoU0hBMSwJMjB9LAorCXsgQ1JZUFRPX1JJUEVNRDE2MF9ITUFDLAlOSURfcmlwZW1kMTYwLAkJMTYvKj8qL30sCisJeyBDUllQVE9fTUQ1X0tQREssCQlOSURfdW5kZWYsCQkwfSwKKwl7IENSWVBUT19TSEExX0tQREssCQlOSURfdW5kZWYsCQkwfSwKKwl7IENSWVBUT19NRDUsCQkJTklEX21kNSwJCTE2fSwKKwl7IENSWVBUT19TSEExLAkJCU5JRF9zaGExLAkJMjB9LAorCXsgMCwJCQkJTklEX3VuZGVmLAkJMH0sCiB9OwogI2VuZGlmCiAKQEAgLTIwOSw1MCArMjIzLDYgQEAKIH0KIAogLyoKLSAqIFhYWFggdGhpcyBuZWVkcyB0byBiZSBzZXQgZm9yIGVhY2ggYWxnIC0gYW5kIGRldGVybWluZWQgZnJvbQotICogYSBydW5uaW5nIGNhcmQuCi0gKi8KLXN0YXRpYyBpbnQKLWNyeXB0b2Rldl9tYXhfaXYoaW50IGNpcGhlcikKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGNpcGhlcnNbaV0uaWQ7IGkrKykKLQkJaWYgKGNpcGhlcnNbaV0uaWQgPT0gY2lwaGVyKQotCQkJcmV0dXJuIChjaXBoZXJzW2ldLml2bWF4KTsKLQlyZXR1cm4gKDApOwotfQotCi0vKgotICogWFhYWCB0aGlzIG5lZWRzIHRvIGJlIHNldCBmb3IgZWFjaCBhbGcgLSBhbmQgZGV0ZXJtaW5lZCBmcm9tCi0gKiBhIHJ1bm5pbmcgY2FyZC4gRm9yIG5vdywgZmFrZSBpdCBvdXQgLSBidXQgbW9zdCBvZiB0aGVzZQotICogZm9yIHJlYWwgZGV2aWNlcyBzaG91bGQgcmV0dXJuIDEgZm9yIHRoZSBzdXBwb3J0ZWQga2V5Ci0gKiBzaXplcyB0aGUgZGV2aWNlIGNhbiBoYW5kbGUuCi0gKi8KLXN0YXRpYyBpbnQKLWNyeXB0b2Rldl9rZXlfbGVuZ3RoX3ZhbGlkKGludCBjaXBoZXIsIGludCBsZW4pCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBjaXBoZXJzW2ldLmlkOyBpKyspCi0JCWlmIChjaXBoZXJzW2ldLmlkID09IGNpcGhlcikKLQkJCXJldHVybiAoY2lwaGVyc1tpXS5rZXlsZW4gPT0gbGVuKTsKLQlyZXR1cm4gKDApOwotfQotCi0vKiBjb252ZXJ0IGxpYmNyeXB0byBuaWRzIHRvIGNyeXB0b2RldiAqLwotc3RhdGljIGludAotY2lwaGVyX25pZF90b19jcnlwdG9kZXYoaW50IG5pZCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGNpcGhlcnNbaV0uaWQ7IGkrKykKLQkJaWYgKGNpcGhlcnNbaV0ubmlkID09IG5pZCkKLQkJCXJldHVybiAoY2lwaGVyc1tpXS5pZCk7Ci0JcmV0dXJuICgwKTsKLX0KLQotLyoKICAqIEZpbmQgb3V0IHdoYXQgY2lwaGVycyAvZGV2L2NyeXB0byB3aWxsIGxldCB1cyBoYXZlIGEgc2Vzc2lvbiBmb3IuCiAgKiBYWFggbm90ZSwgdGhhdCBzb21lIG9mIHRoZXNlIG9wZW5zc2wgZG9lc24ndCBkZWFsIHdpdGggeWV0IQogICogcmV0dXJuaW5nIHRoZW0gaGVyZSBpcyBoYXJtbGVzcywgYXMgbG9uZyBhcyB3ZSByZXR1cm4gTlVMTApAQCAtMjcwLDcgKzI0MCw3IEBACiAJCXJldHVybiAoMCk7CiAJfQogCW1lbXNldCgmc2VzcywgMCwgc2l6ZW9mKHNlc3MpKTsKLQlzZXNzLmtleSA9IChjYWRkcl90KSIxMjM0NTY3ODEyMzQ1Njc4MTIzNDU2NzgiOworCXNlc3Mua2V5ID0gKGNhZGRyX3QpIjEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ubyI7CiAKIAlmb3IgKGkgPSAwOyBjaXBoZXJzW2ldLmlkICYmIGNvdW50IDwgQ1JZUFRPX0FMR09SSVRITV9NQVg7IGkrKykgewogCQlpZiAoY2lwaGVyc1tpXS5uaWQgPT0gTklEX3VuZGVmKQpAQCAtMjkxLDcgKzI2MSw3IEBACiAJcmV0dXJuIChjb3VudCk7CiB9CiAKLSNpZiAwICAvKiB1bnVzZWQgKi8KKyNpZmRlZiBVU0VfQ1JZUFRPREVWX0RJR0VTVFMKIC8qCiAgKiBGaW5kIG91dCB3aGF0IGRpZ2VzdHMgL2Rldi9jcnlwdG8gd2lsbCBsZXQgdXMgaGF2ZSBhIHNlc3Npb24gZm9yLgogICogWFhYIG5vdGUsIHRoYXQgc29tZSBvZiB0aGVzZSBvcGVuc3NsIGRvZXNuJ3QgZGVhbCB3aXRoIHlldCEKQEAgLTMxMCwxMCArMjgwLDEyIEBACiAJCXJldHVybiAoMCk7CiAJfQogCW1lbXNldCgmc2VzcywgMCwgc2l6ZW9mKHNlc3MpKTsKKwlzZXNzLm1hY2tleSA9IChjYWRkcl90KSIxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm8iOwogCWZvciAoaSA9IDA7IGRpZ2VzdHNbaV0uaWQgJiYgY291bnQgPCBDUllQVE9fQUxHT1JJVEhNX01BWDsgaSsrKSB7CiAJCWlmIChkaWdlc3RzW2ldLm5pZCA9PSBOSURfdW5kZWYpCiAJCQljb250aW51ZTsKIAkJc2Vzcy5tYWMgPSBkaWdlc3RzW2ldLmlkOworCQlzZXNzLm1hY2tleWxlbiA9IGRpZ2VzdHNbaV0ua2V5bGVuOwogCQlzZXNzLmNpcGhlciA9IDA7CiAJCWlmIChpb2N0bChmZCwgQ0lPQ0dTRVNTSU9OLCAmc2VzcykgIT0gLTEgJiYKIAkJICAgIGlvY3RsKGZkLCBDSU9DRlNFU1NJT04sICZzZXNzLnNlcykgIT0gLTEpCkBAIC0zMjcsOCArMjk5LDcgQEAKIAkJKmNuaWRzID0gTlVMTDsKIAlyZXR1cm4gKGNvdW50KTsKIH0KLQotI2VuZGlmCisjZW5kaWYgIC8qIDAgKi8KIAogLyoKICAqIEZpbmQgdGhlIHVzZWFibGUgY2lwaGVyc3xkaWdlc3RzIGZyb20gZGV2L2NyeXB0byAtIHRoaXMgaXMgdGhlIGZpcnN0CkBAIC0zNjAsNiArMzMxLDkgQEAKIHN0YXRpYyBpbnQKIGNyeXB0b2Rldl91c2FibGVfZGlnZXN0cyhjb25zdCBpbnQgKipuaWRzKQogeworI2lmZGVmIFVTRV9DUllQVE9ERVZfRElHRVNUUworCXJldHVybiAoZ2V0X2NyeXB0b2Rldl9kaWdlc3RzKG5pZHMpKTsKKyNlbHNlCiAJLyoKIAkgKiBYWFhYIGp1c3QgZGlzYWJsZSBhbGwgZGlnZXN0cyBmb3Igbm93LCBiZWNhdXNlIGl0IHN1Y2tzLgogCSAqIHdlIG5lZWQgYSBiZXR0ZXIgd2F5IHRvIGRlY2lkZSB0aGlzIC0gaS5lLiBJIG1heSBub3QKQEAgLTM3NCwxMSArMzQ4LDEyIEBACiAJICovCiAJKm5pZHMgPSBOVUxMOwogCXJldHVybiAoMCk7CisjZW5kaWYKIH0KIAogc3RhdGljIGludAogY3J5cHRvZGV2X2NpcGhlcihFVlBfQ0lQSEVSX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsCi0gICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGludCBpbmwpCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBpbmwpCiB7CiAJc3RydWN0IGNyeXB0X29wIGNyeXA7CiAJc3RydWN0IGRldl9jcnlwdG9fc3RhdGUgKnN0YXRlID0gY3R4LT5jaXBoZXJfZGF0YTsKQEAgLTQzNiwyMyArNDExLDI3IEBACiB7CiAJc3RydWN0IGRldl9jcnlwdG9fc3RhdGUgKnN0YXRlID0gY3R4LT5jaXBoZXJfZGF0YTsKIAlzdHJ1Y3Qgc2Vzc2lvbl9vcCAqc2VzcyA9ICZzdGF0ZS0+ZF9zZXNzOwotCWludCBjaXBoZXI7CisJaW50IGNpcGhlciA9IC0xLCBpOwogCi0JaWYgKChjaXBoZXIgPSBjaXBoZXJfbmlkX3RvX2NyeXB0b2RldihjdHgtPmNpcGhlci0+bmlkKSkgPT0gTklEX3VuZGVmKQotCQlyZXR1cm4gKDApOworCWZvciAoaSA9IDA7IGNpcGhlcnNbaV0uaWQ7IGkrKykKKwkJaWYgKGN0eC0+Y2lwaGVyLT5uaWQgPT0gY2lwaGVyc1tpXS5uaWQgJiYKKwkJICAgIGN0eC0+Y2lwaGVyLT5pdl9sZW4gPD0gY2lwaGVyc1tpXS5pdm1heCAmJgorCQkgICAgY3R4LT5rZXlfbGVuID09IGNpcGhlcnNbaV0ua2V5bGVuKSB7CisJCQljaXBoZXIgPSBjaXBoZXJzW2ldLmlkOworCQkJYnJlYWs7CisJCX0KIAotCWlmIChjdHgtPmNpcGhlci0+aXZfbGVuID4gY3J5cHRvZGV2X21heF9pdihjaXBoZXIpKQorCWlmICghY2lwaGVyc1tpXS5pZCkgeworCQlzdGF0ZS0+ZF9mZCA9IC0xOwogCQlyZXR1cm4gKDApOwotCi0JaWYgKCFjcnlwdG9kZXZfa2V5X2xlbmd0aF92YWxpZChjaXBoZXIsIGN0eC0+a2V5X2xlbikpCi0JCXJldHVybiAoMCk7CisJfQogCiAJbWVtc2V0KHNlc3MsIDAsIHNpemVvZihzdHJ1Y3Qgc2Vzc2lvbl9vcCkpOwogCiAJaWYgKChzdGF0ZS0+ZF9mZCA9IGdldF9kZXZfY3J5cHRvKCkpIDwgMCkKIAkJcmV0dXJuICgwKTsKIAotCXNlc3MtPmtleSA9IChjaGFyICopa2V5OworCXNlc3MtPmtleSA9IChjYWRkcl90KWtleTsKIAlzZXNzLT5rZXlsZW4gPSBjdHgtPmtleV9sZW47CiAJc2Vzcy0+Y2lwaGVyID0gY2lwaGVyOwogCkBAIC01MDUsNiArNDg0LDIwIEBACiAgKiBnZXRzIGNhbGxlZCB3aGVuIGxpYmNyeXB0byByZXF1ZXN0cyBhIGNpcGhlciBOSUQuCiAgKi8KIAorLyogUkM0ICovCitjb25zdCBFVlBfQ0lQSEVSIGNyeXB0b2Rldl9yYzQgPSB7CisJTklEX3JjNCwKKwkxLCAxNiwgMCwKKwlFVlBfQ0lQSF9WQVJJQUJMRV9MRU5HVEgsCisJY3J5cHRvZGV2X2luaXRfa2V5LAorCWNyeXB0b2Rldl9jaXBoZXIsCisJY3J5cHRvZGV2X2NsZWFudXAsCisJc2l6ZW9mKHN0cnVjdCBkZXZfY3J5cHRvX3N0YXRlKSwKKwlOVUxMLAorCU5VTEwsCisJTlVMTAorfTsKKwogLyogREVTIENCQyBFVlAgKi8KIGNvbnN0IEVWUF9DSVBIRVIgY3J5cHRvZGV2X2Rlc19jYmMgPSB7CiAJTklEX2Rlc19jYmMsCkBAIC01NzIsNiArNTY1LDMyIEBACiAJTlVMTAogfTsKIAorY29uc3QgRVZQX0NJUEhFUiBjcnlwdG9kZXZfYWVzXzE5Ml9jYmMgPSB7CisJTklEX2Flc18xOTJfY2JjLAorCTE2LCAyNCwgMTYsCisJRVZQX0NJUEhfQ0JDX01PREUsCisJY3J5cHRvZGV2X2luaXRfa2V5LAorCWNyeXB0b2Rldl9jaXBoZXIsCisJY3J5cHRvZGV2X2NsZWFudXAsCisJc2l6ZW9mKHN0cnVjdCBkZXZfY3J5cHRvX3N0YXRlKSwKKwlFVlBfQ0lQSEVSX3NldF9hc24xX2l2LAorCUVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCisJTlVMTAorfTsKKworY29uc3QgRVZQX0NJUEhFUiBjcnlwdG9kZXZfYWVzXzI1Nl9jYmMgPSB7CisJTklEX2Flc18yNTZfY2JjLAorCTE2LCAzMiwgMTYsCisJRVZQX0NJUEhfQ0JDX01PREUsCisJY3J5cHRvZGV2X2luaXRfa2V5LAorCWNyeXB0b2Rldl9jaXBoZXIsCisJY3J5cHRvZGV2X2NsZWFudXAsCisJc2l6ZW9mKHN0cnVjdCBkZXZfY3J5cHRvX3N0YXRlKSwKKwlFVlBfQ0lQSEVSX3NldF9hc24xX2l2LAorCUVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCisJTlVMTAorfTsKKwogLyoKICAqIFJlZ2lzdGVyZWQgYnkgdGhlIEVOR0lORSB3aGVuIHVzZWQgdG8gZmluZCBvdXQgaG93IHRvIGRlYWwgd2l0aAogICogYSBwYXJ0aWN1bGFyIE5JRCBpbiB0aGUgRU5HSU5FLiB0aGlzIHNheXMgd2hhdCB3ZSdsbCBkbyBhdCB0aGUKQEAgLTU4NSw2ICs2MDQsOSBAQAogCQlyZXR1cm4gKGNyeXB0b2Rldl91c2FibGVfY2lwaGVycyhuaWRzKSk7CiAKIAlzd2l0Y2ggKG5pZCkgeworCWNhc2UgTklEX3JjNDoKKwkJKmNpcGhlciA9ICZjcnlwdG9kZXZfcmM0OworCQlicmVhazsKIAljYXNlIE5JRF9kZXNfZWRlM19jYmM6CiAJCSpjaXBoZXIgPSAmY3J5cHRvZGV2XzNkZXNfY2JjOwogCQlicmVhazsKQEAgLTYwMCw2ICs2MjIsMTIgQEAKIAljYXNlIE5JRF9hZXNfMTI4X2NiYzoKIAkJKmNpcGhlciA9ICZjcnlwdG9kZXZfYWVzX2NiYzsKIAkJYnJlYWs7CisJY2FzZSBOSURfYWVzXzE5Ml9jYmM6CisJCSpjaXBoZXIgPSAmY3J5cHRvZGV2X2Flc18xOTJfY2JjOworCQlicmVhazsKKwljYXNlIE5JRF9hZXNfMjU2X2NiYzoKKwkJKmNpcGhlciA9ICZjcnlwdG9kZXZfYWVzXzI1Nl9jYmM7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCSpjaXBoZXIgPSBOVUxMOwogCQlicmVhazsKQEAgLTYwNyw2ICs2MzUsMjM0IEBACiAJcmV0dXJuICgqY2lwaGVyICE9IE5VTEwpOwogfQogCisKKyNpZmRlZiBVU0VfQ1JZUFRPREVWX0RJR0VTVFMKKworLyogY29udmVydCBkaWdlc3QgdHlwZSB0byBjcnlwdG9kZXYgKi8KK3N0YXRpYyBpbnQKK2RpZ2VzdF9uaWRfdG9fY3J5cHRvZGV2KGludCBuaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBkaWdlc3RzW2ldLmlkOyBpKyspCisJCWlmIChkaWdlc3RzW2ldLm5pZCA9PSBuaWQpCisJCQlyZXR1cm4gKGRpZ2VzdHNbaV0uaWQpOworCXJldHVybiAoMCk7Cit9CisKKworc3RhdGljIGludAorZGlnZXN0X2tleV9sZW5ndGgoaW50IG5pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGRpZ2VzdHNbaV0uaWQ7IGkrKykKKwkJaWYgKGRpZ2VzdHNbaV0ubmlkID09IG5pZCkKKwkJCXJldHVybiBkaWdlc3RzW2ldLmtleWxlbjsKKwlyZXR1cm4gKDApOworfQorCisKK3N0YXRpYyBpbnQgY3J5cHRvZGV2X2RpZ2VzdF9pbml0KEVWUF9NRF9DVFggKmN0eCkKK3sKKwlzdHJ1Y3QgZGV2X2NyeXB0b19zdGF0ZSAqc3RhdGUgPSBjdHgtPm1kX2RhdGE7CisJc3RydWN0IHNlc3Npb25fb3AgKnNlc3MgPSAmc3RhdGUtPmRfc2VzczsKKwlpbnQgZGlnZXN0OworCisJaWYgKChkaWdlc3QgPSBkaWdlc3RfbmlkX3RvX2NyeXB0b2RldihjdHgtPmRpZ2VzdC0+dHlwZSkpID09IE5JRF91bmRlZil7CisJCXByaW50ZigiY3J5cHRvZGV2X2RpZ2VzdF9pbml0OiBDYW4ndCBnZXQgZGlnZXN0IFxuIik7CisJCXJldHVybiAoMCk7CisJfQorCisJbWVtc2V0KHN0YXRlLCAwLCBzaXplb2Yoc3RydWN0IGRldl9jcnlwdG9fc3RhdGUpKTsKKworCWlmICgoc3RhdGUtPmRfZmQgPSBnZXRfZGV2X2NyeXB0bygpKSA8IDApIHsKKwkJcHJpbnRmKCJjcnlwdG9kZXZfZGlnZXN0X2luaXQ6IENhbid0IGdldCBEZXYgXG4iKTsKKwkJcmV0dXJuICgwKTsKKwl9CisKKwlzZXNzLT5tYWNrZXkgPSBzdGF0ZS0+ZHVtbXlfbWFjX2tleTsKKwlzZXNzLT5tYWNrZXlsZW4gPSBkaWdlc3Rfa2V5X2xlbmd0aChjdHgtPmRpZ2VzdC0+dHlwZSk7CisJc2Vzcy0+bWFjID0gZGlnZXN0OworCisJaWYgKGlvY3RsKHN0YXRlLT5kX2ZkLCBDSU9DR1NFU1NJT04sIHNlc3MpIDwgMCkgeworCQljbG9zZShzdGF0ZS0+ZF9mZCk7CisJCXN0YXRlLT5kX2ZkID0gLTE7CisJCXByaW50ZigiY3J5cHRvZGV2X2RpZ2VzdF9pbml0OiBPcGVuIHNlc3Npb24gZmFpbGVkXG4iKTsKKwkJcmV0dXJuICgwKTsKKwl9CisKKwlyZXR1cm4gKDEpOworfQorCitzdGF0aWMgaW50IGNyeXB0b2Rldl9kaWdlc3RfdXBkYXRlKEVWUF9NRF9DVFggKmN0eCwgY29uc3Qgdm9pZCAqZGF0YSwKKwkJc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBjcnlwdF9vcCBjcnlwOworCXN0cnVjdCBkZXZfY3J5cHRvX3N0YXRlICpzdGF0ZSA9IGN0eC0+bWRfZGF0YTsKKwlzdHJ1Y3Qgc2Vzc2lvbl9vcCAqc2VzcyA9ICZzdGF0ZS0+ZF9zZXNzOworCisJaWYgKCFkYXRhIHx8IHN0YXRlLT5kX2ZkIDwgMCkgeworCQlwcmludGYoImNyeXB0b2Rldl9kaWdlc3RfdXBkYXRlOiBpbGxlZ2FsIGlucHV0cyBcbiIpOworCQlyZXR1cm4gKDApOworCX0KKworCWlmICghY291bnQpIHsKKwkJcmV0dXJuICgwKTsKKwl9CisKKwlpZiAoIShjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX09ORVNIT1QpKSB7CisJCS8qIGlmIGFwcGxpY2F0aW9uIGRvZXNuJ3Qgc3VwcG9ydCBvbmUgYnVmZmVyICovCisJCXN0YXRlLT5tYWNfZGF0YSA9IE9QRU5TU0xfcmVhbGxvYyhzdGF0ZS0+bWFjX2RhdGEsIHN0YXRlLT5tYWNfbGVuICsgY291bnQpOworCisJCWlmICghc3RhdGUtPm1hY19kYXRhKSB7CisJCQlwcmludGYoImNyeXB0b2Rldl9kaWdlc3RfdXBkYXRlOiByZWFsbG9jIGZhaWxlZFxuIik7CisJCQlyZXR1cm4gKDApOworCQl9CisKKwkJbWVtY3B5KHN0YXRlLT5tYWNfZGF0YSArIHN0YXRlLT5tYWNfbGVuLCBkYXRhLCBjb3VudCk7CisgICAJCXN0YXRlLT5tYWNfbGVuICs9IGNvdW50OworCQorCQlyZXR1cm4gKDEpOworCX0KKworCW1lbXNldCgmY3J5cCwgMCwgc2l6ZW9mKGNyeXApKTsKKworCWNyeXAuc2VzID0gc2Vzcy0+c2VzOworCWNyeXAuZmxhZ3MgPSAwOworCWNyeXAubGVuID0gY291bnQ7CisJY3J5cC5zcmMgPSAoY2FkZHJfdCkgZGF0YTsKKwljcnlwLmRzdCA9IE5VTEw7CisJY3J5cC5tYWMgPSAoY2FkZHJfdCkgc3RhdGUtPmRpZ2VzdF9yZXM7CisJaWYgKGlvY3RsKHN0YXRlLT5kX2ZkLCBDSU9DQ1JZUFQsICZjcnlwKSA8IDApIHsKKwkJcHJpbnRmKCJjcnlwdG9kZXZfZGlnZXN0X3VwZGF0ZTogZGlnZXN0IGZhaWxlZFxuIik7CisJCXJldHVybiAoMCk7CisJfQorCXJldHVybiAoMSk7Cit9CisKKworc3RhdGljIGludCBjcnlwdG9kZXZfZGlnZXN0X2ZpbmFsKEVWUF9NRF9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqbWQpCit7CisJc3RydWN0IGNyeXB0X29wIGNyeXA7CisJc3RydWN0IGRldl9jcnlwdG9fc3RhdGUgKnN0YXRlID0gY3R4LT5tZF9kYXRhOworCXN0cnVjdCBzZXNzaW9uX29wICpzZXNzID0gJnN0YXRlLT5kX3Nlc3M7CisKKwlpbnQgcmV0ID0gMTsKKworCWlmICghbWQgfHwgc3RhdGUtPmRfZmQgPCAwKSB7CisJCXByaW50ZigiY3J5cHRvZGV2X2RpZ2VzdF9maW5hbDogaWxsZWdhbCBpbnB1dFxuIik7CisJCXJldHVybigwKTsKKwl9CisKKwlpZiAoISAoY3R4LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19PTkVTSE9UKSApIHsKKwkJLyogaWYgYXBwbGljYXRpb24gZG9lc24ndCBzdXBwb3J0IG9uZSBidWZmZXIgKi8KKwkJbWVtc2V0KCZjcnlwLCAwLCBzaXplb2YoY3J5cCkpOworCisJCWNyeXAuc2VzID0gc2Vzcy0+c2VzOworCQljcnlwLmZsYWdzID0gMDsKKwkJY3J5cC5sZW4gPSBzdGF0ZS0+bWFjX2xlbjsKKwkJY3J5cC5zcmMgPSBzdGF0ZS0+bWFjX2RhdGE7CisJCWNyeXAuZHN0ID0gTlVMTDsKKwkJY3J5cC5tYWMgPSAoY2FkZHJfdCltZDsKKworCQlpZiAoaW9jdGwoc3RhdGUtPmRfZmQsIENJT0NDUllQVCwgJmNyeXApIDwgMCkgeworCQkJcHJpbnRmKCJjcnlwdG9kZXZfZGlnZXN0X2ZpbmFsOiBkaWdlc3QgZmFpbGVkXG4iKTsKKwkJCXJldHVybiAoMCk7CisJCX0KKworCQlyZXR1cm4gMTsKKwl9CisKKwltZW1jcHkobWQsIHN0YXRlLT5kaWdlc3RfcmVzLCBjdHgtPmRpZ2VzdC0+bWRfc2l6ZSk7CisKKwlyZXR1cm4gKHJldCk7Cit9CisKKworc3RhdGljIGludCBjcnlwdG9kZXZfZGlnZXN0X2NsZWFudXAoRVZQX01EX0NUWCAqY3R4KQoreworCWludCByZXQgPSAxOworCXN0cnVjdCBkZXZfY3J5cHRvX3N0YXRlICpzdGF0ZSA9IGN0eC0+bWRfZGF0YTsKKwlzdHJ1Y3Qgc2Vzc2lvbl9vcCAqc2VzcyA9ICZzdGF0ZS0+ZF9zZXNzOworCisJaWYgKHN0YXRlLT5kX2ZkIDwgMCkgeworCQlwcmludGYoImNyeXB0b2Rldl9kaWdlc3RfY2xlYW51cDogaWxsZWdhbCBpbnB1dFxuIik7CisJCXJldHVybiAoMCk7CisJfQorCisJaWYgKHN0YXRlLT5tYWNfZGF0YSkgeworCQlPUEVOU1NMX2ZyZWUoc3RhdGUtPm1hY19kYXRhKTsKKwkJc3RhdGUtPm1hY19kYXRhID0gTlVMTDsKKwkJc3RhdGUtPm1hY19sZW4gPSAwOworCX0KKworCWlmIChzdGF0ZS0+Y29weSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoaW9jdGwoc3RhdGUtPmRfZmQsIENJT0NGU0VTU0lPTiwgJnNlc3MtPnNlcykgPCAwKSB7CisJCXByaW50ZigiY3J5cHRvZGV2X2RpZ2VzdF9jbGVhbnVwOiBmYWlsZWQgdG8gY2xvc2Ugc2Vzc2lvblxuIik7CisJCXJldCA9IDA7CisJfSBlbHNlIHsKKwkJcmV0ID0gMTsKKwl9CisJY2xvc2Uoc3RhdGUtPmRfZmQpOwkKKwlzdGF0ZS0+ZF9mZCA9IC0xOworCisJcmV0dXJuIChyZXQpOworfQorCitzdGF0aWMgaW50IGNyeXB0b2Rldl9kaWdlc3RfY29weShFVlBfTURfQ1RYICp0byxjb25zdCBFVlBfTURfQ1RYICpmcm9tKQoreworCXN0cnVjdCBkZXZfY3J5cHRvX3N0YXRlICpmc3RhdGUgPSBmcm9tLT5tZF9kYXRhOworCXN0cnVjdCBkZXZfY3J5cHRvX3N0YXRlICpkc3RhdGUgPSB0by0+bWRfZGF0YTsKKworCW1lbWNweShkc3RhdGUsIGZzdGF0ZSwgc2l6ZW9mKHN0cnVjdCBkZXZfY3J5cHRvX3N0YXRlKSk7CisKKwlpZiAoZnN0YXRlLT5tYWNfbGVuICE9IDApIHsKKwkJZHN0YXRlLT5tYWNfZGF0YSA9IE9QRU5TU0xfbWFsbG9jKGZzdGF0ZS0+bWFjX2xlbik7CisJCW1lbWNweShkc3RhdGUtPm1hY19kYXRhLCBmc3RhdGUtPm1hY19kYXRhLCBmc3RhdGUtPm1hY19sZW4pOworCX0KKworCWRzdGF0ZS0+Y29weSA9IDE7CisKKwlyZXR1cm4gMTsKK30KKworCitjb25zdCBFVlBfTUQgY3J5cHRvZGV2X3NoYTEgPSB7CisJTklEX3NoYTEsCisJTklEX3VuZGVmLCAKKwlTSEFfRElHRVNUX0xFTkdUSCwgCisJRVZQX01EX0ZMQUdfT05FU0hPVCwKKwljcnlwdG9kZXZfZGlnZXN0X2luaXQsCisJY3J5cHRvZGV2X2RpZ2VzdF91cGRhdGUsCisJY3J5cHRvZGV2X2RpZ2VzdF9maW5hbCwKKwljcnlwdG9kZXZfZGlnZXN0X2NvcHksCisJY3J5cHRvZGV2X2RpZ2VzdF9jbGVhbnVwLAorCUVWUF9QS0VZX05VTExfbWV0aG9kLAorCVNIQV9DQkxPQ0ssCisJc2l6ZW9mKHN0cnVjdCBkZXZfY3J5cHRvX3N0YXRlKSwKK307CisKK2NvbnN0IEVWUF9NRCBjcnlwdG9kZXZfbWQ1ID0geworCU5JRF9tZDUsCisJTklEX3VuZGVmLCAKKwkxNiAvKiBNRDVfRElHRVNUX0xFTkdUSCAqLywgCisJRVZQX01EX0ZMQUdfT05FU0hPVCwKKwljcnlwdG9kZXZfZGlnZXN0X2luaXQsCisJY3J5cHRvZGV2X2RpZ2VzdF91cGRhdGUsCisJY3J5cHRvZGV2X2RpZ2VzdF9maW5hbCwKKwljcnlwdG9kZXZfZGlnZXN0X2NvcHksCisJY3J5cHRvZGV2X2RpZ2VzdF9jbGVhbnVwLAorCUVWUF9QS0VZX05VTExfbWV0aG9kLAorCTY0IC8qIE1ENV9DQkxPQ0sgKi8sCisJc2l6ZW9mKHN0cnVjdCBkZXZfY3J5cHRvX3N0YXRlKSwKK307CisKKyNlbmRpZiAvKiBVU0VfQ1JZUFRPREVWX0RJR0VTVFMgKi8KKworCiBzdGF0aWMgaW50CiBjcnlwdG9kZXZfZW5naW5lX2RpZ2VzdHMoRU5HSU5FICplLCBjb25zdCBFVlBfTUQgKipkaWdlc3QsCiAgICAgY29uc3QgaW50ICoqbmlkcywgaW50IG5pZCkKQEAgLTYxNSwxMCArODcxLDE1IEBACiAJCXJldHVybiAoY3J5cHRvZGV2X3VzYWJsZV9kaWdlc3RzKG5pZHMpKTsKIAogCXN3aXRjaCAobmlkKSB7CisjaWZkZWYgVVNFX0NSWVBUT0RFVl9ESUdFU1RTCiAJY2FzZSBOSURfbWQ1OgotCQkqZGlnZXN0ID0gTlVMTDsgLyogbmVlZCB0byBtYWtlIGEgY2xlYW4gbWQ1IGNyaXR0ZXIgKi8KKwkJKmRpZ2VzdCA9ICZjcnlwdG9kZXZfbWQ1OyAKIAkJYnJlYWs7CisJY2FzZSBOSURfc2hhMToKKwkJKmRpZ2VzdCA9ICZjcnlwdG9kZXZfc2hhMTsKKyAJCWJyZWFrOwogCWRlZmF1bHQ6CisjZW5kaWYgLyogVVNFX0NSWVBUT0RFVl9ESUdFU1RTICovCiAJCSpkaWdlc3QgPSBOVUxMOwogCQlicmVhazsKIAl9CkBAIC02NDYsOCArOTA3LDkgQEAKIAliID0gbWFsbG9jKGJ5dGVzKTsKIAlpZiAoYiA9PSBOVUxMKQogCQlyZXR1cm4gKDEpOworCW1lbXNldChiLCAwLCBieXRlcyk7CiAKLQljcnAtPmNycF9wID0gKGNoYXIgKiliOworCWNycC0+Y3JwX3AgPSAoY2FkZHJfdCkgYjsKIAljcnAtPmNycF9uYml0cyA9IGJpdHM7CiAKIAlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IGEtPnRvcDsgaSsrKSB7CkBAIC02OTAsNyArOTUyLDcgQEAKIHsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPD0ga29wLT5jcmtfaXBhcmFtcyArIGtvcC0+Y3JrX29wYXJhbXM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBrb3AtPmNya19pcGFyYW1zICsga29wLT5jcmtfb3BhcmFtczsgaSsrKSB7CiAJCWlmIChrb3AtPmNya19wYXJhbVtpXS5jcnBfcCkKIAkJCWZyZWUoa29wLT5jcmtfcGFyYW1baV0uY3JwX3ApOwogCQlrb3AtPmNya19wYXJhbVtpXS5jcnBfcCA9IE5VTEw7CkBAIC03NTUsMTAgKzEwMTcsMTggQEAKIAkJZ290byBlcnI7CiAJa29wLmNya19pcGFyYW1zID0gMzsKIAotCWlmIChjcnlwdG9kZXZfYXN5bSgma29wLCBCTl9udW1fYnl0ZXMobSksIHIsIDAsIE5VTEwpID09IC0xKSB7CisJaWYgKGNyeXB0b2Rldl9hc3ltKCZrb3AsIEJOX251bV9ieXRlcyhtKSwgciwgMCwgTlVMTCkpIHsKIAkJY29uc3QgUlNBX01FVEhPRCAqbWV0aCA9IFJTQV9QS0NTMV9TU0xlYXkoKTsKKwkJcHJpbnRmKCJPQ0YgYXN5bSBwcm9jZXNzIGZhaWxlZCwgUnVubmluZyBpbiBzb2Z0d2FyZVxuIik7CisJCXJldCA9IG1ldGgtPmJuX21vZF9leHAociwgYSwgcCwgbSwgY3R4LCBpbl9tb250KTsKKworCX0gZWxzZSBpZiAoRUNBTkNFTEVEID09IGtvcC5jcmtfc3RhdHVzKSB7CisJCWNvbnN0IFJTQV9NRVRIT0QgKm1ldGggPSBSU0FfUEtDUzFfU1NMZWF5KCk7CisJCXByaW50ZigiT0NGIGhhcmR3YXJlIG9wZXJhdGlvbiBjYW5jZWxsZWQuIFJ1bm5pbmcgaW4gU29mdHdhcmVcbiIpOwogCQlyZXQgPSBtZXRoLT5ibl9tb2RfZXhwKHIsIGEsIHAsIG0sIGN0eCwgaW5fbW9udCk7CiAJfQorCS8qIGVsc2UgY3J5cHRvZGV2IG9wZXJhdGlvbiB3b3JrZWQgb2sgPT0+IHJldCA9IDEqLworCiBlcnI6CiAJemFwcGFyYW1zKCZrb3ApOwogCXJldHVybiAocmV0KTsKQEAgLTc2OCw4ICsxMDM4LDkgQEAKIGNyeXB0b2Rldl9yc2Ffbm9jcnRfbW9kX2V4cChCSUdOVU0gKnIwLCBjb25zdCBCSUdOVU0gKkksIFJTQSAqcnNhLCBCTl9DVFggKmN0eCkKIHsKIAlpbnQgcjsKLQorCWN0eCA9IEJOX0NUWF9uZXcoKTsKIAlyID0gY3J5cHRvZGV2X2JuX21vZF9leHAocjAsIEksIHJzYS0+ZCwgcnNhLT5uLCBjdHgsIE5VTEwpOworCUJOX0NUWF9mcmVlKGN0eCk7CiAJcmV0dXJuIChyKTsKIH0KIApAQCAtODAxLDEwICsxMDcyLDE4IEBACiAJCWdvdG8gZXJyOwogCWtvcC5jcmtfaXBhcmFtcyA9IDY7CiAKLQlpZiAoY3J5cHRvZGV2X2FzeW0oJmtvcCwgQk5fbnVtX2J5dGVzKHJzYS0+biksIHIwLCAwLCBOVUxMKSA9PSAtMSkgeworCWlmIChjcnlwdG9kZXZfYXN5bSgma29wLCBCTl9udW1fYnl0ZXMocnNhLT5uKSwgcjAsIDAsIE5VTEwpKSB7CiAJCWNvbnN0IFJTQV9NRVRIT0QgKm1ldGggPSBSU0FfUEtDUzFfU1NMZWF5KCk7CisJCXByaW50ZigiT0NGIGFzeW0gcHJvY2VzcyBmYWlsZWQsIHJ1bm5pbmcgaW4gU29mdHdhcmVcbiIpOworCQlyZXQgPSAoKm1ldGgtPnJzYV9tb2RfZXhwKShyMCwgSSwgcnNhLCBjdHgpOworCisJfSBlbHNlIGlmIChFQ0FOQ0VMRUQgPT0ga29wLmNya19zdGF0dXMpIHsKKwkJY29uc3QgUlNBX01FVEhPRCAqbWV0aCA9IFJTQV9QS0NTMV9TU0xlYXkoKTsKKwkJcHJpbnRmKCJPQ0YgaGFyZHdhcmUgb3BlcmF0aW9uIGNhbmNlbGxlZC4gUnVubmluZyBpbiBTb2Z0d2FyZVxuIik7CiAJCXJldCA9ICgqbWV0aC0+cnNhX21vZF9leHApKHIwLCBJLCByc2EsIGN0eCk7CiAJfQorCS8qIGVsc2UgY3J5cHRvZGV2IG9wZXJhdGlvbiB3b3JrZWQgb2sgPT0+IHJldCA9IDEqLworCiBlcnI6CiAJemFwcGFyYW1zKCZrb3ApOwogCXJldHVybiAocmV0KTsKQEAgLTk0MCw3ICsxMjE5LDggQEAKIAlrb3AuY3JrX2lwYXJhbXMgPSA3OwogCiAJaWYgKGNyeXB0b2Rldl9hc3ltKCZrb3AsIDAsIE5VTEwsIDAsIE5VTEwpID09IDApIHsKLQkJZHNhcmV0ID0ga29wLmNya19zdGF0dXM7CisvKk9DRiBzdWNjZXNzIHZhbHVlIGlzIDAsIGlmIG5vdCB6ZXJvLCBjaGFuZ2UgZHNhcmV0IHRvIGZhaWwqLworCQlpZigwICE9IGtvcC5jcmtfc3RhdHVzKSBkc2FyZXQgID0gMDsKIAl9IGVsc2UgewogCQljb25zdCBEU0FfTUVUSE9EICptZXRoID0gRFNBX09wZW5TU0woKTsKIApAQCAtMTAwMCw3ICsxMjgwLDcgQEAKIAkJZ290byBlcnI7CiAJa29wLmNya19pcGFyYW1zID0gMzsKIAotCWtvcC5jcmtfcGFyYW1bM10uY3JwX3AgPSAoY2hhciAqKWtleTsKKwlrb3AuY3JrX3BhcmFtWzNdLmNycF9wID0gKGNhZGRyX3QpIGtleTsKIAlrb3AuY3JrX3BhcmFtWzNdLmNycF9uYml0cyA9IGtleWxlbiAqIDg7CiAJa29wLmNya19vcGFyYW1zID0gMTsKIApAQCAtMTAzMSw3ICsxMzExLDcgQEAKICAqIGJ1dCBJIGV4cGVjdCB3ZSdsbCB3YW50IHNvbWUgb3B0aW9ucyBzb29uLgogICovCiBzdGF0aWMgaW50Ci1jcnlwdG9kZXZfY3RybChFTkdJTkUgKmUsIGludCBjbWQsIGxvbmcgaSwgdm9pZCAqcCwgdm9pZCAoKmYpKCkpCitjcnlwdG9kZXZfY3RybChFTkdJTkUgKmUsIGludCBjbWQsIGxvbmcgaSwgdm9pZCAqcCwgdm9pZCAoKmYpKHZvaWQpKQogewogI2lmZGVmIEhBVkVfU1lTTE9HX1IKIAlzdHJ1Y3Qgc3lzbG9nX2RhdGEgc2QgPSBTWVNMT0dfREFUQV9JTklUOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2VuZ2luZS9lbmdfZHluLmMgYi9jcnlwdG8vZW5naW5lL2VuZ19keW4uYwppbmRleCBhY2IzMGMzLi44MDdkYTdhIDEwMDY0NAotLS0gYS9jcnlwdG8vZW5naW5lL2VuZ19keW4uYworKysgYi9jcnlwdG8vZW5naW5lL2VuZ19keW4uYwpAQCAtMTQ2LDE0ICsxNDYsMTQgQEAKIAkgKiAnZGlycycgZm9yIGxvYWRpbmcuIERlZmF1bHQgaXMgdG8gdXNlICdkaXJzJyBhcyBhIGZhbGxiYWNrLiAqLwogCWludCBkaXJfbG9hZDsKIAkvKiBBIHN0YWNrIG9mIGRpcmVjdG9yaWVzIGZyb20gd2hpY2ggRU5HSU5FcyBjb3VsZCBiZSBsb2FkZWQgKi8KLQlTVEFDSyAqZGlyczsKKwlTVEFDS19PRihPUEVOU1NMX1NUUklORykgKmRpcnM7CiAJfTsKIAogLyogVGhpcyBpcyB0aGUgImV4X2RhdGEiIGluZGV4IHdlIG9idGFpbiBhbmQgcmVzZXJ2ZSBmb3IgdXNlIHdpdGggb3VyIGNvbnRleHQKICAqIHN0cnVjdHVyZS4gKi8KIHN0YXRpYyBpbnQgZHluYW1pY19leF9kYXRhX2lkeCA9IC0xOwogCi1zdGF0aWMgdm9pZCBpbnRfZnJlZV9zdHIodm9pZCAqcykgeyBPUEVOU1NMX2ZyZWUocyk7IH0KK3N0YXRpYyB2b2lkIGludF9mcmVlX3N0cihjaGFyICpzKSB7IE9QRU5TU0xfZnJlZShzKTsgfQogLyogQmVjYXVzZSBvdXIgZXhfZGF0YSBlbGVtZW50IG1heSBvciBtYXkgbm90IGdldCBhbGxvY2F0ZWQgZGVwZW5kaW5nIG9uIHdoZXRoZXIKICAqIGEgImZpcnN0LXVzZSIgb2NjdXJzIGJlZm9yZSB0aGUgRU5HSU5FIGlzIGZyZWVkLCB3ZSBoYXZlIGEgbWVtb3J5IGxlYWsKICAqIHByb2JsZW0gdG8gc29sdmUuIFdlIGNhbid0IGRlY2xhcmUgYSAibmV3IiBoYW5kbGVyIGZvciB0aGUgZXhfZGF0YSBhcyB3ZQpAQCAtMTc0LDcgKzE3NCw3IEBACiAJCWlmKGN0eC0+ZW5naW5lX2lkKQogCQkJT1BFTlNTTF9mcmVlKCh2b2lkKiljdHgtPmVuZ2luZV9pZCk7CiAJCWlmKGN0eC0+ZGlycykKLQkJCXNrX3BvcF9mcmVlKGN0eC0+ZGlycywgaW50X2ZyZWVfc3RyKTsKKwkJCXNrX09QRU5TU0xfU1RSSU5HX3BvcF9mcmVlKGN0eC0+ZGlycywgaW50X2ZyZWVfc3RyKTsKIAkJT1BFTlNTTF9mcmVlKGN0eCk7CiAJCX0KIAl9CkBAIC0yMDMsNyArMjAzLDcgQEAKIAljLT5EWU5BTUlDX0YxID0gInZfY2hlY2siOwogCWMtPkRZTkFNSUNfRjIgPSAiYmluZF9lbmdpbmUiOwogCWMtPmRpcl9sb2FkID0gMTsKLQljLT5kaXJzID0gc2tfbmV3X251bGwoKTsKKwljLT5kaXJzID0gc2tfT1BFTlNTTF9TVFJJTkdfbmV3X251bGwoKTsKIAlpZighYy0+ZGlycykKIAkJewogCQlFTkdJTkVlcnIoRU5HSU5FX0ZfRFlOQU1JQ19TRVRfREFUQV9DVFgsRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwpAQCAtMzkzLDcgKzM5Myw3IEBACiAJCQkJRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwogCQkJcmV0dXJuIDA7CiAJCQl9Ci0JCXNrX2luc2VydChjdHgtPmRpcnMsIHRtcF9zdHIsIC0xKTsKKwkJc2tfT1BFTlNTTF9TVFJJTkdfaW5zZXJ0KGN0eC0+ZGlycywgdG1wX3N0ciwgLTEpOwogCQl9CiAJCXJldHVybiAxOwogCWRlZmF1bHQ6CkBAIC00MTEsMTEgKzQxMSwxMSBAQAogCQkJCWN0eC0+RFlOQU1JQ19MSUJOQU1FLCBOVUxMLCAwKSkgIT0gTlVMTCkKIAkJcmV0dXJuIDE7CiAJLyogSWYgd2UncmUgbm90IGFsbG93ZWQgdG8gdXNlICdkaXJzJyBvciB3ZSBoYXZlIG5vbmUsIGZhaWwgKi8KLQlpZighY3R4LT5kaXJfbG9hZCB8fCAoKG51bSA9IHNrX251bShjdHgtPmRpcnMpKSA8IDEpKQorCWlmKCFjdHgtPmRpcl9sb2FkIHx8IChudW0gPSBza19PUEVOU1NMX1NUUklOR19udW0oY3R4LT5kaXJzKSkgPCAxKQogCQlyZXR1cm4gMDsKIAlmb3IobG9vcCA9IDA7IGxvb3AgPCBudW07IGxvb3ArKykKIAkJewotCQljb25zdCBjaGFyICpzID0gc2tfdmFsdWUoY3R4LT5kaXJzLCBsb29wKTsKKwkJY29uc3QgY2hhciAqcyA9IHNrX09QRU5TU0xfU1RSSU5HX3ZhbHVlKGN0eC0+ZGlycywgbG9vcCk7CiAJCWNoYXIgKm1lcmdlID0gRFNPX21lcmdlKGN0eC0+ZHluYW1pY19kc28sIGN0eC0+RFlOQU1JQ19MSUJOQU1FLCBzKTsKIAkJaWYoIW1lcmdlKQogCQkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9jcnlwdG8vZW5naW5lL2VuZ19lcnIuYyBiL2NyeXB0by9lbmdpbmUvZW5nX2Vyci5jCmluZGV4IGFjNzRkZDEuLjgxYzcwYWMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9lbmdpbmUvZW5nX2Vyci5jCisrKyBiL2NyeXB0by9lbmdpbmUvZW5nX2Vyci5jCkBAIC04Niw2ICs4Niw4IEBACiB7RVJSX0ZVTkMoRU5HSU5FX0ZfRU5HSU5FX0dFVF9ERUZBVUxUX1RZUEUpLAkiRU5HSU5FX0dFVF9ERUZBVUxUX1RZUEUifSwKIHtFUlJfRlVOQyhFTkdJTkVfRl9FTkdJTkVfR0VUX0RJR0VTVCksCSJFTkdJTkVfZ2V0X2RpZ2VzdCJ9LAoge0VSUl9GVU5DKEVOR0lORV9GX0VOR0lORV9HRVRfTkVYVCksCSJFTkdJTkVfZ2V0X25leHQifSwKK3tFUlJfRlVOQyhFTkdJTkVfRl9FTkdJTkVfR0VUX1BLRVlfQVNOMV9NRVRIKSwJIkVOR0lORV9nZXRfcGtleV9hc24xX21ldGgifSwKK3tFUlJfRlVOQyhFTkdJTkVfRl9FTkdJTkVfR0VUX1BLRVlfTUVUSCksCSJFTkdJTkVfZ2V0X3BrZXlfbWV0aCJ9LAoge0VSUl9GVU5DKEVOR0lORV9GX0VOR0lORV9HRVRfUFJFViksCSJFTkdJTkVfZ2V0X3ByZXYifSwKIHtFUlJfRlVOQyhFTkdJTkVfRl9FTkdJTkVfSU5JVCksCSJFTkdJTkVfaW5pdCJ9LAoge0VSUl9GVU5DKEVOR0lORV9GX0VOR0lORV9MSVNUX0FERCksCSJFTkdJTkVfTElTVF9BREQifSwKQEAgLTE1MSw2ICsxNTMsNyBAQAoge0VSUl9SRUFTT04oRU5HSU5FX1JfUlNBX05PVF9JTVBMRU1FTlRFRCksInJzYSBub3QgaW1wbGVtZW50ZWQifSwKIHtFUlJfUkVBU09OKEVOR0lORV9SX1VOSU1QTEVNRU5URURfQ0lQSEVSKSwidW5pbXBsZW1lbnRlZCBjaXBoZXIifSwKIHtFUlJfUkVBU09OKEVOR0lORV9SX1VOSU1QTEVNRU5URURfRElHRVNUKSwidW5pbXBsZW1lbnRlZCBkaWdlc3QifSwKK3tFUlJfUkVBU09OKEVOR0lORV9SX1VOSU1QTEVNRU5URURfUFVCTElDX0tFWV9NRVRIT0QpLCJ1bmltcGxlbWVudGVkIHB1YmxpYyBrZXkgbWV0aG9kIn0sCiB7RVJSX1JFQVNPTihFTkdJTkVfUl9WRVJTSU9OX0lOQ09NUEFUSUJJTElUWSksInZlcnNpb24gaW5jb21wYXRpYmlsaXR5In0sCiB7MCxOVUxMfQogCX07CmRpZmYgLS1naXQgYS9jcnlwdG8vZW5naW5lL2VuZ19mYXQuYyBiL2NyeXB0by9lbmdpbmUvZW5nX2ZhdC5jCmluZGV4IDI3YzE2NjIuLmRiNjZlNjIgMTAwNjQ0Ci0tLSBhL2NyeXB0by9lbmdpbmUvZW5nX2ZhdC5jCisrKyBiL2NyeXB0by9lbmdpbmUvZW5nX2ZhdC5jCkBAIC04OSw2ICs4OSwxMiBAQAogI2VuZGlmCiAJaWYoKGZsYWdzICYgRU5HSU5FX01FVEhPRF9SQU5EKSAmJiAhRU5HSU5FX3NldF9kZWZhdWx0X1JBTkQoZSkpCiAJCXJldHVybiAwOworCWlmKChmbGFncyAmIEVOR0lORV9NRVRIT0RfUEtFWV9NRVRIUykKKwkJCQkmJiAhRU5HSU5FX3NldF9kZWZhdWx0X3BrZXlfbWV0aHMoZSkpCisJCXJldHVybiAwOworCWlmKChmbGFncyAmIEVOR0lORV9NRVRIT0RfUEtFWV9BU04xX01FVEhTKQorCQkJCSYmICFFTkdJTkVfc2V0X2RlZmF1bHRfcGtleV9hc24xX21ldGhzKGUpKQorCQlyZXR1cm4gMDsKIAlyZXR1cm4gMTsKIAl9CiAKQEAgLTExNSw2ICsxMjEsMTMgQEAKIAkJKnBmbGFncyB8PSBFTkdJTkVfTUVUSE9EX0NJUEhFUlM7CiAJZWxzZSBpZiAoIXN0cm5jbXAoYWxnLCAiRElHRVNUUyIsIGxlbikpCiAJCSpwZmxhZ3MgfD0gRU5HSU5FX01FVEhPRF9ESUdFU1RTOworCWVsc2UgaWYgKCFzdHJuY21wKGFsZywgIlBLRVkiLCBsZW4pKQorCQkqcGZsYWdzIHw9CisJCQlFTkdJTkVfTUVUSE9EX1BLRVlfTUVUSFN8RU5HSU5FX01FVEhPRF9QS0VZX0FTTjFfTUVUSFM7CisJZWxzZSBpZiAoIXN0cm5jbXAoYWxnLCAiUEtFWV9DUllQVE8iLCBsZW4pKQorCQkqcGZsYWdzIHw9IEVOR0lORV9NRVRIT0RfUEtFWV9NRVRIUzsKKwllbHNlIGlmICghc3RybmNtcChhbGcsICJQS0VZX0FTTjEiLCBsZW4pKQorCQkqcGZsYWdzIHw9IEVOR0lORV9NRVRIT0RfUEtFWV9BU04xX01FVEhTOwogCWVsc2UKIAkJcmV0dXJuIDA7CiAJcmV0dXJuIDE7CkBAIC0xNTQsNiArMTY3LDcgQEAKIAlFTkdJTkVfcmVnaXN0ZXJfRUNEU0EoZSk7CiAjZW5kaWYKIAlFTkdJTkVfcmVnaXN0ZXJfUkFORChlKTsKKwlFTkdJTkVfcmVnaXN0ZXJfcGtleV9tZXRocyhlKTsKIAlyZXR1cm4gMTsKIAl9CiAKZGlmZiAtLWdpdCBhL2NyeXB0by9lbmdpbmUvZW5nX2ludC5oIGIvY3J5cHRvL2VuZ2luZS9lbmdfaW50LmgKaW5kZXggYTY2ZjEwNy4uNDUxZWY4ZiAxMDA2NDQKLS0tIGEvY3J5cHRvL2VuZ2luZS9lbmdfaW50LmgKKysrIGIvY3J5cHRvL2VuZ2luZS9lbmdfaW50LmgKQEAgLTEyNyw2ICsxMjcsOCBAQAogRU5HSU5FICplbmdpbmVfdGFibGVfc2VsZWN0X3RtcChFTkdJTkVfVEFCTEUgKip0YWJsZSwgaW50IG5pZCwgY29uc3QgY2hhciAqZiwgaW50IGwpOwogI2RlZmluZSBlbmdpbmVfdGFibGVfc2VsZWN0KHQsbikgZW5naW5lX3RhYmxlX3NlbGVjdF90bXAodCxuLF9fRklMRV9fLF9fTElORV9fKQogI2VuZGlmCit0eXBlZGVmIHZvaWQgKGVuZ2luZV90YWJsZV9kb2FsbF9jYikoaW50IG5pZCwgU1RBQ0tfT0YoRU5HSU5FKSAqc2ssIEVOR0lORSAqZGVmLCB2b2lkICphcmcpOwordm9pZCBlbmdpbmVfdGFibGVfZG9hbGwoRU5HSU5FX1RBQkxFICp0YWJsZSwgZW5naW5lX3RhYmxlX2RvYWxsX2NiICpjYiwgdm9pZCAqYXJnKTsKIAogLyogSW50ZXJuYWwgdmVyc2lvbnMgb2YgQVBJIGZ1bmN0aW9ucyB0aGF0IGhhdmUgY29udHJvbCBvdmVyIGxvY2tpbmcuIFRoZXNlIGFyZQogICogdXNlZCBiZXR3ZWVuIEMgZmlsZXMgd2hlbiBmdW5jdGlvbmFsaXR5IG5lZWRzIHRvIGJlIHNoYXJlZCBidXQgdGhlIGNhbGxlciBtYXkKQEAgLTE0Myw2ICsxNDUsMTEgQEAKIC8qIE5COiBCaXR3aXNlIE9SLWFibGUgdmFsdWVzIGZvciB0aGUgImZsYWdzIiB2YXJpYWJsZSBpbiBFTkdJTkUgYXJlIG5vdyBleHBvc2VkCiAgKiBpbiBlbmdpbmUuaC4gKi8KIAorLyogRnJlZSB1cCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgcHVibGljIGtleSBtZXRob2RzIGFzc29jaWF0ZWQgd2l0aCBFTkdJTkUgKi8KKwordm9pZCBlbmdpbmVfcGtleV9tZXRoc19mcmVlKEVOR0lORSAqZSk7Cit2b2lkIGVuZ2luZV9wa2V5X2FzbjFfbWV0aHNfZnJlZShFTkdJTkUgKmUpOworCiAvKiBUaGlzIGlzIGEgc3RydWN0dXJlIGZvciBzdG9yaW5nIGltcGxlbWVudGF0aW9ucyBvZiB2YXJpb3VzIGNyeXB0bwogICogYWxnb3JpdGhtcyBhbmQgZnVuY3Rpb25zLiAqLwogc3RydWN0IGVuZ2luZV9zdApAQCAtMTYwLDcgKzE2NywxMCBAQAogCUVOR0lORV9DSVBIRVJTX1BUUiBjaXBoZXJzOwogCS8qIERpZ2VzdCBoYW5kbGluZyBpcyB2aWEgdGhpcyBjYWxsYmFjayAqLwogCUVOR0lORV9ESUdFU1RTX1BUUiBkaWdlc3RzOwotCisJLyogUHVibGljIGtleSBoYW5kbGluZyB2aWEgdGhpcyBjYWxsYmFjayAqLworCUVOR0lORV9QS0VZX01FVEhTX1BUUiBwa2V5X21ldGhzOworCS8qIEFTTjEgcHVibGljIGtleSBoYW5kbGluZyB2aWEgdGhpcyBjYWxsYmFjayAqLworCUVOR0lORV9QS0VZX0FTTjFfTUVUSFNfUFRSIHBrZXlfYXNuMV9tZXRoczsKIAogCUVOR0lORV9HRU5fSU5UX0ZVTkNfUFRSCWRlc3Ryb3k7CiAKZGlmZiAtLWdpdCBhL2NyeXB0by9lbmdpbmUvZW5nX2xpYi5jIGIvY3J5cHRvL2VuZ2luZS9lbmdfbGliLmMKaW5kZXggNTgxNWI4Ni4uMThhNjY2NCAxMDA2NDQKLS0tIGEvY3J5cHRvL2VuZ2luZS9lbmdfbGliLmMKKysrIGIvY3J5cHRvL2VuZ2luZS9lbmdfbGliLmMKQEAgLTEyNSw2ICsxMjUsOSBAQAogCQlhYm9ydCgpOwogCQl9CiAjZW5kaWYKKwkvKiBGcmVlIHVwIGFueSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgcHVibGljIGtleSBtZXRob2RzICovCisJZW5naW5lX3BrZXlfbWV0aHNfZnJlZShlKTsKKwllbmdpbmVfcGtleV9hc24xX21ldGhzX2ZyZWUoZSk7CiAJLyogR2l2ZSB0aGUgRU5HSU5FIGEgY2hhbmNlIHRvIGRvIGFueSBzdHJ1Y3R1cmFsIGNsZWFudXAgY29ycmVzcG9uZGluZwogCSAqIHRvIGFsbG9jYXRpb24gaXQgZGlkIGluIGl0cyBjb25zdHJ1Y3RvciAoZWcuIHVubG9hZCBlcnJvciBzdHJpbmdzKSAqLwogCWlmKGUtPmRlc3Ryb3kpCmRpZmYgLS1naXQgYS9jcnlwdG8vZW5naW5lL2VuZ19saXN0LmMgYi9jcnlwdG8vZW5naW5lL2VuZ19saXN0LmMKaW5kZXggYmQ1MTE5NC4uMjc4NDZlZCAxMDA2NDQKLS0tIGEvY3J5cHRvL2VuZ2luZS9lbmdfbGlzdC5jCisrKyBiL2NyeXB0by9lbmdpbmUvZW5nX2xpc3QuYwpAQCAtMzM2LDYgKzMzNiw3IEBACiAJZGVzdC0+c3RvcmVfbWV0aCA9IHNyYy0+c3RvcmVfbWV0aDsKIAlkZXN0LT5jaXBoZXJzID0gc3JjLT5jaXBoZXJzOwogCWRlc3QtPmRpZ2VzdHMgPSBzcmMtPmRpZ2VzdHM7CisJZGVzdC0+cGtleV9tZXRocyA9IHNyYy0+cGtleV9tZXRoczsKIAlkZXN0LT5kZXN0cm95ID0gc3JjLT5kZXN0cm95OwogCWRlc3QtPmluaXQgPSBzcmMtPmluaXQ7CiAJZGVzdC0+ZmluaXNoID0gc3JjLT5maW5pc2g7CkBAIC00MTIsNiArNDEzLDcgQEAKIAkJcmV0dXJuIGl0ZXJhdG9yOwogCQl9CiBub3Rmb3VuZDoKKwlFTkdJTkVfZnJlZShpdGVyYXRvcik7CiAJRU5HSU5FZXJyKEVOR0lORV9GX0VOR0lORV9CWV9JRCxFTkdJTkVfUl9OT19TVUNIX0VOR0lORSk7CiAJRVJSX2FkZF9lcnJvcl9kYXRhKDIsICJpZD0iLCBpZCk7CiAJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9jcnlwdG8vZW5naW5lL2VuZ19vcGVuc3NsLmMgYi9jcnlwdG8vZW5naW5lL2VuZ19vcGVuc3NsLmMKaW5kZXggN2MxMzlhZS4uOWFiYjk1YyAxMDA2NDQKLS0tIGEvY3J5cHRvL2VuZ2luZS9lbmdfb3BlbnNzbC5jCisrKyBiL2NyeXB0by9lbmdpbmUvZW5nX29wZW5zc2wuYwpAQCAtMjM4LDcgKzIzOCw3IEBACiAJcmV0dXJuIDE7CiAJfQogc3RhdGljIGludCB0ZXN0X3JjNF9jaXBoZXIoRVZQX0NJUEhFUl9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LAotCQkgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgaW50IGlubCkKKwkJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBpbmwpCiAJewogI2lmZGVmIFRFU1RfRU5HX09QRU5TU0xfUkM0X1BfQ0lQSEVSCiAJZnByaW50ZihzdGRlcnIsICIoVEVTVF9FTkdfT1BFTlNTTF9SQzQpIHRlc3RfY2lwaGVyKCkgY2FsbGVkXG4iKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9lbmdpbmUvZW5nX3BhZGxvY2suYyBiL2NyeXB0by9lbmdpbmUvZW5nX3BhZGxvY2suYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQzNTU4YS4uMDAwMDAwMAotLS0gYS9jcnlwdG8vZW5naW5lL2VuZ19wYWRsb2NrLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjE5ICswLDAgQEAKLS8qIAotICogU3VwcG9ydCBmb3IgVklBIFBhZExvY2sgQWR2YW5jZWQgQ3J5cHRvZ3JhcGh5IEVuZ2luZSAoQUNFKQotICogV3JpdHRlbiBieSBNaWNoYWwgTHVkdmlnIDxtaWNoYWxAbG9naXguY3o+Ci0gKiAgICAgICAgICAgIGh0dHA6Ly93d3cubG9naXguY3ovbWljaGFsCi0gKgotICogQmlnIHRoYW5rcyB0byBBbmR5IFBvbHlha292IGZvciBhIGhlbHAgd2l0aCBvcHRpbWl6YXRpb24sIAotICogYXNzZW1ibGVyIGZpeGVzLCBwb3J0IHRvIE1TIFdpbmRvd3MgYW5kIGEgbG90IG9mIG90aGVyIAotICogdmFsdWFibGUgd29yayBvbiB0aGlzIGVuZ2luZSEKLSAqLwotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0gKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSAqCi0gKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0gKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0gKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCi0gKgotICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0gKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0gKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0gKgotICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotICogICAgYWNrbm93bGVkZ21lbnQ6Ci0gKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0gKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqCi0gKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKLSAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KLSAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgotICoKLSAqLwotCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgotI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0jaW5jbHVkZSA8b3BlbnNzbC9kc28uaD4KLSNpbmNsdWRlIDxvcGVuc3NsL2VuZ2luZS5oPgotI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0jaWZuZGVmIE9QRU5TU0xfTk9fQUVTCi0jaW5jbHVkZSA8b3BlbnNzbC9hZXMuaD4KLSNlbmRpZgotI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0KLSNpZm5kZWYgT1BFTlNTTF9OT19IVwotI2lmbmRlZiBPUEVOU1NMX05PX0hXX1BBRExPQ0sKLQotLyogQXR0ZW1wdCB0byBoYXZlIGEgc2luZ2xlIHNvdXJjZSBmb3IgYm90aCAwLjkuNyBhbmQgMC45LjggOi0pICovCi0jaWYgKE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPj0gMHgwMDkwODAwMEwpCi0jICBpZm5kZWYgT1BFTlNTTF9OT19EWU5BTUlDX0VOR0lORQotIyAgICBkZWZpbmUgRFlOQU1JQ19FTkdJTkUKLSMgIGVuZGlmCi0jZWxpZiAoT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDAwOTA3MDAwTCkKLSMgIGlmZGVmIEVOR0lORV9EWU5BTUlDX1NVUFBPUlQKLSMgICAgZGVmaW5lIERZTkFNSUNfRU5HSU5FCi0jICBlbmRpZgotI2Vsc2UKLSMgIGVycm9yICJPbmx5IE9wZW5TU0wgPj0gMC45LjcgaXMgc3VwcG9ydGVkIgotI2VuZGlmCi0KLS8qIFZJQSBQYWRMb2NrIEFFUyBpcyBhdmFpbGFibGUgKk9OTFkqIG9uIHNvbWUgeDg2IENQVXMuCi0gICBOb3Qgb25seSB0aGF0IGl0IGRvZXNuJ3QgZXhpc3QgZWxzZXdoZXJlLCBidXQgaXQKLSAgIGV2ZW4gY2FuJ3QgYmUgY29tcGlsZWQgb24gb3RoZXIgcGxhdGZvcm1zIQotIAotICAgSW4gYWRkaXRpb24sIGJlY2F1c2Ugb2YgdGhlIGhlYXZ5IHVzZSBvZiBpbmxpbmUgYXNzZW1ibGVyLAotICAgY29tcGlsZXIgY2hvaWNlIGlzIGxpbWl0ZWQgdG8gR0NDIGFuZCBNaWNyb3NvZnQgQy4gKi8KLSN1bmRlZiBDT01QSUxFX0hXX1BBRExPQ0sKLSNpZiAhZGVmaW5lZChJMzg2X09OTFkpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fSU5MSU5FX0FTTSkKLSMgaWYgKGRlZmluZWQoX19HTlVDX18pICYmIChkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9faTM4NikpKSB8fCBcCi0gICAgIChkZWZpbmVkKF9NU0NfVkVSKSAmJiBkZWZpbmVkKF9NX0lYODYpKQotIyAgZGVmaW5lIENPTVBJTEVfSFdfUEFETE9DSwotc3RhdGljIEVOR0lORSAqRU5HSU5FX3BhZGxvY2sgKHZvaWQpOwotIyBlbmRpZgotI2VuZGlmCi0KLXZvaWQgRU5HSU5FX2xvYWRfcGFkbG9jayAodm9pZCkKLXsKLS8qIE9uIG5vbi14ODYgQ1BVcyBpdCBqdXN0IHJldHVybnMuICovCi0jaWZkZWYgQ09NUElMRV9IV19QQURMT0NLCi0JRU5HSU5FICp0b2FkZCA9IEVOR0lORV9wYWRsb2NrICgpOwotCWlmICghdG9hZGQpIHJldHVybjsKLQlFTkdJTkVfYWRkICh0b2FkZCk7Ci0JRU5HSU5FX2ZyZWUgKHRvYWRkKTsKLQlFUlJfY2xlYXJfZXJyb3IgKCk7Ci0jZW5kaWYKLX0KLQotI2lmZGVmIENPTVBJTEVfSFdfUEFETE9DSwotLyogV2UgZG8gdGhlc2UgaW5jbHVkZXMgaGVyZSB0byBhdm9pZCBoZWFkZXIgcHJvYmxlbXMgb24gcGxhdGZvcm1zIHRoYXQKLSAgIGRvIG5vdCBoYXZlIHRoZSBWSUEgcGFkbG9jayBhbnl3YXkuLi4gKi8KLSNpZmRlZiBfTVNDX1ZFUgotIyBpbmNsdWRlIDxtYWxsb2MuaD4KLSMgZGVmaW5lIGFsbG9jYSBfYWxsb2NhCi0jZWxpZiBkZWZpbmVkKE5FVFdBUkVfQ0xJQikgJiYgZGVmaW5lZChfX0dOVUNfXykKLSAgdm9pZCAqYWxsb2NhKHNpemVfdCk7Ci0jIGRlZmluZSBhbGxvY2EocykgX19idWlsdGluX2FsbG9jYShzKQotI2Vsc2UKLSMgaW5jbHVkZSA8c3RkbGliLmg+Ci0jZW5kaWYKLQotLyogRnVuY3Rpb24gZm9yIEVOR0lORSBkZXRlY3Rpb24gYW5kIGNvbnRyb2wgKi8KLXN0YXRpYyBpbnQgcGFkbG9ja19hdmFpbGFibGUodm9pZCk7Ci1zdGF0aWMgaW50IHBhZGxvY2tfaW5pdChFTkdJTkUgKmUpOwotCi0vKiBSTkcgU3R1ZmYgKi8KLXN0YXRpYyBSQU5EX01FVEhPRCBwYWRsb2NrX3JhbmQ7Ci0KLS8qIENpcGhlciBTdHVmZiAqLwotI2lmbmRlZiBPUEVOU1NMX05PX0FFUwotc3RhdGljIGludCBwYWRsb2NrX2NpcGhlcnMoRU5HSU5FICplLCBjb25zdCBFVlBfQ0lQSEVSICoqY2lwaGVyLCBjb25zdCBpbnQgKipuaWRzLCBpbnQgbmlkKTsKLSNlbmRpZgotCi0vKiBFbmdpbmUgbmFtZXMgKi8KLXN0YXRpYyBjb25zdCBjaGFyICpwYWRsb2NrX2lkID0gInBhZGxvY2siOwotc3RhdGljIGNoYXIgcGFkbG9ja19uYW1lWzEwMF07Ci0KLS8qIEF2YWlsYWJsZSBmZWF0dXJlcyAqLwotc3RhdGljIGludCBwYWRsb2NrX3VzZV9hY2UgPSAwOwkvKiBBZHZhbmNlZCBDcnlwdG9ncmFwaHkgRW5naW5lICovCi1zdGF0aWMgaW50IHBhZGxvY2tfdXNlX3JuZyA9IDA7CS8qIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yICovCi0jaWZuZGVmIE9QRU5TU0xfTk9fQUVTCi1zdGF0aWMgaW50IHBhZGxvY2tfYWVzX2FsaWduX3JlcXVpcmVkID0gMTsKLSNlbmRpZgotCi0vKiA9PT09PSBFbmdpbmUgIm1hbmFnZW1lbnQiIGZ1bmN0aW9ucyA9PT09PSAqLwotCi0vKiBQcmVwYXJlIHRoZSBFTkdJTkUgc3RydWN0dXJlIGZvciByZWdpc3RyYXRpb24gKi8KLXN0YXRpYyBpbnQKLXBhZGxvY2tfYmluZF9oZWxwZXIoRU5HSU5FICplKQotewotCS8qIENoZWNrIGF2YWlsYWJsZSBmZWF0dXJlcyAqLwotCXBhZGxvY2tfYXZhaWxhYmxlKCk7Ci0KLSNpZiAxCS8qIGRpc2FibGUgUk5HIGZvciBub3csIHNlZSBjb21tZW50YXJ5IGluIHZpY2luaXR5IG9mIFJORyBjb2RlICovCi0JcGFkbG9ja191c2Vfcm5nPTA7Ci0jZW5kaWYKLQotCS8qIEdlbmVyYXRlIGEgbmljZSBlbmdpbmUgbmFtZSB3aXRoIGF2YWlsYWJsZSBmZWF0dXJlcyAqLwotCUJJT19zbnByaW50ZihwYWRsb2NrX25hbWUsIHNpemVvZihwYWRsb2NrX25hbWUpLAotCQkiVklBIFBhZExvY2sgKCVzLCAlcykiLCAKLQkJIHBhZGxvY2tfdXNlX3JuZyA/ICJSTkciIDogIm5vLVJORyIsCi0JCSBwYWRsb2NrX3VzZV9hY2UgPyAiQUNFIiA6ICJuby1BQ0UiKTsKLQotCS8qIFJlZ2lzdGVyIGV2ZXJ5dGhpbmcgb3IgcmV0dXJuIHdpdGggYW4gZXJyb3IgKi8gCi0JaWYgKCFFTkdJTkVfc2V0X2lkKGUsIHBhZGxvY2tfaWQpIHx8Ci0JICAgICFFTkdJTkVfc2V0X25hbWUoZSwgcGFkbG9ja19uYW1lKSB8fAotCi0JICAgICFFTkdJTkVfc2V0X2luaXRfZnVuY3Rpb24oZSwgcGFkbG9ja19pbml0KSB8fAotI2lmbmRlZiBPUEVOU1NMX05PX0FFUwotCSAgICAocGFkbG9ja191c2VfYWNlICYmICFFTkdJTkVfc2V0X2NpcGhlcnMgKGUsIHBhZGxvY2tfY2lwaGVycykpIHx8Ci0jZW5kaWYKLQkgICAgKHBhZGxvY2tfdXNlX3JuZyAmJiAhRU5HSU5FX3NldF9SQU5EIChlLCAmcGFkbG9ja19yYW5kKSkpIHsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogRXZlcnl0aGluZyBsb29rcyBnb29kICovCi0JcmV0dXJuIDE7Ci19Ci0KLS8qIENvbnN0cnVjdG9yICovCi1zdGF0aWMgRU5HSU5FICoKLUVOR0lORV9wYWRsb2NrKHZvaWQpCi17Ci0JRU5HSU5FICplbmcgPSBFTkdJTkVfbmV3KCk7Ci0KLQlpZiAoIWVuZykgewotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlpZiAoIXBhZGxvY2tfYmluZF9oZWxwZXIoZW5nKSkgewotCQlFTkdJTkVfZnJlZShlbmcpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlyZXR1cm4gZW5nOwotfQotCi0vKiBDaGVjayBhdmFpbGFiaWxpdHkgb2YgdGhlIGVuZ2luZSAqLwotc3RhdGljIGludAotcGFkbG9ja19pbml0KEVOR0lORSAqZSkKLXsKLQlyZXR1cm4gKHBhZGxvY2tfdXNlX3JuZyB8fCBwYWRsb2NrX3VzZV9hY2UpOwotfQotCi0vKiBUaGlzIHN0dWZmIGlzIG5lZWRlZCBpZiB0aGlzIEVOR0lORSBpcyBiZWluZyBjb21waWxlZCBpbnRvIGEgc2VsZi1jb250YWluZWQKLSAqIHNoYXJlZC1saWJyYXJ5LgotICovCi0jaWZkZWYgRFlOQU1JQ19FTkdJTkUKLXN0YXRpYyBpbnQKLXBhZGxvY2tfYmluZF9mbihFTkdJTkUgKmUsIGNvbnN0IGNoYXIgKmlkKQotewotCWlmIChpZCAmJiAoc3RyY21wKGlkLCBwYWRsb2NrX2lkKSAhPSAwKSkgewotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoIXBhZGxvY2tfYmluZF9oZWxwZXIoZSkpICB7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiAxOwotfQotCi1JTVBMRU1FTlRfRFlOQU1JQ19DSEVDS19GTiAoKQotSU1QTEVNRU5UX0RZTkFNSUNfQklORF9GTiAocGFkbG9ja19iaW5kX2ZuKQotI2VuZGlmIC8qIERZTkFNSUNfRU5HSU5FICovCi0KLS8qID09PT09IEhlcmUgY29tZXMgdGhlICJyZWFsIiBlbmdpbmUgPT09PT0gKi8KLQotI2lmbmRlZiBPUEVOU1NMX05PX0FFUwotLyogU29tZSBBRVMtcmVsYXRlZCBjb25zdGFudHMgKi8KLSNkZWZpbmUgQUVTX0JMT0NLX1NJWkUJCTE2Ci0jZGVmaW5lIEFFU19LRVlfU0laRV8xMjgJMTYKLSNkZWZpbmUgQUVTX0tFWV9TSVpFXzE5MgkyNAotI2RlZmluZSBBRVNfS0VZX1NJWkVfMjU2CTMyCi0KLS8qIEhlcmUgd2Ugc3RvcmUgdGhlIHN0YXR1cyBpbmZvcm1hdGlvbiByZWxldmFudCB0byB0aGUgCi0gICBjdXJyZW50IGNvbnRleHQuICovCi0vKiBCSUcgRkFUIFdBUk5JTkc6Ci0gKiAJSW5saW5lIGFzc2VtYmxlciBpbiBQQURMT0NLX1hDUllQVF9BU00oKQotICogCWRlcGVuZHMgb24gdGhlIG9yZGVyIG9mIGl0ZW1zIGluIHRoaXMgc3RydWN0dXJlLgotICogCURvbid0IGJsaW5kbHkgbW9kaWZ5LCByZW9yZGVyLCBldGMhCi0gKi8KLXN0cnVjdCBwYWRsb2NrX2NpcGhlcl9kYXRhCi17Ci0JdW5zaWduZWQgY2hhciBpdltBRVNfQkxPQ0tfU0laRV07CS8qIEluaXRpYWxpemF0aW9uIHZlY3RvciAqLwotCXVuaW9uIHsJdW5zaWduZWQgaW50IHBhZFs0XTsKLQkJc3RydWN0IHsKLQkJCWludCByb3VuZHM6NDsKLQkJCWludCBkZ3N0OjE7CS8qIG4vYSBpbiBDMyAqLwotCQkJaW50IGFsaWduOjE7CS8qIG4vYSBpbiBDMyAqLwotCQkJaW50IGNpcGhyOjE7CS8qIG4vYSBpbiBDMyAqLwotCQkJdW5zaWduZWQgaW50IGtleWdlbjoxOwotCQkJaW50IGludGVybToxOwotCQkJdW5zaWduZWQgaW50IGVuY2RlYzoxOwotCQkJaW50IGtzaXplOjI7Ci0JCX0gYjsKLQl9IGN3b3JkOwkJLyogQ29udHJvbCB3b3JkICovCi0JQUVTX0tFWSBrczsJCS8qIEVuY3J5cHRpb24ga2V5ICovCi19OwotCi0vKgotICogRXNzZW50aWFsbHkgdGhpcyB2YXJpYWJsZSBiZWxvbmdzIGluIHRocmVhZCBsb2NhbCBzdG9yYWdlLgotICogSGF2aW5nIHRoaXMgdmFyaWFibGUgZ2xvYmFsIG9uIHRoZSBvdGhlciBoYW5kIGNhbiBvbmx5IGNhdXNlCi0gKiBmZXcgYm9ndXMga2V5IHJlbG9hZHMgW2lmIGFueSBhdCBhbGwgb24gc2luZ2xlLUNQVSBzeXN0ZW1dLAotICogc28gd2UgYWNjZXB0IHRoZSBwZW5hdGx5Li4uCi0gKi8KLXN0YXRpYyB2b2xhdGlsZSBzdHJ1Y3QgcGFkbG9ja19jaXBoZXJfZGF0YSAqcGFkbG9ja19zYXZlZF9jb250ZXh0OwotI2VuZGlmCi0KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBJbmxpbmUgYXNzZW1ibGVyIHNlY3Rpb24ocykuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBPcmRlciBvZiBhcmd1bWVudHMgaXMgY2hvc2VuIHRvIGZhY2lsaXRhdGUgV2luZG93cyBwb3J0Ci0gKiB1c2luZyBfX2Zhc3RjYWxsIGNhbGxpbmcgY29udmVudGlvbi4gSWYgeW91IHdpc2ggdG8gYWRkCi0gKiBtb3JlIHJvdXRpbmVzLCBrZWVwIGluIG1pbmQgdGhhdCBmaXJzdCBfX2Zhc3RjYWxsCi0gKiBhcmd1bWVudCBpcyBwYXNzZWQgaW4gJWVjeCBhbmQgc2Vjb25kIC0gaW4gJWVkeC4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotI2lmIGRlZmluZWQoX19HTlVDX18pICYmIF9fR05VQ19fPj0yCi0vKgotICogQXMgZm9yIGV4Y2Vzc2l2ZSAicHVzaCAlZWJ4Ii8icG9wICVlYngiIGZvdW5kIGFsbCBvdmVyLgotICogV2hlbiBnZW5lcmF0aW5nIHBvc2l0aW9uLWluZGVwZW5kZW50IGNvZGUgR0NDIHdvbid0IGxldAotICogdXMgdXNlICJiIiBpbiBhc3NlbWJsZXIgdGVtcGxhdGVzIG5vciBldmVuIHJlc3BlY3QgImVieCIKLSAqIGluICJjbG9iYmVyIGRlc2NyaXB0aW9uLiIgVGhlcmVmb3JlIHRoZSB0cm91YmxlLi4uCi0gKi8KLQotLyogSGVscGVyIGZ1bmN0aW9uIC0gY2hlY2sgaWYgYSBDUFVJRCBpbnN0cnVjdGlvbgotICAgaXMgYXZhaWxhYmxlIG9uIHRoaXMgQ1BVICovCi1zdGF0aWMgaW50Ci1wYWRsb2NrX2luc25fY3B1aWRfYXZhaWxhYmxlKHZvaWQpCi17Ci0JaW50IHJlc3VsdCA9IC0xOwotCi0JLyogV2UncmUgY2hlY2tpbmcgaWYgdGhlIGJpdCAjMjEgb2YgRUZMQUdTIAotCSAgIGNhbiBiZSB0b2dnbGVkLiBJZiB5ZXMgPSBDUFVJRCBpcyBhdmFpbGFibGUuICovCi0JYXNtIHZvbGF0aWxlICgKLQkJInB1c2hmXG4iCi0JCSJwb3BsICUlZWF4XG4iCi0JCSJ4b3JsICQweDIwMDAwMCwgJSVlYXhcbiIKLQkJIm1vdmwgJSVlYXgsICUlZWN4XG4iCi0JCSJhbmRsICQweDIwMDAwMCwgJSVlY3hcbiIKLQkJInB1c2hsICUlZWF4XG4iCi0JCSJwb3BmXG4iCi0JCSJwdXNoZlxuIgotCQkicG9wbCAlJWVheFxuIgotCQkiYW5kbCAkMHgyMDAwMDAsICUlZWF4XG4iCi0JCSJ4b3JsICUlZWF4LCAlJWVjeFxuIgotCQkibW92bCAlJWVjeCwgJTBcbiIKLQkJOiAiPXIiIChyZXN1bHQpIDogOiAiZWF4IiwgImVjeCIpOwotCQotCXJldHVybiAocmVzdWx0ID09IDApOwotfQotCi0vKiBMb2FkIHN1cHBvcnRlZCBmZWF0dXJlcyBvZiB0aGUgQ1BVIHRvIHNlZSBpZgotICAgdGhlIFBhZExvY2sgaXMgYXZhaWxhYmxlLiAqLwotc3RhdGljIGludAotcGFkbG9ja19hdmFpbGFibGUodm9pZCkKLXsKLQljaGFyIHZlbmRvcl9zdHJpbmdbMTZdOwotCXVuc2lnbmVkIGludCBlYXgsIGVkeDsKLQotCS8qIEZpcnN0IGNoZWNrIGlmIHRoZSBDUFVJRCBpbnN0cnVjdGlvbiBpcyBhdmFpbGFibGUgYXQgYWxsLi4uICovCi0JaWYgKCEgcGFkbG9ja19pbnNuX2NwdWlkX2F2YWlsYWJsZSgpKQotCQlyZXR1cm4gMDsKLQotCS8qIEFyZSB3ZSBydW5uaW5nIG9uIHRoZSBDZW50YXVyIChWSUEpIENQVT8gKi8KLQllYXggPSAweDAwMDAwMDAwOwotCXZlbmRvcl9zdHJpbmdbMTJdID0gMDsKLQlhc20gdm9sYXRpbGUgKAotCQkicHVzaGwJJSVlYnhcbiIKLQkJImNwdWlkXG4iCi0JCSJtb3ZsCSUlZWJ4LCglJWVkaSlcbiIKLQkJIm1vdmwJJSVlZHgsNCglJWVkaSlcbiIKLQkJIm1vdmwJJSVlY3gsOCglJWVkaSlcbiIKLQkJInBvcGwJJSVlYngiCi0JCTogIithIihlYXgpIDogIkQiKHZlbmRvcl9zdHJpbmcpIDogImVjeCIsICJlZHgiKTsKLQlpZiAoc3RyY21wKHZlbmRvcl9zdHJpbmcsICJDZW50YXVySGF1bHMiKSAhPSAwKQotCQlyZXR1cm4gMDsKLQotCS8qIENoZWNrIGZvciBDZW50YXVyIEV4dGVuZGVkIEZlYXR1cmUgRmxhZ3MgcHJlc2VuY2UgKi8KLQllYXggPSAweEMwMDAwMDAwOwotCWFzbSB2b2xhdGlsZSAoInB1c2hsICUlZWJ4OyBjcHVpZDsgcG9wbAklJWVieCIKLQkJOiAiK2EiKGVheCkgOiA6ICJlY3giLCAiZWR4Iik7Ci0JaWYgKGVheCA8IDB4QzAwMDAwMDEpCi0JCXJldHVybiAwOwotCi0JLyogUmVhZCB0aGUgQ2VudGF1ciBFeHRlbmRlZCBGZWF0dXJlIEZsYWdzICovCi0JZWF4ID0gMHhDMDAwMDAwMTsKLQlhc20gdm9sYXRpbGUgKCJwdXNobCAlJWVieDsgY3B1aWQ7IHBvcGwgJSVlYngiCi0JCTogIithIihlYXgpLCAiPWQiKGVkeCkgOiA6ICJlY3giKTsKLQotCS8qIEZpbGwgdXAgc29tZSBmbGFncyAqLwotCXBhZGxvY2tfdXNlX2FjZSA9ICgoZWR4ICYgKDB4Mzw8NikpID09ICgweDM8PDYpKTsKLQlwYWRsb2NrX3VzZV9ybmcgPSAoKGVkeCAmICgweDM8PDIpKSA9PSAoMHgzPDwyKSk7Ci0KLQlyZXR1cm4gcGFkbG9ja191c2VfYWNlICsgcGFkbG9ja191c2Vfcm5nOwotfQotCi0jaWZuZGVmIE9QRU5TU0xfTk9fQUVTCi0vKiBPdXIgb3duIGh0b25sKCkvbnRvaGwoKSAqLwotc3RhdGljIGlubGluZSB2b2lkCi1wYWRsb2NrX2Jzd2FwbChBRVNfS0VZICprcykKLXsKLQlzaXplX3QgaSA9IHNpemVvZihrcy0+cmRfa2V5KS9zaXplb2Yoa3MtPnJkX2tleVswXSk7Ci0JdW5zaWduZWQgaW50ICprZXkgPSBrcy0+cmRfa2V5OwotCi0Jd2hpbGUgKGktLSkgewotCQlhc20gdm9sYXRpbGUgKCJic3dhcGwgJTAiIDogIityIigqa2V5KSk7Ci0JCWtleSsrOwotCX0KLX0KLSNlbmRpZgotCi0vKiBGb3JjZSBrZXkgcmVsb2FkIGZyb20gbWVtb3J5IHRvIHRoZSBDUFUgbWljcm9jb2RlLgotICAgTG9hZGluZyBFRkxBR1MgZnJvbSB0aGUgc3RhY2sgY2xlYXJzIEVGTEFHU1szMF0gCi0gICB3aGljaCBkb2VzIHRoZSB0cmljay4gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotcGFkbG9ja19yZWxvYWRfa2V5KHZvaWQpCi17Ci0JYXNtIHZvbGF0aWxlICgicHVzaGZsOyBwb3BmbCIpOwotfQotCi0jaWZuZGVmIE9QRU5TU0xfTk9fQUVTCi0vKgotICogVGhpcyBpcyBoZXVyaXN0aWMga2V5IGNvbnRleHQgdHJhY2luZy4gQXQgZmlyc3Qgb25lCi0gKiBiZWxpZXZlcyB0aGF0IG9uZSBzaG91bGQgdXNlIGF0b21pYyBzd2FwIGluc3RydWN0aW9ucywKLSAqIGJ1dCBpdCdzIG5vdCBhY3R1YWxseSBuZWNlc3NhcnkuIFBvaW50IGlzIHRoYXQgaWYKLSAqIHBhZGxvY2tfc2F2ZWRfY29udGV4dCB3YXMgY2hhbmdlZCBieSBhbm90aGVyIHRocmVhZAotICogYWZ0ZXIgd2UndmUgcmVhZCBpdCBhbmQgYmVmb3JlIHdlIGNvbXBhcmUgaXQgd2l0aCBjZGF0YSwKLSAqIG91ciBrZXkgKnNoYWxsKiBiZSByZWxvYWRlZCB1cG9uIHRocmVhZCBjb250ZXh0IHN3aXRjaAotICogYW5kIHdlIGFyZSB0aGVyZWZvcmUgc2V0IGluIGVpdGhlciBjYXNlLi4uCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotcGFkbG9ja192ZXJpZnlfY29udGV4dChzdHJ1Y3QgcGFkbG9ja19jaXBoZXJfZGF0YSAqY2RhdGEpCi17Ci0JYXNtIHZvbGF0aWxlICgKLQkicHVzaGZsXG4iCi0iCWJ0bAkkMzAsKCUlZXNwKVxuIgotIglqbmMJMWZcbiIKLSIJY21wbAklMiwlMVxuIgotIglqZQkxZlxuIgotIglwb3BmbFxuIgotIglzdWJsCSQ0LCUlZXNwXG4iCi0iMToJYWRkbAkkNCwlJWVzcFxuIgotIgltb3ZsCSUyLCUwIgotCToiK20iKHBhZGxvY2tfc2F2ZWRfY29udGV4dCkKLQk6ICJyIihwYWRsb2NrX3NhdmVkX2NvbnRleHQpLCAiciIoY2RhdGEpIDogImNjIik7Ci19Ci0KLS8qIFRlbXBsYXRlIGZvciBwYWRsb2NrX3hjcnlwdF8qIG1vZGVzICovCi0vKiBCSUcgRkFUIFdBUk5JTkc6IAotICogCVRoZSBvZmZzZXRzIHVzZWQgd2l0aCAnbGVhbCcgaW5zdHJ1Y3Rpb25zCi0gKiAJZGVzY3JpYmUgaXRlbXMgb2YgdGhlICdwYWRsb2NrX2NpcGhlcl9kYXRhJwotICogCXN0cnVjdHVyZS4KLSAqLwotI2RlZmluZSBQQURMT0NLX1hDUllQVF9BU00obmFtZSxyZXBfeGNyeXB0KQlcCi1zdGF0aWMgaW5saW5lIHZvaWQgKm5hbWUoc2l6ZV90IGNudCwJCVwKLQlzdHJ1Y3QgcGFkbG9ja19jaXBoZXJfZGF0YSAqY2RhdGEsCVwKLQl2b2lkICpvdXQsIGNvbnN0IHZvaWQgKmlucCkgCQlcCi17CXZvaWQgKml2OyAJCQkJXAotCWFzbSB2b2xhdGlsZSAoICJwdXNobAklJWVieFxuIglcCi0JCSIJbGVhbAkxNiglMCksJSVlZHhcbiIJXAotCQkiCWxlYWwJMzIoJTApLCUlZWJ4XG4iCVwKLQkJCXJlcF94Y3J5cHQgIlxuIgkJXAotCQkiCXBvcGwJJSVlYngiCQlcCi0JCTogIj1hIihpdiksICI9YyIoY250KSwgIj1EIihvdXQpLCAiPVMiKGlucCkgXAotCQk6ICIwIihjZGF0YSksICIxIihjbnQpLCAiMiIob3V0KSwgIjMiKGlucCkgIFwKLQkJOiAiZWR4IiwgImNjIiwgIm1lbW9yeSIpOwlcCi0JcmV0dXJuIGl2OwkJCQlcCi19Ci0KLS8qIEdlbmVyYXRlIGFsbCBmdW5jdGlvbnMgd2l0aCBhcHByb3ByaWF0ZSBvcGNvZGVzICovCi1QQURMT0NLX1hDUllQVF9BU00ocGFkbG9ja194Y3J5cHRfZWNiLCAiLmJ5dGUgMHhmMywweDBmLDB4YTcsMHhjOCIpCS8qIHJlcCB4Y3J5cHRlY2IgKi8KLVBBRExPQ0tfWENSWVBUX0FTTShwYWRsb2NrX3hjcnlwdF9jYmMsICIuYnl0ZSAweGYzLDB4MGYsMHhhNywweGQwIikJLyogcmVwIHhjcnlwdGNiYyAqLwotUEFETE9DS19YQ1JZUFRfQVNNKHBhZGxvY2tfeGNyeXB0X2NmYiwgIi5ieXRlIDB4ZjMsMHgwZiwweGE3LDB4ZTAiKQkvKiByZXAgeGNyeXB0Y2ZiICovCi1QQURMT0NLX1hDUllQVF9BU00ocGFkbG9ja194Y3J5cHRfb2ZiLCAiLmJ5dGUgMHhmMywweDBmLDB4YTcsMHhlOCIpCS8qIHJlcCB4Y3J5cHRvZmIgKi8KLSNlbmRpZgotCi0vKiBUaGUgUk5HIGNhbGwgaXRzZWxmICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAotcGFkbG9ja194c3RvcmUodm9pZCAqYWRkciwgdW5zaWduZWQgaW50IGVkeF9pbikKLXsKLQl1bnNpZ25lZCBpbnQgZWF4X291dDsKLQotCWFzbSB2b2xhdGlsZSAoIi5ieXRlIDB4MGYsMHhhNywweGMwIgkvKiB4c3RvcmUgKi8KLQkgICAgOiAiPWEiKGVheF9vdXQpLCI9bSIoKih1bnNpZ25lZCAqKWFkZHIpCi0JICAgIDogIkQiKGFkZHIpLCAiZCIgKGVkeF9pbikKLQkgICAgKTsKLQotCXJldHVybiBlYXhfb3V0OwotfQotCi0vKiBXaHkgbm90IGlubGluZSAncmVwIG1vdnNkJz8gSSBmYWlsZWQgdG8gZmluZCBpbmZvcm1hdGlvbiBvbiB3aGF0Ci0gKiB2YWx1ZSBpbiBEaXJlY3Rpb24gRmxhZyBvbmUgY2FuIGV4cGVjdCBhbmQgY29uc2VxdWVudGx5IGhhdmUgdG8KLSAqIGFwcGx5ICJiZXR0ZXItc2FmZS10aGFuLXNvcnJ5IiBhcHByb2FjaCBhbmQgYXNzdW1lICJ1bmRlZmluZWQuIgotICogSSBjb3VsZCBleHBsaWNpdGx5IGNsZWFyIGl0IGFuZCByZXN0b3JlIHRoZSBvcmlnaW5hbCB2YWx1ZSB1cG9uCi0gKiByZXR1cm4gZnJvbSBwYWRsb2NrX2Flc19jaXBoZXIsIGJ1dCBpdCdzIHByZXN1bWFibHkgdG9vIG11Y2gKLSAqIHRyb3VibGUgZm9yIHRvbyBsaXR0bGUgZ2Fpbi4uLgotICoKLSAqIEluIGNhc2UgeW91IHdvbmRlciAncmVwIHhjcnlwdConIGluc3RydWN0aW9ucyBhYm92ZSBhcmUgKm5vdCoKLSAqIGFmZmVjdGVkIGJ5IHRoZSBEaXJlY3Rpb24gRmxhZyBhbmQgcG9pbnRlcnMgYWR2YW5jZSB0b3dhcmQKLSAqIGxhcmdlciBhZGRyZXNzZXMgdW5jb25kaXRpb25hbGx5LgotICovIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyICoKLXBhZGxvY2tfbWVtY3B5KHZvaWQgKmRzdCxjb25zdCB2b2lkICpzcmMsc2l6ZV90IG4pCi17Ci0JbG9uZyAgICAgICAqZD1kc3Q7Ci0JY29uc3QgbG9uZyAqcz1zcmM7Ci0KLQluIC89IHNpemVvZigqZCk7Ci0JZG8geyAqZCsrID0gKnMrKzsgfSB3aGlsZSAoLS1uKTsKLQotCXJldHVybiBkc3Q7Ci19Ci0KLSNlbGlmIGRlZmluZWQoX01TQ19WRVIpCi0vKgotICogVW5saWtlIEdDQyB0aGVzZSBhcmUgcmVhbCBmdW5jdGlvbnMuIEluIG9yZGVyIHRvIG1pbmltaXplIGltcGFjdAotICogb24gcGVyZm9ybWFuY2Ugd2UgYWRoZXJlIHRvIF9fZmFzdGNhbGwgY2FsbGluZyBjb252ZW50aW9uIGluCi0gKiBvcmRlciB0byBnZXQgdHdvIGZpcnN0IGFyZ3VtZW50cyBwYXNzZWQgdGhyb3VnaCAlZWN4IGFuZCAlZWR4LgotICogV2hpY2gga2luZCBvZiBzdWl0cyB2ZXJ5IHdlbGwsIGFzIGluc3RydWN0aW9ucyBpbiBxdWVzdGlvbiB1c2UKLSAqIGJvdGggJWVjeCBhbmQgJWVkeCBhcyBpbnB1dDotKQotICovCi0jZGVmaW5lIFJFUF9YQ1JZUFQoY29kZSkJCVwKLQlfYXNtIF9lbWl0IDB4ZjMJCQlcCi0JX2FzbSBfZW1pdCAweDBmIF9hc20gX2VtaXQgMHhhNwlcCi0JX2FzbSBfZW1pdCBjb2RlCi0KLS8qIEJJRyBGQVQgV0FSTklORzogCi0gKiAJVGhlIG9mZnNldHMgdXNlZCB3aXRoICdsZWEnIGluc3RydWN0aW9ucwotICogCWRlc2NyaWJlIGl0ZW1zIG9mIHRoZSAncGFkbG9ja19jaXBoZXJfZGF0YScKLSAqIAlzdHJ1Y3R1cmUuCi0gKi8KLSNkZWZpbmUgUEFETE9DS19YQ1JZUFRfQVNNKG5hbWUsY29kZSkJXAotc3RhdGljIHZvaWQgKiBfX2Zhc3RjYWxsIAkJXAotCW5hbWUgKHNpemVfdCBjbnQsIHZvaWQgKmNkYXRhLAlcCi0Jdm9pZCAqb3V0cCwgY29uc3Qgdm9pZCAqaW5wKQlcCi17CV9hc20JbW92CWVheCxlZHgJCVwKLQlfYXNtCWxlYQllZHgsW2VheCsxNl0JXAotCV9hc20JbGVhCWVieCxbZWF4KzMyXQlcCi0JX2FzbQltb3YJZWRpLG91dHAJXAotCV9hc20JbW92CWVzaSxpbnAJCVwKLQlSRVBfWENSWVBUKGNvZGUpCQlcCi19Ci0KLVBBRExPQ0tfWENSWVBUX0FTTShwYWRsb2NrX3hjcnlwdF9lY2IsMHhjOCkKLVBBRExPQ0tfWENSWVBUX0FTTShwYWRsb2NrX3hjcnlwdF9jYmMsMHhkMCkKLVBBRExPQ0tfWENSWVBUX0FTTShwYWRsb2NrX3hjcnlwdF9jZmIsMHhlMCkKLVBBRExPQ0tfWENSWVBUX0FTTShwYWRsb2NrX3hjcnlwdF9vZmIsMHhlOCkKLQotc3RhdGljIGludCBfX2Zhc3RjYWxsCi1wYWRsb2NrX3hzdG9yZSh2b2lkICpvdXRwLHVuc2lnbmVkIGludCBjb2RlKQotewlfYXNtCW1vdgllZGksZWN4Ci0JX2FzbSBfZW1pdCAweDBmIF9hc20gX2VtaXQgMHhhNyBfYXNtIF9lbWl0IDB4YzAKLX0KLQotc3RhdGljIHZvaWQgX19mYXN0Y2FsbAotcGFkbG9ja19yZWxvYWRfa2V5KHZvaWQpCi17CV9hc20gcHVzaGZkIF9hc20gcG9wZmQJCX0KLQotc3RhdGljIHZvaWQgX19mYXN0Y2FsbAotcGFkbG9ja192ZXJpZnlfY29udGV4dCh2b2lkICpjZGF0YSkKLXsJX2FzbQl7Ci0JCXB1c2hmZAotCQlidAlEV09SRCBQVFJbZXNwXSwzMAotCQlqbmMJc2tpcAotCQljbXAJZWN4LHBhZGxvY2tfc2F2ZWRfY29udGV4dAotCQlqZQlza2lwCi0JCXBvcGZkCi0JCXN1Ygllc3AsNAotCXNraXA6CWFkZAllc3AsNAotCQltb3YJcGFkbG9ja19zYXZlZF9jb250ZXh0LGVjeAotCQl9Ci19Ci0KLXN0YXRpYyBpbnQKLXBhZGxvY2tfYXZhaWxhYmxlKHZvaWQpCi17CV9hc20JewotCQlwdXNoZmQKLQkJcG9wCWVheAotCQltb3YJZWN4LGVheAotCQl4b3IJZWF4LDE8PDIxCi0JCXB1c2gJZWF4Ci0JCXBvcGZkCi0JCXB1c2hmZAotCQlwb3AJZWF4Ci0JCXhvcgllYXgsZWN4Ci0JCWJ0CWVheCwyMQotCQlqbmMJbm9sdWNrCi0JCW1vdgllYXgsMAotCQljcHVpZAotCQl4b3IJZWF4LGVheAotCQljbXAJZWJ4LCd0bmVDJwotCQlqbmUJbm9sdWNrCi0JCWNtcAllZHgsJ0hydWEnCi0JCWpuZQlub2x1Y2sKLQkJY21wCWVjeCwnc2x1YScKLQkJam5lCW5vbHVjawotCQltb3YJZWF4LDB4QzAwMDAwMDAKLQkJY3B1aWQKLQkJbW92CWVkeCxlYXgKLQkJeG9yCWVheCxlYXgKLQkJY21wCWVkeCwweEMwMDAwMDAxCi0JCWpiCW5vbHVjawotCQltb3YJZWF4LDB4QzAwMDAwMDEKLQkJY3B1aWQKLQkJeG9yCWVheCxlYXgKLQkJYnQJZWR4LDYKLQkJam5jCXNraXBfYQotCQlidAllZHgsNwotCQlqbmMJc2tpcF9hCi0JCW1vdglwYWRsb2NrX3VzZV9hY2UsMQotCQlpbmMJZWF4Ci0Jc2tpcF9hOglidAllZHgsMgotCQlqbmMJc2tpcF9yCi0JCWJ0CWVkeCwzCi0JCWpuYwlza2lwX3IKLQkJbW92CXBhZGxvY2tfdXNlX3JuZywxCi0JCWluYwllYXgKLQlza2lwX3I6Ci0Jbm9sdWNrOgotCQl9Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZmFzdGNhbGwKLXBhZGxvY2tfYnN3YXBsKHZvaWQgKmtleSkKLXsJX2FzbQl7Ci0JCXB1c2hmZAotCQljbGQKLQkJbW92CWVzaSxlY3gKLQkJbW92CWVkaSxlY3gKLQkJbW92CWVjeCw2MAotCXVwOglsb2RzZAotCQlic3dhcAllYXgKLQkJc3Rvc2QKLQkJbG9vcAl1cAotCQlwb3BmZAotCQl9Ci19Ci0KLS8qIE1TIGFjdHVhbGx5IHNwZWNpZmllcyBzdGF0dXMgb2YgRGlyZWN0aW9uIEZsYWcgYW5kIGNvbXBpbGVyIGV2ZW4KLSAqIG1hbmFnZXMgdG8gY29tcGlsZSBmb2xsb3dpbmcgYXMgJ3JlcCBtb3ZzZCcgYWxsIGJ5IGl0c2VsZi4uLgotICovCi0jZGVmaW5lIHBhZGxvY2tfbWVtY3B5KG8saSxuKSAoKHVuc2lnbmVkIGNoYXIgKiltZW1jcHkoKG8pLChpKSwobikmfjNVKSkKLSNlbmRpZgotCi0vKiA9PT09PSBBRVMgZW5jcnlwdGlvbi9kZWNyeXB0aW9uID09PT09ICovCi0jaWZuZGVmIE9QRU5TU0xfTk9fQUVTCi0KLSNpZiBkZWZpbmVkKE5JRF9hZXNfMTI4X2NmYjEyOCkgJiYgISBkZWZpbmVkIChOSURfYWVzXzEyOF9jZmIpCi0jZGVmaW5lIE5JRF9hZXNfMTI4X2NmYglOSURfYWVzXzEyOF9jZmIxMjgKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChOSURfYWVzXzEyOF9vZmIxMjgpICYmICEgZGVmaW5lZCAoTklEX2Flc18xMjhfb2ZiKQotI2RlZmluZSBOSURfYWVzXzEyOF9vZmIJTklEX2Flc18xMjhfb2ZiMTI4Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoTklEX2Flc18xOTJfY2ZiMTI4KSAmJiAhIGRlZmluZWQgKE5JRF9hZXNfMTkyX2NmYikKLSNkZWZpbmUgTklEX2Flc18xOTJfY2ZiCU5JRF9hZXNfMTkyX2NmYjEyOAotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKE5JRF9hZXNfMTkyX29mYjEyOCkgJiYgISBkZWZpbmVkIChOSURfYWVzXzE5Ml9vZmIpCi0jZGVmaW5lIE5JRF9hZXNfMTkyX29mYglOSURfYWVzXzE5Ml9vZmIxMjgKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChOSURfYWVzXzI1Nl9jZmIxMjgpICYmICEgZGVmaW5lZCAoTklEX2Flc18yNTZfY2ZiKQotI2RlZmluZSBOSURfYWVzXzI1Nl9jZmIJTklEX2Flc18yNTZfY2ZiMTI4Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoTklEX2Flc18yNTZfb2ZiMTI4KSAmJiAhIGRlZmluZWQgKE5JRF9hZXNfMjU2X29mYikKLSNkZWZpbmUgTklEX2Flc18yNTZfb2ZiCU5JRF9hZXNfMjU2X29mYjEyOAotI2VuZGlmCi0KLS8qIExpc3Qgb2Ygc3VwcG9ydGVkIGNpcGhlcnMuICovCi1zdGF0aWMgaW50IHBhZGxvY2tfY2lwaGVyX25pZHNbXSA9IHsKLQlOSURfYWVzXzEyOF9lY2IsCi0JTklEX2Flc18xMjhfY2JjLAotCU5JRF9hZXNfMTI4X2NmYiwKLQlOSURfYWVzXzEyOF9vZmIsCi0KLQlOSURfYWVzXzE5Ml9lY2IsCi0JTklEX2Flc18xOTJfY2JjLAotCU5JRF9hZXNfMTkyX2NmYiwKLQlOSURfYWVzXzE5Ml9vZmIsCi0KLQlOSURfYWVzXzI1Nl9lY2IsCi0JTklEX2Flc18yNTZfY2JjLAotCU5JRF9hZXNfMjU2X2NmYiwKLQlOSURfYWVzXzI1Nl9vZmIsCi19Owotc3RhdGljIGludCBwYWRsb2NrX2NpcGhlcl9uaWRzX251bSA9IChzaXplb2YocGFkbG9ja19jaXBoZXJfbmlkcykvCi0JCQkJICAgICAgc2l6ZW9mKHBhZGxvY2tfY2lwaGVyX25pZHNbMF0pKTsKLQotLyogRnVuY3Rpb24gcHJvdG90eXBlcyAuLi4gKi8KLXN0YXRpYyBpbnQgcGFkbG9ja19hZXNfaW5pdF9rZXkoRVZQX0NJUEhFUl9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAotCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LCBpbnQgZW5jKTsKLXN0YXRpYyBpbnQgcGFkbG9ja19hZXNfY2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKLQkJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgbmJ5dGVzKTsKLQotI2RlZmluZSBORUFSRVNUX0FMSUdORUQocHRyKSAoICh1bnNpZ25lZCBjaGFyICopKHB0cikgKwkJXAotCSggKDB4MTAgLSAoKHNpemVfdCkocHRyKSAmIDB4MEYpKSAmIDB4MEYgKQkpCi0jZGVmaW5lIEFMSUdORURfQ0lQSEVSX0RBVEEoY3R4KSAoKHN0cnVjdCBwYWRsb2NrX2NpcGhlcl9kYXRhICopXAotCU5FQVJFU1RfQUxJR05FRChjdHgtPmNpcGhlcl9kYXRhKSkKLQotI2RlZmluZSBFVlBfQ0lQSEVSX2Jsb2NrX3NpemVfRUNCCUFFU19CTE9DS19TSVpFCi0jZGVmaW5lIEVWUF9DSVBIRVJfYmxvY2tfc2l6ZV9DQkMJQUVTX0JMT0NLX1NJWkUKLSNkZWZpbmUgRVZQX0NJUEhFUl9ibG9ja19zaXplX09GQgkxCi0jZGVmaW5lIEVWUF9DSVBIRVJfYmxvY2tfc2l6ZV9DRkIJMQotCi0vKiBEZWNsYXJpbmcgc28gbWFueSBjaXBoZXJzIGJ5IGhhbmQgd291bGQgYmUgYSBwYWluLgotICAgSW5zdGVhZCBpbnRyb2R1Y2UgYSBiaXQgb2YgcHJlcHJvY2Vzc29yIG1hZ2ljIDotKSAqLwotI2RlZmluZQlERUNMQVJFX0FFU19FVlAoa3NpemUsbG1vZGUsdW1vZGUpCVwKLXN0YXRpYyBjb25zdCBFVlBfQ0lQSEVSIHBhZGxvY2tfYWVzXyMja3NpemUjI18jI2xtb2RlID0gewlcCi0JTklEX2Flc18jI2tzaXplIyNfIyNsbW9kZSwJCVwKLQlFVlBfQ0lQSEVSX2Jsb2NrX3NpemVfIyN1bW9kZSwJXAotCUFFU19LRVlfU0laRV8jI2tzaXplLAkJXAotCUFFU19CTE9DS19TSVpFLAkJCVwKLQkwIHwgRVZQX0NJUEhfIyN1bW9kZSMjX01PREUsCVwKLQlwYWRsb2NrX2Flc19pbml0X2tleSwJCVwKLQlwYWRsb2NrX2Flc19jaXBoZXIsCQlcCi0JTlVMTCwJCQkJXAotCXNpemVvZihzdHJ1Y3QgcGFkbG9ja19jaXBoZXJfZGF0YSkgKyAxNiwJXAotCUVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsCQlcCi0JRVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwJCVwKLQlOVUxMLAkJCQlcCi0JTlVMTAkJCQlcCi19Ci0KLURFQ0xBUkVfQUVTX0VWUCgxMjgsZWNiLEVDQik7Ci1ERUNMQVJFX0FFU19FVlAoMTI4LGNiYyxDQkMpOwotREVDTEFSRV9BRVNfRVZQKDEyOCxjZmIsQ0ZCKTsKLURFQ0xBUkVfQUVTX0VWUCgxMjgsb2ZiLE9GQik7Ci0KLURFQ0xBUkVfQUVTX0VWUCgxOTIsZWNiLEVDQik7Ci1ERUNMQVJFX0FFU19FVlAoMTkyLGNiYyxDQkMpOwotREVDTEFSRV9BRVNfRVZQKDE5MixjZmIsQ0ZCKTsKLURFQ0xBUkVfQUVTX0VWUCgxOTIsb2ZiLE9GQik7Ci0KLURFQ0xBUkVfQUVTX0VWUCgyNTYsZWNiLEVDQik7Ci1ERUNMQVJFX0FFU19FVlAoMjU2LGNiYyxDQkMpOwotREVDTEFSRV9BRVNfRVZQKDI1NixjZmIsQ0ZCKTsKLURFQ0xBUkVfQUVTX0VWUCgyNTYsb2ZiLE9GQik7Ci0KLXN0YXRpYyBpbnQKLXBhZGxvY2tfY2lwaGVycyAoRU5HSU5FICplLCBjb25zdCBFVlBfQ0lQSEVSICoqY2lwaGVyLCBjb25zdCBpbnQgKipuaWRzLCBpbnQgbmlkKQotewotCS8qIE5vIHNwZWNpZmljIGNpcGhlciA9PiByZXR1cm4gYSBsaXN0IG9mIHN1cHBvcnRlZCBuaWRzIC4uLiAqLwotCWlmICghY2lwaGVyKSB7Ci0JCSpuaWRzID0gcGFkbG9ja19jaXBoZXJfbmlkczsKLQkJcmV0dXJuIHBhZGxvY2tfY2lwaGVyX25pZHNfbnVtOwotCX0KLQotCS8qIC4uLiBvciB0aGUgcmVxdWVzdGVkICJjaXBoZXIiIG90aGVyd2lzZSAqLwotCXN3aXRjaCAobmlkKSB7Ci0JICBjYXNlIE5JRF9hZXNfMTI4X2VjYjoKLQkgICAgKmNpcGhlciA9ICZwYWRsb2NrX2Flc18xMjhfZWNiOwotCSAgICBicmVhazsKLQkgIGNhc2UgTklEX2Flc18xMjhfY2JjOgotCSAgICAqY2lwaGVyID0gJnBhZGxvY2tfYWVzXzEyOF9jYmM7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSBOSURfYWVzXzEyOF9jZmI6Ci0JICAgICpjaXBoZXIgPSAmcGFkbG9ja19hZXNfMTI4X2NmYjsKLQkgICAgYnJlYWs7Ci0JICBjYXNlIE5JRF9hZXNfMTI4X29mYjoKLQkgICAgKmNpcGhlciA9ICZwYWRsb2NrX2Flc18xMjhfb2ZiOwotCSAgICBicmVhazsKLQotCSAgY2FzZSBOSURfYWVzXzE5Ml9lY2I6Ci0JICAgICpjaXBoZXIgPSAmcGFkbG9ja19hZXNfMTkyX2VjYjsKLQkgICAgYnJlYWs7Ci0JICBjYXNlIE5JRF9hZXNfMTkyX2NiYzoKLQkgICAgKmNpcGhlciA9ICZwYWRsb2NrX2Flc18xOTJfY2JjOwotCSAgICBicmVhazsKLQkgIGNhc2UgTklEX2Flc18xOTJfY2ZiOgotCSAgICAqY2lwaGVyID0gJnBhZGxvY2tfYWVzXzE5Ml9jZmI7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSBOSURfYWVzXzE5Ml9vZmI6Ci0JICAgICpjaXBoZXIgPSAmcGFkbG9ja19hZXNfMTkyX29mYjsKLQkgICAgYnJlYWs7Ci0KLQkgIGNhc2UgTklEX2Flc18yNTZfZWNiOgotCSAgICAqY2lwaGVyID0gJnBhZGxvY2tfYWVzXzI1Nl9lY2I7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSBOSURfYWVzXzI1Nl9jYmM6Ci0JICAgICpjaXBoZXIgPSAmcGFkbG9ja19hZXNfMjU2X2NiYzsKLQkgICAgYnJlYWs7Ci0JICBjYXNlIE5JRF9hZXNfMjU2X2NmYjoKLQkgICAgKmNpcGhlciA9ICZwYWRsb2NrX2Flc18yNTZfY2ZiOwotCSAgICBicmVhazsKLQkgIGNhc2UgTklEX2Flc18yNTZfb2ZiOgotCSAgICAqY2lwaGVyID0gJnBhZGxvY2tfYWVzXzI1Nl9vZmI7Ci0JICAgIGJyZWFrOwotCi0JICBkZWZhdWx0OgotCSAgICAvKiBTb3JyeSwgd2UgZG9uJ3Qgc3VwcG9ydCB0aGlzIE5JRCAqLwotCSAgICAqY2lwaGVyID0gTlVMTDsKLQkgICAgcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIDE7Ci19Ci0KLS8qIFByZXBhcmUgdGhlIGVuY3J5cHRpb24ga2V5IGZvciBQYWRMb2NrIHVzYWdlICovCi1zdGF0aWMgaW50Ci1wYWRsb2NrX2Flc19pbml0X2tleSAoRVZQX0NJUEhFUl9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAotCQkgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppdiwgaW50IGVuYykKLXsKLQlzdHJ1Y3QgcGFkbG9ja19jaXBoZXJfZGF0YSAqY2RhdGE7Ci0JaW50IGtleV9sZW4gPSBFVlBfQ0lQSEVSX0NUWF9rZXlfbGVuZ3RoKGN0eCkgKiA4OwotCi0JaWYgKGtleT09TlVMTCkgcmV0dXJuIDA7CS8qIEVSUk9SICovCi0KLQljZGF0YSA9IEFMSUdORURfQ0lQSEVSX0RBVEEoY3R4KTsKLQltZW1zZXQoY2RhdGEsIDAsIHNpemVvZihzdHJ1Y3QgcGFkbG9ja19jaXBoZXJfZGF0YSkpOwotCi0JLyogUHJlcGFyZSBDb250cm9sIHdvcmQuICovCi0JaWYgKEVWUF9DSVBIRVJfQ1RYX21vZGUoY3R4KSA9PSBFVlBfQ0lQSF9PRkJfTU9ERSkKLQkJY2RhdGEtPmN3b3JkLmIuZW5jZGVjID0gMDsKLQllbHNlCi0JCWNkYXRhLT5jd29yZC5iLmVuY2RlYyA9IChjdHgtPmVuY3J5cHQgPT0gMCk7Ci0JY2RhdGEtPmN3b3JkLmIucm91bmRzID0gMTAgKyAoa2V5X2xlbiAtIDEyOCkgLyAzMjsKLQljZGF0YS0+Y3dvcmQuYi5rc2l6ZSA9IChrZXlfbGVuIC0gMTI4KSAvIDY0OwotCi0Jc3dpdGNoKGtleV9sZW4pIHsKLQkJY2FzZSAxMjg6Ci0JCQkvKiBQYWRMb2NrIGNhbiBnZW5lcmF0ZSBhbiBleHRlbmRlZCBrZXkgZm9yCi0JCQkgICBBRVMxMjggaW4gaGFyZHdhcmUgKi8KLQkJCW1lbWNweShjZGF0YS0+a3MucmRfa2V5LCBrZXksIEFFU19LRVlfU0laRV8xMjgpOwotCQkJY2RhdGEtPmN3b3JkLmIua2V5Z2VuID0gMDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgMTkyOgotCQljYXNlIDI1NjoKLQkJCS8qIEdlbmVyYXRlIGFuIGV4dGVuZGVkIEFFUyBrZXkgaW4gc29mdHdhcmUuCi0JCQkgICBOZWVkZWQgZm9yIEFFUzE5Mi9BRVMyNTYgKi8KLQkJCS8qIFdlbGwsIHRoZSBhYm92ZSBhcHBsaWVzIHRvIFN0ZXBwaW5nIDggQ1BVcwotCQkJICAgYW5kIGlzIGxpc3RlZCBhcyBoYXJkd2FyZSBlcnJhdGEuIFRoZXkgbW9zdAotCQkJICAgbGlrZWx5IHdpbGwgZml4IGl0IGF0IHNvbWUgcG9pbnQgYW5kIHRoZW4KLQkJCSAgIGEgY2hlY2sgZm9yIHN0ZXBwaW5nIHdvdWxkIGJlIGR1ZSBoZXJlLiAqLwotCQkJaWYgKEVWUF9DSVBIRVJfQ1RYX21vZGUoY3R4KSA9PSBFVlBfQ0lQSF9DRkJfTU9ERSB8fAotCQkJICAgIEVWUF9DSVBIRVJfQ1RYX21vZGUoY3R4KSA9PSBFVlBfQ0lQSF9PRkJfTU9ERSB8fAotCQkJICAgIGVuYykKLQkJCQlBRVNfc2V0X2VuY3J5cHRfa2V5KGtleSwga2V5X2xlbiwgJmNkYXRhLT5rcyk7Ci0JCQllbHNlCi0JCQkJQUVTX3NldF9kZWNyeXB0X2tleShrZXksIGtleV9sZW4sICZjZGF0YS0+a3MpOwotI2lmbmRlZiBBRVNfQVNNCi0JCQkvKiBPcGVuU1NMIEMgZnVuY3Rpb25zIHVzZSBieXRlLXN3YXBwZWQgZXh0ZW5kZWQga2V5LiAqLwotCQkJcGFkbG9ja19ic3dhcGwoJmNkYXRhLT5rcyk7Ci0jZW5kaWYKLQkJCWNkYXRhLT5jd29yZC5iLmtleWdlbiA9IDE7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJLyogRVJST1IgKi8KLQkJCXJldHVybiAwOwotCX0KLQotCS8qCi0JICogVGhpcyBpcyBkb25lIHRvIGNvdmVyIGZvciBjYXNlcyB3aGVuIHVzZXIgcmV1c2VzIHRoZQotCSAqIGNvbnRleHQgZm9yIG5ldyBrZXkuIFRoZSBjYXRjaCBpcyB0aGF0IGlmIHdlIGRvbid0IGRvCi0JICogdGhpcywgcGFkbG9ja19lYXNfY2lwaGVyIG1pZ2h0IHByb2NlZWQgd2l0aCBvbGQga2V5Li4uCi0JICovCi0JcGFkbG9ja19yZWxvYWRfa2V5ICgpOwotCi0JcmV0dXJuIDE7Ci19Ci0KLS8qIAotICogU2ltcGxpZmllZCB2ZXJzaW9uIG9mIHBhZGxvY2tfYWVzX2NpcGhlcigpIHVzZWQgd2hlbgotICogMSkgYm90aCBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMgYXJlIGF0IGFsaWduZWQgYWRkcmVzc2VzLgotICogb3Igd2hlbgotICogMikgcnVubmluZyBvbiBhIG5ld2VyIENQVSB0aGF0IGRvZXNuJ3QgcmVxdWlyZSBhbGlnbmVkIGJ1ZmZlcnMuCi0gKi8KLXN0YXRpYyBpbnQKLXBhZGxvY2tfYWVzX2NpcGhlcl9vbW5pdm9yb3VzKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dF9hcmcsCi0JCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluX2FyZywgc2l6ZV90IG5ieXRlcykKLXsKLQlzdHJ1Y3QgcGFkbG9ja19jaXBoZXJfZGF0YSAqY2RhdGE7Ci0Jdm9pZCAgKml2OwotCi0JY2RhdGEgPSBBTElHTkVEX0NJUEhFUl9EQVRBKGN0eCk7Ci0JcGFkbG9ja192ZXJpZnlfY29udGV4dChjZGF0YSk7Ci0KLQlzd2l0Y2ggKEVWUF9DSVBIRVJfQ1RYX21vZGUoY3R4KSkgewotCWNhc2UgRVZQX0NJUEhfRUNCX01PREU6Ci0JCXBhZGxvY2tfeGNyeXB0X2VjYihuYnl0ZXMvQUVTX0JMT0NLX1NJWkUsIGNkYXRhLCBvdXRfYXJnLCBpbl9hcmcpOwotCQlicmVhazsKLQotCWNhc2UgRVZQX0NJUEhfQ0JDX01PREU6Ci0JCW1lbWNweShjZGF0YS0+aXYsIGN0eC0+aXYsIEFFU19CTE9DS19TSVpFKTsKLQkJaXYgPSBwYWRsb2NrX3hjcnlwdF9jYmMobmJ5dGVzL0FFU19CTE9DS19TSVpFLCBjZGF0YSwgb3V0X2FyZywgaW5fYXJnKTsKLQkJbWVtY3B5KGN0eC0+aXYsIGl2LCBBRVNfQkxPQ0tfU0laRSk7Ci0JCWJyZWFrOwotCi0JY2FzZSBFVlBfQ0lQSF9DRkJfTU9ERToKLQkJbWVtY3B5KGNkYXRhLT5pdiwgY3R4LT5pdiwgQUVTX0JMT0NLX1NJWkUpOwotCQlpdiA9IHBhZGxvY2tfeGNyeXB0X2NmYihuYnl0ZXMvQUVTX0JMT0NLX1NJWkUsIGNkYXRhLCBvdXRfYXJnLCBpbl9hcmcpOwotCQltZW1jcHkoY3R4LT5pdiwgaXYsIEFFU19CTE9DS19TSVpFKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEVWUF9DSVBIX09GQl9NT0RFOgotCQltZW1jcHkoY2RhdGEtPml2LCBjdHgtPml2LCBBRVNfQkxPQ0tfU0laRSk7Ci0JCXBhZGxvY2tfeGNyeXB0X29mYihuYnl0ZXMvQUVTX0JMT0NLX1NJWkUsIGNkYXRhLCBvdXRfYXJnLCBpbl9hcmcpOwotCQltZW1jcHkoY3R4LT5pdiwgY2RhdGEtPml2LCBBRVNfQkxPQ0tfU0laRSk7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIDA7Ci0JfQotCi0JbWVtc2V0KGNkYXRhLT5pdiwgMCwgQUVTX0JMT0NLX1NJWkUpOwotCi0JcmV0dXJuIDE7Ci19Ci0KLSNpZm5kZWYgIFBBRExPQ0tfQ0hVTksKLSMgZGVmaW5lIFBBRExPQ0tfQ0hVTksJNTEyCS8qIE11c3QgYmUgYSBwb3dlciBvZiAyIGxhcmdlciB0aGFuIDE2ICovCi0jZW5kaWYKLSNpZiBQQURMT0NLX0NIVU5LPDE2IHx8IFBBRExPQ0tfQ0hVTksmKFBBRExPQ0tfQ0hVTkstMSkKLSMgZXJyb3IgImluc2FuZSBQQURMT0NLX0NIVU5LLi4uIgotI2VuZGlmCi0KLS8qIFJlLWFsaWduIHRoZSBhcmd1bWVudHMgdG8gMTYtQnl0ZXMgYm91bmRhcmllcyBhbmQgcnVuIHRoZSAKLSAgIGVuY3J5cHRpb24gZnVuY3Rpb24gaXRzZWxmLiBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBBRVMtc3BlY2lmaWMuICovCi1zdGF0aWMgaW50Ci1wYWRsb2NrX2Flc19jaXBoZXIoRVZQX0NJUEhFUl9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0X2FyZywKLQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5fYXJnLCBzaXplX3QgbmJ5dGVzKQotewotCXN0cnVjdCBwYWRsb2NrX2NpcGhlcl9kYXRhICpjZGF0YTsKLQljb25zdCAgdm9pZCAqaW5wOwotCXVuc2lnbmVkIGNoYXIgICpvdXQ7Ci0Jdm9pZCAgKml2OwotCWludCAgICBpbnBfbWlzYWxpZ25lZCwgb3V0X21pc2FsaWduZWQsIHJlYWxpZ25faW5fbG9vcDsKLQlzaXplX3QgY2h1bmssIGFsbG9jYXRlZD0wOwotCi0JLyogY3R4LT5udW0gaXMgbWFpbnRhaW5lZCBpbiBieXRlLW9yaWVudGVkIG1vZGVzLAotCSAgIHN1Y2ggYXMgQ0ZCIGFuZCBPRkIuLi4gKi8KLQlpZiAoKGNodW5rID0gY3R4LT5udW0pKSB7IC8qIGJvcnJvdyBjaHVuayB2YXJpYWJsZSAqLwotCQl1bnNpZ25lZCBjaGFyICppdnA9Y3R4LT5pdjsKLQotCQlzd2l0Y2ggKEVWUF9DSVBIRVJfQ1RYX21vZGUoY3R4KSkgewotCQljYXNlIEVWUF9DSVBIX0NGQl9NT0RFOgotCQkJaWYgKGNodW5rID49IEFFU19CTE9DS19TSVpFKQotCQkJCXJldHVybiAwOyAvKiBib2d1cyB2YWx1ZSAqLwotCi0JCQlpZiAoY3R4LT5lbmNyeXB0KQotCQkJCXdoaWxlIChjaHVuazxBRVNfQkxPQ0tfU0laRSAmJiBuYnl0ZXMhPTApIHsKLQkJCQkJaXZwW2NodW5rXSA9ICoob3V0X2FyZysrKSA9ICooaW5fYXJnKyspIF4gaXZwW2NodW5rXTsKLQkJCQkJY2h1bmsrKywgbmJ5dGVzLS07Ci0JCQkJfQotCQkJZWxzZQl3aGlsZSAoY2h1bms8QUVTX0JMT0NLX1NJWkUgJiYgbmJ5dGVzIT0wKSB7Ci0JCQkJCXVuc2lnbmVkIGNoYXIgYyA9ICooaW5fYXJnKyspOwotCQkJCQkqKG91dF9hcmcrKykgPSBjIF4gaXZwW2NodW5rXTsKLQkJCQkJaXZwW2NodW5rKytdID0gYywgbmJ5dGVzLS07Ci0JCQkJfQotCi0JCQljdHgtPm51bSA9IGNodW5rJUFFU19CTE9DS19TSVpFOwotCQkJYnJlYWs7Ci0JCWNhc2UgRVZQX0NJUEhfT0ZCX01PREU6Ci0JCQlpZiAoY2h1bmsgPj0gQUVTX0JMT0NLX1NJWkUpCi0JCQkJcmV0dXJuIDA7IC8qIGJvZ3VzIHZhbHVlICovCi0KLQkJCXdoaWxlIChjaHVuazxBRVNfQkxPQ0tfU0laRSAmJiBuYnl0ZXMhPTApIHsKLQkJCQkqKG91dF9hcmcrKykgPSAqKGluX2FyZysrKSBeIGl2cFtjaHVua107Ci0JCQkJY2h1bmsrKywgbmJ5dGVzLS07Ci0JCQl9Ci0KLQkJCWN0eC0+bnVtID0gY2h1bmslQUVTX0JMT0NLX1NJWkU7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWlmIChuYnl0ZXMgPT0gMCkKLQkJcmV0dXJuIDE7Ci0jaWYgMAotCWlmIChuYnl0ZXMgJSBBRVNfQkxPQ0tfU0laRSkKLQkJcmV0dXJuIDA7IC8qIGFyZSB3ZSBleHBlY3RlZCB0byBkbyB0YWlsIHByb2Nlc3Npbmc/ICovCi0jZWxzZQotCS8qIG5ieXRlcyBpcyBhbHdheXMgbXVsdGlwbGUgb2YgQUVTX0JMT0NLX1NJWkUgaW4gRUNCIGFuZCBDQkMKLQkgICBtb2RlcyBhbmQgYXJiaXRyYXJ5IHZhbHVlIGluIGJ5dGUtb3JpZW50ZWQgbW9kZXMsIHN1Y2ggYXMKLQkgICBDRkIgYW5kIE9GQi4uLiAqLwotI2VuZGlmCi0KLQkvKiBWSUEgcHJvbWlzZXMgQ1BVcyB0aGF0IHdvbid0IHJlcXVpcmUgYWxpZ25tZW50IGluIHRoZSBmdXR1cmUuCi0JICAgRm9yIG5vdyBwYWRsb2NrX2Flc19hbGlnbl9yZXF1aXJlZCBpcyBpbml0aWFsaXplZCB0byAxIGFuZAotCSAgIHRoZSBjb25kaXRpb24gaXMgbmV2ZXIgbWV0Li4uICovCi0JLyogQzcgY29yZSBpcyBjYXBhYmxlIHRvIG1hbmFnZSB1bmFsaWduZWQgaW5wdXQgaW4gbm9uLUVDQlshXQotCSAgIG1vZGUsIGJ1dCBwZXJmb3JtYW5jZSBwZW5hbHRpZXMgYXBwZWFyIHRvIGJlIGFwcHJveGltYXRlbHkKLQkgICBzYW1lIGFzIGZvciBzb2Z0d2FyZSBhbGlnbm1lbnQgYmVsb3cgb3IgfjN4LiBUaGV5IHByb21pc2UgdG8KLQkgICBpbXByb3ZlIGl0IGluIHRoZSBmdXR1cmUsIGJ1dCBmb3Igbm93IHdlIGNhbiBqdXN0IGFzIHdlbGwKLQkgICBwcmV0ZW5kIHRoYXQgaXQgY2FuIG9ubHkgaGFuZGxlIGFsaWduZWQgaW5wdXQuLi4gKi8KLQlpZiAoIXBhZGxvY2tfYWVzX2FsaWduX3JlcXVpcmVkICYmIChuYnl0ZXMlQUVTX0JMT0NLX1NJWkUpPT0wKQotCQlyZXR1cm4gcGFkbG9ja19hZXNfY2lwaGVyX29tbml2b3JvdXMoY3R4LCBvdXRfYXJnLCBpbl9hcmcsIG5ieXRlcyk7Ci0KLQlpbnBfbWlzYWxpZ25lZCA9ICgoKHNpemVfdClpbl9hcmcpICYgMHgwRik7Ci0Jb3V0X21pc2FsaWduZWQgPSAoKChzaXplX3Qpb3V0X2FyZykgJiAweDBGKTsKLQotCS8qIE5vdGUgdGhhdCBldmVuIGlmIG91dHB1dCBpcyBhbGlnbmVkIGFuZCBpbnB1dCBub3QsCi0JICogSSBzdGlsbCBwcmVmZXIgdG8gbG9vcCBpbnN0ZWFkIG9mIGNvcHkgdGhlIHdob2xlCi0JICogaW5wdXQgYW5kIHRoZW4gZW5jcnlwdCBpbiBvbmUgc3Ryb2tlLiBUaGlzIGlzIGRvbmUKLQkgKiBpbiBvcmRlciB0byBpbXByb3ZlIEwxIGNhY2hlIHV0aWxpemF0aW9uLi4uICovCi0JcmVhbGlnbl9pbl9sb29wID0gb3V0X21pc2FsaWduZWR8aW5wX21pc2FsaWduZWQ7Ci0KLQlpZiAoIXJlYWxpZ25faW5fbG9vcCAmJiAobmJ5dGVzJUFFU19CTE9DS19TSVpFKT09MCkKLQkJcmV0dXJuIHBhZGxvY2tfYWVzX2NpcGhlcl9vbW5pdm9yb3VzKGN0eCwgb3V0X2FyZywgaW5fYXJnLCBuYnl0ZXMpOwotCi0JLyogdGhpcyB0YWtlcyBvbmUgImlmIiBvdXQgb2YgdGhlIGxvb3BzICovCi0JY2h1bmsgID0gbmJ5dGVzOwotCWNodW5rICU9IFBBRExPQ0tfQ0hVTks7Ci0JaWYgKGNodW5rPT0wKSBjaHVuayA9IFBBRExPQ0tfQ0hVTks7Ci0KLQlpZiAob3V0X21pc2FsaWduZWQpIHsKLQkJLyogb3B0bWl6ZSBmb3Igc21hbGwgaW5wdXQgKi8KLQkJYWxsb2NhdGVkID0gKGNodW5rPG5ieXRlcz9QQURMT0NLX0NIVU5LOm5ieXRlcyk7Ci0JCW91dCA9IGFsbG9jYSgweDEwICsgYWxsb2NhdGVkKTsKLQkJb3V0ID0gTkVBUkVTVF9BTElHTkVEKG91dCk7Ci0JfQotCWVsc2UKLQkJb3V0ID0gb3V0X2FyZzsKLQotCWNkYXRhID0gQUxJR05FRF9DSVBIRVJfREFUQShjdHgpOwotCXBhZGxvY2tfdmVyaWZ5X2NvbnRleHQoY2RhdGEpOwotCi0Jc3dpdGNoIChFVlBfQ0lQSEVSX0NUWF9tb2RlKGN0eCkpIHsKLQljYXNlIEVWUF9DSVBIX0VDQl9NT0RFOgotCQlkbwl7Ci0JCQlpZiAoaW5wX21pc2FsaWduZWQpCi0JCQkJaW5wID0gcGFkbG9ja19tZW1jcHkob3V0LCBpbl9hcmcsIGNodW5rKTsKLQkJCWVsc2UKLQkJCQlpbnAgPSBpbl9hcmc7Ci0JCQlpbl9hcmcgKz0gY2h1bms7Ci0KLQkJCXBhZGxvY2tfeGNyeXB0X2VjYihjaHVuay9BRVNfQkxPQ0tfU0laRSwgY2RhdGEsIG91dCwgaW5wKTsKLQotCQkJaWYgKG91dF9taXNhbGlnbmVkKQotCQkJCW91dF9hcmcgPSBwYWRsb2NrX21lbWNweShvdXRfYXJnLCBvdXQsIGNodW5rKSArIGNodW5rOwotCQkJZWxzZQotCQkJCW91dCAgICAgPSBvdXRfYXJnKz1jaHVuazsKLQotCQkJbmJ5dGVzIC09IGNodW5rOwotCQkJY2h1bmsgICA9IFBBRExPQ0tfQ0hVTks7Ci0JCX0gd2hpbGUgKG5ieXRlcyk7Ci0JCWJyZWFrOwotCi0JY2FzZSBFVlBfQ0lQSF9DQkNfTU9ERToKLQkJbWVtY3B5KGNkYXRhLT5pdiwgY3R4LT5pdiwgQUVTX0JMT0NLX1NJWkUpOwotCQlnb3RvIGNiY19zaG9ydGN1dDsKLQkJZG8JewotCQkJaWYgKGl2ICE9IGNkYXRhLT5pdikKLQkJCQltZW1jcHkoY2RhdGEtPml2LCBpdiwgQUVTX0JMT0NLX1NJWkUpOwotCQkJY2h1bmsgPSBQQURMT0NLX0NIVU5LOwotCQljYmNfc2hvcnRjdXQ6IC8qIG9wdGltaXplIGZvciBzbWFsbCBpbnB1dCAqLwotCQkJaWYgKGlucF9taXNhbGlnbmVkKQotCQkJCWlucCA9IHBhZGxvY2tfbWVtY3B5KG91dCwgaW5fYXJnLCBjaHVuayk7Ci0JCQllbHNlCi0JCQkJaW5wID0gaW5fYXJnOwotCQkJaW5fYXJnICs9IGNodW5rOwotCi0JCQlpdiA9IHBhZGxvY2tfeGNyeXB0X2NiYyhjaHVuay9BRVNfQkxPQ0tfU0laRSwgY2RhdGEsIG91dCwgaW5wKTsKLQotCQkJaWYgKG91dF9taXNhbGlnbmVkKQotCQkJCW91dF9hcmcgPSBwYWRsb2NrX21lbWNweShvdXRfYXJnLCBvdXQsIGNodW5rKSArIGNodW5rOwotCQkJZWxzZQotCQkJCW91dCAgICAgPSBvdXRfYXJnKz1jaHVuazsKLQotCQl9IHdoaWxlIChuYnl0ZXMgLT0gY2h1bmspOwotCQltZW1jcHkoY3R4LT5pdiwgaXYsIEFFU19CTE9DS19TSVpFKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEVWUF9DSVBIX0NGQl9NT0RFOgotCQltZW1jcHkgKGl2ID0gY2RhdGEtPml2LCBjdHgtPml2LCBBRVNfQkxPQ0tfU0laRSk7Ci0JCWNodW5rICY9IH4oQUVTX0JMT0NLX1NJWkUtMSk7Ci0JCWlmIChjaHVuaykJZ290byBjZmJfc2hvcnRjdXQ7Ci0JCWVsc2UJCWdvdG8gY2ZiX3NraXBsb29wOwotCQlkbwl7Ci0JCQlpZiAoaXYgIT0gY2RhdGEtPml2KQotCQkJCW1lbWNweShjZGF0YS0+aXYsIGl2LCBBRVNfQkxPQ0tfU0laRSk7Ci0JCQljaHVuayA9IFBBRExPQ0tfQ0hVTks7Ci0JCWNmYl9zaG9ydGN1dDogLyogb3B0aW1pemUgZm9yIHNtYWxsIGlucHV0ICovCi0JCQlpZiAoaW5wX21pc2FsaWduZWQpCi0JCQkJaW5wID0gcGFkbG9ja19tZW1jcHkob3V0LCBpbl9hcmcsIGNodW5rKTsKLQkJCWVsc2UKLQkJCQlpbnAgPSBpbl9hcmc7Ci0JCQlpbl9hcmcgKz0gY2h1bms7Ci0KLQkJCWl2ID0gcGFkbG9ja194Y3J5cHRfY2ZiKGNodW5rL0FFU19CTE9DS19TSVpFLCBjZGF0YSwgb3V0LCBpbnApOwotCi0JCQlpZiAob3V0X21pc2FsaWduZWQpCi0JCQkJb3V0X2FyZyA9IHBhZGxvY2tfbWVtY3B5KG91dF9hcmcsIG91dCwgY2h1bmspICsgY2h1bms7Ci0JCQllbHNlCi0JCQkJb3V0ICAgICA9IG91dF9hcmcrPWNodW5rOwotCi0JCQluYnl0ZXMgLT0gY2h1bms7Ci0JCX0gd2hpbGUgKG5ieXRlcyA+PSBBRVNfQkxPQ0tfU0laRSk7Ci0KLQkJY2ZiX3NraXBsb29wOgotCQlpZiAobmJ5dGVzKSB7Ci0JCQl1bnNpZ25lZCBjaGFyICppdnAgPSBjZGF0YS0+aXY7Ci0KLQkJCWlmIChpdiAhPSBpdnApIHsKLQkJCQltZW1jcHkoaXZwLCBpdiwgQUVTX0JMT0NLX1NJWkUpOwotCQkJCWl2ID0gaXZwOwotCQkJfQotCQkJY3R4LT5udW0gPSBuYnl0ZXM7Ci0JCQlpZiAoY2RhdGEtPmN3b3JkLmIuZW5jZGVjKSB7Ci0JCQkJY2RhdGEtPmN3b3JkLmIuZW5jZGVjPTA7Ci0JCQkJcGFkbG9ja19yZWxvYWRfa2V5KCk7Ci0JCQkJcGFkbG9ja194Y3J5cHRfZWNiKDEsY2RhdGEsaXZwLGl2cCk7Ci0JCQkJY2RhdGEtPmN3b3JkLmIuZW5jZGVjPTE7Ci0JCQkJcGFkbG9ja19yZWxvYWRfa2V5KCk7Ci0JCQkJd2hpbGUobmJ5dGVzKSB7Ci0JCQkJCXVuc2lnbmVkIGNoYXIgYyA9ICooaW5fYXJnKyspOwotCQkJCQkqKG91dF9hcmcrKykgPSBjIF4gKml2cDsKLQkJCQkJKihpdnArKykgPSBjLCBuYnl0ZXMtLTsKLQkJCQl9Ci0JCQl9Ci0JCQllbHNlIHsJcGFkbG9ja19yZWxvYWRfa2V5KCk7Ci0JCQkJcGFkbG9ja194Y3J5cHRfZWNiKDEsY2RhdGEsaXZwLGl2cCk7Ci0JCQkJcGFkbG9ja19yZWxvYWRfa2V5KCk7Ci0JCQkJd2hpbGUgKG5ieXRlcykgewotCQkJCQkqaXZwID0gKihvdXRfYXJnKyspID0gKihpbl9hcmcrKykgXiAqaXZwOwotCQkJCQlpdnArKywgbmJ5dGVzLS07Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJbWVtY3B5KGN0eC0+aXYsIGl2LCBBRVNfQkxPQ0tfU0laRSk7Ci0JCWJyZWFrOwotCi0JY2FzZSBFVlBfQ0lQSF9PRkJfTU9ERToKLQkJbWVtY3B5KGNkYXRhLT5pdiwgY3R4LT5pdiwgQUVTX0JMT0NLX1NJWkUpOwotCQljaHVuayAmPSB+KEFFU19CTE9DS19TSVpFLTEpOwotCQlpZiAoY2h1bmspIGRvCXsKLQkJCWlmIChpbnBfbWlzYWxpZ25lZCkKLQkJCQlpbnAgPSBwYWRsb2NrX21lbWNweShvdXQsIGluX2FyZywgY2h1bmspOwotCQkJZWxzZQotCQkJCWlucCA9IGluX2FyZzsKLQkJCWluX2FyZyArPSBjaHVuazsKLQotCQkJcGFkbG9ja194Y3J5cHRfb2ZiKGNodW5rL0FFU19CTE9DS19TSVpFLCBjZGF0YSwgb3V0LCBpbnApOwotCi0JCQlpZiAob3V0X21pc2FsaWduZWQpCi0JCQkJb3V0X2FyZyA9IHBhZGxvY2tfbWVtY3B5KG91dF9hcmcsIG91dCwgY2h1bmspICsgY2h1bms7Ci0JCQllbHNlCi0JCQkJb3V0ICAgICA9IG91dF9hcmcrPWNodW5rOwotCi0JCQluYnl0ZXMgLT0gY2h1bms7Ci0JCQljaHVuayAgID0gUEFETE9DS19DSFVOSzsKLQkJfSB3aGlsZSAobmJ5dGVzID49IEFFU19CTE9DS19TSVpFKTsKLQotCQlpZiAobmJ5dGVzKSB7Ci0JCQl1bnNpZ25lZCBjaGFyICppdnAgPSBjZGF0YS0+aXY7Ci0KLQkJCWN0eC0+bnVtID0gbmJ5dGVzOwotCQkJcGFkbG9ja19yZWxvYWRfa2V5KCk7CS8qIGVtcGlyaWNhbGx5IGZvdW5kICovCi0JCQlwYWRsb2NrX3hjcnlwdF9lY2IoMSxjZGF0YSxpdnAsaXZwKTsKLQkJCXBhZGxvY2tfcmVsb2FkX2tleSgpOwkvKiBlbXBpcmljYWxseSBmb3VuZCAqLwotCQkJd2hpbGUgKG5ieXRlcykgewotCQkJCSoob3V0X2FyZysrKSA9ICooaW5fYXJnKyspIF4gKml2cDsKLQkJCQlpdnArKywgbmJ5dGVzLS07Ci0JCQl9Ci0JCX0KLQotCQltZW1jcHkoY3R4LT5pdiwgY2RhdGEtPml2LCBBRVNfQkxPQ0tfU0laRSk7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogQ2xlYW4gdGhlIHJlYWxpZ24gYnVmZmVyIGlmIGl0IHdhcyB1c2VkICovCi0JaWYgKG91dF9taXNhbGlnbmVkKSB7Ci0JCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKnA9KHZvaWQgKilvdXQ7Ci0JCXNpemVfdCAgIG4gPSBhbGxvY2F0ZWQvc2l6ZW9mKCpwKTsKLQkJd2hpbGUgKG4tLSkgKnArKz0wOwotCX0KLQotCW1lbXNldChjZGF0YS0+aXYsIDAsIEFFU19CTE9DS19TSVpFKTsKLQotCXJldHVybiAxOwotfQotCi0jZW5kaWYgLyogT1BFTlNTTF9OT19BRVMgKi8KLQotLyogPT09PT0gUmFuZG9tIE51bWJlciBHZW5lcmF0b3IgPT09PT0gKi8KLS8qCi0gKiBUaGlzIGNvZGUgaXMgbm90IGVuZ2FnZWQuIFRoZSByZWFzb24gaXMgdGhhdCBpdCBkb2VzIG5vdCBjb21wbHkKLSAqIHdpdGggcmVjb21tZW5kYXRpb25zIGZvciBWSUEgUk5HIHVzYWdlIGZvciBzZWN1cmUgYXBwbGljYXRpb25zCi0gKiAocG9zdGVkIGF0IGh0dHA6Ly93d3cudmlhLmNvbS50dy9lbi92aWFjMy9jMy5qc3ApIG5vciBkb2VzIGl0Ci0gKiBwcm92aWRlIG1lYW5pbmdmdWwgZXJyb3IgY29udHJvbC4uLgotICovCi0vKiBXcmFwcGVyIHRoYXQgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIGJldHdlZW4gdGhlIEFQSSBhbmQgCi0gICB0aGUgcmF3IFBhZExvY2sgUk5HICovCi1zdGF0aWMgaW50Ci1wYWRsb2NrX3JhbmRfYnl0ZXModW5zaWduZWQgY2hhciAqb3V0cHV0LCBpbnQgY291bnQpCi17Ci0JdW5zaWduZWQgaW50IGVheCwgYnVmOwotCi0Jd2hpbGUgKGNvdW50ID49IDgpIHsKLQkJZWF4ID0gcGFkbG9ja194c3RvcmUob3V0cHV0LCAwKTsKLQkJaWYgKCEoZWF4JigxPDw2KSkpCXJldHVybiAwOyAvKiBSTkcgZGlzYWJsZWQgKi8KLQkJLyogdGhpcyAtLS12di0tLSBjb3ZlcnMgREMgYmlhcywgUmF3IEJpdHMgYW5kIFN0cmluZyBGaWx0ZXIgKi8KLQkJaWYgKGVheCYoMHgxRjw8MTApKQlyZXR1cm4gMDsKLQkJaWYgKChlYXgmMHgxRik9PTApCWNvbnRpbnVlOyAvKiBubyBkYXRhLCByZXRyeS4uLiAqLwotCQlpZiAoKGVheCYweDFGKSE9OCkJcmV0dXJuIDA7IC8qIGZhdGFsIGZhaWx1cmUuLi4gICovCi0JCW91dHB1dCArPSA4OwotCQljb3VudCAgLT0gODsKLQl9Ci0Jd2hpbGUgKGNvdW50ID4gMCkgewotCQllYXggPSBwYWRsb2NrX3hzdG9yZSgmYnVmLCAzKTsKLQkJaWYgKCEoZWF4JigxPDw2KSkpCXJldHVybiAwOyAvKiBSTkcgZGlzYWJsZWQgKi8KLQkJLyogdGhpcyAtLS12di0tLSBjb3ZlcnMgREMgYmlhcywgUmF3IEJpdHMgYW5kIFN0cmluZyBGaWx0ZXIgKi8KLQkJaWYgKGVheCYoMHgxRjw8MTApKQlyZXR1cm4gMDsKLQkJaWYgKChlYXgmMHgxRik9PTApCWNvbnRpbnVlOyAvKiBubyBkYXRhLCByZXRyeS4uLiAqLwotCQlpZiAoKGVheCYweDFGKSE9MSkJcmV0dXJuIDA7IC8qIGZhdGFsIGZhaWx1cmUuLi4gICovCi0JCSpvdXRwdXQrKyA9ICh1bnNpZ25lZCBjaGFyKWJ1ZjsKLQkJY291bnQtLTsKLQl9Ci0JKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikmYnVmPTA7Ci0KLQlyZXR1cm4gMTsKLX0KLQotLyogRHVtbXkgYnV0IG5lY2Vzc2FyeSBmdW5jdGlvbiAqLwotc3RhdGljIGludAotcGFkbG9ja19yYW5kX3N0YXR1cyh2b2lkKQotewotCXJldHVybiAxOwotfQotCi0vKiBQcmVwYXJlIHN0cnVjdHVyZSBmb3IgcmVnaXN0cmF0aW9uICovCi1zdGF0aWMgUkFORF9NRVRIT0QgcGFkbG9ja19yYW5kID0gewotCU5VTEwsCQkJLyogc2VlZCAqLwotCXBhZGxvY2tfcmFuZF9ieXRlcywJLyogYnl0ZXMgKi8KLQlOVUxMLAkJCS8qIGNsZWFudXAgKi8KLQlOVUxMLAkJCS8qIGFkZCAqLwotCXBhZGxvY2tfcmFuZF9ieXRlcywJLyogcHNldWRvcmFuZCAqLwotCXBhZGxvY2tfcmFuZF9zdGF0dXMsCS8qIHJhbmQgc3RhdHVzICovCi19OwotCi0jZW5kaWYgLyogQ09NUElMRV9IV19QQURMT0NLICovCi0KLSNlbmRpZiAvKiAhT1BFTlNTTF9OT19IV19QQURMT0NLICovCi0jZW5kaWYgLyogIU9QRU5TU0xfTk9fSFcgKi8KZGlmZiAtLWdpdCBhL2NyeXB0by9lbmdpbmUvZW5nX3RhYmxlLmMgYi9jcnlwdG8vZW5naW5lL2VuZ190YWJsZS5jCmluZGV4IDhmYzQ3YjMuLjRmZGU5NDggMTAwNjQ0Ci0tLSBhL2NyeXB0by9lbmdpbmUvZW5nX3RhYmxlLmMKKysrIGIvY3J5cHRvL2VuZ2luZS9lbmdfdGFibGUuYwpAQCAtNzAsMTIgKzcwLDIyIEBACiAJaW50IHVwdG9kYXRlOwogCX0gRU5HSU5FX1BJTEU7CiAKK0RFQ0xBUkVfTEhBU0hfT0YoRU5HSU5FX1BJTEUpOworCiAvKiBUaGUgdHlwZSBleHBvc2VkIGluIGVuZ19pbnQuaCAqLwogc3RydWN0IHN0X2VuZ2luZV90YWJsZQogCXsKLQlMSEFTSCBwaWxlczsKKwlMSEFTSF9PRihFTkdJTkVfUElMRSkgcGlsZXM7CiAJfTsgLyogRU5HSU5FX1RBQkxFICovCiAKKwordHlwZWRlZiBzdHJ1Y3Qgc3RfZW5naW5lX3BpbGVfZG9hbGwKKwl7CisJZW5naW5lX3RhYmxlX2RvYWxsX2NiICpjYjsKKwl2b2lkICphcmc7CisJfSBFTkdJTkVfUElMRV9ET0FMTDsKKwkKKwogLyogR2xvYmFsIGZsYWdzIChFTkdJTkVfVEFCTEVfRkxBR18qKiopLiAqLwogc3RhdGljIHVuc2lnbmVkIGludCB0YWJsZV9mbGFncyA9IDA7CiAKQEAgLTg0LDYgKzk0LDcgQEAKIAl7CiAJcmV0dXJuIHRhYmxlX2ZsYWdzOwogCX0KKwogdm9pZCBFTkdJTkVfc2V0X3RhYmxlX2ZsYWdzKHVuc2lnbmVkIGludCBmbGFncykKIAl7CiAJdGFibGVfZmxhZ3MgPSBmbGFnczsKQEAgLTk0LDE5ICsxMDUsMjEgQEAKIAl7CiAJcmV0dXJuIGMtPm5pZDsKIAl9CisKIHN0YXRpYyBpbnQgZW5naW5lX3BpbGVfY21wKGNvbnN0IEVOR0lORV9QSUxFICphLCBjb25zdCBFTkdJTkVfUElMRSAqYikKIAl7CiAJcmV0dXJuIGEtPm5pZCAtIGItPm5pZDsKIAl9Ci1zdGF0aWMgSU1QTEVNRU5UX0xIQVNIX0hBU0hfRk4oZW5naW5lX3BpbGVfaGFzaCwgY29uc3QgRU5HSU5FX1BJTEUgKikKLXN0YXRpYyBJTVBMRU1FTlRfTEhBU0hfQ09NUF9GTihlbmdpbmVfcGlsZV9jbXAsIGNvbnN0IEVOR0lORV9QSUxFICopCitzdGF0aWMgSU1QTEVNRU5UX0xIQVNIX0hBU0hfRk4oZW5naW5lX3BpbGUsIEVOR0lORV9QSUxFKQorc3RhdGljIElNUExFTUVOVF9MSEFTSF9DT01QX0ZOKGVuZ2luZV9waWxlLCBFTkdJTkVfUElMRSkKKwogc3RhdGljIGludCBpbnRfdGFibGVfY2hlY2soRU5HSU5FX1RBQkxFICoqdCwgaW50IGNyZWF0ZSkKIAl7Ci0JTEhBU0ggKmxoOworCUxIQVNIX09GKEVOR0lORV9QSUxFKSAqbGg7CisKIAlpZigqdCkgcmV0dXJuIDE7CiAJaWYoIWNyZWF0ZSkgcmV0dXJuIDA7Ci0JaWYoKGxoID0gbGhfbmV3KExIQVNIX0hBU0hfRk4oZW5naW5lX3BpbGVfaGFzaCksCi0JCQlMSEFTSF9DT01QX0ZOKGVuZ2luZV9waWxlX2NtcCkpKSA9PSBOVUxMKQorCWlmKChsaCA9IGxoX0VOR0lORV9QSUxFX25ldygpKSA9PSBOVUxMKQogCQlyZXR1cm4gMDsKIAkqdCA9IChFTkdJTkVfVEFCTEUgKilsaDsKIAlyZXR1cm4gMTsKQEAgLTEzMCw3ICsxNDMsNyBAQAogCXdoaWxlKG51bV9uaWRzLS0pCiAJCXsKIAkJdG1wbGF0ZS5uaWQgPSAqbmlkczsKLQkJZm5kID0gbGhfcmV0cmlldmUoJigqdGFibGUpLT5waWxlcywgJnRtcGxhdGUpOworCQlmbmQgPSBsaF9FTkdJTkVfUElMRV9yZXRyaWV2ZSgmKCp0YWJsZSktPnBpbGVzLCAmdG1wbGF0ZSk7CiAJCWlmKCFmbmQpCiAJCQl7CiAJCQlmbmQgPSBPUEVOU1NMX21hbGxvYyhzaXplb2YoRU5HSU5FX1BJTEUpKTsKQEAgLTE0NCw3ICsxNTcsNyBAQAogCQkJCWdvdG8gZW5kOwogCQkJCX0KIAkJCWZuZC0+ZnVuY3QgPSBOVUxMOwotCQkJbGhfaW5zZXJ0KCYoKnRhYmxlKS0+cGlsZXMsIGZuZCk7CisJCQkodm9pZClsaF9FTkdJTkVfUElMRV9pbnNlcnQoJigqdGFibGUpLT5waWxlcywgZm5kKTsKIAkJCX0KIAkJLyogQSByZWdpc3RyYXRpb24gc2hvdWxkbid0IGFkZCBkdXBsY2lhdGUgZW50cmllcyAqLwogCQkodm9pZClza19FTkdJTkVfZGVsZXRlX3B0cihmbmQtPnNrLCBlKTsKQEAgLTE3Myw3ICsxODYsNyBAQAogCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19FTkdJTkUpOwogCXJldHVybiByZXQ7CiAJfQotc3RhdGljIHZvaWQgaW50X3VucmVnaXN0ZXJfY2IoRU5HSU5FX1BJTEUgKnBpbGUsIEVOR0lORSAqZSkKK3N0YXRpYyB2b2lkIGludF91bnJlZ2lzdGVyX2NiX2RvYWxsX2FyZyhFTkdJTkVfUElMRSAqcGlsZSwgRU5HSU5FICplKQogCXsKIAlpbnQgbjsKIAkvKiBJdGVyYXRlIHRoZSAnYy0+c2snIHN0YWNrIHJlbW92aW5nIGFueSBvY2N1cmFuY2Ugb2YgJ2UnICovCkBAIC0xODgsMzEgKzIwMSwzNSBAQAogCQlwaWxlLT5mdW5jdCA9IE5VTEw7CiAJCX0KIAl9Ci1zdGF0aWMgSU1QTEVNRU5UX0xIQVNIX0RPQUxMX0FSR19GTihpbnRfdW5yZWdpc3Rlcl9jYixFTkdJTkVfUElMRSAqLEVOR0lORSAqKQorc3RhdGljIElNUExFTUVOVF9MSEFTSF9ET0FMTF9BUkdfRk4oaW50X3VucmVnaXN0ZXJfY2IsIEVOR0lORV9QSUxFLCBFTkdJTkUpCisKIHZvaWQgZW5naW5lX3RhYmxlX3VucmVnaXN0ZXIoRU5HSU5FX1RBQkxFICoqdGFibGUsIEVOR0lORSAqZSkKIAl7CiAJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19FTkdJTkUpOwogCWlmKGludF90YWJsZV9jaGVjayh0YWJsZSwgMCkpCi0JCWxoX2RvYWxsX2FyZygmKCp0YWJsZSktPnBpbGVzLAotCQkJTEhBU0hfRE9BTExfQVJHX0ZOKGludF91bnJlZ2lzdGVyX2NiKSwgZSk7CisJCWxoX0VOR0lORV9QSUxFX2RvYWxsX2FyZygmKCp0YWJsZSktPnBpbGVzLAorCQkJCQkgTEhBU0hfRE9BTExfQVJHX0ZOKGludF91bnJlZ2lzdGVyX2NiKSwKKwkJCQkJIEVOR0lORSwgZSk7CiAJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX0VOR0lORSk7CiAJfQogCi1zdGF0aWMgdm9pZCBpbnRfY2xlYW51cF9jYihFTkdJTkVfUElMRSAqcCkKK3N0YXRpYyB2b2lkIGludF9jbGVhbnVwX2NiX2RvYWxsKEVOR0lORV9QSUxFICpwKQogCXsKIAlza19FTkdJTkVfZnJlZShwLT5zayk7CiAJaWYocC0+ZnVuY3QpCiAJCWVuZ2luZV91bmxvY2tlZF9maW5pc2gocC0+ZnVuY3QsIDApOwogCU9QRU5TU0xfZnJlZShwKTsKIAl9Ci1zdGF0aWMgSU1QTEVNRU5UX0xIQVNIX0RPQUxMX0ZOKGludF9jbGVhbnVwX2NiLEVOR0lORV9QSUxFICopCitzdGF0aWMgSU1QTEVNRU5UX0xIQVNIX0RPQUxMX0ZOKGludF9jbGVhbnVwX2NiLCBFTkdJTkVfUElMRSkKKwogdm9pZCBlbmdpbmVfdGFibGVfY2xlYW51cChFTkdJTkVfVEFCTEUgKip0YWJsZSkKIAl7CiAJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19FTkdJTkUpOwogCWlmKCp0YWJsZSkKIAkJewotCQlsaF9kb2FsbCgmKCp0YWJsZSktPnBpbGVzLCBMSEFTSF9ET0FMTF9GTihpbnRfY2xlYW51cF9jYikpOwotCQlsaF9mcmVlKCYoKnRhYmxlKS0+cGlsZXMpOworCQlsaF9FTkdJTkVfUElMRV9kb2FsbCgmKCp0YWJsZSktPnBpbGVzLAorCQkJCSAgICAgTEhBU0hfRE9BTExfRk4oaW50X2NsZWFudXBfY2IpKTsKKwkJbGhfRU5HSU5FX1BJTEVfZnJlZSgmKCp0YWJsZSktPnBpbGVzKTsKIAkJKnRhYmxlID0gTlVMTDsKIAkJfQogCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19FTkdJTkUpOwpAQCAtMjQzLDcgKzI2MCw3IEBACiAJICogb3BlcmF0aW9ucy4gQnV0IGRvbid0IHdvcnJ5IGFib3V0IGEgZnByaW50ZihzdGRlcnIpLiAqLwogCWlmKCFpbnRfdGFibGVfY2hlY2sodGFibGUsIDApKSBnb3RvIGVuZDsKIAl0bXBsYXRlLm5pZCA9IG5pZDsKLQlmbmQgPSBsaF9yZXRyaWV2ZSgmKCp0YWJsZSktPnBpbGVzLCAmdG1wbGF0ZSk7CisJZm5kID0gbGhfRU5HSU5FX1BJTEVfcmV0cmlldmUoJigqdGFibGUpLT5waWxlcywgJnRtcGxhdGUpOwogCWlmKCFmbmQpIGdvdG8gZW5kOwogCWlmKGZuZC0+ZnVuY3QgJiYgZW5naW5lX3VubG9ja2VkX2luaXQoZm5kLT5mdW5jdCkpCiAJCXsKQEAgLTMxNCwzICszMzEsMjEgQEAKIAlFUlJfcG9wX3RvX21hcmsoKTsKIAlyZXR1cm4gcmV0OwogCX0KKworLyogVGFibGUgZW51bWVyYXRpb24gKi8KKworc3RhdGljIHZvaWQgaW50X2NiX2RvYWxsX2FyZyhFTkdJTkVfUElMRSAqcGlsZSwgRU5HSU5FX1BJTEVfRE9BTEwgKmRhbGwpCisJeworCWRhbGwtPmNiKHBpbGUtPm5pZCwgcGlsZS0+c2ssIHBpbGUtPmZ1bmN0LCBkYWxsLT5hcmcpOworCX0KK3N0YXRpYyBJTVBMRU1FTlRfTEhBU0hfRE9BTExfQVJHX0ZOKGludF9jYiwgRU5HSU5FX1BJTEUsRU5HSU5FX1BJTEVfRE9BTEwpCisKK3ZvaWQgZW5naW5lX3RhYmxlX2RvYWxsKEVOR0lORV9UQUJMRSAqdGFibGUsIGVuZ2luZV90YWJsZV9kb2FsbF9jYiAqY2IsCisJCQkJCQkJCXZvaWQgKmFyZykKKwl7CisJRU5HSU5FX1BJTEVfRE9BTEwgZGFsbDsKKwlkYWxsLmNiID0gY2I7CisJZGFsbC5hcmcgPSBhcmc7CisJbGhfRU5HSU5FX1BJTEVfZG9hbGxfYXJnKCZ0YWJsZS0+cGlsZXMsIExIQVNIX0RPQUxMX0FSR19GTihpbnRfY2IpLAorCQkJCSBFTkdJTkVfUElMRV9ET0FMTCwgJmRhbGwpOworCX0KZGlmZiAtLWdpdCBhL2NyeXB0by9lbmdpbmUvZW5naW5lLmggYi9jcnlwdG8vZW5naW5lL2VuZ2luZS5oCmluZGV4IGQ0YmMxZWYuLjdmYmQ5NWYgMTAwNjQ0Ci0tLSBhL2NyeXB0by9lbmdpbmUvZW5naW5lLmgKKysrIGIvY3J5cHRvL2VuZ2luZS9lbmdpbmUuaApAQCAtODgsMTYgKzg4LDE1IEBACiAjaW5jbHVkZSA8b3BlbnNzbC9lY2RzYS5oPgogI2VuZGlmCiAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0jaW5jbHVkZSA8b3BlbnNzbC9zdG9yZS5oPgogI2luY2x1ZGUgPG9wZW5zc2wvdWkuaD4KICNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgogI2VuZGlmCiAKLSNpbmNsdWRlIDxvcGVuc3NsL3g1MDkuaD4KLQogI2luY2x1ZGUgPG9wZW5zc2wvb3NzbF90eXAuaD4KICNpbmNsdWRlIDxvcGVuc3NsL3N5bWhhY2tzLmg+CiAKKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDkuaD4KKwogI2lmZGVmICBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CiAjZW5kaWYKQEAgLTExMyw2ICsxMTIsOCBAQAogI2RlZmluZSBFTkdJTkVfTUVUSE9EX0NJUEhFUlMJCSh1bnNpZ25lZCBpbnQpMHgwMDQwCiAjZGVmaW5lIEVOR0lORV9NRVRIT0RfRElHRVNUUwkJKHVuc2lnbmVkIGludCkweDAwODAKICNkZWZpbmUgRU5HSU5FX01FVEhPRF9TVE9SRQkJKHVuc2lnbmVkIGludCkweDAxMDAKKyNkZWZpbmUgRU5HSU5FX01FVEhPRF9QS0VZX01FVEhTCSh1bnNpZ25lZCBpbnQpMHgwMjAwCisjZGVmaW5lIEVOR0lORV9NRVRIT0RfUEtFWV9BU04xX01FVEhTCSh1bnNpZ25lZCBpbnQpMHgwNDAwCiAvKiBPYnZpb3VzIGFsbC1vci1ub3RoaW5nIGNhc2VzLiAqLwogI2RlZmluZSBFTkdJTkVfTUVUSE9EX0FMTAkJKHVuc2lnbmVkIGludCkweEZGRkYKICNkZWZpbmUgRU5HSU5FX01FVEhPRF9OT05FCQkodW5zaWduZWQgaW50KTB4MDAwMApAQCAtMjk3LDcgKzI5OCw4IEBACiAgKiBwYXJhbWV0ZXIgaXMgbm9uLU5VTEwgaXQgaXMgc2V0IHRvIHRoZSBzaXplIG9mIHRoZSByZXR1cm5lZCBhcnJheS4gKi8KIHR5cGVkZWYgaW50ICgqRU5HSU5FX0NJUEhFUlNfUFRSKShFTkdJTkUgKiwgY29uc3QgRVZQX0NJUEhFUiAqKiwgY29uc3QgaW50ICoqLCBpbnQpOwogdHlwZWRlZiBpbnQgKCpFTkdJTkVfRElHRVNUU19QVFIpKEVOR0lORSAqLCBjb25zdCBFVlBfTUQgKiosIGNvbnN0IGludCAqKiwgaW50KTsKLQordHlwZWRlZiBpbnQgKCpFTkdJTkVfUEtFWV9NRVRIU19QVFIpKEVOR0lORSAqLCBFVlBfUEtFWV9NRVRIT0QgKiosIGNvbnN0IGludCAqKiwgaW50KTsKK3R5cGVkZWYgaW50ICgqRU5HSU5FX1BLRVlfQVNOMV9NRVRIU19QVFIpKEVOR0lORSAqLCBFVlBfUEtFWV9BU04xX01FVEhPRCAqKiwgY29uc3QgaW50ICoqLCBpbnQpOwogLyogU1RSVUNUVVJFIGZ1bmN0aW9ucyAuLi4gYWxsIG9mIHRoZXNlIGZ1bmN0aW9ucyBkZWFsIHdpdGggcG9pbnRlcnMgdG8gRU5HSU5FCiAgKiBzdHJ1Y3R1cmVzIHdoZXJlIHRoZSBwb2ludGVycyBoYXZlIGEgInN0cnVjdHVyYWwgcmVmZXJlbmNlIi4gVGhpcyBtZWFucyB0aGF0CiAgKiB0aGVpciByZWZlcmVuY2UgaXMgdG8gYWxsb3dlZCBhY2Nlc3MgdG8gdGhlIHN0cnVjdHVyZSBidXQgaXQgZG9lcyBub3QgaW1wbHkKQEAgLTMyOSwyMSArMzMxLDIwIEBACiB2b2lkIEVOR0lORV9sb2FkX2F0YWxsYSh2b2lkKTsKIHZvaWQgRU5HSU5FX2xvYWRfY2hpbCh2b2lkKTsKIHZvaWQgRU5HSU5FX2xvYWRfY3N3aWZ0KHZvaWQpOwotI2lmbmRlZiBPUEVOU1NMX05PX0dNUAotdm9pZCBFTkdJTkVfbG9hZF9nbXAodm9pZCk7Ci0jZW5kaWYKIHZvaWQgRU5HSU5FX2xvYWRfbnVyb24odm9pZCk7CiB2b2lkIEVOR0lORV9sb2FkX3N1cmV3YXJlKHZvaWQpOwogdm9pZCBFTkdJTkVfbG9hZF91YnNlYyh2b2lkKTsKK3ZvaWQgRU5HSU5FX2xvYWRfcGFkbG9jayh2b2lkKTsKK3ZvaWQgRU5HSU5FX2xvYWRfY2FwaSh2b2lkKTsKKyNpZm5kZWYgT1BFTlNTTF9OT19HTVAKK3ZvaWQgRU5HSU5FX2xvYWRfZ21wKHZvaWQpOworI2VuZGlmCisjaWZuZGVmIE9QRU5TU0xfTk9fR09TVAordm9pZCBFTkdJTkVfbG9hZF9nb3N0KHZvaWQpOworI2VuZGlmCiAjZW5kaWYKIHZvaWQgRU5HSU5FX2xvYWRfY3J5cHRvZGV2KHZvaWQpOwotdm9pZCBFTkdJTkVfbG9hZF9wYWRsb2NrKHZvaWQpOwogdm9pZCBFTkdJTkVfbG9hZF9idWlsdGluX2VuZ2luZXModm9pZCk7Ci0jaWZkZWYgT1BFTlNTTF9TWVNfV0lOMzIKLSNpZm5kZWYgT1BFTlNTTF9OT19DQVBJRU5HCi12b2lkIEVOR0lORV9sb2FkX2NhcGkodm9pZCk7Ci0jZW5kaWYKLSNlbmRpZgogCiAvKiBHZXQgYW5kIHNldCBnbG9iYWwgZmxhZ3MgKEVOR0lORV9UQUJMRV9GTEFHXyoqKikgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbgogICogInJlZ2lzdHJ5IiBoYW5kbGluZy4gKi8KQEAgLTM5NCw2ICszOTUsMTQgQEAKIHZvaWQgRU5HSU5FX3VucmVnaXN0ZXJfZGlnZXN0cyhFTkdJTkUgKmUpOwogdm9pZCBFTkdJTkVfcmVnaXN0ZXJfYWxsX2RpZ2VzdHModm9pZCk7CiAKK2ludCBFTkdJTkVfcmVnaXN0ZXJfcGtleV9tZXRocyhFTkdJTkUgKmUpOwordm9pZCBFTkdJTkVfdW5yZWdpc3Rlcl9wa2V5X21ldGhzKEVOR0lORSAqZSk7Cit2b2lkIEVOR0lORV9yZWdpc3Rlcl9hbGxfcGtleV9tZXRocyh2b2lkKTsKKworaW50IEVOR0lORV9yZWdpc3Rlcl9wa2V5X2FzbjFfbWV0aHMoRU5HSU5FICplKTsKK3ZvaWQgRU5HSU5FX3VucmVnaXN0ZXJfcGtleV9hc24xX21ldGhzKEVOR0lORSAqZSk7Cit2b2lkIEVOR0lORV9yZWdpc3Rlcl9hbGxfcGtleV9hc24xX21ldGhzKHZvaWQpOworCiAvKiBUaGVzZSBmdW5jdGlvbnMgcmVnaXN0ZXIgYWxsIHN1cHBvcnQgZnJvbSB0aGUgYWJvdmUgY2F0ZWdvcmllcy4gTm90ZSwgdXNlIG9mCiAgKiB0aGVzZSBmdW5jdGlvbnMgY2FuIHJlc3VsdCBpbiBzdGF0aWMgbGlua2FnZSBvZiBjb2RlIHlvdXIgYXBwbGljYXRpb24gbWF5IG5vdAogICogbmVlZC4gSWYgeW91IG9ubHkgbmVlZCBhIHN1YnNldCBvZiBmdW5jdGlvbmFsaXR5LCBjb25zaWRlciB1c2luZyBtb3JlCkBAIC00NzMsNiArNDgyLDggQEAKIAkJCQlFTkdJTkVfU1NMX0NMSUVOVF9DRVJUX1BUUiBsb2Fkc3NsX2YpOwogaW50IEVOR0lORV9zZXRfY2lwaGVycyhFTkdJTkUgKmUsIEVOR0lORV9DSVBIRVJTX1BUUiBmKTsKIGludCBFTkdJTkVfc2V0X2RpZ2VzdHMoRU5HSU5FICplLCBFTkdJTkVfRElHRVNUU19QVFIgZik7CitpbnQgRU5HSU5FX3NldF9wa2V5X21ldGhzKEVOR0lORSAqZSwgRU5HSU5FX1BLRVlfTUVUSFNfUFRSIGYpOworaW50IEVOR0lORV9zZXRfcGtleV9hc24xX21ldGhzKEVOR0lORSAqZSwgRU5HSU5FX1BLRVlfQVNOMV9NRVRIU19QVFIgZik7CiBpbnQgRU5HSU5FX3NldF9mbGFncyhFTkdJTkUgKmUsIGludCBmbGFncyk7CiBpbnQgRU5HSU5FX3NldF9jbWRfZGVmbnMoRU5HSU5FICplLCBjb25zdCBFTkdJTkVfQ01EX0RFRk4gKmRlZm5zKTsKIC8qIFRoZXNlIGZ1bmN0aW9ucyBhbGxvdyBjb250cm9sIG92ZXIgYW55IHBlci1zdHJ1Y3R1cmUgRU5HSU5FIGRhdGEuICovCkBAIC01MDksOCArNTIwLDE2IEBACiBFTkdJTkVfU1NMX0NMSUVOVF9DRVJUX1BUUiBFTkdJTkVfZ2V0X3NzbF9jbGllbnRfY2VydF9mdW5jdGlvbihjb25zdCBFTkdJTkUgKmUpOwogRU5HSU5FX0NJUEhFUlNfUFRSIEVOR0lORV9nZXRfY2lwaGVycyhjb25zdCBFTkdJTkUgKmUpOwogRU5HSU5FX0RJR0VTVFNfUFRSIEVOR0lORV9nZXRfZGlnZXN0cyhjb25zdCBFTkdJTkUgKmUpOworRU5HSU5FX1BLRVlfTUVUSFNfUFRSIEVOR0lORV9nZXRfcGtleV9tZXRocyhjb25zdCBFTkdJTkUgKmUpOworRU5HSU5FX1BLRVlfQVNOMV9NRVRIU19QVFIgRU5HSU5FX2dldF9wa2V5X2FzbjFfbWV0aHMoY29uc3QgRU5HSU5FICplKTsKIGNvbnN0IEVWUF9DSVBIRVIgKkVOR0lORV9nZXRfY2lwaGVyKEVOR0lORSAqZSwgaW50IG5pZCk7CiBjb25zdCBFVlBfTUQgKkVOR0lORV9nZXRfZGlnZXN0KEVOR0lORSAqZSwgaW50IG5pZCk7Citjb25zdCBFVlBfUEtFWV9NRVRIT0QgKkVOR0lORV9nZXRfcGtleV9tZXRoKEVOR0lORSAqZSwgaW50IG5pZCk7Citjb25zdCBFVlBfUEtFWV9BU04xX01FVEhPRCAqRU5HSU5FX2dldF9wa2V5X2FzbjFfbWV0aChFTkdJTkUgKmUsIGludCBuaWQpOworY29uc3QgRVZQX1BLRVlfQVNOMV9NRVRIT0QgKkVOR0lORV9nZXRfcGtleV9hc24xX21ldGhfc3RyKEVOR0lORSAqZSwKKwkJCQkJY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuKTsKK2NvbnN0IEVWUF9QS0VZX0FTTjFfTUVUSE9EICpFTkdJTkVfcGtleV9hc24xX2ZpbmRfc3RyKEVOR0lORSAqKnBlLAorCQkJCQljb25zdCBjaGFyICpzdHIsIGludCBsZW4pOwogY29uc3QgRU5HSU5FX0NNRF9ERUZOICpFTkdJTkVfZ2V0X2NtZF9kZWZucyhjb25zdCBFTkdJTkUgKmUpOwogaW50IEVOR0lORV9nZXRfZmxhZ3MoY29uc3QgRU5HSU5FICplKTsKIApAQCAtNTYyLDYgKzU4MSw4IEBACiAgKiBjaXBoZXJpbmcgb3IgZGlnZXN0aW5nIGNvcnJlc3BvbmRpbmcgdG8gIm5pZCIuICovCiBFTkdJTkUgKkVOR0lORV9nZXRfY2lwaGVyX2VuZ2luZShpbnQgbmlkKTsKIEVOR0lORSAqRU5HSU5FX2dldF9kaWdlc3RfZW5naW5lKGludCBuaWQpOworRU5HSU5FICpFTkdJTkVfZ2V0X3BrZXlfbWV0aF9lbmdpbmUoaW50IG5pZCk7CitFTkdJTkUgKkVOR0lORV9nZXRfcGtleV9hc24xX21ldGhfZW5naW5lKGludCBuaWQpOwogCiAvKiBUaGlzIHNldHMgYSBuZXcgZGVmYXVsdCBFTkdJTkUgc3RydWN0dXJlIGZvciBwZXJmb3JtaW5nIFJTQQogICogb3BlcmF0aW9ucy4gSWYgdGhlIHJlc3VsdCBpcyBub24temVybyAoc3VjY2VzcykgdGhlbiB0aGUgRU5HSU5FCkBAIC01NzcsNiArNTk4LDggQEAKIGludCBFTkdJTkVfc2V0X2RlZmF1bHRfUkFORChFTkdJTkUgKmUpOwogaW50IEVOR0lORV9zZXRfZGVmYXVsdF9jaXBoZXJzKEVOR0lORSAqZSk7CiBpbnQgRU5HSU5FX3NldF9kZWZhdWx0X2RpZ2VzdHMoRU5HSU5FICplKTsKK2ludCBFTkdJTkVfc2V0X2RlZmF1bHRfcGtleV9tZXRocyhFTkdJTkUgKmUpOworaW50IEVOR0lORV9zZXRfZGVmYXVsdF9wa2V5X2FzbjFfbWV0aHMoRU5HSU5FICplKTsKIAogLyogVGhlIGNvbWJpbmF0aW9uICJzZXQiIC0gdGhlIGZsYWdzIGFyZSBiaXR3aXNlICJPUiJkIGZyb20gdGhlCiAgKiBFTkdJTkVfTUVUSE9EXyoqKiBkZWZpbmVzIGFib3ZlLiBBcyB3aXRoIHRoZSAiRU5HSU5FX3JlZ2lzdGVyX2NvbXBsZXRlKCkiCkBAIC03MDUsNyArNzI4LDcgQEAKICAqIHZhbHVlcy4gKi8KIHZvaWQgKkVOR0lORV9nZXRfc3RhdGljX3N0YXRlKHZvaWQpOwogCi0jaWYgZGVmaW5lZChfX09wZW5CU0RfXykgfHwgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyNpZiBkZWZpbmVkKF9fT3BlbkJTRF9fKSB8fCBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKEhBVkVfQ1JZUFRPREVWKQogdm9pZCBFTkdJTkVfc2V0dXBfYnNkX2NyeXB0b2Rldih2b2lkKTsKICNlbmRpZgogCkBAIC03MzQsMTMgKzc1NywxNSBAQAogI2RlZmluZSBFTkdJTkVfRl9FTkdJTkVfR0VUX0RFRkFVTFRfVFlQRQkJIDE3NwogI2RlZmluZSBFTkdJTkVfRl9FTkdJTkVfR0VUX0RJR0VTVAkJCSAxODYKICNkZWZpbmUgRU5HSU5FX0ZfRU5HSU5FX0dFVF9ORVhUCQkJIDExNQorI2RlZmluZSBFTkdJTkVfRl9FTkdJTkVfR0VUX1BLRVlfQVNOMV9NRVRICQkgMTkzCisjZGVmaW5lIEVOR0lORV9GX0VOR0lORV9HRVRfUEtFWV9NRVRICQkJIDE5MgogI2RlZmluZSBFTkdJTkVfRl9FTkdJTkVfR0VUX1BSRVYJCQkgMTE2CiAjZGVmaW5lIEVOR0lORV9GX0VOR0lORV9JTklUCQkJCSAxMTkKICNkZWZpbmUgRU5HSU5FX0ZfRU5HSU5FX0xJU1RfQURECQkJIDEyMAogI2RlZmluZSBFTkdJTkVfRl9FTkdJTkVfTElTVF9SRU1PVkUJCQkgMTIxCiAjZGVmaW5lIEVOR0lORV9GX0VOR0lORV9MT0FEX1BSSVZBVEVfS0VZCQkgMTUwCiAjZGVmaW5lIEVOR0lORV9GX0VOR0lORV9MT0FEX1BVQkxJQ19LRVkJCQkgMTUxCi0jZGVmaW5lIEVOR0lORV9GX0VOR0lORV9MT0FEX1NTTF9DTElFTlRfQ0VSVAkJIDE5MgorI2RlZmluZSBFTkdJTkVfRl9FTkdJTkVfTE9BRF9TU0xfQ0xJRU5UX0NFUlQJCSAxOTQKICNkZWZpbmUgRU5HSU5FX0ZfRU5HSU5FX05FVwkJCQkgMTIyCiAjZGVmaW5lIEVOR0lORV9GX0VOR0lORV9SRU1PVkUJCQkJIDEyMwogI2RlZmluZSBFTkdJTkVfRl9FTkdJTkVfU0VUX0RFRkFVTFRfU1RSSU5HCQkgMTg5CkBAIC03NjksNyArNzk0LDcgQEAKICNkZWZpbmUgRU5HSU5FX1JfRFNPX0ZBSUxVUkUJCQkJIDEwNAogI2RlZmluZSBFTkdJTkVfUl9EU09fTk9UX0ZPVU5ECQkJCSAxMzIKICNkZWZpbmUgRU5HSU5FX1JfRU5HSU5FU19TRUNUSU9OX0VSUk9SCQkJIDE0OAotI2RlZmluZSBFTkdJTkVfUl9FTkdJTkVfQ09ORklHVVJBVElPTl9FUlJPUgkJIDEwMQorI2RlZmluZSBFTkdJTkVfUl9FTkdJTkVfQ09ORklHVVJBVElPTl9FUlJPUgkJIDEwMgogI2RlZmluZSBFTkdJTkVfUl9FTkdJTkVfSVNfTk9UX0lOX0xJU1QJCQkgMTA1CiAjZGVmaW5lIEVOR0lORV9SX0VOR0lORV9TRUNUSU9OX0VSUk9SCQkJIDE0OQogI2RlZmluZSBFTkdJTkVfUl9GQUlMRURfTE9BRElOR19QUklWQVRFX0tFWQkJIDEyOApAQCAtNzk2LDYgKzgyMSw3IEBACiAjZGVmaW5lIEVOR0lORV9SX1JTQV9OT1RfSU1QTEVNRU5URUQJCQkgMTQxCiAjZGVmaW5lIEVOR0lORV9SX1VOSU1QTEVNRU5URURfQ0lQSEVSCQkJIDE0NgogI2RlZmluZSBFTkdJTkVfUl9VTklNUExFTUVOVEVEX0RJR0VTVAkJCSAxNDcKKyNkZWZpbmUgRU5HSU5FX1JfVU5JTVBMRU1FTlRFRF9QVUJMSUNfS0VZX01FVEhPRAkgMTAxCiAjZGVmaW5lIEVOR0lORV9SX1ZFUlNJT05fSU5DT01QQVRJQklMSVRZCQkgMTQ1CiAKICNpZmRlZiAgX19jcGx1c3BsdXMKZGlmZiAtLWdpdCBhL2NyeXB0by9lbmdpbmUvZW5naW5ldGVzdC5jIGIvY3J5cHRvL2VuZ2luZS9lbmdpbmV0ZXN0LmMKaW5kZXggZTM4MzQ2MS4uZjRkNzBlNyAxMDA2NDQKLS0tIGEvY3J5cHRvL2VuZ2luZS9lbmdpbmV0ZXN0LmMKKysrIGIvY3J5cHRvL2VuZ2luZS9lbmdpbmV0ZXN0LmMKQEAgLTI3Niw3ICsyNzYsNyBAQAogCUVOR0lORV9jbGVhbnVwKCk7CiAJQ1JZUFRPX2NsZWFudXBfYWxsX2V4X2RhdGEoKTsKIAlFUlJfZnJlZV9zdHJpbmdzKCk7Ci0JRVJSX3JlbW92ZV9zdGF0ZSgwKTsKKwlFUlJfcmVtb3ZlX3RocmVhZF9zdGF0ZShOVUxMKTsKIAlDUllQVE9fbWVtX2xlYWtzX2ZwKHN0ZGVycik7CiAJcmV0dXJuIHRvX3JldHVybjsKIAl9CmRpZmYgLS1naXQgYS9jcnlwdG8vZXJyL01ha2VmaWxlIGIvY3J5cHRvL2Vyci9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTZkOGExYS4uMDAwMDAwMAotLS0gYS9jcnlwdG8vZXJyL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMTMxICswLDAgQEAKLSMKLSMgT3BlblNTTC9jcnlwdG8vZXJyL01ha2VmaWxlCi0jCi0KLURJUj0JZXJyCi1UT1A9CS4uLy4uCi1DQz0JY2MKLUlOQ0xVREVTPSAtSS4uIC1JJChUT1ApIC1JLi4vLi4vaW5jbHVkZQotQ0ZMQUc9LWcKLU1BS0VGSUxFPQlNYWtlZmlsZQotQVI9CQlhciByCi0KLUNGTEFHUz0gJChJTkNMVURFUykgJChDRkxBRykKLQotR0VORVJBTD1NYWtlZmlsZQotVEVTVD0KLUFQUFM9Ci0KLUxJQj0kKFRPUCkvbGliY3J5cHRvLmEKLUxJQlNSQz1lcnIuYyBlcnJfZGVmLmMgZXJyX2FsbC5jIGVycl9wcm4uYyBlcnJfc3RyLmMgZXJyX2Jpby5jCi1MSUJPQko9ZXJyLm8gZXJyX2RlZi5vIGVycl9hbGwubyBlcnJfcHJuLm8gZXJyX3N0ci5vIGVycl9iaW8ubwotCi1TUkM9ICQoTElCU1JDKQotCi1FWEhFQURFUj0gZXJyLmgKLUhFQURFUj0JJChFWEhFQURFUikKLQotQUxMPSAgICAkKEdFTkVSQUwpICQoU1JDKSAkKEhFQURFUikKLQotdG9wOgotCShjZCAuLi8uLjsgJChNQUtFKSBESVJTPWNyeXB0byBTRElSUz0kKERJUikgc3ViX2FsbCkKLQotYWxsOglsaWIKLQotbGliOgkkKExJQk9CSikKLQkkKEFSWCkgJChMSUIpICQoTElCT0JKKQotCSQoUkFOTElCKSAkKExJQikgfHwgZWNobyBOZXZlciBtaW5kLgotCUB0b3VjaCBsaWIKLQotZmlsZXM6Ci0JJChQRVJMKSAkKFRPUCkvdXRpbC9maWxlcy5wbCBNYWtlZmlsZSA+PiAkKFRPUCkvTUlORk8KLQotbGlua3M6Ci0JQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL2luY2x1ZGUvb3BlbnNzbCAkKEVYSEVBREVSKQotCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi90ZXN0ICQoVEVTVCkKLQlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vYXBwcyAkKEFQUFMpCi0KLWluc3RhbGw6Ci0JQFsgLW4gIiQoSU5TVEFMTFRPUCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHRvcCBNYWtlZmlsZS4uLgotCUBoZWFkZXJsaXN0PSIkKEVYSEVBREVSKSI7IGZvciBpIGluICQkaGVhZGVybGlzdCA7IFwKLQlkbyAgXAotCShjcCAkJGkgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGk7IFwKLQljaG1vZCA2NDQgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGkgKTsgXAotCWRvbmU7Ci0KLXRhZ3M6Ci0JY3RhZ3MgJChTUkMpCi0KLXRlc3RzOgotCi1saW50OgotCWxpbnQgLURMSU5UICQoSU5DTFVERVMpICQoU1JDKT5mbHVmZgotCi1kZXBlbmQ6Ci0JQFsgLW4gIiQoTUFLRURFUEVORCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHVwcGVyIE1ha2VmaWxlLi4uCi0JJChNQUtFREVQRU5EKSAtLSAkKENGTEFHKSAkKElOQ0xVREVTKSAkKERFUEZMQUcpIC0tICQoUFJPR1MpICQoTElCU1JDKQotCi1kY2xlYW46Ci0JJChQRVJMKSAtcGUgJ2lmICgvXiMgRE8gTk9UIERFTEVURSBUSElTIExJTkUvKSB7cHJpbnQ7IGV4aXQoMCk7fScgJChNQUtFRklMRSkgPk1ha2VmaWxlLm5ldwotCW12IC1mIE1ha2VmaWxlLm5ldyAkKE1BS0VGSUxFKQotCi1jbGVhbjoKLQlybSAtZiAqLm8gKi5vYmogbGliIHRhZ3MgY29yZSAucHVyZSAubmZzKiAqLm9sZCAqLmJhayBmbHVmZgotCi0jIERPIE5PVCBERUxFVEUgVEhJUyBMSU5FIC0tIG1ha2UgZGVwZW5kIGRlcGVuZHMgb24gaXQuCi0KLWVyci5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi1lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLWVyci5vOiAuLi9jcnlwdGxpYi5oIGVyci5jCi1lcnJfYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1lcnJfYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotZXJyX2FsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jb25mLmgKLWVycl9hbGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kaC5oCi1lcnJfYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZHNvLmgKLWVycl9hbGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLWVycl9hbGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotZXJyX2FsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZW5naW5lLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1lcnJfYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi1lcnJfYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLWVycl9hbGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2NzcC5oCi1lcnJfYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi1lcnJfYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmgKLWVycl9hbGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3MxMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi1lcnJfYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCi1lcnJfYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLWVycl9hbGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLWVycl9hbGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3VpLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotZXJyX2FsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOXYzLmgKLWVycl9hbGwubzogZXJyX2FsbC5jCi1lcnJfYmlvLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWVycl9iaW8ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotZXJyX2Jpby5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWVycl9iaW8ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWVycl9iaW8ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWVycl9iaW8ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1lcnJfYmlvLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggZXJyX2Jpby5jCi1lcnJfZGVmLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWVycl9kZWYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotZXJyX2RlZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWVycl9kZWYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWVycl9kZWYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWVycl9kZWYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1lcnJfZGVmLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggZXJyX2RlZi5jCi1lcnJfcHJuLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWVycl9wcm4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotZXJyX3Bybi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWVycl9wcm4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWVycl9wcm4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWVycl9wcm4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1lcnJfcHJuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggZXJyX3Bybi5jCi1lcnJfc3RyLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWVycl9zdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotZXJyX3N0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWVycl9zdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWVycl9zdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWVycl9zdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1lcnJfc3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggZXJyX3N0ci5jCmRpZmYgLS1naXQgYS9jcnlwdG8vZXJyL2Vyci5jIGIvY3J5cHRvL2Vyci9lcnIuYwppbmRleCAyOTI0MDRhLi42OTcxM2E2IDEwMDY0NAotLS0gYS9jcnlwdG8vZXJyL2Vyci5jCisrKyBiL2NyeXB0by9lcnIvZXJyLmMKQEAgLTU2LDcgKzU2LDcgQEAKICAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCiAgKi8KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTksOSArMTE5LDUwNyBAQAogI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2Vycm9yX3ZhbHVlcyhpbnQgaW5jLGludCB0b3AsCi0JCQkJCWNvbnN0IGNoYXIgKipmaWxlLGludCAqbGluZSwKLQkJCQkJY29uc3QgY2hhciAqKmRhdGEsaW50ICpmbGFncyk7CitERUNMQVJFX0xIQVNIX09GKEVSUl9TVFJJTkdfREFUQSk7CitERUNMQVJFX0xIQVNIX09GKEVSUl9TVEFURSk7CisKK3N0YXRpYyB2b2lkIGVycl9sb2FkX3N0cmluZ3MoaW50IGxpYiwgRVJSX1NUUklOR19EQVRBICpzdHIpOworCitzdGF0aWMgdm9pZCBFUlJfU1RBVEVfZnJlZShFUlJfU1RBVEUgKnMpOworI2lmbmRlZiBPUEVOU1NMX05PX0VSUgorc3RhdGljIEVSUl9TVFJJTkdfREFUQSBFUlJfc3RyX2xpYnJhcmllc1tdPQorCXsKK3tFUlJfUEFDSyhFUlJfTElCX05PTkUsMCwwKQkJLCJ1bmtub3duIGxpYnJhcnkifSwKK3tFUlJfUEFDSyhFUlJfTElCX1NZUywwLDApCQksInN5c3RlbSBsaWJyYXJ5In0sCit7RVJSX1BBQ0soRVJSX0xJQl9CTiwwLDApCQksImJpZ251bSByb3V0aW5lcyJ9LAore0VSUl9QQUNLKEVSUl9MSUJfUlNBLDAsMCkJCSwicnNhIHJvdXRpbmVzIn0sCit7RVJSX1BBQ0soRVJSX0xJQl9ESCwwLDApCQksIkRpZmZpZS1IZWxsbWFuIHJvdXRpbmVzIn0sCit7RVJSX1BBQ0soRVJSX0xJQl9FVlAsMCwwKQkJLCJkaWdpdGFsIGVudmVsb3BlIHJvdXRpbmVzIn0sCit7RVJSX1BBQ0soRVJSX0xJQl9CVUYsMCwwKQkJLCJtZW1vcnkgYnVmZmVyIHJvdXRpbmVzIn0sCit7RVJSX1BBQ0soRVJSX0xJQl9PQkosMCwwKQkJLCJvYmplY3QgaWRlbnRpZmllciByb3V0aW5lcyJ9LAore0VSUl9QQUNLKEVSUl9MSUJfUEVNLDAsMCkJCSwiUEVNIHJvdXRpbmVzIn0sCit7RVJSX1BBQ0soRVJSX0xJQl9EU0EsMCwwKQkJLCJkc2Egcm91dGluZXMifSwKK3tFUlJfUEFDSyhFUlJfTElCX1g1MDksMCwwKQkJLCJ4NTA5IGNlcnRpZmljYXRlIHJvdXRpbmVzIn0sCit7RVJSX1BBQ0soRVJSX0xJQl9BU04xLDAsMCkJCSwiYXNuMSBlbmNvZGluZyByb3V0aW5lcyJ9LAore0VSUl9QQUNLKEVSUl9MSUJfQ09ORiwwLDApCQksImNvbmZpZ3VyYXRpb24gZmlsZSByb3V0aW5lcyJ9LAore0VSUl9QQUNLKEVSUl9MSUJfQ1JZUFRPLDAsMCkJCSwiY29tbW9uIGxpYmNyeXB0byByb3V0aW5lcyJ9LAore0VSUl9QQUNLKEVSUl9MSUJfRUMsMCwwKQkJLCJlbGxpcHRpYyBjdXJ2ZSByb3V0aW5lcyJ9LAore0VSUl9QQUNLKEVSUl9MSUJfU1NMLDAsMCkJCSwiU1NMIHJvdXRpbmVzIn0sCit7RVJSX1BBQ0soRVJSX0xJQl9CSU8sMCwwKQkJLCJCSU8gcm91dGluZXMifSwKK3tFUlJfUEFDSyhFUlJfTElCX1BLQ1M3LDAsMCkJCSwiUEtDUzcgcm91dGluZXMifSwKK3tFUlJfUEFDSyhFUlJfTElCX1g1MDlWMywwLDApCQksIlg1MDkgVjMgcm91dGluZXMifSwKK3tFUlJfUEFDSyhFUlJfTElCX1BLQ1MxMiwwLDApCQksIlBLQ1MxMiByb3V0aW5lcyJ9LAore0VSUl9QQUNLKEVSUl9MSUJfUkFORCwwLDApCQksInJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIn0sCit7RVJSX1BBQ0soRVJSX0xJQl9EU08sMCwwKQkJLCJEU08gc3VwcG9ydCByb3V0aW5lcyJ9LAore0VSUl9QQUNLKEVSUl9MSUJfVFMsMCwwKQkJLCJ0aW1lIHN0YW1wIHJvdXRpbmVzIn0sCit7RVJSX1BBQ0soRVJSX0xJQl9FTkdJTkUsMCwwKQkJLCJlbmdpbmUgcm91dGluZXMifSwKK3tFUlJfUEFDSyhFUlJfTElCX09DU1AsMCwwKQkJLCJPQ1NQIHJvdXRpbmVzIn0sCit7RVJSX1BBQ0soRVJSX0xJQl9GSVBTLDAsMCkJCSwiRklQUyByb3V0aW5lcyJ9LAore0VSUl9QQUNLKEVSUl9MSUJfQ01TLDAsMCkJCSwiQ01TIHJvdXRpbmVzIn0sCit7RVJSX1BBQ0soRVJSX0xJQl9ITUFDLDAsMCkJCSwiSE1BQyByb3V0aW5lcyJ9LAorezAsTlVMTH0sCisJfTsKKworc3RhdGljIEVSUl9TVFJJTkdfREFUQSBFUlJfc3RyX2Z1bmN0c1tdPQorCXsKKwl7RVJSX1BBQ0soMCxTWVNfRl9GT1BFTiwwKSwgICAgIAkiZm9wZW4ifSwKKwl7RVJSX1BBQ0soMCxTWVNfRl9DT05ORUNULDApLAkJImNvbm5lY3QifSwKKwl7RVJSX1BBQ0soMCxTWVNfRl9HRVRTRVJWQllOQU1FLDApLAkiZ2V0c2VydmJ5bmFtZSJ9LAorCXtFUlJfUEFDSygwLFNZU19GX1NPQ0tFVCwwKSwJCSJzb2NrZXQifSwgCisJe0VSUl9QQUNLKDAsU1lTX0ZfSU9DVExTT0NLRVQsMCksCSJpb2N0bHNvY2tldCJ9LAorCXtFUlJfUEFDSygwLFNZU19GX0JJTkQsMCksCQkiYmluZCJ9LAorCXtFUlJfUEFDSygwLFNZU19GX0xJU1RFTiwwKSwJCSJsaXN0ZW4ifSwKKwl7RVJSX1BBQ0soMCxTWVNfRl9BQ0NFUFQsMCksCQkiYWNjZXB0In0sCisjaWZkZWYgT1BFTlNTTF9TWVNfV0lORE9XUworCXtFUlJfUEFDSygwLFNZU19GX1dTQVNUQVJUVVAsMCksCSJXU0FzdGFydHVwIn0sCisjZW5kaWYKKwl7RVJSX1BBQ0soMCxTWVNfRl9PUEVORElSLDApLAkJIm9wZW5kaXIifSwKKwl7RVJSX1BBQ0soMCxTWVNfRl9GUkVBRCwwKSwJCSJmcmVhZCJ9LAorCXswLE5VTEx9LAorCX07CisKK3N0YXRpYyBFUlJfU1RSSU5HX0RBVEEgRVJSX3N0cl9yZWFzb25zW109CisJewore0VSUl9SX1NZU19MSUIJCQkJLCJzeXN0ZW0gbGliIn0sCit7RVJSX1JfQk5fTElCCQkJCSwiQk4gbGliIn0sCit7RVJSX1JfUlNBX0xJQgkJCQksIlJTQSBsaWIifSwKK3tFUlJfUl9ESF9MSUIJCQkJLCJESCBsaWIifSwKK3tFUlJfUl9FVlBfTElCCQkJCSwiRVZQIGxpYiJ9LAore0VSUl9SX0JVRl9MSUIJCQkJLCJCVUYgbGliIn0sCit7RVJSX1JfT0JKX0xJQgkJCQksIk9CSiBsaWIifSwKK3tFUlJfUl9QRU1fTElCCQkJCSwiUEVNIGxpYiJ9LAore0VSUl9SX0RTQV9MSUIJCQkJLCJEU0EgbGliIn0sCit7RVJSX1JfWDUwOV9MSUIJCQkJLCJYNTA5IGxpYiJ9LAore0VSUl9SX0FTTjFfTElCCQkJCSwiQVNOMSBsaWIifSwKK3tFUlJfUl9DT05GX0xJQgkJCQksIkNPTkYgbGliIn0sCit7RVJSX1JfQ1JZUFRPX0xJQgkJCSwiQ1JZUFRPIGxpYiJ9LAore0VSUl9SX0VDX0xJQgkJCQksIkVDIGxpYiJ9LAore0VSUl9SX1NTTF9MSUIJCQkJLCJTU0wgbGliIn0sCit7RVJSX1JfQklPX0xJQgkJCQksIkJJTyBsaWIifSwKK3tFUlJfUl9QS0NTN19MSUIJCQksIlBLQ1M3IGxpYiJ9LAore0VSUl9SX1g1MDlWM19MSUIJCQksIlg1MDlWMyBsaWIifSwKK3tFUlJfUl9QS0NTMTJfTElCCQkJLCJQS0NTMTIgbGliIn0sCit7RVJSX1JfUkFORF9MSUIJCQkJLCJSQU5EIGxpYiJ9LAore0VSUl9SX0RTT19MSUIJCQkJLCJEU08gbGliIn0sCit7RVJSX1JfRU5HSU5FX0xJQgkJCSwiRU5HSU5FIGxpYiJ9LAore0VSUl9SX09DU1BfTElCCQkJCSwiT0NTUCBsaWIifSwKK3tFUlJfUl9UU19MSUIJCQkJLCJUUyBsaWIifSwKKwore0VSUl9SX05FU1RFRF9BU04xX0VSUk9SCQksIm5lc3RlZCBhc24xIGVycm9yIn0sCit7RVJSX1JfQkFEX0FTTjFfT0JKRUNUX0hFQURFUgkJLCJiYWQgYXNuMSBvYmplY3QgaGVhZGVyIn0sCit7RVJSX1JfQkFEX0dFVF9BU04xX09CSkVDVF9DQUxMCQksImJhZCBnZXQgYXNuMSBvYmplY3QgY2FsbCJ9LAore0VSUl9SX0VYUEVDVElOR19BTl9BU04xX1NFUVVFTkNFCSwiZXhwZWN0aW5nIGFuIGFzbjEgc2VxdWVuY2UifSwKK3tFUlJfUl9BU04xX0xFTkdUSF9NSVNNQVRDSAkJLCJhc24xIGxlbmd0aCBtaXNtYXRjaCJ9LAore0VSUl9SX01JU1NJTkdfQVNOMV9FT1MJCQksIm1pc3NpbmcgYXNuMSBlb3MifSwKKwore0VSUl9SX0ZBVEFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICwiZmF0YWwifSwKK3tFUlJfUl9NQUxMT0NfRkFJTFVSRQkJCSwibWFsbG9jIGZhaWx1cmUifSwKK3tFUlJfUl9TSE9VTERfTk9UX0hBVkVfQkVFTl9DQUxMRUQJLCJjYWxsZWQgYSBmdW5jdGlvbiB5b3Ugc2hvdWxkIG5vdCBjYWxsIn0sCit7RVJSX1JfUEFTU0VEX05VTExfUEFSQU1FVEVSCQksInBhc3NlZCBhIG51bGwgcGFyYW1ldGVyIn0sCit7RVJSX1JfSU5URVJOQUxfRVJST1IJCQksImludGVybmFsIGVycm9yIn0sCit7RVJSX1JfRElTQUJMRUQJCQkJLCJjYWxsZWQgYSBmdW5jdGlvbiB0aGF0IHdhcyBkaXNhYmxlZCBhdCBjb21waWxlLXRpbWUifSwKKworezAsTlVMTH0sCisJfTsKKyNlbmRpZgorCisKKy8qIERlZmluZSB0aGUgcHJlZGVjbGFyZWQgKGJ1dCBleHRlcm5hbGx5IG9wYXF1ZSkgIkVSUl9GTlMiIHR5cGUgKi8KK3N0cnVjdCBzdF9FUlJfRk5TCisJeworCS8qIFdvcmtzIG9uIHRoZSAiZXJyb3JfaGFzaCIgc3RyaW5nIHRhYmxlICovCisJTEhBU0hfT0YoRVJSX1NUUklOR19EQVRBKSAqKCpjYl9lcnJfZ2V0KShpbnQgY3JlYXRlKTsKKwl2b2lkICgqY2JfZXJyX2RlbCkodm9pZCk7CisJRVJSX1NUUklOR19EQVRBICooKmNiX2Vycl9nZXRfaXRlbSkoY29uc3QgRVJSX1NUUklOR19EQVRBICopOworCUVSUl9TVFJJTkdfREFUQSAqKCpjYl9lcnJfc2V0X2l0ZW0pKEVSUl9TVFJJTkdfREFUQSAqKTsKKwlFUlJfU1RSSU5HX0RBVEEgKigqY2JfZXJyX2RlbF9pdGVtKShFUlJfU1RSSU5HX0RBVEEgKik7CisJLyogV29ya3Mgb24gdGhlICJ0aHJlYWRfaGFzaCIgZXJyb3Itc3RhdGUgdGFibGUgKi8KKwlMSEFTSF9PRihFUlJfU1RBVEUpICooKmNiX3RocmVhZF9nZXQpKGludCBjcmVhdGUpOworCXZvaWQgKCpjYl90aHJlYWRfcmVsZWFzZSkoTEhBU0hfT0YoRVJSX1NUQVRFKSAqKmhhc2gpOworCUVSUl9TVEFURSAqKCpjYl90aHJlYWRfZ2V0X2l0ZW0pKGNvbnN0IEVSUl9TVEFURSAqKTsKKwlFUlJfU1RBVEUgKigqY2JfdGhyZWFkX3NldF9pdGVtKShFUlJfU1RBVEUgKik7CisJdm9pZCAoKmNiX3RocmVhZF9kZWxfaXRlbSkoY29uc3QgRVJSX1NUQVRFICopOworCS8qIFJldHVybnMgdGhlIG5leHQgYXZhaWxhYmxlIGVycm9yICJsaWJyYXJ5IiBudW1iZXJzICovCisJaW50ICgqY2JfZ2V0X25leHRfbGliKSh2b2lkKTsKKwl9OworCisvKiBQcmVkZWNsYXJhdGlvbnMgb2YgdGhlICJlcnJfZGVmYXVsdHMiIGZ1bmN0aW9ucyAqLworc3RhdGljIExIQVNIX09GKEVSUl9TVFJJTkdfREFUQSkgKmludF9lcnJfZ2V0KGludCBjcmVhdGUpOworc3RhdGljIHZvaWQgaW50X2Vycl9kZWwodm9pZCk7CitzdGF0aWMgRVJSX1NUUklOR19EQVRBICppbnRfZXJyX2dldF9pdGVtKGNvbnN0IEVSUl9TVFJJTkdfREFUQSAqKTsKK3N0YXRpYyBFUlJfU1RSSU5HX0RBVEEgKmludF9lcnJfc2V0X2l0ZW0oRVJSX1NUUklOR19EQVRBICopOworc3RhdGljIEVSUl9TVFJJTkdfREFUQSAqaW50X2Vycl9kZWxfaXRlbShFUlJfU1RSSU5HX0RBVEEgKik7CitzdGF0aWMgTEhBU0hfT0YoRVJSX1NUQVRFKSAqaW50X3RocmVhZF9nZXQoaW50IGNyZWF0ZSk7CitzdGF0aWMgdm9pZCBpbnRfdGhyZWFkX3JlbGVhc2UoTEhBU0hfT0YoRVJSX1NUQVRFKSAqKmhhc2gpOworc3RhdGljIEVSUl9TVEFURSAqaW50X3RocmVhZF9nZXRfaXRlbShjb25zdCBFUlJfU1RBVEUgKik7CitzdGF0aWMgRVJSX1NUQVRFICppbnRfdGhyZWFkX3NldF9pdGVtKEVSUl9TVEFURSAqKTsKK3N0YXRpYyB2b2lkIGludF90aHJlYWRfZGVsX2l0ZW0oY29uc3QgRVJSX1NUQVRFICopOworc3RhdGljIGludCBpbnRfZXJyX2dldF9uZXh0X2xpYih2b2lkKTsKKy8qIFRoZSBzdGF0aWMgRVJSX0ZOUyB0YWJsZSB1c2luZyB0aGVzZSBkZWZhdWx0cyBmdW5jdGlvbnMgKi8KK3N0YXRpYyBjb25zdCBFUlJfRk5TIGVycl9kZWZhdWx0cyA9CisJeworCWludF9lcnJfZ2V0LAorCWludF9lcnJfZGVsLAorCWludF9lcnJfZ2V0X2l0ZW0sCisJaW50X2Vycl9zZXRfaXRlbSwKKwlpbnRfZXJyX2RlbF9pdGVtLAorCWludF90aHJlYWRfZ2V0LAorCWludF90aHJlYWRfcmVsZWFzZSwKKwlpbnRfdGhyZWFkX2dldF9pdGVtLAorCWludF90aHJlYWRfc2V0X2l0ZW0sCisJaW50X3RocmVhZF9kZWxfaXRlbSwKKwlpbnRfZXJyX2dldF9uZXh0X2xpYgorCX07CisKKy8qIFRoZSByZXBsYWNhYmxlIHRhYmxlIG9mIEVSUl9GTlMgZnVuY3Rpb25zIHdlIHVzZSBhdCBydW4tdGltZSAqLworc3RhdGljIGNvbnN0IEVSUl9GTlMgKmVycl9mbnMgPSBOVUxMOworCisvKiBFZy4gcmF0aGVyIHRoYW4gdXNpbmcgImVycl9nZXQoKSIsIHVzZSAiRVJSRk4oZXJyX2dldCkoKSIuICovCisjZGVmaW5lIEVSUkZOKGEpIGVycl9mbnMtPmNiXyMjYQorCisvKiBUaGUgaW50ZXJuYWwgc3RhdGUgdXNlZCBieSAiZXJyX2RlZmF1bHRzIiAtIGFzIHN1Y2gsIHRoZSBzZXR0aW5nLCByZWFkaW5nLAorICogY3JlYXRpbmcsIGFuZCBkZWxldGluZyBvZiB0aGlzIGRhdGEgc2hvdWxkIG9ubHkgYmUgcGVybWl0dGVkIHZpYSB0aGUKKyAqICJlcnJfZGVmYXVsdHMiIGZ1bmN0aW9ucy4gVGhpcyB3YXksIGEgbGlua2VkIG1vZHVsZSBjYW4gY29tcGxldGVseSBkZWZlciBhbGwKKyAqIEVSUiBzdGF0ZSBvcGVyYXRpb24gKHRvZ2V0aGVyIHdpdGggcmVxdWlzaXRlIGxvY2tpbmcpIHRvIHRoZSBpbXBsZW1lbnRhdGlvbnMKKyAqIGFuZCBzdGF0ZSBpbiB0aGUgbG9hZGluZyBhcHBsaWNhdGlvbi4gKi8KK3N0YXRpYyBMSEFTSF9PRihFUlJfU1RSSU5HX0RBVEEpICppbnRfZXJyb3JfaGFzaCA9IE5VTEw7CitzdGF0aWMgTEhBU0hfT0YoRVJSX1NUQVRFKSAqaW50X3RocmVhZF9oYXNoID0gTlVMTDsKK3N0YXRpYyBpbnQgaW50X3RocmVhZF9oYXNoX3JlZmVyZW5jZXMgPSAwOworc3RhdGljIGludCBpbnRfZXJyX2xpYnJhcnlfbnVtYmVyPSBFUlJfTElCX1VTRVI7CisKKy8qIEludGVybmFsIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIHdoZXRoZXIgImVycl9mbnMiIGlzIHNldCBhbmQgaWYgbm90LCBzZXRzIGl0IHRvCisgKiB0aGUgZGVmYXVsdHMuICovCitzdGF0aWMgdm9pZCBlcnJfZm5zX2NoZWNrKHZvaWQpCisJeworCWlmIChlcnJfZm5zKSByZXR1cm47CisJCisJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19FUlIpOworCWlmICghZXJyX2ZucykKKwkJZXJyX2ZucyA9ICZlcnJfZGVmYXVsdHM7CisJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX0VSUik7CisJfQorCisvKiBBUEkgZnVuY3Rpb25zIHRvIGdldCBvciBzZXQgdGhlIHVuZGVybHlpbmcgRVJSIGZ1bmN0aW9ucy4gKi8KKworY29uc3QgRVJSX0ZOUyAqRVJSX2dldF9pbXBsZW1lbnRhdGlvbih2b2lkKQorCXsKKwllcnJfZm5zX2NoZWNrKCk7CisJcmV0dXJuIGVycl9mbnM7CisJfQorCitpbnQgRVJSX3NldF9pbXBsZW1lbnRhdGlvbihjb25zdCBFUlJfRk5TICpmbnMpCisJeworCWludCByZXQgPSAwOworCisJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19FUlIpOworCS8qIEl0J3MgdG9vIGxhdGUgaWYgJ2Vycl9mbnMnIGlzIG5vbi1OVUxMLiBCVFc6IG5vdCBtdWNoIHBvaW50IHNldHRpbmcKKwkgKiBhbiBlcnJvciBpcyB0aGVyZT8hICovCisJaWYgKCFlcnJfZm5zKQorCQl7CisJCWVycl9mbnMgPSBmbnM7CisJCXJldCA9IDE7CisJCX0KKwlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfRVJSKTsKKwlyZXR1cm4gcmV0OworCX0KKworLyogVGhlc2UgYXJlIHRoZSBjYWxsYmFja3MgcHJvdmlkZWQgdG8gImxoX25ldygpIiB3aGVuIGNyZWF0aW5nIHRoZSBMSEFTSCB0YWJsZXMKKyAqIGludGVybmFsIHRvIHRoZSAiZXJyX2RlZmF1bHRzIiBpbXBsZW1lbnRhdGlvbi4gKi8KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2Vycm9yX3ZhbHVlcyhpbnQgaW5jLGludCB0b3AsY29uc3QgY2hhciAqKmZpbGUsaW50ICpsaW5lLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKipkYXRhLGludCAqZmxhZ3MpOworCisvKiBUaGUgaW50ZXJuYWwgZnVuY3Rpb25zIHVzZWQgaW4gdGhlICJlcnJfZGVmYXVsdHMiIGltcGxlbWVudGF0aW9uICovCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGVycl9zdHJpbmdfZGF0YV9oYXNoKGNvbnN0IEVSUl9TVFJJTkdfREFUQSAqYSkKKwl7CisJdW5zaWduZWQgbG9uZyByZXQsbDsKKworCWw9YS0+ZXJyb3I7CisJcmV0PWxeRVJSX0dFVF9MSUIobCleRVJSX0dFVF9GVU5DKGwpOworCXJldHVybihyZXRecmV0JTE5KjEzKTsKKwl9CitzdGF0aWMgSU1QTEVNRU5UX0xIQVNIX0hBU0hfRk4oZXJyX3N0cmluZ19kYXRhLCBFUlJfU1RSSU5HX0RBVEEpCisKK3N0YXRpYyBpbnQgZXJyX3N0cmluZ19kYXRhX2NtcChjb25zdCBFUlJfU1RSSU5HX0RBVEEgKmEsCisJCQkgICAgICAgY29uc3QgRVJSX1NUUklOR19EQVRBICpiKQorCXsKKwlyZXR1cm4gKGludCkoYS0+ZXJyb3IgLSBiLT5lcnJvcik7CisJfQorc3RhdGljIElNUExFTUVOVF9MSEFTSF9DT01QX0ZOKGVycl9zdHJpbmdfZGF0YSwgRVJSX1NUUklOR19EQVRBKQorCitzdGF0aWMgTEhBU0hfT0YoRVJSX1NUUklOR19EQVRBKSAqaW50X2Vycl9nZXQoaW50IGNyZWF0ZSkKKwl7CisJTEhBU0hfT0YoRVJSX1NUUklOR19EQVRBKSAqcmV0ID0gTlVMTDsKKworCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfRVJSKTsKKwlpZiAoIWludF9lcnJvcl9oYXNoICYmIGNyZWF0ZSkKKwkJeworCQlDUllQVE9fcHVzaF9pbmZvKCJpbnRfZXJyX2dldCAoZXJyLmMpIik7CisJCWludF9lcnJvcl9oYXNoID0gbGhfRVJSX1NUUklOR19EQVRBX25ldygpOworCQlDUllQVE9fcG9wX2luZm8oKTsKKwkJfQorCWlmIChpbnRfZXJyb3JfaGFzaCkKKwkJcmV0ID0gaW50X2Vycm9yX2hhc2g7CisJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX0VSUik7CisKKwlyZXR1cm4gcmV0OworCX0KKworc3RhdGljIHZvaWQgaW50X2Vycl9kZWwodm9pZCkKKwl7CisJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19FUlIpOworCWlmIChpbnRfZXJyb3JfaGFzaCkKKwkJeworCQlsaF9FUlJfU1RSSU5HX0RBVEFfZnJlZShpbnRfZXJyb3JfaGFzaCk7CisJCWludF9lcnJvcl9oYXNoID0gTlVMTDsKKwkJfQorCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19FUlIpOworCX0KKworc3RhdGljIEVSUl9TVFJJTkdfREFUQSAqaW50X2Vycl9nZXRfaXRlbShjb25zdCBFUlJfU1RSSU5HX0RBVEEgKmQpCisJeworCUVSUl9TVFJJTkdfREFUQSAqcDsKKwlMSEFTSF9PRihFUlJfU1RSSU5HX0RBVEEpICpoYXNoOworCisJZXJyX2Zuc19jaGVjaygpOworCWhhc2ggPSBFUlJGTihlcnJfZ2V0KSgwKTsKKwlpZiAoIWhhc2gpCisJCXJldHVybiBOVUxMOworCisJQ1JZUFRPX3JfbG9jayhDUllQVE9fTE9DS19FUlIpOworCXAgPSBsaF9FUlJfU1RSSU5HX0RBVEFfcmV0cmlldmUoaGFzaCwgZCk7CisJQ1JZUFRPX3JfdW5sb2NrKENSWVBUT19MT0NLX0VSUik7CisKKwlyZXR1cm4gcDsKKwl9CisKK3N0YXRpYyBFUlJfU1RSSU5HX0RBVEEgKmludF9lcnJfc2V0X2l0ZW0oRVJSX1NUUklOR19EQVRBICpkKQorCXsKKwlFUlJfU1RSSU5HX0RBVEEgKnA7CisJTEhBU0hfT0YoRVJSX1NUUklOR19EQVRBKSAqaGFzaDsKKworCWVycl9mbnNfY2hlY2soKTsKKwloYXNoID0gRVJSRk4oZXJyX2dldCkoMSk7CisJaWYgKCFoYXNoKQorCQlyZXR1cm4gTlVMTDsKKworCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfRVJSKTsKKwlwID0gbGhfRVJSX1NUUklOR19EQVRBX2luc2VydChoYXNoLCBkKTsKKwlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfRVJSKTsKKworCXJldHVybiBwOworCX0KKworc3RhdGljIEVSUl9TVFJJTkdfREFUQSAqaW50X2Vycl9kZWxfaXRlbShFUlJfU1RSSU5HX0RBVEEgKmQpCisJeworCUVSUl9TVFJJTkdfREFUQSAqcDsKKwlMSEFTSF9PRihFUlJfU1RSSU5HX0RBVEEpICpoYXNoOworCisJZXJyX2Zuc19jaGVjaygpOworCWhhc2ggPSBFUlJGTihlcnJfZ2V0KSgwKTsKKwlpZiAoIWhhc2gpCisJCXJldHVybiBOVUxMOworCisJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19FUlIpOworCXAgPSBsaF9FUlJfU1RSSU5HX0RBVEFfZGVsZXRlKGhhc2gsIGQpOworCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19FUlIpOworCisJcmV0dXJuIHA7CisJfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBlcnJfc3RhdGVfaGFzaChjb25zdCBFUlJfU1RBVEUgKmEpCisJeworCXJldHVybiBDUllQVE9fVEhSRUFESURfaGFzaCgmYS0+dGlkKSAqIDEzOworCX0KK3N0YXRpYyBJTVBMRU1FTlRfTEhBU0hfSEFTSF9GTihlcnJfc3RhdGUsIEVSUl9TVEFURSkKKworc3RhdGljIGludCBlcnJfc3RhdGVfY21wKGNvbnN0IEVSUl9TVEFURSAqYSwgY29uc3QgRVJSX1NUQVRFICpiKQorCXsKKwlyZXR1cm4gQ1JZUFRPX1RIUkVBRElEX2NtcCgmYS0+dGlkLCAmYi0+dGlkKTsKKwl9CitzdGF0aWMgSU1QTEVNRU5UX0xIQVNIX0NPTVBfRk4oZXJyX3N0YXRlLCBFUlJfU1RBVEUpCisKK3N0YXRpYyBMSEFTSF9PRihFUlJfU1RBVEUpICppbnRfdGhyZWFkX2dldChpbnQgY3JlYXRlKQorCXsKKwlMSEFTSF9PRihFUlJfU1RBVEUpICpyZXQgPSBOVUxMOworCisJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19FUlIpOworCWlmICghaW50X3RocmVhZF9oYXNoICYmIGNyZWF0ZSkKKwkJeworCQlDUllQVE9fcHVzaF9pbmZvKCJpbnRfdGhyZWFkX2dldCAoZXJyLmMpIik7CisJCWludF90aHJlYWRfaGFzaCA9IGxoX0VSUl9TVEFURV9uZXcoKTsKKwkJQ1JZUFRPX3BvcF9pbmZvKCk7CisJCX0KKwlpZiAoaW50X3RocmVhZF9oYXNoKQorCQl7CisJCWludF90aHJlYWRfaGFzaF9yZWZlcmVuY2VzKys7CisJCXJldCA9IGludF90aHJlYWRfaGFzaDsKKwkJfQorCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19FUlIpOworCXJldHVybiByZXQ7CisJfQorCitzdGF0aWMgdm9pZCBpbnRfdGhyZWFkX3JlbGVhc2UoTEhBU0hfT0YoRVJSX1NUQVRFKSAqKmhhc2gpCisJeworCWludCBpOworCisJaWYgKGhhc2ggPT0gTlVMTCB8fCAqaGFzaCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlpID0gQ1JZUFRPX2FkZCgmaW50X3RocmVhZF9oYXNoX3JlZmVyZW5jZXMsIC0xLCBDUllQVE9fTE9DS19FUlIpOworCisjaWZkZWYgUkVGX1BSSU5UCisJZnByaW50ZihzdGRlcnIsIiU0ZDolc1xuIixpbnRfdGhyZWFkX2hhc2hfcmVmZXJlbmNlcywiRVJSIik7CisjZW5kaWYKKwlpZiAoaSA+IDApIHJldHVybjsKKyNpZmRlZiBSRUZfQ0hFQ0sKKwlpZiAoaSA8IDApCisJCXsKKwkJZnByaW50ZihzdGRlcnIsImludF90aHJlYWRfcmVsZWFzZSwgYmFkIHJlZmVyZW5jZSBjb3VudFxuIik7CisJCWFib3J0KCk7IC8qIG9rICovCisJCX0KKyNlbmRpZgorCSpoYXNoID0gTlVMTDsKKwl9CisKK3N0YXRpYyBFUlJfU1RBVEUgKmludF90aHJlYWRfZ2V0X2l0ZW0oY29uc3QgRVJSX1NUQVRFICpkKQorCXsKKwlFUlJfU1RBVEUgKnA7CisJTEhBU0hfT0YoRVJSX1NUQVRFKSAqaGFzaDsKKworCWVycl9mbnNfY2hlY2soKTsKKwloYXNoID0gRVJSRk4odGhyZWFkX2dldCkoMCk7CisJaWYgKCFoYXNoKQorCQlyZXR1cm4gTlVMTDsKKworCUNSWVBUT19yX2xvY2soQ1JZUFRPX0xPQ0tfRVJSKTsKKwlwID0gbGhfRVJSX1NUQVRFX3JldHJpZXZlKGhhc2gsIGQpOworCUNSWVBUT19yX3VubG9jayhDUllQVE9fTE9DS19FUlIpOworCisJRVJSRk4odGhyZWFkX3JlbGVhc2UpKCZoYXNoKTsKKwlyZXR1cm4gcDsKKwl9CisKK3N0YXRpYyBFUlJfU1RBVEUgKmludF90aHJlYWRfc2V0X2l0ZW0oRVJSX1NUQVRFICpkKQorCXsKKwlFUlJfU1RBVEUgKnA7CisJTEhBU0hfT0YoRVJSX1NUQVRFKSAqaGFzaDsKKworCWVycl9mbnNfY2hlY2soKTsKKwloYXNoID0gRVJSRk4odGhyZWFkX2dldCkoMSk7CisJaWYgKCFoYXNoKQorCQlyZXR1cm4gTlVMTDsKKworCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfRVJSKTsKKwlwID0gbGhfRVJSX1NUQVRFX2luc2VydChoYXNoLCBkKTsKKwlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfRVJSKTsKKworCUVSUkZOKHRocmVhZF9yZWxlYXNlKSgmaGFzaCk7CisJcmV0dXJuIHA7CisJfQorCitzdGF0aWMgdm9pZCBpbnRfdGhyZWFkX2RlbF9pdGVtKGNvbnN0IEVSUl9TVEFURSAqZCkKKwl7CisJRVJSX1NUQVRFICpwOworCUxIQVNIX09GKEVSUl9TVEFURSkgKmhhc2g7CisKKwllcnJfZm5zX2NoZWNrKCk7CisJaGFzaCA9IEVSUkZOKHRocmVhZF9nZXQpKDApOworCWlmICghaGFzaCkKKwkJcmV0dXJuOworCisJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19FUlIpOworCXAgPSBsaF9FUlJfU1RBVEVfZGVsZXRlKGhhc2gsIGQpOworCS8qIG1ha2Ugc3VyZSB3ZSBkb24ndCBsZWFrIG1lbW9yeSAqLworCWlmIChpbnRfdGhyZWFkX2hhc2hfcmVmZXJlbmNlcyA9PSAxCisJICAgICYmIGludF90aHJlYWRfaGFzaCAmJiBsaF9FUlJfU1RBVEVfbnVtX2l0ZW1zKGludF90aHJlYWRfaGFzaCkgPT0gMCkKKwkJeworCQlsaF9FUlJfU1RBVEVfZnJlZShpbnRfdGhyZWFkX2hhc2gpOworCQlpbnRfdGhyZWFkX2hhc2ggPSBOVUxMOworCQl9CisJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX0VSUik7CisKKwlFUlJGTih0aHJlYWRfcmVsZWFzZSkoJmhhc2gpOworCWlmIChwKQorCQlFUlJfU1RBVEVfZnJlZShwKTsKKwl9CisKK3N0YXRpYyBpbnQgaW50X2Vycl9nZXRfbmV4dF9saWIodm9pZCkKKwl7CisJaW50IHJldDsKKworCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfRVJSKTsKKwlyZXQgPSBpbnRfZXJyX2xpYnJhcnlfbnVtYmVyKys7CisJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX0VSUik7CisKKwlyZXR1cm4gcmV0OworCX0KKworCisjaWZuZGVmIE9QRU5TU0xfTk9fRVJSCisjZGVmaW5lIE5VTV9TWVNfU1RSX1JFQVNPTlMgMTI3CisjZGVmaW5lIExFTl9TWVNfU1RSX1JFQVNPTiAzMgorCitzdGF0aWMgRVJSX1NUUklOR19EQVRBIFNZU19zdHJfcmVhc29uc1tOVU1fU1lTX1NUUl9SRUFTT05TICsgMV07CisvKiBTWVNfc3RyX3JlYXNvbnMgaXMgZmlsbGVkIHdpdGggY29waWVzIG9mIHN0cmVycm9yKCkgcmVzdWx0cyBhdAorICogaW5pdGlhbGl6YXRpb24uCisgKiAnZXJybm8nIHZhbHVlcyB1cCB0byAxMjcgc2hvdWxkIGNvdmVyIGFsbCB1c3VhbCBlcnJvcnMsCisgKiBvdGhlcnMgd2lsbCBiZSBkaXNwbGF5ZWQgbnVtZXJpY2FsbHkgYnkgRVJSX2Vycm9yX3N0cmluZy4KKyAqIEl0IGlzIGNydWNpYWwgdGhhdCB3ZSBoYXZlIHNvbWV0aGluZyBmb3IgZWFjaCByZWFzb24gY29kZQorICogdGhhdCBvY2N1cnMgaW4gRVJSX3N0cl9yZWFzb25zLCBvciBib2d1cyByZWFzb24gc3RyaW5ncworICogd2lsbCBiZSByZXR1cm5lZCBmb3IgU1lTZXJyKCksIHdoaWNoIGFsd2F5cyBnZXRzIGFuIGVycm5vCisgKiB2YWx1ZSBhbmQgbmV2ZXIgb25lIG9mIHRob3NlICdzdGFuZGFyZCcgcmVhc29uIGNvZGVzLiAqLworCitzdGF0aWMgdm9pZCBidWlsZF9TWVNfc3RyX3JlYXNvbnModm9pZCkKKwl7CisJLyogT1BFTlNTTF9tYWxsb2MgY2Fubm90IGJlIHVzZWQgaGVyZSwgdXNlIHN0YXRpYyBzdG9yYWdlIGluc3RlYWQgKi8KKwlzdGF0aWMgY2hhciBzdHJlcnJvcl90YWJbTlVNX1NZU19TVFJfUkVBU09OU11bTEVOX1NZU19TVFJfUkVBU09OXTsKKwlpbnQgaTsKKwlzdGF0aWMgaW50IGluaXQgPSAxOworCisJQ1JZUFRPX3JfbG9jayhDUllQVE9fTE9DS19FUlIpOworCWlmICghaW5pdCkKKwkJeworCQlDUllQVE9fcl91bmxvY2soQ1JZUFRPX0xPQ0tfRVJSKTsKKwkJcmV0dXJuOworCQl9CisJCisJQ1JZUFRPX3JfdW5sb2NrKENSWVBUT19MT0NLX0VSUik7CisJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19FUlIpOworCWlmICghaW5pdCkKKwkJeworCQlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfRVJSKTsKKwkJcmV0dXJuOworCQl9CisKKwlmb3IgKGkgPSAxOyBpIDw9IE5VTV9TWVNfU1RSX1JFQVNPTlM7IGkrKykKKwkJeworCQlFUlJfU1RSSU5HX0RBVEEgKnN0ciA9ICZTWVNfc3RyX3JlYXNvbnNbaSAtIDFdOworCisJCXN0ci0+ZXJyb3IgPSAodW5zaWduZWQgbG9uZylpOworCQlpZiAoc3RyLT5zdHJpbmcgPT0gTlVMTCkKKwkJCXsKKwkJCWNoYXIgKCpkZXN0KVtMRU5fU1lTX1NUUl9SRUFTT05dID0gJihzdHJlcnJvcl90YWJbaSAtIDFdKTsKKwkJCWNoYXIgKnNyYyA9IHN0cmVycm9yKGkpOworCQkJaWYgKHNyYyAhPSBOVUxMKQorCQkJCXsKKwkJCQlzdHJuY3B5KCpkZXN0LCBzcmMsIHNpemVvZiAqZGVzdCk7CisJCQkJKCpkZXN0KVtzaXplb2YgKmRlc3QgLSAxXSA9ICdcMCc7CisJCQkJc3RyLT5zdHJpbmcgPSAqZGVzdDsKKwkJCQl9CisJCQl9CisJCWlmIChzdHItPnN0cmluZyA9PSBOVUxMKQorCQkJc3RyLT5zdHJpbmcgPSAidW5rbm93biI7CisJCX0KKworCS8qIE5vdyB3ZSBzdGlsbCBoYXZlIFNZU19zdHJfcmVhc29uc1tOVU1fU1lTX1NUUl9SRUFTT05TXSA9IHswLCBOVUxMfSwKKwkgKiBhcyByZXF1aXJlZCBieSBFUlJfbG9hZF9zdHJpbmdzLiAqLworCisJaW5pdCA9IDA7CisJCisJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX0VSUik7CisJfQorI2VuZGlmCiAKICNkZWZpbmUgZXJyX2NsZWFyX2RhdGEocCxpKSBcCiAJZG8geyBcCkBAIC0xNDMsNiArNjQxLDY4IEBACiAJKHApLT5lcnJfbGluZVtpXT0gLTE7IFwKIAl9IHdoaWxlKDApCiAKK3N0YXRpYyB2b2lkIEVSUl9TVEFURV9mcmVlKEVSUl9TVEFURSAqcykKKwl7CisJaW50IGk7CisKKwlpZiAocyA9PSBOVUxMKQorCSAgICByZXR1cm47CisKKwlmb3IgKGk9MDsgaTxFUlJfTlVNX0VSUk9SUzsgaSsrKQorCQl7CisJCWVycl9jbGVhcl9kYXRhKHMsaSk7CisJCX0KKwlPUEVOU1NMX2ZyZWUocyk7CisJfQorCit2b2lkIEVSUl9sb2FkX0VSUl9zdHJpbmdzKHZvaWQpCisJeworCWVycl9mbnNfY2hlY2soKTsKKyNpZm5kZWYgT1BFTlNTTF9OT19FUlIKKwllcnJfbG9hZF9zdHJpbmdzKDAsRVJSX3N0cl9saWJyYXJpZXMpOworCWVycl9sb2FkX3N0cmluZ3MoMCxFUlJfc3RyX3JlYXNvbnMpOworCWVycl9sb2FkX3N0cmluZ3MoRVJSX0xJQl9TWVMsRVJSX3N0cl9mdW5jdHMpOworCWJ1aWxkX1NZU19zdHJfcmVhc29ucygpOworCWVycl9sb2FkX3N0cmluZ3MoRVJSX0xJQl9TWVMsU1lTX3N0cl9yZWFzb25zKTsKKyNlbmRpZgorCX0KKworc3RhdGljIHZvaWQgZXJyX2xvYWRfc3RyaW5ncyhpbnQgbGliLCBFUlJfU1RSSU5HX0RBVEEgKnN0cikKKwl7CisJd2hpbGUgKHN0ci0+ZXJyb3IpCisJCXsKKwkJaWYgKGxpYikKKwkJCXN0ci0+ZXJyb3J8PUVSUl9QQUNLKGxpYiwwLDApOworCQlFUlJGTihlcnJfc2V0X2l0ZW0pKHN0cik7CisJCXN0cisrOworCQl9CisJfQorCit2b2lkIEVSUl9sb2FkX3N0cmluZ3MoaW50IGxpYiwgRVJSX1NUUklOR19EQVRBICpzdHIpCisJeworCUVSUl9sb2FkX0VSUl9zdHJpbmdzKCk7CisJZXJyX2xvYWRfc3RyaW5ncyhsaWIsIHN0cik7CisJfQorCit2b2lkIEVSUl91bmxvYWRfc3RyaW5ncyhpbnQgbGliLCBFUlJfU1RSSU5HX0RBVEEgKnN0cikKKwl7CisJd2hpbGUgKHN0ci0+ZXJyb3IpCisJCXsKKwkJaWYgKGxpYikKKwkJCXN0ci0+ZXJyb3J8PUVSUl9QQUNLKGxpYiwwLDApOworCQlFUlJGTihlcnJfZGVsX2l0ZW0pKHN0cik7CisJCXN0cisrOworCQl9CisJfQorCit2b2lkIEVSUl9mcmVlX3N0cmluZ3Modm9pZCkKKwl7CisJZXJyX2Zuc19jaGVjaygpOworCUVSUkZOKGVycl9kZWwpKCk7CisJfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKIHZvaWQgRVJSX3B1dF9lcnJvcihpbnQgbGliLCBpbnQgZnVuYywgaW50IHJlYXNvbiwgY29uc3QgY2hhciAqZmlsZSwKIAkgICAgIGludCBsaW5lKQogCXsKQEAgLTI5Nyw2ICs4NTcsMTk2IEBACiAJcmV0dXJuIHJldDsKIAl9CiAKK3ZvaWQgRVJSX2Vycm9yX3N0cmluZ19uKHVuc2lnbmVkIGxvbmcgZSwgY2hhciAqYnVmLCBzaXplX3QgbGVuKQorCXsKKwljaGFyIGxzYnVmWzY0XSwgZnNidWZbNjRdLCByc2J1Zls2NF07CisJY29uc3QgY2hhciAqbHMsKmZzLCpyczsKKwl1bnNpZ25lZCBsb25nIGwsZixyOworCisJbD1FUlJfR0VUX0xJQihlKTsKKwlmPUVSUl9HRVRfRlVOQyhlKTsKKwlyPUVSUl9HRVRfUkVBU09OKGUpOworCisJbHM9RVJSX2xpYl9lcnJvcl9zdHJpbmcoZSk7CisJZnM9RVJSX2Z1bmNfZXJyb3Jfc3RyaW5nKGUpOworCXJzPUVSUl9yZWFzb25fZXJyb3Jfc3RyaW5nKGUpOworCisJaWYgKGxzID09IE5VTEwpIAorCQlCSU9fc25wcmludGYobHNidWYsIHNpemVvZihsc2J1ZiksICJsaWIoJWx1KSIsIGwpOworCWlmIChmcyA9PSBOVUxMKQorCQlCSU9fc25wcmludGYoZnNidWYsIHNpemVvZihmc2J1ZiksICJmdW5jKCVsdSkiLCBmKTsKKwlpZiAocnMgPT0gTlVMTCkKKwkJQklPX3NucHJpbnRmKHJzYnVmLCBzaXplb2YocnNidWYpLCAicmVhc29uKCVsdSkiLCByKTsKKworCUJJT19zbnByaW50ZihidWYsIGxlbiwiZXJyb3I6JTA4bFg6JXM6JXM6JXMiLCBlLCBscz9sczpsc2J1ZiwgCisJCWZzP2ZzOmZzYnVmLCBycz9yczpyc2J1Zik7CisJaWYgKHN0cmxlbihidWYpID09IGxlbi0xKQorCQl7CisJCS8qIG91dHB1dCBtYXkgYmUgdHJ1bmNhdGVkOyBtYWtlIHN1cmUgd2UgYWx3YXlzIGhhdmUgNSAKKwkJICogY29sb24tc2VwYXJhdGVkIGZpZWxkcywgaS5lLiA0IGNvbG9ucyAuLi4gKi8KKyNkZWZpbmUgTlVNX0NPTE9OUyA0CisJCWlmIChsZW4gPiBOVU1fQ09MT05TKSAvKiAuLi4gaWYgcG9zc2libGUgKi8KKwkJCXsKKwkJCWludCBpOworCQkJY2hhciAqcyA9IGJ1ZjsKKwkJCQorCQkJZm9yIChpID0gMDsgaSA8IE5VTV9DT0xPTlM7IGkrKykKKwkJCQl7CisJCQkJY2hhciAqY29sb24gPSBzdHJjaHIocywgJzonKTsKKwkJCQlpZiAoY29sb24gPT0gTlVMTCB8fCBjb2xvbiA+ICZidWZbbGVuLTFdIC0gTlVNX0NPTE9OUyArIGkpCisJCQkJCXsKKwkJCQkJLyogc2V0IGNvbG9uIG5vLiBpIGF0IGxhc3QgcG9zc2libGUgcG9zaXRpb24KKwkJCQkJICogKGJ1ZltsZW4tMV0gaXMgdGhlIHRlcm1pbmF0aW5nIDApKi8KKwkJCQkJY29sb24gPSAmYnVmW2xlbi0xXSAtIE5VTV9DT0xPTlMgKyBpOworCQkJCQkqY29sb24gPSAnOic7CisJCQkJCX0KKwkJCQlzID0gY29sb24gKyAxOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworLyogQkFEIGZvciBtdWx0aS10aHJlYWRpbmc6IHVzZXMgYSBsb2NhbCBidWZmZXIgaWYgcmV0ID09IE5VTEwgKi8KKy8qIEVSUl9lcnJvcl9zdHJpbmdfbiBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIGZvciByZXQgIT0gTlVMTAorICogYXMgRVJSX2Vycm9yX3N0cmluZyBjYW5ub3Qga25vdyBob3cgbGFyZ2UgdGhlIGJ1ZmZlciBpcyAqLworY2hhciAqRVJSX2Vycm9yX3N0cmluZyh1bnNpZ25lZCBsb25nIGUsIGNoYXIgKnJldCkKKwl7CisJc3RhdGljIGNoYXIgYnVmWzI1Nl07CisKKwlpZiAocmV0ID09IE5VTEwpIHJldD1idWY7CisJRVJSX2Vycm9yX3N0cmluZ19uKGUsIHJldCwgMjU2KTsKKworCXJldHVybiByZXQ7CisJfQorCitMSEFTSF9PRihFUlJfU1RSSU5HX0RBVEEpICpFUlJfZ2V0X3N0cmluZ190YWJsZSh2b2lkKQorCXsKKwllcnJfZm5zX2NoZWNrKCk7CisJcmV0dXJuIEVSUkZOKGVycl9nZXQpKDApOworCX0KKworTEhBU0hfT0YoRVJSX1NUQVRFKSAqRVJSX2dldF9lcnJfc3RhdGVfdGFibGUodm9pZCkKKwl7CisJZXJyX2Zuc19jaGVjaygpOworCXJldHVybiBFUlJGTih0aHJlYWRfZ2V0KSgwKTsKKwl9CisKK3ZvaWQgRVJSX3JlbGVhc2VfZXJyX3N0YXRlX3RhYmxlKExIQVNIX09GKEVSUl9TVEFURSkgKipoYXNoKQorCXsKKwllcnJfZm5zX2NoZWNrKCk7CisJRVJSRk4odGhyZWFkX3JlbGVhc2UpKGhhc2gpOworCX0KKworY29uc3QgY2hhciAqRVJSX2xpYl9lcnJvcl9zdHJpbmcodW5zaWduZWQgbG9uZyBlKQorCXsKKwlFUlJfU1RSSU5HX0RBVEEgZCwqcDsKKwl1bnNpZ25lZCBsb25nIGw7CisKKwllcnJfZm5zX2NoZWNrKCk7CisJbD1FUlJfR0VUX0xJQihlKTsKKwlkLmVycm9yPUVSUl9QQUNLKGwsMCwwKTsKKwlwPUVSUkZOKGVycl9nZXRfaXRlbSkoJmQpOworCXJldHVybigocCA9PSBOVUxMKT9OVUxMOnAtPnN0cmluZyk7CisJfQorCitjb25zdCBjaGFyICpFUlJfZnVuY19lcnJvcl9zdHJpbmcodW5zaWduZWQgbG9uZyBlKQorCXsKKwlFUlJfU1RSSU5HX0RBVEEgZCwqcDsKKwl1bnNpZ25lZCBsb25nIGwsZjsKKworCWVycl9mbnNfY2hlY2soKTsKKwlsPUVSUl9HRVRfTElCKGUpOworCWY9RVJSX0dFVF9GVU5DKGUpOworCWQuZXJyb3I9RVJSX1BBQ0sobCxmLDApOworCXA9RVJSRk4oZXJyX2dldF9pdGVtKSgmZCk7CisJcmV0dXJuKChwID09IE5VTEwpP05VTEw6cC0+c3RyaW5nKTsKKwl9CisKK2NvbnN0IGNoYXIgKkVSUl9yZWFzb25fZXJyb3Jfc3RyaW5nKHVuc2lnbmVkIGxvbmcgZSkKKwl7CisJRVJSX1NUUklOR19EQVRBIGQsKnA9TlVMTDsKKwl1bnNpZ25lZCBsb25nIGwscjsKKworCWVycl9mbnNfY2hlY2soKTsKKwlsPUVSUl9HRVRfTElCKGUpOworCXI9RVJSX0dFVF9SRUFTT04oZSk7CisJZC5lcnJvcj1FUlJfUEFDSyhsLDAscik7CisJcD1FUlJGTihlcnJfZ2V0X2l0ZW0pKCZkKTsKKwlpZiAoIXApCisJCXsKKwkJZC5lcnJvcj1FUlJfUEFDSygwLDAscik7CisJCXA9RVJSRk4oZXJyX2dldF9pdGVtKSgmZCk7CisJCX0KKwlyZXR1cm4oKHAgPT0gTlVMTCk/TlVMTDpwLT5zdHJpbmcpOworCX0KKwordm9pZCBFUlJfcmVtb3ZlX3RocmVhZF9zdGF0ZShjb25zdCBDUllQVE9fVEhSRUFESUQgKmlkKQorCXsKKwlFUlJfU1RBVEUgdG1wOworCisJaWYgKGlkKQorCQlDUllQVE9fVEhSRUFESURfY3B5KCZ0bXAudGlkLCBpZCk7CisJZWxzZQorCQlDUllQVE9fVEhSRUFESURfY3VycmVudCgmdG1wLnRpZCk7CisJZXJyX2Zuc19jaGVjaygpOworCS8qIHRocmVhZF9kZWxfaXRlbSBhdXRvbWF0aWNhbGx5IGRlc3Ryb3lzIHRoZSBMSEFTSCBpZiB0aGUgbnVtYmVyIG9mCisJICogaXRlbXMgcmVhY2hlcyB6ZXJvLiAqLworCUVSUkZOKHRocmVhZF9kZWxfaXRlbSkoJnRtcCk7CisJfQorCisjaWZuZGVmIE9QRU5TU0xfTk9fREVQUkVDQVRFRAordm9pZCBFUlJfcmVtb3ZlX3N0YXRlKHVuc2lnbmVkIGxvbmcgcGlkKQorCXsKKwlFUlJfcmVtb3ZlX3RocmVhZF9zdGF0ZShOVUxMKTsKKwl9CisjZW5kaWYKKworRVJSX1NUQVRFICpFUlJfZ2V0X3N0YXRlKHZvaWQpCisJeworCXN0YXRpYyBFUlJfU1RBVEUgZmFsbGJhY2s7CisJRVJSX1NUQVRFICpyZXQsdG1wLCp0bXBwPU5VTEw7CisJaW50IGk7CisJQ1JZUFRPX1RIUkVBRElEIHRpZDsKKworCWVycl9mbnNfY2hlY2soKTsKKwlDUllQVE9fVEhSRUFESURfY3VycmVudCgmdGlkKTsKKwlDUllQVE9fVEhSRUFESURfY3B5KCZ0bXAudGlkLCAmdGlkKTsKKwlyZXQ9RVJSRk4odGhyZWFkX2dldF9pdGVtKSgmdG1wKTsKKworCS8qIHJldCA9PSB0aGUgZXJyb3Igc3RhdGUsIGlmIE5VTEwsIG1ha2UgYSBuZXcgb25lICovCisJaWYgKHJldCA9PSBOVUxMKQorCQl7CisJCXJldD0oRVJSX1NUQVRFICopT1BFTlNTTF9tYWxsb2Moc2l6ZW9mKEVSUl9TVEFURSkpOworCQlpZiAocmV0ID09IE5VTEwpIHJldHVybigmZmFsbGJhY2spOworCQlDUllQVE9fVEhSRUFESURfY3B5KCZyZXQtPnRpZCwgJnRpZCk7CisJCXJldC0+dG9wPTA7CisJCXJldC0+Ym90dG9tPTA7CisJCWZvciAoaT0wOyBpPEVSUl9OVU1fRVJST1JTOyBpKyspCisJCQl7CisJCQlyZXQtPmVycl9kYXRhW2ldPU5VTEw7CisJCQlyZXQtPmVycl9kYXRhX2ZsYWdzW2ldPTA7CisJCQl9CisJCXRtcHAgPSBFUlJGTih0aHJlYWRfc2V0X2l0ZW0pKHJldCk7CisJCS8qIFRvIGNoZWNrIGlmIGluc2VydGlvbiBmYWlsZWQsIGRvIGEgZ2V0LiAqLworCQlpZiAoRVJSRk4odGhyZWFkX2dldF9pdGVtKShyZXQpICE9IHJldCkKKwkJCXsKKwkJCUVSUl9TVEFURV9mcmVlKHJldCk7IC8qIGNvdWxkIG5vdCBpbnNlcnQgaXQgKi8KKwkJCXJldHVybigmZmFsbGJhY2spOworCQkJfQorCQkvKiBJZiBhIHJhY2Ugb2NjdXJlZCBpbiB0aGlzIGZ1bmN0aW9uIGFuZCB3ZSBjYW1lIHNlY29uZCwgdG1wcAorCQkgKiBpcyB0aGUgZmlyc3Qgb25lIHRoYXQgd2UganVzdCByZXBsYWNlZC4gKi8KKwkJaWYgKHRtcHApCisJCQlFUlJfU1RBVEVfZnJlZSh0bXBwKTsKKwkJfQorCXJldHVybiByZXQ7CisJfQorCitpbnQgRVJSX2dldF9uZXh0X2Vycm9yX2xpYnJhcnkodm9pZCkKKwl7CisJZXJyX2Zuc19jaGVjaygpOworCXJldHVybiBFUlJGTihnZXRfbmV4dF9saWIpKCk7CisJfQorCiB2b2lkIEVSUl9zZXRfZXJyb3JfZGF0YShjaGFyICpkYXRhLCBpbnQgZmxhZ3MpCiAJewogCUVSUl9TVEFURSAqZXM7CkBAIC0zODMsMzQgKzExMzMsMyBAQAogCWVzLT5lcnJfZmxhZ3NbZXMtPnRvcF0mPX5FUlJfRkxBR19NQVJLOwogCXJldHVybiAxOwogCX0KLQotI2lmZGVmIE9QRU5TU0xfRklQUwotCi1zdGF0aWMgRVJSX1NUQVRFICpmZ2V0X3N0YXRlKHZvaWQpCi0JewotCXN0YXRpYyBFUlJfU1RBVEUgZnN0YXRlOwotCXJldHVybiAmZnN0YXRlOwotCX0KLQotRVJSX1NUQVRFICooKmdldF9zdGF0ZV9mdW5jKSh2b2lkKSA9IGZnZXRfc3RhdGU7Ci12b2lkICgqcmVtb3ZlX3N0YXRlX2Z1bmMpKHVuc2lnbmVkIGxvbmcgcGlkKTsKLQotRVJSX1NUQVRFICpFUlJfZ2V0X3N0YXRlKHZvaWQpCi0JewotCXJldHVybiBnZXRfc3RhdGVfZnVuYygpOwotCX0KLQotdm9pZCBpbnRfRVJSX3NldF9zdGF0ZV9mdW5jKEVSUl9TVEFURSAqKCpnZXRfZnVuYykodm9pZCksCi0JCQkJdm9pZCAoKnJlbW92ZV9mdW5jKSh1bnNpZ25lZCBsb25nIHBpZCkpCi0JewotCWdldF9zdGF0ZV9mdW5jID0gZ2V0X2Z1bmM7Ci0JcmVtb3ZlX3N0YXRlX2Z1bmMgPSByZW1vdmVfZnVuYzsKLQl9Ci0KLXZvaWQgRVJSX3JlbW92ZV9zdGF0ZSh1bnNpZ25lZCBsb25nIHBpZCkKLQl7Ci0JaWYgKHJlbW92ZV9zdGF0ZV9mdW5jKQotCQlyZW1vdmVfc3RhdGVfZnVuYyhwaWQpOwotCX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9jcnlwdG8vZXJyL2Vyci5oIGIvY3J5cHRvL2Vyci9lcnIuaAppbmRleCBkY2FjNDE1Li5iOWY4YzE2IDEwMDY0NAotLS0gYS9jcnlwdG8vZXJyL2Vyci5oCisrKyBiL2NyeXB0by9lcnIvZXJyLmgKQEAgLTU1LDYgKzU1LDU5IEBACiAgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCiAgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQogICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisgKgorICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorICoKKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorICoKKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKyAqICAgIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCisgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAqCisgKi8KIAogI2lmbmRlZiBIRUFERVJfRVJSX0gKICNkZWZpbmUgSEVBREVSX0VSUl9ICkBAIC05NCw3ICsxNDcsNyBAQAogI2RlZmluZSBFUlJfTlVNX0VSUk9SUwkxNgogdHlwZWRlZiBzdHJ1Y3QgZXJyX3N0YXRlX3N0CiAJewotCXVuc2lnbmVkIGxvbmcgcGlkOworCUNSWVBUT19USFJFQURJRCB0aWQ7CiAJaW50IGVycl9mbGFnc1tFUlJfTlVNX0VSUk9SU107CiAJdW5zaWduZWQgbG9uZyBlcnJfYnVmZmVyW0VSUl9OVU1fRVJST1JTXTsKIAljaGFyICplcnJfZGF0YVtFUlJfTlVNX0VSUk9SU107CkBAIC0xNDIsNyArMTk1LDkgQEAKICNkZWZpbmUgRVJSX0xJQl9TVE9SRSAgICAgICAgICAgNDQKICNkZWZpbmUgRVJSX0xJQl9GSVBTCQk0NQogI2RlZmluZSBFUlJfTElCX0NNUwkJNDYKLSNkZWZpbmUgRVJSX0xJQl9KUEFLRQkJNDcKKyNkZWZpbmUgRVJSX0xJQl9UUwkJNDcKKyNkZWZpbmUgRVJSX0xJQl9ITUFDCQk0OAorI2RlZmluZSBFUlJfTElCX0pQQUtFCQk0OQogCiAjZGVmaW5lIEVSUl9MSUJfVVNFUgkJMTI4CiAKQEAgLTE3Niw2ICsyMzEsOCBAQAogI2RlZmluZSBTVE9SRWVycihmLHIpIEVSUl9QVVRfZXJyb3IoRVJSX0xJQl9TVE9SRSwoZiksKHIpLF9fRklMRV9fLF9fTElORV9fKQogI2RlZmluZSBGSVBTZXJyKGYscikgRVJSX1BVVF9lcnJvcihFUlJfTElCX0ZJUFMsKGYpLChyKSxfX0ZJTEVfXyxfX0xJTkVfXykKICNkZWZpbmUgQ01TZXJyKGYscikgRVJSX1BVVF9lcnJvcihFUlJfTElCX0NNUywoZiksKHIpLF9fRklMRV9fLF9fTElORV9fKQorI2RlZmluZSBUU2VycihmLHIpIEVSUl9QVVRfZXJyb3IoRVJSX0xJQl9UUywoZiksKHIpLF9fRklMRV9fLF9fTElORV9fKQorI2RlZmluZSBITUFDZXJyKGYscikgRVJSX1BVVF9lcnJvcihFUlJfTElCX0hNQUMsKGYpLChyKSxfX0ZJTEVfXyxfX0xJTkVfXykKICNkZWZpbmUgSlBBS0VlcnIoZixyKSBFUlJfUFVUX2Vycm9yKEVSUl9MSUJfSlBBS0UsKGYpLChyKSxfX0ZJTEVfXyxfX0xJTkVfXykKIAogLyogQm9ybGFuZCBDIHNlZW1zIHRvbyBzdHVwaWQgdG8gYmUgYWJsZSB0byBzaGlmdCBhbmQgZG8gbG9uZ3MgaW4KQEAgLTIzMiw2ICsyODksNyBAQAogI2RlZmluZSBFUlJfUl9FQ0RTQV9MSUIgRVJSX0xJQl9FQ0RTQQkgLyogNDIgKi8KICNkZWZpbmUgRVJSX1JfRUNESF9MSUIgIEVSUl9MSUJfRUNESAkgLyogNDMgKi8KICNkZWZpbmUgRVJSX1JfU1RPUkVfTElCIEVSUl9MSUJfU1RPUkUgICAgLyogNDQgKi8KKyNkZWZpbmUgRVJSX1JfVFNfTElCCUVSUl9MSUJfVFMgICAgICAgLyogNDUgKi8KIAogI2RlZmluZSBFUlJfUl9ORVNURURfQVNOMV9FUlJPUgkJCTU4CiAjZGVmaW5lIEVSUl9SX0JBRF9BU04xX09CSkVDVF9IRUFERVIJCTU5CkBAIC0yOTQsMTMgKzM1MiwxNiBAQAogdm9pZCBFUlJfbG9hZF9jcnlwdG9fc3RyaW5ncyh2b2lkKTsKIHZvaWQgRVJSX2ZyZWVfc3RyaW5ncyh2b2lkKTsKIAordm9pZCBFUlJfcmVtb3ZlX3RocmVhZF9zdGF0ZShjb25zdCBDUllQVE9fVEhSRUFESUQgKnRpZCk7CisjaWZuZGVmIE9QRU5TU0xfTk9fREVQUkVDQVRFRAogdm9pZCBFUlJfcmVtb3ZlX3N0YXRlKHVuc2lnbmVkIGxvbmcgcGlkKTsgLyogaWYgemVybyB3ZSBsb29rIGl0IHVwICovCisjZW5kaWYKIEVSUl9TVEFURSAqRVJSX2dldF9zdGF0ZSh2b2lkKTsKIAogI2lmbmRlZiBPUEVOU1NMX05PX0xIQVNICi1MSEFTSCAqRVJSX2dldF9zdHJpbmdfdGFibGUodm9pZCk7Ci1MSEFTSCAqRVJSX2dldF9lcnJfc3RhdGVfdGFibGUodm9pZCk7Ci12b2lkIEVSUl9yZWxlYXNlX2Vycl9zdGF0ZV90YWJsZShMSEFTSCAqKmhhc2gpOworTEhBU0hfT0YoRVJSX1NUUklOR19EQVRBKSAqRVJSX2dldF9zdHJpbmdfdGFibGUodm9pZCk7CitMSEFTSF9PRihFUlJfU1RBVEUpICpFUlJfZ2V0X2Vycl9zdGF0ZV90YWJsZSh2b2lkKTsKK3ZvaWQgRVJSX3JlbGVhc2VfZXJyX3N0YXRlX3RhYmxlKExIQVNIX09GKEVSUl9TVEFURSkgKipoYXNoKTsKICNlbmRpZgogCiBpbnQgRVJSX2dldF9uZXh0X2Vycm9yX2xpYnJhcnkodm9pZCk7CkBAIC0zMDgsMTIgKzM2OSw2IEBACiBpbnQgRVJSX3NldF9tYXJrKHZvaWQpOwogaW50IEVSUl9wb3BfdG9fbWFyayh2b2lkKTsKIAotI2lmZGVmIE9QRU5TU0xfRklQUwotdm9pZCBpbnRfRVJSX3NldF9zdGF0ZV9mdW5jKEVSUl9TVEFURSAqKCpnZXRfZnVuYykodm9pZCksCi0JCQkJdm9pZCAoKnJlbW92ZV9mdW5jKSh1bnNpZ25lZCBsb25nIHBpZCkpOwotdm9pZCBpbnRfRVJSX2xpYl9pbml0KHZvaWQpOwotI2VuZGlmCi0KIC8qIEFscmVhZHkgZGVmaW5lZCBpbiBvc3NsX3R5cC5oICovCiAvKiB0eXBlZGVmIHN0cnVjdCBzdF9FUlJfRk5TIEVSUl9GTlM7ICovCiAvKiBBbiBhcHBsaWNhdGlvbiBjYW4gdXNlIHRoaXMgZnVuY3Rpb24gYW5kIHByb3ZpZGUgdGhlIHJldHVybiB2YWx1ZSB0byBsb2FkZWQKZGlmZiAtLWdpdCBhL2NyeXB0by9lcnIvZXJyX2FsbC5jIGIvY3J5cHRvL2Vyci9lcnJfYWxsLmMKaW5kZXggMzk3OTZmNy4uZmMwNDllOCAxMDA2NDQKLS0tIGEvY3J5cHRvL2Vyci9lcnJfYWxsLmMKKysrIGIvY3J5cHRvL2Vyci9lcnJfYWxsLmMKQEAgLTY0LDYgKzY0LDcgQEAKICNlbmRpZgogI2luY2x1ZGUgPG9wZW5zc2wvYnVmZmVyLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2NvbXAuaD4KICNpZm5kZWYgT1BFTlNTTF9OT19SU0EKICNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgogI2VuZGlmCkBAIC05NCwxMCArOTUsNyBAQAogI2luY2x1ZGUgPG9wZW5zc2wvdWkuaD4KICNpbmNsdWRlIDxvcGVuc3NsL29jc3AuaD4KICNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotI2lmZGVmIE9QRU5TU0xfRklQUwotI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotI2VuZGlmCi0KKyNpbmNsdWRlIDxvcGVuc3NsL3RzLmg+CiAjaWZuZGVmIE9QRU5TU0xfTk9fQ01TCiAjaW5jbHVkZSA8b3BlbnNzbC9jbXMuaD4KICNlbmRpZgpAQCAtMTI4LDYgKzEyNiw3IEBACiAJRVJSX2xvYWRfQVNOMV9zdHJpbmdzKCk7CiAJRVJSX2xvYWRfQ09ORl9zdHJpbmdzKCk7CiAJRVJSX2xvYWRfQ1JZUFRPX3N0cmluZ3MoKTsKKwlFUlJfbG9hZF9DT01QX3N0cmluZ3MoKTsKICNpZm5kZWYgT1BFTlNTTF9OT19FQwogCUVSUl9sb2FkX0VDX3N0cmluZ3MoKTsKICNlbmRpZgpAQCAtMTQ0LDE0ICsxNDMsMTIgQEAKIAlFUlJfbG9hZF9QS0NTMTJfc3RyaW5ncygpOwogCUVSUl9sb2FkX1JBTkRfc3RyaW5ncygpOwogCUVSUl9sb2FkX0RTT19zdHJpbmdzKCk7CisJRVJSX2xvYWRfVFNfc3RyaW5ncygpOwogI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQogCUVSUl9sb2FkX0VOR0lORV9zdHJpbmdzKCk7CiAjZW5kaWYKIAlFUlJfbG9hZF9PQ1NQX3N0cmluZ3MoKTsKIAlFUlJfbG9hZF9VSV9zdHJpbmdzKCk7Ci0jaWZkZWYgT1BFTlNTTF9GSVBTCi0JRVJSX2xvYWRfRklQU19zdHJpbmdzKCk7Ci0jZW5kaWYKICNpZm5kZWYgT1BFTlNTTF9OT19DTVMKIAlFUlJfbG9hZF9DTVNfc3RyaW5ncygpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9jcnlwdG8vZXJyL2Vycl9iaW8uYyBiL2NyeXB0by9lcnIvZXJyX2Jpby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDJmODA0Li4wMDAwMDAwCi0tLSBhL2NyeXB0by9lcnIvZXJyX2Jpby5jCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotLyogY3J5cHRvL2Vyci9lcnJfcHJuLmMgKi8KLS8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KLSAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KLSAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KLSAqIAotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCi0gKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCi0gKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KLSAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKLSAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgotICogCi0gKiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgotICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgotICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgotICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KLSAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgotICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0gKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQotICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKLSAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQotICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCi0gKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKLSAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6Ci0gKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKiAKLSAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCi0gKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKLSAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKLSAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCi0gKi8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSAiY3J5cHRsaWIuaCIKLSNpbmNsdWRlIDxvcGVuc3NsL2xoYXNoLmg+Ci0jaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSNpbmNsdWRlIDxvcGVuc3NsL2J1ZmZlci5oPgotI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0KLXN0YXRpYyBpbnQgcHJpbnRfYmlvKGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IGxlbiwgdm9pZCAqYnApCi0JewotCXJldHVybiBCSU9fd3JpdGUoKEJJTyAqKWJwLCBzdHIsIGxlbik7Ci0JfQotdm9pZCBFUlJfcHJpbnRfZXJyb3JzKEJJTyAqYnApCi0JewotCUVSUl9wcmludF9lcnJvcnNfY2IocHJpbnRfYmlvLCBicCk7Ci0JfQotCi0JCmRpZmYgLS1naXQgYS9jcnlwdG8vZXJyL2Vycl9kZWYuYyBiL2NyeXB0by9lcnIvZXJyX2RlZi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWQzZDg0Li4wMDAwMDAwCi0tLSBhL2NyeXB0by9lcnIvZXJyX2RlZi5jCisrKyAvZGV2L251bGwKQEAgLTEsNjY1ICswLDAgQEAKLS8qIGNyeXB0by9lcnIvZXJyX2RlZi5jICovCi0vKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCi0gKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCi0gKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCi0gKiAKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcwotICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAotICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCi0gKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCi0gKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSAqIAotICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KLSAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KLSAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KLSAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCi0gKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKLSAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKLSAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCi0gKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKLSAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgotICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCi0gKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgotICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICogCi0gKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgotICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCi0gKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCi0gKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQotICovCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0gKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0gKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0gKgotICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0gKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotICoKLSAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotICoKLSAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSAqICAgIGFja25vd2xlZGdtZW50OgotICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0gKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKgotICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCi0gKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCi0gKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSAiY3J5cHRsaWIuaCIKLSNpbmNsdWRlIDxvcGVuc3NsL2xoYXNoLmg+Ci0jaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSNpbmNsdWRlIDxvcGVuc3NsL2J1ZmZlci5oPgotI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+Ci0jaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLQotI2RlZmluZSBlcnJfY2xlYXJfZGF0YShwLGkpIFwKLQlkbyB7IFwKLQlpZiAoKChwKS0+ZXJyX2RhdGFbaV0gIT0gTlVMTCkgJiYgXAotCQkocCktPmVycl9kYXRhX2ZsYWdzW2ldICYgRVJSX1RYVF9NQUxMT0NFRCkgXAotCQl7ICBcCi0JCU9QRU5TU0xfZnJlZSgocCktPmVycl9kYXRhW2ldKTsgXAotCQkocCktPmVycl9kYXRhW2ldPU5VTEw7IFwKLQkJfSBcCi0JKHApLT5lcnJfZGF0YV9mbGFnc1tpXT0wOyBcCi0JfSB3aGlsZSgwKQotCi0jZGVmaW5lIGVycl9jbGVhcihwLGkpIFwKLQlkbyB7IFwKLQkocCktPmVycl9mbGFnc1tpXT0wOyBcCi0JKHApLT5lcnJfYnVmZmVyW2ldPTA7IFwKLQllcnJfY2xlYXJfZGF0YShwLGkpOyBcCi0JKHApLT5lcnJfZmlsZVtpXT1OVUxMOyBcCi0JKHApLT5lcnJfbGluZVtpXT0gLTE7IFwKLQl9IHdoaWxlKDApCi0KLXN0YXRpYyB2b2lkIGVycl9sb2FkX3N0cmluZ3MoaW50IGxpYiwgRVJSX1NUUklOR19EQVRBICpzdHIpOwotCi1zdGF0aWMgdm9pZCBFUlJfU1RBVEVfZnJlZShFUlJfU1RBVEUgKnMpOwotCi0vKiBEZWZpbmUgdGhlIHByZWRlY2xhcmVkIChidXQgZXh0ZXJuYWxseSBvcGFxdWUpICJFUlJfRk5TIiB0eXBlICovCi1zdHJ1Y3Qgc3RfRVJSX0ZOUwotCXsKLQkvKiBXb3JrcyBvbiB0aGUgImVycm9yX2hhc2giIHN0cmluZyB0YWJsZSAqLwotCUxIQVNIICooKmNiX2Vycl9nZXQpKGludCBjcmVhdGUpOwotCXZvaWQgKCpjYl9lcnJfZGVsKSh2b2lkKTsKLQlFUlJfU1RSSU5HX0RBVEEgKigqY2JfZXJyX2dldF9pdGVtKShjb25zdCBFUlJfU1RSSU5HX0RBVEEgKik7Ci0JRVJSX1NUUklOR19EQVRBICooKmNiX2Vycl9zZXRfaXRlbSkoRVJSX1NUUklOR19EQVRBICopOwotCUVSUl9TVFJJTkdfREFUQSAqKCpjYl9lcnJfZGVsX2l0ZW0pKEVSUl9TVFJJTkdfREFUQSAqKTsKLQkvKiBXb3JrcyBvbiB0aGUgInRocmVhZF9oYXNoIiBlcnJvci1zdGF0ZSB0YWJsZSAqLwotCUxIQVNIICooKmNiX3RocmVhZF9nZXQpKGludCBjcmVhdGUpOwotCXZvaWQgKCpjYl90aHJlYWRfcmVsZWFzZSkoTEhBU0ggKipoYXNoKTsKLQlFUlJfU1RBVEUgKigqY2JfdGhyZWFkX2dldF9pdGVtKShjb25zdCBFUlJfU1RBVEUgKik7Ci0JRVJSX1NUQVRFICooKmNiX3RocmVhZF9zZXRfaXRlbSkoRVJSX1NUQVRFICopOwotCXZvaWQgKCpjYl90aHJlYWRfZGVsX2l0ZW0pKGNvbnN0IEVSUl9TVEFURSAqKTsKLQkvKiBSZXR1cm5zIHRoZSBuZXh0IGF2YWlsYWJsZSBlcnJvciAibGlicmFyeSIgbnVtYmVycyAqLwotCWludCAoKmNiX2dldF9uZXh0X2xpYikodm9pZCk7Ci0JfTsKLQotLyogUHJlZGVjbGFyYXRpb25zIG9mIHRoZSAiZXJyX2RlZmF1bHRzIiBmdW5jdGlvbnMgKi8KLXN0YXRpYyBMSEFTSCAqaW50X2Vycl9nZXQoaW50IGNyZWF0ZSk7Ci1zdGF0aWMgdm9pZCBpbnRfZXJyX2RlbCh2b2lkKTsKLXN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgKmludF9lcnJfZ2V0X2l0ZW0oY29uc3QgRVJSX1NUUklOR19EQVRBICopOwotc3RhdGljIEVSUl9TVFJJTkdfREFUQSAqaW50X2Vycl9zZXRfaXRlbShFUlJfU1RSSU5HX0RBVEEgKik7Ci1zdGF0aWMgRVJSX1NUUklOR19EQVRBICppbnRfZXJyX2RlbF9pdGVtKEVSUl9TVFJJTkdfREFUQSAqKTsKLXN0YXRpYyBMSEFTSCAqaW50X3RocmVhZF9nZXQoaW50IGNyZWF0ZSk7Ci1zdGF0aWMgdm9pZCBpbnRfdGhyZWFkX3JlbGVhc2UoTEhBU0ggKipoYXNoKTsKLXN0YXRpYyBFUlJfU1RBVEUgKmludF90aHJlYWRfZ2V0X2l0ZW0oY29uc3QgRVJSX1NUQVRFICopOwotc3RhdGljIEVSUl9TVEFURSAqaW50X3RocmVhZF9zZXRfaXRlbShFUlJfU1RBVEUgKik7Ci1zdGF0aWMgdm9pZCBpbnRfdGhyZWFkX2RlbF9pdGVtKGNvbnN0IEVSUl9TVEFURSAqKTsKLXN0YXRpYyBpbnQgaW50X2Vycl9nZXRfbmV4dF9saWIodm9pZCk7Ci0vKiBUaGUgc3RhdGljIEVSUl9GTlMgdGFibGUgdXNpbmcgdGhlc2UgZGVmYXVsdHMgZnVuY3Rpb25zICovCi1zdGF0aWMgY29uc3QgRVJSX0ZOUyBlcnJfZGVmYXVsdHMgPQotCXsKLQlpbnRfZXJyX2dldCwKLQlpbnRfZXJyX2RlbCwKLQlpbnRfZXJyX2dldF9pdGVtLAotCWludF9lcnJfc2V0X2l0ZW0sCi0JaW50X2Vycl9kZWxfaXRlbSwKLQlpbnRfdGhyZWFkX2dldCwKLQlpbnRfdGhyZWFkX3JlbGVhc2UsCi0JaW50X3RocmVhZF9nZXRfaXRlbSwKLQlpbnRfdGhyZWFkX3NldF9pdGVtLAotCWludF90aHJlYWRfZGVsX2l0ZW0sCi0JaW50X2Vycl9nZXRfbmV4dF9saWIKLQl9OwotCi0vKiBUaGUgcmVwbGFjYWJsZSB0YWJsZSBvZiBFUlJfRk5TIGZ1bmN0aW9ucyB3ZSB1c2UgYXQgcnVuLXRpbWUgKi8KLXN0YXRpYyBjb25zdCBFUlJfRk5TICplcnJfZm5zID0gTlVMTDsKLQotLyogRWcuIHJhdGhlciB0aGFuIHVzaW5nICJlcnJfZ2V0KCkiLCB1c2UgIkVSUkZOKGVycl9nZXQpKCkiLiAqLwotI2RlZmluZSBFUlJGTihhKSBlcnJfZm5zLT5jYl8jI2EKLQotLyogVGhlIGludGVybmFsIHN0YXRlIHVzZWQgYnkgImVycl9kZWZhdWx0cyIgLSBhcyBzdWNoLCB0aGUgc2V0dGluZywgcmVhZGluZywKLSAqIGNyZWF0aW5nLCBhbmQgZGVsZXRpbmcgb2YgdGhpcyBkYXRhIHNob3VsZCBvbmx5IGJlIHBlcm1pdHRlZCB2aWEgdGhlCi0gKiAiZXJyX2RlZmF1bHRzIiBmdW5jdGlvbnMuIFRoaXMgd2F5LCBhIGxpbmtlZCBtb2R1bGUgY2FuIGNvbXBsZXRlbHkgZGVmZXIgYWxsCi0gKiBFUlIgc3RhdGUgb3BlcmF0aW9uICh0b2dldGhlciB3aXRoIHJlcXVpc2l0ZSBsb2NraW5nKSB0byB0aGUgaW1wbGVtZW50YXRpb25zCi0gKiBhbmQgc3RhdGUgaW4gdGhlIGxvYWRpbmcgYXBwbGljYXRpb24uICovCi1zdGF0aWMgTEhBU0ggKmludF9lcnJvcl9oYXNoID0gTlVMTDsKLXN0YXRpYyBMSEFTSCAqaW50X3RocmVhZF9oYXNoID0gTlVMTDsKLXN0YXRpYyBpbnQgaW50X3RocmVhZF9oYXNoX3JlZmVyZW5jZXMgPSAwOwotc3RhdGljIGludCBpbnRfZXJyX2xpYnJhcnlfbnVtYmVyPSBFUlJfTElCX1VTRVI7Ci0KLS8qIEludGVybmFsIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIHdoZXRoZXIgImVycl9mbnMiIGlzIHNldCBhbmQgaWYgbm90LCBzZXRzIGl0IHRvCi0gKiB0aGUgZGVmYXVsdHMuICovCi1zdGF0aWMgdm9pZCBlcnJfZm5zX2NoZWNrKHZvaWQpCi0JewotCWlmIChlcnJfZm5zKSByZXR1cm47Ci0JCi0JQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19FUlIpOwotCWlmICghZXJyX2ZucykKLQkJZXJyX2ZucyA9ICZlcnJfZGVmYXVsdHM7Ci0JQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX0VSUik7Ci0JfQotCi0vKiBBUEkgZnVuY3Rpb25zIHRvIGdldCBvciBzZXQgdGhlIHVuZGVybHlpbmcgRVJSIGZ1bmN0aW9ucy4gKi8KLQotY29uc3QgRVJSX0ZOUyAqRVJSX2dldF9pbXBsZW1lbnRhdGlvbih2b2lkKQotCXsKLQllcnJfZm5zX2NoZWNrKCk7Ci0JcmV0dXJuIGVycl9mbnM7Ci0JfQotCi1pbnQgRVJSX3NldF9pbXBsZW1lbnRhdGlvbihjb25zdCBFUlJfRk5TICpmbnMpCi0JewotCWludCByZXQgPSAwOwotCi0JQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19FUlIpOwotCS8qIEl0J3MgdG9vIGxhdGUgaWYgJ2Vycl9mbnMnIGlzIG5vbi1OVUxMLiBCVFc6IG5vdCBtdWNoIHBvaW50IHNldHRpbmcKLQkgKiBhbiBlcnJvciBpcyB0aGVyZT8hICovCi0JaWYgKCFlcnJfZm5zKQotCQl7Ci0JCWVycl9mbnMgPSBmbnM7Ci0JCXJldCA9IDE7Ci0JCX0KLQlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfRVJSKTsKLQlyZXR1cm4gcmV0OwotCX0KLQotLyogVGhlc2UgYXJlIHRoZSBjYWxsYmFja3MgcHJvdmlkZWQgdG8gImxoX25ldygpIiB3aGVuIGNyZWF0aW5nIHRoZSBMSEFTSCB0YWJsZXMKLSAqIGludGVybmFsIHRvIHRoZSAiZXJyX2RlZmF1bHRzIiBpbXBsZW1lbnRhdGlvbi4gKi8KLQotLyogc3RhdGljIHVuc2lnbmVkIGxvbmcgZXJyX2hhc2goRVJSX1NUUklOR19EQVRBICphKTsgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGVycl9oYXNoKGNvbnN0IHZvaWQgKmFfdm9pZCk7Ci0vKiBzdGF0aWMgaW50IGVycl9jbXAoRVJSX1NUUklOR19EQVRBICphLCBFUlJfU1RSSU5HX0RBVEEgKmIpOyAqLwotc3RhdGljIGludCBlcnJfY21wKGNvbnN0IHZvaWQgKmFfdm9pZCwgY29uc3Qgdm9pZCAqYl92b2lkKTsKLS8qIHN0YXRpYyB1bnNpZ25lZCBsb25nIHBpZF9oYXNoKEVSUl9TVEFURSAqcGlkKTsgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHBpZF9oYXNoKGNvbnN0IHZvaWQgKnBpZF92b2lkKTsKLS8qIHN0YXRpYyBpbnQgcGlkX2NtcChFUlJfU1RBVEUgKmEsRVJSX1NUQVRFICpwaWQpOyAqLwotc3RhdGljIGludCBwaWRfY21wKGNvbnN0IHZvaWQgKmFfdm9pZCxjb25zdCB2b2lkICpwaWRfdm9pZCk7Ci0KLS8qIFRoZSBpbnRlcm5hbCBmdW5jdGlvbnMgdXNlZCBpbiB0aGUgImVycl9kZWZhdWx0cyIgaW1wbGVtZW50YXRpb24gKi8KLQotc3RhdGljIExIQVNIICppbnRfZXJyX2dldChpbnQgY3JlYXRlKQotCXsKLQlMSEFTSCAqcmV0ID0gTlVMTDsKLQotCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfRVJSKTsKLQlpZiAoIWludF9lcnJvcl9oYXNoICYmIGNyZWF0ZSkKLQkJewotCQlDUllQVE9fcHVzaF9pbmZvKCJpbnRfZXJyX2dldCAoZXJyLmMpIik7Ci0JCWludF9lcnJvcl9oYXNoID0gbGhfbmV3KGVycl9oYXNoLCBlcnJfY21wKTsKLQkJQ1JZUFRPX3BvcF9pbmZvKCk7Ci0JCX0KLQlpZiAoaW50X2Vycm9yX2hhc2gpCi0JCXJldCA9IGludF9lcnJvcl9oYXNoOwotCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19FUlIpOwotCi0JcmV0dXJuIHJldDsKLQl9Ci0KLXN0YXRpYyB2b2lkIGludF9lcnJfZGVsKHZvaWQpCi0JewotCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfRVJSKTsKLQlpZiAoaW50X2Vycm9yX2hhc2gpCi0JCXsKLQkJbGhfZnJlZShpbnRfZXJyb3JfaGFzaCk7Ci0JCWludF9lcnJvcl9oYXNoID0gTlVMTDsKLQkJfQotCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19FUlIpOwotCX0KLQotc3RhdGljIEVSUl9TVFJJTkdfREFUQSAqaW50X2Vycl9nZXRfaXRlbShjb25zdCBFUlJfU1RSSU5HX0RBVEEgKmQpCi0JewotCUVSUl9TVFJJTkdfREFUQSAqcDsKLQlMSEFTSCAqaGFzaDsKLQotCWVycl9mbnNfY2hlY2soKTsKLQloYXNoID0gRVJSRk4oZXJyX2dldCkoMCk7Ci0JaWYgKCFoYXNoKQotCQlyZXR1cm4gTlVMTDsKLQotCUNSWVBUT19yX2xvY2soQ1JZUFRPX0xPQ0tfRVJSKTsKLQlwID0gKEVSUl9TVFJJTkdfREFUQSAqKWxoX3JldHJpZXZlKGhhc2gsIGQpOwotCUNSWVBUT19yX3VubG9jayhDUllQVE9fTE9DS19FUlIpOwotCi0JcmV0dXJuIHA7Ci0JfQotCi1zdGF0aWMgRVJSX1NUUklOR19EQVRBICppbnRfZXJyX3NldF9pdGVtKEVSUl9TVFJJTkdfREFUQSAqZCkKLQl7Ci0JRVJSX1NUUklOR19EQVRBICpwOwotCUxIQVNIICpoYXNoOwotCi0JZXJyX2Zuc19jaGVjaygpOwotCWhhc2ggPSBFUlJGTihlcnJfZ2V0KSgxKTsKLQlpZiAoIWhhc2gpCi0JCXJldHVybiBOVUxMOwotCi0JQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19FUlIpOwotCXAgPSAoRVJSX1NUUklOR19EQVRBICopbGhfaW5zZXJ0KGhhc2gsIGQpOwotCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19FUlIpOwotCi0JcmV0dXJuIHA7Ci0JfQotCi1zdGF0aWMgRVJSX1NUUklOR19EQVRBICppbnRfZXJyX2RlbF9pdGVtKEVSUl9TVFJJTkdfREFUQSAqZCkKLQl7Ci0JRVJSX1NUUklOR19EQVRBICpwOwotCUxIQVNIICpoYXNoOwotCi0JZXJyX2Zuc19jaGVjaygpOwotCWhhc2ggPSBFUlJGTihlcnJfZ2V0KSgwKTsKLQlpZiAoIWhhc2gpCi0JCXJldHVybiBOVUxMOwotCi0JQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19FUlIpOwotCXAgPSAoRVJSX1NUUklOR19EQVRBICopbGhfZGVsZXRlKGhhc2gsIGQpOwotCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19FUlIpOwotCi0JcmV0dXJuIHA7Ci0JfQotCi1zdGF0aWMgTEhBU0ggKmludF90aHJlYWRfZ2V0KGludCBjcmVhdGUpCi0JewotCUxIQVNIICpyZXQgPSBOVUxMOwotCi0JQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19FUlIpOwotCWlmICghaW50X3RocmVhZF9oYXNoICYmIGNyZWF0ZSkKLQkJewotCQlDUllQVE9fcHVzaF9pbmZvKCJpbnRfdGhyZWFkX2dldCAoZXJyLmMpIik7Ci0JCWludF90aHJlYWRfaGFzaCA9IGxoX25ldyhwaWRfaGFzaCwgcGlkX2NtcCk7Ci0JCUNSWVBUT19wb3BfaW5mbygpOwotCQl9Ci0JaWYgKGludF90aHJlYWRfaGFzaCkKLQkJewotCQlpbnRfdGhyZWFkX2hhc2hfcmVmZXJlbmNlcysrOwotCQlyZXQgPSBpbnRfdGhyZWFkX2hhc2g7Ci0JCX0KLQlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfRVJSKTsKLQlyZXR1cm4gcmV0OwotCX0KLQotc3RhdGljIHZvaWQgaW50X3RocmVhZF9yZWxlYXNlKExIQVNIICoqaGFzaCkKLQl7Ci0JaW50IGk7Ci0KLQlpZiAoaGFzaCA9PSBOVUxMIHx8ICpoYXNoID09IE5VTEwpCi0JCXJldHVybjsKLQotCWkgPSBDUllQVE9fYWRkKCZpbnRfdGhyZWFkX2hhc2hfcmVmZXJlbmNlcywgLTEsIENSWVBUT19MT0NLX0VSUik7Ci0KLSNpZmRlZiBSRUZfUFJJTlQKLQlmcHJpbnRmKHN0ZGVyciwiJTRkOiVzXG4iLGludF90aHJlYWRfaGFzaF9yZWZlcmVuY2VzLCJFUlIiKTsKLSNlbmRpZgotCWlmIChpID4gMCkgcmV0dXJuOwotI2lmZGVmIFJFRl9DSEVDSwotCWlmIChpIDwgMCkKLQkJewotCQlmcHJpbnRmKHN0ZGVyciwiaW50X3RocmVhZF9yZWxlYXNlLCBiYWQgcmVmZXJlbmNlIGNvdW50XG4iKTsKLQkJYWJvcnQoKTsgLyogb2sgKi8KLQkJfQotI2VuZGlmCi0JKmhhc2ggPSBOVUxMOwotCX0KLQotc3RhdGljIEVSUl9TVEFURSAqaW50X3RocmVhZF9nZXRfaXRlbShjb25zdCBFUlJfU1RBVEUgKmQpCi0JewotCUVSUl9TVEFURSAqcDsKLQlMSEFTSCAqaGFzaDsKLQotCWVycl9mbnNfY2hlY2soKTsKLQloYXNoID0gRVJSRk4odGhyZWFkX2dldCkoMCk7Ci0JaWYgKCFoYXNoKQotCQlyZXR1cm4gTlVMTDsKLQotCUNSWVBUT19yX2xvY2soQ1JZUFRPX0xPQ0tfRVJSKTsKLQlwID0gKEVSUl9TVEFURSAqKWxoX3JldHJpZXZlKGhhc2gsIGQpOwotCUNSWVBUT19yX3VubG9jayhDUllQVE9fTE9DS19FUlIpOwotCi0JRVJSRk4odGhyZWFkX3JlbGVhc2UpKCZoYXNoKTsKLQlyZXR1cm4gcDsKLQl9Ci0KLXN0YXRpYyBFUlJfU1RBVEUgKmludF90aHJlYWRfc2V0X2l0ZW0oRVJSX1NUQVRFICpkKQotCXsKLQlFUlJfU1RBVEUgKnA7Ci0JTEhBU0ggKmhhc2g7Ci0KLQllcnJfZm5zX2NoZWNrKCk7Ci0JaGFzaCA9IEVSUkZOKHRocmVhZF9nZXQpKDEpOwotCWlmICghaGFzaCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX0VSUik7Ci0JcCA9IChFUlJfU1RBVEUgKilsaF9pbnNlcnQoaGFzaCwgZCk7Ci0JQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX0VSUik7Ci0KLQlFUlJGTih0aHJlYWRfcmVsZWFzZSkoJmhhc2gpOwotCXJldHVybiBwOwotCX0KLQotc3RhdGljIHZvaWQgaW50X3RocmVhZF9kZWxfaXRlbShjb25zdCBFUlJfU1RBVEUgKmQpCi0JewotCUVSUl9TVEFURSAqcDsKLQlMSEFTSCAqaGFzaDsKLQotCWVycl9mbnNfY2hlY2soKTsKLQloYXNoID0gRVJSRk4odGhyZWFkX2dldCkoMCk7Ci0JaWYgKCFoYXNoKQotCQlyZXR1cm47Ci0KLQlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX0VSUik7Ci0JcCA9IChFUlJfU1RBVEUgKilsaF9kZWxldGUoaGFzaCwgZCk7Ci0JLyogbWFrZSBzdXJlIHdlIGRvbid0IGxlYWsgbWVtb3J5ICovCi0JaWYgKGludF90aHJlYWRfaGFzaF9yZWZlcmVuY2VzID09IDEKLQkJJiYgaW50X3RocmVhZF9oYXNoICYmIChsaF9udW1faXRlbXMoaW50X3RocmVhZF9oYXNoKSA9PSAwKSkKLQkJewotCQlsaF9mcmVlKGludF90aHJlYWRfaGFzaCk7Ci0JCWludF90aHJlYWRfaGFzaCA9IE5VTEw7Ci0JCX0KLQlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfRVJSKTsKLQotCUVSUkZOKHRocmVhZF9yZWxlYXNlKSgmaGFzaCk7Ci0JaWYgKHApCi0JCUVSUl9TVEFURV9mcmVlKHApOwotCX0KLQotc3RhdGljIGludCBpbnRfZXJyX2dldF9uZXh0X2xpYih2b2lkKQotCXsKLQlpbnQgcmV0OwotCi0JQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19FUlIpOwotCXJldCA9IGludF9lcnJfbGlicmFyeV9udW1iZXIrKzsKLQlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfRVJSKTsKLQotCXJldHVybiByZXQ7Ci0JfQotCi1zdGF0aWMgdm9pZCBFUlJfU1RBVEVfZnJlZShFUlJfU1RBVEUgKnMpCi0JewotCWludCBpOwotCi0JaWYgKHMgPT0gTlVMTCkKLQkgICAgcmV0dXJuOwotCi0JZm9yIChpPTA7IGk8RVJSX05VTV9FUlJPUlM7IGkrKykKLQkJewotCQllcnJfY2xlYXJfZGF0YShzLGkpOwotCQl9Ci0JT1BFTlNTTF9mcmVlKHMpOwotCX0KLQotc3RhdGljIHZvaWQgZXJyX2xvYWRfc3RyaW5ncyhpbnQgbGliLCBFUlJfU1RSSU5HX0RBVEEgKnN0cikKLQl7Ci0Jd2hpbGUgKHN0ci0+ZXJyb3IpCi0JCXsKLQkJaWYgKGxpYikKLQkJCXN0ci0+ZXJyb3J8PUVSUl9QQUNLKGxpYiwwLDApOwotCQlFUlJGTihlcnJfc2V0X2l0ZW0pKHN0cik7Ci0JCXN0cisrOwotCQl9Ci0JfQotCi12b2lkIEVSUl9sb2FkX3N0cmluZ3MoaW50IGxpYiwgRVJSX1NUUklOR19EQVRBICpzdHIpCi0JewotCWVycl9mbnNfY2hlY2soKTsKLQllcnJfbG9hZF9zdHJpbmdzKGxpYiwgc3RyKTsKLQl9Ci0KLXZvaWQgRVJSX3VubG9hZF9zdHJpbmdzKGludCBsaWIsIEVSUl9TVFJJTkdfREFUQSAqc3RyKQotCXsKLQl3aGlsZSAoc3RyLT5lcnJvcikKLQkJewotCQlpZiAobGliKQotCQkJc3RyLT5lcnJvcnw9RVJSX1BBQ0sobGliLDAsMCk7Ci0JCUVSUkZOKGVycl9kZWxfaXRlbSkoc3RyKTsKLQkJc3RyKys7Ci0JCX0KLQl9Ci0KLXZvaWQgRVJSX2ZyZWVfc3RyaW5ncyh2b2lkKQotCXsKLQllcnJfZm5zX2NoZWNrKCk7Ci0JRVJSRk4oZXJyX2RlbCkoKTsKLQl9Ci0KLUxIQVNIICpFUlJfZ2V0X3N0cmluZ190YWJsZSh2b2lkKQotCXsKLQllcnJfZm5zX2NoZWNrKCk7Ci0JcmV0dXJuIEVSUkZOKGVycl9nZXQpKDApOwotCX0KLQotTEhBU0ggKkVSUl9nZXRfZXJyX3N0YXRlX3RhYmxlKHZvaWQpCi0JewotCWVycl9mbnNfY2hlY2soKTsKLQlyZXR1cm4gRVJSRk4odGhyZWFkX2dldCkoMCk7Ci0JfQotCi12b2lkIEVSUl9yZWxlYXNlX2Vycl9zdGF0ZV90YWJsZShMSEFTSCAqKmhhc2gpCi0JewotCWVycl9mbnNfY2hlY2soKTsKLQlFUlJGTih0aHJlYWRfcmVsZWFzZSkoaGFzaCk7Ci0JfQotCi1jb25zdCBjaGFyICpFUlJfbGliX2Vycm9yX3N0cmluZyh1bnNpZ25lZCBsb25nIGUpCi0JewotCUVSUl9TVFJJTkdfREFUQSBkLCpwOwotCXVuc2lnbmVkIGxvbmcgbDsKLQotCWVycl9mbnNfY2hlY2soKTsKLQlsPUVSUl9HRVRfTElCKGUpOwotCWQuZXJyb3I9RVJSX1BBQ0sobCwwLDApOwotCXA9RVJSRk4oZXJyX2dldF9pdGVtKSgmZCk7Ci0JcmV0dXJuKChwID09IE5VTEwpP05VTEw6cC0+c3RyaW5nKTsKLQl9Ci0KLWNvbnN0IGNoYXIgKkVSUl9mdW5jX2Vycm9yX3N0cmluZyh1bnNpZ25lZCBsb25nIGUpCi0JewotCUVSUl9TVFJJTkdfREFUQSBkLCpwOwotCXVuc2lnbmVkIGxvbmcgbCxmOwotCi0JZXJyX2Zuc19jaGVjaygpOwotCWw9RVJSX0dFVF9MSUIoZSk7Ci0JZj1FUlJfR0VUX0ZVTkMoZSk7Ci0JZC5lcnJvcj1FUlJfUEFDSyhsLGYsMCk7Ci0JcD1FUlJGTihlcnJfZ2V0X2l0ZW0pKCZkKTsKLQlyZXR1cm4oKHAgPT0gTlVMTCk/TlVMTDpwLT5zdHJpbmcpOwotCX0KLQotY29uc3QgY2hhciAqRVJSX3JlYXNvbl9lcnJvcl9zdHJpbmcodW5zaWduZWQgbG9uZyBlKQotCXsKLQlFUlJfU1RSSU5HX0RBVEEgZCwqcD1OVUxMOwotCXVuc2lnbmVkIGxvbmcgbCxyOwotCi0JZXJyX2Zuc19jaGVjaygpOwotCWw9RVJSX0dFVF9MSUIoZSk7Ci0Jcj1FUlJfR0VUX1JFQVNPTihlKTsKLQlkLmVycm9yPUVSUl9QQUNLKGwsMCxyKTsKLQlwPUVSUkZOKGVycl9nZXRfaXRlbSkoJmQpOwotCWlmICghcCkKLQkJewotCQlkLmVycm9yPUVSUl9QQUNLKDAsMCxyKTsKLQkJcD1FUlJGTihlcnJfZ2V0X2l0ZW0pKCZkKTsKLQkJfQotCXJldHVybigocCA9PSBOVUxMKT9OVUxMOnAtPnN0cmluZyk7Ci0JfQotCi0vKiBzdGF0aWMgdW5zaWduZWQgbG9uZyBlcnJfaGFzaChFUlJfU1RSSU5HX0RBVEEgKmEpICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBlcnJfaGFzaChjb25zdCB2b2lkICphX3ZvaWQpCi0JewotCXVuc2lnbmVkIGxvbmcgcmV0LGw7Ci0KLQlsPSgoY29uc3QgRVJSX1NUUklOR19EQVRBICopYV92b2lkKS0+ZXJyb3I7Ci0JcmV0PWxeRVJSX0dFVF9MSUIobCleRVJSX0dFVF9GVU5DKGwpOwotCXJldHVybihyZXRecmV0JTE5KjEzKTsKLQl9Ci0KLS8qIHN0YXRpYyBpbnQgZXJyX2NtcChFUlJfU1RSSU5HX0RBVEEgKmEsIEVSUl9TVFJJTkdfREFUQSAqYikgKi8KLXN0YXRpYyBpbnQgZXJyX2NtcChjb25zdCB2b2lkICphX3ZvaWQsIGNvbnN0IHZvaWQgKmJfdm9pZCkKLQl7Ci0JcmV0dXJuKChpbnQpKCgoY29uc3QgRVJSX1NUUklOR19EQVRBICopYV92b2lkKS0+ZXJyb3IgLQotCQkJKChjb25zdCBFUlJfU1RSSU5HX0RBVEEgKiliX3ZvaWQpLT5lcnJvcikpOwotCX0KLQotLyogc3RhdGljIHVuc2lnbmVkIGxvbmcgcGlkX2hhc2goRVJSX1NUQVRFICphKSAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgcGlkX2hhc2goY29uc3Qgdm9pZCAqYV92b2lkKQotCXsKLQlyZXR1cm4oKChjb25zdCBFUlJfU1RBVEUgKilhX3ZvaWQpLT5waWQqMTMpOwotCX0KLQotLyogc3RhdGljIGludCBwaWRfY21wKEVSUl9TVEFURSAqYSwgRVJSX1NUQVRFICpiKSAqLwotc3RhdGljIGludCBwaWRfY21wKGNvbnN0IHZvaWQgKmFfdm9pZCwgY29uc3Qgdm9pZCAqYl92b2lkKQotCXsKLQlyZXR1cm4oKGludCkoKGxvbmcpKChjb25zdCBFUlJfU1RBVEUgKilhX3ZvaWQpLT5waWQgLQotCQkJKGxvbmcpKChjb25zdCBFUlJfU1RBVEUgKiliX3ZvaWQpLT5waWQpKTsKLQl9Ci0jaWZkZWYgT1BFTlNTTF9GSVBTCi1zdGF0aWMgdm9pZCBpbnRfZXJyX3JlbW92ZV9zdGF0ZSh1bnNpZ25lZCBsb25nIHBpZCkKLSNlbHNlCi12b2lkIEVSUl9yZW1vdmVfc3RhdGUodW5zaWduZWQgbG9uZyBwaWQpCi0jZW5kaWYKLQl7Ci0JRVJSX1NUQVRFIHRtcDsKLQotCWVycl9mbnNfY2hlY2soKTsKLQlpZiAocGlkID09IDApCi0JCXBpZD0odW5zaWduZWQgbG9uZylDUllQVE9fdGhyZWFkX2lkKCk7Ci0JdG1wLnBpZD1waWQ7Ci0JLyogdGhyZWFkX2RlbF9pdGVtIGF1dG9tYXRpY2FsbHkgZGVzdHJveXMgdGhlIExIQVNIIGlmIHRoZSBudW1iZXIgb2YKLQkgKiBpdGVtcyByZWFjaGVzIHplcm8uICovCi0JRVJSRk4odGhyZWFkX2RlbF9pdGVtKSgmdG1wKTsKLQl9Ci0KLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLQlzdGF0aWMgRVJSX1NUQVRFICppbnRfZXJyX2dldF9zdGF0ZSh2b2lkKQotI2Vsc2UKLUVSUl9TVEFURSAqRVJSX2dldF9zdGF0ZSh2b2lkKQotI2VuZGlmCi0JewotCXN0YXRpYyBFUlJfU1RBVEUgZmFsbGJhY2s7Ci0JRVJSX1NUQVRFICpyZXQsdG1wLCp0bXBwPU5VTEw7Ci0JaW50IGk7Ci0JdW5zaWduZWQgbG9uZyBwaWQ7Ci0KLQllcnJfZm5zX2NoZWNrKCk7Ci0JcGlkPSh1bnNpZ25lZCBsb25nKUNSWVBUT190aHJlYWRfaWQoKTsKLQl0bXAucGlkPXBpZDsKLQlyZXQ9RVJSRk4odGhyZWFkX2dldF9pdGVtKSgmdG1wKTsKLQotCS8qIHJldCA9PSB0aGUgZXJyb3Igc3RhdGUsIGlmIE5VTEwsIG1ha2UgYSBuZXcgb25lICovCi0JaWYgKHJldCA9PSBOVUxMKQotCQl7Ci0JCXJldD0oRVJSX1NUQVRFICopT1BFTlNTTF9tYWxsb2Moc2l6ZW9mKEVSUl9TVEFURSkpOwotCQlpZiAocmV0ID09IE5VTEwpIHJldHVybigmZmFsbGJhY2spOwotCQlyZXQtPnBpZD1waWQ7Ci0JCXJldC0+dG9wPTA7Ci0JCXJldC0+Ym90dG9tPTA7Ci0JCWZvciAoaT0wOyBpPEVSUl9OVU1fRVJST1JTOyBpKyspCi0JCQl7Ci0JCQlyZXQtPmVycl9kYXRhW2ldPU5VTEw7Ci0JCQlyZXQtPmVycl9kYXRhX2ZsYWdzW2ldPTA7Ci0JCQl9Ci0JCXRtcHAgPSBFUlJGTih0aHJlYWRfc2V0X2l0ZW0pKHJldCk7Ci0JCS8qIFRvIGNoZWNrIGlmIGluc2VydGlvbiBmYWlsZWQsIGRvIGEgZ2V0LiAqLwotCQlpZiAoRVJSRk4odGhyZWFkX2dldF9pdGVtKShyZXQpICE9IHJldCkKLQkJCXsKLQkJCUVSUl9TVEFURV9mcmVlKHJldCk7IC8qIGNvdWxkIG5vdCBpbnNlcnQgaXQgKi8KLQkJCXJldHVybigmZmFsbGJhY2spOwotCQkJfQotCQkvKiBJZiBhIHJhY2Ugb2NjdXJlZCBpbiB0aGlzIGZ1bmN0aW9uIGFuZCB3ZSBjYW1lIHNlY29uZCwgdG1wcAotCQkgKiBpcyB0aGUgZmlyc3Qgb25lIHRoYXQgd2UganVzdCByZXBsYWNlZC4gKi8KLQkJaWYgKHRtcHApCi0JCQlFUlJfU1RBVEVfZnJlZSh0bXBwKTsKLQkJfQotCXJldHVybiByZXQ7Ci0JfQotCi0jaWZkZWYgT1BFTlNTTF9GSVBTCi12b2lkIGludF9FUlJfbGliX2luaXQodm9pZCkKLQl7Ci0JaW50X0VSUl9zZXRfc3RhdGVfZnVuYyhpbnRfZXJyX2dldF9zdGF0ZSwgaW50X2Vycl9yZW1vdmVfc3RhdGUpOwotCX0KLSNlbmRpZgotCi1pbnQgRVJSX2dldF9uZXh0X2Vycm9yX2xpYnJhcnkodm9pZCkKLQl7Ci0JZXJyX2Zuc19jaGVjaygpOwotCXJldHVybiBFUlJGTihnZXRfbmV4dF9saWIpKCk7Ci0JfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Vyci9lcnJfcHJuLmMgYi9jcnlwdG8vZXJyL2Vycl9wcm4uYwppbmRleCA0Y2RmMzQyLi5kZTMyZjMzIDEwMDY0NAotLS0gYS9jcnlwdG8vZXJyL2Vycl9wcm4uYworKysgYi9jcnlwdG8vZXJyL2Vycl9wcm4uYwpAQCAtNzIsOCArNzIsMTAgQEAKIAljb25zdCBjaGFyICpmaWxlLCpkYXRhOwogCWludCBsaW5lLGZsYWdzOwogCXVuc2lnbmVkIGxvbmcgZXM7CisJQ1JZUFRPX1RIUkVBRElEIGN1cjsKIAotCWVzPUNSWVBUT190aHJlYWRfaWQoKTsKKwlDUllQVE9fVEhSRUFESURfY3VycmVudCgmY3VyKTsKKwllcz1DUllQVE9fVEhSRUFESURfaGFzaCgmY3VyKTsKIAl3aGlsZSAoKGw9RVJSX2dldF9lcnJvcl9saW5lX2RhdGEoJmZpbGUsJmxpbmUsJmRhdGEsJmZsYWdzKSkgIT0gMCkKIAkJewogCQlFUlJfZXJyb3Jfc3RyaW5nX24obCwgYnVmLCBzaXplb2YgYnVmKTsKQEAgLTg2LDcgKzg4LDEyIEBACiAjaWZuZGVmIE9QRU5TU0xfTk9fRlBfQVBJCiBzdGF0aWMgaW50IHByaW50X2ZwKGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IGxlbiwgdm9pZCAqZnApCiAJewotCXJldHVybiBmd3JpdGUoc3RyLCAxLCBsZW4sIGZwKTsKKwlCSU8gYmlvOworCisJQklPX3NldCgmYmlvLEJJT19zX2ZpbGUoKSk7CisJQklPX3NldF9mcCgmYmlvLGZwLEJJT19OT0NMT1NFKTsKKworCXJldHVybiBCSU9fcHJpbnRmKCZiaW8sICIlcyIsIHN0cik7CiAJfQogdm9pZCBFUlJfcHJpbnRfZXJyb3JzX2ZwKEZJTEUgKmZwKQogCXsKQEAgLTk0LDY0ICsxMDEsMTMgQEAKIAl9CiAjZW5kaWYKIAotdm9pZCBFUlJfZXJyb3Jfc3RyaW5nX24odW5zaWduZWQgbG9uZyBlLCBjaGFyICpidWYsIHNpemVfdCBsZW4pCitzdGF0aWMgaW50IHByaW50X2Jpbyhjb25zdCBjaGFyICpzdHIsIHNpemVfdCBsZW4sIHZvaWQgKmJwKQogCXsKLQljaGFyIGxzYnVmWzY0XSwgZnNidWZbNjRdLCByc2J1Zls2NF07Ci0JY29uc3QgY2hhciAqbHMsKmZzLCpyczsKLQl1bnNpZ25lZCBsb25nIGwsZixyOwotCi0JbD1FUlJfR0VUX0xJQihlKTsKLQlmPUVSUl9HRVRfRlVOQyhlKTsKLQlyPUVSUl9HRVRfUkVBU09OKGUpOwotCi0JbHM9RVJSX2xpYl9lcnJvcl9zdHJpbmcoZSk7Ci0JZnM9RVJSX2Z1bmNfZXJyb3Jfc3RyaW5nKGUpOwotCXJzPUVSUl9yZWFzb25fZXJyb3Jfc3RyaW5nKGUpOwotCi0JaWYgKGxzID09IE5VTEwpIAotCQlCSU9fc25wcmludGYobHNidWYsIHNpemVvZihsc2J1ZiksICJsaWIoJWx1KSIsIGwpOwotCWlmIChmcyA9PSBOVUxMKQotCQlCSU9fc25wcmludGYoZnNidWYsIHNpemVvZihmc2J1ZiksICJmdW5jKCVsdSkiLCBmKTsKLQlpZiAocnMgPT0gTlVMTCkKLQkJQklPX3NucHJpbnRmKHJzYnVmLCBzaXplb2YocnNidWYpLCAicmVhc29uKCVsdSkiLCByKTsKLQotCUJJT19zbnByaW50ZihidWYsIGxlbiwiZXJyb3I6JTA4bFg6JXM6JXM6JXMiLCBlLCBscz9sczpsc2J1ZiwgCi0JCWZzP2ZzOmZzYnVmLCBycz9yczpyc2J1Zik7Ci0JaWYgKHN0cmxlbihidWYpID09IGxlbi0xKQotCQl7Ci0JCS8qIG91dHB1dCBtYXkgYmUgdHJ1bmNhdGVkOyBtYWtlIHN1cmUgd2UgYWx3YXlzIGhhdmUgNSAKLQkJICogY29sb24tc2VwYXJhdGVkIGZpZWxkcywgaS5lLiA0IGNvbG9ucyAuLi4gKi8KLSNkZWZpbmUgTlVNX0NPTE9OUyA0Ci0JCWlmIChsZW4gPiBOVU1fQ09MT05TKSAvKiAuLi4gaWYgcG9zc2libGUgKi8KLQkJCXsKLQkJCWludCBpOwotCQkJY2hhciAqcyA9IGJ1ZjsKLQkJCQotCQkJZm9yIChpID0gMDsgaSA8IE5VTV9DT0xPTlM7IGkrKykKLQkJCQl7Ci0JCQkJY2hhciAqY29sb24gPSBzdHJjaHIocywgJzonKTsKLQkJCQlpZiAoY29sb24gPT0gTlVMTCB8fCBjb2xvbiA+ICZidWZbbGVuLTFdIC0gTlVNX0NPTE9OUyArIGkpCi0JCQkJCXsKLQkJCQkJLyogc2V0IGNvbG9uIG5vLiBpIGF0IGxhc3QgcG9zc2libGUgcG9zaXRpb24KLQkJCQkJICogKGJ1ZltsZW4tMV0gaXMgdGhlIHRlcm1pbmF0aW5nIDApKi8KLQkJCQkJY29sb24gPSAmYnVmW2xlbi0xXSAtIE5VTV9DT0xPTlMgKyBpOwotCQkJCQkqY29sb24gPSAnOic7Ci0JCQkJCX0KLQkJCQlzID0gY29sb24gKyAxOwotCQkJCX0KLQkJCX0KLQkJfQorCXJldHVybiBCSU9fd3JpdGUoKEJJTyAqKWJwLCBzdHIsIGxlbik7CisJfQordm9pZCBFUlJfcHJpbnRfZXJyb3JzKEJJTyAqYnApCisJeworCUVSUl9wcmludF9lcnJvcnNfY2IocHJpbnRfYmlvLCBicCk7CiAJfQogCi0vKiBCQUQgZm9yIG11bHRpLXRocmVhZGluZzogdXNlcyBhIGxvY2FsIGJ1ZmZlciBpZiByZXQgPT0gTlVMTCAqLwotLyogRVJSX2Vycm9yX3N0cmluZ19uIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgZm9yIHJldCAhPSBOVUxMCi0gKiBhcyBFUlJfZXJyb3Jfc3RyaW5nIGNhbm5vdCBrbm93IGhvdyBsYXJnZSB0aGUgYnVmZmVyIGlzICovCi1jaGFyICpFUlJfZXJyb3Jfc3RyaW5nKHVuc2lnbmVkIGxvbmcgZSwgY2hhciAqcmV0KQotCXsKLQlzdGF0aWMgY2hhciBidWZbMjU2XTsKLQotCWlmIChyZXQgPT0gTlVMTCkgcmV0PWJ1ZjsKLQlFUlJfZXJyb3Jfc3RyaW5nX24oZSwgcmV0LCAyNTYpOwotCi0JcmV0dXJuIHJldDsKLQl9CisJCmRpZmYgLS1naXQgYS9jcnlwdG8vZXJyL2Vycl9zdHIuYyBiL2NyeXB0by9lcnIvZXJyX3N0ci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzkwNDA4Li4wMDAwMDAwCi0tLSBhL2NyeXB0by9lcnIvZXJyX3N0ci5jCisrKyAvZGV2L251bGwKQEAgLTEsMjk1ICswLDAgQEAKLS8qIGNyeXB0by9lcnIvZXJyX3N0ci5jICovCi0vKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCi0gKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCi0gKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCi0gKiAKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcwotICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAotICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCi0gKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCi0gKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSAqIAotICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KLSAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KLSAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KLSAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCi0gKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKLSAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKLSAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCi0gKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKLSAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgotICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCi0gKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgotICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICogCi0gKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgotICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCi0gKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCi0gKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQotICovCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0gKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0gKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0gKgotICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0gKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotICoKLSAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotICoKLSAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSAqICAgIGFja25vd2xlZGdtZW50OgotICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0gKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKgotICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCi0gKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCi0gKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSAiY3J5cHRsaWIuaCIKLSNpbmNsdWRlIDxvcGVuc3NsL2xoYXNoLmg+Ci0jaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSNpbmNsdWRlIDxvcGVuc3NsL2J1ZmZlci5oPgotI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+Ci0jaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLQotI2lmbmRlZiBPUEVOU1NMX05PX0VSUgotc3RhdGljIEVSUl9TVFJJTkdfREFUQSBFUlJfc3RyX2xpYnJhcmllc1tdPQotCXsKLXtFUlJfUEFDSyhFUlJfTElCX05PTkUsMCwwKQkJLCJ1bmtub3duIGxpYnJhcnkifSwKLXtFUlJfUEFDSyhFUlJfTElCX1NZUywwLDApCQksInN5c3RlbSBsaWJyYXJ5In0sCi17RVJSX1BBQ0soRVJSX0xJQl9CTiwwLDApCQksImJpZ251bSByb3V0aW5lcyJ9LAote0VSUl9QQUNLKEVSUl9MSUJfUlNBLDAsMCkJCSwicnNhIHJvdXRpbmVzIn0sCi17RVJSX1BBQ0soRVJSX0xJQl9ESCwwLDApCQksIkRpZmZpZS1IZWxsbWFuIHJvdXRpbmVzIn0sCi17RVJSX1BBQ0soRVJSX0xJQl9FVlAsMCwwKQkJLCJkaWdpdGFsIGVudmVsb3BlIHJvdXRpbmVzIn0sCi17RVJSX1BBQ0soRVJSX0xJQl9CVUYsMCwwKQkJLCJtZW1vcnkgYnVmZmVyIHJvdXRpbmVzIn0sCi17RVJSX1BBQ0soRVJSX0xJQl9PQkosMCwwKQkJLCJvYmplY3QgaWRlbnRpZmllciByb3V0aW5lcyJ9LAote0VSUl9QQUNLKEVSUl9MSUJfUEVNLDAsMCkJCSwiUEVNIHJvdXRpbmVzIn0sCi17RVJSX1BBQ0soRVJSX0xJQl9EU0EsMCwwKQkJLCJkc2Egcm91dGluZXMifSwKLXtFUlJfUEFDSyhFUlJfTElCX1g1MDksMCwwKQkJLCJ4NTA5IGNlcnRpZmljYXRlIHJvdXRpbmVzIn0sCi17RVJSX1BBQ0soRVJSX0xJQl9BU04xLDAsMCkJCSwiYXNuMSBlbmNvZGluZyByb3V0aW5lcyJ9LAote0VSUl9QQUNLKEVSUl9MSUJfQ09ORiwwLDApCQksImNvbmZpZ3VyYXRpb24gZmlsZSByb3V0aW5lcyJ9LAote0VSUl9QQUNLKEVSUl9MSUJfQ1JZUFRPLDAsMCkJCSwiY29tbW9uIGxpYmNyeXB0byByb3V0aW5lcyJ9LAote0VSUl9QQUNLKEVSUl9MSUJfRUMsMCwwKQkJLCJlbGxpcHRpYyBjdXJ2ZSByb3V0aW5lcyJ9LAote0VSUl9QQUNLKEVSUl9MSUJfU1NMLDAsMCkJCSwiU1NMIHJvdXRpbmVzIn0sCi17RVJSX1BBQ0soRVJSX0xJQl9CSU8sMCwwKQkJLCJCSU8gcm91dGluZXMifSwKLXtFUlJfUEFDSyhFUlJfTElCX1BLQ1M3LDAsMCkJCSwiUEtDUzcgcm91dGluZXMifSwKLXtFUlJfUEFDSyhFUlJfTElCX1g1MDlWMywwLDApCQksIlg1MDkgVjMgcm91dGluZXMifSwKLXtFUlJfUEFDSyhFUlJfTElCX1BLQ1MxMiwwLDApCQksIlBLQ1MxMiByb3V0aW5lcyJ9LAote0VSUl9QQUNLKEVSUl9MSUJfUkFORCwwLDApCQksInJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIn0sCi17RVJSX1BBQ0soRVJSX0xJQl9EU08sMCwwKQkJLCJEU08gc3VwcG9ydCByb3V0aW5lcyJ9LAote0VSUl9QQUNLKEVSUl9MSUJfRU5HSU5FLDAsMCkJCSwiZW5naW5lIHJvdXRpbmVzIn0sCi17RVJSX1BBQ0soRVJSX0xJQl9PQ1NQLDAsMCkJCSwiT0NTUCByb3V0aW5lcyJ9LAote0VSUl9QQUNLKEVSUl9MSUJfRklQUywwLDApCQksIkZJUFMgcm91dGluZXMifSwKLXtFUlJfUEFDSyhFUlJfTElCX0NNUywwLDApCQksIkNNUyByb3V0aW5lcyJ9LAote0VSUl9QQUNLKEVSUl9MSUJfSlBBS0UsMCwwKQkJLCJKUEFLRSByb3V0aW5lcyJ9LAotezAsTlVMTH0sCi0JfTsKLQotc3RhdGljIEVSUl9TVFJJTkdfREFUQSBFUlJfc3RyX2Z1bmN0c1tdPQotCXsKLQl7RVJSX1BBQ0soMCxTWVNfRl9GT1BFTiwwKSwgICAgIAkiZm9wZW4ifSwKLQl7RVJSX1BBQ0soMCxTWVNfRl9DT05ORUNULDApLAkJImNvbm5lY3QifSwKLQl7RVJSX1BBQ0soMCxTWVNfRl9HRVRTRVJWQllOQU1FLDApLAkiZ2V0c2VydmJ5bmFtZSJ9LAotCXtFUlJfUEFDSygwLFNZU19GX1NPQ0tFVCwwKSwJCSJzb2NrZXQifSwgCi0Je0VSUl9QQUNLKDAsU1lTX0ZfSU9DVExTT0NLRVQsMCksCSJpb2N0bHNvY2tldCJ9LAotCXtFUlJfUEFDSygwLFNZU19GX0JJTkQsMCksCQkiYmluZCJ9LAotCXtFUlJfUEFDSygwLFNZU19GX0xJU1RFTiwwKSwJCSJsaXN0ZW4ifSwKLQl7RVJSX1BBQ0soMCxTWVNfRl9BQ0NFUFQsMCksCQkiYWNjZXB0In0sCi0jaWZkZWYgT1BFTlNTTF9TWVNfV0lORE9XUwotCXtFUlJfUEFDSygwLFNZU19GX1dTQVNUQVJUVVAsMCksCSJXU0FzdGFydHVwIn0sCi0jZW5kaWYKLQl7RVJSX1BBQ0soMCxTWVNfRl9PUEVORElSLDApLAkJIm9wZW5kaXIifSwKLQl7RVJSX1BBQ0soMCxTWVNfRl9GUkVBRCwwKSwJCSJmcmVhZCJ9LAotCXswLE5VTEx9LAotCX07Ci0KLXN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgRVJSX3N0cl9yZWFzb25zW109Ci0Jewote0VSUl9SX1NZU19MSUIJCQkJLCJzeXN0ZW0gbGliIn0sCi17RVJSX1JfQk5fTElCCQkJCSwiQk4gbGliIn0sCi17RVJSX1JfUlNBX0xJQgkJCQksIlJTQSBsaWIifSwKLXtFUlJfUl9ESF9MSUIJCQkJLCJESCBsaWIifSwKLXtFUlJfUl9FVlBfTElCCQkJCSwiRVZQIGxpYiJ9LAote0VSUl9SX0JVRl9MSUIJCQkJLCJCVUYgbGliIn0sCi17RVJSX1JfT0JKX0xJQgkJCQksIk9CSiBsaWIifSwKLXtFUlJfUl9QRU1fTElCCQkJCSwiUEVNIGxpYiJ9LAote0VSUl9SX0RTQV9MSUIJCQkJLCJEU0EgbGliIn0sCi17RVJSX1JfWDUwOV9MSUIJCQkJLCJYNTA5IGxpYiJ9LAote0VSUl9SX0FTTjFfTElCCQkJCSwiQVNOMSBsaWIifSwKLXtFUlJfUl9DT05GX0xJQgkJCQksIkNPTkYgbGliIn0sCi17RVJSX1JfQ1JZUFRPX0xJQgkJCSwiQ1JZUFRPIGxpYiJ9LAote0VSUl9SX0VDX0xJQgkJCQksIkVDIGxpYiJ9LAote0VSUl9SX1NTTF9MSUIJCQkJLCJTU0wgbGliIn0sCi17RVJSX1JfQklPX0xJQgkJCQksIkJJTyBsaWIifSwKLXtFUlJfUl9QS0NTN19MSUIJCQksIlBLQ1M3IGxpYiJ9LAote0VSUl9SX1g1MDlWM19MSUIJCQksIlg1MDlWMyBsaWIifSwKLXtFUlJfUl9QS0NTMTJfTElCCQkJLCJQS0NTMTIgbGliIn0sCi17RVJSX1JfUkFORF9MSUIJCQkJLCJSQU5EIGxpYiJ9LAote0VSUl9SX0RTT19MSUIJCQkJLCJEU08gbGliIn0sCi17RVJSX1JfRU5HSU5FX0xJQgkJCSwiRU5HSU5FIGxpYiJ9LAote0VSUl9SX09DU1BfTElCCQkJCSwiT0NTUCBsaWIifSwKLQote0VSUl9SX05FU1RFRF9BU04xX0VSUk9SCQksIm5lc3RlZCBhc24xIGVycm9yIn0sCi17RVJSX1JfQkFEX0FTTjFfT0JKRUNUX0hFQURFUgkJLCJiYWQgYXNuMSBvYmplY3QgaGVhZGVyIn0sCi17RVJSX1JfQkFEX0dFVF9BU04xX09CSkVDVF9DQUxMCQksImJhZCBnZXQgYXNuMSBvYmplY3QgY2FsbCJ9LAote0VSUl9SX0VYUEVDVElOR19BTl9BU04xX1NFUVVFTkNFCSwiZXhwZWN0aW5nIGFuIGFzbjEgc2VxdWVuY2UifSwKLXtFUlJfUl9BU04xX0xFTkdUSF9NSVNNQVRDSAkJLCJhc24xIGxlbmd0aCBtaXNtYXRjaCJ9LAote0VSUl9SX01JU1NJTkdfQVNOMV9FT1MJCQksIm1pc3NpbmcgYXNuMSBlb3MifSwKLQote0VSUl9SX0ZBVEFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICwiZmF0YWwifSwKLXtFUlJfUl9NQUxMT0NfRkFJTFVSRQkJCSwibWFsbG9jIGZhaWx1cmUifSwKLXtFUlJfUl9TSE9VTERfTk9UX0hBVkVfQkVFTl9DQUxMRUQJLCJjYWxsZWQgYSBmdW5jdGlvbiB5b3Ugc2hvdWxkIG5vdCBjYWxsIn0sCi17RVJSX1JfUEFTU0VEX05VTExfUEFSQU1FVEVSCQksInBhc3NlZCBhIG51bGwgcGFyYW1ldGVyIn0sCi17RVJSX1JfSU5URVJOQUxfRVJST1IJCQksImludGVybmFsIGVycm9yIn0sCi17RVJSX1JfRElTQUJMRUQJCQkJLCJjYWxsZWQgYSBmdW5jdGlvbiB0aGF0IHdhcyBkaXNhYmxlZCBhdCBjb21waWxlLXRpbWUifSwKLQotezAsTlVMTH0sCi0JfTsKLSNlbmRpZgotCi0jaWZuZGVmIE9QRU5TU0xfTk9fRVJSCi0jZGVmaW5lIE5VTV9TWVNfU1RSX1JFQVNPTlMgMTI3Ci0jZGVmaW5lIExFTl9TWVNfU1RSX1JFQVNPTiAzMgotCi1zdGF0aWMgRVJSX1NUUklOR19EQVRBIFNZU19zdHJfcmVhc29uc1tOVU1fU1lTX1NUUl9SRUFTT05TICsgMV07Ci0vKiBTWVNfc3RyX3JlYXNvbnMgaXMgZmlsbGVkIHdpdGggY29waWVzIG9mIHN0cmVycm9yKCkgcmVzdWx0cyBhdAotICogaW5pdGlhbGl6YXRpb24uCi0gKiAnZXJybm8nIHZhbHVlcyB1cCB0byAxMjcgc2hvdWxkIGNvdmVyIGFsbCB1c3VhbCBlcnJvcnMsCi0gKiBvdGhlcnMgd2lsbCBiZSBkaXNwbGF5ZWQgbnVtZXJpY2FsbHkgYnkgRVJSX2Vycm9yX3N0cmluZy4KLSAqIEl0IGlzIGNydWNpYWwgdGhhdCB3ZSBoYXZlIHNvbWV0aGluZyBmb3IgZWFjaCByZWFzb24gY29kZQotICogdGhhdCBvY2N1cnMgaW4gRVJSX3N0cl9yZWFzb25zLCBvciBib2d1cyByZWFzb24gc3RyaW5ncwotICogd2lsbCBiZSByZXR1cm5lZCBmb3IgU1lTZXJyLCB3aGljaCBhbHdheXMgZ2V0cyBhbiBlcnJubwotICogdmFsdWUgYW5kIG5ldmVyIG9uZSBvZiB0aG9zZSAnc3RhbmRhcmQnIHJlYXNvbiBjb2Rlcy4gKi8KLQotc3RhdGljIHZvaWQgYnVpbGRfU1lTX3N0cl9yZWFzb25zKHZvaWQpCi0JewotCS8qIE9QRU5TU0xfbWFsbG9jIGNhbm5vdCBiZSB1c2VkIGhlcmUsIHVzZSBzdGF0aWMgc3RvcmFnZSBpbnN0ZWFkICovCi0Jc3RhdGljIGNoYXIgc3RyZXJyb3JfdGFiW05VTV9TWVNfU1RSX1JFQVNPTlNdW0xFTl9TWVNfU1RSX1JFQVNPTl07Ci0JaW50IGk7Ci0Jc3RhdGljIGludCBpbml0ID0gMTsKLQotCUNSWVBUT19yX2xvY2soQ1JZUFRPX0xPQ0tfRVJSKTsKLQlpZiAoIWluaXQpCi0JCXsKLQkJQ1JZUFRPX3JfdW5sb2NrKENSWVBUT19MT0NLX0VSUik7Ci0JCXJldHVybjsKLQkJfQotCQotCUNSWVBUT19yX3VubG9jayhDUllQVE9fTE9DS19FUlIpOwotCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfRVJSKTsKLQlpZiAoIWluaXQpCi0JCXsKLQkJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX0VSUik7Ci0JCXJldHVybjsKLQkJfQotCi0JZm9yIChpID0gMTsgaSA8PSBOVU1fU1lTX1NUUl9SRUFTT05TOyBpKyspCi0JCXsKLQkJRVJSX1NUUklOR19EQVRBICpzdHIgPSAmU1lTX3N0cl9yZWFzb25zW2kgLSAxXTsKLQotCQlzdHItPmVycm9yID0gKHVuc2lnbmVkIGxvbmcpaTsKLQkJaWYgKHN0ci0+c3RyaW5nID09IE5VTEwpCi0JCQl7Ci0JCQljaGFyICgqZGVzdClbTEVOX1NZU19TVFJfUkVBU09OXSA9ICYoc3RyZXJyb3JfdGFiW2kgLSAxXSk7Ci0JCQljaGFyICpzcmMgPSBzdHJlcnJvcihpKTsKLQkJCWlmIChzcmMgIT0gTlVMTCkKLQkJCQl7Ci0JCQkJc3RybmNweSgqZGVzdCwgc3JjLCBzaXplb2YgKmRlc3QpOwotCQkJCSgqZGVzdClbc2l6ZW9mICpkZXN0IC0gMV0gPSAnXDAnOwotCQkJCXN0ci0+c3RyaW5nID0gKmRlc3Q7Ci0JCQkJfQotCQkJfQotCQlpZiAoc3RyLT5zdHJpbmcgPT0gTlVMTCkKLQkJCXN0ci0+c3RyaW5nID0gInVua25vd24iOwotCQl9Ci0KLQkvKiBOb3cgd2Ugc3RpbGwgaGF2ZSBTWVNfc3RyX3JlYXNvbnNbTlVNX1NZU19TVFJfUkVBU09OU10gPSB7MCwgTlVMTH0sCi0JICogYXMgcmVxdWlyZWQgYnkgRVJSX2xvYWRfc3RyaW5ncy4gKi8KLQotCWluaXQgPSAwOwotCQotCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19FUlIpOwotCX0KLSNlbmRpZgotCi12b2lkIEVSUl9sb2FkX0VSUl9zdHJpbmdzKHZvaWQpCi0JewotI2lmbmRlZiBPUEVOU1NMX05PX0VSUgotCWlmIChFUlJfZnVuY19lcnJvcl9zdHJpbmcoRVJSX3N0cl9mdW5jdHNbMF0uZXJyb3IpID09IE5VTEwpCi0JCXsKLQkJRVJSX2xvYWRfc3RyaW5ncygwLEVSUl9zdHJfbGlicmFyaWVzKTsKLQkJRVJSX2xvYWRfc3RyaW5ncygwLEVSUl9zdHJfcmVhc29ucyk7Ci0JCUVSUl9sb2FkX3N0cmluZ3MoRVJSX0xJQl9TWVMsRVJSX3N0cl9mdW5jdHMpOwotCQlidWlsZF9TWVNfc3RyX3JlYXNvbnMoKTsKLQkJRVJSX2xvYWRfc3RyaW5ncyhFUlJfTElCX1NZUyxTWVNfc3RyX3JlYXNvbnMpOwotCQl9Ci0jZW5kaWYKLQl9Ci0KZGlmZiAtLWdpdCBhL2NyeXB0by9lcnIvb3BlbnNzbC5lYyBiL2NyeXB0by9lcnIvb3BlbnNzbC5lYwppbmRleCA4Njg4MjY2Li5lMDU1NGI0IDEwMDY0NAotLS0gYS9jcnlwdG8vZXJyL29wZW5zc2wuZWMKKysrIGIvY3J5cHRvL2Vyci9vcGVuc3NsLmVjCkBAIC0zMSwxMyArMzEsMTUgQEAKIEwgRUNEU0EJCWNyeXB0by9lY2RzYS9lY2RzYS5oCQljcnlwdG8vZWNkc2EvZWNzX2Vyci5jCiBMIEVDREgJCWNyeXB0by9lY2RoL2VjZGguaAkJY3J5cHRvL2VjZGgvZWNoX2Vyci5jCiBMIFNUT1JFCQljcnlwdG8vc3RvcmUvc3RvcmUuaAkJY3J5cHRvL3N0b3JlL3N0cl9lcnIuYwotTCBGSVBTCQlmaXBzL2ZpcHMuaAkJCWNyeXB0by9maXBzX2Vyci5oCitMIFRTCQljcnlwdG8vdHMvdHMuaAkJCWNyeXB0by90cy90c19lcnIuYworTCBITUFDCQljcnlwdG8vaG1hYy9obWFjLmgJCWNyeXB0by9obWFjL2htYWNfZXJyLmMKIEwgQ01TCQljcnlwdG8vY21zL2Ntcy5oCQljcnlwdG8vY21zL2Ntc19lcnIuYwogTCBKUEFLRQkJY3J5cHRvL2pwYWtlL2pwYWtlLmgJCWNyeXB0by9qcGFrZS9qcGFrZV9lcnIuYwogCiAjIGFkZGl0aW9uYWwgaGVhZGVyIGZpbGVzIHRvIGJlIHNjYW5uZWQgZm9yIGZ1bmN0aW9uIG5hbWVzCiBMIE5PTkUJCWNyeXB0by94NTA5L3g1MDlfdmZ5LmgJCU5PTkUKIEwgTk9ORQkJY3J5cHRvL2VjL2VjX2xjbC5oCQlOT05FCitMIE5PTkUJCWNyeXB0by9hc24xL2Fzbl9sY2wuaAkJTk9ORQogTCBOT05FCQljcnlwdG8vY21zL2Ntc19sY2wuaAkJTk9ORQogCiAKQEAgLTcxLDYgKzczLDExIEBACiBSIFNTTF9SX1RMU1YxX0FMRVJUX0lOVEVSTkFMX0VSUk9SCQkxMDgwCiBSIFNTTF9SX1RMU1YxX0FMRVJUX1VTRVJfQ0FOQ0VMTEVECQkxMDkwCiBSIFNTTF9SX1RMU1YxX0FMRVJUX05PX1JFTkVHT1RJQVRJT04JCTExMDAKK1IgU1NMX1JfVExTVjFfVU5TVVBQT1JURURfRVhURU5TSU9OCQkxMTEwCitSIFNTTF9SX1RMU1YxX0NFUlRJRklDQVRFX1VOT0JUQUlOQUJMRQkJMTExMQorUiBTU0xfUl9UTFNWMV9VTlJFQ09HTklaRURfTkFNRQkJCTExMTIKK1IgU1NMX1JfVExTVjFfQkFEX0NFUlRJRklDQVRFX1NUQVRVU19SRVNQT05TRQkxMTEzCitSIFNTTF9SX1RMU1YxX0JBRF9DRVJUSUZJQ0FURV9IQVNIX1ZBTFVFCTExMTQKIAogUiBSU0FSRUZfUl9DT05URU5UX0VOQ09ESU5HCQkJMHgwNDAwCiBSIFJTQVJFRl9SX0RBVEEJCQkJCTB4MDQwMQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2V2cC9NYWtlZmlsZSBiL2NyeXB0by9ldnAvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyMDRmODQuLjAwMDAwMDAKLS0tIGEvY3J5cHRvL2V2cC9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDcyNyArMCwwIEBACi0jCi0jIE9wZW5TU0wvY3J5cHRvL2V2cC9NYWtlZmlsZQotIwotCi1ESVI9CWV2cAotVE9QPQkuLi8uLgotQ0M9CWNjCi1JTkNMVURFUz0gLUkuLiAtSSQoVE9QKSAtSS4uLy4uL2luY2x1ZGUKLUNGTEFHPS1nCi1NQUtFRklMRT0JTWFrZWZpbGUKLUFSPQkJYXIgcgotCi1DRkxBR1M9ICQoSU5DTFVERVMpICQoQ0ZMQUcpCi0KLUdFTkVSQUw9TWFrZWZpbGUKLVRFU1Q9ZXZwX3Rlc3QuYwotVEVTVERBVEE9ZXZwdGVzdHMudHh0Ci1BUFBTPQotCi1MSUI9JChUT1ApL2xpYmNyeXB0by5hCi1MSUJTUkM9IGVuY29kZS5jIGRpZ2VzdC5jIGRpZ19lbmcuYyBldnBfZW5jLmMgZXZwX2tleS5jIGV2cF9hY25mLmMgZXZwX2NuZi5jIFwKLQllX2Rlcy5jIGVfYmYuYyBlX2lkZWEuYyBlX2RlczMuYyBlX2NhbWVsbGlhLmNcCi0JZV9yYzQuYyBlX2Flcy5jIG5hbWVzLmMgZV9zZWVkLmMgXAotCWVfeGNiY19kLmMgZV9yYzIuYyBlX2Nhc3QuYyBlX3JjNS5jIGVuY19taW4uYyBcCi0JbV9udWxsLmMgbV9tZDIuYyBtX21kNC5jIG1fbWQ1LmMgbV9zaGEuYyBtX3NoYTEuYyBcCi0JbV9kc3MuYyBtX2RzczEuYyBtX21kYzIuYyBtX3JpcGVtZC5jIG1fZWNkc2EuY1wKLQlwX29wZW4uYyBwX3NlYWwuYyBwX3NpZ24uYyBwX3ZlcmlmeS5jIHBfbGliLmMgcF9lbmMuYyBwX2RlYy5jIFwKLQliaW9fbWQuYyBiaW9fYjY0LmMgYmlvX2VuYy5jIGV2cF9lcnIuYyBlX251bGwuYyBcCi0JY19hbGwuYyBjX2FsbGMuYyBjX2FsbGQuYyBldnBfbGliLmMgYmlvX29rLmMgXAotCWV2cF9wa2V5LmMgZXZwX3BiZS5jIHA1X2NycHQuYyBwNV9jcnB0Mi5jIFwKLQllX29sZC5jCi0KLUxJQk9CSj0JZW5jb2RlLm8gZGlnZXN0Lm8gZGlnX2VuZy5vIGV2cF9lbmMubyBldnBfa2V5Lm8gZXZwX2FjbmYubyBldnBfY25mLm8gXAotCWVfZGVzLm8gZV9iZi5vIGVfaWRlYS5vIGVfZGVzMy5vIGVfY2FtZWxsaWEub1wKLQllX3JjNC5vIGVfYWVzLm8gbmFtZXMubyBlX3NlZWQubyBcCi0JZV94Y2JjX2QubyBlX3JjMi5vIGVfY2FzdC5vIGVfcmM1Lm8gZW5jX21pbi5vIFwKLQltX251bGwubyBtX21kMi5vIG1fbWQ0Lm8gbV9tZDUubyBtX3NoYS5vIG1fc2hhMS5vIFwKLQltX2Rzcy5vIG1fZHNzMS5vIG1fbWRjMi5vIG1fcmlwZW1kLm8gbV9lY2RzYS5vXAotCXBfb3Blbi5vIHBfc2VhbC5vIHBfc2lnbi5vIHBfdmVyaWZ5Lm8gcF9saWIubyBwX2VuYy5vIHBfZGVjLm8gXAotCWJpb19tZC5vIGJpb19iNjQubyBiaW9fZW5jLm8gZXZwX2Vyci5vIGVfbnVsbC5vIFwKLQljX2FsbC5vIGNfYWxsYy5vIGNfYWxsZC5vIGV2cF9saWIubyBiaW9fb2subyBcCi0JZXZwX3BrZXkubyBldnBfcGJlLm8gcDVfY3JwdC5vIHA1X2NycHQyLm8gXAotCWVfb2xkLm8KLQotU1JDPSAkKExJQlNSQykKLQotRVhIRUFERVI9IGV2cC5oCi1IRUFERVI9CSQoRVhIRUFERVIpCi0KLUFMTD0gICAgJChHRU5FUkFMKSAkKFNSQykgJChIRUFERVIpCi0KLXRvcDoKLQkoY2QgLi4vLi47ICQoTUFLRSkgRElSUz1jcnlwdG8gU0RJUlM9JChESVIpIHN1Yl9hbGwpCi0KLWFsbDoJbGliCi0KLWxpYjoJJChMSUJPQkopCi0JJChBUlgpICQoTElCKSAkKExJQk9CSikKLQkkKFJBTkxJQikgJChMSUIpIHx8IGVjaG8gTmV2ZXIgbWluZC4KLQlAdG91Y2ggbGliCi0KLWZpbGVzOgotCSQoUEVSTCkgJChUT1ApL3V0aWwvZmlsZXMucGwgTWFrZWZpbGUgPj4gJChUT1ApL01JTkZPCi0KLWxpbmtzOgotCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9pbmNsdWRlL29wZW5zc2wgJChFWEhFQURFUikKLQlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vdGVzdCAkKFRFU1QpCi0JY3AgJChURVNUREFUQSkgLi4vLi4vdGVzdAotCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9hcHBzICQoQVBQUykKLQotaW5zdGFsbDoKLQlAWyAtbiAiJChJTlNUQUxMVE9QKSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdG9wIE1ha2VmaWxlLi4uCi0JQGhlYWRlcmxpc3Q9IiQoRVhIRUFERVIpIjsgZm9yIGkgaW4gJCRoZWFkZXJsaXN0IDsgXAotCWRvICBcCi0JKGNwICQkaSAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaTsgXAotCWNobW9kIDY0NCAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaSApOyBcCi0JZG9uZTsKLQotdGFnczoKLQljdGFncyAkKFNSQykKLQotdGVzdHM6Ci0KLWxpbnQ6Ci0JbGludCAtRExJTlQgJChJTkNMVURFUykgJChTUkMpPmZsdWZmCi0KLWRlcGVuZDoKLQlAWyAtbiAiJChNQUtFREVQRU5EKSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdXBwZXIgTWFrZWZpbGUuLi4KLQkkKE1BS0VERVBFTkQpIC0tICQoQ0ZMQUcpICQoSU5DTFVERVMpICQoREVQRkxBRykgLS0gJChMSUJTUkMpCi0KLWRjbGVhbjoKLQkkKFBFUkwpIC1wZSAnaWYgKC9eIyBETyBOT1QgREVMRVRFIFRISVMgTElORS8pIHtwcmludDsgZXhpdCgwKTt9JyAkKE1BS0VGSUxFKSA+TWFrZWZpbGUubmV3Ci0JbXYgLWYgTWFrZWZpbGUubmV3ICQoTUFLRUZJTEUpCi0KLWNsZWFuOgotCXJtIC1mICoubyAqLm9iaiBsaWIgdGFncyBjb3JlIC5wdXJlIC5uZnMqICoub2xkICouYmFrIGZsdWZmCi0KLSMgRE8gTk9UIERFTEVURSBUSElTIExJTkUgLS0gbWFrZSBkZXBlbmQgZGVwZW5kcyBvbiBpdC4KLQotYmlvX2I2NC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotYmlvX2I2NC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1iaW9fYjY0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotYmlvX2I2NC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1iaW9fYjY0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLWJpb19iNjQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi1iaW9fYjY0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi1iaW9fYjY0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotYmlvX2I2NC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotYmlvX2I2NC5vOiAuLi9jcnlwdGxpYi5oIGJpb19iNjQuYwotYmlvX2VuYy5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotYmlvX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1iaW9fZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotYmlvX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1iaW9fZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLWJpb19lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi1iaW9fZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi1iaW9fZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotYmlvX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotYmlvX2VuYy5vOiAuLi9jcnlwdGxpYi5oIGJpb19lbmMuYwotYmlvX21kLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotYmlvX21kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWJpb19tZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWJpb19tZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotYmlvX21kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLWJpb19tZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1iaW9fbWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWJpb19tZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWJpb19tZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGJpb19tZC5jCi1iaW9fb2subzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1iaW9fb2subzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotYmlvX29rLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotYmlvX29rLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi1iaW9fb2subzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotYmlvX29rLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWJpb19vay5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotYmlvX29rLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1iaW9fb2subzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLWJpb19vay5vOiAuLi9jcnlwdGxpYi5oIGJpb19vay5jCi1jX2FsbC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWNfYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWNfYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1jX2FsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi1jX2FsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZW5naW5lLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1jX2FsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotY19hbGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotY19hbGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotY19hbGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWNfYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotY19hbGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1jX2FsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi1jX2FsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9jcnlwdGxpYi5oIGNfYWxsLmMKLWNfYWxsYy5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWNfYWxsYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1jX2FsbGMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLWNfYWxsYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi1jX2FsbGMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotY19hbGxjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLWNfYWxsYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLWNfYWxsYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotY19hbGxjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzMTIuaAotY19hbGxjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotY19hbGxjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotY19hbGxjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLWNfYWxsYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9jcnlwdGxpYi5oIGNfYWxsYy5jCi1jX2FsbGQubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1jX2FsbGQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotY19hbGxkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1jX2FsbGQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotY19hbGxkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLWNfYWxsZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1jX2FsbGQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi1jX2FsbGQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLWNfYWxsZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczEyLmgKLWNfYWxsZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLWNfYWxsZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWNfYWxsZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi1jX2FsbGQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vY3J5cHRsaWIuaCBjX2FsbGQuYwotZGlnX2VuZy5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotZGlnX2VuZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1kaWdfZW5nLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotZGlnX2VuZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi1kaWdfZW5nLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lbmdpbmUuaAotZGlnX2VuZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1kaWdfZW5nLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLWRpZ19lbmcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi1kaWdfZW5nLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi1kaWdfZW5nLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi1kaWdfZW5nLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLWRpZ19lbmcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLWRpZ19lbmcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAotZGlnX2VuZy5vOiAuLi9jcnlwdGxpYi5oIGRpZ19lbmcuYyBldnBfbG9jbC5oCi1kaWdlc3QubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1kaWdlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotZGlnZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1kaWdlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotZGlnZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lbmdpbmUuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWRpZ2VzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotZGlnZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLWRpZ2VzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1kaWdlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWRpZ2VzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLWRpZ2VzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWRpZ2VzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi1kaWdlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vY3J5cHRsaWIuaCBkaWdlc3QuYyBldnBfbG9jbC5oCi1lX2Flcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotZV9hZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotZV9hZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1lX2Flcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotZV9hZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotZV9hZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotZV9hZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWVfYWVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotZV9hZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZV9hZXMuYyBldnBfbG9jbC5oCi1lX2JmLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotZV9iZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmxvd2Zpc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLWVfYmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1lX2JmLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLWVfYmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotZV9iZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLWVfYmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLWVfYmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1lX2JmLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1lX2JmLm86IC4uL2NyeXB0bGliLmggZV9iZi5jIGV2cF9sb2NsLmgKLWVfY2FtZWxsaWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggZV9jYW1lbGxpYS5jCi1lX2Nhc3QubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1lX2Nhc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jYXN0LmgKLWVfY2FzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLWVfY2FzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1lX2Nhc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotZV9jYXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotZV9jYXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi1lX2Nhc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1lX2Nhc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLWVfY2FzdC5vOiAuLi9jcnlwdGxpYi5oIGVfY2FzdC5jIGV2cF9sb2NsLmgKLWVfZGVzLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotZV9kZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotZV9kZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Rlcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kZXNfb2xkLmgKLWVfZGVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotZV9kZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLWVfZGVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLWVfZGVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWVfZGVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1lX2Rlcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotZV9kZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLWVfZGVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC91aS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC91aV9jb21wYXQuaAotZV9kZXMubzogLi4vY3J5cHRsaWIuaCBlX2Rlcy5jIGV2cF9sb2NsLmgKLWVfZGVzMy5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWVfZGVzMy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1lX2RlczMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Rlcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kZXNfb2xkLmgKLWVfZGVzMy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWVfZGVzMy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotZV9kZXMzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLWVfZGVzMy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1lX2RlczMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWVfZGVzMy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotZV9kZXMzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1lX2RlczMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3VpLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3VpX2NvbXBhdC5oCi1lX2RlczMubzogLi4vY3J5cHRsaWIuaCBlX2RlczMuYyBldnBfbG9jbC5oCi1lX2lkZWEubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1lX2lkZWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotZV9pZGVhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotZV9pZGVhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi1lX2lkZWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2lkZWEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotZV9pZGVhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotZV9pZGVhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi1lX2lkZWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1lX2lkZWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLWVfaWRlYS5vOiAuLi9jcnlwdGxpYi5oIGVfaWRlYS5jIGV2cF9sb2NsLmgKLWVfbnVsbC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWVfbnVsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1lX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1lX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLWVfbnVsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi1lX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotZV9udWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1lX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1lX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBlX251bGwuYwotZV9vbGQubzogZV9vbGQuYwotZV9yYzIubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1lX3JjMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1lX3JjMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWVfcmMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi1lX3JjMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi1lX3JjMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1lX3JjMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotZV9yYzIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JjMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotZV9yYzIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLWVfcmMyLm86IC4uL2NyeXB0bGliLmggZV9yYzIuYyBldnBfbG9jbC5oCi1lX3JjNC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWVfcmM0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWVfcmM0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotZV9yYzQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLWVfcmM0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLWVfcmM0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWVfcmM0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1lX3JjNC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmM0LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1lX3JjNC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotZV9yYzQubzogLi4vY3J5cHRsaWIuaCBlX3JjNC5jIGV2cF9sb2NsLmgKLWVfcmM1Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWVfcmM1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWVfcmM1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotZV9yYzUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWVfcmM1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1lX3JjNS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWVfcmM1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggZV9yYzUuYwotZV9zZWVkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1lX3NlZWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1lX3NlZWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotZV9zZWVkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLWVfc2VlZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLWVfc2VlZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotZV9zZWVkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotZV9zZWVkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1lX3NlZWQubzogZV9zZWVkLmMKLWVfeGNiY19kLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi1lX3hjYmNfZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1lX3hjYmNfZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Rlcy5oCi1lX3hjYmNfZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZGVzX29sZC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1lX3hjYmNfZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1lX3hjYmNfZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1lX3hjYmNfZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLWVfeGNiY19kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1lX3hjYmNfZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotZV94Y2JjX2QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1lX3hjYmNfZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvdWkuaAotZV94Y2JjX2QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3VpX2NvbXBhdC5oIC4uL2NyeXB0bGliLmggZV94Y2JjX2QuYwotZW5jX21pbi5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotZW5jX21pbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1lbmNfbWluLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotZW5jX21pbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi1lbmNfbWluLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lbmdpbmUuaAotZW5jX21pbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1lbmNfbWluLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLWVuY19taW4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi1lbmNfbWluLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi1lbmNfbWluLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi1lbmNfbWluLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1lbmNfbWluLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotZW5jX21pbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi1lbmNfbWluLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2NyeXB0bGliLmggZW5jX21pbi5jIGV2cF9sb2NsLmgKLWVuY29kZS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWVuY29kZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1lbmNvZGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1lbmNvZGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLWVuY29kZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi1lbmNvZGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotZW5jb2RlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1lbmNvZGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1lbmNvZGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBlbmNvZGUuYwotZXZwX2FjbmYubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLWV2cF9hY25mLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLWV2cF9hY25mLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1ldnBfYWNuZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWV2cF9hY25mLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi1ldnBfYWNuZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi1ldnBfYWNuZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1ldnBfYWNuZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotZXZwX2FjbmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1ldnBfYWNuZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGV2cF9hY25mLmMKLWV2cF9jbmYubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLWV2cF9jbmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotZXZwX2NuZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotZXZwX2NuZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZHNvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLWV2cF9jbmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotZXZwX2NuZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWV2cF9jbmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLWV2cF9jbmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotZXZwX2NuZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1ldnBfY25mLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1ldnBfY25mLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotZXZwX2NuZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWV2cF9jbmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotZXZwX2NuZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOXYzLmgKLWV2cF9jbmYubzogLi4vY3J5cHRsaWIuaCBldnBfY25mLmMKLWV2cF9lbmMubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLWV2cF9lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotZXZwX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLWV2cF9lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotZXZwX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZW5naW5lLmgKLWV2cF9lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotZXZwX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1ldnBfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotZXZwX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotZXZwX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAotZXZwX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotZXZwX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWV2cF9lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotZXZwX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9jcnlwdGxpYi5oIGV2cF9lbmMuYyBldnBfbG9jbC5oCi1ldnBfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1ldnBfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotZXZwX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1ldnBfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLWV2cF9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi1ldnBfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi1ldnBfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotZXZwX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotZXZwX2Vyci5vOiBldnBfZXJyLmMKLWV2cF9rZXkubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLWV2cF9rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotZXZwX2tleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLWV2cF9rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotZXZwX2tleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWV2cF9rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLWV2cF9rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotZXZwX2tleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1ldnBfa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1ldnBfa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotZXZwX2tleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWV2cF9rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3VpLmgKLWV2cF9rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAotZXZwX2tleS5vOiAuLi9jcnlwdGxpYi5oIGV2cF9rZXkuYwotZXZwX2xpYi5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotZXZwX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1ldnBfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotZXZwX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1ldnBfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLWV2cF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi1ldnBfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi1ldnBfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotZXZwX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotZXZwX2xpYi5vOiAuLi9jcnlwdGxpYi5oIGV2cF9saWIuYwotZXZwX3BiZS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotZXZwX3BiZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1ldnBfcGJlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotZXZwX3BiZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi1ldnBfcGJlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotZXZwX3BiZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotZXZwX3BiZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi1ldnBfcGJlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWV2cF9wYmUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWV2cF9wYmUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1ldnBfcGJlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotZXZwX3BiZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi1ldnBfcGJlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2NyeXB0bGliLmggZXZwX3BiZS5jCi1ldnBfcGtleS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotZXZwX3BrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oCi1ldnBfcGtleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1ldnBfcGtleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLWV2cF9wa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKLWV2cF9wa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotZXZwX3BrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLWV2cF9wa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLWV2cF9wa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWV2cF9wa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1ldnBfcGtleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCi1ldnBfcGtleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcnNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1ldnBfcGtleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWV2cF9wa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLWV2cF9wa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2NyeXB0bGliLmggZXZwX3BrZXkuYwotbV9kc3MubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1tX2Rzcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1tX2Rzcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLW1fZHNzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKLW1fZHNzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotbV9kc3MubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLW1fZHNzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLW1fZHNzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLW1fZHNzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1tX2Rzcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLW1fZHNzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotbV9kc3MubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotbV9kc3MubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vY3J5cHRsaWIuaCBtX2Rzcy5jCi1tX2RzczEubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1tX2RzczEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotbV9kc3MxLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotbV9kc3MxLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKLW1fZHNzMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLW1fZHNzMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotbV9kc3MxLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLW1fZHNzMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1tX2RzczEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLW1fZHNzMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLW1fZHNzMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLW1fZHNzMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi1tX2RzczEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vY3J5cHRsaWIuaCBtX2RzczEuYwotbV9lY2RzYS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotbV9lY2RzYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1tX2VjZHNhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotbV9lY2RzYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi1tX2VjZHNhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotbV9lY2RzYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotbV9lY2RzYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi1tX2VjZHNhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLW1fZWNkc2EubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLW1fZWNkc2EubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1tX2VjZHNhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotbV9lY2RzYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi1tX2VjZHNhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2NyeXB0bGliLmggbV9lY2RzYS5jCi1tX21kMi5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLW1fbWQyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLW1fbWQyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1tX21kMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi1tX21kMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1tX21kMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1tX21kMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbWQyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotbV9tZDIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotbV9tZDIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLW1fbWQyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAotbV9tZDIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotbV9tZDIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLW1fbWQyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmgKLW1fbWQyLm86IC4uL2NyeXB0bGliLmggZXZwX2xvY2wuaCBtX21kMi5jCi1tX21kNC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLW1fbWQ0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLW1fbWQ0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1tX21kNC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi1tX21kNC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1tX21kNC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1tX21kNC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbWQ0LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotbV9tZDQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotbV9tZDQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLW1fbWQ0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAotbV9tZDQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotbV9tZDQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLW1fbWQ0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmgKLW1fbWQ0Lm86IC4uL2NyeXB0bGliLmggZXZwX2xvY2wuaCBtX21kNC5jCi1tX21kNS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLW1fbWQ1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLW1fbWQ1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1tX21kNS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi1tX21kNS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1tX21kNS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1tX21kNS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbWQ1LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotbV9tZDUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotbV9tZDUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLW1fbWQ1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAotbV9tZDUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotbV9tZDUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLW1fbWQ1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmgKLW1fbWQ1Lm86IC4uL2NyeXB0bGliLmggZXZwX2xvY2wuaCBtX21kNS5jCi1tX21kYzIubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotbV9tZGMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLW1fbWRjMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLW1fbWRjMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotbV9tZGMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1tX21kYzIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1tX21kYzIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBldnBfbG9jbC5oIG1fbWRjMi5jCi1tX251bGwubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1tX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotbV9udWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1tX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotbV9udWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLW1fbnVsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1tX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi1tX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLW1fbnVsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAotbV9udWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLW1fbnVsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotbV9udWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmgKLW1fbnVsbC5vOiAuLi9jcnlwdGxpYi5oIG1fbnVsbC5jCi1tX3JpcGVtZC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotbV9yaXBlbWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotbV9yaXBlbWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1tX3JpcGVtZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi1tX3JpcGVtZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLW1fcmlwZW1kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi1tX3JpcGVtZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi1tX3JpcGVtZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1tX3JpcGVtZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotbV9yaXBlbWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JpcGVtZC5oCi1tX3JpcGVtZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcnNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1tX3JpcGVtZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLW1fcmlwZW1kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLW1fcmlwZW1kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2NyeXB0bGliLmggbV9yaXBlbWQuYwotbV9zaGEubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1tX3NoYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1tX3NoYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotbV9zaGEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotbV9zaGEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotbV9zaGEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotbV9zaGEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi1tX3NoYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotbV9zaGEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLW1fc2hhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLW1fc2hhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotbV9zaGEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotbV9zaGEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vY3J5cHRsaWIuaCBldnBfbG9jbC5oIG1fc2hhLmMKLW1fc2hhMS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLW1fc2hhMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1tX3NoYTEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLW1fc2hhMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi1tX3NoYTEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotbV9zaGExLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLW1fc2hhMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLW1fc2hhMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotbV9zaGExLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi1tX3NoYTEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotbV9zaGExLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotbV9zaGExLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLW1fc2hhMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9jcnlwdGxpYi5oIG1fc2hhMS5jCi1uYW1lcy5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLW5hbWVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLW5hbWVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1uYW1lcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi1uYW1lcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1uYW1lcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1uYW1lcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLW5hbWVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi1uYW1lcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAotbmFtZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotbmFtZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLW5hbWVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmgKLW5hbWVzLm86IC4uL2NyeXB0bGliLmggbmFtZXMuYwotcDVfY3JwdC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotcDVfY3JwdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1wNV9jcnB0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotcDVfY3JwdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi1wNV9jcnB0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotcDVfY3JwdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotcDVfY3JwdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi1wNV9jcnB0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXA1X2NycHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXA1X2NycHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1wNV9jcnB0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotcDVfY3JwdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi1wNV9jcnB0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2NyeXB0bGliLmggcDVfY3JwdC5jCi1wNV9jcnB0Mi5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotcDVfY3JwdDIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotcDVfY3JwdDIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1wNV9jcnB0Mi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi1wNV9jcnB0Mi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLXA1X2NycHQyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi1wNV9jcnB0Mi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1wNV9jcnB0Mi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLXA1X2NycHQyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1wNV9jcnB0Mi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotcDVfY3JwdDIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1wNV9jcnB0Mi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLXA1X2NycHQyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLXA1X2NycHQyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2NyeXB0bGliLmggcDVfY3JwdDIuYwotcF9kZWMubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1wX2RlYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1wX2RlYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotcF9kZWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotcF9kZWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotcF9kZWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotcF9kZWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi1wX2RlYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotcF9kZWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLXBfZGVjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCi1wX2RlYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCi1wX2RlYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotcF9kZWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAotcF9kZWMubzogLi4vY3J5cHRsaWIuaCBwX2RlYy5jCi1wX2VuYy5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXBfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLXBfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1wX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi1wX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1wX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1wX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLXBfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi1wX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAotcF9lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKLXBfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLXBfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1wX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oCi1wX2VuYy5vOiAuLi9jcnlwdGxpYi5oIHBfZW5jLmMKLXBfbGliLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi1wX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMV9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXBfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotcF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kaC5oCi1wX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLXBfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKLXBfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotcF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLXBfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLXBfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXBfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1wX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKLXBfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLXBfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1wX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oCi1wX2xpYi5vOiAuLi9jcnlwdGxpYi5oIHBfbGliLmMKLXBfb3Blbi5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXBfb3Blbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1wX29wZW4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLXBfb3Blbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi1wX29wZW4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotcF9vcGVuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLXBfb3Blbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLXBfb3Blbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotcF9vcGVuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi1wX29wZW4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotcF9vcGVuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotcF9vcGVuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLXBfb3Blbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9jcnlwdGxpYi5oIHBfb3Blbi5jCi1wX3NlYWwubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1wX3NlYWwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotcF9zZWFsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1wX3NlYWwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotcF9zZWFsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLXBfc2VhbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1wX3NlYWwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi1wX3NlYWwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLXBfc2VhbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAotcF9zZWFsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCi1wX3NlYWwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotcF9zZWFsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1wX3NlYWwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAotcF9zZWFsLm86IC4uL2NyeXB0bGliLmggcF9zZWFsLmMKLXBfc2lnbi5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXBfc2lnbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1wX3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLXBfc2lnbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi1wX3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotcF9zaWduLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLXBfc2lnbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLXBfc2lnbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotcF9zaWduLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi1wX3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotcF9zaWduLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1wX3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAotcF9zaWduLm86IC4uL2NyeXB0bGliLmggcF9zaWduLmMKLXBfdmVyaWZ5Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi1wX3ZlcmlmeS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1wX3ZlcmlmeS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLXBfdmVyaWZ5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKLXBfdmVyaWZ5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotcF92ZXJpZnkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLXBfdmVyaWZ5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLXBfdmVyaWZ5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXBfdmVyaWZ5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1wX3ZlcmlmeS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLXBfdmVyaWZ5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotcF92ZXJpZnkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotcF92ZXJpZnkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vY3J5cHRsaWIuaCBwX3ZlcmlmeS5jCmRpZmYgLS1naXQgYS9jcnlwdG8vZXZwL2Jpb19lbmMuYyBiL2NyeXB0by9ldnAvYmlvX2VuYy5jCmluZGV4IGY2YWM5NGMuLmI2ZWZiNWYgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ldnAvYmlvX2VuYy5jCisrKyBiL2NyeXB0by9ldnAvYmlvX2VuYy5jCkBAIC0zNjEsOCArMzYxLDEwIEBACiAJY2FzZSBCSU9fQ1RSTF9EVVA6CiAJCWRiaW89KEJJTyAqKXB0cjsKIAkJZGN0eD0oQklPX0VOQ19DVFggKilkYmlvLT5wdHI7Ci0JCW1lbWNweSgmKGRjdHgtPmNpcGhlciksJihjdHgtPmNpcGhlciksc2l6ZW9mKGN0eC0+Y2lwaGVyKSk7Ci0JCWRiaW8tPmluaXQ9MTsKKwkJRVZQX0NJUEhFUl9DVFhfaW5pdCgmZGN0eC0+Y2lwaGVyKTsKKwkJcmV0ID0gRVZQX0NJUEhFUl9DVFhfY29weSgmZGN0eC0+Y2lwaGVyLCZjdHgtPmNpcGhlcik7CisJCWlmIChyZXQpCisJCQlkYmlvLT5pbml0PTE7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldD1CSU9fY3RybChiLT5uZXh0X2JpbyxjbWQsbnVtLHB0cik7CmRpZmYgLS1naXQgYS9jcnlwdG8vZXZwL2Jpb19tZC5jIGIvY3J5cHRvL2V2cC9iaW9fbWQuYwppbmRleCBlZDVjMTEzLi45ODQxZTMyIDEwMDY0NAotLS0gYS9jcnlwdG8vZXZwL2Jpb19tZC5jCisrKyBiL2NyeXB0by9ldnAvYmlvX21kLmMKQEAgLTEzMCw4ICsxMzAsOCBAQAogCQl7CiAJCWlmIChyZXQgPiAwKQogCQkJewotCQkJRVZQX0RpZ2VzdFVwZGF0ZShjdHgsKHVuc2lnbmVkIGNoYXIgKilvdXQsCi0JCQkJKHVuc2lnbmVkIGludClyZXQpOworCQkJaWYgKEVWUF9EaWdlc3RVcGRhdGUoY3R4LCh1bnNpZ25lZCBjaGFyICopb3V0LAorCQkJCSh1bnNpZ25lZCBpbnQpcmV0KTw9MCkgcmV0dXJuICgtMSk7CiAJCQl9CiAJCX0KIAlCSU9fY2xlYXJfcmV0cnlfZmxhZ3MoYik7CkBAIC0xNTcsOCArMTU3LDExIEBACiAJCQkJKHVuc2lnbmVkIGludClyZXQpOwogCQkJfQogCQl9Ci0JQklPX2NsZWFyX3JldHJ5X2ZsYWdzKGIpOwotCUJJT19jb3B5X25leHRfcmV0cnkoYik7CisJaWYoYi0+bmV4dF9iaW8gIT0gTlVMTCkKKwkJeworCQlCSU9fY2xlYXJfcmV0cnlfZmxhZ3MoYik7CisJCUJJT19jb3B5X25leHRfcmV0cnkoYik7CisJCX0KIAlyZXR1cm4ocmV0KTsKIAl9CiAKQEAgLTE5NCw2ICsxOTcsNyBAQAogCWNhc2UgQklPX0NfR0VUX01EX0NUWDoKIAkJcGN0eD1wdHI7CiAJCSpwY3R4PWN0eDsKKwkJYi0+aW5pdCA9IDE7CiAJCWJyZWFrOwogCWNhc2UgQklPX0NfU0VUX01EX0NUWDoKIAkJaWYgKGItPmluaXQpCkBAIC0yNDksNyArMjUzLDkgQEAKIAljdHg9YnAtPnB0cjsKIAlpZiAoc2l6ZSA8IGN0eC0+ZGlnZXN0LT5tZF9zaXplKQogCQlyZXR1cm4oMCk7Ci0JRVZQX0RpZ2VzdEZpbmFsX2V4KGN0eCwodW5zaWduZWQgY2hhciAqKWJ1ZiwmcmV0KTsKKwlpZiAoRVZQX0RpZ2VzdEZpbmFsX2V4KGN0eCwodW5zaWduZWQgY2hhciAqKWJ1ZiwmcmV0KTw9MCkgCisJCXJldHVybiAtMTsKKwkJCiAJcmV0dXJuKChpbnQpcmV0KTsKIAl9CiAKZGlmZiAtLWdpdCBhL2NyeXB0by9ldnAvY19hbGwuYyBiL2NyeXB0by9ldnAvY19hbGwuYwppbmRleCBhNWRhNTJlLi43NjZjNGNlIDEwMDY0NAotLS0gYS9jcnlwdG8vZXZwL2NfYWxsLmMKKysrIGIvY3J5cHRvL2V2cC9jX2FsbC5jCkBAIC04Myw3ICs4Myw3IEBACiAJT3BlblNTTF9hZGRfYWxsX2NpcGhlcnMoKTsKIAlPcGVuU1NMX2FkZF9hbGxfZGlnZXN0cygpOwogI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQotIyBpZiBkZWZpbmVkKF9fT3BlbkJTRF9fKSB8fCBkZWZpbmVkKF9fRnJlZUJTRF9fKQorIyBpZiBkZWZpbmVkKF9fT3BlbkJTRF9fKSB8fCBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKEhBVkVfQ1JZUFRPREVWKQogCUVOR0lORV9zZXR1cF9ic2RfY3J5cHRvZGV2KCk7CiAjIGVuZGlmCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2NyeXB0by9ldnAvY19hbGxjLmMgYi9jcnlwdG8vZXZwL2NfYWxsYy5jCmluZGV4IGU0NWNlZTguLmM1ZjkyNjggMTAwNjQ0Ci0tLSBhL2NyeXB0by9ldnAvY19hbGxjLmMKKysrIGIvY3J5cHRvL2V2cC9jX2FsbGMuYwpAQCAtMjIxLDcgKzIyMSw0IEBACiAJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fY2FtZWxsaWFfMjU2X2NiYywiQ0FNRUxMSUEyNTYiKTsKIAlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9jYW1lbGxpYV8yNTZfY2JjLCJjYW1lbGxpYTI1NiIpOwogI2VuZGlmCi0KLQlQS0NTMTJfUEJFX2FkZCgpOwotCVBLQ1M1X1BCRV9hZGQoKTsKIAl9CmRpZmYgLS1naXQgYS9jcnlwdG8vZXZwL2NfYWxsZC5jIGIvY3J5cHRvL2V2cC9jX2FsbGQuYwppbmRleCBlMDg0MWQxLi4zMTFlMWZlIDEwMDY0NAotLS0gYS9jcnlwdG8vZXZwL2NfYWxsZC5jCisrKyBiL2NyeXB0by9ldnAvY19hbGxkLmMKQEAgLTc4LDcgKzc4LDcgQEAKIAlFVlBfYWRkX2RpZ2VzdChFVlBfZHNzKCkpOwogI2VuZGlmCiAjZW5kaWYKLSNpZm5kZWYgT1BFTlNTTF9OT19TSEEKKyNpZiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQSkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEExKQogCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGExKCkpOwogCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX3NoYTEsInNzbDMtc2hhMSIpOwogCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX3NoYTFXaXRoUlNBRW5jcnlwdGlvbixTTl9zaGExV2l0aFJTQSk7CkBAIC0xMDgsNCArMTA4LDcgQEAKIAlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMzg0KCkpOwogCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGE1MTIoKSk7CiAjZW5kaWYKKyNpZm5kZWYgT1BFTlNTTF9OT19XSElSTFBPT0wKKwlFVlBfYWRkX2RpZ2VzdChFVlBfd2hpcmxwb29sKCkpOworI2VuZGlmCiAJfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2V2cC9kaWdfZW5nLmMgYi9jcnlwdG8vZXZwL2RpZ19lbmcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRjZGY5My4uMDAwMDAwMAotLS0gYS9jcnlwdG8vZXZwL2RpZ19lbmcuYworKysgL2Rldi9udWxsCkBAIC0xLDE4MCArMCwwIEBACi0vKiBjcnlwdG8vZXZwL2RpZ2VzdC5jICovCi0vKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCi0gKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCi0gKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCi0gKiAKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcwotICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAotICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCi0gKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCi0gKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSAqIAotICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KLSAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KLSAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KLSAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCi0gKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKLSAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKLSAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCi0gKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKLSAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgotICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCi0gKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgotICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICogCi0gKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgotICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCi0gKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCi0gKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQotICovCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0gKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0gKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0gKgotICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0gKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotICoKLSAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotICoKLSAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSAqICAgIGFja25vd2xlZGdtZW50OgotICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0gKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKgotICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCi0gKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCi0gKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSAiY3J5cHRsaWIuaCIKLSNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KLSNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQotI2luY2x1ZGUgPG9wZW5zc2wvZW5naW5lLmg+Ci0jZW5kaWYKLSNpbmNsdWRlICJldnBfbG9jbC5oIgotCi0jaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCi0KLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLQotc3RhdGljIGludCBkb19ldnBfbWRfZW5naW5lX2Z1bGwoRVZQX01EX0NUWCAqY3R4LCBjb25zdCBFVlBfTUQgKipwdHlwZSwgRU5HSU5FICppbXBsKQotCXsKLQlpZiAoKnB0eXBlKQotCQl7Ci0JCS8qIEVuc3VyZSBhbiBFTkdJTkUgbGVmdCBseWluZyBhcm91bmQgZnJvbSBsYXN0IHRpbWUgaXMgY2xlYXJlZAotCQkgKiAodGhlIHByZXZpb3VzIGNoZWNrIGF0dGVtcHRlZCB0byBhdm9pZCB0aGlzIGlmIHRoZSBzYW1lCi0JCSAqIEVOR0lORSBhbmQgRVZQX01EIGNvdWxkIGJlIHVzZWQpLiAqLwotCQlpZihjdHgtPmVuZ2luZSkKLQkJCUVOR0lORV9maW5pc2goY3R4LT5lbmdpbmUpOwotCQlpZihpbXBsKQotCQkJewotCQkJaWYgKCFFTkdJTkVfaW5pdChpbXBsKSkKLQkJCQl7Ci0JCQkJRVZQZXJyKEVWUF9GX0RPX0VWUF9NRF9FTkdJTkVfRlVMTCxFVlBfUl9JTklUSUFMSVpBVElPTl9FUlJPUik7Ci0JCQkJcmV0dXJuIDA7Ci0JCQkJfQotCQkJfQotCQllbHNlCi0JCQkvKiBBc2sgaWYgYW4gRU5HSU5FIGlzIHJlc2VydmVkIGZvciB0aGlzIGpvYiAqLwotCQkJaW1wbCA9IEVOR0lORV9nZXRfZGlnZXN0X2VuZ2luZSgoKnB0eXBlKS0+dHlwZSk7Ci0JCWlmKGltcGwpCi0JCQl7Ci0JCQkvKiBUaGVyZSdzIGFuIEVOR0lORSBmb3IgdGhpcyBqb2IgLi4uIChhcHBhcmVudGx5KSAqLwotCQkJY29uc3QgRVZQX01EICpkID0gRU5HSU5FX2dldF9kaWdlc3QoaW1wbCwgKCpwdHlwZSktPnR5cGUpOwotCQkJaWYoIWQpCi0JCQkJewotCQkJCS8qIFNhbWUgY29tbWVudCBmcm9tIGV2cF9lbmMuYyAqLwotCQkJCUVWUGVycihFVlBfRl9ET19FVlBfTURfRU5HSU5FX0ZVTEwsRVZQX1JfSU5JVElBTElaQVRJT05fRVJST1IpOwotCQkJCXJldHVybiAwOwotCQkJCX0KLQkJCS8qIFdlJ2xsIHVzZSB0aGUgRU5HSU5FJ3MgcHJpdmF0ZSBkaWdlc3QgZGVmaW5pdGlvbiAqLwotCQkJKnB0eXBlID0gZDsKLQkJCS8qIFN0b3JlIHRoZSBFTkdJTkUgZnVuY3Rpb25hbCByZWZlcmVuY2Ugc28gd2Uga25vdwotCQkJICogJ3R5cGUnIGNhbWUgZnJvbSBhbiBFTkdJTkUgYW5kIHdlIG5lZWQgdG8gcmVsZWFzZQotCQkJICogaXQgd2hlbiBkb25lLiAqLwotCQkJY3R4LT5lbmdpbmUgPSBpbXBsOwotCQkJfQotCQllbHNlCi0JCQljdHgtPmVuZ2luZSA9IE5VTEw7Ci0JCX0KLQllbHNlCi0JaWYoIWN0eC0+ZGlnZXN0KQotCQl7Ci0JCUVWUGVycihFVlBfRl9ET19FVlBfTURfRU5HSU5FX0ZVTEwsRVZQX1JfTk9fRElHRVNUX1NFVCk7Ci0JCXJldHVybiAwOwotCQl9Ci0JcmV0dXJuIDE7Ci0JfQotCi12b2lkIGludF9FVlBfTURfaW5pdF9lbmdpbmVfY2FsbGJhY2tzKHZvaWQpCi0JewotCWludF9FVlBfTURfc2V0X2VuZ2luZV9jYWxsYmFja3MoCi0JCUVOR0lORV9pbml0LCBFTkdJTkVfZmluaXNoLCBkb19ldnBfbWRfZW5naW5lX2Z1bGwpOwotCX0KLSNlbmRpZgotI2VuZGlmCmRpZmYgLS1naXQgYS9jcnlwdG8vZXZwL2RpZ2VzdC5jIGIvY3J5cHRvL2V2cC9kaWdlc3QuYwppbmRleCA2YThmMzliLi45ODJiYTJiIDEwMDY0NAotLS0gYS9jcnlwdG8vZXZwL2RpZ2VzdC5jCisrKyBiL2NyeXB0by9ldnAvZGlnZXN0LmMKQEAgLTExNiw3ICsxMTYsNiBAQAogI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQogI2luY2x1ZGUgPG9wZW5zc2wvZW5naW5lLmg+CiAjZW5kaWYKLSNpbmNsdWRlICJldnBfbG9jbC5oIgogCiB2b2lkIEVWUF9NRF9DVFhfaW5pdChFVlBfTURfQ1RYICpjdHgpCiAJewpAQCAtMTM5LDc3ICsxMzgsMTggQEAKIAlyZXR1cm4gRVZQX0RpZ2VzdEluaXRfZXgoY3R4LCB0eXBlLCBOVUxMKTsKIAl9CiAKLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLQotLyogVGhlIHB1cnBvc2Ugb2YgdGhlc2UgaXMgdG8gdHJhcCBwcm9ncmFtcyB0aGF0IGF0dGVtcHQgdG8gdXNlIG5vbiBGSVBTCi0gKiBhbGdvcml0aG1zIGluIEZJUFMgbW9kZSBhbmQgaWdub3JlIHRoZSBlcnJvcnMuCi0gKi8KLQotc3RhdGljIGludCBiYWRfaW5pdChFVlBfTURfQ1RYICpjdHgpCi0JeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkRpZ2VzdCBpbml0Iik7IHJldHVybiAwO30KLQotc3RhdGljIGludCBiYWRfdXBkYXRlKEVWUF9NRF9DVFggKmN0eCxjb25zdCB2b2lkICpkYXRhLHNpemVfdCBjb3VudCkKLQl7IEZJUFNfRVJST1JfSUdOT1JFRCgiRGlnZXN0IHVwZGF0ZSIpOyByZXR1cm4gMDt9Ci0KLXN0YXRpYyBpbnQgYmFkX2ZpbmFsKEVWUF9NRF9DVFggKmN0eCx1bnNpZ25lZCBjaGFyICptZCkKLQl7IEZJUFNfRVJST1JfSUdOT1JFRCgiRGlnZXN0IEZpbmFsIik7IHJldHVybiAwO30KLQotc3RhdGljIGNvbnN0IEVWUF9NRCBiYWRfbWQgPQoraW50IEVWUF9EaWdlc3RJbml0X2V4KEVWUF9NRF9DVFggKmN0eCwgY29uc3QgRVZQX01EICp0eXBlLCBFTkdJTkUgKmltcGwpCiAJewotCTAsCi0JMCwKLQkwLAotCTAsCi0JYmFkX2luaXQsCi0JYmFkX3VwZGF0ZSwKLQliYWRfZmluYWwsCi0JTlVMTCwKLQlOVUxMLAotCU5VTEwsCi0JMCwKLQl7MCwwLDAsMH0sCi0JfTsKLQotI2VuZGlmCi0KKwlFVlBfTURfQ1RYX2NsZWFyX2ZsYWdzKGN0eCxFVlBfTURfQ1RYX0ZMQUdfQ0xFQU5FRCk7CiAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCi0KLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLQotc3RhdGljIGludCBkb19lbmdpbmVfbnVsbChFTkdJTkUgKmltcGwpIHsgcmV0dXJuIDA7fQotc3RhdGljIGludCBkb19ldnBfbWRfZW5naW5lX251bGwoRVZQX01EX0NUWCAqY3R4LAotCQkJCWNvbnN0IEVWUF9NRCAqKnB0eXBlLCBFTkdJTkUgKmltcGwpCi0JeyByZXR1cm4gMTsgfQotCi1zdGF0aWMgaW50ICgqZG9fZW5naW5lX2luaXQpKEVOR0lORSAqaW1wbCkKLQkJPSBkb19lbmdpbmVfbnVsbDsKLQotc3RhdGljIGludCAoKmRvX2VuZ2luZV9maW5pc2gpKEVOR0lORSAqaW1wbCkKLQkJPSBkb19lbmdpbmVfbnVsbDsKLQotc3RhdGljIGludCAoKmRvX2V2cF9tZF9lbmdpbmUpCi0JKEVWUF9NRF9DVFggKmN0eCwgY29uc3QgRVZQX01EICoqcHR5cGUsIEVOR0lORSAqaW1wbCkKLQkJPSBkb19ldnBfbWRfZW5naW5lX251bGw7Ci0KLXZvaWQgaW50X0VWUF9NRF9zZXRfZW5naW5lX2NhbGxiYWNrcygKLQlpbnQgKCplbmdfbWRfaW5pdCkoRU5HSU5FICppbXBsKSwKLQlpbnQgKCplbmdfbWRfZmluKShFTkdJTkUgKmltcGwpLAotCWludCAoKmVuZ19tZF9ldnApCi0JCShFVlBfTURfQ1RYICpjdHgsIGNvbnN0IEVWUF9NRCAqKnB0eXBlLCBFTkdJTkUgKmltcGwpKQotCXsKLQlkb19lbmdpbmVfaW5pdCA9IGVuZ19tZF9pbml0OwotCWRvX2VuZ2luZV9maW5pc2ggPSBlbmdfbWRfZmluOwotCWRvX2V2cF9tZF9lbmdpbmUgPSBlbmdfbWRfZXZwOwotCX0KLQotI2Vsc2UKLQotI2RlZmluZSBkb19lbmdpbmVfaW5pdAlFTkdJTkVfaW5pdAotI2RlZmluZSBkb19lbmdpbmVfZmluaXNoIEVOR0lORV9maW5pc2gKLQotc3RhdGljIGludCBkb19ldnBfbWRfZW5naW5lKEVWUF9NRF9DVFggKmN0eCwgY29uc3QgRVZQX01EICoqcHR5cGUsIEVOR0lORSAqaW1wbCkKLQl7Ci0JaWYgKCpwdHlwZSkKKwkvKiBXaGV0aGVyIGl0J3MgbmljZSBvciBub3QsICJJbml0cyIgY2FuIGJlIHVzZWQgb24gIkZpbmFsIidkIGNvbnRleHRzCisJICogc28gdGhpcyBjb250ZXh0IG1heSBhbHJlYWR5IGhhdmUgYW4gRU5HSU5FISBUcnkgdG8gYXZvaWQgcmVsZWFzaW5nCisJICogdGhlIHByZXZpb3VzIGhhbmRsZSwgcmUtcXVlcnlpbmcgZm9yIGFuIEVOR0lORSwgYW5kIGhhdmluZyBhCisJICogcmVpbml0aWFsaXNhdGlvbiwgd2hlbiBpdCBtYXkgYWxsIGJlIHVuZWNlc3NhcnkuICovCisJaWYgKGN0eC0+ZW5naW5lICYmIGN0eC0+ZGlnZXN0ICYmICghdHlwZSB8fAorCQkJKHR5cGUgJiYgKHR5cGUtPnR5cGUgPT0gY3R4LT5kaWdlc3QtPnR5cGUpKSkpCisJCWdvdG8gc2tpcF90b19pbml0OworCWlmICh0eXBlKQogCQl7CiAJCS8qIEVuc3VyZSBhbiBFTkdJTkUgbGVmdCBseWluZyBhcm91bmQgZnJvbSBsYXN0IHRpbWUgaXMgY2xlYXJlZAogCQkgKiAodGhlIHByZXZpb3VzIGNoZWNrIGF0dGVtcHRlZCB0byBhdm9pZCB0aGlzIGlmIHRoZSBzYW1lCkBAIC0yMjAsMjUgKzE2MCwyNiBAQAogCQkJewogCQkJaWYgKCFFTkdJTkVfaW5pdChpbXBsKSkKIAkJCQl7Ci0JCQkJRVZQZXJyKEVWUF9GX0RPX0VWUF9NRF9FTkdJTkUsRVZQX1JfSU5JVElBTElaQVRJT05fRVJST1IpOworCQkJCUVWUGVycihFVlBfRl9FVlBfRElHRVNUSU5JVF9FWCxFVlBfUl9JTklUSUFMSVpBVElPTl9FUlJPUik7CiAJCQkJcmV0dXJuIDA7CiAJCQkJfQogCQkJfQogCQllbHNlCiAJCQkvKiBBc2sgaWYgYW4gRU5HSU5FIGlzIHJlc2VydmVkIGZvciB0aGlzIGpvYiAqLwotCQkJaW1wbCA9IEVOR0lORV9nZXRfZGlnZXN0X2VuZ2luZSgoKnB0eXBlKS0+dHlwZSk7CisJCQlpbXBsID0gRU5HSU5FX2dldF9kaWdlc3RfZW5naW5lKHR5cGUtPnR5cGUpOwogCQlpZihpbXBsKQogCQkJewogCQkJLyogVGhlcmUncyBhbiBFTkdJTkUgZm9yIHRoaXMgam9iIC4uLiAoYXBwYXJlbnRseSkgKi8KLQkJCWNvbnN0IEVWUF9NRCAqZCA9IEVOR0lORV9nZXRfZGlnZXN0KGltcGwsICgqcHR5cGUpLT50eXBlKTsKKwkJCWNvbnN0IEVWUF9NRCAqZCA9IEVOR0lORV9nZXRfZGlnZXN0KGltcGwsIHR5cGUtPnR5cGUpOwogCQkJaWYoIWQpCiAJCQkJewogCQkJCS8qIFNhbWUgY29tbWVudCBmcm9tIGV2cF9lbmMuYyAqLwotCQkJCUVWUGVycihFVlBfRl9ET19FVlBfTURfRU5HSU5FLEVWUF9SX0lOSVRJQUxJWkFUSU9OX0VSUk9SKTsKKwkJCQlFVlBlcnIoRVZQX0ZfRVZQX0RJR0VTVElOSVRfRVgsRVZQX1JfSU5JVElBTElaQVRJT05fRVJST1IpOworCQkJCUVOR0lORV9maW5pc2goaW1wbCk7CiAJCQkJcmV0dXJuIDA7CiAJCQkJfQogCQkJLyogV2UnbGwgdXNlIHRoZSBFTkdJTkUncyBwcml2YXRlIGRpZ2VzdCBkZWZpbml0aW9uICovCi0JCQkqcHR5cGUgPSBkOworCQkJdHlwZSA9IGQ7CiAJCQkvKiBTdG9yZSB0aGUgRU5HSU5FIGZ1bmN0aW9uYWwgcmVmZXJlbmNlIHNvIHdlIGtub3cKIAkJCSAqICd0eXBlJyBjYW1lIGZyb20gYW4gRU5HSU5FIGFuZCB3ZSBuZWVkIHRvIHJlbGVhc2UKIAkJCSAqIGl0IHdoZW4gZG9uZS4gKi8KQEAgLTI1MCw3OCArMTkxLDQ2IEBACiAJZWxzZQogCWlmKCFjdHgtPmRpZ2VzdCkKIAkJewotCQlFVlBlcnIoRVZQX0ZfRE9fRVZQX01EX0VOR0lORSxFVlBfUl9OT19ESUdFU1RfU0VUKTsKKwkJRVZQZXJyKEVWUF9GX0VWUF9ESUdFU1RJTklUX0VYLEVWUF9SX05PX0RJR0VTVF9TRVQpOwogCQlyZXR1cm4gMDsKIAkJfQotCXJldHVybiAxOwotCX0KLQotI2VuZGlmCi0KLSNlbmRpZgotCi1pbnQgRVZQX0RpZ2VzdEluaXRfZXgoRVZQX01EX0NUWCAqY3R4LCBjb25zdCBFVlBfTUQgKnR5cGUsIEVOR0lORSAqaW1wbCkKLQl7Ci0JTV9FVlBfTURfQ1RYX2NsZWFyX2ZsYWdzKGN0eCxFVlBfTURfQ1RYX0ZMQUdfQ0xFQU5FRCk7Ci0jaWZkZWYgT1BFTlNTTF9GSVBTCi0JaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLQkJewotCQlGSVBTZXJyKEZJUFNfRl9FVlBfRElHRVNUSU5JVF9FWCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotCQljdHgtPmRpZ2VzdCA9ICZiYWRfbWQ7Ci0JCXJldHVybiAwOwotCQl9Ci0jZW5kaWYKLSNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKLQkvKiBXaGV0aGVyIGl0J3MgbmljZSBvciBub3QsICJJbml0cyIgY2FuIGJlIHVzZWQgb24gIkZpbmFsIidkIGNvbnRleHRzCi0JICogc28gdGhpcyBjb250ZXh0IG1heSBhbHJlYWR5IGhhdmUgYW4gRU5HSU5FISBUcnkgdG8gYXZvaWQgcmVsZWFzaW5nCi0JICogdGhlIHByZXZpb3VzIGhhbmRsZSwgcmUtcXVlcnlpbmcgZm9yIGFuIEVOR0lORSwgYW5kIGhhdmluZyBhCi0JICogcmVpbml0aWFsaXNhdGlvbiwgd2hlbiBpdCBtYXkgYWxsIGJlIHVuZWNlc3NhcnkuICovCi0JaWYgKGN0eC0+ZW5naW5lICYmIGN0eC0+ZGlnZXN0ICYmICghdHlwZSB8fAotCQkJKHR5cGUgJiYgKHR5cGUtPnR5cGUgPT0gY3R4LT5kaWdlc3QtPnR5cGUpKSkpCi0JCWdvdG8gc2tpcF90b19pbml0OwotCWlmICghZG9fZXZwX21kX2VuZ2luZShjdHgsICZ0eXBlLCBpbXBsKSkKLQkJcmV0dXJuIDA7CiAjZW5kaWYKIAlpZiAoY3R4LT5kaWdlc3QgIT0gdHlwZSkKIAkJewotI2lmZGVmIE9QRU5TU0xfRklQUwotCQlpZiAoRklQU19tb2RlKCkpCi0JCQl7Ci0JCQlpZiAoISh0eXBlLT5mbGFncyAmIEVWUF9NRF9GTEFHX0ZJUFMpIAotCQkJICYmICEoY3R4LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVykpCi0JCQkJewotCQkJCUVWUGVycihFVlBfRl9FVlBfRElHRVNUSU5JVF9FWCwgRVZQX1JfRElTQUJMRURfRk9SX0ZJUFMpOwotCQkJCWN0eC0+ZGlnZXN0ID0gJmJhZF9tZDsKLQkJCQlyZXR1cm4gMDsKLQkJCQl9Ci0JCQl9Ci0jZW5kaWYKIAkJaWYgKGN0eC0+ZGlnZXN0ICYmIGN0eC0+ZGlnZXN0LT5jdHhfc2l6ZSkKIAkJCU9QRU5TU0xfZnJlZShjdHgtPm1kX2RhdGEpOwogCQljdHgtPmRpZ2VzdD10eXBlOwotCQlpZiAodHlwZS0+Y3R4X3NpemUpCisJCWlmICghKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfTk9fSU5JVCkgJiYgdHlwZS0+Y3R4X3NpemUpCiAJCQl7CisJCQljdHgtPnVwZGF0ZSA9IHR5cGUtPnVwZGF0ZTsKIAkJCWN0eC0+bWRfZGF0YT1PUEVOU1NMX21hbGxvYyh0eXBlLT5jdHhfc2l6ZSk7Ci0JCQlpZiAoIWN0eC0+bWRfZGF0YSkKKwkJCWlmIChjdHgtPm1kX2RhdGEgPT0gTlVMTCkKIAkJCQl7Ci0JCQkJRVZQZXJyKEVWUF9GX0VWUF9ESUdFU1RJTklUX0VYLCBFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CisJCQkJRVZQZXJyKEVWUF9GX0VWUF9ESUdFU1RJTklUX0VYLAorCQkJCQkJCUVSUl9SX01BTExPQ19GQUlMVVJFKTsKIAkJCQlyZXR1cm4gMDsKIAkJCQl9CiAJCQl9CiAJCX0KICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKLQlza2lwX3RvX2luaXQ6Citza2lwX3RvX2luaXQ6CiAjZW5kaWYKKwlpZiAoY3R4LT5wY3R4KQorCQl7CisJCWludCByOworCQlyID0gRVZQX1BLRVlfQ1RYX2N0cmwoY3R4LT5wY3R4LCAtMSwgRVZQX1BLRVlfT1BfVFlQRV9TSUcsCisJCQkJCUVWUF9QS0VZX0NUUkxfRElHRVNUSU5JVCwgMCwgY3R4KTsKKwkJaWYgKHIgPD0gMCAmJiAociAhPSAtMikpCisJCQlyZXR1cm4gMDsKKwkJfQorCWlmIChjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX05PX0lOSVQpCisJCXJldHVybiAxOwogCXJldHVybiBjdHgtPmRpZ2VzdC0+aW5pdChjdHgpOwogCX0KIAotaW50IEVWUF9EaWdlc3RVcGRhdGUoRVZQX01EX0NUWCAqY3R4LCBjb25zdCB2b2lkICpkYXRhLAotCSAgICAgc2l6ZV90IGNvdW50KQoraW50IEVWUF9EaWdlc3RVcGRhdGUoRVZQX01EX0NUWCAqY3R4LCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgY291bnQpCiAJewotI2lmZGVmIE9QRU5TU0xfRklQUwotCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSNlbmRpZgotCXJldHVybiBjdHgtPmRpZ2VzdC0+dXBkYXRlKGN0eCxkYXRhLGNvdW50KTsKKwlyZXR1cm4gY3R4LT51cGRhdGUoY3R4LGRhdGEsY291bnQpOwogCX0KIAogLyogVGhlIGNhbGxlciBjYW4gYXNzdW1lIHRoYXQgdGhpcyByZW1vdmVzIGFueSBzZWNyZXQgZGF0YSBmcm9tIHRoZSBjb250ZXh0ICovCkBAIC0zMzcsOSArMjQ2LDYgQEAKIGludCBFVlBfRGlnZXN0RmluYWxfZXgoRVZQX01EX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICptZCwgdW5zaWduZWQgaW50ICpzaXplKQogCXsKIAlpbnQgcmV0OwotI2lmZGVmIE9QRU5TU0xfRklQUwotCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSNlbmRpZgogCiAJT1BFTlNTTF9hc3NlcnQoY3R4LT5kaWdlc3QtPm1kX3NpemUgPD0gRVZQX01BWF9NRF9TSVpFKTsKIAlyZXQ9Y3R4LT5kaWdlc3QtPmZpbmFsKGN0eCxtZCk7CkBAIC0zNDgsNyArMjU0LDcgQEAKIAlpZiAoY3R4LT5kaWdlc3QtPmNsZWFudXApCiAJCXsKIAkJY3R4LT5kaWdlc3QtPmNsZWFudXAoY3R4KTsKLQkJTV9FVlBfTURfQ1RYX3NldF9mbGFncyhjdHgsRVZQX01EX0NUWF9GTEFHX0NMRUFORUQpOworCQlFVlBfTURfQ1RYX3NldF9mbGFncyhjdHgsRVZQX01EX0NUWF9GTEFHX0NMRUFORUQpOwogCQl9CiAJbWVtc2V0KGN0eC0+bWRfZGF0YSwwLGN0eC0+ZGlnZXN0LT5jdHhfc2l6ZSk7CiAJcmV0dXJuIHJldDsKQEAgLTM3MCw3ICsyNzYsNyBAQAogCQl9CiAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCiAJLyogTWFrZSBzdXJlIGl0J3Mgc2FmZSB0byBjb3B5IGEgZGlnZXN0IGNvbnRleHQgdXNpbmcgYW4gRU5HSU5FICovCi0JaWYgKGluLT5lbmdpbmUgJiYgIWRvX2VuZ2luZV9pbml0KGluLT5lbmdpbmUpKQorCWlmIChpbi0+ZW5naW5lICYmICFFTkdJTkVfaW5pdChpbi0+ZW5naW5lKSkKIAkJewogCQlFVlBlcnIoRVZQX0ZfRVZQX01EX0NUWF9DT1BZX0VYLEVSUl9SX0VOR0lORV9MSUIpOwogCQlyZXR1cm4gMDsKQEAgLTM4MCwxMyArMjg2LDEzIEBACiAJaWYgKG91dC0+ZGlnZXN0ID09IGluLT5kaWdlc3QpCiAJCXsKIAkJdG1wX2J1ZiA9IG91dC0+bWRfZGF0YTsKLQkgICAgCU1fRVZQX01EX0NUWF9zZXRfZmxhZ3Mob3V0LEVWUF9NRF9DVFhfRkxBR19SRVVTRSk7CisJICAgIAlFVlBfTURfQ1RYX3NldF9mbGFncyhvdXQsRVZQX01EX0NUWF9GTEFHX1JFVVNFKTsKIAkJfQogCWVsc2UgdG1wX2J1ZiA9IE5VTEw7CiAJRVZQX01EX0NUWF9jbGVhbnVwKG91dCk7CiAJbWVtY3B5KG91dCxpbixzaXplb2YgKm91dCk7CiAKLQlpZiAob3V0LT5kaWdlc3QtPmN0eF9zaXplKQorCWlmIChpbi0+bWRfZGF0YSAmJiBvdXQtPmRpZ2VzdC0+Y3R4X3NpemUpCiAJCXsKIAkJaWYgKHRtcF9idWYpCiAJCQlvdXQtPm1kX2RhdGEgPSB0bXBfYnVmOwpAQCAtNDAyLDYgKzMwOCwxOCBAQAogCQltZW1jcHkob3V0LT5tZF9kYXRhLGluLT5tZF9kYXRhLG91dC0+ZGlnZXN0LT5jdHhfc2l6ZSk7CiAJCX0KIAorCW91dC0+dXBkYXRlID0gaW4tPnVwZGF0ZTsKKworCWlmIChpbi0+cGN0eCkKKwkJeworCQlvdXQtPnBjdHggPSBFVlBfUEtFWV9DVFhfZHVwKGluLT5wY3R4KTsKKwkJaWYgKCFvdXQtPnBjdHgpCisJCQl7CisJCQlFVlBfTURfQ1RYX2NsZWFudXAob3V0KTsKKwkJCXJldHVybiAwOworCQkJfQorCQl9CisKIAlpZiAob3V0LT5kaWdlc3QtPmNvcHkpCiAJCXJldHVybiBvdXQtPmRpZ2VzdC0+Y29weShvdXQsaW4pOwogCQpAQCAtNDE1LDcgKzMzMyw3IEBACiAJaW50IHJldDsKIAogCUVWUF9NRF9DVFhfaW5pdCgmY3R4KTsKLQlNX0VWUF9NRF9DVFhfc2V0X2ZsYWdzKCZjdHgsRVZQX01EX0NUWF9GTEFHX09ORVNIT1QpOworCUVWUF9NRF9DVFhfc2V0X2ZsYWdzKCZjdHgsRVZQX01EX0NUWF9GTEFHX09ORVNIT1QpOwogCXJldD1FVlBfRGlnZXN0SW5pdF9leCgmY3R4LCB0eXBlLCBpbXBsKQogCSAgJiYgRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LCBkYXRhLCBjb3VudCkKIAkgICYmIEVWUF9EaWdlc3RGaW5hbF9leCgmY3R4LCBtZCwgc2l6ZSk7CkBAIC00MzcsMTkgKzM1NSwyMSBAQAogCSAqIGJlY2F1c2Ugc29tZXRpbWVzIG9ubHkgY29waWVzIG9mIHRoZSBjb250ZXh0IGFyZSBldmVyIGZpbmFsaXNlZC4KIAkgKi8KIAlpZiAoY3R4LT5kaWdlc3QgJiYgY3R4LT5kaWdlc3QtPmNsZWFudXAKLQkgICAgJiYgIU1fRVZQX01EX0NUWF90ZXN0X2ZsYWdzKGN0eCxFVlBfTURfQ1RYX0ZMQUdfQ0xFQU5FRCkpCisJICAgICYmICFFVlBfTURfQ1RYX3Rlc3RfZmxhZ3MoY3R4LEVWUF9NRF9DVFhfRkxBR19DTEVBTkVEKSkKIAkJY3R4LT5kaWdlc3QtPmNsZWFudXAoY3R4KTsKIAlpZiAoY3R4LT5kaWdlc3QgJiYgY3R4LT5kaWdlc3QtPmN0eF9zaXplICYmIGN0eC0+bWRfZGF0YQotCSAgICAmJiAhTV9FVlBfTURfQ1RYX3Rlc3RfZmxhZ3MoY3R4LCBFVlBfTURfQ1RYX0ZMQUdfUkVVU0UpKQorCSAgICAmJiAhRVZQX01EX0NUWF90ZXN0X2ZsYWdzKGN0eCwgRVZQX01EX0NUWF9GTEFHX1JFVVNFKSkKIAkJewogCQlPUEVOU1NMX2NsZWFuc2UoY3R4LT5tZF9kYXRhLGN0eC0+ZGlnZXN0LT5jdHhfc2l6ZSk7CiAJCU9QRU5TU0xfZnJlZShjdHgtPm1kX2RhdGEpOwogCQl9CisJaWYgKGN0eC0+cGN0eCkKKwkJRVZQX1BLRVlfQ1RYX2ZyZWUoY3R4LT5wY3R4KTsKICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKIAlpZihjdHgtPmVuZ2luZSkKIAkJLyogVGhlIEVWUF9NRCB3ZSB1c2VkIGJlbG9uZ3MgdG8gYW4gRU5HSU5FLCByZWxlYXNlIHRoZQogCQkgKiBmdW5jdGlvbmFsIHJlZmVyZW5jZSB3ZSBoZWxkIGZvciB0aGlzIHJlYXNvbi4gKi8KLQkJZG9fZW5naW5lX2ZpbmlzaChjdHgtPmVuZ2luZSk7CisJCUVOR0lORV9maW5pc2goY3R4LT5lbmdpbmUpOwogI2VuZGlmCiAJbWVtc2V0KGN0eCwnXDAnLHNpemVvZiAqY3R4KTsKIApkaWZmIC0tZ2l0IGEvY3J5cHRvL2V2cC9lX2Flcy5jIGIvY3J5cHRvL2V2cC9lX2Flcy5jCmluZGV4IGM5YTVlZTguLmJkNmMwYTMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ldnAvZV9hZXMuYworKysgYi9jcnlwdG8vZXZwL2VfYWVzLmMKQEAgLTY5LDI5ICs2OSwzMiBAQAogCiBJTVBMRU1FTlRfQkxPQ0tfQ0lQSEVSKGFlc18xMjgsIGtzLCBBRVMsIEVWUF9BRVNfS0VZLAogCQkgICAgICAgTklEX2Flc18xMjgsIDE2LCAxNiwgMTYsIDEyOCwKLQkJICAgICAgIEVWUF9DSVBIX0ZMQUdfRklQU3xFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSwKLQkJICAgICAgIGFlc19pbml0X2tleSwKLQkJICAgICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpCisJCSAgICAgICAwLCBhZXNfaW5pdF9rZXksIE5VTEwsIAorCQkgICAgICAgRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwKKwkJICAgICAgIEVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCisJCSAgICAgICBOVUxMKQogSU1QTEVNRU5UX0JMT0NLX0NJUEhFUihhZXNfMTkyLCBrcywgQUVTLCBFVlBfQUVTX0tFWSwKIAkJICAgICAgIE5JRF9hZXNfMTkyLCAxNiwgMjQsIDE2LCAxMjgsCi0JCSAgICAgICBFVlBfQ0lQSF9GTEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCi0JCSAgICAgICBhZXNfaW5pdF9rZXksCi0JCSAgICAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKQorCQkgICAgICAgMCwgYWVzX2luaXRfa2V5LCBOVUxMLCAKKwkJICAgICAgIEVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsCisJCSAgICAgICBFVlBfQ0lQSEVSX2dldF9hc24xX2l2LAorCQkgICAgICAgTlVMTCkKIElNUExFTUVOVF9CTE9DS19DSVBIRVIoYWVzXzI1Niwga3MsIEFFUywgRVZQX0FFU19LRVksCiAJCSAgICAgICBOSURfYWVzXzI1NiwgMTYsIDMyLCAxNiwgMTI4LAotCQkgICAgICAgRVZQX0NJUEhfRkxBR19GSVBTfEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLAotCQkgICAgICAgYWVzX2luaXRfa2V5LAotCQkgICAgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkKKwkJICAgICAgIDAsIGFlc19pbml0X2tleSwgTlVMTCwgCisJCSAgICAgICBFVlBfQ0lQSEVSX3NldF9hc24xX2l2LAorCQkgICAgICAgRVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwKKwkJICAgICAgIE5VTEwpCiAKLSNkZWZpbmUgSU1QTEVNRU5UX0FFU19DRkJSKGtzaXplLGNiaXRzLGZsYWdzKQlJTVBMRU1FTlRfQ0ZCUihhZXMsQUVTLEVWUF9BRVNfS0VZLGtzLGtzaXplLGNiaXRzLDE2LGZsYWdzKQorI2RlZmluZSBJTVBMRU1FTlRfQUVTX0NGQlIoa3NpemUsY2JpdHMpCUlNUExFTUVOVF9DRkJSKGFlcyxBRVMsRVZQX0FFU19LRVksa3Msa3NpemUsY2JpdHMsMTYpCiAKLUlNUExFTUVOVF9BRVNfQ0ZCUigxMjgsMSxFVlBfQ0lQSF9GTEFHX0ZJUFMpCi1JTVBMRU1FTlRfQUVTX0NGQlIoMTkyLDEsRVZQX0NJUEhfRkxBR19GSVBTKQotSU1QTEVNRU5UX0FFU19DRkJSKDI1NiwxLEVWUF9DSVBIX0ZMQUdfRklQUykKK0lNUExFTUVOVF9BRVNfQ0ZCUigxMjgsMSkKK0lNUExFTUVOVF9BRVNfQ0ZCUigxOTIsMSkKK0lNUExFTUVOVF9BRVNfQ0ZCUigyNTYsMSkKIAotSU1QTEVNRU5UX0FFU19DRkJSKDEyOCw4LEVWUF9DSVBIX0ZMQUdfRklQUykKLUlNUExFTUVOVF9BRVNfQ0ZCUigxOTIsOCxFVlBfQ0lQSF9GTEFHX0ZJUFMpCi1JTVBMRU1FTlRfQUVTX0NGQlIoMjU2LDgsRVZQX0NJUEhfRkxBR19GSVBTKQorSU1QTEVNRU5UX0FFU19DRkJSKDEyOCw4KQorSU1QTEVNRU5UX0FFU19DRkJSKDE5Miw4KQorSU1QTEVNRU5UX0FFU19DRkJSKDI1Niw4KQogCiBzdGF0aWMgaW50IGFlc19pbml0X2tleShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCiAJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LCBpbnQgZW5jKQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2V2cC9lX2NhbWVsbGlhLmMgYi9jcnlwdG8vZXZwL2VfY2FtZWxsaWEuYwppbmRleCAzNjVkMzk3Li5hN2I0MGQxIDEwMDY0NAotLS0gYS9jcnlwdG8vZXZwL2VfY2FtZWxsaWEuYworKysgYi9jcnlwdG8vZXZwL2VfY2FtZWxsaWEuYwpAQCAtOTMsNyArOTMsNyBAQAogCUVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCiAJTlVMTCkKIAotI2RlZmluZSBJTVBMRU1FTlRfQ0FNRUxMSUFfQ0ZCUihrc2l6ZSxjYml0cykJSU1QTEVNRU5UX0NGQlIoY2FtZWxsaWEsQ2FtZWxsaWEsRVZQX0NBTUVMTElBX0tFWSxrcyxrc2l6ZSxjYml0cywxNiwwKQorI2RlZmluZSBJTVBMRU1FTlRfQ0FNRUxMSUFfQ0ZCUihrc2l6ZSxjYml0cykJSU1QTEVNRU5UX0NGQlIoY2FtZWxsaWEsQ2FtZWxsaWEsRVZQX0NBTUVMTElBX0tFWSxrcyxrc2l6ZSxjYml0cywxNikKIAogSU1QTEVNRU5UX0NBTUVMTElBX0NGQlIoMTI4LDEpCiBJTVBMRU1FTlRfQ0FNRUxMSUFfQ0ZCUigxOTIsMSkKZGlmZiAtLWdpdCBhL2NyeXB0by9ldnAvZV9kZXMuYyBiL2NyeXB0by9ldnAvZV9kZXMuYwppbmRleCAwNDM3NmRmLi5jYTAwOWYyIDEwMDY0NAotLS0gYS9jcnlwdG8vZXZwL2VfZGVzLmMKKysrIGIvY3J5cHRvL2V2cC9lX2Rlcy5jCkBAIC03Miw3ICs3Miw3IEBACiAvKiBCZWNhdXNlIG9mIHZhcmlvdXMgY2FzdHMgYW5kIGRpZmZlcmVudCBuYW1lcyBjYW4ndCB1c2UgSU1QTEVNRU5UX0JMT0NLX0NJUEhFUiAqLwogCiBzdGF0aWMgaW50IGRlc19lY2JfY2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKLQkJCSAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGludCBpbmwpCisJCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgaW5sKQogewogCUJMT0NLX0NJUEhFUl9lY2JfbG9vcCgpCiAJCURFU19lY2JfZW5jcnlwdCgoREVTX2NibG9jayAqKShpbiArIGkpLCAoREVTX2NibG9jayAqKShvdXQgKyBpKSwgY3R4LT5jaXBoZXJfZGF0YSwgY3R4LT5lbmNyeXB0KTsKQEAgLTgwLDI0ICs4MCw1MiBAQAogfQogCiBzdGF0aWMgaW50IGRlc19vZmJfY2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKLQkJCSAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGludCBpbmwpCisJCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgaW5sKQogewotCURFU19vZmI2NF9lbmNyeXB0KGluLCBvdXQsIChsb25nKWlubCwgY3R4LT5jaXBoZXJfZGF0YSwgKERFU19jYmxvY2sgKiljdHgtPml2LCAmY3R4LT5udW0pOworCXdoaWxlKGlubD49RVZQX01BWENIVU5LKQorCQl7CisJCURFU19vZmI2NF9lbmNyeXB0KGluLCBvdXQsIChsb25nKUVWUF9NQVhDSFVOSywgY3R4LT5jaXBoZXJfZGF0YSwKKwkJCQkoREVTX2NibG9jayAqKWN0eC0+aXYsICZjdHgtPm51bSk7CisJCWlubC09RVZQX01BWENIVU5LOworCQlpbiArPUVWUF9NQVhDSFVOSzsKKwkJb3V0Kz1FVlBfTUFYQ0hVTks7CisJCX0KKwlpZiAoaW5sKQorCQlERVNfb2ZiNjRfZW5jcnlwdChpbiwgb3V0LCAobG9uZylpbmwsIGN0eC0+Y2lwaGVyX2RhdGEsCisJCQkJKERFU19jYmxvY2sgKiljdHgtPml2LCAmY3R4LT5udW0pOwogCXJldHVybiAxOwogfQogCiBzdGF0aWMgaW50IGRlc19jYmNfY2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKLQkJCSAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGludCBpbmwpCisJCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgaW5sKQogewotCURFU19uY2JjX2VuY3J5cHQoaW4sIG91dCwgKGxvbmcpaW5sLCBjdHgtPmNpcGhlcl9kYXRhLAotCQkJIChERVNfY2Jsb2NrICopY3R4LT5pdiwgY3R4LT5lbmNyeXB0KTsKKwl3aGlsZShpbmw+PUVWUF9NQVhDSFVOSykKKwkJeworCQlERVNfbmNiY19lbmNyeXB0KGluLCBvdXQsIChsb25nKUVWUF9NQVhDSFVOSywgY3R4LT5jaXBoZXJfZGF0YSwKKwkJCQkoREVTX2NibG9jayAqKWN0eC0+aXYsIGN0eC0+ZW5jcnlwdCk7CisJCWlubC09RVZQX01BWENIVU5LOworCQlpbiArPUVWUF9NQVhDSFVOSzsKKwkJb3V0Kz1FVlBfTUFYQ0hVTks7CisJCX0KKwlpZiAoaW5sKQorCQlERVNfbmNiY19lbmNyeXB0KGluLCBvdXQsIChsb25nKWlubCwgY3R4LT5jaXBoZXJfZGF0YSwKKwkJCQkoREVTX2NibG9jayAqKWN0eC0+aXYsIGN0eC0+ZW5jcnlwdCk7CiAJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyBpbnQgZGVzX2NmYjY0X2NpcGhlcihFVlBfQ0lQSEVSX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsCi0JCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGludCBpbmwpCisJCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBpbmwpCiB7Ci0JREVTX2NmYjY0X2VuY3J5cHQoaW4sIG91dCwgKGxvbmcpaW5sLCBjdHgtPmNpcGhlcl9kYXRhLAorCXdoaWxlKGlubD49RVZQX01BWENIVU5LKQorCQl7CisJCURFU19jZmI2NF9lbmNyeXB0KGluLG91dCwgKGxvbmcpRVZQX01BWENIVU5LLCBjdHgtPmNpcGhlcl9kYXRhLAorCQkJCShERVNfY2Jsb2NrICopY3R4LT5pdiwgJmN0eC0+bnVtLCBjdHgtPmVuY3J5cHQpOworCQlpbmwtPUVWUF9NQVhDSFVOSzsKKwkJaW4gKz1FVlBfTUFYQ0hVTks7CisJCW91dCs9RVZQX01BWENIVU5LOworCQl9CisJaWYgKGlubCkKKwkJREVTX2NmYjY0X2VuY3J5cHQoaW4sIG91dCwgKGxvbmcpaW5sLCBjdHgtPmNpcGhlcl9kYXRhLAogCQkJICAoREVTX2NibG9jayAqKWN0eC0+aXYsICZjdHgtPm51bSwgY3R4LT5lbmNyeXB0KTsKIAlyZXR1cm4gMTsKIH0KQEAgLTEwNSw0NSArMTMzLDYyIEBACiAvKiBBbHRob3VnaCB3ZSBoYXZlIGEgQ0ZCLXIgaW1wbGVtZW50YXRpb24gZm9yIERFUywgaXQgZG9lc24ndCBwYWNrIHRoZSByaWdodAogICAgd2F5LCBzbyB3cmFwIGl0IGhlcmUgKi8KIHN0YXRpYyBpbnQgZGVzX2NmYjFfY2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKLQkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBpbnQgaW5sKQorCQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBpbmwpCiAgICAgewotICAgIHVuc2lnbmVkIGludCBuOworICAgIHNpemVfdCBuLGNodW5rPUVWUF9NQVhDSFVOSy84OwogICAgIHVuc2lnbmVkIGNoYXIgY1sxXSxkWzFdOwogCi0gICAgZm9yKG49MCA7IG4gPCBpbmwgOyArK24pCisgICAgaWYgKGlubDxjaHVuaykgY2h1bms9aW5sOworCisgICAgd2hpbGUgKGlubCAmJiBpbmw+PWNodW5rKQogCXsKLQljWzBdPShpbltuLzhdJigxIDw8ICg3LW4lOCkpKSA/IDB4ODAgOiAwOwotCURFU19jZmJfZW5jcnlwdChjLGQsMSwxLGN0eC0+Y2lwaGVyX2RhdGEsKERFU19jYmxvY2sgKiljdHgtPml2LAorCWZvcihuPTAgOyBuIDwgY2h1bmsqODsgKytuKQorCSAgICB7CisJICAgIGNbMF09KGluW24vOF0mKDEgPDwgKDctbiU4KSkpID8gMHg4MCA6IDA7CisJICAgIERFU19jZmJfZW5jcnlwdChjLGQsMSwxLGN0eC0+Y2lwaGVyX2RhdGEsKERFU19jYmxvY2sgKiljdHgtPml2LAogCQkJY3R4LT5lbmNyeXB0KTsKLQlvdXRbbi84XT0ob3V0W24vOF0mfigweDgwID4+IChuJTgpKSl8KChkWzBdJjB4ODApID4+IChuJTgpKTsKKwkgICAgb3V0W24vOF09KG91dFtuLzhdJn4oMHg4MCA+PiAodW5zaWduZWQgaW50KShuJTgpKSkgfAorCQkgICAgICgoZFswXSYweDgwKSA+PiAodW5zaWduZWQgaW50KShuJTgpKTsKKwkgICAgfQorCWlubC09Y2h1bms7CisJaW4gKz1jaHVuazsKKwlvdXQrPWNodW5rOworCWlmIChpbmw8Y2h1bmspIGNodW5rPWlubDsKIAl9CisKICAgICByZXR1cm4gMTsKICAgICB9CiAKIHN0YXRpYyBpbnQgZGVzX2NmYjhfY2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKLQkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBpbnQgaW5sKQorCQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBpbmwpCiAgICAgewotICAgIERFU19jZmJfZW5jcnlwdChpbixvdXQsOCxpbmwsY3R4LT5jaXBoZXJfZGF0YSwoREVTX2NibG9jayAqKWN0eC0+aXYsCi0JCSAgICBjdHgtPmVuY3J5cHQpOworICAgIHdoaWxlIChpbmw+PUVWUF9NQVhDSFVOSykKKwl7CisJREVTX2NmYl9lbmNyeXB0KGluLG91dCw4LChsb25nKUVWUF9NQVhDSFVOSyxjdHgtPmNpcGhlcl9kYXRhLAorCQkJKERFU19jYmxvY2sgKiljdHgtPml2LGN0eC0+ZW5jcnlwdCk7CisJaW5sLT1FVlBfTUFYQ0hVTks7CisJaW4gKz1FVlBfTUFYQ0hVTks7CisJb3V0Kz1FVlBfTUFYQ0hVTks7CisJfQorICAgIGlmIChpbmwpCisJREVTX2NmYl9lbmNyeXB0KGluLG91dCw4LChsb25nKWlubCxjdHgtPmNpcGhlcl9kYXRhLAorCQkJKERFU19jYmxvY2sgKiljdHgtPml2LGN0eC0+ZW5jcnlwdCk7CiAgICAgcmV0dXJuIDE7CiAgICAgfQogCiBCTE9DS19DSVBIRVJfZGVmcyhkZXMsIERFU19rZXlfc2NoZWR1bGUsIE5JRF9kZXMsIDgsIDgsIDgsIDY0LAotCQkJRVZQX0NJUEhfUkFORF9LRVksCi0JCQlkZXNfaW5pdF9rZXksIE5VTEwsCisJCQlFVlBfQ0lQSF9SQU5EX0tFWSwgZGVzX2luaXRfa2V5LCBOVUxMLAogCQkJRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwKIAkJCUVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCiAJCQlkZXNfY3RybCkKIAogQkxPQ0tfQ0lQSEVSX2RlZl9jZmIoZGVzLERFU19rZXlfc2NoZWR1bGUsTklEX2Rlcyw4LDgsMSwKLQkJICAgICBFVlBfQ0lQSF9SQU5EX0tFWSwKLQkJICAgICBkZXNfaW5pdF9rZXksIE5VTEwsCisJCSAgICAgRVZQX0NJUEhfUkFORF9LRVksIGRlc19pbml0X2tleSxOVUxMLAogCQkgICAgIEVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsCiAJCSAgICAgRVZQX0NJUEhFUl9nZXRfYXNuMV9pdixkZXNfY3RybCkKIAogQkxPQ0tfQ0lQSEVSX2RlZl9jZmIoZGVzLERFU19rZXlfc2NoZWR1bGUsTklEX2Rlcyw4LDgsOCwKLQkJICAgICBFVlBfQ0lQSF9SQU5EX0tFWSwKLQkJICAgICBkZXNfaW5pdF9rZXksTlVMTCwKKwkJICAgICBFVlBfQ0lQSF9SQU5EX0tFWSxkZXNfaW5pdF9rZXksTlVMTCwKIAkJICAgICBFVlBfQ0lQSEVSX3NldF9hc24xX2l2LAogCQkgICAgIEVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsZGVzX2N0cmwpCiAKZGlmZiAtLWdpdCBhL2NyeXB0by9ldnAvZV9kZXMzLmMgYi9jcnlwdG8vZXZwL2VfZGVzMy5jCmluZGV4IGY5MTBhZjEuLjMyMzJjZmUgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ldnAvZV9kZXMzLmMKKysrIGIvY3J5cHRvL2V2cC9lX2RlczMuYwpAQCAtODUsNyArODUsNyBAQAogLyogQmVjYXVzZSBvZiB2YXJpb3VzIGNhc3RzIGFuZCBkaWZmZXJlbnQgYXJncyBjYW4ndCB1c2UgSU1QTEVNRU5UX0JMT0NLX0NJUEhFUiAqLwogCiBzdGF0aWMgaW50IGRlc19lZGVfZWNiX2NpcGhlcihFVlBfQ0lQSEVSX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsCi0JCQkgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgaW50IGlubCkKKwkJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgaW5sKQogewogCUJMT0NLX0NJUEhFUl9lY2JfbG9vcCgpCiAJCURFU19lY2IzX2VuY3J5cHQoKGNvbnN0X0RFU19jYmxvY2sgKikoaW4gKyBpKSwKQEAgLTk3LDQ4ICs5Nyw4MCBAQAogfQogCiBzdGF0aWMgaW50IGRlc19lZGVfb2ZiX2NpcGhlcihFVlBfQ0lQSEVSX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsCi0JCQkgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgaW50IGlubCkKKwkJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgaW5sKQogewotCURFU19lZGUzX29mYjY0X2VuY3J5cHQoaW4sIG91dCwgKGxvbmcpaW5sLAorCWlmIChpbmw+PUVWUF9NQVhDSFVOSykKKwkJeworCQlERVNfZWRlM19vZmI2NF9lbmNyeXB0KGluLCBvdXQsIChsb25nKUVWUF9NQVhDSFVOSywKIAkJCSAgICAgICAmZGF0YShjdHgpLT5rczEsICZkYXRhKGN0eCktPmtzMiwgJmRhdGEoY3R4KS0+a3MzLAogCQkJICAgICAgIChERVNfY2Jsb2NrICopY3R4LT5pdiwgJmN0eC0+bnVtKTsKKwkJaW5sLT1FVlBfTUFYQ0hVTks7CisJCWluICs9RVZQX01BWENIVU5LOworCQlvdXQrPUVWUF9NQVhDSFVOSzsKKwkJfQorCWlmIChpbmwpCisJCURFU19lZGUzX29mYjY0X2VuY3J5cHQoaW4sIG91dCwgKGxvbmcpaW5sLAorCQkJCSZkYXRhKGN0eCktPmtzMSwgJmRhdGEoY3R4KS0+a3MyLCAmZGF0YShjdHgpLT5rczMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKERFU19jYmxvY2sgKiljdHgtPml2LCAmY3R4LT5udW0pOworCiAJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyBpbnQgZGVzX2VkZV9jYmNfY2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKLQkJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBpbnQgaW5sKQorCQkJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBpbmwpCiB7CiAjaWZkZWYgS1NTTF9ERUJVRwogCXsKICAgICAgICAgaW50IGk7Ci0JcHJpbnRmKCJkZXNfZWRlX2NiY19jaXBoZXIoY3R4PSVseCwgYnVmbGVuPSVkKVxuIiwgKHVuc2lnbmVkIGxvbmcpY3R4LCBjdHgtPmJ1Zl9sZW4pOworICAgICAgICBjaGFyICpjcDsKKwlwcmludGYoImRlc19lZGVfY2JjX2NpcGhlcihjdHg9JWx4LCBidWZsZW49JWQpXG4iLCBjdHgsIGN0eC0+YnVmX2xlbik7CiAJcHJpbnRmKCJcdCBpdj0gIik7CiAgICAgICAgIGZvcihpPTA7aTw4O2krKykKICAgICAgICAgICAgICAgICBwcmludGYoIiUwMlgiLGN0eC0+aXZbaV0pOwogCXByaW50ZigiXG4iKTsKIAl9CiAjZW5kaWYgICAgLyogS1NTTF9ERUJVRyAqLwotCURFU19lZGUzX2NiY19lbmNyeXB0KGluLCBvdXQsIChsb25nKWlubCwKKwlpZiAoaW5sPj1FVlBfTUFYQ0hVTkspCisJCXsKKwkJREVTX2VkZTNfY2JjX2VuY3J5cHQoaW4sIG91dCwgKGxvbmcpRVZQX01BWENIVU5LLAogCQkJICAgICAmZGF0YShjdHgpLT5rczEsICZkYXRhKGN0eCktPmtzMiwgJmRhdGEoY3R4KS0+a3MzLAogCQkJICAgICAoREVTX2NibG9jayAqKWN0eC0+aXYsIGN0eC0+ZW5jcnlwdCk7CisJCWlubC09RVZQX01BWENIVU5LOworCQlpbiArPUVWUF9NQVhDSFVOSzsKKwkJb3V0Kz1FVlBfTUFYQ0hVTks7CisJCX0KKwlpZiAoaW5sKQorCQlERVNfZWRlM19jYmNfZW5jcnlwdChpbiwgb3V0LCAobG9uZylpbmwsCisJCQkgICAgICZkYXRhKGN0eCktPmtzMSwgJmRhdGEoY3R4KS0+a3MyLCAmZGF0YShjdHgpLT5rczMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChERVNfY2Jsb2NrICopY3R4LT5pdiwgY3R4LT5lbmNyeXB0KTsKIAlyZXR1cm4gMTsKIH0KIAogc3RhdGljIGludCBkZXNfZWRlX2NmYjY0X2NpcGhlcihFVlBfQ0lQSEVSX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsCi0JCQkgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgaW50IGlubCkKKwkJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgaW5sKQogewotCURFU19lZGUzX2NmYjY0X2VuY3J5cHQoaW4sIG91dCwgKGxvbmcpaW5sLCAKKwlpZiAoaW5sPj1FVlBfTUFYQ0hVTkspCisJCXsKKwkJREVTX2VkZTNfY2ZiNjRfZW5jcnlwdChpbiwgb3V0LCAobG9uZylFVlBfTUFYQ0hVTkssIAogCQkJICAgICAgICZkYXRhKGN0eCktPmtzMSwgJmRhdGEoY3R4KS0+a3MyLCAmZGF0YShjdHgpLT5rczMsCiAJCQkgICAgICAgKERFU19jYmxvY2sgKiljdHgtPml2LCAmY3R4LT5udW0sIGN0eC0+ZW5jcnlwdCk7CisJCWlubC09RVZQX01BWENIVU5LOworCQlpbiArPUVWUF9NQVhDSFVOSzsKKwkJb3V0Kz1FVlBfTUFYQ0hVTks7CisJCX0KKwlpZiAoaW5sKQorCQlERVNfZWRlM19jZmI2NF9lbmNyeXB0KGluLCBvdXQsIChsb25nKWlubCwKKwkJCSAgICAgICAmZGF0YShjdHgpLT5rczEsICZkYXRhKGN0eCktPmtzMiwgJmRhdGEoY3R4KS0+a3MzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChERVNfY2Jsb2NrICopY3R4LT5pdiwgJmN0eC0+bnVtLCBjdHgtPmVuY3J5cHQpOwogCXJldHVybiAxOwogfQogCiAvKiBBbHRob3VnaCB3ZSBoYXZlIGEgQ0ZCLXIgaW1wbGVtZW50YXRpb24gZm9yIDMtREVTLCBpdCBkb2Vzbid0IHBhY2sgdGhlIHJpZ2h0CiAgICB3YXksIHNvIHdyYXAgaXQgaGVyZSAqLwogc3RhdGljIGludCBkZXNfZWRlM19jZmIxX2NpcGhlcihFVlBfQ0lQSEVSX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsCi0JCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGludCBpbmwpCisJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBpbmwpCiAgICAgewotICAgIHVuc2lnbmVkIGludCBuOworICAgIHNpemVfdCBuOwogICAgIHVuc2lnbmVkIGNoYXIgY1sxXSxkWzFdOwogCiAgICAgZm9yKG49MCA7IG4gPCBpbmwgOyArK24pCkBAIC0xNDcsMjUgKzE3OSwzNiBAQAogCURFU19lZGUzX2NmYl9lbmNyeXB0KGMsZCwxLDEsCiAJCQkgICAgICZkYXRhKGN0eCktPmtzMSwmZGF0YShjdHgpLT5rczIsJmRhdGEoY3R4KS0+a3MzLAogCQkJICAgICAoREVTX2NibG9jayAqKWN0eC0+aXYsY3R4LT5lbmNyeXB0KTsKLQlvdXRbbi84XT0ob3V0W24vOF0mfigweDgwID4+IChuJTgpKSl8KChkWzBdJjB4ODApID4+IChuJTgpKTsKKwlvdXRbbi84XT0ob3V0W24vOF0mfigweDgwID4+ICh1bnNpZ25lZCBpbnQpKG4lOCkpKSB8CisJCSAoKGRbMF0mMHg4MCkgPj4gKHVuc2lnbmVkIGludCkobiU4KSk7CiAJfQogCiAgICAgcmV0dXJuIDE7CiAgICAgfQogCiBzdGF0aWMgaW50IGRlc19lZGUzX2NmYjhfY2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKLQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgaW50IGlubCkKKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGlubCkKICAgICB7Ci0gICAgREVTX2VkZTNfY2ZiX2VuY3J5cHQoaW4sb3V0LDgsaW5sLAorICAgIHdoaWxlIChpbmw+PUVWUF9NQVhDSFVOSykKKwl7CisJREVTX2VkZTNfY2ZiX2VuY3J5cHQoaW4sb3V0LDgsKGxvbmcpRVZQX01BWENIVU5LLAogCQkJICZkYXRhKGN0eCktPmtzMSwmZGF0YShjdHgpLT5rczIsJmRhdGEoY3R4KS0+a3MzLAogCQkJIChERVNfY2Jsb2NrICopY3R4LT5pdixjdHgtPmVuY3J5cHQpOworCWlubC09RVZQX01BWENIVU5LOworCWluICs9RVZQX01BWENIVU5LOworCW91dCs9RVZQX01BWENIVU5LOworCX0KKyAgICBpZiAoaW5sKQorCURFU19lZGUzX2NmYl9lbmNyeXB0KGluLG91dCw4LChsb25nKWlubCwKKwkJCSZkYXRhKGN0eCktPmtzMSwmZGF0YShjdHgpLT5rczIsJmRhdGEoY3R4KS0+a3MzLAorCQkJKERFU19jYmxvY2sgKiljdHgtPml2LGN0eC0+ZW5jcnlwdCk7CiAgICAgcmV0dXJuIDE7CiAgICAgfQogCiBCTE9DS19DSVBIRVJfZGVmcyhkZXNfZWRlLCBERVNfRURFX0tFWSwgTklEX2Rlc19lZGUsIDgsIDE2LCA4LCA2NCwKLQkJRVZQX0NJUEhfUkFORF9LRVl8RVZQX0NJUEhfRkxBR19GSVBTfEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLAotCQkJZGVzX2VkZV9pbml0X2tleSwKLQkJCU5VTEwsIE5VTEwsIE5VTEwsCisJCQlFVlBfQ0lQSF9SQU5EX0tFWSwgZGVzX2VkZV9pbml0X2tleSwgTlVMTCwgCisJCQlFVlBfQ0lQSEVSX3NldF9hc24xX2l2LAorCQkJRVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwKIAkJCWRlczNfY3RybCkKIAogI2RlZmluZSBkZXNfZWRlM19jZmI2NF9jaXBoZXIgZGVzX2VkZV9jZmI2NF9jaXBoZXIKQEAgLTE3NCwyMSArMjE3LDIxIEBACiAjZGVmaW5lIGRlc19lZGUzX2VjYl9jaXBoZXIgZGVzX2VkZV9lY2JfY2lwaGVyCiAKIEJMT0NLX0NJUEhFUl9kZWZzKGRlc19lZGUzLCBERVNfRURFX0tFWSwgTklEX2Rlc19lZGUzLCA4LCAyNCwgOCwgNjQsCi0JCUVWUF9DSVBIX1JBTkRfS0VZfEVWUF9DSVBIX0ZMQUdfRklQU3xFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSwKLQkJCWRlc19lZGUzX2luaXRfa2V5LAotCQkJTlVMTCwgTlVMTCwgTlVMTCwKKwkJCUVWUF9DSVBIX1JBTkRfS0VZLCBkZXNfZWRlM19pbml0X2tleSwgTlVMTCwgCisJCQlFVlBfQ0lQSEVSX3NldF9hc24xX2l2LAorCQkJRVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwKIAkJCWRlczNfY3RybCkKIAogQkxPQ0tfQ0lQSEVSX2RlZl9jZmIoZGVzX2VkZTMsREVTX0VERV9LRVksTklEX2Rlc19lZGUzLDI0LDgsMSwKLQkJRVZQX0NJUEhfUkFORF9LRVl8RVZQX0NJUEhfRkxBR19GSVBTfEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLAotCQkgICAgIGRlc19lZGUzX2luaXRfa2V5LAotCQkgICAgIE5VTEwsIE5VTEwsIE5VTEwsCisJCSAgICAgRVZQX0NJUEhfUkFORF9LRVksIGRlc19lZGUzX2luaXRfa2V5LE5VTEwsCisJCSAgICAgRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwKKwkJICAgICBFVlBfQ0lQSEVSX2dldF9hc24xX2l2LAogCQkgICAgIGRlczNfY3RybCkKIAogQkxPQ0tfQ0lQSEVSX2RlZl9jZmIoZGVzX2VkZTMsREVTX0VERV9LRVksTklEX2Rlc19lZGUzLDI0LDgsOCwKLQkJRVZQX0NJUEhfUkFORF9LRVl8RVZQX0NJUEhfRkxBR19GSVBTfEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLAotCQkgICAgIGRlc19lZGUzX2luaXRfa2V5LAotCQkgICAgIE5VTEwsIE5VTEwsIE5VTEwsCisJCSAgICAgRVZQX0NJUEhfUkFORF9LRVksIGRlc19lZGUzX2luaXRfa2V5LE5VTEwsCisJCSAgICAgRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwKKwkJICAgICBFVlBfQ0lQSEVSX2dldF9hc24xX2l2LAogCQkgICAgIGRlczNfY3RybCkKIAogc3RhdGljIGludCBkZXNfZWRlX2luaXRfa2V5KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKQEAgLTIxNSw3ICsyNTgsNyBAQAogI2lmZGVmIEtTU0xfREVCVUcKIAl7CiAgICAgICAgIGludCBpOwotICAgICAgICBwcmludGYoImRlc19lZGUzX2luaXRfa2V5KGN0eD0lbHgpXG4iLCAodW5zaWduZWQgbG9uZyljdHgpOworICAgICAgICBwcmludGYoImRlc19lZGUzX2luaXRfa2V5KGN0eD0lbHgpXG4iLCBjdHgpOwogCXByaW50ZigiXHRLRVk9ICIpOwogICAgICAgICBmb3IoaT0wO2k8MjQ7aSsrKSBwcmludGYoIiUwMlgiLGtleVtpXSk7IHByaW50ZigiXG4iKTsKIAlwcmludGYoIlx0IElWPSAiKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9ldnAvZV9pZGVhLmMgYi9jcnlwdG8vZXZwL2VfaWRlYS5jCmluZGV4IDQ4YzMzYTcuLjgwNmIwODAgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ldnAvZV9pZGVhLmMKKysrIGIvY3J5cHRvL2V2cC9lX2lkZWEuYwpAQCAtNzMsNyArNzMsNyBAQAogICovCiAKIHN0YXRpYyBpbnQgaWRlYV9lY2JfY2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKLQkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBpbnQgaW5sKQorCQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBpbmwpCiB7CiAJQkxPQ0tfQ0lQSEVSX2VjYl9sb29wKCkKIAkJaWRlYV9lY2JfZW5jcnlwdChpbiArIGksIG91dCArIGksIGN0eC0+Y2lwaGVyX2RhdGEpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2V2cC9lX251bGwuYyBiL2NyeXB0by9ldnAvZV9udWxsLmMKaW5kZXggMDg3MmQ3My4uN2NmNTBlMSAxMDA2NDQKLS0tIGEvY3J5cHRvL2V2cC9lX251bGwuYworKysgYi9jcnlwdG8vZXZwL2VfbnVsbC5jCkBAIC02NCwxMiArNjQsMTIgQEAKIHN0YXRpYyBpbnQgbnVsbF9pbml0X2tleShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCiAJY29uc3QgdW5zaWduZWQgY2hhciAqaXYsaW50IGVuYyk7CiBzdGF0aWMgaW50IG51bGxfY2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKLQljb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgaW50IGlubCk7CisJY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBpbmwpOwogc3RhdGljIGNvbnN0IEVWUF9DSVBIRVIgbl9jaXBoZXI9CiAJewogCU5JRF91bmRlZiwKIAkxLDAsMCwKLQlFVlBfQ0lQSF9GTEFHX0ZJUFMsCisJMCwKIAludWxsX2luaXRfa2V5LAogCW51bGxfY2lwaGVyLAogCU5VTEwsCkBAIC05MywxMCArOTMsMTAgQEAKIAl9CiAKIHN0YXRpYyBpbnQgbnVsbF9jaXBoZXIoRVZQX0NJUEhFUl9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LAotCSAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGludCBpbmwpCisJICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGlubCkKIAl7CiAJaWYgKGluICE9IG91dCkKLQkJbWVtY3B5KChjaGFyICopb3V0LChjb25zdCBjaGFyICopaW4sKHNpemVfdClpbmwpOworCQltZW1jcHkoKGNoYXIgKilvdXQsKGNvbnN0IGNoYXIgKilpbixpbmwpOwogCXJldHVybiAxOwogCX0KIApkaWZmIC0tZ2l0IGEvY3J5cHRvL2V2cC9lX3JjMi5jIGIvY3J5cHRvL2V2cC9lX3JjMi5jCmluZGV4IGQzNzcyNmYuLmY3OGQ3ODEgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ldnAvZV9yYzIuYworKysgYi9jcnlwdG8vZXZwL2VfcmMyLmMKQEAgLTIyMyw2ICsyMjMsMTEgQEAKIAkJCXJldHVybiAxOwogCQkJfQogCQlyZXR1cm4gMDsKKyNpZmRlZiBQQkVfUFJGX1RFU1QKKwljYXNlIEVWUF9DVFJMX1BCRV9QUkZfTklEOgorCQkqKGludCAqKXB0ciA9IE5JRF9obWFjV2l0aE1ENTsKKwkJcmV0dXJuIDE7CisjZW5kaWYKIAogCWRlZmF1bHQ6CiAJCXJldHVybiAtMTsKZGlmZiAtLWdpdCBhL2NyeXB0by9ldnAvZV9yYzQuYyBiL2NyeXB0by9ldnAvZV9yYzQuYwppbmRleCA1NWJhYWQ3Li44YjUxNzVlIDEwMDY0NAotLS0gYS9jcnlwdG8vZXZwL2VfcmM0LmMKKysrIGIvY3J5cHRvL2V2cC9lX3JjNC5jCkBAIC02NCw3ICs2NCw2IEBACiAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KICNpbmNsdWRlIDxvcGVuc3NsL3JjNC5oPgotI2luY2x1ZGUgImV2cF9sb2NsLmgiCiAKIC8qIEZJWE1FOiBzdXJlbHkgdGhpcyBpcyBhdmFpbGFibGUgZWxzZXdoZXJlPyAqLwogI2RlZmluZSBFVlBfUkM0X0tFWV9TSVpFCQkxNgpAQCAtNzksNyArNzgsNyBAQAogc3RhdGljIGludCByYzRfaW5pdF9rZXkoRVZQX0NJUEhFUl9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAogCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaXYsaW50IGVuYyk7CiBzdGF0aWMgaW50IHJjNF9jaXBoZXIoRVZQX0NJUEhFUl9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LAotCQkgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgaW50IGlubCk7CisJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgaW5sKTsKIHN0YXRpYyBjb25zdCBFVlBfQ0lQSEVSIHI0X2NpcGhlcj0KIAl7CiAJTklEX3JjNCwKQEAgLTEyOSw3ICsxMjgsNyBAQAogCX0KIAogc3RhdGljIGludCByYzRfY2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKLQkJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGludCBpbmwpCisJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgaW5sKQogCXsKIAlSQzQoJmRhdGEoY3R4KS0+a3MsaW5sLGluLG91dCk7CiAJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9jcnlwdG8vZXZwL2Vfc2VlZC5jIGIvY3J5cHRvL2V2cC9lX3NlZWQuYwppbmRleCA4YzFlYzBkLi4yZDE3NTlkIDEwMDY0NAotLS0gYS9jcnlwdG8vZXZwL2Vfc2VlZC5jCisrKyBiL2NyeXB0by9ldnAvZV9zZWVkLmMKQEAgLTU0LDExICs1NCwxMSBAQAogICovCiAKICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+CisjaWZuZGVmIE9QRU5TU0xfTk9fU0VFRAogI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpZm5kZWYgT1BFTlNTTF9OT19TRUVECiAjaW5jbHVkZSA8b3BlbnNzbC9zZWVkLmg+CiAjaW5jbHVkZSAiZXZwX2xvY2wuaCIKIApkaWZmIC0tZ2l0IGEvY3J5cHRvL2V2cC9lX3hjYmNfZC5jIGIvY3J5cHRvL2V2cC9lX3hjYmNfZC5jCmluZGV4IDg4MzJkYTIuLjI1MGU4OGMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ldnAvZV94Y2JjX2QuYworKysgYi9jcnlwdG8vZXZwL2VfeGNiY19kLmMKQEAgLTYzLDEyICs2MywxMyBAQAogCiAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KKyNpbmNsdWRlICJldnBfbG9jbC5oIgogI2luY2x1ZGUgPG9wZW5zc2wvZGVzLmg+CiAKIHN0YXRpYyBpbnQgZGVzeF9jYmNfaW5pdF9rZXkoRVZQX0NJUEhFUl9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAogCQkJICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppdixpbnQgZW5jKTsKIHN0YXRpYyBpbnQgZGVzeF9jYmNfY2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKLQkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBpbnQgaW5sKTsKKwkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgaW5sKTsKIAogCiB0eXBlZGVmIHN0cnVjdApAQCAtMTEzLDEzICsxMTQsMjUgQEAKIAl9CiAKIHN0YXRpYyBpbnQgZGVzeF9jYmNfY2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKLQkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBpbnQgaW5sKQorCQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBpbmwpCiAJewotCURFU194Y2JjX2VuY3J5cHQoaW4sb3V0LGlubCwmZGF0YShjdHgpLT5rcywKKwl3aGlsZSAoaW5sPj1FVlBfTUFYQ0hVTkspCisJCXsKKwkJREVTX3hjYmNfZW5jcnlwdChpbixvdXQsKGxvbmcpRVZQX01BWENIVU5LLCZkYXRhKGN0eCktPmtzLAogCQkJIChERVNfY2Jsb2NrICopJihjdHgtPml2WzBdKSwKIAkJCSAmZGF0YShjdHgpLT5pbncsCiAJCQkgJmRhdGEoY3R4KS0+b3V0dywKIAkJCSBjdHgtPmVuY3J5cHQpOworCQlpbmwtPUVWUF9NQVhDSFVOSzsKKwkJaW4gKz1FVlBfTUFYQ0hVTks7CisJCW91dCs9RVZQX01BWENIVU5LOworCQl9CisJaWYgKGlubCkKKwkJREVTX3hjYmNfZW5jcnlwdChpbixvdXQsKGxvbmcpaW5sLCZkYXRhKGN0eCktPmtzLAorCQkJKERFU19jYmxvY2sgKikmKGN0eC0+aXZbMF0pLAorCQkJJmRhdGEoY3R4KS0+aW53LAorCQkJJmRhdGEoY3R4KS0+b3V0dywKKwkJCWN0eC0+ZW5jcnlwdCk7CiAJcmV0dXJuIDE7CiAJfQogI2VuZGlmCmRpZmYgLS1naXQgYS9jcnlwdG8vZXZwL2VuY19taW4uYyBiL2NyeXB0by9ldnAvZW5jX21pbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZmJhMzhlLi4wMDAwMDAwCi0tLSBhL2NyeXB0by9ldnAvZW5jX21pbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMzkwICswLDAgQEAKLS8qIGNyeXB0by9ldnAvZW5jX21pbi5jICovCi0vKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCi0gKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCi0gKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCi0gKiAKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcwotICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAotICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCi0gKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCi0gKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSAqIAotICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KLSAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KLSAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KLSAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCi0gKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKLSAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKLSAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCi0gKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKLSAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgotICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCi0gKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgotICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICogCi0gKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgotICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCi0gKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCi0gKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQotICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgImNyeXB0bGliLmgiCi0jaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQotI2luY2x1ZGUgPG9wZW5zc2wvZW5naW5lLmg+Ci0jZW5kaWYKLSNpbmNsdWRlICJldnBfbG9jbC5oIgotCi12b2lkIEVWUF9DSVBIRVJfQ1RYX2luaXQoRVZQX0NJUEhFUl9DVFggKmN0eCkKLQl7Ci0jaWZkZWYgT1BFTlNTTF9GSVBTCi0JRklQU19zZWxmdGVzdF9jaGVjaygpOwotI2VuZGlmCi0JbWVtc2V0KGN0eCwwLHNpemVvZihFVlBfQ0lQSEVSX0NUWCkpOwotCS8qIGN0eC0+Y2lwaGVyPU5VTEw7ICovCi0JfQotCi0jaWZkZWYgT1BFTlNTTF9GSVBTCi0KLS8qIFRoZSBwdXJwb3NlIG9mIHRoZXNlIGlzIHRvIHRyYXAgcHJvZ3JhbXMgdGhhdCBhdHRlbXB0IHRvIHVzZSBub24gRklQUwotICogYWxnb3JpdGhtcyBpbiBGSVBTIG1vZGUgYW5kIGlnbm9yZSB0aGUgZXJyb3JzLgotICovCi0KLXN0YXRpYyBpbnQgYmFkX2luaXQoRVZQX0NJUEhFUl9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAotCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsIGludCBlbmMpCi0JeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkNpcGhlciBpbml0Iik7IHJldHVybiAwO30KLQotc3RhdGljIGludCBiYWRfZG9fY2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKLQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgaW50IGlubCkKLQl7IEZJUFNfRVJST1JfSUdOT1JFRCgiQ2lwaGVyIHVwZGF0ZSIpOyByZXR1cm4gMDt9Ci0KLS8qIE5COiBubyBjbGVhbnVwIGJlY2F1c2UgaXQgaXMgYWxsb3dlZCBhZnRlciBmYWlsZWQgaW5pdCAqLwotCi1zdGF0aWMgaW50IGJhZF9zZXRfYXNuMShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBBU04xX1RZUEUgKnR5cCkKLQl7IEZJUFNfRVJST1JfSUdOT1JFRCgiQ2lwaGVyIHNldF9hc24xIik7IHJldHVybiAwO30KLXN0YXRpYyBpbnQgYmFkX2dldF9hc24xKEVWUF9DSVBIRVJfQ1RYICpjdHgsIEFTTjFfVFlQRSAqdHlwKQotCXsgRklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIgZ2V0X2FzbjEiKTsgcmV0dXJuIDA7fQotc3RhdGljIGludCBiYWRfY3RybChFVlBfQ0lQSEVSX0NUWCAqY3R4LCBpbnQgdHlwZSwgaW50IGFyZywgdm9pZCAqcHRyKQotCXsgRklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIgY3RybCIpOyByZXR1cm4gMDt9Ci0KLXN0YXRpYyBjb25zdCBFVlBfQ0lQSEVSIGJhZF9jaXBoZXIgPQotCXsKLQkwLAotCTAsCi0JMCwKLQkwLAotCTAsCi0JYmFkX2luaXQsCi0JYmFkX2RvX2NpcGhlciwKLQlOVUxMLAotCTAsCi0JYmFkX3NldF9hc24xLAotCWJhZF9nZXRfYXNuMSwKLQliYWRfY3RybCwKLQlOVUxMCi0JfTsKLQotI2VuZGlmCi0KLSNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKLQotI2lmZGVmIE9QRU5TU0xfRklQUwotCi1zdGF0aWMgaW50IGRvX2VuZ2luZV9udWxsKEVOR0lORSAqaW1wbCkgeyByZXR1cm4gMDt9Ci1zdGF0aWMgaW50IGRvX2V2cF9lbmNfZW5naW5lX251bGwoRVZQX0NJUEhFUl9DVFggKmN0eCwKLQkJCQljb25zdCBFVlBfQ0lQSEVSICoqcGNpcGgsIEVOR0lORSAqaW1wbCkKLQl7IHJldHVybiAxOyB9Ci0KLXN0YXRpYyBpbnQgKCpkb19lbmdpbmVfZmluaXNoKShFTkdJTkUgKmltcGwpCi0JCT0gZG9fZW5naW5lX251bGw7Ci0KLXN0YXRpYyBpbnQgKCpkb19ldnBfZW5jX2VuZ2luZSkKLQkoRVZQX0NJUEhFUl9DVFggKmN0eCwgY29uc3QgRVZQX0NJUEhFUiAqKnBjaXBoLCBFTkdJTkUgKmltcGwpCi0JCT0gZG9fZXZwX2VuY19lbmdpbmVfbnVsbDsKLQotdm9pZCBpbnRfRVZQX0NJUEhFUl9zZXRfZW5naW5lX2NhbGxiYWNrcygKLQlpbnQgKCplbmdfY2lwaF9maW4pKEVOR0lORSAqaW1wbCksCi0JaW50ICgqZW5nX2NpcGhfZXZwKQotCQkoRVZQX0NJUEhFUl9DVFggKmN0eCwgY29uc3QgRVZQX0NJUEhFUiAqKnBjaXBoLCBFTkdJTkUgKmltcGwpKQotCXsKLQlkb19lbmdpbmVfZmluaXNoID0gZW5nX2NpcGhfZmluOwotCWRvX2V2cF9lbmNfZW5naW5lID0gZW5nX2NpcGhfZXZwOwotCX0KLQotI2Vsc2UKLQotI2RlZmluZSBkb19lbmdpbmVfZmluaXNoIEVOR0lORV9maW5pc2gKLQotc3RhdGljIGludCBkb19ldnBfZW5jX2VuZ2luZShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCBFVlBfQ0lQSEVSICoqcGNpcGhlciwgRU5HSU5FICppbXBsKQotCXsKLQlpZihpbXBsKQotCQl7Ci0JCWlmICghRU5HSU5FX2luaXQoaW1wbCkpCi0JCQl7Ci0JCQlFVlBlcnIoRVZQX0ZfRE9fRVZQX0VOQ19FTkdJTkUsIEVWUF9SX0lOSVRJQUxJWkFUSU9OX0VSUk9SKTsKLQkJCXJldHVybiAwOwotCQkJfQotCQl9Ci0JZWxzZQotCQkvKiBBc2sgaWYgYW4gRU5HSU5FIGlzIHJlc2VydmVkIGZvciB0aGlzIGpvYiAqLwotCQlpbXBsID0gRU5HSU5FX2dldF9jaXBoZXJfZW5naW5lKCgqcGNpcGhlciktPm5pZCk7Ci0JaWYoaW1wbCkKLQkJewotCQkvKiBUaGVyZSdzIGFuIEVOR0lORSBmb3IgdGhpcyBqb2IgLi4uIChhcHBhcmVudGx5KSAqLwotCQljb25zdCBFVlBfQ0lQSEVSICpjID0gRU5HSU5FX2dldF9jaXBoZXIoaW1wbCwgKCpwY2lwaGVyKS0+bmlkKTsKLQkJaWYoIWMpCi0JCQl7Ci0JCQkvKiBPbmUgcG9zaXRpdmUgc2lkZS1lZmZlY3Qgb2YgVVMncyBleHBvcnQKLQkJCSAqIGNvbnRyb2wgaGlzdG9yeSwgaXMgdGhhdCB3ZSBzaG91bGQgYXQgbGVhc3QKLQkJCSAqIGJlIGFibGUgdG8gYXZvaWQgdXNpbmcgVVMgbWlzcGVsbGluZ3Mgb2YKLQkJCSAqICJpbml0aWFsaXNhdGlvbiI/ICovCi0JCQlFVlBlcnIoRVZQX0ZfRE9fRVZQX0VOQ19FTkdJTkUsIEVWUF9SX0lOSVRJQUxJWkFUSU9OX0VSUk9SKTsKLQkJCXJldHVybiAwOwotCQkJfQotCQkvKiBXZSdsbCB1c2UgdGhlIEVOR0lORSdzIHByaXZhdGUgY2lwaGVyIGRlZmluaXRpb24gKi8KLQkJKnBjaXBoZXIgPSBjOwotCQkvKiBTdG9yZSB0aGUgRU5HSU5FIGZ1bmN0aW9uYWwgcmVmZXJlbmNlIHNvIHdlIGtub3cKLQkJICogJ2NpcGhlcicgY2FtZSBmcm9tIGFuIEVOR0lORSBhbmQgd2UgbmVlZCB0byByZWxlYXNlCi0JCSAqIGl0IHdoZW4gZG9uZS4gKi8KLQkJY3R4LT5lbmdpbmUgPSBpbXBsOwotCQl9Ci0JZWxzZQotCQljdHgtPmVuZ2luZSA9IE5VTEw7Ci0JcmV0dXJuIDE7Ci0JfQotCi0jZW5kaWYKLQotI2VuZGlmCi0KLWludCBFVlBfQ2lwaGVySW5pdF9leChFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIsIEVOR0lORSAqaW1wbCwKLQkgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsIGludCBlbmMpCi0JewotCWlmIChlbmMgPT0gLTEpCi0JCWVuYyA9IGN0eC0+ZW5jcnlwdDsKLQllbHNlCi0JCXsKLQkJaWYgKGVuYykKLQkJCWVuYyA9IDE7Ci0JCWN0eC0+ZW5jcnlwdCA9IGVuYzsKLQkJfQotI2lmZGVmIE9QRU5TU0xfRklQUwotCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0JCXsKLQkJRklQU2VycihGSVBTX0ZfRVZQX0NJUEhFUklOSVRfRVgsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLQkJY3R4LT5jaXBoZXIgPSAmYmFkX2NpcGhlcjsKLQkJcmV0dXJuIDA7Ci0JCX0KLSNlbmRpZgotI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQotCS8qIFdoZXRoZXIgaXQncyBuaWNlIG9yIG5vdCwgIkluaXRzIiBjYW4gYmUgdXNlZCBvbiAiRmluYWwiJ2QgY29udGV4dHMKLQkgKiBzbyB0aGlzIGNvbnRleHQgbWF5IGFscmVhZHkgaGF2ZSBhbiBFTkdJTkUhIFRyeSB0byBhdm9pZCByZWxlYXNpbmcKLQkgKiB0aGUgcHJldmlvdXMgaGFuZGxlLCByZS1xdWVyeWluZyBmb3IgYW4gRU5HSU5FLCBhbmQgaGF2aW5nIGEKLQkgKiByZWluaXRpYWxpc2F0aW9uLCB3aGVuIGl0IG1heSBhbGwgYmUgdW5lY2Vzc2FyeS4gKi8KLQlpZiAoY3R4LT5lbmdpbmUgJiYgY3R4LT5jaXBoZXIgJiYgKCFjaXBoZXIgfHwKLQkJCShjaXBoZXIgJiYgKGNpcGhlci0+bmlkID09IGN0eC0+Y2lwaGVyLT5uaWQpKSkpCi0JCWdvdG8gc2tpcF90b19pbml0OwotI2VuZGlmCi0JaWYgKGNpcGhlcikKLQkJewotCQkvKiBFbnN1cmUgYSBjb250ZXh0IGxlZnQgbHlpbmcgYXJvdW5kIGZyb20gbGFzdCB0aW1lIGlzIGNsZWFyZWQKLQkJICogKHRoZSBwcmV2aW91cyBjaGVjayBhdHRlbXB0ZWQgdG8gYXZvaWQgdGhpcyBpZiB0aGUgc2FtZQotCQkgKiBFTkdJTkUgYW5kIEVWUF9DSVBIRVIgY291bGQgYmUgdXNlZCkuICovCi0JCUVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoY3R4KTsKLQotCQkvKiBSZXN0b3JlIGVuY3J5cHQgZmllbGQ6IGl0IGlzIHplcm9lZCBieSBjbGVhbnVwICovCi0JCWN0eC0+ZW5jcnlwdCA9IGVuYzsKLSNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKLQkJaWYgKCFkb19ldnBfZW5jX2VuZ2luZShjdHgsICZjaXBoZXIsIGltcGwpKQotCQkJcmV0dXJuIDA7Ci0jZW5kaWYKLQotCQljdHgtPmNpcGhlcj1jaXBoZXI7Ci0JCWlmIChjdHgtPmNpcGhlci0+Y3R4X3NpemUpCi0JCQl7Ci0JCQljdHgtPmNpcGhlcl9kYXRhPU9QRU5TU0xfbWFsbG9jKGN0eC0+Y2lwaGVyLT5jdHhfc2l6ZSk7Ci0JCQlpZiAoIWN0eC0+Y2lwaGVyX2RhdGEpCi0JCQkJewotCQkJCUVWUGVycihFVlBfRl9FVlBfQ0lQSEVSSU5JVF9FWCwgRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwotCQkJCXJldHVybiAwOwotCQkJCX0KLQkJCX0KLQkJZWxzZQotCQkJewotCQkJY3R4LT5jaXBoZXJfZGF0YSA9IE5VTEw7Ci0JCQl9Ci0JCWN0eC0+a2V5X2xlbiA9IGNpcGhlci0+a2V5X2xlbjsKLQkJY3R4LT5mbGFncyA9IDA7Ci0JCWlmKGN0eC0+Y2lwaGVyLT5mbGFncyAmIEVWUF9DSVBIX0NUUkxfSU5JVCkKLQkJCXsKLQkJCWlmKCFFVlBfQ0lQSEVSX0NUWF9jdHJsKGN0eCwgRVZQX0NUUkxfSU5JVCwgMCwgTlVMTCkpCi0JCQkJewotCQkJCUVWUGVycihFVlBfRl9FVlBfQ0lQSEVSSU5JVF9FWCwgRVZQX1JfSU5JVElBTElaQVRJT05fRVJST1IpOwotCQkJCXJldHVybiAwOwotCQkJCX0KLQkJCX0KLQkJfQotCWVsc2UgaWYoIWN0eC0+Y2lwaGVyKQotCQl7Ci0JCUVWUGVycihFVlBfRl9FVlBfQ0lQSEVSSU5JVF9FWCwgRVZQX1JfTk9fQ0lQSEVSX1NFVCk7Ci0JCXJldHVybiAwOwotCQl9Ci0jaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCi1za2lwX3RvX2luaXQ6Ci0jZW5kaWYKLQkvKiB3ZSBhc3N1bWUgYmxvY2sgc2l6ZSBpcyBhIHBvd2VyIG9mIDIgaW4gKmNyeXB0VXBkYXRlICovCi0JT1BFTlNTTF9hc3NlcnQoY3R4LT5jaXBoZXItPmJsb2NrX3NpemUgPT0gMQotCSAgICB8fCBjdHgtPmNpcGhlci0+YmxvY2tfc2l6ZSA9PSA4Ci0JICAgIHx8IGN0eC0+Y2lwaGVyLT5ibG9ja19zaXplID09IDE2KTsKLQotCWlmKCEoRVZQX0NJUEhFUl9DVFhfZmxhZ3MoY3R4KSAmIEVWUF9DSVBIX0NVU1RPTV9JVikpIHsKLQkJc3dpdGNoKEVWUF9DSVBIRVJfQ1RYX21vZGUoY3R4KSkgewotCi0JCQljYXNlIEVWUF9DSVBIX1NUUkVBTV9DSVBIRVI6Ci0JCQljYXNlIEVWUF9DSVBIX0VDQl9NT0RFOgotCQkJYnJlYWs7Ci0KLQkJCWNhc2UgRVZQX0NJUEhfQ0ZCX01PREU6Ci0JCQljYXNlIEVWUF9DSVBIX09GQl9NT0RFOgotCi0JCQljdHgtPm51bSA9IDA7Ci0KLQkJCWNhc2UgRVZQX0NJUEhfQ0JDX01PREU6Ci0KLQkJCU9QRU5TU0xfYXNzZXJ0KEVWUF9DSVBIRVJfQ1RYX2l2X2xlbmd0aChjdHgpIDw9Ci0JCQkJCShpbnQpc2l6ZW9mKGN0eC0+aXYpKTsKLQkJCWlmKGl2KSBtZW1jcHkoY3R4LT5vaXYsIGl2LCBFVlBfQ0lQSEVSX0NUWF9pdl9sZW5ndGgoY3R4KSk7Ci0JCQltZW1jcHkoY3R4LT5pdiwgY3R4LT5vaXYsIEVWUF9DSVBIRVJfQ1RYX2l2X2xlbmd0aChjdHgpKTsKLQkJCWJyZWFrOwotCi0JCQlkZWZhdWx0OgotCQkJcmV0dXJuIDA7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotI2lmZGVmIE9QRU5TU0xfRklQUwotCS8qIEFmdGVyICdrZXknIGlzIHNldCBubyBmdXJ0aGVyIHBhcmFtZXRlcnMgY2hhbmdlcyBhcmUgcGVybWlzc2libGUuCi0JICogU28gb25seSBjaGVjayBmb3Igbm9uIEZJUFMgZW5hYmxpbmcgYXQgdGhpcyBwb2ludC4KLQkgKi8KLQlpZiAoa2V5ICYmIEZJUFNfbW9kZSgpKQotCQl7Ci0JCWlmICghKGN0eC0+Y2lwaGVyLT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdfRklQUykKLQkJCSYgIShjdHgtPmZsYWdzICYgRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVykpCi0JCQl7Ci0JCQlFVlBlcnIoRVZQX0ZfRVZQX0NJUEhFUklOSVRfRVgsIEVWUF9SX0RJU0FCTEVEX0ZPUl9GSVBTKTsKLSNpZiAwCi0JCQlFUlJfYWRkX2Vycm9yX2RhdGEoMiwgImNpcGhlcj0iLAotCQkJCQkJRVZQX0NJUEhFUl9uYW1lKGN0eC0+Y2lwaGVyKSk7Ci0jZW5kaWYKLQkJCWN0eC0+Y2lwaGVyID0gJmJhZF9jaXBoZXI7Ci0JCQlyZXR1cm4gMDsKLQkJCX0KLQkJfQotI2VuZGlmCi0KLQlpZihrZXkgfHwgKGN0eC0+Y2lwaGVyLT5mbGFncyAmIEVWUF9DSVBIX0FMV0FZU19DQUxMX0lOSVQpKSB7Ci0JCWlmKCFjdHgtPmNpcGhlci0+aW5pdChjdHgsa2V5LGl2LGVuYykpIHJldHVybiAwOwotCX0KLQljdHgtPmJ1Zl9sZW49MDsKLQljdHgtPmZpbmFsX3VzZWQ9MDsKLQljdHgtPmJsb2NrX21hc2s9Y3R4LT5jaXBoZXItPmJsb2NrX3NpemUtMTsKLQlyZXR1cm4gMTsKLQl9Ci0KLWludCBFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKEVWUF9DSVBIRVJfQ1RYICpjKQotCXsKLQlpZiAoYy0+Y2lwaGVyICE9IE5VTEwpCi0JCXsKLQkJaWYoYy0+Y2lwaGVyLT5jbGVhbnVwICYmICFjLT5jaXBoZXItPmNsZWFudXAoYykpCi0JCQlyZXR1cm4gMDsKLQkJLyogQ2xlYW5zZSBjaXBoZXIgY29udGV4dCBkYXRhICovCi0JCWlmIChjLT5jaXBoZXJfZGF0YSkKLQkJCU9QRU5TU0xfY2xlYW5zZShjLT5jaXBoZXJfZGF0YSwgYy0+Y2lwaGVyLT5jdHhfc2l6ZSk7Ci0JCX0KLQlpZiAoYy0+Y2lwaGVyX2RhdGEpCi0JCU9QRU5TU0xfZnJlZShjLT5jaXBoZXJfZGF0YSk7Ci0jaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCi0JaWYgKGMtPmVuZ2luZSkKLQkJLyogVGhlIEVWUF9DSVBIRVIgd2UgdXNlZCBiZWxvbmdzIHRvIGFuIEVOR0lORSwgcmVsZWFzZSB0aGUKLQkJICogZnVuY3Rpb25hbCByZWZlcmVuY2Ugd2UgaGVsZCBmb3IgdGhpcyByZWFzb24uICovCi0JCWRvX2VuZ2luZV9maW5pc2goYy0+ZW5naW5lKTsKLSNlbmRpZgotCW1lbXNldChjLDAsc2l6ZW9mKEVWUF9DSVBIRVJfQ1RYKSk7Ci0JcmV0dXJuIDE7Ci0JfQotCi1pbnQgRVZQX0NpcGhlcihFVlBfQ0lQSEVSX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBpbnQgaW5sKQotCXsKLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLQlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0jZW5kaWYKLQlyZXR1cm4gY3R4LT5jaXBoZXItPmRvX2NpcGhlcihjdHgsb3V0LGluLGlubCk7Ci0JfQotCi1pbnQgRVZQX0NJUEhFUl9DVFhfY3RybChFVlBfQ0lQSEVSX0NUWCAqY3R4LCBpbnQgdHlwZSwgaW50IGFyZywgdm9pZCAqcHRyKQotewotCWludCByZXQ7Ci0JaWYoIWN0eC0+Y2lwaGVyKSB7Ci0JCUVWUGVycihFVlBfRl9FVlBfQ0lQSEVSX0NUWF9DVFJMLCBFVlBfUl9OT19DSVBIRVJfU0VUKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYoIWN0eC0+Y2lwaGVyLT5jdHJsKSB7Ci0JCUVWUGVycihFVlBfRl9FVlBfQ0lQSEVSX0NUWF9DVFJMLCBFVlBfUl9DVFJMX05PVF9JTVBMRU1FTlRFRCk7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldCA9IGN0eC0+Y2lwaGVyLT5jdHJsKGN0eCwgdHlwZSwgYXJnLCBwdHIpOwotCWlmKHJldCA9PSAtMSkgewotCQlFVlBlcnIoRVZQX0ZfRVZQX0NJUEhFUl9DVFhfQ1RSTCwgRVZQX1JfQ1RSTF9PUEVSQVRJT05fTk9UX0lNUExFTUVOVEVEKTsKLQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgRVZQX0NJUEhFUl9DVFhfZmxhZ3MoY29uc3QgRVZQX0NJUEhFUl9DVFggKmN0eCkKLQl7Ci0JcmV0dXJuIGN0eC0+Y2lwaGVyLT5mbGFnczsKLQl9Ci0KLWludCBFVlBfQ0lQSEVSX0NUWF9pdl9sZW5ndGgoY29uc3QgRVZQX0NJUEhFUl9DVFggKmN0eCkKLQl7Ci0JcmV0dXJuIGN0eC0+Y2lwaGVyLT5pdl9sZW47Ci0JfQotCi1pbnQgRVZQX0NJUEhFUl9uaWQoY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyKQotCXsKLQlyZXR1cm4gY2lwaGVyLT5uaWQ7Ci0JfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2V2cC9lbmNvZGUuYyBiL2NyeXB0by9ldnAvZW5jb2RlLmMKaW5kZXggNTkyMWYwZC4uYjQyYzc0NyAxMDA2NDQKLS0tIGEvY3J5cHRvL2V2cC9lbmNvZGUuYworKysgYi9jcnlwdG8vZXZwL2VuY29kZS5jCkBAIC04NSw3ICs4NSw3IEBACiAjZGVmaW5lIENIVU5LU19QRVJfTElORSAoNjQvNCkKICNkZWZpbmUgQ0hBUl9QRVJfTElORSAgICg2NCsxKQogCi1zdGF0aWMgdW5zaWduZWQgY2hhciBkYXRhX2JpbjJhc2NpaVs2NV09IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXAorc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGF0YV9iaW4yYXNjaWlbNjVdPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWlwKIGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIjsKIAogLyogMHhGMCBpcyBhIEVPTE4KQEAgLTEwMiw3ICsxMDIsNyBAQAogI2RlZmluZSBCNjRfRVJST1IgICAgICAgCTB4RkYKICNkZWZpbmUgQjY0X05PVF9CQVNFNjQoYSkJKCgoYSl8MHgxMykgPT0gMHhGMykKIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgZGF0YV9hc2NpaTJiaW5bMTI4XT17CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkYXRhX2FzY2lpMmJpblsxMjhdPXsKIAkweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCiAJMHhGRiwweEUwLDB4RjAsMHhGRiwweEZGLDB4RjEsMHhGRiwweEZGLAogCTB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwKZGlmZiAtLWdpdCBhL2NyeXB0by9ldnAvZXZwLmggYi9jcnlwdG8vZXZwL2V2cC5oCmluZGV4IDc5YzA5NzEuLjlmOTc5NWUgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ldnAvZXZwLmgKKysrIGIvY3J5cHRvL2V2cC9ldnAuaApAQCAtNzUsMTAgKzc1LDYgQEAKICNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgogI2VuZGlmCiAKLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLSNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSNlbmRpZgotCiAvKgogI2RlZmluZSBFVlBfUkMyX0tFWV9TSVpFCQkxNgogI2RlZmluZSBFVlBfUkM0X0tFWV9TSVpFCQkxNgpAQCAtMTE5LDYgKzExNSw3IEBACiAjZGVmaW5lIEVWUF9QS0VZX0RTQTQJTklEX2RzYVdpdGhTSEExXzIKICNkZWZpbmUgRVZQX1BLRVlfREgJTklEX2RoS2V5QWdyZWVtZW50CiAjZGVmaW5lIEVWUF9QS0VZX0VDCU5JRF9YOV82Ml9pZF9lY1B1YmxpY0tleQorI2RlZmluZSBFVlBfUEtFWV9ITUFDCU5JRF9obWFjCiAKICNpZmRlZglfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CkBAIC0xMzIsNiArMTI5LDggQEAKIAlpbnQgdHlwZTsKIAlpbnQgc2F2ZV90eXBlOwogCWludCByZWZlcmVuY2VzOworCWNvbnN0IEVWUF9QS0VZX0FTTjFfTUVUSE9EICphbWV0aDsKKwlFTkdJTkUgKmVuZ2luZTsKIAl1bmlvbgl7CiAJCWNoYXIgKnB0cjsKICNpZm5kZWYgT1BFTlNTTF9OT19SU0EKQEAgLTE1Niw3MyArMTU1LDYgQEAKICNkZWZpbmUgRVZQX1BLRVlfTU9fRU5DUllQVAkweDAwMDQKICNkZWZpbmUgRVZQX1BLRVlfTU9fREVDUllQVAkweDAwMDgKIAotI2lmIDAKLS8qIFRoaXMgc3RydWN0dXJlIGlzIHJlcXVpcmVkIHRvIHRpZSB0aGUgbWVzc2FnZSBkaWdlc3QgYW5kIHNpZ25pbmcgdG9nZXRoZXIuCi0gKiBUaGUgbG9va3VwIGNhbiBiZSBkb25lIGJ5IG1kL3BrZXlfbWV0aG9kLCBvaWQsIG9pZC9wa2V5X21ldGhvZCwgb3IKLSAqIG9pZCwgbWQgYW5kIHBrZXkuCi0gKiBUaGlzIGlzIHJlcXVpcmVkIGJlY2F1c2UgZm9yIHZhcmlvdXMgc21hcnQtY2FyZCBwZXJmb3JtIHRoZSBkaWdlc3QgYW5kCi0gKiBzaWduaW5nL3ZlcmlmaWNhdGlvbiBvbi1ib2FyZC4gIFRvIGhhbmRsZSB0aGlzIGNhc2UsIHRoZSBzcGVjaWZpYwotICogRVZQX01EIGFuZCBFVlBfUEtFWV9NRVRIT0RzIG5lZWQgdG8gYmUgY2xvc2VseSBhc3NvY2lhdGVkLgotICogV2hlbiBhIFBLRVkgaXMgY3JlYXRlZCwgaXQgd2lsbCBoYXZlIGEgRVZQX1BLRVlfTUVUSE9EIGFzc29jaWF0ZWQgd2l0aCBpdC4KLSAqIFRoaXMgY2FuIGVpdGhlciBiZSBzb2Z0d2FyZSBvciBhIHRva2VuIHRvIHByb3ZpZGUgdGhlIHJlcXVpcmVkIGxvdyBsZXZlbAotICogcm91dGluZXMuCi0gKi8KLXR5cGVkZWYgc3RydWN0IGV2cF9wa2V5X21kX3N0Ci0JewotCWludCBvaWQ7Ci0JRVZQX01EICptZDsKLQlFVlBfUEtFWV9NRVRIT0QgKnBrZXk7Ci0JfSBFVlBfUEtFWV9NRDsKLQotI2RlZmluZSBFVlBfcnNhX21kMigpIFwKLQkJRVZQX1BLRVlfTURfYWRkKE5JRF9tZDJXaXRoUlNBRW5jcnlwdGlvbixcCi0JCQlFVlBfcnNhX3BrY3MxKCksRVZQX21kMigpKQotI2RlZmluZSBFVlBfcnNhX21kNSgpIFwKLQkJRVZQX1BLRVlfTURfYWRkKE5JRF9tZDVXaXRoUlNBRW5jcnlwdGlvbixcCi0JCQlFVlBfcnNhX3BrY3MxKCksRVZQX21kNSgpKQotI2RlZmluZSBFVlBfcnNhX3NoYTAoKSBcCi0JCUVWUF9QS0VZX01EX2FkZChOSURfc2hhV2l0aFJTQUVuY3J5cHRpb24sXAotCQkJRVZQX3JzYV9wa2NzMSgpLEVWUF9zaGEoKSkKLSNkZWZpbmUgRVZQX3JzYV9zaGExKCkgXAotCQlFVlBfUEtFWV9NRF9hZGQoTklEX3NoYTFXaXRoUlNBRW5jcnlwdGlvbixcCi0JCQlFVlBfcnNhX3BrY3MxKCksRVZQX3NoYTEoKSkKLSNkZWZpbmUgRVZQX3JzYV9yaXBlbWQxNjAoKSBcCi0JCUVWUF9QS0VZX01EX2FkZChOSURfcmlwZW1kMTYwV2l0aFJTQSxcCi0JCQlFVlBfcnNhX3BrY3MxKCksRVZQX3JpcGVtZDE2MCgpKQotI2RlZmluZSBFVlBfcnNhX21kYzIoKSBcCi0JCUVWUF9QS0VZX01EX2FkZChOSURfbWRjMldpdGhSU0EsXAotCQkJRVZQX3JzYV9vY3RldF9zdHJpbmcoKSxFVlBfbWRjMigpKQotI2RlZmluZSBFVlBfZHNhX3NoYSgpIFwKLQkJRVZQX1BLRVlfTURfYWRkKE5JRF9kc2FXaXRoU0hBLFwKLQkJCUVWUF9kc2EoKSxFVlBfc2hhKCkpCi0jZGVmaW5lIEVWUF9kc2Ffc2hhMSgpIFwKLQkJRVZQX1BLRVlfTURfYWRkKE5JRF9kc2FXaXRoU0hBMSxcCi0JCQlFVlBfZHNhKCksRVZQX3NoYTEoKSkKLQotdHlwZWRlZiBzdHJ1Y3QgZXZwX3BrZXlfbWV0aG9kX3N0Ci0JewotCWNoYXIgKm5hbWU7Ci0JaW50IGZsYWdzOwotCWludCB0eXBlOwkJLyogUlNBLCBEU0EsIGFuIFNTTGVheSBzcGVjaWZpYyBjb25zdGFudCAqLwotCWludCBvaWQ7CQkvKiBGb3IgdGhlIHB1Yi1rZXkgdHlwZSAqLwotCWludCBlbmNyeXB0X29pZDsJLyogcHViL3ByaXYga2V5IGVuY3J5cHRpb24gKi8KLQotCWludCAoKnNpZ24pKCk7Ci0JaW50ICgqdmVyaWZ5KSgpOwotCXN0cnVjdAl7Ci0JCWludCAoKnNldCkoKTsJLyogZ2V0IGFuZC9vciBzZXQgdGhlIHVuZGVybHlpbmcgdHlwZSAqLwotCQlpbnQgKCpnZXQpKCk7Ci0JCWludCAoKmVuY3J5cHQpKCk7Ci0JCWludCAoKmRlY3J5cHQpKCk7Ci0JCWludCAoKmkyZCkoKTsKLQkJaW50ICgqZDJpKSgpOwotCQlpbnQgKCpkdXApKCk7Ci0JCX0gcHViLHByaXY7Ci0JaW50ICgqc2V0X2FzbjFfcGFyYW1ldGVycykoKTsKLQlpbnQgKCpnZXRfYXNuMV9wYXJhbWV0ZXJzKSgpOwotCX0gRVZQX1BLRVlfTUVUSE9EOwotI2VuZGlmCi0KICNpZm5kZWYgRVZQX01ECiBzdHJ1Y3QgZW52X21kX3N0CiAJewpAQCAtMjQ1LDYgKzE3Nyw4IEBACiAJaW50IHJlcXVpcmVkX3BrZXlfdHlwZVs1XTsgLypFVlBfUEtFWV94eHggKi8KIAlpbnQgYmxvY2tfc2l6ZTsKIAlpbnQgY3R4X3NpemU7IC8qIGhvdyBiaWcgZG9lcyB0aGUgY3R4LT5tZF9kYXRhIG5lZWQgdG8gYmUgKi8KKwkvKiBjb250cm9sIGZ1bmN0aW9uICovCisJaW50ICgqbWRfY3RybCkoRVZQX01EX0NUWCAqY3R4LCBpbnQgY21kLCBpbnQgcDEsIHZvaWQgKnAyKTsKIAl9IC8qIEVWUF9NRCAqLzsKIAogdHlwZWRlZiBpbnQgZXZwX3NpZ25fbWV0aG9kKGludCB0eXBlLGNvbnN0IHVuc2lnbmVkIGNoYXIgKm0sCkBAIC0yNTQsMTggKzE4OCw0MiBAQAogCQkJICAgIHVuc2lnbmVkIGludCBtX2xlbmd0aCxjb25zdCB1bnNpZ25lZCBjaGFyICpzaWdidWYsCiAJCQkgICAgdW5zaWduZWQgaW50IHNpZ2xlbiwgdm9pZCAqa2V5KTsKIAotdHlwZWRlZiBzdHJ1Y3QKLQl7Ci0JRVZQX01EX0NUWCAqbWN0eDsKLQl2b2lkICprZXk7Ci0JfSBFVlBfTURfU1ZDVFg7Ci0KICNkZWZpbmUgRVZQX01EX0ZMQUdfT05FU0hPVAkweDAwMDEgLyogZGlnZXN0IGNhbiBvbmx5IGhhbmRsZSBhIHNpbmdsZQogCQkJCQkqIGJsb2NrICovCiAKLSNkZWZpbmUgRVZQX01EX0ZMQUdfRklQUwkweDA0MDAgLyogTm90ZSBpZiBzdWl0YWJsZSBmb3IgdXNlIGluIEZJUFMgbW9kZSAqLworI2RlZmluZSBFVlBfTURfRkxBR19QS0VZX0RJR0VTVAkweDAwMDIgLyogZGlnZXN0IGlzIGEgImNsb25lIiBkaWdlc3QgdXNlZAorCQkJCQkqIHdoaWNoIGlzIGEgY29weSBvZiBhbiBleGlzdGluZworCQkJCQkqIG9uZSBmb3IgYSBzcGVjaWZpYyBwdWJsaWMga2V5IHR5cGUuCisJCQkJCSogRVZQX2RzczEoKSBldGMgKi8KIAotI2RlZmluZSBFVlBfTURfRkxBR19TVkNUWAkweDA4MDAgLyogcGFzcyBFVlBfTURfU1ZDVFggdG8gc2lnbi92ZXJpZnkgKi8KKy8qIERpZ2VzdCB1c2VzIEVWUF9QS0VZX01FVEhPRCBmb3Igc2lnbmluZyBpbnN0ZWFkIG9mIE1EIHNwZWNpZmljIHNpZ25pbmcgKi8KKworI2RlZmluZSBFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkUJMHgwMDA0CisKKy8qIERpZ2VzdEFsZ29yaXRobUlkZW50aWZpZXIgZmxhZ3MuLi4gKi8KKworI2RlZmluZSBFVlBfTURfRkxBR19ESUdBTEdJRF9NQVNLCQkweDAwMTgKKworLyogTlVMTCBvciBhYnNlbnQgcGFyYW1ldGVyIGFjY2VwdGVkLiBVc2UgTlVMTCAqLworCisjZGVmaW5lIEVWUF9NRF9GTEFHX0RJR0FMR0lEX05VTEwJCTB4MDAwMAorCisvKiBOVUxMIG9yIGFic2VudCBwYXJhbWV0ZXIgYWNjZXB0ZWQuIFVzZSBOVUxMIGZvciBQS0NTIzEgb3RoZXJ3aXNlIGFic2VudCAqLworCisjZGVmaW5lIEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVAkJMHgwMDA4CisKKy8qIEN1c3RvbSBoYW5kbGluZyB2aWEgY3RybCAqLworCisjZGVmaW5lIEVWUF9NRF9GTEFHX0RJR0FMR0lEX0NVU1RPTQkJMHgwMDE4CisKKy8qIERpZ2VzdCBjdHJscyAqLworCisjZGVmaW5lCUVWUF9NRF9DVFJMX0RJR0FMR0lECQkJMHgxCisjZGVmaW5lCUVWUF9NRF9DVFJMX01JQ0FMRwkJCTB4MgorCisvKiBNaW5pbXVtIEFsZ29yaXRobSBzcGVjaWZpYyBjdHJsIHZhbHVlICovCisKKyNkZWZpbmUJRVZQX01EX0NUUkxfQUxHX0NUUkwJCQkweDEwMDAKIAogI2RlZmluZSBFVlBfUEtFWV9OVUxMX21ldGhvZAlOVUxMLE5VTEwsezAsMCwwLDB9CiAKQEAgLTMwNyw2ICsyNjUsMTAgQEAKIAlFTkdJTkUgKmVuZ2luZTsgLyogZnVuY3Rpb25hbCByZWZlcmVuY2UgaWYgJ2RpZ2VzdCcgaXMgRU5HSU5FLXByb3ZpZGVkICovCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl2b2lkICptZF9kYXRhOworCS8qIFB1YmxpYyBrZXkgY29udGV4dCBmb3Igc2lnbi92ZXJpZnkgKi8KKwlFVlBfUEtFWV9DVFggKnBjdHg7CisJLyogVXBkYXRlIGZ1bmN0aW9uOiB1c3VhbGx5IGNvcGllZCBmcm9tIEVWUF9NRCAqLworCWludCAoKnVwZGF0ZSkoRVZQX01EX0NUWCAqY3R4LGNvbnN0IHZvaWQgKmRhdGEsc2l6ZV90IGNvdW50KTsKIAl9IC8qIEVWUF9NRF9DVFggKi87CiAKIC8qIHZhbHVlcyBmb3IgRVZQX01EX0NUWCBmbGFncyAqLwpAQCAtMzE3LDE3ICsyNzksMjMgQEAKIAkJCQkJCSogY2xlYW5lZCAqLwogI2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfUkVVU0UJCTB4MDAwNCAvKiBEb24ndCBmcmVlIHVwIGN0eC0+bWRfZGF0YQogCQkJCQkJKiBpbiBFVlBfTURfQ1RYX2NsZWFudXAgKi8KKy8qIEZJUFMgYW5kIHBhZCBvcHRpb25zIGFyZSBpZ25vcmVkIGluIDEuMC4wLCBkZWZpbml0aW9ucyBhcmUgaGVyZQorICogc28gd2UgZG9uJ3QgYWNjaWRlbnRhbGx5IHJldXNlIHRoZSB2YWx1ZXMgZm9yIG90aGVyIHB1cnBvc2VzLgorICovCisKICNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XCTB4MDAwOAkvKiBBbGxvdyB1c2Ugb2Ygbm9uIEZJUFMgZGlnZXN0CiAJCQkJCQkgKiBpbiBGSVBTIG1vZGUgKi8KIAorLyogVGhlIGZvbGxvd2luZyBQQUQgb3B0aW9ucyBhcmUgYWxzbyBjdXJyZW50bHkgaWdub3JlZCBpbiAxLjAuMCwgZGlnZXN0CisgKiBwYXJhbWV0ZXJzIGFyZSBoYW5kbGVkIHRocm91Z2ggRVZQX0RpZ2VzdFNpZ24qKCkgYW5kIEVWUF9EaWdlc3RWZXJpZnkqKCkKKyAqIGluc3RlYWQuCisgKi8KICNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX1BBRF9NQVNLCTB4RjAJLyogUlNBIG1vZGUgdG8gdXNlICovCiAjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEJMHgwMAkvKiBQS0NTIzEgdjEuNSBtb2RlICovCiAjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMQkweDEwCS8qIFg5LjMxIG1vZGUgKi8KICNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MJCTB4MjAJLyogUFNTIG1vZGUgKi8KLSNkZWZpbmUgTV9FVlBfTURfQ1RYX0ZMQUdfUFNTX1NBTFQoY3R4KSBcCi0JCSgoY3R4LT5mbGFncz4+MTYpICYweEZGRkYpIC8qIHNlZWQgbGVuZ3RoICovCi0jZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19QU1NfTURMRU4JMHhGRkZGCS8qIHNhbHQgbGVuIHNhbWUgYXMgZGlnZXN0ICovCi0jZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19QU1NfTVJFQwkweEZGRkUJLyogc2FsdCBtYXggb3IgYXV0byByZWNvdmVyZWQgKi8KKworI2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfTk9fSU5JVAkJMHgwMTAwIC8qIERvbid0IGluaXRpYWxpemUgbWRfZGF0YSAqLwogCiBzdHJ1Y3QgZXZwX2NpcGhlcl9zdAogCXsKQEAgLTMzOSw3ICszMDcsNyBAQAogCWludCAoKmluaXQpKEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKIAkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LCBpbnQgZW5jKTsJLyogaW5pdCBrZXkgKi8KIAlpbnQgKCpkb19jaXBoZXIpKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKLQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgaW50IGlubCk7LyogZW5jcnlwdC9kZWNyeXB0IGRhdGEgKi8KKwkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGlubCk7LyogZW5jcnlwdC9kZWNyeXB0IGRhdGEgKi8KIAlpbnQgKCpjbGVhbnVwKShFVlBfQ0lQSEVSX0NUWCAqKTsgLyogY2xlYW51cCBjdHggKi8KIAlpbnQgY3R4X3NpemU7CQkvKiBob3cgYmlnIGN0eC0+Y2lwaGVyX2RhdGEgbmVlZHMgdG8gYmUgKi8KIAlpbnQgKCpzZXRfYXNuMV9wYXJhbWV0ZXJzKShFVlBfQ0lQSEVSX0NUWCAqLCBBU04xX1RZUEUgKik7IC8qIFBvcHVsYXRlIGEgQVNOMV9UWVBFIHdpdGggcGFyYW1ldGVycyAqLwpAQCAtMzU3LDcgKzMyNSw3IEBACiAjZGVmaW5lCQlFVlBfQ0lQSF9DQkNfTU9ERQkJMHgyCiAjZGVmaW5lCQlFVlBfQ0lQSF9DRkJfTU9ERQkJMHgzCiAjZGVmaW5lCQlFVlBfQ0lQSF9PRkJfTU9ERQkJMHg0Ci0jZGVmaW5lIAlFVlBfQ0lQSF9NT0RFCQkJMHg3CisjZGVmaW5lIAlFVlBfQ0lQSF9NT0RFCQkJMHhGMDAwNwogLyogU2V0IGlmIHZhcmlhYmxlIGxlbmd0aCBjaXBoZXIgKi8KICNkZWZpbmUgCUVWUF9DSVBIX1ZBUklBQkxFX0xFTkdUSAkweDgKIC8qIFNldCBpZiB0aGUgaXYgaGFuZGxpbmcgc2hvdWxkIGJlIGRvbmUgYnkgdGhlIGNpcGhlciBpdHNlbGYgKi8KQEAgLTM3MiwxMCArMzQwLDggQEAKICNkZWZpbmUgCUVWUF9DSVBIX05PX1BBRERJTkcJCTB4MTAwCiAvKiBjaXBoZXIgaGFuZGxlcyByYW5kb20ga2V5IGdlbmVyYXRpb24gKi8KICNkZWZpbmUgCUVWUF9DSVBIX1JBTkRfS0VZCQkweDIwMAotLyogTm90ZSBpZiBzdWl0YWJsZSBmb3IgdXNlIGluIEZJUFMgbW9kZSAqLwotI2RlZmluZQkJRVZQX0NJUEhfRkxBR19GSVBTCQkweDQwMAotLyogQWxsb3cgbm9uIEZJUFMgY2lwaGVyIGluIEZJUFMgbW9kZSAqLwotI2RlZmluZQkJRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVwkweDgwMAorLyogY2lwaGVyIGhhcyBpdHMgb3duIGFkZGl0aW9uYWwgY29weWluZyBsb2dpYyAqLworI2RlZmluZSAJRVZQX0NJUEhfQ1VTVE9NX0NPUFkJCTB4NDAwCiAvKiBBbGxvdyB1c2UgZGVmYXVsdCBBU04xIGdldC9zZXQgaXYgKi8KICNkZWZpbmUJCUVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xCTB4MTAwMAogLyogQnVmZmVyIGxlbmd0aCBpbiBiaXRzIG5vdCBieXRlczogQ0ZCMSBtb2RlIG9ubHkgKi8KQEAgLTM5MCw2ICszNTYsOCBAQAogI2RlZmluZSAJRVZQX0NUUkxfR0VUX1JDNV9ST1VORFMJCTB4NAogI2RlZmluZSAJRVZQX0NUUkxfU0VUX1JDNV9ST1VORFMJCTB4NQogI2RlZmluZSAJRVZQX0NUUkxfUkFORF9LRVkJCTB4NgorI2RlZmluZSAJRVZQX0NUUkxfUEJFX1BSRl9OSUQJCTB4NworI2RlZmluZSAJRVZQX0NUUkxfQ09QWQkJCTB4OAogCiB0eXBlZGVmIHN0cnVjdCBldnBfY2lwaGVyX2luZm9fc3QKIAl7CkBAIC00NjIsMjYgKzQzMCwxNSBAQAogI2RlZmluZSBFVlBfZ2V0X2NpcGhlcmJ5bmlkKGEpIEVWUF9nZXRfY2lwaGVyYnluYW1lKE9CSl9uaWQyc24oYSkpCiAjZGVmaW5lIEVWUF9nZXRfY2lwaGVyYnlvYmooYSkgRVZQX2dldF9jaXBoZXJieW5pZChPQkpfb2JqMm5pZChhKSkKIAotLyogTWFjcm9zIHRvIHJlZHVjZSBGSVBTIGRlcGVuZGVuY2llczogZG8gTk9UIHVzZSBpbiBhcHBsaWNhdGlvbnMgKi8KLSNkZWZpbmUgTV9FVlBfTURfc2l6ZShlKQkJKChlKS0+bWRfc2l6ZSkKLSNkZWZpbmUgTV9FVlBfTURfYmxvY2tfc2l6ZShlKQkJKChlKS0+YmxvY2tfc2l6ZSkKLSNkZWZpbmUgTV9FVlBfTURfQ1RYX3NldF9mbGFncyhjdHgsZmxncykgKChjdHgpLT5mbGFnc3w9KGZsZ3MpKQotI2RlZmluZSBNX0VWUF9NRF9DVFhfY2xlYXJfZmxhZ3MoY3R4LGZsZ3MpICgoY3R4KS0+ZmxhZ3MmPX4oZmxncykpCi0jZGVmaW5lIE1fRVZQX01EX0NUWF90ZXN0X2ZsYWdzKGN0eCxmbGdzKSAoKGN0eCktPmZsYWdzJihmbGdzKSkKLSNkZWZpbmUgTV9FVlBfTURfdHlwZShlKQkJCSgoZSktPnR5cGUpCi0jZGVmaW5lIE1fRVZQX01EX0NUWF90eXBlKGUpCQlNX0VWUF9NRF90eXBlKE1fRVZQX01EX0NUWF9tZChlKSkKLSNkZWZpbmUgTV9FVlBfTURfQ1RYX21kKGUpCQkJKChlKS0+ZGlnZXN0KQotCi0jZGVmaW5lIE1fRVZQX0NJUEhFUl9DVFhfc2V0X2ZsYWdzKGN0eCxmbGdzKSAoKGN0eCktPmZsYWdzfD0oZmxncykpCi0KIGludCBFVlBfTURfdHlwZShjb25zdCBFVlBfTUQgKm1kKTsKICNkZWZpbmUgRVZQX01EX25pZChlKQkJCUVWUF9NRF90eXBlKGUpCiAjZGVmaW5lIEVWUF9NRF9uYW1lKGUpCQkJT0JKX25pZDJzbihFVlBfTURfbmlkKGUpKQogaW50IEVWUF9NRF9wa2V5X3R5cGUoY29uc3QgRVZQX01EICptZCk7CQogaW50IEVWUF9NRF9zaXplKGNvbnN0IEVWUF9NRCAqbWQpOwogaW50IEVWUF9NRF9ibG9ja19zaXplKGNvbnN0IEVWUF9NRCAqbWQpOwordW5zaWduZWQgbG9uZyBFVlBfTURfZmxhZ3MoY29uc3QgRVZQX01EICptZCk7CiAKLWNvbnN0IEVWUF9NRCAqIEVWUF9NRF9DVFhfbWQoY29uc3QgRVZQX01EX0NUWCAqY3R4KTsKK2NvbnN0IEVWUF9NRCAqRVZQX01EX0NUWF9tZChjb25zdCBFVlBfTURfQ1RYICpjdHgpOwogI2RlZmluZSBFVlBfTURfQ1RYX3NpemUoZSkJCUVWUF9NRF9zaXplKEVWUF9NRF9DVFhfbWQoZSkpCiAjZGVmaW5lIEVWUF9NRF9DVFhfYmxvY2tfc2l6ZShlKQlFVlBfTURfYmxvY2tfc2l6ZShFVlBfTURfQ1RYX21kKGUpKQogI2RlZmluZSBFVlBfTURfQ1RYX3R5cGUoZSkJCUVWUF9NRF90eXBlKEVWUF9NRF9DVFhfbWQoZSkpCkBAIC00OTksNiArNDU2LDcgQEAKIGludCBFVlBfQ0lQSEVSX0NUWF9ibG9ja19zaXplKGNvbnN0IEVWUF9DSVBIRVJfQ1RYICpjdHgpOwogaW50IEVWUF9DSVBIRVJfQ1RYX2tleV9sZW5ndGgoY29uc3QgRVZQX0NJUEhFUl9DVFggKmN0eCk7CiBpbnQgRVZQX0NJUEhFUl9DVFhfaXZfbGVuZ3RoKGNvbnN0IEVWUF9DSVBIRVJfQ1RYICpjdHgpOworaW50IEVWUF9DSVBIRVJfQ1RYX2NvcHkoRVZQX0NJUEhFUl9DVFggKm91dCwgY29uc3QgRVZQX0NJUEhFUl9DVFggKmluKTsKIHZvaWQgKiBFVlBfQ0lQSEVSX0NUWF9nZXRfYXBwX2RhdGEoY29uc3QgRVZQX0NJUEhFUl9DVFggKmN0eCk7CiB2b2lkIEVWUF9DSVBIRVJfQ1RYX3NldF9hcHBfZGF0YShFVlBfQ0lQSEVSX0NUWCAqY3R4LCB2b2lkICpkYXRhKTsKICNkZWZpbmUgRVZQX0NJUEhFUl9DVFhfdHlwZShjKSAgICAgICAgIEVWUF9DSVBIRVJfdHlwZShFVlBfQ0lQSEVSX0NUWF9jaXBoZXIoYykpCkBAIC01MTYsNiArNDc0LDggQEAKICNkZWZpbmUJRVZQX1ZlcmlmeVVwZGF0ZShhLGIsYykJCUVWUF9EaWdlc3RVcGRhdGUoYSxiLGMpCiAjZGVmaW5lIEVWUF9PcGVuVXBkYXRlKGEsYixjLGQsZSkJRVZQX0RlY3J5cHRVcGRhdGUoYSxiLGMsZCxlKQogI2RlZmluZSBFVlBfU2VhbFVwZGF0ZShhLGIsYyxkLGUpCUVWUF9FbmNyeXB0VXBkYXRlKGEsYixjLGQsZSkJCisjZGVmaW5lIEVWUF9EaWdlc3RTaWduVXBkYXRlKGEsYixjKQlFVlBfRGlnZXN0VXBkYXRlKGEsYixjKQorI2RlZmluZSBFVlBfRGlnZXN0VmVyaWZ5VXBkYXRlKGEsYixjKQlFVlBfRGlnZXN0VXBkYXRlKGEsYixjKQogCiAjaWZkZWYgQ09OU1RfU1RSSUNUCiB2b2lkIEJJT19zZXRfbWQoQklPICosY29uc3QgRVZQX01EICptZCk7CkBAIC01NjIsNiArNTIyLDcgQEAKIGludAlFVlBfRGlnZXN0RmluYWwoRVZQX01EX0NUWCAqY3R4LHVuc2lnbmVkIGNoYXIgKm1kLHVuc2lnbmVkIGludCAqcyk7CiAKIGludAlFVlBfcmVhZF9wd19zdHJpbmcoY2hhciAqYnVmLGludCBsZW5ndGgsY29uc3QgY2hhciAqcHJvbXB0LGludCB2ZXJpZnkpOworaW50CUVWUF9yZWFkX3B3X3N0cmluZ19taW4oY2hhciAqYnVmLGludCBtaW5sZW4saW50IG1heGxlbixjb25zdCBjaGFyICpwcm9tcHQsaW50IHZlcmlmeSk7CiB2b2lkCUVWUF9zZXRfcHdfcHJvbXB0KGNvbnN0IGNoYXIgKnByb21wdCk7CiBjaGFyICoJRVZQX2dldF9wd19wcm9tcHQodm9pZCk7CiAKQEAgLTYwOCw2ICs1NjksMTYgQEAKIGludAlFVlBfVmVyaWZ5RmluYWwoRVZQX01EX0NUWCAqY3R4LGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZ2J1ZiwKIAkJdW5zaWduZWQgaW50IHNpZ2xlbixFVlBfUEtFWSAqcGtleSk7CiAKK2ludAlFVlBfRGlnZXN0U2lnbkluaXQoRVZQX01EX0NUWCAqY3R4LCBFVlBfUEtFWV9DVFggKipwY3R4LAorCQkJY29uc3QgRVZQX01EICp0eXBlLCBFTkdJTkUgKmUsIEVWUF9QS0VZICpwa2V5KTsKK2ludAlFVlBfRGlnZXN0U2lnbkZpbmFsKEVWUF9NRF9DVFggKmN0eCwKKwkJCXVuc2lnbmVkIGNoYXIgKnNpZ3JldCwgc2l6ZV90ICpzaWdsZW4pOworCitpbnQJRVZQX0RpZ2VzdFZlcmlmeUluaXQoRVZQX01EX0NUWCAqY3R4LCBFVlBfUEtFWV9DVFggKipwY3R4LAorCQkJY29uc3QgRVZQX01EICp0eXBlLCBFTkdJTkUgKmUsIEVWUF9QS0VZICpwa2V5KTsKK2ludAlFVlBfRGlnZXN0VmVyaWZ5RmluYWwoRVZQX01EX0NUWCAqY3R4LAorCQkJdW5zaWduZWQgY2hhciAqc2lnLCBzaXplX3Qgc2lnbGVuKTsKKwogaW50CUVWUF9PcGVuSW5pdChFVlBfQ0lQSEVSX0NUWCAqY3R4LGNvbnN0IEVWUF9DSVBIRVIgKnR5cGUsCiAJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVrLCBpbnQgZWtsLCBjb25zdCB1bnNpZ25lZCBjaGFyICppdiwKIAkJRVZQX1BLRVkgKnByaXYpOwpAQCAtNjgwLDYgKzY1MSw5IEBACiAjaWZuZGVmIE9QRU5TU0xfTk9fUklQRU1ECiBjb25zdCBFVlBfTUQgKkVWUF9yaXBlbWQxNjAodm9pZCk7CiAjZW5kaWYKKyNpZm5kZWYgT1BFTlNTTF9OT19XSElSTFBPT0wKK2NvbnN0IEVWUF9NRCAqRVZQX3doaXJscG9vbCh2b2lkKTsKKyNlbmRpZgogY29uc3QgRVZQX0NJUEhFUiAqRVZQX2VuY19udWxsKHZvaWQpOwkJLyogZG9lcyBub3RoaW5nIDotKSAqLwogI2lmbmRlZiBPUEVOU1NMX05PX0RFUwogY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Rlc19lY2Iodm9pZCk7CkBAIC04NDcsMTYgKzgyMSwzMSBAQAogY29uc3QgRVZQX01EICpFVlBfZ2V0X2RpZ2VzdGJ5bmFtZShjb25zdCBjaGFyICpuYW1lKTsKIHZvaWQgRVZQX2NsZWFudXAodm9pZCk7CiAKLWludAkJRVZQX1BLRVlfZGVjcnlwdCh1bnNpZ25lZCBjaGFyICpkZWNfa2V5LAordm9pZCBFVlBfQ0lQSEVSX2RvX2FsbCh2b2lkICgqZm4pKGNvbnN0IEVWUF9DSVBIRVIgKmNpcGgsCisJCWNvbnN0IGNoYXIgKmZyb20sIGNvbnN0IGNoYXIgKnRvLCB2b2lkICp4KSwgdm9pZCAqYXJnKTsKK3ZvaWQgRVZQX0NJUEhFUl9kb19hbGxfc29ydGVkKHZvaWQgKCpmbikoY29uc3QgRVZQX0NJUEhFUiAqY2lwaCwKKwkJY29uc3QgY2hhciAqZnJvbSwgY29uc3QgY2hhciAqdG8sIHZvaWQgKngpLCB2b2lkICphcmcpOworCit2b2lkIEVWUF9NRF9kb19hbGwodm9pZCAoKmZuKShjb25zdCBFVlBfTUQgKmNpcGgsCisJCWNvbnN0IGNoYXIgKmZyb20sIGNvbnN0IGNoYXIgKnRvLCB2b2lkICp4KSwgdm9pZCAqYXJnKTsKK3ZvaWQgRVZQX01EX2RvX2FsbF9zb3J0ZWQodm9pZCAoKmZuKShjb25zdCBFVlBfTUQgKmNpcGgsCisJCWNvbnN0IGNoYXIgKmZyb20sIGNvbnN0IGNoYXIgKnRvLCB2b2lkICp4KSwgdm9pZCAqYXJnKTsKKworaW50CQlFVlBfUEtFWV9kZWNyeXB0X29sZCh1bnNpZ25lZCBjaGFyICpkZWNfa2V5LAogCQkJY29uc3QgdW5zaWduZWQgY2hhciAqZW5jX2tleSxpbnQgZW5jX2tleV9sZW4sCiAJCQlFVlBfUEtFWSAqcHJpdmF0ZV9rZXkpOwotaW50CQlFVlBfUEtFWV9lbmNyeXB0KHVuc2lnbmVkIGNoYXIgKmVuY19rZXksCitpbnQJCUVWUF9QS0VZX2VuY3J5cHRfb2xkKHVuc2lnbmVkIGNoYXIgKmVuY19rZXksCiAJCQljb25zdCB1bnNpZ25lZCBjaGFyICprZXksaW50IGtleV9sZW4sCiAJCQlFVlBfUEtFWSAqcHViX2tleSk7CiBpbnQJCUVWUF9QS0VZX3R5cGUoaW50IHR5cGUpOworaW50CQlFVlBfUEtFWV9pZChjb25zdCBFVlBfUEtFWSAqcGtleSk7CitpbnQJCUVWUF9QS0VZX2Jhc2VfaWQoY29uc3QgRVZQX1BLRVkgKnBrZXkpOwogaW50CQlFVlBfUEtFWV9iaXRzKEVWUF9QS0VZICpwa2V5KTsKIGludAkJRVZQX1BLRVlfc2l6ZShFVlBfUEtFWSAqcGtleSk7Ci1pbnQgCQlFVlBfUEtFWV9hc3NpZ24oRVZQX1BLRVkgKnBrZXksaW50IHR5cGUsY2hhciAqa2V5KTsKK2ludCAJCUVWUF9QS0VZX3NldF90eXBlKEVWUF9QS0VZICpwa2V5LGludCB0eXBlKTsKK2ludAkJRVZQX1BLRVlfc2V0X3R5cGVfc3RyKEVWUF9QS0VZICpwa2V5LCBjb25zdCBjaGFyICpzdHIsIGludCBsZW4pOworaW50IAkJRVZQX1BLRVlfYXNzaWduKEVWUF9QS0VZICpwa2V5LGludCB0eXBlLHZvaWQgKmtleSk7Cit2b2lkICoJCUVWUF9QS0VZX2dldDAoRVZQX1BLRVkgKnBrZXkpOwogCiAjaWZuZGVmIE9QRU5TU0xfTk9fUlNBCiBzdHJ1Y3QgcnNhX3N0OwpAQCAtODk5LDYgKzg4OCwxNSBAQAogCiBpbnQgRVZQX1BLRVlfY21wKGNvbnN0IEVWUF9QS0VZICphLCBjb25zdCBFVlBfUEtFWSAqYik7CiAKK2ludCBFVlBfUEtFWV9wcmludF9wdWJsaWMoQklPICpvdXQsIGNvbnN0IEVWUF9QS0VZICpwa2V5LAorCQkJCWludCBpbmRlbnQsIEFTTjFfUENUWCAqcGN0eCk7CitpbnQgRVZQX1BLRVlfcHJpbnRfcHJpdmF0ZShCSU8gKm91dCwgY29uc3QgRVZQX1BLRVkgKnBrZXksCisJCQkJaW50IGluZGVudCwgQVNOMV9QQ1RYICpwY3R4KTsKK2ludCBFVlBfUEtFWV9wcmludF9wYXJhbXMoQklPICpvdXQsIGNvbnN0IEVWUF9QS0VZICpwa2V5LAorCQkJCWludCBpbmRlbnQsIEFTTjFfUENUWCAqcGN0eCk7CisKK2ludCBFVlBfUEtFWV9nZXRfZGVmYXVsdF9kaWdlc3RfbmlkKEVWUF9QS0VZICpwa2V5LCBpbnQgKnBuaWQpOworCiBpbnQgRVZQX0NJUEhFUl90eXBlKGNvbnN0IEVWUF9DSVBIRVIgKmN0eCk7CiAKIC8qIGNhbGxzIG1ldGhvZHMgKi8KQEAgLTkxNiw2ICs5MTQsMTAgQEAKIGludCBQS0NTNV9QQktERjJfSE1BQ19TSEExKGNvbnN0IGNoYXIgKnBhc3MsIGludCBwYXNzbGVuLAogCQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2FsdCwgaW50IHNhbHRsZW4sIGludCBpdGVyLAogCQkJICAgaW50IGtleWxlbiwgdW5zaWduZWQgY2hhciAqb3V0KTsKK2ludCBQS0NTNV9QQktERjJfSE1BQyhjb25zdCBjaGFyICpwYXNzLCBpbnQgcGFzc2xlbiwKKwkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNhbHQsIGludCBzYWx0bGVuLCBpbnQgaXRlciwKKwkJCSAgIGNvbnN0IEVWUF9NRCAqZGlnZXN0LAorCQkgICAgICBpbnQga2V5bGVuLCB1bnNpZ25lZCBjaGFyICpvdXQpOwogaW50IFBLQ1M1X3YyX1BCRV9rZXlpdmdlbihFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCBjaGFyICpwYXNzLCBpbnQgcGFzc2xlbiwKIAkJCSBBU04xX1RZUEUgKnBhcmFtLCBjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIsIGNvbnN0IEVWUF9NRCAqbWQsCiAJCQkgaW50IGVuX2RlKTsKQEAgLTkyNCwyNyArOTI2LDI2MCBAQAogCiBpbnQgRVZQX1BCRV9DaXBoZXJJbml0IChBU04xX09CSkVDVCAqcGJlX29iaiwgY29uc3QgY2hhciAqcGFzcywgaW50IHBhc3NsZW4sCiAJICAgICBBU04xX1RZUEUgKnBhcmFtLCBFVlBfQ0lQSEVSX0NUWCAqY3R4LCBpbnQgZW5fZGUpOworCisvKiBQQkUgdHlwZSAqLworCisvKiBDYW4gYXBwZWFyIGFzIHRoZSBvdXRlcm1vc3QgQWxnb3JpdGhtSWRlbnRpZmllciAqLworI2RlZmluZSBFVlBfUEJFX1RZUEVfT1VURVIJMHgwCisvKiBJcyBhbiBQUkYgdHlwZSBPSUQgKi8KKyNkZWZpbmUgRVZQX1BCRV9UWVBFX1BSRgkweDEKKworaW50IEVWUF9QQkVfYWxnX2FkZF90eXBlKGludCBwYmVfdHlwZSwgaW50IHBiZV9uaWQsIGludCBjaXBoZXJfbmlkLCBpbnQgbWRfbmlkLAorCSAgICAgRVZQX1BCRV9LRVlHRU4gKmtleWdlbik7CiBpbnQgRVZQX1BCRV9hbGdfYWRkKGludCBuaWQsIGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciwgY29uc3QgRVZQX01EICptZCwKIAkJICAgIEVWUF9QQkVfS0VZR0VOICprZXlnZW4pOworaW50IEVWUF9QQkVfZmluZChpbnQgdHlwZSwgaW50IHBiZV9uaWQsCisJCQlpbnQgKnBjbmlkLCBpbnQgKnBtbmlkLCBFVlBfUEJFX0tFWUdFTiAqKnBrZXlnZW4pOwogdm9pZCBFVlBfUEJFX2NsZWFudXAodm9pZCk7CiAKLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLSNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKLXZvaWQgaW50X0VWUF9NRF9zZXRfZW5naW5lX2NhbGxiYWNrcygKLQlpbnQgKCplbmdfbWRfaW5pdCkoRU5HSU5FICppbXBsKSwKLQlpbnQgKCplbmdfbWRfZmluKShFTkdJTkUgKmltcGwpLAotCWludCAoKmVuZ19tZF9ldnApCi0JCShFVlBfTURfQ1RYICpjdHgsIGNvbnN0IEVWUF9NRCAqKnB0eXBlLCBFTkdJTkUgKmltcGwpKTsKLXZvaWQgaW50X0VWUF9NRF9pbml0X2VuZ2luZV9jYWxsYmFja3Modm9pZCk7Ci12b2lkIGludF9FVlBfQ0lQSEVSX3NldF9lbmdpbmVfY2FsbGJhY2tzKAotCWludCAoKmVuZ19jaXBoX2ZpbikoRU5HSU5FICppbXBsKSwKLQlpbnQgKCplbmdfY2lwaF9ldnApCi0JCShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCBFVlBfQ0lQSEVSICoqcGNpcGgsIEVOR0lORSAqaW1wbCkpOwotdm9pZCBpbnRfRVZQX0NJUEhFUl9pbml0X2VuZ2luZV9jYWxsYmFja3Modm9pZCk7Ci0jZW5kaWYKLSNlbmRpZgorI2RlZmluZSBBU04xX1BLRVlfQUxJQVMJCTB4MQorI2RlZmluZSBBU04xX1BLRVlfRFlOQU1JQwkweDIKKyNkZWZpbmUgQVNOMV9QS0VZX1NJR1BBUkFNX05VTEwJMHg0CiAKLXZvaWQgRVZQX2FkZF9hbGdfbW9kdWxlKHZvaWQpOworI2RlZmluZSBBU04xX1BLRVlfQ1RSTF9QS0NTN19TSUdOCTB4MQorI2RlZmluZSBBU04xX1BLRVlfQ1RSTF9QS0NTN19FTkNSWVBUCTB4MgorI2RlZmluZSBBU04xX1BLRVlfQ1RSTF9ERUZBVUxUX01EX05JRAkweDMKKyNkZWZpbmUgQVNOMV9QS0VZX0NUUkxfQ01TX1NJR04JCTB4NQorI2RlZmluZSBBU04xX1BLRVlfQ1RSTF9DTVNfRU5WRUxPUEUJMHg3CisKK2ludCBFVlBfUEtFWV9hc24xX2dldF9jb3VudCh2b2lkKTsKK2NvbnN0IEVWUF9QS0VZX0FTTjFfTUVUSE9EICpFVlBfUEtFWV9hc24xX2dldDAoaW50IGlkeCk7Citjb25zdCBFVlBfUEtFWV9BU04xX01FVEhPRCAqRVZQX1BLRVlfYXNuMV9maW5kKEVOR0lORSAqKnBlLCBpbnQgdHlwZSk7Citjb25zdCBFVlBfUEtFWV9BU04xX01FVEhPRCAqRVZQX1BLRVlfYXNuMV9maW5kX3N0cihFTkdJTkUgKipwZSwKKwkJCQkJY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuKTsKK2ludCBFVlBfUEtFWV9hc24xX2FkZDAoY29uc3QgRVZQX1BLRVlfQVNOMV9NRVRIT0QgKmFtZXRoKTsKK2ludCBFVlBfUEtFWV9hc24xX2FkZF9hbGlhcyhpbnQgdG8sIGludCBmcm9tKTsKK2ludCBFVlBfUEtFWV9hc24xX2dldDBfaW5mbyhpbnQgKnBwa2V5X2lkLCBpbnQgKnBrZXlfYmFzZV9pZCwgaW50ICpwcGtleV9mbGFncywKKwkJCQljb25zdCBjaGFyICoqcGluZm8sIGNvbnN0IGNoYXIgKipwcGVtX3N0ciwKKwkJCQkJY29uc3QgRVZQX1BLRVlfQVNOMV9NRVRIT0QgKmFtZXRoKTsKKworY29uc3QgRVZQX1BLRVlfQVNOMV9NRVRIT0QqIEVWUF9QS0VZX2dldDBfYXNuMShFVlBfUEtFWSAqcGtleSk7CitFVlBfUEtFWV9BU04xX01FVEhPRCogRVZQX1BLRVlfYXNuMV9uZXcoaW50IGlkLCBpbnQgZmxhZ3MsCisJCQkJCWNvbnN0IGNoYXIgKnBlbV9zdHIsIGNvbnN0IGNoYXIgKmluZm8pOwordm9pZCBFVlBfUEtFWV9hc24xX2NvcHkoRVZQX1BLRVlfQVNOMV9NRVRIT0QgKmRzdCwgCisJCQljb25zdCBFVlBfUEtFWV9BU04xX01FVEhPRCAqc3JjKTsKK3ZvaWQgRVZQX1BLRVlfYXNuMV9mcmVlKEVWUF9QS0VZX0FTTjFfTUVUSE9EICphbWV0aCk7Cit2b2lkIEVWUF9QS0VZX2FzbjFfc2V0X3B1YmxpYyhFVlBfUEtFWV9BU04xX01FVEhPRCAqYW1ldGgsCisJCWludCAoKnB1Yl9kZWNvZGUpKEVWUF9QS0VZICpwaywgWDUwOV9QVUJLRVkgKnB1YiksCisJCWludCAoKnB1Yl9lbmNvZGUpKFg1MDlfUFVCS0VZICpwdWIsIGNvbnN0IEVWUF9QS0VZICpwayksCisJCWludCAoKnB1Yl9jbXApKGNvbnN0IEVWUF9QS0VZICphLCBjb25zdCBFVlBfUEtFWSAqYiksCisJCWludCAoKnB1Yl9wcmludCkoQklPICpvdXQsIGNvbnN0IEVWUF9QS0VZICpwa2V5LCBpbnQgaW5kZW50LAorCQkJCQkJCUFTTjFfUENUWCAqcGN0eCksCisJCWludCAoKnBrZXlfc2l6ZSkoY29uc3QgRVZQX1BLRVkgKnBrKSwKKwkJaW50ICgqcGtleV9iaXRzKShjb25zdCBFVlBfUEtFWSAqcGspKTsKK3ZvaWQgRVZQX1BLRVlfYXNuMV9zZXRfcHJpdmF0ZShFVlBfUEtFWV9BU04xX01FVEhPRCAqYW1ldGgsCisJCWludCAoKnByaXZfZGVjb2RlKShFVlBfUEtFWSAqcGssIFBLQ1M4X1BSSVZfS0VZX0lORk8gKnA4aW5mKSwKKwkJaW50ICgqcHJpdl9lbmNvZGUpKFBLQ1M4X1BSSVZfS0VZX0lORk8gKnA4LCBjb25zdCBFVlBfUEtFWSAqcGspLAorCQlpbnQgKCpwcml2X3ByaW50KShCSU8gKm91dCwgY29uc3QgRVZQX1BLRVkgKnBrZXksIGludCBpbmRlbnQsCisJCQkJCQkJQVNOMV9QQ1RYICpwY3R4KSk7Cit2b2lkIEVWUF9QS0VZX2FzbjFfc2V0X3BhcmFtKEVWUF9QS0VZX0FTTjFfTUVUSE9EICphbWV0aCwKKwkJaW50ICgqcGFyYW1fZGVjb2RlKShFVlBfUEtFWSAqcGtleSwKKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICoqcGRlciwgaW50IGRlcmxlbiksCisJCWludCAoKnBhcmFtX2VuY29kZSkoY29uc3QgRVZQX1BLRVkgKnBrZXksIHVuc2lnbmVkIGNoYXIgKipwZGVyKSwKKwkJaW50ICgqcGFyYW1fbWlzc2luZykoY29uc3QgRVZQX1BLRVkgKnBrKSwKKwkJaW50ICgqcGFyYW1fY29weSkoRVZQX1BLRVkgKnRvLCBjb25zdCBFVlBfUEtFWSAqZnJvbSksCisJCWludCAoKnBhcmFtX2NtcCkoY29uc3QgRVZQX1BLRVkgKmEsIGNvbnN0IEVWUF9QS0VZICpiKSwKKwkJaW50ICgqcGFyYW1fcHJpbnQpKEJJTyAqb3V0LCBjb25zdCBFVlBfUEtFWSAqcGtleSwgaW50IGluZGVudCwKKwkJCQkJCQlBU04xX1BDVFggKnBjdHgpKTsKKwordm9pZCBFVlBfUEtFWV9hc24xX3NldF9mcmVlKEVWUF9QS0VZX0FTTjFfTUVUSE9EICphbWV0aCwKKwkJdm9pZCAoKnBrZXlfZnJlZSkoRVZQX1BLRVkgKnBrZXkpKTsKK3ZvaWQgRVZQX1BLRVlfYXNuMV9zZXRfY3RybChFVlBfUEtFWV9BU04xX01FVEhPRCAqYW1ldGgsCisJCWludCAoKnBrZXlfY3RybCkoRVZQX1BLRVkgKnBrZXksIGludCBvcCwKKwkJCQkJCQlsb25nIGFyZzEsIHZvaWQgKmFyZzIpKTsKKworCisjZGVmaW5lIEVWUF9QS0VZX09QX1VOREVGSU5FRAkJMAorI2RlZmluZSBFVlBfUEtFWV9PUF9QQVJBTUdFTgkJKDE8PDEpCisjZGVmaW5lIEVWUF9QS0VZX09QX0tFWUdFTgkJKDE8PDIpCisjZGVmaW5lIEVWUF9QS0VZX09QX1NJR04JCSgxPDwzKQorI2RlZmluZSBFVlBfUEtFWV9PUF9WRVJJRlkJCSgxPDw0KQorI2RlZmluZSBFVlBfUEtFWV9PUF9WRVJJRllSRUNPVkVSCSgxPDw1KQorI2RlZmluZSBFVlBfUEtFWV9PUF9TSUdOQ1RYCQkoMTw8NikKKyNkZWZpbmUgRVZQX1BLRVlfT1BfVkVSSUZZQ1RYCQkoMTw8NykKKyNkZWZpbmUgRVZQX1BLRVlfT1BfRU5DUllQVAkJKDE8PDgpCisjZGVmaW5lIEVWUF9QS0VZX09QX0RFQ1JZUFQJCSgxPDw5KQorI2RlZmluZSBFVlBfUEtFWV9PUF9ERVJJVkUJCSgxPDwxMCkKKworI2RlZmluZSBFVlBfUEtFWV9PUF9UWVBFX1NJRwlcCisJKEVWUF9QS0VZX09QX1NJR04gfCBFVlBfUEtFWV9PUF9WRVJJRlkgfCBFVlBfUEtFWV9PUF9WRVJJRllSRUNPVkVSIFwKKwkJfCBFVlBfUEtFWV9PUF9TSUdOQ1RYIHwgRVZQX1BLRVlfT1BfVkVSSUZZQ1RYKQorCisjZGVmaW5lIEVWUF9QS0VZX09QX1RZUEVfQ1JZUFQgXAorCShFVlBfUEtFWV9PUF9FTkNSWVBUIHwgRVZQX1BLRVlfT1BfREVDUllQVCkKKworI2RlZmluZSBFVlBfUEtFWV9PUF9UWVBFX05PR0VOIFwKKwkoRVZQX1BLRVlfT1BfU0lHIHwgRVZQX1BLRVlfT1BfQ1JZUFQgfCBFVlBfUEtFWV9PUF9ERVJJVkUpCisKKyNkZWZpbmUgRVZQX1BLRVlfT1BfVFlQRV9HRU4gXAorCQkoRVZQX1BLRVlfT1BfUEFSQU1HRU4gfCBFVlBfUEtFWV9PUF9LRVlHRU4pCisKKyNkZWZpbmUJIEVWUF9QS0VZX0NUWF9zZXRfc2lnbmF0dXJlX21kKGN0eCwgbWQpCVwKKwkJRVZQX1BLRVlfQ1RYX2N0cmwoY3R4LCAtMSwgRVZQX1BLRVlfT1BfVFlQRV9TSUcsICBcCisJCQkJCUVWUF9QS0VZX0NUUkxfTUQsIDAsICh2b2lkICopbWQpCisKKyNkZWZpbmUgRVZQX1BLRVlfQ1RSTF9NRAkJMQorI2RlZmluZSBFVlBfUEtFWV9DVFJMX1BFRVJfS0VZCQkyCisKKyNkZWZpbmUgRVZQX1BLRVlfQ1RSTF9QS0NTN19FTkNSWVBUCTMKKyNkZWZpbmUgRVZQX1BLRVlfQ1RSTF9QS0NTN19ERUNSWVBUCTQKKworI2RlZmluZSBFVlBfUEtFWV9DVFJMX1BLQ1M3X1NJR04JNQorCisjZGVmaW5lIEVWUF9QS0VZX0NUUkxfU0VUX01BQ19LRVkJNgorCisjZGVmaW5lIEVWUF9QS0VZX0NUUkxfRElHRVNUSU5JVAk3CisKKy8qIFVzZWQgYnkgR09TVCBrZXkgZW5jcnlwdGlvbiBpbiBUTFMgKi8KKyNkZWZpbmUgRVZQX1BLRVlfQ1RSTF9TRVRfSVYgCQk4CisKKyNkZWZpbmUgRVZQX1BLRVlfQ1RSTF9DTVNfRU5DUllQVAk5CisjZGVmaW5lIEVWUF9QS0VZX0NUUkxfQ01TX0RFQ1JZUFQJMTAKKyNkZWZpbmUgRVZQX1BLRVlfQ1RSTF9DTVNfU0lHTgkJMTEKKworI2RlZmluZSBFVlBfUEtFWV9BTEdfQ1RSTAkJMHgxMDAwCisKKworI2RlZmluZSBFVlBfUEtFWV9GTEFHX0FVVE9BUkdMRU4JMgorCitjb25zdCBFVlBfUEtFWV9NRVRIT0QgKkVWUF9QS0VZX21ldGhfZmluZChpbnQgdHlwZSk7CitFVlBfUEtFWV9NRVRIT0QqIEVWUF9QS0VZX21ldGhfbmV3KGludCBpZCwgaW50IGZsYWdzKTsKK3ZvaWQgRVZQX1BLRVlfbWV0aF9mcmVlKEVWUF9QS0VZX01FVEhPRCAqcG1ldGgpOworaW50IEVWUF9QS0VZX21ldGhfYWRkMChjb25zdCBFVlBfUEtFWV9NRVRIT0QgKnBtZXRoKTsKKworRVZQX1BLRVlfQ1RYICpFVlBfUEtFWV9DVFhfbmV3KEVWUF9QS0VZICpwa2V5LCBFTkdJTkUgKmUpOworRVZQX1BLRVlfQ1RYICpFVlBfUEtFWV9DVFhfbmV3X2lkKGludCBpZCwgRU5HSU5FICplKTsKK0VWUF9QS0VZX0NUWCAqRVZQX1BLRVlfQ1RYX2R1cChFVlBfUEtFWV9DVFggKmN0eCk7Cit2b2lkIEVWUF9QS0VZX0NUWF9mcmVlKEVWUF9QS0VZX0NUWCAqY3R4KTsKKworaW50IEVWUF9QS0VZX0NUWF9jdHJsKEVWUF9QS0VZX0NUWCAqY3R4LCBpbnQga2V5dHlwZSwgaW50IG9wdHlwZSwKKwkJCQlpbnQgY21kLCBpbnQgcDEsIHZvaWQgKnAyKTsKK2ludCBFVlBfUEtFWV9DVFhfY3RybF9zdHIoRVZQX1BLRVlfQ1RYICpjdHgsIGNvbnN0IGNoYXIgKnR5cGUsCisJCQkJCQljb25zdCBjaGFyICp2YWx1ZSk7CisKK2ludCBFVlBfUEtFWV9DVFhfZ2V0X29wZXJhdGlvbihFVlBfUEtFWV9DVFggKmN0eCk7Cit2b2lkIEVWUF9QS0VZX0NUWF9zZXQwX2tleWdlbl9pbmZvKEVWUF9QS0VZX0NUWCAqY3R4LCBpbnQgKmRhdCwgaW50IGRhdGxlbik7CisKK0VWUF9QS0VZICpFVlBfUEtFWV9uZXdfbWFjX2tleShpbnQgdHlwZSwgRU5HSU5FICplLAorCQkJCXVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbik7CisKK3ZvaWQgRVZQX1BLRVlfQ1RYX3NldF9kYXRhKEVWUF9QS0VZX0NUWCAqY3R4LCB2b2lkICpkYXRhKTsKK3ZvaWQgKkVWUF9QS0VZX0NUWF9nZXRfZGF0YShFVlBfUEtFWV9DVFggKmN0eCk7CitFVlBfUEtFWSAqRVZQX1BLRVlfQ1RYX2dldDBfcGtleShFVlBfUEtFWV9DVFggKmN0eCk7CisKK0VWUF9QS0VZICpFVlBfUEtFWV9DVFhfZ2V0MF9wZWVya2V5KEVWUF9QS0VZX0NUWCAqY3R4KTsKKwordm9pZCBFVlBfUEtFWV9DVFhfc2V0X2FwcF9kYXRhKEVWUF9QS0VZX0NUWCAqY3R4LCB2b2lkICpkYXRhKTsKK3ZvaWQgKkVWUF9QS0VZX0NUWF9nZXRfYXBwX2RhdGEoRVZQX1BLRVlfQ1RYICpjdHgpOworCitpbnQgRVZQX1BLRVlfc2lnbl9pbml0KEVWUF9QS0VZX0NUWCAqY3R4KTsKK2ludCBFVlBfUEtFWV9zaWduKEVWUF9QS0VZX0NUWCAqY3R4LAorCQkJdW5zaWduZWQgY2hhciAqc2lnLCBzaXplX3QgKnNpZ2xlbiwKKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnRicywgc2l6ZV90IHRic2xlbik7CitpbnQgRVZQX1BLRVlfdmVyaWZ5X2luaXQoRVZQX1BLRVlfQ1RYICpjdHgpOworaW50IEVWUF9QS0VZX3ZlcmlmeShFVlBfUEtFWV9DVFggKmN0eCwKKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZywgc2l6ZV90IHNpZ2xlbiwKKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnRicywgc2l6ZV90IHRic2xlbik7CitpbnQgRVZQX1BLRVlfdmVyaWZ5X3JlY292ZXJfaW5pdChFVlBfUEtFWV9DVFggKmN0eCk7CitpbnQgRVZQX1BLRVlfdmVyaWZ5X3JlY292ZXIoRVZQX1BLRVlfQ1RYICpjdHgsCisJCQl1bnNpZ25lZCBjaGFyICpyb3V0LCBzaXplX3QgKnJvdXRsZW4sCisJCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaWcsIHNpemVfdCBzaWdsZW4pOworaW50IEVWUF9QS0VZX2VuY3J5cHRfaW5pdChFVlBfUEtFWV9DVFggKmN0eCk7CitpbnQgRVZQX1BLRVlfZW5jcnlwdChFVlBfUEtFWV9DVFggKmN0eCwKKwkJCXVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90ICpvdXRsZW4sCisJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGlubGVuKTsKK2ludCBFVlBfUEtFWV9kZWNyeXB0X2luaXQoRVZQX1BLRVlfQ1RYICpjdHgpOworaW50IEVWUF9QS0VZX2RlY3J5cHQoRVZQX1BLRVlfQ1RYICpjdHgsCisJCQl1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCAqb3V0bGVuLAorCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBpbmxlbik7CisKK2ludCBFVlBfUEtFWV9kZXJpdmVfaW5pdChFVlBfUEtFWV9DVFggKmN0eCk7CitpbnQgRVZQX1BLRVlfZGVyaXZlX3NldF9wZWVyKEVWUF9QS0VZX0NUWCAqY3R4LCBFVlBfUEtFWSAqcGVlcik7CitpbnQgRVZQX1BLRVlfZGVyaXZlKEVWUF9QS0VZX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICprZXksIHNpemVfdCAqa2V5bGVuKTsKKwordHlwZWRlZiBpbnQgRVZQX1BLRVlfZ2VuX2NiKEVWUF9QS0VZX0NUWCAqY3R4KTsKKworaW50IEVWUF9QS0VZX3BhcmFtZ2VuX2luaXQoRVZQX1BLRVlfQ1RYICpjdHgpOworaW50IEVWUF9QS0VZX3BhcmFtZ2VuKEVWUF9QS0VZX0NUWCAqY3R4LCBFVlBfUEtFWSAqKnBwa2V5KTsKK2ludCBFVlBfUEtFWV9rZXlnZW5faW5pdChFVlBfUEtFWV9DVFggKmN0eCk7CitpbnQgRVZQX1BLRVlfa2V5Z2VuKEVWUF9QS0VZX0NUWCAqY3R4LCBFVlBfUEtFWSAqKnBwa2V5KTsKKwordm9pZCBFVlBfUEtFWV9DVFhfc2V0X2NiKEVWUF9QS0VZX0NUWCAqY3R4LCBFVlBfUEtFWV9nZW5fY2IgKmNiKTsKK0VWUF9QS0VZX2dlbl9jYiAqRVZQX1BLRVlfQ1RYX2dldF9jYihFVlBfUEtFWV9DVFggKmN0eCk7CisKK2ludCBFVlBfUEtFWV9DVFhfZ2V0X2tleWdlbl9pbmZvKEVWUF9QS0VZX0NUWCAqY3R4LCBpbnQgaWR4KTsKKwordm9pZCBFVlBfUEtFWV9tZXRoX3NldF9pbml0KEVWUF9QS0VZX01FVEhPRCAqcG1ldGgsCisJaW50ICgqaW5pdCkoRVZQX1BLRVlfQ1RYICpjdHgpKTsKKwordm9pZCBFVlBfUEtFWV9tZXRoX3NldF9jb3B5KEVWUF9QS0VZX01FVEhPRCAqcG1ldGgsCisJaW50ICgqY29weSkoRVZQX1BLRVlfQ1RYICpkc3QsIEVWUF9QS0VZX0NUWCAqc3JjKSk7CisKK3ZvaWQgRVZQX1BLRVlfbWV0aF9zZXRfY2xlYW51cChFVlBfUEtFWV9NRVRIT0QgKnBtZXRoLAorCXZvaWQgKCpjbGVhbnVwKShFVlBfUEtFWV9DVFggKmN0eCkpOworCit2b2lkIEVWUF9QS0VZX21ldGhfc2V0X3BhcmFtZ2VuKEVWUF9QS0VZX01FVEhPRCAqcG1ldGgsCisJaW50ICgqcGFyYW1nZW5faW5pdCkoRVZQX1BLRVlfQ1RYICpjdHgpLAorCWludCAoKnBhcmFtZ2VuKShFVlBfUEtFWV9DVFggKmN0eCwgRVZQX1BLRVkgKnBrZXkpKTsKKwordm9pZCBFVlBfUEtFWV9tZXRoX3NldF9rZXlnZW4oRVZQX1BLRVlfTUVUSE9EICpwbWV0aCwKKwlpbnQgKCprZXlnZW5faW5pdCkoRVZQX1BLRVlfQ1RYICpjdHgpLAorCWludCAoKmtleWdlbikoRVZQX1BLRVlfQ1RYICpjdHgsIEVWUF9QS0VZICpwa2V5KSk7CisKK3ZvaWQgRVZQX1BLRVlfbWV0aF9zZXRfc2lnbihFVlBfUEtFWV9NRVRIT0QgKnBtZXRoLAorCWludCAoKnNpZ25faW5pdCkoRVZQX1BLRVlfQ1RYICpjdHgpLAorCWludCAoKnNpZ24pKEVWUF9QS0VZX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpzaWcsIHNpemVfdCAqc2lnbGVuLAorCQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICp0YnMsIHNpemVfdCB0YnNsZW4pKTsKKwordm9pZCBFVlBfUEtFWV9tZXRoX3NldF92ZXJpZnkoRVZQX1BLRVlfTUVUSE9EICpwbWV0aCwKKwlpbnQgKCp2ZXJpZnlfaW5pdCkoRVZQX1BLRVlfQ1RYICpjdHgpLAorCWludCAoKnZlcmlmeSkoRVZQX1BLRVlfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZywgc2l6ZV90IHNpZ2xlbiwKKwkJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqdGJzLCBzaXplX3QgdGJzbGVuKSk7CisKK3ZvaWQgRVZQX1BLRVlfbWV0aF9zZXRfdmVyaWZ5X3JlY292ZXIoRVZQX1BLRVlfTUVUSE9EICpwbWV0aCwKKwlpbnQgKCp2ZXJpZnlfcmVjb3Zlcl9pbml0KShFVlBfUEtFWV9DVFggKmN0eCksCisJaW50ICgqdmVyaWZ5X3JlY292ZXIpKEVWUF9QS0VZX0NUWCAqY3R4LAorCQkJCQl1bnNpZ25lZCBjaGFyICpzaWcsIHNpemVfdCAqc2lnbGVuLAorCQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICp0YnMsIHNpemVfdCB0YnNsZW4pKTsKKwordm9pZCBFVlBfUEtFWV9tZXRoX3NldF9zaWduY3R4KEVWUF9QS0VZX01FVEhPRCAqcG1ldGgsCisJaW50ICgqc2lnbmN0eF9pbml0KShFVlBfUEtFWV9DVFggKmN0eCwgRVZQX01EX0NUWCAqbWN0eCksCisJaW50ICgqc2lnbmN0eCkoRVZQX1BLRVlfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKnNpZywgc2l6ZV90ICpzaWdsZW4sCisJCQkJCUVWUF9NRF9DVFggKm1jdHgpKTsKKwordm9pZCBFVlBfUEtFWV9tZXRoX3NldF92ZXJpZnljdHgoRVZQX1BLRVlfTUVUSE9EICpwbWV0aCwKKwlpbnQgKCp2ZXJpZnljdHhfaW5pdCkoRVZQX1BLRVlfQ1RYICpjdHgsIEVWUF9NRF9DVFggKm1jdHgpLAorCWludCAoKnZlcmlmeWN0eCkoRVZQX1BLRVlfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZyxpbnQgc2lnbGVuLAorCQkJCQlFVlBfTURfQ1RYICptY3R4KSk7CisKK3ZvaWQgRVZQX1BLRVlfbWV0aF9zZXRfZW5jcnlwdChFVlBfUEtFWV9NRVRIT0QgKnBtZXRoLAorCWludCAoKmVuY3J5cHRfaW5pdCkoRVZQX1BLRVlfQ1RYICpjdHgpLAorCWludCAoKmVuY3J5cHRmbikoRVZQX1BLRVlfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90ICpvdXRsZW4sCisJCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgaW5sZW4pKTsKKwordm9pZCBFVlBfUEtFWV9tZXRoX3NldF9kZWNyeXB0KEVWUF9QS0VZX01FVEhPRCAqcG1ldGgsCisJaW50ICgqZGVjcnlwdF9pbml0KShFVlBfUEtFWV9DVFggKmN0eCksCisJaW50ICgqZGVjcnlwdCkoRVZQX1BLRVlfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90ICpvdXRsZW4sCisJCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgaW5sZW4pKTsKKwordm9pZCBFVlBfUEtFWV9tZXRoX3NldF9kZXJpdmUoRVZQX1BLRVlfTUVUSE9EICpwbWV0aCwKKwlpbnQgKCpkZXJpdmVfaW5pdCkoRVZQX1BLRVlfQ1RYICpjdHgpLAorCWludCAoKmRlcml2ZSkoRVZQX1BLRVlfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKmtleSwgc2l6ZV90ICprZXlsZW4pKTsKKwordm9pZCBFVlBfUEtFWV9tZXRoX3NldF9jdHJsKEVWUF9QS0VZX01FVEhPRCAqcG1ldGgsCisJaW50ICgqY3RybCkoRVZQX1BLRVlfQ1RYICpjdHgsIGludCB0eXBlLCBpbnQgcDEsIHZvaWQgKnAyKSwKKwlpbnQgKCpjdHJsX3N0cikoRVZQX1BLRVlfQ1RYICpjdHgsCisJCQkJCWNvbnN0IGNoYXIgKnR5cGUsIGNvbnN0IGNoYXIgKnZhbHVlKSk7CiAKIC8qIEJFR0lOIEVSUk9SIENPREVTICovCiAvKiBUaGUgZm9sbG93aW5nIGxpbmVzIGFyZSBhdXRvIGdlbmVyYXRlZCBieSB0aGUgc2NyaXB0IG1rZXJyLnBsLiBBbnkgY2hhbmdlcwpAQCAtOTU2LDQ2ICsxMTkxLDY2IEBACiAKIC8qIEZ1bmN0aW9uIGNvZGVzLiAqLwogI2RlZmluZSBFVlBfRl9BRVNfSU5JVF9LRVkJCQkJIDEzMwotI2RlZmluZSBFVlBfRl9BTEdfTU9EVUxFX0lOSVQJCQkJIDEzOAogI2RlZmluZSBFVlBfRl9DQU1FTExJQV9JTklUX0tFWQkJCQkgMTU5CiAjZGVmaW5lIEVWUF9GX0QySV9QS0VZCQkJCQkgMTAwCi0jZGVmaW5lIEVWUF9GX0RPX0VWUF9FTkNfRU5HSU5FCQkJCSAxNDAKLSNkZWZpbmUgRVZQX0ZfRE9fRVZQX0VOQ19FTkdJTkVfRlVMTAkJCSAxNDEKLSNkZWZpbmUgRVZQX0ZfRE9fRVZQX01EX0VOR0lORQkJCQkgMTM5Ci0jZGVmaW5lIEVWUF9GX0RPX0VWUF9NRF9FTkdJTkVfRlVMTAkJCSAxNDIKKyNkZWZpbmUgRVZQX0ZfRE9fU0lHVkVSX0lOSVQJCQkJIDE2MQogI2RlZmluZSBFVlBfRl9EU0FQS0VZMlBLQ1M4CQkJCSAxMzQKICNkZWZpbmUgRVZQX0ZfRFNBX1BLRVkyUEtDUzgJCQkJIDEzNQogI2RlZmluZSBFVlBfRl9FQ0RTQV9QS0VZMlBLQ1M4CQkJCSAxMjkKICNkZWZpbmUgRVZQX0ZfRUNLRVlfUEtFWTJQS0NTOAkJCQkgMTMyCi0jZGVmaW5lIEVWUF9GX0VWUF9DSVBIRVJJTklUCQkJCSAxMzcKICNkZWZpbmUgRVZQX0ZfRVZQX0NJUEhFUklOSVRfRVgJCQkJIDEyMworI2RlZmluZSBFVlBfRl9FVlBfQ0lQSEVSX0NUWF9DT1BZCQkJIDE2MwogI2RlZmluZSBFVlBfRl9FVlBfQ0lQSEVSX0NUWF9DVFJMCQkJIDEyNAogI2RlZmluZSBFVlBfRl9FVlBfQ0lQSEVSX0NUWF9TRVRfS0VZX0xFTkdUSAkJIDEyMgogI2RlZmluZSBFVlBfRl9FVlBfREVDUllQVEZJTkFMX0VYCQkJIDEwMQotI2RlZmluZSBFVlBfRl9FVlBfRElHRVNUSU5JVAkJCQkgMTM2CiAjZGVmaW5lIEVWUF9GX0VWUF9ESUdFU1RJTklUX0VYCQkJCSAxMjgKICNkZWZpbmUgRVZQX0ZfRVZQX0VOQ1JZUFRGSU5BTF9FWAkJCSAxMjcKICNkZWZpbmUgRVZQX0ZfRVZQX01EX0NUWF9DT1BZX0VYCQkJIDExMAorI2RlZmluZSBFVlBfRl9FVlBfTURfU0laRQkJCQkgMTYyCiAjZGVmaW5lIEVWUF9GX0VWUF9PUEVOSU5JVAkJCQkgMTAyCiAjZGVmaW5lIEVWUF9GX0VWUF9QQkVfQUxHX0FERAkJCQkgMTE1CisjZGVmaW5lIEVWUF9GX0VWUF9QQkVfQUxHX0FERF9UWVBFCQkJIDE2MAogI2RlZmluZSBFVlBfRl9FVlBfUEJFX0NJUEhFUklOSVQJCQkgMTE2CiAjZGVmaW5lIEVWUF9GX0VWUF9QS0NTODJQS0VZCQkJCSAxMTEKKyNkZWZpbmUgRVZQX0ZfRVZQX1BLQ1M4MlBLRVlfQlJPS0VOCQkJIDEzNgogI2RlZmluZSBFVlBfRl9FVlBfUEtFWTJQS0NTOF9CUk9LRU4JCQkgMTEzCiAjZGVmaW5lIEVWUF9GX0VWUF9QS0VZX0NPUFlfUEFSQU1FVEVSUwkJCSAxMDMKKyNkZWZpbmUgRVZQX0ZfRVZQX1BLRVlfQ1RYX0NUUkwJCQkJIDEzNworI2RlZmluZSBFVlBfRl9FVlBfUEtFWV9DVFhfQ1RSTF9TVFIJCQkgMTUwCisjZGVmaW5lIEVWUF9GX0VWUF9QS0VZX0NUWF9EVVAJCQkJIDE1NgogI2RlZmluZSBFVlBfRl9FVlBfUEtFWV9ERUNSWVBUCQkJCSAxMDQKKyNkZWZpbmUgRVZQX0ZfRVZQX1BLRVlfREVDUllQVF9JTklUCQkJIDEzOAorI2RlZmluZSBFVlBfRl9FVlBfUEtFWV9ERUNSWVBUX09MRAkJCSAxNTEKKyNkZWZpbmUgRVZQX0ZfRVZQX1BLRVlfREVSSVZFCQkJCSAxNTMKKyNkZWZpbmUgRVZQX0ZfRVZQX1BLRVlfREVSSVZFX0lOSVQJCQkgMTU0CisjZGVmaW5lIEVWUF9GX0VWUF9QS0VZX0RFUklWRV9TRVRfUEVFUgkJCSAxNTUKICNkZWZpbmUgRVZQX0ZfRVZQX1BLRVlfRU5DUllQVAkJCQkgMTA1CisjZGVmaW5lIEVWUF9GX0VWUF9QS0VZX0VOQ1JZUFRfSU5JVAkJCSAxMzkKKyNkZWZpbmUgRVZQX0ZfRVZQX1BLRVlfRU5DUllQVF9PTEQJCQkgMTUyCiAjZGVmaW5lIEVWUF9GX0VWUF9QS0VZX0dFVDFfREgJCQkJIDExOQogI2RlZmluZSBFVlBfRl9FVlBfUEtFWV9HRVQxX0RTQQkJCQkgMTIwCiAjZGVmaW5lIEVWUF9GX0VWUF9QS0VZX0dFVDFfRUNEU0EJCQkgMTMwCiAjZGVmaW5lIEVWUF9GX0VWUF9QS0VZX0dFVDFfRUNfS0VZCQkJIDEzMQogI2RlZmluZSBFVlBfRl9FVlBfUEtFWV9HRVQxX1JTQQkJCQkgMTIxCisjZGVmaW5lIEVWUF9GX0VWUF9QS0VZX0tFWUdFTgkJCQkgMTQ2CisjZGVmaW5lIEVWUF9GX0VWUF9QS0VZX0tFWUdFTl9JTklUCQkJIDE0NwogI2RlZmluZSBFVlBfRl9FVlBfUEtFWV9ORVcJCQkJIDEwNgorI2RlZmluZSBFVlBfRl9FVlBfUEtFWV9QQVJBTUdFTgkJCQkgMTQ4CisjZGVmaW5lIEVWUF9GX0VWUF9QS0VZX1BBUkFNR0VOX0lOSVQJCQkgMTQ5CisjZGVmaW5lIEVWUF9GX0VWUF9QS0VZX1NJR04JCQkJIDE0MAorI2RlZmluZSBFVlBfRl9FVlBfUEtFWV9TSUdOX0lOSVQJCQkgMTQxCisjZGVmaW5lIEVWUF9GX0VWUF9QS0VZX1ZFUklGWQkJCQkgMTQyCisjZGVmaW5lIEVWUF9GX0VWUF9QS0VZX1ZFUklGWV9JTklUCQkJIDE0MworI2RlZmluZSBFVlBfRl9FVlBfUEtFWV9WRVJJRllfUkVDT1ZFUgkJCSAxNDQKKyNkZWZpbmUgRVZQX0ZfRVZQX1BLRVlfVkVSSUZZX1JFQ09WRVJfSU5JVAkJIDE0NQogI2RlZmluZSBFVlBfRl9FVlBfUklKTkRBRUwJCQkJIDEyNgogI2RlZmluZSBFVlBfRl9FVlBfU0lHTkZJTkFMCQkJCSAxMDcKICNkZWZpbmUgRVZQX0ZfRVZQX1ZFUklGWUZJTkFMCQkJCSAxMDgKKyNkZWZpbmUgRVZQX0ZfSU5UX0NUWF9ORVcJCQkJIDE1NwogI2RlZmluZSBFVlBfRl9QS0NTNV9QQkVfS0VZSVZHRU4JCQkgMTE3CiAjZGVmaW5lIEVWUF9GX1BLQ1M1X1YyX1BCRV9LRVlJVkdFTgkJCSAxMTgKICNkZWZpbmUgRVZQX0ZfUEtDUzhfU0VUX0JST0tFTgkJCQkgMTEyCisjZGVmaW5lIEVWUF9GX1BLRVlfU0VUX1RZUEUJCQkJIDE1OAogI2RlZmluZSBFVlBfRl9SQzJfTUFHSUNfVE9fTUVUSAkJCQkgMTA5CiAjZGVmaW5lIEVWUF9GX1JDNV9DVFJMCQkJCQkgMTI1CiAKQEAgLTEwMDcsNDEgKzEyNjIsNTIgQEAKICNkZWZpbmUgRVZQX1JfQkFEX0tFWV9MRU5HVEgJCQkJIDEzNwogI2RlZmluZSBFVlBfUl9CTl9ERUNPREVfRVJST1IJCQkJIDExMgogI2RlZmluZSBFVlBfUl9CTl9QVUJLRVlfRVJST1IJCQkJIDExMworI2RlZmluZSBFVlBfUl9CVUZGRVJfVE9PX1NNQUxMCQkJCSAxNTUKICNkZWZpbmUgRVZQX1JfQ0FNRUxMSUFfS0VZX1NFVFVQX0ZBSUxFRAkJCSAxNTcKICNkZWZpbmUgRVZQX1JfQ0lQSEVSX1BBUkFNRVRFUl9FUlJPUgkJCSAxMjIKKyNkZWZpbmUgRVZQX1JfQ09NTUFORF9OT1RfU1VQUE9SVEVECQkJIDE0NwogI2RlZmluZSBFVlBfUl9DVFJMX05PVF9JTVBMRU1FTlRFRAkJCSAxMzIKICNkZWZpbmUgRVZQX1JfQ1RSTF9PUEVSQVRJT05fTk9UX0lNUExFTUVOVEVECQkgMTMzCiAjZGVmaW5lIEVWUF9SX0RBVEFfTk9UX01VTFRJUExFX09GX0JMT0NLX0xFTkdUSAkJIDEzOAogI2RlZmluZSBFVlBfUl9ERUNPREVfRVJST1IJCQkJIDExNAogI2RlZmluZSBFVlBfUl9ESUZGRVJFTlRfS0VZX1RZUEVTCQkJIDEwMQotI2RlZmluZSBFVlBfUl9ESVNBQkxFRF9GT1JfRklQUwkJCQkgMTQ0CisjZGVmaW5lIEVWUF9SX0RJRkZFUkVOVF9QQVJBTUVURVJTCQkJIDE1MwogI2RlZmluZSBFVlBfUl9FTkNPREVfRVJST1IJCQkJIDExNQotI2RlZmluZSBFVlBfUl9FUlJPUl9MT0FESU5HX1NFQ1RJT04JCQkgMTQ1Ci0jZGVmaW5lIEVWUF9SX0VSUk9SX1NFVFRJTkdfRklQU19NT0RFCQkJIDE0NgogI2RlZmluZSBFVlBfUl9FVlBfUEJFX0NJUEhFUklOSVRfRVJST1IJCQkgMTE5CiAjZGVmaW5lIEVWUF9SX0VYUEVDVElOR19BTl9SU0FfS0VZCQkJIDEyNwogI2RlZmluZSBFVlBfUl9FWFBFQ1RJTkdfQV9ESF9LRVkJCQkgMTI4CiAjZGVmaW5lIEVWUF9SX0VYUEVDVElOR19BX0RTQV9LRVkJCQkgMTI5CiAjZGVmaW5lIEVWUF9SX0VYUEVDVElOR19BX0VDRFNBX0tFWQkJCSAxNDEKICNkZWZpbmUgRVZQX1JfRVhQRUNUSU5HX0FfRUNfS0VZCQkJIDE0MgotI2RlZmluZSBFVlBfUl9GSVBTX01PREVfTk9UX1NVUFBPUlRFRAkJCSAxNDcKICNkZWZpbmUgRVZQX1JfSU5JVElBTElaQVRJT05fRVJST1IJCQkgMTM0CiAjZGVmaW5lIEVWUF9SX0lOUFVUX05PVF9JTklUSUFMSVpFRAkJCSAxMTEKLSNkZWZpbmUgRVZQX1JfSU5WQUxJRF9GSVBTX01PREUJCQkJIDE0OAorI2RlZmluZSBFVlBfUl9JTlZBTElEX0RJR0VTVAkJCQkgMTUyCiAjZGVmaW5lIEVWUF9SX0lOVkFMSURfS0VZX0xFTkdUSAkJCSAxMzAKKyNkZWZpbmUgRVZQX1JfSU5WQUxJRF9PUEVSQVRJT04JCQkJIDE0OAogI2RlZmluZSBFVlBfUl9JVl9UT09fTEFSR0UJCQkJIDEwMgogI2RlZmluZSBFVlBfUl9LRVlHRU5fRkFJTFVSRQkJCQkgMTIwCisjZGVmaW5lIEVWUF9SX01FU1NBR0VfRElHRVNUX0lTX05VTEwJCQkgMTU5CisjZGVmaW5lIEVWUF9SX01FVEhPRF9OT1RfU1VQUE9SVEVECQkJIDE0NAogI2RlZmluZSBFVlBfUl9NSVNTSU5HX1BBUkFNRVRFUlMJCQkgMTAzCiAjZGVmaW5lIEVWUF9SX05PX0NJUEhFUl9TRVQJCQkJIDEzMQorI2RlZmluZSBFVlBfUl9OT19ERUZBVUxUX0RJR0VTVAkJCQkgMTU4CiAjZGVmaW5lIEVWUF9SX05PX0RJR0VTVF9TRVQJCQkJIDEzOQogI2RlZmluZSBFVlBfUl9OT19EU0FfUEFSQU1FVEVSUwkJCQkgMTE2CisjZGVmaW5lIEVWUF9SX05PX0tFWV9TRVQJCQkJIDE1NAorI2RlZmluZSBFVlBfUl9OT19PUEVSQVRJT05fU0VUCQkJCSAxNDkKICNkZWZpbmUgRVZQX1JfTk9fU0lHTl9GVU5DVElPTl9DT05GSUdVUkVECQkgMTA0CiAjZGVmaW5lIEVWUF9SX05PX1ZFUklGWV9GVU5DVElPTl9DT05GSUdVUkVECQkgMTA1CisjZGVmaW5lIEVWUF9SX09QRVJBVElPTl9OT1RfU1VQUE9SVEVEX0ZPUl9USElTX0tFWVRZUEUJIDE1MAorI2RlZmluZSBFVlBfUl9PUEVSQVRPTl9OT1RfSU5JVElBTElaRUQJCQkgMTUxCiAjZGVmaW5lIEVWUF9SX1BLQ1M4X1VOS05PV05fQlJPS0VOX1RZUEUJCQkgMTE3CisjZGVmaW5lIEVWUF9SX1BSSVZBVEVfS0VZX0RFQ09ERV9FUlJPUgkJCSAxNDUKKyNkZWZpbmUgRVZQX1JfUFJJVkFURV9LRVlfRU5DT0RFX0VSUk9SCQkJIDE0NgogI2RlZmluZSBFVlBfUl9QVUJMSUNfS0VZX05PVF9SU0EJCQkgMTA2Ci0jZGVmaW5lIEVWUF9SX1VOS05PV05fT1BUSU9OCQkJCSAxNDkKKyNkZWZpbmUgRVZQX1JfVU5LTk9XTl9DSVBIRVIJCQkJIDE2MAorI2RlZmluZSBFVlBfUl9VTktOT1dOX0RJR0VTVAkJCQkgMTYxCiAjZGVmaW5lIEVWUF9SX1VOS05PV05fUEJFX0FMR09SSVRITQkJCSAxMjEKICNkZWZpbmUgRVZQX1JfVU5TVVBPUlRFRF9OVU1CRVJfT0ZfUk9VTkRTCQkgMTM1CisjZGVmaW5lIEVWUF9SX1VOU1VQUE9SVEVEX0FMR09SSVRITQkJCSAxNTYKICNkZWZpbmUgRVZQX1JfVU5TVVBQT1JURURfQ0lQSEVSCQkJIDEwNwogI2RlZmluZSBFVlBfUl9VTlNVUFBPUlRFRF9LRVlMRU5HVEgJCQkgMTIzCiAjZGVmaW5lIEVWUF9SX1VOU1VQUE9SVEVEX0tFWV9ERVJJVkFUSU9OX0ZVTkNUSU9OCSAxMjQKQEAgLTEwNTEsNyArMTMxNyw2IEBACiAjZGVmaW5lIEVWUF9SX1VOU1VQUE9SVEVEX1NBTFRfVFlQRQkJCSAxMjYKICNkZWZpbmUgRVZQX1JfV1JPTkdfRklOQUxfQkxPQ0tfTEVOR1RICQkJIDEwOQogI2RlZmluZSBFVlBfUl9XUk9OR19QVUJMSUNfS0VZX1RZUEUJCQkgMTEwCi0jZGVmaW5lIEVWUF9SX1NFRURfS0VZX1NFVFVQX0ZBSUxFRAkJCSAxNjIKIAogI2lmZGVmICBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2V2cC9ldnBfY25mLmMgYi9jcnlwdG8vZXZwL2V2cF9jbmYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmU0ZGIzMC4uMDAwMDAwMAotLS0gYS9jcnlwdG8vZXZwL2V2cF9jbmYuYworKysgL2Rldi9udWxsCkBAIC0xLDEyNSArMCwwIEBACi0vKiBldnBfY25mLmMgKi8KLS8qIFdyaXR0ZW4gYnkgU3RlcGhlbiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKLSAqIHByb2plY3QgMjAwNy4KLSAqLwotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoYykgMjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0gKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSAqCi0gKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0gKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0gKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCi0gKgotICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0gKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0gKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0gKgotICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotICogICAgYWNrbm93bGVkZ21lbnQ6Ci0gKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0gKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqCi0gKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKLSAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KLSAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgotICoKLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0jaW5jbHVkZSAiY3J5cHRsaWIuaCIKLSNpbmNsdWRlIDxvcGVuc3NsL2NvbmYuaD4KLSNpbmNsdWRlIDxvcGVuc3NsL2Rzby5oPgotI2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgotI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+Ci0jaWZkZWYgT1BFTlNTTF9GSVBTCi0jaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0jZW5kaWYKLQotCi0vKiBBbGdvcml0aG0gY29uZmlndXJhdGlvbiBtb2R1bGUuICovCi0KLXN0YXRpYyBpbnQgYWxnX21vZHVsZV9pbml0KENPTkZfSU1PRFVMRSAqbWQsIGNvbnN0IENPTkYgKmNuZikKLQl7Ci0JaW50IGk7Ci0JY29uc3QgY2hhciAqb2lkX3NlY3Rpb247Ci0JU1RBQ0tfT0YoQ09ORl9WQUxVRSkgKnNrdG1wOwotCUNPTkZfVkFMVUUgKm92YWw7Ci0Jb2lkX3NlY3Rpb24gPSBDT05GX2ltb2R1bGVfZ2V0X3ZhbHVlKG1kKTsKLQlpZighKHNrdG1wID0gTkNPTkZfZ2V0X3NlY3Rpb24oY25mLCBvaWRfc2VjdGlvbikpKQotCQl7Ci0JCUVWUGVycihFVlBfRl9BTEdfTU9EVUxFX0lOSVQsIEVWUF9SX0VSUk9SX0xPQURJTkdfU0VDVElPTik7Ci0JCXJldHVybiAwOwotCQl9Ci0JZm9yKGkgPSAwOyBpIDwgc2tfQ09ORl9WQUxVRV9udW0oc2t0bXApOyBpKyspCi0JCXsKLQkJb3ZhbCA9IHNrX0NPTkZfVkFMVUVfdmFsdWUoc2t0bXAsIGkpOwotCQlpZiAoIXN0cmNtcChvdmFsLT5uYW1lLCAiZmlwc19tb2RlIikpCi0JCQl7Ci0JCQlpbnQgbTsKLQkJCWlmICghWDUwOVYzX2dldF92YWx1ZV9ib29sKG92YWwsICZtKSkKLQkJCQl7Ci0JCQkJRVZQZXJyKEVWUF9GX0FMR19NT0RVTEVfSU5JVCwgRVZQX1JfSU5WQUxJRF9GSVBTX01PREUpOwotCQkJCXJldHVybiAwOwotCQkJCX0KLQkJCWlmIChtID4gMCkKLQkJCQl7Ci0jaWZkZWYgT1BFTlNTTF9GSVBTCi0JCQkJaWYgKCFGSVBTX21vZGUoKSAmJiAhRklQU19tb2RlX3NldCgxKSkKLQkJCQkJewotCQkJCQlFVlBlcnIoRVZQX0ZfQUxHX01PRFVMRV9JTklULCBFVlBfUl9FUlJPUl9TRVRUSU5HX0ZJUFNfTU9ERSk7Ci0JCQkJCXJldHVybiAwOwotCQkJCQl9Ci0jZWxzZQotCQkJCUVWUGVycihFVlBfRl9BTEdfTU9EVUxFX0lOSVQsIEVWUF9SX0ZJUFNfTU9ERV9OT1RfU1VQUE9SVEVEKTsKLQkJCQlyZXR1cm4gMDsKLSNlbmRpZgotCQkJCX0KLQkJCX0KLQkJZWxzZQotCQkJewotCQkJRVZQZXJyKEVWUF9GX0FMR19NT0RVTEVfSU5JVCwgRVZQX1JfVU5LTk9XTl9PUFRJT04pOwotCQkJRVJSX2FkZF9lcnJvcl9kYXRhKDQsICJuYW1lPSIsIG92YWwtPm5hbWUsCi0JCQkJCQkiLCB2YWx1ZT0iLCBvdmFsLT52YWx1ZSk7Ci0JCQl9Ci0JCQkJCi0JCX0KLQlyZXR1cm4gMTsKLQl9Ci0KLXZvaWQgRVZQX2FkZF9hbGdfbW9kdWxlKHZvaWQpCi0JewotCUNPTkZfbW9kdWxlX2FkZCgiYWxnX3NlY3Rpb24iLCBhbGdfbW9kdWxlX2luaXQsIDApOwotCX0KZGlmZiAtLWdpdCBhL2NyeXB0by9ldnAvZXZwX2VuYy5jIGIvY3J5cHRvL2V2cC9ldnBfZW5jLmMKaW5kZXggMzBlMGNhNC4uYmVhZDZhMiAxMDA2NDQKLS0tIGEvY3J5cHRvL2V2cC9ldnBfZW5jLmMKKysrIGIvY3J5cHRvL2V2cC9ldnBfZW5jLmMKQEAgLTY2LDE2ICs2NiwxNCBAQAogI2VuZGlmCiAjaW5jbHVkZSAiZXZwX2xvY2wuaCIKIAotI2lmZGVmIE9QRU5TU0xfRklQUwotCSNkZWZpbmUgTV9kb19jaXBoZXIoY3R4LCBvdXQsIGluLCBpbmwpIFwKLQkJRVZQX0NpcGhlcihjdHgsb3V0LGluLGlubCkKLSNlbHNlCi0JI2RlZmluZSBNX2RvX2NpcGhlcihjdHgsIG91dCwgaW4sIGlubCkgXAotCQljdHgtPmNpcGhlci0+ZG9fY2lwaGVyKGN0eCxvdXQsaW4saW5sKQotI2VuZGlmCi0KIGNvbnN0IGNoYXIgRVZQX3ZlcnNpb25bXT0iRVZQIiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7CiAKK3ZvaWQgRVZQX0NJUEhFUl9DVFhfaW5pdChFVlBfQ0lQSEVSX0NUWCAqY3R4KQorCXsKKwltZW1zZXQoY3R4LDAsc2l6ZW9mKEVWUF9DSVBIRVJfQ1RYKSk7CisJLyogY3R4LT5jaXBoZXI9TlVMTDsgKi8KKwl9CisKIEVWUF9DSVBIRVJfQ1RYICpFVlBfQ0lQSEVSX0NUWF9uZXcodm9pZCkKIAl7CiAJRVZQX0NJUEhFUl9DVFggKmN0eD1PUEVOU1NMX21hbGxvYyhzaXplb2YgKmN0eCk7CkBAIC05Miw2ICs5MCwxNDQgQEAKIAlyZXR1cm4gRVZQX0NpcGhlckluaXRfZXgoY3R4LGNpcGhlcixOVUxMLGtleSxpdixlbmMpOwogCX0KIAoraW50IEVWUF9DaXBoZXJJbml0X2V4KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciwgRU5HSU5FICppbXBsLAorCSAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBjb25zdCB1bnNpZ25lZCBjaGFyICppdiwgaW50IGVuYykKKwl7CisJaWYgKGVuYyA9PSAtMSkKKwkJZW5jID0gY3R4LT5lbmNyeXB0OworCWVsc2UKKwkJeworCQlpZiAoZW5jKQorCQkJZW5jID0gMTsKKwkJY3R4LT5lbmNyeXB0ID0gZW5jOworCQl9CisjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCisJLyogV2hldGhlciBpdCdzIG5pY2Ugb3Igbm90LCAiSW5pdHMiIGNhbiBiZSB1c2VkIG9uICJGaW5hbCInZCBjb250ZXh0cworCSAqIHNvIHRoaXMgY29udGV4dCBtYXkgYWxyZWFkeSBoYXZlIGFuIEVOR0lORSEgVHJ5IHRvIGF2b2lkIHJlbGVhc2luZworCSAqIHRoZSBwcmV2aW91cyBoYW5kbGUsIHJlLXF1ZXJ5aW5nIGZvciBhbiBFTkdJTkUsIGFuZCBoYXZpbmcgYQorCSAqIHJlaW5pdGlhbGlzYXRpb24sIHdoZW4gaXQgbWF5IGFsbCBiZSB1bmVjZXNzYXJ5LiAqLworCWlmIChjdHgtPmVuZ2luZSAmJiBjdHgtPmNpcGhlciAmJiAoIWNpcGhlciB8fAorCQkJKGNpcGhlciAmJiAoY2lwaGVyLT5uaWQgPT0gY3R4LT5jaXBoZXItPm5pZCkpKSkKKwkJZ290byBza2lwX3RvX2luaXQ7CisjZW5kaWYKKwlpZiAoY2lwaGVyKQorCQl7CisJCS8qIEVuc3VyZSBhIGNvbnRleHQgbGVmdCBseWluZyBhcm91bmQgZnJvbSBsYXN0IHRpbWUgaXMgY2xlYXJlZAorCQkgKiAodGhlIHByZXZpb3VzIGNoZWNrIGF0dGVtcHRlZCB0byBhdm9pZCB0aGlzIGlmIHRoZSBzYW1lCisJCSAqIEVOR0lORSBhbmQgRVZQX0NJUEhFUiBjb3VsZCBiZSB1c2VkKS4gKi8KKwkJRVZQX0NJUEhFUl9DVFhfY2xlYW51cChjdHgpOworCisJCS8qIFJlc3RvcmUgZW5jcnlwdCBmaWVsZDogaXQgaXMgemVyb2VkIGJ5IGNsZWFudXAgKi8KKwkJY3R4LT5lbmNyeXB0ID0gZW5jOworI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQorCQlpZihpbXBsKQorCQkJeworCQkJaWYgKCFFTkdJTkVfaW5pdChpbXBsKSkKKwkJCQl7CisJCQkJRVZQZXJyKEVWUF9GX0VWUF9DSVBIRVJJTklUX0VYLCBFVlBfUl9JTklUSUFMSVpBVElPTl9FUlJPUik7CisJCQkJcmV0dXJuIDA7CisJCQkJfQorCQkJfQorCQllbHNlCisJCQkvKiBBc2sgaWYgYW4gRU5HSU5FIGlzIHJlc2VydmVkIGZvciB0aGlzIGpvYiAqLworCQkJaW1wbCA9IEVOR0lORV9nZXRfY2lwaGVyX2VuZ2luZShjaXBoZXItPm5pZCk7CisJCWlmKGltcGwpCisJCQl7CisJCQkvKiBUaGVyZSdzIGFuIEVOR0lORSBmb3IgdGhpcyBqb2IgLi4uIChhcHBhcmVudGx5KSAqLworCQkJY29uc3QgRVZQX0NJUEhFUiAqYyA9IEVOR0lORV9nZXRfY2lwaGVyKGltcGwsIGNpcGhlci0+bmlkKTsKKwkJCWlmKCFjKQorCQkJCXsKKwkJCQkvKiBPbmUgcG9zaXRpdmUgc2lkZS1lZmZlY3Qgb2YgVVMncyBleHBvcnQKKwkJCQkgKiBjb250cm9sIGhpc3RvcnksIGlzIHRoYXQgd2Ugc2hvdWxkIGF0IGxlYXN0CisJCQkJICogYmUgYWJsZSB0byBhdm9pZCB1c2luZyBVUyBtaXNwZWxsaW5ncyBvZgorCQkJCSAqICJpbml0aWFsaXNhdGlvbiI/ICovCisJCQkJRVZQZXJyKEVWUF9GX0VWUF9DSVBIRVJJTklUX0VYLCBFVlBfUl9JTklUSUFMSVpBVElPTl9FUlJPUik7CisJCQkJcmV0dXJuIDA7CisJCQkJfQorCQkJLyogV2UnbGwgdXNlIHRoZSBFTkdJTkUncyBwcml2YXRlIGNpcGhlciBkZWZpbml0aW9uICovCisJCQljaXBoZXIgPSBjOworCQkJLyogU3RvcmUgdGhlIEVOR0lORSBmdW5jdGlvbmFsIHJlZmVyZW5jZSBzbyB3ZSBrbm93CisJCQkgKiAnY2lwaGVyJyBjYW1lIGZyb20gYW4gRU5HSU5FIGFuZCB3ZSBuZWVkIHRvIHJlbGVhc2UKKwkJCSAqIGl0IHdoZW4gZG9uZS4gKi8KKwkJCWN0eC0+ZW5naW5lID0gaW1wbDsKKwkJCX0KKwkJZWxzZQorCQkJY3R4LT5lbmdpbmUgPSBOVUxMOworI2VuZGlmCisKKwkJY3R4LT5jaXBoZXI9Y2lwaGVyOworCQlpZiAoY3R4LT5jaXBoZXItPmN0eF9zaXplKQorCQkJeworCQkJY3R4LT5jaXBoZXJfZGF0YT1PUEVOU1NMX21hbGxvYyhjdHgtPmNpcGhlci0+Y3R4X3NpemUpOworCQkJaWYgKCFjdHgtPmNpcGhlcl9kYXRhKQorCQkJCXsKKwkJCQlFVlBlcnIoRVZQX0ZfRVZQX0NJUEhFUklOSVRfRVgsIEVSUl9SX01BTExPQ19GQUlMVVJFKTsKKwkJCQlyZXR1cm4gMDsKKwkJCQl9CisJCQl9CisJCWVsc2UKKwkJCXsKKwkJCWN0eC0+Y2lwaGVyX2RhdGEgPSBOVUxMOworCQkJfQorCQljdHgtPmtleV9sZW4gPSBjaXBoZXItPmtleV9sZW47CisJCWN0eC0+ZmxhZ3MgPSAwOworCQlpZihjdHgtPmNpcGhlci0+ZmxhZ3MgJiBFVlBfQ0lQSF9DVFJMX0lOSVQpCisJCQl7CisJCQlpZighRVZQX0NJUEhFUl9DVFhfY3RybChjdHgsIEVWUF9DVFJMX0lOSVQsIDAsIE5VTEwpKQorCQkJCXsKKwkJCQlFVlBlcnIoRVZQX0ZfRVZQX0NJUEhFUklOSVRfRVgsIEVWUF9SX0lOSVRJQUxJWkFUSU9OX0VSUk9SKTsKKwkJCQlyZXR1cm4gMDsKKwkJCQl9CisJCQl9CisJCX0KKwllbHNlIGlmKCFjdHgtPmNpcGhlcikKKwkJeworCQlFVlBlcnIoRVZQX0ZfRVZQX0NJUEhFUklOSVRfRVgsIEVWUF9SX05PX0NJUEhFUl9TRVQpOworCQlyZXR1cm4gMDsKKwkJfQorI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQorc2tpcF90b19pbml0OgorI2VuZGlmCisJLyogd2UgYXNzdW1lIGJsb2NrIHNpemUgaXMgYSBwb3dlciBvZiAyIGluICpjcnlwdFVwZGF0ZSAqLworCU9QRU5TU0xfYXNzZXJ0KGN0eC0+Y2lwaGVyLT5ibG9ja19zaXplID09IDEKKwkgICAgfHwgY3R4LT5jaXBoZXItPmJsb2NrX3NpemUgPT0gOAorCSAgICB8fCBjdHgtPmNpcGhlci0+YmxvY2tfc2l6ZSA9PSAxNik7CisKKwlpZighKEVWUF9DSVBIRVJfQ1RYX2ZsYWdzKGN0eCkgJiBFVlBfQ0lQSF9DVVNUT01fSVYpKSB7CisJCXN3aXRjaChFVlBfQ0lQSEVSX0NUWF9tb2RlKGN0eCkpIHsKKworCQkJY2FzZSBFVlBfQ0lQSF9TVFJFQU1fQ0lQSEVSOgorCQkJY2FzZSBFVlBfQ0lQSF9FQ0JfTU9ERToKKwkJCWJyZWFrOworCisJCQljYXNlIEVWUF9DSVBIX0NGQl9NT0RFOgorCQkJY2FzZSBFVlBfQ0lQSF9PRkJfTU9ERToKKworCQkJY3R4LT5udW0gPSAwOworCisJCQljYXNlIEVWUF9DSVBIX0NCQ19NT0RFOgorCisJCQlPUEVOU1NMX2Fzc2VydChFVlBfQ0lQSEVSX0NUWF9pdl9sZW5ndGgoY3R4KSA8PQorCQkJCQkoaW50KXNpemVvZihjdHgtPml2KSk7CisJCQlpZihpdikgbWVtY3B5KGN0eC0+b2l2LCBpdiwgRVZQX0NJUEhFUl9DVFhfaXZfbGVuZ3RoKGN0eCkpOworCQkJbWVtY3B5KGN0eC0+aXYsIGN0eC0+b2l2LCBFVlBfQ0lQSEVSX0NUWF9pdl9sZW5ndGgoY3R4KSk7CisJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCXJldHVybiAwOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZihrZXkgfHwgKGN0eC0+Y2lwaGVyLT5mbGFncyAmIEVWUF9DSVBIX0FMV0FZU19DQUxMX0lOSVQpKSB7CisJCWlmKCFjdHgtPmNpcGhlci0+aW5pdChjdHgsa2V5LGl2LGVuYykpIHJldHVybiAwOworCX0KKwljdHgtPmJ1Zl9sZW49MDsKKwljdHgtPmZpbmFsX3VzZWQ9MDsKKwljdHgtPmJsb2NrX21hc2s9Y3R4LT5jaXBoZXItPmJsb2NrX3NpemUtMTsKKwlyZXR1cm4gMTsKKwl9CisKIGludCBFVlBfQ2lwaGVyVXBkYXRlKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgaW50ICpvdXRsLAogCSAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIGludCBpbmwpCiAJewpAQCAtMTUxLDcgKzI4Nyw3IEBACiAKIAlpZihjdHgtPmJ1Zl9sZW4gPT0gMCAmJiAoaW5sJihjdHgtPmJsb2NrX21hc2spKSA9PSAwKQogCQl7Ci0JCWlmKE1fZG9fY2lwaGVyKGN0eCxvdXQsaW4saW5sKSkKKwkJaWYoY3R4LT5jaXBoZXItPmRvX2NpcGhlcihjdHgsb3V0LGluLGlubCkpCiAJCQl7CiAJCQkqb3V0bD1pbmw7CiAJCQlyZXR1cm4gMTsKQEAgLTE3OCw3ICszMTQsNyBAQAogCQkJewogCQkJaj1ibC1pOwogCQkJbWVtY3B5KCYoY3R4LT5idWZbaV0pLGluLGopOwotCQkJaWYoIU1fZG9fY2lwaGVyKGN0eCxvdXQsY3R4LT5idWYsYmwpKSByZXR1cm4gMDsKKwkJCWlmKCFjdHgtPmNpcGhlci0+ZG9fY2lwaGVyKGN0eCxvdXQsY3R4LT5idWYsYmwpKSByZXR1cm4gMDsKIAkJCWlubC09ajsKIAkJCWluKz1qOwogCQkJb3V0Kz1ibDsKQEAgLTE5MSw3ICszMjcsNyBAQAogCWlubC09aTsKIAlpZiAoaW5sID4gMCkKIAkJewotCQlpZighTV9kb19jaXBoZXIoY3R4LG91dCxpbixpbmwpKSByZXR1cm4gMDsKKwkJaWYoIWN0eC0+Y2lwaGVyLT5kb19jaXBoZXIoY3R4LG91dCxpbixpbmwpKSByZXR1cm4gMDsKIAkJKm91dGwrPWlubDsKIAkJfQogCkBAIC0yMzUsNyArMzcxLDcgQEAKIAluPWItYmw7CiAJZm9yIChpPWJsOyBpPGI7IGkrKykKIAkJY3R4LT5idWZbaV09bjsKLQlyZXQ9TV9kb19jaXBoZXIoY3R4LG91dCxjdHgtPmJ1ZixiKTsKKwlyZXQ9Y3R4LT5jaXBoZXItPmRvX2NpcGhlcihjdHgsb3V0LGN0eC0+YnVmLGIpOwogCiAKIAlpZihyZXQpCkBAIC0zNTcsNiArNDkzLDI4IEBACiAJCX0KIAl9CiAKK2ludCBFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKEVWUF9DSVBIRVJfQ1RYICpjKQorCXsKKwlpZiAoYy0+Y2lwaGVyICE9IE5VTEwpCisJCXsKKwkJaWYoYy0+Y2lwaGVyLT5jbGVhbnVwICYmICFjLT5jaXBoZXItPmNsZWFudXAoYykpCisJCQlyZXR1cm4gMDsKKwkJLyogQ2xlYW5zZSBjaXBoZXIgY29udGV4dCBkYXRhICovCisJCWlmIChjLT5jaXBoZXJfZGF0YSkKKwkJCU9QRU5TU0xfY2xlYW5zZShjLT5jaXBoZXJfZGF0YSwgYy0+Y2lwaGVyLT5jdHhfc2l6ZSk7CisJCX0KKwlpZiAoYy0+Y2lwaGVyX2RhdGEpCisJCU9QRU5TU0xfZnJlZShjLT5jaXBoZXJfZGF0YSk7CisjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCisJaWYgKGMtPmVuZ2luZSkKKwkJLyogVGhlIEVWUF9DSVBIRVIgd2UgdXNlZCBiZWxvbmdzIHRvIGFuIEVOR0lORSwgcmVsZWFzZSB0aGUKKwkJICogZnVuY3Rpb25hbCByZWZlcmVuY2Ugd2UgaGVsZCBmb3IgdGhpcyByZWFzb24uICovCisJCUVOR0lORV9maW5pc2goYy0+ZW5naW5lKTsKKyNlbmRpZgorCW1lbXNldChjLDAsc2l6ZW9mKEVWUF9DSVBIRVJfQ1RYKSk7CisJcmV0dXJuIDE7CisJfQorCiBpbnQgRVZQX0NJUEhFUl9DVFhfc2V0X2tleV9sZW5ndGgoRVZQX0NJUEhFUl9DVFggKmMsIGludCBrZXlsZW4pCiAJewogCWlmKGMtPmNpcGhlci0+ZmxhZ3MgJiBFVlBfQ0lQSF9DVVNUT01fS0VZX0xFTkdUSCkgCkBAIC0zNzgsNiArNTM2LDI3IEBACiAJcmV0dXJuIDE7CiAJfQogCitpbnQgRVZQX0NJUEhFUl9DVFhfY3RybChFVlBfQ0lQSEVSX0NUWCAqY3R4LCBpbnQgdHlwZSwgaW50IGFyZywgdm9pZCAqcHRyKQoreworCWludCByZXQ7CisJaWYoIWN0eC0+Y2lwaGVyKSB7CisJCUVWUGVycihFVlBfRl9FVlBfQ0lQSEVSX0NUWF9DVFJMLCBFVlBfUl9OT19DSVBIRVJfU0VUKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYoIWN0eC0+Y2lwaGVyLT5jdHJsKSB7CisJCUVWUGVycihFVlBfRl9FVlBfQ0lQSEVSX0NUWF9DVFJMLCBFVlBfUl9DVFJMX05PVF9JTVBMRU1FTlRFRCk7CisJCXJldHVybiAwOworCX0KKworCXJldCA9IGN0eC0+Y2lwaGVyLT5jdHJsKGN0eCwgdHlwZSwgYXJnLCBwdHIpOworCWlmKHJldCA9PSAtMSkgeworCQlFVlBlcnIoRVZQX0ZfRVZQX0NJUEhFUl9DVFhfQ1RSTCwgRVZQX1JfQ1RSTF9PUEVSQVRJT05fTk9UX0lNUExFTUVOVEVEKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiByZXQ7Cit9CisKIGludCBFVlBfQ0lQSEVSX0NUWF9yYW5kX2tleShFVlBfQ0lQSEVSX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICprZXkpCiAJewogCWlmIChjdHgtPmNpcGhlci0+ZmxhZ3MgJiBFVlBfQ0lQSF9SQU5EX0tFWSkKQEAgLTM4Nyw1NCArNTY2LDM4IEBACiAJcmV0dXJuIDE7CiAJfQogCi0jaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCi0KLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLQotc3RhdGljIGludCBkb19ldnBfZW5jX2VuZ2luZV9mdWxsKEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IEVWUF9DSVBIRVIgKipwY2lwaGVyLCBFTkdJTkUgKmltcGwpCitpbnQgRVZQX0NJUEhFUl9DVFhfY29weShFVlBfQ0lQSEVSX0NUWCAqb3V0LCBjb25zdCBFVlBfQ0lQSEVSX0NUWCAqaW4pCiAJewotCWlmKGltcGwpCisJaWYgKChpbiA9PSBOVUxMKSB8fCAoaW4tPmNpcGhlciA9PSBOVUxMKSkKIAkJewotCQlpZiAoIUVOR0lORV9pbml0KGltcGwpKQorCQlFVlBlcnIoRVZQX0ZfRVZQX0NJUEhFUl9DVFhfQ09QWSxFVlBfUl9JTlBVVF9OT1RfSU5JVElBTElaRUQpOworCQlyZXR1cm4gMDsKKwkJfQorI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQorCS8qIE1ha2Ugc3VyZSBpdCdzIHNhZmUgdG8gY29weSBhIGNpcGhlciBjb250ZXh0IHVzaW5nIGFuIEVOR0lORSAqLworCWlmIChpbi0+ZW5naW5lICYmICFFTkdJTkVfaW5pdChpbi0+ZW5naW5lKSkKKwkJeworCQlFVlBlcnIoRVZQX0ZfRVZQX0NJUEhFUl9DVFhfQ09QWSxFUlJfUl9FTkdJTkVfTElCKTsKKwkJcmV0dXJuIDA7CisJCX0KKyNlbmRpZgorCisJRVZQX0NJUEhFUl9DVFhfY2xlYW51cChvdXQpOworCW1lbWNweShvdXQsaW4sc2l6ZW9mICpvdXQpOworCisJaWYgKGluLT5jaXBoZXJfZGF0YSAmJiBpbi0+Y2lwaGVyLT5jdHhfc2l6ZSkKKwkJeworCQlvdXQtPmNpcGhlcl9kYXRhPU9QRU5TU0xfbWFsbG9jKGluLT5jaXBoZXItPmN0eF9zaXplKTsKKwkJaWYgKCFvdXQtPmNpcGhlcl9kYXRhKQogCQkJewotCQkJRVZQZXJyKEVWUF9GX0RPX0VWUF9FTkNfRU5HSU5FX0ZVTEwsIEVWUF9SX0lOSVRJQUxJWkFUSU9OX0VSUk9SKTsKKwkJCUVWUGVycihFVlBfRl9FVlBfQ0lQSEVSX0NUWF9DT1BZLEVSUl9SX01BTExPQ19GQUlMVVJFKTsKIAkJCXJldHVybiAwOwogCQkJfQorCQltZW1jcHkob3V0LT5jaXBoZXJfZGF0YSxpbi0+Y2lwaGVyX2RhdGEsaW4tPmNpcGhlci0+Y3R4X3NpemUpOwogCQl9Ci0JZWxzZQotCQkvKiBBc2sgaWYgYW4gRU5HSU5FIGlzIHJlc2VydmVkIGZvciB0aGlzIGpvYiAqLwotCQlpbXBsID0gRU5HSU5FX2dldF9jaXBoZXJfZW5naW5lKCgqcGNpcGhlciktPm5pZCk7Ci0JaWYoaW1wbCkKLQkJewotCQkvKiBUaGVyZSdzIGFuIEVOR0lORSBmb3IgdGhpcyBqb2IgLi4uIChhcHBhcmVudGx5KSAqLwotCQljb25zdCBFVlBfQ0lQSEVSICpjID0gRU5HSU5FX2dldF9jaXBoZXIoaW1wbCwgKCpwY2lwaGVyKS0+bmlkKTsKLQkJaWYoIWMpCi0JCQl7Ci0JCQkvKiBPbmUgcG9zaXRpdmUgc2lkZS1lZmZlY3Qgb2YgVVMncyBleHBvcnQKLQkJCSAqIGNvbnRyb2wgaGlzdG9yeSwgaXMgdGhhdCB3ZSBzaG91bGQgYXQgbGVhc3QKLQkJCSAqIGJlIGFibGUgdG8gYXZvaWQgdXNpbmcgVVMgbWlzcGVsbGluZ3Mgb2YKLQkJCSAqICJpbml0aWFsaXNhdGlvbiI/ICovCi0JCQlFVlBlcnIoRVZQX0ZfRE9fRVZQX0VOQ19FTkdJTkVfRlVMTCwgRVZQX1JfSU5JVElBTElaQVRJT05fRVJST1IpOwotCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCS8qIFdlJ2xsIHVzZSB0aGUgRU5HSU5FJ3MgcHJpdmF0ZSBjaXBoZXIgZGVmaW5pdGlvbiAqLwotCQkqcGNpcGhlciA9IGM7Ci0JCS8qIFN0b3JlIHRoZSBFTkdJTkUgZnVuY3Rpb25hbCByZWZlcmVuY2Ugc28gd2Uga25vdwotCQkgKiAnY2lwaGVyJyBjYW1lIGZyb20gYW4gRU5HSU5FIGFuZCB3ZSBuZWVkIHRvIHJlbGVhc2UKLQkJICogaXQgd2hlbiBkb25lLiAqLwotCQljdHgtPmVuZ2luZSA9IGltcGw7Ci0JCX0KLQllbHNlCi0JCWN0eC0+ZW5naW5lID0gTlVMTDsKKworCWlmIChpbi0+Y2lwaGVyLT5mbGFncyAmIEVWUF9DSVBIX0NVU1RPTV9DT1BZKQorCQlyZXR1cm4gaW4tPmNpcGhlci0+Y3RybCgoRVZQX0NJUEhFUl9DVFggKilpbiwgRVZQX0NUUkxfQ09QWSwgMCwgb3V0KTsKIAlyZXR1cm4gMTsKIAl9CiAKLXZvaWQgaW50X0VWUF9DSVBIRVJfaW5pdF9lbmdpbmVfY2FsbGJhY2tzKHZvaWQpCi0JewotCWludF9FVlBfQ0lQSEVSX3NldF9lbmdpbmVfY2FsbGJhY2tzKAotCQlFTkdJTkVfZmluaXNoLCBkb19ldnBfZW5jX2VuZ2luZV9mdWxsKTsKLQl9Ci0KLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2NyeXB0by9ldnAvZXZwX2Vyci5jIGIvY3J5cHRvL2V2cC9ldnBfZXJyLmMKaW5kZXggYjViOTAwZC4uZDhiZmVjMCAxMDA2NDQKLS0tIGEvY3J5cHRvL2V2cC9ldnBfZXJyLmMKKysrIGIvY3J5cHRvL2V2cC9ldnBfZXJyLmMKQEAgLTEsNiArMSw2IEBACiAvKiBjcnlwdG8vZXZwL2V2cF9lcnIuYyAqLwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDggVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcxLDQ2ICs3MSw2NiBAQAogc3RhdGljIEVSUl9TVFJJTkdfREFUQSBFVlBfc3RyX2Z1bmN0c1tdPQogCXsKIHtFUlJfRlVOQyhFVlBfRl9BRVNfSU5JVF9LRVkpLAkiQUVTX0lOSVRfS0VZIn0sCi17RVJSX0ZVTkMoRVZQX0ZfQUxHX01PRFVMRV9JTklUKSwJIkFMR19NT0RVTEVfSU5JVCJ9LAoge0VSUl9GVU5DKEVWUF9GX0NBTUVMTElBX0lOSVRfS0VZKSwJIkNBTUVMTElBX0lOSVRfS0VZIn0sCiB7RVJSX0ZVTkMoRVZQX0ZfRDJJX1BLRVkpLAkiRDJJX1BLRVkifSwKLXtFUlJfRlVOQyhFVlBfRl9ET19FVlBfRU5DX0VOR0lORSksCSJET19FVlBfRU5DX0VOR0lORSJ9LAote0VSUl9GVU5DKEVWUF9GX0RPX0VWUF9FTkNfRU5HSU5FX0ZVTEwpLAkiRE9fRVZQX0VOQ19FTkdJTkVfRlVMTCJ9LAote0VSUl9GVU5DKEVWUF9GX0RPX0VWUF9NRF9FTkdJTkUpLAkiRE9fRVZQX01EX0VOR0lORSJ9LAote0VSUl9GVU5DKEVWUF9GX0RPX0VWUF9NRF9FTkdJTkVfRlVMTCksCSJET19FVlBfTURfRU5HSU5FX0ZVTEwifSwKK3tFUlJfRlVOQyhFVlBfRl9ET19TSUdWRVJfSU5JVCksCSJET19TSUdWRVJfSU5JVCJ9LAoge0VSUl9GVU5DKEVWUF9GX0RTQVBLRVkyUEtDUzgpLAkiRFNBUEtFWTJQS0NTOCJ9LAoge0VSUl9GVU5DKEVWUF9GX0RTQV9QS0VZMlBLQ1M4KSwJIkRTQV9QS0VZMlBLQ1M4In0sCiB7RVJSX0ZVTkMoRVZQX0ZfRUNEU0FfUEtFWTJQS0NTOCksCSJFQ0RTQV9QS0VZMlBLQ1M4In0sCiB7RVJSX0ZVTkMoRVZQX0ZfRUNLRVlfUEtFWTJQS0NTOCksCSJFQ0tFWV9QS0VZMlBLQ1M4In0sCi17RVJSX0ZVTkMoRVZQX0ZfRVZQX0NJUEhFUklOSVQpLAkiRVZQX0NpcGhlckluaXQifSwKIHtFUlJfRlVOQyhFVlBfRl9FVlBfQ0lQSEVSSU5JVF9FWCksCSJFVlBfQ2lwaGVySW5pdF9leCJ9LAore0VSUl9GVU5DKEVWUF9GX0VWUF9DSVBIRVJfQ1RYX0NPUFkpLAkiRVZQX0NJUEhFUl9DVFhfY29weSJ9LAoge0VSUl9GVU5DKEVWUF9GX0VWUF9DSVBIRVJfQ1RYX0NUUkwpLAkiRVZQX0NJUEhFUl9DVFhfY3RybCJ9LAoge0VSUl9GVU5DKEVWUF9GX0VWUF9DSVBIRVJfQ1RYX1NFVF9LRVlfTEVOR1RIKSwJIkVWUF9DSVBIRVJfQ1RYX3NldF9rZXlfbGVuZ3RoIn0sCiB7RVJSX0ZVTkMoRVZQX0ZfRVZQX0RFQ1JZUFRGSU5BTF9FWCksCSJFVlBfRGVjcnlwdEZpbmFsX2V4In0sCi17RVJSX0ZVTkMoRVZQX0ZfRVZQX0RJR0VTVElOSVQpLAkiRVZQX0RpZ2VzdEluaXQifSwKIHtFUlJfRlVOQyhFVlBfRl9FVlBfRElHRVNUSU5JVF9FWCksCSJFVlBfRGlnZXN0SW5pdF9leCJ9LAoge0VSUl9GVU5DKEVWUF9GX0VWUF9FTkNSWVBURklOQUxfRVgpLAkiRVZQX0VuY3J5cHRGaW5hbF9leCJ9LAoge0VSUl9GVU5DKEVWUF9GX0VWUF9NRF9DVFhfQ09QWV9FWCksCSJFVlBfTURfQ1RYX2NvcHlfZXgifSwKK3tFUlJfRlVOQyhFVlBfRl9FVlBfTURfU0laRSksCSJFVlBfTURfU0laRSJ9LAoge0VSUl9GVU5DKEVWUF9GX0VWUF9PUEVOSU5JVCksCSJFVlBfT3BlbkluaXQifSwKIHtFUlJfRlVOQyhFVlBfRl9FVlBfUEJFX0FMR19BREQpLAkiRVZQX1BCRV9hbGdfYWRkIn0sCit7RVJSX0ZVTkMoRVZQX0ZfRVZQX1BCRV9BTEdfQUREX1RZUEUpLAkiRVZQX1BCRV9hbGdfYWRkX3R5cGUifSwKIHtFUlJfRlVOQyhFVlBfRl9FVlBfUEJFX0NJUEhFUklOSVQpLAkiRVZQX1BCRV9DaXBoZXJJbml0In0sCiB7RVJSX0ZVTkMoRVZQX0ZfRVZQX1BLQ1M4MlBLRVkpLAkiRVZQX1BLQ1M4MlBLRVkifSwKK3tFUlJfRlVOQyhFVlBfRl9FVlBfUEtDUzgyUEtFWV9CUk9LRU4pLAkiRVZQX1BLQ1M4MlBLRVlfQlJPS0VOIn0sCiB7RVJSX0ZVTkMoRVZQX0ZfRVZQX1BLRVkyUEtDUzhfQlJPS0VOKSwJIkVWUF9QS0VZMlBLQ1M4X2Jyb2tlbiJ9LAoge0VSUl9GVU5DKEVWUF9GX0VWUF9QS0VZX0NPUFlfUEFSQU1FVEVSUyksCSJFVlBfUEtFWV9jb3B5X3BhcmFtZXRlcnMifSwKK3tFUlJfRlVOQyhFVlBfRl9FVlBfUEtFWV9DVFhfQ1RSTCksCSJFVlBfUEtFWV9DVFhfY3RybCJ9LAore0VSUl9GVU5DKEVWUF9GX0VWUF9QS0VZX0NUWF9DVFJMX1NUUiksCSJFVlBfUEtFWV9DVFhfY3RybF9zdHIifSwKK3tFUlJfRlVOQyhFVlBfRl9FVlBfUEtFWV9DVFhfRFVQKSwJIkVWUF9QS0VZX0NUWF9kdXAifSwKIHtFUlJfRlVOQyhFVlBfRl9FVlBfUEtFWV9ERUNSWVBUKSwJIkVWUF9QS0VZX2RlY3J5cHQifSwKK3tFUlJfRlVOQyhFVlBfRl9FVlBfUEtFWV9ERUNSWVBUX0lOSVQpLAkiRVZQX1BLRVlfZGVjcnlwdF9pbml0In0sCit7RVJSX0ZVTkMoRVZQX0ZfRVZQX1BLRVlfREVDUllQVF9PTEQpLAkiRVZQX1BLRVlfZGVjcnlwdF9vbGQifSwKK3tFUlJfRlVOQyhFVlBfRl9FVlBfUEtFWV9ERVJJVkUpLAkiRVZQX1BLRVlfZGVyaXZlIn0sCit7RVJSX0ZVTkMoRVZQX0ZfRVZQX1BLRVlfREVSSVZFX0lOSVQpLAkiRVZQX1BLRVlfZGVyaXZlX2luaXQifSwKK3tFUlJfRlVOQyhFVlBfRl9FVlBfUEtFWV9ERVJJVkVfU0VUX1BFRVIpLAkiRVZQX1BLRVlfZGVyaXZlX3NldF9wZWVyIn0sCiB7RVJSX0ZVTkMoRVZQX0ZfRVZQX1BLRVlfRU5DUllQVCksCSJFVlBfUEtFWV9lbmNyeXB0In0sCit7RVJSX0ZVTkMoRVZQX0ZfRVZQX1BLRVlfRU5DUllQVF9JTklUKSwJIkVWUF9QS0VZX2VuY3J5cHRfaW5pdCJ9LAore0VSUl9GVU5DKEVWUF9GX0VWUF9QS0VZX0VOQ1JZUFRfT0xEKSwJIkVWUF9QS0VZX2VuY3J5cHRfb2xkIn0sCiB7RVJSX0ZVTkMoRVZQX0ZfRVZQX1BLRVlfR0VUMV9ESCksCSJFVlBfUEtFWV9nZXQxX0RIIn0sCiB7RVJSX0ZVTkMoRVZQX0ZfRVZQX1BLRVlfR0VUMV9EU0EpLAkiRVZQX1BLRVlfZ2V0MV9EU0EifSwKIHtFUlJfRlVOQyhFVlBfRl9FVlBfUEtFWV9HRVQxX0VDRFNBKSwJIkVWUF9QS0VZX0dFVDFfRUNEU0EifSwKIHtFUlJfRlVOQyhFVlBfRl9FVlBfUEtFWV9HRVQxX0VDX0tFWSksCSJFVlBfUEtFWV9nZXQxX0VDX0tFWSJ9LAoge0VSUl9GVU5DKEVWUF9GX0VWUF9QS0VZX0dFVDFfUlNBKSwJIkVWUF9QS0VZX2dldDFfUlNBIn0sCit7RVJSX0ZVTkMoRVZQX0ZfRVZQX1BLRVlfS0VZR0VOKSwJIkVWUF9QS0VZX2tleWdlbiJ9LAore0VSUl9GVU5DKEVWUF9GX0VWUF9QS0VZX0tFWUdFTl9JTklUKSwJIkVWUF9QS0VZX2tleWdlbl9pbml0In0sCiB7RVJSX0ZVTkMoRVZQX0ZfRVZQX1BLRVlfTkVXKSwJIkVWUF9QS0VZX25ldyJ9LAore0VSUl9GVU5DKEVWUF9GX0VWUF9QS0VZX1BBUkFNR0VOKSwJIkVWUF9QS0VZX3BhcmFtZ2VuIn0sCit7RVJSX0ZVTkMoRVZQX0ZfRVZQX1BLRVlfUEFSQU1HRU5fSU5JVCksCSJFVlBfUEtFWV9wYXJhbWdlbl9pbml0In0sCit7RVJSX0ZVTkMoRVZQX0ZfRVZQX1BLRVlfU0lHTiksCSJFVlBfUEtFWV9zaWduIn0sCit7RVJSX0ZVTkMoRVZQX0ZfRVZQX1BLRVlfU0lHTl9JTklUKSwJIkVWUF9QS0VZX3NpZ25faW5pdCJ9LAore0VSUl9GVU5DKEVWUF9GX0VWUF9QS0VZX1ZFUklGWSksCSJFVlBfUEtFWV92ZXJpZnkifSwKK3tFUlJfRlVOQyhFVlBfRl9FVlBfUEtFWV9WRVJJRllfSU5JVCksCSJFVlBfUEtFWV92ZXJpZnlfaW5pdCJ9LAore0VSUl9GVU5DKEVWUF9GX0VWUF9QS0VZX1ZFUklGWV9SRUNPVkVSKSwJIkVWUF9QS0VZX3ZlcmlmeV9yZWNvdmVyIn0sCit7RVJSX0ZVTkMoRVZQX0ZfRVZQX1BLRVlfVkVSSUZZX1JFQ09WRVJfSU5JVCksCSJFVlBfUEtFWV92ZXJpZnlfcmVjb3Zlcl9pbml0In0sCiB7RVJSX0ZVTkMoRVZQX0ZfRVZQX1JJSk5EQUVMKSwJIkVWUF9SSUpOREFFTCJ9LAoge0VSUl9GVU5DKEVWUF9GX0VWUF9TSUdORklOQUwpLAkiRVZQX1NpZ25GaW5hbCJ9LAoge0VSUl9GVU5DKEVWUF9GX0VWUF9WRVJJRllGSU5BTCksCSJFVlBfVmVyaWZ5RmluYWwifSwKK3tFUlJfRlVOQyhFVlBfRl9JTlRfQ1RYX05FVyksCSJJTlRfQ1RYX05FVyJ9LAoge0VSUl9GVU5DKEVWUF9GX1BLQ1M1X1BCRV9LRVlJVkdFTiksCSJQS0NTNV9QQkVfa2V5aXZnZW4ifSwKIHtFUlJfRlVOQyhFVlBfRl9QS0NTNV9WMl9QQkVfS0VZSVZHRU4pLAkiUEtDUzVfdjJfUEJFX2tleWl2Z2VuIn0sCiB7RVJSX0ZVTkMoRVZQX0ZfUEtDUzhfU0VUX0JST0tFTiksCSJQS0NTOF9zZXRfYnJva2VuIn0sCit7RVJSX0ZVTkMoRVZQX0ZfUEtFWV9TRVRfVFlQRSksCSJQS0VZX1NFVF9UWVBFIn0sCiB7RVJSX0ZVTkMoRVZQX0ZfUkMyX01BR0lDX1RPX01FVEgpLAkiUkMyX01BR0lDX1RPX01FVEgifSwKIHtFUlJfRlVOQyhFVlBfRl9SQzVfQ1RSTCksCSJSQzVfQ1RSTCJ9LAogezAsTlVMTH0KQEAgLTEyNSw0MiArMTQ1LDUyIEBACiB7RVJSX1JFQVNPTihFVlBfUl9CQURfS0VZX0xFTkdUSCkgICAgICAgICwiYmFkIGtleSBsZW5ndGgifSwKIHtFUlJfUkVBU09OKEVWUF9SX0JOX0RFQ09ERV9FUlJPUikgICAgICAgLCJibiBkZWNvZGUgZXJyb3IifSwKIHtFUlJfUkVBU09OKEVWUF9SX0JOX1BVQktFWV9FUlJPUikgICAgICAgLCJibiBwdWJrZXkgZXJyb3IifSwKK3tFUlJfUkVBU09OKEVWUF9SX0JVRkZFUl9UT09fU01BTEwpICAgICAgLCJidWZmZXIgdG9vIHNtYWxsIn0sCiB7RVJSX1JFQVNPTihFVlBfUl9DQU1FTExJQV9LRVlfU0VUVVBfRkFJTEVEKSwiY2FtZWxsaWEga2V5IHNldHVwIGZhaWxlZCJ9LAoge0VSUl9SRUFTT04oRVZQX1JfQ0lQSEVSX1BBUkFNRVRFUl9FUlJPUiksImNpcGhlciBwYXJhbWV0ZXIgZXJyb3IifSwKK3tFUlJfUkVBU09OKEVWUF9SX0NPTU1BTkRfTk9UX1NVUFBPUlRFRCkgLCJjb21tYW5kIG5vdCBzdXBwb3J0ZWQifSwKIHtFUlJfUkVBU09OKEVWUF9SX0NUUkxfTk9UX0lNUExFTUVOVEVEKSAgLCJjdHJsIG5vdCBpbXBsZW1lbnRlZCJ9LAoge0VSUl9SRUFTT04oRVZQX1JfQ1RSTF9PUEVSQVRJT05fTk9UX0lNUExFTUVOVEVEKSwiY3RybCBvcGVyYXRpb24gbm90IGltcGxlbWVudGVkIn0sCiB7RVJSX1JFQVNPTihFVlBfUl9EQVRBX05PVF9NVUxUSVBMRV9PRl9CTE9DS19MRU5HVEgpLCJkYXRhIG5vdCBtdWx0aXBsZSBvZiBibG9jayBsZW5ndGgifSwKIHtFUlJfUkVBU09OKEVWUF9SX0RFQ09ERV9FUlJPUikgICAgICAgICAgLCJkZWNvZGUgZXJyb3IifSwKIHtFUlJfUkVBU09OKEVWUF9SX0RJRkZFUkVOVF9LRVlfVFlQRVMpICAgLCJkaWZmZXJlbnQga2V5IHR5cGVzIn0sCi17RVJSX1JFQVNPTihFVlBfUl9ESVNBQkxFRF9GT1JfRklQUykgICAgICwiZGlzYWJsZWQgZm9yIGZpcHMifSwKK3tFUlJfUkVBU09OKEVWUF9SX0RJRkZFUkVOVF9QQVJBTUVURVJTKSAgLCJkaWZmZXJlbnQgcGFyYW1ldGVycyJ9LAoge0VSUl9SRUFTT04oRVZQX1JfRU5DT0RFX0VSUk9SKSAgICAgICAgICAsImVuY29kZSBlcnJvciJ9LAote0VSUl9SRUFTT04oRVZQX1JfRVJST1JfTE9BRElOR19TRUNUSU9OKSAsImVycm9yIGxvYWRpbmcgc2VjdGlvbiJ9LAote0VSUl9SRUFTT04oRVZQX1JfRVJST1JfU0VUVElOR19GSVBTX01PREUpLCJlcnJvciBzZXR0aW5nIGZpcHMgbW9kZSJ9LAoge0VSUl9SRUFTT04oRVZQX1JfRVZQX1BCRV9DSVBIRVJJTklUX0VSUk9SKSwiZXZwIHBiZSBjaXBoZXJpbml0IGVycm9yIn0sCiB7RVJSX1JFQVNPTihFVlBfUl9FWFBFQ1RJTkdfQU5fUlNBX0tFWSkgICwiZXhwZWN0aW5nIGFuIHJzYSBrZXkifSwKIHtFUlJfUkVBU09OKEVWUF9SX0VYUEVDVElOR19BX0RIX0tFWSkgICAgLCJleHBlY3RpbmcgYSBkaCBrZXkifSwKIHtFUlJfUkVBU09OKEVWUF9SX0VYUEVDVElOR19BX0RTQV9LRVkpICAgLCJleHBlY3RpbmcgYSBkc2Ega2V5In0sCiB7RVJSX1JFQVNPTihFVlBfUl9FWFBFQ1RJTkdfQV9FQ0RTQV9LRVkpICwiZXhwZWN0aW5nIGEgZWNkc2Ega2V5In0sCiB7RVJSX1JFQVNPTihFVlBfUl9FWFBFQ1RJTkdfQV9FQ19LRVkpICAgICwiZXhwZWN0aW5nIGEgZWMga2V5In0sCi17RVJSX1JFQVNPTihFVlBfUl9GSVBTX01PREVfTk9UX1NVUFBPUlRFRCksImZpcHMgbW9kZSBub3Qgc3VwcG9ydGVkIn0sCiB7RVJSX1JFQVNPTihFVlBfUl9JTklUSUFMSVpBVElPTl9FUlJPUikgICwiaW5pdGlhbGl6YXRpb24gZXJyb3IifSwKIHtFUlJfUkVBU09OKEVWUF9SX0lOUFVUX05PVF9JTklUSUFMSVpFRCkgLCJpbnB1dCBub3QgaW5pdGlhbGl6ZWQifSwKLXtFUlJfUkVBU09OKEVWUF9SX0lOVkFMSURfRklQU19NT0RFKSAgICAgLCJpbnZhbGlkIGZpcHMgbW9kZSJ9LAore0VSUl9SRUFTT04oRVZQX1JfSU5WQUxJRF9ESUdFU1QpICAgICAgICAsImludmFsaWQgZGlnZXN0In0sCiB7RVJSX1JFQVNPTihFVlBfUl9JTlZBTElEX0tFWV9MRU5HVEgpICAgICwiaW52YWxpZCBrZXkgbGVuZ3RoIn0sCit7RVJSX1JFQVNPTihFVlBfUl9JTlZBTElEX09QRVJBVElPTikgICAgICwiaW52YWxpZCBvcGVyYXRpb24ifSwKIHtFUlJfUkVBU09OKEVWUF9SX0lWX1RPT19MQVJHRSkgICAgICAgICAgLCJpdiB0b28gbGFyZ2UifSwKIHtFUlJfUkVBU09OKEVWUF9SX0tFWUdFTl9GQUlMVVJFKSAgICAgICAgLCJrZXlnZW4gZmFpbHVyZSJ9LAore0VSUl9SRUFTT04oRVZQX1JfTUVTU0FHRV9ESUdFU1RfSVNfTlVMTCksIm1lc3NhZ2UgZGlnZXN0IGlzIG51bGwifSwKK3tFUlJfUkVBU09OKEVWUF9SX01FVEhPRF9OT1RfU1VQUE9SVEVEKSAgLCJtZXRob2Qgbm90IHN1cHBvcnRlZCJ9LAoge0VSUl9SRUFTT04oRVZQX1JfTUlTU0lOR19QQVJBTUVURVJTKSAgICAsIm1pc3NpbmcgcGFyYW1ldGVycyJ9LAoge0VSUl9SRUFTT04oRVZQX1JfTk9fQ0lQSEVSX1NFVCkgICAgICAgICAsIm5vIGNpcGhlciBzZXQifSwKK3tFUlJfUkVBU09OKEVWUF9SX05PX0RFRkFVTFRfRElHRVNUKSAgICAgLCJubyBkZWZhdWx0IGRpZ2VzdCJ9LAoge0VSUl9SRUFTT04oRVZQX1JfTk9fRElHRVNUX1NFVCkgICAgICAgICAsIm5vIGRpZ2VzdCBzZXQifSwKIHtFUlJfUkVBU09OKEVWUF9SX05PX0RTQV9QQVJBTUVURVJTKSAgICAgLCJubyBkc2EgcGFyYW1ldGVycyJ9LAore0VSUl9SRUFTT04oRVZQX1JfTk9fS0VZX1NFVCkgICAgICAgICAgICAsIm5vIGtleSBzZXQifSwKK3tFUlJfUkVBU09OKEVWUF9SX05PX09QRVJBVElPTl9TRVQpICAgICAgLCJubyBvcGVyYXRpb24gc2V0In0sCiB7RVJSX1JFQVNPTihFVlBfUl9OT19TSUdOX0ZVTkNUSU9OX0NPTkZJR1VSRUQpLCJubyBzaWduIGZ1bmN0aW9uIGNvbmZpZ3VyZWQifSwKIHtFUlJfUkVBU09OKEVWUF9SX05PX1ZFUklGWV9GVU5DVElPTl9DT05GSUdVUkVEKSwibm8gdmVyaWZ5IGZ1bmN0aW9uIGNvbmZpZ3VyZWQifSwKK3tFUlJfUkVBU09OKEVWUF9SX09QRVJBVElPTl9OT1RfU1VQUE9SVEVEX0ZPUl9USElTX0tFWVRZUEUpLCJvcGVyYXRpb24gbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBrZXl0eXBlIn0sCit7RVJSX1JFQVNPTihFVlBfUl9PUEVSQVRPTl9OT1RfSU5JVElBTElaRUQpLCJvcGVyYXRvbiBub3QgaW5pdGlhbGl6ZWQifSwKIHtFUlJfUkVBU09OKEVWUF9SX1BLQ1M4X1VOS05PV05fQlJPS0VOX1RZUEUpLCJwa2NzOCB1bmtub3duIGJyb2tlbiB0eXBlIn0sCit7RVJSX1JFQVNPTihFVlBfUl9QUklWQVRFX0tFWV9ERUNPREVfRVJST1IpLCJwcml2YXRlIGtleSBkZWNvZGUgZXJyb3IifSwKK3tFUlJfUkVBU09OKEVWUF9SX1BSSVZBVEVfS0VZX0VOQ09ERV9FUlJPUiksInByaXZhdGUga2V5IGVuY29kZSBlcnJvciJ9LAoge0VSUl9SRUFTT04oRVZQX1JfUFVCTElDX0tFWV9OT1RfUlNBKSAgICAsInB1YmxpYyBrZXkgbm90IHJzYSJ9LAote0VSUl9SRUFTT04oRVZQX1JfU0VFRF9LRVlfU0VUVVBfRkFJTEVEKSAsInNlZWQga2V5IHNldHVwIGZhaWxlZCJ9LAote0VSUl9SRUFTT04oRVZQX1JfVU5LTk9XTl9PUFRJT04pICAgICAgICAsInVua25vd24gb3B0aW9uIn0sCit7RVJSX1JFQVNPTihFVlBfUl9VTktOT1dOX0NJUEhFUikgICAgICAgICwidW5rbm93biBjaXBoZXIifSwKK3tFUlJfUkVBU09OKEVWUF9SX1VOS05PV05fRElHRVNUKSAgICAgICAgLCJ1bmtub3duIGRpZ2VzdCJ9LAoge0VSUl9SRUFTT04oRVZQX1JfVU5LTk9XTl9QQkVfQUxHT1JJVEhNKSAsInVua25vd24gcGJlIGFsZ29yaXRobSJ9LAoge0VSUl9SRUFTT04oRVZQX1JfVU5TVVBPUlRFRF9OVU1CRVJfT0ZfUk9VTkRTKSwidW5zdXBvcnRlZCBudW1iZXIgb2Ygcm91bmRzIn0sCit7RVJSX1JFQVNPTihFVlBfUl9VTlNVUFBPUlRFRF9BTEdPUklUSE0pICwidW5zdXBwb3J0ZWQgYWxnb3JpdGhtIn0sCiB7RVJSX1JFQVNPTihFVlBfUl9VTlNVUFBPUlRFRF9DSVBIRVIpICAgICwidW5zdXBwb3J0ZWQgY2lwaGVyIn0sCiB7RVJSX1JFQVNPTihFVlBfUl9VTlNVUFBPUlRFRF9LRVlMRU5HVEgpICwidW5zdXBwb3J0ZWQga2V5bGVuZ3RoIn0sCiB7RVJSX1JFQVNPTihFVlBfUl9VTlNVUFBPUlRFRF9LRVlfREVSSVZBVElPTl9GVU5DVElPTiksInVuc3VwcG9ydGVkIGtleSBkZXJpdmF0aW9uIGZ1bmN0aW9uIn0sCmRpZmYgLS1naXQgYS9jcnlwdG8vZXZwL2V2cF9rZXkuYyBiL2NyeXB0by9ldnAvZXZwX2tleS5jCmluZGV4IDM2MWVhNjkuLjgzOWQ2YTMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ldnAvZXZwX2tleS5jCisrKyBiL2NyeXB0by9ldnAvZXZwX2tleS5jCkBAIC05MCw2ICs5MCwxMSBAQAogICogdGhpcyBmdW5jdGlvbiB3aWxsIGZhaWwgKi8KIGludCBFVlBfcmVhZF9wd19zdHJpbmcoY2hhciAqYnVmLCBpbnQgbGVuLCBjb25zdCBjaGFyICpwcm9tcHQsIGludCB2ZXJpZnkpCiAJeworCXJldHVybiBFVlBfcmVhZF9wd19zdHJpbmdfbWluKGJ1ZiwgMCwgbGVuLCBwcm9tcHQsIHZlcmlmeSk7CisJfQorCitpbnQgRVZQX3JlYWRfcHdfc3RyaW5nX21pbihjaGFyICpidWYsIGludCBtaW4sIGludCBsZW4sIGNvbnN0IGNoYXIgKnByb21wdCwgaW50IHZlcmlmeSkKKwl7CiAJaW50IHJldDsKIAljaGFyIGJ1ZmZbQlVGU0laXTsKIAlVSSAqdWk7CkBAIC05NywxMCArMTAyLDEwIEBACiAJaWYgKChwcm9tcHQgPT0gTlVMTCkgJiYgKHByb21wdF9zdHJpbmdbMF0gIT0gJ1wwJykpCiAJCXByb21wdD1wcm9tcHRfc3RyaW5nOwogCXVpID0gVUlfbmV3KCk7Ci0JVUlfYWRkX2lucHV0X3N0cmluZyh1aSxwcm9tcHQsMCxidWYsMCwobGVuPj1CVUZTSVopP0JVRlNJWi0xOmxlbik7CisJVUlfYWRkX2lucHV0X3N0cmluZyh1aSxwcm9tcHQsMCxidWYsbWluLChsZW4+PUJVRlNJWik/QlVGU0laLTE6bGVuKTsKIAlpZiAodmVyaWZ5KQogCQlVSV9hZGRfdmVyaWZ5X3N0cmluZyh1aSxwcm9tcHQsMCwKLQkJCWJ1ZmYsMCwobGVuPj1CVUZTSVopP0JVRlNJWi0xOmxlbixidWYpOworCQkJYnVmZixtaW4sKGxlbj49QlVGU0laKT9CVUZTSVotMTpsZW4sYnVmKTsKIAlyZXQgPSBVSV9wcm9jZXNzKHVpKTsKIAlVSV9mcmVlKHVpKTsKIAlPUEVOU1NMX2NsZWFuc2UoYnVmZixCVUZTSVopOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2V2cC9ldnBfbGliLmMgYi9jcnlwdG8vZXZwL2V2cF9saWIuYwppbmRleCA5YzIwMDYxLi40MDk1MWEwIDEwMDY0NAotLS0gYS9jcnlwdG8vZXZwL2V2cF9saWIuYworKysgYi9jcnlwdG8vZXZwL2V2cF9saWIuYwpAQCAtNjcsOCArNjcsNiBAQAogCiAJaWYgKGMtPmNpcGhlci0+c2V0X2FzbjFfcGFyYW1ldGVycyAhPSBOVUxMKQogCQlyZXQ9Yy0+Y2lwaGVyLT5zZXRfYXNuMV9wYXJhbWV0ZXJzKGMsdHlwZSk7Ci0JZWxzZSBpZiAoYy0+Y2lwaGVyLT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xKQotCQlyZXQ9RVZQX0NJUEhFUl9zZXRfYXNuMV9pdihjLCB0eXBlKTsKIAllbHNlCiAJCXJldD0tMTsKIAlyZXR1cm4ocmV0KTsKQEAgLTgwLDggKzc4LDYgQEAKIAogCWlmIChjLT5jaXBoZXItPmdldF9hc24xX3BhcmFtZXRlcnMgIT0gTlVMTCkKIAkJcmV0PWMtPmNpcGhlci0+Z2V0X2FzbjFfcGFyYW1ldGVycyhjLHR5cGUpOwotCWVsc2UgaWYgKGMtPmNpcGhlci0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSkKLQkJcmV0PUVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYoYywgdHlwZSk7CiAJZWxzZQogCQlyZXQ9LTE7CiAJcmV0dXJuKHJldCk7CkBAIC0xODgsNiArMTg0LDExIEBACiAJcmV0dXJuIGN0eC0+Y2lwaGVyLT5ibG9ja19zaXplOwogCX0KIAoraW50IEVWUF9DaXBoZXIoRVZQX0NJUEhFUl9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgaW50IGlubCkKKwl7CisJcmV0dXJuIGN0eC0+Y2lwaGVyLT5kb19jaXBoZXIoY3R4LG91dCxpbixpbmwpOworCX0KKwogY29uc3QgRVZQX0NJUEhFUiAqRVZQX0NJUEhFUl9DVFhfY2lwaGVyKGNvbnN0IEVWUF9DSVBIRVJfQ1RYICpjdHgpCiAJewogCXJldHVybiBjdHgtPmNpcGhlcjsKQEAgLTE5OCw2ICsxOTksMTEgQEAKIAlyZXR1cm4gY2lwaGVyLT5mbGFnczsKIAl9CiAKK3Vuc2lnbmVkIGxvbmcgRVZQX0NJUEhFUl9DVFhfZmxhZ3MoY29uc3QgRVZQX0NJUEhFUl9DVFggKmN0eCkKKwl7CisJcmV0dXJuIGN0eC0+Y2lwaGVyLT5mbGFnczsKKwl9CisKIHZvaWQgKkVWUF9DSVBIRVJfQ1RYX2dldF9hcHBfZGF0YShjb25zdCBFVlBfQ0lQSEVSX0NUWCAqY3R4KQogCXsKIAlyZXR1cm4gY3R4LT5hcHBfZGF0YTsKQEAgLTIxMyw2ICsyMTksMTEgQEAKIAlyZXR1cm4gY2lwaGVyLT5pdl9sZW47CiAJfQogCitpbnQgRVZQX0NJUEhFUl9DVFhfaXZfbGVuZ3RoKGNvbnN0IEVWUF9DSVBIRVJfQ1RYICpjdHgpCisJeworCXJldHVybiBjdHgtPmNpcGhlci0+aXZfbGVuOworCX0KKwogaW50IEVWUF9DSVBIRVJfa2V5X2xlbmd0aChjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIpCiAJewogCXJldHVybiBjaXBoZXItPmtleV9sZW47CkBAIC0yMjMsNiArMjM0LDExIEBACiAJcmV0dXJuIGN0eC0+a2V5X2xlbjsKIAl9CiAKK2ludCBFVlBfQ0lQSEVSX25pZChjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIpCisJeworCXJldHVybiBjaXBoZXItPm5pZDsKKwl9CisKIGludCBFVlBfQ0lQSEVSX0NUWF9uaWQoY29uc3QgRVZQX0NJUEhFUl9DVFggKmN0eCkKIAl7CiAJcmV0dXJuIGN0eC0+Y2lwaGVyLT5uaWQ7CkBAIC0yNDUsMTEgKzI2MSwyMyBAQAogCiBpbnQgRVZQX01EX3NpemUoY29uc3QgRVZQX01EICptZCkKIAl7CisJaWYgKCFtZCkKKwkJeworCQlFVlBlcnIoRVZQX0ZfRVZQX01EX1NJWkUsIEVWUF9SX01FU1NBR0VfRElHRVNUX0lTX05VTEwpOworCQlyZXR1cm4gLTE7CisJCX0KIAlyZXR1cm4gbWQtPm1kX3NpemU7CiAJfQogCi1jb25zdCBFVlBfTUQgKiBFVlBfTURfQ1RYX21kKGNvbnN0IEVWUF9NRF9DVFggKmN0eCkKK3Vuc2lnbmVkIGxvbmcgRVZQX01EX2ZsYWdzKGNvbnN0IEVWUF9NRCAqbWQpCiAJeworCXJldHVybiBtZC0+ZmxhZ3M7CisJfQorCitjb25zdCBFVlBfTUQgKkVWUF9NRF9DVFhfbWQoY29uc3QgRVZQX01EX0NUWCAqY3R4KQorCXsKKwlpZiAoIWN0eCkKKwkJcmV0dXJuIE5VTEw7CiAJcmV0dXJuIGN0eC0+ZGlnZXN0OwogCX0KIApkaWZmIC0tZ2l0IGEvY3J5cHRvL2V2cC9ldnBfbG9jbC5oIGIvY3J5cHRvL2V2cC9ldnBfbG9jbC5oCmluZGV4IDcyMTA1YjAuLjI5MmQ3NGMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ldnAvZXZwX2xvY2wuaAorKysgYi9jcnlwdG8vZXZwL2V2cF9sb2NsLmgKQEAgLTYxLDM4ICs2MSw2NiBAQAogLyogV3JhcHBlciBmdW5jdGlvbnMgZm9yIGVhY2ggY2lwaGVyIG1vZGUgKi8KIAogI2RlZmluZSBCTE9DS19DSVBIRVJfZWNiX2xvb3AoKSBcCi0JdW5zaWduZWQgaW50IGksIGJsOyBcCisJc2l6ZV90IGksIGJsOyBcCiAJYmwgPSBjdHgtPmNpcGhlci0+YmxvY2tfc2l6ZTtcCiAJaWYoaW5sIDwgYmwpIHJldHVybiAxO1wKIAlpbmwgLT0gYmw7IFwKIAlmb3IoaT0wOyBpIDw9IGlubDsgaSs9YmwpIAogCiAjZGVmaW5lIEJMT0NLX0NJUEhFUl9mdW5jX2VjYihjbmFtZSwgY3ByZWZpeCwga3N0cnVjdCwga3NjaGVkKSBcCi1zdGF0aWMgaW50IGNuYW1lIyNfZWNiX2NpcGhlcihFVlBfQ0lQSEVSX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBpbnQgaW5sKSBcCitzdGF0aWMgaW50IGNuYW1lIyNfZWNiX2NpcGhlcihFVlBfQ0lQSEVSX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgaW5sKSBcCiB7XAogCUJMT0NLX0NJUEhFUl9lY2JfbG9vcCgpIFwKIAkJY3ByZWZpeCMjX2VjYl9lbmNyeXB0KGluICsgaSwgb3V0ICsgaSwgJigoa3N0cnVjdCAqKWN0eC0+Y2lwaGVyX2RhdGEpLT5rc2NoZWQsIGN0eC0+ZW5jcnlwdCk7XAogCXJldHVybiAxO1wKIH0KIAorI2RlZmluZSBFVlBfTUFYQ0hVTksgKChzaXplX3QpMTw8KHNpemVvZihsb25nKSo4LTIpKQorCiAjZGVmaW5lIEJMT0NLX0NJUEhFUl9mdW5jX29mYihjbmFtZSwgY3ByZWZpeCwgY2JpdHMsIGtzdHJ1Y3QsIGtzY2hlZCkgXAotc3RhdGljIGludCBjbmFtZSMjX29mYl9jaXBoZXIoRVZQX0NJUEhFUl9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgaW50IGlubCkgXAorc3RhdGljIGludCBjbmFtZSMjX29mYl9jaXBoZXIoRVZQX0NJUEhFUl9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGlubCkgXAoge1wKLQljcHJlZml4IyNfb2ZiIyNjYml0cyMjX2VuY3J5cHQoaW4sIG91dCwgKGxvbmcpaW5sLCAmKChrc3RydWN0ICopY3R4LT5jaXBoZXJfZGF0YSktPmtzY2hlZCwgY3R4LT5pdiwgJmN0eC0+bnVtKTtcCisJd2hpbGUoaW5sPj1FVlBfTUFYQ0hVTkspXAorCSAgICB7XAorCSAgICBjcHJlZml4IyNfb2ZiIyNjYml0cyMjX2VuY3J5cHQoaW4sIG91dCwgKGxvbmcpRVZQX01BWENIVU5LLCAmKChrc3RydWN0ICopY3R4LT5jaXBoZXJfZGF0YSktPmtzY2hlZCwgY3R4LT5pdiwgJmN0eC0+bnVtKTtcCisJICAgIGlubC09RVZQX01BWENIVU5LO1wKKwkgICAgaW4gKz1FVlBfTUFYQ0hVTks7XAorCSAgICBvdXQrPUVWUF9NQVhDSFVOSztcCisJICAgIH1cCisJaWYgKGlubClcCisJICAgIGNwcmVmaXgjI19vZmIjI2NiaXRzIyNfZW5jcnlwdChpbiwgb3V0LCAobG9uZylpbmwsICYoKGtzdHJ1Y3QgKiljdHgtPmNpcGhlcl9kYXRhKS0+a3NjaGVkLCBjdHgtPml2LCAmY3R4LT5udW0pO1wKIAlyZXR1cm4gMTtcCiB9CiAKICNkZWZpbmUgQkxPQ0tfQ0lQSEVSX2Z1bmNfY2JjKGNuYW1lLCBjcHJlZml4LCBrc3RydWN0LCBrc2NoZWQpIFwKLXN0YXRpYyBpbnQgY25hbWUjI19jYmNfY2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGludCBpbmwpIFwKK3N0YXRpYyBpbnQgY25hbWUjI19jYmNfY2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBpbmwpIFwKIHtcCi0JY3ByZWZpeCMjX2NiY19lbmNyeXB0KGluLCBvdXQsIChsb25nKWlubCwgJigoa3N0cnVjdCAqKWN0eC0+Y2lwaGVyX2RhdGEpLT5rc2NoZWQsIGN0eC0+aXYsIGN0eC0+ZW5jcnlwdCk7XAorCXdoaWxlKGlubD49RVZQX01BWENIVU5LKSBcCisJICAgIHtcCisJICAgIGNwcmVmaXgjI19jYmNfZW5jcnlwdChpbiwgb3V0LCAobG9uZylFVlBfTUFYQ0hVTkssICYoKGtzdHJ1Y3QgKiljdHgtPmNpcGhlcl9kYXRhKS0+a3NjaGVkLCBjdHgtPml2LCBjdHgtPmVuY3J5cHQpO1wKKwkgICAgaW5sLT1FVlBfTUFYQ0hVTks7XAorCSAgICBpbiArPUVWUF9NQVhDSFVOSztcCisJICAgIG91dCs9RVZQX01BWENIVU5LO1wKKwkgICAgfVwKKwlpZiAoaW5sKVwKKwkgICAgY3ByZWZpeCMjX2NiY19lbmNyeXB0KGluLCBvdXQsIChsb25nKWlubCwgJigoa3N0cnVjdCAqKWN0eC0+Y2lwaGVyX2RhdGEpLT5rc2NoZWQsIGN0eC0+aXYsIGN0eC0+ZW5jcnlwdCk7XAogCXJldHVybiAxO1wKIH0KIAogI2RlZmluZSBCTE9DS19DSVBIRVJfZnVuY19jZmIoY25hbWUsIGNwcmVmaXgsIGNiaXRzLCBrc3RydWN0LCBrc2NoZWQpIFwKLXN0YXRpYyBpbnQgY25hbWUjI19jZmIjI2NiaXRzIyNfY2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGludCBpbmwpIFwKK3N0YXRpYyBpbnQgY25hbWUjI19jZmIjI2NiaXRzIyNfY2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBpbmwpIFwKIHtcCi0JY3ByZWZpeCMjX2NmYiMjY2JpdHMjI19lbmNyeXB0KGluLCBvdXQsIChsb25nKSgoY2JpdHM9PTEpICYmICEoY3R4LT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdfTEVOR1RIX0JJVFMpID9pbmwqODppbmwpLCAmKChrc3RydWN0ICopY3R4LT5jaXBoZXJfZGF0YSktPmtzY2hlZCwgY3R4LT5pdiwgJmN0eC0+bnVtLCBjdHgtPmVuY3J5cHQpO1wKKwlzaXplX3QgY2h1bms9RVZQX01BWENIVU5LO1wKKwlpZiAoY2JpdHM9PTEpICBjaHVuaz4+PTM7XAorCWlmIChpbmw8Y2h1bmspIGNodW5rPWlubDtcCisJd2hpbGUoaW5sICYmIGlubD49Y2h1bmspXAorCSAgICB7XAorICAgICAgICAgICAgY3ByZWZpeCMjX2NmYiMjY2JpdHMjI19lbmNyeXB0KGluLCBvdXQsIChsb25nKSgoY2JpdHM9PTEpICYmICEoY3R4LT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdfTEVOR1RIX0JJVFMpID9pbmwqODppbmwpLCAmKChrc3RydWN0ICopY3R4LT5jaXBoZXJfZGF0YSktPmtzY2hlZCwgY3R4LT5pdiwgJmN0eC0+bnVtLCBjdHgtPmVuY3J5cHQpO1wKKwkgICAgaW5sLT1jaHVuaztcCisJICAgIGluICs9Y2h1bms7XAorCSAgICBvdXQrPWNodW5rO1wKKwkgICAgaWYoaW5sPGNodW5rKSBjaHVuaz1pbmw7XAorCSAgICB9XAogCXJldHVybiAxO1wKIH0KIApAQCAtMTI3LDkgKzE1NSw5IEBACiAjZGVmaW5lIEJMT0NLX0NJUEhFUl9kZWZfY2ZiKGNuYW1lLCBrc3RydWN0LCBuaWQsIGtleV9sZW4sIFwKIAkJCSAgICAgaXZfbGVuLCBjYml0cywgZmxhZ3MsIGluaXRfa2V5LCBjbGVhbnVwLCBcCiAJCQkgICAgIHNldF9hc24xLCBnZXRfYXNuMSwgY3RybCkgXAotQkxPQ0tfQ0lQSEVSX2RlZjEoY25hbWUsIGNmYiMjY2JpdHMsIGNmYiMjY2JpdHMsIENGQiwga3N0cnVjdCwgbmlkLCBcCi0JCQkoY2JpdHMgKyA3KS84LCBrZXlfbGVuLCBpdl9sZW4sIFwKLQkJZmxhZ3MsIGluaXRfa2V5LCBjbGVhbnVwLCBzZXRfYXNuMSwgZ2V0X2FzbjEsIGN0cmwpCitCTE9DS19DSVBIRVJfZGVmMShjbmFtZSwgY2ZiIyNjYml0cywgY2ZiIyNjYml0cywgQ0ZCLCBrc3RydWN0LCBuaWQsIDEsIFwKKwkJICBrZXlfbGVuLCBpdl9sZW4sIGZsYWdzLCBpbml0X2tleSwgY2xlYW51cCwgc2V0X2FzbjEsIFwKKwkJICBnZXRfYXNuMSwgY3RybCkKIAogI2RlZmluZSBCTE9DS19DSVBIRVJfZGVmX29mYihjbmFtZSwga3N0cnVjdCwgbmlkLCBrZXlfbGVuLCBcCiAJCQkgICAgIGl2X2xlbiwgY2JpdHMsIGZsYWdzLCBpbml0X2tleSwgY2xlYW51cCwgXApAQCAtMjI2LDI3ICsyNTQsOTIgQEAKIAogI2RlZmluZSBFVlBfQ19EQVRBKGtzdHJ1Y3QsIGN0eCkJKChrc3RydWN0ICopKGN0eCktPmNpcGhlcl9kYXRhKQogCi0jZGVmaW5lIElNUExFTUVOVF9DRkJSKGNpcGhlcixjcHJlZml4LGtzdHJ1Y3Qsa3NjaGVkLGtleXNpemUsY2JpdHMsaXZfbGVuLGZsKSBcCisjZGVmaW5lIElNUExFTUVOVF9DRkJSKGNpcGhlcixjcHJlZml4LGtzdHJ1Y3Qsa3NjaGVkLGtleXNpemUsY2JpdHMsaXZfbGVuKSBcCiAJQkxPQ0tfQ0lQSEVSX2Z1bmNfY2ZiKGNpcGhlciMjXyMja2V5c2l6ZSxjcHJlZml4LGNiaXRzLGtzdHJ1Y3Qsa3NjaGVkKSBcCiAJQkxPQ0tfQ0lQSEVSX2RlZl9jZmIoY2lwaGVyIyNfIyNrZXlzaXplLGtzdHJ1Y3QsIFwKIAkJCSAgICAgTklEXyMjY2lwaGVyIyNfIyNrZXlzaXplLCBrZXlzaXplLzgsIGl2X2xlbiwgY2JpdHMsIFwKLQkJCSAgICAgKGZsKXxFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSwgXAotCQkJICAgICBjaXBoZXIjI19pbml0X2tleSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkKKwkJCSAgICAgMCwgY2lwaGVyIyNfaW5pdF9rZXksIE5VTEwsIFwKKwkJCSAgICAgRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwgXAorCQkJICAgICBFVlBfQ0lQSEVSX2dldF9hc24xX2l2LCBcCisJCQkgICAgIE5VTEwpCiAKLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLSNkZWZpbmUgUkMyX3NldF9rZXkJcHJpdmF0ZV9SQzJfc2V0X2tleQotI2RlZmluZSBSQzRfc2V0X2tleQlwcml2YXRlX1JDNF9zZXRfa2V5Ci0jZGVmaW5lIENBU1Rfc2V0X2tleQlwcml2YXRlX0NBU1Rfc2V0X2tleQotI2RlZmluZSBSQzVfMzJfc2V0X2tleQlwcml2YXRlX1JDNV8zMl9zZXRfa2V5Ci0jZGVmaW5lIEJGX3NldF9rZXkJcHJpdmF0ZV9CRl9zZXRfa2V5Ci0jZGVmaW5lIENhbWVsbGlhX3NldF9rZXkgcHJpdmF0ZV9DYW1lbGxpYV9zZXRfa2V5Ci0jZGVmaW5lIGlkZWFfc2V0X2VuY3J5cHRfa2V5IHByaXZhdGVfaWRlYV9zZXRfZW5jcnlwdF9rZXkKK3N0cnVjdCBldnBfcGtleV9jdHhfc3QKKwl7CisJLyogTWV0aG9kIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG9wZXJhdGlvbiAqLworCWNvbnN0IEVWUF9QS0VZX01FVEhPRCAqcG1ldGg7CisJLyogRW5naW5lIHRoYXQgaW1wbGVtZW50cyB0aGlzIG1ldGhvZCBvciBOVUxMIGlmIGJ1aWx0aW4gKi8KKwlFTkdJTkUgKmVuZ2luZTsKKwkvKiBLZXk6IG1heSBiZSBOVUxMICovCisJRVZQX1BLRVkgKnBrZXk7CisJLyogUGVlciBrZXkgZm9yIGtleSBhZ3JlZW1lbnQsIG1heSBiZSBOVUxMICovCisJRVZQX1BLRVkgKnBlZXJrZXk7CisJLyogQWN0dWFsIG9wZXJhdGlvbiAqLworCWludCBvcGVyYXRpb247CisJLyogQWxnb3JpdGhtIHNwZWNpZmljIGRhdGEgKi8KKwl2b2lkICpkYXRhOworCS8qIEFwcGxpY2F0aW9uIHNwZWNpZmljIGRhdGEgKi8KKwl2b2lkICphcHBfZGF0YTsKKwkvKiBLZXlnZW4gY2FsbGJhY2sgKi8KKwlFVlBfUEtFWV9nZW5fY2IgKnBrZXlfZ2VuY2I7CisJLyogaW1wbGVtZW50YXRpb24gc3BlY2lmaWMga2V5Z2VuIGRhdGEgKi8KKwlpbnQgKmtleWdlbl9pbmZvOworCWludCBrZXlnZW5faW5mb19jb3VudDsKKwl9IC8qIEVWUF9QS0VZX0NUWCAqLzsKIAotI2RlZmluZSBNRDVfSW5pdAlwcml2YXRlX01ENV9Jbml0Ci0jZGVmaW5lIE1ENF9Jbml0CXByaXZhdGVfTUQ0X0luaXQKLSNkZWZpbmUgTUQyX0luaXQJcHJpdmF0ZV9NRDJfSW5pdAotI2RlZmluZSBNREMyX0luaXQJcHJpdmF0ZV9NREMyX0luaXQKLSNkZWZpbmUgU0hBX0luaXQJcHJpdmF0ZV9TSEFfSW5pdAorI2RlZmluZSBFVlBfUEtFWV9GTEFHX0RZTkFNSUMJMQogCi0jZW5kaWYKK3N0cnVjdCBldnBfcGtleV9tZXRob2Rfc3QKKwl7CisJaW50IHBrZXlfaWQ7CisJaW50IGZsYWdzOwogCisJaW50ICgqaW5pdCkoRVZQX1BLRVlfQ1RYICpjdHgpOworCWludCAoKmNvcHkpKEVWUF9QS0VZX0NUWCAqZHN0LCBFVlBfUEtFWV9DVFggKnNyYyk7CisJdm9pZCAoKmNsZWFudXApKEVWUF9QS0VZX0NUWCAqY3R4KTsKKworCWludCAoKnBhcmFtZ2VuX2luaXQpKEVWUF9QS0VZX0NUWCAqY3R4KTsKKwlpbnQgKCpwYXJhbWdlbikoRVZQX1BLRVlfQ1RYICpjdHgsIEVWUF9QS0VZICpwa2V5KTsKKworCWludCAoKmtleWdlbl9pbml0KShFVlBfUEtFWV9DVFggKmN0eCk7CisJaW50ICgqa2V5Z2VuKShFVlBfUEtFWV9DVFggKmN0eCwgRVZQX1BLRVkgKnBrZXkpOworCisJaW50ICgqc2lnbl9pbml0KShFVlBfUEtFWV9DVFggKmN0eCk7CisJaW50ICgqc2lnbikoRVZQX1BLRVlfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKnNpZywgc2l6ZV90ICpzaWdsZW4sCisJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqdGJzLCBzaXplX3QgdGJzbGVuKTsKKworCWludCAoKnZlcmlmeV9pbml0KShFVlBfUEtFWV9DVFggKmN0eCk7CisJaW50ICgqdmVyaWZ5KShFVlBfUEtFWV9DVFggKmN0eCwKKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaWcsIHNpemVfdCBzaWdsZW4sCisJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqdGJzLCBzaXplX3QgdGJzbGVuKTsKKworCWludCAoKnZlcmlmeV9yZWNvdmVyX2luaXQpKEVWUF9QS0VZX0NUWCAqY3R4KTsKKwlpbnQgKCp2ZXJpZnlfcmVjb3ZlcikoRVZQX1BLRVlfQ1RYICpjdHgsCisJCQkJdW5zaWduZWQgY2hhciAqcm91dCwgc2l6ZV90ICpyb3V0bGVuLAorCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZywgc2l6ZV90IHNpZ2xlbik7CisKKwlpbnQgKCpzaWduY3R4X2luaXQpKEVWUF9QS0VZX0NUWCAqY3R4LCBFVlBfTURfQ1RYICptY3R4KTsKKwlpbnQgKCpzaWduY3R4KShFVlBfUEtFWV9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqc2lnLCBzaXplX3QgKnNpZ2xlbiwKKwkJCQkJRVZQX01EX0NUWCAqbWN0eCk7CisKKwlpbnQgKCp2ZXJpZnljdHhfaW5pdCkoRVZQX1BLRVlfQ1RYICpjdHgsIEVWUF9NRF9DVFggKm1jdHgpOworCWludCAoKnZlcmlmeWN0eCkoRVZQX1BLRVlfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZyxpbnQgc2lnbGVuLAorCQkJCQlFVlBfTURfQ1RYICptY3R4KTsKKworCWludCAoKmVuY3J5cHRfaW5pdCkoRVZQX1BLRVlfQ1RYICpjdHgpOworCWludCAoKmVuY3J5cHQpKEVWUF9QS0VZX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCAqb3V0bGVuLAorCQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGlubGVuKTsKKworCWludCAoKmRlY3J5cHRfaW5pdCkoRVZQX1BLRVlfQ1RYICpjdHgpOworCWludCAoKmRlY3J5cHQpKEVWUF9QS0VZX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCAqb3V0bGVuLAorCQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGlubGVuKTsKKworCWludCAoKmRlcml2ZV9pbml0KShFVlBfUEtFWV9DVFggKmN0eCk7CisJaW50ICgqZGVyaXZlKShFVlBfUEtFWV9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqa2V5LCBzaXplX3QgKmtleWxlbik7CisKKwlpbnQgKCpjdHJsKShFVlBfUEtFWV9DVFggKmN0eCwgaW50IHR5cGUsIGludCBwMSwgdm9pZCAqcDIpOworCWludCAoKmN0cmxfc3RyKShFVlBfUEtFWV9DVFggKmN0eCwgY29uc3QgY2hhciAqdHlwZSwgY29uc3QgY2hhciAqdmFsdWUpOworCisKKwl9IC8qIEVWUF9QS0VZX01FVEhPRCAqLzsKKwordm9pZCBldnBfcGtleV9zZXRfY2JfdHJhbnNsYXRlKEJOX0dFTkNCICpjYiwgRVZQX1BLRVlfQ1RYICpjdHgpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2V2cC9ldnBfcGJlLmMgYi9jcnlwdG8vZXZwL2V2cF9wYmUuYwppbmRleCA1ZTgzMGJlLi5jOWQ5MzJkIDEwMDY0NAotLS0gYS9jcnlwdG8vZXZwL2V2cF9wYmUuYworKysgYi9jcnlwdG8vZXZwL2V2cF9wYmUuYwpAQCAtMyw3ICszLDcgQEAKICAqIHByb2plY3QgMTk5OS4KICAqLwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoYykgMTk5OSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA2IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01OSw3OSArNTksMjUzIEBACiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlICJjcnlwdGxpYi5oIgogI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9wa2NzMTIuaD4KICNpbmNsdWRlIDxvcGVuc3NsL3g1MDkuaD4KIAogLyogUGFzc3dvcmQgYmFzZWQgZW5jcnlwdGlvbiAoUEJFKSBmdW5jdGlvbnMgKi8KIAotc3RhdGljIFNUQUNLICpwYmVfYWxnczsKK0RFQ0xBUkVfU1RBQ0tfT0YoRVZQX1BCRV9DVEwpCitzdGF0aWMgU1RBQ0tfT0YoRVZQX1BCRV9DVEwpICpwYmVfYWxnczsKIAogLyogU2V0dXAgYSBjaXBoZXIgY29udGV4dCBmcm9tIGEgUEJFIGFsZ29yaXRobSAqLwogCi10eXBlZGVmIHN0cnVjdCB7Ci1pbnQgcGJlX25pZDsKLWNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlcjsKLWNvbnN0IEVWUF9NRCAqbWQ7Ci1FVlBfUEJFX0tFWUdFTiAqa2V5Z2VuOwotfSBFVlBfUEJFX0NUTDsKK3R5cGVkZWYgc3RydWN0CisJeworCWludCBwYmVfdHlwZTsKKwlpbnQgcGJlX25pZDsKKwlpbnQgY2lwaGVyX25pZDsKKwlpbnQgbWRfbmlkOworCUVWUF9QQkVfS0VZR0VOICprZXlnZW47CisJfSBFVlBfUEJFX0NUTDsKKworc3RhdGljIGNvbnN0IEVWUF9QQkVfQ1RMIGJ1aWx0aW5fcGJlW10gPSAKKwl7CisJe0VWUF9QQkVfVFlQRV9PVVRFUiwgTklEX3BiZVdpdGhNRDJBbmRERVNfQ0JDLAorCQkJTklEX2Rlc19jYmMsIE5JRF9tZDIsIFBLQ1M1X1BCRV9rZXlpdmdlbn0sCisJe0VWUF9QQkVfVFlQRV9PVVRFUiwgTklEX3BiZVdpdGhNRDVBbmRERVNfQ0JDLAorCQkJTklEX2Rlc19jYmMsIE5JRF9tZDUsIFBLQ1M1X1BCRV9rZXlpdmdlbn0sCisJe0VWUF9QQkVfVFlQRV9PVVRFUiwgTklEX3BiZVdpdGhTSEExQW5kUkMyX0NCQywKKwkJCU5JRF9yYzJfNjRfY2JjLCBOSURfc2hhMSwgUEtDUzVfUEJFX2tleWl2Z2VufSwKKworCXtFVlBfUEJFX1RZUEVfT1VURVIsIE5JRF9wYmVfV2l0aFNIQTFBbmQxMjhCaXRSQzQsCisJCQlOSURfcmM0LCBOSURfc2hhMSwgUEtDUzEyX1BCRV9rZXlpdmdlbn0sCisJe0VWUF9QQkVfVFlQRV9PVVRFUiwgTklEX3BiZV9XaXRoU0hBMUFuZDQwQml0UkM0LAorCQkJTklEX3JjNF80MCwgTklEX3NoYTEsIFBLQ1MxMl9QQkVfa2V5aXZnZW59LAorCXtFVlBfUEJFX1RZUEVfT1VURVIsIE5JRF9wYmVfV2l0aFNIQTFBbmQzX0tleV9UcmlwbGVERVNfQ0JDLAorCQkgCU5JRF9kZXNfZWRlM19jYmMsIE5JRF9zaGExLCBQS0NTMTJfUEJFX2tleWl2Z2VufSwKKwl7RVZQX1BCRV9UWVBFX09VVEVSLCBOSURfcGJlX1dpdGhTSEExQW5kMl9LZXlfVHJpcGxlREVTX0NCQywgCisJCQlOSURfZGVzX2VkZV9jYmMsIE5JRF9zaGExLCBQS0NTMTJfUEJFX2tleWl2Z2VufSwKKwl7RVZQX1BCRV9UWVBFX09VVEVSLCBOSURfcGJlX1dpdGhTSEExQW5kMTI4Qml0UkMyX0NCQywKKwkJCU5JRF9yYzJfY2JjLCBOSURfc2hhMSwgUEtDUzEyX1BCRV9rZXlpdmdlbn0sCisJe0VWUF9QQkVfVFlQRV9PVVRFUiwgTklEX3BiZV9XaXRoU0hBMUFuZDQwQml0UkMyX0NCQywKKwkJCU5JRF9yYzJfNDBfY2JjLCBOSURfc2hhMSwgUEtDUzEyX1BCRV9rZXlpdmdlbn0sCisKKyNpZm5kZWYgT1BFTlNTTF9OT19ITUFDCisJe0VWUF9QQkVfVFlQRV9PVVRFUiwgTklEX3BiZXMyLCAtMSwgLTEsIFBLQ1M1X3YyX1BCRV9rZXlpdmdlbn0sCisjZW5kaWYKKwl7RVZQX1BCRV9UWVBFX09VVEVSLCBOSURfcGJlV2l0aE1EMkFuZFJDMl9DQkMsCisJCQlOSURfcmMyXzY0X2NiYywgTklEX21kMiwgUEtDUzVfUEJFX2tleWl2Z2VufSwKKwl7RVZQX1BCRV9UWVBFX09VVEVSLCBOSURfcGJlV2l0aE1ENUFuZFJDMl9DQkMsCisJCQlOSURfcmMyXzY0X2NiYywgTklEX21kNSwgUEtDUzVfUEJFX2tleWl2Z2VufSwKKwl7RVZQX1BCRV9UWVBFX09VVEVSLCBOSURfcGJlV2l0aFNIQTFBbmRERVNfQ0JDLAorCQkJTklEX2Rlc19jYmMsIE5JRF9zaGExLCBQS0NTNV9QQkVfa2V5aXZnZW59LAorCisKKwl7RVZQX1BCRV9UWVBFX1BSRiwgTklEX2htYWNXaXRoU0hBMSwgLTEsIE5JRF9zaGExLCAwfSwKKwl7RVZQX1BCRV9UWVBFX1BSRiwgTklEX2htYWNXaXRoTUQ1LCAtMSwgTklEX21kNSwgMH0sCisJe0VWUF9QQkVfVFlQRV9QUkYsIE5JRF9obWFjV2l0aFNIQTIyNCwgLTEsIE5JRF9zaGEyMjQsIDB9LAorCXtFVlBfUEJFX1RZUEVfUFJGLCBOSURfaG1hY1dpdGhTSEEyNTYsIC0xLCBOSURfc2hhMjU2LCAwfSwKKwl7RVZQX1BCRV9UWVBFX1BSRiwgTklEX2htYWNXaXRoU0hBMzg0LCAtMSwgTklEX3NoYTM4NCwgMH0sCisJe0VWUF9QQkVfVFlQRV9QUkYsIE5JRF9obWFjV2l0aFNIQTUxMiwgLTEsIE5JRF9zaGE1MTIsIDB9LAorCXtFVlBfUEJFX1RZUEVfUFJGLCBOSURfaWRfSE1BQ0dvc3RSMzQxMV85NCwgLTEsIE5JRF9pZF9Hb3N0UjM0MTFfOTQsIDB9LAorCX07CisKKyNpZmRlZiBURVNUCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisJeworCWludCBpLCBuaWRfbWQsIG5pZF9jaXBoZXI7CisJRVZQX1BCRV9DVEwgKnRwYmUsICp0cGJlMjsKKwkvKk9wZW5TU0xfYWRkX2FsbF9hbGdvcml0aG1zKCk7Ki8KKworCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoYnVpbHRpbl9wYmUpL3NpemVvZihFVlBfUEJFX0NUTCk7IGkrKykKKwkJeworCQl0cGJlID0gYnVpbHRpbl9wYmUgKyBpOworCQlmcHJpbnRmKHN0ZGVyciwgIiVkICVkICVzICIsIHRwYmUtPnBiZV90eXBlLCB0cGJlLT5wYmVfbmlkLAorCQkJCQkJT0JKX25pZDJzbih0cGJlLT5wYmVfbmlkKSk7CisJCWlmIChFVlBfUEJFX2ZpbmQodHBiZS0+cGJlX3R5cGUsIHRwYmUtPnBiZV9uaWQsCisJCQkJCSZuaWRfY2lwaGVyICwmbmlkX21kLDApKQorCQkJZnByaW50ZihzdGRlcnIsICJGb3VuZCAlcyAlc1xuIiwKKwkJCQkJT0JKX25pZDJzbihuaWRfY2lwaGVyKSwKKwkJCQkJT0JKX25pZDJzbihuaWRfbWQpKTsKKwkJZWxzZQorCQkJZnByaW50ZihzdGRlcnIsICJGaW5kIEVSUk9SISFcbiIpOworCQl9CisKKwlyZXR1cm4gMDsKKwl9CisjZW5kaWYKKwkJCisKIAogaW50IEVWUF9QQkVfQ2lwaGVySW5pdChBU04xX09CSkVDVCAqcGJlX29iaiwgY29uc3QgY2hhciAqcGFzcywgaW50IHBhc3NsZW4sCi0JICAgICBBU04xX1RZUEUgKnBhcmFtLCBFVlBfQ0lQSEVSX0NUWCAqY3R4LCBpbnQgZW5fZGUpCi17CisJCSAgICAgICBBU04xX1RZUEUgKnBhcmFtLCBFVlBfQ0lQSEVSX0NUWCAqY3R4LCBpbnQgZW5fZGUpCisJeworCWNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlcjsKKwljb25zdCBFVlBfTUQgKm1kOworCWludCBjaXBoZXJfbmlkLCBtZF9uaWQ7CisJRVZQX1BCRV9LRVlHRU4gKmtleWdlbjsKIAotCUVWUF9QQkVfQ1RMICpwYmV0bXAsIHBiZWx1OwotCWludCBpOwotCXBiZWx1LnBiZV9uaWQgPSBPQkpfb2JqMm5pZChwYmVfb2JqKTsKLQlpZiAocGJlbHUucGJlX25pZCAhPSBOSURfdW5kZWYpIGkgPSBza19maW5kKHBiZV9hbGdzLCAoY2hhciAqKSZwYmVsdSk7Ci0JZWxzZSBpID0gLTE7Ci0KLQlpZiAoaSA9PSAtMSkgeworCWlmICghRVZQX1BCRV9maW5kKEVWUF9QQkVfVFlQRV9PVVRFUiwgT0JKX29iajJuaWQocGJlX29iaiksCisJCQkJCSZjaXBoZXJfbmlkLCAmbWRfbmlkLCAma2V5Z2VuKSkKKwkJewogCQljaGFyIG9ial90bXBbODBdOwogCQlFVlBlcnIoRVZQX0ZfRVZQX1BCRV9DSVBIRVJJTklULEVWUF9SX1VOS05PV05fUEJFX0FMR09SSVRITSk7CiAJCWlmICghcGJlX29iaikgQlVGX3N0cmxjcHkgKG9ial90bXAsICJOVUxMIiwgc2l6ZW9mIG9ial90bXApOwogCQllbHNlIGkydF9BU04xX09CSkVDVChvYmpfdG1wLCBzaXplb2Ygb2JqX3RtcCwgcGJlX29iaik7CiAJCUVSUl9hZGRfZXJyb3JfZGF0YSgyLCAiVFlQRT0iLCBvYmpfdG1wKTsKIAkJcmV0dXJuIDA7Ci0JfQotCWlmKCFwYXNzKSBwYXNzbGVuID0gMDsKLQllbHNlIGlmIChwYXNzbGVuID09IC0xKSBwYXNzbGVuID0gc3RybGVuKHBhc3MpOwotCXBiZXRtcCA9IChFVlBfUEJFX0NUTCAqKXNrX3ZhbHVlIChwYmVfYWxncywgaSk7Ci0JaSA9ICgqcGJldG1wLT5rZXlnZW4pKGN0eCwgcGFzcywgcGFzc2xlbiwgcGFyYW0sIHBiZXRtcC0+Y2lwaGVyLAotCQkJCQkJIHBiZXRtcC0+bWQsIGVuX2RlKTsKLQlpZiAoIWkpIHsKKwkJfQorCisJaWYoIXBhc3MpCisJCXBhc3NsZW4gPSAwOworCWVsc2UgaWYgKHBhc3NsZW4gPT0gLTEpCisJCXBhc3NsZW4gPSBzdHJsZW4ocGFzcyk7CisKKwlpZiAoY2lwaGVyX25pZCA9PSAtMSkKKwkJY2lwaGVyID0gTlVMTDsKKwllbHNlCisJCXsKKwkJY2lwaGVyID0gRVZQX2dldF9jaXBoZXJieW5pZChjaXBoZXJfbmlkKTsKKwkJaWYgKCFjaXBoZXIpCisJCQl7CisJCQlFVlBlcnIoRVZQX0ZfRVZQX1BCRV9DSVBIRVJJTklULEVWUF9SX1VOS05PV05fQ0lQSEVSKTsKKwkJCXJldHVybiAwOworCQkJfQorCQl9CisKKwlpZiAobWRfbmlkID09IC0xKQorCQltZCA9IE5VTEw7CisJZWxzZQorCQl7CisJCW1kID0gRVZQX2dldF9kaWdlc3RieW5pZChtZF9uaWQpOworCQlpZiAoIW1kKQorCQkJeworCQkJRVZQZXJyKEVWUF9GX0VWUF9QQkVfQ0lQSEVSSU5JVCxFVlBfUl9VTktOT1dOX0RJR0VTVCk7CisJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCisJaWYgKCFrZXlnZW4oY3R4LCBwYXNzLCBwYXNzbGVuLCBwYXJhbSwgY2lwaGVyLCBtZCwgZW5fZGUpKQorCQl7CiAJCUVWUGVycihFVlBfRl9FVlBfUEJFX0NJUEhFUklOSVQsRVZQX1JfS0VZR0VOX0ZBSUxVUkUpOwogCQlyZXR1cm4gMDsKLQl9CisJCX0KIAlyZXR1cm4gMTsJCiB9CiAKLXN0YXRpYyBpbnQgcGJlX2NtcChjb25zdCBjaGFyICogY29uc3QgKmEsIGNvbnN0IGNoYXIgKiBjb25zdCAqYikKLXsKLQljb25zdCBFVlBfUEJFX0NUTCAqIGNvbnN0ICpwYmUxID0gKGNvbnN0IEVWUF9QQkVfQ1RMICogY29uc3QgKikgYSwKLQkJCSogY29uc3QgKnBiZTIgPSAoY29uc3QgRVZQX1BCRV9DVEwgKiBjb25zdCAqKWI7Ci0JcmV0dXJuICgoKnBiZTEpLT5wYmVfbmlkIC0gKCpwYmUyKS0+cGJlX25pZCk7Ci19CitERUNMQVJFX09CSl9CU0VBUkNIX0NNUF9GTihFVlBfUEJFX0NUTCwgRVZQX1BCRV9DVEwsIHBiZTIpOworCitzdGF0aWMgaW50IHBiZTJfY21wKGNvbnN0IEVWUF9QQkVfQ1RMICpwYmUxLCBjb25zdCBFVlBfUEJFX0NUTCAqcGJlMikKKwl7CisJaW50IHJldCA9IHBiZTEtPnBiZV90eXBlIC0gcGJlMi0+cGJlX3R5cGU7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwllbHNlCisJCXJldHVybiBwYmUxLT5wYmVfbmlkIC0gcGJlMi0+cGJlX25pZDsKKwl9CisKK0lNUExFTUVOVF9PQkpfQlNFQVJDSF9DTVBfRk4oRVZQX1BCRV9DVEwsIEVWUF9QQkVfQ1RMLCBwYmUyKTsKKworc3RhdGljIGludCBwYmVfY21wKGNvbnN0IEVWUF9QQkVfQ1RMICogY29uc3QgKmEsIGNvbnN0IEVWUF9QQkVfQ1RMICogY29uc3QgKmIpCisJeworCWludCByZXQgPSAoKmEpLT5wYmVfdHlwZSAtICgqYiktPnBiZV90eXBlOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJZWxzZQorCQlyZXR1cm4gKCphKS0+cGJlX25pZCAtICgqYiktPnBiZV9uaWQ7CisJfQogCiAvKiBBZGQgYSBQQkUgYWxnb3JpdGhtICovCiAKLWludCBFVlBfUEJFX2FsZ19hZGQoaW50IG5pZCwgY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyLCBjb25zdCBFVlBfTUQgKm1kLAotCSAgICAgRVZQX1BCRV9LRVlHRU4gKmtleWdlbikKLXsKK2ludCBFVlBfUEJFX2FsZ19hZGRfdHlwZShpbnQgcGJlX3R5cGUsIGludCBwYmVfbmlkLCBpbnQgY2lwaGVyX25pZCwgaW50IG1kX25pZCwKKwkJCSBFVlBfUEJFX0tFWUdFTiAqa2V5Z2VuKQorCXsKIAlFVlBfUEJFX0NUTCAqcGJlX3RtcDsKLQlpZiAoIXBiZV9hbGdzKSBwYmVfYWxncyA9IHNrX25ldyhwYmVfY21wKTsKLQlpZiAoIShwYmVfdG1wID0gKEVWUF9QQkVfQ1RMKikgT1BFTlNTTF9tYWxsb2MgKHNpemVvZihFVlBfUEJFX0NUTCkpKSkgewotCQlFVlBlcnIoRVZQX0ZfRVZQX1BCRV9BTEdfQURELEVSUl9SX01BTExPQ19GQUlMVVJFKTsKKwlpZiAoIXBiZV9hbGdzKQorCQlwYmVfYWxncyA9IHNrX0VWUF9QQkVfQ1RMX25ldyhwYmVfY21wKTsKKwlpZiAoIShwYmVfdG1wID0gKEVWUF9QQkVfQ1RMKikgT1BFTlNTTF9tYWxsb2MgKHNpemVvZihFVlBfUEJFX0NUTCkpKSkKKwkJeworCQlFVlBlcnIoRVZQX0ZfRVZQX1BCRV9BTEdfQUREX1RZUEUsRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwogCQlyZXR1cm4gMDsKLQl9Ci0JcGJlX3RtcC0+cGJlX25pZCA9IG5pZDsKLQlwYmVfdG1wLT5jaXBoZXIgPSBjaXBoZXI7Ci0JcGJlX3RtcC0+bWQgPSBtZDsKKwkJfQorCXBiZV90bXAtPnBiZV90eXBlID0gcGJlX3R5cGU7CisJcGJlX3RtcC0+cGJlX25pZCA9IHBiZV9uaWQ7CisJcGJlX3RtcC0+Y2lwaGVyX25pZCA9IGNpcGhlcl9uaWQ7CisJcGJlX3RtcC0+bWRfbmlkID0gbWRfbmlkOwogCXBiZV90bXAtPmtleWdlbiA9IGtleWdlbjsKLQlza19wdXNoIChwYmVfYWxncywgKGNoYXIgKilwYmVfdG1wKTsKKworCisJc2tfRVZQX1BCRV9DVExfcHVzaCAocGJlX2FsZ3MsIHBiZV90bXApOwogCXJldHVybiAxOwotfQorCX0KKworaW50IEVWUF9QQkVfYWxnX2FkZChpbnQgbmlkLCBjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIsIGNvbnN0IEVWUF9NRCAqbWQsCisJCSAgICBFVlBfUEJFX0tFWUdFTiAqa2V5Z2VuKQorCXsKKwlpbnQgY2lwaGVyX25pZCwgbWRfbmlkOworCWlmIChjaXBoZXIpCisJCWNpcGhlcl9uaWQgPSBFVlBfQ0lQSEVSX3R5cGUoY2lwaGVyKTsKKwllbHNlCisJCWNpcGhlcl9uaWQgPSAtMTsKKwlpZiAobWQpCisJCW1kX25pZCA9IEVWUF9NRF90eXBlKG1kKTsKKwllbHNlCisJCW1kX25pZCA9IC0xOworCisJcmV0dXJuIEVWUF9QQkVfYWxnX2FkZF90eXBlKEVWUF9QQkVfVFlQRV9PVVRFUiwgbmlkLAorCQkJCQljaXBoZXJfbmlkLCBtZF9uaWQsIGtleWdlbik7CisJfQorCitpbnQgRVZQX1BCRV9maW5kKGludCB0eXBlLCBpbnQgcGJlX25pZCwKKwkJIGludCAqcGNuaWQsIGludCAqcG1uaWQsIEVWUF9QQkVfS0VZR0VOICoqcGtleWdlbikKKwl7CisJRVZQX1BCRV9DVEwgKnBiZXRtcCA9IE5VTEwsIHBiZWx1OworCWludCBpOworCWlmIChwYmVfbmlkID09IE5JRF91bmRlZikKKwkJcmV0dXJuIDA7CisKKwlwYmVsdS5wYmVfdHlwZSA9IHR5cGU7CisJcGJlbHUucGJlX25pZCA9IHBiZV9uaWQ7CisKKwlpZiAocGJlX2FsZ3MpCisJCXsKKwkJaSA9IHNrX0VWUF9QQkVfQ1RMX2ZpbmQocGJlX2FsZ3MsICZwYmVsdSk7CisJCWlmIChpICE9IC0xKQorCQkJcGJldG1wID0gc2tfRVZQX1BCRV9DVExfdmFsdWUgKHBiZV9hbGdzLCBpKTsKKwkJfQorCWlmIChwYmV0bXAgPT0gTlVMTCkKKwkJeworCQlwYmV0bXAgPSBPQkpfYnNlYXJjaF9wYmUyKCZwYmVsdSwgYnVpbHRpbl9wYmUsCisJCQkJICAgICBzaXplb2YoYnVpbHRpbl9wYmUpL3NpemVvZihFVlBfUEJFX0NUTCkpOworCQl9CisJaWYgKHBiZXRtcCA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKwlpZiAocGNuaWQpCisJCSpwY25pZCA9IHBiZXRtcC0+Y2lwaGVyX25pZDsKKwlpZiAocG1uaWQpCisJCSpwbW5pZCA9IHBiZXRtcC0+bWRfbmlkOworCWlmIChwa2V5Z2VuKQorCQkqcGtleWdlbiA9IHBiZXRtcC0+a2V5Z2VuOworCXJldHVybiAxOworCX0KKworc3RhdGljIHZvaWQgZnJlZV9ldnBfcGJlX2N0bChFVlBfUEJFX0NUTCAqcGJlKQorCSB7CisJIE9QRU5TU0xfZnJlZUZ1bmMocGJlKTsKKwkgfQogCiB2b2lkIEVWUF9QQkVfY2xlYW51cCh2b2lkKQotewotCXNrX3BvcF9mcmVlKHBiZV9hbGdzLCBPUEVOU1NMX2ZyZWVGdW5jKTsKKwl7CisJc2tfRVZQX1BCRV9DVExfcG9wX2ZyZWUocGJlX2FsZ3MsIGZyZWVfZXZwX3BiZV9jdGwpOwogCXBiZV9hbGdzID0gTlVMTDsKLX0KKwl9CmRpZmYgLS1naXQgYS9jcnlwdG8vZXZwL2V2cF9wa2V5LmMgYi9jcnlwdG8vZXZwL2V2cF9wa2V5LmMKaW5kZXggMTBkOWU5ZS4uY2VlYmY2OSAxMDA2NDQKLS0tIGEvY3J5cHRvL2V2cC9ldnBfcGtleS5jCisrKyBiL2NyeXB0by9ldnAvZXZwX3BrZXkuYwpAQCAtMyw3ICszLDcgQEAKICAqIHByb2plY3QgMTk5OS4KICAqLwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoYykgMTk5OS0yMDAyIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYxLDI4NyArNjEsNTIgQEAKICNpbmNsdWRlICJjcnlwdGxpYi5oIgogI2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgogI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotI2lmbmRlZiBPUEVOU1NMX05PX1JTQQotI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0jZW5kaWYKLSNpZm5kZWYgT1BFTlNTTF9OT19EU0EKLSNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotCi0jaWZuZGVmIE9QRU5TU0xfTk9fRFNBCi1zdGF0aWMgaW50IGRzYV9wa2V5MnBrY3M4KFBLQ1M4X1BSSVZfS0VZX0lORk8gKnA4aW5mLCBFVlBfUEtFWSAqcGtleSk7Ci0jZW5kaWYKLSNpZm5kZWYgT1BFTlNTTF9OT19FQwotc3RhdGljIGludCBlY2tleV9wa2V5MnBrY3M4KFBLQ1M4X1BSSVZfS0VZX0lORk8gKnA4aW5mLCBFVlBfUEtFWSAqcGtleSk7Ci0jZW5kaWYKKyNpbmNsdWRlICJhc24xX2xvY2wuaCIKIAogLyogRXh0cmFjdCBhIHByaXZhdGUga2V5IGZyb20gYSBQS0NTOCBzdHJ1Y3R1cmUgKi8KIAogRVZQX1BLRVkgKkVWUF9QS0NTODJQS0VZKFBLQ1M4X1BSSVZfS0VZX0lORk8gKnA4KQogewogCUVWUF9QS0VZICpwa2V5ID0gTlVMTDsKLSNpZm5kZWYgT1BFTlNTTF9OT19SU0EKLQlSU0EgKnJzYSA9IE5VTEw7Ci0jZW5kaWYKLSNpZm5kZWYgT1BFTlNTTF9OT19EU0EKLQlEU0EgKmRzYSA9IE5VTEw7Ci0JQVNOMV9UWVBFICp0MSwgKnQyOwotCUFTTjFfSU5URUdFUiAqcHJpdmtleTsKLQlTVEFDS19PRihBU04xX1RZUEUpICpuZHNhID0gTlVMTDsKLSNlbmRpZgotI2lmbmRlZiBPUEVOU1NMX05PX0VDCi0JRUNfS0VZICplY2tleSA9IE5VTEw7Ci0JY29uc3QgdW5zaWduZWQgY2hhciAqcF90bXA7Ci0jZW5kaWYKLSNpZiAhZGVmaW5lZChPUEVOU1NMX05PX0RTQSkgfHwgIWRlZmluZWQoT1BFTlNTTF9OT19FQykKLQlBU04xX1RZUEUgICAgKnBhcmFtID0gTlVMTDsJCi0JQk5fQ1RYICpjdHggPSBOVUxMOwotCWludCBwbGVuOwotI2VuZGlmCi0JWDUwOV9BTEdPUiAqYTsKLQljb25zdCB1bnNpZ25lZCBjaGFyICpwOwotCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNwOwotCWludCBwa2V5bGVuOwotCWludCAgbmlkOworCUFTTjFfT0JKRUNUICphbGdvaWQ7CiAJY2hhciBvYmpfdG1wWzgwXTsKIAotCWlmKHA4LT5wa2V5LT50eXBlID09IFZfQVNOMV9PQ1RFVF9TVFJJTkcpIHsKLQkJcDgtPmJyb2tlbiA9IFBLQ1M4X09LOwotCQlwID0gcDgtPnBrZXktPnZhbHVlLm9jdGV0X3N0cmluZy0+ZGF0YTsKLQkJcGtleWxlbiA9IHA4LT5wa2V5LT52YWx1ZS5vY3RldF9zdHJpbmctPmxlbmd0aDsKLQl9IGVsc2UgewotCQlwOC0+YnJva2VuID0gUEtDUzhfTk9fT0NURVQ7Ci0JCXAgPSBwOC0+cGtleS0+dmFsdWUuc2VxdWVuY2UtPmRhdGE7Ci0JCXBrZXlsZW4gPSBwOC0+cGtleS0+dmFsdWUuc2VxdWVuY2UtPmxlbmd0aDsKLQl9CisJaWYgKCFQS0NTOF9wa2V5X2dldDAoJmFsZ29pZCwgTlVMTCwgTlVMTCwgTlVMTCwgcDgpKQorCQlyZXR1cm4gTlVMTDsKKwogCWlmICghKHBrZXkgPSBFVlBfUEtFWV9uZXcoKSkpIHsKIAkJRVZQZXJyKEVWUF9GX0VWUF9QS0NTODJQS0VZLEVSUl9SX01BTExPQ19GQUlMVVJFKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCWEgPSBwOC0+cGtleWFsZzsKLQluaWQgPSBPQkpfb2JqMm5pZChhLT5hbGdvcml0aG0pOwotCXN3aXRjaChuaWQpCi0JewotI2lmbmRlZiBPUEVOU1NMX05PX1JTQQotCQljYXNlIE5JRF9yc2FFbmNyeXB0aW9uOgotCQljcCA9IHA7Ci0JCWlmICghKHJzYSA9IGQyaV9SU0FQcml2YXRlS2V5IChOVUxMLCZjcCwgcGtleWxlbikpKSB7Ci0JCQlFVlBlcnIoRVZQX0ZfRVZQX1BLQ1M4MlBLRVksIEVWUF9SX0RFQ09ERV9FUlJPUik7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCQlFVlBfUEtFWV9hc3NpZ25fUlNBIChwa2V5LCByc2EpOwotCQlicmVhazsKLSNlbmRpZgotI2lmbmRlZiBPUEVOU1NMX05PX0RTQQotCQljYXNlIE5JRF9kc2E6Ci0JCS8qIFBLQ1MjOCBEU0EgaXMgd2VpcmQ6IHlvdSBqdXN0IGdldCBhIHByaXZhdGUga2V5IGludGVnZXIKLQkgICAgICAgICAqIGFuZCBwYXJhbWV0ZXJzIGluIHRoZSBBbGdvcml0aG1JZGVudGlmaWVyIHRoZSBwdWJrZXkgbXVzdAotCQkgKiBiZSByZWNhbGN1bGF0ZWQuCi0JCSAqLwotCQotCQkvKiBDaGVjayBmb3IgYnJva2VuIERTQSBQS0NTIzgsIFVHSCEgKi8KLQkJaWYoKnAgPT0gKFZfQVNOMV9TRVFVRU5DRXxWX0FTTjFfQ09OU1RSVUNURUQpKSB7Ci0JCSAgICBpZighKG5kc2EgPSBBU04xX3NlcV91bnBhY2tfQVNOMV9UWVBFKHAsIHBrZXlsZW4sIAotCQkJCQkJCSAgZDJpX0FTTjFfVFlQRSwKLQkJCQkJCQkgIEFTTjFfVFlQRV9mcmVlKSkpIHsKLQkJCUVWUGVycihFVlBfRl9FVlBfUEtDUzgyUEtFWSwgRVZQX1JfREVDT0RFX0VSUk9SKTsKLQkJCWdvdG8gZHNhZXJyOwotCQkgICAgfQotCQkgICAgaWYoc2tfQVNOMV9UWVBFX251bShuZHNhKSAhPSAyICkgewotCQkJRVZQZXJyKEVWUF9GX0VWUF9QS0NTODJQS0VZLCBFVlBfUl9ERUNPREVfRVJST1IpOwotCQkJZ290byBkc2FlcnI7Ci0JCSAgICB9Ci0JCSAgICAvKiBIYW5kbGUgVHdvIGJyb2tlbiB0eXBlczoKLQkJICAgICAqIFNFUVVFTkNFIHtwYXJhbWV0ZXJzLCBwcml2X2tleX0KLQkJICAgICAqIFNFUVVFTkNFIHtwdWJfa2V5LCBwcml2X2tleX0KLQkJICAgICAqLwogCi0JCSAgICB0MSA9IHNrX0FTTjFfVFlQRV92YWx1ZShuZHNhLCAwKTsKLQkJICAgIHQyID0gc2tfQVNOMV9UWVBFX3ZhbHVlKG5kc2EsIDEpOwotCQkgICAgaWYodDEtPnR5cGUgPT0gVl9BU04xX1NFUVVFTkNFKSB7Ci0JCQlwOC0+YnJva2VuID0gUEtDUzhfRU1CRURERURfUEFSQU07Ci0JCQlwYXJhbSA9IHQxOwotCQkgICAgfSBlbHNlIGlmKGEtPnBhcmFtZXRlci0+dHlwZSA9PSBWX0FTTjFfU0VRVUVOQ0UpIHsKLQkJCXA4LT5icm9rZW4gPSBQS0NTOF9OU19EQjsKLQkJCXBhcmFtID0gYS0+cGFyYW1ldGVyOwotCQkgICAgfSBlbHNlIHsKLQkJCUVWUGVycihFVlBfRl9FVlBfUEtDUzgyUEtFWSwgRVZQX1JfREVDT0RFX0VSUk9SKTsKLQkJCWdvdG8gZHNhZXJyOwotCQkgICAgfQotCi0JCSAgICBpZih0Mi0+dHlwZSAhPSBWX0FTTjFfSU5URUdFUikgewotCQkJRVZQZXJyKEVWUF9GX0VWUF9QS0NTODJQS0VZLCBFVlBfUl9ERUNPREVfRVJST1IpOwotCQkJZ290byBkc2FlcnI7Ci0JCSAgICB9Ci0JCSAgICBwcml2a2V5ID0gdDItPnZhbHVlLmludGVnZXI7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoIShwcml2a2V5PWQyaV9BU04xX0lOVEVHRVIgKE5VTEwsICZwLCBwa2V5bGVuKSkpIHsKLQkJCQlFVlBlcnIoRVZQX0ZfRVZQX1BLQ1M4MlBLRVksIEVWUF9SX0RFQ09ERV9FUlJPUik7Ci0JCQkJZ290byBkc2FlcnI7Ci0JCQl9Ci0JCQlwYXJhbSA9IHA4LT5wa2V5YWxnLT5wYXJhbWV0ZXI7Ci0JCX0KLQkJaWYgKCFwYXJhbSB8fCAocGFyYW0tPnR5cGUgIT0gVl9BU04xX1NFUVVFTkNFKSkgewotCQkJRVZQZXJyKEVWUF9GX0VWUF9QS0NTODJQS0VZLCBFVlBfUl9ERUNPREVfRVJST1IpOwotCQkJZ290byBkc2FlcnI7Ci0JCX0KLQkJY3AgPSBwID0gcGFyYW0tPnZhbHVlLnNlcXVlbmNlLT5kYXRhOwotCQlwbGVuID0gcGFyYW0tPnZhbHVlLnNlcXVlbmNlLT5sZW5ndGg7Ci0JCWlmICghKGRzYSA9IGQyaV9EU0FwYXJhbXMgKE5VTEwsICZjcCwgcGxlbikpKSB7Ci0JCQlFVlBlcnIoRVZQX0ZfRVZQX1BLQ1M4MlBLRVksIEVWUF9SX0RFQ09ERV9FUlJPUik7Ci0JCQlnb3RvIGRzYWVycjsKLQkJfQotCQkvKiBXZSBoYXZlIHBhcmFtZXRlcnMgbm93IHNldCBwcml2YXRlIGtleSAqLwotCQlpZiAoIShkc2EtPnByaXZfa2V5ID0gQVNOMV9JTlRFR0VSX3RvX0JOKHByaXZrZXksIE5VTEwpKSkgewotCQkJRVZQZXJyKEVWUF9GX0VWUF9QS0NTODJQS0VZLEVWUF9SX0JOX0RFQ09ERV9FUlJPUik7Ci0JCQlnb3RvIGRzYWVycjsKLQkJfQotCQkvKiBDYWxjdWxhdGUgcHVibGljIGtleSAob3VjaCEpICovCi0JCWlmICghKGRzYS0+cHViX2tleSA9IEJOX25ldygpKSkgewotCQkJRVZQZXJyKEVWUF9GX0VWUF9QS0NTODJQS0VZLEVSUl9SX01BTExPQ19GQUlMVVJFKTsKLQkJCWdvdG8gZHNhZXJyOwotCQl9Ci0JCWlmICghKGN0eCA9IEJOX0NUWF9uZXcoKSkpIHsKLQkJCUVWUGVycihFVlBfRl9FVlBfUEtDUzgyUEtFWSxFUlJfUl9NQUxMT0NfRkFJTFVSRSk7Ci0JCQlnb3RvIGRzYWVycjsKLQkJfQotCQkJCi0JCWlmICghQk5fbW9kX2V4cChkc2EtPnB1Yl9rZXksIGRzYS0+ZywKLQkJCQkJCSBkc2EtPnByaXZfa2V5LCBkc2EtPnAsIGN0eCkpIHsKLQkJCQotCQkJRVZQZXJyKEVWUF9GX0VWUF9QS0NTODJQS0VZLEVWUF9SX0JOX1BVQktFWV9FUlJPUik7Ci0JCQlnb3RvIGRzYWVycjsKLQkJfQotCi0JCUVWUF9QS0VZX2Fzc2lnbl9EU0EocGtleSwgZHNhKTsKLQkJQk5fQ1RYX2ZyZWUgKGN0eCk7Ci0JCWlmKG5kc2EpIHNrX0FTTjFfVFlQRV9wb3BfZnJlZShuZHNhLCBBU04xX1RZUEVfZnJlZSk7Ci0JCWVsc2UgQVNOMV9JTlRFR0VSX2ZyZWUocHJpdmtleSk7Ci0JCWJyZWFrOwotCQlkc2FlcnI6Ci0JCUJOX0NUWF9mcmVlIChjdHgpOwotCQlza19BU04xX1RZUEVfcG9wX2ZyZWUobmRzYSwgQVNOMV9UWVBFX2ZyZWUpOwotCQlEU0FfZnJlZShkc2EpOwotCQlFVlBfUEtFWV9mcmVlKHBrZXkpOwotCQlyZXR1cm4gTlVMTDsKLQkJYnJlYWs7Ci0jZW5kaWYKLSNpZm5kZWYgT1BFTlNTTF9OT19FQwotCQljYXNlIE5JRF9YOV82Ml9pZF9lY1B1YmxpY0tleToKLQkJcF90bXAgPSBwOwotCQkvKiBleHRyYWN0IHRoZSBlYyBwYXJhbWV0ZXJzICovCi0JCXBhcmFtID0gcDgtPnBrZXlhbGctPnBhcmFtZXRlcjsKLQotCQlpZiAoIXBhcmFtIHx8ICgocGFyYW0tPnR5cGUgIT0gVl9BU04xX1NFUVVFTkNFKSAmJgotCQkgICAgKHBhcmFtLT50eXBlICE9IFZfQVNOMV9PQkpFQ1QpKSkKKwlpZiAoIUVWUF9QS0VZX3NldF90eXBlKHBrZXksIE9CSl9vYmoybmlkKGFsZ29pZCkpKQogCQl7Ci0JCQlFVlBlcnIoRVZQX0ZfRVZQX1BLQ1M4MlBLRVksIEVWUF9SX0RFQ09ERV9FUlJPUik7Ci0JCQlnb3RvIGVjZXJyOwotCQl9Ci0KLQkJaWYgKHBhcmFtLT50eXBlID09IFZfQVNOMV9TRVFVRU5DRSkKLQkJewotCQkJY3AgPSBwID0gcGFyYW0tPnZhbHVlLnNlcXVlbmNlLT5kYXRhOwotCQkJcGxlbiA9IHBhcmFtLT52YWx1ZS5zZXF1ZW5jZS0+bGVuZ3RoOwotCi0JCQlpZiAoIShlY2tleSA9IGQyaV9FQ1BhcmFtZXRlcnMoTlVMTCwgJmNwLCBwbGVuKSkpCi0JCQl7Ci0JCQkJRVZQZXJyKEVWUF9GX0VWUF9QS0NTODJQS0VZLAotCQkJCQlFVlBfUl9ERUNPREVfRVJST1IpOwotCQkJCWdvdG8gZWNlcnI7Ci0JCQl9Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlFQ19HUk9VUCAqZ3JvdXA7Ci0JCQljcCA9IHAgPSBwYXJhbS0+dmFsdWUub2JqZWN0LT5kYXRhOwotCQkJcGxlbiA9IHBhcmFtLT52YWx1ZS5vYmplY3QtPmxlbmd0aDsKLQotCQkJLyogdHlwZSA9PSBWX0FTTjFfT0JKRUNUID0+IHRoZSBwYXJhbWV0ZXJzIGFyZSBnaXZlbgotCQkJICogYnkgYW4gYXNuMSBPSUQKLQkJCSAqLwotCQkJaWYgKChlY2tleSA9IEVDX0tFWV9uZXcoKSkgPT0gTlVMTCkKLQkJCXsKLQkJCQlFVlBlcnIoRVZQX0ZfRVZQX1BLQ1M4MlBLRVksCi0JCQkJCUVSUl9SX01BTExPQ19GQUlMVVJFKTsKLQkJCQlnb3RvIGVjZXJyOwotCQkJfQotCQkJZ3JvdXAgPSBFQ19HUk9VUF9uZXdfYnlfY3VydmVfbmFtZShPQkpfb2JqMm5pZChhLT5wYXJhbWV0ZXItPnZhbHVlLm9iamVjdCkpOwotCQkJaWYgKGdyb3VwID09IE5VTEwpCi0JCQkJZ290byBlY2VycjsKLQkJCUVDX0dST1VQX3NldF9hc24xX2ZsYWcoZ3JvdXAsIE9QRU5TU0xfRUNfTkFNRURfQ1VSVkUpOwotCQkJaWYgKEVDX0tFWV9zZXRfZ3JvdXAoZWNrZXksIGdyb3VwKSA9PSAwKQotCQkJCWdvdG8gZWNlcnI7Ci0JCQlFQ19HUk9VUF9mcmVlKGdyb3VwKTsKLQkJfQotCi0JCS8qIFdlIGhhdmUgcGFyYW1ldGVycyBub3cgc2V0IHByaXZhdGUga2V5ICovCi0JCWlmICghZDJpX0VDUHJpdmF0ZUtleSgmZWNrZXksICZwX3RtcCwgcGtleWxlbikpCi0JCXsKLQkJCUVWUGVycihFVlBfRl9FVlBfUEtDUzgyUEtFWSwgRVZQX1JfREVDT0RFX0VSUk9SKTsKLQkJCWdvdG8gZWNlcnI7Ci0JCX0KLQotCQkvKiBjYWxjdWxhdGUgcHVibGljIGtleSAoaWYgbmVjZXNzYXJ5KSAqLwotCQlpZiAoRUNfS0VZX2dldDBfcHVibGljX2tleShlY2tleSkgPT0gTlVMTCkKLQkJewotCQkJY29uc3QgQklHTlVNICpwcml2X2tleTsKLQkJCWNvbnN0IEVDX0dST1VQICpncm91cDsKLQkJCUVDX1BPSU5UICpwdWJfa2V5OwotCQkJLyogdGhlIHB1YmxpYyBrZXkgd2FzIG5vdCBpbmNsdWRlZCBpbiB0aGUgU0VDMSBwcml2YXRlCi0JCQkgKiBrZXkgPT4gY2FsY3VsYXRlIHRoZSBwdWJsaWMga2V5ICovCi0JCQlncm91cCAgID0gRUNfS0VZX2dldDBfZ3JvdXAoZWNrZXkpOwotCQkJcHViX2tleSA9IEVDX1BPSU5UX25ldyhncm91cCk7Ci0JCQlpZiAocHViX2tleSA9PSBOVUxMKQotCQkJewotCQkJCUVWUGVycihFVlBfRl9FVlBfUEtDUzgyUEtFWSwgRVJSX1JfRUNfTElCKTsKLQkJCQlnb3RvIGVjZXJyOwotCQkJfQotCQkJaWYgKCFFQ19QT0lOVF9jb3B5KHB1Yl9rZXksIEVDX0dST1VQX2dldDBfZ2VuZXJhdG9yKGdyb3VwKSkpCi0JCQl7Ci0JCQkJRUNfUE9JTlRfZnJlZShwdWJfa2V5KTsKLQkJCQlFVlBlcnIoRVZQX0ZfRVZQX1BLQ1M4MlBLRVksIEVSUl9SX0VDX0xJQik7Ci0JCQkJZ290byBlY2VycjsKLQkJCX0KLQkJCXByaXZfa2V5ID0gRUNfS0VZX2dldDBfcHJpdmF0ZV9rZXkoZWNrZXkpOwotCQkJaWYgKCFFQ19QT0lOVF9tdWwoZ3JvdXAsIHB1Yl9rZXksIHByaXZfa2V5LCBOVUxMLCBOVUxMLCBjdHgpKQotCQkJewotCQkJCUVDX1BPSU5UX2ZyZWUocHViX2tleSk7Ci0JCQkJRVZQZXJyKEVWUF9GX0VWUF9QS0NTODJQS0VZLCBFUlJfUl9FQ19MSUIpOwotCQkJCWdvdG8gZWNlcnI7Ci0JCQl9Ci0JCQlpZiAoRUNfS0VZX3NldF9wdWJsaWNfa2V5KGVja2V5LCBwdWJfa2V5KSA9PSAwKQotCQkJewotCQkJCUVDX1BPSU5UX2ZyZWUocHViX2tleSk7Ci0JCQkJRVZQZXJyKEVWUF9GX0VWUF9QS0NTODJQS0VZLCBFUlJfUl9FQ19MSUIpOwotCQkJCWdvdG8gZWNlcnI7Ci0JCQl9Ci0JCQlFQ19QT0lOVF9mcmVlKHB1Yl9rZXkpOwotCQl9Ci0KLQkJRVZQX1BLRVlfYXNzaWduX0VDX0tFWShwa2V5LCBlY2tleSk7Ci0JCWlmIChjdHgpCi0JCQlCTl9DVFhfZnJlZShjdHgpOwotCQlicmVhazsKLWVjZXJyOgotCQlpZiAoY3R4KQotCQkJQk5fQ1RYX2ZyZWUoY3R4KTsKLQkJaWYgKGVja2V5KQotCQkJRUNfS0VZX2ZyZWUoZWNrZXkpOwotCQlpZiAocGtleSkKLQkJCUVWUF9QS0VZX2ZyZWUocGtleSk7Ci0JCXJldHVybiBOVUxMOwotI2VuZGlmCi0JCWRlZmF1bHQ6CiAJCUVWUGVycihFVlBfRl9FVlBfUEtDUzgyUEtFWSwgRVZQX1JfVU5TVVBQT1JURURfUFJJVkFURV9LRVlfQUxHT1JJVEhNKTsKLQkJaWYgKCFhLT5hbGdvcml0aG0pIEJVRl9zdHJsY3B5IChvYmpfdG1wLCAiTlVMTCIsIHNpemVvZiBvYmpfdG1wKTsKLQkJZWxzZSBpMnRfQVNOMV9PQkpFQ1Qob2JqX3RtcCwgODAsIGEtPmFsZ29yaXRobSk7CisJCWkydF9BU04xX09CSkVDVChvYmpfdG1wLCA4MCwgYWxnb2lkKTsKIAkJRVJSX2FkZF9lcnJvcl9kYXRhKDIsICJUWVBFPSIsIG9ial90bXApOwotCQlFVlBfUEtFWV9mcmVlIChwa2V5KTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQorCQlnb3RvIGVycm9yOworCQl9CisKKwlpZiAocGtleS0+YW1ldGgtPnByaXZfZGVjb2RlKQorCQl7CisJCWlmICghcGtleS0+YW1ldGgtPnByaXZfZGVjb2RlKHBrZXksIHA4KSkKKwkJCXsKKwkJCUVWUGVycihFVlBfRl9FVlBfUEtDUzgyUEtFWSwKKwkJCQkJRVZQX1JfUFJJVkFURV9LRVlfREVDT0RFX0VSUk9SKTsKKwkJCWdvdG8gZXJyb3I7CisJCQl9CisJCX0KKwllbHNlCisJCXsKKwkJRVZQZXJyKEVWUF9GX0VWUF9QS0NTODJQS0VZLCBFVlBfUl9NRVRIT0RfTk9UX1NVUFBPUlRFRCk7CisJCWdvdG8gZXJyb3I7CisJCX0KKwogCXJldHVybiBwa2V5OworCisJZXJyb3I6CisJRVZQX1BLRVlfZnJlZSAocGtleSk7CisJcmV0dXJuIE5VTEw7CiB9CiAKIFBLQ1M4X1BSSVZfS0VZX0lORk8gKkVWUF9QS0VZMlBLQ1M4KEVWUF9QS0VZICpwa2V5KQpAQCAtMzYwLDU5ICsxMjUsMzcgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCXA4LT5icm9rZW4gPSBicm9rZW47Ci0JaWYgKCFBU04xX0lOVEVHRVJfc2V0KHA4LT52ZXJzaW9uLCAwKSkgewotCQlFVlBlcnIoRVZQX0ZfRVZQX1BLRVkyUEtDUzhfQlJPS0VOLEVSUl9SX01BTExPQ19GQUlMVVJFKTsKLQkJUEtDUzhfUFJJVl9LRVlfSU5GT19mcmVlIChwOCk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQlpZiAoIShwOC0+cGtleWFsZy0+cGFyYW1ldGVyID0gQVNOMV9UWVBFX25ldyAoKSkpIHsKLQkJRVZQZXJyKEVWUF9GX0VWUF9QS0VZMlBLQ1M4X0JST0tFTixFUlJfUl9NQUxMT0NfRkFJTFVSRSk7Ci0JCVBLQ1M4X1BSSVZfS0VZX0lORk9fZnJlZSAocDgpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JcDgtPnBrZXktPnR5cGUgPSBWX0FTTjFfT0NURVRfU1RSSU5HOwotCXN3aXRjaCAoRVZQX1BLRVlfdHlwZShwa2V5LT50eXBlKSkgewotI2lmbmRlZiBPUEVOU1NMX05PX1JTQQotCQljYXNlIEVWUF9QS0VZX1JTQToKIAotCQlpZihwOC0+YnJva2VuID09IFBLQ1M4X05PX09DVEVUKSBwOC0+cGtleS0+dHlwZSA9IFZfQVNOMV9TRVFVRU5DRTsKLQotCQlwOC0+cGtleWFsZy0+YWxnb3JpdGhtID0gT0JKX25pZDJvYmooTklEX3JzYUVuY3J5cHRpb24pOwotCQlwOC0+cGtleWFsZy0+cGFyYW1ldGVyLT50eXBlID0gVl9BU04xX05VTEw7Ci0JCWlmICghQVNOMV9wYWNrX3N0cmluZ19vZiAoRVZQX1BLRVkscGtleSwgaTJkX1ByaXZhdGVLZXksCi0JCQkJCSAmcDgtPnBrZXktPnZhbHVlLm9jdGV0X3N0cmluZykpIHsKLQkJCUVWUGVycihFVlBfRl9FVlBfUEtFWTJQS0NTOF9CUk9LRU4sRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwotCQkJUEtDUzhfUFJJVl9LRVlfSU5GT19mcmVlIChwOCk7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCQlicmVhazsKLSNlbmRpZgotI2lmbmRlZiBPUEVOU1NMX05PX0RTQQotCQljYXNlIEVWUF9QS0VZX0RTQToKLQkJaWYoIWRzYV9wa2V5MnBrY3M4KHA4LCBwa2V5KSkgewotCQkJUEtDUzhfUFJJVl9LRVlfSU5GT19mcmVlIChwOCk7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCi0JCWJyZWFrOwotI2VuZGlmCi0jaWZuZGVmIE9QRU5TU0xfTk9fRUMKLQkJY2FzZSBFVlBfUEtFWV9FQzoKLQkJaWYgKCFlY2tleV9wa2V5MnBrY3M4KHA4LCBwa2V5KSkKKwlpZiAocGtleS0+YW1ldGgpCiAJCXsKLQkJCVBLQ1M4X1BSSVZfS0VZX0lORk9fZnJlZShwOCk7Ci0JCQlyZXR1cm4oTlVMTCk7CisJCWlmIChwa2V5LT5hbWV0aC0+cHJpdl9lbmNvZGUpCisJCQl7CisJCQlpZiAoIXBrZXktPmFtZXRoLT5wcml2X2VuY29kZShwOCwgcGtleSkpCisJCQkJeworCQkJCUVWUGVycihFVlBfRl9FVlBfUEtFWTJQS0NTOF9CUk9LRU4sCisJCQkJCUVWUF9SX1BSSVZBVEVfS0VZX0VOQ09ERV9FUlJPUik7CisJCQkJZ290byBlcnJvcjsKKwkJCQl9CisJCQl9CisJCWVsc2UKKwkJCXsKKwkJCUVWUGVycihFVlBfRl9FVlBfUEtFWTJQS0NTOF9CUk9LRU4sCisJCQkJCUVWUF9SX01FVEhPRF9OT1RfU1VQUE9SVEVEKTsKKwkJCWdvdG8gZXJyb3I7CisJCQl9CiAJCX0KLQkJYnJlYWs7Ci0jZW5kaWYKLQkJZGVmYXVsdDoKLQkJRVZQZXJyKEVWUF9GX0VWUF9QS0VZMlBLQ1M4X0JST0tFTiwgRVZQX1JfVU5TVVBQT1JURURfUFJJVkFURV9LRVlfQUxHT1JJVEhNKTsKLQkJUEtDUzhfUFJJVl9LRVlfSU5GT19mcmVlIChwOCk7Ci0JCXJldHVybiBOVUxMOwotCX0KKwllbHNlCisJCXsKKwkJRVZQZXJyKEVWUF9GX0VWUF9QS0VZMlBLQ1M4X0JST0tFTiwKKwkJCQlFVlBfUl9VTlNVUFBPUlRFRF9QUklWQVRFX0tFWV9BTEdPUklUSE0pOworCQlnb3RvIGVycm9yOworCQl9CiAJUkFORF9hZGQocDgtPnBrZXktPnZhbHVlLm9jdGV0X3N0cmluZy0+ZGF0YSwKIAkJIHA4LT5wa2V5LT52YWx1ZS5vY3RldF9zdHJpbmctPmxlbmd0aCwgMC4wKTsKIAlyZXR1cm4gcDg7CisJZXJyb3I6CisJUEtDUzhfUFJJVl9LRVlfSU5GT19mcmVlKHA4KTsKKwlyZXR1cm4gTlVMTDsKIH0KIAogUEtDUzhfUFJJVl9LRVlfSU5GTyAqUEtDUzhfc2V0X2Jyb2tlbihQS0NTOF9QUklWX0tFWV9JTkZPICpwOCwgaW50IGJyb2tlbikKQEAgLTQzNiwzMDEgKzE3OSw2IEBACiAJfQogfQogCi0jaWZuZGVmIE9QRU5TU0xfTk9fRFNBCi1zdGF0aWMgaW50IGRzYV9wa2V5MnBrY3M4KFBLQ1M4X1BSSVZfS0VZX0lORk8gKnA4LCBFVlBfUEtFWSAqcGtleSkKLXsKLQlBU04xX1NUUklORyAqcGFyYW1zID0gTlVMTDsKLQlBU04xX0lOVEVHRVIgKnBya2V5ID0gTlVMTDsKLQlBU04xX1RZUEUgKnR0bXAgPSBOVUxMOwotCVNUQUNLX09GKEFTTjFfVFlQRSkgKm5kc2EgPSBOVUxMOwotCXVuc2lnbmVkIGNoYXIgKnAgPSBOVUxMLCAqcTsKLQlpbnQgbGVuOwotCi0JcDgtPnBrZXlhbGctPmFsZ29yaXRobSA9IE9CSl9uaWQyb2JqKE5JRF9kc2EpOwotCWxlbiA9IGkyZF9EU0FwYXJhbXMgKHBrZXktPnBrZXkuZHNhLCBOVUxMKTsKLQlpZiAoIShwID0gT1BFTlNTTF9tYWxsb2MobGVuKSkpIHsKLQkJRVZQZXJyKEVWUF9GX0RTQV9QS0VZMlBLQ1M4LEVSUl9SX01BTExPQ19GQUlMVVJFKTsKLQkJZ290byBlcnI7Ci0JfQotCXEgPSBwOwotCWkyZF9EU0FwYXJhbXMgKHBrZXktPnBrZXkuZHNhLCAmcSk7Ci0JaWYgKCEocGFyYW1zID0gQVNOMV9TVFJJTkdfbmV3KCkpKSB7Ci0JCUVWUGVycihFVlBfRl9EU0FfUEtFWTJQS0NTOCxFUlJfUl9NQUxMT0NfRkFJTFVSRSk7Ci0JCWdvdG8gZXJyOwotCX0KLQlpZiAoIUFTTjFfU1RSSU5HX3NldChwYXJhbXMsIHAsIGxlbikpIHsKLQkJRVZQZXJyKEVWUF9GX0RTQV9QS0VZMlBLQ1M4LEVSUl9SX01BTExPQ19GQUlMVVJFKTsKLQkJZ290byBlcnI7Ci0JfQotCU9QRU5TU0xfZnJlZShwKTsKLQlwID0gTlVMTDsKLQkvKiBHZXQgcHJpdmF0ZSBrZXkgaW50byBpbnRlZ2VyICovCi0JaWYgKCEocHJrZXkgPSBCTl90b19BU04xX0lOVEVHRVIgKHBrZXktPnBrZXkuZHNhLT5wcml2X2tleSwgTlVMTCkpKSB7Ci0JCUVWUGVycihFVlBfRl9EU0FfUEtFWTJQS0NTOCxFVlBfUl9FTkNPREVfRVJST1IpOwotCQlnb3RvIGVycjsKLQl9Ci0KLQlzd2l0Y2gocDgtPmJyb2tlbikgewotCi0JCWNhc2UgUEtDUzhfT0s6Ci0JCWNhc2UgUEtDUzhfTk9fT0NURVQ6Ci0KLQkJaWYgKCFBU04xX3BhY2tfc3RyaW5nX29mKEFTTjFfSU5URUdFUixwcmtleSwgaTJkX0FTTjFfSU5URUdFUiwKLQkJCQkJICZwOC0+cGtleS0+dmFsdWUub2N0ZXRfc3RyaW5nKSkgewotCQkJRVZQZXJyKEVWUF9GX0RTQV9QS0VZMlBLQ1M4LEVSUl9SX01BTExPQ19GQUlMVVJFKTsKLQkJCWdvdG8gZXJyOwotCQl9Ci0KLQkJTV9BU04xX0lOVEVHRVJfZnJlZSAocHJrZXkpOwotCQlwcmtleSA9IE5VTEw7Ci0JCXA4LT5wa2V5YWxnLT5wYXJhbWV0ZXItPnZhbHVlLnNlcXVlbmNlID0gcGFyYW1zOwotCQlwYXJhbXMgPSBOVUxMOwotCQlwOC0+cGtleWFsZy0+cGFyYW1ldGVyLT50eXBlID0gVl9BU04xX1NFUVVFTkNFOwotCi0JCWJyZWFrOwotCi0JCWNhc2UgUEtDUzhfTlNfREI6Ci0KLQkJcDgtPnBrZXlhbGctPnBhcmFtZXRlci0+dmFsdWUuc2VxdWVuY2UgPSBwYXJhbXM7Ci0JCXBhcmFtcyA9IE5VTEw7Ci0JCXA4LT5wa2V5YWxnLT5wYXJhbWV0ZXItPnR5cGUgPSBWX0FTTjFfU0VRVUVOQ0U7Ci0JCWlmICghKG5kc2EgPSBza19BU04xX1RZUEVfbmV3X251bGwoKSkpIHsKLQkJCUVWUGVycihFVlBfRl9EU0FfUEtFWTJQS0NTOCxFUlJfUl9NQUxMT0NfRkFJTFVSRSk7Ci0JCQlnb3RvIGVycjsKLQkJfQotCQlpZiAoISh0dG1wID0gQVNOMV9UWVBFX25ldygpKSkgewotCQkJRVZQZXJyKEVWUF9GX0RTQV9QS0VZMlBLQ1M4LEVSUl9SX01BTExPQ19GQUlMVVJFKTsKLQkJCWdvdG8gZXJyOwotCQl9Ci0JCWlmICghKHR0bXAtPnZhbHVlLmludGVnZXIgPQotCQkJQk5fdG9fQVNOMV9JTlRFR0VSKHBrZXktPnBrZXkuZHNhLT5wdWJfa2V5LCBOVUxMKSkpIHsKLQkJCUVWUGVycihFVlBfRl9EU0FfUEtFWTJQS0NTOCxFVlBfUl9FTkNPREVfRVJST1IpOwotCQkJZ290byBlcnI7Ci0JCX0KLQkJdHRtcC0+dHlwZSA9IFZfQVNOMV9JTlRFR0VSOwotCQlpZiAoIXNrX0FTTjFfVFlQRV9wdXNoKG5kc2EsIHR0bXApKSB7Ci0JCQlFVlBlcnIoRVZQX0ZfRFNBX1BLRVkyUEtDUzgsRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwotCQkJZ290byBlcnI7Ci0JCX0KLQotCQlpZiAoISh0dG1wID0gQVNOMV9UWVBFX25ldygpKSkgewotCQkJRVZQZXJyKEVWUF9GX0RTQV9QS0VZMlBLQ1M4LEVSUl9SX01BTExPQ19GQUlMVVJFKTsKLQkJCWdvdG8gZXJyOwotCQl9Ci0JCXR0bXAtPnZhbHVlLmludGVnZXIgPSBwcmtleTsKLQkJcHJrZXkgPSBOVUxMOwotCQl0dG1wLT50eXBlID0gVl9BU04xX0lOVEVHRVI7Ci0JCWlmICghc2tfQVNOMV9UWVBFX3B1c2gobmRzYSwgdHRtcCkpIHsKLQkJCUVWUGVycihFVlBfRl9EU0FfUEtFWTJQS0NTOCxFUlJfUl9NQUxMT0NfRkFJTFVSRSk7Ci0JCQlnb3RvIGVycjsKLQkJfQotCQl0dG1wID0gTlVMTDsKLQotCQlpZiAoIShwOC0+cGtleS0+dmFsdWUub2N0ZXRfc3RyaW5nID0gQVNOMV9PQ1RFVF9TVFJJTkdfbmV3KCkpKSB7Ci0JCQlFVlBlcnIoRVZQX0ZfRFNBX1BLRVkyUEtDUzgsRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwotCQkJZ290byBlcnI7Ci0JCX0KLQotCQlpZiAoIUFTTjFfc2VxX3BhY2tfQVNOMV9UWVBFKG5kc2EsIGkyZF9BU04xX1RZUEUsCi0JCQkJCSAmcDgtPnBrZXktPnZhbHVlLm9jdGV0X3N0cmluZy0+ZGF0YSwKLQkJCQkJICZwOC0+cGtleS0+dmFsdWUub2N0ZXRfc3RyaW5nLT5sZW5ndGgpKSB7Ci0KLQkJCUVWUGVycihFVlBfRl9EU0FfUEtFWTJQS0NTOCxFUlJfUl9NQUxMT0NfRkFJTFVSRSk7Ci0JCQlnb3RvIGVycjsKLQkJfQotCQlza19BU04xX1RZUEVfcG9wX2ZyZWUobmRzYSwgQVNOMV9UWVBFX2ZyZWUpOwotCQlicmVhazsKLQotCQljYXNlIFBLQ1M4X0VNQkVEREVEX1BBUkFNOgotCi0JCXA4LT5wa2V5YWxnLT5wYXJhbWV0ZXItPnR5cGUgPSBWX0FTTjFfTlVMTDsKLQkJaWYgKCEobmRzYSA9IHNrX0FTTjFfVFlQRV9uZXdfbnVsbCgpKSkgewotCQkJRVZQZXJyKEVWUF9GX0RTQV9QS0VZMlBLQ1M4LEVSUl9SX01BTExPQ19GQUlMVVJFKTsKLQkJCWdvdG8gZXJyOwotCQl9Ci0JCWlmICghKHR0bXAgPSBBU04xX1RZUEVfbmV3KCkpKSB7Ci0JCQlFVlBlcnIoRVZQX0ZfRFNBX1BLRVkyUEtDUzgsRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwotCQkJZ290byBlcnI7Ci0JCX0KLQkJdHRtcC0+dmFsdWUuc2VxdWVuY2UgPSBwYXJhbXM7Ci0JCXBhcmFtcyA9IE5VTEw7Ci0JCXR0bXAtPnR5cGUgPSBWX0FTTjFfU0VRVUVOQ0U7Ci0JCWlmICghc2tfQVNOMV9UWVBFX3B1c2gobmRzYSwgdHRtcCkpIHsKLQkJCUVWUGVycihFVlBfRl9EU0FfUEtFWTJQS0NTOCxFUlJfUl9NQUxMT0NfRkFJTFVSRSk7Ci0JCQlnb3RvIGVycjsKLQkJfQotCi0JCWlmICghKHR0bXAgPSBBU04xX1RZUEVfbmV3KCkpKSB7Ci0JCQlFVlBlcnIoRVZQX0ZfRFNBX1BLRVkyUEtDUzgsRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwotCQkJZ290byBlcnI7Ci0JCX0KLQkJdHRtcC0+dmFsdWUuaW50ZWdlciA9IHBya2V5OwotCQlwcmtleSA9IE5VTEw7Ci0JCXR0bXAtPnR5cGUgPSBWX0FTTjFfSU5URUdFUjsKLQkJaWYgKCFza19BU04xX1RZUEVfcHVzaChuZHNhLCB0dG1wKSkgewotCQkJRVZQZXJyKEVWUF9GX0RTQV9QS0VZMlBLQ1M4LEVSUl9SX01BTExPQ19GQUlMVVJFKTsKLQkJCWdvdG8gZXJyOwotCQl9Ci0JCXR0bXAgPSBOVUxMOwotCi0JCWlmICghKHA4LT5wa2V5LT52YWx1ZS5vY3RldF9zdHJpbmcgPSBBU04xX09DVEVUX1NUUklOR19uZXcoKSkpIHsKLQkJCUVWUGVycihFVlBfRl9EU0FfUEtFWTJQS0NTOCxFUlJfUl9NQUxMT0NfRkFJTFVSRSk7Ci0JCQlnb3RvIGVycjsKLQkJfQotCi0JCWlmICghQVNOMV9zZXFfcGFja19BU04xX1RZUEUobmRzYSwgaTJkX0FTTjFfVFlQRSwKLQkJCQkJICZwOC0+cGtleS0+dmFsdWUub2N0ZXRfc3RyaW5nLT5kYXRhLAotCQkJCQkgJnA4LT5wa2V5LT52YWx1ZS5vY3RldF9zdHJpbmctPmxlbmd0aCkpIHsKLQotCQkJRVZQZXJyKEVWUF9GX0RTQV9QS0VZMlBLQ1M4LEVSUl9SX01BTExPQ19GQUlMVVJFKTsKLQkJCWdvdG8gZXJyOwotCQl9Ci0JCXNrX0FTTjFfVFlQRV9wb3BfZnJlZShuZHNhLCBBU04xX1RZUEVfZnJlZSk7Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gMTsKLWVycjoKLQlpZiAocCAhPSBOVUxMKSBPUEVOU1NMX2ZyZWUocCk7Ci0JaWYgKHBhcmFtcyAhPSBOVUxMKSBBU04xX1NUUklOR19mcmVlKHBhcmFtcyk7Ci0JaWYgKHBya2V5ICE9IE5VTEwpIE1fQVNOMV9JTlRFR0VSX2ZyZWUocHJrZXkpOwotCWlmICh0dG1wICE9IE5VTEwpIEFTTjFfVFlQRV9mcmVlKHR0bXApOwotCWlmIChuZHNhICE9IE5VTEwpIHNrX0FTTjFfVFlQRV9wb3BfZnJlZShuZHNhLCBBU04xX1RZUEVfZnJlZSk7Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotI2lmbmRlZiBPUEVOU1NMX05PX0VDCi1zdGF0aWMgaW50IGVja2V5X3BrZXkycGtjczgoUEtDUzhfUFJJVl9LRVlfSU5GTyAqcDgsIEVWUF9QS0VZICpwa2V5KQotewotCUVDX0tFWQkJKmVjX2tleTsKLQljb25zdCBFQ19HUk9VUCAgKmdyb3VwOwotCXVuc2lnbmVkIGNoYXIJKnAsICpwcDsKLQlpbnQgCQluaWQsIGksIHJldCA9IDA7Ci0JdW5zaWduZWQgaW50ICAgIHRtcF9mbGFncywgb2xkX2ZsYWdzOwotCi0JZWNfa2V5ID0gcGtleS0+cGtleS5lYzsKLQlpZiAoZWNfa2V5ID09IE5VTEwgfHwgKGdyb3VwID0gRUNfS0VZX2dldDBfZ3JvdXAoZWNfa2V5KSkgPT0gTlVMTCkgCi0JewotCQlFVlBlcnIoRVZQX0ZfRUNLRVlfUEtFWTJQS0NTOCwgRVZQX1JfTUlTU0lOR19QQVJBTUVURVJTKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogc2V0IHRoZSBlYyBwYXJhbWV0ZXJzIE9JRCAqLwotCWlmIChwOC0+cGtleWFsZy0+YWxnb3JpdGhtKQotCQlBU04xX09CSkVDVF9mcmVlKHA4LT5wa2V5YWxnLT5hbGdvcml0aG0pOwotCi0JcDgtPnBrZXlhbGctPmFsZ29yaXRobSA9IE9CSl9uaWQyb2JqKE5JRF9YOV82Ml9pZF9lY1B1YmxpY0tleSk7Ci0KLQkvKiBzZXQgdGhlIGVjIHBhcmFtZXRlcnMgKi8KLQotCWlmIChwOC0+cGtleWFsZy0+cGFyYW1ldGVyKQotCXsKLQkJQVNOMV9UWVBFX2ZyZWUocDgtPnBrZXlhbGctPnBhcmFtZXRlcik7Ci0JCXA4LT5wa2V5YWxnLT5wYXJhbWV0ZXIgPSBOVUxMOwotCX0KLQotCWlmICgocDgtPnBrZXlhbGctPnBhcmFtZXRlciA9IEFTTjFfVFlQRV9uZXcoKSkgPT0gTlVMTCkKLQl7Ci0JCUVWUGVycihFVlBfRl9FQ0tFWV9QS0VZMlBLQ1M4LCBFUlJfUl9NQUxMT0NfRkFJTFVSRSk7Ci0JCXJldHVybiAwOwotCX0KLQkKLQlpZiAoRUNfR1JPVVBfZ2V0X2FzbjFfZmxhZyhncm91cCkKLSAgICAgICAgICAgICAgICAgICAgICYmIChuaWQgPSBFQ19HUk9VUF9nZXRfY3VydmVfbmFtZShncm91cCkpKQotCXsKLQkJLyogd2UgaGF2ZSBhICduYW1lZCBjdXJ2ZScgPT4ganVzdCBzZXQgdGhlIE9JRCAqLwotCQlwOC0+cGtleWFsZy0+cGFyYW1ldGVyLT50eXBlID0gVl9BU04xX09CSkVDVDsKLQkJcDgtPnBrZXlhbGctPnBhcmFtZXRlci0+dmFsdWUub2JqZWN0ID0gT0JKX25pZDJvYmoobmlkKTsKLQl9Ci0JZWxzZQkvKiBleHBsaWNpdCBwYXJhbWV0ZXJzICovCi0JewotCQlpZiAoKGkgPSBpMmRfRUNQYXJhbWV0ZXJzKGVjX2tleSwgTlVMTCkpID09IDApCi0JCXsKLQkJCUVWUGVycihFVlBfRl9FQ0tFWV9QS0VZMlBLQ1M4LCBFUlJfUl9FQ19MSUIpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJaWYgKChwID0gKHVuc2lnbmVkIGNoYXIgKikgT1BFTlNTTF9tYWxsb2MoaSkpID09IE5VTEwpCi0JCXsKLQkJCUVWUGVycihFVlBfRl9FQ0tFWV9QS0VZMlBLQ1M4LCBFUlJfUl9NQUxMT0NfRkFJTFVSRSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQkKLQkJcHAgPSBwOwotCQlpZiAoIWkyZF9FQ1BhcmFtZXRlcnMoZWNfa2V5LCAmcHApKQotCQl7Ci0JCQlFVlBlcnIoRVZQX0ZfRUNLRVlfUEtFWTJQS0NTOCwgRVJSX1JfRUNfTElCKTsKLQkJCU9QRU5TU0xfZnJlZShwKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JCXA4LT5wa2V5YWxnLT5wYXJhbWV0ZXItPnR5cGUgPSBWX0FTTjFfU0VRVUVOQ0U7Ci0JCWlmICgocDgtPnBrZXlhbGctPnBhcmFtZXRlci0+dmFsdWUuc2VxdWVuY2UgCi0JCQk9IEFTTjFfU1RSSU5HX25ldygpKSA9PSBOVUxMKQotCQl7Ci0JCQlFVlBlcnIoRVZQX0ZfRUNLRVlfUEtFWTJQS0NTOCwgRVJSX1JfQVNOMV9MSUIpOwotCQkJT1BFTlNTTF9mcmVlKHApOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJQVNOMV9TVFJJTkdfc2V0KHA4LT5wa2V5YWxnLT5wYXJhbWV0ZXItPnZhbHVlLnNlcXVlbmNlLCBwLCBpKTsKLQkJT1BFTlNTTF9mcmVlKHApOwotCX0KLQotCS8qIHNldCB0aGUgcHJpdmF0ZSBrZXkgKi8KLQotCS8qIGRvIG5vdCBpbmNsdWRlIHRoZSBwYXJhbWV0ZXJzIGluIHRoZSBTRUMxIHByaXZhdGUga2V5Ci0JICogc2VlIFBLQ1MjMTEgMTIuMTEgKi8KLQlvbGRfZmxhZ3MgPSBFQ19LRVlfZ2V0X2VuY19mbGFncyhwa2V5LT5wa2V5LmVjKTsKLQl0bXBfZmxhZ3MgPSBvbGRfZmxhZ3MgfCBFQ19QS0VZX05PX1BBUkFNRVRFUlM7Ci0JRUNfS0VZX3NldF9lbmNfZmxhZ3MocGtleS0+cGtleS5lYywgdG1wX2ZsYWdzKTsKLQlpID0gaTJkX0VDUHJpdmF0ZUtleShwa2V5LT5wa2V5LmVjLCBOVUxMKTsKLQlpZiAoIWkpCi0JewotCQlFQ19LRVlfc2V0X2VuY19mbGFncyhwa2V5LT5wa2V5LmVjLCBvbGRfZmxhZ3MpOwotCQlFVlBlcnIoRVZQX0ZfRUNLRVlfUEtFWTJQS0NTOCwgRVJSX1JfRUNfTElCKTsKLQkJcmV0dXJuIDA7Ci0JfQotCXAgPSAodW5zaWduZWQgY2hhciAqKSBPUEVOU1NMX21hbGxvYyhpKTsKLQlpZiAoIXApCi0JewotCQlFQ19LRVlfc2V0X2VuY19mbGFncyhwa2V5LT5wa2V5LmVjLCBvbGRfZmxhZ3MpOwotCQlFVlBlcnIoRVZQX0ZfRUNLRVlfUEtFWTJQS0NTOCwgRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwotCQlyZXR1cm4gMDsKLQl9Ci0JcHAgPSBwOwotCWlmICghaTJkX0VDUHJpdmF0ZUtleShwa2V5LT5wa2V5LmVjLCAmcHApKQotCXsKLQkJRUNfS0VZX3NldF9lbmNfZmxhZ3MocGtleS0+cGtleS5lYywgb2xkX2ZsYWdzKTsKLQkJRVZQZXJyKEVWUF9GX0VDS0VZX1BLRVkyUEtDUzgsIEVSUl9SX0VDX0xJQik7Ci0JCU9QRU5TU0xfZnJlZShwKTsKLQkJcmV0dXJuIDA7Ci0JfQotCS8qIHJlc3RvcmUgb2xkIGVuY29kaW5nIGZsYWdzICovCi0JRUNfS0VZX3NldF9lbmNfZmxhZ3MocGtleS0+cGtleS5lYywgb2xkX2ZsYWdzKTsKLQotCXN3aXRjaChwOC0+YnJva2VuKSB7Ci0KLQkJY2FzZSBQS0NTOF9PSzoKLQkJcDgtPnBrZXktPnZhbHVlLm9jdGV0X3N0cmluZyA9IEFTTjFfT0NURVRfU1RSSU5HX25ldygpOwotCQlpZiAoIXA4LT5wa2V5LT52YWx1ZS5vY3RldF9zdHJpbmcgfHwKLQkJICAgICFNX0FTTjFfT0NURVRfU1RSSU5HX3NldChwOC0+cGtleS0+dmFsdWUub2N0ZXRfc3RyaW5nLAotCQkgICAgKGNvbnN0IHZvaWQgKilwLCBpKSkKLQotCQl7Ci0JCQlFVlBlcnIoRVZQX0ZfRUNLRVlfUEtFWTJQS0NTOCwgRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwotCQl9Ci0JCWVsc2UKLQkJCXJldCA9IDE7Ci0JCWJyZWFrOwotCQljYXNlIFBLQ1M4X05PX09DVEVUOgkJLyogUlNBIHNwZWNpZmljICovCi0JCWNhc2UgUEtDUzhfTlNfREI6CQkvKiBEU0Egc3BlY2lmaWMgKi8KLQkJY2FzZSBQS0NTOF9FTUJFRERFRF9QQVJBTToJLyogRFNBIHNwZWNpZmljICovCi0JCWRlZmF1bHQ6Ci0JCQlFVlBlcnIoRVZQX0ZfRUNLRVlfUEtFWTJQS0NTOCxFVlBfUl9FTkNPREVfRVJST1IpOwotCX0KLQlPUEVOU1NMX2NsZWFuc2UocCwgKHNpemVfdClpKTsKLQlPUEVOU1NMX2ZyZWUocCk7Ci0JcmV0dXJuIHJldDsKLX0KLSNlbmRpZgotCiAvKiBFVlBfUEtFWSBhdHRyaWJ1dGUgZnVuY3Rpb25zICovCiAKIGludCBFVlBfUEtFWV9nZXRfYXR0cl9jb3VudChjb25zdCBFVlBfUEtFWSAqa2V5KQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2V2cC9ldnBfdGVzdC5jIGIvY3J5cHRvL2V2cC9ldnBfdGVzdC5jCmluZGV4IDQzNmJlMjAuLjkwMmVmYWMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ldnAvZXZwX3Rlc3QuYworKysgYi9jcnlwdG8vZXZwL2V2cF90ZXN0LmMKQEAgLTE1Myw4ICsxNTMsOCBAQAogICAgIAogICAgIGlmKGtuICE9IGMtPmtleV9sZW4pCiAJewotCWZwcmludGYoc3RkZXJyLCJLZXkgbGVuZ3RoIGRvZXNuJ3QgbWF0Y2gsIGdvdCAlZCBleHBlY3RlZCAlZFxuIixrbiwKLQkJYy0+a2V5X2xlbik7CisJZnByaW50ZihzdGRlcnIsIktleSBsZW5ndGggZG9lc24ndCBtYXRjaCwgZ290ICVkIGV4cGVjdGVkICVsdVxuIixrbiwKKwkJKHVuc2lnbmVkIGxvbmcpYy0+a2V5X2xlbik7CiAJdGVzdDFfZXhpdCg1KTsKIAl9CiAgICAgRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKQEAgLTQ0MSw3ICs0NDEsNyBAQAogI2VuZGlmCiAgICAgRVZQX2NsZWFudXAoKTsKICAgICBDUllQVE9fY2xlYW51cF9hbGxfZXhfZGF0YSgpOwotICAgIEVSUl9yZW1vdmVfc3RhdGUoMCk7CisgICAgRVJSX3JlbW92ZV90aHJlYWRfc3RhdGUoTlVMTCk7CiAgICAgRVJSX2ZyZWVfc3RyaW5ncygpOwogICAgIENSWVBUT19tZW1fbGVha3NfZnAoc3RkZXJyKTsKIApkaWZmIC0tZ2l0IGEvY3J5cHRvL2V2cC9tX2Rzcy5jIGIvY3J5cHRvL2V2cC9tX2Rzcy5jCmluZGV4IDZiMGMwYWEuLjQ4YzI2ODkgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ldnAvbV9kc3MuYworKysgYi9jcnlwdG8vZXZwL21fZHNzLmMKQEAgLTgxLDcgKzgxLDcgQEAKIAlOSURfZHNhV2l0aFNIQSwKIAlOSURfZHNhV2l0aFNIQSwKIAlTSEFfRElHRVNUX0xFTkdUSCwKLQlFVlBfTURfRkxBR19GSVBTLAorCUVWUF9NRF9GTEFHX1BLRVlfRElHRVNULAogCWluaXQsCiAJdXBkYXRlLAogCWZpbmFsLApkaWZmIC0tZ2l0IGEvY3J5cHRvL2V2cC9tX2RzczEuYyBiL2NyeXB0by9ldnAvbV9kc3MxLmMKaW5kZXggZGE4YmFiYy4uNGYwM2ZiNyAxMDA2NDQKLS0tIGEvY3J5cHRvL2V2cC9tX2RzczEuYworKysgYi9jcnlwdG8vZXZwL21fZHNzMS5jCkBAIC02OCw4ICs2OCw2IEBACiAjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KICNlbmRpZgogCi0jaWZuZGVmIE9QRU5TU0xfRklQUwotCiBzdGF0aWMgaW50IGluaXQoRVZQX01EX0NUWCAqY3R4KQogCXsgcmV0dXJuIFNIQTFfSW5pdChjdHgtPm1kX2RhdGEpOyB9CiAKQEAgLTg0LDcgKzgyLDcgQEAKIAlOSURfZHNhLAogCU5JRF9kc2FXaXRoU0hBMSwKIAlTSEFfRElHRVNUX0xFTkdUSCwKLQkwLAorCUVWUF9NRF9GTEFHX1BLRVlfRElHRVNULAogCWluaXQsCiAJdXBkYXRlLAogCWZpbmFsLApAQCAtMTAwLDQgKzk4LDMgQEAKIAlyZXR1cm4oJmRzczFfbWQpOwogCX0KICNlbmRpZgotI2VuZGlmCmRpZmYgLS1naXQgYS9jcnlwdG8vZXZwL21fZWNkc2EuYyBiL2NyeXB0by9ldnAvbV9lY2RzYS5jCmluZGV4IGZhZDI3MGYuLjhkODdhNDkgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ldnAvbV9lY2RzYS5jCisrKyBiL2NyeXB0by9ldnAvbV9lY2RzYS5jCkBAIC0xMzAsNyArMTMwLDcgQEAKIAlOSURfZWNkc2Ffd2l0aF9TSEExLAogCU5JRF9lY2RzYV93aXRoX1NIQTEsCiAJU0hBX0RJR0VTVF9MRU5HVEgsCi0JMCwKKwlFVlBfTURfRkxBR19QS0VZX0RJR0VTVCwKIAlpbml0LAogCXVwZGF0ZSwKIAlmaW5hbCwKZGlmZiAtLWdpdCBhL2NyeXB0by9ldnAvbV9tZDIuYyBiL2NyeXB0by9ldnAvbV9tZDIuYwppbmRleCA4ZWVlNjIzLi41Y2U4NDlmIDEwMDY0NAotLS0gYS9jcnlwdG8vZXZwL21fbWQyLmMKKysrIGIvY3J5cHRvL2V2cC9tX21kMi5jCkBAIC01OCw3ICs1OCw2IEBACiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgImNyeXB0bGliLmgiCi0jaW5jbHVkZSAiZXZwX2xvY2wuaCIKIAogI2lmbmRlZiBPUEVOU1NMX05PX01EMgogCmRpZmYgLS1naXQgYS9jcnlwdG8vZXZwL21fbWQ0LmMgYi9jcnlwdG8vZXZwL21fbWQ0LmMKaW5kZXggNWNkMmFiNS4uMWUwYjdjNSAxMDA2NDQKLS0tIGEvY3J5cHRvL2V2cC9tX21kNC5jCisrKyBiL2NyeXB0by9ldnAvbV9tZDQuYwpAQCAtNTgsNyArNTgsNiBAQAogCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlICJjcnlwdGxpYi5oIgotI2luY2x1ZGUgImV2cF9sb2NsLmgiCiAKICNpZm5kZWYgT1BFTlNTTF9OT19NRDQKIApkaWZmIC0tZ2l0IGEvY3J5cHRvL2V2cC9tX21kNS5jIGIvY3J5cHRvL2V2cC9tX21kNS5jCmluZGV4IDY0NTU4MjkuLjYzYzE0MjEgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ldnAvbV9tZDUuYworKysgYi9jcnlwdG8vZXZwL21fbWQ1LmMKQEAgLTYyLDcgKzYyLDYgQEAKICNpZm5kZWYgT1BFTlNTTF9OT19NRDUKIAogI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0jaW5jbHVkZSAiZXZwX2xvY2wuaCIKICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KICNpbmNsdWRlIDxvcGVuc3NsL3g1MDkuaD4KICNpbmNsdWRlIDxvcGVuc3NsL21kNS5oPgpkaWZmIC0tZ2l0IGEvY3J5cHRvL2V2cC9tX21kYzIuYyBiL2NyeXB0by9ldnAvbV9tZGMyLmMKaW5kZXggOWY5YmNmMC4uYjA4ZDU1OSAxMDA2NDQKLS0tIGEvY3J5cHRvL2V2cC9tX21kYzIuYworKysgYi9jcnlwdG8vZXZwL21fbWRjMi5jCkBAIC01OCw3ICs1OCw2IEBACiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgImNyeXB0bGliLmgiCi0jaW5jbHVkZSAiZXZwX2xvY2wuaCIKIAogI2lmbmRlZiBPUEVOU1NMX05PX01EQzIKIApAQCAtNjYsNyArNjUsOSBAQAogI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgogI2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgogI2luY2x1ZGUgPG9wZW5zc2wvbWRjMi5oPgorI2lmbmRlZiBPUEVOU1NMX05PX1JTQQogI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisjZW5kaWYKIAogc3RhdGljIGludCBpbml0KEVWUF9NRF9DVFggKmN0eCkKIAl7IHJldHVybiBNREMyX0luaXQoY3R4LT5tZF9kYXRhKTsgfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2V2cC9tX3NoYS5jIGIvY3J5cHRvL2V2cC9tX3NoYS5jCmluZGV4IDNmMzBkZmMuLmFjY2NjOGYgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ldnAvbV9zaGEuYworKysgYi9jcnlwdG8vZXZwL21fc2hhLmMKQEAgLTU4LDcgKzU4LDYgQEAKIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSAiY3J5cHRsaWIuaCIKLSNpbmNsdWRlICJldnBfbG9jbC5oIgogCiAjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEEpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBMCkKIApkaWZmIC0tZ2l0IGEvY3J5cHRvL2V2cC9tX3NoYTEuYyBiL2NyeXB0by9ldnAvbV9zaGExLmMKaW5kZXggNDcxZWMzMC4uOWEyNzkwZiAxMDA2NDQKLS0tIGEvY3J5cHRvL2V2cC9tX3NoYTEuYworKysgYi9jcnlwdG8vZXZwL21fc2hhMS5jCkBAIC02OCw4ICs2OCw2IEBACiAjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KICNlbmRpZgogCi0jaWZuZGVmIE9QRU5TU0xfRklQUwotCiBzdGF0aWMgaW50IGluaXQoRVZQX01EX0NUWCAqY3R4KQogCXsgcmV0dXJuIFNIQTFfSW5pdChjdHgtPm1kX2RhdGEpOyB9CiAKQEAgLTg0LDcgKzgyLDcgQEAKIAlOSURfc2hhMSwKIAlOSURfc2hhMVdpdGhSU0FFbmNyeXB0aW9uLAogCVNIQV9ESUdFU1RfTEVOR1RILAotCTAsCisJRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKIAlpbml0LAogCXVwZGF0ZSwKIAlmaW5hbCwKQEAgLTk5LDYgKzk3LDcgQEAKIAl7CiAJcmV0dXJuKCZzaGExX21kKTsKIAl9CisjZW5kaWYKIAogI2lmbmRlZiBPUEVOU1NMX05PX1NIQTI1Ngogc3RhdGljIGludCBpbml0MjI0KEVWUF9NRF9DVFggKmN0eCkKQEAgLTEyMCw3ICsxMTksNyBAQAogCU5JRF9zaGEyMjQsCiAJTklEX3NoYTIyNFdpdGhSU0FFbmNyeXB0aW9uLAogCVNIQTIyNF9ESUdFU1RfTEVOR1RILAotCTAsCisJRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKIAlpbml0MjI0LAogCXVwZGF0ZTI1NiwKIAlmaW5hbDI1NiwKQEAgLTEzOSw3ICsxMzgsNyBAQAogCU5JRF9zaGEyNTYsCiAJTklEX3NoYTI1NldpdGhSU0FFbmNyeXB0aW9uLAogCVNIQTI1Nl9ESUdFU1RfTEVOR1RILAotCTAsCisJRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKIAlpbml0MjU2LAogCXVwZGF0ZTI1NiwKIAlmaW5hbDI1NiwKQEAgLTE3MCw3ICsxNjksNyBAQAogCU5JRF9zaGEzODQsCiAJTklEX3NoYTM4NFdpdGhSU0FFbmNyeXB0aW9uLAogCVNIQTM4NF9ESUdFU1RfTEVOR1RILAotCTAsCisJRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKIAlpbml0Mzg0LAogCXVwZGF0ZTUxMiwKIAlmaW5hbDUxMiwKQEAgLTE4OSw3ICsxODgsNyBAQAogCU5JRF9zaGE1MTIsCiAJTklEX3NoYTUxMldpdGhSU0FFbmNyeXB0aW9uLAogCVNIQTUxMl9ESUdFU1RfTEVOR1RILAotCTAsCisJRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKIAlpbml0NTEyLAogCXVwZGF0ZTUxMiwKIAlmaW5hbDUxMiwKQEAgLTIwMyw3ICsyMDIsMyBAQAogY29uc3QgRVZQX01EICpFVlBfc2hhNTEyKHZvaWQpCiAJeyByZXR1cm4oJnNoYTUxMl9tZCk7IH0KICNlbmRpZgkvKiBpZm5kZWYgT1BFTlNTTF9OT19TSEE1MTIgKi8KLQotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvY3J5cHRvL2V2cC9tX3NpZ3Zlci5jIGIvY3J5cHRvL2V2cC9tX3NpZ3Zlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwYjdmOTUKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vZXZwL21fc2lndmVyLmMKQEAgLTAsMCArMSwyMDAgQEAKKy8qIG1fc2lndmVyLmMgKi8KKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorICogcHJvamVjdCAyMDA2LgorICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChjKSAyMDA2LDIwMDcgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisgKgorICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgorICoKKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorICoKKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKyAqICAgIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCisgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAqCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAiY3J5cHRsaWIuaCIKKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgorI2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgorI2luY2x1ZGUgImV2cF9sb2NsLmgiCisKK3N0YXRpYyBpbnQgZG9fc2lndmVyX2luaXQoRVZQX01EX0NUWCAqY3R4LCBFVlBfUEtFWV9DVFggKipwY3R4LAorCQkJICBjb25zdCBFVlBfTUQgKnR5cGUsIEVOR0lORSAqZSwgRVZQX1BLRVkgKnBrZXksCisJCQkgIGludCB2ZXIpCisJeworCWlmIChjdHgtPnBjdHggPT0gTlVMTCkKKwkJY3R4LT5wY3R4ID0gRVZQX1BLRVlfQ1RYX25ldyhwa2V5LCBlKTsKKwlpZiAoY3R4LT5wY3R4ID09IE5VTEwpCisJCXJldHVybiAwOworCisJaWYgKHR5cGUgPT0gTlVMTCkKKwkJeworCQlpbnQgZGVmX25pZDsKKwkJaWYgKEVWUF9QS0VZX2dldF9kZWZhdWx0X2RpZ2VzdF9uaWQocGtleSwgJmRlZl9uaWQpID4gMCkKKwkJCXR5cGUgPSBFVlBfZ2V0X2RpZ2VzdGJ5bmlkKGRlZl9uaWQpOworCQl9CisKKwlpZiAodHlwZSA9PSBOVUxMKQorCQl7CisJCUVWUGVycihFVlBfRl9ET19TSUdWRVJfSU5JVCwgRVZQX1JfTk9fREVGQVVMVF9ESUdFU1QpOworCQlyZXR1cm4gMDsKKwkJfQorCisJaWYgKHZlcikKKwkJeworCQlpZiAoY3R4LT5wY3R4LT5wbWV0aC0+dmVyaWZ5Y3R4X2luaXQpCisJCQl7CisJCQlpZiAoY3R4LT5wY3R4LT5wbWV0aC0+dmVyaWZ5Y3R4X2luaXQoY3R4LT5wY3R4LCBjdHgpIDw9MCkKKwkJCQlyZXR1cm4gMDsKKwkJCWN0eC0+cGN0eC0+b3BlcmF0aW9uID0gRVZQX1BLRVlfT1BfVkVSSUZZQ1RYOworCQkJfQorCQllbHNlIGlmIChFVlBfUEtFWV92ZXJpZnlfaW5pdChjdHgtPnBjdHgpIDw9IDApCisJCQlyZXR1cm4gMDsKKwkJfQorCWVsc2UKKwkJeworCQlpZiAoY3R4LT5wY3R4LT5wbWV0aC0+c2lnbmN0eF9pbml0KQorCQkJeworCQkJaWYgKGN0eC0+cGN0eC0+cG1ldGgtPnNpZ25jdHhfaW5pdChjdHgtPnBjdHgsIGN0eCkgPD0gMCkKKwkJCQlyZXR1cm4gMDsKKwkJCWN0eC0+cGN0eC0+b3BlcmF0aW9uID0gRVZQX1BLRVlfT1BfU0lHTkNUWDsKKwkJCX0KKwkJZWxzZSBpZiAoRVZQX1BLRVlfc2lnbl9pbml0KGN0eC0+cGN0eCkgPD0gMCkKKwkJCXJldHVybiAwOworCQl9CisJaWYgKEVWUF9QS0VZX0NUWF9zZXRfc2lnbmF0dXJlX21kKGN0eC0+cGN0eCwgdHlwZSkgPD0gMCkKKwkJcmV0dXJuIDA7CisJaWYgKHBjdHgpCisJCSpwY3R4ID0gY3R4LT5wY3R4OworCWlmICghRVZQX0RpZ2VzdEluaXRfZXgoY3R4LCB0eXBlLCBlKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7CisJfQorCitpbnQgRVZQX0RpZ2VzdFNpZ25Jbml0KEVWUF9NRF9DVFggKmN0eCwgRVZQX1BLRVlfQ1RYICoqcGN0eCwKKwkJCWNvbnN0IEVWUF9NRCAqdHlwZSwgRU5HSU5FICplLCBFVlBfUEtFWSAqcGtleSkKKwl7CisJcmV0dXJuIGRvX3NpZ3Zlcl9pbml0KGN0eCwgcGN0eCwgdHlwZSwgZSwgcGtleSwgMCk7CisJfQorCitpbnQgRVZQX0RpZ2VzdFZlcmlmeUluaXQoRVZQX01EX0NUWCAqY3R4LCBFVlBfUEtFWV9DVFggKipwY3R4LAorCQkJY29uc3QgRVZQX01EICp0eXBlLCBFTkdJTkUgKmUsIEVWUF9QS0VZICpwa2V5KQorCXsKKwlyZXR1cm4gZG9fc2lndmVyX2luaXQoY3R4LCBwY3R4LCB0eXBlLCBlLCBwa2V5LCAxKTsKKwl9CisKK2ludCBFVlBfRGlnZXN0U2lnbkZpbmFsKEVWUF9NRF9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqc2lncmV0LCBzaXplX3QgKnNpZ2xlbikKKwl7CisJaW50IHNjdHgsIHIgPSAwOworCWlmIChjdHgtPnBjdHgtPnBtZXRoLT5zaWduY3R4KQorCQlzY3R4ID0gMTsKKwllbHNlCisJCXNjdHggPSAwOworCWlmIChzaWdyZXQpCisJCXsKKwkJTVNfU1RBVElDIEVWUF9NRF9DVFggdG1wX2N0eDsKKwkJdW5zaWduZWQgY2hhciBtZFtFVlBfTUFYX01EX1NJWkVdOworCQl1bnNpZ25lZCBpbnQgbWRsZW47CisJCUVWUF9NRF9DVFhfaW5pdCgmdG1wX2N0eCk7CisJCWlmICghRVZQX01EX0NUWF9jb3B5X2V4KCZ0bXBfY3R4LGN0eCkpCisJCSAgICAgCXJldHVybiAwOworCQlpZiAoc2N0eCkKKwkJCXIgPSB0bXBfY3R4LnBjdHgtPnBtZXRoLT5zaWduY3R4KHRtcF9jdHgucGN0eCwKKwkJCQkJc2lncmV0LCBzaWdsZW4sICZ0bXBfY3R4KTsKKwkJZWxzZQorCQkJciA9IEVWUF9EaWdlc3RGaW5hbF9leCgmdG1wX2N0eCxtZCwmbWRsZW4pOworCQlFVlBfTURfQ1RYX2NsZWFudXAoJnRtcF9jdHgpOworCQlpZiAoc2N0eCB8fCAhcikKKwkJCXJldHVybiByOworCQlpZiAoRVZQX1BLRVlfc2lnbihjdHgtPnBjdHgsIHNpZ3JldCwgc2lnbGVuLCBtZCwgbWRsZW4pIDw9IDApCisJCQlyZXR1cm4gMDsKKwkJfQorCWVsc2UKKwkJeworCQlpZiAoc2N0eCkKKwkJCXsKKwkJCWlmIChjdHgtPnBjdHgtPnBtZXRoLT5zaWduY3R4KGN0eC0+cGN0eCwgc2lncmV0LCBzaWdsZW4sIGN0eCkgPD0gMCkKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJZWxzZQorCQkJeworCQkJaW50IHMgPSBFVlBfTURfc2l6ZShjdHgtPmRpZ2VzdCk7CisJCQlpZiAocyA8IDAgfHwgRVZQX1BLRVlfc2lnbihjdHgtPnBjdHgsIHNpZ3JldCwgc2lnbGVuLCBOVUxMLCBzKSA8PSAwKQorCQkJCXJldHVybiAwOworCQkJfQorCQl9CisJcmV0dXJuIDE7CisJfQorCitpbnQgRVZQX0RpZ2VzdFZlcmlmeUZpbmFsKEVWUF9NRF9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqc2lnLCBzaXplX3Qgc2lnbGVuKQorCXsKKwlNU19TVEFUSUMgRVZQX01EX0NUWCB0bXBfY3R4OworCXVuc2lnbmVkIGNoYXIgbWRbRVZQX01BWF9NRF9TSVpFXTsKKwlpbnQgcjsKKwl1bnNpZ25lZCBpbnQgbWRsZW47CisJaW50IHZjdHg7CisKKwlpZiAoY3R4LT5wY3R4LT5wbWV0aC0+dmVyaWZ5Y3R4KQorCQl2Y3R4ID0gMTsKKwllbHNlCisJCXZjdHggPSAwOworCUVWUF9NRF9DVFhfaW5pdCgmdG1wX2N0eCk7CisJaWYgKCFFVlBfTURfQ1RYX2NvcHlfZXgoJnRtcF9jdHgsY3R4KSkKKwkJcmV0dXJuIC0xOwkKKwlpZiAodmN0eCkKKwkJeworCQlyID0gdG1wX2N0eC5wY3R4LT5wbWV0aC0+dmVyaWZ5Y3R4KHRtcF9jdHgucGN0eCwKKwkJCQkJc2lnLCBzaWdsZW4sICZ0bXBfY3R4KTsKKwkJfQorCWVsc2UKKwkJciA9IEVWUF9EaWdlc3RGaW5hbF9leCgmdG1wX2N0eCxtZCwmbWRsZW4pOworCUVWUF9NRF9DVFhfY2xlYW51cCgmdG1wX2N0eCk7CisJaWYgKHZjdHggfHwgIXIpCisJCXJldHVybiByOworCXJldHVybiBFVlBfUEtFWV92ZXJpZnkoY3R4LT5wY3R4LCBzaWcsIHNpZ2xlbiwgbWQsIG1kbGVuKTsKKwl9CmRpZmYgLS1naXQgYS9jcnlwdG8vZXZwL21fd3AuYyBiL2NyeXB0by9ldnAvbV93cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjZTQ3YzAKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vZXZwL21fd3AuYwpAQCAtMCwwICsxLDQyIEBACisvKiBjcnlwdG8vZXZwL21fd3AuYyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJjcnlwdGxpYi5oIgorCisjaWZuZGVmIE9QRU5TU0xfTk9fV0hJUkxQT09MCisKKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgorI2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgorI2luY2x1ZGUgPG9wZW5zc2wvd2hybHBvb2wuaD4KKworc3RhdGljIGludCBpbml0KEVWUF9NRF9DVFggKmN0eCkKKwl7IHJldHVybiBXSElSTFBPT0xfSW5pdChjdHgtPm1kX2RhdGEpOyB9CisKK3N0YXRpYyBpbnQgdXBkYXRlKEVWUF9NRF9DVFggKmN0eCxjb25zdCB2b2lkICpkYXRhLHNpemVfdCBjb3VudCkKKwl7IHJldHVybiBXSElSTFBPT0xfVXBkYXRlKGN0eC0+bWRfZGF0YSxkYXRhLGNvdW50KTsgfQorCitzdGF0aWMgaW50IGZpbmFsKEVWUF9NRF9DVFggKmN0eCx1bnNpZ25lZCBjaGFyICptZCkKKwl7IHJldHVybiBXSElSTFBPT0xfRmluYWwobWQsY3R4LT5tZF9kYXRhKTsgfQorCitzdGF0aWMgY29uc3QgRVZQX01EIHdoaXJscG9vbF9tZD0KKwl7CisJTklEX3doaXJscG9vbCwKKwkwLAorCVdISVJMUE9PTF9ESUdFU1RfTEVOR1RILAorCTAsCisJaW5pdCwKKwl1cGRhdGUsCisJZmluYWwsCisJTlVMTCwKKwlOVUxMLAorCUVWUF9QS0VZX05VTExfbWV0aG9kLAorCVdISVJMUE9PTF9CQkxPQ0svOCwKKwlzaXplb2YoRVZQX01EICopK3NpemVvZihXSElSTFBPT0xfQ1RYKSwKKwl9OworCitjb25zdCBFVlBfTUQgKkVWUF93aGlybHBvb2wodm9pZCkKKwl7CisJcmV0dXJuKCZ3aGlybHBvb2xfbWQpOworCX0KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY3J5cHRvL2V2cC9uYW1lcy5jIGIvY3J5cHRvL2V2cC9uYW1lcy5jCmluZGV4IGUyZTA0YzMuLmYyODY5ZjUgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ldnAvbmFtZXMuYworKysgYi9jcnlwdG8vZXZwL25hbWVzLmMKQEAgLTY2LDM1ICs2NiwzMiBAQAogCXsKIAlpbnQgcjsKIAotI2lmZGVmIE9QRU5TU0xfRklQUwotCU9QRU5TU0xfaW5pdCgpOwotI2VuZGlmCi0KIAlyPU9CSl9OQU1FX2FkZChPQkpfbmlkMnNuKGMtPm5pZCksT0JKX05BTUVfVFlQRV9DSVBIRVJfTUVUSCwoY29uc3QgY2hhciAqKWMpOwogCWlmIChyID09IDApIHJldHVybigwKTsKKwljaGVja19kZWZlcihjLT5uaWQpOwogCXI9T0JKX05BTUVfYWRkKE9CSl9uaWQybG4oYy0+bmlkKSxPQkpfTkFNRV9UWVBFX0NJUEhFUl9NRVRILChjb25zdCBjaGFyICopYyk7CiAJcmV0dXJuKHIpOwogCX0KIAorCiBpbnQgRVZQX2FkZF9kaWdlc3QoY29uc3QgRVZQX01EICptZCkKIAl7CiAJaW50IHI7CiAJY29uc3QgY2hhciAqbmFtZTsKIAotI2lmZGVmIE9QRU5TU0xfRklQUwotCU9QRU5TU0xfaW5pdCgpOwotI2VuZGlmCiAJbmFtZT1PQkpfbmlkMnNuKG1kLT50eXBlKTsKIAlyPU9CSl9OQU1FX2FkZChuYW1lLE9CSl9OQU1FX1RZUEVfTURfTUVUSCwoY29uc3QgY2hhciAqKW1kKTsKIAlpZiAociA9PSAwKSByZXR1cm4oMCk7CisJY2hlY2tfZGVmZXIobWQtPnR5cGUpOwogCXI9T0JKX05BTUVfYWRkKE9CSl9uaWQybG4obWQtPnR5cGUpLE9CSl9OQU1FX1RZUEVfTURfTUVUSCwoY29uc3QgY2hhciAqKW1kKTsKIAlpZiAociA9PSAwKSByZXR1cm4oMCk7CiAKLQlpZiAobWQtPnR5cGUgIT0gbWQtPnBrZXlfdHlwZSkKKwlpZiAobWQtPnBrZXlfdHlwZSAmJiBtZC0+dHlwZSAhPSBtZC0+cGtleV90eXBlKQogCQl7CiAJCXI9T0JKX05BTUVfYWRkKE9CSl9uaWQyc24obWQtPnBrZXlfdHlwZSksCiAJCQlPQkpfTkFNRV9UWVBFX01EX01FVEh8T0JKX05BTUVfQUxJQVMsbmFtZSk7CiAJCWlmIChyID09IDApIHJldHVybigwKTsKKwkJY2hlY2tfZGVmZXIobWQtPnBrZXlfdHlwZSk7CiAJCXI9T0JKX05BTUVfYWRkKE9CSl9uaWQybG4obWQtPnBrZXlfdHlwZSksCiAJCQlPQkpfTkFNRV9UWVBFX01EX01FVEh8T0JKX05BTUVfQUxJQVMsbmFtZSk7CiAJCX0KQEAgLTEyNyw0ICsxMjQsNzggQEAKIAlPQkpfTkFNRV9jbGVhbnVwKC0xKTsKIAogCUVWUF9QQkVfY2xlYW51cCgpOworCWlmIChvYmpfY2xlYW51cF9kZWZlciA9PSAyKQorCQl7CisJCW9ial9jbGVhbnVwX2RlZmVyID0gMDsKKwkJT0JKX2NsZWFudXAoKTsKKwkJfQorCU9CSl9zaWdpZF9mcmVlKCk7CisJfQorCitzdHJ1Y3QgZG9hbGxfY2lwaGVyCisJeworCXZvaWQgKmFyZzsKKwl2b2lkICgqZm4pKGNvbnN0IEVWUF9DSVBIRVIgKmNpcGgsCisJCQljb25zdCBjaGFyICpmcm9tLCBjb25zdCBjaGFyICp0bywgdm9pZCAqYXJnKTsKKwl9OworCitzdGF0aWMgdm9pZCBkb19hbGxfY2lwaGVyX2ZuKGNvbnN0IE9CSl9OQU1FICpubSwgdm9pZCAqYXJnKQorCXsKKwlzdHJ1Y3QgZG9hbGxfY2lwaGVyICpkYyA9IGFyZzsKKwlpZiAobm0tPmFsaWFzKQorCQlkYy0+Zm4oTlVMTCwgbm0tPm5hbWUsIG5tLT5kYXRhLCBkYy0+YXJnKTsKKwllbHNlCisJCWRjLT5mbigoY29uc3QgRVZQX0NJUEhFUiAqKW5tLT5kYXRhLCBubS0+bmFtZSwgTlVMTCwgZGMtPmFyZyk7CisJfQorCit2b2lkIEVWUF9DSVBIRVJfZG9fYWxsKHZvaWQgKCpmbikoY29uc3QgRVZQX0NJUEhFUiAqY2lwaCwKKwkJY29uc3QgY2hhciAqZnJvbSwgY29uc3QgY2hhciAqdG8sIHZvaWQgKngpLCB2b2lkICphcmcpCisJeworCXN0cnVjdCBkb2FsbF9jaXBoZXIgZGM7CisJZGMuZm4gPSBmbjsKKwlkYy5hcmcgPSBhcmc7CisJT0JKX05BTUVfZG9fYWxsKE9CSl9OQU1FX1RZUEVfQ0lQSEVSX01FVEgsIGRvX2FsbF9jaXBoZXJfZm4sICZkYyk7CisJfQorCit2b2lkIEVWUF9DSVBIRVJfZG9fYWxsX3NvcnRlZCh2b2lkICgqZm4pKGNvbnN0IEVWUF9DSVBIRVIgKmNpcGgsCisJCWNvbnN0IGNoYXIgKmZyb20sIGNvbnN0IGNoYXIgKnRvLCB2b2lkICp4KSwgdm9pZCAqYXJnKQorCXsKKwlzdHJ1Y3QgZG9hbGxfY2lwaGVyIGRjOworCWRjLmZuID0gZm47CisJZGMuYXJnID0gYXJnOworCU9CSl9OQU1FX2RvX2FsbF9zb3J0ZWQoT0JKX05BTUVfVFlQRV9DSVBIRVJfTUVUSCwgZG9fYWxsX2NpcGhlcl9mbiwmZGMpOworCX0KKworc3RydWN0IGRvYWxsX21kCisJeworCXZvaWQgKmFyZzsKKwl2b2lkICgqZm4pKGNvbnN0IEVWUF9NRCAqY2lwaCwKKwkJCWNvbnN0IGNoYXIgKmZyb20sIGNvbnN0IGNoYXIgKnRvLCB2b2lkICphcmcpOworCX07CisKK3N0YXRpYyB2b2lkIGRvX2FsbF9tZF9mbihjb25zdCBPQkpfTkFNRSAqbm0sIHZvaWQgKmFyZykKKwl7CisJc3RydWN0IGRvYWxsX21kICpkYyA9IGFyZzsKKwlpZiAobm0tPmFsaWFzKQorCQlkYy0+Zm4oTlVMTCwgbm0tPm5hbWUsIG5tLT5kYXRhLCBkYy0+YXJnKTsKKwllbHNlCisJCWRjLT5mbigoY29uc3QgRVZQX01EICopbm0tPmRhdGEsIG5tLT5uYW1lLCBOVUxMLCBkYy0+YXJnKTsKKwl9CisKK3ZvaWQgRVZQX01EX2RvX2FsbCh2b2lkICgqZm4pKGNvbnN0IEVWUF9NRCAqbWQsCisJCWNvbnN0IGNoYXIgKmZyb20sIGNvbnN0IGNoYXIgKnRvLCB2b2lkICp4KSwgdm9pZCAqYXJnKQorCXsKKwlzdHJ1Y3QgZG9hbGxfbWQgZGM7CisJZGMuZm4gPSBmbjsKKwlkYy5hcmcgPSBhcmc7CisJT0JKX05BTUVfZG9fYWxsKE9CSl9OQU1FX1RZUEVfTURfTUVUSCwgZG9fYWxsX21kX2ZuLCAmZGMpOworCX0KKwordm9pZCBFVlBfTURfZG9fYWxsX3NvcnRlZCh2b2lkICgqZm4pKGNvbnN0IEVWUF9NRCAqbWQsCisJCWNvbnN0IGNoYXIgKmZyb20sIGNvbnN0IGNoYXIgKnRvLCB2b2lkICp4KSwgdm9pZCAqYXJnKQorCXsKKwlzdHJ1Y3QgZG9hbGxfbWQgZGM7CisJZGMuZm4gPSBmbjsKKwlkYy5hcmcgPSBhcmc7CisJT0JKX05BTUVfZG9fYWxsX3NvcnRlZChPQkpfTkFNRV9UWVBFX01EX01FVEgsIGRvX2FsbF9tZF9mbiwgJmRjKTsKIAl9CmRpZmYgLS1naXQgYS9jcnlwdG8vZXZwL3A1X2NycHQuYyBiL2NyeXB0by9ldnAvcDVfY3JwdC5jCmluZGV4IDJhMjY1ZmQuLjdlY2ZhOGQgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ldnAvcDVfY3JwdC5jCisrKyBiL2NyeXB0by9ldnAvcDVfY3JwdC5jCkBAIC02Miw0MiArNjIsMTEgQEAKICNpbmNsdWRlIDxvcGVuc3NsL3g1MDkuaD4KICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgogCi0vKiBQS0NTIzUgdjEuNSBjb21wYXRpYmxlIFBCRSBmdW5jdGlvbnM6IHNlZSBQS0NTIzUgdjIuMCBmb3IgbW9yZSBpbmZvLgorLyogRG9lc24ndCBkbyBhbnl0aGluZyBub3c6IEJ1aWx0aW4gUEJFIGFsZ29yaXRobXMgaW4gc3RhdGljIHRhYmxlLgogICovCiAKIHZvaWQgUEtDUzVfUEJFX2FkZCh2b2lkKQogewotI2lmbmRlZiBPUEVOU1NMX05PX0RFUwotIyAgaWZuZGVmIE9QRU5TU0xfTk9fTUQ1Ci1FVlBfUEJFX2FsZ19hZGQoTklEX3BiZVdpdGhNRDVBbmRERVNfQ0JDLCBFVlBfZGVzX2NiYygpLCBFVlBfbWQ1KCksCi0JCQkJCQkJIFBLQ1M1X1BCRV9rZXlpdmdlbik7Ci0jICBlbmRpZgotIyAgaWZuZGVmIE9QRU5TU0xfTk9fTUQyCi1FVlBfUEJFX2FsZ19hZGQoTklEX3BiZVdpdGhNRDJBbmRERVNfQ0JDLCBFVlBfZGVzX2NiYygpLCBFVlBfbWQyKCksCi0JCQkJCQkJIFBLQ1M1X1BCRV9rZXlpdmdlbik7Ci0jICBlbmRpZgotIyAgaWZuZGVmIE9QRU5TU0xfTk9fU0hBCi1FVlBfUEJFX2FsZ19hZGQoTklEX3BiZVdpdGhTSEExQW5kREVTX0NCQywgRVZQX2Rlc19jYmMoKSwgRVZQX3NoYTEoKSwKLQkJCQkJCQkgUEtDUzVfUEJFX2tleWl2Z2VuKTsKLSMgIGVuZGlmCi0jZW5kaWYKLSNpZm5kZWYgT1BFTlNTTF9OT19SQzIKLSMgIGlmbmRlZiBPUEVOU1NMX05PX01ENQotRVZQX1BCRV9hbGdfYWRkKE5JRF9wYmVXaXRoTUQ1QW5kUkMyX0NCQywgRVZQX3JjMl82NF9jYmMoKSwgRVZQX21kNSgpLAotCQkJCQkJCSBQS0NTNV9QQkVfa2V5aXZnZW4pOwotIyAgZW5kaWYKLSMgIGlmbmRlZiBPUEVOU1NMX05PX01EMgotRVZQX1BCRV9hbGdfYWRkKE5JRF9wYmVXaXRoTUQyQW5kUkMyX0NCQywgRVZQX3JjMl82NF9jYmMoKSwgRVZQX21kMigpLAotCQkJCQkJCSBQS0NTNV9QQkVfa2V5aXZnZW4pOwotIyAgZW5kaWYKLSMgIGlmbmRlZiBPUEVOU1NMX05PX1NIQQotRVZQX1BCRV9hbGdfYWRkKE5JRF9wYmVXaXRoU0hBMUFuZFJDMl9DQkMsIEVWUF9yYzJfNjRfY2JjKCksIEVWUF9zaGExKCksCi0JCQkJCQkJIFBLQ1M1X1BCRV9rZXlpdmdlbik7Ci0jICBlbmRpZgotI2VuZGlmCi0jaWZuZGVmIE9QRU5TU0xfTk9fSE1BQwotRVZQX1BCRV9hbGdfYWRkKE5JRF9wYmVzMiwgTlVMTCwgTlVMTCwgUEtDUzVfdjJfUEJFX2tleWl2Z2VuKTsKLSNlbmRpZgogfQogCiBpbnQgUEtDUzVfUEJFX2tleWl2Z2VuKEVWUF9DSVBIRVJfQ1RYICpjY3R4LCBjb25zdCBjaGFyICpwYXNzLCBpbnQgcGFzc2xlbiwKQEAgLTExMiw2ICs4MSw3IEBACiAJaW50IHNhbHRsZW4sIGl0ZXI7CiAJdW5zaWduZWQgY2hhciAqc2FsdDsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpwYnVmOworCWludCBtZHNpemU7CiAKIAkvKiBFeHRyYWN0IHVzZWZ1bCBpbmZvIGZyb20gcGFyYW1ldGVyICovCiAJaWYgKHBhcmFtID09IE5VTEwgfHwgcGFyYW0tPnR5cGUgIT0gVl9BU04xX1NFUVVFTkNFIHx8CkBAIC0xNDAsOSArMTEwLDEyIEBACiAJRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LCBzYWx0LCBzYWx0bGVuKTsKIAlQQkVQQVJBTV9mcmVlKHBiZSk7CiAJRVZQX0RpZ2VzdEZpbmFsX2V4KCZjdHgsIG1kX3RtcCwgTlVMTCk7CisJbWRzaXplID0gRVZQX01EX3NpemUobWQpOworCWlmIChtZHNpemUgPCAwKQorCSAgICByZXR1cm4gMDsKIAlmb3IgKGkgPSAxOyBpIDwgaXRlcjsgaSsrKSB7CiAJCUVWUF9EaWdlc3RJbml0X2V4KCZjdHgsIG1kLCBOVUxMKTsKLQkJRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LCBtZF90bXAsIEVWUF9NRF9zaXplKG1kKSk7CisJCUVWUF9EaWdlc3RVcGRhdGUoJmN0eCwgbWRfdG1wLCBtZHNpemUpOwogCQlFVlBfRGlnZXN0RmluYWxfZXggKCZjdHgsIG1kX3RtcCwgTlVMTCk7CiAJfQogCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4KTsKZGlmZiAtLWdpdCBhL2NyeXB0by9ldnAvcDVfY3JwdDIuYyBiL2NyeXB0by9ldnAvcDVfY3JwdDIuYwppbmRleCA2YmVjNzdiLi4zMzQzNzlmIDEwMDY0NAotLS0gYS9jcnlwdG8vZXZwL3A1X2NycHQyLmMKKysrIGIvY3J5cHRvL2V2cC9wNV9jcnB0Mi5jCkBAIC0zLDcgKzMsNyBAQAogICogcHJvamVjdCAxOTk5LgogICovCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChjKSAxOTk5IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDYgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcxLDI4ICs3MSwzOCBAQAogI2VuZGlmCiAKIC8qIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgUEtDUyM1IHYyLjAgcGFzc3dvcmQgYmFzZWQgZW5jcnlwdGlvbiBrZXkKLSAqIGRlcml2YXRpb24gZnVuY3Rpb24gUEJLREYyIHVzaW5nIHRoZSBvbmx5IGN1cnJlbnRseSBkZWZpbmVkIGZ1bmN0aW9uIEhNQUMKLSAqIHdpdGggU0hBMS4gVmVyaWZpZWQgYWdhaW5zdCB0ZXN0IHZlY3RvcnMgcG9zdGVkIGJ5IFBldGVyIEd1dG1hbm4KKyAqIGRlcml2YXRpb24gZnVuY3Rpb24gUEJLREYyLgorICogU0hBMSB2ZXJzaW9uIHZlcmlmaWVkIGFnYWluc3QgdGVzdCB2ZWN0b3JzIHBvc3RlZCBieSBQZXRlciBHdXRtYW5uCiAgKiA8cGd1dDAwMUBjcy5hdWNrbGFuZC5hYy5uej4gdG8gdGhlIFBLQ1MtVE5HIDxwa2NzLXRuZ0Byc2EuY29tPiBtYWlsaW5nIGxpc3QuCiAgKi8KIAotaW50IFBLQ1M1X1BCS0RGMl9ITUFDX1NIQTEoY29uc3QgY2hhciAqcGFzcywgaW50IHBhc3NsZW4sCitpbnQgUEtDUzVfUEJLREYyX0hNQUMoY29uc3QgY2hhciAqcGFzcywgaW50IHBhc3NsZW4sCiAJCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzYWx0LCBpbnQgc2FsdGxlbiwgaW50IGl0ZXIsCisJCQkgICBjb25zdCBFVlBfTUQgKmRpZ2VzdCwKIAkJCSAgIGludCBrZXlsZW4sIHVuc2lnbmVkIGNoYXIgKm91dCkKLXsKLQl1bnNpZ25lZCBjaGFyIGRpZ3RtcFtTSEFfRElHRVNUX0xFTkdUSF0sICpwLCBpdG1wWzRdOwotCWludCBjcGxlbiwgaiwgaywgdGtleWxlbjsKKwl7CisJdW5zaWduZWQgY2hhciBkaWd0bXBbRVZQX01BWF9NRF9TSVpFXSwgKnAsIGl0bXBbNF07CisJaW50IGNwbGVuLCBqLCBrLCB0a2V5bGVuLCBtZGxlbjsKIAl1bnNpZ25lZCBsb25nIGkgPSAxOwogCUhNQUNfQ1RYIGhjdHg7CiAKKwltZGxlbiA9IEVWUF9NRF9zaXplKGRpZ2VzdCk7CisJaWYgKG1kbGVuIDwgMCkKKwkJcmV0dXJuIDA7CisKIAlITUFDX0NUWF9pbml0KCZoY3R4KTsKIAlwID0gb3V0OwogCXRrZXlsZW4gPSBrZXlsZW47Ci0JaWYoIXBhc3MpIHBhc3NsZW4gPSAwOwotCWVsc2UgaWYocGFzc2xlbiA9PSAtMSkgcGFzc2xlbiA9IHN0cmxlbihwYXNzKTsKLQl3aGlsZSh0a2V5bGVuKSB7Ci0JCWlmKHRrZXlsZW4gPiBTSEFfRElHRVNUX0xFTkdUSCkgY3BsZW4gPSBTSEFfRElHRVNUX0xFTkdUSDsKLQkJZWxzZSBjcGxlbiA9IHRrZXlsZW47CisJaWYoIXBhc3MpCisJCXBhc3NsZW4gPSAwOworCWVsc2UgaWYocGFzc2xlbiA9PSAtMSkKKwkJcGFzc2xlbiA9IHN0cmxlbihwYXNzKTsKKwl3aGlsZSh0a2V5bGVuKQorCQl7CisJCWlmKHRrZXlsZW4gPiBtZGxlbikKKwkJCWNwbGVuID0gbWRsZW47CisJCWVsc2UKKwkJCWNwbGVuID0gdGtleWxlbjsKIAkJLyogV2UgYXJlIHVubGlrZWx5IHRvIGV2ZXIgdXNlIG1vcmUgdGhhbiAyNTYgYmxvY2tzICg1MTIwIGJpdHMhKQogCQkgKiBidXQganVzdCBpbiBjYXNlLi4uCiAJCSAqLwpAQCAtMTAwLDIwICsxMTAsMjIgQEAKIAkJaXRtcFsxXSA9ICh1bnNpZ25lZCBjaGFyKSgoaSA+PiAxNikgJiAweGZmKTsKIAkJaXRtcFsyXSA9ICh1bnNpZ25lZCBjaGFyKSgoaSA+PiA4KSAmIDB4ZmYpOwogCQlpdG1wWzNdID0gKHVuc2lnbmVkIGNoYXIpKGkgJiAweGZmKTsKLQkJSE1BQ19Jbml0X2V4KCZoY3R4LCBwYXNzLCBwYXNzbGVuLCBFVlBfc2hhMSgpLCBOVUxMKTsKKwkJSE1BQ19Jbml0X2V4KCZoY3R4LCBwYXNzLCBwYXNzbGVuLCBkaWdlc3QsIE5VTEwpOwogCQlITUFDX1VwZGF0ZSgmaGN0eCwgc2FsdCwgc2FsdGxlbik7CiAJCUhNQUNfVXBkYXRlKCZoY3R4LCBpdG1wLCA0KTsKIAkJSE1BQ19GaW5hbCgmaGN0eCwgZGlndG1wLCBOVUxMKTsKIAkJbWVtY3B5KHAsIGRpZ3RtcCwgY3BsZW4pOwotCQlmb3IoaiA9IDE7IGogPCBpdGVyOyBqKyspIHsKLQkJCUhNQUMoRVZQX3NoYTEoKSwgcGFzcywgcGFzc2xlbiwKLQkJCQkgZGlndG1wLCBTSEFfRElHRVNUX0xFTkdUSCwgZGlndG1wLCBOVUxMKTsKLQkJCWZvcihrID0gMDsgayA8IGNwbGVuOyBrKyspIHBba10gXj0gZGlndG1wW2tdOwotCQl9CisJCWZvcihqID0gMTsgaiA8IGl0ZXI7IGorKykKKwkJCXsKKwkJCUhNQUMoZGlnZXN0LCBwYXNzLCBwYXNzbGVuLAorCQkJCSBkaWd0bXAsIG1kbGVuLCBkaWd0bXAsIE5VTEwpOworCQkJZm9yKGsgPSAwOyBrIDwgY3BsZW47IGsrKykKKwkJCQlwW2tdIF49IGRpZ3RtcFtrXTsKKwkJCX0KIAkJdGtleWxlbi09IGNwbGVuOwogCQlpKys7CiAJCXArPSBjcGxlbjsKLQl9CisJCX0KIAlITUFDX0NUWF9jbGVhbnVwKCZoY3R4KTsKICNpZmRlZiBERUJVR19QS0NTNVYyCiAJZnByaW50ZihzdGRlcnIsICJQYXNzd29yZDpcbiIpOwpAQCAtMTI1LDcgKzEzNywxNSBAQAogCWhfX2R1bXAgKG91dCwga2V5bGVuKTsKICNlbmRpZgogCXJldHVybiAxOwotfQorCX0KKworaW50IFBLQ1M1X1BCS0RGMl9ITUFDX1NIQTEoY29uc3QgY2hhciAqcGFzcywgaW50IHBhc3NsZW4sCisJCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzYWx0LCBpbnQgc2FsdGxlbiwgaW50IGl0ZXIsCisJCQkgICBpbnQga2V5bGVuLCB1bnNpZ25lZCBjaGFyICpvdXQpCisJeworCXJldHVybiBQS0NTNV9QQktERjJfSE1BQyhwYXNzLCBwYXNzbGVuLCBzYWx0LCBzYWx0bGVuLCBpdGVyLCBFVlBfc2hhMSgpLAorCQkJCQlrZXlsZW4sIG91dCk7CisJfQogCiAjaWZkZWYgRE9fVEVTVAogbWFpbigpCkBAIC0xNTUsNiArMTc1LDggQEAKIAlQQkUyUEFSQU0gKnBiZTIgPSBOVUxMOwogCWNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlcjsKIAlQQktERjJQQVJBTSAqa2RmID0gTlVMTDsKKwljb25zdCBFVlBfTUQgKnByZm1kOworCWludCBwcmZfbmlkLCBobWFjX21kX25pZDsKIAogCWlmIChwYXJhbSA9PSBOVUxMIHx8IHBhcmFtLT50eXBlICE9IFZfQVNOMV9TRVFVRU5DRSB8fAogCSAgICBwYXJhbS0+dmFsdWUuc2VxdWVuY2UgPT0gTlVMTCkgewpAQCAtMTgwLDggKzIwMiw3IEBACiAJLyogbGV0cyBzZWUgaWYgd2UgcmVjb2duaXNlIHRoZSBlbmNyeXB0aW9uIGFsZ29yaXRobS4KIAkgKi8KIAotCWNpcGhlciA9IEVWUF9nZXRfY2lwaGVyYnluYW1lKAotCQkJT0JKX25pZDJzbihPQkpfb2JqMm5pZChwYmUyLT5lbmNyeXB0aW9uLT5hbGdvcml0aG0pKSk7CisJY2lwaGVyID0gRVZQX2dldF9jaXBoZXJieW9iaihwYmUyLT5lbmNyeXB0aW9uLT5hbGdvcml0aG0pOwogCiAJaWYoIWNpcGhlcikgewogCQlFVlBlcnIoRVZQX0ZfUEtDUzVfVjJfUEJFX0tFWUlWR0VOLApAQCAtMjI2LDEwICsyNDcsMjMgQEAKIAkJZ290byBlcnI7CiAJfQogCi0JaWYoa2RmLT5wcmYgJiYgKE9CSl9vYmoybmlkKGtkZi0+cHJmLT5hbGdvcml0aG0pICE9IE5JRF9obWFjV2l0aFNIQTEpKSB7CisJaWYgKGtkZi0+cHJmKQorCQlwcmZfbmlkID0gT0JKX29iajJuaWQoa2RmLT5wcmYtPmFsZ29yaXRobSk7CisJZWxzZQorCQlwcmZfbmlkID0gTklEX2htYWNXaXRoU0hBMTsKKworCWlmICghRVZQX1BCRV9maW5kKEVWUF9QQkVfVFlQRV9QUkYsIHByZl9uaWQsIE5VTEwsICZobWFjX21kX25pZCwgMCkpCisJCXsKIAkJRVZQZXJyKEVWUF9GX1BLQ1M1X1YyX1BCRV9LRVlJVkdFTiwgRVZQX1JfVU5TVVBQT1JURURfUFJGKTsKIAkJZ290byBlcnI7Ci0JfQorCQl9CisKKwlwcmZtZCA9IEVWUF9nZXRfZGlnZXN0YnluaWQoaG1hY19tZF9uaWQpOworCWlmIChwcmZtZCA9PSBOVUxMKQorCQl7CisJCUVWUGVycihFVlBfRl9QS0NTNV9WMl9QQkVfS0VZSVZHRU4sIEVWUF9SX1VOU1VQUE9SVEVEX1BSRik7CisJCWdvdG8gZXJyOworCQl9CiAKIAlpZihrZGYtPnNhbHQtPnR5cGUgIT0gVl9BU04xX09DVEVUX1NUUklORykgewogCQlFVlBlcnIoRVZQX0ZfUEtDUzVfVjJfUEJFX0tFWUlWR0VOLApAQCAtMjQxLDcgKzI3NSw5IEBACiAJc2FsdCA9IGtkZi0+c2FsdC0+dmFsdWUub2N0ZXRfc3RyaW5nLT5kYXRhOwogCXNhbHRsZW4gPSBrZGYtPnNhbHQtPnZhbHVlLm9jdGV0X3N0cmluZy0+bGVuZ3RoOwogCWl0ZXIgPSBBU04xX0lOVEVHRVJfZ2V0KGtkZi0+aXRlcik7Ci0JUEtDUzVfUEJLREYyX0hNQUNfU0hBMShwYXNzLCBwYXNzbGVuLCBzYWx0LCBzYWx0bGVuLCBpdGVyLCBrZXlsZW4sIGtleSk7CisJaWYoIVBLQ1M1X1BCS0RGMl9ITUFDKHBhc3MsIHBhc3NsZW4sIHNhbHQsIHNhbHRsZW4sIGl0ZXIsIHByZm1kLAorCQkJCQkJICAga2V5bGVuLCBrZXkpKQorCQlnb3RvIGVycjsKIAlFVlBfQ2lwaGVySW5pdF9leChjdHgsIE5VTEwsIE5VTEwsIGtleSwgTlVMTCwgZW5fZGUpOwogCU9QRU5TU0xfY2xlYW5zZShrZXksIGtleWxlbik7CiAJUEJLREYyUEFSQU1fZnJlZShrZGYpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2V2cC9wX2RlYy5jIGIvY3J5cHRvL2V2cC9wX2RlYy5jCmluZGV4IGY2NDkwMWYuLjQyMDFkY2IgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ldnAvcF9kZWMuYworKysgYi9jcnlwdG8vZXZwL3BfZGVjLmMKQEAgLTY2LDcgKzY2LDcgQEAKICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KICNpbmNsdWRlIDxvcGVuc3NsL3g1MDkuaD4KIAotaW50IEVWUF9QS0VZX2RlY3J5cHQodW5zaWduZWQgY2hhciAqa2V5LCBjb25zdCB1bnNpZ25lZCBjaGFyICplaywgaW50IGVrbCwKK2ludCBFVlBfUEtFWV9kZWNyeXB0X29sZCh1bnNpZ25lZCBjaGFyICprZXksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVrLCBpbnQgZWtsLAogCSAgICAgRVZQX1BLRVkgKnByaXYpCiAJewogCWludCByZXQ9IC0xOwpAQCAtNzUsNyArNzUsNyBAQAogCWlmIChwcml2LT50eXBlICE9IEVWUF9QS0VZX1JTQSkKIAkJewogI2VuZGlmCi0JCUVWUGVycihFVlBfRl9FVlBfUEtFWV9ERUNSWVBULEVWUF9SX1BVQkxJQ19LRVlfTk9UX1JTQSk7CisJCUVWUGVycihFVlBfRl9FVlBfUEtFWV9ERUNSWVBUX09MRCxFVlBfUl9QVUJMSUNfS0VZX05PVF9SU0EpOwogI2lmbmRlZiBPUEVOU1NMX05PX1JTQQogCQlnb3RvIGVycjsKICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9jcnlwdG8vZXZwL3BfZW5jLmMgYi9jcnlwdG8vZXZwL3BfZW5jLmMKaW5kZXggYzJkZmRjNS4uYjVhM2E4NCAxMDA2NDQKLS0tIGEvY3J5cHRvL2V2cC9wX2VuYy5jCisrKyBiL2NyeXB0by9ldnAvcF9lbmMuYwpAQCAtNjYsNyArNjYsNyBAQAogI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgogI2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgogCi1pbnQgRVZQX1BLRVlfZW5jcnlwdCh1bnNpZ25lZCBjaGFyICplaywgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5X2xlbiwKK2ludCBFVlBfUEtFWV9lbmNyeXB0X29sZCh1bnNpZ25lZCBjaGFyICplaywgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5X2xlbiwKIAkgICAgIEVWUF9QS0VZICpwdWJrKQogCXsKIAlpbnQgcmV0PTA7CkBAIC03NSw3ICs3NSw3IEBACiAJaWYgKHB1YmstPnR5cGUgIT0gRVZQX1BLRVlfUlNBKQogCQl7CiAjZW5kaWYKLQkJRVZQZXJyKEVWUF9GX0VWUF9QS0VZX0VOQ1JZUFQsRVZQX1JfUFVCTElDX0tFWV9OT1RfUlNBKTsKKwkJRVZQZXJyKEVWUF9GX0VWUF9QS0VZX0VOQ1JZUFRfT0xELEVWUF9SX1BVQkxJQ19LRVlfTk9UX1JTQSk7CiAjaWZuZGVmIE9QRU5TU0xfTk9fUlNBCiAJCWdvdG8gZXJyOwogCQl9CmRpZmYgLS1naXQgYS9jcnlwdG8vZXZwL3BfbGliLmMgYi9jcnlwdG8vZXZwL3BfbGliLmMKaW5kZXggMjIxNTVlYy4uMTkxNmM2MSAxMDA2NDQKLS0tIGEvY3J5cHRvL2V2cC9wX2xpYi5jCisrKyBiL2NyeXB0by9ldnAvcF9saWIuYwpAQCAtNzQsNjYgKzc0LDI2IEBACiAjaW5jbHVkZSA8b3BlbnNzbC9kaC5oPgogI2VuZGlmCiAKKyNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKKyNpbmNsdWRlIDxvcGVuc3NsL2VuZ2luZS5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJhc24xX2xvY2wuaCIKKwogc3RhdGljIHZvaWQgRVZQX1BLRVlfZnJlZV9pdChFVlBfUEtFWSAqeCk7CiAKIGludCBFVlBfUEtFWV9iaXRzKEVWUF9QS0VZICpwa2V5KQogCXsKLQlpZiAoMCkKLQkJcmV0dXJuIDA7Ci0jaWZuZGVmIE9QRU5TU0xfTk9fUlNBCi0JZWxzZSBpZiAocGtleS0+dHlwZSA9PSBFVlBfUEtFWV9SU0EpCi0JCXJldHVybihCTl9udW1fYml0cyhwa2V5LT5wa2V5LnJzYS0+bikpOwotI2VuZGlmCi0jaWZuZGVmIE9QRU5TU0xfTk9fRFNBCi0JZWxzZSBpZiAocGtleS0+dHlwZSA9PSBFVlBfUEtFWV9EU0EpCi0JCXJldHVybihCTl9udW1fYml0cyhwa2V5LT5wa2V5LmRzYS0+cCkpOwotI2VuZGlmCi0jaWZuZGVmIE9QRU5TU0xfTk9fRUMKLQllbHNlIGlmIChwa2V5LT50eXBlID09IEVWUF9QS0VZX0VDKQotCQl7Ci0JCUJJR05VTSAqb3JkZXIgPSBCTl9uZXcoKTsKLQkJY29uc3QgRUNfR1JPVVAgKmdyb3VwOwotCQlpbnQgcmV0OwotCi0JCWlmICghb3JkZXIpCi0JCQl7Ci0JCQlFUlJfY2xlYXJfZXJyb3IoKTsKLQkJCXJldHVybiAwOwotCQkJfQotCQlncm91cCA9IEVDX0tFWV9nZXQwX2dyb3VwKHBrZXktPnBrZXkuZWMpOwotCQlpZiAoIUVDX0dST1VQX2dldF9vcmRlcihncm91cCwgb3JkZXIsIE5VTEwpKQotCQkJewotCQkJRVJSX2NsZWFyX2Vycm9yKCk7Ci0JCQlyZXR1cm4gMDsKLQkJCX0KLQotCQlyZXQgPSBCTl9udW1fYml0cyhvcmRlcik7Ci0JCUJOX2ZyZWUob3JkZXIpOwotCQlyZXR1cm4gcmV0OwotCQl9Ci0jZW5kaWYKLQlyZXR1cm4oMCk7CisJaWYgKHBrZXkgJiYgcGtleS0+YW1ldGggJiYgcGtleS0+YW1ldGgtPnBrZXlfYml0cykKKwkJcmV0dXJuIHBrZXktPmFtZXRoLT5wa2V5X2JpdHMocGtleSk7CisJcmV0dXJuIDA7CiAJfQogCiBpbnQgRVZQX1BLRVlfc2l6ZShFVlBfUEtFWSAqcGtleSkKIAl7Ci0JaWYgKHBrZXkgPT0gTlVMTCkKLQkJcmV0dXJuKDApOwotI2lmbmRlZiBPUEVOU1NMX05PX1JTQQotCWlmIChwa2V5LT50eXBlID09IEVWUF9QS0VZX1JTQSkKLQkJcmV0dXJuKFJTQV9zaXplKHBrZXktPnBrZXkucnNhKSk7Ci0JZWxzZQotI2VuZGlmCi0jaWZuZGVmIE9QRU5TU0xfTk9fRFNBCi0JCWlmIChwa2V5LT50eXBlID09IEVWUF9QS0VZX0RTQSkKLQkJcmV0dXJuKERTQV9zaXplKHBrZXktPnBrZXkuZHNhKSk7Ci0jZW5kaWYKLSNpZm5kZWYgT1BFTlNTTF9OT19FQ0RTQQotCQlpZiAocGtleS0+dHlwZSA9PSBFVlBfUEtFWV9FQykKLQkJcmV0dXJuKEVDRFNBX3NpemUocGtleS0+cGtleS5lYykpOwotI2VuZGlmCi0KLQlyZXR1cm4oMCk7CisJaWYgKHBrZXkgJiYgcGtleS0+YW1ldGggJiYgcGtleS0+YW1ldGgtPnBrZXlfc2l6ZSkKKwkJcmV0dXJuIHBrZXktPmFtZXRoLT5wa2V5X3NpemUocGtleSk7CisJcmV0dXJuIDA7CiAJfQogCiBpbnQgRVZQX1BLRVlfc2F2ZV9wYXJhbWV0ZXJzKEVWUF9QS0VZICpwa2V5LCBpbnQgbW9kZSkKQEAgLTE3NCw4OCArMTM0LDI2IEBACiAJCUVWUGVycihFVlBfRl9FVlBfUEtFWV9DT1BZX1BBUkFNRVRFUlMsRVZQX1JfTUlTU0lOR19QQVJBTUVURVJTKTsKIAkJZ290byBlcnI7CiAJCX0KLSNpZm5kZWYgT1BFTlNTTF9OT19EU0EKLQlpZiAodG8tPnR5cGUgPT0gRVZQX1BLRVlfRFNBKQotCQl7Ci0JCUJJR05VTSAqYTsKLQotCQlpZiAoKGE9Qk5fZHVwKGZyb20tPnBrZXkuZHNhLT5wKSkgPT0gTlVMTCkgZ290byBlcnI7Ci0JCWlmICh0by0+cGtleS5kc2EtPnAgIT0gTlVMTCkgQk5fZnJlZSh0by0+cGtleS5kc2EtPnApOwotCQl0by0+cGtleS5kc2EtPnA9YTsKLQotCQlpZiAoKGE9Qk5fZHVwKGZyb20tPnBrZXkuZHNhLT5xKSkgPT0gTlVMTCkgZ290byBlcnI7Ci0JCWlmICh0by0+cGtleS5kc2EtPnEgIT0gTlVMTCkgQk5fZnJlZSh0by0+cGtleS5kc2EtPnEpOwotCQl0by0+cGtleS5kc2EtPnE9YTsKLQotCQlpZiAoKGE9Qk5fZHVwKGZyb20tPnBrZXkuZHNhLT5nKSkgPT0gTlVMTCkgZ290byBlcnI7Ci0JCWlmICh0by0+cGtleS5kc2EtPmcgIT0gTlVMTCkgQk5fZnJlZSh0by0+cGtleS5kc2EtPmcpOwotCQl0by0+cGtleS5kc2EtPmc9YTsKLQkJfQotI2VuZGlmCi0jaWZuZGVmIE9QRU5TU0xfTk9fRUMKLQlpZiAodG8tPnR5cGUgPT0gRVZQX1BLRVlfRUMpCi0JCXsKLQkJRUNfR1JPVVAgKmdyb3VwID0gRUNfR1JPVVBfZHVwKEVDX0tFWV9nZXQwX2dyb3VwKGZyb20tPnBrZXkuZWMpKTsKLQkJaWYgKGdyb3VwID09IE5VTEwpCi0JCQlnb3RvIGVycjsKLQkJaWYgKEVDX0tFWV9zZXRfZ3JvdXAodG8tPnBrZXkuZWMsIGdyb3VwKSA9PSAwKQotCQkJZ290byBlcnI7Ci0JCUVDX0dST1VQX2ZyZWUoZ3JvdXApOwotCQl9Ci0jZW5kaWYKLQlyZXR1cm4oMSk7CisJaWYgKGZyb20tPmFtZXRoICYmIGZyb20tPmFtZXRoLT5wYXJhbV9jb3B5KQorCQlyZXR1cm4gZnJvbS0+YW1ldGgtPnBhcmFtX2NvcHkodG8sIGZyb20pOwogZXJyOgotCXJldHVybigwKTsKKwlyZXR1cm4gMDsKIAl9CiAKIGludCBFVlBfUEtFWV9taXNzaW5nX3BhcmFtZXRlcnMoY29uc3QgRVZQX1BLRVkgKnBrZXkpCiAJewotI2lmbmRlZiBPUEVOU1NMX05PX0RTQQotCWlmIChwa2V5LT50eXBlID09IEVWUF9QS0VZX0RTQSkKLQkJewotCQlEU0EgKmRzYTsKLQotCQlkc2E9cGtleS0+cGtleS5kc2E7Ci0JCWlmICgoZHNhLT5wID09IE5VTEwpIHx8IChkc2EtPnEgPT0gTlVMTCkgfHwgKGRzYS0+ZyA9PSBOVUxMKSkKLQkJCXJldHVybigxKTsKLQkJfQotI2VuZGlmCi0jaWZuZGVmIE9QRU5TU0xfTk9fRUMKLQlpZiAocGtleS0+dHlwZSA9PSBFVlBfUEtFWV9FQykKLQkJewotCQlpZiAoRUNfS0VZX2dldDBfZ3JvdXAocGtleS0+cGtleS5lYykgPT0gTlVMTCkKLQkJCXJldHVybigxKTsKLQkJfQotI2VuZGlmCi0KLQlyZXR1cm4oMCk7CisJaWYgKHBrZXktPmFtZXRoICYmIHBrZXktPmFtZXRoLT5wYXJhbV9taXNzaW5nKQorCQlyZXR1cm4gcGtleS0+YW1ldGgtPnBhcmFtX21pc3NpbmcocGtleSk7CisJcmV0dXJuIDA7CiAJfQogCiBpbnQgRVZQX1BLRVlfY21wX3BhcmFtZXRlcnMoY29uc3QgRVZQX1BLRVkgKmEsIGNvbnN0IEVWUF9QS0VZICpiKQogCXsKLSNpZm5kZWYgT1BFTlNTTF9OT19EU0EKLQlpZiAoKGEtPnR5cGUgPT0gRVZQX1BLRVlfRFNBKSAmJiAoYi0+dHlwZSA9PSBFVlBfUEtFWV9EU0EpKQotCQl7Ci0JCWlmICgJQk5fY21wKGEtPnBrZXkuZHNhLT5wLGItPnBrZXkuZHNhLT5wKSB8fAotCQkJQk5fY21wKGEtPnBrZXkuZHNhLT5xLGItPnBrZXkuZHNhLT5xKSB8fAotCQkJQk5fY21wKGEtPnBrZXkuZHNhLT5nLGItPnBrZXkuZHNhLT5nKSkKLQkJCXJldHVybigwKTsKLQkJZWxzZQotCQkJcmV0dXJuKDEpOwotCQl9Ci0jZW5kaWYKLSNpZm5kZWYgT1BFTlNTTF9OT19FQwotCWlmIChhLT50eXBlID09IEVWUF9QS0VZX0VDICYmIGItPnR5cGUgPT0gRVZQX1BLRVlfRUMpCi0JCXsKLQkJY29uc3QgRUNfR1JPVVAgKmdyb3VwX2EgPSBFQ19LRVlfZ2V0MF9ncm91cChhLT5wa2V5LmVjKSwKLQkJICAgICAgICAgICAgICAgKmdyb3VwX2IgPSBFQ19LRVlfZ2V0MF9ncm91cChiLT5wa2V5LmVjKTsKLQkJaWYgKEVDX0dST1VQX2NtcChncm91cF9hLCBncm91cF9iLCBOVUxMKSkKLQkJCXJldHVybiAwOwotCQllbHNlCi0JCQlyZXR1cm4gMTsKLQkJfQotI2VuZGlmCi0JcmV0dXJuKC0xKTsKKwlpZiAoYS0+dHlwZSAhPSBiLT50eXBlKQorCQlyZXR1cm4gLTE7CisJaWYgKGEtPmFtZXRoICYmIGEtPmFtZXRoLT5wYXJhbV9jbXApCisJCXJldHVybiBhLT5hbWV0aC0+cGFyYW1fY21wKGEsIGIpOworCXJldHVybiAtMjsKIAl9CiAKIGludCBFVlBfUEtFWV9jbXAoY29uc3QgRVZQX1BLRVkgKmEsIGNvbnN0IEVWUF9QS0VZICpiKQpAQCAtMjYzLDUxICsxNjEsMjIgQEAKIAlpZiAoYS0+dHlwZSAhPSBiLT50eXBlKQogCQlyZXR1cm4gLTE7CiAKLQlpZiAoRVZQX1BLRVlfY21wX3BhcmFtZXRlcnMoYSwgYikgPT0gMCkKLQkJcmV0dXJuIDA7Ci0KLQlzd2l0Y2ggKGEtPnR5cGUpCisJaWYgKGEtPmFtZXRoKQogCQl7Ci0jaWZuZGVmIE9QRU5TU0xfTk9fUlNBCi0JY2FzZSBFVlBfUEtFWV9SU0E6Ci0JCWlmIChCTl9jbXAoYi0+cGtleS5yc2EtPm4sYS0+cGtleS5yc2EtPm4pICE9IDAKLQkJCXx8IEJOX2NtcChiLT5wa2V5LnJzYS0+ZSxhLT5wa2V5LnJzYS0+ZSkgIT0gMCkKLQkJCXJldHVybiAwOwotCQlicmVhazsKLSNlbmRpZgotI2lmbmRlZiBPUEVOU1NMX05PX0RTQQotCWNhc2UgRVZQX1BLRVlfRFNBOgotCQlpZiAoQk5fY21wKGItPnBrZXkuZHNhLT5wdWJfa2V5LGEtPnBrZXkuZHNhLT5wdWJfa2V5KSAhPSAwKQotCQkJcmV0dXJuIDA7Ci0JCWJyZWFrOwotI2VuZGlmCi0jaWZuZGVmIE9QRU5TU0xfTk9fRUMKLQljYXNlIEVWUF9QS0VZX0VDOgotCQl7Ci0JCWludCAgcjsKLQkJY29uc3QgRUNfR1JPVVAgKmdyb3VwID0gRUNfS0VZX2dldDBfZ3JvdXAoYi0+cGtleS5lYyk7Ci0JCWNvbnN0IEVDX1BPSU5UICpwYSA9IEVDX0tFWV9nZXQwX3B1YmxpY19rZXkoYS0+cGtleS5lYyksCi0JCSAgICAgICAgICAgICAgICpwYiA9IEVDX0tFWV9nZXQwX3B1YmxpY19rZXkoYi0+cGtleS5lYyk7Ci0JCXIgPSBFQ19QT0lOVF9jbXAoZ3JvdXAsIHBhLCBwYiwgTlVMTCk7Ci0JCWlmIChyICE9IDApCisJCWludCByZXQ7CisJCS8qIENvbXBhcmUgcGFyYW1ldGVycyBpZiB0aGUgYWxnb3JpdGhtIGhhcyB0aGVtICovCisJCWlmIChhLT5hbWV0aC0+cGFyYW1fY21wKQogCQkJewotCQkJaWYgKHIgPT0gMSkKLQkJCQlyZXR1cm4gMDsKLQkJCWVsc2UKLQkJCQlyZXR1cm4gLTI7CisJCQlyZXQgPSBhLT5hbWV0aC0+cGFyYW1fY21wKGEsIGIpOworCQkJaWYgKHJldCA8PSAwKQorCQkJCXJldHVybiByZXQ7CiAJCQl9Ci0JCX0KLSAJCWJyZWFrOwotI2VuZGlmCi0jaWZuZGVmIE9QRU5TU0xfTk9fREgKLQljYXNlIEVWUF9QS0VZX0RIOgotCQlyZXR1cm4gLTI7Ci0jZW5kaWYKLQlkZWZhdWx0OgotCQlyZXR1cm4gLTI7CisKKwkJaWYgKGEtPmFtZXRoLT5wdWJfY21wKQorCQkJcmV0dXJuIGEtPmFtZXRoLT5wdWJfY21wKGEsIGIpOwogCQl9CiAKLQlyZXR1cm4gMTsKKwlyZXR1cm4gLTI7CiAJfQogCiBFVlBfUEtFWSAqRVZQX1BLRVlfbmV3KHZvaWQpCkBAIC0zMjEsMjIgKzE5MCw4NyBAQAogCQlyZXR1cm4oTlVMTCk7CiAJCX0KIAlyZXQtPnR5cGU9RVZQX1BLRVlfTk9ORTsKKwlyZXQtPnNhdmVfdHlwZT1FVlBfUEtFWV9OT05FOwogCXJldC0+cmVmZXJlbmNlcz0xOworCXJldC0+YW1ldGg9TlVMTDsKKwlyZXQtPmVuZ2luZT1OVUxMOwogCXJldC0+cGtleS5wdHI9TlVMTDsKIAlyZXQtPmF0dHJpYnV0ZXM9TlVMTDsKIAlyZXQtPnNhdmVfcGFyYW1ldGVycz0xOwogCXJldHVybihyZXQpOwogCX0KIAotaW50IEVWUF9QS0VZX2Fzc2lnbihFVlBfUEtFWSAqcGtleSwgaW50IHR5cGUsIGNoYXIgKmtleSkKKy8qIFNldHVwIGEgcHVibGljIGtleSBBU04xIG1ldGhvZCBhbmQgRU5HSU5FIGZyb20gYSBOSUQgb3IgYSBzdHJpbmcuCisgKiBJZiBwa2V5IGlzIE5VTEwganVzdCByZXR1cm4gMSBvciAwIGlmIHRoZSBhbGdvcml0aG0gZXhpc3RzLgorICovCisKK3N0YXRpYyBpbnQgcGtleV9zZXRfdHlwZShFVlBfUEtFWSAqcGtleSwgaW50IHR5cGUsIGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbikKIAl7Ci0JaWYgKHBrZXkgPT0gTlVMTCkgcmV0dXJuKDApOwotCWlmIChwa2V5LT5wa2V5LnB0ciAhPSBOVUxMKQotCQlFVlBfUEtFWV9mcmVlX2l0KHBrZXkpOwotCXBrZXktPnR5cGU9RVZQX1BLRVlfdHlwZSh0eXBlKTsKLQlwa2V5LT5zYXZlX3R5cGU9dHlwZTsKKwljb25zdCBFVlBfUEtFWV9BU04xX01FVEhPRCAqYW1ldGg7CisJRU5HSU5FICplID0gTlVMTDsKKwlpZiAocGtleSkKKwkJeworCQlpZiAocGtleS0+cGtleS5wdHIpCisJCQlFVlBfUEtFWV9mcmVlX2l0KHBrZXkpOworCQkvKiBJZiBrZXkgdHlwZSBtYXRjaGVzIGFuZCBhIG1ldGhvZCBleGlzdHMgdGhlbiB0aGlzCisJCSAqIGxvb2t1cCBoYXMgc3VjY2VlZGVkIG9uY2Ugc28ganVzdCBpbmRpY2F0ZSBzdWNjZXNzLgorCQkgKi8KKwkJaWYgKCh0eXBlID09IHBrZXktPnNhdmVfdHlwZSkgJiYgcGtleS0+YW1ldGgpCisJCQlyZXR1cm4gMTsKKyNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKKwkJLyogSWYgd2UgaGF2ZSBhbiBFTkdJTkUgcmVsZWFzZSBpdCAqLworCQlpZiAocGtleS0+ZW5naW5lKQorCQkJeworCQkJRU5HSU5FX2ZpbmlzaChwa2V5LT5lbmdpbmUpOworCQkJcGtleS0+ZW5naW5lID0gTlVMTDsKKwkJCX0KKyNlbmRpZgorCQl9CisJaWYgKHN0cikKKwkJYW1ldGggPSBFVlBfUEtFWV9hc24xX2ZpbmRfc3RyKCZlLCBzdHIsIGxlbik7CisJZWxzZQorCQlhbWV0aCA9IEVWUF9QS0VZX2FzbjFfZmluZCgmZSwgdHlwZSk7CisjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCisJaWYgKCFwa2V5ICYmIGUpCisJCUVOR0lORV9maW5pc2goZSk7CisjZW5kaWYKKwlpZiAoIWFtZXRoKQorCQl7CisJCUVWUGVycihFVlBfRl9QS0VZX1NFVF9UWVBFLCBFVlBfUl9VTlNVUFBPUlRFRF9BTEdPUklUSE0pOworCQlyZXR1cm4gMDsKKwkJfQorCWlmIChwa2V5KQorCQl7CisJCXBrZXktPmFtZXRoID0gYW1ldGg7CisJCXBrZXktPmVuZ2luZSA9IGU7CisKKwkJcGtleS0+dHlwZSA9IHBrZXktPmFtZXRoLT5wa2V5X2lkOworCQlwa2V5LT5zYXZlX3R5cGU9dHlwZTsKKwkJfQorCXJldHVybiAxOworCX0KKworaW50IEVWUF9QS0VZX3NldF90eXBlKEVWUF9QS0VZICpwa2V5LCBpbnQgdHlwZSkKKwl7CisJcmV0dXJuIHBrZXlfc2V0X3R5cGUocGtleSwgdHlwZSwgTlVMTCwgLTEpOworCX0KKworaW50IEVWUF9QS0VZX3NldF90eXBlX3N0cihFVlBfUEtFWSAqcGtleSwgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuKQorCXsKKwlyZXR1cm4gcGtleV9zZXRfdHlwZShwa2V5LCBFVlBfUEtFWV9OT05FLCBzdHIsIGxlbik7CisJfQorCitpbnQgRVZQX1BLRVlfYXNzaWduKEVWUF9QS0VZICpwa2V5LCBpbnQgdHlwZSwgdm9pZCAqa2V5KQorCXsKKwlpZiAoIUVWUF9QS0VZX3NldF90eXBlKHBrZXksIHR5cGUpKQorCQlyZXR1cm4gMDsKIAlwa2V5LT5wa2V5LnB0cj1rZXk7Ci0JcmV0dXJuKGtleSAhPSBOVUxMKTsKKwlyZXR1cm4gKGtleSAhPSBOVUxMKTsKKwl9CisKK3ZvaWQgKkVWUF9QS0VZX2dldDAoRVZQX1BLRVkgKnBrZXkpCisJeworCXJldHVybiBwa2V5LT5wa2V5LnB0cjsKIAl9CiAKICNpZm5kZWYgT1BFTlNTTF9OT19SU0EKQEAgLTQyNSwyNCArMzU5LDI5IEBACiAKIGludCBFVlBfUEtFWV90eXBlKGludCB0eXBlKQogCXsKLQlzd2l0Y2ggKHR5cGUpCi0JCXsKLQljYXNlIEVWUF9QS0VZX1JTQToKLQljYXNlIEVWUF9QS0VZX1JTQTI6Ci0JCXJldHVybihFVlBfUEtFWV9SU0EpOwotCWNhc2UgRVZQX1BLRVlfRFNBOgotCWNhc2UgRVZQX1BLRVlfRFNBMToKLQljYXNlIEVWUF9QS0VZX0RTQTI6Ci0JY2FzZSBFVlBfUEtFWV9EU0EzOgotCWNhc2UgRVZQX1BLRVlfRFNBNDoKLQkJcmV0dXJuKEVWUF9QS0VZX0RTQSk7Ci0JY2FzZSBFVlBfUEtFWV9ESDoKLQkJcmV0dXJuKEVWUF9QS0VZX0RIKTsKLQljYXNlIEVWUF9QS0VZX0VDOgotCQlyZXR1cm4oRVZQX1BLRVlfRUMpOwotCWRlZmF1bHQ6Ci0JCXJldHVybihOSURfdW5kZWYpOwotCQl9CisJaW50IHJldDsKKwljb25zdCBFVlBfUEtFWV9BU04xX01FVEhPRCAqYW1ldGg7CisJRU5HSU5FICplOworCWFtZXRoID0gRVZQX1BLRVlfYXNuMV9maW5kKCZlLCB0eXBlKTsKKwlpZiAoYW1ldGgpCisJCXJldCA9IGFtZXRoLT5wa2V5X2lkOworCWVsc2UKKwkJcmV0ID0gTklEX3VuZGVmOworI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQorCWlmIChlKQorCQlFTkdJTkVfZmluaXNoKGUpOworI2VuZGlmCisJcmV0dXJuIHJldDsKKwl9CisKK2ludCBFVlBfUEtFWV9pZChjb25zdCBFVlBfUEtFWSAqcGtleSkKKwl7CisJcmV0dXJuIHBrZXktPnR5cGU7CisJfQorCitpbnQgRVZQX1BLRVlfYmFzZV9pZChjb25zdCBFVlBfUEtFWSAqcGtleSkKKwl7CisJcmV0dXJuIEVWUF9QS0VZX3R5cGUocGtleS0+dHlwZSk7CiAJfQogCiB2b2lkIEVWUF9QS0VZX2ZyZWUoRVZQX1BLRVkgKngpCkBAIC00NzEsMzIgKzQxMCw1NyBAQAogCiBzdGF0aWMgdm9pZCBFVlBfUEtFWV9mcmVlX2l0KEVWUF9QS0VZICp4KQogCXsKLQlzd2l0Y2ggKHgtPnR5cGUpCisJaWYgKHgtPmFtZXRoICYmIHgtPmFtZXRoLT5wa2V5X2ZyZWUpCisJCXgtPmFtZXRoLT5wa2V5X2ZyZWUoeCk7CisjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCisJaWYgKHgtPmVuZ2luZSkKIAkJewotI2lmbmRlZiBPUEVOU1NMX05PX1JTQQotCWNhc2UgRVZQX1BLRVlfUlNBOgotCWNhc2UgRVZQX1BLRVlfUlNBMjoKLQkJUlNBX2ZyZWUoeC0+cGtleS5yc2EpOwotCQlicmVhazsKLSNlbmRpZgotI2lmbmRlZiBPUEVOU1NMX05PX0RTQQotCWNhc2UgRVZQX1BLRVlfRFNBOgotCWNhc2UgRVZQX1BLRVlfRFNBMjoKLQljYXNlIEVWUF9QS0VZX0RTQTM6Ci0JY2FzZSBFVlBfUEtFWV9EU0E0OgotCQlEU0FfZnJlZSh4LT5wa2V5LmRzYSk7Ci0JCWJyZWFrOwotI2VuZGlmCi0jaWZuZGVmIE9QRU5TU0xfTk9fRUMKLQljYXNlIEVWUF9QS0VZX0VDOgotCQlFQ19LRVlfZnJlZSh4LT5wa2V5LmVjKTsKLQkJYnJlYWs7Ci0jZW5kaWYKLSNpZm5kZWYgT1BFTlNTTF9OT19ESAotCWNhc2UgRVZQX1BLRVlfREg6Ci0JCURIX2ZyZWUoeC0+cGtleS5kaCk7Ci0JCWJyZWFrOwotI2VuZGlmCisJCUVOR0lORV9maW5pc2goeC0+ZW5naW5lKTsKKwkJeC0+ZW5naW5lID0gTlVMTDsKIAkJfQorI2VuZGlmCisJfQorCitzdGF0aWMgaW50IHVuc3VwX2FsZyhCSU8gKm91dCwgY29uc3QgRVZQX1BLRVkgKnBrZXksIGludCBpbmRlbnQsCisJCQkJY29uc3QgY2hhciAqa3N0cikKKwl7CisJQklPX2luZGVudChvdXQsIGluZGVudCwgMTI4KTsKKwlCSU9fcHJpbnRmKG91dCwgIiVzIGFsZ29yaXRobSBcIiVzXCIgdW5zdXBwb3J0ZWRcbiIsCisJCQkJCQlrc3RyLCBPQkpfbmlkMmxuKHBrZXktPnR5cGUpKTsKKwlyZXR1cm4gMTsKKwl9CisKK2ludCBFVlBfUEtFWV9wcmludF9wdWJsaWMoQklPICpvdXQsIGNvbnN0IEVWUF9QS0VZICpwa2V5LAorCQkJCWludCBpbmRlbnQsIEFTTjFfUENUWCAqcGN0eCkKKwl7CisJaWYgKHBrZXktPmFtZXRoICYmIHBrZXktPmFtZXRoLT5wdWJfcHJpbnQpCisJCXJldHVybiBwa2V5LT5hbWV0aC0+cHViX3ByaW50KG91dCwgcGtleSwgaW5kZW50LCBwY3R4KTsKKwkKKwlyZXR1cm4gdW5zdXBfYWxnKG91dCwgcGtleSwgaW5kZW50LCAiUHVibGljIEtleSIpOworCX0KKworaW50IEVWUF9QS0VZX3ByaW50X3ByaXZhdGUoQklPICpvdXQsIGNvbnN0IEVWUF9QS0VZICpwa2V5LAorCQkJCWludCBpbmRlbnQsIEFTTjFfUENUWCAqcGN0eCkKKwl7CisJaWYgKHBrZXktPmFtZXRoICYmIHBrZXktPmFtZXRoLT5wcml2X3ByaW50KQorCQlyZXR1cm4gcGtleS0+YW1ldGgtPnByaXZfcHJpbnQob3V0LCBwa2V5LCBpbmRlbnQsIHBjdHgpOworCQorCXJldHVybiB1bnN1cF9hbGcob3V0LCBwa2V5LCBpbmRlbnQsICJQcml2YXRlIEtleSIpOworCX0KKworaW50IEVWUF9QS0VZX3ByaW50X3BhcmFtcyhCSU8gKm91dCwgY29uc3QgRVZQX1BLRVkgKnBrZXksCisJCQkJaW50IGluZGVudCwgQVNOMV9QQ1RYICpwY3R4KQorCXsKKwlpZiAocGtleS0+YW1ldGggJiYgcGtleS0+YW1ldGgtPnBhcmFtX3ByaW50KQorCQlyZXR1cm4gcGtleS0+YW1ldGgtPnBhcmFtX3ByaW50KG91dCwgcGtleSwgaW5kZW50LCBwY3R4KTsKKwlyZXR1cm4gdW5zdXBfYWxnKG91dCwgcGtleSwgaW5kZW50LCAiUGFyYW1ldGVycyIpOworCX0KKworaW50IEVWUF9QS0VZX2dldF9kZWZhdWx0X2RpZ2VzdF9uaWQoRVZQX1BLRVkgKnBrZXksIGludCAqcG5pZCkKKwl7CisJaWYgKCFwa2V5LT5hbWV0aCB8fCAhcGtleS0+YW1ldGgtPnBrZXlfY3RybCkKKwkJcmV0dXJuIC0yOworCXJldHVybiBwa2V5LT5hbWV0aC0+cGtleV9jdHJsKHBrZXksIEFTTjFfUEtFWV9DVFJMX0RFRkFVTFRfTURfTklELAorCQkJCQkJMCwgcG5pZCk7CiAJfQogCmRpZmYgLS1naXQgYS9jcnlwdG8vZXZwL3Bfb3Blbi5jIGIvY3J5cHRvL2V2cC9wX29wZW4uYwppbmRleCA5OTM1MjA2Li41M2E1OWEyIDEwMDY0NAotLS0gYS9jcnlwdG8vZXZwL3Bfb3Blbi5jCisrKyBiL2NyeXB0by9ldnAvcF9vcGVuLmMKQEAgLTk1LDcgKzk1LDcgQEAKIAkJZ290byBlcnI7CiAJCX0KIAotCWk9RVZQX1BLRVlfZGVjcnlwdChrZXksZWssZWtsLHByaXYpOworCWk9RVZQX1BLRVlfZGVjcnlwdF9vbGQoa2V5LGVrLGVrbCxwcml2KTsKIAlpZiAoKGkgPD0gMCkgfHwgIUVWUF9DSVBIRVJfQ1RYX3NldF9rZXlfbGVuZ3RoKGN0eCwgaSkpCiAJCXsKIAkJLyogRVJST1IgKi8KZGlmZiAtLWdpdCBhL2NyeXB0by9ldnAvcF9zZWFsLmMgYi9jcnlwdG8vZXZwL3Bfc2VhbC5jCmluZGV4IDhjYzhmY2IuLmQ4MzI0NTIgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ldnAvcF9zZWFsLmMKKysrIGIvY3J5cHRvL2V2cC9wX3NlYWwuYwpAQCAtODcsNyArODcsNyBAQAogCiAJZm9yIChpPTA7IGk8bnB1Yms7IGkrKykKIAkJewotCQlla2xbaV09RVZQX1BLRVlfZW5jcnlwdChla1tpXSxrZXksRVZQX0NJUEhFUl9DVFhfa2V5X2xlbmd0aChjdHgpLAorCQlla2xbaV09RVZQX1BLRVlfZW5jcnlwdF9vbGQoZWtbaV0sa2V5LEVWUF9DSVBIRVJfQ1RYX2tleV9sZW5ndGgoY3R4KSwKIAkJCXB1YmtbaV0pOwogCQlpZiAoZWtsW2ldIDw9IDApIHJldHVybigtMSk7CiAJCX0KZGlmZiAtLWdpdCBhL2NyeXB0by9ldnAvcF9zaWduLmMgYi9jcnlwdG8vZXZwL3Bfc2lnbi5jCmluZGV4IGJmNDFhMGQuLjhkZjZkNDggMTAwNjQ0Ci0tLSBhL2NyeXB0by9ldnAvcF9zaWduLmMKKysrIGIvY3J5cHRvL2V2cC9wX3NpZ24uYwpAQCAtODQsNiArODQsMzIgQEAKIAlNU19TVEFUSUMgRVZQX01EX0NUWCB0bXBfY3R4OwogCiAJKnNpZ2xlbj0wOworCUVWUF9NRF9DVFhfaW5pdCgmdG1wX2N0eCk7CisJRVZQX01EX0NUWF9jb3B5X2V4KCZ0bXBfY3R4LGN0eCk7ICAgCisJRVZQX0RpZ2VzdEZpbmFsX2V4KCZ0bXBfY3R4LCYobVswXSksJm1fbGVuKTsKKwlFVlBfTURfQ1RYX2NsZWFudXAoJnRtcF9jdHgpOworCisJaWYgKGN0eC0+ZGlnZXN0LT5mbGFncyAmIEVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRSkKKwkJeworCQlFVlBfUEtFWV9DVFggKnBrY3R4ID0gTlVMTDsKKwkJc2l6ZV90IHNsdG1wID0gKHNpemVfdClFVlBfUEtFWV9zaXplKHBrZXkpOworCQlpID0gMDsKKwkJcGtjdHggPSBFVlBfUEtFWV9DVFhfbmV3KHBrZXksIE5VTEwpOworCQlpZiAoIXBrY3R4KQorCQkJZ290byBlcnI7CisJCWlmIChFVlBfUEtFWV9zaWduX2luaXQocGtjdHgpIDw9IDApCisJCQlnb3RvIGVycjsKKwkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfc2lnbmF0dXJlX21kKHBrY3R4LCBjdHgtPmRpZ2VzdCkgPD0gMCkKKwkJCWdvdG8gZXJyOworCQlpZiAoRVZQX1BLRVlfc2lnbihwa2N0eCwgc2lncmV0LCAmc2x0bXAsIG0sIG1fbGVuKSA8PSAwKQorCQkJZ290byBlcnI7CisJCSpzaWdsZW4gPSBzbHRtcDsKKwkJaSA9IDE7CisJCWVycjoKKwkJRVZQX1BLRVlfQ1RYX2ZyZWUocGtjdHgpOworCQlyZXR1cm4gaTsKKwkJfQorCiAJZm9yIChpPTA7IGk8NDsgaSsrKQogCQl7CiAJCXY9Y3R4LT5kaWdlc3QtPnJlcXVpcmVkX3BrZXlfdHlwZVtpXTsKQEAgLTk5LDI4ICsxMjUsMTMgQEAKIAkJRVZQZXJyKEVWUF9GX0VWUF9TSUdORklOQUwsRVZQX1JfV1JPTkdfUFVCTElDX0tFWV9UWVBFKTsKIAkJcmV0dXJuKDApOwogCQl9CisKIAlpZiAoY3R4LT5kaWdlc3QtPnNpZ24gPT0gTlVMTCkKIAkJewogCQlFVlBlcnIoRVZQX0ZfRVZQX1NJR05GSU5BTCxFVlBfUl9OT19TSUdOX0ZVTkNUSU9OX0NPTkZJR1VSRUQpOwogCQlyZXR1cm4oMCk7CiAJCX0KLQlFVlBfTURfQ1RYX2luaXQoJnRtcF9jdHgpOwotCUVWUF9NRF9DVFhfY29weV9leCgmdG1wX2N0eCxjdHgpOwotCWlmIChjdHgtPmRpZ2VzdC0+ZmxhZ3MgJiBFVlBfTURfRkxBR19TVkNUWCkKLQkJewotCQlFVlBfTURfU1ZDVFggc2N0bXA7Ci0JCXNjdG1wLm1jdHggPSAmdG1wX2N0eDsKLQkJc2N0bXAua2V5ID0gcGtleS0+cGtleS5wdHI7Ci0JCWkgPSBjdHgtPmRpZ2VzdC0+c2lnbihjdHgtPmRpZ2VzdC0+dHlwZSwKLQkJCU5VTEwsIC0xLCBzaWdyZXQsIHNpZ2xlbiwgJnNjdG1wKTsKLQkJfQotCWVsc2UKLQkJewotCQlFVlBfRGlnZXN0RmluYWxfZXgoJnRtcF9jdHgsJihtWzBdKSwmbV9sZW4pOwotCQlpID0gY3R4LT5kaWdlc3QtPnNpZ24oY3R4LT5kaWdlc3QtPnR5cGUsbSxtX2xlbixzaWdyZXQsc2lnbGVuLAotCQkJCQlwa2V5LT5wa2V5LnB0cik7Ci0JCX0KLQlFVlBfTURfQ1RYX2NsZWFudXAoJnRtcF9jdHgpOwotCXJldHVybiBpOworCXJldHVybihjdHgtPmRpZ2VzdC0+c2lnbihjdHgtPmRpZ2VzdC0+dHlwZSxtLG1fbGVuLHNpZ3JldCxzaWdsZW4sCisJCXBrZXktPnBrZXkucHRyKSk7CiAJfQogCmRpZmYgLS1naXQgYS9jcnlwdG8vZXZwL3BfdmVyaWZ5LmMgYi9jcnlwdG8vZXZwL3BfdmVyaWZ5LmMKaW5kZXggMmQ0NmRmZi4uOGRiNDY0MSAxMDA2NDQKLS0tIGEvY3J5cHRvL2V2cC9wX3ZlcmlmeS5jCisrKyBiL2NyeXB0by9ldnAvcF92ZXJpZnkuYwpAQCAtNzAsNiArNzAsMjggQEAKIAlpbnQgaSxvaz0wLHY7CiAJTVNfU1RBVElDIEVWUF9NRF9DVFggdG1wX2N0eDsKIAorCUVWUF9NRF9DVFhfaW5pdCgmdG1wX2N0eCk7CisJRVZQX01EX0NUWF9jb3B5X2V4KCZ0bXBfY3R4LGN0eCk7ICAgICAKKwlFVlBfRGlnZXN0RmluYWxfZXgoJnRtcF9jdHgsJihtWzBdKSwmbV9sZW4pOworCUVWUF9NRF9DVFhfY2xlYW51cCgmdG1wX2N0eCk7CisKKwlpZiAoY3R4LT5kaWdlc3QtPmZsYWdzICYgRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFKQorCQl7CisJCUVWUF9QS0VZX0NUWCAqcGtjdHggPSBOVUxMOworCQlpID0gLTE7CisJCXBrY3R4ID0gRVZQX1BLRVlfQ1RYX25ldyhwa2V5LCBOVUxMKTsKKwkJaWYgKCFwa2N0eCkKKwkJCWdvdG8gZXJyOworCQlpZiAoRVZQX1BLRVlfdmVyaWZ5X2luaXQocGtjdHgpIDw9IDApCisJCQlnb3RvIGVycjsKKwkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfc2lnbmF0dXJlX21kKHBrY3R4LCBjdHgtPmRpZ2VzdCkgPD0gMCkKKwkJCWdvdG8gZXJyOworCQlpID0gRVZQX1BLRVlfdmVyaWZ5KHBrY3R4LCBzaWdidWYsIHNpZ2xlbiwgbSwgbV9sZW4pOworCQllcnI6CisJCUVWUF9QS0VZX0NUWF9mcmVlKHBrY3R4KTsKKwkJcmV0dXJuIGk7CisJCX0KKwogCWZvciAoaT0wOyBpPDQ7IGkrKykKIAkJewogCQl2PWN0eC0+ZGlnZXN0LT5yZXF1aXJlZF9wa2V5X3R5cGVbaV07CkBAIC04NSwyOSArMTA3LDEzIEBACiAJCUVWUGVycihFVlBfRl9FVlBfVkVSSUZZRklOQUwsRVZQX1JfV1JPTkdfUFVCTElDX0tFWV9UWVBFKTsKIAkJcmV0dXJuKC0xKTsKIAkJfQotCWlmIChjdHgtPmRpZ2VzdC0+dmVyaWZ5ID09IE5VTEwpCisgICAgICAgIGlmIChjdHgtPmRpZ2VzdC0+dmVyaWZ5ID09IE5VTEwpCiAgICAgICAgICAgICAgICAgewogCQlFVlBlcnIoRVZQX0ZfRVZQX1ZFUklGWUZJTkFMLEVWUF9SX05PX1ZFUklGWV9GVU5DVElPTl9DT05GSUdVUkVEKTsKIAkJcmV0dXJuKDApOwogCQl9CiAKLQlFVlBfTURfQ1RYX2luaXQoJnRtcF9jdHgpOwotCUVWUF9NRF9DVFhfY29weV9leCgmdG1wX2N0eCxjdHgpOyAgICAgCi0JaWYgKGN0eC0+ZGlnZXN0LT5mbGFncyAmIEVWUF9NRF9GTEFHX1NWQ1RYKQotCQl7Ci0JCUVWUF9NRF9TVkNUWCBzY3RtcDsKLQkJc2N0bXAubWN0eCA9ICZ0bXBfY3R4OwotCQlzY3RtcC5rZXkgPSBwa2V5LT5wa2V5LnB0cjsKLQkJaSA9IGN0eC0+ZGlnZXN0LT52ZXJpZnkoY3R4LT5kaWdlc3QtPnR5cGUsCi0JCQlOVUxMLCAtMSwgc2lnYnVmLCBzaWdsZW4sICZzY3RtcCk7Ci0JCX0KLQllbHNlCi0JCXsKLQkJRVZQX0RpZ2VzdEZpbmFsX2V4KCZ0bXBfY3R4LCYobVswXSksJm1fbGVuKTsKLQkJaSA9IGN0eC0+ZGlnZXN0LT52ZXJpZnkoY3R4LT5kaWdlc3QtPnR5cGUsbSxtX2xlbiwKLQkJCQkJc2lnYnVmLHNpZ2xlbixwa2V5LT5wa2V5LnB0cik7Ci0JCX0KLQlFVlBfTURfQ1RYX2NsZWFudXAoJnRtcF9jdHgpOwotCXJldHVybiBpOworCXJldHVybihjdHgtPmRpZ2VzdC0+dmVyaWZ5KGN0eC0+ZGlnZXN0LT50eXBlLG0sbV9sZW4sCisJCXNpZ2J1ZixzaWdsZW4scGtleS0+cGtleS5wdHIpKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2NyeXB0by9ldnAvcG1ldGhfZm4uYyBiL2NyeXB0by9ldnAvcG1ldGhfZm4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDY3NmYyCi0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL2V2cC9wbWV0aF9mbi5jCkBAIC0wLDAgKzEsMzY4IEBACisvKiBwbWV0aF9mbi5jICovCisvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKyAqIHByb2plY3QgMjAwNi4KKyAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoYykgMjAwNiBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKyAqCisgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisgKgorICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisgKgorICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworICogICAgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorICoKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJjcnlwdGxpYi5oIgorI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgorI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisjaW5jbHVkZSAiZXZwX2xvY2wuaCIKKworI2RlZmluZSBNX2NoZWNrX2F1dG9hcmcoY3R4LCBhcmcsIGFyZ2xlbiwgZXJyKSBcCisJaWYgKGN0eC0+cG1ldGgtPmZsYWdzICYgRVZQX1BLRVlfRkxBR19BVVRPQVJHTEVOKSBcCisJCXsgXAorCQlzaXplX3QgcGtzaXplID0gKHNpemVfdClFVlBfUEtFWV9zaXplKGN0eC0+cGtleSk7IFwKKwkJaWYgKCFhcmcpIFwKKwkJCXsgXAorCQkJKmFyZ2xlbiA9IHBrc2l6ZTsgXAorCQkJcmV0dXJuIDE7IFwKKwkJCX0gXAorCQllbHNlIGlmICgqYXJnbGVuIDwgcGtzaXplKSBcCisJCQl7IFwKKwkJCUVWUGVycihlcnIsIEVWUF9SX0JVRkZFUl9UT09fU01BTEwpOyAvKmNrZXJyX2lnbm9yZSovXAorCQkJcmV0dXJuIDA7IFwKKwkJCX0gXAorCQl9CisKK2ludCBFVlBfUEtFWV9zaWduX2luaXQoRVZQX1BLRVlfQ1RYICpjdHgpCisJeworCWludCByZXQ7CisJaWYgKCFjdHggfHwgIWN0eC0+cG1ldGggfHwgIWN0eC0+cG1ldGgtPnNpZ24pCisJCXsKKwkJRVZQZXJyKEVWUF9GX0VWUF9QS0VZX1NJR05fSU5JVCwKKwkJCUVWUF9SX09QRVJBVElPTl9OT1RfU1VQUE9SVEVEX0ZPUl9USElTX0tFWVRZUEUpOworCQlyZXR1cm4gLTI7CisJCX0KKwljdHgtPm9wZXJhdGlvbiA9IEVWUF9QS0VZX09QX1NJR047CisJaWYgKCFjdHgtPnBtZXRoLT5zaWduX2luaXQpCisJCXJldHVybiAxOworCXJldCA9IGN0eC0+cG1ldGgtPnNpZ25faW5pdChjdHgpOworCWlmIChyZXQgPD0gMCkKKwkJY3R4LT5vcGVyYXRpb24gPSBFVlBfUEtFWV9PUF9VTkRFRklORUQ7CisJcmV0dXJuIHJldDsKKwl9CisKK2ludCBFVlBfUEtFWV9zaWduKEVWUF9QS0VZX0NUWCAqY3R4LAorCQkJdW5zaWduZWQgY2hhciAqc2lnLCBzaXplX3QgKnNpZ2xlbiwKKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnRicywgc2l6ZV90IHRic2xlbikKKwl7CisJaWYgKCFjdHggfHwgIWN0eC0+cG1ldGggfHwgIWN0eC0+cG1ldGgtPnNpZ24pCisJCXsKKwkJRVZQZXJyKEVWUF9GX0VWUF9QS0VZX1NJR04sCisJCQlFVlBfUl9PUEVSQVRJT05fTk9UX1NVUFBPUlRFRF9GT1JfVEhJU19LRVlUWVBFKTsKKwkJcmV0dXJuIC0yOworCQl9CisJaWYgKGN0eC0+b3BlcmF0aW9uICE9IEVWUF9QS0VZX09QX1NJR04pCisJCXsKKwkJRVZQZXJyKEVWUF9GX0VWUF9QS0VZX1NJR04sIEVWUF9SX09QRVJBVE9OX05PVF9JTklUSUFMSVpFRCk7CisJCXJldHVybiAtMTsKKwkJfQorCU1fY2hlY2tfYXV0b2FyZyhjdHgsIHNpZywgc2lnbGVuLCBFVlBfRl9FVlBfUEtFWV9TSUdOKQorCXJldHVybiBjdHgtPnBtZXRoLT5zaWduKGN0eCwgc2lnLCBzaWdsZW4sIHRicywgdGJzbGVuKTsKKwl9CisKK2ludCBFVlBfUEtFWV92ZXJpZnlfaW5pdChFVlBfUEtFWV9DVFggKmN0eCkKKwl7CisJaW50IHJldDsKKwlpZiAoIWN0eCB8fCAhY3R4LT5wbWV0aCB8fCAhY3R4LT5wbWV0aC0+dmVyaWZ5KQorCQl7CisJCUVWUGVycihFVlBfRl9FVlBfUEtFWV9WRVJJRllfSU5JVCwKKwkJCUVWUF9SX09QRVJBVElPTl9OT1RfU1VQUE9SVEVEX0ZPUl9USElTX0tFWVRZUEUpOworCQlyZXR1cm4gLTI7CisJCX0KKwljdHgtPm9wZXJhdGlvbiA9IEVWUF9QS0VZX09QX1ZFUklGWTsKKwlpZiAoIWN0eC0+cG1ldGgtPnZlcmlmeV9pbml0KQorCQlyZXR1cm4gMTsKKwlyZXQgPSBjdHgtPnBtZXRoLT52ZXJpZnlfaW5pdChjdHgpOworCWlmIChyZXQgPD0gMCkKKwkJY3R4LT5vcGVyYXRpb24gPSBFVlBfUEtFWV9PUF9VTkRFRklORUQ7CisJcmV0dXJuIHJldDsKKwl9CisKK2ludCBFVlBfUEtFWV92ZXJpZnkoRVZQX1BLRVlfQ1RYICpjdHgsCisJCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaWcsIHNpemVfdCBzaWdsZW4sCisJCQljb25zdCB1bnNpZ25lZCBjaGFyICp0YnMsIHNpemVfdCB0YnNsZW4pCisJeworCWlmICghY3R4IHx8ICFjdHgtPnBtZXRoIHx8ICFjdHgtPnBtZXRoLT52ZXJpZnkpCisJCXsKKwkJRVZQZXJyKEVWUF9GX0VWUF9QS0VZX1ZFUklGWSwKKwkJCUVWUF9SX09QRVJBVElPTl9OT1RfU1VQUE9SVEVEX0ZPUl9USElTX0tFWVRZUEUpOworCQlyZXR1cm4gLTI7CisJCX0KKwlpZiAoY3R4LT5vcGVyYXRpb24gIT0gRVZQX1BLRVlfT1BfVkVSSUZZKQorCQl7CisJCUVWUGVycihFVlBfRl9FVlBfUEtFWV9WRVJJRlksIEVWUF9SX09QRVJBVE9OX05PVF9JTklUSUFMSVpFRCk7CisJCXJldHVybiAtMTsKKwkJfQorCXJldHVybiBjdHgtPnBtZXRoLT52ZXJpZnkoY3R4LCBzaWcsIHNpZ2xlbiwgdGJzLCB0YnNsZW4pOworCX0KKworaW50IEVWUF9QS0VZX3ZlcmlmeV9yZWNvdmVyX2luaXQoRVZQX1BLRVlfQ1RYICpjdHgpCisJeworCWludCByZXQ7CisJaWYgKCFjdHggfHwgIWN0eC0+cG1ldGggfHwgIWN0eC0+cG1ldGgtPnZlcmlmeV9yZWNvdmVyKQorCQl7CisJCUVWUGVycihFVlBfRl9FVlBfUEtFWV9WRVJJRllfUkVDT1ZFUl9JTklULAorCQkJRVZQX1JfT1BFUkFUSU9OX05PVF9TVVBQT1JURURfRk9SX1RISVNfS0VZVFlQRSk7CisJCXJldHVybiAtMjsKKwkJfQorCWN0eC0+b3BlcmF0aW9uID0gRVZQX1BLRVlfT1BfVkVSSUZZUkVDT1ZFUjsKKwlpZiAoIWN0eC0+cG1ldGgtPnZlcmlmeV9yZWNvdmVyX2luaXQpCisJCXJldHVybiAxOworCXJldCA9IGN0eC0+cG1ldGgtPnZlcmlmeV9yZWNvdmVyX2luaXQoY3R4KTsKKwlpZiAocmV0IDw9IDApCisJCWN0eC0+b3BlcmF0aW9uID0gRVZQX1BLRVlfT1BfVU5ERUZJTkVEOworCXJldHVybiByZXQ7CisJfQorCitpbnQgRVZQX1BLRVlfdmVyaWZ5X3JlY292ZXIoRVZQX1BLRVlfQ1RYICpjdHgsCisJCQl1bnNpZ25lZCBjaGFyICpyb3V0LCBzaXplX3QgKnJvdXRsZW4sCisJCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaWcsIHNpemVfdCBzaWdsZW4pCisJeworCWlmICghY3R4IHx8ICFjdHgtPnBtZXRoIHx8ICFjdHgtPnBtZXRoLT52ZXJpZnlfcmVjb3ZlcikKKwkJeworCQlFVlBlcnIoRVZQX0ZfRVZQX1BLRVlfVkVSSUZZX1JFQ09WRVIsCisJCQlFVlBfUl9PUEVSQVRJT05fTk9UX1NVUFBPUlRFRF9GT1JfVEhJU19LRVlUWVBFKTsKKwkJcmV0dXJuIC0yOworCQl9CisJaWYgKGN0eC0+b3BlcmF0aW9uICE9IEVWUF9QS0VZX09QX1ZFUklGWVJFQ09WRVIpCisJCXsKKwkJRVZQZXJyKEVWUF9GX0VWUF9QS0VZX1ZFUklGWV9SRUNPVkVSLCBFVlBfUl9PUEVSQVRPTl9OT1RfSU5JVElBTElaRUQpOworCQlyZXR1cm4gLTE7CisJCX0KKwlNX2NoZWNrX2F1dG9hcmcoY3R4LCByb3V0LCByb3V0bGVuLCBFVlBfRl9FVlBfUEtFWV9WRVJJRllfUkVDT1ZFUikKKwlyZXR1cm4gY3R4LT5wbWV0aC0+dmVyaWZ5X3JlY292ZXIoY3R4LCByb3V0LCByb3V0bGVuLCBzaWcsIHNpZ2xlbik7CisJfQorCitpbnQgRVZQX1BLRVlfZW5jcnlwdF9pbml0KEVWUF9QS0VZX0NUWCAqY3R4KQorCXsKKwlpbnQgcmV0OworCWlmICghY3R4IHx8ICFjdHgtPnBtZXRoIHx8ICFjdHgtPnBtZXRoLT5lbmNyeXB0KQorCQl7CisJCUVWUGVycihFVlBfRl9FVlBfUEtFWV9FTkNSWVBUX0lOSVQsCisJCQlFVlBfUl9PUEVSQVRJT05fTk9UX1NVUFBPUlRFRF9GT1JfVEhJU19LRVlUWVBFKTsKKwkJcmV0dXJuIC0yOworCQl9CisJY3R4LT5vcGVyYXRpb24gPSBFVlBfUEtFWV9PUF9FTkNSWVBUOworCWlmICghY3R4LT5wbWV0aC0+ZW5jcnlwdF9pbml0KQorCQlyZXR1cm4gMTsKKwlyZXQgPSBjdHgtPnBtZXRoLT5lbmNyeXB0X2luaXQoY3R4KTsKKwlpZiAocmV0IDw9IDApCisJCWN0eC0+b3BlcmF0aW9uID0gRVZQX1BLRVlfT1BfVU5ERUZJTkVEOworCXJldHVybiByZXQ7CisJfQorCitpbnQgRVZQX1BLRVlfZW5jcnlwdChFVlBfUEtFWV9DVFggKmN0eCwKKwkJCXVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90ICpvdXRsZW4sCisJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGlubGVuKQorCXsKKwlpZiAoIWN0eCB8fCAhY3R4LT5wbWV0aCB8fCAhY3R4LT5wbWV0aC0+ZW5jcnlwdCkKKwkJeworCQlFVlBlcnIoRVZQX0ZfRVZQX1BLRVlfRU5DUllQVCwKKwkJCUVWUF9SX09QRVJBVElPTl9OT1RfU1VQUE9SVEVEX0ZPUl9USElTX0tFWVRZUEUpOworCQlyZXR1cm4gLTI7CisJCX0KKwlpZiAoY3R4LT5vcGVyYXRpb24gIT0gRVZQX1BLRVlfT1BfRU5DUllQVCkKKwkJeworCQlFVlBlcnIoRVZQX0ZfRVZQX1BLRVlfRU5DUllQVCwgRVZQX1JfT1BFUkFUT05fTk9UX0lOSVRJQUxJWkVEKTsKKwkJcmV0dXJuIC0xOworCQl9CisJTV9jaGVja19hdXRvYXJnKGN0eCwgb3V0LCBvdXRsZW4sIEVWUF9GX0VWUF9QS0VZX0VOQ1JZUFQpCisJcmV0dXJuIGN0eC0+cG1ldGgtPmVuY3J5cHQoY3R4LCBvdXQsIG91dGxlbiwgaW4sIGlubGVuKTsKKwl9CisKK2ludCBFVlBfUEtFWV9kZWNyeXB0X2luaXQoRVZQX1BLRVlfQ1RYICpjdHgpCisJeworCWludCByZXQ7CisJaWYgKCFjdHggfHwgIWN0eC0+cG1ldGggfHwgIWN0eC0+cG1ldGgtPmRlY3J5cHQpCisJCXsKKwkJRVZQZXJyKEVWUF9GX0VWUF9QS0VZX0RFQ1JZUFRfSU5JVCwKKwkJCUVWUF9SX09QRVJBVElPTl9OT1RfU1VQUE9SVEVEX0ZPUl9USElTX0tFWVRZUEUpOworCQlyZXR1cm4gLTI7CisJCX0KKwljdHgtPm9wZXJhdGlvbiA9IEVWUF9QS0VZX09QX0RFQ1JZUFQ7CisJaWYgKCFjdHgtPnBtZXRoLT5kZWNyeXB0X2luaXQpCisJCXJldHVybiAxOworCXJldCA9IGN0eC0+cG1ldGgtPmRlY3J5cHRfaW5pdChjdHgpOworCWlmIChyZXQgPD0gMCkKKwkJY3R4LT5vcGVyYXRpb24gPSBFVlBfUEtFWV9PUF9VTkRFRklORUQ7CisJcmV0dXJuIHJldDsKKwl9CisKK2ludCBFVlBfUEtFWV9kZWNyeXB0KEVWUF9QS0VZX0NUWCAqY3R4LAorCQkJdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3QgKm91dGxlbiwKKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgaW5sZW4pCisJeworCWlmICghY3R4IHx8ICFjdHgtPnBtZXRoIHx8ICFjdHgtPnBtZXRoLT5kZWNyeXB0KQorCQl7CisJCUVWUGVycihFVlBfRl9FVlBfUEtFWV9ERUNSWVBULAorCQkJRVZQX1JfT1BFUkFUSU9OX05PVF9TVVBQT1JURURfRk9SX1RISVNfS0VZVFlQRSk7CisJCXJldHVybiAtMjsKKwkJfQorCWlmIChjdHgtPm9wZXJhdGlvbiAhPSBFVlBfUEtFWV9PUF9ERUNSWVBUKQorCQl7CisJCUVWUGVycihFVlBfRl9FVlBfUEtFWV9ERUNSWVBULCBFVlBfUl9PUEVSQVRPTl9OT1RfSU5JVElBTElaRUQpOworCQlyZXR1cm4gLTE7CisJCX0KKwlNX2NoZWNrX2F1dG9hcmcoY3R4LCBvdXQsIG91dGxlbiwgRVZQX0ZfRVZQX1BLRVlfREVDUllQVCkKKwlyZXR1cm4gY3R4LT5wbWV0aC0+ZGVjcnlwdChjdHgsIG91dCwgb3V0bGVuLCBpbiwgaW5sZW4pOworCX0KKworCitpbnQgRVZQX1BLRVlfZGVyaXZlX2luaXQoRVZQX1BLRVlfQ1RYICpjdHgpCisJeworCWludCByZXQ7CisJaWYgKCFjdHggfHwgIWN0eC0+cG1ldGggfHwgIWN0eC0+cG1ldGgtPmRlcml2ZSkKKwkJeworCQlFVlBlcnIoRVZQX0ZfRVZQX1BLRVlfREVSSVZFX0lOSVQsCisJCQlFVlBfUl9PUEVSQVRJT05fTk9UX1NVUFBPUlRFRF9GT1JfVEhJU19LRVlUWVBFKTsKKwkJcmV0dXJuIC0yOworCQl9CisJY3R4LT5vcGVyYXRpb24gPSBFVlBfUEtFWV9PUF9ERVJJVkU7CisJaWYgKCFjdHgtPnBtZXRoLT5kZXJpdmVfaW5pdCkKKwkJcmV0dXJuIDE7CisJcmV0ID0gY3R4LT5wbWV0aC0+ZGVyaXZlX2luaXQoY3R4KTsKKwlpZiAocmV0IDw9IDApCisJCWN0eC0+b3BlcmF0aW9uID0gRVZQX1BLRVlfT1BfVU5ERUZJTkVEOworCXJldHVybiByZXQ7CisJfQorCitpbnQgRVZQX1BLRVlfZGVyaXZlX3NldF9wZWVyKEVWUF9QS0VZX0NUWCAqY3R4LCBFVlBfUEtFWSAqcGVlcikKKwl7CisJaW50IHJldDsKKwlpZiAoIWN0eCB8fCAhY3R4LT5wbWV0aCB8fCAhKGN0eC0+cG1ldGgtPmRlcml2ZXx8Y3R4LT5wbWV0aC0+ZW5jcnlwdHx8Y3R4LT5wbWV0aC0+ZGVjcnlwdCkgfHwgIWN0eC0+cG1ldGgtPmN0cmwpCisJCXsKKwkJRVZQZXJyKEVWUF9GX0VWUF9QS0VZX0RFUklWRV9TRVRfUEVFUiwKKwkJCUVWUF9SX09QRVJBVElPTl9OT1RfU1VQUE9SVEVEX0ZPUl9USElTX0tFWVRZUEUpOworCQlyZXR1cm4gLTI7CisJCX0KKwlpZiAoY3R4LT5vcGVyYXRpb24gIT0gRVZQX1BLRVlfT1BfREVSSVZFICYmIGN0eC0+b3BlcmF0aW9uICE9IEVWUF9QS0VZX09QX0VOQ1JZUFQgJiYgY3R4LT5vcGVyYXRpb24gIT0gRVZQX1BLRVlfT1BfREVDUllQVCkKKwkJeworCQlFVlBlcnIoRVZQX0ZfRVZQX1BLRVlfREVSSVZFX1NFVF9QRUVSLAorCQkJCQlFVlBfUl9PUEVSQVRPTl9OT1RfSU5JVElBTElaRUQpOworCQlyZXR1cm4gLTE7CisJCX0KKworCXJldCA9IGN0eC0+cG1ldGgtPmN0cmwoY3R4LCBFVlBfUEtFWV9DVFJMX1BFRVJfS0VZLCAwLCBwZWVyKTsKKworCWlmIChyZXQgPD0gMCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChyZXQgPT0gMikKKwkJcmV0dXJuIDE7CisKKwlpZiAoIWN0eC0+cGtleSkKKwkJeworCQlFVlBlcnIoRVZQX0ZfRVZQX1BLRVlfREVSSVZFX1NFVF9QRUVSLCBFVlBfUl9OT19LRVlfU0VUKTsKKwkJcmV0dXJuIC0xOworCQl9CisKKwlpZiAoY3R4LT5wa2V5LT50eXBlICE9IHBlZXItPnR5cGUpCisJCXsKKwkJRVZQZXJyKEVWUF9GX0VWUF9QS0VZX0RFUklWRV9TRVRfUEVFUiwKKwkJCQkJCUVWUF9SX0RJRkZFUkVOVF9LRVlfVFlQRVMpOworCQlyZXR1cm4gLTE7CisJCX0KKworCS8qIHJhbkBjcnlwdG9jb20ucnU6IEZvciBjbGFyaXR5LiAgVGhlIGVycm9yIGlzIGlmIHBhcmFtZXRlcnMgaW4gcGVlciBhcmUKKwkgKiBwcmVzZW50ICghbWlzc2luZykgYnV0IGRvbid0IG1hdGNoLiAgRVZQX1BLRVlfY21wX3BhcmFtZXRlcnMgbWF5IHJldHVybgorCSAqIDEgKG1hdGNoKSwgMCAoZG9uJ3QgbWF0Y2gpIGFuZCAtMiAoY29tcGFyaXNvbiBpcyBub3QgZGVmaW5lZCkuICAtMQorCSAqIChkaWZmZXJlbnQga2V5IHR5cGVzKSBpcyBpbXBvc3NpYmxlIGhlcmUgYmVjYXVzZSBpdCBpcyBjaGVja2VkIGVhcmxpZXIuCisJICogLTIgaXMgT0sgZm9yIHVzIGhlcmUsIGFzIHdlbGwgYXMgMSwgc28gd2UgY2FuIGNoZWNrIGZvciAwIG9ubHkuICovCisJaWYgKCFFVlBfUEtFWV9taXNzaW5nX3BhcmFtZXRlcnMocGVlcikgJiYKKwkJIUVWUF9QS0VZX2NtcF9wYXJhbWV0ZXJzKGN0eC0+cGtleSwgcGVlcikpCisJCXsKKwkJRVZQZXJyKEVWUF9GX0VWUF9QS0VZX0RFUklWRV9TRVRfUEVFUiwKKwkJCQkJCUVWUF9SX0RJRkZFUkVOVF9QQVJBTUVURVJTKTsKKwkJcmV0dXJuIC0xOworCQl9CisKKwlpZiAoY3R4LT5wZWVya2V5KQorCQlFVlBfUEtFWV9mcmVlKGN0eC0+cGVlcmtleSk7CisJY3R4LT5wZWVya2V5ID0gcGVlcjsKKworCXJldCA9IGN0eC0+cG1ldGgtPmN0cmwoY3R4LCBFVlBfUEtFWV9DVFJMX1BFRVJfS0VZLCAxLCBwZWVyKTsKKworCWlmIChyZXQgPD0gMCkKKwkJeworCQljdHgtPnBlZXJrZXkgPSBOVUxMOworCQlyZXR1cm4gcmV0OworCQl9CisKKwlDUllQVE9fYWRkKCZwZWVyLT5yZWZlcmVuY2VzLDEsQ1JZUFRPX0xPQ0tfRVZQX1BLRVkpOworCXJldHVybiAxOworCX0KKworCitpbnQgRVZQX1BLRVlfZGVyaXZlKEVWUF9QS0VZX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICprZXksIHNpemVfdCAqcGtleWxlbikKKwl7CisJaWYgKCFjdHggfHwgIWN0eC0+cG1ldGggfHwgIWN0eC0+cG1ldGgtPmRlcml2ZSkKKwkJeworCQlFVlBlcnIoRVZQX0ZfRVZQX1BLRVlfREVSSVZFLAorCQkJRVZQX1JfT1BFUkFUSU9OX05PVF9TVVBQT1JURURfRk9SX1RISVNfS0VZVFlQRSk7CisJCXJldHVybiAtMjsKKwkJfQorCWlmIChjdHgtPm9wZXJhdGlvbiAhPSBFVlBfUEtFWV9PUF9ERVJJVkUpCisJCXsKKwkJRVZQZXJyKEVWUF9GX0VWUF9QS0VZX0RFUklWRSwgRVZQX1JfT1BFUkFUT05fTk9UX0lOSVRJQUxJWkVEKTsKKwkJcmV0dXJuIC0xOworCQl9CisJTV9jaGVja19hdXRvYXJnKGN0eCwga2V5LCBwa2V5bGVuLCBFVlBfRl9FVlBfUEtFWV9ERVJJVkUpCisJcmV0dXJuIGN0eC0+cG1ldGgtPmRlcml2ZShjdHgsIGtleSwgcGtleWxlbik7CisJfQorCmRpZmYgLS1naXQgYS9jcnlwdG8vZXZwL3BtZXRoX2duLmMgYi9jcnlwdG8vZXZwL3BtZXRoX2duLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ3NDE2MQotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9ldnAvcG1ldGhfZ24uYwpAQCAtMCwwICsxLDIyMCBAQAorLyogcG1ldGhfZ24uYyAqLworLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisgKiBwcm9qZWN0IDIwMDYuCisgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisgKgorICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgorICoKKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorICoKKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKyAqICAgIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCisgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAqCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAiY3J5cHRsaWIuaCIKKyNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKyNpbmNsdWRlICJldnBfbG9jbC5oIgorCitpbnQgRVZQX1BLRVlfcGFyYW1nZW5faW5pdChFVlBfUEtFWV9DVFggKmN0eCkKKwl7CisJaW50IHJldDsKKwlpZiAoIWN0eCB8fCAhY3R4LT5wbWV0aCB8fCAhY3R4LT5wbWV0aC0+cGFyYW1nZW4pCisJCXsKKwkJRVZQZXJyKEVWUF9GX0VWUF9QS0VZX1BBUkFNR0VOX0lOSVQsCisJCQlFVlBfUl9PUEVSQVRJT05fTk9UX1NVUFBPUlRFRF9GT1JfVEhJU19LRVlUWVBFKTsKKwkJcmV0dXJuIC0yOworCQl9CisJY3R4LT5vcGVyYXRpb24gPSBFVlBfUEtFWV9PUF9QQVJBTUdFTjsKKwlpZiAoIWN0eC0+cG1ldGgtPnBhcmFtZ2VuX2luaXQpCisJCXJldHVybiAxOworCXJldCA9IGN0eC0+cG1ldGgtPnBhcmFtZ2VuX2luaXQoY3R4KTsKKwlpZiAocmV0IDw9IDApCisJCWN0eC0+b3BlcmF0aW9uID0gRVZQX1BLRVlfT1BfVU5ERUZJTkVEOworCXJldHVybiByZXQ7CisJfQorCitpbnQgRVZQX1BLRVlfcGFyYW1nZW4oRVZQX1BLRVlfQ1RYICpjdHgsIEVWUF9QS0VZICoqcHBrZXkpCisJeworCWludCByZXQ7CisJaWYgKCFjdHggfHwgIWN0eC0+cG1ldGggfHwgIWN0eC0+cG1ldGgtPnBhcmFtZ2VuKQorCQl7CisJCUVWUGVycihFVlBfRl9FVlBfUEtFWV9QQVJBTUdFTiwKKwkJCUVWUF9SX09QRVJBVElPTl9OT1RfU1VQUE9SVEVEX0ZPUl9USElTX0tFWVRZUEUpOworCQlyZXR1cm4gLTI7CisJCX0KKworCWlmIChjdHgtPm9wZXJhdGlvbiAhPSBFVlBfUEtFWV9PUF9QQVJBTUdFTikKKwkJeworCQlFVlBlcnIoRVZQX0ZfRVZQX1BLRVlfUEFSQU1HRU4sIEVWUF9SX09QRVJBVE9OX05PVF9JTklUSUFMSVpFRCk7CisJCXJldHVybiAtMTsKKwkJfQorCisJaWYgKCFwcGtleSkKKwkJcmV0dXJuIC0xOworCisJaWYgKCEqcHBrZXkpCisJCSpwcGtleSA9IEVWUF9QS0VZX25ldygpOworCisJcmV0ID0gY3R4LT5wbWV0aC0+cGFyYW1nZW4oY3R4LCAqcHBrZXkpOworCWlmIChyZXQgPD0gMCkKKwkJeworCQlFVlBfUEtFWV9mcmVlKCpwcGtleSk7CisJCSpwcGtleSA9IE5VTEw7CisJCX0KKwlyZXR1cm4gcmV0OworCX0KKworaW50IEVWUF9QS0VZX2tleWdlbl9pbml0KEVWUF9QS0VZX0NUWCAqY3R4KQorCXsKKwlpbnQgcmV0OworCWlmICghY3R4IHx8ICFjdHgtPnBtZXRoIHx8ICFjdHgtPnBtZXRoLT5rZXlnZW4pCisJCXsKKwkJRVZQZXJyKEVWUF9GX0VWUF9QS0VZX0tFWUdFTl9JTklULAorCQkJRVZQX1JfT1BFUkFUSU9OX05PVF9TVVBQT1JURURfRk9SX1RISVNfS0VZVFlQRSk7CisJCXJldHVybiAtMjsKKwkJfQorCWN0eC0+b3BlcmF0aW9uID0gRVZQX1BLRVlfT1BfS0VZR0VOOworCWlmICghY3R4LT5wbWV0aC0+a2V5Z2VuX2luaXQpCisJCXJldHVybiAxOworCXJldCA9IGN0eC0+cG1ldGgtPmtleWdlbl9pbml0KGN0eCk7CisJaWYgKHJldCA8PSAwKQorCQljdHgtPm9wZXJhdGlvbiA9IEVWUF9QS0VZX09QX1VOREVGSU5FRDsKKwlyZXR1cm4gcmV0OworCX0KKworaW50IEVWUF9QS0VZX2tleWdlbihFVlBfUEtFWV9DVFggKmN0eCwgRVZQX1BLRVkgKipwcGtleSkKKwl7CisJaW50IHJldDsKKworCWlmICghY3R4IHx8ICFjdHgtPnBtZXRoIHx8ICFjdHgtPnBtZXRoLT5rZXlnZW4pCisJCXsKKwkJRVZQZXJyKEVWUF9GX0VWUF9QS0VZX0tFWUdFTiwKKwkJCUVWUF9SX09QRVJBVElPTl9OT1RfU1VQUE9SVEVEX0ZPUl9USElTX0tFWVRZUEUpOworCQlyZXR1cm4gLTI7CisJCX0KKwlpZiAoY3R4LT5vcGVyYXRpb24gIT0gRVZQX1BLRVlfT1BfS0VZR0VOKQorCQl7CisJCUVWUGVycihFVlBfRl9FVlBfUEtFWV9LRVlHRU4sIEVWUF9SX09QRVJBVE9OX05PVF9JTklUSUFMSVpFRCk7CisJCXJldHVybiAtMTsKKwkJfQorCisJaWYgKCFwcGtleSkKKwkJcmV0dXJuIC0xOworCisJaWYgKCEqcHBrZXkpCisJCSpwcGtleSA9IEVWUF9QS0VZX25ldygpOworCisJcmV0ID0gY3R4LT5wbWV0aC0+a2V5Z2VuKGN0eCwgKnBwa2V5KTsKKwlpZiAocmV0IDw9IDApCisJCXsKKwkJRVZQX1BLRVlfZnJlZSgqcHBrZXkpOworCQkqcHBrZXkgPSBOVUxMOworCQl9CisJcmV0dXJuIHJldDsKKwl9CisKK3ZvaWQgRVZQX1BLRVlfQ1RYX3NldF9jYihFVlBfUEtFWV9DVFggKmN0eCwgRVZQX1BLRVlfZ2VuX2NiICpjYikKKwl7CisJY3R4LT5wa2V5X2dlbmNiID0gY2I7CisJfQorCitFVlBfUEtFWV9nZW5fY2IgKkVWUF9QS0VZX0NUWF9nZXRfY2IoRVZQX1BLRVlfQ1RYICpjdHgpCisJeworCXJldHVybiBjdHgtPnBrZXlfZ2VuY2I7CisJfQorCisvKiAidHJhbnNsYXRpb24gY2FsbGJhY2siIHRvIGNhbGwgRVZQX1BLRVlfQ1RYIGNhbGxiYWNrcyB1c2luZyBCTl9HRU5DQgorICogc3R5bGUgY2FsbGJhY2tzLgorICovCisKK3N0YXRpYyBpbnQgdHJhbnNfY2IoaW50IGEsIGludCBiLCBCTl9HRU5DQiAqZ2NiKQorCXsKKwlFVlBfUEtFWV9DVFggKmN0eCA9IGdjYi0+YXJnOworCWN0eC0+a2V5Z2VuX2luZm9bMF0gPSBhOworCWN0eC0+a2V5Z2VuX2luZm9bMV0gPSBiOworCXJldHVybiBjdHgtPnBrZXlfZ2VuY2IoY3R4KTsKKwl9CQorCit2b2lkIGV2cF9wa2V5X3NldF9jYl90cmFuc2xhdGUoQk5fR0VOQ0IgKmNiLCBFVlBfUEtFWV9DVFggKmN0eCkKKwl7CisJQk5fR0VOQ0Jfc2V0KGNiLCB0cmFuc19jYiwgY3R4KQorCX0KKworaW50IEVWUF9QS0VZX0NUWF9nZXRfa2V5Z2VuX2luZm8oRVZQX1BLRVlfQ1RYICpjdHgsIGludCBpZHgpCisJeworCWlmIChpZHggPT0gLTEpCisJCXJldHVybiBjdHgtPmtleWdlbl9pbmZvX2NvdW50OyAKKwlpZiAoaWR4IDwgMCB8fCBpZHggPiBjdHgtPmtleWdlbl9pbmZvX2NvdW50KQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gY3R4LT5rZXlnZW5faW5mb1tpZHhdOworCX0KKworRVZQX1BLRVkgKkVWUF9QS0VZX25ld19tYWNfa2V5KGludCB0eXBlLCBFTkdJTkUgKmUsCisJCQkJdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuKQorCXsKKwlFVlBfUEtFWV9DVFggKm1hY19jdHggPSBOVUxMOworCUVWUF9QS0VZICptYWNfa2V5ID0gTlVMTDsKKwltYWNfY3R4ID0gRVZQX1BLRVlfQ1RYX25ld19pZCh0eXBlLCBlKTsKKwlpZiAoIW1hY19jdHgpCisJCXJldHVybiBOVUxMOworCWlmIChFVlBfUEtFWV9rZXlnZW5faW5pdChtYWNfY3R4KSA8PSAwKQorCQlnb3RvIG1lcnI7CisJaWYgKEVWUF9QS0VZX0NUWF9jdHJsKG1hY19jdHgsIC0xLCBFVlBfUEtFWV9PUF9LRVlHRU4sCisJCQkJRVZQX1BLRVlfQ1RSTF9TRVRfTUFDX0tFWSwga2V5bGVuLCBrZXkpIDw9IDApCisJCWdvdG8gbWVycjsKKwlpZiAoRVZQX1BLRVlfa2V5Z2VuKG1hY19jdHgsICZtYWNfa2V5KSA8PSAwKQorCQlnb3RvIG1lcnI7CisJbWVycjoKKwlpZiAobWFjX2N0eCkKKwkJRVZQX1BLRVlfQ1RYX2ZyZWUobWFjX2N0eCk7CisJcmV0dXJuIG1hY19rZXk7CisJfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2V2cC9wbWV0aF9saWIuYyBiL2NyeXB0by9ldnAvcG1ldGhfbGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEwNWYwYgotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9ldnAvcG1ldGhfbGliLmMKQEAgLTAsMCArMSw1MzcgQEAKKy8qIHBtZXRoX2xpYi5jICovCisvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKyAqIHByb2plY3QgMjAwNi4KKyAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoYykgMjAwNiBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKyAqCisgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisgKgorICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisgKgorICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworICogICAgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorICoKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJjcnlwdGxpYi5oIgorI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgorI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCisjaW5jbHVkZSA8b3BlbnNzbC9lbmdpbmUuaD4KKyNlbmRpZgorI2luY2x1ZGUgImFzbjFfbG9jbC5oIgorI2luY2x1ZGUgImV2cF9sb2NsLmgiCisKK3R5cGVkZWYgaW50IHNrX2NtcF9mbl90eXBlKGNvbnN0IGNoYXIgKiBjb25zdCAqYSwgY29uc3QgY2hhciAqIGNvbnN0ICpiKTsKKworREVDTEFSRV9TVEFDS19PRihFVlBfUEtFWV9NRVRIT0QpCitTVEFDS19PRihFVlBfUEtFWV9NRVRIT0QpICphcHBfcGtleV9tZXRob2RzID0gTlVMTDsKKworZXh0ZXJuIGNvbnN0IEVWUF9QS0VZX01FVEhPRCByc2FfcGtleV9tZXRoLCBkaF9wa2V5X21ldGgsIGRzYV9wa2V5X21ldGg7CitleHRlcm4gY29uc3QgRVZQX1BLRVlfTUVUSE9EIGVjX3BrZXlfbWV0aCwgaG1hY19wa2V5X21ldGg7CisKK3N0YXRpYyBjb25zdCBFVlBfUEtFWV9NRVRIT0QgKnN0YW5kYXJkX21ldGhvZHNbXSA9CisJeworI2lmbmRlZiBPUEVOU1NMX05PX1JTQQorCSZyc2FfcGtleV9tZXRoLAorI2VuZGlmCisjaWZuZGVmIE9QRU5TU0xfTk9fREgKKwkmZGhfcGtleV9tZXRoLAorI2VuZGlmCisjaWZuZGVmIE9QRU5TU0xfTk9fRFNBCisJJmRzYV9wa2V5X21ldGgsCisjZW5kaWYKKyNpZm5kZWYgT1BFTlNTTF9OT19FQworCSZlY19wa2V5X21ldGgsCisjZW5kaWYKKwkmaG1hY19wa2V5X21ldGgsCisJfTsKKworREVDTEFSRV9PQkpfQlNFQVJDSF9DTVBfRk4oY29uc3QgRVZQX1BLRVlfTUVUSE9EICosIGNvbnN0IEVWUF9QS0VZX01FVEhPRCAqLAorCQkJICAgcG1ldGgpOworCitzdGF0aWMgaW50IHBtZXRoX2NtcChjb25zdCBFVlBfUEtFWV9NRVRIT0QgKiBjb25zdCAqYSwKKwkJICAgICBjb25zdCBFVlBfUEtFWV9NRVRIT0QgKiBjb25zdCAqYikKKwl7CisgICAgICAgIHJldHVybiAoKCphKS0+cGtleV9pZCAtICgqYiktPnBrZXlfaWQpOworCX0KKworSU1QTEVNRU5UX09CSl9CU0VBUkNIX0NNUF9GTihjb25zdCBFVlBfUEtFWV9NRVRIT0QgKiwgY29uc3QgRVZQX1BLRVlfTUVUSE9EICosCisJCQkgICAgIHBtZXRoKTsKKworY29uc3QgRVZQX1BLRVlfTUVUSE9EICpFVlBfUEtFWV9tZXRoX2ZpbmQoaW50IHR5cGUpCisJeworCUVWUF9QS0VZX01FVEhPRCB0bXA7CisJY29uc3QgRVZQX1BLRVlfTUVUSE9EICp0ID0gJnRtcCwgKipyZXQ7CisJdG1wLnBrZXlfaWQgPSB0eXBlOworCWlmIChhcHBfcGtleV9tZXRob2RzKQorCQl7CisJCWludCBpZHg7CisJCWlkeCA9IHNrX0VWUF9QS0VZX01FVEhPRF9maW5kKGFwcF9wa2V5X21ldGhvZHMsICZ0bXApOworCQlpZiAoaWR4ID49IDApCisJCQlyZXR1cm4gc2tfRVZQX1BLRVlfTUVUSE9EX3ZhbHVlKGFwcF9wa2V5X21ldGhvZHMsIGlkeCk7CisJCX0KKwlyZXQgPSBPQkpfYnNlYXJjaF9wbWV0aCgmdCwgc3RhbmRhcmRfbWV0aG9kcywKKwkJCSAgc2l6ZW9mKHN0YW5kYXJkX21ldGhvZHMpL3NpemVvZihFVlBfUEtFWV9NRVRIT0QgKikpOworCWlmICghcmV0IHx8ICEqcmV0KQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gKnJldDsKKwl9CisKK3N0YXRpYyBFVlBfUEtFWV9DVFggKmludF9jdHhfbmV3KEVWUF9QS0VZICpwa2V5LCBFTkdJTkUgKmUsIGludCBpZCkKKwl7CisJRVZQX1BLRVlfQ1RYICpyZXQ7CisJY29uc3QgRVZQX1BLRVlfTUVUSE9EICpwbWV0aDsKKwlpZiAoaWQgPT0gLTEpCisJCXsKKwkJaWYgKCFwa2V5IHx8ICFwa2V5LT5hbWV0aCkKKwkJCXJldHVybiBOVUxMOworCQlpZCA9IHBrZXktPmFtZXRoLT5wa2V5X2lkOworCQl9CisjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCisJLyogVHJ5IHRvIGZpbmQgYW4gRU5HSU5FIHdoaWNoIGltcGxlbWVudHMgdGhpcyBtZXRob2QgKi8KKwlpZiAoZSkKKwkJeworCQlpZiAoIUVOR0lORV9pbml0KGUpKQorCQkJeworCQkJRVZQZXJyKEVWUF9GX0lOVF9DVFhfTkVXLEVSUl9SX0VOR0lORV9MSUIpOworCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCX0KKwllbHNlCisJCWUgPSBFTkdJTkVfZ2V0X3BrZXlfbWV0aF9lbmdpbmUoaWQpOworCisJLyogSWYgYW4gRU5HSU5FIGhhbmRsZWQgdGhpcyBtZXRob2QgbG9vayBpdCB1cC4gT3RoZXdpc2UKKwkgKiB1c2UgaW50ZXJuYWwgdGFibGVzLgorCSAqLworCisJaWYgKGUpCisJCXBtZXRoID0gRU5HSU5FX2dldF9wa2V5X21ldGgoZSwgaWQpOworCWVsc2UKKyNlbmRpZgorCQlwbWV0aCA9IEVWUF9QS0VZX21ldGhfZmluZChpZCk7CisKKwlpZiAocG1ldGggPT0gTlVMTCkKKwkJeworCQlFVlBlcnIoRVZQX0ZfSU5UX0NUWF9ORVcsRVZQX1JfVU5TVVBQT1JURURfQUxHT1JJVEhNKTsKKwkJcmV0dXJuIE5VTEw7CisJCX0KKworCXJldCA9IE9QRU5TU0xfbWFsbG9jKHNpemVvZihFVlBfUEtFWV9DVFgpKTsKKwlpZiAoIXJldCkKKwkJeworI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQorCQlpZiAoZSkKKwkJCUVOR0lORV9maW5pc2goZSk7CisjZW5kaWYKKwkJRVZQZXJyKEVWUF9GX0lOVF9DVFhfTkVXLEVSUl9SX01BTExPQ19GQUlMVVJFKTsKKwkJcmV0dXJuIE5VTEw7CisJCX0KKwlyZXQtPmVuZ2luZSA9IGU7CisJcmV0LT5wbWV0aCA9IHBtZXRoOworCXJldC0+b3BlcmF0aW9uID0gRVZQX1BLRVlfT1BfVU5ERUZJTkVEOworCXJldC0+cGtleSA9IHBrZXk7CisJcmV0LT5wZWVya2V5ID0gTlVMTDsKKwlpZiAocGtleSkKKwkJQ1JZUFRPX2FkZCgmcGtleS0+cmVmZXJlbmNlcywxLENSWVBUT19MT0NLX0VWUF9QS0VZKTsKKwlyZXQtPmRhdGEgPSBOVUxMOworCisJaWYgKHBtZXRoLT5pbml0KQorCQl7CisJCWlmIChwbWV0aC0+aW5pdChyZXQpIDw9IDApCisJCQl7CisJCQlFVlBfUEtFWV9DVFhfZnJlZShyZXQpOworCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCX0KKworCXJldHVybiByZXQ7CisJfQorCitFVlBfUEtFWV9NRVRIT0QqIEVWUF9QS0VZX21ldGhfbmV3KGludCBpZCwgaW50IGZsYWdzKQorCXsKKwlFVlBfUEtFWV9NRVRIT0QgKnBtZXRoOworCXBtZXRoID0gT1BFTlNTTF9tYWxsb2Moc2l6ZW9mKEVWUF9QS0VZX01FVEhPRCkpOworCWlmICghcG1ldGgpCisJCXJldHVybiBOVUxMOworCisJcG1ldGgtPnBrZXlfaWQgPSBpZDsKKwlwbWV0aC0+ZmxhZ3MgPSBmbGFncyB8IEVWUF9QS0VZX0ZMQUdfRFlOQU1JQzsKKworCXBtZXRoLT5pbml0ID0gMDsKKwlwbWV0aC0+Y29weSA9IDA7CisJcG1ldGgtPmNsZWFudXAgPSAwOworCXBtZXRoLT5wYXJhbWdlbl9pbml0ID0gMDsKKwlwbWV0aC0+cGFyYW1nZW4gPSAwOworCXBtZXRoLT5rZXlnZW5faW5pdCA9IDA7CisJcG1ldGgtPmtleWdlbiA9IDA7CisJcG1ldGgtPnNpZ25faW5pdCA9IDA7CisJcG1ldGgtPnNpZ24gPSAwOworCXBtZXRoLT52ZXJpZnlfaW5pdCA9IDA7CisJcG1ldGgtPnZlcmlmeSA9IDA7CisJcG1ldGgtPnZlcmlmeV9yZWNvdmVyX2luaXQgPSAwOworCXBtZXRoLT52ZXJpZnlfcmVjb3ZlciA9IDA7CisJcG1ldGgtPnNpZ25jdHhfaW5pdCA9IDA7CisJcG1ldGgtPnNpZ25jdHggPSAwOworCXBtZXRoLT52ZXJpZnljdHhfaW5pdCA9IDA7CisJcG1ldGgtPnZlcmlmeWN0eCA9IDA7CisJcG1ldGgtPmVuY3J5cHRfaW5pdCA9IDA7CisJcG1ldGgtPmVuY3J5cHQgPSAwOworCXBtZXRoLT5kZWNyeXB0X2luaXQgPSAwOworCXBtZXRoLT5kZWNyeXB0ID0gMDsKKwlwbWV0aC0+ZGVyaXZlX2luaXQgPSAwOworCXBtZXRoLT5kZXJpdmUgPSAwOworCXBtZXRoLT5jdHJsID0gMDsKKwlwbWV0aC0+Y3RybF9zdHIgPSAwOworCisJcmV0dXJuIHBtZXRoOworCX0KKwordm9pZCBFVlBfUEtFWV9tZXRoX2ZyZWUoRVZQX1BLRVlfTUVUSE9EICpwbWV0aCkKKwl7CisJaWYgKHBtZXRoICYmIChwbWV0aC0+ZmxhZ3MgJiBFVlBfUEtFWV9GTEFHX0RZTkFNSUMpKQorCQlPUEVOU1NMX2ZyZWUocG1ldGgpOworCX0KKworRVZQX1BLRVlfQ1RYICpFVlBfUEtFWV9DVFhfbmV3KEVWUF9QS0VZICpwa2V5LCBFTkdJTkUgKmUpCisJeworCXJldHVybiBpbnRfY3R4X25ldyhwa2V5LCBlLCAtMSk7CisJfQorCitFVlBfUEtFWV9DVFggKkVWUF9QS0VZX0NUWF9uZXdfaWQoaW50IGlkLCBFTkdJTkUgKmUpCisJeworCXJldHVybiBpbnRfY3R4X25ldyhOVUxMLCBlLCBpZCk7CisJfQorCitFVlBfUEtFWV9DVFggKkVWUF9QS0VZX0NUWF9kdXAoRVZQX1BLRVlfQ1RYICpwY3R4KQorCXsKKwlFVlBfUEtFWV9DVFggKnJjdHg7CisJaWYgKCFwY3R4LT5wbWV0aCB8fCAhcGN0eC0+cG1ldGgtPmNvcHkpCisJCXJldHVybiBOVUxMOworI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQorCS8qIE1ha2Ugc3VyZSBpdCdzIHNhZmUgdG8gY29weSBhIHBrZXkgY29udGV4dCB1c2luZyBhbiBFTkdJTkUgKi8KKwlpZiAocGN0eC0+ZW5naW5lICYmICFFTkdJTkVfaW5pdChwY3R4LT5lbmdpbmUpKQorCQl7CisJCUVWUGVycihFVlBfRl9FVlBfUEtFWV9DVFhfRFVQLEVSUl9SX0VOR0lORV9MSUIpOworCQlyZXR1cm4gMDsKKwkJfQorI2VuZGlmCisJcmN0eCA9IE9QRU5TU0xfbWFsbG9jKHNpemVvZihFVlBfUEtFWV9DVFgpKTsKKwlpZiAoIXJjdHgpCisJCXJldHVybiBOVUxMOworCisJcmN0eC0+cG1ldGggPSBwY3R4LT5wbWV0aDsKKyNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKKwlyY3R4LT5lbmdpbmUgPSBwY3R4LT5lbmdpbmU7CisjZW5kaWYKKworCWlmIChwY3R4LT5wa2V5KQorCQlDUllQVE9fYWRkKCZwY3R4LT5wa2V5LT5yZWZlcmVuY2VzLDEsQ1JZUFRPX0xPQ0tfRVZQX1BLRVkpOworCisJcmN0eC0+cGtleSA9IHBjdHgtPnBrZXk7CisKKwlpZiAocGN0eC0+cGVlcmtleSkKKwkJQ1JZUFRPX2FkZCgmcGN0eC0+cGVlcmtleS0+cmVmZXJlbmNlcywxLENSWVBUT19MT0NLX0VWUF9QS0VZKTsKKworCXJjdHgtPnBlZXJrZXkgPSBwY3R4LT5wZWVya2V5OworCisJcmN0eC0+ZGF0YSA9IE5VTEw7CisJcmN0eC0+YXBwX2RhdGEgPSBOVUxMOworCXJjdHgtPm9wZXJhdGlvbiA9IHBjdHgtPm9wZXJhdGlvbjsKKworCWlmIChwY3R4LT5wbWV0aC0+Y29weShyY3R4LCBwY3R4KSA+IDApCisJCXJldHVybiByY3R4OworCisJRVZQX1BLRVlfQ1RYX2ZyZWUocmN0eCk7CisJcmV0dXJuIE5VTEw7CisKKwl9CisKK2ludCBFVlBfUEtFWV9tZXRoX2FkZDAoY29uc3QgRVZQX1BLRVlfTUVUSE9EICpwbWV0aCkKKwl7CisJaWYgKGFwcF9wa2V5X21ldGhvZHMgPT0gTlVMTCkKKwkJeworCQlhcHBfcGtleV9tZXRob2RzID0gc2tfRVZQX1BLRVlfTUVUSE9EX25ldyhwbWV0aF9jbXApOworCQlpZiAoIWFwcF9wa2V5X21ldGhvZHMpCisJCQlyZXR1cm4gMDsKKwkJfQorCWlmICghc2tfRVZQX1BLRVlfTUVUSE9EX3B1c2goYXBwX3BrZXlfbWV0aG9kcywgcG1ldGgpKQorCQlyZXR1cm4gMDsKKwlza19FVlBfUEtFWV9NRVRIT0Rfc29ydChhcHBfcGtleV9tZXRob2RzKTsKKwlyZXR1cm4gMTsKKwl9CisKK3ZvaWQgRVZQX1BLRVlfQ1RYX2ZyZWUoRVZQX1BLRVlfQ1RYICpjdHgpCisJeworCWlmIChjdHggPT0gTlVMTCkKKwkJcmV0dXJuOworCWlmIChjdHgtPnBtZXRoICYmIGN0eC0+cG1ldGgtPmNsZWFudXApCisJCWN0eC0+cG1ldGgtPmNsZWFudXAoY3R4KTsKKwlpZiAoY3R4LT5wa2V5KQorCQlFVlBfUEtFWV9mcmVlKGN0eC0+cGtleSk7CisJaWYgKGN0eC0+cGVlcmtleSkKKwkJRVZQX1BLRVlfZnJlZShjdHgtPnBlZXJrZXkpOworI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQorCWlmKGN0eC0+ZW5naW5lKQorCQkvKiBUaGUgRVZQX1BLRVlfQ1RYIHdlIHVzZWQgYmVsb25ncyB0byBhbiBFTkdJTkUsIHJlbGVhc2UgdGhlCisJCSAqIGZ1bmN0aW9uYWwgcmVmZXJlbmNlIHdlIGhlbGQgZm9yIHRoaXMgcmVhc29uLiAqLworCQlFTkdJTkVfZmluaXNoKGN0eC0+ZW5naW5lKTsKKyNlbmRpZgorCU9QRU5TU0xfZnJlZShjdHgpOworCX0KKworaW50IEVWUF9QS0VZX0NUWF9jdHJsKEVWUF9QS0VZX0NUWCAqY3R4LCBpbnQga2V5dHlwZSwgaW50IG9wdHlwZSwKKwkJCQlpbnQgY21kLCBpbnQgcDEsIHZvaWQgKnAyKQorCXsKKwlpbnQgcmV0OworCWlmICghY3R4IHx8ICFjdHgtPnBtZXRoIHx8ICFjdHgtPnBtZXRoLT5jdHJsKQorCQl7CisJCUVWUGVycihFVlBfRl9FVlBfUEtFWV9DVFhfQ1RSTCwgRVZQX1JfQ09NTUFORF9OT1RfU1VQUE9SVEVEKTsKKwkJcmV0dXJuIC0yOworCQl9CisJaWYgKChrZXl0eXBlICE9IC0xKSAmJiAoY3R4LT5wbWV0aC0+cGtleV9pZCAhPSBrZXl0eXBlKSkKKwkJcmV0dXJuIC0xOworCisJaWYgKGN0eC0+b3BlcmF0aW9uID09IEVWUF9QS0VZX09QX1VOREVGSU5FRCkKKwkJeworCQlFVlBlcnIoRVZQX0ZfRVZQX1BLRVlfQ1RYX0NUUkwsIEVWUF9SX05PX09QRVJBVElPTl9TRVQpOworCQlyZXR1cm4gLTE7CisJCX0KKworCWlmICgob3B0eXBlICE9IC0xKSAmJiAhKGN0eC0+b3BlcmF0aW9uICYgb3B0eXBlKSkKKwkJeworCQlFVlBlcnIoRVZQX0ZfRVZQX1BLRVlfQ1RYX0NUUkwsIEVWUF9SX0lOVkFMSURfT1BFUkFUSU9OKTsKKwkJcmV0dXJuIC0xOworCQl9CisKKwlyZXQgPSBjdHgtPnBtZXRoLT5jdHJsKGN0eCwgY21kLCBwMSwgcDIpOworCisJaWYgKHJldCA9PSAtMikKKwkJRVZQZXJyKEVWUF9GX0VWUF9QS0VZX0NUWF9DVFJMLCBFVlBfUl9DT01NQU5EX05PVF9TVVBQT1JURUQpOworCisJcmV0dXJuIHJldDsKKworCX0KKworaW50IEVWUF9QS0VZX0NUWF9jdHJsX3N0cihFVlBfUEtFWV9DVFggKmN0eCwKKwkJCQkJY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCisJeworCWlmICghY3R4IHx8ICFjdHgtPnBtZXRoIHx8ICFjdHgtPnBtZXRoLT5jdHJsX3N0cikKKwkJeworCQlFVlBlcnIoRVZQX0ZfRVZQX1BLRVlfQ1RYX0NUUkxfU1RSLAorCQkJCQkJRVZQX1JfQ09NTUFORF9OT1RfU1VQUE9SVEVEKTsKKwkJcmV0dXJuIC0yOworCQl9CisJaWYgKCFzdHJjbXAobmFtZSwgImRpZ2VzdCIpKQorCQl7CisJCWNvbnN0IEVWUF9NRCAqbWQ7CisJCWlmICghdmFsdWUgfHwgIShtZCA9IEVWUF9nZXRfZGlnZXN0YnluYW1lKHZhbHVlKSkpCisJCQl7CisJCQlFVlBlcnIoRVZQX0ZfRVZQX1BLRVlfQ1RYX0NUUkxfU1RSLAorCQkJCQkJRVZQX1JfSU5WQUxJRF9ESUdFU1QpOworCQkJcmV0dXJuIDA7CisJCQl9CisJCXJldHVybiBFVlBfUEtFWV9DVFhfc2V0X3NpZ25hdHVyZV9tZChjdHgsIG1kKTsKKwkJfQorCXJldHVybiBjdHgtPnBtZXRoLT5jdHJsX3N0cihjdHgsIG5hbWUsIHZhbHVlKTsKKwl9CisKK2ludCBFVlBfUEtFWV9DVFhfZ2V0X29wZXJhdGlvbihFVlBfUEtFWV9DVFggKmN0eCkKKwl7CisJcmV0dXJuIGN0eC0+b3BlcmF0aW9uOworCX0KKwordm9pZCBFVlBfUEtFWV9DVFhfc2V0MF9rZXlnZW5faW5mbyhFVlBfUEtFWV9DVFggKmN0eCwgaW50ICpkYXQsIGludCBkYXRsZW4pCisJeworCWN0eC0+a2V5Z2VuX2luZm8gPSBkYXQ7CisJY3R4LT5rZXlnZW5faW5mb19jb3VudCA9IGRhdGxlbjsKKwl9CisKK3ZvaWQgRVZQX1BLRVlfQ1RYX3NldF9kYXRhKEVWUF9QS0VZX0NUWCAqY3R4LCB2b2lkICpkYXRhKQorCXsKKwljdHgtPmRhdGEgPSBkYXRhOworCX0KKwordm9pZCAqRVZQX1BLRVlfQ1RYX2dldF9kYXRhKEVWUF9QS0VZX0NUWCAqY3R4KQorCXsKKwlyZXR1cm4gY3R4LT5kYXRhOworCX0KKworRVZQX1BLRVkgKkVWUF9QS0VZX0NUWF9nZXQwX3BrZXkoRVZQX1BLRVlfQ1RYICpjdHgpCisJeworCXJldHVybiBjdHgtPnBrZXk7CisJfQorCitFVlBfUEtFWSAqRVZQX1BLRVlfQ1RYX2dldDBfcGVlcmtleShFVlBfUEtFWV9DVFggKmN0eCkKKwl7CisJcmV0dXJuIGN0eC0+cGVlcmtleTsKKwl9CisJCit2b2lkIEVWUF9QS0VZX0NUWF9zZXRfYXBwX2RhdGEoRVZQX1BLRVlfQ1RYICpjdHgsIHZvaWQgKmRhdGEpCisJeworCWN0eC0+YXBwX2RhdGEgPSBkYXRhOworCX0KKwordm9pZCAqRVZQX1BLRVlfQ1RYX2dldF9hcHBfZGF0YShFVlBfUEtFWV9DVFggKmN0eCkKKwl7CisJcmV0dXJuIGN0eC0+YXBwX2RhdGE7CisJfQorCit2b2lkIEVWUF9QS0VZX21ldGhfc2V0X2luaXQoRVZQX1BLRVlfTUVUSE9EICpwbWV0aCwKKwlpbnQgKCppbml0KShFVlBfUEtFWV9DVFggKmN0eCkpCisJeworCXBtZXRoLT5pbml0ID0gaW5pdDsKKwl9CisKK3ZvaWQgRVZQX1BLRVlfbWV0aF9zZXRfY29weShFVlBfUEtFWV9NRVRIT0QgKnBtZXRoLAorCWludCAoKmNvcHkpKEVWUF9QS0VZX0NUWCAqZHN0LCBFVlBfUEtFWV9DVFggKnNyYykpCisJeworCXBtZXRoLT5jb3B5ID0gY29weTsKKwl9CisKK3ZvaWQgRVZQX1BLRVlfbWV0aF9zZXRfY2xlYW51cChFVlBfUEtFWV9NRVRIT0QgKnBtZXRoLAorCXZvaWQgKCpjbGVhbnVwKShFVlBfUEtFWV9DVFggKmN0eCkpCisJeworCXBtZXRoLT5jbGVhbnVwID0gY2xlYW51cDsKKwl9CisKK3ZvaWQgRVZQX1BLRVlfbWV0aF9zZXRfcGFyYW1nZW4oRVZQX1BLRVlfTUVUSE9EICpwbWV0aCwKKwlpbnQgKCpwYXJhbWdlbl9pbml0KShFVlBfUEtFWV9DVFggKmN0eCksCisJaW50ICgqcGFyYW1nZW4pKEVWUF9QS0VZX0NUWCAqY3R4LCBFVlBfUEtFWSAqcGtleSkpCisJeworCXBtZXRoLT5wYXJhbWdlbl9pbml0ID0gcGFyYW1nZW5faW5pdDsKKwlwbWV0aC0+cGFyYW1nZW4gPSBwYXJhbWdlbjsKKwl9CisKK3ZvaWQgRVZQX1BLRVlfbWV0aF9zZXRfa2V5Z2VuKEVWUF9QS0VZX01FVEhPRCAqcG1ldGgsCisJaW50ICgqa2V5Z2VuX2luaXQpKEVWUF9QS0VZX0NUWCAqY3R4KSwKKwlpbnQgKCprZXlnZW4pKEVWUF9QS0VZX0NUWCAqY3R4LCBFVlBfUEtFWSAqcGtleSkpCisJeworCXBtZXRoLT5rZXlnZW5faW5pdCA9IGtleWdlbl9pbml0OworCXBtZXRoLT5rZXlnZW4gPSBrZXlnZW47CisJfQorCit2b2lkIEVWUF9QS0VZX21ldGhfc2V0X3NpZ24oRVZQX1BLRVlfTUVUSE9EICpwbWV0aCwKKwlpbnQgKCpzaWduX2luaXQpKEVWUF9QS0VZX0NUWCAqY3R4KSwKKwlpbnQgKCpzaWduKShFVlBfUEtFWV9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqc2lnLCBzaXplX3QgKnNpZ2xlbiwKKwkJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqdGJzLCBzaXplX3QgdGJzbGVuKSkKKwl7CisJcG1ldGgtPnNpZ25faW5pdCA9IHNpZ25faW5pdDsKKwlwbWV0aC0+c2lnbiA9IHNpZ247CisJfQorCit2b2lkIEVWUF9QS0VZX21ldGhfc2V0X3ZlcmlmeShFVlBfUEtFWV9NRVRIT0QgKnBtZXRoLAorCWludCAoKnZlcmlmeV9pbml0KShFVlBfUEtFWV9DVFggKmN0eCksCisJaW50ICgqdmVyaWZ5KShFVlBfUEtFWV9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2lnLCBzaXplX3Qgc2lnbGVuLAorCQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICp0YnMsIHNpemVfdCB0YnNsZW4pKQorCXsKKwlwbWV0aC0+dmVyaWZ5X2luaXQgPSB2ZXJpZnlfaW5pdDsKKwlwbWV0aC0+dmVyaWZ5ID0gdmVyaWZ5OworCX0KKwordm9pZCBFVlBfUEtFWV9tZXRoX3NldF92ZXJpZnlfcmVjb3ZlcihFVlBfUEtFWV9NRVRIT0QgKnBtZXRoLAorCWludCAoKnZlcmlmeV9yZWNvdmVyX2luaXQpKEVWUF9QS0VZX0NUWCAqY3R4KSwKKwlpbnQgKCp2ZXJpZnlfcmVjb3ZlcikoRVZQX1BLRVlfQ1RYICpjdHgsCisJCQkJCXVuc2lnbmVkIGNoYXIgKnNpZywgc2l6ZV90ICpzaWdsZW4sCisJCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnRicywgc2l6ZV90IHRic2xlbikpCisJeworCXBtZXRoLT52ZXJpZnlfcmVjb3Zlcl9pbml0ID0gdmVyaWZ5X3JlY292ZXJfaW5pdDsKKwlwbWV0aC0+dmVyaWZ5X3JlY292ZXIgPSB2ZXJpZnlfcmVjb3ZlcjsKKwl9CisKK3ZvaWQgRVZQX1BLRVlfbWV0aF9zZXRfc2lnbmN0eChFVlBfUEtFWV9NRVRIT0QgKnBtZXRoLAorCWludCAoKnNpZ25jdHhfaW5pdCkoRVZQX1BLRVlfQ1RYICpjdHgsIEVWUF9NRF9DVFggKm1jdHgpLAorCWludCAoKnNpZ25jdHgpKEVWUF9QS0VZX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpzaWcsIHNpemVfdCAqc2lnbGVuLAorCQkJCQlFVlBfTURfQ1RYICptY3R4KSkKKwl7CisJcG1ldGgtPnNpZ25jdHhfaW5pdCA9IHNpZ25jdHhfaW5pdDsKKwlwbWV0aC0+c2lnbmN0eCA9IHNpZ25jdHg7CisJfQorCit2b2lkIEVWUF9QS0VZX21ldGhfc2V0X3ZlcmlmeWN0eChFVlBfUEtFWV9NRVRIT0QgKnBtZXRoLAorCWludCAoKnZlcmlmeWN0eF9pbml0KShFVlBfUEtFWV9DVFggKmN0eCwgRVZQX01EX0NUWCAqbWN0eCksCisJaW50ICgqdmVyaWZ5Y3R4KShFVlBfUEtFWV9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2lnLGludCBzaWdsZW4sCisJCQkJCUVWUF9NRF9DVFggKm1jdHgpKQorCXsKKwlwbWV0aC0+dmVyaWZ5Y3R4X2luaXQgPSB2ZXJpZnljdHhfaW5pdDsKKwlwbWV0aC0+dmVyaWZ5Y3R4ID0gdmVyaWZ5Y3R4OworCX0KKwordm9pZCBFVlBfUEtFWV9tZXRoX3NldF9lbmNyeXB0KEVWUF9QS0VZX01FVEhPRCAqcG1ldGgsCisJaW50ICgqZW5jcnlwdF9pbml0KShFVlBfUEtFWV9DVFggKmN0eCksCisJaW50ICgqZW5jcnlwdGZuKShFVlBfUEtFWV9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3QgKm91dGxlbiwKKwkJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBpbmxlbikpCisJeworCXBtZXRoLT5lbmNyeXB0X2luaXQgPSBlbmNyeXB0X2luaXQ7CisJcG1ldGgtPmVuY3J5cHQgPSBlbmNyeXB0Zm47CisJfQorCit2b2lkIEVWUF9QS0VZX21ldGhfc2V0X2RlY3J5cHQoRVZQX1BLRVlfTUVUSE9EICpwbWV0aCwKKwlpbnQgKCpkZWNyeXB0X2luaXQpKEVWUF9QS0VZX0NUWCAqY3R4KSwKKwlpbnQgKCpkZWNyeXB0KShFVlBfUEtFWV9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3QgKm91dGxlbiwKKwkJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBpbmxlbikpCisJeworCXBtZXRoLT5kZWNyeXB0X2luaXQgPSBkZWNyeXB0X2luaXQ7CisJcG1ldGgtPmRlY3J5cHQgPSBkZWNyeXB0OworCX0KKwordm9pZCBFVlBfUEtFWV9tZXRoX3NldF9kZXJpdmUoRVZQX1BLRVlfTUVUSE9EICpwbWV0aCwKKwlpbnQgKCpkZXJpdmVfaW5pdCkoRVZQX1BLRVlfQ1RYICpjdHgpLAorCWludCAoKmRlcml2ZSkoRVZQX1BLRVlfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKmtleSwgc2l6ZV90ICprZXlsZW4pKQorCXsKKwlwbWV0aC0+ZGVyaXZlX2luaXQgPSBkZXJpdmVfaW5pdDsKKwlwbWV0aC0+ZGVyaXZlID0gZGVyaXZlOworCX0KKwordm9pZCBFVlBfUEtFWV9tZXRoX3NldF9jdHJsKEVWUF9QS0VZX01FVEhPRCAqcG1ldGgsCisJaW50ICgqY3RybCkoRVZQX1BLRVlfQ1RYICpjdHgsIGludCB0eXBlLCBpbnQgcDEsIHZvaWQgKnAyKSwKKwlpbnQgKCpjdHJsX3N0cikoRVZQX1BLRVlfQ1RYICpjdHgsIGNvbnN0IGNoYXIgKnR5cGUsIGNvbnN0IGNoYXIgKnZhbHVlKSkKKwl7CisJcG1ldGgtPmN0cmwgPSBjdHJsOworCXBtZXRoLT5jdHJsX3N0ciA9IGN0cmxfc3RyOworCX0KZGlmZiAtLWdpdCBhL2NyeXB0by9leF9kYXRhLmMgYi9jcnlwdG8vZXhfZGF0YS5jCmluZGV4IDNiMTFlN2EuLmUyYmM4MjkgMTAwNjQ0Ci0tLSBhL2NyeXB0by9leF9kYXRhLmMKKysrIGIvY3J5cHRvL2V4X2RhdGEuYwpAQCAtMjQ1LDE4ICsyNDUsMjEgQEAKIHN0YXRpYyBpbnQgZXhfY2xhc3MgPSBDUllQVE9fRVhfSU5ERVhfVVNFUjsKIAogLyogVGhlIGdsb2JhbCBoYXNoIHRhYmxlIG9mIEVYX0NMQVNTX0lURU0gaXRlbXMgKi8KLXN0YXRpYyBMSEFTSCAqZXhfZGF0YSA9IE5VTEw7CitERUNMQVJFX0xIQVNIX09GKEVYX0NMQVNTX0lURU0pOworc3RhdGljIExIQVNIX09GKEVYX0NMQVNTX0lURU0pICpleF9kYXRhID0gTlVMTDsKIAogLyogVGhlIGNhbGxiYWNrcyByZXF1aXJlZCBpbiB0aGUgImV4X2RhdGEiIGhhc2ggdGFibGUgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGV4X2hhc2hfY2IoY29uc3Qgdm9pZCAqYV92b2lkKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgZXhfY2xhc3NfaXRlbV9oYXNoKGNvbnN0IEVYX0NMQVNTX0lURU0gKmEpCiAJewotCXJldHVybiAoKGNvbnN0IEVYX0NMQVNTX0lURU0gKilhX3ZvaWQpLT5jbGFzc19pbmRleDsKKwlyZXR1cm4gYS0+Y2xhc3NfaW5kZXg7CiAJfQotc3RhdGljIGludCBleF9jbXBfY2IoY29uc3Qgdm9pZCAqYV92b2lkLCBjb25zdCB2b2lkICpiX3ZvaWQpCitzdGF0aWMgSU1QTEVNRU5UX0xIQVNIX0hBU0hfRk4oZXhfY2xhc3NfaXRlbSwgRVhfQ0xBU1NfSVRFTSkKKworc3RhdGljIGludCBleF9jbGFzc19pdGVtX2NtcChjb25zdCBFWF9DTEFTU19JVEVNICphLCBjb25zdCBFWF9DTEFTU19JVEVNICpiKQogCXsKLQlyZXR1cm4gKCgoY29uc3QgRVhfQ0xBU1NfSVRFTSAqKWFfdm9pZCktPmNsYXNzX2luZGV4IC0KLQkJKChjb25zdCBFWF9DTEFTU19JVEVNICopYl92b2lkKS0+Y2xhc3NfaW5kZXgpOworCXJldHVybiBhLT5jbGFzc19pbmRleCAtIGItPmNsYXNzX2luZGV4OwogCX0KK3N0YXRpYyBJTVBMRU1FTlRfTEhBU0hfQ09NUF9GTihleF9jbGFzc19pdGVtLCBFWF9DTEFTU19JVEVNKQogCiAvKiBJbnRlcm5hbCBmdW5jdGlvbnMgdXNlZCBieSB0aGUgImltcGxfZGVmYXVsdCIgaW1wbGVtZW50YXRpb24gdG8gYWNjZXNzIHRoZQogICogc3RhdGUgKi8KQEAgLTI2NSw3ICsyNjgsOCBAQAogCXsKIAlpbnQgdG9yZXQgPSAxOwogCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfRVhfREFUQSk7Ci0JaWYoIWV4X2RhdGEgJiYgKChleF9kYXRhID0gbGhfbmV3KGV4X2hhc2hfY2IsIGV4X2NtcF9jYikpID09IE5VTEwpKQorCWlmKCFleF9kYXRhCisJICAgJiYgKGV4X2RhdGEgPSBsaF9FWF9DTEFTU19JVEVNX25ldygpKSA9PSBOVUxMKQogCQl0b3JldCA9IDA7CiAJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX0VYX0RBVEEpOwogCXJldHVybiB0b3JldDsKQEAgLTI5OCw3ICszMDIsNyBAQAogCUVYX0RBVEFfQ0hFQ0socmV0dXJuIE5VTEw7KQogCWQuY2xhc3NfaW5kZXggPSBjbGFzc19pbmRleDsKIAlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX0VYX0RBVEEpOwotCXAgPSBsaF9yZXRyaWV2ZShleF9kYXRhLCAmZCk7CisJcCA9IGxoX0VYX0NMQVNTX0lURU1fcmV0cmlldmUoZXhfZGF0YSwgJmQpOwogCWlmKCFwKQogCQl7CiAJCWdlbiA9IE9QRU5TU0xfbWFsbG9jKHNpemVvZihFWF9DTEFTU19JVEVNKSk7CkBAIC0zMTMsNyArMzE3LDcgQEAKIAkJCQl7CiAJCQkJLyogQmVjYXVzZSB3ZSdyZSBpbnNpZGUgdGhlIGV4X2RhdGEgbG9jaywgdGhlCiAJCQkJICogcmV0dXJuIHZhbHVlIGZyb20gdGhlIGluc2VydCB3aWxsIGJlIE5VTEwgKi8KLQkJCQlsaF9pbnNlcnQoZXhfZGF0YSwgZ2VuKTsKKwkJCQkodm9pZClsaF9FWF9DTEFTU19JVEVNX2luc2VydChleF9kYXRhLCBnZW4pOwogCQkJCXAgPSBnZW47CiAJCQkJfQogCQkJfQpAQCAtMzc1LDggKzM3OSw4IEBACiBzdGF0aWMgdm9pZCBpbnRfY2xlYW51cCh2b2lkKQogCXsKIAlFWF9EQVRBX0NIRUNLKHJldHVybjspCi0JbGhfZG9hbGwoZXhfZGF0YSwgZGVmX2NsZWFudXBfY2IpOwotCWxoX2ZyZWUoZXhfZGF0YSk7CisJbGhfRVhfQ0xBU1NfSVRFTV9kb2FsbChleF9kYXRhLCBkZWZfY2xlYW51cF9jYik7CisJbGhfRVhfQ0xBU1NfSVRFTV9mcmVlKGV4X2RhdGEpOwogCWV4X2RhdGEgPSBOVUxMOwogCWltcGwgPSBOVUxMOwogCX0KQEAgLTQ1Miw3ICs0NTYsNyBAQAogCQlyZXR1cm4gMDsKIAlDUllQVE9fcl9sb2NrKENSWVBUT19MT0NLX0VYX0RBVEEpOwogCW14ID0gc2tfQ1JZUFRPX0VYX0RBVEFfRlVOQ1NfbnVtKGl0ZW0tPm1ldGgpOwotCWogPSBza19udW0oZnJvbS0+c2spOworCWogPSBza192b2lkX251bShmcm9tLT5zayk7CiAJaWYoaiA8IG14KQogCQlteCA9IGo7CiAJaWYobXggPiAwKQpAQCAtNTIzLDcgKzUyNyw3IEBACiAJCU9QRU5TU0xfZnJlZShzdG9yYWdlKTsKIAlpZihhZC0+c2spCiAJCXsKLQkJc2tfZnJlZShhZC0+c2spOworCQlza192b2lkX2ZyZWUoYWQtPnNrKTsKIAkJYWQtPnNrPU5VTEw7CiAJCX0KIAl9CkBAIC01OTYsMjQgKzYwMCwyNCBAQAogCiAJaWYgKGFkLT5zayA9PSBOVUxMKQogCQl7Ci0JCWlmICgoYWQtPnNrPXNrX25ld19udWxsKCkpID09IE5VTEwpCisJCWlmICgoYWQtPnNrPXNrX3ZvaWRfbmV3X251bGwoKSkgPT0gTlVMTCkKIAkJCXsKIAkJCUNSWVBUT2VycihDUllQVE9fRl9DUllQVE9fU0VUX0VYX0RBVEEsRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwogCQkJcmV0dXJuKDApOwogCQkJfQogCQl9Ci0JaT1za19udW0oYWQtPnNrKTsKKwlpPXNrX3ZvaWRfbnVtKGFkLT5zayk7CiAKIAl3aGlsZSAoaSA8PSBpZHgpCiAJCXsKLQkJaWYgKCFza19wdXNoKGFkLT5zayxOVUxMKSkKKwkJaWYgKCFza192b2lkX3B1c2goYWQtPnNrLE5VTEwpKQogCQkJewogCQkJQ1JZUFRPZXJyKENSWVBUT19GX0NSWVBUT19TRVRfRVhfREFUQSxFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CiAJCQlyZXR1cm4oMCk7CiAJCQl9CiAJCWkrKzsKIAkJfQotCXNrX3NldChhZC0+c2ssaWR4LHZhbCk7CisJc2tfdm9pZF9zZXQoYWQtPnNrLGlkeCx2YWwpOwogCXJldHVybigxKTsKIAl9CiAKQEAgLTYyMywxMCArNjI3LDEwIEBACiAJewogCWlmIChhZC0+c2sgPT0gTlVMTCkKIAkJcmV0dXJuKDApOwotCWVsc2UgaWYgKGlkeCA+PSBza19udW0oYWQtPnNrKSkKKwllbHNlIGlmIChpZHggPj0gc2tfdm9pZF9udW0oYWQtPnNrKSkKIAkJcmV0dXJuKDApOwogCWVsc2UKLQkJcmV0dXJuKHNrX3ZhbHVlKGFkLT5zayxpZHgpKTsKKwkJcmV0dXJuKHNrX3ZvaWRfdmFsdWUoYWQtPnNrLGlkeCkpOwogCX0KIAogSU1QTEVNRU5UX1NUQUNLX09GKENSWVBUT19FWF9EQVRBX0ZVTkNTKQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2ZpcHNfZXJyLmMgYi9jcnlwdG8vZmlwc19lcnIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDlmMTE3NC4uMDAwMDAwMAotLS0gYS9jcnlwdG8vZmlwc19lcnIuYworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KLQotI2lmZGVmIE9QRU5TU0xfRklQUwotIyBpbmNsdWRlICJmaXBzX2Vyci5oIgotI2Vsc2UKLXN0YXRpYyB2b2lkICpkdW1teT0mZHVtbXk7Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2NyeXB0by9maXBzX2Vyci5oIGIvY3J5cHRvL2ZpcHNfZXJyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzMjg2MTYuLjAwMDAwMDAKLS0tIGEvY3J5cHRvL2ZpcHNfZXJyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzcgKzAsMCBAQAotLyogY3J5cHRvL2ZpcHNfZXJyLmggKi8KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0gKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSAqCi0gKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0gKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0gKiAgICBvcGVuc3NsLWNvcmVAT3BlblNTTC5vcmcuCi0gKgotICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0gKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0gKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0gKgotICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotICogICAgYWNrbm93bGVkZ21lbnQ6Ci0gKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0gKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqCi0gKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKLSAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KLSAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgotICoKLSAqLwotCi0vKiBOT1RFOiB0aGlzIGZpbGUgd2FzIGF1dG8gZ2VuZXJhdGVkIGJ5IHRoZSBta2Vyci5wbCBzY3JpcHQ6IGFueSBjaGFuZ2VzCi0gKiBtYWRlIHRvIGl0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgc2NyaXB0IG5leHQgdXBkYXRlcyB0aGlzIGZpbGUsCi0gKiBvbmx5IHJlYXNvbiBzdHJpbmdzIHdpbGwgYmUgcHJlc2VydmVkLgotICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0jaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0KLS8qIEJFR0lOIEVSUk9SIENPREVTICovCi0jaWZuZGVmIE9QRU5TU0xfTk9fRVJSCi0KLSNkZWZpbmUgRVJSX0ZVTkMoZnVuYykgRVJSX1BBQ0soRVJSX0xJQl9GSVBTLGZ1bmMsMCkKLSNkZWZpbmUgRVJSX1JFQVNPTihyZWFzb24pIEVSUl9QQUNLKEVSUl9MSUJfRklQUywwLHJlYXNvbikKLQotc3RhdGljIEVSUl9TVFJJTkdfREFUQSBGSVBTX3N0cl9mdW5jdHNbXT0KLQl7Ci17RVJSX0ZVTkMoRklQU19GX0RIX0JVSUxUSU5fR0VOUEFSQU1TKSwJIkRIX0JVSUxUSU5fR0VOUEFSQU1TIn0sCi17RVJSX0ZVTkMoRklQU19GX0RTQV9CVUlMVElOX1BBUkFNR0VOKSwJIkRTQV9CVUlMVElOX1BBUkFNR0VOIn0sCi17RVJSX0ZVTkMoRklQU19GX0RTQV9ET19TSUdOKSwJIkRTQV9kb19zaWduIn0sCi17RVJSX0ZVTkMoRklQU19GX0RTQV9ET19WRVJJRlkpLAkiRFNBX2RvX3ZlcmlmeSJ9LAote0VSUl9GVU5DKEZJUFNfRl9FVlBfQ0lQSEVSSU5JVF9FWCksCSJFVlBfQ2lwaGVySW5pdF9leCJ9LAote0VSUl9GVU5DKEZJUFNfRl9FVlBfRElHRVNUSU5JVF9FWCksCSJFVlBfRGlnZXN0SW5pdF9leCJ9LAote0VSUl9GVU5DKEZJUFNfRl9GSVBTX0NIRUNLX0RTQSksCSJGSVBTX0NIRUNLX0RTQSJ9LAote0VSUl9GVU5DKEZJUFNfRl9GSVBTX0NIRUNLX0lOQ09SRV9GSU5HRVJQUklOVCksCSJGSVBTX0NIRUNLX0lOQ09SRV9GSU5HRVJQUklOVCJ9LAote0VSUl9GVU5DKEZJUFNfRl9GSVBTX0NIRUNLX1JTQSksCSJGSVBTX0NIRUNLX1JTQSJ9LAote0VSUl9GVU5DKEZJUFNfRl9GSVBTX0RTQV9DSEVDSyksCSJGSVBTX0RTQV9DSEVDSyJ9LAote0VSUl9GVU5DKEZJUFNfRl9GSVBTX01PREVfU0VUKSwJIkZJUFNfbW9kZV9zZXQifSwKLXtFUlJfRlVOQyhGSVBTX0ZfRklQU19QS0VZX1NJR05BVFVSRV9URVNUKSwJImZpcHNfcGtleV9zaWduYXR1cmVfdGVzdCJ9LAote0VSUl9GVU5DKEZJUFNfRl9GSVBTX1NFTEZURVNUX0FFUyksCSJGSVBTX3NlbGZ0ZXN0X2FlcyJ9LAote0VSUl9GVU5DKEZJUFNfRl9GSVBTX1NFTEZURVNUX0RFUyksCSJGSVBTX3NlbGZ0ZXN0X2RlcyJ9LAote0VSUl9GVU5DKEZJUFNfRl9GSVBTX1NFTEZURVNUX0RTQSksCSJGSVBTX3NlbGZ0ZXN0X2RzYSJ9LAote0VSUl9GVU5DKEZJUFNfRl9GSVBTX1NFTEZURVNUX0hNQUMpLAkiRklQU19zZWxmdGVzdF9obWFjIn0sCi17RVJSX0ZVTkMoRklQU19GX0ZJUFNfU0VMRlRFU1RfUk5HKSwJIkZJUFNfc2VsZnRlc3Rfcm5nIn0sCi17RVJSX0ZVTkMoRklQU19GX0ZJUFNfU0VMRlRFU1RfU0hBMSksCSJGSVBTX3NlbGZ0ZXN0X3NoYTEifSwKLXtFUlJfRlVOQyhGSVBTX0ZfSEFTSF9GSU5BTCksCSJIQVNIX0ZJTkFMIn0sCi17RVJSX0ZVTkMoRklQU19GX1JTQV9CVUlMVElOX0tFWUdFTiksCSJSU0FfQlVJTFRJTl9LRVlHRU4ifSwKLXtFUlJfRlVOQyhGSVBTX0ZfUlNBX0VBWV9QUklWQVRFX0RFQ1JZUFQpLAkiUlNBX0VBWV9QUklWQVRFX0RFQ1JZUFQifSwKLXtFUlJfRlVOQyhGSVBTX0ZfUlNBX0VBWV9QUklWQVRFX0VOQ1JZUFQpLAkiUlNBX0VBWV9QUklWQVRFX0VOQ1JZUFQifSwKLXtFUlJfRlVOQyhGSVBTX0ZfUlNBX0VBWV9QVUJMSUNfREVDUllQVCksCSJSU0FfRUFZX1BVQkxJQ19ERUNSWVBUIn0sCi17RVJSX0ZVTkMoRklQU19GX1JTQV9FQVlfUFVCTElDX0VOQ1JZUFQpLAkiUlNBX0VBWV9QVUJMSUNfRU5DUllQVCJ9LAote0VSUl9GVU5DKEZJUFNfRl9SU0FfWDkzMV9HRU5FUkFURV9LRVlfRVgpLAkiUlNBX1g5MzFfZ2VuZXJhdGVfa2V5X2V4In0sCi17RVJSX0ZVTkMoRklQU19GX1NTTEVBWV9SQU5EX0JZVEVTKSwJIlNTTEVBWV9SQU5EX0JZVEVTIn0sCi17MCxOVUxMfQotCX07Ci0KLXN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgRklQU19zdHJfcmVhc29uc1tdPQotCXsKLXtFUlJfUkVBU09OKEZJUFNfUl9DQU5OT1RfUkVBRF9FWEUpICAgICAgLCJjYW5ub3QgcmVhZCBleGUifSwKLXtFUlJfUkVBU09OKEZJUFNfUl9DQU5OT1RfUkVBRF9FWEVfRElHRVNUKSwiY2Fubm90IHJlYWQgZXhlIGRpZ2VzdCJ9LAote0VSUl9SRUFTT04oRklQU19SX0NPTlRSQURJQ1RJTkdfRVZJREVOQ0UpLCJjb250cmFkaWN0aW5nIGV2aWRlbmNlIn0sCi17RVJSX1JFQVNPTihGSVBTX1JfRVhFX0RJR0VTVF9ET0VTX05PVF9NQVRDSCksImV4ZSBkaWdlc3QgZG9lcyBub3QgbWF0Y2gifSwKLXtFUlJfUkVBU09OKEZJUFNfUl9GSU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSCksImZpbmdlcnByaW50IGRvZXMgbm90IG1hdGNoIn0sCi17RVJSX1JFQVNPTihGSVBTX1JfRklOR0VSUFJJTlRfRE9FU19OT1RfTUFUQ0hfTk9OUElDX1JFTE9DQVRFRCksImZpbmdlcnByaW50IGRvZXMgbm90IG1hdGNoIG5vbnBpYyByZWxvY2F0ZWQifSwKLXtFUlJfUkVBU09OKEZJUFNfUl9GSU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSF9TRUdNRU5UX0FMSUFTSU5HKSwiZmluZ2VycHJpbnQgZG9lcyBub3QgbWF0Y2ggc2VnbWVudCBhbGlhc2luZyJ9LAote0VSUl9SRUFTT04oRklQU19SX0ZJUFNfTU9ERV9BTFJFQURZX1NFVCksImZpcHMgbW9kZSBhbHJlYWR5IHNldCJ9LAote0VSUl9SRUFTT04oRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKSAsImZpcHMgc2VsZnRlc3QgZmFpbGVkIn0sCi17RVJSX1JFQVNPTihGSVBTX1JfSU5WQUxJRF9LRVlfTEVOR1RIKSAgICwiaW52YWxpZCBrZXkgbGVuZ3RoIn0sCi17RVJSX1JFQVNPTihGSVBTX1JfS0VZX1RPT19TSE9SVCkgICAgICAgICwia2V5IHRvbyBzaG9ydCJ9LAote0VSUl9SRUFTT04oRklQU19SX05PTl9GSVBTX01FVEhPRCkgICAgICAsIm5vbiBmaXBzIG1ldGhvZCJ9LAote0VSUl9SRUFTT04oRklQU19SX1BBSVJXSVNFX1RFU1RfRkFJTEVEKSAsInBhaXJ3aXNlIHRlc3QgZmFpbGVkIn0sCi17RVJSX1JFQVNPTihGSVBTX1JfUlNBX0RFQ1JZUFRfRVJST1IpICAgICwicnNhIGRlY3J5cHQgZXJyb3IifSwKLXtFUlJfUkVBU09OKEZJUFNfUl9SU0FfRU5DUllQVF9FUlJPUikgICAgLCJyc2EgZW5jcnlwdCBlcnJvciJ9LAote0VSUl9SRUFTT04oRklQU19SX1NFTEZURVNUX0ZBSUxFRCkgICAgICAsInNlbGZ0ZXN0IGZhaWxlZCJ9LAote0VSUl9SRUFTT04oRklQU19SX1RFU1RfRkFJTFVSRSkgICAgICAgICAsInRlc3QgZmFpbHVyZSJ9LAote0VSUl9SRUFTT04oRklQU19SX1VOU1VQUE9SVEVEX1BMQVRGT1JNKSAsInVuc3VwcG9ydGVkIHBsYXRmb3JtIn0sCi17MCxOVUxMfQotCX07Ci0KLSNlbmRpZgotCi12b2lkIEVSUl9sb2FkX0ZJUFNfc3RyaW5ncyh2b2lkKQotCXsKLSNpZm5kZWYgT1BFTlNTTF9OT19FUlIKLQotCWlmIChFUlJfZnVuY19lcnJvcl9zdHJpbmcoRklQU19zdHJfZnVuY3RzWzBdLmVycm9yKSA9PSBOVUxMKQotCQl7Ci0JCUVSUl9sb2FkX3N0cmluZ3MoMCxGSVBTX3N0cl9mdW5jdHMpOwotCQlFUlJfbG9hZF9zdHJpbmdzKDAsRklQU19zdHJfcmVhc29ucyk7Ci0JCX0KLSNlbmRpZgotCX0KZGlmZiAtLWdpdCBhL2NyeXB0by9obWFjL01ha2VmaWxlIGIvY3J5cHRvL2htYWMvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjZmEzN2QuLjAwMDAwMDAKLS0tIGEvY3J5cHRvL2htYWMvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0jCi0jIE9wZW5TU0wvY3J5cHRvL21kL01ha2VmaWxlCi0jCi0KLURJUj0JaG1hYwotVE9QPQkuLi8uLgotQ0M9CWNjCi1JTkNMVURFUz0KLUNGTEFHPS1nCi1NQUtFRklMRT0JTWFrZWZpbGUKLUFSPQkJYXIgcgotCi1DRkxBR1M9ICQoSU5DTFVERVMpICQoQ0ZMQUcpCi0KLUdFTkVSQUw9TWFrZWZpbGUKLVRFU1Q9aG1hY3Rlc3QuYwotQVBQUz0KLQotTElCPSQoVE9QKS9saWJjcnlwdG8uYQotTElCU1JDPWhtYWMuYwotTElCT0JKPWhtYWMubwotCi1TUkM9ICQoTElCU1JDKQotCi1FWEhFQURFUj0gaG1hYy5oCi1IRUFERVI9CSQoRVhIRUFERVIpCi0KLUFMTD0gICAgJChHRU5FUkFMKSAkKFNSQykgJChIRUFERVIpCi0KLXRvcDoKLQkoY2QgLi4vLi47ICQoTUFLRSkgRElSUz1jcnlwdG8gU0RJUlM9JChESVIpIHN1Yl9hbGwpCi0KLWFsbDoJbGliCi0KLWxpYjoJJChMSUJPQkopCi0JJChBUlgpICQoTElCKSAkKExJQk9CSikKLQkkKFJBTkxJQikgJChMSUIpIHx8IGVjaG8gTmV2ZXIgbWluZC4KLQlAdG91Y2ggbGliCi0KLWZpbGVzOgotCSQoUEVSTCkgJChUT1ApL3V0aWwvZmlsZXMucGwgTWFrZWZpbGUgPj4gJChUT1ApL01JTkZPCi0KLWxpbmtzOgotCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9pbmNsdWRlL29wZW5zc2wgJChFWEhFQURFUikKLQlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vdGVzdCAkKFRFU1QpCi0JQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL2FwcHMgJChBUFBTKQotCi1pbnN0YWxsOgotCUBbIC1uICIkKElOU1RBTExUT1ApIiBdICMgc2hvdWxkIGJlIHNldCBieSB0b3AgTWFrZWZpbGUuLi4KLQlAaGVhZGVybGlzdD0iJChFWEhFQURFUikiOyBmb3IgaSBpbiAkJGhlYWRlcmxpc3QgOyBcCi0JZG8gIFwKLQkoY3AgJCRpICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpOyBcCi0JY2htb2QgNjQ0ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpICk7IFwKLQlkb25lOwotCi10YWdzOgotCWN0YWdzICQoU1JDKQotCi10ZXN0czoKLQotbGludDoKLQlsaW50IC1ETElOVCAkKElOQ0xVREVTKSAkKFNSQyk+Zmx1ZmYKLQotZGVwZW5kOgotCUBbIC1uICIkKE1BS0VERVBFTkQpIiBdICMgc2hvdWxkIGJlIHNldCBieSB1cHBlciBNYWtlZmlsZS4uLgotCSQoTUFLRURFUEVORCkgLS0gJChDRkxBRykgJChJTkNMVURFUykgJChERVBGTEFHKSAtLSAkKFBST0dTKSAkKExJQlNSQykKLQotZGNsZWFuOgotCSQoUEVSTCkgLXBlICdpZiAoL14jIERPIE5PVCBERUxFVEUgVEhJUyBMSU5FLykge3ByaW50OyBleGl0KDApO30nICQoTUFLRUZJTEUpID5NYWtlZmlsZS5uZXcKLQltdiAtZiBNYWtlZmlsZS5uZXcgJChNQUtFRklMRSkKLQotY2xlYW46Ci0Jcm0gLWYgKi5vICoub2JqIGxpYiB0YWdzIGNvcmUgLnB1cmUgLm5mcyogKi5vbGQgKi5iYWsgZmx1ZmYKLQotIyBETyBOT1QgREVMRVRFIFRISVMgTElORSAtLSBtYWtlIGRlcGVuZCBkZXBlbmRzIG9uIGl0LgotCi1obWFjLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLWhtYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLWhtYWMubzogLi4vY3J5cHRsaWIuaCBobWFjLmMKZGlmZiAtLWdpdCBhL2NyeXB0by9obWFjL2htX2FtZXRoLmMgYi9jcnlwdG8vaG1hYy9obV9hbWV0aC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkOGE4OTEKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vaG1hYy9obV9hbWV0aC5jCkBAIC0wLDAgKzEsMTY3IEBACisvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKyAqIHByb2plY3QgMjAwNy4KKyAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoYykgMjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKyAqCisgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisgKgorICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisgKgorICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworICogICAgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorICoKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJjcnlwdGxpYi5oIgorI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisjaW5jbHVkZSAiYXNuMV9sb2NsLmgiCisKKyNkZWZpbmUgSE1BQ19URVNUX1BSSVZBVEVfS0VZX0ZPUk1BVAorCisvKiBITUFDICJBU04xIiBtZXRob2QuIFRoaXMgaXMganVzdCBoZXJlIHRvIGluZGljYXRlIHRoZQorICogbWF4aW11bSBITUFDIG91dHB1dCBsZW5ndGggYW5kIHRvIGZyZWUgdXAgYW4gSE1BQworICoga2V5LgorICovCisKK3N0YXRpYyBpbnQgaG1hY19zaXplKGNvbnN0IEVWUF9QS0VZICpwa2V5KQorCXsKKwlyZXR1cm4gRVZQX01BWF9NRF9TSVpFOworCX0KKworc3RhdGljIHZvaWQgaG1hY19rZXlfZnJlZShFVlBfUEtFWSAqcGtleSkKKwl7CisJQVNOMV9PQ1RFVF9TVFJJTkcgKm9zID0gKEFTTjFfT0NURVRfU1RSSU5HICopcGtleS0+cGtleS5wdHI7CisJaWYgKG9zKQorCQl7CisJCWlmIChvcy0+ZGF0YSkKKwkJCU9QRU5TU0xfY2xlYW5zZShvcy0+ZGF0YSwgb3MtPmxlbmd0aCk7CisJCUFTTjFfT0NURVRfU1RSSU5HX2ZyZWUob3MpOworCQl9CisJfQorCisKK3N0YXRpYyBpbnQgaG1hY19wa2V5X2N0cmwoRVZQX1BLRVkgKnBrZXksIGludCBvcCwgbG9uZyBhcmcxLCB2b2lkICphcmcyKQorCXsKKwlzd2l0Y2ggKG9wKQorCQl7CisJCWNhc2UgQVNOMV9QS0VZX0NUUkxfREVGQVVMVF9NRF9OSUQ6CisJCSooaW50ICopYXJnMiA9IE5JRF9zaGExOworCQlyZXR1cm4gMTsKKworCQlkZWZhdWx0OgorCQlyZXR1cm4gLTI7CisJCX0KKwl9CisKKyNpZmRlZiBITUFDX1RFU1RfUFJJVkFURV9LRVlfRk9STUFUCisvKiBBIGJvZ3VzIHByaXZhdGUga2V5IGZvcm1hdCBmb3IgdGVzdCBwdXJwb3Nlcy4gVGhpcyBpcyBzaW1wbHkgdGhlCisgKiBITUFDIGtleSB3aXRoICJITUFDIFBSSVZBVEUgS0VZIiBpbiB0aGUgaGVhZGVycy4gV2hlbiBlbmFibGVkIHRoZQorICogZ2VucGtleSB1dGlsaXR5IGNhbiBiZSB1c2VkIHRvICJnZW5lcmF0ZSIgSE1BQyBrZXlzLgorICovCisKK3N0YXRpYyBpbnQgb2xkX2htYWNfZGVjb2RlKEVWUF9QS0VZICpwa2V5LAorCQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICoqcGRlciwgaW50IGRlcmxlbikKKwl7CisJQVNOMV9PQ1RFVF9TVFJJTkcgKm9zOworCW9zID0gQVNOMV9PQ1RFVF9TVFJJTkdfbmV3KCk7CisJaWYgKCFvcyB8fCAhQVNOMV9PQ1RFVF9TVFJJTkdfc2V0KG9zLCAqcGRlciwgZGVybGVuKSkKKwkJcmV0dXJuIDA7CisJRVZQX1BLRVlfYXNzaWduKHBrZXksIEVWUF9QS0VZX0hNQUMsIG9zKTsKKwlyZXR1cm4gMTsKKwl9CisKK3N0YXRpYyBpbnQgb2xkX2htYWNfZW5jb2RlKGNvbnN0IEVWUF9QS0VZICpwa2V5LCB1bnNpZ25lZCBjaGFyICoqcGRlcikKKwl7CisJaW50IGluYzsKKwlBU04xX09DVEVUX1NUUklORyAqb3MgPSAoQVNOMV9PQ1RFVF9TVFJJTkcgKilwa2V5LT5wa2V5LnB0cjsKKwlpZiAocGRlcikKKwkJeworCQlpZiAoISpwZGVyKQorCQkJeworCQkJKnBkZXIgPSBPUEVOU1NMX21hbGxvYyhvcy0+bGVuZ3RoKTsKKwkJCWluYyA9IDA7CisJCQl9CisJCWVsc2UgaW5jID0gMTsKKworCQltZW1jcHkoKnBkZXIsIG9zLT5kYXRhLCBvcy0+bGVuZ3RoKTsKKworCQlpZiAoaW5jKQorCQkJKnBkZXIgKz0gb3MtPmxlbmd0aDsKKwkJfQorCQkJCisJcmV0dXJuIG9zLT5sZW5ndGg7CisJfQorCisjZW5kaWYKKworY29uc3QgRVZQX1BLRVlfQVNOMV9NRVRIT0QgaG1hY19hc24xX21ldGggPSAKKwl7CisJRVZQX1BLRVlfSE1BQywKKwlFVlBfUEtFWV9ITUFDLAorCTAsCisKKwkiSE1BQyIsCisJIk9wZW5TU0wgSE1BQyBtZXRob2QiLAorCisJMCwwLDAsMCwKKworCTAsMCwwLAorCisJaG1hY19zaXplLAorCTAsCisJMCwwLDAsMCwwLDAsCisKKwlobWFjX2tleV9mcmVlLAorCWhtYWNfcGtleV9jdHJsLAorI2lmZGVmIEhNQUNfVEVTVF9QUklWQVRFX0tFWV9GT1JNQVQKKwlvbGRfaG1hY19kZWNvZGUsCisJb2xkX2htYWNfZW5jb2RlCisjZWxzZQorCTAsMAorI2VuZGlmCisJfTsKKwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2htYWMvaG1fcG1ldGguYyBiL2NyeXB0by9obWFjL2htX3BtZXRoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg1OTIxYwotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9obWFjL2htX3BtZXRoLmMKQEAgLTAsMCArMSwyNjUgQEAKKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorICogcHJvamVjdCAyMDA3LgorICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChjKSAyMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorICoKKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKyAqCisgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKyAqCisgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisgKiAgICBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZworICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQorICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisgKgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgImNyeXB0bGliLmgiCisjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+CisjaW5jbHVkZSA8b3BlbnNzbC94NTA5djMuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgorI2luY2x1ZGUgImV2cF9sb2NsLmgiCisKKy8qIEhNQUMgcGtleSBjb250ZXh0IHN0cnVjdHVyZSAqLworCit0eXBlZGVmIHN0cnVjdAorCXsKKwljb25zdCBFVlBfTUQgKm1kOwkvKiBNRCBmb3IgSE1BQyB1c2UgKi8KKwlBU04xX09DVEVUX1NUUklORyBrdG1wOyAvKiBUZW1wIHN0b3JhZ2UgZm9yIGtleSAqLworCUhNQUNfQ1RYIGN0eDsKKwl9IEhNQUNfUEtFWV9DVFg7CisKK3N0YXRpYyBpbnQgcGtleV9obWFjX2luaXQoRVZQX1BLRVlfQ1RYICpjdHgpCisJeworCUhNQUNfUEtFWV9DVFggKmhjdHg7CisJaGN0eCA9IE9QRU5TU0xfbWFsbG9jKHNpemVvZihITUFDX1BLRVlfQ1RYKSk7CisJaWYgKCFoY3R4KQorCQlyZXR1cm4gMDsKKwloY3R4LT5tZCA9IE5VTEw7CisJaGN0eC0+a3RtcC5kYXRhID0gTlVMTDsKKwloY3R4LT5rdG1wLmxlbmd0aCA9IDA7CisJaGN0eC0+a3RtcC5mbGFncyA9IDA7CisJaGN0eC0+a3RtcC50eXBlID0gVl9BU04xX09DVEVUX1NUUklORzsKKwlITUFDX0NUWF9pbml0KCZoY3R4LT5jdHgpOworCisJY3R4LT5kYXRhID0gaGN0eDsKKwljdHgtPmtleWdlbl9pbmZvX2NvdW50ID0gMDsKKworCXJldHVybiAxOworCX0KKworc3RhdGljIGludCBwa2V5X2htYWNfY29weShFVlBfUEtFWV9DVFggKmRzdCwgRVZQX1BLRVlfQ1RYICpzcmMpCisJeworCUhNQUNfUEtFWV9DVFggKnNjdHgsICpkY3R4OworCWlmICghcGtleV9obWFjX2luaXQoZHN0KSkKKwkJcmV0dXJuIDA7CisgICAgICAgCXNjdHggPSBzcmMtPmRhdGE7CisJZGN0eCA9IGRzdC0+ZGF0YTsKKwlkY3R4LT5tZCA9IHNjdHgtPm1kOworCUhNQUNfQ1RYX2luaXQoJmRjdHgtPmN0eCk7CisJSE1BQ19DVFhfY29weSgmZGN0eC0+Y3R4LCAmc2N0eC0+Y3R4KTsKKwlpZiAoc2N0eC0+a3RtcC5kYXRhKQorCQl7CisJCWlmICghQVNOMV9PQ1RFVF9TVFJJTkdfc2V0KCZkY3R4LT5rdG1wLAorCQkJCQlzY3R4LT5rdG1wLmRhdGEsIHNjdHgtPmt0bXAubGVuZ3RoKSkKKwkJCXJldHVybiAwOworCQl9CisJcmV0dXJuIDE7CisJfQorCitzdGF0aWMgdm9pZCBwa2V5X2htYWNfY2xlYW51cChFVlBfUEtFWV9DVFggKmN0eCkKKwl7CisJSE1BQ19QS0VZX0NUWCAqaGN0eCA9IGN0eC0+ZGF0YTsKKwlITUFDX0NUWF9jbGVhbnVwKCZoY3R4LT5jdHgpOworCWlmIChoY3R4LT5rdG1wLmRhdGEpCisJCXsKKwkJaWYgKGhjdHgtPmt0bXAubGVuZ3RoKQorCQkJT1BFTlNTTF9jbGVhbnNlKGhjdHgtPmt0bXAuZGF0YSwgaGN0eC0+a3RtcC5sZW5ndGgpOworCQlPUEVOU1NMX2ZyZWUoaGN0eC0+a3RtcC5kYXRhKTsKKwkJaGN0eC0+a3RtcC5kYXRhID0gTlVMTDsKKwkJfQorCU9QRU5TU0xfZnJlZShoY3R4KTsKKwl9CisKK3N0YXRpYyBpbnQgcGtleV9obWFjX2tleWdlbihFVlBfUEtFWV9DVFggKmN0eCwgRVZQX1BLRVkgKnBrZXkpCisJeworCUFTTjFfT0NURVRfU1RSSU5HICpoa2V5ID0gTlVMTDsKKwlITUFDX1BLRVlfQ1RYICpoY3R4ID0gY3R4LT5kYXRhOworCWlmICghaGN0eC0+a3RtcC5kYXRhKQorCQlyZXR1cm4gMDsKKwloa2V5ID0gQVNOMV9PQ1RFVF9TVFJJTkdfZHVwKCZoY3R4LT5rdG1wKTsKKwlpZiAoIWhrZXkpCisJCXJldHVybiAwOworCUVWUF9QS0VZX2Fzc2lnbihwa2V5LCBFVlBfUEtFWV9ITUFDLCBoa2V5KTsKKwkKKwlyZXR1cm4gMTsKKwl9CisKK3N0YXRpYyBpbnQgaW50X3VwZGF0ZShFVlBfTURfQ1RYICpjdHgsY29uc3Qgdm9pZCAqZGF0YSxzaXplX3QgY291bnQpCisJeworCUhNQUNfUEtFWV9DVFggKmhjdHggPSBjdHgtPnBjdHgtPmRhdGE7CisJSE1BQ19VcGRhdGUoJmhjdHgtPmN0eCwgZGF0YSwgY291bnQpOworCXJldHVybiAxOworCX0KKworc3RhdGljIGludCBobWFjX3NpZ25jdHhfaW5pdChFVlBfUEtFWV9DVFggKmN0eCwgRVZQX01EX0NUWCAqbWN0eCkKKwl7CisJRVZQX01EX0NUWF9zZXRfZmxhZ3MobWN0eCwgRVZQX01EX0NUWF9GTEFHX05PX0lOSVQpOworCW1jdHgtPnVwZGF0ZSA9IGludF91cGRhdGU7CisJcmV0dXJuIDE7CisJfQorCitzdGF0aWMgaW50IGhtYWNfc2lnbmN0eChFVlBfUEtFWV9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqc2lnLCBzaXplX3QgKnNpZ2xlbiwKKwkJCQkJRVZQX01EX0NUWCAqbWN0eCkKKwl7CisJdW5zaWduZWQgaW50IGhsZW47CisJSE1BQ19QS0VZX0NUWCAqaGN0eCA9IGN0eC0+ZGF0YTsKKwlpbnQgbCA9IEVWUF9NRF9DVFhfc2l6ZShtY3R4KTsKKworCWlmIChsIDwgMCkKKwkJcmV0dXJuIDA7CisJKnNpZ2xlbiA9IGw7CisJaWYgKCFzaWcpCisJCXJldHVybiAxOworCisJSE1BQ19GaW5hbCgmaGN0eC0+Y3R4LCBzaWcsICZobGVuKTsKKwkqc2lnbGVuID0gKHNpemVfdClobGVuOworCXJldHVybiAxOworCX0KKworc3RhdGljIGludCBwa2V5X2htYWNfY3RybChFVlBfUEtFWV9DVFggKmN0eCwgaW50IHR5cGUsIGludCBwMSwgdm9pZCAqcDIpCisJeworCUhNQUNfUEtFWV9DVFggKmhjdHggPSBjdHgtPmRhdGE7CisJQVNOMV9PQ1RFVF9TVFJJTkcgKmtleTsKKwlzd2l0Y2ggKHR5cGUpCisJCXsKKworCQljYXNlIEVWUF9QS0VZX0NUUkxfU0VUX01BQ19LRVk6CisJCWlmICgoIXAyICYmIHAxID4gMCkgfHwgKHAxIDwgLTEpKQorCQkJcmV0dXJuIDA7CisJCWlmICghQVNOMV9PQ1RFVF9TVFJJTkdfc2V0KCZoY3R4LT5rdG1wLCBwMiwgcDEpKQorCQkJcmV0dXJuIDA7CisJCWJyZWFrOworCisJCWNhc2UgRVZQX1BLRVlfQ1RSTF9NRDoKKwkJaGN0eC0+bWQgPSBwMjsKKwkJYnJlYWs7CisKKwkJY2FzZSBFVlBfUEtFWV9DVFJMX0RJR0VTVElOSVQ6CisJCWtleSA9IChBU04xX09DVEVUX1NUUklORyAqKWN0eC0+cGtleS0+cGtleS5wdHI7CisJCUhNQUNfSW5pdF9leCgmaGN0eC0+Y3R4LCBrZXktPmRhdGEsIGtleS0+bGVuZ3RoLCBoY3R4LT5tZCwKKwkJCQljdHgtPmVuZ2luZSk7CisJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCXJldHVybiAtMjsKKworCQl9CisJcmV0dXJuIDE7CisJfQorCitzdGF0aWMgaW50IHBrZXlfaG1hY19jdHJsX3N0cihFVlBfUEtFWV9DVFggKmN0eCwKKwkJCWNvbnN0IGNoYXIgKnR5cGUsIGNvbnN0IGNoYXIgKnZhbHVlKQorCXsKKwlpZiAoIXZhbHVlKQorCQl7CisJCXJldHVybiAwOworCQl9CisJaWYgKCFzdHJjbXAodHlwZSwgImtleSIpKQorCQl7CisJCXZvaWQgKnAgPSAodm9pZCAqKXZhbHVlOworCQlyZXR1cm4gcGtleV9obWFjX2N0cmwoY3R4LCBFVlBfUEtFWV9DVFJMX1NFVF9NQUNfS0VZLAorCQkJCS0xLCBwKTsKKwkJfQorCWlmICghc3RyY21wKHR5cGUsICJoZXhrZXkiKSkKKwkJeworCQl1bnNpZ25lZCBjaGFyICprZXk7CisJCWludCByOworCQlsb25nIGtleWxlbjsKKwkJa2V5ID0gc3RyaW5nX3RvX2hleCh2YWx1ZSwgJmtleWxlbik7CisJCWlmICgha2V5KQorCQkJcmV0dXJuIDA7CisJCXIgPSBwa2V5X2htYWNfY3RybChjdHgsIEVWUF9QS0VZX0NUUkxfU0VUX01BQ19LRVksIGtleWxlbiwga2V5KTsKKwkJT1BFTlNTTF9mcmVlKGtleSk7CisJCXJldHVybiByOworCQl9CisJcmV0dXJuIC0yOworCX0KKworY29uc3QgRVZQX1BLRVlfTUVUSE9EIGhtYWNfcGtleV9tZXRoID0gCisJeworCUVWUF9QS0VZX0hNQUMsCisJMCwKKwlwa2V5X2htYWNfaW5pdCwKKwlwa2V5X2htYWNfY29weSwKKwlwa2V5X2htYWNfY2xlYW51cCwKKworCTAsIDAsCisKKwkwLAorCXBrZXlfaG1hY19rZXlnZW4sCisKKwkwLCAwLAorCisJMCwgMCwKKworCTAsMCwKKworCWhtYWNfc2lnbmN0eF9pbml0LAorCWhtYWNfc2lnbmN0eCwKKworCTAsMCwKKworCTAsMCwKKworCTAsMCwKKworCTAsMCwKKworCXBrZXlfaG1hY19jdHJsLAorCXBrZXlfaG1hY19jdHJsX3N0cgorCisJfTsKZGlmZiAtLWdpdCBhL2NyeXB0by9obWFjL2htYWMuYyBiL2NyeXB0by9obWFjL2htYWMuYwppbmRleCBjYmMxYzc2Li40NTAxNWZlIDEwMDY0NAotLS0gYS9jcnlwdG8vaG1hYy9obWFjLmMKKysrIGIvY3J5cHRvL2htYWMvaG1hYy5jCkBAIC02MSw5ICs2MSw3IEBACiAjaW5jbHVkZSAiY3J5cHRsaWIuaCIKICNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KIAotI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLQotdm9pZCBITUFDX0luaXRfZXgoSE1BQ19DVFggKmN0eCwgY29uc3Qgdm9pZCAqa2V5LCBpbnQgbGVuLAoraW50IEhNQUNfSW5pdF9leChITUFDX0NUWCAqY3R4LCBjb25zdCB2b2lkICprZXksIGludCBsZW4sCiAJCSAgY29uc3QgRVZQX01EICptZCwgRU5HSU5FICppbXBsKQogCXsKIAlpbnQgaSxqLHJlc2V0PTA7CkBAIC04NCwxMCArODIsMTMgQEAKIAkJT1BFTlNTTF9hc3NlcnQoaiA8PSAoaW50KXNpemVvZihjdHgtPmtleSkpOwogCQlpZiAoaiA8IGxlbikKIAkJCXsKLQkJCUVWUF9EaWdlc3RJbml0X2V4KCZjdHgtPm1kX2N0eCxtZCwgaW1wbCk7Ci0JCQlFVlBfRGlnZXN0VXBkYXRlKCZjdHgtPm1kX2N0eCxrZXksbGVuKTsKLQkJCUVWUF9EaWdlc3RGaW5hbF9leCgmKGN0eC0+bWRfY3R4KSxjdHgtPmtleSwKLQkJCQkmY3R4LT5rZXlfbGVuZ3RoKTsKKwkJCWlmICghRVZQX0RpZ2VzdEluaXRfZXgoJmN0eC0+bWRfY3R4LG1kLCBpbXBsKSkKKwkJCQlnb3RvIGVycjsKKwkJCWlmICghRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LT5tZF9jdHgsa2V5LGxlbikpCisJCQkJZ290byBlcnI7CisJCQlpZiAoIUVWUF9EaWdlc3RGaW5hbF9leCgmKGN0eC0+bWRfY3R4KSxjdHgtPmtleSwKKwkJCQkmY3R4LT5rZXlfbGVuZ3RoKSkKKwkJCQlnb3RvIGVycjsKIAkJCX0KIAkJZWxzZQogCQkJewpAQCAtMTA0LDMxICsxMDUsMzggQEAKIAkJewogCQlmb3IgKGk9MDsgaTxITUFDX01BWF9NRF9DQkxPQ0s7IGkrKykKIAkJCXBhZFtpXT0weDM2XmN0eC0+a2V5W2ldOwotCQlFVlBfRGlnZXN0SW5pdF9leCgmY3R4LT5pX2N0eCxtZCwgaW1wbCk7Ci0JCUVWUF9EaWdlc3RVcGRhdGUoJmN0eC0+aV9jdHgscGFkLEVWUF9NRF9ibG9ja19zaXplKG1kKSk7CisJCWlmICghRVZQX0RpZ2VzdEluaXRfZXgoJmN0eC0+aV9jdHgsbWQsIGltcGwpKQorCQkJZ290byBlcnI7CisJCWlmICghRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LT5pX2N0eCxwYWQsRVZQX01EX2Jsb2NrX3NpemUobWQpKSkKKwkJCWdvdG8gZXJyOwogCiAJCWZvciAoaT0wOyBpPEhNQUNfTUFYX01EX0NCTE9DSzsgaSsrKQogCQkJcGFkW2ldPTB4NWNeY3R4LT5rZXlbaV07Ci0JCUVWUF9EaWdlc3RJbml0X2V4KCZjdHgtPm9fY3R4LG1kLCBpbXBsKTsKLQkJRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LT5vX2N0eCxwYWQsRVZQX01EX2Jsb2NrX3NpemUobWQpKTsKKwkJaWYgKCFFVlBfRGlnZXN0SW5pdF9leCgmY3R4LT5vX2N0eCxtZCwgaW1wbCkpCisJCQlnb3RvIGVycjsKKwkJaWYgKCFFVlBfRGlnZXN0VXBkYXRlKCZjdHgtPm9fY3R4LHBhZCxFVlBfTURfYmxvY2tfc2l6ZShtZCkpKQorCQkJZ290byBlcnI7CiAJCX0KLQlFVlBfTURfQ1RYX2NvcHlfZXgoJmN0eC0+bWRfY3R4LCZjdHgtPmlfY3R4KTsKKwlpZiAoIUVWUF9NRF9DVFhfY29weV9leCgmY3R4LT5tZF9jdHgsJmN0eC0+aV9jdHgpKQorCQkJZ290byBlcnI7CisJcmV0dXJuIDE7CisJZXJyOgorCXJldHVybiAwOwogCX0KIAotdm9pZCBITUFDX0luaXQoSE1BQ19DVFggKmN0eCwgY29uc3Qgdm9pZCAqa2V5LCBpbnQgbGVuLAotCSAgICAgICBjb25zdCBFVlBfTUQgKm1kKQoraW50IEhNQUNfSW5pdChITUFDX0NUWCAqY3R4LCBjb25zdCB2b2lkICprZXksIGludCBsZW4sIGNvbnN0IEVWUF9NRCAqbWQpCiAJewogCWlmKGtleSAmJiBtZCkKIAkgICAgSE1BQ19DVFhfaW5pdChjdHgpOwotCUhNQUNfSW5pdF9leChjdHgsa2V5LGxlbixtZCwgTlVMTCk7CisJcmV0dXJuIEhNQUNfSW5pdF9leChjdHgsa2V5LGxlbixtZCwgTlVMTCk7CiAJfQogCi12b2lkIEhNQUNfVXBkYXRlKEhNQUNfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHNpemVfdCBsZW4pCitpbnQgSE1BQ19VcGRhdGUoSE1BQ19DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgc2l6ZV90IGxlbikKIAl7Ci0JRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LT5tZF9jdHgsZGF0YSxsZW4pOworCXJldHVybiBFVlBfRGlnZXN0VXBkYXRlKCZjdHgtPm1kX2N0eCxkYXRhLGxlbik7CiAJfQogCi12b2lkIEhNQUNfRmluYWwoSE1BQ19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqbWQsIHVuc2lnbmVkIGludCAqbGVuKQoraW50IEhNQUNfRmluYWwoSE1BQ19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqbWQsIHVuc2lnbmVkIGludCAqbGVuKQogCXsKIAlpbnQgajsKIAl1bnNpZ25lZCBpbnQgaTsKQEAgLTEzNiwxMCArMTQ0LDE3IEBACiAKIAlqPUVWUF9NRF9ibG9ja19zaXplKGN0eC0+bWQpOwogCi0JRVZQX0RpZ2VzdEZpbmFsX2V4KCZjdHgtPm1kX2N0eCxidWYsJmkpOwotCUVWUF9NRF9DVFhfY29weV9leCgmY3R4LT5tZF9jdHgsJmN0eC0+b19jdHgpOwotCUVWUF9EaWdlc3RVcGRhdGUoJmN0eC0+bWRfY3R4LGJ1ZixpKTsKLQlFVlBfRGlnZXN0RmluYWxfZXgoJmN0eC0+bWRfY3R4LG1kLGxlbik7CisJaWYgKCFFVlBfRGlnZXN0RmluYWxfZXgoJmN0eC0+bWRfY3R4LGJ1ZiwmaSkpCisJCWdvdG8gZXJyOworCWlmICghRVZQX01EX0NUWF9jb3B5X2V4KCZjdHgtPm1kX2N0eCwmY3R4LT5vX2N0eCkpCisJCWdvdG8gZXJyOworCWlmICghRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LT5tZF9jdHgsYnVmLGkpKQorCQlnb3RvIGVycjsKKwlpZiAoIUVWUF9EaWdlc3RGaW5hbF9leCgmY3R4LT5tZF9jdHgsbWQsbGVuKSkKKwkJZ290byBlcnI7CisJcmV0dXJuIDE7CisJZXJyOgorCXJldHVybiAwOwogCX0KIAogdm9pZCBITUFDX0NUWF9pbml0KEhNQUNfQ1RYICpjdHgpCkBAIC0xNDksNiArMTY0LDIyIEBACiAJRVZQX01EX0NUWF9pbml0KCZjdHgtPm1kX2N0eCk7CiAJfQogCitpbnQgSE1BQ19DVFhfY29weShITUFDX0NUWCAqZGN0eCwgSE1BQ19DVFggKnNjdHgpCisJeworCWlmICghRVZQX01EX0NUWF9jb3B5KCZkY3R4LT5pX2N0eCwgJnNjdHgtPmlfY3R4KSkKKwkJZ290byBlcnI7CisJaWYgKCFFVlBfTURfQ1RYX2NvcHkoJmRjdHgtPm9fY3R4LCAmc2N0eC0+b19jdHgpKQorCQlnb3RvIGVycjsKKwlpZiAoIUVWUF9NRF9DVFhfY29weSgmZGN0eC0+bWRfY3R4LCAmc2N0eC0+bWRfY3R4KSkKKwkJZ290byBlcnI7CisJbWVtY3B5KGRjdHgtPmtleSwgc2N0eC0+a2V5LCBITUFDX01BWF9NRF9DQkxPQ0spOworCWRjdHgtPmtleV9sZW5ndGggPSBzY3R4LT5rZXlfbGVuZ3RoOworCWRjdHgtPm1kID0gc2N0eC0+bWQ7CisJcmV0dXJuIDE7CisJZXJyOgorCXJldHVybiAwOworCX0KKwogdm9pZCBITUFDX0NUWF9jbGVhbnVwKEhNQUNfQ1RYICpjdHgpCiAJewogCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4LT5pX2N0eCk7CkBAIC0xNjYsMTEgKzE5NywxNiBAQAogCiAJaWYgKG1kID09IE5VTEwpIG1kPW07CiAJSE1BQ19DVFhfaW5pdCgmYyk7Ci0JSE1BQ19Jbml0KCZjLGtleSxrZXlfbGVuLGV2cF9tZCk7Ci0JSE1BQ19VcGRhdGUoJmMsZCxuKTsKLQlITUFDX0ZpbmFsKCZjLG1kLG1kX2xlbik7CisJaWYgKCFITUFDX0luaXQoJmMsa2V5LGtleV9sZW4sZXZwX21kKSkKKwkJZ290byBlcnI7CisJaWYgKCFITUFDX1VwZGF0ZSgmYyxkLG4pKQorCQlnb3RvIGVycjsKKwlpZiAoIUhNQUNfRmluYWwoJmMsbWQsbWRfbGVuKSkKKwkJZ290byBlcnI7CiAJSE1BQ19DVFhfY2xlYW51cCgmYyk7Ci0JcmV0dXJuKG1kKTsKKwlyZXR1cm4gbWQ7CisJZXJyOgorCXJldHVybiBOVUxMOwogCX0KIAogdm9pZCBITUFDX0NUWF9zZXRfZmxhZ3MoSE1BQ19DVFggKmN0eCwgdW5zaWduZWQgbG9uZyBmbGFncykKQEAgLTE3OSw1ICsyMTUsMyBAQAogCUVWUF9NRF9DVFhfc2V0X2ZsYWdzKCZjdHgtPm9fY3R4LCBmbGFncyk7CiAJRVZQX01EX0NUWF9zZXRfZmxhZ3MoJmN0eC0+bWRfY3R4LCBmbGFncyk7CiAJfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2NyeXB0by9obWFjL2htYWMuaCBiL2NyeXB0by9obWFjL2htYWMuaAppbmRleCBmYzM4ZmZiLi4xYmUwMDIyIDEwMDY0NAotLS0gYS9jcnlwdG8vaG1hYy9obWFjLmgKKysrIGIvY3J5cHRvL2htYWMvaG1hYy5oCkBAIC05MCwxNSArOTAsMTYgQEAKIAogI2RlZmluZSBITUFDX2NsZWFudXAoY3R4KSBITUFDX0NUWF9jbGVhbnVwKGN0eCkgLyogZGVwcmVjYXRlZCAqLwogCi12b2lkIEhNQUNfSW5pdChITUFDX0NUWCAqY3R4LCBjb25zdCB2b2lkICprZXksIGludCBsZW4sCitpbnQgSE1BQ19Jbml0KEhNQUNfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmtleSwgaW50IGxlbiwKIAkgICAgICAgY29uc3QgRVZQX01EICptZCk7IC8qIGRlcHJlY2F0ZWQgKi8KLXZvaWQgSE1BQ19Jbml0X2V4KEhNQUNfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmtleSwgaW50IGxlbiwKK2ludCBITUFDX0luaXRfZXgoSE1BQ19DVFggKmN0eCwgY29uc3Qgdm9pZCAqa2V5LCBpbnQgbGVuLAogCQkgIGNvbnN0IEVWUF9NRCAqbWQsIEVOR0lORSAqaW1wbCk7Ci12b2lkIEhNQUNfVXBkYXRlKEhNQUNfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHNpemVfdCBsZW4pOwotdm9pZCBITUFDX0ZpbmFsKEhNQUNfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm1kLCB1bnNpZ25lZCBpbnQgKmxlbik7CitpbnQgSE1BQ19VcGRhdGUoSE1BQ19DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgc2l6ZV90IGxlbik7CitpbnQgSE1BQ19GaW5hbChITUFDX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICptZCwgdW5zaWduZWQgaW50ICpsZW4pOwogdW5zaWduZWQgY2hhciAqSE1BQyhjb25zdCBFVlBfTUQgKmV2cF9tZCwgY29uc3Qgdm9pZCAqa2V5LCBpbnQga2V5X2xlbiwKIAkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmQsIHNpemVfdCBuLCB1bnNpZ25lZCBjaGFyICptZCwKIAkJICAgIHVuc2lnbmVkIGludCAqbWRfbGVuKTsKK2ludCBITUFDX0NUWF9jb3B5KEhNQUNfQ1RYICpkY3R4LCBITUFDX0NUWCAqc2N0eCk7CiAKIHZvaWQgSE1BQ19DVFhfc2V0X2ZsYWdzKEhNQUNfQ1RYICpjdHgsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9jcnlwdG8vaWE2NGNwdWlkLlMgYi9jcnlwdG8vaWE2NGNwdWlkLlMKaW5kZXggMDRmYmIzNC4uZDcwNWZmZiAxMDA2NDQKLS0tIGEvY3J5cHRvL2lhNjRjcHVpZC5TCisrKyBiL2NyeXB0by9pYTY0Y3B1aWQuUwpAQCAtMSw2ICsxLDEzIEBACiAvLyBXb3JrcyBvbiBhbGwgSUEtNjQgcGxhdGZvcm1zOiBMaW51eCwgSFAtVVgsIFdpbjY0aS4uLgogLy8gT24gV2luNjRpIGNvbXBpbGUgd2l0aCBpYXMuZXhlLgogLnRleHQKKworLmdsb2JhbAlPUEVOU1NMX2NwdWlkX3NldHVwIworLnByb2MJT1BFTlNTTF9jcHVpZF9zZXR1cCMKK09QRU5TU0xfY3B1aWRfc2V0dXA6Cit7IC5taWI7CWJyLnJldC5zcHRrLm1hbnkJYjAJCX07OworLmVuZHAJT1BFTlNTTF9jcHVpZF9zZXR1cCMKKwogLmdsb2JhbAlPUEVOU1NMX3JkdHNjIwogLnByb2MJT1BFTlNTTF9yZHRzYyMKIE9QRU5TU0xfcmR0c2M6CkBAIC0xMTksMyArMTI2LDQyIEBACiAJbW92CQlhci5sYz1yMwogCWJyLnJldC5zcHRrCWIwCQl9OzsKIC5lbmRwCU9QRU5TU0xfd2lwZV9jcHUjCisKKy5nbG9iYWwJT1BFTlNTTF9jbGVhbnNlIworLnByb2MJT1BFTlNTTF9jbGVhbnNlIworT1BFTlNTTF9jbGVhbnNlOgoreyAubWliOwljbXAuZXEJCXA2LHAwPTAscjMzCSAgICAvLyBsZW49PTAKKyNpZiBkZWZpbmVkKF9IUFVYX1NPVVJDRSkgJiYgIWRlZmluZWQoX0xQNjQpCisJYWRkcDQJCXIzMj0wLHIzMgorI2VuZGlmCisocDYpCWJyLnJldC5zcG50CWIwCQl9OzsKK3sgLm1pYjsJYW5kCQlyMj03LHIzMgorCWNtcC5sZXUJCXA2LHAwPTE1LHIzMwkgICAgLy8gbGVuPj0xNQorKHA2KQlici5jb25kLmRwdGsJLkxvdAkJfTs7CisKKy5MaXR0bGU6Cit7IC5taWI7CXN0MQkJW3IzMl09cjAsMQorCWNtcC5sdHUJCXA2LHA3PTEscjMzCX0gIC8vIGxlbj4xCit7IC5tYmI7CWFkZAkJcjMzPS0xLHIzMwkgICAvLyBsZW4tLQorKHA2KQlici5jb25kLmRwdGsJLkxpdHRsZQorKHA3KQlici5yZXQuc3B0ay5tYW55CWIwCX07OworCisuTG90OgoreyAubWliOwljbXAuZXEJCXA2LHAwPTAscjIKKyhwNikJYnIuY29uZC5kcHRrCS5MYWxpZ25lZAl9OzsKK3sgLm1taTsJc3QxCQlbcjMyXT1yMCwxOzsKKwlhbmQJCXIyPTcscjMyCX0KK3sgLm1pYjsJYWRkCQlyMzM9LTEscjMzCisJYnIJCS5Mb3QJCX07OworCisuTGFsaWduZWQ6Cit7IC5tbWk7CXN0OAkJW3IzMl09cjAsOAorCWFuZAkJcjI9LTgscjMzCSAgICAvLyBsZW4mfjcKKwlhZGQJCXIzMz0tOCxyMzMJfTs7IC8vIGxlbi09OAoreyAubWliOwljbXAubHR1CQlwNixwMD04LHIyCSAgICAvLyAoKGxlbis4KSZ+Nyk+OAorKHA2KQlici5jb25kLmRwdGsJLkxhbGlnbmVkCX07OworCit7IC5tYmI7CWNtcC5lcQkJcDYscDc9cjAscjMzCisocDcpCWJyLmNvbmQuZHBudAkuTGl0dGxlCisocDYpCWJyLnJldC5zcHRrLm1hbnkJYjAJfTs7CisuZW5kcAlPUEVOU1NMX2NsZWFuc2UjCmRpZmYgLS1naXQgYS9jcnlwdG8vaW5zdGFsbC5jb20gYi9jcnlwdG8vaW5zdGFsbC5jb20KaW5kZXggNWU2ZDk3ZS4uYWQzZTRkNCAxMDA2NDQKLS0tIGEvY3J5cHRvL2luc3RhbGwuY29tCisrKyBiL2NyeXB0by9pbnN0YWxsLmNvbQpAQCAtNDEsMTYgKzQxLDE3IEBACiAJICAgQ1JFQVRFL0RJUi9MT0cgV1JLX1NTTElOQ0xVREU6CiAkCiAkCVNESVJTIDo9ICwtCisJCSBfJ0FSQ0gnLC0KIAkJIE9CSkVDVFMsLQotCQkgTUQyLE1ENCxNRDUsU0hBLE1EQzIsSE1BQyxSSVBFTUQsLQorCQkgTUQyLE1ENCxNRDUsU0hBLE1EQzIsSE1BQyxSSVBFTUQsV0hSTFBPT0wsLQogCQkgREVTLEFFUyxSQzIsUkM0LFJDNSxJREVBLEJGLENBU1QsQ0FNRUxMSUEsU0VFRCwtCiAJCSBCTixFQyxSU0EsRFNBLEVDRFNBLERILEVDREgsRFNPLEVOR0lORSwtCiAJCSBCVUZGRVIsQklPLFNUQUNLLExIQVNILFJBTkQsRVJSLC0KIAkJIEVWUCxBU04xLFBFTSxYNTA5LFg1MDlWMyxDT05GLFRYVF9EQixQS0NTNyxQS0NTMTIsQ09NUCxPQ1NQLC0KIAkJIFVJLEtSQjUsLQotCQkgU1RPUkUsUFFVRVVFLEpQQUtFCi0kCUVYSEVBREVSXyA6PSBjcnlwdG8uaCx0bWRpZmYuaCxvcGVuc3Nsdi5oLG9wZW5zc2xjb25mLmgsZWJjZGljLmgsLQotCQlzeW1oYWNrcy5oLG9zc2xfdHlwLmgKKwkJIFNUT1JFLENNUyxQUVVFVUUsVFMsSlBBS0UKKyQJRVhIRUFERVJfIDo9IGNyeXB0by5oLG9wZW5zc2x2LmgsZWJjZGljLmgsc3ltaGFja3MuaCxvc3NsX3R5cC5oCiskCUVYSEVBREVSX18nQVJDSCcgOj0gb3BlbnNzbGNvbmYuaAogJAlFWEhFQURFUl9PQkpFQ1RTIDo9IG9iamVjdHMuaCxvYmpfbWFjLmgKICQJRVhIRUFERVJfTUQyIDo9IG1kMi5oCiAkCUVYSEVBREVSX01ENCA6PSBtZDQuaApAQCAtNTksNiArNjAsNyBAQAogJAlFWEhFQURFUl9NREMyIDo9IG1kYzIuaAogJAlFWEhFQURFUl9ITUFDIDo9IGhtYWMuaAogJAlFWEhFQURFUl9SSVBFTUQgOj0gcmlwZW1kLmgKKyQJRVhIRUFERVJfV0hSTFBPT0wgOj0gd2hybHBvb2wuaAogJAlFWEhFQURFUl9ERVMgOj0gZGVzLmgsZGVzX29sZC5oCiAkCUVYSEVBREVSX0FFUyA6PSBhZXMuaAogJAlFWEhFQURFUl9SQzIgOj0gcmMyLmgKQEAgLTY5LDYgKzcxLDcgQEAKICQJRVhIRUFERVJfQ0FTVCA6PSBjYXN0LmgKICQJRVhIRUFERVJfQ0FNRUxMSUEgOj0gY2FtZWxsaWEuaAogJAlFWEhFQURFUl9TRUVEIDo9IHNlZWQuaAorJAlFWEhFQURFUl9NT0RFUyA6PSBtb2Rlcy5oCiAkCUVYSEVBREVSX0JOIDo9IGJuLmgKICQJRVhIRUFERVJfRUMgOj0gZWMuaAogJAlFWEhFQURFUl9SU0EgOj0gcnNhLmgKQEAgLTk5LDcgKzEwMiw5IEBACiAkCUVYSEVBREVSX0tSQjUgOj0ga3JiNV9hc24uaAogJCEJRVhIRUFERVJfU1RPUkUgOj0gc3RvcmUuaCxzdHJfY29tcGF0LmgKICQJRVhIRUFERVJfU1RPUkUgOj0gc3RvcmUuaAotJAlFWEhFQURFUl9QUVVFVUUgOj0gcHF1ZXVlLmgscHFfY29tcGF0LmgKKyQJRVhIRUFERVJfQ01TIDo9IGNtcy5oCiskCUVYSEVBREVSX1BRVUVVRSA6PSBwcXVldWUuaAorJAlFWEhFQURFUl9UUyA6PSB0cy5oCiAkCUVYSEVBREVSX0pQQUtFIDo9IGpwYWtlLmgKICQJTElCUyA6PSBMSUJDUllQVE8KICQKQEAgLTExNSw3ICsxMjAsMTIgQEAKICQJVEhFTgogJAkgIENPUFkgJ3RtcCcgV1JLX1NTTElOQ0xVREU6IC9MT0cKICQJRUxTRQotJAkgIENPUFkgWy4nRCddJ3RtcCcgV1JLX1NTTElOQ0xVREU6IC9MT0cKKyQJICBJRiBEIC5FUVMuICJfJydBUkNIJyIKKyQJICBUSEVOCiskCSAgICBDT1BZIFstLidBUkNIJy5DUllQVE9dJ3RtcCcgV1JLX1NTTElOQ0xVREU6IC9MT0cKKyQJICBFTFNFCiskCSAgICBDT1BZIFsuJ0QnXSd0bXAnIFdSS19TU0xJTkNMVURFOiAvTE9HCiskCSAgRU5ESUYKICQJRU5ESUYKICQJU0VUIEZJTEUvUFJPVD1XT1JMRDpSRSBXUktfU1NMSU5DTFVERTondG1wJwogJAlHT1RPIExPT1BfU0RJUlMKZGlmZiAtLWdpdCBhL2NyeXB0by9qcGFrZS9NYWtlZmlsZSBiL2NyeXB0by9qcGFrZS9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTRhMTQwMi4uMDAwMDAwMAotLS0gYS9jcnlwdG8vanBha2UvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi1ESVI9anBha2UKLVRPUD0uLi8uLgotCi1DRkxBR1M9ICQoSU5DTFVERVMpICQoQ0ZMQUcpCi0KLUxJQj0kKFRPUCkvbGliY3J5cHRvLmEKLUxJQk9CSj1qcGFrZS5vIGpwYWtlX2Vyci5vCi1MSUJTUkM9anBha2UuYyBqcGFrZV9lcnIuYwotCi1FWEhFQURFUj1qcGFrZS5oCi1URVNUPWpwYWtldGVzdC5jCi0KLXRvcDoKLQkoY2QgLi4vLi47ICQoTUFLRSkgRElSUz1jcnlwdG8gU0RJUlM9JChESVIpIHN1Yl9hbGwpCi0KLWFsbDoJbGliCi0KLWxpYjoJJChMSUJPQkopCi0JJChBUlgpICQoTElCKSAkKExJQk9CSikKLQkkKFJBTkxJQikgJChMSUIpIHx8IGVjaG8gTmV2ZXIgbWluZC4KLQlAdG91Y2ggbGliCi0KLWxpbmtzOgotCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9pbmNsdWRlL29wZW5zc2wgJChFWEhFQURFUikKLQlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vdGVzdCAkKFRFU1QpCi0KLWluc3RhbGw6Ci0JQFsgLW4gIiQoSU5TVEFMTFRPUCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHRvcCBNYWtlZmlsZS4uLgotCUBoZWFkZXJsaXN0PSIkKEVYSEVBREVSKSI7IGZvciBpIGluICQkaGVhZGVybGlzdCA7IFwKLQlkbyAgXAotCShjcCAkJGkgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGk7IFwKLQljaG1vZCA2NDQgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGkgKTsgXAotCWRvbmU7Ci0KLWRlcGVuZDoKLQlAWyAtbiAiJChNQUtFREVQRU5EKSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdXBwZXIgTWFrZWZpbGUuLi4KLQkkKE1BS0VERVBFTkQpIC0tICQoQ0ZMQUcpICQoSU5DTFVERVMpICQoREVQRkxBRykgLS0gJChQUk9HUykgJChMSUJTUkMpCi0KLWRjbGVhbjoKLQkkKFBFUkwpIC1wZSAnaWYgKC9eIyBETyBOT1QgREVMRVRFIFRISVMgTElORS8pIHtwcmludDsgZXhpdCgwKTt9JyAkKE1BS0VGSUxFKSA+TWFrZWZpbGUubmV3Ci0JbXYgLWYgTWFrZWZpbGUubmV3ICQoTUFLRUZJTEUpCi0KLWNsZWFuOgotCXJtIC1mICoucyAqLm8gKi5vYmogZGVzIGxpYiB0YWdzIGNvcmUgLnB1cmUgLm5mcyogKi5vbGQgKi5iYWsgZmx1ZmYKLQotanBha2V0ZXN0OiB0b3AganBha2V0ZXN0LmMgJChMSUIpCi0JJChDQykgJChDRkxBR1MpIC1XYWxsIC1XZXJyb3IgLWcgLW8ganBha2V0ZXN0IGpwYWtldGVzdC5jICQoTElCKQotIyBETyBOT1QgREVMRVRFIFRISVMgTElORSAtLSBtYWtlIGRlcGVuZCBkZXBlbmRzIG9uIGl0LgotCi1qcGFrZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmgKLWpwYWtlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotanBha2UubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1qcGFrZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotanBha2UubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1qcGFrZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWpwYWtlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGpwYWtlLmMganBha2UuaAotanBha2VfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaAotanBha2VfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotanBha2VfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvanBha2UuaAotanBha2VfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1qcGFrZV9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWpwYWtlX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCi1qcGFrZV9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLWpwYWtlX2Vyci5vOiBqcGFrZV9lcnIuYwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2pwYWtlL2pwYWtlLmMgYi9jcnlwdG8vanBha2UvanBha2UuYwppbmRleCA1NzdiN2VmLi4wODZkOWY0IDEwMDY0NAotLS0gYS9jcnlwdG8vanBha2UvanBha2UuYworKysgYi9jcnlwdG8vanBha2UvanBha2UuYwpAQCAtNCw3ICs0LDYgQEAKICNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgogI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CiAjaW5jbHVkZSA8bWVtb3J5Lmg+Ci0jaW5jbHVkZSA8YXNzZXJ0Lmg+CiAKIC8qCiAgKiBJbiB0aGUgZGVmaW5pdGlvbiwgKHhhLCB4YiwgeGMsIHhkKSBhcmUgQWxpY2UncyAoeDEsIHgyLCB4MywgeDQpIG9yCkBAIC0xMzQsNyArMTMzLDcgQEAKICAgICB7CiAgICAgdW5zaWduZWQgY2hhciBiWzJdOwogCi0gICAgYXNzZXJ0KGwgPD0gMHhmZmZmKTsKKyAgICBPUEVOU1NMX2Fzc2VydChsIDw9IDB4ZmZmZik7CiAgICAgYlswXSA9IGwgPj4gODsKICAgICBiWzFdID0gbCYweGZmOwogICAgIFNIQTFfVXBkYXRlKHNoYSwgYiwgMik7CkBAIC0xNzIsNyArMTcxLDcgQEAKICAgICAqLwogICAgIFNIQTFfSW5pdCgmc2hhKTsKICAgICBoYXNoYm4oJnNoYSwgemtwZyk7Ci0gICAgYXNzZXJ0KCFCTl9pc196ZXJvKHAtPnprcHguZ3IpKTsKKyAgICBPUEVOU1NMX2Fzc2VydCghQk5faXNfemVybyhwLT56a3B4LmdyKSk7CiAgICAgaGFzaGJuKCZzaGEsIHAtPnprcHguZ3IpOwogICAgIGhhc2hibigmc2hhLCBwLT5neCk7CiAgICAgaGFzaHN0cmluZygmc2hhLCBwcm9vZl9uYW1lKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9qcGFrZS9qcGFrZXRlc3QuYyBiL2NyeXB0by9qcGFrZS9qcGFrZXRlc3QuYwppbmRleCA3OTJmYzQ5Li5lYWJhNzVlIDEwMDY0NAotLS0gYS9jcnlwdG8vanBha2UvanBha2V0ZXN0LmMKKysrIGIvY3J5cHRvL2pwYWtlL2pwYWtldGVzdC5jCkBAIC0xODIsNyArMTgyLDcgQEAKICAgICBCTl9mcmVlKHApOwogCiAgICAgQ1JZUFRPX2NsZWFudXBfYWxsX2V4X2RhdGEoKTsKLSAgICBFUlJfcmVtb3ZlX3N0YXRlKDApOworICAgIEVSUl9yZW1vdmVfdGhyZWFkX3N0YXRlKE5VTEwpOwogICAgIEVSUl9mcmVlX3N0cmluZ3MoKTsKICAgICBDUllQVE9fbWVtX2xlYWtzKGJpb19lcnIpOwogCmRpZmYgLS1naXQgYS9jcnlwdG8va3JiNS9NYWtlZmlsZSBiL2NyeXB0by9rcmI1L01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZWZiOWU4Li4wMDAwMDAwCi0tLSBhL2NyeXB0by9rcmI1L01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotIwotIyBPcGVuU1NML2tyYjUvTWFrZWZpbGUKLSMKLQotRElSPQlrcmI1Ci1UT1A9CS4uLy4uCi1DQz0JY2MKLUlOQ0xVREVTPSAtSS4uIC1JJChUT1ApIC1JLi4vLi4vaW5jbHVkZQotQ0ZMQUc9LWcKLU1BS0VGSUxFPQlNYWtlZmlsZQotQVI9CQlhciByCi0KLUNGTEFHUz0gJChJTkNMVURFUykgJChDRkxBRykKLQotR0VORVJBTD1NYWtlZmlsZSBSRUFETUUKLVRFU1Q9Ci1BUFBTPQotCi1MSUI9JChUT1ApL2xpYmNyeXB0by5hCi1MSUJTUkM9IGtyYjVfYXNuLmMKLQotTElCT0JKPSBrcmI1X2Fzbi5vCi0KLVNSQz0gJChMSUJTUkMpCi0KLUVYSEVBREVSPSBrcmI1X2Fzbi5oCi1IRUFERVI9CSQoRVhIRUFERVIpCi0KLUFMTD0gICAgJChHRU5FUkFMKSAkKFNSQykgJChIRUFERVIpCi0KLXRvcDoKLQkoY2QgLi4vLi47ICQoTUFLRSkgRElSUz1jcnlwdG8gU0RJUlM9JChESVIpIHN1Yl9hbGwpCi0KLWFsbDoJbGliCi0KLWxpYjoJJChMSUJPQkopCi0JJChBUlgpICQoTElCKSAkKExJQk9CSikKLQkkKFJBTkxJQikgJChMSUIpIHx8IGVjaG8gTmV2ZXIgbWluZC4KLQlAdG91Y2ggbGliCi0KLWZpbGVzOgotCSQoUEVSTCkgJChUT1ApL3V0aWwvZmlsZXMucGwgTWFrZWZpbGUgPj4gJChUT1ApL01JTkZPCi0KLWxpbmtzOgotCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9pbmNsdWRlL29wZW5zc2wgJChFWEhFQURFUikKLQlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vdGVzdCAkKFRFU1QpCi0JQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL2FwcHMgJChBUFBTKQotCi1pbnN0YWxsOgotCUBbIC1uICIkKElOU1RBTExUT1ApIiBdICMgc2hvdWxkIGJlIHNldCBieSB0b3AgTWFrZWZpbGUuLi4KLQlAaGVhZGVybGlzdD0iJChFWEhFQURFUikiOyBmb3IgaSBpbiAkJGhlYWRlcmxpc3QgOyBcCi0JZG8gIFwKLQkoY3AgJCRpICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpOyBcCi0JY2htb2QgNjQ0ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpICk7IFwKLQlkb25lOwotCi10YWdzOgotCWN0YWdzICQoU1JDKQotCi10ZXN0czoKLQotbGludDoKLQlsaW50IC1ETElOVCAkKElOQ0xVREVTKSAkKFNSQyk+Zmx1ZmYKLQotZGVwZW5kOgotCUBbIC1uICIkKE1BS0VERVBFTkQpIiBdICMgc2hvdWxkIGJlIHNldCBieSB1cHBlciBNYWtlZmlsZS4uLgotCSQoTUFLRURFUEVORCkgLS0gJChDRkxBRykgJChJTkNMVURFUykgJChERVBGTEFHKSAtLSAkKExJQlNSQykKLQotZGNsZWFuOgotCSQoUEVSTCkgLXBlICdpZiAoL14jIERPIE5PVCBERUxFVEUgVEhJUyBMSU5FLykge3ByaW50OyBleGl0KDApO30nICQoTUFLRUZJTEUpID5NYWtlZmlsZS5uZXcKLQltdiAtZiBNYWtlZmlsZS5uZXcgJChNQUtFRklMRSkKLQotY2xlYW46Ci0Jcm0gLWYgKi5vICoub2JqIGxpYiB0YWdzIGNvcmUgLnB1cmUgLm5mcyogKi5vbGQgKi5iYWsgZmx1ZmYKLQotIyBETyBOT1QgREVMRVRFIFRISVMgTElORSAtLSBtYWtlIGRlcGVuZCBkZXBlbmRzIG9uIGl0LgotCi1rcmI1X2Fzbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xdC5oCi1rcmI1X2Fzbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1rcmI1X2Fzbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wva3JiNV9hc24uaAota3JiNV9hc24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWtyYjVfYXNuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1rcmI1X2Fzbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWtyYjVfYXNuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGtyYjVfYXNuLmMKZGlmZiAtLWdpdCBhL2NyeXB0by9saGFzaC9NYWtlZmlsZSBiL2NyeXB0by9saGFzaC9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzVmMDkzMi4uMDAwMDAwMAotLS0gYS9jcnlwdG8vbGhhc2gvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0jCi0jIE9wZW5TU0wvY3J5cHRvL2xoYXNoL01ha2VmaWxlCi0jCi0KLURJUj0JbGhhc2gKLVRPUD0JLi4vLi4KLUNDPQljYwotSU5DTFVERVM9Ci1DRkxBRz0tZwotTUFLRUZJTEU9CU1ha2VmaWxlCi1BUj0JCWFyIHIKLQotQ0ZMQUdTPSAkKElOQ0xVREVTKSAkKENGTEFHKQotCi1HRU5FUkFMPU1ha2VmaWxlCi1URVNUPQotQVBQUz0KLQotTElCPSQoVE9QKS9saWJjcnlwdG8uYQotTElCU1JDPWxoYXNoLmMgbGhfc3RhdHMuYwotTElCT0JKPWxoYXNoLm8gbGhfc3RhdHMubwotCi1TUkM9ICQoTElCU1JDKQotCi1FWEhFQURFUj0gbGhhc2guaAotSEVBREVSPQkkKEVYSEVBREVSKQotCi1BTEw9ICAgICQoR0VORVJBTCkgJChTUkMpICQoSEVBREVSKQotCi10b3A6Ci0JKGNkIC4uLy4uOyAkKE1BS0UpIERJUlM9Y3J5cHRvIFNESVJTPSQoRElSKSBzdWJfYWxsKQotCi1hbGw6CWxpYgotCi1saWI6CSQoTElCT0JKKQotCSQoQVJYKSAkKExJQikgJChMSUJPQkopCi0JJChSQU5MSUIpICQoTElCKSB8fCBlY2hvIE5ldmVyIG1pbmQuCi0JQHRvdWNoIGxpYgotCi1maWxlczoKLQkkKFBFUkwpICQoVE9QKS91dGlsL2ZpbGVzLnBsIE1ha2VmaWxlID4+ICQoVE9QKS9NSU5GTwotCi1saW5rczoKLQlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vaW5jbHVkZS9vcGVuc3NsICQoRVhIRUFERVIpCi0JQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL3Rlc3QgJChURVNUKQotCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9hcHBzICQoQVBQUykKLQotaW5zdGFsbDoKLQlAWyAtbiAiJChJTlNUQUxMVE9QKSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdG9wIE1ha2VmaWxlLi4uCi0JQGhlYWRlcmxpc3Q9IiQoRVhIRUFERVIpIjsgZm9yIGkgaW4gJCRoZWFkZXJsaXN0IDsgXAotCWRvICBcCi0JKGNwICQkaSAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaTsgXAotCWNobW9kIDY0NCAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaSApOyBcCi0JZG9uZTsKLQotdGFnczoKLQljdGFncyAkKFNSQykKLQotdGVzdHM6Ci0KLWxpbnQ6Ci0JbGludCAtRExJTlQgJChJTkNMVURFUykgJChTUkMpPmZsdWZmCi0KLWRlcGVuZDoKLQlAWyAtbiAiJChNQUtFREVQRU5EKSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdXBwZXIgTWFrZWZpbGUuLi4KLQkkKE1BS0VERVBFTkQpIC0tICQoQ0ZMQUcpICQoSU5DTFVERVMpICQoREVQRkxBRykgLS0gJChQUk9HUykgJChMSUJTUkMpCi0KLWRjbGVhbjoKLQkkKFBFUkwpIC1wZSAnaWYgKC9eIyBETyBOT1QgREVMRVRFIFRISVMgTElORS8pIHtwcmludDsgZXhpdCgwKTt9JyAkKE1BS0VGSUxFKSA+TWFrZWZpbGUubmV3Ci0JbXYgLWYgTWFrZWZpbGUubmV3ICQoTUFLRUZJTEUpCi0KLWNsZWFuOgotCXJtIC1mICoubyAqLm9iaiBsaWIgdGFncyBjb3JlIC5wdXJlIC5uZnMqICoub2xkICouYmFrIGZsdWZmCi0KLSMgRE8gTk9UIERFTEVURSBUSElTIExJTkUgLS0gbWFrZSBkZXBlbmQgZGVwZW5kcyBvbiBpdC4KLQotbGhfc3RhdHMubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotbGhfc3RhdHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotbGhfc3RhdHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1saF9zdGF0cy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotbGhfc3RhdHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLWxoX3N0YXRzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotbGhfc3RhdHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBsaF9zdGF0cy5jCi1saGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1saGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotbGhhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLWxoYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotbGhhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggbGhhc2guYwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2xoYXNoL2xoX3N0YXRzLmMgYi9jcnlwdG8vbGhhc2gvbGhfc3RhdHMuYwppbmRleCA1YWE3NzY2Li44MTU2MTVlIDEwMDY0NAotLS0gYS9jcnlwdG8vbGhhc2gvbGhfc3RhdHMuYworKysgYi9jcnlwdG8vbGhhc2gvbGhfc3RhdHMuYwpAQCAtMTM5LDcgKzEzOSw3IEBACiAjZWxzZQogCiAjaWZuZGVmIE9QRU5TU0xfTk9fRlBfQVBJCi12b2lkIGxoX3N0YXRzKGNvbnN0IExIQVNIICpsaCwgRklMRSAqZnApCit2b2lkIGxoX3N0YXRzKGNvbnN0IF9MSEFTSCAqbGgsIEZJTEUgKmZwKQogCXsKIAlCSU8gKmJwOwogCkBAIC0xNTEsNyArMTUxLDcgQEAKIGVuZDo7CiAJfQogCi12b2lkIGxoX25vZGVfc3RhdHMoY29uc3QgTEhBU0ggKmxoLCBGSUxFICpmcCkKK3ZvaWQgbGhfbm9kZV9zdGF0cyhjb25zdCBfTEhBU0ggKmxoLCBGSUxFICpmcCkKIAl7CiAJQklPICpicDsKIApAQCAtMTYzLDcgKzE2Myw3IEBACiBlbmQ6OwogCX0KIAotdm9pZCBsaF9ub2RlX3VzYWdlX3N0YXRzKGNvbnN0IExIQVNIICpsaCwgRklMRSAqZnApCit2b2lkIGxoX25vZGVfdXNhZ2Vfc3RhdHMoY29uc3QgX0xIQVNIICpsaCwgRklMRSAqZnApCiAJewogCUJJTyAqYnA7CiAKQEAgLTE3Nyw3ICsxNzcsNyBAQAogCiAjZW5kaWYKIAotdm9pZCBsaF9zdGF0c19iaW8oY29uc3QgTEhBU0ggKmxoLCBCSU8gKm91dCkKK3ZvaWQgbGhfc3RhdHNfYmlvKGNvbnN0IF9MSEFTSCAqbGgsIEJJTyAqb3V0KQogCXsKIAlCSU9fcHJpbnRmKG91dCwibnVtX2l0ZW1zICAgICAgICAgICAgID0gJWx1XG4iLGxoLT5udW1faXRlbXMpOwogCUJJT19wcmludGYob3V0LCJudW1fbm9kZXMgICAgICAgICAgICAgPSAldVxuIixsaC0+bnVtX25vZGVzKTsKQEAgLTIwNSw3ICsyMDUsNyBAQAogI2VuZGlmCiAJfQogCi12b2lkIGxoX25vZGVfc3RhdHNfYmlvKGNvbnN0IExIQVNIICpsaCwgQklPICpvdXQpCit2b2lkIGxoX25vZGVfc3RhdHNfYmlvKGNvbnN0IF9MSEFTSCAqbGgsIEJJTyAqb3V0KQogCXsKIAlMSEFTSF9OT0RFICpuOwogCXVuc2lnbmVkIGludCBpLG51bTsKQEAgLTIxOCw3ICsyMTgsNyBAQAogCQl9CiAJfQogCi12b2lkIGxoX25vZGVfdXNhZ2Vfc3RhdHNfYmlvKGNvbnN0IExIQVNIICpsaCwgQklPICpvdXQpCit2b2lkIGxoX25vZGVfdXNhZ2Vfc3RhdHNfYmlvKGNvbnN0IF9MSEFTSCAqbGgsIEJJTyAqb3V0KQogCXsKIAlMSEFTSF9OT0RFICpuOwogCXVuc2lnbmVkIGxvbmcgbnVtOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2xoYXNoL2xoYXNoLmMgYi9jcnlwdG8vbGhhc2gvbGhhc2guYwppbmRleCAwYjQxZjg3Li40N2Y3NDgwIDEwMDY0NAotLS0gYS9jcnlwdG8vbGhhc2gvbGhhc2guYworKysgYi9jcnlwdG8vbGhhc2gvbGhhc2guYwpAQCAtMTA3LDE4ICsxMDcsMTggQEAKICNkZWZpbmUgVVBfTE9BRAkJKDIqTEhfTE9BRF9NVUxUKSAvKiBsb2FkIHRpbWVzIDI1NiAgKGRlZmF1bHQgMikgKi8KICNkZWZpbmUgRE9XTl9MT0FECShMSF9MT0FEX01VTFQpICAgLyogbG9hZCB0aW1lcyAyNTYgIChkZWZhdWx0IDEpICovCiAKLXN0YXRpYyB2b2lkIGV4cGFuZChMSEFTSCAqbGgpOwotc3RhdGljIHZvaWQgY29udHJhY3QoTEhBU0ggKmxoKTsKLXN0YXRpYyBMSEFTSF9OT0RFICoqZ2V0cm4oTEhBU0ggKmxoLCBjb25zdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nICpyaGFzaCk7CitzdGF0aWMgdm9pZCBleHBhbmQoX0xIQVNIICpsaCk7CitzdGF0aWMgdm9pZCBjb250cmFjdChfTEhBU0ggKmxoKTsKK3N0YXRpYyBMSEFTSF9OT0RFICoqZ2V0cm4oX0xIQVNIICpsaCwgY29uc3Qgdm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyAqcmhhc2gpOwogCi1MSEFTSCAqbGhfbmV3KExIQVNIX0hBU0hfRk5fVFlQRSBoLCBMSEFTSF9DT01QX0ZOX1RZUEUgYykKK19MSEFTSCAqbGhfbmV3KExIQVNIX0hBU0hfRk5fVFlQRSBoLCBMSEFTSF9DT01QX0ZOX1RZUEUgYykKIAl7Ci0JTEhBU0ggKnJldDsKKwlfTEhBU0ggKnJldDsKIAlpbnQgaTsKIAotCWlmICgocmV0PShMSEFTSCAqKU9QRU5TU0xfbWFsbG9jKHNpemVvZihMSEFTSCkpKSA9PSBOVUxMKQorCWlmICgocmV0PU9QRU5TU0xfbWFsbG9jKHNpemVvZihfTEhBU0gpKSkgPT0gTlVMTCkKIAkJZ290byBlcnIwOwotCWlmICgocmV0LT5iPShMSEFTSF9OT0RFICoqKU9QRU5TU0xfbWFsbG9jKHNpemVvZihMSEFTSF9OT0RFICopKk1JTl9OT0RFUykpID09IE5VTEwpCisJaWYgKChyZXQtPmI9T1BFTlNTTF9tYWxsb2Moc2l6ZW9mKExIQVNIX05PREUgKikqTUlOX05PREVTKSkgPT0gTlVMTCkKIAkJZ290byBlcnIxOwogCWZvciAoaT0wOyBpPE1JTl9OT0RFUzsgaSsrKQogCQlyZXQtPmJbaV09TlVMTDsKQEAgLTE1NCw3ICsxNTQsNyBAQAogCXJldHVybihOVUxMKTsKIAl9CiAKLXZvaWQgbGhfZnJlZShMSEFTSCAqbGgpCit2b2lkIGxoX2ZyZWUoX0xIQVNIICpsaCkKIAl7CiAJdW5zaWduZWQgaW50IGk7CiAJTEhBU0hfTk9ERSAqbiwqbm47CkBAIC0xNzYsNyArMTc2LDcgQEAKIAlPUEVOU1NMX2ZyZWUobGgpOwogCX0KIAotdm9pZCAqbGhfaW5zZXJ0KExIQVNIICpsaCwgdm9pZCAqZGF0YSkKK3ZvaWQgKmxoX2luc2VydChfTEhBU0ggKmxoLCB2b2lkICpkYXRhKQogCXsKIAl1bnNpZ25lZCBsb25nIGhhc2g7CiAJTEhBU0hfTk9ERSAqbm4sKipybjsKQEAgLTIxNCw3ICsyMTQsNyBAQAogCXJldHVybihyZXQpOwogCX0KIAotdm9pZCAqbGhfZGVsZXRlKExIQVNIICpsaCwgY29uc3Qgdm9pZCAqZGF0YSkKK3ZvaWQgKmxoX2RlbGV0ZShfTEhBU0ggKmxoLCBjb25zdCB2b2lkICpkYXRhKQogCXsKIAl1bnNpZ25lZCBsb25nIGhhc2g7CiAJTEhBU0hfTk9ERSAqbm4sKipybjsKQEAgLTI0NSw3ICsyNDUsNyBAQAogCXJldHVybihyZXQpOwogCX0KIAotdm9pZCAqbGhfcmV0cmlldmUoTEhBU0ggKmxoLCBjb25zdCB2b2lkICpkYXRhKQordm9pZCAqbGhfcmV0cmlldmUoX0xIQVNIICpsaCwgY29uc3Qgdm9pZCAqZGF0YSkKIAl7CiAJdW5zaWduZWQgbG9uZyBoYXNoOwogCUxIQVNIX05PREUgKipybjsKQEAgLTI2NywxMiArMjY3LDE1IEBACiAJcmV0dXJuKHJldCk7CiAJfQogCi1zdGF0aWMgdm9pZCBkb2FsbF91dGlsX2ZuKExIQVNIICpsaCwgaW50IHVzZV9hcmcsIExIQVNIX0RPQUxMX0ZOX1RZUEUgZnVuYywKK3N0YXRpYyB2b2lkIGRvYWxsX3V0aWxfZm4oX0xIQVNIICpsaCwgaW50IHVzZV9hcmcsIExIQVNIX0RPQUxMX0ZOX1RZUEUgZnVuYywKIAkJCSAgTEhBU0hfRE9BTExfQVJHX0ZOX1RZUEUgZnVuY19hcmcsIHZvaWQgKmFyZykKIAl7CiAJaW50IGk7CiAJTEhBU0hfTk9ERSAqYSwqbjsKIAorCWlmIChsaCA9PSBOVUxMKQorCQlyZXR1cm47CisKIAkvKiByZXZlcnNlIHRoZSBvcmRlciBzbyB3ZSBzZWFyY2ggZnJvbSAndG9wIHRvIGJvdHRvbScKIAkgKiBXZSB3ZXJlIGhhdmluZyBtZW1vcnkgbGVha3Mgb3RoZXJ3aXNlICovCiAJZm9yIChpPWxoLT5udW1fbm9kZXMtMTsgaT49MDsgaS0tKQpAQCAtMjgyLDYgKzI4NSw4IEBACiAJCQl7CiAJCQkvKiAyOC8wNS85MSAtIGVheSAtIG4gYWRkZWQgc28gaXRlbXMgY2FuIGJlIGRlbGV0ZWQKIAkJCSAqIHZpYSBsaF9kb2FsbCAqLworCQkJLyogMjIvMDUvMDggLSBiZW4gLSBlaD8gc2luY2UgYSBpcyBub3QgcGFzc2VkLAorCQkJICogdGhpcyBzaG91bGQgbm90IGJlIG5lZWRlZCAqLwogCQkJbj1hLT5uZXh0OwogCQkJaWYodXNlX2FyZykKIAkJCQlmdW5jX2FyZyhhLT5kYXRhLGFyZyk7CkBAIC0yOTIsNTMgKzI5NywyOSBAQAogCQl9CiAJfQogCi12b2lkIGxoX2RvYWxsKExIQVNIICpsaCwgTEhBU0hfRE9BTExfRk5fVFlQRSBmdW5jKQordm9pZCBsaF9kb2FsbChfTEhBU0ggKmxoLCBMSEFTSF9ET0FMTF9GTl9UWVBFIGZ1bmMpCiAJewogCWRvYWxsX3V0aWxfZm4obGgsIDAsIGZ1bmMsIChMSEFTSF9ET0FMTF9BUkdfRk5fVFlQRSkwLCBOVUxMKTsKIAl9CiAKLXZvaWQgbGhfZG9hbGxfYXJnKExIQVNIICpsaCwgTEhBU0hfRE9BTExfQVJHX0ZOX1RZUEUgZnVuYywgdm9pZCAqYXJnKQordm9pZCBsaF9kb2FsbF9hcmcoX0xIQVNIICpsaCwgTEhBU0hfRE9BTExfQVJHX0ZOX1RZUEUgZnVuYywgdm9pZCAqYXJnKQogCXsKIAlkb2FsbF91dGlsX2ZuKGxoLCAxLCAoTEhBU0hfRE9BTExfRk5fVFlQRSkwLCBmdW5jLCBhcmcpOwogCX0KIAotc3RhdGljIHZvaWQgZXhwYW5kKExIQVNIICpsaCkKK3N0YXRpYyB2b2lkIGV4cGFuZChfTEhBU0ggKmxoKQogCXsKIAlMSEFTSF9OT0RFICoqbiwqKm4xLCoqbjIsKm5wOwotCXVuc2lnbmVkIGludCBwLGksaixwbWF4OworCXVuc2lnbmVkIGludCBwLGksajsKIAl1bnNpZ25lZCBsb25nIGhhc2gsbm5pOwogCi0JcD0oaW50KWxoLT5wKys7Ci0Jbm5pPWxoLT5udW1fYWxsb2Nfbm9kZXM7Ci0JcG1heD1saC0+cG1heDsKLQotCWlmICgobGgtPnApID49IGxoLT5wbWF4KQotCQl7Ci0JCWo9KGludClsaC0+bnVtX2FsbG9jX25vZGVzKjI7Ci0JCW49KExIQVNIX05PREUgKiopT1BFTlNTTF9yZWFsbG9jKGxoLT5iLAotCQkJKGludClzaXplb2YoTEhBU0hfTk9ERSAqKSpqKTsKLQkJaWYgKG4gPT0gTlVMTCkKLQkJCXsKLS8qCQkJZnB1dHMoInJlYWxsb2MgZXJyb3IgaW4gbGhhc2giLHN0ZGVycik7ICovCi0JCQlsaC0+ZXJyb3IrKzsKLQkJCWxoLT5wPTA7Ci0JCQlyZXR1cm47Ci0JCQl9Ci0JCS8qIGVsc2UgKi8KLQkJZm9yIChpPShpbnQpbGgtPm51bV9hbGxvY19ub2RlczsgaTxqOyBpKyspLyogMjYvMDIvOTIgZWF5ICovCi0JCQluW2ldPU5VTEw7CQkJICAvKiAwMi8wMy85MiBlYXkgKi8KLQkJbGgtPnBtYXg9bGgtPm51bV9hbGxvY19ub2RlczsKLQkJbGgtPm51bV9hbGxvY19ub2Rlcz1qOwotCQlsaC0+bnVtX2V4cGFuZF9yZWFsbG9jcysrOwotCQlsaC0+cD0wOwotCQlsaC0+Yj1uOwotCQl9Ci0KIAlsaC0+bnVtX25vZGVzKys7CiAJbGgtPm51bV9leHBhbmRzKys7CisJcD0oaW50KWxoLT5wKys7CiAJbjE9ICYobGgtPmJbcF0pOwotCW4yPSAmKGxoLT5iW3ArcG1heF0pOworCW4yPSAmKGxoLT5iW3ArKGludClsaC0+cG1heF0pOwogCSpuMj1OVUxMOyAgICAgICAgLyogMjcvMDcvOTIgLSBlYXkgLSB1bmRlZmluZWQgcG9pbnRlciBidWcgKi8KKwlubmk9bGgtPm51bV9hbGxvY19ub2RlczsKIAkKIAlmb3IgKG5wPSAqbjE7IG5wICE9IE5VTEw7ICkKIAkJewpAQCAtMzU5LDE0ICszNDAsMzUgQEAKIAkJbnA9ICpuMTsKIAkJfQogCisJaWYgKChsaC0+cCkgPj0gbGgtPnBtYXgpCisJCXsKKwkJaj0oaW50KWxoLT5udW1fYWxsb2Nfbm9kZXMqMjsKKwkJbj0oTEhBU0hfTk9ERSAqKilPUEVOU1NMX3JlYWxsb2MobGgtPmIsCisJCQkoaW50KShzaXplb2YoTEhBU0hfTk9ERSAqKSpqKSk7CisJCWlmIChuID09IE5VTEwpCisJCQl7CisvKgkJCWZwdXRzKCJyZWFsbG9jIGVycm9yIGluIGxoYXNoIixzdGRlcnIpOyAqLworCQkJbGgtPmVycm9yKys7CisJCQlsaC0+cD0wOworCQkJcmV0dXJuOworCQkJfQorCQkvKiBlbHNlICovCisJCWZvciAoaT0oaW50KWxoLT5udW1fYWxsb2Nfbm9kZXM7IGk8ajsgaSsrKS8qIDI2LzAyLzkyIGVheSAqLworCQkJbltpXT1OVUxMOwkJCSAgLyogMDIvMDMvOTIgZWF5ICovCisJCWxoLT5wbWF4PWxoLT5udW1fYWxsb2Nfbm9kZXM7CisJCWxoLT5udW1fYWxsb2Nfbm9kZXM9ajsKKwkJbGgtPm51bV9leHBhbmRfcmVhbGxvY3MrKzsKKwkJbGgtPnA9MDsKKwkJbGgtPmI9bjsKKwkJfQogCX0KIAotc3RhdGljIHZvaWQgY29udHJhY3QoTEhBU0ggKmxoKQorc3RhdGljIHZvaWQgY29udHJhY3QoX0xIQVNIICpsaCkKIAl7CiAJTEhBU0hfTk9ERSAqKm4sKm4xLCpucDsKLQlpbnQgaWR4ID0gbGgtPnArbGgtPnBtYXgtMTsKIAotCW5wPWxoLT5iW2lkeF07CisJbnA9bGgtPmJbbGgtPnArbGgtPnBtYXgtMV07CisJbGgtPmJbbGgtPnArbGgtPnBtYXgtMV09TlVMTDsgLyogMjQvMDctOTIgLSBlYXkgLSB3ZWlyZCBidXQgOi0oICovCiAJaWYgKGxoLT5wID09IDApCiAJCXsKIAkJbj0oTEhBU0hfTk9ERSAqKilPUEVOU1NMX3JlYWxsb2MobGgtPmIsCkBAIC0zODYsNyArMzg4LDYgQEAKIAllbHNlCiAJCWxoLT5wLS07CiAKLQlsaC0+YltpZHhdID0gTlVMTDsKIAlsaC0+bnVtX25vZGVzLS07CiAJbGgtPm51bV9jb250cmFjdHMrKzsKIApAQCAtNDAxLDcgKzQwMiw3IEBACiAJCX0KIAl9CiAKLXN0YXRpYyBMSEFTSF9OT0RFICoqZ2V0cm4oTEhBU0ggKmxoLCBjb25zdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nICpyaGFzaCkKK3N0YXRpYyBMSEFTSF9OT0RFICoqZ2V0cm4oX0xIQVNIICpsaCwgY29uc3Qgdm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyAqcmhhc2gpCiAJewogCUxIQVNIX05PREUgKipyZXQsKm4xOwogCXVuc2lnbmVkIGxvbmcgaGFzaCxubjsKQEAgLTQ2OCw3ICs0NjksNyBAQAogCXJldHVybigocmV0Pj4xNilecmV0KTsKIAl9CiAKLXVuc2lnbmVkIGxvbmcgbGhfbnVtX2l0ZW1zKGNvbnN0IExIQVNIICpsaCkKK3Vuc2lnbmVkIGxvbmcgbGhfbnVtX2l0ZW1zKGNvbnN0IF9MSEFTSCAqbGgpCiAJewogCXJldHVybiBsaCA/IGxoLT5udW1faXRlbXMgOiAwOwogCX0KZGlmZiAtLWdpdCBhL2NyeXB0by9saGFzaC9saGFzaC5oIGIvY3J5cHRvL2xoYXNoL2xoYXNoLmgKaW5kZXggZDM5MmQwYy4uZTdkODc2MyAxMDA2NDQKLS0tIGEvY3J5cHRvL2xoYXNoL2xoYXNoLmgKKysrIGIvY3J5cHRvL2xoYXNoL2xoYXNoLmgKQEAgLTk4LDQyICs5OCw0MiBAQAogICogbWFjcm9zIGlmIHRoZSBmdW5jdGlvbnMgYXJlIHN0cmljdGx5IGludGVybmFsLiAqLwogCiAvKiBGaXJzdDogImhhc2giIGZ1bmN0aW9ucyAqLwotI2RlZmluZSBERUNMQVJFX0xIQVNIX0hBU0hfRk4oZl9uYW1lLG9fdHlwZSkgXAotCXVuc2lnbmVkIGxvbmcgZl9uYW1lIyNfTEhBU0hfSEFTSChjb25zdCB2b2lkICopOwotI2RlZmluZSBJTVBMRU1FTlRfTEhBU0hfSEFTSF9GTihmX25hbWUsb190eXBlKSBcCi0JdW5zaWduZWQgbG9uZyBmX25hbWUjI19MSEFTSF9IQVNIKGNvbnN0IHZvaWQgKmFyZykgeyBcCi0JCW9fdHlwZSBhID0gKG9fdHlwZSlhcmc7IFwKLQkJcmV0dXJuIGZfbmFtZShhKTsgfQotI2RlZmluZSBMSEFTSF9IQVNIX0ZOKGZfbmFtZSkgZl9uYW1lIyNfTEhBU0hfSEFTSAorI2RlZmluZSBERUNMQVJFX0xIQVNIX0hBU0hfRk4obmFtZSwgb190eXBlKSBcCisJdW5zaWduZWQgbG9uZyBuYW1lIyNfTEhBU0hfSEFTSChjb25zdCB2b2lkICopOworI2RlZmluZSBJTVBMRU1FTlRfTEhBU0hfSEFTSF9GTihuYW1lLCBvX3R5cGUpIFwKKwl1bnNpZ25lZCBsb25nIG5hbWUjI19MSEFTSF9IQVNIKGNvbnN0IHZvaWQgKmFyZykgeyBcCisJCWNvbnN0IG9fdHlwZSAqYSA9IGFyZzsgXAorCQlyZXR1cm4gbmFtZSMjX2hhc2goYSk7IH0KKyNkZWZpbmUgTEhBU0hfSEFTSF9GTihuYW1lKSBuYW1lIyNfTEhBU0hfSEFTSAogCiAvKiBTZWNvbmQ6ICJjb21wYXJlIiBmdW5jdGlvbnMgKi8KLSNkZWZpbmUgREVDTEFSRV9MSEFTSF9DT01QX0ZOKGZfbmFtZSxvX3R5cGUpIFwKLQlpbnQgZl9uYW1lIyNfTEhBU0hfQ09NUChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKik7Ci0jZGVmaW5lIElNUExFTUVOVF9MSEFTSF9DT01QX0ZOKGZfbmFtZSxvX3R5cGUpIFwKLQlpbnQgZl9uYW1lIyNfTEhBU0hfQ09NUChjb25zdCB2b2lkICphcmcxLCBjb25zdCB2b2lkICphcmcyKSB7IFwKLQkJb190eXBlIGEgPSAob190eXBlKWFyZzE7IFwKLQkJb190eXBlIGIgPSAob190eXBlKWFyZzI7IFwKLQkJcmV0dXJuIGZfbmFtZShhLGIpOyB9Ci0jZGVmaW5lIExIQVNIX0NPTVBfRk4oZl9uYW1lKSBmX25hbWUjI19MSEFTSF9DT01QCisjZGVmaW5lIERFQ0xBUkVfTEhBU0hfQ09NUF9GTihuYW1lLCBvX3R5cGUpIFwKKwlpbnQgbmFtZSMjX0xIQVNIX0NPTVAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOworI2RlZmluZSBJTVBMRU1FTlRfTEhBU0hfQ09NUF9GTihuYW1lLCBvX3R5cGUpIFwKKwlpbnQgbmFtZSMjX0xIQVNIX0NPTVAoY29uc3Qgdm9pZCAqYXJnMSwgY29uc3Qgdm9pZCAqYXJnMikgeyBcCisJCWNvbnN0IG9fdHlwZSAqYSA9IGFyZzE7CQkgICAgXAorCQljb25zdCBvX3R5cGUgKmIgPSBhcmcyOyBcCisJCXJldHVybiBuYW1lIyNfY21wKGEsYik7IH0KKyNkZWZpbmUgTEhBU0hfQ09NUF9GTihuYW1lKSBuYW1lIyNfTEhBU0hfQ09NUAogCiAvKiBUaGlyZDogImRvYWxsIiBmdW5jdGlvbnMgKi8KLSNkZWZpbmUgREVDTEFSRV9MSEFTSF9ET0FMTF9GTihmX25hbWUsb190eXBlKSBcCi0Jdm9pZCBmX25hbWUjI19MSEFTSF9ET0FMTCh2b2lkICopOwotI2RlZmluZSBJTVBMRU1FTlRfTEhBU0hfRE9BTExfRk4oZl9uYW1lLG9fdHlwZSkgXAotCXZvaWQgZl9uYW1lIyNfTEhBU0hfRE9BTEwodm9pZCAqYXJnKSB7IFwKLQkJb190eXBlIGEgPSAob190eXBlKWFyZzsgXAotCQlmX25hbWUoYSk7IH0KLSNkZWZpbmUgTEhBU0hfRE9BTExfRk4oZl9uYW1lKSBmX25hbWUjI19MSEFTSF9ET0FMTAorI2RlZmluZSBERUNMQVJFX0xIQVNIX0RPQUxMX0ZOKG5hbWUsIG9fdHlwZSkgXAorCXZvaWQgbmFtZSMjX0xIQVNIX0RPQUxMKHZvaWQgKik7CisjZGVmaW5lIElNUExFTUVOVF9MSEFTSF9ET0FMTF9GTihuYW1lLCBvX3R5cGUpIFwKKwl2b2lkIG5hbWUjI19MSEFTSF9ET0FMTCh2b2lkICphcmcpIHsgXAorCQlvX3R5cGUgKmEgPSBhcmc7IFwKKwkJbmFtZSMjX2RvYWxsKGEpOyB9CisjZGVmaW5lIExIQVNIX0RPQUxMX0ZOKG5hbWUpIG5hbWUjI19MSEFTSF9ET0FMTAogCiAvKiBGb3VydGg6ICJkb2FsbF9hcmciIGZ1bmN0aW9ucyAqLwotI2RlZmluZSBERUNMQVJFX0xIQVNIX0RPQUxMX0FSR19GTihmX25hbWUsb190eXBlLGFfdHlwZSkgXAotCXZvaWQgZl9uYW1lIyNfTEhBU0hfRE9BTExfQVJHKHZvaWQgKiwgdm9pZCAqKTsKLSNkZWZpbmUgSU1QTEVNRU5UX0xIQVNIX0RPQUxMX0FSR19GTihmX25hbWUsb190eXBlLGFfdHlwZSkgXAotCXZvaWQgZl9uYW1lIyNfTEhBU0hfRE9BTExfQVJHKHZvaWQgKmFyZzEsIHZvaWQgKmFyZzIpIHsgXAotCQlvX3R5cGUgYSA9IChvX3R5cGUpYXJnMTsgXAotCQlhX3R5cGUgYiA9IChhX3R5cGUpYXJnMjsgXAotCQlmX25hbWUoYSxiKTsgfQotI2RlZmluZSBMSEFTSF9ET0FMTF9BUkdfRk4oZl9uYW1lKSBmX25hbWUjI19MSEFTSF9ET0FMTF9BUkcKKyNkZWZpbmUgREVDTEFSRV9MSEFTSF9ET0FMTF9BUkdfRk4obmFtZSwgb190eXBlLCBhX3R5cGUpIFwKKwl2b2lkIG5hbWUjI19MSEFTSF9ET0FMTF9BUkcodm9pZCAqLCB2b2lkICopOworI2RlZmluZSBJTVBMRU1FTlRfTEhBU0hfRE9BTExfQVJHX0ZOKG5hbWUsIG9fdHlwZSwgYV90eXBlKSBcCisJdm9pZCBuYW1lIyNfTEhBU0hfRE9BTExfQVJHKHZvaWQgKmFyZzEsIHZvaWQgKmFyZzIpIHsgXAorCQlvX3R5cGUgKmEgPSBhcmcxOyBcCisJCWFfdHlwZSAqYiA9IGFyZzI7IFwKKwkJbmFtZSMjX2RvYWxsX2FyZyhhLCBiKTsgfQorI2RlZmluZSBMSEFTSF9ET0FMTF9BUkdfRk4obmFtZSkgbmFtZSMjX0xIQVNIX0RPQUxMX0FSRwogCiB0eXBlZGVmIHN0cnVjdCBsaGFzaF9zdAogCXsKQEAgLTE2Myw3ICsxNjMsOCBAQAogCXVuc2lnbmVkIGxvbmcgbnVtX2hhc2hfY29tcHM7CiAKIAlpbnQgZXJyb3I7Ci0JfSBMSEFTSDsKKwl9IF9MSEFTSDsJLyogRG8gbm90IHVzZSBfTEhBU0ggZGlyZWN0bHksIHVzZSBMSEFTSF9PRgorCQkJICogYW5kIGZyaWVuZHMgKi8KIAogI2RlZmluZSBMSF9MT0FEX01VTFQJMjU2CiAKQEAgLTE3MSwyNyArMTcyLDY3IEBACiAgKiBpbiBsaF9pbnNlcnQoKS4gKi8KICNkZWZpbmUgbGhfZXJyb3IobGgpCSgobGgpLT5lcnJvcikKIAotTEhBU0ggKmxoX25ldyhMSEFTSF9IQVNIX0ZOX1RZUEUgaCwgTEhBU0hfQ09NUF9GTl9UWVBFIGMpOwotdm9pZCBsaF9mcmVlKExIQVNIICpsaCk7Ci12b2lkICpsaF9pbnNlcnQoTEhBU0ggKmxoLCB2b2lkICpkYXRhKTsKLXZvaWQgKmxoX2RlbGV0ZShMSEFTSCAqbGgsIGNvbnN0IHZvaWQgKmRhdGEpOwotdm9pZCAqbGhfcmV0cmlldmUoTEhBU0ggKmxoLCBjb25zdCB2b2lkICpkYXRhKTsKLXZvaWQgbGhfZG9hbGwoTEhBU0ggKmxoLCBMSEFTSF9ET0FMTF9GTl9UWVBFIGZ1bmMpOwotdm9pZCBsaF9kb2FsbF9hcmcoTEhBU0ggKmxoLCBMSEFTSF9ET0FMTF9BUkdfRk5fVFlQRSBmdW5jLCB2b2lkICphcmcpOworX0xIQVNIICpsaF9uZXcoTEhBU0hfSEFTSF9GTl9UWVBFIGgsIExIQVNIX0NPTVBfRk5fVFlQRSBjKTsKK3ZvaWQgbGhfZnJlZShfTEhBU0ggKmxoKTsKK3ZvaWQgKmxoX2luc2VydChfTEhBU0ggKmxoLCB2b2lkICpkYXRhKTsKK3ZvaWQgKmxoX2RlbGV0ZShfTEhBU0ggKmxoLCBjb25zdCB2b2lkICpkYXRhKTsKK3ZvaWQgKmxoX3JldHJpZXZlKF9MSEFTSCAqbGgsIGNvbnN0IHZvaWQgKmRhdGEpOwordm9pZCBsaF9kb2FsbChfTEhBU0ggKmxoLCBMSEFTSF9ET0FMTF9GTl9UWVBFIGZ1bmMpOwordm9pZCBsaF9kb2FsbF9hcmcoX0xIQVNIICpsaCwgTEhBU0hfRE9BTExfQVJHX0ZOX1RZUEUgZnVuYywgdm9pZCAqYXJnKTsKIHVuc2lnbmVkIGxvbmcgbGhfc3RyaGFzaChjb25zdCBjaGFyICpjKTsKLXVuc2lnbmVkIGxvbmcgbGhfbnVtX2l0ZW1zKGNvbnN0IExIQVNIICpsaCk7Cit1bnNpZ25lZCBsb25nIGxoX251bV9pdGVtcyhjb25zdCBfTEhBU0ggKmxoKTsKIAogI2lmbmRlZiBPUEVOU1NMX05PX0ZQX0FQSQotdm9pZCBsaF9zdGF0cyhjb25zdCBMSEFTSCAqbGgsIEZJTEUgKm91dCk7Ci12b2lkIGxoX25vZGVfc3RhdHMoY29uc3QgTEhBU0ggKmxoLCBGSUxFICpvdXQpOwotdm9pZCBsaF9ub2RlX3VzYWdlX3N0YXRzKGNvbnN0IExIQVNIICpsaCwgRklMRSAqb3V0KTsKK3ZvaWQgbGhfc3RhdHMoY29uc3QgX0xIQVNIICpsaCwgRklMRSAqb3V0KTsKK3ZvaWQgbGhfbm9kZV9zdGF0cyhjb25zdCBfTEhBU0ggKmxoLCBGSUxFICpvdXQpOwordm9pZCBsaF9ub2RlX3VzYWdlX3N0YXRzKGNvbnN0IF9MSEFTSCAqbGgsIEZJTEUgKm91dCk7CiAjZW5kaWYKIAogI2lmbmRlZiBPUEVOU1NMX05PX0JJTwotdm9pZCBsaF9zdGF0c19iaW8oY29uc3QgTEhBU0ggKmxoLCBCSU8gKm91dCk7Ci12b2lkIGxoX25vZGVfc3RhdHNfYmlvKGNvbnN0IExIQVNIICpsaCwgQklPICpvdXQpOwotdm9pZCBsaF9ub2RlX3VzYWdlX3N0YXRzX2Jpbyhjb25zdCBMSEFTSCAqbGgsIEJJTyAqb3V0KTsKK3ZvaWQgbGhfc3RhdHNfYmlvKGNvbnN0IF9MSEFTSCAqbGgsIEJJTyAqb3V0KTsKK3ZvaWQgbGhfbm9kZV9zdGF0c19iaW8oY29uc3QgX0xIQVNIICpsaCwgQklPICpvdXQpOwordm9pZCBsaF9ub2RlX3VzYWdlX3N0YXRzX2Jpbyhjb25zdCBfTEhBU0ggKmxoLCBCSU8gKm91dCk7CiAjZW5kaWYKKworLyogVHlwZSBjaGVja2luZy4uLiAqLworCisjZGVmaW5lIExIQVNIX09GKHR5cGUpIHN0cnVjdCBsaGFzaF9zdF8jI3R5cGUKKworI2RlZmluZSBERUNMQVJFX0xIQVNIX09GKHR5cGUpIExIQVNIX09GKHR5cGUpIHsgaW50IGR1bW15OyB9CisKKyNkZWZpbmUgQ0hFQ0tFRF9MSEFTSF9PRih0eXBlLGxoKSBcCisgICgoX0xIQVNIICopQ0hFQ0tFRF9QVFJfT0YoTEhBU0hfT0YodHlwZSksbGgpKQorCisvKiBEZWZpbmUgd3JhcHBlciBmdW5jdGlvbnMuICovCisjZGVmaW5lIExITV9saF9uZXcodHlwZSwgbmFtZSkgXAorICAoKExIQVNIX09GKHR5cGUpICopbGhfbmV3KExIQVNIX0hBU0hfRk4obmFtZSksIExIQVNIX0NPTVBfRk4obmFtZSkpKQorI2RlZmluZSBMSE1fbGhfZXJyb3IodHlwZSwgbGgpIFwKKyAgbGhfZXJyb3IoQ0hFQ0tFRF9MSEFTSF9PRih0eXBlLGxoKSkKKyNkZWZpbmUgTEhNX2xoX2luc2VydCh0eXBlLCBsaCwgaW5zdCkgXAorICAoKHR5cGUgKilsaF9pbnNlcnQoQ0hFQ0tFRF9MSEFTSF9PRih0eXBlLCBsaCksIFwKKwkJICAgICBDSEVDS0VEX1BUUl9PRih0eXBlLCBpbnN0KSkpCisjZGVmaW5lIExITV9saF9yZXRyaWV2ZSh0eXBlLCBsaCwgaW5zdCkgXAorICAoKHR5cGUgKilsaF9yZXRyaWV2ZShDSEVDS0VEX0xIQVNIX09GKHR5cGUsIGxoKSwgXAorCQkgICAgICAgQ0hFQ0tFRF9QVFJfT0YodHlwZSwgaW5zdCkpKQorI2RlZmluZSBMSE1fbGhfZGVsZXRlKHR5cGUsIGxoLCBpbnN0KSBcCisgICgodHlwZSAqKWxoX2RlbGV0ZShDSEVDS0VEX0xIQVNIX09GKHR5cGUsIGxoKSwJCQlcCisJCSAgICAgQ0hFQ0tFRF9QVFJfT0YodHlwZSwgaW5zdCkpKQorI2RlZmluZSBMSE1fbGhfZG9hbGwodHlwZSwgbGgsZm4pIGxoX2RvYWxsKENIRUNLRURfTEhBU0hfT0YodHlwZSwgbGgpLCBmbikKKyNkZWZpbmUgTEhNX2xoX2RvYWxsX2FyZyh0eXBlLCBsaCwgZm4sIGFyZ190eXBlLCBhcmcpIFwKKyAgbGhfZG9hbGxfYXJnKENIRUNLRURfTEhBU0hfT0YodHlwZSwgbGgpLCBmbiwgQ0hFQ0tFRF9QVFJfT0YoYXJnX3R5cGUsIGFyZykpCisjZGVmaW5lIExITV9saF9udW1faXRlbXModHlwZSwgbGgpIGxoX251bV9pdGVtcyhDSEVDS0VEX0xIQVNIX09GKHR5cGUsIGxoKSkKKyNkZWZpbmUgTEhNX2xoX2Rvd25fbG9hZCh0eXBlLCBsaCkgKENIRUNLRURfTEhBU0hfT0YodHlwZSwgbGgpLT5kb3duX2xvYWQpCisjZGVmaW5lIExITV9saF9ub2RlX3N0YXRzX2Jpbyh0eXBlLCBsaCwgb3V0KSBcCisgIGxoX25vZGVfc3RhdHNfYmlvKENIRUNLRURfTEhBU0hfT0YodHlwZSwgbGgpLCBvdXQpCisjZGVmaW5lIExITV9saF9ub2RlX3VzYWdlX3N0YXRzX2Jpbyh0eXBlLCBsaCwgb3V0KSBcCisgIGxoX25vZGVfdXNhZ2Vfc3RhdHNfYmlvKENIRUNLRURfTEhBU0hfT0YodHlwZSwgbGgpLCBvdXQpCisjZGVmaW5lIExITV9saF9zdGF0c19iaW8odHlwZSwgbGgsIG91dCkgXAorICBsaF9zdGF0c19iaW8oQ0hFQ0tFRF9MSEFTSF9PRih0eXBlLCBsaCksIG91dCkKKyNkZWZpbmUgTEhNX2xoX2ZyZWUodHlwZSwgbGgpIGxoX2ZyZWUoQ0hFQ0tFRF9MSEFTSF9PRih0eXBlLCBsaCkpCisKK0RFQ0xBUkVfTEhBU0hfT0YoT1BFTlNTTF9TVFJJTkcpOworREVDTEFSRV9MSEFTSF9PRihPUEVOU1NMX0NTVFJJTkcpOworCiAjaWZkZWYgIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2NyeXB0by9tZDMyX2NvbW1vbi5oIGIvY3J5cHRvL21kMzJfY29tbW9uLmgKaW5kZXggNjFiY2Q5Ny4uMWNiNzgzOSAxMDA2NDQKLS0tIGEvY3J5cHRvL21kMzJfY29tbW9uLmgKKysrIGIvY3J5cHRvL21kMzJfY29tbW9uLmgKQEAgLTI0MSwxMSArMjQxLDExIEBACiAjaWZuZGVmIFBFREFOVElDCiAjIGlmIGRlZmluZWQoX19HTlVDX18pICYmIF9fR05VQ19fPj0yICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fQVNNKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX0lOTElORV9BU00pCiAjICBpZiBkZWZpbmVkKF9fczM5MHhfXykKLSMgICBkZWZpbmUgSE9TVF9jMmwoYyxsKQkoeyBhc20gKCJscnYJJTAsMCglMSkiCQlcCi0JCQkJCToiPXIiKGwpIDogInIiKGMpKTsJCVwKKyMgICBkZWZpbmUgSE9TVF9jMmwoYyxsKQkoeyBhc20gKCJscnYJJTAsJTEiCQkJXAorCQkJCSAgIDoiPWQiKGwpIDoibSIoKihjb25zdCB1bnNpZ25lZCBpbnQgKikoYykpKTtcCiAJCQkJICAgKGMpKz00OyAobCk7CQkJCX0pCi0jICAgZGVmaW5lIEhPU1RfbDJjKGwsYykJKHsgYXNtICgic3RydgklMCwwKCUxKSIJCVwKLQkJCQkJOiA6ICJyIihsKSwiciIoYykgOiAibWVtb3J5Iik7CVwKKyMgICBkZWZpbmUgSE9TVF9sMmMobCxjKQkoeyBhc20gKCJzdHJ2CSUxLCUwIgkJCVwKKwkJCQkgICA6Ij1tIigqKHVuc2lnbmVkIGludCAqKShjKSkgOiJkIihsKSk7XAogCQkJCSAgIChjKSs9NDsgKGwpOwkJCQl9KQogIyAgZW5kaWYKICMgZW5kaWYKQEAgLTI5Myw3ICsyOTMsNyBAQAogCSAqIFdlaSBEYWkgPHdlaWRhaUBlc2tpbW8uY29tPiBmb3IgcG9pbnRpbmcgaXQgb3V0LiAqLwogCWlmIChsIDwgYy0+TmwpIC8qIG92ZXJmbG93ICovCiAJCWMtPk5oKys7Ci0JYy0+TmgrPShsZW4+PjI5KTsJLyogbWlnaHQgY2F1c2UgY29tcGlsZXIgd2FybmluZyBvbiAxNi1iaXQgKi8KKwljLT5OaCs9KEhBU0hfTE9ORykobGVuPj4yOSk7CS8qIG1pZ2h0IGNhdXNlIGNvbXBpbGVyIHdhcm5pbmcgb24gMTYtYml0ICovCiAJYy0+Tmw9bDsKIAogCW4gPSBjLT5udW07CkBAIC0zMzEsNyArMzMxLDcgQEAKIAlpZiAobGVuICE9IDApCiAJCXsKIAkJcCA9ICh1bnNpZ25lZCBjaGFyICopYy0+ZGF0YTsKLQkJYy0+bnVtID0gbGVuOworCQljLT5udW0gPSAodW5zaWduZWQgaW50KWxlbjsKIAkJbWVtY3B5IChwLGRhdGEsbGVuKTsKIAkJfQogCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL21kNC9NYWtlZmlsZSBiL2NyeXB0by9tZDQvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiYzQ4OTYuLjAwMDAwMDAKLS0tIGEvY3J5cHRvL21kNC9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLSMKLSMgT3BlblNTTC9jcnlwdG8vbWQ0L01ha2VmaWxlCi0jCi0KLURJUj0gICAgbWQ0Ci1UT1A9ICAgIC4uLy4uCi1DQz0gICAgIGNjCi1DUFA9ICAgICQoQ0MpIC1FCi1JTkNMVURFUz0KLUNGTEFHPS1nCi1NQUtFRklMRT0gICAgICAgTWFrZWZpbGUKLUFSPSAgICAgICAgICAgICBhciByCi0KLUNGTEFHUz0gJChJTkNMVURFUykgJChDRkxBRykKLQotR0VORVJBTD1NYWtlZmlsZQotVEVTVD1tZDR0ZXN0LmMKLUFQUFM9bWQ0LmMKLQotTElCPSQoVE9QKS9saWJjcnlwdG8uYQotTElCU1JDPW1kNF9kZ3N0LmMgbWQ0X29uZS5jCi1MSUJPQko9bWQ0X2Rnc3QubyBtZDRfb25lLm8KLQotU1JDPSAkKExJQlNSQykKLQotRVhIRUFERVI9IG1kNC5oCi1IRUFERVI9IG1kNF9sb2NsLmggJChFWEhFQURFUikKLQotQUxMPSAgICAkKEdFTkVSQUwpICQoU1JDKSAkKEhFQURFUikKLQotdG9wOgotCShjZCAuLi8uLjsgJChNQUtFKSBESVJTPWNyeXB0byBTRElSUz0kKERJUikgc3ViX2FsbCkKLQotYWxsOiAgICBsaWIKLQotbGliOiAgICAkKExJQk9CSikKLQkkKEFSWCkgJChMSUIpICQoTElCT0JKKQotCSQoUkFOTElCKSAkKExJQikgfHwgZWNobyBOZXZlciBtaW5kLgotCUB0b3VjaCBsaWIKLQotZmlsZXM6Ci0JJChQRVJMKSAkKFRPUCkvdXRpbC9maWxlcy5wbCBNYWtlZmlsZSA+PiAkKFRPUCkvTUlORk8KLQotbGlua3M6Ci0JQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL2luY2x1ZGUvb3BlbnNzbCAkKEVYSEVBREVSKQotCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi90ZXN0ICQoVEVTVCkKLQlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vYXBwcyAkKEFQUFMpCi0KLWluc3RhbGw6Ci0JQFsgLW4gIiQoSU5TVEFMTFRPUCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHRvcCBNYWtlZmlsZS4uLgotCUBoZWFkZXJsaXN0PSIkKEVYSEVBREVSKSI7IGZvciBpIGluICQkaGVhZGVybGlzdCA7IFwKLQlkbyAgXAotCShjcCAkJGkgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGk7IFwKLQljaG1vZCA2NDQgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGkgKTsgXAotCWRvbmU7Ci0KLXRhZ3M6Ci0JY3RhZ3MgJChTUkMpCi0KLXRlc3RzOgotCi1saW50OgotCWxpbnQgLURMSU5UICQoSU5DTFVERVMpICQoU1JDKT5mbHVmZgotCi1kZXBlbmQ6Ci0JQFsgLW4gIiQoTUFLRURFUEVORCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHVwcGVyIE1ha2VmaWxlLi4uCi0JJChNQUtFREVQRU5EKSAtLSAkKENGTEFHKSAkKElOQ0xVREVTKSAkKERFUEZMQUcpIC0tICQoUFJPR1MpICQoTElCU1JDKQotCi1kY2xlYW46Ci0JJChQRVJMKSAtcGUgJ2lmICgvXiMgRE8gTk9UIERFTEVURSBUSElTIExJTkUvKSB7cHJpbnQ7IGV4aXQoMCk7fScgJChNQUtFRklMRSkgPk1ha2VmaWxlLm5ldwotCW12IC1mIE1ha2VmaWxlLm5ldyAkKE1BS0VGSUxFKQotCi1jbGVhbjoKLQlybSAtZiBhc20vbXg4NnVuaXguY3BwICoubyBhc20vKi5vICoub2JqIGxpYiB0YWdzIGNvcmUgLnB1cmUgLm5mcyogKi5vbGQgKi5iYWsgZmx1ZmYKLQotIyBETyBOT1QgREVMRVRFIFRISVMgTElORSAtLSBtYWtlIGRlcGVuZCBkZXBlbmRzIG9uIGl0LgotCi1tZDRfZGdzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1tZDRfZGdzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLW1kNF9kZ3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLW1kNF9kZ3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9tZDQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotbWQ0X2Rnc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLW1kNF9kZ3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotbWQ0X2Rnc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vbWQzMl9jb21tb24uaCBtZDRfZGdzdC5jCi1tZDRfZGdzdC5vOiBtZDRfbG9jbC5oCi1tZDRfb25lLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotbWQ0X29uZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbWQ0LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLW1kNF9vbmUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLW1kNF9vbmUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1tZDRfb25lLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIG1kNF9vbmUuYwpkaWZmIC0tZ2l0IGEvY3J5cHRvL21kNC9tZDQuaCBiL2NyeXB0by9tZDQvbWQ0LmgKaW5kZXggYmExZmU0YS4uYzNlZDliMyAxMDA2NDQKLS0tIGEvY3J5cHRvL21kNC9tZDQuaAorKysgYi9jcnlwdG8vbWQ0L21kNC5oCkBAIC03Nyw3ICs3Nyw3IEBACiAgKiAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQogICovCiAKLSNpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX1dJTjE2KSB8fCBkZWZpbmVkKF9fTFAzMl9fKQorI2lmIGRlZmluZWQoX19MUDMyX18pCiAjZGVmaW5lIE1ENF9MT05HIHVuc2lnbmVkIGxvbmcKICNlbGlmIGRlZmluZWQoT1BFTlNTTF9TWVNfQ1JBWSkgfHwgZGVmaW5lZChfX0lMUDY0X18pCiAjZGVmaW5lIE1ENF9MT05HIHVuc2lnbmVkIGxvbmcKQEAgLTEwNSw5ICsxMDUsNiBAQAogCXVuc2lnbmVkIGludCBudW07CiAJfSBNRDRfQ1RYOwogCi0jaWZkZWYgT1BFTlNTTF9GSVBTCi1pbnQgcHJpdmF0ZV9NRDRfSW5pdChNRDRfQ1RYICpjKTsKLSNlbmRpZgogaW50IE1ENF9Jbml0KE1ENF9DVFggKmMpOwogaW50IE1ENF9VcGRhdGUoTUQ0X0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7CiBpbnQgTUQ0X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBNRDRfQ1RYICpjKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9tZDQvbWQ0X2Rnc3QuYyBiL2NyeXB0by9tZDQvbWQ0X2Rnc3QuYwppbmRleCAwZjU0NDg2Li5lMGM0MmU4IDEwMDY0NAotLS0gYS9jcnlwdG8vbWQ0L21kNF9kZ3N0LmMKKysrIGIvY3J5cHRvL21kNC9tZDRfZGdzdC5jCkBAIC01OSwxMSArNTksNiBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSAibWQ0X2xvY2wuaCIKICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+Ci0jaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLSNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSNlbmRpZgotCiAKIGNvbnN0IGNoYXIgTUQ0X3ZlcnNpb25bXT0iTUQ0IiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7CiAKQEAgLTc1LDE1ICs3MCwxMyBAQAogI2RlZmluZSBJTklUX0RBVEFfQyAodW5zaWduZWQgbG9uZykweDk4YmFkY2ZlTAogI2RlZmluZSBJTklUX0RBVEFfRCAodW5zaWduZWQgbG9uZykweDEwMzI1NDc2TAogCi1GSVBTX05PTl9GSVBTX01EX0luaXQoTUQ0KQoraW50IE1ENF9Jbml0KE1ENF9DVFggKmMpCiAJeworCW1lbXNldCAoYywwLHNpemVvZigqYykpOwogCWMtPkE9SU5JVF9EQVRBX0E7CiAJYy0+Qj1JTklUX0RBVEFfQjsKIAljLT5DPUlOSVRfREFUQV9DOwogCWMtPkQ9SU5JVF9EQVRBX0Q7Ci0JYy0+Tmw9MDsKLQljLT5OaD0wOwotCWMtPm51bT0wOwogCXJldHVybiAxOwogCX0KIApkaWZmIC0tZ2l0IGEvY3J5cHRvL21kNS9NYWtlZmlsZSBiL2NyeXB0by9tZDUvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjNDUwZmMuLjAwMDAwMDAKLS0tIGEvY3J5cHRvL21kNS9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi0jCi0jIE9wZW5TU0wvY3J5cHRvL21kNS9NYWtlZmlsZQotIwotCi1ESVI9ICAgIG1kNQotVE9QPSAgICAuLi8uLgotQ0M9ICAgICBjYwotQ1BQPSAgICAkKENDKSAtRQotSU5DTFVERVM9LUkuLiAtSSQoVE9QKSAtSS4uLy4uL2luY2x1ZGUKLUNGTEFHPS1nCi1NQUtFRklMRT0gICAgICAgTWFrZWZpbGUKLUFSPSAgICAgICAgICAgICBhciByCi0KLU1ENV9BU01fT0JKPQotCi1DRkxBR1M9ICQoSU5DTFVERVMpICQoQ0ZMQUcpCi1BU0ZMQUdTPSAkKElOQ0xVREVTKSAkKEFTRkxBRykKLUFGTEFHUz0gJChBU0ZMQUdTKQotCi1HRU5FUkFMPU1ha2VmaWxlCi1URVNUPW1kNXRlc3QuYwotQVBQUz0KLQotTElCPSQoVE9QKS9saWJjcnlwdG8uYQotTElCU1JDPW1kNV9kZ3N0LmMgbWQ1X29uZS5jCi1MSUJPQko9bWQ1X2Rnc3QubyBtZDVfb25lLm8gJChNRDVfQVNNX09CSikKLQotU1JDPSAkKExJQlNSQykKLQotRVhIRUFERVI9IG1kNS5oCi1IRUFERVI9IG1kNV9sb2NsLmggJChFWEhFQURFUikKLQotQUxMPSAgICAkKEdFTkVSQUwpICQoU1JDKSAkKEhFQURFUikKLQotdG9wOgotCShjZCAuLi8uLjsgJChNQUtFKSBESVJTPWNyeXB0byBTRElSUz0kKERJUikgc3ViX2FsbCkKLQotYWxsOiAgICBsaWIKLQotbGliOiAgICAkKExJQk9CSikKLQkkKEFSWCkgJChMSUIpICQoTElCT0JKKQotCSQoUkFOTElCKSAkKExJQikgfHwgZWNobyBOZXZlciBtaW5kLgotCUB0b3VjaCBsaWIKLQotIyBFTEYKLW14ODYtZWxmLnM6IGFzbS9tZDUtNTg2LnBsIC4uL3Blcmxhc20veDg2YXNtLnBsCi0JKGNkIGFzbTsgJChQRVJMKSBtZDUtNTg2LnBsIGVsZiAkKENGTEFHUykgPiAuLi8kQCkKLSMgQ09GRgotbXg4Ni1jb2YuczogYXNtL21kNS01ODYucGwgLi4vcGVybGFzbS94ODZhc20ucGwKLQkoY2QgYXNtOyAkKFBFUkwpIG1kNS01ODYucGwgY29mZiAkKENGTEFHUykgPiAuLi8kQCkKLSMgYS5vdXQKLW14ODYtb3V0LnM6IGFzbS9tZDUtNTg2LnBsIC4uL3Blcmxhc20veDg2YXNtLnBsCi0JKGNkIGFzbTsgJChQRVJMKSBtZDUtNTg2LnBsIGEub3V0ICQoQ0ZMQUdTKSA+IC4uLyRAKQotCi1tZDUteDg2XzY0LnM6CWFzbS9tZDUteDg2XzY0LnBsOwkkKFBFUkwpIGFzbS9tZDUteDg2XzY0LnBsICRACi0KLWZpbGVzOgotCSQoUEVSTCkgJChUT1ApL3V0aWwvZmlsZXMucGwgTWFrZWZpbGUgPj4gJChUT1ApL01JTkZPCi0KLWxpbmtzOgotCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9pbmNsdWRlL29wZW5zc2wgJChFWEhFQURFUikKLQlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vdGVzdCAkKFRFU1QpCi0JQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL2FwcHMgJChBUFBTKQotCi1pbnN0YWxsOgotCUBbIC1uICIkKElOU1RBTExUT1ApIiBdICMgc2hvdWxkIGJlIHNldCBieSB0b3AgTWFrZWZpbGUuLi4KLQlAaGVhZGVybGlzdD0iJChFWEhFQURFUikiOyBmb3IgaSBpbiAkJGhlYWRlcmxpc3QgOyBcCi0JZG8gIFwKLQkoY3AgJCRpICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpOyBcCi0JY2htb2QgNjQ0ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpICk7IFwKLQlkb25lOwotCi10YWdzOgotCWN0YWdzICQoU1JDKQotCi10ZXN0czoKLQotbGludDoKLQlsaW50IC1ETElOVCAkKElOQ0xVREVTKSAkKFNSQyk+Zmx1ZmYKLQotZGVwZW5kOgotCUBbIC1uICIkKE1BS0VERVBFTkQpIiBdICMgc2hvdWxkIGJlIHNldCBieSB1cHBlciBNYWtlZmlsZS4uLgotCSQoTUFLRURFUEVORCkgLS0gJChDRkxBRykgJChJTkNMVURFUykgJChERVBGTEFHKSAtLSAkKFBST0dTKSAkKExJQlNSQykKLQotZGNsZWFuOgotCSQoUEVSTCkgLXBlICdpZiAoL14jIERPIE5PVCBERUxFVEUgVEhJUyBMSU5FLykge3ByaW50OyBleGl0KDApO30nICQoTUFLRUZJTEUpID5NYWtlZmlsZS5uZXcKLQltdiAtZiBNYWtlZmlsZS5uZXcgJChNQUtFRklMRSkKLQotY2xlYW46Ci0Jcm0gLWYgKi5zICoubyAqLm9iaiBsaWIgdGFncyBjb3JlIC5wdXJlIC5uZnMqICoub2xkICouYmFrIGZsdWZmCi0KLSMgRE8gTk9UIERFTEVURSBUSElTIExJTkUgLS0gbWFrZSBkZXBlbmQgZGVwZW5kcyBvbiBpdC4KLQotbWQ1X2Rnc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotbWQ1X2Rnc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1tZDVfZGdzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1tZDVfZGdzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbWQ1LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLW1kNV9kZ3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1tZDVfZGdzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLW1kNV9kZ3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL21kMzJfY29tbW9uLmggbWQ1X2Rnc3QuYwotbWQ1X2Rnc3QubzogbWQ1X2xvY2wuaAotbWQ1X29uZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLW1kNV9vbmUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL21kNS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1tZDVfb25lLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1tZDVfb25lLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotbWQ1X29uZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBtZDVfb25lLmMKZGlmZiAtLWdpdCBhL2NyeXB0by9tZDUvYXNtL21kNS01ODYucGwgYi9jcnlwdG8vbWQ1L2FzbS9tZDUtNTg2LnBsCmluZGV4IDc2YWMyMzUuLjZjYjY2YmIgMTAwNjQ0Ci0tLSBhL2NyeXB0by9tZDUvYXNtL21kNS01ODYucGwKKysrIGIvY3J5cHRvL21kNS9hc20vbWQ1LTU4Ni5wbApAQCAtNyw3ICs3LDggQEAKIAogJG5vcm1hbD0wOwogCi1wdXNoKEBJTkMsInBlcmxhc20iLCIuLi8uLi9wZXJsYXNtIik7CiskMCA9fiBtLyguKltcL1xcXSlbXlwvXFxdKyQvOyAkZGlyPSQxOworcHVzaChASU5DLCIke2Rpcn0iLCIke2Rpcn0uLi8uLi9wZXJsYXNtIik7CiByZXF1aXJlICJ4ODZhc20ucGwiOwogCiAmYXNtX2luaXQoJEFSR1ZbMF0sJDApOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL21kNS9hc20vbWQ1LWlhNjQuUyBiL2NyeXB0by9tZDUvYXNtL21kNS1pYTY0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY5ODE4YQotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9tZDUvYXNtL21kNS1pYTY0LlMKQEAgLTAsMCArMSw5OTIgQEAKKy8qIENvcHlyaWdodCAoYykgMjAwNSBIZXdsZXR0LVBhY2thcmQgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QLgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZword2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCitwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLworCisvLwlDb21tb24gcmVnaXN0ZXJzIGFyZSBhc3NpZ25lZCBhcyBmb2xsb3dzOgorLy8KKy8vCUNPTU1PTgorLy8KKy8vCXQwCQlDb25zdCBUYmwgUHRyCVRQdHIKKy8vCXQxCQlSb3VuZCBDb25zdGFudAlUUm91bmQKKy8vCXQ0CQlCbG9jayByZXNpZHVhbAlMZW5SZXNpZAorLy8JdDUJCVJlc2lkdWFsIERhdGEJRFRtcAorLy8KKy8vCXtpbixvdXR9MAlCbG9jayAwIEN5Y2xlCVJvdGF0ZU0wCisvLwl7aW4sb3V0fTEJQmxvY2sgVmFsdWUgMTIJTTEyCisvLwl7aW4sb3V0fTIJQmxvY2sgVmFsdWUgOAlNOAorLy8Je2luLG91dH0zCUJsb2NrIFZhbHVlIDQJTTQKKy8vCXtpbixvdXR9NAlCbG9jayBWYWx1ZSAwCU0wCisvLwl7aW4sb3V0fTUJQmxvY2sgMSBDeWNsZQlSb3RhdGVNMQorLy8Je2luLG91dH02CUJsb2NrIFZhbHVlIDEzCU0xMworLy8Je2luLG91dH03CUJsb2NrIFZhbHVlIDkJTTkKKy8vCXtpbixvdXR9OAlCbG9jayBWYWx1ZSA1CU01CisvLwl7aW4sb3V0fTkJQmxvY2sgVmFsdWUgMQlNMQorLy8Je2luLG91dH0xMAlCbG9jayAyIEN5Y2xlCVJvdGF0ZU0yCisvLwl7aW4sb3V0fTExCUJsb2NrIFZhbHVlIDE0CU0xNAorLy8Je2luLG91dH0xMglCbG9jayBWYWx1ZSAxMAlNMTAKKy8vCXtpbixvdXR9MTMJQmxvY2sgVmFsdWUgNglNNgorLy8Je2luLG91dH0xNAlCbG9jayBWYWx1ZSAyCU0yCisvLwl7aW4sb3V0fTE1CUJsb2NrIDMgQ3ljbGUJUm90YXRlTTMKKy8vCXtpbixvdXR9MTYJQmxvY2sgVmFsdWUgMTUJTTE1CisvLwl7aW4sb3V0fTE3CUJsb2NrIFZhbHVlIDExCU0xMQorLy8Je2luLG91dH0xOAlCbG9jayBWYWx1ZSA3CU03CisvLwl7aW4sb3V0fTE5CUJsb2NrIFZhbHVlIDMJTTMKKy8vCXtpbixvdXR9MjAJU2NyYXRjaAkJCVoKKy8vCXtpbixvdXR9MjEJU2NyYXRjaAkJCVkKKy8vCXtpbixvdXR9MjIJU2NyYXRjaAkJCVgKKy8vCXtpbixvdXR9MjMJU2NyYXRjaAkJCVcKKy8vCXtpbixvdXR9MjQJRGlnZXN0IEEJCUEKKy8vCXtpbixvdXR9MjUJRGlnZXN0IEIJCUIKKy8vCXtpbixvdXR9MjYJRGlnZXN0IEMJCUMKKy8vCXtpbixvdXR9MjcJRGlnZXN0IEQJCUQKKy8vCXtpbixvdXR9MjgJQWN0aXZlIERhdGEgUHRyCURQdHIKKy8vCWluMjgJCUR1bW15IFZhbHVlCQktCisvLwlvdXQyOAkJRHVtbXkgVmFsdWUJCS0KKy8vCWJ0MAkJCUNvcm91dGluZSBMaW5rCVFVSUNLX1JUTgorLy8KKy8vLwlUaGVzZSBwcmVkaWNhdGVzIGFyZSB1c2VkIGZvciBjb21wdXRpbmcgdGhlIHBhZGRpbmcgYmxvY2socykgYW5kCisvLy8JYXJlIHNoYXJlZCBiZXR3ZWVuIHRoZSBkcml2ZXIgYW5kIGRpZ2VzdCBjby1yb3V0aW5lcworLy8KKy8vCXB0MAkJCUV4dHJhIFBhZCBCbG9jawlwRXh0cmEKKy8vCXB0MQkJCUxvYWQgbmV4dCB3b3JkCXBMb2FkCisvLwlwdDIJCQlTa2lwIG5leHQgd29yZAlwU2tpcAorLy8JcHQzCQkJU2VhcmNoIGZvciBQYWQJcE5vUGFkCisvLwlwdDQJCQlQYWQgV29yZCAwCQlwUGFkMAorLy8JcHQ1CQkJUGFkIFdvcmQgMQkJcFBhZDEKKy8vCXB0NgkJCVBhZCBXb3JkIDIJCXBQYWQyCisvLwlwdDcJCQlQYWQgV29yZCAzCQlwUGFkMworCisjZGVmaW5lCURUbXAJCXIxOQorI2RlZmluZQlMZW5SZXNpZAlyMTgKKyNkZWZpbmUJUVVJQ0tfUlROCWI2CisjZGVmaW5lCVRQdHIJCXIxNAorI2RlZmluZQlUUm91bmQJCXIxNQorI2RlZmluZQlwRXh0cmEJCXA2CisjZGVmaW5lCXBMb2FkCQlwNworI2RlZmluZQlwTm9QYWQJCXA5CisjZGVmaW5lCXBQYWQwCQlwMTAKKyNkZWZpbmUJcFBhZDEJCXAxMQorI2RlZmluZQlwUGFkMgkJcDEyCisjZGVmaW5lCXBQYWQzCQlwMTMKKyNkZWZpbmUJcFNraXAJCXA4CisKKyNkZWZpbmUJQV8JCW91dDI0CisjZGVmaW5lCUJfCQlvdXQyNQorI2RlZmluZQlDXwkJb3V0MjYKKyNkZWZpbmUJRF8JCW91dDI3CisjZGVmaW5lCURQdHJfCQlvdXQyOAorI2RlZmluZQlNMF8JCW91dDQKKyNkZWZpbmUJTTFfCQlvdXQ5CisjZGVmaW5lCU0xMF8JCW91dDEyCisjZGVmaW5lCU0xMV8JCW91dDE3CisjZGVmaW5lCU0xMl8JCW91dDEKKyNkZWZpbmUJTTEzXwkJb3V0NgorI2RlZmluZQlNMTRfCQlvdXQxMQorI2RlZmluZQlNMTVfCQlvdXQxNgorI2RlZmluZQlNMl8JCW91dDE0CisjZGVmaW5lCU0zXwkJb3V0MTkKKyNkZWZpbmUJTTRfCQlvdXQzCisjZGVmaW5lCU01XwkJb3V0OAorI2RlZmluZQlNNl8JCW91dDEzCisjZGVmaW5lCU03XwkJb3V0MTgKKyNkZWZpbmUJTThfCQlvdXQyCisjZGVmaW5lCU05XwkJb3V0NworI2RlZmluZQlSb3RhdGVNMF8Jb3V0MAorI2RlZmluZQlSb3RhdGVNMV8Jb3V0NQorI2RlZmluZQlSb3RhdGVNMl8Jb3V0MTAKKyNkZWZpbmUJUm90YXRlTTNfCW91dDE1CisjZGVmaW5lCVdfCQlvdXQyMworI2RlZmluZQlYXwkJb3V0MjIKKyNkZWZpbmUJWV8JCW91dDIxCisjZGVmaW5lCVpfCQlvdXQyMAorCisjZGVmaW5lCUEJCWluMjQKKyNkZWZpbmUJQgkJaW4yNQorI2RlZmluZQlDCQlpbjI2CisjZGVmaW5lCUQJCWluMjcKKyNkZWZpbmUJRFB0cgkJaW4yOAorI2RlZmluZQlNMAkJaW40CisjZGVmaW5lCU0xCQlpbjkKKyNkZWZpbmUJTTEwCQlpbjEyCisjZGVmaW5lCU0xMQkJaW4xNworI2RlZmluZQlNMTIJCWluMQorI2RlZmluZQlNMTMJCWluNgorI2RlZmluZQlNMTQJCWluMTEKKyNkZWZpbmUJTTE1CQlpbjE2CisjZGVmaW5lCU0yCQlpbjE0CisjZGVmaW5lCU0zCQlpbjE5CisjZGVmaW5lCU00CQlpbjMKKyNkZWZpbmUJTTUJCWluOAorI2RlZmluZQlNNgkJaW4xMworI2RlZmluZQlNNwkJaW4xOAorI2RlZmluZQlNOAkJaW4yCisjZGVmaW5lCU05CQlpbjcKKyNkZWZpbmUJUm90YXRlTTAJaW4wCisjZGVmaW5lCVJvdGF0ZU0xCWluNQorI2RlZmluZQlSb3RhdGVNMglpbjEwCisjZGVmaW5lCVJvdGF0ZU0zCWluMTUKKyNkZWZpbmUJVwkJaW4yMworI2RlZmluZQlYCQlpbjIyCisjZGVmaW5lCVkJCWluMjEKKyNkZWZpbmUJWgkJaW4yMAorCisvKiByZWdpc3RlciBzdGFjayBjb25maWd1cmF0aW9uIGZvciBtZDVfYmxvY2tfYXNtX2RhdGFfb3JkZXIoKTogKi8KKyNkZWZpbmUJTUQ1X05JTlAJMworI2RlZmluZQlNRDVfTkxPQwkwCisjZGVmaW5lIE1ENV9OT1VUCTI5CisjZGVmaW5lIE1ENV9OUk9UCTAKKworLyogcmVnaXN0ZXIgc3RhY2sgY29uZmlndXJhdGlvbiBmb3IgaGVscGVyczogKi8KKyNkZWZpbmUJX05JTlBVVFMJTUQ1X05PVVQKKyNkZWZpbmUJX05MT0NBTFMJMAorI2RlZmluZSBfTk9VVFBVVAkwCisjZGVmaW5lCV9OUk9UQVRFCTI0CS8qIHRoaXMgbXVzdCBiZSA8PSBfTklOUFVUUyAqLworCisjaWYgZGVmaW5lZChfSFBVWF9TT1VSQ0UpICYmICFkZWZpbmVkKF9MUDY0KQorI2RlZmluZQlBRERQCWFkZHA0CisjZWxzZQorI2RlZmluZQlBRERQCWFkZAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9IUFVYX1NPVVJDRSkgfHwgZGVmaW5lZChCX0VORElBTikKKyNkZWZpbmUgSE9TVF9JU19CSUdfRU5ESUFOCisjZW5kaWYKKworLy8JTWFjcm9zIGZvciBnZXR0aW5nIHRoZSBsZWZ0IGFuZCByaWdodCBwb3J0aW9ucyBvZiBsaXR0bGUtZW5kaWFuIHdvcmRzCisKKyNkZWZpbmUJR0VUTFcoZHN0LCBzcmMsIGFsaWduKQlkZXAueiBkc3QgPSBzcmMsIDMyIC0gOCAqIGFsaWduLCA4ICogYWxpZ24KKyNkZWZpbmUJR0VUUlcoZHN0LCBzcmMsIGFsaWduKQlleHRyLnUgZHN0ID0gc3JjLCA4ICogYWxpZ24sIDMyIC0gOCAqIGFsaWduCisKKy8vCU1ENSBkcml2ZXIKKy8vCisvLwkJUmVhZHMgYW4gaW5wdXQgYmxvY2ssIHRoZW4gY2FsbHMgdGhlIGRpZ2VzdCBibG9jaworLy8JCXN1YnJvdXRpbmUgYW5kIGFkZHMgdGhlIHJlc3VsdHMgdG8gdGhlIGFjY3VtdWxhdGVkCisvLwkJZGlnZXN0LiAgSXQgYWxsb2NhdGVzIDMyIG91dHMgd2hpY2ggdGhlIHN1YnJvdXRpbmUKKy8vCQl1c2VzIGFzIGl0J3MgaW5wdXRzIGFuZCByb3RhdGluZworLy8JCXJlZ2lzdGVycy4gSW5pdGlhbGl6ZXMgdGhlIHJvdW5kIGNvbnN0YW50IHBvaW50ZXIgYW5kCisvLwkJdGFrZXMgY2FyZSBvZiBzYXZpbmcvcmVzdG9yaW5nIGFyLmxjCisvLworLy8vCUlOUFVUCisvLworLy8JaW4wCQlDb250ZXh0IFB0cgkJQ3R4UHRyMAorLy8JaW4xCQlJbnB1dCBEYXRhIFB0cgkJRFB0ckluCisvLwlpbjIJCUludGVncmFsIEJsb2NrcwkJQmxvY2tDb3VudAorLy8JcnAJCVJldHVybiBBZGRyZXNzCQktCisvLworLy8vCUNPREUKKy8vCisvLwl2MgkJSW5wdXQgQWxpZ24JCUluQWxpZ24KKy8vCXQwCQlTaGFyZWQgdy9kaWdlc3QJCS0KKy8vCXQxCQlTaGFyZWQgdy9kaWdlc3QJCS0KKy8vCXQyCQlTaGFyZWQgdy9kaWdlc3QJCS0KKy8vCXQzCQlTaGFyZWQgdy9kaWdlc3QJCS0KKy8vCXQ0CQlTaGFyZWQgdy9kaWdlc3QJCS0KKy8vCXQ1CQlTaGFyZWQgdy9kaWdlc3QJCS0KKy8vCXQ2CQlQRlMgU2F2ZQkJUEZTU2F2ZQorLy8JdDcJCWFyLmxjIFNhdmUJCUxDU2F2ZQorLy8JdDgJCVNhdmVkIFBSCQlQUlNhdmUKKy8vCXQ5CQkybmQgQ3R4UHRyCQlDdHhQdHIxCisvLwl0MTAJCVRhYmxlIEJhc2UJCUNUYWJsZQorLy8JdDExCQlUYWJsZVswXQkJQ1RhYmxlMAorLy8JdDEzCQlBY2N1bXVsYXRvciBBCQlBY2N1bUEKKy8vCXQxNAkJQWNjdW11bGF0b3IgQgkJQWNjdW1CCisvLwl0MTUJCUFjY3VtdWxhdG9yIEMJCUFjY3VtQworLy8JdDE2CQlBY2N1bXVsYXRvciBECQlBY2N1bUQKKy8vCXB0MAkJU2hhcmVkIHcvZGlnZXN0CQktCisvLwlwdDEJCVNoYXJlZCB3L2RpZ2VzdAkJLQorLy8JcHQyCQlTaGFyZWQgdy9kaWdlc3QJCS0KKy8vCXB0MwkJU2hhcmVkIHcvZGlnZXN0CQktCisvLwlwdDQJCVNoYXJlZCB3L2RpZ2VzdAkJLQorLy8JcHQ1CQlTaGFyZWQgdy9kaWdlc3QJCS0KKy8vCXB0NgkJU2hhcmVkIHcvZGlnZXN0CQktCisvLwlwdDcJCVNoYXJlZCB3L2RpZ2VzdAkJLQorLy8JcHQ4CQlOb3QgQWxpZ25lZAkJcE9mZgorLy8JcHQ4CQlCbG9ja3MgTGVmdAkJcEFnYWluCisKKyNkZWZpbmUJQWNjdW1BCQlyMjcKKyNkZWZpbmUJQWNjdW1CCQlyMjgKKyNkZWZpbmUJQWNjdW1DCQlyMjkKKyNkZWZpbmUJQWNjdW1ECQlyMzAKKyNkZWZpbmUJQ1RhYmxlCQlyMjQKKyNkZWZpbmUJQ1RhYmxlMAkJcjI1CisjZGVmaW5lCUN0eFB0cjAJCWluMAorI2RlZmluZQlDdHhQdHIxCQlyMjMKKyNkZWZpbmUJRFB0ckluCQlpbjEKKyNkZWZpbmUJQmxvY2tDb3VudAlpbjIKKyNkZWZpbmUJSW5BbGlnbgkJcjEwCisjZGVmaW5lCUxDU2F2ZQkJcjIxCisjZGVmaW5lCVBGU1NhdmUJCXIyMAorI2RlZmluZQlQUlNhdmUJCXIyMgorI2RlZmluZQlwQWdhaW4JCXA2MworI2RlZmluZQlwT2ZmCQlwNjMKKworCS50ZXh0CisKKy8qIG1kNV9ibG9ja19hc21fZGF0YV9vcmRlcihNRDVfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbnVtKQorCisgICAgIHdoZXJlOgorICAgICAgYzogYSBwb2ludGVyIHRvIGEgc3RydWN0dXJlIG9mIHRoaXMgdHlwZToKKworCSAgIHR5cGVkZWYgc3RydWN0IE1ENXN0YXRlX3N0CisJICAgICB7CisJICAgICAgIE1ENV9MT05HIEEsQixDLEQ7CisJICAgICAgIE1ENV9MT05HIE5sLE5oOworCSAgICAgICBNRDVfTE9ORyBkYXRhW01ENV9MQkxPQ0tdOworCSAgICAgICB1bnNpZ25lZCBpbnQgbnVtOworCSAgICAgfQorCSAgIE1ENV9DVFg7CisKKyAgICAgIGRhdGE6IGEgcG9pbnRlciB0byB0aGUgaW5wdXQgZGF0YSAobWF5IGJlIG1pc2FsaWduZWQpCisgICAgICBudW06ICB0aGUgbnVtYmVyIG9mIDE2LWJ5dGUgYmxvY2tzIHRvIGhhc2ggKGkuZS4sIHRoZSBsZW5ndGgKKyAgICAgICAgICAgIG9mIERBVEEgaXMgMTYqTlVNLgorCisgICAqLworCisJLnR5cGUJbWQ1X2Jsb2NrX2FzbV9kYXRhX29yZGVyLCBAZnVuY3Rpb24KKwkuZ2xvYmFsCW1kNV9ibG9ja19hc21fZGF0YV9vcmRlcgorCS5hbGlnbgkzMgorCS5wcm9jCW1kNV9ibG9ja19hc21fZGF0YV9vcmRlcgorbWQ1X2Jsb2NrX2FzbV9kYXRhX29yZGVyOgorLm1kNV9ibG9jazoKKwkucHJvbG9ndWUKK3sJLm1taQorCS5zYXZlCWFyLnBmcywgUEZTU2F2ZQorCWFsbG9jCVBGU1NhdmUgPSBhci5wZnMsIE1ENV9OSU5QLCBNRDVfTkxPQywgTUQ1X05PVVQsIE1ENV9OUk9UCisJQUREUAlDdHhQdHIxID0gOCwgQ3R4UHRyMAorCW1vdglDVGFibGUgPSBpcAorfQorewkubW1pCisJQUREUAlEUHRySW4gPSAwLCBEUHRySW4KKwlBRERQCUN0eFB0cjAgPSAwLCBDdHhQdHIwCisJLnNhdmUJYXIubGMsIExDU2F2ZQorCW1vdglMQ1NhdmUgPSBhci5sYworfQorOzsKK3sJLm1taQorCWFkZAlDVGFibGUgPSAubWQ1X3RibF9kYXRhX29yZGVyIy0ubWQ1X2Jsb2NrIywgQ1RhYmxlCisJYW5kCUluQWxpZ24gPSAweDMsIERQdHJJbgorfQorCit7CS5tbWkKKwlsZDQJQWNjdW1BID0gW0N0eFB0cjBdLCA0CisJbGQ0CUFjY3VtQyA9IFtDdHhQdHIxXSwgNAorCS5zYXZlIHByLCBQUlNhdmUKKwltb3YJUFJTYXZlID0gcHIKKwkuYm9keQorfQorOzsKK3sJLm1taQorCWxkNAlBY2N1bUIgPSBbQ3R4UHRyMF0KKwlsZDQJQWNjdW1EID0gW0N0eFB0cjFdCisJZGVwCURQdHJfID0gMCwgRFB0ckluLCAwLCAyCit9IDs7CisjaWZkZWYgSE9TVF9JU19CSUdfRU5ESUFOCisJcnVtCXBzci5iZTs7CS8vIHN3aXRjaCB0byBsaXR0bGUtZW5kaWFuCisjZW5kaWYKK3sJLm1tYgorCWxkNAlDVGFibGUwID0gW0NUYWJsZV0sIDQKKwljbXAubmUJcE9mZiwgcDAgPSAwLCBJbkFsaWduCisocE9mZikJYnIuY29uZC5zcG50Lm1hbnkgLm1kNV91bmFsaWduZWQKK30gOzsKKworLy8JVGhlIEZGIGxvYWQvY29tcHV0ZSBsb29wIHJvdGF0ZXMgdmFsdWVzIHRocmVlIHRpbWVzLCBzbyB0aGF0CisvLwlsb2FkaW5nIGludG8gTTEyIGhlcmUgcHJvZHVjZXMgdGhlIE0wIHZhbHVlLCBNMTMgLT4gTTEsIGV0Yy4KKworLm1kNV9ibG9ja19sb29wMDoKK3sJLm1taQorCWxkNAlNMTJfID0gW0RQdHJfXSwgNAorCW1vdglUUHRyID0gQ1RhYmxlCisJbW92CVRSb3VuZCA9IENUYWJsZTAKK30gOzsKK3sJLm1taQorCWxkNAlNMTNfID0gW0RQdHJfXSwgNAorCW1vdglBXyA9IEFjY3VtQQorCW1vdglCXyA9IEFjY3VtQgorfSA7OworewkubW1pCisJbGQ0CU0xNF8gPSBbRFB0cl9dLCA0CisJbW92CUNfID0gQWNjdW1DCisJbW92CURfID0gQWNjdW1ECit9IDs7Cit7CS5tbWIKKwlsZDQJTTE1XyA9IFtEUHRyX10sIDQKKwlhZGQJQmxvY2tDb3VudCA9IC0xLCBCbG9ja0NvdW50CisJYnIuY2FsbC5zcHRrLm1hbnkgUVVJQ0tfUlROID0gbWQ1X2RpZ2VzdF9ibG9jazAKK30gOzsKKworLy8JTm93LCB3ZSBhZGQgdGhlIG5ldyBkaWdlc3QgdmFsdWVzIGFuZCBkbyBzb21lIGNsZWFuLXVwCisvLwliZWZvcmUgY2hlY2tpbmcgaWYgdGhlcmUncyBhbm90aGVyIGZ1bGwgYmxvY2sgdG8gcHJvY2VzcworCit7CS5tbWkKKwlhZGQJQWNjdW1BID0gQWNjdW1BLCBBXworCWFkZAlBY2N1bUIgPSBBY2N1bUIsIEJfCisJY21wLm5lCXBBZ2FpbiwgcDAgPSAwLCBCbG9ja0NvdW50Cit9Cit7CS5taWIKKwlhZGQJQWNjdW1DID0gQWNjdW1DLCBDXworCWFkZAlBY2N1bUQgPSBBY2N1bUQsIERfCisocEFnYWluKSBici5jb25kLmRwdGsubWFueSAubWQ1X2Jsb2NrX2xvb3AwCit9IDs7CisKKy5tZDVfZXhpdDoKKyNpZmRlZiBIT1NUX0lTX0JJR19FTkRJQU4KKwlzdW0JcHNyLmJlOzsJLy8gc3dpdGNoIGJhY2sgdG8gYmlnLWVuZGlhbiBtb2RlCisjZW5kaWYKK3sJLm1taQorCXN0NAlbQ3R4UHRyMF0gPSBBY2N1bUIsIC00CisJc3Q0CVtDdHhQdHIxXSA9IEFjY3VtRCwgLTQKKwltb3YJcHIgPSBQUlNhdmUsIDB4MWZmZmYgOzsKK30KK3sJLm1taQorCXN0NAlbQ3R4UHRyMF0gPSBBY2N1bUEKKwlzdDQJW0N0eFB0cjFdID0gQWNjdW1DCisJbW92CWFyLmxjID0gTENTYXZlCit9IDs7Cit7CS5taWIKKwltb3YJYXIucGZzID0gUEZTU2F2ZQorCWJyLnJldC5zcHRrLmZldwlycAorfSA7OworCisjZGVmaW5lCU1ENVVOQUxJR05FRChvZmZzZXQpCQkJCQkJXAorLm1kNV9wcm9jZXNzIyNvZmZzZXQ6CQkJCQkJCVwKK3sJLm1pYiA7CQkJCQkJCQlcCisJbm9wCTB4MAk7CQkJCQkJXAorCUdFVFJXKERUbXAsIERUbXAsIG9mZnNldCkgOwkJCQkJXAorfSA7OwkJCQkJCQkJCVwKKy5tZDVfYmxvY2tfbG9vcCMjb2Zmc2V0OgkJCQkJCVwKK3sJLm1taSA7CQkJCQkJCQlcCisJbGQ0CVlfID0gW0RQdHJfXSwgNCA7CQkJCQlcCisJbW92CVRQdHIgPSBDVGFibGUgOwkJCQkJCVwKKwltb3YJVFJvdW5kID0gQ1RhYmxlMCA7CQkJCQlcCit9IDs7CQkJCQkJCQkJXAorewkubW1pIDsJCQkJCQkJCVwKKwlsZDQJTTEzXyA9IFtEUHRyX10sIDQgOwkJCQkJXAorCW1vdglBXyA9IEFjY3VtQSA7CQkJCQkJXAorCW1vdglCXyA9IEFjY3VtQiA7CQkJCQkJXAorfSA7OwkJCQkJCQkJCVwKK3sJLm1paSA7CQkJCQkJCQlcCisJbGQ0CU0xNF8gPSBbRFB0cl9dLCA0IDsJCQkJCVwKKwlHRVRMVyhXXywgWV8sIG9mZnNldCkgOwkJCQkJCVwKKwltb3YJQ18gPSBBY2N1bUMgOwkJCQkJCVwKK30JCQkJCQkJCQlcCit7CS5tbWkgOwkJCQkJCQkJXAorCW1vdglEXyA9IEFjY3VtRCA7OwkJCQkJCVwKKwlvcglNMTJfID0gV18sIERUbXAgOwkJCQkJXAorCUdFVFJXKERUbXAsIFlfLCBvZmZzZXQpIDsJCQkJCVwKK30JCQkJCQkJCQlcCit7CS5taWIgOwkJCQkJCQkJXAorCWxkNAlNMTVfID0gW0RQdHJfXSwgNCA7CQkJCQlcCisJYWRkCUJsb2NrQ291bnQgPSAtMSwgQmxvY2tDb3VudCA7CQkJCVwKKwlici5jYWxsLnNwdGsubWFueSBRVUlDS19SVE4gPSBtZDVfZGlnZXN0X2Jsb2NrIyNvZmZzZXQ7CQlcCit9IDs7CQkJCQkJCQkJXAorewkubW1pIDsJCQkJCQkJCVwKKwlhZGQJQWNjdW1BID0gQWNjdW1BLCBBXyA7CQkJCQlcCisJYWRkCUFjY3VtQiA9IEFjY3VtQiwgQl8gOwkJCQkJXAorCWNtcC5uZQlwQWdhaW4sIHAwID0gMCwgQmxvY2tDb3VudCA7CQkJCVwKK30JCQkJCQkJCQlcCit7CS5taWIgOwkJCQkJCQkJXAorCWFkZAlBY2N1bUMgPSBBY2N1bUMsIENfIDsJCQkJCVwKKwlhZGQJQWNjdW1EID0gQWNjdW1ELCBEXyA7CQkJCQlcCisocEFnYWluKSBici5jb25kLmRwdGsubWFueSAubWQ1X2Jsb2NrX2xvb3AjI29mZnNldCA7CQkJXAorfSA7OwkJCQkJCQkJCVwKK3sJLm1pYiA7CQkJCQkJCQlcCisJbm9wCTB4MCA7CQkJCQkJCVwKKwlub3AJMHgwIDsJCQkJCQkJXAorCWJyLmNvbmQuc3B0ay5tYW55IC5tZDVfZXhpdCA7CQkJCQlcCit9IDs7CisKKwkuYWxpZ24JMzIKKy5tZDVfdW5hbGlnbmVkOgorLy8KKy8vCUJlY2F1c2UgdmFyaWFibGUgc2hpZnRzIGFyZSBleHBlbnNpdmUsIHdlIHNwZWNpYWwgY2FzZSBlYWNoIG9mCisvLwl0aGUgZm91ciBhbGlnbmVtZW50cy4gSW4gcHJhY3RpY2UsIHRoaXMgd29uJ3QgaHVydCB0b28gbXVjaAorLy8Jc2luY2Ugb25seSBvbmUgd29ya2luZyBzZXQgb2YgY29kZSB3aWxsIGJlIGxvYWRlZC4KKy8vCit7CS5taWIKKwlsZDQJRFRtcCA9IFtEUHRyX10sIDQKKwljbXAuZXEJcE9mZiwgcDAgPSAxLCBJbkFsaWduCisocE9mZikJYnIuY29uZC5kcG50Lm1hbnkgLm1kNV9wcm9jZXNzMQorfSA7OworewkubWliCisJY21wLmVxCXBPZmYsIHAwID0gMiwgSW5BbGlnbgorCW5vcAkweDAKKyhwT2ZmKQlici5jb25kLmRwbnQubWFueSAubWQ1X3Byb2Nlc3MyCit9IDs7CisJTUQ1VU5BTElHTkVEKDMpCisJTUQ1VU5BTElHTkVEKDEpCisJTUQ1VU5BTElHTkVEKDIpCisKKwkuZW5kcCBtZDVfYmxvY2tfYXNtX2RhdGFfb3JkZXIKKworCisvLyBNRDUgUGVyZm9ybSB0aGUgRiBmdW5jdGlvbiBhbmQgbG9hZAorLy8KKy8vIFBhc3NlZCB0aGUgZmlyc3QgNCB3b3JkcyAoTTAgLSBNMykgYW5kIGluaXRpYWwgKEEsIEIsIEMsIEQpIHZhbHVlcywKKy8vIGNvbXB1dGVzIHRoZSBGRigpIHJvdW5kIG9mIGZ1bmN0aW9ucywgdGhlbiBicmFuY2hlcyB0byB0aGUgY29tbW9uCisvLyBkaWdlc3QgY29kZSB0byBmaW5pc2ggdXAgd2l0aCBHRygpLCBISCwgYW5kIElJKCkuCisvLworLy8gSU5QVVQKKy8vCisvLyBycCBSZXR1cm4gQWRkcmVzcyAtCisvLworLy8gQ09ERQorLy8KKy8vIHYwIFBGUyBiaXQgYnVja2V0IFBGUworLy8gdjEgTG9vcCBUcmlwIENvdW50IExUcmlwCisvLyBwdDAgTG9hZCBuZXh0IHdvcmQgcE1vcmUKKworLyogRm9yIEYgcm91bmQ6ICovCisjZGVmaW5lIExUcmlwCXI5CisjZGVmaW5lIFBGUwlyOAorI2RlZmluZSBwTW9yZQlwNgorCisvKiBGb3IgR0hJIHJvdW5kczogKi8KKyNkZWZpbmUgVAlyOQorI2RlZmluZSBVCXIxMAorI2RlZmluZSBWCXIxMQorCisjZGVmaW5lIENPTVBVVEUoYSwgYiwgcywgTSwgUikJCQlcCit7CQkJCQkJXAorCS5taWkgOwkJCQkJXAorCWxkNCBUUm91bmQgPSBbVFB0cl0sIDQgOwkJXAorCWRlcC56IFkgPSBaLCAzMiwgMzIgOzsJCQlcCisJc2hycCBaID0gWiwgWSwgNjQgLSBzIDsJCQlcCit9IDs7CQkJCQkJXAorewkJCQkJCVwKKwkubW1pIDsJCQkJCVwKKwlhZGQgYSA9IFosIGIgOwkJCQlcCisJbW92IFIgPSBNIDsJCQkJXAorCW5vcCAweDAgOwkJCQlcCit9IDs7CisKKyNkZWZpbmUgTE9PUChhLCBiLCBzLCBNLCBSLCBsYWJlbCkJCVwKK3sJLm1paSA7CQkJCQlcCisJbGQ0IFRSb3VuZCA9IFtUUHRyXSwgNCA7CQlcCisJZGVwLnogWSA9IFosIDMyLCAzMiA7OwkJCVwKKwlzaHJwIFogPSBaLCBZLCA2NCAtIHMgOwkJCVwKK30gOzsJCQkJCQlcCit7CS5taWIgOwkJCQkJXAorCWFkZCBhID0gWiwgYiA7CQkJCVwKKwltb3YgUiA9IE0gOwkJCQlcCisJYnIuY3RvcC5zcHRrLm1hbnkgbGFiZWwgOwkJXAorfSA7OworCisvLyBHKEIsIEMsIEQpID0gKEIgJiBEKSB8IChDICYgfkQpCisKKyNkZWZpbmUgRyhhLCBiLCBjLCBkLCBNKQkJCVwKK3sJLm1taSA7CQkJCQlcCisJYWRkIFogPSBNLCBUUm91bmQgOwkJCVwKKwlhbmQgWSA9IGIsIGQgOwkJCQlcCisJYW5kY20gWCA9IGMsIGQgOwkJCVwKK30gOzsJCQkJCQlcCit7CS5taWkgOwkJCQkJXAorCWFkZCBaID0gWiwgYSA7CQkJCVwKKwlvciBZID0gWSwgWCA7OwkJCQlcCisJYWRkIFogPSBaLCBZIDsJCQkJXAorfSA7OworCisvLyBIKEIsIEMsIEQpID0gQiBeIEMgXiBECisKKyNkZWZpbmUgSChhLCBiLCBjLCBkLCBNKQkJCVwKK3sJLm1taSA7CQkJCQlcCisJYWRkIFogPSBNLCBUUm91bmQgOwkJCVwKKwl4b3IgWSA9IGIsIGMgOwkJCQlcCisJbm9wIDB4MCA7CQkJCVwKK30gOzsJCQkJCQlcCit7CS5taWkgOwkJCQkJXAorCWFkZCBaID0gWiwgYSA7CQkJCVwKKwl4b3IgWSA9IFksIGQgOzsJCQkJXAorCWFkZCBaID0gWiwgWSA7CQkJCVwKK30gOzsKKworLy8gSShCLCBDLCBEKSA9IEMgXiAoQiB8IH5EKQorLy8KKy8vIEhvd2V2ZXIsIHNpbmNlIHdlIGhhdmUgYW4gYW5kY20gb3BlcmF0b3IsIHdlIHVzZSB0aGUgZmFjdCB0aGF0CisvLworLy8gWSBeIFogPT0gflkgXiB+WgorLy8KKy8vIHRvIHJld3JpdGUgdGhlIGV4cHJlc3Npb24gYXMKKy8vCisvLyBJKEIsIEMsIEQpID0gfkMgXiAofkIgJiBEKQorCisjZGVmaW5lIEkoYSwgYiwgYywgZCwgTSkJCQlcCit7CS5tbWkgOwkJCQkJXAorCWFkZCBaID0gTSwgVFJvdW5kIDsJCQlcCisJYW5kY20gWSA9IGQsIGIgOwkJCVwKKwlhbmRjbSBYID0gLTEsIGMgOwkJCVwKK30gOzsJCQkJCQlcCit7CS5taWkgOwkJCQkJXAorCWFkZCBaID0gWiwgYSA7CQkJCVwKKwl4b3IgWSA9IFksIFggOzsJCQkJXAorCWFkZCBaID0gWiwgWSA7CQkJCVwKK30gOzsKKworI2RlZmluZSBHRzQobGFiZWwpCQkJCVwKKwlHKEEsIEIsIEMsIEQsIE0wKQkJCVwKKwlDT01QVVRFKEEsIEIsIDUsIE0wLCBSb3RhdGVNMCkJCVwKKwlHKEQsIEEsIEIsIEMsIE0xKQkJCVwKKwlDT01QVVRFKEQsIEEsIDksIE0xLCBSb3RhdGVNMSkJCVwKKwlHKEMsIEQsIEEsIEIsIE0yKQkJCVwKKwlDT01QVVRFKEMsIEQsIDE0LCBNMiwgUm90YXRlTTIpCQlcCisJRyhCLCBDLCBELCBBLCBNMykJCQlcCisJTE9PUChCLCBDLCAyMCwgTTMsIFJvdGF0ZU0zLCBsYWJlbCkKKworI2RlZmluZSBISDQobGFiZWwpCQkJCVwKKwlIKEEsIEIsIEMsIEQsIE0wKQkJCVwKKwlDT01QVVRFKEEsIEIsIDQsIE0wLCBSb3RhdGVNMCkJCVwKKwlIKEQsIEEsIEIsIEMsIE0xKQkJCVwKKwlDT01QVVRFKEQsIEEsIDExLCBNMSwgUm90YXRlTTEpCQlcCisJSChDLCBELCBBLCBCLCBNMikJCQlcCisJQ09NUFVURShDLCBELCAxNiwgTTIsIFJvdGF0ZU0yKQkJXAorCUgoQiwgQywgRCwgQSwgTTMpCQkJXAorCUxPT1AoQiwgQywgMjMsIE0zLCBSb3RhdGVNMywgbGFiZWwpCisKKyNkZWZpbmUgSUk0KGxhYmVsKQkJCQlcCisJSShBLCBCLCBDLCBELCBNMCkJCQlcCisJQ09NUFVURShBLCBCLCA2LCBNMCwgUm90YXRlTTApCQlcCisJSShELCBBLCBCLCBDLCBNMSkJCQlcCisJQ09NUFVURShELCBBLCAxMCwgTTEsIFJvdGF0ZU0xKQkJXAorCUkoQywgRCwgQSwgQiwgTTIpCQkJXAorCUNPTVBVVEUoQywgRCwgMTUsIE0yLCBSb3RhdGVNMikJCVwKKwlJKEIsIEMsIEQsIEEsIE0zKQkJCVwKKwlMT09QKEIsIEMsIDIxLCBNMywgUm90YXRlTTMsIGxhYmVsKQorCisjZGVmaW5lIEZGTE9BRChhLCBiLCBjLCBkLCBNLCBOLCBzKQkJXAorewkubWlpIDsJCQkJCVwKKyhwTW9yZSkgbGQ0IE4gPSBbRFB0cl0sIDQgOwkJCVwKKwlhZGQgWiA9IE0sIFRSb3VuZCA7CQkJXAorCWFuZCBZID0gYywgYiA7CQkJCVwKK30JCQkJCQlcCit7CS5tbWkgOwkJCQkJXAorCWFuZGNtIFggPSBkLCBiIDs7CQkJXAorCWFkZCBaID0gWiwgYSA7CQkJCVwKKwlvciBZID0gWSwgWCA7CQkJCVwKK30gOzsJCQkJCQlcCit7CS5taWkgOwkJCQkJXAorCWxkNCBUUm91bmQgPSBbVFB0cl0sIDQgOwkJXAorCWFkZCBaID0gWiwgWSA7OwkJCQlcCisJZGVwLnogWSA9IFosIDMyLCAzMiA7CQkJXAorfSA7OwkJCQkJCVwKK3sJLm1paSA7CQkJCQlcCisJbm9wIDB4MCA7CQkJCVwKKwlzaHJwIFogPSBaLCBZLCA2NCAtIHMgOzsJCVwKKwlhZGQgYSA9IFosIGIgOwkJCQlcCit9IDs7CisKKyNkZWZpbmUgRkZMT09QKGEsIGIsIGMsIGQsIE0sIE4sIHMsIGRlc3QpCVwKK3sJLm1paSA7CQkJCQlcCisocE1vcmUpCWxkNCBOID0gW0RQdHJdLCA0IDsJCQlcCisJYWRkIFogPSBNLCBUUm91bmQgOwkJCVwKKwlhbmQgWSA9IGMsIGIgOwkJCQlcCit9CQkJCQkJXAorewkubW1pIDsJCQkJCVwKKwlhbmRjbSBYID0gZCwgYiA7OwkJCVwKKwlhZGQgWiA9IFosIGEgOwkJCQlcCisJb3IgWSA9IFksIFggOwkJCQlcCit9IDs7CQkJCQkJXAorewkubWlpIDsJCQkJCVwKKwlsZDQgVFJvdW5kID0gW1RQdHJdLCA0IDsJCVwKKwlhZGQgWiA9IFosIFkgOzsJCQkJXAorCWRlcC56IFkgPSBaLCAzMiwgMzIgOwkJCVwKK30gOzsJCQkJCQlcCit7CS5taWkgOwkJCQkJXAorCW5vcCAweDAgOwkJCQlcCisJc2hycCBaID0gWiwgWSwgNjQgLSBzIDs7CQlcCisJYWRkIGEgPSBaLCBiIDsJCQkJXAorfQkJCQkJCVwKK3sJLm1pYiA7CQkJCQlcCisJY21wLm5lIHBNb3JlLCBwMCA9IDAsIExUcmlwIDsJCVwKKwlhZGQgTFRyaXAgPSAtMSwgTFRyaXAgOwkJCVwKKwlici5jdG9wLmRwdGsubWFueSBkZXN0IDsJCVwKK30gOzsKKworCS50eXBlIG1kNV9kaWdlc3RfYmxvY2swLCBAZnVuY3Rpb24KKwkuYWxpZ24gMzIKKworCS5wcm9jIG1kNV9kaWdlc3RfYmxvY2swCisJLnByb2xvZ3VlCittZDVfZGlnZXN0X2Jsb2NrMDoKKwkuYWx0cnAgUVVJQ0tfUlROCisJLmJvZHkKK3sJLm1taQorCWFsbG9jIFBGUyA9IGFyLnBmcywgX05JTlBVVFMsIF9OTE9DQUxTLCBfTk9VVFBVVCwgX05ST1RBVEUKKwltb3YgTFRyaXAgPSAyCisJbW92IGFyLmxjID0gMworfSA7OworewkubWlpCisJY21wLmVxIHBNb3JlLCBwMCA9IHIwLCByMAorCW1vdiBhci5lYyA9IDAKKwlub3AgMHgwCit9IDs7CisKKy5tZDVfRkZfcm91bmQwOgorCUZGTE9BRChBLCBCLCBDLCBELCBNMTIsIFJvdGF0ZU0wLCA3KQorCUZGTE9BRChELCBBLCBCLCBDLCBNMTMsIFJvdGF0ZU0xLCAxMikKKwlGRkxPQUQoQywgRCwgQSwgQiwgTTE0LCBSb3RhdGVNMiwgMTcpCisJRkZMT09QKEIsIEMsIEQsIEEsIE0xNSwgUm90YXRlTTMsIDIyLCAubWQ1X0ZGX3JvdW5kMCkKKwkvLworCS8vICEhISBGYWxsIHRocm91Z2ggdG8gbWQ1X2RpZ2VzdF9HSEkKKwkvLworCS5lbmRwIG1kNV9kaWdlc3RfYmxvY2swCisKKwkudHlwZSBtZDVfZGlnZXN0X0dISSwgQGZ1bmN0aW9uCisJLmFsaWduIDMyCisKKwkucHJvYyBtZDVfZGlnZXN0X0dISQorCS5wcm9sb2d1ZQorCS5yZWdzdGsgX05JTlBVVFMsIF9OTE9DQUxTLCBfTk9VVFBVVCwgX05ST1RBVEUKK21kNV9kaWdlc3RfR0hJOgorCS5hbHRycCBRVUlDS19SVE4KKwkuYm9keQorLy8KKy8vIFRoZSBmb2xsb3dpbmcgc2VxdWVuY2Ugc2h1ZmZsZXMgdGhlIGJsb2NrIGNvdW5zdGFudHMgcm91bmQgZm9yIHRoZQorLy8gbmV4dCByb3VuZDoKKy8vCisvLyAwIDEgMiAzIDQgNSA2IDcgOCA5IDEwIDExIDEyIDEzIDE0IDE1CisvLyAxIDYgMTEgMCA1IDEwIDE0IDQgOSAxNCAzIDggMTMgMiA3IDEyCisvLworewkubW1pCisJbW92IFogPSBNMAorCW1vdiBZID0gTTE1CisJbW92IGFyLmxjID0gMworfQorewkubW1pCisJbW92IFggPSBNMgorCW1vdiBXID0gTTkKKwltb3YgViA9IE00Cit9IDs7CisKK3sJLm1taQorCW1vdiBNMCA9IE0xCisJbW92IE0xNSA9IE0xMgorCW1vdiBhci5lYyA9IDEKK30KK3sJLm1taQorCW1vdiBNMiA9IE0xMQorCW1vdiBNOSA9IE0xNAorCW1vdiBNNCA9IE01Cit9IDs7CisKK3sJLm1taQorCW1vdiBNMSA9IE02CisJbW92IE0xMiA9IE0xMworCW1vdiBVID0gTTMKK30KK3sJLm1taQorCW1vdiBNMTEgPSBNOAorCW1vdiBNMTQgPSBNNworCW1vdiBNNSA9IE0xMAorfSA7OworCit7CS5tbWkKKwltb3YgTTYgPSBZCisJbW92IE0xMyA9IFgKKwltb3YgTTMgPSBaCit9Cit7CS5tbWkKKwltb3YgTTggPSBXCisJbW92IE03ID0gVgorCW1vdiBNMTAgPSBVCit9IDs7CisKKy5tZDVfR0dfcm91bmQ6CisJR0c0KC5tZDVfR0dfcm91bmQpCisKKy8vIFRoZSBmb2xsb3dpbmcgc2VxdWVuY2Ugc2h1ZmZsZXMgdGhlIGJsb2NrIGNvbnN0YW50cyByb3VuZCBmb3IgdGhlCisvLyBuZXh0IHJvdW5kOgorLy8KKy8vIDEgNiAxMSAwIDUgMTAgMTQgNCA5IDE0IDMgOCAxMyAyIDcgMTIKKy8vIDUgOCAxMSAxNCAxIDQgNyAxMCAxMyAwIDMgNiA5IDEyIDE1IDIKKworewkubW1pCisJbW92IFogPSBNMAorCW1vdiBZID0gTTEKKwltb3YgYXIubGMgPSAzCit9Cit7CS5tbWkKKwltb3YgWCA9IE0zCisJbW92IFcgPSBNNQorCW1vdiBWID0gTTYKK30gOzsKKworewkubW1pCisJbW92IE0wID0gTTQKKwltb3YgTTEgPSBNMTEKKwltb3YgYXIuZWMgPSAxCit9Cit7CS5tbWkKKwltb3YgTTMgPSBNOQorCW1vdiBVID0gTTgKKwltb3YgVCA9IE0xMworfSA7OworCit7CS5tbWkKKwltb3YgTTQgPSBaCisJbW92IE0xMSA9IFkKKwltb3YgTTUgPSBNNworfQorewkubW1pCisJbW92IE02ID0gTTE0CisJbW92IE04ID0gTTEyCisJbW92IE0xMyA9IE0xNQorfSA7OworCit7CS5tbWkKKwltb3YgTTcgPSBXCisJbW92IE0xNCA9IFYKKwlub3AgMHgwCit9Cit7CS5tbWkKKwltb3YgTTkgPSBYCisJbW92IE0xMiA9IFUKKwltb3YgTTE1ID0gVAorfSA7OworCisubWQ1X0hIX3JvdW5kOgorCUhINCgubWQ1X0hIX3JvdW5kKQorCisvLyBUaGUgZm9sbG93aW5nIHNlcXVlbmNlIHNodWZmbGVzIHRoZSBibG9jayBjb25zdGFudHMgcm91bmQgZm9yIHRoZQorLy8gbmV4dCByb3VuZDoKKy8vCisvLyA1IDggMTEgMTQgMSA0IDcgMTAgMTMgMCAzIDYgOSAxMiAxNSAyCisvLyAwIDcgMTQgNSAxMiAzIDEwIDEgOCAxNSA2IDEzIDQgMTEgMiA5CisKK3sJLm1taQorCW1vdiBaID0gTTAKKwltb3YgWSA9IE0xNQorCW1vdiBhci5sYyA9IDMKK30KK3sJLm1taQorCW1vdiBYID0gTTEwCisJbW92IFcgPSBNMQorCW1vdiBWID0gTTQKK30gOzsKKworewkubW1pCisJbW92IE0wID0gTTkKKwltb3YgTTE1ID0gTTEyCisJbW92IGFyLmVjID0gMQorfQorewkubW1pCisJbW92IE0xMCA9IE0xMQorCW1vdiBNMSA9IE02CisJbW92IE00ID0gTTEzCit9IDs7CisKK3sJLm1taQorCW1vdiBNOSA9IE0xNAorCW1vdiBNMTIgPSBNNQorCW1vdiBVID0gTTMKK30KK3sJLm1taQorCW1vdiBNMTEgPSBNOAorCW1vdiBNNiA9IE03CisJbW92IE0xMyA9IE0yCit9IDs7CisKK3sJLm1taQorCW1vdiBNMTQgPSBZCisJbW92IE01ID0gWAorCW1vdiBNMyA9IFoKK30KK3sJLm1taQorCW1vdiBNOCA9IFcKKwltb3YgTTcgPSBWCisJbW92IE0yID0gVQorfSA7OworCisubWQ1X0lJX3JvdW5kOgorCUlJNCgubWQ1X0lJX3JvdW5kKQorCit7CS5taWIKKwlub3AgMHgwCisJbm9wIDB4MAorCWJyLnJldC5zcHRrLm1hbnkgUVVJQ0tfUlROCit9IDs7CisKKwkuZW5kcCBtZDVfZGlnZXN0X0dISQorCisjZGVmaW5lIEZGTE9BRFUoYSwgYiwgYywgZCwgTSwgUCwgTiwgcywgb2Zmc2V0KQlcCit7CS5taWkgOwkJCQkJXAorKHBNb3JlKSBsZDQgTiA9IFtEUHRyXSwgNCA7CQkJXAorCWFkZCBaID0gTSwgVFJvdW5kIDsJCQlcCisJYW5kIFkgPSBjLCBiIDsJCQkJXAorfQkJCQkJCVwKK3sJLm1taSA7CQkJCQlcCisJYW5kY20gWCA9IGQsIGIgOzsJCQlcCisJYWRkIFogPSBaLCBhIDsJCQkJXAorCW9yIFkgPSBZLCBYIDsJCQkJXAorfSA7OwkJCQkJCVwKK3sJLm1paSA7CQkJCQlcCisJbGQ0IFRSb3VuZCA9IFtUUHRyXSwgNCA7CQlcCisJR0VUTFcoVywgUCwgb2Zmc2V0KSA7CQkJXAorCWFkZCBaID0gWiwgWSA7CQkJCVwKK30gOzsJCQkJCQlcCit7CS5taWkgOwkJCQkJXAorCW9yIFcgPSBXLCBEVG1wIDsJCQlcCisJZGVwLnogWSA9IFosIDMyLCAzMiA7OwkJCVwKKwlzaHJwIFogPSBaLCBZLCA2NCAtIHMgOwkJCVwKK30gOzsJCQkJCQlcCit7CS5taWkgOwkJCQkJXAorCWFkZCBhID0gWiwgYiA7CQkJCVwKKwlHRVRSVyhEVG1wLCBQLCBvZmZzZXQpIDsJCVwKKwltb3YgUCA9IFcgOwkJCQlcCit9IDs7CisKKyNkZWZpbmUgRkZMT09QVShhLCBiLCBjLCBkLCBNLCBQLCBOLCBzLCBvZmZzZXQpCQlcCit7CS5taWkgOwkJCQkJCVwKKyhwTW9yZSkgbGQ0IE4gPSBbRFB0cl0sIDQgOwkJCQlcCisJYWRkIFogPSBNLCBUUm91bmQgOwkJCQlcCisJYW5kIFkgPSBjLCBiIDsJCQkJCVwKK30JCQkJCQkJXAorewkubW1pIDsJCQkJCQlcCisJYW5kY20gWCA9IGQsIGIgOzsJCQkJXAorCWFkZCBaID0gWiwgYSA7CQkJCQlcCisJb3IgWSA9IFksIFggOwkJCQkJXAorfSA7OwkJCQkJCQlcCit7CS5taWkgOwkJCQkJCVwKKwlsZDQgVFJvdW5kID0gW1RQdHJdLCA0IDsJCQlcCisocE1vcmUpIEdFVExXKFcsIFAsIG9mZnNldCkgCTsJCQlcCisJYWRkIFogPSBaLCBZIDsJCQkJCVwKK30gOzsJCQkJCQkJXAorewkubWlpIDsJCQkJCQlcCisocE1vcmUpIG9yIFcgPSBXLCBEVG1wIDsJCQkJXAorCWRlcC56IFkgPSBaLCAzMiwgMzIgOzsJCQkJXAorCXNocnAgWiA9IFosIFksIDY0IC0gcyA7CQkJCVwKK30gOzsJCQkJCQkJXAorewkubWlpIDsJCQkJCQlcCisJYWRkIGEgPSBaLCBiIDsJCQkJCVwKKyhwTW9yZSkgR0VUUlcoRFRtcCwgUCwgb2Zmc2V0KSAJOwkJCVwKKyhwTW9yZSkgbW92IFAgPSBXIDsJCQkJCVwKK30JCQkJCQkJXAorewkubWliIDsJCQkJCQlcCisJY21wLm5lIHBNb3JlLCBwMCA9IDAsIExUcmlwIDsJCQlcCisJYWRkIExUcmlwID0gLTEsIExUcmlwIDsJCQkJXAorCWJyLmN0b3Auc3B0ay5tYW55IC5tZDVfRkZfcm91bmQjI29mZnNldCA7CVwKK30gOzsKKworI2RlZmluZSBNRDVGQkxPQ0sob2Zmc2V0KQkJCQkJCVwKKwkudHlwZSBtZDVfZGlnZXN0X2Jsb2NrIyNvZmZzZXQsIEBmdW5jdGlvbiA7CQkJXAorCQkJCQkJCQkJXAorCS5hbGlnbiAzMiA7CQkJCQkJCVwKKwkucHJvYyBtZDVfZGlnZXN0X2Jsb2NrIyNvZmZzZXQgOwkJCQlcCisJLnByb2xvZ3VlIDsJCQkJCQkJXAorCS5hbHRycCBRVUlDS19SVE4gOwkJCQkJCVwKKwkuYm9keSA7CQkJCQkJCQlcCittZDVfZGlnZXN0X2Jsb2NrIyNvZmZzZXQ6CQkJCQkJXAorewkubW1pIDsJCQkJCQkJCVwKKwlhbGxvYyBQRlMgPSBhci5wZnMsIF9OSU5QVVRTLCBfTkxPQ0FMUywgX05PVVRQVVQsIF9OUk9UQVRFIDsJXAorCW1vdiBMVHJpcCA9IDIgOwkJCQkJCQlcCisJbW92IGFyLmxjID0gMyA7CQkJCQkJCVwKK30gOzsJCQkJCQkJCQlcCit7CS5taWkgOwkJCQkJCQkJXAorCWNtcC5lcSBwTW9yZSwgcDAgPSByMCwgcjAgOwkJCQkJXAorCW1vdiBhci5lYyA9IDAgOwkJCQkJCQlcCisJbm9wIDB4MCA7CQkJCQkJCVwKK30gOzsJCQkJCQkJCQlcCisJCQkJCQkJCQlcCisJLnByZWQucmVsICJtdXRleCIsIHBMb2FkLCBwU2tpcCA7CQkJCVwKKy5tZDVfRkZfcm91bmQjI29mZnNldDoJCQkJCQkJXAorCUZGTE9BRFUoQSwgQiwgQywgRCwgTTEyLCBNMTMsIFJvdGF0ZU0wLCA3LCBvZmZzZXQpCQlcCisJRkZMT0FEVShELCBBLCBCLCBDLCBNMTMsIE0xNCwgUm90YXRlTTEsIDEyLCBvZmZzZXQpCQlcCisJRkZMT0FEVShDLCBELCBBLCBCLCBNMTQsIE0xNSwgUm90YXRlTTIsIDE3LCBvZmZzZXQpCQlcCisJRkZMT09QVShCLCBDLCBELCBBLCBNMTUsIFJvdGF0ZU0wLCBSb3RhdGVNMywgMjIsIG9mZnNldCkJXAorCQkJCQkJCQkJXAorewkubWliIDsJCQkJCQkJCVwKKwlub3AgMHgwIDsJCQkJCQkJXAorCW5vcCAweDAgOwkJCQkJCQlcCisJYnIuY29uZC5zcHRrLm1hbnkgbWQ1X2RpZ2VzdF9HSEkgOwkJCQlcCit9IDs7CQkJCQkJCQkJXAorCS5lbmRwIG1kNWRpZ2VzdEJsb2NrICMjIG9mZnNldAorCitNRDVGQkxPQ0soMSkKK01ENUZCTE9DSygyKQorTUQ1RkJMT0NLKDMpCisKKwkuYWxpZ24gNjQKKwkudHlwZSBtZDVfY29uc3RhbnRzLCBAb2JqZWN0CittZDVfY29uc3RhbnRzOgorLm1kNV90YmxfZGF0YV9vcmRlcjoJCQkvLyBUbyBlbnN1cmUgbGl0dGxlLWVuZGlhbiBkYXRhCisJCQkJCS8vIG9yZGVyLCBjb2RlIGFzIGJ5dGVzLgorCWRhdGExIDB4NzgsIDB4YTQsIDB4NmEsIDB4ZDcJLy8gICAgIDAKKwlkYXRhMSAweDU2LCAweGI3LCAweGM3LCAweGU4CS8vICAgICAxCisJZGF0YTEgMHhkYiwgMHg3MCwgMHgyMCwgMHgyNAkvLyAgICAgMgorCWRhdGExIDB4ZWUsIDB4Y2UsIDB4YmQsIDB4YzEJLy8gICAgIDMKKwlkYXRhMSAweGFmLCAweDBmLCAweDdjLCAweGY1CS8vICAgICA0CisJZGF0YTEgMHgyYSwgMHhjNiwgMHg4NywgMHg0NwkvLyAgICAgNQorCWRhdGExIDB4MTMsIDB4NDYsIDB4MzAsIDB4YTgJLy8gICAgIDYKKwlkYXRhMSAweDAxLCAweDk1LCAweDQ2LCAweGZkCS8vICAgICA3CisJZGF0YTEgMHhkOCwgMHg5OCwgMHg4MCwgMHg2OQkvLyAgICAgOAorCWRhdGExIDB4YWYsIDB4ZjcsIDB4NDQsIDB4OGIJLy8gICAgIDkKKwlkYXRhMSAweGIxLCAweDViLCAweGZmLCAweGZmCS8vICAgIDEwCisJZGF0YTEgMHhiZSwgMHhkNywgMHg1YywgMHg4OQkvLyAgICAxMQorCWRhdGExIDB4MjIsIDB4MTEsIDB4OTAsIDB4NmIJLy8gICAgMTIKKwlkYXRhMSAweDkzLCAweDcxLCAweDk4LCAweGZkCS8vICAgIDEzCisJZGF0YTEgMHg4ZSwgMHg0MywgMHg3OSwgMHhhNgkvLyAgICAxNAorCWRhdGExIDB4MjEsIDB4MDgsIDB4YjQsIDB4NDkJLy8gICAgMTUKKwlkYXRhMSAweDYyLCAweDI1LCAweDFlLCAweGY2CS8vICAgIDE2CisJZGF0YTEgMHg0MCwgMHhiMywgMHg0MCwgMHhjMAkvLyAgICAxNworCWRhdGExIDB4NTEsIDB4NWEsIDB4NWUsIDB4MjYJLy8gICAgMTgKKwlkYXRhMSAweGFhLCAweGM3LCAweGI2LCAweGU5CS8vICAgIDE5CisJZGF0YTEgMHg1ZCwgMHgxMCwgMHgyZiwgMHhkNgkvLyAgICAyMAorCWRhdGExIDB4NTMsIDB4MTQsIDB4NDQsIDB4MDIJLy8gICAgMjEKKwlkYXRhMSAweDgxLCAweGU2LCAweGExLCAweGQ4CS8vICAgIDIyCisJZGF0YTEgMHhjOCwgMHhmYiwgMHhkMywgMHhlNwkvLyAgICAyMworCWRhdGExIDB4ZTYsIDB4Y2QsIDB4ZTEsIDB4MjEJLy8gICAgMjQKKwlkYXRhMSAweGQ2LCAweDA3LCAweDM3LCAweGMzCS8vICAgIDI1CisJZGF0YTEgMHg4NywgMHgwZCwgMHhkNSwgMHhmNAkvLyAgICAyNgorCWRhdGExIDB4ZWQsIDB4MTQsIDB4NWEsIDB4NDUJLy8gICAgMjcKKwlkYXRhMSAweDA1LCAweGU5LCAweGUzLCAweGE5CS8vICAgIDI4CisJZGF0YTEgMHhmOCwgMHhhMywgMHhlZiwgMHhmYwkvLyAgICAyOQorCWRhdGExIDB4ZDksIDB4MDIsIDB4NmYsIDB4NjcJLy8gICAgMzAKKwlkYXRhMSAweDhhLCAweDRjLCAweDJhLCAweDhkCS8vICAgIDMxCisJZGF0YTEgMHg0MiwgMHgzOSwgMHhmYSwgMHhmZgkvLyAgICAzMgorCWRhdGExIDB4ODEsIDB4ZjYsIDB4NzEsIDB4ODcJLy8gICAgMzMKKwlkYXRhMSAweDIyLCAweDYxLCAweDlkLCAweDZkCS8vICAgIDM0CisJZGF0YTEgMHgwYywgMHgzOCwgMHhlNSwgMHhmZAkvLyAgICAzNQorCWRhdGExIDB4NDQsIDB4ZWEsIDB4YmUsIDB4YTQJLy8gICAgMzYKKwlkYXRhMSAweGE5LCAweGNmLCAweGRlLCAweDRiCS8vICAgIDM3CisJZGF0YTEgMHg2MCwgMHg0YiwgMHhiYiwgMHhmNgkvLyAgICAzOAorCWRhdGExIDB4NzAsIDB4YmMsIDB4YmYsIDB4YmUJLy8gICAgMzkKKwlkYXRhMSAweGM2LCAweDdlLCAweDliLCAweDI4CS8vICAgIDQwCisJZGF0YTEgMHhmYSwgMHgyNywgMHhhMSwgMHhlYQkvLyAgICA0MQorCWRhdGExIDB4ODUsIDB4MzAsIDB4ZWYsIDB4ZDQJLy8gICAgNDIKKwlkYXRhMSAweDA1LCAweDFkLCAweDg4LCAweDA0CS8vICAgIDQzCisJZGF0YTEgMHgzOSwgMHhkMCwgMHhkNCwgMHhkOQkvLyAgICA0NAorCWRhdGExIDB4ZTUsIDB4OTksIDB4ZGIsIDB4ZTYJLy8gICAgNDUKKwlkYXRhMSAweGY4LCAweDdjLCAweGEyLCAweDFmCS8vICAgIDQ2CisJZGF0YTEgMHg2NSwgMHg1NiwgMHhhYywgMHhjNAkvLyAgICA0NworCWRhdGExIDB4NDQsIDB4MjIsIDB4MjksIDB4ZjQJLy8gICAgNDgKKwlkYXRhMSAweDk3LCAweGZmLCAweDJhLCAweDQzCS8vICAgIDQ5CisJZGF0YTEgMHhhNywgMHgyMywgMHg5NCwgMHhhYgkvLyAgICA1MAorCWRhdGExIDB4MzksIDB4YTAsIDB4OTMsIDB4ZmMJLy8gICAgNTEKKwlkYXRhMSAweGMzLCAweDU5LCAweDViLCAweDY1CS8vICAgIDUyCisJZGF0YTEgMHg5MiwgMHhjYywgMHgwYywgMHg4ZgkvLyAgICA1MworCWRhdGExIDB4N2QsIDB4ZjQsIDB4ZWYsIDB4ZmYJLy8gICAgNTQKKwlkYXRhMSAweGQxLCAweDVkLCAweDg0LCAweDg1CS8vICAgIDU1CisJZGF0YTEgMHg0ZiwgMHg3ZSwgMHhhOCwgMHg2ZgkvLyAgICA1NgorCWRhdGExIDB4ZTAsIDB4ZTYsIDB4MmMsIDB4ZmUJLy8gICAgNTcKKwlkYXRhMSAweDE0LCAweDQzLCAweDAxLCAweGEzCS8vICAgIDU4CisJZGF0YTEgMHhhMSwgMHgxMSwgMHgwOCwgMHg0ZQkvLyAgICA1OQorCWRhdGExIDB4ODIsIDB4N2UsIDB4NTMsIDB4ZjcJLy8gICAgNjAKKwlkYXRhMSAweDM1LCAweGYyLCAweDNhLCAweGJkCS8vICAgIDYxCisJZGF0YTEgMHhiYiwgMHhkMiwgMHhkNywgMHgyYQkvLyAgICA2MgorCWRhdGExIDB4OTEsIDB4ZDMsIDB4ODYsIDB4ZWIJLy8gICAgNjMKKy5zaXplCW1kNV9jb25zdGFudHMjLDY0KjQKZGlmZiAtLWdpdCBhL2NyeXB0by9tZDUvYXNtL21kNS14ODZfNjQucGwgYi9jcnlwdG8vbWQ1L2FzbS9tZDUteDg2XzY0LnBsCmluZGV4IDA1ZDA0MGYuLjg2Nzg4NTQgMTAwNzU1Ci0tLSBhL2NyeXB0by9tZDUvYXNtL21kNS14ODZfNjQucGwKKysrIGIvY3J5cHRvL21kNS9hc20vbWQ1LXg4Nl82NC5wbApAQCAtMTUsMTEgKzE1LDEwIEBACiAjICAgZHN0ID0geCArICgoZHN0ICsgRih4LHkseikgKyBYW2tdICsgVF9pKSA8PDwgcykKICMgICAlcjEwZCA9IFhba19uZXh0XQogIyAgICVyMTFkID0geicgKGNvcHkgb2YgeiBmb3IgdGhlIG5leHQgc3RlcCkKLSMgRWFjaCByb3VuZDFfc3RlcCgpIHRha2VzIGFib3V0IDUuNzEgY2xvY2tzICg5IGluc3RydWN0aW9ucywgMS41OCBJUEMpCisjIEVhY2ggcm91bmQxX3N0ZXAoKSB0YWtlcyBhYm91dCA1LjMgY2xvY2tzICg5IGluc3RydWN0aW9ucywgMS43IElQQykKIHN1YiByb3VuZDFfc3RlcAogewogICAgIG15ICgkcG9zLCAkZHN0LCAkeCwgJHksICR6LCAka19uZXh0LCAkVF9pLCAkcykgPSBAXzsKLSAgICAkVF9pID0gdW5wYWNrKCJsIixwYWNrKCJsIiwgaGV4KCRUX2kpKSk7ICMgY29udmVydCB0byAzMi1iaXQgc2lnbmVkIGRlY2ltYWwKICAgICAkY29kZSAuPSAiIG1vdgkwKjQoJXJzaSksCSVyMTBkCQkvKiAoTkVYVCBTVEVQKSBYWzBdICovXG4iIGlmICgkcG9zID09IC0xKTsKICAgICAkY29kZSAuPSAiIG1vdgklZWR4LAkJJXIxMWQJCS8qIChORVhUIFNURVApIHonID0gJWVkeCAqL1xuIiBpZiAoJHBvcyA9PSAtMSk7CiAgICAgJGNvZGUgLj0gPDxFT0Y7CkBAIC0zOCwyMyArMzcsMjYgQEAKICMgcm91bmQyX3N0ZXAoKSBkb2VzOgogIyAgIGRzdCA9IHggKyAoKGRzdCArIEcoeCx5LHopICsgWFtrXSArIFRfaSkgPDw8IHMpCiAjICAgJXIxMGQgPSBYW2tfbmV4dF0KLSMgICAlcjExZCA9IHknIChjb3B5IG9mIHkgZm9yIHRoZSBuZXh0IHN0ZXApCi0jIEVhY2ggcm91bmQyX3N0ZXAoKSB0YWtlcyBhYm91dCA2LjIyIGNsb2NrcyAoOSBpbnN0cnVjdGlvbnMsIDEuNDUgSVBDKQorIyAgICVyMTFkID0geicgKGNvcHkgb2YgeiBmb3IgdGhlIG5leHQgc3RlcCkKKyMgICAlcjEyZCA9IHonIChjb3B5IG9mIHogZm9yIHRoZSBuZXh0IHN0ZXApCisjIEVhY2ggcm91bmQyX3N0ZXAoKSB0YWtlcyBhYm91dCA1LjQgY2xvY2tzICgxMSBpbnN0cnVjdGlvbnMsIDIuMCBJUEMpCiBzdWIgcm91bmQyX3N0ZXAKIHsKICAgICBteSAoJHBvcywgJGRzdCwgJHgsICR5LCAkeiwgJGtfbmV4dCwgJFRfaSwgJHMpID0gQF87Ci0gICAgJFRfaSA9IHVucGFjaygibCIscGFjaygibCIsIGhleCgkVF9pKSkpOyAjIGNvbnZlcnQgdG8gMzItYml0IHNpZ25lZCBkZWNpbWFsCiAgICAgJGNvZGUgLj0gIiBtb3YJMSo0KCVyc2kpLAklcjEwZAkJLyogKE5FWFQgU1RFUCkgWFsxXSAqL1xuIiBpZiAoJHBvcyA9PSAtMSk7Ci0gICAgJGNvZGUgLj0gIiBtb3YJJWVjeCwJCSVyMTFkCQkvKiAoTkVYVCBTVEVQKSB5JyA9ICVlY3ggKi9cbiIgaWYgKCRwb3MgPT0gLTEpOworICAgICRjb2RlIC49ICIgbW92CSVlZHgsCQklcjExZAkJLyogKE5FWFQgU1RFUCkgeicgPSAlZWR4ICovXG4iIGlmICgkcG9zID09IC0xKTsKKyAgICAkY29kZSAuPSAiIG1vdgklZWR4LAkJJXIxMmQJCS8qIChORVhUIFNURVApIHonID0gJWVkeCAqL1xuIiBpZiAoJHBvcyA9PSAtMSk7CiAgICAgJGNvZGUgLj0gPDxFT0Y7Ci0JeG9yCSR4LAkJJXIxMWQJCS8qIHggXiAuLi4gKi8KKwlub3QJJXIxMWQJCQkJLyogbm90IHogKi8KIAlsZWEJJFRfaSgkZHN0LCVyMTBkKSwkZHN0CQkvKiBDb25zdCArIGRzdCArIC4uLiAqLwotCWFuZAkkeiwJCSVyMTFkCQkvKiB6ICYgLi4uICovCi0JeG9yCSR5LAkJJXIxMWQJCS8qIHkgXiAuLi4gKi8KKwlhbmQJJHgsCQklcjEyZAkJLyogeCAmIHogKi8KKwlhbmQJJHksCQklcjExZAkJLyogeSAmIChub3QgeikgKi8KIAltb3YJJGtfbmV4dCo0KCVyc2kpLCVyMTBkCQkvKiAoTkVYVCBTVEVQKSBYWyRrX25leHRdICovCi0JYWRkCSVyMTFkLAkJJGRzdAkJLyogZHN0ICs9IC4uLiAqLworCW9yCSVyMTFkLAkJJXIxMmQJCS8qICh5ICYgKG5vdCB6KSkgfCAoeCAmIHopICovCisJbW92CSR5LAkJJXIxMWQJCS8qIChORVhUIFNURVApIHonID0gJHkgKi8KKwlhZGQJJXIxMmQsCQkkZHN0CQkvKiBkc3QgKz0gLi4uICovCisJbW92CSR5LAkJJXIxMmQJCS8qIChORVhUIFNURVApIHonID0gJHkgKi8KIAlyb2wJXCQkcywJCSRkc3QJCS8qIGRzdCA8PDwgcyAqLwotCW1vdgkkeCwJCSVyMTFkCQkvKiAoTkVYVCBTVEVQKSB5JyA9ICR4ICovCiAJYWRkCSR4LAkJJGRzdAkJLyogZHN0ICs9IHggKi8KIEVPRgogfQpAQCAtNjMsMTEgKzY1LDEwIEBACiAjICAgZHN0ID0geCArICgoZHN0ICsgSCh4LHkseikgKyBYW2tdICsgVF9pKSA8PDwgcykKICMgICAlcjEwZCA9IFhba19uZXh0XQogIyAgICVyMTFkID0geScgKGNvcHkgb2YgeSBmb3IgdGhlIG5leHQgc3RlcCkKLSMgRWFjaCByb3VuZDNfc3RlcCgpIHRha2VzIGFib3V0IDQuMjYgY2xvY2tzICg4IGluc3RydWN0aW9ucywgMS44OCBJUEMpCisjIEVhY2ggcm91bmQzX3N0ZXAoKSB0YWtlcyBhYm91dCA0LjIgY2xvY2tzICg4IGluc3RydWN0aW9ucywgMS45IElQQykKIHN1YiByb3VuZDNfc3RlcAogewogICAgIG15ICgkcG9zLCAkZHN0LCAkeCwgJHksICR6LCAka19uZXh0LCAkVF9pLCAkcykgPSBAXzsKLSAgICAkVF9pID0gdW5wYWNrKCJsIixwYWNrKCJsIiwgaGV4KCRUX2kpKSk7ICMgY29udmVydCB0byAzMi1iaXQgc2lnbmVkIGRlY2ltYWwKICAgICAkY29kZSAuPSAiIG1vdgk1KjQoJXJzaSksCSVyMTBkCQkvKiAoTkVYVCBTVEVQKSBYWzVdICovXG4iIGlmICgkcG9zID09IC0xKTsKICAgICAkY29kZSAuPSAiIG1vdgklZWN4LAkJJXIxMWQJCS8qIChORVhUIFNURVApIHknID0gJWVjeCAqL1xuIiBpZiAoJHBvcyA9PSAtMSk7CiAgICAgJGNvZGUgLj0gPDxFT0Y7CkBAIC04NiwxMSArODcsMTAgQEAKICMgICBkc3QgPSB4ICsgKChkc3QgKyBJKHgseSx6KSArIFhba10gKyBUX2kpIDw8PCBzKQogIyAgICVyMTBkID0gWFtrX25leHRdCiAjICAgJXIxMWQgPSBub3QgeicgKGNvcHkgb2Ygbm90IHogZm9yIHRoZSBuZXh0IHN0ZXApCi0jIEVhY2ggcm91bmQ0X3N0ZXAoKSB0YWtlcyBhYm91dCA1LjI3IGNsb2NrcyAoOSBpbnN0cnVjdGlvbnMsIDEuNzEgSVBDKQorIyBFYWNoIHJvdW5kNF9zdGVwKCkgdGFrZXMgYWJvdXQgNS4yIGNsb2NrcyAoOSBpbnN0cnVjdGlvbnMsIDEuNyBJUEMpCiBzdWIgcm91bmQ0X3N0ZXAKIHsKICAgICBteSAoJHBvcywgJGRzdCwgJHgsICR5LCAkeiwgJGtfbmV4dCwgJFRfaSwgJHMpID0gQF87Ci0gICAgJFRfaSA9IHVucGFjaygibCIscGFjaygibCIsIGhleCgkVF9pKSkpOyAjIGNvbnZlcnQgdG8gMzItYml0IHNpZ25lZCBkZWNpbWFsCiAgICAgJGNvZGUgLj0gIiBtb3YJMCo0KCVyc2kpLAklcjEwZAkJLyogKE5FWFQgU1RFUCkgWFswXSAqL1xuIiBpZiAoJHBvcyA9PSAtMSk7CiAgICAgJGNvZGUgLj0gIiBtb3YJXCQweGZmZmZmZmZmLAklcjExZFxuIiBpZiAoJHBvcyA9PSAtMSk7CiAgICAgJGNvZGUgLj0gIiB4b3IJJWVkeCwJCSVyMTFkCQkvKiAoTkVYVCBTVEVQKSBub3QgeicgPSBub3QgJWVkeCovXG4iCkBAIC0xMDgsOCArMTA4LDE5IEBACiBFT0YKIH0KIAotbXkgJG91dHB1dCA9IHNoaWZ0Owotb3BlbiBTVERPVVQsInwgJF5YIC4uL3Blcmxhc20veDg2XzY0LXhsYXRlLnBsICRvdXRwdXQiOworbXkgJGZsYXZvdXIgPSBzaGlmdDsKK215ICRvdXRwdXQgID0gc2hpZnQ7CitpZiAoJGZsYXZvdXIgPX4gL1wuLykgeyAkb3V0cHV0ID0gJGZsYXZvdXI7IHVuZGVmICRmbGF2b3VyOyB9CisKK215ICR3aW42ND0wOyAkd2luNjQ9MSBpZiAoJGZsYXZvdXIgPX4gL1tubV1hc218bWluZ3c2NC8gfHwgJG91dHB1dCA9fiAvXC5hc20kLyk7CisKKyQwID1+IG0vKC4qW1wvXFxdKVteXC9cXF0rJC87IG15ICRkaXI9JDE7IG15ICR4bGF0ZTsKKyggJHhsYXRlPSIke2Rpcn14ODZfNjQteGxhdGUucGwiIGFuZCAtZiAkeGxhdGUgKSBvcgorKCAkeGxhdGU9IiR7ZGlyfS4uLy4uL3Blcmxhc20veDg2XzY0LXhsYXRlLnBsIiBhbmQgLWYgJHhsYXRlKSBvcgorZGllICJjYW4ndCBsb2NhdGUgeDg2XzY0LXhsYXRlLnBsIjsKKworbm8gd2FybmluZ3MgcXcodW5pbml0aWFsaXplZCk7CitvcGVuIFNURE9VVCwifCAkXlggJHhsYXRlICRmbGF2b3VyICRvdXRwdXQiOwogCiAkY29kZSAuPSA8PEVPRjsKIC50ZXh0CkBAIC0xMjAsOCArMTMxLDEwIEBACiBtZDVfYmxvY2tfYXNtX2RhdGFfb3JkZXI6CiAJcHVzaAklcmJwCiAJcHVzaAklcmJ4CisJcHVzaAklcjEyCiAJcHVzaAklcjE0CiAJcHVzaAklcjE1CisuTHByb2xvZ3VlOgogCiAJIyByZGkgPSBhcmcgIzEgKGN0eCwgTUQ1X0NUWCBwb2ludGVyKQogCSMgcnNpID0gYXJnICMyIChwdHIsIGRhdGEgcG9pbnRlcikKQEAgLTIzNiwxNCArMjQ5LDEyMSBAQAogCW1vdgklZWN4LAkJMio0KCVyYnApCSMgY3R4LT5DID0gQwogCW1vdgklZWR4LAkJMyo0KCVyYnApCSMgY3R4LT5EID0gRAogCi0JcG9wCSVyMTUKLQlwb3AJJXIxNAotCXBvcAklcmJ4Ci0JcG9wCSVyYnAKKwltb3YJKCVyc3ApLCVyMTUKKwltb3YJOCglcnNwKSwlcjE0CisJbW92CTE2KCVyc3ApLCVyMTIKKwltb3YJMjQoJXJzcCksJXJieAorCW1vdgkzMiglcnNwKSwlcmJwCisJYWRkCVwkNDAsJXJzcAorLkxlcGlsb2d1ZToKIAlyZXQKIC5zaXplIG1kNV9ibG9ja19hc21fZGF0YV9vcmRlciwuLW1kNV9ibG9ja19hc21fZGF0YV9vcmRlcgogRU9GCiAKKyMgRVhDRVBUSU9OX0RJU1BPU0lUSU9OIGhhbmRsZXIgKEVYQ0VQVElPTl9SRUNPUkQgKnJlYyxVTE9ORzY0IGZyYW1lLAorIwkJQ09OVEVYVCAqY29udGV4dCxESVNQQVRDSEVSX0NPTlRFWFQgKmRpc3ApCitpZiAoJHdpbjY0KSB7CitteSAkcmVjPSIlcmN4IjsKK215ICRmcmFtZT0iJXJkeCI7CitteSAkY29udGV4dD0iJXI4IjsKK215ICRkaXNwPSIlcjkiOworCiskY29kZS49PDxfX187CisuZXh0ZXJuCV9faW1wX1J0bFZpcnR1YWxVbndpbmQKKy50eXBlCXNlX2hhbmRsZXIsXEBhYmktb21uaXBvdGVudAorLmFsaWduCTE2CitzZV9oYW5kbGVyOgorCXB1c2gJJXJzaQorCXB1c2gJJXJkaQorCXB1c2gJJXJieAorCXB1c2gJJXJicAorCXB1c2gJJXIxMgorCXB1c2gJJXIxMworCXB1c2gJJXIxNAorCXB1c2gJJXIxNQorCXB1c2hmcQorCXN1YglcJDY0LCVyc3AKKworCW1vdgkxMjAoJGNvbnRleHQpLCVyYXgJIyBwdWxsIGNvbnRleHQtPlJheAorCW1vdgkyNDgoJGNvbnRleHQpLCVyYngJIyBwdWxsIGNvbnRleHQtPlJpcAorCisJbGVhCS5McHJvbG9ndWUoJXJpcCksJXIxMAorCWNtcAklcjEwLCVyYngJCSMgY29udGV4dC0+UmlwPC5McHJvbG9ndWUKKwlqYgkuTGluX3Byb2xvZ3VlCisKKwltb3YJMTUyKCRjb250ZXh0KSwlcmF4CSMgcHVsbCBjb250ZXh0LT5Sc3AKKworCWxlYQkuTGVwaWxvZ3VlKCVyaXApLCVyMTAKKwljbXAJJXIxMCwlcmJ4CQkjIGNvbnRleHQtPlJpcD49LkxlcGlsb2d1ZQorCWphZQkuTGluX3Byb2xvZ3VlCisKKwlsZWEJNDAoJXJheCksJXJheAorCisJbW92CS04KCVyYXgpLCVyYnAKKwltb3YJLTE2KCVyYXgpLCVyYngKKwltb3YJLTI0KCVyYXgpLCVyMTIKKwltb3YJLTMyKCVyYXgpLCVyMTQKKwltb3YJLTQwKCVyYXgpLCVyMTUKKwltb3YJJXJieCwxNDQoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SYngKKwltb3YJJXJicCwxNjAoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SYnAKKwltb3YJJXIxMiwyMTYoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SMTIKKwltb3YJJXIxNCwyMzIoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SMTQKKwltb3YJJXIxNSwyNDAoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SMTUKKworLkxpbl9wcm9sb2d1ZToKKwltb3YJOCglcmF4KSwlcmRpCisJbW92CTE2KCVyYXgpLCVyc2kKKwltb3YJJXJheCwxNTIoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5Sc3AKKwltb3YJJXJzaSwxNjgoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5Sc2kKKwltb3YJJXJkaSwxNzYoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SZGkKKworCW1vdgk0MCgkZGlzcCksJXJkaQkJIyBkaXNwLT5Db250ZXh0UmVjb3JkCisJbW92CSRjb250ZXh0LCVyc2kJCSMgY29udGV4dAorCW1vdglcJDE1NCwlZWN4CQkjIHNpemVvZihDT05URVhUKQorCS5sb25nCTB4YTU0OGYzZmMJCSMgY2xkOyByZXAgbW92c3EKKworCW1vdgkkZGlzcCwlcnNpCisJeG9yCSVyY3gsJXJjeAkJIyBhcmcxLCBVTldfRkxBR19OSEFORExFUgorCW1vdgk4KCVyc2kpLCVyZHgJCSMgYXJnMiwgZGlzcC0+SW1hZ2VCYXNlCisJbW92CTAoJXJzaSksJXI4CQkjIGFyZzMsIGRpc3AtPkNvbnRyb2xQYworCW1vdgkxNiglcnNpKSwlcjkJCSMgYXJnNCwgZGlzcC0+RnVuY3Rpb25FbnRyeQorCW1vdgk0MCglcnNpKSwlcjEwCQkjIGRpc3AtPkNvbnRleHRSZWNvcmQKKwlsZWEJNTYoJXJzaSksJXIxMQkJIyAmZGlzcC0+SGFuZGxlckRhdGEKKwlsZWEJMjQoJXJzaSksJXIxMgkJIyAmZGlzcC0+RXN0YWJsaXNoZXJGcmFtZQorCW1vdgklcjEwLDMyKCVyc3ApCQkjIGFyZzUKKwltb3YJJXIxMSw0MCglcnNwKQkJIyBhcmc2CisJbW92CSVyMTIsNDgoJXJzcCkJCSMgYXJnNworCW1vdgklcmN4LDU2KCVyc3ApCQkjIGFyZzgsIChOVUxMKQorCWNhbGwJKl9faW1wX1J0bFZpcnR1YWxVbndpbmQoJXJpcCkKKworCW1vdglcJDEsJWVheAkJIyBFeGNlcHRpb25Db250aW51ZVNlYXJjaAorCWFkZAlcJDY0LCVyc3AKKwlwb3BmcQorCXBvcAklcjE1CisJcG9wCSVyMTQKKwlwb3AJJXIxMworCXBvcAklcjEyCisJcG9wCSVyYnAKKwlwb3AJJXJieAorCXBvcAklcmRpCisJcG9wCSVyc2kKKwlyZXQKKy5zaXplCXNlX2hhbmRsZXIsLi1zZV9oYW5kbGVyCisKKy5zZWN0aW9uCS5wZGF0YQorLmFsaWduCTQKKwkucnZhCS5MU0VIX2JlZ2luX21kNV9ibG9ja19hc21fZGF0YV9vcmRlcgorCS5ydmEJLkxTRUhfZW5kX21kNV9ibG9ja19hc21fZGF0YV9vcmRlcgorCS5ydmEJLkxTRUhfaW5mb19tZDVfYmxvY2tfYXNtX2RhdGFfb3JkZXIKKworLnNlY3Rpb24JLnhkYXRhCisuYWxpZ24JOAorLkxTRUhfaW5mb19tZDVfYmxvY2tfYXNtX2RhdGFfb3JkZXI6CisJLmJ5dGUJOSwwLDAsMAorCS5ydmEJc2VfaGFuZGxlcgorX19fCit9CisKIHByaW50ICRjb2RlOwogCiBjbG9zZSBTVERPVVQ7CmRpZmYgLS1naXQgYS9jcnlwdG8vbWQ1L21kNS5oIGIvY3J5cHRvL21kNS9tZDUuaAppbmRleCAwNzYxZjg0Li40Y2JmODQzIDEwMDY0NAotLS0gYS9jcnlwdG8vbWQ1L21kNS5oCisrKyBiL2NyeXB0by9tZDUvbWQ1LmgKQEAgLTc3LDcgKzc3LDcgQEAKICAqICEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCiAgKi8KIAotI2lmIGRlZmluZWQoT1BFTlNTTF9TWVNfV0lOMTYpIHx8IGRlZmluZWQoX19MUDMyX18pCisjaWYgZGVmaW5lZChfX0xQMzJfXykKICNkZWZpbmUgTUQ1X0xPTkcgdW5zaWduZWQgbG9uZwogI2VsaWYgZGVmaW5lZChPUEVOU1NMX1NZU19DUkFZKSB8fCBkZWZpbmVkKF9fSUxQNjRfXykKICNkZWZpbmUgTUQ1X0xPTkcgdW5zaWduZWQgbG9uZwpAQCAtMTA1LDkgKzEwNSw2IEBACiAJdW5zaWduZWQgaW50IG51bTsKIAl9IE1ENV9DVFg7CiAKLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLWludCBwcml2YXRlX01ENV9Jbml0KE1ENV9DVFggKmMpOwotI2VuZGlmCiBpbnQgTUQ1X0luaXQoTUQ1X0NUWCAqYyk7CiBpbnQgTUQ1X1VwZGF0ZShNRDVfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKIGludCBNRDVfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIE1ENV9DVFggKmMpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL21kNS9tZDVfZGdzdC5jIGIvY3J5cHRvL21kNS9tZDVfZGdzdC5jCmluZGV4IDQ3YmI5MDIuLmJlYWNlNjMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9tZDUvbWQ1X2Rnc3QuYworKysgYi9jcnlwdG8vbWQ1L21kNV9kZ3N0LmMKQEAgLTU5LDExICs1OSw2IEBACiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlICJtZDVfbG9jbC5oIgogI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KLSNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotI2lmZGVmIE9QRU5TU0xfRklQUwotI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotI2VuZGlmCi0KIAogY29uc3QgY2hhciBNRDVfdmVyc2lvbltdPSJNRDUiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKIApAQCAtNzUsMTUgKzcwLDEzIEBACiAjZGVmaW5lIElOSVRfREFUQV9DICh1bnNpZ25lZCBsb25nKTB4OThiYWRjZmVMCiAjZGVmaW5lIElOSVRfREFUQV9EICh1bnNpZ25lZCBsb25nKTB4MTAzMjU0NzZMCiAKLUZJUFNfTk9OX0ZJUFNfTURfSW5pdChNRDUpCitpbnQgTUQ1X0luaXQoTUQ1X0NUWCAqYykKIAl7CisJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7CiAJYy0+QT1JTklUX0RBVEFfQTsKIAljLT5CPUlOSVRfREFUQV9COwogCWMtPkM9SU5JVF9EQVRBX0M7CiAJYy0+RD1JTklUX0RBVEFfRDsKLQljLT5ObD0wOwotCWMtPk5oPTA7Ci0JYy0+bnVtPTA7CiAJcmV0dXJuIDE7CiAJfQogCmRpZmYgLS1naXQgYS9jcnlwdG8vbWQ1L21kNV9sb2NsLmggYi9jcnlwdG8vbWQ1L21kNV9sb2NsLmgKaW5kZXggODRlODFiOS4uOTY4ZDU3NyAxMDA2NDQKLS0tIGEvY3J5cHRvL21kNS9tZDVfbG9jbC5oCisrKyBiL2NyeXB0by9tZDUvbWQ1X2xvY2wuaApAQCAtNjksNiArNjksOCBAQAogIyBpZiBkZWZpbmVkKF9faTM4NikgfHwgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfTV9JWDg2KSB8fCBkZWZpbmVkKF9fSU5URUxfXykgfHwgXAogICAgICBkZWZpbmVkKF9feDg2XzY0KSB8fCBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX01fQU1ENjQpIHx8IGRlZmluZWQoX01fWDY0KQogIyAgZGVmaW5lIG1kNV9ibG9ja19kYXRhX29yZGVyIG1kNV9ibG9ja19hc21fZGF0YV9vcmRlcgorIyBlbGlmIGRlZmluZWQoX19pYTY0KSB8fCBkZWZpbmVkKF9faWE2NF9fKSB8fCBkZWZpbmVkKF9NX0lBNjQpCisjICBkZWZpbmUgbWQ1X2Jsb2NrX2RhdGFfb3JkZXIgbWQ1X2Jsb2NrX2FzbV9kYXRhX29yZGVyCiAjIGVuZGlmCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvY3J5cHRvL21kYzIvTWFrZWZpbGUgYi9jcnlwdG8vbWRjMi9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWEyNTY4OC4uMDAwMDAwMAotLS0gYS9jcnlwdG8vbWRjMi9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLSMKLSMgT3BlblNTTC9jcnlwdG8vbWRjMi9NYWtlZmlsZQotIwotCi1ESVI9CW1kYzIKLVRPUD0JLi4vLi4KLUNDPQljYwotSU5DTFVERVM9Ci1DRkxBRz0tZwotTUFLRUZJTEU9CU1ha2VmaWxlCi1BUj0JCWFyIHIKLQotQ0ZMQUdTPSAkKElOQ0xVREVTKSAkKENGTEFHKQotCi1HRU5FUkFMPU1ha2VmaWxlCi1URVNUPSBtZGMydGVzdC5jCi1BUFBTPQotCi1MSUI9JChUT1ApL2xpYmNyeXB0by5hCi1MSUJTUkM9bWRjMmRnc3QuYyBtZGMyX29uZS5jCi1MSUJPQko9bWRjMmRnc3QubyBtZGMyX29uZS5vCi0KLVNSQz0gJChMSUJTUkMpCi0KLUVYSEVBREVSPSBtZGMyLmgKLUhFQURFUj0JJChFWEhFQURFUikKLQotQUxMPSAgICAkKEdFTkVSQUwpICQoU1JDKSAkKEhFQURFUikKLQotdG9wOgotCShjZCAuLi8uLjsgJChNQUtFKSBESVJTPWNyeXB0byBTRElSUz0kKERJUikgc3ViX2FsbCkKLQotYWxsOglsaWIKLQotbGliOgkkKExJQk9CSikKLQkkKEFSWCkgJChMSUIpICQoTElCT0JKKQotCSQoUkFOTElCKSAkKExJQikgfHwgZWNobyBOZXZlciBtaW5kLgotCUB0b3VjaCBsaWIKLQotZmlsZXM6Ci0JJChQRVJMKSAkKFRPUCkvdXRpbC9maWxlcy5wbCBNYWtlZmlsZSA+PiAkKFRPUCkvTUlORk8KLQotbGlua3M6Ci0JQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL2luY2x1ZGUvb3BlbnNzbCAkKEVYSEVBREVSKQotCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi90ZXN0ICQoVEVTVCkKLQlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vYXBwcyAkKEFQUFMpCi0KLWluc3RhbGw6Ci0JQFsgLW4gIiQoSU5TVEFMTFRPUCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHRvcCBNYWtlZmlsZS4uLgotCUBoZWFkZXJsaXN0PSIkKEVYSEVBREVSKSI7IGZvciBpIGluICQkaGVhZGVybGlzdCA7IFwKLQlkbyAgXAotCShjcCAkJGkgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGk7IFwKLQljaG1vZCA2NDQgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGkgKTsgXAotCWRvbmU7Ci0KLXRhZ3M6Ci0JY3RhZ3MgJChTUkMpCi0KLXRlc3RzOgotCi1saW50OgotCWxpbnQgLURMSU5UICQoSU5DTFVERVMpICQoU1JDKT5mbHVmZgotCi1kZXBlbmQ6Ci0JQFsgLW4gIiQoTUFLRURFUEVORCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHVwcGVyIE1ha2VmaWxlLi4uCi0JJChNQUtFREVQRU5EKSAtLSAkKENGTEFHKSAkKElOQ0xVREVTKSAkKERFUEZMQUcpIC0tICQoUFJPR1MpICQoTElCU1JDKQotCi1kY2xlYW46Ci0JJChQRVJMKSAtcGUgJ2lmICgvXiMgRE8gTk9UIERFTEVURSBUSElTIExJTkUvKSB7cHJpbnQ7IGV4aXQoMCk7fScgJChNQUtFRklMRSkgPk1ha2VmaWxlLm5ldwotCW12IC1mIE1ha2VmaWxlLm5ldyAkKE1BS0VGSUxFKQotCi1jbGVhbjoKLQlybSAtZiAqLm8gKi5vYmogbGliIHRhZ3MgY29yZSAucHVyZSAubmZzKiAqLm9sZCAqLmJhayBmbHVmZgotCi0jIERPIE5PVCBERUxFVEUgVEhJUyBMSU5FIC0tIG1ha2UgZGVwZW5kIGRlcGVuZHMgb24gaXQuCi0KLW1kYzJfb25lLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLW1kYzJfb25lLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLW1kYzJfb25lLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZGVzX29sZC5oCi1tZGMyX29uZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLW1kYzJfb25lLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9tZGMyLmgKLW1kYzJfb25lLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1tZGMyX29uZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotbWRjMl9vbmUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1tZGMyX29uZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvdWkuaAotbWRjMl9vbmUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3VpX2NvbXBhdC5oIC4uL2NyeXB0bGliLmggbWRjMl9vbmUuYwotbWRjMmRnc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Rlcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kZXNfb2xkLmgKLW1kYzJkZ3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9tZGMyLmgKLW1kYzJkZ3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1tZGMyZGdzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLW1kYzJkZ3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1tZGMyZGdzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvdWkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvdWlfY29tcGF0LmgKLW1kYzJkZ3N0Lm86IG1kYzJkZ3N0LmMKZGlmZiAtLWdpdCBhL2NyeXB0by9tZGMyL21kYzIuaCBiL2NyeXB0by9tZGMyL21kYzIuaAppbmRleCA3ZTEzNTQxLi43Mjc3OGE1IDEwMDY0NAotLS0gYS9jcnlwdG8vbWRjMi9tZGMyLmgKKysrIGIvY3J5cHRvL21kYzIvbWRjMi5oCkBAIC04MCw5ICs4MCw3IEBACiAJaW50IHBhZF90eXBlOyAvKiBlaXRoZXIgMSBvciAyLCBkZWZhdWx0IDEgKi8KIAl9IE1EQzJfQ1RYOwogCi0jaWZkZWYgT1BFTlNTTF9GSVBTCi1pbnQgcHJpdmF0ZV9NREMyX0luaXQoTURDMl9DVFggKmMpOwotI2VuZGlmCisKIGludCBNREMyX0luaXQoTURDMl9DVFggKmMpOwogaW50IE1EQzJfVXBkYXRlKE1EQzJfQ1RYICpjLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBzaXplX3QgbGVuKTsKIGludCBNREMyX0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBNREMyX0NUWCAqYyk7CmRpZmYgLS1naXQgYS9jcnlwdG8vbWRjMi9tZGMyZGdzdC5jIGIvY3J5cHRvL21kYzIvbWRjMmRnc3QuYwppbmRleCBhMzZiM2Y1Li40YWE0MDZlIDEwMDY0NAotLS0gYS9jcnlwdG8vbWRjMi9tZGMyZGdzdC5jCisrKyBiL2NyeXB0by9tZGMyL21kYzJkZ3N0LmMKQEAgLTYxLDExICs2MSw2IEBACiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9kZXMuaD4KICNpbmNsdWRlIDxvcGVuc3NsL21kYzIuaD4KLSNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotI2lmZGVmIE9QRU5TU0xfRklQUwotI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotI2VuZGlmCi0KIAogI3VuZGVmIGMybAogI2RlZmluZSBjMmwoYyxsKQkobCA9KChERVNfTE9ORykoKigoYykrKykpKSAgICAsIFwKQEAgLTgwLDcgKzc1LDcgQEAKIAkJCSooKGMpKyspPSh1bnNpZ25lZCBjaGFyKSgoKGwpPj4yNEwpJjB4ZmYpKQogCiBzdGF0aWMgdm9pZCBtZGMyX2JvZHkoTURDMl9DVFggKmMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgbGVuKTsKLUZJUFNfTk9OX0ZJUFNfTURfSW5pdChNREMyKQoraW50IE1EQzJfSW5pdChNREMyX0NUWCAqYykKIAl7CiAJYy0+bnVtPTA7CiAJYy0+cGFkX3R5cGU9MTsKZGlmZiAtLWdpdCBhL2NyeXB0by9tZW0uYyBiL2NyeXB0by9tZW0uYwppbmRleCAwMGViYWYwLi42ZjgwZGQzIDEwMDY0NAotLS0gYS9jcnlwdG8vbWVtLmMKKysrIGIvY3J5cHRvL21lbS5jCkBAIC0xMDEsNyArMTAxLDcgQEAKIAogLyogbWF5IGJlIGNoYW5nZWQgYXMgbG9uZyBhcyAnYWxsb3dfY3VzdG9taXplX2RlYnVnJyBpcyBzZXQgKi8KIC8qIFhYWCB1c2UgY29ycmVjdCBmdW5jdGlvbiBwb2ludGVyIHR5cGVzICovCi0jaWYgZGVmaW5lZChDUllQVE9fTURFQlVHKSAmJiAhZGVmaW5lZChPUEVOU1NMX0ZJUFMpCisjaWZkZWYgQ1JZUFRPX01ERUJVRwogLyogdXNlIGRlZmF1bHQgZnVuY3Rpb25zIGZyb20gbWVtX2RiZy5jICovCiBzdGF0aWMgdm9pZCAoKm1hbGxvY19kZWJ1Z19mdW5jKSh2b2lkICosaW50LGNvbnN0IGNoYXIgKixpbnQsaW50KQogCT0gQ1JZUFRPX2RiZ19tYWxsb2M7CkBAIC0xMTAsMTQgKzExMCw2IEBACiBzdGF0aWMgdm9pZCAoKmZyZWVfZGVidWdfZnVuYykodm9pZCAqLGludCkgPSBDUllQVE9fZGJnX2ZyZWU7CiBzdGF0aWMgdm9pZCAoKnNldF9kZWJ1Z19vcHRpb25zX2Z1bmMpKGxvbmcpID0gQ1JZUFRPX2RiZ19zZXRfb3B0aW9uczsKIHN0YXRpYyBsb25nICgqZ2V0X2RlYnVnX29wdGlvbnNfZnVuYykodm9pZCkgPSBDUllQVE9fZGJnX2dldF9vcHRpb25zOwotCi1zdGF0aWMgaW50ICAoKnB1c2hfaW5mb19mdW5jKShjb25zdCBjaGFyICppbmZvLCBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSkKLQk9IENSWVBUT19kYmdfcHVzaF9pbmZvOwotc3RhdGljIGludCAgKCpwb3BfaW5mb19mdW5jKSh2b2lkKQotCT0gQ1JZUFRPX2RiZ19wb3BfaW5mbzsKLXN0YXRpYyBpbnQgKCpyZW1vdmVfYWxsX2luZm9fZnVuYykodm9pZCkKLQk9IENSWVBUT19kYmdfcmVtb3ZlX2FsbF9pbmZvOwotCiAjZWxzZQogLyogYXBwbGljYXRpb25zIGNhbiB1c2UgQ1JZUFRPX21hbGxvY19kZWJ1Z19pbml0KCkgdG8gc2VsZWN0IGFib3ZlIGNhc2UKICAqIGF0IHJ1bi10aW1lICovCkBAIC0xMjcsMTMgKzExOSw2IEBACiBzdGF0aWMgdm9pZCAoKmZyZWVfZGVidWdfZnVuYykodm9pZCAqLGludCkgPSBOVUxMOwogc3RhdGljIHZvaWQgKCpzZXRfZGVidWdfb3B0aW9uc19mdW5jKShsb25nKSA9IE5VTEw7CiBzdGF0aWMgbG9uZyAoKmdldF9kZWJ1Z19vcHRpb25zX2Z1bmMpKHZvaWQpID0gTlVMTDsKLQotCi1zdGF0aWMgaW50ICAoKnB1c2hfaW5mb19mdW5jKShjb25zdCBjaGFyICppbmZvLCBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSkKLQk9IE5VTEw7Ci1zdGF0aWMgaW50ICAoKnBvcF9pbmZvX2Z1bmMpKHZvaWQpID0gTlVMTDsKLXN0YXRpYyBpbnQgKCpyZW1vdmVfYWxsX2luZm9fZnVuYykodm9pZCkgPSBOVUxMOwotCiAjZW5kaWYKIAogCkBAIC0yMDksMTUgKzE5NCw2IEBACiAJcmV0dXJuIDE7CiAJfQogCi12b2lkIENSWVBUT19zZXRfbWVtX2luZm9fZnVuY3Rpb25zKAotCWludCAgKCpwdXNoX2luZm9fZm4pKGNvbnN0IGNoYXIgKmluZm8sIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKSwKLQlpbnQgICgqcG9wX2luZm9fZm4pKHZvaWQpLAotCWludCAoKnJlbW92ZV9hbGxfaW5mb19mbikodm9pZCkpCi0JewotCXB1c2hfaW5mb19mdW5jID0gcHVzaF9pbmZvX2ZuOwotCXBvcF9pbmZvX2Z1bmMgPSBwb3BfaW5mb19mbjsKLQlyZW1vdmVfYWxsX2luZm9fZnVuYyA9IHJlbW92ZV9hbGxfaW5mb19mbjsKLQl9CiAKIHZvaWQgQ1JZUFRPX2dldF9tZW1fZnVuY3Rpb25zKHZvaWQgKigqKm0pKHNpemVfdCksIHZvaWQgKigqKnIpKHZvaWQgKiwgc2l6ZV90KSwKIAl2b2lkICgqKmYpKHZvaWQgKikpCkBAIC0yNzQsNyArMjUwLDYgQEAKIHZvaWQgKkNSWVBUT19tYWxsb2NfbG9ja2VkKGludCBudW0sIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKQogCXsKIAl2b2lkICpyZXQgPSBOVUxMOwotCWV4dGVybiB1bnNpZ25lZCBjaGFyIGNsZWFuc2VfY3RyOwogCiAJaWYgKG51bSA8PSAwKSByZXR1cm4gTlVMTDsKIApAQCAtMjkxLDExICsyNjYsMTUgQEAKIAlpZiAobWFsbG9jX2RlYnVnX2Z1bmMgIT0gTlVMTCkKIAkJbWFsbG9jX2RlYnVnX2Z1bmMocmV0LCBudW0sIGZpbGUsIGxpbmUsIDEpOwogCisjaWZuZGVmIE9QRU5TU0xfQ1BVSURfT0JKCiAgICAgICAgIC8qIENyZWF0ZSBhIGRlcGVuZGVuY3kgb24gdGhlIHZhbHVlIG9mICdjbGVhbnNlX2N0cicgc28gb3VyIG1lbW9yeQogICAgICAgICAgKiBzYW5pdGlzYXRpb24gZnVuY3Rpb24gY2FuJ3QgYmUgb3B0aW1pc2VkIG91dC4gTkI6IFdlIG9ubHkgZG8KICAgICAgICAgICogdGhpcyBmb3IgPjJLYiBzbyB0aGUgb3ZlcmhlYWQgZG9lc24ndCBib3RoZXIgdXMuICovCiAgICAgICAgIGlmKHJldCAmJiAobnVtID4gMjA0OCkpCisJewlleHRlcm4gdW5zaWduZWQgY2hhciBjbGVhbnNlX2N0cjsKIAkJKCh1bnNpZ25lZCBjaGFyICopcmV0KVswXSA9IGNsZWFuc2VfY3RyOworCX0KKyNlbmRpZgogCiAJcmV0dXJuIHJldDsKIAl9CkBAIC0zMTUsNyArMjk0LDYgQEAKIHZvaWQgKkNSWVBUT19tYWxsb2MoaW50IG51bSwgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUpCiAJewogCXZvaWQgKnJldCA9IE5VTEw7Ci0JZXh0ZXJuIHVuc2lnbmVkIGNoYXIgY2xlYW5zZV9jdHI7CiAKIAlpZiAobnVtIDw9IDApIHJldHVybiBOVUxMOwogCkBAIC0zMzIsMTQgKzMxMCwyNSBAQAogCWlmIChtYWxsb2NfZGVidWdfZnVuYyAhPSBOVUxMKQogCQltYWxsb2NfZGVidWdfZnVuYyhyZXQsIG51bSwgZmlsZSwgbGluZSwgMSk7CiAKKyNpZm5kZWYgT1BFTlNTTF9DUFVJRF9PQkoKICAgICAgICAgLyogQ3JlYXRlIGEgZGVwZW5kZW5jeSBvbiB0aGUgdmFsdWUgb2YgJ2NsZWFuc2VfY3RyJyBzbyBvdXIgbWVtb3J5CiAgICAgICAgICAqIHNhbml0aXNhdGlvbiBmdW5jdGlvbiBjYW4ndCBiZSBvcHRpbWlzZWQgb3V0LiBOQjogV2Ugb25seSBkbwogICAgICAgICAgKiB0aGlzIGZvciA+MktiIHNvIHRoZSBvdmVyaGVhZCBkb2Vzbid0IGJvdGhlciB1cy4gKi8KICAgICAgICAgaWYocmV0ICYmIChudW0gPiAyMDQ4KSkKKwl7CWV4dGVybiB1bnNpZ25lZCBjaGFyIGNsZWFuc2VfY3RyOwogICAgICAgICAgICAgICAgICgodW5zaWduZWQgY2hhciAqKXJldClbMF0gPSBjbGVhbnNlX2N0cjsKKwl9CisjZW5kaWYKIAogCXJldHVybiByZXQ7CiAJfQorY2hhciAqQ1JZUFRPX3N0cmR1cChjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKQorCXsKKwljaGFyICpyZXQgPSBDUllQVE9fbWFsbG9jKHN0cmxlbihzdHIpKzEsIGZpbGUsIGxpbmUpOworCisJc3RyY3B5KHJldCwgc3RyKTsKKwlyZXR1cm4gcmV0OworCX0KIAogdm9pZCAqQ1JZUFRPX3JlYWxsb2Modm9pZCAqc3RyLCBpbnQgbnVtLCBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSkKIAl7CkBAIC00MjMsMjQgKzQxMiwzIEBACiAJCXJldHVybiBnZXRfZGVidWdfb3B0aW9uc19mdW5jKCk7CiAJcmV0dXJuIDA7CiAJfQotCi1pbnQgQ1JZUFRPX3B1c2hfaW5mb18oY29uc3QgY2hhciAqaW5mbywgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUpCi0JewotCWlmIChwdXNoX2luZm9fZnVuYykKLQkJcmV0dXJuIHB1c2hfaW5mb19mdW5jKGluZm8sIGZpbGUsIGxpbmUpOwotCXJldHVybiAxOwotCX0KLQotaW50IENSWVBUT19wb3BfaW5mbyh2b2lkKQotCXsKLQlpZiAocG9wX2luZm9fZnVuYykKLQkJcmV0dXJuIHBvcF9pbmZvX2Z1bmMoKTsKLQlyZXR1cm4gMTsKLQl9Ci0KLWludCBDUllQVE9fcmVtb3ZlX2FsbF9pbmZvKHZvaWQpCi0JewotCWlmIChyZW1vdmVfYWxsX2luZm9fZnVuYykKLQkJcmV0dXJuIHJlbW92ZV9hbGxfaW5mb19mdW5jKCk7Ci0JcmV0dXJuIDE7Ci0JfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL21lbV9kYmcuYyBiL2NyeXB0by9tZW1fZGJnLmMKaW5kZXggZGZlYjA4NC4uYWM3OTMzOSAxMDA2NDQKLS0tIGEvY3J5cHRvL21lbV9kYmcuYworKysgYi9jcnlwdG8vbWVtX2RiZy5jCkBAIC01NSw2ICs1NSw1OSBAQAogICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQogICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorICoKKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKyAqCisgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKyAqCisgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisgKiAgICBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZworICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQorICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisgKgorICovCiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgpAQCAtODEsOCArMTM0LDExIEBACiAgKi8KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgb3JkZXIgPSAwOyAvKiBudW1iZXIgb2YgbWVtb3J5IHJlcXVlc3RzICovCi1zdGF0aWMgTEhBU0ggKm1oPU5VTEw7IC8qIGhhc2gtdGFibGUgb2YgbWVtb3J5IHJlcXVlc3RzIChhZGRyZXNzIGFzIGtleSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqIGFjY2VzcyByZXF1aXJlcyBNQUxMT0MyIGxvY2sgKi8KKworREVDTEFSRV9MSEFTSF9PRihNRU0pOworc3RhdGljIExIQVNIX09GKE1FTSkgKm1oPU5VTEw7IC8qIGhhc2gtdGFibGUgb2YgbWVtb3J5IHJlcXVlc3RzCisJCQkJKiAoYWRkcmVzcyBhcyBrZXkpOyBhY2Nlc3MgcmVxdWlyZXMKKwkJCQkqIE1BTExPQzIgbG9jayAqLwogCiAKIHR5cGVkZWYgc3RydWN0IGFwcF9tZW1faW5mb19zdApAQCAtOTMsOCArMTQ5LDggQEAKICAqICAgQ1JZUFRPX3BvcF9pbmZvKCkgICAgICAgICAgIHRvIHBvcCBhbiBlbnRyeSwKICAqICAgQ1JZUFRPX3JlbW92ZV9hbGxfaW5mbygpICAgIHRvIHBvcCBhbGwgZW50cmllcy4KICAqLwotCXsJCi0JdW5zaWduZWQgbG9uZyB0aHJlYWQ7CisJeworCUNSWVBUT19USFJFQURJRCB0aHJlYWRpZDsKIAljb25zdCBjaGFyICpmaWxlOwogCWludCBsaW5lOwogCWNvbnN0IGNoYXIgKmluZm87CkBAIC0xMDQsMTAgKzE2MCwxMyBAQAogCiBzdGF0aWMgdm9pZCBhcHBfaW5mb19mcmVlKEFQUF9JTkZPICopOwogCi1zdGF0aWMgTEhBU0ggKmFtaWg9TlVMTDsgLyogaGFzaC10YWJsZSB3aXRoIHRob3NlIGFwcF9tZW1faW5mb19zdCdzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICogdGhhdCBhcmUgYXQgdGhlIHRvcCBvZiB0aGVpciB0aHJlYWQncyBzdGFjawotICAgICAgICAgICAgICAgICAgICAgICAgICAqICh3aXRoIGB0aHJlYWQnIGFzIGtleSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICogYWNjZXNzIHJlcXVpcmVzIE1BTExPQzIgbG9jayAqLworREVDTEFSRV9MSEFTSF9PRihBUFBfSU5GTyk7CitzdGF0aWMgTEhBU0hfT0YoQVBQX0lORk8pICphbWloPU5VTEw7IC8qIGhhc2gtdGFibGUgd2l0aCB0aG9zZQorCQkJCSAgICAgICAqIGFwcF9tZW1faW5mb19zdCdzIHRoYXQgYXJlIGF0CisJCQkJICAgICAgICogdGhlIHRvcCBvZiB0aGVpciB0aHJlYWQncworCQkJCSAgICAgICAqIHN0YWNrICh3aXRoIGB0aHJlYWQnIGFzIGtleSk7CisJCQkJICAgICAgICogYWNjZXNzIHJlcXVpcmVzIE1BTExPQzIKKwkJCQkgICAgICAgKiBsb2NrICovCiAKIHR5cGVkZWYgc3RydWN0IG1lbV9zdAogLyogbWVtb3J5LWJsb2NrIGRlc2NyaXB0aW9uICovCkBAIC0xMTYsNyArMTc1LDcgQEAKIAlpbnQgbnVtOwogCWNvbnN0IGNoYXIgKmZpbGU7CiAJaW50IGxpbmU7Ci0JdW5zaWduZWQgbG9uZyB0aHJlYWQ7CisJQ1JZUFRPX1RIUkVBRElEIHRocmVhZGlkOwogCXVuc2lnbmVkIGxvbmcgb3JkZXI7CiAJdGltZV90IHRpbWU7CiAJQVBQX0lORk8gKmFwcF9pbmZvOwpAQCAtMTM2LDExICsxOTUsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgaWZmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogbWhfbW9kZSA9PSBDUllQVE9fTUVNX0NIRUNLX09OICh3L28gLi4uX0VOQUJMRSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGRpc2FibGluZ190aHJlYWQgPSAwOyAvKiBWYWxpZCBpZmYgbnVtX2Rpc2FibGUgPiAwLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIENSWVBUT19MT0NLX01BTExPQzIgaXMgbG9ja2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogZXhhY3RseSBpbiB0aGlzIGNhc2UgKGJ5IHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRocmVhZCBuYW1lZCBpbiBkaXNhYmxpbmdfdGhyZWFkKS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworLyogVmFsaWQgaWZmIG51bV9kaXNhYmxlID4gMC4gIENSWVBUT19MT0NLX01BTExPQzIgaXMgbG9ja2VkIGV4YWN0bHkgaW4gdGhpcworICogY2FzZSAoYnkgdGhlIHRocmVhZCBuYW1lZCBpbiBkaXNhYmxpbmdfdGhyZWFkKS4KKyAqLworc3RhdGljIENSWVBUT19USFJFQURJRCBkaXNhYmxpbmdfdGhyZWFkaWQ7CiAKIHN0YXRpYyB2b2lkIGFwcF9pbmZvX2ZyZWUoQVBQX0lORk8gKmluZikKIAl7CkBAIC0xNzcsNyArMjM2LDkgQEAKIAljYXNlIENSWVBUT19NRU1fQ0hFQ0tfRElTQUJMRTogLyogYWthIE1lbUNoZWNrX29mZigpICovCiAJCWlmIChtaF9tb2RlICYgQ1JZUFRPX01FTV9DSEVDS19PTikKIAkJCXsKLQkJCWlmICghbnVtX2Rpc2FibGUgfHwgKGRpc2FibGluZ190aHJlYWQgIT0gQ1JZUFRPX3RocmVhZF9pZCgpKSkgLyogb3RoZXJ3aXNlIHdlIGFscmVhZHkgaGF2ZSB0aGUgTUFMTE9DMiBsb2NrICovCisJCQlDUllQVE9fVEhSRUFESUQgY3VyOworCQkJQ1JZUFRPX1RIUkVBRElEX2N1cnJlbnQoJmN1cik7CisJCQlpZiAoIW51bV9kaXNhYmxlIHx8IENSWVBUT19USFJFQURJRF9jbXAoJmRpc2FibGluZ190aHJlYWRpZCwgJmN1cikpIC8qIG90aGVyd2lzZSB3ZSBhbHJlYWR5IGhhdmUgdGhlIE1BTExPQzIgbG9jayAqLwogCQkJCXsKIAkJCQkvKiBMb25nLXRpbWUgbG9jayBDUllQVE9fTE9DS19NQUxMT0MyIG11c3Qgbm90IGJlIGNsYWltZWQgd2hpbGUKIAkJCQkgKiB3ZSdyZSBob2xkaW5nIENSWVBUT19MT0NLX01BTExPQywgb3Igd2UnbGwgZGVhZGxvY2sgaWYKQEAgLTE5NSw3ICsyNTYsNyBAQAogCQkJCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfTUFMTE9DMik7CiAJCQkJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19NQUxMT0MpOwogCQkJCW1oX21vZGUgJj0gfkNSWVBUT19NRU1fQ0hFQ0tfRU5BQkxFOwotCQkJCWRpc2FibGluZ190aHJlYWQ9Q1JZUFRPX3RocmVhZF9pZCgpOworCQkJCUNSWVBUT19USFJFQURJRF9jcHkoJmRpc2FibGluZ190aHJlYWRpZCwgJmN1cik7CiAJCQkJfQogCQkJbnVtX2Rpc2FibGUrKzsKIAkJCX0KQEAgLTIyOCwxMCArMjg5LDEyIEBACiAKIAlpZiAobWhfbW9kZSAmIENSWVBUT19NRU1fQ0hFQ0tfT04pCiAJCXsKKwkJQ1JZUFRPX1RIUkVBRElEIGN1cjsKKwkJQ1JZUFRPX1RIUkVBRElEX2N1cnJlbnQoJmN1cik7CiAJCUNSWVBUT19yX2xvY2soQ1JZUFRPX0xPQ0tfTUFMTE9DKTsKIAogCQlyZXQgPSAobWhfbW9kZSAmIENSWVBUT19NRU1fQ0hFQ0tfRU5BQkxFKQotCQkJfHwgKGRpc2FibGluZ190aHJlYWQgIT0gQ1JZUFRPX3RocmVhZF9pZCgpKTsKKwkJICAgICAgICB8fCBDUllQVE9fVEhSRUFESURfY21wKCZkaXNhYmxpbmdfdGhyZWFkaWQsICZjdXIpOwogCiAJCUNSWVBUT19yX3VubG9jayhDUllQVE9fTE9DS19NQUxMT0MpOwogCQl9CkBAIC0yNDksNDkgKzMxMiw0OSBAQAogCXJldHVybiBvcHRpb25zOwogCX0KIAotLyogc3RhdGljIGludCBtZW1fY21wKE1FTSAqYSwgTUVNICpiKSAqLwotc3RhdGljIGludCBtZW1fY21wKGNvbnN0IHZvaWQgKmFfdm9pZCwgY29uc3Qgdm9pZCAqYl92b2lkKQorc3RhdGljIGludCBtZW1fY21wKGNvbnN0IE1FTSAqYSwgY29uc3QgTUVNICpiKQogCXsKICNpZmRlZiBfV0lONjQKLQljb25zdCBjaGFyICphPShjb25zdCBjaGFyICopKChjb25zdCBNRU0gKilhX3ZvaWQpLT5hZGRyLAotCQkgICAqYj0oY29uc3QgY2hhciAqKSgoY29uc3QgTUVNICopYl92b2lkKS0+YWRkcjsKLQlpZiAoYT09YikJcmV0dXJuIDA7Ci0JZWxzZSBpZiAoYT5iKQlyZXR1cm4gMTsKKwljb25zdCBjaGFyICphcD0oY29uc3QgY2hhciAqKWEtPmFkZHIsCisJCSAgICpicD0oY29uc3QgY2hhciAqKWItPmFkZHI7CisJaWYgKGFwPT1icCkJcmV0dXJuIDA7CisJZWxzZSBpZiAoYXA+YnApCXJldHVybiAxOwogCWVsc2UJCXJldHVybiAtMTsKICNlbHNlCi0JcmV0dXJuKChjb25zdCBjaGFyICopKChjb25zdCBNRU0gKilhX3ZvaWQpLT5hZGRyCi0JCS0gKGNvbnN0IGNoYXIgKikoKGNvbnN0IE1FTSAqKWJfdm9pZCktPmFkZHIpOworCXJldHVybiAoY29uc3QgY2hhciAqKWEtPmFkZHIgLSAoY29uc3QgY2hhciAqKWItPmFkZHI7CiAjZW5kaWYKIAl9CitzdGF0aWMgSU1QTEVNRU5UX0xIQVNIX0NPTVBfRk4obWVtLCBNRU0pCiAKLS8qIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1lbV9oYXNoKE1FTSAqYSkgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIG1lbV9oYXNoKGNvbnN0IHZvaWQgKmFfdm9pZCkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1lbV9oYXNoKGNvbnN0IE1FTSAqYSkKIAl7CiAJdW5zaWduZWQgbG9uZyByZXQ7CiAKLQlyZXQ9KHVuc2lnbmVkIGxvbmcpKChjb25zdCBNRU0gKilhX3ZvaWQpLT5hZGRyOworCXJldD0odW5zaWduZWQgbG9uZylhLT5hZGRyOwogCiAJcmV0PXJldCoxNzg1MSsocmV0Pj4xNCkqNysocmV0Pj40KSoyNTE7CiAJcmV0dXJuKHJldCk7CiAJfQorc3RhdGljIElNUExFTUVOVF9MSEFTSF9IQVNIX0ZOKG1lbSwgTUVNKQogCiAvKiBzdGF0aWMgaW50IGFwcF9pbmZvX2NtcChBUFBfSU5GTyAqYSwgQVBQX0lORk8gKmIpICovCiBzdGF0aWMgaW50IGFwcF9pbmZvX2NtcChjb25zdCB2b2lkICphX3ZvaWQsIGNvbnN0IHZvaWQgKmJfdm9pZCkKIAl7Ci0JcmV0dXJuKCgoY29uc3QgQVBQX0lORk8gKilhX3ZvaWQpLT50aHJlYWQKLQkJIT0gKChjb25zdCBBUFBfSU5GTyAqKWJfdm9pZCktPnRocmVhZCk7CisJcmV0dXJuIENSWVBUT19USFJFQURJRF9jbXAoJigoY29uc3QgQVBQX0lORk8gKilhX3ZvaWQpLT50aHJlYWRpZCwKKwkJCQkmKChjb25zdCBBUFBfSU5GTyAqKWJfdm9pZCktPnRocmVhZGlkKTsKIAl9CitzdGF0aWMgSU1QTEVNRU5UX0xIQVNIX0NPTVBfRk4oYXBwX2luZm8sIEFQUF9JTkZPKQogCi0vKiBzdGF0aWMgdW5zaWduZWQgbG9uZyBhcHBfaW5mb19oYXNoKEFQUF9JTkZPICphKSAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgYXBwX2luZm9faGFzaChjb25zdCB2b2lkICphX3ZvaWQpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBhcHBfaW5mb19oYXNoKGNvbnN0IEFQUF9JTkZPICphKQogCXsKIAl1bnNpZ25lZCBsb25nIHJldDsKIAotCXJldD0odW5zaWduZWQgbG9uZykoKGNvbnN0IEFQUF9JTkZPICopYV92b2lkKS0+dGhyZWFkOwotCisJcmV0ID0gQ1JZUFRPX1RIUkVBRElEX2hhc2goJmEtPnRocmVhZGlkKTsKKwkvKiBUaGlzIGlzIGxlZnQgaW4gYXMgYSAid2hvIGFtIEkgdG8gcXVlc3Rpb24gbGVnYWN5PyIgbWVhc3VyZSAqLwogCXJldD1yZXQqMTc4NTErKHJldD4+MTQpKjcrKHJldD4+NCkqMjUxOwogCXJldHVybihyZXQpOwogCX0KK3N0YXRpYyBJTVBMRU1FTlRfTEhBU0hfSEFTSF9GTihhcHBfaW5mbywgQVBQX0lORk8pCiAKIHN0YXRpYyBBUFBfSU5GTyAqcG9wX2luZm8odm9pZCkKIAl7CkBAIC0zMDAsMjEgKzM2MywyMiBAQAogCiAJaWYgKGFtaWggIT0gTlVMTCkKIAkJewotCQl0bXAudGhyZWFkPUNSWVBUT190aHJlYWRfaWQoKTsKLQkJaWYgKChyZXQ9KEFQUF9JTkZPICopbGhfZGVsZXRlKGFtaWgsJnRtcCkpICE9IE5VTEwpCisJCUNSWVBUT19USFJFQURJRF9jdXJyZW50KCZ0bXAudGhyZWFkaWQpOworCQlpZiAoKHJldD1saF9BUFBfSU5GT19kZWxldGUoYW1paCwmdG1wKSkgIT0gTlVMTCkKIAkJCXsKIAkJCUFQUF9JTkZPICpuZXh0PXJldC0+bmV4dDsKIAogCQkJaWYgKG5leHQgIT0gTlVMTCkKIAkJCQl7CiAJCQkJbmV4dC0+cmVmZXJlbmNlcysrOwotCQkJCWxoX2luc2VydChhbWloLChjaGFyICopbmV4dCk7CisJCQkJKHZvaWQpbGhfQVBQX0lORk9faW5zZXJ0KGFtaWgsbmV4dCk7CiAJCQkJfQogI2lmZGVmIExFVklUVEVfREVCVUdfTUVNCi0JCQlpZiAocmV0LT50aHJlYWQgIT0gdG1wLnRocmVhZCkKKwkJCWlmIChDUllQVE9fVEhSRUFESURfY21wKCZyZXQtPnRocmVhZGlkLCAmdG1wLnRocmVhZGlkKSkKIAkJCQl7CiAJCQkJZnByaW50ZihzdGRlcnIsICJwb3BfaW5mbygpOiBkZWxldGVkIGluZm8gaGFzIG90aGVyIHRocmVhZCBJRCAoJWx1KSB0aGFuIHRoZSBjdXJyZW50IHRocmVhZCAoJWx1KSEhISFcbiIsCi0JCQkJCXJldC0+dGhyZWFkLCB0bXAudGhyZWFkKTsKKwkJCQkJQ1JZUFRPX1RIUkVBRElEX2hhc2goJnJldC0+dGhyZWFkaWQpLAorCQkJCQlDUllQVE9fVEhSRUFESURfaGFzaCgmdG1wLnRocmVhZGlkKSk7CiAJCQkJYWJvcnQoKTsKIAkJCQl9CiAjZW5kaWYKQEAgLTMzMCw3ICszOTQsNyBAQAogCXJldHVybihyZXQpOwogCX0KIAotaW50IENSWVBUT19kYmdfcHVzaF9pbmZvKGNvbnN0IGNoYXIgKmluZm8sIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKQoraW50IENSWVBUT19wdXNoX2luZm9fKGNvbnN0IGNoYXIgKmluZm8sIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKQogCXsKIAlBUFBfSU5GTyAqYW1pLCAqYW1pbTsKIAlpbnQgcmV0PTA7CkBAIC0zNDYsNyArNDEwLDcgQEAKIAkJCX0KIAkJaWYgKGFtaWggPT0gTlVMTCkKIAkJCXsKLQkJCWlmICgoYW1paD1saF9uZXcoYXBwX2luZm9faGFzaCwgYXBwX2luZm9fY21wKSkgPT0gTlVMTCkKKwkJCWlmICgoYW1paD1saF9BUFBfSU5GT19uZXcoKSkgPT0gTlVMTCkKIAkJCQl7CiAJCQkJT1BFTlNTTF9mcmVlKGFtaSk7CiAJCQkJcmV0PTA7CkBAIC0zNTQsMjAgKzQxOCwyMSBAQAogCQkJCX0KIAkJCX0KIAotCQlhbWktPnRocmVhZD1DUllQVE9fdGhyZWFkX2lkKCk7CisJCUNSWVBUT19USFJFQURJRF9jdXJyZW50KCZhbWktPnRocmVhZGlkKTsKIAkJYW1pLT5maWxlPWZpbGU7CiAJCWFtaS0+bGluZT1saW5lOwogCQlhbWktPmluZm89aW5mbzsKIAkJYW1pLT5yZWZlcmVuY2VzPTE7CiAJCWFtaS0+bmV4dD1OVUxMOwogCi0JCWlmICgoYW1pbT0oQVBQX0lORk8gKilsaF9pbnNlcnQoYW1paCwoY2hhciAqKWFtaSkpICE9IE5VTEwpCisJCWlmICgoYW1pbT1saF9BUFBfSU5GT19pbnNlcnQoYW1paCxhbWkpKSAhPSBOVUxMKQogCQkJewogI2lmZGVmIExFVklUVEVfREVCVUdfTUVNCi0JCQlpZiAoYW1pLT50aHJlYWQgIT0gYW1pbS0+dGhyZWFkKQorCQkJaWYgKENSWVBUT19USFJFQURJRF9jbXAoJmFtaS0+dGhyZWFkaWQsICZhbWltLT50aHJlYWRpZCkpCiAJCQkJewogCQkJCWZwcmludGYoc3RkZXJyLCAiQ1JZUFRPX3B1c2hfaW5mbygpOiBwcmV2aW91cyBpbmZvIGhhcyBvdGhlciB0aHJlYWQgSUQgKCVsdSkgdGhhbiB0aGUgY3VycmVudCB0aHJlYWQgKCVsdSkhISEhXG4iLAotCQkJCQlhbWltLT50aHJlYWQsIGFtaS0+dGhyZWFkKTsKKwkJCQkJQ1JZUFRPX1RIUkVBRElEX2hhc2goJmFtaW0tPnRocmVhZGlkKSwKKwkJCQkJQ1JZUFRPX1RIUkVBRElEX2hhc2goJmFtaS0+dGhyZWFkaWQpKTsKIAkJCQlhYm9ydCgpOwogCQkJCX0KICNlbmRpZgpAQCAtMzgwLDcgKzQ0NSw3IEBACiAJcmV0dXJuKHJldCk7CiAJfQogCi1pbnQgQ1JZUFRPX2RiZ19wb3BfaW5mbyh2b2lkKQoraW50IENSWVBUT19wb3BfaW5mbyh2b2lkKQogCXsKIAlpbnQgcmV0PTA7CiAKQEAgLTM5NSw3ICs0NjAsNyBAQAogCXJldHVybihyZXQpOwogCX0KIAotaW50IENSWVBUT19kYmdfcmVtb3ZlX2FsbF9pbmZvKHZvaWQpCitpbnQgQ1JZUFRPX3JlbW92ZV9hbGxfaW5mbyh2b2lkKQogCXsKIAlpbnQgcmV0PTA7CiAKQEAgLTQzOSw3ICs1MDQsNyBAQAogCQkJCX0KIAkJCWlmIChtaCA9PSBOVUxMKQogCQkJCXsKLQkJCQlpZiAoKG1oPWxoX25ldyhtZW1faGFzaCwgbWVtX2NtcCkpID09IE5VTEwpCisJCQkJaWYgKChtaD1saF9NRU1fbmV3KCkpID09IE5VTEwpCiAJCQkJCXsKIAkJCQkJT1BFTlNTTF9mcmVlKGFkZHIpOwogCQkJCQlPUEVOU1NMX2ZyZWUobSk7CkBAIC00NTMsOSArNTE4LDkgQEAKIAkJCW0tPmxpbmU9bGluZTsKIAkJCW0tPm51bT1udW07CiAJCQlpZiAob3B0aW9ucyAmIFZfQ1JZUFRPX01ERUJVR19USFJFQUQpCi0JCQkJbS0+dGhyZWFkPUNSWVBUT190aHJlYWRfaWQoKTsKKwkJCQlDUllQVE9fVEhSRUFESURfY3VycmVudCgmbS0+dGhyZWFkaWQpOwogCQkJZWxzZQotCQkJCW0tPnRocmVhZD0wOworCQkJCW1lbXNldCgmbS0+dGhyZWFkaWQsIDAsIHNpemVvZihtLT50aHJlYWRpZCkpOwogCiAJCQlpZiAob3JkZXIgPT0gYnJlYWtfb3JkZXJfbnVtKQogCQkJCXsKQEAgLTQ2NCw3ICs1MjksNyBAQAogCQkJCX0KIAkJCW0tPm9yZGVyPW9yZGVyKys7CiAjaWZkZWYgTEVWSVRURV9ERUJVR19NRU0KLQkJCWZwcmludGYoc3RkZXJyLCAiTEVWSVRURV9ERUJVR19NRU06IFslNWRdICVjIDB4JXAgKCVkKVxuIiwKKwkJCWZwcmludGYoc3RkZXJyLCAiTEVWSVRURV9ERUJVR19NRU06IFslNWxkXSAlYyAweCVwICglZClcbiIsCiAJCQkJbS0+b3JkZXIsCiAJCQkJKGJlZm9yZV9wICYgMTI4KSA/ICcqJyA6ICcrJywKIAkJCQltLT5hZGRyLCBtLT5udW0pOwpAQCAtNDc0LDE2ICs1MzksMTYgQEAKIAkJCWVsc2UKIAkJCQltLT50aW1lPTA7CiAKLQkJCXRtcC50aHJlYWQ9Q1JZUFRPX3RocmVhZF9pZCgpOworCQkJQ1JZUFRPX1RIUkVBRElEX2N1cnJlbnQoJnRtcC50aHJlYWRpZCk7CiAJCQltLT5hcHBfaW5mbz1OVUxMOwogCQkJaWYgKGFtaWggIT0gTlVMTAotCQkJCSYmIChhbWltPShBUFBfSU5GTyAqKWxoX3JldHJpZXZlKGFtaWgsKGNoYXIgKikmdG1wKSkgIT0gTlVMTCkKKwkJCSAgICAmJiAoYW1pbT1saF9BUFBfSU5GT19yZXRyaWV2ZShhbWloLCZ0bXApKSAhPSBOVUxMKQogCQkJCXsKIAkJCQltLT5hcHBfaW5mbyA9IGFtaW07CiAJCQkJYW1pbS0+cmVmZXJlbmNlcysrOwogCQkJCX0KIAotCQkJaWYgKChtbT0oTUVNICopbGhfaW5zZXJ0KG1oLChjaGFyICopbSkpICE9IE5VTEwpCisJCQlpZiAoKG1tPWxoX01FTV9pbnNlcnQobWgsIG0pKSAhPSBOVUxMKQogCQkJCXsKIAkJCQkvKiBOb3QgZ29vZCwgYnV0IGRvbid0IHN3ZWF0IGl0ICovCiAJCQkJaWYgKG1tLT5hcHBfaW5mbyAhPSBOVUxMKQpAQCAtNTE2LDExICs1ODEsMTEgQEAKIAkJCU1lbUNoZWNrX29mZigpOyAvKiBtYWtlIHN1cmUgd2UgaG9sZCBNQUxMT0MyIGxvY2sgKi8KIAogCQkJbS5hZGRyPWFkZHI7Ci0JCQltcD0oTUVNICopbGhfZGVsZXRlKG1oLChjaGFyICopJm0pOworCQkJbXA9bGhfTUVNX2RlbGV0ZShtaCwmbSk7CiAJCQlpZiAobXAgIT0gTlVMTCkKIAkJCQl7CiAjaWZkZWYgTEVWSVRURV9ERUJVR19NRU0KLQkJCWZwcmludGYoc3RkZXJyLCAiTEVWSVRURV9ERUJVR19NRU06IFslNWRdIC0gMHglcCAoJWQpXG4iLAorCQkJZnByaW50ZihzdGRlcnIsICJMRVZJVFRFX0RFQlVHX01FTTogWyU1bGRdIC0gMHglcCAoJWQpXG4iLAogCQkJCW1wLT5vcmRlciwgbXAtPmFkZHIsIG1wLT5udW0pOwogI2VuZGlmCiAJCQkJaWYgKG1wLT5hcHBfaW5mbyAhPSBOVUxMKQpAQCAtNTY2LDE4ICs2MzEsMTggQEAKIAkJCU1lbUNoZWNrX29mZigpOyAvKiBtYWtlIHN1cmUgd2UgaG9sZCBNQUxMT0MyIGxvY2sgKi8KIAogCQkJbS5hZGRyPWFkZHIxOwotCQkJbXA9KE1FTSAqKWxoX2RlbGV0ZShtaCwoY2hhciAqKSZtKTsKKwkJCW1wPWxoX01FTV9kZWxldGUobWgsJm0pOwogCQkJaWYgKG1wICE9IE5VTEwpCiAJCQkJewogI2lmZGVmIExFVklUVEVfREVCVUdfTUVNCi0JCQkJZnByaW50ZihzdGRlcnIsICJMRVZJVFRFX0RFQlVHX01FTTogWyU1ZF0gKiAweCVwICglZCkgLT4gMHglcCAoJWQpXG4iLAorCQkJCWZwcmludGYoc3RkZXJyLCAiTEVWSVRURV9ERUJVR19NRU06IFslNWxkXSAqIDB4JXAgKCVkKSAtPiAweCVwICglZClcbiIsCiAJCQkJCW1wLT5vcmRlciwKIAkJCQkJbXAtPmFkZHIsIG1wLT5udW0sCiAJCQkJCWFkZHIyLCBudW0pOwogI2VuZGlmCiAJCQkJbXAtPmFkZHI9YWRkcjI7CiAJCQkJbXAtPm51bT1udW07Ci0JCQkJbGhfaW5zZXJ0KG1oLChjaGFyICopbXApOworCQkJCSh2b2lkKWxoX01FTV9pbnNlcnQobWgsbXApOwogCQkJCX0KIAogCQkJTWVtQ2hlY2tfb24oKTsgLyogcmVsZWFzZSBNQUxMT0MyIGxvY2sKQEAgLTU5NiwxNCArNjYxLDE0IEBACiAJbG9uZyBieXRlczsKIAl9IE1FTV9MRUFLOwogCi1zdGF0aWMgdm9pZCBwcmludF9sZWFrKGNvbnN0IE1FTSAqbSwgTUVNX0xFQUsgKmwpCitzdGF0aWMgdm9pZCBwcmludF9sZWFrX2RvYWxsX2FyZyhjb25zdCBNRU0gKm0sIE1FTV9MRUFLICpsKQogCXsKIAljaGFyIGJ1ZlsxMDI0XTsKIAljaGFyICpidWZwID0gYnVmOwogCUFQUF9JTkZPICphbWlwOwogCWludCBhbWlfY250OwogCXN0cnVjdCB0bSAqbGNsID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIHRpOworCUNSWVBUT19USFJFQURJRCB0aTsKIAogI2RlZmluZSBCVUZfUkVNQUlOIChzaXplb2YgYnVmIC0gKHNpemVfdCkoYnVmcCAtIGJ1ZikpCiAKQEAgLTYyNSw3ICs2OTAsOCBAQAogCiAJaWYgKG9wdGlvbnMgJiBWX0NSWVBUT19NREVCVUdfVEhSRUFEKQogCQl7Ci0JCUJJT19zbnByaW50ZihidWZwLCBCVUZfUkVNQUlOLCAidGhyZWFkPSVsdSwgIiwgbS0+dGhyZWFkKTsKKwkJQklPX3NucHJpbnRmKGJ1ZnAsIEJVRl9SRU1BSU4sICJ0aHJlYWQ9JWx1LCAiLAorCQkJQ1JZUFRPX1RIUkVBRElEX2hhc2goJm0tPnRocmVhZGlkKSk7CiAJCWJ1ZnAgKz0gc3RybGVuKGJ1ZnApOwogCQl9CiAKQEAgLTY0Miw4ICs3MDgsOCBAQAogCWFtaV9jbnQ9MDsKIAlpZiAoIWFtaXApCiAJCXJldHVybjsKLQl0aT1hbWlwLT50aHJlYWQ7Ci0JCisJQ1JZUFRPX1RIUkVBRElEX2NweSgmdGksICZhbWlwLT50aHJlYWRpZCk7CisKIAlkbwogCQl7CiAJCWludCBidWZfbGVuOwpAQCAtNjUzLDcgKzcxOSw4IEBACiAJCW1lbXNldChidWYsJz4nLGFtaV9jbnQpOwogCQlCSU9fc25wcmludGYoYnVmICsgYW1pX2NudCwgc2l6ZW9mIGJ1ZiAtIGFtaV9jbnQsCiAJCQkiIHRocmVhZD0lbHUsIGZpbGU9JXMsIGxpbmU9JWQsIGluZm89XCIiLAotCQkJYW1pcC0+dGhyZWFkLCBhbWlwLT5maWxlLCBhbWlwLT5saW5lKTsKKwkJCUNSWVBUT19USFJFQURJRF9oYXNoKCZhbWlwLT50aHJlYWRpZCksIGFtaXAtPmZpbGUsCisJCQlhbWlwLT5saW5lKTsKIAkJYnVmX2xlbj1zdHJsZW4oYnVmKTsKIAkJaW5mb19sZW49c3RybGVuKGFtaXAtPmluZm8pOwogCQlpZiAoMTI4IC0gYnVmX2xlbiAtIDMgPCBpbmZvX2xlbikKQEAgLTY3Myw4ICs3NDAsOCBAQAogCiAJCWFtaXAgPSBhbWlwLT5uZXh0OwogCQl9Ci0Jd2hpbGUoYW1pcCAmJiBhbWlwLT50aHJlYWQgPT0gdGkpOwotCQkKKwl3aGlsZShhbWlwICYmICFDUllQVE9fVEhSRUFESURfY21wKCZhbWlwLT50aHJlYWRpZCwgJnRpKSk7CisKICNpZmRlZiBMRVZJVFRFX0RFQlVHX01FTQogCWlmIChhbWlwKQogCQl7CkBAIC02ODQsNyArNzUxLDcgQEAKICNlbmRpZgogCX0KIAotc3RhdGljIElNUExFTUVOVF9MSEFTSF9ET0FMTF9BUkdfRk4ocHJpbnRfbGVhaywgY29uc3QgTUVNICosIE1FTV9MRUFLICopCitzdGF0aWMgSU1QTEVNRU5UX0xIQVNIX0RPQUxMX0FSR19GTihwcmludF9sZWFrLCBjb25zdCBNRU0sIE1FTV9MRUFLKQogCiB2b2lkIENSWVBUT19tZW1fbGVha3MoQklPICpiKQogCXsKQEAgLTY5OSwxMiArNzY2LDE1IEBACiAJbWwuYnl0ZXM9MDsKIAltbC5jaHVua3M9MDsKIAlpZiAobWggIT0gTlVMTCkKLQkJbGhfZG9hbGxfYXJnKG1oLCBMSEFTSF9ET0FMTF9BUkdfRk4ocHJpbnRfbGVhayksCi0JCQkJKGNoYXIgKikmbWwpOworCQlsaF9NRU1fZG9hbGxfYXJnKG1oLCBMSEFTSF9ET0FMTF9BUkdfRk4ocHJpbnRfbGVhayksIE1FTV9MRUFLLAorCQkJCSAmbWwpOwogCWlmIChtbC5jaHVua3MgIT0gMCkKIAkJewogCQlCSU9fcHJpbnRmKGIsIiVsZCBieXRlcyBsZWFrZWQgaW4gJWQgY2h1bmtzXG4iLAogCQkJICAgbWwuYnl0ZXMsbWwuY2h1bmtzKTsKKyNpZmRlZiBDUllQVE9fTURFQlVHX0FCT1JUCisJCWFib3J0KCk7CisjZW5kaWYKIAkJfQogCWVsc2UKIAkJewpAQCAtNzE3LDcgKzc4Nyw3IEBACiAJCSAqIFhYWCAgICBUaGlzIHNob3VsZCBiZSBpbiBDUllQVE9fbWVtX2xlYWtzX2NiLAogCQkgKiBhbmQgQ1JZUFRPX21lbV9sZWFrcyBzaG91bGQgYmUgaW1wbGVtZW50ZWQgYnkKIAkJICogdXNpbmcgQ1JZUFRPX21lbV9sZWFrc19jYi4KLQkJICogKEFsc28gdGhlaXIgc2hvdWxkIGJlIGEgdmFyaWFudCBvZiBsaF9kb2FsbF9hcmcKKwkJICogKEFsc28gdGhlcmUgc2hvdWxkIGJlIGEgdmFyaWFudCBvZiBsaF9kb2FsbF9hcmcKIAkJICogdGhhdCB0YWtlcyBhIGZ1bmN0aW9uIHBvaW50ZXIgaW5zdGVhZCBvZiBhIHZvaWQgKjsKIAkJICogdGhpcyB3b3VsZCBvYnZpYXRlIHRoZSB1Z2x5IGFuZCBpbGxlZ2FsCiAJCSAqIHZvaWRfZm5fdG9fY2hhciBrbHVkZ2UgaW4gQ1JZUFRPX21lbV9sZWFrc19jYi4KQEAgLTczNCwxNCArODA0LDE0IEBACiAKIAkJaWYgKG1oICE9IE5VTEwpCiAJCQl7Ci0JCQlsaF9mcmVlKG1oKTsKKwkJCWxoX01FTV9mcmVlKG1oKTsKIAkJCW1oID0gTlVMTDsKIAkJCX0KIAkJaWYgKGFtaWggIT0gTlVMTCkKIAkJCXsKLQkJCWlmIChsaF9udW1faXRlbXMoYW1paCkgPT0gMCkgCisJCQlpZiAobGhfQVBQX0lORk9fbnVtX2l0ZW1zKGFtaWgpID09IDApIAogCQkJCXsKLQkJCQlsaF9mcmVlKGFtaWgpOworCQkJCWxoX0FQUF9JTkZPX2ZyZWUoYW1paCk7CiAJCQkJYW1paCA9IE5VTEw7CiAJCQkJfQogCQkJfQpAQCAtNzc5LDM5ICs4NDksMjYgQEAKIC8qIE5COiBUaGUgcHJvdG90eXBlcyBoYXZlIGJlZW4gdHlwZWRlZidkIHRvIENSWVBUT19NRU1fTEVBS19DQiBpbnNpZGUgY3J5cHRvLmgKICAqIElmIHRoaXMgY29kZSBpcyByZXN0cnVjdHVyZWQsIHJlbW92ZSB0aGUgY2FsbGJhY2sgdHlwZSBpZiBpdCBpcyBubyBsb25nZXIKICAqIG5lZWRlZC4gLS0gR2VvZmYgVGhvcnBlICovCi1zdGF0aWMgdm9pZCBjYl9sZWFrKGNvbnN0IE1FTSAqbSwgQ1JZUFRPX01FTV9MRUFLX0NCICoqY2IpCisKKy8qIENhbid0IHBhc3MgQ1JZUFRPX01FTV9MRUFLX0NCIGRpcmVjdGx5IHRvIGxoX01FTV9kb2FsbF9hcmcgYmVjYXVzZSBpdAorICogaXMgYSBmdW5jdGlvbiBwb2ludGVyIGFuZCBjb252ZXJzaW9uIHRvIHZvaWQgKiBpcyBwcm9oaWJpdGVkLiBJbnN0ZWFkCisgKiBwYXNzIGl0cyBhZGRyZXNzCisgKi8KKwordHlwZWRlZiBDUllQVE9fTUVNX0xFQUtfQ0IgKlBDUllQVE9fTUVNX0xFQUtfQ0I7CisKK3N0YXRpYyB2b2lkIGNiX2xlYWtfZG9hbGxfYXJnKGNvbnN0IE1FTSAqbSwgUENSWVBUT19NRU1fTEVBS19DQiAqY2IpCiAJewotCSgqKmNiKShtLT5vcmRlcixtLT5maWxlLG0tPmxpbmUsbS0+bnVtLG0tPmFkZHIpOworCSgqY2IpKG0tPm9yZGVyLG0tPmZpbGUsbS0+bGluZSxtLT5udW0sbS0+YWRkcik7CiAJfQogCi1zdGF0aWMgSU1QTEVNRU5UX0xIQVNIX0RPQUxMX0FSR19GTihjYl9sZWFrLCBjb25zdCBNRU0gKiwgQ1JZUFRPX01FTV9MRUFLX0NCICoqKQorc3RhdGljIElNUExFTUVOVF9MSEFTSF9ET0FMTF9BUkdfRk4oY2JfbGVhaywgY29uc3QgTUVNLCBQQ1JZUFRPX01FTV9MRUFLX0NCKQogCiB2b2lkIENSWVBUT19tZW1fbGVha3NfY2IoQ1JZUFRPX01FTV9MRUFLX0NCICpjYikKIAl7CiAJaWYgKG1oID09IE5VTEwpIHJldHVybjsKIAlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX01BTExPQzIpOwotCWxoX2RvYWxsX2FyZyhtaCwgTEhBU0hfRE9BTExfQVJHX0ZOKGNiX2xlYWspLCAmY2IpOworCWxoX01FTV9kb2FsbF9hcmcobWgsIExIQVNIX0RPQUxMX0FSR19GTihjYl9sZWFrKSwgUENSWVBUT19NRU1fTEVBS19DQiwKKwkJCSAmY2IpOwogCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19NQUxMT0MyKTsKIAl9Ci0KLXZvaWQgQ1JZUFRPX21hbGxvY19kZWJ1Z19pbml0KHZvaWQpCi0JewotCUNSWVBUT19zZXRfbWVtX2RlYnVnX2Z1bmN0aW9ucygKLQkJQ1JZUFRPX2RiZ19tYWxsb2MsCi0JCUNSWVBUT19kYmdfcmVhbGxvYywKLQkJQ1JZUFRPX2RiZ19mcmVlLAotCQlDUllQVE9fZGJnX3NldF9vcHRpb25zLAotCQlDUllQVE9fZGJnX2dldF9vcHRpb25zKTsKLQlDUllQVE9fc2V0X21lbV9pbmZvX2Z1bmN0aW9ucygKLQkJQ1JZUFRPX2RiZ19wdXNoX2luZm8sCi0JCUNSWVBUT19kYmdfcG9wX2luZm8sCi0JCUNSWVBUT19kYmdfcmVtb3ZlX2FsbF9pbmZvKTsKLQl9Ci0KLWNoYXIgKkNSWVBUT19zdHJkdXAoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSkKLQl7Ci0JY2hhciAqcmV0ID0gQ1JZUFRPX21hbGxvYyhzdHJsZW4oc3RyKSsxLCBmaWxlLCBsaW5lKTsKLQotCXN0cmNweShyZXQsIHN0cik7Ci0JcmV0dXJuIHJldDsKLQl9CmRpZmYgLS1naXQgYS9jcnlwdG8vbW9kZXMvY2JjMTI4LmMgYi9jcnlwdG8vbW9kZXMvY2JjMTI4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY4YmQ1NgotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9tb2Rlcy9jYmMxMjguYwpAQCAtMCwwICsxLDIwNiBAQAorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoYykgMjAwOCBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKyAqCisgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisgKgorICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisgKgorICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworICogICAgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKi8KKworI2luY2x1ZGUgIm1vZGVzLmgiCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZm5kZWYgTU9ERVNfREVCVUcKKyMgaWZuZGVmIE5ERUJVRworIyAgZGVmaW5lIE5ERUJVRworIyBlbmRpZgorI2VuZGlmCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNkZWZpbmUgU1RSSUNUX0FMSUdOTUVOVCAxCisjaWYgZGVmaW5lZChfX2kzODYpIHx8IGRlZmluZWQoX19pMzg2X18pIHx8IFwKKyAgICBkZWZpbmVkKF9feDg2XzY0KSB8fCBkZWZpbmVkKF9feDg2XzY0X18pIHx8IFwKKyAgICBkZWZpbmVkKF9NX0lYODYpIHx8IGRlZmluZWQoX01fQU1ENjQpIHx8IGRlZmluZWQoX01fWDY0KSB8fCBcCisgICAgZGVmaW5lZChfX3MzOTBfXykgfHwgZGVmaW5lZChfX3MzOTB4X18pCisjICB1bmRlZiBTVFJJQ1RfQUxJR05NRU5UCisjICBkZWZpbmUgU1RSSUNUX0FMSUdOTUVOVCAwCisjZW5kaWYKKwordm9pZCBDUllQVE9fY2JjMTI4X2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCXNpemVfdCBsZW4sIGNvbnN0IHZvaWQgKmtleSwKKwkJCXVuc2lnbmVkIGNoYXIgaXZlY1sxNl0sIGJsb2NrMTI4X2YgYmxvY2spCit7CisJc2l6ZV90IG47CisJY29uc3QgdW5zaWduZWQgY2hhciAqaXYgPSBpdmVjOworCisJYXNzZXJ0KGluICYmIG91dCAmJiBrZXkgJiYgaXZlYyk7CisKKyNpZiAhZGVmaW5lZChPUEVOU1NMX1NNQUxMX0ZPT1RQUklOVCkKKwlpZiAoU1RSSUNUX0FMSUdOTUVOVCAmJgorCSAgICAoKHNpemVfdClpbnwoc2l6ZV90KW91dHwoc2l6ZV90KWl2ZWMpJXNpemVvZihzaXplX3QpICE9IDApIHsKKwkJd2hpbGUgKGxlbj49MTYpIHsKKwkJCWZvcihuPTA7IG48MTY7ICsrbikKKwkJCQlvdXRbbl0gPSBpbltuXSBeIGl2W25dOworCQkJKCpibG9jaykob3V0LCBvdXQsIGtleSk7CisJCQlpdiA9IG91dDsKKwkJCWxlbiAtPSAxNjsKKwkJCWluICArPSAxNjsKKwkJCW91dCArPSAxNjsKKwkJfQorCX0gZWxzZSB7CisJCXdoaWxlIChsZW4+PTE2KSB7CisJCQlmb3Iobj0wOyBuPDE2OyBuKz1zaXplb2Yoc2l6ZV90KSkKKwkJCQkqKHNpemVfdCopKG91dCtuKSA9CisJCQkJKihzaXplX3QqKShpbituKSBeICooc2l6ZV90KikoaXYrbik7CisJCQkoKmJsb2NrKShvdXQsIG91dCwga2V5KTsKKwkJCWl2ID0gb3V0OworCQkJbGVuIC09IDE2OworCQkJaW4gICs9IDE2OworCQkJb3V0ICs9IDE2OworCQl9CisJfQorI2VuZGlmCisJd2hpbGUgKGxlbikgeworCQlmb3Iobj0wOyBuPDE2ICYmIG48bGVuOyArK24pCisJCQlvdXRbbl0gPSBpbltuXSBeIGl2W25dOworCQlmb3IoOyBuPDE2OyArK24pCisJCQlvdXRbbl0gPSBpdltuXTsKKwkJKCpibG9jaykob3V0LCBvdXQsIGtleSk7CisJCWl2ID0gb3V0OworCQlpZiAobGVuPD0xNikgYnJlYWs7CisJCWxlbiAtPSAxNjsKKwkJaW4gICs9IDE2OworCQlvdXQgKz0gMTY7CisJfQorCW1lbWNweShpdmVjLGl2LDE2KTsKK30KKwordm9pZCBDUllQVE9fY2JjMTI4X2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCXNpemVfdCBsZW4sIGNvbnN0IHZvaWQgKmtleSwKKwkJCXVuc2lnbmVkIGNoYXIgaXZlY1sxNl0sIGJsb2NrMTI4X2YgYmxvY2spCit7CisJc2l6ZV90IG47CisJdW5pb24geyBzaXplX3QgYWxpZ247IHVuc2lnbmVkIGNoYXIgY1sxNl07IH0gdG1wOworCisJYXNzZXJ0KGluICYmIG91dCAmJiBrZXkgJiYgaXZlYyk7CisKKyNpZiAhZGVmaW5lZChPUEVOU1NMX1NNQUxMX0ZPT1RQUklOVCkKKwlpZiAoaW4gIT0gb3V0KSB7CisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKml2ID0gaXZlYzsKKworCQlpZiAoU1RSSUNUX0FMSUdOTUVOVCAmJgorCQkgICAgKChzaXplX3QpaW58KHNpemVfdClvdXR8KHNpemVfdClpdmVjKSVzaXplb2Yoc2l6ZV90KSAhPSAwKSB7CisJCQl3aGlsZSAobGVuPj0xNikgeworCQkJCSgqYmxvY2spKGluLCBvdXQsIGtleSk7CisJCQkJZm9yKG49MDsgbjwxNjsgKytuKQorCQkJCQlvdXRbbl0gXj0gaXZbbl07CisJCQkJaXYgPSBpbjsKKwkJCQlsZW4gLT0gMTY7CisJCQkJaW4gICs9IDE2OworCQkJCW91dCArPSAxNjsKKwkJCX0KKwkJfQorCQllbHNlIHsKKwkJCXdoaWxlIChsZW4+PTE2KSB7CisJCQkJKCpibG9jaykoaW4sIG91dCwga2V5KTsKKwkJCQlmb3Iobj0wOyBuPDE2OyBuKz1zaXplb2Yoc2l6ZV90KSkKKwkJCQkJKihzaXplX3QgKikob3V0K24pIF49ICooc2l6ZV90ICopKGl2K24pOworCQkJCWl2ID0gaW47CisJCQkJbGVuIC09IDE2OworCQkJCWluICArPSAxNjsKKwkJCQlvdXQgKz0gMTY7CisJCQl9CisJCX0KKwkJbWVtY3B5KGl2ZWMsaXYsMTYpOworCX0gZWxzZSB7CisJCWlmIChTVFJJQ1RfQUxJR05NRU5UICYmCisJCSAgICAoKHNpemVfdClpbnwoc2l6ZV90KW91dHwoc2l6ZV90KWl2ZWMpJXNpemVvZihzaXplX3QpICE9IDApIHsKKwkJCXVuc2lnbmVkIGNoYXIgYzsKKwkJCXdoaWxlIChsZW4+PTE2KSB7CisJCQkJKCpibG9jaykoaW4sIHRtcC5jLCBrZXkpOworCQkJCWZvcihuPTA7IG48MTY7ICsrbikgeworCQkJCQljID0gaW5bbl07CisJCQkJCW91dFtuXSA9IHRtcC5jW25dIF4gaXZlY1tuXTsKKwkJCQkJaXZlY1tuXSA9IGM7CisJCQkJfQorCQkJCWxlbiAtPSAxNjsKKwkJCQlpbiAgKz0gMTY7CisJCQkJb3V0ICs9IDE2OworCQkJfQorCQl9CisJCWVsc2UgeworCQkJc2l6ZV90IGM7CisJCQl3aGlsZSAobGVuPj0xNikgeworCQkJCSgqYmxvY2spKGluLCB0bXAuYywga2V5KTsKKwkJCQlmb3Iobj0wOyBuPDE2OyBuKz1zaXplb2Yoc2l6ZV90KSkgeworCQkJCQljID0gKihzaXplX3QgKikoaW4rbik7CisJCQkJCSooc2l6ZV90ICopKG91dCtuKSA9CisJCQkJCSooc2l6ZV90ICopKHRtcC5jK24pIF4gKihzaXplX3QgKikoaXZlYytuKTsKKwkJCQkJKihzaXplX3QgKikoaXZlYytuKSA9IGM7CisJCQkJfQorCQkJCWxlbiAtPSAxNjsKKwkJCQlpbiAgKz0gMTY7CisJCQkJb3V0ICs9IDE2OworCQkJfQorCQl9CisJfQorI2VuZGlmCisJd2hpbGUgKGxlbikgeworCQl1bnNpZ25lZCBjaGFyIGM7CisJCSgqYmxvY2spKGluLCB0bXAuYywga2V5KTsKKwkJZm9yKG49MDsgbjwxNiAmJiBuPGxlbjsgKytuKSB7CisJCQljID0gaW5bbl07CisJCQlvdXRbbl0gPSB0bXAuY1tuXSBeIGl2ZWNbbl07CisJCQlpdmVjW25dID0gYzsKKwkJfQorCQlpZiAobGVuPD0xNikgeworCQkJZm9yICg7IG48MTY7ICsrbikKKwkJCQlpdmVjW25dID0gaW5bbl07CisJCQlicmVhazsKKwkJfQorCQlsZW4gLT0gMTY7CisJCWluICArPSAxNjsKKwkJb3V0ICs9IDE2OworCX0KK30KZGlmZiAtLWdpdCBhL2NyeXB0by9tb2Rlcy9jZmIxMjguYyBiL2NyeXB0by9tb2Rlcy9jZmIxMjguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGY0Y2YzCi0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL21vZGVzL2NmYjEyOC5jCkBAIC0wLDAgKzEsMjQ5IEBACisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChjKSAyMDA4IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorICoKKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKyAqCisgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKyAqCisgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisgKiAgICBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqLworCisjaW5jbHVkZSAibW9kZXMuaCIKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmbmRlZiBNT0RFU19ERUJVRworIyBpZm5kZWYgTkRFQlVHCisjICBkZWZpbmUgTkRFQlVHCisjIGVuZGlmCisjZW5kaWYKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworI2RlZmluZSBTVFJJQ1RfQUxJR05NRU5UCisjaWYgZGVmaW5lZChfX2kzODYpIHx8IGRlZmluZWQoX19pMzg2X18pIHx8IFwKKyAgICBkZWZpbmVkKF9feDg2XzY0KSB8fCBkZWZpbmVkKF9feDg2XzY0X18pIHx8IFwKKyAgICBkZWZpbmVkKF9NX0lYODYpIHx8IGRlZmluZWQoX01fQU1ENjQpIHx8IGRlZmluZWQoX01fWDY0KSB8fCBcCisgICAgZGVmaW5lZChfX3MzOTBfXykgfHwgZGVmaW5lZChfX3MzOTB4X18pCisjICB1bmRlZiBTVFJJQ1RfQUxJR05NRU5UCisjZW5kaWYKKworLyogVGhlIGlucHV0IGFuZCBvdXRwdXQgZW5jcnlwdGVkIGFzIHRob3VnaCAxMjhiaXQgY2ZiIG1vZGUgaXMgYmVpbmcKKyAqIHVzZWQuICBUaGUgZXh0cmEgc3RhdGUgaW5mb3JtYXRpb24gdG8gcmVjb3JkIGhvdyBtdWNoIG9mIHRoZQorICogMTI4Yml0IGJsb2NrIHdlIGhhdmUgdXNlZCBpcyBjb250YWluZWQgaW4gKm51bTsKKyAqLwordm9pZCBDUllQVE9fY2ZiMTI4X2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCXNpemVfdCBsZW4sIGNvbnN0IHZvaWQgKmtleSwKKwkJCXVuc2lnbmVkIGNoYXIgaXZlY1sxNl0sIGludCAqbnVtLAorCQkJaW50IGVuYywgYmxvY2sxMjhfZiBibG9jaykKK3sKKyAgICB1bnNpZ25lZCBpbnQgbjsKKyAgICBzaXplX3QgbCA9IDA7CisKKyAgICBhc3NlcnQoaW4gJiYgb3V0ICYmIGtleSAmJiBpdmVjICYmIG51bSk7CisKKyAgICBuID0gKm51bTsKKworICAgIGlmIChlbmMpIHsKKyNpZiAhZGVmaW5lZChPUEVOU1NMX1NNQUxMX0ZPT1RQUklOVCkKKwlpZiAoMTYlc2l6ZW9mKHNpemVfdCkgPT0gMCkgZG8gewkvKiBhbHdheXMgdHJ1ZSBhY3R1YWxseSAqLworCQl3aGlsZSAobiAmJiBsZW4pIHsKKwkJCSoob3V0KyspID0gaXZlY1tuXSBePSAqKGluKyspOworCQkJLS1sZW47CisJCQluID0gKG4rMSkgJSAxNjsKKwkJfQorI2lmIGRlZmluZWQoU1RSSUNUX0FMSUdOTUVOVCkKKwkJaWYgKCgoc2l6ZV90KWlufChzaXplX3Qpb3V0fChzaXplX3QpaXZlYyklc2l6ZW9mKHNpemVfdCkgIT0gMCkKKwkJCWJyZWFrOworI2VuZGlmCisJCXdoaWxlIChsZW4+PTE2KSB7CisJCQkoKmJsb2NrKShpdmVjLCBpdmVjLCBrZXkpOworCQkJZm9yIChuPTA7IG48MTY7IG4rPXNpemVvZihzaXplX3QpKSB7CisJCQkJKihzaXplX3QqKShvdXQrbikgPQorCQkJCSooc2l6ZV90KikoaXZlYytuKSBePSAqKHNpemVfdCopKGluK24pOworCQkJfQorCQkJbGVuIC09IDE2OworCQkJb3V0ICs9IDE2OworCQkJaW4gICs9IDE2OworCQl9CisJCW4gPSAwOworCQlpZiAobGVuKSB7CisJCQkoKmJsb2NrKShpdmVjLCBpdmVjLCBrZXkpOworCQkJd2hpbGUgKGxlbi0tKSB7CisJCQkJb3V0W25dID0gaXZlY1tuXSBePSBpbltuXTsKKwkJCQkrK247CisJCQl9CisJCX0KKwkJKm51bSA9IG47CisJCXJldHVybjsKKwl9IHdoaWxlICgwKTsKKwkvKiB0aGUgcmVzdCB3b3VsZCBiZSBjb21tb25seSBlbGltaW5hdGVkIGJ5IHg4NiogY29tcGlsZXIgKi8KKyNlbmRpZgorCXdoaWxlIChsPGxlbikgeworCQlpZiAobiA9PSAwKSB7CisJCQkoKmJsb2NrKShpdmVjLCBpdmVjLCBrZXkpOworCQl9CisJCW91dFtsXSA9IGl2ZWNbbl0gXj0gaW5bbF07CisJCSsrbDsKKwkJbiA9IChuKzEpICUgMTY7CisJfQorCSpudW0gPSBuOworICAgIH0gZWxzZSB7CisjaWYgIWRlZmluZWQoT1BFTlNTTF9TTUFMTF9GT09UUFJJTlQpCisJaWYgKDE2JXNpemVvZihzaXplX3QpID09IDApIGRvIHsJLyogYWx3YXlzIHRydWUgYWN0dWFsbHkgKi8KKwkJd2hpbGUgKG4gJiYgbGVuKSB7CisJCQl1bnNpZ25lZCBjaGFyIGM7CisJCQkqKG91dCsrKSA9IGl2ZWNbbl0gXiAoYyA9ICooaW4rKykpOyBpdmVjW25dID0gYzsKKwkJCS0tbGVuOworCQkJbiA9IChuKzEpICUgMTY7CisgCQl9CisjaWYgZGVmaW5lZChTVFJJQ1RfQUxJR05NRU5UKQorCQlpZiAoKChzaXplX3QpaW58KHNpemVfdClvdXR8KHNpemVfdClpdmVjKSVzaXplb2Yoc2l6ZV90KSAhPSAwKQorCQkJYnJlYWs7CisjZW5kaWYKKwkJd2hpbGUgKGxlbj49MTYpIHsKKwkJCSgqYmxvY2spKGl2ZWMsIGl2ZWMsIGtleSk7CisJCQlmb3IgKG49MDsgbjwxNjsgbis9c2l6ZW9mKHNpemVfdCkpIHsKKwkJCQlzaXplX3QgdCA9ICooc2l6ZV90KikoaW4rbik7CisJCQkJKihzaXplX3QqKShvdXQrbikgPSAqKHNpemVfdCopKGl2ZWMrbikgXiB0OworCQkJCSooc2l6ZV90KikoaXZlYytuKSA9IHQ7CisJCQl9CisJCQlsZW4gLT0gMTY7CisJCQlvdXQgKz0gMTY7CisJCQlpbiAgKz0gMTY7CisJCX0KKwkJbiA9IDA7CisJCWlmIChsZW4pIHsKKwkJCSgqYmxvY2spKGl2ZWMsIGl2ZWMsIGtleSk7CisJCQl3aGlsZSAobGVuLS0pIHsKKwkJCQl1bnNpZ25lZCBjaGFyIGM7CisJCQkJb3V0W25dID0gaXZlY1tuXSBeIChjID0gaW5bbl0pOyBpdmVjW25dID0gYzsKKwkJCQkrK247CisJCQl9CisgCQl9CisJCSpudW0gPSBuOworCQlyZXR1cm47CisJfSB3aGlsZSAoMCk7CisJLyogdGhlIHJlc3Qgd291bGQgYmUgY29tbW9ubHkgZWxpbWluYXRlZCBieSB4ODYqIGNvbXBpbGVyICovCisjZW5kaWYKKwl3aGlsZSAobDxsZW4pIHsKKwkJdW5zaWduZWQgY2hhciBjOworCQlpZiAobiA9PSAwKSB7CisJCQkoKmJsb2NrKShpdmVjLCBpdmVjLCBrZXkpOworCQl9CisJCW91dFtsXSA9IGl2ZWNbbl0gXiAoYyA9IGluW2xdKTsgaXZlY1tuXSA9IGM7CisJCSsrbDsKKwkJbiA9IChuKzEpICUgMTY7CisJfQorCSpudW09bjsKKyAgICB9Cit9CisKKy8qIFRoaXMgZXhwZWN0cyBhIHNpbmdsZSBibG9jayBvZiBzaXplIG5iaXRzIGZvciBib3RoIGluIGFuZCBvdXQuIE5vdGUgdGhhdAorICAgaXQgY29ycnVwdHMgYW55IGV4dHJhIGJpdHMgaW4gdGhlIGxhc3QgYnl0ZSBvZiBvdXQgKi8KK3N0YXRpYyB2b2lkIGNmYnJfZW5jcnlwdF9ibG9jayhjb25zdCB1bnNpZ25lZCBjaGFyICppbix1bnNpZ25lZCBjaGFyICpvdXQsCisJCQkgICAgaW50IG5iaXRzLGNvbnN0IHZvaWQgKmtleSwKKwkJCSAgICB1bnNpZ25lZCBjaGFyIGl2ZWNbMTZdLGludCBlbmMsCisJCQkgICAgYmxvY2sxMjhfZiBibG9jaykKK3sKKyAgICBpbnQgbixyZW0sbnVtOworICAgIHVuc2lnbmVkIGNoYXIgb3ZlY1sxNioyICsgMV07ICAvKiArMSBiZWNhdXNlIHdlIGRlcmVyZWZlbmNlIChidXQgZG9uJ3QgdXNlKSBvbmUgYnl0ZSBvZmYgdGhlIGVuZCAqLworCisgICAgaWYgKG5iaXRzPD0wIHx8IG5iaXRzPjEyOCkgcmV0dXJuOworCisJLyogZmlsbCBpbiB0aGUgZmlyc3QgaGFsZiBvZiB0aGUgbmV3IElWIHdpdGggdGhlIGN1cnJlbnQgSVYgKi8KKwltZW1jcHkob3ZlYyxpdmVjLDE2KTsKKwkvKiBjb25zdHJ1Y3QgdGhlIG5ldyBJViAqLworCSgqYmxvY2spKGl2ZWMsaXZlYyxrZXkpOworCW51bSA9IChuYml0cys3KS84OworCWlmIChlbmMpCS8qIGVuY3J5cHQgdGhlIGlucHV0ICovCisJICAgIGZvcihuPTAgOyBuIDwgbnVtIDsgKytuKQorCQlvdXRbbl0gPSAob3ZlY1sxNituXSA9IGluW25dIF4gaXZlY1tuXSk7CisJZWxzZQkJLyogZGVjcnlwdCB0aGUgaW5wdXQgKi8KKwkgICAgZm9yKG49MCA7IG4gPCBudW0gOyArK24pCisJCW91dFtuXSA9IChvdmVjWzE2K25dID0gaW5bbl0pIF4gaXZlY1tuXTsKKwkvKiBzaGlmdCBvdmVjIGxlZnQuLi4gKi8KKwlyZW0gPSBuYml0cyU4OworCW51bSA9IG5iaXRzLzg7CisJaWYocmVtPT0wKQorCSAgICBtZW1jcHkoaXZlYyxvdmVjK251bSwxNik7CisJZWxzZQorCSAgICBmb3Iobj0wIDsgbiA8IDE2IDsgKytuKQorCQlpdmVjW25dID0gb3ZlY1tuK251bV08PHJlbSB8IG92ZWNbbitudW0rMV0+Pig4LXJlbSk7CisKKyAgICAvKiBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGNsZWFuc2Ugb3ZlYywgc2luY2UgdGhlIElWIGlzIG5vdCBzZWNyZXQgKi8KK30KKworLyogTi5CLiBUaGlzIGV4cGVjdHMgdGhlIGlucHV0IHRvIGJlIHBhY2tlZCwgTVMgYml0IGZpcnN0ICovCit2b2lkIENSWVBUT19jZmIxMjhfMV9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJCSAJc2l6ZV90IGJpdHMsIGNvbnN0IHZvaWQgKmtleSwKKwkJCXVuc2lnbmVkIGNoYXIgaXZlY1sxNl0sIGludCAqbnVtLAorCQkJaW50IGVuYywgYmxvY2sxMjhfZiBibG9jaykKK3sKKyAgICBzaXplX3QgbjsKKyAgICB1bnNpZ25lZCBjaGFyIGNbMV0sZFsxXTsKKworICAgIGFzc2VydChpbiAmJiBvdXQgJiYga2V5ICYmIGl2ZWMgJiYgbnVtKTsKKyAgICBhc3NlcnQoKm51bSA9PSAwKTsKKworICAgIGZvcihuPTAgOyBuPGJpdHMgOyArK24pCisJeworCWNbMF09KGluW24vOF0mKDEgPDwgKDctbiU4KSkpID8gMHg4MCA6IDA7CisJY2Zicl9lbmNyeXB0X2Jsb2NrKGMsZCwxLGtleSxpdmVjLGVuYyxibG9jayk7CisJb3V0W24vOF09KG91dFtuLzhdJn4oMSA8PCAodW5zaWduZWQgaW50KSg3LW4lOCkpKSB8CisJCSAoKGRbMF0mMHg4MCkgPj4gKHVuc2lnbmVkIGludCkobiU4KSk7CisJfQorfQorCit2b2lkIENSWVBUT19jZmIxMjhfOF9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJCQlzaXplX3QgbGVuZ3RoLCBjb25zdCB2b2lkICprZXksCisJCQl1bnNpZ25lZCBjaGFyIGl2ZWNbMTZdLCBpbnQgKm51bSwKKwkJCWludCBlbmMsIGJsb2NrMTI4X2YgYmxvY2spCit7CisgICAgc2l6ZV90IG47CisKKyAgICBhc3NlcnQoaW4gJiYgb3V0ICYmIGtleSAmJiBpdmVjICYmIG51bSk7CisgICAgYXNzZXJ0KCpudW0gPT0gMCk7CisKKyAgICBmb3Iobj0wIDsgbjxsZW5ndGggOyArK24pCisJY2Zicl9lbmNyeXB0X2Jsb2NrKCZpbltuXSwmb3V0W25dLDgsa2V5LGl2ZWMsZW5jLGJsb2NrKTsKK30KKwpkaWZmIC0tZ2l0IGEvY3J5cHRvL21vZGVzL2N0cjEyOC5jIGIvY3J5cHRvL21vZGVzL2N0cjEyOC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkODRmNDEKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vbW9kZXMvY3RyMTI4LmMKQEAgLTAsMCArMSwxODYgQEAKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKGMpIDIwMDggVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisgKgorICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorICoKKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorICoKKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKyAqICAgIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICovCisKKyNpbmNsdWRlICJtb2Rlcy5oIgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWZuZGVmIE1PREVTX0RFQlVHCisjIGlmbmRlZiBOREVCVUcKKyMgIGRlZmluZSBOREVCVUcKKyMgZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgPGFzc2VydC5oPgorCit0eXBlZGVmIHVuc2lnbmVkIGludCB1MzI7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdTg7CisKKyMgZGVmaW5lIEdFVFUzMihwdCkgKCgodTMyKShwdClbMF0gPDwgMjQpIF4gKCh1MzIpKHB0KVsxXSA8PCAxNikgXiAoKHUzMikocHQpWzJdIDw8ICA4KSBeICgodTMyKShwdClbM10pKQorIyBkZWZpbmUgUFVUVTMyKGN0LCBzdCkgeyAoY3QpWzBdID0gKHU4KSgoc3QpID4+IDI0KTsgKGN0KVsxXSA9ICh1OCkoKHN0KSA+PiAxNik7IChjdClbMl0gPSAodTgpKChzdCkgPj4gIDgpOyAoY3QpWzNdID0gKHU4KShzdCk7IH0KKworI2RlZmluZSBTVFJJQ1RfQUxJR05NRU5UCisjaWYgZGVmaW5lZChfX2kzODYpIHx8IGRlZmluZWQoX19pMzg2X18pIHx8IFwKKyAgICBkZWZpbmVkKF9feDg2XzY0KSB8fCBkZWZpbmVkKF9feDg2XzY0X18pIHx8IFwKKyAgICBkZWZpbmVkKF9NX0lYODYpIHx8IGRlZmluZWQoX01fQU1ENjQpIHx8IGRlZmluZWQoX01fWDY0KSB8fCBcCisgICAgZGVmaW5lZChfX3MzOTBfXykgfHwgZGVmaW5lZChfX3MzOTB4X18pCisjICB1bmRlZiBTVFJJQ1RfQUxJR05NRU5UCisjZW5kaWYKKworLyogTk9URTogdGhlIElWL2NvdW50ZXIgQ1RSIG1vZGUgaXMgYmlnLWVuZGlhbi4gIFRoZSBjb2RlIGl0c2VsZgorICogaXMgZW5kaWFuLW5ldXRyYWwuICovCisKKy8qIGluY3JlbWVudCBjb3VudGVyICgxMjgtYml0IGludCkgYnkgMSAqLworc3RhdGljIHZvaWQgY3RyMTI4X2luYyh1bnNpZ25lZCBjaGFyICpjb3VudGVyKSB7CisJdTMyIGMsbj0xNjsKKworCWRvIHsKKwkJbiAtPSA0OworCQljID0gR0VUVTMyKGNvdW50ZXIrbik7CisJCSsrYzsJYyAmPSAweEZGRkZGRkZGOworCQlQVVRVMzIoY291bnRlciArIG4sIGMpOworCQlpZiAoYykgcmV0dXJuOworCX0gd2hpbGUgKG4pOworfQorCisjaWYgIWRlZmluZWQoT1BFTlNTTF9TTUFMTF9GT09SUFJJTlQpCitzdGF0aWMgdm9pZCBjdHIxMjhfaW5jX2FsaWduZWQodW5zaWduZWQgY2hhciAqY291bnRlcikgeworCXNpemVfdCAqZGF0YSxjLG47CisJY29uc3QgdW5pb24geyBsb25nIG9uZTsgY2hhciBsaXR0bGU7IH0gaXNfZW5kaWFuID0gezF9OworCisJaWYgKGlzX2VuZGlhbi5saXR0bGUpIHsKKwkJY3RyMTI4X2luYyhjb3VudGVyKTsKKwkJcmV0dXJuOworCX0KKworCWRhdGEgPSAoc2l6ZV90ICopY291bnRlcjsKKwluID0gMTYvc2l6ZW9mKHNpemVfdCk7CisJZG8geworCQktLW47CisJCWMgPSBkYXRhW25dOworCQkrK2M7CisJCWRhdGFbbl0gPSBjOworCQlpZiAoYykgcmV0dXJuOworCX0gd2hpbGUgKG4pOworfQorI2VuZGlmCisKKy8qIFRoZSBpbnB1dCBlbmNyeXB0ZWQgYXMgdGhvdWdoIDEyOGJpdCBjb3VudGVyIG1vZGUgaXMgYmVpbmcKKyAqIHVzZWQuICBUaGUgZXh0cmEgc3RhdGUgaW5mb3JtYXRpb24gdG8gcmVjb3JkIGhvdyBtdWNoIG9mIHRoZQorICogMTI4Yml0IGJsb2NrIHdlIGhhdmUgdXNlZCBpcyBjb250YWluZWQgaW4gKm51bSwgYW5kIHRoZQorICogZW5jcnlwdGVkIGNvdW50ZXIgaXMga2VwdCBpbiBlY291bnRfYnVmLiAgQm90aCAqbnVtIGFuZAorICogZWNvdW50X2J1ZiBtdXN0IGJlIGluaXRpYWxpc2VkIHdpdGggemVyb3MgYmVmb3JlIHRoZSBmaXJzdAorICogY2FsbCB0byBDUllQVE9fY3RyMTI4X2VuY3J5cHQoKS4KKyAqCisgKiBUaGlzIGFsZ29yaXRobSBhc3N1bWVzIHRoYXQgdGhlIGNvdW50ZXIgaXMgaW4gdGhlIHggbG93ZXIgYml0cworICogb2YgdGhlIElWIChpdmVjKSwgYW5kIHRoYXQgdGhlIGFwcGxpY2F0aW9uIGhhcyBmdWxsIGNvbnRyb2wgb3ZlcgorICogb3ZlcmZsb3cgYW5kIHRoZSByZXN0IG9mIHRoZSBJVi4gIFRoaXMgaW1wbGVtZW50YXRpb24gdGFrZXMgTk8KKyAqIHJlc3BvbnNhYmlsaXR5IGZvciBjaGVja2luZyB0aGF0IHRoZSBjb3VudGVyIGRvZXNuJ3Qgb3ZlcmZsb3cKKyAqIGludG8gdGhlIHJlc3Qgb2YgdGhlIElWIHdoZW4gaW5jcmVtZW50ZWQuCisgKi8KK3ZvaWQgQ1JZUFRPX2N0cjEyOF9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJCQlzaXplX3QgbGVuLCBjb25zdCB2b2lkICprZXksCisJCQl1bnNpZ25lZCBjaGFyIGl2ZWNbMTZdLCB1bnNpZ25lZCBjaGFyIGVjb3VudF9idWZbMTZdLAorCQkJdW5zaWduZWQgaW50ICpudW0sIGJsb2NrMTI4X2YgYmxvY2spCit7CisJdW5zaWduZWQgaW50IG47CisJc2l6ZV90IGw9MDsKKworCWFzc2VydChpbiAmJiBvdXQgJiYga2V5ICYmIGVjb3VudF9idWYgJiYgbnVtKTsKKwlhc3NlcnQoKm51bSA8IDE2KTsKKworCW4gPSAqbnVtOworCisjaWYgIWRlZmluZWQoT1BFTlNTTF9TTUFMTF9GT09UUFJJTlQpCisJaWYgKDE2JXNpemVvZihzaXplX3QpID09IDApIGRvIHsgLyogYWx3YXlzIHRydWUgYWN0dWFsbHkgKi8KKwkJd2hpbGUgKG4gJiYgbGVuKSB7CisJCQkqKG91dCsrKSA9ICooaW4rKykgXiBlY291bnRfYnVmW25dOworCQkJLS1sZW47CisJCQluID0gKG4rMSkgJSAxNjsKKwkJfQorCisjaWYgZGVmaW5lZChTVFJJQ1RfQUxJR05NRU5UKQorCQlpZiAoKChzaXplX3QpaW58KHNpemVfdClvdXR8KHNpemVfdClpdmVjKSVzaXplb2Yoc2l6ZV90KSAhPSAwKQorCQkJYnJlYWs7CisjZW5kaWYKKwkJd2hpbGUgKGxlbj49MTYpIHsKKwkJCSgqYmxvY2spKGl2ZWMsIGVjb3VudF9idWYsIGtleSk7CisJCQljdHIxMjhfaW5jX2FsaWduZWQoaXZlYyk7CisJCQlmb3IgKG49MDsgbjwxNjsgbis9c2l6ZW9mKHNpemVfdCkpCisJCQkJKihzaXplX3QgKikob3V0K24pID0KKwkJCQkqKHNpemVfdCAqKShpbituKSBeICooc2l6ZV90ICopKGVjb3VudF9idWYrbik7CisJCQlsZW4gLT0gMTY7CisJCQlvdXQgKz0gMTY7CisJCQlpbiAgKz0gMTY7CisJCX0KKwkJbiA9IDA7CisJCWlmIChsZW4pIHsKKwkJCSgqYmxvY2spKGl2ZWMsIGVjb3VudF9idWYsIGtleSk7CisgCQkJY3RyMTI4X2luY19hbGlnbmVkKGl2ZWMpOworCQkJd2hpbGUgKGxlbi0tKSB7CisJCQkJb3V0W25dID0gaW5bbl0gXiBlY291bnRfYnVmW25dOworCQkJCSsrbjsKKwkJCX0KKwkJfQorCQkqbnVtID0gbjsKKwkJcmV0dXJuOworCX0gd2hpbGUoMCk7CisJLyogdGhlIHJlc3Qgd291bGQgYmUgY29tbW9ubHkgZWxpbWluYXRlZCBieSB4ODYqIGNvbXBpbGVyICovCisjZW5kaWYKKwl3aGlsZSAobDxsZW4pIHsKKwkJaWYgKG49PTApIHsKKwkJCSgqYmxvY2spKGl2ZWMsIGVjb3VudF9idWYsIGtleSk7CisgCQkJY3RyMTI4X2luYyhpdmVjKTsKKwkJfQorCQlvdXRbbF0gPSBpbltsXSBeIGVjb3VudF9idWZbbl07CisJCSsrbDsKKwkJbiA9IChuKzEpICUgMTY7CisJfQorCisJKm51bT1uOworfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL21vZGVzL29mYjEyOC5jIGIvY3J5cHRvL21vZGVzL29mYjEyOC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5YjM0MzAKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vbW9kZXMvb2ZiMTI4LmMKQEAgLTAsMCArMSwxMjggQEAKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKGMpIDIwMDggVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisgKgorICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorICoKKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorICoKKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKyAqICAgIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICovCisKKyNpbmNsdWRlICJtb2Rlcy5oIgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWZuZGVmIE1PREVTX0RFQlVHCisjIGlmbmRlZiBOREVCVUcKKyMgIGRlZmluZSBOREVCVUcKKyMgZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgPGFzc2VydC5oPgorCisjZGVmaW5lIFNUUklDVF9BTElHTk1FTlQKKyNpZiBkZWZpbmVkKF9faTM4NikgfHwgZGVmaW5lZChfX2kzODZfXykgfHwgXAorICAgIGRlZmluZWQoX194ODZfNjQpIHx8IGRlZmluZWQoX194ODZfNjRfXykgfHwgXAorICAgIGRlZmluZWQoX01fSVg4NikgfHwgZGVmaW5lZChfTV9BTUQ2NCkgfHwgZGVmaW5lZChfTV9YNjQpIHx8IFwKKyAgICBkZWZpbmVkKF9fczM5MF9fKSB8fCBkZWZpbmVkKF9fczM5MHhfXykKKyMgIHVuZGVmIFNUUklDVF9BTElHTk1FTlQKKyNlbmRpZgorCisvKiBUaGUgaW5wdXQgYW5kIG91dHB1dCBlbmNyeXB0ZWQgYXMgdGhvdWdoIDEyOGJpdCBvZmIgbW9kZSBpcyBiZWluZworICogdXNlZC4gIFRoZSBleHRyYSBzdGF0ZSBpbmZvcm1hdGlvbiB0byByZWNvcmQgaG93IG11Y2ggb2YgdGhlCisgKiAxMjhiaXQgYmxvY2sgd2UgaGF2ZSB1c2VkIGlzIGNvbnRhaW5lZCBpbiAqbnVtOworICovCit2b2lkIENSWVBUT19vZmIxMjhfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCQkJc2l6ZV90IGxlbiwgY29uc3Qgdm9pZCAqa2V5LAorCQkJdW5zaWduZWQgY2hhciBpdmVjWzE2XSwgaW50ICpudW0sCisJCQlibG9jazEyOF9mIGJsb2NrKQoreworCXVuc2lnbmVkIGludCBuOworCXNpemVfdCBsPTA7CisKKwlhc3NlcnQoaW4gJiYgb3V0ICYmIGtleSAmJiBpdmVjICYmIG51bSk7CisKKwluID0gKm51bTsKKworI2lmICFkZWZpbmVkKE9QRU5TU0xfU01BTExfRk9PVFBSSU5UKQorCWlmICgxNiVzaXplb2Yoc2l6ZV90KSA9PSAwKSBkbyB7IC8qIGFsd2F5cyB0cnVlIGFjdHVhbGx5ICovCisJCXdoaWxlIChuICYmIGxlbikgeworCQkJKihvdXQrKykgPSAqKGluKyspIF4gaXZlY1tuXTsKKwkJCS0tbGVuOworCQkJbiA9IChuKzEpICUgMTY7CisJCX0KKyNpZiBkZWZpbmVkKFNUUklDVF9BTElHTk1FTlQpCisJCWlmICgoKHNpemVfdClpbnwoc2l6ZV90KW91dHwoc2l6ZV90KWl2ZWMpJXNpemVvZihzaXplX3QpICE9IDApCisJCQlicmVhazsKKyNlbmRpZgorCQl3aGlsZSAobGVuPj0xNikgeworCQkJKCpibG9jaykoaXZlYywgaXZlYywga2V5KTsKKwkJCWZvciAobj0wOyBuPDE2OyBuKz1zaXplb2Yoc2l6ZV90KSkKKwkJCQkqKHNpemVfdCopKG91dCtuKSA9CisJCQkJKihzaXplX3QqKShpbituKSBeICooc2l6ZV90KikoaXZlYytuKTsKKwkJCWxlbiAtPSAxNjsKKwkJCW91dCArPSAxNjsKKwkJCWluICArPSAxNjsKKwkJfQorCQluID0gMDsKKwkJaWYgKGxlbikgeworCQkJKCpibG9jaykoaXZlYywgaXZlYywga2V5KTsKKwkJCXdoaWxlIChsZW4tLSkgeworCQkJCW91dFtuXSA9IGluW25dIF4gaXZlY1tuXTsKKwkJCQkrK247CisJCQl9CisJCX0KKwkJKm51bSA9IG47CisJCXJldHVybjsKKwl9IHdoaWxlKDApOworCS8qIHRoZSByZXN0IHdvdWxkIGJlIGNvbW1vbmx5IGVsaW1pbmF0ZWQgYnkgeDg2KiBjb21waWxlciAqLworI2VuZGlmCisJd2hpbGUgKGw8bGVuKSB7CisJCWlmIChuPT0wKSB7CisJCQkoKmJsb2NrKShpdmVjLCBpdmVjLCBrZXkpOworCQl9CisJCW91dFtsXSA9IGluW2xdIF4gaXZlY1tuXTsKKwkJKytsOworCQluID0gKG4rMSkgJSAxNjsKKwl9CisKKwkqbnVtPW47Cit9CmRpZmYgLS1naXQgYS9jcnlwdG8vb19pbml0LmMgYi9jcnlwdG8vb19pbml0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhNWY1YWEuLjAwMDAwMDAKLS0tIGEvY3J5cHRvL29faW5pdC5jCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyogb19pbml0LmMgKi8KLS8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAotICogcHJvamVjdC4KLSAqLwotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoYykgMjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0gKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSAqCi0gKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0gKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0gKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0gKgotICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0gKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0gKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0gKgotICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotICogICAgYWNrbm93bGVkZ21lbnQ6Ci0gKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0gKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqCi0gKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKLSAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KLSAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgotICoKLSAqLwotCi0jaW5jbHVkZSA8ZV9vcy5oPgotI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0vKiBJbnRlcm5hbCBvbmx5IGZ1bmN0aW9uczogb25seSBldmVyIHVzZWQgaGVyZSAqLwotZXh0ZXJuCXZvaWQgaW50X0VSUl9saWJfaW5pdCh2b2lkKTsKLWV4dGVybgl2b2lkIGludF9FVlBfTURfaW5pdF9lbmdpbmVfY2FsbGJhY2tzKHZvaWQgKTsKLWV4dGVybgl2b2lkIGludF9FVlBfQ0lQSEVSX2luaXRfZW5naW5lX2NhbGxiYWNrcyh2b2lkICk7Ci1leHRlcm4Jdm9pZCBpbnRfUkFORF9pbml0X2VuZ2luZV9jYWxsYmFja3Modm9pZCApOwotCi0vKiBQZXJmb3JtIGFueSBlc3NlbnRpYWwgT3BlblNTTCBpbml0aWFsaXphdGlvbiBvcGVyYXRpb25zLgotICogQ3VycmVudGx5IG9ubHkgc2V0cyBGSVBTIGNhbGxiYWNrcwotICovCi0KLXZvaWQgT1BFTlNTTF9pbml0KHZvaWQpCi0JewotI2lmZGVmIE9QRU5TU0xfRklQUwotCXN0YXRpYyBpbnQgZG9uZSA9IDA7Ci0JaWYgKCFkb25lKQotCQl7Ci0JCWludF9FUlJfbGliX2luaXQoKTsKLSNpZmRlZiBDUllQVE9fTURFQlVHCi0JCUNSWVBUT19tYWxsb2NfZGVidWdfaW5pdCgpOwotI2VuZGlmCi0jaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCi0JCWludF9FVlBfTURfaW5pdF9lbmdpbmVfY2FsbGJhY2tzKCk7Ci0JCWludF9FVlBfQ0lQSEVSX2luaXRfZW5naW5lX2NhbGxiYWNrcygpOwotCQlpbnRfUkFORF9pbml0X2VuZ2luZV9jYWxsYmFja3MoKTsKLSNlbmRpZgotCQlkb25lID0gMTsKLQkJfQotI2VuZGlmCi0JfQotCQkKLQpkaWZmIC0tZ2l0IGEvY3J5cHRvL29fdGltZS5jIGIvY3J5cHRvL29fdGltZS5jCmluZGV4IGUyOTA5MWQuLmVlY2JkZDEgMTAwNjQ0Ci0tLSBhL2NyeXB0by9vX3RpbWUuYworKysgYi9jcnlwdG8vb190aW1lLmMKQEAgLTIsNiArMiw5IEBACiAvKiBXcml0dGVuIGJ5IFJpY2hhcmQgTGV2aXR0ZSAocmljaGFyZEBsZXZpdHRlLm9yZykgZm9yIHRoZSBPcGVuU1NMCiAgKiBwcm9qZWN0IDIwMDEuCiAgKi8KKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorICogcHJvamVjdCAyMDA4LgorICovCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogQ29weXJpZ2h0IChjKSAyMDAxIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTczLDcgKzc2LDcgQEAKIAl7CiAJc3RydWN0IHRtICp0cyA9IE5VTEw7CiAKLSNpZiBkZWZpbmVkKE9QRU5TU0xfVEhSRUFEUykgJiYgIWRlZmluZWQoT1BFTlNTTF9TWVNfV0lOMzIpICYmICFkZWZpbmVkKE9QRU5TU0xfU1lTX09TMikgJiYgIWRlZmluZWQoX19DWUdXSU4zMl9fKSAmJiAoIWRlZmluZWQoT1BFTlNTTF9TWVNfVk1TKSB8fCBkZWZpbmVkKGdtdGltZV9yKSkgJiYgIWRlZmluZWQoT1BFTlNTTF9TWVNfTUFDT1NYKSAmJiAhZGVmaW5lZChPUEVOU1NMX1NZU19TVU5PUykKKyNpZiBkZWZpbmVkKE9QRU5TU0xfVEhSRUFEUykgJiYgIWRlZmluZWQoT1BFTlNTTF9TWVNfV0lOMzIpICYmICFkZWZpbmVkKE9QRU5TU0xfU1lTX09TMikgJiYgKCFkZWZpbmVkKE9QRU5TU0xfU1lTX1ZNUykgfHwgZGVmaW5lZChnbXRpbWVfcikpICYmICFkZWZpbmVkKE9QRU5TU0xfU1lTX01BQ09TWCkgJiYgIWRlZmluZWQoT1BFTlNTTF9TWVNfU1VOT1MpCiAJLyogc2hvdWxkIHJldHVybiAmZGF0YSwgYnV0IGRvZXNuJ3Qgb24gc29tZSBzeXN0ZW1zLAogCSAgIHNvIHdlIGRvbid0IGV2ZW4gbG9vayBhdCB0aGUgcmV0dXJuIHZhbHVlICovCiAJZ210aW1lX3IodGltZXIscmVzdWx0KTsKQEAgLTIxNCw0ICsyMTcsMTUwIEBACiAJCX0KICNlbmRpZgogCXJldHVybiB0czsKLQl9CQorCX0KKworLyogVGFrZSBhIHRtIHN0cnVjdHVyZSBhbmQgYWRkIGFuIG9mZnNldCB0byBpdC4gVGhpcyBhdm9pZHMgYW55IE9TIGlzc3VlcworICogd2l0aCByZXN0cmljdGVkIGRhdGUgdHlwZXMgYW5kIG92ZXJmbG93cyB3aGljaCBjYXVzZSB0aGUgeWVhciAyMDM4CisgKiBwcm9ibGVtLgorICovCisKKyNkZWZpbmUgU0VDU19QRVJfREFZICgyNCAqIDYwICogNjApCisKK3N0YXRpYyBsb25nIGRhdGVfdG9fanVsaWFuKGludCB5LCBpbnQgbSwgaW50IGQpOworc3RhdGljIHZvaWQganVsaWFuX3RvX2RhdGUobG9uZyBqZCwgaW50ICp5LCBpbnQgKm0sIGludCAqZCk7CisKK2ludCBPUEVOU1NMX2dtdGltZV9hZGooc3RydWN0IHRtICp0bSwgaW50IG9mZl9kYXksIGxvbmcgb2Zmc2V0X3NlYykKKwl7CisJaW50IG9mZnNldF9obXMsIG9mZnNldF9kYXk7CisJbG9uZyB0aW1lX2pkOworCWludCB0aW1lX3llYXIsIHRpbWVfbW9udGgsIHRpbWVfZGF5OworCS8qIHNwbGl0IG9mZnNldCBpbnRvIGRheXMgYW5kIGRheSBzZWNvbmRzICovCisJb2Zmc2V0X2RheSA9IG9mZnNldF9zZWMgLyBTRUNTX1BFUl9EQVk7CisJLyogQXZvaWQgc2lnbiBpc3N1ZXMgd2l0aCAlIG9wZXJhdG9yICovCisJb2Zmc2V0X2htcyAgPSBvZmZzZXRfc2VjIC0gKG9mZnNldF9kYXkgKiBTRUNTX1BFUl9EQVkpOworCW9mZnNldF9kYXkgKz0gb2ZmX2RheTsKKwkvKiBBZGQgY3VycmVudCB0aW1lIHNlY29uZHMgdG8gb2Zmc2V0ICovCisJb2Zmc2V0X2htcyArPSB0bS0+dG1faG91ciAqIDM2MDAgKyB0bS0+dG1fbWluICogNjAgKyB0bS0+dG1fc2VjOworCS8qIEFkanVzdCBkYXkgc2Vjb25kcyBpZiBvdmVyZmxvdyAqLworCWlmIChvZmZzZXRfaG1zID49IFNFQ1NfUEVSX0RBWSkKKwkJeworCQlvZmZzZXRfZGF5Kys7CisJCW9mZnNldF9obXMgLT0gU0VDU19QRVJfREFZOworCQl9CisJZWxzZSBpZiAob2Zmc2V0X2htcyA8IDApCisJCXsKKwkJb2Zmc2V0X2RheS0tOworCQlvZmZzZXRfaG1zICs9IFNFQ1NfUEVSX0RBWTsKKwkJfQorCisJLyogQ29udmVydCBkYXRlIG9mIHRpbWUgc3RydWN0dXJlIGludG8gYSBKdWxpYW4gZGF5IG51bWJlci4KKwkgKi8KKworCXRpbWVfeWVhciA9IHRtLT50bV95ZWFyICsgMTkwMDsKKwl0aW1lX21vbnRoID0gdG0tPnRtX21vbiArIDE7CisJdGltZV9kYXkgPSB0bS0+dG1fbWRheTsKKworCXRpbWVfamQgPSBkYXRlX3RvX2p1bGlhbih0aW1lX3llYXIsIHRpbWVfbW9udGgsIHRpbWVfZGF5KTsKKworCS8qIFdvcmsgb3V0IEp1bGlhbiBkYXkgb2YgbmV3IGRhdGUgKi8KKwl0aW1lX2pkICs9IG9mZnNldF9kYXk7CisKKwlpZiAodGltZV9qZCA8IDApCisJCXJldHVybiAwOworCisJLyogQ29udmVydCBKdWxpYW4gZGF5IGJhY2sgdG8gZGF0ZSAqLworCisJanVsaWFuX3RvX2RhdGUodGltZV9qZCwgJnRpbWVfeWVhciwgJnRpbWVfbW9udGgsICZ0aW1lX2RheSk7CisKKwlpZiAodGltZV95ZWFyIDwgMTkwMCB8fCB0aW1lX3llYXIgPiA5OTk5KQorCQlyZXR1cm4gMDsKKworCS8qIFVwZGF0ZSB0bSBzdHJ1Y3R1cmUgKi8KKworCXRtLT50bV95ZWFyID0gdGltZV95ZWFyIC0gMTkwMDsKKwl0bS0+dG1fbW9uID0gdGltZV9tb250aCAtIDE7CisJdG0tPnRtX21kYXkgPSB0aW1lX2RheTsKKworCXRtLT50bV9ob3VyID0gb2Zmc2V0X2htcyAvIDM2MDA7CisJdG0tPnRtX21pbiA9IChvZmZzZXRfaG1zIC8gNjApICUgNjA7CisJdG0tPnRtX3NlYyA9IG9mZnNldF9obXMgJSA2MDsKKworCXJldHVybiAxOworCQkKK30KKworLyogQ29udmVydCBkYXRlIHRvIGFuZCBmcm9tIGp1bGlhbiBkYXkKKyAqIFVzZXMgRmxpZWdlbCAmIFZhbiBGbGFuZGVybiBhbGdvcml0aG0KKyAqLworc3RhdGljIGxvbmcgZGF0ZV90b19qdWxpYW4oaW50IHksIGludCBtLCBpbnQgZCkKK3sKKwlyZXR1cm4gKDE0NjEgKiAoeSArIDQ4MDAgKyAobSAtIDE0KSAvIDEyKSkgLyA0ICsKKwkJKDM2NyAqIChtIC0gMiAtIDEyICogKChtIC0gMTQpIC8gMTIpKSkgLyAxMiAtCisJCSgzICogKCh5ICsgNDkwMCArIChtIC0gMTQpIC8gMTIpIC8gMTAwKSkgLyA0ICsKKwkJZCAtIDMyMDc1OworfQorCitzdGF0aWMgdm9pZCBqdWxpYW5fdG9fZGF0ZShsb25nIGpkLCBpbnQgKnksIGludCAqbSwgaW50ICpkKQorCXsKKwlsb25nICBMID0gamQgKyA2ODU2OTsKKwlsb25nICBuID0gKDQgKiBMKSAvIDE0NjA5NzsKKwlsb25nICBpLCBqOworCisJTCA9IEwgLSAoMTQ2MDk3ICogbiArIDMpIC8gNDsKKwlpID0gKDQwMDAgKiAoTCArIDEpKSAvIDE0NjEwMDE7CisJTCA9IEwgLSAoMTQ2MSAqIGkpIC8gNCArIDMxOworCWogPSAoODAgKiBMKSAvIDI0NDc7CisJKmQgPSBMIC0gKDI0NDcgKiBqKSAvIDgwOworCUwgPSBqIC8gMTE7CisJKm0gPSBqICsgMiAtICgxMiAqIEwpOworCSp5ID0gMTAwICogKG4gLSA0OSkgKyBpICsgTDsKKwl9CisKKyNpZmRlZiBPUEVOU1NMX1RJTUVfVEVTVAorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworLyogVGltZSBjaGVja2luZyB0ZXN0IGNvZGUuIENoZWNrIHRpbWVzIGFyZSBpZGVudGljYWwgZm9yIGEgd2lkZSByYW5nZSBvZgorICogb2Zmc2V0cy4gVGhpcyBzaG91bGQgYmUgcnVuIG9uIGEgbWFjaGluZSB3aXRoIDY0IGJpdCB0aW1lX3Qgb3IgaXQgd2lsbAorICogdHJpZ2dlciB0aGUgdmVyeSBlcnJvcnMgdGhlIHJvdXRpbmVzIGZpeC4KKyAqLworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisJeworCWxvbmcgb2Zmc2V0OworCWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgMTAwMDAwMDsgb2Zmc2V0KyspCisJCXsKKwkJY2hlY2tfdGltZShvZmZzZXQpOworCQljaGVja190aW1lKC1vZmZzZXQpOworCQljaGVja190aW1lKG9mZnNldCAqIDEwMDApOworCQljaGVja190aW1lKC1vZmZzZXQgKiAxMDAwKTsKKwkJfQorCX0KKworaW50IGNoZWNrX3RpbWUobG9uZyBvZmZzZXQpCisJeworCXN0cnVjdCB0bSB0bTEsIHRtMjsKKwl0aW1lX3QgdDEsIHQyOworCXRpbWUoJnQxKTsKKwl0MiA9IHQxICsgb2Zmc2V0OworCU9QRU5TU0xfZ210aW1lKCZ0MiwgJnRtMik7CisJT1BFTlNTTF9nbXRpbWUoJnQxLCAmdG0xKTsKKwlPUEVOU1NMX2dtdGltZV9hZGooJnRtMSwgMCwgb2Zmc2V0KTsKKwlpZiAoKHRtMS50bV95ZWFyID09IHRtMi50bV95ZWFyKSAmJgorCSAgICAodG0xLnRtX21vbiA9PSB0bTIudG1fbW9uKSAmJgorCSAgICAodG0xLnRtX21kYXkgPT0gdG0yLnRtX21kYXkpICYmCisJICAgICh0bTEudG1faG91ciA9PSB0bTIudG1faG91cikgJiYKKwkgICAgKHRtMS50bV9taW4gPT0gdG0yLnRtX21pbikgJiYKKwkgICAgKHRtMS50bV9zZWMgPT0gdG0yLnRtX3NlYykpCisJCXJldHVybiAxOworCWZwcmludGYoc3RkZXJyLCAiVElNRSBFUlJPUiEhXG4iKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlRpbWUxOiAlZC8lZC8lZCwgJWQ6JTAyZDolMDJkXG4iLAorCQkJdG0yLnRtX21kYXksIHRtMi50bV9tb24gKyAxLCB0bTIudG1feWVhciArIDE5MDAsCisJCQl0bTIudG1faG91ciwgdG0yLnRtX21pbiwgdG0yLnRtX3NlYyk7CisJZnByaW50ZihzdGRlcnIsICJUaW1lMjogJWQvJWQvJWQsICVkOiUwMmQ6JTAyZFxuIiwKKwkJCXRtMS50bV9tZGF5LCB0bTEudG1fbW9uICsgMSwgdG0xLnRtX3llYXIgKyAxOTAwLAorCQkJdG0xLnRtX2hvdXIsIHRtMS50bV9taW4sIHRtMS50bV9zZWMpOworCXJldHVybiAwOworCX0KKworI2VuZGlmCmRpZmYgLS1naXQgYS9jcnlwdG8vb190aW1lLmggYi9jcnlwdG8vb190aW1lLmgKaW5kZXggZTY2MDQ0Ni4uZTM5MWRhNyAxMDA2NDQKLS0tIGEvY3J5cHRvL29fdGltZS5oCisrKyBiL2NyeXB0by9vX3RpbWUuaApAQCAtNjIsNSArNjIsNiBAQAogI2luY2x1ZGUgPHRpbWUuaD4KIAogc3RydWN0IHRtICpPUEVOU1NMX2dtdGltZShjb25zdCB0aW1lX3QgKnRpbWVyLCBzdHJ1Y3QgdG0gKnJlc3VsdCk7CitpbnQgT1BFTlNTTF9nbXRpbWVfYWRqKHN0cnVjdCB0bSAqdG0sIGludCBvZmZzZXRfZGF5LCBsb25nIG9mZnNldF9zZWMpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2NyeXB0by9vYmplY3RzL01ha2VmaWxlIGIvY3J5cHRvL29iamVjdHMvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1ZThiMjMuLjAwMDAwMDAKLS0tIGEvY3J5cHRvL29iamVjdHMvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotIwotIyBPcGVuU1NML2NyeXB0by9vYmplY3RzL01ha2VmaWxlCi0jCi0KLURJUj0Jb2JqZWN0cwotVE9QPQkuLi8uLgotQ0M9CWNjCi1JTkNMVURFUz0gLUkuLiAtSSQoVE9QKSAtSS4uLy4uL2luY2x1ZGUKLUNGTEFHPS1nCi1NQUtFRklMRT0JTWFrZWZpbGUKLUFSPQkJYXIgcgotUEVSTD0JCXBlcmwKLQotQ0ZMQUdTPSAkKElOQ0xVREVTKSAkKENGTEFHKQotCi1HRU5FUkFMPU1ha2VmaWxlIFJFQURNRQotVEVTVD0KLUFQUFM9Ci0KLUxJQj0kKFRPUCkvbGliY3J5cHRvLmEKLUxJQlNSQz0Jb19uYW1lcy5jIG9ial9kYXQuYyBvYmpfbGliLmMgb2JqX2Vyci5jCi1MSUJPQko9IG9fbmFtZXMubyBvYmpfZGF0Lm8gb2JqX2xpYi5vIG9ial9lcnIubwotCi1TUkM9ICQoTElCU1JDKQotCi1FWEhFQURFUj0gb2JqZWN0cy5oIG9ial9tYWMuaAotSEVBREVSPQkkKEVYSEVBREVSKSBvYmpfZGF0LmgKLQotQUxMPSAgICAkKEdFTkVSQUwpICQoU1JDKSAkKEhFQURFUikKLQotdG9wOgotCShjZCAuLi8uLjsgJChNQUtFKSBESVJTPWNyeXB0byBTRElSUz0kKERJUikgc3ViX2FsbCkKLQotYWxsOglvYmpfZGF0LmggbGliCi0KLWxpYjoJJChMSUJPQkopCi0JJChBUlgpICQoTElCKSAkKExJQk9CSikKLQkkKFJBTkxJQikgJChMSUIpIHx8IGVjaG8gTmV2ZXIgbWluZC4KLQlAdG91Y2ggbGliCi0KLW9ial9kYXQuaDogb2JqX2RhdC5wbCBvYmpfbWFjLmgKLQkkKFBFUkwpIG9ial9kYXQucGwgb2JqX21hYy5oIG9ial9kYXQuaAotCi0jIG9iamVjdHMucGwgYm90aCByZWFkcyBhbmQgd3JpdGVzIG9ial9tYWMubnVtCi1vYmpfbWFjLmg6IG9iamVjdHMucGwgb2JqZWN0cy50eHQgb2JqX21hYy5udW0KLQkkKFBFUkwpIG9iamVjdHMucGwgb2JqZWN0cy50eHQgb2JqX21hYy5udW0gb2JqX21hYy5oCi0JQHNsZWVwIDE7IHRvdWNoIG9ial9tYWMuaDsgc2xlZXAgMQotCi1maWxlczoKLQkkKFBFUkwpICQoVE9QKS91dGlsL2ZpbGVzLnBsIE1ha2VmaWxlID4+ICQoVE9QKS9NSU5GTwotCi1saW5rczoKLQlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vaW5jbHVkZS9vcGVuc3NsICQoRVhIRUFERVIpCi0JQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL3Rlc3QgJChURVNUKQotCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9hcHBzICQoQVBQUykKLQotaW5zdGFsbDoKLQlAWyAtbiAiJChJTlNUQUxMVE9QKSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdG9wIE1ha2VmaWxlLi4uCi0JQGhlYWRlcmxpc3Q9IiQoRVhIRUFERVIpIjsgZm9yIGkgaW4gJCRoZWFkZXJsaXN0IDsgXAotCWRvICBcCi0JKGNwICQkaSAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaTsgXAotCWNobW9kIDY0NCAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaSApOyBcCi0JZG9uZTsKLQotdGFnczoKLQljdGFncyAkKFNSQykKLQotdGVzdHM6Ci0KLWxpbnQ6Ci0JbGludCAtRExJTlQgJChJTkNMVURFUykgJChTUkMpPmZsdWZmCi0KLWRlcGVuZDoKLQlAWyAtbiAiJChNQUtFREVQRU5EKSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdXBwZXIgTWFrZWZpbGUuLi4KLQkkKE1BS0VERVBFTkQpIC0tICQoQ0ZMQUcpICQoSU5DTFVERVMpICQoREVQRkxBRykgLS0gJChQUk9HUykgJChMSUJTUkMpCi0KLWRjbGVhbjoKLQkkKFBFUkwpIC1wZSAnaWYgKC9eIyBETyBOT1QgREVMRVRFIFRISVMgTElORS8pIHtwcmludDsgZXhpdCgwKTt9JyAkKE1BS0VGSUxFKSA+TWFrZWZpbGUubmV3Ci0JbXYgLWYgTWFrZWZpbGUubmV3ICQoTUFLRUZJTEUpCi0KLWNsZWFuOgotCXJtIC1mICoubyAqLm9iaiBsaWIgdGFncyBjb3JlIC5wdXJlIC5uZnMqICoub2xkICouYmFrIGZsdWZmCi0KLSMgRE8gTk9UIERFTEVURSBUSElTIExJTkUgLS0gbWFrZSBkZXBlbmQgZGVwZW5kcyBvbiBpdC4KLQotb19uYW1lcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotb19uYW1lcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLW9fbmFtZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1vX25hbWVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotb19uYW1lcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotb19uYW1lcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLW9fbmFtZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLW9fbmFtZXMubzogb19uYW1lcy5jCi1vYmpfZGF0Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi1vYmpfZGF0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaAotb2JqX2RhdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1vYmpfZGF0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotb2JqX2RhdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi1vYmpfZGF0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLW9ial9kYXQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLW9ial9kYXQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1vYmpfZGF0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggb2JqX2RhdC5jIG9ial9kYXQuaAotb2JqX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotb2JqX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLW9ial9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1vYmpfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotb2JqX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotb2JqX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLW9ial9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLW9ial9lcnIubzogb2JqX2Vyci5jCi1vYmpfbGliLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi1vYmpfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLW9ial9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1vYmpfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotb2JqX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLW9ial9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLW9ial9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1vYmpfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1vYmpfbGliLm86IC4uL2NyeXB0bGliLmggb2JqX2xpYi5jCmRpZmYgLS1naXQgYS9jcnlwdG8vb2JqZWN0cy9vX25hbWVzLmMgYi9jcnlwdG8vb2JqZWN0cy9vX25hbWVzLmMKaW5kZXggYWRiNTczMS4uODQzODBhOSAxMDA2NDQKLS0tIGEvY3J5cHRvL29iamVjdHMvb19uYW1lcy5jCisrKyBiL2NyeXB0by9vYmplY3RzL29fbmFtZXMuYwpAQCAtMjIsNyArMjIsOCBAQAogLyogSSB1c2UgdGhlIGV4X2RhdGEgc3R1ZmYgdG8gbWFuYWdlIHRoZSBpZGVudGlmaWVycyBmb3IgdGhlIG9ial9uYW1lX3R5cGVzCiAgKiB0aGF0IGFwcGxpY2F0aW9ucyBtYXkgZGVmaW5lLiAgSSBvbmx5IHJlYWxseSB1c2UgdGhlIGZyZWUgZnVuY3Rpb24gZmllbGQuCiAgKi8KLXN0YXRpYyBMSEFTSCAqbmFtZXNfbGg9TlVMTDsKK0RFQ0xBUkVfTEhBU0hfT0YoT0JKX05BTUUpOworc3RhdGljIExIQVNIX09GKE9CSl9OQU1FKSAqbmFtZXNfbGg9TlVMTDsKIHN0YXRpYyBpbnQgbmFtZXNfdHlwZV9udW09T0JKX05BTUVfVFlQRV9OVU07CiAKIHR5cGVkZWYgc3RydWN0IG5hbWVfZnVuY3Nfc3QKQEAgLTQ2LDExICs0NywxNCBAQAogLyogc3RhdGljIGludCBvYmpfbmFtZV9jbXAoT0JKX05BTUUgKmEsT0JKX05BTUUgKmIpOyAqLwogc3RhdGljIGludCBvYmpfbmFtZV9jbXAoY29uc3Qgdm9pZCAqYV92b2lkLGNvbnN0IHZvaWQgKmJfdm9pZCk7CiAKK3N0YXRpYyBJTVBMRU1FTlRfTEhBU0hfSEFTSF9GTihvYmpfbmFtZSwgT0JKX05BTUUpCitzdGF0aWMgSU1QTEVNRU5UX0xIQVNIX0NPTVBfRk4ob2JqX25hbWUsIE9CSl9OQU1FKQorCiBpbnQgT0JKX05BTUVfaW5pdCh2b2lkKQogCXsKIAlpZiAobmFtZXNfbGggIT0gTlVMTCkgcmV0dXJuKDEpOwogCU1lbUNoZWNrX29mZigpOwotCW5hbWVzX2xoPWxoX25ldyhvYmpfbmFtZV9oYXNoLCBvYmpfbmFtZV9jbXApOworCW5hbWVzX2xoPWxoX09CSl9OQU1FX25ldygpOwogCU1lbUNoZWNrX29uKCk7CiAJcmV0dXJuKG5hbWVzX2xoICE9IE5VTEwpOwogCX0KQEAgLTE2NCw3ICsxNjgsNyBAQAogCiAJZm9yICg7OykKIAl7Ci0JCXJldD0oT0JKX05BTUUgKilsaF9yZXRyaWV2ZShuYW1lc19saCwmb24pOworCQlyZXQ9bGhfT0JKX05BTUVfcmV0cmlldmUobmFtZXNfbGgsJm9uKTsKIAkJaWYgKHJldCA9PSBOVUxMKSByZXR1cm4oTlVMTCk7CiAJCWlmICgocmV0LT5hbGlhcykgJiYgIWFsaWFzKQogCQkJewpAQCAtMjAwLDcgKzIwNCw3IEBACiAJb25wLT50eXBlPXR5cGU7CiAJb25wLT5kYXRhPWRhdGE7CiAKLQlyZXQ9KE9CSl9OQU1FICopbGhfaW5zZXJ0KG5hbWVzX2xoLG9ucCk7CisJcmV0PWxoX09CSl9OQU1FX2luc2VydChuYW1lc19saCxvbnApOwogCWlmIChyZXQgIT0gTlVMTCkKIAkJewogCQkvKiBmcmVlIHRoaW5ncyAqLwpAQCAtMjE3LDcgKzIyMSw3IEBACiAJCX0KIAllbHNlCiAJCXsKLQkJaWYgKGxoX2Vycm9yKG5hbWVzX2xoKSkKKwkJaWYgKGxoX09CSl9OQU1FX2Vycm9yKG5hbWVzX2xoKSkKIAkJCXsKIAkJCS8qIEVSUk9SICovCiAJCQlyZXR1cm4oMCk7CkBAIC0yMzUsNyArMjM5LDcgQEAKIAl0eXBlJj0gfk9CSl9OQU1FX0FMSUFTOwogCW9uLm5hbWU9bmFtZTsKIAlvbi50eXBlPXR5cGU7Ci0JcmV0PShPQkpfTkFNRSAqKWxoX2RlbGV0ZShuYW1lc19saCwmb24pOworCXJldD1saF9PQkpfTkFNRV9kZWxldGUobmFtZXNfbGgsJm9uKTsKIAlpZiAocmV0ICE9IE5VTEwpCiAJCXsKIAkJLyogZnJlZSB0aGluZ3MgKi8KQEAgLTI2MiwxMyArMjY2LDEzIEBACiAJdm9pZCAqYXJnOwogCX07CiAKLXN0YXRpYyB2b2lkIGRvX2FsbF9mbihjb25zdCBPQkpfTkFNRSAqbmFtZSxzdHJ1Y3QgZG9hbGwgKmQpCitzdGF0aWMgdm9pZCBkb19hbGxfZm5fZG9hbGxfYXJnKGNvbnN0IE9CSl9OQU1FICpuYW1lLHN0cnVjdCBkb2FsbCAqZCkKIAl7CiAJaWYobmFtZS0+dHlwZSA9PSBkLT50eXBlKQogCQlkLT5mbihuYW1lLGQtPmFyZyk7CiAJfQogCi1zdGF0aWMgSU1QTEVNRU5UX0xIQVNIX0RPQUxMX0FSR19GTihkb19hbGxfZm4sIGNvbnN0IE9CSl9OQU1FICosIHN0cnVjdCBkb2FsbCAqKQorc3RhdGljIElNUExFTUVOVF9MSEFTSF9ET0FMTF9BUkdfRk4oZG9fYWxsX2ZuLCBjb25zdCBPQkpfTkFNRSwgc3RydWN0IGRvYWxsKQogCiB2b2lkIE9CSl9OQU1FX2RvX2FsbChpbnQgdHlwZSx2b2lkICgqZm4pKGNvbnN0IE9CSl9OQU1FICosdm9pZCAqYXJnKSx2b2lkICphcmcpCiAJewpAQCAtMjc4LDcgKzI4Miw4IEBACiAJZC5mbj1mbjsKIAlkLmFyZz1hcmc7CiAKLQlsaF9kb2FsbF9hcmcobmFtZXNfbGgsTEhBU0hfRE9BTExfQVJHX0ZOKGRvX2FsbF9mbiksJmQpOworCWxoX09CSl9OQU1FX2RvYWxsX2FyZyhuYW1lc19saCwgTEhBU0hfRE9BTExfQVJHX0ZOKGRvX2FsbF9mbiksCisJCQkgICAgICBzdHJ1Y3QgZG9hbGwsICZkKTsKIAl9CiAKIHN0cnVjdCBkb2FsbF9zb3J0ZWQKQEAgLTMxMyw3ICszMTgsNyBAQAogCWludCBuOwogCiAJZC50eXBlPXR5cGU7Ci0JZC5uYW1lcz1PUEVOU1NMX21hbGxvYyhsaF9udW1faXRlbXMobmFtZXNfbGgpKnNpemVvZiAqZC5uYW1lcyk7CisJZC5uYW1lcz1PUEVOU1NMX21hbGxvYyhsaF9PQkpfTkFNRV9udW1faXRlbXMobmFtZXNfbGgpKnNpemVvZiAqZC5uYW1lcyk7CiAJZC5uPTA7CiAJT0JKX05BTUVfZG9fYWxsKHR5cGUsZG9fYWxsX3NvcnRlZF9mbiwmZCk7CiAKQEAgLTMyNywxOCArMzMyLDE2IEBACiAKIHN0YXRpYyBpbnQgZnJlZV90eXBlOwogCi1zdGF0aWMgdm9pZCBuYW1lc19saF9mcmVlKE9CSl9OQU1FICpvbnApCi17Ci0JaWYob25wID09IE5VTEwpCitzdGF0aWMgdm9pZCBuYW1lc19saF9mcmVlX2RvYWxsKE9CSl9OQU1FICpvbnApCisJeworCWlmIChvbnAgPT0gTlVMTCkKIAkJcmV0dXJuOwogCi0JaWYgKChmcmVlX3R5cGUgPCAwKSB8fCAoZnJlZV90eXBlID09IG9ucC0+dHlwZSkpCi0JCXsKKwlpZiAoZnJlZV90eXBlIDwgMCB8fCBmcmVlX3R5cGUgPT0gb25wLT50eXBlKQogCQlPQkpfTkFNRV9yZW1vdmUob25wLT5uYW1lLG9ucC0+dHlwZSk7Ci0JCX0KIAl9CiAKLXN0YXRpYyBJTVBMRU1FTlRfTEhBU0hfRE9BTExfRk4obmFtZXNfbGhfZnJlZSwgT0JKX05BTUUgKikKK3N0YXRpYyBJTVBMRU1FTlRfTEhBU0hfRE9BTExfRk4obmFtZXNfbGhfZnJlZSwgT0JKX05BTUUpCiAKIHN0YXRpYyB2b2lkIG5hbWVfZnVuY3NfZnJlZShOQU1FX0ZVTkNTICpwdHIpCiAJewpAQCAtMzUyLDE4ICszNTUsMTggQEAKIAlpZiAobmFtZXNfbGggPT0gTlVMTCkgcmV0dXJuOwogCiAJZnJlZV90eXBlPXR5cGU7Ci0JZG93bl9sb2FkPW5hbWVzX2xoLT5kb3duX2xvYWQ7Ci0JbmFtZXNfbGgtPmRvd25fbG9hZD0wOworCWRvd25fbG9hZD1saF9PQkpfTkFNRV9kb3duX2xvYWQobmFtZXNfbGgpOworCWxoX09CSl9OQU1FX2Rvd25fbG9hZChuYW1lc19saCk9MDsKIAotCWxoX2RvYWxsKG5hbWVzX2xoLExIQVNIX0RPQUxMX0ZOKG5hbWVzX2xoX2ZyZWUpKTsKKwlsaF9PQkpfTkFNRV9kb2FsbChuYW1lc19saCxMSEFTSF9ET0FMTF9GTihuYW1lc19saF9mcmVlKSk7CiAJaWYgKHR5cGUgPCAwKQogCQl7Ci0JCWxoX2ZyZWUobmFtZXNfbGgpOworCQlsaF9PQkpfTkFNRV9mcmVlKG5hbWVzX2xoKTsKIAkJc2tfTkFNRV9GVU5DU19wb3BfZnJlZShuYW1lX2Z1bmNzX3N0YWNrLG5hbWVfZnVuY3NfZnJlZSk7CiAJCW5hbWVzX2xoPU5VTEw7CiAJCW5hbWVfZnVuY3Nfc3RhY2sgPSBOVUxMOwogCQl9CiAJZWxzZQotCQluYW1lc19saC0+ZG93bl9sb2FkPWRvd25fbG9hZDsKKwkJbGhfT0JKX05BTUVfZG93bl9sb2FkKG5hbWVzX2xoKT1kb3duX2xvYWQ7CiAJfQogCmRpZmYgLS1naXQgYS9jcnlwdG8vb2JqZWN0cy9vYmpfZGF0LmMgYi9jcnlwdG8vb2JqZWN0cy9vYmpfZGF0LmMKaW5kZXggNzYwYWYxNi4uOGEzNDJiYSAxMDA2NDQKLS0tIGEvY3J5cHRvL29iamVjdHMvb2JqX2RhdC5jCisrKyBiL2NyeXB0by9vYmplY3RzL29ial9kYXQuYwpAQCAtNzQsMTYgKzc0LDE3IEBACiAjZGVmaW5lIE5VTV9TTiAwCiAjZGVmaW5lIE5VTV9MTiAwCiAjZGVmaW5lIE5VTV9PQkogMAotc3RhdGljIHVuc2lnbmVkIGNoYXIgbHZhbHVlc1sxXTsKLXN0YXRpYyBBU04xX09CSkVDVCBuaWRfb2Jqc1sxXTsKLXN0YXRpYyBBU04xX09CSkVDVCAqc25fb2Jqc1sxXTsKLXN0YXRpYyBBU04xX09CSkVDVCAqbG5fb2Jqc1sxXTsKLXN0YXRpYyBBU04xX09CSkVDVCAqb2JqX29ianNbMV07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBsdmFsdWVzWzFdOworc3RhdGljIGNvbnN0IEFTTjFfT0JKRUNUIG5pZF9vYmpzWzFdOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzbl9vYmpzWzFdOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBsbl9vYmpzWzFdOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBvYmpfb2Jqc1sxXTsKICNlbmRpZgogCi1zdGF0aWMgaW50IHNuX2NtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKTsKLXN0YXRpYyBpbnQgbG5fY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpOwotc3RhdGljIGludCBvYmpfY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpOworREVDTEFSRV9PQkpfQlNFQVJDSF9DTVBfRk4oY29uc3QgQVNOMV9PQkpFQ1QgKiwgdW5zaWduZWQgaW50LCBzbik7CitERUNMQVJFX09CSl9CU0VBUkNIX0NNUF9GTihjb25zdCBBU04xX09CSkVDVCAqLCB1bnNpZ25lZCBpbnQsIGxuKTsKK0RFQ0xBUkVfT0JKX0JTRUFSQ0hfQ01QX0ZOKGNvbnN0IEFTTjFfT0JKRUNUICosIHVuc2lnbmVkIGludCwgb2JqKTsKKwogI2RlZmluZSBBRERFRF9EQVRBCTAKICNkZWZpbmUgQURERURfU05BTUUJMQogI2RlZmluZSBBRERFRF9MTkFNRQkyCkBAIC05NCwzMCArOTUsMjcgQEAKIAlpbnQgdHlwZTsKIAlBU04xX09CSkVDVCAqb2JqOwogCX0gQURERURfT0JKOworREVDTEFSRV9MSEFTSF9PRihBRERFRF9PQkopOwogCiBzdGF0aWMgaW50IG5ld19uaWQ9TlVNX05JRDsKLXN0YXRpYyBMSEFTSCAqYWRkZWQ9TlVMTDsKK3N0YXRpYyBMSEFTSF9PRihBRERFRF9PQkopICphZGRlZD1OVUxMOwogCi1zdGF0aWMgaW50IHNuX2NtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQotCXsKLQljb25zdCBBU04xX09CSkVDVCAqIGNvbnN0ICphcCA9IGEsICogY29uc3QgKmJwID0gYjsKLQlyZXR1cm4oc3RyY21wKCgqYXApLT5zbiwoKmJwKS0+c24pKTsKLQl9CitzdGF0aWMgaW50IHNuX2NtcChjb25zdCBBU04xX09CSkVDVCAqIGNvbnN0ICphLCBjb25zdCB1bnNpZ25lZCBpbnQgKmIpCisJeyByZXR1cm4oc3RyY21wKCgqYSktPnNuLG5pZF9vYmpzWypiXS5zbikpOyB9CiAKLXN0YXRpYyBpbnQgbG5fY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCi0JeyAKLQljb25zdCBBU04xX09CSkVDVCAqIGNvbnN0ICphcCA9IGEsICogY29uc3QgKmJwID0gYjsKLQlyZXR1cm4oc3RyY21wKCgqYXApLT5sbiwoKmJwKS0+bG4pKTsKLQl9CitJTVBMRU1FTlRfT0JKX0JTRUFSQ0hfQ01QX0ZOKGNvbnN0IEFTTjFfT0JKRUNUICosIHVuc2lnbmVkIGludCwgc24pOwogCi0vKiBzdGF0aWMgdW5zaWduZWQgbG9uZyBhZGRfaGFzaChBRERFRF9PQkogKmNhKSAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgYWRkX2hhc2goY29uc3Qgdm9pZCAqY2Ffdm9pZCkKK3N0YXRpYyBpbnQgbG5fY21wKGNvbnN0IEFTTjFfT0JKRUNUICogY29uc3QgKmEsIGNvbnN0IHVuc2lnbmVkIGludCAqYikKKwl7IHJldHVybihzdHJjbXAoKCphKS0+bG4sbmlkX29ianNbKmJdLmxuKSk7IH0KKworSU1QTEVNRU5UX09CSl9CU0VBUkNIX0NNUF9GTihjb25zdCBBU04xX09CSkVDVCAqLCB1bnNpZ25lZCBpbnQsIGxuKTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgYWRkZWRfb2JqX2hhc2goY29uc3QgQURERURfT0JKICpjYSkKIAl7CiAJY29uc3QgQVNOMV9PQkpFQ1QgKmE7CiAJaW50IGk7CiAJdW5zaWduZWQgbG9uZyByZXQ9MDsKIAl1bnNpZ25lZCBjaGFyICpwOwotCWNvbnN0IEFEREVEX09CSiAqY2EgPSAoY29uc3QgQURERURfT0JKICopY2Ffdm9pZDsKIAogCWE9Y2EtPm9iajsKIAlzd2l0Y2ggKGNhLT50eXBlKQpAQCAtMTQ1LDE0ICsxNDMsMTIgQEAKIAlyZXR8PWNhLT50eXBlPDwzMEw7CiAJcmV0dXJuKHJldCk7CiAJfQorc3RhdGljIElNUExFTUVOVF9MSEFTSF9IQVNIX0ZOKGFkZGVkX29iaiwgQURERURfT0JKKQogCi0vKiBzdGF0aWMgaW50IGFkZF9jbXAoQURERURfT0JKICpjYSwgQURERURfT0JKICpjYikgKi8KLXN0YXRpYyBpbnQgYWRkX2NtcChjb25zdCB2b2lkICpjYV92b2lkLCBjb25zdCB2b2lkICpjYl92b2lkKQorc3RhdGljIGludCBhZGRlZF9vYmpfY21wKGNvbnN0IEFEREVEX09CSiAqY2EsIGNvbnN0IEFEREVEX09CSiAqY2IpCiAJewogCUFTTjFfT0JKRUNUICphLCpiOwogCWludCBpOwotCWNvbnN0IEFEREVEX09CSiAqY2EgPSAoY29uc3QgQURERURfT0JKICopY2Ffdm9pZDsKLQljb25zdCBBRERFRF9PQkogKmNiID0gKGNvbnN0IEFEREVEX09CSiAqKWNiX3ZvaWQ7CiAKIAlpPWNhLT50eXBlLWNiLT50eXBlOwogCWlmIChpKSByZXR1cm4oaSk7CkBAIC0xNzksMTUgKzE3NSwxNiBAQAogCQlyZXR1cm4gMDsKIAkJfQogCX0KK3N0YXRpYyBJTVBMRU1FTlRfTEhBU0hfQ09NUF9GTihhZGRlZF9vYmosIEFEREVEX09CSikKIAogc3RhdGljIGludCBpbml0X2FkZGVkKHZvaWQpCiAJewogCWlmIChhZGRlZCAhPSBOVUxMKSByZXR1cm4oMSk7Ci0JYWRkZWQ9bGhfbmV3KGFkZF9oYXNoLGFkZF9jbXApOworCWFkZGVkPWxoX0FEREVEX09CSl9uZXcoKTsKIAlyZXR1cm4oYWRkZWQgIT0gTlVMTCk7CiAJfQogCi1zdGF0aWMgdm9pZCBjbGVhbnVwMShBRERFRF9PQkogKmEpCitzdGF0aWMgdm9pZCBjbGVhbnVwMV9kb2FsbChBRERFRF9PQkogKmEpCiAJewogCWEtPm9iai0+bmlkPTA7CiAJYS0+b2JqLT5mbGFnc3w9QVNOMV9PQkpFQ1RfRkxBR19EWU5BTUlDfApAQCAtMTk1LDI4ICsxOTIsNDYgQEAKIAkJCUFTTjFfT0JKRUNUX0ZMQUdfRFlOQU1JQ19EQVRBOwogCX0KIAotc3RhdGljIHZvaWQgY2xlYW51cDIoQURERURfT0JKICphKQorc3RhdGljIHZvaWQgY2xlYW51cDJfZG9hbGwoQURERURfT0JKICphKQogCXsgYS0+b2JqLT5uaWQrKzsgfQogCi1zdGF0aWMgdm9pZCBjbGVhbnVwMyhBRERFRF9PQkogKmEpCitzdGF0aWMgdm9pZCBjbGVhbnVwM19kb2FsbChBRERFRF9PQkogKmEpCiAJewogCWlmICgtLWEtPm9iai0+bmlkID09IDApCiAJCUFTTjFfT0JKRUNUX2ZyZWUoYS0+b2JqKTsKIAlPUEVOU1NMX2ZyZWUoYSk7CiAJfQogCi1zdGF0aWMgSU1QTEVNRU5UX0xIQVNIX0RPQUxMX0ZOKGNsZWFudXAxLCBBRERFRF9PQkogKikKLXN0YXRpYyBJTVBMRU1FTlRfTEhBU0hfRE9BTExfRk4oY2xlYW51cDIsIEFEREVEX09CSiAqKQotc3RhdGljIElNUExFTUVOVF9MSEFTSF9ET0FMTF9GTihjbGVhbnVwMywgQURERURfT0JKICopCitzdGF0aWMgSU1QTEVNRU5UX0xIQVNIX0RPQUxMX0ZOKGNsZWFudXAxLCBBRERFRF9PQkopCitzdGF0aWMgSU1QTEVNRU5UX0xIQVNIX0RPQUxMX0ZOKGNsZWFudXAyLCBBRERFRF9PQkopCitzdGF0aWMgSU1QTEVNRU5UX0xIQVNIX0RPQUxMX0ZOKGNsZWFudXAzLCBBRERFRF9PQkopCisKKy8qIFRoZSBwdXJwb3NlIG9mIG9ial9jbGVhbnVwX2RlZmVyIGlzIHRvIGF2b2lkIEVWUF9jbGVhbnVwKCkgYXR0ZW1wdGluZworICogdG8gdXNlIGZyZWVkIHVwIE9JRHMuIElmIG5lY2Nlc3NhcnkgdGhlIGFjdHVhbCBmcmVlaW5nIHVwIG9mIE9JRHMgaXMKKyAqIGRlbGF5ZWQuCisgKi8KKworaW50IG9ial9jbGVhbnVwX2RlZmVyID0gMDsKKwordm9pZCBjaGVja19kZWZlcihpbnQgbmlkKQorCXsKKwlpZiAoIW9ial9jbGVhbnVwX2RlZmVyICYmIG5pZCA+PSBOVU1fTklEKQorCQkJb2JqX2NsZWFudXBfZGVmZXIgPSAxOworCX0KIAogdm9pZCBPQkpfY2xlYW51cCh2b2lkKQogCXsKKwlpZiAob2JqX2NsZWFudXBfZGVmZXIpCisJCXsKKwkJb2JqX2NsZWFudXBfZGVmZXIgPSAyOworCQlyZXR1cm4gOworCQl9CiAJaWYgKGFkZGVkID09IE5VTEwpIHJldHVybjsKLQlhZGRlZC0+ZG93bl9sb2FkPTA7Ci0JbGhfZG9hbGwoYWRkZWQsTEhBU0hfRE9BTExfRk4oY2xlYW51cDEpKTsgLyogemVybyBjb3VudGVycyAqLwotCWxoX2RvYWxsKGFkZGVkLExIQVNIX0RPQUxMX0ZOKGNsZWFudXAyKSk7IC8qIHNldCBjb3VudGVycyAqLwotCWxoX2RvYWxsKGFkZGVkLExIQVNIX0RPQUxMX0ZOKGNsZWFudXAzKSk7IC8qIGZyZWUgb2JqZWN0cyAqLwotCWxoX2ZyZWUoYWRkZWQpOworCWxoX0FEREVEX09CSl9kb3duX2xvYWQoYWRkZWQpID0gMDsKKwlsaF9BRERFRF9PQkpfZG9hbGwoYWRkZWQsTEhBU0hfRE9BTExfRk4oY2xlYW51cDEpKTsgLyogemVybyBjb3VudGVycyAqLworCWxoX0FEREVEX09CSl9kb2FsbChhZGRlZCxMSEFTSF9ET0FMTF9GTihjbGVhbnVwMikpOyAvKiBzZXQgY291bnRlcnMgKi8KKwlsaF9BRERFRF9PQkpfZG9hbGwoYWRkZWQsTEhBU0hfRE9BTExfRk4oY2xlYW51cDMpKTsgLyogZnJlZSBvYmplY3RzICovCisJbGhfQURERURfT0JKX2ZyZWUoYWRkZWQpOwogCWFkZGVkPU5VTEw7CiAJfQogCkBAIC0yNTIsNyArMjY3LDcgQEAKIAkJCXsKIAkJCWFvW2ldLT50eXBlPWk7CiAJCQlhb1tpXS0+b2JqPW87Ci0JCQlhb3A9KEFEREVEX09CSiAqKWxoX2luc2VydChhZGRlZCxhb1tpXSk7CisJCQlhb3A9bGhfQURERURfT0JKX2luc2VydChhZGRlZCxhb1tpXSk7CiAJCQkvKiBtZW1vcnkgbGVhaywgYnVpdCBzaG91bGQgbm90IG5vcm1hbGx5IG1hdHRlciAqLwogCQkJaWYgKGFvcCAhPSBOVUxMKQogCQkJCU9QRU5TU0xfZnJlZShhb3ApOwpAQCAtMjkyLDcgKzMwNyw3IEBACiAJCWFkLnR5cGU9QURERURfTklEOwogCQlhZC5vYmo9ICZvYjsKIAkJb2IubmlkPW47Ci0JCWFkcD0oQURERURfT0JKICopbGhfcmV0cmlldmUoYWRkZWQsJmFkKTsKKwkJYWRwPWxoX0FEREVEX09CSl9yZXRyaWV2ZShhZGRlZCwmYWQpOwogCQlpZiAoYWRwICE9IE5VTEwpCiAJCQlyZXR1cm4oYWRwLT5vYmopOwogCQllbHNlCkBAIC0zMjQsNyArMzM5LDcgQEAKIAkJYWQudHlwZT1BRERFRF9OSUQ7CiAJCWFkLm9iaj0gJm9iOwogCQlvYi5uaWQ9bjsKLQkJYWRwPShBRERFRF9PQkogKilsaF9yZXRyaWV2ZShhZGRlZCwmYWQpOworCQlhZHA9bGhfQURERURfT0JKX3JldHJpZXZlKGFkZGVkLCZhZCk7CiAJCWlmIChhZHAgIT0gTlVMTCkKIAkJCXJldHVybihhZHAtPm9iai0+c24pOwogCQllbHNlCkBAIC0zNTYsNyArMzcxLDcgQEAKIAkJYWQudHlwZT1BRERFRF9OSUQ7CiAJCWFkLm9iaj0gJm9iOwogCQlvYi5uaWQ9bjsKLQkJYWRwPShBRERFRF9PQkogKilsaF9yZXRyaWV2ZShhZGRlZCwmYWQpOworCQlhZHA9bGhfQURERURfT0JKX3JldHJpZXZlKGFkZGVkLCZhZCk7CiAJCWlmIChhZHAgIT0gTlVMTCkKIAkJCXJldHVybihhZHAtPm9iai0+bG4pOwogCQllbHNlCkBAIC0zNjcsOSArMzgyLDIyIEBACiAJCX0KIAl9CiAKK3N0YXRpYyBpbnQgb2JqX2NtcChjb25zdCBBU04xX09CSkVDVCAqIGNvbnN0ICphcCwgY29uc3QgdW5zaWduZWQgaW50ICpicCkKKwl7CisJaW50IGo7CisJY29uc3QgQVNOMV9PQkpFQ1QgKmE9ICphcDsKKwljb25zdCBBU04xX09CSkVDVCAqYj0gJm5pZF9vYmpzWypicF07CisKKwlqPShhLT5sZW5ndGggLSBiLT5sZW5ndGgpOworICAgICAgICBpZiAoaikgcmV0dXJuKGopOworCXJldHVybihtZW1jbXAoYS0+ZGF0YSxiLT5kYXRhLGEtPmxlbmd0aCkpOworCX0KKworSU1QTEVNRU5UX09CSl9CU0VBUkNIX0NNUF9GTihjb25zdCBBU04xX09CSkVDVCAqLCB1bnNpZ25lZCBpbnQsIG9iaik7CisKIGludCBPQkpfb2JqMm5pZChjb25zdCBBU04xX09CSkVDVCAqYSkKIAl7Ci0JQVNOMV9PQkpFQ1QgKipvcDsKKwljb25zdCB1bnNpZ25lZCBpbnQgKm9wOwogCUFEREVEX09CSiBhZCwqYWRwOwogCiAJaWYgKGEgPT0gTlVMTCkKQEAgLTM4MSwxNCArNDA5LDEzIEBACiAJCXsKIAkJYWQudHlwZT1BRERFRF9EQVRBOwogCQlhZC5vYmo9KEFTTjFfT0JKRUNUICopYTsgLyogWFhYOiB1Z2x5IGJ1dCBoYXJtbGVzcyAqLwotCQlhZHA9KEFEREVEX09CSiAqKWxoX3JldHJpZXZlKGFkZGVkLCZhZCk7CisJCWFkcD1saF9BRERFRF9PQkpfcmV0cmlldmUoYWRkZWQsJmFkKTsKIAkJaWYgKGFkcCAhPSBOVUxMKSByZXR1cm4gKGFkcC0+b2JqLT5uaWQpOwogCQl9Ci0Jb3A9KEFTTjFfT0JKRUNUICoqKU9CSl9ic2VhcmNoKChjb25zdCBjaGFyICopJmEsKGNvbnN0IGNoYXIgKilvYmpfb2JqcywKLQkJTlVNX09CSiwgc2l6ZW9mKEFTTjFfT0JKRUNUICopLG9ial9jbXApOworCW9wPU9CSl9ic2VhcmNoX29iaigmYSwgb2JqX29ianMsIE5VTV9PQkopOwogCWlmIChvcCA9PSBOVUxMKQogCQlyZXR1cm4oTklEX3VuZGVmKTsKLQlyZXR1cm4oKCpvcCktPm5pZCk7CisJcmV0dXJuKG5pZF9vYmpzWypvcF0ubmlkKTsKIAl9CiAKIC8qIENvbnZlcnQgYW4gb2JqZWN0IG5hbWUgaW50byBhbiBBU04xX09CSkVDVApAQCAtNDQxLDcgKzQ2OCw3IEBACiAJaW50IGksbj0wLGxlbixuaWQsIGZpcnN0LCB1c2VfYm47CiAJQklHTlVNICpibDsKIAl1bnNpZ25lZCBsb25nIGw7Ci0JdW5zaWduZWQgY2hhciAqcDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpwOwogCWNoYXIgdGJ1ZltERUNJTUFMX1NJWkUoaSkrREVDSU1BTF9TSVpFKGwpKzJdOwogCiAJaWYgKChhID09IE5VTEwpIHx8IChhLT5kYXRhID09IE5VTEwpKSB7CkBAIC02MTAsNjIgKzYzNyw1NiBAQAogCiBpbnQgT0JKX2xuMm5pZChjb25zdCBjaGFyICpzKQogCXsKLQlBU04xX09CSkVDVCBvLCpvbz0gJm8sKipvcDsKKwlBU04xX09CSkVDVCBvOworCWNvbnN0IEFTTjFfT0JKRUNUICpvbz0gJm87CiAJQURERURfT0JKIGFkLCphZHA7CisJY29uc3QgdW5zaWduZWQgaW50ICpvcDsKIAogCW8ubG49czsKIAlpZiAoYWRkZWQgIT0gTlVMTCkKIAkJewogCQlhZC50eXBlPUFEREVEX0xOQU1FOwogCQlhZC5vYmo9ICZvOwotCQlhZHA9KEFEREVEX09CSiAqKWxoX3JldHJpZXZlKGFkZGVkLCZhZCk7CisJCWFkcD1saF9BRERFRF9PQkpfcmV0cmlldmUoYWRkZWQsJmFkKTsKIAkJaWYgKGFkcCAhPSBOVUxMKSByZXR1cm4gKGFkcC0+b2JqLT5uaWQpOwogCQl9Ci0Jb3A9KEFTTjFfT0JKRUNUICoqKU9CSl9ic2VhcmNoKChjaGFyICopJm9vLChjaGFyICopbG5fb2JqcywgTlVNX0xOLAotCQlzaXplb2YoQVNOMV9PQkpFQ1QgKiksbG5fY21wKTsKKwlvcD1PQkpfYnNlYXJjaF9sbigmb28sIGxuX29ianMsIE5VTV9MTik7CiAJaWYgKG9wID09IE5VTEwpIHJldHVybihOSURfdW5kZWYpOwotCXJldHVybigoKm9wKS0+bmlkKTsKKwlyZXR1cm4obmlkX29ianNbKm9wXS5uaWQpOwogCX0KIAogaW50IE9CSl9zbjJuaWQoY29uc3QgY2hhciAqcykKIAl7Ci0JQVNOMV9PQkpFQ1Qgbywqb289ICZvLCoqb3A7CisJQVNOMV9PQkpFQ1QgbzsKKwljb25zdCBBU04xX09CSkVDVCAqb289ICZvOwogCUFEREVEX09CSiBhZCwqYWRwOworCWNvbnN0IHVuc2lnbmVkIGludCAqb3A7CiAKIAlvLnNuPXM7CiAJaWYgKGFkZGVkICE9IE5VTEwpCiAJCXsKIAkJYWQudHlwZT1BRERFRF9TTkFNRTsKIAkJYWQub2JqPSAmbzsKLQkJYWRwPShBRERFRF9PQkogKilsaF9yZXRyaWV2ZShhZGRlZCwmYWQpOworCQlhZHA9bGhfQURERURfT0JKX3JldHJpZXZlKGFkZGVkLCZhZCk7CiAJCWlmIChhZHAgIT0gTlVMTCkgcmV0dXJuIChhZHAtPm9iai0+bmlkKTsKIAkJfQotCW9wPShBU04xX09CSkVDVCAqKilPQkpfYnNlYXJjaCgoY2hhciAqKSZvbywoY2hhciAqKXNuX29ianMsTlVNX1NOLAotCQlzaXplb2YoQVNOMV9PQkpFQ1QgKiksc25fY21wKTsKKwlvcD1PQkpfYnNlYXJjaF9zbigmb28sIHNuX29ianMsIE5VTV9TTik7CiAJaWYgKG9wID09IE5VTEwpIHJldHVybihOSURfdW5kZWYpOwotCXJldHVybigoKm9wKS0+bmlkKTsKKwlyZXR1cm4obmlkX29ianNbKm9wXS5uaWQpOwogCX0KIAotc3RhdGljIGludCBvYmpfY21wKGNvbnN0IHZvaWQgKmFwLCBjb25zdCB2b2lkICpicCkKK2NvbnN0IHZvaWQgKk9CSl9ic2VhcmNoXyhjb25zdCB2b2lkICprZXksIGNvbnN0IHZvaWQgKmJhc2UsIGludCBudW0sIGludCBzaXplLAorCQkJIGludCAoKmNtcCkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKQogCXsKLQlpbnQgajsKLQljb25zdCBBU04xX09CSkVDVCAqYT0gKihBU04xX09CSkVDVCAqIGNvbnN0ICopYXA7Ci0JY29uc3QgQVNOMV9PQkpFQ1QgKmI9ICooQVNOMV9PQkpFQ1QgKiBjb25zdCAqKWJwOwotCi0Jaj0oYS0+bGVuZ3RoIC0gYi0+bGVuZ3RoKTsKLSAgICAgICAgaWYgKGopIHJldHVybihqKTsKLQlyZXR1cm4obWVtY21wKGEtPmRhdGEsYi0+ZGF0YSxhLT5sZW5ndGgpKTsKLSAgICAgICAgfQotCi1jb25zdCBjaGFyICpPQkpfYnNlYXJjaChjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKmJhc2UsIGludCBudW0sIGludCBzaXplLAotCWludCAoKmNtcCkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKQotCXsKLQlyZXR1cm4gT0JKX2JzZWFyY2hfZXgoa2V5LCBiYXNlLCBudW0sIHNpemUsIGNtcCwgMCk7CisJcmV0dXJuIE9CSl9ic2VhcmNoX2V4XyhrZXksIGJhc2UsIG51bSwgc2l6ZSwgY21wLCAwKTsKIAl9CiAKLWNvbnN0IGNoYXIgKk9CSl9ic2VhcmNoX2V4KGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqYmFzZSwgaW50IG51bSwKLQlpbnQgc2l6ZSwgaW50ICgqY21wKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKiksIGludCBmbGFncykKK2NvbnN0IHZvaWQgKk9CSl9ic2VhcmNoX2V4Xyhjb25zdCB2b2lkICprZXksIGNvbnN0IHZvaWQgKmJhc2VfLCBpbnQgbnVtLAorCQkJICAgIGludCBzaXplLAorCQkJICAgIGludCAoKmNtcCkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopLAorCQkJICAgIGludCBmbGFncykKIAl7CisJY29uc3QgY2hhciAqYmFzZT1iYXNlXzsKIAlpbnQgbCxoLGk9MCxjPTA7CiAJY29uc3QgY2hhciAqcCA9IE5VTEw7CiAKZGlmZiAtLWdpdCBhL2NyeXB0by9vYmplY3RzL29ial9kYXQuaCBiL2NyeXB0by9vYmplY3RzL29ial9kYXQuaAppbmRleCAyM2JkYjQ2Li42NDQ5YmU2IDEwMDY0NAotLS0gYS9jcnlwdG8vb2JqZWN0cy9vYmpfZGF0LmgKKysrIGIvY3J5cHRvL29iamVjdHMvb2JqX2RhdC5oCkBAIC02Nyw3ICs2Nyw3IEBACiAjZGVmaW5lIE5VTV9MTiA4ODYKICNkZWZpbmUgTlVNX09CSiA4NDAKIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgbHZhbHVlc1s1ODI0XT17CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBsdmFsdWVzWzU4MjRdPXsKIDB4MDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFsgIDBdIE9CSl91bmRlZiAqLwogMHgyQSwweDg2LDB4NDgsMHg4NiwweEY3LDB4MEQsICAgICAgICAgICAgICAgLyogWyAgMV0gT0JKX3JzYWRzaSAqLwogMHgyQSwweDg2LDB4NDgsMHg4NiwweEY3LDB4MEQsMHgwMSwgICAgICAgICAgLyogWyAgN10gT0JKX3BrY3MgKi8KQEAgLTkxMCw3ICs5MTAsNyBAQAogMHg1NSwweDA0LDB4MzYsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogWzU4MjBdIE9CSl9kbWROYW1lICovCiB9OwogCi1zdGF0aWMgQVNOMV9PQkpFQ1QgbmlkX29ianNbTlVNX05JRF09eworc3RhdGljIGNvbnN0IEFTTjFfT0JKRUNUIG5pZF9vYmpzW05VTV9OSURdPXsKIHsiVU5ERUYiLCJ1bmRlZmluZWQiLE5JRF91bmRlZiwxLCYobHZhbHVlc1swXSksMH0sCiB7InJzYWRzaSIsIlJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuIixOSURfcnNhZHNpLDYsJihsdmFsdWVzWzFdKSwwfSwKIHsicGtjcyIsIlJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuIFBLQ1MiLE5JRF9wa2NzLDcsJihsdmFsdWVzWzddKSwwfSwKQEAgLTIzNTMsMjYyNCArMjM1MywyNjI0IEBACiB7ImRtZE5hbWUiLCJkbWROYW1lIixOSURfZG1kTmFtZSwzLCYobHZhbHVlc1s1ODIwXSksMH0sCiB9OwogCi1zdGF0aWMgQVNOMV9PQkpFQ1QgKnNuX29ianNbTlVNX1NOXT17Ci0mKG5pZF9vYmpzWzM2NF0pLC8qICJBRF9EVkNTIiAqLwotJihuaWRfb2Jqc1s0MTldKSwvKiAiQUVTLTEyOC1DQkMiICovCi0mKG5pZF9vYmpzWzQyMV0pLC8qICJBRVMtMTI4LUNGQiIgKi8KLSYobmlkX29ianNbNjUwXSksLyogIkFFUy0xMjgtQ0ZCMSIgKi8KLSYobmlkX29ianNbNjUzXSksLyogIkFFUy0xMjgtQ0ZCOCIgKi8KLSYobmlkX29ianNbNDE4XSksLyogIkFFUy0xMjgtRUNCIiAqLwotJihuaWRfb2Jqc1s0MjBdKSwvKiAiQUVTLTEyOC1PRkIiICovCi0mKG5pZF9vYmpzWzQyM10pLC8qICJBRVMtMTkyLUNCQyIgKi8KLSYobmlkX29ianNbNDI1XSksLyogIkFFUy0xOTItQ0ZCIiAqLwotJihuaWRfb2Jqc1s2NTFdKSwvKiAiQUVTLTE5Mi1DRkIxIiAqLwotJihuaWRfb2Jqc1s2NTRdKSwvKiAiQUVTLTE5Mi1DRkI4IiAqLwotJihuaWRfb2Jqc1s0MjJdKSwvKiAiQUVTLTE5Mi1FQ0IiICovCi0mKG5pZF9vYmpzWzQyNF0pLC8qICJBRVMtMTkyLU9GQiIgKi8KLSYobmlkX29ianNbNDI3XSksLyogIkFFUy0yNTYtQ0JDIiAqLwotJihuaWRfb2Jqc1s0MjldKSwvKiAiQUVTLTI1Ni1DRkIiICovCi0mKG5pZF9vYmpzWzY1Ml0pLC8qICJBRVMtMjU2LUNGQjEiICovCi0mKG5pZF9vYmpzWzY1NV0pLC8qICJBRVMtMjU2LUNGQjgiICovCi0mKG5pZF9vYmpzWzQyNl0pLC8qICJBRVMtMjU2LUVDQiIgKi8KLSYobmlkX29ianNbNDI4XSksLyogIkFFUy0yNTYtT0ZCIiAqLwotJihuaWRfb2Jqc1s5MV0pLC8qICJCRi1DQkMiICovCi0mKG5pZF9vYmpzWzkzXSksLyogIkJGLUNGQiIgKi8KLSYobmlkX29ianNbOTJdKSwvKiAiQkYtRUNCIiAqLwotJihuaWRfb2Jqc1s5NF0pLC8qICJCRi1PRkIiICovCi0mKG5pZF9vYmpzWzE0XSksLyogIkMiICovCi0mKG5pZF9vYmpzWzc1MV0pLC8qICJDQU1FTExJQS0xMjgtQ0JDIiAqLwotJihuaWRfb2Jqc1s3NTddKSwvKiAiQ0FNRUxMSUEtMTI4LUNGQiIgKi8KLSYobmlkX29ianNbNzYwXSksLyogIkNBTUVMTElBLTEyOC1DRkIxIiAqLwotJihuaWRfb2Jqc1s3NjNdKSwvKiAiQ0FNRUxMSUEtMTI4LUNGQjgiICovCi0mKG5pZF9vYmpzWzc1NF0pLC8qICJDQU1FTExJQS0xMjgtRUNCIiAqLwotJihuaWRfb2Jqc1s3NjZdKSwvKiAiQ0FNRUxMSUEtMTI4LU9GQiIgKi8KLSYobmlkX29ianNbNzUyXSksLyogIkNBTUVMTElBLTE5Mi1DQkMiICovCi0mKG5pZF9vYmpzWzc1OF0pLC8qICJDQU1FTExJQS0xOTItQ0ZCIiAqLwotJihuaWRfb2Jqc1s3NjFdKSwvKiAiQ0FNRUxMSUEtMTkyLUNGQjEiICovCi0mKG5pZF9vYmpzWzc2NF0pLC8qICJDQU1FTExJQS0xOTItQ0ZCOCIgKi8KLSYobmlkX29ianNbNzU1XSksLyogIkNBTUVMTElBLTE5Mi1FQ0IiICovCi0mKG5pZF9vYmpzWzc2N10pLC8qICJDQU1FTExJQS0xOTItT0ZCIiAqLwotJihuaWRfb2Jqc1s3NTNdKSwvKiAiQ0FNRUxMSUEtMjU2LUNCQyIgKi8KLSYobmlkX29ianNbNzU5XSksLyogIkNBTUVMTElBLTI1Ni1DRkIiICovCi0mKG5pZF9vYmpzWzc2Ml0pLC8qICJDQU1FTExJQS0yNTYtQ0ZCMSIgKi8KLSYobmlkX29ianNbNzY1XSksLyogIkNBTUVMTElBLTI1Ni1DRkI4IiAqLwotJihuaWRfb2Jqc1s3NTZdKSwvKiAiQ0FNRUxMSUEtMjU2LUVDQiIgKi8KLSYobmlkX29ianNbNzY4XSksLyogIkNBTUVMTElBLTI1Ni1PRkIiICovCi0mKG5pZF9vYmpzWzEwOF0pLC8qICJDQVNUNS1DQkMiICovCi0mKG5pZF9vYmpzWzExMF0pLC8qICJDQVNUNS1DRkIiICovCi0mKG5pZF9vYmpzWzEwOV0pLC8qICJDQVNUNS1FQ0IiICovCi0mKG5pZF9vYmpzWzExMV0pLC8qICJDQVNUNS1PRkIiICovCi0mKG5pZF9vYmpzWzEzXSksLyogIkNOIiAqLwotJihuaWRfb2Jqc1sxNDFdKSwvKiAiQ1JMUmVhc29uIiAqLwotJihuaWRfb2Jqc1s0MTddKSwvKiAiQ1NQTmFtZSIgKi8KLSYobmlkX29ianNbMzY3XSksLyogIkNybElEIiAqLwotJihuaWRfb2Jqc1szOTFdKSwvKiAiREMiICovCi0mKG5pZF9vYmpzWzMxXSksLyogIkRFUy1DQkMiICovCi0mKG5pZF9vYmpzWzY0M10pLC8qICJERVMtQ0RNRiIgKi8KLSYobmlkX29ianNbMzBdKSwvKiAiREVTLUNGQiIgKi8KLSYobmlkX29ianNbNjU2XSksLyogIkRFUy1DRkIxIiAqLwotJihuaWRfb2Jqc1s2NTddKSwvKiAiREVTLUNGQjgiICovCi0mKG5pZF9vYmpzWzI5XSksLyogIkRFUy1FQ0IiICovCi0mKG5pZF9vYmpzWzMyXSksLyogIkRFUy1FREUiICovCi0mKG5pZF9vYmpzWzQzXSksLyogIkRFUy1FREUtQ0JDIiAqLwotJihuaWRfb2Jqc1s2MF0pLC8qICJERVMtRURFLUNGQiIgKi8KLSYobmlkX29ianNbNjJdKSwvKiAiREVTLUVERS1PRkIiICovCi0mKG5pZF9vYmpzWzMzXSksLyogIkRFUy1FREUzIiAqLwotJihuaWRfb2Jqc1s0NF0pLC8qICJERVMtRURFMy1DQkMiICovCi0mKG5pZF9vYmpzWzYxXSksLyogIkRFUy1FREUzLUNGQiIgKi8KLSYobmlkX29ianNbNjU4XSksLyogIkRFUy1FREUzLUNGQjEiICovCi0mKG5pZF9vYmpzWzY1OV0pLC8qICJERVMtRURFMy1DRkI4IiAqLwotJihuaWRfb2Jqc1s2M10pLC8qICJERVMtRURFMy1PRkIiICovCi0mKG5pZF9vYmpzWzQ1XSksLyogIkRFUy1PRkIiICovCi0mKG5pZF9vYmpzWzgwXSksLyogIkRFU1gtQ0JDIiAqLwotJihuaWRfb2Jqc1szODBdKSwvKiAiRE9EIiAqLwotJihuaWRfb2Jqc1sxMTZdKSwvKiAiRFNBIiAqLwotJihuaWRfb2Jqc1s2Nl0pLC8qICJEU0EtU0hBIiAqLwotJihuaWRfb2Jqc1sxMTNdKSwvKiAiRFNBLVNIQTEiICovCi0mKG5pZF9vYmpzWzcwXSksLyogIkRTQS1TSEExLW9sZCIgKi8KLSYobmlkX29ianNbNjddKSwvKiAiRFNBLW9sZCIgKi8KLSYobmlkX29ianNbMjk3XSksLyogIkRWQ1MiICovCi0mKG5pZF9vYmpzWzk5XSksLyogIkdOIiAqLwotJihuaWRfb2Jqc1s4NTVdKSwvKiAiSE1BQyIgKi8KLSYobmlkX29ianNbNzgwXSksLyogIkhNQUMtTUQ1IiAqLwotJihuaWRfb2Jqc1s3ODFdKSwvKiAiSE1BQy1TSEExIiAqLwotJihuaWRfb2Jqc1szODFdKSwvKiAiSUFOQSIgKi8KLSYobmlkX29ianNbMzRdKSwvKiAiSURFQS1DQkMiICovCi0mKG5pZF9vYmpzWzM1XSksLyogIklERUEtQ0ZCIiAqLwotJihuaWRfb2Jqc1szNl0pLC8qICJJREVBLUVDQiIgKi8KLSYobmlkX29ianNbNDZdKSwvKiAiSURFQS1PRkIiICovCi0mKG5pZF9vYmpzWzE4MV0pLC8qICJJU08iICovCi0mKG5pZF9vYmpzWzE4M10pLC8qICJJU08tVVMiICovCi0mKG5pZF9vYmpzWzY0NV0pLC8qICJJVFUtVCIgKi8KLSYobmlkX29ianNbNjQ2XSksLyogIkpPSU5ULUlTTy1JVFUtVCIgKi8KLSYobmlkX29ianNbNzczXSksLyogIktJU0EiICovCi0mKG5pZF9vYmpzWzE1XSksLyogIkwiICovCi0mKG5pZF9vYmpzWzg1Nl0pLC8qICJMb2NhbEtleVNldCIgKi8KLSYobmlkX29ianNbIDNdKSwvKiAiTUQyIiAqLwotJihuaWRfb2Jqc1syNTddKSwvKiAiTUQ0IiAqLwotJihuaWRfb2Jqc1sgNF0pLC8qICJNRDUiICovCi0mKG5pZF9vYmpzWzExNF0pLC8qICJNRDUtU0hBMSIgKi8KLSYobmlkX29ianNbOTVdKSwvKiAiTURDMiIgKi8KLSYobmlkX29ianNbMzg4XSksLyogIk1haWwiICovCi0mKG5pZF9vYmpzWzM5M10pLC8qICJOVUxMIiAqLwotJihuaWRfb2Jqc1s0MDRdKSwvKiAiTlVMTCIgKi8KLSYobmlkX29ianNbNTddKSwvKiAiTmV0c2NhcGUiICovCi0mKG5pZF9vYmpzWzM2Nl0pLC8qICJOb25jZSIgKi8KLSYobmlkX29ianNbMTddKSwvKiAiTyIgKi8KLSYobmlkX29ianNbMTc4XSksLyogIk9DU1AiICovCi0mKG5pZF9vYmpzWzE4MF0pLC8qICJPQ1NQU2lnbmluZyIgKi8KLSYobmlkX29ianNbMzc5XSksLyogIk9SRyIgKi8KLSYobmlkX29ianNbMThdKSwvKiAiT1UiICovCi0mKG5pZF9vYmpzWzc0OV0pLC8qICJPYWtsZXktRUMyTi0zIiAqLwotJihuaWRfb2Jqc1s3NTBdKSwvKiAiT2FrbGV5LUVDMk4tNCIgKi8KLSYobmlkX29ianNbIDldKSwvKiAiUEJFLU1EMi1ERVMiICovCi0mKG5pZF9vYmpzWzE2OF0pLC8qICJQQkUtTUQyLVJDMi02NCIgKi8KLSYobmlkX29ianNbMTBdKSwvKiAiUEJFLU1ENS1ERVMiICovCi0mKG5pZF9vYmpzWzE2OV0pLC8qICJQQkUtTUQ1LVJDMi02NCIgKi8KLSYobmlkX29ianNbMTQ3XSksLyogIlBCRS1TSEExLTJERVMiICovCi0mKG5pZF9vYmpzWzE0Nl0pLC8qICJQQkUtU0hBMS0zREVTIiAqLwotJihuaWRfb2Jqc1sxNzBdKSwvKiAiUEJFLVNIQTEtREVTIiAqLwotJihuaWRfb2Jqc1sxNDhdKSwvKiAiUEJFLVNIQTEtUkMyLTEyOCIgKi8KLSYobmlkX29ianNbMTQ5XSksLyogIlBCRS1TSEExLVJDMi00MCIgKi8KLSYobmlkX29ianNbNjhdKSwvKiAiUEJFLVNIQTEtUkMyLTY0IiAqLwotJihuaWRfb2Jqc1sxNDRdKSwvKiAiUEJFLVNIQTEtUkM0LTEyOCIgKi8KLSYobmlkX29ianNbMTQ1XSksLyogIlBCRS1TSEExLVJDNC00MCIgKi8KLSYobmlkX29ianNbMTYxXSksLyogIlBCRVMyIiAqLwotJihuaWRfb2Jqc1s2OV0pLC8qICJQQktERjIiICovCi0mKG5pZF9vYmpzWzE2Ml0pLC8qICJQQk1BQzEiICovCi0mKG5pZF9vYmpzWzEyN10pLC8qICJQS0lYIiAqLwotJihuaWRfb2Jqc1s5OF0pLC8qICJSQzItNDAtQ0JDIiAqLwotJihuaWRfb2Jqc1sxNjZdKSwvKiAiUkMyLTY0LUNCQyIgKi8KLSYobmlkX29ianNbMzddKSwvKiAiUkMyLUNCQyIgKi8KLSYobmlkX29ianNbMzldKSwvKiAiUkMyLUNGQiIgKi8KLSYobmlkX29ianNbMzhdKSwvKiAiUkMyLUVDQiIgKi8KLSYobmlkX29ianNbNDBdKSwvKiAiUkMyLU9GQiIgKi8KLSYobmlkX29ianNbIDVdKSwvKiAiUkM0IiAqLwotJihuaWRfb2Jqc1s5N10pLC8qICJSQzQtNDAiICovCi0mKG5pZF9vYmpzWzEyMF0pLC8qICJSQzUtQ0JDIiAqLwotJihuaWRfb2Jqc1sxMjJdKSwvKiAiUkM1LUNGQiIgKi8KLSYobmlkX29ianNbMTIxXSksLyogIlJDNS1FQ0IiICovCi0mKG5pZF9vYmpzWzEyM10pLC8qICJSQzUtT0ZCIiAqLwotJihuaWRfb2Jqc1sxMTddKSwvKiAiUklQRU1EMTYwIiAqLwotJihuaWRfb2Jqc1sxMjRdKSwvKiAiUkxFIiAqLwotJihuaWRfb2Jqc1sxOV0pLC8qICJSU0EiICovCi0mKG5pZF9vYmpzWyA3XSksLyogIlJTQS1NRDIiICovCi0mKG5pZF9vYmpzWzM5Nl0pLC8qICJSU0EtTUQ0IiAqLwotJihuaWRfb2Jqc1sgOF0pLC8qICJSU0EtTUQ1IiAqLwotJihuaWRfb2Jqc1s5Nl0pLC8qICJSU0EtTURDMiIgKi8KLSYobmlkX29ianNbMTA0XSksLyogIlJTQS1OUC1NRDUiICovCi0mKG5pZF9vYmpzWzExOV0pLC8qICJSU0EtUklQRU1EMTYwIiAqLwotJihuaWRfb2Jqc1s0Ml0pLC8qICJSU0EtU0hBIiAqLwotJihuaWRfb2Jqc1s2NV0pLC8qICJSU0EtU0hBMSIgKi8KLSYobmlkX29ianNbMTE1XSksLyogIlJTQS1TSEExLTIiICovCi0mKG5pZF9vYmpzWzY3MV0pLC8qICJSU0EtU0hBMjI0IiAqLwotJihuaWRfb2Jqc1s2NjhdKSwvKiAiUlNBLVNIQTI1NiIgKi8KLSYobmlkX29ianNbNjY5XSksLyogIlJTQS1TSEEzODQiICovCi0mKG5pZF9vYmpzWzY3MF0pLC8qICJSU0EtU0hBNTEyIiAqLwotJihuaWRfb2Jqc1s3NzddKSwvKiAiU0VFRC1DQkMiICovCi0mKG5pZF9vYmpzWzc3OV0pLC8qICJTRUVELUNGQiIgKi8KLSYobmlkX29ianNbNzc2XSksLyogIlNFRUQtRUNCIiAqLwotJihuaWRfb2Jqc1s3NzhdKSwvKiAiU0VFRC1PRkIiICovCi0mKG5pZF9vYmpzWzQxXSksLyogIlNIQSIgKi8KLSYobmlkX29ianNbNjRdKSwvKiAiU0hBMSIgKi8KLSYobmlkX29ianNbNjc1XSksLyogIlNIQTIyNCIgKi8KLSYobmlkX29ianNbNjcyXSksLyogIlNIQTI1NiIgKi8KLSYobmlkX29ianNbNjczXSksLyogIlNIQTM4NCIgKi8KLSYobmlkX29ianNbNjc0XSksLyogIlNIQTUxMiIgKi8KLSYobmlkX29ianNbMTg4XSksLyogIlNNSU1FIiAqLwotJihuaWRfb2Jqc1sxNjddKSwvKiAiU01JTUUtQ0FQUyIgKi8KLSYobmlkX29ianNbMTAwXSksLyogIlNOIiAqLwotJihuaWRfb2Jqc1sxNl0pLC8qICJTVCIgKi8KLSYobmlkX29ianNbMTQzXSksLyogIlNYTmV0SUQiICovCi0mKG5pZF9vYmpzWzQ1OF0pLC8qICJVSUQiICovCi0mKG5pZF9vYmpzWyAwXSksLyogIlVOREVGIiAqLwotJihuaWRfb2Jqc1sxMV0pLC8qICJYNTAwIiAqLwotJihuaWRfb2Jqc1szNzhdKSwvKiAiWDUwMGFsZ29yaXRobXMiICovCi0mKG5pZF9vYmpzWzEyXSksLyogIlg1MDkiICovCi0mKG5pZF9vYmpzWzE4NF0pLC8qICJYOS01NyIgKi8KLSYobmlkX29ianNbMTg1XSksLyogIlg5Y20iICovCi0mKG5pZF9vYmpzWzEyNV0pLC8qICJaTElCIiAqLwotJihuaWRfb2Jqc1s0NzhdKSwvKiAiYVJlY29yZCIgKi8KLSYobmlkX29ianNbMjg5XSksLyogImFhQ29udHJvbHMiICovCi0mKG5pZF9vYmpzWzI4N10pLC8qICJhYy1hdWRpdEVudGl0eSIgKi8KLSYobmlkX29ianNbMzk3XSksLyogImFjLXByb3h5aW5nIiAqLwotJihuaWRfb2Jqc1syODhdKSwvKiAiYWMtdGFyZ2V0aW5nIiAqLwotJihuaWRfb2Jqc1szNjhdKSwvKiAiYWNjZXB0YWJsZVJlc3BvbnNlcyIgKi8KLSYobmlkX29ianNbNDQ2XSksLyogImFjY291bnQiICovCi0mKG5pZF9vYmpzWzM2M10pLC8qICJhZF90aW1lc3RhbXBpbmciICovCi0mKG5pZF9vYmpzWzM3Nl0pLC8qICJhbGdvcml0aG0iICovCi0mKG5pZF9vYmpzWzQwNV0pLC8qICJhbnNpLVg5LTYyIiAqLwotJihuaWRfb2Jqc1s3NDZdKSwvKiAiYW55UG9saWN5IiAqLwotJihuaWRfb2Jqc1szNzBdKSwvKiAiYXJjaGl2ZUN1dG9mZiIgKi8KLSYobmlkX29ianNbNDg0XSksLyogImFzc29jaWF0ZWREb21haW4iICovCi0mKG5pZF9vYmpzWzQ4NV0pLC8qICJhc3NvY2lhdGVkTmFtZSIgKi8KLSYobmlkX29ianNbNTAxXSksLyogImF1ZGlvIiAqLwotJihuaWRfb2Jqc1sxNzddKSwvKiAiYXV0aG9yaXR5SW5mb0FjY2VzcyIgKi8KLSYobmlkX29ianNbOTBdKSwvKiAiYXV0aG9yaXR5S2V5SWRlbnRpZmllciIgKi8KLSYobmlkX29ianNbODgyXSksLyogImF1dGhvcml0eVJldm9jYXRpb25MaXN0IiAqLwotJihuaWRfb2Jqc1s4N10pLC8qICJiYXNpY0NvbnN0cmFpbnRzIiAqLwotJihuaWRfb2Jqc1szNjVdKSwvKiAiYmFzaWNPQ1NQUmVzcG9uc2UiICovCi0mKG5pZF9vYmpzWzI4NV0pLC8qICJiaW9tZXRyaWNJbmZvIiAqLwotJihuaWRfb2Jqc1s0OTRdKSwvKiAiYnVpbGRpbmdOYW1lIiAqLwotJihuaWRfb2Jqc1s4NjBdKSwvKiAiYnVzaW5lc3NDYXRlZ29yeSIgKi8KLSYobmlkX29ianNbNjkxXSksLyogImMyb25iMTkxdjQiICovCi0mKG5pZF9vYmpzWzY5Ml0pLC8qICJjMm9uYjE5MXY1IiAqLwotJihuaWRfb2Jqc1s2OTddKSwvKiAiYzJvbmIyMzl2NCIgKi8KLSYobmlkX29ianNbNjk4XSksLyogImMyb25iMjM5djUiICovCi0mKG5pZF9vYmpzWzY4NF0pLC8qICJjMnBuYjE2M3YxIiAqLwotJihuaWRfb2Jqc1s2ODVdKSwvKiAiYzJwbmIxNjN2MiIgKi8KLSYobmlkX29ianNbNjg2XSksLyogImMycG5iMTYzdjMiICovCi0mKG5pZF9vYmpzWzY4N10pLC8qICJjMnBuYjE3NnYxIiAqLwotJihuaWRfb2Jqc1s2OTNdKSwvKiAiYzJwbmIyMDh3MSIgKi8KLSYobmlkX29ianNbNjk5XSksLyogImMycG5iMjcydzEiICovCi0mKG5pZF9vYmpzWzcwMF0pLC8qICJjMnBuYjMwNHcxIiAqLwotJihuaWRfb2Jqc1s3MDJdKSwvKiAiYzJwbmIzNjh3MSIgKi8KLSYobmlkX29ianNbNjg4XSksLyogImMydG5iMTkxdjEiICovCi0mKG5pZF9vYmpzWzY4OV0pLC8qICJjMnRuYjE5MXYyIiAqLwotJihuaWRfb2Jqc1s2OTBdKSwvKiAiYzJ0bmIxOTF2MyIgKi8KLSYobmlkX29ianNbNjk0XSksLyogImMydG5iMjM5djEiICovCi0mKG5pZF9vYmpzWzY5NV0pLC8qICJjMnRuYjIzOXYyIiAqLwotJihuaWRfb2Jqc1s2OTZdKSwvKiAiYzJ0bmIyMzl2MyIgKi8KLSYobmlkX29ianNbNzAxXSksLyogImMydG5iMzU5djEiICovCi0mKG5pZF9vYmpzWzcwM10pLC8qICJjMnRuYjQzMXIxIiAqLwotJihuaWRfb2Jqc1s4ODFdKSwvKiAiY0FDZXJ0aWZpY2F0ZSIgKi8KLSYobmlkX29ianNbNDgzXSksLyogImNOQU1FUmVjb3JkIiAqLwotJihuaWRfb2Jqc1sxNzldKSwvKiAiY2FJc3N1ZXJzIiAqLwotJihuaWRfb2Jqc1s3ODVdKSwvKiAiY2FSZXBvc2l0b3J5IiAqLwotJihuaWRfb2Jqc1s0NDNdKSwvKiAiY2FzZUlnbm9yZUlBNVN0cmluZ1N5bnRheCIgKi8KLSYobmlkX29ianNbMTUyXSksLyogImNlcnRCYWciICovCi0mKG5pZF9vYmpzWzY3N10pLC8qICJjZXJ0aWNvbS1hcmMiICovCi0mKG5pZF9vYmpzWzc3MV0pLC8qICJjZXJ0aWZpY2F0ZUlzc3VlciIgKi8KLSYobmlkX29ianNbODldKSwvKiAiY2VydGlmaWNhdGVQb2xpY2llcyIgKi8KLSYobmlkX29ianNbODgzXSksLyogImNlcnRpZmljYXRlUmV2b2NhdGlvbkxpc3QiICovCi0mKG5pZF9vYmpzWzU0XSksLyogImNoYWxsZW5nZVBhc3N3b3JkIiAqLwotJihuaWRfb2Jqc1s0MDddKSwvKiAiY2hhcmFjdGVyaXN0aWMtdHdvLWZpZWxkIiAqLwotJihuaWRfb2Jqc1szOTVdKSwvKiAiY2xlYXJhbmNlIiAqLwotJihuaWRfb2Jqc1sxMzBdKSwvKiAiY2xpZW50QXV0aCIgKi8KLSYobmlkX29ianNbMTMxXSksLyogImNvZGVTaWduaW5nIiAqLwotJihuaWRfb2Jqc1s1MF0pLC8qICJjb250ZW50VHlwZSIgKi8KLSYobmlkX29ianNbNTNdKSwvKiAiY291bnRlcnNpZ25hdHVyZSIgKi8KLSYobmlkX29ianNbMTUzXSksLyogImNybEJhZyIgKi8KLSYobmlkX29ianNbMTAzXSksLyogImNybERpc3RyaWJ1dGlvblBvaW50cyIgKi8KLSYobmlkX29ianNbODhdKSwvKiAiY3JsTnVtYmVyIiAqLwotJihuaWRfb2Jqc1s4ODRdKSwvKiAiY3Jvc3NDZXJ0aWZpY2F0ZVBhaXIiICovCi0mKG5pZF9vYmpzWzgwNl0pLC8qICJjcnlwdG9jb20iICovCi0mKG5pZF9vYmpzWzgwNV0pLC8qICJjcnlwdG9wcm8iICovCi0mKG5pZF9vYmpzWzUwMF0pLC8qICJkSVRSZWRpcmVjdCIgKi8KLSYobmlkX29ianNbNDUxXSksLyogImROU0RvbWFpbiIgKi8KLSYobmlkX29ianNbNDk1XSksLyogImRTQVF1YWxpdHkiICovCi0mKG5pZF9vYmpzWzQzNF0pLC8qICJkYXRhIiAqLwotJihuaWRfb2Jqc1szOTBdKSwvKiAiZGNvYmplY3QiICovCi0mKG5pZF9vYmpzWzE0MF0pLC8qICJkZWx0YUNSTCIgKi8KLSYobmlkX29ianNbODkxXSksLyogImRlbHRhUmV2b2NhdGlvbkxpc3QiICovCi0mKG5pZF9vYmpzWzEwN10pLC8qICJkZXNjcmlwdGlvbiIgKi8KLSYobmlkX29ianNbODcxXSksLyogImRlc3RpbmF0aW9uSW5kaWNhdG9yIiAqLwotJihuaWRfb2Jqc1syOF0pLC8qICJkaEtleUFncmVlbWVudCIgKi8KLSYobmlkX29ianNbMzgyXSksLyogImRpcmVjdG9yeSIgKi8KLSYobmlkX29ianNbODg3XSksLyogImRpc3Rpbmd1aXNoZWROYW1lIiAqLwotJihuaWRfb2Jqc1s4OTJdKSwvKiAiZG1kTmFtZSIgKi8KLSYobmlkX29ianNbMTc0XSksLyogImRuUXVhbGlmaWVyIiAqLwotJihuaWRfb2Jqc1s0NDddKSwvKiAiZG9jdW1lbnQiICovCi0mKG5pZF9vYmpzWzQ3MV0pLC8qICJkb2N1bWVudEF1dGhvciIgKi8KLSYobmlkX29ianNbNDY4XSksLyogImRvY3VtZW50SWRlbnRpZmllciIgKi8KLSYobmlkX29ianNbNDcyXSksLyogImRvY3VtZW50TG9jYXRpb24iICovCi0mKG5pZF9vYmpzWzUwMl0pLC8qICJkb2N1bWVudFB1Ymxpc2hlciIgKi8KLSYobmlkX29ianNbNDQ5XSksLyogImRvY3VtZW50U2VyaWVzIiAqLwotJihuaWRfb2Jqc1s0NjldKSwvKiAiZG9jdW1lbnRUaXRsZSIgKi8KLSYobmlkX29ianNbNDcwXSksLyogImRvY3VtZW50VmVyc2lvbiIgKi8KLSYobmlkX29ianNbMzkyXSksLyogImRvbWFpbiIgKi8KLSYobmlkX29ianNbNDUyXSksLyogImRvbWFpblJlbGF0ZWRPYmplY3QiICovCi0mKG5pZF9vYmpzWzgwMl0pLC8qICJkc2Ffd2l0aF9TSEEyMjQiICovCi0mKG5pZF9vYmpzWzgwM10pLC8qICJkc2Ffd2l0aF9TSEEyNTYiICovCi0mKG5pZF9vYmpzWzc5MV0pLC8qICJlY2RzYS13aXRoLVJlY29tbWVuZGVkIiAqLwotJihuaWRfb2Jqc1s0MTZdKSwvKiAiZWNkc2Etd2l0aC1TSEExIiAqLwotJihuaWRfb2Jqc1s3OTNdKSwvKiAiZWNkc2Etd2l0aC1TSEEyMjQiICovCi0mKG5pZF9vYmpzWzc5NF0pLC8qICJlY2RzYS13aXRoLVNIQTI1NiIgKi8KLSYobmlkX29ianNbNzk1XSksLyogImVjZHNhLXdpdGgtU0hBMzg0IiAqLwotJihuaWRfb2Jqc1s3OTZdKSwvKiAiZWNkc2Etd2l0aC1TSEE1MTIiICovCi0mKG5pZF9vYmpzWzc5Ml0pLC8qICJlY2RzYS13aXRoLVNwZWNpZmllZCIgKi8KLSYobmlkX29ianNbNDhdKSwvKiAiZW1haWxBZGRyZXNzIiAqLwotJihuaWRfb2Jqc1sxMzJdKSwvKiAiZW1haWxQcm90ZWN0aW9uIiAqLwotJihuaWRfb2Jqc1s4ODVdKSwvKiAiZW5oYW5jZWRTZWFyY2hHdWlkZSIgKi8KLSYobmlkX29ianNbMzg5XSksLyogImVudGVycHJpc2VzIiAqLwotJihuaWRfb2Jqc1szODRdKSwvKiAiZXhwZXJpbWVudGFsIiAqLwotJihuaWRfb2Jqc1sxNzJdKSwvKiAiZXh0UmVxIiAqLwotJihuaWRfb2Jqc1s1Nl0pLC8qICJleHRlbmRlZENlcnRpZmljYXRlQXR0cmlidXRlcyIgKi8KLSYobmlkX29ianNbMTI2XSksLyogImV4dGVuZGVkS2V5VXNhZ2UiICovCi0mKG5pZF9vYmpzWzM3Ml0pLC8qICJleHRlbmRlZFN0YXR1cyIgKi8KLSYobmlkX29ianNbODY3XSksLyogImZhY3NpbWlsZVRlbGVwaG9uZU51bWJlciIgKi8KLSYobmlkX29ianNbNDYyXSksLyogImZhdm91cml0ZURyaW5rIiAqLwotJihuaWRfb2Jqc1s4NTddKSwvKiAiZnJlc2hlc3RDUkwiICovCi0mKG5pZF9vYmpzWzQ1M10pLC8qICJmcmllbmRseUNvdW50cnkiICovCi0mKG5pZF9vYmpzWzQ5MF0pLC8qICJmcmllbmRseUNvdW50cnlOYW1lIiAqLwotJihuaWRfb2Jqc1sxNTZdKSwvKiAiZnJpZW5kbHlOYW1lIiAqLwotJihuaWRfb2Jqc1s1MDldKSwvKiAiZ2VuZXJhdGlvblF1YWxpZmllciIgKi8KLSYobmlkX29ianNbODE1XSksLyogImdvc3QtbWFjIiAqLwotJihuaWRfb2Jqc1s4MTFdKSwvKiAiZ29zdDIwMDEiICovCi0mKG5pZF9vYmpzWzg1MV0pLC8qICJnb3N0MjAwMWNjIiAqLwotJihuaWRfb2Jqc1s4MTNdKSwvKiAiZ29zdDg5IiAqLwotJihuaWRfb2Jqc1s4MTRdKSwvKiAiZ29zdDg5LWNudCIgKi8KLSYobmlkX29ianNbODEyXSksLyogImdvc3Q5NCIgKi8KLSYobmlkX29ianNbODUwXSksLyogImdvc3Q5NGNjIiAqLwotJihuaWRfb2Jqc1s3OTddKSwvKiAiaG1hY1dpdGhNRDUiICovCi0mKG5pZF9vYmpzWzE2M10pLC8qICJobWFjV2l0aFNIQTEiICovCi0mKG5pZF9vYmpzWzc5OF0pLC8qICJobWFjV2l0aFNIQTIyNCIgKi8KLSYobmlkX29ianNbNzk5XSksLyogImhtYWNXaXRoU0hBMjU2IiAqLwotJihuaWRfb2Jqc1s4MDBdKSwvKiAiaG1hY1dpdGhTSEEzODQiICovCi0mKG5pZF9vYmpzWzgwMV0pLC8qICJobWFjV2l0aFNIQTUxMiIgKi8KLSYobmlkX29ianNbNDMyXSksLyogImhvbGRJbnN0cnVjdGlvbkNhbGxJc3N1ZXIiICovCi0mKG5pZF9vYmpzWzQzMF0pLC8qICJob2xkSW5zdHJ1Y3Rpb25Db2RlIiAqLwotJihuaWRfb2Jqc1s0MzFdKSwvKiAiaG9sZEluc3RydWN0aW9uTm9uZSIgKi8KLSYobmlkX29ianNbNDMzXSksLyogImhvbGRJbnN0cnVjdGlvblJlamVjdCIgKi8KLSYobmlkX29ianNbNDg2XSksLyogImhvbWVQb3N0YWxBZGRyZXNzIiAqLwotJihuaWRfb2Jqc1s0NzNdKSwvKiAiaG9tZVRlbGVwaG9uZU51bWJlciIgKi8KLSYobmlkX29ianNbNDY2XSksLyogImhvc3QiICovCi0mKG5pZF9vYmpzWzg4OV0pLC8qICJob3VzZUlkZW50aWZpZXIiICovCi0mKG5pZF9vYmpzWzQ0Ml0pLC8qICJpQTVTdHJpbmdTeW50YXgiICovCi0mKG5pZF9vYmpzWzc4M10pLC8qICJpZC1ESEJhc2VkTWFjIiAqLwotJihuaWRfb2Jqc1s4MjRdKSwvKiAiaWQtR29zdDI4MTQ3LTg5LUNyeXB0b1Byby1BLVBhcmFtU2V0IiAqLwotJihuaWRfb2Jqc1s4MjVdKSwvKiAiaWQtR29zdDI4MTQ3LTg5LUNyeXB0b1Byby1CLVBhcmFtU2V0IiAqLwotJihuaWRfb2Jqc1s4MjZdKSwvKiAiaWQtR29zdDI4MTQ3LTg5LUNyeXB0b1Byby1DLVBhcmFtU2V0IiAqLwotJihuaWRfb2Jqc1s4MjddKSwvKiAiaWQtR29zdDI4MTQ3LTg5LUNyeXB0b1Byby1ELVBhcmFtU2V0IiAqLwotJihuaWRfb2Jqc1s4MTldKSwvKiAiaWQtR29zdDI4MTQ3LTg5LUNyeXB0b1Byby1LZXlNZXNoaW5nIiAqLwotJihuaWRfb2Jqc1s4MjldKSwvKiAiaWQtR29zdDI4MTQ3LTg5LUNyeXB0b1Byby1Pc2Nhci0xLTAtUGFyYW1TZXQiICovCi0mKG5pZF9vYmpzWzgyOF0pLC8qICJpZC1Hb3N0MjgxNDctODktQ3J5cHRvUHJvLU9zY2FyLTEtMS1QYXJhbVNldCIgKi8KLSYobmlkX29ianNbODMwXSksLyogImlkLUdvc3QyODE0Ny04OS1DcnlwdG9Qcm8tUklDLTEtUGFyYW1TZXQiICovCi0mKG5pZF9vYmpzWzgyMF0pLC8qICJpZC1Hb3N0MjgxNDctODktTm9uZS1LZXlNZXNoaW5nIiAqLwotJihuaWRfb2Jqc1s4MjNdKSwvKiAiaWQtR29zdDI4MTQ3LTg5LVRlc3RQYXJhbVNldCIgKi8KLSYobmlkX29ianNbODQ5XSksLyogImlkLUdvc3QyODE0Ny04OS1jYyIgKi8KLSYobmlkX29ianNbODQwXSksLyogImlkLUdvc3RSMzQxMC0yMDAxLUNyeXB0b1Byby1BLVBhcmFtU2V0IiAqLwotJihuaWRfb2Jqc1s4NDFdKSwvKiAiaWQtR29zdFIzNDEwLTIwMDEtQ3J5cHRvUHJvLUItUGFyYW1TZXQiICovCi0mKG5pZF9vYmpzWzg0Ml0pLC8qICJpZC1Hb3N0UjM0MTAtMjAwMS1DcnlwdG9Qcm8tQy1QYXJhbVNldCIgKi8KLSYobmlkX29ianNbODQzXSksLyogImlkLUdvc3RSMzQxMC0yMDAxLUNyeXB0b1Byby1YY2hBLVBhcmFtU2V0IiAqLwotJihuaWRfb2Jqc1s4NDRdKSwvKiAiaWQtR29zdFIzNDEwLTIwMDEtQ3J5cHRvUHJvLVhjaEItUGFyYW1TZXQiICovCi0mKG5pZF9vYmpzWzg1NF0pLC8qICJpZC1Hb3N0UjM0MTAtMjAwMS1QYXJhbVNldC1jYyIgKi8KLSYobmlkX29ianNbODM5XSksLyogImlkLUdvc3RSMzQxMC0yMDAxLVRlc3RQYXJhbVNldCIgKi8KLSYobmlkX29ianNbODE3XSksLyogImlkLUdvc3RSMzQxMC0yMDAxREgiICovCi0mKG5pZF9vYmpzWzgzMl0pLC8qICJpZC1Hb3N0UjM0MTAtOTQtQ3J5cHRvUHJvLUEtUGFyYW1TZXQiICovCi0mKG5pZF9vYmpzWzgzM10pLC8qICJpZC1Hb3N0UjM0MTAtOTQtQ3J5cHRvUHJvLUItUGFyYW1TZXQiICovCi0mKG5pZF9vYmpzWzgzNF0pLC8qICJpZC1Hb3N0UjM0MTAtOTQtQ3J5cHRvUHJvLUMtUGFyYW1TZXQiICovCi0mKG5pZF9vYmpzWzgzNV0pLC8qICJpZC1Hb3N0UjM0MTAtOTQtQ3J5cHRvUHJvLUQtUGFyYW1TZXQiICovCi0mKG5pZF9vYmpzWzgzNl0pLC8qICJpZC1Hb3N0UjM0MTAtOTQtQ3J5cHRvUHJvLVhjaEEtUGFyYW1TZXQiICovCi0mKG5pZF9vYmpzWzgzN10pLC8qICJpZC1Hb3N0UjM0MTAtOTQtQ3J5cHRvUHJvLVhjaEItUGFyYW1TZXQiICovCi0mKG5pZF9vYmpzWzgzOF0pLC8qICJpZC1Hb3N0UjM0MTAtOTQtQ3J5cHRvUHJvLVhjaEMtUGFyYW1TZXQiICovCi0mKG5pZF9vYmpzWzgzMV0pLC8qICJpZC1Hb3N0UjM0MTAtOTQtVGVzdFBhcmFtU2V0IiAqLwotJihuaWRfb2Jqc1s4NDVdKSwvKiAiaWQtR29zdFIzNDEwLTk0LWEiICovCi0mKG5pZF9vYmpzWzg0Nl0pLC8qICJpZC1Hb3N0UjM0MTAtOTQtYUJpcyIgKi8KLSYobmlkX29ianNbODQ3XSksLyogImlkLUdvc3RSMzQxMC05NC1iIiAqLwotJihuaWRfb2Jqc1s4NDhdKSwvKiAiaWQtR29zdFIzNDEwLTk0LWJCaXMiICovCi0mKG5pZF9vYmpzWzgxOF0pLC8qICJpZC1Hb3N0UjM0MTAtOTRESCIgKi8KLSYobmlkX29ianNbODIyXSksLyogImlkLUdvc3RSMzQxMS05NC1DcnlwdG9Qcm9QYXJhbVNldCIgKi8KLSYobmlkX29ianNbODIxXSksLyogImlkLUdvc3RSMzQxMS05NC1UZXN0UGFyYW1TZXQiICovCi0mKG5pZF9vYmpzWzgwN10pLC8qICJpZC1Hb3N0UjM0MTEtOTQtd2l0aC1Hb3N0UjM0MTAtMjAwMSIgKi8KLSYobmlkX29ianNbODUzXSksLyogImlkLUdvc3RSMzQxMS05NC13aXRoLUdvc3RSMzQxMC0yMDAxLWNjIiAqLwotJihuaWRfb2Jqc1s4MDhdKSwvKiAiaWQtR29zdFIzNDExLTk0LXdpdGgtR29zdFIzNDEwLTk0IiAqLwotJihuaWRfb2Jqc1s4NTJdKSwvKiAiaWQtR29zdFIzNDExLTk0LXdpdGgtR29zdFIzNDEwLTk0LWNjIiAqLwotJihuaWRfb2Jqc1s4MTBdKSwvKiAiaWQtSE1BQ0dvc3RSMzQxMS05NCIgKi8KLSYobmlkX29ianNbNzgyXSksLyogImlkLVBhc3N3b3JkQmFzZWRNQUMiICovCi0mKG5pZF9vYmpzWzI2Nl0pLC8qICJpZC1hY2EiICovCi0mKG5pZF9vYmpzWzM1NV0pLC8qICJpZC1hY2EtYWNjZXNzSWRlbnRpdHkiICovCi0mKG5pZF9vYmpzWzM1NF0pLC8qICJpZC1hY2EtYXV0aGVudGljYXRpb25JbmZvIiAqLwotJihuaWRfb2Jqc1szNTZdKSwvKiAiaWQtYWNhLWNoYXJnaW5nSWRlbnRpdHkiICovCi0mKG5pZF9vYmpzWzM5OV0pLC8qICJpZC1hY2EtZW5jQXR0cnMiICovCi0mKG5pZF9vYmpzWzM1N10pLC8qICJpZC1hY2EtZ3JvdXAiICovCi0mKG5pZF9vYmpzWzM1OF0pLC8qICJpZC1hY2Etcm9sZSIgKi8KLSYobmlkX29ianNbMTc2XSksLyogImlkLWFkIiAqLwotJihuaWRfb2Jqc1s3ODhdKSwvKiAiaWQtYWVzMTI4LXdyYXAiICovCi0mKG5pZF9vYmpzWzc4OV0pLC8qICJpZC1hZXMxOTItd3JhcCIgKi8KLSYobmlkX29ianNbNzkwXSksLyogImlkLWFlczI1Ni13cmFwIiAqLwotJihuaWRfb2Jqc1syNjJdKSwvKiAiaWQtYWxnIiAqLwotJihuaWRfb2Jqc1szMjNdKSwvKiAiaWQtYWxnLWRlczQwIiAqLwotJihuaWRfb2Jqc1szMjZdKSwvKiAiaWQtYWxnLWRoLXBvcCIgKi8KLSYobmlkX29ianNbMzI1XSksLyogImlkLWFsZy1kaC1zaWctaG1hYy1zaGExIiAqLwotJihuaWRfb2Jqc1szMjRdKSwvKiAiaWQtYWxnLW5vU2lnbmF0dXJlIiAqLwotJihuaWRfb2Jqc1syNjhdKSwvKiAiaWQtY2N0IiAqLwotJihuaWRfb2Jqc1szNjFdKSwvKiAiaWQtY2N0LVBLSURhdGEiICovCi0mKG5pZF9vYmpzWzM2Ml0pLC8qICJpZC1jY3QtUEtJUmVzcG9uc2UiICovCi0mKG5pZF9vYmpzWzM2MF0pLC8qICJpZC1jY3QtY3JzIiAqLwotJihuaWRfb2Jqc1s4MV0pLC8qICJpZC1jZSIgKi8KLSYobmlkX29ianNbNjgwXSksLyogImlkLWNoYXJhY3RlcmlzdGljLXR3by1iYXNpcyIgKi8KLSYobmlkX29ianNbMjYzXSksLyogImlkLWNtYyIgKi8KLSYobmlkX29ianNbMzM0XSksLyogImlkLWNtYy1hZGRFeHRlbnNpb25zIiAqLwotJihuaWRfb2Jqc1szNDZdKSwvKiAiaWQtY21jLWNvbmZpcm1DZXJ0QWNjZXB0YW5jZSIgKi8KLSYobmlkX29ianNbMzMwXSksLyogImlkLWNtYy1kYXRhUmV0dXJuIiAqLwotJihuaWRfb2Jqc1szMzZdKSwvKiAiaWQtY21jLWRlY3J5cHRlZFBPUCIgKi8KLSYobmlkX29ianNbMzM1XSksLyogImlkLWNtYy1lbmNyeXB0ZWRQT1AiICovCi0mKG5pZF9vYmpzWzMzOV0pLC8qICJpZC1jbWMtZ2V0Q1JMIiAqLwotJihuaWRfb2Jqc1szMzhdKSwvKiAiaWQtY21jLWdldENlcnQiICovCi0mKG5pZF9vYmpzWzMyOF0pLC8qICJpZC1jbWMtaWRlbnRpZmljYXRpb24iICovCi0mKG5pZF9vYmpzWzMyOV0pLC8qICJpZC1jbWMtaWRlbnRpdHlQcm9vZiIgKi8KLSYobmlkX29ianNbMzM3XSksLyogImlkLWNtYy1scmFQT1BXaXRuZXNzIiAqLwotJihuaWRfb2Jqc1szNDRdKSwvKiAiaWQtY21jLXBvcExpbmtSYW5kb20iICovCi0mKG5pZF9vYmpzWzM0NV0pLC8qICJpZC1jbWMtcG9wTGlua1dpdG5lc3MiICovCi0mKG5pZF9vYmpzWzM0M10pLC8qICJpZC1jbWMtcXVlcnlQZW5kaW5nIiAqLwotJihuaWRfb2Jqc1szMzNdKSwvKiAiaWQtY21jLXJlY2lwaWVudE5vbmNlIiAqLwotJihuaWRfb2Jqc1szNDFdKSwvKiAiaWQtY21jLXJlZ0luZm8iICovCi0mKG5pZF9vYmpzWzM0Ml0pLC8qICJpZC1jbWMtcmVzcG9uc2VJbmZvIiAqLwotJihuaWRfb2Jqc1szNDBdKSwvKiAiaWQtY21jLXJldm9rZVJlcXVlc3QiICovCi0mKG5pZF9vYmpzWzMzMl0pLC8qICJpZC1jbWMtc2VuZGVyTm9uY2UiICovCi0mKG5pZF9vYmpzWzMyN10pLC8qICJpZC1jbWMtc3RhdHVzSW5mbyIgKi8KLSYobmlkX29ianNbMzMxXSksLyogImlkLWNtYy10cmFuc2FjdGlvbklkIiAqLwotJihuaWRfb2Jqc1s3ODddKSwvKiAiaWQtY3QtYXNjaWlUZXh0V2l0aENSTEYiICovCi0mKG5pZF9vYmpzWzQwOF0pLC8qICJpZC1lY1B1YmxpY0tleSIgKi8KLSYobmlkX29ianNbNTA4XSksLyogImlkLWhleC1tdWx0aXBhcnQtbWVzc2FnZSIgKi8KLSYobmlkX29ianNbNTA3XSksLyogImlkLWhleC1wYXJ0aWFsLW1lc3NhZ2UiICovCi0mKG5pZF9vYmpzWzI2MF0pLC8qICJpZC1pdCIgKi8KLSYobmlkX29ianNbMzAyXSksLyogImlkLWl0LWNhS2V5VXBkYXRlSW5mbyIgKi8KLSYobmlkX29ianNbMjk4XSksLyogImlkLWl0LWNhUHJvdEVuY0NlcnQiICovCi0mKG5pZF9vYmpzWzMxMV0pLC8qICJpZC1pdC1jb25maXJtV2FpdFRpbWUiICovCi0mKG5pZF9vYmpzWzMwM10pLC8qICJpZC1pdC1jdXJyZW50Q1JMIiAqLwotJihuaWRfb2Jqc1szMDBdKSwvKiAiaWQtaXQtZW5jS2V5UGFpclR5cGVzIiAqLwotJihuaWRfb2Jqc1szMTBdKSwvKiAiaWQtaXQtaW1wbGljaXRDb25maXJtIiAqLwotJihuaWRfb2Jqc1szMDhdKSwvKiAiaWQtaXQta2V5UGFpclBhcmFtUmVwIiAqLwotJihuaWRfb2Jqc1szMDddKSwvKiAiaWQtaXQta2V5UGFpclBhcmFtUmVxIiAqLwotJihuaWRfb2Jqc1szMTJdKSwvKiAiaWQtaXQtb3JpZ1BLSU1lc3NhZ2UiICovCi0mKG5pZF9vYmpzWzMwMV0pLC8qICJpZC1pdC1wcmVmZXJyZWRTeW1tQWxnIiAqLwotJihuaWRfb2Jqc1szMDldKSwvKiAiaWQtaXQtcmV2UGFzc3BocmFzZSIgKi8KLSYobmlkX29ianNbMjk5XSksLyogImlkLWl0LXNpZ25LZXlQYWlyVHlwZXMiICovCi0mKG5pZF9vYmpzWzMwNV0pLC8qICJpZC1pdC1zdWJzY3JpcHRpb25SZXF1ZXN0IiAqLwotJihuaWRfb2Jqc1szMDZdKSwvKiAiaWQtaXQtc3Vic2NyaXB0aW9uUmVzcG9uc2UiICovCi0mKG5pZF9vYmpzWzc4NF0pLC8qICJpZC1pdC1zdXBwTGFuZ1RhZ3MiICovCi0mKG5pZF9vYmpzWzMwNF0pLC8qICJpZC1pdC11bnN1cHBvcnRlZE9JRHMiICovCi0mKG5pZF9vYmpzWzEyOF0pLC8qICJpZC1rcCIgKi8KLSYobmlkX29ianNbMjgwXSksLyogImlkLW1vZC1hdHRyaWJ1dGUtY2VydCIgKi8KLSYobmlkX29ianNbMjc0XSksLyogImlkLW1vZC1jbWMiICovCi0mKG5pZF9vYmpzWzI3N10pLC8qICJpZC1tb2QtY21wIiAqLwotJihuaWRfb2Jqc1syODRdKSwvKiAiaWQtbW9kLWNtcDIwMDAiICovCi0mKG5pZF9vYmpzWzI3M10pLC8qICJpZC1tb2QtY3JtZiIgKi8KLSYobmlkX29ianNbMjgzXSksLyogImlkLW1vZC1kdmNzIiAqLwotJihuaWRfb2Jqc1syNzVdKSwvKiAiaWQtbW9kLWtlYS1wcm9maWxlLTg4IiAqLwotJihuaWRfb2Jqc1syNzZdKSwvKiAiaWQtbW9kLWtlYS1wcm9maWxlLTkzIiAqLwotJihuaWRfb2Jqc1syODJdKSwvKiAiaWQtbW9kLW9jc3AiICovCi0mKG5pZF9vYmpzWzI3OF0pLC8qICJpZC1tb2QtcXVhbGlmaWVkLWNlcnQtODgiICovCi0mKG5pZF9vYmpzWzI3OV0pLC8qICJpZC1tb2QtcXVhbGlmaWVkLWNlcnQtOTMiICovCi0mKG5pZF9vYmpzWzI4MV0pLC8qICJpZC1tb2QtdGltZXN0YW1wLXByb3RvY29sIiAqLwotJihuaWRfb2Jqc1syNjRdKSwvKiAiaWQtb24iICovCi0mKG5pZF9vYmpzWzg1OF0pLC8qICJpZC1vbi1wZXJtYW5lbnRJZGVudGlmaWVyIiAqLwotJihuaWRfb2Jqc1szNDddKSwvKiAiaWQtb24tcGVyc29uYWxEYXRhIiAqLwotJihuaWRfb2Jqc1syNjVdKSwvKiAiaWQtcGRhIiAqLwotJihuaWRfb2Jqc1szNTJdKSwvKiAiaWQtcGRhLWNvdW50cnlPZkNpdGl6ZW5zaGlwIiAqLwotJihuaWRfb2Jqc1szNTNdKSwvKiAiaWQtcGRhLWNvdW50cnlPZlJlc2lkZW5jZSIgKi8KLSYobmlkX29ianNbMzQ4XSksLyogImlkLXBkYS1kYXRlT2ZCaXJ0aCIgKi8KLSYobmlkX29ianNbMzUxXSksLyogImlkLXBkYS1nZW5kZXIiICovCi0mKG5pZF9vYmpzWzM0OV0pLC8qICJpZC1wZGEtcGxhY2VPZkJpcnRoIiAqLwotJihuaWRfb2Jqc1sxNzVdKSwvKiAiaWQtcGUiICovCi0mKG5pZF9vYmpzWzI2MV0pLC8qICJpZC1wa2lwIiAqLwotJihuaWRfb2Jqc1syNThdKSwvKiAiaWQtcGtpeC1tb2QiICovCi0mKG5pZF9vYmpzWzI2OV0pLC8qICJpZC1wa2l4MS1leHBsaWNpdC04OCIgKi8KLSYobmlkX29ianNbMjcxXSksLyogImlkLXBraXgxLWV4cGxpY2l0LTkzIiAqLwotJihuaWRfb2Jqc1syNzBdKSwvKiAiaWQtcGtpeDEtaW1wbGljaXQtODgiICovCi0mKG5pZF9vYmpzWzI3Ml0pLC8qICJpZC1wa2l4MS1pbXBsaWNpdC05MyIgKi8KLSYobmlkX29ianNbNjYyXSksLyogImlkLXBwbCIgKi8KLSYobmlkX29ianNbNjY0XSksLyogImlkLXBwbC1hbnlMYW5ndWFnZSIgKi8KLSYobmlkX29ianNbNjY3XSksLyogImlkLXBwbC1pbmRlcGVuZGVudCIgKi8KLSYobmlkX29ianNbNjY1XSksLyogImlkLXBwbC1pbmhlcml0QWxsIiAqLwotJihuaWRfb2Jqc1syNjddKSwvKiAiaWQtcWNzIiAqLwotJihuaWRfb2Jqc1szNTldKSwvKiAiaWQtcWNzLXBraXhRQ1N5bnRheC12MSIgKi8KLSYobmlkX29ianNbMjU5XSksLyogImlkLXF0IiAqLwotJihuaWRfb2Jqc1sxNjRdKSwvKiAiaWQtcXQtY3BzIiAqLwotJihuaWRfb2Jqc1sxNjVdKSwvKiAiaWQtcXQtdW5vdGljZSIgKi8KLSYobmlkX29ianNbMzEzXSksLyogImlkLXJlZ0N0cmwiICovCi0mKG5pZF9vYmpzWzMxNl0pLC8qICJpZC1yZWdDdHJsLWF1dGhlbnRpY2F0b3IiICovCi0mKG5pZF9vYmpzWzMxOV0pLC8qICJpZC1yZWdDdHJsLW9sZENlcnRJRCIgKi8KLSYobmlkX29ianNbMzE4XSksLyogImlkLXJlZ0N0cmwtcGtpQXJjaGl2ZU9wdGlvbnMiICovCi0mKG5pZF9vYmpzWzMxN10pLC8qICJpZC1yZWdDdHJsLXBraVB1YmxpY2F0aW9uSW5mbyIgKi8KLSYobmlkX29ianNbMzIwXSksLyogImlkLXJlZ0N0cmwtcHJvdG9jb2xFbmNyS2V5IiAqLwotJihuaWRfb2Jqc1szMTVdKSwvKiAiaWQtcmVnQ3RybC1yZWdUb2tlbiIgKi8KLSYobmlkX29ianNbMzE0XSksLyogImlkLXJlZ0luZm8iICovCi0mKG5pZF9vYmpzWzMyMl0pLC8qICJpZC1yZWdJbmZvLWNlcnRSZXEiICovCi0mKG5pZF9vYmpzWzMyMV0pLC8qICJpZC1yZWdJbmZvLXV0ZjhQYWlycyIgKi8KLSYobmlkX29ianNbNTEyXSksLyogImlkLXNldCIgKi8KLSYobmlkX29ianNbMTkxXSksLyogImlkLXNtaW1lLWFhIiAqLwotJihuaWRfb2Jqc1syMTVdKSwvKiAiaWQtc21pbWUtYWEtY29udGVudEhpbnQiICovCi0mKG5pZF9vYmpzWzIxOF0pLC8qICJpZC1zbWltZS1hYS1jb250ZW50SWRlbnRpZmllciIgKi8KLSYobmlkX29ianNbMjIxXSksLyogImlkLXNtaW1lLWFhLWNvbnRlbnRSZWZlcmVuY2UiICovCi0mKG5pZF9vYmpzWzI0MF0pLC8qICJpZC1zbWltZS1hYS1kdmNzLWR2YyIgKi8KLSYobmlkX29ianNbMjE3XSksLyogImlkLXNtaW1lLWFhLWVuY2FwQ29udGVudFR5cGUiICovCi0mKG5pZF9vYmpzWzIyMl0pLC8qICJpZC1zbWltZS1hYS1lbmNyeXBLZXlQcmVmIiAqLwotJihuaWRfb2Jqc1syMjBdKSwvKiAiaWQtc21pbWUtYWEtZXF1aXZhbGVudExhYmVscyIgKi8KLSYobmlkX29ianNbMjMyXSksLyogImlkLXNtaW1lLWFhLWV0cy1DZXJ0aWZpY2F0ZVJlZnMiICovCi0mKG5pZF9vYmpzWzIzM10pLC8qICJpZC1zbWltZS1hYS1ldHMtUmV2b2NhdGlvblJlZnMiICovCi0mKG5pZF9vYmpzWzIzOF0pLC8qICJpZC1zbWltZS1hYS1ldHMtYXJjaGl2ZVRpbWVTdGFtcCIgKi8KLSYobmlkX29ianNbMjM3XSksLyogImlkLXNtaW1lLWFhLWV0cy1jZXJ0Q1JMVGltZXN0YW1wIiAqLwotJihuaWRfb2Jqc1syMzRdKSwvKiAiaWQtc21pbWUtYWEtZXRzLWNlcnRWYWx1ZXMiICovCi0mKG5pZF9vYmpzWzIyN10pLC8qICJpZC1zbWltZS1hYS1ldHMtY29tbWl0bWVudFR5cGUiICovCi0mKG5pZF9vYmpzWzIzMV0pLC8qICJpZC1zbWltZS1hYS1ldHMtY29udGVudFRpbWVzdGFtcCIgKi8KLSYobmlkX29ianNbMjM2XSksLyogImlkLXNtaW1lLWFhLWV0cy1lc2NUaW1lU3RhbXAiICovCi0mKG5pZF9vYmpzWzIzMF0pLC8qICJpZC1zbWltZS1hYS1ldHMtb3RoZXJTaWdDZXJ0IiAqLwotJihuaWRfb2Jqc1syMzVdKSwvKiAiaWQtc21pbWUtYWEtZXRzLXJldm9jYXRpb25WYWx1ZXMiICovCi0mKG5pZF9vYmpzWzIyNl0pLC8qICJpZC1zbWltZS1hYS1ldHMtc2lnUG9saWN5SWQiICovCi0mKG5pZF9vYmpzWzIyOV0pLC8qICJpZC1zbWltZS1hYS1ldHMtc2lnbmVyQXR0ciIgKi8KLSYobmlkX29ianNbMjI4XSksLyogImlkLXNtaW1lLWFhLWV0cy1zaWduZXJMb2NhdGlvbiIgKi8KLSYobmlkX29ianNbMjE5XSksLyogImlkLXNtaW1lLWFhLW1hY1ZhbHVlIiAqLwotJihuaWRfb2Jqc1syMTRdKSwvKiAiaWQtc21pbWUtYWEtbWxFeHBhbmRIaXN0b3J5IiAqLwotJihuaWRfb2Jqc1syMTZdKSwvKiAiaWQtc21pbWUtYWEtbXNnU2lnRGlnZXN0IiAqLwotJihuaWRfb2Jqc1syMTJdKSwvKiAiaWQtc21pbWUtYWEtcmVjZWlwdFJlcXVlc3QiICovCi0mKG5pZF9vYmpzWzIxM10pLC8qICJpZC1zbWltZS1hYS1zZWN1cml0eUxhYmVsIiAqLwotJihuaWRfb2Jqc1syMzldKSwvKiAiaWQtc21pbWUtYWEtc2lnbmF0dXJlVHlwZSIgKi8KLSYobmlkX29ianNbMjIzXSksLyogImlkLXNtaW1lLWFhLXNpZ25pbmdDZXJ0aWZpY2F0ZSIgKi8KLSYobmlkX29ianNbMjI0XSksLyogImlkLXNtaW1lLWFhLXNtaW1lRW5jcnlwdENlcnRzIiAqLwotJihuaWRfb2Jqc1syMjVdKSwvKiAiaWQtc21pbWUtYWEtdGltZVN0YW1wVG9rZW4iICovCi0mKG5pZF9vYmpzWzE5Ml0pLC8qICJpZC1zbWltZS1hbGciICovCi0mKG5pZF9vYmpzWzI0M10pLC8qICJpZC1zbWltZS1hbGctM0RFU3dyYXAiICovCi0mKG5pZF9vYmpzWzI0Nl0pLC8qICJpZC1zbWltZS1hbGctQ01TM0RFU3dyYXAiICovCi0mKG5pZF9vYmpzWzI0N10pLC8qICJpZC1zbWltZS1hbGctQ01TUkMyd3JhcCIgKi8KLSYobmlkX29ianNbMjQ1XSksLyogImlkLXNtaW1lLWFsZy1FU0RIIiAqLwotJihuaWRfb2Jqc1syNDFdKSwvKiAiaWQtc21pbWUtYWxnLUVTREh3aXRoM0RFUyIgKi8KLSYobmlkX29ianNbMjQyXSksLyogImlkLXNtaW1lLWFsZy1FU0RId2l0aFJDMiIgKi8KLSYobmlkX29ianNbMjQ0XSksLyogImlkLXNtaW1lLWFsZy1SQzJ3cmFwIiAqLwotJihuaWRfb2Jqc1sxOTNdKSwvKiAiaWQtc21pbWUtY2QiICovCi0mKG5pZF9vYmpzWzI0OF0pLC8qICJpZC1zbWltZS1jZC1sZGFwIiAqLwotJihuaWRfb2Jqc1sxOTBdKSwvKiAiaWQtc21pbWUtY3QiICovCi0mKG5pZF9vYmpzWzIxMF0pLC8qICJpZC1zbWltZS1jdC1EVkNTUmVxdWVzdERhdGEiICovCi0mKG5pZF9vYmpzWzIxMV0pLC8qICJpZC1zbWltZS1jdC1EVkNTUmVzcG9uc2VEYXRhIiAqLwotJihuaWRfb2Jqc1syMDhdKSwvKiAiaWQtc21pbWUtY3QtVERUSW5mbyIgKi8KLSYobmlkX29ianNbMjA3XSksLyogImlkLXNtaW1lLWN0LVRTVEluZm8iICovCi0mKG5pZF9vYmpzWzIwNV0pLC8qICJpZC1zbWltZS1jdC1hdXRoRGF0YSIgKi8KLSYobmlkX29ianNbNzg2XSksLyogImlkLXNtaW1lLWN0LWNvbXByZXNzZWREYXRhIiAqLwotJihuaWRfb2Jqc1syMDldKSwvKiAiaWQtc21pbWUtY3QtY29udGVudEluZm8iICovCi0mKG5pZF9vYmpzWzIwNl0pLC8qICJpZC1zbWltZS1jdC1wdWJsaXNoQ2VydCIgKi8KLSYobmlkX29ianNbMjA0XSksLyogImlkLXNtaW1lLWN0LXJlY2VpcHQiICovCi0mKG5pZF9vYmpzWzE5NV0pLC8qICJpZC1zbWltZS1jdGkiICovCi0mKG5pZF9vYmpzWzI1NV0pLC8qICJpZC1zbWltZS1jdGktZXRzLXByb29mT2ZBcHByb3ZhbCIgKi8KLSYobmlkX29ianNbMjU2XSksLyogImlkLXNtaW1lLWN0aS1ldHMtcHJvb2ZPZkNyZWF0aW9uIiAqLwotJihuaWRfb2Jqc1syNTNdKSwvKiAiaWQtc21pbWUtY3RpLWV0cy1wcm9vZk9mRGVsaXZlcnkiICovCi0mKG5pZF9vYmpzWzI1MV0pLC8qICJpZC1zbWltZS1jdGktZXRzLXByb29mT2ZPcmlnaW4iICovCi0mKG5pZF9vYmpzWzI1Ml0pLC8qICJpZC1zbWltZS1jdGktZXRzLXByb29mT2ZSZWNlaXB0IiAqLwotJihuaWRfb2Jqc1syNTRdKSwvKiAiaWQtc21pbWUtY3RpLWV0cy1wcm9vZk9mU2VuZGVyIiAqLwotJihuaWRfb2Jqc1sxODldKSwvKiAiaWQtc21pbWUtbW9kIiAqLwotJihuaWRfb2Jqc1sxOTZdKSwvKiAiaWQtc21pbWUtbW9kLWNtcyIgKi8KLSYobmlkX29ianNbMTk3XSksLyogImlkLXNtaW1lLW1vZC1lc3MiICovCi0mKG5pZF9vYmpzWzIwMl0pLC8qICJpZC1zbWltZS1tb2QtZXRzLWVTaWdQb2xpY3ktODgiICovCi0mKG5pZF9vYmpzWzIwM10pLC8qICJpZC1zbWltZS1tb2QtZXRzLWVTaWdQb2xpY3ktOTciICovCi0mKG5pZF9vYmpzWzIwMF0pLC8qICJpZC1zbWltZS1tb2QtZXRzLWVTaWduYXR1cmUtODgiICovCi0mKG5pZF9vYmpzWzIwMV0pLC8qICJpZC1zbWltZS1tb2QtZXRzLWVTaWduYXR1cmUtOTciICovCi0mKG5pZF9vYmpzWzE5OV0pLC8qICJpZC1zbWltZS1tb2QtbXNnLXYzIiAqLwotJihuaWRfb2Jqc1sxOThdKSwvKiAiaWQtc21pbWUtbW9kLW9pZCIgKi8KLSYobmlkX29ianNbMTk0XSksLyogImlkLXNtaW1lLXNwcSIgKi8KLSYobmlkX29ianNbMjUwXSksLyogImlkLXNtaW1lLXNwcS1ldHMtc3F0LXVub3RpY2UiICovCi0mKG5pZF9vYmpzWzI0OV0pLC8qICJpZC1zbWltZS1zcHEtZXRzLXNxdC11cmkiICovCi0mKG5pZF9vYmpzWzY3Nl0pLC8qICJpZGVudGlmaWVkLW9yZ2FuaXphdGlvbiIgKi8KLSYobmlkX29ianNbNDYxXSksLyogImluZm8iICovCi0mKG5pZF9vYmpzWzc0OF0pLC8qICJpbmhpYml0QW55UG9saWN5IiAqLwotJihuaWRfb2Jqc1sxMDFdKSwvKiAiaW5pdGlhbHMiICovCi0mKG5pZF9vYmpzWzY0N10pLC8qICJpbnRlcm5hdGlvbmFsLW9yZ2FuaXphdGlvbnMiICovCi0mKG5pZF9vYmpzWzg2OV0pLC8qICJpbnRlcm5hdGlvbmFsaVNETk51bWJlciIgKi8KLSYobmlkX29ianNbMTQyXSksLyogImludmFsaWRpdHlEYXRlIiAqLwotJihuaWRfb2Jqc1syOTRdKSwvKiAiaXBzZWNFbmRTeXN0ZW0iICovCi0mKG5pZF9vYmpzWzI5NV0pLC8qICJpcHNlY1R1bm5lbCIgKi8KLSYobmlkX29ianNbMjk2XSksLyogImlwc2VjVXNlciIgKi8KLSYobmlkX29ianNbODZdKSwvKiAiaXNzdWVyQWx0TmFtZSIgKi8KLSYobmlkX29ianNbNzcwXSksLyogImlzc3VpbmdEaXN0cmlidXRpb25Qb2ludCIgKi8KLSYobmlkX29ianNbNDkyXSksLyogImphbmV0TWFpbGJveCIgKi8KLSYobmlkX29ianNbMTUwXSksLyogImtleUJhZyIgKi8KLSYobmlkX29ianNbODNdKSwvKiAia2V5VXNhZ2UiICovCi0mKG5pZF9vYmpzWzQ3N10pLC8qICJsYXN0TW9kaWZpZWRCeSIgKi8KLSYobmlkX29ianNbNDc2XSksLyogImxhc3RNb2RpZmllZFRpbWUiICovCi0mKG5pZF9vYmpzWzE1N10pLC8qICJsb2NhbEtleUlEIiAqLwotJihuaWRfb2Jqc1s0ODBdKSwvKiAibVhSZWNvcmQiICovCi0mKG5pZF9vYmpzWzQ2MF0pLC8qICJtYWlsIiAqLwotJihuaWRfb2Jqc1s0OTNdKSwvKiAibWFpbFByZWZlcmVuY2VPcHRpb24iICovCi0mKG5pZF9vYmpzWzQ2N10pLC8qICJtYW5hZ2VyIiAqLwotJihuaWRfb2Jqc1s4MDldKSwvKiAibWRfZ29zdDk0IiAqLwotJihuaWRfb2Jqc1s4NzVdKSwvKiAibWVtYmVyIiAqLwotJihuaWRfb2Jqc1sxODJdKSwvKiAibWVtYmVyLWJvZHkiICovCi0mKG5pZF9vYmpzWzUxXSksLyogIm1lc3NhZ2VEaWdlc3QiICovCi0mKG5pZF9vYmpzWzM4M10pLC8qICJtZ210IiAqLwotJihuaWRfb2Jqc1s1MDRdKSwvKiAibWltZS1taHMiICovCi0mKG5pZF9vYmpzWzUwNl0pLC8qICJtaW1lLW1ocy1ib2RpZXMiICovCi0mKG5pZF9vYmpzWzUwNV0pLC8qICJtaW1lLW1ocy1oZWFkaW5ncyIgKi8KLSYobmlkX29ianNbNDg4XSksLyogIm1vYmlsZVRlbGVwaG9uZU51bWJlciIgKi8KLSYobmlkX29ianNbMTM2XSksLyogIm1zQ1RMU2lnbiIgKi8KLSYobmlkX29ianNbMTM1XSksLyogIm1zQ29kZUNvbSIgKi8KLSYobmlkX29ianNbMTM0XSksLyogIm1zQ29kZUluZCIgKi8KLSYobmlkX29ianNbMTM4XSksLyogIm1zRUZTIiAqLwotJihuaWRfb2Jqc1sxNzFdKSwvKiAibXNFeHRSZXEiICovCi0mKG5pZF9vYmpzWzEzN10pLC8qICJtc1NHQyIgKi8KLSYobmlkX29ianNbNjQ4XSksLyogIm1zU21hcnRjYXJkTG9naW4iICovCi0mKG5pZF9vYmpzWzY0OV0pLC8qICJtc1VQTiIgKi8KLSYobmlkX29ianNbNDgxXSksLyogIm5TUmVjb3JkIiAqLwotJihuaWRfb2Jqc1sxNzNdKSwvKiAibmFtZSIgKi8KLSYobmlkX29ianNbNjY2XSksLyogIm5hbWVDb25zdHJhaW50cyIgKi8KLSYobmlkX29ianNbMzY5XSksLyogIm5vQ2hlY2siICovCi0mKG5pZF9vYmpzWzQwM10pLC8qICJub1JldkF2YWlsIiAqLwotJihuaWRfb2Jqc1s3Ml0pLC8qICJuc0Jhc2VVcmwiICovCi0mKG5pZF9vYmpzWzc2XSksLyogIm5zQ2FQb2xpY3lVcmwiICovCi0mKG5pZF9vYmpzWzc0XSksLyogIm5zQ2FSZXZvY2F0aW9uVXJsIiAqLwotJihuaWRfb2Jqc1s1OF0pLC8qICJuc0NlcnRFeHQiICovCi0mKG5pZF9vYmpzWzc5XSksLyogIm5zQ2VydFNlcXVlbmNlIiAqLwotJihuaWRfb2Jqc1s3MV0pLC8qICJuc0NlcnRUeXBlIiAqLwotJihuaWRfb2Jqc1s3OF0pLC8qICJuc0NvbW1lbnQiICovCi0mKG5pZF9vYmpzWzU5XSksLyogIm5zRGF0YVR5cGUiICovCi0mKG5pZF9vYmpzWzc1XSksLyogIm5zUmVuZXdhbFVybCIgKi8KLSYobmlkX29ianNbNzNdKSwvKiAibnNSZXZvY2F0aW9uVXJsIiAqLwotJihuaWRfb2Jqc1sxMzldKSwvKiAibnNTR0MiICovCi0mKG5pZF9vYmpzWzc3XSksLyogIm5zU3NsU2VydmVyTmFtZSIgKi8KLSYobmlkX29ianNbNjgxXSksLyogIm9uQmFzaXMiICovCi0mKG5pZF9vYmpzWzQ5MV0pLC8qICJvcmdhbml6YXRpb25hbFN0YXR1cyIgKi8KLSYobmlkX29ianNbNDc1XSksLyogIm90aGVyTWFpbGJveCIgKi8KLSYobmlkX29ianNbODc2XSksLyogIm93bmVyIiAqLwotJihuaWRfb2Jqc1s0ODldKSwvKiAicGFnZXJUZWxlcGhvbmVOdW1iZXIiICovCi0mKG5pZF9vYmpzWzM3NF0pLC8qICJwYXRoIiAqLwotJihuaWRfb2Jqc1sxMTJdKSwvKiAicGJlV2l0aE1ENUFuZENhc3Q1Q0JDIiAqLwotJihuaWRfb2Jqc1s0OTldKSwvKiAicGVyc29uYWxTaWduYXR1cmUiICovCi0mKG5pZF9vYmpzWzQ4N10pLC8qICJwZXJzb25hbFRpdGxlIiAqLwotJihuaWRfb2Jqc1s0NjRdKSwvKiAicGhvdG8iICovCi0mKG5pZF9vYmpzWzg2M10pLC8qICJwaHlzaWNhbERlbGl2ZXJ5T2ZmaWNlTmFtZSIgKi8KLSYobmlkX29ianNbNDM3XSksLyogInBpbG90IiAqLwotJihuaWRfb2Jqc1s0MzldKSwvKiAicGlsb3RBdHRyaWJ1dGVTeW50YXgiICovCi0mKG5pZF9vYmpzWzQzOF0pLC8qICJwaWxvdEF0dHJpYnV0ZVR5cGUiICovCi0mKG5pZF9vYmpzWzQ3OV0pLC8qICJwaWxvdEF0dHJpYnV0ZVR5cGUyNyIgKi8KLSYobmlkX29ianNbNDU2XSksLyogInBpbG90RFNBIiAqLwotJihuaWRfb2Jqc1s0NDFdKSwvKiAicGlsb3RHcm91cHMiICovCi0mKG5pZF9vYmpzWzQ0NF0pLC8qICJwaWxvdE9iamVjdCIgKi8KLSYobmlkX29ianNbNDQwXSksLyogInBpbG90T2JqZWN0Q2xhc3MiICovCi0mKG5pZF9vYmpzWzQ1NV0pLC8qICJwaWxvdE9yZ2FuaXphdGlvbiIgKi8KLSYobmlkX29ianNbNDQ1XSksLyogInBpbG90UGVyc29uIiAqLwotJihuaWRfb2Jqc1sgMl0pLC8qICJwa2NzIiAqLwotJihuaWRfb2Jqc1sxODZdKSwvKiAicGtjczEiICovCi0mKG5pZF9vYmpzWzI3XSksLyogInBrY3MzIiAqLwotJihuaWRfb2Jqc1sxODddKSwvKiAicGtjczUiICovCi0mKG5pZF9vYmpzWzIwXSksLyogInBrY3M3IiAqLwotJihuaWRfb2Jqc1syMV0pLC8qICJwa2NzNy1kYXRhIiAqLwotJihuaWRfb2Jqc1syNV0pLC8qICJwa2NzNy1kaWdlc3REYXRhIiAqLwotJihuaWRfb2Jqc1syNl0pLC8qICJwa2NzNy1lbmNyeXB0ZWREYXRhIiAqLwotJihuaWRfb2Jqc1syM10pLC8qICJwa2NzNy1lbnZlbG9wZWREYXRhIiAqLwotJihuaWRfb2Jqc1syNF0pLC8qICJwa2NzNy1zaWduZWRBbmRFbnZlbG9wZWREYXRhIiAqLwotJihuaWRfb2Jqc1syMl0pLC8qICJwa2NzNy1zaWduZWREYXRhIiAqLwotJihuaWRfb2Jqc1sxNTFdKSwvKiAicGtjczhTaHJvdWRlZEtleUJhZyIgKi8KLSYobmlkX29ianNbNDddKSwvKiAicGtjczkiICovCi0mKG5pZF9vYmpzWzQwMV0pLC8qICJwb2xpY3lDb25zdHJhaW50cyIgKi8KLSYobmlkX29ianNbNzQ3XSksLyogInBvbGljeU1hcHBpbmdzIiAqLwotJihuaWRfb2Jqc1s4NjJdKSwvKiAicG9zdE9mZmljZUJveCIgKi8KLSYobmlkX29ianNbODYxXSksLyogInBvc3RhbEFkZHJlc3MiICovCi0mKG5pZF9vYmpzWzY2MV0pLC8qICJwb3N0YWxDb2RlIiAqLwotJihuaWRfb2Jqc1s2ODNdKSwvKiAicHBCYXNpcyIgKi8KLSYobmlkX29ianNbODcyXSksLyogInByZWZlcnJlZERlbGl2ZXJ5TWV0aG9kIiAqLwotJihuaWRfb2Jqc1s4NzNdKSwvKiAicHJlc2VudGF0aW9uQWRkcmVzcyIgKi8KLSYobmlkX29ianNbODE2XSksLyogInByZi1nb3N0cjM0MTEtOTQiICovCi0mKG5pZF9vYmpzWzQwNl0pLC8qICJwcmltZS1maWVsZCIgKi8KLSYobmlkX29ianNbNDA5XSksLyogInByaW1lMTkydjEiICovCi0mKG5pZF9vYmpzWzQxMF0pLC8qICJwcmltZTE5MnYyIiAqLwotJihuaWRfb2Jqc1s0MTFdKSwvKiAicHJpbWUxOTJ2MyIgKi8KLSYobmlkX29ianNbNDEyXSksLyogInByaW1lMjM5djEiICovCi0mKG5pZF9vYmpzWzQxM10pLC8qICJwcmltZTIzOXYyIiAqLwotJihuaWRfb2Jqc1s0MTRdKSwvKiAicHJpbWUyMzl2MyIgKi8KLSYobmlkX29ianNbNDE1XSksLyogInByaW1lMjU2djEiICovCi0mKG5pZF9vYmpzWzM4NV0pLC8qICJwcml2YXRlIiAqLwotJihuaWRfb2Jqc1s4NF0pLC8qICJwcml2YXRlS2V5VXNhZ2VQZXJpb2QiICovCi0mKG5pZF9vYmpzWzg4Nl0pLC8qICJwcm90b2NvbEluZm9ybWF0aW9uIiAqLwotJihuaWRfb2Jqc1s2NjNdKSwvKiAicHJveHlDZXJ0SW5mbyIgKi8KLSYobmlkX29ianNbNTEwXSksLyogInBzZXVkb255bSIgKi8KLSYobmlkX29ianNbNDM1XSksLyogInBzcyIgKi8KLSYobmlkX29ianNbMjg2XSksLyogInFjU3RhdGVtZW50cyIgKi8KLSYobmlkX29ianNbNDU3XSksLyogInF1YWxpdHlMYWJlbGxlZERhdGEiICovCi0mKG5pZF9vYmpzWzQ1MF0pLC8qICJyRkM4MjJsb2NhbFBhcnQiICovCi0mKG5pZF9vYmpzWzg3MF0pLC8qICJyZWdpc3RlcmVkQWRkcmVzcyIgKi8KLSYobmlkX29ianNbNDAwXSksLyogInJvbGUiICovCi0mKG5pZF9vYmpzWzg3N10pLC8qICJyb2xlT2NjdXBhbnQiICovCi0mKG5pZF9vYmpzWzQ0OF0pLC8qICJyb29tIiAqLwotJihuaWRfb2Jqc1s0NjNdKSwvKiAicm9vbU51bWJlciIgKi8KLSYobmlkX29ianNbIDZdKSwvKiAicnNhRW5jcnlwdGlvbiIgKi8KLSYobmlkX29ianNbNjQ0XSksLyogInJzYU9BRVBFbmNyeXB0aW9uU0VUIiAqLwotJihuaWRfb2Jqc1szNzddKSwvKiAicnNhU2lnbmF0dXJlIiAqLwotJihuaWRfb2Jqc1sgMV0pLC8qICJyc2Fkc2kiICovCi0mKG5pZF9vYmpzWzQ4Ml0pLC8qICJzT0FSZWNvcmQiICovCi0mKG5pZF9vYmpzWzE1NV0pLC8qICJzYWZlQ29udGVudHNCYWciICovCi0mKG5pZF9vYmpzWzI5MV0pLC8qICJzYmdwLWF1dG9ub21vdXNTeXNOdW0iICovCi0mKG5pZF9vYmpzWzI5MF0pLC8qICJzYmdwLWlwQWRkckJsb2NrIiAqLwotJihuaWRfb2Jqc1syOTJdKSwvKiAic2JncC1yb3V0ZXJJZGVudGlmaWVyIiAqLwotJihuaWRfb2Jqc1sxNTldKSwvKiAic2RzaUNlcnRpZmljYXRlIiAqLwotJihuaWRfb2Jqc1s4NTldKSwvKiAic2VhcmNoR3VpZGUiICovCi0mKG5pZF9vYmpzWzcwNF0pLC8qICJzZWNwMTEycjEiICovCi0mKG5pZF9vYmpzWzcwNV0pLC8qICJzZWNwMTEycjIiICovCi0mKG5pZF9vYmpzWzcwNl0pLC8qICJzZWNwMTI4cjEiICovCi0mKG5pZF9vYmpzWzcwN10pLC8qICJzZWNwMTI4cjIiICovCi0mKG5pZF9vYmpzWzcwOF0pLC8qICJzZWNwMTYwazEiICovCi0mKG5pZF9vYmpzWzcwOV0pLC8qICJzZWNwMTYwcjEiICovCi0mKG5pZF9vYmpzWzcxMF0pLC8qICJzZWNwMTYwcjIiICovCi0mKG5pZF9vYmpzWzcxMV0pLC8qICJzZWNwMTkyazEiICovCi0mKG5pZF9vYmpzWzcxMl0pLC8qICJzZWNwMjI0azEiICovCi0mKG5pZF9vYmpzWzcxM10pLC8qICJzZWNwMjI0cjEiICovCi0mKG5pZF9vYmpzWzcxNF0pLC8qICJzZWNwMjU2azEiICovCi0mKG5pZF9vYmpzWzcxNV0pLC8qICJzZWNwMzg0cjEiICovCi0mKG5pZF9vYmpzWzcxNl0pLC8qICJzZWNwNTIxcjEiICovCi0mKG5pZF9vYmpzWzE1NF0pLC8qICJzZWNyZXRCYWciICovCi0mKG5pZF9vYmpzWzQ3NF0pLC8qICJzZWNyZXRhcnkiICovCi0mKG5pZF9vYmpzWzcxN10pLC8qICJzZWN0MTEzcjEiICovCi0mKG5pZF9vYmpzWzcxOF0pLC8qICJzZWN0MTEzcjIiICovCi0mKG5pZF9vYmpzWzcxOV0pLC8qICJzZWN0MTMxcjEiICovCi0mKG5pZF9vYmpzWzcyMF0pLC8qICJzZWN0MTMxcjIiICovCi0mKG5pZF9vYmpzWzcyMV0pLC8qICJzZWN0MTYzazEiICovCi0mKG5pZF9vYmpzWzcyMl0pLC8qICJzZWN0MTYzcjEiICovCi0mKG5pZF9vYmpzWzcyM10pLC8qICJzZWN0MTYzcjIiICovCi0mKG5pZF9vYmpzWzcyNF0pLC8qICJzZWN0MTkzcjEiICovCi0mKG5pZF9vYmpzWzcyNV0pLC8qICJzZWN0MTkzcjIiICovCi0mKG5pZF9vYmpzWzcyNl0pLC8qICJzZWN0MjMzazEiICovCi0mKG5pZF9vYmpzWzcyN10pLC8qICJzZWN0MjMzcjEiICovCi0mKG5pZF9vYmpzWzcyOF0pLC8qICJzZWN0MjM5azEiICovCi0mKG5pZF9vYmpzWzcyOV0pLC8qICJzZWN0MjgzazEiICovCi0mKG5pZF9vYmpzWzczMF0pLC8qICJzZWN0MjgzcjEiICovCi0mKG5pZF9vYmpzWzczMV0pLC8qICJzZWN0NDA5azEiICovCi0mKG5pZF9vYmpzWzczMl0pLC8qICJzZWN0NDA5cjEiICovCi0mKG5pZF9vYmpzWzczM10pLC8qICJzZWN0NTcxazEiICovCi0mKG5pZF9vYmpzWzczNF0pLC8qICJzZWN0NTcxcjEiICovCi0mKG5pZF9vYmpzWzM4Nl0pLC8qICJzZWN1cml0eSIgKi8KLSYobmlkX29ianNbODc4XSksLyogInNlZUFsc28iICovCi0mKG5pZF9vYmpzWzM5NF0pLC8qICJzZWxlY3RlZC1hdHRyaWJ1dGUtdHlwZXMiICovCi0mKG5pZF9vYmpzWzEwNV0pLC8qICJzZXJpYWxOdW1iZXIiICovCi0mKG5pZF9vYmpzWzEyOV0pLC8qICJzZXJ2ZXJBdXRoIiAqLwotJihuaWRfb2Jqc1szNzFdKSwvKiAic2VydmljZUxvY2F0b3IiICovCi0mKG5pZF9vYmpzWzYyNV0pLC8qICJzZXQtYWRkUG9saWN5IiAqLwotJihuaWRfb2Jqc1s1MTVdKSwvKiAic2V0LWF0dHIiICovCi0mKG5pZF9vYmpzWzUxOF0pLC8qICJzZXQtYnJhbmQiICovCi0mKG5pZF9vYmpzWzYzOF0pLC8qICJzZXQtYnJhbmQtQW1lcmljYW5FeHByZXNzIiAqLwotJihuaWRfb2Jqc1s2MzddKSwvKiAic2V0LWJyYW5kLURpbmVycyIgKi8KLSYobmlkX29ianNbNjM2XSksLyogInNldC1icmFuZC1JQVRBLUFUQSIgKi8KLSYobmlkX29ianNbNjM5XSksLyogInNldC1icmFuZC1KQ0IiICovCi0mKG5pZF9vYmpzWzY0MV0pLC8qICJzZXQtYnJhbmQtTWFzdGVyQ2FyZCIgKi8KLSYobmlkX29ianNbNjQyXSksLyogInNldC1icmFuZC1Ob3Z1cyIgKi8KLSYobmlkX29ianNbNjQwXSksLyogInNldC1icmFuZC1WaXNhIiAqLwotJihuaWRfb2Jqc1s1MTddKSwvKiAic2V0LWNlcnRFeHQiICovCi0mKG5pZF9vYmpzWzUxM10pLC8qICJzZXQtY3R5cGUiICovCi0mKG5pZF9vYmpzWzUxNF0pLC8qICJzZXQtbXNnRXh0IiAqLwotJihuaWRfb2Jqc1s1MTZdKSwvKiAic2V0LXBvbGljeSIgKi8KLSYobmlkX29ianNbNjA3XSksLyogInNldC1wb2xpY3ktcm9vdCIgKi8KLSYobmlkX29ianNbNjI0XSksLyogInNldC1yb290S2V5VGh1bWIiICovCi0mKG5pZF9vYmpzWzYyMF0pLC8qICJzZXRBdHRyLUNlcnQiICovCi0mKG5pZF9vYmpzWzYzMV0pLC8qICJzZXRBdHRyLUdlbkNyeXB0Z3JtIiAqLwotJihuaWRfb2Jqc1s2MjNdKSwvKiAic2V0QXR0ci1Jc3NDYXAiICovCi0mKG5pZF9vYmpzWzYyOF0pLC8qICJzZXRBdHRyLUlzc0NhcC1DVk0iICovCi0mKG5pZF9vYmpzWzYzMF0pLC8qICJzZXRBdHRyLUlzc0NhcC1TaWciICovCi0mKG5pZF9vYmpzWzYyOV0pLC8qICJzZXRBdHRyLUlzc0NhcC1UMiIgKi8KLSYobmlkX29ianNbNjIxXSksLyogInNldEF0dHItUEdXWWNhcCIgKi8KLSYobmlkX29ianNbNjM1XSksLyogInNldEF0dHItU2VjRGV2U2lnIiAqLwotJihuaWRfb2Jqc1s2MzJdKSwvKiAic2V0QXR0ci1UMkVuYyIgKi8KLSYobmlkX29ianNbNjMzXSksLyogInNldEF0dHItVDJjbGVhcnR4dCIgKi8KLSYobmlkX29ianNbNjM0XSksLyogInNldEF0dHItVG9rSUNDc2lnIiAqLwotJihuaWRfb2Jqc1s2MjddKSwvKiAic2V0QXR0ci1Ub2tlbi1CMFByaW1lIiAqLwotJihuaWRfb2Jqc1s2MjZdKSwvKiAic2V0QXR0ci1Ub2tlbi1FTVYiICovCi0mKG5pZF9vYmpzWzYyMl0pLC8qICJzZXRBdHRyLVRva2VuVHlwZSIgKi8KLSYobmlkX29ianNbNjE5XSksLyogInNldENleHQtSXNzdWVyQ2FwYWJpbGl0aWVzIiAqLwotJihuaWRfb2Jqc1s2MTVdKSwvKiAic2V0Q2V4dC1QR1dZY2FwYWJpbGl0aWVzIiAqLwotJihuaWRfb2Jqc1s2MTZdKSwvKiAic2V0Q2V4dC1Ub2tlbklkZW50aWZpZXIiICovCi0mKG5pZF9vYmpzWzYxOF0pLC8qICJzZXRDZXh0LVRva2VuVHlwZSIgKi8KLSYobmlkX29ianNbNjE3XSksLyogInNldENleHQtVHJhY2syRGF0YSIgKi8KLSYobmlkX29ianNbNjExXSksLyogInNldENleHQtY0NlcnRSZXF1aXJlZCIgKi8KLSYobmlkX29ianNbNjA5XSksLyogInNldENleHQtY2VydFR5cGUiICovCi0mKG5pZF9vYmpzWzYwOF0pLC8qICJzZXRDZXh0LWhhc2hlZFJvb3QiICovCi0mKG5pZF9vYmpzWzYxMF0pLC8qICJzZXRDZXh0LW1lcmNoRGF0YSIgKi8KLSYobmlkX29ianNbNjEzXSksLyogInNldENleHQtc2V0RXh0IiAqLwotJihuaWRfb2Jqc1s2MTRdKSwvKiAic2V0Q2V4dC1zZXRRdWFsZiIgKi8KLSYobmlkX29ianNbNjEyXSksLyogInNldENleHQtdHVubmVsaW5nIiAqLwotJihuaWRfb2Jqc1s1NDBdKSwvKiAic2V0Y3QtQWNxQ2FyZENvZGVNc2ciICovCi0mKG5pZF9vYmpzWzU3Nl0pLC8qICJzZXRjdC1BY3FDYXJkQ29kZU1zZ1RCRSIgKi8KLSYobmlkX29ianNbNTcwXSksLyogInNldGN0LUF1dGhSZXFUQkUiICovCi0mKG5pZF9vYmpzWzUzNF0pLC8qICJzZXRjdC1BdXRoUmVxVEJTIiAqLwotJihuaWRfb2Jqc1s1MjddKSwvKiAic2V0Y3QtQXV0aFJlc0JhZ2dhZ2UiICovCi0mKG5pZF9vYmpzWzU3MV0pLC8qICJzZXRjdC1BdXRoUmVzVEJFIiAqLwotJihuaWRfb2Jqc1s1NzJdKSwvKiAic2V0Y3QtQXV0aFJlc1RCRVgiICovCi0mKG5pZF9vYmpzWzUzNV0pLC8qICJzZXRjdC1BdXRoUmVzVEJTIiAqLwotJihuaWRfb2Jqc1s1MzZdKSwvKiAic2V0Y3QtQXV0aFJlc1RCU1giICovCi0mKG5pZF9vYmpzWzUyOF0pLC8qICJzZXRjdC1BdXRoUmV2UmVxQmFnZ2FnZSIgKi8KLSYobmlkX29ianNbNTc3XSksLyogInNldGN0LUF1dGhSZXZSZXFUQkUiICovCi0mKG5pZF9vYmpzWzU0MV0pLC8qICJzZXRjdC1BdXRoUmV2UmVxVEJTIiAqLwotJihuaWRfb2Jqc1s1MjldKSwvKiAic2V0Y3QtQXV0aFJldlJlc0JhZ2dhZ2UiICovCi0mKG5pZF9vYmpzWzU0Ml0pLC8qICJzZXRjdC1BdXRoUmV2UmVzRGF0YSIgKi8KLSYobmlkX29ianNbNTc4XSksLyogInNldGN0LUF1dGhSZXZSZXNUQkUiICovCi0mKG5pZF9vYmpzWzU3OV0pLC8qICJzZXRjdC1BdXRoUmV2UmVzVEJFQiIgKi8KLSYobmlkX29ianNbNTQzXSksLyogInNldGN0LUF1dGhSZXZSZXNUQlMiICovCi0mKG5pZF9vYmpzWzU3M10pLC8qICJzZXRjdC1BdXRoVG9rZW5UQkUiICovCi0mKG5pZF9vYmpzWzUzN10pLC8qICJzZXRjdC1BdXRoVG9rZW5UQlMiICovCi0mKG5pZF9vYmpzWzYwMF0pLC8qICJzZXRjdC1CQ0lEaXN0cmlidXRpb25UQlMiICovCi0mKG5pZF9vYmpzWzU1OF0pLC8qICJzZXRjdC1CYXRjaEFkbWluUmVxRGF0YSIgKi8KLSYobmlkX29ianNbNTkyXSksLyogInNldGN0LUJhdGNoQWRtaW5SZXFUQkUiICovCi0mKG5pZF9vYmpzWzU1OV0pLC8qICJzZXRjdC1CYXRjaEFkbWluUmVzRGF0YSIgKi8KLSYobmlkX29ianNbNTkzXSksLyogInNldGN0LUJhdGNoQWRtaW5SZXNUQkUiICovCi0mKG5pZF9vYmpzWzU5OV0pLC8qICJzZXRjdC1DUkxOb3RpZmljYXRpb25SZXNUQlMiICovCi0mKG5pZF9vYmpzWzU5OF0pLC8qICJzZXRjdC1DUkxOb3RpZmljYXRpb25UQlMiICovCi0mKG5pZF9vYmpzWzU4MF0pLC8qICJzZXRjdC1DYXBSZXFUQkUiICovCi0mKG5pZF9vYmpzWzU4MV0pLC8qICJzZXRjdC1DYXBSZXFUQkVYIiAqLwotJihuaWRfb2Jqc1s1NDRdKSwvKiAic2V0Y3QtQ2FwUmVxVEJTIiAqLwotJihuaWRfb2Jqc1s1NDVdKSwvKiAic2V0Y3QtQ2FwUmVxVEJTWCIgKi8KLSYobmlkX29ianNbNTQ2XSksLyogInNldGN0LUNhcFJlc0RhdGEiICovCi0mKG5pZF9vYmpzWzU4Ml0pLC8qICJzZXRjdC1DYXBSZXNUQkUiICovCi0mKG5pZF9vYmpzWzU4M10pLC8qICJzZXRjdC1DYXBSZXZSZXFUQkUiICovCi0mKG5pZF9vYmpzWzU4NF0pLC8qICJzZXRjdC1DYXBSZXZSZXFUQkVYIiAqLwotJihuaWRfb2Jqc1s1NDddKSwvKiAic2V0Y3QtQ2FwUmV2UmVxVEJTIiAqLwotJihuaWRfb2Jqc1s1NDhdKSwvKiAic2V0Y3QtQ2FwUmV2UmVxVEJTWCIgKi8KLSYobmlkX29ianNbNTQ5XSksLyogInNldGN0LUNhcFJldlJlc0RhdGEiICovCi0mKG5pZF9vYmpzWzU4NV0pLC8qICJzZXRjdC1DYXBSZXZSZXNUQkUiICovCi0mKG5pZF9vYmpzWzUzOF0pLC8qICJzZXRjdC1DYXBUb2tlbkRhdGEiICovCi0mKG5pZF9vYmpzWzUzMF0pLC8qICJzZXRjdC1DYXBUb2tlblNlcSIgKi8KLSYobmlkX29ianNbNTc0XSksLyogInNldGN0LUNhcFRva2VuVEJFIiAqLwotJihuaWRfb2Jqc1s1NzVdKSwvKiAic2V0Y3QtQ2FwVG9rZW5UQkVYIiAqLwotJihuaWRfb2Jqc1s1MzldKSwvKiAic2V0Y3QtQ2FwVG9rZW5UQlMiICovCi0mKG5pZF9vYmpzWzU2MF0pLC8qICJzZXRjdC1DYXJkQ0luaXRSZXNUQlMiICovCi0mKG5pZF9vYmpzWzU2Nl0pLC8qICJzZXRjdC1DZXJ0SW5xUmVxVEJTIiAqLwotJihuaWRfb2Jqc1s1NjNdKSwvKiAic2V0Y3QtQ2VydFJlcURhdGEiICovCi0mKG5pZF9vYmpzWzU5NV0pLC8qICJzZXRjdC1DZXJ0UmVxVEJFIiAqLwotJihuaWRfb2Jqc1s1OTZdKSwvKiAic2V0Y3QtQ2VydFJlcVRCRVgiICovCi0mKG5pZF9vYmpzWzU2NF0pLC8qICJzZXRjdC1DZXJ0UmVxVEJTIiAqLwotJihuaWRfb2Jqc1s1NjVdKSwvKiAic2V0Y3QtQ2VydFJlc0RhdGEiICovCi0mKG5pZF9vYmpzWzU5N10pLC8qICJzZXRjdC1DZXJ0UmVzVEJFIiAqLwotJihuaWRfb2Jqc1s1ODZdKSwvKiAic2V0Y3QtQ3JlZFJlcVRCRSIgKi8KLSYobmlkX29ianNbNTg3XSksLyogInNldGN0LUNyZWRSZXFUQkVYIiAqLwotJihuaWRfb2Jqc1s1NTBdKSwvKiAic2V0Y3QtQ3JlZFJlcVRCUyIgKi8KLSYobmlkX29ianNbNTUxXSksLyogInNldGN0LUNyZWRSZXFUQlNYIiAqLwotJihuaWRfb2Jqc1s1NTJdKSwvKiAic2V0Y3QtQ3JlZFJlc0RhdGEiICovCi0mKG5pZF9vYmpzWzU4OF0pLC8qICJzZXRjdC1DcmVkUmVzVEJFIiAqLwotJihuaWRfb2Jqc1s1ODldKSwvKiAic2V0Y3QtQ3JlZFJldlJlcVRCRSIgKi8KLSYobmlkX29ianNbNTkwXSksLyogInNldGN0LUNyZWRSZXZSZXFUQkVYIiAqLwotJihuaWRfb2Jqc1s1NTNdKSwvKiAic2V0Y3QtQ3JlZFJldlJlcVRCUyIgKi8KLSYobmlkX29ianNbNTU0XSksLyogInNldGN0LUNyZWRSZXZSZXFUQlNYIiAqLwotJihuaWRfb2Jqc1s1NTVdKSwvKiAic2V0Y3QtQ3JlZFJldlJlc0RhdGEiICovCi0mKG5pZF9vYmpzWzU5MV0pLC8qICJzZXRjdC1DcmVkUmV2UmVzVEJFIiAqLwotJihuaWRfb2Jqc1s1NjddKSwvKiAic2V0Y3QtRXJyb3JUQlMiICovCi0mKG5pZF9vYmpzWzUyNl0pLC8qICJzZXRjdC1IT0RJbnB1dCIgKi8KLSYobmlkX29ianNbNTYxXSksLyogInNldGN0LU1lQXFDSW5pdFJlc1RCUyIgKi8KLSYobmlkX29ianNbNTIyXSksLyogInNldGN0LU9JRGF0YSIgKi8KLSYobmlkX29ianNbNTE5XSksLyogInNldGN0LVBBTkRhdGEiICovCi0mKG5pZF9vYmpzWzUyMV0pLC8qICJzZXRjdC1QQU5Pbmx5IiAqLwotJihuaWRfb2Jqc1s1MjBdKSwvKiAic2V0Y3QtUEFOVG9rZW4iICovCi0mKG5pZF9vYmpzWzU1Nl0pLC8qICJzZXRjdC1QQ2VydFJlcURhdGEiICovCi0mKG5pZF9vYmpzWzU1N10pLC8qICJzZXRjdC1QQ2VydFJlc1RCUyIgKi8KLSYobmlkX29ianNbNTIzXSksLyogInNldGN0LVBJIiAqLwotJihuaWRfb2Jqc1s1MzJdKSwvKiAic2V0Y3QtUEktVEJTIiAqLwotJihuaWRfb2Jqc1s1MjRdKSwvKiAic2V0Y3QtUElEYXRhIiAqLwotJihuaWRfb2Jqc1s1MjVdKSwvKiAic2V0Y3QtUElEYXRhVW5zaWduZWQiICovCi0mKG5pZF9vYmpzWzU2OF0pLC8qICJzZXRjdC1QSUR1YWxTaWduZWRUQkUiICovCi0mKG5pZF9vYmpzWzU2OV0pLC8qICJzZXRjdC1QSVVuc2lnbmVkVEJFIiAqLwotJihuaWRfb2Jqc1s1MzFdKSwvKiAic2V0Y3QtUEluaXRSZXNEYXRhIiAqLwotJihuaWRfb2Jqc1s1MzNdKSwvKiAic2V0Y3QtUFJlc0RhdGEiICovCi0mKG5pZF9vYmpzWzU5NF0pLC8qICJzZXRjdC1SZWdGb3JtUmVxVEJFIiAqLwotJihuaWRfb2Jqc1s1NjJdKSwvKiAic2V0Y3QtUmVnRm9ybVJlc1RCUyIgKi8KLSYobmlkX29ianNbNjA2XSksLyogInNldGV4dC1jdiIgKi8KLSYobmlkX29ianNbNjAxXSksLyogInNldGV4dC1nZW5DcnlwdCIgKi8KLSYobmlkX29ianNbNjAyXSksLyogInNldGV4dC1taUF1dGgiICovCi0mKG5pZF9vYmpzWzYwNF0pLC8qICJzZXRleHQtcGluQW55IiAqLwotJihuaWRfb2Jqc1s2MDNdKSwvKiAic2V0ZXh0LXBpblNlY3VyZSIgKi8KLSYobmlkX29ianNbNjA1XSksLyogInNldGV4dC10cmFjazIiICovCi0mKG5pZF9vYmpzWzUyXSksLyogInNpZ25pbmdUaW1lIiAqLwotJihuaWRfb2Jqc1s0NTRdKSwvKiAic2ltcGxlU2VjdXJpdHlPYmplY3QiICovCi0mKG5pZF9vYmpzWzQ5Nl0pLC8qICJzaW5nbGVMZXZlbFF1YWxpdHkiICovCi0mKG5pZF9vYmpzWzM4N10pLC8qICJzbm1wdjIiICovCi0mKG5pZF9vYmpzWzY2MF0pLC8qICJzdHJlZXQiICovCi0mKG5pZF9vYmpzWzg1XSksLyogInN1YmplY3RBbHROYW1lIiAqLwotJihuaWRfb2Jqc1s3NjldKSwvKiAic3ViamVjdERpcmVjdG9yeUF0dHJpYnV0ZXMiICovCi0mKG5pZF9vYmpzWzM5OF0pLC8qICJzdWJqZWN0SW5mb0FjY2VzcyIgKi8KLSYobmlkX29ianNbODJdKSwvKiAic3ViamVjdEtleUlkZW50aWZpZXIiICovCi0mKG5pZF9vYmpzWzQ5OF0pLC8qICJzdWJ0cmVlTWF4aW11bVF1YWxpdHkiICovCi0mKG5pZF9vYmpzWzQ5N10pLC8qICJzdWJ0cmVlTWluaW11bVF1YWxpdHkiICovCi0mKG5pZF9vYmpzWzg5MF0pLC8qICJzdXBwb3J0ZWRBbGdvcml0aG1zIiAqLwotJihuaWRfb2Jqc1s4NzRdKSwvKiAic3VwcG9ydGVkQXBwbGljYXRpb25Db250ZXh0IiAqLwotJihuaWRfb2Jqc1s0MDJdKSwvKiAidGFyZ2V0SW5mb3JtYXRpb24iICovCi0mKG5pZF9vYmpzWzg2NF0pLC8qICJ0ZWxlcGhvbmVOdW1iZXIiICovCi0mKG5pZF9vYmpzWzg2Nl0pLC8qICJ0ZWxldGV4VGVybWluYWxJZGVudGlmaWVyIiAqLwotJihuaWRfb2Jqc1s4NjVdKSwvKiAidGVsZXhOdW1iZXIiICovCi0mKG5pZF9vYmpzWzQ1OV0pLC8qICJ0ZXh0RW5jb2RlZE9SQWRkcmVzcyIgKi8KLSYobmlkX29ianNbMjkzXSksLyogInRleHROb3RpY2UiICovCi0mKG5pZF9vYmpzWzEzM10pLC8qICJ0aW1lU3RhbXBpbmciICovCi0mKG5pZF9vYmpzWzEwNl0pLC8qICJ0aXRsZSIgKi8KLSYobmlkX29ianNbNjgyXSksLyogInRwQmFzaXMiICovCi0mKG5pZF9vYmpzWzM3NV0pLC8qICJ0cnVzdFJvb3QiICovCi0mKG5pZF9vYmpzWzQzNl0pLC8qICJ1Y2wiICovCi0mKG5pZF9vYmpzWzg4OF0pLC8qICJ1bmlxdWVNZW1iZXIiICovCi0mKG5pZF9vYmpzWzU1XSksLyogInVuc3RydWN0dXJlZEFkZHJlc3MiICovCi0mKG5pZF9vYmpzWzQ5XSksLyogInVuc3RydWN0dXJlZE5hbWUiICovCi0mKG5pZF9vYmpzWzg4MF0pLC8qICJ1c2VyQ2VydGlmaWNhdGUiICovCi0mKG5pZF9vYmpzWzQ2NV0pLC8qICJ1c2VyQ2xhc3MiICovCi0mKG5pZF9vYmpzWzg3OV0pLC8qICJ1c2VyUGFzc3dvcmQiICovCi0mKG5pZF9vYmpzWzM3M10pLC8qICJ2YWxpZCIgKi8KLSYobmlkX29ianNbNjc4XSksLyogIndhcCIgKi8KLSYobmlkX29ianNbNjc5XSksLyogIndhcC13c2ciICovCi0mKG5pZF9vYmpzWzczNV0pLC8qICJ3YXAtd3NnLWlkbS1lY2lkLXd0bHMxIiAqLwotJihuaWRfb2Jqc1s3NDNdKSwvKiAid2FwLXdzZy1pZG0tZWNpZC13dGxzMTAiICovCi0mKG5pZF9vYmpzWzc0NF0pLC8qICJ3YXAtd3NnLWlkbS1lY2lkLXd0bHMxMSIgKi8KLSYobmlkX29ianNbNzQ1XSksLyogIndhcC13c2ctaWRtLWVjaWQtd3RsczEyIiAqLwotJihuaWRfb2Jqc1s3MzZdKSwvKiAid2FwLXdzZy1pZG0tZWNpZC13dGxzMyIgKi8KLSYobmlkX29ianNbNzM3XSksLyogIndhcC13c2ctaWRtLWVjaWQtd3RsczQiICovCi0mKG5pZF9vYmpzWzczOF0pLC8qICJ3YXAtd3NnLWlkbS1lY2lkLXd0bHM1IiAqLwotJihuaWRfb2Jqc1s3MzldKSwvKiAid2FwLXdzZy1pZG0tZWNpZC13dGxzNiIgKi8KLSYobmlkX29ianNbNzQwXSksLyogIndhcC13c2ctaWRtLWVjaWQtd3RsczciICovCi0mKG5pZF9vYmpzWzc0MV0pLC8qICJ3YXAtd3NnLWlkbS1lY2lkLXd0bHM4IiAqLwotJihuaWRfb2Jqc1s3NDJdKSwvKiAid2FwLXdzZy1pZG0tZWNpZC13dGxzOSIgKi8KLSYobmlkX29ianNbODA0XSksLyogIndoaXJscG9vbCIgKi8KLSYobmlkX29ianNbODY4XSksLyogIngxMjFBZGRyZXNzIiAqLwotJihuaWRfb2Jqc1s1MDNdKSwvKiAieDUwMFVuaXF1ZUlkZW50aWZpZXIiICovCi0mKG5pZF9vYmpzWzE1OF0pLC8qICJ4NTA5Q2VydGlmaWNhdGUiICovCi0mKG5pZF9vYmpzWzE2MF0pLC8qICJ4NTA5Q3JsIiAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzbl9vYmpzW05VTV9TTl09eworMzY0LAkvKiAiQURfRFZDUyIgKi8KKzQxOSwJLyogIkFFUy0xMjgtQ0JDIiAqLworNDIxLAkvKiAiQUVTLTEyOC1DRkIiICovCis2NTAsCS8qICJBRVMtMTI4LUNGQjEiICovCis2NTMsCS8qICJBRVMtMTI4LUNGQjgiICovCis0MTgsCS8qICJBRVMtMTI4LUVDQiIgKi8KKzQyMCwJLyogIkFFUy0xMjgtT0ZCIiAqLworNDIzLAkvKiAiQUVTLTE5Mi1DQkMiICovCis0MjUsCS8qICJBRVMtMTkyLUNGQiIgKi8KKzY1MSwJLyogIkFFUy0xOTItQ0ZCMSIgKi8KKzY1NCwJLyogIkFFUy0xOTItQ0ZCOCIgKi8KKzQyMiwJLyogIkFFUy0xOTItRUNCIiAqLworNDI0LAkvKiAiQUVTLTE5Mi1PRkIiICovCis0MjcsCS8qICJBRVMtMjU2LUNCQyIgKi8KKzQyOSwJLyogIkFFUy0yNTYtQ0ZCIiAqLworNjUyLAkvKiAiQUVTLTI1Ni1DRkIxIiAqLworNjU1LAkvKiAiQUVTLTI1Ni1DRkI4IiAqLworNDI2LAkvKiAiQUVTLTI1Ni1FQ0IiICovCis0MjgsCS8qICJBRVMtMjU2LU9GQiIgKi8KKzkxLAkvKiAiQkYtQ0JDIiAqLworOTMsCS8qICJCRi1DRkIiICovCis5MiwJLyogIkJGLUVDQiIgKi8KKzk0LAkvKiAiQkYtT0ZCIiAqLworMTQsCS8qICJDIiAqLworNzUxLAkvKiAiQ0FNRUxMSUEtMTI4LUNCQyIgKi8KKzc1NywJLyogIkNBTUVMTElBLTEyOC1DRkIiICovCis3NjAsCS8qICJDQU1FTExJQS0xMjgtQ0ZCMSIgKi8KKzc2MywJLyogIkNBTUVMTElBLTEyOC1DRkI4IiAqLworNzU0LAkvKiAiQ0FNRUxMSUEtMTI4LUVDQiIgKi8KKzc2NiwJLyogIkNBTUVMTElBLTEyOC1PRkIiICovCis3NTIsCS8qICJDQU1FTExJQS0xOTItQ0JDIiAqLworNzU4LAkvKiAiQ0FNRUxMSUEtMTkyLUNGQiIgKi8KKzc2MSwJLyogIkNBTUVMTElBLTE5Mi1DRkIxIiAqLworNzY0LAkvKiAiQ0FNRUxMSUEtMTkyLUNGQjgiICovCis3NTUsCS8qICJDQU1FTExJQS0xOTItRUNCIiAqLworNzY3LAkvKiAiQ0FNRUxMSUEtMTkyLU9GQiIgKi8KKzc1MywJLyogIkNBTUVMTElBLTI1Ni1DQkMiICovCis3NTksCS8qICJDQU1FTExJQS0yNTYtQ0ZCIiAqLworNzYyLAkvKiAiQ0FNRUxMSUEtMjU2LUNGQjEiICovCis3NjUsCS8qICJDQU1FTExJQS0yNTYtQ0ZCOCIgKi8KKzc1NiwJLyogIkNBTUVMTElBLTI1Ni1FQ0IiICovCis3NjgsCS8qICJDQU1FTExJQS0yNTYtT0ZCIiAqLworMTA4LAkvKiAiQ0FTVDUtQ0JDIiAqLworMTEwLAkvKiAiQ0FTVDUtQ0ZCIiAqLworMTA5LAkvKiAiQ0FTVDUtRUNCIiAqLworMTExLAkvKiAiQ0FTVDUtT0ZCIiAqLworMTMsCS8qICJDTiIgKi8KKzE0MSwJLyogIkNSTFJlYXNvbiIgKi8KKzQxNywJLyogIkNTUE5hbWUiICovCiszNjcsCS8qICJDcmxJRCIgKi8KKzM5MSwJLyogIkRDIiAqLworMzEsCS8qICJERVMtQ0JDIiAqLworNjQzLAkvKiAiREVTLUNETUYiICovCiszMCwJLyogIkRFUy1DRkIiICovCis2NTYsCS8qICJERVMtQ0ZCMSIgKi8KKzY1NywJLyogIkRFUy1DRkI4IiAqLworMjksCS8qICJERVMtRUNCIiAqLworMzIsCS8qICJERVMtRURFIiAqLworNDMsCS8qICJERVMtRURFLUNCQyIgKi8KKzYwLAkvKiAiREVTLUVERS1DRkIiICovCis2MiwJLyogIkRFUy1FREUtT0ZCIiAqLworMzMsCS8qICJERVMtRURFMyIgKi8KKzQ0LAkvKiAiREVTLUVERTMtQ0JDIiAqLworNjEsCS8qICJERVMtRURFMy1DRkIiICovCis2NTgsCS8qICJERVMtRURFMy1DRkIxIiAqLworNjU5LAkvKiAiREVTLUVERTMtQ0ZCOCIgKi8KKzYzLAkvKiAiREVTLUVERTMtT0ZCIiAqLworNDUsCS8qICJERVMtT0ZCIiAqLworODAsCS8qICJERVNYLUNCQyIgKi8KKzM4MCwJLyogIkRPRCIgKi8KKzExNiwJLyogIkRTQSIgKi8KKzY2LAkvKiAiRFNBLVNIQSIgKi8KKzExMywJLyogIkRTQS1TSEExIiAqLworNzAsCS8qICJEU0EtU0hBMS1vbGQiICovCis2NywJLyogIkRTQS1vbGQiICovCisyOTcsCS8qICJEVkNTIiAqLworOTksCS8qICJHTiIgKi8KKzg1NSwJLyogIkhNQUMiICovCis3ODAsCS8qICJITUFDLU1ENSIgKi8KKzc4MSwJLyogIkhNQUMtU0hBMSIgKi8KKzM4MSwJLyogIklBTkEiICovCiszNCwJLyogIklERUEtQ0JDIiAqLworMzUsCS8qICJJREVBLUNGQiIgKi8KKzM2LAkvKiAiSURFQS1FQ0IiICovCis0NiwJLyogIklERUEtT0ZCIiAqLworMTgxLAkvKiAiSVNPIiAqLworMTgzLAkvKiAiSVNPLVVTIiAqLworNjQ1LAkvKiAiSVRVLVQiICovCis2NDYsCS8qICJKT0lOVC1JU08tSVRVLVQiICovCis3NzMsCS8qICJLSVNBIiAqLworMTUsCS8qICJMIiAqLworODU2LAkvKiAiTG9jYWxLZXlTZXQiICovCisgMywJLyogIk1EMiIgKi8KKzI1NywJLyogIk1ENCIgKi8KKyA0LAkvKiAiTUQ1IiAqLworMTE0LAkvKiAiTUQ1LVNIQTEiICovCis5NSwJLyogIk1EQzIiICovCiszODgsCS8qICJNYWlsIiAqLworMzkzLAkvKiAiTlVMTCIgKi8KKzQwNCwJLyogIk5VTEwiICovCis1NywJLyogIk5ldHNjYXBlIiAqLworMzY2LAkvKiAiTm9uY2UiICovCisxNywJLyogIk8iICovCisxNzgsCS8qICJPQ1NQIiAqLworMTgwLAkvKiAiT0NTUFNpZ25pbmciICovCiszNzksCS8qICJPUkciICovCisxOCwJLyogIk9VIiAqLworNzQ5LAkvKiAiT2FrbGV5LUVDMk4tMyIgKi8KKzc1MCwJLyogIk9ha2xleS1FQzJOLTQiICovCisgOSwJLyogIlBCRS1NRDItREVTIiAqLworMTY4LAkvKiAiUEJFLU1EMi1SQzItNjQiICovCisxMCwJLyogIlBCRS1NRDUtREVTIiAqLworMTY5LAkvKiAiUEJFLU1ENS1SQzItNjQiICovCisxNDcsCS8qICJQQkUtU0hBMS0yREVTIiAqLworMTQ2LAkvKiAiUEJFLVNIQTEtM0RFUyIgKi8KKzE3MCwJLyogIlBCRS1TSEExLURFUyIgKi8KKzE0OCwJLyogIlBCRS1TSEExLVJDMi0xMjgiICovCisxNDksCS8qICJQQkUtU0hBMS1SQzItNDAiICovCis2OCwJLyogIlBCRS1TSEExLVJDMi02NCIgKi8KKzE0NCwJLyogIlBCRS1TSEExLVJDNC0xMjgiICovCisxNDUsCS8qICJQQkUtU0hBMS1SQzQtNDAiICovCisxNjEsCS8qICJQQkVTMiIgKi8KKzY5LAkvKiAiUEJLREYyIiAqLworMTYyLAkvKiAiUEJNQUMxIiAqLworMTI3LAkvKiAiUEtJWCIgKi8KKzk4LAkvKiAiUkMyLTQwLUNCQyIgKi8KKzE2NiwJLyogIlJDMi02NC1DQkMiICovCiszNywJLyogIlJDMi1DQkMiICovCiszOSwJLyogIlJDMi1DRkIiICovCiszOCwJLyogIlJDMi1FQ0IiICovCis0MCwJLyogIlJDMi1PRkIiICovCisgNSwJLyogIlJDNCIgKi8KKzk3LAkvKiAiUkM0LTQwIiAqLworMTIwLAkvKiAiUkM1LUNCQyIgKi8KKzEyMiwJLyogIlJDNS1DRkIiICovCisxMjEsCS8qICJSQzUtRUNCIiAqLworMTIzLAkvKiAiUkM1LU9GQiIgKi8KKzExNywJLyogIlJJUEVNRDE2MCIgKi8KKzEyNCwJLyogIlJMRSIgKi8KKzE5LAkvKiAiUlNBIiAqLworIDcsCS8qICJSU0EtTUQyIiAqLworMzk2LAkvKiAiUlNBLU1ENCIgKi8KKyA4LAkvKiAiUlNBLU1ENSIgKi8KKzk2LAkvKiAiUlNBLU1EQzIiICovCisxMDQsCS8qICJSU0EtTlAtTUQ1IiAqLworMTE5LAkvKiAiUlNBLVJJUEVNRDE2MCIgKi8KKzQyLAkvKiAiUlNBLVNIQSIgKi8KKzY1LAkvKiAiUlNBLVNIQTEiICovCisxMTUsCS8qICJSU0EtU0hBMS0yIiAqLworNjcxLAkvKiAiUlNBLVNIQTIyNCIgKi8KKzY2OCwJLyogIlJTQS1TSEEyNTYiICovCis2NjksCS8qICJSU0EtU0hBMzg0IiAqLworNjcwLAkvKiAiUlNBLVNIQTUxMiIgKi8KKzc3NywJLyogIlNFRUQtQ0JDIiAqLworNzc5LAkvKiAiU0VFRC1DRkIiICovCis3NzYsCS8qICJTRUVELUVDQiIgKi8KKzc3OCwJLyogIlNFRUQtT0ZCIiAqLworNDEsCS8qICJTSEEiICovCis2NCwJLyogIlNIQTEiICovCis2NzUsCS8qICJTSEEyMjQiICovCis2NzIsCS8qICJTSEEyNTYiICovCis2NzMsCS8qICJTSEEzODQiICovCis2NzQsCS8qICJTSEE1MTIiICovCisxODgsCS8qICJTTUlNRSIgKi8KKzE2NywJLyogIlNNSU1FLUNBUFMiICovCisxMDAsCS8qICJTTiIgKi8KKzE2LAkvKiAiU1QiICovCisxNDMsCS8qICJTWE5ldElEIiAqLworNDU4LAkvKiAiVUlEIiAqLworIDAsCS8qICJVTkRFRiIgKi8KKzExLAkvKiAiWDUwMCIgKi8KKzM3OCwJLyogIlg1MDBhbGdvcml0aG1zIiAqLworMTIsCS8qICJYNTA5IiAqLworMTg0LAkvKiAiWDktNTciICovCisxODUsCS8qICJYOWNtIiAqLworMTI1LAkvKiAiWkxJQiIgKi8KKzQ3OCwJLyogImFSZWNvcmQiICovCisyODksCS8qICJhYUNvbnRyb2xzIiAqLworMjg3LAkvKiAiYWMtYXVkaXRFbnRpdHkiICovCiszOTcsCS8qICJhYy1wcm94eWluZyIgKi8KKzI4OCwJLyogImFjLXRhcmdldGluZyIgKi8KKzM2OCwJLyogImFjY2VwdGFibGVSZXNwb25zZXMiICovCis0NDYsCS8qICJhY2NvdW50IiAqLworMzYzLAkvKiAiYWRfdGltZXN0YW1waW5nIiAqLworMzc2LAkvKiAiYWxnb3JpdGhtIiAqLworNDA1LAkvKiAiYW5zaS1YOS02MiIgKi8KKzc0NiwJLyogImFueVBvbGljeSIgKi8KKzM3MCwJLyogImFyY2hpdmVDdXRvZmYiICovCis0ODQsCS8qICJhc3NvY2lhdGVkRG9tYWluIiAqLworNDg1LAkvKiAiYXNzb2NpYXRlZE5hbWUiICovCis1MDEsCS8qICJhdWRpbyIgKi8KKzE3NywJLyogImF1dGhvcml0eUluZm9BY2Nlc3MiICovCis5MCwJLyogImF1dGhvcml0eUtleUlkZW50aWZpZXIiICovCis4ODIsCS8qICJhdXRob3JpdHlSZXZvY2F0aW9uTGlzdCIgKi8KKzg3LAkvKiAiYmFzaWNDb25zdHJhaW50cyIgKi8KKzM2NSwJLyogImJhc2ljT0NTUFJlc3BvbnNlIiAqLworMjg1LAkvKiAiYmlvbWV0cmljSW5mbyIgKi8KKzQ5NCwJLyogImJ1aWxkaW5nTmFtZSIgKi8KKzg2MCwJLyogImJ1c2luZXNzQ2F0ZWdvcnkiICovCis2OTEsCS8qICJjMm9uYjE5MXY0IiAqLworNjkyLAkvKiAiYzJvbmIxOTF2NSIgKi8KKzY5NywJLyogImMyb25iMjM5djQiICovCis2OTgsCS8qICJjMm9uYjIzOXY1IiAqLworNjg0LAkvKiAiYzJwbmIxNjN2MSIgKi8KKzY4NSwJLyogImMycG5iMTYzdjIiICovCis2ODYsCS8qICJjMnBuYjE2M3YzIiAqLworNjg3LAkvKiAiYzJwbmIxNzZ2MSIgKi8KKzY5MywJLyogImMycG5iMjA4dzEiICovCis2OTksCS8qICJjMnBuYjI3MncxIiAqLworNzAwLAkvKiAiYzJwbmIzMDR3MSIgKi8KKzcwMiwJLyogImMycG5iMzY4dzEiICovCis2ODgsCS8qICJjMnRuYjE5MXYxIiAqLworNjg5LAkvKiAiYzJ0bmIxOTF2MiIgKi8KKzY5MCwJLyogImMydG5iMTkxdjMiICovCis2OTQsCS8qICJjMnRuYjIzOXYxIiAqLworNjk1LAkvKiAiYzJ0bmIyMzl2MiIgKi8KKzY5NiwJLyogImMydG5iMjM5djMiICovCis3MDEsCS8qICJjMnRuYjM1OXYxIiAqLworNzAzLAkvKiAiYzJ0bmI0MzFyMSIgKi8KKzg4MSwJLyogImNBQ2VydGlmaWNhdGUiICovCis0ODMsCS8qICJjTkFNRVJlY29yZCIgKi8KKzE3OSwJLyogImNhSXNzdWVycyIgKi8KKzc4NSwJLyogImNhUmVwb3NpdG9yeSIgKi8KKzQ0MywJLyogImNhc2VJZ25vcmVJQTVTdHJpbmdTeW50YXgiICovCisxNTIsCS8qICJjZXJ0QmFnIiAqLworNjc3LAkvKiAiY2VydGljb20tYXJjIiAqLworNzcxLAkvKiAiY2VydGlmaWNhdGVJc3N1ZXIiICovCis4OSwJLyogImNlcnRpZmljYXRlUG9saWNpZXMiICovCis4ODMsCS8qICJjZXJ0aWZpY2F0ZVJldm9jYXRpb25MaXN0IiAqLworNTQsCS8qICJjaGFsbGVuZ2VQYXNzd29yZCIgKi8KKzQwNywJLyogImNoYXJhY3RlcmlzdGljLXR3by1maWVsZCIgKi8KKzM5NSwJLyogImNsZWFyYW5jZSIgKi8KKzEzMCwJLyogImNsaWVudEF1dGgiICovCisxMzEsCS8qICJjb2RlU2lnbmluZyIgKi8KKzUwLAkvKiAiY29udGVudFR5cGUiICovCis1MywJLyogImNvdW50ZXJzaWduYXR1cmUiICovCisxNTMsCS8qICJjcmxCYWciICovCisxMDMsCS8qICJjcmxEaXN0cmlidXRpb25Qb2ludHMiICovCis4OCwJLyogImNybE51bWJlciIgKi8KKzg4NCwJLyogImNyb3NzQ2VydGlmaWNhdGVQYWlyIiAqLworODA2LAkvKiAiY3J5cHRvY29tIiAqLworODA1LAkvKiAiY3J5cHRvcHJvIiAqLworNTAwLAkvKiAiZElUUmVkaXJlY3QiICovCis0NTEsCS8qICJkTlNEb21haW4iICovCis0OTUsCS8qICJkU0FRdWFsaXR5IiAqLworNDM0LAkvKiAiZGF0YSIgKi8KKzM5MCwJLyogImRjb2JqZWN0IiAqLworMTQwLAkvKiAiZGVsdGFDUkwiICovCis4OTEsCS8qICJkZWx0YVJldm9jYXRpb25MaXN0IiAqLworMTA3LAkvKiAiZGVzY3JpcHRpb24iICovCis4NzEsCS8qICJkZXN0aW5hdGlvbkluZGljYXRvciIgKi8KKzI4LAkvKiAiZGhLZXlBZ3JlZW1lbnQiICovCiszODIsCS8qICJkaXJlY3RvcnkiICovCis4ODcsCS8qICJkaXN0aW5ndWlzaGVkTmFtZSIgKi8KKzg5MiwJLyogImRtZE5hbWUiICovCisxNzQsCS8qICJkblF1YWxpZmllciIgKi8KKzQ0NywJLyogImRvY3VtZW50IiAqLworNDcxLAkvKiAiZG9jdW1lbnRBdXRob3IiICovCis0NjgsCS8qICJkb2N1bWVudElkZW50aWZpZXIiICovCis0NzIsCS8qICJkb2N1bWVudExvY2F0aW9uIiAqLworNTAyLAkvKiAiZG9jdW1lbnRQdWJsaXNoZXIiICovCis0NDksCS8qICJkb2N1bWVudFNlcmllcyIgKi8KKzQ2OSwJLyogImRvY3VtZW50VGl0bGUiICovCis0NzAsCS8qICJkb2N1bWVudFZlcnNpb24iICovCiszOTIsCS8qICJkb21haW4iICovCis0NTIsCS8qICJkb21haW5SZWxhdGVkT2JqZWN0IiAqLworODAyLAkvKiAiZHNhX3dpdGhfU0hBMjI0IiAqLworODAzLAkvKiAiZHNhX3dpdGhfU0hBMjU2IiAqLworNzkxLAkvKiAiZWNkc2Etd2l0aC1SZWNvbW1lbmRlZCIgKi8KKzQxNiwJLyogImVjZHNhLXdpdGgtU0hBMSIgKi8KKzc5MywJLyogImVjZHNhLXdpdGgtU0hBMjI0IiAqLworNzk0LAkvKiAiZWNkc2Etd2l0aC1TSEEyNTYiICovCis3OTUsCS8qICJlY2RzYS13aXRoLVNIQTM4NCIgKi8KKzc5NiwJLyogImVjZHNhLXdpdGgtU0hBNTEyIiAqLworNzkyLAkvKiAiZWNkc2Etd2l0aC1TcGVjaWZpZWQiICovCis0OCwJLyogImVtYWlsQWRkcmVzcyIgKi8KKzEzMiwJLyogImVtYWlsUHJvdGVjdGlvbiIgKi8KKzg4NSwJLyogImVuaGFuY2VkU2VhcmNoR3VpZGUiICovCiszODksCS8qICJlbnRlcnByaXNlcyIgKi8KKzM4NCwJLyogImV4cGVyaW1lbnRhbCIgKi8KKzE3MiwJLyogImV4dFJlcSIgKi8KKzU2LAkvKiAiZXh0ZW5kZWRDZXJ0aWZpY2F0ZUF0dHJpYnV0ZXMiICovCisxMjYsCS8qICJleHRlbmRlZEtleVVzYWdlIiAqLworMzcyLAkvKiAiZXh0ZW5kZWRTdGF0dXMiICovCis4NjcsCS8qICJmYWNzaW1pbGVUZWxlcGhvbmVOdW1iZXIiICovCis0NjIsCS8qICJmYXZvdXJpdGVEcmluayIgKi8KKzg1NywJLyogImZyZXNoZXN0Q1JMIiAqLworNDUzLAkvKiAiZnJpZW5kbHlDb3VudHJ5IiAqLworNDkwLAkvKiAiZnJpZW5kbHlDb3VudHJ5TmFtZSIgKi8KKzE1NiwJLyogImZyaWVuZGx5TmFtZSIgKi8KKzUwOSwJLyogImdlbmVyYXRpb25RdWFsaWZpZXIiICovCis4MTUsCS8qICJnb3N0LW1hYyIgKi8KKzgxMSwJLyogImdvc3QyMDAxIiAqLworODUxLAkvKiAiZ29zdDIwMDFjYyIgKi8KKzgxMywJLyogImdvc3Q4OSIgKi8KKzgxNCwJLyogImdvc3Q4OS1jbnQiICovCis4MTIsCS8qICJnb3N0OTQiICovCis4NTAsCS8qICJnb3N0OTRjYyIgKi8KKzc5NywJLyogImhtYWNXaXRoTUQ1IiAqLworMTYzLAkvKiAiaG1hY1dpdGhTSEExIiAqLworNzk4LAkvKiAiaG1hY1dpdGhTSEEyMjQiICovCis3OTksCS8qICJobWFjV2l0aFNIQTI1NiIgKi8KKzgwMCwJLyogImhtYWNXaXRoU0hBMzg0IiAqLworODAxLAkvKiAiaG1hY1dpdGhTSEE1MTIiICovCis0MzIsCS8qICJob2xkSW5zdHJ1Y3Rpb25DYWxsSXNzdWVyIiAqLworNDMwLAkvKiAiaG9sZEluc3RydWN0aW9uQ29kZSIgKi8KKzQzMSwJLyogImhvbGRJbnN0cnVjdGlvbk5vbmUiICovCis0MzMsCS8qICJob2xkSW5zdHJ1Y3Rpb25SZWplY3QiICovCis0ODYsCS8qICJob21lUG9zdGFsQWRkcmVzcyIgKi8KKzQ3MywJLyogImhvbWVUZWxlcGhvbmVOdW1iZXIiICovCis0NjYsCS8qICJob3N0IiAqLworODg5LAkvKiAiaG91c2VJZGVudGlmaWVyIiAqLworNDQyLAkvKiAiaUE1U3RyaW5nU3ludGF4IiAqLworNzgzLAkvKiAiaWQtREhCYXNlZE1hYyIgKi8KKzgyNCwJLyogImlkLUdvc3QyODE0Ny04OS1DcnlwdG9Qcm8tQS1QYXJhbVNldCIgKi8KKzgyNSwJLyogImlkLUdvc3QyODE0Ny04OS1DcnlwdG9Qcm8tQi1QYXJhbVNldCIgKi8KKzgyNiwJLyogImlkLUdvc3QyODE0Ny04OS1DcnlwdG9Qcm8tQy1QYXJhbVNldCIgKi8KKzgyNywJLyogImlkLUdvc3QyODE0Ny04OS1DcnlwdG9Qcm8tRC1QYXJhbVNldCIgKi8KKzgxOSwJLyogImlkLUdvc3QyODE0Ny04OS1DcnlwdG9Qcm8tS2V5TWVzaGluZyIgKi8KKzgyOSwJLyogImlkLUdvc3QyODE0Ny04OS1DcnlwdG9Qcm8tT3NjYXItMS0wLVBhcmFtU2V0IiAqLworODI4LAkvKiAiaWQtR29zdDI4MTQ3LTg5LUNyeXB0b1Byby1Pc2Nhci0xLTEtUGFyYW1TZXQiICovCis4MzAsCS8qICJpZC1Hb3N0MjgxNDctODktQ3J5cHRvUHJvLVJJQy0xLVBhcmFtU2V0IiAqLworODIwLAkvKiAiaWQtR29zdDI4MTQ3LTg5LU5vbmUtS2V5TWVzaGluZyIgKi8KKzgyMywJLyogImlkLUdvc3QyODE0Ny04OS1UZXN0UGFyYW1TZXQiICovCis4NDksCS8qICJpZC1Hb3N0MjgxNDctODktY2MiICovCis4NDAsCS8qICJpZC1Hb3N0UjM0MTAtMjAwMS1DcnlwdG9Qcm8tQS1QYXJhbVNldCIgKi8KKzg0MSwJLyogImlkLUdvc3RSMzQxMC0yMDAxLUNyeXB0b1Byby1CLVBhcmFtU2V0IiAqLworODQyLAkvKiAiaWQtR29zdFIzNDEwLTIwMDEtQ3J5cHRvUHJvLUMtUGFyYW1TZXQiICovCis4NDMsCS8qICJpZC1Hb3N0UjM0MTAtMjAwMS1DcnlwdG9Qcm8tWGNoQS1QYXJhbVNldCIgKi8KKzg0NCwJLyogImlkLUdvc3RSMzQxMC0yMDAxLUNyeXB0b1Byby1YY2hCLVBhcmFtU2V0IiAqLworODU0LAkvKiAiaWQtR29zdFIzNDEwLTIwMDEtUGFyYW1TZXQtY2MiICovCis4MzksCS8qICJpZC1Hb3N0UjM0MTAtMjAwMS1UZXN0UGFyYW1TZXQiICovCis4MTcsCS8qICJpZC1Hb3N0UjM0MTAtMjAwMURIIiAqLworODMyLAkvKiAiaWQtR29zdFIzNDEwLTk0LUNyeXB0b1Byby1BLVBhcmFtU2V0IiAqLworODMzLAkvKiAiaWQtR29zdFIzNDEwLTk0LUNyeXB0b1Byby1CLVBhcmFtU2V0IiAqLworODM0LAkvKiAiaWQtR29zdFIzNDEwLTk0LUNyeXB0b1Byby1DLVBhcmFtU2V0IiAqLworODM1LAkvKiAiaWQtR29zdFIzNDEwLTk0LUNyeXB0b1Byby1ELVBhcmFtU2V0IiAqLworODM2LAkvKiAiaWQtR29zdFIzNDEwLTk0LUNyeXB0b1Byby1YY2hBLVBhcmFtU2V0IiAqLworODM3LAkvKiAiaWQtR29zdFIzNDEwLTk0LUNyeXB0b1Byby1YY2hCLVBhcmFtU2V0IiAqLworODM4LAkvKiAiaWQtR29zdFIzNDEwLTk0LUNyeXB0b1Byby1YY2hDLVBhcmFtU2V0IiAqLworODMxLAkvKiAiaWQtR29zdFIzNDEwLTk0LVRlc3RQYXJhbVNldCIgKi8KKzg0NSwJLyogImlkLUdvc3RSMzQxMC05NC1hIiAqLworODQ2LAkvKiAiaWQtR29zdFIzNDEwLTk0LWFCaXMiICovCis4NDcsCS8qICJpZC1Hb3N0UjM0MTAtOTQtYiIgKi8KKzg0OCwJLyogImlkLUdvc3RSMzQxMC05NC1iQmlzIiAqLworODE4LAkvKiAiaWQtR29zdFIzNDEwLTk0REgiICovCis4MjIsCS8qICJpZC1Hb3N0UjM0MTEtOTQtQ3J5cHRvUHJvUGFyYW1TZXQiICovCis4MjEsCS8qICJpZC1Hb3N0UjM0MTEtOTQtVGVzdFBhcmFtU2V0IiAqLworODA3LAkvKiAiaWQtR29zdFIzNDExLTk0LXdpdGgtR29zdFIzNDEwLTIwMDEiICovCis4NTMsCS8qICJpZC1Hb3N0UjM0MTEtOTQtd2l0aC1Hb3N0UjM0MTAtMjAwMS1jYyIgKi8KKzgwOCwJLyogImlkLUdvc3RSMzQxMS05NC13aXRoLUdvc3RSMzQxMC05NCIgKi8KKzg1MiwJLyogImlkLUdvc3RSMzQxMS05NC13aXRoLUdvc3RSMzQxMC05NC1jYyIgKi8KKzgxMCwJLyogImlkLUhNQUNHb3N0UjM0MTEtOTQiICovCis3ODIsCS8qICJpZC1QYXNzd29yZEJhc2VkTUFDIiAqLworMjY2LAkvKiAiaWQtYWNhIiAqLworMzU1LAkvKiAiaWQtYWNhLWFjY2Vzc0lkZW50aXR5IiAqLworMzU0LAkvKiAiaWQtYWNhLWF1dGhlbnRpY2F0aW9uSW5mbyIgKi8KKzM1NiwJLyogImlkLWFjYS1jaGFyZ2luZ0lkZW50aXR5IiAqLworMzk5LAkvKiAiaWQtYWNhLWVuY0F0dHJzIiAqLworMzU3LAkvKiAiaWQtYWNhLWdyb3VwIiAqLworMzU4LAkvKiAiaWQtYWNhLXJvbGUiICovCisxNzYsCS8qICJpZC1hZCIgKi8KKzc4OCwJLyogImlkLWFlczEyOC13cmFwIiAqLworNzg5LAkvKiAiaWQtYWVzMTkyLXdyYXAiICovCis3OTAsCS8qICJpZC1hZXMyNTYtd3JhcCIgKi8KKzI2MiwJLyogImlkLWFsZyIgKi8KKzMyMywJLyogImlkLWFsZy1kZXM0MCIgKi8KKzMyNiwJLyogImlkLWFsZy1kaC1wb3AiICovCiszMjUsCS8qICJpZC1hbGctZGgtc2lnLWhtYWMtc2hhMSIgKi8KKzMyNCwJLyogImlkLWFsZy1ub1NpZ25hdHVyZSIgKi8KKzI2OCwJLyogImlkLWNjdCIgKi8KKzM2MSwJLyogImlkLWNjdC1QS0lEYXRhIiAqLworMzYyLAkvKiAiaWQtY2N0LVBLSVJlc3BvbnNlIiAqLworMzYwLAkvKiAiaWQtY2N0LWNycyIgKi8KKzgxLAkvKiAiaWQtY2UiICovCis2ODAsCS8qICJpZC1jaGFyYWN0ZXJpc3RpYy10d28tYmFzaXMiICovCisyNjMsCS8qICJpZC1jbWMiICovCiszMzQsCS8qICJpZC1jbWMtYWRkRXh0ZW5zaW9ucyIgKi8KKzM0NiwJLyogImlkLWNtYy1jb25maXJtQ2VydEFjY2VwdGFuY2UiICovCiszMzAsCS8qICJpZC1jbWMtZGF0YVJldHVybiIgKi8KKzMzNiwJLyogImlkLWNtYy1kZWNyeXB0ZWRQT1AiICovCiszMzUsCS8qICJpZC1jbWMtZW5jcnlwdGVkUE9QIiAqLworMzM5LAkvKiAiaWQtY21jLWdldENSTCIgKi8KKzMzOCwJLyogImlkLWNtYy1nZXRDZXJ0IiAqLworMzI4LAkvKiAiaWQtY21jLWlkZW50aWZpY2F0aW9uIiAqLworMzI5LAkvKiAiaWQtY21jLWlkZW50aXR5UHJvb2YiICovCiszMzcsCS8qICJpZC1jbWMtbHJhUE9QV2l0bmVzcyIgKi8KKzM0NCwJLyogImlkLWNtYy1wb3BMaW5rUmFuZG9tIiAqLworMzQ1LAkvKiAiaWQtY21jLXBvcExpbmtXaXRuZXNzIiAqLworMzQzLAkvKiAiaWQtY21jLXF1ZXJ5UGVuZGluZyIgKi8KKzMzMywJLyogImlkLWNtYy1yZWNpcGllbnROb25jZSIgKi8KKzM0MSwJLyogImlkLWNtYy1yZWdJbmZvIiAqLworMzQyLAkvKiAiaWQtY21jLXJlc3BvbnNlSW5mbyIgKi8KKzM0MCwJLyogImlkLWNtYy1yZXZva2VSZXF1ZXN0IiAqLworMzMyLAkvKiAiaWQtY21jLXNlbmRlck5vbmNlIiAqLworMzI3LAkvKiAiaWQtY21jLXN0YXR1c0luZm8iICovCiszMzEsCS8qICJpZC1jbWMtdHJhbnNhY3Rpb25JZCIgKi8KKzc4NywJLyogImlkLWN0LWFzY2lpVGV4dFdpdGhDUkxGIiAqLworNDA4LAkvKiAiaWQtZWNQdWJsaWNLZXkiICovCis1MDgsCS8qICJpZC1oZXgtbXVsdGlwYXJ0LW1lc3NhZ2UiICovCis1MDcsCS8qICJpZC1oZXgtcGFydGlhbC1tZXNzYWdlIiAqLworMjYwLAkvKiAiaWQtaXQiICovCiszMDIsCS8qICJpZC1pdC1jYUtleVVwZGF0ZUluZm8iICovCisyOTgsCS8qICJpZC1pdC1jYVByb3RFbmNDZXJ0IiAqLworMzExLAkvKiAiaWQtaXQtY29uZmlybVdhaXRUaW1lIiAqLworMzAzLAkvKiAiaWQtaXQtY3VycmVudENSTCIgKi8KKzMwMCwJLyogImlkLWl0LWVuY0tleVBhaXJUeXBlcyIgKi8KKzMxMCwJLyogImlkLWl0LWltcGxpY2l0Q29uZmlybSIgKi8KKzMwOCwJLyogImlkLWl0LWtleVBhaXJQYXJhbVJlcCIgKi8KKzMwNywJLyogImlkLWl0LWtleVBhaXJQYXJhbVJlcSIgKi8KKzMxMiwJLyogImlkLWl0LW9yaWdQS0lNZXNzYWdlIiAqLworMzAxLAkvKiAiaWQtaXQtcHJlZmVycmVkU3ltbUFsZyIgKi8KKzMwOSwJLyogImlkLWl0LXJldlBhc3NwaHJhc2UiICovCisyOTksCS8qICJpZC1pdC1zaWduS2V5UGFpclR5cGVzIiAqLworMzA1LAkvKiAiaWQtaXQtc3Vic2NyaXB0aW9uUmVxdWVzdCIgKi8KKzMwNiwJLyogImlkLWl0LXN1YnNjcmlwdGlvblJlc3BvbnNlIiAqLworNzg0LAkvKiAiaWQtaXQtc3VwcExhbmdUYWdzIiAqLworMzA0LAkvKiAiaWQtaXQtdW5zdXBwb3J0ZWRPSURzIiAqLworMTI4LAkvKiAiaWQta3AiICovCisyODAsCS8qICJpZC1tb2QtYXR0cmlidXRlLWNlcnQiICovCisyNzQsCS8qICJpZC1tb2QtY21jIiAqLworMjc3LAkvKiAiaWQtbW9kLWNtcCIgKi8KKzI4NCwJLyogImlkLW1vZC1jbXAyMDAwIiAqLworMjczLAkvKiAiaWQtbW9kLWNybWYiICovCisyODMsCS8qICJpZC1tb2QtZHZjcyIgKi8KKzI3NSwJLyogImlkLW1vZC1rZWEtcHJvZmlsZS04OCIgKi8KKzI3NiwJLyogImlkLW1vZC1rZWEtcHJvZmlsZS05MyIgKi8KKzI4MiwJLyogImlkLW1vZC1vY3NwIiAqLworMjc4LAkvKiAiaWQtbW9kLXF1YWxpZmllZC1jZXJ0LTg4IiAqLworMjc5LAkvKiAiaWQtbW9kLXF1YWxpZmllZC1jZXJ0LTkzIiAqLworMjgxLAkvKiAiaWQtbW9kLXRpbWVzdGFtcC1wcm90b2NvbCIgKi8KKzI2NCwJLyogImlkLW9uIiAqLworODU4LAkvKiAiaWQtb24tcGVybWFuZW50SWRlbnRpZmllciIgKi8KKzM0NywJLyogImlkLW9uLXBlcnNvbmFsRGF0YSIgKi8KKzI2NSwJLyogImlkLXBkYSIgKi8KKzM1MiwJLyogImlkLXBkYS1jb3VudHJ5T2ZDaXRpemVuc2hpcCIgKi8KKzM1MywJLyogImlkLXBkYS1jb3VudHJ5T2ZSZXNpZGVuY2UiICovCiszNDgsCS8qICJpZC1wZGEtZGF0ZU9mQmlydGgiICovCiszNTEsCS8qICJpZC1wZGEtZ2VuZGVyIiAqLworMzQ5LAkvKiAiaWQtcGRhLXBsYWNlT2ZCaXJ0aCIgKi8KKzE3NSwJLyogImlkLXBlIiAqLworMjYxLAkvKiAiaWQtcGtpcCIgKi8KKzI1OCwJLyogImlkLXBraXgtbW9kIiAqLworMjY5LAkvKiAiaWQtcGtpeDEtZXhwbGljaXQtODgiICovCisyNzEsCS8qICJpZC1wa2l4MS1leHBsaWNpdC05MyIgKi8KKzI3MCwJLyogImlkLXBraXgxLWltcGxpY2l0LTg4IiAqLworMjcyLAkvKiAiaWQtcGtpeDEtaW1wbGljaXQtOTMiICovCis2NjIsCS8qICJpZC1wcGwiICovCis2NjQsCS8qICJpZC1wcGwtYW55TGFuZ3VhZ2UiICovCis2NjcsCS8qICJpZC1wcGwtaW5kZXBlbmRlbnQiICovCis2NjUsCS8qICJpZC1wcGwtaW5oZXJpdEFsbCIgKi8KKzI2NywJLyogImlkLXFjcyIgKi8KKzM1OSwJLyogImlkLXFjcy1wa2l4UUNTeW50YXgtdjEiICovCisyNTksCS8qICJpZC1xdCIgKi8KKzE2NCwJLyogImlkLXF0LWNwcyIgKi8KKzE2NSwJLyogImlkLXF0LXVub3RpY2UiICovCiszMTMsCS8qICJpZC1yZWdDdHJsIiAqLworMzE2LAkvKiAiaWQtcmVnQ3RybC1hdXRoZW50aWNhdG9yIiAqLworMzE5LAkvKiAiaWQtcmVnQ3RybC1vbGRDZXJ0SUQiICovCiszMTgsCS8qICJpZC1yZWdDdHJsLXBraUFyY2hpdmVPcHRpb25zIiAqLworMzE3LAkvKiAiaWQtcmVnQ3RybC1wa2lQdWJsaWNhdGlvbkluZm8iICovCiszMjAsCS8qICJpZC1yZWdDdHJsLXByb3RvY29sRW5jcktleSIgKi8KKzMxNSwJLyogImlkLXJlZ0N0cmwtcmVnVG9rZW4iICovCiszMTQsCS8qICJpZC1yZWdJbmZvIiAqLworMzIyLAkvKiAiaWQtcmVnSW5mby1jZXJ0UmVxIiAqLworMzIxLAkvKiAiaWQtcmVnSW5mby11dGY4UGFpcnMiICovCis1MTIsCS8qICJpZC1zZXQiICovCisxOTEsCS8qICJpZC1zbWltZS1hYSIgKi8KKzIxNSwJLyogImlkLXNtaW1lLWFhLWNvbnRlbnRIaW50IiAqLworMjE4LAkvKiAiaWQtc21pbWUtYWEtY29udGVudElkZW50aWZpZXIiICovCisyMjEsCS8qICJpZC1zbWltZS1hYS1jb250ZW50UmVmZXJlbmNlIiAqLworMjQwLAkvKiAiaWQtc21pbWUtYWEtZHZjcy1kdmMiICovCisyMTcsCS8qICJpZC1zbWltZS1hYS1lbmNhcENvbnRlbnRUeXBlIiAqLworMjIyLAkvKiAiaWQtc21pbWUtYWEtZW5jcnlwS2V5UHJlZiIgKi8KKzIyMCwJLyogImlkLXNtaW1lLWFhLWVxdWl2YWxlbnRMYWJlbHMiICovCisyMzIsCS8qICJpZC1zbWltZS1hYS1ldHMtQ2VydGlmaWNhdGVSZWZzIiAqLworMjMzLAkvKiAiaWQtc21pbWUtYWEtZXRzLVJldm9jYXRpb25SZWZzIiAqLworMjM4LAkvKiAiaWQtc21pbWUtYWEtZXRzLWFyY2hpdmVUaW1lU3RhbXAiICovCisyMzcsCS8qICJpZC1zbWltZS1hYS1ldHMtY2VydENSTFRpbWVzdGFtcCIgKi8KKzIzNCwJLyogImlkLXNtaW1lLWFhLWV0cy1jZXJ0VmFsdWVzIiAqLworMjI3LAkvKiAiaWQtc21pbWUtYWEtZXRzLWNvbW1pdG1lbnRUeXBlIiAqLworMjMxLAkvKiAiaWQtc21pbWUtYWEtZXRzLWNvbnRlbnRUaW1lc3RhbXAiICovCisyMzYsCS8qICJpZC1zbWltZS1hYS1ldHMtZXNjVGltZVN0YW1wIiAqLworMjMwLAkvKiAiaWQtc21pbWUtYWEtZXRzLW90aGVyU2lnQ2VydCIgKi8KKzIzNSwJLyogImlkLXNtaW1lLWFhLWV0cy1yZXZvY2F0aW9uVmFsdWVzIiAqLworMjI2LAkvKiAiaWQtc21pbWUtYWEtZXRzLXNpZ1BvbGljeUlkIiAqLworMjI5LAkvKiAiaWQtc21pbWUtYWEtZXRzLXNpZ25lckF0dHIiICovCisyMjgsCS8qICJpZC1zbWltZS1hYS1ldHMtc2lnbmVyTG9jYXRpb24iICovCisyMTksCS8qICJpZC1zbWltZS1hYS1tYWNWYWx1ZSIgKi8KKzIxNCwJLyogImlkLXNtaW1lLWFhLW1sRXhwYW5kSGlzdG9yeSIgKi8KKzIxNiwJLyogImlkLXNtaW1lLWFhLW1zZ1NpZ0RpZ2VzdCIgKi8KKzIxMiwJLyogImlkLXNtaW1lLWFhLXJlY2VpcHRSZXF1ZXN0IiAqLworMjEzLAkvKiAiaWQtc21pbWUtYWEtc2VjdXJpdHlMYWJlbCIgKi8KKzIzOSwJLyogImlkLXNtaW1lLWFhLXNpZ25hdHVyZVR5cGUiICovCisyMjMsCS8qICJpZC1zbWltZS1hYS1zaWduaW5nQ2VydGlmaWNhdGUiICovCisyMjQsCS8qICJpZC1zbWltZS1hYS1zbWltZUVuY3J5cHRDZXJ0cyIgKi8KKzIyNSwJLyogImlkLXNtaW1lLWFhLXRpbWVTdGFtcFRva2VuIiAqLworMTkyLAkvKiAiaWQtc21pbWUtYWxnIiAqLworMjQzLAkvKiAiaWQtc21pbWUtYWxnLTNERVN3cmFwIiAqLworMjQ2LAkvKiAiaWQtc21pbWUtYWxnLUNNUzNERVN3cmFwIiAqLworMjQ3LAkvKiAiaWQtc21pbWUtYWxnLUNNU1JDMndyYXAiICovCisyNDUsCS8qICJpZC1zbWltZS1hbGctRVNESCIgKi8KKzI0MSwJLyogImlkLXNtaW1lLWFsZy1FU0RId2l0aDNERVMiICovCisyNDIsCS8qICJpZC1zbWltZS1hbGctRVNESHdpdGhSQzIiICovCisyNDQsCS8qICJpZC1zbWltZS1hbGctUkMyd3JhcCIgKi8KKzE5MywJLyogImlkLXNtaW1lLWNkIiAqLworMjQ4LAkvKiAiaWQtc21pbWUtY2QtbGRhcCIgKi8KKzE5MCwJLyogImlkLXNtaW1lLWN0IiAqLworMjEwLAkvKiAiaWQtc21pbWUtY3QtRFZDU1JlcXVlc3REYXRhIiAqLworMjExLAkvKiAiaWQtc21pbWUtY3QtRFZDU1Jlc3BvbnNlRGF0YSIgKi8KKzIwOCwJLyogImlkLXNtaW1lLWN0LVREVEluZm8iICovCisyMDcsCS8qICJpZC1zbWltZS1jdC1UU1RJbmZvIiAqLworMjA1LAkvKiAiaWQtc21pbWUtY3QtYXV0aERhdGEiICovCis3ODYsCS8qICJpZC1zbWltZS1jdC1jb21wcmVzc2VkRGF0YSIgKi8KKzIwOSwJLyogImlkLXNtaW1lLWN0LWNvbnRlbnRJbmZvIiAqLworMjA2LAkvKiAiaWQtc21pbWUtY3QtcHVibGlzaENlcnQiICovCisyMDQsCS8qICJpZC1zbWltZS1jdC1yZWNlaXB0IiAqLworMTk1LAkvKiAiaWQtc21pbWUtY3RpIiAqLworMjU1LAkvKiAiaWQtc21pbWUtY3RpLWV0cy1wcm9vZk9mQXBwcm92YWwiICovCisyNTYsCS8qICJpZC1zbWltZS1jdGktZXRzLXByb29mT2ZDcmVhdGlvbiIgKi8KKzI1MywJLyogImlkLXNtaW1lLWN0aS1ldHMtcHJvb2ZPZkRlbGl2ZXJ5IiAqLworMjUxLAkvKiAiaWQtc21pbWUtY3RpLWV0cy1wcm9vZk9mT3JpZ2luIiAqLworMjUyLAkvKiAiaWQtc21pbWUtY3RpLWV0cy1wcm9vZk9mUmVjZWlwdCIgKi8KKzI1NCwJLyogImlkLXNtaW1lLWN0aS1ldHMtcHJvb2ZPZlNlbmRlciIgKi8KKzE4OSwJLyogImlkLXNtaW1lLW1vZCIgKi8KKzE5NiwJLyogImlkLXNtaW1lLW1vZC1jbXMiICovCisxOTcsCS8qICJpZC1zbWltZS1tb2QtZXNzIiAqLworMjAyLAkvKiAiaWQtc21pbWUtbW9kLWV0cy1lU2lnUG9saWN5LTg4IiAqLworMjAzLAkvKiAiaWQtc21pbWUtbW9kLWV0cy1lU2lnUG9saWN5LTk3IiAqLworMjAwLAkvKiAiaWQtc21pbWUtbW9kLWV0cy1lU2lnbmF0dXJlLTg4IiAqLworMjAxLAkvKiAiaWQtc21pbWUtbW9kLWV0cy1lU2lnbmF0dXJlLTk3IiAqLworMTk5LAkvKiAiaWQtc21pbWUtbW9kLW1zZy12MyIgKi8KKzE5OCwJLyogImlkLXNtaW1lLW1vZC1vaWQiICovCisxOTQsCS8qICJpZC1zbWltZS1zcHEiICovCisyNTAsCS8qICJpZC1zbWltZS1zcHEtZXRzLXNxdC11bm90aWNlIiAqLworMjQ5LAkvKiAiaWQtc21pbWUtc3BxLWV0cy1zcXQtdXJpIiAqLworNjc2LAkvKiAiaWRlbnRpZmllZC1vcmdhbml6YXRpb24iICovCis0NjEsCS8qICJpbmZvIiAqLworNzQ4LAkvKiAiaW5oaWJpdEFueVBvbGljeSIgKi8KKzEwMSwJLyogImluaXRpYWxzIiAqLworNjQ3LAkvKiAiaW50ZXJuYXRpb25hbC1vcmdhbml6YXRpb25zIiAqLworODY5LAkvKiAiaW50ZXJuYXRpb25hbGlTRE5OdW1iZXIiICovCisxNDIsCS8qICJpbnZhbGlkaXR5RGF0ZSIgKi8KKzI5NCwJLyogImlwc2VjRW5kU3lzdGVtIiAqLworMjk1LAkvKiAiaXBzZWNUdW5uZWwiICovCisyOTYsCS8qICJpcHNlY1VzZXIiICovCis4NiwJLyogImlzc3VlckFsdE5hbWUiICovCis3NzAsCS8qICJpc3N1aW5nRGlzdHJpYnV0aW9uUG9pbnQiICovCis0OTIsCS8qICJqYW5ldE1haWxib3giICovCisxNTAsCS8qICJrZXlCYWciICovCis4MywJLyogImtleVVzYWdlIiAqLworNDc3LAkvKiAibGFzdE1vZGlmaWVkQnkiICovCis0NzYsCS8qICJsYXN0TW9kaWZpZWRUaW1lIiAqLworMTU3LAkvKiAibG9jYWxLZXlJRCIgKi8KKzQ4MCwJLyogIm1YUmVjb3JkIiAqLworNDYwLAkvKiAibWFpbCIgKi8KKzQ5MywJLyogIm1haWxQcmVmZXJlbmNlT3B0aW9uIiAqLworNDY3LAkvKiAibWFuYWdlciIgKi8KKzgwOSwJLyogIm1kX2dvc3Q5NCIgKi8KKzg3NSwJLyogIm1lbWJlciIgKi8KKzE4MiwJLyogIm1lbWJlci1ib2R5IiAqLworNTEsCS8qICJtZXNzYWdlRGlnZXN0IiAqLworMzgzLAkvKiAibWdtdCIgKi8KKzUwNCwJLyogIm1pbWUtbWhzIiAqLworNTA2LAkvKiAibWltZS1taHMtYm9kaWVzIiAqLworNTA1LAkvKiAibWltZS1taHMtaGVhZGluZ3MiICovCis0ODgsCS8qICJtb2JpbGVUZWxlcGhvbmVOdW1iZXIiICovCisxMzYsCS8qICJtc0NUTFNpZ24iICovCisxMzUsCS8qICJtc0NvZGVDb20iICovCisxMzQsCS8qICJtc0NvZGVJbmQiICovCisxMzgsCS8qICJtc0VGUyIgKi8KKzE3MSwJLyogIm1zRXh0UmVxIiAqLworMTM3LAkvKiAibXNTR0MiICovCis2NDgsCS8qICJtc1NtYXJ0Y2FyZExvZ2luIiAqLworNjQ5LAkvKiAibXNVUE4iICovCis0ODEsCS8qICJuU1JlY29yZCIgKi8KKzE3MywJLyogIm5hbWUiICovCis2NjYsCS8qICJuYW1lQ29uc3RyYWludHMiICovCiszNjksCS8qICJub0NoZWNrIiAqLworNDAzLAkvKiAibm9SZXZBdmFpbCIgKi8KKzcyLAkvKiAibnNCYXNlVXJsIiAqLworNzYsCS8qICJuc0NhUG9saWN5VXJsIiAqLworNzQsCS8qICJuc0NhUmV2b2NhdGlvblVybCIgKi8KKzU4LAkvKiAibnNDZXJ0RXh0IiAqLworNzksCS8qICJuc0NlcnRTZXF1ZW5jZSIgKi8KKzcxLAkvKiAibnNDZXJ0VHlwZSIgKi8KKzc4LAkvKiAibnNDb21tZW50IiAqLworNTksCS8qICJuc0RhdGFUeXBlIiAqLworNzUsCS8qICJuc1JlbmV3YWxVcmwiICovCis3MywJLyogIm5zUmV2b2NhdGlvblVybCIgKi8KKzEzOSwJLyogIm5zU0dDIiAqLworNzcsCS8qICJuc1NzbFNlcnZlck5hbWUiICovCis2ODEsCS8qICJvbkJhc2lzIiAqLworNDkxLAkvKiAib3JnYW5pemF0aW9uYWxTdGF0dXMiICovCis0NzUsCS8qICJvdGhlck1haWxib3giICovCis4NzYsCS8qICJvd25lciIgKi8KKzQ4OSwJLyogInBhZ2VyVGVsZXBob25lTnVtYmVyIiAqLworMzc0LAkvKiAicGF0aCIgKi8KKzExMiwJLyogInBiZVdpdGhNRDVBbmRDYXN0NUNCQyIgKi8KKzQ5OSwJLyogInBlcnNvbmFsU2lnbmF0dXJlIiAqLworNDg3LAkvKiAicGVyc29uYWxUaXRsZSIgKi8KKzQ2NCwJLyogInBob3RvIiAqLworODYzLAkvKiAicGh5c2ljYWxEZWxpdmVyeU9mZmljZU5hbWUiICovCis0MzcsCS8qICJwaWxvdCIgKi8KKzQzOSwJLyogInBpbG90QXR0cmlidXRlU3ludGF4IiAqLworNDM4LAkvKiAicGlsb3RBdHRyaWJ1dGVUeXBlIiAqLworNDc5LAkvKiAicGlsb3RBdHRyaWJ1dGVUeXBlMjciICovCis0NTYsCS8qICJwaWxvdERTQSIgKi8KKzQ0MSwJLyogInBpbG90R3JvdXBzIiAqLworNDQ0LAkvKiAicGlsb3RPYmplY3QiICovCis0NDAsCS8qICJwaWxvdE9iamVjdENsYXNzIiAqLworNDU1LAkvKiAicGlsb3RPcmdhbml6YXRpb24iICovCis0NDUsCS8qICJwaWxvdFBlcnNvbiIgKi8KKyAyLAkvKiAicGtjcyIgKi8KKzE4NiwJLyogInBrY3MxIiAqLworMjcsCS8qICJwa2NzMyIgKi8KKzE4NywJLyogInBrY3M1IiAqLworMjAsCS8qICJwa2NzNyIgKi8KKzIxLAkvKiAicGtjczctZGF0YSIgKi8KKzI1LAkvKiAicGtjczctZGlnZXN0RGF0YSIgKi8KKzI2LAkvKiAicGtjczctZW5jcnlwdGVkRGF0YSIgKi8KKzIzLAkvKiAicGtjczctZW52ZWxvcGVkRGF0YSIgKi8KKzI0LAkvKiAicGtjczctc2lnbmVkQW5kRW52ZWxvcGVkRGF0YSIgKi8KKzIyLAkvKiAicGtjczctc2lnbmVkRGF0YSIgKi8KKzE1MSwJLyogInBrY3M4U2hyb3VkZWRLZXlCYWciICovCis0NywJLyogInBrY3M5IiAqLworNDAxLAkvKiAicG9saWN5Q29uc3RyYWludHMiICovCis3NDcsCS8qICJwb2xpY3lNYXBwaW5ncyIgKi8KKzg2MiwJLyogInBvc3RPZmZpY2VCb3giICovCis4NjEsCS8qICJwb3N0YWxBZGRyZXNzIiAqLworNjYxLAkvKiAicG9zdGFsQ29kZSIgKi8KKzY4MywJLyogInBwQmFzaXMiICovCis4NzIsCS8qICJwcmVmZXJyZWREZWxpdmVyeU1ldGhvZCIgKi8KKzg3MywJLyogInByZXNlbnRhdGlvbkFkZHJlc3MiICovCis4MTYsCS8qICJwcmYtZ29zdHIzNDExLTk0IiAqLworNDA2LAkvKiAicHJpbWUtZmllbGQiICovCis0MDksCS8qICJwcmltZTE5MnYxIiAqLworNDEwLAkvKiAicHJpbWUxOTJ2MiIgKi8KKzQxMSwJLyogInByaW1lMTkydjMiICovCis0MTIsCS8qICJwcmltZTIzOXYxIiAqLworNDEzLAkvKiAicHJpbWUyMzl2MiIgKi8KKzQxNCwJLyogInByaW1lMjM5djMiICovCis0MTUsCS8qICJwcmltZTI1NnYxIiAqLworMzg1LAkvKiAicHJpdmF0ZSIgKi8KKzg0LAkvKiAicHJpdmF0ZUtleVVzYWdlUGVyaW9kIiAqLworODg2LAkvKiAicHJvdG9jb2xJbmZvcm1hdGlvbiIgKi8KKzY2MywJLyogInByb3h5Q2VydEluZm8iICovCis1MTAsCS8qICJwc2V1ZG9ueW0iICovCis0MzUsCS8qICJwc3MiICovCisyODYsCS8qICJxY1N0YXRlbWVudHMiICovCis0NTcsCS8qICJxdWFsaXR5TGFiZWxsZWREYXRhIiAqLworNDUwLAkvKiAickZDODIybG9jYWxQYXJ0IiAqLworODcwLAkvKiAicmVnaXN0ZXJlZEFkZHJlc3MiICovCis0MDAsCS8qICJyb2xlIiAqLworODc3LAkvKiAicm9sZU9jY3VwYW50IiAqLworNDQ4LAkvKiAicm9vbSIgKi8KKzQ2MywJLyogInJvb21OdW1iZXIiICovCisgNiwJLyogInJzYUVuY3J5cHRpb24iICovCis2NDQsCS8qICJyc2FPQUVQRW5jcnlwdGlvblNFVCIgKi8KKzM3NywJLyogInJzYVNpZ25hdHVyZSIgKi8KKyAxLAkvKiAicnNhZHNpIiAqLworNDgyLAkvKiAic09BUmVjb3JkIiAqLworMTU1LAkvKiAic2FmZUNvbnRlbnRzQmFnIiAqLworMjkxLAkvKiAic2JncC1hdXRvbm9tb3VzU3lzTnVtIiAqLworMjkwLAkvKiAic2JncC1pcEFkZHJCbG9jayIgKi8KKzI5MiwJLyogInNiZ3Atcm91dGVySWRlbnRpZmllciIgKi8KKzE1OSwJLyogInNkc2lDZXJ0aWZpY2F0ZSIgKi8KKzg1OSwJLyogInNlYXJjaEd1aWRlIiAqLworNzA0LAkvKiAic2VjcDExMnIxIiAqLworNzA1LAkvKiAic2VjcDExMnIyIiAqLworNzA2LAkvKiAic2VjcDEyOHIxIiAqLworNzA3LAkvKiAic2VjcDEyOHIyIiAqLworNzA4LAkvKiAic2VjcDE2MGsxIiAqLworNzA5LAkvKiAic2VjcDE2MHIxIiAqLworNzEwLAkvKiAic2VjcDE2MHIyIiAqLworNzExLAkvKiAic2VjcDE5MmsxIiAqLworNzEyLAkvKiAic2VjcDIyNGsxIiAqLworNzEzLAkvKiAic2VjcDIyNHIxIiAqLworNzE0LAkvKiAic2VjcDI1NmsxIiAqLworNzE1LAkvKiAic2VjcDM4NHIxIiAqLworNzE2LAkvKiAic2VjcDUyMXIxIiAqLworMTU0LAkvKiAic2VjcmV0QmFnIiAqLworNDc0LAkvKiAic2VjcmV0YXJ5IiAqLworNzE3LAkvKiAic2VjdDExM3IxIiAqLworNzE4LAkvKiAic2VjdDExM3IyIiAqLworNzE5LAkvKiAic2VjdDEzMXIxIiAqLworNzIwLAkvKiAic2VjdDEzMXIyIiAqLworNzIxLAkvKiAic2VjdDE2M2sxIiAqLworNzIyLAkvKiAic2VjdDE2M3IxIiAqLworNzIzLAkvKiAic2VjdDE2M3IyIiAqLworNzI0LAkvKiAic2VjdDE5M3IxIiAqLworNzI1LAkvKiAic2VjdDE5M3IyIiAqLworNzI2LAkvKiAic2VjdDIzM2sxIiAqLworNzI3LAkvKiAic2VjdDIzM3IxIiAqLworNzI4LAkvKiAic2VjdDIzOWsxIiAqLworNzI5LAkvKiAic2VjdDI4M2sxIiAqLworNzMwLAkvKiAic2VjdDI4M3IxIiAqLworNzMxLAkvKiAic2VjdDQwOWsxIiAqLworNzMyLAkvKiAic2VjdDQwOXIxIiAqLworNzMzLAkvKiAic2VjdDU3MWsxIiAqLworNzM0LAkvKiAic2VjdDU3MXIxIiAqLworMzg2LAkvKiAic2VjdXJpdHkiICovCis4NzgsCS8qICJzZWVBbHNvIiAqLworMzk0LAkvKiAic2VsZWN0ZWQtYXR0cmlidXRlLXR5cGVzIiAqLworMTA1LAkvKiAic2VyaWFsTnVtYmVyIiAqLworMTI5LAkvKiAic2VydmVyQXV0aCIgKi8KKzM3MSwJLyogInNlcnZpY2VMb2NhdG9yIiAqLworNjI1LAkvKiAic2V0LWFkZFBvbGljeSIgKi8KKzUxNSwJLyogInNldC1hdHRyIiAqLworNTE4LAkvKiAic2V0LWJyYW5kIiAqLworNjM4LAkvKiAic2V0LWJyYW5kLUFtZXJpY2FuRXhwcmVzcyIgKi8KKzYzNywJLyogInNldC1icmFuZC1EaW5lcnMiICovCis2MzYsCS8qICJzZXQtYnJhbmQtSUFUQS1BVEEiICovCis2MzksCS8qICJzZXQtYnJhbmQtSkNCIiAqLworNjQxLAkvKiAic2V0LWJyYW5kLU1hc3RlckNhcmQiICovCis2NDIsCS8qICJzZXQtYnJhbmQtTm92dXMiICovCis2NDAsCS8qICJzZXQtYnJhbmQtVmlzYSIgKi8KKzUxNywJLyogInNldC1jZXJ0RXh0IiAqLworNTEzLAkvKiAic2V0LWN0eXBlIiAqLworNTE0LAkvKiAic2V0LW1zZ0V4dCIgKi8KKzUxNiwJLyogInNldC1wb2xpY3kiICovCis2MDcsCS8qICJzZXQtcG9saWN5LXJvb3QiICovCis2MjQsCS8qICJzZXQtcm9vdEtleVRodW1iIiAqLworNjIwLAkvKiAic2V0QXR0ci1DZXJ0IiAqLworNjMxLAkvKiAic2V0QXR0ci1HZW5DcnlwdGdybSIgKi8KKzYyMywJLyogInNldEF0dHItSXNzQ2FwIiAqLworNjI4LAkvKiAic2V0QXR0ci1Jc3NDYXAtQ1ZNIiAqLworNjMwLAkvKiAic2V0QXR0ci1Jc3NDYXAtU2lnIiAqLworNjI5LAkvKiAic2V0QXR0ci1Jc3NDYXAtVDIiICovCis2MjEsCS8qICJzZXRBdHRyLVBHV1ljYXAiICovCis2MzUsCS8qICJzZXRBdHRyLVNlY0RldlNpZyIgKi8KKzYzMiwJLyogInNldEF0dHItVDJFbmMiICovCis2MzMsCS8qICJzZXRBdHRyLVQyY2xlYXJ0eHQiICovCis2MzQsCS8qICJzZXRBdHRyLVRva0lDQ3NpZyIgKi8KKzYyNywJLyogInNldEF0dHItVG9rZW4tQjBQcmltZSIgKi8KKzYyNiwJLyogInNldEF0dHItVG9rZW4tRU1WIiAqLworNjIyLAkvKiAic2V0QXR0ci1Ub2tlblR5cGUiICovCis2MTksCS8qICJzZXRDZXh0LUlzc3VlckNhcGFiaWxpdGllcyIgKi8KKzYxNSwJLyogInNldENleHQtUEdXWWNhcGFiaWxpdGllcyIgKi8KKzYxNiwJLyogInNldENleHQtVG9rZW5JZGVudGlmaWVyIiAqLworNjE4LAkvKiAic2V0Q2V4dC1Ub2tlblR5cGUiICovCis2MTcsCS8qICJzZXRDZXh0LVRyYWNrMkRhdGEiICovCis2MTEsCS8qICJzZXRDZXh0LWNDZXJ0UmVxdWlyZWQiICovCis2MDksCS8qICJzZXRDZXh0LWNlcnRUeXBlIiAqLworNjA4LAkvKiAic2V0Q2V4dC1oYXNoZWRSb290IiAqLworNjEwLAkvKiAic2V0Q2V4dC1tZXJjaERhdGEiICovCis2MTMsCS8qICJzZXRDZXh0LXNldEV4dCIgKi8KKzYxNCwJLyogInNldENleHQtc2V0UXVhbGYiICovCis2MTIsCS8qICJzZXRDZXh0LXR1bm5lbGluZyIgKi8KKzU0MCwJLyogInNldGN0LUFjcUNhcmRDb2RlTXNnIiAqLworNTc2LAkvKiAic2V0Y3QtQWNxQ2FyZENvZGVNc2dUQkUiICovCis1NzAsCS8qICJzZXRjdC1BdXRoUmVxVEJFIiAqLworNTM0LAkvKiAic2V0Y3QtQXV0aFJlcVRCUyIgKi8KKzUyNywJLyogInNldGN0LUF1dGhSZXNCYWdnYWdlIiAqLworNTcxLAkvKiAic2V0Y3QtQXV0aFJlc1RCRSIgKi8KKzU3MiwJLyogInNldGN0LUF1dGhSZXNUQkVYIiAqLworNTM1LAkvKiAic2V0Y3QtQXV0aFJlc1RCUyIgKi8KKzUzNiwJLyogInNldGN0LUF1dGhSZXNUQlNYIiAqLworNTI4LAkvKiAic2V0Y3QtQXV0aFJldlJlcUJhZ2dhZ2UiICovCis1NzcsCS8qICJzZXRjdC1BdXRoUmV2UmVxVEJFIiAqLworNTQxLAkvKiAic2V0Y3QtQXV0aFJldlJlcVRCUyIgKi8KKzUyOSwJLyogInNldGN0LUF1dGhSZXZSZXNCYWdnYWdlIiAqLworNTQyLAkvKiAic2V0Y3QtQXV0aFJldlJlc0RhdGEiICovCis1NzgsCS8qICJzZXRjdC1BdXRoUmV2UmVzVEJFIiAqLworNTc5LAkvKiAic2V0Y3QtQXV0aFJldlJlc1RCRUIiICovCis1NDMsCS8qICJzZXRjdC1BdXRoUmV2UmVzVEJTIiAqLworNTczLAkvKiAic2V0Y3QtQXV0aFRva2VuVEJFIiAqLworNTM3LAkvKiAic2V0Y3QtQXV0aFRva2VuVEJTIiAqLworNjAwLAkvKiAic2V0Y3QtQkNJRGlzdHJpYnV0aW9uVEJTIiAqLworNTU4LAkvKiAic2V0Y3QtQmF0Y2hBZG1pblJlcURhdGEiICovCis1OTIsCS8qICJzZXRjdC1CYXRjaEFkbWluUmVxVEJFIiAqLworNTU5LAkvKiAic2V0Y3QtQmF0Y2hBZG1pblJlc0RhdGEiICovCis1OTMsCS8qICJzZXRjdC1CYXRjaEFkbWluUmVzVEJFIiAqLworNTk5LAkvKiAic2V0Y3QtQ1JMTm90aWZpY2F0aW9uUmVzVEJTIiAqLworNTk4LAkvKiAic2V0Y3QtQ1JMTm90aWZpY2F0aW9uVEJTIiAqLworNTgwLAkvKiAic2V0Y3QtQ2FwUmVxVEJFIiAqLworNTgxLAkvKiAic2V0Y3QtQ2FwUmVxVEJFWCIgKi8KKzU0NCwJLyogInNldGN0LUNhcFJlcVRCUyIgKi8KKzU0NSwJLyogInNldGN0LUNhcFJlcVRCU1giICovCis1NDYsCS8qICJzZXRjdC1DYXBSZXNEYXRhIiAqLworNTgyLAkvKiAic2V0Y3QtQ2FwUmVzVEJFIiAqLworNTgzLAkvKiAic2V0Y3QtQ2FwUmV2UmVxVEJFIiAqLworNTg0LAkvKiAic2V0Y3QtQ2FwUmV2UmVxVEJFWCIgKi8KKzU0NywJLyogInNldGN0LUNhcFJldlJlcVRCUyIgKi8KKzU0OCwJLyogInNldGN0LUNhcFJldlJlcVRCU1giICovCis1NDksCS8qICJzZXRjdC1DYXBSZXZSZXNEYXRhIiAqLworNTg1LAkvKiAic2V0Y3QtQ2FwUmV2UmVzVEJFIiAqLworNTM4LAkvKiAic2V0Y3QtQ2FwVG9rZW5EYXRhIiAqLworNTMwLAkvKiAic2V0Y3QtQ2FwVG9rZW5TZXEiICovCis1NzQsCS8qICJzZXRjdC1DYXBUb2tlblRCRSIgKi8KKzU3NSwJLyogInNldGN0LUNhcFRva2VuVEJFWCIgKi8KKzUzOSwJLyogInNldGN0LUNhcFRva2VuVEJTIiAqLworNTYwLAkvKiAic2V0Y3QtQ2FyZENJbml0UmVzVEJTIiAqLworNTY2LAkvKiAic2V0Y3QtQ2VydElucVJlcVRCUyIgKi8KKzU2MywJLyogInNldGN0LUNlcnRSZXFEYXRhIiAqLworNTk1LAkvKiAic2V0Y3QtQ2VydFJlcVRCRSIgKi8KKzU5NiwJLyogInNldGN0LUNlcnRSZXFUQkVYIiAqLworNTY0LAkvKiAic2V0Y3QtQ2VydFJlcVRCUyIgKi8KKzU2NSwJLyogInNldGN0LUNlcnRSZXNEYXRhIiAqLworNTk3LAkvKiAic2V0Y3QtQ2VydFJlc1RCRSIgKi8KKzU4NiwJLyogInNldGN0LUNyZWRSZXFUQkUiICovCis1ODcsCS8qICJzZXRjdC1DcmVkUmVxVEJFWCIgKi8KKzU1MCwJLyogInNldGN0LUNyZWRSZXFUQlMiICovCis1NTEsCS8qICJzZXRjdC1DcmVkUmVxVEJTWCIgKi8KKzU1MiwJLyogInNldGN0LUNyZWRSZXNEYXRhIiAqLworNTg4LAkvKiAic2V0Y3QtQ3JlZFJlc1RCRSIgKi8KKzU4OSwJLyogInNldGN0LUNyZWRSZXZSZXFUQkUiICovCis1OTAsCS8qICJzZXRjdC1DcmVkUmV2UmVxVEJFWCIgKi8KKzU1MywJLyogInNldGN0LUNyZWRSZXZSZXFUQlMiICovCis1NTQsCS8qICJzZXRjdC1DcmVkUmV2UmVxVEJTWCIgKi8KKzU1NSwJLyogInNldGN0LUNyZWRSZXZSZXNEYXRhIiAqLworNTkxLAkvKiAic2V0Y3QtQ3JlZFJldlJlc1RCRSIgKi8KKzU2NywJLyogInNldGN0LUVycm9yVEJTIiAqLworNTI2LAkvKiAic2V0Y3QtSE9ESW5wdXQiICovCis1NjEsCS8qICJzZXRjdC1NZUFxQ0luaXRSZXNUQlMiICovCis1MjIsCS8qICJzZXRjdC1PSURhdGEiICovCis1MTksCS8qICJzZXRjdC1QQU5EYXRhIiAqLworNTIxLAkvKiAic2V0Y3QtUEFOT25seSIgKi8KKzUyMCwJLyogInNldGN0LVBBTlRva2VuIiAqLworNTU2LAkvKiAic2V0Y3QtUENlcnRSZXFEYXRhIiAqLworNTU3LAkvKiAic2V0Y3QtUENlcnRSZXNUQlMiICovCis1MjMsCS8qICJzZXRjdC1QSSIgKi8KKzUzMiwJLyogInNldGN0LVBJLVRCUyIgKi8KKzUyNCwJLyogInNldGN0LVBJRGF0YSIgKi8KKzUyNSwJLyogInNldGN0LVBJRGF0YVVuc2lnbmVkIiAqLworNTY4LAkvKiAic2V0Y3QtUElEdWFsU2lnbmVkVEJFIiAqLworNTY5LAkvKiAic2V0Y3QtUElVbnNpZ25lZFRCRSIgKi8KKzUzMSwJLyogInNldGN0LVBJbml0UmVzRGF0YSIgKi8KKzUzMywJLyogInNldGN0LVBSZXNEYXRhIiAqLworNTk0LAkvKiAic2V0Y3QtUmVnRm9ybVJlcVRCRSIgKi8KKzU2MiwJLyogInNldGN0LVJlZ0Zvcm1SZXNUQlMiICovCis2MDYsCS8qICJzZXRleHQtY3YiICovCis2MDEsCS8qICJzZXRleHQtZ2VuQ3J5cHQiICovCis2MDIsCS8qICJzZXRleHQtbWlBdXRoIiAqLworNjA0LAkvKiAic2V0ZXh0LXBpbkFueSIgKi8KKzYwMywJLyogInNldGV4dC1waW5TZWN1cmUiICovCis2MDUsCS8qICJzZXRleHQtdHJhY2syIiAqLworNTIsCS8qICJzaWduaW5nVGltZSIgKi8KKzQ1NCwJLyogInNpbXBsZVNlY3VyaXR5T2JqZWN0IiAqLworNDk2LAkvKiAic2luZ2xlTGV2ZWxRdWFsaXR5IiAqLworMzg3LAkvKiAic25tcHYyIiAqLworNjYwLAkvKiAic3RyZWV0IiAqLworODUsCS8qICJzdWJqZWN0QWx0TmFtZSIgKi8KKzc2OSwJLyogInN1YmplY3REaXJlY3RvcnlBdHRyaWJ1dGVzIiAqLworMzk4LAkvKiAic3ViamVjdEluZm9BY2Nlc3MiICovCis4MiwJLyogInN1YmplY3RLZXlJZGVudGlmaWVyIiAqLworNDk4LAkvKiAic3VidHJlZU1heGltdW1RdWFsaXR5IiAqLworNDk3LAkvKiAic3VidHJlZU1pbmltdW1RdWFsaXR5IiAqLworODkwLAkvKiAic3VwcG9ydGVkQWxnb3JpdGhtcyIgKi8KKzg3NCwJLyogInN1cHBvcnRlZEFwcGxpY2F0aW9uQ29udGV4dCIgKi8KKzQwMiwJLyogInRhcmdldEluZm9ybWF0aW9uIiAqLworODY0LAkvKiAidGVsZXBob25lTnVtYmVyIiAqLworODY2LAkvKiAidGVsZXRleFRlcm1pbmFsSWRlbnRpZmllciIgKi8KKzg2NSwJLyogInRlbGV4TnVtYmVyIiAqLworNDU5LAkvKiAidGV4dEVuY29kZWRPUkFkZHJlc3MiICovCisyOTMsCS8qICJ0ZXh0Tm90aWNlIiAqLworMTMzLAkvKiAidGltZVN0YW1waW5nIiAqLworMTA2LAkvKiAidGl0bGUiICovCis2ODIsCS8qICJ0cEJhc2lzIiAqLworMzc1LAkvKiAidHJ1c3RSb290IiAqLworNDM2LAkvKiAidWNsIiAqLworODg4LAkvKiAidW5pcXVlTWVtYmVyIiAqLworNTUsCS8qICJ1bnN0cnVjdHVyZWRBZGRyZXNzIiAqLworNDksCS8qICJ1bnN0cnVjdHVyZWROYW1lIiAqLworODgwLAkvKiAidXNlckNlcnRpZmljYXRlIiAqLworNDY1LAkvKiAidXNlckNsYXNzIiAqLworODc5LAkvKiAidXNlclBhc3N3b3JkIiAqLworMzczLAkvKiAidmFsaWQiICovCis2NzgsCS8qICJ3YXAiICovCis2NzksCS8qICJ3YXAtd3NnIiAqLworNzM1LAkvKiAid2FwLXdzZy1pZG0tZWNpZC13dGxzMSIgKi8KKzc0MywJLyogIndhcC13c2ctaWRtLWVjaWQtd3RsczEwIiAqLworNzQ0LAkvKiAid2FwLXdzZy1pZG0tZWNpZC13dGxzMTEiICovCis3NDUsCS8qICJ3YXAtd3NnLWlkbS1lY2lkLXd0bHMxMiIgKi8KKzczNiwJLyogIndhcC13c2ctaWRtLWVjaWQtd3RsczMiICovCis3MzcsCS8qICJ3YXAtd3NnLWlkbS1lY2lkLXd0bHM0IiAqLworNzM4LAkvKiAid2FwLXdzZy1pZG0tZWNpZC13dGxzNSIgKi8KKzczOSwJLyogIndhcC13c2ctaWRtLWVjaWQtd3RsczYiICovCis3NDAsCS8qICJ3YXAtd3NnLWlkbS1lY2lkLXd0bHM3IiAqLworNzQxLAkvKiAid2FwLXdzZy1pZG0tZWNpZC13dGxzOCIgKi8KKzc0MiwJLyogIndhcC13c2ctaWRtLWVjaWQtd3RsczkiICovCis4MDQsCS8qICJ3aGlybHBvb2wiICovCis4NjgsCS8qICJ4MTIxQWRkcmVzcyIgKi8KKzUwMywJLyogIng1MDBVbmlxdWVJZGVudGlmaWVyIiAqLworMTU4LAkvKiAieDUwOUNlcnRpZmljYXRlIiAqLworMTYwLAkvKiAieDUwOUNybCIgKi8KIH07CiAKLXN0YXRpYyBBU04xX09CSkVDVCAqbG5fb2Jqc1tOVU1fTE5dPXsKLSYobmlkX29ianNbMzYzXSksLyogIkFEIFRpbWUgU3RhbXBpbmciICovCi0mKG5pZF9vYmpzWzQwNV0pLC8qICJBTlNJIFg5LjYyIiAqLwotJihuaWRfb2Jqc1szNjhdKSwvKiAiQWNjZXB0YWJsZSBPQ1NQIFJlc3BvbnNlcyIgKi8KLSYobmlkX29ianNbNjY0XSksLyogIkFueSBsYW5ndWFnZSIgKi8KLSYobmlkX29ianNbMTc3XSksLyogIkF1dGhvcml0eSBJbmZvcm1hdGlvbiBBY2Nlc3MiICovCi0mKG5pZF9vYmpzWzM2NV0pLC8qICJCYXNpYyBPQ1NQIFJlc3BvbnNlIiAqLwotJihuaWRfb2Jqc1syODVdKSwvKiAiQmlvbWV0cmljIEluZm8iICovCi0mKG5pZF9vYmpzWzE3OV0pLC8qICJDQSBJc3N1ZXJzIiAqLwotJihuaWRfb2Jqc1s3ODVdKSwvKiAiQ0EgUmVwb3NpdG9yeSIgKi8KLSYobmlkX29ianNbMTMxXSksLyogIkNvZGUgU2lnbmluZyIgKi8KLSYobmlkX29ianNbNzgzXSksLyogIkRpZmZpZS1IZWxsbWFuIGJhc2VkIE1BQyIgKi8KLSYobmlkX29ianNbMzgyXSksLyogIkRpcmVjdG9yeSIgKi8KLSYobmlkX29ianNbMzkyXSksLyogIkRvbWFpbiIgKi8KLSYobmlkX29ianNbMTMyXSksLyogIkUtbWFpbCBQcm90ZWN0aW9uIiAqLwotJihuaWRfb2Jqc1szODldKSwvKiAiRW50ZXJwcmlzZXMiICovCi0mKG5pZF9vYmpzWzM4NF0pLC8qICJFeHBlcmltZW50YWwiICovCi0mKG5pZF9vYmpzWzM3Ml0pLC8qICJFeHRlbmRlZCBPQ1NQIFN0YXR1cyIgKi8KLSYobmlkX29ianNbMTcyXSksLyogIkV4dGVuc2lvbiBSZXF1ZXN0IiAqLwotJihuaWRfb2Jqc1s4MTNdKSwvKiAiR09TVCAyODE0Ny04OSIgKi8KLSYobmlkX29ianNbODQ5XSksLyogIkdPU1QgMjgxNDctODkgQ3J5cHRvY29tIFBhcmFtU2V0IiAqLwotJihuaWRfb2Jqc1s4MTVdKSwvKiAiR09TVCAyODE0Ny04OSBNQUMiICovCi0mKG5pZF9vYmpzWzg1MV0pLC8qICJHT1NUIDM0LjEwLTIwMDEgQ3J5cHRvY29tIiAqLwotJihuaWRfb2Jqc1s4NTBdKSwvKiAiR09TVCAzNC4xMC05NCBDcnlwdG9jb20iICovCi0mKG5pZF9vYmpzWzgxMV0pLC8qICJHT1NUIFIgMzQuMTAtMjAwMSIgKi8KLSYobmlkX29ianNbODE3XSksLyogIkdPU1QgUiAzNC4xMC0yMDAxIERIIiAqLwotJihuaWRfb2Jqc1s4MTJdKSwvKiAiR09TVCBSIDM0LjEwLTk0IiAqLwotJihuaWRfb2Jqc1s4MThdKSwvKiAiR09TVCBSIDM0LjEwLTk0IERIIiAqLwotJihuaWRfb2Jqc1s4MDldKSwvKiAiR09TVCBSIDM0LjExLTk0IiAqLwotJihuaWRfb2Jqc1s4MTZdKSwvKiAiR09TVCBSIDM0LjExLTk0IFBSRiIgKi8KLSYobmlkX29ianNbODA3XSksLyogIkdPU1QgUiAzNC4xMS05NCB3aXRoIEdPU1QgUiAzNC4xMC0yMDAxIiAqLwotJihuaWRfb2Jqc1s4NTNdKSwvKiAiR09TVCBSIDM0LjExLTk0IHdpdGggR09TVCBSIDM0LjEwLTIwMDEgQ3J5cHRvY29tIiAqLwotJihuaWRfb2Jqc1s4MDhdKSwvKiAiR09TVCBSIDM0LjExLTk0IHdpdGggR09TVCBSIDM0LjEwLTk0IiAqLwotJihuaWRfb2Jqc1s4NTJdKSwvKiAiR09TVCBSIDM0LjExLTk0IHdpdGggR09TVCBSIDM0LjEwLTk0IENyeXB0b2NvbSIgKi8KLSYobmlkX29ianNbODU0XSksLyogIkdPU1QgUiAzNDEwLTIwMDEgUGFyYW1ldGVyIFNldCBDcnlwdG9jb20iICovCi0mKG5pZF9vYmpzWzgxMF0pLC8qICJITUFDIEdPU1QgMzQuMTEtOTQiICovCi0mKG5pZF9vYmpzWzQzMl0pLC8qICJIb2xkIEluc3RydWN0aW9uIENhbGwgSXNzdWVyIiAqLwotJihuaWRfb2Jqc1s0MzBdKSwvKiAiSG9sZCBJbnN0cnVjdGlvbiBDb2RlIiAqLwotJihuaWRfb2Jqc1s0MzFdKSwvKiAiSG9sZCBJbnN0cnVjdGlvbiBOb25lIiAqLwotJihuaWRfb2Jqc1s0MzNdKSwvKiAiSG9sZCBJbnN0cnVjdGlvbiBSZWplY3QiICovCi0mKG5pZF9vYmpzWzYzNF0pLC8qICJJQ0Mgb3IgdG9rZW4gc2lnbmF0dXJlIiAqLwotJihuaWRfb2Jqc1syOTRdKSwvKiAiSVBTZWMgRW5kIFN5c3RlbSIgKi8KLSYobmlkX29ianNbMjk1XSksLyogIklQU2VjIFR1bm5lbCIgKi8KLSYobmlkX29ianNbMjk2XSksLyogIklQU2VjIFVzZXIiICovCi0mKG5pZF9vYmpzWzE4Ml0pLC8qICJJU08gTWVtYmVyIEJvZHkiICovCi0mKG5pZF9vYmpzWzE4M10pLC8qICJJU08gVVMgTWVtYmVyIEJvZHkiICovCi0mKG5pZF9vYmpzWzY2N10pLC8qICJJbmRlcGVuZGVudCIgKi8KLSYobmlkX29ianNbNjY1XSksLyogIkluaGVyaXQgYWxsIiAqLwotJihuaWRfb2Jqc1s2NDddKSwvKiAiSW50ZXJuYXRpb25hbCBPcmdhbml6YXRpb25zIiAqLwotJihuaWRfb2Jqc1sxNDJdKSwvKiAiSW52YWxpZGl0eSBEYXRlIiAqLwotJihuaWRfb2Jqc1s1MDRdKSwvKiAiTUlNRSBNSFMiICovCi0mKG5pZF9vYmpzWzM4OF0pLC8qICJNYWlsIiAqLwotJihuaWRfb2Jqc1szODNdKSwvKiAiTWFuYWdlbWVudCIgKi8KLSYobmlkX29ianNbNDE3XSksLyogIk1pY3Jvc29mdCBDU1AgTmFtZSIgKi8KLSYobmlkX29ianNbMTM1XSksLyogIk1pY3Jvc29mdCBDb21tZXJjaWFsIENvZGUgU2lnbmluZyIgKi8KLSYobmlkX29ianNbMTM4XSksLyogIk1pY3Jvc29mdCBFbmNyeXB0ZWQgRmlsZSBTeXN0ZW0iICovCi0mKG5pZF9vYmpzWzE3MV0pLC8qICJNaWNyb3NvZnQgRXh0ZW5zaW9uIFJlcXVlc3QiICovCi0mKG5pZF9vYmpzWzEzNF0pLC8qICJNaWNyb3NvZnQgSW5kaXZpZHVhbCBDb2RlIFNpZ25pbmciICovCi0mKG5pZF9vYmpzWzg1Nl0pLC8qICJNaWNyb3NvZnQgTG9jYWwgS2V5IHNldCIgKi8KLSYobmlkX29ianNbMTM3XSksLyogIk1pY3Jvc29mdCBTZXJ2ZXIgR2F0ZWQgQ3J5cHRvIiAqLwotJihuaWRfb2Jqc1s2NDhdKSwvKiAiTWljcm9zb2Z0IFNtYXJ0Y2FyZGxvZ2luIiAqLwotJihuaWRfb2Jqc1sxMzZdKSwvKiAiTWljcm9zb2Z0IFRydXN0IExpc3QgU2lnbmluZyIgKi8KLSYobmlkX29ianNbNjQ5XSksLyogIk1pY3Jvc29mdCBVbml2ZXJzYWwgUHJpbmNpcGFsIE5hbWUiICovCi0mKG5pZF9vYmpzWzM5M10pLC8qICJOVUxMIiAqLwotJihuaWRfb2Jqc1s0MDRdKSwvKiAiTlVMTCIgKi8KLSYobmlkX29ianNbNzJdKSwvKiAiTmV0c2NhcGUgQmFzZSBVcmwiICovCi0mKG5pZF9vYmpzWzc2XSksLyogIk5ldHNjYXBlIENBIFBvbGljeSBVcmwiICovCi0mKG5pZF9vYmpzWzc0XSksLyogIk5ldHNjYXBlIENBIFJldm9jYXRpb24gVXJsIiAqLwotJihuaWRfb2Jqc1s3MV0pLC8qICJOZXRzY2FwZSBDZXJ0IFR5cGUiICovCi0mKG5pZF9vYmpzWzU4XSksLyogIk5ldHNjYXBlIENlcnRpZmljYXRlIEV4dGVuc2lvbiIgKi8KLSYobmlkX29ianNbNzldKSwvKiAiTmV0c2NhcGUgQ2VydGlmaWNhdGUgU2VxdWVuY2UiICovCi0mKG5pZF9vYmpzWzc4XSksLyogIk5ldHNjYXBlIENvbW1lbnQiICovCi0mKG5pZF9vYmpzWzU3XSksLyogIk5ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnAuIiAqLwotJihuaWRfb2Jqc1s1OV0pLC8qICJOZXRzY2FwZSBEYXRhIFR5cGUiICovCi0mKG5pZF9vYmpzWzc1XSksLyogIk5ldHNjYXBlIFJlbmV3YWwgVXJsIiAqLwotJihuaWRfb2Jqc1s3M10pLC8qICJOZXRzY2FwZSBSZXZvY2F0aW9uIFVybCIgKi8KLSYobmlkX29ianNbNzddKSwvKiAiTmV0c2NhcGUgU1NMIFNlcnZlciBOYW1lIiAqLwotJihuaWRfb2Jqc1sxMzldKSwvKiAiTmV0c2NhcGUgU2VydmVyIEdhdGVkIENyeXB0byIgKi8KLSYobmlkX29ianNbMTc4XSksLyogIk9DU1AiICovCi0mKG5pZF9vYmpzWzM3MF0pLC8qICJPQ1NQIEFyY2hpdmUgQ3V0b2ZmIiAqLwotJihuaWRfb2Jqc1szNjddKSwvKiAiT0NTUCBDUkwgSUQiICovCi0mKG5pZF9vYmpzWzM2OV0pLC8qICJPQ1NQIE5vIENoZWNrIiAqLwotJihuaWRfb2Jqc1szNjZdKSwvKiAiT0NTUCBOb25jZSIgKi8KLSYobmlkX29ianNbMzcxXSksLyogIk9DU1AgU2VydmljZSBMb2NhdG9yIiAqLwotJihuaWRfb2Jqc1sxODBdKSwvKiAiT0NTUCBTaWduaW5nIiAqLwotJihuaWRfb2Jqc1sxNjFdKSwvKiAiUEJFUzIiICovCi0mKG5pZF9vYmpzWzY5XSksLyogIlBCS0RGMiIgKi8KLSYobmlkX29ianNbMTYyXSksLyogIlBCTUFDMSIgKi8KLSYobmlkX29ianNbMTI3XSksLyogIlBLSVgiICovCi0mKG5pZF9vYmpzWzg1OF0pLC8qICJQZXJtYW5lbnQgSWRlbnRpZmllciIgKi8KLSYobmlkX29ianNbMTY0XSksLyogIlBvbGljeSBRdWFsaWZpZXIgQ1BTIiAqLwotJihuaWRfb2Jqc1sxNjVdKSwvKiAiUG9saWN5IFF1YWxpZmllciBVc2VyIE5vdGljZSIgKi8KLSYobmlkX29ianNbMzg1XSksLyogIlByaXZhdGUiICovCi0mKG5pZF9vYmpzWzY2M10pLC8qICJQcm94eSBDZXJ0aWZpY2F0ZSBJbmZvcm1hdGlvbiIgKi8KLSYobmlkX29ianNbIDFdKSwvKiAiUlNBIERhdGEgU2VjdXJpdHksIEluYy4iICovCi0mKG5pZF9vYmpzWyAyXSksLyogIlJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuIFBLQ1MiICovCi0mKG5pZF9vYmpzWzE4OF0pLC8qICJTL01JTUUiICovCi0mKG5pZF9vYmpzWzE2N10pLC8qICJTL01JTUUgQ2FwYWJpbGl0aWVzIiAqLwotJihuaWRfb2Jqc1szODddKSwvKiAiU05NUHYyIiAqLwotJihuaWRfb2Jqc1s1MTJdKSwvKiAiU2VjdXJlIEVsZWN0cm9uaWMgVHJhbnNhY3Rpb25zIiAqLwotJihuaWRfb2Jqc1szODZdKSwvKiAiU2VjdXJpdHkiICovCi0mKG5pZF9vYmpzWzM5NF0pLC8qICJTZWxlY3RlZCBBdHRyaWJ1dGUgVHlwZXMiICovCi0mKG5pZF9vYmpzWzE0M10pLC8qICJTdHJvbmcgRXh0cmFuZXQgSUQiICovCi0mKG5pZF9vYmpzWzM5OF0pLC8qICJTdWJqZWN0IEluZm9ybWF0aW9uIEFjY2VzcyIgKi8KLSYobmlkX29ianNbMTMwXSksLyogIlRMUyBXZWIgQ2xpZW50IEF1dGhlbnRpY2F0aW9uIiAqLwotJihuaWRfb2Jqc1sxMjldKSwvKiAiVExTIFdlYiBTZXJ2ZXIgQXV0aGVudGljYXRpb24iICovCi0mKG5pZF9vYmpzWzEzM10pLC8qICJUaW1lIFN0YW1waW5nIiAqLwotJihuaWRfb2Jqc1szNzVdKSwvKiAiVHJ1c3QgUm9vdCIgKi8KLSYobmlkX29ianNbMTJdKSwvKiAiWDUwOSIgKi8KLSYobmlkX29ianNbNDAyXSksLyogIlg1MDl2MyBBQyBUYXJnZXRpbmciICovCi0mKG5pZF9vYmpzWzc0Nl0pLC8qICJYNTA5djMgQW55IFBvbGljeSIgKi8KLSYobmlkX29ianNbOTBdKSwvKiAiWDUwOXYzIEF1dGhvcml0eSBLZXkgSWRlbnRpZmllciIgKi8KLSYobmlkX29ianNbODddKSwvKiAiWDUwOXYzIEJhc2ljIENvbnN0cmFpbnRzIiAqLwotJihuaWRfb2Jqc1sxMDNdKSwvKiAiWDUwOXYzIENSTCBEaXN0cmlidXRpb24gUG9pbnRzIiAqLwotJihuaWRfb2Jqc1s4OF0pLC8qICJYNTA5djMgQ1JMIE51bWJlciIgKi8KLSYobmlkX29ianNbMTQxXSksLyogIlg1MDl2MyBDUkwgUmVhc29uIENvZGUiICovCi0mKG5pZF9vYmpzWzc3MV0pLC8qICJYNTA5djMgQ2VydGlmaWNhdGUgSXNzdWVyIiAqLwotJihuaWRfb2Jqc1s4OV0pLC8qICJYNTA5djMgQ2VydGlmaWNhdGUgUG9saWNpZXMiICovCi0mKG5pZF9vYmpzWzE0MF0pLC8qICJYNTA5djMgRGVsdGEgQ1JMIEluZGljYXRvciIgKi8KLSYobmlkX29ianNbMTI2XSksLyogIlg1MDl2MyBFeHRlbmRlZCBLZXkgVXNhZ2UiICovCi0mKG5pZF9vYmpzWzg1N10pLC8qICJYNTA5djMgRnJlc2hlc3QgQ1JMIiAqLwotJihuaWRfb2Jqc1s3NDhdKSwvKiAiWDUwOXYzIEluaGliaXQgQW55IFBvbGljeSIgKi8KLSYobmlkX29ianNbODZdKSwvKiAiWDUwOXYzIElzc3VlciBBbHRlcm5hdGl2ZSBOYW1lIiAqLwotJihuaWRfb2Jqc1s3NzBdKSwvKiAiWDUwOXYzIElzc3VpbmcgRGlzdHJ1YnV0aW9uIFBvaW50IiAqLwotJihuaWRfb2Jqc1s4M10pLC8qICJYNTA5djMgS2V5IFVzYWdlIiAqLwotJihuaWRfb2Jqc1s2NjZdKSwvKiAiWDUwOXYzIE5hbWUgQ29uc3RyYWludHMiICovCi0mKG5pZF9vYmpzWzQwM10pLC8qICJYNTA5djMgTm8gUmV2b2NhdGlvbiBBdmFpbGFibGUiICovCi0mKG5pZF9vYmpzWzQwMV0pLC8qICJYNTA5djMgUG9saWN5IENvbnN0cmFpbnRzIiAqLwotJihuaWRfb2Jqc1s3NDddKSwvKiAiWDUwOXYzIFBvbGljeSBNYXBwaW5ncyIgKi8KLSYobmlkX29ianNbODRdKSwvKiAiWDUwOXYzIFByaXZhdGUgS2V5IFVzYWdlIFBlcmlvZCIgKi8KLSYobmlkX29ianNbODVdKSwvKiAiWDUwOXYzIFN1YmplY3QgQWx0ZXJuYXRpdmUgTmFtZSIgKi8KLSYobmlkX29ianNbNzY5XSksLyogIlg1MDl2MyBTdWJqZWN0IERpcmVjdG9yeSBBdHRyaWJ1dGVzIiAqLwotJihuaWRfb2Jqc1s4Ml0pLC8qICJYNTA5djMgU3ViamVjdCBLZXkgSWRlbnRpZmllciIgKi8KLSYobmlkX29ianNbMTg0XSksLyogIlg5LjU3IiAqLwotJihuaWRfb2Jqc1sxODVdKSwvKiAiWDkuNTcgQ00gPyIgKi8KLSYobmlkX29ianNbNDc4XSksLyogImFSZWNvcmQiICovCi0mKG5pZF9vYmpzWzI4OV0pLC8qICJhYUNvbnRyb2xzIiAqLwotJihuaWRfb2Jqc1syODddKSwvKiAiYWMtYXVkaXRFbnRpdHkiICovCi0mKG5pZF9vYmpzWzM5N10pLC8qICJhYy1wcm94eWluZyIgKi8KLSYobmlkX29ianNbMjg4XSksLyogImFjLXRhcmdldGluZyIgKi8KLSYobmlkX29ianNbNDQ2XSksLyogImFjY291bnQiICovCi0mKG5pZF9vYmpzWzM2NF0pLC8qICJhZCBkdmNzIiAqLwotJihuaWRfb2Jqc1s2MDZdKSwvKiAiYWRkaXRpb25hbCB2ZXJpZmljYXRpb24iICovCi0mKG5pZF9vYmpzWzQxOV0pLC8qICJhZXMtMTI4LWNiYyIgKi8KLSYobmlkX29ianNbNDIxXSksLyogImFlcy0xMjgtY2ZiIiAqLwotJihuaWRfb2Jqc1s2NTBdKSwvKiAiYWVzLTEyOC1jZmIxIiAqLwotJihuaWRfb2Jqc1s2NTNdKSwvKiAiYWVzLTEyOC1jZmI4IiAqLwotJihuaWRfb2Jqc1s0MThdKSwvKiAiYWVzLTEyOC1lY2IiICovCi0mKG5pZF9vYmpzWzQyMF0pLC8qICJhZXMtMTI4LW9mYiIgKi8KLSYobmlkX29ianNbNDIzXSksLyogImFlcy0xOTItY2JjIiAqLwotJihuaWRfb2Jqc1s0MjVdKSwvKiAiYWVzLTE5Mi1jZmIiICovCi0mKG5pZF9vYmpzWzY1MV0pLC8qICJhZXMtMTkyLWNmYjEiICovCi0mKG5pZF9vYmpzWzY1NF0pLC8qICJhZXMtMTkyLWNmYjgiICovCi0mKG5pZF9vYmpzWzQyMl0pLC8qICJhZXMtMTkyLWVjYiIgKi8KLSYobmlkX29ianNbNDI0XSksLyogImFlcy0xOTItb2ZiIiAqLwotJihuaWRfb2Jqc1s0MjddKSwvKiAiYWVzLTI1Ni1jYmMiICovCi0mKG5pZF9vYmpzWzQyOV0pLC8qICJhZXMtMjU2LWNmYiIgKi8KLSYobmlkX29ianNbNjUyXSksLyogImFlcy0yNTYtY2ZiMSIgKi8KLSYobmlkX29ianNbNjU1XSksLyogImFlcy0yNTYtY2ZiOCIgKi8KLSYobmlkX29ianNbNDI2XSksLyogImFlcy0yNTYtZWNiIiAqLwotJihuaWRfb2Jqc1s0MjhdKSwvKiAiYWVzLTI1Ni1vZmIiICovCi0mKG5pZF9vYmpzWzM3Nl0pLC8qICJhbGdvcml0aG0iICovCi0mKG5pZF9vYmpzWzQ4NF0pLC8qICJhc3NvY2lhdGVkRG9tYWluIiAqLwotJihuaWRfb2Jqc1s0ODVdKSwvKiAiYXNzb2NpYXRlZE5hbWUiICovCi0mKG5pZF9vYmpzWzUwMV0pLC8qICJhdWRpbyIgKi8KLSYobmlkX29ianNbODgyXSksLyogImF1dGhvcml0eVJldm9jYXRpb25MaXN0IiAqLwotJihuaWRfb2Jqc1s5MV0pLC8qICJiZi1jYmMiICovCi0mKG5pZF9vYmpzWzkzXSksLyogImJmLWNmYiIgKi8KLSYobmlkX29ianNbOTJdKSwvKiAiYmYtZWNiIiAqLwotJihuaWRfb2Jqc1s5NF0pLC8qICJiZi1vZmIiICovCi0mKG5pZF9vYmpzWzQ5NF0pLC8qICJidWlsZGluZ05hbWUiICovCi0mKG5pZF9vYmpzWzg2MF0pLC8qICJidXNpbmVzc0NhdGVnb3J5IiAqLwotJihuaWRfb2Jqc1s2OTFdKSwvKiAiYzJvbmIxOTF2NCIgKi8KLSYobmlkX29ianNbNjkyXSksLyogImMyb25iMTkxdjUiICovCi0mKG5pZF9vYmpzWzY5N10pLC8qICJjMm9uYjIzOXY0IiAqLwotJihuaWRfb2Jqc1s2OThdKSwvKiAiYzJvbmIyMzl2NSIgKi8KLSYobmlkX29ianNbNjg0XSksLyogImMycG5iMTYzdjEiICovCi0mKG5pZF9vYmpzWzY4NV0pLC8qICJjMnBuYjE2M3YyIiAqLwotJihuaWRfb2Jqc1s2ODZdKSwvKiAiYzJwbmIxNjN2MyIgKi8KLSYobmlkX29ianNbNjg3XSksLyogImMycG5iMTc2djEiICovCi0mKG5pZF9vYmpzWzY5M10pLC8qICJjMnBuYjIwOHcxIiAqLwotJihuaWRfb2Jqc1s2OTldKSwvKiAiYzJwbmIyNzJ3MSIgKi8KLSYobmlkX29ianNbNzAwXSksLyogImMycG5iMzA0dzEiICovCi0mKG5pZF9vYmpzWzcwMl0pLC8qICJjMnBuYjM2OHcxIiAqLwotJihuaWRfb2Jqc1s2ODhdKSwvKiAiYzJ0bmIxOTF2MSIgKi8KLSYobmlkX29ianNbNjg5XSksLyogImMydG5iMTkxdjIiICovCi0mKG5pZF9vYmpzWzY5MF0pLC8qICJjMnRuYjE5MXYzIiAqLwotJihuaWRfb2Jqc1s2OTRdKSwvKiAiYzJ0bmIyMzl2MSIgKi8KLSYobmlkX29ianNbNjk1XSksLyogImMydG5iMjM5djIiICovCi0mKG5pZF9vYmpzWzY5Nl0pLC8qICJjMnRuYjIzOXYzIiAqLwotJihuaWRfb2Jqc1s3MDFdKSwvKiAiYzJ0bmIzNTl2MSIgKi8KLSYobmlkX29ianNbNzAzXSksLyogImMydG5iNDMxcjEiICovCi0mKG5pZF9vYmpzWzg4MV0pLC8qICJjQUNlcnRpZmljYXRlIiAqLwotJihuaWRfb2Jqc1s0ODNdKSwvKiAiY05BTUVSZWNvcmQiICovCi0mKG5pZF9vYmpzWzc1MV0pLC8qICJjYW1lbGxpYS0xMjgtY2JjIiAqLwotJihuaWRfb2Jqc1s3NTddKSwvKiAiY2FtZWxsaWEtMTI4LWNmYiIgKi8KLSYobmlkX29ianNbNzYwXSksLyogImNhbWVsbGlhLTEyOC1jZmIxIiAqLwotJihuaWRfb2Jqc1s3NjNdKSwvKiAiY2FtZWxsaWEtMTI4LWNmYjgiICovCi0mKG5pZF9vYmpzWzc1NF0pLC8qICJjYW1lbGxpYS0xMjgtZWNiIiAqLwotJihuaWRfb2Jqc1s3NjZdKSwvKiAiY2FtZWxsaWEtMTI4LW9mYiIgKi8KLSYobmlkX29ianNbNzUyXSksLyogImNhbWVsbGlhLTE5Mi1jYmMiICovCi0mKG5pZF9vYmpzWzc1OF0pLC8qICJjYW1lbGxpYS0xOTItY2ZiIiAqLwotJihuaWRfb2Jqc1s3NjFdKSwvKiAiY2FtZWxsaWEtMTkyLWNmYjEiICovCi0mKG5pZF9vYmpzWzc2NF0pLC8qICJjYW1lbGxpYS0xOTItY2ZiOCIgKi8KLSYobmlkX29ianNbNzU1XSksLyogImNhbWVsbGlhLTE5Mi1lY2IiICovCi0mKG5pZF9vYmpzWzc2N10pLC8qICJjYW1lbGxpYS0xOTItb2ZiIiAqLwotJihuaWRfb2Jqc1s3NTNdKSwvKiAiY2FtZWxsaWEtMjU2LWNiYyIgKi8KLSYobmlkX29ianNbNzU5XSksLyogImNhbWVsbGlhLTI1Ni1jZmIiICovCi0mKG5pZF9vYmpzWzc2Ml0pLC8qICJjYW1lbGxpYS0yNTYtY2ZiMSIgKi8KLSYobmlkX29ianNbNzY1XSksLyogImNhbWVsbGlhLTI1Ni1jZmI4IiAqLwotJihuaWRfb2Jqc1s3NTZdKSwvKiAiY2FtZWxsaWEtMjU2LWVjYiIgKi8KLSYobmlkX29ianNbNzY4XSksLyogImNhbWVsbGlhLTI1Ni1vZmIiICovCi0mKG5pZF9vYmpzWzQ0M10pLC8qICJjYXNlSWdub3JlSUE1U3RyaW5nU3ludGF4IiAqLwotJihuaWRfb2Jqc1sxMDhdKSwvKiAiY2FzdDUtY2JjIiAqLwotJihuaWRfb2Jqc1sxMTBdKSwvKiAiY2FzdDUtY2ZiIiAqLwotJihuaWRfb2Jqc1sxMDldKSwvKiAiY2FzdDUtZWNiIiAqLwotJihuaWRfb2Jqc1sxMTFdKSwvKiAiY2FzdDUtb2ZiIiAqLwotJihuaWRfb2Jqc1sxNTJdKSwvKiAiY2VydEJhZyIgKi8KLSYobmlkX29ianNbNjc3XSksLyogImNlcnRpY29tLWFyYyIgKi8KLSYobmlkX29ianNbNTE3XSksLyogImNlcnRpZmljYXRlIGV4dGVuc2lvbnMiICovCi0mKG5pZF9vYmpzWzg4M10pLC8qICJjZXJ0aWZpY2F0ZVJldm9jYXRpb25MaXN0IiAqLwotJihuaWRfb2Jqc1s1NF0pLC8qICJjaGFsbGVuZ2VQYXNzd29yZCIgKi8KLSYobmlkX29ianNbNDA3XSksLyogImNoYXJhY3RlcmlzdGljLXR3by1maWVsZCIgKi8KLSYobmlkX29ianNbMzk1XSksLyogImNsZWFyYW5jZSIgKi8KLSYobmlkX29ianNbNjMzXSksLyogImNsZWFydGV4dCB0cmFjayAyIiAqLwotJihuaWRfb2Jqc1sxM10pLC8qICJjb21tb25OYW1lIiAqLwotJihuaWRfb2Jqc1s1MTNdKSwvKiAiY29udGVudCB0eXBlcyIgKi8KLSYobmlkX29ianNbNTBdKSwvKiAiY29udGVudFR5cGUiICovCi0mKG5pZF9vYmpzWzUzXSksLyogImNvdW50ZXJzaWduYXR1cmUiICovCi0mKG5pZF9vYmpzWzE0XSksLyogImNvdW50cnlOYW1lIiAqLwotJihuaWRfb2Jqc1sxNTNdKSwvKiAiY3JsQmFnIiAqLwotJihuaWRfb2Jqc1s4ODRdKSwvKiAiY3Jvc3NDZXJ0aWZpY2F0ZVBhaXIiICovCi0mKG5pZF9vYmpzWzgwNl0pLC8qICJjcnlwdG9jb20iICovCi0mKG5pZF9vYmpzWzgwNV0pLC8qICJjcnlwdG9wcm8iICovCi0mKG5pZF9vYmpzWzUwMF0pLC8qICJkSVRSZWRpcmVjdCIgKi8KLSYobmlkX29ianNbNDUxXSksLyogImROU0RvbWFpbiIgKi8KLSYobmlkX29ianNbNDk1XSksLyogImRTQVF1YWxpdHkiICovCi0mKG5pZF9vYmpzWzQzNF0pLC8qICJkYXRhIiAqLwotJihuaWRfb2Jqc1szOTBdKSwvKiAiZGNPYmplY3QiICovCi0mKG5pZF9vYmpzWzg5MV0pLC8qICJkZWx0YVJldm9jYXRpb25MaXN0IiAqLwotJihuaWRfb2Jqc1szMV0pLC8qICJkZXMtY2JjIiAqLwotJihuaWRfb2Jqc1s2NDNdKSwvKiAiZGVzLWNkbWYiICovCi0mKG5pZF9vYmpzWzMwXSksLyogImRlcy1jZmIiICovCi0mKG5pZF9vYmpzWzY1Nl0pLC8qICJkZXMtY2ZiMSIgKi8KLSYobmlkX29ianNbNjU3XSksLyogImRlcy1jZmI4IiAqLwotJihuaWRfb2Jqc1syOV0pLC8qICJkZXMtZWNiIiAqLwotJihuaWRfb2Jqc1szMl0pLC8qICJkZXMtZWRlIiAqLwotJihuaWRfb2Jqc1s0M10pLC8qICJkZXMtZWRlLWNiYyIgKi8KLSYobmlkX29ianNbNjBdKSwvKiAiZGVzLWVkZS1jZmIiICovCi0mKG5pZF9vYmpzWzYyXSksLyogImRlcy1lZGUtb2ZiIiAqLwotJihuaWRfb2Jqc1szM10pLC8qICJkZXMtZWRlMyIgKi8KLSYobmlkX29ianNbNDRdKSwvKiAiZGVzLWVkZTMtY2JjIiAqLwotJihuaWRfb2Jqc1s2MV0pLC8qICJkZXMtZWRlMy1jZmIiICovCi0mKG5pZF9vYmpzWzY1OF0pLC8qICJkZXMtZWRlMy1jZmIxIiAqLwotJihuaWRfb2Jqc1s2NTldKSwvKiAiZGVzLWVkZTMtY2ZiOCIgKi8KLSYobmlkX29ianNbNjNdKSwvKiAiZGVzLWVkZTMtb2ZiIiAqLwotJihuaWRfb2Jqc1s0NV0pLC8qICJkZXMtb2ZiIiAqLwotJihuaWRfb2Jqc1sxMDddKSwvKiAiZGVzY3JpcHRpb24iICovCi0mKG5pZF9vYmpzWzg3MV0pLC8qICJkZXN0aW5hdGlvbkluZGljYXRvciIgKi8KLSYobmlkX29ianNbODBdKSwvKiAiZGVzeC1jYmMiICovCi0mKG5pZF9vYmpzWzI4XSksLyogImRoS2V5QWdyZWVtZW50IiAqLwotJihuaWRfb2Jqc1sxMV0pLC8qICJkaXJlY3Rvcnkgc2VydmljZXMgKFguNTAwKSIgKi8KLSYobmlkX29ianNbMzc4XSksLyogImRpcmVjdG9yeSBzZXJ2aWNlcyAtIGFsZ29yaXRobXMiICovCi0mKG5pZF9vYmpzWzg4N10pLC8qICJkaXN0aW5ndWlzaGVkTmFtZSIgKi8KLSYobmlkX29ianNbODkyXSksLyogImRtZE5hbWUiICovCi0mKG5pZF9vYmpzWzE3NF0pLC8qICJkblF1YWxpZmllciIgKi8KLSYobmlkX29ianNbNDQ3XSksLyogImRvY3VtZW50IiAqLwotJihuaWRfb2Jqc1s0NzFdKSwvKiAiZG9jdW1lbnRBdXRob3IiICovCi0mKG5pZF9vYmpzWzQ2OF0pLC8qICJkb2N1bWVudElkZW50aWZpZXIiICovCi0mKG5pZF9vYmpzWzQ3Ml0pLC8qICJkb2N1bWVudExvY2F0aW9uIiAqLwotJihuaWRfb2Jqc1s1MDJdKSwvKiAiZG9jdW1lbnRQdWJsaXNoZXIiICovCi0mKG5pZF9vYmpzWzQ0OV0pLC8qICJkb2N1bWVudFNlcmllcyIgKi8KLSYobmlkX29ianNbNDY5XSksLyogImRvY3VtZW50VGl0bGUiICovCi0mKG5pZF9vYmpzWzQ3MF0pLC8qICJkb2N1bWVudFZlcnNpb24iICovCi0mKG5pZF9vYmpzWzM4MF0pLC8qICJkb2QiICovCi0mKG5pZF9vYmpzWzM5MV0pLC8qICJkb21haW5Db21wb25lbnQiICovCi0mKG5pZF9vYmpzWzQ1Ml0pLC8qICJkb21haW5SZWxhdGVkT2JqZWN0IiAqLwotJihuaWRfb2Jqc1sxMTZdKSwvKiAiZHNhRW5jcnlwdGlvbiIgKi8KLSYobmlkX29ianNbNjddKSwvKiAiZHNhRW5jcnlwdGlvbi1vbGQiICovCi0mKG5pZF9vYmpzWzY2XSksLyogImRzYVdpdGhTSEEiICovCi0mKG5pZF9vYmpzWzExM10pLC8qICJkc2FXaXRoU0hBMSIgKi8KLSYobmlkX29ianNbNzBdKSwvKiAiZHNhV2l0aFNIQTEtb2xkIiAqLwotJihuaWRfb2Jqc1s4MDJdKSwvKiAiZHNhX3dpdGhfU0hBMjI0IiAqLwotJihuaWRfb2Jqc1s4MDNdKSwvKiAiZHNhX3dpdGhfU0hBMjU2IiAqLwotJihuaWRfb2Jqc1syOTddKSwvKiAiZHZjcyIgKi8KLSYobmlkX29ianNbNzkxXSksLyogImVjZHNhLXdpdGgtUmVjb21tZW5kZWQiICovCi0mKG5pZF9vYmpzWzQxNl0pLC8qICJlY2RzYS13aXRoLVNIQTEiICovCi0mKG5pZF9vYmpzWzc5M10pLC8qICJlY2RzYS13aXRoLVNIQTIyNCIgKi8KLSYobmlkX29ianNbNzk0XSksLyogImVjZHNhLXdpdGgtU0hBMjU2IiAqLwotJihuaWRfb2Jqc1s3OTVdKSwvKiAiZWNkc2Etd2l0aC1TSEEzODQiICovCi0mKG5pZF9vYmpzWzc5Nl0pLC8qICJlY2RzYS13aXRoLVNIQTUxMiIgKi8KLSYobmlkX29ianNbNzkyXSksLyogImVjZHNhLXdpdGgtU3BlY2lmaWVkIiAqLwotJihuaWRfb2Jqc1s0OF0pLC8qICJlbWFpbEFkZHJlc3MiICovCi0mKG5pZF9vYmpzWzYzMl0pLC8qICJlbmNyeXB0ZWQgdHJhY2sgMiIgKi8KLSYobmlkX29ianNbODg1XSksLyogImVuaGFuY2VkU2VhcmNoR3VpZGUiICovCi0mKG5pZF9vYmpzWzU2XSksLyogImV4dGVuZGVkQ2VydGlmaWNhdGVBdHRyaWJ1dGVzIiAqLwotJihuaWRfb2Jqc1s4NjddKSwvKiAiZmFjc2ltaWxlVGVsZXBob25lTnVtYmVyIiAqLwotJihuaWRfb2Jqc1s0NjJdKSwvKiAiZmF2b3VyaXRlRHJpbmsiICovCi0mKG5pZF9vYmpzWzQ1M10pLC8qICJmcmllbmRseUNvdW50cnkiICovCi0mKG5pZF9vYmpzWzQ5MF0pLC8qICJmcmllbmRseUNvdW50cnlOYW1lIiAqLwotJihuaWRfb2Jqc1sxNTZdKSwvKiAiZnJpZW5kbHlOYW1lIiAqLwotJihuaWRfb2Jqc1s2MzFdKSwvKiAiZ2VuZXJhdGUgY3J5cHRvZ3JhbSIgKi8KLSYobmlkX29ianNbNTA5XSksLyogImdlbmVyYXRpb25RdWFsaWZpZXIiICovCi0mKG5pZF9vYmpzWzYwMV0pLC8qICJnZW5lcmljIGNyeXB0b2dyYW0iICovCi0mKG5pZF9vYmpzWzk5XSksLyogImdpdmVuTmFtZSIgKi8KLSYobmlkX29ianNbODE0XSksLyogImdvc3Q4OS1jbnQiICovCi0mKG5pZF9vYmpzWzg1NV0pLC8qICJobWFjIiAqLwotJihuaWRfb2Jqc1s3ODBdKSwvKiAiaG1hYy1tZDUiICovCi0mKG5pZF9vYmpzWzc4MV0pLC8qICJobWFjLXNoYTEiICovCi0mKG5pZF9vYmpzWzc5N10pLC8qICJobWFjV2l0aE1ENSIgKi8KLSYobmlkX29ianNbMTYzXSksLyogImhtYWNXaXRoU0hBMSIgKi8KLSYobmlkX29ianNbNzk4XSksLyogImhtYWNXaXRoU0hBMjI0IiAqLwotJihuaWRfb2Jqc1s3OTldKSwvKiAiaG1hY1dpdGhTSEEyNTYiICovCi0mKG5pZF9vYmpzWzgwMF0pLC8qICJobWFjV2l0aFNIQTM4NCIgKi8KLSYobmlkX29ianNbODAxXSksLyogImhtYWNXaXRoU0hBNTEyIiAqLwotJihuaWRfb2Jqc1s0ODZdKSwvKiAiaG9tZVBvc3RhbEFkZHJlc3MiICovCi0mKG5pZF9vYmpzWzQ3M10pLC8qICJob21lVGVsZXBob25lTnVtYmVyIiAqLwotJihuaWRfb2Jqc1s0NjZdKSwvKiAiaG9zdCIgKi8KLSYobmlkX29ianNbODg5XSksLyogImhvdXNlSWRlbnRpZmllciIgKi8KLSYobmlkX29ianNbNDQyXSksLyogImlBNVN0cmluZ1N5bnRheCIgKi8KLSYobmlkX29ianNbMzgxXSksLyogImlhbmEiICovCi0mKG5pZF9vYmpzWzgyNF0pLC8qICJpZC1Hb3N0MjgxNDctODktQ3J5cHRvUHJvLUEtUGFyYW1TZXQiICovCi0mKG5pZF9vYmpzWzgyNV0pLC8qICJpZC1Hb3N0MjgxNDctODktQ3J5cHRvUHJvLUItUGFyYW1TZXQiICovCi0mKG5pZF9vYmpzWzgyNl0pLC8qICJpZC1Hb3N0MjgxNDctODktQ3J5cHRvUHJvLUMtUGFyYW1TZXQiICovCi0mKG5pZF9vYmpzWzgyN10pLC8qICJpZC1Hb3N0MjgxNDctODktQ3J5cHRvUHJvLUQtUGFyYW1TZXQiICovCi0mKG5pZF9vYmpzWzgxOV0pLC8qICJpZC1Hb3N0MjgxNDctODktQ3J5cHRvUHJvLUtleU1lc2hpbmciICovCi0mKG5pZF9vYmpzWzgyOV0pLC8qICJpZC1Hb3N0MjgxNDctODktQ3J5cHRvUHJvLU9zY2FyLTEtMC1QYXJhbVNldCIgKi8KLSYobmlkX29ianNbODI4XSksLyogImlkLUdvc3QyODE0Ny04OS1DcnlwdG9Qcm8tT3NjYXItMS0xLVBhcmFtU2V0IiAqLwotJihuaWRfb2Jqc1s4MzBdKSwvKiAiaWQtR29zdDI4MTQ3LTg5LUNyeXB0b1Byby1SSUMtMS1QYXJhbVNldCIgKi8KLSYobmlkX29ianNbODIwXSksLyogImlkLUdvc3QyODE0Ny04OS1Ob25lLUtleU1lc2hpbmciICovCi0mKG5pZF9vYmpzWzgyM10pLC8qICJpZC1Hb3N0MjgxNDctODktVGVzdFBhcmFtU2V0IiAqLwotJihuaWRfb2Jqc1s4NDBdKSwvKiAiaWQtR29zdFIzNDEwLTIwMDEtQ3J5cHRvUHJvLUEtUGFyYW1TZXQiICovCi0mKG5pZF9vYmpzWzg0MV0pLC8qICJpZC1Hb3N0UjM0MTAtMjAwMS1DcnlwdG9Qcm8tQi1QYXJhbVNldCIgKi8KLSYobmlkX29ianNbODQyXSksLyogImlkLUdvc3RSMzQxMC0yMDAxLUNyeXB0b1Byby1DLVBhcmFtU2V0IiAqLwotJihuaWRfb2Jqc1s4NDNdKSwvKiAiaWQtR29zdFIzNDEwLTIwMDEtQ3J5cHRvUHJvLVhjaEEtUGFyYW1TZXQiICovCi0mKG5pZF9vYmpzWzg0NF0pLC8qICJpZC1Hb3N0UjM0MTAtMjAwMS1DcnlwdG9Qcm8tWGNoQi1QYXJhbVNldCIgKi8KLSYobmlkX29ianNbODM5XSksLyogImlkLUdvc3RSMzQxMC0yMDAxLVRlc3RQYXJhbVNldCIgKi8KLSYobmlkX29ianNbODMyXSksLyogImlkLUdvc3RSMzQxMC05NC1DcnlwdG9Qcm8tQS1QYXJhbVNldCIgKi8KLSYobmlkX29ianNbODMzXSksLyogImlkLUdvc3RSMzQxMC05NC1DcnlwdG9Qcm8tQi1QYXJhbVNldCIgKi8KLSYobmlkX29ianNbODM0XSksLyogImlkLUdvc3RSMzQxMC05NC1DcnlwdG9Qcm8tQy1QYXJhbVNldCIgKi8KLSYobmlkX29ianNbODM1XSksLyogImlkLUdvc3RSMzQxMC05NC1DcnlwdG9Qcm8tRC1QYXJhbVNldCIgKi8KLSYobmlkX29ianNbODM2XSksLyogImlkLUdvc3RSMzQxMC05NC1DcnlwdG9Qcm8tWGNoQS1QYXJhbVNldCIgKi8KLSYobmlkX29ianNbODM3XSksLyogImlkLUdvc3RSMzQxMC05NC1DcnlwdG9Qcm8tWGNoQi1QYXJhbVNldCIgKi8KLSYobmlkX29ianNbODM4XSksLyogImlkLUdvc3RSMzQxMC05NC1DcnlwdG9Qcm8tWGNoQy1QYXJhbVNldCIgKi8KLSYobmlkX29ianNbODMxXSksLyogImlkLUdvc3RSMzQxMC05NC1UZXN0UGFyYW1TZXQiICovCi0mKG5pZF9vYmpzWzg0NV0pLC8qICJpZC1Hb3N0UjM0MTAtOTQtYSIgKi8KLSYobmlkX29ianNbODQ2XSksLyogImlkLUdvc3RSMzQxMC05NC1hQmlzIiAqLwotJihuaWRfb2Jqc1s4NDddKSwvKiAiaWQtR29zdFIzNDEwLTk0LWIiICovCi0mKG5pZF9vYmpzWzg0OF0pLC8qICJpZC1Hb3N0UjM0MTAtOTQtYkJpcyIgKi8KLSYobmlkX29ianNbODIyXSksLyogImlkLUdvc3RSMzQxMS05NC1DcnlwdG9Qcm9QYXJhbVNldCIgKi8KLSYobmlkX29ianNbODIxXSksLyogImlkLUdvc3RSMzQxMS05NC1UZXN0UGFyYW1TZXQiICovCi0mKG5pZF9vYmpzWzI2Nl0pLC8qICJpZC1hY2EiICovCi0mKG5pZF9vYmpzWzM1NV0pLC8qICJpZC1hY2EtYWNjZXNzSWRlbnRpdHkiICovCi0mKG5pZF9vYmpzWzM1NF0pLC8qICJpZC1hY2EtYXV0aGVudGljYXRpb25JbmZvIiAqLwotJihuaWRfb2Jqc1szNTZdKSwvKiAiaWQtYWNhLWNoYXJnaW5nSWRlbnRpdHkiICovCi0mKG5pZF9vYmpzWzM5OV0pLC8qICJpZC1hY2EtZW5jQXR0cnMiICovCi0mKG5pZF9vYmpzWzM1N10pLC8qICJpZC1hY2EtZ3JvdXAiICovCi0mKG5pZF9vYmpzWzM1OF0pLC8qICJpZC1hY2Etcm9sZSIgKi8KLSYobmlkX29ianNbMTc2XSksLyogImlkLWFkIiAqLwotJihuaWRfb2Jqc1s3ODhdKSwvKiAiaWQtYWVzMTI4LXdyYXAiICovCi0mKG5pZF9vYmpzWzc4OV0pLC8qICJpZC1hZXMxOTItd3JhcCIgKi8KLSYobmlkX29ianNbNzkwXSksLyogImlkLWFlczI1Ni13cmFwIiAqLwotJihuaWRfb2Jqc1syNjJdKSwvKiAiaWQtYWxnIiAqLwotJihuaWRfb2Jqc1szMjNdKSwvKiAiaWQtYWxnLWRlczQwIiAqLwotJihuaWRfb2Jqc1szMjZdKSwvKiAiaWQtYWxnLWRoLXBvcCIgKi8KLSYobmlkX29ianNbMzI1XSksLyogImlkLWFsZy1kaC1zaWctaG1hYy1zaGExIiAqLwotJihuaWRfb2Jqc1szMjRdKSwvKiAiaWQtYWxnLW5vU2lnbmF0dXJlIiAqLwotJihuaWRfb2Jqc1syNjhdKSwvKiAiaWQtY2N0IiAqLwotJihuaWRfb2Jqc1szNjFdKSwvKiAiaWQtY2N0LVBLSURhdGEiICovCi0mKG5pZF9vYmpzWzM2Ml0pLC8qICJpZC1jY3QtUEtJUmVzcG9uc2UiICovCi0mKG5pZF9vYmpzWzM2MF0pLC8qICJpZC1jY3QtY3JzIiAqLwotJihuaWRfb2Jqc1s4MV0pLC8qICJpZC1jZSIgKi8KLSYobmlkX29ianNbNjgwXSksLyogImlkLWNoYXJhY3RlcmlzdGljLXR3by1iYXNpcyIgKi8KLSYobmlkX29ianNbMjYzXSksLyogImlkLWNtYyIgKi8KLSYobmlkX29ianNbMzM0XSksLyogImlkLWNtYy1hZGRFeHRlbnNpb25zIiAqLwotJihuaWRfb2Jqc1szNDZdKSwvKiAiaWQtY21jLWNvbmZpcm1DZXJ0QWNjZXB0YW5jZSIgKi8KLSYobmlkX29ianNbMzMwXSksLyogImlkLWNtYy1kYXRhUmV0dXJuIiAqLwotJihuaWRfb2Jqc1szMzZdKSwvKiAiaWQtY21jLWRlY3J5cHRlZFBPUCIgKi8KLSYobmlkX29ianNbMzM1XSksLyogImlkLWNtYy1lbmNyeXB0ZWRQT1AiICovCi0mKG5pZF9vYmpzWzMzOV0pLC8qICJpZC1jbWMtZ2V0Q1JMIiAqLwotJihuaWRfb2Jqc1szMzhdKSwvKiAiaWQtY21jLWdldENlcnQiICovCi0mKG5pZF9vYmpzWzMyOF0pLC8qICJpZC1jbWMtaWRlbnRpZmljYXRpb24iICovCi0mKG5pZF9vYmpzWzMyOV0pLC8qICJpZC1jbWMtaWRlbnRpdHlQcm9vZiIgKi8KLSYobmlkX29ianNbMzM3XSksLyogImlkLWNtYy1scmFQT1BXaXRuZXNzIiAqLwotJihuaWRfb2Jqc1szNDRdKSwvKiAiaWQtY21jLXBvcExpbmtSYW5kb20iICovCi0mKG5pZF9vYmpzWzM0NV0pLC8qICJpZC1jbWMtcG9wTGlua1dpdG5lc3MiICovCi0mKG5pZF9vYmpzWzM0M10pLC8qICJpZC1jbWMtcXVlcnlQZW5kaW5nIiAqLwotJihuaWRfb2Jqc1szMzNdKSwvKiAiaWQtY21jLXJlY2lwaWVudE5vbmNlIiAqLwotJihuaWRfb2Jqc1szNDFdKSwvKiAiaWQtY21jLXJlZ0luZm8iICovCi0mKG5pZF9vYmpzWzM0Ml0pLC8qICJpZC1jbWMtcmVzcG9uc2VJbmZvIiAqLwotJihuaWRfb2Jqc1szNDBdKSwvKiAiaWQtY21jLXJldm9rZVJlcXVlc3QiICovCi0mKG5pZF9vYmpzWzMzMl0pLC8qICJpZC1jbWMtc2VuZGVyTm9uY2UiICovCi0mKG5pZF9vYmpzWzMyN10pLC8qICJpZC1jbWMtc3RhdHVzSW5mbyIgKi8KLSYobmlkX29ianNbMzMxXSksLyogImlkLWNtYy10cmFuc2FjdGlvbklkIiAqLwotJihuaWRfb2Jqc1s3ODddKSwvKiAiaWQtY3QtYXNjaWlUZXh0V2l0aENSTEYiICovCi0mKG5pZF9vYmpzWzQwOF0pLC8qICJpZC1lY1B1YmxpY0tleSIgKi8KLSYobmlkX29ianNbNTA4XSksLyogImlkLWhleC1tdWx0aXBhcnQtbWVzc2FnZSIgKi8KLSYobmlkX29ianNbNTA3XSksLyogImlkLWhleC1wYXJ0aWFsLW1lc3NhZ2UiICovCi0mKG5pZF9vYmpzWzI2MF0pLC8qICJpZC1pdCIgKi8KLSYobmlkX29ianNbMzAyXSksLyogImlkLWl0LWNhS2V5VXBkYXRlSW5mbyIgKi8KLSYobmlkX29ianNbMjk4XSksLyogImlkLWl0LWNhUHJvdEVuY0NlcnQiICovCi0mKG5pZF9vYmpzWzMxMV0pLC8qICJpZC1pdC1jb25maXJtV2FpdFRpbWUiICovCi0mKG5pZF9vYmpzWzMwM10pLC8qICJpZC1pdC1jdXJyZW50Q1JMIiAqLwotJihuaWRfb2Jqc1szMDBdKSwvKiAiaWQtaXQtZW5jS2V5UGFpclR5cGVzIiAqLwotJihuaWRfb2Jqc1szMTBdKSwvKiAiaWQtaXQtaW1wbGljaXRDb25maXJtIiAqLwotJihuaWRfb2Jqc1szMDhdKSwvKiAiaWQtaXQta2V5UGFpclBhcmFtUmVwIiAqLwotJihuaWRfb2Jqc1szMDddKSwvKiAiaWQtaXQta2V5UGFpclBhcmFtUmVxIiAqLwotJihuaWRfb2Jqc1szMTJdKSwvKiAiaWQtaXQtb3JpZ1BLSU1lc3NhZ2UiICovCi0mKG5pZF9vYmpzWzMwMV0pLC8qICJpZC1pdC1wcmVmZXJyZWRTeW1tQWxnIiAqLwotJihuaWRfb2Jqc1szMDldKSwvKiAiaWQtaXQtcmV2UGFzc3BocmFzZSIgKi8KLSYobmlkX29ianNbMjk5XSksLyogImlkLWl0LXNpZ25LZXlQYWlyVHlwZXMiICovCi0mKG5pZF9vYmpzWzMwNV0pLC8qICJpZC1pdC1zdWJzY3JpcHRpb25SZXF1ZXN0IiAqLwotJihuaWRfb2Jqc1szMDZdKSwvKiAiaWQtaXQtc3Vic2NyaXB0aW9uUmVzcG9uc2UiICovCi0mKG5pZF9vYmpzWzc4NF0pLC8qICJpZC1pdC1zdXBwTGFuZ1RhZ3MiICovCi0mKG5pZF9vYmpzWzMwNF0pLC8qICJpZC1pdC11bnN1cHBvcnRlZE9JRHMiICovCi0mKG5pZF9vYmpzWzEyOF0pLC8qICJpZC1rcCIgKi8KLSYobmlkX29ianNbMjgwXSksLyogImlkLW1vZC1hdHRyaWJ1dGUtY2VydCIgKi8KLSYobmlkX29ianNbMjc0XSksLyogImlkLW1vZC1jbWMiICovCi0mKG5pZF9vYmpzWzI3N10pLC8qICJpZC1tb2QtY21wIiAqLwotJihuaWRfb2Jqc1syODRdKSwvKiAiaWQtbW9kLWNtcDIwMDAiICovCi0mKG5pZF9vYmpzWzI3M10pLC8qICJpZC1tb2QtY3JtZiIgKi8KLSYobmlkX29ianNbMjgzXSksLyogImlkLW1vZC1kdmNzIiAqLwotJihuaWRfb2Jqc1syNzVdKSwvKiAiaWQtbW9kLWtlYS1wcm9maWxlLTg4IiAqLwotJihuaWRfb2Jqc1syNzZdKSwvKiAiaWQtbW9kLWtlYS1wcm9maWxlLTkzIiAqLwotJihuaWRfb2Jqc1syODJdKSwvKiAiaWQtbW9kLW9jc3AiICovCi0mKG5pZF9vYmpzWzI3OF0pLC8qICJpZC1tb2QtcXVhbGlmaWVkLWNlcnQtODgiICovCi0mKG5pZF9vYmpzWzI3OV0pLC8qICJpZC1tb2QtcXVhbGlmaWVkLWNlcnQtOTMiICovCi0mKG5pZF9vYmpzWzI4MV0pLC8qICJpZC1tb2QtdGltZXN0YW1wLXByb3RvY29sIiAqLwotJihuaWRfb2Jqc1syNjRdKSwvKiAiaWQtb24iICovCi0mKG5pZF9vYmpzWzM0N10pLC8qICJpZC1vbi1wZXJzb25hbERhdGEiICovCi0mKG5pZF9vYmpzWzI2NV0pLC8qICJpZC1wZGEiICovCi0mKG5pZF9vYmpzWzM1Ml0pLC8qICJpZC1wZGEtY291bnRyeU9mQ2l0aXplbnNoaXAiICovCi0mKG5pZF9vYmpzWzM1M10pLC8qICJpZC1wZGEtY291bnRyeU9mUmVzaWRlbmNlIiAqLwotJihuaWRfb2Jqc1szNDhdKSwvKiAiaWQtcGRhLWRhdGVPZkJpcnRoIiAqLwotJihuaWRfb2Jqc1szNTFdKSwvKiAiaWQtcGRhLWdlbmRlciIgKi8KLSYobmlkX29ianNbMzQ5XSksLyogImlkLXBkYS1wbGFjZU9mQmlydGgiICovCi0mKG5pZF9vYmpzWzE3NV0pLC8qICJpZC1wZSIgKi8KLSYobmlkX29ianNbMjYxXSksLyogImlkLXBraXAiICovCi0mKG5pZF9vYmpzWzI1OF0pLC8qICJpZC1wa2l4LW1vZCIgKi8KLSYobmlkX29ianNbMjY5XSksLyogImlkLXBraXgxLWV4cGxpY2l0LTg4IiAqLwotJihuaWRfb2Jqc1syNzFdKSwvKiAiaWQtcGtpeDEtZXhwbGljaXQtOTMiICovCi0mKG5pZF9vYmpzWzI3MF0pLC8qICJpZC1wa2l4MS1pbXBsaWNpdC04OCIgKi8KLSYobmlkX29ianNbMjcyXSksLyogImlkLXBraXgxLWltcGxpY2l0LTkzIiAqLwotJihuaWRfb2Jqc1s2NjJdKSwvKiAiaWQtcHBsIiAqLwotJihuaWRfb2Jqc1syNjddKSwvKiAiaWQtcWNzIiAqLwotJihuaWRfb2Jqc1szNTldKSwvKiAiaWQtcWNzLXBraXhRQ1N5bnRheC12MSIgKi8KLSYobmlkX29ianNbMjU5XSksLyogImlkLXF0IiAqLwotJihuaWRfb2Jqc1szMTNdKSwvKiAiaWQtcmVnQ3RybCIgKi8KLSYobmlkX29ianNbMzE2XSksLyogImlkLXJlZ0N0cmwtYXV0aGVudGljYXRvciIgKi8KLSYobmlkX29ianNbMzE5XSksLyogImlkLXJlZ0N0cmwtb2xkQ2VydElEIiAqLwotJihuaWRfb2Jqc1szMThdKSwvKiAiaWQtcmVnQ3RybC1wa2lBcmNoaXZlT3B0aW9ucyIgKi8KLSYobmlkX29ianNbMzE3XSksLyogImlkLXJlZ0N0cmwtcGtpUHVibGljYXRpb25JbmZvIiAqLwotJihuaWRfb2Jqc1szMjBdKSwvKiAiaWQtcmVnQ3RybC1wcm90b2NvbEVuY3JLZXkiICovCi0mKG5pZF9vYmpzWzMxNV0pLC8qICJpZC1yZWdDdHJsLXJlZ1Rva2VuIiAqLwotJihuaWRfb2Jqc1szMTRdKSwvKiAiaWQtcmVnSW5mbyIgKi8KLSYobmlkX29ianNbMzIyXSksLyogImlkLXJlZ0luZm8tY2VydFJlcSIgKi8KLSYobmlkX29ianNbMzIxXSksLyogImlkLXJlZ0luZm8tdXRmOFBhaXJzIiAqLwotJihuaWRfb2Jqc1sxOTFdKSwvKiAiaWQtc21pbWUtYWEiICovCi0mKG5pZF9vYmpzWzIxNV0pLC8qICJpZC1zbWltZS1hYS1jb250ZW50SGludCIgKi8KLSYobmlkX29ianNbMjE4XSksLyogImlkLXNtaW1lLWFhLWNvbnRlbnRJZGVudGlmaWVyIiAqLwotJihuaWRfb2Jqc1syMjFdKSwvKiAiaWQtc21pbWUtYWEtY29udGVudFJlZmVyZW5jZSIgKi8KLSYobmlkX29ianNbMjQwXSksLyogImlkLXNtaW1lLWFhLWR2Y3MtZHZjIiAqLwotJihuaWRfb2Jqc1syMTddKSwvKiAiaWQtc21pbWUtYWEtZW5jYXBDb250ZW50VHlwZSIgKi8KLSYobmlkX29ianNbMjIyXSksLyogImlkLXNtaW1lLWFhLWVuY3J5cEtleVByZWYiICovCi0mKG5pZF9vYmpzWzIyMF0pLC8qICJpZC1zbWltZS1hYS1lcXVpdmFsZW50TGFiZWxzIiAqLwotJihuaWRfb2Jqc1syMzJdKSwvKiAiaWQtc21pbWUtYWEtZXRzLUNlcnRpZmljYXRlUmVmcyIgKi8KLSYobmlkX29ianNbMjMzXSksLyogImlkLXNtaW1lLWFhLWV0cy1SZXZvY2F0aW9uUmVmcyIgKi8KLSYobmlkX29ianNbMjM4XSksLyogImlkLXNtaW1lLWFhLWV0cy1hcmNoaXZlVGltZVN0YW1wIiAqLwotJihuaWRfb2Jqc1syMzddKSwvKiAiaWQtc21pbWUtYWEtZXRzLWNlcnRDUkxUaW1lc3RhbXAiICovCi0mKG5pZF9vYmpzWzIzNF0pLC8qICJpZC1zbWltZS1hYS1ldHMtY2VydFZhbHVlcyIgKi8KLSYobmlkX29ianNbMjI3XSksLyogImlkLXNtaW1lLWFhLWV0cy1jb21taXRtZW50VHlwZSIgKi8KLSYobmlkX29ianNbMjMxXSksLyogImlkLXNtaW1lLWFhLWV0cy1jb250ZW50VGltZXN0YW1wIiAqLwotJihuaWRfb2Jqc1syMzZdKSwvKiAiaWQtc21pbWUtYWEtZXRzLWVzY1RpbWVTdGFtcCIgKi8KLSYobmlkX29ianNbMjMwXSksLyogImlkLXNtaW1lLWFhLWV0cy1vdGhlclNpZ0NlcnQiICovCi0mKG5pZF9vYmpzWzIzNV0pLC8qICJpZC1zbWltZS1hYS1ldHMtcmV2b2NhdGlvblZhbHVlcyIgKi8KLSYobmlkX29ianNbMjI2XSksLyogImlkLXNtaW1lLWFhLWV0cy1zaWdQb2xpY3lJZCIgKi8KLSYobmlkX29ianNbMjI5XSksLyogImlkLXNtaW1lLWFhLWV0cy1zaWduZXJBdHRyIiAqLwotJihuaWRfb2Jqc1syMjhdKSwvKiAiaWQtc21pbWUtYWEtZXRzLXNpZ25lckxvY2F0aW9uIiAqLwotJihuaWRfb2Jqc1syMTldKSwvKiAiaWQtc21pbWUtYWEtbWFjVmFsdWUiICovCi0mKG5pZF9vYmpzWzIxNF0pLC8qICJpZC1zbWltZS1hYS1tbEV4cGFuZEhpc3RvcnkiICovCi0mKG5pZF9vYmpzWzIxNl0pLC8qICJpZC1zbWltZS1hYS1tc2dTaWdEaWdlc3QiICovCi0mKG5pZF9vYmpzWzIxMl0pLC8qICJpZC1zbWltZS1hYS1yZWNlaXB0UmVxdWVzdCIgKi8KLSYobmlkX29ianNbMjEzXSksLyogImlkLXNtaW1lLWFhLXNlY3VyaXR5TGFiZWwiICovCi0mKG5pZF9vYmpzWzIzOV0pLC8qICJpZC1zbWltZS1hYS1zaWduYXR1cmVUeXBlIiAqLwotJihuaWRfb2Jqc1syMjNdKSwvKiAiaWQtc21pbWUtYWEtc2lnbmluZ0NlcnRpZmljYXRlIiAqLwotJihuaWRfb2Jqc1syMjRdKSwvKiAiaWQtc21pbWUtYWEtc21pbWVFbmNyeXB0Q2VydHMiICovCi0mKG5pZF9vYmpzWzIyNV0pLC8qICJpZC1zbWltZS1hYS10aW1lU3RhbXBUb2tlbiIgKi8KLSYobmlkX29ianNbMTkyXSksLyogImlkLXNtaW1lLWFsZyIgKi8KLSYobmlkX29ianNbMjQzXSksLyogImlkLXNtaW1lLWFsZy0zREVTd3JhcCIgKi8KLSYobmlkX29ianNbMjQ2XSksLyogImlkLXNtaW1lLWFsZy1DTVMzREVTd3JhcCIgKi8KLSYobmlkX29ianNbMjQ3XSksLyogImlkLXNtaW1lLWFsZy1DTVNSQzJ3cmFwIiAqLwotJihuaWRfb2Jqc1syNDVdKSwvKiAiaWQtc21pbWUtYWxnLUVTREgiICovCi0mKG5pZF9vYmpzWzI0MV0pLC8qICJpZC1zbWltZS1hbGctRVNESHdpdGgzREVTIiAqLwotJihuaWRfb2Jqc1syNDJdKSwvKiAiaWQtc21pbWUtYWxnLUVTREh3aXRoUkMyIiAqLwotJihuaWRfb2Jqc1syNDRdKSwvKiAiaWQtc21pbWUtYWxnLVJDMndyYXAiICovCi0mKG5pZF9vYmpzWzE5M10pLC8qICJpZC1zbWltZS1jZCIgKi8KLSYobmlkX29ianNbMjQ4XSksLyogImlkLXNtaW1lLWNkLWxkYXAiICovCi0mKG5pZF9vYmpzWzE5MF0pLC8qICJpZC1zbWltZS1jdCIgKi8KLSYobmlkX29ianNbMjEwXSksLyogImlkLXNtaW1lLWN0LURWQ1NSZXF1ZXN0RGF0YSIgKi8KLSYobmlkX29ianNbMjExXSksLyogImlkLXNtaW1lLWN0LURWQ1NSZXNwb25zZURhdGEiICovCi0mKG5pZF9vYmpzWzIwOF0pLC8qICJpZC1zbWltZS1jdC1URFRJbmZvIiAqLwotJihuaWRfb2Jqc1syMDddKSwvKiAiaWQtc21pbWUtY3QtVFNUSW5mbyIgKi8KLSYobmlkX29ianNbMjA1XSksLyogImlkLXNtaW1lLWN0LWF1dGhEYXRhIiAqLwotJihuaWRfb2Jqc1s3ODZdKSwvKiAiaWQtc21pbWUtY3QtY29tcHJlc3NlZERhdGEiICovCi0mKG5pZF9vYmpzWzIwOV0pLC8qICJpZC1zbWltZS1jdC1jb250ZW50SW5mbyIgKi8KLSYobmlkX29ianNbMjA2XSksLyogImlkLXNtaW1lLWN0LXB1Ymxpc2hDZXJ0IiAqLwotJihuaWRfb2Jqc1syMDRdKSwvKiAiaWQtc21pbWUtY3QtcmVjZWlwdCIgKi8KLSYobmlkX29ianNbMTk1XSksLyogImlkLXNtaW1lLWN0aSIgKi8KLSYobmlkX29ianNbMjU1XSksLyogImlkLXNtaW1lLWN0aS1ldHMtcHJvb2ZPZkFwcHJvdmFsIiAqLwotJihuaWRfb2Jqc1syNTZdKSwvKiAiaWQtc21pbWUtY3RpLWV0cy1wcm9vZk9mQ3JlYXRpb24iICovCi0mKG5pZF9vYmpzWzI1M10pLC8qICJpZC1zbWltZS1jdGktZXRzLXByb29mT2ZEZWxpdmVyeSIgKi8KLSYobmlkX29ianNbMjUxXSksLyogImlkLXNtaW1lLWN0aS1ldHMtcHJvb2ZPZk9yaWdpbiIgKi8KLSYobmlkX29ianNbMjUyXSksLyogImlkLXNtaW1lLWN0aS1ldHMtcHJvb2ZPZlJlY2VpcHQiICovCi0mKG5pZF9vYmpzWzI1NF0pLC8qICJpZC1zbWltZS1jdGktZXRzLXByb29mT2ZTZW5kZXIiICovCi0mKG5pZF9vYmpzWzE4OV0pLC8qICJpZC1zbWltZS1tb2QiICovCi0mKG5pZF9vYmpzWzE5Nl0pLC8qICJpZC1zbWltZS1tb2QtY21zIiAqLwotJihuaWRfb2Jqc1sxOTddKSwvKiAiaWQtc21pbWUtbW9kLWVzcyIgKi8KLSYobmlkX29ianNbMjAyXSksLyogImlkLXNtaW1lLW1vZC1ldHMtZVNpZ1BvbGljeS04OCIgKi8KLSYobmlkX29ianNbMjAzXSksLyogImlkLXNtaW1lLW1vZC1ldHMtZVNpZ1BvbGljeS05NyIgKi8KLSYobmlkX29ianNbMjAwXSksLyogImlkLXNtaW1lLW1vZC1ldHMtZVNpZ25hdHVyZS04OCIgKi8KLSYobmlkX29ianNbMjAxXSksLyogImlkLXNtaW1lLW1vZC1ldHMtZVNpZ25hdHVyZS05NyIgKi8KLSYobmlkX29ianNbMTk5XSksLyogImlkLXNtaW1lLW1vZC1tc2ctdjMiICovCi0mKG5pZF9vYmpzWzE5OF0pLC8qICJpZC1zbWltZS1tb2Qtb2lkIiAqLwotJihuaWRfb2Jqc1sxOTRdKSwvKiAiaWQtc21pbWUtc3BxIiAqLwotJihuaWRfb2Jqc1syNTBdKSwvKiAiaWQtc21pbWUtc3BxLWV0cy1zcXQtdW5vdGljZSIgKi8KLSYobmlkX29ianNbMjQ5XSksLyogImlkLXNtaW1lLXNwcS1ldHMtc3F0LXVyaSIgKi8KLSYobmlkX29ianNbMzRdKSwvKiAiaWRlYS1jYmMiICovCi0mKG5pZF9vYmpzWzM1XSksLyogImlkZWEtY2ZiIiAqLwotJihuaWRfb2Jqc1szNl0pLC8qICJpZGVhLWVjYiIgKi8KLSYobmlkX29ianNbNDZdKSwvKiAiaWRlYS1vZmIiICovCi0mKG5pZF9vYmpzWzY3Nl0pLC8qICJpZGVudGlmaWVkLW9yZ2FuaXphdGlvbiIgKi8KLSYobmlkX29ianNbNDYxXSksLyogImluZm8iICovCi0mKG5pZF9vYmpzWzEwMV0pLC8qICJpbml0aWFscyIgKi8KLSYobmlkX29ianNbODY5XSksLyogImludGVybmF0aW9uYWxpU0ROTnVtYmVyIiAqLwotJihuaWRfb2Jqc1s3NDldKSwvKiAiaXBzZWMzIiAqLwotJihuaWRfb2Jqc1s3NTBdKSwvKiAiaXBzZWM0IiAqLwotJihuaWRfb2Jqc1sxODFdKSwvKiAiaXNvIiAqLwotJihuaWRfb2Jqc1s2MjNdKSwvKiAiaXNzdWVyIGNhcGFiaWxpdGllcyIgKi8KLSYobmlkX29ianNbNjQ1XSksLyogIml0dS10IiAqLwotJihuaWRfb2Jqc1s0OTJdKSwvKiAiamFuZXRNYWlsYm94IiAqLwotJihuaWRfb2Jqc1s2NDZdKSwvKiAiam9pbnQtaXNvLWl0dS10IiAqLwotJihuaWRfb2Jqc1sxNTBdKSwvKiAia2V5QmFnIiAqLwotJihuaWRfb2Jqc1s3NzNdKSwvKiAia2lzYSIgKi8KLSYobmlkX29ianNbNDc3XSksLyogImxhc3RNb2RpZmllZEJ5IiAqLwotJihuaWRfb2Jqc1s0NzZdKSwvKiAibGFzdE1vZGlmaWVkVGltZSIgKi8KLSYobmlkX29ianNbMTU3XSksLyogImxvY2FsS2V5SUQiICovCi0mKG5pZF9vYmpzWzE1XSksLyogImxvY2FsaXR5TmFtZSIgKi8KLSYobmlkX29ianNbNDgwXSksLyogIm1YUmVjb3JkIiAqLwotJihuaWRfb2Jqc1s0OTNdKSwvKiAibWFpbFByZWZlcmVuY2VPcHRpb24iICovCi0mKG5pZF9vYmpzWzQ2N10pLC8qICJtYW5hZ2VyIiAqLwotJihuaWRfb2Jqc1sgM10pLC8qICJtZDIiICovCi0mKG5pZF9vYmpzWyA3XSksLyogIm1kMldpdGhSU0FFbmNyeXB0aW9uIiAqLwotJihuaWRfb2Jqc1syNTddKSwvKiAibWQ0IiAqLwotJihuaWRfb2Jqc1szOTZdKSwvKiAibWQ0V2l0aFJTQUVuY3J5cHRpb24iICovCi0mKG5pZF9vYmpzWyA0XSksLyogIm1kNSIgKi8KLSYobmlkX29ianNbMTE0XSksLyogIm1kNS1zaGExIiAqLwotJihuaWRfb2Jqc1sxMDRdKSwvKiAibWQ1V2l0aFJTQSIgKi8KLSYobmlkX29ianNbIDhdKSwvKiAibWQ1V2l0aFJTQUVuY3J5cHRpb24iICovCi0mKG5pZF9vYmpzWzk1XSksLyogIm1kYzIiICovCi0mKG5pZF9vYmpzWzk2XSksLyogIm1kYzJXaXRoUlNBIiAqLwotJihuaWRfb2Jqc1s4NzVdKSwvKiAibWVtYmVyIiAqLwotJihuaWRfb2Jqc1s2MDJdKSwvKiAibWVyY2hhbnQgaW5pdGlhdGVkIGF1dGgiICovCi0mKG5pZF9vYmpzWzUxNF0pLC8qICJtZXNzYWdlIGV4dGVuc2lvbnMiICovCi0mKG5pZF9vYmpzWzUxXSksLyogIm1lc3NhZ2VEaWdlc3QiICovCi0mKG5pZF9vYmpzWzUwNl0pLC8qICJtaW1lLW1ocy1ib2RpZXMiICovCi0mKG5pZF9vYmpzWzUwNV0pLC8qICJtaW1lLW1ocy1oZWFkaW5ncyIgKi8KLSYobmlkX29ianNbNDg4XSksLyogIm1vYmlsZVRlbGVwaG9uZU51bWJlciIgKi8KLSYobmlkX29ianNbNDgxXSksLyogIm5TUmVjb3JkIiAqLwotJihuaWRfb2Jqc1sxNzNdKSwvKiAibmFtZSIgKi8KLSYobmlkX29ianNbNjgxXSksLyogIm9uQmFzaXMiICovCi0mKG5pZF9vYmpzWzM3OV0pLC8qICJvcmciICovCi0mKG5pZF9vYmpzWzE3XSksLyogIm9yZ2FuaXphdGlvbk5hbWUiICovCi0mKG5pZF9vYmpzWzQ5MV0pLC8qICJvcmdhbml6YXRpb25hbFN0YXR1cyIgKi8KLSYobmlkX29ianNbMThdKSwvKiAib3JnYW5pemF0aW9uYWxVbml0TmFtZSIgKi8KLSYobmlkX29ianNbNDc1XSksLyogIm90aGVyTWFpbGJveCIgKi8KLSYobmlkX29ianNbODc2XSksLyogIm93bmVyIiAqLwotJihuaWRfb2Jqc1s0ODldKSwvKiAicGFnZXJUZWxlcGhvbmVOdW1iZXIiICovCi0mKG5pZF9vYmpzWzc4Ml0pLC8qICJwYXNzd29yZCBiYXNlZCBNQUMiICovCi0mKG5pZF9vYmpzWzM3NF0pLC8qICJwYXRoIiAqLwotJihuaWRfb2Jqc1s2MjFdKSwvKiAicGF5bWVudCBnYXRld2F5IGNhcGFiaWxpdGllcyIgKi8KLSYobmlkX29ianNbIDldKSwvKiAicGJlV2l0aE1EMkFuZERFUy1DQkMiICovCi0mKG5pZF9vYmpzWzE2OF0pLC8qICJwYmVXaXRoTUQyQW5kUkMyLUNCQyIgKi8KLSYobmlkX29ianNbMTEyXSksLyogInBiZVdpdGhNRDVBbmRDYXN0NUNCQyIgKi8KLSYobmlkX29ianNbMTBdKSwvKiAicGJlV2l0aE1ENUFuZERFUy1DQkMiICovCi0mKG5pZF9vYmpzWzE2OV0pLC8qICJwYmVXaXRoTUQ1QW5kUkMyLUNCQyIgKi8KLSYobmlkX29ianNbMTQ4XSksLyogInBiZVdpdGhTSEExQW5kMTI4Qml0UkMyLUNCQyIgKi8KLSYobmlkX29ianNbMTQ0XSksLyogInBiZVdpdGhTSEExQW5kMTI4Qml0UkM0IiAqLwotJihuaWRfb2Jqc1sxNDddKSwvKiAicGJlV2l0aFNIQTFBbmQyLUtleVRyaXBsZURFUy1DQkMiICovCi0mKG5pZF9vYmpzWzE0Nl0pLC8qICJwYmVXaXRoU0hBMUFuZDMtS2V5VHJpcGxlREVTLUNCQyIgKi8KLSYobmlkX29ianNbMTQ5XSksLyogInBiZVdpdGhTSEExQW5kNDBCaXRSQzItQ0JDIiAqLwotJihuaWRfb2Jqc1sxNDVdKSwvKiAicGJlV2l0aFNIQTFBbmQ0MEJpdFJDNCIgKi8KLSYobmlkX29ianNbMTcwXSksLyogInBiZVdpdGhTSEExQW5kREVTLUNCQyIgKi8KLSYobmlkX29ianNbNjhdKSwvKiAicGJlV2l0aFNIQTFBbmRSQzItQ0JDIiAqLwotJihuaWRfb2Jqc1s0OTldKSwvKiAicGVyc29uYWxTaWduYXR1cmUiICovCi0mKG5pZF9vYmpzWzQ4N10pLC8qICJwZXJzb25hbFRpdGxlIiAqLwotJihuaWRfb2Jqc1s0NjRdKSwvKiAicGhvdG8iICovCi0mKG5pZF9vYmpzWzg2M10pLC8qICJwaHlzaWNhbERlbGl2ZXJ5T2ZmaWNlTmFtZSIgKi8KLSYobmlkX29ianNbNDM3XSksLyogInBpbG90IiAqLwotJihuaWRfb2Jqc1s0MzldKSwvKiAicGlsb3RBdHRyaWJ1dGVTeW50YXgiICovCi0mKG5pZF9vYmpzWzQzOF0pLC8qICJwaWxvdEF0dHJpYnV0ZVR5cGUiICovCi0mKG5pZF9vYmpzWzQ3OV0pLC8qICJwaWxvdEF0dHJpYnV0ZVR5cGUyNyIgKi8KLSYobmlkX29ianNbNDU2XSksLyogInBpbG90RFNBIiAqLwotJihuaWRfb2Jqc1s0NDFdKSwvKiAicGlsb3RHcm91cHMiICovCi0mKG5pZF9vYmpzWzQ0NF0pLC8qICJwaWxvdE9iamVjdCIgKi8KLSYobmlkX29ianNbNDQwXSksLyogInBpbG90T2JqZWN0Q2xhc3MiICovCi0mKG5pZF9vYmpzWzQ1NV0pLC8qICJwaWxvdE9yZ2FuaXphdGlvbiIgKi8KLSYobmlkX29ianNbNDQ1XSksLyogInBpbG90UGVyc29uIiAqLwotJihuaWRfb2Jqc1sxODZdKSwvKiAicGtjczEiICovCi0mKG5pZF9vYmpzWzI3XSksLyogInBrY3MzIiAqLwotJihuaWRfb2Jqc1sxODddKSwvKiAicGtjczUiICovCi0mKG5pZF9vYmpzWzIwXSksLyogInBrY3M3IiAqLwotJihuaWRfb2Jqc1syMV0pLC8qICJwa2NzNy1kYXRhIiAqLwotJihuaWRfb2Jqc1syNV0pLC8qICJwa2NzNy1kaWdlc3REYXRhIiAqLwotJihuaWRfb2Jqc1syNl0pLC8qICJwa2NzNy1lbmNyeXB0ZWREYXRhIiAqLwotJihuaWRfb2Jqc1syM10pLC8qICJwa2NzNy1lbnZlbG9wZWREYXRhIiAqLwotJihuaWRfb2Jqc1syNF0pLC8qICJwa2NzNy1zaWduZWRBbmRFbnZlbG9wZWREYXRhIiAqLwotJihuaWRfb2Jqc1syMl0pLC8qICJwa2NzNy1zaWduZWREYXRhIiAqLwotJihuaWRfb2Jqc1sxNTFdKSwvKiAicGtjczhTaHJvdWRlZEtleUJhZyIgKi8KLSYobmlkX29ianNbNDddKSwvKiAicGtjczkiICovCi0mKG5pZF9vYmpzWzg2Ml0pLC8qICJwb3N0T2ZmaWNlQm94IiAqLwotJihuaWRfb2Jqc1s4NjFdKSwvKiAicG9zdGFsQWRkcmVzcyIgKi8KLSYobmlkX29ianNbNjYxXSksLyogInBvc3RhbENvZGUiICovCi0mKG5pZF9vYmpzWzY4M10pLC8qICJwcEJhc2lzIiAqLwotJihuaWRfb2Jqc1s4NzJdKSwvKiAicHJlZmVycmVkRGVsaXZlcnlNZXRob2QiICovCi0mKG5pZF9vYmpzWzg3M10pLC8qICJwcmVzZW50YXRpb25BZGRyZXNzIiAqLwotJihuaWRfb2Jqc1s0MDZdKSwvKiAicHJpbWUtZmllbGQiICovCi0mKG5pZF9vYmpzWzQwOV0pLC8qICJwcmltZTE5MnYxIiAqLwotJihuaWRfb2Jqc1s0MTBdKSwvKiAicHJpbWUxOTJ2MiIgKi8KLSYobmlkX29ianNbNDExXSksLyogInByaW1lMTkydjMiICovCi0mKG5pZF9vYmpzWzQxMl0pLC8qICJwcmltZTIzOXYxIiAqLwotJihuaWRfb2Jqc1s0MTNdKSwvKiAicHJpbWUyMzl2MiIgKi8KLSYobmlkX29ianNbNDE0XSksLyogInByaW1lMjM5djMiICovCi0mKG5pZF9vYmpzWzQxNV0pLC8qICJwcmltZTI1NnYxIiAqLwotJihuaWRfb2Jqc1s4ODZdKSwvKiAicHJvdG9jb2xJbmZvcm1hdGlvbiIgKi8KLSYobmlkX29ianNbNTEwXSksLyogInBzZXVkb255bSIgKi8KLSYobmlkX29ianNbNDM1XSksLyogInBzcyIgKi8KLSYobmlkX29ianNbMjg2XSksLyogInFjU3RhdGVtZW50cyIgKi8KLSYobmlkX29ianNbNDU3XSksLyogInF1YWxpdHlMYWJlbGxlZERhdGEiICovCi0mKG5pZF9vYmpzWzQ1MF0pLC8qICJyRkM4MjJsb2NhbFBhcnQiICovCi0mKG5pZF9vYmpzWzk4XSksLyogInJjMi00MC1jYmMiICovCi0mKG5pZF9vYmpzWzE2Nl0pLC8qICJyYzItNjQtY2JjIiAqLwotJihuaWRfb2Jqc1szN10pLC8qICJyYzItY2JjIiAqLwotJihuaWRfb2Jqc1szOV0pLC8qICJyYzItY2ZiIiAqLwotJihuaWRfb2Jqc1szOF0pLC8qICJyYzItZWNiIiAqLwotJihuaWRfb2Jqc1s0MF0pLC8qICJyYzItb2ZiIiAqLwotJihuaWRfb2Jqc1sgNV0pLC8qICJyYzQiICovCi0mKG5pZF9vYmpzWzk3XSksLyogInJjNC00MCIgKi8KLSYobmlkX29ianNbMTIwXSksLyogInJjNS1jYmMiICovCi0mKG5pZF9vYmpzWzEyMl0pLC8qICJyYzUtY2ZiIiAqLwotJihuaWRfb2Jqc1sxMjFdKSwvKiAicmM1LWVjYiIgKi8KLSYobmlkX29ianNbMTIzXSksLyogInJjNS1vZmIiICovCi0mKG5pZF9vYmpzWzg3MF0pLC8qICJyZWdpc3RlcmVkQWRkcmVzcyIgKi8KLSYobmlkX29ianNbNDYwXSksLyogInJmYzgyMk1haWxib3giICovCi0mKG5pZF9vYmpzWzExN10pLC8qICJyaXBlbWQxNjAiICovCi0mKG5pZF9vYmpzWzExOV0pLC8qICJyaXBlbWQxNjBXaXRoUlNBIiAqLwotJihuaWRfb2Jqc1s0MDBdKSwvKiAicm9sZSIgKi8KLSYobmlkX29ianNbODc3XSksLyogInJvbGVPY2N1cGFudCIgKi8KLSYobmlkX29ianNbNDQ4XSksLyogInJvb20iICovCi0mKG5pZF9vYmpzWzQ2M10pLC8qICJyb29tTnVtYmVyIiAqLwotJihuaWRfb2Jqc1sxOV0pLC8qICJyc2EiICovCi0mKG5pZF9vYmpzWyA2XSksLyogInJzYUVuY3J5cHRpb24iICovCi0mKG5pZF9vYmpzWzY0NF0pLC8qICJyc2FPQUVQRW5jcnlwdGlvblNFVCIgKi8KLSYobmlkX29ianNbMzc3XSksLyogInJzYVNpZ25hdHVyZSIgKi8KLSYobmlkX29ianNbMTI0XSksLyogInJ1biBsZW5ndGggY29tcHJlc3Npb24iICovCi0mKG5pZF9vYmpzWzQ4Ml0pLC8qICJzT0FSZWNvcmQiICovCi0mKG5pZF9vYmpzWzE1NV0pLC8qICJzYWZlQ29udGVudHNCYWciICovCi0mKG5pZF9vYmpzWzI5MV0pLC8qICJzYmdwLWF1dG9ub21vdXNTeXNOdW0iICovCi0mKG5pZF9vYmpzWzI5MF0pLC8qICJzYmdwLWlwQWRkckJsb2NrIiAqLwotJihuaWRfb2Jqc1syOTJdKSwvKiAic2JncC1yb3V0ZXJJZGVudGlmaWVyIiAqLwotJihuaWRfb2Jqc1sxNTldKSwvKiAic2RzaUNlcnRpZmljYXRlIiAqLwotJihuaWRfb2Jqc1s4NTldKSwvKiAic2VhcmNoR3VpZGUiICovCi0mKG5pZF9vYmpzWzcwNF0pLC8qICJzZWNwMTEycjEiICovCi0mKG5pZF9vYmpzWzcwNV0pLC8qICJzZWNwMTEycjIiICovCi0mKG5pZF9vYmpzWzcwNl0pLC8qICJzZWNwMTI4cjEiICovCi0mKG5pZF9vYmpzWzcwN10pLC8qICJzZWNwMTI4cjIiICovCi0mKG5pZF9vYmpzWzcwOF0pLC8qICJzZWNwMTYwazEiICovCi0mKG5pZF9vYmpzWzcwOV0pLC8qICJzZWNwMTYwcjEiICovCi0mKG5pZF9vYmpzWzcxMF0pLC8qICJzZWNwMTYwcjIiICovCi0mKG5pZF9vYmpzWzcxMV0pLC8qICJzZWNwMTkyazEiICovCi0mKG5pZF9vYmpzWzcxMl0pLC8qICJzZWNwMjI0azEiICovCi0mKG5pZF9vYmpzWzcxM10pLC8qICJzZWNwMjI0cjEiICovCi0mKG5pZF9vYmpzWzcxNF0pLC8qICJzZWNwMjU2azEiICovCi0mKG5pZF9vYmpzWzcxNV0pLC8qICJzZWNwMzg0cjEiICovCi0mKG5pZF9vYmpzWzcxNl0pLC8qICJzZWNwNTIxcjEiICovCi0mKG5pZF9vYmpzWzE1NF0pLC8qICJzZWNyZXRCYWciICovCi0mKG5pZF9vYmpzWzQ3NF0pLC8qICJzZWNyZXRhcnkiICovCi0mKG5pZF9vYmpzWzcxN10pLC8qICJzZWN0MTEzcjEiICovCi0mKG5pZF9vYmpzWzcxOF0pLC8qICJzZWN0MTEzcjIiICovCi0mKG5pZF9vYmpzWzcxOV0pLC8qICJzZWN0MTMxcjEiICovCi0mKG5pZF9vYmpzWzcyMF0pLC8qICJzZWN0MTMxcjIiICovCi0mKG5pZF9vYmpzWzcyMV0pLC8qICJzZWN0MTYzazEiICovCi0mKG5pZF9vYmpzWzcyMl0pLC8qICJzZWN0MTYzcjEiICovCi0mKG5pZF9vYmpzWzcyM10pLC8qICJzZWN0MTYzcjIiICovCi0mKG5pZF9vYmpzWzcyNF0pLC8qICJzZWN0MTkzcjEiICovCi0mKG5pZF9vYmpzWzcyNV0pLC8qICJzZWN0MTkzcjIiICovCi0mKG5pZF9vYmpzWzcyNl0pLC8qICJzZWN0MjMzazEiICovCi0mKG5pZF9vYmpzWzcyN10pLC8qICJzZWN0MjMzcjEiICovCi0mKG5pZF9vYmpzWzcyOF0pLC8qICJzZWN0MjM5azEiICovCi0mKG5pZF9vYmpzWzcyOV0pLC8qICJzZWN0MjgzazEiICovCi0mKG5pZF9vYmpzWzczMF0pLC8qICJzZWN0MjgzcjEiICovCi0mKG5pZF9vYmpzWzczMV0pLC8qICJzZWN0NDA5azEiICovCi0mKG5pZF9vYmpzWzczMl0pLC8qICJzZWN0NDA5cjEiICovCi0mKG5pZF9vYmpzWzczM10pLC8qICJzZWN0NTcxazEiICovCi0mKG5pZF9vYmpzWzczNF0pLC8qICJzZWN0NTcxcjEiICovCi0mKG5pZF9vYmpzWzYzNV0pLC8qICJzZWN1cmUgZGV2aWNlIHNpZ25hdHVyZSIgKi8KLSYobmlkX29ianNbODc4XSksLyogInNlZUFsc28iICovCi0mKG5pZF9vYmpzWzc3N10pLC8qICJzZWVkLWNiYyIgKi8KLSYobmlkX29ianNbNzc5XSksLyogInNlZWQtY2ZiIiAqLwotJihuaWRfb2Jqc1s3NzZdKSwvKiAic2VlZC1lY2IiICovCi0mKG5pZF9vYmpzWzc3OF0pLC8qICJzZWVkLW9mYiIgKi8KLSYobmlkX29ianNbMTA1XSksLyogInNlcmlhbE51bWJlciIgKi8KLSYobmlkX29ianNbNjI1XSksLyogInNldC1hZGRQb2xpY3kiICovCi0mKG5pZF9vYmpzWzUxNV0pLC8qICJzZXQtYXR0ciIgKi8KLSYobmlkX29ianNbNTE4XSksLyogInNldC1icmFuZCIgKi8KLSYobmlkX29ianNbNjM4XSksLyogInNldC1icmFuZC1BbWVyaWNhbkV4cHJlc3MiICovCi0mKG5pZF9vYmpzWzYzN10pLC8qICJzZXQtYnJhbmQtRGluZXJzIiAqLwotJihuaWRfb2Jqc1s2MzZdKSwvKiAic2V0LWJyYW5kLUlBVEEtQVRBIiAqLwotJihuaWRfb2Jqc1s2MzldKSwvKiAic2V0LWJyYW5kLUpDQiIgKi8KLSYobmlkX29ianNbNjQxXSksLyogInNldC1icmFuZC1NYXN0ZXJDYXJkIiAqLwotJihuaWRfb2Jqc1s2NDJdKSwvKiAic2V0LWJyYW5kLU5vdnVzIiAqLwotJihuaWRfb2Jqc1s2NDBdKSwvKiAic2V0LWJyYW5kLVZpc2EiICovCi0mKG5pZF9vYmpzWzUxNl0pLC8qICJzZXQtcG9saWN5IiAqLwotJihuaWRfb2Jqc1s2MDddKSwvKiAic2V0LXBvbGljeS1yb290IiAqLwotJihuaWRfb2Jqc1s2MjRdKSwvKiAic2V0LXJvb3RLZXlUaHVtYiIgKi8KLSYobmlkX29ianNbNjIwXSksLyogInNldEF0dHItQ2VydCIgKi8KLSYobmlkX29ianNbNjI4XSksLyogInNldEF0dHItSXNzQ2FwLUNWTSIgKi8KLSYobmlkX29ianNbNjMwXSksLyogInNldEF0dHItSXNzQ2FwLVNpZyIgKi8KLSYobmlkX29ianNbNjI5XSksLyogInNldEF0dHItSXNzQ2FwLVQyIiAqLwotJihuaWRfb2Jqc1s2MjddKSwvKiAic2V0QXR0ci1Ub2tlbi1CMFByaW1lIiAqLwotJihuaWRfb2Jqc1s2MjZdKSwvKiAic2V0QXR0ci1Ub2tlbi1FTVYiICovCi0mKG5pZF9vYmpzWzYyMl0pLC8qICJzZXRBdHRyLVRva2VuVHlwZSIgKi8KLSYobmlkX29ianNbNjE5XSksLyogInNldENleHQtSXNzdWVyQ2FwYWJpbGl0aWVzIiAqLwotJihuaWRfb2Jqc1s2MTVdKSwvKiAic2V0Q2V4dC1QR1dZY2FwYWJpbGl0aWVzIiAqLwotJihuaWRfb2Jqc1s2MTZdKSwvKiAic2V0Q2V4dC1Ub2tlbklkZW50aWZpZXIiICovCi0mKG5pZF9vYmpzWzYxOF0pLC8qICJzZXRDZXh0LVRva2VuVHlwZSIgKi8KLSYobmlkX29ianNbNjE3XSksLyogInNldENleHQtVHJhY2syRGF0YSIgKi8KLSYobmlkX29ianNbNjExXSksLyogInNldENleHQtY0NlcnRSZXF1aXJlZCIgKi8KLSYobmlkX29ianNbNjA5XSksLyogInNldENleHQtY2VydFR5cGUiICovCi0mKG5pZF9vYmpzWzYwOF0pLC8qICJzZXRDZXh0LWhhc2hlZFJvb3QiICovCi0mKG5pZF9vYmpzWzYxMF0pLC8qICJzZXRDZXh0LW1lcmNoRGF0YSIgKi8KLSYobmlkX29ianNbNjEzXSksLyogInNldENleHQtc2V0RXh0IiAqLwotJihuaWRfb2Jqc1s2MTRdKSwvKiAic2V0Q2V4dC1zZXRRdWFsZiIgKi8KLSYobmlkX29ianNbNjEyXSksLyogInNldENleHQtdHVubmVsaW5nIiAqLwotJihuaWRfb2Jqc1s1NDBdKSwvKiAic2V0Y3QtQWNxQ2FyZENvZGVNc2ciICovCi0mKG5pZF9vYmpzWzU3Nl0pLC8qICJzZXRjdC1BY3FDYXJkQ29kZU1zZ1RCRSIgKi8KLSYobmlkX29ianNbNTcwXSksLyogInNldGN0LUF1dGhSZXFUQkUiICovCi0mKG5pZF9vYmpzWzUzNF0pLC8qICJzZXRjdC1BdXRoUmVxVEJTIiAqLwotJihuaWRfb2Jqc1s1MjddKSwvKiAic2V0Y3QtQXV0aFJlc0JhZ2dhZ2UiICovCi0mKG5pZF9vYmpzWzU3MV0pLC8qICJzZXRjdC1BdXRoUmVzVEJFIiAqLwotJihuaWRfb2Jqc1s1NzJdKSwvKiAic2V0Y3QtQXV0aFJlc1RCRVgiICovCi0mKG5pZF9vYmpzWzUzNV0pLC8qICJzZXRjdC1BdXRoUmVzVEJTIiAqLwotJihuaWRfb2Jqc1s1MzZdKSwvKiAic2V0Y3QtQXV0aFJlc1RCU1giICovCi0mKG5pZF9vYmpzWzUyOF0pLC8qICJzZXRjdC1BdXRoUmV2UmVxQmFnZ2FnZSIgKi8KLSYobmlkX29ianNbNTc3XSksLyogInNldGN0LUF1dGhSZXZSZXFUQkUiICovCi0mKG5pZF9vYmpzWzU0MV0pLC8qICJzZXRjdC1BdXRoUmV2UmVxVEJTIiAqLwotJihuaWRfb2Jqc1s1MjldKSwvKiAic2V0Y3QtQXV0aFJldlJlc0JhZ2dhZ2UiICovCi0mKG5pZF9vYmpzWzU0Ml0pLC8qICJzZXRjdC1BdXRoUmV2UmVzRGF0YSIgKi8KLSYobmlkX29ianNbNTc4XSksLyogInNldGN0LUF1dGhSZXZSZXNUQkUiICovCi0mKG5pZF9vYmpzWzU3OV0pLC8qICJzZXRjdC1BdXRoUmV2UmVzVEJFQiIgKi8KLSYobmlkX29ianNbNTQzXSksLyogInNldGN0LUF1dGhSZXZSZXNUQlMiICovCi0mKG5pZF9vYmpzWzU3M10pLC8qICJzZXRjdC1BdXRoVG9rZW5UQkUiICovCi0mKG5pZF9vYmpzWzUzN10pLC8qICJzZXRjdC1BdXRoVG9rZW5UQlMiICovCi0mKG5pZF9vYmpzWzYwMF0pLC8qICJzZXRjdC1CQ0lEaXN0cmlidXRpb25UQlMiICovCi0mKG5pZF9vYmpzWzU1OF0pLC8qICJzZXRjdC1CYXRjaEFkbWluUmVxRGF0YSIgKi8KLSYobmlkX29ianNbNTkyXSksLyogInNldGN0LUJhdGNoQWRtaW5SZXFUQkUiICovCi0mKG5pZF9vYmpzWzU1OV0pLC8qICJzZXRjdC1CYXRjaEFkbWluUmVzRGF0YSIgKi8KLSYobmlkX29ianNbNTkzXSksLyogInNldGN0LUJhdGNoQWRtaW5SZXNUQkUiICovCi0mKG5pZF9vYmpzWzU5OV0pLC8qICJzZXRjdC1DUkxOb3RpZmljYXRpb25SZXNUQlMiICovCi0mKG5pZF9vYmpzWzU5OF0pLC8qICJzZXRjdC1DUkxOb3RpZmljYXRpb25UQlMiICovCi0mKG5pZF9vYmpzWzU4MF0pLC8qICJzZXRjdC1DYXBSZXFUQkUiICovCi0mKG5pZF9vYmpzWzU4MV0pLC8qICJzZXRjdC1DYXBSZXFUQkVYIiAqLwotJihuaWRfb2Jqc1s1NDRdKSwvKiAic2V0Y3QtQ2FwUmVxVEJTIiAqLwotJihuaWRfb2Jqc1s1NDVdKSwvKiAic2V0Y3QtQ2FwUmVxVEJTWCIgKi8KLSYobmlkX29ianNbNTQ2XSksLyogInNldGN0LUNhcFJlc0RhdGEiICovCi0mKG5pZF9vYmpzWzU4Ml0pLC8qICJzZXRjdC1DYXBSZXNUQkUiICovCi0mKG5pZF9vYmpzWzU4M10pLC8qICJzZXRjdC1DYXBSZXZSZXFUQkUiICovCi0mKG5pZF9vYmpzWzU4NF0pLC8qICJzZXRjdC1DYXBSZXZSZXFUQkVYIiAqLwotJihuaWRfb2Jqc1s1NDddKSwvKiAic2V0Y3QtQ2FwUmV2UmVxVEJTIiAqLwotJihuaWRfb2Jqc1s1NDhdKSwvKiAic2V0Y3QtQ2FwUmV2UmVxVEJTWCIgKi8KLSYobmlkX29ianNbNTQ5XSksLyogInNldGN0LUNhcFJldlJlc0RhdGEiICovCi0mKG5pZF9vYmpzWzU4NV0pLC8qICJzZXRjdC1DYXBSZXZSZXNUQkUiICovCi0mKG5pZF9vYmpzWzUzOF0pLC8qICJzZXRjdC1DYXBUb2tlbkRhdGEiICovCi0mKG5pZF9vYmpzWzUzMF0pLC8qICJzZXRjdC1DYXBUb2tlblNlcSIgKi8KLSYobmlkX29ianNbNTc0XSksLyogInNldGN0LUNhcFRva2VuVEJFIiAqLwotJihuaWRfb2Jqc1s1NzVdKSwvKiAic2V0Y3QtQ2FwVG9rZW5UQkVYIiAqLwotJihuaWRfb2Jqc1s1MzldKSwvKiAic2V0Y3QtQ2FwVG9rZW5UQlMiICovCi0mKG5pZF9vYmpzWzU2MF0pLC8qICJzZXRjdC1DYXJkQ0luaXRSZXNUQlMiICovCi0mKG5pZF9vYmpzWzU2Nl0pLC8qICJzZXRjdC1DZXJ0SW5xUmVxVEJTIiAqLwotJihuaWRfb2Jqc1s1NjNdKSwvKiAic2V0Y3QtQ2VydFJlcURhdGEiICovCi0mKG5pZF9vYmpzWzU5NV0pLC8qICJzZXRjdC1DZXJ0UmVxVEJFIiAqLwotJihuaWRfb2Jqc1s1OTZdKSwvKiAic2V0Y3QtQ2VydFJlcVRCRVgiICovCi0mKG5pZF9vYmpzWzU2NF0pLC8qICJzZXRjdC1DZXJ0UmVxVEJTIiAqLwotJihuaWRfb2Jqc1s1NjVdKSwvKiAic2V0Y3QtQ2VydFJlc0RhdGEiICovCi0mKG5pZF9vYmpzWzU5N10pLC8qICJzZXRjdC1DZXJ0UmVzVEJFIiAqLwotJihuaWRfb2Jqc1s1ODZdKSwvKiAic2V0Y3QtQ3JlZFJlcVRCRSIgKi8KLSYobmlkX29ianNbNTg3XSksLyogInNldGN0LUNyZWRSZXFUQkVYIiAqLwotJihuaWRfb2Jqc1s1NTBdKSwvKiAic2V0Y3QtQ3JlZFJlcVRCUyIgKi8KLSYobmlkX29ianNbNTUxXSksLyogInNldGN0LUNyZWRSZXFUQlNYIiAqLwotJihuaWRfb2Jqc1s1NTJdKSwvKiAic2V0Y3QtQ3JlZFJlc0RhdGEiICovCi0mKG5pZF9vYmpzWzU4OF0pLC8qICJzZXRjdC1DcmVkUmVzVEJFIiAqLwotJihuaWRfb2Jqc1s1ODldKSwvKiAic2V0Y3QtQ3JlZFJldlJlcVRCRSIgKi8KLSYobmlkX29ianNbNTkwXSksLyogInNldGN0LUNyZWRSZXZSZXFUQkVYIiAqLwotJihuaWRfb2Jqc1s1NTNdKSwvKiAic2V0Y3QtQ3JlZFJldlJlcVRCUyIgKi8KLSYobmlkX29ianNbNTU0XSksLyogInNldGN0LUNyZWRSZXZSZXFUQlNYIiAqLwotJihuaWRfb2Jqc1s1NTVdKSwvKiAic2V0Y3QtQ3JlZFJldlJlc0RhdGEiICovCi0mKG5pZF9vYmpzWzU5MV0pLC8qICJzZXRjdC1DcmVkUmV2UmVzVEJFIiAqLwotJihuaWRfb2Jqc1s1NjddKSwvKiAic2V0Y3QtRXJyb3JUQlMiICovCi0mKG5pZF9vYmpzWzUyNl0pLC8qICJzZXRjdC1IT0RJbnB1dCIgKi8KLSYobmlkX29ianNbNTYxXSksLyogInNldGN0LU1lQXFDSW5pdFJlc1RCUyIgKi8KLSYobmlkX29ianNbNTIyXSksLyogInNldGN0LU9JRGF0YSIgKi8KLSYobmlkX29ianNbNTE5XSksLyogInNldGN0LVBBTkRhdGEiICovCi0mKG5pZF9vYmpzWzUyMV0pLC8qICJzZXRjdC1QQU5Pbmx5IiAqLwotJihuaWRfb2Jqc1s1MjBdKSwvKiAic2V0Y3QtUEFOVG9rZW4iICovCi0mKG5pZF9vYmpzWzU1Nl0pLC8qICJzZXRjdC1QQ2VydFJlcURhdGEiICovCi0mKG5pZF9vYmpzWzU1N10pLC8qICJzZXRjdC1QQ2VydFJlc1RCUyIgKi8KLSYobmlkX29ianNbNTIzXSksLyogInNldGN0LVBJIiAqLwotJihuaWRfb2Jqc1s1MzJdKSwvKiAic2V0Y3QtUEktVEJTIiAqLwotJihuaWRfb2Jqc1s1MjRdKSwvKiAic2V0Y3QtUElEYXRhIiAqLwotJihuaWRfb2Jqc1s1MjVdKSwvKiAic2V0Y3QtUElEYXRhVW5zaWduZWQiICovCi0mKG5pZF9vYmpzWzU2OF0pLC8qICJzZXRjdC1QSUR1YWxTaWduZWRUQkUiICovCi0mKG5pZF9vYmpzWzU2OV0pLC8qICJzZXRjdC1QSVVuc2lnbmVkVEJFIiAqLwotJihuaWRfb2Jqc1s1MzFdKSwvKiAic2V0Y3QtUEluaXRSZXNEYXRhIiAqLwotJihuaWRfb2Jqc1s1MzNdKSwvKiAic2V0Y3QtUFJlc0RhdGEiICovCi0mKG5pZF9vYmpzWzU5NF0pLC8qICJzZXRjdC1SZWdGb3JtUmVxVEJFIiAqLwotJihuaWRfb2Jqc1s1NjJdKSwvKiAic2V0Y3QtUmVnRm9ybVJlc1RCUyIgKi8KLSYobmlkX29ianNbNjA0XSksLyogInNldGV4dC1waW5BbnkiICovCi0mKG5pZF9vYmpzWzYwM10pLC8qICJzZXRleHQtcGluU2VjdXJlIiAqLwotJihuaWRfb2Jqc1s2MDVdKSwvKiAic2V0ZXh0LXRyYWNrMiIgKi8KLSYobmlkX29ianNbNDFdKSwvKiAic2hhIiAqLwotJihuaWRfb2Jqc1s2NF0pLC8qICJzaGExIiAqLwotJihuaWRfb2Jqc1sxMTVdKSwvKiAic2hhMVdpdGhSU0EiICovCi0mKG5pZF9vYmpzWzY1XSksLyogInNoYTFXaXRoUlNBRW5jcnlwdGlvbiIgKi8KLSYobmlkX29ianNbNjc1XSksLyogInNoYTIyNCIgKi8KLSYobmlkX29ianNbNjcxXSksLyogInNoYTIyNFdpdGhSU0FFbmNyeXB0aW9uIiAqLwotJihuaWRfb2Jqc1s2NzJdKSwvKiAic2hhMjU2IiAqLwotJihuaWRfb2Jqc1s2NjhdKSwvKiAic2hhMjU2V2l0aFJTQUVuY3J5cHRpb24iICovCi0mKG5pZF9vYmpzWzY3M10pLC8qICJzaGEzODQiICovCi0mKG5pZF9vYmpzWzY2OV0pLC8qICJzaGEzODRXaXRoUlNBRW5jcnlwdGlvbiIgKi8KLSYobmlkX29ianNbNjc0XSksLyogInNoYTUxMiIgKi8KLSYobmlkX29ianNbNjcwXSksLyogInNoYTUxMldpdGhSU0FFbmNyeXB0aW9uIiAqLwotJihuaWRfb2Jqc1s0Ml0pLC8qICJzaGFXaXRoUlNBRW5jcnlwdGlvbiIgKi8KLSYobmlkX29ianNbNTJdKSwvKiAic2lnbmluZ1RpbWUiICovCi0mKG5pZF9vYmpzWzQ1NF0pLC8qICJzaW1wbGVTZWN1cml0eU9iamVjdCIgKi8KLSYobmlkX29ianNbNDk2XSksLyogInNpbmdsZUxldmVsUXVhbGl0eSIgKi8KLSYobmlkX29ianNbMTZdKSwvKiAic3RhdGVPclByb3ZpbmNlTmFtZSIgKi8KLSYobmlkX29ianNbNjYwXSksLyogInN0cmVldEFkZHJlc3MiICovCi0mKG5pZF9vYmpzWzQ5OF0pLC8qICJzdWJ0cmVlTWF4aW11bVF1YWxpdHkiICovCi0mKG5pZF9vYmpzWzQ5N10pLC8qICJzdWJ0cmVlTWluaW11bVF1YWxpdHkiICovCi0mKG5pZF9vYmpzWzg5MF0pLC8qICJzdXBwb3J0ZWRBbGdvcml0aG1zIiAqLwotJihuaWRfb2Jqc1s4NzRdKSwvKiAic3VwcG9ydGVkQXBwbGljYXRpb25Db250ZXh0IiAqLwotJihuaWRfb2Jqc1sxMDBdKSwvKiAic3VybmFtZSIgKi8KLSYobmlkX29ianNbODY0XSksLyogInRlbGVwaG9uZU51bWJlciIgKi8KLSYobmlkX29ianNbODY2XSksLyogInRlbGV0ZXhUZXJtaW5hbElkZW50aWZpZXIiICovCi0mKG5pZF9vYmpzWzg2NV0pLC8qICJ0ZWxleE51bWJlciIgKi8KLSYobmlkX29ianNbNDU5XSksLyogInRleHRFbmNvZGVkT1JBZGRyZXNzIiAqLwotJihuaWRfb2Jqc1syOTNdKSwvKiAidGV4dE5vdGljZSIgKi8KLSYobmlkX29ianNbMTA2XSksLyogInRpdGxlIiAqLwotJihuaWRfb2Jqc1s2ODJdKSwvKiAidHBCYXNpcyIgKi8KLSYobmlkX29ianNbNDM2XSksLyogInVjbCIgKi8KLSYobmlkX29ianNbIDBdKSwvKiAidW5kZWZpbmVkIiAqLwotJihuaWRfb2Jqc1s4ODhdKSwvKiAidW5pcXVlTWVtYmVyIiAqLwotJihuaWRfb2Jqc1s1NV0pLC8qICJ1bnN0cnVjdHVyZWRBZGRyZXNzIiAqLwotJihuaWRfb2Jqc1s0OV0pLC8qICJ1bnN0cnVjdHVyZWROYW1lIiAqLwotJihuaWRfb2Jqc1s4ODBdKSwvKiAidXNlckNlcnRpZmljYXRlIiAqLwotJihuaWRfb2Jqc1s0NjVdKSwvKiAidXNlckNsYXNzIiAqLwotJihuaWRfb2Jqc1s0NThdKSwvKiAidXNlcklkIiAqLwotJihuaWRfb2Jqc1s4NzldKSwvKiAidXNlclBhc3N3b3JkIiAqLwotJihuaWRfb2Jqc1szNzNdKSwvKiAidmFsaWQiICovCi0mKG5pZF9vYmpzWzY3OF0pLC8qICJ3YXAiICovCi0mKG5pZF9vYmpzWzY3OV0pLC8qICJ3YXAtd3NnIiAqLwotJihuaWRfb2Jqc1s3MzVdKSwvKiAid2FwLXdzZy1pZG0tZWNpZC13dGxzMSIgKi8KLSYobmlkX29ianNbNzQzXSksLyogIndhcC13c2ctaWRtLWVjaWQtd3RsczEwIiAqLwotJihuaWRfb2Jqc1s3NDRdKSwvKiAid2FwLXdzZy1pZG0tZWNpZC13dGxzMTEiICovCi0mKG5pZF9vYmpzWzc0NV0pLC8qICJ3YXAtd3NnLWlkbS1lY2lkLXd0bHMxMiIgKi8KLSYobmlkX29ianNbNzM2XSksLyogIndhcC13c2ctaWRtLWVjaWQtd3RsczMiICovCi0mKG5pZF9vYmpzWzczN10pLC8qICJ3YXAtd3NnLWlkbS1lY2lkLXd0bHM0IiAqLwotJihuaWRfb2Jqc1s3MzhdKSwvKiAid2FwLXdzZy1pZG0tZWNpZC13dGxzNSIgKi8KLSYobmlkX29ianNbNzM5XSksLyogIndhcC13c2ctaWRtLWVjaWQtd3RsczYiICovCi0mKG5pZF9vYmpzWzc0MF0pLC8qICJ3YXAtd3NnLWlkbS1lY2lkLXd0bHM3IiAqLwotJihuaWRfb2Jqc1s3NDFdKSwvKiAid2FwLXdzZy1pZG0tZWNpZC13dGxzOCIgKi8KLSYobmlkX29ianNbNzQyXSksLyogIndhcC13c2ctaWRtLWVjaWQtd3RsczkiICovCi0mKG5pZF9vYmpzWzgwNF0pLC8qICJ3aGlybHBvb2wiICovCi0mKG5pZF9vYmpzWzg2OF0pLC8qICJ4MTIxQWRkcmVzcyIgKi8KLSYobmlkX29ianNbNTAzXSksLyogIng1MDBVbmlxdWVJZGVudGlmaWVyIiAqLwotJihuaWRfb2Jqc1sxNThdKSwvKiAieDUwOUNlcnRpZmljYXRlIiAqLwotJihuaWRfb2Jqc1sxNjBdKSwvKiAieDUwOUNybCIgKi8KLSYobmlkX29ianNbMTI1XSksLyogInpsaWIgY29tcHJlc3Npb24iICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGxuX29ianNbTlVNX0xOXT17CiszNjMsCS8qICJBRCBUaW1lIFN0YW1waW5nIiAqLworNDA1LAkvKiAiQU5TSSBYOS42MiIgKi8KKzM2OCwJLyogIkFjY2VwdGFibGUgT0NTUCBSZXNwb25zZXMiICovCis2NjQsCS8qICJBbnkgbGFuZ3VhZ2UiICovCisxNzcsCS8qICJBdXRob3JpdHkgSW5mb3JtYXRpb24gQWNjZXNzIiAqLworMzY1LAkvKiAiQmFzaWMgT0NTUCBSZXNwb25zZSIgKi8KKzI4NSwJLyogIkJpb21ldHJpYyBJbmZvIiAqLworMTc5LAkvKiAiQ0EgSXNzdWVycyIgKi8KKzc4NSwJLyogIkNBIFJlcG9zaXRvcnkiICovCisxMzEsCS8qICJDb2RlIFNpZ25pbmciICovCis3ODMsCS8qICJEaWZmaWUtSGVsbG1hbiBiYXNlZCBNQUMiICovCiszODIsCS8qICJEaXJlY3RvcnkiICovCiszOTIsCS8qICJEb21haW4iICovCisxMzIsCS8qICJFLW1haWwgUHJvdGVjdGlvbiIgKi8KKzM4OSwJLyogIkVudGVycHJpc2VzIiAqLworMzg0LAkvKiAiRXhwZXJpbWVudGFsIiAqLworMzcyLAkvKiAiRXh0ZW5kZWQgT0NTUCBTdGF0dXMiICovCisxNzIsCS8qICJFeHRlbnNpb24gUmVxdWVzdCIgKi8KKzgxMywJLyogIkdPU1QgMjgxNDctODkiICovCis4NDksCS8qICJHT1NUIDI4MTQ3LTg5IENyeXB0b2NvbSBQYXJhbVNldCIgKi8KKzgxNSwJLyogIkdPU1QgMjgxNDctODkgTUFDIiAqLworODUxLAkvKiAiR09TVCAzNC4xMC0yMDAxIENyeXB0b2NvbSIgKi8KKzg1MCwJLyogIkdPU1QgMzQuMTAtOTQgQ3J5cHRvY29tIiAqLworODExLAkvKiAiR09TVCBSIDM0LjEwLTIwMDEiICovCis4MTcsCS8qICJHT1NUIFIgMzQuMTAtMjAwMSBESCIgKi8KKzgxMiwJLyogIkdPU1QgUiAzNC4xMC05NCIgKi8KKzgxOCwJLyogIkdPU1QgUiAzNC4xMC05NCBESCIgKi8KKzgwOSwJLyogIkdPU1QgUiAzNC4xMS05NCIgKi8KKzgxNiwJLyogIkdPU1QgUiAzNC4xMS05NCBQUkYiICovCis4MDcsCS8qICJHT1NUIFIgMzQuMTEtOTQgd2l0aCBHT1NUIFIgMzQuMTAtMjAwMSIgKi8KKzg1MywJLyogIkdPU1QgUiAzNC4xMS05NCB3aXRoIEdPU1QgUiAzNC4xMC0yMDAxIENyeXB0b2NvbSIgKi8KKzgwOCwJLyogIkdPU1QgUiAzNC4xMS05NCB3aXRoIEdPU1QgUiAzNC4xMC05NCIgKi8KKzg1MiwJLyogIkdPU1QgUiAzNC4xMS05NCB3aXRoIEdPU1QgUiAzNC4xMC05NCBDcnlwdG9jb20iICovCis4NTQsCS8qICJHT1NUIFIgMzQxMC0yMDAxIFBhcmFtZXRlciBTZXQgQ3J5cHRvY29tIiAqLworODEwLAkvKiAiSE1BQyBHT1NUIDM0LjExLTk0IiAqLworNDMyLAkvKiAiSG9sZCBJbnN0cnVjdGlvbiBDYWxsIElzc3VlciIgKi8KKzQzMCwJLyogIkhvbGQgSW5zdHJ1Y3Rpb24gQ29kZSIgKi8KKzQzMSwJLyogIkhvbGQgSW5zdHJ1Y3Rpb24gTm9uZSIgKi8KKzQzMywJLyogIkhvbGQgSW5zdHJ1Y3Rpb24gUmVqZWN0IiAqLworNjM0LAkvKiAiSUNDIG9yIHRva2VuIHNpZ25hdHVyZSIgKi8KKzI5NCwJLyogIklQU2VjIEVuZCBTeXN0ZW0iICovCisyOTUsCS8qICJJUFNlYyBUdW5uZWwiICovCisyOTYsCS8qICJJUFNlYyBVc2VyIiAqLworMTgyLAkvKiAiSVNPIE1lbWJlciBCb2R5IiAqLworMTgzLAkvKiAiSVNPIFVTIE1lbWJlciBCb2R5IiAqLworNjY3LAkvKiAiSW5kZXBlbmRlbnQiICovCis2NjUsCS8qICJJbmhlcml0IGFsbCIgKi8KKzY0NywJLyogIkludGVybmF0aW9uYWwgT3JnYW5pemF0aW9ucyIgKi8KKzE0MiwJLyogIkludmFsaWRpdHkgRGF0ZSIgKi8KKzUwNCwJLyogIk1JTUUgTUhTIiAqLworMzg4LAkvKiAiTWFpbCIgKi8KKzM4MywJLyogIk1hbmFnZW1lbnQiICovCis0MTcsCS8qICJNaWNyb3NvZnQgQ1NQIE5hbWUiICovCisxMzUsCS8qICJNaWNyb3NvZnQgQ29tbWVyY2lhbCBDb2RlIFNpZ25pbmciICovCisxMzgsCS8qICJNaWNyb3NvZnQgRW5jcnlwdGVkIEZpbGUgU3lzdGVtIiAqLworMTcxLAkvKiAiTWljcm9zb2Z0IEV4dGVuc2lvbiBSZXF1ZXN0IiAqLworMTM0LAkvKiAiTWljcm9zb2Z0IEluZGl2aWR1YWwgQ29kZSBTaWduaW5nIiAqLworODU2LAkvKiAiTWljcm9zb2Z0IExvY2FsIEtleSBzZXQiICovCisxMzcsCS8qICJNaWNyb3NvZnQgU2VydmVyIEdhdGVkIENyeXB0byIgKi8KKzY0OCwJLyogIk1pY3Jvc29mdCBTbWFydGNhcmRsb2dpbiIgKi8KKzEzNiwJLyogIk1pY3Jvc29mdCBUcnVzdCBMaXN0IFNpZ25pbmciICovCis2NDksCS8qICJNaWNyb3NvZnQgVW5pdmVyc2FsIFByaW5jaXBhbCBOYW1lIiAqLworMzkzLAkvKiAiTlVMTCIgKi8KKzQwNCwJLyogIk5VTEwiICovCis3MiwJLyogIk5ldHNjYXBlIEJhc2UgVXJsIiAqLworNzYsCS8qICJOZXRzY2FwZSBDQSBQb2xpY3kgVXJsIiAqLworNzQsCS8qICJOZXRzY2FwZSBDQSBSZXZvY2F0aW9uIFVybCIgKi8KKzcxLAkvKiAiTmV0c2NhcGUgQ2VydCBUeXBlIiAqLworNTgsCS8qICJOZXRzY2FwZSBDZXJ0aWZpY2F0ZSBFeHRlbnNpb24iICovCis3OSwJLyogIk5ldHNjYXBlIENlcnRpZmljYXRlIFNlcXVlbmNlIiAqLworNzgsCS8qICJOZXRzY2FwZSBDb21tZW50IiAqLworNTcsCS8qICJOZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3JwLiIgKi8KKzU5LAkvKiAiTmV0c2NhcGUgRGF0YSBUeXBlIiAqLworNzUsCS8qICJOZXRzY2FwZSBSZW5ld2FsIFVybCIgKi8KKzczLAkvKiAiTmV0c2NhcGUgUmV2b2NhdGlvbiBVcmwiICovCis3NywJLyogIk5ldHNjYXBlIFNTTCBTZXJ2ZXIgTmFtZSIgKi8KKzEzOSwJLyogIk5ldHNjYXBlIFNlcnZlciBHYXRlZCBDcnlwdG8iICovCisxNzgsCS8qICJPQ1NQIiAqLworMzcwLAkvKiAiT0NTUCBBcmNoaXZlIEN1dG9mZiIgKi8KKzM2NywJLyogIk9DU1AgQ1JMIElEIiAqLworMzY5LAkvKiAiT0NTUCBObyBDaGVjayIgKi8KKzM2NiwJLyogIk9DU1AgTm9uY2UiICovCiszNzEsCS8qICJPQ1NQIFNlcnZpY2UgTG9jYXRvciIgKi8KKzE4MCwJLyogIk9DU1AgU2lnbmluZyIgKi8KKzE2MSwJLyogIlBCRVMyIiAqLworNjksCS8qICJQQktERjIiICovCisxNjIsCS8qICJQQk1BQzEiICovCisxMjcsCS8qICJQS0lYIiAqLworODU4LAkvKiAiUGVybWFuZW50IElkZW50aWZpZXIiICovCisxNjQsCS8qICJQb2xpY3kgUXVhbGlmaWVyIENQUyIgKi8KKzE2NSwJLyogIlBvbGljeSBRdWFsaWZpZXIgVXNlciBOb3RpY2UiICovCiszODUsCS8qICJQcml2YXRlIiAqLworNjYzLAkvKiAiUHJveHkgQ2VydGlmaWNhdGUgSW5mb3JtYXRpb24iICovCisgMSwJLyogIlJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuIiAqLworIDIsCS8qICJSU0EgRGF0YSBTZWN1cml0eSwgSW5jLiBQS0NTIiAqLworMTg4LAkvKiAiUy9NSU1FIiAqLworMTY3LAkvKiAiUy9NSU1FIENhcGFiaWxpdGllcyIgKi8KKzM4NywJLyogIlNOTVB2MiIgKi8KKzUxMiwJLyogIlNlY3VyZSBFbGVjdHJvbmljIFRyYW5zYWN0aW9ucyIgKi8KKzM4NiwJLyogIlNlY3VyaXR5IiAqLworMzk0LAkvKiAiU2VsZWN0ZWQgQXR0cmlidXRlIFR5cGVzIiAqLworMTQzLAkvKiAiU3Ryb25nIEV4dHJhbmV0IElEIiAqLworMzk4LAkvKiAiU3ViamVjdCBJbmZvcm1hdGlvbiBBY2Nlc3MiICovCisxMzAsCS8qICJUTFMgV2ViIENsaWVudCBBdXRoZW50aWNhdGlvbiIgKi8KKzEyOSwJLyogIlRMUyBXZWIgU2VydmVyIEF1dGhlbnRpY2F0aW9uIiAqLworMTMzLAkvKiAiVGltZSBTdGFtcGluZyIgKi8KKzM3NSwJLyogIlRydXN0IFJvb3QiICovCisxMiwJLyogIlg1MDkiICovCis0MDIsCS8qICJYNTA5djMgQUMgVGFyZ2V0aW5nIiAqLworNzQ2LAkvKiAiWDUwOXYzIEFueSBQb2xpY3kiICovCis5MCwJLyogIlg1MDl2MyBBdXRob3JpdHkgS2V5IElkZW50aWZpZXIiICovCis4NywJLyogIlg1MDl2MyBCYXNpYyBDb25zdHJhaW50cyIgKi8KKzEwMywJLyogIlg1MDl2MyBDUkwgRGlzdHJpYnV0aW9uIFBvaW50cyIgKi8KKzg4LAkvKiAiWDUwOXYzIENSTCBOdW1iZXIiICovCisxNDEsCS8qICJYNTA5djMgQ1JMIFJlYXNvbiBDb2RlIiAqLworNzcxLAkvKiAiWDUwOXYzIENlcnRpZmljYXRlIElzc3VlciIgKi8KKzg5LAkvKiAiWDUwOXYzIENlcnRpZmljYXRlIFBvbGljaWVzIiAqLworMTQwLAkvKiAiWDUwOXYzIERlbHRhIENSTCBJbmRpY2F0b3IiICovCisxMjYsCS8qICJYNTA5djMgRXh0ZW5kZWQgS2V5IFVzYWdlIiAqLworODU3LAkvKiAiWDUwOXYzIEZyZXNoZXN0IENSTCIgKi8KKzc0OCwJLyogIlg1MDl2MyBJbmhpYml0IEFueSBQb2xpY3kiICovCis4NiwJLyogIlg1MDl2MyBJc3N1ZXIgQWx0ZXJuYXRpdmUgTmFtZSIgKi8KKzc3MCwJLyogIlg1MDl2MyBJc3N1aW5nIERpc3RydWJ1dGlvbiBQb2ludCIgKi8KKzgzLAkvKiAiWDUwOXYzIEtleSBVc2FnZSIgKi8KKzY2NiwJLyogIlg1MDl2MyBOYW1lIENvbnN0cmFpbnRzIiAqLworNDAzLAkvKiAiWDUwOXYzIE5vIFJldm9jYXRpb24gQXZhaWxhYmxlIiAqLworNDAxLAkvKiAiWDUwOXYzIFBvbGljeSBDb25zdHJhaW50cyIgKi8KKzc0NywJLyogIlg1MDl2MyBQb2xpY3kgTWFwcGluZ3MiICovCis4NCwJLyogIlg1MDl2MyBQcml2YXRlIEtleSBVc2FnZSBQZXJpb2QiICovCis4NSwJLyogIlg1MDl2MyBTdWJqZWN0IEFsdGVybmF0aXZlIE5hbWUiICovCis3NjksCS8qICJYNTA5djMgU3ViamVjdCBEaXJlY3RvcnkgQXR0cmlidXRlcyIgKi8KKzgyLAkvKiAiWDUwOXYzIFN1YmplY3QgS2V5IElkZW50aWZpZXIiICovCisxODQsCS8qICJYOS41NyIgKi8KKzE4NSwJLyogIlg5LjU3IENNID8iICovCis0NzgsCS8qICJhUmVjb3JkIiAqLworMjg5LAkvKiAiYWFDb250cm9scyIgKi8KKzI4NywJLyogImFjLWF1ZGl0RW50aXR5IiAqLworMzk3LAkvKiAiYWMtcHJveHlpbmciICovCisyODgsCS8qICJhYy10YXJnZXRpbmciICovCis0NDYsCS8qICJhY2NvdW50IiAqLworMzY0LAkvKiAiYWQgZHZjcyIgKi8KKzYwNiwJLyogImFkZGl0aW9uYWwgdmVyaWZpY2F0aW9uIiAqLworNDE5LAkvKiAiYWVzLTEyOC1jYmMiICovCis0MjEsCS8qICJhZXMtMTI4LWNmYiIgKi8KKzY1MCwJLyogImFlcy0xMjgtY2ZiMSIgKi8KKzY1MywJLyogImFlcy0xMjgtY2ZiOCIgKi8KKzQxOCwJLyogImFlcy0xMjgtZWNiIiAqLworNDIwLAkvKiAiYWVzLTEyOC1vZmIiICovCis0MjMsCS8qICJhZXMtMTkyLWNiYyIgKi8KKzQyNSwJLyogImFlcy0xOTItY2ZiIiAqLworNjUxLAkvKiAiYWVzLTE5Mi1jZmIxIiAqLworNjU0LAkvKiAiYWVzLTE5Mi1jZmI4IiAqLworNDIyLAkvKiAiYWVzLTE5Mi1lY2IiICovCis0MjQsCS8qICJhZXMtMTkyLW9mYiIgKi8KKzQyNywJLyogImFlcy0yNTYtY2JjIiAqLworNDI5LAkvKiAiYWVzLTI1Ni1jZmIiICovCis2NTIsCS8qICJhZXMtMjU2LWNmYjEiICovCis2NTUsCS8qICJhZXMtMjU2LWNmYjgiICovCis0MjYsCS8qICJhZXMtMjU2LWVjYiIgKi8KKzQyOCwJLyogImFlcy0yNTYtb2ZiIiAqLworMzc2LAkvKiAiYWxnb3JpdGhtIiAqLworNDg0LAkvKiAiYXNzb2NpYXRlZERvbWFpbiIgKi8KKzQ4NSwJLyogImFzc29jaWF0ZWROYW1lIiAqLworNTAxLAkvKiAiYXVkaW8iICovCis4ODIsCS8qICJhdXRob3JpdHlSZXZvY2F0aW9uTGlzdCIgKi8KKzkxLAkvKiAiYmYtY2JjIiAqLworOTMsCS8qICJiZi1jZmIiICovCis5MiwJLyogImJmLWVjYiIgKi8KKzk0LAkvKiAiYmYtb2ZiIiAqLworNDk0LAkvKiAiYnVpbGRpbmdOYW1lIiAqLworODYwLAkvKiAiYnVzaW5lc3NDYXRlZ29yeSIgKi8KKzY5MSwJLyogImMyb25iMTkxdjQiICovCis2OTIsCS8qICJjMm9uYjE5MXY1IiAqLworNjk3LAkvKiAiYzJvbmIyMzl2NCIgKi8KKzY5OCwJLyogImMyb25iMjM5djUiICovCis2ODQsCS8qICJjMnBuYjE2M3YxIiAqLworNjg1LAkvKiAiYzJwbmIxNjN2MiIgKi8KKzY4NiwJLyogImMycG5iMTYzdjMiICovCis2ODcsCS8qICJjMnBuYjE3NnYxIiAqLworNjkzLAkvKiAiYzJwbmIyMDh3MSIgKi8KKzY5OSwJLyogImMycG5iMjcydzEiICovCis3MDAsCS8qICJjMnBuYjMwNHcxIiAqLworNzAyLAkvKiAiYzJwbmIzNjh3MSIgKi8KKzY4OCwJLyogImMydG5iMTkxdjEiICovCis2ODksCS8qICJjMnRuYjE5MXYyIiAqLworNjkwLAkvKiAiYzJ0bmIxOTF2MyIgKi8KKzY5NCwJLyogImMydG5iMjM5djEiICovCis2OTUsCS8qICJjMnRuYjIzOXYyIiAqLworNjk2LAkvKiAiYzJ0bmIyMzl2MyIgKi8KKzcwMSwJLyogImMydG5iMzU5djEiICovCis3MDMsCS8qICJjMnRuYjQzMXIxIiAqLworODgxLAkvKiAiY0FDZXJ0aWZpY2F0ZSIgKi8KKzQ4MywJLyogImNOQU1FUmVjb3JkIiAqLworNzUxLAkvKiAiY2FtZWxsaWEtMTI4LWNiYyIgKi8KKzc1NywJLyogImNhbWVsbGlhLTEyOC1jZmIiICovCis3NjAsCS8qICJjYW1lbGxpYS0xMjgtY2ZiMSIgKi8KKzc2MywJLyogImNhbWVsbGlhLTEyOC1jZmI4IiAqLworNzU0LAkvKiAiY2FtZWxsaWEtMTI4LWVjYiIgKi8KKzc2NiwJLyogImNhbWVsbGlhLTEyOC1vZmIiICovCis3NTIsCS8qICJjYW1lbGxpYS0xOTItY2JjIiAqLworNzU4LAkvKiAiY2FtZWxsaWEtMTkyLWNmYiIgKi8KKzc2MSwJLyogImNhbWVsbGlhLTE5Mi1jZmIxIiAqLworNzY0LAkvKiAiY2FtZWxsaWEtMTkyLWNmYjgiICovCis3NTUsCS8qICJjYW1lbGxpYS0xOTItZWNiIiAqLworNzY3LAkvKiAiY2FtZWxsaWEtMTkyLW9mYiIgKi8KKzc1MywJLyogImNhbWVsbGlhLTI1Ni1jYmMiICovCis3NTksCS8qICJjYW1lbGxpYS0yNTYtY2ZiIiAqLworNzYyLAkvKiAiY2FtZWxsaWEtMjU2LWNmYjEiICovCis3NjUsCS8qICJjYW1lbGxpYS0yNTYtY2ZiOCIgKi8KKzc1NiwJLyogImNhbWVsbGlhLTI1Ni1lY2IiICovCis3NjgsCS8qICJjYW1lbGxpYS0yNTYtb2ZiIiAqLworNDQzLAkvKiAiY2FzZUlnbm9yZUlBNVN0cmluZ1N5bnRheCIgKi8KKzEwOCwJLyogImNhc3Q1LWNiYyIgKi8KKzExMCwJLyogImNhc3Q1LWNmYiIgKi8KKzEwOSwJLyogImNhc3Q1LWVjYiIgKi8KKzExMSwJLyogImNhc3Q1LW9mYiIgKi8KKzE1MiwJLyogImNlcnRCYWciICovCis2NzcsCS8qICJjZXJ0aWNvbS1hcmMiICovCis1MTcsCS8qICJjZXJ0aWZpY2F0ZSBleHRlbnNpb25zIiAqLworODgzLAkvKiAiY2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdCIgKi8KKzU0LAkvKiAiY2hhbGxlbmdlUGFzc3dvcmQiICovCis0MDcsCS8qICJjaGFyYWN0ZXJpc3RpYy10d28tZmllbGQiICovCiszOTUsCS8qICJjbGVhcmFuY2UiICovCis2MzMsCS8qICJjbGVhcnRleHQgdHJhY2sgMiIgKi8KKzEzLAkvKiAiY29tbW9uTmFtZSIgKi8KKzUxMywJLyogImNvbnRlbnQgdHlwZXMiICovCis1MCwJLyogImNvbnRlbnRUeXBlIiAqLworNTMsCS8qICJjb3VudGVyc2lnbmF0dXJlIiAqLworMTQsCS8qICJjb3VudHJ5TmFtZSIgKi8KKzE1MywJLyogImNybEJhZyIgKi8KKzg4NCwJLyogImNyb3NzQ2VydGlmaWNhdGVQYWlyIiAqLworODA2LAkvKiAiY3J5cHRvY29tIiAqLworODA1LAkvKiAiY3J5cHRvcHJvIiAqLworNTAwLAkvKiAiZElUUmVkaXJlY3QiICovCis0NTEsCS8qICJkTlNEb21haW4iICovCis0OTUsCS8qICJkU0FRdWFsaXR5IiAqLworNDM0LAkvKiAiZGF0YSIgKi8KKzM5MCwJLyogImRjT2JqZWN0IiAqLworODkxLAkvKiAiZGVsdGFSZXZvY2F0aW9uTGlzdCIgKi8KKzMxLAkvKiAiZGVzLWNiYyIgKi8KKzY0MywJLyogImRlcy1jZG1mIiAqLworMzAsCS8qICJkZXMtY2ZiIiAqLworNjU2LAkvKiAiZGVzLWNmYjEiICovCis2NTcsCS8qICJkZXMtY2ZiOCIgKi8KKzI5LAkvKiAiZGVzLWVjYiIgKi8KKzMyLAkvKiAiZGVzLWVkZSIgKi8KKzQzLAkvKiAiZGVzLWVkZS1jYmMiICovCis2MCwJLyogImRlcy1lZGUtY2ZiIiAqLworNjIsCS8qICJkZXMtZWRlLW9mYiIgKi8KKzMzLAkvKiAiZGVzLWVkZTMiICovCis0NCwJLyogImRlcy1lZGUzLWNiYyIgKi8KKzYxLAkvKiAiZGVzLWVkZTMtY2ZiIiAqLworNjU4LAkvKiAiZGVzLWVkZTMtY2ZiMSIgKi8KKzY1OSwJLyogImRlcy1lZGUzLWNmYjgiICovCis2MywJLyogImRlcy1lZGUzLW9mYiIgKi8KKzQ1LAkvKiAiZGVzLW9mYiIgKi8KKzEwNywJLyogImRlc2NyaXB0aW9uIiAqLworODcxLAkvKiAiZGVzdGluYXRpb25JbmRpY2F0b3IiICovCis4MCwJLyogImRlc3gtY2JjIiAqLworMjgsCS8qICJkaEtleUFncmVlbWVudCIgKi8KKzExLAkvKiAiZGlyZWN0b3J5IHNlcnZpY2VzIChYLjUwMCkiICovCiszNzgsCS8qICJkaXJlY3Rvcnkgc2VydmljZXMgLSBhbGdvcml0aG1zIiAqLworODg3LAkvKiAiZGlzdGluZ3Vpc2hlZE5hbWUiICovCis4OTIsCS8qICJkbWROYW1lIiAqLworMTc0LAkvKiAiZG5RdWFsaWZpZXIiICovCis0NDcsCS8qICJkb2N1bWVudCIgKi8KKzQ3MSwJLyogImRvY3VtZW50QXV0aG9yIiAqLworNDY4LAkvKiAiZG9jdW1lbnRJZGVudGlmaWVyIiAqLworNDcyLAkvKiAiZG9jdW1lbnRMb2NhdGlvbiIgKi8KKzUwMiwJLyogImRvY3VtZW50UHVibGlzaGVyIiAqLworNDQ5LAkvKiAiZG9jdW1lbnRTZXJpZXMiICovCis0NjksCS8qICJkb2N1bWVudFRpdGxlIiAqLworNDcwLAkvKiAiZG9jdW1lbnRWZXJzaW9uIiAqLworMzgwLAkvKiAiZG9kIiAqLworMzkxLAkvKiAiZG9tYWluQ29tcG9uZW50IiAqLworNDUyLAkvKiAiZG9tYWluUmVsYXRlZE9iamVjdCIgKi8KKzExNiwJLyogImRzYUVuY3J5cHRpb24iICovCis2NywJLyogImRzYUVuY3J5cHRpb24tb2xkIiAqLworNjYsCS8qICJkc2FXaXRoU0hBIiAqLworMTEzLAkvKiAiZHNhV2l0aFNIQTEiICovCis3MCwJLyogImRzYVdpdGhTSEExLW9sZCIgKi8KKzgwMiwJLyogImRzYV93aXRoX1NIQTIyNCIgKi8KKzgwMywJLyogImRzYV93aXRoX1NIQTI1NiIgKi8KKzI5NywJLyogImR2Y3MiICovCis3OTEsCS8qICJlY2RzYS13aXRoLVJlY29tbWVuZGVkIiAqLworNDE2LAkvKiAiZWNkc2Etd2l0aC1TSEExIiAqLworNzkzLAkvKiAiZWNkc2Etd2l0aC1TSEEyMjQiICovCis3OTQsCS8qICJlY2RzYS13aXRoLVNIQTI1NiIgKi8KKzc5NSwJLyogImVjZHNhLXdpdGgtU0hBMzg0IiAqLworNzk2LAkvKiAiZWNkc2Etd2l0aC1TSEE1MTIiICovCis3OTIsCS8qICJlY2RzYS13aXRoLVNwZWNpZmllZCIgKi8KKzQ4LAkvKiAiZW1haWxBZGRyZXNzIiAqLworNjMyLAkvKiAiZW5jcnlwdGVkIHRyYWNrIDIiICovCis4ODUsCS8qICJlbmhhbmNlZFNlYXJjaEd1aWRlIiAqLworNTYsCS8qICJleHRlbmRlZENlcnRpZmljYXRlQXR0cmlidXRlcyIgKi8KKzg2NywJLyogImZhY3NpbWlsZVRlbGVwaG9uZU51bWJlciIgKi8KKzQ2MiwJLyogImZhdm91cml0ZURyaW5rIiAqLworNDUzLAkvKiAiZnJpZW5kbHlDb3VudHJ5IiAqLworNDkwLAkvKiAiZnJpZW5kbHlDb3VudHJ5TmFtZSIgKi8KKzE1NiwJLyogImZyaWVuZGx5TmFtZSIgKi8KKzYzMSwJLyogImdlbmVyYXRlIGNyeXB0b2dyYW0iICovCis1MDksCS8qICJnZW5lcmF0aW9uUXVhbGlmaWVyIiAqLworNjAxLAkvKiAiZ2VuZXJpYyBjcnlwdG9ncmFtIiAqLworOTksCS8qICJnaXZlbk5hbWUiICovCis4MTQsCS8qICJnb3N0ODktY250IiAqLworODU1LAkvKiAiaG1hYyIgKi8KKzc4MCwJLyogImhtYWMtbWQ1IiAqLworNzgxLAkvKiAiaG1hYy1zaGExIiAqLworNzk3LAkvKiAiaG1hY1dpdGhNRDUiICovCisxNjMsCS8qICJobWFjV2l0aFNIQTEiICovCis3OTgsCS8qICJobWFjV2l0aFNIQTIyNCIgKi8KKzc5OSwJLyogImhtYWNXaXRoU0hBMjU2IiAqLworODAwLAkvKiAiaG1hY1dpdGhTSEEzODQiICovCis4MDEsCS8qICJobWFjV2l0aFNIQTUxMiIgKi8KKzQ4NiwJLyogImhvbWVQb3N0YWxBZGRyZXNzIiAqLworNDczLAkvKiAiaG9tZVRlbGVwaG9uZU51bWJlciIgKi8KKzQ2NiwJLyogImhvc3QiICovCis4ODksCS8qICJob3VzZUlkZW50aWZpZXIiICovCis0NDIsCS8qICJpQTVTdHJpbmdTeW50YXgiICovCiszODEsCS8qICJpYW5hIiAqLworODI0LAkvKiAiaWQtR29zdDI4MTQ3LTg5LUNyeXB0b1Byby1BLVBhcmFtU2V0IiAqLworODI1LAkvKiAiaWQtR29zdDI4MTQ3LTg5LUNyeXB0b1Byby1CLVBhcmFtU2V0IiAqLworODI2LAkvKiAiaWQtR29zdDI4MTQ3LTg5LUNyeXB0b1Byby1DLVBhcmFtU2V0IiAqLworODI3LAkvKiAiaWQtR29zdDI4MTQ3LTg5LUNyeXB0b1Byby1ELVBhcmFtU2V0IiAqLworODE5LAkvKiAiaWQtR29zdDI4MTQ3LTg5LUNyeXB0b1Byby1LZXlNZXNoaW5nIiAqLworODI5LAkvKiAiaWQtR29zdDI4MTQ3LTg5LUNyeXB0b1Byby1Pc2Nhci0xLTAtUGFyYW1TZXQiICovCis4MjgsCS8qICJpZC1Hb3N0MjgxNDctODktQ3J5cHRvUHJvLU9zY2FyLTEtMS1QYXJhbVNldCIgKi8KKzgzMCwJLyogImlkLUdvc3QyODE0Ny04OS1DcnlwdG9Qcm8tUklDLTEtUGFyYW1TZXQiICovCis4MjAsCS8qICJpZC1Hb3N0MjgxNDctODktTm9uZS1LZXlNZXNoaW5nIiAqLworODIzLAkvKiAiaWQtR29zdDI4MTQ3LTg5LVRlc3RQYXJhbVNldCIgKi8KKzg0MCwJLyogImlkLUdvc3RSMzQxMC0yMDAxLUNyeXB0b1Byby1BLVBhcmFtU2V0IiAqLworODQxLAkvKiAiaWQtR29zdFIzNDEwLTIwMDEtQ3J5cHRvUHJvLUItUGFyYW1TZXQiICovCis4NDIsCS8qICJpZC1Hb3N0UjM0MTAtMjAwMS1DcnlwdG9Qcm8tQy1QYXJhbVNldCIgKi8KKzg0MywJLyogImlkLUdvc3RSMzQxMC0yMDAxLUNyeXB0b1Byby1YY2hBLVBhcmFtU2V0IiAqLworODQ0LAkvKiAiaWQtR29zdFIzNDEwLTIwMDEtQ3J5cHRvUHJvLVhjaEItUGFyYW1TZXQiICovCis4MzksCS8qICJpZC1Hb3N0UjM0MTAtMjAwMS1UZXN0UGFyYW1TZXQiICovCis4MzIsCS8qICJpZC1Hb3N0UjM0MTAtOTQtQ3J5cHRvUHJvLUEtUGFyYW1TZXQiICovCis4MzMsCS8qICJpZC1Hb3N0UjM0MTAtOTQtQ3J5cHRvUHJvLUItUGFyYW1TZXQiICovCis4MzQsCS8qICJpZC1Hb3N0UjM0MTAtOTQtQ3J5cHRvUHJvLUMtUGFyYW1TZXQiICovCis4MzUsCS8qICJpZC1Hb3N0UjM0MTAtOTQtQ3J5cHRvUHJvLUQtUGFyYW1TZXQiICovCis4MzYsCS8qICJpZC1Hb3N0UjM0MTAtOTQtQ3J5cHRvUHJvLVhjaEEtUGFyYW1TZXQiICovCis4MzcsCS8qICJpZC1Hb3N0UjM0MTAtOTQtQ3J5cHRvUHJvLVhjaEItUGFyYW1TZXQiICovCis4MzgsCS8qICJpZC1Hb3N0UjM0MTAtOTQtQ3J5cHRvUHJvLVhjaEMtUGFyYW1TZXQiICovCis4MzEsCS8qICJpZC1Hb3N0UjM0MTAtOTQtVGVzdFBhcmFtU2V0IiAqLworODQ1LAkvKiAiaWQtR29zdFIzNDEwLTk0LWEiICovCis4NDYsCS8qICJpZC1Hb3N0UjM0MTAtOTQtYUJpcyIgKi8KKzg0NywJLyogImlkLUdvc3RSMzQxMC05NC1iIiAqLworODQ4LAkvKiAiaWQtR29zdFIzNDEwLTk0LWJCaXMiICovCis4MjIsCS8qICJpZC1Hb3N0UjM0MTEtOTQtQ3J5cHRvUHJvUGFyYW1TZXQiICovCis4MjEsCS8qICJpZC1Hb3N0UjM0MTEtOTQtVGVzdFBhcmFtU2V0IiAqLworMjY2LAkvKiAiaWQtYWNhIiAqLworMzU1LAkvKiAiaWQtYWNhLWFjY2Vzc0lkZW50aXR5IiAqLworMzU0LAkvKiAiaWQtYWNhLWF1dGhlbnRpY2F0aW9uSW5mbyIgKi8KKzM1NiwJLyogImlkLWFjYS1jaGFyZ2luZ0lkZW50aXR5IiAqLworMzk5LAkvKiAiaWQtYWNhLWVuY0F0dHJzIiAqLworMzU3LAkvKiAiaWQtYWNhLWdyb3VwIiAqLworMzU4LAkvKiAiaWQtYWNhLXJvbGUiICovCisxNzYsCS8qICJpZC1hZCIgKi8KKzc4OCwJLyogImlkLWFlczEyOC13cmFwIiAqLworNzg5LAkvKiAiaWQtYWVzMTkyLXdyYXAiICovCis3OTAsCS8qICJpZC1hZXMyNTYtd3JhcCIgKi8KKzI2MiwJLyogImlkLWFsZyIgKi8KKzMyMywJLyogImlkLWFsZy1kZXM0MCIgKi8KKzMyNiwJLyogImlkLWFsZy1kaC1wb3AiICovCiszMjUsCS8qICJpZC1hbGctZGgtc2lnLWhtYWMtc2hhMSIgKi8KKzMyNCwJLyogImlkLWFsZy1ub1NpZ25hdHVyZSIgKi8KKzI2OCwJLyogImlkLWNjdCIgKi8KKzM2MSwJLyogImlkLWNjdC1QS0lEYXRhIiAqLworMzYyLAkvKiAiaWQtY2N0LVBLSVJlc3BvbnNlIiAqLworMzYwLAkvKiAiaWQtY2N0LWNycyIgKi8KKzgxLAkvKiAiaWQtY2UiICovCis2ODAsCS8qICJpZC1jaGFyYWN0ZXJpc3RpYy10d28tYmFzaXMiICovCisyNjMsCS8qICJpZC1jbWMiICovCiszMzQsCS8qICJpZC1jbWMtYWRkRXh0ZW5zaW9ucyIgKi8KKzM0NiwJLyogImlkLWNtYy1jb25maXJtQ2VydEFjY2VwdGFuY2UiICovCiszMzAsCS8qICJpZC1jbWMtZGF0YVJldHVybiIgKi8KKzMzNiwJLyogImlkLWNtYy1kZWNyeXB0ZWRQT1AiICovCiszMzUsCS8qICJpZC1jbWMtZW5jcnlwdGVkUE9QIiAqLworMzM5LAkvKiAiaWQtY21jLWdldENSTCIgKi8KKzMzOCwJLyogImlkLWNtYy1nZXRDZXJ0IiAqLworMzI4LAkvKiAiaWQtY21jLWlkZW50aWZpY2F0aW9uIiAqLworMzI5LAkvKiAiaWQtY21jLWlkZW50aXR5UHJvb2YiICovCiszMzcsCS8qICJpZC1jbWMtbHJhUE9QV2l0bmVzcyIgKi8KKzM0NCwJLyogImlkLWNtYy1wb3BMaW5rUmFuZG9tIiAqLworMzQ1LAkvKiAiaWQtY21jLXBvcExpbmtXaXRuZXNzIiAqLworMzQzLAkvKiAiaWQtY21jLXF1ZXJ5UGVuZGluZyIgKi8KKzMzMywJLyogImlkLWNtYy1yZWNpcGllbnROb25jZSIgKi8KKzM0MSwJLyogImlkLWNtYy1yZWdJbmZvIiAqLworMzQyLAkvKiAiaWQtY21jLXJlc3BvbnNlSW5mbyIgKi8KKzM0MCwJLyogImlkLWNtYy1yZXZva2VSZXF1ZXN0IiAqLworMzMyLAkvKiAiaWQtY21jLXNlbmRlck5vbmNlIiAqLworMzI3LAkvKiAiaWQtY21jLXN0YXR1c0luZm8iICovCiszMzEsCS8qICJpZC1jbWMtdHJhbnNhY3Rpb25JZCIgKi8KKzc4NywJLyogImlkLWN0LWFzY2lpVGV4dFdpdGhDUkxGIiAqLworNDA4LAkvKiAiaWQtZWNQdWJsaWNLZXkiICovCis1MDgsCS8qICJpZC1oZXgtbXVsdGlwYXJ0LW1lc3NhZ2UiICovCis1MDcsCS8qICJpZC1oZXgtcGFydGlhbC1tZXNzYWdlIiAqLworMjYwLAkvKiAiaWQtaXQiICovCiszMDIsCS8qICJpZC1pdC1jYUtleVVwZGF0ZUluZm8iICovCisyOTgsCS8qICJpZC1pdC1jYVByb3RFbmNDZXJ0IiAqLworMzExLAkvKiAiaWQtaXQtY29uZmlybVdhaXRUaW1lIiAqLworMzAzLAkvKiAiaWQtaXQtY3VycmVudENSTCIgKi8KKzMwMCwJLyogImlkLWl0LWVuY0tleVBhaXJUeXBlcyIgKi8KKzMxMCwJLyogImlkLWl0LWltcGxpY2l0Q29uZmlybSIgKi8KKzMwOCwJLyogImlkLWl0LWtleVBhaXJQYXJhbVJlcCIgKi8KKzMwNywJLyogImlkLWl0LWtleVBhaXJQYXJhbVJlcSIgKi8KKzMxMiwJLyogImlkLWl0LW9yaWdQS0lNZXNzYWdlIiAqLworMzAxLAkvKiAiaWQtaXQtcHJlZmVycmVkU3ltbUFsZyIgKi8KKzMwOSwJLyogImlkLWl0LXJldlBhc3NwaHJhc2UiICovCisyOTksCS8qICJpZC1pdC1zaWduS2V5UGFpclR5cGVzIiAqLworMzA1LAkvKiAiaWQtaXQtc3Vic2NyaXB0aW9uUmVxdWVzdCIgKi8KKzMwNiwJLyogImlkLWl0LXN1YnNjcmlwdGlvblJlc3BvbnNlIiAqLworNzg0LAkvKiAiaWQtaXQtc3VwcExhbmdUYWdzIiAqLworMzA0LAkvKiAiaWQtaXQtdW5zdXBwb3J0ZWRPSURzIiAqLworMTI4LAkvKiAiaWQta3AiICovCisyODAsCS8qICJpZC1tb2QtYXR0cmlidXRlLWNlcnQiICovCisyNzQsCS8qICJpZC1tb2QtY21jIiAqLworMjc3LAkvKiAiaWQtbW9kLWNtcCIgKi8KKzI4NCwJLyogImlkLW1vZC1jbXAyMDAwIiAqLworMjczLAkvKiAiaWQtbW9kLWNybWYiICovCisyODMsCS8qICJpZC1tb2QtZHZjcyIgKi8KKzI3NSwJLyogImlkLW1vZC1rZWEtcHJvZmlsZS04OCIgKi8KKzI3NiwJLyogImlkLW1vZC1rZWEtcHJvZmlsZS05MyIgKi8KKzI4MiwJLyogImlkLW1vZC1vY3NwIiAqLworMjc4LAkvKiAiaWQtbW9kLXF1YWxpZmllZC1jZXJ0LTg4IiAqLworMjc5LAkvKiAiaWQtbW9kLXF1YWxpZmllZC1jZXJ0LTkzIiAqLworMjgxLAkvKiAiaWQtbW9kLXRpbWVzdGFtcC1wcm90b2NvbCIgKi8KKzI2NCwJLyogImlkLW9uIiAqLworMzQ3LAkvKiAiaWQtb24tcGVyc29uYWxEYXRhIiAqLworMjY1LAkvKiAiaWQtcGRhIiAqLworMzUyLAkvKiAiaWQtcGRhLWNvdW50cnlPZkNpdGl6ZW5zaGlwIiAqLworMzUzLAkvKiAiaWQtcGRhLWNvdW50cnlPZlJlc2lkZW5jZSIgKi8KKzM0OCwJLyogImlkLXBkYS1kYXRlT2ZCaXJ0aCIgKi8KKzM1MSwJLyogImlkLXBkYS1nZW5kZXIiICovCiszNDksCS8qICJpZC1wZGEtcGxhY2VPZkJpcnRoIiAqLworMTc1LAkvKiAiaWQtcGUiICovCisyNjEsCS8qICJpZC1wa2lwIiAqLworMjU4LAkvKiAiaWQtcGtpeC1tb2QiICovCisyNjksCS8qICJpZC1wa2l4MS1leHBsaWNpdC04OCIgKi8KKzI3MSwJLyogImlkLXBraXgxLWV4cGxpY2l0LTkzIiAqLworMjcwLAkvKiAiaWQtcGtpeDEtaW1wbGljaXQtODgiICovCisyNzIsCS8qICJpZC1wa2l4MS1pbXBsaWNpdC05MyIgKi8KKzY2MiwJLyogImlkLXBwbCIgKi8KKzI2NywJLyogImlkLXFjcyIgKi8KKzM1OSwJLyogImlkLXFjcy1wa2l4UUNTeW50YXgtdjEiICovCisyNTksCS8qICJpZC1xdCIgKi8KKzMxMywJLyogImlkLXJlZ0N0cmwiICovCiszMTYsCS8qICJpZC1yZWdDdHJsLWF1dGhlbnRpY2F0b3IiICovCiszMTksCS8qICJpZC1yZWdDdHJsLW9sZENlcnRJRCIgKi8KKzMxOCwJLyogImlkLXJlZ0N0cmwtcGtpQXJjaGl2ZU9wdGlvbnMiICovCiszMTcsCS8qICJpZC1yZWdDdHJsLXBraVB1YmxpY2F0aW9uSW5mbyIgKi8KKzMyMCwJLyogImlkLXJlZ0N0cmwtcHJvdG9jb2xFbmNyS2V5IiAqLworMzE1LAkvKiAiaWQtcmVnQ3RybC1yZWdUb2tlbiIgKi8KKzMxNCwJLyogImlkLXJlZ0luZm8iICovCiszMjIsCS8qICJpZC1yZWdJbmZvLWNlcnRSZXEiICovCiszMjEsCS8qICJpZC1yZWdJbmZvLXV0ZjhQYWlycyIgKi8KKzE5MSwJLyogImlkLXNtaW1lLWFhIiAqLworMjE1LAkvKiAiaWQtc21pbWUtYWEtY29udGVudEhpbnQiICovCisyMTgsCS8qICJpZC1zbWltZS1hYS1jb250ZW50SWRlbnRpZmllciIgKi8KKzIyMSwJLyogImlkLXNtaW1lLWFhLWNvbnRlbnRSZWZlcmVuY2UiICovCisyNDAsCS8qICJpZC1zbWltZS1hYS1kdmNzLWR2YyIgKi8KKzIxNywJLyogImlkLXNtaW1lLWFhLWVuY2FwQ29udGVudFR5cGUiICovCisyMjIsCS8qICJpZC1zbWltZS1hYS1lbmNyeXBLZXlQcmVmIiAqLworMjIwLAkvKiAiaWQtc21pbWUtYWEtZXF1aXZhbGVudExhYmVscyIgKi8KKzIzMiwJLyogImlkLXNtaW1lLWFhLWV0cy1DZXJ0aWZpY2F0ZVJlZnMiICovCisyMzMsCS8qICJpZC1zbWltZS1hYS1ldHMtUmV2b2NhdGlvblJlZnMiICovCisyMzgsCS8qICJpZC1zbWltZS1hYS1ldHMtYXJjaGl2ZVRpbWVTdGFtcCIgKi8KKzIzNywJLyogImlkLXNtaW1lLWFhLWV0cy1jZXJ0Q1JMVGltZXN0YW1wIiAqLworMjM0LAkvKiAiaWQtc21pbWUtYWEtZXRzLWNlcnRWYWx1ZXMiICovCisyMjcsCS8qICJpZC1zbWltZS1hYS1ldHMtY29tbWl0bWVudFR5cGUiICovCisyMzEsCS8qICJpZC1zbWltZS1hYS1ldHMtY29udGVudFRpbWVzdGFtcCIgKi8KKzIzNiwJLyogImlkLXNtaW1lLWFhLWV0cy1lc2NUaW1lU3RhbXAiICovCisyMzAsCS8qICJpZC1zbWltZS1hYS1ldHMtb3RoZXJTaWdDZXJ0IiAqLworMjM1LAkvKiAiaWQtc21pbWUtYWEtZXRzLXJldm9jYXRpb25WYWx1ZXMiICovCisyMjYsCS8qICJpZC1zbWltZS1hYS1ldHMtc2lnUG9saWN5SWQiICovCisyMjksCS8qICJpZC1zbWltZS1hYS1ldHMtc2lnbmVyQXR0ciIgKi8KKzIyOCwJLyogImlkLXNtaW1lLWFhLWV0cy1zaWduZXJMb2NhdGlvbiIgKi8KKzIxOSwJLyogImlkLXNtaW1lLWFhLW1hY1ZhbHVlIiAqLworMjE0LAkvKiAiaWQtc21pbWUtYWEtbWxFeHBhbmRIaXN0b3J5IiAqLworMjE2LAkvKiAiaWQtc21pbWUtYWEtbXNnU2lnRGlnZXN0IiAqLworMjEyLAkvKiAiaWQtc21pbWUtYWEtcmVjZWlwdFJlcXVlc3QiICovCisyMTMsCS8qICJpZC1zbWltZS1hYS1zZWN1cml0eUxhYmVsIiAqLworMjM5LAkvKiAiaWQtc21pbWUtYWEtc2lnbmF0dXJlVHlwZSIgKi8KKzIyMywJLyogImlkLXNtaW1lLWFhLXNpZ25pbmdDZXJ0aWZpY2F0ZSIgKi8KKzIyNCwJLyogImlkLXNtaW1lLWFhLXNtaW1lRW5jcnlwdENlcnRzIiAqLworMjI1LAkvKiAiaWQtc21pbWUtYWEtdGltZVN0YW1wVG9rZW4iICovCisxOTIsCS8qICJpZC1zbWltZS1hbGciICovCisyNDMsCS8qICJpZC1zbWltZS1hbGctM0RFU3dyYXAiICovCisyNDYsCS8qICJpZC1zbWltZS1hbGctQ01TM0RFU3dyYXAiICovCisyNDcsCS8qICJpZC1zbWltZS1hbGctQ01TUkMyd3JhcCIgKi8KKzI0NSwJLyogImlkLXNtaW1lLWFsZy1FU0RIIiAqLworMjQxLAkvKiAiaWQtc21pbWUtYWxnLUVTREh3aXRoM0RFUyIgKi8KKzI0MiwJLyogImlkLXNtaW1lLWFsZy1FU0RId2l0aFJDMiIgKi8KKzI0NCwJLyogImlkLXNtaW1lLWFsZy1SQzJ3cmFwIiAqLworMTkzLAkvKiAiaWQtc21pbWUtY2QiICovCisyNDgsCS8qICJpZC1zbWltZS1jZC1sZGFwIiAqLworMTkwLAkvKiAiaWQtc21pbWUtY3QiICovCisyMTAsCS8qICJpZC1zbWltZS1jdC1EVkNTUmVxdWVzdERhdGEiICovCisyMTEsCS8qICJpZC1zbWltZS1jdC1EVkNTUmVzcG9uc2VEYXRhIiAqLworMjA4LAkvKiAiaWQtc21pbWUtY3QtVERUSW5mbyIgKi8KKzIwNywJLyogImlkLXNtaW1lLWN0LVRTVEluZm8iICovCisyMDUsCS8qICJpZC1zbWltZS1jdC1hdXRoRGF0YSIgKi8KKzc4NiwJLyogImlkLXNtaW1lLWN0LWNvbXByZXNzZWREYXRhIiAqLworMjA5LAkvKiAiaWQtc21pbWUtY3QtY29udGVudEluZm8iICovCisyMDYsCS8qICJpZC1zbWltZS1jdC1wdWJsaXNoQ2VydCIgKi8KKzIwNCwJLyogImlkLXNtaW1lLWN0LXJlY2VpcHQiICovCisxOTUsCS8qICJpZC1zbWltZS1jdGkiICovCisyNTUsCS8qICJpZC1zbWltZS1jdGktZXRzLXByb29mT2ZBcHByb3ZhbCIgKi8KKzI1NiwJLyogImlkLXNtaW1lLWN0aS1ldHMtcHJvb2ZPZkNyZWF0aW9uIiAqLworMjUzLAkvKiAiaWQtc21pbWUtY3RpLWV0cy1wcm9vZk9mRGVsaXZlcnkiICovCisyNTEsCS8qICJpZC1zbWltZS1jdGktZXRzLXByb29mT2ZPcmlnaW4iICovCisyNTIsCS8qICJpZC1zbWltZS1jdGktZXRzLXByb29mT2ZSZWNlaXB0IiAqLworMjU0LAkvKiAiaWQtc21pbWUtY3RpLWV0cy1wcm9vZk9mU2VuZGVyIiAqLworMTg5LAkvKiAiaWQtc21pbWUtbW9kIiAqLworMTk2LAkvKiAiaWQtc21pbWUtbW9kLWNtcyIgKi8KKzE5NywJLyogImlkLXNtaW1lLW1vZC1lc3MiICovCisyMDIsCS8qICJpZC1zbWltZS1tb2QtZXRzLWVTaWdQb2xpY3ktODgiICovCisyMDMsCS8qICJpZC1zbWltZS1tb2QtZXRzLWVTaWdQb2xpY3ktOTciICovCisyMDAsCS8qICJpZC1zbWltZS1tb2QtZXRzLWVTaWduYXR1cmUtODgiICovCisyMDEsCS8qICJpZC1zbWltZS1tb2QtZXRzLWVTaWduYXR1cmUtOTciICovCisxOTksCS8qICJpZC1zbWltZS1tb2QtbXNnLXYzIiAqLworMTk4LAkvKiAiaWQtc21pbWUtbW9kLW9pZCIgKi8KKzE5NCwJLyogImlkLXNtaW1lLXNwcSIgKi8KKzI1MCwJLyogImlkLXNtaW1lLXNwcS1ldHMtc3F0LXVub3RpY2UiICovCisyNDksCS8qICJpZC1zbWltZS1zcHEtZXRzLXNxdC11cmkiICovCiszNCwJLyogImlkZWEtY2JjIiAqLworMzUsCS8qICJpZGVhLWNmYiIgKi8KKzM2LAkvKiAiaWRlYS1lY2IiICovCis0NiwJLyogImlkZWEtb2ZiIiAqLworNjc2LAkvKiAiaWRlbnRpZmllZC1vcmdhbml6YXRpb24iICovCis0NjEsCS8qICJpbmZvIiAqLworMTAxLAkvKiAiaW5pdGlhbHMiICovCis4NjksCS8qICJpbnRlcm5hdGlvbmFsaVNETk51bWJlciIgKi8KKzc0OSwJLyogImlwc2VjMyIgKi8KKzc1MCwJLyogImlwc2VjNCIgKi8KKzE4MSwJLyogImlzbyIgKi8KKzYyMywJLyogImlzc3VlciBjYXBhYmlsaXRpZXMiICovCis2NDUsCS8qICJpdHUtdCIgKi8KKzQ5MiwJLyogImphbmV0TWFpbGJveCIgKi8KKzY0NiwJLyogImpvaW50LWlzby1pdHUtdCIgKi8KKzE1MCwJLyogImtleUJhZyIgKi8KKzc3MywJLyogImtpc2EiICovCis0NzcsCS8qICJsYXN0TW9kaWZpZWRCeSIgKi8KKzQ3NiwJLyogImxhc3RNb2RpZmllZFRpbWUiICovCisxNTcsCS8qICJsb2NhbEtleUlEIiAqLworMTUsCS8qICJsb2NhbGl0eU5hbWUiICovCis0ODAsCS8qICJtWFJlY29yZCIgKi8KKzQ5MywJLyogIm1haWxQcmVmZXJlbmNlT3B0aW9uIiAqLworNDY3LAkvKiAibWFuYWdlciIgKi8KKyAzLAkvKiAibWQyIiAqLworIDcsCS8qICJtZDJXaXRoUlNBRW5jcnlwdGlvbiIgKi8KKzI1NywJLyogIm1kNCIgKi8KKzM5NiwJLyogIm1kNFdpdGhSU0FFbmNyeXB0aW9uIiAqLworIDQsCS8qICJtZDUiICovCisxMTQsCS8qICJtZDUtc2hhMSIgKi8KKzEwNCwJLyogIm1kNVdpdGhSU0EiICovCisgOCwJLyogIm1kNVdpdGhSU0FFbmNyeXB0aW9uIiAqLworOTUsCS8qICJtZGMyIiAqLworOTYsCS8qICJtZGMyV2l0aFJTQSIgKi8KKzg3NSwJLyogIm1lbWJlciIgKi8KKzYwMiwJLyogIm1lcmNoYW50IGluaXRpYXRlZCBhdXRoIiAqLworNTE0LAkvKiAibWVzc2FnZSBleHRlbnNpb25zIiAqLworNTEsCS8qICJtZXNzYWdlRGlnZXN0IiAqLworNTA2LAkvKiAibWltZS1taHMtYm9kaWVzIiAqLworNTA1LAkvKiAibWltZS1taHMtaGVhZGluZ3MiICovCis0ODgsCS8qICJtb2JpbGVUZWxlcGhvbmVOdW1iZXIiICovCis0ODEsCS8qICJuU1JlY29yZCIgKi8KKzE3MywJLyogIm5hbWUiICovCis2ODEsCS8qICJvbkJhc2lzIiAqLworMzc5LAkvKiAib3JnIiAqLworMTcsCS8qICJvcmdhbml6YXRpb25OYW1lIiAqLworNDkxLAkvKiAib3JnYW5pemF0aW9uYWxTdGF0dXMiICovCisxOCwJLyogIm9yZ2FuaXphdGlvbmFsVW5pdE5hbWUiICovCis0NzUsCS8qICJvdGhlck1haWxib3giICovCis4NzYsCS8qICJvd25lciIgKi8KKzQ4OSwJLyogInBhZ2VyVGVsZXBob25lTnVtYmVyIiAqLworNzgyLAkvKiAicGFzc3dvcmQgYmFzZWQgTUFDIiAqLworMzc0LAkvKiAicGF0aCIgKi8KKzYyMSwJLyogInBheW1lbnQgZ2F0ZXdheSBjYXBhYmlsaXRpZXMiICovCisgOSwJLyogInBiZVdpdGhNRDJBbmRERVMtQ0JDIiAqLworMTY4LAkvKiAicGJlV2l0aE1EMkFuZFJDMi1DQkMiICovCisxMTIsCS8qICJwYmVXaXRoTUQ1QW5kQ2FzdDVDQkMiICovCisxMCwJLyogInBiZVdpdGhNRDVBbmRERVMtQ0JDIiAqLworMTY5LAkvKiAicGJlV2l0aE1ENUFuZFJDMi1DQkMiICovCisxNDgsCS8qICJwYmVXaXRoU0hBMUFuZDEyOEJpdFJDMi1DQkMiICovCisxNDQsCS8qICJwYmVXaXRoU0hBMUFuZDEyOEJpdFJDNCIgKi8KKzE0NywJLyogInBiZVdpdGhTSEExQW5kMi1LZXlUcmlwbGVERVMtQ0JDIiAqLworMTQ2LAkvKiAicGJlV2l0aFNIQTFBbmQzLUtleVRyaXBsZURFUy1DQkMiICovCisxNDksCS8qICJwYmVXaXRoU0hBMUFuZDQwQml0UkMyLUNCQyIgKi8KKzE0NSwJLyogInBiZVdpdGhTSEExQW5kNDBCaXRSQzQiICovCisxNzAsCS8qICJwYmVXaXRoU0hBMUFuZERFUy1DQkMiICovCis2OCwJLyogInBiZVdpdGhTSEExQW5kUkMyLUNCQyIgKi8KKzQ5OSwJLyogInBlcnNvbmFsU2lnbmF0dXJlIiAqLworNDg3LAkvKiAicGVyc29uYWxUaXRsZSIgKi8KKzQ2NCwJLyogInBob3RvIiAqLworODYzLAkvKiAicGh5c2ljYWxEZWxpdmVyeU9mZmljZU5hbWUiICovCis0MzcsCS8qICJwaWxvdCIgKi8KKzQzOSwJLyogInBpbG90QXR0cmlidXRlU3ludGF4IiAqLworNDM4LAkvKiAicGlsb3RBdHRyaWJ1dGVUeXBlIiAqLworNDc5LAkvKiAicGlsb3RBdHRyaWJ1dGVUeXBlMjciICovCis0NTYsCS8qICJwaWxvdERTQSIgKi8KKzQ0MSwJLyogInBpbG90R3JvdXBzIiAqLworNDQ0LAkvKiAicGlsb3RPYmplY3QiICovCis0NDAsCS8qICJwaWxvdE9iamVjdENsYXNzIiAqLworNDU1LAkvKiAicGlsb3RPcmdhbml6YXRpb24iICovCis0NDUsCS8qICJwaWxvdFBlcnNvbiIgKi8KKzE4NiwJLyogInBrY3MxIiAqLworMjcsCS8qICJwa2NzMyIgKi8KKzE4NywJLyogInBrY3M1IiAqLworMjAsCS8qICJwa2NzNyIgKi8KKzIxLAkvKiAicGtjczctZGF0YSIgKi8KKzI1LAkvKiAicGtjczctZGlnZXN0RGF0YSIgKi8KKzI2LAkvKiAicGtjczctZW5jcnlwdGVkRGF0YSIgKi8KKzIzLAkvKiAicGtjczctZW52ZWxvcGVkRGF0YSIgKi8KKzI0LAkvKiAicGtjczctc2lnbmVkQW5kRW52ZWxvcGVkRGF0YSIgKi8KKzIyLAkvKiAicGtjczctc2lnbmVkRGF0YSIgKi8KKzE1MSwJLyogInBrY3M4U2hyb3VkZWRLZXlCYWciICovCis0NywJLyogInBrY3M5IiAqLworODYyLAkvKiAicG9zdE9mZmljZUJveCIgKi8KKzg2MSwJLyogInBvc3RhbEFkZHJlc3MiICovCis2NjEsCS8qICJwb3N0YWxDb2RlIiAqLworNjgzLAkvKiAicHBCYXNpcyIgKi8KKzg3MiwJLyogInByZWZlcnJlZERlbGl2ZXJ5TWV0aG9kIiAqLworODczLAkvKiAicHJlc2VudGF0aW9uQWRkcmVzcyIgKi8KKzQwNiwJLyogInByaW1lLWZpZWxkIiAqLworNDA5LAkvKiAicHJpbWUxOTJ2MSIgKi8KKzQxMCwJLyogInByaW1lMTkydjIiICovCis0MTEsCS8qICJwcmltZTE5MnYzIiAqLworNDEyLAkvKiAicHJpbWUyMzl2MSIgKi8KKzQxMywJLyogInByaW1lMjM5djIiICovCis0MTQsCS8qICJwcmltZTIzOXYzIiAqLworNDE1LAkvKiAicHJpbWUyNTZ2MSIgKi8KKzg4NiwJLyogInByb3RvY29sSW5mb3JtYXRpb24iICovCis1MTAsCS8qICJwc2V1ZG9ueW0iICovCis0MzUsCS8qICJwc3MiICovCisyODYsCS8qICJxY1N0YXRlbWVudHMiICovCis0NTcsCS8qICJxdWFsaXR5TGFiZWxsZWREYXRhIiAqLworNDUwLAkvKiAickZDODIybG9jYWxQYXJ0IiAqLworOTgsCS8qICJyYzItNDAtY2JjIiAqLworMTY2LAkvKiAicmMyLTY0LWNiYyIgKi8KKzM3LAkvKiAicmMyLWNiYyIgKi8KKzM5LAkvKiAicmMyLWNmYiIgKi8KKzM4LAkvKiAicmMyLWVjYiIgKi8KKzQwLAkvKiAicmMyLW9mYiIgKi8KKyA1LAkvKiAicmM0IiAqLworOTcsCS8qICJyYzQtNDAiICovCisxMjAsCS8qICJyYzUtY2JjIiAqLworMTIyLAkvKiAicmM1LWNmYiIgKi8KKzEyMSwJLyogInJjNS1lY2IiICovCisxMjMsCS8qICJyYzUtb2ZiIiAqLworODcwLAkvKiAicmVnaXN0ZXJlZEFkZHJlc3MiICovCis0NjAsCS8qICJyZmM4MjJNYWlsYm94IiAqLworMTE3LAkvKiAicmlwZW1kMTYwIiAqLworMTE5LAkvKiAicmlwZW1kMTYwV2l0aFJTQSIgKi8KKzQwMCwJLyogInJvbGUiICovCis4NzcsCS8qICJyb2xlT2NjdXBhbnQiICovCis0NDgsCS8qICJyb29tIiAqLworNDYzLAkvKiAicm9vbU51bWJlciIgKi8KKzE5LAkvKiAicnNhIiAqLworIDYsCS8qICJyc2FFbmNyeXB0aW9uIiAqLworNjQ0LAkvKiAicnNhT0FFUEVuY3J5cHRpb25TRVQiICovCiszNzcsCS8qICJyc2FTaWduYXR1cmUiICovCisxMjQsCS8qICJydW4gbGVuZ3RoIGNvbXByZXNzaW9uIiAqLworNDgyLAkvKiAic09BUmVjb3JkIiAqLworMTU1LAkvKiAic2FmZUNvbnRlbnRzQmFnIiAqLworMjkxLAkvKiAic2JncC1hdXRvbm9tb3VzU3lzTnVtIiAqLworMjkwLAkvKiAic2JncC1pcEFkZHJCbG9jayIgKi8KKzI5MiwJLyogInNiZ3Atcm91dGVySWRlbnRpZmllciIgKi8KKzE1OSwJLyogInNkc2lDZXJ0aWZpY2F0ZSIgKi8KKzg1OSwJLyogInNlYXJjaEd1aWRlIiAqLworNzA0LAkvKiAic2VjcDExMnIxIiAqLworNzA1LAkvKiAic2VjcDExMnIyIiAqLworNzA2LAkvKiAic2VjcDEyOHIxIiAqLworNzA3LAkvKiAic2VjcDEyOHIyIiAqLworNzA4LAkvKiAic2VjcDE2MGsxIiAqLworNzA5LAkvKiAic2VjcDE2MHIxIiAqLworNzEwLAkvKiAic2VjcDE2MHIyIiAqLworNzExLAkvKiAic2VjcDE5MmsxIiAqLworNzEyLAkvKiAic2VjcDIyNGsxIiAqLworNzEzLAkvKiAic2VjcDIyNHIxIiAqLworNzE0LAkvKiAic2VjcDI1NmsxIiAqLworNzE1LAkvKiAic2VjcDM4NHIxIiAqLworNzE2LAkvKiAic2VjcDUyMXIxIiAqLworMTU0LAkvKiAic2VjcmV0QmFnIiAqLworNDc0LAkvKiAic2VjcmV0YXJ5IiAqLworNzE3LAkvKiAic2VjdDExM3IxIiAqLworNzE4LAkvKiAic2VjdDExM3IyIiAqLworNzE5LAkvKiAic2VjdDEzMXIxIiAqLworNzIwLAkvKiAic2VjdDEzMXIyIiAqLworNzIxLAkvKiAic2VjdDE2M2sxIiAqLworNzIyLAkvKiAic2VjdDE2M3IxIiAqLworNzIzLAkvKiAic2VjdDE2M3IyIiAqLworNzI0LAkvKiAic2VjdDE5M3IxIiAqLworNzI1LAkvKiAic2VjdDE5M3IyIiAqLworNzI2LAkvKiAic2VjdDIzM2sxIiAqLworNzI3LAkvKiAic2VjdDIzM3IxIiAqLworNzI4LAkvKiAic2VjdDIzOWsxIiAqLworNzI5LAkvKiAic2VjdDI4M2sxIiAqLworNzMwLAkvKiAic2VjdDI4M3IxIiAqLworNzMxLAkvKiAic2VjdDQwOWsxIiAqLworNzMyLAkvKiAic2VjdDQwOXIxIiAqLworNzMzLAkvKiAic2VjdDU3MWsxIiAqLworNzM0LAkvKiAic2VjdDU3MXIxIiAqLworNjM1LAkvKiAic2VjdXJlIGRldmljZSBzaWduYXR1cmUiICovCis4NzgsCS8qICJzZWVBbHNvIiAqLworNzc3LAkvKiAic2VlZC1jYmMiICovCis3NzksCS8qICJzZWVkLWNmYiIgKi8KKzc3NiwJLyogInNlZWQtZWNiIiAqLworNzc4LAkvKiAic2VlZC1vZmIiICovCisxMDUsCS8qICJzZXJpYWxOdW1iZXIiICovCis2MjUsCS8qICJzZXQtYWRkUG9saWN5IiAqLworNTE1LAkvKiAic2V0LWF0dHIiICovCis1MTgsCS8qICJzZXQtYnJhbmQiICovCis2MzgsCS8qICJzZXQtYnJhbmQtQW1lcmljYW5FeHByZXNzIiAqLworNjM3LAkvKiAic2V0LWJyYW5kLURpbmVycyIgKi8KKzYzNiwJLyogInNldC1icmFuZC1JQVRBLUFUQSIgKi8KKzYzOSwJLyogInNldC1icmFuZC1KQ0IiICovCis2NDEsCS8qICJzZXQtYnJhbmQtTWFzdGVyQ2FyZCIgKi8KKzY0MiwJLyogInNldC1icmFuZC1Ob3Z1cyIgKi8KKzY0MCwJLyogInNldC1icmFuZC1WaXNhIiAqLworNTE2LAkvKiAic2V0LXBvbGljeSIgKi8KKzYwNywJLyogInNldC1wb2xpY3ktcm9vdCIgKi8KKzYyNCwJLyogInNldC1yb290S2V5VGh1bWIiICovCis2MjAsCS8qICJzZXRBdHRyLUNlcnQiICovCis2MjgsCS8qICJzZXRBdHRyLUlzc0NhcC1DVk0iICovCis2MzAsCS8qICJzZXRBdHRyLUlzc0NhcC1TaWciICovCis2MjksCS8qICJzZXRBdHRyLUlzc0NhcC1UMiIgKi8KKzYyNywJLyogInNldEF0dHItVG9rZW4tQjBQcmltZSIgKi8KKzYyNiwJLyogInNldEF0dHItVG9rZW4tRU1WIiAqLworNjIyLAkvKiAic2V0QXR0ci1Ub2tlblR5cGUiICovCis2MTksCS8qICJzZXRDZXh0LUlzc3VlckNhcGFiaWxpdGllcyIgKi8KKzYxNSwJLyogInNldENleHQtUEdXWWNhcGFiaWxpdGllcyIgKi8KKzYxNiwJLyogInNldENleHQtVG9rZW5JZGVudGlmaWVyIiAqLworNjE4LAkvKiAic2V0Q2V4dC1Ub2tlblR5cGUiICovCis2MTcsCS8qICJzZXRDZXh0LVRyYWNrMkRhdGEiICovCis2MTEsCS8qICJzZXRDZXh0LWNDZXJ0UmVxdWlyZWQiICovCis2MDksCS8qICJzZXRDZXh0LWNlcnRUeXBlIiAqLworNjA4LAkvKiAic2V0Q2V4dC1oYXNoZWRSb290IiAqLworNjEwLAkvKiAic2V0Q2V4dC1tZXJjaERhdGEiICovCis2MTMsCS8qICJzZXRDZXh0LXNldEV4dCIgKi8KKzYxNCwJLyogInNldENleHQtc2V0UXVhbGYiICovCis2MTIsCS8qICJzZXRDZXh0LXR1bm5lbGluZyIgKi8KKzU0MCwJLyogInNldGN0LUFjcUNhcmRDb2RlTXNnIiAqLworNTc2LAkvKiAic2V0Y3QtQWNxQ2FyZENvZGVNc2dUQkUiICovCis1NzAsCS8qICJzZXRjdC1BdXRoUmVxVEJFIiAqLworNTM0LAkvKiAic2V0Y3QtQXV0aFJlcVRCUyIgKi8KKzUyNywJLyogInNldGN0LUF1dGhSZXNCYWdnYWdlIiAqLworNTcxLAkvKiAic2V0Y3QtQXV0aFJlc1RCRSIgKi8KKzU3MiwJLyogInNldGN0LUF1dGhSZXNUQkVYIiAqLworNTM1LAkvKiAic2V0Y3QtQXV0aFJlc1RCUyIgKi8KKzUzNiwJLyogInNldGN0LUF1dGhSZXNUQlNYIiAqLworNTI4LAkvKiAic2V0Y3QtQXV0aFJldlJlcUJhZ2dhZ2UiICovCis1NzcsCS8qICJzZXRjdC1BdXRoUmV2UmVxVEJFIiAqLworNTQxLAkvKiAic2V0Y3QtQXV0aFJldlJlcVRCUyIgKi8KKzUyOSwJLyogInNldGN0LUF1dGhSZXZSZXNCYWdnYWdlIiAqLworNTQyLAkvKiAic2V0Y3QtQXV0aFJldlJlc0RhdGEiICovCis1NzgsCS8qICJzZXRjdC1BdXRoUmV2UmVzVEJFIiAqLworNTc5LAkvKiAic2V0Y3QtQXV0aFJldlJlc1RCRUIiICovCis1NDMsCS8qICJzZXRjdC1BdXRoUmV2UmVzVEJTIiAqLworNTczLAkvKiAic2V0Y3QtQXV0aFRva2VuVEJFIiAqLworNTM3LAkvKiAic2V0Y3QtQXV0aFRva2VuVEJTIiAqLworNjAwLAkvKiAic2V0Y3QtQkNJRGlzdHJpYnV0aW9uVEJTIiAqLworNTU4LAkvKiAic2V0Y3QtQmF0Y2hBZG1pblJlcURhdGEiICovCis1OTIsCS8qICJzZXRjdC1CYXRjaEFkbWluUmVxVEJFIiAqLworNTU5LAkvKiAic2V0Y3QtQmF0Y2hBZG1pblJlc0RhdGEiICovCis1OTMsCS8qICJzZXRjdC1CYXRjaEFkbWluUmVzVEJFIiAqLworNTk5LAkvKiAic2V0Y3QtQ1JMTm90aWZpY2F0aW9uUmVzVEJTIiAqLworNTk4LAkvKiAic2V0Y3QtQ1JMTm90aWZpY2F0aW9uVEJTIiAqLworNTgwLAkvKiAic2V0Y3QtQ2FwUmVxVEJFIiAqLworNTgxLAkvKiAic2V0Y3QtQ2FwUmVxVEJFWCIgKi8KKzU0NCwJLyogInNldGN0LUNhcFJlcVRCUyIgKi8KKzU0NSwJLyogInNldGN0LUNhcFJlcVRCU1giICovCis1NDYsCS8qICJzZXRjdC1DYXBSZXNEYXRhIiAqLworNTgyLAkvKiAic2V0Y3QtQ2FwUmVzVEJFIiAqLworNTgzLAkvKiAic2V0Y3QtQ2FwUmV2UmVxVEJFIiAqLworNTg0LAkvKiAic2V0Y3QtQ2FwUmV2UmVxVEJFWCIgKi8KKzU0NywJLyogInNldGN0LUNhcFJldlJlcVRCUyIgKi8KKzU0OCwJLyogInNldGN0LUNhcFJldlJlcVRCU1giICovCis1NDksCS8qICJzZXRjdC1DYXBSZXZSZXNEYXRhIiAqLworNTg1LAkvKiAic2V0Y3QtQ2FwUmV2UmVzVEJFIiAqLworNTM4LAkvKiAic2V0Y3QtQ2FwVG9rZW5EYXRhIiAqLworNTMwLAkvKiAic2V0Y3QtQ2FwVG9rZW5TZXEiICovCis1NzQsCS8qICJzZXRjdC1DYXBUb2tlblRCRSIgKi8KKzU3NSwJLyogInNldGN0LUNhcFRva2VuVEJFWCIgKi8KKzUzOSwJLyogInNldGN0LUNhcFRva2VuVEJTIiAqLworNTYwLAkvKiAic2V0Y3QtQ2FyZENJbml0UmVzVEJTIiAqLworNTY2LAkvKiAic2V0Y3QtQ2VydElucVJlcVRCUyIgKi8KKzU2MywJLyogInNldGN0LUNlcnRSZXFEYXRhIiAqLworNTk1LAkvKiAic2V0Y3QtQ2VydFJlcVRCRSIgKi8KKzU5NiwJLyogInNldGN0LUNlcnRSZXFUQkVYIiAqLworNTY0LAkvKiAic2V0Y3QtQ2VydFJlcVRCUyIgKi8KKzU2NSwJLyogInNldGN0LUNlcnRSZXNEYXRhIiAqLworNTk3LAkvKiAic2V0Y3QtQ2VydFJlc1RCRSIgKi8KKzU4NiwJLyogInNldGN0LUNyZWRSZXFUQkUiICovCis1ODcsCS8qICJzZXRjdC1DcmVkUmVxVEJFWCIgKi8KKzU1MCwJLyogInNldGN0LUNyZWRSZXFUQlMiICovCis1NTEsCS8qICJzZXRjdC1DcmVkUmVxVEJTWCIgKi8KKzU1MiwJLyogInNldGN0LUNyZWRSZXNEYXRhIiAqLworNTg4LAkvKiAic2V0Y3QtQ3JlZFJlc1RCRSIgKi8KKzU4OSwJLyogInNldGN0LUNyZWRSZXZSZXFUQkUiICovCis1OTAsCS8qICJzZXRjdC1DcmVkUmV2UmVxVEJFWCIgKi8KKzU1MywJLyogInNldGN0LUNyZWRSZXZSZXFUQlMiICovCis1NTQsCS8qICJzZXRjdC1DcmVkUmV2UmVxVEJTWCIgKi8KKzU1NSwJLyogInNldGN0LUNyZWRSZXZSZXNEYXRhIiAqLworNTkxLAkvKiAic2V0Y3QtQ3JlZFJldlJlc1RCRSIgKi8KKzU2NywJLyogInNldGN0LUVycm9yVEJTIiAqLworNTI2LAkvKiAic2V0Y3QtSE9ESW5wdXQiICovCis1NjEsCS8qICJzZXRjdC1NZUFxQ0luaXRSZXNUQlMiICovCis1MjIsCS8qICJzZXRjdC1PSURhdGEiICovCis1MTksCS8qICJzZXRjdC1QQU5EYXRhIiAqLworNTIxLAkvKiAic2V0Y3QtUEFOT25seSIgKi8KKzUyMCwJLyogInNldGN0LVBBTlRva2VuIiAqLworNTU2LAkvKiAic2V0Y3QtUENlcnRSZXFEYXRhIiAqLworNTU3LAkvKiAic2V0Y3QtUENlcnRSZXNUQlMiICovCis1MjMsCS8qICJzZXRjdC1QSSIgKi8KKzUzMiwJLyogInNldGN0LVBJLVRCUyIgKi8KKzUyNCwJLyogInNldGN0LVBJRGF0YSIgKi8KKzUyNSwJLyogInNldGN0LVBJRGF0YVVuc2lnbmVkIiAqLworNTY4LAkvKiAic2V0Y3QtUElEdWFsU2lnbmVkVEJFIiAqLworNTY5LAkvKiAic2V0Y3QtUElVbnNpZ25lZFRCRSIgKi8KKzUzMSwJLyogInNldGN0LVBJbml0UmVzRGF0YSIgKi8KKzUzMywJLyogInNldGN0LVBSZXNEYXRhIiAqLworNTk0LAkvKiAic2V0Y3QtUmVnRm9ybVJlcVRCRSIgKi8KKzU2MiwJLyogInNldGN0LVJlZ0Zvcm1SZXNUQlMiICovCis2MDQsCS8qICJzZXRleHQtcGluQW55IiAqLworNjAzLAkvKiAic2V0ZXh0LXBpblNlY3VyZSIgKi8KKzYwNSwJLyogInNldGV4dC10cmFjazIiICovCis0MSwJLyogInNoYSIgKi8KKzY0LAkvKiAic2hhMSIgKi8KKzExNSwJLyogInNoYTFXaXRoUlNBIiAqLworNjUsCS8qICJzaGExV2l0aFJTQUVuY3J5cHRpb24iICovCis2NzUsCS8qICJzaGEyMjQiICovCis2NzEsCS8qICJzaGEyMjRXaXRoUlNBRW5jcnlwdGlvbiIgKi8KKzY3MiwJLyogInNoYTI1NiIgKi8KKzY2OCwJLyogInNoYTI1NldpdGhSU0FFbmNyeXB0aW9uIiAqLworNjczLAkvKiAic2hhMzg0IiAqLworNjY5LAkvKiAic2hhMzg0V2l0aFJTQUVuY3J5cHRpb24iICovCis2NzQsCS8qICJzaGE1MTIiICovCis2NzAsCS8qICJzaGE1MTJXaXRoUlNBRW5jcnlwdGlvbiIgKi8KKzQyLAkvKiAic2hhV2l0aFJTQUVuY3J5cHRpb24iICovCis1MiwJLyogInNpZ25pbmdUaW1lIiAqLworNDU0LAkvKiAic2ltcGxlU2VjdXJpdHlPYmplY3QiICovCis0OTYsCS8qICJzaW5nbGVMZXZlbFF1YWxpdHkiICovCisxNiwJLyogInN0YXRlT3JQcm92aW5jZU5hbWUiICovCis2NjAsCS8qICJzdHJlZXRBZGRyZXNzIiAqLworNDk4LAkvKiAic3VidHJlZU1heGltdW1RdWFsaXR5IiAqLworNDk3LAkvKiAic3VidHJlZU1pbmltdW1RdWFsaXR5IiAqLworODkwLAkvKiAic3VwcG9ydGVkQWxnb3JpdGhtcyIgKi8KKzg3NCwJLyogInN1cHBvcnRlZEFwcGxpY2F0aW9uQ29udGV4dCIgKi8KKzEwMCwJLyogInN1cm5hbWUiICovCis4NjQsCS8qICJ0ZWxlcGhvbmVOdW1iZXIiICovCis4NjYsCS8qICJ0ZWxldGV4VGVybWluYWxJZGVudGlmaWVyIiAqLworODY1LAkvKiAidGVsZXhOdW1iZXIiICovCis0NTksCS8qICJ0ZXh0RW5jb2RlZE9SQWRkcmVzcyIgKi8KKzI5MywJLyogInRleHROb3RpY2UiICovCisxMDYsCS8qICJ0aXRsZSIgKi8KKzY4MiwJLyogInRwQmFzaXMiICovCis0MzYsCS8qICJ1Y2wiICovCisgMCwJLyogInVuZGVmaW5lZCIgKi8KKzg4OCwJLyogInVuaXF1ZU1lbWJlciIgKi8KKzU1LAkvKiAidW5zdHJ1Y3R1cmVkQWRkcmVzcyIgKi8KKzQ5LAkvKiAidW5zdHJ1Y3R1cmVkTmFtZSIgKi8KKzg4MCwJLyogInVzZXJDZXJ0aWZpY2F0ZSIgKi8KKzQ2NSwJLyogInVzZXJDbGFzcyIgKi8KKzQ1OCwJLyogInVzZXJJZCIgKi8KKzg3OSwJLyogInVzZXJQYXNzd29yZCIgKi8KKzM3MywJLyogInZhbGlkIiAqLworNjc4LAkvKiAid2FwIiAqLworNjc5LAkvKiAid2FwLXdzZyIgKi8KKzczNSwJLyogIndhcC13c2ctaWRtLWVjaWQtd3RsczEiICovCis3NDMsCS8qICJ3YXAtd3NnLWlkbS1lY2lkLXd0bHMxMCIgKi8KKzc0NCwJLyogIndhcC13c2ctaWRtLWVjaWQtd3RsczExIiAqLworNzQ1LAkvKiAid2FwLXdzZy1pZG0tZWNpZC13dGxzMTIiICovCis3MzYsCS8qICJ3YXAtd3NnLWlkbS1lY2lkLXd0bHMzIiAqLworNzM3LAkvKiAid2FwLXdzZy1pZG0tZWNpZC13dGxzNCIgKi8KKzczOCwJLyogIndhcC13c2ctaWRtLWVjaWQtd3RsczUiICovCis3MzksCS8qICJ3YXAtd3NnLWlkbS1lY2lkLXd0bHM2IiAqLworNzQwLAkvKiAid2FwLXdzZy1pZG0tZWNpZC13dGxzNyIgKi8KKzc0MSwJLyogIndhcC13c2ctaWRtLWVjaWQtd3RsczgiICovCis3NDIsCS8qICJ3YXAtd3NnLWlkbS1lY2lkLXd0bHM5IiAqLworODA0LAkvKiAid2hpcmxwb29sIiAqLworODY4LAkvKiAieDEyMUFkZHJlc3MiICovCis1MDMsCS8qICJ4NTAwVW5pcXVlSWRlbnRpZmllciIgKi8KKzE1OCwJLyogIng1MDlDZXJ0aWZpY2F0ZSIgKi8KKzE2MCwJLyogIng1MDlDcmwiICovCisxMjUsCS8qICJ6bGliIGNvbXByZXNzaW9uIiAqLwogfTsKIAotc3RhdGljIEFTTjFfT0JKRUNUICpvYmpfb2Jqc1tOVU1fT0JKXT17Ci0mKG5pZF9vYmpzWyAwXSksLyogT0JKX3VuZGVmICAgICAgICAgICAgICAgICAgICAgICAgMCAqLwotJihuaWRfb2Jqc1szOTNdKSwvKiBPQkpfam9pbnRfaXNvX2NjaXR0ICAgICAgICAgICAgICBPQkpfam9pbnRfaXNvX2l0dV90ICovCi0mKG5pZF9vYmpzWzQwNF0pLC8qIE9CSl9jY2l0dCAgICAgICAgICAgICAgICAgICAgICAgIE9CSl9pdHVfdCAqLwotJihuaWRfb2Jqc1s2NDVdKSwvKiBPQkpfaXR1X3QgICAgICAgICAgICAgICAgICAgICAgICAwICovCi0mKG5pZF9vYmpzWzQzNF0pLC8qIE9CSl9kYXRhICAgICAgICAgICAgICAgICAgICAgICAgIDAgOSAqLwotJihuaWRfb2Jqc1sxODFdKSwvKiBPQkpfaXNvICAgICAgICAgICAgICAgICAgICAgICAgICAxICovCi0mKG5pZF9vYmpzWzE4Ml0pLC8qIE9CSl9tZW1iZXJfYm9keSAgICAgICAgICAgICAgICAgIDEgMiAqLwotJihuaWRfb2Jqc1szNzldKSwvKiBPQkpfb3JnICAgICAgICAgICAgICAgICAgICAgICAgICAxIDMgKi8KLSYobmlkX29ianNbNjc2XSksLyogT0JKX2lkZW50aWZpZWRfb3JnYW5pemF0aW9uICAgICAgMSAzICovCi0mKG5pZF9vYmpzWzY0Nl0pLC8qIE9CSl9qb2ludF9pc29faXR1X3QgICAgICAgICAgICAgIDIgKi8KLSYobmlkX29ianNbMTFdKSwvKiBPQkpfWDUwMCAgICAgICAgICAgICAgICAgICAgICAgICAyIDUgKi8KLSYobmlkX29ianNbNjQ3XSksLyogT0JKX2ludGVybmF0aW9uYWxfb3JnYW5pemF0aW9ucyAgMiAyMyAqLwotJihuaWRfb2Jqc1szODBdKSwvKiBPQkpfZG9kICAgICAgICAgICAgICAgICAgICAgICAgICAxIDMgNiAqLwotJihuaWRfb2Jqc1sxMl0pLC8qIE9CSl9YNTA5ICAgICAgICAgICAgICAgICAgICAgICAgIDIgNSA0ICovCi0mKG5pZF9vYmpzWzM3OF0pLC8qIE9CSl9YNTAwYWxnb3JpdGhtcyAgICAgICAgICAgICAgIDIgNSA4ICovCi0mKG5pZF9vYmpzWzgxXSksLyogT0JKX2lkX2NlICAgICAgICAgICAgICAgICAgICAgICAgMiA1IDI5ICovCi0mKG5pZF9vYmpzWzUxMl0pLC8qIE9CSl9pZF9zZXQgICAgICAgICAgICAgICAgICAgICAgIDIgMjMgNDIgKi8KLSYobmlkX29ianNbNjc4XSksLyogT0JKX3dhcCAgICAgICAgICAgICAgICAgICAgICAgICAgMiAyMyA0MyAqLwotJihuaWRfb2Jqc1s0MzVdKSwvKiBPQkpfcHNzICAgICAgICAgICAgICAgICAgICAgICAgICAwIDkgMjM0MiAqLwotJihuaWRfb2Jqc1sxODNdKSwvKiBPQkpfSVNPX1VTICAgICAgICAgICAgICAgICAgICAgICAxIDIgODQwICovCi0mKG5pZF9vYmpzWzM4MV0pLC8qIE9CSl9pYW5hICAgICAgICAgICAgICAgICAgICAgICAgIDEgMyA2IDEgKi8KLSYobmlkX29ianNbNjc3XSksLyogT0JKX2NlcnRpY29tX2FyYyAgICAgICAgICAgICAgICAgMSAzIDEzMiAqLwotJihuaWRfb2Jqc1szOTRdKSwvKiBPQkpfc2VsZWN0ZWRfYXR0cmlidXRlX3R5cGVzICAgICAyIDUgMSA1ICovCi0mKG5pZF9vYmpzWzEzXSksLyogT0JKX2NvbW1vbk5hbWUgICAgICAgICAgICAgICAgICAgMiA1IDQgMyAqLwotJihuaWRfb2Jqc1sxMDBdKSwvKiBPQkpfc3VybmFtZSAgICAgICAgICAgICAgICAgICAgICAyIDUgNCA0ICovCi0mKG5pZF9vYmpzWzEwNV0pLC8qIE9CSl9zZXJpYWxOdW1iZXIgICAgICAgICAgICAgICAgIDIgNSA0IDUgKi8KLSYobmlkX29ianNbMTRdKSwvKiBPQkpfY291bnRyeU5hbWUgICAgICAgICAgICAgICAgICAyIDUgNCA2ICovCi0mKG5pZF9vYmpzWzE1XSksLyogT0JKX2xvY2FsaXR5TmFtZSAgICAgICAgICAgICAgICAgMiA1IDQgNyAqLwotJihuaWRfb2Jqc1sxNl0pLC8qIE9CSl9zdGF0ZU9yUHJvdmluY2VOYW1lICAgICAgICAgIDIgNSA0IDggKi8KLSYobmlkX29ianNbNjYwXSksLyogT0JKX3N0cmVldEFkZHJlc3MgICAgICAgICAgICAgICAgMiA1IDQgOSAqLwotJihuaWRfb2Jqc1sxN10pLC8qIE9CSl9vcmdhbml6YXRpb25OYW1lICAgICAgICAgICAgIDIgNSA0IDEwICovCi0mKG5pZF9vYmpzWzE4XSksLyogT0JKX29yZ2FuaXphdGlvbmFsVW5pdE5hbWUgICAgICAgMiA1IDQgMTEgKi8KLSYobmlkX29ianNbMTA2XSksLyogT0JKX3RpdGxlICAgICAgICAgICAgICAgICAgICAgICAgMiA1IDQgMTIgKi8KLSYobmlkX29ianNbMTA3XSksLyogT0JKX2Rlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgMiA1IDQgMTMgKi8KLSYobmlkX29ianNbODU5XSksLyogT0JKX3NlYXJjaEd1aWRlICAgICAgICAgICAgICAgICAgMiA1IDQgMTQgKi8KLSYobmlkX29ianNbODYwXSksLyogT0JKX2J1c2luZXNzQ2F0ZWdvcnkgICAgICAgICAgICAgMiA1IDQgMTUgKi8KLSYobmlkX29ianNbODYxXSksLyogT0JKX3Bvc3RhbEFkZHJlc3MgICAgICAgICAgICAgICAgMiA1IDQgMTYgKi8KLSYobmlkX29ianNbNjYxXSksLyogT0JKX3Bvc3RhbENvZGUgICAgICAgICAgICAgICAgICAgMiA1IDQgMTcgKi8KLSYobmlkX29ianNbODYyXSksLyogT0JKX3Bvc3RPZmZpY2VCb3ggICAgICAgICAgICAgICAgMiA1IDQgMTggKi8KLSYobmlkX29ianNbODYzXSksLyogT0JKX3BoeXNpY2FsRGVsaXZlcnlPZmZpY2VOYW1lICAgMiA1IDQgMTkgKi8KLSYobmlkX29ianNbODY0XSksLyogT0JKX3RlbGVwaG9uZU51bWJlciAgICAgICAgICAgICAgMiA1IDQgMjAgKi8KLSYobmlkX29ianNbODY1XSksLyogT0JKX3RlbGV4TnVtYmVyICAgICAgICAgICAgICAgICAgMiA1IDQgMjEgKi8KLSYobmlkX29ianNbODY2XSksLyogT0JKX3RlbGV0ZXhUZXJtaW5hbElkZW50aWZpZXIgICAgMiA1IDQgMjIgKi8KLSYobmlkX29ianNbODY3XSksLyogT0JKX2ZhY3NpbWlsZVRlbGVwaG9uZU51bWJlciAgICAgMiA1IDQgMjMgKi8KLSYobmlkX29ianNbODY4XSksLyogT0JKX3gxMjFBZGRyZXNzICAgICAgICAgICAgICAgICAgMiA1IDQgMjQgKi8KLSYobmlkX29ianNbODY5XSksLyogT0JKX2ludGVybmF0aW9uYWxpU0ROTnVtYmVyICAgICAgMiA1IDQgMjUgKi8KLSYobmlkX29ianNbODcwXSksLyogT0JKX3JlZ2lzdGVyZWRBZGRyZXNzICAgICAgICAgICAgMiA1IDQgMjYgKi8KLSYobmlkX29ianNbODcxXSksLyogT0JKX2Rlc3RpbmF0aW9uSW5kaWNhdG9yICAgICAgICAgMiA1IDQgMjcgKi8KLSYobmlkX29ianNbODcyXSksLyogT0JKX3ByZWZlcnJlZERlbGl2ZXJ5TWV0aG9kICAgICAgMiA1IDQgMjggKi8KLSYobmlkX29ianNbODczXSksLyogT0JKX3ByZXNlbnRhdGlvbkFkZHJlc3MgICAgICAgICAgMiA1IDQgMjkgKi8KLSYobmlkX29ianNbODc0XSksLyogT0JKX3N1cHBvcnRlZEFwcGxpY2F0aW9uQ29udGV4dCAgMiA1IDQgMzAgKi8KLSYobmlkX29ianNbODc1XSksLyogT0JKX21lbWJlciAgICAgICAgICAgICAgICAgICAgICAgMiA1IDQgMzEgKi8KLSYobmlkX29ianNbODc2XSksLyogT0JKX293bmVyICAgICAgICAgICAgICAgICAgICAgICAgMiA1IDQgMzIgKi8KLSYobmlkX29ianNbODc3XSksLyogT0JKX3JvbGVPY2N1cGFudCAgICAgICAgICAgICAgICAgMiA1IDQgMzMgKi8KLSYobmlkX29ianNbODc4XSksLyogT0JKX3NlZUFsc28gICAgICAgICAgICAgICAgICAgICAgMiA1IDQgMzQgKi8KLSYobmlkX29ianNbODc5XSksLyogT0JKX3VzZXJQYXNzd29yZCAgICAgICAgICAgICAgICAgMiA1IDQgMzUgKi8KLSYobmlkX29ianNbODgwXSksLyogT0JKX3VzZXJDZXJ0aWZpY2F0ZSAgICAgICAgICAgICAgMiA1IDQgMzYgKi8KLSYobmlkX29ianNbODgxXSksLyogT0JKX2NBQ2VydGlmaWNhdGUgICAgICAgICAgICAgICAgMiA1IDQgMzcgKi8KLSYobmlkX29ianNbODgyXSksLyogT0JKX2F1dGhvcml0eVJldm9jYXRpb25MaXN0ICAgICAgMiA1IDQgMzggKi8KLSYobmlkX29ianNbODgzXSksLyogT0JKX2NlcnRpZmljYXRlUmV2b2NhdGlvbkxpc3QgICAgMiA1IDQgMzkgKi8KLSYobmlkX29ianNbODg0XSksLyogT0JKX2Nyb3NzQ2VydGlmaWNhdGVQYWlyICAgICAgICAgMiA1IDQgNDAgKi8KLSYobmlkX29ianNbMTczXSksLyogT0JKX25hbWUgICAgICAgICAgICAgICAgICAgICAgICAgMiA1IDQgNDEgKi8KLSYobmlkX29ianNbOTldKSwvKiBPQkpfZ2l2ZW5OYW1lICAgICAgICAgICAgICAgICAgICAyIDUgNCA0MiAqLwotJihuaWRfb2Jqc1sxMDFdKSwvKiBPQkpfaW5pdGlhbHMgICAgICAgICAgICAgICAgICAgICAyIDUgNCA0MyAqLwotJihuaWRfb2Jqc1s1MDldKSwvKiBPQkpfZ2VuZXJhdGlvblF1YWxpZmllciAgICAgICAgICAyIDUgNCA0NCAqLwotJihuaWRfb2Jqc1s1MDNdKSwvKiBPQkpfeDUwMFVuaXF1ZUlkZW50aWZpZXIgICAgICAgICAyIDUgNCA0NSAqLwotJihuaWRfb2Jqc1sxNzRdKSwvKiBPQkpfZG5RdWFsaWZpZXIgICAgICAgICAgICAgICAgICAyIDUgNCA0NiAqLwotJihuaWRfb2Jqc1s4ODVdKSwvKiBPQkpfZW5oYW5jZWRTZWFyY2hHdWlkZSAgICAgICAgICAyIDUgNCA0NyAqLwotJihuaWRfb2Jqc1s4ODZdKSwvKiBPQkpfcHJvdG9jb2xJbmZvcm1hdGlvbiAgICAgICAgICAyIDUgNCA0OCAqLwotJihuaWRfb2Jqc1s4ODddKSwvKiBPQkpfZGlzdGluZ3Vpc2hlZE5hbWUgICAgICAgICAgICAyIDUgNCA0OSAqLwotJihuaWRfb2Jqc1s4ODhdKSwvKiBPQkpfdW5pcXVlTWVtYmVyICAgICAgICAgICAgICAgICAyIDUgNCA1MCAqLwotJihuaWRfb2Jqc1s4ODldKSwvKiBPQkpfaG91c2VJZGVudGlmaWVyICAgICAgICAgICAgICAyIDUgNCA1MSAqLwotJihuaWRfb2Jqc1s4OTBdKSwvKiBPQkpfc3VwcG9ydGVkQWxnb3JpdGhtcyAgICAgICAgICAyIDUgNCA1MiAqLwotJihuaWRfb2Jqc1s4OTFdKSwvKiBPQkpfZGVsdGFSZXZvY2F0aW9uTGlzdCAgICAgICAgICAyIDUgNCA1MyAqLwotJihuaWRfb2Jqc1s4OTJdKSwvKiBPQkpfZG1kTmFtZSAgICAgICAgICAgICAgICAgICAgICAyIDUgNCA1NCAqLwotJihuaWRfb2Jqc1s1MTBdKSwvKiBPQkpfcHNldWRvbnltICAgICAgICAgICAgICAgICAgICAyIDUgNCA2NSAqLwotJihuaWRfb2Jqc1s0MDBdKSwvKiBPQkpfcm9sZSAgICAgICAgICAgICAgICAgICAgICAgICAyIDUgNCA3MiAqLwotJihuaWRfb2Jqc1s3NjldKSwvKiBPQkpfc3ViamVjdF9kaXJlY3RvcnlfYXR0cmlidXRlcyAyIDUgMjkgOSAqLwotJihuaWRfb2Jqc1s4Ml0pLC8qIE9CSl9zdWJqZWN0X2tleV9pZGVudGlmaWVyICAgICAgIDIgNSAyOSAxNCAqLwotJihuaWRfb2Jqc1s4M10pLC8qIE9CSl9rZXlfdXNhZ2UgICAgICAgICAgICAgICAgICAgIDIgNSAyOSAxNSAqLwotJihuaWRfb2Jqc1s4NF0pLC8qIE9CSl9wcml2YXRlX2tleV91c2FnZV9wZXJpb2QgICAgIDIgNSAyOSAxNiAqLwotJihuaWRfb2Jqc1s4NV0pLC8qIE9CSl9zdWJqZWN0X2FsdF9uYW1lICAgICAgICAgICAgIDIgNSAyOSAxNyAqLwotJihuaWRfb2Jqc1s4Nl0pLC8qIE9CSl9pc3N1ZXJfYWx0X25hbWUgICAgICAgICAgICAgIDIgNSAyOSAxOCAqLwotJihuaWRfb2Jqc1s4N10pLC8qIE9CSl9iYXNpY19jb25zdHJhaW50cyAgICAgICAgICAgIDIgNSAyOSAxOSAqLwotJihuaWRfb2Jqc1s4OF0pLC8qIE9CSl9jcmxfbnVtYmVyICAgICAgICAgICAgICAgICAgIDIgNSAyOSAyMCAqLwotJihuaWRfb2Jqc1sxNDFdKSwvKiBPQkpfY3JsX3JlYXNvbiAgICAgICAgICAgICAgICAgICAyIDUgMjkgMjEgKi8KLSYobmlkX29ianNbNDMwXSksLyogT0JKX2hvbGRfaW5zdHJ1Y3Rpb25fY29kZSAgICAgICAgMiA1IDI5IDIzICovCi0mKG5pZF9vYmpzWzE0Ml0pLC8qIE9CSl9pbnZhbGlkaXR5X2RhdGUgICAgICAgICAgICAgIDIgNSAyOSAyNCAqLwotJihuaWRfb2Jqc1sxNDBdKSwvKiBPQkpfZGVsdGFfY3JsICAgICAgICAgICAgICAgICAgICAyIDUgMjkgMjcgKi8KLSYobmlkX29ianNbNzcwXSksLyogT0JKX2lzc3VpbmdfZGlzdHJpYnV0aW9uX3BvaW50ICAgMiA1IDI5IDI4ICovCi0mKG5pZF9vYmpzWzc3MV0pLC8qIE9CSl9jZXJ0aWZpY2F0ZV9pc3N1ZXIgICAgICAgICAgIDIgNSAyOSAyOSAqLwotJihuaWRfb2Jqc1s2NjZdKSwvKiBPQkpfbmFtZV9jb25zdHJhaW50cyAgICAgICAgICAgICAyIDUgMjkgMzAgKi8KLSYobmlkX29ianNbMTAzXSksLyogT0JKX2NybF9kaXN0cmlidXRpb25fcG9pbnRzICAgICAgMiA1IDI5IDMxICovCi0mKG5pZF9vYmpzWzg5XSksLyogT0JKX2NlcnRpZmljYXRlX3BvbGljaWVzICAgICAgICAgMiA1IDI5IDMyICovCi0mKG5pZF9vYmpzWzc0N10pLC8qIE9CSl9wb2xpY3lfbWFwcGluZ3MgICAgICAgICAgICAgIDIgNSAyOSAzMyAqLwotJihuaWRfb2Jqc1s5MF0pLC8qIE9CSl9hdXRob3JpdHlfa2V5X2lkZW50aWZpZXIgICAgIDIgNSAyOSAzNSAqLwotJihuaWRfb2Jqc1s0MDFdKSwvKiBPQkpfcG9saWN5X2NvbnN0cmFpbnRzICAgICAgICAgICAyIDUgMjkgMzYgKi8KLSYobmlkX29ianNbMTI2XSksLyogT0JKX2V4dF9rZXlfdXNhZ2UgICAgICAgICAgICAgICAgMiA1IDI5IDM3ICovCi0mKG5pZF9vYmpzWzg1N10pLC8qIE9CSl9mcmVzaGVzdF9jcmwgICAgICAgICAgICAgICAgIDIgNSAyOSA0NiAqLwotJihuaWRfb2Jqc1s3NDhdKSwvKiBPQkpfaW5oaWJpdF9hbnlfcG9saWN5ICAgICAgICAgICAyIDUgMjkgNTQgKi8KLSYobmlkX29ianNbNDAyXSksLyogT0JKX3RhcmdldF9pbmZvcm1hdGlvbiAgICAgICAgICAgMiA1IDI5IDU1ICovCi0mKG5pZF9vYmpzWzQwM10pLC8qIE9CSl9ub19yZXZfYXZhaWwgICAgICAgICAgICAgICAgIDIgNSAyOSA1NiAqLwotJihuaWRfb2Jqc1s1MTNdKSwvKiBPQkpfc2V0X2N0eXBlICAgICAgICAgICAgICAgICAgICAyIDIzIDQyIDAgKi8KLSYobmlkX29ianNbNTE0XSksLyogT0JKX3NldF9tc2dFeHQgICAgICAgICAgICAgICAgICAgMiAyMyA0MiAxICovCi0mKG5pZF9vYmpzWzUxNV0pLC8qIE9CSl9zZXRfYXR0ciAgICAgICAgICAgICAgICAgICAgIDIgMjMgNDIgMyAqLwotJihuaWRfb2Jqc1s1MTZdKSwvKiBPQkpfc2V0X3BvbGljeSAgICAgICAgICAgICAgICAgICAyIDIzIDQyIDUgKi8KLSYobmlkX29ianNbNTE3XSksLyogT0JKX3NldF9jZXJ0RXh0ICAgICAgICAgICAgICAgICAgMiAyMyA0MiA3ICovCi0mKG5pZF9vYmpzWzUxOF0pLC8qIE9CSl9zZXRfYnJhbmQgICAgICAgICAgICAgICAgICAgIDIgMjMgNDIgOCAqLwotJihuaWRfb2Jqc1s2NzldKSwvKiBPQkpfd2FwX3dzZyAgICAgICAgICAgICAgICAgICAgICAyIDIzIDQzIDEgKi8KLSYobmlkX29ianNbMzgyXSksLyogT0JKX0RpcmVjdG9yeSAgICAgICAgICAgICAgICAgICAgMSAzIDYgMSAxICovCi0mKG5pZF9vYmpzWzM4M10pLC8qIE9CSl9NYW5hZ2VtZW50ICAgICAgICAgICAgICAgICAgIDEgMyA2IDEgMiAqLwotJihuaWRfb2Jqc1szODRdKSwvKiBPQkpfRXhwZXJpbWVudGFsICAgICAgICAgICAgICAgICAxIDMgNiAxIDMgKi8KLSYobmlkX29ianNbMzg1XSksLyogT0JKX1ByaXZhdGUgICAgICAgICAgICAgICAgICAgICAgMSAzIDYgMSA0ICovCi0mKG5pZF9vYmpzWzM4Nl0pLC8qIE9CSl9TZWN1cml0eSAgICAgICAgICAgICAgICAgICAgIDEgMyA2IDEgNSAqLwotJihuaWRfb2Jqc1szODddKSwvKiBPQkpfU05NUHYyICAgICAgICAgICAgICAgICAgICAgICAxIDMgNiAxIDYgKi8KLSYobmlkX29ianNbMzg4XSksLyogT0JKX01haWwgICAgICAgICAgICAgICAgICAgICAgICAgMSAzIDYgMSA3ICovCi0mKG5pZF9vYmpzWzM3Nl0pLC8qIE9CSl9hbGdvcml0aG0gICAgICAgICAgICAgICAgICAgIDEgMyAxNCAzIDIgKi8KLSYobmlkX29ianNbMzk1XSksLyogT0JKX2NsZWFyYW5jZSAgICAgICAgICAgICAgICAgICAgMiA1IDEgNSA1NSAqLwotJihuaWRfb2Jqc1sxOV0pLC8qIE9CSl9yc2EgICAgICAgICAgICAgICAgICAgICAgICAgIDIgNSA4IDEgMSAqLwotJihuaWRfb2Jqc1s5Nl0pLC8qIE9CSl9tZGMyV2l0aFJTQSAgICAgICAgICAgICAgICAgIDIgNSA4IDMgMTAwICovCi0mKG5pZF9vYmpzWzk1XSksLyogT0JKX21kYzIgICAgICAgICAgICAgICAgICAgICAgICAgMiA1IDggMyAxMDEgKi8KLSYobmlkX29ianNbNzQ2XSksLyogT0JKX2FueV9wb2xpY3kgICAgICAgICAgICAgICAgICAgMiA1IDI5IDMyIDAgKi8KLSYobmlkX29ianNbNTE5XSksLyogT0JKX3NldGN0X1BBTkRhdGEgICAgICAgICAgICAgICAgMiAyMyA0MiAwIDAgKi8KLSYobmlkX29ianNbNTIwXSksLyogT0JKX3NldGN0X1BBTlRva2VuICAgICAgICAgICAgICAgMiAyMyA0MiAwIDEgKi8KLSYobmlkX29ianNbNTIxXSksLyogT0JKX3NldGN0X1BBTk9ubHkgICAgICAgICAgICAgICAgMiAyMyA0MiAwIDIgKi8KLSYobmlkX29ianNbNTIyXSksLyogT0JKX3NldGN0X09JRGF0YSAgICAgICAgICAgICAgICAgMiAyMyA0MiAwIDMgKi8KLSYobmlkX29ianNbNTIzXSksLyogT0JKX3NldGN0X1BJICAgICAgICAgICAgICAgICAgICAgMiAyMyA0MiAwIDQgKi8KLSYobmlkX29ianNbNTI0XSksLyogT0JKX3NldGN0X1BJRGF0YSAgICAgICAgICAgICAgICAgMiAyMyA0MiAwIDUgKi8KLSYobmlkX29ianNbNTI1XSksLyogT0JKX3NldGN0X1BJRGF0YVVuc2lnbmVkICAgICAgICAgMiAyMyA0MiAwIDYgKi8KLSYobmlkX29ianNbNTI2XSksLyogT0JKX3NldGN0X0hPRElucHV0ICAgICAgICAgICAgICAgMiAyMyA0MiAwIDcgKi8KLSYobmlkX29ianNbNTI3XSksLyogT0JKX3NldGN0X0F1dGhSZXNCYWdnYWdlICAgICAgICAgMiAyMyA0MiAwIDggKi8KLSYobmlkX29ianNbNTI4XSksLyogT0JKX3NldGN0X0F1dGhSZXZSZXFCYWdnYWdlICAgICAgMiAyMyA0MiAwIDkgKi8KLSYobmlkX29ianNbNTI5XSksLyogT0JKX3NldGN0X0F1dGhSZXZSZXNCYWdnYWdlICAgICAgMiAyMyA0MiAwIDEwICovCi0mKG5pZF9vYmpzWzUzMF0pLC8qIE9CSl9zZXRjdF9DYXBUb2tlblNlcSAgICAgICAgICAgIDIgMjMgNDIgMCAxMSAqLwotJihuaWRfb2Jqc1s1MzFdKSwvKiBPQkpfc2V0Y3RfUEluaXRSZXNEYXRhICAgICAgICAgICAyIDIzIDQyIDAgMTIgKi8KLSYobmlkX29ianNbNTMyXSksLyogT0JKX3NldGN0X1BJX1RCUyAgICAgICAgICAgICAgICAgMiAyMyA0MiAwIDEzICovCi0mKG5pZF9vYmpzWzUzM10pLC8qIE9CSl9zZXRjdF9QUmVzRGF0YSAgICAgICAgICAgICAgIDIgMjMgNDIgMCAxNCAqLwotJihuaWRfb2Jqc1s1MzRdKSwvKiBPQkpfc2V0Y3RfQXV0aFJlcVRCUyAgICAgICAgICAgICAyIDIzIDQyIDAgMTYgKi8KLSYobmlkX29ianNbNTM1XSksLyogT0JKX3NldGN0X0F1dGhSZXNUQlMgICAgICAgICAgICAgMiAyMyA0MiAwIDE3ICovCi0mKG5pZF9vYmpzWzUzNl0pLC8qIE9CSl9zZXRjdF9BdXRoUmVzVEJTWCAgICAgICAgICAgIDIgMjMgNDIgMCAxOCAqLwotJihuaWRfb2Jqc1s1MzddKSwvKiBPQkpfc2V0Y3RfQXV0aFRva2VuVEJTICAgICAgICAgICAyIDIzIDQyIDAgMTkgKi8KLSYobmlkX29ianNbNTM4XSksLyogT0JKX3NldGN0X0NhcFRva2VuRGF0YSAgICAgICAgICAgMiAyMyA0MiAwIDIwICovCi0mKG5pZF9vYmpzWzUzOV0pLC8qIE9CSl9zZXRjdF9DYXBUb2tlblRCUyAgICAgICAgICAgIDIgMjMgNDIgMCAyMSAqLwotJihuaWRfb2Jqc1s1NDBdKSwvKiBPQkpfc2V0Y3RfQWNxQ2FyZENvZGVNc2cgICAgICAgICAyIDIzIDQyIDAgMjIgKi8KLSYobmlkX29ianNbNTQxXSksLyogT0JKX3NldGN0X0F1dGhSZXZSZXFUQlMgICAgICAgICAgMiAyMyA0MiAwIDIzICovCi0mKG5pZF9vYmpzWzU0Ml0pLC8qIE9CSl9zZXRjdF9BdXRoUmV2UmVzRGF0YSAgICAgICAgIDIgMjMgNDIgMCAyNCAqLwotJihuaWRfb2Jqc1s1NDNdKSwvKiBPQkpfc2V0Y3RfQXV0aFJldlJlc1RCUyAgICAgICAgICAyIDIzIDQyIDAgMjUgKi8KLSYobmlkX29ianNbNTQ0XSksLyogT0JKX3NldGN0X0NhcFJlcVRCUyAgICAgICAgICAgICAgMiAyMyA0MiAwIDI2ICovCi0mKG5pZF9vYmpzWzU0NV0pLC8qIE9CSl9zZXRjdF9DYXBSZXFUQlNYICAgICAgICAgICAgIDIgMjMgNDIgMCAyNyAqLwotJihuaWRfb2Jqc1s1NDZdKSwvKiBPQkpfc2V0Y3RfQ2FwUmVzRGF0YSAgICAgICAgICAgICAyIDIzIDQyIDAgMjggKi8KLSYobmlkX29ianNbNTQ3XSksLyogT0JKX3NldGN0X0NhcFJldlJlcVRCUyAgICAgICAgICAgMiAyMyA0MiAwIDI5ICovCi0mKG5pZF9vYmpzWzU0OF0pLC8qIE9CSl9zZXRjdF9DYXBSZXZSZXFUQlNYICAgICAgICAgIDIgMjMgNDIgMCAzMCAqLwotJihuaWRfb2Jqc1s1NDldKSwvKiBPQkpfc2V0Y3RfQ2FwUmV2UmVzRGF0YSAgICAgICAgICAyIDIzIDQyIDAgMzEgKi8KLSYobmlkX29ianNbNTUwXSksLyogT0JKX3NldGN0X0NyZWRSZXFUQlMgICAgICAgICAgICAgMiAyMyA0MiAwIDMyICovCi0mKG5pZF9vYmpzWzU1MV0pLC8qIE9CSl9zZXRjdF9DcmVkUmVxVEJTWCAgICAgICAgICAgIDIgMjMgNDIgMCAzMyAqLwotJihuaWRfb2Jqc1s1NTJdKSwvKiBPQkpfc2V0Y3RfQ3JlZFJlc0RhdGEgICAgICAgICAgICAyIDIzIDQyIDAgMzQgKi8KLSYobmlkX29ianNbNTUzXSksLyogT0JKX3NldGN0X0NyZWRSZXZSZXFUQlMgICAgICAgICAgMiAyMyA0MiAwIDM1ICovCi0mKG5pZF9vYmpzWzU1NF0pLC8qIE9CSl9zZXRjdF9DcmVkUmV2UmVxVEJTWCAgICAgICAgIDIgMjMgNDIgMCAzNiAqLwotJihuaWRfb2Jqc1s1NTVdKSwvKiBPQkpfc2V0Y3RfQ3JlZFJldlJlc0RhdGEgICAgICAgICAyIDIzIDQyIDAgMzcgKi8KLSYobmlkX29ianNbNTU2XSksLyogT0JKX3NldGN0X1BDZXJ0UmVxRGF0YSAgICAgICAgICAgMiAyMyA0MiAwIDM4ICovCi0mKG5pZF9vYmpzWzU1N10pLC8qIE9CSl9zZXRjdF9QQ2VydFJlc1RCUyAgICAgICAgICAgIDIgMjMgNDIgMCAzOSAqLwotJihuaWRfb2Jqc1s1NThdKSwvKiBPQkpfc2V0Y3RfQmF0Y2hBZG1pblJlcURhdGEgICAgICAyIDIzIDQyIDAgNDAgKi8KLSYobmlkX29ianNbNTU5XSksLyogT0JKX3NldGN0X0JhdGNoQWRtaW5SZXNEYXRhICAgICAgMiAyMyA0MiAwIDQxICovCi0mKG5pZF9vYmpzWzU2MF0pLC8qIE9CSl9zZXRjdF9DYXJkQ0luaXRSZXNUQlMgICAgICAgIDIgMjMgNDIgMCA0MiAqLwotJihuaWRfb2Jqc1s1NjFdKSwvKiBPQkpfc2V0Y3RfTWVBcUNJbml0UmVzVEJTICAgICAgICAyIDIzIDQyIDAgNDMgKi8KLSYobmlkX29ianNbNTYyXSksLyogT0JKX3NldGN0X1JlZ0Zvcm1SZXNUQlMgICAgICAgICAgMiAyMyA0MiAwIDQ0ICovCi0mKG5pZF9vYmpzWzU2M10pLC8qIE9CSl9zZXRjdF9DZXJ0UmVxRGF0YSAgICAgICAgICAgIDIgMjMgNDIgMCA0NSAqLwotJihuaWRfb2Jqc1s1NjRdKSwvKiBPQkpfc2V0Y3RfQ2VydFJlcVRCUyAgICAgICAgICAgICAyIDIzIDQyIDAgNDYgKi8KLSYobmlkX29ianNbNTY1XSksLyogT0JKX3NldGN0X0NlcnRSZXNEYXRhICAgICAgICAgICAgMiAyMyA0MiAwIDQ3ICovCi0mKG5pZF9vYmpzWzU2Nl0pLC8qIE9CSl9zZXRjdF9DZXJ0SW5xUmVxVEJTICAgICAgICAgIDIgMjMgNDIgMCA0OCAqLwotJihuaWRfb2Jqc1s1NjddKSwvKiBPQkpfc2V0Y3RfRXJyb3JUQlMgICAgICAgICAgICAgICAyIDIzIDQyIDAgNDkgKi8KLSYobmlkX29ianNbNTY4XSksLyogT0JKX3NldGN0X1BJRHVhbFNpZ25lZFRCRSAgICAgICAgMiAyMyA0MiAwIDUwICovCi0mKG5pZF9vYmpzWzU2OV0pLC8qIE9CSl9zZXRjdF9QSVVuc2lnbmVkVEJFICAgICAgICAgIDIgMjMgNDIgMCA1MSAqLwotJihuaWRfb2Jqc1s1NzBdKSwvKiBPQkpfc2V0Y3RfQXV0aFJlcVRCRSAgICAgICAgICAgICAyIDIzIDQyIDAgNTIgKi8KLSYobmlkX29ianNbNTcxXSksLyogT0JKX3NldGN0X0F1dGhSZXNUQkUgICAgICAgICAgICAgMiAyMyA0MiAwIDUzICovCi0mKG5pZF9vYmpzWzU3Ml0pLC8qIE9CSl9zZXRjdF9BdXRoUmVzVEJFWCAgICAgICAgICAgIDIgMjMgNDIgMCA1NCAqLwotJihuaWRfb2Jqc1s1NzNdKSwvKiBPQkpfc2V0Y3RfQXV0aFRva2VuVEJFICAgICAgICAgICAyIDIzIDQyIDAgNTUgKi8KLSYobmlkX29ianNbNTc0XSksLyogT0JKX3NldGN0X0NhcFRva2VuVEJFICAgICAgICAgICAgMiAyMyA0MiAwIDU2ICovCi0mKG5pZF9vYmpzWzU3NV0pLC8qIE9CSl9zZXRjdF9DYXBUb2tlblRCRVggICAgICAgICAgIDIgMjMgNDIgMCA1NyAqLwotJihuaWRfb2Jqc1s1NzZdKSwvKiBPQkpfc2V0Y3RfQWNxQ2FyZENvZGVNc2dUQkUgICAgICAyIDIzIDQyIDAgNTggKi8KLSYobmlkX29ianNbNTc3XSksLyogT0JKX3NldGN0X0F1dGhSZXZSZXFUQkUgICAgICAgICAgMiAyMyA0MiAwIDU5ICovCi0mKG5pZF9vYmpzWzU3OF0pLC8qIE9CSl9zZXRjdF9BdXRoUmV2UmVzVEJFICAgICAgICAgIDIgMjMgNDIgMCA2MCAqLwotJihuaWRfb2Jqc1s1NzldKSwvKiBPQkpfc2V0Y3RfQXV0aFJldlJlc1RCRUIgICAgICAgICAyIDIzIDQyIDAgNjEgKi8KLSYobmlkX29ianNbNTgwXSksLyogT0JKX3NldGN0X0NhcFJlcVRCRSAgICAgICAgICAgICAgMiAyMyA0MiAwIDYyICovCi0mKG5pZF9vYmpzWzU4MV0pLC8qIE9CSl9zZXRjdF9DYXBSZXFUQkVYICAgICAgICAgICAgIDIgMjMgNDIgMCA2MyAqLwotJihuaWRfb2Jqc1s1ODJdKSwvKiBPQkpfc2V0Y3RfQ2FwUmVzVEJFICAgICAgICAgICAgICAyIDIzIDQyIDAgNjQgKi8KLSYobmlkX29ianNbNTgzXSksLyogT0JKX3NldGN0X0NhcFJldlJlcVRCRSAgICAgICAgICAgMiAyMyA0MiAwIDY1ICovCi0mKG5pZF9vYmpzWzU4NF0pLC8qIE9CSl9zZXRjdF9DYXBSZXZSZXFUQkVYICAgICAgICAgIDIgMjMgNDIgMCA2NiAqLwotJihuaWRfb2Jqc1s1ODVdKSwvKiBPQkpfc2V0Y3RfQ2FwUmV2UmVzVEJFICAgICAgICAgICAyIDIzIDQyIDAgNjcgKi8KLSYobmlkX29ianNbNTg2XSksLyogT0JKX3NldGN0X0NyZWRSZXFUQkUgICAgICAgICAgICAgMiAyMyA0MiAwIDY4ICovCi0mKG5pZF9vYmpzWzU4N10pLC8qIE9CSl9zZXRjdF9DcmVkUmVxVEJFWCAgICAgICAgICAgIDIgMjMgNDIgMCA2OSAqLwotJihuaWRfb2Jqc1s1ODhdKSwvKiBPQkpfc2V0Y3RfQ3JlZFJlc1RCRSAgICAgICAgICAgICAyIDIzIDQyIDAgNzAgKi8KLSYobmlkX29ianNbNTg5XSksLyogT0JKX3NldGN0X0NyZWRSZXZSZXFUQkUgICAgICAgICAgMiAyMyA0MiAwIDcxICovCi0mKG5pZF9vYmpzWzU5MF0pLC8qIE9CSl9zZXRjdF9DcmVkUmV2UmVxVEJFWCAgICAgICAgIDIgMjMgNDIgMCA3MiAqLwotJihuaWRfb2Jqc1s1OTFdKSwvKiBPQkpfc2V0Y3RfQ3JlZFJldlJlc1RCRSAgICAgICAgICAyIDIzIDQyIDAgNzMgKi8KLSYobmlkX29ianNbNTkyXSksLyogT0JKX3NldGN0X0JhdGNoQWRtaW5SZXFUQkUgICAgICAgMiAyMyA0MiAwIDc0ICovCi0mKG5pZF9vYmpzWzU5M10pLC8qIE9CSl9zZXRjdF9CYXRjaEFkbWluUmVzVEJFICAgICAgIDIgMjMgNDIgMCA3NSAqLwotJihuaWRfb2Jqc1s1OTRdKSwvKiBPQkpfc2V0Y3RfUmVnRm9ybVJlcVRCRSAgICAgICAgICAyIDIzIDQyIDAgNzYgKi8KLSYobmlkX29ianNbNTk1XSksLyogT0JKX3NldGN0X0NlcnRSZXFUQkUgICAgICAgICAgICAgMiAyMyA0MiAwIDc3ICovCi0mKG5pZF9vYmpzWzU5Nl0pLC8qIE9CSl9zZXRjdF9DZXJ0UmVxVEJFWCAgICAgICAgICAgIDIgMjMgNDIgMCA3OCAqLwotJihuaWRfb2Jqc1s1OTddKSwvKiBPQkpfc2V0Y3RfQ2VydFJlc1RCRSAgICAgICAgICAgICAyIDIzIDQyIDAgNzkgKi8KLSYobmlkX29ianNbNTk4XSksLyogT0JKX3NldGN0X0NSTE5vdGlmaWNhdGlvblRCUyAgICAgMiAyMyA0MiAwIDgwICovCi0mKG5pZF9vYmpzWzU5OV0pLC8qIE9CSl9zZXRjdF9DUkxOb3RpZmljYXRpb25SZXNUQlMgIDIgMjMgNDIgMCA4MSAqLwotJihuaWRfb2Jqc1s2MDBdKSwvKiBPQkpfc2V0Y3RfQkNJRGlzdHJpYnV0aW9uVEJTICAgICAyIDIzIDQyIDAgODIgKi8KLSYobmlkX29ianNbNjAxXSksLyogT0JKX3NldGV4dF9nZW5DcnlwdCAgICAgICAgICAgICAgMiAyMyA0MiAxIDEgKi8KLSYobmlkX29ianNbNjAyXSksLyogT0JKX3NldGV4dF9taUF1dGggICAgICAgICAgICAgICAgMiAyMyA0MiAxIDMgKi8KLSYobmlkX29ianNbNjAzXSksLyogT0JKX3NldGV4dF9waW5TZWN1cmUgICAgICAgICAgICAgMiAyMyA0MiAxIDQgKi8KLSYobmlkX29ianNbNjA0XSksLyogT0JKX3NldGV4dF9waW5BbnkgICAgICAgICAgICAgICAgMiAyMyA0MiAxIDUgKi8KLSYobmlkX29ianNbNjA1XSksLyogT0JKX3NldGV4dF90cmFjazIgICAgICAgICAgICAgICAgMiAyMyA0MiAxIDcgKi8KLSYobmlkX29ianNbNjA2XSksLyogT0JKX3NldGV4dF9jdiAgICAgICAgICAgICAgICAgICAgMiAyMyA0MiAxIDggKi8KLSYobmlkX29ianNbNjIwXSksLyogT0JKX3NldEF0dHJfQ2VydCAgICAgICAgICAgICAgICAgMiAyMyA0MiAzIDAgKi8KLSYobmlkX29ianNbNjIxXSksLyogT0JKX3NldEF0dHJfUEdXWWNhcCAgICAgICAgICAgICAgMiAyMyA0MiAzIDEgKi8KLSYobmlkX29ianNbNjIyXSksLyogT0JKX3NldEF0dHJfVG9rZW5UeXBlICAgICAgICAgICAgMiAyMyA0MiAzIDIgKi8KLSYobmlkX29ianNbNjIzXSksLyogT0JKX3NldEF0dHJfSXNzQ2FwICAgICAgICAgICAgICAgMiAyMyA0MiAzIDMgKi8KLSYobmlkX29ianNbNjA3XSksLyogT0JKX3NldF9wb2xpY3lfcm9vdCAgICAgICAgICAgICAgMiAyMyA0MiA1IDAgKi8KLSYobmlkX29ianNbNjA4XSksLyogT0JKX3NldENleHRfaGFzaGVkUm9vdCAgICAgICAgICAgMiAyMyA0MiA3IDAgKi8KLSYobmlkX29ianNbNjA5XSksLyogT0JKX3NldENleHRfY2VydFR5cGUgICAgICAgICAgICAgMiAyMyA0MiA3IDEgKi8KLSYobmlkX29ianNbNjEwXSksLyogT0JKX3NldENleHRfbWVyY2hEYXRhICAgICAgICAgICAgMiAyMyA0MiA3IDIgKi8KLSYobmlkX29ianNbNjExXSksLyogT0JKX3NldENleHRfY0NlcnRSZXF1aXJlZCAgICAgICAgMiAyMyA0MiA3IDMgKi8KLSYobmlkX29ianNbNjEyXSksLyogT0JKX3NldENleHRfdHVubmVsaW5nICAgICAgICAgICAgMiAyMyA0MiA3IDQgKi8KLSYobmlkX29ianNbNjEzXSksLyogT0JKX3NldENleHRfc2V0RXh0ICAgICAgICAgICAgICAgMiAyMyA0MiA3IDUgKi8KLSYobmlkX29ianNbNjE0XSksLyogT0JKX3NldENleHRfc2V0UXVhbGYgICAgICAgICAgICAgMiAyMyA0MiA3IDYgKi8KLSYobmlkX29ianNbNjE1XSksLyogT0JKX3NldENleHRfUEdXWWNhcGFiaWxpdGllcyAgICAgMiAyMyA0MiA3IDcgKi8KLSYobmlkX29ianNbNjE2XSksLyogT0JKX3NldENleHRfVG9rZW5JZGVudGlmaWVyICAgICAgMiAyMyA0MiA3IDggKi8KLSYobmlkX29ianNbNjE3XSksLyogT0JKX3NldENleHRfVHJhY2syRGF0YSAgICAgICAgICAgMiAyMyA0MiA3IDkgKi8KLSYobmlkX29ianNbNjE4XSksLyogT0JKX3NldENleHRfVG9rZW5UeXBlICAgICAgICAgICAgMiAyMyA0MiA3IDEwICovCi0mKG5pZF9vYmpzWzYxOV0pLC8qIE9CSl9zZXRDZXh0X0lzc3VlckNhcGFiaWxpdGllcyAgIDIgMjMgNDIgNyAxMSAqLwotJihuaWRfb2Jqc1s2MzZdKSwvKiBPQkpfc2V0X2JyYW5kX0lBVEFfQVRBICAgICAgICAgICAyIDIzIDQyIDggMSAqLwotJihuaWRfb2Jqc1s2NDBdKSwvKiBPQkpfc2V0X2JyYW5kX1Zpc2EgICAgICAgICAgICAgICAyIDIzIDQyIDggNCAqLwotJihuaWRfb2Jqc1s2NDFdKSwvKiBPQkpfc2V0X2JyYW5kX01hc3RlckNhcmQgICAgICAgICAyIDIzIDQyIDggNSAqLwotJihuaWRfb2Jqc1s2MzddKSwvKiBPQkpfc2V0X2JyYW5kX0RpbmVycyAgICAgICAgICAgICAyIDIzIDQyIDggMzAgKi8KLSYobmlkX29ianNbNjM4XSksLyogT0JKX3NldF9icmFuZF9BbWVyaWNhbkV4cHJlc3MgICAgMiAyMyA0MiA4IDM0ICovCi0mKG5pZF9vYmpzWzYzOV0pLC8qIE9CSl9zZXRfYnJhbmRfSkNCICAgICAgICAgICAgICAgIDIgMjMgNDIgOCAzNSAqLwotJihuaWRfb2Jqc1s4MDVdKSwvKiBPQkpfY3J5cHRvcHJvICAgICAgICAgICAgICAgICAgICAxIDIgNjQzIDIgMiAqLwotJihuaWRfb2Jqc1s4MDZdKSwvKiBPQkpfY3J5cHRvY29tICAgICAgICAgICAgICAgICAgICAxIDIgNjQzIDIgOSAqLwotJihuaWRfb2Jqc1sxODRdKSwvKiBPQkpfWDlfNTcgICAgICAgICAgICAgICAgICAgICAgICAxIDIgODQwIDEwMDQwICovCi0mKG5pZF9vYmpzWzQwNV0pLC8qIE9CSl9hbnNpX1g5XzYyICAgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTAwNDUgKi8KLSYobmlkX29ianNbMzg5XSksLyogT0JKX0VudGVycHJpc2VzICAgICAgICAgICAgICAgICAgMSAzIDYgMSA0IDEgKi8KLSYobmlkX29ianNbNTA0XSksLyogT0JKX21pbWVfbWhzICAgICAgICAgICAgICAgICAgICAgMSAzIDYgMSA3IDEgKi8KLSYobmlkX29ianNbMTA0XSksLyogT0JKX21kNVdpdGhSU0EgICAgICAgICAgICAgICAgICAgMSAzIDE0IDMgMiAzICovCi0mKG5pZF9vYmpzWzI5XSksLyogT0JKX2Rlc19lY2IgICAgICAgICAgICAgICAgICAgICAgMSAzIDE0IDMgMiA2ICovCi0mKG5pZF9vYmpzWzMxXSksLyogT0JKX2Rlc19jYmMgICAgICAgICAgICAgICAgICAgICAgMSAzIDE0IDMgMiA3ICovCi0mKG5pZF9vYmpzWzQ1XSksLyogT0JKX2Rlc19vZmI2NCAgICAgICAgICAgICAgICAgICAgMSAzIDE0IDMgMiA4ICovCi0mKG5pZF9vYmpzWzMwXSksLyogT0JKX2Rlc19jZmI2NCAgICAgICAgICAgICAgICAgICAgMSAzIDE0IDMgMiA5ICovCi0mKG5pZF9vYmpzWzM3N10pLC8qIE9CSl9yc2FTaWduYXR1cmUgICAgICAgICAgICAgICAgIDEgMyAxNCAzIDIgMTEgKi8KLSYobmlkX29ianNbNjddKSwvKiBPQkpfZHNhXzIgICAgICAgICAgICAgICAgICAgICAgICAxIDMgMTQgMyAyIDEyICovCi0mKG5pZF9vYmpzWzY2XSksLyogT0JKX2RzYVdpdGhTSEEgICAgICAgICAgICAgICAgICAgMSAzIDE0IDMgMiAxMyAqLwotJihuaWRfb2Jqc1s0Ml0pLC8qIE9CSl9zaGFXaXRoUlNBRW5jcnlwdGlvbiAgICAgICAgIDEgMyAxNCAzIDIgMTUgKi8KLSYobmlkX29ianNbMzJdKSwvKiBPQkpfZGVzX2VkZV9lY2IgICAgICAgICAgICAgICAgICAxIDMgMTQgMyAyIDE3ICovCi0mKG5pZF9vYmpzWzQxXSksLyogT0JKX3NoYSAgICAgICAgICAgICAgICAgICAgICAgICAgMSAzIDE0IDMgMiAxOCAqLwotJihuaWRfb2Jqc1s2NF0pLC8qIE9CSl9zaGExICAgICAgICAgICAgICAgICAgICAgICAgIDEgMyAxNCAzIDIgMjYgKi8KLSYobmlkX29ianNbNzBdKSwvKiBPQkpfZHNhV2l0aFNIQTFfMiAgICAgICAgICAgICAgICAxIDMgMTQgMyAyIDI3ICovCi0mKG5pZF9vYmpzWzExNV0pLC8qIE9CSl9zaGExV2l0aFJTQSAgICAgICAgICAgICAgICAgIDEgMyAxNCAzIDIgMjkgKi8KLSYobmlkX29ianNbMTE3XSksLyogT0JKX3JpcGVtZDE2MCAgICAgICAgICAgICAgICAgICAgMSAzIDM2IDMgMiAxICovCi0mKG5pZF9vYmpzWzE0M10pLC8qIE9CSl9zeG5ldCAgICAgICAgICAgICAgICAgICAgICAgIDEgMyAxMDEgMSA0IDEgKi8KLSYobmlkX29ianNbNzIxXSksLyogT0JKX3NlY3QxNjNrMSAgICAgICAgICAgICAgICAgICAgMSAzIDEzMiAwIDEgKi8KLSYobmlkX29ianNbNzIyXSksLyogT0JKX3NlY3QxNjNyMSAgICAgICAgICAgICAgICAgICAgMSAzIDEzMiAwIDIgKi8KLSYobmlkX29ianNbNzI4XSksLyogT0JKX3NlY3QyMzlrMSAgICAgICAgICAgICAgICAgICAgMSAzIDEzMiAwIDMgKi8KLSYobmlkX29ianNbNzE3XSksLyogT0JKX3NlY3QxMTNyMSAgICAgICAgICAgICAgICAgICAgMSAzIDEzMiAwIDQgKi8KLSYobmlkX29ianNbNzE4XSksLyogT0JKX3NlY3QxMTNyMiAgICAgICAgICAgICAgICAgICAgMSAzIDEzMiAwIDUgKi8KLSYobmlkX29ianNbNzA0XSksLyogT0JKX3NlY3AxMTJyMSAgICAgICAgICAgICAgICAgICAgMSAzIDEzMiAwIDYgKi8KLSYobmlkX29ianNbNzA1XSksLyogT0JKX3NlY3AxMTJyMiAgICAgICAgICAgICAgICAgICAgMSAzIDEzMiAwIDcgKi8KLSYobmlkX29ianNbNzA5XSksLyogT0JKX3NlY3AxNjByMSAgICAgICAgICAgICAgICAgICAgMSAzIDEzMiAwIDggKi8KLSYobmlkX29ianNbNzA4XSksLyogT0JKX3NlY3AxNjBrMSAgICAgICAgICAgICAgICAgICAgMSAzIDEzMiAwIDkgKi8KLSYobmlkX29ianNbNzE0XSksLyogT0JKX3NlY3AyNTZrMSAgICAgICAgICAgICAgICAgICAgMSAzIDEzMiAwIDEwICovCi0mKG5pZF9vYmpzWzcyM10pLC8qIE9CSl9zZWN0MTYzcjIgICAgICAgICAgICAgICAgICAgIDEgMyAxMzIgMCAxNSAqLwotJihuaWRfb2Jqc1s3MjldKSwvKiBPQkpfc2VjdDI4M2sxICAgICAgICAgICAgICAgICAgICAxIDMgMTMyIDAgMTYgKi8KLSYobmlkX29ianNbNzMwXSksLyogT0JKX3NlY3QyODNyMSAgICAgICAgICAgICAgICAgICAgMSAzIDEzMiAwIDE3ICovCi0mKG5pZF9vYmpzWzcxOV0pLC8qIE9CSl9zZWN0MTMxcjEgICAgICAgICAgICAgICAgICAgIDEgMyAxMzIgMCAyMiAqLwotJihuaWRfb2Jqc1s3MjBdKSwvKiBPQkpfc2VjdDEzMXIyICAgICAgICAgICAgICAgICAgICAxIDMgMTMyIDAgMjMgKi8KLSYobmlkX29ianNbNzI0XSksLyogT0JKX3NlY3QxOTNyMSAgICAgICAgICAgICAgICAgICAgMSAzIDEzMiAwIDI0ICovCi0mKG5pZF9vYmpzWzcyNV0pLC8qIE9CSl9zZWN0MTkzcjIgICAgICAgICAgICAgICAgICAgIDEgMyAxMzIgMCAyNSAqLwotJihuaWRfb2Jqc1s3MjZdKSwvKiBPQkpfc2VjdDIzM2sxICAgICAgICAgICAgICAgICAgICAxIDMgMTMyIDAgMjYgKi8KLSYobmlkX29ianNbNzI3XSksLyogT0JKX3NlY3QyMzNyMSAgICAgICAgICAgICAgICAgICAgMSAzIDEzMiAwIDI3ICovCi0mKG5pZF9vYmpzWzcwNl0pLC8qIE9CSl9zZWNwMTI4cjEgICAgICAgICAgICAgICAgICAgIDEgMyAxMzIgMCAyOCAqLwotJihuaWRfb2Jqc1s3MDddKSwvKiBPQkpfc2VjcDEyOHIyICAgICAgICAgICAgICAgICAgICAxIDMgMTMyIDAgMjkgKi8KLSYobmlkX29ianNbNzEwXSksLyogT0JKX3NlY3AxNjByMiAgICAgICAgICAgICAgICAgICAgMSAzIDEzMiAwIDMwICovCi0mKG5pZF9vYmpzWzcxMV0pLC8qIE9CSl9zZWNwMTkyazEgICAgICAgICAgICAgICAgICAgIDEgMyAxMzIgMCAzMSAqLwotJihuaWRfb2Jqc1s3MTJdKSwvKiBPQkpfc2VjcDIyNGsxICAgICAgICAgICAgICAgICAgICAxIDMgMTMyIDAgMzIgKi8KLSYobmlkX29ianNbNzEzXSksLyogT0JKX3NlY3AyMjRyMSAgICAgICAgICAgICAgICAgICAgMSAzIDEzMiAwIDMzICovCi0mKG5pZF9vYmpzWzcxNV0pLC8qIE9CSl9zZWNwMzg0cjEgICAgICAgICAgICAgICAgICAgIDEgMyAxMzIgMCAzNCAqLwotJihuaWRfb2Jqc1s3MTZdKSwvKiBPQkpfc2VjcDUyMXIxICAgICAgICAgICAgICAgICAgICAxIDMgMTMyIDAgMzUgKi8KLSYobmlkX29ianNbNzMxXSksLyogT0JKX3NlY3Q0MDlrMSAgICAgICAgICAgICAgICAgICAgMSAzIDEzMiAwIDM2ICovCi0mKG5pZF9vYmpzWzczMl0pLC8qIE9CSl9zZWN0NDA5cjEgICAgICAgICAgICAgICAgICAgIDEgMyAxMzIgMCAzNyAqLwotJihuaWRfb2Jqc1s3MzNdKSwvKiBPQkpfc2VjdDU3MWsxICAgICAgICAgICAgICAgICAgICAxIDMgMTMyIDAgMzggKi8KLSYobmlkX29ianNbNzM0XSksLyogT0JKX3NlY3Q1NzFyMSAgICAgICAgICAgICAgICAgICAgMSAzIDEzMiAwIDM5ICovCi0mKG5pZF9vYmpzWzYyNF0pLC8qIE9CSl9zZXRfcm9vdEtleVRodW1iICAgICAgICAgICAgIDIgMjMgNDIgMyAwIDAgKi8KLSYobmlkX29ianNbNjI1XSksLyogT0JKX3NldF9hZGRQb2xpY3kgICAgICAgICAgICAgICAgMiAyMyA0MiAzIDAgMSAqLwotJihuaWRfb2Jqc1s2MjZdKSwvKiBPQkpfc2V0QXR0cl9Ub2tlbl9FTVYgICAgICAgICAgICAyIDIzIDQyIDMgMiAxICovCi0mKG5pZF9vYmpzWzYyN10pLC8qIE9CSl9zZXRBdHRyX1Rva2VuX0IwUHJpbWUgICAgICAgIDIgMjMgNDIgMyAyIDIgKi8KLSYobmlkX29ianNbNjI4XSksLyogT0JKX3NldEF0dHJfSXNzQ2FwX0NWTSAgICAgICAgICAgMiAyMyA0MiAzIDMgMyAqLwotJihuaWRfb2Jqc1s2MjldKSwvKiBPQkpfc2V0QXR0cl9Jc3NDYXBfVDIgICAgICAgICAgICAyIDIzIDQyIDMgMyA0ICovCi0mKG5pZF9vYmpzWzYzMF0pLC8qIE9CSl9zZXRBdHRyX0lzc0NhcF9TaWcgICAgICAgICAgIDIgMjMgNDIgMyAzIDUgKi8KLSYobmlkX29ianNbNjQyXSksLyogT0JKX3NldF9icmFuZF9Ob3Z1cyAgICAgICAgICAgICAgMiAyMyA0MiA4IDYwMTEgKi8KLSYobmlkX29ianNbNzM1XSksLyogT0JKX3dhcF93c2dfaWRtX2VjaWRfd3RsczEgICAgICAgMiAyMyA0MyAxIDQgMSAqLwotJihuaWRfb2Jqc1s3MzZdKSwvKiBPQkpfd2FwX3dzZ19pZG1fZWNpZF93dGxzMyAgICAgICAyIDIzIDQzIDEgNCAzICovCi0mKG5pZF9vYmpzWzczN10pLC8qIE9CSl93YXBfd3NnX2lkbV9lY2lkX3d0bHM0ICAgICAgIDIgMjMgNDMgMSA0IDQgKi8KLSYobmlkX29ianNbNzM4XSksLyogT0JKX3dhcF93c2dfaWRtX2VjaWRfd3RsczUgICAgICAgMiAyMyA0MyAxIDQgNSAqLwotJihuaWRfb2Jqc1s3MzldKSwvKiBPQkpfd2FwX3dzZ19pZG1fZWNpZF93dGxzNiAgICAgICAyIDIzIDQzIDEgNCA2ICovCi0mKG5pZF9vYmpzWzc0MF0pLC8qIE9CSl93YXBfd3NnX2lkbV9lY2lkX3d0bHM3ICAgICAgIDIgMjMgNDMgMSA0IDcgKi8KLSYobmlkX29ianNbNzQxXSksLyogT0JKX3dhcF93c2dfaWRtX2VjaWRfd3RsczggICAgICAgMiAyMyA0MyAxIDQgOCAqLwotJihuaWRfb2Jqc1s3NDJdKSwvKiBPQkpfd2FwX3dzZ19pZG1fZWNpZF93dGxzOSAgICAgICAyIDIzIDQzIDEgNCA5ICovCi0mKG5pZF9vYmpzWzc0M10pLC8qIE9CSl93YXBfd3NnX2lkbV9lY2lkX3d0bHMxMCAgICAgIDIgMjMgNDMgMSA0IDEwICovCi0mKG5pZF9vYmpzWzc0NF0pLC8qIE9CSl93YXBfd3NnX2lkbV9lY2lkX3d0bHMxMSAgICAgIDIgMjMgNDMgMSA0IDExICovCi0mKG5pZF9vYmpzWzc0NV0pLC8qIE9CSl93YXBfd3NnX2lkbV9lY2lkX3d0bHMxMiAgICAgIDIgMjMgNDMgMSA0IDEyICovCi0mKG5pZF9vYmpzWzgwNF0pLC8qIE9CSl93aGlybHBvb2wgICAgICAgICAgICAgICAgICAgIDEgMCAxMDExOCAzIDAgNTUgKi8KLSYobmlkX29ianNbMTI0XSksLyogT0JKX3JsZV9jb21wcmVzc2lvbiAgICAgICAgICAgICAgMSAxIDEgMSA2NjYgMSAqLwotJihuaWRfb2Jqc1s3NzNdKSwvKiBPQkpfa2lzYSAgICAgICAgICAgICAgICAgICAgICAgICAxIDIgNDEwIDIwMDAwNCAqLwotJihuaWRfb2Jqc1s4MDddKSwvKiBPQkpfaWRfR29zdFIzNDExXzk0X3dpdGhfR29zdFIzNDEwXzIwMDEgMSAyIDY0MyAyIDIgMyAqLwotJihuaWRfb2Jqc1s4MDhdKSwvKiBPQkpfaWRfR29zdFIzNDExXzk0X3dpdGhfR29zdFIzNDEwXzk0IDEgMiA2NDMgMiAyIDQgKi8KLSYobmlkX29ianNbODA5XSksLyogT0JKX2lkX0dvc3RSMzQxMV85NCAgICAgICAgICAgICAgMSAyIDY0MyAyIDIgOSAqLwotJihuaWRfb2Jqc1s4MTBdKSwvKiBPQkpfaWRfSE1BQ0dvc3RSMzQxMV85NCAgICAgICAgICAxIDIgNjQzIDIgMiAxMCAqLwotJihuaWRfb2Jqc1s4MTFdKSwvKiBPQkpfaWRfR29zdFIzNDEwXzIwMDEgICAgICAgICAgICAxIDIgNjQzIDIgMiAxOSAqLwotJihuaWRfb2Jqc1s4MTJdKSwvKiBPQkpfaWRfR29zdFIzNDEwXzk0ICAgICAgICAgICAgICAxIDIgNjQzIDIgMiAyMCAqLwotJihuaWRfb2Jqc1s4MTNdKSwvKiBPQkpfaWRfR29zdDI4MTQ3Xzg5ICAgICAgICAgICAgICAxIDIgNjQzIDIgMiAyMSAqLwotJihuaWRfb2Jqc1s4MTVdKSwvKiBPQkpfaWRfR29zdDI4MTQ3Xzg5X01BQyAgICAgICAgICAxIDIgNjQzIDIgMiAyMiAqLwotJihuaWRfb2Jqc1s4MTZdKSwvKiBPQkpfaWRfR29zdFIzNDExXzk0X3ByZiAgICAgICAgICAxIDIgNjQzIDIgMiAyMyAqLwotJihuaWRfb2Jqc1s4MTddKSwvKiBPQkpfaWRfR29zdFIzNDEwXzIwMDFESCAgICAgICAgICAxIDIgNjQzIDIgMiA5OCAqLwotJihuaWRfb2Jqc1s4MThdKSwvKiBPQkpfaWRfR29zdFIzNDEwXzk0REggICAgICAgICAgICAxIDIgNjQzIDIgMiA5OSAqLwotJihuaWRfb2Jqc1sgMV0pLC8qIE9CSl9yc2Fkc2kgICAgICAgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5ICovCi0mKG5pZF9vYmpzWzE4NV0pLC8qIE9CSl9YOWNtICAgICAgICAgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTAwNDAgNCAqLwotJihuaWRfb2Jqc1sxMjddKSwvKiBPQkpfaWRfcGtpeCAgICAgICAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3ICovCi0mKG5pZF9vYmpzWzUwNV0pLC8qIE9CSl9taW1lX21oc19oZWFkaW5ncyAgICAgICAgICAgIDEgMyA2IDEgNyAxIDEgKi8KLSYobmlkX29ianNbNTA2XSksLyogT0JKX21pbWVfbWhzX2JvZGllcyAgICAgICAgICAgICAgMSAzIDYgMSA3IDEgMiAqLwotJihuaWRfb2Jqc1sxMTldKSwvKiBPQkpfcmlwZW1kMTYwV2l0aFJTQSAgICAgICAgICAgICAxIDMgMzYgMyAzIDEgMiAqLwotJihuaWRfb2Jqc1s2MzFdKSwvKiBPQkpfc2V0QXR0cl9HZW5DcnlwdGdybSAgICAgICAgICAyIDIzIDQyIDMgMyAzIDEgKi8KLSYobmlkX29ianNbNjMyXSksLyogT0JKX3NldEF0dHJfVDJFbmMgICAgICAgICAgICAgICAgMiAyMyA0MiAzIDMgNCAxICovCi0mKG5pZF9vYmpzWzYzM10pLC8qIE9CSl9zZXRBdHRyX1QyY2xlYXJ0eHQgICAgICAgICAgIDIgMjMgNDIgMyAzIDQgMiAqLwotJihuaWRfb2Jqc1s2MzRdKSwvKiBPQkpfc2V0QXR0cl9Ub2tJQ0NzaWcgICAgICAgICAgICAyIDIzIDQyIDMgMyA1IDEgKi8KLSYobmlkX29ianNbNjM1XSksLyogT0JKX3NldEF0dHJfU2VjRGV2U2lnICAgICAgICAgICAgMiAyMyA0MiAzIDMgNSAyICovCi0mKG5pZF9vYmpzWzQzNl0pLC8qIE9CSl91Y2wgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOSAyMzQyIDE5MjAwMzAwICovCi0mKG5pZF9vYmpzWzgyMF0pLC8qIE9CSl9pZF9Hb3N0MjgxNDdfODlfTm9uZV9LZXlNZXNoaW5nIDEgMiA2NDMgMiAyIDE0IDAgKi8KLSYobmlkX29ianNbODE5XSksLyogT0JKX2lkX0dvc3QyODE0N184OV9DcnlwdG9Qcm9fS2V5TWVzaGluZyAxIDIgNjQzIDIgMiAxNCAxICovCi0mKG5pZF9vYmpzWzg0NV0pLC8qIE9CSl9pZF9Hb3N0UjM0MTBfOTRfYSAgICAgICAgICAgIDEgMiA2NDMgMiAyIDIwIDEgKi8KLSYobmlkX29ianNbODQ2XSksLyogT0JKX2lkX0dvc3RSMzQxMF85NF9hQmlzICAgICAgICAgMSAyIDY0MyAyIDIgMjAgMiAqLwotJihuaWRfb2Jqc1s4NDddKSwvKiBPQkpfaWRfR29zdFIzNDEwXzk0X2IgICAgICAgICAgICAxIDIgNjQzIDIgMiAyMCAzICovCi0mKG5pZF9vYmpzWzg0OF0pLC8qIE9CSl9pZF9Hb3N0UjM0MTBfOTRfYkJpcyAgICAgICAgIDEgMiA2NDMgMiAyIDIwIDQgKi8KLSYobmlkX29ianNbODIxXSksLyogT0JKX2lkX0dvc3RSMzQxMV85NF9UZXN0UGFyYW1TZXQgMSAyIDY0MyAyIDIgMzAgMCAqLwotJihuaWRfb2Jqc1s4MjJdKSwvKiBPQkpfaWRfR29zdFIzNDExXzk0X0NyeXB0b1Byb1BhcmFtU2V0IDEgMiA2NDMgMiAyIDMwIDEgKi8KLSYobmlkX29ianNbODIzXSksLyogT0JKX2lkX0dvc3QyODE0N184OV9UZXN0UGFyYW1TZXQgMSAyIDY0MyAyIDIgMzEgMCAqLwotJihuaWRfb2Jqc1s4MjRdKSwvKiBPQkpfaWRfR29zdDI4MTQ3Xzg5X0NyeXB0b1Byb19BX1BhcmFtU2V0IDEgMiA2NDMgMiAyIDMxIDEgKi8KLSYobmlkX29ianNbODI1XSksLyogT0JKX2lkX0dvc3QyODE0N184OV9DcnlwdG9Qcm9fQl9QYXJhbVNldCAxIDIgNjQzIDIgMiAzMSAyICovCi0mKG5pZF9vYmpzWzgyNl0pLC8qIE9CSl9pZF9Hb3N0MjgxNDdfODlfQ3J5cHRvUHJvX0NfUGFyYW1TZXQgMSAyIDY0MyAyIDIgMzEgMyAqLwotJihuaWRfb2Jqc1s4MjddKSwvKiBPQkpfaWRfR29zdDI4MTQ3Xzg5X0NyeXB0b1Byb19EX1BhcmFtU2V0IDEgMiA2NDMgMiAyIDMxIDQgKi8KLSYobmlkX29ianNbODI4XSksLyogT0JKX2lkX0dvc3QyODE0N184OV9DcnlwdG9Qcm9fT3NjYXJfMV8xX1BhcmFtU2V0IDEgMiA2NDMgMiAyIDMxIDUgKi8KLSYobmlkX29ianNbODI5XSksLyogT0JKX2lkX0dvc3QyODE0N184OV9DcnlwdG9Qcm9fT3NjYXJfMV8wX1BhcmFtU2V0IDEgMiA2NDMgMiAyIDMxIDYgKi8KLSYobmlkX29ianNbODMwXSksLyogT0JKX2lkX0dvc3QyODE0N184OV9DcnlwdG9Qcm9fUklDXzFfUGFyYW1TZXQgMSAyIDY0MyAyIDIgMzEgNyAqLwotJihuaWRfb2Jqc1s4MzFdKSwvKiBPQkpfaWRfR29zdFIzNDEwXzk0X1Rlc3RQYXJhbVNldCAxIDIgNjQzIDIgMiAzMiAwICovCi0mKG5pZF9vYmpzWzgzMl0pLC8qIE9CSl9pZF9Hb3N0UjM0MTBfOTRfQ3J5cHRvUHJvX0FfUGFyYW1TZXQgMSAyIDY0MyAyIDIgMzIgMiAqLwotJihuaWRfb2Jqc1s4MzNdKSwvKiBPQkpfaWRfR29zdFIzNDEwXzk0X0NyeXB0b1Byb19CX1BhcmFtU2V0IDEgMiA2NDMgMiAyIDMyIDMgKi8KLSYobmlkX29ianNbODM0XSksLyogT0JKX2lkX0dvc3RSMzQxMF85NF9DcnlwdG9Qcm9fQ19QYXJhbVNldCAxIDIgNjQzIDIgMiAzMiA0ICovCi0mKG5pZF9vYmpzWzgzNV0pLC8qIE9CSl9pZF9Hb3N0UjM0MTBfOTRfQ3J5cHRvUHJvX0RfUGFyYW1TZXQgMSAyIDY0MyAyIDIgMzIgNSAqLwotJihuaWRfb2Jqc1s4MzZdKSwvKiBPQkpfaWRfR29zdFIzNDEwXzk0X0NyeXB0b1Byb19YY2hBX1BhcmFtU2V0IDEgMiA2NDMgMiAyIDMzIDEgKi8KLSYobmlkX29ianNbODM3XSksLyogT0JKX2lkX0dvc3RSMzQxMF85NF9DcnlwdG9Qcm9fWGNoQl9QYXJhbVNldCAxIDIgNjQzIDIgMiAzMyAyICovCi0mKG5pZF9vYmpzWzgzOF0pLC8qIE9CSl9pZF9Hb3N0UjM0MTBfOTRfQ3J5cHRvUHJvX1hjaENfUGFyYW1TZXQgMSAyIDY0MyAyIDIgMzMgMyAqLwotJihuaWRfb2Jqc1s4MzldKSwvKiBPQkpfaWRfR29zdFIzNDEwXzIwMDFfVGVzdFBhcmFtU2V0IDEgMiA2NDMgMiAyIDM1IDAgKi8KLSYobmlkX29ianNbODQwXSksLyogT0JKX2lkX0dvc3RSMzQxMF8yMDAxX0NyeXB0b1Byb19BX1BhcmFtU2V0IDEgMiA2NDMgMiAyIDM1IDEgKi8KLSYobmlkX29ianNbODQxXSksLyogT0JKX2lkX0dvc3RSMzQxMF8yMDAxX0NyeXB0b1Byb19CX1BhcmFtU2V0IDEgMiA2NDMgMiAyIDM1IDIgKi8KLSYobmlkX29ianNbODQyXSksLyogT0JKX2lkX0dvc3RSMzQxMF8yMDAxX0NyeXB0b1Byb19DX1BhcmFtU2V0IDEgMiA2NDMgMiAyIDM1IDMgKi8KLSYobmlkX29ianNbODQzXSksLyogT0JKX2lkX0dvc3RSMzQxMF8yMDAxX0NyeXB0b1Byb19YY2hBX1BhcmFtU2V0IDEgMiA2NDMgMiAyIDM2IDAgKi8KLSYobmlkX29ianNbODQ0XSksLyogT0JKX2lkX0dvc3RSMzQxMF8yMDAxX0NyeXB0b1Byb19YY2hCX1BhcmFtU2V0IDEgMiA2NDMgMiAyIDM2IDEgKi8KLSYobmlkX29ianNbIDJdKSwvKiBPQkpfcGtjcyAgICAgICAgICAgICAgICAgICAgICAgICAxIDIgODQwIDExMzU0OSAxICovCi0mKG5pZF9vYmpzWzQzMV0pLC8qIE9CSl9ob2xkX2luc3RydWN0aW9uX25vbmUgICAgICAgIDEgMiA4NDAgMTAwNDAgMiAxICovCi0mKG5pZF9vYmpzWzQzMl0pLC8qIE9CSl9ob2xkX2luc3RydWN0aW9uX2NhbGxfaXNzdWVyIDEgMiA4NDAgMTAwNDAgMiAyICovCi0mKG5pZF9vYmpzWzQzM10pLC8qIE9CSl9ob2xkX2luc3RydWN0aW9uX3JlamVjdCAgICAgIDEgMiA4NDAgMTAwNDAgMiAzICovCi0mKG5pZF9vYmpzWzExNl0pLC8qIE9CSl9kc2EgICAgICAgICAgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTAwNDAgNCAxICovCi0mKG5pZF9vYmpzWzExM10pLC8qIE9CSl9kc2FXaXRoU0hBMSAgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTAwNDAgNCAzICovCi0mKG5pZF9vYmpzWzQwNl0pLC8qIE9CSl9YOV82Ml9wcmltZV9maWVsZCAgICAgICAgICAgIDEgMiA4NDAgMTAwNDUgMSAxICovCi0mKG5pZF9vYmpzWzQwN10pLC8qIE9CSl9YOV82Ml9jaGFyYWN0ZXJpc3RpY190d29fZmllbGQgMSAyIDg0MCAxMDA0NSAxIDIgKi8KLSYobmlkX29ianNbNDA4XSksLyogT0JKX1g5XzYyX2lkX2VjUHVibGljS2V5ICAgICAgICAgMSAyIDg0MCAxMDA0NSAyIDEgKi8KLSYobmlkX29ianNbNDE2XSksLyogT0JKX2VjZHNhX3dpdGhfU0hBMSAgICAgICAgICAgICAgMSAyIDg0MCAxMDA0NSA0IDEgKi8KLSYobmlkX29ianNbNzkxXSksLyogT0JKX2VjZHNhX3dpdGhfUmVjb21tZW5kZWQgICAgICAgMSAyIDg0MCAxMDA0NSA0IDIgKi8KLSYobmlkX29ianNbNzkyXSksLyogT0JKX2VjZHNhX3dpdGhfU3BlY2lmaWVkICAgICAgICAgMSAyIDg0MCAxMDA0NSA0IDMgKi8KLSYobmlkX29ianNbMjU4XSksLyogT0JKX2lkX3BraXhfbW9kICAgICAgICAgICAgICAgICAgMSAzIDYgMSA1IDUgNyAwICovCi0mKG5pZF9vYmpzWzE3NV0pLC8qIE9CSl9pZF9wZSAgICAgICAgICAgICAgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgMSAqLwotJihuaWRfb2Jqc1syNTldKSwvKiBPQkpfaWRfcXQgICAgICAgICAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDIgKi8KLSYobmlkX29ianNbMTI4XSksLyogT0JKX2lkX2twICAgICAgICAgICAgICAgICAgICAgICAgMSAzIDYgMSA1IDUgNyAzICovCi0mKG5pZF9vYmpzWzI2MF0pLC8qIE9CSl9pZF9pdCAgICAgICAgICAgICAgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgNCAqLwotJihuaWRfb2Jqc1syNjFdKSwvKiBPQkpfaWRfcGtpcCAgICAgICAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDUgKi8KLSYobmlkX29ianNbMjYyXSksLyogT0JKX2lkX2FsZyAgICAgICAgICAgICAgICAgICAgICAgMSAzIDYgMSA1IDUgNyA2ICovCi0mKG5pZF9vYmpzWzI2M10pLC8qIE9CSl9pZF9jbWMgICAgICAgICAgICAgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgNyAqLwotJihuaWRfb2Jqc1syNjRdKSwvKiBPQkpfaWRfb24gICAgICAgICAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDggKi8KLSYobmlkX29ianNbMjY1XSksLyogT0JKX2lkX3BkYSAgICAgICAgICAgICAgICAgICAgICAgMSAzIDYgMSA1IDUgNyA5ICovCi0mKG5pZF9vYmpzWzI2Nl0pLC8qIE9CSl9pZF9hY2EgICAgICAgICAgICAgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgMTAgKi8KLSYobmlkX29ianNbMjY3XSksLyogT0JKX2lkX3FjcyAgICAgICAgICAgICAgICAgICAgICAgMSAzIDYgMSA1IDUgNyAxMSAqLwotJihuaWRfb2Jqc1syNjhdKSwvKiBPQkpfaWRfY2N0ICAgICAgICAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDEyICovCi0mKG5pZF9vYmpzWzY2Ml0pLC8qIE9CSl9pZF9wcGwgICAgICAgICAgICAgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgMjEgKi8KLSYobmlkX29ianNbMTc2XSksLyogT0JKX2lkX2FkICAgICAgICAgICAgICAgICAgICAgICAgMSAzIDYgMSA1IDUgNyA0OCAqLwotJihuaWRfb2Jqc1s1MDddKSwvKiBPQkpfaWRfaGV4X3BhcnRpYWxfbWVzc2FnZSAgICAgICAxIDMgNiAxIDcgMSAxIDEgKi8KLSYobmlkX29ianNbNTA4XSksLyogT0JKX2lkX2hleF9tdWx0aXBhcnRfbWVzc2FnZSAgICAgMSAzIDYgMSA3IDEgMSAyICovCi0mKG5pZF9vYmpzWzU3XSksLyogT0JKX25ldHNjYXBlICAgICAgICAgICAgICAgICAgICAgMiAxNiA4NDAgMSAxMTM3MzAgKi8KLSYobmlkX29ianNbNzU0XSksLyogT0JKX2NhbWVsbGlhXzEyOF9lY2IgICAgICAgICAgICAgMCAzIDQ0MDEgNSAzIDEgOSAxICovCi0mKG5pZF9vYmpzWzc2Nl0pLC8qIE9CSl9jYW1lbGxpYV8xMjhfb2ZiMTI4ICAgICAgICAgIDAgMyA0NDAxIDUgMyAxIDkgMyAqLwotJihuaWRfb2Jqc1s3NTddKSwvKiBPQkpfY2FtZWxsaWFfMTI4X2NmYjEyOCAgICAgICAgICAwIDMgNDQwMSA1IDMgMSA5IDQgKi8KLSYobmlkX29ianNbNzU1XSksLyogT0JKX2NhbWVsbGlhXzE5Ml9lY2IgICAgICAgICAgICAgMCAzIDQ0MDEgNSAzIDEgOSAyMSAqLwotJihuaWRfb2Jqc1s3NjddKSwvKiBPQkpfY2FtZWxsaWFfMTkyX29mYjEyOCAgICAgICAgICAwIDMgNDQwMSA1IDMgMSA5IDIzICovCi0mKG5pZF9vYmpzWzc1OF0pLC8qIE9CSl9jYW1lbGxpYV8xOTJfY2ZiMTI4ICAgICAgICAgIDAgMyA0NDAxIDUgMyAxIDkgMjQgKi8KLSYobmlkX29ianNbNzU2XSksLyogT0JKX2NhbWVsbGlhXzI1Nl9lY2IgICAgICAgICAgICAgMCAzIDQ0MDEgNSAzIDEgOSA0MSAqLwotJihuaWRfb2Jqc1s3NjhdKSwvKiBPQkpfY2FtZWxsaWFfMjU2X29mYjEyOCAgICAgICAgICAwIDMgNDQwMSA1IDMgMSA5IDQzICovCi0mKG5pZF9vYmpzWzc1OV0pLC8qIE9CSl9jYW1lbGxpYV8yNTZfY2ZiMTI4ICAgICAgICAgIDAgMyA0NDAxIDUgMyAxIDkgNDQgKi8KLSYobmlkX29ianNbNDM3XSksLyogT0JKX3BpbG90ICAgICAgICAgICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwICovCi0mKG5pZF9vYmpzWzc3Nl0pLC8qIE9CSl9zZWVkX2VjYiAgICAgICAgICAgICAgICAgICAgIDEgMiA0MTAgMjAwMDA0IDEgMyAqLwotJihuaWRfb2Jqc1s3NzddKSwvKiBPQkpfc2VlZF9jYmMgICAgICAgICAgICAgICAgICAgICAxIDIgNDEwIDIwMDAwNCAxIDQgKi8KLSYobmlkX29ianNbNzc5XSksLyogT0JKX3NlZWRfY2ZiMTI4ICAgICAgICAgICAgICAgICAgMSAyIDQxMCAyMDAwMDQgMSA1ICovCi0mKG5pZF9vYmpzWzc3OF0pLC8qIE9CSl9zZWVkX29mYjEyOCAgICAgICAgICAgICAgICAgIDEgMiA0MTAgMjAwMDA0IDEgNiAqLwotJihuaWRfb2Jqc1s4NTJdKSwvKiBPQkpfaWRfR29zdFIzNDExXzk0X3dpdGhfR29zdFIzNDEwXzk0X2NjIDEgMiA2NDMgMiA5IDEgMyAzICovCi0mKG5pZF9vYmpzWzg1M10pLC8qIE9CSl9pZF9Hb3N0UjM0MTFfOTRfd2l0aF9Hb3N0UjM0MTBfMjAwMV9jYyAxIDIgNjQzIDIgOSAxIDMgNCAqLwotJihuaWRfb2Jqc1s4NTBdKSwvKiBPQkpfaWRfR29zdFIzNDEwXzk0X2NjICAgICAgICAgICAxIDIgNjQzIDIgOSAxIDUgMyAqLwotJihuaWRfb2Jqc1s4NTFdKSwvKiBPQkpfaWRfR29zdFIzNDEwXzIwMDFfY2MgICAgICAgICAxIDIgNjQzIDIgOSAxIDUgNCAqLwotJihuaWRfb2Jqc1s4NDldKSwvKiBPQkpfaWRfR29zdDI4MTQ3Xzg5X2NjICAgICAgICAgICAxIDIgNjQzIDIgOSAxIDYgMSAqLwotJihuaWRfb2Jqc1s4NTRdKSwvKiBPQkpfaWRfR29zdFIzNDEwXzIwMDFfUGFyYW1TZXRfY2MgMSAyIDY0MyAyIDkgMSA4IDEgKi8KLSYobmlkX29ianNbMTg2XSksLyogT0JKX3BrY3MxICAgICAgICAgICAgICAgICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMSAxICovCi0mKG5pZF9vYmpzWzI3XSksLyogT0JKX3BrY3MzICAgICAgICAgICAgICAgICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMSAzICovCi0mKG5pZF9vYmpzWzE4N10pLC8qIE9CSl9wa2NzNSAgICAgICAgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgNSAqLwotJihuaWRfb2Jqc1syMF0pLC8qIE9CSl9wa2NzNyAgICAgICAgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgNyAqLwotJihuaWRfb2Jqc1s0N10pLC8qIE9CSl9wa2NzOSAgICAgICAgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAqLwotJihuaWRfb2Jqc1sgM10pLC8qIE9CSl9tZDIgICAgICAgICAgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDIgMiAqLwotJihuaWRfb2Jqc1syNTddKSwvKiBPQkpfbWQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAxIDIgODQwIDExMzU0OSAyIDQgKi8KLSYobmlkX29ianNbIDRdKSwvKiBPQkpfbWQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAxIDIgODQwIDExMzU0OSAyIDUgKi8KLSYobmlkX29ianNbNzk3XSksLyogT0JKX2htYWNXaXRoTUQ1ICAgICAgICAgICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMiA2ICovCi0mKG5pZF9vYmpzWzE2M10pLC8qIE9CSl9obWFjV2l0aFNIQTEgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDIgNyAqLwotJihuaWRfb2Jqc1s3OThdKSwvKiBPQkpfaG1hY1dpdGhTSEEyMjQgICAgICAgICAgICAgICAxIDIgODQwIDExMzU0OSAyIDggKi8KLSYobmlkX29ianNbNzk5XSksLyogT0JKX2htYWNXaXRoU0hBMjU2ICAgICAgICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMiA5ICovCi0mKG5pZF9vYmpzWzgwMF0pLC8qIE9CSl9obWFjV2l0aFNIQTM4NCAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDIgMTAgKi8KLSYobmlkX29ianNbODAxXSksLyogT0JKX2htYWNXaXRoU0hBNTEyICAgICAgICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMiAxMSAqLwotJihuaWRfb2Jqc1szN10pLC8qIE9CSl9yYzJfY2JjICAgICAgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDMgMiAqLwotJihuaWRfb2Jqc1sgNV0pLC8qIE9CSl9yYzQgICAgICAgICAgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDMgNCAqLwotJihuaWRfb2Jqc1s0NF0pLC8qIE9CSl9kZXNfZWRlM19jYmMgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDMgNyAqLwotJihuaWRfb2Jqc1sxMjBdKSwvKiBPQkpfcmM1X2NiYyAgICAgICAgICAgICAgICAgICAgICAxIDIgODQwIDExMzU0OSAzIDggKi8KLSYobmlkX29ianNbNjQzXSksLyogT0JKX2Rlc19jZG1mICAgICAgICAgICAgICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMyAxMCAqLwotJihuaWRfb2Jqc1s2ODBdKSwvKiBPQkpfWDlfNjJfaWRfY2hhcmFjdGVyaXN0aWNfdHdvX2Jhc2lzIDEgMiA4NDAgMTAwNDUgMSAyIDMgKi8KLSYobmlkX29ianNbNjg0XSksLyogT0JKX1g5XzYyX2MycG5iMTYzdjEgICAgICAgICAgICAgMSAyIDg0MCAxMDA0NSAzIDAgMSAqLwotJihuaWRfb2Jqc1s2ODVdKSwvKiBPQkpfWDlfNjJfYzJwbmIxNjN2MiAgICAgICAgICAgICAxIDIgODQwIDEwMDQ1IDMgMCAyICovCi0mKG5pZF9vYmpzWzY4Nl0pLC8qIE9CSl9YOV82Ml9jMnBuYjE2M3YzICAgICAgICAgICAgIDEgMiA4NDAgMTAwNDUgMyAwIDMgKi8KLSYobmlkX29ianNbNjg3XSksLyogT0JKX1g5XzYyX2MycG5iMTc2djEgICAgICAgICAgICAgMSAyIDg0MCAxMDA0NSAzIDAgNCAqLwotJihuaWRfb2Jqc1s2ODhdKSwvKiBPQkpfWDlfNjJfYzJ0bmIxOTF2MSAgICAgICAgICAgICAxIDIgODQwIDEwMDQ1IDMgMCA1ICovCi0mKG5pZF9vYmpzWzY4OV0pLC8qIE9CSl9YOV82Ml9jMnRuYjE5MXYyICAgICAgICAgICAgIDEgMiA4NDAgMTAwNDUgMyAwIDYgKi8KLSYobmlkX29ianNbNjkwXSksLyogT0JKX1g5XzYyX2MydG5iMTkxdjMgICAgICAgICAgICAgMSAyIDg0MCAxMDA0NSAzIDAgNyAqLwotJihuaWRfb2Jqc1s2OTFdKSwvKiBPQkpfWDlfNjJfYzJvbmIxOTF2NCAgICAgICAgICAgICAxIDIgODQwIDEwMDQ1IDMgMCA4ICovCi0mKG5pZF9vYmpzWzY5Ml0pLC8qIE9CSl9YOV82Ml9jMm9uYjE5MXY1ICAgICAgICAgICAgIDEgMiA4NDAgMTAwNDUgMyAwIDkgKi8KLSYobmlkX29ianNbNjkzXSksLyogT0JKX1g5XzYyX2MycG5iMjA4dzEgICAgICAgICAgICAgMSAyIDg0MCAxMDA0NSAzIDAgMTAgKi8KLSYobmlkX29ianNbNjk0XSksLyogT0JKX1g5XzYyX2MydG5iMjM5djEgICAgICAgICAgICAgMSAyIDg0MCAxMDA0NSAzIDAgMTEgKi8KLSYobmlkX29ianNbNjk1XSksLyogT0JKX1g5XzYyX2MydG5iMjM5djIgICAgICAgICAgICAgMSAyIDg0MCAxMDA0NSAzIDAgMTIgKi8KLSYobmlkX29ianNbNjk2XSksLyogT0JKX1g5XzYyX2MydG5iMjM5djMgICAgICAgICAgICAgMSAyIDg0MCAxMDA0NSAzIDAgMTMgKi8KLSYobmlkX29ianNbNjk3XSksLyogT0JKX1g5XzYyX2Myb25iMjM5djQgICAgICAgICAgICAgMSAyIDg0MCAxMDA0NSAzIDAgMTQgKi8KLSYobmlkX29ianNbNjk4XSksLyogT0JKX1g5XzYyX2Myb25iMjM5djUgICAgICAgICAgICAgMSAyIDg0MCAxMDA0NSAzIDAgMTUgKi8KLSYobmlkX29ianNbNjk5XSksLyogT0JKX1g5XzYyX2MycG5iMjcydzEgICAgICAgICAgICAgMSAyIDg0MCAxMDA0NSAzIDAgMTYgKi8KLSYobmlkX29ianNbNzAwXSksLyogT0JKX1g5XzYyX2MycG5iMzA0dzEgICAgICAgICAgICAgMSAyIDg0MCAxMDA0NSAzIDAgMTcgKi8KLSYobmlkX29ianNbNzAxXSksLyogT0JKX1g5XzYyX2MydG5iMzU5djEgICAgICAgICAgICAgMSAyIDg0MCAxMDA0NSAzIDAgMTggKi8KLSYobmlkX29ianNbNzAyXSksLyogT0JKX1g5XzYyX2MycG5iMzY4dzEgICAgICAgICAgICAgMSAyIDg0MCAxMDA0NSAzIDAgMTkgKi8KLSYobmlkX29ianNbNzAzXSksLyogT0JKX1g5XzYyX2MydG5iNDMxcjEgICAgICAgICAgICAgMSAyIDg0MCAxMDA0NSAzIDAgMjAgKi8KLSYobmlkX29ianNbNDA5XSksLyogT0JKX1g5XzYyX3ByaW1lMTkydjEgICAgICAgICAgICAgMSAyIDg0MCAxMDA0NSAzIDEgMSAqLwotJihuaWRfb2Jqc1s0MTBdKSwvKiBPQkpfWDlfNjJfcHJpbWUxOTJ2MiAgICAgICAgICAgICAxIDIgODQwIDEwMDQ1IDMgMSAyICovCi0mKG5pZF9vYmpzWzQxMV0pLC8qIE9CSl9YOV82Ml9wcmltZTE5MnYzICAgICAgICAgICAgIDEgMiA4NDAgMTAwNDUgMyAxIDMgKi8KLSYobmlkX29ianNbNDEyXSksLyogT0JKX1g5XzYyX3ByaW1lMjM5djEgICAgICAgICAgICAgMSAyIDg0MCAxMDA0NSAzIDEgNCAqLwotJihuaWRfb2Jqc1s0MTNdKSwvKiBPQkpfWDlfNjJfcHJpbWUyMzl2MiAgICAgICAgICAgICAxIDIgODQwIDEwMDQ1IDMgMSA1ICovCi0mKG5pZF9vYmpzWzQxNF0pLC8qIE9CSl9YOV82Ml9wcmltZTIzOXYzICAgICAgICAgICAgIDEgMiA4NDAgMTAwNDUgMyAxIDYgKi8KLSYobmlkX29ianNbNDE1XSksLyogT0JKX1g5XzYyX3ByaW1lMjU2djEgICAgICAgICAgICAgMSAyIDg0MCAxMDA0NSAzIDEgNyAqLwotJihuaWRfb2Jqc1s3OTNdKSwvKiBPQkpfZWNkc2Ffd2l0aF9TSEEyMjQgICAgICAgICAgICAxIDIgODQwIDEwMDQ1IDQgMyAxICovCi0mKG5pZF9vYmpzWzc5NF0pLC8qIE9CSl9lY2RzYV93aXRoX1NIQTI1NiAgICAgICAgICAgIDEgMiA4NDAgMTAwNDUgNCAzIDIgKi8KLSYobmlkX29ianNbNzk1XSksLyogT0JKX2VjZHNhX3dpdGhfU0hBMzg0ICAgICAgICAgICAgMSAyIDg0MCAxMDA0NSA0IDMgMyAqLwotJihuaWRfb2Jqc1s3OTZdKSwvKiBPQkpfZWNkc2Ffd2l0aF9TSEE1MTIgICAgICAgICAgICAxIDIgODQwIDEwMDQ1IDQgMyA0ICovCi0mKG5pZF9vYmpzWzI2OV0pLC8qIE9CSl9pZF9wa2l4MV9leHBsaWNpdF84OCAgICAgICAgIDEgMyA2IDEgNSA1IDcgMCAxICovCi0mKG5pZF9vYmpzWzI3MF0pLC8qIE9CSl9pZF9wa2l4MV9pbXBsaWNpdF84OCAgICAgICAgIDEgMyA2IDEgNSA1IDcgMCAyICovCi0mKG5pZF9vYmpzWzI3MV0pLC8qIE9CSl9pZF9wa2l4MV9leHBsaWNpdF85MyAgICAgICAgIDEgMyA2IDEgNSA1IDcgMCAzICovCi0mKG5pZF9vYmpzWzI3Ml0pLC8qIE9CSl9pZF9wa2l4MV9pbXBsaWNpdF85MyAgICAgICAgIDEgMyA2IDEgNSA1IDcgMCA0ICovCi0mKG5pZF9vYmpzWzI3M10pLC8qIE9CSl9pZF9tb2RfY3JtZiAgICAgICAgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgMCA1ICovCi0mKG5pZF9vYmpzWzI3NF0pLC8qIE9CSl9pZF9tb2RfY21jICAgICAgICAgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgMCA2ICovCi0mKG5pZF9vYmpzWzI3NV0pLC8qIE9CSl9pZF9tb2Rfa2VhX3Byb2ZpbGVfODggICAgICAgIDEgMyA2IDEgNSA1IDcgMCA3ICovCi0mKG5pZF9vYmpzWzI3Nl0pLC8qIE9CSl9pZF9tb2Rfa2VhX3Byb2ZpbGVfOTMgICAgICAgIDEgMyA2IDEgNSA1IDcgMCA4ICovCi0mKG5pZF9vYmpzWzI3N10pLC8qIE9CSl9pZF9tb2RfY21wICAgICAgICAgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgMCA5ICovCi0mKG5pZF9vYmpzWzI3OF0pLC8qIE9CSl9pZF9tb2RfcXVhbGlmaWVkX2NlcnRfODggICAgIDEgMyA2IDEgNSA1IDcgMCAxMCAqLwotJihuaWRfb2Jqc1syNzldKSwvKiBPQkpfaWRfbW9kX3F1YWxpZmllZF9jZXJ0XzkzICAgICAxIDMgNiAxIDUgNSA3IDAgMTEgKi8KLSYobmlkX29ianNbMjgwXSksLyogT0JKX2lkX21vZF9hdHRyaWJ1dGVfY2VydCAgICAgICAgMSAzIDYgMSA1IDUgNyAwIDEyICovCi0mKG5pZF9vYmpzWzI4MV0pLC8qIE9CSl9pZF9tb2RfdGltZXN0YW1wX3Byb3RvY29sICAgIDEgMyA2IDEgNSA1IDcgMCAxMyAqLwotJihuaWRfb2Jqc1syODJdKSwvKiBPQkpfaWRfbW9kX29jc3AgICAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDAgMTQgKi8KLSYobmlkX29ianNbMjgzXSksLyogT0JKX2lkX21vZF9kdmNzICAgICAgICAgICAgICAgICAgMSAzIDYgMSA1IDUgNyAwIDE1ICovCi0mKG5pZF9vYmpzWzI4NF0pLC8qIE9CSl9pZF9tb2RfY21wMjAwMCAgICAgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgMCAxNiAqLwotJihuaWRfb2Jqc1sxNzddKSwvKiBPQkpfaW5mb19hY2Nlc3MgICAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDEgMSAqLwotJihuaWRfb2Jqc1syODVdKSwvKiBPQkpfYmlvbWV0cmljSW5mbyAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDEgMiAqLwotJihuaWRfb2Jqc1syODZdKSwvKiBPQkpfcWNTdGF0ZW1lbnRzICAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDEgMyAqLwotJihuaWRfb2Jqc1syODddKSwvKiBPQkpfYWNfYXVkaXRFbnRpdHkgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDEgNCAqLwotJihuaWRfb2Jqc1syODhdKSwvKiBPQkpfYWNfdGFyZ2V0aW5nICAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDEgNSAqLwotJihuaWRfb2Jqc1syODldKSwvKiBPQkpfYWFDb250cm9scyAgICAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDEgNiAqLwotJihuaWRfb2Jqc1syOTBdKSwvKiBPQkpfc2JncF9pcEFkZHJCbG9jayAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDEgNyAqLwotJihuaWRfb2Jqc1syOTFdKSwvKiBPQkpfc2JncF9hdXRvbm9tb3VzU3lzTnVtICAgICAgICAxIDMgNiAxIDUgNSA3IDEgOCAqLwotJihuaWRfb2Jqc1syOTJdKSwvKiBPQkpfc2JncF9yb3V0ZXJJZGVudGlmaWVyICAgICAgICAxIDMgNiAxIDUgNSA3IDEgOSAqLwotJihuaWRfb2Jqc1szOTddKSwvKiBPQkpfYWNfcHJveHlpbmcgICAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDEgMTAgKi8KLSYobmlkX29ianNbMzk4XSksLyogT0JKX3NpbmZvX2FjY2VzcyAgICAgICAgICAgICAgICAgMSAzIDYgMSA1IDUgNyAxIDExICovCi0mKG5pZF9vYmpzWzY2M10pLC8qIE9CSl9wcm94eUNlcnRJbmZvICAgICAgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgMSAxNCAqLwotJihuaWRfb2Jqc1sxNjRdKSwvKiBPQkpfaWRfcXRfY3BzICAgICAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDIgMSAqLwotJihuaWRfb2Jqc1sxNjVdKSwvKiBPQkpfaWRfcXRfdW5vdGljZSAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDIgMiAqLwotJihuaWRfb2Jqc1syOTNdKSwvKiBPQkpfdGV4dE5vdGljZSAgICAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDIgMyAqLwotJihuaWRfb2Jqc1sxMjldKSwvKiBPQkpfc2VydmVyX2F1dGggICAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDMgMSAqLwotJihuaWRfb2Jqc1sxMzBdKSwvKiBPQkpfY2xpZW50X2F1dGggICAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDMgMiAqLwotJihuaWRfb2Jqc1sxMzFdKSwvKiBPQkpfY29kZV9zaWduICAgICAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDMgMyAqLwotJihuaWRfb2Jqc1sxMzJdKSwvKiBPQkpfZW1haWxfcHJvdGVjdCAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDMgNCAqLwotJihuaWRfb2Jqc1syOTRdKSwvKiBPQkpfaXBzZWNFbmRTeXN0ZW0gICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDMgNSAqLwotJihuaWRfb2Jqc1syOTVdKSwvKiBPQkpfaXBzZWNUdW5uZWwgICAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDMgNiAqLwotJihuaWRfb2Jqc1syOTZdKSwvKiBPQkpfaXBzZWNVc2VyICAgICAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDMgNyAqLwotJihuaWRfb2Jqc1sxMzNdKSwvKiBPQkpfdGltZV9zdGFtcCAgICAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDMgOCAqLwotJihuaWRfb2Jqc1sxODBdKSwvKiBPQkpfT0NTUF9zaWduICAgICAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDMgOSAqLwotJihuaWRfb2Jqc1syOTddKSwvKiBPQkpfZHZjcyAgICAgICAgICAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDMgMTAgKi8KLSYobmlkX29ianNbMjk4XSksLyogT0JKX2lkX2l0X2NhUHJvdEVuY0NlcnQgICAgICAgICAgMSAzIDYgMSA1IDUgNyA0IDEgKi8KLSYobmlkX29ianNbMjk5XSksLyogT0JKX2lkX2l0X3NpZ25LZXlQYWlyVHlwZXMgICAgICAgMSAzIDYgMSA1IDUgNyA0IDIgKi8KLSYobmlkX29ianNbMzAwXSksLyogT0JKX2lkX2l0X2VuY0tleVBhaXJUeXBlcyAgICAgICAgMSAzIDYgMSA1IDUgNyA0IDMgKi8KLSYobmlkX29ianNbMzAxXSksLyogT0JKX2lkX2l0X3ByZWZlcnJlZFN5bW1BbGcgICAgICAgMSAzIDYgMSA1IDUgNyA0IDQgKi8KLSYobmlkX29ianNbMzAyXSksLyogT0JKX2lkX2l0X2NhS2V5VXBkYXRlSW5mbyAgICAgICAgMSAzIDYgMSA1IDUgNyA0IDUgKi8KLSYobmlkX29ianNbMzAzXSksLyogT0JKX2lkX2l0X2N1cnJlbnRDUkwgICAgICAgICAgICAgMSAzIDYgMSA1IDUgNyA0IDYgKi8KLSYobmlkX29ianNbMzA0XSksLyogT0JKX2lkX2l0X3Vuc3VwcG9ydGVkT0lEcyAgICAgICAgMSAzIDYgMSA1IDUgNyA0IDcgKi8KLSYobmlkX29ianNbMzA1XSksLyogT0JKX2lkX2l0X3N1YnNjcmlwdGlvblJlcXVlc3QgICAgMSAzIDYgMSA1IDUgNyA0IDggKi8KLSYobmlkX29ianNbMzA2XSksLyogT0JKX2lkX2l0X3N1YnNjcmlwdGlvblJlc3BvbnNlICAgMSAzIDYgMSA1IDUgNyA0IDkgKi8KLSYobmlkX29ianNbMzA3XSksLyogT0JKX2lkX2l0X2tleVBhaXJQYXJhbVJlcSAgICAgICAgMSAzIDYgMSA1IDUgNyA0IDEwICovCi0mKG5pZF9vYmpzWzMwOF0pLC8qIE9CSl9pZF9pdF9rZXlQYWlyUGFyYW1SZXAgICAgICAgIDEgMyA2IDEgNSA1IDcgNCAxMSAqLwotJihuaWRfb2Jqc1szMDldKSwvKiBPQkpfaWRfaXRfcmV2UGFzc3BocmFzZSAgICAgICAgICAxIDMgNiAxIDUgNSA3IDQgMTIgKi8KLSYobmlkX29ianNbMzEwXSksLyogT0JKX2lkX2l0X2ltcGxpY2l0Q29uZmlybSAgICAgICAgMSAzIDYgMSA1IDUgNyA0IDEzICovCi0mKG5pZF9vYmpzWzMxMV0pLC8qIE9CSl9pZF9pdF9jb25maXJtV2FpdFRpbWUgICAgICAgIDEgMyA2IDEgNSA1IDcgNCAxNCAqLwotJihuaWRfb2Jqc1szMTJdKSwvKiBPQkpfaWRfaXRfb3JpZ1BLSU1lc3NhZ2UgICAgICAgICAxIDMgNiAxIDUgNSA3IDQgMTUgKi8KLSYobmlkX29ianNbNzg0XSksLyogT0JKX2lkX2l0X3N1cHBMYW5nVGFncyAgICAgICAgICAgMSAzIDYgMSA1IDUgNyA0IDE2ICovCi0mKG5pZF9vYmpzWzMxM10pLC8qIE9CSl9pZF9yZWdDdHJsICAgICAgICAgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgNSAxICovCi0mKG5pZF9vYmpzWzMxNF0pLC8qIE9CSl9pZF9yZWdJbmZvICAgICAgICAgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgNSAyICovCi0mKG5pZF9vYmpzWzMyM10pLC8qIE9CSl9pZF9hbGdfZGVzNDAgICAgICAgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgNiAxICovCi0mKG5pZF9vYmpzWzMyNF0pLC8qIE9CSl9pZF9hbGdfbm9TaWduYXR1cmUgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgNiAyICovCi0mKG5pZF9vYmpzWzMyNV0pLC8qIE9CSl9pZF9hbGdfZGhfc2lnX2htYWNfc2hhMSAgICAgIDEgMyA2IDEgNSA1IDcgNiAzICovCi0mKG5pZF9vYmpzWzMyNl0pLC8qIE9CSl9pZF9hbGdfZGhfcG9wICAgICAgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgNiA0ICovCi0mKG5pZF9vYmpzWzMyN10pLC8qIE9CSl9pZF9jbWNfc3RhdHVzSW5mbyAgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgNyAxICovCi0mKG5pZF9vYmpzWzMyOF0pLC8qIE9CSl9pZF9jbWNfaWRlbnRpZmljYXRpb24gICAgICAgIDEgMyA2IDEgNSA1IDcgNyAyICovCi0mKG5pZF9vYmpzWzMyOV0pLC8qIE9CSl9pZF9jbWNfaWRlbnRpdHlQcm9vZiAgICAgICAgIDEgMyA2IDEgNSA1IDcgNyAzICovCi0mKG5pZF9vYmpzWzMzMF0pLC8qIE9CSl9pZF9jbWNfZGF0YVJldHVybiAgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgNyA0ICovCi0mKG5pZF9vYmpzWzMzMV0pLC8qIE9CSl9pZF9jbWNfdHJhbnNhY3Rpb25JZCAgICAgICAgIDEgMyA2IDEgNSA1IDcgNyA1ICovCi0mKG5pZF9vYmpzWzMzMl0pLC8qIE9CSl9pZF9jbWNfc2VuZGVyTm9uY2UgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgNyA2ICovCi0mKG5pZF9vYmpzWzMzM10pLC8qIE9CSl9pZF9jbWNfcmVjaXBpZW50Tm9uY2UgICAgICAgIDEgMyA2IDEgNSA1IDcgNyA3ICovCi0mKG5pZF9vYmpzWzMzNF0pLC8qIE9CSl9pZF9jbWNfYWRkRXh0ZW5zaW9ucyAgICAgICAgIDEgMyA2IDEgNSA1IDcgNyA4ICovCi0mKG5pZF9vYmpzWzMzNV0pLC8qIE9CSl9pZF9jbWNfZW5jcnlwdGVkUE9QICAgICAgICAgIDEgMyA2IDEgNSA1IDcgNyA5ICovCi0mKG5pZF9vYmpzWzMzNl0pLC8qIE9CSl9pZF9jbWNfZGVjcnlwdGVkUE9QICAgICAgICAgIDEgMyA2IDEgNSA1IDcgNyAxMCAqLwotJihuaWRfb2Jqc1szMzddKSwvKiBPQkpfaWRfY21jX2xyYVBPUFdpdG5lc3MgICAgICAgICAxIDMgNiAxIDUgNSA3IDcgMTEgKi8KLSYobmlkX29ianNbMzM4XSksLyogT0JKX2lkX2NtY19nZXRDZXJ0ICAgICAgICAgICAgICAgMSAzIDYgMSA1IDUgNyA3IDE1ICovCi0mKG5pZF9vYmpzWzMzOV0pLC8qIE9CSl9pZF9jbWNfZ2V0Q1JMICAgICAgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgNyAxNiAqLwotJihuaWRfb2Jqc1szNDBdKSwvKiBPQkpfaWRfY21jX3Jldm9rZVJlcXVlc3QgICAgICAgICAxIDMgNiAxIDUgNSA3IDcgMTcgKi8KLSYobmlkX29ianNbMzQxXSksLyogT0JKX2lkX2NtY19yZWdJbmZvICAgICAgICAgICAgICAgMSAzIDYgMSA1IDUgNyA3IDE4ICovCi0mKG5pZF9vYmpzWzM0Ml0pLC8qIE9CSl9pZF9jbWNfcmVzcG9uc2VJbmZvICAgICAgICAgIDEgMyA2IDEgNSA1IDcgNyAxOSAqLwotJihuaWRfb2Jqc1szNDNdKSwvKiBPQkpfaWRfY21jX3F1ZXJ5UGVuZGluZyAgICAgICAgICAxIDMgNiAxIDUgNSA3IDcgMjEgKi8KLSYobmlkX29ianNbMzQ0XSksLyogT0JKX2lkX2NtY19wb3BMaW5rUmFuZG9tICAgICAgICAgMSAzIDYgMSA1IDUgNyA3IDIyICovCi0mKG5pZF9vYmpzWzM0NV0pLC8qIE9CSl9pZF9jbWNfcG9wTGlua1dpdG5lc3MgICAgICAgIDEgMyA2IDEgNSA1IDcgNyAyMyAqLwotJihuaWRfb2Jqc1szNDZdKSwvKiBPQkpfaWRfY21jX2NvbmZpcm1DZXJ0QWNjZXB0YW5jZSAxIDMgNiAxIDUgNSA3IDcgMjQgKi8KLSYobmlkX29ianNbMzQ3XSksLyogT0JKX2lkX29uX3BlcnNvbmFsRGF0YSAgICAgICAgICAgMSAzIDYgMSA1IDUgNyA4IDEgKi8KLSYobmlkX29ianNbODU4XSksLyogT0JKX2lkX29uX3Blcm1hbmVudElkZW50aWZpZXIgICAgMSAzIDYgMSA1IDUgNyA4IDMgKi8KLSYobmlkX29ianNbMzQ4XSksLyogT0JKX2lkX3BkYV9kYXRlT2ZCaXJ0aCAgICAgICAgICAgMSAzIDYgMSA1IDUgNyA5IDEgKi8KLSYobmlkX29ianNbMzQ5XSksLyogT0JKX2lkX3BkYV9wbGFjZU9mQmlydGggICAgICAgICAgMSAzIDYgMSA1IDUgNyA5IDIgKi8KLSYobmlkX29ianNbMzUxXSksLyogT0JKX2lkX3BkYV9nZW5kZXIgICAgICAgICAgICAgICAgMSAzIDYgMSA1IDUgNyA5IDMgKi8KLSYobmlkX29ianNbMzUyXSksLyogT0JKX2lkX3BkYV9jb3VudHJ5T2ZDaXRpemVuc2hpcCAgMSAzIDYgMSA1IDUgNyA5IDQgKi8KLSYobmlkX29ianNbMzUzXSksLyogT0JKX2lkX3BkYV9jb3VudHJ5T2ZSZXNpZGVuY2UgICAgMSAzIDYgMSA1IDUgNyA5IDUgKi8KLSYobmlkX29ianNbMzU0XSksLyogT0JKX2lkX2FjYV9hdXRoZW50aWNhdGlvbkluZm8gICAgMSAzIDYgMSA1IDUgNyAxMCAxICovCi0mKG5pZF9vYmpzWzM1NV0pLC8qIE9CSl9pZF9hY2FfYWNjZXNzSWRlbnRpdHkgICAgICAgIDEgMyA2IDEgNSA1IDcgMTAgMiAqLwotJihuaWRfb2Jqc1szNTZdKSwvKiBPQkpfaWRfYWNhX2NoYXJnaW5nSWRlbnRpdHkgICAgICAxIDMgNiAxIDUgNSA3IDEwIDMgKi8KLSYobmlkX29ianNbMzU3XSksLyogT0JKX2lkX2FjYV9ncm91cCAgICAgICAgICAgICAgICAgMSAzIDYgMSA1IDUgNyAxMCA0ICovCi0mKG5pZF9vYmpzWzM1OF0pLC8qIE9CSl9pZF9hY2Ffcm9sZSAgICAgICAgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgMTAgNSAqLwotJihuaWRfb2Jqc1szOTldKSwvKiBPQkpfaWRfYWNhX2VuY0F0dHJzICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDEwIDYgKi8KLSYobmlkX29ianNbMzU5XSksLyogT0JKX2lkX3Fjc19wa2l4UUNTeW50YXhfdjEgICAgICAgMSAzIDYgMSA1IDUgNyAxMSAxICovCi0mKG5pZF9vYmpzWzM2MF0pLC8qIE9CSl9pZF9jY3RfY3JzICAgICAgICAgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgMTIgMSAqLwotJihuaWRfb2Jqc1szNjFdKSwvKiBPQkpfaWRfY2N0X1BLSURhdGEgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDEyIDIgKi8KLSYobmlkX29ianNbMzYyXSksLyogT0JKX2lkX2NjdF9QS0lSZXNwb25zZSAgICAgICAgICAgMSAzIDYgMSA1IDUgNyAxMiAzICovCi0mKG5pZF9vYmpzWzY2NF0pLC8qIE9CSl9pZF9wcGxfYW55TGFuZ3VhZ2UgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgMjEgMCAqLwotJihuaWRfb2Jqc1s2NjVdKSwvKiBPQkpfaWRfcHBsX2luaGVyaXRBbGwgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDIxIDEgKi8KLSYobmlkX29ianNbNjY3XSksLyogT0JKX0luZGVwZW5kZW50ICAgICAgICAgICAgICAgICAgMSAzIDYgMSA1IDUgNyAyMSAyICovCi0mKG5pZF9vYmpzWzE3OF0pLC8qIE9CSl9hZF9PQ1NQICAgICAgICAgICAgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgNDggMSAqLwotJihuaWRfb2Jqc1sxNzldKSwvKiBPQkpfYWRfY2FfaXNzdWVycyAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDQ4IDIgKi8KLSYobmlkX29ianNbMzYzXSksLyogT0JKX2FkX3RpbWVTdGFtcGluZyAgICAgICAgICAgICAgMSAzIDYgMSA1IDUgNyA0OCAzICovCi0mKG5pZF9vYmpzWzM2NF0pLC8qIE9CSl9hZF9kdmNzICAgICAgICAgICAgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgNDggNCAqLwotJihuaWRfb2Jqc1s3ODVdKSwvKiBPQkpfY2FSZXBvc2l0b3J5ICAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDQ4IDUgKi8KLSYobmlkX29ianNbNzgwXSksLyogT0JKX2htYWNfbWQ1ICAgICAgICAgICAgICAgICAgICAgMSAzIDYgMSA1IDUgOCAxIDEgKi8KLSYobmlkX29ianNbNzgxXSksLyogT0JKX2htYWNfc2hhMSAgICAgICAgICAgICAgICAgICAgMSAzIDYgMSA1IDUgOCAxIDIgKi8KLSYobmlkX29ianNbNThdKSwvKiBPQkpfbmV0c2NhcGVfY2VydF9leHRlbnNpb24gICAgICAyIDE2IDg0MCAxIDExMzczMCAxICovCi0mKG5pZF9vYmpzWzU5XSksLyogT0JKX25ldHNjYXBlX2RhdGFfdHlwZSAgICAgICAgICAgMiAxNiA4NDAgMSAxMTM3MzAgMiAqLwotJihuaWRfb2Jqc1s0MzhdKSwvKiBPQkpfcGlsb3RBdHRyaWJ1dGVUeXBlICAgICAgICAgICAwIDkgMjM0MiAxOTIwMDMwMCAxMDAgMSAqLwotJihuaWRfb2Jqc1s0MzldKSwvKiBPQkpfcGlsb3RBdHRyaWJ1dGVTeW50YXggICAgICAgICAwIDkgMjM0MiAxOTIwMDMwMCAxMDAgMyAqLwotJihuaWRfb2Jqc1s0NDBdKSwvKiBPQkpfcGlsb3RPYmplY3RDbGFzcyAgICAgICAgICAgICAwIDkgMjM0MiAxOTIwMDMwMCAxMDAgNCAqLwotJihuaWRfb2Jqc1s0NDFdKSwvKiBPQkpfcGlsb3RHcm91cHMgICAgICAgICAgICAgICAgICAwIDkgMjM0MiAxOTIwMDMwMCAxMDAgMTAgKi8KLSYobmlkX29ianNbMTA4XSksLyogT0JKX2Nhc3Q1X2NiYyAgICAgICAgICAgICAgICAgICAgMSAyIDg0MCAxMTM1MzMgNyA2NiAxMCAqLwotJihuaWRfb2Jqc1sxMTJdKSwvKiBPQkpfcGJlV2l0aE1ENUFuZENhc3Q1X0NCQyAgICAgICAxIDIgODQwIDExMzUzMyA3IDY2IDEyICovCi0mKG5pZF9vYmpzWzc4Ml0pLC8qIE9CSl9pZF9QYXNzd29yZEJhc2VkTUFDICAgICAgICAgIDEgMiA4NDAgMTEzNTMzIDcgNjYgMTMgKi8KLSYobmlkX29ianNbNzgzXSksLyogT0JKX2lkX0RIQmFzZWRNYWMgICAgICAgICAgICAgICAgMSAyIDg0MCAxMTM1MzMgNyA2NiAzMCAqLwotJihuaWRfb2Jqc1sgNl0pLC8qIE9CSl9yc2FFbmNyeXB0aW9uICAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgMSAxICovCi0mKG5pZF9vYmpzWyA3XSksLyogT0JKX21kMldpdGhSU0FFbmNyeXB0aW9uICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMSAxIDIgKi8KLSYobmlkX29ianNbMzk2XSksLyogT0JKX21kNFdpdGhSU0FFbmNyeXB0aW9uICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMSAxIDMgKi8KLSYobmlkX29ianNbIDhdKSwvKiBPQkpfbWQ1V2l0aFJTQUVuY3J5cHRpb24gICAgICAgICAxIDIgODQwIDExMzU0OSAxIDEgNCAqLwotJihuaWRfb2Jqc1s2NV0pLC8qIE9CSl9zaGExV2l0aFJTQUVuY3J5cHRpb24gICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgMSA1ICovCi0mKG5pZF9vYmpzWzY0NF0pLC8qIE9CSl9yc2FPQUVQRW5jcnlwdGlvblNFVCAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgMSA2ICovCi0mKG5pZF9vYmpzWzY2OF0pLC8qIE9CSl9zaGEyNTZXaXRoUlNBRW5jcnlwdGlvbiAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgMSAxMSAqLwotJihuaWRfb2Jqc1s2NjldKSwvKiBPQkpfc2hhMzg0V2l0aFJTQUVuY3J5cHRpb24gICAgICAxIDIgODQwIDExMzU0OSAxIDEgMTIgKi8KLSYobmlkX29ianNbNjcwXSksLyogT0JKX3NoYTUxMldpdGhSU0FFbmNyeXB0aW9uICAgICAgMSAyIDg0MCAxMTM1NDkgMSAxIDEzICovCi0mKG5pZF9vYmpzWzY3MV0pLC8qIE9CSl9zaGEyMjRXaXRoUlNBRW5jcnlwdGlvbiAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgMSAxNCAqLwotJihuaWRfb2Jqc1syOF0pLC8qIE9CSl9kaEtleUFncmVlbWVudCAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgMyAxICovCi0mKG5pZF9vYmpzWyA5XSksLyogT0JKX3BiZVdpdGhNRDJBbmRERVNfQ0JDICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMSA1IDEgKi8KLSYobmlkX29ianNbMTBdKSwvKiBPQkpfcGJlV2l0aE1ENUFuZERFU19DQkMgICAgICAgICAxIDIgODQwIDExMzU0OSAxIDUgMyAqLwotJihuaWRfb2Jqc1sxNjhdKSwvKiBPQkpfcGJlV2l0aE1EMkFuZFJDMl9DQkMgICAgICAgICAxIDIgODQwIDExMzU0OSAxIDUgNCAqLwotJihuaWRfb2Jqc1sxNjldKSwvKiBPQkpfcGJlV2l0aE1ENUFuZFJDMl9DQkMgICAgICAgICAxIDIgODQwIDExMzU0OSAxIDUgNiAqLwotJihuaWRfb2Jqc1sxNzBdKSwvKiBPQkpfcGJlV2l0aFNIQTFBbmRERVNfQ0JDICAgICAgICAxIDIgODQwIDExMzU0OSAxIDUgMTAgKi8KLSYobmlkX29ianNbNjhdKSwvKiBPQkpfcGJlV2l0aFNIQTFBbmRSQzJfQ0JDICAgICAgICAxIDIgODQwIDExMzU0OSAxIDUgMTEgKi8KLSYobmlkX29ianNbNjldKSwvKiBPQkpfaWRfcGJrZGYyICAgICAgICAgICAgICAgICAgICAxIDIgODQwIDExMzU0OSAxIDUgMTIgKi8KLSYobmlkX29ianNbMTYxXSksLyogT0JKX3BiZXMyICAgICAgICAgICAgICAgICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMSA1IDEzICovCi0mKG5pZF9vYmpzWzE2Ml0pLC8qIE9CSl9wYm1hYzEgICAgICAgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgNSAxNCAqLwotJihuaWRfb2Jqc1syMV0pLC8qIE9CSl9wa2NzN19kYXRhICAgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgNyAxICovCi0mKG5pZF9vYmpzWzIyXSksLyogT0JKX3BrY3M3X3NpZ25lZCAgICAgICAgICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMSA3IDIgKi8KLSYobmlkX29ianNbMjNdKSwvKiBPQkpfcGtjczdfZW52ZWxvcGVkICAgICAgICAgICAgICAxIDIgODQwIDExMzU0OSAxIDcgMyAqLwotJihuaWRfb2Jqc1syNF0pLC8qIE9CSl9wa2NzN19zaWduZWRBbmRFbnZlbG9wZWQgICAgIDEgMiA4NDAgMTEzNTQ5IDEgNyA0ICovCi0mKG5pZF9vYmpzWzI1XSksLyogT0JKX3BrY3M3X2RpZ2VzdCAgICAgICAgICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMSA3IDUgKi8KLSYobmlkX29ianNbMjZdKSwvKiBPQkpfcGtjczdfZW5jcnlwdGVkICAgICAgICAgICAgICAxIDIgODQwIDExMzU0OSAxIDcgNiAqLwotJihuaWRfb2Jqc1s0OF0pLC8qIE9CSl9wa2NzOV9lbWFpbEFkZHJlc3MgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxICovCi0mKG5pZF9vYmpzWzQ5XSksLyogT0JKX3BrY3M5X3Vuc3RydWN0dXJlZE5hbWUgICAgICAgMSAyIDg0MCAxMTM1NDkgMSA5IDIgKi8KLSYobmlkX29ianNbNTBdKSwvKiBPQkpfcGtjczlfY29udGVudFR5cGUgICAgICAgICAgICAxIDIgODQwIDExMzU0OSAxIDkgMyAqLwotJihuaWRfb2Jqc1s1MV0pLC8qIE9CSl9wa2NzOV9tZXNzYWdlRGlnZXN0ICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSA0ICovCi0mKG5pZF9vYmpzWzUyXSksLyogT0JKX3BrY3M5X3NpZ25pbmdUaW1lICAgICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMSA5IDUgKi8KLSYobmlkX29ianNbNTNdKSwvKiBPQkpfcGtjczlfY291bnRlcnNpZ25hdHVyZSAgICAgICAxIDIgODQwIDExMzU0OSAxIDkgNiAqLwotJihuaWRfb2Jqc1s1NF0pLC8qIE9CSl9wa2NzOV9jaGFsbGVuZ2VQYXNzd29yZCAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSA3ICovCi0mKG5pZF9vYmpzWzU1XSksLyogT0JKX3BrY3M5X3Vuc3RydWN0dXJlZEFkZHJlc3MgICAgMSAyIDg0MCAxMTM1NDkgMSA5IDggKi8KLSYobmlkX29ianNbNTZdKSwvKiBPQkpfcGtjczlfZXh0Q2VydEF0dHJpYnV0ZXMgICAgICAxIDIgODQwIDExMzU0OSAxIDkgOSAqLwotJihuaWRfb2Jqc1sxNzJdKSwvKiBPQkpfZXh0X3JlcSAgICAgICAgICAgICAgICAgICAgICAxIDIgODQwIDExMzU0OSAxIDkgMTQgKi8KLSYobmlkX29ianNbMTY3XSksLyogT0JKX1NNSU1FQ2FwYWJpbGl0aWVzICAgICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMSA5IDE1ICovCi0mKG5pZF9vYmpzWzE4OF0pLC8qIE9CSl9TTUlNRSAgICAgICAgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAqLwotJihuaWRfb2Jqc1sxNTZdKSwvKiBPQkpfZnJpZW5kbHlOYW1lICAgICAgICAgICAgICAgICAxIDIgODQwIDExMzU0OSAxIDkgMjAgKi8KLSYobmlkX29ianNbMTU3XSksLyogT0JKX2xvY2FsS2V5SUQgICAgICAgICAgICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMSA5IDIxICovCi0mKG5pZF9vYmpzWzY4MV0pLC8qIE9CSl9YOV82Ml9vbkJhc2lzICAgICAgICAgICAgICAgIDEgMiA4NDAgMTAwNDUgMSAyIDMgMSAqLwotJihuaWRfb2Jqc1s2ODJdKSwvKiBPQkpfWDlfNjJfdHBCYXNpcyAgICAgICAgICAgICAgICAxIDIgODQwIDEwMDQ1IDEgMiAzIDIgKi8KLSYobmlkX29ianNbNjgzXSksLyogT0JKX1g5XzYyX3BwQmFzaXMgICAgICAgICAgICAgICAgMSAyIDg0MCAxMDA0NSAxIDIgMyAzICovCi0mKG5pZF9vYmpzWzQxN10pLC8qIE9CSl9tc19jc3BfbmFtZSAgICAgICAgICAgICAgICAgIDEgMyA2IDEgNCAxIDMxMSAxNyAxICovCi0mKG5pZF9vYmpzWzg1Nl0pLC8qIE9CSl9Mb2NhbEtleVNldCAgICAgICAgICAgICAgICAgIDEgMyA2IDEgNCAxIDMxMSAxNyAyICovCi0mKG5pZF9vYmpzWzM5MF0pLC8qIE9CSl9kY09iamVjdCAgICAgICAgICAgICAgICAgICAgIDEgMyA2IDEgNCAxIDE0NjYgMzQ0ICovCi0mKG5pZF9vYmpzWzkxXSksLyogT0JKX2JmX2NiYyAgICAgICAgICAgICAgICAgICAgICAgMSAzIDYgMSA0IDEgMzAyOSAxIDIgKi8KLSYobmlkX29ianNbMzE1XSksLyogT0JKX2lkX3JlZ0N0cmxfcmVnVG9rZW4gICAgICAgICAgMSAzIDYgMSA1IDUgNyA1IDEgMSAqLwotJihuaWRfb2Jqc1szMTZdKSwvKiBPQkpfaWRfcmVnQ3RybF9hdXRoZW50aWNhdG9yICAgICAxIDMgNiAxIDUgNSA3IDUgMSAyICovCi0mKG5pZF9vYmpzWzMxN10pLC8qIE9CSl9pZF9yZWdDdHJsX3BraVB1YmxpY2F0aW9uSW5mbyAxIDMgNiAxIDUgNSA3IDUgMSAzICovCi0mKG5pZF9vYmpzWzMxOF0pLC8qIE9CSl9pZF9yZWdDdHJsX3BraUFyY2hpdmVPcHRpb25zIDEgMyA2IDEgNSA1IDcgNSAxIDQgKi8KLSYobmlkX29ianNbMzE5XSksLyogT0JKX2lkX3JlZ0N0cmxfb2xkQ2VydElEICAgICAgICAgMSAzIDYgMSA1IDUgNyA1IDEgNSAqLwotJihuaWRfb2Jqc1szMjBdKSwvKiBPQkpfaWRfcmVnQ3RybF9wcm90b2NvbEVuY3JLZXkgICAxIDMgNiAxIDUgNSA3IDUgMSA2ICovCi0mKG5pZF9vYmpzWzMyMV0pLC8qIE9CSl9pZF9yZWdJbmZvX3V0ZjhQYWlycyAgICAgICAgIDEgMyA2IDEgNSA1IDcgNSAyIDEgKi8KLSYobmlkX29ianNbMzIyXSksLyogT0JKX2lkX3JlZ0luZm9fY2VydFJlcSAgICAgICAgICAgMSAzIDYgMSA1IDUgNyA1IDIgMiAqLwotJihuaWRfb2Jqc1szNjVdKSwvKiBPQkpfaWRfcGtpeF9PQ1NQX2Jhc2ljICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDQ4IDEgMSAqLwotJihuaWRfb2Jqc1szNjZdKSwvKiBPQkpfaWRfcGtpeF9PQ1NQX05vbmNlICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDQ4IDEgMiAqLwotJihuaWRfb2Jqc1szNjddKSwvKiBPQkpfaWRfcGtpeF9PQ1NQX0NybElEICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDQ4IDEgMyAqLwotJihuaWRfb2Jqc1szNjhdKSwvKiBPQkpfaWRfcGtpeF9PQ1NQX2FjY2VwdGFibGVSZXNwb25zZXMgMSAzIDYgMSA1IDUgNyA0OCAxIDQgKi8KLSYobmlkX29ianNbMzY5XSksLyogT0JKX2lkX3BraXhfT0NTUF9ub0NoZWNrICAgICAgICAgMSAzIDYgMSA1IDUgNyA0OCAxIDUgKi8KLSYobmlkX29ianNbMzcwXSksLyogT0JKX2lkX3BraXhfT0NTUF9hcmNoaXZlQ3V0b2ZmICAgMSAzIDYgMSA1IDUgNyA0OCAxIDYgKi8KLSYobmlkX29ianNbMzcxXSksLyogT0JKX2lkX3BraXhfT0NTUF9zZXJ2aWNlTG9jYXRvciAgMSAzIDYgMSA1IDUgNyA0OCAxIDcgKi8KLSYobmlkX29ianNbMzcyXSksLyogT0JKX2lkX3BraXhfT0NTUF9leHRlbmRlZFN0YXR1cyAgMSAzIDYgMSA1IDUgNyA0OCAxIDggKi8KLSYobmlkX29ianNbMzczXSksLyogT0JKX2lkX3BraXhfT0NTUF92YWxpZCAgICAgICAgICAgMSAzIDYgMSA1IDUgNyA0OCAxIDkgKi8KLSYobmlkX29ianNbMzc0XSksLyogT0JKX2lkX3BraXhfT0NTUF9wYXRoICAgICAgICAgICAgMSAzIDYgMSA1IDUgNyA0OCAxIDEwICovCi0mKG5pZF9vYmpzWzM3NV0pLC8qIE9CSl9pZF9wa2l4X09DU1BfdHJ1c3RSb290ICAgICAgIDEgMyA2IDEgNSA1IDcgNDggMSAxMSAqLwotJihuaWRfb2Jqc1s0MThdKSwvKiBPQkpfYWVzXzEyOF9lY2IgICAgICAgICAgICAgICAgICAyIDE2IDg0MCAxIDEwMSAzIDQgMSAxICovCi0mKG5pZF9vYmpzWzQxOV0pLC8qIE9CSl9hZXNfMTI4X2NiYyAgICAgICAgICAgICAgICAgIDIgMTYgODQwIDEgMTAxIDMgNCAxIDIgKi8KLSYobmlkX29ianNbNDIwXSksLyogT0JKX2Flc18xMjhfb2ZiMTI4ICAgICAgICAgICAgICAgMiAxNiA4NDAgMSAxMDEgMyA0IDEgMyAqLwotJihuaWRfb2Jqc1s0MjFdKSwvKiBPQkpfYWVzXzEyOF9jZmIxMjggICAgICAgICAgICAgICAyIDE2IDg0MCAxIDEwMSAzIDQgMSA0ICovCi0mKG5pZF9vYmpzWzc4OF0pLC8qIE9CSl9pZF9hZXMxMjhfd3JhcCAgICAgICAgICAgICAgIDIgMTYgODQwIDEgMTAxIDMgNCAxIDUgKi8KLSYobmlkX29ianNbNDIyXSksLyogT0JKX2Flc18xOTJfZWNiICAgICAgICAgICAgICAgICAgMiAxNiA4NDAgMSAxMDEgMyA0IDEgMjEgKi8KLSYobmlkX29ianNbNDIzXSksLyogT0JKX2Flc18xOTJfY2JjICAgICAgICAgICAgICAgICAgMiAxNiA4NDAgMSAxMDEgMyA0IDEgMjIgKi8KLSYobmlkX29ianNbNDI0XSksLyogT0JKX2Flc18xOTJfb2ZiMTI4ICAgICAgICAgICAgICAgMiAxNiA4NDAgMSAxMDEgMyA0IDEgMjMgKi8KLSYobmlkX29ianNbNDI1XSksLyogT0JKX2Flc18xOTJfY2ZiMTI4ICAgICAgICAgICAgICAgMiAxNiA4NDAgMSAxMDEgMyA0IDEgMjQgKi8KLSYobmlkX29ianNbNzg5XSksLyogT0JKX2lkX2FlczE5Ml93cmFwICAgICAgICAgICAgICAgMiAxNiA4NDAgMSAxMDEgMyA0IDEgMjUgKi8KLSYobmlkX29ianNbNDI2XSksLyogT0JKX2Flc18yNTZfZWNiICAgICAgICAgICAgICAgICAgMiAxNiA4NDAgMSAxMDEgMyA0IDEgNDEgKi8KLSYobmlkX29ianNbNDI3XSksLyogT0JKX2Flc18yNTZfY2JjICAgICAgICAgICAgICAgICAgMiAxNiA4NDAgMSAxMDEgMyA0IDEgNDIgKi8KLSYobmlkX29ianNbNDI4XSksLyogT0JKX2Flc18yNTZfb2ZiMTI4ICAgICAgICAgICAgICAgMiAxNiA4NDAgMSAxMDEgMyA0IDEgNDMgKi8KLSYobmlkX29ianNbNDI5XSksLyogT0JKX2Flc18yNTZfY2ZiMTI4ICAgICAgICAgICAgICAgMiAxNiA4NDAgMSAxMDEgMyA0IDEgNDQgKi8KLSYobmlkX29ianNbNzkwXSksLyogT0JKX2lkX2FlczI1Nl93cmFwICAgICAgICAgICAgICAgMiAxNiA4NDAgMSAxMDEgMyA0IDEgNDUgKi8KLSYobmlkX29ianNbNjcyXSksLyogT0JKX3NoYTI1NiAgICAgICAgICAgICAgICAgICAgICAgMiAxNiA4NDAgMSAxMDEgMyA0IDIgMSAqLwotJihuaWRfb2Jqc1s2NzNdKSwvKiBPQkpfc2hhMzg0ICAgICAgICAgICAgICAgICAgICAgICAyIDE2IDg0MCAxIDEwMSAzIDQgMiAyICovCi0mKG5pZF9vYmpzWzY3NF0pLC8qIE9CSl9zaGE1MTIgICAgICAgICAgICAgICAgICAgICAgIDIgMTYgODQwIDEgMTAxIDMgNCAyIDMgKi8KLSYobmlkX29ianNbNjc1XSksLyogT0JKX3NoYTIyNCAgICAgICAgICAgICAgICAgICAgICAgMiAxNiA4NDAgMSAxMDEgMyA0IDIgNCAqLwotJihuaWRfb2Jqc1s4MDJdKSwvKiBPQkpfZHNhX3dpdGhfU0hBMjI0ICAgICAgICAgICAgICAyIDE2IDg0MCAxIDEwMSAzIDQgMyAxICovCi0mKG5pZF9vYmpzWzgwM10pLC8qIE9CSl9kc2Ffd2l0aF9TSEEyNTYgICAgICAgICAgICAgIDIgMTYgODQwIDEgMTAxIDMgNCAzIDIgKi8KLSYobmlkX29ianNbNzFdKSwvKiBPQkpfbmV0c2NhcGVfY2VydF90eXBlICAgICAgICAgICAyIDE2IDg0MCAxIDExMzczMCAxIDEgKi8KLSYobmlkX29ianNbNzJdKSwvKiBPQkpfbmV0c2NhcGVfYmFzZV91cmwgICAgICAgICAgICAyIDE2IDg0MCAxIDExMzczMCAxIDIgKi8KLSYobmlkX29ianNbNzNdKSwvKiBPQkpfbmV0c2NhcGVfcmV2b2NhdGlvbl91cmwgICAgICAyIDE2IDg0MCAxIDExMzczMCAxIDMgKi8KLSYobmlkX29ianNbNzRdKSwvKiBPQkpfbmV0c2NhcGVfY2FfcmV2b2NhdGlvbl91cmwgICAyIDE2IDg0MCAxIDExMzczMCAxIDQgKi8KLSYobmlkX29ianNbNzVdKSwvKiBPQkpfbmV0c2NhcGVfcmVuZXdhbF91cmwgICAgICAgICAyIDE2IDg0MCAxIDExMzczMCAxIDcgKi8KLSYobmlkX29ianNbNzZdKSwvKiBPQkpfbmV0c2NhcGVfY2FfcG9saWN5X3VybCAgICAgICAyIDE2IDg0MCAxIDExMzczMCAxIDggKi8KLSYobmlkX29ianNbNzddKSwvKiBPQkpfbmV0c2NhcGVfc3NsX3NlcnZlcl9uYW1lICAgICAyIDE2IDg0MCAxIDExMzczMCAxIDEyICovCi0mKG5pZF9vYmpzWzc4XSksLyogT0JKX25ldHNjYXBlX2NvbW1lbnQgICAgICAgICAgICAgMiAxNiA4NDAgMSAxMTM3MzAgMSAxMyAqLwotJihuaWRfb2Jqc1s3OV0pLC8qIE9CSl9uZXRzY2FwZV9jZXJ0X3NlcXVlbmNlICAgICAgIDIgMTYgODQwIDEgMTEzNzMwIDIgNSAqLwotJihuaWRfb2Jqc1sxMzldKSwvKiBPQkpfbnNfc2djICAgICAgICAgICAgICAgICAgICAgICAyIDE2IDg0MCAxIDExMzczMCA0IDEgKi8KLSYobmlkX29ianNbNDU4XSksLyogT0JKX3VzZXJJZCAgICAgICAgICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgMSAqLwotJihuaWRfb2Jqc1s0NTldKSwvKiBPQkpfdGV4dEVuY29kZWRPUkFkZHJlc3MgICAgICAgICAwIDkgMjM0MiAxOTIwMDMwMCAxMDAgMSAyICovCi0mKG5pZF9vYmpzWzQ2MF0pLC8qIE9CSl9yZmM4MjJNYWlsYm94ICAgICAgICAgICAgICAgIDAgOSAyMzQyIDE5MjAwMzAwIDEwMCAxIDMgKi8KLSYobmlkX29ianNbNDYxXSksLyogT0JKX2luZm8gICAgICAgICAgICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgNCAqLwotJihuaWRfb2Jqc1s0NjJdKSwvKiBPQkpfZmF2b3VyaXRlRHJpbmsgICAgICAgICAgICAgICAwIDkgMjM0MiAxOTIwMDMwMCAxMDAgMSA1ICovCi0mKG5pZF9vYmpzWzQ2M10pLC8qIE9CSl9yb29tTnVtYmVyICAgICAgICAgICAgICAgICAgIDAgOSAyMzQyIDE5MjAwMzAwIDEwMCAxIDYgKi8KLSYobmlkX29ianNbNDY0XSksLyogT0JKX3Bob3RvICAgICAgICAgICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgNyAqLwotJihuaWRfb2Jqc1s0NjVdKSwvKiBPQkpfdXNlckNsYXNzICAgICAgICAgICAgICAgICAgICAwIDkgMjM0MiAxOTIwMDMwMCAxMDAgMSA4ICovCi0mKG5pZF9vYmpzWzQ2Nl0pLC8qIE9CSl9ob3N0ICAgICAgICAgICAgICAgICAgICAgICAgIDAgOSAyMzQyIDE5MjAwMzAwIDEwMCAxIDkgKi8KLSYobmlkX29ianNbNDY3XSksLyogT0JKX21hbmFnZXIgICAgICAgICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgMTAgKi8KLSYobmlkX29ianNbNDY4XSksLyogT0JKX2RvY3VtZW50SWRlbnRpZmllciAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgMTEgKi8KLSYobmlkX29ianNbNDY5XSksLyogT0JKX2RvY3VtZW50VGl0bGUgICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgMTIgKi8KLSYobmlkX29ianNbNDcwXSksLyogT0JKX2RvY3VtZW50VmVyc2lvbiAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgMTMgKi8KLSYobmlkX29ianNbNDcxXSksLyogT0JKX2RvY3VtZW50QXV0aG9yICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgMTQgKi8KLSYobmlkX29ianNbNDcyXSksLyogT0JKX2RvY3VtZW50TG9jYXRpb24gICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgMTUgKi8KLSYobmlkX29ianNbNDczXSksLyogT0JKX2hvbWVUZWxlcGhvbmVOdW1iZXIgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgMjAgKi8KLSYobmlkX29ianNbNDc0XSksLyogT0JKX3NlY3JldGFyeSAgICAgICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgMjEgKi8KLSYobmlkX29ianNbNDc1XSksLyogT0JKX290aGVyTWFpbGJveCAgICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgMjIgKi8KLSYobmlkX29ianNbNDc2XSksLyogT0JKX2xhc3RNb2RpZmllZFRpbWUgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgMjMgKi8KLSYobmlkX29ianNbNDc3XSksLyogT0JKX2xhc3RNb2RpZmllZEJ5ICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgMjQgKi8KLSYobmlkX29ianNbMzkxXSksLyogT0JKX2RvbWFpbkNvbXBvbmVudCAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgMjUgKi8KLSYobmlkX29ianNbNDc4XSksLyogT0JKX2FSZWNvcmQgICAgICAgICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgMjYgKi8KLSYobmlkX29ianNbNDc5XSksLyogT0JKX3BpbG90QXR0cmlidXRlVHlwZTI3ICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgMjcgKi8KLSYobmlkX29ianNbNDgwXSksLyogT0JKX21YUmVjb3JkICAgICAgICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgMjggKi8KLSYobmlkX29ianNbNDgxXSksLyogT0JKX25TUmVjb3JkICAgICAgICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgMjkgKi8KLSYobmlkX29ianNbNDgyXSksLyogT0JKX3NPQVJlY29yZCAgICAgICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgMzAgKi8KLSYobmlkX29ianNbNDgzXSksLyogT0JKX2NOQU1FUmVjb3JkICAgICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgMzEgKi8KLSYobmlkX29ianNbNDg0XSksLyogT0JKX2Fzc29jaWF0ZWREb21haW4gICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgMzcgKi8KLSYobmlkX29ianNbNDg1XSksLyogT0JKX2Fzc29jaWF0ZWROYW1lICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgMzggKi8KLSYobmlkX29ianNbNDg2XSksLyogT0JKX2hvbWVQb3N0YWxBZGRyZXNzICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgMzkgKi8KLSYobmlkX29ianNbNDg3XSksLyogT0JKX3BlcnNvbmFsVGl0bGUgICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgNDAgKi8KLSYobmlkX29ianNbNDg4XSksLyogT0JKX21vYmlsZVRlbGVwaG9uZU51bWJlciAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgNDEgKi8KLSYobmlkX29ianNbNDg5XSksLyogT0JKX3BhZ2VyVGVsZXBob25lTnVtYmVyICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgNDIgKi8KLSYobmlkX29ianNbNDkwXSksLyogT0JKX2ZyaWVuZGx5Q291bnRyeU5hbWUgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgNDMgKi8KLSYobmlkX29ianNbNDkxXSksLyogT0JKX29yZ2FuaXphdGlvbmFsU3RhdHVzICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgNDUgKi8KLSYobmlkX29ianNbNDkyXSksLyogT0JKX2phbmV0TWFpbGJveCAgICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgNDYgKi8KLSYobmlkX29ianNbNDkzXSksLyogT0JKX21haWxQcmVmZXJlbmNlT3B0aW9uICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgNDcgKi8KLSYobmlkX29ianNbNDk0XSksLyogT0JKX2J1aWxkaW5nTmFtZSAgICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgNDggKi8KLSYobmlkX29ianNbNDk1XSksLyogT0JKX2RTQVF1YWxpdHkgICAgICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgNDkgKi8KLSYobmlkX29ianNbNDk2XSksLyogT0JKX3NpbmdsZUxldmVsUXVhbGl0eSAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgNTAgKi8KLSYobmlkX29ianNbNDk3XSksLyogT0JKX3N1YnRyZWVNaW5pbXVtUXVhbGl0eSAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgNTEgKi8KLSYobmlkX29ianNbNDk4XSksLyogT0JKX3N1YnRyZWVNYXhpbXVtUXVhbGl0eSAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgNTIgKi8KLSYobmlkX29ianNbNDk5XSksLyogT0JKX3BlcnNvbmFsU2lnbmF0dXJlICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgNTMgKi8KLSYobmlkX29ianNbNTAwXSksLyogT0JKX2RJVFJlZGlyZWN0ICAgICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgNTQgKi8KLSYobmlkX29ianNbNTAxXSksLyogT0JKX2F1ZGlvICAgICAgICAgICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgNTUgKi8KLSYobmlkX29ianNbNTAyXSksLyogT0JKX2RvY3VtZW50UHVibGlzaGVyICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgNTYgKi8KLSYobmlkX29ianNbNDQyXSksLyogT0JKX2lBNVN0cmluZ1N5bnRheCAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDMgNCAqLwotJihuaWRfb2Jqc1s0NDNdKSwvKiBPQkpfY2FzZUlnbm9yZUlBNVN0cmluZ1N5bnRheCAgICAwIDkgMjM0MiAxOTIwMDMwMCAxMDAgMyA1ICovCi0mKG5pZF9vYmpzWzQ0NF0pLC8qIE9CSl9waWxvdE9iamVjdCAgICAgICAgICAgICAgICAgIDAgOSAyMzQyIDE5MjAwMzAwIDEwMCA0IDMgKi8KLSYobmlkX29ianNbNDQ1XSksLyogT0JKX3BpbG90UGVyc29uICAgICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDQgNCAqLwotJihuaWRfb2Jqc1s0NDZdKSwvKiBPQkpfYWNjb3VudCAgICAgICAgICAgICAgICAgICAgICAwIDkgMjM0MiAxOTIwMDMwMCAxMDAgNCA1ICovCi0mKG5pZF9vYmpzWzQ0N10pLC8qIE9CSl9kb2N1bWVudCAgICAgICAgICAgICAgICAgICAgIDAgOSAyMzQyIDE5MjAwMzAwIDEwMCA0IDYgKi8KLSYobmlkX29ianNbNDQ4XSksLyogT0JKX3Jvb20gICAgICAgICAgICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDQgNyAqLwotJihuaWRfb2Jqc1s0NDldKSwvKiBPQkpfZG9jdW1lbnRTZXJpZXMgICAgICAgICAgICAgICAwIDkgMjM0MiAxOTIwMDMwMCAxMDAgNCA5ICovCi0mKG5pZF9vYmpzWzM5Ml0pLC8qIE9CSl9Eb21haW4gICAgICAgICAgICAgICAgICAgICAgIDAgOSAyMzQyIDE5MjAwMzAwIDEwMCA0IDEzICovCi0mKG5pZF9vYmpzWzQ1MF0pLC8qIE9CSl9yRkM4MjJsb2NhbFBhcnQgICAgICAgICAgICAgIDAgOSAyMzQyIDE5MjAwMzAwIDEwMCA0IDE0ICovCi0mKG5pZF9vYmpzWzQ1MV0pLC8qIE9CSl9kTlNEb21haW4gICAgICAgICAgICAgICAgICAgIDAgOSAyMzQyIDE5MjAwMzAwIDEwMCA0IDE1ICovCi0mKG5pZF9vYmpzWzQ1Ml0pLC8qIE9CSl9kb21haW5SZWxhdGVkT2JqZWN0ICAgICAgICAgIDAgOSAyMzQyIDE5MjAwMzAwIDEwMCA0IDE3ICovCi0mKG5pZF9vYmpzWzQ1M10pLC8qIE9CSl9mcmllbmRseUNvdW50cnkgICAgICAgICAgICAgIDAgOSAyMzQyIDE5MjAwMzAwIDEwMCA0IDE4ICovCi0mKG5pZF9vYmpzWzQ1NF0pLC8qIE9CSl9zaW1wbGVTZWN1cml0eU9iamVjdCAgICAgICAgIDAgOSAyMzQyIDE5MjAwMzAwIDEwMCA0IDE5ICovCi0mKG5pZF9vYmpzWzQ1NV0pLC8qIE9CSl9waWxvdE9yZ2FuaXphdGlvbiAgICAgICAgICAgIDAgOSAyMzQyIDE5MjAwMzAwIDEwMCA0IDIwICovCi0mKG5pZF9vYmpzWzQ1Nl0pLC8qIE9CSl9waWxvdERTQSAgICAgICAgICAgICAgICAgICAgIDAgOSAyMzQyIDE5MjAwMzAwIDEwMCA0IDIxICovCi0mKG5pZF9vYmpzWzQ1N10pLC8qIE9CSl9xdWFsaXR5TGFiZWxsZWREYXRhICAgICAgICAgIDAgOSAyMzQyIDE5MjAwMzAwIDEwMCA0IDIyICovCi0mKG5pZF9vYmpzWzE4OV0pLC8qIE9CSl9pZF9zbWltZV9tb2QgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAwICovCi0mKG5pZF9vYmpzWzE5MF0pLC8qIE9CSl9pZF9zbWltZV9jdCAgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAxICovCi0mKG5pZF9vYmpzWzE5MV0pLC8qIE9CSl9pZF9zbWltZV9hYSAgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAyICovCi0mKG5pZF9vYmpzWzE5Ml0pLC8qIE9CSl9pZF9zbWltZV9hbGcgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAzICovCi0mKG5pZF9vYmpzWzE5M10pLC8qIE9CSl9pZF9zbWltZV9jZCAgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiA0ICovCi0mKG5pZF9vYmpzWzE5NF0pLC8qIE9CSl9pZF9zbWltZV9zcHEgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiA1ICovCi0mKG5pZF9vYmpzWzE5NV0pLC8qIE9CSl9pZF9zbWltZV9jdGkgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiA2ICovCi0mKG5pZF9vYmpzWzE1OF0pLC8qIE9CSl94NTA5Q2VydGlmaWNhdGUgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAyMiAxICovCi0mKG5pZF9vYmpzWzE1OV0pLC8qIE9CSl9zZHNpQ2VydGlmaWNhdGUgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAyMiAyICovCi0mKG5pZF9vYmpzWzE2MF0pLC8qIE9CSl94NTA5Q3JsICAgICAgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAyMyAxICovCi0mKG5pZF9vYmpzWzE0NF0pLC8qIE9CSl9wYmVfV2l0aFNIQTFBbmQxMjhCaXRSQzQgICAgIDEgMiA4NDAgMTEzNTQ5IDEgMTIgMSAxICovCi0mKG5pZF9vYmpzWzE0NV0pLC8qIE9CSl9wYmVfV2l0aFNIQTFBbmQ0MEJpdFJDNCAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgMTIgMSAyICovCi0mKG5pZF9vYmpzWzE0Nl0pLC8qIE9CSl9wYmVfV2l0aFNIQTFBbmQzX0tleV9UcmlwbGVERVNfQ0JDIDEgMiA4NDAgMTEzNTQ5IDEgMTIgMSAzICovCi0mKG5pZF9vYmpzWzE0N10pLC8qIE9CSl9wYmVfV2l0aFNIQTFBbmQyX0tleV9UcmlwbGVERVNfQ0JDIDEgMiA4NDAgMTEzNTQ5IDEgMTIgMSA0ICovCi0mKG5pZF9vYmpzWzE0OF0pLC8qIE9CSl9wYmVfV2l0aFNIQTFBbmQxMjhCaXRSQzJfQ0JDIDEgMiA4NDAgMTEzNTQ5IDEgMTIgMSA1ICovCi0mKG5pZF9vYmpzWzE0OV0pLC8qIE9CSl9wYmVfV2l0aFNIQTFBbmQ0MEJpdFJDMl9DQkMgIDEgMiA4NDAgMTEzNTQ5IDEgMTIgMSA2ICovCi0mKG5pZF9vYmpzWzE3MV0pLC8qIE9CSl9tc19leHRfcmVxICAgICAgICAgICAgICAgICAgIDEgMyA2IDEgNCAxIDMxMSAyIDEgMTQgKi8KLSYobmlkX29ianNbMTM0XSksLyogT0JKX21zX2NvZGVfaW5kICAgICAgICAgICAgICAgICAgMSAzIDYgMSA0IDEgMzExIDIgMSAyMSAqLwotJihuaWRfb2Jqc1sxMzVdKSwvKiBPQkpfbXNfY29kZV9jb20gICAgICAgICAgICAgICAgICAxIDMgNiAxIDQgMSAzMTEgMiAxIDIyICovCi0mKG5pZF9vYmpzWzEzNl0pLC8qIE9CSl9tc19jdGxfc2lnbiAgICAgICAgICAgICAgICAgIDEgMyA2IDEgNCAxIDMxMSAxMCAzIDEgKi8KLSYobmlkX29ianNbMTM3XSksLyogT0JKX21zX3NnYyAgICAgICAgICAgICAgICAgICAgICAgMSAzIDYgMSA0IDEgMzExIDEwIDMgMyAqLwotJihuaWRfb2Jqc1sxMzhdKSwvKiBPQkpfbXNfZWZzICAgICAgICAgICAgICAgICAgICAgICAxIDMgNiAxIDQgMSAzMTEgMTAgMyA0ICovCi0mKG5pZF9vYmpzWzY0OF0pLC8qIE9CSl9tc19zbWFydGNhcmRfbG9naW4gICAgICAgICAgIDEgMyA2IDEgNCAxIDMxMSAyMCAyIDIgKi8KLSYobmlkX29ianNbNjQ5XSksLyogT0JKX21zX3VwbiAgICAgICAgICAgICAgICAgICAgICAgMSAzIDYgMSA0IDEgMzExIDIwIDIgMyAqLwotJihuaWRfb2Jqc1s3NTFdKSwvKiBPQkpfY2FtZWxsaWFfMTI4X2NiYyAgICAgICAgICAgICAxIDIgMzkyIDIwMDAxMSA2MSAxIDEgMSAyICovCi0mKG5pZF9vYmpzWzc1Ml0pLC8qIE9CSl9jYW1lbGxpYV8xOTJfY2JjICAgICAgICAgICAgIDEgMiAzOTIgMjAwMDExIDYxIDEgMSAxIDMgKi8KLSYobmlkX29ianNbNzUzXSksLyogT0JKX2NhbWVsbGlhXzI1Nl9jYmMgICAgICAgICAgICAgMSAyIDM5MiAyMDAwMTEgNjEgMSAxIDEgNCAqLwotJihuaWRfb2Jqc1sxOTZdKSwvKiBPQkpfaWRfc21pbWVfbW9kX2NtcyAgICAgICAgICAgICAxIDIgODQwIDExMzU0OSAxIDkgMTYgMCAxICovCi0mKG5pZF9vYmpzWzE5N10pLC8qIE9CSl9pZF9zbWltZV9tb2RfZXNzICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAwIDIgKi8KLSYobmlkX29ianNbMTk4XSksLyogT0JKX2lkX3NtaW1lX21vZF9vaWQgICAgICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMSA5IDE2IDAgMyAqLwotJihuaWRfb2Jqc1sxOTldKSwvKiBPQkpfaWRfc21pbWVfbW9kX21zZ192MyAgICAgICAgICAxIDIgODQwIDExMzU0OSAxIDkgMTYgMCA0ICovCi0mKG5pZF9vYmpzWzIwMF0pLC8qIE9CSl9pZF9zbWltZV9tb2RfZXRzX2VTaWduYXR1cmVfODggMSAyIDg0MCAxMTM1NDkgMSA5IDE2IDAgNSAqLwotJihuaWRfb2Jqc1syMDFdKSwvKiBPQkpfaWRfc21pbWVfbW9kX2V0c19lU2lnbmF0dXJlXzk3IDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAwIDYgKi8KLSYobmlkX29ianNbMjAyXSksLyogT0JKX2lkX3NtaW1lX21vZF9ldHNfZVNpZ1BvbGljeV84OCAxIDIgODQwIDExMzU0OSAxIDkgMTYgMCA3ICovCi0mKG5pZF9vYmpzWzIwM10pLC8qIE9CSl9pZF9zbWltZV9tb2RfZXRzX2VTaWdQb2xpY3lfOTcgMSAyIDg0MCAxMTM1NDkgMSA5IDE2IDAgOCAqLwotJihuaWRfb2Jqc1syMDRdKSwvKiBPQkpfaWRfc21pbWVfY3RfcmVjZWlwdCAgICAgICAgICAxIDIgODQwIDExMzU0OSAxIDkgMTYgMSAxICovCi0mKG5pZF9vYmpzWzIwNV0pLC8qIE9CSl9pZF9zbWltZV9jdF9hdXRoRGF0YSAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAxIDIgKi8KLSYobmlkX29ianNbMjA2XSksLyogT0JKX2lkX3NtaW1lX2N0X3B1Ymxpc2hDZXJ0ICAgICAgMSAyIDg0MCAxMTM1NDkgMSA5IDE2IDEgMyAqLwotJihuaWRfb2Jqc1syMDddKSwvKiBPQkpfaWRfc21pbWVfY3RfVFNUSW5mbyAgICAgICAgICAxIDIgODQwIDExMzU0OSAxIDkgMTYgMSA0ICovCi0mKG5pZF9vYmpzWzIwOF0pLC8qIE9CSl9pZF9zbWltZV9jdF9URFRJbmZvICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAxIDUgKi8KLSYobmlkX29ianNbMjA5XSksLyogT0JKX2lkX3NtaW1lX2N0X2NvbnRlbnRJbmZvICAgICAgMSAyIDg0MCAxMTM1NDkgMSA5IDE2IDEgNiAqLwotJihuaWRfb2Jqc1syMTBdKSwvKiBPQkpfaWRfc21pbWVfY3RfRFZDU1JlcXVlc3REYXRhICAxIDIgODQwIDExMzU0OSAxIDkgMTYgMSA3ICovCi0mKG5pZF9vYmpzWzIxMV0pLC8qIE9CSl9pZF9zbWltZV9jdF9EVkNTUmVzcG9uc2VEYXRhIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAxIDggKi8KLSYobmlkX29ianNbNzg2XSksLyogT0JKX2lkX3NtaW1lX2N0X2NvbXByZXNzZWREYXRhICAgMSAyIDg0MCAxMTM1NDkgMSA5IDE2IDEgOSAqLwotJihuaWRfb2Jqc1s3ODddKSwvKiBPQkpfaWRfY3RfYXNjaWlUZXh0V2l0aENSTEYgICAgICAxIDIgODQwIDExMzU0OSAxIDkgMTYgMSAyNyAqLwotJihuaWRfb2Jqc1syMTJdKSwvKiBPQkpfaWRfc21pbWVfYWFfcmVjZWlwdFJlcXVlc3QgICAxIDIgODQwIDExMzU0OSAxIDkgMTYgMiAxICovCi0mKG5pZF9vYmpzWzIxM10pLC8qIE9CSl9pZF9zbWltZV9hYV9zZWN1cml0eUxhYmVsICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAyIDIgKi8KLSYobmlkX29ianNbMjE0XSksLyogT0JKX2lkX3NtaW1lX2FhX21sRXhwYW5kSGlzdG9yeSAgMSAyIDg0MCAxMTM1NDkgMSA5IDE2IDIgMyAqLwotJihuaWRfb2Jqc1syMTVdKSwvKiBPQkpfaWRfc21pbWVfYWFfY29udGVudEhpbnQgICAgICAxIDIgODQwIDExMzU0OSAxIDkgMTYgMiA0ICovCi0mKG5pZF9vYmpzWzIxNl0pLC8qIE9CSl9pZF9zbWltZV9hYV9tc2dTaWdEaWdlc3QgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAyIDUgKi8KLSYobmlkX29ianNbMjE3XSksLyogT0JKX2lkX3NtaW1lX2FhX2VuY2FwQ29udGVudFR5cGUgMSAyIDg0MCAxMTM1NDkgMSA5IDE2IDIgNiAqLwotJihuaWRfb2Jqc1syMThdKSwvKiBPQkpfaWRfc21pbWVfYWFfY29udGVudElkZW50aWZpZXIgMSAyIDg0MCAxMTM1NDkgMSA5IDE2IDIgNyAqLwotJihuaWRfb2Jqc1syMTldKSwvKiBPQkpfaWRfc21pbWVfYWFfbWFjVmFsdWUgICAgICAgICAxIDIgODQwIDExMzU0OSAxIDkgMTYgMiA4ICovCi0mKG5pZF9vYmpzWzIyMF0pLC8qIE9CSl9pZF9zbWltZV9hYV9lcXVpdmFsZW50TGFiZWxzIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAyIDkgKi8KLSYobmlkX29ianNbMjIxXSksLyogT0JKX2lkX3NtaW1lX2FhX2NvbnRlbnRSZWZlcmVuY2UgMSAyIDg0MCAxMTM1NDkgMSA5IDE2IDIgMTAgKi8KLSYobmlkX29ianNbMjIyXSksLyogT0JKX2lkX3NtaW1lX2FhX2VuY3J5cEtleVByZWYgICAgMSAyIDg0MCAxMTM1NDkgMSA5IDE2IDIgMTEgKi8KLSYobmlkX29ianNbMjIzXSksLyogT0JKX2lkX3NtaW1lX2FhX3NpZ25pbmdDZXJ0aWZpY2F0ZSAxIDIgODQwIDExMzU0OSAxIDkgMTYgMiAxMiAqLwotJihuaWRfb2Jqc1syMjRdKSwvKiBPQkpfaWRfc21pbWVfYWFfc21pbWVFbmNyeXB0Q2VydHMgMSAyIDg0MCAxMTM1NDkgMSA5IDE2IDIgMTMgKi8KLSYobmlkX29ianNbMjI1XSksLyogT0JKX2lkX3NtaW1lX2FhX3RpbWVTdGFtcFRva2VuICAgMSAyIDg0MCAxMTM1NDkgMSA5IDE2IDIgMTQgKi8KLSYobmlkX29ianNbMjI2XSksLyogT0JKX2lkX3NtaW1lX2FhX2V0c19zaWdQb2xpY3lJZCAgMSAyIDg0MCAxMTM1NDkgMSA5IDE2IDIgMTUgKi8KLSYobmlkX29ianNbMjI3XSksLyogT0JKX2lkX3NtaW1lX2FhX2V0c19jb21taXRtZW50VHlwZSAxIDIgODQwIDExMzU0OSAxIDkgMTYgMiAxNiAqLwotJihuaWRfb2Jqc1syMjhdKSwvKiBPQkpfaWRfc21pbWVfYWFfZXRzX3NpZ25lckxvY2F0aW9uIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAyIDE3ICovCi0mKG5pZF9vYmpzWzIyOV0pLC8qIE9CSl9pZF9zbWltZV9hYV9ldHNfc2lnbmVyQXR0ciAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAyIDE4ICovCi0mKG5pZF9vYmpzWzIzMF0pLC8qIE9CSl9pZF9zbWltZV9hYV9ldHNfb3RoZXJTaWdDZXJ0IDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAyIDE5ICovCi0mKG5pZF9vYmpzWzIzMV0pLC8qIE9CSl9pZF9zbWltZV9hYV9ldHNfY29udGVudFRpbWVzdGFtcCAxIDIgODQwIDExMzU0OSAxIDkgMTYgMiAyMCAqLwotJihuaWRfb2Jqc1syMzJdKSwvKiBPQkpfaWRfc21pbWVfYWFfZXRzX0NlcnRpZmljYXRlUmVmcyAxIDIgODQwIDExMzU0OSAxIDkgMTYgMiAyMSAqLwotJihuaWRfb2Jqc1syMzNdKSwvKiBPQkpfaWRfc21pbWVfYWFfZXRzX1Jldm9jYXRpb25SZWZzIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAyIDIyICovCi0mKG5pZF9vYmpzWzIzNF0pLC8qIE9CSl9pZF9zbWltZV9hYV9ldHNfY2VydFZhbHVlcyAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAyIDIzICovCi0mKG5pZF9vYmpzWzIzNV0pLC8qIE9CSl9pZF9zbWltZV9hYV9ldHNfcmV2b2NhdGlvblZhbHVlcyAxIDIgODQwIDExMzU0OSAxIDkgMTYgMiAyNCAqLwotJihuaWRfb2Jqc1syMzZdKSwvKiBPQkpfaWRfc21pbWVfYWFfZXRzX2VzY1RpbWVTdGFtcCAxIDIgODQwIDExMzU0OSAxIDkgMTYgMiAyNSAqLwotJihuaWRfb2Jqc1syMzddKSwvKiBPQkpfaWRfc21pbWVfYWFfZXRzX2NlcnRDUkxUaW1lc3RhbXAgMSAyIDg0MCAxMTM1NDkgMSA5IDE2IDIgMjYgKi8KLSYobmlkX29ianNbMjM4XSksLyogT0JKX2lkX3NtaW1lX2FhX2V0c19hcmNoaXZlVGltZVN0YW1wIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAyIDI3ICovCi0mKG5pZF9vYmpzWzIzOV0pLC8qIE9CSl9pZF9zbWltZV9hYV9zaWduYXR1cmVUeXBlICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAyIDI4ICovCi0mKG5pZF9vYmpzWzI0MF0pLC8qIE9CSl9pZF9zbWltZV9hYV9kdmNzX2R2YyAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAyIDI5ICovCi0mKG5pZF9vYmpzWzI0MV0pLC8qIE9CSl9pZF9zbWltZV9hbGdfRVNESHdpdGgzREVTICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAzIDEgKi8KLSYobmlkX29ianNbMjQyXSksLyogT0JKX2lkX3NtaW1lX2FsZ19FU0RId2l0aFJDMiAgICAgMSAyIDg0MCAxMTM1NDkgMSA5IDE2IDMgMiAqLwotJihuaWRfb2Jqc1syNDNdKSwvKiBPQkpfaWRfc21pbWVfYWxnXzNERVN3cmFwICAgICAgICAxIDIgODQwIDExMzU0OSAxIDkgMTYgMyAzICovCi0mKG5pZF9vYmpzWzI0NF0pLC8qIE9CSl9pZF9zbWltZV9hbGdfUkMyd3JhcCAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAzIDQgKi8KLSYobmlkX29ianNbMjQ1XSksLyogT0JKX2lkX3NtaW1lX2FsZ19FU0RIICAgICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMSA5IDE2IDMgNSAqLwotJihuaWRfb2Jqc1syNDZdKSwvKiBPQkpfaWRfc21pbWVfYWxnX0NNUzNERVN3cmFwICAgICAxIDIgODQwIDExMzU0OSAxIDkgMTYgMyA2ICovCi0mKG5pZF9vYmpzWzI0N10pLC8qIE9CSl9pZF9zbWltZV9hbGdfQ01TUkMyd3JhcCAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAzIDcgKi8KLSYobmlkX29ianNbMTI1XSksLyogT0JKX3psaWJfY29tcHJlc3Npb24gICAgICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMSA5IDE2IDMgOCAqLwotJihuaWRfb2Jqc1syNDhdKSwvKiBPQkpfaWRfc21pbWVfY2RfbGRhcCAgICAgICAgICAgICAxIDIgODQwIDExMzU0OSAxIDkgMTYgNCAxICovCi0mKG5pZF9vYmpzWzI0OV0pLC8qIE9CSl9pZF9zbWltZV9zcHFfZXRzX3NxdF91cmkgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiA1IDEgKi8KLSYobmlkX29ianNbMjUwXSksLyogT0JKX2lkX3NtaW1lX3NwcV9ldHNfc3F0X3Vub3RpY2UgMSAyIDg0MCAxMTM1NDkgMSA5IDE2IDUgMiAqLwotJihuaWRfb2Jqc1syNTFdKSwvKiBPQkpfaWRfc21pbWVfY3RpX2V0c19wcm9vZk9mT3JpZ2luIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiA2IDEgKi8KLSYobmlkX29ianNbMjUyXSksLyogT0JKX2lkX3NtaW1lX2N0aV9ldHNfcHJvb2ZPZlJlY2VpcHQgMSAyIDg0MCAxMTM1NDkgMSA5IDE2IDYgMiAqLwotJihuaWRfb2Jqc1syNTNdKSwvKiBPQkpfaWRfc21pbWVfY3RpX2V0c19wcm9vZk9mRGVsaXZlcnkgMSAyIDg0MCAxMTM1NDkgMSA5IDE2IDYgMyAqLwotJihuaWRfb2Jqc1syNTRdKSwvKiBPQkpfaWRfc21pbWVfY3RpX2V0c19wcm9vZk9mU2VuZGVyIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiA2IDQgKi8KLSYobmlkX29ianNbMjU1XSksLyogT0JKX2lkX3NtaW1lX2N0aV9ldHNfcHJvb2ZPZkFwcHJvdmFsIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiA2IDUgKi8KLSYobmlkX29ianNbMjU2XSksLyogT0JKX2lkX3NtaW1lX2N0aV9ldHNfcHJvb2ZPZkNyZWF0aW9uIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiA2IDYgKi8KLSYobmlkX29ianNbMTUwXSksLyogT0JKX2tleUJhZyAgICAgICAgICAgICAgICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMSAxMiAxMCAxIDEgKi8KLSYobmlkX29ianNbMTUxXSksLyogT0JKX3BrY3M4U2hyb3VkZWRLZXlCYWcgICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMSAxMiAxMCAxIDIgKi8KLSYobmlkX29ianNbMTUyXSksLyogT0JKX2NlcnRCYWcgICAgICAgICAgICAgICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMSAxMiAxMCAxIDMgKi8KLSYobmlkX29ianNbMTUzXSksLyogT0JKX2NybEJhZyAgICAgICAgICAgICAgICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMSAxMiAxMCAxIDQgKi8KLSYobmlkX29ianNbMTU0XSksLyogT0JKX3NlY3JldEJhZyAgICAgICAgICAgICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMSAxMiAxMCAxIDUgKi8KLSYobmlkX29ianNbMTU1XSksLyogT0JKX3NhZmVDb250ZW50c0JhZyAgICAgICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMSAxMiAxMCAxIDYgKi8KLSYobmlkX29ianNbMzRdKSwvKiBPQkpfaWRlYV9jYmMgICAgICAgICAgICAgICAgICAgICAxIDMgNiAxIDQgMSAxODggNyAxIDEgMiAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBvYmpfb2Jqc1tOVU1fT0JKXT17CisgMCwJLyogT0JKX3VuZGVmICAgICAgICAgICAgICAgICAgICAgICAgMCAqLworMzkzLAkvKiBPQkpfam9pbnRfaXNvX2NjaXR0ICAgICAgICAgICAgICBPQkpfam9pbnRfaXNvX2l0dV90ICovCis0MDQsCS8qIE9CSl9jY2l0dCAgICAgICAgICAgICAgICAgICAgICAgIE9CSl9pdHVfdCAqLworNjQ1LAkvKiBPQkpfaXR1X3QgICAgICAgICAgICAgICAgICAgICAgICAwICovCis0MzQsCS8qIE9CSl9kYXRhICAgICAgICAgICAgICAgICAgICAgICAgIDAgOSAqLworMTgxLAkvKiBPQkpfaXNvICAgICAgICAgICAgICAgICAgICAgICAgICAxICovCisxODIsCS8qIE9CSl9tZW1iZXJfYm9keSAgICAgICAgICAgICAgICAgIDEgMiAqLworMzc5LAkvKiBPQkpfb3JnICAgICAgICAgICAgICAgICAgICAgICAgICAxIDMgKi8KKzY3NiwJLyogT0JKX2lkZW50aWZpZWRfb3JnYW5pemF0aW9uICAgICAgMSAzICovCis2NDYsCS8qIE9CSl9qb2ludF9pc29faXR1X3QgICAgICAgICAgICAgIDIgKi8KKzExLAkvKiBPQkpfWDUwMCAgICAgICAgICAgICAgICAgICAgICAgICAyIDUgKi8KKzY0NywJLyogT0JKX2ludGVybmF0aW9uYWxfb3JnYW5pemF0aW9ucyAgMiAyMyAqLworMzgwLAkvKiBPQkpfZG9kICAgICAgICAgICAgICAgICAgICAgICAgICAxIDMgNiAqLworMTIsCS8qIE9CSl9YNTA5ICAgICAgICAgICAgICAgICAgICAgICAgIDIgNSA0ICovCiszNzgsCS8qIE9CSl9YNTAwYWxnb3JpdGhtcyAgICAgICAgICAgICAgIDIgNSA4ICovCis4MSwJLyogT0JKX2lkX2NlICAgICAgICAgICAgICAgICAgICAgICAgMiA1IDI5ICovCis1MTIsCS8qIE9CSl9pZF9zZXQgICAgICAgICAgICAgICAgICAgICAgIDIgMjMgNDIgKi8KKzY3OCwJLyogT0JKX3dhcCAgICAgICAgICAgICAgICAgICAgICAgICAgMiAyMyA0MyAqLworNDM1LAkvKiBPQkpfcHNzICAgICAgICAgICAgICAgICAgICAgICAgICAwIDkgMjM0MiAqLworMTgzLAkvKiBPQkpfSVNPX1VTICAgICAgICAgICAgICAgICAgICAgICAxIDIgODQwICovCiszODEsCS8qIE9CSl9pYW5hICAgICAgICAgICAgICAgICAgICAgICAgIDEgMyA2IDEgKi8KKzY3NywJLyogT0JKX2NlcnRpY29tX2FyYyAgICAgICAgICAgICAgICAgMSAzIDEzMiAqLworMzk0LAkvKiBPQkpfc2VsZWN0ZWRfYXR0cmlidXRlX3R5cGVzICAgICAyIDUgMSA1ICovCisxMywJLyogT0JKX2NvbW1vbk5hbWUgICAgICAgICAgICAgICAgICAgMiA1IDQgMyAqLworMTAwLAkvKiBPQkpfc3VybmFtZSAgICAgICAgICAgICAgICAgICAgICAyIDUgNCA0ICovCisxMDUsCS8qIE9CSl9zZXJpYWxOdW1iZXIgICAgICAgICAgICAgICAgIDIgNSA0IDUgKi8KKzE0LAkvKiBPQkpfY291bnRyeU5hbWUgICAgICAgICAgICAgICAgICAyIDUgNCA2ICovCisxNSwJLyogT0JKX2xvY2FsaXR5TmFtZSAgICAgICAgICAgICAgICAgMiA1IDQgNyAqLworMTYsCS8qIE9CSl9zdGF0ZU9yUHJvdmluY2VOYW1lICAgICAgICAgIDIgNSA0IDggKi8KKzY2MCwJLyogT0JKX3N0cmVldEFkZHJlc3MgICAgICAgICAgICAgICAgMiA1IDQgOSAqLworMTcsCS8qIE9CSl9vcmdhbml6YXRpb25OYW1lICAgICAgICAgICAgIDIgNSA0IDEwICovCisxOCwJLyogT0JKX29yZ2FuaXphdGlvbmFsVW5pdE5hbWUgICAgICAgMiA1IDQgMTEgKi8KKzEwNiwJLyogT0JKX3RpdGxlICAgICAgICAgICAgICAgICAgICAgICAgMiA1IDQgMTIgKi8KKzEwNywJLyogT0JKX2Rlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgMiA1IDQgMTMgKi8KKzg1OSwJLyogT0JKX3NlYXJjaEd1aWRlICAgICAgICAgICAgICAgICAgMiA1IDQgMTQgKi8KKzg2MCwJLyogT0JKX2J1c2luZXNzQ2F0ZWdvcnkgICAgICAgICAgICAgMiA1IDQgMTUgKi8KKzg2MSwJLyogT0JKX3Bvc3RhbEFkZHJlc3MgICAgICAgICAgICAgICAgMiA1IDQgMTYgKi8KKzY2MSwJLyogT0JKX3Bvc3RhbENvZGUgICAgICAgICAgICAgICAgICAgMiA1IDQgMTcgKi8KKzg2MiwJLyogT0JKX3Bvc3RPZmZpY2VCb3ggICAgICAgICAgICAgICAgMiA1IDQgMTggKi8KKzg2MywJLyogT0JKX3BoeXNpY2FsRGVsaXZlcnlPZmZpY2VOYW1lICAgMiA1IDQgMTkgKi8KKzg2NCwJLyogT0JKX3RlbGVwaG9uZU51bWJlciAgICAgICAgICAgICAgMiA1IDQgMjAgKi8KKzg2NSwJLyogT0JKX3RlbGV4TnVtYmVyICAgICAgICAgICAgICAgICAgMiA1IDQgMjEgKi8KKzg2NiwJLyogT0JKX3RlbGV0ZXhUZXJtaW5hbElkZW50aWZpZXIgICAgMiA1IDQgMjIgKi8KKzg2NywJLyogT0JKX2ZhY3NpbWlsZVRlbGVwaG9uZU51bWJlciAgICAgMiA1IDQgMjMgKi8KKzg2OCwJLyogT0JKX3gxMjFBZGRyZXNzICAgICAgICAgICAgICAgICAgMiA1IDQgMjQgKi8KKzg2OSwJLyogT0JKX2ludGVybmF0aW9uYWxpU0ROTnVtYmVyICAgICAgMiA1IDQgMjUgKi8KKzg3MCwJLyogT0JKX3JlZ2lzdGVyZWRBZGRyZXNzICAgICAgICAgICAgMiA1IDQgMjYgKi8KKzg3MSwJLyogT0JKX2Rlc3RpbmF0aW9uSW5kaWNhdG9yICAgICAgICAgMiA1IDQgMjcgKi8KKzg3MiwJLyogT0JKX3ByZWZlcnJlZERlbGl2ZXJ5TWV0aG9kICAgICAgMiA1IDQgMjggKi8KKzg3MywJLyogT0JKX3ByZXNlbnRhdGlvbkFkZHJlc3MgICAgICAgICAgMiA1IDQgMjkgKi8KKzg3NCwJLyogT0JKX3N1cHBvcnRlZEFwcGxpY2F0aW9uQ29udGV4dCAgMiA1IDQgMzAgKi8KKzg3NSwJLyogT0JKX21lbWJlciAgICAgICAgICAgICAgICAgICAgICAgMiA1IDQgMzEgKi8KKzg3NiwJLyogT0JKX293bmVyICAgICAgICAgICAgICAgICAgICAgICAgMiA1IDQgMzIgKi8KKzg3NywJLyogT0JKX3JvbGVPY2N1cGFudCAgICAgICAgICAgICAgICAgMiA1IDQgMzMgKi8KKzg3OCwJLyogT0JKX3NlZUFsc28gICAgICAgICAgICAgICAgICAgICAgMiA1IDQgMzQgKi8KKzg3OSwJLyogT0JKX3VzZXJQYXNzd29yZCAgICAgICAgICAgICAgICAgMiA1IDQgMzUgKi8KKzg4MCwJLyogT0JKX3VzZXJDZXJ0aWZpY2F0ZSAgICAgICAgICAgICAgMiA1IDQgMzYgKi8KKzg4MSwJLyogT0JKX2NBQ2VydGlmaWNhdGUgICAgICAgICAgICAgICAgMiA1IDQgMzcgKi8KKzg4MiwJLyogT0JKX2F1dGhvcml0eVJldm9jYXRpb25MaXN0ICAgICAgMiA1IDQgMzggKi8KKzg4MywJLyogT0JKX2NlcnRpZmljYXRlUmV2b2NhdGlvbkxpc3QgICAgMiA1IDQgMzkgKi8KKzg4NCwJLyogT0JKX2Nyb3NzQ2VydGlmaWNhdGVQYWlyICAgICAgICAgMiA1IDQgNDAgKi8KKzE3MywJLyogT0JKX25hbWUgICAgICAgICAgICAgICAgICAgICAgICAgMiA1IDQgNDEgKi8KKzk5LAkvKiBPQkpfZ2l2ZW5OYW1lICAgICAgICAgICAgICAgICAgICAyIDUgNCA0MiAqLworMTAxLAkvKiBPQkpfaW5pdGlhbHMgICAgICAgICAgICAgICAgICAgICAyIDUgNCA0MyAqLworNTA5LAkvKiBPQkpfZ2VuZXJhdGlvblF1YWxpZmllciAgICAgICAgICAyIDUgNCA0NCAqLworNTAzLAkvKiBPQkpfeDUwMFVuaXF1ZUlkZW50aWZpZXIgICAgICAgICAyIDUgNCA0NSAqLworMTc0LAkvKiBPQkpfZG5RdWFsaWZpZXIgICAgICAgICAgICAgICAgICAyIDUgNCA0NiAqLworODg1LAkvKiBPQkpfZW5oYW5jZWRTZWFyY2hHdWlkZSAgICAgICAgICAyIDUgNCA0NyAqLworODg2LAkvKiBPQkpfcHJvdG9jb2xJbmZvcm1hdGlvbiAgICAgICAgICAyIDUgNCA0OCAqLworODg3LAkvKiBPQkpfZGlzdGluZ3Vpc2hlZE5hbWUgICAgICAgICAgICAyIDUgNCA0OSAqLworODg4LAkvKiBPQkpfdW5pcXVlTWVtYmVyICAgICAgICAgICAgICAgICAyIDUgNCA1MCAqLworODg5LAkvKiBPQkpfaG91c2VJZGVudGlmaWVyICAgICAgICAgICAgICAyIDUgNCA1MSAqLworODkwLAkvKiBPQkpfc3VwcG9ydGVkQWxnb3JpdGhtcyAgICAgICAgICAyIDUgNCA1MiAqLworODkxLAkvKiBPQkpfZGVsdGFSZXZvY2F0aW9uTGlzdCAgICAgICAgICAyIDUgNCA1MyAqLworODkyLAkvKiBPQkpfZG1kTmFtZSAgICAgICAgICAgICAgICAgICAgICAyIDUgNCA1NCAqLworNTEwLAkvKiBPQkpfcHNldWRvbnltICAgICAgICAgICAgICAgICAgICAyIDUgNCA2NSAqLworNDAwLAkvKiBPQkpfcm9sZSAgICAgICAgICAgICAgICAgICAgICAgICAyIDUgNCA3MiAqLworNzY5LAkvKiBPQkpfc3ViamVjdF9kaXJlY3RvcnlfYXR0cmlidXRlcyAyIDUgMjkgOSAqLworODIsCS8qIE9CSl9zdWJqZWN0X2tleV9pZGVudGlmaWVyICAgICAgIDIgNSAyOSAxNCAqLworODMsCS8qIE9CSl9rZXlfdXNhZ2UgICAgICAgICAgICAgICAgICAgIDIgNSAyOSAxNSAqLworODQsCS8qIE9CSl9wcml2YXRlX2tleV91c2FnZV9wZXJpb2QgICAgIDIgNSAyOSAxNiAqLworODUsCS8qIE9CSl9zdWJqZWN0X2FsdF9uYW1lICAgICAgICAgICAgIDIgNSAyOSAxNyAqLworODYsCS8qIE9CSl9pc3N1ZXJfYWx0X25hbWUgICAgICAgICAgICAgIDIgNSAyOSAxOCAqLworODcsCS8qIE9CSl9iYXNpY19jb25zdHJhaW50cyAgICAgICAgICAgIDIgNSAyOSAxOSAqLworODgsCS8qIE9CSl9jcmxfbnVtYmVyICAgICAgICAgICAgICAgICAgIDIgNSAyOSAyMCAqLworMTQxLAkvKiBPQkpfY3JsX3JlYXNvbiAgICAgICAgICAgICAgICAgICAyIDUgMjkgMjEgKi8KKzQzMCwJLyogT0JKX2hvbGRfaW5zdHJ1Y3Rpb25fY29kZSAgICAgICAgMiA1IDI5IDIzICovCisxNDIsCS8qIE9CSl9pbnZhbGlkaXR5X2RhdGUgICAgICAgICAgICAgIDIgNSAyOSAyNCAqLworMTQwLAkvKiBPQkpfZGVsdGFfY3JsICAgICAgICAgICAgICAgICAgICAyIDUgMjkgMjcgKi8KKzc3MCwJLyogT0JKX2lzc3VpbmdfZGlzdHJpYnV0aW9uX3BvaW50ICAgMiA1IDI5IDI4ICovCis3NzEsCS8qIE9CSl9jZXJ0aWZpY2F0ZV9pc3N1ZXIgICAgICAgICAgIDIgNSAyOSAyOSAqLworNjY2LAkvKiBPQkpfbmFtZV9jb25zdHJhaW50cyAgICAgICAgICAgICAyIDUgMjkgMzAgKi8KKzEwMywJLyogT0JKX2NybF9kaXN0cmlidXRpb25fcG9pbnRzICAgICAgMiA1IDI5IDMxICovCis4OSwJLyogT0JKX2NlcnRpZmljYXRlX3BvbGljaWVzICAgICAgICAgMiA1IDI5IDMyICovCis3NDcsCS8qIE9CSl9wb2xpY3lfbWFwcGluZ3MgICAgICAgICAgICAgIDIgNSAyOSAzMyAqLworOTAsCS8qIE9CSl9hdXRob3JpdHlfa2V5X2lkZW50aWZpZXIgICAgIDIgNSAyOSAzNSAqLworNDAxLAkvKiBPQkpfcG9saWN5X2NvbnN0cmFpbnRzICAgICAgICAgICAyIDUgMjkgMzYgKi8KKzEyNiwJLyogT0JKX2V4dF9rZXlfdXNhZ2UgICAgICAgICAgICAgICAgMiA1IDI5IDM3ICovCis4NTcsCS8qIE9CSl9mcmVzaGVzdF9jcmwgICAgICAgICAgICAgICAgIDIgNSAyOSA0NiAqLworNzQ4LAkvKiBPQkpfaW5oaWJpdF9hbnlfcG9saWN5ICAgICAgICAgICAyIDUgMjkgNTQgKi8KKzQwMiwJLyogT0JKX3RhcmdldF9pbmZvcm1hdGlvbiAgICAgICAgICAgMiA1IDI5IDU1ICovCis0MDMsCS8qIE9CSl9ub19yZXZfYXZhaWwgICAgICAgICAgICAgICAgIDIgNSAyOSA1NiAqLworNTEzLAkvKiBPQkpfc2V0X2N0eXBlICAgICAgICAgICAgICAgICAgICAyIDIzIDQyIDAgKi8KKzUxNCwJLyogT0JKX3NldF9tc2dFeHQgICAgICAgICAgICAgICAgICAgMiAyMyA0MiAxICovCis1MTUsCS8qIE9CSl9zZXRfYXR0ciAgICAgICAgICAgICAgICAgICAgIDIgMjMgNDIgMyAqLworNTE2LAkvKiBPQkpfc2V0X3BvbGljeSAgICAgICAgICAgICAgICAgICAyIDIzIDQyIDUgKi8KKzUxNywJLyogT0JKX3NldF9jZXJ0RXh0ICAgICAgICAgICAgICAgICAgMiAyMyA0MiA3ICovCis1MTgsCS8qIE9CSl9zZXRfYnJhbmQgICAgICAgICAgICAgICAgICAgIDIgMjMgNDIgOCAqLworNjc5LAkvKiBPQkpfd2FwX3dzZyAgICAgICAgICAgICAgICAgICAgICAyIDIzIDQzIDEgKi8KKzM4MiwJLyogT0JKX0RpcmVjdG9yeSAgICAgICAgICAgICAgICAgICAgMSAzIDYgMSAxICovCiszODMsCS8qIE9CSl9NYW5hZ2VtZW50ICAgICAgICAgICAgICAgICAgIDEgMyA2IDEgMiAqLworMzg0LAkvKiBPQkpfRXhwZXJpbWVudGFsICAgICAgICAgICAgICAgICAxIDMgNiAxIDMgKi8KKzM4NSwJLyogT0JKX1ByaXZhdGUgICAgICAgICAgICAgICAgICAgICAgMSAzIDYgMSA0ICovCiszODYsCS8qIE9CSl9TZWN1cml0eSAgICAgICAgICAgICAgICAgICAgIDEgMyA2IDEgNSAqLworMzg3LAkvKiBPQkpfU05NUHYyICAgICAgICAgICAgICAgICAgICAgICAxIDMgNiAxIDYgKi8KKzM4OCwJLyogT0JKX01haWwgICAgICAgICAgICAgICAgICAgICAgICAgMSAzIDYgMSA3ICovCiszNzYsCS8qIE9CSl9hbGdvcml0aG0gICAgICAgICAgICAgICAgICAgIDEgMyAxNCAzIDIgKi8KKzM5NSwJLyogT0JKX2NsZWFyYW5jZSAgICAgICAgICAgICAgICAgICAgMiA1IDEgNSA1NSAqLworMTksCS8qIE9CSl9yc2EgICAgICAgICAgICAgICAgICAgICAgICAgIDIgNSA4IDEgMSAqLworOTYsCS8qIE9CSl9tZGMyV2l0aFJTQSAgICAgICAgICAgICAgICAgIDIgNSA4IDMgMTAwICovCis5NSwJLyogT0JKX21kYzIgICAgICAgICAgICAgICAgICAgICAgICAgMiA1IDggMyAxMDEgKi8KKzc0NiwJLyogT0JKX2FueV9wb2xpY3kgICAgICAgICAgICAgICAgICAgMiA1IDI5IDMyIDAgKi8KKzUxOSwJLyogT0JKX3NldGN0X1BBTkRhdGEgICAgICAgICAgICAgICAgMiAyMyA0MiAwIDAgKi8KKzUyMCwJLyogT0JKX3NldGN0X1BBTlRva2VuICAgICAgICAgICAgICAgMiAyMyA0MiAwIDEgKi8KKzUyMSwJLyogT0JKX3NldGN0X1BBTk9ubHkgICAgICAgICAgICAgICAgMiAyMyA0MiAwIDIgKi8KKzUyMiwJLyogT0JKX3NldGN0X09JRGF0YSAgICAgICAgICAgICAgICAgMiAyMyA0MiAwIDMgKi8KKzUyMywJLyogT0JKX3NldGN0X1BJICAgICAgICAgICAgICAgICAgICAgMiAyMyA0MiAwIDQgKi8KKzUyNCwJLyogT0JKX3NldGN0X1BJRGF0YSAgICAgICAgICAgICAgICAgMiAyMyA0MiAwIDUgKi8KKzUyNSwJLyogT0JKX3NldGN0X1BJRGF0YVVuc2lnbmVkICAgICAgICAgMiAyMyA0MiAwIDYgKi8KKzUyNiwJLyogT0JKX3NldGN0X0hPRElucHV0ICAgICAgICAgICAgICAgMiAyMyA0MiAwIDcgKi8KKzUyNywJLyogT0JKX3NldGN0X0F1dGhSZXNCYWdnYWdlICAgICAgICAgMiAyMyA0MiAwIDggKi8KKzUyOCwJLyogT0JKX3NldGN0X0F1dGhSZXZSZXFCYWdnYWdlICAgICAgMiAyMyA0MiAwIDkgKi8KKzUyOSwJLyogT0JKX3NldGN0X0F1dGhSZXZSZXNCYWdnYWdlICAgICAgMiAyMyA0MiAwIDEwICovCis1MzAsCS8qIE9CSl9zZXRjdF9DYXBUb2tlblNlcSAgICAgICAgICAgIDIgMjMgNDIgMCAxMSAqLworNTMxLAkvKiBPQkpfc2V0Y3RfUEluaXRSZXNEYXRhICAgICAgICAgICAyIDIzIDQyIDAgMTIgKi8KKzUzMiwJLyogT0JKX3NldGN0X1BJX1RCUyAgICAgICAgICAgICAgICAgMiAyMyA0MiAwIDEzICovCis1MzMsCS8qIE9CSl9zZXRjdF9QUmVzRGF0YSAgICAgICAgICAgICAgIDIgMjMgNDIgMCAxNCAqLworNTM0LAkvKiBPQkpfc2V0Y3RfQXV0aFJlcVRCUyAgICAgICAgICAgICAyIDIzIDQyIDAgMTYgKi8KKzUzNSwJLyogT0JKX3NldGN0X0F1dGhSZXNUQlMgICAgICAgICAgICAgMiAyMyA0MiAwIDE3ICovCis1MzYsCS8qIE9CSl9zZXRjdF9BdXRoUmVzVEJTWCAgICAgICAgICAgIDIgMjMgNDIgMCAxOCAqLworNTM3LAkvKiBPQkpfc2V0Y3RfQXV0aFRva2VuVEJTICAgICAgICAgICAyIDIzIDQyIDAgMTkgKi8KKzUzOCwJLyogT0JKX3NldGN0X0NhcFRva2VuRGF0YSAgICAgICAgICAgMiAyMyA0MiAwIDIwICovCis1MzksCS8qIE9CSl9zZXRjdF9DYXBUb2tlblRCUyAgICAgICAgICAgIDIgMjMgNDIgMCAyMSAqLworNTQwLAkvKiBPQkpfc2V0Y3RfQWNxQ2FyZENvZGVNc2cgICAgICAgICAyIDIzIDQyIDAgMjIgKi8KKzU0MSwJLyogT0JKX3NldGN0X0F1dGhSZXZSZXFUQlMgICAgICAgICAgMiAyMyA0MiAwIDIzICovCis1NDIsCS8qIE9CSl9zZXRjdF9BdXRoUmV2UmVzRGF0YSAgICAgICAgIDIgMjMgNDIgMCAyNCAqLworNTQzLAkvKiBPQkpfc2V0Y3RfQXV0aFJldlJlc1RCUyAgICAgICAgICAyIDIzIDQyIDAgMjUgKi8KKzU0NCwJLyogT0JKX3NldGN0X0NhcFJlcVRCUyAgICAgICAgICAgICAgMiAyMyA0MiAwIDI2ICovCis1NDUsCS8qIE9CSl9zZXRjdF9DYXBSZXFUQlNYICAgICAgICAgICAgIDIgMjMgNDIgMCAyNyAqLworNTQ2LAkvKiBPQkpfc2V0Y3RfQ2FwUmVzRGF0YSAgICAgICAgICAgICAyIDIzIDQyIDAgMjggKi8KKzU0NywJLyogT0JKX3NldGN0X0NhcFJldlJlcVRCUyAgICAgICAgICAgMiAyMyA0MiAwIDI5ICovCis1NDgsCS8qIE9CSl9zZXRjdF9DYXBSZXZSZXFUQlNYICAgICAgICAgIDIgMjMgNDIgMCAzMCAqLworNTQ5LAkvKiBPQkpfc2V0Y3RfQ2FwUmV2UmVzRGF0YSAgICAgICAgICAyIDIzIDQyIDAgMzEgKi8KKzU1MCwJLyogT0JKX3NldGN0X0NyZWRSZXFUQlMgICAgICAgICAgICAgMiAyMyA0MiAwIDMyICovCis1NTEsCS8qIE9CSl9zZXRjdF9DcmVkUmVxVEJTWCAgICAgICAgICAgIDIgMjMgNDIgMCAzMyAqLworNTUyLAkvKiBPQkpfc2V0Y3RfQ3JlZFJlc0RhdGEgICAgICAgICAgICAyIDIzIDQyIDAgMzQgKi8KKzU1MywJLyogT0JKX3NldGN0X0NyZWRSZXZSZXFUQlMgICAgICAgICAgMiAyMyA0MiAwIDM1ICovCis1NTQsCS8qIE9CSl9zZXRjdF9DcmVkUmV2UmVxVEJTWCAgICAgICAgIDIgMjMgNDIgMCAzNiAqLworNTU1LAkvKiBPQkpfc2V0Y3RfQ3JlZFJldlJlc0RhdGEgICAgICAgICAyIDIzIDQyIDAgMzcgKi8KKzU1NiwJLyogT0JKX3NldGN0X1BDZXJ0UmVxRGF0YSAgICAgICAgICAgMiAyMyA0MiAwIDM4ICovCis1NTcsCS8qIE9CSl9zZXRjdF9QQ2VydFJlc1RCUyAgICAgICAgICAgIDIgMjMgNDIgMCAzOSAqLworNTU4LAkvKiBPQkpfc2V0Y3RfQmF0Y2hBZG1pblJlcURhdGEgICAgICAyIDIzIDQyIDAgNDAgKi8KKzU1OSwJLyogT0JKX3NldGN0X0JhdGNoQWRtaW5SZXNEYXRhICAgICAgMiAyMyA0MiAwIDQxICovCis1NjAsCS8qIE9CSl9zZXRjdF9DYXJkQ0luaXRSZXNUQlMgICAgICAgIDIgMjMgNDIgMCA0MiAqLworNTYxLAkvKiBPQkpfc2V0Y3RfTWVBcUNJbml0UmVzVEJTICAgICAgICAyIDIzIDQyIDAgNDMgKi8KKzU2MiwJLyogT0JKX3NldGN0X1JlZ0Zvcm1SZXNUQlMgICAgICAgICAgMiAyMyA0MiAwIDQ0ICovCis1NjMsCS8qIE9CSl9zZXRjdF9DZXJ0UmVxRGF0YSAgICAgICAgICAgIDIgMjMgNDIgMCA0NSAqLworNTY0LAkvKiBPQkpfc2V0Y3RfQ2VydFJlcVRCUyAgICAgICAgICAgICAyIDIzIDQyIDAgNDYgKi8KKzU2NSwJLyogT0JKX3NldGN0X0NlcnRSZXNEYXRhICAgICAgICAgICAgMiAyMyA0MiAwIDQ3ICovCis1NjYsCS8qIE9CSl9zZXRjdF9DZXJ0SW5xUmVxVEJTICAgICAgICAgIDIgMjMgNDIgMCA0OCAqLworNTY3LAkvKiBPQkpfc2V0Y3RfRXJyb3JUQlMgICAgICAgICAgICAgICAyIDIzIDQyIDAgNDkgKi8KKzU2OCwJLyogT0JKX3NldGN0X1BJRHVhbFNpZ25lZFRCRSAgICAgICAgMiAyMyA0MiAwIDUwICovCis1NjksCS8qIE9CSl9zZXRjdF9QSVVuc2lnbmVkVEJFICAgICAgICAgIDIgMjMgNDIgMCA1MSAqLworNTcwLAkvKiBPQkpfc2V0Y3RfQXV0aFJlcVRCRSAgICAgICAgICAgICAyIDIzIDQyIDAgNTIgKi8KKzU3MSwJLyogT0JKX3NldGN0X0F1dGhSZXNUQkUgICAgICAgICAgICAgMiAyMyA0MiAwIDUzICovCis1NzIsCS8qIE9CSl9zZXRjdF9BdXRoUmVzVEJFWCAgICAgICAgICAgIDIgMjMgNDIgMCA1NCAqLworNTczLAkvKiBPQkpfc2V0Y3RfQXV0aFRva2VuVEJFICAgICAgICAgICAyIDIzIDQyIDAgNTUgKi8KKzU3NCwJLyogT0JKX3NldGN0X0NhcFRva2VuVEJFICAgICAgICAgICAgMiAyMyA0MiAwIDU2ICovCis1NzUsCS8qIE9CSl9zZXRjdF9DYXBUb2tlblRCRVggICAgICAgICAgIDIgMjMgNDIgMCA1NyAqLworNTc2LAkvKiBPQkpfc2V0Y3RfQWNxQ2FyZENvZGVNc2dUQkUgICAgICAyIDIzIDQyIDAgNTggKi8KKzU3NywJLyogT0JKX3NldGN0X0F1dGhSZXZSZXFUQkUgICAgICAgICAgMiAyMyA0MiAwIDU5ICovCis1NzgsCS8qIE9CSl9zZXRjdF9BdXRoUmV2UmVzVEJFICAgICAgICAgIDIgMjMgNDIgMCA2MCAqLworNTc5LAkvKiBPQkpfc2V0Y3RfQXV0aFJldlJlc1RCRUIgICAgICAgICAyIDIzIDQyIDAgNjEgKi8KKzU4MCwJLyogT0JKX3NldGN0X0NhcFJlcVRCRSAgICAgICAgICAgICAgMiAyMyA0MiAwIDYyICovCis1ODEsCS8qIE9CSl9zZXRjdF9DYXBSZXFUQkVYICAgICAgICAgICAgIDIgMjMgNDIgMCA2MyAqLworNTgyLAkvKiBPQkpfc2V0Y3RfQ2FwUmVzVEJFICAgICAgICAgICAgICAyIDIzIDQyIDAgNjQgKi8KKzU4MywJLyogT0JKX3NldGN0X0NhcFJldlJlcVRCRSAgICAgICAgICAgMiAyMyA0MiAwIDY1ICovCis1ODQsCS8qIE9CSl9zZXRjdF9DYXBSZXZSZXFUQkVYICAgICAgICAgIDIgMjMgNDIgMCA2NiAqLworNTg1LAkvKiBPQkpfc2V0Y3RfQ2FwUmV2UmVzVEJFICAgICAgICAgICAyIDIzIDQyIDAgNjcgKi8KKzU4NiwJLyogT0JKX3NldGN0X0NyZWRSZXFUQkUgICAgICAgICAgICAgMiAyMyA0MiAwIDY4ICovCis1ODcsCS8qIE9CSl9zZXRjdF9DcmVkUmVxVEJFWCAgICAgICAgICAgIDIgMjMgNDIgMCA2OSAqLworNTg4LAkvKiBPQkpfc2V0Y3RfQ3JlZFJlc1RCRSAgICAgICAgICAgICAyIDIzIDQyIDAgNzAgKi8KKzU4OSwJLyogT0JKX3NldGN0X0NyZWRSZXZSZXFUQkUgICAgICAgICAgMiAyMyA0MiAwIDcxICovCis1OTAsCS8qIE9CSl9zZXRjdF9DcmVkUmV2UmVxVEJFWCAgICAgICAgIDIgMjMgNDIgMCA3MiAqLworNTkxLAkvKiBPQkpfc2V0Y3RfQ3JlZFJldlJlc1RCRSAgICAgICAgICAyIDIzIDQyIDAgNzMgKi8KKzU5MiwJLyogT0JKX3NldGN0X0JhdGNoQWRtaW5SZXFUQkUgICAgICAgMiAyMyA0MiAwIDc0ICovCis1OTMsCS8qIE9CSl9zZXRjdF9CYXRjaEFkbWluUmVzVEJFICAgICAgIDIgMjMgNDIgMCA3NSAqLworNTk0LAkvKiBPQkpfc2V0Y3RfUmVnRm9ybVJlcVRCRSAgICAgICAgICAyIDIzIDQyIDAgNzYgKi8KKzU5NSwJLyogT0JKX3NldGN0X0NlcnRSZXFUQkUgICAgICAgICAgICAgMiAyMyA0MiAwIDc3ICovCis1OTYsCS8qIE9CSl9zZXRjdF9DZXJ0UmVxVEJFWCAgICAgICAgICAgIDIgMjMgNDIgMCA3OCAqLworNTk3LAkvKiBPQkpfc2V0Y3RfQ2VydFJlc1RCRSAgICAgICAgICAgICAyIDIzIDQyIDAgNzkgKi8KKzU5OCwJLyogT0JKX3NldGN0X0NSTE5vdGlmaWNhdGlvblRCUyAgICAgMiAyMyA0MiAwIDgwICovCis1OTksCS8qIE9CSl9zZXRjdF9DUkxOb3RpZmljYXRpb25SZXNUQlMgIDIgMjMgNDIgMCA4MSAqLworNjAwLAkvKiBPQkpfc2V0Y3RfQkNJRGlzdHJpYnV0aW9uVEJTICAgICAyIDIzIDQyIDAgODIgKi8KKzYwMSwJLyogT0JKX3NldGV4dF9nZW5DcnlwdCAgICAgICAgICAgICAgMiAyMyA0MiAxIDEgKi8KKzYwMiwJLyogT0JKX3NldGV4dF9taUF1dGggICAgICAgICAgICAgICAgMiAyMyA0MiAxIDMgKi8KKzYwMywJLyogT0JKX3NldGV4dF9waW5TZWN1cmUgICAgICAgICAgICAgMiAyMyA0MiAxIDQgKi8KKzYwNCwJLyogT0JKX3NldGV4dF9waW5BbnkgICAgICAgICAgICAgICAgMiAyMyA0MiAxIDUgKi8KKzYwNSwJLyogT0JKX3NldGV4dF90cmFjazIgICAgICAgICAgICAgICAgMiAyMyA0MiAxIDcgKi8KKzYwNiwJLyogT0JKX3NldGV4dF9jdiAgICAgICAgICAgICAgICAgICAgMiAyMyA0MiAxIDggKi8KKzYyMCwJLyogT0JKX3NldEF0dHJfQ2VydCAgICAgICAgICAgICAgICAgMiAyMyA0MiAzIDAgKi8KKzYyMSwJLyogT0JKX3NldEF0dHJfUEdXWWNhcCAgICAgICAgICAgICAgMiAyMyA0MiAzIDEgKi8KKzYyMiwJLyogT0JKX3NldEF0dHJfVG9rZW5UeXBlICAgICAgICAgICAgMiAyMyA0MiAzIDIgKi8KKzYyMywJLyogT0JKX3NldEF0dHJfSXNzQ2FwICAgICAgICAgICAgICAgMiAyMyA0MiAzIDMgKi8KKzYwNywJLyogT0JKX3NldF9wb2xpY3lfcm9vdCAgICAgICAgICAgICAgMiAyMyA0MiA1IDAgKi8KKzYwOCwJLyogT0JKX3NldENleHRfaGFzaGVkUm9vdCAgICAgICAgICAgMiAyMyA0MiA3IDAgKi8KKzYwOSwJLyogT0JKX3NldENleHRfY2VydFR5cGUgICAgICAgICAgICAgMiAyMyA0MiA3IDEgKi8KKzYxMCwJLyogT0JKX3NldENleHRfbWVyY2hEYXRhICAgICAgICAgICAgMiAyMyA0MiA3IDIgKi8KKzYxMSwJLyogT0JKX3NldENleHRfY0NlcnRSZXF1aXJlZCAgICAgICAgMiAyMyA0MiA3IDMgKi8KKzYxMiwJLyogT0JKX3NldENleHRfdHVubmVsaW5nICAgICAgICAgICAgMiAyMyA0MiA3IDQgKi8KKzYxMywJLyogT0JKX3NldENleHRfc2V0RXh0ICAgICAgICAgICAgICAgMiAyMyA0MiA3IDUgKi8KKzYxNCwJLyogT0JKX3NldENleHRfc2V0UXVhbGYgICAgICAgICAgICAgMiAyMyA0MiA3IDYgKi8KKzYxNSwJLyogT0JKX3NldENleHRfUEdXWWNhcGFiaWxpdGllcyAgICAgMiAyMyA0MiA3IDcgKi8KKzYxNiwJLyogT0JKX3NldENleHRfVG9rZW5JZGVudGlmaWVyICAgICAgMiAyMyA0MiA3IDggKi8KKzYxNywJLyogT0JKX3NldENleHRfVHJhY2syRGF0YSAgICAgICAgICAgMiAyMyA0MiA3IDkgKi8KKzYxOCwJLyogT0JKX3NldENleHRfVG9rZW5UeXBlICAgICAgICAgICAgMiAyMyA0MiA3IDEwICovCis2MTksCS8qIE9CSl9zZXRDZXh0X0lzc3VlckNhcGFiaWxpdGllcyAgIDIgMjMgNDIgNyAxMSAqLworNjM2LAkvKiBPQkpfc2V0X2JyYW5kX0lBVEFfQVRBICAgICAgICAgICAyIDIzIDQyIDggMSAqLworNjQwLAkvKiBPQkpfc2V0X2JyYW5kX1Zpc2EgICAgICAgICAgICAgICAyIDIzIDQyIDggNCAqLworNjQxLAkvKiBPQkpfc2V0X2JyYW5kX01hc3RlckNhcmQgICAgICAgICAyIDIzIDQyIDggNSAqLworNjM3LAkvKiBPQkpfc2V0X2JyYW5kX0RpbmVycyAgICAgICAgICAgICAyIDIzIDQyIDggMzAgKi8KKzYzOCwJLyogT0JKX3NldF9icmFuZF9BbWVyaWNhbkV4cHJlc3MgICAgMiAyMyA0MiA4IDM0ICovCis2MzksCS8qIE9CSl9zZXRfYnJhbmRfSkNCICAgICAgICAgICAgICAgIDIgMjMgNDIgOCAzNSAqLworODA1LAkvKiBPQkpfY3J5cHRvcHJvICAgICAgICAgICAgICAgICAgICAxIDIgNjQzIDIgMiAqLworODA2LAkvKiBPQkpfY3J5cHRvY29tICAgICAgICAgICAgICAgICAgICAxIDIgNjQzIDIgOSAqLworMTg0LAkvKiBPQkpfWDlfNTcgICAgICAgICAgICAgICAgICAgICAgICAxIDIgODQwIDEwMDQwICovCis0MDUsCS8qIE9CSl9hbnNpX1g5XzYyICAgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTAwNDUgKi8KKzM4OSwJLyogT0JKX0VudGVycHJpc2VzICAgICAgICAgICAgICAgICAgMSAzIDYgMSA0IDEgKi8KKzUwNCwJLyogT0JKX21pbWVfbWhzICAgICAgICAgICAgICAgICAgICAgMSAzIDYgMSA3IDEgKi8KKzEwNCwJLyogT0JKX21kNVdpdGhSU0EgICAgICAgICAgICAgICAgICAgMSAzIDE0IDMgMiAzICovCisyOSwJLyogT0JKX2Rlc19lY2IgICAgICAgICAgICAgICAgICAgICAgMSAzIDE0IDMgMiA2ICovCiszMSwJLyogT0JKX2Rlc19jYmMgICAgICAgICAgICAgICAgICAgICAgMSAzIDE0IDMgMiA3ICovCis0NSwJLyogT0JKX2Rlc19vZmI2NCAgICAgICAgICAgICAgICAgICAgMSAzIDE0IDMgMiA4ICovCiszMCwJLyogT0JKX2Rlc19jZmI2NCAgICAgICAgICAgICAgICAgICAgMSAzIDE0IDMgMiA5ICovCiszNzcsCS8qIE9CSl9yc2FTaWduYXR1cmUgICAgICAgICAgICAgICAgIDEgMyAxNCAzIDIgMTEgKi8KKzY3LAkvKiBPQkpfZHNhXzIgICAgICAgICAgICAgICAgICAgICAgICAxIDMgMTQgMyAyIDEyICovCis2NiwJLyogT0JKX2RzYVdpdGhTSEEgICAgICAgICAgICAgICAgICAgMSAzIDE0IDMgMiAxMyAqLworNDIsCS8qIE9CSl9zaGFXaXRoUlNBRW5jcnlwdGlvbiAgICAgICAgIDEgMyAxNCAzIDIgMTUgKi8KKzMyLAkvKiBPQkpfZGVzX2VkZV9lY2IgICAgICAgICAgICAgICAgICAxIDMgMTQgMyAyIDE3ICovCis0MSwJLyogT0JKX3NoYSAgICAgICAgICAgICAgICAgICAgICAgICAgMSAzIDE0IDMgMiAxOCAqLworNjQsCS8qIE9CSl9zaGExICAgICAgICAgICAgICAgICAgICAgICAgIDEgMyAxNCAzIDIgMjYgKi8KKzcwLAkvKiBPQkpfZHNhV2l0aFNIQTFfMiAgICAgICAgICAgICAgICAxIDMgMTQgMyAyIDI3ICovCisxMTUsCS8qIE9CSl9zaGExV2l0aFJTQSAgICAgICAgICAgICAgICAgIDEgMyAxNCAzIDIgMjkgKi8KKzExNywJLyogT0JKX3JpcGVtZDE2MCAgICAgICAgICAgICAgICAgICAgMSAzIDM2IDMgMiAxICovCisxNDMsCS8qIE9CSl9zeG5ldCAgICAgICAgICAgICAgICAgICAgICAgIDEgMyAxMDEgMSA0IDEgKi8KKzcyMSwJLyogT0JKX3NlY3QxNjNrMSAgICAgICAgICAgICAgICAgICAgMSAzIDEzMiAwIDEgKi8KKzcyMiwJLyogT0JKX3NlY3QxNjNyMSAgICAgICAgICAgICAgICAgICAgMSAzIDEzMiAwIDIgKi8KKzcyOCwJLyogT0JKX3NlY3QyMzlrMSAgICAgICAgICAgICAgICAgICAgMSAzIDEzMiAwIDMgKi8KKzcxNywJLyogT0JKX3NlY3QxMTNyMSAgICAgICAgICAgICAgICAgICAgMSAzIDEzMiAwIDQgKi8KKzcxOCwJLyogT0JKX3NlY3QxMTNyMiAgICAgICAgICAgICAgICAgICAgMSAzIDEzMiAwIDUgKi8KKzcwNCwJLyogT0JKX3NlY3AxMTJyMSAgICAgICAgICAgICAgICAgICAgMSAzIDEzMiAwIDYgKi8KKzcwNSwJLyogT0JKX3NlY3AxMTJyMiAgICAgICAgICAgICAgICAgICAgMSAzIDEzMiAwIDcgKi8KKzcwOSwJLyogT0JKX3NlY3AxNjByMSAgICAgICAgICAgICAgICAgICAgMSAzIDEzMiAwIDggKi8KKzcwOCwJLyogT0JKX3NlY3AxNjBrMSAgICAgICAgICAgICAgICAgICAgMSAzIDEzMiAwIDkgKi8KKzcxNCwJLyogT0JKX3NlY3AyNTZrMSAgICAgICAgICAgICAgICAgICAgMSAzIDEzMiAwIDEwICovCis3MjMsCS8qIE9CSl9zZWN0MTYzcjIgICAgICAgICAgICAgICAgICAgIDEgMyAxMzIgMCAxNSAqLworNzI5LAkvKiBPQkpfc2VjdDI4M2sxICAgICAgICAgICAgICAgICAgICAxIDMgMTMyIDAgMTYgKi8KKzczMCwJLyogT0JKX3NlY3QyODNyMSAgICAgICAgICAgICAgICAgICAgMSAzIDEzMiAwIDE3ICovCis3MTksCS8qIE9CSl9zZWN0MTMxcjEgICAgICAgICAgICAgICAgICAgIDEgMyAxMzIgMCAyMiAqLworNzIwLAkvKiBPQkpfc2VjdDEzMXIyICAgICAgICAgICAgICAgICAgICAxIDMgMTMyIDAgMjMgKi8KKzcyNCwJLyogT0JKX3NlY3QxOTNyMSAgICAgICAgICAgICAgICAgICAgMSAzIDEzMiAwIDI0ICovCis3MjUsCS8qIE9CSl9zZWN0MTkzcjIgICAgICAgICAgICAgICAgICAgIDEgMyAxMzIgMCAyNSAqLworNzI2LAkvKiBPQkpfc2VjdDIzM2sxICAgICAgICAgICAgICAgICAgICAxIDMgMTMyIDAgMjYgKi8KKzcyNywJLyogT0JKX3NlY3QyMzNyMSAgICAgICAgICAgICAgICAgICAgMSAzIDEzMiAwIDI3ICovCis3MDYsCS8qIE9CSl9zZWNwMTI4cjEgICAgICAgICAgICAgICAgICAgIDEgMyAxMzIgMCAyOCAqLworNzA3LAkvKiBPQkpfc2VjcDEyOHIyICAgICAgICAgICAgICAgICAgICAxIDMgMTMyIDAgMjkgKi8KKzcxMCwJLyogT0JKX3NlY3AxNjByMiAgICAgICAgICAgICAgICAgICAgMSAzIDEzMiAwIDMwICovCis3MTEsCS8qIE9CSl9zZWNwMTkyazEgICAgICAgICAgICAgICAgICAgIDEgMyAxMzIgMCAzMSAqLworNzEyLAkvKiBPQkpfc2VjcDIyNGsxICAgICAgICAgICAgICAgICAgICAxIDMgMTMyIDAgMzIgKi8KKzcxMywJLyogT0JKX3NlY3AyMjRyMSAgICAgICAgICAgICAgICAgICAgMSAzIDEzMiAwIDMzICovCis3MTUsCS8qIE9CSl9zZWNwMzg0cjEgICAgICAgICAgICAgICAgICAgIDEgMyAxMzIgMCAzNCAqLworNzE2LAkvKiBPQkpfc2VjcDUyMXIxICAgICAgICAgICAgICAgICAgICAxIDMgMTMyIDAgMzUgKi8KKzczMSwJLyogT0JKX3NlY3Q0MDlrMSAgICAgICAgICAgICAgICAgICAgMSAzIDEzMiAwIDM2ICovCis3MzIsCS8qIE9CSl9zZWN0NDA5cjEgICAgICAgICAgICAgICAgICAgIDEgMyAxMzIgMCAzNyAqLworNzMzLAkvKiBPQkpfc2VjdDU3MWsxICAgICAgICAgICAgICAgICAgICAxIDMgMTMyIDAgMzggKi8KKzczNCwJLyogT0JKX3NlY3Q1NzFyMSAgICAgICAgICAgICAgICAgICAgMSAzIDEzMiAwIDM5ICovCis2MjQsCS8qIE9CSl9zZXRfcm9vdEtleVRodW1iICAgICAgICAgICAgIDIgMjMgNDIgMyAwIDAgKi8KKzYyNSwJLyogT0JKX3NldF9hZGRQb2xpY3kgICAgICAgICAgICAgICAgMiAyMyA0MiAzIDAgMSAqLworNjI2LAkvKiBPQkpfc2V0QXR0cl9Ub2tlbl9FTVYgICAgICAgICAgICAyIDIzIDQyIDMgMiAxICovCis2MjcsCS8qIE9CSl9zZXRBdHRyX1Rva2VuX0IwUHJpbWUgICAgICAgIDIgMjMgNDIgMyAyIDIgKi8KKzYyOCwJLyogT0JKX3NldEF0dHJfSXNzQ2FwX0NWTSAgICAgICAgICAgMiAyMyA0MiAzIDMgMyAqLworNjI5LAkvKiBPQkpfc2V0QXR0cl9Jc3NDYXBfVDIgICAgICAgICAgICAyIDIzIDQyIDMgMyA0ICovCis2MzAsCS8qIE9CSl9zZXRBdHRyX0lzc0NhcF9TaWcgICAgICAgICAgIDIgMjMgNDIgMyAzIDUgKi8KKzY0MiwJLyogT0JKX3NldF9icmFuZF9Ob3Z1cyAgICAgICAgICAgICAgMiAyMyA0MiA4IDYwMTEgKi8KKzczNSwJLyogT0JKX3dhcF93c2dfaWRtX2VjaWRfd3RsczEgICAgICAgMiAyMyA0MyAxIDQgMSAqLworNzM2LAkvKiBPQkpfd2FwX3dzZ19pZG1fZWNpZF93dGxzMyAgICAgICAyIDIzIDQzIDEgNCAzICovCis3MzcsCS8qIE9CSl93YXBfd3NnX2lkbV9lY2lkX3d0bHM0ICAgICAgIDIgMjMgNDMgMSA0IDQgKi8KKzczOCwJLyogT0JKX3dhcF93c2dfaWRtX2VjaWRfd3RsczUgICAgICAgMiAyMyA0MyAxIDQgNSAqLworNzM5LAkvKiBPQkpfd2FwX3dzZ19pZG1fZWNpZF93dGxzNiAgICAgICAyIDIzIDQzIDEgNCA2ICovCis3NDAsCS8qIE9CSl93YXBfd3NnX2lkbV9lY2lkX3d0bHM3ICAgICAgIDIgMjMgNDMgMSA0IDcgKi8KKzc0MSwJLyogT0JKX3dhcF93c2dfaWRtX2VjaWRfd3RsczggICAgICAgMiAyMyA0MyAxIDQgOCAqLworNzQyLAkvKiBPQkpfd2FwX3dzZ19pZG1fZWNpZF93dGxzOSAgICAgICAyIDIzIDQzIDEgNCA5ICovCis3NDMsCS8qIE9CSl93YXBfd3NnX2lkbV9lY2lkX3d0bHMxMCAgICAgIDIgMjMgNDMgMSA0IDEwICovCis3NDQsCS8qIE9CSl93YXBfd3NnX2lkbV9lY2lkX3d0bHMxMSAgICAgIDIgMjMgNDMgMSA0IDExICovCis3NDUsCS8qIE9CSl93YXBfd3NnX2lkbV9lY2lkX3d0bHMxMiAgICAgIDIgMjMgNDMgMSA0IDEyICovCis4MDQsCS8qIE9CSl93aGlybHBvb2wgICAgICAgICAgICAgICAgICAgIDEgMCAxMDExOCAzIDAgNTUgKi8KKzEyNCwJLyogT0JKX3JsZV9jb21wcmVzc2lvbiAgICAgICAgICAgICAgMSAxIDEgMSA2NjYgMSAqLworNzczLAkvKiBPQkpfa2lzYSAgICAgICAgICAgICAgICAgICAgICAgICAxIDIgNDEwIDIwMDAwNCAqLworODA3LAkvKiBPQkpfaWRfR29zdFIzNDExXzk0X3dpdGhfR29zdFIzNDEwXzIwMDEgMSAyIDY0MyAyIDIgMyAqLworODA4LAkvKiBPQkpfaWRfR29zdFIzNDExXzk0X3dpdGhfR29zdFIzNDEwXzk0IDEgMiA2NDMgMiAyIDQgKi8KKzgwOSwJLyogT0JKX2lkX0dvc3RSMzQxMV85NCAgICAgICAgICAgICAgMSAyIDY0MyAyIDIgOSAqLworODEwLAkvKiBPQkpfaWRfSE1BQ0dvc3RSMzQxMV85NCAgICAgICAgICAxIDIgNjQzIDIgMiAxMCAqLworODExLAkvKiBPQkpfaWRfR29zdFIzNDEwXzIwMDEgICAgICAgICAgICAxIDIgNjQzIDIgMiAxOSAqLworODEyLAkvKiBPQkpfaWRfR29zdFIzNDEwXzk0ICAgICAgICAgICAgICAxIDIgNjQzIDIgMiAyMCAqLworODEzLAkvKiBPQkpfaWRfR29zdDI4MTQ3Xzg5ICAgICAgICAgICAgICAxIDIgNjQzIDIgMiAyMSAqLworODE1LAkvKiBPQkpfaWRfR29zdDI4MTQ3Xzg5X01BQyAgICAgICAgICAxIDIgNjQzIDIgMiAyMiAqLworODE2LAkvKiBPQkpfaWRfR29zdFIzNDExXzk0X3ByZiAgICAgICAgICAxIDIgNjQzIDIgMiAyMyAqLworODE3LAkvKiBPQkpfaWRfR29zdFIzNDEwXzIwMDFESCAgICAgICAgICAxIDIgNjQzIDIgMiA5OCAqLworODE4LAkvKiBPQkpfaWRfR29zdFIzNDEwXzk0REggICAgICAgICAgICAxIDIgNjQzIDIgMiA5OSAqLworIDEsCS8qIE9CSl9yc2Fkc2kgICAgICAgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5ICovCisxODUsCS8qIE9CSl9YOWNtICAgICAgICAgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTAwNDAgNCAqLworMTI3LAkvKiBPQkpfaWRfcGtpeCAgICAgICAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3ICovCis1MDUsCS8qIE9CSl9taW1lX21oc19oZWFkaW5ncyAgICAgICAgICAgIDEgMyA2IDEgNyAxIDEgKi8KKzUwNiwJLyogT0JKX21pbWVfbWhzX2JvZGllcyAgICAgICAgICAgICAgMSAzIDYgMSA3IDEgMiAqLworMTE5LAkvKiBPQkpfcmlwZW1kMTYwV2l0aFJTQSAgICAgICAgICAgICAxIDMgMzYgMyAzIDEgMiAqLworNjMxLAkvKiBPQkpfc2V0QXR0cl9HZW5DcnlwdGdybSAgICAgICAgICAyIDIzIDQyIDMgMyAzIDEgKi8KKzYzMiwJLyogT0JKX3NldEF0dHJfVDJFbmMgICAgICAgICAgICAgICAgMiAyMyA0MiAzIDMgNCAxICovCis2MzMsCS8qIE9CSl9zZXRBdHRyX1QyY2xlYXJ0eHQgICAgICAgICAgIDIgMjMgNDIgMyAzIDQgMiAqLworNjM0LAkvKiBPQkpfc2V0QXR0cl9Ub2tJQ0NzaWcgICAgICAgICAgICAyIDIzIDQyIDMgMyA1IDEgKi8KKzYzNSwJLyogT0JKX3NldEF0dHJfU2VjRGV2U2lnICAgICAgICAgICAgMiAyMyA0MiAzIDMgNSAyICovCis0MzYsCS8qIE9CSl91Y2wgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOSAyMzQyIDE5MjAwMzAwICovCis4MjAsCS8qIE9CSl9pZF9Hb3N0MjgxNDdfODlfTm9uZV9LZXlNZXNoaW5nIDEgMiA2NDMgMiAyIDE0IDAgKi8KKzgxOSwJLyogT0JKX2lkX0dvc3QyODE0N184OV9DcnlwdG9Qcm9fS2V5TWVzaGluZyAxIDIgNjQzIDIgMiAxNCAxICovCis4NDUsCS8qIE9CSl9pZF9Hb3N0UjM0MTBfOTRfYSAgICAgICAgICAgIDEgMiA2NDMgMiAyIDIwIDEgKi8KKzg0NiwJLyogT0JKX2lkX0dvc3RSMzQxMF85NF9hQmlzICAgICAgICAgMSAyIDY0MyAyIDIgMjAgMiAqLworODQ3LAkvKiBPQkpfaWRfR29zdFIzNDEwXzk0X2IgICAgICAgICAgICAxIDIgNjQzIDIgMiAyMCAzICovCis4NDgsCS8qIE9CSl9pZF9Hb3N0UjM0MTBfOTRfYkJpcyAgICAgICAgIDEgMiA2NDMgMiAyIDIwIDQgKi8KKzgyMSwJLyogT0JKX2lkX0dvc3RSMzQxMV85NF9UZXN0UGFyYW1TZXQgMSAyIDY0MyAyIDIgMzAgMCAqLworODIyLAkvKiBPQkpfaWRfR29zdFIzNDExXzk0X0NyeXB0b1Byb1BhcmFtU2V0IDEgMiA2NDMgMiAyIDMwIDEgKi8KKzgyMywJLyogT0JKX2lkX0dvc3QyODE0N184OV9UZXN0UGFyYW1TZXQgMSAyIDY0MyAyIDIgMzEgMCAqLworODI0LAkvKiBPQkpfaWRfR29zdDI4MTQ3Xzg5X0NyeXB0b1Byb19BX1BhcmFtU2V0IDEgMiA2NDMgMiAyIDMxIDEgKi8KKzgyNSwJLyogT0JKX2lkX0dvc3QyODE0N184OV9DcnlwdG9Qcm9fQl9QYXJhbVNldCAxIDIgNjQzIDIgMiAzMSAyICovCis4MjYsCS8qIE9CSl9pZF9Hb3N0MjgxNDdfODlfQ3J5cHRvUHJvX0NfUGFyYW1TZXQgMSAyIDY0MyAyIDIgMzEgMyAqLworODI3LAkvKiBPQkpfaWRfR29zdDI4MTQ3Xzg5X0NyeXB0b1Byb19EX1BhcmFtU2V0IDEgMiA2NDMgMiAyIDMxIDQgKi8KKzgyOCwJLyogT0JKX2lkX0dvc3QyODE0N184OV9DcnlwdG9Qcm9fT3NjYXJfMV8xX1BhcmFtU2V0IDEgMiA2NDMgMiAyIDMxIDUgKi8KKzgyOSwJLyogT0JKX2lkX0dvc3QyODE0N184OV9DcnlwdG9Qcm9fT3NjYXJfMV8wX1BhcmFtU2V0IDEgMiA2NDMgMiAyIDMxIDYgKi8KKzgzMCwJLyogT0JKX2lkX0dvc3QyODE0N184OV9DcnlwdG9Qcm9fUklDXzFfUGFyYW1TZXQgMSAyIDY0MyAyIDIgMzEgNyAqLworODMxLAkvKiBPQkpfaWRfR29zdFIzNDEwXzk0X1Rlc3RQYXJhbVNldCAxIDIgNjQzIDIgMiAzMiAwICovCis4MzIsCS8qIE9CSl9pZF9Hb3N0UjM0MTBfOTRfQ3J5cHRvUHJvX0FfUGFyYW1TZXQgMSAyIDY0MyAyIDIgMzIgMiAqLworODMzLAkvKiBPQkpfaWRfR29zdFIzNDEwXzk0X0NyeXB0b1Byb19CX1BhcmFtU2V0IDEgMiA2NDMgMiAyIDMyIDMgKi8KKzgzNCwJLyogT0JKX2lkX0dvc3RSMzQxMF85NF9DcnlwdG9Qcm9fQ19QYXJhbVNldCAxIDIgNjQzIDIgMiAzMiA0ICovCis4MzUsCS8qIE9CSl9pZF9Hb3N0UjM0MTBfOTRfQ3J5cHRvUHJvX0RfUGFyYW1TZXQgMSAyIDY0MyAyIDIgMzIgNSAqLworODM2LAkvKiBPQkpfaWRfR29zdFIzNDEwXzk0X0NyeXB0b1Byb19YY2hBX1BhcmFtU2V0IDEgMiA2NDMgMiAyIDMzIDEgKi8KKzgzNywJLyogT0JKX2lkX0dvc3RSMzQxMF85NF9DcnlwdG9Qcm9fWGNoQl9QYXJhbVNldCAxIDIgNjQzIDIgMiAzMyAyICovCis4MzgsCS8qIE9CSl9pZF9Hb3N0UjM0MTBfOTRfQ3J5cHRvUHJvX1hjaENfUGFyYW1TZXQgMSAyIDY0MyAyIDIgMzMgMyAqLworODM5LAkvKiBPQkpfaWRfR29zdFIzNDEwXzIwMDFfVGVzdFBhcmFtU2V0IDEgMiA2NDMgMiAyIDM1IDAgKi8KKzg0MCwJLyogT0JKX2lkX0dvc3RSMzQxMF8yMDAxX0NyeXB0b1Byb19BX1BhcmFtU2V0IDEgMiA2NDMgMiAyIDM1IDEgKi8KKzg0MSwJLyogT0JKX2lkX0dvc3RSMzQxMF8yMDAxX0NyeXB0b1Byb19CX1BhcmFtU2V0IDEgMiA2NDMgMiAyIDM1IDIgKi8KKzg0MiwJLyogT0JKX2lkX0dvc3RSMzQxMF8yMDAxX0NyeXB0b1Byb19DX1BhcmFtU2V0IDEgMiA2NDMgMiAyIDM1IDMgKi8KKzg0MywJLyogT0JKX2lkX0dvc3RSMzQxMF8yMDAxX0NyeXB0b1Byb19YY2hBX1BhcmFtU2V0IDEgMiA2NDMgMiAyIDM2IDAgKi8KKzg0NCwJLyogT0JKX2lkX0dvc3RSMzQxMF8yMDAxX0NyeXB0b1Byb19YY2hCX1BhcmFtU2V0IDEgMiA2NDMgMiAyIDM2IDEgKi8KKyAyLAkvKiBPQkpfcGtjcyAgICAgICAgICAgICAgICAgICAgICAgICAxIDIgODQwIDExMzU0OSAxICovCis0MzEsCS8qIE9CSl9ob2xkX2luc3RydWN0aW9uX25vbmUgICAgICAgIDEgMiA4NDAgMTAwNDAgMiAxICovCis0MzIsCS8qIE9CSl9ob2xkX2luc3RydWN0aW9uX2NhbGxfaXNzdWVyIDEgMiA4NDAgMTAwNDAgMiAyICovCis0MzMsCS8qIE9CSl9ob2xkX2luc3RydWN0aW9uX3JlamVjdCAgICAgIDEgMiA4NDAgMTAwNDAgMiAzICovCisxMTYsCS8qIE9CSl9kc2EgICAgICAgICAgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTAwNDAgNCAxICovCisxMTMsCS8qIE9CSl9kc2FXaXRoU0hBMSAgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTAwNDAgNCAzICovCis0MDYsCS8qIE9CSl9YOV82Ml9wcmltZV9maWVsZCAgICAgICAgICAgIDEgMiA4NDAgMTAwNDUgMSAxICovCis0MDcsCS8qIE9CSl9YOV82Ml9jaGFyYWN0ZXJpc3RpY190d29fZmllbGQgMSAyIDg0MCAxMDA0NSAxIDIgKi8KKzQwOCwJLyogT0JKX1g5XzYyX2lkX2VjUHVibGljS2V5ICAgICAgICAgMSAyIDg0MCAxMDA0NSAyIDEgKi8KKzQxNiwJLyogT0JKX2VjZHNhX3dpdGhfU0hBMSAgICAgICAgICAgICAgMSAyIDg0MCAxMDA0NSA0IDEgKi8KKzc5MSwJLyogT0JKX2VjZHNhX3dpdGhfUmVjb21tZW5kZWQgICAgICAgMSAyIDg0MCAxMDA0NSA0IDIgKi8KKzc5MiwJLyogT0JKX2VjZHNhX3dpdGhfU3BlY2lmaWVkICAgICAgICAgMSAyIDg0MCAxMDA0NSA0IDMgKi8KKzI1OCwJLyogT0JKX2lkX3BraXhfbW9kICAgICAgICAgICAgICAgICAgMSAzIDYgMSA1IDUgNyAwICovCisxNzUsCS8qIE9CSl9pZF9wZSAgICAgICAgICAgICAgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgMSAqLworMjU5LAkvKiBPQkpfaWRfcXQgICAgICAgICAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDIgKi8KKzEyOCwJLyogT0JKX2lkX2twICAgICAgICAgICAgICAgICAgICAgICAgMSAzIDYgMSA1IDUgNyAzICovCisyNjAsCS8qIE9CSl9pZF9pdCAgICAgICAgICAgICAgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgNCAqLworMjYxLAkvKiBPQkpfaWRfcGtpcCAgICAgICAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDUgKi8KKzI2MiwJLyogT0JKX2lkX2FsZyAgICAgICAgICAgICAgICAgICAgICAgMSAzIDYgMSA1IDUgNyA2ICovCisyNjMsCS8qIE9CSl9pZF9jbWMgICAgICAgICAgICAgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgNyAqLworMjY0LAkvKiBPQkpfaWRfb24gICAgICAgICAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDggKi8KKzI2NSwJLyogT0JKX2lkX3BkYSAgICAgICAgICAgICAgICAgICAgICAgMSAzIDYgMSA1IDUgNyA5ICovCisyNjYsCS8qIE9CSl9pZF9hY2EgICAgICAgICAgICAgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgMTAgKi8KKzI2NywJLyogT0JKX2lkX3FjcyAgICAgICAgICAgICAgICAgICAgICAgMSAzIDYgMSA1IDUgNyAxMSAqLworMjY4LAkvKiBPQkpfaWRfY2N0ICAgICAgICAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDEyICovCis2NjIsCS8qIE9CSl9pZF9wcGwgICAgICAgICAgICAgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgMjEgKi8KKzE3NiwJLyogT0JKX2lkX2FkICAgICAgICAgICAgICAgICAgICAgICAgMSAzIDYgMSA1IDUgNyA0OCAqLworNTA3LAkvKiBPQkpfaWRfaGV4X3BhcnRpYWxfbWVzc2FnZSAgICAgICAxIDMgNiAxIDcgMSAxIDEgKi8KKzUwOCwJLyogT0JKX2lkX2hleF9tdWx0aXBhcnRfbWVzc2FnZSAgICAgMSAzIDYgMSA3IDEgMSAyICovCis1NywJLyogT0JKX25ldHNjYXBlICAgICAgICAgICAgICAgICAgICAgMiAxNiA4NDAgMSAxMTM3MzAgKi8KKzc1NCwJLyogT0JKX2NhbWVsbGlhXzEyOF9lY2IgICAgICAgICAgICAgMCAzIDQ0MDEgNSAzIDEgOSAxICovCis3NjYsCS8qIE9CSl9jYW1lbGxpYV8xMjhfb2ZiMTI4ICAgICAgICAgIDAgMyA0NDAxIDUgMyAxIDkgMyAqLworNzU3LAkvKiBPQkpfY2FtZWxsaWFfMTI4X2NmYjEyOCAgICAgICAgICAwIDMgNDQwMSA1IDMgMSA5IDQgKi8KKzc1NSwJLyogT0JKX2NhbWVsbGlhXzE5Ml9lY2IgICAgICAgICAgICAgMCAzIDQ0MDEgNSAzIDEgOSAyMSAqLworNzY3LAkvKiBPQkpfY2FtZWxsaWFfMTkyX29mYjEyOCAgICAgICAgICAwIDMgNDQwMSA1IDMgMSA5IDIzICovCis3NTgsCS8qIE9CSl9jYW1lbGxpYV8xOTJfY2ZiMTI4ICAgICAgICAgIDAgMyA0NDAxIDUgMyAxIDkgMjQgKi8KKzc1NiwJLyogT0JKX2NhbWVsbGlhXzI1Nl9lY2IgICAgICAgICAgICAgMCAzIDQ0MDEgNSAzIDEgOSA0MSAqLworNzY4LAkvKiBPQkpfY2FtZWxsaWFfMjU2X29mYjEyOCAgICAgICAgICAwIDMgNDQwMSA1IDMgMSA5IDQzICovCis3NTksCS8qIE9CSl9jYW1lbGxpYV8yNTZfY2ZiMTI4ICAgICAgICAgIDAgMyA0NDAxIDUgMyAxIDkgNDQgKi8KKzQzNywJLyogT0JKX3BpbG90ICAgICAgICAgICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwICovCis3NzYsCS8qIE9CSl9zZWVkX2VjYiAgICAgICAgICAgICAgICAgICAgIDEgMiA0MTAgMjAwMDA0IDEgMyAqLworNzc3LAkvKiBPQkpfc2VlZF9jYmMgICAgICAgICAgICAgICAgICAgICAxIDIgNDEwIDIwMDAwNCAxIDQgKi8KKzc3OSwJLyogT0JKX3NlZWRfY2ZiMTI4ICAgICAgICAgICAgICAgICAgMSAyIDQxMCAyMDAwMDQgMSA1ICovCis3NzgsCS8qIE9CSl9zZWVkX29mYjEyOCAgICAgICAgICAgICAgICAgIDEgMiA0MTAgMjAwMDA0IDEgNiAqLworODUyLAkvKiBPQkpfaWRfR29zdFIzNDExXzk0X3dpdGhfR29zdFIzNDEwXzk0X2NjIDEgMiA2NDMgMiA5IDEgMyAzICovCis4NTMsCS8qIE9CSl9pZF9Hb3N0UjM0MTFfOTRfd2l0aF9Hb3N0UjM0MTBfMjAwMV9jYyAxIDIgNjQzIDIgOSAxIDMgNCAqLworODUwLAkvKiBPQkpfaWRfR29zdFIzNDEwXzk0X2NjICAgICAgICAgICAxIDIgNjQzIDIgOSAxIDUgMyAqLworODUxLAkvKiBPQkpfaWRfR29zdFIzNDEwXzIwMDFfY2MgICAgICAgICAxIDIgNjQzIDIgOSAxIDUgNCAqLworODQ5LAkvKiBPQkpfaWRfR29zdDI4MTQ3Xzg5X2NjICAgICAgICAgICAxIDIgNjQzIDIgOSAxIDYgMSAqLworODU0LAkvKiBPQkpfaWRfR29zdFIzNDEwXzIwMDFfUGFyYW1TZXRfY2MgMSAyIDY0MyAyIDkgMSA4IDEgKi8KKzE4NiwJLyogT0JKX3BrY3MxICAgICAgICAgICAgICAgICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMSAxICovCisyNywJLyogT0JKX3BrY3MzICAgICAgICAgICAgICAgICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMSAzICovCisxODcsCS8qIE9CSl9wa2NzNSAgICAgICAgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgNSAqLworMjAsCS8qIE9CSl9wa2NzNyAgICAgICAgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgNyAqLworNDcsCS8qIE9CSl9wa2NzOSAgICAgICAgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAqLworIDMsCS8qIE9CSl9tZDIgICAgICAgICAgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDIgMiAqLworMjU3LAkvKiBPQkpfbWQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAxIDIgODQwIDExMzU0OSAyIDQgKi8KKyA0LAkvKiBPQkpfbWQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAxIDIgODQwIDExMzU0OSAyIDUgKi8KKzc5NywJLyogT0JKX2htYWNXaXRoTUQ1ICAgICAgICAgICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMiA2ICovCisxNjMsCS8qIE9CSl9obWFjV2l0aFNIQTEgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDIgNyAqLworNzk4LAkvKiBPQkpfaG1hY1dpdGhTSEEyMjQgICAgICAgICAgICAgICAxIDIgODQwIDExMzU0OSAyIDggKi8KKzc5OSwJLyogT0JKX2htYWNXaXRoU0hBMjU2ICAgICAgICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMiA5ICovCis4MDAsCS8qIE9CSl9obWFjV2l0aFNIQTM4NCAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDIgMTAgKi8KKzgwMSwJLyogT0JKX2htYWNXaXRoU0hBNTEyICAgICAgICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMiAxMSAqLworMzcsCS8qIE9CSl9yYzJfY2JjICAgICAgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDMgMiAqLworIDUsCS8qIE9CSl9yYzQgICAgICAgICAgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDMgNCAqLworNDQsCS8qIE9CSl9kZXNfZWRlM19jYmMgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDMgNyAqLworMTIwLAkvKiBPQkpfcmM1X2NiYyAgICAgICAgICAgICAgICAgICAgICAxIDIgODQwIDExMzU0OSAzIDggKi8KKzY0MywJLyogT0JKX2Rlc19jZG1mICAgICAgICAgICAgICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMyAxMCAqLworNjgwLAkvKiBPQkpfWDlfNjJfaWRfY2hhcmFjdGVyaXN0aWNfdHdvX2Jhc2lzIDEgMiA4NDAgMTAwNDUgMSAyIDMgKi8KKzY4NCwJLyogT0JKX1g5XzYyX2MycG5iMTYzdjEgICAgICAgICAgICAgMSAyIDg0MCAxMDA0NSAzIDAgMSAqLworNjg1LAkvKiBPQkpfWDlfNjJfYzJwbmIxNjN2MiAgICAgICAgICAgICAxIDIgODQwIDEwMDQ1IDMgMCAyICovCis2ODYsCS8qIE9CSl9YOV82Ml9jMnBuYjE2M3YzICAgICAgICAgICAgIDEgMiA4NDAgMTAwNDUgMyAwIDMgKi8KKzY4NywJLyogT0JKX1g5XzYyX2MycG5iMTc2djEgICAgICAgICAgICAgMSAyIDg0MCAxMDA0NSAzIDAgNCAqLworNjg4LAkvKiBPQkpfWDlfNjJfYzJ0bmIxOTF2MSAgICAgICAgICAgICAxIDIgODQwIDEwMDQ1IDMgMCA1ICovCis2ODksCS8qIE9CSl9YOV82Ml9jMnRuYjE5MXYyICAgICAgICAgICAgIDEgMiA4NDAgMTAwNDUgMyAwIDYgKi8KKzY5MCwJLyogT0JKX1g5XzYyX2MydG5iMTkxdjMgICAgICAgICAgICAgMSAyIDg0MCAxMDA0NSAzIDAgNyAqLworNjkxLAkvKiBPQkpfWDlfNjJfYzJvbmIxOTF2NCAgICAgICAgICAgICAxIDIgODQwIDEwMDQ1IDMgMCA4ICovCis2OTIsCS8qIE9CSl9YOV82Ml9jMm9uYjE5MXY1ICAgICAgICAgICAgIDEgMiA4NDAgMTAwNDUgMyAwIDkgKi8KKzY5MywJLyogT0JKX1g5XzYyX2MycG5iMjA4dzEgICAgICAgICAgICAgMSAyIDg0MCAxMDA0NSAzIDAgMTAgKi8KKzY5NCwJLyogT0JKX1g5XzYyX2MydG5iMjM5djEgICAgICAgICAgICAgMSAyIDg0MCAxMDA0NSAzIDAgMTEgKi8KKzY5NSwJLyogT0JKX1g5XzYyX2MydG5iMjM5djIgICAgICAgICAgICAgMSAyIDg0MCAxMDA0NSAzIDAgMTIgKi8KKzY5NiwJLyogT0JKX1g5XzYyX2MydG5iMjM5djMgICAgICAgICAgICAgMSAyIDg0MCAxMDA0NSAzIDAgMTMgKi8KKzY5NywJLyogT0JKX1g5XzYyX2Myb25iMjM5djQgICAgICAgICAgICAgMSAyIDg0MCAxMDA0NSAzIDAgMTQgKi8KKzY5OCwJLyogT0JKX1g5XzYyX2Myb25iMjM5djUgICAgICAgICAgICAgMSAyIDg0MCAxMDA0NSAzIDAgMTUgKi8KKzY5OSwJLyogT0JKX1g5XzYyX2MycG5iMjcydzEgICAgICAgICAgICAgMSAyIDg0MCAxMDA0NSAzIDAgMTYgKi8KKzcwMCwJLyogT0JKX1g5XzYyX2MycG5iMzA0dzEgICAgICAgICAgICAgMSAyIDg0MCAxMDA0NSAzIDAgMTcgKi8KKzcwMSwJLyogT0JKX1g5XzYyX2MydG5iMzU5djEgICAgICAgICAgICAgMSAyIDg0MCAxMDA0NSAzIDAgMTggKi8KKzcwMiwJLyogT0JKX1g5XzYyX2MycG5iMzY4dzEgICAgICAgICAgICAgMSAyIDg0MCAxMDA0NSAzIDAgMTkgKi8KKzcwMywJLyogT0JKX1g5XzYyX2MydG5iNDMxcjEgICAgICAgICAgICAgMSAyIDg0MCAxMDA0NSAzIDAgMjAgKi8KKzQwOSwJLyogT0JKX1g5XzYyX3ByaW1lMTkydjEgICAgICAgICAgICAgMSAyIDg0MCAxMDA0NSAzIDEgMSAqLworNDEwLAkvKiBPQkpfWDlfNjJfcHJpbWUxOTJ2MiAgICAgICAgICAgICAxIDIgODQwIDEwMDQ1IDMgMSAyICovCis0MTEsCS8qIE9CSl9YOV82Ml9wcmltZTE5MnYzICAgICAgICAgICAgIDEgMiA4NDAgMTAwNDUgMyAxIDMgKi8KKzQxMiwJLyogT0JKX1g5XzYyX3ByaW1lMjM5djEgICAgICAgICAgICAgMSAyIDg0MCAxMDA0NSAzIDEgNCAqLworNDEzLAkvKiBPQkpfWDlfNjJfcHJpbWUyMzl2MiAgICAgICAgICAgICAxIDIgODQwIDEwMDQ1IDMgMSA1ICovCis0MTQsCS8qIE9CSl9YOV82Ml9wcmltZTIzOXYzICAgICAgICAgICAgIDEgMiA4NDAgMTAwNDUgMyAxIDYgKi8KKzQxNSwJLyogT0JKX1g5XzYyX3ByaW1lMjU2djEgICAgICAgICAgICAgMSAyIDg0MCAxMDA0NSAzIDEgNyAqLworNzkzLAkvKiBPQkpfZWNkc2Ffd2l0aF9TSEEyMjQgICAgICAgICAgICAxIDIgODQwIDEwMDQ1IDQgMyAxICovCis3OTQsCS8qIE9CSl9lY2RzYV93aXRoX1NIQTI1NiAgICAgICAgICAgIDEgMiA4NDAgMTAwNDUgNCAzIDIgKi8KKzc5NSwJLyogT0JKX2VjZHNhX3dpdGhfU0hBMzg0ICAgICAgICAgICAgMSAyIDg0MCAxMDA0NSA0IDMgMyAqLworNzk2LAkvKiBPQkpfZWNkc2Ffd2l0aF9TSEE1MTIgICAgICAgICAgICAxIDIgODQwIDEwMDQ1IDQgMyA0ICovCisyNjksCS8qIE9CSl9pZF9wa2l4MV9leHBsaWNpdF84OCAgICAgICAgIDEgMyA2IDEgNSA1IDcgMCAxICovCisyNzAsCS8qIE9CSl9pZF9wa2l4MV9pbXBsaWNpdF84OCAgICAgICAgIDEgMyA2IDEgNSA1IDcgMCAyICovCisyNzEsCS8qIE9CSl9pZF9wa2l4MV9leHBsaWNpdF85MyAgICAgICAgIDEgMyA2IDEgNSA1IDcgMCAzICovCisyNzIsCS8qIE9CSl9pZF9wa2l4MV9pbXBsaWNpdF85MyAgICAgICAgIDEgMyA2IDEgNSA1IDcgMCA0ICovCisyNzMsCS8qIE9CSl9pZF9tb2RfY3JtZiAgICAgICAgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgMCA1ICovCisyNzQsCS8qIE9CSl9pZF9tb2RfY21jICAgICAgICAgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgMCA2ICovCisyNzUsCS8qIE9CSl9pZF9tb2Rfa2VhX3Byb2ZpbGVfODggICAgICAgIDEgMyA2IDEgNSA1IDcgMCA3ICovCisyNzYsCS8qIE9CSl9pZF9tb2Rfa2VhX3Byb2ZpbGVfOTMgICAgICAgIDEgMyA2IDEgNSA1IDcgMCA4ICovCisyNzcsCS8qIE9CSl9pZF9tb2RfY21wICAgICAgICAgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgMCA5ICovCisyNzgsCS8qIE9CSl9pZF9tb2RfcXVhbGlmaWVkX2NlcnRfODggICAgIDEgMyA2IDEgNSA1IDcgMCAxMCAqLworMjc5LAkvKiBPQkpfaWRfbW9kX3F1YWxpZmllZF9jZXJ0XzkzICAgICAxIDMgNiAxIDUgNSA3IDAgMTEgKi8KKzI4MCwJLyogT0JKX2lkX21vZF9hdHRyaWJ1dGVfY2VydCAgICAgICAgMSAzIDYgMSA1IDUgNyAwIDEyICovCisyODEsCS8qIE9CSl9pZF9tb2RfdGltZXN0YW1wX3Byb3RvY29sICAgIDEgMyA2IDEgNSA1IDcgMCAxMyAqLworMjgyLAkvKiBPQkpfaWRfbW9kX29jc3AgICAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDAgMTQgKi8KKzI4MywJLyogT0JKX2lkX21vZF9kdmNzICAgICAgICAgICAgICAgICAgMSAzIDYgMSA1IDUgNyAwIDE1ICovCisyODQsCS8qIE9CSl9pZF9tb2RfY21wMjAwMCAgICAgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgMCAxNiAqLworMTc3LAkvKiBPQkpfaW5mb19hY2Nlc3MgICAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDEgMSAqLworMjg1LAkvKiBPQkpfYmlvbWV0cmljSW5mbyAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDEgMiAqLworMjg2LAkvKiBPQkpfcWNTdGF0ZW1lbnRzICAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDEgMyAqLworMjg3LAkvKiBPQkpfYWNfYXVkaXRFbnRpdHkgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDEgNCAqLworMjg4LAkvKiBPQkpfYWNfdGFyZ2V0aW5nICAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDEgNSAqLworMjg5LAkvKiBPQkpfYWFDb250cm9scyAgICAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDEgNiAqLworMjkwLAkvKiBPQkpfc2JncF9pcEFkZHJCbG9jayAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDEgNyAqLworMjkxLAkvKiBPQkpfc2JncF9hdXRvbm9tb3VzU3lzTnVtICAgICAgICAxIDMgNiAxIDUgNSA3IDEgOCAqLworMjkyLAkvKiBPQkpfc2JncF9yb3V0ZXJJZGVudGlmaWVyICAgICAgICAxIDMgNiAxIDUgNSA3IDEgOSAqLworMzk3LAkvKiBPQkpfYWNfcHJveHlpbmcgICAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDEgMTAgKi8KKzM5OCwJLyogT0JKX3NpbmZvX2FjY2VzcyAgICAgICAgICAgICAgICAgMSAzIDYgMSA1IDUgNyAxIDExICovCis2NjMsCS8qIE9CSl9wcm94eUNlcnRJbmZvICAgICAgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgMSAxNCAqLworMTY0LAkvKiBPQkpfaWRfcXRfY3BzICAgICAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDIgMSAqLworMTY1LAkvKiBPQkpfaWRfcXRfdW5vdGljZSAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDIgMiAqLworMjkzLAkvKiBPQkpfdGV4dE5vdGljZSAgICAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDIgMyAqLworMTI5LAkvKiBPQkpfc2VydmVyX2F1dGggICAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDMgMSAqLworMTMwLAkvKiBPQkpfY2xpZW50X2F1dGggICAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDMgMiAqLworMTMxLAkvKiBPQkpfY29kZV9zaWduICAgICAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDMgMyAqLworMTMyLAkvKiBPQkpfZW1haWxfcHJvdGVjdCAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDMgNCAqLworMjk0LAkvKiBPQkpfaXBzZWNFbmRTeXN0ZW0gICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDMgNSAqLworMjk1LAkvKiBPQkpfaXBzZWNUdW5uZWwgICAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDMgNiAqLworMjk2LAkvKiBPQkpfaXBzZWNVc2VyICAgICAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDMgNyAqLworMTMzLAkvKiBPQkpfdGltZV9zdGFtcCAgICAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDMgOCAqLworMTgwLAkvKiBPQkpfT0NTUF9zaWduICAgICAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDMgOSAqLworMjk3LAkvKiBPQkpfZHZjcyAgICAgICAgICAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDMgMTAgKi8KKzI5OCwJLyogT0JKX2lkX2l0X2NhUHJvdEVuY0NlcnQgICAgICAgICAgMSAzIDYgMSA1IDUgNyA0IDEgKi8KKzI5OSwJLyogT0JKX2lkX2l0X3NpZ25LZXlQYWlyVHlwZXMgICAgICAgMSAzIDYgMSA1IDUgNyA0IDIgKi8KKzMwMCwJLyogT0JKX2lkX2l0X2VuY0tleVBhaXJUeXBlcyAgICAgICAgMSAzIDYgMSA1IDUgNyA0IDMgKi8KKzMwMSwJLyogT0JKX2lkX2l0X3ByZWZlcnJlZFN5bW1BbGcgICAgICAgMSAzIDYgMSA1IDUgNyA0IDQgKi8KKzMwMiwJLyogT0JKX2lkX2l0X2NhS2V5VXBkYXRlSW5mbyAgICAgICAgMSAzIDYgMSA1IDUgNyA0IDUgKi8KKzMwMywJLyogT0JKX2lkX2l0X2N1cnJlbnRDUkwgICAgICAgICAgICAgMSAzIDYgMSA1IDUgNyA0IDYgKi8KKzMwNCwJLyogT0JKX2lkX2l0X3Vuc3VwcG9ydGVkT0lEcyAgICAgICAgMSAzIDYgMSA1IDUgNyA0IDcgKi8KKzMwNSwJLyogT0JKX2lkX2l0X3N1YnNjcmlwdGlvblJlcXVlc3QgICAgMSAzIDYgMSA1IDUgNyA0IDggKi8KKzMwNiwJLyogT0JKX2lkX2l0X3N1YnNjcmlwdGlvblJlc3BvbnNlICAgMSAzIDYgMSA1IDUgNyA0IDkgKi8KKzMwNywJLyogT0JKX2lkX2l0X2tleVBhaXJQYXJhbVJlcSAgICAgICAgMSAzIDYgMSA1IDUgNyA0IDEwICovCiszMDgsCS8qIE9CSl9pZF9pdF9rZXlQYWlyUGFyYW1SZXAgICAgICAgIDEgMyA2IDEgNSA1IDcgNCAxMSAqLworMzA5LAkvKiBPQkpfaWRfaXRfcmV2UGFzc3BocmFzZSAgICAgICAgICAxIDMgNiAxIDUgNSA3IDQgMTIgKi8KKzMxMCwJLyogT0JKX2lkX2l0X2ltcGxpY2l0Q29uZmlybSAgICAgICAgMSAzIDYgMSA1IDUgNyA0IDEzICovCiszMTEsCS8qIE9CSl9pZF9pdF9jb25maXJtV2FpdFRpbWUgICAgICAgIDEgMyA2IDEgNSA1IDcgNCAxNCAqLworMzEyLAkvKiBPQkpfaWRfaXRfb3JpZ1BLSU1lc3NhZ2UgICAgICAgICAxIDMgNiAxIDUgNSA3IDQgMTUgKi8KKzc4NCwJLyogT0JKX2lkX2l0X3N1cHBMYW5nVGFncyAgICAgICAgICAgMSAzIDYgMSA1IDUgNyA0IDE2ICovCiszMTMsCS8qIE9CSl9pZF9yZWdDdHJsICAgICAgICAgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgNSAxICovCiszMTQsCS8qIE9CSl9pZF9yZWdJbmZvICAgICAgICAgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgNSAyICovCiszMjMsCS8qIE9CSl9pZF9hbGdfZGVzNDAgICAgICAgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgNiAxICovCiszMjQsCS8qIE9CSl9pZF9hbGdfbm9TaWduYXR1cmUgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgNiAyICovCiszMjUsCS8qIE9CSl9pZF9hbGdfZGhfc2lnX2htYWNfc2hhMSAgICAgIDEgMyA2IDEgNSA1IDcgNiAzICovCiszMjYsCS8qIE9CSl9pZF9hbGdfZGhfcG9wICAgICAgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgNiA0ICovCiszMjcsCS8qIE9CSl9pZF9jbWNfc3RhdHVzSW5mbyAgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgNyAxICovCiszMjgsCS8qIE9CSl9pZF9jbWNfaWRlbnRpZmljYXRpb24gICAgICAgIDEgMyA2IDEgNSA1IDcgNyAyICovCiszMjksCS8qIE9CSl9pZF9jbWNfaWRlbnRpdHlQcm9vZiAgICAgICAgIDEgMyA2IDEgNSA1IDcgNyAzICovCiszMzAsCS8qIE9CSl9pZF9jbWNfZGF0YVJldHVybiAgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgNyA0ICovCiszMzEsCS8qIE9CSl9pZF9jbWNfdHJhbnNhY3Rpb25JZCAgICAgICAgIDEgMyA2IDEgNSA1IDcgNyA1ICovCiszMzIsCS8qIE9CSl9pZF9jbWNfc2VuZGVyTm9uY2UgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgNyA2ICovCiszMzMsCS8qIE9CSl9pZF9jbWNfcmVjaXBpZW50Tm9uY2UgICAgICAgIDEgMyA2IDEgNSA1IDcgNyA3ICovCiszMzQsCS8qIE9CSl9pZF9jbWNfYWRkRXh0ZW5zaW9ucyAgICAgICAgIDEgMyA2IDEgNSA1IDcgNyA4ICovCiszMzUsCS8qIE9CSl9pZF9jbWNfZW5jcnlwdGVkUE9QICAgICAgICAgIDEgMyA2IDEgNSA1IDcgNyA5ICovCiszMzYsCS8qIE9CSl9pZF9jbWNfZGVjcnlwdGVkUE9QICAgICAgICAgIDEgMyA2IDEgNSA1IDcgNyAxMCAqLworMzM3LAkvKiBPQkpfaWRfY21jX2xyYVBPUFdpdG5lc3MgICAgICAgICAxIDMgNiAxIDUgNSA3IDcgMTEgKi8KKzMzOCwJLyogT0JKX2lkX2NtY19nZXRDZXJ0ICAgICAgICAgICAgICAgMSAzIDYgMSA1IDUgNyA3IDE1ICovCiszMzksCS8qIE9CSl9pZF9jbWNfZ2V0Q1JMICAgICAgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgNyAxNiAqLworMzQwLAkvKiBPQkpfaWRfY21jX3Jldm9rZVJlcXVlc3QgICAgICAgICAxIDMgNiAxIDUgNSA3IDcgMTcgKi8KKzM0MSwJLyogT0JKX2lkX2NtY19yZWdJbmZvICAgICAgICAgICAgICAgMSAzIDYgMSA1IDUgNyA3IDE4ICovCiszNDIsCS8qIE9CSl9pZF9jbWNfcmVzcG9uc2VJbmZvICAgICAgICAgIDEgMyA2IDEgNSA1IDcgNyAxOSAqLworMzQzLAkvKiBPQkpfaWRfY21jX3F1ZXJ5UGVuZGluZyAgICAgICAgICAxIDMgNiAxIDUgNSA3IDcgMjEgKi8KKzM0NCwJLyogT0JKX2lkX2NtY19wb3BMaW5rUmFuZG9tICAgICAgICAgMSAzIDYgMSA1IDUgNyA3IDIyICovCiszNDUsCS8qIE9CSl9pZF9jbWNfcG9wTGlua1dpdG5lc3MgICAgICAgIDEgMyA2IDEgNSA1IDcgNyAyMyAqLworMzQ2LAkvKiBPQkpfaWRfY21jX2NvbmZpcm1DZXJ0QWNjZXB0YW5jZSAxIDMgNiAxIDUgNSA3IDcgMjQgKi8KKzM0NywJLyogT0JKX2lkX29uX3BlcnNvbmFsRGF0YSAgICAgICAgICAgMSAzIDYgMSA1IDUgNyA4IDEgKi8KKzg1OCwJLyogT0JKX2lkX29uX3Blcm1hbmVudElkZW50aWZpZXIgICAgMSAzIDYgMSA1IDUgNyA4IDMgKi8KKzM0OCwJLyogT0JKX2lkX3BkYV9kYXRlT2ZCaXJ0aCAgICAgICAgICAgMSAzIDYgMSA1IDUgNyA5IDEgKi8KKzM0OSwJLyogT0JKX2lkX3BkYV9wbGFjZU9mQmlydGggICAgICAgICAgMSAzIDYgMSA1IDUgNyA5IDIgKi8KKzM1MSwJLyogT0JKX2lkX3BkYV9nZW5kZXIgICAgICAgICAgICAgICAgMSAzIDYgMSA1IDUgNyA5IDMgKi8KKzM1MiwJLyogT0JKX2lkX3BkYV9jb3VudHJ5T2ZDaXRpemVuc2hpcCAgMSAzIDYgMSA1IDUgNyA5IDQgKi8KKzM1MywJLyogT0JKX2lkX3BkYV9jb3VudHJ5T2ZSZXNpZGVuY2UgICAgMSAzIDYgMSA1IDUgNyA5IDUgKi8KKzM1NCwJLyogT0JKX2lkX2FjYV9hdXRoZW50aWNhdGlvbkluZm8gICAgMSAzIDYgMSA1IDUgNyAxMCAxICovCiszNTUsCS8qIE9CSl9pZF9hY2FfYWNjZXNzSWRlbnRpdHkgICAgICAgIDEgMyA2IDEgNSA1IDcgMTAgMiAqLworMzU2LAkvKiBPQkpfaWRfYWNhX2NoYXJnaW5nSWRlbnRpdHkgICAgICAxIDMgNiAxIDUgNSA3IDEwIDMgKi8KKzM1NywJLyogT0JKX2lkX2FjYV9ncm91cCAgICAgICAgICAgICAgICAgMSAzIDYgMSA1IDUgNyAxMCA0ICovCiszNTgsCS8qIE9CSl9pZF9hY2Ffcm9sZSAgICAgICAgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgMTAgNSAqLworMzk5LAkvKiBPQkpfaWRfYWNhX2VuY0F0dHJzICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDEwIDYgKi8KKzM1OSwJLyogT0JKX2lkX3Fjc19wa2l4UUNTeW50YXhfdjEgICAgICAgMSAzIDYgMSA1IDUgNyAxMSAxICovCiszNjAsCS8qIE9CSl9pZF9jY3RfY3JzICAgICAgICAgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgMTIgMSAqLworMzYxLAkvKiBPQkpfaWRfY2N0X1BLSURhdGEgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDEyIDIgKi8KKzM2MiwJLyogT0JKX2lkX2NjdF9QS0lSZXNwb25zZSAgICAgICAgICAgMSAzIDYgMSA1IDUgNyAxMiAzICovCis2NjQsCS8qIE9CSl9pZF9wcGxfYW55TGFuZ3VhZ2UgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgMjEgMCAqLworNjY1LAkvKiBPQkpfaWRfcHBsX2luaGVyaXRBbGwgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDIxIDEgKi8KKzY2NywJLyogT0JKX0luZGVwZW5kZW50ICAgICAgICAgICAgICAgICAgMSAzIDYgMSA1IDUgNyAyMSAyICovCisxNzgsCS8qIE9CSl9hZF9PQ1NQICAgICAgICAgICAgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgNDggMSAqLworMTc5LAkvKiBPQkpfYWRfY2FfaXNzdWVycyAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDQ4IDIgKi8KKzM2MywJLyogT0JKX2FkX3RpbWVTdGFtcGluZyAgICAgICAgICAgICAgMSAzIDYgMSA1IDUgNyA0OCAzICovCiszNjQsCS8qIE9CSl9hZF9kdmNzICAgICAgICAgICAgICAgICAgICAgIDEgMyA2IDEgNSA1IDcgNDggNCAqLworNzg1LAkvKiBPQkpfY2FSZXBvc2l0b3J5ICAgICAgICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDQ4IDUgKi8KKzc4MCwJLyogT0JKX2htYWNfbWQ1ICAgICAgICAgICAgICAgICAgICAgMSAzIDYgMSA1IDUgOCAxIDEgKi8KKzc4MSwJLyogT0JKX2htYWNfc2hhMSAgICAgICAgICAgICAgICAgICAgMSAzIDYgMSA1IDUgOCAxIDIgKi8KKzU4LAkvKiBPQkpfbmV0c2NhcGVfY2VydF9leHRlbnNpb24gICAgICAyIDE2IDg0MCAxIDExMzczMCAxICovCis1OSwJLyogT0JKX25ldHNjYXBlX2RhdGFfdHlwZSAgICAgICAgICAgMiAxNiA4NDAgMSAxMTM3MzAgMiAqLworNDM4LAkvKiBPQkpfcGlsb3RBdHRyaWJ1dGVUeXBlICAgICAgICAgICAwIDkgMjM0MiAxOTIwMDMwMCAxMDAgMSAqLworNDM5LAkvKiBPQkpfcGlsb3RBdHRyaWJ1dGVTeW50YXggICAgICAgICAwIDkgMjM0MiAxOTIwMDMwMCAxMDAgMyAqLworNDQwLAkvKiBPQkpfcGlsb3RPYmplY3RDbGFzcyAgICAgICAgICAgICAwIDkgMjM0MiAxOTIwMDMwMCAxMDAgNCAqLworNDQxLAkvKiBPQkpfcGlsb3RHcm91cHMgICAgICAgICAgICAgICAgICAwIDkgMjM0MiAxOTIwMDMwMCAxMDAgMTAgKi8KKzEwOCwJLyogT0JKX2Nhc3Q1X2NiYyAgICAgICAgICAgICAgICAgICAgMSAyIDg0MCAxMTM1MzMgNyA2NiAxMCAqLworMTEyLAkvKiBPQkpfcGJlV2l0aE1ENUFuZENhc3Q1X0NCQyAgICAgICAxIDIgODQwIDExMzUzMyA3IDY2IDEyICovCis3ODIsCS8qIE9CSl9pZF9QYXNzd29yZEJhc2VkTUFDICAgICAgICAgIDEgMiA4NDAgMTEzNTMzIDcgNjYgMTMgKi8KKzc4MywJLyogT0JKX2lkX0RIQmFzZWRNYWMgICAgICAgICAgICAgICAgMSAyIDg0MCAxMTM1MzMgNyA2NiAzMCAqLworIDYsCS8qIE9CSl9yc2FFbmNyeXB0aW9uICAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgMSAxICovCisgNywJLyogT0JKX21kMldpdGhSU0FFbmNyeXB0aW9uICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMSAxIDIgKi8KKzM5NiwJLyogT0JKX21kNFdpdGhSU0FFbmNyeXB0aW9uICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMSAxIDMgKi8KKyA4LAkvKiBPQkpfbWQ1V2l0aFJTQUVuY3J5cHRpb24gICAgICAgICAxIDIgODQwIDExMzU0OSAxIDEgNCAqLworNjUsCS8qIE9CSl9zaGExV2l0aFJTQUVuY3J5cHRpb24gICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgMSA1ICovCis2NDQsCS8qIE9CSl9yc2FPQUVQRW5jcnlwdGlvblNFVCAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgMSA2ICovCis2NjgsCS8qIE9CSl9zaGEyNTZXaXRoUlNBRW5jcnlwdGlvbiAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgMSAxMSAqLworNjY5LAkvKiBPQkpfc2hhMzg0V2l0aFJTQUVuY3J5cHRpb24gICAgICAxIDIgODQwIDExMzU0OSAxIDEgMTIgKi8KKzY3MCwJLyogT0JKX3NoYTUxMldpdGhSU0FFbmNyeXB0aW9uICAgICAgMSAyIDg0MCAxMTM1NDkgMSAxIDEzICovCis2NzEsCS8qIE9CSl9zaGEyMjRXaXRoUlNBRW5jcnlwdGlvbiAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgMSAxNCAqLworMjgsCS8qIE9CSl9kaEtleUFncmVlbWVudCAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgMyAxICovCisgOSwJLyogT0JKX3BiZVdpdGhNRDJBbmRERVNfQ0JDICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMSA1IDEgKi8KKzEwLAkvKiBPQkpfcGJlV2l0aE1ENUFuZERFU19DQkMgICAgICAgICAxIDIgODQwIDExMzU0OSAxIDUgMyAqLworMTY4LAkvKiBPQkpfcGJlV2l0aE1EMkFuZFJDMl9DQkMgICAgICAgICAxIDIgODQwIDExMzU0OSAxIDUgNCAqLworMTY5LAkvKiBPQkpfcGJlV2l0aE1ENUFuZFJDMl9DQkMgICAgICAgICAxIDIgODQwIDExMzU0OSAxIDUgNiAqLworMTcwLAkvKiBPQkpfcGJlV2l0aFNIQTFBbmRERVNfQ0JDICAgICAgICAxIDIgODQwIDExMzU0OSAxIDUgMTAgKi8KKzY4LAkvKiBPQkpfcGJlV2l0aFNIQTFBbmRSQzJfQ0JDICAgICAgICAxIDIgODQwIDExMzU0OSAxIDUgMTEgKi8KKzY5LAkvKiBPQkpfaWRfcGJrZGYyICAgICAgICAgICAgICAgICAgICAxIDIgODQwIDExMzU0OSAxIDUgMTIgKi8KKzE2MSwJLyogT0JKX3BiZXMyICAgICAgICAgICAgICAgICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMSA1IDEzICovCisxNjIsCS8qIE9CSl9wYm1hYzEgICAgICAgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgNSAxNCAqLworMjEsCS8qIE9CSl9wa2NzN19kYXRhICAgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgNyAxICovCisyMiwJLyogT0JKX3BrY3M3X3NpZ25lZCAgICAgICAgICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMSA3IDIgKi8KKzIzLAkvKiBPQkpfcGtjczdfZW52ZWxvcGVkICAgICAgICAgICAgICAxIDIgODQwIDExMzU0OSAxIDcgMyAqLworMjQsCS8qIE9CSl9wa2NzN19zaWduZWRBbmRFbnZlbG9wZWQgICAgIDEgMiA4NDAgMTEzNTQ5IDEgNyA0ICovCisyNSwJLyogT0JKX3BrY3M3X2RpZ2VzdCAgICAgICAgICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMSA3IDUgKi8KKzI2LAkvKiBPQkpfcGtjczdfZW5jcnlwdGVkICAgICAgICAgICAgICAxIDIgODQwIDExMzU0OSAxIDcgNiAqLworNDgsCS8qIE9CSl9wa2NzOV9lbWFpbEFkZHJlc3MgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxICovCis0OSwJLyogT0JKX3BrY3M5X3Vuc3RydWN0dXJlZE5hbWUgICAgICAgMSAyIDg0MCAxMTM1NDkgMSA5IDIgKi8KKzUwLAkvKiBPQkpfcGtjczlfY29udGVudFR5cGUgICAgICAgICAgICAxIDIgODQwIDExMzU0OSAxIDkgMyAqLworNTEsCS8qIE9CSl9wa2NzOV9tZXNzYWdlRGlnZXN0ICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSA0ICovCis1MiwJLyogT0JKX3BrY3M5X3NpZ25pbmdUaW1lICAgICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMSA5IDUgKi8KKzUzLAkvKiBPQkpfcGtjczlfY291bnRlcnNpZ25hdHVyZSAgICAgICAxIDIgODQwIDExMzU0OSAxIDkgNiAqLworNTQsCS8qIE9CSl9wa2NzOV9jaGFsbGVuZ2VQYXNzd29yZCAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSA3ICovCis1NSwJLyogT0JKX3BrY3M5X3Vuc3RydWN0dXJlZEFkZHJlc3MgICAgMSAyIDg0MCAxMTM1NDkgMSA5IDggKi8KKzU2LAkvKiBPQkpfcGtjczlfZXh0Q2VydEF0dHJpYnV0ZXMgICAgICAxIDIgODQwIDExMzU0OSAxIDkgOSAqLworMTcyLAkvKiBPQkpfZXh0X3JlcSAgICAgICAgICAgICAgICAgICAgICAxIDIgODQwIDExMzU0OSAxIDkgMTQgKi8KKzE2NywJLyogT0JKX1NNSU1FQ2FwYWJpbGl0aWVzICAgICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMSA5IDE1ICovCisxODgsCS8qIE9CSl9TTUlNRSAgICAgICAgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAqLworMTU2LAkvKiBPQkpfZnJpZW5kbHlOYW1lICAgICAgICAgICAgICAgICAxIDIgODQwIDExMzU0OSAxIDkgMjAgKi8KKzE1NywJLyogT0JKX2xvY2FsS2V5SUQgICAgICAgICAgICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMSA5IDIxICovCis2ODEsCS8qIE9CSl9YOV82Ml9vbkJhc2lzICAgICAgICAgICAgICAgIDEgMiA4NDAgMTAwNDUgMSAyIDMgMSAqLworNjgyLAkvKiBPQkpfWDlfNjJfdHBCYXNpcyAgICAgICAgICAgICAgICAxIDIgODQwIDEwMDQ1IDEgMiAzIDIgKi8KKzY4MywJLyogT0JKX1g5XzYyX3BwQmFzaXMgICAgICAgICAgICAgICAgMSAyIDg0MCAxMDA0NSAxIDIgMyAzICovCis0MTcsCS8qIE9CSl9tc19jc3BfbmFtZSAgICAgICAgICAgICAgICAgIDEgMyA2IDEgNCAxIDMxMSAxNyAxICovCis4NTYsCS8qIE9CSl9Mb2NhbEtleVNldCAgICAgICAgICAgICAgICAgIDEgMyA2IDEgNCAxIDMxMSAxNyAyICovCiszOTAsCS8qIE9CSl9kY09iamVjdCAgICAgICAgICAgICAgICAgICAgIDEgMyA2IDEgNCAxIDE0NjYgMzQ0ICovCis5MSwJLyogT0JKX2JmX2NiYyAgICAgICAgICAgICAgICAgICAgICAgMSAzIDYgMSA0IDEgMzAyOSAxIDIgKi8KKzMxNSwJLyogT0JKX2lkX3JlZ0N0cmxfcmVnVG9rZW4gICAgICAgICAgMSAzIDYgMSA1IDUgNyA1IDEgMSAqLworMzE2LAkvKiBPQkpfaWRfcmVnQ3RybF9hdXRoZW50aWNhdG9yICAgICAxIDMgNiAxIDUgNSA3IDUgMSAyICovCiszMTcsCS8qIE9CSl9pZF9yZWdDdHJsX3BraVB1YmxpY2F0aW9uSW5mbyAxIDMgNiAxIDUgNSA3IDUgMSAzICovCiszMTgsCS8qIE9CSl9pZF9yZWdDdHJsX3BraUFyY2hpdmVPcHRpb25zIDEgMyA2IDEgNSA1IDcgNSAxIDQgKi8KKzMxOSwJLyogT0JKX2lkX3JlZ0N0cmxfb2xkQ2VydElEICAgICAgICAgMSAzIDYgMSA1IDUgNyA1IDEgNSAqLworMzIwLAkvKiBPQkpfaWRfcmVnQ3RybF9wcm90b2NvbEVuY3JLZXkgICAxIDMgNiAxIDUgNSA3IDUgMSA2ICovCiszMjEsCS8qIE9CSl9pZF9yZWdJbmZvX3V0ZjhQYWlycyAgICAgICAgIDEgMyA2IDEgNSA1IDcgNSAyIDEgKi8KKzMyMiwJLyogT0JKX2lkX3JlZ0luZm9fY2VydFJlcSAgICAgICAgICAgMSAzIDYgMSA1IDUgNyA1IDIgMiAqLworMzY1LAkvKiBPQkpfaWRfcGtpeF9PQ1NQX2Jhc2ljICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDQ4IDEgMSAqLworMzY2LAkvKiBPQkpfaWRfcGtpeF9PQ1NQX05vbmNlICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDQ4IDEgMiAqLworMzY3LAkvKiBPQkpfaWRfcGtpeF9PQ1NQX0NybElEICAgICAgICAgICAxIDMgNiAxIDUgNSA3IDQ4IDEgMyAqLworMzY4LAkvKiBPQkpfaWRfcGtpeF9PQ1NQX2FjY2VwdGFibGVSZXNwb25zZXMgMSAzIDYgMSA1IDUgNyA0OCAxIDQgKi8KKzM2OSwJLyogT0JKX2lkX3BraXhfT0NTUF9ub0NoZWNrICAgICAgICAgMSAzIDYgMSA1IDUgNyA0OCAxIDUgKi8KKzM3MCwJLyogT0JKX2lkX3BraXhfT0NTUF9hcmNoaXZlQ3V0b2ZmICAgMSAzIDYgMSA1IDUgNyA0OCAxIDYgKi8KKzM3MSwJLyogT0JKX2lkX3BraXhfT0NTUF9zZXJ2aWNlTG9jYXRvciAgMSAzIDYgMSA1IDUgNyA0OCAxIDcgKi8KKzM3MiwJLyogT0JKX2lkX3BraXhfT0NTUF9leHRlbmRlZFN0YXR1cyAgMSAzIDYgMSA1IDUgNyA0OCAxIDggKi8KKzM3MywJLyogT0JKX2lkX3BraXhfT0NTUF92YWxpZCAgICAgICAgICAgMSAzIDYgMSA1IDUgNyA0OCAxIDkgKi8KKzM3NCwJLyogT0JKX2lkX3BraXhfT0NTUF9wYXRoICAgICAgICAgICAgMSAzIDYgMSA1IDUgNyA0OCAxIDEwICovCiszNzUsCS8qIE9CSl9pZF9wa2l4X09DU1BfdHJ1c3RSb290ICAgICAgIDEgMyA2IDEgNSA1IDcgNDggMSAxMSAqLworNDE4LAkvKiBPQkpfYWVzXzEyOF9lY2IgICAgICAgICAgICAgICAgICAyIDE2IDg0MCAxIDEwMSAzIDQgMSAxICovCis0MTksCS8qIE9CSl9hZXNfMTI4X2NiYyAgICAgICAgICAgICAgICAgIDIgMTYgODQwIDEgMTAxIDMgNCAxIDIgKi8KKzQyMCwJLyogT0JKX2Flc18xMjhfb2ZiMTI4ICAgICAgICAgICAgICAgMiAxNiA4NDAgMSAxMDEgMyA0IDEgMyAqLworNDIxLAkvKiBPQkpfYWVzXzEyOF9jZmIxMjggICAgICAgICAgICAgICAyIDE2IDg0MCAxIDEwMSAzIDQgMSA0ICovCis3ODgsCS8qIE9CSl9pZF9hZXMxMjhfd3JhcCAgICAgICAgICAgICAgIDIgMTYgODQwIDEgMTAxIDMgNCAxIDUgKi8KKzQyMiwJLyogT0JKX2Flc18xOTJfZWNiICAgICAgICAgICAgICAgICAgMiAxNiA4NDAgMSAxMDEgMyA0IDEgMjEgKi8KKzQyMywJLyogT0JKX2Flc18xOTJfY2JjICAgICAgICAgICAgICAgICAgMiAxNiA4NDAgMSAxMDEgMyA0IDEgMjIgKi8KKzQyNCwJLyogT0JKX2Flc18xOTJfb2ZiMTI4ICAgICAgICAgICAgICAgMiAxNiA4NDAgMSAxMDEgMyA0IDEgMjMgKi8KKzQyNSwJLyogT0JKX2Flc18xOTJfY2ZiMTI4ICAgICAgICAgICAgICAgMiAxNiA4NDAgMSAxMDEgMyA0IDEgMjQgKi8KKzc4OSwJLyogT0JKX2lkX2FlczE5Ml93cmFwICAgICAgICAgICAgICAgMiAxNiA4NDAgMSAxMDEgMyA0IDEgMjUgKi8KKzQyNiwJLyogT0JKX2Flc18yNTZfZWNiICAgICAgICAgICAgICAgICAgMiAxNiA4NDAgMSAxMDEgMyA0IDEgNDEgKi8KKzQyNywJLyogT0JKX2Flc18yNTZfY2JjICAgICAgICAgICAgICAgICAgMiAxNiA4NDAgMSAxMDEgMyA0IDEgNDIgKi8KKzQyOCwJLyogT0JKX2Flc18yNTZfb2ZiMTI4ICAgICAgICAgICAgICAgMiAxNiA4NDAgMSAxMDEgMyA0IDEgNDMgKi8KKzQyOSwJLyogT0JKX2Flc18yNTZfY2ZiMTI4ICAgICAgICAgICAgICAgMiAxNiA4NDAgMSAxMDEgMyA0IDEgNDQgKi8KKzc5MCwJLyogT0JKX2lkX2FlczI1Nl93cmFwICAgICAgICAgICAgICAgMiAxNiA4NDAgMSAxMDEgMyA0IDEgNDUgKi8KKzY3MiwJLyogT0JKX3NoYTI1NiAgICAgICAgICAgICAgICAgICAgICAgMiAxNiA4NDAgMSAxMDEgMyA0IDIgMSAqLworNjczLAkvKiBPQkpfc2hhMzg0ICAgICAgICAgICAgICAgICAgICAgICAyIDE2IDg0MCAxIDEwMSAzIDQgMiAyICovCis2NzQsCS8qIE9CSl9zaGE1MTIgICAgICAgICAgICAgICAgICAgICAgIDIgMTYgODQwIDEgMTAxIDMgNCAyIDMgKi8KKzY3NSwJLyogT0JKX3NoYTIyNCAgICAgICAgICAgICAgICAgICAgICAgMiAxNiA4NDAgMSAxMDEgMyA0IDIgNCAqLworODAyLAkvKiBPQkpfZHNhX3dpdGhfU0hBMjI0ICAgICAgICAgICAgICAyIDE2IDg0MCAxIDEwMSAzIDQgMyAxICovCis4MDMsCS8qIE9CSl9kc2Ffd2l0aF9TSEEyNTYgICAgICAgICAgICAgIDIgMTYgODQwIDEgMTAxIDMgNCAzIDIgKi8KKzcxLAkvKiBPQkpfbmV0c2NhcGVfY2VydF90eXBlICAgICAgICAgICAyIDE2IDg0MCAxIDExMzczMCAxIDEgKi8KKzcyLAkvKiBPQkpfbmV0c2NhcGVfYmFzZV91cmwgICAgICAgICAgICAyIDE2IDg0MCAxIDExMzczMCAxIDIgKi8KKzczLAkvKiBPQkpfbmV0c2NhcGVfcmV2b2NhdGlvbl91cmwgICAgICAyIDE2IDg0MCAxIDExMzczMCAxIDMgKi8KKzc0LAkvKiBPQkpfbmV0c2NhcGVfY2FfcmV2b2NhdGlvbl91cmwgICAyIDE2IDg0MCAxIDExMzczMCAxIDQgKi8KKzc1LAkvKiBPQkpfbmV0c2NhcGVfcmVuZXdhbF91cmwgICAgICAgICAyIDE2IDg0MCAxIDExMzczMCAxIDcgKi8KKzc2LAkvKiBPQkpfbmV0c2NhcGVfY2FfcG9saWN5X3VybCAgICAgICAyIDE2IDg0MCAxIDExMzczMCAxIDggKi8KKzc3LAkvKiBPQkpfbmV0c2NhcGVfc3NsX3NlcnZlcl9uYW1lICAgICAyIDE2IDg0MCAxIDExMzczMCAxIDEyICovCis3OCwJLyogT0JKX25ldHNjYXBlX2NvbW1lbnQgICAgICAgICAgICAgMiAxNiA4NDAgMSAxMTM3MzAgMSAxMyAqLworNzksCS8qIE9CSl9uZXRzY2FwZV9jZXJ0X3NlcXVlbmNlICAgICAgIDIgMTYgODQwIDEgMTEzNzMwIDIgNSAqLworMTM5LAkvKiBPQkpfbnNfc2djICAgICAgICAgICAgICAgICAgICAgICAyIDE2IDg0MCAxIDExMzczMCA0IDEgKi8KKzQ1OCwJLyogT0JKX3VzZXJJZCAgICAgICAgICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgMSAqLworNDU5LAkvKiBPQkpfdGV4dEVuY29kZWRPUkFkZHJlc3MgICAgICAgICAwIDkgMjM0MiAxOTIwMDMwMCAxMDAgMSAyICovCis0NjAsCS8qIE9CSl9yZmM4MjJNYWlsYm94ICAgICAgICAgICAgICAgIDAgOSAyMzQyIDE5MjAwMzAwIDEwMCAxIDMgKi8KKzQ2MSwJLyogT0JKX2luZm8gICAgICAgICAgICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgNCAqLworNDYyLAkvKiBPQkpfZmF2b3VyaXRlRHJpbmsgICAgICAgICAgICAgICAwIDkgMjM0MiAxOTIwMDMwMCAxMDAgMSA1ICovCis0NjMsCS8qIE9CSl9yb29tTnVtYmVyICAgICAgICAgICAgICAgICAgIDAgOSAyMzQyIDE5MjAwMzAwIDEwMCAxIDYgKi8KKzQ2NCwJLyogT0JKX3Bob3RvICAgICAgICAgICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgNyAqLworNDY1LAkvKiBPQkpfdXNlckNsYXNzICAgICAgICAgICAgICAgICAgICAwIDkgMjM0MiAxOTIwMDMwMCAxMDAgMSA4ICovCis0NjYsCS8qIE9CSl9ob3N0ICAgICAgICAgICAgICAgICAgICAgICAgIDAgOSAyMzQyIDE5MjAwMzAwIDEwMCAxIDkgKi8KKzQ2NywJLyogT0JKX21hbmFnZXIgICAgICAgICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgMTAgKi8KKzQ2OCwJLyogT0JKX2RvY3VtZW50SWRlbnRpZmllciAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgMTEgKi8KKzQ2OSwJLyogT0JKX2RvY3VtZW50VGl0bGUgICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgMTIgKi8KKzQ3MCwJLyogT0JKX2RvY3VtZW50VmVyc2lvbiAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgMTMgKi8KKzQ3MSwJLyogT0JKX2RvY3VtZW50QXV0aG9yICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgMTQgKi8KKzQ3MiwJLyogT0JKX2RvY3VtZW50TG9jYXRpb24gICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgMTUgKi8KKzQ3MywJLyogT0JKX2hvbWVUZWxlcGhvbmVOdW1iZXIgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgMjAgKi8KKzQ3NCwJLyogT0JKX3NlY3JldGFyeSAgICAgICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgMjEgKi8KKzQ3NSwJLyogT0JKX290aGVyTWFpbGJveCAgICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgMjIgKi8KKzQ3NiwJLyogT0JKX2xhc3RNb2RpZmllZFRpbWUgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgMjMgKi8KKzQ3NywJLyogT0JKX2xhc3RNb2RpZmllZEJ5ICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgMjQgKi8KKzM5MSwJLyogT0JKX2RvbWFpbkNvbXBvbmVudCAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgMjUgKi8KKzQ3OCwJLyogT0JKX2FSZWNvcmQgICAgICAgICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgMjYgKi8KKzQ3OSwJLyogT0JKX3BpbG90QXR0cmlidXRlVHlwZTI3ICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgMjcgKi8KKzQ4MCwJLyogT0JKX21YUmVjb3JkICAgICAgICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgMjggKi8KKzQ4MSwJLyogT0JKX25TUmVjb3JkICAgICAgICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgMjkgKi8KKzQ4MiwJLyogT0JKX3NPQVJlY29yZCAgICAgICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgMzAgKi8KKzQ4MywJLyogT0JKX2NOQU1FUmVjb3JkICAgICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgMzEgKi8KKzQ4NCwJLyogT0JKX2Fzc29jaWF0ZWREb21haW4gICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgMzcgKi8KKzQ4NSwJLyogT0JKX2Fzc29jaWF0ZWROYW1lICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgMzggKi8KKzQ4NiwJLyogT0JKX2hvbWVQb3N0YWxBZGRyZXNzICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgMzkgKi8KKzQ4NywJLyogT0JKX3BlcnNvbmFsVGl0bGUgICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgNDAgKi8KKzQ4OCwJLyogT0JKX21vYmlsZVRlbGVwaG9uZU51bWJlciAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgNDEgKi8KKzQ4OSwJLyogT0JKX3BhZ2VyVGVsZXBob25lTnVtYmVyICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgNDIgKi8KKzQ5MCwJLyogT0JKX2ZyaWVuZGx5Q291bnRyeU5hbWUgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgNDMgKi8KKzQ5MSwJLyogT0JKX29yZ2FuaXphdGlvbmFsU3RhdHVzICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgNDUgKi8KKzQ5MiwJLyogT0JKX2phbmV0TWFpbGJveCAgICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgNDYgKi8KKzQ5MywJLyogT0JKX21haWxQcmVmZXJlbmNlT3B0aW9uICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgNDcgKi8KKzQ5NCwJLyogT0JKX2J1aWxkaW5nTmFtZSAgICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgNDggKi8KKzQ5NSwJLyogT0JKX2RTQVF1YWxpdHkgICAgICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgNDkgKi8KKzQ5NiwJLyogT0JKX3NpbmdsZUxldmVsUXVhbGl0eSAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgNTAgKi8KKzQ5NywJLyogT0JKX3N1YnRyZWVNaW5pbXVtUXVhbGl0eSAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgNTEgKi8KKzQ5OCwJLyogT0JKX3N1YnRyZWVNYXhpbXVtUXVhbGl0eSAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgNTIgKi8KKzQ5OSwJLyogT0JKX3BlcnNvbmFsU2lnbmF0dXJlICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgNTMgKi8KKzUwMCwJLyogT0JKX2RJVFJlZGlyZWN0ICAgICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgNTQgKi8KKzUwMSwJLyogT0JKX2F1ZGlvICAgICAgICAgICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgNTUgKi8KKzUwMiwJLyogT0JKX2RvY3VtZW50UHVibGlzaGVyICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDEgNTYgKi8KKzQ0MiwJLyogT0JKX2lBNVN0cmluZ1N5bnRheCAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDMgNCAqLworNDQzLAkvKiBPQkpfY2FzZUlnbm9yZUlBNVN0cmluZ1N5bnRheCAgICAwIDkgMjM0MiAxOTIwMDMwMCAxMDAgMyA1ICovCis0NDQsCS8qIE9CSl9waWxvdE9iamVjdCAgICAgICAgICAgICAgICAgIDAgOSAyMzQyIDE5MjAwMzAwIDEwMCA0IDMgKi8KKzQ0NSwJLyogT0JKX3BpbG90UGVyc29uICAgICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDQgNCAqLworNDQ2LAkvKiBPQkpfYWNjb3VudCAgICAgICAgICAgICAgICAgICAgICAwIDkgMjM0MiAxOTIwMDMwMCAxMDAgNCA1ICovCis0NDcsCS8qIE9CSl9kb2N1bWVudCAgICAgICAgICAgICAgICAgICAgIDAgOSAyMzQyIDE5MjAwMzAwIDEwMCA0IDYgKi8KKzQ0OCwJLyogT0JKX3Jvb20gICAgICAgICAgICAgICAgICAgICAgICAgMCA5IDIzNDIgMTkyMDAzMDAgMTAwIDQgNyAqLworNDQ5LAkvKiBPQkpfZG9jdW1lbnRTZXJpZXMgICAgICAgICAgICAgICAwIDkgMjM0MiAxOTIwMDMwMCAxMDAgNCA5ICovCiszOTIsCS8qIE9CSl9Eb21haW4gICAgICAgICAgICAgICAgICAgICAgIDAgOSAyMzQyIDE5MjAwMzAwIDEwMCA0IDEzICovCis0NTAsCS8qIE9CSl9yRkM4MjJsb2NhbFBhcnQgICAgICAgICAgICAgIDAgOSAyMzQyIDE5MjAwMzAwIDEwMCA0IDE0ICovCis0NTEsCS8qIE9CSl9kTlNEb21haW4gICAgICAgICAgICAgICAgICAgIDAgOSAyMzQyIDE5MjAwMzAwIDEwMCA0IDE1ICovCis0NTIsCS8qIE9CSl9kb21haW5SZWxhdGVkT2JqZWN0ICAgICAgICAgIDAgOSAyMzQyIDE5MjAwMzAwIDEwMCA0IDE3ICovCis0NTMsCS8qIE9CSl9mcmllbmRseUNvdW50cnkgICAgICAgICAgICAgIDAgOSAyMzQyIDE5MjAwMzAwIDEwMCA0IDE4ICovCis0NTQsCS8qIE9CSl9zaW1wbGVTZWN1cml0eU9iamVjdCAgICAgICAgIDAgOSAyMzQyIDE5MjAwMzAwIDEwMCA0IDE5ICovCis0NTUsCS8qIE9CSl9waWxvdE9yZ2FuaXphdGlvbiAgICAgICAgICAgIDAgOSAyMzQyIDE5MjAwMzAwIDEwMCA0IDIwICovCis0NTYsCS8qIE9CSl9waWxvdERTQSAgICAgICAgICAgICAgICAgICAgIDAgOSAyMzQyIDE5MjAwMzAwIDEwMCA0IDIxICovCis0NTcsCS8qIE9CSl9xdWFsaXR5TGFiZWxsZWREYXRhICAgICAgICAgIDAgOSAyMzQyIDE5MjAwMzAwIDEwMCA0IDIyICovCisxODksCS8qIE9CSl9pZF9zbWltZV9tb2QgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAwICovCisxOTAsCS8qIE9CSl9pZF9zbWltZV9jdCAgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAxICovCisxOTEsCS8qIE9CSl9pZF9zbWltZV9hYSAgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAyICovCisxOTIsCS8qIE9CSl9pZF9zbWltZV9hbGcgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAzICovCisxOTMsCS8qIE9CSl9pZF9zbWltZV9jZCAgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiA0ICovCisxOTQsCS8qIE9CSl9pZF9zbWltZV9zcHEgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiA1ICovCisxOTUsCS8qIE9CSl9pZF9zbWltZV9jdGkgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiA2ICovCisxNTgsCS8qIE9CSl94NTA5Q2VydGlmaWNhdGUgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAyMiAxICovCisxNTksCS8qIE9CSl9zZHNpQ2VydGlmaWNhdGUgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAyMiAyICovCisxNjAsCS8qIE9CSl94NTA5Q3JsICAgICAgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAyMyAxICovCisxNDQsCS8qIE9CSl9wYmVfV2l0aFNIQTFBbmQxMjhCaXRSQzQgICAgIDEgMiA4NDAgMTEzNTQ5IDEgMTIgMSAxICovCisxNDUsCS8qIE9CSl9wYmVfV2l0aFNIQTFBbmQ0MEJpdFJDNCAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgMTIgMSAyICovCisxNDYsCS8qIE9CSl9wYmVfV2l0aFNIQTFBbmQzX0tleV9UcmlwbGVERVNfQ0JDIDEgMiA4NDAgMTEzNTQ5IDEgMTIgMSAzICovCisxNDcsCS8qIE9CSl9wYmVfV2l0aFNIQTFBbmQyX0tleV9UcmlwbGVERVNfQ0JDIDEgMiA4NDAgMTEzNTQ5IDEgMTIgMSA0ICovCisxNDgsCS8qIE9CSl9wYmVfV2l0aFNIQTFBbmQxMjhCaXRSQzJfQ0JDIDEgMiA4NDAgMTEzNTQ5IDEgMTIgMSA1ICovCisxNDksCS8qIE9CSl9wYmVfV2l0aFNIQTFBbmQ0MEJpdFJDMl9DQkMgIDEgMiA4NDAgMTEzNTQ5IDEgMTIgMSA2ICovCisxNzEsCS8qIE9CSl9tc19leHRfcmVxICAgICAgICAgICAgICAgICAgIDEgMyA2IDEgNCAxIDMxMSAyIDEgMTQgKi8KKzEzNCwJLyogT0JKX21zX2NvZGVfaW5kICAgICAgICAgICAgICAgICAgMSAzIDYgMSA0IDEgMzExIDIgMSAyMSAqLworMTM1LAkvKiBPQkpfbXNfY29kZV9jb20gICAgICAgICAgICAgICAgICAxIDMgNiAxIDQgMSAzMTEgMiAxIDIyICovCisxMzYsCS8qIE9CSl9tc19jdGxfc2lnbiAgICAgICAgICAgICAgICAgIDEgMyA2IDEgNCAxIDMxMSAxMCAzIDEgKi8KKzEzNywJLyogT0JKX21zX3NnYyAgICAgICAgICAgICAgICAgICAgICAgMSAzIDYgMSA0IDEgMzExIDEwIDMgMyAqLworMTM4LAkvKiBPQkpfbXNfZWZzICAgICAgICAgICAgICAgICAgICAgICAxIDMgNiAxIDQgMSAzMTEgMTAgMyA0ICovCis2NDgsCS8qIE9CSl9tc19zbWFydGNhcmRfbG9naW4gICAgICAgICAgIDEgMyA2IDEgNCAxIDMxMSAyMCAyIDIgKi8KKzY0OSwJLyogT0JKX21zX3VwbiAgICAgICAgICAgICAgICAgICAgICAgMSAzIDYgMSA0IDEgMzExIDIwIDIgMyAqLworNzUxLAkvKiBPQkpfY2FtZWxsaWFfMTI4X2NiYyAgICAgICAgICAgICAxIDIgMzkyIDIwMDAxMSA2MSAxIDEgMSAyICovCis3NTIsCS8qIE9CSl9jYW1lbGxpYV8xOTJfY2JjICAgICAgICAgICAgIDEgMiAzOTIgMjAwMDExIDYxIDEgMSAxIDMgKi8KKzc1MywJLyogT0JKX2NhbWVsbGlhXzI1Nl9jYmMgICAgICAgICAgICAgMSAyIDM5MiAyMDAwMTEgNjEgMSAxIDEgNCAqLworMTk2LAkvKiBPQkpfaWRfc21pbWVfbW9kX2NtcyAgICAgICAgICAgICAxIDIgODQwIDExMzU0OSAxIDkgMTYgMCAxICovCisxOTcsCS8qIE9CSl9pZF9zbWltZV9tb2RfZXNzICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAwIDIgKi8KKzE5OCwJLyogT0JKX2lkX3NtaW1lX21vZF9vaWQgICAgICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMSA5IDE2IDAgMyAqLworMTk5LAkvKiBPQkpfaWRfc21pbWVfbW9kX21zZ192MyAgICAgICAgICAxIDIgODQwIDExMzU0OSAxIDkgMTYgMCA0ICovCisyMDAsCS8qIE9CSl9pZF9zbWltZV9tb2RfZXRzX2VTaWduYXR1cmVfODggMSAyIDg0MCAxMTM1NDkgMSA5IDE2IDAgNSAqLworMjAxLAkvKiBPQkpfaWRfc21pbWVfbW9kX2V0c19lU2lnbmF0dXJlXzk3IDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAwIDYgKi8KKzIwMiwJLyogT0JKX2lkX3NtaW1lX21vZF9ldHNfZVNpZ1BvbGljeV84OCAxIDIgODQwIDExMzU0OSAxIDkgMTYgMCA3ICovCisyMDMsCS8qIE9CSl9pZF9zbWltZV9tb2RfZXRzX2VTaWdQb2xpY3lfOTcgMSAyIDg0MCAxMTM1NDkgMSA5IDE2IDAgOCAqLworMjA0LAkvKiBPQkpfaWRfc21pbWVfY3RfcmVjZWlwdCAgICAgICAgICAxIDIgODQwIDExMzU0OSAxIDkgMTYgMSAxICovCisyMDUsCS8qIE9CSl9pZF9zbWltZV9jdF9hdXRoRGF0YSAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAxIDIgKi8KKzIwNiwJLyogT0JKX2lkX3NtaW1lX2N0X3B1Ymxpc2hDZXJ0ICAgICAgMSAyIDg0MCAxMTM1NDkgMSA5IDE2IDEgMyAqLworMjA3LAkvKiBPQkpfaWRfc21pbWVfY3RfVFNUSW5mbyAgICAgICAgICAxIDIgODQwIDExMzU0OSAxIDkgMTYgMSA0ICovCisyMDgsCS8qIE9CSl9pZF9zbWltZV9jdF9URFRJbmZvICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAxIDUgKi8KKzIwOSwJLyogT0JKX2lkX3NtaW1lX2N0X2NvbnRlbnRJbmZvICAgICAgMSAyIDg0MCAxMTM1NDkgMSA5IDE2IDEgNiAqLworMjEwLAkvKiBPQkpfaWRfc21pbWVfY3RfRFZDU1JlcXVlc3REYXRhICAxIDIgODQwIDExMzU0OSAxIDkgMTYgMSA3ICovCisyMTEsCS8qIE9CSl9pZF9zbWltZV9jdF9EVkNTUmVzcG9uc2VEYXRhIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAxIDggKi8KKzc4NiwJLyogT0JKX2lkX3NtaW1lX2N0X2NvbXByZXNzZWREYXRhICAgMSAyIDg0MCAxMTM1NDkgMSA5IDE2IDEgOSAqLworNzg3LAkvKiBPQkpfaWRfY3RfYXNjaWlUZXh0V2l0aENSTEYgICAgICAxIDIgODQwIDExMzU0OSAxIDkgMTYgMSAyNyAqLworMjEyLAkvKiBPQkpfaWRfc21pbWVfYWFfcmVjZWlwdFJlcXVlc3QgICAxIDIgODQwIDExMzU0OSAxIDkgMTYgMiAxICovCisyMTMsCS8qIE9CSl9pZF9zbWltZV9hYV9zZWN1cml0eUxhYmVsICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAyIDIgKi8KKzIxNCwJLyogT0JKX2lkX3NtaW1lX2FhX21sRXhwYW5kSGlzdG9yeSAgMSAyIDg0MCAxMTM1NDkgMSA5IDE2IDIgMyAqLworMjE1LAkvKiBPQkpfaWRfc21pbWVfYWFfY29udGVudEhpbnQgICAgICAxIDIgODQwIDExMzU0OSAxIDkgMTYgMiA0ICovCisyMTYsCS8qIE9CSl9pZF9zbWltZV9hYV9tc2dTaWdEaWdlc3QgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAyIDUgKi8KKzIxNywJLyogT0JKX2lkX3NtaW1lX2FhX2VuY2FwQ29udGVudFR5cGUgMSAyIDg0MCAxMTM1NDkgMSA5IDE2IDIgNiAqLworMjE4LAkvKiBPQkpfaWRfc21pbWVfYWFfY29udGVudElkZW50aWZpZXIgMSAyIDg0MCAxMTM1NDkgMSA5IDE2IDIgNyAqLworMjE5LAkvKiBPQkpfaWRfc21pbWVfYWFfbWFjVmFsdWUgICAgICAgICAxIDIgODQwIDExMzU0OSAxIDkgMTYgMiA4ICovCisyMjAsCS8qIE9CSl9pZF9zbWltZV9hYV9lcXVpdmFsZW50TGFiZWxzIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAyIDkgKi8KKzIyMSwJLyogT0JKX2lkX3NtaW1lX2FhX2NvbnRlbnRSZWZlcmVuY2UgMSAyIDg0MCAxMTM1NDkgMSA5IDE2IDIgMTAgKi8KKzIyMiwJLyogT0JKX2lkX3NtaW1lX2FhX2VuY3J5cEtleVByZWYgICAgMSAyIDg0MCAxMTM1NDkgMSA5IDE2IDIgMTEgKi8KKzIyMywJLyogT0JKX2lkX3NtaW1lX2FhX3NpZ25pbmdDZXJ0aWZpY2F0ZSAxIDIgODQwIDExMzU0OSAxIDkgMTYgMiAxMiAqLworMjI0LAkvKiBPQkpfaWRfc21pbWVfYWFfc21pbWVFbmNyeXB0Q2VydHMgMSAyIDg0MCAxMTM1NDkgMSA5IDE2IDIgMTMgKi8KKzIyNSwJLyogT0JKX2lkX3NtaW1lX2FhX3RpbWVTdGFtcFRva2VuICAgMSAyIDg0MCAxMTM1NDkgMSA5IDE2IDIgMTQgKi8KKzIyNiwJLyogT0JKX2lkX3NtaW1lX2FhX2V0c19zaWdQb2xpY3lJZCAgMSAyIDg0MCAxMTM1NDkgMSA5IDE2IDIgMTUgKi8KKzIyNywJLyogT0JKX2lkX3NtaW1lX2FhX2V0c19jb21taXRtZW50VHlwZSAxIDIgODQwIDExMzU0OSAxIDkgMTYgMiAxNiAqLworMjI4LAkvKiBPQkpfaWRfc21pbWVfYWFfZXRzX3NpZ25lckxvY2F0aW9uIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAyIDE3ICovCisyMjksCS8qIE9CSl9pZF9zbWltZV9hYV9ldHNfc2lnbmVyQXR0ciAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAyIDE4ICovCisyMzAsCS8qIE9CSl9pZF9zbWltZV9hYV9ldHNfb3RoZXJTaWdDZXJ0IDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAyIDE5ICovCisyMzEsCS8qIE9CSl9pZF9zbWltZV9hYV9ldHNfY29udGVudFRpbWVzdGFtcCAxIDIgODQwIDExMzU0OSAxIDkgMTYgMiAyMCAqLworMjMyLAkvKiBPQkpfaWRfc21pbWVfYWFfZXRzX0NlcnRpZmljYXRlUmVmcyAxIDIgODQwIDExMzU0OSAxIDkgMTYgMiAyMSAqLworMjMzLAkvKiBPQkpfaWRfc21pbWVfYWFfZXRzX1Jldm9jYXRpb25SZWZzIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAyIDIyICovCisyMzQsCS8qIE9CSl9pZF9zbWltZV9hYV9ldHNfY2VydFZhbHVlcyAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAyIDIzICovCisyMzUsCS8qIE9CSl9pZF9zbWltZV9hYV9ldHNfcmV2b2NhdGlvblZhbHVlcyAxIDIgODQwIDExMzU0OSAxIDkgMTYgMiAyNCAqLworMjM2LAkvKiBPQkpfaWRfc21pbWVfYWFfZXRzX2VzY1RpbWVTdGFtcCAxIDIgODQwIDExMzU0OSAxIDkgMTYgMiAyNSAqLworMjM3LAkvKiBPQkpfaWRfc21pbWVfYWFfZXRzX2NlcnRDUkxUaW1lc3RhbXAgMSAyIDg0MCAxMTM1NDkgMSA5IDE2IDIgMjYgKi8KKzIzOCwJLyogT0JKX2lkX3NtaW1lX2FhX2V0c19hcmNoaXZlVGltZVN0YW1wIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAyIDI3ICovCisyMzksCS8qIE9CSl9pZF9zbWltZV9hYV9zaWduYXR1cmVUeXBlICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAyIDI4ICovCisyNDAsCS8qIE9CSl9pZF9zbWltZV9hYV9kdmNzX2R2YyAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAyIDI5ICovCisyNDEsCS8qIE9CSl9pZF9zbWltZV9hbGdfRVNESHdpdGgzREVTICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAzIDEgKi8KKzI0MiwJLyogT0JKX2lkX3NtaW1lX2FsZ19FU0RId2l0aFJDMiAgICAgMSAyIDg0MCAxMTM1NDkgMSA5IDE2IDMgMiAqLworMjQzLAkvKiBPQkpfaWRfc21pbWVfYWxnXzNERVN3cmFwICAgICAgICAxIDIgODQwIDExMzU0OSAxIDkgMTYgMyAzICovCisyNDQsCS8qIE9CSl9pZF9zbWltZV9hbGdfUkMyd3JhcCAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAzIDQgKi8KKzI0NSwJLyogT0JKX2lkX3NtaW1lX2FsZ19FU0RIICAgICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMSA5IDE2IDMgNSAqLworMjQ2LAkvKiBPQkpfaWRfc21pbWVfYWxnX0NNUzNERVN3cmFwICAgICAxIDIgODQwIDExMzU0OSAxIDkgMTYgMyA2ICovCisyNDcsCS8qIE9CSl9pZF9zbWltZV9hbGdfQ01TUkMyd3JhcCAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAzIDcgKi8KKzEyNSwJLyogT0JKX3psaWJfY29tcHJlc3Npb24gICAgICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMSA5IDE2IDMgOCAqLworMjQ4LAkvKiBPQkpfaWRfc21pbWVfY2RfbGRhcCAgICAgICAgICAgICAxIDIgODQwIDExMzU0OSAxIDkgMTYgNCAxICovCisyNDksCS8qIE9CSl9pZF9zbWltZV9zcHFfZXRzX3NxdF91cmkgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiA1IDEgKi8KKzI1MCwJLyogT0JKX2lkX3NtaW1lX3NwcV9ldHNfc3F0X3Vub3RpY2UgMSAyIDg0MCAxMTM1NDkgMSA5IDE2IDUgMiAqLworMjUxLAkvKiBPQkpfaWRfc21pbWVfY3RpX2V0c19wcm9vZk9mT3JpZ2luIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiA2IDEgKi8KKzI1MiwJLyogT0JKX2lkX3NtaW1lX2N0aV9ldHNfcHJvb2ZPZlJlY2VpcHQgMSAyIDg0MCAxMTM1NDkgMSA5IDE2IDYgMiAqLworMjUzLAkvKiBPQkpfaWRfc21pbWVfY3RpX2V0c19wcm9vZk9mRGVsaXZlcnkgMSAyIDg0MCAxMTM1NDkgMSA5IDE2IDYgMyAqLworMjU0LAkvKiBPQkpfaWRfc21pbWVfY3RpX2V0c19wcm9vZk9mU2VuZGVyIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiA2IDQgKi8KKzI1NSwJLyogT0JKX2lkX3NtaW1lX2N0aV9ldHNfcHJvb2ZPZkFwcHJvdmFsIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiA2IDUgKi8KKzI1NiwJLyogT0JKX2lkX3NtaW1lX2N0aV9ldHNfcHJvb2ZPZkNyZWF0aW9uIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiA2IDYgKi8KKzE1MCwJLyogT0JKX2tleUJhZyAgICAgICAgICAgICAgICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMSAxMiAxMCAxIDEgKi8KKzE1MSwJLyogT0JKX3BrY3M4U2hyb3VkZWRLZXlCYWcgICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMSAxMiAxMCAxIDIgKi8KKzE1MiwJLyogT0JKX2NlcnRCYWcgICAgICAgICAgICAgICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMSAxMiAxMCAxIDMgKi8KKzE1MywJLyogT0JKX2NybEJhZyAgICAgICAgICAgICAgICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMSAxMiAxMCAxIDQgKi8KKzE1NCwJLyogT0JKX3NlY3JldEJhZyAgICAgICAgICAgICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMSAxMiAxMCAxIDUgKi8KKzE1NSwJLyogT0JKX3NhZmVDb250ZW50c0JhZyAgICAgICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMSAxMiAxMCAxIDYgKi8KKzM0LAkvKiBPQkpfaWRlYV9jYmMgICAgICAgICAgICAgICAgICAgICAxIDMgNiAxIDQgMSAxODggNyAxIDEgMiAqLwogfTsKIApkaWZmIC0tZ2l0IGEvY3J5cHRvL29iamVjdHMvb2JqX2RhdC5wbCBiL2NyeXB0by9vYmplY3RzL29ial9kYXQucGwKaW5kZXggN2RlMmY3Ny4uYzY3ZjcxYyAxMDA2NDQKLS0tIGEvY3J5cHRvL29iamVjdHMvb2JqX2RhdC5wbAorKysgYi9jcnlwdG8vb2JqZWN0cy9vYmpfZGF0LnBsCkBAIC0yLDkgKzIsNyBAQAogCiAjIGZpeGVzIGJ1ZyBpbiBmbG9hdGluZyBwb2ludCBlbXVsYXRpb24gb24gc3BhcmM2NCB3aGVuCiAjIHRoaXMgc2NyaXB0IHByb2R1Y2VzIG9mZi1ieS1vbmUgb3V0cHV0IG9uIHNwYXJjNjQKLWV2YWwgJ3VzZSBpbnRlZ2VyOyc7Ci0KLXByaW50IFNUREVSUiAiV2FybmluZzogcGVybCBtb2R1bGUgaW50ZWdlciBub3QgZm91bmQuXG4iIGlmICgkQCk7Cit1c2UgaW50ZWdlcjsKIAogc3ViIG9ial9jbXAKIAl7CkBAIC0xNTAsMTMgKzE0OCwxMyBAQAogQGE9Z3JlcChkZWZpbmVkKCRzbnskbmlkeyRffX0pLDAgLi4gJG4pOwogZm9yZWFjaCAoc29ydCB7ICRzbnskbmlkeyRhfX0gY21wICRzbnskbmlkeyRifX0gfSBAYSkKIAl7Ci0JcHVzaChAc24sc3ByaW50ZigiJihuaWRfb2Jqc1slMmRdKSwvKiBcIiRzbnskbmlkeyRffX1cIiAqL1xuIiwkXykpOworCXB1c2goQHNuLHNwcmludGYoIiUyZCxcdC8qIFwiJHNueyRuaWR7JF99fVwiICovXG4iLCRfKSk7CiAJfQogCiBAYT1ncmVwKGRlZmluZWQoJGxueyRuaWR7JF99fSksMCAuLiAkbik7CiBmb3JlYWNoIChzb3J0IHsgJGxueyRuaWR7JGF9fSBjbXAgJGxueyRuaWR7JGJ9fSB9IEBhKQogCXsKLQlwdXNoKEBsbixzcHJpbnRmKCImKG5pZF9vYmpzWyUyZF0pLC8qIFwiJGxueyRuaWR7JF99fVwiICovXG4iLCRfKSk7CisJcHVzaChAbG4sc3ByaW50ZigiJTJkLFx0LyogXCIkbG57JG5pZHskX319XCIgKi9cbiIsJF8pKTsKIAl9CiAKIEBhPWdyZXAoZGVmaW5lZCgkb2JqeyRuaWR7JF99fSksMCAuLiAkbik7CkBAIC0xNjYsNyArMTY0LDcgQEAKIAkkdj0kb2JqZHskbX07CiAJJHYgPX4gcy9MLy9nOwogCSR2ID1+IHMvLC8gL2c7Ci0JcHVzaChAb2Isc3ByaW50ZigiJihuaWRfb2Jqc1slMmRdKSwvKiAlLTMycyAlcyAqL1xuIiwkXywkbSwkdikpOworCXB1c2goQG9iLHNwcmludGYoIiUyZCxcdC8qICUtMzJzICVzICovXG4iLCRfLCRtLCR2KSk7CiAJfQogCiBwcmludCBPVVQgPDwnRU9GJzsKQEAgLTI0MSwxMSArMjM5LDExIEBACiBwcmludGYgT1VUICIjZGVmaW5lIE5VTV9MTiAlZFxuIiwkI2xuKzE7CiBwcmludGYgT1VUICIjZGVmaW5lIE5VTV9PQkogJWRcblxuIiwkI29iKzE7CiAKLXByaW50ZiBPVVQgInN0YXRpYyB1bnNpZ25lZCBjaGFyIGx2YWx1ZXNbJWRdPXtcbiIsJGx2YWx1ZXMrMTsKK3ByaW50ZiBPVVQgInN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGx2YWx1ZXNbJWRdPXtcbiIsJGx2YWx1ZXMrMTsKIHByaW50IE9VVCBAbHZhbHVlczsKIHByaW50IE9VVCAifTtcblxuIjsKIAotcHJpbnRmIE9VVCAic3RhdGljIEFTTjFfT0JKRUNUIG5pZF9vYmpzW05VTV9OSURdPXtcbiI7CitwcmludGYgT1VUICJzdGF0aWMgY29uc3QgQVNOMV9PQkpFQ1QgbmlkX29ianNbTlVNX05JRF09e1xuIjsKIGZvcmVhY2ggKEBvdXQpCiAJewogCWlmIChsZW5ndGgoJF8pID4gNzUpCkBAIC0yNjksMTUgKzI2NywxNSBAQAogCX0KIHByaW50ICBPVVQgIn07XG5cbiI7CiAKLXByaW50ZiBPVVQgInN0YXRpYyBBU04xX09CSkVDVCAqc25fb2Jqc1tOVU1fU05dPXtcbiI7CitwcmludGYgT1VUICJzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNuX29ianNbTlVNX1NOXT17XG4iOwogcHJpbnQgIE9VVCBAc247CiBwcmludCAgT1VUICJ9O1xuXG4iOwogCi1wcmludGYgT1VUICJzdGF0aWMgQVNOMV9PQkpFQ1QgKmxuX29ianNbTlVNX0xOXT17XG4iOworcHJpbnRmIE9VVCAic3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBsbl9vYmpzW05VTV9MTl09e1xuIjsKIHByaW50ICBPVVQgQGxuOwogcHJpbnQgIE9VVCAifTtcblxuIjsKIAotcHJpbnRmIE9VVCAic3RhdGljIEFTTjFfT0JKRUNUICpvYmpfb2Jqc1tOVU1fT0JKXT17XG4iOworcHJpbnRmIE9VVCAic3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBvYmpfb2Jqc1tOVU1fT0JKXT17XG4iOwogcHJpbnQgIE9VVCBAb2I7CiBwcmludCAgT1VUICJ9O1xuXG4iOwogCmRpZmYgLS1naXQgYS9jcnlwdG8vb2JqZWN0cy9vYmpfZXJyLmMgYi9jcnlwdG8vb2JqZWN0cy9vYmpfZXJyLmMKaW5kZXggMTJiNDg4NS4uMmU3YTAzNCAxMDA2NDQKLS0tIGEvY3J5cHRvL29iamVjdHMvb2JqX2Vyci5jCisrKyBiL2NyeXB0by9vYmplY3RzL29ial9lcnIuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIGNyeXB0by9vYmplY3RzL29ial9lcnIuYyAqLwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA1IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDYgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKZGlmZiAtLWdpdCBhL2NyeXB0by9vYmplY3RzL29ial9saWIuYyBiL2NyeXB0by9vYmplY3RzL29ial9saWIuYwppbmRleCA3MDZmYTBiLi4yM2U5ZDQ4IDEwMDY0NAotLS0gYS9jcnlwdG8vb2JqZWN0cy9vYmpfbGliLmMKKysrIGIvY3J5cHRvL29iamVjdHMvb2JqX2xpYi5jCkBAIC02Niw3ICs2Niw4IEBACiAJewogCUFTTjFfT0JKRUNUICpyOwogCWludCBpOwotCWNoYXIgKmxuPU5VTEw7CisJY2hhciAqbG49TlVMTCwqc249TlVMTDsKKwl1bnNpZ25lZCBjaGFyICpkYXRhPU5VTEw7CiAKIAlpZiAobyA9PSBOVUxMKSByZXR1cm4oTlVMTCk7CiAJaWYgKCEoby0+ZmxhZ3MgJiBBU04xX09CSkVDVF9GTEFHX0RZTkFNSUMpKQpAQCAtNzksNDIgKzgwLDQyIEBACiAJCU9CSmVycihPQkpfRl9PQkpfRFVQLEVSUl9SX0FTTjFfTElCKTsKIAkJcmV0dXJuKE5VTEwpOwogCQl9Ci0Jci0+ZGF0YT1PUEVOU1NMX21hbGxvYyhvLT5sZW5ndGgpOwotCWlmIChyLT5kYXRhID09IE5VTEwpCisJZGF0YT1PUEVOU1NMX21hbGxvYyhvLT5sZW5ndGgpOworCWlmIChkYXRhID09IE5VTEwpCiAJCWdvdG8gZXJyOwogCWlmIChvLT5kYXRhICE9IE5VTEwpCi0JCW1lbWNweShyLT5kYXRhLG8tPmRhdGEsby0+bGVuZ3RoKTsKKwkJbWVtY3B5KGRhdGEsby0+ZGF0YSxvLT5sZW5ndGgpOworCS8qIG9uY2UgZGF0YSBhdHRhY2hlZCB0byBvYmplY3QgaXQgcmVtYWlucyBjb25zdCAqLworCXItPmRhdGEgPSBkYXRhOwogCXItPmxlbmd0aD1vLT5sZW5ndGg7CiAJci0+bmlkPW8tPm5pZDsKIAlyLT5sbj1yLT5zbj1OVUxMOwogCWlmIChvLT5sbiAhPSBOVUxMKQogCQl7CiAJCWk9c3RybGVuKG8tPmxuKSsxOwotCQlyLT5sbj1sbj1PUEVOU1NMX21hbGxvYyhpKTsKLQkJaWYgKHItPmxuID09IE5VTEwpIGdvdG8gZXJyOworCQlsbj1PUEVOU1NMX21hbGxvYyhpKTsKKwkJaWYgKGxuID09IE5VTEwpIGdvdG8gZXJyOwogCQltZW1jcHkobG4sby0+bG4saSk7CisJCXItPmxuPWxuOwogCQl9CiAKIAlpZiAoby0+c24gIT0gTlVMTCkKIAkJewotCQljaGFyICpzOwotCiAJCWk9c3RybGVuKG8tPnNuKSsxOwotCQlyLT5zbj1zPU9QRU5TU0xfbWFsbG9jKGkpOwotCQlpZiAoci0+c24gPT0gTlVMTCkgZ290byBlcnI7Ci0JCW1lbWNweShzLG8tPnNuLGkpOworCQlzbj1PUEVOU1NMX21hbGxvYyhpKTsKKwkJaWYgKHNuID09IE5VTEwpIGdvdG8gZXJyOworCQltZW1jcHkoc24sby0+c24saSk7CisJCXItPnNuPXNuOwogCQl9CiAJci0+ZmxhZ3M9by0+ZmxhZ3N8KEFTTjFfT0JKRUNUX0ZMQUdfRFlOQU1JQ3wKIAkJQVNOMV9PQkpFQ1RfRkxBR19EWU5BTUlDX1NUUklOR1N8QVNOMV9PQkpFQ1RfRkxBR19EWU5BTUlDX0RBVEEpOwogCXJldHVybihyKTsKIGVycjoKIAlPQkplcnIoT0JKX0ZfT0JKX0RVUCxFUlJfUl9NQUxMT0NfRkFJTFVSRSk7Ci0JaWYgKHIgIT0gTlVMTCkKLQkJewotCQlpZiAobG4gIT0gTlVMTCkgT1BFTlNTTF9mcmVlKGxuKTsKLQkJaWYgKHItPmRhdGEgIT0gTlVMTCkgT1BFTlNTTF9mcmVlKHItPmRhdGEpOwotCQlPUEVOU1NMX2ZyZWUocik7Ci0JCX0KKwlpZiAobG4gIT0gTlVMTCkJCU9QRU5TU0xfZnJlZShsbik7CisJaWYgKHNuICE9IE5VTEwpCQlPUEVOU1NMX2ZyZWUoc24pOworCWlmIChkYXRhICE9IE5VTEwpCU9QRU5TU0xfZnJlZShkYXRhKTsKKwlpZiAociAhPSBOVUxMKQkJT1BFTlNTTF9mcmVlKHIpOwogCXJldHVybihOVUxMKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2NyeXB0by9vYmplY3RzL29ial94cmVmLmMgYi9jcnlwdG8vb2JqZWN0cy9vYmpfeHJlZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MmVjYTUKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vb2JqZWN0cy9vYmpfeHJlZi5jCkBAIC0wLDAgKzEsMjMxIEBACisvKiBjcnlwdG8vb2JqZWN0cy9vYmpfeHJlZi5jICovCisvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKyAqIHByb2plY3QgMjAwNi4KKyAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoYykgMjAwNiBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKyAqCisgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisgKgorICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisgKgorICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworICogICAgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorICoKKyAqLworCisjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+CisjaW5jbHVkZSAib2JqX3hyZWYuaCIKKworREVDTEFSRV9TVEFDS19PRihuaWRfdHJpcGxlKQorU1RBQ0tfT0YobmlkX3RyaXBsZSkgKnNpZ19hcHAsICpzaWd4X2FwcDsKKworc3RhdGljIGludCBzaWdfY21wKGNvbnN0IG5pZF90cmlwbGUgKmEsIGNvbnN0IG5pZF90cmlwbGUgKmIpCisJeworCXJldHVybiBhLT5zaWduX2lkIC0gYi0+c2lnbl9pZDsKKwl9CisKK0RFQ0xBUkVfT0JKX0JTRUFSQ0hfQ01QX0ZOKG5pZF90cmlwbGUsIG5pZF90cmlwbGUsIHNpZyk7CitJTVBMRU1FTlRfT0JKX0JTRUFSQ0hfQ01QX0ZOKG5pZF90cmlwbGUsIG5pZF90cmlwbGUsIHNpZyk7CisKK3N0YXRpYyBpbnQgc2lnX3NrX2NtcChjb25zdCBuaWRfdHJpcGxlICogY29uc3QgKmEsIGNvbnN0IG5pZF90cmlwbGUgKiBjb25zdCAqYikKKwl7CisJcmV0dXJuICgqYSktPnNpZ25faWQgLSAoKmIpLT5zaWduX2lkOworCX0KKworREVDTEFSRV9PQkpfQlNFQVJDSF9DTVBfRk4oY29uc3QgbmlkX3RyaXBsZSAqLCBjb25zdCBuaWRfdHJpcGxlICosIHNpZ3gpOworCitzdGF0aWMgaW50IHNpZ3hfY21wKGNvbnN0IG5pZF90cmlwbGUgKiBjb25zdCAqYSwgY29uc3QgbmlkX3RyaXBsZSAqIGNvbnN0ICpiKQorCXsKKwlpbnQgcmV0OworCXJldCA9ICgqYSktPmhhc2hfaWQgLSAoKmIpLT5oYXNoX2lkOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0dXJuICgqYSktPnBrZXlfaWQgLSAoKmIpLT5wa2V5X2lkOworCX0KKworSU1QTEVNRU5UX09CSl9CU0VBUkNIX0NNUF9GTihjb25zdCBuaWRfdHJpcGxlICosIGNvbnN0IG5pZF90cmlwbGUgKiwgc2lneCk7CisKK2ludCBPQkpfZmluZF9zaWdpZF9hbGdzKGludCBzaWduaWQsIGludCAqcGRpZ19uaWQsIGludCAqcHBrZXlfbmlkKQorCXsKKwluaWRfdHJpcGxlIHRtcDsKKwljb25zdCBuaWRfdHJpcGxlICpydiA9IE5VTEw7CisJdG1wLnNpZ25faWQgPSBzaWduaWQ7CisKKwlpZiAoc2lnX2FwcCkKKwkJeworCQlpbnQgaWR4ID0gc2tfbmlkX3RyaXBsZV9maW5kKHNpZ19hcHAsICZ0bXApOworCQlpZiAoaWR4ID49IDApCisJCQlydiA9IHNrX25pZF90cmlwbGVfdmFsdWUoc2lnX2FwcCwgaWR4KTsKKwkJfQorCisjaWZuZGVmIE9CSl9YUkVGX1RFU1QyCisJaWYgKHJ2ID09IE5VTEwpCisJCXsKKwkJcnYgPSBPQkpfYnNlYXJjaF9zaWcoJnRtcCwgc2lnb2lkX3NydCwKKwkJCQkgc2l6ZW9mKHNpZ29pZF9zcnQpIC8gc2l6ZW9mKG5pZF90cmlwbGUpKTsKKwkJfQorI2VuZGlmCisJaWYgKHJ2ID09IE5VTEwpCisJCXJldHVybiAwOworCSpwZGlnX25pZCA9IHJ2LT5oYXNoX2lkOworCSpwcGtleV9uaWQgPSBydi0+cGtleV9pZDsKKwlyZXR1cm4gMTsKKwl9CisKK2ludCBPQkpfZmluZF9zaWdpZF9ieV9hbGdzKGludCAqcHNpZ25pZCwgaW50IGRpZ19uaWQsIGludCBwa2V5X25pZCkKKwl7CisJbmlkX3RyaXBsZSB0bXA7CisJY29uc3QgbmlkX3RyaXBsZSAqdD0mdG1wOworCWNvbnN0IG5pZF90cmlwbGUgKipydiA9IE5VTEw7CisKKwl0bXAuaGFzaF9pZCA9IGRpZ19uaWQ7CisJdG1wLnBrZXlfaWQgPSBwa2V5X25pZDsKKworCWlmIChzaWd4X2FwcCkKKwkJeworCQlpbnQgaWR4ID0gc2tfbmlkX3RyaXBsZV9maW5kKHNpZ3hfYXBwLCAmdG1wKTsKKwkJaWYgKGlkeCA+PSAwKQorCQkJeworCQkJdCA9IHNrX25pZF90cmlwbGVfdmFsdWUoc2lneF9hcHAsIGlkeCk7CisJCQlydiA9ICZ0OworCQkJfQorCQl9CisKKyNpZm5kZWYgT0JKX1hSRUZfVEVTVDIKKwlpZiAocnYgPT0gTlVMTCkKKwkJeworCQlydiA9IE9CSl9ic2VhcmNoX3NpZ3goJnQsIHNpZ29pZF9zcnRfeHJlZiwKKwkJCQkgc2l6ZW9mKHNpZ29pZF9zcnRfeHJlZikgLyBzaXplb2YobmlkX3RyaXBsZSAqKQorCQkJCSApOworCQl9CisjZW5kaWYKKwlpZiAocnYgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisJKnBzaWduaWQgPSAoKnJ2KS0+c2lnbl9pZDsKKwlyZXR1cm4gMTsKKwl9CisKK2ludCBPQkpfYWRkX3NpZ2lkKGludCBzaWduaWQsIGludCBkaWdfaWQsIGludCBwa2V5X2lkKQorCXsKKwluaWRfdHJpcGxlICpudHI7CisJaWYgKCFzaWdfYXBwKQorCQlzaWdfYXBwID0gc2tfbmlkX3RyaXBsZV9uZXcoc2lnX3NrX2NtcCk7CisJaWYgKCFzaWdfYXBwKQorCQlyZXR1cm4gMDsKKwlpZiAoIXNpZ3hfYXBwKQorCQlzaWd4X2FwcCA9IHNrX25pZF90cmlwbGVfbmV3KHNpZ3hfY21wKTsKKwlpZiAoIXNpZ3hfYXBwKQorCQlyZXR1cm4gMDsKKwludHIgPSBPUEVOU1NMX21hbGxvYyhzaXplb2YoaW50KSAqIDMpOworCWlmICghbnRyKQorCQlyZXR1cm4gMDsKKwludHItPnNpZ25faWQgPSBzaWduaWQ7CisJbnRyLT5oYXNoX2lkID0gZGlnX2lkOworCW50ci0+cGtleV9pZCA9IHBrZXlfaWQ7CisKKwlpZiAoIXNrX25pZF90cmlwbGVfcHVzaChzaWdfYXBwLCBudHIpKQorCQl7CisJCU9QRU5TU0xfZnJlZShudHIpOworCQlyZXR1cm4gMDsKKwkJfQorCisJaWYgKCFza19uaWRfdHJpcGxlX3B1c2goc2lneF9hcHAsIG50cikpCisJCXJldHVybiAwOworCisJc2tfbmlkX3RyaXBsZV9zb3J0KHNpZ19hcHApOworCXNrX25pZF90cmlwbGVfc29ydChzaWd4X2FwcCk7CisKKwlyZXR1cm4gMTsKKwl9CisKK3N0YXRpYyB2b2lkIHNpZF9mcmVlKG5pZF90cmlwbGUgKnR0KQorCXsKKwlPUEVOU1NMX2ZyZWUodHQpOworCX0KKwordm9pZCBPQkpfc2lnaWRfZnJlZSh2b2lkKQorCXsKKwlpZiAoc2lnX2FwcCkKKwkJeworCQlza19uaWRfdHJpcGxlX3BvcF9mcmVlKHNpZ19hcHAsIHNpZF9mcmVlKTsKKwkJc2lnX2FwcCA9IE5VTEw7CisJCX0KKwlpZiAoc2lneF9hcHApCisJCXsKKwkJc2tfbmlkX3RyaXBsZV9mcmVlKHNpZ3hfYXBwKTsKKwkJc2lneF9hcHAgPSBOVUxMOworCQl9CisJfQorCQkKKyNpZmRlZiBPQkpfWFJFRl9URVNUCisKK21haW4oKQorCXsKKwlpbnQgbjEsIG4yLCBuMzsKKworCWludCBpLCBydjsKKyNpZmRlZiBPQkpfWFJFRl9URVNUMgorCWZvciAoaSA9IDA7IGkgPAlzaXplb2Yoc2lnb2lkX3NydCkgLyBzaXplb2YobmlkX3RyaXBsZSk7IGkrKykKKwkJeworCQlPQkpfYWRkX3NpZ2lkKHNpZ29pZF9zcnRbaV1bMF0sIHNpZ29pZF9zcnRbaV1bMV0sCisJCQkJc2lnb2lkX3NydFtpXVsyXSk7CisJCX0KKyNlbmRpZgorCisJZm9yIChpID0gMDsgaSA8CXNpemVvZihzaWdvaWRfc3J0KSAvIHNpemVvZihuaWRfdHJpcGxlKTsgaSsrKQorCQl7CisJCW4xID0gc2lnb2lkX3NydFtpXVswXTsKKwkJcnYgPSBPQkpfZmluZF9zaWdpZF9hbGdzKG4xLCAmbjIsICZuMyk7CisJCXByaW50ZigiRm9yd2FyZDogJWQsICVzICVzICVzXG4iLCBydiwKKwkJCU9CSl9uaWQybG4objEpLCBPQkpfbmlkMmxuKG4yKSwgT0JKX25pZDJsbihuMykpOworCQluMT0wOworCQlydiA9IE9CSl9maW5kX3NpZ2lkX2J5X2FsZ3MoJm4xLCBuMiwgbjMpOworCQlwcmludGYoIlJldmVyc2U6ICVkLCAlcyAlcyAlc1xuIiwgcnYsCisJCQlPQkpfbmlkMmxuKG4xKSwgT0JKX25pZDJsbihuMiksIE9CSl9uaWQybG4objMpKTsKKwkJfQorCX0KKwkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY3J5cHRvL29iamVjdHMvb2JqX3hyZWYuaCBiL2NyeXB0by9vYmplY3RzL29ial94cmVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDViOWI4ZQotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9vYmplY3RzL29ial94cmVmLmgKQEAgLTAsMCArMSw3NSBAQAorLyogQVVUT0dFTkVSQVRFRCBCWSBvYmp4cmVmLnBsLCBETyBOT1QgRURJVCAqLworCit0eXBlZGVmIHN0cnVjdAorCXsKKwlpbnQgc2lnbl9pZDsKKwlpbnQgaGFzaF9pZDsKKwlpbnQgcGtleV9pZDsKKwl9IG5pZF90cmlwbGU7CisKK3N0YXRpYyBjb25zdCBuaWRfdHJpcGxlIHNpZ29pZF9zcnRbXSA9CisJeworCXtOSURfbWQyV2l0aFJTQUVuY3J5cHRpb24sIE5JRF9tZDIsIE5JRF9yc2FFbmNyeXB0aW9ufSwKKwl7TklEX21kNVdpdGhSU0FFbmNyeXB0aW9uLCBOSURfbWQ1LCBOSURfcnNhRW5jcnlwdGlvbn0sCisJe05JRF9zaGFXaXRoUlNBRW5jcnlwdGlvbiwgTklEX3NoYSwgTklEX3JzYUVuY3J5cHRpb259LAorCXtOSURfc2hhMVdpdGhSU0FFbmNyeXB0aW9uLCBOSURfc2hhMSwgTklEX3JzYUVuY3J5cHRpb259LAorCXtOSURfZHNhV2l0aFNIQSwgTklEX3NoYSwgTklEX2RzYX0sCisJe05JRF9kc2FXaXRoU0hBMV8yLCBOSURfc2hhMSwgTklEX2RzYV8yfSwKKwl7TklEX21kYzJXaXRoUlNBLCBOSURfbWRjMiwgTklEX3JzYUVuY3J5cHRpb259LAorCXtOSURfbWQ1V2l0aFJTQSwgTklEX21kNSwgTklEX3JzYX0sCisJe05JRF9kc2FXaXRoU0hBMSwgTklEX3NoYTEsIE5JRF9kc2F9LAorCXtOSURfc2hhMVdpdGhSU0EsIE5JRF9zaGExLCBOSURfcnNhfSwKKwl7TklEX3JpcGVtZDE2MFdpdGhSU0EsIE5JRF9yaXBlbWQxNjAsIE5JRF9yc2FFbmNyeXB0aW9ufSwKKwl7TklEX21kNFdpdGhSU0FFbmNyeXB0aW9uLCBOSURfbWQ0LCBOSURfcnNhRW5jcnlwdGlvbn0sCisJe05JRF9lY2RzYV93aXRoX1NIQTEsIE5JRF9zaGExLCBOSURfWDlfNjJfaWRfZWNQdWJsaWNLZXl9LAorCXtOSURfc2hhMjU2V2l0aFJTQUVuY3J5cHRpb24sIE5JRF9zaGEyNTYsIE5JRF9yc2FFbmNyeXB0aW9ufSwKKwl7TklEX3NoYTM4NFdpdGhSU0FFbmNyeXB0aW9uLCBOSURfc2hhMzg0LCBOSURfcnNhRW5jcnlwdGlvbn0sCisJe05JRF9zaGE1MTJXaXRoUlNBRW5jcnlwdGlvbiwgTklEX3NoYTUxMiwgTklEX3JzYUVuY3J5cHRpb259LAorCXtOSURfc2hhMjI0V2l0aFJTQUVuY3J5cHRpb24sIE5JRF9zaGEyMjQsIE5JRF9yc2FFbmNyeXB0aW9ufSwKKwl7TklEX2VjZHNhX3dpdGhfUmVjb21tZW5kZWQsIE5JRF91bmRlZiwgTklEX1g5XzYyX2lkX2VjUHVibGljS2V5fSwKKwl7TklEX2VjZHNhX3dpdGhfU3BlY2lmaWVkLCBOSURfdW5kZWYsIE5JRF9YOV82Ml9pZF9lY1B1YmxpY0tleX0sCisJe05JRF9lY2RzYV93aXRoX1NIQTIyNCwgTklEX3NoYTIyNCwgTklEX1g5XzYyX2lkX2VjUHVibGljS2V5fSwKKwl7TklEX2VjZHNhX3dpdGhfU0hBMjU2LCBOSURfc2hhMjU2LCBOSURfWDlfNjJfaWRfZWNQdWJsaWNLZXl9LAorCXtOSURfZWNkc2Ffd2l0aF9TSEEzODQsIE5JRF9zaGEzODQsIE5JRF9YOV82Ml9pZF9lY1B1YmxpY0tleX0sCisJe05JRF9lY2RzYV93aXRoX1NIQTUxMiwgTklEX3NoYTUxMiwgTklEX1g5XzYyX2lkX2VjUHVibGljS2V5fSwKKwl7TklEX2RzYV93aXRoX1NIQTIyNCwgTklEX3NoYTIyNCwgTklEX2RzYX0sCisJe05JRF9kc2Ffd2l0aF9TSEEyNTYsIE5JRF9zaGEyNTYsIE5JRF9kc2F9LAorCXtOSURfaWRfR29zdFIzNDExXzk0X3dpdGhfR29zdFIzNDEwXzIwMDEsIE5JRF9pZF9Hb3N0UjM0MTFfOTQsIE5JRF9pZF9Hb3N0UjM0MTBfMjAwMX0sCisJe05JRF9pZF9Hb3N0UjM0MTFfOTRfd2l0aF9Hb3N0UjM0MTBfOTQsIE5JRF9pZF9Hb3N0UjM0MTFfOTQsIE5JRF9pZF9Hb3N0UjM0MTBfOTR9LAorCXtOSURfaWRfR29zdFIzNDExXzk0X3dpdGhfR29zdFIzNDEwXzk0X2NjLCBOSURfaWRfR29zdFIzNDExXzk0LCBOSURfaWRfR29zdFIzNDEwXzk0X2NjfSwKKwl7TklEX2lkX0dvc3RSMzQxMV85NF93aXRoX0dvc3RSMzQxMF8yMDAxX2NjLCBOSURfaWRfR29zdFIzNDExXzk0LCBOSURfaWRfR29zdFIzNDEwXzIwMDFfY2N9LAorCX07CisKK3N0YXRpYyBjb25zdCBuaWRfdHJpcGxlICogY29uc3Qgc2lnb2lkX3NydF94cmVmW10gPQorCXsKKwkmc2lnb2lkX3NydFsxN10sCisJJnNpZ29pZF9zcnRbMThdLAorCSZzaWdvaWRfc3J0WzBdLAorCSZzaWdvaWRfc3J0WzFdLAorCSZzaWdvaWRfc3J0WzddLAorCSZzaWdvaWRfc3J0WzJdLAorCSZzaWdvaWRfc3J0WzRdLAorCSZzaWdvaWRfc3J0WzNdLAorCSZzaWdvaWRfc3J0WzldLAorCSZzaWdvaWRfc3J0WzVdLAorCSZzaWdvaWRfc3J0WzhdLAorCSZzaWdvaWRfc3J0WzEyXSwKKwkmc2lnb2lkX3NydFs2XSwKKwkmc2lnb2lkX3NydFsxMF0sCisJJnNpZ29pZF9zcnRbMTFdLAorCSZzaWdvaWRfc3J0WzEzXSwKKwkmc2lnb2lkX3NydFsyNF0sCisJJnNpZ29pZF9zcnRbMjBdLAorCSZzaWdvaWRfc3J0WzE0XSwKKwkmc2lnb2lkX3NydFsyMV0sCisJJnNpZ29pZF9zcnRbMTVdLAorCSZzaWdvaWRfc3J0WzIyXSwKKwkmc2lnb2lkX3NydFsxNl0sCisJJnNpZ29pZF9zcnRbMjNdLAorCSZzaWdvaWRfc3J0WzE5XSwKKwkmc2lnb2lkX3NydFsyNV0sCisJJnNpZ29pZF9zcnRbMjZdLAorCSZzaWdvaWRfc3J0WzI3XSwKKwkmc2lnb2lkX3NydFsyOF0sCisJfTsKKwpkaWZmIC0tZ2l0IGEvY3J5cHRvL29iamVjdHMvb2JqX3hyZWYudHh0IGIvY3J5cHRvL29iamVjdHMvb2JqX3hyZWYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NWIzZDMKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vb2JqZWN0cy9vYmpfeHJlZi50eHQKQEAgLTAsMCArMSw0MiBAQAorIyBPSUQgY3Jvc3MgcmVmZXJlbmNlIHRhYmxlLgorIyBMaW5rcyBzaWduYXR1cmVzIE9JRHMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBwdWJsaWMga2V5IGFsZ29yaXRobXMKKyMgYW5kIGRpZ2VzdHMuCisKK21kMldpdGhSU0FFbmNyeXB0aW9uCW1kMglyc2FFbmNyeXB0aW9uCittZDVXaXRoUlNBRW5jcnlwdGlvbgltZDUJcnNhRW5jcnlwdGlvbgorc2hhV2l0aFJTQUVuY3J5cHRpb24Jc2hhCXJzYUVuY3J5cHRpb24KK3NoYTFXaXRoUlNBRW5jcnlwdGlvbglzaGExCXJzYUVuY3J5cHRpb24KK21kNFdpdGhSU0FFbmNyeXB0aW9uCW1kNAlyc2FFbmNyeXB0aW9uCitzaGEyNTZXaXRoUlNBRW5jcnlwdGlvbiBzaGEyNTYJcnNhRW5jcnlwdGlvbgorc2hhMzg0V2l0aFJTQUVuY3J5cHRpb24Jc2hhMzg0CXJzYUVuY3J5cHRpb24KK3NoYTUxMldpdGhSU0FFbmNyeXB0aW9uCXNoYTUxMglyc2FFbmNyeXB0aW9uCitzaGEyMjRXaXRoUlNBRW5jcnlwdGlvbglzaGEyMjQJcnNhRW5jcnlwdGlvbgorbWRjMldpdGhSU0EJCW1kYzIJcnNhRW5jcnlwdGlvbgorcmlwZW1kMTYwV2l0aFJTQQlyaXBlbWQxNjAgcnNhRW5jcnlwdGlvbgorCisjIEFsdGVybmF0aXZlIGRlcHJlY2F0ZWQgT0lEcy4gQnkgdXNpbmcgdGhlIG9sZGVyICJyc2EiIE9JRCB0aGlzCisjIHR5cGUgd2lsbCBiZSByZWNvZ25pemVkIGJ5IG5vdCBub3JtYWxseSB1c2VkLgorCittZDVXaXRoUlNBCQltZDUJcnNhCitzaGExV2l0aFJTQQkJc2hhMQlyc2EKKworZHNhV2l0aFNIQQkJc2hhCWRzYQorZHNhV2l0aFNIQTEJCXNoYTEJZHNhCisKK2RzYVdpdGhTSEExXzIJCXNoYTEJZHNhXzIKKworZWNkc2Ffd2l0aF9TSEExCQlzaGExCVg5XzYyX2lkX2VjUHVibGljS2V5CitlY2RzYV93aXRoX1NIQTIyNAlzaGEyMjQJWDlfNjJfaWRfZWNQdWJsaWNLZXkKK2VjZHNhX3dpdGhfU0hBMjU2CXNoYTI1NglYOV82Ml9pZF9lY1B1YmxpY0tleQorZWNkc2Ffd2l0aF9TSEEzODQJc2hhMzg0CVg5XzYyX2lkX2VjUHVibGljS2V5CitlY2RzYV93aXRoX1NIQTUxMglzaGE1MTIJWDlfNjJfaWRfZWNQdWJsaWNLZXkKK2VjZHNhX3dpdGhfUmVjb21tZW5kZWQJdW5kZWYJWDlfNjJfaWRfZWNQdWJsaWNLZXkKK2VjZHNhX3dpdGhfU3BlY2lmaWVkCXVuZGVmCVg5XzYyX2lkX2VjUHVibGljS2V5CisKK2RzYV93aXRoX1NIQTIyNAkJc2hhMjI0CWRzYQorZHNhX3dpdGhfU0hBMjU2CQlzaGEyNTYJZHNhCisKK2lkX0dvc3RSMzQxMV85NF93aXRoX0dvc3RSMzQxMF8yMDAxCWlkX0dvc3RSMzQxMV85NCBpZF9Hb3N0UjM0MTBfMjAwMQoraWRfR29zdFIzNDExXzk0X3dpdGhfR29zdFIzNDEwXzk0CWlkX0dvc3RSMzQxMV85NCBpZF9Hb3N0UjM0MTBfOTQKK2lkX0dvc3RSMzQxMV85NF93aXRoX0dvc3RSMzQxMF85NF9jYwlpZF9Hb3N0UjM0MTFfOTQgaWRfR29zdFIzNDEwXzk0X2NjCitpZF9Hb3N0UjM0MTFfOTRfd2l0aF9Hb3N0UjM0MTBfMjAwMV9jYwlpZF9Hb3N0UjM0MTFfOTQgaWRfR29zdFIzNDEwXzIwMDFfY2MKZGlmZiAtLWdpdCBhL2NyeXB0by9vYmplY3RzL29iamVjdHMuaCBiL2NyeXB0by9vYmplY3RzL29iamVjdHMuaAppbmRleCA3MjQyZjc2Li5iZDBlZTUyIDEwMDY0NAotLS0gYS9jcnlwdG8vb2JqZWN0cy9vYmplY3RzLmgKKysrIGIvY3J5cHRvL29iamVjdHMvb2JqZWN0cy5oCkBAIC0xMDExLDEwICsxMDExLDkxIEBACiBpbnQJCU9CSl9sbjJuaWQoY29uc3QgY2hhciAqcyk7CiBpbnQJCU9CSl9zbjJuaWQoY29uc3QgY2hhciAqcyk7CiBpbnQJCU9CSl9jbXAoY29uc3QgQVNOMV9PQkpFQ1QgKmEsY29uc3QgQVNOMV9PQkpFQ1QgKmIpOwotY29uc3QgY2hhciAqCU9CSl9ic2VhcmNoKGNvbnN0IGNoYXIgKmtleSxjb25zdCBjaGFyICpiYXNlLGludCBudW0saW50IHNpemUsCi0JaW50ICgqY21wKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpOwotY29uc3QgY2hhciAqCU9CSl9ic2VhcmNoX2V4KGNvbnN0IGNoYXIgKmtleSxjb25zdCBjaGFyICpiYXNlLGludCBudW0sCi0JaW50IHNpemUsIGludCAoKmNtcCkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopLCBpbnQgZmxhZ3MpOworY29uc3Qgdm9pZCAqCU9CSl9ic2VhcmNoXyhjb25zdCB2b2lkICprZXksY29uc3Qgdm9pZCAqYmFzZSxpbnQgbnVtLGludCBzaXplLAorCQkJICAgICBpbnQgKCpjbXApKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSk7Citjb25zdCB2b2lkICoJT0JKX2JzZWFyY2hfZXhfKGNvbnN0IHZvaWQgKmtleSxjb25zdCB2b2lkICpiYXNlLGludCBudW0sCisJCQkJaW50IHNpemUsCisJCQkJaW50ICgqY21wKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKiksCisJCQkJaW50IGZsYWdzKTsKKworI2RlZmluZSBfREVDTEFSRV9PQkpfQlNFQVJDSF9DTVBfRk4oc2NvcGUsIHR5cGUxLCB0eXBlMiwgbm0pCVwKKyAgc3RhdGljIGludCBubSMjX2NtcF9CU0VBUkNIX0NNUF9GTihjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKik7IFwKKyAgc3RhdGljIGludCBubSMjX2NtcCh0eXBlMSBjb25zdCAqLCB0eXBlMiBjb25zdCAqKTsgXAorICBzY29wZSB0eXBlMiAqIE9CSl9ic2VhcmNoXyMjbm0odHlwZTEgKmtleSwgdHlwZTIgY29uc3QgKmJhc2UsIGludCBudW0pCisKKyNkZWZpbmUgREVDTEFSRV9PQkpfQlNFQVJDSF9DTVBfRk4odHlwZTEsIHR5cGUyLCBjbXApCVwKKyAgX0RFQ0xBUkVfT0JKX0JTRUFSQ0hfQ01QX0ZOKHN0YXRpYywgdHlwZTEsIHR5cGUyLCBjbXApCisjZGVmaW5lIERFQ0xBUkVfT0JKX0JTRUFSQ0hfR0xPQkFMX0NNUF9GTih0eXBlMSwgdHlwZTIsIG5tKQlcCisgIHR5cGUyICogT0JKX2JzZWFyY2hfIyNubSh0eXBlMSAqa2V5LCB0eXBlMiBjb25zdCAqYmFzZSwgaW50IG51bSkKKworLyoKKyAqIFVuc29sdmVkIHByb2JsZW06IGlmIGEgdHlwZSBpcyBhY3R1YWxseSBhIHBvaW50ZXIgdHlwZSwgbGlrZQorICogbmlkX3RyaXBsZSBpcywgdGhlbiBpdHMgaW1wb3NzaWJsZSB0byBnZXQgYSBjb25zdCB3aGVyZSB5b3UgbmVlZAorICogaXQuIENvbnNpZGVyOgorICoKKyAqIHR5cGVkZWYgaW50IG5pZF90cmlwbGVbM107CisgKiBjb25zdCB2b2lkICphXzsKKyAqIGNvbnN0IG5pZF90cmlwbGUgY29uc3QgKmEgPSBhXzsKKyAqCisgKiBUaGUgYXNzaWduZW1lbnQgZGlzY2FyZHMgYSBjb25zdCBiZWNhdXNlIHdoYXQgeW91IHJlYWxseSB3YW50IGlzOgorICoKKyAqIGNvbnN0IGludCBjb25zdCAqIGNvbnN0ICphID0gYV87CisgKgorICogQnV0IGlmIHlvdSBkbyB0aGF0LCB5b3UgbG9zZSB0aGUgZmFjdCB0aGF0IGEgaXMgYW4gYXJyYXkgb2YgMyBpbnRzLAorICogd2hpY2ggYnJlYWtzIGNvbXBhcmlzb24gZnVuY3Rpb25zLgorICoKKyAqIFRodXMgd2UgZW5kIHVwIGhhdmluZyB0byBjYXN0LCBzYWRseSwgb3IgdW5wYWNrIHRoZQorICogZGVjbGFyYXRpb25zLiBPciwgYXMgSSBmaW5hbGx5IGRpZCBpbiB0aGlzIGNhc2UsIGRlbGNhcmUgbmlkX3RyaXBsZQorICogdG8gYmUgYSBzdHJ1Y3QsIHdoaWNoIGl0IHNob3VsZCBoYXZlIGJlZW4gaW4gdGhlIGZpcnN0IHBsYWNlLgorICoKKyAqIEJlbiwgQXVndXN0IDIwMDguCisgKgorICogQWxzbywgc3RyaWN0bHkgc3BlYWtpbmcgbm90IGFsbCB0eXBlcyBuZWVkIGJlIGNvbnN0LCBidXQgaGFuZGxpbmcKKyAqIHRoZSBub24tY29uc3RuZXNzIG1lYW5zIGEgbG90IG9mIGNvbXBsaWNhdGlvbiwgYW5kIGluIHByYWN0aWNlCisgKiBjb21wYXJpc29uIHJvdXRpbmVzIGRvIGFsd2F5cyBub3QgdG91Y2ggdGhlaXIgYXJndW1lbnRzLgorICovCisKKyNkZWZpbmUgSU1QTEVNRU5UX09CSl9CU0VBUkNIX0NNUF9GTih0eXBlMSwgdHlwZTIsIG5tKQlcCisgIHN0YXRpYyBpbnQgbm0jI19jbXBfQlNFQVJDSF9DTVBfRk4oY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfKQlcCisgICAgICB7IFwKKyAgICAgIHR5cGUxIGNvbnN0ICphID0gYV87IFwKKyAgICAgIHR5cGUyIGNvbnN0ICpiID0gYl87IFwKKyAgICAgIHJldHVybiBubSMjX2NtcChhLGIpOyBcCisgICAgICB9IFwKKyAgc3RhdGljIHR5cGUyICpPQkpfYnNlYXJjaF8jI25tKHR5cGUxICprZXksIHR5cGUyIGNvbnN0ICpiYXNlLCBpbnQgbnVtKSBcCisgICAgICB7IFwKKyAgICAgIHJldHVybiAodHlwZTIgKilPQkpfYnNlYXJjaF8oa2V5LCBiYXNlLCBudW0sIHNpemVvZih0eXBlMiksIFwKKwkJCQkJbm0jI19jbXBfQlNFQVJDSF9DTVBfRk4pOyBcCisgICAgICB9IFwKKyAgICAgIGV4dGVybiB2b2lkIGR1bW15X3Byb3RvdHlwZSh2b2lkKQorCisjZGVmaW5lIElNUExFTUVOVF9PQkpfQlNFQVJDSF9HTE9CQUxfQ01QX0ZOKHR5cGUxLCB0eXBlMiwgbm0pCVwKKyAgc3RhdGljIGludCBubSMjX2NtcF9CU0VBUkNIX0NNUF9GTihjb25zdCB2b2lkICphXywgY29uc3Qgdm9pZCAqYl8pCVwKKyAgICAgIHsgXAorICAgICAgdHlwZTEgY29uc3QgKmEgPSBhXzsgXAorICAgICAgdHlwZTIgY29uc3QgKmIgPSBiXzsgXAorICAgICAgcmV0dXJuIG5tIyNfY21wKGEsYik7IFwKKyAgICAgIH0gXAorICB0eXBlMiAqT0JKX2JzZWFyY2hfIyNubSh0eXBlMSAqa2V5LCB0eXBlMiBjb25zdCAqYmFzZSwgaW50IG51bSkgXAorICAgICAgeyBcCisgICAgICByZXR1cm4gKHR5cGUyICopT0JKX2JzZWFyY2hfKGtleSwgYmFzZSwgbnVtLCBzaXplb2YodHlwZTIpLCBcCisJCQkJCW5tIyNfY21wX0JTRUFSQ0hfQ01QX0ZOKTsgXAorICAgICAgfSBcCisgICAgICBleHRlcm4gdm9pZCBkdW1teV9wcm90b3R5cGUodm9pZCkKKworI2RlZmluZSBPQkpfYnNlYXJjaCh0eXBlMSxrZXksdHlwZTIsYmFzZSxudW0sY21wKQkJCSAgICAgICBcCisgICgodHlwZTIgKilPQkpfYnNlYXJjaF8oQ0hFQ0tFRF9QVFJfT0YodHlwZTEsa2V5KSxDSEVDS0VEX1BUUl9PRih0eXBlMixiYXNlKSwgXAorCQkJIG51bSxzaXplb2YodHlwZTIpLAkJCQlcCisJCQkgKCh2b2lkKUNIRUNLRURfUFRSX09GKHR5cGUxLGNtcCMjX3R5cGVfMSksCVwKKwkJCSAgKHZvaWQpQ0hFQ0tFRF9QVFJfT0YodHlwZTIsY21wIyNfdHlwZV8yKSwJXAorCQkJICBjbXAjI19CU0VBUkNIX0NNUF9GTikpKQorCisjZGVmaW5lIE9CSl9ic2VhcmNoX2V4KHR5cGUxLGtleSx0eXBlMixiYXNlLG51bSxjbXAsZmxhZ3MpCQkJXAorICAoKHR5cGUyICopT0JKX2JzZWFyY2hfZXhfKENIRUNLRURfUFRSX09GKHR5cGUxLGtleSksQ0hFQ0tFRF9QVFJfT0YodHlwZTIsYmFzZSksIFwKKwkJCSBudW0sc2l6ZW9mKHR5cGUyKSwJCQkJXAorCQkJICgodm9pZClDSEVDS0VEX1BUUl9PRih0eXBlMSxjbXAjI190eXBlXzEpLAlcCisJCQkgICh2b2lkKXR5cGVfMj1DSEVDS0VEX1BUUl9PRih0eXBlMixjbXAjI190eXBlXzIpLCBcCisJCQkgIGNtcCMjX0JTRUFSQ0hfQ01QX0ZOKSksZmxhZ3MpCiAKIGludAkJT0JKX25ld19uaWQoaW50IG51bSk7CiBpbnQJCU9CSl9hZGRfb2JqZWN0KGNvbnN0IEFTTjFfT0JKRUNUICpvYmopOwpAQCAtMTAyMiw2ICsxMTAzLDE0IEBACiB2b2lkCQlPQkpfY2xlYW51cCh2b2lkICk7CiBpbnQJCU9CSl9jcmVhdGVfb2JqZWN0cyhCSU8gKmluKTsKIAoraW50IE9CSl9maW5kX3NpZ2lkX2FsZ3MoaW50IHNpZ25pZCwgaW50ICpwZGlnX25pZCwgaW50ICpwcGtleV9uaWQpOworaW50IE9CSl9maW5kX3NpZ2lkX2J5X2FsZ3MoaW50ICpwc2lnbmlkLCBpbnQgZGlnX25pZCwgaW50IHBrZXlfbmlkKTsKK2ludCBPQkpfYWRkX3NpZ2lkKGludCBzaWduaWQsIGludCBkaWdfaWQsIGludCBwa2V5X2lkKTsKK3ZvaWQgT0JKX3NpZ2lkX2ZyZWUodm9pZCk7CisKK2V4dGVybiBpbnQgb2JqX2NsZWFudXBfZGVmZXI7Cit2b2lkIGNoZWNrX2RlZmVyKGludCBuaWQpOworCiAvKiBCRUdJTiBFUlJPUiBDT0RFUyAqLwogLyogVGhlIGZvbGxvd2luZyBsaW5lcyBhcmUgYXV0byBnZW5lcmF0ZWQgYnkgdGhlIHNjcmlwdCBta2Vyci5wbC4gQW55IGNoYW5nZXMKICAqIG1hZGUgYWZ0ZXIgdGhpcyBwb2ludCBtYXkgYmUgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgc2NyaXB0IGlzIG5leHQgcnVuLgpkaWZmIC0tZ2l0IGEvY3J5cHRvL29iamVjdHMvb2JqZWN0cy5wbCBiL2NyeXB0by9vYmplY3RzL29iamVjdHMucGwKaW5kZXggNzZjMDZjYy4uMTVjMDBiYiAxMDA2NDQKLS0tIGEvY3J5cHRvL29iamVjdHMvb2JqZWN0cy5wbAorKysgYi9jcnlwdG8vb2JqZWN0cy9vYmplY3RzLnBsCkBAIC0xNCw2ICsxNCw4IEBACiAJJENuYW1lID1+IHMvXlgvLzsKIAlpZiAoZGVmaW5lZCgkbmlkbnskbXludW19KSkKIAkJeyBkaWUgIiRBUkdWWzFdOiRvOlRoZXJlJ3MgYWxyZWFkeSBhbiBvYmplY3Qgd2l0aCBOSUQgIiwkbXludW0sIiBvbiBsaW5lICIsJG9yZGVyeyRteW51bX0sIlxuIjsgfQorCWlmIChkZWZpbmVkKCRuaWR7JENuYW1lfSkpCisJCXsgZGllICIkQVJHVlsxXTokbzpUaGVyZSdzIGFscmVhZHkgYW4gb2JqZWN0IHdpdGggbmFtZSAiLCRDbmFtZSwiIG9uIGxpbmUgIiwkb3JkZXJ7JG5pZHskQ25hbWV9fSwiXG4iOyB9CiAJJG5pZHskQ25hbWV9ID0gJG15bnVtOwogCSRuaWRueyRteW51bX0gPSAkQ25hbWU7CiAJJG9yZGVyeyRteW51bX0gPSAkbzsKQEAgLTEwMiw2ICsxMDQsNyBAQAogCQkkbWF4X25pZCsrOwogCQkkbmlkeyRDbmFtZX0gPSAkbWF4X25pZDsKIAkJJG5pZG57JG1heF9uaWR9ID0gJENuYW1lOworcHJpbnQgU1RERVJSICJBZGRlZCBPSUQgJENuYW1lXG4iOwogCQl9CiAJJENuYW1lPSIiOwogCX0KZGlmZiAtLWdpdCBhL2NyeXB0by9vYmplY3RzL29ianhyZWYucGwgYi9jcnlwdG8vb2JqZWN0cy9vYmp4cmVmLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczMWQzYWUKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vb2JqZWN0cy9vYmp4cmVmLnBsCkBAIC0wLDAgKzEsMTA3IEBACisjIS91c3IvbG9jYWwvYmluL3BlcmwKKwordXNlIHN0cmljdDsKKworbXkgJXhyZWZfdGJsOworbXkgJW9pZF90Ymw7CisKK215ICgkbWFjX2ZpbGUsICR4cmVmX2ZpbGUpID0gQEFSR1Y7CisKK29wZW4oSU4sICRtYWNfZmlsZSkgfHwgZGllICJDYW4ndCBvcGVuICRtYWNfZmlsZSI7CisKKyMgUmVhZCBpbiBPSUQgbmlkIHZhbHVlcyBmb3IgYSBsb29rdXAgdGFibGUuCisKK3doaWxlICg8SU4+KQorCXsKKwljaG9tcDsKKwlteSAoJG5hbWUsICRudW0pID0gL14oXFMrKVxzKyhcUyspJC87CisJJG9pZF90Ymx7JG5hbWV9ID0gJG51bTsKKwl9CitjbG9zZSBJTjsKKworb3BlbihJTiwgJHhyZWZfZmlsZSkgfHwgZGllICJDYW4ndCBvcGVuICR4cmVmX2ZpbGUiOworCitteSAkbG4gPSAxOworCit3aGlsZSAoPElOPikKKwl7CisJY2hvbXA7CisJcy8jLiokLy87CisJbmV4dCBpZiAoL15cUyokLyk7CisJbXkgKCR4ciwgJHAxLCAkcDIpID0gL14oXFMrKVxzKyhcUyspXHMrKFxTKykvOworCWNoZWNrX29pZCgkeHIpOworCWNoZWNrX29pZCgkcDEpOworCWNoZWNrX29pZCgkcDIpOworCSR4cmVmX3RibHskeHJ9ID0gWyRwMSwgJHAyLCAkbG5dOworCX0KKworbXkgQHhya2V5cyA9IGtleXMgJXhyZWZfdGJsOworCitteSBAc3J0MSA9IHNvcnQgeyAkb2lkX3RibHskYX0gPD0+ICRvaWRfdGJseyRifX0gQHhya2V5czsKKworZm9yKG15ICRpID0gMDsgJGkgPD0gJCNzcnQxOyAkaSsrKQorCXsKKwkkeHJlZl90Ymx7JHNydDFbJGldfVsyXSA9ICRpOworCX0KKworbXkgQHNydDIgPSBzb3J0CisJeworCW15JGFwMSA9ICRvaWRfdGJseyR4cmVmX3RibHskYX1bMF19OworCW15JGJwMSA9ICRvaWRfdGJseyR4cmVmX3RibHskYn1bMF19OworCXJldHVybiAkYXAxIC0gJGJwMSBpZiAoJGFwMSAhPSAkYnAxKTsKKwlteSRhcDIgPSAkb2lkX3RibHskeHJlZl90Ymx7JGF9WzFdfTsKKwlteSRicDIgPSAkb2lkX3RibHskeHJlZl90Ymx7JGJ9WzFdfTsKKworCXJldHVybiAkYXAyIC0gJGJwMjsKKwl9IEB4cmtleXM7CisKK215ICRwbmFtZSA9ICQwOworCiskcG5hbWUgPX4gc3xeLlteL10vfHw7CisKK3ByaW50IDw8RU9GOworLyogQVVUT0dFTkVSQVRFRCBCWSAkcG5hbWUsIERPIE5PVCBFRElUICovCisKK3R5cGVkZWYgc3RydWN0CisJeworCWludCBzaWduX2lkOworCWludCBoYXNoX2lkOworCWludCBwa2V5X2lkOworCX0gbmlkX3RyaXBsZTsKKworc3RhdGljIGNvbnN0IG5pZF90cmlwbGUgc2lnb2lkX3NydFtdID0KKwl7CitFT0YKKworZm9yZWFjaCAoQHNydDEpCisJeworCW15ICR4ciA9ICRfOworCW15ICgkcDEsICRwMikgPSBAeyR4cmVmX3RibHskX319OworCXByaW50ICJcdHtOSURfJHhyLCBOSURfJHAxLCBOSURfJHAyfSxcbiI7CisJfQorCitwcmludCAiXHR9OyI7CitwcmludCA8PEVPRjsKKworCitzdGF0aWMgY29uc3QgbmlkX3RyaXBsZSAqIGNvbnN0IHNpZ29pZF9zcnRfeHJlZltdID0KKwl7CitFT0YKKworZm9yZWFjaCAoQHNydDIpCisJeworCW15ICR4ID0gJHhyZWZfdGJseyRffVsyXTsKKwlwcmludCAiXHRcJnNpZ29pZF9zcnRcWyR4XF0sXG4iOworCX0KKworcHJpbnQgIlx0fTtcblxuIjsKKworc3ViIGNoZWNrX29pZAorCXsKKwlteSAoJGNoaykgPSBAXzsKKwlpZiAoIWV4aXN0cyAkb2lkX3RibHskY2hrfSkKKwkJeworCQlkaWUgIk5vdCBGb3VuZCBcIiRjaGtcIlxuIjsKKwkJfQorCX0KKwpkaWZmIC0tZ2l0IGEvY3J5cHRvL29jc3AvTWFrZWZpbGUgYi9jcnlwdG8vb2NzcC9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBhMDBiMy4uMDAwMDAwMAotLS0gYS9jcnlwdG8vb2NzcC9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDIxOCArMCwwIEBACi0jCi0jIE9wZW5TU0wvb2NzcC9NYWtlZmlsZQotIwotCi1ESVI9CW9jc3AKLVRPUD0JLi4vLi4KLUNDPQljYwotSU5DTFVERVM9IC1JLi4gLUkkKFRPUCkgLUkuLi8uLi9pbmNsdWRlCi1DRkxBRz0tZwotTUFLRUZJTEU9CU1ha2VmaWxlCi1BUj0JCWFyIHIKLQotQ0ZMQUdTPSAkKElOQ0xVREVTKSAkKENGTEFHKQotCi1HRU5FUkFMPU1ha2VmaWxlIFJFQURNRQotVEVTVD0KLUFQUFM9Ci0KLUxJQj0kKFRPUCkvbGliY3J5cHRvLmEKLUxJQlNSQz0gb2NzcF9hc24uYyBvY3NwX2V4dC5jIG9jc3BfaHQuYyBvY3NwX2xpYi5jIG9jc3BfY2wuYyBcCi0Jb2NzcF9zcnYuYyBvY3NwX3Bybi5jIG9jc3BfdmZ5LmMgb2NzcF9lcnIuYwotCi1MSUJPQko9IG9jc3BfYXNuLm8gb2NzcF9leHQubyBvY3NwX2h0Lm8gb2NzcF9saWIubyBvY3NwX2NsLm8gXAotCW9jc3Bfc3J2Lm8gb2NzcF9wcm4ubyBvY3NwX3ZmeS5vIG9jc3BfZXJyLm8KLQotU1JDPSAkKExJQlNSQykKLQotRVhIRUFERVI9IG9jc3AuaAotSEVBREVSPQkkKEVYSEVBREVSKQotCi1BTEw9ICAgICQoR0VORVJBTCkgJChTUkMpICQoSEVBREVSKQotCi10b3A6Ci0JKGNkIC4uLy4uOyAkKE1BS0UpIERJUlM9Y3J5cHRvIFNESVJTPSQoRElSKSBzdWJfYWxsKQotCi1hbGw6CWxpYgotCi1saWI6CSQoTElCT0JKKQotCSQoQVJYKSAkKExJQikgJChMSUJPQkopCi0JJChSQU5MSUIpICQoTElCKSB8fCBlY2hvIE5ldmVyIG1pbmQuCi0JQHRvdWNoIGxpYgotCi1maWxlczoKLQkkKFBFUkwpICQoVE9QKS91dGlsL2ZpbGVzLnBsIE1ha2VmaWxlID4+ICQoVE9QKS9NSU5GTwotCi1saW5rczoKLQlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vaW5jbHVkZS9vcGVuc3NsICQoRVhIRUFERVIpCi0JQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL3Rlc3QgJChURVNUKQotCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9hcHBzICQoQVBQUykKLQotaW5zdGFsbDoKLQlAWyAtbiAiJChJTlNUQUxMVE9QKSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdG9wIE1ha2VmaWxlLi4uCi0JQGhlYWRlcmxpc3Q9IiQoRVhIRUFERVIpIjsgZm9yIGkgaW4gJCRoZWFkZXJsaXN0IDsgXAotCWRvICBcCi0JKGNwICQkaSAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaTsgXAotCWNobW9kIDY0NCAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaSApOyBcCi0JZG9uZTsKLQotdGFnczoKLQljdGFncyAkKFNSQykKLQotdGVzdHM6Ci0KLWxpbnQ6Ci0JbGludCAtRExJTlQgJChJTkNMVURFUykgJChTUkMpPmZsdWZmCi0KLWRlcGVuZDoKLQlAWyAtbiAiJChNQUtFREVQRU5EKSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdXBwZXIgTWFrZWZpbGUuLi4KLQkkKE1BS0VERVBFTkQpIC0tICQoQ0ZMQUcpICQoSU5DTFVERVMpICQoREVQRkxBRykgLS0gJChMSUJTUkMpCi0KLWRjbGVhbjoKLQkkKFBFUkwpIC1wZSAnaWYgKC9eIyBETyBOT1QgREVMRVRFIFRISVMgTElORS8pIHtwcmludDsgZXhpdCgwKTt9JyAkKE1BS0VGSUxFKSA+TWFrZWZpbGUubmV3Ci0JbXYgLWYgTWFrZWZpbGUubmV3ICQoTUFLRUZJTEUpCi0KLWNsZWFuOgotCXJtIC1mICoubyAqLm9iaiBsaWIgdGFncyBjb3JlIC5wdXJlIC5uZnMqICoub2xkICouYmFrIGZsdWZmCi0KLSMgRE8gTk9UIERFTEVURSBUSElTIExJTkUgLS0gbWFrZSBkZXBlbmQgZGVwZW5kcyBvbiBpdC4KLQotb2NzcF9hc24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMXQuaAotb2NzcF9hc24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotb2NzcF9hc24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLW9jc3BfYXNuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1vY3NwX2Fzbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi1vY3NwX2Fzbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotb2NzcF9hc24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotb2NzcF9hc24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2NzcC5oCi1vY3NwX2Fzbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotb2NzcF9hc24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLW9jc3BfYXNuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotb2NzcF9hc24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1vY3NwX2Fzbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi1vY3NwX2Fzbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOXYzLmgKLW9jc3BfYXNuLm86IG9jc3BfYXNuLmMKLW9jc3BfY2wubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLW9jc3BfY2wubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotb2NzcF9jbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotb2NzcF9jbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotb2NzcF9jbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi1vY3NwX2NsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLW9jc3BfY2wubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotb2NzcF9jbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLW9jc3BfY2wubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29jc3AuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotb2NzcF9jbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotb2NzcF9jbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGVtLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaAotb2NzcF9jbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCi1vY3NwX2NsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLW9jc3BfY2wubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLW9jc3BfY2wubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAotb2NzcF9jbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOXYzLmggLi4vY3J5cHRsaWIuaCBvY3NwX2NsLmMKLW9jc3BfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1vY3NwX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NvbmYuaAotb2NzcF9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1vY3NwX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi1vY3NwX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLW9jc3BfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi1vY3NwX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi1vY3NwX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vY3NwLmgKLW9jc3BfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1vY3NwX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotb2NzcF9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1vY3NwX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLW9jc3BfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLW9jc3BfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5djMuaAotb2NzcF9lcnIubzogb2NzcF9lcnIuYwotb2NzcF9leHQubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLW9jc3BfZXh0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLW9jc3BfZXh0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1vY3NwX2V4dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotb2NzcF9leHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotb2NzcF9leHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotb2NzcF9leHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotb2NzcF9leHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi1vY3NwX2V4dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2NzcC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1vY3NwX2V4dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotb2NzcF9leHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAotb2NzcF9leHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotb2NzcF9leHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLW9jc3BfZXh0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmgKLW9jc3BfZXh0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5djMuaCAuLi9jcnlwdGxpYi5oIG9jc3BfZXh0LmMKLW9jc3BfaHQubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLW9jc3BfaHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotb2NzcF9odC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotb2NzcF9odC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotb2NzcF9odC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi1vY3NwX2h0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLW9jc3BfaHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotb2NzcF9odC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLW9jc3BfaHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29jc3AuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotb2NzcF9odC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotb2NzcF9odC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLW9jc3BfaHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1vY3NwX2h0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLW9jc3BfaHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDl2My5oCi1vY3NwX2h0Lm86IG9jc3BfaHQuYwotb2NzcF9saWIubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLW9jc3BfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLW9jc3BfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1vY3NwX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotb2NzcF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotb2NzcF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotb2NzcF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotb2NzcF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi1vY3NwX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2NzcC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1vY3NwX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotb2NzcF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BlbS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmgKLW9jc3BfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKLW9jc3BfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLW9jc3BfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1vY3NwX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oCi1vY3NwX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOXYzLmggLi4vY3J5cHRsaWIuaCBvY3NwX2xpYi5jCi1vY3NwX3Bybi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotb2NzcF9wcm4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jb25mLmgKLW9jc3BfcHJuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotb2NzcF9wcm4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotb2NzcF9wcm4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1vY3NwX3Bybi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotb2NzcF9wcm4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotb2NzcF9wcm4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2NzcC5oCi1vY3NwX3Bybi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotb2NzcF9wcm4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLW9jc3BfcHJuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wZW0uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGVtMi5oCi1vY3NwX3Bybi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLW9jc3BfcHJuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotb2NzcF9wcm4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotb2NzcF9wcm4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDl2My5oCi1vY3NwX3Bybi5vOiBvY3NwX3Bybi5jCi1vY3NwX3Nydi5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotb2NzcF9zcnYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotb2NzcF9zcnYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLW9jc3Bfc3J2Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1vY3NwX3Nydi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi1vY3NwX3Nydi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1vY3NwX3Nydi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1vY3NwX3Nydi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLW9jc3Bfc3J2Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vY3NwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLW9jc3Bfc3J2Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1vY3NwX3Nydi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGVtLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaAotb2NzcF9zcnYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAotb2NzcF9zcnYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotb2NzcF9zcnYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLW9jc3Bfc3J2Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmgKLW9jc3Bfc3J2Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5djMuaCAuLi9jcnlwdGxpYi5oIG9jc3Bfc3J2LmMKLW9jc3BfdmZ5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1vY3NwX3ZmeS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NvbmYuaAotb2NzcF92ZnkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1vY3NwX3ZmeS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi1vY3NwX3ZmeS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLW9jc3BfdmZ5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi1vY3NwX3ZmeS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi1vY3NwX3ZmeS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vY3NwLmgKLW9jc3BfdmZ5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1vY3NwX3ZmeS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotb2NzcF92ZnkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1vY3NwX3ZmeS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLW9jc3BfdmZ5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLW9jc3BfdmZ5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5djMuaAotb2NzcF92Znkubzogb2NzcF92ZnkuYwpkaWZmIC0tZ2l0IGEvY3J5cHRvL29jc3Avb2NzcC5oIGIvY3J5cHRvL29jc3Avb2NzcC5oCmluZGV4IGEwNTc3YTcuLjMxZTQ1NzQgMTAwNjQ0Ci0tLSBhL2NyeXB0by9vY3NwL29jc3AuaAorKysgYi9jcnlwdG8vb2NzcC9vY3NwLmgKQEAgLTY0LDYgKzY0LDcgQEAKICNpZm5kZWYgSEVBREVSX09DU1BfSAogI2RlZmluZSBIRUFERVJfT0NTUF9ICiAKKyNpbmNsdWRlIDxvcGVuc3NsL29zc2xfdHlwLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+CiAjaW5jbHVkZSA8b3BlbnNzbC94NTA5djMuaD4KICNpbmNsdWRlIDxvcGVuc3NsL3NhZmVzdGFjay5oPgpAQCAtMzk0LDE3ICszOTUsMjAgQEAKICNkZWZpbmUgQVNOMV9CSVRfU1RSSU5HX2RpZ2VzdChkYXRhLHR5cGUsbWQsbGVuKSBcCiAJQVNOMV9pdGVtX2RpZ2VzdChBU04xX0lURU1fcnB0cihBU04xX0JJVF9TVFJJTkcpLHR5cGUsZGF0YSxtZCxsZW4pCiAKLSNkZWZpbmUgT0NTUF9DRVJUSURfZHVwKGNpZCkgQVNOMV9kdXBfb2YoT0NTUF9DRVJUSUQsaTJkX09DU1BfQ0VSVElELGQyaV9PQ1NQX0NFUlRJRCxjaWQpCi0KICNkZWZpbmUgT0NTUF9DRVJUU1RBVFVTX2R1cChjcylcCiAgICAgICAgICAgICAgICAgKE9DU1BfQ0VSVFNUQVRVUyopQVNOMV9kdXAoKGludCgqKSgpKWkyZF9PQ1NQX0NFUlRTVEFUVVMsXAogCQkoY2hhciAqKCopKCkpZDJpX09DU1BfQ0VSVFNUQVRVUywoY2hhciAqKShjcykpCiAKK09DU1BfQ0VSVElEICpPQ1NQX0NFUlRJRF9kdXAoT0NTUF9DRVJUSUQgKmlkKTsKKwogT0NTUF9SRVNQT05TRSAqT0NTUF9zZW5kcmVxX2JpbyhCSU8gKmIsIGNoYXIgKnBhdGgsIE9DU1BfUkVRVUVTVCAqcmVxKTsKIE9DU1BfUkVRX0NUWCAqT0NTUF9zZW5kcmVxX25ldyhCSU8gKmlvLCBjaGFyICpwYXRoLCBPQ1NQX1JFUVVFU1QgKnJlcSwKIAkJCQkJCQkJaW50IG1heGxpbmUpOwogaW50IE9DU1Bfc2VuZHJlcV9uYmlvKE9DU1BfUkVTUE9OU0UgKipwcmVzcCwgT0NTUF9SRVFfQ1RYICpyY3R4KTsKIHZvaWQgT0NTUF9SRVFfQ1RYX2ZyZWUoT0NTUF9SRVFfQ1RYICpyY3R4KTsKK2ludCBPQ1NQX1JFUV9DVFhfc2V0MV9yZXEoT0NTUF9SRVFfQ1RYICpyY3R4LCBPQ1NQX1JFUVVFU1QgKnJlcSk7CitpbnQgT0NTUF9SRVFfQ1RYX2FkZDFfaGVhZGVyKE9DU1BfUkVRX0NUWCAqcmN0eCwKKwkJY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpOwogCiBPQ1NQX0NFUlRJRCAqT0NTUF9jZXJ0X3RvX2lkKGNvbnN0IEVWUF9NRCAqZGdzdCwgWDUwOSAqc3ViamVjdCwgWDUwOSAqaXNzdWVyKTsKIApAQCAtNDc0LDExICs0NzgsNiBAQAogCQkJWDUwOSAqc2lnbmVyLCBFVlBfUEtFWSAqa2V5LCBjb25zdCBFVlBfTUQgKmRnc3QsCiAJCQlTVEFDS19PRihYNTA5KSAqY2VydHMsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwogCi1BU04xX1NUUklORyAqQVNOMV9TVFJJTkdfZW5jb2RlKEFTTjFfU1RSSU5HICpzLCBpMmRfb2Zfdm9pZCAqaTJkLAotCQkJCXZvaWQgKmRhdGEsIFNUQUNLX09GKEFTTjFfT0JKRUNUKSAqc2spOwotI2RlZmluZSBBU04xX1NUUklOR19lbmNvZGVfb2YodHlwZSxzLGkyZCxkYXRhLHNrKSBcCi0JQVNOMV9TVFJJTkdfZW5jb2RlKHMsIENIRUNLRURfSTJEX09GKHR5cGUsIGkyZCksIGRhdGEsIHNrKQotCiBYNTA5X0VYVEVOU0lPTiAqT0NTUF9jcmxJRF9uZXcoY2hhciAqdXJsLCBsb25nICpuLCBjaGFyICp0aW0pOwogCiBYNTA5X0VYVEVOU0lPTiAqT0NTUF9hY2NlcHRfcmVzcG9uc2VzX25ldyhjaGFyICoqb2lkcyk7CkBAIC01NDcsOSArNTQ2LDkgQEAKIERFQ0xBUkVfQVNOMV9GVU5DVElPTlMoT0NTUF9DUkxJRCkKIERFQ0xBUkVfQVNOMV9GVU5DVElPTlMoT0NTUF9TRVJWSUNFTE9DKQogCi1jaGFyICpPQ1NQX3Jlc3BvbnNlX3N0YXR1c19zdHIobG9uZyBzKTsKLWNoYXIgKk9DU1BfY2VydF9zdGF0dXNfc3RyKGxvbmcgcyk7Ci1jaGFyICpPQ1NQX2NybF9yZWFzb25fc3RyKGxvbmcgcyk7Citjb25zdCBjaGFyICpPQ1NQX3Jlc3BvbnNlX3N0YXR1c19zdHIobG9uZyBzKTsKK2NvbnN0IGNoYXIgKk9DU1BfY2VydF9zdGF0dXNfc3RyKGxvbmcgcyk7Citjb25zdCBjaGFyICpPQ1NQX2NybF9yZWFzb25fc3RyKGxvbmcgcyk7CiAKIGludCBPQ1NQX1JFUVVFU1RfcHJpbnQoQklPICpicCwgT0NTUF9SRVFVRVNUKiBhLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKIGludCBPQ1NQX1JFU1BPTlNFX3ByaW50KEJJTyAqYnAsIE9DU1BfUkVTUE9OU0UqIG8sIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwpAQCAtNTgyLDcgKzU4MSw4IEBACiAjZGVmaW5lIE9DU1BfRl9PQ1NQX1JFUVVFU1RfVkVSSUZZCQkJIDExNgogI2RlZmluZSBPQ1NQX0ZfT0NTUF9SRVNQT05TRV9HRVQxX0JBU0lDCQkJIDExMQogI2RlZmluZSBPQ1NQX0ZfT0NTUF9TRU5EUkVRX0JJTwkJCQkgMTEyCi0jZGVmaW5lIE9DU1BfRl9QQVJTRV9IVFRQX0xJTkUxCQkJCSAxMTcKKyNkZWZpbmUgT0NTUF9GX09DU1BfU0VORFJFUV9OQklPCQkJIDExNworI2RlZmluZSBPQ1NQX0ZfUEFSU0VfSFRUUF9MSU5FMQkJCQkgMTE4CiAjZGVmaW5lIE9DU1BfRl9SRVFVRVNUX1ZFUklGWQkJCQkgMTEzCiAKIC8qIFJlYXNvbiBjb2Rlcy4gKi8KZGlmZiAtLWdpdCBhL2NyeXB0by9vY3NwL29jc3BfY2wuYyBiL2NyeXB0by9vY3NwL29jc3BfY2wuYwppbmRleCAxN2JhYjVmLi45YzE0ZDlkIDEwMDY0NAotLS0gYS9jcnlwdG8vb2NzcC9vY3NwX2NsLmMKKysrIGIvY3J5cHRvL29jc3Avb2NzcF9jbC5jCkBAIC0xNTUsNyArMTU1LDYgQEAKIAkJCWdvdG8gZXJyOwogCiAJaWYgKCEocmVxLT5vcHRpb25hbFNpZ25hdHVyZSA9IHNpZyA9IE9DU1BfU0lHTkFUVVJFX25ldygpKSkgZ290byBlcnI7Ci0JaWYgKCFkZ3N0KSBkZ3N0ID0gRVZQX3NoYTEoKTsKIAlpZiAoa2V5KQogCQl7CiAJCWlmICghWDUwOV9jaGVja19wcml2YXRlX2tleShzaWduZXIsIGtleSkpCmRpZmYgLS1naXQgYS9jcnlwdG8vb2NzcC9vY3NwX2Vyci5jIGIvY3J5cHRvL29jc3Avb2NzcF9lcnIuYwppbmRleCBkMmYyZTc5Li4wY2VkY2VhIDEwMDY0NAotLS0gYS9jcnlwdG8vb2NzcC9vY3NwX2Vyci5jCisrKyBiL2NyeXB0by9vY3NwL29jc3BfZXJyLmMKQEAgLTEsNiArMSw2IEBACiAvKiBjcnlwdG8vb2NzcC9vY3NwX2Vyci5jICovCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDcgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNiBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODYsNiArODYsNyBAQAoge0VSUl9GVU5DKE9DU1BfRl9PQ1NQX1JFUVVFU1RfVkVSSUZZKSwJIk9DU1BfcmVxdWVzdF92ZXJpZnkifSwKIHtFUlJfRlVOQyhPQ1NQX0ZfT0NTUF9SRVNQT05TRV9HRVQxX0JBU0lDKSwJIk9DU1BfcmVzcG9uc2VfZ2V0MV9iYXNpYyJ9LAoge0VSUl9GVU5DKE9DU1BfRl9PQ1NQX1NFTkRSRVFfQklPKSwJIk9DU1Bfc2VuZHJlcV9iaW8ifSwKK3tFUlJfRlVOQyhPQ1NQX0ZfT0NTUF9TRU5EUkVRX05CSU8pLAkiT0NTUF9zZW5kcmVxX25iaW8ifSwKIHtFUlJfRlVOQyhPQ1NQX0ZfUEFSU0VfSFRUUF9MSU5FMSksCSJQQVJTRV9IVFRQX0xJTkUxIn0sCiB7RVJSX0ZVTkMoT0NTUF9GX1JFUVVFU1RfVkVSSUZZKSwJIlJFUVVFU1RfVkVSSUZZIn0sCiB7MCxOVUxMfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL29jc3Avb2NzcF9leHQuYyBiL2NyeXB0by9vY3NwL29jc3BfZXh0LmMKaW5kZXggODE1Y2MyOS4uZWM4ODRjYiAxMDA2NDQKLS0tIGEvY3J5cHRvL29jc3Avb2NzcF9leHQuYworKysgYi9jcnlwdG8vb2NzcC9vY3NwX2V4dC5jCkBAIC0yNjQsNyArMjY0LDcgQEAKIAl9CiAKIC8qIGFsc28gQ1JMIEVudHJ5IEV4dGVuc2lvbnMgKi8KLQorI2lmIDAKIEFTTjFfU1RSSU5HICpBU04xX1NUUklOR19lbmNvZGUoQVNOMV9TVFJJTkcgKnMsIGkyZF9vZl92b2lkICppMmQsCiAJCQkJdm9pZCAqZGF0YSwgU1RBQ0tfT0YoQVNOMV9PQkpFQ1QpICpzaykKICAgICAgICAgewpAQCAtMzA1LDYgKzMwNSw3IEBACiAJaWYgKGIpIE9QRU5TU0xfZnJlZShiKTsKIAlyZXR1cm4gTlVMTDsKIAl9CisjZW5kaWYKIAogLyogTm9uY2UgaGFuZGxpbmcgZnVuY3Rpb25zICovCiAKQEAgLTQ0MiwxNyArNDQzLDEwIEBACiAJCWlmICghKEFTTjFfR0VORVJBTElaRURUSU1FX3NldF9zdHJpbmcoY2lkLT5jcmxUaW1lLCB0aW0pKSkgCiAJCSAgICAgICAgZ290byBlcnI7CiAJCX0KLQlpZiAoISh4ID0gWDUwOV9FWFRFTlNJT05fbmV3KCkpKSBnb3RvIGVycjsKLQlpZiAoISh4LT5vYmplY3QgPSBPQkpfbmlkMm9iaihOSURfaWRfcGtpeF9PQ1NQX0NybElEKSkpIGdvdG8gZXJyOwotCWlmICghKEFTTjFfU1RSSU5HX2VuY29kZV9vZihPQ1NQX0NSTElELHgtPnZhbHVlLGkyZF9PQ1NQX0NSTElELGNpZCwKLQkJCQkgICAgTlVMTCkpKQotCSAgICAgICAgZ290byBlcnI7Ci0JT0NTUF9DUkxJRF9mcmVlKGNpZCk7Ci0JcmV0dXJuIHg7CisJeCA9IFg1MDlWM19FWFRfaTJkKE5JRF9pZF9wa2l4X09DU1BfQ3JsSUQsIDAsIGNpZCk7CiBlcnI6Ci0JaWYgKHgpIFg1MDlfRVhURU5TSU9OX2ZyZWUoeCk7CiAJaWYgKGNpZCkgT0NTUF9DUkxJRF9mcmVlKGNpZCk7Ci0JcmV0dXJuIE5VTEw7CisJcmV0dXJuIHg7CiAJfQogCiAvKiAgIEFjY2VwdGFibGVSZXNwb25zZXMgOjo9IFNFUVVFTkNFIE9GIE9CSkVDVCBJREVOVElGSUVSICovCkBAIC00NzAsMTggKzQ2NCwxMCBAQAogCQkgICAgICAgIHNrX0FTTjFfT0JKRUNUX3B1c2goc2ssIG8pOwogCQlvaWRzKys7CiAJCX0KLQlpZiAoISh4ID0gWDUwOV9FWFRFTlNJT05fbmV3KCkpKSBnb3RvIGVycjsKLQlpZiAoISh4LT5vYmplY3QgPSBPQkpfbmlkMm9iaihOSURfaWRfcGtpeF9PQ1NQX2FjY2VwdGFibGVSZXNwb25zZXMpKSkKLQkJZ290byBlcnI7Ci0JaWYgKCEoQVNOMV9TVFJJTkdfZW5jb2RlX29mKEFTTjFfT0JKRUNULHgtPnZhbHVlLGkyZF9BU04xX09CSkVDVCxOVUxMLAotCQkJCSAgICBzaykpKQotCSAgICAgICAgZ290byBlcnI7Ci0Jc2tfQVNOMV9PQkpFQ1RfcG9wX2ZyZWUoc2ssIEFTTjFfT0JKRUNUX2ZyZWUpOwotCXJldHVybiB4OworCXggPSBYNTA5VjNfRVhUX2kyZChOSURfaWRfcGtpeF9PQ1NQX2FjY2VwdGFibGVSZXNwb25zZXMsIDAsIHNrKTsKIGVycjoKLQlpZiAoeCkgWDUwOV9FWFRFTlNJT05fZnJlZSh4KTsKIAlpZiAoc2spIHNrX0FTTjFfT0JKRUNUX3BvcF9mcmVlKHNrLCBBU04xX09CSkVDVF9mcmVlKTsKLQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4geDsKICAgICAgICAgfQogCiAvKiAgQXJjaGl2ZUN1dG9mZiA6Oj0gR2VuZXJhbGl6ZWRUaW1lICovCkBAIC00OTIsMTYgKzQ3OCwxMCBAQAogCiAJaWYgKCEoZ3QgPSBBU04xX0dFTkVSQUxJWkVEVElNRV9uZXcoKSkpIGdvdG8gZXJyOwogCWlmICghKEFTTjFfR0VORVJBTElaRURUSU1FX3NldF9zdHJpbmcoZ3QsIHRpbSkpKSBnb3RvIGVycjsKLQlpZiAoISh4ID0gWDUwOV9FWFRFTlNJT05fbmV3KCkpKSBnb3RvIGVycjsKLQlpZiAoISh4LT5vYmplY3Q9T0JKX25pZDJvYmooTklEX2lkX3BraXhfT0NTUF9hcmNoaXZlQ3V0b2ZmKSkpZ290byBlcnI7Ci0JaWYgKCEoQVNOMV9TVFJJTkdfZW5jb2RlX29mKEFTTjFfR0VORVJBTElaRURUSU1FLHgtPnZhbHVlLAotCQkJCSAgICBpMmRfQVNOMV9HRU5FUkFMSVpFRFRJTUUsZ3QsTlVMTCkpKSBnb3RvIGVycjsKLQlBU04xX0dFTkVSQUxJWkVEVElNRV9mcmVlKGd0KTsKLQlyZXR1cm4geDsKKwl4ID0gWDUwOVYzX0VYVF9pMmQoTklEX2lkX3BraXhfT0NTUF9hcmNoaXZlQ3V0b2ZmLCAwLCBndCk7CiBlcnI6CiAJaWYgKGd0KSBBU04xX0dFTkVSQUxJWkVEVElNRV9mcmVlKGd0KTsKLQlpZiAoeCkgWDUwOV9FWFRFTlNJT05fZnJlZSh4KTsKLQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4geDsKIAl9CiAKIC8qIHBlciBBQ0NFU1NfREVTQ1JJUFRJT04gcGFyYW1ldGVyIGFyZSBvaWRzLCBvZiB3aGljaCB0aGVyZSBhcmUgY3VycmVudGx5CkBAIC01MzAsMTYgKzUxMCw5IEBACiAJCWlmICghc2tfQUNDRVNTX0RFU0NSSVBUSU9OX3B1c2goc2xvYy0+bG9jYXRvciwgYWQpKSBnb3RvIGVycjsKIAkJdXJscysrOwogCQl9Ci0JaWYgKCEoeCA9IFg1MDlfRVhURU5TSU9OX25ldygpKSkgZ290byBlcnI7Ci0JaWYgKCEoeC0+b2JqZWN0ID0gT0JKX25pZDJvYmooTklEX2lkX3BraXhfT0NTUF9zZXJ2aWNlTG9jYXRvcikpKSAKLQkgICAgICAgIGdvdG8gZXJyOwotCWlmICghKEFTTjFfU1RSSU5HX2VuY29kZV9vZihPQ1NQX1NFUlZJQ0VMT0MseC0+dmFsdWUsCi0JCQkJICAgIGkyZF9PQ1NQX1NFUlZJQ0VMT0Msc2xvYyxOVUxMKSkpIGdvdG8gZXJyOwotCU9DU1BfU0VSVklDRUxPQ19mcmVlKHNsb2MpOwotCXJldHVybiB4OworCXggPSBYNTA5VjNfRVhUX2kyZChOSURfaWRfcGtpeF9PQ1NQX3NlcnZpY2VMb2NhdG9yLCAwLCBzbG9jKTsKIGVycjoKLQlpZiAoeCkgWDUwOV9FWFRFTlNJT05fZnJlZSh4KTsKIAlpZiAoc2xvYykgT0NTUF9TRVJWSUNFTE9DX2ZyZWUoc2xvYyk7Ci0JcmV0dXJuIE5VTEw7CisJcmV0dXJuIHg7CiAJfQogCmRpZmYgLS1naXQgYS9jcnlwdG8vb2NzcC9vY3NwX2h0LmMgYi9jcnlwdG8vb2NzcC9vY3NwX2h0LmMKaW5kZXggNmFiYjMwYi4uMTJiYmZjZiAxMDA2NDQKLS0tIGEvY3J5cHRvL29jc3Avb2NzcF9odC5jCisrKyBiL2NyeXB0by9vY3NwL29jc3BfaHQuYwpAQCAtMTE4LDM5ICsxMTgsNjUgQEAKIAlPUEVOU1NMX2ZyZWUocmN0eCk7CiAJfQogCitpbnQgT0NTUF9SRVFfQ1RYX3NldDFfcmVxKE9DU1BfUkVRX0NUWCAqcmN0eCwgT0NTUF9SRVFVRVNUICpyZXEpCisJeworCXN0YXRpYyBjb25zdCBjaGFyIHJlcV9oZHJbXSA9CisJIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vb2NzcC1yZXF1ZXN0XHJcbiIKKwkiQ29udGVudC1MZW5ndGg6ICVkXHJcblxyXG4iOworICAgICAgICBpZiAoQklPX3ByaW50ZihyY3R4LT5tZW0sIHJlcV9oZHIsIGkyZF9PQ1NQX1JFUVVFU1QocmVxLCBOVUxMKSkgPD0gMCkKKwkJcmV0dXJuIDA7CisgICAgICAgIGlmIChpMmRfT0NTUF9SRVFVRVNUX2JpbyhyY3R4LT5tZW0sIHJlcSkgPD0gMCkKKwkJcmV0dXJuIDA7CisJcmN0eC0+c3RhdGUgPSBPSFNfQVNOMV9XUklURTsKKwlyY3R4LT5hc24xX2xlbiA9IEJJT19nZXRfbWVtX2RhdGEocmN0eC0+bWVtLCBOVUxMKTsKKwlyZXR1cm4gMTsKKwl9CisKK2ludCBPQ1NQX1JFUV9DVFhfYWRkMV9oZWFkZXIoT0NTUF9SRVFfQ1RYICpyY3R4LAorCQljb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKKwl7CisJaWYgKCFuYW1lKQorCQlyZXR1cm4gMDsKKwlpZiAoQklPX3B1dHMocmN0eC0+bWVtLCBuYW1lKSA8PSAwKQorCQlyZXR1cm4gMDsKKwlpZiAodmFsdWUpCisJCXsKKwkJaWYgKEJJT193cml0ZShyY3R4LT5tZW0sICI6ICIsIDIpICE9IDIpCisJCQlyZXR1cm4gMDsKKwkJaWYgKEJJT19wdXRzKHJjdHgtPm1lbSwgdmFsdWUpIDw9IDApCisJCQlyZXR1cm4gMDsKKwkJfQorCWlmIChCSU9fd3JpdGUocmN0eC0+bWVtLCAiXHJcbiIsIDIpICE9IDIpCisJCXJldHVybiAwOworCXJldHVybiAxOworCX0KKwogT0NTUF9SRVFfQ1RYICpPQ1NQX3NlbmRyZXFfbmV3KEJJTyAqaW8sIGNoYXIgKnBhdGgsIE9DU1BfUkVRVUVTVCAqcmVxLAogCQkJCQkJCQlpbnQgbWF4bGluZSkKIAl7Ci0Jc3RhdGljIGNoYXIgcG9zdF9oZHJbXSA9ICJQT1NUICVzIEhUVFAvMS4wXHJcbiIKLQkiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9vY3NwLXJlcXVlc3RcclxuIgotCSJDb250ZW50LUxlbmd0aDogJWRcclxuXHJcbiI7CisJc3RhdGljIGNvbnN0IGNoYXIgcG9zdF9oZHJbXSA9ICJQT1NUICVzIEhUVFAvMS4wXHJcbiI7CiAKIAlPQ1NQX1JFUV9DVFggKnJjdHg7CiAJcmN0eCA9IE9QRU5TU0xfbWFsbG9jKHNpemVvZihPQ1NQX1JFUV9DVFgpKTsKLQlyY3R4LT5zdGF0ZSA9IE9IU19GSVJTVExJTkU7CisJcmN0eC0+c3RhdGUgPSBPSFNfRVJST1I7CiAJcmN0eC0+bWVtID0gQklPX25ldyhCSU9fc19tZW0oKSk7CiAJcmN0eC0+aW8gPSBpbzsKKwlyY3R4LT5hc24xX2xlbiA9IDA7CiAJaWYgKG1heGxpbmUgPiAwKQogCQlyY3R4LT5pb2J1ZmxlbiA9IG1heGxpbmU7CiAJZWxzZQogCQlyY3R4LT5pb2J1ZmxlbiA9IE9DU1BfTUFYX0xJTkVfTEVOOwogCXJjdHgtPmlvYnVmID0gT1BFTlNTTF9tYWxsb2MocmN0eC0+aW9idWZsZW4pOworCWlmICghcmN0eC0+aW9idWYpCisJCXJldHVybiAwOwogCWlmICghcGF0aCkKIAkJcGF0aCA9ICIvIjsKIAotICAgICAgICBpZiAoQklPX3ByaW50ZihyY3R4LT5tZW0sIHBvc3RfaGRyLCBwYXRoLAotCQkJCWkyZF9PQ1NQX1JFUVVFU1QocmVxLCBOVUxMKSkgPD0gMCkKLQkJewotCQlyY3R4LT5zdGF0ZSA9IE9IU19FUlJPUjsKKyAgICAgICAgaWYgKEJJT19wcmludGYocmN0eC0+bWVtLCBwb3N0X2hkciwgcGF0aCkgPD0gMCkKIAkJcmV0dXJuIDA7Ci0JCX0KLSAgICAgICAgaWYgKGkyZF9PQ1NQX1JFUVVFU1RfYmlvKHJjdHgtPm1lbSwgcmVxKSA8PSAwKQotCQl7Ci0JCXJjdHgtPnN0YXRlID0gT0hTX0VSUk9SOworCisJaWYgKHJlcSAmJiAhT0NTUF9SRVFfQ1RYX3NldDFfcmVxKHJjdHgsIHJlcSkpCiAJCXJldHVybiAwOwotCQl9Ci0JcmN0eC0+c3RhdGUgPSBPSFNfQVNOMV9XUklURTsKLQlyY3R4LT5hc24xX2xlbiA9IEJJT19nZXRfbWVtX2RhdGEocmN0eC0+bWVtLCBOVUxMKTsKIAogCXJldHVybiByY3R4OwogCX0KZGlmZiAtLWdpdCBhL2NyeXB0by9vY3NwL29jc3BfbGliLmMgYi9jcnlwdG8vb2NzcC9vY3NwX2xpYi5jCmluZGV4IDI3NDUwODEuLjM2OTA1ZDcgMTAwNjQ0Ci0tLSBhL2NyeXB0by9vY3NwL29jc3BfbGliLmMKKysrIGIvY3J5cHRvL29jc3Avb2NzcF9saWIuYwpAQCAtNjksNiArNjksNyBAQAogI2luY2x1ZGUgPG9wZW5zc2wvcGVtLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC94NTA5djMuaD4KICNpbmNsdWRlIDxvcGVuc3NsL29jc3AuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2FzbjF0Lmg+CiAKIC8qIENvbnZlcnQgYSBjZXJ0aWZpY2F0ZSBhbmQgaXRzIGlzc3VlciB0byBhbiBPQ1NQX0NFUlRJRCAqLwogCkBAIC0yNjAsMyArMjYxLDUgQEAKIAlyZXR1cm4gMDsKIAogCX0KKworSU1QTEVNRU5UX0FTTjFfRFVQX0ZVTkNUSU9OKE9DU1BfQ0VSVElEKQpkaWZmIC0tZ2l0IGEvY3J5cHRvL29jc3Avb2NzcF9wcm4uYyBiL2NyeXB0by9vY3NwL29jc3BfcHJuLmMKaW5kZXggMDFmODFlNy4uMTY5NWM5YyAxMDA2NDQKLS0tIGEvY3J5cHRvL29jc3Avb2NzcF9wcm4uYworKysgYi9jcnlwdG8vb2NzcC9vY3NwX3Bybi5jCkBAIC04NSwyMSArODUsMjEgQEAKIHR5cGVkZWYgc3RydWN0CiAJewogCWxvbmcgdDsKLQljaGFyICptOworCWNvbnN0IGNoYXIgKm07CiAJfSBPQ1NQX1RCTFNUUjsKIAotc3RhdGljIGNoYXIgKnRhYmxlMnN0cmluZyhsb25nIHMsIE9DU1BfVEJMU1RSICp0cywgaW50IGxlbikKK3N0YXRpYyBjb25zdCBjaGFyICp0YWJsZTJzdHJpbmcobG9uZyBzLCBjb25zdCBPQ1NQX1RCTFNUUiAqdHMsIGludCBsZW4pCiB7Ci0JT0NTUF9UQkxTVFIgKnA7CisJY29uc3QgT0NTUF9UQkxTVFIgKnA7CiAJZm9yIChwPXRzOyBwIDwgdHMgKyBsZW47IHArKykKIAkgICAgICAgIGlmIChwLT50ID09IHMpCiAJCSAgICAgICAgIHJldHVybiBwLT5tOwogCXJldHVybiAiKFVOS05PV04pIjsKIH0KIAotY2hhciAqT0NTUF9yZXNwb25zZV9zdGF0dXNfc3RyKGxvbmcgcykKK2NvbnN0IGNoYXIgKk9DU1BfcmVzcG9uc2Vfc3RhdHVzX3N0cihsb25nIHMpCiAgICAgICAgIHsKLQlzdGF0aWMgT0NTUF9UQkxTVFIgcnN0YXRfdGJsW10gPSB7CisJc3RhdGljIGNvbnN0IE9DU1BfVEJMU1RSIHJzdGF0X3RibFtdID0gewogCSAgICAgICAgeyBPQ1NQX1JFU1BPTlNFX1NUQVRVU19TVUNDRVNTRlVMLCAic3VjY2Vzc2Z1bCIgfSwKIAkgICAgICAgIHsgT0NTUF9SRVNQT05TRV9TVEFUVVNfTUFMRk9STUVEUkVRVUVTVCwgIm1hbGZvcm1lZHJlcXVlc3QiIH0sCiAJICAgICAgICB7IE9DU1BfUkVTUE9OU0VfU1RBVFVTX0lOVEVSTkFMRVJST1IsICJpbnRlcm5hbGVycm9yIiB9LApAQCAtMTA5LDE4ICsxMDksMTggQEAKIAlyZXR1cm4gdGFibGUyc3RyaW5nKHMsIHJzdGF0X3RibCwgNik7CiAJfSAKIAotY2hhciAqT0NTUF9jZXJ0X3N0YXR1c19zdHIobG9uZyBzKQorY29uc3QgY2hhciAqT0NTUF9jZXJ0X3N0YXR1c19zdHIobG9uZyBzKQogICAgICAgICB7Ci0Jc3RhdGljIE9DU1BfVEJMU1RSIGNzdGF0X3RibFtdID0geworCXN0YXRpYyBjb25zdCBPQ1NQX1RCTFNUUiBjc3RhdF90YmxbXSA9IHsKIAkgICAgICAgIHsgVl9PQ1NQX0NFUlRTVEFUVVNfR09PRCwgImdvb2QiIH0sCiAJICAgICAgICB7IFZfT0NTUF9DRVJUU1RBVFVTX1JFVk9LRUQsICJyZXZva2VkIiB9LAogCSAgICAgICAgeyBWX09DU1BfQ0VSVFNUQVRVU19VTktOT1dOLCAidW5rbm93biIgfSB9OwogCXJldHVybiB0YWJsZTJzdHJpbmcocywgY3N0YXRfdGJsLCAzKTsKIAl9IAogCi1jaGFyICpPQ1NQX2NybF9yZWFzb25fc3RyKGxvbmcgcykKK2NvbnN0IGNoYXIgKk9DU1BfY3JsX3JlYXNvbl9zdHIobG9uZyBzKQogICAgICAgICB7Ci0JT0NTUF9UQkxTVFIgcmVhc29uX3RibFtdID0geworCXN0YXRpYyBjb25zdCBPQ1NQX1RCTFNUUiByZWFzb25fdGJsW10gPSB7CiAJICB7IE9DU1BfUkVWT0tFRF9TVEFUVVNfVU5TUEVDSUZJRUQsICJ1bnNwZWNpZmllZCIgfSwKICAgICAgICAgICB7IE9DU1BfUkVWT0tFRF9TVEFUVVNfS0VZQ09NUFJPTUlTRSwgImtleUNvbXByb21pc2UiIH0sCiAgICAgICAgICAgeyBPQ1NQX1JFVk9LRURfU1RBVFVTX0NBQ09NUFJPTUlTRSwgImNBQ29tcHJvbWlzZSIgfSwKQEAgLTI3NSw2ICsyNzUsNyBAQAogCQl9CiAJaWYgKCFYNTA5VjNfZXh0ZW5zaW9uc19wcmludChicCwgIlJlc3BvbnNlIEV4dGVuc2lvbnMiLAogCQkJCQlyZC0+cmVzcG9uc2VFeHRlbnNpb25zLCBmbGFncywgNCkpCisJCQkJCQkJZ290byBlcnI7CiAJaWYoWDUwOV9zaWduYXR1cmVfcHJpbnQoYnAsIGJyLT5zaWduYXR1cmVBbGdvcml0aG0sIGJyLT5zaWduYXR1cmUpIDw9IDApCiAJCQkJCQkJZ290byBlcnI7CiAKZGlmZiAtLWdpdCBhL2NyeXB0by9vY3NwL29jc3BfdmZ5LmMgYi9jcnlwdG8vb2NzcC9vY3NwX3ZmeS5jCmluZGV4IDRhMGMzODcuLjQxNWQ2N2UgMTAwNjQ0Ci0tLSBhL2NyeXB0by9vY3NwL29jc3BfdmZ5LmMKKysrIGIvY3J5cHRvL29jc3Avb2NzcF92ZnkuYwpAQCAtMzA4LDYgKzMwOCw4IEBACiAJCQl9CiAKIAkJbWRsZW4gPSBFVlBfTURfc2l6ZShkZ3N0KTsKKwkJaWYgKG1kbGVuIDwgMCkKKwkJICAgIHJldHVybiAtMTsKIAkJaWYgKChjaWQtPmlzc3Vlck5hbWVIYXNoLT5sZW5ndGggIT0gbWRsZW4pIHx8CiAJCSAgIChjaWQtPmlzc3VlcktleUhhc2gtPmxlbmd0aCAhPSBtZGxlbikpCiAJCQlyZXR1cm4gMDsKQEAgLTMxNiw3ICszMTgsNyBAQAogCQkJcmV0dXJuIC0xOwogCQlpZiAobWVtY21wKG1kLCBjaWQtPmlzc3Vlck5hbWVIYXNoLT5kYXRhLCBtZGxlbikpCiAJCQlyZXR1cm4gMDsKLQkJWDUwOV9wdWJrZXlfZGlnZXN0KGNlcnQsIEVWUF9zaGExKCksIG1kLCBOVUxMKTsKKwkJWDUwOV9wdWJrZXlfZGlnZXN0KGNlcnQsIGRnc3QsIG1kLCBOVUxMKTsKIAkJaWYgKG1lbWNtcChtZCwgY2lkLT5pc3N1ZXJLZXlIYXNoLT5kYXRhLCBtZGxlbikpCiAJCQlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvY3J5cHRvL29wZW5zc2xjb25mLmggYi9jcnlwdG8vb3BlbnNzbGNvbmYuaAppbmRleCA0YWEwMzMwLi4zOTRkMWQ0IDEwMDY0NAotLS0gYS9jcnlwdG8vb3BlbnNzbGNvbmYuaAorKysgYi9jcnlwdG8vb3BlbnNzbGNvbmYuaApAQCAtOCwxOCArOCw5IEBACiAjaWZuZGVmIE9QRU5TU0xfTk9fQkYKICMgZGVmaW5lIE9QRU5TU0xfTk9fQkYKICNlbmRpZgotI2lmbmRlZiBPUEVOU1NMX05PX0NBTUVMTElBCi0jIGRlZmluZSBPUEVOU1NMX05PX0NBTUVMTElBCi0jZW5kaWYKLSNpZm5kZWYgT1BFTlNTTF9OT19DQVBJRU5HCi0jIGRlZmluZSBPUEVOU1NMX05PX0NBUElFTkcKLSNlbmRpZgogI2lmbmRlZiBPUEVOU1NMX05PX0NBU1QKICMgZGVmaW5lIE9QRU5TU0xfTk9fQ0FTVAogI2VuZGlmCi0jaWZuZGVmIE9QRU5TU0xfTk9fQ01TCi0jIGRlZmluZSBPUEVOU1NMX05PX0NNUwotI2VuZGlmCiAjaWZuZGVmIE9QRU5TU0xfTk9fR01QCiAjIGRlZmluZSBPUEVOU1NMX05PX0dNUAogI2VuZGlmCkBAIC0zNSw5ICsyNiw2IEBACiAjaWZuZGVmIE9QRU5TU0xfTk9fTUQyCiAjIGRlZmluZSBPUEVOU1NMX05PX01EMgogI2VuZGlmCi0jaWZuZGVmIE9QRU5TU0xfTk9fTURDMgotIyBkZWZpbmUgT1BFTlNTTF9OT19NREMyCi0jZW5kaWYKICNpZm5kZWYgT1BFTlNTTF9OT19SQzUKICMgZGVmaW5lIE9QRU5TU0xfTk9fUkM1CiAjZW5kaWYKQEAgLTQ3LDYgKzM1LDEyIEBACiAjaWZuZGVmIE9QRU5TU0xfTk9fU0VFRAogIyBkZWZpbmUgT1BFTlNTTF9OT19TRUVECiAjZW5kaWYKKyNpZm5kZWYgT1BFTlNTTF9OT19TVE9SRQorIyBkZWZpbmUgT1BFTlNTTF9OT19TVE9SRQorI2VuZGlmCisjaWZuZGVmIE9QRU5TU0xfTk9fV0hSTFBPT0wKKyMgZGVmaW5lIE9QRU5TU0xfTk9fV0hSTFBPT0wKKyNlbmRpZgogCiAjZW5kaWYgLyogT1BFTlNTTF9ET0lOR19NQUtFREVQRU5EICovCiAKQEAgLTY1LDE4ICs1OSw5IEBACiAjIGlmIGRlZmluZWQoT1BFTlNTTF9OT19CRikgJiYgIWRlZmluZWQoTk9fQkYpCiAjICBkZWZpbmUgTk9fQkYKICMgZW5kaWYKLSMgaWYgZGVmaW5lZChPUEVOU1NMX05PX0NBTUVMTElBKSAmJiAhZGVmaW5lZChOT19DQU1FTExJQSkKLSMgIGRlZmluZSBOT19DQU1FTExJQQotIyBlbmRpZgotIyBpZiBkZWZpbmVkKE9QRU5TU0xfTk9fQ0FQSUVORykgJiYgIWRlZmluZWQoTk9fQ0FQSUVORykKLSMgIGRlZmluZSBOT19DQVBJRU5HCi0jIGVuZGlmCiAjIGlmIGRlZmluZWQoT1BFTlNTTF9OT19DQVNUKSAmJiAhZGVmaW5lZChOT19DQVNUKQogIyAgZGVmaW5lIE5PX0NBU1QKICMgZW5kaWYKLSMgaWYgZGVmaW5lZChPUEVOU1NMX05PX0NNUykgJiYgIWRlZmluZWQoTk9fQ01TKQotIyAgZGVmaW5lIE5PX0NNUwotIyBlbmRpZgogIyBpZiBkZWZpbmVkKE9QRU5TU0xfTk9fR01QKSAmJiAhZGVmaW5lZChOT19HTVApCiAjICBkZWZpbmUgTk9fR01QCiAjIGVuZGlmCkBAIC05Miw5ICs3Nyw2IEBACiAjIGlmIGRlZmluZWQoT1BFTlNTTF9OT19NRDIpICYmICFkZWZpbmVkKE5PX01EMikKICMgIGRlZmluZSBOT19NRDIKICMgZW5kaWYKLSMgaWYgZGVmaW5lZChPUEVOU1NMX05PX01EQzIpICYmICFkZWZpbmVkKE5PX01EQzIpCi0jICBkZWZpbmUgTk9fTURDMgotIyBlbmRpZgogIyBpZiBkZWZpbmVkKE9QRU5TU0xfTk9fUkM1KSAmJiAhZGVmaW5lZChOT19SQzUpCiAjICBkZWZpbmUgTk9fUkM1CiAjIGVuZGlmCkBAIC0xMDQsMjUgKzg2LDE2IEBACiAjIGlmIGRlZmluZWQoT1BFTlNTTF9OT19TRUVEKSAmJiAhZGVmaW5lZChOT19TRUVEKQogIyAgZGVmaW5lIE5PX1NFRUQKICMgZW5kaWYKKyMgaWYgZGVmaW5lZChPUEVOU1NMX05PX1NUT1JFKSAmJiAhZGVmaW5lZChOT19TVE9SRSkKKyMgIGRlZmluZSBOT19TVE9SRQorIyBlbmRpZgorIyBpZiBkZWZpbmVkKE9QRU5TU0xfTk9fV0hSTFBPT0wpICYmICFkZWZpbmVkKE5PX1dIUkxQT09MKQorIyAgZGVmaW5lIE5PX1dIUkxQT09MCisjIGVuZGlmCiAjZW5kaWYKIAogLyogY3J5cHRvL29wZW5zc2xjb25mLmguaW4gKi8KIAotI2lmZGVmIE9QRU5TU0xfRE9JTkdfTUFLRURFUEVORAotCi0vKiBJbmNsdWRlIGFueSBzeW1ib2xzIGhlcmUgdGhhdCBoYXZlIHRvIGJlIGV4cGxpY2l0bHkgc2V0IHRvIGVuYWJsZSBhIGZlYXR1cmUKLSAqIHRoYXQgc2hvdWxkIGJlIHZpc2libGUgdG8gbWFrZWRlcGVuZC4KLSAqCi0gKiBbT3VyICJtYWtlIGRlcGVuZCIgZG9lc24ndCBhY3R1YWxseSBsb29rIGF0IHRoaXMsIHdlIHVzZSBhY3R1YWwgYnVpbGQgc2V0dGluZ3MKLSAqIGluc3RlYWQ7IHdlIHdhbnQgdG8gbWFrZSBpdCBlYXN5IHRvIHJlbW92ZSBzdWJkaXJlY3RvcmllcyB3aXRoIGRpc2FibGVkIGFsZ29yaXRobXMuXQotICovCi0KLSNpZm5kZWYgT1BFTlNTTF9GSVBTCi0jZGVmaW5lIE9QRU5TU0xfRklQUwotI2VuZGlmCi0KLSNlbmRpZgotCiAvKiBHZW5lcmF0ZSA4MDM4NiBjb2RlPyAqLwogI3VuZGVmIEkzODZfT05MWQogCkBAIC0xODYsMTQgKzE1OSw5IEBACiAvKiBTaG91bGQgd2UgZGVmaW5lIEJOX0RJVjJXIGhlcmU/ICovCiAKIC8qIE9ubHkgb25lIGZvciB0aGUgZm9sbG93aW5nIHNob3VsZCBiZSBkZWZpbmVkICovCi0vKiBUaGUgcHJpbWUgbnVtYmVyIGdlbmVyYXRpb24gc3R1ZmYgbWF5IG5vdCB3b3JrIHdoZW4KLSAqIEVJR0hUX0JJVCBidXQgSSBkb24ndCBjYXJlIHNpbmNlIEkndmUgb25seSB1c2VkIHRoaXMgbW9kZQotICogZm9yIGRlYnVnaW5nIHRoZSBiaWdudW0gbGlicmFyaWVzICovCiAjdW5kZWYgU0lYVFlfRk9VUl9CSVRfTE9ORwogI3VuZGVmIFNJWFRZX0ZPVVJfQklUCiAjZGVmaW5lIFRISVJUWV9UV09fQklUCi0jdW5kZWYgU0lYVEVFTl9CSVQKLSN1bmRlZiBFSUdIVF9CSVQKICNlbmRpZgogCiAjaWYgZGVmaW5lZChIRUFERVJfUkM0X0xPQ0xfSCkgJiYgIWRlZmluZWQoQ09ORklHX0hFQURFUl9SQzRfTE9DTF9IKQpkaWZmIC0tZ2l0IGEvY3J5cHRvL29wZW5zc2xjb25mLmguaW4gYi9jcnlwdG8vb3BlbnNzbGNvbmYuaC5pbgppbmRleCAxYzc3ZjAzLi45N2UzNzQ1IDEwMDY0NAotLS0gYS9jcnlwdG8vb3BlbnNzbGNvbmYuaC5pbgorKysgYi9jcnlwdG8vb3BlbnNzbGNvbmYuaC5pbgpAQCAtMSwyMCArMSw1IEBACiAvKiBjcnlwdG8vb3BlbnNzbGNvbmYuaC5pbiAqLwogCi0jaWZkZWYgT1BFTlNTTF9ET0lOR19NQUtFREVQRU5ECi0KLS8qIEluY2x1ZGUgYW55IHN5bWJvbHMgaGVyZSB0aGF0IGhhdmUgdG8gYmUgZXhwbGljaXRseSBzZXQgdG8gZW5hYmxlIGEgZmVhdHVyZQotICogdGhhdCBzaG91bGQgYmUgdmlzaWJsZSB0byBtYWtlZGVwZW5kLgotICoKLSAqIFtPdXIgIm1ha2UgZGVwZW5kIiBkb2Vzbid0IGFjdHVhbGx5IGxvb2sgYXQgdGhpcywgd2UgdXNlIGFjdHVhbCBidWlsZCBzZXR0aW5ncwotICogaW5zdGVhZDsgd2Ugd2FudCB0byBtYWtlIGl0IGVhc3kgdG8gcmVtb3ZlIHN1YmRpcmVjdG9yaWVzIHdpdGggZGlzYWJsZWQgYWxnb3JpdGhtcy5dCi0gKi8KLQotI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSNkZWZpbmUgT1BFTlNTTF9GSVBTCi0jZW5kaWYKLQotI2VuZGlmCi0KIC8qIEdlbmVyYXRlIDgwMzg2IGNvZGU/ICovCiAjdW5kZWYgSTM4Nl9PTkxZCiAKQEAgLTc4LDE0ICs2Myw5IEBACiAvKiBTaG91bGQgd2UgZGVmaW5lIEJOX0RJVjJXIGhlcmU/ICovCiAKIC8qIE9ubHkgb25lIGZvciB0aGUgZm9sbG93aW5nIHNob3VsZCBiZSBkZWZpbmVkICovCi0vKiBUaGUgcHJpbWUgbnVtYmVyIGdlbmVyYXRpb24gc3R1ZmYgbWF5IG5vdCB3b3JrIHdoZW4KLSAqIEVJR0hUX0JJVCBidXQgSSBkb24ndCBjYXJlIHNpbmNlIEkndmUgb25seSB1c2VkIHRoaXMgbW9kZQotICogZm9yIGRlYnVnaW5nIHRoZSBiaWdudW0gbGlicmFyaWVzICovCiAjdW5kZWYgU0lYVFlfRk9VUl9CSVRfTE9ORwogI3VuZGVmIFNJWFRZX0ZPVVJfQklUCiAjZGVmaW5lIFRISVJUWV9UV09fQklUCi0jdW5kZWYgU0lYVEVFTl9CSVQKLSN1bmRlZiBFSUdIVF9CSVQKICNlbmRpZgogCiAjaWYgZGVmaW5lZChIRUFERVJfUkM0X0xPQ0xfSCkgJiYgIWRlZmluZWQoQ09ORklHX0hFQURFUl9SQzRfTE9DTF9IKQpkaWZmIC0tZ2l0IGEvY3J5cHRvL29wZW5zc2x2LmggYi9jcnlwdG8vb3BlbnNzbHYuaAppbmRleCAzZDc5NGQ5Li5jYmU1MjY0IDEwMDY0NAotLS0gYS9jcnlwdG8vb3BlbnNzbHYuaAorKysgYi9jcnlwdG8vb3BlbnNzbHYuaApAQCAtMTIsNyArMTIsNyBAQAogICogMC45LjMtYmV0YTIgICAgMHgwMDkwMzAwMiAoc2FtZSBhcyAuLi5iZXRhMi1kZXYpCiAgKiAwLjkuMwkgIDB4MDA5MDMwMGYKICAqIDAuOS4zYQkgIDB4MDA5MDMwMWYKLSAqIDAuOS40CSAgMHgwMDkwNDAwZgorICogMC45LjQgCSAgMHgwMDkwNDAwZgogICogMS4yLjN6CSAgMHgxMDIwMzFhZgogICoKICAqIEZvciBjb250aW51aXR5IHJlYXNvbnMgKGJlY2F1c2UgMC45LjUgaXMgYWxyZWFkeSBvdXQsIGFuZCBpcyBjb2RlZApAQCAtMjUsMTEgKzI1LDExIEBACiAgKiAoUHJpb3IgdG8gMC45LjVhIGJldGExLCBhIGRpZmZlcmVudCBzY2hlbWUgd2FzIHVzZWQ6IE1NTk5GRlJCQiBmb3IKICAqICBtYWpvciBtaW5vciBmaXggZmluYWwgcGF0Y2gvYmV0YSkKICAqLwotI2RlZmluZSBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSCTB4MDA5MDgwZGZMCisjZGVmaW5lIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIJMHgxMDAwMDAwZkwKICNpZmRlZiBPUEVOU1NMX0ZJUFMKLSNkZWZpbmUgT1BFTlNTTF9WRVJTSU9OX1RFWFQJIk9wZW5TU0wgMC45LjhtLWZpcHMgMjUgRmViIDIwMTAiCisjZGVmaW5lIE9QRU5TU0xfVkVSU0lPTl9URVhUCSJPcGVuU1NMIDEuMC4wLWZpcHMgMjkgTWFyIDIwMTAiCiAjZWxzZQotI2RlZmluZSBPUEVOU1NMX1ZFUlNJT05fVEVYVAkiT3BlblNTTCAwLjkuOG0gMjUgRmViIDIwMTAiCisjZGVmaW5lIE9QRU5TU0xfVkVSU0lPTl9URVhUCSJPcGVuU1NMIDEuMC4wIDI5IE1hciAyMDEwIgogI2VuZGlmCiAjZGVmaW5lIE9QRU5TU0xfVkVSU0lPTl9QVEVYVAkiIHBhcnQgb2YgIiBPUEVOU1NMX1ZFUlNJT05fVEVYVAogCkBAIC04Myw3ICs4Myw3IEBACiAgKiBzaG91bGQgb25seSBrZWVwIHRoZSB2ZXJzaW9ucyB0aGF0IGFyZSBiaW5hcnkgY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50LgogICovCiAjZGVmaW5lIFNITElCX1ZFUlNJT05fSElTVE9SWSAiIgotI2RlZmluZSBTSExJQl9WRVJTSU9OX05VTUJFUiAiMC45LjgiCisjZGVmaW5lIFNITElCX1ZFUlNJT05fTlVNQkVSICIxLjAuMCIKIAogCiAjZW5kaWYgLyogSEVBREVSX09QRU5TU0xWX0ggKi8KZGlmZiAtLWdpdCBhL2NyeXB0by9vc3NsX3R5cC5oIGIvY3J5cHRvL29zc2xfdHlwLmgKaW5kZXggMGU3YTM4MC4uMTJiZDcwMSAxMDA2NDQKLS0tIGEvY3J5cHRvL29zc2xfdHlwLmgKKysrIGIvY3J5cHRvL29zc2xfdHlwLmgKQEAgLTk1LDYgKzk1LDggQEAKIHR5cGVkZWYgaW50IEFTTjFfTlVMTDsKICNlbmRpZgogCit0eXBlZGVmIHN0cnVjdCBhc24xX3BjdHhfc3QgQVNOMV9QQ1RYOworCiAjaWZkZWYgT1BFTlNTTF9TWVNfV0lOMzIKICN1bmRlZiBYNTA5X05BTUUKICN1bmRlZiBYNTA5X0VYVEVOU0lPTlMKQEAgLTEyMiw2ICsxMjQsMTEgQEAKIHR5cGVkZWYgc3RydWN0IGVudl9tZF9jdHhfc3QgRVZQX01EX0NUWDsKIHR5cGVkZWYgc3RydWN0IGV2cF9wa2V5X3N0IEVWUF9QS0VZOwogCit0eXBlZGVmIHN0cnVjdCBldnBfcGtleV9hc24xX21ldGhvZF9zdCBFVlBfUEtFWV9BU04xX01FVEhPRDsKKwordHlwZWRlZiBzdHJ1Y3QgZXZwX3BrZXlfbWV0aG9kX3N0IEVWUF9QS0VZX01FVEhPRDsKK3R5cGVkZWYgc3RydWN0IGV2cF9wa2V5X2N0eF9zdCBFVlBfUEtFWV9DVFg7CisKIHR5cGVkZWYgc3RydWN0IGRoX3N0IERIOwogdHlwZWRlZiBzdHJ1Y3QgZGhfbWV0aG9kIERIX01FVEhPRDsKIApAQCAtMTM5LDExICsxNDYsMTQgQEAKIHR5cGVkZWYgc3RydWN0IHg1MDlfc3QgWDUwOTsKIHR5cGVkZWYgc3RydWN0IFg1MDlfYWxnb3Jfc3QgWDUwOV9BTEdPUjsKIHR5cGVkZWYgc3RydWN0IFg1MDlfY3JsX3N0IFg1MDlfQ1JMOwordHlwZWRlZiBzdHJ1Y3QgeDUwOV9jcmxfbWV0aG9kX3N0IFg1MDlfQ1JMX01FVEhPRDsKK3R5cGVkZWYgc3RydWN0IHg1MDlfcmV2b2tlZF9zdCBYNTA5X1JFVk9LRUQ7CiB0eXBlZGVmIHN0cnVjdCBYNTA5X25hbWVfc3QgWDUwOV9OQU1FOwordHlwZWRlZiBzdHJ1Y3QgWDUwOV9wdWJrZXlfc3QgWDUwOV9QVUJLRVk7CiB0eXBlZGVmIHN0cnVjdCB4NTA5X3N0b3JlX3N0IFg1MDlfU1RPUkU7CiB0eXBlZGVmIHN0cnVjdCB4NTA5X3N0b3JlX2N0eF9zdCBYNTA5X1NUT1JFX0NUWDsKLXR5cGVkZWYgc3RydWN0IHNzbF9zdCBTU0w7Ci10eXBlZGVmIHN0cnVjdCBzc2xfY3R4X3N0IFNTTF9DVFg7CisKK3R5cGVkZWYgc3RydWN0IHBrY3M4X3ByaXZfa2V5X2luZm9fc3QgUEtDUzhfUFJJVl9LRVlfSU5GTzsKIAogdHlwZWRlZiBzdHJ1Y3QgdjNfZXh0X2N0eCBYNTA5VjNfQ1RYOwogdHlwZWRlZiBzdHJ1Y3QgY29uZl9zdCBDT05GOwpAQCAtMTU3LDEyICsxNjcsMTkgQEAKIHR5cGVkZWYgc3RydWN0IHN0X0VSUl9GTlMgRVJSX0ZOUzsKIAogdHlwZWRlZiBzdHJ1Y3QgZW5naW5lX3N0IEVOR0lORTsKK3R5cGVkZWYgc3RydWN0IHNzbF9zdCBTU0w7Cit0eXBlZGVmIHN0cnVjdCBzc2xfY3R4X3N0IFNTTF9DVFg7CiAKIHR5cGVkZWYgc3RydWN0IFg1MDlfUE9MSUNZX05PREVfc3QgWDUwOV9QT0xJQ1lfTk9ERTsKIHR5cGVkZWYgc3RydWN0IFg1MDlfUE9MSUNZX0xFVkVMX3N0IFg1MDlfUE9MSUNZX0xFVkVMOwogdHlwZWRlZiBzdHJ1Y3QgWDUwOV9QT0xJQ1lfVFJFRV9zdCBYNTA5X1BPTElDWV9UUkVFOwogdHlwZWRlZiBzdHJ1Y3QgWDUwOV9QT0xJQ1lfQ0FDSEVfc3QgWDUwOV9QT0xJQ1lfQ0FDSEU7CiAKK3R5cGVkZWYgc3RydWN0IEFVVEhPUklUWV9LRVlJRF9zdCBBVVRIT1JJVFlfS0VZSUQ7Cit0eXBlZGVmIHN0cnVjdCBESVNUX1BPSU5UX3N0IERJU1RfUE9JTlQ7Cit0eXBlZGVmIHN0cnVjdCBJU1NVSU5HX0RJU1RfUE9JTlRfc3QgSVNTVUlOR19ESVNUX1BPSU5UOwordHlwZWRlZiBzdHJ1Y3QgTkFNRV9DT05TVFJBSU5UU19zdCBOQU1FX0NPTlNUUkFJTlRTOworCiAgIC8qIElmIHBsYWNlZCBpbiBwa2NzMTIuaCwgd2UgZW5kIHVwIHdpdGggYSBjaXJjdWxhciBkZXBlbmN5IHdpdGggcGtjczcuaCAqLwogI2RlZmluZSBERUNMQVJFX1BLQ1MxMl9TVEFDS19PRih0eXBlKSAvKiBOb3RoaW5nICovCiAjZGVmaW5lIElNUExFTUVOVF9QS0NTMTJfU1RBQ0tfT0YodHlwZSkgLyogTm90aGluZyAqLwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3BlbS9NYWtlZmlsZSBiL2NyeXB0by9wZW0vTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2OWYzNjYuLjAwMDAwMDAKLS0tIGEvY3J5cHRvL3BlbS9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDI0NSArMCwwIEBACi0jCi0jIE9wZW5TU0wvY3J5cHRvL3BlbS9NYWtlZmlsZQotIwotCi1ESVI9CXBlbQotVE9QPQkuLi8uLgotQ0M9CWNjCi1JTkNMVURFUz0gLUkuLiAtSSQoVE9QKSAtSS4uLy4uL2luY2x1ZGUKLUNGTEFHPS1nCi1NQUtFRklMRT0JTWFrZWZpbGUKLUFSPQkJYXIgcgotCi1DRkxBR1M9ICQoSU5DTFVERVMpICQoQ0ZMQUcpCi0KLUdFTkVSQUw9TWFrZWZpbGUKLVRFU1Q9Ci1BUFBTPQotCi1MSUI9JChUT1ApL2xpYmNyeXB0by5hCi1MSUJTUkM9IHBlbV9zaWduLmMgcGVtX3NlYWwuYyBwZW1faW5mby5jIHBlbV9saWIuYyBwZW1fYWxsLmMgcGVtX2Vyci5jIFwKLQlwZW1feDUwOS5jIHBlbV94YXV4LmMgcGVtX290aC5jIHBlbV9wazguYyBwZW1fcGtleS5jCi0KLUxJQk9CSj0JcGVtX3NpZ24ubyBwZW1fc2VhbC5vIHBlbV9pbmZvLm8gcGVtX2xpYi5vIHBlbV9hbGwubyBwZW1fZXJyLm8gXAotCXBlbV94NTA5Lm8gcGVtX3hhdXgubyBwZW1fb3RoLm8gcGVtX3BrOC5vIHBlbV9wa2V5Lm8KLQotU1JDPSAkKExJQlNSQykKLQotRVhIRUFERVI9IHBlbS5oIHBlbTIuaAotSEVBREVSPQkkKEVYSEVBREVSKQotCi1BTEw9ICAgICQoR0VORVJBTCkgJChTUkMpICQoSEVBREVSKQotCi10b3A6Ci0JKGNkIC4uLy4uOyAkKE1BS0UpIERJUlM9Y3J5cHRvIFNESVJTPSQoRElSKSBzdWJfYWxsKQotCi1hbGw6CWxpYgotCi1saWI6CSQoTElCT0JKKQotCSQoQVJYKSAkKExJQikgJChMSUJPQkopCi0JJChSQU5MSUIpICQoTElCKSB8fCBlY2hvIE5ldmVyIG1pbmQuCi0JQHRvdWNoIGxpYgotCi1maWxlczoKLQkkKFBFUkwpICQoVE9QKS91dGlsL2ZpbGVzLnBsIE1ha2VmaWxlID4+ICQoVE9QKS9NSU5GTwotCi1saW5rczogJChFWEhFQURFUikKLQlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vaW5jbHVkZS9vcGVuc3NsICQoRVhIRUFERVIpCi0JQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL3Rlc3QgJChURVNUKQotCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9hcHBzICQoQVBQUykKLQotaW5zdGFsbDoKLQlAWyAtbiAiJChJTlNUQUxMVE9QKSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdG9wIE1ha2VmaWxlLi4uCi0JQGhlYWRlcmxpc3Q9IiQoRVhIRUFERVIpIjsgZm9yIGkgaW4gJCRoZWFkZXJsaXN0IDsgXAotCWRvICBcCi0JKGNwICQkaSAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaTsgXAotCWNobW9kIDY0NCAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaSApOyBcCi0JZG9uZTsKLQotdGFnczoKLQljdGFncyAkKFNSQykKLQotdGVzdHM6Ci0KLWxpbnQ6Ci0JbGludCAtRExJTlQgJChJTkNMVURFUykgJChTUkMpPmZsdWZmCi0KLWRlcGVuZDoKLQlAWyAtbiAiJChNQUtFREVQRU5EKSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdXBwZXIgTWFrZWZpbGUuLi4KLQkkKE1BS0VERVBFTkQpIC0tICQoQ0ZMQUcpICQoSU5DTFVERVMpICQoREVQRkxBRykgLS0gJChMSUJTUkMpCi0KLWRjbGVhbjoKLQkkKFBFUkwpIC1wZSAnaWYgKC9eIyBETyBOT1QgREVMRVRFIFRISVMgTElORS8pIHtwcmludDsgZXhpdCgwKTt9JyAkKE1BS0VGSUxFKSA+TWFrZWZpbGUubmV3Ci0JbXYgLWYgTWFrZWZpbGUubmV3ICQoTUFLRUZJTEUpCi0KLWNsZWFuOgotCXJtIC1mICoubyAqLm9iaiBsaWIgdGFncyBjb3JlIC5wdXJlIC5uZnMqICoub2xkICouYmFrIGZsdWZmCi0KLSMgRE8gTk9UIERFTEVURSBUSElTIExJTkUgLS0gbWFrZSBkZXBlbmQgZGVwZW5kcyBvbiBpdC4KLQotcGVtX2FsbC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotcGVtX2FsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1wZW1fYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZGguaAotcGVtX2FsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLXBlbV9hbGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotcGVtX2FsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLXBlbV9hbGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLXBlbV9hbGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotcGVtX2FsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1wZW1fYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1wZW1fYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wZW0uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGVtMi5oCi1wZW1fYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAotcGVtX2FsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCi1wZW1fYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1wZW1fYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmgKLXBlbV9hbGwubzogLi4vY3J5cHRsaWIuaCBwZW1fYWxsLmMKLXBlbV9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXBlbV9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotcGVtX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotcGVtX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi1wZW1fZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLXBlbV9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotcGVtX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLXBlbV9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLXBlbV9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BlbS5oCi1wZW1fZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLXBlbV9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotcGVtX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotcGVtX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oCi1wZW1fZXJyLm86IHBlbV9lcnIuYwotcGVtX2luZm8ubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLXBlbV9pbmZvLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXBlbV9pbmZvLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZHNhLmgKLXBlbV9pbmZvLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1wZW1faW5mby5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi1wZW1faW5mby5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1wZW1faW5mby5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1wZW1faW5mby5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLXBlbV9pbmZvLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1wZW1faW5mby5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotcGVtX2luZm8ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BlbS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmgKLXBlbV9pbmZvLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAotcGVtX2luZm8ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotcGVtX2luZm8ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLXBlbV9pbmZvLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmgKLXBlbV9pbmZvLm86IC4uL2NyeXB0bGliLmggcGVtX2luZm8uYwotcGVtX2xpYi5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotcGVtX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1wZW1fbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZGVzLmgKLXBlbV9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Rlc19vbGQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotcGVtX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi1wZW1fbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotcGVtX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotcGVtX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi1wZW1fbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXBlbV9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXBlbV9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BlbS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmgKLXBlbV9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3MxMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi1wZW1fbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1wZW1fbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotcGVtX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvdWkuaAotcGVtX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvdWlfY29tcGF0LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotcGVtX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9jcnlwdGxpYi5oIHBlbV9saWIuYwotcGVtX290aC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotcGVtX290aC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1wZW1fb3RoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotcGVtX290aC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi1wZW1fb3RoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotcGVtX290aC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotcGVtX290aC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi1wZW1fb3RoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXBlbV9vdGgubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXBlbV9vdGgubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BlbS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmgKLXBlbV9vdGgubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAotcGVtX290aC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCi1wZW1fb3RoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1wZW1fb3RoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmgKLXBlbV9vdGgubzogLi4vY3J5cHRsaWIuaCBwZW1fb3RoLmMKLXBlbV9wazgubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLXBlbV9wazgubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotcGVtX3BrOC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLXBlbV9wazgubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotcGVtX3BrOC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLXBlbV9wazgubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLXBlbV9wazgubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotcGVtX3BrOC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1wZW1fcGs4Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1wZW1fcGs4Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wZW0uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGVtMi5oCi1wZW1fcGs4Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzMTIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAotcGVtX3BrOC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotcGVtX3BrOC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLXBlbV9wazgubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotcGVtX3BrOC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9jcnlwdGxpYi5oIHBlbV9wazguYwotcGVtX3BrZXkubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLXBlbV9wa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXBlbV9wa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotcGVtX3BrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotcGVtX3BrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1wZW1fcGtleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotcGVtX3BrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotcGVtX3BrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotcGVtX3BrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXBlbV9wa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wZW0uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGVtMi5oCi1wZW1fcGtleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczEyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLXBlbV9wa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1wZW1fcGtleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLXBlbV9wa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLXBlbV9wa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2NyeXB0bGliLmggcGVtX3BrZXkuYwotcGVtX3NlYWwubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLXBlbV9zZWFsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXBlbV9zZWFsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotcGVtX3NlYWwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotcGVtX3NlYWwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1wZW1fc2VhbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotcGVtX3NlYWwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotcGVtX3NlYWwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotcGVtX3NlYWwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXBlbV9zZWFsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wZW0uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGVtMi5oCi1wZW1fc2VhbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCi1wZW1fc2VhbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcnNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1wZW1fc2VhbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLXBlbV9zZWFsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLXBlbV9zZWFsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2NyeXB0bGliLmggcGVtX3NlYWwuYwotcGVtX3NpZ24ubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLXBlbV9zaWduLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXBlbV9zaWduLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotcGVtX3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotcGVtX3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1wZW1fc2lnbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotcGVtX3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotcGVtX3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotcGVtX3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXBlbV9zaWduLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wZW0uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGVtMi5oCi1wZW1fc2lnbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCi1wZW1fc2lnbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCi1wZW1fc2lnbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotcGVtX3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAotcGVtX3NpZ24ubzogLi4vY3J5cHRsaWIuaCBwZW1fc2lnbi5jCi1wZW1feDUwOS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotcGVtX3g1MDkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotcGVtX3g1MDkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1wZW1feDUwOS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi1wZW1feDUwOS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLXBlbV94NTA5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi1wZW1feDUwOS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi1wZW1feDUwOS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1wZW1feDUwOS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotcGVtX3g1MDkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BlbS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmgKLXBlbV94NTA5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotcGVtX3g1MDkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1wZW1feDUwOS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi1wZW1feDUwOS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9jcnlwdGxpYi5oIHBlbV94NTA5LmMKLXBlbV94YXV4Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi1wZW1feGF1eC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1wZW1feGF1eC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLXBlbV94YXV4Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKLXBlbV94YXV4Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotcGVtX3hhdXgubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLXBlbV94YXV4Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLXBlbV94YXV4Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXBlbV94YXV4Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1wZW1feGF1eC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGVtLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaAotcGVtX3hhdXgubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1wZW1feGF1eC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLXBlbV94YXV4Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLXBlbV94YXV4Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2NyeXB0bGliLmggcGVtX3hhdXguYwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3BlbS9wZW0uaCBiL2NyeXB0by9wZW0vcGVtLmgKaW5kZXggNmMxOTNmMS4uMjIyMzFjMiAxMDA2NDQKLS0tIGEvY3J5cHRvL3BlbS9wZW0uaAorKysgYi9jcnlwdG8vcGVtL3BlbS5oCkBAIC0xMzQsNiArMTM0LDcgQEAKICNkZWZpbmUgUEVNX1NUUklOR19FQ0RTQV9QVUJMSUMgIkVDRFNBIFBVQkxJQyBLRVkiCiAjZGVmaW5lIFBFTV9TVFJJTkdfRUNQQVJBTUVURVJTICJFQyBQQVJBTUVURVJTIgogI2RlZmluZSBQRU1fU1RSSU5HX0VDUFJJVkFURUtFWQkiRUMgUFJJVkFURSBLRVkiCisjZGVmaW5lIFBFTV9TVFJJTkdfUEFSQU1FVEVSUwkiUEFSQU1FVEVSUyIKICNkZWZpbmUgUEVNX1NUUklOR19DTVMJCSJDTVMiCiAKICAgLyogTm90ZSB0aGF0IHRoaXMgc3RydWN0dXJlIGlzIGluaXRpYWxpc2VkIGJ5IFBFTV9TZWFsSW5pdCBhbmQgY2xlYW5lZCB1cApAQCAtMTgzLDExICsxODQsOCBAQAogCWludCBudW1fcmVjaXBpZW50OwogCVBFTV9VU0VSICoqcmVjaXBpZW50OwogCi0jaWZuZGVmIE9QRU5TU0xfTk9fU1RBQ0sKLQlTVEFDSyAqeDUwOV9jaGFpbjsJLyogY2VydGlmaWNhdGUgY2hhaW4gKi8KLSNlbHNlCi0JY2hhciAqeDUwOV9jaGFpbjsJLyogY2VydGlmaWNhdGUgY2hhaW4gKi8KLSNlbmRpZgorCS8qIFhYWChiZW4pOiBkb24jdCB0aGluayB0aGlzIGlzIHVzZWQhIAorCQlTVEFDSyAqeDUwOV9jaGFpbjsJLyAqIGNlcnRpZmljYXRlIGNoYWluICovCiAJRVZQX01EICptZDsJCS8qIHNpZ25hdHVyZSB0eXBlICovCiAKIAlpbnQgbWRfZW5jOwkJLyogaXMgdGhlIG1kIGVuY3J5cHRlZCBvciBub3Q/ICovCkBAIC0yMjQsMjggKzIyMiwxOSBAQAogI2RlZmluZSBJTVBMRU1FTlRfUEVNX3JlYWRfZnAobmFtZSwgdHlwZSwgc3RyLCBhc24xKSBcCiB0eXBlICpQRU1fcmVhZF8jI25hbWUoRklMRSAqZnAsIHR5cGUgKip4LCBwZW1fcGFzc3dvcmRfY2IgKmNiLCB2b2lkICp1KVwKIHsgXAotICAgIHJldHVybiAodHlwZSopUEVNX0FTTjFfcmVhZChDSEVDS0VEX0QySV9PRih0eXBlLCBkMmlfIyNhc24xKSwgXAotCQkJCXN0ciwgZnAsIFwKLQkJCQlDSEVDS0VEX1BQVFJfT0YodHlwZSwgeCksIFwKLQkJCQljYiwgdSk7IFwKK3JldHVybiBQRU1fQVNOMV9yZWFkKChkMmlfb2Zfdm9pZCAqKWQyaV8jI2FzbjEsIHN0cixmcCwodm9pZCAqKil4LGNiLHUpOyBcCiB9IAogCiAjZGVmaW5lIElNUExFTUVOVF9QRU1fd3JpdGVfZnAobmFtZSwgdHlwZSwgc3RyLCBhc24xKSBcCiBpbnQgUEVNX3dyaXRlXyMjbmFtZShGSUxFICpmcCwgdHlwZSAqeCkgXAogeyBcCi0gICAgcmV0dXJuIFBFTV9BU04xX3dyaXRlKENIRUNLRURfSTJEX09GKHR5cGUsIGkyZF8jI2FzbjEpLCBcCi0JCQkgIHN0ciwgZnAsIFwKLQkJCSAgQ0hFQ0tFRF9QVFJfT0YodHlwZSwgeCksIFwKLQkJCSAgTlVMTCwgTlVMTCwgMCwgTlVMTCwgTlVMTCk7IFwKK3JldHVybiBQRU1fQVNOMV93cml0ZSgoaTJkX29mX3ZvaWQgKilpMmRfIyNhc24xLHN0cixmcCx4LE5VTEwsTlVMTCwwLE5VTEwsTlVMTCk7IFwKIH0KIAogI2RlZmluZSBJTVBMRU1FTlRfUEVNX3dyaXRlX2ZwX2NvbnN0KG5hbWUsIHR5cGUsIHN0ciwgYXNuMSkgXAogaW50IFBFTV93cml0ZV8jI25hbWUoRklMRSAqZnAsIGNvbnN0IHR5cGUgKngpIFwKIHsgXAotICAgIHJldHVybiBQRU1fQVNOMV93cml0ZShDSEVDS0VEX0kyRF9PRihjb25zdCB0eXBlLCBpMmRfIyNhc24xKSwgXAotCQkJICBzdHIsIGZwLCBcCi0JCQkgIENIRUNLRURfUFRSX09GKGNvbnN0IHR5cGUsIHgpLCBcCi0JCQkgIE5VTEwsIE5VTEwsIDAsIE5VTEwsIE5VTEwpOyBcCityZXR1cm4gUEVNX0FTTjFfd3JpdGUoKGkyZF9vZl92b2lkICopaTJkXyMjYXNuMSxzdHIsZnAsKHZvaWQgKil4LE5VTEwsTlVMTCwwLE5VTEwsTlVMTCk7IFwKIH0KIAogI2RlZmluZSBJTVBMRU1FTlRfUEVNX3dyaXRlX2NiX2ZwKG5hbWUsIHR5cGUsIHN0ciwgYXNuMSkgXApAQCAtMjUzLDEwICsyNDIsNyBAQAogCSAgICAgdW5zaWduZWQgY2hhciAqa3N0ciwgaW50IGtsZW4sIHBlbV9wYXNzd29yZF9jYiAqY2IsIFwKIAkJICB2b2lkICp1KSBcCiAJeyBcCi0JICAgIHJldHVybiBQRU1fQVNOMV93cml0ZShDSEVDS0VEX0kyRF9PRih0eXBlLCBpMmRfIyNhc24xKSwgXAotCQkJCSAgc3RyLCBmcCwgXAotCQkJCSAgQ0hFQ0tFRF9QVFJfT0YodHlwZSwgeCksIFwKLQkJCQkgIGVuYywga3N0ciwga2xlbiwgY2IsIHUpOyBcCisJcmV0dXJuIFBFTV9BU04xX3dyaXRlKChpMmRfb2Zfdm9pZCAqKWkyZF8jI2FzbjEsc3RyLGZwLHgsZW5jLGtzdHIsa2xlbixjYix1KTsgXAogCX0KIAogI2RlZmluZSBJTVBMRU1FTlRfUEVNX3dyaXRlX2NiX2ZwX2NvbnN0KG5hbWUsIHR5cGUsIHN0ciwgYXNuMSkgXApAQCAtMjY0LDEwICsyNTAsNyBAQAogCSAgICAgdW5zaWduZWQgY2hhciAqa3N0ciwgaW50IGtsZW4sIHBlbV9wYXNzd29yZF9jYiAqY2IsIFwKIAkJICB2b2lkICp1KSBcCiAJeyBcCi0JICAgIHJldHVybiBQRU1fQVNOMV93cml0ZShDSEVDS0VEX0kyRF9PRihjb25zdCB0eXBlLCBpMmRfIyNhc24xKSwgXAotCQkJCSAgc3RyLCBmcCwgXAotCQkJCSAgQ0hFQ0tFRF9QVFJfT0YoY29uc3QgdHlwZSwgeCksIFwKLQkJCQkgIGVuYywga3N0ciwga2xlbiwgY2IsIHUpOyBcCisJcmV0dXJuIFBFTV9BU04xX3dyaXRlKChpMmRfb2Zfdm9pZCAqKWkyZF8jI2FzbjEsc3RyLGZwLHgsZW5jLGtzdHIsa2xlbixjYix1KTsgXAogCX0KIAogI2VuZGlmCkBAIC0yNzUsNDggKzI1OCwzMyBAQAogI2RlZmluZSBJTVBMRU1FTlRfUEVNX3JlYWRfYmlvKG5hbWUsIHR5cGUsIHN0ciwgYXNuMSkgXAogdHlwZSAqUEVNX3JlYWRfYmlvXyMjbmFtZShCSU8gKmJwLCB0eXBlICoqeCwgcGVtX3Bhc3N3b3JkX2NiICpjYiwgdm9pZCAqdSlcCiB7IFwKLSAgICByZXR1cm4gKHR5cGUqKVBFTV9BU04xX3JlYWRfYmlvKENIRUNLRURfRDJJX09GKHR5cGUsIGQyaV8jI2FzbjEpLCBcCi0JCQkJICAgIHN0ciwgYnAsIFwKLQkJCQkgICAgQ0hFQ0tFRF9QUFRSX09GKHR5cGUsIHgpLCBcCi0JCQkJICAgIGNiLCB1KTsgXAorcmV0dXJuIFBFTV9BU04xX3JlYWRfYmlvKChkMmlfb2Zfdm9pZCAqKWQyaV8jI2FzbjEsIHN0cixicCwodm9pZCAqKil4LGNiLHUpOyBcCiB9CiAKICNkZWZpbmUgSU1QTEVNRU5UX1BFTV93cml0ZV9iaW8obmFtZSwgdHlwZSwgc3RyLCBhc24xKSBcCiBpbnQgUEVNX3dyaXRlX2Jpb18jI25hbWUoQklPICpicCwgdHlwZSAqeCkgXAogeyBcCi0gICAgcmV0dXJuIFBFTV9BU04xX3dyaXRlX2JpbyhDSEVDS0VEX0kyRF9PRih0eXBlLCBpMmRfIyNhc24xKSwgXAotCQkJICAgICAgc3RyLCBicCwgXAotCQkJICAgICAgQ0hFQ0tFRF9QVFJfT0YodHlwZSwgeCksIFwKLQkJCSAgICAgIE5VTEwsIE5VTEwsIDAsIE5VTEwsIE5VTEwpOyBcCityZXR1cm4gUEVNX0FTTjFfd3JpdGVfYmlvKChpMmRfb2Zfdm9pZCAqKWkyZF8jI2FzbjEsc3RyLGJwLHgsTlVMTCxOVUxMLDAsTlVMTCxOVUxMKTsgXAogfQogCiAjZGVmaW5lIElNUExFTUVOVF9QRU1fd3JpdGVfYmlvX2NvbnN0KG5hbWUsIHR5cGUsIHN0ciwgYXNuMSkgXAogaW50IFBFTV93cml0ZV9iaW9fIyNuYW1lKEJJTyAqYnAsIGNvbnN0IHR5cGUgKngpIFwKIHsgXAotICAgIHJldHVybiBQRU1fQVNOMV93cml0ZV9iaW8oQ0hFQ0tFRF9JMkRfT0YoY29uc3QgdHlwZSwgaTJkXyMjYXNuMSksIFwKLQkJCSAgICAgIHN0ciwgYnAsIFwKLQkJCSAgICAgIENIRUNLRURfUFRSX09GKGNvbnN0IHR5cGUsIHgpLCBcCi0JCQkgICAgICBOVUxMLCBOVUxMLCAwLCBOVUxMLCBOVUxMKTsgXAorcmV0dXJuIFBFTV9BU04xX3dyaXRlX2JpbygoaTJkX29mX3ZvaWQgKilpMmRfIyNhc24xLHN0cixicCwodm9pZCAqKXgsTlVMTCxOVUxMLDAsTlVMTCxOVUxMKTsgXAogfQogCiAjZGVmaW5lIElNUExFTUVOVF9QRU1fd3JpdGVfY2JfYmlvKG5hbWUsIHR5cGUsIHN0ciwgYXNuMSkgXAogaW50IFBFTV93cml0ZV9iaW9fIyNuYW1lKEJJTyAqYnAsIHR5cGUgKngsIGNvbnN0IEVWUF9DSVBIRVIgKmVuYywgXAogCSAgICAgdW5zaWduZWQgY2hhciAqa3N0ciwgaW50IGtsZW4sIHBlbV9wYXNzd29yZF9jYiAqY2IsIHZvaWQgKnUpIFwKIAl7IFwKLQkgICAgcmV0dXJuIFBFTV9BU04xX3dyaXRlX2JpbyhDSEVDS0VEX0kyRF9PRih0eXBlLCBpMmRfIyNhc24xKSwgXAotCQkJCSAgICAgIHN0ciwgYnAsIFwKLQkJCQkgICAgICBDSEVDS0VEX1BUUl9PRih0eXBlLCB4KSwgXAotCQkJCSAgICAgIGVuYywga3N0ciwga2xlbiwgY2IsIHUpOyBcCisJcmV0dXJuIFBFTV9BU04xX3dyaXRlX2JpbygoaTJkX29mX3ZvaWQgKilpMmRfIyNhc24xLHN0cixicCx4LGVuYyxrc3RyLGtsZW4sY2IsdSk7IFwKIAl9CiAKICNkZWZpbmUgSU1QTEVNRU5UX1BFTV93cml0ZV9jYl9iaW9fY29uc3QobmFtZSwgdHlwZSwgc3RyLCBhc24xKSBcCiBpbnQgUEVNX3dyaXRlX2Jpb18jI25hbWUoQklPICpicCwgdHlwZSAqeCwgY29uc3QgRVZQX0NJUEhFUiAqZW5jLCBcCiAJICAgICB1bnNpZ25lZCBjaGFyICprc3RyLCBpbnQga2xlbiwgcGVtX3Bhc3N3b3JkX2NiICpjYiwgdm9pZCAqdSkgXAogCXsgXAotCSAgICByZXR1cm4gUEVNX0FTTjFfd3JpdGVfYmlvKENIRUNLRURfSTJEX09GKGNvbnN0IHR5cGUsIGkyZF8jI2FzbjEpLCBcCi0JCQkJICAgICAgc3RyLCBicCwgXAotCQkJCSAgICAgIENIRUNLRURfUFRSX09GKGNvbnN0IHR5cGUsIHgpLCBcCi0JCQkJICAgICAgZW5jLCBrc3RyLCBrbGVuLCBjYiwgdSk7IFwKKwlyZXR1cm4gUEVNX0FTTjFfd3JpdGVfYmlvKChpMmRfb2Zfdm9pZCAqKWkyZF8jI2FzbjEsc3RyLGJwLCh2b2lkICopeCxlbmMsa3N0cixrbGVuLGNiLHUpOyBcCiAJfQogCiAjZGVmaW5lIElNUExFTUVOVF9QRU1fd3JpdGUobmFtZSwgdHlwZSwgc3RyLCBhc24xKSBcCkBAIC0zNTMsMTEgKzMyMSwxMCBAQAogCiAvKiBUaGVzZSBhcmUgdGhlIHNhbWUgZXhjZXB0IHRoZXkgYXJlIGZvciB0aGUgZGVjbGFyYXRpb25zICovCiAKLSNpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX1dJTjE2KSB8fCBkZWZpbmVkKE9QRU5TU0xfTk9fRlBfQVBJKQorI2lmIGRlZmluZWQoT1BFTlNTTF9OT19GUF9BUEkpCiAKICNkZWZpbmUgREVDTEFSRV9QRU1fcmVhZF9mcChuYW1lLCB0eXBlKSAvKiovCiAjZGVmaW5lIERFQ0xBUkVfUEVNX3dyaXRlX2ZwKG5hbWUsIHR5cGUpIC8qKi8KLSNkZWZpbmUgREVDTEFSRV9QRU1fd3JpdGVfZnBfY29uc3QobmFtZSwgdHlwZSkgLyoqLwogI2RlZmluZSBERUNMQVJFX1BFTV93cml0ZV9jYl9mcChuYW1lLCB0eXBlKSAvKiovCiAKICNlbHNlCkBAIC00MjgsMTM4ICszOTUsNiBAQAogCURFQ0xBUkVfUEVNX3JlYWQobmFtZSwgdHlwZSkgXAogCURFQ0xBUkVfUEVNX3dyaXRlX2NiKG5hbWUsIHR5cGUpCiAKLSNpZmRlZiBTU0xFQVlfTUFDUk9TCi0KLSNkZWZpbmUgUEVNX3dyaXRlX1NTTF9TRVNTSU9OKGZwLHgpIFwKLQkJUEVNX0FTTjFfd3JpdGUoKGludCAoKikoKSlpMmRfU1NMX1NFU1NJT04sIFwKLQkJCVBFTV9TVFJJTkdfU1NMX1NFU1NJT04sZnAsIChjaGFyICopeCwgTlVMTCxOVUxMLDAsTlVMTCxOVUxMKQotI2RlZmluZSBQRU1fd3JpdGVfWDUwOShmcCx4KSBcCi0JCVBFTV9BU04xX3dyaXRlKChpbnQgKCopKCkpaTJkX1g1MDksUEVNX1NUUklOR19YNTA5LGZwLCBcCi0JCQkoY2hhciAqKXgsIE5VTEwsTlVMTCwwLE5VTEwsTlVMTCkKLSNkZWZpbmUgUEVNX3dyaXRlX1g1MDlfUkVRKGZwLHgpIFBFTV9BU04xX3dyaXRlKCBcCi0JCShpbnQgKCopKCkpaTJkX1g1MDlfUkVRLFBFTV9TVFJJTkdfWDUwOV9SRVEsZnAsKGNoYXIgKil4LCBcCi0JCQlOVUxMLE5VTEwsMCxOVUxMLE5VTEwpCi0jZGVmaW5lIFBFTV93cml0ZV9YNTA5X0NSTChmcCx4KSBcCi0JCVBFTV9BU04xX3dyaXRlKChpbnQgKCopKCkpaTJkX1g1MDlfQ1JMLFBFTV9TVFJJTkdfWDUwOV9DUkwsIFwKLQkJCWZwLChjaGFyICopeCwgTlVMTCxOVUxMLDAsTlVMTCxOVUxMKQotI2RlZmluZQlQRU1fd3JpdGVfUlNBUHJpdmF0ZUtleShmcCx4LGVuYyxrc3RyLGtsZW4sY2IsdSkgXAotCQlQRU1fQVNOMV93cml0ZSgoaW50ICgqKSgpKWkyZF9SU0FQcml2YXRlS2V5LFBFTV9TVFJJTkdfUlNBLGZwLFwKLQkJCShjaGFyICopeCxlbmMsa3N0cixrbGVuLGNiLHUpCi0jZGVmaW5lCVBFTV93cml0ZV9SU0FQdWJsaWNLZXkoZnAseCkgXAotCQlQRU1fQVNOMV93cml0ZSgoaW50ICgqKSgpKWkyZF9SU0FQdWJsaWNLZXksXAotCQkJUEVNX1NUUklOR19SU0FfUFVCTElDLGZwLChjaGFyICopeCxOVUxMLE5VTEwsMCxOVUxMLE5VTEwpCi0jZGVmaW5lCVBFTV93cml0ZV9EU0FQcml2YXRlS2V5KGZwLHgsZW5jLGtzdHIsa2xlbixjYix1KSBcCi0JCVBFTV9BU04xX3dyaXRlKChpbnQgKCopKCkpaTJkX0RTQVByaXZhdGVLZXksUEVNX1NUUklOR19EU0EsZnAsXAotCQkJKGNoYXIgKil4LGVuYyxrc3RyLGtsZW4sY2IsdSkKLSNkZWZpbmUJUEVNX3dyaXRlX1ByaXZhdGVLZXkoYnAseCxlbmMsa3N0cixrbGVuLGNiLHUpIFwKLQkJUEVNX0FTTjFfd3JpdGUoKGludCAoKikoKSlpMmRfUHJpdmF0ZUtleSxcCi0JCSgoKHgpLT50eXBlID09IEVWUF9QS0VZX0RTQSk/UEVNX1NUUklOR19EU0E6UEVNX1NUUklOR19SU0EpLFwKLQkJCWJwLChjaGFyICopeCxlbmMsa3N0cixrbGVuLGNiLHUpCi0jZGVmaW5lIFBFTV93cml0ZV9QS0NTNyhmcCx4KSBcCi0JCVBFTV9BU04xX3dyaXRlKChpbnQgKCopKCkpaTJkX1BLQ1M3LFBFTV9TVFJJTkdfUEtDUzcsZnAsIFwKLQkJCShjaGFyICopeCwgTlVMTCxOVUxMLDAsTlVMTCxOVUxMKQotI2RlZmluZSBQRU1fd3JpdGVfREhwYXJhbXMoZnAseCkgXAotCQlQRU1fQVNOMV93cml0ZSgoaW50ICgqKSgpKWkyZF9ESHBhcmFtcyxQRU1fU1RSSU5HX0RIUEFSQU1TLGZwLFwKLQkJCShjaGFyICopeCxOVUxMLE5VTEwsMCxOVUxMLE5VTEwpCi0KLSNkZWZpbmUgUEVNX3dyaXRlX05FVFNDQVBFX0NFUlRfU0VRVUVOQ0UoZnAseCkgXAotICAgICAgICAgICAgICAgIFBFTV9BU04xX3dyaXRlKChpbnQgKCopKCkpaTJkX05FVFNDQVBFX0NFUlRfU0VRVUVOQ0UsIFwKLQkJCVBFTV9TVFJJTkdfWDUwOSxmcCwgXAotICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKil4LCBOVUxMLE5VTEwsMCxOVUxMLE5VTEwpCi0KLSNkZWZpbmUJUEVNX3JlYWRfU1NMX1NFU1NJT04oZnAseCxjYix1KSAoU1NMX1NFU1NJT04gKilQRU1fQVNOMV9yZWFkKCBcCi0JKGNoYXIgKigqKSgpKWQyaV9TU0xfU0VTU0lPTixQRU1fU1RSSU5HX1NTTF9TRVNTSU9OLGZwLChjaGFyICoqKXgsY2IsdSkKLSNkZWZpbmUJUEVNX3JlYWRfWDUwOShmcCx4LGNiLHUpIChYNTA5ICopUEVNX0FTTjFfcmVhZCggXAotCShjaGFyICooKikoKSlkMmlfWDUwOSxQRU1fU1RSSU5HX1g1MDksZnAsKGNoYXIgKiopeCxjYix1KQotI2RlZmluZQlQRU1fcmVhZF9YNTA5X1JFUShmcCx4LGNiLHUpIChYNTA5X1JFUSAqKVBFTV9BU04xX3JlYWQoIFwKLQkoY2hhciAqKCopKCkpZDJpX1g1MDlfUkVRLFBFTV9TVFJJTkdfWDUwOV9SRVEsZnAsKGNoYXIgKiopeCxjYix1KQotI2RlZmluZQlQRU1fcmVhZF9YNTA5X0NSTChmcCx4LGNiLHUpIChYNTA5X0NSTCAqKVBFTV9BU04xX3JlYWQoIFwKLQkoY2hhciAqKCopKCkpZDJpX1g1MDlfQ1JMLFBFTV9TVFJJTkdfWDUwOV9DUkwsZnAsKGNoYXIgKiopeCxjYix1KQotI2RlZmluZQlQRU1fcmVhZF9SU0FQcml2YXRlS2V5KGZwLHgsY2IsdSkgKFJTQSAqKVBFTV9BU04xX3JlYWQoIFwKLQkoY2hhciAqKCopKCkpZDJpX1JTQVByaXZhdGVLZXksUEVNX1NUUklOR19SU0EsZnAsKGNoYXIgKiopeCxjYix1KQotI2RlZmluZQlQRU1fcmVhZF9SU0FQdWJsaWNLZXkoZnAseCxjYix1KSAoUlNBICopUEVNX0FTTjFfcmVhZCggXAotCShjaGFyICooKikoKSlkMmlfUlNBUHVibGljS2V5LFBFTV9TVFJJTkdfUlNBX1BVQkxJQyxmcCwoY2hhciAqKil4LGNiLHUpCi0jZGVmaW5lCVBFTV9yZWFkX0RTQVByaXZhdGVLZXkoZnAseCxjYix1KSAoRFNBICopUEVNX0FTTjFfcmVhZCggXAotCShjaGFyICooKikoKSlkMmlfRFNBUHJpdmF0ZUtleSxQRU1fU1RSSU5HX0RTQSxmcCwoY2hhciAqKil4LGNiLHUpCi0jZGVmaW5lCVBFTV9yZWFkX1ByaXZhdGVLZXkoZnAseCxjYix1KSAoRVZQX1BLRVkgKilQRU1fQVNOMV9yZWFkKCBcCi0JKGNoYXIgKigqKSgpKWQyaV9Qcml2YXRlS2V5LFBFTV9TVFJJTkdfRVZQX1BLRVksZnAsKGNoYXIgKiopeCxjYix1KQotI2RlZmluZQlQRU1fcmVhZF9QS0NTNyhmcCx4LGNiLHUpIChQS0NTNyAqKVBFTV9BU04xX3JlYWQoIFwKLQkoY2hhciAqKCopKCkpZDJpX1BLQ1M3LFBFTV9TVFJJTkdfUEtDUzcsZnAsKGNoYXIgKiopeCxjYix1KQotI2RlZmluZQlQRU1fcmVhZF9ESHBhcmFtcyhmcCx4LGNiLHUpIChESCAqKVBFTV9BU04xX3JlYWQoIFwKLQkoY2hhciAqKCopKCkpZDJpX0RIcGFyYW1zLFBFTV9TVFJJTkdfREhQQVJBTVMsZnAsKGNoYXIgKiopeCxjYix1KQotCi0jZGVmaW5lIFBFTV9yZWFkX05FVFNDQVBFX0NFUlRfU0VRVUVOQ0UoZnAseCxjYix1KSBcCi0JCShORVRTQ0FQRV9DRVJUX1NFUVVFTkNFICopUEVNX0FTTjFfcmVhZCggXAotICAgICAgICAoY2hhciAqKCopKCkpZDJpX05FVFNDQVBFX0NFUlRfU0VRVUVOQ0UsUEVNX1NUUklOR19YNTA5LGZwLFwKLQkJCQkJCQkoY2hhciAqKil4LGNiLHUpCi0KLSNkZWZpbmUgUEVNX3dyaXRlX2Jpb19YNTA5KGJwLHgpIFwKLQkJUEVNX0FTTjFfd3JpdGVfYmlvKChpbnQgKCopKCkpaTJkX1g1MDksUEVNX1NUUklOR19YNTA5LGJwLCBcCi0JCQkoY2hhciAqKXgsIE5VTEwsTlVMTCwwLE5VTEwsTlVMTCkKLSNkZWZpbmUgUEVNX3dyaXRlX2Jpb19YNTA5X1JFUShicCx4KSBQRU1fQVNOMV93cml0ZV9iaW8oIFwKLQkJKGludCAoKikoKSlpMmRfWDUwOV9SRVEsUEVNX1NUUklOR19YNTA5X1JFUSxicCwoY2hhciAqKXgsIFwKLQkJCU5VTEwsTlVMTCwwLE5VTEwsTlVMTCkKLSNkZWZpbmUgUEVNX3dyaXRlX2Jpb19YNTA5X0NSTChicCx4KSBcCi0JCVBFTV9BU04xX3dyaXRlX2JpbygoaW50ICgqKSgpKWkyZF9YNTA5X0NSTCxQRU1fU1RSSU5HX1g1MDlfQ1JMLFwKLQkJCWJwLChjaGFyICopeCwgTlVMTCxOVUxMLDAsTlVMTCxOVUxMKQotI2RlZmluZQlQRU1fd3JpdGVfYmlvX1JTQVByaXZhdGVLZXkoYnAseCxlbmMsa3N0cixrbGVuLGNiLHUpIFwKLQkJUEVNX0FTTjFfd3JpdGVfYmlvKChpbnQgKCopKCkpaTJkX1JTQVByaXZhdGVLZXksUEVNX1NUUklOR19SU0EsXAotCQkJYnAsKGNoYXIgKil4LGVuYyxrc3RyLGtsZW4sY2IsdSkKLSNkZWZpbmUJUEVNX3dyaXRlX2Jpb19SU0FQdWJsaWNLZXkoYnAseCkgXAotCQlQRU1fQVNOMV93cml0ZV9iaW8oKGludCAoKikoKSlpMmRfUlNBUHVibGljS2V5LCBcCi0JCQlQRU1fU1RSSU5HX1JTQV9QVUJMSUMsXAotCQkJYnAsKGNoYXIgKil4LE5VTEwsTlVMTCwwLE5VTEwsTlVMTCkKLSNkZWZpbmUJUEVNX3dyaXRlX2Jpb19EU0FQcml2YXRlS2V5KGJwLHgsZW5jLGtzdHIsa2xlbixjYix1KSBcCi0JCVBFTV9BU04xX3dyaXRlX2JpbygoaW50ICgqKSgpKWkyZF9EU0FQcml2YXRlS2V5LFBFTV9TVFJJTkdfRFNBLFwKLQkJCWJwLChjaGFyICopeCxlbmMsa3N0cixrbGVuLGNiLHUpCi0jZGVmaW5lCVBFTV93cml0ZV9iaW9fUHJpdmF0ZUtleShicCx4LGVuYyxrc3RyLGtsZW4sY2IsdSkgXAotCQlQRU1fQVNOMV93cml0ZV9iaW8oKGludCAoKikoKSlpMmRfUHJpdmF0ZUtleSxcCi0JCSgoKHgpLT50eXBlID09IEVWUF9QS0VZX0RTQSk/UEVNX1NUUklOR19EU0E6UEVNX1NUUklOR19SU0EpLFwKLQkJCWJwLChjaGFyICopeCxlbmMsa3N0cixrbGVuLGNiLHUpCi0jZGVmaW5lIFBFTV93cml0ZV9iaW9fUEtDUzcoYnAseCkgXAotCQlQRU1fQVNOMV93cml0ZV9iaW8oKGludCAoKikoKSlpMmRfUEtDUzcsUEVNX1NUUklOR19QS0NTNyxicCwgXAotCQkJKGNoYXIgKil4LCBOVUxMLE5VTEwsMCxOVUxMLE5VTEwpCi0jZGVmaW5lIFBFTV93cml0ZV9iaW9fREhwYXJhbXMoYnAseCkgXAotCQlQRU1fQVNOMV93cml0ZV9iaW8oKGludCAoKikoKSlpMmRfREhwYXJhbXMsUEVNX1NUUklOR19ESFBBUkFNUyxcCi0JCQlicCwoY2hhciAqKXgsTlVMTCxOVUxMLDAsTlVMTCxOVUxMKQotI2RlZmluZSBQRU1fd3JpdGVfYmlvX0RTQXBhcmFtcyhicCx4KSBcCi0JCVBFTV9BU04xX3dyaXRlX2JpbygoaW50ICgqKSgpKWkyZF9EU0FwYXJhbXMsIFwKLQkJCVBFTV9TVFJJTkdfRFNBUEFSQU1TLGJwLChjaGFyICopeCxOVUxMLE5VTEwsMCxOVUxMLE5VTEwpCi0KLSNkZWZpbmUgUEVNX3dyaXRlX2Jpb19ORVRTQ0FQRV9DRVJUX1NFUVVFTkNFKGJwLHgpIFwKLSAgICAgICAgICAgICAgICBQRU1fQVNOMV93cml0ZV9iaW8oKGludCAoKikoKSlpMmRfTkVUU0NBUEVfQ0VSVF9TRVFVRU5DRSwgXAotCQkJUEVNX1NUUklOR19YNTA5LGJwLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKXgsIE5VTEwsTlVMTCwwLE5VTEwsTlVMTCkKLQotI2RlZmluZQlQRU1fcmVhZF9iaW9fWDUwOShicCx4LGNiLHUpIChYNTA5ICopUEVNX0FTTjFfcmVhZF9iaW8oIFwKLQkoY2hhciAqKCopKCkpZDJpX1g1MDksUEVNX1NUUklOR19YNTA5LGJwLChjaGFyICoqKXgsY2IsdSkKLSNkZWZpbmUJUEVNX3JlYWRfYmlvX1g1MDlfUkVRKGJwLHgsY2IsdSkgKFg1MDlfUkVRICopUEVNX0FTTjFfcmVhZF9iaW8oIFwKLQkoY2hhciAqKCopKCkpZDJpX1g1MDlfUkVRLFBFTV9TVFJJTkdfWDUwOV9SRVEsYnAsKGNoYXIgKiopeCxjYix1KQotI2RlZmluZQlQRU1fcmVhZF9iaW9fWDUwOV9DUkwoYnAseCxjYix1KSAoWDUwOV9DUkwgKilQRU1fQVNOMV9yZWFkX2JpbyggXAotCShjaGFyICooKikoKSlkMmlfWDUwOV9DUkwsUEVNX1NUUklOR19YNTA5X0NSTCxicCwoY2hhciAqKil4LGNiLHUpCi0jZGVmaW5lCVBFTV9yZWFkX2Jpb19SU0FQcml2YXRlS2V5KGJwLHgsY2IsdSkgKFJTQSAqKVBFTV9BU04xX3JlYWRfYmlvKCBcCi0JKGNoYXIgKigqKSgpKWQyaV9SU0FQcml2YXRlS2V5LFBFTV9TVFJJTkdfUlNBLGJwLChjaGFyICoqKXgsY2IsdSkKLSNkZWZpbmUJUEVNX3JlYWRfYmlvX1JTQVB1YmxpY0tleShicCx4LGNiLHUpIChSU0EgKilQRU1fQVNOMV9yZWFkX2JpbyggXAotCShjaGFyICooKikoKSlkMmlfUlNBUHVibGljS2V5LFBFTV9TVFJJTkdfUlNBX1BVQkxJQyxicCwoY2hhciAqKil4LGNiLHUpCi0jZGVmaW5lCVBFTV9yZWFkX2Jpb19EU0FQcml2YXRlS2V5KGJwLHgsY2IsdSkgKERTQSAqKVBFTV9BU04xX3JlYWRfYmlvKCBcCi0JKGNoYXIgKigqKSgpKWQyaV9EU0FQcml2YXRlS2V5LFBFTV9TVFJJTkdfRFNBLGJwLChjaGFyICoqKXgsY2IsdSkKLSNkZWZpbmUJUEVNX3JlYWRfYmlvX1ByaXZhdGVLZXkoYnAseCxjYix1KSAoRVZQX1BLRVkgKilQRU1fQVNOMV9yZWFkX2JpbyggXAotCShjaGFyICooKikoKSlkMmlfUHJpdmF0ZUtleSxQRU1fU1RSSU5HX0VWUF9QS0VZLGJwLChjaGFyICoqKXgsY2IsdSkKLQotI2RlZmluZQlQRU1fcmVhZF9iaW9fUEtDUzcoYnAseCxjYix1KSAoUEtDUzcgKilQRU1fQVNOMV9yZWFkX2JpbyggXAotCShjaGFyICooKikoKSlkMmlfUEtDUzcsUEVNX1NUUklOR19QS0NTNyxicCwoY2hhciAqKil4LGNiLHUpCi0jZGVmaW5lCVBFTV9yZWFkX2Jpb19ESHBhcmFtcyhicCx4LGNiLHUpIChESCAqKVBFTV9BU04xX3JlYWRfYmlvKCBcCi0JKGNoYXIgKigqKSgpKWQyaV9ESHBhcmFtcyxQRU1fU1RSSU5HX0RIUEFSQU1TLGJwLChjaGFyICoqKXgsY2IsdSkKLSNkZWZpbmUJUEVNX3JlYWRfYmlvX0RTQXBhcmFtcyhicCx4LGNiLHUpIChEU0EgKilQRU1fQVNOMV9yZWFkX2JpbyggXAotCShjaGFyICooKikoKSlkMmlfRFNBcGFyYW1zLFBFTV9TVFJJTkdfRFNBUEFSQU1TLGJwLChjaGFyICoqKXgsY2IsdSkKLQotI2RlZmluZSBQRU1fcmVhZF9iaW9fTkVUU0NBUEVfQ0VSVF9TRVFVRU5DRShicCx4LGNiLHUpIFwKLQkJKE5FVFNDQVBFX0NFUlRfU0VRVUVOQ0UgKilQRU1fQVNOMV9yZWFkX2JpbyggXAotICAgICAgICAoY2hhciAqKCopKCkpZDJpX05FVFNDQVBFX0NFUlRfU0VRVUVOQ0UsUEVNX1NUUklOR19YNTA5LGJwLFwKLQkJCQkJCQkoY2hhciAqKil4LGNiLHUpCi0KLSNlbmRpZgotCiAjaWYgMQogLyogInVzZXJkYXRhIjogbmV3IHdpdGggT3BlblNTTCAwLjkuNCAqLwogdHlwZWRlZiBpbnQgcGVtX3Bhc3N3b3JkX2NiKGNoYXIgKmJ1ZiwgaW50IHNpemUsIGludCByd2ZsYWcsIHZvaWQgKnVzZXJkYXRhKTsKQEAgLTU4MSw0MCArNDE2LDI1IEBACiAJICAgICBwZW1fcGFzc3dvcmRfY2IgKmNiLCB2b2lkICp1KTsKIHZvaWQgKglQRU1fQVNOMV9yZWFkX2JpbyhkMmlfb2Zfdm9pZCAqZDJpLCBjb25zdCBjaGFyICpuYW1lLCBCSU8gKmJwLAogCQkJICB2b2lkICoqeCwgcGVtX3Bhc3N3b3JkX2NiICpjYiwgdm9pZCAqdSk7Ci0KLSNkZWZpbmUgUEVNX0FTTjFfcmVhZF9iaW9fb2YodHlwZSxkMmksbmFtZSxicCx4LGNiLHUpIFwKLSAgICAoKHR5cGUqKVBFTV9BU04xX3JlYWRfYmlvKENIRUNLRURfRDJJX09GKHR5cGUsIGQyaSksIFwKLQkJCSAgICAgIG5hbWUsIGJwLAkJCVwKLQkJCSAgICAgIENIRUNLRURfUFBUUl9PRih0eXBlLCB4KSwgXAotCQkJICAgICAgY2IsIHUpKQotCi1pbnQJUEVNX0FTTjFfd3JpdGVfYmlvKGkyZF9vZl92b2lkICppMmQsY29uc3QgY2hhciAqbmFtZSxCSU8gKmJwLGNoYXIgKngsCitpbnQJUEVNX0FTTjFfd3JpdGVfYmlvKGkyZF9vZl92b2lkICppMmQsY29uc3QgY2hhciAqbmFtZSxCSU8gKmJwLCB2b2lkICp4LAogCQkJICAgY29uc3QgRVZQX0NJUEhFUiAqZW5jLHVuc2lnbmVkIGNoYXIgKmtzdHIsaW50IGtsZW4sCiAJCQkgICBwZW1fcGFzc3dvcmRfY2IgKmNiLCB2b2lkICp1KTsKIAotI2RlZmluZSBQRU1fQVNOMV93cml0ZV9iaW9fb2YodHlwZSxpMmQsbmFtZSxicCx4LGVuYyxrc3RyLGtsZW4sY2IsdSkgXAotICAgIChQRU1fQVNOMV93cml0ZV9iaW8oQ0hFQ0tFRF9JMkRfT0YodHlwZSwgaTJkKSwgXAotCQkJbmFtZSwgYnAsCQkgICBcCi0JCQlDSEVDS0VEX1BUUl9PRih0eXBlLCB4KSwgXAotCQkJZW5jLCBrc3RyLCBrbGVuLCBjYiwgdSkpCi0KIFNUQUNLX09GKFg1MDlfSU5GTykgKglQRU1fWDUwOV9JTkZPX3JlYWRfYmlvKEJJTyAqYnAsIFNUQUNLX09GKFg1MDlfSU5GTykgKnNrLCBwZW1fcGFzc3dvcmRfY2IgKmNiLCB2b2lkICp1KTsKIGludAlQRU1fWDUwOV9JTkZPX3dyaXRlX2JpbyhCSU8gKmJwLFg1MDlfSU5GTyAqeGksIEVWUF9DSVBIRVIgKmVuYywKIAkJdW5zaWduZWQgY2hhciAqa3N0ciwgaW50IGtsZW4sIHBlbV9wYXNzd29yZF9jYiAqY2QsIHZvaWQgKnUpOwogI2VuZGlmCiAKLSNpZm5kZWYgT1BFTlNTTF9TWVNfV0lOMTYKIGludAlQRU1fcmVhZChGSUxFICpmcCwgY2hhciAqKm5hbWUsIGNoYXIgKipoZWFkZXIsCiAJCXVuc2lnbmVkIGNoYXIgKipkYXRhLGxvbmcgKmxlbik7CiBpbnQJUEVNX3dyaXRlKEZJTEUgKmZwLGNoYXIgKm5hbWUsY2hhciAqaGRyLHVuc2lnbmVkIGNoYXIgKmRhdGEsbG9uZyBsZW4pOwogdm9pZCAqICBQRU1fQVNOMV9yZWFkKGQyaV9vZl92b2lkICpkMmksIGNvbnN0IGNoYXIgKm5hbWUsIEZJTEUgKmZwLCB2b2lkICoqeCwKIAkJICAgICAgcGVtX3Bhc3N3b3JkX2NiICpjYiwgdm9pZCAqdSk7CiBpbnQJUEVNX0FTTjFfd3JpdGUoaTJkX29mX3ZvaWQgKmkyZCxjb25zdCBjaGFyICpuYW1lLEZJTEUgKmZwLAotCQkgICAgICAgY2hhciAqeCxjb25zdCBFVlBfQ0lQSEVSICplbmMsdW5zaWduZWQgY2hhciAqa3N0ciwKKwkJICAgICAgIHZvaWQgKngsY29uc3QgRVZQX0NJUEhFUiAqZW5jLHVuc2lnbmVkIGNoYXIgKmtzdHIsCiAJCSAgICAgICBpbnQga2xlbixwZW1fcGFzc3dvcmRfY2IgKmNhbGxiYWNrLCB2b2lkICp1KTsKIFNUQUNLX09GKFg1MDlfSU5GTykgKglQRU1fWDUwOV9JTkZPX3JlYWQoRklMRSAqZnAsIFNUQUNLX09GKFg1MDlfSU5GTykgKnNrLAogCXBlbV9wYXNzd29yZF9jYiAqY2IsIHZvaWQgKnUpOwotI2VuZGlmCiAKIGludAlQRU1fU2VhbEluaXQoUEVNX0VOQ09ERV9TRUFMX0NUWCAqY3R4LCBFVlBfQ0lQSEVSICp0eXBlLAogCQlFVlBfTUQgKm1kX3R5cGUsIHVuc2lnbmVkIGNoYXIgKiplaywgaW50ICpla2wsCkBAIC02MzMsNyArNDUzLDYgQEAKIHZvaWQJUEVNX3Byb2NfdHlwZShjaGFyICpidWYsIGludCB0eXBlKTsKIHZvaWQJUEVNX2Rla19pbmZvKGNoYXIgKmJ1ZiwgY29uc3QgY2hhciAqdHlwZSwgaW50IGxlbiwgY2hhciAqc3RyKTsKIAotI2lmbmRlZiBTU0xFQVlfTUFDUk9TCiAKICNpbmNsdWRlIDxvcGVuc3NsL3N5bWhhY2tzLmg+CiAKQEAgLTcxOSw3ICs1MzgsMjAgQEAKIGludCBQRU1fd3JpdGVfUEtDUzhQcml2YXRlS2V5KEZJTEUgKmZwLEVWUF9QS0VZICp4LGNvbnN0IEVWUF9DSVBIRVIgKmVuYywKIAkJCSAgICAgIGNoYXIgKmtzdHIsaW50IGtsZW4sIHBlbV9wYXNzd29yZF9jYiAqY2QsIHZvaWQgKnUpOwogCi0jZW5kaWYgLyogU1NMRUFZX01BQ1JPUyAqLworRVZQX1BLRVkgKlBFTV9yZWFkX2Jpb19QYXJhbWV0ZXJzKEJJTyAqYnAsIEVWUF9QS0VZICoqeCk7CitpbnQgUEVNX3dyaXRlX2Jpb19QYXJhbWV0ZXJzKEJJTyAqYnAsIEVWUF9QS0VZICp4KTsKKworCitFVlBfUEtFWSAqYjJpX1ByaXZhdGVLZXkoY29uc3QgdW5zaWduZWQgY2hhciAqKmluLCBsb25nIGxlbmd0aCk7CitFVlBfUEtFWSAqYjJpX1B1YmxpY0tleShjb25zdCB1bnNpZ25lZCBjaGFyICoqaW4sIGxvbmcgbGVuZ3RoKTsKK0VWUF9QS0VZICpiMmlfUHJpdmF0ZUtleV9iaW8oQklPICppbik7CitFVlBfUEtFWSAqYjJpX1B1YmxpY0tleV9iaW8oQklPICppbik7CitpbnQgaTJiX1ByaXZhdGVLZXlfYmlvKEJJTyAqb3V0LCBFVlBfUEtFWSAqcGspOworaW50IGkyYl9QdWJsaWNLZXlfYmlvKEJJTyAqb3V0LCBFVlBfUEtFWSAqcGspOworCitFVlBfUEtFWSAqYjJpX1BWS19iaW8oQklPICppbiwgcGVtX3Bhc3N3b3JkX2NiICpjYiwgdm9pZCAqdSk7CitpbnQgaTJiX1BWS19iaW8oQklPICpvdXQsIEVWUF9QS0VZICpwaywgaW50IGVuY2xldmVsLAorCQlwZW1fcGFzc3dvcmRfY2IgKmNiLCB2b2lkICp1KTsKIAogCiAvKiBCRUdJTiBFUlJPUiBDT0RFUyAqLwpAQCAtNzMxLDEwICs1NjMsMjIgQEAKIC8qIEVycm9yIGNvZGVzIGZvciB0aGUgUEVNIGZ1bmN0aW9ucy4gKi8KIAogLyogRnVuY3Rpb24gY29kZXMuICovCisjZGVmaW5lIFBFTV9GX0IySV9EU1MJCQkJCSAxMjcKKyNkZWZpbmUgUEVNX0ZfQjJJX1BWS19CSU8JCQkJIDEyOAorI2RlZmluZSBQRU1fRl9CMklfUlNBCQkJCQkgMTI5CisjZGVmaW5lIFBFTV9GX0NIRUNLX0JJVExFTl9EU0EJCQkJIDEzMAorI2RlZmluZSBQRU1fRl9DSEVDS19CSVRMRU5fUlNBCQkJCSAxMzEKICNkZWZpbmUgUEVNX0ZfRDJJX1BLQ1M4UFJJVkFURUtFWV9CSU8JCQkgMTIwCiAjZGVmaW5lIFBFTV9GX0QySV9QS0NTOFBSSVZBVEVLRVlfRlAJCQkgMTIxCisjZGVmaW5lIFBFTV9GX0RPX0IySQkJCQkJIDEzMgorI2RlZmluZSBQRU1fRl9ET19CMklfQklPCQkJCSAxMzMKKyNkZWZpbmUgUEVNX0ZfRE9fQkxPQl9IRUFERVIJCQkJIDEzNAogI2RlZmluZSBQRU1fRl9ET19QSzhQS0VZCQkJCSAxMjYKICNkZWZpbmUgUEVNX0ZfRE9fUEs4UEtFWV9GUAkJCQkgMTI1CisjZGVmaW5lIFBFTV9GX0RPX1BWS19CT0RZCQkJCSAxMzUKKyNkZWZpbmUgUEVNX0ZfRE9fUFZLX0hFQURFUgkJCQkgMTM2CisjZGVmaW5lIFBFTV9GX0kyQl9QVksJCQkJCSAxMzcKKyNkZWZpbmUgUEVNX0ZfSTJCX1BWS19CSU8JCQkJIDEzOAogI2RlZmluZSBQRU1fRl9MT0FEX0lWCQkJCQkgMTAxCiAjZGVmaW5lIFBFTV9GX1BFTV9BU04xX1JFQUQJCQkJIDEwMgogI2RlZmluZSBQRU1fRl9QRU1fQVNOMV9SRUFEX0JJTwkJCQkgMTAzCkBAIC03NDcsNiArNTkxLDcgQEAKICNkZWZpbmUgUEVNX0ZfUEVNX1BLOFBLRVkJCQkJIDExOQogI2RlZmluZSBQRU1fRl9QRU1fUkVBRAkJCQkJIDEwOAogI2RlZmluZSBQRU1fRl9QRU1fUkVBRF9CSU8JCQkJIDEwOQorI2RlZmluZSBQRU1fRl9QRU1fUkVBRF9CSU9fUEFSQU1FVEVSUwkJCSAxNDAKICNkZWZpbmUgUEVNX0ZfUEVNX1JFQURfQklPX1BSSVZBVEVLRVkJCQkgMTIzCiAjZGVmaW5lIFBFTV9GX1BFTV9SRUFEX1BSSVZBVEVLRVkJCQkgMTI0CiAjZGVmaW5lIFBFTV9GX1BFTV9TRUFMRklOQUwJCQkJIDExMApAQCAtNzU0LDYgKzU5OSw3IEBACiAjZGVmaW5lIFBFTV9GX1BFTV9TSUdORklOQUwJCQkJIDExMgogI2RlZmluZSBQRU1fRl9QRU1fV1JJVEUJCQkJCSAxMTMKICNkZWZpbmUgUEVNX0ZfUEVNX1dSSVRFX0JJTwkJCQkgMTE0CisjZGVmaW5lIFBFTV9GX1BFTV9XUklURV9QUklWQVRFS0VZCQkJIDEzOQogI2RlZmluZSBQRU1fRl9QRU1fWDUwOV9JTkZPX1JFQUQJCQkgMTE1CiAjZGVmaW5lIFBFTV9GX1BFTV9YNTA5X0lORk9fUkVBRF9CSU8JCQkgMTE2CiAjZGVmaW5lIFBFTV9GX1BFTV9YNTA5X0lORk9fV1JJVEVfQklPCQkJIDExNwpAQCAtNzYzLDE4ICs2MDksMzAgQEAKICNkZWZpbmUgUEVNX1JfQkFEX0RFQ1JZUFQJCQkJIDEwMQogI2RlZmluZSBQRU1fUl9CQURfRU5EX0xJTkUJCQkJIDEwMgogI2RlZmluZSBQRU1fUl9CQURfSVZfQ0hBUlMJCQkJIDEwMworI2RlZmluZSBQRU1fUl9CQURfTUFHSUNfTlVNQkVSCQkJCSAxMTYKICNkZWZpbmUgUEVNX1JfQkFEX1BBU1NXT1JEX1JFQUQJCQkJIDEwNAorI2RlZmluZSBQRU1fUl9CQURfVkVSU0lPTl9OVU1CRVIJCQkgMTE3CisjZGVmaW5lIFBFTV9SX0JJT19XUklURV9GQUlMVVJFCQkJCSAxMTgKKyNkZWZpbmUgUEVNX1JfQ0lQSEVSX0lTX05VTEwJCQkJIDEyNwogI2RlZmluZSBQRU1fUl9FUlJPUl9DT05WRVJUSU5HX1BSSVZBVEVfS0VZCQkgMTE1CisjZGVmaW5lIFBFTV9SX0VYUEVDVElOR19QUklWQVRFX0tFWV9CTE9CCQkgMTE5CisjZGVmaW5lIFBFTV9SX0VYUEVDVElOR19QVUJMSUNfS0VZX0JMT0IJCQkgMTIwCisjZGVmaW5lIFBFTV9SX0lOQ09OU0lTVEVOVF9IRUFERVIJCQkgMTIxCisjZGVmaW5lIFBFTV9SX0tFWUJMT0JfSEVBREVSX1BBUlNFX0VSUk9SCQkgMTIyCisjZGVmaW5lIFBFTV9SX0tFWUJMT0JfVE9PX1NIT1JUCQkJCSAxMjMKICNkZWZpbmUgUEVNX1JfTk9UX0RFS19JTkZPCQkJCSAxMDUKICNkZWZpbmUgUEVNX1JfTk9UX0VOQ1JZUFRFRAkJCQkgMTA2CiAjZGVmaW5lIFBFTV9SX05PVF9QUk9DX1RZUEUJCQkJIDEwNwogI2RlZmluZSBQRU1fUl9OT19TVEFSVF9MSU5FCQkJCSAxMDgKICNkZWZpbmUgUEVNX1JfUFJPQkxFTVNfR0VUVElOR19QQVNTV09SRAkJCSAxMDkKICNkZWZpbmUgUEVNX1JfUFVCTElDX0tFWV9OT19SU0EJCQkJIDExMAorI2RlZmluZSBQRU1fUl9QVktfREFUQV9UT09fU0hPUlQJCQkgMTI0CisjZGVmaW5lIFBFTV9SX1BWS19UT09fU0hPUlQJCQkJIDEyNQogI2RlZmluZSBQRU1fUl9SRUFEX0tFWQkJCQkJIDExMQogI2RlZmluZSBQRU1fUl9TSE9SVF9IRUFERVIJCQkJIDExMgogI2RlZmluZSBQRU1fUl9VTlNVUFBPUlRFRF9DSVBIRVIJCQkgMTEzCiAjZGVmaW5lIFBFTV9SX1VOU1VQUE9SVEVEX0VOQ1JZUFRJT04JCQkgMTE0CisjZGVmaW5lIFBFTV9SX1VOU1VQUE9SVEVEX0tFWV9DT01QT05FTlRTCQkgMTI2CiAKICNpZmRlZiAgX19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL2NyeXB0by9wZW0vcGVtX2FsbC5jIGIvY3J5cHRvL3BlbS9wZW1fYWxsLmMKaW5kZXggNjlkZDE5Yi4uM2U3YTYwOSAxMDA2NDQKLS0tIGEvY3J5cHRvL3BlbS9wZW1fYWxsLmMKKysrIGIvY3J5cHRvL3BlbS9wZW1fYWxsLmMKQEAgLTExMCw3ICsxMTAsNiBAQAogICovCiAKICNpbmNsdWRlIDxzdGRpby5oPgotI3VuZGVmIFNTTEVBWV9NQUNST1MKICNpbmNsdWRlICJjcnlwdGxpYi5oIgogI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KQEAgLTE5NCw0OSArMTkzLDcgQEAKIAogI2VuZGlmCiAKLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLQotaW50IFBFTV93cml0ZV9iaW9fUlNBUHJpdmF0ZUtleShCSU8gKmJwLCBSU0EgKngsIGNvbnN0IEVWUF9DSVBIRVIgKmVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqa3N0ciwgaW50IGtsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbV9wYXNzd29yZF9jYiAqY2IsIHZvaWQgKnUpCi17Ci0JRVZQX1BLRVkgKms7Ci0JaW50IHJldDsKLQlrID0gRVZQX1BLRVlfbmV3KCk7Ci0JaWYgKCFrKQotCQlyZXR1cm4gMDsKLQlFVlBfUEtFWV9zZXQxX1JTQShrLCB4KTsKLQotCXJldCA9IFBFTV93cml0ZV9iaW9fUHJpdmF0ZUtleShicCwgaywgZW5jLCBrc3RyLCBrbGVuLCBjYiwgdSk7Ci0JRVZQX1BLRVlfZnJlZShrKTsKLQlyZXR1cm4gcmV0OwotfQotCi0jaWZuZGVmIE9QRU5TU0xfTk9fRlBfQVBJCi1pbnQgUEVNX3dyaXRlX1JTQVByaXZhdGVLZXkoRklMRSAqZnAsIFJTQSAqeCwgY29uc3QgRVZQX0NJUEhFUiAqZW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICprc3RyLCBpbnQga2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVtX3Bhc3N3b3JkX2NiICpjYiwgdm9pZCAqdSkKLXsKLQlFVlBfUEtFWSAqazsKLQlpbnQgcmV0OwotCWsgPSBFVlBfUEtFWV9uZXcoKTsKLQlpZiAoIWspCi0JCXJldHVybiAwOwotCi0JRVZQX1BLRVlfc2V0MV9SU0EoaywgeCk7Ci0KLQlyZXQgPSBQRU1fd3JpdGVfUHJpdmF0ZUtleShmcCwgaywgZW5jLCBrc3RyLCBrbGVuLCBjYiwgdSk7Ci0JRVZQX1BLRVlfZnJlZShrKTsKLQlyZXR1cm4gcmV0OwotfQotI2VuZGlmCi0KLSNlbHNlCi0KIElNUExFTUVOVF9QRU1fd3JpdGVfY2JfY29uc3QoUlNBUHJpdmF0ZUtleSwgUlNBLCBQRU1fU1RSSU5HX1JTQSwgUlNBUHJpdmF0ZUtleSkKLQotI2VuZGlmCi0KIElNUExFTUVOVF9QRU1fcndfY29uc3QoUlNBUHVibGljS2V5LCBSU0EsIFBFTV9TVFJJTkdfUlNBX1BVQkxJQywgUlNBUHVibGljS2V5KQogSU1QTEVNRU5UX1BFTV9ydyhSU0FfUFVCS0VZLCBSU0EsIFBFTV9TVFJJTkdfUFVCTElDLCBSU0FfUFVCS0VZKQogCkBAIC0yNjMsNTAgKzIyMCwxMCBAQAogewogCUVWUF9QS0VZICpwa3RtcDsKIAlwa3RtcCA9IFBFTV9yZWFkX2Jpb19Qcml2YXRlS2V5KGJwLCBOVUxMLCBjYiwgdSk7Ci0JcmV0dXJuIHBrZXlfZ2V0X2RzYShwa3RtcCwgZHNhKTsKKwlyZXR1cm4gcGtleV9nZXRfZHNhKHBrdG1wLCBkc2EpOwkvKiB3aWxsIGZyZWUgcGt0bXAgKi8KIH0KIAotI2lmZGVmIE9QRU5TU0xfRklQUwotCi1pbnQgUEVNX3dyaXRlX2Jpb19EU0FQcml2YXRlS2V5KEJJTyAqYnAsIERTQSAqeCwgY29uc3QgRVZQX0NJUEhFUiAqZW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICprc3RyLCBpbnQga2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVtX3Bhc3N3b3JkX2NiICpjYiwgdm9pZCAqdSkKLXsKLQlFVlBfUEtFWSAqazsKLQlpbnQgcmV0OwotCWsgPSBFVlBfUEtFWV9uZXcoKTsKLQlpZiAoIWspCi0JCXJldHVybiAwOwotCUVWUF9QS0VZX3NldDFfRFNBKGssIHgpOwotCi0JcmV0ID0gUEVNX3dyaXRlX2Jpb19Qcml2YXRlS2V5KGJwLCBrLCBlbmMsIGtzdHIsIGtsZW4sIGNiLCB1KTsKLQlFVlBfUEtFWV9mcmVlKGspOwotCXJldHVybiByZXQ7Ci19Ci0KLSNpZm5kZWYgT1BFTlNTTF9OT19GUF9BUEkKLWludCBQRU1fd3JpdGVfRFNBUHJpdmF0ZUtleShGSUxFICpmcCwgRFNBICp4LCBjb25zdCBFVlBfQ0lQSEVSICplbmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmtzdHIsIGludCBrbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW1fcGFzc3dvcmRfY2IgKmNiLCB2b2lkICp1KQotewotCUVWUF9QS0VZICprOwotCWludCByZXQ7Ci0JayA9IEVWUF9QS0VZX25ldygpOwotCWlmICghaykKLQkJcmV0dXJuIDA7Ci0JRVZQX1BLRVlfc2V0MV9EU0EoaywgeCk7Ci0JcmV0ID0gUEVNX3dyaXRlX1ByaXZhdGVLZXkoZnAsIGssIGVuYywga3N0ciwga2xlbiwgY2IsIHUpOwotCUVWUF9QS0VZX2ZyZWUoayk7Ci0JcmV0dXJuIHJldDsKLX0KLSNlbmRpZgotCi0jZWxzZQotCiBJTVBMRU1FTlRfUEVNX3dyaXRlX2NiX2NvbnN0KERTQVByaXZhdGVLZXksIERTQSwgUEVNX1NUUklOR19EU0EsIERTQVByaXZhdGVLZXkpCi0KLSNlbmRpZgotCiBJTVBMRU1FTlRfUEVNX3J3KERTQV9QVUJLRVksIERTQSwgUEVNX1NUUklOR19QVUJMSUMsIERTQV9QVUJLRVkpCiAKICNpZm5kZWYgT1BFTlNTTF9OT19GUF9BUEkKQEAgLTMxNiw3ICsyMzMsNyBAQAogewogCUVWUF9QS0VZICpwa3RtcDsKIAlwa3RtcCA9IFBFTV9yZWFkX1ByaXZhdGVLZXkoZnAsIE5VTEwsIGNiLCB1KTsKLQlyZXR1cm4gcGtleV9nZXRfZHNhKHBrdG1wLCBkc2EpOworCXJldHVybiBwa2V5X2dldF9kc2EocGt0bXAsIGRzYSk7CS8qIHdpbGwgZnJlZSBwa3RtcCAqLwogfQogCiAjZW5kaWYKQEAgLTM0Nyw1NCArMjY0LDEzIEBACiB7CiAJRVZQX1BLRVkgKnBrdG1wOwogCXBrdG1wID0gUEVNX3JlYWRfYmlvX1ByaXZhdGVLZXkoYnAsIE5VTEwsIGNiLCB1KTsKLQlyZXR1cm4gcGtleV9nZXRfZWNrZXkocGt0bXAsIGtleSk7CisJcmV0dXJuIHBrZXlfZ2V0X2Vja2V5KHBrdG1wLCBrZXkpOwkvKiB3aWxsIGZyZWUgcGt0bXAgKi8KIH0KIAogSU1QTEVNRU5UX1BFTV9yd19jb25zdChFQ1BLUGFyYW1ldGVycywgRUNfR1JPVVAsIFBFTV9TVFJJTkdfRUNQQVJBTUVURVJTLCBFQ1BLUGFyYW1ldGVycykKIAotCi0KLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLQotaW50IFBFTV93cml0ZV9iaW9fRUNQcml2YXRlS2V5KEJJTyAqYnAsIEVDX0tFWSAqeCwgY29uc3QgRVZQX0NJUEhFUiAqZW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICprc3RyLCBpbnQga2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVtX3Bhc3N3b3JkX2NiICpjYiwgdm9pZCAqdSkKLXsKLQlFVlBfUEtFWSAqazsKLQlpbnQgcmV0OwotCWsgPSBFVlBfUEtFWV9uZXcoKTsKLQlpZiAoIWspCi0JCXJldHVybiAwOwotCUVWUF9QS0VZX3NldDFfRUNfS0VZKGssIHgpOwotCi0JcmV0ID0gUEVNX3dyaXRlX2Jpb19Qcml2YXRlS2V5KGJwLCBrLCBlbmMsIGtzdHIsIGtsZW4sIGNiLCB1KTsKLQlFVlBfUEtFWV9mcmVlKGspOwotCXJldHVybiByZXQ7Ci19Ci0KLSNpZm5kZWYgT1BFTlNTTF9OT19GUF9BUEkKLWludCBQRU1fd3JpdGVfRUNQcml2YXRlS2V5KEZJTEUgKmZwLCBFQ19LRVkgKngsIGNvbnN0IEVWUF9DSVBIRVIgKmVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqa3N0ciwgaW50IGtsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbV9wYXNzd29yZF9jYiAqY2IsIHZvaWQgKnUpCi17Ci0JRVZQX1BLRVkgKms7Ci0JaW50IHJldDsKLQlrID0gRVZQX1BLRVlfbmV3KCk7Ci0JaWYgKCFrKQotCQlyZXR1cm4gMDsKLQlFVlBfUEtFWV9zZXQxX0VDX0tFWShrLCB4KTsKLQlyZXQgPSBQRU1fd3JpdGVfUHJpdmF0ZUtleShmcCwgaywgZW5jLCBrc3RyLCBrbGVuLCBjYiwgdSk7Ci0JRVZQX1BLRVlfZnJlZShrKTsKLQlyZXR1cm4gcmV0OwotfQotI2VuZGlmCi0KLSNlbHNlCi0KIElNUExFTUVOVF9QRU1fd3JpdGVfY2IoRUNQcml2YXRlS2V5LCBFQ19LRVksIFBFTV9TVFJJTkdfRUNQUklWQVRFS0VZLCBFQ1ByaXZhdGVLZXkpCiAKLSNlbmRpZgotCiBJTVBMRU1FTlRfUEVNX3J3KEVDX1BVQktFWSwgRUNfS0VZLCBQRU1fU1RSSU5HX1BVQkxJQywgRUNfUFVCS0VZKQogCiAjaWZuZGVmIE9QRU5TU0xfTk9fRlBfQVBJCkBAIC00MDQsNyArMjgwLDcgQEAKIHsKIAlFVlBfUEtFWSAqcGt0bXA7CiAJcGt0bXAgPSBQRU1fcmVhZF9Qcml2YXRlS2V5KGZwLCBOVUxMLCBjYiwgdSk7Ci0JcmV0dXJuIHBrZXlfZ2V0X2Vja2V5KHBrdG1wLCBlY2tleSk7CisJcmV0dXJuIHBrZXlfZ2V0X2Vja2V5KHBrdG1wLCBlY2tleSk7CS8qIHdpbGwgZnJlZSBwa3RtcCAqLwogfQogCiAjZW5kaWYKQEAgLTQxNyw2NiArMjkzLDQgQEAKIAogI2VuZGlmCiAKLQotLyogVGhlIFByaXZhdGVLZXkgY2FzZSBpcyBub3QgdGhhdCBzdHJhaWdodGZvcndhcmQuCi0gKiAgIElNUExFTUVOVF9QRU1fcndfY2IoUHJpdmF0ZUtleSwgRVZQX1BLRVksIFBFTV9TVFJJTkdfRVZQX1BLRVksIFByaXZhdGVLZXkpCi0gKiBkb2VzIG5vdCB3b3JrLCBSU0EgYW5kIERTQSBrZXlzIGhhdmUgc3BlY2lmaWMgc3RyaW5ncy4KLSAqIChXaGVuIHJlYWRpbmcsIHBhcmFtZXRlciBQRU1fU1RSSU5HX0VWUF9QS0VZIGlzIGEgd2lsZGNhcmQgZm9yIGFueXRoaW5nCi0gKiBhcHByb3ByaWF0ZS4pCi0gKi8KLQotI2lmZGVmIE9QRU5TU0xfRklQUwotCi1zdGF0aWMgY29uc3QgY2hhciAqcGtleV9zdHIoRVZQX1BLRVkgKngpCi0JewotCXN3aXRjaCAoeC0+dHlwZSkKLQkJewotCQljYXNlIEVWUF9QS0VZX1JTQToKLQkJcmV0dXJuIFBFTV9TVFJJTkdfUlNBOwotCi0JCWNhc2UgRVZQX1BLRVlfRFNBOgotCQlyZXR1cm4gUEVNX1NUUklOR19EU0E7Ci0KLQkJY2FzZSBFVlBfUEtFWV9FQzoKLQkJcmV0dXJuIFBFTV9TVFJJTkdfRUNQUklWQVRFS0VZOwotCi0JCWRlZmF1bHQ6Ci0JCXJldHVybiBOVUxMOwotCQl9Ci0JfQotCi0KLWludCBQRU1fd3JpdGVfYmlvX1ByaXZhdGVLZXkoQklPICpicCwgRVZQX1BLRVkgKngsIGNvbnN0IEVWUF9DSVBIRVIgKmVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqa3N0ciwgaW50IGtsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbV9wYXNzd29yZF9jYiAqY2IsIHZvaWQgKnUpCi0JewotCQlpZiAoRklQU19tb2RlKCkpCi0JCQlyZXR1cm4gUEVNX3dyaXRlX2Jpb19QS0NTOFByaXZhdGVLZXkoYnAsIHgsIGVuYywKLQkJCQkJCShjaGFyICopa3N0ciwga2xlbiwgY2IsIHUpOwotCQllbHNlCi0gICAgICAgICAgICAgICAgCXJldHVybiBQRU1fQVNOMV93cml0ZV9iaW8oKGkyZF9vZl92b2lkICopaTJkX1ByaXZhdGVLZXksCi0JCQlwa2V5X3N0cih4KSwgYnAsKGNoYXIgKil4LGVuYyxrc3RyLGtsZW4sY2IsdSk7Ci0JfQotCi0jaWZuZGVmIE9QRU5TU0xfTk9fRlBfQVBJCi1pbnQgUEVNX3dyaXRlX1ByaXZhdGVLZXkoRklMRSAqZnAsIEVWUF9QS0VZICp4LCBjb25zdCBFVlBfQ0lQSEVSICplbmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmtzdHIsIGludCBrbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW1fcGFzc3dvcmRfY2IgKmNiLCB2b2lkICp1KQotCXsKLQkJaWYgKEZJUFNfbW9kZSgpKQotCQkJcmV0dXJuIFBFTV93cml0ZV9QS0NTOFByaXZhdGVLZXkoZnAsIHgsIGVuYywKLQkJCQkJCShjaGFyICopa3N0ciwga2xlbiwgY2IsIHUpOwotCQllbHNlCi0gICAgICAgICAgICAgICAgCXJldHVybiBQRU1fQVNOMV93cml0ZSgoaTJkX29mX3ZvaWQgKilpMmRfUHJpdmF0ZUtleSwKLQkJCXBrZXlfc3RyKHgpLCBmcCwoY2hhciAqKXgsZW5jLGtzdHIsa2xlbixjYix1KTsKLQl9Ci0jZW5kaWYKLQotI2Vsc2UKLUlNUExFTUVOVF9QRU1fd3JpdGVfY2IoUHJpdmF0ZUtleSwgRVZQX1BLRVksICgoeC0+dHlwZSA9PSBFVlBfUEtFWV9EU0EpP1BFTV9TVFJJTkdfRFNBOlwKLQkJCSh4LT50eXBlID09IEVWUF9QS0VZX1JTQSk/UEVNX1NUUklOR19SU0E6UEVNX1NUUklOR19FQ1BSSVZBVEVLRVkpLCBQcml2YXRlS2V5KQotCi0jZW5kaWYKLQogSU1QTEVNRU5UX1BFTV9ydyhQVUJLRVksIEVWUF9QS0VZLCBQRU1fU1RSSU5HX1BVQkxJQywgUFVCS0VZKQotCmRpZmYgLS1naXQgYS9jcnlwdG8vcGVtL3BlbV9lcnIuYyBiL2NyeXB0by9wZW0vcGVtX2Vyci5jCmluZGV4IDMxMzM1NjMuLmQ2NDRhZWUgMTAwNjQ0Ci0tLSBhL2NyeXB0by9wZW0vcGVtX2Vyci5jCisrKyBiL2NyeXB0by9wZW0vcGVtX2Vyci5jCkBAIC0xLDYgKzEsNiBAQAogLyogY3J5cHRvL3BlbS9wZW1fZXJyLmMgKi8KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MCwxMCArNzAsMjIgQEAKIAogc3RhdGljIEVSUl9TVFJJTkdfREFUQSBQRU1fc3RyX2Z1bmN0c1tdPQogCXsKK3tFUlJfRlVOQyhQRU1fRl9CMklfRFNTKSwJIkIySV9EU1MifSwKK3tFUlJfRlVOQyhQRU1fRl9CMklfUFZLX0JJTyksCSJiMmlfUFZLX2JpbyJ9LAore0VSUl9GVU5DKFBFTV9GX0IySV9SU0EpLAkiQjJJX1JTQSJ9LAore0VSUl9GVU5DKFBFTV9GX0NIRUNLX0JJVExFTl9EU0EpLAkiQ0hFQ0tfQklUTEVOX0RTQSJ9LAore0VSUl9GVU5DKFBFTV9GX0NIRUNLX0JJVExFTl9SU0EpLAkiQ0hFQ0tfQklUTEVOX1JTQSJ9LAoge0VSUl9GVU5DKFBFTV9GX0QySV9QS0NTOFBSSVZBVEVLRVlfQklPKSwJImQyaV9QS0NTOFByaXZhdGVLZXlfYmlvIn0sCiB7RVJSX0ZVTkMoUEVNX0ZfRDJJX1BLQ1M4UFJJVkFURUtFWV9GUCksCSJkMmlfUEtDUzhQcml2YXRlS2V5X2ZwIn0sCit7RVJSX0ZVTkMoUEVNX0ZfRE9fQjJJKSwJIkRPX0IySSJ9LAore0VSUl9GVU5DKFBFTV9GX0RPX0IySV9CSU8pLAkiRE9fQjJJX0JJTyJ9LAore0VSUl9GVU5DKFBFTV9GX0RPX0JMT0JfSEVBREVSKSwJIkRPX0JMT0JfSEVBREVSIn0sCiB7RVJSX0ZVTkMoUEVNX0ZfRE9fUEs4UEtFWSksCSJET19QSzhQS0VZIn0sCiB7RVJSX0ZVTkMoUEVNX0ZfRE9fUEs4UEtFWV9GUCksCSJET19QSzhQS0VZX0ZQIn0sCit7RVJSX0ZVTkMoUEVNX0ZfRE9fUFZLX0JPRFkpLAkiRE9fUFZLX0JPRFkifSwKK3tFUlJfRlVOQyhQRU1fRl9ET19QVktfSEVBREVSKSwJIkRPX1BWS19IRUFERVIifSwKK3tFUlJfRlVOQyhQRU1fRl9JMkJfUFZLKSwJIkkyQl9QVksifSwKK3tFUlJfRlVOQyhQRU1fRl9JMkJfUFZLX0JJTyksCSJpMmJfUFZLX2JpbyJ9LAoge0VSUl9GVU5DKFBFTV9GX0xPQURfSVYpLAkiTE9BRF9JViJ9LAoge0VSUl9GVU5DKFBFTV9GX1BFTV9BU04xX1JFQUQpLAkiUEVNX0FTTjFfcmVhZCJ9LAoge0VSUl9GVU5DKFBFTV9GX1BFTV9BU04xX1JFQURfQklPKSwJIlBFTV9BU04xX3JlYWRfYmlvIn0sCkBAIC04Niw2ICs5OCw3IEBACiB7RVJSX0ZVTkMoUEVNX0ZfUEVNX1BLOFBLRVkpLAkiUEVNX1BLOFBLRVkifSwKIHtFUlJfRlVOQyhQRU1fRl9QRU1fUkVBRCksCSJQRU1fcmVhZCJ9LAoge0VSUl9GVU5DKFBFTV9GX1BFTV9SRUFEX0JJTyksCSJQRU1fcmVhZF9iaW8ifSwKK3tFUlJfRlVOQyhQRU1fRl9QRU1fUkVBRF9CSU9fUEFSQU1FVEVSUyksCSJQRU1fcmVhZF9iaW9fUGFyYW1ldGVycyJ9LAoge0VSUl9GVU5DKFBFTV9GX1BFTV9SRUFEX0JJT19QUklWQVRFS0VZKSwJIlBFTV9SRUFEX0JJT19QUklWQVRFS0VZIn0sCiB7RVJSX0ZVTkMoUEVNX0ZfUEVNX1JFQURfUFJJVkFURUtFWSksCSJQRU1fUkVBRF9QUklWQVRFS0VZIn0sCiB7RVJSX0ZVTkMoUEVNX0ZfUEVNX1NFQUxGSU5BTCksCSJQRU1fU2VhbEZpbmFsIn0sCkBAIC05Myw2ICsxMDYsNyBAQAoge0VSUl9GVU5DKFBFTV9GX1BFTV9TSUdORklOQUwpLAkiUEVNX1NpZ25GaW5hbCJ9LAoge0VSUl9GVU5DKFBFTV9GX1BFTV9XUklURSksCSJQRU1fd3JpdGUifSwKIHtFUlJfRlVOQyhQRU1fRl9QRU1fV1JJVEVfQklPKSwJIlBFTV93cml0ZV9iaW8ifSwKK3tFUlJfRlVOQyhQRU1fRl9QRU1fV1JJVEVfUFJJVkFURUtFWSksCSJQRU1fV1JJVEVfUFJJVkFURUtFWSJ9LAoge0VSUl9GVU5DKFBFTV9GX1BFTV9YNTA5X0lORk9fUkVBRCksCSJQRU1fWDUwOV9JTkZPX3JlYWQifSwKIHtFUlJfRlVOQyhQRU1fRl9QRU1fWDUwOV9JTkZPX1JFQURfQklPKSwJIlBFTV9YNTA5X0lORk9fcmVhZF9iaW8ifSwKIHtFUlJfRlVOQyhQRU1fRl9QRU1fWDUwOV9JTkZPX1dSSVRFX0JJTyksCSJQRU1fWDUwOV9JTkZPX3dyaXRlX2JpbyJ9LApAQCAtMTA1LDE4ICsxMTksMzAgQEAKIHtFUlJfUkVBU09OKFBFTV9SX0JBRF9ERUNSWVBUKSAgICAgICAgICAgLCJiYWQgZGVjcnlwdCJ9LAoge0VSUl9SRUFTT04oUEVNX1JfQkFEX0VORF9MSU5FKSAgICAgICAgICAsImJhZCBlbmQgbGluZSJ9LAoge0VSUl9SRUFTT04oUEVNX1JfQkFEX0lWX0NIQVJTKSAgICAgICAgICAsImJhZCBpdiBjaGFycyJ9LAore0VSUl9SRUFTT04oUEVNX1JfQkFEX01BR0lDX05VTUJFUikgICAgICAsImJhZCBtYWdpYyBudW1iZXIifSwKIHtFUlJfUkVBU09OKFBFTV9SX0JBRF9QQVNTV09SRF9SRUFEKSAgICAgLCJiYWQgcGFzc3dvcmQgcmVhZCJ9LAore0VSUl9SRUFTT04oUEVNX1JfQkFEX1ZFUlNJT05fTlVNQkVSKSAgICAsImJhZCB2ZXJzaW9uIG51bWJlciJ9LAore0VSUl9SRUFTT04oUEVNX1JfQklPX1dSSVRFX0ZBSUxVUkUpICAgICAsImJpbyB3cml0ZSBmYWlsdXJlIn0sCit7RVJSX1JFQVNPTihQRU1fUl9DSVBIRVJfSVNfTlVMTCkgICAgICAgICwiY2lwaGVyIGlzIG51bGwifSwKIHtFUlJfUkVBU09OKFBFTV9SX0VSUk9SX0NPTlZFUlRJTkdfUFJJVkFURV9LRVkpLCJlcnJvciBjb252ZXJ0aW5nIHByaXZhdGUga2V5In0sCit7RVJSX1JFQVNPTihQRU1fUl9FWFBFQ1RJTkdfUFJJVkFURV9LRVlfQkxPQiksImV4cGVjdGluZyBwcml2YXRlIGtleSBibG9iIn0sCit7RVJSX1JFQVNPTihQRU1fUl9FWFBFQ1RJTkdfUFVCTElDX0tFWV9CTE9CKSwiZXhwZWN0aW5nIHB1YmxpYyBrZXkgYmxvYiJ9LAore0VSUl9SRUFTT04oUEVNX1JfSU5DT05TSVNURU5UX0hFQURFUikgICAsImluY29uc2lzdGVudCBoZWFkZXIifSwKK3tFUlJfUkVBU09OKFBFTV9SX0tFWUJMT0JfSEVBREVSX1BBUlNFX0VSUk9SKSwia2V5YmxvYiBoZWFkZXIgcGFyc2UgZXJyb3IifSwKK3tFUlJfUkVBU09OKFBFTV9SX0tFWUJMT0JfVE9PX1NIT1JUKSAgICAgLCJrZXlibG9iIHRvbyBzaG9ydCJ9LAoge0VSUl9SRUFTT04oUEVNX1JfTk9UX0RFS19JTkZPKSAgICAgICAgICAsIm5vdCBkZWsgaW5mbyJ9LAoge0VSUl9SRUFTT04oUEVNX1JfTk9UX0VOQ1JZUFRFRCkgICAgICAgICAsIm5vdCBlbmNyeXB0ZWQifSwKIHtFUlJfUkVBU09OKFBFTV9SX05PVF9QUk9DX1RZUEUpICAgICAgICAgLCJub3QgcHJvYyB0eXBlIn0sCiB7RVJSX1JFQVNPTihQRU1fUl9OT19TVEFSVF9MSU5FKSAgICAgICAgICwibm8gc3RhcnQgbGluZSJ9LAoge0VSUl9SRUFTT04oUEVNX1JfUFJPQkxFTVNfR0VUVElOR19QQVNTV09SRCksInByb2JsZW1zIGdldHRpbmcgcGFzc3dvcmQifSwKIHtFUlJfUkVBU09OKFBFTV9SX1BVQkxJQ19LRVlfTk9fUlNBKSAgICAgLCJwdWJsaWMga2V5IG5vIHJzYSJ9LAore0VSUl9SRUFTT04oUEVNX1JfUFZLX0RBVEFfVE9PX1NIT1JUKSAgICAsInB2ayBkYXRhIHRvbyBzaG9ydCJ9LAore0VSUl9SRUFTT04oUEVNX1JfUFZLX1RPT19TSE9SVCkgICAgICAgICAsInB2ayB0b28gc2hvcnQifSwKIHtFUlJfUkVBU09OKFBFTV9SX1JFQURfS0VZKSAgICAgICAgICAgICAgLCJyZWFkIGtleSJ9LAoge0VSUl9SRUFTT04oUEVNX1JfU0hPUlRfSEVBREVSKSAgICAgICAgICAsInNob3J0IGhlYWRlciJ9LAoge0VSUl9SRUFTT04oUEVNX1JfVU5TVVBQT1JURURfQ0lQSEVSKSAgICAsInVuc3VwcG9ydGVkIGNpcGhlciJ9LAoge0VSUl9SRUFTT04oUEVNX1JfVU5TVVBQT1JURURfRU5DUllQVElPTiksInVuc3VwcG9ydGVkIGVuY3J5cHRpb24ifSwKK3tFUlJfUkVBU09OKFBFTV9SX1VOU1VQUE9SVEVEX0tFWV9DT01QT05FTlRTKSwidW5zdXBwb3J0ZWQga2V5IGNvbXBvbmVudHMifSwKIHswLE5VTEx9CiAJfTsKIApkaWZmIC0tZ2l0IGEvY3J5cHRvL3BlbS9wZW1faW5mby5jIGIvY3J5cHRvL3BlbS9wZW1faW5mby5jCmluZGV4IDNhMjczZjYuLjFiMmJlNTIgMTAwNjQ0Ci0tLSBhL2NyeXB0by9wZW0vcGVtX2luZm8uYworKysgYi9jcnlwdG8vcGVtL3BlbV9pbmZvLmMKQEAgLTk4LDggKzk4LDggQEAKIAlsb25nIGxlbixlcnJvcj0wOwogCWludCBvaz0wOwogCVNUQUNLX09GKFg1MDlfSU5GTykgKnJldD1OVUxMOwotCXVuc2lnbmVkIGludCBpLHJhdzsKLQlkMmlfb2Zfdm9pZCAqZDJpOworCXVuc2lnbmVkIGludCBpLHJhdyxwdHlwZTsKKwlkMmlfb2Zfdm9pZCAqZDJpID0gMDsKIAogCWlmIChzayA9PSBOVUxMKQogCQl7CkBAIC0xMTYsNiArMTE2LDcgQEAKIAlmb3IgKDs7KQogCQl7CiAJCXJhdz0wOworCQlwdHlwZSA9IDA7CiAJCWk9UEVNX3JlYWRfYmlvKGJwLCZuYW1lLCZoZWFkZXIsJmRhdGEsJmxlbik7CiAJCWlmIChpID09IDApCiAJCQl7CkBAIC0xNjYsNyArMTY3LDYgQEAKICNpZm5kZWYgT1BFTlNTTF9OT19SU0EKIAkJCWlmIChzdHJjbXAobmFtZSxQRU1fU1RSSU5HX1JTQSkgPT0gMCkKIAkJCXsKLQkJCWQyaT0oRDJJX09GKHZvaWQpKWQyaV9SU0FQcml2YXRlS2V5OwogCQkJaWYgKHhpLT54X3BrZXkgIT0gTlVMTCkgCiAJCQkJewogCQkJCWlmICghc2tfWDUwOV9JTkZPX3B1c2gocmV0LHhpKSkgZ290byBlcnI7CkBAIC0xNzgsMTAgKzE3OCw4IEBACiAJCQl4aS0+ZW5jX2xlbj0wOwogCiAJCQl4aS0+eF9wa2V5PVg1MDlfUEtFWV9uZXcoKTsKLQkJCWlmICgoeGktPnhfcGtleS0+ZGVjX3BrZXk9RVZQX1BLRVlfbmV3KCkpID09IE5VTEwpCi0JCQkJZ290byBlcnI7Ci0JCQl4aS0+eF9wa2V5LT5kZWNfcGtleS0+dHlwZT1FVlBfUEtFWV9SU0E7Ci0JCQlwcD0mKHhpLT54X3BrZXktPmRlY19wa2V5LT5wa2V5LnJzYSk7CisJCQlwdHlwZT1FVlBfUEtFWV9SU0E7CisJCQlwcD0meGktPnhfcGtleS0+ZGVjX3BrZXk7CiAJCQlpZiAoKGludClzdHJsZW4oaGVhZGVyKSA+IDEwKSAvKiBhc3N1bWUgZW5jcnlwdGVkICovCiAJCQkJcmF3PTE7CiAJCQl9CkBAIC0yMDIsMTAgKzIwMCw4IEBACiAJCQl4aS0+ZW5jX2xlbj0wOwogCiAJCQl4aS0+eF9wa2V5PVg1MDlfUEtFWV9uZXcoKTsKLQkJCWlmICgoeGktPnhfcGtleS0+ZGVjX3BrZXk9RVZQX1BLRVlfbmV3KCkpID09IE5VTEwpCi0JCQkJZ290byBlcnI7Ci0JCQl4aS0+eF9wa2V5LT5kZWNfcGtleS0+dHlwZT1FVlBfUEtFWV9EU0E7Ci0JCQlwcD0meGktPnhfcGtleS0+ZGVjX3BrZXktPnBrZXkuZHNhOworCQkJcHR5cGUgPSBFVlBfUEtFWV9EU0E7CisJCQlwcD0meGktPnhfcGtleS0+ZGVjX3BrZXk7CiAJCQlpZiAoKGludClzdHJsZW4oaGVhZGVyKSA+IDEwKSAvKiBhc3N1bWUgZW5jcnlwdGVkICovCiAJCQkJcmF3PTE7CiAJCQl9CkBAIC0yMjYsMTAgKzIyMiw4IEBACiAgCQkJeGktPmVuY19sZW49MDsKICAKICAJCQl4aS0+eF9wa2V5PVg1MDlfUEtFWV9uZXcoKTsKLSAJCQlpZiAoKHhpLT54X3BrZXktPmRlY19wa2V5PUVWUF9QS0VZX25ldygpKSA9PSBOVUxMKQotIAkJCQlnb3RvIGVycjsKLSAJCQl4aS0+eF9wa2V5LT5kZWNfcGtleS0+dHlwZT1FVlBfUEtFWV9FQzsKLSAJCQlwcD0mKHhpLT54X3BrZXktPmRlY19wa2V5LT5wa2V5LmVjKTsKKwkJCXB0eXBlID0gRVZQX1BLRVlfRUM7CisgCQkJcHA9JnhpLT54X3BrZXktPmRlY19wa2V5OwogIAkJCWlmICgoaW50KXN0cmxlbihoZWFkZXIpID4gMTApIC8qIGFzc3VtZSBlbmNyeXB0ZWQgKi8KICAJCQkJcmF3PTE7CiAJCQl9CkBAIC0yNTEsNyArMjQ1LDE1IEBACiAJCQkJaWYgKCFQRU1fZG9faGVhZGVyKCZjaXBoZXIsZGF0YSwmbGVuLGNiLHUpKQogCQkJCQlnb3RvIGVycjsKIAkJCQlwPWRhdGE7Ci0JCQkJaWYgKGQyaShwcCwmcCxsZW4pID09IE5VTEwpCisJCQkJaWYgKHB0eXBlKQorCQkJCQl7CisJCQkJCWlmICghZDJpX1ByaXZhdGVLZXkocHR5cGUsIHBwLCAmcCwgbGVuKSkKKwkJCQkJCXsKKwkJCQkJCVBFTWVycihQRU1fRl9QRU1fWDUwOV9JTkZPX1JFQURfQklPLEVSUl9SX0FTTjFfTElCKTsKKwkJCQkJCWdvdG8gZXJyOworCQkJCQkJfQorCQkJCQl9CisJCQkJZWxzZSBpZiAoZDJpKHBwLCZwLGxlbikgPT0gTlVMTCkKIAkJCQkJewogCQkJCQlQRU1lcnIoUEVNX0ZfUEVNX1g1MDlfSU5GT19SRUFEX0JJTyxFUlJfUl9BU04xX0xJQik7CiAJCQkJCWdvdG8gZXJyOwpAQCAtMzM3LDYgKzMzOSwxMiBAQAogCQl7CiAJCWlmICggKHhpLT5lbmNfZGF0YSE9TlVMTCkgJiYgKHhpLT5lbmNfbGVuPjApICkKIAkJCXsKKwkJCWlmIChlbmMgPT0gTlVMTCkKKwkJCQl7CisJCQkJUEVNZXJyKFBFTV9GX1BFTV9YNTA5X0lORk9fV1JJVEVfQklPLFBFTV9SX0NJUEhFUl9JU19OVUxMKTsKKwkJCQlnb3RvIGVycjsKKwkJCQl9CisKIAkJCS8qIGNvcHkgZnJvbSB3ZWlyZG8gbmFtZXMgaW50byBtb3JlIG5vcm1hbCB0aGluZ3MgKi8KIAkJCWl2PXhpLT5lbmNfY2lwaGVyLml2OwogCQkJZGF0YT0odW5zaWduZWQgY2hhciAqKXhpLT5lbmNfZGF0YTsKZGlmZiAtLWdpdCBhL2NyeXB0by9wZW0vcGVtX2xpYi5jIGIvY3J5cHRvL3BlbS9wZW1fbGliLmMKaW5kZXggY2JhZmVmZS4uNDJlNDg2MSAxMDA2NDQKLS0tIGEvY3J5cHRvL3BlbS9wZW1fbGliLmMKKysrIGIvY3J5cHRvL3BlbS9wZW1fbGliLmMKQEAgLTU3LDYgKzU3LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgImNyeXB0bGliLmgiCiAjaW5jbHVkZSA8b3BlbnNzbC9idWZmZXIuaD4KICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KQEAgLTY1LDkgKzY2LDEzIEBACiAjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9wZW0uaD4KICNpbmNsdWRlIDxvcGVuc3NsL3BrY3MxMi5oPgorI2luY2x1ZGUgImFzbjFfbG9jbC5oIgogI2lmbmRlZiBPUEVOU1NMX05PX0RFUwogI2luY2x1ZGUgPG9wZW5zc2wvZGVzLmg+CiAjZW5kaWYKKyNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKKyNpbmNsdWRlIDxvcGVuc3NsL2VuZ2luZS5oPgorI2VuZGlmCiAKIGNvbnN0IGNoYXIgUEVNX3ZlcnNpb25bXT0iUEVNIiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7CiAKQEAgLTc1LDYgKzgwLDcgQEAKIAogc3RhdGljIGludCBsb2FkX2l2KGNoYXIgKipmcm9tcCx1bnNpZ25lZCBjaGFyICp0bywgaW50IG51bSk7CiBzdGF0aWMgaW50IGNoZWNrX3BlbShjb25zdCBjaGFyICpubSwgY29uc3QgY2hhciAqbmFtZSk7CitpbnQgcGVtX2NoZWNrX3N1ZmZpeChjb25zdCBjaGFyICpwZW1fc3RyLCBjb25zdCBjaGFyICpzdWZmaXgpOwogCiBpbnQgUEVNX2RlZl9jYWxsYmFjayhjaGFyICpidWYsIGludCBudW0sIGludCB3LCB2b2lkICprZXkpCiAJewpAQCAtOTksNyArMTA1LDcgQEAKIAogCWZvciAoOzspCiAJCXsKLQkJaT1FVlBfcmVhZF9wd19zdHJpbmcoYnVmLG51bSxwcm9tcHQsdyk7CisJCWk9RVZQX3JlYWRfcHdfc3RyaW5nX21pbihidWYsTUlOX0xFTkdUSCxudW0scHJvbXB0LHcpOwogCQlpZiAoaSAhPSAwKQogCQkJewogCQkJUEVNZXJyKFBFTV9GX1BFTV9ERUZfQ0FMTEJBQ0ssUEVNX1JfUFJPQkxFTVNfR0VUVElOR19QQVNTV09SRCk7CkBAIC0xODMsMjAgKzE4OSw1NCBAQAogCiAJLyogTWFrZSBQRU1fU1RSSU5HX0VWUF9QS0VZIG1hdGNoIGFueSBwcml2YXRlIGtleSAqLwogCi0JaWYoIXN0cmNtcChubSxQRU1fU1RSSU5HX1BLQ1M4KSAmJgotCQkhc3RyY21wKG5hbWUsUEVNX1NUUklOR19FVlBfUEtFWSkpIHJldHVybiAxOworCWlmKCFzdHJjbXAobmFtZSxQRU1fU1RSSU5HX0VWUF9QS0VZKSkKKwkJeworCQlpbnQgc2xlbjsKKwkJY29uc3QgRVZQX1BLRVlfQVNOMV9NRVRIT0QgKmFtZXRoOworCQlpZighc3RyY21wKG5tLFBFTV9TVFJJTkdfUEtDUzgpKQorCQkJcmV0dXJuIDE7CisJCWlmKCFzdHJjbXAobm0sUEVNX1NUUklOR19QS0NTOElORikpCisJCQlyZXR1cm4gMTsKKwkJc2xlbiA9IHBlbV9jaGVja19zdWZmaXgobm0sICJQUklWQVRFIEtFWSIpOyAKKwkJaWYgKHNsZW4gPiAwKQorCQkJeworCQkJLyogTkI6IEVOR0lORSBpbXBsZW1lbnRhdGlvbnMgd29udCBjb250YWluCisJCQkgKiBhIGRlcHJlY2F0ZWQgb2xkIHByaXZhdGUga2V5IGRlY29kZSBmdW5jdGlvbgorCQkJICogc28gZG9uJ3QgbG9vayBmb3IgdGhlbS4KKwkJCSAqLworCQkJYW1ldGggPSBFVlBfUEtFWV9hc24xX2ZpbmRfc3RyKE5VTEwsIG5tLCBzbGVuKTsKKwkJCWlmIChhbWV0aCAmJiBhbWV0aC0+b2xkX3ByaXZfZGVjb2RlKQorCQkJCXJldHVybiAxOworCQkJfQorCQlyZXR1cm4gMDsKKwkJfQogCi0JaWYoIXN0cmNtcChubSxQRU1fU1RSSU5HX1BLQ1M4SU5GKSAmJgotCQkgIXN0cmNtcChuYW1lLFBFTV9TVFJJTkdfRVZQX1BLRVkpKSByZXR1cm4gMTsKKwlpZighc3RyY21wKG5hbWUsUEVNX1NUUklOR19QQVJBTUVURVJTKSkKKwkJeworCQlpbnQgc2xlbjsKKwkJY29uc3QgRVZQX1BLRVlfQVNOMV9NRVRIT0QgKmFtZXRoOworCQlzbGVuID0gcGVtX2NoZWNrX3N1ZmZpeChubSwgIlBBUkFNRVRFUlMiKTsgCisJCWlmIChzbGVuID4gMCkKKwkJCXsKKwkJCUVOR0lORSAqZTsKKwkJCWFtZXRoID0gRVZQX1BLRVlfYXNuMV9maW5kX3N0cigmZSwgbm0sIHNsZW4pOworCQkJaWYgKGFtZXRoKQorCQkJCXsKKwkJCQlpbnQgcjsKKwkJCQlpZiAoYW1ldGgtPnBhcmFtX2RlY29kZSkKKwkJCQkJciA9IDE7CisJCQkJZWxzZQorCQkJCQlyID0gMDsKKyNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKKwkJCQlpZiAoZSkKKwkJCQkJRU5HSU5FX2ZpbmlzaChlKTsKKyNlbmRpZgorCQkJCXJldHVybiByOworCQkJCX0KKwkJCX0KKwkJcmV0dXJuIDA7CisJCX0KIAotCWlmKCFzdHJjbXAobm0sUEVNX1NUUklOR19SU0EpICYmCi0JCSFzdHJjbXAobmFtZSxQRU1fU1RSSU5HX0VWUF9QS0VZKSkgcmV0dXJuIDE7Ci0KLQlpZighc3RyY21wKG5tLFBFTV9TVFJJTkdfRFNBKSAmJgotCQkgIXN0cmNtcChuYW1lLFBFTV9TVFJJTkdfRVZQX1BLRVkpKSByZXR1cm4gMTsKLQotIAlpZighc3RyY21wKG5tLFBFTV9TVFJJTkdfRUNQUklWQVRFS0VZKSAmJgotIAkJICFzdHJjbXAobmFtZSxQRU1fU1RSSU5HX0VWUF9QS0VZKSkgcmV0dXJuIDE7CiAJLyogUGVybWl0IG9sZGVyIHN0cmluZ3MgKi8KIAogCWlmKCFzdHJjbXAobm0sUEVNX1NUUklOR19YNTA5X09MRCkgJiYKQEAgLTIxOSw2ICsyNTksMTQgQEAKIAlpZighc3RyY21wKG5tLCBQRU1fU1RSSU5HX1BLQ1M3X1NJR05FRCkgJiYKIAkJIXN0cmNtcChuYW1lLCBQRU1fU1RSSU5HX1BLQ1M3KSkgcmV0dXJuIDE7CiAKKyNpZm5kZWYgT1BFTlNTTF9OT19DTVMKKwlpZighc3RyY21wKG5tLCBQRU1fU1RSSU5HX1g1MDkpICYmCisJCSFzdHJjbXAobmFtZSwgUEVNX1NUUklOR19DTVMpKSByZXR1cm4gMTsKKwkvKiBBbGxvdyBDTVMgdG8gYmUgcmVhZCBmcm9tIFBLQ1MjNyBoZWFkZXJzICovCisJaWYoIXN0cmNtcChubSwgUEVNX1NUUklOR19QS0NTNykgJiYKKwkJIXN0cmNtcChuYW1lLCBQRU1fU1RSSU5HX0NNUykpIHJldHVybiAxOworI2VuZGlmCisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjY0LDcgKzMxMiw3IEBACiAKICNpZm5kZWYgT1BFTlNTTF9OT19GUF9BUEkKIGludCBQRU1fQVNOMV93cml0ZShpMmRfb2Zfdm9pZCAqaTJkLCBjb25zdCBjaGFyICpuYW1lLCBGSUxFICpmcCwKLQkJICAgY2hhciAqeCwgY29uc3QgRVZQX0NJUEhFUiAqZW5jLCB1bnNpZ25lZCBjaGFyICprc3RyLAorCQkgICB2b2lkICp4LCBjb25zdCBFVlBfQ0lQSEVSICplbmMsIHVuc2lnbmVkIGNoYXIgKmtzdHIsCiAJCSAgIGludCBrbGVuLCBwZW1fcGFzc3dvcmRfY2IgKmNhbGxiYWNrLCB2b2lkICp1KQogICAgICAgICB7CiAgICAgICAgIEJJTyAqYjsKQEAgLTI4Myw3ICszMzEsNyBAQAogI2VuZGlmCiAKIGludCBQRU1fQVNOMV93cml0ZV9iaW8oaTJkX29mX3ZvaWQgKmkyZCwgY29uc3QgY2hhciAqbmFtZSwgQklPICpicCwKLQkJICAgICAgIGNoYXIgKngsIGNvbnN0IEVWUF9DSVBIRVIgKmVuYywgdW5zaWduZWQgY2hhciAqa3N0ciwKKwkJICAgICAgIHZvaWQgKngsIGNvbnN0IEVWUF9DSVBIRVIgKmVuYywgdW5zaWduZWQgY2hhciAqa3N0ciwKIAkJICAgICAgIGludCBrbGVuLCBwZW1fcGFzc3dvcmRfY2IgKmNhbGxiYWNrLCB2b2lkICp1KQogCXsKIAlFVlBfQ0lQSEVSX0NUWCBjdHg7CkBAIC03ODIsMyArODMwLDI1IEBACiAJQlVGX01FTV9mcmVlKGRhdGFCKTsKIAlyZXR1cm4oMCk7CiAJfQorCisvKiBDaGVjayBwZW0gc3RyaW5nIGFuZCByZXR1cm4gcHJlZml4IGxlbmd0aC4KKyAqIElmIGZvciBleGFtcGxlIHRoZSBwZW1fc3RyID09ICJSU0EgUFJJVkFURSBLRVkiIGFuZCBzdWZmaXggPSAiUFJJVkFURSBLRVkiCisgKiB0aGUgcmV0dXJuIHZhbHVlIGlzIDMgZm9yIHRoZSBzdHJpbmcgIlJTQSIuCisgKi8KKworaW50IHBlbV9jaGVja19zdWZmaXgoY29uc3QgY2hhciAqcGVtX3N0ciwgY29uc3QgY2hhciAqc3VmZml4KQorCXsKKwlpbnQgcGVtX2xlbiA9IHN0cmxlbihwZW1fc3RyKTsKKwlpbnQgc3VmZml4X2xlbiA9IHN0cmxlbihzdWZmaXgpOworCWNvbnN0IGNoYXIgKnA7CisJaWYgKHN1ZmZpeF9sZW4gKyAxID49IHBlbV9sZW4pCisJCXJldHVybiAwOworCXAgPSBwZW1fc3RyICsgcGVtX2xlbiAtIHN1ZmZpeF9sZW47CisJaWYgKHN0cmNtcChwLCBzdWZmaXgpKQorCQlyZXR1cm4gMDsKKwlwLS07CisJaWYgKCpwICE9ICcgJykKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHAgLSBwZW1fc3RyOworCX0KKwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3BlbS9wZW1fcGtleS5jIGIvY3J5cHRvL3BlbS9wZW1fcGtleS5jCmluZGV4IDRkYTRjMzEuLjhlY2YyNDkgMTAwNjQ0Ci0tLSBhL2NyeXB0by9wZW0vcGVtX3BrZXkuYworKysgYi9jcnlwdG8vcGVtL3BlbV9wa2V5LmMKQEAgLTY1LDcgKzY1LDEyIEBACiAjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9wa2NzMTIuaD4KICNpbmNsdWRlIDxvcGVuc3NsL3BlbS5oPgorI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQorI2luY2x1ZGUgPG9wZW5zc2wvZW5naW5lLmg+CisjZW5kaWYKKyNpbmNsdWRlICJhc24xX2xvY2wuaCIKIAoraW50IHBlbV9jaGVja19zdWZmaXgoY29uc3QgY2hhciAqcGVtX3N0ciwgY29uc3QgY2hhciAqc3VmZml4KTsKIAogRVZQX1BLRVkgKlBFTV9yZWFkX2Jpb19Qcml2YXRlS2V5KEJJTyAqYnAsIEVWUF9QS0VZICoqeCwgcGVtX3Bhc3N3b3JkX2NiICpjYiwgdm9pZCAqdSkKIAl7CkBAIC03MywxOSArNzgsMTQgQEAKIAljb25zdCB1bnNpZ25lZCBjaGFyICpwPU5VTEw7CiAJdW5zaWduZWQgY2hhciAqZGF0YT1OVUxMOwogCWxvbmcgbGVuOworCWludCBzbGVuOwogCUVWUF9QS0VZICpyZXQ9TlVMTDsKIAogCWlmICghUEVNX2J5dGVzX3JlYWRfYmlvKCZkYXRhLCAmbGVuLCAmbm0sIFBFTV9TVFJJTkdfRVZQX1BLRVksIGJwLCBjYiwgdSkpCiAJCXJldHVybiBOVUxMOwogCXAgPSBkYXRhOwogCi0JaWYgKHN0cmNtcChubSxQRU1fU1RSSU5HX1JTQSkgPT0gMCkKLQkJcmV0PWQyaV9Qcml2YXRlS2V5KEVWUF9QS0VZX1JTQSx4LCZwLGxlbik7Ci0JZWxzZSBpZiAoc3RyY21wKG5tLFBFTV9TVFJJTkdfRFNBKSA9PSAwKQotCQlyZXQ9ZDJpX1ByaXZhdGVLZXkoRVZQX1BLRVlfRFNBLHgsJnAsbGVuKTsKLQllbHNlIGlmIChzdHJjbXAobm0sUEVNX1NUUklOR19FQ1BSSVZBVEVLRVkpID09IDApCi0JCXJldD1kMmlfUHJpdmF0ZUtleShFVlBfUEtFWV9FQyx4LCZwLGxlbik7Ci0JZWxzZSBpZiAoc3RyY21wKG5tLFBFTV9TVFJJTkdfUEtDUzhJTkYpID09IDApIHsKKwlpZiAoc3RyY21wKG5tLFBFTV9TVFJJTkdfUEtDUzhJTkYpID09IDApIHsKIAkJUEtDUzhfUFJJVl9LRVlfSU5GTyAqcDhpbmY7CiAJCXA4aW5mPWQyaV9QS0NTOF9QUklWX0tFWV9JTkZPKE5VTEwsICZwLCBsZW4pOwogCQlpZighcDhpbmYpIGdvdG8gcDhlcnI7CkBAIC0xMTksNyArMTE5LDE0IEBACiAJCQkqeCA9IHJldDsKIAkJfQogCQlQS0NTOF9QUklWX0tFWV9JTkZPX2ZyZWUocDhpbmYpOwotCX0KKwl9IGVsc2UgaWYgKChzbGVuID0gcGVtX2NoZWNrX3N1ZmZpeChubSwgIlBSSVZBVEUgS0VZIikpID4gMCkKKwkJeworCQljb25zdCBFVlBfUEtFWV9BU04xX01FVEhPRCAqYW1ldGg7CisJCWFtZXRoID0gRVZQX1BLRVlfYXNuMV9maW5kX3N0cihOVUxMLCBubSwgc2xlbik7CisJCWlmICghYW1ldGggfHwgIWFtZXRoLT5vbGRfcHJpdl9kZWNvZGUpCisJCQlnb3RvIHA4ZXJyOworCQlyZXQ9ZDJpX1ByaXZhdGVLZXkoYW1ldGgtPnBrZXlfaWQseCwmcCxsZW4pOworCQl9CiBwOGVycjoKIAlpZiAocmV0ID09IE5VTEwpCiAJCVBFTWVycihQRU1fRl9QRU1fUkVBRF9CSU9fUFJJVkFURUtFWSxFUlJfUl9BU04xX0xJQik7CkBAIC0xMzAsNiArMTM3LDc0IEBACiAJcmV0dXJuKHJldCk7CiAJfQogCitpbnQgUEVNX3dyaXRlX2Jpb19Qcml2YXRlS2V5KEJJTyAqYnAsIEVWUF9QS0VZICp4LCBjb25zdCBFVlBfQ0lQSEVSICplbmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmtzdHIsIGludCBrbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW1fcGFzc3dvcmRfY2IgKmNiLCB2b2lkICp1KQorCXsKKwljaGFyIHBlbV9zdHJbODBdOworCWlmICgheC0+YW1ldGggfHwgeC0+YW1ldGgtPnByaXZfZW5jb2RlKQorCQlyZXR1cm4gUEVNX3dyaXRlX2Jpb19QS0NTOFByaXZhdGVLZXkoYnAsIHgsIGVuYywKKwkJCQkJCQkoY2hhciAqKWtzdHIsIGtsZW4sCisJCQkJCQkJY2IsIHUpOworCisJQklPX3NucHJpbnRmKHBlbV9zdHIsIDgwLCAiJXMgUFJJVkFURSBLRVkiLCB4LT5hbWV0aC0+cGVtX3N0cik7CisJcmV0dXJuIFBFTV9BU04xX3dyaXRlX2JpbygoaTJkX29mX3ZvaWQgKilpMmRfUHJpdmF0ZUtleSwKKwkJCQlwZW1fc3RyLGJwLHgsZW5jLGtzdHIsa2xlbixjYix1KTsKKwl9CisKK0VWUF9QS0VZICpQRU1fcmVhZF9iaW9fUGFyYW1ldGVycyhCSU8gKmJwLCBFVlBfUEtFWSAqKngpCisJeworCWNoYXIgKm5tPU5VTEw7CisJY29uc3QgdW5zaWduZWQgY2hhciAqcD1OVUxMOworCXVuc2lnbmVkIGNoYXIgKmRhdGE9TlVMTDsKKwlsb25nIGxlbjsKKwlpbnQgc2xlbjsKKwlFVlBfUEtFWSAqcmV0PU5VTEw7CisKKwlpZiAoIVBFTV9ieXRlc19yZWFkX2JpbygmZGF0YSwgJmxlbiwgJm5tLCBQRU1fU1RSSU5HX1BBUkFNRVRFUlMsCisJCQkJCQkJCWJwLCAwLCBOVUxMKSkKKwkJcmV0dXJuIE5VTEw7CisJcCA9IGRhdGE7CisKKwlpZiAoKHNsZW4gPSBwZW1fY2hlY2tfc3VmZml4KG5tLCAiUEFSQU1FVEVSUyIpKSA+IDApCisJCXsKKwkJcmV0ID0gRVZQX1BLRVlfbmV3KCk7CisJCWlmICghcmV0KQorCQkJZ290byBlcnI7CisJCWlmICghRVZQX1BLRVlfc2V0X3R5cGVfc3RyKHJldCwgbm0sIHNsZW4pCisJCQl8fCAhcmV0LT5hbWV0aC0+cGFyYW1fZGVjb2RlCisJCQl8fCAhcmV0LT5hbWV0aC0+cGFyYW1fZGVjb2RlKHJldCwgJnAsIGxlbikpCisJCQl7CisJCQlFVlBfUEtFWV9mcmVlKHJldCk7CisJCQlyZXQgPSBOVUxMOworCQkJZ290byBlcnI7CisJCQl9CisJCWlmKHgpCisJCQl7CisJCQlpZigqeCkgRVZQX1BLRVlfZnJlZSgoRVZQX1BLRVkgKikqeCk7CisJCQkqeCA9IHJldDsKKwkJCX0KKwkJfQorZXJyOgorCWlmIChyZXQgPT0gTlVMTCkKKwkJUEVNZXJyKFBFTV9GX1BFTV9SRUFEX0JJT19QQVJBTUVURVJTLEVSUl9SX0FTTjFfTElCKTsKKwlPUEVOU1NMX2ZyZWUobm0pOworCU9QRU5TU0xfZnJlZShkYXRhKTsKKwlyZXR1cm4ocmV0KTsKKwl9CisKK2ludCBQRU1fd3JpdGVfYmlvX1BhcmFtZXRlcnMoQklPICpicCwgRVZQX1BLRVkgKngpCisJeworCWNoYXIgcGVtX3N0cls4MF07CisJaWYgKCF4LT5hbWV0aCB8fCAheC0+YW1ldGgtPnBhcmFtX2VuY29kZSkKKwkJcmV0dXJuIDA7CisKKwlCSU9fc25wcmludGYocGVtX3N0ciwgODAsICIlcyBQQVJBTUVURVJTIiwgeC0+YW1ldGgtPnBlbV9zdHIpOworCXJldHVybiBQRU1fQVNOMV93cml0ZV9iaW8oCisJCShpMmRfb2Zfdm9pZCAqKXgtPmFtZXRoLT5wYXJhbV9lbmNvZGUsCisJCQkJcGVtX3N0cixicCx4LE5VTEwsTlVMTCwwLDAsTlVMTCk7CisJfQorCiAjaWZuZGVmIE9QRU5TU0xfTk9fRlBfQVBJCiBFVlBfUEtFWSAqUEVNX3JlYWRfUHJpdmF0ZUtleShGSUxFICpmcCwgRVZQX1BLRVkgKip4LCBwZW1fcGFzc3dvcmRfY2IgKmNiLCB2b2lkICp1KQogCXsKQEAgLTE0Niw0ICsyMjEsMjIgQEAKICAgICAgICAgQklPX2ZyZWUoYik7CiAgICAgICAgIHJldHVybihyZXQpOwogCX0KKworaW50IFBFTV93cml0ZV9Qcml2YXRlS2V5KEZJTEUgKmZwLCBFVlBfUEtFWSAqeCwgY29uc3QgRVZQX0NJUEhFUiAqZW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICprc3RyLCBpbnQga2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVtX3Bhc3N3b3JkX2NiICpjYiwgdm9pZCAqdSkKKwl7CisgICAgICAgIEJJTyAqYjsKKyAgICAgICAgaW50IHJldDsKKworICAgICAgICBpZiAoKGI9QklPX25ld19mcChmcCwgQklPX05PQ0xPU0UpKSA9PSBOVUxMKQorCQl7CisJCVBFTWVycihQRU1fRl9QRU1fV1JJVEVfUFJJVkFURUtFWSxFUlJfUl9CVUZfTElCKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKwkJfQorICAgICAgICByZXQ9UEVNX3dyaXRlX2Jpb19Qcml2YXRlS2V5KGIsIHgsIGVuYywga3N0ciwga2xlbiwgY2IsIHUpOworICAgICAgICBCSU9fZnJlZShiKTsKKyAgICAgICAgcmV0dXJuIHJldDsKKwl9CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvY3J5cHRvL3BlbS9wZW1feDUwOS5jIGIvY3J5cHRvL3BlbS9wZW1feDUwOS5jCmluZGV4IDNmNzA5ZjEuLmI1MzEwNTcgMTAwNjQ0Ci0tLSBhL2NyeXB0by9wZW0vcGVtX3g1MDkuYworKysgYi9jcnlwdG8vcGVtL3BlbV94NTA5LmMKQEAgLTU3LDcgKzU3LDYgQEAKICAqLwogCiAjaW5jbHVkZSA8c3RkaW8uaD4KLSN1bmRlZiBTU0xFQVlfTUFDUk9TCiAjaW5jbHVkZSAiY3J5cHRsaWIuaCIKICNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgogI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CmRpZmYgLS1naXQgYS9jcnlwdG8vcGVtL3BlbV94YXV4LmMgYi9jcnlwdG8vcGVtL3BlbV94YXV4LmMKaW5kZXggN2NjNzQ5MS4uMzI4Zjc5NiAxMDA2NDQKLS0tIGEvY3J5cHRvL3BlbS9wZW1feGF1eC5jCisrKyBiL2NyeXB0by9wZW0vcGVtX3hhdXguYwpAQCAtNTcsNyArNTcsNiBAQAogICovCiAKICNpbmNsdWRlIDxzdGRpby5oPgotI3VuZGVmIFNTTEVBWV9NQUNST1MKICNpbmNsdWRlICJjcnlwdGxpYi5oIgogI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KZGlmZiAtLWdpdCBhL2NyeXB0by9wZW0vcHZrZm10LmMgYi9jcnlwdG8vcGVtL3B2a2ZtdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZTFmMTAKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vcGVtL3B2a2ZtdC5jCkBAIC0wLDAgKzEsOTM3IEBACisvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKyAqIHByb2plY3QgMjAwNS4KKyAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoYykgMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKyAqCisgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisgKgorICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisgKgorICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworICogICAgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorICoKKyAqLworCisvKiBTdXBwb3J0IGZvciBQVksgZm9ybWF0IGtleXMgYW5kIHJlbGF0ZWQgc3RydWN0dXJlcyAoc3VjaCBhIFBVQkxJQ0tFWUJMT0IKKyAqIGFuZCBQUklWQVRFS0VZQkxPQikuCisgKi8KKworI2luY2x1ZGUgImNyeXB0bGliLmgiCisjaW5jbHVkZSA8b3BlbnNzbC9wZW0uaD4KKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19SU0EpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fRFNBKQorI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKworLyogVXRpbGl0eSBmdW5jdGlvbjogcmVhZCBhIERXT1JEICg0IGJ5dGUgdW5zaWduZWQgaW50ZWdlcikgaW4gbGl0dGxlIGVuZGlhbgorICogZm9ybWF0CisgKi8KKworc3RhdGljIHVuc2lnbmVkIGludCByZWFkX2xlZHdvcmQoY29uc3QgdW5zaWduZWQgY2hhciAqKmluKQorCXsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpwID0gKmluOworCXVuc2lnbmVkIGludCByZXQ7CisJcmV0ID0gKnArKzsKKwlyZXQgfD0gKCpwKysgPDwgOCk7CisJcmV0IHw9ICgqcCsrIDw8IDE2KTsKKwlyZXQgfD0gKCpwKysgPDwgMjQpOworCSppbiA9IHA7CisJcmV0dXJuIHJldDsKKwl9CisKKy8qIFJlYWQgYSBCSUdOVU0gaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQuIFRoZSBkb2NzIHNheSB0aGF0IHRoaXMgc2hvdWxkIHRha2UgdXAgCisgKiBiaXRsZW4vOCBieXRlcy4KKyAqLworCitzdGF0aWMgaW50IHJlYWRfbGVibihjb25zdCB1bnNpZ25lZCBjaGFyICoqaW4sIHVuc2lnbmVkIGludCBuYnl0ZSwgQklHTlVNICoqcikKKwl7CisJY29uc3QgdW5zaWduZWQgY2hhciAqcDsKKwl1bnNpZ25lZCBjaGFyICp0bXBidWYsICpxOworCXVuc2lnbmVkIGludCBpOworCXAgPSAqaW4gKyBuYnl0ZSAtIDE7CisJdG1wYnVmID0gT1BFTlNTTF9tYWxsb2MobmJ5dGUpOworCWlmICghdG1wYnVmKQorCQlyZXR1cm4gMDsKKwlxID0gdG1wYnVmOworCWZvciAoaSA9IDA7IGkgPCBuYnl0ZTsgaSsrKQorCQkqcSsrID0gKnAtLTsKKwkqciA9IEJOX2JpbjJibih0bXBidWYsIG5ieXRlLCBOVUxMKTsKKwlPUEVOU1NMX2ZyZWUodG1wYnVmKTsKKwlpZiAoKnIpCisJCXsKKwkJKmluICs9IG5ieXRlOworCQlyZXR1cm4gMTsKKwkJfQorCWVsc2UKKwkJcmV0dXJuIDA7CisJfQorCisKKy8qIENvbnZlcnQgcHJpdmF0ZSBrZXkgYmxvYiB0byBFVlBfUEtFWTogUlNBIGFuZCBEU0Ega2V5cyBzdXBwb3J0ZWQgKi8KKworI2RlZmluZSBNU19QVUJMSUNLRVlCTE9CCTB4NgorI2RlZmluZSBNU19QUklWQVRFS0VZQkxPQgkweDcKKyNkZWZpbmUgTVNfUlNBMU1BR0lDCQkweDMxNDE1MzUyTAorI2RlZmluZSBNU19SU0EyTUFHSUMJCTB4MzI0MTUzNTJMCisjZGVmaW5lIE1TX0RTUzFNQUdJQwkJMHgzMTUzNTM0NEwKKyNkZWZpbmUgTVNfRFNTMk1BR0lDCQkweDMyNTM1MzQ0TAorCisjZGVmaW5lIE1TX0tFWUFMR19SU0FfS0VZWAkweGE0MDAKKyNkZWZpbmUgTVNfS0VZQUxHX0RTU19TSUdOCTB4MjIwMAorCisjZGVmaW5lIE1TX0tFWVRZUEVfS0VZWAkJMHgxCisjZGVmaW5lIE1TX0tFWVRZUEVfU0lHTgkJMHgyCisKKy8qIFRoZSBQVksgZmlsZSBtYWdpYyBudW1iZXI6IHNlZW1zIHRvIHNwZWxsIG91dCAiYm9ic2ZpbGUiLCB3aG8gaXMgQm9iPyAqLworI2RlZmluZSBNU19QVktNQUdJQwkJMHhiMGI1ZjExZUwKKy8qIFNhbHQgbGVuZ3RoIGZvciBQVksgZmlsZXMgKi8KKyNkZWZpbmUgUFZLX1NBTFRMRU4JCTB4MTAKKworc3RhdGljIEVWUF9QS0VZICpiMmlfcnNhKGNvbnN0IHVuc2lnbmVkIGNoYXIgKippbiwgdW5zaWduZWQgaW50IGxlbmd0aCwKKwkJCQkJCXVuc2lnbmVkIGludCBiaXRsZW4sIGludCBpc3B1Yik7CitzdGF0aWMgRVZQX1BLRVkgKmIyaV9kc3MoY29uc3QgdW5zaWduZWQgY2hhciAqKmluLCB1bnNpZ25lZCBpbnQgbGVuZ3RoLAorCQkJCQkJdW5zaWduZWQgaW50IGJpdGxlbiwgaW50IGlzcHViKTsKKworc3RhdGljIGludCBkb19ibG9iX2hlYWRlcihjb25zdCB1bnNpZ25lZCBjaGFyICoqaW4sIHVuc2lnbmVkIGludCBsZW5ndGgsCisJCQkJdW5zaWduZWQgaW50ICpwbWFnaWMsIHVuc2lnbmVkIGludCAqcGJpdGxlbiwKKwkJCQlpbnQgKnBpc2RzcywgaW50ICpwaXNwdWIpCisJeworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnAgPSAqaW47CisJaWYgKGxlbmd0aCA8IDE2KQorCQlyZXR1cm4gMDsKKwkvKiBiVHlwZSAqLworCWlmICgqcCA9PSBNU19QVUJMSUNLRVlCTE9CKQorCQl7CisJCWlmICgqcGlzcHViID09IDApCisJCQl7CisJCQlQRU1lcnIoUEVNX0ZfRE9fQkxPQl9IRUFERVIsCisJCQkJCVBFTV9SX0VYUEVDVElOR19QUklWQVRFX0tFWV9CTE9CKTsKKwkJCXJldHVybiAwOworCQkJfQorCQkqcGlzcHViID0gMTsKKwkJfQorCWVsc2UgaWYgKCpwID09IE1TX1BSSVZBVEVLRVlCTE9CKQorCQl7CisJCWlmICgqcGlzcHViID09IDEpCisJCQl7CisJCQlQRU1lcnIoUEVNX0ZfRE9fQkxPQl9IRUFERVIsCisJCQkJCVBFTV9SX0VYUEVDVElOR19QVUJMSUNfS0VZX0JMT0IpOworCQkJcmV0dXJuIDA7CisJCQl9CisJCSpwaXNwdWIgPSAwOworCQl9CisJZWxzZQorCQlyZXR1cm4gMDsKKwlwKys7CisJLyogVmVyc2lvbiAqLworCWlmICgqcCsrICE9IDB4MikKKwkJeworCQlQRU1lcnIoUEVNX0ZfRE9fQkxPQl9IRUFERVIsIFBFTV9SX0JBRF9WRVJTSU9OX05VTUJFUik7CisJCXJldHVybiAwOworCQl9CisJLyogSWdub3JlIHJlc2VydmVkLCBhaUtleUFsZyAqLworCXArPSA2OworCSpwbWFnaWMgPSByZWFkX2xlZHdvcmQoJnApOworCSpwYml0bGVuID0gcmVhZF9sZWR3b3JkKCZwKTsKKwkqcGlzZHNzID0gMDsKKwlzd2l0Y2ggKCpwbWFnaWMpCisJCXsKKworCQljYXNlIE1TX0RTUzFNQUdJQzoKKwkJKnBpc2RzcyA9IDE7CisJCWNhc2UgTVNfUlNBMU1BR0lDOgorCQlpZiAoKnBpc3B1YiA9PSAwKQorCQkJeworCQkJUEVNZXJyKFBFTV9GX0RPX0JMT0JfSEVBREVSLAorCQkJCQlQRU1fUl9FWFBFQ1RJTkdfUFJJVkFURV9LRVlfQkxPQik7CisJCQlyZXR1cm4gMDsKKwkJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBNU19EU1MyTUFHSUM6CisJCSpwaXNkc3MgPSAxOworCQljYXNlIE1TX1JTQTJNQUdJQzoKKwkJaWYgKCpwaXNwdWIgPT0gMSkKKwkJCXsKKwkJCVBFTWVycihQRU1fRl9ET19CTE9CX0hFQURFUiwKKwkJCQkJUEVNX1JfRVhQRUNUSU5HX1BVQkxJQ19LRVlfQkxPQik7CisJCQlyZXR1cm4gMDsKKwkJCX0KKwkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJUEVNZXJyKFBFTV9GX0RPX0JMT0JfSEVBREVSLCBQRU1fUl9CQURfTUFHSUNfTlVNQkVSKTsKKwkJcmV0dXJuIC0xOworCQl9CisJKmluID0gcDsKKwlyZXR1cm4gMTsKKwl9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYmxvYl9sZW5ndGgodW5zaWduZWQgYml0bGVuLCBpbnQgaXNkc3MsIGludCBpc3B1YikKKwl7CisJdW5zaWduZWQgaW50IG5ieXRlLCBobmJ5dGU7CisJbmJ5dGUgPSAoYml0bGVuICsgNykgPj4gMzsKKwlobmJ5dGUgPSAoYml0bGVuICsgMTUpID4+IDQ7CisJaWYgKGlzZHNzKQorCQl7CisKKwkJLyogRXhwZWN0ZWQgbGVuZ3RoOiAyMCBmb3IgcSArIDMgY29tcG9uZW50cyBiaXRsZW4gZWFjaCArIDI0CisJCSAqIGZvciBzZWVkIHN0cnVjdHVyZS4KKwkJICovCisJCWlmIChpc3B1YikKKwkJCXJldHVybiAgNDQgKyAzICogbmJ5dGU7CisJCS8qIEV4cGVjdGVkIGxlbmd0aDogMjAgZm9yIHEsIHByaXYsIDIgYml0bGVuIGNvbXBvbmVudHMgKyAyNAorCQkgKiBmb3Igc2VlZCBzdHJ1Y3R1cmUuCisJCSAqLworCQllbHNlCisJCQlyZXR1cm4gNjQgKyAyICogbmJ5dGU7CisJCX0KKwllbHNlCisJCXsKKwkJLyogRXhwZWN0ZWQgbGVuZ3RoOiA0IGZvciAnZScgKyAnbicgKi8KKwkJaWYgKGlzcHViKQorCQkJcmV0dXJuIDQgKyBuYnl0ZTsKKwkJZWxzZQorCQkvKiBFeHBlY3RlZCBsZW5ndGg6IDQgZm9yICdlJyBhbmQgNyBvdGhlciBjb21wb25lbnRzLgorCQkgKiAyIGNvbXBvbmVudHMgYXJlIGJpdGxlbiBzaXplLCA1IGFyZSBiaXRsZW4vMgorCQkgKi8KKwkJCXJldHVybiA0ICsgMipuYnl0ZSArIDUqaG5ieXRlOworCQl9CisKKwl9CisKK3N0YXRpYyBFVlBfUEtFWSAqZG9fYjJpKGNvbnN0IHVuc2lnbmVkIGNoYXIgKippbiwgdW5zaWduZWQgaW50IGxlbmd0aCwKKwkJCQkJCQkJaW50IGlzcHViKQorCXsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpwID0gKmluOworCXVuc2lnbmVkIGludCBiaXRsZW4sIG1hZ2ljOworCWludCBpc2RzczsKKwlpZiAoZG9fYmxvYl9oZWFkZXIoJnAsIGxlbmd0aCwgJm1hZ2ljLCAmYml0bGVuLCAmaXNkc3MsICZpc3B1YikgPD0gMCkKKwkJeworCQlQRU1lcnIoUEVNX0ZfRE9fQjJJLCBQRU1fUl9LRVlCTE9CX0hFQURFUl9QQVJTRV9FUlJPUik7CisJCXJldHVybiBOVUxMOworCQl9CisJbGVuZ3RoIC09IDE2OworCWlmIChsZW5ndGggPCBibG9iX2xlbmd0aChiaXRsZW4sIGlzZHNzLCBpc3B1YikpCisJCXsKKwkJUEVNZXJyKFBFTV9GX0RPX0IySSwgUEVNX1JfS0VZQkxPQl9UT09fU0hPUlQpOworCQlyZXR1cm4gTlVMTDsKKwkJfQorCWlmIChpc2RzcykKKwkJcmV0dXJuIGIyaV9kc3MoJnAsIGxlbmd0aCwgYml0bGVuLCBpc3B1Yik7CisJZWxzZQorCQlyZXR1cm4gYjJpX3JzYSgmcCwgbGVuZ3RoLCBiaXRsZW4sIGlzcHViKTsKKwl9CisKK3N0YXRpYyBFVlBfUEtFWSAqZG9fYjJpX2JpbyhCSU8gKmluLCBpbnQgaXNwdWIpCisJeworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnA7CisJdW5zaWduZWQgY2hhciBoZHJfYnVmWzE2XSwgKmJ1ZiA9IE5VTEw7CisJdW5zaWduZWQgaW50IGJpdGxlbiwgbWFnaWMsIGxlbmd0aDsKKwlpbnQgaXNkc3M7CisJRVZQX1BLRVkgKnJldCA9IE5VTEw7CisJaWYgKEJJT19yZWFkKGluLCBoZHJfYnVmLCAxNikgIT0gMTYpCisJCXsKKwkJUEVNZXJyKFBFTV9GX0RPX0IySV9CSU8sIFBFTV9SX0tFWUJMT0JfVE9PX1NIT1JUKTsKKwkJcmV0dXJuIE5VTEw7CisJCX0KKwlwID0gaGRyX2J1ZjsKKwlpZiAoZG9fYmxvYl9oZWFkZXIoJnAsIDE2LCAmbWFnaWMsICZiaXRsZW4sICZpc2RzcywgJmlzcHViKSA8PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCWxlbmd0aCA9IGJsb2JfbGVuZ3RoKGJpdGxlbiwgaXNkc3MsIGlzcHViKTsKKwlidWYgPSBPUEVOU1NMX21hbGxvYyhsZW5ndGgpOworCWlmICghYnVmKQorCQl7CisJCVBFTWVycihQRU1fRl9ET19CMklfQklPLCBFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CisJCWdvdG8gZXJyOworCQl9CisJcCA9IGJ1ZjsKKwlpZiAoQklPX3JlYWQoaW4sIGJ1ZiwgbGVuZ3RoKSAhPSAoaW50KWxlbmd0aCkKKwkJeworCQlQRU1lcnIoUEVNX0ZfRE9fQjJJX0JJTywgUEVNX1JfS0VZQkxPQl9UT09fU0hPUlQpOworCQlnb3RvIGVycjsKKwkJfQorCisJaWYgKGlzZHNzKQorCQlyZXQgPSBiMmlfZHNzKCZwLCBsZW5ndGgsIGJpdGxlbiwgaXNwdWIpOworCWVsc2UKKwkJcmV0ID0gYjJpX3JzYSgmcCwgbGVuZ3RoLCBiaXRsZW4sIGlzcHViKTsKKworCWVycjoKKwlpZiAoYnVmKQorCQlPUEVOU1NMX2ZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0OworCX0KKworc3RhdGljIEVWUF9QS0VZICpiMmlfZHNzKGNvbnN0IHVuc2lnbmVkIGNoYXIgKippbiwgdW5zaWduZWQgaW50IGxlbmd0aCwKKwkJCQkJCXVuc2lnbmVkIGludCBiaXRsZW4sIGludCBpc3B1YikKKwl7CisJY29uc3QgdW5zaWduZWQgY2hhciAqcCA9ICppbjsKKwlFVlBfUEtFWSAqcmV0ID0gTlVMTDsKKwlEU0EgKmRzYSA9IE5VTEw7CisJQk5fQ1RYICpjdHggPSBOVUxMOworCXVuc2lnbmVkIGludCBuYnl0ZTsKKwluYnl0ZSA9IChiaXRsZW4gKyA3KSA+PiAzOworCisJZHNhID0gRFNBX25ldygpOworCXJldCA9IEVWUF9QS0VZX25ldygpOworCWlmICghZHNhIHx8ICFyZXQpCisJCWdvdG8gbWVtZXJyOworCWlmICghcmVhZF9sZWJuKCZwLCBuYnl0ZSwgJmRzYS0+cCkpCisJCWdvdG8gbWVtZXJyOworCWlmICghcmVhZF9sZWJuKCZwLCAyMCwgJmRzYS0+cSkpCisJCWdvdG8gbWVtZXJyOworCWlmICghcmVhZF9sZWJuKCZwLCBuYnl0ZSwgJmRzYS0+ZykpCisJCWdvdG8gbWVtZXJyOworCWlmIChpc3B1YikKKwkJeworCQlpZiAoIXJlYWRfbGVibigmcCwgbmJ5dGUsICZkc2EtPnB1Yl9rZXkpKQorCQkJZ290byBtZW1lcnI7CisJCX0KKwllbHNlCisJCXsKKwkJaWYgKCFyZWFkX2xlYm4oJnAsIDIwLCAmZHNhLT5wcml2X2tleSkpCisJCQlnb3RvIG1lbWVycjsKKwkJLyogQ2FsY3VsYXRlIHB1YmxpYyBrZXkgKi8KKwkJaWYgKCEoZHNhLT5wdWJfa2V5ID0gQk5fbmV3KCkpKQorCQkJZ290byBtZW1lcnI7CisJCWlmICghKGN0eCA9IEJOX0NUWF9uZXcoKSkpCisJCQlnb3RvIG1lbWVycjsKKwkJCQorCQlpZiAoIUJOX21vZF9leHAoZHNhLT5wdWJfa2V5LCBkc2EtPmcsCisJCQkJCQkgZHNhLT5wcml2X2tleSwgZHNhLT5wLCBjdHgpKQorCQkJCisJCQlnb3RvIG1lbWVycjsKKwkJQk5fQ1RYX2ZyZWUoY3R4KTsKKwkJfQorCisJRVZQX1BLRVlfc2V0MV9EU0EocmV0LCBkc2EpOworCURTQV9mcmVlKGRzYSk7CisJKmluID0gcDsKKwlyZXR1cm4gcmV0OworCisJbWVtZXJyOgorCVBFTWVycihQRU1fRl9CMklfRFNTLCBFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CisJaWYgKGRzYSkKKwkJRFNBX2ZyZWUoZHNhKTsKKwlpZiAocmV0KQorCQlFVlBfUEtFWV9mcmVlKHJldCk7CisJaWYgKGN0eCkKKwkJQk5fQ1RYX2ZyZWUoY3R4KTsKKwlyZXR1cm4gTlVMTDsKKwl9CisKK3N0YXRpYyBFVlBfUEtFWSAqYjJpX3JzYShjb25zdCB1bnNpZ25lZCBjaGFyICoqaW4sIHVuc2lnbmVkIGludCBsZW5ndGgsCisJCQkJCQl1bnNpZ25lZCBpbnQgYml0bGVuLCBpbnQgaXNwdWIpCisJCQorCXsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpwID0gKmluOworCUVWUF9QS0VZICpyZXQgPSBOVUxMOworCVJTQSAqcnNhID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgbmJ5dGUsIGhuYnl0ZTsKKwluYnl0ZSA9IChiaXRsZW4gKyA3KSA+PiAzOworCWhuYnl0ZSA9IChiaXRsZW4gKyAxNSkgPj4gNDsKKwlyc2EgPSBSU0FfbmV3KCk7CisJcmV0ID0gRVZQX1BLRVlfbmV3KCk7CisJaWYgKCFyc2EgfHwgIXJldCkKKwkJZ290byBtZW1lcnI7CisJcnNhLT5lID0gQk5fbmV3KCk7CisJaWYgKCFyc2EtPmUpCisJCWdvdG8gbWVtZXJyOworCWlmICghQk5fc2V0X3dvcmQocnNhLT5lLCByZWFkX2xlZHdvcmQoJnApKSkKKwkJZ290byBtZW1lcnI7CisJaWYgKCFyZWFkX2xlYm4oJnAsIG5ieXRlLCAmcnNhLT5uKSkKKwkJZ290byBtZW1lcnI7CisJaWYgKCFpc3B1YikKKwkJeworCQlpZiAoIXJlYWRfbGVibigmcCwgaG5ieXRlLCAmcnNhLT5wKSkKKwkJCWdvdG8gbWVtZXJyOworCQlpZiAoIXJlYWRfbGVibigmcCwgaG5ieXRlLCAmcnNhLT5xKSkKKwkJCWdvdG8gbWVtZXJyOworCQlpZiAoIXJlYWRfbGVibigmcCwgaG5ieXRlLCAmcnNhLT5kbXAxKSkKKwkJCWdvdG8gbWVtZXJyOworCQlpZiAoIXJlYWRfbGVibigmcCwgaG5ieXRlLCAmcnNhLT5kbXExKSkKKwkJCWdvdG8gbWVtZXJyOworCQlpZiAoIXJlYWRfbGVibigmcCwgaG5ieXRlLCAmcnNhLT5pcW1wKSkKKwkJCWdvdG8gbWVtZXJyOworCQlpZiAoIXJlYWRfbGVibigmcCwgbmJ5dGUsICZyc2EtPmQpKQorCQkJZ290byBtZW1lcnI7CisJCX0KKworCUVWUF9QS0VZX3NldDFfUlNBKHJldCwgcnNhKTsKKwlSU0FfZnJlZShyc2EpOworCSppbiA9IHA7CisJcmV0dXJuIHJldDsKKwltZW1lcnI6CisJUEVNZXJyKFBFTV9GX0IySV9SU0EsIEVSUl9SX01BTExPQ19GQUlMVVJFKTsKKwlpZiAocnNhKQorCQlSU0FfZnJlZShyc2EpOworCWlmIChyZXQpCisJCUVWUF9QS0VZX2ZyZWUocmV0KTsKKwlyZXR1cm4gTlVMTDsKKwl9CisKK0VWUF9QS0VZICpiMmlfUHJpdmF0ZUtleShjb25zdCB1bnNpZ25lZCBjaGFyICoqaW4sIGxvbmcgbGVuZ3RoKQorCXsKKwlyZXR1cm4gZG9fYjJpKGluLCBsZW5ndGgsIDApOworCX0KKworRVZQX1BLRVkgKmIyaV9QdWJsaWNLZXkoY29uc3QgdW5zaWduZWQgY2hhciAqKmluLCBsb25nIGxlbmd0aCkKKwl7CisJcmV0dXJuIGRvX2IyaShpbiwgbGVuZ3RoLCAxKTsKKwl9CisKKworRVZQX1BLRVkgKmIyaV9Qcml2YXRlS2V5X2JpbyhCSU8gKmluKQorCXsKKwlyZXR1cm4gZG9fYjJpX2JpbyhpbiwgMCk7CisJfQorCitFVlBfUEtFWSAqYjJpX1B1YmxpY0tleV9iaW8oQklPICppbikKKwl7CisJcmV0dXJuIGRvX2IyaV9iaW8oaW4sIDEpOworCX0KKworc3RhdGljIHZvaWQgd3JpdGVfbGVkd29yZCh1bnNpZ25lZCBjaGFyICoqb3V0LCB1bnNpZ25lZCBpbnQgZHcpCisJeworCXVuc2lnbmVkIGNoYXIgKnAgPSAqb3V0OworCSpwKysgPSBkdyAmIDB4ZmY7CisJKnArKyA9IChkdz4+OCkgJiAweGZmOworCSpwKysgPSAoZHc+PjE2KSAmIDB4ZmY7CisJKnArKyA9IChkdz4+MjQpICYgMHhmZjsKKwkqb3V0ID0gcDsKKwl9CisKK3N0YXRpYyB2b2lkIHdyaXRlX2xlYm4odW5zaWduZWQgY2hhciAqKm91dCwgY29uc3QgQklHTlVNICpibiwgaW50IGxlbikKKwl7CisJaW50IG5iLCBpOworCXVuc2lnbmVkIGNoYXIgKnAgPSAqb3V0LCAqcSwgYzsKKwluYiA9IEJOX251bV9ieXRlcyhibik7CisJQk5fYm4yYmluKGJuLCBwKTsKKwlxID0gcCArIG5iIC0gMTsKKwkvKiBJbiBwbGFjZSBieXRlIG9yZGVyIHJldmVyc2FsICovCisJZm9yIChpID0gMDsgaSA8IG5iLzI7IGkrKykKKwkJeworCQljID0gKnA7CisJCSpwKysgPSAqcTsKKwkJKnEtLSA9IGM7CisJCX0KKwkqb3V0ICs9IG5iOworCS8qIFBhZCB3aXRoIHplcm9lcyBpZiB3ZSBoYXZlIHRvICovCisJaWYgKGxlbiA+IDApCisJCXsKKwkJbGVuIC09IG5iOworCQlpZiAobGVuID4gMCkKKwkJCXsKKwkJCW1lbXNldCgqb3V0LCAwLCBsZW4pOworCQkJKm91dCArPSBsZW47CisJCQl9CisJCX0KKwl9CisKKworc3RhdGljIGludCBjaGVja19iaXRsZW5fcnNhKFJTQSAqcnNhLCBpbnQgaXNwdWIsIHVuc2lnbmVkIGludCAqbWFnaWMpOworc3RhdGljIGludCBjaGVja19iaXRsZW5fZHNhKERTQSAqZHNhLCBpbnQgaXNwdWIsIHVuc2lnbmVkIGludCAqbWFnaWMpOworCitzdGF0aWMgdm9pZCB3cml0ZV9yc2EodW5zaWduZWQgY2hhciAqKm91dCwgUlNBICpyc2EsIGludCBpc3B1Yik7CitzdGF0aWMgdm9pZCB3cml0ZV9kc2EodW5zaWduZWQgY2hhciAqKm91dCwgRFNBICpkc2EsIGludCBpc3B1Yik7CisJCitzdGF0aWMgaW50IGRvX2kyYih1bnNpZ25lZCBjaGFyICoqb3V0LCBFVlBfUEtFWSAqcGssIGludCBpc3B1YikKKwl7CisJdW5zaWduZWQgY2hhciAqcDsKKwl1bnNpZ25lZCBpbnQgYml0bGVuLCBtYWdpYyA9IDAsIGtleWFsZzsKKwlpbnQgb3V0bGVuLCBub2luYyA9IDA7CisJaWYgKHBrLT50eXBlID09IEVWUF9QS0VZX0RTQSkKKwkJeworCQliaXRsZW4gPSBjaGVja19iaXRsZW5fZHNhKHBrLT5wa2V5LmRzYSwgaXNwdWIsICZtYWdpYyk7CisJCWtleWFsZyA9IE1TX0tFWUFMR19EU1NfU0lHTjsKKwkJfQorCWVsc2UgaWYgKHBrLT50eXBlID09IEVWUF9QS0VZX1JTQSkKKwkJeworCQliaXRsZW4gPSBjaGVja19iaXRsZW5fcnNhKHBrLT5wa2V5LnJzYSwgaXNwdWIsICZtYWdpYyk7CisJCWtleWFsZyA9IE1TX0tFWUFMR19SU0FfS0VZWDsKKwkJfQorCWVsc2UKKwkJcmV0dXJuIC0xOworCWlmIChiaXRsZW4gPT0gMCkKKwkJcmV0dXJuIC0xOworCW91dGxlbiA9IDE2ICsgYmxvYl9sZW5ndGgoYml0bGVuLAorCQkJa2V5YWxnID09IE1TX0tFWUFMR19EU1NfU0lHTiA/IDEgOiAwLCBpc3B1Yik7CisJaWYgKG91dCA9PSBOVUxMKQorCQlyZXR1cm4gb3V0bGVuOworCWlmICgqb3V0KQorCQlwID0gKm91dDsKKwllbHNlCisJCXsKKwkJcCA9IE9QRU5TU0xfbWFsbG9jKG91dGxlbik7CisJCWlmICghcCkKKwkJCXJldHVybiAtMTsKKwkJKm91dCA9IHA7CisJCW5vaW5jID0gMTsKKwkJfQorCWlmIChpc3B1YikKKwkJKnArKyA9IE1TX1BVQkxJQ0tFWUJMT0I7CisJZWxzZQorCQkqcCsrID0gTVNfUFJJVkFURUtFWUJMT0I7CisJKnArKyA9IDB4MjsKKwkqcCsrID0gMDsKKwkqcCsrID0gMDsKKwl3cml0ZV9sZWR3b3JkKCZwLCBrZXlhbGcpOworCXdyaXRlX2xlZHdvcmQoJnAsIG1hZ2ljKTsKKwl3cml0ZV9sZWR3b3JkKCZwLCBiaXRsZW4pOworCWlmIChrZXlhbGcgPT0gTVNfS0VZQUxHX0RTU19TSUdOKQorCQl3cml0ZV9kc2EoJnAsIHBrLT5wa2V5LmRzYSwgaXNwdWIpOworCWVsc2UKKwkJd3JpdGVfcnNhKCZwLCBway0+cGtleS5yc2EsIGlzcHViKTsKKwlpZiAoIW5vaW5jKQorCQkqb3V0ICs9IG91dGxlbjsKKwlyZXR1cm4gb3V0bGVuOworCX0KKworc3RhdGljIGludCBkb19pMmJfYmlvKEJJTyAqb3V0LCBFVlBfUEtFWSAqcGssIGludCBpc3B1YikKKwl7CisJdW5zaWduZWQgY2hhciAqdG1wID0gTlVMTDsKKwlpbnQgb3V0bGVuLCB3cmxlbjsKKwlvdXRsZW4gPSBkb19pMmIoJnRtcCwgcGssIGlzcHViKTsKKwlpZiAob3V0bGVuIDwgMCkKKwkJcmV0dXJuIC0xOworCXdybGVuID0gQklPX3dyaXRlKG91dCwgdG1wLCBvdXRsZW4pOworCU9QRU5TU0xfZnJlZSh0bXApOworCWlmICh3cmxlbiA9PSBvdXRsZW4pCisJCXJldHVybiBvdXRsZW47CisJcmV0dXJuIC0xOworCX0KKworc3RhdGljIGludCBjaGVja19iaXRsZW5fZHNhKERTQSAqZHNhLCBpbnQgaXNwdWIsIHVuc2lnbmVkIGludCAqcG1hZ2ljKQorCXsKKwlpbnQgYml0bGVuOworCWJpdGxlbiA9IEJOX251bV9iaXRzKGRzYS0+cCk7CisJaWYgKChiaXRsZW4gJiA3KSB8fCAoQk5fbnVtX2JpdHMoZHNhLT5xKSAhPSAxNjApCisJCXx8IChCTl9udW1fYml0cyhkc2EtPmcpID4gYml0bGVuKSkKKwkJZ290byBiYWRrZXk7CisJaWYgKGlzcHViKQorCQl7CisJCWlmIChCTl9udW1fYml0cyhkc2EtPnB1Yl9rZXkpID4gYml0bGVuKQorCQkJZ290byBiYWRrZXk7CisJCSpwbWFnaWMgPSBNU19EU1MxTUFHSUM7CisJCX0KKwllbHNlCisJCXsKKwkJaWYgKEJOX251bV9iaXRzKGRzYS0+cHJpdl9rZXkpID4gMTYwKQorCQkJZ290byBiYWRrZXk7CisJCSpwbWFnaWMgPSBNU19EU1MyTUFHSUM7CisJCX0KKwkKKwlyZXR1cm4gYml0bGVuOworCWJhZGtleToKKwlQRU1lcnIoUEVNX0ZfQ0hFQ0tfQklUTEVOX0RTQSwgUEVNX1JfVU5TVVBQT1JURURfS0VZX0NPTVBPTkVOVFMpOworCXJldHVybiAwOworCX0KKworc3RhdGljIGludCBjaGVja19iaXRsZW5fcnNhKFJTQSAqcnNhLCBpbnQgaXNwdWIsIHVuc2lnbmVkIGludCAqcG1hZ2ljKQorCXsKKwlpbnQgbmJ5dGUsIGhuYnl0ZSwgYml0bGVuOworCWlmIChCTl9udW1fYml0cyhyc2EtPmUpID4gMzIpCisJCWdvdG8gYmFka2V5OworCWJpdGxlbiA9IEJOX251bV9iaXRzKHJzYS0+bik7CisJbmJ5dGUgPSBCTl9udW1fYnl0ZXMocnNhLT5uKTsKKwlobmJ5dGUgPSAoQk5fbnVtX2JpdHMocnNhLT5uKSArIDE1KSA+PiA0OworCWlmIChpc3B1YikKKwkJeworCQkqcG1hZ2ljID0gTVNfUlNBMU1BR0lDOworCQlyZXR1cm4gYml0bGVuOworCQl9CisJZWxzZQorCXsKKwkJKnBtYWdpYyA9IE1TX1JTQTJNQUdJQzsKKwkJLyogRm9yIHByaXZhdGUga2V5IGVhY2ggY29tcG9uZW50IG11c3QgZml0IHdpdGhpbiBuYnl0ZSBvcgorCQkgKiBobmJ5dGUuCisJCSAqLworCQlpZiAoQk5fbnVtX2J5dGVzKHJzYS0+ZCkgPiBuYnl0ZSkKKwkJCWdvdG8gYmFka2V5OworCQlpZiAoKEJOX251bV9ieXRlcyhyc2EtPmlxbXApID4gaG5ieXRlKQorCQkJfHwgKEJOX251bV9ieXRlcyhyc2EtPnApID4gaG5ieXRlKQorCQkJfHwgKEJOX251bV9ieXRlcyhyc2EtPnEpID4gaG5ieXRlKQorCQkJfHwgKEJOX251bV9ieXRlcyhyc2EtPmRtcDEpID4gaG5ieXRlKQorCQkJfHwgKEJOX251bV9ieXRlcyhyc2EtPmRtcTEpID4gaG5ieXRlKSkKKwkJCWdvdG8gYmFka2V5OworCX0KKwlyZXR1cm4gYml0bGVuOworCWJhZGtleToKKwlQRU1lcnIoUEVNX0ZfQ0hFQ0tfQklUTEVOX1JTQSwgUEVNX1JfVU5TVVBQT1JURURfS0VZX0NPTVBPTkVOVFMpOworCXJldHVybiAwOworCX0KKworCitzdGF0aWMgdm9pZCB3cml0ZV9yc2EodW5zaWduZWQgY2hhciAqKm91dCwgUlNBICpyc2EsIGludCBpc3B1YikKKwl7CisJaW50IG5ieXRlLCBobmJ5dGU7CisJbmJ5dGUgPSBCTl9udW1fYnl0ZXMocnNhLT5uKTsKKwlobmJ5dGUgPSAoQk5fbnVtX2JpdHMocnNhLT5uKSArIDE1KSA+PiA0OworCXdyaXRlX2xlYm4ob3V0LCByc2EtPmUsIDQpOworCXdyaXRlX2xlYm4ob3V0LCByc2EtPm4sIC0xKTsKKwlpZiAoaXNwdWIpCisJCXJldHVybjsKKwl3cml0ZV9sZWJuKG91dCwgcnNhLT5wLCBobmJ5dGUpOworCXdyaXRlX2xlYm4ob3V0LCByc2EtPnEsIGhuYnl0ZSk7CisJd3JpdGVfbGVibihvdXQsIHJzYS0+ZG1wMSwgaG5ieXRlKTsKKwl3cml0ZV9sZWJuKG91dCwgcnNhLT5kbXExLCBobmJ5dGUpOworCXdyaXRlX2xlYm4ob3V0LCByc2EtPmlxbXAsIGhuYnl0ZSk7CisJd3JpdGVfbGVibihvdXQsIHJzYS0+ZCwgbmJ5dGUpOworCX0KKworCQorc3RhdGljIHZvaWQgd3JpdGVfZHNhKHVuc2lnbmVkIGNoYXIgKipvdXQsIERTQSAqZHNhLCBpbnQgaXNwdWIpCisJeworCWludCBuYnl0ZTsKKwluYnl0ZSA9IEJOX251bV9ieXRlcyhkc2EtPnApOworCXdyaXRlX2xlYm4ob3V0LCBkc2EtPnAsIG5ieXRlKTsKKwl3cml0ZV9sZWJuKG91dCwgZHNhLT5xLCAyMCk7CisJd3JpdGVfbGVibihvdXQsIGRzYS0+ZywgbmJ5dGUpOworCWlmIChpc3B1YikKKwkJd3JpdGVfbGVibihvdXQsIGRzYS0+cHViX2tleSwgbmJ5dGUpOworCWVsc2UKKwkJd3JpdGVfbGVibihvdXQsIGRzYS0+cHJpdl9rZXksIDIwKTsKKwkvKiBTZXQgImludmFsaWQiIGZvciBzZWVkIHN0cnVjdHVyZSB2YWx1ZXMgKi8KKwltZW1zZXQoKm91dCwgMHhmZiwgMjQpOworCSpvdXQgKz0gMjQ7CisJcmV0dXJuOworCX0KKwkKKworaW50IGkyYl9Qcml2YXRlS2V5X2JpbyhCSU8gKm91dCwgRVZQX1BLRVkgKnBrKQorCXsKKwlyZXR1cm4gZG9faTJiX2JpbyhvdXQsIHBrLCAwKTsKKwl9CisKK2ludCBpMmJfUHVibGljS2V5X2JpbyhCSU8gKm91dCwgRVZQX1BLRVkgKnBrKQorCXsKKwlyZXR1cm4gZG9faTJiX2JpbyhvdXQsIHBrLCAxKTsKKwl9CisKK3N0YXRpYyBpbnQgZG9fUFZLX2hlYWRlcihjb25zdCB1bnNpZ25lZCBjaGFyICoqaW4sIHVuc2lnbmVkIGludCBsZW5ndGgsCisJCWludCBza2lwX21hZ2ljLAorCSAgICAgICAJdW5zaWduZWQgaW50ICpwc2FsdGxlbiwgdW5zaWduZWQgaW50ICpwa2V5bGVuKQorCQkKKwl7CisJY29uc3QgdW5zaWduZWQgY2hhciAqcCA9ICppbjsKKwl1bnNpZ25lZCBpbnQgcHZrX21hZ2ljLCBrZXl0eXBlLCBpc19lbmNyeXB0ZWQ7CisJaWYgKHNraXBfbWFnaWMpCisJCXsKKwkJaWYgKGxlbmd0aCA8IDIwKQorCQkJeworCQkJUEVNZXJyKFBFTV9GX0RPX1BWS19IRUFERVIsIFBFTV9SX1BWS19UT09fU0hPUlQpOworCQkJcmV0dXJuIDA7CisJCQl9CisJCWxlbmd0aCAtPSAyMDsKKwkJfQorCWVsc2UKKwkJeworCQlpZiAobGVuZ3RoIDwgMjQpCisJCQl7CisJCQlQRU1lcnIoUEVNX0ZfRE9fUFZLX0hFQURFUiwgUEVNX1JfUFZLX1RPT19TSE9SVCk7CisJCQlyZXR1cm4gMDsKKwkJCX0KKwkJbGVuZ3RoIC09IDI0OworCQlwdmtfbWFnaWMgPSByZWFkX2xlZHdvcmQoJnApOworCQlpZiAocHZrX21hZ2ljICE9IE1TX1BWS01BR0lDKQorCQkJeworCQkJUEVNZXJyKFBFTV9GX0RPX1BWS19IRUFERVIsIFBFTV9SX0JBRF9NQUdJQ19OVU1CRVIpOworCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKwkvKiBTa2lwIHJlc2VydmVkICovCisJcCArPSA0OworCWtleXR5cGUgPSByZWFkX2xlZHdvcmQoJnApOworCWlzX2VuY3J5cHRlZCA9IHJlYWRfbGVkd29yZCgmcCk7CisJKnBzYWx0bGVuID0gcmVhZF9sZWR3b3JkKCZwKTsKKwkqcGtleWxlbiA9IHJlYWRfbGVkd29yZCgmcCk7CisKKwlpZiAoaXNfZW5jcnlwdGVkICYmICEqcHNhbHRsZW4pCisJCXsKKwkJUEVNZXJyKFBFTV9GX0RPX1BWS19IRUFERVIsIFBFTV9SX0lOQ09OU0lTVEVOVF9IRUFERVIpOworCQlyZXR1cm4gMDsKKwkJfQorCisJKmluID0gcDsKKwlyZXR1cm4gMTsKKwl9CisKK3N0YXRpYyBpbnQgZGVyaXZlX3B2a19rZXkodW5zaWduZWQgY2hhciAqa2V5LCAKKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNhbHQsIHVuc2lnbmVkIGludCBzYWx0bGVuLAorCQkJY29uc3QgdW5zaWduZWQgY2hhciAqcGFzcywgaW50IHBhc3NsZW4pCisJeworCUVWUF9NRF9DVFggbWN0eDsKKwlFVlBfTURfQ1RYX2luaXQoJm1jdHgpOworCUVWUF9EaWdlc3RJbml0X2V4KCZtY3R4LCBFVlBfc2hhMSgpLCBOVUxMKTsKKwlFVlBfRGlnZXN0VXBkYXRlKCZtY3R4LCBzYWx0LCBzYWx0bGVuKTsKKwlFVlBfRGlnZXN0VXBkYXRlKCZtY3R4LCBwYXNzLCBwYXNzbGVuKTsKKwlFVlBfRGlnZXN0RmluYWxfZXgoJm1jdHgsIGtleSwgTlVMTCk7CisJRVZQX01EX0NUWF9jbGVhbnVwKCZtY3R4KTsKKwlyZXR1cm4gMTsKKwl9CisJCisKK3N0YXRpYyBFVlBfUEtFWSAqZG9fUFZLX2JvZHkoY29uc3QgdW5zaWduZWQgY2hhciAqKmluLAorCQl1bnNpZ25lZCBpbnQgc2FsdGxlbiwgdW5zaWduZWQgaW50IGtleWxlbiwKKwkJcGVtX3Bhc3N3b3JkX2NiICpjYiwgdm9pZCAqdSkKKwl7CisJRVZQX1BLRVkgKnJldCA9IE5VTEw7CisJY29uc3QgdW5zaWduZWQgY2hhciAqcCA9ICppbjsKKwl1bnNpZ25lZCBpbnQgbWFnaWM7CisJdW5zaWduZWQgY2hhciAqZW5jdG1wID0gTlVMTCwgKnE7CisJaWYgKHNhbHRsZW4pCisJCXsKKwkJY2hhciBwc2J1ZltQRU1fQlVGU0laRV07CisJCXVuc2lnbmVkIGNoYXIga2V5YnVmWzIwXTsKKwkJRVZQX0NJUEhFUl9DVFggY2N0eDsKKwkJaW50IGVuY3RtcGxlbiwgaW5sZW47CisJCWlmIChjYikKKwkJCWlubGVuPWNiKHBzYnVmLFBFTV9CVUZTSVpFLDAsdSk7CisJCWVsc2UKKwkJCWlubGVuPVBFTV9kZWZfY2FsbGJhY2socHNidWYsUEVNX0JVRlNJWkUsMCx1KTsKKwkJaWYgKGlubGVuIDw9IDApCisJCQl7CisJCQlQRU1lcnIoUEVNX0ZfRE9fUFZLX0JPRFksUEVNX1JfQkFEX1BBU1NXT1JEX1JFQUQpOworCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCWVuY3RtcCA9IE9QRU5TU0xfbWFsbG9jKGtleWxlbiArIDgpOworCQlpZiAoIWVuY3RtcCkKKwkJCXsKKwkJCVBFTWVycihQRU1fRl9ET19QVktfQk9EWSwgRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOworCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCWlmICghZGVyaXZlX3B2a19rZXkoa2V5YnVmLCBwLCBzYWx0bGVuLAorCQkJICAgICh1bnNpZ25lZCBjaGFyICopcHNidWYsIGlubGVuKSkKKwkJCXJldHVybiBOVUxMOworCQlwICs9IHNhbHRsZW47CisJCS8qIENvcHkgQkxPQkhFQURFUiBhY3Jvc3MsIGRlY3J5cHQgcmVzdCAqLworCQltZW1jcHkoZW5jdG1wLCBwLCA4KTsKKwkJcCArPSA4OworCQlpbmxlbiA9IGtleWxlbiAtIDg7CisJCXEgPSBlbmN0bXAgKyA4OworCQlFVlBfQ0lQSEVSX0NUWF9pbml0KCZjY3R4KTsKKwkJRVZQX0RlY3J5cHRJbml0X2V4KCZjY3R4LCBFVlBfcmM0KCksIE5VTEwsIGtleWJ1ZiwgTlVMTCk7CisJCUVWUF9EZWNyeXB0VXBkYXRlKCZjY3R4LCBxLCAmZW5jdG1wbGVuLCBwLCBpbmxlbik7CisJCUVWUF9EZWNyeXB0RmluYWxfZXgoJmNjdHgsIHEgKyBlbmN0bXBsZW4sICZlbmN0bXBsZW4pOworCQltYWdpYyA9IHJlYWRfbGVkd29yZCgoY29uc3QgdW5zaWduZWQgY2hhciAqKikmcSk7CisJCWlmIChtYWdpYyAhPSBNU19SU0EyTUFHSUMgJiYgbWFnaWMgIT0gTVNfRFNTMk1BR0lDKQorCQkJeworCQkJcSA9IGVuY3RtcCArIDg7CisJCQltZW1zZXQoa2V5YnVmICsgNSwgMCwgMTEpOworCQkJRVZQX0RlY3J5cHRJbml0X2V4KCZjY3R4LCBFVlBfcmM0KCksIE5VTEwsIGtleWJ1ZiwKKwkJCQkJCQkJTlVMTCk7CisJCQlPUEVOU1NMX2NsZWFuc2Uoa2V5YnVmLCAyMCk7CisJCQlFVlBfRGVjcnlwdFVwZGF0ZSgmY2N0eCwgcSwgJmVuY3RtcGxlbiwgcCwgaW5sZW4pOworCQkJRVZQX0RlY3J5cHRGaW5hbF9leCgmY2N0eCwgcSArIGVuY3RtcGxlbiwKKwkJCQkJCQkJJmVuY3RtcGxlbik7CisJCQltYWdpYyA9IHJlYWRfbGVkd29yZCgoY29uc3QgdW5zaWduZWQgY2hhciAqKikmcSk7CisJCQlpZiAobWFnaWMgIT0gTVNfUlNBMk1BR0lDICYmIG1hZ2ljICE9IE1TX0RTUzJNQUdJQykKKwkJCQl7CisJCQkJRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY2N0eCk7CisJCQkJUEVNZXJyKFBFTV9GX0RPX1BWS19CT0RZLCBQRU1fUl9CQURfREVDUllQVCk7CisJCQkJZ290byBlcnI7CisJCQkJfQorCQkJfQorCQllbHNlCisJCQlPUEVOU1NMX2NsZWFuc2Uoa2V5YnVmLCAyMCk7CisJCUVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmNjdHgpOworCQlwID0gZW5jdG1wOworCQl9CisKKwlyZXQgPSBiMmlfUHJpdmF0ZUtleSgmcCwga2V5bGVuKTsKKwllcnI6CisJaWYgKGVuY3RtcCAmJiBzYWx0bGVuKQorCQlPUEVOU1NMX2ZyZWUoZW5jdG1wKTsKKwlyZXR1cm4gcmV0OworCX0KKworCitFVlBfUEtFWSAqYjJpX1BWS19iaW8oQklPICppbiwgcGVtX3Bhc3N3b3JkX2NiICpjYiwgdm9pZCAqdSkKKwl7CisJdW5zaWduZWQgY2hhciBwdmtfaGRyWzI0XSwgKmJ1ZiA9IE5VTEw7CisJY29uc3QgdW5zaWduZWQgY2hhciAqcDsKKwlpbnQgYnVmbGVuOworCUVWUF9QS0VZICpyZXQgPSBOVUxMOworCXVuc2lnbmVkIGludCBzYWx0bGVuLCBrZXlsZW47CisJaWYgKEJJT19yZWFkKGluLCBwdmtfaGRyLCAyNCkgIT0gMjQpCisJCXsKKwkJUEVNZXJyKFBFTV9GX0IySV9QVktfQklPLCBQRU1fUl9QVktfREFUQV9UT09fU0hPUlQpOworCQlyZXR1cm4gTlVMTDsKKwkJfQorCXAgPSBwdmtfaGRyOworCisJaWYgKCFkb19QVktfaGVhZGVyKCZwLCAyNCwgMCwgJnNhbHRsZW4sICZrZXlsZW4pKQorCQlyZXR1cm4gMDsKKwlidWZsZW4gPSAoaW50KSBrZXlsZW4gKyBzYWx0bGVuOworCWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKGJ1Zmxlbik7CisJaWYgKCFidWYpCisJCXsKKwkJUEVNZXJyKFBFTV9GX0IySV9QVktfQklPLCBFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CisJCXJldHVybiAwOworCQl9CisJcCA9IGJ1ZjsKKwlpZiAoQklPX3JlYWQoaW4sIGJ1ZiwgYnVmbGVuKSAhPSBidWZsZW4pCisJCXsKKwkJUEVNZXJyKFBFTV9GX0IySV9QVktfQklPLCBQRU1fUl9QVktfREFUQV9UT09fU0hPUlQpOworCQlnb3RvIGVycjsKKwkJfQorCXJldCA9IGRvX1BWS19ib2R5KCZwLCBzYWx0bGVuLCBrZXlsZW4sIGNiLCB1KTsKKworCWVycjoKKwlpZiAoYnVmKQorCQl7CisJCU9QRU5TU0xfY2xlYW5zZShidWYsIGJ1Zmxlbik7CisJCU9QRU5TU0xfZnJlZShidWYpOworCQl9CisJcmV0dXJuIHJldDsKKwl9CisKKwkKKwkKK3N0YXRpYyBpbnQgaTJiX1BWSyh1bnNpZ25lZCBjaGFyICoqb3V0LCBFVlBfUEtFWSpwaywgaW50IGVuY2xldmVsLAorCQlwZW1fcGFzc3dvcmRfY2IgKmNiLCB2b2lkICp1KQorCXsKKwlpbnQgb3V0bGVuID0gMjQsIG5vaW5jLCBwa2xlbjsKKwl1bnNpZ25lZCBjaGFyICpwLCAqc2FsdCA9IE5VTEw7CisJaWYgKGVuY2xldmVsKQorCQlvdXRsZW4gKz0gUFZLX1NBTFRMRU47CisJcGtsZW4gPSBkb19pMmIoTlVMTCwgcGssIDApOworCWlmIChwa2xlbiA8IDApCisJCXJldHVybiAtMTsKKwlvdXRsZW4gKz0gcGtsZW47CisJaWYgKCFvdXQpCisJCXJldHVybiBvdXRsZW47CisJaWYgKCpvdXQpCisJCXsKKwkJcCA9ICpvdXQ7CisJCW5vaW5jID0gMDsKKwkJfQorCWVsc2UKKwkJeworCQlwID0gT1BFTlNTTF9tYWxsb2Mob3V0bGVuKTsKKwkJaWYgKCFwKQorCQkJeworCQkJUEVNZXJyKFBFTV9GX0kyQl9QVkssRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOworCQkJcmV0dXJuIC0xOworCQkJfQorCQkqb3V0ID0gcDsKKwkJbm9pbmMgPSAxOworCQl9CisKKwl3cml0ZV9sZWR3b3JkKCZwLCBNU19QVktNQUdJQyk7CisJd3JpdGVfbGVkd29yZCgmcCwgMCk7CisJaWYgKHBrLT50eXBlID09IEVWUF9QS0VZX0RTQSkKKwkJd3JpdGVfbGVkd29yZCgmcCwgTVNfS0VZVFlQRV9TSUdOKTsKKwllbHNlCisJCXdyaXRlX2xlZHdvcmQoJnAsIE1TX0tFWVRZUEVfS0VZWCk7CisJd3JpdGVfbGVkd29yZCgmcCwgZW5jbGV2ZWwgPyAxIDogMCk7CisJd3JpdGVfbGVkd29yZCgmcCwgZW5jbGV2ZWwgPyBQVktfU0FMVExFTjogMCk7CisJd3JpdGVfbGVkd29yZCgmcCwgcGtsZW4pOworCWlmIChlbmNsZXZlbCkKKwkJeworCQlpZiAoUkFORF9ieXRlcyhwLCBQVktfU0FMVExFTikgPD0gMCkKKwkJCWdvdG8gZXJyb3I7CisJCXNhbHQgPSBwOworCQlwICs9IFBWS19TQUxUTEVOOworCQl9CisJZG9faTJiKCZwLCBwaywgMCk7CisJaWYgKGVuY2xldmVsID09IDApCisJCXJldHVybiBvdXRsZW47CisJZWxzZQorCQl7CisJCWNoYXIgcHNidWZbUEVNX0JVRlNJWkVdOworCQl1bnNpZ25lZCBjaGFyIGtleWJ1ZlsyMF07CisJCUVWUF9DSVBIRVJfQ1RYIGNjdHg7CisJCWludCBlbmN0bXBsZW4sIGlubGVuOworCQlpZiAoY2IpCisJCQlpbmxlbj1jYihwc2J1ZixQRU1fQlVGU0laRSwxLHUpOworCQllbHNlCisJCQlpbmxlbj1QRU1fZGVmX2NhbGxiYWNrKHBzYnVmLFBFTV9CVUZTSVpFLDEsdSk7CisJCWlmIChpbmxlbiA8PSAwKQorCQkJeworCQkJUEVNZXJyKFBFTV9GX0kyQl9QVkssUEVNX1JfQkFEX1BBU1NXT1JEX1JFQUQpOworCQkJZ290byBlcnJvcjsKKwkJCX0KKwkJaWYgKCFkZXJpdmVfcHZrX2tleShrZXlidWYsIHNhbHQsIFBWS19TQUxUTEVOLAorCQkJICAgICh1bnNpZ25lZCBjaGFyICopcHNidWYsIGlubGVuKSkKKwkJCWdvdG8gZXJyb3I7CisJCWlmIChlbmNsZXZlbCA9PSAxKQorCQkJbWVtc2V0KGtleWJ1ZiArIDUsIDAsIDExKTsKKwkJcCA9IHNhbHQgKyBQVktfU0FMVExFTiArIDg7CisJCUVWUF9DSVBIRVJfQ1RYX2luaXQoJmNjdHgpOworCQlFVlBfRW5jcnlwdEluaXRfZXgoJmNjdHgsIEVWUF9yYzQoKSwgTlVMTCwga2V5YnVmLCBOVUxMKTsKKwkJT1BFTlNTTF9jbGVhbnNlKGtleWJ1ZiwgMjApOworCQlFVlBfRGVjcnlwdFVwZGF0ZSgmY2N0eCwgcCwgJmVuY3RtcGxlbiwgcCwgcGtsZW4gLSA4KTsKKwkJRVZQX0RlY3J5cHRGaW5hbF9leCgmY2N0eCwgcCArIGVuY3RtcGxlbiwgJmVuY3RtcGxlbik7CisJCUVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmNjdHgpOworCQl9CisJcmV0dXJuIG91dGxlbjsKKworCWVycm9yOgorCXJldHVybiAtMTsKKwl9CisKK2ludCBpMmJfUFZLX2JpbyhCSU8gKm91dCwgRVZQX1BLRVkgKnBrLCBpbnQgZW5jbGV2ZWwsCisJCXBlbV9wYXNzd29yZF9jYiAqY2IsIHZvaWQgKnUpCisJeworCXVuc2lnbmVkIGNoYXIgKnRtcCA9IE5VTEw7CisJaW50IG91dGxlbiwgd3JsZW47CisJb3V0bGVuID0gaTJiX1BWSygmdG1wLCBwaywgZW5jbGV2ZWwsIGNiLCB1KTsKKwlpZiAob3V0bGVuIDwgMCkKKwkJcmV0dXJuIC0xOworCXdybGVuID0gQklPX3dyaXRlKG91dCwgdG1wLCBvdXRsZW4pOworCU9QRU5TU0xfZnJlZSh0bXApOworCWlmICh3cmxlbiA9PSBvdXRsZW4pCisJCXsKKwkJUEVNZXJyKFBFTV9GX0kyQl9QVktfQklPLCBQRU1fUl9CSU9fV1JJVEVfRkFJTFVSRSk7CisJCXJldHVybiBvdXRsZW47CisJCX0KKwlyZXR1cm4gLTE7CisJfQorI2VuZGlmCmRpZmYgLS1naXQgYS9jcnlwdG8vcGVybGFzbS9wcGMteGxhdGUucGwgYi9jcnlwdG8vcGVybGFzbS9wcGMteGxhdGUucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDU3OTY3MQotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9wZXJsYXNtL3BwYy14bGF0ZS5wbApAQCAtMCwwICsxLDE1MiBAQAorIyEvdXNyL2Jpbi9lbnYgcGVybAorCisjIFBvd2VyUEMgYXNzZW1ibGVyIGRpc3RpbGxlciBieSA8YXBwcm8+LgorCitteSAkZmxhdm91ciA9IHNoaWZ0OworbXkgJG91dHB1dCA9IHNoaWZ0Oworb3BlbiBTVERPVVQsIj4kb3V0cHV0IiB8fCBkaWUgImNhbid0IG9wZW4gJG91dHB1dDogJCEiOworCitteSAlR0xPQkFMUzsKK215ICRkb3RpbmxvY2FsbGFiZWxzPSgkZmxhdm91cj1+L2xpbnV4Lyk/MTowOworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGRpcmVjdGl2ZXMgd2hpY2ggbmVlZCBzcGVjaWFsIHRyZWF0bWVudCBvbiBkaWZmZXJlbnQgcGxhdGZvcm1zCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitteSAkZ2xvYmwgPSBzdWIgeworICAgIG15ICRqdW5rID0gc2hpZnQ7CisgICAgbXkgJG5hbWUgPSBzaGlmdDsKKyAgICBteSAkZ2xvYmFsID0gXCRHTE9CQUxTeyRuYW1lfTsKKyAgICBteSAkcmV0OworCisgICAgJG5hbWUgPX4gc3xeW1wuXF9dfHw7CisgCisgICAgU1dJVENIOiBmb3IgKCRmbGF2b3VyKSB7CisJL2FpeC8JCSYmIGRvIHsgJG5hbWUgPSAiLiRuYW1lIjsKKwkJCQlsYXN0OworCQkJICAgICAgfTsKKwkvb3N4LwkJJiYgZG8geyAkbmFtZSA9ICJfJG5hbWUiOworCQkJCWxhc3Q7CisJCQkgICAgICB9OworCS9saW51eC4qMzIvCSYmIGRvIHsJJHJldCAuPSAiLmdsb2JsCSRuYW1lXG4iOworCQkJCSRyZXQgLj0gIi50eXBlCSRuYW1lLFxAZnVuY3Rpb24iOworCQkJCWxhc3Q7CisJCQkgICAgICB9OworCS9saW51eC4qNjQvCSYmIGRvIHsJJHJldCAuPSAiLmdsb2JsCS4kbmFtZVxuIjsKKwkJCQkkcmV0IC49ICIudHlwZQkuJG5hbWUsXEBmdW5jdGlvblxuIjsKKwkJCQkkcmV0IC49ICIuc2VjdGlvbglcIi5vcGRcIixcImF3XCJcbiI7CisJCQkJJHJldCAuPSAiLmdsb2JsCSRuYW1lXG4iOworCQkJCSRyZXQgLj0gIi5hbGlnbgkzXG4iOworCQkJCSRyZXQgLj0gIiRuYW1lOlxuIjsKKwkJCQkkcmV0IC49ICIucXVhZAkuJG5hbWUsLlRPQy5cQHRvY2Jhc2UsMFxuIjsKKwkJCQkkcmV0IC49ICIuc2l6ZQkkbmFtZSwyNFxuIjsKKwkJCQkkcmV0IC49ICIucHJldmlvdXNcbiI7CisKKwkJCQkkbmFtZSA9ICIuJG5hbWUiOworCQkJCWxhc3Q7CisJCQkgICAgICB9OworICAgIH0KKworICAgICRyZXQgPSAiLmdsb2JsCSRuYW1lIiBpZiAoISRyZXQpOworICAgICQkZ2xvYmFsID0gJG5hbWU7CisgICAgJHJldDsKK307CitteSAkdGV4dCA9IHN1YiB7CisgICAgKCRmbGF2b3VyID1+IC9haXgvKSA/ICIuY3NlY3QiIDogIi50ZXh0IjsKK307CitteSAkbWFjaGluZSA9IHN1YiB7CisgICAgbXkgJGp1bmsgPSBzaGlmdDsKKyAgICBteSAkYXJjaCA9IHNoaWZ0OworICAgIGlmICgkZmxhdm91ciA9fiAvb3N4LykKKyAgICB7CSRhcmNoID1+IHMvXCIvL2c7CisJJGFyY2ggPSAoJGZsYXZvdXI9fi82NC8pID8gInBwYzk3MC02NCIgOiAicHBjOTcwIiBpZiAoJGFyY2ggZXEgImFueSIpOworICAgIH0KKyAgICAiLm1hY2hpbmUJJGFyY2giOworfTsKK215ICRhc2NpeiA9IHN1YiB7CisgICAgc2hpZnQ7CisgICAgbXkgJGxpbmUgPSBqb2luKCIsIixAXyk7CisgICAgaWYgKCRsaW5lID1+IC9eIiguKikiJC8pCisgICAgewkiLmJ5dGUJIiAuIGpvaW4oIiwiLHVucGFjaygiQyoiLCQxKSwwKSAuICJcbi5hbGlnbgkyIjsJfQorICAgIGVsc2UKKyAgICB7CSIiOwl9Cit9OworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHNpbXBsaWZpZWQgbW5lbW9uaWNzIG5vdCBoYW5kbGVkIGJ5IGF0IGxlYXN0IG9uZSBhc3NlbWJsZXIKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK215ICRjbXBsdyA9IHN1YiB7CisgICAgbXkgJGYgPSBzaGlmdDsKKyAgICBteSAkY3IgPSAwOyAkY3IgPSBzaGlmdCBpZiAoJCNfPjEpOworICAgICMgU29tZSBvdXQtb2YtZGF0ZSAzMi1iaXQgR05VIGFzc2VtYmxlciBqdXN0IGNhbid0IGhhbmRsZSBjbXBsdy4uLgorICAgICgkZmxhdm91ciA9fiAvbGludXguKjMyLykgPworCSIJLmxvbmcJIi5zcHJpbnRmICIweCV4IiwzMTw8MjZ8JGNyPDwyM3wkX1swXTw8MTZ8JF9bMV08PDExfDY0IDoKKwkiCWNtcGx3CSIuam9pbignLCcsJGNyLEBfKTsKK307CitteSAkYmRueiA9IHN1YiB7CisgICAgbXkgJGYgPSBzaGlmdDsKKyAgICBteSAkYm8gPSAkZj1+L1tcK1wtXS8gPyAxNis5IDogMTY7CSMgb3B0aW9uYWwgInRvIGJlIHRha2VuIiBoaW50CisgICAgIgliYwkkYm8sMCwiLnNoaWZ0OworfSBpZiAoJGZsYXZvdXIhfi9saW51eC8pOworbXkgJGJsdGxyID0gc3ViIHsKKyAgICBteSAkZiA9IHNoaWZ0OworICAgIG15ICRibyA9ICRmPX4vXC0vID8gMTIrMiA6IDEyOwkjIG9wdGlvbmFsICJub3QgdG8gYmUgdGFrZW4iIGhpbnQKKyAgICAoJGZsYXZvdXIgPX4gL2xpbnV4LykgPwkJIyBHTlUgYXMgZG9lc24ndCBhbGxvdyBtb3N0IHJlY2VudCBoaW50cworCSIJLmxvbmcJIi5zcHJpbnRmICIweCV4IiwxOTw8MjZ8JGJvPDwyMXwxNjw8MSA6CisJIgliY2xyCSRibywwIjsKK307CitteSAkYm5lbHIgPSBzdWIgeworICAgIG15ICRmID0gc2hpZnQ7CisgICAgbXkgJGJvID0gJGY9fi9cLS8gPyA0KzIgOiA0OwkjIG9wdGlvbmFsICJub3QgdG8gYmUgdGFrZW4iIGhpbnQKKyAgICAoJGZsYXZvdXIgPX4gL2xpbnV4LykgPwkJIyBHTlUgYXMgZG9lc24ndCBhbGxvdyBtb3N0IHJlY2VudCBoaW50cworCSIJLmxvbmcJIi5zcHJpbnRmICIweCV4IiwxOTw8MjZ8JGJvPDwyMXwyPDwxNnwxNjw8MSA6CisJIgliY2xyCSRibywyIjsKK307CitteSAkYmVxbHIgPSBzdWIgeworICAgIG15ICRmID0gc2hpZnQ7CisgICAgbXkgJGJvID0gJGY9fi8tLyA/IDEyKzIgOiAxMjsJIyBvcHRpb25hbCAibm90IHRvIGJlIHRha2VuIiBoaW50CisgICAgKCRmbGF2b3VyID1+IC9saW51eC8pID8JCSMgR05VIGFzIGRvZXNuJ3QgYWxsb3cgbW9zdCByZWNlbnQgaGludHMKKwkiCS5sb25nCSIuc3ByaW50ZiAiMHglWCIsMTk8PDI2fCRibzw8MjF8Mjw8MTZ8MTY8PDEgOgorCSIJYmNscgkkYm8sMiI7Cit9OworIyBHTlUgYXNzZW1ibGVyIGNhbid0IGhhbmRsZSBleHRyZGkgckEsclMsMTYsNDgsIG9yIHdoZW4gc3VtIG9mIGxhc3QgdHdvCisjIGFyZ3VtZW50cyBpcyA2NCwgd2l0aCAib3BlcmFuZCBvdXQgb2YgcmFuZ2UiIGVycm9yLgorbXkgJGV4dHJkaSA9IHN1YiB7CisgICAgbXkgKCRmLCRyYSwkcnMsJG4sJGIpID0gQF87CisgICAgJGIgPSAoJGIrJG4pJjYzOyAkbiA9IDY0LSRuOworICAgICIJcmxkaWNsCSRyYSwkcnMsJGIsJG4iOworfTsKKword2hpbGUoJGxpbmU9PD4pIHsKKworICAgICRsaW5lID1+IHN8WyMhO10uKiR8fDsJIyBnZXQgcmlkIG9mIGFzbS1zdHlsZSBjb21tZW50cy4uLgorICAgICRsaW5lID1+IHN8L1wqLipcKi98fDsJIyAuLi4gYW5kIEMtc3R5bGUgY29tbWVudHMuLi4KKyAgICAkbGluZSA9fiBzfF5ccyt8fDsJCSMgLi4uIGFuZCBza2lwIHdoaXRlIHNwYWNlcyBpbiBiZWdpbm5pbmcuLi4KKyAgICAkbGluZSA9fiBzfFxzKyR8fDsJCSMgLi4uIGFuZCBhdCB0aGUgZW5kCisKKyAgICB7CisJJGxpbmUgPX4gc3xcYlwuTChcdyspfEwkMXxnOwkjIGNvbW1vbiBkZW5vbWluYXRvciBmb3IgTG9jYWxsYWJlbAorCSRsaW5lID1+IHN8XGJMKFx3Kyl8XC5MJDF8ZwlpZiAoJGRvdGlubG9jYWxsYWJlbHMpOworICAgIH0KKworICAgIHsKKwkkbGluZSA9fiBzfCheW1wuXHddKylcOlxzKnx8OworCW15ICRsYWJlbCA9ICQxOworCXByaW50ZiAiJXM6IiwoJEdMT0JBTFN7JGxhYmVsfSBvciAkbGFiZWwpIGlmICgkbGFiZWwpOworICAgIH0KKworICAgIHsKKwkkbGluZSA9fiBzfF5ccyooXC4/KShcdyspKFtcLlwrXC1dPylccyp8fDsKKwlteSAkYyA9ICQxOyAkYyA9ICJcdCIgaWYgKCRjIGVxICIiKTsKKwlteSAkbW5lbW9uaWMgPSAkMjsKKwlteSAkZiA9ICQzOworCW15ICRvcGNvZGUgPSBldmFsKCJcJCRtbmVtb25pYyIpOworCSRsaW5lID1+IHN8XGJjP1tyZl0oWzAtOV0rKVxifCQxfGcgaWYgKCRjIG5lICIuIiBhbmQgJGZsYXZvdXIgIX4gL29zeC8pOworCWlmIChyZWYoJG9wY29kZSkgZXEgJ0NPREUnKSB7ICRsaW5lID0gJiRvcGNvZGUoJGYsc3BsaXQoJywnLCRsaW5lKSk7IH0KKwllbHNpZiAoJG1uZW1vbmljKSAgICAgICAgICAgeyAkbGluZSA9ICRjLiRtbmVtb25pYy4kZi4iXHQiLiRsaW5lOyB9CisgICAgfQorCisgICAgcHJpbnQgJGxpbmUgaWYgKCRsaW5lKTsKKyAgICBwcmludCAiXG4iOworfQorCitjbG9zZSBTVERPVVQ7CmRpZmYgLS1naXQgYS9jcnlwdG8vcGVybGFzbS94ODZfNjQteGxhdGUucGwgYi9jcnlwdG8vcGVybGFzbS94ODZfNjQteGxhdGUucGwKaW5kZXggZmUzNDhiOS4uZDg5NzY1ZCAxMDA3NTUKLS0tIGEvY3J5cHRvL3Blcmxhc20veDg2XzY0LXhsYXRlLnBsCisrKyBiL2NyeXB0by9wZXJsYXNtL3g4Nl82NC14bGF0ZS5wbApAQCAtMSw2ICsxLDYgQEAKICMhL3Vzci9iaW4vZW52IHBlcmwKIAotIyBBc2NldGljIHg4Nl82NCBBVCZUIHRvIE1BU00gYXNzZW1ibGVyIHRyYW5zbGF0b3IgYnkgPGFwcHJvPi4KKyMgQXNjZXRpYyB4ODZfNjQgQVQmVCB0byBNQVNNL05BU00gYXNzZW1ibGVyIHRyYW5zbGF0b3IgYnkgPGFwcHJvPi4KICMKICMgV2h5IEFUJlQgdG8gTUFTTSBhbmQgbm90IHZpY2UgdmVyc2E/IFNldmVyYWwgcmVhc29ucy4gQmVjYXVzZSBBVCZUCiAjIGZvcm1hdCBpcyB3YXkgZWFzaWVyIHRvIHBhcnNlLiBCZWNhdXNlIGl0J3Mgc2ltcGxlciB0byAiZ2VhciIgZnJvbQpAQCAtMjAsMTIgKzIwLDExIEBACiAjIEN1cnJlbnRseSByZWNvZ25pemVkIGxpbWl0YXRpb25zOgogIwogIyAtIGNhbid0IHVzZSBtdWx0aXBsZSBvcHMgcGVyIGxpbmU7Ci0jIC0gaW5kaXJlY3QgY2FsbHMgYW5kIGp1bXBzIGFyZSBub3Qgc3VwcG9ydGVkOwogIwogIyBEdWFsLUFCSSBzdHlsaW5nIHJ1bGVzLgogIwotIyAxLiBBZGhlcmUgdG8gVW5peCByZWdpc3RlciBhbmQgc3RhY2sgbGF5b3V0IFtzZWUgdGhlIGVuZCBmb3IKLSMgICAgZXhwbGFuYXRpb25dLgorIyAxLiBBZGhlcmUgdG8gVW5peCByZWdpc3RlciBhbmQgc3RhY2sgbGF5b3V0IFtzZWUgY3Jvc3MtcmVmZXJlbmNlCisjICAgIEFCSSAiY2FyZCIgYXQgdGhlIGVuZCBmb3IgZXhwbGFuYXRpb25dLgogIyAyLiBGb3JnZXQgYWJvdXQgInJlZCB6b25lLCIgc3RpY2sgdG8gbW9yZSB0cmFkaXRpb25hbCBibGVuZGVkCiAjICAgIHN0YWNrIGZyYW1lIGFsbG9jYXRpb24uIElmIHZvbGF0aWxlIHN0b3JhZ2UgaXMgYWN0dWFsbHkgcmVxdWlyZWQKICMgICAgdGhhdCBpcy4gSWYgbm90LCBqdXN0IGxlYXZlIHRoZSBzdGFjayBhcyBpcy4KQEAgLTQyLDIxICs0MSwyNCBAQAogIyA2LiBEb24ndCB1c2UgW29yIGhhbmQtY29kZSB3aXRoIC5ieXRlXSAicmVwIHJldC4iICJyZXQiIG1uZW1vbmljIGlzCiAjICAgIHJlcXVpcmVkIHRvIGlkZW50aWZ5IHRoZSBzcG90cywgd2hlcmUgdG8gaW5qZWN0IFdpbjY0IGVwaWxvZ3VlIQogIyAgICBCdXQgb24gdGhlIHByb3MsIGl0J3MgdGhlbiBwcmVmaXhlZCB3aXRoIHJlcCBhdXRvbWF0aWNhbGx5Oi0pCi0jIDcuIER1ZSB0byBNQVNNIGxpbWl0YXRpb25zIFthbmQgY2VydGFpbiBnZW5lcmFsIGNvdW50ZXItaW50dWl0aXZpdHkKLSMgICAgb2YgaXAtcmVsYXRpdmUgYWRkcmVzc2luZ10gZ2VuZXJhdGlvbiBvZiBwb3NpdGlvbi1pbmRlcGVuZGVudAotIyAgICBjb2RlIGlzIGFzc2lzdGVkIGJ5IHN5bnRoZXRpYyBkaXJlY3RpdmUsIC5waWNtZXVwLCB3aGljaCBwdXRzCi0jICAgIGFkZHJlc3Mgb2YgdGhlICpuZXh0KiBpbnN0cnVjdGlvbiBpbnRvIHRhcmdldCByZWdpc3Rlci4KKyMgNy4gU3RpY2sgdG8gZXhwbGljaXQgaXAtcmVsYXRpdmUgYWRkcmVzc2luZy4gSWYgeW91IGhhdmUgdG8gdXNlCisjICAgIEdPVFBDUkVMIGFkZHJlc3NpbmcsIHN0aWNrIHRvIG1vdiBzeW1ib2xAR09UUENSRUwoJXJpcCksJXI/Py4KKyMgICAgQm90aCBhcmUgcmVjb2duaXplZCBhbmQgdHJhbnNsYXRlZCB0byBwcm9wZXIgV2luNjQgYWRkcmVzc2luZworIyAgICBtb2Rlcy4gVG8gc3VwcG9ydCBsZWdhY3kgY29kZSBhIHN5bnRoZXRpYyBkaXJlY3RpdmUsIC5waWNtZXVwLAorIyAgICBpcyBpbXBsZW1lbnRlZC4gSXQgcHV0cyBhZGRyZXNzIG9mIHRoZSAqbmV4dCogaW5zdHJ1Y3Rpb24gaW50bworIyAgICB0YXJnZXQgcmVnaXN0ZXIsIGUuZy46CiAjCi0jICAgIEV4YW1wbGUgMToKICMJCS5waWNtZXVwCSVyYXgKICMJCWxlYQkJLkxhYmVsLS4oJXJheCksJXJheAotIyAgICBFeGFtcGxlIDI6Ci0jCQkucGljbWV1cAklcmN4Ci0jCS5McGljX3BvaW50OgotIwkJLi4uCi0jCQlsZWEJCS5MYWJlbC0uTHBpY19wb2ludCglcmN4KSwlcmJwCi0KLW15ICRvdXRwdXQgPSBzaGlmdDsKKyMKKyMgOC4gSW4gb3JkZXIgdG8gcHJvdmlkZSBmb3Igc3RydWN0dXJlZCBleGNlcHRpb24gaGFuZGxpbmcgdW5pZmllZAorIyAgICBXaW42NCBwcm9sb2d1ZSBjb3BpZXMgJXJzcCB2YWx1ZSB0byAlcmF4LiBGb3IgZnVydGhlciBkZXRhaWxzCisjICAgIHNlZSBTRUggcGFyYWdyYXBoIGF0IHRoZSBlbmQuCisjIDkuIC5pbml0IHNlZ21lbnQgaXMgYWxsb3dlZCB0byBjb250YWluIGNhbGxzIHRvIGZ1bmN0aW9ucyBvbmx5LgorDAorbXkgJGZsYXZvdXIgPSBzaGlmdDsKK215ICRvdXRwdXQgID0gc2hpZnQ7CitpZiAoJGZsYXZvdXIgPX4gL1wuLykgeyAkb3V0cHV0ID0gJGZsYXZvdXI7IHVuZGVmICRmbGF2b3VyOyB9CiAKIHsgbXkgKCRzdGRkZXYsJHN0ZGlubyxAanVuayk9c3RhdChTVERPVVQpOwogICBteSAoJG91dGRldiwkb3V0aW5vLEBqdW5rKT1zdGF0KCRvdXRwdXQpOwpAQCAtNjUsMTMgKzY3LDM3IEBACiAJaWYgKCRzdGRkZXYhPSRvdXRkZXYgfHwgJHN0ZGlubyE9JG91dGlubyk7CiB9CiAKK215ICRnYXM9MTsJJGdhcz0wIGlmICgkb3V0cHV0ID1+IC9cLmFzbSQvKTsKK215ICRlbGY9MTsJJGVsZj0wIGlmICghJGdhcyk7CitteSAkd2luNjQ9MDsKK215ICRwcmVmaXg9IiI7CitteSAkZGVjb3I9Ii5MIjsKKwogbXkgJG1hc21yZWY9OCArIDUwNzI3KjIqKi0zMjsJIyA4LjAwLjUwNzI3IHNoaXBwZWQgd2l0aCBWUzIwMDUKLW15ICRtYXNtPSRtYXNtcmVmIGlmICgkb3V0cHV0ID1+IC9cLmFzbS8pOwotaWYgKCRtYXNtICYmIGBtbDY0IDI+JjFgID1+IG0vVmVyc2lvbiAoWzAtOV0rKVwuKFswLTldKykoXC4oWzAtOV0rKSk/LykKLXsgICAkbWFzbT0kMSArICQyKjIqKi0xNiArICQ0KjIqKi0zMjsgICB9CitteSAkbWFzbT0wOworbXkgJFBUUj0iIFBUUiI7CisKK215ICRuYXNtcmVmPTIuMDM7CitteSAkbmFzbT0wOworCitpZiAgICAoJGZsYXZvdXIgZXEgIm1pbmd3NjQiKQl7ICRnYXM9MTsgJGVsZj0wOyAkd2luNjQ9MTsgJHByZWZpeD0iXyI7IH0KK2Vsc2lmICgkZmxhdm91ciBlcSAibWFjb3N4IikJeyAkZ2FzPTE7ICRlbGY9MDsgJHByZWZpeD0iXyI7ICRkZWNvcj0iTFwkIjsgfQorZWxzaWYgKCRmbGF2b3VyIGVxICJtYXNtIikJeyAkZ2FzPTA7ICRlbGY9MDsgJG1hc209JG1hc21yZWY7ICR3aW42ND0xOyAkZGVjb3I9IlwkTFwkIjsgfQorZWxzaWYgKCRmbGF2b3VyIGVxICJuYXNtIikJeyAkZ2FzPTA7ICRlbGY9MDsgJG5hc209JG5hc21yZWY7ICR3aW42ND0xOyAkZGVjb3I9IlwkTFwkIjsgJFBUUj0iIjsgfQorZWxzaWYgKCEkZ2FzKQoreyAgIGlmICgkRU5We0FTTX0gPX4gbS9uYXNtLyAmJiBgbmFzbSAtdmAgPX4gbS92ZXJzaW9uIChbMC05XSspXC4oWzAtOV0rKS9pKQorICAgIHsJJG5hc20gPSAkMSArICQyKjAuMDE7ICRQVFI9IiI7ICB9CisgICAgZWxzaWYgKGBtbDY0IDI+JjFgID1+IG0vVmVyc2lvbiAoWzAtOV0rKVwuKFswLTldKykoXC4oWzAtOV0rKSk/LykKKyAgICB7CSRtYXNtID0gJDEgKyAkMioyKiotMTYgKyAkNCoyKiotMzI7ICAgfQorICAgIGRpZSAibm8gYXNzZW1ibGVyIGZvdW5kIG9uICVQQVRIIiBpZiAoISgkbmFzbSB8fCAkbWFzbSkpOworICAgICR3aW42ND0xOworICAgICRlbGY9MDsKKyAgICAkZGVjb3I9IlwkTFwkIjsKK30KIAogbXkgJGN1cnJlbnRfc2VnbWVudDsKIG15ICRjdXJyZW50X2Z1bmN0aW9uOworbXkgJWdsb2JhbHM7CiAKIHsgcGFja2FnZSBvcGNvZGU7CSMgcGljayB1cCBvcGNvZGVzCiAgICAgc3ViIHJlIHsKQEAgLTg4LDcgKzExNCw3IEBACiAJICAgIGlmICgkc2VsZi0+e29wfSA9fiAvXihtb3Z6KWIuKi8pIHsJIyBtb3Z6IGlzIHBhaW4uLi4KIAkJJHNlbGYtPntvcH0gPSAkMTsKIAkJJHNlbGYtPntzen0gPSAiYiI7Ci0JICAgIH0gZWxzaWYgKCRzZWxmLT57b3B9ID1+IC9jYWxsLykgeworCSAgICB9IGVsc2lmICgkc2VsZi0+e29wfSA9fiAvY2FsbHxqbXAvKSB7CiAJCSRzZWxmLT57c3p9ID0gIiIKIAkgICAgfSBlbHNpZiAoJHNlbGYtPntvcH0gPX4gLyhbYS16XXszLH0pKFtxbHdiXSkkLykgewogCQkkc2VsZi0+e29wfSA9ICQxOwpAQCAtMTA1LDEzICsxMzEsMjAgQEAKICAgICB9CiAgICAgc3ViIG91dCB7CiAJbXkgJHNlbGYgPSBzaGlmdDsKLQlpZiAoISRtYXNtKSB7CisJaWYgKCRnYXMpIHsKIAkgICAgaWYgKCRzZWxmLT57b3B9IGVxICJtb3Z6IikgewkjIG1vdnogaXMgcGFpbi4uLgogCQlzcHJpbnRmICIlcyVzJXMiLCRzZWxmLT57b3B9LCRzZWxmLT57c3p9LHNoaWZ0OwogCSAgICB9IGVsc2lmICgkc2VsZi0+e29wfSA9fiAvXnNldC8pIHsgCiAJCSIkc2VsZi0+e29wfSI7CiAJICAgIH0gZWxzaWYgKCRzZWxmLT57b3B9IGVxICJyZXQiKSB7Ci0JICAgIAkiLmJ5dGUJMHhmMywweGMzIjsKKwkJbXkgJGVwaWxvZ3VlID0gIiI7CisJCWlmICgkd2luNjQgJiYgJGN1cnJlbnRfZnVuY3Rpb24tPnthYml9IGVxICJzdnI0IikgeworCQkgICAgJGVwaWxvZ3VlID0gIm1vdnEJOCglcnNwKSwlcmRpXG5cdCIgLgorCQkJCSJtb3ZxCTE2KCVyc3ApLCVyc2lcblx0IjsKKwkJfQorCSAgICAJJGVwaWxvZ3VlIC4gIi5ieXRlCTB4ZjMsMHhjMyI7CisJICAgIH0gZWxzaWYgKCRzZWxmLT57b3B9IGVxICJjYWxsIiAmJiAhJGVsZiAmJiAkY3VycmVudF9zZWdtZW50IGVxICIuaW5pdCIpIHsKKwkJIi5wMmFsaWduXHQzXG5cdC5xdWFkIjsKIAkgICAgfSBlbHNlIHsKIAkJIiRzZWxmLT57b3B9JHNlbGYtPntzen0iOwogCSAgICB9CkBAIC0xMTksMTUgKzE1MiwyNSBAQAogCSAgICAkc2VsZi0+e29wfSA9fiBzL15tb3Z6L21vdnp4LzsKIAkgICAgaWYgKCRzZWxmLT57b3B9IGVxICJyZXQiKSB7CiAJCSRzZWxmLT57b3B9ID0gIiI7Ci0JCWlmICgkY3VycmVudF9mdW5jdGlvbi0+e2FiaX0gZXEgInN2cjQiKSB7Ci0JCSAgICAkc2VsZi0+e29wfSA9ICJtb3YJcmRpLFFXT1JEIFBUUiA4W3JzcF1cdDtXSU42NCBlcGlsb2d1ZVxuXHQiLgotCQkJCSAgIm1vdglyc2ksUVdPUkQgUFRSIDE2W3JzcF1cblx0IjsKKwkJaWYgKCR3aW42NCAmJiAkY3VycmVudF9mdW5jdGlvbi0+e2FiaX0gZXEgInN2cjQiKSB7CisJCSAgICAkc2VsZi0+e29wfSA9ICJtb3YJcmRpLFFXT1JEJHtQVFJ9WzgrcnNwXVx0O1dJTjY0IGVwaWxvZ3VlXG5cdCIuCisJCQkJICAibW92CXJzaSxRV09SRCR7UFRSfVsxNityc3BdXG5cdCI7CiAJICAgIAl9CiAJCSRzZWxmLT57b3B9IC49ICJEQlx0MEYzaCwwQzNoXHRcdDtyZXByZXQiOwotCSAgICB9CisJICAgIH0gZWxzaWYgKCRzZWxmLT57b3B9ID1+IC9eKHBvcHxwdXNoKWYvKSB7CisJCSRzZWxmLT57b3B9IC49ICRzZWxmLT57c3p9OworCSAgICB9IGVsc2lmICgkc2VsZi0+e29wfSBlcSAiY2FsbCIgJiYgJGN1cnJlbnRfc2VnbWVudCBlcSAiLkNSVFwkWENVIikgeworCQkkc2VsZi0+e29wfSA9ICJBTElHTlx0OFxuXHREUSI7CisJICAgIH0gCiAJICAgICRzZWxmLT57b3B9OwogCX0KICAgICB9CisgICAgc3ViIG1uZW1vbmljIHsKKwlteSAkc2VsZj1zaGlmdDsKKwlteSAkb3A9c2hpZnQ7CisJJHNlbGYtPntvcH09JG9wIGlmIChkZWZpbmVkKCRvcCkpOworCSRzZWxmLT57b3B9OworICAgIH0KIH0KIHsgcGFja2FnZSBjb25zdDsJIyBwaWNrIHVwIGNvbnN0YW50cywgd2hpY2ggc3RhcnQgd2l0aCAkCiAgICAgc3ViIHJlIHsKQEAgLTE0NSwxNCArMTg4LDE1IEBACiAgICAgc3ViIG91dCB7CiAgICAgCW15ICRzZWxmID0gc2hpZnQ7CiAKLQlpZiAoISRtYXNtKSB7CisJaWYgKCRnYXMpIHsKIAkgICAgIyBTb2xhcmlzIC91c3IvY2NzL2Jpbi9hcyBjYW4ndCBoYW5kbGUgbXVsdGlwbGljYXRpb25zCiAJICAgICMgaW4gJHNlbGYtPnt2YWx1ZX0KIAkgICAgJHNlbGYtPnt2YWx1ZX0gPX4gcy8oPzwhWzAtOWEtZl0pKDBbeDAtOWEtZl0rKS9vY3QoJDEpL2VnaTsKIAkgICAgJHNlbGYtPnt2YWx1ZX0gPX4gcy8oWzAtOV0rXHMqW1wqXC9cJV1ccypbMC05XSspL2V2YWwoJDEpL2VnOwogCSAgICBzcHJpbnRmICJcJCVzIiwkc2VsZi0+e3ZhbHVlfTsKIAl9IGVsc2UgewotCSAgICAkc2VsZi0+e3ZhbHVlfSA9fiBzLzB4KFswLTlhLWZdKykvMCQxaC9pZzsKKwkgICAgJHNlbGYtPnt2YWx1ZX0gPX4gcy8oMGJbMC0xXSspL29jdCgkMSkvZWlnOworCSAgICAkc2VsZi0+e3ZhbHVlfSA9fiBzLzB4KFswLTlhLWZdKykvMCQxaC9pZyBpZiAoJG1hc20pOwogCSAgICBzcHJpbnRmICIlcyIsJHNlbGYtPnt2YWx1ZX07CiAJfQogICAgIH0KQEAgLTE2MywxMyArMjA3LDE5IEBACiAJbG9jYWwJKmxpbmUgPSBzaGlmdDsKIAl1bmRlZgkkcmV0OwogCi0JaWYgKCRsaW5lID1+IC9eKFteXCgsXSopXCgoWyVcdyxdKylcKS8pIHsKLQkgICAgJHNlbGYtPntsYWJlbH0gPSAkMTsKLQkgICAgKCRzZWxmLT57YmFzZX0sJHNlbGYtPntpbmRleH0sJHNlbGYtPntzY2FsZX0pPXNwbGl0KC8sLywkMik7CisJIyBvcHRpb25hbCAqIC0tLXZ2di0tLSBhcHBlYXJzIGluIGluZGlyZWN0IGptcC9jYWxsCisJaWYgKCRsaW5lID1+IC9eKFwqPykoW15cKCxdKilcKChbJVx3LF0rKVwpLykgeworCSAgICAkc2VsZi0+e2FzdGVyaXNrfSA9ICQxOworCSAgICAkc2VsZi0+e2xhYmVsfSA9ICQyOworCSAgICAoJHNlbGYtPntiYXNlfSwkc2VsZi0+e2luZGV4fSwkc2VsZi0+e3NjYWxlfSk9c3BsaXQoLywvLCQzKTsKIAkgICAgJHNlbGYtPntzY2FsZX0gPSAxIGlmICghZGVmaW5lZCgkc2VsZi0+e3NjYWxlfSkpOwogCSAgICAkcmV0ID0gJHNlbGY7CiAJICAgICRsaW5lID0gc3Vic3RyKCRsaW5lLEArWzBdKTsgJGxpbmUgPX4gcy9eXHMrLy87CiAKKwkgICAgaWYgKCR3aW42NCAmJiAkc2VsZi0+e2xhYmVsfSA9fiBzL1xAR09UUENSRUwvLykgeworCQlkaWUgaWYgKG9wY29kZS0+bW5lbW9uaWMoKSBuZSAibW92Iik7CisJCW9wY29kZS0+bW5lbW9uaWMoImxlYSIpOworCSAgICB9CiAJICAgICRzZWxmLT57YmFzZX0gID1+IHMvXiUvLzsKIAkgICAgJHNlbGYtPntpbmRleH0gPX4gcy9eJS8vIGlmIChkZWZpbmVkKCRzZWxmLT57aW5kZXh9KSk7CiAJfQpAQCAtMTgwLDQ0ICsyMzAsNTAgQEAKICAgICAJbXkgJHNlbGYgPSBzaGlmdDsKIAlteSAkc3ogPSBzaGlmdDsKIAorCSRzZWxmLT57bGFiZWx9ID1+IHMvKFtfYS16XVtfYS16MC05XSopLyRnbG9iYWxzeyQxfSBvciAkMS9nZWk7CisJJHNlbGYtPntsYWJlbH0gPX4gcy9cLkwvJGRlY29yL2c7CisKIAkjIFNpbGVudGx5IGNvbnZlcnQgYWxsIEVBcyB0byA2NC1iaXQuIFRoaXMgaXMgcmVxdWlyZWQgZm9yCiAJIyBlbGRlciBHTlUgYXNzZW1ibGVyIGFuZCByZXN1bHRzIGluIG1vcmUgY29tcGFjdCBjb2RlLAogCSMgKmJ1dCogbW9zdCBpbXBvcnRhbnRseSBBRVMgbW9kdWxlIGRlcGVuZHMgb24gdGhpcyBmZWF0dXJlIQogCSRzZWxmLT57aW5kZXh9ID1+IHMvXltlcl0oLj9bMC05eHBpXSlbZF0/JC9yXDEvOwogCSRzZWxmLT57YmFzZX0gID1+IHMvXltlcl0oLj9bMC05eHBpXSlbZF0/JC9yXDEvOwogCi0JaWYgKCEkbWFzbSkgeworCWlmICgkZ2FzKSB7CiAJICAgICMgU29sYXJpcyAvdXNyL2Njcy9iaW4vYXMgY2FuJ3QgaGFuZGxlIG11bHRpcGxpY2F0aW9ucwotCSAgICAjIGluICRzZWxmLT57bGFiZWx9CisJICAgICMgaW4gJHNlbGYtPntsYWJlbH0sIG5ldyBnYXMgcmVxdWlyZXMgc2lnbiBleHRlbnNpb24uLi4KIAkgICAgdXNlIGludGVnZXI7CiAJICAgICRzZWxmLT57bGFiZWx9ID1+IHMvKD88IVswLTlhLWZdKSgwW3gwLTlhLWZdKykvb2N0KCQxKS9lZ2k7CiAJICAgICRzZWxmLT57bGFiZWx9ID1+IHMvKFswLTldK1xzKltcKlwvXCVdXHMqWzAtOV0rKS9ldmFsKCQxKS9lZzsKIAkgICAgJHNlbGYtPntsYWJlbH0gPX4gcy8oWzAtOV0rKS8kMTw8MzI+PjMyL2VnOworCSAgICAkc2VsZi0+e2xhYmVsfSA9fiBzL15fX19pbXBfL19faW1wX18vICAgaWYgKCRmbGF2b3VyIGVxICJtaW5ndzY0Iik7CiAKIAkgICAgaWYgKGRlZmluZWQoJHNlbGYtPntpbmRleH0pKSB7Ci0JCXNwcmludGYgIiVzKCUlJXMsJSUlcywlZCkiLAorCQlzcHJpbnRmICIlcyVzKCUlJXMsJSUlcywlZCkiLCRzZWxmLT57YXN0ZXJpc2t9LAogCQkJCQkkc2VsZi0+e2xhYmVsfSwkc2VsZi0+e2Jhc2V9LAogCQkJCQkkc2VsZi0+e2luZGV4fSwkc2VsZi0+e3NjYWxlfTsKIAkgICAgfSBlbHNlIHsKLQkJc3ByaW50ZiAiJXMoJSUlcykiLAkkc2VsZi0+e2xhYmVsfSwkc2VsZi0+e2Jhc2V9OworCQlzcHJpbnRmICIlcyVzKCUlJXMpIiwJJHNlbGYtPnthc3Rlcmlza30sJHNlbGYtPntsYWJlbH0sJHNlbGYtPntiYXNlfTsKIAkgICAgfQogCX0gZWxzZSB7Ci0JICAgICVzem1hcCA9ICggYj0+IkJZVEUiLCB3PT4iV09SRCIsIGw9PiJEV09SRCIsIHE9PiJRV09SRCIgKTsKKwkgICAgJXN6bWFwID0gKCBiPT4iQllURSRQVFIiLCB3PT4iV09SRCRQVFIiLCBsPT4iRFdPUkQkUFRSIiwgcT0+IlFXT1JEJFBUUiIgKTsKIAogCSAgICAkc2VsZi0+e2xhYmVsfSA9fiBzL1wuL1wkL2c7CiAJICAgICRzZWxmLT57bGFiZWx9ID1+IHMvMHgoWzAtOWEtZl0rKS8wJDFoL2lnOwogCSAgICAkc2VsZi0+e2xhYmVsfSA9ICIoJHNlbGYtPntsYWJlbH0pIiBpZiAoJHNlbGYtPntsYWJlbH0gPX4gL1tcKlwrXC1cL10vKTsKKwkgICAgJHN6PSJxIiBpZiAoJHNlbGYtPnthc3Rlcmlza30pOwogCiAJICAgIGlmIChkZWZpbmVkKCRzZWxmLT57aW5kZXh9KSkgewotCQlzcHJpbnRmICIlcyBQVFIgJXNbJXMqJWQrJXNdIiwkc3ptYXB7JHN6fSwKLQkJCQkJJHNlbGYtPntsYWJlbH0sCisJCXNwcmludGYgIiVzWyVzJXMqJWQrJXNdIiwkc3ptYXB7JHN6fSwKKwkJCQkJJHNlbGYtPntsYWJlbH0/IiRzZWxmLT57bGFiZWx9KyI6IiIsCiAJCQkJCSRzZWxmLT57aW5kZXh9LCRzZWxmLT57c2NhbGV9LAogCQkJCQkkc2VsZi0+e2Jhc2V9OwogCSAgICB9IGVsc2lmICgkc2VsZi0+e2Jhc2V9IGVxICJyaXAiKSB7Ci0JCXNwcmludGYgIiVzIFBUUiAlcyIsJHN6bWFweyRzen0sJHNlbGYtPntsYWJlbH07CisJCXNwcmludGYgIiVzWyVzXSIsJHN6bWFweyRzen0sJHNlbGYtPntsYWJlbH07CiAJICAgIH0gZWxzZSB7Ci0JCXNwcmludGYgIiVzIFBUUiAlc1slc10iLCRzem1hcHskc3p9LAotCQkJCQkkc2VsZi0+e2xhYmVsfSwkc2VsZi0+e2Jhc2V9OworCQlzcHJpbnRmICIlc1slcyVzXSIsJHN6bWFweyRzen0sCisJCQkJCSRzZWxmLT57bGFiZWx9PyIkc2VsZi0+e2xhYmVsfSsiOiIiLAorCQkJCQkkc2VsZi0+e2Jhc2V9OwogCSAgICB9CiAJfQogICAgIH0KQEAgLTIyOSw5ICsyODUsMTEgQEAKIAlsb2NhbAkqbGluZSA9IHNoaWZ0OwogCXVuZGVmCSRyZXQ7CiAKLQlpZiAoJGxpbmUgPX4gL14lKFx3KykvKSB7CisJIyBvcHRpb25hbCAqIC0tLXZ2di0tLSBhcHBlYXJzIGluIGluZGlyZWN0IGptcC9jYWxsCisJaWYgKCRsaW5lID1+IC9eKFwqPyklKFx3KykvKSB7CiAJICAgIGJsZXNzICRzZWxmLCRjbGFzczsKLQkgICAgJHNlbGYtPnt2YWx1ZX0gPSAkMTsKKwkgICAgJHNlbGYtPnthc3Rlcmlza30gPSAkMTsKKwkgICAgJHNlbGYtPnt2YWx1ZX0gPSAkMjsKIAkgICAgJHJldCA9ICRzZWxmOwogCSAgICAkbGluZSA9IHN1YnN0cigkbGluZSxAK1swXSk7ICRsaW5lID1+IHMvXlxzKy8vOwogCX0KQEAgLTI1NCw3ICszMTIsOCBAQAogICAgIH0KICAgICBzdWIgb3V0IHsKICAgICAJbXkgJHNlbGYgPSBzaGlmdDsKLQlzcHJpbnRmICRtYXNtPyIlcyI6IiUlJXMiLCRzZWxmLT57dmFsdWV9OworCWlmICgkZ2FzKQl7IHNwcmludGYgIiVzJSUlcyIsJHNlbGYtPnthc3Rlcmlza30sJHNlbGYtPnt2YWx1ZX07IH0KKwllbHNlCQl7ICRzZWxmLT57dmFsdWV9OyB9CiAgICAgfQogfQogeyBwYWNrYWdlIGxhYmVsOwkjIHBpY2sgdXAgbGFiZWxzLCB3aGljaCBlbmQgd2l0aCA6CkBAIC0yNjMsMzcgKzMyMiw2MyBAQAogCWxvY2FsCSpsaW5lID0gc2hpZnQ7CiAJdW5kZWYJJHJldDsKIAotCWlmICgkbGluZSA9fiAvKF5bXC5cd10rXDopLykgeworCWlmICgkbGluZSA9fiAvKF5bXC5cd10rKVw6LykgewogCSAgICAkc2VsZi0+e3ZhbHVlfSA9ICQxOwogCSAgICAkcmV0ID0gJHNlbGY7CiAJICAgICRsaW5lID0gc3Vic3RyKCRsaW5lLEArWzBdKTsgJGxpbmUgPX4gcy9eXHMrLy87CiAKLQkgICAgJHNlbGYtPnt2YWx1ZX0gPX4gcy9cLkwvXCRMLyBpZiAoJG1hc20pOworCSAgICAkc2VsZi0+e3ZhbHVlfSA9fiBzL15cLkwvJGRlY29yLzsKIAl9CiAJJHJldDsKICAgICB9CiAgICAgc3ViIG91dCB7CiAJbXkgJHNlbGYgPSBzaGlmdDsKIAotCWlmICghJG1hc20pIHsKLQkgICAgJHNlbGYtPnt2YWx1ZX07Ci0JfSBlbHNpZiAoJHNlbGYtPnt2YWx1ZX0gbmUgIiRjdXJyZW50X2Z1bmN0aW9uLT57bmFtZX06IikgewotCSAgICAkc2VsZi0+e3ZhbHVlfTsKLQl9IGVsc2lmICgkY3VycmVudF9mdW5jdGlvbi0+e2FiaX0gZXEgInN2cjQiKSB7Ci0JICAgIG15ICRmdW5jID0JIiRjdXJyZW50X2Z1bmN0aW9uLT57bmFtZX0JUFJPQ1xuIi4KLQkJCSIJbW92CVFXT1JEIFBUUiA4W3JzcF0scmRpXHQ7V0lONjQgcHJvbG9ndWVcbiIuCi0JCQkiCW1vdglRV09SRCBQVFIgMTZbcnNwXSxyc2lcbiI7CisJaWYgKCRnYXMpIHsKKwkgICAgbXkgJGZ1bmMgPSAoJGdsb2JhbHN7JHNlbGYtPnt2YWx1ZX19IG9yICRzZWxmLT57dmFsdWV9KSAuICI6IjsKKwkgICAgaWYgKCR3aW42NAkmJgorCQkJJGN1cnJlbnRfZnVuY3Rpb24tPntuYW1lfSBlcSAkc2VsZi0+e3ZhbHVlfSAmJgorCQkJJGN1cnJlbnRfZnVuY3Rpb24tPnthYml9IGVxICJzdnI0IikgeworCQkkZnVuYyAuPSAiXG4iOworCQkkZnVuYyAuPSAiCW1vdnEJJXJkaSw4KCVyc3ApXG4iOworCQkkZnVuYyAuPSAiCW1vdnEJJXJzaSwxNiglcnNwKVxuIjsKKwkJJGZ1bmMgLj0gIgltb3ZxCSVyc3AsJXJheFxuIjsKKwkJJGZ1bmMgLj0gIiR7ZGVjb3J9U0VIX2JlZ2luXyRjdXJyZW50X2Z1bmN0aW9uLT57bmFtZX06XG4iOworCQlteSAkbmFyZyA9ICRjdXJyZW50X2Z1bmN0aW9uLT57bmFyZ307CisJCSRuYXJnPTYgaWYgKCFkZWZpbmVkKCRuYXJnKSk7CisJCSRmdW5jIC49ICIJbW92cQklcmN4LCVyZGlcbiIgaWYgKCRuYXJnPjApOworCQkkZnVuYyAuPSAiCW1vdnEJJXJkeCwlcnNpXG4iIGlmICgkbmFyZz4xKTsKKwkJJGZ1bmMgLj0gIgltb3ZxCSVyOCwlcmR4XG4iICBpZiAoJG5hcmc+Mik7CisJCSRmdW5jIC49ICIJbW92cQklcjksJXJjeFxuIiAgaWYgKCRuYXJnPjMpOworCQkkZnVuYyAuPSAiCW1vdnEJNDAoJXJzcCksJXI4XG4iIGlmICgkbmFyZz40KTsKKwkJJGZ1bmMgLj0gIgltb3ZxCTQ4KCVyc3ApLCVyOVxuIiBpZiAoJG5hcmc+NSk7CisJICAgIH0KKwkgICAgJGZ1bmM7CisJfSBlbHNpZiAoJHNlbGYtPnt2YWx1ZX0gbmUgIiRjdXJyZW50X2Z1bmN0aW9uLT57bmFtZX0iKSB7CisJICAgICRzZWxmLT57dmFsdWV9IC49ICI6IiBpZiAoJG1hc20gJiYgJHJldCF+bS9eXCQvKTsKKwkgICAgJHNlbGYtPnt2YWx1ZX0gLiAiOiI7CisJfSBlbHNpZiAoJHdpbjY0ICYmICRjdXJyZW50X2Z1bmN0aW9uLT57YWJpfSBlcSAic3ZyNCIpIHsKKwkgICAgbXkgJGZ1bmMgPQkiJGN1cnJlbnRfZnVuY3Rpb24tPntuYW1lfSIgLgorCQkJKCRuYXNtID8gIjoiIDogIlx0UFJPQyAkY3VycmVudF9mdW5jdGlvbi0+e3Njb3BlfSIpIC4KKwkJCSJcbiI7CisJICAgICRmdW5jIC49ICIJbW92CVFXT1JEJHtQVFJ9WzgrcnNwXSxyZGlcdDtXSU42NCBwcm9sb2d1ZVxuIjsKKwkgICAgJGZ1bmMgLj0gIgltb3YJUVdPUkQke1BUUn1bMTYrcnNwXSxyc2lcbiI7CisJICAgICRmdW5jIC49ICIJbW92CXJheCxyc3BcbiI7CisJICAgICRmdW5jIC49ICIke2RlY29yfVNFSF9iZWdpbl8kY3VycmVudF9mdW5jdGlvbi0+e25hbWV9OiI7CisJICAgICRmdW5jIC49ICI6IiBpZiAoJG1hc20pOworCSAgICAkZnVuYyAuPSAiXG4iOwogCSAgICBteSAkbmFyZyA9ICRjdXJyZW50X2Z1bmN0aW9uLT57bmFyZ307CiAJICAgICRuYXJnPTYgaWYgKCFkZWZpbmVkKCRuYXJnKSk7CiAJICAgICRmdW5jIC49ICIJbW92CXJkaSxyY3hcbiIgaWYgKCRuYXJnPjApOwogCSAgICAkZnVuYyAuPSAiCW1vdglyc2kscmR4XG4iIGlmICgkbmFyZz4xKTsKIAkgICAgJGZ1bmMgLj0gIgltb3YJcmR4LHI4XG4iICBpZiAoJG5hcmc+Mik7CiAJICAgICRmdW5jIC49ICIJbW92CXJjeCxyOVxuIiAgaWYgKCRuYXJnPjMpOwotCSAgICAkZnVuYyAuPSAiCW1vdglyOCxRV09SRCBQVFIgNDBbcnNwXVxuIiBpZiAoJG5hcmc+NCk7Ci0JICAgICRmdW5jIC49ICIJbW92CXI5LFFXT1JEIFBUUiA0OFtyc3BdXG4iIGlmICgkbmFyZz41KTsKKwkgICAgJGZ1bmMgLj0gIgltb3YJcjgsUVdPUkQke1BUUn1bNDArcnNwXVxuIiBpZiAoJG5hcmc+NCk7CisJICAgICRmdW5jIC49ICIJbW92CXI5LFFXT1JEJHtQVFJ9WzQ4K3JzcF1cbiIgaWYgKCRuYXJnPjUpOwogCSAgICAkZnVuYyAuPSAiXG4iOwogCX0gZWxzZSB7Ci0JICAgIiRjdXJyZW50X2Z1bmN0aW9uLT57bmFtZX0JUFJPQyI7CisJICAgIiRjdXJyZW50X2Z1bmN0aW9uLT57bmFtZX0iLgorCQkJKCRuYXNtID8gIjoiIDogIlx0UFJPQyAkY3VycmVudF9mdW5jdGlvbi0+e3Njb3BlfSIpOwogCX0KICAgICB9CiB9CkBAIC0zMDgsMTMgKzM5MywxOSBAQAogCSAgICAkcmV0ID0gJHNlbGY7CiAJICAgICRsaW5lID0gc3Vic3RyKCRsaW5lLEArWzBdKTsgJGxpbmUgPX4gcy9eXHMrLy87CiAKLQkgICAgJHNlbGYtPnt2YWx1ZX0gPX4gcy9cLkwvXCRML2cgaWYgKCRtYXNtKTsKKwkgICAgJHNlbGYtPnt2YWx1ZX0gPX4gcy9cQFBMVC8vIGlmICghJGVsZik7CisJICAgICRzZWxmLT57dmFsdWV9ID1+IHMvKFtfYS16XVtfYS16MC05XSopLyRnbG9iYWxzeyQxfSBvciAkMS9nZWk7CisJICAgICRzZWxmLT57dmFsdWV9ID1+IHMvXC5MLyRkZWNvci9nOwogCX0KIAkkcmV0OwogICAgIH0KICAgICBzdWIgb3V0IHsKIAlteSAkc2VsZiA9IHNoaWZ0OwotCSRzZWxmLT57dmFsdWV9OworCWlmICgkbmFzbSAmJiBvcGNvZGUtPm1uZW1vbmljKCk9fm0vXmovKSB7CisJICAgICJORUFSICIuJHNlbGYtPnt2YWx1ZX07CisJfSBlbHNlIHsKKwkgICAgJHNlbGYtPnt2YWx1ZX07CisJfQogICAgIH0KIH0KIHsgcGFja2FnZSBkaXJlY3RpdmU7CSMgcGljayB1cCBkaXJlY3RpdmVzLCB3aGljaCBzdGFydCB3aXRoIC4KQEAgLTMzNCw4OSArNDI1LDE4MSBAQAogCQkJIiVyMTQiPT4weDAxMzU4ZDRjLAkiJXIxNSI9PjB4MDEzZDhkNGMJKTsKIAogCWlmICgkbGluZSA9fiAvXlxzKihcLlx3KykvKSB7Ci0JICAgIGlmICghJG1hc20pIHsKLQkJJHNlbGYtPnt2YWx1ZX0gPSAkMTsKLQkJJGxpbmUgPX4gcy9cQGFiaVwtb21uaXBvdGVudC9cQGZ1bmN0aW9uLzsKLQkJJGxpbmUgPX4gcy9cQGZ1bmN0aW9uLiovXEBmdW5jdGlvbi87Ci0JCWlmICgkbGluZSA9fiAvXC5waWNtZXVwXHMrKCVyW1x3XSspL2kpIHsKLQkJICAgICRzZWxmLT57dmFsdWV9ID0gc3ByaW50ZiAiXHQubG9uZ1x0MHgleCwweDkwMDAwMDAwIiwkb3Bjb2RleyQxfTsKLQkJfSBlbHNpZiAoJGxpbmUgPX4gL1wuYXNjaXpccysiKC4qKSIkLykgewotCQkgICAgJHNlbGYtPnt2YWx1ZX0gPSAiLmJ5dGVcdCIuam9pbigiLCIsdW5wYWNrKCJDKiIsJDEpLDApOwotCQl9IGVsc2lmICgkbGluZSA9fiAvXC5leHRlcm4vKSB7Ci0JCSAgICAkc2VsZi0+e3ZhbHVlfSA9ICIiOyAjIHN3YWxsb3cgZXh0ZXJuCi0JCX0gZWxzZSB7Ci0JCSAgICAkc2VsZi0+e3ZhbHVlfSA9ICRsaW5lOwotCQl9Ci0JCSRsaW5lID0gIiI7Ci0JCXJldHVybiAkc2VsZjsKLQkgICAgfQotCiAJICAgICRkaXIgPSAkMTsKIAkgICAgJHJldCA9ICRzZWxmOwogCSAgICB1bmRlZiAkc2VsZi0+e3ZhbHVlfTsKIAkgICAgJGxpbmUgPSBzdWJzdHIoJGxpbmUsQCtbMF0pOyAkbGluZSA9fiBzL15ccysvLzsKKwogCSAgICBTV0lUQ0g6IGZvciAoJGRpcikgewotCQkvXC4odGV4dCkvCi0JCQkgICAgJiYgZG8geyBteSAkdj11bmRlZjsKLQkJCQkgICAgJHY9IiRjdXJyZW50X3NlZ21lbnRcdEVORFNcbiIgaWYgKCRjdXJyZW50X3NlZ21lbnQpOwotCQkJCSAgICAkY3VycmVudF9zZWdtZW50ID0gIl8kMVwkIjsKLQkJCQkgICAgJGN1cnJlbnRfc2VnbWVudCA9fiB0ci9bYS16XS9bQS1aXS87Ci0JCQkJICAgICR2Lj0iJGN1cnJlbnRfc2VnbWVudFx0U0VHTUVOVCAiOwotCQkJCSAgICAkdi49JG1hc20+PSRtYXNtcmVmID8gIkFMSUdOKDY0KSIgOiAiUEFHRSI7Ci0JCQkJICAgICR2Lj0iICdDT0RFJyI7Ci0JCQkJICAgICRzZWxmLT57dmFsdWV9ID0gJHY7CisJCS9cLnBpY21ldXAvICYmIGRvIHsgaWYgKCRsaW5lID1+IC8oJXJbXHddKykvaSkgeworCQkJICAgIAkJJGRpcj0iXHQubG9uZyI7CisJCQkJCSRsaW5lPXNwcmludGYgIjB4JXgsMHg5MDAwMDAwMCIsJG9wY29kZXskMX07CisJCQkJICAgIH0KIAkJCQkgICAgbGFzdDsKIAkJCQkgIH07Ci0JCS9cLmV4dGVybi8gICYmIGRvIHsgJHNlbGYtPnt2YWx1ZX0gPSAiRVhUUk5cdCIuJGxpbmUuIjpCWVRFIjsgbGFzdDsgIH07Ci0JCS9cLmdsb2JsLyAgICYmIGRvIHsgJHNlbGYtPnt2YWx1ZX0gPSAiUFVCTElDXHQiLiRsaW5lOyBsYXN0OyB9OworCQkvXC5nbG9iYWx8XC5nbG9ibHxcLmV4dGVybi8KKwkJCSAgICAmJiBkbyB7ICRnbG9iYWxzeyRsaW5lfSA9ICRwcmVmaXggLiAkbGluZTsKKwkJCQkgICAgJGxpbmUgPSAkZ2xvYmFsc3skbGluZX0gaWYgKCRwcmVmaXgpOworCQkJCSAgICBsYXN0OworCQkJCSAgfTsKIAkJL1wudHlwZS8gICAgJiYgZG8geyAoJHN5bSwkdHlwZSwkbmFyZykgPSBzcGxpdCgnLCcsJGxpbmUpOwogCQkJCSAgICBpZiAoJHR5cGUgZXEgIlxAZnVuY3Rpb24iKSB7CiAJCQkJCXVuZGVmICRjdXJyZW50X2Z1bmN0aW9uOwogCQkJCQkkY3VycmVudF9mdW5jdGlvbi0+e25hbWV9ID0gJHN5bTsKIAkJCQkJJGN1cnJlbnRfZnVuY3Rpb24tPnthYml9ICA9ICJzdnI0IjsKIAkJCQkJJGN1cnJlbnRfZnVuY3Rpb24tPntuYXJnfSA9ICRuYXJnOworCQkJCQkkY3VycmVudF9mdW5jdGlvbi0+e3Njb3BlfSA9IGRlZmluZWQoJGdsb2JhbHN7JHN5bX0pPyJQVUJMSUMiOiJQUklWQVRFIjsKIAkJCQkgICAgfSBlbHNpZiAoJHR5cGUgZXEgIlxAYWJpLW9tbmlwb3RlbnQiKSB7CiAJCQkJCXVuZGVmICRjdXJyZW50X2Z1bmN0aW9uOwogCQkJCQkkY3VycmVudF9mdW5jdGlvbi0+e25hbWV9ID0gJHN5bTsKKwkJCQkJJGN1cnJlbnRfZnVuY3Rpb24tPntzY29wZX0gPSBkZWZpbmVkKCRnbG9iYWxzeyRzeW19KT8iUFVCTElDIjoiUFJJVkFURSI7CisJCQkJICAgIH0KKwkJCQkgICAgJGxpbmUgPX4gcy9cQGFiaVwtb21uaXBvdGVudC9cQGZ1bmN0aW9uLzsKKwkJCQkgICAgJGxpbmUgPX4gcy9cQGZ1bmN0aW9uLiovXEBmdW5jdGlvbi87CisJCQkJICAgIGxhc3Q7CisJCQkJICB9OworCQkvXC5hc2Npei8gICAmJiBkbyB7IGlmICgkbGluZSA9fiAvXiIoLiopIiQvKSB7CisJCQkJCSRkaXIgID0gIi5ieXRlIjsKKwkJCQkJJGxpbmUgPSBqb2luKCIsIix1bnBhY2soIkMqIiwkMSksMCk7CiAJCQkJICAgIH0KIAkJCQkgICAgbGFzdDsKIAkJCQkgIH07CisJCS9cLnJ2YXxcLmxvbmd8XC5xdWFkLworCQkJICAgICYmIGRvIHsgJGxpbmUgPX4gcy8oW19hLXpdW19hLXowLTldKikvJGdsb2JhbHN7JDF9IG9yICQxL2dlaTsKKwkJCQkgICAgJGxpbmUgPX4gcy9cLkwvJGRlY29yL2c7CisJCQkJICAgIGxhc3Q7CisJCQkJICB9OworCSAgICB9CisKKwkgICAgaWYgKCRnYXMpIHsKKwkJJHNlbGYtPnt2YWx1ZX0gPSAkZGlyIC4gIlx0IiAuICRsaW5lOworCisJCWlmICgkZGlyID1+IC9cLmV4dGVybi8pIHsKKwkJICAgICRzZWxmLT57dmFsdWV9ID0gIiI7ICMgc3dhbGxvdyBleHRlcm4KKwkJfSBlbHNpZiAoISRlbGYgJiYgJGRpciA9fiAvXC50eXBlLykgeworCQkgICAgJHNlbGYtPnt2YWx1ZX0gPSAiIjsKKwkJICAgICRzZWxmLT57dmFsdWV9ID0gIi5kZWZcdCIgLiAoJGdsb2JhbHN7JDF9IG9yICQxKSAuICI7XHQiIC4KKwkJCQkoZGVmaW5lZCgkZ2xvYmFsc3skMX0pPyIuc2NsIDI7IjoiLnNjbCAzOyIpIC4KKwkJCQkiXHQudHlwZSAzMjtcdC5lbmRlZiIKKwkJCQlpZiAoJHdpbjY0ICYmICRsaW5lID1+IC8oW14sXSspLFxAZnVuY3Rpb24vKTsKKwkJfSBlbHNpZiAoISRlbGYgJiYgJGRpciA9fiAvXC5zaXplLykgeworCQkgICAgJHNlbGYtPnt2YWx1ZX0gPSAiIjsKKwkJICAgIGlmIChkZWZpbmVkKCRjdXJyZW50X2Z1bmN0aW9uKSkgeworCQkJJHNlbGYtPnt2YWx1ZX0gLj0gIiR7ZGVjb3J9U0VIX2VuZF8kY3VycmVudF9mdW5jdGlvbi0+e25hbWV9OiIKKwkJCQlpZiAoJHdpbjY0ICYmICRjdXJyZW50X2Z1bmN0aW9uLT57YWJpfSBlcSAic3ZyNCIpOworCQkJdW5kZWYgJGN1cnJlbnRfZnVuY3Rpb247CisJCSAgICB9CisJCX0gZWxzaWYgKCEkZWxmICYmICRkaXIgPX4gL1wuYWxpZ24vKSB7CisJCSAgICAkc2VsZi0+e3ZhbHVlfSA9ICIucDJhbGlnblx0IiAuIChsb2coJGxpbmUpL2xvZygyKSk7CisJCX0gZWxzaWYgKCRkaXIgZXEgIi5zZWN0aW9uIikgeworCQkgICAgJGN1cnJlbnRfc2VnbWVudD0kbGluZTsKKwkJICAgIGlmICghJGVsZiAmJiAkY3VycmVudF9zZWdtZW50IGVxICIuaW5pdCIpIHsKKwkJCWlmCSgkZmxhdm91ciBlcSAibWFjb3N4IikJeyAkc2VsZi0+e3ZhbHVlfSA9ICIubW9kX2luaXRfZnVuYyI7IH0KKwkJCWVsc2lmCSgkZmxhdm91ciBlcSAibWluZ3c2NCIpCXsgJHNlbGYtPnt2YWx1ZX0gPSAiLnNlY3Rpb25cdC5jdG9ycyI7IH0KKwkJICAgIH0KKwkJfSBlbHNpZiAoJGRpciA9fiAvXC4odGV4dHxkYXRhKS8pIHsKKwkJICAgICRjdXJyZW50X3NlZ21lbnQ9Ii4kMSI7CisJCX0KKwkJJGxpbmUgPSAiIjsKKwkJcmV0dXJuICRzZWxmOworCSAgICB9CisKKwkgICAgIyBub24tZ2FzIGNhc2Ugb3IgbmFzbS9tYXNtCisJICAgIFNXSVRDSDogZm9yICgkZGlyKSB7CisJCS9cLnRleHQvICAgICYmIGRvIHsgbXkgJHY9dW5kZWY7CisJCQkJICAgIGlmICgkbmFzbSkgeworCQkJCQkkdj0ic2VjdGlvbgkudGV4dCBjb2RlIGFsaWduPTY0XG4iOworCQkJCSAgICB9IGVsc2UgeworCQkJCQkkdj0iJGN1cnJlbnRfc2VnbWVudFx0RU5EU1xuIiBpZiAoJGN1cnJlbnRfc2VnbWVudCk7CisJCQkJCSRjdXJyZW50X3NlZ21lbnQgPSAiLnRleHRcJCI7CisJCQkJCSR2Lj0iJGN1cnJlbnRfc2VnbWVudFx0U0VHTUVOVCAiOworCQkJCQkkdi49JG1hc20+PSRtYXNtcmVmID8gIkFMSUdOKDY0KSIgOiAiUEFHRSI7CisJCQkJCSR2Lj0iICdDT0RFJyI7CisJCQkJICAgIH0KKwkJCQkgICAgJHNlbGYtPnt2YWx1ZX0gPSAkdjsKKwkJCQkgICAgbGFzdDsKKwkJCQkgIH07CisJCS9cLmRhdGEvICAgICYmIGRvIHsgbXkgJHY9dW5kZWY7CisJCQkJICAgIGlmICgkbmFzbSkgeworCQkJCQkkdj0ic2VjdGlvbgkuZGF0YSBkYXRhIGFsaWduPThcbiI7CisJCQkJICAgIH0gZWxzZSB7CisJCQkJCSR2PSIkY3VycmVudF9zZWdtZW50XHRFTkRTXG4iIGlmICgkY3VycmVudF9zZWdtZW50KTsKKwkJCQkJJGN1cnJlbnRfc2VnbWVudCA9ICJfREFUQSI7CisJCQkJCSR2Lj0iJGN1cnJlbnRfc2VnbWVudFx0U0VHTUVOVCI7CisJCQkJICAgIH0KKwkJCQkgICAgJHNlbGYtPnt2YWx1ZX0gPSAkdjsKKwkJCQkgICAgbGFzdDsKKwkJCQkgIH07CisJCS9cLnNlY3Rpb24vICYmIGRvIHsgbXkgJHY9dW5kZWY7CisJCQkJICAgICRsaW5lID1+IHMvKFteLF0qKS4qLyQxLzsKKwkJCQkgICAgJGxpbmUgPSAiLkNSVFwkWENVIiBpZiAoJGxpbmUgZXEgIi5pbml0Iik7CisJCQkJICAgIGlmICgkbmFzbSkgeworCQkJCQkkdj0ic2VjdGlvbgkkbGluZSI7CisJCQkJCWlmICgkbGluZT1+L1wuKFtweF0pZGF0YS8pIHsKKwkJCQkJICAgICR2Lj0iIHJkYXRhIGFsaWduPSI7CisJCQkJCSAgICAkdi49JDEgZXEgInAiPyA0IDogODsKKwkJCQkJfQorCQkJCSAgICB9IGVsc2UgeworCQkJCQkkdj0iJGN1cnJlbnRfc2VnbWVudFx0RU5EU1xuIiBpZiAoJGN1cnJlbnRfc2VnbWVudCk7CisJCQkJCSR2Lj0iJGxpbmVcdFNFR01FTlQiOworCQkJCQlpZiAoJGxpbmU9fi9cLihbcHhdKWRhdGEvKSB7CisJCQkJCSAgICAkdi49IiBSRUFET05MWSI7CisJCQkJCSAgICAkdi49IiBBTElHTigiLigkMSBlcSAicCIgPyA0IDogOCkuIikiIGlmICgkbWFzbT49JG1hc21yZWYpOworCQkJCQl9CisJCQkJICAgIH0KKwkJCQkgICAgJGN1cnJlbnRfc2VnbWVudCA9ICRsaW5lOworCQkJCSAgICAkc2VsZi0+e3ZhbHVlfSA9ICR2OworCQkJCSAgICBsYXN0OworCQkJCSAgfTsKKwkJL1wuZXh0ZXJuLyAgJiYgZG8geyAkc2VsZi0+e3ZhbHVlfSAgPSAiRVhURVJOXHQiLiRsaW5lOworCQkJCSAgICAkc2VsZi0+e3ZhbHVlfSAuPSAiOk5FQVIiIGlmICgkbWFzbSk7CisJCQkJICAgIGxhc3Q7CisJCQkJICB9OworCQkvXC5nbG9ibHwuZ2xvYmFsLworCQkJICAgICYmIGRvIHsgJHNlbGYtPnt2YWx1ZX0gID0gJG1hc20/IlBVQkxJQyI6Imdsb2JhbCI7CisJCQkJICAgICRzZWxmLT57dmFsdWV9IC49ICJcdCIuJGxpbmU7CisJCQkJICAgIGxhc3Q7CisJCQkJICB9OwogCQkvXC5zaXplLyAgICAmJiBkbyB7IGlmIChkZWZpbmVkKCRjdXJyZW50X2Z1bmN0aW9uKSkgewotCQkJCQkkc2VsZi0+e3ZhbHVlfT0iJGN1cnJlbnRfZnVuY3Rpb24tPntuYW1lfVx0RU5EUCI7CisJCQkJCXVuZGVmICRzZWxmLT57dmFsdWV9OworCQkJCQlpZiAoJGN1cnJlbnRfZnVuY3Rpb24tPnthYml9IGVxICJzdnI0IikgeworCQkJCQkgICAgJHNlbGYtPnt2YWx1ZX09IiR7ZGVjb3J9U0VIX2VuZF8kY3VycmVudF9mdW5jdGlvbi0+e25hbWV9OiI7CisJCQkJCSAgICAkc2VsZi0+e3ZhbHVlfS49IjpcbiIgaWYoJG1hc20pOworCQkJCQl9CisJCQkJCSRzZWxmLT57dmFsdWV9Lj0iJGN1cnJlbnRfZnVuY3Rpb24tPntuYW1lfVx0RU5EUCIgaWYoJG1hc20pOwogCQkJCQl1bmRlZiAkY3VycmVudF9mdW5jdGlvbjsKIAkJCQkgICAgfQogCQkJCSAgICBsYXN0OwogCQkJCSAgfTsKIAkJL1wuYWxpZ24vICAgJiYgZG8geyAkc2VsZi0+e3ZhbHVlfSA9ICJBTElHTlx0Ii4kbGluZTsgbGFzdDsgfTsKLQkJL1wuKGJ5dGV8dmFsdWV8bG9uZ3xxdWFkKS8KLQkJCSAgICAmJiBkbyB7IG15IEBhcnIgPSBzcGxpdCgnLCcsJGxpbmUpOwotCQkJCSAgICBteSAkc3ogID0gc3Vic3RyKCQxLDAsMSk7CisJCS9cLih2YWx1ZXxsb25nfHJ2YXxxdWFkKS8KKwkJCSAgICAmJiBkbyB7IG15ICRzeiAgPSBzdWJzdHIoJDEsMCwxKTsKKwkJCQkgICAgbXkgQGFyciA9IHNwbGl0KCcsJywkbGluZSk7CiAJCQkJICAgIG15ICRsYXN0ID0gcG9wKEBhcnIpOwogCQkJCSAgICBteSAkY29udiA9IHN1YiAgewlteSAkdmFyPXNoaWZ0OwotCQkJCQkJCWlmICgkdmFyPX5zLzB4KFswLTlhLWZdKykvMCQxaC9pKSB7ICR2YXI7IH0KLQkJCQkJCQllbHNlIHsgc3ByaW50ZiIwJVhoIiwkdmFyOyB9CisJCQkJCQkJJHZhcj1+cy9eKDBiWzAtMV0rKS9vY3QoJDEpL2VpZzsKKwkJCQkJCQkkdmFyPX5zLzB4KFswLTlhLWZdKykvMCQxaC9pZyBpZiAoJG1hc20pOworCQkJCQkJCWlmICgkc3ogZXEgIkQiICYmICgkY3VycmVudF9zZWdtZW50PX4vLltweF1kYXRhLyB8fCAkZGlyIGVxICIucnZhIikpCisJCQkJCQkJeyAkdmFyPX5zLyhbX2EtelwkXEBdW19hLXowLTlcJFxAXSopLyRuYXNtPyIkMSB3cnQgLi5pbWFnZWJhc2UiOiJpbWFnZXJlbCAkMSIvZWdpOyB9CisJCQkJCQkJJHZhcjsKIAkJCQkJCSAgICB9OyAgCiAKLQkJCQkgICAgJHN6ID1+IHRyL2J2bHEvQldEUS87CisJCQkJICAgICRzeiA9fiB0ci9idmxycS9CV0REUS87CiAJCQkJICAgICRzZWxmLT57dmFsdWV9ID0gIlx0RCRzelx0IjsKIAkJCQkgICAgZm9yIChAYXJyKSB7ICRzZWxmLT57dmFsdWV9IC49ICYkY29udigkXykuIiwiOyB9CiAJCQkJICAgICRzZWxmLT57dmFsdWV9IC49ICYkY29udigkbGFzdCk7CiAJCQkJICAgIGxhc3Q7CiAJCQkJICB9OwotCQkvXC5waWNtZXVwLyAmJiBkbyB7ICRzZWxmLT57dmFsdWV9ID0gc3ByaW50ZiJcdEREXHQgMCVYaCwwOTAwMDAwMDBoIiwkb3Bjb2RleyRsaW5lfTsKLQkJCQkgICAgbGFzdDsKLQkJCQkgIH07Ci0JCS9cLmFzY2l6LyAgICYmIGRvIHsgaWYgKCRsaW5lID1+IC9eIiguKikiJC8pIHsKLQkJCQkJbXkgQHN0cj11bnBhY2soIkMqIiwkMSk7Ci0JCQkJCXB1c2ggQHN0ciwwOwotCQkJCQl3aGlsZSAoJCNzdHI+MTUpIHsKLQkJCQkJICAgICRzZWxmLT57dmFsdWV9Lj0iREJcdCIKLQkJCQkJCS5qb2luKCIsIixAc3RyWzAuLjE1XSkuIlxuIjsKLQkJCQkJICAgIGZvcmVhY2ggKDAuLjE1KSB7IHNoaWZ0IEBzdHI7IH0KLQkJCQkJfQorCQkvXC5ieXRlLyAgICAmJiBkbyB7IG15IEBzdHI9c3BsaXQoIiwiLCRsaW5lKTsKKwkJCQkgICAgbWFwKHMvKDBiWzAtMV0rKS9vY3QoJDEpL2VpZyxAc3RyKTsKKwkJCQkgICAgbWFwKHMvMHgoWzAtOWEtZl0rKS8wJDFoL2lnLEBzdHIpIGlmICgkbWFzbSk7CQorCQkJCSAgICB3aGlsZSAoJCNzdHI+MTUpIHsKIAkJCQkJJHNlbGYtPnt2YWx1ZX0uPSJEQlx0IgotCQkJCQkJLmpvaW4oIiwiLEBzdHIpIGlmIChAc3RyKTsKKwkJCQkJCS5qb2luKCIsIixAc3RyWzAuLjE1XSkuIlxuIjsKKwkJCQkJZm9yZWFjaCAoMC4uMTUpIHsgc2hpZnQgQHN0cjsgfQogCQkJCSAgICB9CisJCQkJICAgICRzZWxmLT57dmFsdWV9Lj0iREJcdCIKKwkJCQkJCS5qb2luKCIsIixAc3RyKSBpZiAoQHN0cik7CiAJCQkJICAgIGxhc3Q7CiAJCQkJICB9OwogCSAgICB9CkBAIC00MzEsNiArNjE0LDE1IEBACiAgICAgfQogfQogCitpZiAoJG5hc20pIHsKKyAgICBwcmludCA8PF9fXzsKK2RlZmF1bHQJcmVsCitfX18KK30gZWxzaWYgKCRtYXNtKSB7CisgICAgcHJpbnQgPDxfX187CitPUFRJT04JRE9UTkFNRQorX19fCit9CiB3aGlsZSgkbGluZT08PikgewogCiAgICAgY2hvbXAoJGxpbmUpOwpAQCAtNDQxLDQzICs2MzMsNDIgQEAKIAogICAgIHVuZGVmICRsYWJlbDsKICAgICB1bmRlZiAkb3Bjb2RlOwotICAgIHVuZGVmICRkc3Q7Ci0gICAgdW5kZWYgJHNyYzsKICAgICB1bmRlZiAkc3o7CisgICAgdW5kZWYgQGFyZ3M7CiAKICAgICBpZiAoJGxhYmVsPWxhYmVsLT5yZShcJGxpbmUpKQl7IHByaW50ICRsYWJlbC0+b3V0KCk7IH0KIAogICAgIGlmIChkaXJlY3RpdmUtPnJlKFwkbGluZSkpIHsKIAlwcmludGYgIiVzIixkaXJlY3RpdmUtPm91dCgpOwotICAgIH0gZWxzaWYgKCRvcGNvZGU9b3Bjb2RlLT5yZShcJGxpbmUpKSB7IEFSR1VNRU5UOiB7CisgICAgfSBlbHNpZiAoJG9wY29kZT1vcGNvZGUtPnJlKFwkbGluZSkpIHsgQVJHVU1FTlQ6IHdoaWxlICgxKSB7CisJbXkgJGFyZzsKIAotCWlmICgkc3JjPXJlZ2lzdGVyLT5yZShcJGxpbmUpKQl7IG9wY29kZS0+c2l6ZSgkc3JjLT5zaXplKCkpOyB9Ci0JZWxzaWYgKCRzcmM9Y29uc3QtPnJlKFwkbGluZSkpCXsgfQotCWVsc2lmICgkc3JjPWVhLT5yZShcJGxpbmUpKQl7IH0KLQllbHNpZiAoJHNyYz1leHByLT5yZShcJGxpbmUpKQl7IH0KKwlpZiAoJGFyZz1yZWdpc3Rlci0+cmUoXCRsaW5lKSkJeyBvcGNvZGUtPnNpemUoJGFyZy0+c2l6ZSgpKTsgfQorCWVsc2lmICgkYXJnPWNvbnN0LT5yZShcJGxpbmUpKQl7IH0KKwllbHNpZiAoJGFyZz1lYS0+cmUoXCRsaW5lKSkJeyB9CisJZWxzaWYgKCRhcmc9ZXhwci0+cmUoXCRsaW5lKSkJeyB9CisJZWxzZQkJCQl7IGxhc3QgQVJHVU1FTlQ7IH0KKworCXB1c2ggQGFyZ3MsJGFyZzsKIAogCWxhc3QgQVJHVU1FTlQgaWYgKCRsaW5lICF+IC9eLC8pOwogCi0JJGxpbmUgPSBzdWJzdHIoJGxpbmUsMSk7ICRsaW5lID1+IHMvXlxzKy8vOwotCi0JaWYgKCRkc3Q9cmVnaXN0ZXItPnJlKFwkbGluZSkpCXsgb3Bjb2RlLT5zaXplKCRkc3QtPnNpemUoKSk7IH0KLQllbHNpZiAoJGRzdD1jb25zdC0+cmUoXCRsaW5lKSkJeyB9Ci0JZWxzaWYgKCRkc3Q9ZWEtPnJlKFwkbGluZSkpCXsgfQotCisJJGxpbmUgPX4gcy9eLFxzKi8vOwogCX0gIyBBUkdVTUVOVDoKIAogCSRzej1vcGNvZGUtPnNpemUoKTsKIAotCWlmIChkZWZpbmVkKCRkc3QpKSB7Ci0JICAgIGlmICghJG1hc20pIHsKLQkJcHJpbnRmICJcdCVzXHQlcywlcyIsCSRvcGNvZGUtPm91dCgkZHN0LT5zaXplKCkpLAotCQkJCQkkc3JjLT5vdXQoJHN6KSwkZHN0LT5vdXQoJHN6KTsKKwlpZiAoJCNhcmdzPj0wKSB7CisJICAgIG15ICRpbnNuOworCSAgICBpZiAoJGdhcykgeworCQkkaW5zbiA9ICRvcGNvZGUtPm91dCgkI2FyZ3M+PTE/JGFyZ3NbJCNhcmdzXS0+c2l6ZSgpOiRzeik7CiAJICAgIH0gZWxzZSB7Ci0JCXByaW50ZiAiXHQlc1x0JXMsJXMiLAkkb3Bjb2RlLT5vdXQoKSwKLQkJCQkJJGRzdC0+b3V0KCRzeiksJHNyYy0+b3V0KCRzeik7CisJCSRpbnNuID0gJG9wY29kZS0+b3V0KCk7CisJCSRpbnNuIC49ICRzeiBpZiAobWFwKCRfLT5vdXQoKSA9fiAveG1tfG1teC8sQGFyZ3MpKTsKKwkJQGFyZ3MgPSByZXZlcnNlKEBhcmdzKTsKKwkJdW5kZWYgJHN6IGlmICgkbmFzbSAmJiAkb3Bjb2RlLT5tbmVtb25pYygpIGVxICJsZWEiKTsKIAkgICAgfQotCX0gZWxzaWYgKGRlZmluZWQoJHNyYykpIHsKLQkgICAgcHJpbnRmICJcdCVzXHQlcyIsJG9wY29kZS0+b3V0KCksJHNyYy0+b3V0KCRzeik7CisJICAgIHByaW50ZiAiXHQlc1x0JXMiLCRpbnNuLGpvaW4oIiwiLG1hcCgkXy0+b3V0KCRzeiksQGFyZ3MpKTsKIAl9IGVsc2UgewogCSAgICBwcmludGYgIlx0JXMiLCRvcGNvZGUtPm91dCgpOwogCX0KQEAgLTQ4NiwxMSArNjc3LDEyIEBACiAgICAgcHJpbnQgJGxpbmUsIlxuIjsKIH0KIAotcHJpbnQgIlxuJGN1cnJlbnRfc2VnbWVudFx0RU5EU1xuRU5EXG4iIGlmICgkbWFzbSk7CitwcmludCAiXG4kY3VycmVudF9zZWdtZW50XHRFTkRTXG4iCWlmICgkY3VycmVudF9zZWdtZW50ICYmICRtYXNtKTsKK3ByaW50ICJFTkRcbiIJCQkJaWYgKCRtYXNtKTsKIAogY2xvc2UgU1RET1VUOwogCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisMIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBDcm9zcy1yZWZlcmVuY2UgeDg2XzY0IEFCSSAiY2FyZCIKICMKICMgCQlVbml4CQlXaW42NApAQCAtNTU0LDMgKzc0NiwxNjEgQEAKICMJbW92cQkxNiglcnNwKSwlcnNpCiAjIGVuZGlmCiAjCXJldAorIworDCMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgV2luNjQgU0VILCBTdHJ1Y3R1cmVkIEV4Y2VwdGlvbiBIYW5kbGluZy4KKyMKKyMgVW5saWtlIG9uIFVuaXggc3lzdGVtcygqKSBsYWNrIG9mIFdpbjY0IHN0YWNrIHVud2luZGluZyBpbmZvcm1hdGlvbgorIyBoYXMgdW5kZXNpcmVkIHNpZGUtZWZmZWN0IGF0IHJ1bi10aW1lOiBpZiBhbiBleGNlcHRpb24gaXMgcmFpc2VkIGluCisjIGFzc2VtYmxlciBzdWJyb3V0aW5lIHN1Y2ggYXMgdGhvc2UgaW4gcXVlc3Rpb24gKGJhc2ljYWxseSB3ZSdyZQorIyByZWZlcnJpbmcgdG8gc2VnbWVudGF0aW9uIHZpb2xhdGlvbnMgY2F1c2VkIGJ5IG1hbGZvcm1lZCBpbnB1dAorIyBwYXJhbWV0ZXJzKSwgdGhlIGFwcGxpY2F0aW9uIGlzIGJyaXNrbHkgdGVybWluYXRlZCB3aXRob3V0IGludm9raW5nCisjIGFueSBleGNlcHRpb24gaGFuZGxlcnMsIG1vc3Qgbm90YWJseSB3aXRob3V0IGdlbmVyYXRpbmcgbWVtb3J5IGR1bXAKKyMgb3IgYW55IHVzZXIgbm90aWZpY2F0aW9uIHdoYXRzb2V2ZXIuIFRoaXMgcG9zZXMgYSBwcm9ibGVtLiBJdCdzCisjIHBvc3NpYmxlIHRvIGFkZHJlc3MgaXQgYnkgcmVnaXN0ZXJpbmcgY3VzdG9tIGxhbmd1YWdlLXNwZWNpZmljCisjIGhhbmRsZXIgdGhhdCB3b3VsZCByZXN0b3JlIHByb2Nlc3NvciBjb250ZXh0IHRvIHRoZSBzdGF0ZSBhdAorIyBzdWJyb3V0aW5lIGVudHJ5IHBvaW50IGFuZCByZXR1cm4gImV4Y2VwdGlvbiBpcyBub3QgaGFuZGxlZCwga2VlcAorIyB1bndpbmRpbmciIGNvZGUuIFdyaXRpbmcgc3VjaCBoYW5kbGVyIGNhbiBiZSBhIGNoYWxsZW5nZS4uLiBCdXQgaXQncworIyBkb2FibGUsIHRob3VnaCByZXF1aXJlcyBjZXJ0YWluIGNvZGluZyBjb252ZW50aW9uLiBDb25zaWRlciBmb2xsb3dpbmcKKyMgc25pcHBldDoKKyMKKyMgLnR5cGUJZnVuY3Rpb24sQGZ1bmN0aW9uCisjIGZ1bmN0aW9uOgorIwltb3ZxCSVyc3AsJXJheAkjIGNvcHkgcnNwIHRvIHZvbGF0aWxlIHJlZ2lzdGVyCisjCXB1c2hxCSVyMTUJCSMgc2F2ZSBub24tdm9sYXRpbGUgcmVnaXN0ZXJzCisjCXB1c2hxCSVyYngKKyMJcHVzaHEJJXJicAorIwltb3ZxCSVyc3AsJXIxMQorIwlzdWJxCSVyZGksJXIxMQkjIHByZXBhcmUgW3ZhcmlhYmxlXSBzdGFjayBmcmFtZQorIwlhbmRxCSQtNjQsJXIxMQorIwltb3ZxCSVyYXgsMCglcjExKQkjIGNoZWNrIGZvciBleGNlcHRpb25zCisjCW1vdnEJJXIxMSwlcnNwCSMgYWxsb2NhdGUgW3ZhcmlhYmxlXSBzdGFjayBmcmFtZQorIwltb3ZxCSVyYXgsMCglcnNwKQkjIHNhdmUgb3JpZ2luYWwgcnNwIHZhbHVlCisjIG1hZ2ljX3BvaW50OgorIwkuLi4KKyMJbW92cQkwKCVyc3ApLCVyY3gJIyBwdWxsIG9yaWdpbmFsIHJzcCB2YWx1ZQorIwltb3ZxCS0yNCglcmN4KSwlcmJwCSMgcmVzdG9yZSBub24tdm9sYXRpbGUgcmVnaXN0ZXJzCisjCW1vdnEJLTE2KCVyY3gpLCVyYngKKyMJbW92cQktOCglcmN4KSwlcjE1CisjCW1vdnEJJXJjeCwlcnNwCSMgcmVzdG9yZSBvcmlnaW5hbCByc3AKKyMJcmV0CisjIC5zaXplIGZ1bmN0aW9uLC4tZnVuY3Rpb24KKyMKKyMgVGhlIGtleSBpcyB0aGF0IHVwIHRvIG1hZ2ljX3BvaW50IGNvcHkgb2Ygb3JpZ2luYWwgcnNwIHZhbHVlIHJlbWFpbnMKKyMgaW4gY2hvc2VuIHZvbGF0aWxlIHJlZ2lzdGVyIGFuZCBubyBub24tdm9sYXRpbGUgcmVnaXN0ZXIsIGV4Y2VwdCBmb3IKKyMgcnNwLCBpcyBtb2RpZmllZC4gV2hpbGUgcGFzdCBtYWdpY19wb2ludCByc3AgcmVtYWlucyBjb25zdGFudCB0aWxsCisjIHRoZSB2ZXJ5IGVuZCBvZiB0aGUgZnVuY3Rpb24uIEluIHRoaXMgY2FzZSBjdXN0b20gbGFuZ3VhZ2Utc3BlY2lmaWMKKyMgZXhjZXB0aW9uIGhhbmRsZXIgd291bGQgbG9vayBsaWtlIHRoaXM6CisjCisjIEVYQ0VQVElPTl9ESVNQT1NJVElPTiBoYW5kbGVyIChFWENFUFRJT05fUkVDT1JEICpyZWMsVUxPTkc2NCBmcmFtZSwKKyMJCUNPTlRFWFQgKmNvbnRleHQsRElTUEFUQ0hFUl9DT05URVhUICpkaXNwKQorIyB7CVVMT05HNjQgKnJzcCA9IChVTE9ORzY0ICopY29udGV4dC0+UmF4OworIwlpZiAoY29udGV4dC0+UmlwID49IG1hZ2ljX3BvaW50KQorIwl7ICAgcnNwID0gKChVTE9ORzY0ICoqKWNvbnRleHQtPlJzcClbMF07CisjCSAgICBjb250ZXh0LT5SYnAgPSByc3BbLTNdOworIwkgICAgY29udGV4dC0+UmJ4ID0gcnNwWy0yXTsKKyMJICAgIGNvbnRleHQtPlIxNSA9IHJzcFstMV07CisjCX0KKyMJY29udGV4dC0+UnNwID0gKFVMT05HNjQpcnNwOworIwljb250ZXh0LT5SZGkgPSByc3BbMV07CisjCWNvbnRleHQtPlJzaSA9IHJzcFsyXTsKKyMKKyMJbWVtY3B5IChkaXNwLT5Db250ZXh0UmVjb3JkLGNvbnRleHQsc2l6ZW9mKENPTlRFWFQpKTsKKyMJUnRsVmlydHVhbFVud2luZChVTldfRkxBR19OSEFORExFUixkaXNwLT5JbWFnZUJhc2UsCisjCQlkaXBzLT5Db250cm9sUGMsZGlzcC0+RnVuY3Rpb25FbnRyeSxkaXNwLT5Db250ZXh0UmVjb3JkLAorIwkJJmRpc3AtPkhhbmRsZXJEYXRhLCZkaXNwLT5Fc3RhYmxpc2hlckZyYW1lLE5VTEwpOworIwlyZXR1cm4gRXhjZXB0aW9uQ29udGludWVTZWFyY2g7CisjIH0KKyMKKyMgSXQncyBhcHByb3ByaWF0ZSB0byBpbXBsZW1lbnQgdGhpcyBoYW5kbGVyIGluIGFzc2VtYmxlciwgZGlyZWN0bHkgaW4KKyMgZnVuY3Rpb24ncyBtb2R1bGUuIEluIG9yZGVyIHRvIGRvIHRoYXQgb25lIGhhcyB0byBrbm93IG1lbWJlcnMnCisjIG9mZnNldHMgaW4gQ09OVEVYVCBhbmQgRElTUEFUQ0hFUl9DT05URVhUIHN0cnVjdHVyZXMgYW5kIHNvbWUgY29uc3RhbnQKKyMgdmFsdWVzLiBIZXJlIHRoZXkgYXJlOgorIworIwlDT05URVhULlJheAkJCQkxMjAKKyMJQ09OVEVYVC5SY3gJCQkJMTI4CisjCUNPTlRFWFQuUmR4CQkJCTEzNgorIwlDT05URVhULlJieAkJCQkxNDQKKyMJQ09OVEVYVC5Sc3AJCQkJMTUyCisjCUNPTlRFWFQuUmJwCQkJCTE2MAorIwlDT05URVhULlJzaQkJCQkxNjgKKyMJQ09OVEVYVC5SZGkJCQkJMTc2CisjCUNPTlRFWFQuUjgJCQkJMTg0CisjCUNPTlRFWFQuUjkJCQkJMTkyCisjCUNPTlRFWFQuUjEwCQkJCTIwMAorIwlDT05URVhULlIxMQkJCQkyMDgKKyMJQ09OVEVYVC5SMTIJCQkJMjE2CisjCUNPTlRFWFQuUjEzCQkJCTIyNAorIwlDT05URVhULlIxNAkJCQkyMzIKKyMJQ09OVEVYVC5SMTUJCQkJMjQwCisjCUNPTlRFWFQuUmlwCQkJCTI0OAorIwlDT05URVhULlhtbTYJCQkJNTEyCisjCXNpemVvZihDT05URVhUKQkJCQkxMjMyCisjCURJU1BBVENIRVJfQ09OVEVYVC5Db250cm9sUGMJCTAKKyMJRElTUEFUQ0hFUl9DT05URVhULkltYWdlQmFzZQkJOAorIwlESVNQQVRDSEVSX0NPTlRFWFQuRnVuY3Rpb25FbnRyeQkxNgorIwlESVNQQVRDSEVSX0NPTlRFWFQuRXN0YWJsaXNoZXJGcmFtZQkyNAorIwlESVNQQVRDSEVSX0NPTlRFWFQuVGFyZ2V0SXAJCTMyCisjCURJU1BBVENIRVJfQ09OVEVYVC5Db250ZXh0UmVjb3JkCTQwCisjCURJU1BBVENIRVJfQ09OVEVYVC5MYW5ndWFnZUhhbmRsZXIJNDgKKyMJRElTUEFUQ0hFUl9DT05URVhULkhhbmRsZXJEYXRhCQk1NgorIwlVTldfRkxBR19OSEFORExFUgkJCTAKKyMJRXhjZXB0aW9uQ29udGludWVTZWFyY2gJCQkxCisjCisjIEluIG9yZGVyIHRvIHRpZSB0aGUgaGFuZGxlciB0byB0aGUgZnVuY3Rpb24gb25lIGhhcyB0byBjb21wb3NlCisjIGNvdXBsZSBvZiBzdHJ1Y3R1cmVzOiBvbmUgZm9yIC54ZGF0YSBzZWdtZW50IGFuZCBvbmUgZm9yIC5wZGF0YS4KKyMKKyMgVU5XSU5EX0lORk8gc3RydWN0dXJlIGZvciAueGRhdGEgc2VnbWVudCB3b3VsZCBiZQorIworIyBmdW5jdGlvbl91bndpbmRfaW5mbzoKKyMJLmJ5dGUJOSwwLDAsMAorIwkucnZhCWhhbmRsZXIKKyMKKyMgVGhpcyBzdHJ1Y3R1cmUgZGVzaWduYXRlcyBleGNlcHRpb24gaGFuZGxlciBmb3IgYSBmdW5jdGlvbiB3aXRoCisjIHplcm8tbGVuZ3RoIHByb2xvZ3VlLCBubyBzdGFjayBmcmFtZSBvciBmcmFtZSByZWdpc3Rlci4KKyMKKyMgVG8gZmFjaWxpdGF0ZSBjb21wb3Npbmcgb2YgLnBkYXRhIHN0cnVjdHVyZXMsIGF1dG8tZ2VuZXJhdGVkICJnZWFyIgorIyBwcm9sb2d1ZSBjb3BpZXMgcnNwIHZhbHVlIHRvIHJheCBhbmQgZGVub3RlcyBuZXh0IGluc3RydWN0aW9uIHdpdGgKKyMgLkxTRUhfYmVnaW5fe2Z1bmN0aW9uX25hbWV9IGxhYmVsLiBUaGlzIGVzc2VudGlhbGx5IGRlZmluZXMgdGhlIFNFSAorIyBzdHlsaW5nIHJ1bGUgbWVudGlvbmVkIGluIHRoZSBiZWdpbm5pbmcuIFBvc2l0aW9uIG9mIHRoaXMgbGFiZWwgaXMKKyMgY2hvc2VuIGluIHN1Y2ggbWFubmVyIHRoYXQgcG9zc2libGUgZXhjZXB0aW9ucyByYWlzZWQgaW4gdGhlICJnZWFyIgorIyBwcm9sb2d1ZSB3b3VsZCBiZSBhY2NvdW50ZWQgdG8gY2FsbGVyIGFuZCB1bndvdW5kIGZyb20gbGF0dGVyJ3MgZnJhbWUuCisjIEVuZCBvZiBmdW5jdGlvbiBpcyBtYXJrZWQgd2l0aCByZXNwZWN0aXZlIC5MU0VIX2VuZF97ZnVuY3Rpb25fbmFtZX0KKyMgbGFiZWwuIFRvIHN1bW1hcml6ZSwgLnBkYXRhIHNlZ21lbnQgd291bGQgY29udGFpbgorIworIwkucnZhCS5MU0VIX2JlZ2luX2Z1bmN0aW9uCisjCS5ydmEJLkxTRUhfZW5kX2Z1bmN0aW9uCisjCS5ydmEJZnVuY3Rpb25fdW53aW5kX2luZm8KKyMKKyMgUmVmZXJlbmNlIHRvIGZ1bmN0b25fdW53aW5kX2luZm8gZnJvbSAueGRhdGEgc2VnbWVudCBpcyB0aGUgYW5jaG9yLgorIyBJbiBjYXNlIHlvdSB3b25kZXIgd2h5IHJlZmVyZW5jZXMgYXJlIDMyLWJpdCAucnZhcyBhbmQgbm90IDY0LWJpdAorIyAucXVhZHMuIFJlZmVyZW5jZXMgcHV0IGludG8gdGhlc2UgdHdvIHNlZ21lbnRzIGFyZSByZXF1aXJlZCB0byBiZQorIyAqcmVsYXRpdmUqIHRvIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIGN1cnJlbnQgYmluYXJ5IG1vZHVsZSwgYS5rLmEuCisjIGltYWdlIGJhc2UuIE5vIFdpbjY0IG1vZHVsZSwgYmUgaXQgLmV4ZSBvciAuZGxsLCBjYW4gYmUgbGFyZ2VyIHRoYW4KKyMgMkdCIGFuZCB0aHVzIHN1Y2ggcmVsYXRpdmUgcmVmZXJlbmNlcyBjYW4gYmUgYW5kIGFyZSBhY2NvbW1vZGF0ZWQgaW4KKyMgMzIgYml0cy4KKyMKKyMgSGF2aW5nIHJldmlld2VkIHRoZSBleGFtcGxlIGZ1bmN0aW9uIGNvZGUsIG9uZSBjYW4gYXJndWUgdGhhdCAibW92cQorIyAlcnNwLCVyYXgiIGFib3ZlIGlzIHJlZHVuZGFudC4gSXQgaXMgbm90ISBLZWVwIGluIG1pbmQgdGhhdCBvbiBVbml4CisjIHJheCB3b3VsZCBjb250YWluIGFuIHVuZGVmaW5lZCB2YWx1ZS4gSWYgdGhpcyAib2ZmZW5kcyIgeW91LCB1c2UKKyMgYW5vdGhlciByZWdpc3RlciBhbmQgcmVmcmFpbiBmcm9tIG1vZGlmeWluZyByYXggdGlsbCBtYWdpY19wb2ludCBpcworIyByZWFjaGVkLCBpLmUuIGFzIGlmIGl0IHdhcyBhIG5vbi12b2xhdGlsZSByZWdpc3Rlci4gSWYgbW9yZSByZWdpc3RlcnMKKyMgYXJlIHJlcXVpcmVkIHByaW9yIFt2YXJpYWJsZV0gZnJhbWUgc2V0dXAgaXMgY29tcGxldGVkLCBub3RlIHRoYXQKKyMgbm9ib2R5IHNheXMgdGhhdCB5b3UgY2FuIGhhdmUgb25seSBvbmUgIm1hZ2ljIHBvaW50LiIgWW91IGNhbgorIyAibGliZXJhdGUiIG5vbi12b2xhdGlsZSByZWdpc3RlcnMgYnkgZGVub3RpbmcgbGFzdCBzdGFjayBvZmYtbG9hZAorIyBpbnN0cnVjdGlvbiBhbmQgcmVmbGVjdGluZyBpdCBpbiBmaW5lciBncmFkZSB1bndpbmQgbG9naWMgaW4gaGFuZGxlci4KKyMgQWZ0ZXIgYWxsLCBpc24ndCBpdCB3aHkgaXQncyBjYWxsZWQgKmxhbmd1YWdlLXNwZWNpZmljKiBoYW5kbGVyLi4uCisjCisjIEF0dGVudGl2ZSByZWFkZXIgY2FuIG5vdGljZSB0aGF0IGV4Y2VwdGlvbnMgd291bGQgYmUgbWlzaGFuZGxlZCBpbgorIyBhdXRvLWdlbmVyYXRlZCAiZ2VhciIgZXBpbG9ndWUuIFdlbGwsIGV4Y2VwdGlvbiBlZmZlY3RpdmVseSBjYW4ndAorIyBvY2N1ciB0aGVyZSwgYmVjYXVzZSBpZiBtZW1vcnkgYXJlYSB1c2VkIGJ5IGl0IHdhcyBzdWJqZWN0IHRvCisjIHNlZ21lbnRhdGlvbiB2aW9sYXRpb24sIHRoZW4gaXQgd291bGQgYmUgcmFpc2VkIHVwb24gY2FsbCB0byB0aGUKKyMgZnVuY3Rpb24gKGFuZCBhcyBhbHJlYWR5IG1lbnRpb25lZCBiZSBhY2NvdW50ZWQgdG8gY2FsbGVyLCB3aGljaCBpcworIyBub3QgYSBwcm9ibGVtKS4gSWYgeW91J3JlIHN0aWxsIG5vdCBjb21mb3J0YWJsZSwgdGhlbiBkZWZpbmUgdGFpbAorIyAibWFnaWMgcG9pbnQiIGp1c3QgcHJpb3IgcmV0IGluc3RydWN0aW9uIGFuZCBoYXZlIGhhbmRsZXIgdHJlYXQgaXQuLi4KKyMKKyMgKCopCU5vdGUgdGhhdCB3ZSdyZSB0YWxraW5nIGFib3V0IHJ1bi10aW1lLCBub3QgZGVidWctdGltZS4gTGFjayBvZgorIwl1bndpbmQgaW5mb3JtYXRpb24gbWFrZXMgZGVidWdnaW5nIGhhcmQgb24gYm90aCBXaW5kb3dzIGFuZAorIwlVbml4LiAiVW5saWtlIiByZWZlcmVzIHRvIHRoZSBmYWN0IHRoYXQgb24gVW5peCBzaWduYWwgaGFuZGxlcgorIwl3aWxsIGFsd2F5cyBiZSBpbnZva2VkLCBjb3JlIGR1bXBlZCBhbmQgYXBwcm9wcmlhdGUgZXhpdCBjb2RlCisjCXJldHVybmVkIHRvIHBhcmVudCAoZm9yIHVzZXIgbm90aWZpY2F0aW9uKS4KZGlmZiAtLWdpdCBhL2NyeXB0by9wZXJsYXNtL3g4NmFzbS5wbCBiL2NyeXB0by9wZXJsYXNtL3g4NmFzbS5wbAppbmRleCA1OTc5MTIyLi4yODA4MGNhIDEwMDY0NAotLS0gYS9jcnlwdG8vcGVybGFzbS94ODZhc20ucGwKKysrIGIvY3J5cHRvL3Blcmxhc20veDg2YXNtLnBsCkBAIC0xLDEzMCArMSwyMDcgQEAKLSMhL3Vzci9sb2NhbC9iaW4vcGVybAorIyEvdXNyL2Jpbi9lbnYgcGVybAogCiAjIHJlcXVpcmUgJ3g4NmFzbS5wbCc7Ci0jICZhc21faW5pdCgiY3BwIiwiZGVzLTU4Ni5wbCIpOwotIyBYWFgKLSMgWFhYCi0jIG1haW4nYXNtX2ZpbmlzaAorIyAmYXNtX2luaXQoPGZsYXZvcj4sImRlcy01ODYucGwiWywkaTM4Nm9ubHldKTsKKyMgJmZ1bmN0aW9uX2JlZ2luKCJmb28iKTsKKyMgLi4uCisjICZmdW5jdGlvbl9lbmQoImZvbyIpOworIyAmYXNtX2ZpbmlzaAogCi1zdWIgbWFpbidhc21fZmluaXNoCi0JewotCSZmaWxlX2VuZCgpOwotCSZhc21fZmluaXNoX2NwcCgpIGlmICRjcHA7Ci0JcHJpbnQgJmFzbV9nZXRfb3V0cHV0KCk7Ci0JfQorJG91dD0oKTsKKyRpMzg2PTA7CiAKLXN1YiBtYWluJ2FzbV9pbml0Ci0JewotCSgkdHlwZSwkZm4sJGkzODYpPUBfOwotCSRmaWxlbmFtZT0kZm47CisjIEFVVE9MT0FEIGlzIHRoaXMgY29udGV4dCBoYXMgcXVpdGUgdW5wbGVhc2FudCBzaWRlIGVmZmVjdCwgbmFtZWx5CisjIHRoYXQgdHlwb3MgaW4gZnVuY3Rpb24gY2FsbHMgZWZmZWN0aXZlbHkgZ28gdG8gYXNzZW1ibGVyIG91dHB1dCwKKyMgYnV0IG9uIHRoZSBwcm9zIHNpZGUgd2UgZG9uJ3QgaGF2ZSB0byBpbXBsZW1lbnQgb25lIHN1YnJvdXRpbmUgcGVyCisjIGVhY2ggb3Bjb2RlLi4uCitzdWIgOjpBVVRPTE9BRAoreyBteSAkb3Bjb2RlID0gJEFVVE9MT0FEOwogCi0JJGVsZj0kY3BwPSRjb2ZmPSRhb3V0PSR3aW4zMj0kbmV0d2FyZT0kbXdlcmtzPTA7Ci0JaWYgKAkoJHR5cGUgZXEgImVsZiIpKQotCQl7ICRlbGY9MTsgcmVxdWlyZSAieDg2dW5peC5wbCI7IH0KLQllbHNpZiAoCSgkdHlwZSBlcSAiYS5vdXQiKSkKLQkJeyAkYW91dD0xOyByZXF1aXJlICJ4ODZ1bml4LnBsIjsgfQotCWVsc2lmICgJKCR0eXBlIGVxICJjb2ZmIiBvciAkdHlwZSBlcSAiZ2Fzd2luIikpCi0JCXsgJGNvZmY9MTsgcmVxdWlyZSAieDg2dW5peC5wbCI7IH0KLQllbHNpZiAoCSgkdHlwZSBlcSAiY3BwIikpCi0JCXsgJGNwcD0xOyByZXF1aXJlICJ4ODZ1bml4LnBsIjsgfQotCWVsc2lmICgJKCR0eXBlIGVxICJ3aW4zMiIpKQotCQl7ICR3aW4zMj0xOyByZXF1aXJlICJ4ODZtcy5wbCI7IH0KLQllbHNpZiAoCSgkdHlwZSBlcSAid2luMzJuIikpCi0JCXsgJHdpbjMyPTE7IHJlcXVpcmUgIng4Nm5hc20ucGwiOyB9Ci0JZWxzaWYgKAkoJHR5cGUgZXEgIm53LW5hc20iKSkKLQkJeyAkbmV0d2FyZT0xOyByZXF1aXJlICJ4ODZuYXNtLnBsIjsgfQotCWVsc2lmICgJKCR0eXBlIGVxICJudy1td2FzbSIpKQotCQl7ICRuZXR3YXJlPTE7ICRtd2Vya3M9MTsgcmVxdWlyZSAieDg2bmFzbS5wbCI7IH0KLQllbHNlCi0JCXsKLQkJcHJpbnQgU1RERVJSIDw8IkVPRiI7CisgICAgZGllICJtb3JlIHRoYW4gNCBhcmd1bWVudHMgcGFzc2VkIHRvICRvcGNvZGUiIGlmICgkI18+Myk7CisKKyAgICAkb3Bjb2RlID1+IHMvLio6Oi8vOworICAgIGlmICAgICgkb3Bjb2RlID1+IC9ecHVzaC8pIHsgJHN0YWNrKz00OyB9CisgICAgZWxzaWYgKCRvcGNvZGUgPX4gL15wb3AvKSAgeyAkc3RhY2stPTQ7IH0KKworICAgICZnZW5lcmljKCRvcGNvZGUsQF8pIG9yIGRpZSAidW5kZWZpbmVkIHN1YnJvdXRpbmUgXCYkQVVUT0xPQUQiOworfQorCitzdWIgOjplbWl0Cit7IG15ICRvcGNvZGU9c2hpZnQ7CisKKyAgICBpZiAoJCNfPT0tMSkgICAgeyBwdXNoKEBvdXQsIlx0JG9wY29kZVxuIik7CQkJCX0KKyAgICBlbHNlICAgICAgICAgICAgeyBwdXNoKEBvdXQsIlx0JG9wY29kZVx0Ii5qb2luKCcsJyxAXykuIlxuIik7CX0KK30KKworc3ViIDo6TEIKK3sgICAkX1swXSA9fiBtL15lPyhbYS1kXSl4JC9vIG9yIGRpZSAiJF9bMF0gZG9lcyBub3QgaGF2ZSBhICdsb3cgYnl0ZSciOworICAkMS4ibCI7Cit9CitzdWIgOjpIQgoreyAgICRfWzBdID1+IG0vXmU/KFthLWRdKXgkL28gb3IgZGllICIkX1swXSBkb2VzIG5vdCBoYXZlIGEgJ2hpZ2ggYnl0ZSciOworICAkMS4iaCI7Cit9CitzdWIgOjpzdGFja19wdXNoeyBteSAkbnVtPSRfWzBdKjQ7ICRzdGFjays9JG51bTsgJnN1YigiZXNwIiwkbnVtKTsJfQorc3ViIDo6c3RhY2tfcG9wCXsgbXkgJG51bT0kX1swXSo0OyAkc3RhY2stPSRudW07ICZhZGQoImVzcCIsJG51bSk7CX0KK3N1YiA6OmJsaW5kcG9wCXsgJnBvcCgkX1swXSk7ICRzdGFjays9NDsJCQkJfQorc3ViIDo6d3BhcmFtCXsgJkRXUCgkc3RhY2srNCokX1swXSwiZXNwIik7CQkJCX0KK3N1YiA6OnN3dG1wCXsgJkRXUCg0KiRfWzBdLCJlc3AiKTsJCQkJCX0KKworc3ViIDo6YnN3YXAKK3sgICBpZiAoJGkzODYpCSMgZW11bGF0ZSBic3dhcCBmb3IgaTM4NgorICAgIHsJJmNvbW1lbnQoImJzd2FwIEBfIik7CisJJnhjaGcoJkhCKEBfKSwmTEIoQF8pKTsKKwkmcm9yIChAXywxNik7CisJJnhjaGcoJkhCKEBfKSwmTEIoQF8pKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsJJmdlbmVyaWMoImJzd2FwIixAXyk7CX0KK30KKyMgVGhlc2UgYXJlIG1hZGUtdXAgb3Bjb2RlcyBpbnRyb2R1Y2VkIG92ZXIgdGhlIHllYXJzIGVzc2VudGlhbGx5CisjIGJ5IGlnbm9yYW5jZSwganVzdCBhbGlhcyB0aGVtIHRvIHJlYWwgb25lcy4uLgorc3ViIDo6bW92Ygl7ICZtb3YoQF8pOwl9CitzdWIgOjp4b3JiCXsgJnhvcihAXyk7CX0KK3N1YiA6OnJvdGwJeyAmcm9sKEBfKTsJfQorc3ViIDo6cm90cgl7ICZyb3IoQF8pOwl9CitzdWIgOjpleGNoCXsgJnhjaGcoQF8pOwl9CitzdWIgOjpoYWx0CXsgJmhsdDsJCX0KK3N1YiA6Om1vdnoJeyAmbW92engoQF8pOwl9CitzdWIgOjpwdXNoZgl7ICZwdXNoZmQ7CX0KK3N1YiA6OnBvcGYJeyAmcG9wZmQ7CX0KKworIyAzIGFyZ3VtZW50IGluc3RydWN0aW9ucworc3ViIDo6bW92cQoreyBteSgkcDEsJHAyLCRvcHRpbWl6ZSk9QF87CisKKyAgICBpZiAoJG9wdGltaXplICYmICRwMT1+L15tbVswLTddJC8gJiYgJHAyPX4vXm1tWzAtN10kLykKKyAgICAjIG1vdnEgYmV0d2VlbiBtbXggcmVnaXN0ZXJzIGNhbiBzaW5rIEludGVsIENQVXMKKyAgICB7CSY6OnBzaHVmdygkcDEsJHAyLDB4ZTQpOwkJfQorICAgIGVsc2UKKyAgICB7CSY6OmdlbmVyaWMoIm1vdnEiLEBfKTsJCQl9Cit9CisKKyMgbGFiZWwgbWFuYWdlbWVudAorJGxiZGVjb3I9IkwiOwkJIyBsb2NhbCBsYWJlbCBkZWNvcmF0aW9uLCBzZXQgYnkgcGFja2FnZQorJGxhYmVsPSIwMDAiOworCitzdWIgOjppc2xhYmVsCQkjIHNlZSBpcyBhcmd1bWVudCBpcyBhIGtub3duIGxhYmVsCit7IG15ICRpOworICAgIGZvcmVhY2ggJGkgKHZhbHVlcyAlbGFiZWwpIHsgcmV0dXJuICRpIGlmICgkaSBlcSAkX1swXSk7IH0KKyAgJGxhYmVseyRfWzBdfTsJIyBjYW4gYmUgdW5kZWYKK30KKworc3ViIDo6bGFiZWwJCSMgaW5zdGFudGlhdGUgYSBmdW5jdGlvbi1zY29wZSBsYWJlbAoreyAgIGlmICghZGVmaW5lZCgkbGFiZWx7JF9bMF19KSkKKyAgICB7CSRsYWJlbHskX1swXX09IiR7bGJkZWNvcn0ke2xhYmVsfSR7X1swXX0iOyAkbGFiZWwrKzsgICB9CisgICRsYWJlbHskX1swXX07Cit9CisKK3N1YiA6OkxBQkVMCQkjIGluc3RhbnRpYXRlIGEgZmlsZS1zY29wZSBsYWJlbAoreyAgICRsYWJlbHskX1swXX09JF9bMV0gaWYgKCFkZWZpbmVkKCRsYWJlbHskX1swXX0pKTsKKyAgJGxhYmVseyRfWzBdfTsKK30KKworc3ViIDo6c3RhdGljX2xhYmVsCXsgJjo6TEFCRUwoJF9bMF0sJGxiZGVjb3IuJF9bMF0pOyB9CisKK3N1YiA6OnNldF9sYWJlbF9CCXsgcHVzaChAb3V0LCJAXzpcbiIpOyB9CitzdWIgOjpzZXRfbGFiZWwKK3sgbXkgJGxhYmVsPSY6OmxhYmVsKCRfWzBdKTsKKyAgICAmOjphbGlnbigkX1sxXSkgaWYgKCRfWzFdPjEpOworICAgICY6OnNldF9sYWJlbF9CKCRsYWJlbCk7CisgICRsYWJlbDsKK30KKworc3ViIDo6d2lwZV9sYWJlbHMJIyB3aXBlcyBmdW5jdGlvbi1zY29wZSBsYWJlbHMKK3sgICBmb3JlYWNoICRpIChrZXlzICVsYWJlbCkKKyAgICB7CWRlbGV0ZSAkbGFiZWx7JGl9IGlmICgkbGFiZWx7JGl9ID1+IC9eXFEke2xiZGVjb3J9XEVbMC05XXszfS8pOwl9Cit9CisKKyMgc3Vicm91dGluZSBtYW5hZ2VtZW50CitzdWIgOjpmdW5jdGlvbl9iZWdpbgoreyAgICZmdW5jdGlvbl9iZWdpbl9CKEBfKTsKKyAgICAkc3RhY2s9NDsKKyAgICAmcHVzaCgiZWJwIik7CisgICAgJnB1c2goImVieCIpOworICAgICZwdXNoKCJlc2kiKTsKKyAgICAmcHVzaCgiZWRpIik7Cit9CisKK3N1YiA6OmZ1bmN0aW9uX2VuZAoreyAgICZwb3AoImVkaSIpOworICAgICZwb3AoImVzaSIpOworICAgICZwb3AoImVieCIpOworICAgICZwb3AoImVicCIpOworICAgICZyZXQoKTsKKyAgICAmZnVuY3Rpb25fZW5kX0IoQF8pOworICAgICRzdGFjaz0wOworICAgICZ3aXBlX2xhYmVscygpOworfQorCitzdWIgOjpmdW5jdGlvbl9lbmRfQQoreyAgICZwb3AoImVkaSIpOworICAgICZwb3AoImVzaSIpOworICAgICZwb3AoImVieCIpOworICAgICZwb3AoImVicCIpOworICAgICZyZXQoKTsKKyAgICAkc3RhY2srPTE2OwkjIHJlYWRqdXN0IGVzcCBhcyBpZiB3ZSBkaWRuJ3QgcG9wIGFueXRoaW5nCit9CisKK3N1YiA6OmFzY2l6Cit7IG15IEBzdHI9dW5wYWNrKCJDKiIsc2hpZnQpOworICAgIHB1c2ggQHN0ciwwOworICAgIHdoaWxlICgkI3N0cj4xNSkgeworCSZkYXRhX2J5dGUoQHN0clswLi4xNV0pOworCWZvcmVhY2ggKDAuLjE1KSB7IHNoaWZ0IEBzdHI7IH0KKyAgICB9CisgICAgJmRhdGFfYnl0ZShAc3RyKSBpZiAoQHN0cik7Cit9CisKK3N1YiA6OmFzbV9maW5pc2gKK3sgICAmZmlsZV9lbmQoKTsKKyAgICBwcmludCBAb3V0OworfQorCitzdWIgOjphc21faW5pdAoreyBteSAoJHR5cGUsJGZuLCRjcHUpPUBfOworCisgICAgJGZpbGVuYW1lPSRmbjsKKyAgICAkaTM4Nj0kY3B1OworCisgICAgJGVsZj0kY3BwPSRjb2ZmPSRhb3V0PSRtYWNvc3g9JHdpbjMyPSRuZXR3YXJlPSRtd2Vya3M9MDsKKyAgICBpZiAgICAoKCR0eXBlIGVxICJlbGYiKSkKKyAgICB7CSRlbGY9MTsJCQlyZXF1aXJlICJ4ODZnYXMucGwiOwl9CisgICAgZWxzaWYgKCgkdHlwZSBlcSAiYVwub3V0IikpCisgICAgewkkYW91dD0xOwkJcmVxdWlyZSAieDg2Z2FzLnBsIjsJfQorICAgIGVsc2lmICgoJHR5cGUgZXEgImNvZmYiIG9yICR0eXBlIGVxICJnYXN3aW4iKSkKKyAgICB7CSRjb2ZmPTE7CQlyZXF1aXJlICJ4ODZnYXMucGwiOwl9CisgICAgZWxzaWYgKCgkdHlwZSBlcSAid2luMzJuIikpCisgICAgewkkd2luMzI9MTsJCXJlcXVpcmUgIng4Nm5hc20ucGwiOwl9CisgICAgZWxzaWYgKCgkdHlwZSBlcSAibnctbmFzbSIpKQorICAgIHsJJG5ldHdhcmU9MTsJCXJlcXVpcmUgIng4Nm5hc20ucGwiOwl9CisgICAgI2Vsc2lmICgoJHR5cGUgZXEgIm53LW13YXNtIikpCisgICAgI3sJJG5ldHdhcmU9MTsgJG13ZXJrcz0xOwlyZXF1aXJlICJ4ODZuYXNtLnBsIjsJfQorICAgIGVsc2lmICgoJHR5cGUgZXEgIndpbjMyIikpCisgICAgewkkd2luMzI9MTsJCXJlcXVpcmUgIng4Nm1hc20ucGwiOwl9CisgICAgZWxzaWYgKCgkdHlwZSBlcSAibWFjb3N4IikpCisgICAgewkkYW91dD0xOyAkbWFjb3N4PTE7CXJlcXVpcmUgIng4Nmdhcy5wbCI7CX0KKyAgICBlbHNlCisgICAgewlwcmludCBTVERFUlIgPDwiRU9GIjsKIFBpY2sgb25lIHRhcmdldCB0eXBlIGZyb20KIAllbGYJLSBMaW51eCwgRnJlZUJTRCwgU29sYXJpcyB4ODYsIGV0Yy4KLQlhLm91dAktIE9wZW5CU0QsIERKR1BQLCBldGMuCisJYS5vdXQJLSBESkdQUCwgZWxkZXIgT3BlbkJTRCwgZXRjLgogCWNvZmYJLSBHQVMvQ09GRiBzdWNoIGFzIFdpbjMyIHRhcmdldHMKLQl3aW4zMgktIFdpbmRvd3MgOTUvV2luZG93cyBOVAogCXdpbjMybgktIFdpbmRvd3MgOTUvV2luZG93cyBOVCBOQVNNIGZvcm1hdAogCW53LW5hc20gLSBOZXRXYXJlIE5BU00gZm9ybWF0Ci0JbnctbXdhc20tIE5ldFdhcmUgTWV0cm93ZXJrcyBBc3NlbWJsZXIKKwltYWNvc3gJLSBNYWMgT1MgWAogRU9GCi0JCWV4aXQoMSk7Ci0JCX0KKwlleGl0KDEpOworICAgIH0KIAotCSRwaWM9MDsKLQlmb3IgKEBBUkdWKSB7CSRwaWM9MSBpZiAoL1wtW2ZLXVBJQy9pKTsJfQorICAgICRwaWM9MDsKKyAgICBmb3IgKEBBUkdWKSB7ICRwaWM9MSBpZiAoL1wtW2ZLXVBJQy9pKTsgfQogCi0JJmFzbV9pbml0X291dHB1dCgpOwotCi0mY29tbWVudCgiRG9uJ3QgZXZlbiB0aGluayBvZiByZWFkaW5nIHRoaXMgY29kZSIpOwotJmNvbW1lbnQoIkl0IHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSAkZmlsZW5hbWUiKTsKLSZjb21tZW50KCJXaGljaCBpcyBhIHBlcmwgcHJvZ3JhbSB1c2VkIHRvIGdlbmVyYXRlIHRoZSB4ODYgYXNzZW1iZXIgZm9yIik7Ci0mY29tbWVudCgiYW55IG9mIEVMRiwgYS5vdXQsIENPRkYsIFdpbjMyLCAuLi4iKTsKLSZjb21tZW50KCJlcmljIDxlYXlcQGNyeXB0c29mdC5jb20+Iik7Ci0mY29tbWVudCgiIik7Ci0KLQkkZmlsZW5hbWUgPX4gcy9cLnBsJC8vOwotCSZmaWxlKCRmaWxlbmFtZSk7Ci0JfQotCi1zdWIgYXNtX2ZpbmlzaF9jcHAKLQl7Ci0JcmV0dXJuIHVubGVzcyAkY3BwOwotCi0JbG9jYWwoJHRtcCwkaSk7Ci0JZm9yZWFjaCAkaSAoJmdldF9sYWJlbHMoKSkKLQkJewotCQkkdG1wLj0iI2RlZmluZSAkaSBfJGlcbiI7Ci0JCX0KLQlwcmludCA8PCJFT0YiOwotLyogUnVuIHRoZSBDIHByZS1wcm9jZXNzb3Igb3ZlciB0aGlzIGZpbGUgd2l0aCBvbmUgb2YgdGhlIGZvbGxvd2luZyBkZWZpbmVkCi0gKiBFTEYgLSBlbGYgb2JqZWN0IGZpbGVzLAotICogT1VUIC0gYS5vdXQgb2JqZWN0IGZpbGVzLAotICogQlNESSAtIEJTREkgc3R5bGUgYS5vdXQgb2JqZWN0IGZpbGVzCi0gKiBTT0wgLSBTb2xhcmlzIHN0eWxlIGVsZgotICovCi0KLSNkZWZpbmUgVFlQRShhLGIpICAgICAgIC50eXBlICAgYSxiCi0jZGVmaW5lIFNJWkUoYSxiKSAgICAgICAuc2l6ZSAgIGEsYgotCi0jaWYgZGVmaW5lZChPVVQpIHx8IChkZWZpbmVkKEJTREkpICYmICFkZWZpbmVkKEVMRikpCi0kdG1wCi0jZW5kaWYKLQotI2lmZGVmIE9VVAotI2RlZmluZSBPSwkxCi0jZGVmaW5lIEFMSUdOCTQKLSNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX19ESkdQUF9fKSB8fCAoX19NSU5HVzMyX18pCi0jdW5kZWYgU0laRQotI3VuZGVmIFRZUEUKLSNkZWZpbmUgU0laRShhLGIpCi0jZGVmaW5lIFRZUEUoYSxiKQkuZGVmIGE7IC5zY2wgMjsgLnR5cGUgMzI7IC5lbmRlZgotI2VuZGlmIC8qIF9fQ1lHV0lOIHx8IF9fREpHUFAgKi8KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCU0RJKSAmJiAhZGVmaW5lZChFTEYpCi0jZGVmaW5lIE9LICAgICAgICAgICAgICAxCi0jZGVmaW5lIEFMSUdOICAgICAgICAgICA0Ci0jdW5kZWYgU0laRQotI3VuZGVmIFRZUEUKLSNkZWZpbmUgU0laRShhLGIpCi0jZGVmaW5lIFRZUEUoYSxiKQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEVMRikgfHwgZGVmaW5lZChTT0wpCi0jZGVmaW5lIE9LICAgICAgICAgICAgICAxCi0jZGVmaW5lIEFMSUdOICAgICAgICAgICAxNgotI2VuZGlmCi0KLSNpZm5kZWYgT0sKLVlvdSBuZWVkIHRvIGRlZmluZSBvbmUgb2YKLUVMRiAtIGVsZiBzeXN0ZW1zIC0gbGludXgtZWxmLCBOZXRCU0QgYW5kIERHLVVYCi1PVVQgLSBhLm91dCBzeXN0ZW1zIC0gbGludXgtYS5vdXQgYW5kIEZyZWVCU0QKLVNPTCAtIHNvbGFyaXMgc3lzdGVtcywgd2hpY2ggYXJlIGVsZiB3aXRoIHN0cmFuZ2UgY29tbWVudCBsaW5lcwotQlNESSAtIGEub3V0IHdpdGggYSB2ZXJ5IHByaW1hdGl2ZSB2ZXJzaW9uIG9mIGFzLgotI2VuZGlmCi0KLS8qIExldCB0aGUgQXNzZW1ibGVyIGJlZ2luIDotKSAqLwotRU9GCi0JfQorICAgICRmaWxlbmFtZSA9fiBzL1wucGwkLy87CisgICAgJmZpbGUoJGZpbGVuYW1lKTsKK30KIAogMTsKZGlmZiAtLWdpdCBhL2NyeXB0by9wZXJsYXNtL3g4Nmdhcy5wbCBiL2NyeXB0by9wZXJsYXNtL3g4Nmdhcy5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWFiNzI3Ci0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL3Blcmxhc20veDg2Z2FzLnBsCkBAIC0wLDAgKzEsMjQ3IEBACisjIS91c3IvYmluL2VudiBwZXJsCisKK3BhY2thZ2UgeDg2Z2FzOworCisqb3V0PVxAOjpvdXQ7CisKKyQ6OmxiZGVjb3I9JDo6YW91dD8iTCI6Ii5MIjsJCSMgbG9jYWwgbGFiZWwgZGVjb3JhdGlvbgorJG5tZGVjb3I9KCQ6OmFvdXQgb3IgJDo6Y29mZik/Il8iOiIiOwkjIGV4dGVybmFsIG5hbWUgZGVjb3JhdGlvbgorCiskaW5pdHNlZz0iIjsKKworJGFsaWduPTE2OworJGFsaWduPWxvZygkYWxpZ24pL2xvZygyKSBpZiAoJDo6YW91dCk7CiskY29tX3N0YXJ0PSIjIiBpZiAoJDo6YW91dCBvciAkOjpjb2ZmKTsKKworc3ViIG9wc2l6ZSgpCit7IG15ICRyZWc9c2hpZnQ7CisgICAgaWYgICAgKCRyZWcgPX4gbS9eJWUvbykJCXsgImwiOyB9CisgICAgZWxzaWYgKCRyZWcgPX4gbS9eJVthLWRdW2hsXSQvbykJeyAiYiI7IH0KKyAgICBlbHNpZiAoJHJlZyA9fiBtL14lW3htXS9vKQkJeyB1bmRlZjsgfQorICAgIGVsc2UJCQkJeyAidyI7IH0KK30KKworIyBzd2FwIGFyZ3VtZW50czsKKyMgZXhwYW5kIG9wY29kZSB3aXRoIHNpemUgc3VmZml4OworIyBwcmVmaXggbnVtZXJpYyBjb25zdGFudHMgd2l0aCAkOworc3ViIDo6Z2VuZXJpYworeyBteSgkb3Bjb2RlLEBhcmcpPUBfOworICBteSgkc3VmZml4LCRkc3QsJHNyYyk7CisKKyAgICBAYXJnPXJldmVyc2UoQGFyZyk7CisKKyAgICBmb3IgKEBhcmcpCisgICAgewlzL14oXCo/KShlP1thLWRzaXhwaGxdezJ9KSQvJDElJDIvbzsJIyBncCByZWdpc3RlcnMKKwlzL14oW3h5XT9tbVswLTddKSQvJSQxL287CQkjIHhtbS9tbXggcmVnaXN0ZXJzCisJcy9eKFwtP1swLTldKykkL1wkJDEvbzsJCQkjIGNvbnN0YW50cworCXMvXihcLT8weFswLTlhLWZdKykkL1wkJDEvbzsJCSMgY29uc3RhbnRzCisgICAgfQorCisgICAgJGRzdCA9ICRhcmdbJCNhcmddCQlpZiAoJCNhcmc+PTApOworICAgICRzcmMgPSAkYXJnWyQjYXJnLTFdCWlmICgkI2FyZz49MSk7CisgICAgaWYgICAgKCRkc3QgPX4gbS9eJS9vKQl7ICRzdWZmaXg9Jm9wc2l6ZSgkZHN0KTsgfQorICAgIGVsc2lmICgkc3JjID1+IG0vXiUvbykJeyAkc3VmZml4PSZvcHNpemUoJHNyYyk7IH0KKyAgICBlbHNlCQkJeyAkc3VmZml4PSJsIjsgICAgICAgICAgIH0KKyAgICB1bmRlZiAkc3VmZml4IGlmICgkZHN0ID1+IG0vXiVbeG1dL28gfHwgJHNyYyA9fiBtL14lW3htXS9vKTsKKworICAgIGlmICgkI189PTApCQkJCXsgJjo6ZW1pdCgkb3Bjb2RlKTsJCX0KKyAgICBlbHNpZiAoJG9wY29kZSA9fiBtL15qL28gJiYgJCNfPT0xKQl7ICY6OmVtaXQoJG9wY29kZSxAYXJnKTsJfQorICAgIGVsc2lmICgkb3Bjb2RlIGVxICJjYWxsIiAmJiAkI189PTEpCXsgJjo6ZW1pdCgkb3Bjb2RlLEBhcmcpOwl9CisgICAgZWxzaWYgKCRvcGNvZGUgPX4gbS9ec2V0LyYmICQjXz09MSkJeyAmOjplbWl0KCRvcGNvZGUsQGFyZyk7CX0KKyAgICBlbHNlCQkJCXsgJjo6ZW1pdCgkb3Bjb2RlLiRzdWZmaXgsQGFyZyk7fQorCisgIDE7Cit9CisjCisjIG9wY29kZXMgbm90IGNvdmVyZWQgYnkgOjpnZW5lcmljIGFib3ZlLCBtb3N0bHkgaW5jb25zaXN0ZW50IG5hbWluZ3MuLi4KKyMKK3N1YiA6Om1vdnp4CXsgJjo6bW92emIoQF8pOwkJCX0KK3N1YiA6OnB1c2hmZAl7ICY6OnB1c2hmbDsJCQl9CitzdWIgOjpwb3BmZAl7ICY6OnBvcGZsOwkJCX0KK3N1YiA6OmNwdWlkCXsgJjo6ZW1pdCgiLmJ5dGVcdDB4MGYsMHhhMiIpOwl9CitzdWIgOjpyZHRzYwl7ICY6OmVtaXQoIi5ieXRlXHQweDBmLDB4MzEiKTsJfQorCitzdWIgOjpjYWxsCXsgJjo6ZW1pdCgiY2FsbCIsKCY6OmlzbGFiZWwoJF9bMF0pIG9yICIkbm1kZWNvciRfWzBdIikpOyB9CitzdWIgOjpjYWxsX3B0cgl7ICY6OmdlbmVyaWMoImNhbGwiLCIqJF9bMF0iKTsJfQorc3ViIDo6am1wX3B0cgl7ICY6OmdlbmVyaWMoImptcCIsIiokX1swXSIpOwl9CisKKyo6OmJzd2FwID0gc3ViCXsgJjo6ZW1pdCgiYnN3YXAiLCIlJF9bMF0iKTsJfSBpZiAoISQ6OmkzODYpOworCitzdWIgOjpEV1AKK3sgbXkoJGFkZHIsJHJlZzEsJHJlZzIsJGlkeCk9QF87CisgIG15ICRyZXQ9IiI7CisKKyAgICAkYWRkciA9fiBzL15ccysvLzsKKyAgICAjIHByZXBlbmQgZ2xvYmFsIHJlZmVyZW5jZXMgd2l0aCBvcHRpb25hbCB1bmRlcnNjb3JlCisgICAgJGFkZHIgPX4gcy9eKFteXCtcLTAtOV1bXlwrXC1dKikvJjo6aXNsYWJlbCgkMSkgb3IgIiRubWRlY29yJDEiL2lnZTsKKworICAgICRyZWcxID0gIiUkcmVnMSIgaWYgKCRyZWcxKTsKKyAgICAkcmVnMiA9ICIlJHJlZzIiIGlmICgkcmVnMik7CisKKyAgICAkcmV0IC49ICRhZGRyIGlmICgoJGFkZHIgbmUgIiIpICYmICgkYWRkciBuZSAwKSk7CisKKyAgICBpZiAoJHJlZzIpCisgICAgewkkaWR4IT0gMCBvciAkaWR4PTE7CisJJHJldCAuPSAiKCRyZWcxLCRyZWcyLCRpZHgpIjsKKyAgICB9CisgICAgZWxzaWYgKCRyZWcxKQorICAgIHsJJHJldCAuPSAiKCRyZWcxKSI7CX0KKworICAkcmV0OworfQorc3ViIDo6UVdQCXsgJjo6RFdQKEBfKTsJfQorc3ViIDo6QlAJeyAmOjpEV1AoQF8pOwl9CitzdWIgOjpCQwl7IEBfOwkJfQorc3ViIDo6RFdDCXsgQF87CQl9CisKK3N1YiA6OmZpbGUKK3sgICBwdXNoKEBvdXQsIi5maWxlXHRcIiRfWzBdLnNcIlxuLnRleHRcbiIpOwl9CisKK3N1YiA6OmZ1bmN0aW9uX2JlZ2luX0IKK3sgbXkgJGZ1bmM9c2hpZnQ7CisgIG15ICRnbG9iYWw9KCRmdW5jICF+IC9eXy8pOworICBteSAkYmVnaW49IiR7OjpsYmRlY29yfV8ke2Z1bmN9X2JlZ2luIjsKKworICAgICY6OkxBQkVMKCRmdW5jLCRnbG9iYWw/IiRiZWdpbiI6IiRubWRlY29yJGZ1bmMiKTsKKyAgICAkZnVuYz0kbm1kZWNvci4kZnVuYzsKKworICAgIHB1c2goQG91dCwiLmdsb2JsXHQkZnVuY1xuIikJaWYgKCRnbG9iYWwpOworICAgIGlmICgkOjpjb2ZmKQorICAgIHsJcHVzaChAb3V0LCIuZGVmXHQkZnVuYztcdC5zY2xcdCIuKDMtJGdsb2JhbCkuIjtcdC50eXBlXHQzMjtcdC5lbmRlZlxuIik7IH0KKyAgICBlbHNpZiAoKCQ6OmFvdXQgYW5kICEkOjpwaWMpIG9yICQ6Om1hY29zeCkKKyAgICB7IH0KKyAgICBlbHNlCisgICAgewlwdXNoKEBvdXQsIi50eXBlCSRmdW5jLFxAZnVuY3Rpb25cbiIpOyB9CisgICAgcHVzaChAb3V0LCIuYWxpZ25cdCRhbGlnblxuIik7CisgICAgcHVzaChAb3V0LCIkZnVuYzpcbiIpOworICAgIHB1c2goQG91dCwiJGJlZ2luOlxuIikJCWlmICgkZ2xvYmFsKTsKKyAgICAkOjpzdGFjaz00OworfQorCitzdWIgOjpmdW5jdGlvbl9lbmRfQgoreyBteSAkZnVuYz1zaGlmdDsKKyAgICBwdXNoKEBvdXQsIi5zaXplXHQkbm1kZWNvciRmdW5jLC4tIi4mOjpMQUJFTCgkZnVuYykuIlxuIikgaWYgKCQ6OmVsZik7CisgICAgJDo6c3RhY2s9MDsKKyAgICAmOjp3aXBlX2xhYmVscygpOworfQorCitzdWIgOjpjb21tZW50CisJeworCWlmICghZGVmaW5lZCgkY29tX3N0YXJ0KSBvciAkOjplbGYpCisJCXsJIyBSZWdhcmRpbmcgJDo6ZWxmIGFib3ZlLi4uCisJCQkjIEdOVSBhbmQgU1ZSNCBhcydlcyB1c2UgZGlmZmVyZW50IGNvbW1lbnQgZGVsaW1pdGVycywKKwkJcHVzaChAb3V0LCJcbiIpOwkjIHNvIHdlIGp1c3Qgc2tpcCBFTEYgY29tbWVudHMuLi4KKwkJcmV0dXJuOworCQl9CisJZm9yZWFjaCAoQF8pCisJCXsKKwkJaWYgKC9eXHMqJC8pCisJCQl7IHB1c2goQG91dCwiXG4iKTsgfQorCQllbHNlCisJCQl7IHB1c2goQG91dCwiXHQkY29tX3N0YXJ0ICRfICRjb21fZW5kXG4iKTsgfQorCQl9CisJfQorCitzdWIgOjpleHRlcm5hbF9sYWJlbAoreyAgIGZvcmVhY2goQF8pIHsgJjo6TEFCRUwoJF8sJG5tZGVjb3IuJF8pOyB9ICAgfQorCitzdWIgOjpwdWJsaWNfbGFiZWwKK3sgICBwdXNoKEBvdXQsIi5nbG9ibFx0Ii4mOjpMQUJFTCgkX1swXSwkbm1kZWNvci4kX1swXSkuIlxuIik7ICAgfQorCitzdWIgOjpmaWxlX2VuZAoreyAgIGlmIChncmVwIHsvXGIke25tZGVjb3J9T1BFTlNTTF9pYTMyY2FwX1BcYi9pfSBAb3V0KSB7CisJbXkgJHRtcD0iLmNvbW1cdCR7bm1kZWNvcn1PUEVOU1NMX2lhMzJjYXBfUCw0IjsKKwlpZiAoJDo6ZWxmKQl7IHB1c2ggKEBvdXQsIiR0bXAsNFxuIik7IH0KKwllbHNlCQl7IHB1c2ggKEBvdXQsIiR0bXBcbiIpOyB9CisgICAgfQorICAgIGlmICgkOjptYWNvc3gpCisgICAgewlpZiAoJW5vbl9sYXp5X3B0cikKKyAgICAJeyAgIHB1c2goQG91dCwiLnNlY3Rpb24gX19JTVBPUlQsX19wb2ludGVycyxub25fbGF6eV9zeW1ib2xfcG9pbnRlcnNcbiIpOworCSAgICBmb3JlYWNoICRpIChrZXlzICVub25fbGF6eV9wdHIpCisJICAgIHsJcHVzaChAb3V0LCIkbm9uX2xhenlfcHRyeyRpfTpcbi5pbmRpcmVjdF9zeW1ib2xcdCRpXG4ubG9uZ1x0MFxuIik7ICAgfQorCX0KKyAgICB9CisgICAgcHVzaChAb3V0LCRpbml0c2VnKSBpZiAoJGluaXRzZWcpOworfQorCitzdWIgOjpkYXRhX2J5dGUJeyAgIHB1c2goQG91dCwiLmJ5dGVcdCIuam9pbignLCcsQF8pLiJcbiIpOyAgIH0KK3N1YiA6OmRhdGFfd29yZCB7ICAgcHVzaChAb3V0LCIubG9uZ1x0Ii5qb2luKCcsJyxAXykuIlxuIik7ICAgfQorCitzdWIgOjphbGlnbgoreyBteSAkdmFsPSRfWzBdLCRwMiwkaTsKKyAgICBpZiAoJDo6YW91dCkKKyAgICB7CWZvciAoJHAyPTA7JHZhbCE9MDskdmFsPj49MSkgeyAkcDIrKzsgfQorCSR2YWw9JHAyLTE7CisJJHZhbC49IiwweDkwIjsKKyAgICB9CisgICAgcHVzaChAb3V0LCIuYWxpZ25cdCR2YWxcbiIpOworfQorCitzdWIgOjpwaWNtZXVwCit7IG15KCRkc3QsJHN5bSwkYmFzZSwkcmVmbGFiZWwpPUBfOworCisgICAgaWYgKCQ6OnBpYyAmJiAoJDo6ZWxmIHx8ICQ6OmFvdXQpKQorICAgIHsJaWYgKCFkZWZpbmVkKCRiYXNlKSkKKwl7ICAgJjo6Y2FsbCgmOjpsYWJlbCgiUElDX21lX3VwIikpOworCSAgICAmOjpzZXRfbGFiZWwoIlBJQ19tZV91cCIpOworCSAgICAmOjpibGluZHBvcCgkZHN0KTsKKwkgICAgJGJhc2U9JGRzdDsKKwkgICAgJHJlZmxhYmVsPSY6OmxhYmVsKCJQSUNfbWVfdXAiKTsKKwl9CisJaWYgKCQ6Om1hY29zeCkKKwl7ICAgbXkgJGluZGlyZWN0PSY6OnN0YXRpY19sYWJlbCgiJG5tZGVjb3Ikc3ltXCRub25fbGF6eV9wdHIiKTsKKwkgICAgJjo6bW92KCRkc3QsJjo6RFdQKCIkaW5kaXJlY3QtJHJlZmxhYmVsIiwkYmFzZSkpOworCSAgICAkbm9uX2xhenlfcHRyeyIkbm1kZWNvciRzeW0ifT0kaW5kaXJlY3Q7CisJfQorCWVsc2UKKwl7ICAgJjo6bGVhKCRkc3QsJjo6RFdQKCJfR0xPQkFMX09GRlNFVF9UQUJMRV8rWy4tJHJlZmxhYmVsXSIsCisJCQkgICAgJGJhc2UpKTsKKwkgICAgJjo6bW92KCRkc3QsJjo6RFdQKCIkc3ltXEBHT1QiLCRkc3QpKTsKKwl9CisgICAgfQorICAgIGVsc2UKKyAgICB7CSY6OmxlYSgkZHN0LCY6OkRXUCgkc3ltKSk7CX0KK30KKworc3ViIDo6aW5pdHNlZworeyBteSAkZj0kbm1kZWNvci5zaGlmdDsKKworICAgIGlmICgkOjplbGYpCisgICAgewkkaW5pdHNlZy49PDxfX187Cisuc2VjdGlvbgkuaW5pdAorCWNhbGwJJGYKKwlqbXAJLkxpbml0YWxpZ24KKy5hbGlnbgkkYWxpZ24KKy5MaW5pdGFsaWduOgorX19fCisgICAgfQorICAgIGVsc2lmICgkOjpjb2ZmKQorICAgIHsgICAkaW5pdHNlZy49PDxfX187CSMgYXBwbGllcyB0byBib3RoIEN5Z3dpbiBhbmQgTWluZ3cKKy5zZWN0aW9uCS5jdG9ycworLmxvbmcJJGYKK19fXworICAgIH0KKyAgICBlbHNpZiAoJDo6bWFjb3N4KQorICAgIHsJJGluaXRzZWcuPTw8X19fOworLm1vZF9pbml0X2Z1bmMKKy5hbGlnbiAyCisubG9uZyAgICRmCitfX18KKyAgICB9CisgICAgZWxzaWYgKCQ6OmFvdXQpCisgICAgewlteSAkY3Rvcj0iJHtubWRlY29yfV9HTE9CQUxfXCRJXCQkZiI7CisJJGluaXRzZWcuPSIudGV4dFxuIjsKKwkkaW5pdHNlZy49Ii50eXBlCSRjdG9yLFxAZnVuY3Rpb25cbiIgaWYgKCQ6OnBpYyk7CisJJGluaXRzZWcuPTw8X19fOwkjIE9wZW5CU0Qgd2F5Li4uCisuZ2xvYmwJJGN0b3IKKy5hbGlnbgkyCiskY3RvcjoKKwlqbXAJJGYKK19fXworICAgIH0KK30KKworc3ViIDo6ZGF0YXNlZworeyAgIHB1c2goQG91dCwiLmRhdGFcbiIpOyAgIH0KKworMTsKZGlmZiAtLWdpdCBhL2NyeXB0by9wZXJsYXNtL3g4Nm1hc20ucGwgYi9jcnlwdG8vcGVybGFzbS94ODZtYXNtLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNTBlNGEKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vcGVybGFzbS94ODZtYXNtLnBsCkBAIC0wLDAgKzEsMTg0IEBACisjIS91c3IvYmluL2VudiBwZXJsCisKK3BhY2thZ2UgeDg2bWFzbTsKKworKm91dD1cQDo6b3V0OworCiskOjpsYmRlY29yPSJcJEwiOwkjIGxvY2FsIGxhYmVsIGRlY29yYXRpb24KKyRubWRlY29yPSJfIjsJCSMgZXh0ZXJuYWwgbmFtZSBkZWNvcmF0aW9uCisKKyRpbml0c2VnPSIiOworJHNlZ21lbnQ9IiI7CisKK3N1YiA6OmdlbmVyaWMKK3sgbXkgKCRvcGNvZGUsQGFyZyk9QF87CisKKyAgICAjIGZpeCBoZXhhZGVjaW1hbCBjb25zdGFudHMKKyAgICBmb3IgKEBhcmcpIHsgcy8weChbMC05YS1mXSspLzAkMWgvb2k7IH0KKworICAgIGlmICgkb3Bjb2RlICF+IC9tb3ZxLykKKyAgICB7CSMgZml4IHhtbSByZWZlcmVuY2VzCisJJGFyZ1swXSA9fiBzL1xiW0EtWl0rV09SRFxzK1BUUi9YTU1XT1JEIFBUUi9pIGlmICgkYXJnWzFdPX4vXGJ4bW1bMC03XVxiL2kpOworCSRhcmdbMV0gPX4gcy9cYltBLVpdK1dPUkRccytQVFIvWE1NV09SRCBQVFIvaSBpZiAoJGFyZ1swXT1+L1xieG1tWzAtN11cYi9pKTsKKyAgICB9CisKKyAgICAmOjplbWl0KCRvcGNvZGUsQGFyZyk7CisgIDE7Cit9CisjCisjIG9wY29kZXMgbm90IGNvdmVyZWQgYnkgOjpnZW5lcmljIGFib3ZlLCBtb3N0bHkgaW5jb25zaXN0ZW50IG5hbWluZ3MuLi4KKyMKK3N1YiA6OmNhbGwJeyAmOjplbWl0KCJjYWxsIiwoJjo6aXNsYWJlbCgkX1swXSkgb3IgIiRubWRlY29yJF9bMF0iKSk7IH0KK3N1YiA6OmNhbGxfcHRyCXsgJjo6ZW1pdCgiY2FsbCIsQF8pOwl9CitzdWIgOjpqbXBfcHRyCXsgJjo6ZW1pdCgiam1wIixAXyk7CX0KKworc3ViIGdldF9tZW0KK3sgbXkoJHNpemUsJGFkZHIsJHJlZzEsJHJlZzIsJGlkeCk9QF87CisgIG15KCRwb3N0LCRyZXQpOworCisgICAgJHJldCAuPSAiJHNpemUgUFRSICIgaWYgKCRzaXplIG5lICIiKTsKKworICAgICRhZGRyID1+IHMvXlxzKy8vOworICAgICMgcHJlcGVuZCBnbG9iYWwgcmVmZXJlbmNlcyB3aXRoIG9wdGlvbmFsIHVuZGVyc2NvcmUKKyAgICAkYWRkciA9fiBzL14oW15cK1wtMC05XVteXCtcLV0qKS8mOjppc2xhYmVsKCQxKSBvciAiJG5tZGVjb3IkMSIvaWdlOworICAgICMgcHV0IGFkZHJlc3MgYXJpdGhtZXRpYyBleHByZXNzaW9uIGluIHBhcmVudGhlc2lzCisgICAgJGFkZHI9IigkYWRkcikiIGlmICgkYWRkciA9fiAvXi4rW1wtXCtdLiskLyk7CisKKyAgICBpZiAoKCRhZGRyIG5lICIiKSAmJiAoJGFkZHIgbmUgMCkpCisgICAgewlpZiAoJGFkZHIgIX4gL14tLykJeyAkcmV0IC49ICIkYWRkciI7ICB9CisJZWxzZQkJCXsgJHBvc3Q9JGFkZHI7ICAgICAgfQorICAgIH0KKyAgICAkcmV0IC49ICJbIjsKKworICAgIGlmICgkcmVnMiBuZSAiIikKKyAgICB7CSRpZHghPTAgb3IgJGlkeD0xOworCSRyZXQgLj0gIiRyZWcyKiRpZHgiOworCSRyZXQgLj0gIiskcmVnMSIgaWYgKCRyZWcxIG5lICIiKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsJJHJldCAuPSAiJHJlZzEiOyAgIH0KKworICAgICRyZXQgLj0gIiRwb3N0XSI7CisgICAgJHJldCA9fiBzL1wrXF0vXS87ICMgaW4gY2FzZSAkYWRkciB3YXMgdGhlIG9ubHkgYXJndW1lbnQKKyAgICAkcmV0ID1+IHMvXFtccypcXS8vOworCisgICRyZXQ7Cit9CitzdWIgOjpCUAl7ICZnZXRfbWVtKCJCWVRFIixAXyk7ICB9CitzdWIgOjpEV1AJeyAmZ2V0X21lbSgiRFdPUkQiLEBfKTsgfQorc3ViIDo6UVdQCXsgJmdldF9tZW0oIlFXT1JEIixAXyk7IH0KK3N1YiA6OkJDCXsgIkBfIjsgIH0KK3N1YiA6OkRXQwl7ICJAXyI7IH0KKworc3ViIDo6ZmlsZQoreyBteSAkdG1wPTw8X19fOworVElUTEUJJF9bMF0uYXNtCitJRiBcQFZlcnNpb24gTFQgODAwCitFQ0hPIE1BU00gdmVyc2lvbiA4LjAwIG9yIGxhdGVyIGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkLgorRU5ESUYKKy40ODYKKy5NT0RFTAlGTEFUCitPUFRJT04JRE9UTkFNRQorSUYgXEBWZXJzaW9uIExUIDgwMAorLnRleHRcJAlTRUdNRU5UIFBBR0UgJ0NPREUnCitFTFNFCisudGV4dFwkCVNFR01FTlQgQUxJR04oNjQpICdDT0RFJworRU5ESUYKK19fXworICAgIHB1c2goQG91dCwkdG1wKTsKKyAgICAkc2VnbWVudCA9ICIudGV4dFwkIjsKK30KKworc3ViIDo6ZnVuY3Rpb25fYmVnaW5fQgoreyBteSAkZnVuYz1zaGlmdDsKKyAgbXkgJGdsb2JhbD0oJGZ1bmMgIX4gL15fLyk7CisgIG15ICRiZWdpbj0iJHs6OmxiZGVjb3J9XyR7ZnVuY31fYmVnaW4iOworCisgICAgJjo6TEFCRUwoJGZ1bmMsJGdsb2JhbD8iJGJlZ2luIjoiJG5tZGVjb3IkZnVuYyIpOworICAgICRmdW5jPSJBTElHTlx0MTZcbiIuJG5tZGVjb3IuJGZ1bmMuIlx0UFJPQyI7CisKKyAgICBpZiAoJGdsb2JhbCkgICAgeyAkZnVuYy49IiBQVUJMSUNcbiR7YmVnaW59OjpcbiI7IH0KKyAgICBlbHNlCSAgICB7ICRmdW5jLj0iIFBSSVZBVEVcbiI7ICAgICAgICAgICAgfQorICAgIHB1c2goQG91dCwkZnVuYyk7CisgICAgJDo6c3RhY2s9NDsKK30KK3N1YiA6OmZ1bmN0aW9uX2VuZF9CCit7IG15ICRmdW5jPXNoaWZ0OworCisgICAgcHVzaChAb3V0LCIkbm1kZWNvciRmdW5jIEVORFBcbiIpOworICAgICQ6OnN0YWNrPTA7CisgICAgJjo6d2lwZV9sYWJlbHMoKTsKK30KKworc3ViIDo6ZmlsZV9lbmQKK3sgbXkgJHhtbWhlYWRlcj08PF9fXzsKKy42ODYKKy5YTU0KK0lGIFxAVmVyc2lvbiBMVCA4MDAKK1hNTVdPUkQgU1RSVUNUIDE2CitEUQkyIGR1cCAoPykKK1hNTVdPUkQJRU5EUworRU5ESUYKK19fXworICAgIGlmIChncmVwIHsvXGJbeF0/bW1bMC03XVxiL2l9IEBvdXQpIHsKKwlncmVwIHtzL1wuWzMtN104Ni8keG1taGVhZGVyL30gQG91dDsKKyAgICB9CisKKyAgICBwdXNoKEBvdXQsIiRzZWdtZW50CUVORFNcbiIpOworCisgICAgaWYgKGdyZXAgey9cYiR7bm1kZWNvcn1PUEVOU1NMX2lhMzJjYXBfUFxiL2l9IEBvdXQpCisgICAgewlteSAkY29tbT08PF9fXzsKKy5ic3MJU0VHTUVOVCAnQlNTJworQ09NTQkke25tZGVjb3J9T1BFTlNTTF9pYTMyY2FwX1A6RFdPUkQKKy5ic3MJRU5EUworX19fCisJIyBjb21tZW50IG91dCBPUEVOU1NMX2lhMzJjYXBfUCBkZWNsYXJhdGlvbnMKKwlncmVwIHtzLyheRVhURVJOXHMrJHtubWRlY29yfU9QRU5TU0xfaWEzMmNhcF9QKS9cOyQxL30gQG91dDsKKwlwdXNoIChAb3V0LCRjb21tKTsKKyAgICB9CisgICAgcHVzaCAoQG91dCwkaW5pdHNlZykgaWYgKCRpbml0c2VnKTsKKyAgICBwdXNoIChAb3V0LCJFTkRcbiIpOworfQorCitzdWIgOjpjb21tZW50IHsgICBmb3JlYWNoIChAXykgeyBwdXNoKEBvdXQsIlx0OyAkX1xuIik7IH0gICB9CisKKyo6OnNldF9sYWJlbF9CID0gc3ViCit7IG15ICRsPXNoaWZ0OyBwdXNoKEBvdXQsJGwuKCRsPX4vXlxRJHs6OmxiZGVjb3J9XEVbMC05XXszfS8/IjpcbiI6Ijo6XG4iKSk7IH07CisKK3N1YiA6OmV4dGVybmFsX2xhYmVsCit7ICAgZm9yZWFjaChAXykKKyAgICB7CXB1c2goQG91dCwgIkVYVEVSTlx0Ii4mOjpMQUJFTCgkXywkbm1kZWNvci4kXykuIjpORUFSXG4iKTsgICB9Cit9CisKK3N1YiA6OnB1YmxpY19sYWJlbAoreyAgIHB1c2goQG91dCwiUFVCTElDXHQiLiY6OkxBQkVMKCRfWzBdLCRubWRlY29yLiRfWzBdKS4iXG4iKTsgICB9CisKK3N1YiA6OmRhdGFfYnl0ZQoreyAgIHB1c2goQG91dCwoIkRCXHQiKS5qb2luKCcsJyxAXykuIlxuIik7CX0KKworc3ViIDo6ZGF0YV93b3JkCit7ICAgcHVzaChAb3V0LCgiRERcdCIpLmpvaW4oJywnLEBfKS4iXG4iKTsJfQorCitzdWIgOjphbGlnbgoreyAgIHB1c2goQG91dCwiQUxJR05cdCRfWzBdXG4iKTsJfQorCitzdWIgOjpwaWNtZXVwCit7IG15KCRkc3QsJHN5bSk9QF87CisgICAgJjo6bGVhKCRkc3QsJjo6RFdQKCRzeW0pKTsKK30KKworc3ViIDo6aW5pdHNlZworeyBteSAkZj0kbm1kZWNvci5zaGlmdDsKKworICAgICRpbml0c2VnLj08PF9fXzsKKy5DUlRcJFhDVQlTRUdNRU5UIERXT1JEIFBVQkxJQyAnREFUQScKK0VYVEVSTgkkZjpORUFSCitERAkkZgorLkNSVFwkWENVCUVORFMKK19fXworfQorCitzdWIgOjpkYXRhc2VnCit7ICAgcHVzaChAb3V0LCIkc2VnbWVudFx0RU5EU1xuX0RBVEFcdFNFR01FTlRcbiIpOyAkc2VnbWVudD0iX0RBVEEiOyAgIH0KKworMTsKZGlmZiAtLWdpdCBhL2NyeXB0by9wZXJsYXNtL3g4Nm1zLnBsIGIvY3J5cHRvL3Blcmxhc20veDg2bXMucGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYmUyOTMuLjAwMDAwMDAKLS0tIGEvY3J5cHRvL3Blcmxhc20veDg2bXMucGwKKysrIC9kZXYvbnVsbApAQCAtMSw0NzIgKzAsMCBAQAotIyEvdXNyL2xvY2FsL2Jpbi9wZXJsCi0KLXBhY2thZ2UgeDg2bXM7Ci0KLSRsYWJlbD0iTDAwMCI7Ci0KLSVsYj0oCSdlYXgnLAknYWwnLAotCSdlYngnLAknYmwnLAotCSdlY3gnLAknY2wnLAotCSdlZHgnLAknZGwnLAotCSdheCcsCSdhbCcsCi0JJ2J4JywJJ2JsJywKLQknY3gnLAknY2wnLAotCSdkeCcsCSdkbCcsCi0JKTsKLQotJWhiPSgJJ2VheCcsCSdhaCcsCi0JJ2VieCcsCSdiaCcsCi0JJ2VjeCcsCSdjaCcsCi0JJ2VkeCcsCSdkaCcsCi0JJ2F4JywJJ2FoJywKLQknYngnLAknYmgnLAotCSdjeCcsCSdjaCcsCi0JJ2R4JywJJ2RoJywKLQkpOwotCi1zdWIgbWFpbidhc21faW5pdF9vdXRwdXQgeyBAb3V0PSgpOyB9Ci1zdWIgbWFpbidhc21fZ2V0X291dHB1dCB7IHJldHVybihAb3V0KTsgfQotc3ViIG1haW4nZ2V0X2xhYmVscyB7IHJldHVybihAbGFiZWxzKTsgfQotc3ViIG1haW4nZXh0ZXJuYWxfbGFiZWwKLXsKLQlwdXNoKEBsYWJlbHMsQF8pOwotCWZvcmVhY2ggKEBfKSB7Ci0JCXB1c2goQG91dCwgIkVYVFJOXHRfJF86RFdPUkRcbiIpOwotCX0KLX0KLQotc3ViIG1haW4nTEIKLQl7Ci0JKGRlZmluZWQoJGxieyRfWzBdfSkpIHx8IGRpZSAiJF9bMF0gZG9lcyBub3QgaGF2ZSBhICdsb3cgYnl0ZSdcbiI7Ci0JcmV0dXJuKCRsYnskX1swXX0pOwotCX0KLQotc3ViIG1haW4nSEIKLQl7Ci0JKGRlZmluZWQoJGhieyRfWzBdfSkpIHx8IGRpZSAiJF9bMF0gZG9lcyBub3QgaGF2ZSBhICdoaWdoIGJ5dGUnXG4iOwotCXJldHVybigkaGJ7JF9bMF19KTsKLQl9Ci0KLXN1YiBtYWluJ0JQCi0JewotCSZnZXRfbWVtKCJCWVRFIixAXyk7Ci0JfQotCi1zdWIgbWFpbidEV1AKLQl7Ci0JJmdldF9tZW0oIkRXT1JEIixAXyk7Ci0JfQotCi1zdWIgbWFpbidRV1AKLQl7Ci0JJmdldF9tZW0oIlFXT1JEIixAXyk7Ci0JfQotCi1zdWIgbWFpbidCQwotCXsKLQlyZXR1cm4gQF87Ci0JfQotCi1zdWIgbWFpbidEV0MKLQl7Ci0JcmV0dXJuIEBfOwotCX0KLQotc3ViIG1haW4nc3RhY2tfcHVzaAotCXsKLQlsb2NhbCgkbnVtKT1AXzsKLQkkc3RhY2srPSRudW0qNDsKLQkmbWFpbidzdWIoImVzcCIsJG51bSo0KTsKLQl9Ci0KLXN1YiBtYWluJ3N0YWNrX3BvcAotCXsKLQlsb2NhbCgkbnVtKT1AXzsKLQkkc3RhY2stPSRudW0qNDsKLQkmbWFpbidhZGQoImVzcCIsJG51bSo0KTsKLQl9Ci0KLXN1YiBnZXRfbWVtCi0JewotCWxvY2FsKCRzaXplLCRhZGRyLCRyZWcxLCRyZWcyLCRpZHgpPUBfOwotCWxvY2FsKCR0LCRwb3N0KTsKLQlsb2NhbCgkcmV0KT0iJHNpemUgUFRSICI7Ci0KLQkkYWRkciA9fiBzL15ccysvLzsKLQlpZiAoJGFkZHIgPX4gL14oLispXCsoLispJC8pCi0JCXsKLQkJJHJlZzI9JmNvbnYoJDEpOwotCQkkYWRkcj0iXyQyIjsKLQkJfQotCWVsc2lmICgkYWRkciA9fiAvXltfYS16XVtfYS16MC05XSokL2kpCi0JCXsKLQkJJGFkZHI9Il8kYWRkciI7Ci0JCX0KLQotCWlmICgkYWRkciA9fiAvXi4rXC0uKyQvKSB7ICRhZGRyPSIoJGFkZHIpIjsgfQotCi0JJHJlZzE9IiRyZWdzeyRyZWcxfSIgaWYgZGVmaW5lZCgkcmVnc3skcmVnMX0pOwotCSRyZWcyPSIkcmVnc3skcmVnMn0iIGlmIGRlZmluZWQoJHJlZ3N7JHJlZzJ9KTsKLQlpZiAoKCRhZGRyIG5lICIiKSAmJiAoJGFkZHIgbmUgMCkpCi0JCXsKLQkJaWYgKCRhZGRyICF+IC9eLS8pCi0JCQl7ICRyZXQuPSRhZGRyOyB9Ci0JCWVsc2UJeyAkcG9zdD0kYWRkcjsgfQotCQl9Ci0JaWYgKCRyZWcyIG5lICIiKQotCQl7Ci0JCSR0PSIiOwotCQkkdD0iKiRpZHgiIGlmICgkaWR4ICE9IDApOwotCQkkcmVnMT0iKyIuJHJlZzEgaWYgKCIkcmVnMSRwb3N0IiBuZSAiIik7Ci0JCSRyZXQuPSJbJHJlZzIkdCRyZWcxJHBvc3RdIjsKLQkJfQotCWVsc2UKLQkJewotCQkkcmV0Lj0iWyRyZWcxJHBvc3RdIgotCQl9Ci0JJHJldCA9fiBzL1xbXF0vLzsJIyBpbiBjYXNlICRhZGRyIHdhcyB0aGUgb25seSBhcmd1bWVudAotCXJldHVybigkcmV0KTsKLQl9Ci0KLXN1YiBtYWluJ21vdgl7ICZvdXQyKCJtb3YiLEBfKTsgfQotc3ViIG1haW4nbW92Ygl7ICZvdXQyKCJtb3YiLEBfKTsgfQotc3ViIG1haW4nYW5kCXsgJm91dDIoImFuZCIsQF8pOyB9Ci1zdWIgbWFpbidvcgl7ICZvdXQyKCJvciIsQF8pOyB9Ci1zdWIgbWFpbidzaGwJeyAmb3V0Migic2hsIixAXyk7IH0KLXN1YiBtYWluJ3Nocgl7ICZvdXQyKCJzaHIiLEBfKTsgfQotc3ViIG1haW4neG9yCXsgJm91dDIoInhvciIsQF8pOyB9Ci1zdWIgbWFpbid4b3JiCXsgJm91dDIoInhvciIsQF8pOyB9Ci1zdWIgbWFpbidhZGQJeyAmb3V0MigiYWRkIixAXyk7IH0KLXN1YiBtYWluJ2FkYwl7ICZvdXQyKCJhZGMiLEBfKTsgfQotc3ViIG1haW4nc3ViCXsgJm91dDIoInN1YiIsQF8pOyB9Ci1zdWIgbWFpbidzYmIJeyAmb3V0Migic2JiIixAXyk7IH0KLXN1YiBtYWluJ3JvdGwJeyAmb3V0Migicm9sIixAXyk7IH0KLXN1YiBtYWluJ3JvdHIJeyAmb3V0Migicm9yIixAXyk7IH0KLXN1YiBtYWluJ2V4Y2gJeyAmb3V0MigieGNoZyIsQF8pOyB9Ci1zdWIgbWFpbidjbXAJeyAmb3V0MigiY21wIixAXyk7IH0KLXN1YiBtYWluJ2xlYQl7ICZvdXQyKCJsZWEiLEBfKTsgfQotc3ViIG1haW4nbXVsCXsgJm91dDEoIm11bCIsQF8pOyB9Ci1zdWIgbWFpbidpbXVsCXsgJm91dDIoImltdWwiLEBfKTsgfQotc3ViIG1haW4nZGl2CXsgJm91dDEoImRpdiIsQF8pOyB9Ci1zdWIgbWFpbidkZWMJeyAmb3V0MSgiZGVjIixAXyk7IH0KLXN1YiBtYWluJ2luYwl7ICZvdXQxKCJpbmMiLEBfKTsgfQotc3ViIG1haW4nam1wCXsgJm91dDEoImptcCIsQF8pOyB9Ci1zdWIgbWFpbidqbXBfcHRyIHsgJm91dDFwKCJqbXAiLEBfKTsgfQotc3ViIG1haW4namUJeyAmb3V0MSgiamUiLEBfKTsgfQotc3ViIG1haW4namxlCXsgJm91dDEoImpsZSIsQF8pOyB9Ci1zdWIgbWFpbidqegl7ICZvdXQxKCJqeiIsQF8pOyB9Ci1zdWIgbWFpbidqZ2UJeyAmb3V0MSgiamdlIixAXyk7IH0KLXN1YiBtYWluJ2psCXsgJm91dDEoImpsIixAXyk7IH0KLXN1YiBtYWluJ2phCXsgJm91dDEoImphIixAXyk7IH0KLXN1YiBtYWluJ2phZQl7ICZvdXQxKCJqYWUiLEBfKTsgfQotc3ViIG1haW4namIJeyAmb3V0MSgiamIiLEBfKTsgfQotc3ViIG1haW4namJlCXsgJm91dDEoImpiZSIsQF8pOyB9Ci1zdWIgbWFpbidqYwl7ICZvdXQxKCJqYyIsQF8pOyB9Ci1zdWIgbWFpbidqbmMJeyAmb3V0MSgiam5jIixAXyk7IH0KLXN1YiBtYWluJ2puegl7ICZvdXQxKCJqbnoiLEBfKTsgfQotc3ViIG1haW4nam5lCXsgJm91dDEoImpuZSIsQF8pOyB9Ci1zdWIgbWFpbidqbm8JeyAmb3V0MSgiam5vIixAXyk7IH0KLXN1YiBtYWluJ3B1c2gJeyAmb3V0MSgicHVzaCIsQF8pOyAkc3RhY2srPTQ7IH0KLXN1YiBtYWluJ3BvcAl7ICZvdXQxKCJwb3AiLEBfKTsgJHN0YWNrLT00OyB9Ci1zdWIgbWFpbidwdXNoZgl7ICZvdXQwKCJwdXNoZmQiKTsgJHN0YWNrKz00OyB9Ci1zdWIgbWFpbidwb3BmCXsgJm91dDAoInBvcGZkIik7ICRzdGFjay09NDsgfQotc3ViIG1haW4nYnN3YXAJeyAmb3V0MSgiYnN3YXAiLEBfKTsgJnVzaW5nNDg2KCk7IH0KLXN1YiBtYWluJ25vdAl7ICZvdXQxKCJub3QiLEBfKTsgfQotc3ViIG1haW4nY2FsbAl7ICZvdXQxKCJjYWxsIiwoJF9bMF09fi9eXCRMLz8nJzonXycpLiRfWzBdKTsgfQotc3ViIG1haW4nY2FsbF9wdHIgeyAmb3V0MXAoImNhbGwiLEBfKTsgfQotc3ViIG1haW4ncmV0CXsgJm91dDAoInJldCIpOyB9Ci1zdWIgbWFpbidub3AJeyAmb3V0MCgibm9wIik7IH0KLXN1YiBtYWluJ3Rlc3QJeyAmb3V0MigidGVzdCIsQF8pOyB9Ci1zdWIgbWFpbididAl7ICZvdXQyKCJidCIsQF8pOyB9Ci1zdWIgbWFpbidsZWF2ZQl7ICZvdXQwKCJsZWF2ZSIpOyB9Ci1zdWIgbWFpbidjcHVpZCAgeyAmb3V0MCgiRFdcdDBBMjBGaCIpOyB9Ci1zdWIgbWFpbidyZHRzYyAgeyAmb3V0MCgiRFdcdDAzMTBGaCIpOyB9Ci1zdWIgbWFpbidoYWx0CXsgJm91dDAoImhsdCIpOyB9Ci1zdWIgbWFpbidtb3Z6CXsgJm91dDIoIm1vdnp4IixAXyk7IH0KLXN1YiBtYWluJ25lZwl7ICZvdXQxKCJuZWciLEBfKTsgfQotc3ViIG1haW4nY2xkCXsgJm91dDAoImNsZCIpOyB9Ci0KLSMgU1NFMgotc3ViIG1haW4nZW1tcwl7ICZvdXQwKCJlbW1zIik7IH0KLXN1YiBtYWluJ21vdmQJeyAmb3V0MigibW92ZCIsQF8pOyB9Ci1zdWIgbWFpbidtb3ZxCXsgJm91dDIoIm1vdnEiLEBfKTsgfQotc3ViIG1haW4nbW92ZHF1CXsgJm91dDIoIm1vdmRxdSIsQF8pOyB9Ci1zdWIgbWFpbidtb3ZkcWEJeyAmb3V0MigibW92ZHFhIixAXyk7IH0KLXN1YiBtYWluJ21vdmRxMnF7ICZvdXQyKCJtb3ZkcTJxIixAXyk7IH0KLXN1YiBtYWluJ21vdnEyZHF7ICZvdXQyKCJtb3ZxMmRxIixAXyk7IH0KLXN1YiBtYWluJ3BhZGRxCXsgJm91dDIoInBhZGRxIixAXyk7IH0KLXN1YiBtYWluJ3BtdWx1ZHF7ICZvdXQyKCJwbXVsdWRxIixAXyk7IH0KLXN1YiBtYWluJ3BzcmxxCXsgJm91dDIoInBzcmxxIixAXyk7IH0KLXN1YiBtYWluJ3BzbGxxCXsgJm91dDIoInBzbGxxIixAXyk7IH0KLXN1YiBtYWluJ3B4b3IJeyAmb3V0MigicHhvciIsQF8pOyB9Ci1zdWIgbWFpbidwb3IJeyAmb3V0MigicG9yIixAXyk7IH0KLXN1YiBtYWluJ3BhbmQJeyAmb3V0MigicGFuZCIsQF8pOyB9Ci0KLXN1YiBvdXQyCi0JewotCWxvY2FsKCRuYW1lLCRwMSwkcDIpPUBfOwotCWxvY2FsKCRsLCR0LCRsaW5lKTsKLQotCSRsaW5lPSJcdCRuYW1lXHQiOwotCSR0PSZjb252KCRwMSkuIiwiOwotCSRsPWxlbmd0aCgkdCk7Ci0JJGxpbmUuPSIkdCI7Ci0JJGw9NC0oJGwrOSkvODsKLQkkbGluZS49Ilx0IiB4ICRsOwotCSRsaW5lLj0mY29udigkcDIpOwotCWlmICgkbGluZT1+L1xieG1tWzAtN11cYi9pKSB7ICRsaW5lPX5zL1xiW0EtWl0rV09SRFxzK1BUUi9YTU1XT1JEIFBUUi9pOyB9Ci0JcHVzaChAb3V0LCRsaW5lLiJcbiIpOwotCX0KLQotc3ViIG91dDAKLQl7Ci0JbG9jYWwoJG5hbWUpPUBfOwotCi0JcHVzaChAb3V0LCJcdCRuYW1lXG4iKTsKLQl9Ci0KLXN1YiBvdXQxCi0JewotCWxvY2FsKCRuYW1lLCRwMSk9QF87Ci0JbG9jYWwoJGwsJHQpOwotCi0JcHVzaChAb3V0LCJcdCRuYW1lXHQiLiZjb252KCRwMSkuIlxuIik7Ci0JfQotCi1zdWIgY29udgotCXsKLQlsb2NhbCgkcCk9QF87Ci0KLQkkcCA9fiBzLzB4KFswLTlBLUZhLWZdKykvMCQxaC87Ci0JcmV0dXJuICRwOwotCX0KLQotc3ViIHVzaW5nNDg2Ci0JewotCXJldHVybiBpZiAkdXNpbmc0ODY7Ci0JJHVzaW5nNDg2Kys7Ci0JZ3JlcChzL1wuMzg2L1wuNDg2LyxAb3V0KTsKLQl9Ci0KLXN1YiBtYWluJ2ZpbGUKLQl7Ci0JbG9jYWwoJGZpbGUpPUBfOwotCi0JbG9jYWwoJHRtcCk9PDwiRU9GIjsKLQlUSVRMRQkkZmlsZS5hc20KLSAgICAgICAgLjM4NgotLm1vZGVsCUZMQVQKLV9URVhUXCQJU0VHTUVOVCBQQUdFICdDT0RFJwotCi1FT0YKLQlwdXNoKEBvdXQsJHRtcCk7Ci0JfQotCi1zdWIgbWFpbidmdW5jdGlvbl9iZWdpbgotCXsKLQlsb2NhbCgkZnVuYywkZXh0cmEpPUBfOwotCi0JcHVzaChAbGFiZWxzLCRmdW5jKTsKLQotCWxvY2FsKCR0bXApPTw8IkVPRiI7Ci1QVUJMSUMJXyRmdW5jCi0kZXh0cmEKLV8kZnVuYyBQUk9DIE5FQVIKLQlwdXNoCWVicAotCXB1c2gJZWJ4Ci0JcHVzaAllc2kKLQlwdXNoCWVkaQotRU9GCi0JcHVzaChAb3V0LCR0bXApOwotCSRzdGFjaz0yMDsKLQl9Ci0KLXN1YiBtYWluJ2Z1bmN0aW9uX2JlZ2luX0IKLQl7Ci0JbG9jYWwoJGZ1bmMsJGV4dHJhKT1AXzsKLQotCWxvY2FsKCR0bXApPTw8IkVPRiI7Ci1QVUJMSUMJXyRmdW5jCi0kZXh0cmEKLV8kZnVuYyBQUk9DIE5FQVIKLUVPRgotCXB1c2goQG91dCwkdG1wKTsKLQkkc3RhY2s9NDsKLQl9Ci0KLXN1YiBtYWluJ2Z1bmN0aW9uX2VuZAotCXsKLQlsb2NhbCgkZnVuYyk9QF87Ci0KLQlsb2NhbCgkdG1wKT08PCJFT0YiOwotCXBvcAllZGkKLQlwb3AJZXNpCi0JcG9wCWVieAotCXBvcAllYnAKLQlyZXQKLV8kZnVuYyBFTkRQCi1FT0YKLQlwdXNoKEBvdXQsJHRtcCk7Ci0JJHN0YWNrPTA7Ci0JJWxhYmVsPSgpOwotCX0KLQotc3ViIG1haW4nZnVuY3Rpb25fZW5kX0IKLQl7Ci0JbG9jYWwoJGZ1bmMpPUBfOwotCi0JbG9jYWwoJHRtcCk9PDwiRU9GIjsKLV8kZnVuYyBFTkRQCi1FT0YKLQlwdXNoKEBvdXQsJHRtcCk7Ci0JJHN0YWNrPTA7Ci0JJWxhYmVsPSgpOwotCX0KLQotc3ViIG1haW4nZnVuY3Rpb25fZW5kX0EKLQl7Ci0JbG9jYWwoJGZ1bmMpPUBfOwotCi0JbG9jYWwoJHRtcCk9PDwiRU9GIjsKLQlwb3AJZWRpCi0JcG9wCWVzaQotCXBvcAllYngKLQlwb3AJZWJwCi0JcmV0Ci1FT0YKLQlwdXNoKEBvdXQsJHRtcCk7Ci0JfQotCi1zdWIgbWFpbidmaWxlX2VuZAotCXsKLQkjIHRyeSB0byBkZXRlY3QgaWYgU1NFMiBvciBNTVggZXh0ZW5zaW9ucyB3ZXJlIHVzZWQuLi4KLQlteSAkeG1taGVhZGVyPTw8X19fOwotLjY4NgotLlhNTQotSUYgXEBWZXJzaW9uIExUIDgwMAotWE1NV09SRCBTVFJVQ1QgMTYKLQlEUSAgMiBkdXAgKD8pCi1YTU1XT1JEIEVORFMKLUVORElGCi1fX18KLQlpZiAoZ3JlcCB7L1xiW3hdP21tWzAtN11cYi9pfSBAb3V0KSB7Ci0JCWdyZXAge3MvXC5bMy03XTg2LyR4bW1oZWFkZXIvfSBAb3V0OwotCQl9Ci0JcHVzaChAb3V0LCJfVEVYVFwkCUVORFNcbiIpOwotCXB1c2goQG91dCwiRU5EXG4iKTsKLQl9Ci0KLXN1YiBtYWluJ3dwYXJhbQotCXsKLQlsb2NhbCgkbnVtKT1AXzsKLQotCXJldHVybigmbWFpbidEV1AoJHN0YWNrKyRudW0qNCwiZXNwIiwiIiwwKSk7Ci0JfQotCi1zdWIgbWFpbidzd3RtcAotCXsKLQlyZXR1cm4oJm1haW4nRFdQKCRfWzBdKjQsImVzcCIsIiIsMCkpOwotCX0KLQotIyBTaG91bGQgdXNlIHN3dG1wLCB3aGljaCBpcyBhYm92ZSBlc3AuICBMaW5peCBjYW4gdHJhc2ggdGhlIHN0YWNrIGFib3ZlIGVzcAotI3N1YiBtYWluJ3d0bXAKLSMJewotIwlsb2NhbCgkbnVtKT1AXzsKLSMKLSMJcmV0dXJuKCZtYWluJ0RXUCgtKCgkbnVtKzEpKjQpLCJlc3AiLCIiLDApKTsKLSMJfQotCi1zdWIgbWFpbidjb21tZW50Ci0JewotCWZvcmVhY2ggKEBfKQotCQl7Ci0JCXB1c2goQG91dCwiXHQ7ICRfXG4iKTsKLQkJfQotCX0KLQotc3ViIG1haW4ncHVibGljX2xhYmVsCi0JewotCSRsYWJlbHskX1swXX09Il8kX1swXSIJaWYgKCFkZWZpbmVkKCRsYWJlbHskX1swXX0pKTsKLQlwdXNoKEBvdXQsIlBVQkxJQ1x0JGxhYmVseyRfWzBdfVxuIik7Ci0JfQotCi1zdWIgbWFpbidsYWJlbAotCXsKLQlpZiAoIWRlZmluZWQoJGxhYmVseyRfWzBdfSkpCi0JCXsKLQkJJGxhYmVseyRfWzBdfT0iXCQke2xhYmVsfSR7X1swXX0iOwotCQkkbGFiZWwrKzsKLQkJfQotCXJldHVybigkbGFiZWx7JF9bMF19KTsKLQl9Ci0KLXN1YiBtYWluJ3NldF9sYWJlbAotCXsKLQlpZiAoIWRlZmluZWQoJGxhYmVseyRfWzBdfSkpCi0JCXsKLQkJJGxhYmVseyRfWzBdfT0iXCQke2xhYmVsfSR7X1swXX0iOwotCQkkbGFiZWwrKzsKLQkJfQotCWlmICgkX1sxXSE9MCAmJiAkX1sxXT4xKQotCQl7Ci0JCW1haW4nYWxpZ24oJF9bMV0pOwotCQl9Ci0JaWYoKGRlZmluZWQgJF9bMl0pICYmICgkX1syXSA9PSAxKSkKLQkJewotCQlwdXNoKEBvdXQsIiRsYWJlbHskX1swXX06OlxuIik7Ci0JCX0KLQllbHNpZiAoJGxhYmVseyRfWzBdfSAhfiAvXlwkLykKLQkJewotCQlwdXNoKEBvdXQsIiRsYWJlbHskX1swXX1cdExBQkVMIFBUUlxuIik7Ci0JCX0KLQllbHNlCi0JCXsKLQkJcHVzaChAb3V0LCIkbGFiZWx7JF9bMF19OlxuIik7Ci0JCX0KLQl9Ci0KLXN1YiBtYWluJ2RhdGFfYnl0ZQotCXsKLQlwdXNoKEBvdXQsIlx0REJcdCIuam9pbignLCcsQF8pLiJcbiIpOwotCX0KLQotc3ViIG1haW4nZGF0YV93b3JkCi0JewotCXB1c2goQG91dCwiXHRERFx0Ii5qb2luKCcsJyxAXykuIlxuIik7Ci0JfQotCi1zdWIgbWFpbidhbGlnbgotCXsKLQlwdXNoKEBvdXQsIlx0QUxJR05cdCRfWzBdXG4iKTsKLQl9Ci0KLXN1YiBvdXQxcAotCXsKLQlsb2NhbCgkbmFtZSwkcDEpPUBfOwotCWxvY2FsKCRsLCR0KTsKLQotCXB1c2goQG91dCwiXHQkbmFtZVx0Ii4mY29udigkcDEpLiJcbiIpOwotCX0KLQotc3ViIG1haW4ncGljbWV1cAotCXsKLQlsb2NhbCgkZHN0LCRzeW0pPUBfOwotCSZtYWluJ2xlYSgkZHN0LCZtYWluJ0RXUCgkc3ltKSk7Ci0JfQotCi1zdWIgbWFpbidibGluZHBvcCB7ICZvdXQxKCJwb3AiLEBfKTsgfQotCi1zdWIgbWFpbidpbml0c2VnIAotCXsKLQlsb2NhbCgkZik9QF87Ci0JbG9jYWwoJHRtcCk9PDxfX187Ci1PUFRJT04JRE9UTkFNRQotLkNSVFwkWENVCVNFR01FTlQgRFdPUkQgUFVCTElDICdEQVRBJwotRVhUUk4JXyRmOk5FQVIKLURECV8kZgotLkNSVFwkWENVCUVORFMKLV9fXwotCXB1c2goQG91dCwkdG1wKTsKLQl9Ci0KLTE7CmRpZmYgLS1naXQgYS9jcnlwdG8vcGVybGFzbS94ODZuYXNtLnBsIGIvY3J5cHRvL3Blcmxhc20veDg2bmFzbS5wbAppbmRleCBmYTM4Zjg5Li5jZTJiZWQ5IDEwMDY0NAotLS0gYS9jcnlwdG8vcGVybGFzbS94ODZuYXNtLnBsCisrKyBiL2NyeXB0by9wZXJsYXNtL3g4Nm5hc20ucGwKQEAgLTEsNDU1ICsxLDE2NiBAQAotIyEvdXNyL2xvY2FsL2Jpbi9wZXJsCisjIS91c3IvYmluL2VudiBwZXJsCiAKIHBhY2thZ2UgeDg2bmFzbTsKIAotJGxhYmVsPSJMMDAwIjsKLSR1bmRlcj0oJG1haW4nbmV0d2FyZSk/Jyc6J18nOworKm91dD1cQDo6b3V0OwogCi0lbGI9KAknZWF4JywJJ2FsJywKLQknZWJ4JywJJ2JsJywKLQknZWN4JywJJ2NsJywKLQknZWR4JywJJ2RsJywKLQknYXgnLAknYWwnLAotCSdieCcsCSdibCcsCi0JJ2N4JywJJ2NsJywKLQknZHgnLAknZGwnLAotCSk7CiskOjpsYmRlY29yPSJMXCQiOwkJIyBsb2NhbCBsYWJlbCBkZWNvcmF0aW9uCiskbm1kZWNvcj0kOjpuZXR3YXJlPyIiOiJfIjsJIyBleHRlcm5hbCBuYW1lIGRlY29yYXRpb24KKyRkcmRlY29yPSQ6Om13ZXJrcz8iLiI6IiI7CSMgZGlyZWN0aXZlIGRlY29yYXRpb24KIAotJWhiPSgJJ2VheCcsCSdhaCcsCi0JJ2VieCcsCSdiaCcsCi0JJ2VjeCcsCSdjaCcsCi0JJ2VkeCcsCSdkaCcsCi0JJ2F4JywJJ2FoJywKLQknYngnLAknYmgnLAotCSdjeCcsCSdjaCcsCi0JJ2R4JywJJ2RoJywKLQkpOworJGluaXRzZWc9IiI7CiAKLXN1YiBtYWluJ2FzbV9pbml0X291dHB1dCB7IEBvdXQ9KCk7IH0KLXN1YiBtYWluJ2FzbV9nZXRfb3V0cHV0IHsgcmV0dXJuKEBvdXQpOyB9Ci1zdWIgbWFpbidnZXRfbGFiZWxzIHsgcmV0dXJuKEBsYWJlbHMpOyB9CitzdWIgOjpnZW5lcmljCit7IG15ICRvcGNvZGU9c2hpZnQ7CisgIG15ICR0bXA7CiAKLXN1YiBtYWluJ2V4dGVybmFsX2xhYmVsCi17Ci0JcHVzaChAbGFiZWxzLEBfKTsKLQlmb3JlYWNoIChAXykgewotCQlwdXNoKEBvdXQsIi4iKSBpZiAoJG1haW4nbXdlcmtzKTsKLQkJcHVzaChAb3V0LCAiZXh0ZXJuXHQke3VuZGVyfSRfXG4iKTsKLQl9CisgICAgaWYgKCEkOjptd2Vya3MpCisgICAgeyAgIGlmICAgICgkb3Bjb2RlID1+IG0vXmovbyAmJiAkI189PTApICMgb3B0aW1pemUganVtcHMKKwl7ICAgJF9bMF0gPSAiTkVBUiAkX1swXSI7ICAgCX0KKwllbHNpZiAoJG9wY29kZSBlcSAibGVhIiAmJiAkI189PTEpICAjIHdpcGUgc3RvcmFnZSBxdWFsaWZpZXIgZnJvbSBsZWEKKwl7ICAgJF9bMV0gPX4gcy9eW15cW10qXFsvXFsvbzsJfQorICAgIH0KKyAgICAmOjplbWl0KCRvcGNvZGUsQF8pOworICAxOwogfQotCi1zdWIgbWFpbidMQgotCXsKLQkoZGVmaW5lZCgkbGJ7JF9bMF19KSkgfHwgZGllICIkX1swXSBkb2VzIG5vdCBoYXZlIGEgJ2xvdyBieXRlJ1xuIjsKLQlyZXR1cm4oJGxieyRfWzBdfSk7Ci0JfQotCi1zdWIgbWFpbidIQgotCXsKLQkoZGVmaW5lZCgkaGJ7JF9bMF19KSkgfHwgZGllICIkX1swXSBkb2VzIG5vdCBoYXZlIGEgJ2hpZ2ggYnl0ZSdcbiI7Ci0JcmV0dXJuKCRoYnskX1swXX0pOwotCX0KLQotc3ViIG1haW4nQlAKLQl7Ci0JJmdldF9tZW0oIkJZVEUiLEBfKTsKLQl9Ci0KLXN1YiBtYWluJ0RXUAotCXsKLQkmZ2V0X21lbSgiRFdPUkQiLEBfKTsKLQl9Ci0KLXN1YiBtYWluJ1FXUAotCXsKLQkmZ2V0X21lbSgiIixAXyk7Ci0JfQotCi1zdWIgbWFpbidCQwotCXsKLQlyZXR1cm4gKCgkbWFpbidtd2Vya3MpPyIiOiJCWVRFICIpLiJAXyI7Ci0JfQotCi1zdWIgbWFpbidEV0MKLQl7Ci0JcmV0dXJuICgoJG1haW4nbXdlcmtzKT8iIjoiRFdPUkQgIikuIkBfIjsKLQl9Ci0KLXN1YiBtYWluJ3N0YWNrX3B1c2gKLQl7Ci0JbXkoJG51bSk9QF87Ci0JJHN0YWNrKz0kbnVtKjQ7Ci0JJm1haW4nc3ViKCJlc3AiLCRudW0qNCk7Ci0JfQotCi1zdWIgbWFpbidzdGFja19wb3AKLQl7Ci0JbXkoJG51bSk9QF87Ci0JJHN0YWNrLT0kbnVtKjQ7Ci0JJm1haW4nYWRkKCJlc3AiLCRudW0qNCk7Ci0JfQorIworIyBvcGNvZGVzIG5vdCBjb3ZlcmVkIGJ5IDo6Z2VuZXJpYyBhYm92ZSwgbW9zdGx5IGluY29uc2lzdGVudCBuYW1pbmdzLi4uCisjCitzdWIgOjpjYWxsCXsgJjo6ZW1pdCgiY2FsbCIsKCY6OmlzbGFiZWwoJF9bMF0pIG9yICIkbm1kZWNvciRfWzBdIikpOyB9CitzdWIgOjpjYWxsX3B0cgl7ICY6OmVtaXQoImNhbGwiLEBfKTsJfQorc3ViIDo6am1wX3B0cgl7ICY6OmVtaXQoImptcCIsQF8pOwl9CiAKIHN1YiBnZXRfbWVtCi0JewotCW15KCRzaXplLCRhZGRyLCRyZWcxLCRyZWcyLCRpZHgpPUBfOwotCW15KCR0LCRwb3N0KTsKLQlteSgkcmV0KT0kc2l6ZTsKLQlpZiAoJHJldCBuZSAiIikKLQkJewotCQkkcmV0IC49ICIgUFRSIiBpZiAoJG1haW4nbXdlcmtzKTsKLQkJJHJldCAuPSAiICI7Ci0JCX0KLQkkcmV0IC49ICJbIjsKLQkkYWRkciA9fiBzL15ccysvLzsKLQlpZiAoJGFkZHIgPX4gL14oLispXCsoLispJC8pCi0JCXsKLQkJJHJlZzI9JmNvbnYoJDEpOwotCQkkYWRkcj0iJHVuZGVyJDIiOwotCQl9Ci0JZWxzaWYgKCRhZGRyID1+IC9eW19hLXpdW19hLXowLTldKiQvaSkKLQkJewotCQkkYWRkcj0iJHVuZGVyJGFkZHIiOwotCQl9Cit7IG15KCRzaXplLCRhZGRyLCRyZWcxLCRyZWcyLCRpZHgpPUBfOworICBteSgkcG9zdCwkcmV0KTsKIAotCWlmICgkYWRkciA9fiAvXi4rXC0uKyQvKSB7ICRhZGRyPSIoJGFkZHIpIjsgfQorICAgIGlmICgkc2l6ZSBuZSAiIikKKyAgICB7CSRyZXQgLj0gIiRzaXplIjsKKwkkcmV0IC49ICIgUFRSIiBpZiAoJDo6bXdlcmtzKTsKKwkkcmV0IC49ICIgIjsKKyAgICB9CisgICAgJHJldCAuPSAiWyI7CiAKLQkkcmVnMT0iJHJlZ3N7JHJlZzF9IiBpZiBkZWZpbmVkKCRyZWdzeyRyZWcxfSk7Ci0JJHJlZzI9IiRyZWdzeyRyZWcyfSIgaWYgZGVmaW5lZCgkcmVnc3skcmVnMn0pOwotCWlmICgoJGFkZHIgbmUgIiIpICYmICgkYWRkciBuZSAwKSkKLQkJewotCQlpZiAoJGFkZHIgIX4gL14tLykKLQkJCXsgJHJldC49IiR7YWRkcn0rIjsgfQotCQllbHNlCXsgJHBvc3Q9JGFkZHI7IH0KLQkJfQotCWlmICgkcmVnMiBuZSAiIikKLQkJewotCQkkdD0iIjsKLQkJJHQ9IiokaWR4IiBpZiAoJGlkeCAhPSAwKTsKLQkJJHJlZzE9IisiLiRyZWcxIGlmICgiJHJlZzEkcG9zdCIgbmUgIiIpOwotCQkkcmV0Lj0iJHJlZzIkdCRyZWcxJHBvc3RdIjsKLQkJfQotCWVsc2UKLQkJewotCQkkcmV0Lj0iJHJlZzEkcG9zdF0iCi0JCX0KLQkkcmV0ID1+IHMvXCtcXS9dLzsgIyBpbiBjYXNlICRhZGRyIHdhcyB0aGUgb25seSBhcmd1bWVudAotCXJldHVybigkcmV0KTsKLQl9CisgICAgJGFkZHIgPX4gcy9eXHMrLy87CisgICAgIyBwcmVwZW5kIGdsb2JhbCByZWZlcmVuY2VzIHdpdGggb3B0aW9uYWwgdW5kZXJzY29yZQorICAgICRhZGRyID1+IHMvXihbXlwrXC0wLTldW15cK1wtXSopLzo6aXNsYWJlbCgkMSkgb3IgIiRubWRlY29yJDEiL2lnZTsKKyAgICAjIHB1dCBhZGRyZXNzIGFyaXRobWV0aWMgZXhwcmVzc2lvbiBpbiBwYXJlbnRoZXNpcworICAgICRhZGRyPSIoJGFkZHIpIiBpZiAoJGFkZHIgPX4gL14uK1tcLVwrXS4rJC8pOwogCi1zdWIgbWFpbidtb3YJeyAmb3V0MigibW92IixAXyk7IH0KLXN1YiBtYWluJ21vdmIJeyAmb3V0MigibW92IixAXyk7IH0KLXN1YiBtYWluJ2FuZAl7ICZvdXQyKCJhbmQiLEBfKTsgfQotc3ViIG1haW4nb3IJeyAmb3V0Migib3IiLEBfKTsgfQotc3ViIG1haW4nc2hsCXsgJm91dDIoInNobCIsQF8pOyB9Ci1zdWIgbWFpbidzaHIJeyAmb3V0Migic2hyIixAXyk7IH0KLXN1YiBtYWluJ3hvcgl7ICZvdXQyKCJ4b3IiLEBfKTsgfQotc3ViIG1haW4neG9yYgl7ICZvdXQyKCJ4b3IiLEBfKTsgfQotc3ViIG1haW4nYWRkCXsgJm91dDIoImFkZCIsQF8pOyB9Ci1zdWIgbWFpbidhZGMJeyAmb3V0MigiYWRjIixAXyk7IH0KLXN1YiBtYWluJ3N1Ygl7ICZvdXQyKCJzdWIiLEBfKTsgfQotc3ViIG1haW4nc2JiCXsgJm91dDIoInNiYiIsQF8pOyB9Ci1zdWIgbWFpbidyb3RsCXsgJm91dDIoInJvbCIsQF8pOyB9Ci1zdWIgbWFpbidyb3RyCXsgJm91dDIoInJvciIsQF8pOyB9Ci1zdWIgbWFpbidleGNoCXsgJm91dDIoInhjaGciLEBfKTsgfQotc3ViIG1haW4nY21wCXsgJm91dDIoImNtcCIsQF8pOyB9Ci1zdWIgbWFpbidsZWEJeyAmb3V0MigibGVhIixAXyk7IH0KLXN1YiBtYWluJ211bAl7ICZvdXQxKCJtdWwiLEBfKTsgfQotc3ViIG1haW4naW11bAl7ICZvdXQyKCJpbXVsIixAXyk7IH0KLXN1YiBtYWluJ2Rpdgl7ICZvdXQxKCJkaXYiLEBfKTsgfQotc3ViIG1haW4nZGVjCXsgJm91dDEoImRlYyIsQF8pOyB9Ci1zdWIgbWFpbidpbmMJeyAmb3V0MSgiaW5jIixAXyk7IH0KLXN1YiBtYWluJ2ptcAl7ICZvdXQxKCJqbXAiLEBfKTsgfQotc3ViIG1haW4nam1wX3B0ciB7ICZvdXQxcCgiam1wIixAXyk7IH0KKyAgICBpZiAoKCRhZGRyIG5lICIiKSAmJiAoJGFkZHIgbmUgMCkpCisgICAgewlpZiAoJGFkZHIgIX4gL14tLykJeyAkcmV0IC49ICIkYWRkcisiOyB9CisJZWxzZQkJCXsgJHBvc3Q9JGFkZHI7ICAgICAgfQorICAgIH0KIAotIyBUaGlzIGlzIGEgYml0IG9mIGEga2x1ZGdlOiBkZWNsYXJlIGFsbCBicmFuY2hlcyBhcyBORUFSLgotJG5lYXI9KCRtYWluJ213ZXJrcyk/Jyc6J05FQVInOwotc3ViIG1haW4namUJeyAmb3V0MSgiamUgJG5lYXIiLEBfKTsgfQotc3ViIG1haW4namxlCXsgJm91dDEoImpsZSAkbmVhciIsQF8pOyB9Ci1zdWIgbWFpbidqegl7ICZvdXQxKCJqeiAkbmVhciIsQF8pOyB9Ci1zdWIgbWFpbidqZ2UJeyAmb3V0MSgiamdlICRuZWFyIixAXyk7IH0KLXN1YiBtYWluJ2psCXsgJm91dDEoImpsICRuZWFyIixAXyk7IH0KLXN1YiBtYWluJ2phCXsgJm91dDEoImphICRuZWFyIixAXyk7IH0KLXN1YiBtYWluJ2phZQl7ICZvdXQxKCJqYWUgJG5lYXIiLEBfKTsgfQotc3ViIG1haW4namIJeyAmb3V0MSgiamIgJG5lYXIiLEBfKTsgfQotc3ViIG1haW4namJlCXsgJm91dDEoImpiZSAkbmVhciIsQF8pOyB9Ci1zdWIgbWFpbidqYwl7ICZvdXQxKCJqYyAkbmVhciIsQF8pOyB9Ci1zdWIgbWFpbidqbmMJeyAmb3V0MSgiam5jICRuZWFyIixAXyk7IH0KLXN1YiBtYWluJ2puegl7ICZvdXQxKCJqbnogJG5lYXIiLEBfKTsgfQotc3ViIG1haW4nam5lCXsgJm91dDEoImpuZSAkbmVhciIsQF8pOyB9Ci1zdWIgbWFpbidqbm8JeyAmb3V0MSgiam5vICRuZWFyIixAXyk7IH0KKyAgICBpZiAoJHJlZzIgbmUgIiIpCisgICAgewkkaWR4IT0wIG9yICRpZHg9MTsKKwkkcmV0IC49ICIkcmVnMiokaWR4IjsKKwkkcmV0IC49ICIrJHJlZzEiIGlmICgkcmVnMSBuZSAiIik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CSRyZXQgLj0gIiRyZWcxIjsgICB9CiAKLXN1YiBtYWluJ3B1c2gJeyAmb3V0MSgicHVzaCIsQF8pOyAkc3RhY2srPTQ7IH0KLXN1YiBtYWluJ3BvcAl7ICZvdXQxKCJwb3AiLEBfKTsgJHN0YWNrLT00OyB9Ci1zdWIgbWFpbidwdXNoZgl7ICZvdXQwKCJwdXNoZmQiKTsgJHN0YWNrKz00OyB9Ci1zdWIgbWFpbidwb3BmCXsgJm91dDAoInBvcGZkIik7ICRzdGFjay09NDsgfQotc3ViIG1haW4nYnN3YXAJeyAmb3V0MSgiYnN3YXAiLEBfKTsgJnVzaW5nNDg2KCk7IH0KLXN1YiBtYWluJ25vdAl7ICZvdXQxKCJub3QiLEBfKTsgfQotc3ViIG1haW4nY2FsbAl7ICZvdXQxKCJjYWxsIiwoJF9bMF09fi9eXEBMLz8nJzokdW5kZXIpLiRfWzBdKTsgfQotc3ViIG1haW4nY2FsbF9wdHIgeyAmb3V0MXAoImNhbGwiLEBfKTsgfQotc3ViIG1haW4ncmV0CXsgJm91dDAoInJldCIpOyB9Ci1zdWIgbWFpbidub3AJeyAmb3V0MCgibm9wIik7IH0KLXN1YiBtYWluJ3Rlc3QJeyAmb3V0MigidGVzdCIsQF8pOyB9Ci1zdWIgbWFpbididAl7ICZvdXQyKCJidCIsQF8pOyB9Ci1zdWIgbWFpbidsZWF2ZQl7ICZvdXQwKCJsZWF2ZSIpOyB9Ci1zdWIgbWFpbidjcHVpZAl7ICZvdXQwKCJjcHVpZCIpOyB9Ci1zdWIgbWFpbidyZHRzYwl7ICZvdXQwKCJyZHRzYyIpOyB9Ci1zdWIgbWFpbidoYWx0CXsgJm91dDAoImhsdCIpOyB9Ci1zdWIgbWFpbidtb3Z6CXsgJm91dDIoIm1vdnp4IixAXyk7IH0KLXN1YiBtYWluJ25lZwl7ICZvdXQxKCJuZWciLEBfKTsgfQotc3ViIG1haW4nY2xkCXsgJm91dDAoImNsZCIpOyB9CisgICAgJHJldCAuPSAiJHBvc3RdIjsKKyAgICAkcmV0ID1+IHMvXCtcXS9dLzsgIyBpbiBjYXNlICRhZGRyIHdhcyB0aGUgb25seSBhcmd1bWVudAogCi0jIFNTRTIKLXN1YiBtYWluJ2VtbXMJeyAmb3V0MCgiZW1tcyIpOyB9Ci1zdWIgbWFpbidtb3ZkCXsgJm91dDIoIm1vdmQiLEBfKTsgfQotc3ViIG1haW4nbW92cQl7ICZvdXQyKCJtb3ZxIixAXyk7IH0KLXN1YiBtYWluJ21vdmRxdQl7ICZvdXQyKCJtb3ZkcXUiLEBfKTsgfQotc3ViIG1haW4nbW92ZHFhCXsgJm91dDIoIm1vdmRxYSIsQF8pOyB9Ci1zdWIgbWFpbidtb3ZkcTJxeyAmb3V0MigibW92ZHEycSIsQF8pOyB9Ci1zdWIgbWFpbidtb3ZxMmRxeyAmb3V0MigibW92cTJkcSIsQF8pOyB9Ci1zdWIgbWFpbidwYWRkcQl7ICZvdXQyKCJwYWRkcSIsQF8pOyB9Ci1zdWIgbWFpbidwbXVsdWRxeyAmb3V0MigicG11bHVkcSIsQF8pOyB9Ci1zdWIgbWFpbidwc3JscQl7ICZvdXQyKCJwc3JscSIsQF8pOyB9Ci1zdWIgbWFpbidwc2xscQl7ICZvdXQyKCJwc2xscSIsQF8pOyB9Ci1zdWIgbWFpbidweG9yCXsgJm91dDIoInB4b3IiLEBfKTsgfQotc3ViIG1haW4ncG9yCXsgJm91dDIoInBvciIsQF8pOyB9Ci1zdWIgbWFpbidwYW5kCXsgJm91dDIoInBhbmQiLEBfKTsgfQorICAkcmV0OworfQorc3ViIDo6QlAJeyAmZ2V0X21lbSgiQllURSIsQF8pOyAgfQorc3ViIDo6RFdQCXsgJmdldF9tZW0oIkRXT1JEIixAXyk7IH0KK3N1YiA6OlFXUAl7ICZnZXRfbWVtKCIiLEBfKTsgICAgICB9CitzdWIgOjpCQwl7ICgoJDo6bXdlcmtzKT8iIjoiQllURSAiKS4iQF8iOyAgfQorc3ViIDo6RFdDCXsgKCgkOjptd2Vya3MpPyIiOiJEV09SRCAiKS4iQF8iOyB9CiAKLXN1YiBvdXQyCi0JewotCW15KCRuYW1lLCRwMSwkcDIpPUBfOwotCW15KCRsLCR0KTsKLQotCXB1c2goQG91dCwiXHQkbmFtZVx0Iik7Ci0JaWYgKCEkbWFpbidtd2Vya3MgYW5kICRuYW1lIGVxICJsZWEiKQotCQl7Ci0JCSRwMSA9fiBzL15bXlxbXSpcWy9cWy87Ci0JCSRwMiA9fiBzL15bXlxbXSpcWy9cWy87Ci0JCX0KLQkkdD0mY29udigkcDEpLiIsIjsKLQkkbD1sZW5ndGgoJHQpOwotCXB1c2goQG91dCwkdCk7Ci0JJGw9NC0oJGwrOSkvODsKLQlwdXNoKEBvdXQsIlx0IiB4ICRsKTsKLQlwdXNoKEBvdXQsJmNvbnYoJHAyKSk7Ci0JcHVzaChAb3V0LCJcbiIpOwotCX0KLQotc3ViIG91dDAKLQl7Ci0JbXkoJG5hbWUpPUBfOwotCi0JcHVzaChAb3V0LCJcdCRuYW1lXG4iKTsKLQl9Ci0KLXN1YiBvdXQxCi0JewotCW15KCRuYW1lLCRwMSk9QF87Ci0JbXkoJGwsJHQpOwotCXB1c2goQG91dCwiXHQkbmFtZVx0Ii4mY29udigkcDEpLiJcbiIpOwotCX0KLQotc3ViIGNvbnYKLQl7Ci0JbXkoJHApPUBfOwotCSRwID1+IHMvMHgoWzAtOUEtRmEtZl0rKS8wJDFoLzsKLQlyZXR1cm4gJHA7Ci0JfQotCi1zdWIgdXNpbmc0ODYKLQl7Ci0JcmV0dXJuIGlmICR1c2luZzQ4NjsKLQkkdXNpbmc0ODYrKzsKLQlncmVwKHMvXC4zODYvXC40ODYvLEBvdXQpOwotCX0KLQotc3ViIG1haW4nZmlsZQotCXsKLQlpZiAoJG1haW4nbXdlcmtzKQl7IHB1c2goQG91dCwiLnNlY3Rpb25cdC50ZXh0XG4iKTsgfQotCWVsc2UJewotCQlsb2NhbCAkdG1wPTw8X19fOwotJWlmZGVmIF9fb21mX18KLXNlY3Rpb24JY29kZQl1c2UzMiBjbGFzcz1jb2RlCitzdWIgOjpmaWxlCit7ICAgaWYgKCQ6Om13ZXJrcykJeyBwdXNoKEBvdXQsIi5zZWN0aW9uXHQudGV4dCw2NFxuIik7IH0KKyAgICBlbHNlCisgICAgeyBteSAkdG1wPTw8X19fOworJWlmaWRuIF9fT1VUUFVUX0ZPUk1BVF9fLG9iagorc2VjdGlvbgljb2RlCXVzZTMyIGNsYXNzPWNvZGUgYWxpZ249NjQKKyVlbGlmaWRuIF9fT1VUUFVUX0ZPUk1BVF9fLHdpbjMyCitcJFxAZmVhdC4wMCBlcXUgMQorc2VjdGlvbgkudGV4dAljb2RlIGFsaWduPTY0CiAlZWxzZQotc2VjdGlvbgkudGV4dAorc2VjdGlvbgkudGV4dAljb2RlCiAlZW5kaWYKIF9fXwotCQlwdXNoKEBvdXQsJHRtcCk7Ci0JCX0KLQl9Ci0KLXN1YiBtYWluJ2Z1bmN0aW9uX2JlZ2luCi0JewotCW15KCRmdW5jLCRleHRyYSk9QF87Ci0KLQlwdXNoKEBsYWJlbHMsJGZ1bmMpOwotCXB1c2goQG91dCwiLiIpIGlmICgkbWFpbidtd2Vya3MpOwotCW15KCR0bXApPTw8IkVPRiI7Ci1nbG9iYWwJJHVuZGVyJGZ1bmMKLSR1bmRlciRmdW5jOgotCXB1c2gJZWJwCi0JcHVzaAllYngKLQlwdXNoCWVzaQotCXB1c2gJZWRpCi1FT0YKIAlwdXNoKEBvdXQsJHRtcCk7Ci0JJHN0YWNrPTIwOwotCX0KKyAgICB9Cit9CiAKLXN1YiBtYWluJ2Z1bmN0aW9uX2JlZ2luX0IKLQl7Ci0JbXkoJGZ1bmMsJGV4dHJhKT1AXzsKLQlwdXNoKEBvdXQsIi4iKSBpZiAoJG1haW4nbXdlcmtzKTsKLQlteSgkdG1wKT08PCJFT0YiOwotZ2xvYmFsCSR1bmRlciRmdW5jCi0kdW5kZXIkZnVuYzoKLUVPRgotCXB1c2goQG91dCwkdG1wKTsKLQkkc3RhY2s9NDsKLQl9CitzdWIgOjpmdW5jdGlvbl9iZWdpbl9CCit7IG15ICRmdW5jPXNoaWZ0OworICBteSAkZ2xvYmFsPSgkZnVuYyAhfiAvXl8vKTsKKyAgbXkgJGJlZ2luPSIkezo6bGJkZWNvcn1fJHtmdW5jfV9iZWdpbiI7CiAKLXN1YiBtYWluJ2Z1bmN0aW9uX2VuZAotCXsKLQlteSgkZnVuYyk9QF87CisgICAgJGJlZ2luID1+IHMvXlxALy4vIGlmICgkOjptd2Vya3MpOwkjIHRoZSB0b3J0dXJlIG5ldmVyIHN0b3BzCiAKLQlteSgkdG1wKT08PCJFT0YiOwotCXBvcAllZGkKLQlwb3AJZXNpCi0JcG9wCWVieAotCXBvcAllYnAKLQlyZXQKLUVPRgotCXB1c2goQG91dCwkdG1wKTsKLQkkc3RhY2s9MDsKLQklbGFiZWw9KCk7Ci0JfQorICAgICY6OkxBQkVMKCRmdW5jLCRnbG9iYWw/IiRiZWdpbiI6IiRubWRlY29yJGZ1bmMiKTsKKyAgICAkZnVuYz0kbm1kZWNvci4kZnVuYzsKIAotc3ViIG1haW4nZnVuY3Rpb25fZW5kX0IKLQl7Ci0JJHN0YWNrPTA7Ci0JJWxhYmVsPSgpOwotCX0KKyAgICBwdXNoKEBvdXQsIiR7ZHJkZWNvcn1nbG9iYWwJJGZ1bmNcbiIpCWlmICgkZ2xvYmFsKTsKKyAgICBwdXNoKEBvdXQsIiR7ZHJkZWNvcn1hbGlnbgkxNlxuIik7CisgICAgcHVzaChAb3V0LCIkZnVuYzpcbiIpOworICAgIHB1c2goQG91dCwiJGJlZ2luOlxuIikJCQlpZiAoJGdsb2JhbCk7CisgICAgJDo6c3RhY2s9NDsKK30KIAotc3ViIG1haW4nZnVuY3Rpb25fZW5kX0EKLQl7Ci0JbXkoJGZ1bmMpPUBfOworc3ViIDo6ZnVuY3Rpb25fZW5kX0IKK3sgICAkOjpzdGFjaz0wOworICAgICY6OndpcGVfbGFiZWxzKCk7Cit9CiAKLQlteSgkdG1wKT08PCJFT0YiOwotCXBvcAllZGkKLQlwb3AJZXNpCi0JcG9wCWVieAotCXBvcAllYnAKLQlyZXQKLUVPRgotCXB1c2goQG91dCwkdG1wKTsKLQl9Ci0KLXN1YiBtYWluJ2ZpbGVfZW5kCi0JewotCX0KLQotc3ViIG1haW4nd3BhcmFtCi0JewotCW15KCRudW0pPUBfOwotCi0JcmV0dXJuKCZtYWluJ0RXUCgkc3RhY2srJG51bSo0LCJlc3AiLCIiLDApKTsKLQl9Ci0KLXN1YiBtYWluJ3N3dG1wCi0JewotCXJldHVybigmbWFpbidEV1AoJF9bMF0qNCwiZXNwIiwiIiwwKSk7Ci0JfQotCi0jIFNob3VsZCB1c2Ugc3d0bXAsIHdoaWNoIGlzIGFib3ZlIGVzcC4gIExpbml4IGNhbiB0cmFzaCB0aGUgc3RhY2sgYWJvdmUgZXNwCi0jc3ViIG1haW4nd3RtcAotIwl7Ci0jCW15KCRudW0pPUBfOwotIwotIwlyZXR1cm4oJm1haW4nRFdQKC0oKCRudW0rMSkqNCksImVzcCIsIiIsMCkpOwotIwl9Ci0KLXN1YiBtYWluJ2NvbW1lbnQKLQl7Ci0JZm9yZWFjaCAoQF8pCi0JCXsKLQkJcHVzaChAb3V0LCJcdDsgJF9cbiIpOwotCQl9Ci0JfQotCi1zdWIgbWFpbidwdWJsaWNfbGFiZWwKLQl7Ci0JJGxhYmVseyRfWzBdfT0iJHt1bmRlcn0ke19bMF19IglpZiAoIWRlZmluZWQoJGxhYmVseyRfWzBdfSkpOwotCXB1c2goQG91dCwiLiIpIGlmICgkbWFpbidtd2Vya3MpOwotCXB1c2goQG91dCwiZ2xvYmFsXHQkbGFiZWx7JF9bMF19XG4iKTsKLQl9Ci0KLXN1YiBtYWluJ2xhYmVsCi0JewotCWlmICghZGVmaW5lZCgkbGFiZWx7JF9bMF19KSkKLQkJewotCQkkbGFiZWx7JF9bMF19PSJcQCR7bGFiZWx9JHtfWzBdfSI7Ci0JCSRsYWJlbCsrOwotCQl9Ci0JcmV0dXJuKCRsYWJlbHskX1swXX0pOwotCX0KLQotc3ViIG1haW4nc2V0X2xhYmVsCi0JewotCWlmICghZGVmaW5lZCgkbGFiZWx7JF9bMF19KSkKLQkJewotCQkkbGFiZWx7JF9bMF19PSJcQCR7bGFiZWx9JHtfWzBdfSI7Ci0JCSRsYWJlbCsrOwotCQl9Ci0JaWYgKCRfWzFdIT0wICYmICRfWzFdPjEpCi0JCXsKLQkJbWFpbidhbGlnbigkX1sxXSk7Ci0JCX0KLQlwdXNoKEBvdXQsIiRsYWJlbHskX1swXX06XG4iKTsKLQl9Ci0KLXN1YiBtYWluJ2RhdGFfYnl0ZQotCXsKLQlwdXNoKEBvdXQsKCgkbWFpbidtd2Vya3MpPyIuYnl0ZVx0IjoiREJcdCIpLmpvaW4oJywnLEBfKS4iXG4iKTsKLQl9Ci0KLXN1YiBtYWluJ2RhdGFfd29yZAotCXsKLQlwdXNoKEBvdXQsKCgkbWFpbidtd2Vya3MpPyIubG9uZ1x0IjoiRERcdCIpLmpvaW4oJywnLEBfKS4iXG4iKTsKLQl9Ci0KLXN1YiBtYWluJ2FsaWduCi0JewotCXB1c2goQG91dCwiLiIpIGlmICgkbWFpbidtd2Vya3MpOwotCXB1c2goQG91dCwiYWxpZ25cdCRfWzBdXG4iKTsKLQl9Ci0KLXN1YiBvdXQxcAotCXsKLQlteSgkbmFtZSwkcDEpPUBfOwotCW15KCRsLCR0KTsKLQotCXB1c2goQG91dCwiXHQkbmFtZVx0Ii4mY29udigkcDEpLiJcbiIpOwotCX0KLQotc3ViIG1haW4ncGljbWV1cAotCXsKLQlsb2NhbCgkZHN0LCRzeW0pPUBfOwotCSZtYWluJ2xlYSgkZHN0LCZtYWluJ0RXUCgkc3ltKSk7Ci0JfQotCi1zdWIgbWFpbidibGluZHBvcCB7ICZvdXQxKCJwb3AiLEBfKTsgfQotCi1zdWIgbWFpbidpbml0c2VnCi0JewotCWxvY2FsKCRmKT1AXzsKLQlpZiAoJG1haW4nd2luMzIpCi0JCXsKLQkJbG9jYWwoJHRtcCk9PDxfX187Ci1zZWdtZW50CS5DUlRcJFhDVSBkYXRhCi1leHRlcm4JJHVuZGVyJGYKLURECSR1bmRlciRmCitzdWIgOjpmaWxlX2VuZAoreyAgIGlmIChncmVwIHsvXGIke25tZGVjb3J9T1BFTlNTTF9pYTMyY2FwX1BcYi9pfSBAb3V0KQorICAgIHsJbXkgJGNvbW09PDxfX187Ciske2RyZGVjb3J9c2VnbWVudAkuYnNzCiske2RyZGVjb3J9Y29tbW9uCSR7bm1kZWNvcn1PUEVOU1NMX2lhMzJjYXBfUCA0CiBfX18KLQkJcHVzaChAb3V0LCR0bXApOwotCQl9Ci0JfQorCSMgY29tbWVudCBvdXQgT1BFTlNTTF9pYTMyY2FwX1AgZGVjbGFyYXRpb25zCisJZ3JlcCB7cy8oXmV4dGVyblxzKyR7bm1kZWNvcn1PUEVOU1NMX2lhMzJjYXBfUCkvXDskMS99IEBvdXQ7CisJcHVzaCAoQG91dCwkY29tbSkKKyAgICB9CisgICAgcHVzaCAoQG91dCwkaW5pdHNlZykgaWYgKCRpbml0c2VnKTsJCQorfQorCitzdWIgOjpjb21tZW50IHsgICBmb3JlYWNoIChAXykgeyBwdXNoKEBvdXQsIlx0OyAkX1xuIik7IH0gICB9CisKK3N1YiA6OmV4dGVybmFsX2xhYmVsCit7ICAgZm9yZWFjaChAXykKKyAgICB7CXB1c2goQG91dCwiJHtkcmRlY29yfWV4dGVyblx0Ii4mOjpMQUJFTCgkXywkbm1kZWNvci4kXykuIlxuIik7ICAgfQorfQorCitzdWIgOjpwdWJsaWNfbGFiZWwKK3sgICBwdXNoKEBvdXQsIiR7ZHJkZWNvcn1nbG9iYWxcdCIuJjo6TEFCRUwoJF9bMF0sJG5tZGVjb3IuJF9bMF0pLiJcbiIpOyAgfQorCitzdWIgOjpkYXRhX2J5dGUKK3sgICBwdXNoKEBvdXQsKCgkOjptd2Vya3MpPyIuYnl0ZVx0IjoiZGJcdCIpLmpvaW4oJywnLEBfKS4iXG4iKTsJfQorCitzdWIgOjpkYXRhX3dvcmQKK3sgICBwdXNoKEBvdXQsKCgkOjptd2Vya3MpPyIubG9uZ1x0IjoiZGRcdCIpLmpvaW4oJywnLEBfKS4iXG4iKTsJfQorCitzdWIgOjphbGlnbgoreyAgIHB1c2goQG91dCwiJHtkcmRlY29yfWFsaWduXHQkX1swXVxuIik7CX0KKworc3ViIDo6cGljbWV1cAoreyBteSgkZHN0LCRzeW0pPUBfOworICAgICY6OmxlYSgkZHN0LCY6OkRXUCgkc3ltKSk7Cit9CisKK3N1YiA6OmluaXRzZWcKK3sgbXkgJGY9JG5tZGVjb3Iuc2hpZnQ7CisgICAgaWYgKCQ6OndpbjMyKQorICAgIHsJJGluaXRzZWc9PDxfX187CitzZWdtZW50CS5DUlRcJFhDVSBkYXRhIGFsaWduPTQKK2V4dGVybgkkZgorZGQJJGYKK19fXworICAgIH0KK30KKworc3ViIDo6ZGF0YXNlZworeyAgIGlmICgkbXdlcmtzKQl7IHB1c2goQG91dCwiLnNlY3Rpb25cdC5kYXRhLDRcbiIpOyAgIH0KKyAgICBlbHNlCQl7IHB1c2goQG91dCwic2VjdGlvblx0LmRhdGEgYWxpZ249NFxuIik7IH0KK30KIAogMTsKZGlmZiAtLWdpdCBhL2NyeXB0by9wZXJsYXNtL3g4NnVuaXgucGwgYi9jcnlwdG8vcGVybGFzbS94ODZ1bml4LnBsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNGM5NDcxLi4wMDAwMDAwCi0tLSBhL2NyeXB0by9wZXJsYXNtL3g4NnVuaXgucGwKKysrIC9kZXYvbnVsbApAQCAtMSw3MjUgKzAsMCBAQAotIyEvdXNyL2xvY2FsL2Jpbi9wZXJsCi0KLXBhY2thZ2UgeDg2dW5peDsJIyBHQVMgYWN0dWFsbHkuLi4KLQotJGxhYmVsPSJMMDAwIjsKLSRjb25zdD0iIjsKLSRjb25zdGw9MDsKLQotJGFsaWduPSgkbWFpbidhb3V0KT8iNCI6IjE2IjsKLSR1bmRlcj0oJG1haW4nYW91dCBvciAkbWFpbidjb2ZmKT8iXyI6IiI7Ci0kZG90PSgkbWFpbidhb3V0KT8iIjoiLiI7Ci0kY29tX3N0YXJ0PSIjIiBpZiAoJG1haW4nYW91dCBvciAkbWFpbidjb2ZmKTsKLQotc3ViIG1haW4nYXNtX2luaXRfb3V0cHV0IHsgQG91dD0oKTsgfQotc3ViIG1haW4nYXNtX2dldF9vdXRwdXQgeyByZXR1cm4oQG91dCk7IH0KLXN1YiBtYWluJ2dldF9sYWJlbHMgeyByZXR1cm4oQGxhYmVscyk7IH0KLXN1YiBtYWluJ2V4dGVybmFsX2xhYmVsIHsgcHVzaChAbGFiZWxzLEBfKTsgfQotCi1pZiAoJG1haW4nY3BwKQotCXsKLQkkYWxpZ249IkFMSUdOIjsKLQkkdW5kZXI9IiI7Ci0JJGNvbV9zdGFydD0nLyonOwotCSRjb21fZW5kPScqLyc7Ci0JfQotCi0lbGI9KAknZWF4JywJJyVhbCcsCi0JJ2VieCcsCSclYmwnLAotCSdlY3gnLAknJWNsJywKLQknZWR4JywJJyVkbCcsCi0JJ2F4JywJJyVhbCcsCi0JJ2J4JywJJyVibCcsCi0JJ2N4JywJJyVjbCcsCi0JJ2R4JywJJyVkbCcsCi0JKTsKLQotJWhiPSgJJ2VheCcsCSclYWgnLAotCSdlYngnLAknJWJoJywKLQknZWN4JywJJyVjaCcsCi0JJ2VkeCcsCSclZGgnLAotCSdheCcsCSclYWgnLAotCSdieCcsCSclYmgnLAotCSdjeCcsCSclY2gnLAotCSdkeCcsCSclZGgnLAotCSk7Ci0KLSVyZWdzPSgJJ2VheCcsCSclZWF4JywKLQknZWJ4JywJJyVlYngnLAotCSdlY3gnLAknJWVjeCcsCi0JJ2VkeCcsCSclZWR4JywKLQknZXNpJywJJyVlc2knLAotCSdlZGknLAknJWVkaScsCi0JJ2VicCcsCSclZWJwJywKLQknZXNwJywJJyVlc3AnLAotCi0JJ21tMCcsCSclbW0wJywKLQknbW0xJywJJyVtbTEnLAotCSdtbTInLAknJW1tMicsCi0JJ21tMycsCSclbW0zJywKLQknbW00JywJJyVtbTQnLAotCSdtbTUnLAknJW1tNScsCi0JJ21tNicsCSclbW02JywKLQknbW03JywJJyVtbTcnLAotCi0JJ3htbTAnLAknJXhtbTAnLAotCSd4bW0xJywJJyV4bW0xJywKLQkneG1tMicsCScleG1tMicsCi0JJ3htbTMnLAknJXhtbTMnLAotCSd4bW00JywJJyV4bW00JywKLQkneG1tNScsCScleG1tNScsCi0JJ3htbTYnLAknJXhtbTYnLAotCSd4bW03JywJJyV4bW03JywKLQkpOwotCi0lcmVnX3ZhbD0oCi0JJ2VheCcsCTB4MDAsCi0JJ2VieCcsCTB4MDMsCi0JJ2VjeCcsCTB4MDEsCi0JJ2VkeCcsCTB4MDIsCi0JJ2VzaScsCTB4MDYsCi0JJ2VkaScsCTB4MDcsCi0JJ2VicCcsCTB4MDUsCi0JJ2VzcCcsCTB4MDQsCi0JKTsKLQotc3ViIG1haW4nTEIKLQl7Ci0JKGRlZmluZWQoJGxieyRfWzBdfSkpIHx8IGRpZSAiJF9bMF0gZG9lcyBub3QgaGF2ZSBhICdsb3cgYnl0ZSdcbiI7Ci0JcmV0dXJuKCRsYnskX1swXX0pOwotCX0KLQotc3ViIG1haW4nSEIKLQl7Ci0JKGRlZmluZWQoJGhieyRfWzBdfSkpIHx8IGRpZSAiJF9bMF0gZG9lcyBub3QgaGF2ZSBhICdoaWdoIGJ5dGUnXG4iOwotCXJldHVybigkaGJ7JF9bMF19KTsKLQl9Ci0KLXN1YiBtYWluJ0RXUAotCXsKLQlsb2NhbCgkYWRkciwkcmVnMSwkcmVnMiwkaWR4KT1AXzsKLQotCSRyZXQ9IiI7Ci0JJGFkZHIgPX4gcy8oXnxbKyBcdF0pKFtBLVphLXpfXStbQS1aYS16MC05X10rKSgkfFsrIFx0XSkvJDEkdW5kZXIkMiQzLzsKLQkkcmVnMT0iJHJlZ3N7JHJlZzF9IiBpZiBkZWZpbmVkKCRyZWdzeyRyZWcxfSk7Ci0JJHJlZzI9IiRyZWdzeyRyZWcyfSIgaWYgZGVmaW5lZCgkcmVnc3skcmVnMn0pOwotCSRyZXQuPSRhZGRyIGlmICgkYWRkciBuZSAiIikgJiYgKCRhZGRyIG5lIDApOwotCWlmICgkcmVnMiBuZSAiIikKLQkJewotCQlpZigkaWR4IG5lICIiICYmICRpZHggIT0gMCkKLQkJICAgIHsgJHJldC49IigkcmVnMSwkcmVnMiwkaWR4KSI7IH0KLQkJZWxzZQotCQkgICAgeyAkcmV0Lj0iKCRyZWcxLCRyZWcyKSI7IH0KLQkgICAgICAgIH0KLQllbHNpZiAoJHJlZzEgbmUgIiIpCi0JCXsgJHJldC49IigkcmVnMSkiIH0KLQlyZXR1cm4oJHJldCk7Ci0JfQotCi1zdWIgbWFpbidRV1AKLQl7Ci0JcmV0dXJuKCZtYWluJ0RXUChAXykpOwotCX0KLQotc3ViIG1haW4nQlAKLQl7Ci0JcmV0dXJuKCZtYWluJ0RXUChAXykpOwotCX0KLQotc3ViIG1haW4nQkMKLQl7Ci0JcmV0dXJuIEBfOwotCX0KLQotc3ViIG1haW4nRFdDCi0JewotCXJldHVybiBAXzsKLQl9Ci0KLSNzdWIgbWFpbidCUAotIwl7Ci0jCWxvY2FsKCRhZGRyLCRyZWcxLCRyZWcyLCRpZHgpPUBfOwotIwotIwkkcmV0PSIiOwotIwotIwkkYWRkciA9fiBzLyhefFsrIFx0XSkoW0EtWmEtel9dKykoJHxbKyBcdF0pLyQxJHVuZGVyJDIkMy87Ci0jCSRyZWcxPSIkcmVnc3skcmVnMX0iIGlmIGRlZmluZWQoJHJlZ3N7JHJlZzF9KTsKLSMJJHJlZzI9IiRyZWdzeyRyZWcyfSIgaWYgZGVmaW5lZCgkcmVnc3skcmVnMn0pOwotIwkkcmV0Lj0kYWRkciBpZiAoJGFkZHIgbmUgIiIpICYmICgkYWRkciBuZSAwKTsKLSMJaWYgKCRyZWcyIG5lICIiKQotIwkJeyAkcmV0Lj0iKCRyZWcxLCRyZWcyLCRpZHgpIjsgfQotIwllbHNlCi0jCQl7ICRyZXQuPSIoJHJlZzEpIiB9Ci0jCXJldHVybigkcmV0KTsKLSMJfQotCi1zdWIgbWFpbidtb3YJeyAmb3V0MigibW92bCIsQF8pOyB9Ci1zdWIgbWFpbidtb3ZiCXsgJm91dDIoIm1vdmIiLEBfKTsgfQotc3ViIG1haW4nYW5kCXsgJm91dDIoImFuZGwiLEBfKTsgfQotc3ViIG1haW4nb3IJeyAmb3V0Migib3JsIixAXyk7IH0KLXN1YiBtYWluJ3NobAl7ICZvdXQyKCJzYWxsIixAXyk7IH0KLXN1YiBtYWluJ3Nocgl7ICZvdXQyKCJzaHJsIixAXyk7IH0KLXN1YiBtYWluJ3hvcgl7ICZvdXQyKCJ4b3JsIixAXyk7IH0KLXN1YiBtYWluJ3hvcmIJeyAmb3V0MigieG9yYiIsQF8pOyB9Ci1zdWIgbWFpbidhZGQJeyAmb3V0MigkX1swXT1+LyVbYS1kXVtsaF0vPyJhZGRiIjoiYWRkbCIsQF8pOyB9Ci1zdWIgbWFpbidhZGMJeyAmb3V0MigiYWRjbCIsQF8pOyB9Ci1zdWIgbWFpbidzdWIJeyAmb3V0Migic3VibCIsQF8pOyB9Ci1zdWIgbWFpbidzYmIJeyAmb3V0Migic2JibCIsQF8pOyB9Ci1zdWIgbWFpbidyb3RsCXsgJm91dDIoInJvbGwiLEBfKTsgfQotc3ViIG1haW4ncm90cgl7ICZvdXQyKCJyb3JsIixAXyk7IH0KLXN1YiBtYWluJ2V4Y2gJeyAmb3V0MigkX1swXT1+LyVbYS1kXVtsaF0vPyJ4Y2hnYiI6InhjaGdsIixAXyk7IH0KLXN1YiBtYWluJ2NtcAl7ICZvdXQyKCJjbXBsIixAXyk7IH0KLXN1YiBtYWluJ2xlYQl7ICZvdXQyKCJsZWFsIixAXyk7IH0KLXN1YiBtYWluJ211bAl7ICZvdXQxKCJtdWxsIixAXyk7IH0KLXN1YiBtYWluJ2ltdWwJeyAmb3V0MigiaW11bGwiLEBfKTsgfQotc3ViIG1haW4nZGl2CXsgJm91dDEoImRpdmwiLEBfKTsgfQotc3ViIG1haW4nam1wCXsgJm91dDEoImptcCIsQF8pOyB9Ci1zdWIgbWFpbidqbXBfcHRyIHsgJm91dDFwKCJqbXAiLEBfKTsgfQotc3ViIG1haW4namUJeyAmb3V0MSgiamUiLEBfKTsgfQotc3ViIG1haW4namxlCXsgJm91dDEoImpsZSIsQF8pOyB9Ci1zdWIgbWFpbidqbmUJeyAmb3V0MSgiam5lIixAXyk7IH0KLXN1YiBtYWluJ2puegl7ICZvdXQxKCJqbnoiLEBfKTsgfQotc3ViIG1haW4nanoJeyAmb3V0MSgianoiLEBfKTsgfQotc3ViIG1haW4namdlCXsgJm91dDEoImpnZSIsQF8pOyB9Ci1zdWIgbWFpbidqbAl7ICZvdXQxKCJqbCIsQF8pOyB9Ci1zdWIgbWFpbidqYQl7ICZvdXQxKCJqYSIsQF8pOyB9Ci1zdWIgbWFpbidqYWUJeyAmb3V0MSgiamFlIixAXyk7IH0KLXN1YiBtYWluJ2piCXsgJm91dDEoImpiIixAXyk7IH0KLXN1YiBtYWluJ2piZQl7ICZvdXQxKCJqYmUiLEBfKTsgfQotc3ViIG1haW4namMJeyAmb3V0MSgiamMiLEBfKTsgfQotc3ViIG1haW4nam5jCXsgJm91dDEoImpuYyIsQF8pOyB9Ci1zdWIgbWFpbidqbm8JeyAmb3V0MSgiam5vIixAXyk7IH0KLXN1YiBtYWluJ2RlYwl7ICZvdXQxKCJkZWNsIixAXyk7IH0KLXN1YiBtYWluJ2luYwl7ICZvdXQxKCRfWzBdPX4vJVthLWRdW2hsXS8/ImluY2IiOiJpbmNsIixAXyk7IH0KLXN1YiBtYWluJ3B1c2gJeyAmb3V0MSgicHVzaGwiLEBfKTsgJHN0YWNrKz00OyB9Ci1zdWIgbWFpbidwb3AJeyAmb3V0MSgicG9wbCIsQF8pOyAkc3RhY2stPTQ7IH0KLXN1YiBtYWluJ3B1c2hmCXsgJm91dDAoInB1c2hmbCIpOyAkc3RhY2srPTQ7IH0KLXN1YiBtYWluJ3BvcGYJeyAmb3V0MCgicG9wZmwiKTsgJHN0YWNrLT00OyB9Ci1zdWIgbWFpbidub3QJeyAmb3V0MSgibm90bCIsQF8pOyB9Ci1zdWIgbWFpbidjYWxsCXsJbXkgJHByZT0kdW5kZXI7Ci0JCQlmb3JlYWNoICRpICglbGFiZWwpCi0JCQl7IGlmICgkbGFiZWx7JGl9IGVxICRfWzBdKSB7ICRwcmU9Jyc7IGxhc3Q7IH0gfQotCQkJJm91dDEoImNhbGwiLCRwcmUuJF9bMF0pOwotCQl9Ci1zdWIgbWFpbidjYWxsX3B0ciB7ICZvdXQxcCgiY2FsbCIsQF8pOyB9Ci1zdWIgbWFpbidyZXQJeyAmb3V0MCgicmV0Iik7IH0KLXN1YiBtYWluJ25vcAl7ICZvdXQwKCJub3AiKTsgfQotc3ViIG1haW4ndGVzdAl7ICZvdXQyKCJ0ZXN0bCIsQF8pOyB9Ci1zdWIgbWFpbididAl7ICZvdXQyKCJidGwiLEBfKTsgfQotc3ViIG1haW4nbGVhdmUJeyAmb3V0MCgibGVhdmUiKTsgfQotc3ViIG1haW4nY3B1aWQJeyAmb3V0MCgiLmJ5dGVcdDB4MGYsMHhhMiIpOyB9Ci1zdWIgbWFpbidyZHRzYwl7ICZvdXQwKCIuYnl0ZVx0MHgwZiwweDMxIik7IH0KLXN1YiBtYWluJ2hhbHQJeyAmb3V0MCgiaGx0Iik7IH0KLXN1YiBtYWluJ21vdnoJeyAmb3V0MigibW92emJsIixAXyk7IH0KLXN1YiBtYWluJ25lZwl7ICZvdXQxKCJuZWdsIixAXyk7IH0KLXN1YiBtYWluJ2NsZAl7ICZvdXQwKCJjbGQiKTsgfQotCi0jIFNTRTIKLXN1YiBtYWluJ2VtbXMJeyAmb3V0MCgiZW1tcyIpOyB9Ci1zdWIgbWFpbidtb3ZkCXsgJm91dDIoIm1vdmQiLEBfKTsgfQotc3ViIG1haW4nbW92ZHF1CXsgJm91dDIoIm1vdmRxdSIsQF8pOyB9Ci1zdWIgbWFpbidtb3ZkcWEJeyAmb3V0MigibW92ZHFhIixAXyk7IH0KLXN1YiBtYWluJ21vdmRxMnF7ICZvdXQyKCJtb3ZkcTJxIixAXyk7IH0KLXN1YiBtYWluJ21vdnEyZHF7ICZvdXQyKCJtb3ZxMmRxIixAXyk7IH0KLXN1YiBtYWluJ3BhZGRxCXsgJm91dDIoInBhZGRxIixAXyk7IH0KLXN1YiBtYWluJ3BtdWx1ZHF7ICZvdXQyKCJwbXVsdWRxIixAXyk7IH0KLXN1YiBtYWluJ3BzcmxxCXsgJm91dDIoInBzcmxxIixAXyk7IH0KLXN1YiBtYWluJ3BzbGxxCXsgJm91dDIoInBzbGxxIixAXyk7IH0KLXN1YiBtYWluJ3B4b3IJeyAmb3V0MigicHhvciIsQF8pOyB9Ci1zdWIgbWFpbidwb3IJeyAmb3V0MigicG9yIixAXyk7IH0KLXN1YiBtYWluJ3BhbmQJeyAmb3V0MigicGFuZCIsQF8pOyB9Ci1zdWIgbWFpbidtb3ZxCXsKLQlsb2NhbCgkcDEsJHAyLCRvcHRpbWl6ZSk9QF87Ci0JaWYgKCRvcHRpbWl6ZSAmJiAkcDE9fi9ebW1bMC03XSQvICYmICRwMj1+L15tbVswLTddJC8pCi0JCSMgbW92cSBiZXR3ZWVuIG1teCByZWdpc3RlcnMgY2FuIHNpbmsgSW50ZWwgQ1BVcwotCQl7CXB1c2goQG91dCwiXHRwc2h1ZndcdFwkMHhlNCwlJHAyLCUkcDFcbiIpOwl9Ci0JZWxzZQl7CSZvdXQyKCJtb3ZxIixAXyk7CQkJCX0KLQl9Ci0KLSMgVGhlIGJzd2FwbCBpbnN0cnVjdGlvbiBpcyBuZXcgZm9yIHRoZSA0ODYuIEVtdWxhdGUgaWYgaTM4Ni4KLXN1YiBtYWluJ2Jzd2FwCi0JewotCWlmICgkbWFpbidpMzg2KQotCQl7Ci0JCSZtYWluJ2NvbW1lbnQoImJzd2FwbCBAXyIpOwotCQkmbWFpbidleGNoKG1haW4nSEIoQF8pLG1haW4nTEIoQF8pKTsKLQkJJm1haW4ncm90cihAXywxNik7Ci0JCSZtYWluJ2V4Y2gobWFpbidIQihAXyksbWFpbidMQihAXykpOwotCQl9Ci0JZWxzZQotCQl7Ci0JCSZvdXQxKCJic3dhcGwiLEBfKTsKLQkJfQotCX0KLQotc3ViIG91dDIKLQl7Ci0JbG9jYWwoJG5hbWUsJHAxLCRwMik9QF87Ci0JbG9jYWwoJGwsJGxsLCR0KTsKLQlsb2NhbCglc3BlY2lhbCk9KAkicm9sbCIsMHhEMUMwLCJyb3JsIiwweEQxQzgsCi0JCQkJInJjbGwiLDB4RDFEMCwicmNybCIsMHhEMUQ4LAotCQkJCSJzaGxsIiwweEQxRTAsInNocmwiLDB4RDFFOCwKLQkJCQkic2FybCIsMHhEMUY4KTsKLQkKLQlpZiAoKGRlZmluZWQoJHNwZWNpYWx7JG5hbWV9KSkgJiYgZGVmaW5lZCgkcmVnc3skcDF9KSAmJiAoJHAyID09IDEpKQotCQl7Ci0JCSRvcD0kc3BlY2lhbHskbmFtZX18JHJlZ192YWx7JHAxfTsKLQkJJHRtcDE9c3ByaW50ZigiLmJ5dGUgJWRcbiIsKCRvcD4+OCkmMHhmZik7Ci0JCSR0bXAyPXNwcmludGYoIi5ieXRlICVkXHQiLCRvcCAgICAgJjB4ZmYpOwotCQlwdXNoKEBvdXQsJHRtcDEpOwotCQlwdXNoKEBvdXQsJHRtcDIpOwotCi0JCSRwMj0mY29udigkcDIpOwotCQkkcDE9JmNvbnYoJHAxKTsKLQkJJm1haW4nY29tbWVudCgiJG5hbWUgJHAyICRwMSIpOwotCQlyZXR1cm47Ci0JCX0KLQotCXB1c2goQG91dCwiXHQkbmFtZVx0Iik7Ci0JJHQ9JmNvbnYoJHAyKS4iLCI7Ci0JJGw9bGVuZ3RoKCR0KTsKLQlwdXNoKEBvdXQsJHQpOwotCSRsbD00LSgkbCs5KS84OwotCSR0bXAxPXNwcmludGYoIlx0IiB4ICRsbCk7Ci0JcHVzaChAb3V0LCR0bXAxKTsKLQlwdXNoKEBvdXQsJmNvbnYoJHAxKS4iXG4iKTsKLQl9Ci0KLXN1YiBvdXQxCi0JewotCWxvY2FsKCRuYW1lLCRwMSk9QF87Ci0JbG9jYWwoJGwsJHQpOwotCWxvY2FsKCVzcGVjaWFsKT0oImJzd2FwbCIsMHgwRkM4KTsKLQotCWlmICgoZGVmaW5lZCgkc3BlY2lhbHskbmFtZX0pKSAmJiBkZWZpbmVkKCRyZWdzeyRwMX0pKQotCQl7Ci0JCSRvcD0kc3BlY2lhbHskbmFtZX18JHJlZ192YWx7JHAxfTsKLQkJJHRtcDE9c3ByaW50ZigiLmJ5dGUgJWRcbiIsKCRvcD4+OCkmMHhmZik7Ci0JCSR0bXAyPXNwcmludGYoIi5ieXRlICVkXHQiLCRvcCAgICAgJjB4ZmYpOwotCQlwdXNoKEBvdXQsJHRtcDEpOwotCQlwdXNoKEBvdXQsJHRtcDIpOwotCi0JCSRwMj0mY29udigkcDIpOwotCQkkcDE9JmNvbnYoJHAxKTsKLQkJJm1haW4nY29tbWVudCgiJG5hbWUgJHAyICRwMSIpOwotCQlyZXR1cm47Ci0JCX0KLQotCXB1c2goQG91dCwiXHQkbmFtZVx0Ii4mY29udigkcDEpLiJcbiIpOwotCX0KLQotc3ViIG91dDFwCi0JewotCWxvY2FsKCRuYW1lLCRwMSk9QF87Ci0JbG9jYWwoJGwsJHQpOwotCi0JcHVzaChAb3V0LCJcdCRuYW1lXHQqIi4mY29udigkcDEpLiJcbiIpOwotCX0KLQotc3ViIG91dDAKLQl7Ci0JcHVzaChAb3V0LCJcdCRfWzBdXG4iKTsKLQl9Ci0KLXN1YiBjb252Ci0JewotCWxvY2FsKCRwKT1AXzsKLQotIwkkcCA9fiBzLzB4KFswLTlBLUZhLWZdKykvMCQxaC87Ci0KLQkkcD0kcmVnc3skcH0gaWYgKGRlZmluZWQoJHJlZ3N7JHB9KSk7Ci0KLQkkcCA9fiBzL14oLXswLDF9WzAtOUEtRmEtZl0rKSQvXCQkMS87Ci0JJHAgPX4gcy9eKDB4WzAtOUEtRmEtZl0rKSQvXCQkMS87Ci0JcmV0dXJuICRwOwotCX0KLQotc3ViIG1haW4nZmlsZQotCXsKLQlsb2NhbCgkZmlsZSk9QF87Ci0KLQlsb2NhbCgkdG1wKT08PCJFT0YiOwotCS5maWxlCSIkZmlsZS5zIgotRU9GCi0JcHVzaChAb3V0LCR0bXApOwotCX0KLQotc3ViIG1haW4nZnVuY3Rpb25fYmVnaW4KLQl7Ci0JbG9jYWwoJGZ1bmMpPUBfOwotCi0JJm1haW4nZXh0ZXJuYWxfbGFiZWwoJGZ1bmMpOwotCSRmdW5jPSR1bmRlci4kZnVuYzsKLQotCWxvY2FsKCR0bXApPTw8IkVPRiI7Ci0udGV4dAotLmdsb2JsCSRmdW5jCi1FT0YKLQlwdXNoKEBvdXQsJHRtcCk7Ci0JaWYgKCRtYWluJ2NwcCkKLQkJeyAkdG1wPXB1c2goQG91dCwiVFlQRSgkZnVuYyxcQGZ1bmN0aW9uKVxuIik7IH0KLQllbHNpZiAoJG1haW4nY29mZikKLQkJeyAkdG1wPXB1c2goQG91dCwiLmRlZlx0JGZ1bmM7XHQuc2NsXHQyO1x0LnR5cGVcdDMyO1x0LmVuZGVmXG4iKTsgfQotCWVsc2lmICgkbWFpbidhb3V0IGFuZCAhJG1haW4ncGljKQotCQl7IH0KLQllbHNlCXsgJHRtcD1wdXNoKEBvdXQsIi50eXBlXHQkZnVuYyxcQGZ1bmN0aW9uXG4iKTsgfQotCXB1c2goQG91dCwiLmFsaWduXHQkYWxpZ25cbiIpOwotCXB1c2goQG91dCwiJGZ1bmM6XG4iKTsKLQkkdG1wPTw8IkVPRiI7Ci0JcHVzaGwJJWVicAotCXB1c2hsCSVlYngKLQlwdXNobAklZXNpCi0JcHVzaGwJJWVkaQotCi1FT0YKLQlwdXNoKEBvdXQsJHRtcCk7Ci0JJHN0YWNrPTIwOwotCX0KLQotc3ViIG1haW4nZnVuY3Rpb25fYmVnaW5fQgotCXsKLQlsb2NhbCgkZnVuYywkZXh0cmEpPUBfOwotCi0JJm1haW4nZXh0ZXJuYWxfbGFiZWwoJGZ1bmMpOwotCSRmdW5jPSR1bmRlci4kZnVuYzsKLQotCWxvY2FsKCR0bXApPTw8IkVPRiI7Ci0udGV4dAotLmdsb2JsCSRmdW5jCi1FT0YKLQlwdXNoKEBvdXQsJHRtcCk7Ci0JaWYgKCRtYWluJ2NwcCkKLQkJeyBwdXNoKEBvdXQsIlRZUEUoJGZ1bmMsXEBmdW5jdGlvbilcbiIpOyB9Ci0JZWxzaWYgKCRtYWluJ2NvZmYpCi0JCXsgJHRtcD1wdXNoKEBvdXQsIi5kZWZcdCRmdW5jO1x0LnNjbFx0MjtcdC50eXBlXHQzMjtcdC5lbmRlZlxuIik7IH0KLQllbHNpZiAoJG1haW4nYW91dCBhbmQgISRtYWluJ3BpYykKLQkJeyB9Ci0JZWxzZQl7IHB1c2goQG91dCwiLnR5cGUJJGZ1bmMsXEBmdW5jdGlvblxuIik7IH0KLQlwdXNoKEBvdXQsIi5hbGlnblx0JGFsaWduXG4iKTsKLQlwdXNoKEBvdXQsIiRmdW5jOlxuIik7Ci0JJHN0YWNrPTQ7Ci0JfQotCi1zdWIgbWFpbidmdW5jdGlvbl9lbmQKLQl7Ci0JbG9jYWwoJGZ1bmMpPUBfOwotCi0JJGZ1bmM9JHVuZGVyLiRmdW5jOwotCi0JbG9jYWwoJHRtcCk9PDwiRU9GIjsKLQlwb3BsCSVlZGkKLQlwb3BsCSVlc2kKLQlwb3BsCSVlYngKLQlwb3BsCSVlYnAKLQlyZXQKLSR7ZG90fUxfJHtmdW5jfV9lbmQ6Ci1FT0YKLQlwdXNoKEBvdXQsJHRtcCk7Ci0KLQlpZiAoJG1haW4nY3BwKQotCQl7IHB1c2goQG91dCwiU0laRSgkZnVuYywke2RvdH1MXyR7ZnVuY31fZW5kLSRmdW5jKVxuIik7IH0KLQllbHNpZiAoJG1haW4nY29mZiBvciAkbWFpbidhb3V0KQotICAgICAgICAgICAgICAgIHsgfQotCWVsc2UJeyBwdXNoKEBvdXQsIi5zaXplXHQkZnVuYywke2RvdH1MXyR7ZnVuY31fZW5kLSRmdW5jXG4iKTsgfQotCXB1c2goQG91dCwiLmlkZW50CVwiJGZ1bmNcIlxuIik7Ci0JJHN0YWNrPTA7Ci0JJWxhYmVsPSgpOwotCX0KLQotc3ViIG1haW4nZnVuY3Rpb25fZW5kX0EKLQl7Ci0JbG9jYWwoJGZ1bmMpPUBfOwotCi0JbG9jYWwoJHRtcCk9PDwiRU9GIjsKLQlwb3BsCSVlZGkKLQlwb3BsCSVlc2kKLQlwb3BsCSVlYngKLQlwb3BsCSVlYnAKLQlyZXQKLUVPRgotCXB1c2goQG91dCwkdG1wKTsKLQl9Ci0KLXN1YiBtYWluJ2Z1bmN0aW9uX2VuZF9CCi0JewotCWxvY2FsKCRmdW5jKT1AXzsKLQotCSRmdW5jPSR1bmRlci4kZnVuYzsKLQotCXB1c2goQG91dCwiJHtkb3R9TF8ke2Z1bmN9X2VuZDpcbiIpOwotCWlmICgkbWFpbidjcHApCi0JCXsgcHVzaChAb3V0LCJTSVpFKCRmdW5jLCR7ZG90fUxfJHtmdW5jfV9lbmQtJGZ1bmMpXG4iKTsgfQotICAgICAgICBlbHNpZiAoJG1haW4nY29mZiBvciAkbWFpbidhb3V0KQotICAgICAgICAgICAgICAgIHsgfQotCWVsc2UJeyBwdXNoKEBvdXQsIi5zaXplXHQkZnVuYywke2RvdH1MXyR7ZnVuY31fZW5kLSRmdW5jXG4iKTsgfQotCXB1c2goQG91dCwiLmlkZW50CVwiJGZ1bmNcIlxuIik7Ci0JJHN0YWNrPTA7Ci0JJWxhYmVsPSgpOwotCX0KLQotc3ViIG1haW4nd3BhcmFtCi0JewotCWxvY2FsKCRudW0pPUBfOwotCi0JcmV0dXJuKCZtYWluJ0RXUCgkc3RhY2srJG51bSo0LCJlc3AiLCIiLDApKTsKLQl9Ci0KLXN1YiBtYWluJ3N0YWNrX3B1c2gKLQl7Ci0JbG9jYWwoJG51bSk9QF87Ci0JJHN0YWNrKz0kbnVtKjQ7Ci0JJm1haW4nc3ViKCJlc3AiLCRudW0qNCk7Ci0JfQotCi1zdWIgbWFpbidzdGFja19wb3AKLQl7Ci0JbG9jYWwoJG51bSk9QF87Ci0JJHN0YWNrLT0kbnVtKjQ7Ci0JJm1haW4nYWRkKCJlc3AiLCRudW0qNCk7Ci0JfQotCi1zdWIgbWFpbidzd3RtcAotCXsKLQlyZXR1cm4oJm1haW4nRFdQKCRfWzBdKjQsImVzcCIsIiIsMCkpOwotCX0KLQotIyBTaG91bGQgdXNlIHN3dG1wLCB3aGljaCBpcyBhYm92ZSBlc3AuICBMaW5peCBjYW4gdHJhc2ggdGhlIHN0YWNrIGFib3ZlIGVzcAotI3N1YiBtYWluJ3d0bXAKLSMJewotIwlsb2NhbCgkbnVtKT1AXzsKLSMKLSMJcmV0dXJuKCZtYWluJ0RXUCgtKCRudW0rMSkqNCwiZXNwIiwiIiwwKSk7Ci0jCX0KLQotc3ViIG1haW4nY29tbWVudAotCXsKLQlpZiAoIWRlZmluZWQoJGNvbV9zdGFydCkgb3IgJG1haW4nZWxmKQotCQl7CSMgUmVnYXJkaW5nICRtYWluJ2VsZiBhYm92ZS4uLgotCQkJIyBHTlUgYW5kIFNWUjQgYXMnZXMgdXNlIGRpZmZlcmVudCBjb21tZW50IGRlbGltaXRlcnMsCi0JCXB1c2goQG91dCwiXG4iKTsJIyBzbyB3ZSBqdXN0IHNraXAgRUxGIGNvbW1lbnRzLi4uCi0JCXJldHVybjsKLQkJfQotCWZvcmVhY2ggKEBfKQotCQl7Ci0JCWlmICgvXlxzKiQvKQotCQkJeyBwdXNoKEBvdXQsIlxuIik7IH0KLQkJZWxzZQotCQkJeyBwdXNoKEBvdXQsIlx0JGNvbV9zdGFydCAkXyAkY29tX2VuZFxuIik7IH0KLQkJfQotCX0KLQotc3ViIG1haW4ncHVibGljX2xhYmVsCi0JewotCSRsYWJlbHskX1swXX09IiR7dW5kZXJ9JHtfWzBdfSIJaWYgKCFkZWZpbmVkKCRsYWJlbHskX1swXX0pKTsKLQlwdXNoKEBvdXQsIi5nbG9ibFx0JGxhYmVseyRfWzBdfVxuIik7Ci0JfQotCi1zdWIgbWFpbidsYWJlbAotCXsKLQlpZiAoIWRlZmluZWQoJGxhYmVseyRfWzBdfSkpCi0JCXsKLQkJJGxhYmVseyRfWzBdfT0iJHtkb3R9JHtsYWJlbH0ke19bMF19IjsKLQkJJGxhYmVsKys7Ci0JCX0KLQlyZXR1cm4oJGxhYmVseyRfWzBdfSk7Ci0JfQotCi1zdWIgbWFpbidzZXRfbGFiZWwKLQl7Ci0JaWYgKCFkZWZpbmVkKCRsYWJlbHskX1swXX0pKQotCQl7Ci0JCSRsYWJlbHskX1swXX09IiR7ZG90fSR7bGFiZWx9JHtfWzBdfSI7Ci0JCSRsYWJlbCsrOwotCQl9Ci0JaWYgKCRfWzFdIT0wKQotCQl7Ci0JCWlmICgkX1sxXT4xKQl7IG1haW4nYWxpZ24oJF9bMV0pOwkJfQotCQllbHNlCQl7IHB1c2goQG91dCwiLmFsaWduICRhbGlnblxuIik7CX0KLQkJfQotCXB1c2goQG91dCwiJGxhYmVseyRfWzBdfTpcbiIpOwotCX0KLQotc3ViIG1haW4nZmlsZV9lbmQKLQl7Ci0JIyB0cnkgdG8gZGV0ZWN0IGlmIFNTRTIgb3IgTU1YIGV4dGVuc2lvbnMgd2VyZSB1c2VkIG9uIEVMRiBwbGF0Zm9ybS4uLgotCWlmICgkbWFpbidlbGYgJiYgZ3JlcCB7L1xiJVt4XSptbVswLTddXGJ8T1BFTlNTTF9pYTMyY2FwX1BcYi9pfSBAb3V0KSB7Ci0JCWxvY2FsKCR0bXApOwotCi0JCXB1c2ggKEBvdXQsIlxuLnNlY3Rpb25cdC5ic3NcbiIpOwotCQlwdXNoIChAb3V0LCIuY29tbVx0JHt1bmRlcn1PUEVOU1NMX2lhMzJjYXBfUCw0LDRcbiIpOwotCi0JCXJldHVybjsKLQl9Ci0KLQlpZiAoJGNvbnN0IG5lICIiKQotCQl7Ci0JCXB1c2goQG91dCwiLnNlY3Rpb24gLnJvZGF0YVxuIik7Ci0JCXB1c2goQG91dCwkY29uc3QpOwotCQkkY29uc3Q9IiI7Ci0JCX0KLQl9Ci0KLXN1YiBtYWluJ2RhdGFfYnl0ZQotCXsKLQlwdXNoKEBvdXQsIlx0LmJ5dGVcdCIuam9pbignLCcsQF8pLiJcbiIpOwotCX0KLQotc3ViIG1haW4nZGF0YV93b3JkCi0JewotCXB1c2goQG91dCwiXHQubG9uZ1x0Ii5qb2luKCcsJyxAXykuIlxuIik7Ci0JfQotCi1zdWIgbWFpbidhbGlnbgotCXsKLQlteSAkdmFsPSRfWzBdLCRwMiwkaTsKLQlpZiAoJG1haW4nYW91dCkgewotCQlmb3IgKCRwMj0wOyR2YWwhPTA7JHZhbD4+PTEpIHsgJHAyKys7IH0KLQkJJHZhbD0kcDItMTsKLQkJJHZhbC49IiwweDkwIjsKLQl9Ci0JcHVzaChAb3V0LCIuYWxpZ25cdCR2YWxcbiIpOwotCX0KLQotIyBkZWJ1ZyBvdXRwdXQgZnVuY3Rpb25zOiBwdXRzLCBwdXR4LCBwcmludGYKLQotc3ViIG1haW4ncHV0cwotCXsKLQkmcHVzaHZhcnMoKTsKLQkmbWFpbidwdXNoKCckTHN0cmluZycgLiArKyRjb25zdGwpOwotCSZtYWluJ2NhbGwoJ3B1dHMnKTsKLQkkc3RhY2stPTQ7Ci0JJm1haW4nYWRkKCJlc3AiLDQpOwotCSZwb3B2YXJzKCk7Ci0KLQkkY29uc3QgLj0gIkxzdHJpbmckY29uc3RsOlxuXHQuc3RyaW5nIFwiQF9bMF1cIlxuIjsKLQl9Ci0KLXN1YiBtYWluJ3B1dHgKLQl7Ci0JJnB1c2h2YXJzKCk7Ci0JJm1haW4ncHVzaCgkX1swXSk7Ci0JJm1haW4ncHVzaCgnJExzdHJpbmcnIC4gKyskY29uc3RsKTsKLQkmbWFpbidjYWxsKCdwcmludGYnKTsKLQkmbWFpbidhZGQoImVzcCIsOCk7Ci0JJHN0YWNrLT04OwotCSZwb3B2YXJzKCk7Ci0KLQkkY29uc3QgLj0gIkxzdHJpbmckY29uc3RsOlxuXHQuc3RyaW5nIFwiXCVYXCJcbiI7Ci0JfQotCi1zdWIgbWFpbidwcmludGYKLQl7Ci0JJG9zdGFjayA9ICRzdGFjazsKLQkmcHVzaHZhcnMoKTsKLQlmb3IgKCRpID0gQF8gLSAxOyAkaSA+PSAwOyAkaS0tKQotCQl7Ci0JCWlmICgkaSA9PSAwKSAjIGNoYW5nZSB0aGlzIHRvIHN1cHBvcnQgJXMgZm9ybWF0IHN0cmluZ3MKLQkJCXsKLQkJCSZtYWluJ3B1c2goJyRMc3RyaW5nJyAuICsrJGNvbnN0bCk7Ci0JCQkkY29uc3QgLj0gIkxzdHJpbmckY29uc3RsOlxuXHQuc3RyaW5nIFwiQF9bJGldXCJcbiI7Ci0JCQl9Ci0JCWVsc2UKLQkJCXsKLQkJCWlmICgkX1skaV0gPX4gLyhbMC05XSopXCglZXNwXCkvKQotCQkJCXsKLQkJCQkmbWFpbidwdXNoKCgkMSArICRzdGFjayAtICRvc3RhY2spIC4gJyglZXNwKScpOwotCQkJCX0KLQkJCWVsc2UKLQkJCQl7Ci0JCQkJJm1haW4ncHVzaCgkX1skaV0pOwotCQkJCX0KLQkJCX0KLQkJfQotCSZtYWluJ2NhbGwoJ3ByaW50ZicpOwotCSRzdGFjay09NCpAXzsKLQkmbWFpbidhZGQoImVzcCIsNCpAXyk7Ci0JJnBvcHZhcnMoKTsKLQl9Ci0KLXN1YiBwdXNodmFycwotCXsKLQkmbWFpbidwdXNoZigpOwotCSZtYWluJ3B1c2goImVkeCIpOwotCSZtYWluJ3B1c2goImVjeCIpOwotCSZtYWluJ3B1c2goImVheCIpOwotCX0KLQotc3ViIHBvcHZhcnMKLQl7Ci0JJm1haW4ncG9wKCJlYXgiKTsKLQkmbWFpbidwb3AoImVjeCIpOwotCSZtYWluJ3BvcCgiZWR4Iik7Ci0JJm1haW4ncG9wZigpOwotCX0KLQotc3ViIG1haW4ncGljbWV1cAotCXsKLQlsb2NhbCgkZHN0LCRzeW0pPUBfOwotCWlmICgkbWFpbidjcHApCi0JCXsKLQkJbG9jYWwoJHRtcCk9PDxfX187Ci0jaWYgKGRlZmluZWQoRUxGKSB8fCBkZWZpbmVkKFNPTCkpICYmIGRlZmluZWQoUElDKQotCWNhbGwJMWYKLTE6CXBvcGwJJHJlZ3N7JGRzdH0KLQlhZGRsCVwkX0dMT0JBTF9PRkZTRVRfVEFCTEVfK1suLTFiXSwkcmVnc3skZHN0fQotCW1vdmwJJHN5bVxAR09UKCRyZWdzeyRkc3R9KSwkcmVnc3skZHN0fQotI2Vsc2UKLQlsZWFsCSRzeW0sJHJlZ3N7JGRzdH0KLSNlbmRpZgotX19fCi0JCXB1c2goQG91dCwkdG1wKTsKLQkJfQotCWVsc2lmICgkbWFpbidwaWMgJiYgKCRtYWluJ2VsZiB8fCAkbWFpbidhb3V0KSkKLQkJewotCQkmbWFpbidjYWxsKCZtYWluJ2xhYmVsKCJQSUNfbWVfdXAiKSk7Ci0JCSZtYWluJ3NldF9sYWJlbCgiUElDX21lX3VwIik7Ci0JCSZtYWluJ2JsaW5kcG9wKCRkc3QpOwotCQkmbWFpbidhZGQoJGRzdCwiXCQke3VuZGVyfV9HTE9CQUxfT0ZGU0VUX1RBQkxFXytbLi0iLgotCQkJCSZtYWluJ2xhYmVsKCJQSUNfbWVfdXAiKSAuICJdIik7Ci0JCSZtYWluJ21vdigkZHN0LCZtYWluJ0RXUCgkdW5kZXIuJHN5bS4iXEBHT1QiLCRkc3QpKTsKLQkJfQotCWVsc2UKLQkJewotCQkmbWFpbidsZWEoJGRzdCwmbWFpbidEV1AoJHN5bSkpOwotCQl9Ci0JfQotCi1zdWIgbWFpbidibGluZHBvcCB7ICZvdXQxKCJwb3BsIixAXyk7IH0KLQotc3ViIG1haW4naW5pdHNlZwotCXsKLQlsb2NhbCgkZik9QF87Ci0JbG9jYWwoJHRtcCk7Ci0JaWYgKCRtYWluJ2VsZikKLQkJewotCQkkdG1wPTw8X19fOwotLnNlY3Rpb24JLmluaXQKLQljYWxsCSR1bmRlciRmCi0Jam1wCS5MaW5pdGFsaWduCi0uYWxpZ24JJGFsaWduCi0uTGluaXRhbGlnbjoKLV9fXwotCQl9Ci0JZWxzaWYgKCRtYWluJ2NvZmYpCi0JCXsKLQkJJHRtcD08PF9fXzsJIyBhcHBsaWVzIHRvIGJvdGggQ3lnd2luIGFuZCBNaW5ndwotLnNlY3Rpb24JLmN0b3JzCi0ubG9uZwkkdW5kZXIkZgotX19fCi0JCX0KLQllbHNpZiAoJG1haW4nYW91dCkKLQkJewotCQlsb2NhbCgkY3Rvcik9IiR7dW5kZXJ9X0dMT0JBTF9cJElcJCRmIjsKLQkJJHRtcD0iLnRleHRcbiI7Ci0JCSR0bXAuPSIudHlwZQkkY3RvcixcQGZ1bmN0aW9uXG4iIGlmICgkbWFpbidwaWMpOwotCQkkdG1wLj08PF9fXzsJIyBPcGVuQlNEIHdheS4uLgotLmdsb2JsCSRjdG9yCi0uYWxpZ24JMgotJGN0b3I6Ci0Jam1wCSR1bmRlciRmCi1fX18KLQkJfQotCXB1c2goQG91dCwkdG1wKSBpZiAoJHRtcCk7Ci0JfQotCi0xOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3BrY3MxMi9NYWtlZmlsZSBiL2NyeXB0by9wa2NzMTIvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlZDIyNmIuLjAwMDAwMDAKLS0tIGEvY3J5cHRvL3BrY3MxMi9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDI5MyArMCwwIEBACi0jCi0jIE9wZW5TU0wvY3J5cHRvL3BrY3MxMi9NYWtlZmlsZQotIwotCi1ESVI9CXBrY3MxMgotVE9QPQkuLi8uLgotQ0M9CWNjCi1JTkNMVURFUz0gLUkuLiAtSSQoVE9QKSAtSS4uLy4uL2luY2x1ZGUKLUNGTEFHPS1nCi1NQUtFRklMRT0JTWFrZWZpbGUKLUFSPQkJYXIgcgotCi1DRkxBR1M9ICQoSU5DTFVERVMpICQoQ0ZMQUcpCi0KLUdFTkVSQUw9TWFrZWZpbGUKLVRFU1Q9Ci1BUFBTPQotCi1MSUI9JChUT1ApL2xpYmNyeXB0by5hCi1MSUJTUkM9IHAxMl9hZGQuYyBwMTJfYXNuLmMgcDEyX2F0dHIuYyBwMTJfY3JwdC5jIHAxMl9jcnQuYyBwMTJfZGVjci5jIFwKLQlwMTJfaW5pdC5jIHAxMl9rZXkuYyBwMTJfa2lzcy5jIHAxMl9tdXRsLmNcCi0JcDEyX3V0bC5jIHAxMl9ucGFzLmMgcGsxMmVyci5jIHAxMl9wOGQuYyBwMTJfcDhlLmMKLUxJQk9CSj0gcDEyX2FkZC5vIHAxMl9hc24ubyBwMTJfYXR0ci5vIHAxMl9jcnB0Lm8gcDEyX2NydC5vIHAxMl9kZWNyLm8gXAotCXAxMl9pbml0Lm8gcDEyX2tleS5vIHAxMl9raXNzLm8gcDEyX211dGwub1wKLQlwMTJfdXRsLm8gcDEyX25wYXMubyBwazEyZXJyLm8gcDEyX3A4ZC5vIHAxMl9wOGUubwotCi1TUkM9ICQoTElCU1JDKQotCi1FWEhFQURFUj0gIHBrY3MxMi5oCi1IRUFERVI9CSQoRVhIRUFERVIpCi0KLUFMTD0gICAgJChHRU5FUkFMKSAkKFNSQykgJChIRUFERVIpCi0KLXRvcDoKLQkoY2QgLi4vLi47ICQoTUFLRSkgRElSUz1jcnlwdG8gU0RJUlM9JChESVIpIHN1Yl9hbGwpCi0KLXRlc3Q6Ci0KLWFsbDoJbGliCi0KLWxpYjoJJChMSUJPQkopCi0JJChBUlgpICQoTElCKSAkKExJQk9CSikKLQkkKFJBTkxJQikgJChMSUIpIHx8IGVjaG8gTmV2ZXIgbWluZC4KLQlAdG91Y2ggbGliCi0KLWZpbGVzOgotCSQoUEVSTCkgJChUT1ApL3V0aWwvZmlsZXMucGwgTWFrZWZpbGUgPj4gJChUT1ApL01JTkZPCi0KLWxpbmtzOgotCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9pbmNsdWRlL29wZW5zc2wgJChFWEhFQURFUikKLQlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vdGVzdCAkKFRFU1QpCi0JQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL2FwcHMgJChBUFBTKQotCi1pbnN0YWxsOgotCUBbIC1uICIkKElOU1RBTExUT1ApIiBdICMgc2hvdWxkIGJlIHNldCBieSB0b3AgTWFrZWZpbGUuLi4KLQlAaGVhZGVybGlzdD0iJChFWEhFQURFUikiOyBmb3IgaSBpbiAkJGhlYWRlcmxpc3QgOyBcCi0JZG8gIFwKLQkoY3AgJCRpICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpOyBcCi0JY2htb2QgNjQ0ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpICk7IFwKLQlkb25lOwotCi10YWdzOgotCWN0YWdzICQoU1JDKQotCi10ZXN0czoKLQotbGludDoKLQlsaW50IC1ETElOVCAkKElOQ0xVREVTKSAkKFNSQyk+Zmx1ZmYKLQotZGVwZW5kOgotCUBbIC1uICIkKE1BS0VERVBFTkQpIiBdICMgc2hvdWxkIGJlIHNldCBieSB1cHBlciBNYWtlZmlsZS4uLgotCSQoTUFLRURFUEVORCkgLS0gJChDRkxBRykgJChJTkNMVURFUykgJChERVBGTEFHKSAtLSAkKFBST0dTKSAkKExJQlNSQykKLQotZGNsZWFuOgotCSQoUEVSTCkgLXBlICdpZiAoL14jIERPIE5PVCBERUxFVEUgVEhJUyBMSU5FLykge3ByaW50OyBleGl0KDApO30nICQoTUFLRUZJTEUpID5NYWtlZmlsZS5uZXcKLQltdiAtZiBNYWtlZmlsZS5uZXcgJChNQUtFRklMRSkKLQotY2xlYW46Ci0Jcm0gLWYgKi5vICoub2JqIGxpYiB0YWdzIGNvcmUgLnB1cmUgLm5mcyogKi5vbGQgKi5iYWsgZmx1ZmYKLQotIyBETyBOT1QgREVMRVRFIFRISVMgTElORSAtLSBtYWtlIGRlcGVuZCBkZXBlbmRzIG9uIGl0LgotCi1wMTJfYWRkLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi1wMTJfYWRkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXAxMl9hZGQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1wMTJfYWRkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKLXAxMl9hZGQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1wMTJfYWRkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi1wMTJfYWRkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLXAxMl9hZGQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotcDEyX2FkZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotcDEyX2FkZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczEyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLXAxMl9hZGQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotcDEyX2FkZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotcDEyX2FkZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oCi1wMTJfYWRkLm86IC4uL2NyeXB0bGliLmggcDEyX2FkZC5jCi1wMTJfYXNuLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi1wMTJfYXNuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xdC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotcDEyX2Fzbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1wMTJfYXNuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1wMTJfYXNuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLXAxMl9hc24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotcDEyX2Fzbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1wMTJfYXNuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotcDEyX2Fzbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotcDEyX2Fzbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczEyLmgKLXAxMl9hc24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1wMTJfYXNuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotcDEyX2Fzbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi1wMTJfYXNuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2NyeXB0bGliLmggcDEyX2Fzbi5jCi1wMTJfYXR0ci5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotcDEyX2F0dHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotcDEyX2F0dHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1wMTJfYXR0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi1wMTJfYXR0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLXAxMl9hdHRyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi1wMTJfYXR0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi1wMTJfYXR0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1wMTJfYXR0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotcDEyX2F0dHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3MxMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi1wMTJfYXR0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCi1wMTJfYXR0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotcDEyX2F0dHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAotcDEyX2F0dHIubzogLi4vY3J5cHRsaWIuaCBwMTJfYXR0ci5jCi1wMTJfY3JwdC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotcDEyX2NycHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotcDEyX2NycHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1wMTJfY3JwdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi1wMTJfY3JwdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLXAxMl9jcnB0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi1wMTJfY3JwdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi1wMTJfY3JwdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1wMTJfY3JwdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotcDEyX2NycHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3MxMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi1wMTJfY3JwdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCi1wMTJfY3JwdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotcDEyX2NycHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAotcDEyX2NycHQubzogLi4vY3J5cHRsaWIuaCBwMTJfY3JwdC5jCi1wMTJfY3J0Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi1wMTJfY3J0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXAxMl9jcnQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1wMTJfY3J0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKLXAxMl9jcnQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1wMTJfY3J0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi1wMTJfY3J0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLXAxMl9jcnQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotcDEyX2NydC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotcDEyX2NydC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczEyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLXAxMl9jcnQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotcDEyX2NydC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotcDEyX2NydC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oCi1wMTJfY3J0Lm86IC4uL2NyeXB0bGliLmggcDEyX2NydC5jCi1wMTJfZGVjci5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotcDEyX2RlY3IubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotcDEyX2RlY3IubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1wMTJfZGVjci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi1wMTJfZGVjci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLXAxMl9kZWNyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi1wMTJfZGVjci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi1wMTJfZGVjci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1wMTJfZGVjci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotcDEyX2RlY3IubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3MxMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi1wMTJfZGVjci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCi1wMTJfZGVjci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotcDEyX2RlY3IubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAotcDEyX2RlY3IubzogLi4vY3J5cHRsaWIuaCBwMTJfZGVjci5jCi1wMTJfaW5pdC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotcDEyX2luaXQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotcDEyX2luaXQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1wMTJfaW5pdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi1wMTJfaW5pdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLXAxMl9pbml0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi1wMTJfaW5pdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi1wMTJfaW5pdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1wMTJfaW5pdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotcDEyX2luaXQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3MxMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi1wMTJfaW5pdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCi1wMTJfaW5pdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotcDEyX2luaXQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAotcDEyX2luaXQubzogLi4vY3J5cHRsaWIuaCBwMTJfaW5pdC5jCi1wMTJfa2V5Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi1wMTJfa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaAotcDEyX2tleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1wMTJfa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1wMTJfa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLXAxMl9rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotcDEyX2tleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1wMTJfa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotcDEyX2tleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotcDEyX2tleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczEyLmgKLXAxMl9rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1wMTJfa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotcDEyX2tleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi1wMTJfa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2NyeXB0bGliLmggcDEyX2tleS5jCi1wMTJfa2lzcy5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotcDEyX2tpc3MubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotcDEyX2tpc3MubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1wMTJfa2lzcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi1wMTJfa2lzcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLXAxMl9raXNzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi1wMTJfa2lzcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi1wMTJfa2lzcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1wMTJfa2lzcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotcDEyX2tpc3MubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3MxMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi1wMTJfa2lzcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCi1wMTJfa2lzcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotcDEyX2tpc3MubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAotcDEyX2tpc3MubzogLi4vY3J5cHRsaWIuaCBwMTJfa2lzcy5jCi1wMTJfbXV0bC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotcDEyX211dGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotcDEyX211dGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1wMTJfbXV0bC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi1wMTJfbXV0bC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLXAxMl9tdXRsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi1wMTJfbXV0bC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1wMTJfbXV0bC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLXAxMl9tdXRsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1wMTJfbXV0bC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotcDEyX211dGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3MxMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi1wMTJfbXV0bC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotcDEyX211dGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1wMTJfbXV0bC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi1wMTJfbXV0bC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9jcnlwdGxpYi5oIHAxMl9tdXRsLmMKLXAxMl9ucGFzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1wMTJfbnBhcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1wMTJfbnBhcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotcDEyX25wYXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotcDEyX25wYXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotcDEyX25wYXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotcDEyX25wYXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi1wMTJfbnBhcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotcDEyX25wYXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXAxMl9ucGFzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wZW0uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGVtMi5oCi1wMTJfbnBhcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczEyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLXAxMl9ucGFzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLXAxMl9ucGFzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1wMTJfbnBhcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oCi1wMTJfbnBhcy5vOiBwMTJfbnBhcy5jCi1wMTJfcDhkLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi1wMTJfcDhkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXAxMl9wOGQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1wMTJfcDhkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKLXAxMl9wOGQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1wMTJfcDhkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi1wMTJfcDhkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLXAxMl9wOGQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotcDEyX3A4ZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotcDEyX3A4ZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczEyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLXAxMl9wOGQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotcDEyX3A4ZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotcDEyX3A4ZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oCi1wMTJfcDhkLm86IC4uL2NyeXB0bGliLmggcDEyX3A4ZC5jCi1wMTJfcDhlLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi1wMTJfcDhlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXAxMl9wOGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1wMTJfcDhlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKLXAxMl9wOGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1wMTJfcDhlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi1wMTJfcDhlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLXAxMl9wOGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotcDEyX3A4ZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotcDEyX3A4ZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczEyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLXAxMl9wOGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotcDEyX3A4ZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotcDEyX3A4ZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oCi1wMTJfcDhlLm86IC4uL2NyeXB0bGliLmggcDEyX3A4ZS5jCi1wMTJfdXRsLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi1wMTJfdXRsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXAxMl91dGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1wMTJfdXRsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKLXAxMl91dGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1wMTJfdXRsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi1wMTJfdXRsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLXAxMl91dGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotcDEyX3V0bC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotcDEyX3V0bC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczEyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLXAxMl91dGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotcDEyX3V0bC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotcDEyX3V0bC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oCi1wMTJfdXRsLm86IC4uL2NyeXB0bGliLmggcDEyX3V0bC5jCi1wazEyZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1wazEyZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLXBrMTJlcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLXBrMTJlcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotcGsxMmVyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1wazEyZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLXBrMTJlcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi1wazEyZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi1wazEyZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzMTIuaAotcGsxMmVyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLXBrMTJlcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1wazEyZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLXBrMTJlcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggcGsxMmVyci5jCmRpZmYgLS1naXQgYS9jcnlwdG8vcGtjczEyL3AxMl9hZGQuYyBiL2NyeXB0by9wa2NzMTIvcDEyX2FkZC5jCmluZGV4IDFmM2UzNzguLjI3YWM1ZmEgMTAwNjQ0Ci0tLSBhL2NyeXB0by9wa2NzMTIvcDEyX2FkZC5jCisrKyBiL2NyeXB0by9wa2NzMTIvcDEyX2FkZC5jCkBAIC0xMDYsNiArMTA2LDcgQEAKIAkgICAgIFBLQ1M4X1BSSVZfS0VZX0lORk8gKnA4KQogewogCVBLQ1MxMl9TQUZFQkFHICpiYWc7CisJY29uc3QgRVZQX0NJUEhFUiAqcGJlX2NpcGg7CiAKIAkvKiBTZXQgdXAgdGhlIHNhZmUgYmFnICovCiAJaWYgKCEoYmFnID0gUEtDUzEyX1NBRkVCQUdfbmV3KCkpKSB7CkBAIC0xMTQsOCArMTE1LDE0IEBACiAJfQogCiAJYmFnLT50eXBlID0gT0JKX25pZDJvYmooTklEX3BrY3M4U2hyb3VkZWRLZXlCYWcpOworCisJcGJlX2NpcGggPSBFVlBfZ2V0X2NpcGhlcmJ5bmlkKHBiZV9uaWQpOworCisJaWYgKHBiZV9jaXBoKQorCQlwYmVfbmlkID0gLTE7CisKIAlpZiAoIShiYWctPnZhbHVlLnNoa2V5YmFnID0gCi0JICBQS0NTOF9lbmNyeXB0KHBiZV9uaWQsIE5VTEwsIHBhc3MsIHBhc3NsZW4sIHNhbHQsIHNhbHRsZW4sIGl0ZXIsCisJICBQS0NTOF9lbmNyeXB0KHBiZV9uaWQsIHBiZV9jaXBoLCBwYXNzLCBwYXNzbGVuLCBzYWx0LCBzYWx0bGVuLCBpdGVyLAogCQkJCQkJCQkJIHA4KSkpIHsKIAkJUEtDUzEyZXJyKFBLQ1MxMl9GX1BLQ1MxMl9NQUtFX1NIS0VZQkFHLCBFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CiAJCXJldHVybiBOVUxMOwpAQCAtMTY0LDYgKzE3MSw3IEBACiB7CiAJUEtDUzcgKnA3OwogCVg1MDlfQUxHT1IgKnBiZTsKKwljb25zdCBFVlBfQ0lQSEVSICpwYmVfY2lwaDsKIAlpZiAoIShwNyA9IFBLQ1M3X25ldygpKSkgewogCQlQS0NTMTJlcnIoUEtDUzEyX0ZfUEtDUzEyX1BBQ0tfUDdFTkNEQVRBLCBFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CiAJCXJldHVybiBOVUxMOwpAQCAtMTczLDcgKzE4MSwxNSBAQAogCQkJCVBLQ1MxMl9SX0VSUk9SX1NFVFRJTkdfRU5DUllQVEVEX0RBVEFfVFlQRSk7CiAJCXJldHVybiBOVUxMOwogCX0KLQlpZiAoIShwYmUgPSBQS0NTNV9wYmVfc2V0KHBiZV9uaWQsIGl0ZXIsIHNhbHQsIHNhbHRsZW4pKSkgeworCisJcGJlX2NpcGggPSBFVlBfZ2V0X2NpcGhlcmJ5bmlkKHBiZV9uaWQpOworCisJaWYgKHBiZV9jaXBoKQorCQlwYmUgPSBQS0NTNV9wYmUyX3NldChwYmVfY2lwaCwgaXRlciwgc2FsdCwgc2FsdGxlbik7CisJZWxzZQorCQlwYmUgPSBQS0NTNV9wYmVfc2V0KHBiZV9uaWQsIGl0ZXIsIHNhbHQsIHNhbHRsZW4pOworCisJaWYgKCFwYmUpIHsKIAkJUEtDUzEyZXJyKFBLQ1MxMl9GX1BLQ1MxMl9QQUNLX1A3RU5DREFUQSwgRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwogCQlyZXR1cm4gTlVMTDsKIAl9CmRpZmYgLS1naXQgYS9jcnlwdG8vcGtjczEyL3AxMl9hdHRyLmMgYi9jcnlwdG8vcGtjczEyL3AxMl9hdHRyLmMKaW5kZXggODU2OTMzZC4uZTRkOWMyNSAxMDA2NDQKLS0tIGEvY3J5cHRvL3BrY3MxMi9wMTJfYXR0ci5jCisrKyBiL2NyeXB0by9wa2NzMTIvcDEyX2F0dHIuYwpAQCAtNjAsMTIgKzYwLDYgQEAKICNpbmNsdWRlICJjcnlwdGxpYi5oIgogI2luY2x1ZGUgPG9wZW5zc2wvcGtjczEyLmg+CiAKLSNpZmRlZiBPUEVOU1NMX1NZU19ORVRXQVJFCi0vKiBSZW5hbWUgdGhlc2UgZnVuY3Rpb25zIHRvIGF2b2lkIG5hbWUgY2xhc2hlcyBvbiBOZXRXYXJlIE9TICovCi0jZGVmaW5lIHVuaTJhc2MgT1BFTlNTTF91bmkyYXNjCi0jZGVmaW5lIGFzYzJ1bmkgT1BFTlNTTF9hc2MydW5pCi0jZW5kaWYKLQogLyogQWRkIGEgbG9jYWwga2V5aWQgdG8gYSBzYWZlYmFnICovCiAKIGludCBQS0NTMTJfYWRkX2xvY2Fsa2V5aWQoUEtDUzEyX1NBRkVCQUcgKmJhZywgdW5zaWduZWQgY2hhciAqbmFtZSwKQEAgLTE0NSw3ICsxMzksNyBAQAogCUFTTjFfVFlQRSAqYXR5cGU7CiAJaWYgKCEoYXR5cGUgPSBQS0NTMTJfZ2V0X2F0dHIoYmFnLCBOSURfZnJpZW5kbHlOYW1lKSkpIHJldHVybiBOVUxMOwogCWlmIChhdHlwZS0+dHlwZSAhPSBWX0FTTjFfQk1QU1RSSU5HKSByZXR1cm4gTlVMTDsKLQlyZXR1cm4gdW5pMmFzYyhhdHlwZS0+dmFsdWUuYm1wc3RyaW5nLT5kYXRhLAorCXJldHVybiBPUEVOU1NMX3VuaTJhc2MoYXR5cGUtPnZhbHVlLmJtcHN0cmluZy0+ZGF0YSwKIAkJCQkgYXR5cGUtPnZhbHVlLmJtcHN0cmluZy0+bGVuZ3RoKTsKIH0KIApkaWZmIC0tZ2l0IGEvY3J5cHRvL3BrY3MxMi9wMTJfY3JwdC5jIGIvY3J5cHRvL3BrY3MxMi9wMTJfY3JwdC5jCmluZGV4IGY4Yjk1MmUuLmI3MWQwN2IgMTAwNjQ0Ci0tLSBhL2NyeXB0by9wa2NzMTIvcDEyX2NycHQuYworKysgYi9jcnlwdG8vcGtjczEyL3AxMl9jcnB0LmMKQEAgLTYwLDI4ICs2MCwxMCBAQAogI2luY2x1ZGUgImNyeXB0bGliLmgiCiAjaW5jbHVkZSA8b3BlbnNzbC9wa2NzMTIuaD4KIAotLyogUEtDUyMxMiBzcGVjaWZpYyBQQkUgZnVuY3Rpb25zICovCisvKiBQS0NTIzEyIFBCRSBhbGdvcml0aG1zIG5vdyBpbiBzdGF0aWMgdGFibGUgKi8KIAogdm9pZCBQS0NTMTJfUEJFX2FkZCh2b2lkKQogewotI2lmbmRlZiBPUEVOU1NMX05PX1JDNAotRVZQX1BCRV9hbGdfYWRkKE5JRF9wYmVfV2l0aFNIQTFBbmQxMjhCaXRSQzQsIEVWUF9yYzQoKSwgRVZQX3NoYTEoKSwKLQkJCQkJCQkgUEtDUzEyX1BCRV9rZXlpdmdlbik7Ci1FVlBfUEJFX2FsZ19hZGQoTklEX3BiZV9XaXRoU0hBMUFuZDQwQml0UkM0LCBFVlBfcmM0XzQwKCksIEVWUF9zaGExKCksCi0JCQkJCQkJIFBLQ1MxMl9QQkVfa2V5aXZnZW4pOwotI2VuZGlmCi0jaWZuZGVmIE9QRU5TU0xfTk9fREVTCi1FVlBfUEJFX2FsZ19hZGQoTklEX3BiZV9XaXRoU0hBMUFuZDNfS2V5X1RyaXBsZURFU19DQkMsCi0JCSAJRVZQX2Rlc19lZGUzX2NiYygpLCBFVlBfc2hhMSgpLCBQS0NTMTJfUEJFX2tleWl2Z2VuKTsKLUVWUF9QQkVfYWxnX2FkZChOSURfcGJlX1dpdGhTSEExQW5kMl9LZXlfVHJpcGxlREVTX0NCQywgCi0JCQlFVlBfZGVzX2VkZV9jYmMoKSwgRVZQX3NoYTEoKSwgUEtDUzEyX1BCRV9rZXlpdmdlbik7Ci0jZW5kaWYKLSNpZm5kZWYgT1BFTlNTTF9OT19SQzIKLUVWUF9QQkVfYWxnX2FkZChOSURfcGJlX1dpdGhTSEExQW5kMTI4Qml0UkMyX0NCQywgRVZQX3JjMl9jYmMoKSwKLQkJCQkJRVZQX3NoYTEoKSwgUEtDUzEyX1BCRV9rZXlpdmdlbik7Ci1FVlBfUEJFX2FsZ19hZGQoTklEX3BiZV9XaXRoU0hBMUFuZDQwQml0UkMyX0NCQywgRVZQX3JjMl80MF9jYmMoKSwKLQkJCQkJRVZQX3NoYTEoKSwgUEtDUzEyX1BCRV9rZXlpdmdlbik7Ci0jZW5kaWYKIH0KIAogaW50IFBLQ1MxMl9QQkVfa2V5aXZnZW4oRVZQX0NJUEhFUl9DVFggKmN0eCwgY29uc3QgY2hhciAqcGFzcywgaW50IHBhc3NsZW4sCmRpZmYgLS1naXQgYS9jcnlwdG8vcGtjczEyL3AxMl9jcnQuYyBiL2NyeXB0by9wa2NzMTIvcDEyX2NydC5jCmluZGV4IDk1MjIzNDIuLjk2YjEzMWQgMTAwNjQ0Ci0tLSBhL2NyeXB0by9wa2NzMTIvcDEyX2NydC5jCisrKyBiL2NyeXB0by9wa2NzMTIvcDEyX2NydC5jCkBAIC01OSwxMCArNTksNiBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSAiY3J5cHRsaWIuaCIKICNpbmNsdWRlIDxvcGVuc3NsL3BrY3MxMi5oPgotI2lmZGVmIE9QRU5TU0xfRklQUwotI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotI2VuZGlmCi0KIAogCiBzdGF0aWMgaW50IHBrY3MxMl9hZGRfYmFnKFNUQUNLX09GKFBLQ1MxMl9TQUZFQkFHKSAqKnBiYWdzLCBQS0NTMTJfU0FGRUJBRyAqYmFnKTsKQEAgLTk0LDE0ICs5MCw3IEBACiAKIAkvKiBTZXQgZGVmYXVsdHMgKi8KIAlpZiAoIW5pZF9jZXJ0KQotCQl7Ci0jaWZkZWYgT1BFTlNTTF9GSVBTCi0JCWlmIChGSVBTX21vZGUoKSkKLQkJCW5pZF9jZXJ0ID0gTklEX3BiZV9XaXRoU0hBMUFuZDNfS2V5X1RyaXBsZURFU19DQkM7Ci0JCWVsc2UKLSNlbmRpZgogCQluaWRfY2VydCA9IE5JRF9wYmVfV2l0aFNIQTFBbmQ0MEJpdFJDMl9DQkM7Ci0JCX0KIAlpZiAoIW5pZF9rZXkpCiAJCW5pZF9rZXkgPSBOSURfcGJlX1dpdGhTSEExQW5kM19LZXlfVHJpcGxlREVTX0NCQzsKIAlpZiAoIWl0ZXIpCmRpZmYgLS1naXQgYS9jcnlwdG8vcGtjczEyL3AxMl9rZXkuYyBiL2NyeXB0by9wa2NzMTIvcDEyX2tleS5jCmluZGV4IDVjZmU3MjcuLmEyOTc5NGIgMTAwNjQ0Ci0tLSBhL2NyeXB0by9wa2NzMTIvcDEyX2tleS5jCisrKyBiL2NyeXB0by9wa2NzMTIvcDEyX2tleS5jCkBAIC02OSwxMiArNjksNiBAQAogdm9pZCBoX19kdW1wICh1bnNpZ25lZCBjaGFyICpwLCBpbnQgbGVuKTsKICNlbmRpZgogCi0jaWZkZWYgT1BFTlNTTF9TWVNfTkVUV0FSRQotLyogUmVuYW1lIHRoZXNlIGZ1bmN0aW9ucyB0byBhdm9pZCBuYW1lIGNsYXNoZXMgb24gTmV0V2FyZSBPUyAqLwotI2RlZmluZSB1bmkyYXNjIE9QRU5TU0xfdW5pMmFzYwotI2RlZmluZSBhc2MydW5pIE9QRU5TU0xfYXNjMnVuaQotI2VuZGlmCi0KIC8qIFBLQ1MxMiBjb21wYXRpYmxlIGtleS9JViBnZW5lcmF0aW9uICovCiAjaWZuZGVmIG1pbgogI2RlZmluZSBtaW4oYSxiKSAoKGEpIDwgKGIpID8gKGEpIDogKGIpKQpAQCAtODcsMTUgKzgxLDE4IEBACiAJaW50IHJldDsKIAl1bnNpZ25lZCBjaGFyICp1bmlwYXNzOwogCWludCB1bmlwbGVuOworCiAJaWYoIXBhc3MpIHsKIAkJdW5pcGFzcyA9IE5VTEw7CiAJCXVuaXBsZW4gPSAwOwotCX0gZWxzZSBpZiAoIWFzYzJ1bmkocGFzcywgcGFzc2xlbiwgJnVuaXBhc3MsICZ1bmlwbGVuKSkgeworCX0gZWxzZSBpZiAoIU9QRU5TU0xfYXNjMnVuaShwYXNzLCBwYXNzbGVuLCAmdW5pcGFzcywgJnVuaXBsZW4pKSB7CiAJCVBLQ1MxMmVycihQS0NTMTJfRl9QS0NTMTJfS0VZX0dFTl9BU0MsRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwogCQlyZXR1cm4gMDsKIAl9CiAJcmV0ID0gUEtDUzEyX2tleV9nZW5fdW5pKHVuaXBhc3MsIHVuaXBsZW4sIHNhbHQsIHNhbHRsZW4sCiAJCQkJCQkgaWQsIGl0ZXIsIG4sIG91dCwgbWRfdHlwZSk7CisJaWYgKHJldCA8PSAwKQorCSAgICByZXR1cm4gMDsKIAlpZih1bmlwYXNzKSB7CiAJCU9QRU5TU0xfY2xlYW5zZSh1bmlwYXNzLCB1bmlwbGVuKTsJLyogQ2xlYXIgcGFzc3dvcmQgZnJvbSBtZW1vcnkgKi8KIAkJT1BFTlNTTF9mcmVlKHVuaXBhc3MpOwpAQCAtMTM1LDYgKzEzMiw4IEBACiAjZW5kaWYKIAl2ID0gRVZQX01EX2Jsb2NrX3NpemUgKG1kX3R5cGUpOwogCXUgPSBFVlBfTURfc2l6ZSAobWRfdHlwZSk7CisJaWYgKHUgPCAwKQorCSAgICByZXR1cm4gMDsKIAlEID0gT1BFTlNTTF9tYWxsb2MgKHYpOwogCUFpID0gT1BFTlNTTF9tYWxsb2MgKHUpOwogCUIgPSBPUEVOU1NMX21hbGxvYyAodiArIDEpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3BrY3MxMi9wMTJfa2lzcy5jIGIvY3J5cHRvL3BrY3MxMi9wMTJfa2lzcy5jCmluZGV4IDVjNGM2ZWMuLjI5MmNjM2UgMTAwNjQ0Ci0tLSBhL2NyeXB0by9wa2NzMTIvcDEyX2tpc3MuYworKysgYi9jcnlwdG8vcGtjczEyL3AxMl9raXNzLmMKQEAgLTYzLDE2ICs2MywxMyBAQAogLyogU2ltcGxpZmllZCBQS0NTIzEyIHJvdXRpbmVzICovCiAKIHN0YXRpYyBpbnQgcGFyc2VfcGsxMiggUEtDUzEyICpwMTIsIGNvbnN0IGNoYXIgKnBhc3MsIGludCBwYXNzbGVuLAotCQlFVlBfUEtFWSAqKnBrZXksIFg1MDkgKipjZXJ0LCBTVEFDS19PRihYNTA5KSAqKmNhKTsKKwkJRVZQX1BLRVkgKipwa2V5LCBTVEFDS19PRihYNTA5KSAqb2NlcnRzKTsKIAogc3RhdGljIGludCBwYXJzZV9iYWdzKCBTVEFDS19PRihQS0NTMTJfU0FGRUJBRykgKmJhZ3MsIGNvbnN0IGNoYXIgKnBhc3MsCi0JCSAgICAgICBpbnQgcGFzc2xlbiwgRVZQX1BLRVkgKipwa2V5LCBYNTA5ICoqY2VydCwKLQkJICAgICAgIFNUQUNLX09GKFg1MDkpICoqY2EsIEFTTjFfT0NURVRfU1RSSU5HICoqa2V5aWQsCi0JCSAgICAgICBjaGFyICprZXltYXRjaCk7CisJCSAgICAgICBpbnQgcGFzc2xlbiwgRVZQX1BLRVkgKipwa2V5LCBTVEFDS19PRihYNTA5KSAqb2NlcnRzKTsKIAogc3RhdGljIGludCBwYXJzZV9iYWcoIFBLQ1MxMl9TQUZFQkFHICpiYWcsIGNvbnN0IGNoYXIgKnBhc3MsIGludCBwYXNzbGVuLAotCQkJRVZQX1BLRVkgKipwa2V5LCBYNTA5ICoqY2VydCwgU1RBQ0tfT0YoWDUwOSkgKipjYSwKLQkJCUFTTjFfT0NURVRfU1RSSU5HICoqa2V5aWQsIGNoYXIgKmtleW1hdGNoKTsKKwkJCUVWUF9QS0VZICoqcGtleSwgU1RBQ0tfT0YoWDUwOSkgKm9jZXJ0cyk7CiAKIC8qIFBhcnNlIGFuZCBkZWNyeXB0IGEgUEtDUyMxMiBzdHJ1Y3R1cmUgcmV0dXJuaW5nIHVzZXIga2V5LCB1c2VyIGNlcnQKICAqIGFuZCBvdGhlciAoQ0EpIGNlcnRzLiBOb3RlIGVpdGhlciBjYSBzaG91bGQgYmUgTlVMTCwgKmNhIHNob3VsZCBiZSBOVUxMLApAQCAtODMsMjQgKzgwLDIwIEBACiBpbnQgUEtDUzEyX3BhcnNlKFBLQ1MxMiAqcDEyLCBjb25zdCBjaGFyICpwYXNzLCBFVlBfUEtFWSAqKnBrZXksIFg1MDkgKipjZXJ0LAogCSAgICAgU1RBQ0tfT0YoWDUwOSkgKipjYSkKIHsKLQorCVNUQUNLX09GKFg1MDkpICpvY2VydHMgPSBOVUxMOworCVg1MDkgKnggPSBOVUxMOwogCS8qIENoZWNrIGZvciBOVUxMIFBLQ1MxMiBzdHJ1Y3R1cmUgKi8KIAotCWlmKCFwMTIpIHsKKwlpZighcDEyKQorCQl7CiAJCVBLQ1MxMmVycihQS0NTMTJfRl9QS0NTMTJfUEFSU0UsUEtDUzEyX1JfSU5WQUxJRF9OVUxMX1BLQ1MxMl9QT0lOVEVSKTsKIAkJcmV0dXJuIDA7Ci0JfQotCi0JLyogQWxsb2NhdGUgc3RhY2sgZm9yIGNhIGNlcnRpZmljYXRlcyBpZiBuZWVkZWQgKi8KLQlpZiAoKGNhICE9IE5VTEwpICYmICgqY2EgPT0gTlVMTCkpIHsKLQkJaWYgKCEoKmNhID0gc2tfWDUwOV9uZXdfbnVsbCgpKSkgewotCQkJUEtDUzEyZXJyKFBLQ1MxMl9GX1BLQ1MxMl9QQVJTRSxFUlJfUl9NQUxMT0NfRkFJTFVSRSk7Ci0JCQlyZXR1cm4gMDsKIAkJfQotCX0KIAotCWlmKHBrZXkpICpwa2V5ID0gTlVMTDsKLQlpZihjZXJ0KSAqY2VydCA9IE5VTEw7CisJaWYocGtleSkKKwkJKnBrZXkgPSBOVUxMOworCWlmKGNlcnQpCisJCSpjZXJ0ID0gTlVMTDsKIAogCS8qIENoZWNrIHRoZSBtYWMgKi8KIApAQCAtMTIyLDE5ICsxMTUsNjEgQEAKIAkJZ290byBlcnI7CiAJfQogCi0JaWYgKCFwYXJzZV9wazEyIChwMTIsIHBhc3MsIC0xLCBwa2V5LCBjZXJ0LCBjYSkpCisJLyogQWxsb2NhdGUgc3RhY2sgZm9yIG90aGVyIGNlcnRpZmljYXRlcyAqLworCW9jZXJ0cyA9IHNrX1g1MDlfbmV3X251bGwoKTsKKworCWlmICghb2NlcnRzKQorCQl7CisJCVBLQ1MxMmVycihQS0NTMTJfRl9QS0NTMTJfUEFSU0UsRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOworCQlyZXR1cm4gMDsKKwkJfQorCisJaWYgKCFwYXJzZV9wazEyIChwMTIsIHBhc3MsIC0xLCBwa2V5LCBvY2VydHMpKQogCQl7CiAJCVBLQ1MxMmVycihQS0NTMTJfRl9QS0NTMTJfUEFSU0UsUEtDUzEyX1JfUEFSU0VfRVJST1IpOwogCQlnb3RvIGVycjsKIAkJfQogCisJd2hpbGUgKCh4ID0gc2tfWDUwOV9wb3Aob2NlcnRzKSkpCisJCXsKKwkJaWYgKHBrZXkgJiYgKnBrZXkgJiYgY2VydCAmJiAhKmNlcnQpCisJCQl7CisJCQlpZiAoWDUwOV9jaGVja19wcml2YXRlX2tleSh4LCAqcGtleSkpCisJCQkJeworCQkJCSpjZXJ0ID0geDsKKwkJCQl4ID0gTlVMTDsKKwkJCQl9CisJCQl9CisKKwkJaWYgKGNhICYmIHgpCisJCQl7CisJCQlpZiAoISpjYSkKKwkJCQkqY2EgPSBza19YNTA5X25ld19udWxsKCk7CisJCQlpZiAoISpjYSkKKwkJCQlnb3RvIGVycjsKKwkJCWlmICghc2tfWDUwOV9wdXNoKCpjYSwgeCkpCisJCQkJZ290byBlcnI7CisJCQl4ID0gTlVMTDsKKwkJCX0KKwkJaWYgKHgpCisJCQlYNTA5X2ZyZWUoeCk7CisJCX0KKworCWlmIChvY2VydHMpCisJCXNrX1g1MDlfcG9wX2ZyZWUob2NlcnRzLCBYNTA5X2ZyZWUpOworCiAJcmV0dXJuIDE7CiAKICBlcnI6CiAKLQlpZiAocGtleSAmJiAqcGtleSkgRVZQX1BLRVlfZnJlZSgqcGtleSk7Ci0JaWYgKGNlcnQgJiYgKmNlcnQpIFg1MDlfZnJlZSgqY2VydCk7Ci0JaWYgKGNhKSBza19YNTA5X3BvcF9mcmVlKCpjYSwgWDUwOV9mcmVlKTsKKwlpZiAocGtleSAmJiAqcGtleSkKKwkJRVZQX1BLRVlfZnJlZSgqcGtleSk7CisJaWYgKGNlcnQgJiYgKmNlcnQpCisJCVg1MDlfZnJlZSgqY2VydCk7CisJaWYgKHgpCisJCVg1MDlfZnJlZSgqY2VydCk7CisJaWYgKG9jZXJ0cykKKwkJc2tfWDUwOV9wb3BfZnJlZShvY2VydHMsIFg1MDlfZnJlZSk7CiAJcmV0dXJuIDA7CiAKIH0KQEAgLTE0MiwxNSArMTc3LDEzIEBACiAvKiBQYXJzZSB0aGUgb3V0ZXIgUEtDUyMxMiBzdHJ1Y3R1cmUgKi8KIAogc3RhdGljIGludCBwYXJzZV9wazEyKFBLQ1MxMiAqcDEyLCBjb25zdCBjaGFyICpwYXNzLCBpbnQgcGFzc2xlbiwKLQkgICAgIEVWUF9QS0VZICoqcGtleSwgWDUwOSAqKmNlcnQsIFNUQUNLX09GKFg1MDkpICoqY2EpCisJICAgICBFVlBfUEtFWSAqKnBrZXksIFNUQUNLX09GKFg1MDkpICpvY2VydHMpCiB7CiAJU1RBQ0tfT0YoUEtDUzcpICphc2FmZXM7CiAJU1RBQ0tfT0YoUEtDUzEyX1NBRkVCQUcpICpiYWdzOwogCWludCBpLCBiYWduaWQ7CiAJUEtDUzcgKnA3OwotCUFTTjFfT0NURVRfU1RSSU5HICprZXlpZCA9IE5VTEw7CiAKLQljaGFyIGtleW1hdGNoID0gMDsKIAlpZiAoIShhc2FmZXMgPSBQS0NTMTJfdW5wYWNrX2F1dGhzYWZlcyAocDEyKSkpIHJldHVybiAwOwogCWZvciAoaSA9IDA7IGkgPCBza19QS0NTN19udW0gKGFzYWZlcyk7IGkrKykgewogCQlwNyA9IHNrX1BLQ1M3X3ZhbHVlIChhc2FmZXMsIGkpOwpAQCAtMTY0LDggKzE5Nyw3IEBACiAJCQlza19QS0NTN19wb3BfZnJlZShhc2FmZXMsIFBLQ1M3X2ZyZWUpOwogCQkJcmV0dXJuIDA7CiAJCX0KLQkgICAgCWlmICghcGFyc2VfYmFncyhiYWdzLCBwYXNzLCBwYXNzbGVuLCBwa2V5LCBjZXJ0LCBjYSwKLQkJCQkJCQkgJmtleWlkLCAma2V5bWF0Y2gpKSB7CisJICAgIAlpZiAoIXBhcnNlX2JhZ3MoYmFncywgcGFzcywgcGFzc2xlbiwgcGtleSwgb2NlcnRzKSkgewogCQkJc2tfUEtDUzEyX1NBRkVCQUdfcG9wX2ZyZWUoYmFncywgUEtDUzEyX1NBRkVCQUdfZnJlZSk7CiAJCQlza19QS0NTN19wb3BfZnJlZShhc2FmZXMsIFBLQ1M3X2ZyZWUpOwogCQkJcmV0dXJuIDA7CkBAIC0xNzMsODkgKzIwNSw2NSBAQAogCQlza19QS0NTMTJfU0FGRUJBR19wb3BfZnJlZShiYWdzLCBQS0NTMTJfU0FGRUJBR19mcmVlKTsKIAl9CiAJc2tfUEtDUzdfcG9wX2ZyZWUoYXNhZmVzLCBQS0NTN19mcmVlKTsKLQlpZiAoa2V5aWQpIE1fQVNOMV9PQ1RFVF9TVFJJTkdfZnJlZShrZXlpZCk7CiAJcmV0dXJuIDE7CiB9CiAKIAogc3RhdGljIGludCBwYXJzZV9iYWdzKFNUQUNLX09GKFBLQ1MxMl9TQUZFQkFHKSAqYmFncywgY29uc3QgY2hhciAqcGFzcywKLQkJICAgICAgaW50IHBhc3NsZW4sIEVWUF9QS0VZICoqcGtleSwgWDUwOSAqKmNlcnQsCi0JCSAgICAgIFNUQUNLX09GKFg1MDkpICoqY2EsIEFTTjFfT0NURVRfU1RSSU5HICoqa2V5aWQsCi0JCSAgICAgIGNoYXIgKmtleW1hdGNoKQorCQkgICAgICBpbnQgcGFzc2xlbiwgRVZQX1BLRVkgKipwa2V5LCBTVEFDS19PRihYNTA5KSAqb2NlcnRzKQogewogCWludCBpOwogCWZvciAoaSA9IDA7IGkgPCBza19QS0NTMTJfU0FGRUJBR19udW0oYmFncyk7IGkrKykgewogCQlpZiAoIXBhcnNlX2JhZyhza19QS0NTMTJfU0FGRUJBR192YWx1ZSAoYmFncywgaSksCi0JCQkgcGFzcywgcGFzc2xlbiwgcGtleSwgY2VydCwgY2EsIGtleWlkLAotCQkJCQkJCSBrZXltYXRjaCkpIHJldHVybiAwOworCQkJCSBwYXNzLCBwYXNzbGVuLCBwa2V5LCBvY2VydHMpKQorCQkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAxOwogfQogCi0jZGVmaW5lIE1BVENIX0tFWSAgMHgxCi0jZGVmaW5lIE1BVENIX0NFUlQgMHgyCi0jZGVmaW5lIE1BVENIX0FMTCAgMHgzCi0KIHN0YXRpYyBpbnQgcGFyc2VfYmFnKFBLQ1MxMl9TQUZFQkFHICpiYWcsIGNvbnN0IGNoYXIgKnBhc3MsIGludCBwYXNzbGVuLAotCQkgICAgIEVWUF9QS0VZICoqcGtleSwgWDUwOSAqKmNlcnQsIFNUQUNLX09GKFg1MDkpICoqY2EsCi0JCSAgICAgQVNOMV9PQ1RFVF9TVFJJTkcgKiprZXlpZCwKLQkJICAgICBjaGFyICprZXltYXRjaCkKKwkJICAgICBFVlBfUEtFWSAqKnBrZXksIFNUQUNLX09GKFg1MDkpICpvY2VydHMpCiB7CiAJUEtDUzhfUFJJVl9LRVlfSU5GTyAqcDg7CiAJWDUwOSAqeDUwOTsKLQlBU04xX09DVEVUX1NUUklORyAqbGtleSA9IE5VTEwsICpja2lkID0gTlVMTDsKIAlBU04xX1RZUEUgKmF0dHJpYjsKIAlBU04xX0JNUFNUUklORyAqZm5hbWUgPSBOVUxMOworCUFTTjFfT0NURVRfU1RSSU5HICpsa2lkID0gTlVMTDsKIAogCWlmICgoYXR0cmliID0gUEtDUzEyX2dldF9hdHRyIChiYWcsIE5JRF9mcmllbmRseU5hbWUpKSkKIAkJZm5hbWUgPSBhdHRyaWItPnZhbHVlLmJtcHN0cmluZzsKIAotCWlmICgoYXR0cmliID0gUEtDUzEyX2dldF9hdHRyIChiYWcsIE5JRF9sb2NhbEtleUlEKSkpIHsKLQkJbGtleSA9IGF0dHJpYi0+dmFsdWUub2N0ZXRfc3RyaW5nOwotCQlja2lkID0gbGtleTsKLQl9CisJaWYgKChhdHRyaWIgPSBQS0NTMTJfZ2V0X2F0dHIgKGJhZywgTklEX2xvY2FsS2V5SUQpKSkKKwkJbGtpZCA9IGF0dHJpYi0+dmFsdWUub2N0ZXRfc3RyaW5nOwogCi0JLyogQ2hlY2sgZm9yIGFueSBsb2NhbCBrZXkgaWQgbWF0Y2hpbmcgKGlmIG5lZWRlZCkgKi8KLQlpZiAobGtleSAmJiAoKCprZXltYXRjaCAmIE1BVENIX0FMTCkgIT0gTUFUQ0hfQUxMKSkgewotCQlpZiAoKmtleWlkKSB7Ci0JCQlpZiAoTV9BU04xX09DVEVUX1NUUklOR19jbXAoKmtleWlkLCBsa2V5KSkgbGtleSA9IE5VTEw7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoISgqa2V5aWQgPSBNX0FTTjFfT0NURVRfU1RSSU5HX2R1cChsa2V5KSkpIHsKLQkJCQlQS0NTMTJlcnIoUEtDUzEyX0ZfUEFSU0VfQkFHLEVSUl9SX01BTExPQ19GQUlMVVJFKTsKLQkJCQlyZXR1cm4gMDsKLQkJICAgIH0KLQkJfQotCX0KLQkKIAlzd2l0Y2ggKE1fUEtDUzEyX2JhZ190eXBlKGJhZykpCiAJewogCWNhc2UgTklEX2tleUJhZzoKLQkJaWYgKCFsa2V5IHx8ICFwa2V5KSByZXR1cm4gMTsJCi0JCWlmICghKCpwa2V5ID0gRVZQX1BLQ1M4MlBLRVkoYmFnLT52YWx1ZS5rZXliYWcpKSkgcmV0dXJuIDA7Ci0JCSprZXltYXRjaCB8PSBNQVRDSF9LRVk7CisJCWlmICghcGtleSB8fCAqcGtleSkKKwkJCXJldHVybiAxOwkKKwkJaWYgKCEoKnBrZXkgPSBFVlBfUEtDUzgyUEtFWShiYWctPnZhbHVlLmtleWJhZykpKQorCQkJcmV0dXJuIDA7CiAJYnJlYWs7CiAKIAljYXNlIE5JRF9wa2NzOFNocm91ZGVkS2V5QmFnOgotCQlpZiAoIWxrZXkgfHwgIXBrZXkpIHJldHVybiAxOwkKKwkJaWYgKCFwa2V5IHx8ICpwa2V5KQorCQkJcmV0dXJuIDE7CQogCQlpZiAoIShwOCA9IFBLQ1MxMl9kZWNyeXB0X3NrZXkoYmFnLCBwYXNzLCBwYXNzbGVuKSkpCiAJCQkJcmV0dXJuIDA7CiAJCSpwa2V5ID0gRVZQX1BLQ1M4MlBLRVkocDgpOwogCQlQS0NTOF9QUklWX0tFWV9JTkZPX2ZyZWUocDgpOwogCQlpZiAoISgqcGtleSkpIHJldHVybiAwOwotCQkqa2V5bWF0Y2ggfD0gTUFUQ0hfS0VZOwogCWJyZWFrOwogCiAJY2FzZSBOSURfY2VydEJhZzoKIAkJaWYgKE1fUEtDUzEyX2NlcnRfYmFnX3R5cGUoYmFnKSAhPSBOSURfeDUwOUNlcnRpZmljYXRlICkKLQkJCQkJCQkJIHJldHVybiAxOwotCQlpZiAoISh4NTA5ID0gUEtDUzEyX2NlcnRiYWcyeDUwOShiYWcpKSkgcmV0dXJuIDA7Ci0JCWlmKGNraWQpCisJCQlyZXR1cm4gMTsKKwkJaWYgKCEoeDUwOSA9IFBLQ1MxMl9jZXJ0YmFnMng1MDkoYmFnKSkpCisJCQlyZXR1cm4gMDsKKwkJaWYobGtpZCAmJiAhWDUwOV9rZXlpZF9zZXQxKHg1MDksIGxraWQtPmRhdGEsIGxraWQtPmxlbmd0aCkpCiAJCQl7Ci0JCQlpZiAoIVg1MDlfa2V5aWRfc2V0MSh4NTA5LCBja2lkLT5kYXRhLCBja2lkLT5sZW5ndGgpKQotCQkJCXsKLQkJCQlYNTA5X2ZyZWUoeDUwOSk7Ci0JCQkJcmV0dXJuIDA7Ci0JCQkJfQorCQkJWDUwOV9mcmVlKHg1MDkpOworCQkJcmV0dXJuIDA7CiAJCQl9CiAJCWlmKGZuYW1lKSB7CiAJCQlpbnQgbGVuLCByOwpAQCAtMjcyLDIwICsyODAsMTcgQEAKIAkJCX0KIAkJfQogCisJCWlmKCFza19YNTA5X3B1c2gob2NlcnRzLCB4NTA5KSkKKwkJCXsKKwkJCVg1MDlfZnJlZSh4NTA5KTsKKwkJCXJldHVybiAwOworCQkJfQogCi0JCWlmIChsa2V5KSB7Ci0JCQkqa2V5bWF0Y2ggfD0gTUFUQ0hfQ0VSVDsKLQkJCWlmIChjZXJ0KSAqY2VydCA9IHg1MDk7Ci0JCQllbHNlIFg1MDlfZnJlZSh4NTA5KTsKLQkJfSBlbHNlIHsKLQkJCWlmKGNhKSBza19YNTA5X3B1c2ggKCpjYSwgeDUwOSk7Ci0JCQllbHNlIFg1MDlfZnJlZSh4NTA5KTsKLQkJfQogCWJyZWFrOwogCiAJY2FzZSBOSURfc2FmZUNvbnRlbnRzQmFnOgogCQlyZXR1cm4gcGFyc2VfYmFncyhiYWctPnZhbHVlLnNhZmVzLCBwYXNzLCBwYXNzbGVuLAotCQkJIAkJcGtleSwgY2VydCwgY2EsIGtleWlkLCBrZXltYXRjaCk7CisJCQkgCQlwa2V5LCBvY2VydHMpOwogCWJyZWFrOwogCiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2NyeXB0by9wa2NzMTIvcDEyX211dGwuYyBiL2NyeXB0by9wa2NzMTIvcDEyX211dGwuYwppbmRleCA3MGJmZWY2Li45YWI3NDBkIDEwMDY0NAotLS0gYS9jcnlwdG8vcGtjczEyL3AxMl9tdXRsLmMKKysrIGIvY3J5cHRvL3BrY3MxMi9wMTJfbXV0bC5jCkBAIC03MSw2ICs3MSw3IEBACiAJSE1BQ19DVFggaG1hYzsKIAl1bnNpZ25lZCBjaGFyIGtleVtFVlBfTUFYX01EX1NJWkVdLCAqc2FsdDsKIAlpbnQgc2FsdGxlbiwgaXRlcjsKKwlpbnQgbWRfc2l6ZTsKIAogCWlmICghUEtDUzdfdHlwZV9pc19kYXRhKHAxMi0+YXV0aHNhZmVzKSkKIAkJewpAQCAtODcsMTMgKzg4LDE2IEBACiAJCVBLQ1MxMmVycihQS0NTMTJfRl9QS0NTMTJfR0VOX01BQyxQS0NTMTJfUl9VTktOT1dOX0RJR0VTVF9BTEdPUklUSE0pOwogCQlyZXR1cm4gMDsKIAl9CisJbWRfc2l6ZSA9IEVWUF9NRF9zaXplKG1kX3R5cGUpOworCWlmIChtZF9zaXplIDwgMCkKKwkgICAgcmV0dXJuIDA7CiAJaWYoIVBLQ1MxMl9rZXlfZ2VuIChwYXNzLCBwYXNzbGVuLCBzYWx0LCBzYWx0bGVuLCBQS0NTMTJfTUFDX0lELCBpdGVyLAotCQkJCSBFVlBfTURfc2l6ZShtZF90eXBlKSwga2V5LCBtZF90eXBlKSkgeworCQkJCSBtZF9zaXplLCBrZXksIG1kX3R5cGUpKSB7CiAJCVBLQ1MxMmVycihQS0NTMTJfRl9QS0NTMTJfR0VOX01BQyxQS0NTMTJfUl9LRVlfR0VOX0VSUk9SKTsKIAkJcmV0dXJuIDA7CiAJfQogCUhNQUNfQ1RYX2luaXQoJmhtYWMpOwotCUhNQUNfSW5pdF9leCgmaG1hYywga2V5LCBFVlBfTURfc2l6ZShtZF90eXBlKSwgbWRfdHlwZSwgTlVMTCk7CisJSE1BQ19Jbml0X2V4KCZobWFjLCBrZXksIG1kX3NpemUsIG1kX3R5cGUsIE5VTEwpOwogICAgIAlITUFDX1VwZGF0ZSgmaG1hYywgcDEyLT5hdXRoc2FmZXMtPmQuZGF0YS0+ZGF0YSwKIAkJCQkJIHAxMi0+YXV0aHNhZmVzLT5kLmRhdGEtPmxlbmd0aCk7CiAgICAgCUhNQUNfRmluYWwoJmhtYWMsIG1hYywgbWFjbGVuKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9wa2NzMTIvcDEyX25wYXMuYyBiL2NyeXB0by9wa2NzMTIvcDEyX25wYXMuYwppbmRleCA0N2U1ZTljLi4yZjcxMzU1IDEwMDY0NAotLS0gYS9jcnlwdG8vcGtjczEyL3AxMl9ucGFzLmMKKysrIGIvY3J5cHRvL3BrY3MxMi9wMTJfbnBhcy5jCkBAIC0xMjAsOCArMTIwLDEzIEBACiAJCQliYWdzID0gUEtDUzEyX3VucGFja19wN2RhdGEocDcpOwogCQl9IGVsc2UgaWYgKGJhZ25pZCA9PSBOSURfcGtjczdfZW5jcnlwdGVkKSB7CiAJCQliYWdzID0gUEtDUzEyX3VucGFja19wN2VuY2RhdGEocDcsIG9sZHBhc3MsIC0xKTsKLQkJCWFsZ19nZXQocDctPmQuZW5jcnlwdGVkLT5lbmNfZGF0YS0+YWxnb3JpdGhtLAotCQkJCSZwYmVfbmlkLCAmcGJlX2l0ZXIsICZwYmVfc2FsdGxlbik7CisJCQlpZiAoIWFsZ19nZXQocDctPmQuZW5jcnlwdGVkLT5lbmNfZGF0YS0+YWxnb3JpdGhtLAorCQkJCSZwYmVfbmlkLCAmcGJlX2l0ZXIsICZwYmVfc2FsdGxlbikpCisJCQkJeworCQkJCXNrX1BLQ1MxMl9TQUZFQkFHX3BvcF9mcmVlKGJhZ3MsCisJCQkJCQlQS0NTMTJfU0FGRUJBR19mcmVlKTsKKwkJCQliYWdzID0gTlVMTDsKKwkJCQl9CiAJCX0gZWxzZSBjb250aW51ZTsKIAkJaWYgKCFiYWdzKSB7CiAJCQlza19QS0NTN19wb3BfZnJlZShhc2FmZXMsIFBLQ1M3X2ZyZWUpOwpAQCAtMTkzLDcgKzE5OCw5IEBACiAJaWYoTV9QS0NTMTJfYmFnX3R5cGUoYmFnKSAhPSBOSURfcGtjczhTaHJvdWRlZEtleUJhZykgcmV0dXJuIDE7CiAKIAlpZiAoIShwOCA9IFBLQ1M4X2RlY3J5cHQoYmFnLT52YWx1ZS5zaGtleWJhZywgb2xkcGFzcywgLTEpKSkgcmV0dXJuIDA7Ci0JYWxnX2dldChiYWctPnZhbHVlLnNoa2V5YmFnLT5hbGdvciwgJnA4X25pZCwgJnA4X2l0ZXIsICZwOF9zYWx0bGVuKTsKKwlpZiAoIWFsZ19nZXQoYmFnLT52YWx1ZS5zaGtleWJhZy0+YWxnb3IsICZwOF9uaWQsICZwOF9pdGVyLAorCQkJCQkJCSZwOF9zYWx0bGVuKSkKKwkJcmV0dXJuIDA7CiAJaWYoIShwOG5ldyA9IFBLQ1M4X2VuY3J5cHQocDhfbmlkLCBOVUxMLCBuZXdwYXNzLCAtMSwgTlVMTCwgcDhfc2FsdGxlbiwKIAkJCQkJCSAgICAgcDhfaXRlciwgcDgpKSkgcmV0dXJuIDA7CiAJWDUwOV9TSUdfZnJlZShiYWctPnZhbHVlLnNoa2V5YmFnKTsKQEAgLTIwOCw5ICsyMTUsMTEgQEAKIAogICAgICAgICBwID0gYWxnLT5wYXJhbWV0ZXItPnZhbHVlLnNlcXVlbmNlLT5kYXRhOwogICAgICAgICBwYmUgPSBkMmlfUEJFUEFSQU0oTlVMTCwgJnAsIGFsZy0+cGFyYW1ldGVyLT52YWx1ZS5zZXF1ZW5jZS0+bGVuZ3RoKTsKKwlpZiAoIXBiZSkKKwkJcmV0dXJuIDA7CiAgICAgICAgICpwbmlkID0gT0JKX29iajJuaWQoYWxnLT5hbGdvcml0aG0pOwogCSpwaXRlciA9IEFTTjFfSU5URUdFUl9nZXQocGJlLT5pdGVyKTsKIAkqcHNhbHRsZW4gPSBwYmUtPnNhbHQtPmxlbmd0aDsKICAgICAgICAgUEJFUEFSQU1fZnJlZShwYmUpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9jcnlwdG8vcGtjczEyL3AxMl91dGwuYyBiL2NyeXB0by9wa2NzMTIvcDEyX3V0bC5jCmluZGV4IDJlZGJmOTAuLjU5YzZmNDUgMTAwNjQ0Ci0tLSBhL2NyeXB0by9wa2NzMTIvcDEyX3V0bC5jCisrKyBiL2NyeXB0by9wa2NzMTIvcDEyX3V0bC5jCkBAIC02MCwxNSArNjAsOSBAQAogI2luY2x1ZGUgImNyeXB0bGliLmgiCiAjaW5jbHVkZSA8b3BlbnNzbC9wa2NzMTIuaD4KIAotI2lmZGVmIE9QRU5TU0xfU1lTX05FVFdBUkUKLS8qIFJlbmFtZSB0aGVzZSBmdW5jdGlvbnMgdG8gYXZvaWQgbmFtZSBjbGFzaGVzIG9uIE5ldFdhcmUgT1MgKi8KLSNkZWZpbmUgdW5pMmFzYyBPUEVOU1NMX3VuaTJhc2MKLSNkZWZpbmUgYXNjMnVuaSBPUEVOU1NMX2FzYzJ1bmkKLSNlbmRpZgotCiAvKiBDaGVhcCBhbmQgbmFzdHkgVW5pY29kZSBzdHVmZiAqLwogCi11bnNpZ25lZCBjaGFyICphc2MydW5pKGNvbnN0IGNoYXIgKmFzYywgaW50IGFzY2xlbiwgdW5zaWduZWQgY2hhciAqKnVuaSwgaW50ICp1bmlsZW4pCit1bnNpZ25lZCBjaGFyICpPUEVOU1NMX2FzYzJ1bmkoY29uc3QgY2hhciAqYXNjLCBpbnQgYXNjbGVuLCB1bnNpZ25lZCBjaGFyICoqdW5pLCBpbnQgKnVuaWxlbikKIHsKIAlpbnQgdWxlbiwgaTsKIAl1bnNpZ25lZCBjaGFyICp1bml0bXA7CkBAIC04Nyw3ICs4MSw3IEBACiAJcmV0dXJuIHVuaXRtcDsKIH0KIAotY2hhciAqdW5pMmFzYyh1bnNpZ25lZCBjaGFyICp1bmksIGludCB1bmlsZW4pCitjaGFyICpPUEVOU1NMX3VuaTJhc2ModW5zaWduZWQgY2hhciAqdW5pLCBpbnQgdW5pbGVuKQogewogCWludCBhc2NsZW4sIGk7CiAJY2hhciAqYXNjdG1wOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3BrY3MxMi9wazEyZXJyLmMgYi9jcnlwdG8vcGtjczEyL3BrMTJlcnIuYwppbmRleCAwN2ExZmI2Li5mNmRkZjJkIDEwMDY0NAotLS0gYS9jcnlwdG8vcGtjczEyL3BrMTJlcnIuYworKysgYi9jcnlwdG8vcGtjczEyL3BrMTJlcnIuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIGNyeXB0by9wa2NzMTIvcGsxMmVyci5jICovCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNiBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3BrY3MxMi9wa2NzMTIuaCBiL2NyeXB0by9wa2NzMTIvcGtjczEyLmgKaW5kZXggNzgzMTdmYi4uYjE3ZWI5ZiAxMDA2NDQKLS0tIGEvY3J5cHRvL3BrY3MxMi9wa2NzMTIuaAorKysgYi9jcnlwdG8vcGtjczEyL3BrY3MxMi5oCkBAIC0xMDgsOCArMTA4LDYgQEAKIFBLQ1M3ICphdXRoc2FmZXM7CiB9IFBLQ1MxMjsKIAotUFJFREVDTEFSRV9TVEFDS19PRihQS0NTMTJfU0FGRUJBRykKLQogdHlwZWRlZiBzdHJ1Y3QgewogQVNOMV9PQkpFQ1QgKnR5cGU7CiB1bmlvbiB7CkBAIC0yMzIsMTQgKzIzMCw5IEBACiAJCSAgIGNvbnN0IEVWUF9NRCAqbWRfdHlwZSk7CiBpbnQgUEtDUzEyX3NldHVwX21hYyhQS0NTMTIgKnAxMiwgaW50IGl0ZXIsIHVuc2lnbmVkIGNoYXIgKnNhbHQsCiAJCQkJCSBpbnQgc2FsdGxlbiwgY29uc3QgRVZQX01EICptZF90eXBlKTsKLSNpZiBkZWZpbmVkKE5FVFdBUkUpIHx8IGRlZmluZWQoT1BFTlNTTF9TWVNfTkVUV0FSRSkKLS8qIFJlbmFtZSB0aGVzZSBmdW5jdGlvbnMgdG8gYXZvaWQgbmFtZSBjbGFzaGVzIG9uIE5ldFdhcmUgT1MgKi8KIHVuc2lnbmVkIGNoYXIgKk9QRU5TU0xfYXNjMnVuaShjb25zdCBjaGFyICphc2MsIGludCBhc2NsZW4sIHVuc2lnbmVkIGNoYXIgKip1bmksIGludCAqdW5pbGVuKTsKIGNoYXIgKk9QRU5TU0xfdW5pMmFzYyh1bnNpZ25lZCBjaGFyICp1bmksIGludCB1bmlsZW4pOwotI2Vsc2UKLXVuc2lnbmVkIGNoYXIgKmFzYzJ1bmkoY29uc3QgY2hhciAqYXNjLCBpbnQgYXNjbGVuLCB1bnNpZ25lZCBjaGFyICoqdW5pLCBpbnQgKnVuaWxlbik7Ci1jaGFyICp1bmkyYXNjKHVuc2lnbmVkIGNoYXIgKnVuaSwgaW50IHVuaWxlbik7Ci0jZW5kaWYKKwogREVDTEFSRV9BU04xX0ZVTkNUSU9OUyhQS0NTMTIpCiBERUNMQVJFX0FTTjFfRlVOQ1RJT05TKFBLQ1MxMl9NQUNfREFUQSkKIERFQ0xBUkVfQVNOMV9GVU5DVElPTlMoUEtDUzEyX1NBRkVCQUcpCmRpZmYgLS1naXQgYS9jcnlwdG8vcGtjczcvTWFrZWZpbGUgYi9jcnlwdG8vcGtjczcvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5MGQ4ZWQuLjAwMDAwMDAKLS0tIGEvY3J5cHRvL3BrY3M3L01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMTkwICswLDAgQEAKLSMKLSMgT3BlblNTTC9jcnlwdG8vcGtjczcvTWFrZWZpbGUKLSMKLQotRElSPQlwa2NzNwotVE9QPQkuLi8uLgotQ0M9CWNjCi1JTkNMVURFUz0gLUkuLiAtSSQoVE9QKSAtSS4uLy4uL2luY2x1ZGUKLUNGTEFHPS1nCi1NQUtFRklMRT0JTWFrZWZpbGUKLUFSPQkJYXIgcgotCi1QRVhfTElCUz0KLUVYX0xJQlM9Ci0gCi1DRkxBR1M9ICQoSU5DTFVERVMpICQoQ0ZMQUcpCi0KLUdFTkVSQUw9TWFrZWZpbGUgUkVBRE1FCi1URVNUPQotQVBQUz0KLQotTElCPSQoVE9QKS9saWJjcnlwdG8uYQotTElCU1JDPQlwazdfYXNuMS5jIHBrN19saWIuYyBwa2NzN2Vyci5jIHBrN19kb2l0LmMgcGs3X3NtaW1lLmMgcGs3X2F0dHIuYyBcCi0JcGs3X21pbWUuYwotTElCT0JKPSBwazdfYXNuMS5vIHBrN19saWIubyBwa2NzN2Vyci5vIHBrN19kb2l0Lm8gcGs3X3NtaW1lLm8gcGs3X2F0dHIubyBcCi0JcGs3X21pbWUubwotCi1TUkM9ICQoTElCU1JDKQotCi1FWEhFQURFUj0gIHBrY3M3LmgKLUhFQURFUj0JJChFWEhFQURFUikKLQotQUxMPSAgICAkKEdFTkVSQUwpICQoU1JDKSAkKEhFQURFUikKLQotdG9wOgotCShjZCAuLi8uLjsgJChNQUtFKSBESVJTPWNyeXB0byBTRElSUz0kKERJUikgc3ViX2FsbCkKLQotdGVzdDoKLQotYWxsOglsaWIKLQotdGVzdGFwcHM6IGVuYyBkZWMgc2lnbiB2ZXJpZnkKLQotZW5jOiBlbmMubyBsaWIKLQkkKENDKSAkKENGTEFHUykgLW8gZW5jIGVuYy5vICQoUEVYX0xJQlMpICQoTElCKSAkKEVYX0xJQlMpCi0KLWRlYzogZGVjLm8gbGliCi0JJChDQykgJChDRkxBR1MpIC1vIGRlYyBkZWMubyAkKFBFWF9MSUJTKSAkKExJQikgJChFWF9MSUJTKQotCi1zaWduOiBzaWduLm8gbGliCi0JJChDQykgJChDRkxBR1MpIC1vIHNpZ24gc2lnbi5vICQoUEVYX0xJQlMpICQoTElCKSAkKEVYX0xJQlMpCi0KLXZlcmlmeTogdmVyaWZ5Lm8gZXhhbXBsZS5vIGxpYgotCSQoQ0MpICQoQ0ZMQUdTKSAtbyB2ZXJpZnkgdmVyaWZ5Lm8gJChQRVhfTElCUykgZXhhbXBsZS5vICQoTElCKSAkKEVYX0xJQlMpCi0KLWxpYjoJJChMSUJPQkopCi0JJChBUlgpICQoTElCKSAkKExJQk9CSikKLQkkKFJBTkxJQikgJChMSUIpIHx8IGVjaG8gTmV2ZXIgbWluZC4KLQlAdG91Y2ggbGliCi0KLWZpbGVzOgotCSQoUEVSTCkgJChUT1ApL3V0aWwvZmlsZXMucGwgTWFrZWZpbGUgPj4gJChUT1ApL01JTkZPCi0KLWxpbmtzOgotCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9pbmNsdWRlL29wZW5zc2wgJChFWEhFQURFUikKLQlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vdGVzdCAkKFRFU1QpCi0JQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL2FwcHMgJChBUFBTKQotCi1pbnN0YWxsOgotCUBbIC1uICIkKElOU1RBTExUT1ApIiBdICMgc2hvdWxkIGJlIHNldCBieSB0b3AgTWFrZWZpbGUuLi4KLQlAaGVhZGVybGlzdD0iJChFWEhFQURFUikiOyBmb3IgaSBpbiAkJGhlYWRlcmxpc3QgOyBcCi0JZG8gIFwKLQkoY3AgJCRpICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpOyBcCi0JY2htb2QgNjQ0ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpICk7IFwKLQlkb25lOwotCi10YWdzOgotCWN0YWdzICQoU1JDKQotCi10ZXN0czoKLQotbGludDoKLQlsaW50IC1ETElOVCAkKElOQ0xVREVTKSAkKFNSQyk+Zmx1ZmYKLQotZGVwZW5kOgotCUBbIC1uICIkKE1BS0VERVBFTkQpIiBdICMgc2hvdWxkIGJlIHNldCBieSB1cHBlciBNYWtlZmlsZS4uLgotCSQoTUFLRURFUEVORCkgLS0gJChDRkxBRykgJChJTkNMVURFUykgJChERVBGTEFHKSAtLSAkKFBST0dTKSAkKExJQlNSQykKLQotZGNsZWFuOgotCSQoUEVSTCkgLXBlICdpZiAoL14jIERPIE5PVCBERUxFVEUgVEhJUyBMSU5FLykge3ByaW50OyBleGl0KDApO30nICQoTUFLRUZJTEUpID5NYWtlZmlsZS5uZXcKLQltdiAtZiBNYWtlZmlsZS5uZXcgJChNQUtFRklMRSkKLQotY2xlYW46Ci0Jcm0gLWYgKi5vICoub2JqIGxpYiB0YWdzIGNvcmUgLnB1cmUgLm5mcyogKi5vbGQgKi5iYWsgZmx1ZmYgZW5jIGRlYyBzaWduIHZlcmlmeQotCi0jIERPIE5PVCBERUxFVEUgVEhJUyBMSU5FIC0tIG1ha2UgZGVwZW5kIGRlcGVuZHMgb24gaXQuCi0KLXBrN19hc24xLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi1wazdfYXNuMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMXQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXBrN19hc24xLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLXBrN19hc24xLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1wazdfYXNuMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi1wazdfYXNuMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1wazdfYXNuMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1wazdfYXNuMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLXBrN19hc24xLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1wazdfYXNuMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotcGs3X2FzbjEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1wazdfYXNuMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLXBrN19hc24xLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLXBrN19hc24xLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2NyeXB0bGliLmggcGs3X2FzbjEuYwotcGs3X2F0dHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXBrN19hdHRyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLXBrN19hdHRyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1wazdfYXR0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi1wazdfYXR0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1wazdfYXR0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1wazdfYXR0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLXBrN19hdHRyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1wazdfYXR0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotcGs3X2F0dHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BlbS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmgKLXBrN19hdHRyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotcGs3X2F0dHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1wazdfYXR0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi1wazdfYXR0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBwazdfYXR0ci5jCi1wazdfZG9pdC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotcGs3X2RvaXQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotcGs3X2RvaXQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLXBrN19kb2l0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1wazdfZG9pdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi1wazdfZG9pdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1wazdfZG9pdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1wazdfZG9pdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLXBrN19kb2l0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1wazdfZG9pdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotcGs3X2RvaXQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAotcGs3X2RvaXQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotcGs3X2RvaXQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLXBrN19kb2l0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmgKLXBrN19kb2l0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5djMuaCAuLi9jcnlwdGxpYi5oIHBrN19kb2l0LmMKLXBrN19saWIubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLXBrN19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotcGs3X2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLXBrN19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotcGs3X2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLXBrN19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLXBrN19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotcGs3X2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1wazdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1wazdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotcGs3X2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLXBrN19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotcGs3X2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9jcnlwdGxpYi5oIHBrN19saWIuYwotcGs3X21pbWUubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLXBrN19taW1lLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXBrN19taW1lLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotcGs3X21pbWUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotcGs3X21pbWUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1wazdfbWltZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotcGs3X21pbWUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotcGs3X21pbWUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotcGs3X21pbWUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXBrN19taW1lLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKLXBrN19taW1lLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLXBrN19taW1lLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1wazdfbWltZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oCi1wazdfbWltZS5vOiAuLi9jcnlwdGxpYi5oIHBrN19taW1lLmMKLXBrN19zbWltZS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotcGs3X3NtaW1lLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXBrN19zbWltZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotcGs3X3NtaW1lLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1wazdfc21pbWUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotcGs3X3NtaW1lLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLXBrN19zbWltZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1wazdfc21pbWUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi1wazdfc21pbWUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXBrN19zbWltZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotcGs3X3NtaW1lLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotcGs3X3NtaW1lLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotcGs3X3NtaW1lLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLXBrN19zbWltZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOXYzLmgKLXBrN19zbWltZS5vOiAuLi9jcnlwdGxpYi5oIHBrN19zbWltZS5jCi1wa2NzN2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotcGtjczdlcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1wa2NzN2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLXBrY3M3ZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1wa2NzN2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotcGtjczdlcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1wa2NzN2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotcGtjczdlcnIubzogcGtjczdlcnIuYwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3BrY3M3L3BrN19hc24xLmMgYi9jcnlwdG8vcGtjczcvcGs3X2FzbjEuYwppbmRleCAxZjcwZDMxLi5iN2VjMjg4IDEwMDY0NAotLS0gYS9jcnlwdG8vcGtjczcvcGs3X2FzbjEuYworKysgYi9jcnlwdG8vcGtjczcvcGs3X2FzbjEuYwpAQCAtNzcsMTAgKzc3LDM5IEBACiAJQURCX0VOVFJZKE5JRF9wa2NzN19lbmNyeXB0ZWQsIEFTTjFfTkRFRl9FWFBfT1BUKFBLQ1M3LCBkLmVuY3J5cHRlZCwgUEtDUzdfRU5DUllQVCwgMCkpCiB9IEFTTjFfQURCX0VORChQS0NTNywgMCwgdHlwZSwgMCwgJnA3ZGVmYXVsdF90dCwgTlVMTCk7CiAKLUFTTjFfTkRFRl9TRVFVRU5DRShQS0NTNykgPSB7CisvKiBQS0NTIzcgc3RyZWFtaW5nIHN1cHBvcnQgKi8KK3N0YXRpYyBpbnQgcGs3X2NiKGludCBvcGVyYXRpb24sIEFTTjFfVkFMVUUgKipwdmFsLCBjb25zdCBBU04xX0lURU0gKml0LAorCQkJCQkJCXZvaWQgKmV4YXJnKQoreworCUFTTjFfU1RSRUFNX0FSRyAqc2FyZyA9IGV4YXJnOworCVBLQ1M3ICoqcHA3ID0gKFBLQ1M3ICoqKXB2YWw7CisKKwlzd2l0Y2gob3BlcmF0aW9uKQorCQl7CisKKwkJY2FzZSBBU04xX09QX1NUUkVBTV9QUkU6CisJCWlmIChQS0NTN19zdHJlYW0oJnNhcmctPmJvdW5kYXJ5LCAqcHA3KSA8PSAwKQorCQkJcmV0dXJuIDA7CisJCWNhc2UgQVNOMV9PUF9ERVRBQ0hFRF9QUkU6CisJCXNhcmctPm5kZWZfYmlvID0gUEtDUzdfZGF0YUluaXQoKnBwNywgc2FyZy0+b3V0KTsKKwkJaWYgKCFzYXJnLT5uZGVmX2JpbykKKwkJCXJldHVybiAwOworCQlicmVhazsKKworCQljYXNlIEFTTjFfT1BfU1RSRUFNX1BPU1Q6CisJCWNhc2UgQVNOMV9PUF9ERVRBQ0hFRF9QT1NUOgorCQlpZiAoUEtDUzdfZGF0YUZpbmFsKCpwcDcsIHNhcmctPm5kZWZfYmlvKSA8PSAwKQorCQkJcmV0dXJuIDA7CisJCWJyZWFrOworCisJCX0KKwlyZXR1cm4gMTsKK30KKworQVNOMV9OREVGX1NFUVVFTkNFX2NiKFBLQ1M3LCBwazdfY2IpID0gewogCUFTTjFfU0lNUExFKFBLQ1M3LCB0eXBlLCBBU04xX09CSkVDVCksCiAJQVNOMV9BREJfT0JKRUNUKFBLQ1M3KQotfUFTTjFfTkRFRl9TRVFVRU5DRV9FTkQoUEtDUzcpCit9QVNOMV9OREVGX1NFUVVFTkNFX0VORF9jYihQS0NTNywgUEtDUzcpCiAKIElNUExFTUVOVF9BU04xX0ZVTkNUSU9OUyhQS0NTNykKIElNUExFTUVOVF9BU04xX05ERUZfRlVOQ1RJT04oUEtDUzcpCkBAIC05OCw3ICsxMjcsOCBAQAogSU1QTEVNRU5UX0FTTjFfRlVOQ1RJT05TKFBLQ1M3X1NJR05FRCkKIAogLyogTWlub3IgdHdlYWsgdG8gb3BlcmF0aW9uOiBmcmVlIHVwIEVWUF9QS0VZICovCi1zdGF0aWMgaW50IHNpX2NiKGludCBvcGVyYXRpb24sIEFTTjFfVkFMVUUgKipwdmFsLCBjb25zdCBBU04xX0lURU0gKml0KQorc3RhdGljIGludCBzaV9jYihpbnQgb3BlcmF0aW9uLCBBU04xX1ZBTFVFICoqcHZhbCwgY29uc3QgQVNOMV9JVEVNICppdCwKKwkJCQkJCQl2b2lkICpleGFyZykKIHsKIAlpZihvcGVyYXRpb24gPT0gQVNOMV9PUF9GUkVFX1BPU1QpIHsKIAkJUEtDUzdfU0lHTkVSX0lORk8gKnNpID0gKFBLQ1M3X1NJR05FUl9JTkZPICopKnB2YWw7CkBAIC0xNDAsNyArMTcwLDggQEAKIElNUExFTUVOVF9BU04xX0ZVTkNUSU9OUyhQS0NTN19FTlZFTE9QRSkKIAogLyogTWlub3IgdHdlYWsgdG8gb3BlcmF0aW9uOiBmcmVlIHVwIFg1MDkgKi8KLXN0YXRpYyBpbnQgcmlfY2IoaW50IG9wZXJhdGlvbiwgQVNOMV9WQUxVRSAqKnB2YWwsIGNvbnN0IEFTTjFfSVRFTSAqaXQpCitzdGF0aWMgaW50IHJpX2NiKGludCBvcGVyYXRpb24sIEFTTjFfVkFMVUUgKipwdmFsLCBjb25zdCBBU04xX0lURU0gKml0LAorCQkJCQkJCQl2b2lkICpleGFyZykKIHsKIAlpZihvcGVyYXRpb24gPT0gQVNOMV9PUF9GUkVFX1BPU1QpIHsKIAkJUEtDUzdfUkVDSVBfSU5GTyAqcmkgPSAoUEtDUzdfUkVDSVBfSU5GTyAqKSpwdmFsOwpAQCAtMTYxLDcgKzE5Miw3IEBACiBBU04xX05ERUZfU0VRVUVOQ0UoUEtDUzdfRU5DX0NPTlRFTlQpID0gewogCUFTTjFfU0lNUExFKFBLQ1M3X0VOQ19DT05URU5ULCBjb250ZW50X3R5cGUsIEFTTjFfT0JKRUNUKSwKIAlBU04xX1NJTVBMRShQS0NTN19FTkNfQ09OVEVOVCwgYWxnb3JpdGhtLCBYNTA5X0FMR09SKSwKLQlBU04xX0lNUF9PUFQoUEtDUzdfRU5DX0NPTlRFTlQsIGVuY19kYXRhLCBBU04xX09DVEVUX1NUUklORywgMCkKKwlBU04xX0lNUF9PUFQoUEtDUzdfRU5DX0NPTlRFTlQsIGVuY19kYXRhLCBBU04xX09DVEVUX1NUUklOR19OREVGLCAwKQogfSBBU04xX05ERUZfU0VRVUVOQ0VfRU5EKFBLQ1M3X0VOQ19DT05URU5UKQogCiBJTVBMRU1FTlRfQVNOMV9GVU5DVElPTlMoUEtDUzdfRU5DX0NPTlRFTlQpCkBAIC0yMTIsMyArMjQzLDUgQEAKIAlBU04xX0VYX1RFTVBMQVRFX1RZUEUoQVNOMV9URkxHX1NFUVVFTkNFX09GIHwgQVNOMV9URkxHX0lNUFRBRyB8IEFTTjFfVEZMR19VTklWRVJTQUwsCiAJCQkJVl9BU04xX1NFVCwgUEtDUzdfQVRUUklCVVRFUywgWDUwOV9BVFRSSUJVVEUpCiBBU04xX0lURU1fVEVNUExBVEVfRU5EKFBLQ1M3X0FUVFJfVkVSSUZZKQorCitJTVBMRU1FTlRfQVNOMV9QUklOVF9GVU5DVElPTihQS0NTNykKZGlmZiAtLWdpdCBhL2NyeXB0by9wa2NzNy9wazdfYXR0ci5jIGIvY3J5cHRvL3BrY3M3L3BrN19hdHRyLmMKaW5kZXggZDU0OTcxNy4uYTk3ZGI1MSAxMDA2NDQKLS0tIGEvY3J5cHRvL3BrY3M3L3BrN19hdHRyLmMKKysrIGIvY3J5cHRvL3BrY3M3L3BrN19hdHRyLmMKQEAgLTYwLDYgKzYwLDcgQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgogI2luY2x1ZGUgPG9wZW5zc2wvYXNuMS5oPgorI2luY2x1ZGUgPG9wZW5zc2wvYXNuMXQuaD4KICNpbmNsdWRlIDxvcGVuc3NsL3BlbS5oPgogI2luY2x1ZGUgPG9wZW5zc2wvcGtjczcuaD4KICNpbmNsdWRlIDxvcGVuc3NsL3g1MDkuaD4KQEAgLTY4LDI3ICs2OSwxMiBAQAogaW50IFBLQ1M3X2FkZF9hdHRyaWJfc21pbWVjYXAoUEtDUzdfU0lHTkVSX0lORk8gKnNpLCBTVEFDS19PRihYNTA5X0FMR09SKSAqY2FwKQogewogCUFTTjFfU1RSSU5HICpzZXE7Ci0JdW5zaWduZWQgY2hhciAqcCwgKnBwOwotCWludCBsZW47Ci0JbGVuPWkyZF9BU04xX1NFVF9PRl9YNTA5X0FMR09SKGNhcCxOVUxMLGkyZF9YNTA5X0FMR09SLAotCQkJCSAgICAgICBWX0FTTjFfU0VRVUVOQ0UsVl9BU04xX1VOSVZFUlNBTCwKLQkJCQkgICAgICAgSVNfU0VRVUVOQ0UpOwotCWlmKCEocHA9KHVuc2lnbmVkIGNoYXIgKilPUEVOU1NMX21hbGxvYyhsZW4pKSkgewotCQlQS0NTN2VycihQS0NTN19GX1BLQ1M3X0FERF9BVFRSSUJfU01JTUVDQVAsRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwotCQlyZXR1cm4gMDsKLQl9Ci0JcD1wcDsKLQlpMmRfQVNOMV9TRVRfT0ZfWDUwOV9BTEdPUihjYXAsJnAsaTJkX1g1MDlfQUxHT1IsIFZfQVNOMV9TRVFVRU5DRSwKLQkJCQkgICBWX0FTTjFfVU5JVkVSU0FMLCBJU19TRVFVRU5DRSk7CiAJaWYoIShzZXEgPSBBU04xX1NUUklOR19uZXcoKSkpIHsKIAkJUEtDUzdlcnIoUEtDUzdfRl9QS0NTN19BRERfQVRUUklCX1NNSU1FQ0FQLEVSUl9SX01BTExPQ19GQUlMVVJFKTsKIAkJcmV0dXJuIDA7CiAJfQotCWlmKCFBU04xX1NUUklOR19zZXQgKHNlcSwgcHAsIGxlbikpIHsKLQkJUEtDUzdlcnIoUEtDUzdfRl9QS0NTN19BRERfQVRUUklCX1NNSU1FQ0FQLEVSUl9SX01BTExPQ19GQUlMVVJFKTsKLQkJcmV0dXJuIDA7Ci0JfQotCU9QRU5TU0xfZnJlZSAocHApOworCXNlcS0+bGVuZ3RoID0gQVNOMV9pdGVtX2kyZCgoQVNOMV9WQUxVRSAqKWNhcCwmc2VxLT5kYXRhLAorCQkJCUFTTjFfSVRFTV9ycHRyKFg1MDlfQUxHT1JTKSk7CiAgICAgICAgIHJldHVybiBQS0NTN19hZGRfc2lnbmVkX2F0dHJpYnV0ZShzaSwgTklEX1NNSU1FQ2FwYWJpbGl0aWVzLAogCQkJCQkJCVZfQVNOMV9TRVFVRU5DRSwgc2VxKTsKIH0KQEAgLTEwMiwxMCArODgsOSBAQAogCWlmICghY2FwIHx8IChjYXAtPnR5cGUgIT0gVl9BU04xX1NFUVVFTkNFKSkKIAkJcmV0dXJuIE5VTEw7CiAJcCA9IGNhcC0+dmFsdWUuc2VxdWVuY2UtPmRhdGE7Ci0JcmV0dXJuIGQyaV9BU04xX1NFVF9PRl9YNTA5X0FMR09SKE5VTEwsICZwLAotCQkJCQkgIGNhcC0+dmFsdWUuc2VxdWVuY2UtPmxlbmd0aCwKLQkJCQkJICBkMmlfWDUwOV9BTEdPUiwgWDUwOV9BTEdPUl9mcmVlLAotCQkJCQkgIFZfQVNOMV9TRVFVRU5DRSwgVl9BU04xX1VOSVZFUlNBTCk7CisJcmV0dXJuIChTVEFDS19PRihYNTA5X0FMR09SKSAqKQorCQlBU04xX2l0ZW1fZDJpKE5VTEwsICZwLCBjYXAtPnZhbHVlLnNlcXVlbmNlLT5sZW5ndGgsCisJCQkJQVNOMV9JVEVNX3JwdHIoWDUwOV9BTEdPUlMpKTsKIAl9CiAKIC8qIEJhc2ljIHNtaW1lLWNhcGFiaWxpdGllcyBPSUQgYW5kIG9wdGlvbmFsIGludGVnZXIgYXJnICovCkBAIC0xMzksMyArMTI0LDQyIEBACiAJc2tfWDUwOV9BTEdPUl9wdXNoIChzaywgYWxnKTsKIAlyZXR1cm4gMTsKIH0KKworaW50IFBLQ1M3X2FkZF9hdHRyaWJfY29udGVudF90eXBlKFBLQ1M3X1NJR05FUl9JTkZPICpzaSwgQVNOMV9PQkpFQ1QgKmNvaWQpCisJeworCWlmIChQS0NTN19nZXRfc2lnbmVkX2F0dHJpYnV0ZShzaSwgTklEX3BrY3M5X2NvbnRlbnRUeXBlKSkKKwkJcmV0dXJuIDA7CisJaWYgKCFjb2lkKQorCQljb2lkID0gT0JKX25pZDJvYmooTklEX3BrY3M3X2RhdGEpOworCXJldHVybiBQS0NTN19hZGRfc2lnbmVkX2F0dHJpYnV0ZShzaSwgTklEX3BrY3M5X2NvbnRlbnRUeXBlLAorCQkJCVZfQVNOMV9PQkpFQ1QsIGNvaWQpOworCX0KKworaW50IFBLQ1M3X2FkZDBfYXR0cmliX3NpZ25pbmdfdGltZShQS0NTN19TSUdORVJfSU5GTyAqc2ksIEFTTjFfVElNRSAqdCkKKwl7CisJaWYgKCF0ICYmICEodD1YNTA5X2dtdGltZV9hZGooTlVMTCwwKSkpCisJCXsKKwkJUEtDUzdlcnIoUEtDUzdfRl9QS0NTN19BREQwX0FUVFJJQl9TSUdOSU5HX1RJTUUsCisJCQkJRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOworCQlyZXR1cm4gMDsKKwkJfQorCXJldHVybiBQS0NTN19hZGRfc2lnbmVkX2F0dHJpYnV0ZShzaSwgTklEX3BrY3M5X3NpZ25pbmdUaW1lLAorCQkJCQkJVl9BU04xX1VUQ1RJTUUsIHQpOworCX0KKworaW50IFBLQ1M3X2FkZDFfYXR0cmliX2RpZ2VzdChQS0NTN19TSUdORVJfSU5GTyAqc2ksCisJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqbWQsIGludCBtZGxlbikKKwl7CisJQVNOMV9PQ1RFVF9TVFJJTkcgKm9zOworCW9zID0gQVNOMV9PQ1RFVF9TVFJJTkdfbmV3KCk7CisJaWYgKCFvcykKKwkJcmV0dXJuIDA7CisJaWYgKCFBU04xX1NUUklOR19zZXQob3MsIG1kLCBtZGxlbikKKwkJfHwgIVBLQ1M3X2FkZF9zaWduZWRfYXR0cmlidXRlKHNpLCBOSURfcGtjczlfbWVzc2FnZURpZ2VzdCwKKwkJCQkJCVZfQVNOMV9PQ1RFVF9TVFJJTkcsIG9zKSkKKwkJeworCQlBU04xX09DVEVUX1NUUklOR19mcmVlKG9zKTsKKwkJcmV0dXJuIDA7CisJCX0KKwlyZXR1cm4gMTsKKwl9CmRpZmYgLS1naXQgYS9jcnlwdG8vcGtjczcvcGs3X2RvaXQuYyBiL2NyeXB0by9wa2NzNy9wazdfZG9pdC5jCmluZGV4IGEwM2Q3ZWIuLjQ1MWRlODQgMTAwNjQ0Ci0tLSBhL2NyeXB0by9wa2NzNy9wazdfZG9pdC5jCisrKyBiL2NyeXB0by9wa2NzNy9wazdfZG9pdC5jCkBAIC0xMzgsNiArMTM4LDEyMSBAQAogCiAJfQogCitzdGF0aWMgaW50IHBrY3M3X2VuY29kZV9yaW5mbyhQS0NTN19SRUNJUF9JTkZPICpyaSwKKwkJCQkJdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuKQorCXsKKwlFVlBfUEtFWV9DVFggKnBjdHggPSBOVUxMOworCUVWUF9QS0VZICpwa2V5ID0gTlVMTDsKKwl1bnNpZ25lZCBjaGFyICplayA9IE5VTEw7CisJaW50IHJldCA9IDA7CisJc2l6ZV90IGVrbGVuOworCisJcGtleSA9IFg1MDlfZ2V0X3B1YmtleShyaS0+Y2VydCk7CisKKwlpZiAoIXBrZXkpCisJCXJldHVybiAwOworCisJcGN0eCA9IEVWUF9QS0VZX0NUWF9uZXcocGtleSwgTlVMTCk7CisJaWYgKCFwY3R4KQorCQlyZXR1cm4gMDsKKworCWlmIChFVlBfUEtFWV9lbmNyeXB0X2luaXQocGN0eCkgPD0gMCkKKwkJZ290byBlcnI7CisKKwlpZiAoRVZQX1BLRVlfQ1RYX2N0cmwocGN0eCwgLTEsIEVWUF9QS0VZX09QX0VOQ1JZUFQsCisJCQkJRVZQX1BLRVlfQ1RSTF9QS0NTN19FTkNSWVBULCAwLCByaSkgPD0gMCkKKwkJeworCQlQS0NTN2VycihQS0NTN19GX1BLQ1M3X0VOQ09ERV9SSU5GTywgUEtDUzdfUl9DVFJMX0VSUk9SKTsKKwkJZ290byBlcnI7CisJCX0KKworCWlmIChFVlBfUEtFWV9lbmNyeXB0KHBjdHgsIE5VTEwsICZla2xlbiwga2V5LCBrZXlsZW4pIDw9IDApCisJCWdvdG8gZXJyOworCisJZWsgPSBPUEVOU1NMX21hbGxvYyhla2xlbik7CisKKwlpZiAoZWsgPT0gTlVMTCkKKwkJeworCQlQS0NTN2VycihQS0NTN19GX1BLQ1M3X0VOQ09ERV9SSU5GTywgRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOworCQlnb3RvIGVycjsKKwkJfQorCisJaWYgKEVWUF9QS0VZX2VuY3J5cHQocGN0eCwgZWssICZla2xlbiwga2V5LCBrZXlsZW4pIDw9IDApCisJCWdvdG8gZXJyOworCisJQVNOMV9TVFJJTkdfc2V0MChyaS0+ZW5jX2tleSwgZWssIGVrbGVuKTsKKwllayA9IE5VTEw7CisKKwlyZXQgPSAxOworCisJZXJyOgorCWlmIChwa2V5KQorCQlFVlBfUEtFWV9mcmVlKHBrZXkpOworCWlmIChwY3R4KQorCQlFVlBfUEtFWV9DVFhfZnJlZShwY3R4KTsKKwlpZiAoZWspCisJCU9QRU5TU0xfZnJlZShlayk7CisJcmV0dXJuIHJldDsKKworCX0KKworCitzdGF0aWMgaW50IHBrY3M3X2RlY3J5cHRfcmluZm8odW5zaWduZWQgY2hhciAqKnBlaywgaW50ICpwZWtsZW4sCisJCQkgICAgICAgUEtDUzdfUkVDSVBfSU5GTyAqcmksIEVWUF9QS0VZICpwa2V5KQorCXsKKwlFVlBfUEtFWV9DVFggKnBjdHggPSBOVUxMOworCXVuc2lnbmVkIGNoYXIgKmVrID0gTlVMTDsKKwlzaXplX3QgZWtsZW47CisKKwlpbnQgcmV0ID0gMDsKKworCXBjdHggPSBFVlBfUEtFWV9DVFhfbmV3KHBrZXksIE5VTEwpOworCWlmICghcGN0eCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoRVZQX1BLRVlfZGVjcnlwdF9pbml0KHBjdHgpIDw9IDApCisJCWdvdG8gZXJyOworCisJaWYgKEVWUF9QS0VZX0NUWF9jdHJsKHBjdHgsIC0xLCBFVlBfUEtFWV9PUF9ERUNSWVBULAorCQkJCUVWUF9QS0VZX0NUUkxfUEtDUzdfREVDUllQVCwgMCwgcmkpIDw9IDApCisJCXsKKwkJUEtDUzdlcnIoUEtDUzdfRl9QS0NTN19ERUNSWVBUX1JJTkZPLCBQS0NTN19SX0NUUkxfRVJST1IpOworCQlnb3RvIGVycjsKKwkJfQorCisJaWYgKEVWUF9QS0VZX2RlY3J5cHQocGN0eCwgTlVMTCwgJmVrbGVuLAorCQkJCXJpLT5lbmNfa2V5LT5kYXRhLCByaS0+ZW5jX2tleS0+bGVuZ3RoKSA8PSAwKQorCQlnb3RvIGVycjsKKworCWVrID0gT1BFTlNTTF9tYWxsb2MoZWtsZW4pOworCisJaWYgKGVrID09IE5VTEwpCisJCXsKKwkJUEtDUzdlcnIoUEtDUzdfRl9QS0NTN19ERUNSWVBUX1JJTkZPLCBFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CisJCWdvdG8gZXJyOworCQl9CisKKwlpZiAoRVZQX1BLRVlfZGVjcnlwdChwY3R4LCBlaywgJmVrbGVuLAorCQkJCXJpLT5lbmNfa2V5LT5kYXRhLCByaS0+ZW5jX2tleS0+bGVuZ3RoKSA8PSAwKQorCQl7CisJCVBLQ1M3ZXJyKFBLQ1M3X0ZfUEtDUzdfREVDUllQVF9SSU5GTywgRVJSX1JfRVZQX0xJQik7CisJCWdvdG8gZXJyOworCQl9CisKKwlyZXQgPSAxOworCisJKnBlayA9IGVrOworCSpwZWtsZW4gPSBla2xlbjsKKworCWVycjoKKwlpZiAocGN0eCkKKwkJRVZQX1BLRVlfQ1RYX2ZyZWUocGN0eCk7CisJaWYgKCFyZXQgJiYgZWspCisJCU9QRU5TU0xfZnJlZShlayk7CisKKwlyZXR1cm4gcmV0OworCX0KKwogQklPICpQS0NTN19kYXRhSW5pdChQS0NTNyAqcDcsIEJJTyAqYmlvKQogCXsKIAlpbnQgaTsKQEAgLTE0OCw3ICsyNjMsNiBAQAogCVNUQUNLX09GKFBLQ1M3X1JFQ0lQX0lORk8pICpyc2s9TlVMTDsKIAlYNTA5X0FMR09SICp4YWxnPU5VTEw7CiAJUEtDUzdfUkVDSVBfSU5GTyAqcmk9TlVMTDsKLQlFVlBfUEtFWSAqcGtleTsKIAlBU04xX09DVEVUX1NUUklORyAqb3M9TlVMTDsKIAogCWk9T0JKX29iajJuaWQocDctPnR5cGUpOwpAQCAtMTg3LDYgKzMwMSw4IEBACiAJCXhhID0gcDctPmQuZGlnZXN0LT5tZDsKIAkJb3MgPSBQS0NTN19nZXRfb2N0ZXRfc3RyaW5nKHA3LT5kLmRpZ2VzdC0+Y29udGVudHMpOwogCQlicmVhazsKKwljYXNlIE5JRF9wa2NzN19kYXRhOgorCQlicmVhazsKIAlkZWZhdWx0OgogCQlQS0NTN2VycihQS0NTN19GX1BLQ1M3X0RBVEFJTklULFBLQ1M3X1JfVU5TVVBQT1JURURfQ09OVEVOVF9UWVBFKTsKIAkgICAgICAgIGdvdG8gZXJyOwpAQCAtMjA0LDggKzMyMCw2IEBACiAJCXVuc2lnbmVkIGNoYXIga2V5W0VWUF9NQVhfS0VZX0xFTkdUSF07CiAJCXVuc2lnbmVkIGNoYXIgaXZbRVZQX01BWF9JVl9MRU5HVEhdOwogCQlpbnQga2V5bGVuLGl2bGVuOwotCQlpbnQgamosbWF4OwotCQl1bnNpZ25lZCBjaGFyICp0bXA7CiAJCUVWUF9DSVBIRVJfQ1RYICpjdHg7CiAKIAkJaWYgKChidG1wPUJJT19uZXcoQklPX2ZfY2lwaGVyKCkpKSA9PSBOVUxMKQpAQCAtMjM0LDUyICszNDgsMTYgQEAKIAkJCQkJZ290byBlcnI7CiAJCQl9CiAJCQlpZihFVlBfQ0lQSEVSX3BhcmFtX3RvX2FzbjEoY3R4LCB4YWxnLT5wYXJhbWV0ZXIpIDwgMCkKLQkJCSAgICAgICBnb3RvIGVycjsKKwkJCQlnb3RvIGVycjsKIAkJfQogCiAJCS8qIExldHMgZG8gdGhlIHB1YiBrZXkgc3R1ZmYgOi0pICovCi0JCW1heD0wOwogCQlmb3IgKGk9MDsgaTxza19QS0NTN19SRUNJUF9JTkZPX251bShyc2spOyBpKyspCiAJCQl7CiAJCQlyaT1za19QS0NTN19SRUNJUF9JTkZPX3ZhbHVlKHJzayxpKTsKLQkJCWlmIChyaS0+Y2VydCA9PSBOVUxMKQotCQkJCXsKLQkJCQlQS0NTN2VycihQS0NTN19GX1BLQ1M3X0RBVEFJTklULFBLQ1M3X1JfTUlTU0lOR19DRVJJUEVORF9JTkZPKTsKKwkJCWlmIChwa2NzN19lbmNvZGVfcmluZm8ocmksIGtleSwga2V5bGVuKSA8PSAwKQogCQkJCWdvdG8gZXJyOwotCQkJCX0KLQkJCWlmICgocGtleT1YNTA5X2dldF9wdWJrZXkocmktPmNlcnQpKSA9PSBOVUxMKQotCQkJCWdvdG8gZXJyOwotCQkJamo9RVZQX1BLRVlfc2l6ZShwa2V5KTsKLQkJCUVWUF9QS0VZX2ZyZWUocGtleSk7Ci0JCQlpZiAobWF4IDwgamopIG1heD1qajsKIAkJCX0KLQkJaWYgKCh0bXA9KHVuc2lnbmVkIGNoYXIgKilPUEVOU1NMX21hbGxvYyhtYXgpKSA9PSBOVUxMKQotCQkJewotCQkJUEtDUzdlcnIoUEtDUzdfRl9QS0NTN19EQVRBSU5JVCxFUlJfUl9NQUxMT0NfRkFJTFVSRSk7Ci0JCQlnb3RvIGVycjsKLQkJCX0KLQkJZm9yIChpPTA7IGk8c2tfUEtDUzdfUkVDSVBfSU5GT19udW0ocnNrKTsgaSsrKQotCQkJewotCQkJcmk9c2tfUEtDUzdfUkVDSVBfSU5GT192YWx1ZShyc2ssaSk7Ci0JCQlpZiAoKHBrZXk9WDUwOV9nZXRfcHVia2V5KHJpLT5jZXJ0KSkgPT0gTlVMTCkKLQkJCQlnb3RvIGVycjsKLQkJCWpqPUVWUF9QS0VZX2VuY3J5cHQodG1wLGtleSxrZXlsZW4scGtleSk7Ci0JCQlFVlBfUEtFWV9mcmVlKHBrZXkpOwotCQkJaWYgKGpqIDw9IDApCi0JCQkJewotCQkJCVBLQ1M3ZXJyKFBLQ1M3X0ZfUEtDUzdfREFUQUlOSVQsRVJSX1JfRVZQX0xJQik7Ci0JCQkJT1BFTlNTTF9mcmVlKHRtcCk7Ci0JCQkJZ290byBlcnI7Ci0JCQkJfQotCQkJaWYgKCFNX0FTTjFfT0NURVRfU1RSSU5HX3NldChyaS0+ZW5jX2tleSx0bXAsamopKQotCQkJCXsKLQkJCQlQS0NTN2VycihQS0NTN19GX1BLQ1M3X0RBVEFJTklULAotCQkJCQlFUlJfUl9NQUxMT0NfRkFJTFVSRSk7Ci0JCQkJT1BFTlNTTF9mcmVlKHRtcCk7Ci0JCQkJZ290byBlcnI7Ci0JCQkJfQotCQkJfQotCQlPUEVOU1NMX2ZyZWUodG1wKTsKIAkJT1BFTlNTTF9jbGVhbnNlKGtleSwga2V5bGVuKTsKIAogCQlpZiAob3V0ID09IE5VTEwpCkBAIC0zMDMsNyArMzgxLDEwIEBACiAJCQlCSU9fc2V0X21lbV9lb2ZfcmV0dXJuKGJpbywwKTsKIAkJCX0KIAkJfQotCUJJT19wdXNoKG91dCxiaW8pOworCWlmIChvdXQpCisJCUJJT19wdXNoKG91dCxiaW8pOworCWVsc2UKKwkJb3V0ID0gYmlvOwogCWJpbz1OVUxMOwogCWlmICgwKQogCQl7CkBAIC0zMzMsNyArNDE0LDYgQEAKIAl7CiAJaW50IGksajsKIAlCSU8gKm91dD1OVUxMLCpidG1wPU5VTEwsKmV0bXA9TlVMTCwqYmlvPU5VTEw7Ci0JdW5zaWduZWQgY2hhciAqdG1wPU5VTEw7CiAJWDUwOV9BTEdPUiAqeGE7CiAJQVNOMV9PQ1RFVF9TVFJJTkcgKmRhdGFfYm9keT1OVUxMOwogCWNvbnN0IEVWUF9NRCAqZXZwX21kOwpAQCAtNDIzLDcgKzUwMyw4IEBACiAJCWludCBtYXg7CiAJCVg1MDlfT0JKRUNUIHJldDsKICNlbmRpZgotCQlpbnQgamo7CisJCXVuc2lnbmVkIGNoYXIgKmVrID0gTlVMTDsKKwkJaW50IGVrbGVuOwogCiAJCWlmICgoZXRtcD1CSU9fbmV3KEJJT19mX2NpcGhlcigpKSkgPT0gTlVMTCkKIAkJCXsKQEAgLTQzOCwyNiArNTE5LDIxIEBACiAJCSAqIChpZiBhbnkpCiAJCSAqLwogCi0JCWlmIChwY2VydCkgewotCQkJZm9yIChpPTA7IGk8c2tfUEtDUzdfUkVDSVBfSU5GT19udW0ocnNrKTsgaSsrKSB7CisJCWlmIChwY2VydCkKKwkJCXsKKwkJCWZvciAoaT0wOyBpPHNrX1BLQ1M3X1JFQ0lQX0lORk9fbnVtKHJzayk7IGkrKykKKwkJCQl7CiAJCQkJcmk9c2tfUEtDUzdfUkVDSVBfSU5GT192YWx1ZShyc2ssaSk7CiAJCQkJaWYgKCFwa2NzN19jbXBfcmkocmksIHBjZXJ0KSkKIAkJCQkJYnJlYWs7CiAJCQkJcmk9TlVMTDsKLQkJCX0KLQkJCWlmIChyaSA9PSBOVUxMKSB7CisJCQkJfQorCQkJaWYgKHJpID09IE5VTEwpCisJCQkJewogCQkJCVBLQ1M3ZXJyKFBLQ1M3X0ZfUEtDUzdfREFUQURFQ09ERSwKIAkJCQkgICAgICBQS0NTN19SX05PX1JFQ0lQSUVOVF9NQVRDSEVTX0NFUlRJRklDQVRFKTsKIAkJCQlnb3RvIGVycjsKLQkJCX0KLQkJfQotCi0JCWpqPUVWUF9QS0VZX3NpemUocGtleSk7Ci0JCXRtcD0odW5zaWduZWQgY2hhciAqKU9QRU5TU0xfbWFsbG9jKGpqKzEwKTsKLQkJaWYgKHRtcCA9PSBOVUxMKQotCQkJewotCQkJUEtDUzdlcnIoUEtDUzdfRl9QS0NTN19EQVRBREVDT0RFLEVSUl9SX01BTExPQ19GQUlMVVJFKTsKLQkJCWdvdG8gZXJyOworCQkJCX0KIAkJCX0KIAogCQkvKiBJZiB3ZSBoYXZlbid0IGdvdCBhIGNlcnRpZmljYXRlIHRyeSBlYWNoIHJpIGluIHR1cm4gKi8KQEAgLTQ2NywxMSArNTQzLDggQEAKIAkJCWZvciAoaT0wOyBpPHNrX1BLQ1M3X1JFQ0lQX0lORk9fbnVtKHJzayk7IGkrKykKIAkJCQl7CiAJCQkJcmk9c2tfUEtDUzdfUkVDSVBfSU5GT192YWx1ZShyc2ssaSk7Ci0JCQkJamo9RVZQX1BLRVlfZGVjcnlwdCh0bXAsCi0JCQkJCU1fQVNOMV9TVFJJTkdfZGF0YShyaS0+ZW5jX2tleSksCi0JCQkJCU1fQVNOMV9TVFJJTkdfbGVuZ3RoKHJpLT5lbmNfa2V5KSwKLQkJCQkJCXBrZXkpOwotCQkJCWlmIChqaiA+IDApCisJCQkJaWYgKHBrY3M3X2RlY3J5cHRfcmluZm8oJmVrLCAmZWtsZW4sCisJCQkJCQkJcmksIHBrZXkpID4gMCkKIAkJCQkJYnJlYWs7CiAJCQkJRVJSX2NsZWFyX2Vycm9yKCk7CiAJCQkJcmkgPSBOVUxMOwpAQCAtNDg1LDE1ICs1NTgsOCBAQAogCQkJfQogCQllbHNlCiAJCQl7Ci0JCQlqaj1FVlBfUEtFWV9kZWNyeXB0KHRtcCwKLQkJCQlNX0FTTjFfU1RSSU5HX2RhdGEocmktPmVuY19rZXkpLAotCQkJCU1fQVNOMV9TVFJJTkdfbGVuZ3RoKHJpLT5lbmNfa2V5KSwgcGtleSk7Ci0JCQlpZiAoamogPD0gMCkKLQkJCQl7Ci0JCQkJUEtDUzdlcnIoUEtDUzdfRl9QS0NTN19EQVRBREVDT0RFLAotCQkJCQkJCQlFUlJfUl9FVlBfTElCKTsKKwkJCWlmIChwa2NzN19kZWNyeXB0X3JpbmZvKCZlaywgJmVrbGVuLCByaSwgcGtleSkgPD0gMCkKIAkJCQlnb3RvIGVycjsKLQkJCQl9CiAJCQl9CiAKIAkJZXZwX2N0eD1OVUxMOwpAQCAtNTAzLDIyICs1NjksMjYgQEAKIAkJaWYgKEVWUF9DSVBIRVJfYXNuMV90b19wYXJhbShldnBfY3R4LGVuY19hbGctPnBhcmFtZXRlcikgPCAwKQogCQkJZ290byBlcnI7CiAKLQkJaWYgKGpqICE9IEVWUF9DSVBIRVJfQ1RYX2tleV9sZW5ndGgoZXZwX2N0eCkpIHsKKwkJaWYgKGVrbGVuICE9IEVWUF9DSVBIRVJfQ1RYX2tleV9sZW5ndGgoZXZwX2N0eCkpIHsKIAkJCS8qIFNvbWUgUy9NSU1FIGNsaWVudHMgZG9uJ3QgdXNlIHRoZSBzYW1lIGtleQogCQkJICogYW5kIGVmZmVjdGl2ZSBrZXkgbGVuZ3RoLiBUaGUga2V5IGxlbmd0aCBpcwogCQkJICogZGV0ZXJtaW5lZCBieSB0aGUgc2l6ZSBvZiB0aGUgZGVjcnlwdGVkIFJTQSBrZXkuCiAJCQkgKi8KLQkJCWlmKCFFVlBfQ0lQSEVSX0NUWF9zZXRfa2V5X2xlbmd0aChldnBfY3R4LCBqaikpCisJCQlpZighRVZQX0NJUEhFUl9DVFhfc2V0X2tleV9sZW5ndGgoZXZwX2N0eCwgZWtsZW4pKQogCQkJCXsKIAkJCQlQS0NTN2VycihQS0NTN19GX1BLQ1M3X0RBVEFERUNPREUsCiAJCQkJCVBLQ1M3X1JfREVDUllQVEVEX0tFWV9JU19XUk9OR19MRU5HVEgpOwogCQkJCWdvdG8gZXJyOwogCQkJCX0KIAkJfSAKLQkJaWYgKEVWUF9DaXBoZXJJbml0X2V4KGV2cF9jdHgsTlVMTCxOVUxMLHRtcCxOVUxMLDApIDw9IDApCisJCWlmIChFVlBfQ2lwaGVySW5pdF9leChldnBfY3R4LE5VTEwsTlVMTCxlayxOVUxMLDApIDw9IDApCiAJCQlnb3RvIGVycjsKIAotCQlPUEVOU1NMX2NsZWFuc2UodG1wLGpqKTsKKwkJaWYgKGVrKQorCQkJeworCQkJT1BFTlNTTF9jbGVhbnNlKGVrLGVrbGVuKTsKKwkJCU9QRU5TU0xfZnJlZShlayk7CisJCQl9CiAKIAkJaWYgKG91dCA9PSBOVUxMKQogCQkJb3V0PWV0bXA7CkBAIC01NjYsOCArNjM2LDYgQEAKIAkJaWYgKGJpbyAhPSBOVUxMKSBCSU9fZnJlZV9hbGwoYmlvKTsKIAkJb3V0PU5VTEw7CiAJCX0KLQlpZiAodG1wICE9IE5VTEwpCi0JCU9QRU5TU0xfZnJlZSh0bXApOwogCXJldHVybihvdXQpOwogCX0KIApAQCAtNTk0LDEzICs2NjIsNDMgQEAKIAlyZXR1cm4gTlVMTDsKIAl9CiAKK3N0YXRpYyBpbnQgZG9fcGtjczdfc2lnbmVkX2F0dHJpYihQS0NTN19TSUdORVJfSU5GTyAqc2ksIEVWUF9NRF9DVFggKm1jdHgpCisJeworCXVuc2lnbmVkIGNoYXIgbWRfZGF0YVtFVlBfTUFYX01EX1NJWkVdOworCXVuc2lnbmVkIGludCBtZF9sZW47CisKKwkvKiBBZGQgc2lnbmluZyB0aW1lIGlmIG5vdCBhbHJlYWR5IHByZXNlbnQgKi8KKwlpZiAoIVBLQ1M3X2dldF9zaWduZWRfYXR0cmlidXRlKHNpLCBOSURfcGtjczlfc2lnbmluZ1RpbWUpKQorCQl7CisJCWlmICghUEtDUzdfYWRkMF9hdHRyaWJfc2lnbmluZ190aW1lKHNpLCBOVUxMKSkKKwkJCXsKKwkJCVBLQ1M3ZXJyKFBLQ1M3X0ZfRE9fUEtDUzdfU0lHTkVEX0FUVFJJQiwKKwkJCQkJRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOworCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKworCS8qIEFkZCBkaWdlc3QgKi8KKwlFVlBfRGlnZXN0RmluYWxfZXgobWN0eCwgbWRfZGF0YSwmbWRfbGVuKTsKKwlpZiAoIVBLQ1M3X2FkZDFfYXR0cmliX2RpZ2VzdChzaSwgbWRfZGF0YSwgbWRfbGVuKSkKKwkJeworCQlQS0NTN2VycihQS0NTN19GX0RPX1BLQ1M3X1NJR05FRF9BVFRSSUIsIEVSUl9SX01BTExPQ19GQUlMVVJFKTsKKwkJcmV0dXJuIDA7CisJCX0KKworCS8qIE5vdyBzaWduIHRoZSBhdHRyaWJ1dGVzICovCisJaWYgKCFQS0NTN19TSUdORVJfSU5GT19zaWduKHNpKSkKKwkJCXJldHVybiAwOworCisJcmV0dXJuIDE7CisJfQorCQorCQkJCQogaW50IFBLQ1M3X2RhdGFGaW5hbChQS0NTNyAqcDcsIEJJTyAqYmlvKQogCXsKIAlpbnQgcmV0PTA7CiAJaW50IGksajsKIAlCSU8gKmJ0bXA7Ci0JQlVGX01FTSAqYnVmX21lbT1OVUxMOwotCUJVRl9NRU0gKmJ1Zj1OVUxMOwogCVBLQ1M3X1NJR05FUl9JTkZPICpzaTsKIAlFVlBfTURfQ1RYICptZGMsY3R4X3RtcDsKIAlTVEFDS19PRihYNTA5X0FUVFJJQlVURSkgKnNrOwpAQCAtNjEzLDI0ICs3MTEsMzcgQEAKIAogCXN3aXRjaCAoaSkKIAkJeworCWNhc2UgTklEX3BrY3M3X2RhdGE6CisJCW9zID0gcDctPmQuZGF0YTsKKwkJYnJlYWs7CiAJY2FzZSBOSURfcGtjczdfc2lnbmVkQW5kRW52ZWxvcGVkOgogCQkvKiBYWFhYWFhYWFhYWFhYWFhYICovCiAJCXNpX3NrPXA3LT5kLnNpZ25lZF9hbmRfZW52ZWxvcGVkLT5zaWduZXJfaW5mbzsKLQkJaWYgKCEob3M9TV9BU04xX09DVEVUX1NUUklOR19uZXcoKSkpCisJCW9zID0gcDctPmQuc2lnbmVkX2FuZF9lbnZlbG9wZWQtPmVuY19kYXRhLT5lbmNfZGF0YTsKKwkJaWYgKCFvcykKIAkJCXsKLQkJCVBLQ1M3ZXJyKFBLQ1M3X0ZfUEtDUzdfREFUQUZJTkFMLEVSUl9SX01BTExPQ19GQUlMVVJFKTsKLQkJCWdvdG8gZXJyOworCQkJb3M9TV9BU04xX09DVEVUX1NUUklOR19uZXcoKTsKKwkJCWlmICghb3MpCisJCQkJeworCQkJCVBLQ1M3ZXJyKFBLQ1M3X0ZfUEtDUzdfREFUQUZJTkFMLEVSUl9SX01BTExPQ19GQUlMVVJFKTsKKwkJCQlnb3RvIGVycjsKKwkJCQl9CisJCQlwNy0+ZC5zaWduZWRfYW5kX2VudmVsb3BlZC0+ZW5jX2RhdGEtPmVuY19kYXRhPW9zOwogCQkJfQotCQlwNy0+ZC5zaWduZWRfYW5kX2VudmVsb3BlZC0+ZW5jX2RhdGEtPmVuY19kYXRhPW9zOwogCQlicmVhazsKIAljYXNlIE5JRF9wa2NzN19lbnZlbG9wZWQ6CiAJCS8qIFhYWFhYWFhYWFhYWFhYWFggKi8KLQkJaWYgKCEob3M9TV9BU04xX09DVEVUX1NUUklOR19uZXcoKSkpCisJCW9zID0gcDctPmQuZW52ZWxvcGVkLT5lbmNfZGF0YS0+ZW5jX2RhdGE7CisJCWlmICghb3MpCiAJCQl7Ci0JCQlQS0NTN2VycihQS0NTN19GX1BLQ1M3X0RBVEFGSU5BTCxFUlJfUl9NQUxMT0NfRkFJTFVSRSk7Ci0JCQlnb3RvIGVycjsKKwkJCW9zPU1fQVNOMV9PQ1RFVF9TVFJJTkdfbmV3KCk7CisJCQlpZiAoIW9zKQorCQkJCXsKKwkJCQlQS0NTN2VycihQS0NTN19GX1BLQ1M3X0RBVEFGSU5BTCxFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CisJCQkJZ290byBlcnI7CisJCQkJfQorCQkJcDctPmQuZW52ZWxvcGVkLT5lbmNfZGF0YS0+ZW5jX2RhdGE9b3M7CiAJCQl9Ci0JCXA3LT5kLmVudmVsb3BlZC0+ZW5jX2RhdGEtPmVuY19kYXRhPW9zOwogCQlicmVhazsKIAljYXNlIE5JRF9wa2NzN19zaWduZWQ6CiAJCXNpX3NrPXA3LT5kLnNpZ24tPnNpZ25lcl9pbmZvOwpAQCAtNjUyLDIxICs3NjMsMjAgQEAKIAkJCX0KIAkJYnJlYWs7CiAKKwlkZWZhdWx0OgorCQlQS0NTN2VycihQS0NTN19GX1BLQ1M3X0RBVEFGSU5BTCxQS0NTN19SX1VOU1VQUE9SVEVEX0NPTlRFTlRfVFlQRSk7CisJICAgICAgICBnb3RvIGVycjsKIAkJfQogCiAJaWYgKHNpX3NrICE9IE5VTEwpCiAJCXsKLQkJaWYgKChidWY9QlVGX01FTV9uZXcoKSkgPT0gTlVMTCkKLQkJCXsKLQkJCVBLQ1M3ZXJyKFBLQ1M3X0ZfUEtDUzdfREFUQUZJTkFMLEVSUl9SX0JJT19MSUIpOwotCQkJZ290byBlcnI7Ci0JCQl9CiAJCWZvciAoaT0wOyBpPHNrX1BLQ1M3X1NJR05FUl9JTkZPX251bShzaV9zayk7IGkrKykKIAkJCXsKIAkJCXNpPXNrX1BLQ1M3X1NJR05FUl9JTkZPX3ZhbHVlKHNpX3NrLGkpOwotCQkJaWYgKHNpLT5wa2V5ID09IE5VTEwpIGNvbnRpbnVlOworCQkJaWYgKHNpLT5wa2V5ID09IE5VTEwpCisJCQkJY29udGludWU7CiAKLQkJCWo9T0JKX29iajJuaWQoc2ktPmRpZ2VzdF9hbGctPmFsZ29yaXRobSk7CisJCQlqID0gT0JKX29iajJuaWQoc2ktPmRpZ2VzdF9hbGctPmFsZ29yaXRobSk7CiAKIAkJCWJ0bXA9YmlvOwogCkBAIC02NzgsOTcgKzc4OCwzMyBAQAogCQkJLyogV2Ugbm93IGhhdmUgdGhlIEVWUF9NRF9DVFgsIGxldHMgZG8gdGhlCiAJCQkgKiBzaWduaW5nLiAqLwogCQkJRVZQX01EX0NUWF9jb3B5X2V4KCZjdHhfdG1wLG1kYyk7Ci0JCQlpZiAoIUJVRl9NRU1fZ3Jvd19jbGVhbihidWYsRVZQX1BLRVlfc2l6ZShzaS0+cGtleSkpKQotCQkJCXsKLQkJCQlQS0NTN2VycihQS0NTN19GX1BLQ1M3X0RBVEFGSU5BTCxFUlJfUl9CSU9fTElCKTsKLQkJCQlnb3RvIGVycjsKLQkJCQl9CiAKIAkJCXNrPXNpLT5hdXRoX2F0dHI7CiAKIAkJCS8qIElmIHRoZXJlIGFyZSBhdHRyaWJ1dGVzLCB3ZSBhZGQgdGhlIGRpZ2VzdAogCQkJICogYXR0cmlidXRlIGFuZCBvbmx5IHNpZ24gdGhlIGF0dHJpYnV0ZXMgKi8KLQkJCWlmICgoc2sgIT0gTlVMTCkgJiYgKHNrX1g1MDlfQVRUUklCVVRFX251bShzaykgIT0gMCkpCisJCQlpZiAoc2tfWDUwOV9BVFRSSUJVVEVfbnVtKHNrKSA+IDApCiAJCQkJewotCQkJCXVuc2lnbmVkIGNoYXIgbWRfZGF0YVtFVlBfTUFYX01EX1NJWkVdLCAqYWJ1Zj1OVUxMOwotCQkJCXVuc2lnbmVkIGludCBtZF9sZW4sIGFsZW47Ci0JCQkJQVNOMV9PQ1RFVF9TVFJJTkcgKmRpZ2VzdDsKLQkJCQlBU04xX1VUQ1RJTUUgKnNpZ25fdGltZTsKLQkJCQljb25zdCBFVlBfTUQgKm1kX3RtcDsKKwkJCQlpZiAoIWRvX3BrY3M3X3NpZ25lZF9hdHRyaWIoc2ksICZjdHhfdG1wKSkKKwkJCQkJZ290byBlcnI7CisJCQkJfQorCQkJZWxzZQorCQkJCXsKKwkJCQl1bnNpZ25lZCBjaGFyICphYnVmID0gTlVMTDsKKwkJCQl1bnNpZ25lZCBpbnQgYWJ1ZmxlbjsKKwkJCQlhYnVmbGVuID0gRVZQX1BLRVlfc2l6ZShzaS0+cGtleSk7CisJCQkJYWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKGFidWZsZW4pOworCQkJCWlmICghYWJ1ZikKKwkJCQkJZ290byBlcnI7CiAKLQkJCQkvKiBBZGQgc2lnbmluZyB0aW1lIGlmIG5vdCBhbHJlYWR5IHByZXNlbnQgKi8KLQkJCQlpZiAoIVBLQ1M3X2dldF9zaWduZWRfYXR0cmlidXRlKHNpLAotCQkJCQkJCU5JRF9wa2NzOV9zaWduaW5nVGltZSkpCi0JCQkJCXsKLQkJCQkJaWYgKCEoc2lnbl90aW1lPVg1MDlfZ210aW1lX2FkaihOVUxMLDApKSkKLQkJCQkJCXsKLQkJCQkJCVBLQ1M3ZXJyKFBLQ1M3X0ZfUEtDUzdfREFUQUZJTkFMLAotCQkJCQkJCUVSUl9SX01BTExPQ19GQUlMVVJFKTsKLQkJCQkJCWdvdG8gZXJyOwotCQkJCQkJfQotCQkJCQlpZiAoIVBLQ1M3X2FkZF9zaWduZWRfYXR0cmlidXRlKHNpLAotCQkJCQkJTklEX3BrY3M5X3NpZ25pbmdUaW1lLAotCQkJCQkJVl9BU04xX1VUQ1RJTUUsc2lnbl90aW1lKSkKLQkJCQkJCXsKLQkJCQkJCU1fQVNOMV9VVENUSU1FX2ZyZWUoc2lnbl90aW1lKTsKLQkJCQkJCWdvdG8gZXJyOwotCQkJCQkJfQotCQkJCQl9Ci0KLQkJCQkvKiBBZGQgZGlnZXN0ICovCi0JCQkJbWRfdG1wPUVWUF9NRF9DVFhfbWQoJmN0eF90bXApOwotCQkJCUVWUF9EaWdlc3RGaW5hbF9leCgmY3R4X3RtcCxtZF9kYXRhLCZtZF9sZW4pOwotCQkJCWlmICghKGRpZ2VzdD1NX0FTTjFfT0NURVRfU1RSSU5HX25ldygpKSkKKwkJCQlpZiAoIUVWUF9TaWduRmluYWwoJmN0eF90bXAsIGFidWYsICZhYnVmbGVuLAorCQkJCQkJCXNpLT5wa2V5KSkKIAkJCQkJewogCQkJCQlQS0NTN2VycihQS0NTN19GX1BLQ1M3X0RBVEFGSU5BTCwKLQkJCQkJCUVSUl9SX01BTExPQ19GQUlMVVJFKTsKKwkJCQkJCQlFUlJfUl9FVlBfTElCKTsKIAkJCQkJZ290byBlcnI7CiAJCQkJCX0KLQkJCQlpZiAoIU1fQVNOMV9PQ1RFVF9TVFJJTkdfc2V0KGRpZ2VzdCxtZF9kYXRhLAotCQkJCQkJCQltZF9sZW4pKQotCQkJCQl7Ci0JCQkJCVBLQ1M3ZXJyKFBLQ1M3X0ZfUEtDUzdfREFUQUZJTkFMLAotCQkJCQkJRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwotCQkJCQlNX0FTTjFfT0NURVRfU1RSSU5HX2ZyZWUoZGlnZXN0KTsKLQkJCQkJZ290byBlcnI7Ci0JCQkJCX0KLQkJCQlpZiAoIVBLQ1M3X2FkZF9zaWduZWRfYXR0cmlidXRlKHNpLAotCQkJCQlOSURfcGtjczlfbWVzc2FnZURpZ2VzdCwKLQkJCQkJVl9BU04xX09DVEVUX1NUUklORyxkaWdlc3QpKQotCQkJCQl7Ci0JCQkJCU1fQVNOMV9PQ1RFVF9TVFJJTkdfZnJlZShkaWdlc3QpOwotCQkJCQlnb3RvIGVycjsKLQkJCQkJfQotCi0JCQkJLyogTm93IHNpZ24gdGhlIGF0dHJpYnV0ZXMgKi8KLQkJCQlFVlBfU2lnbkluaXRfZXgoJmN0eF90bXAsbWRfdG1wLE5VTEwpOwotCQkJCWFsZW4gPSBBU04xX2l0ZW1faTJkKChBU04xX1ZBTFVFICopc2ssJmFidWYsCi0JCQkJCQkJQVNOMV9JVEVNX3JwdHIoUEtDUzdfQVRUUl9TSUdOKSk7Ci0JCQkJaWYoIWFidWYpIGdvdG8gZXJyOwotCQkJCUVWUF9TaWduVXBkYXRlKCZjdHhfdG1wLGFidWYsYWxlbik7Ci0JCQkJT1BFTlNTTF9mcmVlKGFidWYpOwotCQkJCX0KLQotI2lmbmRlZiBPUEVOU1NMX05PX0RTQQotCQkJaWYgKHNpLT5wa2V5LT50eXBlID09IEVWUF9QS0VZX0RTQSkKLQkJCQljdHhfdG1wLmRpZ2VzdD1FVlBfZHNzMSgpOwotI2VuZGlmCi0jaWZuZGVmIE9QRU5TU0xfTk9fRUNEU0EKLSAJCQlpZiAoc2ktPnBrZXktPnR5cGUgPT0gRVZQX1BLRVlfRUMpCi0gCQkJCWN0eF90bXAuZGlnZXN0PUVWUF9lY2RzYSgpOwotI2VuZGlmCi0KLQkJCWlmICghRVZQX1NpZ25GaW5hbCgmY3R4X3RtcCwodW5zaWduZWQgY2hhciAqKWJ1Zi0+ZGF0YSwKLQkJCQkodW5zaWduZWQgaW50ICopJmJ1Zi0+bGVuZ3RoLHNpLT5wa2V5KSkKLQkJCQl7Ci0JCQkJUEtDUzdlcnIoUEtDUzdfRl9QS0NTN19EQVRBRklOQUwsRVJSX1JfRVZQX0xJQik7Ci0JCQkJZ290byBlcnI7Ci0JCQkJfQotCQkJaWYgKCFBU04xX1NUUklOR19zZXQoc2ktPmVuY19kaWdlc3QsCi0JCQkJKHVuc2lnbmVkIGNoYXIgKilidWYtPmRhdGEsYnVmLT5sZW5ndGgpKQotCQkJCXsKLQkJCQlQS0NTN2VycihQS0NTN19GX1BLQ1M3X0RBVEFGSU5BTCxFUlJfUl9BU04xX0xJQik7Ci0JCQkJZ290byBlcnI7CisJCQkJQVNOMV9TVFJJTkdfc2V0MChzaS0+ZW5jX2RpZ2VzdCwgYWJ1ZiwgYWJ1Zmxlbik7CiAJCQkJfQogCQkJfQogCQl9CkBAIC03ODMsMzQgKzgyOSw5MCBAQAogCQlNX0FTTjFfT0NURVRfU1RSSU5HX3NldChwNy0+ZC5kaWdlc3QtPmRpZ2VzdCwgbWRfZGF0YSwgbWRfbGVuKTsKIAkJfQogCi0JaWYgKCFQS0NTN19pc19kZXRhY2hlZChwNykpCisJaWYgKCFQS0NTN19pc19kZXRhY2hlZChwNykgJiYgIShvcy0+ZmxhZ3MgJiBBU04xX1NUUklOR19GTEFHX05ERUYpKQogCQl7CisJCWNoYXIgKmNvbnQ7CisJCWxvbmcgY29udGxlbjsKIAkJYnRtcD1CSU9fZmluZF90eXBlKGJpbyxCSU9fVFlQRV9NRU0pOwogCQlpZiAoYnRtcCA9PSBOVUxMKQogCQkJewogCQkJUEtDUzdlcnIoUEtDUzdfRl9QS0NTN19EQVRBRklOQUwsUEtDUzdfUl9VTkFCTEVfVE9fRklORF9NRU1fQklPKTsKIAkJCWdvdG8gZXJyOwogCQkJfQotCQlCSU9fZ2V0X21lbV9wdHIoYnRtcCwmYnVmX21lbSk7CisJCWNvbnRsZW4gPSBCSU9fZ2V0X21lbV9kYXRhKGJ0bXAsICZjb250KTsKIAkJLyogTWFyayB0aGUgQklPIHJlYWQgb25seSB0aGVuIHdlIGNhbiB1c2UgaXRzIGNvcHkgb2YgdGhlIGRhdGEKIAkJICogaW5zdGVhZCBvZiBtYWtpbmcgYW4gZXh0cmEgY29weS4KIAkJICovCiAJCUJJT19zZXRfZmxhZ3MoYnRtcCwgQklPX0ZMQUdTX01FTV9SRE9OTFkpOwogCQlCSU9fc2V0X21lbV9lb2ZfcmV0dXJuKGJ0bXAsIDApOwotCQlvcy0+ZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopYnVmX21lbS0+ZGF0YTsKLQkJb3MtPmxlbmd0aCA9IGJ1Zl9tZW0tPmxlbmd0aDsKLSNpZiAwCi0JCU1fQVNOMV9PQ1RFVF9TVFJJTkdfc2V0KG9zLAotCQkJKHVuc2lnbmVkIGNoYXIgKilidWZfbWVtLT5kYXRhLGJ1Zl9tZW0tPmxlbmd0aCk7Ci0jZW5kaWYKKwkJQVNOMV9TVFJJTkdfc2V0MChvcywgKHVuc2lnbmVkIGNoYXIgKiljb250LCBjb250bGVuKTsKIAkJfQogCXJldD0xOwogZXJyOgogCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4X3RtcCk7Ci0JaWYgKGJ1ZiAhPSBOVUxMKSBCVUZfTUVNX2ZyZWUoYnVmKTsKIAlyZXR1cm4ocmV0KTsKIAl9CiAKK2ludCBQS0NTN19TSUdORVJfSU5GT19zaWduKFBLQ1M3X1NJR05FUl9JTkZPICpzaSkKKwl7CisJRVZQX01EX0NUWCBtY3R4OworCUVWUF9QS0VZX0NUWCAqcGN0eDsKKwl1bnNpZ25lZCBjaGFyICphYnVmID0gTlVMTDsKKwlpbnQgYWxlbjsKKwlzaXplX3Qgc2lnbGVuOworCWNvbnN0IEVWUF9NRCAqbWQgPSBOVUxMOworCisJbWQgPSBFVlBfZ2V0X2RpZ2VzdGJ5b2JqKHNpLT5kaWdlc3RfYWxnLT5hbGdvcml0aG0pOworCWlmIChtZCA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCUVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7CisJaWYgKEVWUF9EaWdlc3RTaWduSW5pdCgmbWN0eCwgJnBjdHgsIG1kLE5VTEwsIHNpLT5wa2V5KSA8PSAwKQorCQlnb3RvIGVycjsKKworCWlmIChFVlBfUEtFWV9DVFhfY3RybChwY3R4LCAtMSwgRVZQX1BLRVlfT1BfU0lHTiwKKwkJCQlFVlBfUEtFWV9DVFJMX1BLQ1M3X1NJR04sIDAsIHNpKSA8PSAwKQorCQl7CisJCVBLQ1M3ZXJyKFBLQ1M3X0ZfUEtDUzdfU0lHTkVSX0lORk9fU0lHTiwgUEtDUzdfUl9DVFJMX0VSUk9SKTsKKwkJZ290byBlcnI7CisJCX0KKworCWFsZW4gPSBBU04xX2l0ZW1faTJkKChBU04xX1ZBTFVFICopc2ktPmF1dGhfYXR0ciwmYWJ1ZiwKKwkJCQlBU04xX0lURU1fcnB0cihQS0NTN19BVFRSX1NJR04pKTsKKwlpZighYWJ1ZikKKwkJZ290byBlcnI7CisJaWYgKEVWUF9EaWdlc3RTaWduVXBkYXRlKCZtY3R4LGFidWYsYWxlbikgPD0gMCkKKwkJZ290byBlcnI7CisJT1BFTlNTTF9mcmVlKGFidWYpOworCWlmIChFVlBfRGlnZXN0U2lnbkZpbmFsKCZtY3R4LCBOVUxMLCAmc2lnbGVuKSA8PSAwKQorCQlnb3RvIGVycjsKKwlhYnVmID0gT1BFTlNTTF9tYWxsb2Moc2lnbGVuKTsKKwlpZighYWJ1ZikKKwkJZ290byBlcnI7CisJaWYgKEVWUF9EaWdlc3RTaWduRmluYWwoJm1jdHgsIGFidWYsICZzaWdsZW4pIDw9IDApCisJCWdvdG8gZXJyOworCisJaWYgKEVWUF9QS0VZX0NUWF9jdHJsKHBjdHgsIC0xLCBFVlBfUEtFWV9PUF9TSUdOLAorCQkJCUVWUF9QS0VZX0NUUkxfUEtDUzdfU0lHTiwgMSwgc2kpIDw9IDApCisJCXsKKwkJUEtDUzdlcnIoUEtDUzdfRl9QS0NTN19TSUdORVJfSU5GT19TSUdOLCBQS0NTN19SX0NUUkxfRVJST1IpOworCQlnb3RvIGVycjsKKwkJfQorCisJRVZQX01EX0NUWF9jbGVhbnVwKCZtY3R4KTsKKworCUFTTjFfU1RSSU5HX3NldDAoc2ktPmVuY19kaWdlc3QsIGFidWYsIHNpZ2xlbik7CisKKwlyZXR1cm4gMTsKKworCWVycjoKKwlpZiAoYWJ1ZikKKwkJT1BFTlNTTF9mcmVlKGFidWYpOworCUVWUF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7CisJcmV0dXJuIDA7CisKKwl9CisKIGludCBQS0NTN19kYXRhVmVyaWZ5KFg1MDlfU1RPUkUgKmNlcnRfc3RvcmUsIFg1MDlfU1RPUkVfQ1RYICpjdHgsIEJJTyAqYmlvLAogCSAgICAgUEtDUzcgKnA3LCBQS0NTN19TSUdORVJfSU5GTyAqc2kpCiAJewpAQCAtOTIyLDcgKzEwMjQsOCBAQAogCWlmICgoc2sgIT0gTlVMTCkgJiYgKHNrX1g1MDlfQVRUUklCVVRFX251bShzaykgIT0gMCkpCiAJCXsKIAkJdW5zaWduZWQgY2hhciBtZF9kYXRbRVZQX01BWF9NRF9TSVpFXSwgKmFidWYgPSBOVUxMOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtZF9sZW4sIGFsZW47CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1kX2xlbjsKKwkJaW50IGFsZW47CiAJCUFTTjFfT0NURVRfU1RSSU5HICptZXNzYWdlX2RpZ2VzdDsKIAogCQlFVlBfRGlnZXN0RmluYWxfZXgoJm1kY190bXAsbWRfZGF0LCZtZF9sZW4pOwpAQCAtOTU0LDYgKzEwNTcsMTIgQEAKIAogCQlhbGVuID0gQVNOMV9pdGVtX2kyZCgoQVNOMV9WQUxVRSAqKXNrLCAmYWJ1ZiwKIAkJCQkJCUFTTjFfSVRFTV9ycHRyKFBLQ1M3X0FUVFJfVkVSSUZZKSk7CisJCWlmIChhbGVuIDw9IDApIAorCQkJeworCQkJUEtDUzdlcnIoUEtDUzdfRl9QS0NTN19TSUdOQVRVUkVWRVJJRlksRVJSX1JfQVNOMV9MSUIpOworCQkJcmV0ID0gLTE7CisJCQlnb3RvIGVycjsKKwkJCX0KIAkJRVZQX1ZlcmlmeVVwZGF0ZSgmbWRjX3RtcCwgYWJ1ZiwgYWxlbik7CiAKIAkJT1BFTlNTTF9mcmVlKGFidWYpOwpAQCAtOTY2LDEyICsxMDc1LDYgQEAKIAkJcmV0ID0gLTE7CiAJCWdvdG8gZXJyOwogCQl9Ci0jaWZuZGVmIE9QRU5TU0xfTk9fRFNBCi0JaWYocGtleS0+dHlwZSA9PSBFVlBfUEtFWV9EU0EpIG1kY190bXAuZGlnZXN0PUVWUF9kc3MxKCk7Ci0jZW5kaWYKLSNpZm5kZWYgT1BFTlNTTF9OT19FQ0RTQQotCWlmIChwa2V5LT50eXBlID09IEVWUF9QS0VZX0VDKSBtZGNfdG1wLmRpZ2VzdD1FVlBfZWNkc2EoKTsKLSNlbmRpZgogCiAJaT1FVlBfVmVyaWZ5RmluYWwoJm1kY190bXAsb3MtPmRhdGEsb3MtPmxlbmd0aCwgcGtleSk7CiAJRVZQX1BLRVlfZnJlZShwa2V5KTsKQEAgLTExMDcsOCArMTIxMCw5IEBACiAKIAlpZiAoKnNrID09IE5VTEwpCiAJCXsKLQkJaWYgKCEoKnNrID0gc2tfWDUwOV9BVFRSSUJVVEVfbmV3X251bGwoKSkpCi0JCQlyZXR1cm4gMDsKKwkJKnNrID0gc2tfWDUwOV9BVFRSSUJVVEVfbmV3X251bGwoKTsKKwkJaWYgKCpzayA9PSBOVUxMKQorCQkJcmV0dXJuIDA7CQogbmV3X2F0dHJpYjoKIAkJaWYgKCEoYXR0cj1YNTA5X0FUVFJJQlVURV9jcmVhdGUobmlkLGF0cnR5cGUsdmFsdWUpKSkKIAkJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3BrY3M3L3BrN19saWIuYyBiL2NyeXB0by9wa2NzNy9wazdfbGliLmMKaW5kZXggZjI0OTA5NC4uM2NhMDk1MiAxMDA2NDQKLS0tIGEvY3J5cHRvL3BrY3M3L3BrN19saWIuYworKysgYi9jcnlwdG8vcGtjczcvcGs3X2xpYi5jCkBAIC02MCw2ICs2MCw3IEBACiAjaW5jbHVkZSAiY3J5cHRsaWIuaCIKICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KICNpbmNsdWRlIDxvcGVuc3NsL3g1MDkuaD4KKyNpbmNsdWRlICJhc24xX2xvY2wuaCIKIAogbG9uZyBQS0NTN19jdHJsKFBLQ1M3ICpwNywgaW50IGNtZCwgbG9uZyBsYXJnLCBjaGFyICpwYXJnKQogCXsKQEAgLTMxNCw3ICszMTUsNyBAQAogCQkqc2s9c2tfWDUwOV9uZXdfbnVsbCgpOwogCWlmICgqc2sgPT0gTlVMTCkKIAkJewotCQlQS0NTN2VycihQS0NTN19GX1BLQ1M3X0FERF9DRVJUSUZJQ0FURSxFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CisJCVBLQ1M3ZXJyKFBLQ1M3X0ZfUEtDUzdfQUREX0NFUlRJRklDQVRFLCBFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CiAJCXJldHVybiAwOwogCQl9CiAJQ1JZUFRPX2FkZCgmeDUwOS0+cmVmZXJlbmNlcywxLENSWVBUT19MT0NLX1g1MDkpOwpAQCAtMzY1LDEzICszNjYsOCBAQAogaW50IFBLQ1M3X1NJR05FUl9JTkZPX3NldChQS0NTN19TSUdORVJfSU5GTyAqcDdpLCBYNTA5ICp4NTA5LCBFVlBfUEtFWSAqcGtleSwKIAkgICAgIGNvbnN0IEVWUF9NRCAqZGdzdCkKIAl7Ci0JaW50IG5pZDsKLQljaGFyIGlzX2RzYTsKKwlpbnQgcmV0OwogCi0JaWYgKHBrZXktPnR5cGUgPT0gRVZQX1BLRVlfRFNBIHx8IHBrZXktPnR5cGUgPT0gRVZQX1BLRVlfRUMpCi0JCWlzX2RzYSA9IDE7Ci0JZWxzZQotCQlpc19kc2EgPSAwOwogCS8qIFdlIG5vdyBuZWVkIHRvIGFkZCBhbm90aGVyIFBLQ1M3X1NJR05FUl9JTkZPIGVudHJ5ICovCiAJaWYgKCFBU04xX0lOVEVHRVJfc2V0KHA3aS0+dmVyc2lvbiwxKSkKIAkJZ290byBlcnI7CkBAIC0zOTEsNjUgKzM4Nyw1NSBAQAogCXA3aS0+cGtleT1wa2V5OwogCiAJLyogU2V0IHRoZSBhbGdvcml0aG1zICovCi0JaWYgKGlzX2RzYSkgcDdpLT5kaWdlc3RfYWxnLT5hbGdvcml0aG09T0JKX25pZDJvYmooTklEX3NoYTEpOwotCWVsc2UJCi0JCXA3aS0+ZGlnZXN0X2FsZy0+YWxnb3JpdGhtPU9CSl9uaWQyb2JqKEVWUF9NRF90eXBlKGRnc3QpKTsKIAotCWlmIChwN2ktPmRpZ2VzdF9hbGctPnBhcmFtZXRlciAhPSBOVUxMKQotCQlBU04xX1RZUEVfZnJlZShwN2ktPmRpZ2VzdF9hbGctPnBhcmFtZXRlcik7Ci0JaWYgKChwN2ktPmRpZ2VzdF9hbGctPnBhcmFtZXRlcj1BU04xX1RZUEVfbmV3KCkpID09IE5VTEwpCi0JCWdvdG8gZXJyOwotCXA3aS0+ZGlnZXN0X2FsZy0+cGFyYW1ldGVyLT50eXBlPVZfQVNOMV9OVUxMOworCVg1MDlfQUxHT1Jfc2V0MChwN2ktPmRpZ2VzdF9hbGcsIE9CSl9uaWQyb2JqKEVWUF9NRF90eXBlKGRnc3QpKSwKKwkJCQlWX0FTTjFfTlVMTCwgTlVMTCk7CiAKLQlpZiAocDdpLT5kaWdlc3RfZW5jX2FsZy0+cGFyYW1ldGVyICE9IE5VTEwpCi0JCUFTTjFfVFlQRV9mcmVlKHA3aS0+ZGlnZXN0X2VuY19hbGctPnBhcmFtZXRlcik7Ci0JbmlkID0gRVZQX1BLRVlfdHlwZShwa2V5LT50eXBlKTsKLQlpZiAobmlkID09IEVWUF9QS0VZX1JTQSkKKwlpZiAocGtleS0+YW1ldGggJiYgcGtleS0+YW1ldGgtPnBrZXlfY3RybCkKIAkJewotCQlwN2ktPmRpZ2VzdF9lbmNfYWxnLT5hbGdvcml0aG09T0JKX25pZDJvYmooTklEX3JzYUVuY3J5cHRpb24pOwotCQlpZiAoIShwN2ktPmRpZ2VzdF9lbmNfYWxnLT5wYXJhbWV0ZXI9QVNOMV9UWVBFX25ldygpKSkKLQkJCWdvdG8gZXJyOwotCQlwN2ktPmRpZ2VzdF9lbmNfYWxnLT5wYXJhbWV0ZXItPnR5cGU9Vl9BU04xX05VTEw7CisJCXJldCA9IHBrZXktPmFtZXRoLT5wa2V5X2N0cmwocGtleSwgQVNOMV9QS0VZX0NUUkxfUEtDUzdfU0lHTiwKKwkJCQkJCTAsIHA3aSk7CisJCWlmIChyZXQgPiAwKQorCQkJcmV0dXJuIDE7CisJCWlmIChyZXQgIT0gLTIpCisJCQl7CisJCQlQS0NTN2VycihQS0NTN19GX1BLQ1M3X1NJR05FUl9JTkZPX1NFVCwKKwkJCQkJUEtDUzdfUl9TSUdOSU5HX0NUUkxfRkFJTFVSRSk7CisJCQlyZXR1cm4gMDsKKwkJCX0KIAkJfQotCWVsc2UgaWYgKG5pZCA9PSBFVlBfUEtFWV9EU0EpCi0JCXsKLSNpZiAxCi0JCS8qIHVzZSAnZHNhRW5jcnlwdGlvbicgT0lEIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgc29mdHdhcmUKLQkJICogKFBLQ1MgIzcgdjEuNSBkb2VzIHNwZWNpZnkgaG93IHRvIGhhbmRsZSBEU0EpIC4uLiAqLwotCQlwN2ktPmRpZ2VzdF9lbmNfYWxnLT5hbGdvcml0aG09T0JKX25pZDJvYmooTklEX2RzYSk7Ci0jZWxzZQotCQkvKiAuLi4gYWx0aG91Z2ggdGhlICdkc2FXaXRoU0hBMScgT0lEIChhcyByZXF1aXJlZCBieSBSRkMgMjYzMCBmb3IgQ01TKQotCQkgKiB3b3VsZCBtYWtlIG1vcmUgc2Vuc2UuICovCi0JCXA3aS0+ZGlnZXN0X2VuY19hbGctPmFsZ29yaXRobT1PQkpfbmlkMm9iaihOSURfZHNhV2l0aFNIQTEpOwotI2VuZGlmCi0JCXA3aS0+ZGlnZXN0X2VuY19hbGctPnBhcmFtZXRlciA9IE5VTEw7IC8qIHNwZWNpYWwgY2FzZSBmb3IgRFNBOiBvbWl0ICdwYXJhbWV0ZXInISAqLwotCQl9Ci0JZWxzZSBpZiAobmlkID09IEVWUF9QS0VZX0VDKQotCQl7Ci0JCXA3aS0+ZGlnZXN0X2VuY19hbGctPmFsZ29yaXRobT1PQkpfbmlkMm9iaihOSURfZWNkc2Ffd2l0aF9TSEExKTsKLQkJaWYgKCEocDdpLT5kaWdlc3RfZW5jX2FsZy0+cGFyYW1ldGVyPUFTTjFfVFlQRV9uZXcoKSkpCi0JCQlnb3RvIGVycjsKLQkJcDdpLT5kaWdlc3RfZW5jX2FsZy0+cGFyYW1ldGVyLT50eXBlPVZfQVNOMV9OVUxMOwotCQl9Ci0JZWxzZQotCQlyZXR1cm4oMCk7Ci0KLQlyZXR1cm4oMSk7CisJUEtDUzdlcnIoUEtDUzdfRl9QS0NTN19TSUdORVJfSU5GT19TRVQsCisJCQlQS0NTN19SX1NJR05JTkdfTk9UX1NVUFBPUlRFRF9GT1JfVEhJU19LRVlfVFlQRSk7CiBlcnI6Ci0JcmV0dXJuKDApOworCXJldHVybiAwOwogCX0KIAogUEtDUzdfU0lHTkVSX0lORk8gKlBLQ1M3X2FkZF9zaWduYXR1cmUoUEtDUzcgKnA3LCBYNTA5ICp4NTA5LCBFVlBfUEtFWSAqcGtleSwKIAkgICAgIGNvbnN0IEVWUF9NRCAqZGdzdCkKIAl7Ci0JUEtDUzdfU0lHTkVSX0lORk8gKnNpOworCVBLQ1M3X1NJR05FUl9JTkZPICpzaSA9IE5VTEw7CisKKwlpZiAoZGdzdCA9PSBOVUxMKQorCQl7CisJCWludCBkZWZfbmlkOworCQlpZiAoRVZQX1BLRVlfZ2V0X2RlZmF1bHRfZGlnZXN0X25pZChwa2V5LCAmZGVmX25pZCkgPD0gMCkKKwkJCWdvdG8gZXJyOworCQlkZ3N0ID0gRVZQX2dldF9kaWdlc3RieW5pZChkZWZfbmlkKTsKKwkJaWYgKGRnc3QgPT0gTlVMTCkKKwkJCXsKKwkJCVBLQ1M3ZXJyKFBLQ1M3X0ZfUEtDUzdfQUREX1NJR05BVFVSRSwKKwkJCQkJCVBLQ1M3X1JfTk9fREVGQVVMVF9ESUdFU1QpOworCQkJZ290byBlcnI7CisJCQl9CisJCX0KIAogCWlmICgoc2k9UEtDUzdfU0lHTkVSX0lORk9fbmV3KCkpID09IE5VTEwpIGdvdG8gZXJyOwogCWlmICghUEtDUzdfU0lHTkVSX0lORk9fc2V0KHNpLHg1MDkscGtleSxkZ3N0KSkgZ290byBlcnI7CiAJaWYgKCFQS0NTN19hZGRfc2lnbmVyKHA3LHNpKSkgZ290byBlcnI7CiAJcmV0dXJuKHNpKTsKIGVycjoKLQlQS0NTN19TSUdORVJfSU5GT19mcmVlKHNpKTsKKwlpZiAoc2kpCisJCVBLQ1M3X1NJR05FUl9JTkZPX2ZyZWUoc2kpOwogCXJldHVybihOVUxMKTsKIAl9CiAKQEAgLTQ4NSw2ICs0NzEsMjMgQEAKIAkJcmV0dXJuKE5VTEwpOwogCX0KIAordm9pZCBQS0NTN19TSUdORVJfSU5GT19nZXQwX2FsZ3MoUEtDUzdfU0lHTkVSX0lORk8gKnNpLCBFVlBfUEtFWSAqKnBrLAorCQkJCQlYNTA5X0FMR09SICoqcGRpZywgWDUwOV9BTEdPUiAqKnBzaWcpCisJeworCWlmIChwaykKKwkJKnBrID0gc2ktPnBrZXk7CisJaWYgKHBkaWcpCisJCSpwZGlnID0gc2ktPmRpZ2VzdF9hbGc7CisJaWYgKHBzaWcpCisJCSpwc2lnID0gc2ktPmRpZ2VzdF9lbmNfYWxnOworCX0KKwordm9pZCBQS0NTN19SRUNJUF9JTkZPX2dldDBfYWxnKFBLQ1M3X1JFQ0lQX0lORk8gKnJpLCBYNTA5X0FMR09SICoqcGVuYykKKwl7CisJaWYgKHBlbmMpCisJCSpwZW5jID0gcmktPmtleV9lbmNfYWxnb3I7CisJfQorCiBQS0NTN19SRUNJUF9JTkZPICpQS0NTN19hZGRfcmVjaXBpZW50KFBLQ1M3ICpwNywgWDUwOSAqeDUwOSkKIAl7CiAJUEtDUzdfUkVDSVBfSU5GTyAqcmk7CkBAIC00OTIsMTAgKzQ5NSwxMSBAQAogCWlmICgocmk9UEtDUzdfUkVDSVBfSU5GT19uZXcoKSkgPT0gTlVMTCkgZ290byBlcnI7CiAJaWYgKCFQS0NTN19SRUNJUF9JTkZPX3NldChyaSx4NTA5KSkgZ290byBlcnI7CiAJaWYgKCFQS0NTN19hZGRfcmVjaXBpZW50X2luZm8ocDcscmkpKSBnb3RvIGVycjsKLQlyZXR1cm4ocmkpOworCXJldHVybiByaTsKIGVycjoKLQlQS0NTN19SRUNJUF9JTkZPX2ZyZWUocmkpOwotCXJldHVybihOVUxMKTsKKwlpZiAocmkpCisJCVBLQ1M3X1JFQ0lQX0lORk9fZnJlZShyaSk7CisJcmV0dXJuIE5VTEw7CiAJfQogCiBpbnQgUEtDUzdfYWRkX3JlY2lwaWVudF9pbmZvKFBLQ1M3ICpwNywgUEtDUzdfUkVDSVBfSU5GTyAqcmkpCkBAIC01MjQsNiArNTI4LDggQEAKIAogaW50IFBLQ1M3X1JFQ0lQX0lORk9fc2V0KFBLQ1M3X1JFQ0lQX0lORk8gKnA3aSwgWDUwOSAqeDUwOSkKIAl7CisJaW50IHJldDsKKwlFVlBfUEtFWSAqcGtleSA9IE5VTEw7CiAJaWYgKCFBU04xX0lOVEVHRVJfc2V0KHA3aS0+dmVyc2lvbiwwKSkKIAkJcmV0dXJuIDA7CiAJaWYgKCFYNTA5X05BTUVfc2V0KCZwN2ktPmlzc3Vlcl9hbmRfc2VyaWFsLT5pc3N1ZXIsCkBAIC01MzUsMTQgKzU0MSw0MSBAQAogCQlNX0FTTjFfSU5URUdFUl9kdXAoWDUwOV9nZXRfc2VyaWFsTnVtYmVyKHg1MDkpKSkpCiAJCXJldHVybiAwOwogCi0JWDUwOV9BTEdPUl9mcmVlKHA3aS0+a2V5X2VuY19hbGdvcik7Ci0JaWYgKCEocDdpLT5rZXlfZW5jX2FsZ29yPSBYNTA5X0FMR09SX2R1cCh4NTA5LT5jZXJ0X2luZm8tPmtleS0+YWxnb3IpKSkKLQkJcmV0dXJuIDA7CisJcGtleSA9IFg1MDlfZ2V0X3B1YmtleSh4NTA5KTsKKworCWlmICghcGtleSB8fCAhcGtleS0+YW1ldGggfHwgIXBrZXktPmFtZXRoLT5wa2V5X2N0cmwpCisJCXsKKwkJUEtDUzdlcnIoUEtDUzdfRl9QS0NTN19SRUNJUF9JTkZPX1NFVCwKKwkJCVBLQ1M3X1JfRU5DUllQVElPTl9OT1RfU1VQUE9SVEVEX0ZPUl9USElTX0tFWV9UWVBFKTsKKwkJZ290byBlcnI7CisJCX0KKworCXJldCA9IHBrZXktPmFtZXRoLT5wa2V5X2N0cmwocGtleSwgQVNOMV9QS0VZX0NUUkxfUEtDUzdfRU5DUllQVCwKKwkJCQkJCTAsIHA3aSk7CisJaWYgKHJldCA9PSAtMikKKwkJeworCQlQS0NTN2VycihQS0NTN19GX1BLQ1M3X1JFQ0lQX0lORk9fU0VULAorCQkJUEtDUzdfUl9FTkNSWVBUSU9OX05PVF9TVVBQT1JURURfRk9SX1RISVNfS0VZX1RZUEUpOworCQlnb3RvIGVycjsKKwkJfQorCWlmIChyZXQgPD0gMCkKKwkJeworCQlQS0NTN2VycihQS0NTN19GX1BLQ1M3X1JFQ0lQX0lORk9fU0VULAorCQkJCVBLQ1M3X1JfRU5DUllQVElPTl9DVFJMX0ZBSUxVUkUpOworCQlnb3RvIGVycjsKKwkJfQorCisJRVZQX1BLRVlfZnJlZShwa2V5KTsKIAogCUNSWVBUT19hZGQoJng1MDktPnJlZmVyZW5jZXMsMSxDUllQVE9fTE9DS19YNTA5KTsKIAlwN2ktPmNlcnQ9eDUwOTsKIAotCXJldHVybigxKTsKKwlyZXR1cm4gMTsKKworCWVycjoKKwlpZiAocGtleSkKKwkJRVZQX1BLRVlfZnJlZShwa2V5KTsKKwlyZXR1cm4gMDsKIAl9CiAKIFg1MDkgKlBLQ1M3X2NlcnRfZnJvbV9zaWduZXJfaW5mbyhQS0NTNyAqcDcsIFBLQ1M3X1NJR05FUl9JTkZPICpzaSkKQEAgLTU4NywzICs2MjAsNDggQEAKIAlyZXR1cm4gMTsKIAl9CiAKK2ludCBQS0NTN19zdHJlYW0odW5zaWduZWQgY2hhciAqKipib3VuZGFyeSwgUEtDUzcgKnA3KQorCXsKKwlBU04xX09DVEVUX1NUUklORyAqb3MgPSBOVUxMOworCisJc3dpdGNoIChPQkpfb2JqMm5pZChwNy0+dHlwZSkpCisJCXsKKwkJY2FzZSBOSURfcGtjczdfZGF0YToKKwkJb3MgPSBwNy0+ZC5kYXRhOworCQlicmVhazsKKworCQljYXNlIE5JRF9wa2NzN19zaWduZWRBbmRFbnZlbG9wZWQ6CisJCW9zID0gcDctPmQuc2lnbmVkX2FuZF9lbnZlbG9wZWQtPmVuY19kYXRhLT5lbmNfZGF0YTsKKwkJaWYgKG9zID09IE5VTEwpCisJCQl7CisJCQlvcz1NX0FTTjFfT0NURVRfU1RSSU5HX25ldygpOworCQkJcDctPmQuc2lnbmVkX2FuZF9lbnZlbG9wZWQtPmVuY19kYXRhLT5lbmNfZGF0YT1vczsKKwkJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBOSURfcGtjczdfZW52ZWxvcGVkOgorCQlvcyA9IHA3LT5kLmVudmVsb3BlZC0+ZW5jX2RhdGEtPmVuY19kYXRhOworCQlpZiAob3MgPT0gTlVMTCkKKwkJCXsKKwkJCW9zPU1fQVNOMV9PQ1RFVF9TVFJJTkdfbmV3KCk7CisJCQlwNy0+ZC5lbnZlbG9wZWQtPmVuY19kYXRhLT5lbmNfZGF0YT1vczsKKwkJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBOSURfcGtjczdfc2lnbmVkOgorCQlvcz1wNy0+ZC5zaWduLT5jb250ZW50cy0+ZC5kYXRhOworCQlicmVhazsKKworCQlkZWZhdWx0OgorCQlvcyA9IE5VTEw7CisJCWJyZWFrOworCQl9CisJCisJaWYgKG9zID09IE5VTEwpCisJCXJldHVybiAwOworCisJb3MtPmZsYWdzIHw9IEFTTjFfU1RSSU5HX0ZMQUdfTkRFRjsKKwkqYm91bmRhcnkgPSAmb3MtPmRhdGE7CisKKwlyZXR1cm4gMTsKKwl9CmRpZmYgLS1naXQgYS9jcnlwdG8vcGtjczcvcGs3X21pbWUuYyBiL2NyeXB0by9wa2NzNy9wazdfbWltZS5jCmluZGV4IDc3NjJkNjQuLjkzOGY3OWEgMTAwNjQ0Ci0tLSBhL2NyeXB0by9wa2NzNy9wazdfbWltZS5jCisrKyBiL2NyeXB0by9wa2NzNy9wazdfbWltZS5jCkBAIC01OSw1NyArNTksMTkgQEAKICNpbmNsdWRlIDxvcGVuc3NsL3g1MDkuaD4KICNpbmNsdWRlIDxvcGVuc3NsL2FzbjEuaD4KIAotLyogUEtDUyM3IHdyYXBwZXJzIHJvdW5kIGdlbmVyYWxpc2VkIE1JTUUgcm91dGluZXMgKi8KKy8qIFBLQ1MjNyB3cmFwcGVycyByb3VuZCBnZW5lcmFsaXNlZCBzdHJlYW0gYW5kIE1JTUUgcm91dGluZXMgKi8KIAotUEtDUzcgKlNNSU1FX3JlYWRfUEtDUzcoQklPICpiaW8sIEJJTyAqKmJjb250KQoraW50IGkyZF9QS0NTN19iaW9fc3RyZWFtKEJJTyAqb3V0LCBQS0NTNyAqcDcsIEJJTyAqaW4sIGludCBmbGFncykKIAl7Ci0JcmV0dXJuIChQS0NTNyAqKVNNSU1FX3JlYWRfQVNOMShiaW8sIGJjb250LCBBU04xX0lURU1fcnB0cihQS0NTNykpOworCXJldHVybiBpMmRfQVNOMV9iaW9fc3RyZWFtKG91dCwgKEFTTjFfVkFMVUUgKilwNywgaW4sIGZsYWdzLAorCQkJCQlBU04xX0lURU1fcnB0cihQS0NTNykpOwogCX0KIAotLyogQ2FsbGJhY2sgZm9yIGludF9zbWltZV93cml0ZV9BU04xICovCi0KLXN0YXRpYyBpbnQgcGs3X291dHB1dF9kYXRhKEJJTyAqb3V0LCBCSU8gKmRhdGEsIEFTTjFfVkFMVUUgKnZhbCwgaW50IGZsYWdzLAotCQkJCQljb25zdCBBU04xX0lURU0gKml0KQoraW50IFBFTV93cml0ZV9iaW9fUEtDUzdfc3RyZWFtKEJJTyAqb3V0LCBQS0NTNyAqcDcsIEJJTyAqaW4sIGludCBmbGFncykKIAl7Ci0JUEtDUzcgKnA3ID0gKFBLQ1M3ICopdmFsOwotCUJJTyAqdG1wYmlvLCAqcDdiaW87Ci0JaW50IHIgPSAwOwotCi0JaWYgKCEoZmxhZ3MgJiBTTUlNRV9ERVRBQ0hFRCkpCi0JCXsKLQkJU01JTUVfY3JsZl9jb3B5KGRhdGEsIG91dCwgZmxhZ3MpOwotCQlyZXR1cm4gMTsKLQkJfQotCi0JLyogTGV0IFBLQ1M3IGNvZGUgcHJlcGVuZCBhbnkgbmVlZGVkIEJJT3MgKi8KLQotCXA3YmlvID0gUEtDUzdfZGF0YUluaXQocDcsIG91dCk7Ci0KLQlpZiAoIXA3YmlvKQotCQlyZXR1cm4gMDsKLQotCS8qIENvcHkgZGF0YSBhY3Jvc3MsIHBhc3NpbmcgdGhyb3VnaCBmaWx0ZXIgQklPcyBmb3IgcHJvY2Vzc2luZyAqLwotCVNNSU1FX2NybGZfY29weShkYXRhLCBwN2JpbywgZmxhZ3MpOwotCi0JLyogRmluYWxpemUgc3RydWN0dXJlICovCi0JaWYgKFBLQ1M3X2RhdGFGaW5hbChwNywgcDdiaW8pIDw9IDApCi0JCWdvdG8gZXJyOwotCi0JciA9IDE7Ci0KLQllcnI6Ci0KLQkvKiBOb3cgcmVtb3ZlIGFueSBkaWdlc3RzIHByZXBlbmRlZCB0byB0aGUgQklPICovCi0KLQl3aGlsZSAocDdiaW8gIT0gb3V0KQotCQl7Ci0JCXRtcGJpbyA9IEJJT19wb3AocDdiaW8pOwotCQlCSU9fZnJlZShwN2Jpbyk7Ci0JCXA3YmlvID0gdG1wYmlvOwotCQl9Ci0KLQlyZXR1cm4gMTsKLQorCXJldHVybiBQRU1fd3JpdGVfYmlvX0FTTjFfc3RyZWFtKG91dCwgKEFTTjFfVkFMVUUgKikgcDcsIGluLCBmbGFncywKKwkJCQkJCSJQS0NTNyIsCisJCQkJCQlBU04xX0lURU1fcnB0cihQS0NTNykpOwogCX0KIAogaW50IFNNSU1FX3dyaXRlX1BLQ1M3KEJJTyAqYmlvLCBQS0NTNyAqcDcsIEJJTyAqZGF0YSwgaW50IGZsYWdzKQpAQCAtMTIxLDggKzgzLDE1IEBACiAJZWxzZQogCQltZGFsZ3MgPSBOVUxMOwogCi0JcmV0dXJuIGludF9zbWltZV93cml0ZV9BU04xKGJpbywgKEFTTjFfVkFMVUUgKilwNywgZGF0YSwgZmxhZ3MsCisJZmxhZ3MgXj0gU01JTUVfT0xETUlNRTsKKworCisJcmV0dXJuIFNNSU1FX3dyaXRlX0FTTjEoYmlvLCAoQVNOMV9WQUxVRSAqKXA3LCBkYXRhLCBmbGFncywKIAkJCQkJY3R5cGVfbmlkLCBOSURfdW5kZWYsIG1kYWxncywKLQkJCQkJcGs3X291dHB1dF9kYXRhLAogCQkJCQlBU04xX0lURU1fcnB0cihQS0NTNykpOwkKIAl9CisKK1BLQ1M3ICpTTUlNRV9yZWFkX1BLQ1M3KEJJTyAqYmlvLCBCSU8gKipiY29udCkKKwl7CisJcmV0dXJuIChQS0NTNyAqKVNNSU1FX3JlYWRfQVNOMShiaW8sIGJjb250LCBBU04xX0lURU1fcnB0cihQS0NTNykpOworCX0KZGlmZiAtLWdpdCBhL2NyeXB0by9wa2NzNy9wazdfc21pbWUuYyBiL2NyeXB0by9wa2NzNy9wazdfc21pbWUuYwppbmRleCBmZDE4ZWMzLi44Njc0MmQwIDEwMDY0NAotLS0gYS9jcnlwdG8vcGtjczcvcGs3X3NtaW1lLmMKKysrIGIvY3J5cHRvL3BrY3M3L3BrN19zbWltZS5jCkBAIC02MywyNCArNjMsMTkgQEAKICNpbmNsdWRlIDxvcGVuc3NsL3g1MDkuaD4KICNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgogCitzdGF0aWMgaW50IHBrY3M3X2NvcHlfZXhpc3RpbmdfZGlnZXN0KFBLQ1M3ICpwNywgUEtDUzdfU0lHTkVSX0lORk8gKnNpKTsKKwogUEtDUzcgKlBLQ1M3X3NpZ24oWDUwOSAqc2lnbmNlcnQsIEVWUF9QS0VZICpwa2V5LCBTVEFDS19PRihYNTA5KSAqY2VydHMsCiAJCSAgQklPICpkYXRhLCBpbnQgZmxhZ3MpCiB7Ci0JUEtDUzcgKnA3ID0gTlVMTDsKLQlQS0NTN19TSUdORVJfSU5GTyAqc2k7Ci0JQklPICpwN2JpbyA9IE5VTEw7Ci0JU1RBQ0tfT0YoWDUwOV9BTEdPUikgKnNtY2FwID0gTlVMTDsKKwlQS0NTNyAqcDc7CiAJaW50IGk7CiAKLQlpZighWDUwOV9jaGVja19wcml2YXRlX2tleShzaWduY2VydCwgcGtleSkpIHsKLQkJUEtDUzdlcnIoUEtDUzdfRl9QS0NTN19TSUdOLFBLQ1M3X1JfUFJJVkFURV9LRVlfRE9FU19OT1RfTUFUQ0hfQ0VSVElGSUNBVEUpOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotCX0KLQotCWlmKCEocDcgPSBQS0NTN19uZXcoKSkpIHsKKwlpZighKHA3ID0gUEtDUzdfbmV3KCkpKQorCQl7CiAJCVBLQ1M3ZXJyKFBLQ1M3X0ZfUEtDUzdfU0lHTixFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CiAJCXJldHVybiBOVUxMOwotCX0KKwkJfQogCiAJaWYgKCFQS0NTN19zZXRfdHlwZShwNywgTklEX3BrY3M3X3NpZ25lZCkpCiAJCWdvdG8gZXJyOwpAQCAtODgsODMgKzgzLDE4NiBAQAogCWlmICghUEtDUzdfY29udGVudF9uZXcocDcsIE5JRF9wa2NzN19kYXRhKSkKIAkJZ290byBlcnI7CiAKLQlpZiAoIShzaSA9IFBLQ1M3X2FkZF9zaWduYXR1cmUocDcsc2lnbmNlcnQscGtleSxFVlBfc2hhMSgpKSkpIHsKLQkJUEtDUzdlcnIoUEtDUzdfRl9QS0NTN19TSUdOLFBLQ1M3X1JfUEtDUzdfQUREX1NJR05BVFVSRV9FUlJPUik7CisgICAgCWlmIChwa2V5ICYmICFQS0NTN19zaWduX2FkZF9zaWduZXIocDcsIHNpZ25jZXJ0LCBwa2V5LCBOVUxMLCBmbGFncykpCisJCXsKKwkJUEtDUzdlcnIoUEtDUzdfRl9QS0NTN19TSUdOLFBLQ1M3X1JfUEtDUzdfQUREX1NJR05FUl9FUlJPUik7CiAJCWdvdG8gZXJyOwotCX0KKwkJfQogCi0JaWYoIShmbGFncyAmIFBLQ1M3X05PQ0VSVFMpKSB7Ci0JCWlmICghUEtDUzdfYWRkX2NlcnRpZmljYXRlKHA3LCBzaWduY2VydCkpCi0JCQlnb3RvIGVycjsKLQkJaWYoY2VydHMpIGZvcihpID0gMDsgaSA8IHNrX1g1MDlfbnVtKGNlcnRzKTsgaSsrKQorCWlmKCEoZmxhZ3MgJiBQS0NTN19OT0NFUlRTKSkKKwkJeworCQlmb3IoaSA9IDA7IGkgPCBza19YNTA5X251bShjZXJ0cyk7IGkrKykKKwkJCXsKIAkJCWlmICghUEtDUzdfYWRkX2NlcnRpZmljYXRlKHA3LCBza19YNTA5X3ZhbHVlKGNlcnRzLCBpKSkpCiAJCQkJZ290byBlcnI7Ci0JfQotCi0JaWYoIShmbGFncyAmIFBLQ1M3X05PQVRUUikpIHsKLQkJaWYgKCFQS0NTN19hZGRfc2lnbmVkX2F0dHJpYnV0ZShzaSwgTklEX3BrY3M5X2NvbnRlbnRUeXBlLAotCQkJCVZfQVNOMV9PQkpFQ1QsIE9CSl9uaWQyb2JqKE5JRF9wa2NzN19kYXRhKSkpCi0JCQlnb3RvIGVycjsKLQkJLyogQWRkIFNNSU1FQ2FwYWJpbGl0aWVzICovCi0JCWlmKCEoZmxhZ3MgJiBQS0NTN19OT1NNSU1FQ0FQKSkKLQkJewotCQlpZighKHNtY2FwID0gc2tfWDUwOV9BTEdPUl9uZXdfbnVsbCgpKSkgewotCQkJUEtDUzdlcnIoUEtDUzdfRl9QS0NTN19TSUdOLEVSUl9SX01BTExPQ19GQUlMVVJFKTsKLQkJCWdvdG8gZXJyOworCQkJfQogCQl9Ci0jaWZuZGVmIE9QRU5TU0xfTk9fREVTCi0JCWlmICghUEtDUzdfc2ltcGxlX3NtaW1lY2FwIChzbWNhcCwgTklEX2Rlc19lZGUzX2NiYywgLTEpKQotCQkJZ290byBlcnI7Ci0jZW5kaWYKLSNpZm5kZWYgT1BFTlNTTF9OT19SQzIKLQkJaWYgKCFQS0NTN19zaW1wbGVfc21pbWVjYXAgKHNtY2FwLCBOSURfcmMyX2NiYywgMTI4KSkKLQkJCWdvdG8gZXJyOwotCQlpZiAoIVBLQ1M3X3NpbXBsZV9zbWltZWNhcCAoc21jYXAsIE5JRF9yYzJfY2JjLCA2NCkpCi0JCQlnb3RvIGVycjsKLSNlbmRpZgotI2lmbmRlZiBPUEVOU1NMX05PX0RFUwotCQlpZiAoIVBLQ1M3X3NpbXBsZV9zbWltZWNhcCAoc21jYXAsIE5JRF9kZXNfY2JjLCAtMSkpCi0JCQlnb3RvIGVycjsKLSNlbmRpZgotI2lmbmRlZiBPUEVOU1NMX05PX1JDMgotCQlpZiAoIVBLQ1M3X3NpbXBsZV9zbWltZWNhcCAoc21jYXAsIE5JRF9yYzJfY2JjLCA0MCkpCi0JCQlnb3RvIGVycjsKLSNlbmRpZgotCQlpZiAoIVBLQ1M3X2FkZF9hdHRyaWJfc21pbWVjYXAgKHNpLCBzbWNhcCkpCi0JCQlnb3RvIGVycjsKLQkJc2tfWDUwOV9BTEdPUl9wb3BfZnJlZShzbWNhcCwgWDUwOV9BTEdPUl9mcmVlKTsKLQkJc21jYXAgPSBOVUxMOwotCQl9Ci0JfQogCi0JaWYoZmxhZ3MgJiBQS0NTN19ERVRBQ0hFRClQS0NTN19zZXRfZGV0YWNoZWQocDcsIDEpOworCWlmKGZsYWdzICYgUEtDUzdfREVUQUNIRUQpCisJCVBLQ1M3X3NldF9kZXRhY2hlZChwNywgMSk7CiAKLQlpZiAoZmxhZ3MgJiBQS0NTN19TVFJFQU0pCisJaWYgKGZsYWdzICYgKFBLQ1M3X1NUUkVBTXxQS0NTN19QQVJUSUFMKSkKIAkJcmV0dXJuIHA3OwogCisJaWYgKFBLQ1M3X2ZpbmFsKHA3LCBkYXRhLCBmbGFncykpCisJCXJldHVybiBwNzsKIAotCWlmICghKHA3YmlvID0gUEtDUzdfZGF0YUluaXQocDcsIE5VTEwpKSkgewotCQlQS0NTN2VycihQS0NTN19GX1BLQ1M3X1NJR04sRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwotCQlnb3RvIGVycjsKLQl9Ci0KLQlTTUlNRV9jcmxmX2NvcHkoZGF0YSwgcDdiaW8sIGZsYWdzKTsKLQotCi0JaWYgKCFQS0NTN19kYXRhRmluYWwocDcscDdiaW8pKSB7Ci0JCVBLQ1M3ZXJyKFBLQ1M3X0ZfUEtDUzdfU0lHTixQS0NTN19SX1BLQ1M3X0RBVEFTSUdOKTsKLQkJZ290byBlcnI7Ci0JfQotCi0JQklPX2ZyZWVfYWxsKHA3YmlvKTsKLQlyZXR1cm4gcDc7Ci1lcnI6Ci0Jc2tfWDUwOV9BTEdPUl9wb3BfZnJlZShzbWNhcCwgWDUwOV9BTEdPUl9mcmVlKTsKLQlCSU9fZnJlZV9hbGwocDdiaW8pOworCWVycjoKIAlQS0NTN19mcmVlKHA3KTsKIAlyZXR1cm4gTlVMTDsKIH0KIAoraW50IFBLQ1M3X2ZpbmFsKFBLQ1M3ICpwNywgQklPICpkYXRhLCBpbnQgZmxhZ3MpCisJeworCUJJTyAqcDdiaW87CisJaW50IHJldCA9IDA7CisJaWYgKCEocDdiaW8gPSBQS0NTN19kYXRhSW5pdChwNywgTlVMTCkpKQorCQl7CisJCVBLQ1M3ZXJyKFBLQ1M3X0ZfUEtDUzdfRklOQUwsRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOworCQlyZXR1cm4gMDsKKwkJfQorCisJU01JTUVfY3JsZl9jb3B5KGRhdGEsIHA3YmlvLCBmbGFncyk7CisKKwkodm9pZClCSU9fZmx1c2gocDdiaW8pOworCisKKyAgICAgICAgaWYgKCFQS0NTN19kYXRhRmluYWwocDcscDdiaW8pKQorCQl7CisJCVBLQ1M3ZXJyKFBLQ1M3X0ZfUEtDUzdfRklOQUwsUEtDUzdfUl9QS0NTN19EQVRBU0lHTik7CisJCWdvdG8gZXJyOworCQl9CisKKwlyZXQgPSAxOworCisJZXJyOgorCUJJT19mcmVlX2FsbChwN2Jpbyk7CisKKwlyZXR1cm4gcmV0OworCisJfQorCisvKiBDaGVjayB0byBzZWUgaWYgYSBjaXBoZXIgZXhpc3RzIGFuZCBpZiBzbyBhZGQgUy9NSU1FIGNhcGFiaWxpdGllcyAqLworCitzdGF0aWMgaW50IGFkZF9jaXBoZXJfc21jYXAoU1RBQ0tfT0YoWDUwOV9BTEdPUikgKnNrLCBpbnQgbmlkLCBpbnQgYXJnKQorCXsKKwlpZiAoRVZQX2dldF9jaXBoZXJieW5pZChuaWQpKQorCQlyZXR1cm4gUEtDUzdfc2ltcGxlX3NtaW1lY2FwKHNrLCBuaWQsIGFyZyk7CisJcmV0dXJuIDE7CisJfQorCitzdGF0aWMgaW50IGFkZF9kaWdlc3Rfc21jYXAoU1RBQ0tfT0YoWDUwOV9BTEdPUikgKnNrLCBpbnQgbmlkLCBpbnQgYXJnKQorCXsKKwlpZiAoRVZQX2dldF9kaWdlc3RieW5pZChuaWQpKQorCQlyZXR1cm4gUEtDUzdfc2ltcGxlX3NtaW1lY2FwKHNrLCBuaWQsIGFyZyk7CisJcmV0dXJuIDE7CisJfQorCitQS0NTN19TSUdORVJfSU5GTyAqUEtDUzdfc2lnbl9hZGRfc2lnbmVyKFBLQ1M3ICpwNywgWDUwOSAqc2lnbmNlcnQsCisJCQkJCUVWUF9QS0VZICpwa2V5LCBjb25zdCBFVlBfTUQgKm1kLAorCQkJCQlpbnQgZmxhZ3MpCisJeworCVBLQ1M3X1NJR05FUl9JTkZPICpzaSA9IE5VTEw7CisJU1RBQ0tfT0YoWDUwOV9BTEdPUikgKnNtY2FwID0gTlVMTDsKKwlpZighWDUwOV9jaGVja19wcml2YXRlX2tleShzaWduY2VydCwgcGtleSkpCisJCXsKKwkJUEtDUzdlcnIoUEtDUzdfRl9QS0NTN19TSUdOX0FERF9TSUdORVIsCisJCQlQS0NTN19SX1BSSVZBVEVfS0VZX0RPRVNfTk9UX01BVENIX0NFUlRJRklDQVRFKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKwkJfQorCisgICAgCWlmICghKHNpID0gUEtDUzdfYWRkX3NpZ25hdHVyZShwNyxzaWduY2VydCxwa2V5LCBtZCkpKQorCQl7CisJCVBLQ1M3ZXJyKFBLQ1M3X0ZfUEtDUzdfU0lHTl9BRERfU0lHTkVSLAorCQkJCVBLQ1M3X1JfUEtDUzdfQUREX1NJR05BVFVSRV9FUlJPUik7CisJCXJldHVybiBOVUxMOworCQl9CisKKwlpZighKGZsYWdzICYgUEtDUzdfTk9DRVJUUykpCisJCXsKKwkJaWYgKCFQS0NTN19hZGRfY2VydGlmaWNhdGUocDcsIHNpZ25jZXJ0KSkKKwkJCWdvdG8gZXJyOworCQl9CisKKwlpZighKGZsYWdzICYgUEtDUzdfTk9BVFRSKSkKKwkJeworCQlpZiAoIVBLQ1M3X2FkZF9hdHRyaWJfY29udGVudF90eXBlKHNpLCBOVUxMKSkKKwkJCWdvdG8gZXJyOworCQkvKiBBZGQgU01JTUVDYXBhYmlsaXRpZXMgKi8KKwkJaWYoIShmbGFncyAmIFBLQ1M3X05PU01JTUVDQVApKQorCQkJeworCQkJaWYoIShzbWNhcCA9IHNrX1g1MDlfQUxHT1JfbmV3X251bGwoKSkpCisJCQkJeworCQkJCVBLQ1M3ZXJyKFBLQ1M3X0ZfUEtDUzdfU0lHTl9BRERfU0lHTkVSLAorCQkJCQlFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CisJCQkJZ290byBlcnI7CisJCQkJfQorCQkJaWYgKCFhZGRfY2lwaGVyX3NtY2FwKHNtY2FwLCBOSURfYWVzXzI1Nl9jYmMsIC0xKQorCQkJfHwgIWFkZF9kaWdlc3Rfc21jYXAoc21jYXAsIE5JRF9pZF9Hb3N0UjM0MTFfOTQsIC0xKQorCQkJfHwgIWFkZF9jaXBoZXJfc21jYXAoc21jYXAsIE5JRF9pZF9Hb3N0MjgxNDdfODksIC0xKQorCQkJCXx8ICFhZGRfY2lwaGVyX3NtY2FwKHNtY2FwLCBOSURfYWVzXzE5Ml9jYmMsIC0xKQorCQkJCXx8ICFhZGRfY2lwaGVyX3NtY2FwKHNtY2FwLCBOSURfYWVzXzEyOF9jYmMsIC0xKQorCQkJfHwgIWFkZF9jaXBoZXJfc21jYXAoc21jYXAsIE5JRF9kZXNfZWRlM19jYmMsIC0xKQorCQkJCXx8ICFhZGRfY2lwaGVyX3NtY2FwKHNtY2FwLCBOSURfcmMyX2NiYywgMTI4KQorCQkJCXx8ICFhZGRfY2lwaGVyX3NtY2FwKHNtY2FwLCBOSURfcmMyX2NiYywgNjQpCisJCQkJfHwgIWFkZF9jaXBoZXJfc21jYXAoc21jYXAsIE5JRF9kZXNfY2JjLCAtMSkKKwkJCQl8fCAhYWRkX2NpcGhlcl9zbWNhcChzbWNhcCwgTklEX3JjMl9jYmMsIDQwKQorCQkJCXx8ICFQS0NTN19hZGRfYXR0cmliX3NtaW1lY2FwIChzaSwgc21jYXApKQorCQkJCWdvdG8gZXJyOworCQkJc2tfWDUwOV9BTEdPUl9wb3BfZnJlZShzbWNhcCwgWDUwOV9BTEdPUl9mcmVlKTsKKwkJCXNtY2FwID0gTlVMTDsKKwkJCX0KKwkJaWYgKGZsYWdzICYgUEtDUzdfUkVVU0VfRElHRVNUKQorCQkJeworCQkJaWYgKCFwa2NzN19jb3B5X2V4aXN0aW5nX2RpZ2VzdChwNywgc2kpKQorCQkJCWdvdG8gZXJyOworCQkJaWYgKCEoZmxhZ3MgJiBQS0NTN19QQVJUSUFMKSAmJgorCQkJCQkhUEtDUzdfU0lHTkVSX0lORk9fc2lnbihzaSkpCisJCQkJZ290byBlcnI7CisJCQl9CisJCX0KKwlyZXR1cm4gc2k7CisJZXJyOgorCWlmIChzbWNhcCkKKwkJc2tfWDUwOV9BTEdPUl9wb3BfZnJlZShzbWNhcCwgWDUwOV9BTEdPUl9mcmVlKTsKKwlyZXR1cm4gTlVMTDsKKwl9CisKKy8qIFNlYXJjaCBmb3IgYSBkaWdlc3QgbWF0Y2hpbmcgU2lnbmVySW5mbyBkaWdlc3QgdHlwZSBhbmQgaWYgZm91bmQKKyAqIGNvcHkgYWNyb3NzLgorICovCisKK3N0YXRpYyBpbnQgcGtjczdfY29weV9leGlzdGluZ19kaWdlc3QoUEtDUzcgKnA3LCBQS0NTN19TSUdORVJfSU5GTyAqc2kpCisJeworCWludCBpOworCVNUQUNLX09GKFBLQ1M3X1NJR05FUl9JTkZPKSAqc2luZm9zOworCVBLQ1M3X1NJR05FUl9JTkZPICpzaXRtcDsKKwlBU04xX09DVEVUX1NUUklORyAqb3NkaWcgPSBOVUxMOworCXNpbmZvcyA9IFBLQ1M3X2dldF9zaWduZXJfaW5mbyhwNyk7CisJZm9yIChpID0gMDsgaSA8IHNrX1BLQ1M3X1NJR05FUl9JTkZPX251bShzaW5mb3MpOyBpKyspCisJCXsKKwkJc2l0bXAgPSBza19QS0NTN19TSUdORVJfSU5GT192YWx1ZShzaW5mb3MsIGkpOworCQlpZiAoc2kgPT0gc2l0bXApCisJCQlicmVhazsKKwkJaWYgKHNrX1g1MDlfQVRUUklCVVRFX251bShzaXRtcC0+YXV0aF9hdHRyKSA8PSAwKQorCQkJY29udGludWU7CisJCWlmICghT0JKX2NtcChzaS0+ZGlnZXN0X2FsZy0+YWxnb3JpdGhtLAorCQkJCXNpdG1wLT5kaWdlc3RfYWxnLT5hbGdvcml0aG0pKQorCQkJeworCQkJb3NkaWcgPSBQS0NTN19kaWdlc3RfZnJvbV9hdHRyaWJ1dGVzKHNpdG1wLT5hdXRoX2F0dHIpOworCQkJYnJlYWs7CisJCQl9CisKKwkJfQorCisJaWYgKG9zZGlnKQorCQlyZXR1cm4gUEtDUzdfYWRkMV9hdHRyaWJfZGlnZXN0KHNpLCBvc2RpZy0+ZGF0YSwgb3NkaWctPmxlbmd0aCk7CisKKwlQS0NTN2VycihQS0NTN19GX1BLQ1M3X0NPUFlfRVhJU1RJTkdfRElHRVNULAorCQkJUEtDUzdfUl9OT19NQVRDSElOR19ESUdFU1RfVFlQRV9GT1VORCk7CisJcmV0dXJuIDA7CisJfQorCiBpbnQgUEtDUzdfdmVyaWZ5KFBLQ1M3ICpwNywgU1RBQ0tfT0YoWDUwOSkgKmNlcnRzLCBYNTA5X1NUT1JFICpzdG9yZSwKIAkJCQkJQklPICppbmRhdGEsIEJJTyAqb3V0LCBpbnQgZmxhZ3MpCiB7CkBAIC0zNTQsNyArNDUyLDcgQEAKIAogCWlmKHNrX1BLQ1M3X1NJR05FUl9JTkZPX251bShzaW5mb3MpIDw9IDApIHsKIAkJUEtDUzdlcnIoUEtDUzdfRl9QS0NTN19HRVQwX1NJR05FUlMsUEtDUzdfUl9OT19TSUdORVJTKTsKLQkJcmV0dXJuIE5VTEw7CisJCXJldHVybiAwOwogCX0KIAogCWlmKCEoc2lnbmVycyA9IHNrX1g1MDlfbmV3X251bGwoKSkpIHsKQEAgLTM3NywxMiArNDc1LDEyIEBACiAJICAgIGlmICghc2lnbmVyKSB7CiAJCQlQS0NTN2VycihQS0NTN19GX1BLQ1M3X0dFVDBfU0lHTkVSUyxQS0NTN19SX1NJR05FUl9DRVJUSUZJQ0FURV9OT1RfRk9VTkQpOwogCQkJc2tfWDUwOV9mcmVlKHNpZ25lcnMpOwotCQkJcmV0dXJuIE5VTEw7CisJCQlyZXR1cm4gMDsKIAkgICAgfQogCiAJICAgIGlmICghc2tfWDUwOV9wdXNoKHNpZ25lcnMsIHNpZ25lcikpIHsKLQkJCXNrX1g1MDlfZnJlZShzaWduZXJzKTsKLQkJCXJldHVybiBOVUxMOworCQlza19YNTA5X2ZyZWUoc2lnbmVycyk7CisJCXJldHVybiBOVUxMOwogCSAgICB9CiAJfQogCXJldHVybiBzaWduZXJzOwpAQCAtNDA1LDcgKzUwMyw3IEBACiAKIAlpZiAoIVBLQ1M3X3NldF90eXBlKHA3LCBOSURfcGtjczdfZW52ZWxvcGVkKSkKIAkJZ290byBlcnI7Ci0JaWYoIVBLQ1M3X3NldF9jaXBoZXIocDcsIGNpcGhlcikpIHsKKwlpZiAoIVBLQ1M3X3NldF9jaXBoZXIocDcsIGNpcGhlcikpIHsKIAkJUEtDUzdlcnIoUEtDUzdfRl9QS0NTN19FTkNSWVBULFBLQ1M3X1JfRVJST1JfU0VUVElOR19DSVBIRVIpOwogCQlnb3RvIGVycjsKIAl9CkBAIC00MTksMjIgKzUxNywxMSBAQAogCQl9CiAJfQogCi0JaWYoIShwN2JpbyA9IFBLQ1M3X2RhdGFJbml0KHA3LCBOVUxMKSkpIHsKLQkJUEtDUzdlcnIoUEtDUzdfRl9QS0NTN19FTkNSWVBULEVSUl9SX01BTExPQ19GQUlMVVJFKTsKLQkJZ290byBlcnI7Ci0JfQorCWlmIChmbGFncyAmIFBLQ1M3X1NUUkVBTSkKKwkJcmV0dXJuIHA3OwogCi0JU01JTUVfY3JsZl9jb3B5KGluLCBwN2JpbywgZmxhZ3MpOwotCi0JKHZvaWQpQklPX2ZsdXNoKHA3YmlvKTsKLQotICAgICAgICBpZiAoIVBLQ1M3X2RhdGFGaW5hbChwNyxwN2JpbykpIHsKLQkJUEtDUzdlcnIoUEtDUzdfRl9QS0NTN19FTkNSWVBULFBLQ1M3X1JfUEtDUzdfREFUQUZJTkFMX0VSUk9SKTsKLQkJZ290byBlcnI7Ci0JfQotICAgICAgICBCSU9fZnJlZV9hbGwocDdiaW8pOwotCi0JcmV0dXJuIHA3OworCWlmIChQS0NTN19maW5hbChwNywgaW4sIGZsYWdzKSkKKwkJcmV0dXJuIHA3OwogCiAJZXJyOgogCmRpZmYgLS1naXQgYS9jcnlwdG8vcGtjczcvcGtjczcuaCBiL2NyeXB0by9wa2NzNy9wa2NzNy5oCmluZGV4IGNjMDkyZDIuLmU0ZDQ0MzEgMTAwNjQ0Ci0tLSBhL2NyeXB0by9wa2NzNy9wa2NzNy5oCisrKyBiL2NyeXB0by9wa2NzNy9wa2NzNy5oCkBAIC0yMzIsNiArMjMyLDkgQEAKICNkZWZpbmUgUEtDUzdfdHlwZV9pc19zaWduZWRBbmRFbnZlbG9wZWQoYSkgXAogCQkoT0JKX29iajJuaWQoKGEpLT50eXBlKSA9PSBOSURfcGtjczdfc2lnbmVkQW5kRW52ZWxvcGVkKQogI2RlZmluZSBQS0NTN190eXBlX2lzX2RhdGEoYSkgICAoT0JKX29iajJuaWQoKGEpLT50eXBlKSA9PSBOSURfcGtjczdfZGF0YSkKKyNkZWZpbmUgUEtDUzdfdHlwZV9pc19kaWdlc3QoYSkgICAoT0JKX29iajJuaWQoKGEpLT50eXBlKSA9PSBOSURfcGtjczdfZGlnZXN0KQorI2RlZmluZSBQS0NTN190eXBlX2lzX2VuY3J5cHRlZChhKSBcCisJCShPQkpfb2JqMm5pZCgoYSktPnR5cGUpID09IE5JRF9wa2NzN19lbmNyeXB0ZWQpCiAKICNkZWZpbmUgUEtDUzdfdHlwZV9pc19kaWdlc3QoYSkgICAoT0JKX29iajJuaWQoKGEpLT50eXBlKSA9PSBOSURfcGtjczdfZGlnZXN0KQogCkBAIC0yNDIsMTQgKzI0NSw2IEBACiAKICNkZWZpbmUgUEtDUzdfaXNfZGV0YWNoZWQocDcpIChQS0NTN190eXBlX2lzX3NpZ25lZChwNykgJiYgUEtDUzdfZ2V0X2RldGFjaGVkKHA3KSkKIAotI2lmZGVmIFNTTEVBWV9NQUNST1MKLSNpZm5kZWYgUEtDUzdfSVNTVUVSX0FORF9TRVJJQUxfZGlnZXN0Ci0jZGVmaW5lIFBLQ1M3X0lTU1VFUl9BTkRfU0VSSUFMX2RpZ2VzdChkYXRhLHR5cGUsbWQsbGVuKSBcCi0gICAgICAgIEFTTjFfZGlnZXN0KChpbnQgKCopKCkpaTJkX1BLQ1M3X0lTU1VFUl9BTkRfU0VSSUFMLHR5cGUsXAotCSAgICAgICAgICAgICAgICAoY2hhciAqKWRhdGEsbWQsbGVuKQotI2VuZGlmCi0jZW5kaWYKLQogLyogUy9NSU1FIHJlbGF0ZWQgZmxhZ3MgKi8KIAogI2RlZmluZSBQS0NTN19URVhUCQkweDEKQEAgLTI2Niw2ICsyNjEsOCBAQAogI2RlZmluZSBQS0NTN19DUkxGRU9MCQkweDgwMAogI2RlZmluZSBQS0NTN19TVFJFQU0JCTB4MTAwMAogI2RlZmluZSBQS0NTN19OT0NSTAkJMHgyMDAwCisjZGVmaW5lIFBLQ1M3X1BBUlRJQUwJCTB4NDAwMAorI2RlZmluZSBQS0NTN19SRVVTRV9ESUdFU1QJMHg4MDAwCiAKIC8qIEZsYWdzOiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIGNvZGUgKi8KIApAQCAtMjgxLDcgKzI3OCw2IEBACiAKIERFQ0xBUkVfQVNOMV9GVU5DVElPTlMoUEtDUzdfSVNTVUVSX0FORF9TRVJJQUwpCiAKLSNpZm5kZWYgU1NMRUFZX01BQ1JPUwogaW50IFBLQ1M3X0lTU1VFUl9BTkRfU0VSSUFMX2RpZ2VzdChQS0NTN19JU1NVRVJfQU5EX1NFUklBTCAqZGF0YSxjb25zdCBFVlBfTUQgKnR5cGUsCiAJdW5zaWduZWQgY2hhciAqbWQsdW5zaWduZWQgaW50ICpsZW4pOwogI2lmbmRlZiBPUEVOU1NMX05PX0ZQX0FQSQpAQCAtMjkxLDcgKzI4Nyw4IEBACiBQS0NTNyAqUEtDUzdfZHVwKFBLQ1M3ICpwNyk7CiBQS0NTNyAqZDJpX1BLQ1M3X2JpbyhCSU8gKmJwLFBLQ1M3ICoqcDcpOwogaW50IGkyZF9QS0NTN19iaW8oQklPICpicCxQS0NTNyAqcDcpOwotI2VuZGlmCitpbnQgaTJkX1BLQ1M3X2Jpb19zdHJlYW0oQklPICpvdXQsIFBLQ1M3ICpwNywgQklPICppbiwgaW50IGZsYWdzKTsKK2ludCBQRU1fd3JpdGVfYmlvX1BLQ1M3X3N0cmVhbShCSU8gKm91dCwgUEtDUzcgKnA3LCBCSU8gKmluLCBpbnQgZmxhZ3MpOwogCiBERUNMQVJFX0FTTjFfRlVOQ1RJT05TKFBLQ1M3X1NJR05FUl9JTkZPKQogREVDTEFSRV9BU04xX0ZVTkNUSU9OUyhQS0NTN19SRUNJUF9JTkZPKQpAQCAtMzA3LDYgKzMwNCw3IEBACiBERUNMQVJFX0FTTjFfSVRFTShQS0NTN19BVFRSX1ZFUklGWSkKIAogREVDTEFSRV9BU04xX05ERUZfRlVOQ1RJT04oUEtDUzcpCitERUNMQVJFX0FTTjFfUFJJTlRfRlVOQ1RJT04oUEtDUzcpCiAKIGxvbmcgUEtDUzdfY3RybChQS0NTNyAqcDcsIGludCBjbWQsIGxvbmcgbGFyZywgY2hhciAqcGFyZyk7CiAKQEAgLTMxNSw2ICszMTMsNyBAQAogaW50IFBLQ1M3X3NldF9jb250ZW50KFBLQ1M3ICpwNywgUEtDUzcgKnA3X2RhdGEpOwogaW50IFBLQ1M3X1NJR05FUl9JTkZPX3NldChQS0NTN19TSUdORVJfSU5GTyAqcDdpLCBYNTA5ICp4NTA5LCBFVlBfUEtFWSAqcGtleSwKIAljb25zdCBFVlBfTUQgKmRnc3QpOworaW50IFBLQ1M3X1NJR05FUl9JTkZPX3NpZ24oUEtDUzdfU0lHTkVSX0lORk8gKnNpKTsKIGludCBQS0NTN19hZGRfc2lnbmVyKFBLQ1M3ICpwNywgUEtDUzdfU0lHTkVSX0lORk8gKnA3aSk7CiBpbnQgUEtDUzdfYWRkX2NlcnRpZmljYXRlKFBLQ1M3ICpwNywgWDUwOSAqeDUwOSk7CiBpbnQgUEtDUzdfYWRkX2NybChQS0NTNyAqcDcsIFg1MDlfQ1JMICp4NTA5KTsKQEAgLTMzNiw5ICszMzUsMTMgQEAKIFNUQUNLX09GKFBLQ1M3X1NJR05FUl9JTkZPKSAqUEtDUzdfZ2V0X3NpZ25lcl9pbmZvKFBLQ1M3ICpwNyk7CiAKIFBLQ1M3X1JFQ0lQX0lORk8gKlBLQ1M3X2FkZF9yZWNpcGllbnQoUEtDUzcgKnA3LCBYNTA5ICp4NTA5KTsKK3ZvaWQgUEtDUzdfU0lHTkVSX0lORk9fZ2V0MF9hbGdzKFBLQ1M3X1NJR05FUl9JTkZPICpzaSwgRVZQX1BLRVkgKipwaywKKwkJCQkJWDUwOV9BTEdPUiAqKnBkaWcsIFg1MDlfQUxHT1IgKipwc2lnKTsKK3ZvaWQgUEtDUzdfUkVDSVBfSU5GT19nZXQwX2FsZyhQS0NTN19SRUNJUF9JTkZPICpyaSwgWDUwOV9BTEdPUiAqKnBlbmMpOwogaW50IFBLQ1M3X2FkZF9yZWNpcGllbnRfaW5mbyhQS0NTNyAqcDcsIFBLQ1M3X1JFQ0lQX0lORk8gKnJpKTsKIGludCBQS0NTN19SRUNJUF9JTkZPX3NldChQS0NTN19SRUNJUF9JTkZPICpwN2ksIFg1MDkgKng1MDkpOwogaW50IFBLQ1M3X3NldF9jaXBoZXIoUEtDUzcgKnA3LCBjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIpOworaW50IFBLQ1M3X3N0cmVhbSh1bnNpZ25lZCBjaGFyICoqKmJvdW5kYXJ5LCBQS0NTNyAqcDcpOwogCiBQS0NTN19JU1NVRVJfQU5EX1NFUklBTCAqUEtDUzdfZ2V0X2lzc3Vlcl9hbmRfc2VyaWFsKFBLQ1M3ICpwNywgaW50IGlkeCk7CiBBU04xX09DVEVUX1NUUklORyAqUEtDUzdfZGlnZXN0X2Zyb21fYXR0cmlidXRlcyhTVEFDS19PRihYNTA5X0FUVFJJQlVURSkgKnNrKTsKQEAgLTM1NSw2ICszNTgsMTIgQEAKIAogUEtDUzcgKlBLQ1M3X3NpZ24oWDUwOSAqc2lnbmNlcnQsIEVWUF9QS0VZICpwa2V5LCBTVEFDS19PRihYNTA5KSAqY2VydHMsCiAJCQkJCQkJQklPICpkYXRhLCBpbnQgZmxhZ3MpOworCitQS0NTN19TSUdORVJfSU5GTyAqUEtDUzdfc2lnbl9hZGRfc2lnbmVyKFBLQ1M3ICpwNywKKwkJCVg1MDkgKnNpZ25jZXJ0LCBFVlBfUEtFWSAqcGtleSwgY29uc3QgRVZQX01EICptZCwKKwkJCWludCBmbGFncyk7CisKK2ludCBQS0NTN19maW5hbChQS0NTNyAqcDcsIEJJTyAqZGF0YSwgaW50IGZsYWdzKTsKIGludCBQS0NTN192ZXJpZnkoUEtDUzcgKnA3LCBTVEFDS19PRihYNTA5KSAqY2VydHMsIFg1MDlfU1RPUkUgKnN0b3JlLAogCQkJCQlCSU8gKmluZGF0YSwgQklPICpvdXQsIGludCBmbGFncyk7CiBTVEFDS19PRihYNTA5KSAqUEtDUzdfZ2V0MF9zaWduZXJzKFBLQ1M3ICpwNywgU1RBQ0tfT0YoWDUwOSkgKmNlcnRzLCBpbnQgZmxhZ3MpOwpAQCAtMzY3LDEwICszNzYsMTYgQEAKIFNUQUNLX09GKFg1MDlfQUxHT1IpICpQS0NTN19nZXRfc21pbWVjYXAoUEtDUzdfU0lHTkVSX0lORk8gKnNpKTsKIGludCBQS0NTN19zaW1wbGVfc21pbWVjYXAoU1RBQ0tfT0YoWDUwOV9BTEdPUikgKnNrLCBpbnQgbmlkLCBpbnQgYXJnKTsKIAoraW50IFBLQ1M3X2FkZF9hdHRyaWJfY29udGVudF90eXBlKFBLQ1M3X1NJR05FUl9JTkZPICpzaSwgQVNOMV9PQkpFQ1QgKmNvaWQpOworaW50IFBLQ1M3X2FkZDBfYXR0cmliX3NpZ25pbmdfdGltZShQS0NTN19TSUdORVJfSU5GTyAqc2ksIEFTTjFfVElNRSAqdCk7CitpbnQgUEtDUzdfYWRkMV9hdHRyaWJfZGlnZXN0KFBLQ1M3X1NJR05FUl9JTkZPICpzaSwKKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICptZCwgaW50IG1kbGVuKTsKKwogaW50IFNNSU1FX3dyaXRlX1BLQ1M3KEJJTyAqYmlvLCBQS0NTNyAqcDcsIEJJTyAqZGF0YSwgaW50IGZsYWdzKTsKIFBLQ1M3ICpTTUlNRV9yZWFkX1BLQ1M3KEJJTyAqYmlvLCBCSU8gKipiY29udCk7Ci1pbnQgU01JTUVfY3JsZl9jb3B5KEJJTyAqaW4sIEJJTyAqb3V0LCBpbnQgZmxhZ3MpOwotaW50IFNNSU1FX3RleHQoQklPICppbiwgQklPICpvdXQpOworCitCSU8gKkJJT19uZXdfUEtDUzcoQklPICpvdXQsIFBLQ1M3ICpwNyk7CisKIAogLyogQkVHSU4gRVJST1IgQ09ERVMgKi8KIC8qIFRoZSBmb2xsb3dpbmcgbGluZXMgYXJlIGF1dG8gZ2VuZXJhdGVkIGJ5IHRoZSBzY3JpcHQgbWtlcnIucGwuIEFueSBjaGFuZ2VzCkBAIC0zODMsMTIgKzM5OCwxNyBAQAogLyogRnVuY3Rpb24gY29kZXMuICovCiAjZGVmaW5lIFBLQ1M3X0ZfQjY0X1JFQURfUEtDUzcJCQkJIDEyMAogI2RlZmluZSBQS0NTN19GX0I2NF9XUklURV9QS0NTNwkJCQkgMTIxCisjZGVmaW5lIFBLQ1M3X0ZfRE9fUEtDUzdfU0lHTkVEX0FUVFJJQgkJCSAxMzYKKyNkZWZpbmUgUEtDUzdfRl9JMkRfUEtDUzdfQklPX1NUUkVBTQkJCSAxNDAKKyNkZWZpbmUgUEtDUzdfRl9QS0NTN19BREQwX0FUVFJJQl9TSUdOSU5HX1RJTUUJCSAxMzUKICNkZWZpbmUgUEtDUzdfRl9QS0NTN19BRERfQVRUUklCX1NNSU1FQ0FQCQkgMTE4CiAjZGVmaW5lIFBLQ1M3X0ZfUEtDUzdfQUREX0NFUlRJRklDQVRFCQkJIDEwMAogI2RlZmluZSBQS0NTN19GX1BLQ1M3X0FERF9DUkwJCQkJIDEwMQogI2RlZmluZSBQS0NTN19GX1BLQ1M3X0FERF9SRUNJUElFTlRfSU5GTwkJIDEwMgorI2RlZmluZSBQS0NTN19GX1BLQ1M3X0FERF9TSUdOQVRVUkUJCQkgMTMxCiAjZGVmaW5lIFBLQ1M3X0ZfUEtDUzdfQUREX1NJR05FUgkJCSAxMDMKICNkZWZpbmUgUEtDUzdfRl9QS0NTN19CSU9fQUREX0RJR0VTVAkJCSAxMjUKKyNkZWZpbmUgUEtDUzdfRl9QS0NTN19DT1BZX0VYSVNUSU5HX0RJR0VTVAkJIDEzOAogI2RlZmluZSBQS0NTN19GX1BLQ1M3X0NUUkwJCQkJIDEwNAogI2RlZmluZSBQS0NTN19GX1BLQ1M3X0RBVEFERUNPREUJCQkgMTEyCiAjZGVmaW5lIFBLQ1M3X0ZfUEtDUzdfREFUQUZJTkFMCQkJCSAxMjgKQEAgLTM5NiwxNSArNDE2LDIyIEBACiAjZGVmaW5lIFBLQ1M3X0ZfUEtDUzdfREFUQVNJR04JCQkJIDEwNgogI2RlZmluZSBQS0NTN19GX1BLQ1M3X0RBVEFWRVJJRlkJCQkgMTA3CiAjZGVmaW5lIFBLQ1M3X0ZfUEtDUzdfREVDUllQVAkJCQkgMTE0CisjZGVmaW5lIFBLQ1M3X0ZfUEtDUzdfREVDUllQVF9SSU5GTwkJCSAxMzMKKyNkZWZpbmUgUEtDUzdfRl9QS0NTN19FTkNPREVfUklORk8JCQkgMTMyCiAjZGVmaW5lIFBLQ1M3X0ZfUEtDUzdfRU5DUllQVAkJCQkgMTE1CisjZGVmaW5lIFBLQ1M3X0ZfUEtDUzdfRklOQUwJCQkJIDEzNAogI2RlZmluZSBQS0NTN19GX1BLQ1M3X0ZJTkRfRElHRVNUCQkJIDEyNwogI2RlZmluZSBQS0NTN19GX1BLQ1M3X0dFVDBfU0lHTkVSUwkJCSAxMjQKKyNkZWZpbmUgUEtDUzdfRl9QS0NTN19SRUNJUF9JTkZPX1NFVAkJCSAxMzAKICNkZWZpbmUgUEtDUzdfRl9QS0NTN19TRVRfQ0lQSEVSCQkJIDEwOAogI2RlZmluZSBQS0NTN19GX1BLQ1M3X1NFVF9DT05URU5UCQkJIDEwOQogI2RlZmluZSBQS0NTN19GX1BLQ1M3X1NFVF9ESUdFU1QJCQkgMTI2CiAjZGVmaW5lIFBLQ1M3X0ZfUEtDUzdfU0VUX1RZUEUJCQkJIDExMAogI2RlZmluZSBQS0NTN19GX1BLQ1M3X1NJR04JCQkJIDExNgogI2RlZmluZSBQS0NTN19GX1BLQ1M3X1NJR05BVFVSRVZFUklGWQkJCSAxMTMKKyNkZWZpbmUgUEtDUzdfRl9QS0NTN19TSUdORVJfSU5GT19TRVQJCQkgMTI5CisjZGVmaW5lIFBLQ1M3X0ZfUEtDUzdfU0lHTkVSX0lORk9fU0lHTgkJCSAxMzkKKyNkZWZpbmUgUEtDUzdfRl9QS0NTN19TSUdOX0FERF9TSUdORVIJCQkgMTM3CiAjZGVmaW5lIFBLQ1M3X0ZfUEtDUzdfU0lNUExFX1NNSU1FQ0FQCQkJIDExOQogI2RlZmluZSBQS0NTN19GX1BLQ1M3X1ZFUklGWQkJCQkgMTE3CiAjZGVmaW5lIFBLQ1M3X0ZfU01JTUVfUkVBRF9QS0NTNwkJCSAxMjIKQEAgLTQxNSwxMCArNDQyLDEzIEBACiAjZGVmaW5lIFBLQ1M3X1JfQ0lQSEVSX0hBU19OT19PQkpFQ1RfSURFTlRJRklFUgkJIDE0NAogI2RlZmluZSBQS0NTN19SX0NJUEhFUl9OT1RfSU5JVElBTElaRUQJCQkgMTE2CiAjZGVmaW5lIFBLQ1M3X1JfQ09OVEVOVF9BTkRfREFUQV9QUkVTRU5UCQkgMTE4CisjZGVmaW5lIFBLQ1M3X1JfQ1RSTF9FUlJPUgkJCQkgMTUyCiAjZGVmaW5lIFBLQ1M3X1JfREVDT0RFX0VSUk9SCQkJCSAxMzAKICNkZWZpbmUgUEtDUzdfUl9ERUNSWVBURURfS0VZX0lTX1dST05HX0xFTkdUSAkJIDEwMAogI2RlZmluZSBQS0NTN19SX0RFQ1JZUFRfRVJST1IJCQkJIDExOQogI2RlZmluZSBQS0NTN19SX0RJR0VTVF9GQUlMVVJFCQkJCSAxMDEKKyNkZWZpbmUgUEtDUzdfUl9FTkNSWVBUSU9OX0NUUkxfRkFJTFVSRQkJCSAxNDkKKyNkZWZpbmUgUEtDUzdfUl9FTkNSWVBUSU9OX05PVF9TVVBQT1JURURfRk9SX1RISVNfS0VZX1RZUEUgMTUwCiAjZGVmaW5lIFBLQ1M3X1JfRVJST1JfQURESU5HX1JFQ0lQSUVOVAkJCSAxMjAKICNkZWZpbmUgUEtDUzdfUl9FUlJPUl9TRVRUSU5HX0NJUEhFUgkJCSAxMjEKICNkZWZpbmUgUEtDUzdfUl9JTlZBTElEX01JTUVfVFlQRQkJCSAxMzEKQEAgLTQyOSw2ICs0NTksOCBAQAogI2RlZmluZSBQS0NTN19SX01JU1NJTkdfQ0VSSVBFTkRfSU5GTwkJCSAxMDMKICNkZWZpbmUgUEtDUzdfUl9OT19DT05URU5UCQkJCSAxMjIKICNkZWZpbmUgUEtDUzdfUl9OT19DT05URU5UX1RZUEUJCQkJIDEzNQorI2RlZmluZSBQS0NTN19SX05PX0RFRkFVTFRfRElHRVNUCQkJIDE1MQorI2RlZmluZSBQS0NTN19SX05PX01BVENISU5HX0RJR0VTVF9UWVBFX0ZPVU5ECQkgMTU0CiAjZGVmaW5lIFBLQ1M3X1JfTk9fTVVMVElQQVJUX0JPRFlfRkFJTFVSRQkJIDEzNgogI2RlZmluZSBQS0NTN19SX05PX01VTFRJUEFSVF9CT1VOREFSWQkJCSAxMzcKICNkZWZpbmUgUEtDUzdfUl9OT19SRUNJUElFTlRfTUFUQ0hFU19DRVJUSUZJQ0FURQkgMTE1CkBAIC00MzgsNiArNDcwLDcgQEAKICNkZWZpbmUgUEtDUzdfUl9OT19TSUdfQ09OVEVOVF9UWVBFCQkJIDEzOAogI2RlZmluZSBQS0NTN19SX09QRVJBVElPTl9OT1RfU1VQUE9SVEVEX09OX1RISVNfVFlQRQkgMTA0CiAjZGVmaW5lIFBLQ1M3X1JfUEtDUzdfQUREX1NJR05BVFVSRV9FUlJPUgkJIDEyNAorI2RlZmluZSBQS0NTN19SX1BLQ1M3X0FERF9TSUdORVJfRVJST1IJCQkgMTUzCiAjZGVmaW5lIFBLQ1M3X1JfUEtDUzdfREFUQUZJTkFMCQkJCSAxMjYKICNkZWZpbmUgUEtDUzdfUl9QS0NTN19EQVRBRklOQUxfRVJST1IJCQkgMTI1CiAjZGVmaW5lIFBLQ1M3X1JfUEtDUzdfREFUQVNJR04JCQkJIDE0NQpAQCAtNDQ2LDYgKzQ3OSw4IEBACiAjZGVmaW5lIFBLQ1M3X1JfUFJJVkFURV9LRVlfRE9FU19OT1RfTUFUQ0hfQ0VSVElGSUNBVEUJIDEyNwogI2RlZmluZSBQS0NTN19SX1NJR05BVFVSRV9GQUlMVVJFCQkJIDEwNQogI2RlZmluZSBQS0NTN19SX1NJR05FUl9DRVJUSUZJQ0FURV9OT1RfRk9VTkQJCSAxMjgKKyNkZWZpbmUgUEtDUzdfUl9TSUdOSU5HX0NUUkxfRkFJTFVSRQkJCSAxNDcKKyNkZWZpbmUgUEtDUzdfUl9TSUdOSU5HX05PVF9TVVBQT1JURURfRk9SX1RISVNfS0VZX1RZUEUJIDE0OAogI2RlZmluZSBQS0NTN19SX1NJR19JTlZBTElEX01JTUVfVFlQRQkJCSAxNDEKICNkZWZpbmUgUEtDUzdfUl9TTUlNRV9URVhUX0VSUk9SCQkJIDEyOQogI2RlZmluZSBQS0NTN19SX1VOQUJMRV9UT19GSU5EX0NFUlRJRklDQVRFCQkgMTA2CmRpZmYgLS1naXQgYS9jcnlwdG8vcGtjczcvcGtjczdlcnIuYyBiL2NyeXB0by9wa2NzNy9wa2NzN2Vyci5jCmluZGV4IGMwZTNkNGMuLmQwYWYzMmEgMTAwNjQ0Ci0tLSBhL2NyeXB0by9wa2NzNy9wa2NzN2Vyci5jCisrKyBiL2NyeXB0by9wa2NzNy9wa2NzN2Vyci5jCkBAIC0xLDYgKzEsNiBAQAogLyogY3J5cHRvL3BrY3M3L3BrY3M3ZXJyLmMgKi8KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MiwxMiArNzIsMTcgQEAKIAl7CiB7RVJSX0ZVTkMoUEtDUzdfRl9CNjRfUkVBRF9QS0NTNyksCSJCNjRfUkVBRF9QS0NTNyJ9LAoge0VSUl9GVU5DKFBLQ1M3X0ZfQjY0X1dSSVRFX1BLQ1M3KSwJIkI2NF9XUklURV9QS0NTNyJ9LAore0VSUl9GVU5DKFBLQ1M3X0ZfRE9fUEtDUzdfU0lHTkVEX0FUVFJJQiksCSJET19QS0NTN19TSUdORURfQVRUUklCIn0sCit7RVJSX0ZVTkMoUEtDUzdfRl9JMkRfUEtDUzdfQklPX1NUUkVBTSksCSJpMmRfUEtDUzdfYmlvX3N0cmVhbSJ9LAore0VSUl9GVU5DKFBLQ1M3X0ZfUEtDUzdfQUREMF9BVFRSSUJfU0lHTklOR19USU1FKSwJIlBLQ1M3X2FkZDBfYXR0cmliX3NpZ25pbmdfdGltZSJ9LAoge0VSUl9GVU5DKFBLQ1M3X0ZfUEtDUzdfQUREX0FUVFJJQl9TTUlNRUNBUCksCSJQS0NTN19hZGRfYXR0cmliX3NtaW1lY2FwIn0sCiB7RVJSX0ZVTkMoUEtDUzdfRl9QS0NTN19BRERfQ0VSVElGSUNBVEUpLAkiUEtDUzdfYWRkX2NlcnRpZmljYXRlIn0sCiB7RVJSX0ZVTkMoUEtDUzdfRl9QS0NTN19BRERfQ1JMKSwJIlBLQ1M3X2FkZF9jcmwifSwKIHtFUlJfRlVOQyhQS0NTN19GX1BLQ1M3X0FERF9SRUNJUElFTlRfSU5GTyksCSJQS0NTN19hZGRfcmVjaXBpZW50X2luZm8ifSwKK3tFUlJfRlVOQyhQS0NTN19GX1BLQ1M3X0FERF9TSUdOQVRVUkUpLAkiUEtDUzdfYWRkX3NpZ25hdHVyZSJ9LAoge0VSUl9GVU5DKFBLQ1M3X0ZfUEtDUzdfQUREX1NJR05FUiksCSJQS0NTN19hZGRfc2lnbmVyIn0sCiB7RVJSX0ZVTkMoUEtDUzdfRl9QS0NTN19CSU9fQUREX0RJR0VTVCksCSJQS0NTN19CSU9fQUREX0RJR0VTVCJ9LAore0VSUl9GVU5DKFBLQ1M3X0ZfUEtDUzdfQ09QWV9FWElTVElOR19ESUdFU1QpLAkiUEtDUzdfQ09QWV9FWElTVElOR19ESUdFU1QifSwKIHtFUlJfRlVOQyhQS0NTN19GX1BLQ1M3X0NUUkwpLAkiUEtDUzdfY3RybCJ9LAoge0VSUl9GVU5DKFBLQ1M3X0ZfUEtDUzdfREFUQURFQ09ERSksCSJQS0NTN19kYXRhRGVjb2RlIn0sCiB7RVJSX0ZVTkMoUEtDUzdfRl9QS0NTN19EQVRBRklOQUwpLAkiUEtDUzdfZGF0YUZpbmFsIn0sCkBAIC04NSwxNSArOTAsMjIgQEAKIHtFUlJfRlVOQyhQS0NTN19GX1BLQ1M3X0RBVEFTSUdOKSwJIlBLQ1M3X0RBVEFTSUdOIn0sCiB7RVJSX0ZVTkMoUEtDUzdfRl9QS0NTN19EQVRBVkVSSUZZKSwJIlBLQ1M3X2RhdGFWZXJpZnkifSwKIHtFUlJfRlVOQyhQS0NTN19GX1BLQ1M3X0RFQ1JZUFQpLAkiUEtDUzdfZGVjcnlwdCJ9LAore0VSUl9GVU5DKFBLQ1M3X0ZfUEtDUzdfREVDUllQVF9SSU5GTyksCSJQS0NTN19ERUNSWVBUX1JJTkZPIn0sCit7RVJSX0ZVTkMoUEtDUzdfRl9QS0NTN19FTkNPREVfUklORk8pLAkiUEtDUzdfRU5DT0RFX1JJTkZPIn0sCiB7RVJSX0ZVTkMoUEtDUzdfRl9QS0NTN19FTkNSWVBUKSwJIlBLQ1M3X2VuY3J5cHQifSwKK3tFUlJfRlVOQyhQS0NTN19GX1BLQ1M3X0ZJTkFMKSwJIlBLQ1M3X2ZpbmFsIn0sCiB7RVJSX0ZVTkMoUEtDUzdfRl9QS0NTN19GSU5EX0RJR0VTVCksCSJQS0NTN19GSU5EX0RJR0VTVCJ9LAoge0VSUl9GVU5DKFBLQ1M3X0ZfUEtDUzdfR0VUMF9TSUdORVJTKSwJIlBLQ1M3X2dldDBfc2lnbmVycyJ9LAore0VSUl9GVU5DKFBLQ1M3X0ZfUEtDUzdfUkVDSVBfSU5GT19TRVQpLAkiUEtDUzdfUkVDSVBfSU5GT19zZXQifSwKIHtFUlJfRlVOQyhQS0NTN19GX1BLQ1M3X1NFVF9DSVBIRVIpLAkiUEtDUzdfc2V0X2NpcGhlciJ9LAoge0VSUl9GVU5DKFBLQ1M3X0ZfUEtDUzdfU0VUX0NPTlRFTlQpLAkiUEtDUzdfc2V0X2NvbnRlbnQifSwKIHtFUlJfRlVOQyhQS0NTN19GX1BLQ1M3X1NFVF9ESUdFU1QpLAkiUEtDUzdfc2V0X2RpZ2VzdCJ9LAoge0VSUl9GVU5DKFBLQ1M3X0ZfUEtDUzdfU0VUX1RZUEUpLAkiUEtDUzdfc2V0X3R5cGUifSwKIHtFUlJfRlVOQyhQS0NTN19GX1BLQ1M3X1NJR04pLAkiUEtDUzdfc2lnbiJ9LAoge0VSUl9GVU5DKFBLQ1M3X0ZfUEtDUzdfU0lHTkFUVVJFVkVSSUZZKSwJIlBLQ1M3X3NpZ25hdHVyZVZlcmlmeSJ9LAore0VSUl9GVU5DKFBLQ1M3X0ZfUEtDUzdfU0lHTkVSX0lORk9fU0VUKSwJIlBLQ1M3X1NJR05FUl9JTkZPX3NldCJ9LAore0VSUl9GVU5DKFBLQ1M3X0ZfUEtDUzdfU0lHTkVSX0lORk9fU0lHTiksCSJQS0NTN19TSUdORVJfSU5GT19zaWduIn0sCit7RVJSX0ZVTkMoUEtDUzdfRl9QS0NTN19TSUdOX0FERF9TSUdORVIpLAkiUEtDUzdfc2lnbl9hZGRfc2lnbmVyIn0sCiB7RVJSX0ZVTkMoUEtDUzdfRl9QS0NTN19TSU1QTEVfU01JTUVDQVApLAkiUEtDUzdfc2ltcGxlX3NtaW1lY2FwIn0sCiB7RVJSX0ZVTkMoUEtDUzdfRl9QS0NTN19WRVJJRlkpLAkiUEtDUzdfdmVyaWZ5In0sCiB7RVJSX0ZVTkMoUEtDUzdfRl9TTUlNRV9SRUFEX1BLQ1M3KSwJIlNNSU1FX3JlYWRfUEtDUzcifSwKQEAgLTEwNywxMCArMTE5LDEzIEBACiB7RVJSX1JFQVNPTihQS0NTN19SX0NJUEhFUl9IQVNfTk9fT0JKRUNUX0lERU5USUZJRVIpLCJjaXBoZXIgaGFzIG5vIG9iamVjdCBpZGVudGlmaWVyIn0sCiB7RVJSX1JFQVNPTihQS0NTN19SX0NJUEhFUl9OT1RfSU5JVElBTElaRUQpLCJjaXBoZXIgbm90IGluaXRpYWxpemVkIn0sCiB7RVJSX1JFQVNPTihQS0NTN19SX0NPTlRFTlRfQU5EX0RBVEFfUFJFU0VOVCksImNvbnRlbnQgYW5kIGRhdGEgcHJlc2VudCJ9LAore0VSUl9SRUFTT04oUEtDUzdfUl9DVFJMX0VSUk9SKSAgICAgICAgICAsImN0cmwgZXJyb3IifSwKIHtFUlJfUkVBU09OKFBLQ1M3X1JfREVDT0RFX0VSUk9SKSAgICAgICAgLCJkZWNvZGUgZXJyb3IifSwKIHtFUlJfUkVBU09OKFBLQ1M3X1JfREVDUllQVEVEX0tFWV9JU19XUk9OR19MRU5HVEgpLCJkZWNyeXB0ZWQga2V5IGlzIHdyb25nIGxlbmd0aCJ9LAoge0VSUl9SRUFTT04oUEtDUzdfUl9ERUNSWVBUX0VSUk9SKSAgICAgICAsImRlY3J5cHQgZXJyb3IifSwKIHtFUlJfUkVBU09OKFBLQ1M3X1JfRElHRVNUX0ZBSUxVUkUpICAgICAgLCJkaWdlc3QgZmFpbHVyZSJ9LAore0VSUl9SRUFTT04oUEtDUzdfUl9FTkNSWVBUSU9OX0NUUkxfRkFJTFVSRSksImVuY3J5cHRpb24gY3RybCBmYWlsdXJlIn0sCit7RVJSX1JFQVNPTihQS0NTN19SX0VOQ1JZUFRJT05fTk9UX1NVUFBPUlRFRF9GT1JfVEhJU19LRVlfVFlQRSksImVuY3J5cHRpb24gbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBrZXkgdHlwZSJ9LAoge0VSUl9SRUFTT04oUEtDUzdfUl9FUlJPUl9BRERJTkdfUkVDSVBJRU5UKSwiZXJyb3IgYWRkaW5nIHJlY2lwaWVudCJ9LAoge0VSUl9SRUFTT04oUEtDUzdfUl9FUlJPUl9TRVRUSU5HX0NJUEhFUiksImVycm9yIHNldHRpbmcgY2lwaGVyIn0sCiB7RVJSX1JFQVNPTihQS0NTN19SX0lOVkFMSURfTUlNRV9UWVBFKSAgICwiaW52YWxpZCBtaW1lIHR5cGUifSwKQEAgLTEyMSw2ICsxMzYsOCBAQAoge0VSUl9SRUFTT04oUEtDUzdfUl9NSVNTSU5HX0NFUklQRU5EX0lORk8pLCJtaXNzaW5nIGNlcmlwZW5kIGluZm8ifSwKIHtFUlJfUkVBU09OKFBLQ1M3X1JfTk9fQ09OVEVOVCkgICAgICAgICAgLCJubyBjb250ZW50In0sCiB7RVJSX1JFQVNPTihQS0NTN19SX05PX0NPTlRFTlRfVFlQRSkgICAgICwibm8gY29udGVudCB0eXBlIn0sCit7RVJSX1JFQVNPTihQS0NTN19SX05PX0RFRkFVTFRfRElHRVNUKSAgICwibm8gZGVmYXVsdCBkaWdlc3QifSwKK3tFUlJfUkVBU09OKFBLQ1M3X1JfTk9fTUFUQ0hJTkdfRElHRVNUX1RZUEVfRk9VTkQpLCJubyBtYXRjaGluZyBkaWdlc3QgdHlwZSBmb3VuZCJ9LAoge0VSUl9SRUFTT04oUEtDUzdfUl9OT19NVUxUSVBBUlRfQk9EWV9GQUlMVVJFKSwibm8gbXVsdGlwYXJ0IGJvZHkgZmFpbHVyZSJ9LAoge0VSUl9SRUFTT04oUEtDUzdfUl9OT19NVUxUSVBBUlRfQk9VTkRBUlkpLCJubyBtdWx0aXBhcnQgYm91bmRhcnkifSwKIHtFUlJfUkVBU09OKFBLQ1M3X1JfTk9fUkVDSVBJRU5UX01BVENIRVNfQ0VSVElGSUNBVEUpLCJubyByZWNpcGllbnQgbWF0Y2hlcyBjZXJ0aWZpY2F0ZSJ9LApAQCAtMTMwLDYgKzE0Nyw3IEBACiB7RVJSX1JFQVNPTihQS0NTN19SX05PX1NJR19DT05URU5UX1RZUEUpICwibm8gc2lnIGNvbnRlbnQgdHlwZSJ9LAoge0VSUl9SRUFTT04oUEtDUzdfUl9PUEVSQVRJT05fTk9UX1NVUFBPUlRFRF9PTl9USElTX1RZUEUpLCJvcGVyYXRpb24gbm90IHN1cHBvcnRlZCBvbiB0aGlzIHR5cGUifSwKIHtFUlJfUkVBU09OKFBLQ1M3X1JfUEtDUzdfQUREX1NJR05BVFVSRV9FUlJPUiksInBrY3M3IGFkZCBzaWduYXR1cmUgZXJyb3IifSwKK3tFUlJfUkVBU09OKFBLQ1M3X1JfUEtDUzdfQUREX1NJR05FUl9FUlJPUiksInBrY3M3IGFkZCBzaWduZXIgZXJyb3IifSwKIHtFUlJfUkVBU09OKFBLQ1M3X1JfUEtDUzdfREFUQUZJTkFMKSAgICAgLCJwa2NzNyBkYXRhZmluYWwifSwKIHtFUlJfUkVBU09OKFBLQ1M3X1JfUEtDUzdfREFUQUZJTkFMX0VSUk9SKSwicGtjczcgZGF0YWZpbmFsIGVycm9yIn0sCiB7RVJSX1JFQVNPTihQS0NTN19SX1BLQ1M3X0RBVEFTSUdOKSAgICAgICwicGtjczcgZGF0YXNpZ24ifSwKQEAgLTEzOCw2ICsxNTYsOCBAQAoge0VSUl9SRUFTT04oUEtDUzdfUl9QUklWQVRFX0tFWV9ET0VTX05PVF9NQVRDSF9DRVJUSUZJQ0FURSksInByaXZhdGUga2V5IGRvZXMgbm90IG1hdGNoIGNlcnRpZmljYXRlIn0sCiB7RVJSX1JFQVNPTihQS0NTN19SX1NJR05BVFVSRV9GQUlMVVJFKSAgICwic2lnbmF0dXJlIGZhaWx1cmUifSwKIHtFUlJfUkVBU09OKFBLQ1M3X1JfU0lHTkVSX0NFUlRJRklDQVRFX05PVF9GT1VORCksInNpZ25lciBjZXJ0aWZpY2F0ZSBub3QgZm91bmQifSwKK3tFUlJfUkVBU09OKFBLQ1M3X1JfU0lHTklOR19DVFJMX0ZBSUxVUkUpLCJzaWduaW5nIGN0cmwgZmFpbHVyZSJ9LAore0VSUl9SRUFTT04oUEtDUzdfUl9TSUdOSU5HX05PVF9TVVBQT1JURURfRk9SX1RISVNfS0VZX1RZUEUpLCJzaWduaW5nIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMga2V5IHR5cGUifSwKIHtFUlJfUkVBU09OKFBLQ1M3X1JfU0lHX0lOVkFMSURfTUlNRV9UWVBFKSwic2lnIGludmFsaWQgbWltZSB0eXBlIn0sCiB7RVJSX1JFQVNPTihQS0NTN19SX1NNSU1FX1RFWFRfRVJST1IpICAgICwic21pbWUgdGV4dCBlcnJvciJ9LAoge0VSUl9SRUFTT04oUEtDUzdfUl9VTkFCTEVfVE9fRklORF9DRVJUSUZJQ0FURSksInVuYWJsZSB0byBmaW5kIGNlcnRpZmljYXRlIn0sCmRpZmYgLS1naXQgYS9jcnlwdG8vcHBjY3B1aWQucGwgYi9jcnlwdG8vcHBjY3B1aWQucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzY5ZTFkMAotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9wcGNjcHVpZC5wbApAQCAtMCwwICsxLDk2IEBACisjIS91c3IvYmluL2VudiBwZXJsCisKKyRmbGF2b3VyID0gc2hpZnQ7CisKKyQwID1+IG0vKC4qW1wvXFxdKVteXC9cXF0rJC87ICRkaXI9JDE7CisoICR4bGF0ZT0iJHtkaXJ9cHBjLXhsYXRlLnBsIiBhbmQgLWYgJHhsYXRlICkgb3IKKyggJHhsYXRlPSIke2Rpcn1wZXJsYXNtL3BwYy14bGF0ZS5wbCIgYW5kIC1mICR4bGF0ZSkgb3IKK2RpZSAiY2FuJ3QgbG9jYXRlIHBwYy14bGF0ZS5wbCI7CisKK29wZW4gU1RET1VULCJ8ICReWCAkeGxhdGUgJGZsYXZvdXIgIi5zaGlmdCB8fCBkaWUgImNhbid0IGNhbGwgJHhsYXRlOiAkISI7CisKK2lmICgkZmxhdm91cj1+LzY0LykgeworICAgICRDTVBMST0iY21wbGRpIjsKKyAgICAkU0hSTEk9InNyZGkiOworICAgICRTSUdOWD0iZXh0c3ciOworfSBlbHNlIHsKKyAgICAkQ01QTEk9ImNtcGx3aSI7CisgICAgJFNIUkxJPSJzcndpIjsKKyAgICAkU0lHTlg9Im1yIjsKK30KKworJGNvZGU9PDxfX187CisubWFjaGluZQkiYW55IgorLnRleHQKKworLmdsb2JsCS5PUEVOU1NMX2NwdWlkX3NldHVwCisuYWxpZ24JNAorLk9QRU5TU0xfY3B1aWRfc2V0dXA6CisJYmxyCisKKy5nbG9ibAkuT1BFTlNTTF93aXBlX2NwdQorLmFsaWduCTQKKy5PUEVOU1NMX3dpcGVfY3B1OgorCXhvcglyMCxyMCxyMAorCW1yCXIzLHIxCisJeG9yCXI0LHI0LHI0CisJeG9yCXI1LHI1LHI1CisJeG9yCXI2LHI2LHI2CisJeG9yCXI3LHI3LHI3CisJeG9yCXI4LHI4LHI4CisJeG9yCXI5LHI5LHI5CisJeG9yCXIxMCxyMTAscjEwCisJeG9yCXIxMSxyMTEscjExCisJeG9yCXIxMixyMTIscjEyCisJYmxyCisKKy5nbG9ibAkuT1BFTlNTTF9hdG9taWNfYWRkCisuYWxpZ24JNAorLk9QRU5TU0xfYXRvbWljX2FkZDoKK0xvb3A6CWx3YXJ4CXI1LDAscjMKKwlhZGQJcjAscjQscjUKKwlzdHdjeC4JcjAsMCxyMworCWJuZS0JTG9vcAorCSRTSUdOWAlyMyxyMAorCWJscgorCisuZ2xvYmwJLk9QRU5TU0xfcmR0c2MKKy5hbGlnbgk0CisuT1BFTlNTTF9yZHRzYzoKKwltZnRiCXIzCisJbWZ0YnUJcjQKKwlibHIKKworLmdsb2JsCS5PUEVOU1NMX2NsZWFuc2UKKy5hbGlnbgk0CisuT1BFTlNTTF9jbGVhbnNlOgorCSRDTVBMSQlyNCw3CisJbGkJcjAsMAorCWJnZQlMb3QKKwkkQ01QTEkJcjQsMAorCWJlcWxyLQorTGl0dGxlOgltdGN0cglyNAorCXN0YglyMCwwKHIzKQorCWFkZGkJcjMscjMsMQorCWJkbnotCVwkLTgKKwlibHIKK0xvdDoJYW5kaS4JcjUscjMsMworCWJlcQlMYWxpZ25lZAorCXN0YglyMCwwKHIzKQorCXN1YmkJcjQscjQsMQorCWFkZGkJcjMscjMsMQorCWIJTG90CitMYWxpZ25lZDoKKwkkU0hSTEkJcjUscjQsMgorCW10Y3RyCXI1CisJc3R3CXIwLDAocjMpCisJYWRkaQlyMyxyMyw0CisJYmRuei0JXCQtOAorCWFuZGkuCXI0LHI0LDMKKwlibmUJTGl0dGxlCisJYmxyCitfX18KKworJGNvZGUgPX4gcy9cYChbXlxgXSopXGAvZXZhbCAkMS9nZW07CitwcmludCAkY29kZTsKK2Nsb3NlIFNURE9VVDsKZGlmZiAtLWdpdCBhL2NyeXB0by9wcXVldWUvTWFrZWZpbGUgYi9jcnlwdG8vcHF1ZXVlL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNmJmYzM0Li4wMDAwMDAwCi0tLSBhL2NyeXB0by9wcXVldWUvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0jCi0jIE9wZW5TU0wvY3J5cHRvL3BxdWV1ZS9NYWtlZmlsZQotIwotCi1ESVI9CXBxdWV1ZQotVE9QPQkuLi8uLgotQ0M9CWNjCi1JTkNMVURFUz0KLUNGTEFHPS1nCi1NQUtFRklMRT0JTWFrZWZpbGUKLUFSPQkJYXIgcgotCi1DRkxBR1M9ICQoSU5DTFVERVMpICQoQ0ZMQUcpCi0KLUdFTkVSQUw9TWFrZWZpbGUKLVRFU1Q9Ci1BUFBTPQotCi1MSUI9JChUT1ApL2xpYmNyeXB0by5hCi1MSUJTUkM9cHF1ZXVlLmMKLUxJQk9CSj1wcXVldWUubwotCi1TUkM9ICQoTElCU1JDKQotCi1FWEhFQURFUj0gcHF1ZXVlLmggcHFfY29tcGF0LmgKLUhFQURFUj0JJChFWEhFQURFUikKLQotQUxMPSAgICAkKEdFTkVSQUwpICQoU1JDKSAkKEhFQURFUikKLQotdG9wOgotCShjZCAuLi8uLjsgJChNQUtFKSBESVJTPWNyeXB0byBTRElSUz0kKERJUikgc3ViX2FsbCkKLQotYWxsOglsaWIKLQotbGliOgkkKExJQk9CSikKLQkkKEFSWCkgJChMSUIpICQoTElCT0JKKQotCSQoUkFOTElCKSAkKExJQikgfHwgZWNobyBOZXZlciBtaW5kLgotCUB0b3VjaCBsaWIKLQotZmlsZXM6Ci0JJChQRVJMKSAkKFRPUCkvdXRpbC9maWxlcy5wbCBNYWtlZmlsZSA+PiAkKFRPUCkvTUlORk8KLQotbGlua3M6Ci0JQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL2luY2x1ZGUvb3BlbnNzbCAkKEVYSEVBREVSKQotCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi90ZXN0ICQoVEVTVCkKLQlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vYXBwcyAkKEFQUFMpCi0KLWluc3RhbGw6Ci0JQFsgLW4gIiQoSU5TVEFMTFRPUCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHRvcCBNYWtlZmlsZS4uLgotCUBoZWFkZXJsaXN0PSIkKEVYSEVBREVSKSI7IGZvciBpIGluICQkaGVhZGVybGlzdCA7IFwKLQlkbyAgXAotCShjcCAkJGkgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGk7IFwKLQljaG1vZCA2NDQgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGkgKTsgXAotCWRvbmU7Ci0KLXRhZ3M6Ci0JY3RhZ3MgJChTUkMpCi0KLXRlc3RzOgotCi1saW50OgotCWxpbnQgLURMSU5UICQoSU5DTFVERVMpICQoU1JDKT5mbHVmZgotCi1kZXBlbmQ6Ci0JQFsgLW4gIiQoTUFLRURFUEVORCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHVwcGVyIE1ha2VmaWxlLi4uCi0JJChNQUtFREVQRU5EKSAtLSAkKENGTEFHKSAkKElOQ0xVREVTKSAkKERFUEZMQUcpIC0tICQoUFJPR1MpICQoTElCU1JDKQotCi1kY2xlYW46Ci0JJChQRVJMKSAtcGUgJ2lmICgvXiMgRE8gTk9UIERFTEVURSBUSElTIExJTkUvKSB7cHJpbnQ7IGV4aXQoMCk7fScgJChNQUtFRklMRSkgPk1ha2VmaWxlLm5ldwotCW12IC1mIE1ha2VmaWxlLm5ldyAkKE1BS0VGSUxFKQotCi1jbGVhbjoKLQlybSAtZiAqLm8gKi5vYmogbGliIHRhZ3MgY29yZSAucHVyZSAubmZzKiAqLm9sZCAqLmJhayBmbHVmZgotCi0jIERPIE5PVCBERUxFVEUgVEhJUyBMSU5FIC0tIG1ha2UgZGVwZW5kIGRlcGVuZHMgb24gaXQuCi0KLXBxdWV1ZS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oCi1wcXVldWUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotcHF1ZXVlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotcHF1ZXVlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1wcXVldWUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXBxdWV1ZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcHFfY29tcGF0LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1wcXVldWUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLXBxdWV1ZS5vOiAuLi9jcnlwdGxpYi5oIHBxdWV1ZS5jIHBxdWV1ZS5oCmRpZmYgLS1naXQgYS9jcnlwdG8vcHF1ZXVlL3BxX2NvbXBhdC5oIGIvY3J5cHRvL3BxdWV1ZS9wcV9jb21wYXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2IyYzMyNy4uMDAwMDAwMAotLS0gYS9jcnlwdG8vcHF1ZXVlL3BxX2NvbXBhdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTUyICswLDAgQEAKLS8qIGNyeXB0by9wcXVldWUvcHF1ZXVlX2NvbXBhdC5oICovCi0vKiAKLSAqIERUTFMgaW1wbGVtZW50YXRpb24gd3JpdHRlbiBieSBOYWdlbmRyYSBNb2RhZHVndQotICogKG5hZ2VuZHJhQGNzLnN0YW5mb3JkLmVkdSkgZm9yIHRoZSBPcGVuU1NMIHByb2plY3QgMjAwNS4gIAotICovCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0gKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0gKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0gKgotICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0gKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotICogICAgb3BlbnNzbC1jb3JlQE9wZW5TU0wub3JnLgotICoKLSAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotICoKLSAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSAqICAgIGFja25vd2xlZGdtZW50OgotICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0gKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKgotICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCi0gKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCi0gKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSAqCi0gKi8KLQotI2lmbmRlZiBIRUFERVJfUFFfQ09NUEFUX0gKLSNkZWZpbmUgSEVBREVSX1BRX0NPTVBBVF9ICi0KLSNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+Ci0jaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotCi0vKiAKLSAqIFRoZSBwdXJwb3NlIG9mIHRoaXMgaGVhZGVyIGZpbGUgaXMgZm9yIHN1cHBvcnRpbmcgNjQtYml0IGludGVnZXIKLSAqIG1hbmlwdWxhdGlvbiBvbiAzMi1iaXQgKGFuZCBsb3dlcikgbWFjaGluZXMuICBDdXJyZW50bHkgdGhlIG9ubHkKLSAqIHN1Y2ggZW52aXJvbm1lbnQgaXMgVk1TLCBVdHJpeCBhbmQgdGhvc2Ugd2l0aCBzbWFsbGVyIGRlZmF1bHQgaW50ZWdlcgotICogc2l6ZXMgdGhhbiAzMiBiaXRzLiAgRm9yIGFsbCBzdWNoIGVudmlyb25tZW50LCB3ZSBmYWxsIGJhY2sgdG8gdXNpbmcKLSAqIEJJR05VTS4gIFdlIG1heSBuZWVkIHRvIGZpbmUgdHVuZSB0aGUgY29uZGl0aW9ucyBmb3Igc3lzdGVtcyB0aGF0Ci0gKiBhcmUgaW5jb3JyZWN0bHkgY29uZmlndXJlZC4KLSAqCi0gKiBUaGUgb25seSBjbGllbnRzIG9mIHRoaXMgY29kZSBhcmUgKDEpIHBxdWV1ZSBmb3IgcHJpb3JpdHksIGFuZAotICogKDIpIERUTFMsIGZvciBzZXF1ZW5jZSBudW1iZXIgbWFuaXB1bGF0aW9uLgotICovCi0KLSNpZiAoZGVmaW5lZChUSElSVFlfVFdPX0JJVCkgJiYgIWRlZmluZWQoQk5fTExPTkcpKSB8fCBkZWZpbmVkKFNJWFRFRU5fQklUKSB8fCBkZWZpbmVkKEVJR0hUX0JJVCkKLQotI2RlZmluZSBQUV82NEJJVF9JU19JTlRFR0VSIDAKLSNkZWZpbmUgUFFfNjRCSVRfSVNfQklHTlVNIDEKLQotI2RlZmluZSBQUV82NEJJVCAgICAgQklHTlVNCi0jZGVmaW5lIFBRXzY0QklUX0NUWCBCTl9DVFgKLQotI2RlZmluZSBwcV82NGJpdF9pbml0KHgpICAgICAgICAgICBCTl9pbml0KHgpCi0jZGVmaW5lIHBxXzY0Yml0X2ZyZWUoeCkgICAgICAgICAgIEJOX2ZyZWUoeCkKLQotI2RlZmluZSBwcV82NGJpdF9jdHhfbmV3KGN0eCkgICAgICBCTl9DVFhfbmV3KCkKLSNkZWZpbmUgcHFfNjRiaXRfY3R4X2ZyZWUoeCkgICAgICAgQk5fQ1RYX2ZyZWUoeCkKLQotI2RlZmluZSBwcV82NGJpdF9hc3NpZ24oeCwgeSkgICAgICBCTl9jb3B5KHgsIHkpCi0jZGVmaW5lIHBxXzY0Yml0X2Fzc2lnbl93b3JkKHgsIHkpIEJOX3NldF93b3JkKHgsIHkpCi0jZGVmaW5lIHBxXzY0Yml0X2d0KHgsIHkpICAgICAgICAgIEJOX3VjbXAoeCwgeSkgPj0gMSA/IDEgOiAwCi0jZGVmaW5lIHBxXzY0Yml0X2VxKHgsIHkpICAgICAgICAgIEJOX3VjbXAoeCwgeSkgPT0gMCA/IDEgOiAwCi0jZGVmaW5lIHBxXzY0Yml0X2FkZF93b3JkKHgsIHcpICAgIEJOX2FkZF93b3JkKHgsIHcpCi0jZGVmaW5lIHBxXzY0Yml0X3N1YihyLCB4LCB5KSAgICAgIEJOX3N1YihyLCB4LCB5KQotI2RlZmluZSBwcV82NGJpdF9zdWJfd29yZCh4LCB3KSAgICBCTl9zdWJfd29yZCh4LCB3KQotI2RlZmluZSBwcV82NGJpdF9tb2QociwgeCwgbiwgY3R4KSBCTl9tb2QociwgeCwgbiwgY3R4KQotCi0jZGVmaW5lIHBxXzY0Yml0X2JpbjJudW0oYm4sIGJ5dGVzLCBsZW4pICAgQk5fYmluMmJuKGJ5dGVzLCBsZW4sIGJuKQotI2RlZmluZSBwcV82NGJpdF9udW0yYmluKGJuLCBieXRlcykgICAgICAgIEJOX2JuMmJpbihibiwgYnl0ZXMpCi0jZGVmaW5lIHBxXzY0Yml0X2dldF93b3JkKHgpICAgICAgICAgICAgICAgQk5fZ2V0X3dvcmQoeCkKLSNkZWZpbmUgcHFfNjRiaXRfaXNfYml0X3NldCh4LCBvZmZzZXQpICAgICBCTl9pc19iaXRfc2V0KHgsIG9mZnNldCkKLSNkZWZpbmUgcHFfNjRiaXRfbHNoaWZ0KHIsIHgsIHNoaWZ0KSAgICAgICBCTl9sc2hpZnQociwgeCwgc2hpZnQpCi0jZGVmaW5lIHBxXzY0Yml0X3NldF9iaXQoeCwgbnVtKSAgICAgICAgICAgQk5fc2V0X2JpdCh4LCBudW0pCi0jZGVmaW5lIHBxXzY0Yml0X2dldF9sZW5ndGgoeCkgICAgICAgICAgICAgQk5fbnVtX2JpdHMoKHgpKQotCi0jZWxzZQotCi0jZGVmaW5lIFBRXzY0QklUX0lTX0lOVEVHRVIgMQotI2RlZmluZSBQUV82NEJJVF9JU19CSUdOVU0gMAotCi0jaWYgZGVmaW5lZChTSVhUWV9GT1VSX0JJVCkKLSNkZWZpbmUgUFFfNjRCSVQgQk5fVUxPTkcKLSNkZWZpbmUgUFFfNjRCSVRfUFJJTlQgIiVsbGQiCi0jZWxpZiBkZWZpbmVkKFNJWFRZX0ZPVVJfQklUX0xPTkcpCi0jZGVmaW5lIFBRXzY0QklUIEJOX1VMT05HCi0jZGVmaW5lIFBRXzY0QklUX1BSSU5UICIlbGQiCi0jZWxpZiBkZWZpbmVkKFRISVJUWV9UV09fQklUKQotI2RlZmluZSBQUV82NEJJVCBCTl9VTExPTkcKLSNkZWZpbmUgUFFfNjRCSVRfUFJJTlQgIiVsbGQiCi0jZW5kaWYKLQotI2RlZmluZSBQUV82NEJJVF9DVFggICAgICB2b2lkCi0KLSNkZWZpbmUgcHFfNjRiaXRfaW5pdCh4KQotI2RlZmluZSBwcV82NGJpdF9mcmVlKHgpCi0jZGVmaW5lIHBxXzY0Yml0X2N0eF9uZXcoY3R4KSAgICAgICAgKGN0eCkKLSNkZWZpbmUgcHFfNjRiaXRfY3R4X2ZyZWUoeCkKLQotI2RlZmluZSBwcV82NGJpdF9hc3NpZ24oeCwgeSkgICAgICAgICgqKHgpID0gKih5KSkKLSNkZWZpbmUgcHFfNjRiaXRfYXNzaWduX3dvcmQoeCwgeSkgICAoKih4KSA9IHkpCi0jZGVmaW5lIHBxXzY0Yml0X2d0KHgsIHkpCSAgICAgICAgICgqKHgpID4gKih5KSkKLSNkZWZpbmUgcHFfNjRiaXRfZXEoeCwgeSkgICAgICAgICAgICAoKih4KSA9PSAqKHkpKQotI2RlZmluZSBwcV82NGJpdF9hZGRfd29yZCh4LCB3KSAgICAgICgqKHgpID0gKCooeCkgKyAodykpKQotI2RlZmluZSBwcV82NGJpdF9zdWIociwgeCwgeSkgICAgICAgICgqKHIpID0gKCooeCkgLSAqKHkpKSkKLSNkZWZpbmUgcHFfNjRiaXRfc3ViX3dvcmQoeCwgdykgICAgICAoKih4KSA9ICgqKHgpIC0gKHcpKSkKLSNkZWZpbmUgcHFfNjRiaXRfbW9kKHIsIHgsIG4sIGN0eCkKLQotI2RlZmluZSBwcV82NGJpdF9iaW4ybnVtKG51bSwgYnl0ZXMsIGxlbikgYnl0ZXNfdG9fbG9uZ19sb25nKGJ5dGVzLCBudW0pCi0jZGVmaW5lIHBxXzY0Yml0X251bTJiaW4obnVtLCBieXRlcykgICAgICBsb25nX2xvbmdfdG9fYnl0ZXMobnVtLCBieXRlcykKLSNkZWZpbmUgcHFfNjRiaXRfZ2V0X3dvcmQoeCkgICAgICAgICAgICAgICooeCkKLSNkZWZpbmUgcHFfNjRiaXRfbHNoaWZ0KHIsIHgsIHNoaWZ0KSAgICAgICgqKHIpID0gKCooeCkgPDwgKHNoaWZ0KSkpCi0jZGVmaW5lIHBxXzY0Yml0X3NldF9iaXQoeCwgbnVtKSAgICAgICAgICBkbyB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUV82NEJJVCBtYXNrID0gMTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2sgPSBtYXNrIDw8IChudW0pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKih4KSB8PSBtYXNrOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCi0jZW5kaWYgLyogT1BFTlNTTF9TWVNfVk1TICovCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvY3J5cHRvL3BxdWV1ZS9wcXVldWUuYyBiL2NyeXB0by9wcXVldWUvcHF1ZXVlLmMKaW5kZXggNmM4OWYwNi4uOTlhNmZiOCAxMDA2NDQKLS0tIGEvY3J5cHRvL3BxdWV1ZS9wcXVldWUuYworKysgYi9jcnlwdG8vcHF1ZXVlL3BxdWV1ZS5jCkBAIC02OCwxMyArNjgsMTIgQEAKIAl9IHBxdWV1ZV9zOwogCiBwaXRlbSAqCi1waXRlbV9uZXcoUFFfNjRCSVQgcHJpb3JpdHksIHZvaWQgKmRhdGEpCitwaXRlbV9uZXcodW5zaWduZWQgY2hhciAqcHJpbzY0YmUsIHZvaWQgKmRhdGEpCiAJewogCXBpdGVtICppdGVtID0gKHBpdGVtICopIE9QRU5TU0xfbWFsbG9jKHNpemVvZihwaXRlbSkpOwogCWlmIChpdGVtID09IE5VTEwpIHJldHVybiBOVUxMOwogCi0JcHFfNjRiaXRfaW5pdCgmKGl0ZW0tPnByaW9yaXR5KSk7Ci0JcHFfNjRiaXRfYXNzaWduKCZpdGVtLT5wcmlvcml0eSwgJnByaW9yaXR5KTsKKwltZW1jcHkoaXRlbS0+cHJpb3JpdHkscHJpbzY0YmUsc2l6ZW9mKGl0ZW0tPnByaW9yaXR5KSk7CiAKIAlpdGVtLT5kYXRhID0gZGF0YTsKIAlpdGVtLT5uZXh0ID0gTlVMTDsKQEAgLTg3LDcgKzg2LDYgQEAKIAl7CiAJaWYgKGl0ZW0gPT0gTlVMTCkgcmV0dXJuOwogCi0JcHFfNjRiaXRfZnJlZSgmKGl0ZW0tPnByaW9yaXR5KSk7CiAJT1BFTlNTTF9mcmVlKGl0ZW0pOwogCX0KIApAQCAtMTI0LDcgKzEyMiwxMCBAQAogCQluZXh0ICE9IE5VTEw7CiAJCWN1cnIgPSBuZXh0LCBuZXh0ID0gbmV4dC0+bmV4dCkKIAkJewotCQlpZiAocHFfNjRiaXRfZ3QoJihuZXh0LT5wcmlvcml0eSksICYoaXRlbS0+cHJpb3JpdHkpKSkKKwkJLyogd2UgY2FuIGNvbXBhcmUgNjQtYml0IHZhbHVlIGluIGJpZy1lbmRpYW4gZW5jb2RpbmcKKwkJICogd2l0aCBtZW1jbXA6LSkgKi8KKwkJaW50IGNtcCA9IG1lbWNtcChuZXh0LT5wcmlvcml0eSwgaXRlbS0+cHJpb3JpdHksOCk7CisJCWlmIChjbXAgPiAwKQkJLyogbmV4dCA+IGl0ZW0gKi8KIAkJCXsKIAkJCWl0ZW0tPm5leHQgPSBuZXh0OwogCkBAIC0xMzUsOCArMTM2LDggQEAKIAogCQkJcmV0dXJuIGl0ZW07CiAJCQl9Ci0JCS8qIGR1cGxpY2F0ZXMgbm90IGFsbG93ZWQgKi8KLQkJaWYgKHBxXzY0Yml0X2VxKCYoaXRlbS0+cHJpb3JpdHkpLCAmKG5leHQtPnByaW9yaXR5KSkpCisJCQorCQllbHNlIGlmIChjbXAgPT0gMCkJLyogZHVwbGljYXRlcyBub3QgYWxsb3dlZCAqLwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KIApAQCAtMTY0LDcgKzE2NSw3IEBACiAJfQogCiBwaXRlbSAqCi1wcXVldWVfZmluZChwcXVldWVfcyAqcHEsIFBRXzY0QklUIHByaW9yaXR5KQorcHF1ZXVlX2ZpbmQocHF1ZXVlX3MgKnBxLCB1bnNpZ25lZCBjaGFyICpwcmlvNjRiZSkKIAl7CiAJcGl0ZW0gKm5leHQsICpwcmV2ID0gTlVMTDsKIAlwaXRlbSAqZm91bmQgPSBOVUxMOwpAQCAtMTc1LDcgKzE3Niw3IEBACiAJZm9yICggbmV4dCA9IHBxLT5pdGVtczsgbmV4dC0+bmV4dCAhPSBOVUxMOyAKIAkJICBwcmV2ID0gbmV4dCwgbmV4dCA9IG5leHQtPm5leHQpCiAJCXsKLQkJaWYgKCBwcV82NGJpdF9lcSgmKG5leHQtPnByaW9yaXR5KSwgJnByaW9yaXR5KSkKKwkJaWYgKCBtZW1jbXAobmV4dC0+cHJpb3JpdHksIHByaW82NGJlLDgpID09IDApCiAJCQl7CiAJCQlmb3VuZCA9IG5leHQ7CiAJCQlicmVhazsKQEAgLTE4Myw3ICsxODQsNyBAQAogCQl9CiAJCiAJLyogY2hlY2sgdGhlIG9uZSBsYXN0IG5vZGUgKi8KLQlpZiAoIHBxXzY0Yml0X2VxKCYobmV4dC0+cHJpb3JpdHkpLCAmcHJpb3JpdHkpKQorCWlmICggbWVtY21wKG5leHQtPnByaW9yaXR5LCBwcmlvNjRiZSw4KSA9PTApCiAJCWZvdW5kID0gbmV4dDsKIAogCWlmICggISBmb3VuZCkKQEAgLTE5OSw3ICsyMDAsNiBAQAogCXJldHVybiBmb3VuZDsKIAl9CiAKLSNpZiBQUV82NEJJVF9JU19JTlRFR0VSCiB2b2lkCiBwcXVldWVfcHJpbnQocHF1ZXVlX3MgKnBxKQogCXsKQEAgLTIwNywxMSArMjA3LDE0IEBACiAKIAl3aGlsZShpdGVtICE9IE5VTEwpCiAJCXsKLQkJcHJpbnRmKCJpdGVtXHQiIFBRXzY0QklUX1BSSU5UICJcbiIsIGl0ZW0tPnByaW9yaXR5KTsKKwkJcHJpbnRmKCJpdGVtXHQlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeFxuIiwKKwkJCWl0ZW0tPnByaW9yaXR5WzBdLGl0ZW0tPnByaW9yaXR5WzFdLAorCQkJaXRlbS0+cHJpb3JpdHlbMl0saXRlbS0+cHJpb3JpdHlbM10sCisJCQlpdGVtLT5wcmlvcml0eVs0XSxpdGVtLT5wcmlvcml0eVs1XSwKKwkJCWl0ZW0tPnByaW9yaXR5WzZdLGl0ZW0tPnByaW9yaXR5WzddKTsKIAkJaXRlbSA9IGl0ZW0tPm5leHQ7CiAJCX0KIAl9Ci0jZW5kaWYKIAogcGl0ZW0gKgogcHF1ZXVlX2l0ZXJhdG9yKHBxdWV1ZV9zICpwcSkKZGlmZiAtLWdpdCBhL2NyeXB0by9wcXVldWUvcHF1ZXVlLmggYi9jcnlwdG8vcHF1ZXVlL3BxdWV1ZS5oCmluZGV4IDE2YzQwNzIuLjg3ZmM5MDMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9wcXVldWUvcHF1ZXVlLmgKKysrIGIvY3J5cHRvL3BxdWV1ZS9wcXVldWUuaApAQCAtNjQsMjAgKzY0LDE4IEBACiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKLSNpbmNsdWRlIDxvcGVuc3NsL3BxX2NvbXBhdC5oPgotCiB0eXBlZGVmIHN0cnVjdCBfcHF1ZXVlICpwcXVldWU7CiAKIHR5cGVkZWYgc3RydWN0IF9waXRlbQogCXsKLQlQUV82NEJJVCBwcmlvcml0eTsKKwl1bnNpZ25lZCBjaGFyIHByaW9yaXR5WzhdOyAvKiA2NC1iaXQgdmFsdWUgaW4gYmlnLWVuZGlhbiBlbmNvZGluZyAqLwogCXZvaWQgKmRhdGE7CiAJc3RydWN0IF9waXRlbSAqbmV4dDsKIAl9IHBpdGVtOwogCiB0eXBlZGVmIHN0cnVjdCBfcGl0ZW0gKnBpdGVyYXRvcjsKIAotcGl0ZW0gKnBpdGVtX25ldyhQUV82NEJJVCBwcmlvcml0eSwgdm9pZCAqZGF0YSk7CitwaXRlbSAqcGl0ZW1fbmV3KHVuc2lnbmVkIGNoYXIgKnByaW82NGJlLCB2b2lkICpkYXRhKTsKIHZvaWQgICBwaXRlbV9mcmVlKHBpdGVtICppdGVtKTsKIAogcHF1ZXVlIHBxdWV1ZV9uZXcodm9pZCk7CkBAIC04Niw3ICs4NCw3IEBACiBwaXRlbSAqcHF1ZXVlX2luc2VydChwcXVldWUgcHEsIHBpdGVtICppdGVtKTsKIHBpdGVtICpwcXVldWVfcGVlayhwcXVldWUgcHEpOwogcGl0ZW0gKnBxdWV1ZV9wb3AocHF1ZXVlIHBxKTsKLXBpdGVtICpwcXVldWVfZmluZChwcXVldWUgcHEsIFBRXzY0QklUIHByaW9yaXR5KTsKK3BpdGVtICpwcXVldWVfZmluZChwcXVldWUgcHEsIHVuc2lnbmVkIGNoYXIgKnByaW82NGJlKTsKIHBpdGVtICpwcXVldWVfaXRlcmF0b3IocHF1ZXVlIHBxKTsKIHBpdGVtICpwcXVldWVfbmV4dChwaXRlcmF0b3IgKml0ZXIpOwogCmRpZmYgLS1naXQgYS9jcnlwdG8vcmFuZC9NYWtlZmlsZSBiL2NyeXB0by9yYW5kL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDc5NDMwLi4wMDAwMDAwCi0tLSBhL2NyeXB0by9yYW5kL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMTg3ICswLDAgQEAKLSMKLSMgT3BlblNTTC9jcnlwdG8vcmFuZC9NYWtlZmlsZQotIwotCi1ESVI9CXJhbmQKLVRPUD0JLi4vLi4KLUNDPQljYwotSU5DTFVERVM9Ci1DRkxBRz0tZwotTUFLRUZJTEU9CU1ha2VmaWxlCi1BUj0JCWFyIHIKLQotQ0ZMQUdTPSAkKElOQ0xVREVTKSAkKENGTEFHKQotCi1HRU5FUkFMPU1ha2VmaWxlCi1URVNUPSByYW5kdGVzdC5jCi1BUFBTPQotCi1MSUI9JChUT1ApL2xpYmNyeXB0by5hCi1MSUJTUkM9bWRfcmFuZC5jIHJhbmRmaWxlLmMgcmFuZF9saWIuYyByYW5kX2VuZy5jIHJhbmRfZXJyLmMgcmFuZF9lZ2QuYyBcCi0JcmFuZF93aW4uYyByYW5kX3VuaXguYyByYW5kX29zMi5jIHJhbmRfbncuYwotTElCT0JKPW1kX3JhbmQubyByYW5kZmlsZS5vIHJhbmRfbGliLm8gcmFuZF9lbmcubyByYW5kX2Vyci5vIHJhbmRfZWdkLm8gXAotCXJhbmRfd2luLm8gcmFuZF91bml4Lm8gcmFuZF9vczIubyByYW5kX253Lm8KLQotU1JDPSAkKExJQlNSQykKLQotRVhIRUFERVI9IHJhbmQuaAotSEVBREVSPQkkKEVYSEVBREVSKQotCi1BTEw9ICAgICQoR0VORVJBTCkgJChTUkMpICQoSEVBREVSKQotCi10b3A6Ci0JKGNkIC4uLy4uOyAkKE1BS0UpIERJUlM9Y3J5cHRvIFNESVJTPSQoRElSKSBzdWJfYWxsKQotCi1hbGw6CWxpYgotCi1saWI6CSQoTElCT0JKKQotCSQoQVJYKSAkKExJQikgJChMSUJPQkopCi0JJChSQU5MSUIpICQoTElCKSB8fCBlY2hvIE5ldmVyIG1pbmQuCi0JQHRvdWNoIGxpYgotCi1maWxlczoKLQkkKFBFUkwpICQoVE9QKS91dGlsL2ZpbGVzLnBsIE1ha2VmaWxlID4+ICQoVE9QKS9NSU5GTwotCi1saW5rczoKLQlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vaW5jbHVkZS9vcGVuc3NsICQoRVhIRUFERVIpCi0JQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL3Rlc3QgJChURVNUKQotCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9hcHBzICQoQVBQUykKLQotaW5zdGFsbDoKLQlAWyAtbiAiJChJTlNUQUxMVE9QKSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdG9wIE1ha2VmaWxlLi4uCi0JQGhlYWRlcmxpc3Q9IiQoRVhIRUFERVIpIjsgZm9yIGkgaW4gJCRoZWFkZXJsaXN0IDsgXAotCWRvICBcCi0JKGNwICQkaSAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaTsgXAotCWNobW9kIDY0NCAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaSApOyBcCi0JZG9uZTsKLQotdGFnczoKLQljdGFncyAkKFNSQykKLQotdGVzdHM6Ci0KLWxpbnQ6Ci0JbGludCAtRExJTlQgJChJTkNMVURFUykgJChTUkMpPmZsdWZmCi0KLWRlcGVuZDoKLQlAWyAtbiAiJChNQUtFREVQRU5EKSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdXBwZXIgTWFrZWZpbGUuLi4KLQkkKE1BS0VERVBFTkQpIC0tICQoQ0ZMQUcpICQoSU5DTFVERVMpICQoREVQRkxBRykgLS0gJChQUk9HUykgJChMSUJTUkMpCi0KLWRjbGVhbjoKLQkkKFBFUkwpIC1wZSAnaWYgKC9eIyBETyBOT1QgREVMRVRFIFRISVMgTElORS8pIHtwcmludDsgZXhpdCgwKTt9JyAkKE1BS0VGSUxFKSA+TWFrZWZpbGUubmV3Ci0JbXYgLWYgTWFrZWZpbGUubmV3ICQoTUFLRUZJTEUpCi0KLWNsZWFuOgotCXJtIC1mICoubyAqLm9iaiBsaWIgdGFncyBjb3JlIC5wdXJlIC5uZnMqICoub2xkICouYmFrIGZsdWZmCi0KLSMgRE8gTk9UIERFTEVURSBUSElTIExJTkUgLS0gbWFrZSBkZXBlbmQgZGVwZW5kcyBvbiBpdC4KLQotbWRfcmFuZC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotbWRfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1tZF9yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotbWRfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotbWRfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi1tZF9yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLW1kX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLW1kX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLW1kX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1tZF9yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIG1kX3JhbmQuYyByYW5kX2xjbC5oCi1yYW5kX2VnZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLXJhbmRfZWdkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1yYW5kX2VnZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCi1yYW5kX2VnZC5vOiByYW5kX2VnZC5jCi1yYW5kX2VuZy5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotcmFuZF9lbmcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotcmFuZF9lbmcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kZXMuaAotcmFuZF9lbmcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Rlc19vbGQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotcmFuZF9lbmcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotcmFuZF9lbmcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oCi1yYW5kX2VuZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1yYW5kX2VuZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaAotcmFuZF9lbmcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotcmFuZF9lbmcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotcmFuZF9lbmcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXJhbmRfZW5nLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKLXJhbmRfZW5nLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLXJhbmRfZW5nLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1yYW5kX2VuZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvdWkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvdWlfY29tcGF0LmgKLXJhbmRfZW5nLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmgKLXJhbmRfZW5nLm86IC4uL2NyeXB0bGliLmggcmFuZF9lbmcuYyByYW5kX2xjbC5oCi1yYW5kX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1yYW5kX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLXJhbmRfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1yYW5kX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotcmFuZF9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLXJhbmRfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1yYW5kX2Vyci5vOiByYW5kX2Vyci5jCi1yYW5kX2xpYi5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kZXMuaAotcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Rlc19vbGQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oCi1yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaAotcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXJhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKLXJhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLXJhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvdWkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvdWlfY29tcGF0LmgKLXJhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmgKLXJhbmRfbGliLm86IC4uL2NyeXB0bGliLmggcmFuZF9sY2wuaCByYW5kX2xpYi5jCi1yYW5kX253Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi1yYW5kX253Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXJhbmRfbncubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1yYW5kX253Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLXJhbmRfbncubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotcmFuZF9udy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLXJhbmRfbncubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLXJhbmRfbncubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAotcmFuZF9udy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCi1yYW5kX253Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1yYW5kX253Lm86IC4uL2NyeXB0bGliLmggcmFuZF9sY2wuaCByYW5kX253LmMKLXJhbmRfb3MyLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi1yYW5kX29zMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1yYW5kX29zMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLXJhbmRfb3MyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLXJhbmRfb3MyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLXJhbmRfb3MyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotcmFuZF9vczIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXJhbmRfb3MyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1yYW5kX29zMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotcmFuZF9vczIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1yYW5kX29zMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIHJhbmRfbGNsLmgKLXJhbmRfb3MyLm86IHJhbmRfb3MyLmMKLXJhbmRfdW5peC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotcmFuZF91bml4Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXJhbmRfdW5peC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLXJhbmRfdW5peC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1yYW5kX3VuaXgubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotcmFuZF91bml4Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotcmFuZF91bml4Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1yYW5kX3VuaXgubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXJhbmRfdW5peC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotcmFuZF91bml4Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotcmFuZF91bml4Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggcmFuZF9sY2wuaAotcmFuZF91bml4Lm86IHJhbmRfdW5peC5jCi1yYW5kX3dpbi5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotcmFuZF93aW4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotcmFuZF93aW4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1yYW5kX3dpbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1yYW5kX3dpbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1yYW5kX3dpbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLXJhbmRfd2luLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1yYW5kX3dpbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotcmFuZF93aW4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLXJhbmRfd2luLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotcmFuZF93aW4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCByYW5kX2xjbC5oCi1yYW5kX3dpbi5vOiByYW5kX3dpbi5jCi1yYW5kZmlsZS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1yYW5kZmlsZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLXJhbmRmaWxlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1yYW5kZmlsZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotcmFuZGZpbGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLXJhbmRmaWxlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1yYW5kZmlsZS5vOiByYW5kZmlsZS5jCmRpZmYgLS1naXQgYS9jcnlwdG8vcmFuZC9tZF9yYW5kLmMgYi9jcnlwdG8vcmFuZC9tZF9yYW5kLmMKaW5kZXggMGY4ZGQzZS4uODgwODhjZSAxMDA2NDQKLS0tIGEvY3J5cHRvL3JhbmQvbWRfcmFuZC5jCisrKyBiL2NyeXB0by9yYW5kL21kX3JhbmQuYwpAQCAtMTI2LDEwICsxMjYsNiBAQAogCiAjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KICNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotI2lmZGVmIE9QRU5TU0xfRklQUwotI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotI2VuZGlmCi0KIAogI2lmZGVmIEJOX0RFQlVHCiAjIGRlZmluZSBQUkVESUNUCkBAIC0xNDksNyArMTQ1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGhvbGRzIENSWVBUT19MT0NLX1JBTkQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICh0byBwcmV2ZW50IGRvdWJsZSBsb2NraW5nKSAqLwogLyogYWNjZXNzIHRvIGxvY2tpbl90aHJlYWQgaXMgc3luY2hyb25pemVkIGJ5IENSWVBUT19MT0NLX1JBTkQyICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBsb2NraW5nX3RocmVhZCA9IDA7IC8qIHZhbGlkIGlmZiBjcnlwdG9fbG9ja19yYW5kIGlzIHNldCAqLworc3RhdGljIENSWVBUT19USFJFQURJRCBsb2NraW5nX3RocmVhZGlkOyAvKiB2YWxpZCBpZmYgY3J5cHRvX2xvY2tfcmFuZCBpcyBzZXQgKi8KIAogCiAjaWZkZWYgUFJFRElDVApAQCAtMjE3LDggKzIxMywxMCBAQAogCS8qIGNoZWNrIGlmIHdlIGFscmVhZHkgaGF2ZSB0aGUgbG9jayAqLwogCWlmIChjcnlwdG9fbG9ja19yYW5kKQogCQl7CisJCUNSWVBUT19USFJFQURJRCBjdXI7CisJCUNSWVBUT19USFJFQURJRF9jdXJyZW50KCZjdXIpOwogCQlDUllQVE9fcl9sb2NrKENSWVBUT19MT0NLX1JBTkQyKTsKLQkJZG9fbm90X2xvY2sgPSAobG9ja2luZ190aHJlYWQgPT0gQ1JZUFRPX3RocmVhZF9pZCgpKTsKKwkJZG9fbm90X2xvY2sgPSAhQ1JZUFRPX1RIUkVBRElEX2NtcCgmbG9ja2luZ190aHJlYWRpZCwgJmN1cik7CiAJCUNSWVBUT19yX3VubG9jayhDUllQVE9fTE9DS19SQU5EMik7CiAJCX0KIAllbHNlCkBAIC0yNzQsOCArMjcyLDE2IEBACiAJCQl9CiAJCWVsc2UKIAkJCU1EX1VwZGF0ZSgmbSwmKHN0YXRlW3N0X2lkeF0pLGopOwotCQkJCisKKwkJLyogRE8gTk9UIFJFTU9WRSBUSEUgRk9MTE9XSU5HIENBTEwgVE8gTURfVXBkYXRlKCkhICovCiAJCU1EX1VwZGF0ZSgmbSxidWYsaik7CisJCS8qIFdlIGtub3cgdGhhdCBsaW5lIG1heSBjYXVzZSBwcm9ncmFtcyBzdWNoIGFzCisJCSAgIHB1cmlmeSBhbmQgdmFsZ3JpbmQgdG8gY29tcGxhaW4gYWJvdXQgdXNlIG9mCisJCSAgIHVuaW5pdGlhbGl6ZWQgZGF0YS4gIFRoZSBwcm9ibGVtIGlzIG5vdCwgaXQncworCQkgICB3aXRoIHRoZSBjYWxsZXIuICBSZW1vdmluZyB0aGF0IGxpbmUgd2lsbCBtYWtlCisJCSAgIHN1cmUgeW91IGdldCByZWFsbHkgYmFkIHJhbmRvbW5lc3MgYW5kIHRoZXJlYnkKKwkJICAgb3RoZXIgcHJvYmxlbXMgc3VjaCBhcyB2ZXJ5IGluc2VjdXJlIGtleXMuICovCisKIAkJTURfVXBkYXRlKCZtLCh1bnNpZ25lZCBjaGFyICopJihtZF9jWzBdKSxzaXplb2YobWRfYykpOwogCQlNRF9GaW5hbCgmbSxsb2NhbF9tZCk7CiAJCW1kX2NbMV0rKzsKQEAgLTMzNiwxNCArMzQyLDYgQEAKICNlbmRpZgogCWludCBkb19zdGlyX3Bvb2wgPSAwOwogCi0jaWZkZWYgT1BFTlNTTF9GSVBTCi0JaWYoRklQU19tb2RlKCkpCi0JICAgIHsKLQkgICAgRklQU2VycihGSVBTX0ZfU1NMRUFZX1JBTkRfQllURVMsRklQU19SX05PTl9GSVBTX01FVEhPRCk7Ci0JICAgIHJldHVybiAwOwotCSAgICB9Ci0jZW5kaWYKLQogI2lmZGVmIFBSRURJQ1QKIAlpZiAocmFuZF9wcmVkaWN0YWJsZSkKIAkJewpAQCAtMzg0LDcgKzM4Miw3IEBACiAKIAkvKiBwcmV2ZW50IHNzbGVheV9yYW5kX2J5dGVzKCkgZnJvbSB0cnlpbmcgdG8gb2J0YWluIHRoZSBsb2NrIGFnYWluICovCiAJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19SQU5EMik7Ci0JbG9ja2luZ190aHJlYWQgPSBDUllQVE9fdGhyZWFkX2lkKCk7CisJQ1JZUFRPX1RIUkVBRElEX2N1cnJlbnQoJmxvY2tpbmdfdGhyZWFkaWQpOwogCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5EMik7CiAJY3J5cHRvX2xvY2tfcmFuZCA9IDE7CiAKQEAgLTQ3Niw5ICs0NzQsMTUgQEAKICNlbmRpZgogCQlNRF9VcGRhdGUoJm0sbG9jYWxfbWQsTURfRElHRVNUX0xFTkdUSCk7CiAJCU1EX1VwZGF0ZSgmbSwodW5zaWduZWQgY2hhciAqKSYobWRfY1swXSksc2l6ZW9mKG1kX2MpKTsKLSNpZm5kZWYgUFVSSUZZCi0JCU1EX1VwZGF0ZSgmbSxidWYsaik7IC8qIHB1cmlmeSBjb21wbGFpbnMgKi8KKworI2lmbmRlZiBQVVJJRlkgLyogcHVyaWZ5IGNvbXBsYWlucyAqLworCQkvKiBETyBOT1QgUkVNT1ZFIFRIRSBGT0xMT1dJTkcgQ0FMTCBUTyBNRF9VcGRhdGUoKSEgKi8KKwkJTURfVXBkYXRlKCZtLGJ1ZixqKTsKKwkJLyogV2Uga25vdyB0aGF0IGxpbmUgbWF5IGNhdXNlIHByb2dyYW1zIHN1Y2ggYXMKKwkJICAgcHVyaWZ5IGFuZCB2YWxncmluZCB0byBjb21wbGFpbiBhYm91dCB1c2Ugb2YKKwkJICAgdW5pbml0aWFsaXplZCBkYXRhLiAgKi8KICNlbmRpZgorCiAJCWs9KHN0X2lkeCtNRF9ESUdFU1RfTEVOR1RILzIpLXN0X251bTsKIAkJaWYgKGsgPiAwKQogCQkJewpAQCAtNTM5LDE1ICs1NDMsMTcgQEAKIAogc3RhdGljIGludCBzc2xlYXlfcmFuZF9zdGF0dXModm9pZCkKIAl7CisJQ1JZUFRPX1RIUkVBRElEIGN1cjsKIAlpbnQgcmV0OwogCWludCBkb19ub3RfbG9jazsKIAorCUNSWVBUT19USFJFQURJRF9jdXJyZW50KCZjdXIpOwogCS8qIGNoZWNrIGlmIHdlIGFscmVhZHkgaGF2ZSB0aGUgbG9jawogCSAqIChjb3VsZCBoYXBwZW4gaWYgYSBSQU5EX3BvbGwoKSBpbXBsZW1lbnRhdGlvbiBjYWxscyBSQU5EX3N0YXR1cygpKSAqLwogCWlmIChjcnlwdG9fbG9ja19yYW5kKQogCQl7CiAJCUNSWVBUT19yX2xvY2soQ1JZUFRPX0xPQ0tfUkFORDIpOwotCQlkb19ub3RfbG9jayA9IChsb2NraW5nX3RocmVhZCA9PSBDUllQVE9fdGhyZWFkX2lkKCkpOworCQlkb19ub3RfbG9jayA9ICFDUllQVE9fVEhSRUFESURfY21wKCZsb2NraW5nX3RocmVhZGlkLCAmY3VyKTsKIAkJQ1JZUFRPX3JfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQyKTsKIAkJfQogCWVsc2UKQEAgLTU1OSw3ICs1NjUsNyBAQAogCQkKIAkJLyogcHJldmVudCBzc2xlYXlfcmFuZF9ieXRlcygpIGZyb20gdHJ5aW5nIHRvIG9idGFpbiB0aGUgbG9jayBhZ2FpbiAqLwogCQlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1JBTkQyKTsKLQkJbG9ja2luZ190aHJlYWQgPSBDUllQVE9fdGhyZWFkX2lkKCk7CisJCUNSWVBUT19USFJFQURJRF9jcHkoJmxvY2tpbmdfdGhyZWFkaWQsICZjdXIpOwogCQlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORDIpOwogCQljcnlwdG9fbG9ja19yYW5kID0gMTsKIAkJfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL3JhbmQvcmFuZC5oIGIvY3J5cHRvL3JhbmQvcmFuZC5oCmluZGV4IGVhODkxNTMuLmFjNmMwMjEgMTAwNjQ0Ci0tLSBhL2NyeXB0by9yYW5kL3JhbmQuaAorKysgYi9jcnlwdG8vcmFuZC9yYW5kLmgKQEAgLTcyLDcgKzcyLDcgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChPUEVOU1NMX0ZJUFMpCi0jZGVmaW5lIEZJUFNfUkFORF9TSVpFX1QgaW50CisjZGVmaW5lIEZJUFNfUkFORF9TSVpFX1Qgc2l6ZV90CiAjZW5kaWYKIAogLyogQWxyZWFkeSBkZWZpbmVkIGluIG9zc2xfdHlwLmggKi8KQEAgLTExMSwxNSArMTExLDYgQEAKIGludCBSQU5EX2VnZChjb25zdCBjaGFyICpwYXRoKTsKIGludCBSQU5EX2VnZF9ieXRlcyhjb25zdCBjaGFyICpwYXRoLGludCBieXRlcyk7CiBpbnQgUkFORF9wb2xsKHZvaWQpOwotI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQotI2lmZGVmIE9QRU5TU0xfRklQUwotdm9pZCBpbnRfUkFORF9pbml0X2VuZ2luZV9jYWxsYmFja3Modm9pZCk7Ci12b2lkIGludF9SQU5EX3NldF9jYWxsYmFja3MoCi0JaW50ICgqc2V0X3JhbmRfZnVuYykoY29uc3QgUkFORF9NRVRIT0QgKm1ldGgsCi0JCQkJCQljb25zdCBSQU5EX01FVEhPRCAqKnBtZXRoKSwKLQljb25zdCBSQU5EX01FVEhPRCAqKCpnZXRfcmFuZF9mdW5jKShjb25zdCBSQU5EX01FVEhPRCAqKnBtZXRoKSk7Ci0jZW5kaWYKLSNlbmRpZgogCiAjaWYgZGVmaW5lZChPUEVOU1NMX1NZU19XSU5ET1dTKSB8fCBkZWZpbmVkKE9QRU5TU0xfU1lTX1dJTjMyKQogCkBAIC0xMzcsMjkgKzEyOCwxMSBAQAogLyogRXJyb3IgY29kZXMgZm9yIHRoZSBSQU5EIGZ1bmN0aW9ucy4gKi8KIAogLyogRnVuY3Rpb24gY29kZXMuICovCi0jZGVmaW5lIFJBTkRfRl9FTkdfUkFORF9HRVRfUkFORF9NRVRIT0QJCQkgMTA4Ci0jZGVmaW5lIFJBTkRfRl9GSVBTX1JBTkQJCQkJIDEwMwotI2RlZmluZSBSQU5EX0ZfRklQU19SQU5EX0JZVEVTCQkJCSAxMDIKLSNkZWZpbmUgUkFORF9GX0ZJUFNfUkFORF9HRVRfUkFORF9NRVRIT0QJCSAxMDkKLSNkZWZpbmUgUkFORF9GX0ZJUFNfUkFORF9TRVRfRFQJCQkJIDEwNgotI2RlZmluZSBSQU5EX0ZfRklQU19TRVRfRFQJCQkJIDEwNAotI2RlZmluZSBSQU5EX0ZfRklQU19TRVRfUFJOR19TRUVECQkJIDEwNwotI2RlZmluZSBSQU5EX0ZfRklQU19TRVRfVEVTVF9NT0RFCQkJIDEwNQogI2RlZmluZSBSQU5EX0ZfUkFORF9HRVRfUkFORF9NRVRIT0QJCQkgMTAxCiAjZGVmaW5lIFJBTkRfRl9TU0xFQVlfUkFORF9CWVRFUwkJCSAxMDAKIAogLyogUmVhc29uIGNvZGVzLiAqLwotI2RlZmluZSBSQU5EX1JfTk9OX0ZJUFNfTUVUSE9ECQkJCSAxMDUKLSNkZWZpbmUgUkFORF9SX05PVF9JTl9URVNUX01PREUJCQkJIDEwNgotI2RlZmluZSBSQU5EX1JfTk9fS0VZX1NFVAkJCQkgMTA3Ci0jZGVmaW5lIFJBTkRfUl9QUk5HX0FTS0lOR19GT1JfVE9PX01VQ0gJCQkgMTAxCi0jZGVmaW5lIFJBTkRfUl9QUk5HX0VSUk9SCQkJCSAxMDgKLSNkZWZpbmUgUkFORF9SX1BSTkdfS0VZRUQJCQkJIDEwOQotI2RlZmluZSBSQU5EX1JfUFJOR19OT1RfUkVLRVlFRAkJCQkgMTAyCi0jZGVmaW5lIFJBTkRfUl9QUk5HX05PVF9SRVNFRURFRAkJCSAxMDMKICNkZWZpbmUgUkFORF9SX1BSTkdfTk9UX1NFRURFRAkJCQkgMTAwCi0jZGVmaW5lIFJBTkRfUl9QUk5HX1NFRURfTVVTVF9OT1RfTUFUQ0hfS0VZCQkgMTEwCi0jZGVmaW5lIFJBTkRfUl9QUk5HX1NUVUNLCQkJCSAxMDQKIAogI2lmZGVmICBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL3JhbmQvcmFuZF9lZ2QuYyBiL2NyeXB0by9yYW5kL3JhbmRfZWdkLmMKaW5kZXggNTBiY2U2Yy4uZDUzYjkxNiAxMDA2NDQKLS0tIGEvY3J5cHRvL3JhbmQvcmFuZF9lZ2QuYworKysgYi9jcnlwdG8vcmFuZC9yYW5kX2VnZC5jCkBAIC05NSw3ICs5NSw3IEBACiAgKiAgIFJBTkRfZWdkKCkgaXMgYSB3cmFwcGVyIGZvciBSQU5EX2VnZF9ieXRlcygpIHdpdGggbnVtYnl0ZXM9MjU1LgogICovCiAKLSNpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX1dJTjMyKSB8fCBkZWZpbmVkKE9QRU5TU0xfU1lTX1ZNUykgfHwgZGVmaW5lZChPUEVOU1NMX1NZU19NU0RPUykgfHwgZGVmaW5lZChPUEVOU1NMX1NZU19WWFdPUktTKSB8fCBkZWZpbmVkKE9QRU5TU0xfU1lTX05FVFdBUkUpIHx8IGRlZmluZWQoT1BFTlNTTF9TWVNfVk9TKQorI2lmIGRlZmluZWQoT1BFTlNTTF9TWVNfV0lOMzIpIHx8IGRlZmluZWQoT1BFTlNTTF9TWVNfVk1TKSB8fCBkZWZpbmVkKE9QRU5TU0xfU1lTX01TRE9TKSB8fCBkZWZpbmVkKE9QRU5TU0xfU1lTX1ZYV09SS1MpIHx8IGRlZmluZWQoT1BFTlNTTF9TWVNfTkVUV0FSRSkgfHwgZGVmaW5lZChPUEVOU1NMX1NZU19WT1MpIHx8IGRlZmluZWQoT1BFTlNTTF9TWVNfQkVPUykKIGludCBSQU5EX3F1ZXJ5X2VnZF9ieXRlcyhjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBieXRlcykKIAl7CiAJcmV0dXJuKC0xKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9yYW5kL3JhbmRfZW5nLmMgYi9jcnlwdG8vcmFuZC9yYW5kX2VuZy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjY5Y2VmLi4wMDAwMDAwCi0tLSBhL2NyeXB0by9yYW5kL3JhbmRfZW5nLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTIgKzAsMCBAQAotLyogY3J5cHRvL3JhbmQvcmFuZF9saWIuYyAqLwotLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgotICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgotICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgotICogCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKLSAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKLSAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgotICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcwotICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0gKiAKLSAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCi0gKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCi0gKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCi0gKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgotICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCi0gKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5Ci0gKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgotICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5Ci0gKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KLSAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAotICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKLSAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqIAotICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKLSAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQotICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQotICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDx0aW1lLmg+Ci0jaW5jbHVkZSAiY3J5cHRsaWIuaCIKLSNpbmNsdWRlICJyYW5kX2xjbC5oIgotI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotI2lmZGVmIE9QRU5TU0xfRklQUwotI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+Ci0jZW5kaWYKLQotI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQotI2luY2x1ZGUgPG9wZW5zc2wvZW5naW5lLmg+Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoT1BFTlNTTF9GSVBTKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX0VOR0lORSkKLQotLyogbm9uLU5VTEwgaWYgZGVmYXVsdF9SQU5EX21ldGggaXMgRU5HSU5FLXByb3ZpZGVkICovCi1zdGF0aWMgRU5HSU5FICpmdW5jdF9yZWYgPU5VTEw7Ci0KLWludCBlbmdfUkFORF9zZXRfcmFuZF9tZXRob2QoY29uc3QgUkFORF9NRVRIT0QgKm1ldGgsIGNvbnN0IFJBTkRfTUVUSE9EICoqcG1ldGgpCi0JewotCWlmKGZ1bmN0X3JlZikKLQkJewotCQlFTkdJTkVfZmluaXNoKGZ1bmN0X3JlZik7Ci0JCWZ1bmN0X3JlZiA9IE5VTEw7Ci0JCX0KLQkqcG1ldGggPSBtZXRoOwotCXJldHVybiAxOwotCX0KLQotY29uc3QgUkFORF9NRVRIT0QgKmVuZ19SQU5EX2dldF9yYW5kX21ldGhvZChjb25zdCBSQU5EX01FVEhPRCAqKnBtZXRoKQotCXsKLQlpZiAoISpwbWV0aCkKLQkJewotCQlFTkdJTkUgKmUgPSBFTkdJTkVfZ2V0X2RlZmF1bHRfUkFORCgpOwotCQlpZihlKQotCQkJewotCQkJKnBtZXRoID0gRU5HSU5FX2dldF9SQU5EKGUpOwotCQkJaWYoISpwbWV0aCkKLQkJCQl7Ci0JCQkJRU5HSU5FX2ZpbmlzaChlKTsKLQkJCQllID0gTlVMTDsKLQkJCQl9Ci0JCQl9Ci0JCWlmKGUpCi0JCQlmdW5jdF9yZWYgPSBlOwotCQllbHNlCi0JCQlpZihGSVBTX21vZGUoKSkKLQkJCQkqcG1ldGg9RklQU19yYW5kX21ldGhvZCgpOwotCQkJZWxzZQotCQkJKnBtZXRoID0gUkFORF9TU0xlYXkoKTsKLQkJfQotCi0JaWYoRklQU19tb2RlKCkKLQkJJiYgKnBtZXRoICE9IEZJUFNfcmFuZF9jaGVjaygpKQotCSAgICB7Ci0JICAgIFJBTkRlcnIoUkFORF9GX0VOR19SQU5EX0dFVF9SQU5EX01FVEhPRCxSQU5EX1JfTk9OX0ZJUFNfTUVUSE9EKTsKLQkgICAgcmV0dXJuIDA7Ci0JICAgIH0KLQotCXJldHVybiAqcG1ldGg7Ci0JfQotCi1pbnQgUkFORF9zZXRfcmFuZF9lbmdpbmUoRU5HSU5FICplbmdpbmUpCi0JewotCWNvbnN0IFJBTkRfTUVUSE9EICp0bXBfbWV0aCA9IE5VTEw7Ci0JaWYoZW5naW5lKQotCQl7Ci0JCWlmKCFFTkdJTkVfaW5pdChlbmdpbmUpKQotCQkJcmV0dXJuIDA7Ci0JCXRtcF9tZXRoID0gRU5HSU5FX2dldF9SQU5EKGVuZ2luZSk7Ci0JCWlmKCF0bXBfbWV0aCkKLQkJCXsKLQkJCUVOR0lORV9maW5pc2goZW5naW5lKTsKLQkJCXJldHVybiAwOwotCQkJfQotCQl9Ci0JLyogVGhpcyBmdW5jdGlvbiByZWxlYXNlcyBhbnkgcHJpb3IgRU5HSU5FIHNvIGNhbGwgaXQgZmlyc3QgKi8KLQlSQU5EX3NldF9yYW5kX21ldGhvZCh0bXBfbWV0aCk7Ci0JZnVuY3RfcmVmID0gZW5naW5lOwotCXJldHVybiAxOwotCX0KLQotdm9pZCBpbnRfUkFORF9pbml0X2VuZ2luZV9jYWxsYmFja3Modm9pZCkKLQl7Ci0Jc3RhdGljIGludCBkb25lID0gMDsKLQlpZiAoZG9uZSkKLQkJcmV0dXJuOwotCWludF9SQU5EX3NldF9jYWxsYmFja3MoZW5nX1JBTkRfc2V0X3JhbmRfbWV0aG9kLAotCQkJCSBlbmdfUkFORF9nZXRfcmFuZF9tZXRob2QpOwotCWRvbmUgPSAxOwotCX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9jcnlwdG8vcmFuZC9yYW5kX2Vyci5jIGIvY3J5cHRvL3JhbmQvcmFuZF9lcnIuYwppbmRleCA4MjlmYjQ0Li4wM2NkYTRkIDEwMDY0NAotLS0gYS9jcnlwdG8vcmFuZC9yYW5kX2Vyci5jCisrKyBiL2NyeXB0by9yYW5kL3JhbmRfZXJyLmMKQEAgLTEsNiArMSw2IEBACiAvKiBjcnlwdG8vcmFuZC9yYW5kX2Vyci5jICovCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDcgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNiBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzAsMTQgKzcwLDYgQEAKIAogc3RhdGljIEVSUl9TVFJJTkdfREFUQSBSQU5EX3N0cl9mdW5jdHNbXT0KIAl7Ci17RVJSX0ZVTkMoUkFORF9GX0VOR19SQU5EX0dFVF9SQU5EX01FVEhPRCksCSJFTkdfUkFORF9HRVRfUkFORF9NRVRIT0QifSwKLXtFUlJfRlVOQyhSQU5EX0ZfRklQU19SQU5EKSwJIkZJUFNfUkFORCJ9LAote0VSUl9GVU5DKFJBTkRfRl9GSVBTX1JBTkRfQllURVMpLAkiRklQU19SQU5EX0JZVEVTIn0sCi17RVJSX0ZVTkMoUkFORF9GX0ZJUFNfUkFORF9HRVRfUkFORF9NRVRIT0QpLAkiRklQU19SQU5EX0dFVF9SQU5EX01FVEhPRCJ9LAote0VSUl9GVU5DKFJBTkRfRl9GSVBTX1JBTkRfU0VUX0RUKSwJIkZJUFNfUkFORF9TRVRfRFQifSwKLXtFUlJfRlVOQyhSQU5EX0ZfRklQU19TRVRfRFQpLAkiRklQU19TRVRfRFQifSwKLXtFUlJfRlVOQyhSQU5EX0ZfRklQU19TRVRfUFJOR19TRUVEKSwJIkZJUFNfU0VUX1BSTkdfU0VFRCJ9LAote0VSUl9GVU5DKFJBTkRfRl9GSVBTX1NFVF9URVNUX01PREUpLAkiRklQU19TRVRfVEVTVF9NT0RFIn0sCiB7RVJSX0ZVTkMoUkFORF9GX1JBTkRfR0VUX1JBTkRfTUVUSE9EKSwJIlJBTkRfZ2V0X3JhbmRfbWV0aG9kIn0sCiB7RVJSX0ZVTkMoUkFORF9GX1NTTEVBWV9SQU5EX0JZVEVTKSwJIlNTTEVBWV9SQU5EX0JZVEVTIn0sCiB7MCxOVUxMfQpAQCAtODUsMTcgKzc3LDcgQEAKIAogc3RhdGljIEVSUl9TVFJJTkdfREFUQSBSQU5EX3N0cl9yZWFzb25zW109CiAJewote0VSUl9SRUFTT04oUkFORF9SX05PTl9GSVBTX01FVEhPRCkgICAgICAsIm5vbiBmaXBzIG1ldGhvZCJ9LAote0VSUl9SRUFTT04oUkFORF9SX05PVF9JTl9URVNUX01PREUpICAgICAsIm5vdCBpbiB0ZXN0IG1vZGUifSwKLXtFUlJfUkVBU09OKFJBTkRfUl9OT19LRVlfU0VUKSAgICAgICAgICAgLCJubyBrZXkgc2V0In0sCi17RVJSX1JFQVNPTihSQU5EX1JfUFJOR19BU0tJTkdfRk9SX1RPT19NVUNIKSwicHJuZyBhc2tpbmcgZm9yIHRvbyBtdWNoIn0sCi17RVJSX1JFQVNPTihSQU5EX1JfUFJOR19FUlJPUikgICAgICAgICAgICwicHJuZyBlcnJvciJ9LAote0VSUl9SRUFTT04oUkFORF9SX1BSTkdfS0VZRUQpICAgICAgICAgICAsInBybmcga2V5ZWQifSwKLXtFUlJfUkVBU09OKFJBTkRfUl9QUk5HX05PVF9SRUtFWUVEKSAgICAgLCJwcm5nIG5vdCByZWtleWVkIn0sCi17RVJSX1JFQVNPTihSQU5EX1JfUFJOR19OT1RfUkVTRUVERUQpICAgICwicHJuZyBub3QgcmVzZWVkZWQifSwKIHtFUlJfUkVBU09OKFJBTkRfUl9QUk5HX05PVF9TRUVERUQpICAgICAgLCJQUk5HIG5vdCBzZWVkZWQifSwKLXtFUlJfUkVBU09OKFJBTkRfUl9QUk5HX1NFRURfTVVTVF9OT1RfTUFUQ0hfS0VZKSwicHJuZyBzZWVkIG11c3Qgbm90IG1hdGNoIGtleSJ9LAote0VSUl9SRUFTT04oUkFORF9SX1BSTkdfU1RVQ0spICAgICAgICAgICAsInBybmcgc3R1Y2sifSwKIHswLE5VTEx9CiAJfTsKIApkaWZmIC0tZ2l0IGEvY3J5cHRvL3JhbmQvcmFuZF9sY2wuaCBiL2NyeXB0by9yYW5kL3JhbmRfbGNsLmgKaW5kZXggMThjYzliMS4uNjE4YThlYyAxMDA2NDQKLS0tIGEvY3J5cHRvL3JhbmQvcmFuZF9sY2wuaAorKysgYi9jcnlwdG8vcmFuZC9yYW5kX2xjbC5oCkBAIC0xNTQsMTYgKzE1NCw1IEBACiAjZGVmaW5lCU1EKGEsYixjKQkJRVZQX0RpZ2VzdChhLGIsYyxOVUxMLEVWUF9tZDIoKSwgTlVMTCkKICNlbmRpZgogCi0jaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCi12b2lkIGludF9SQU5EX3NldF9jYWxsYmFja3MoCi0JaW50ICgqc2V0X3JhbmRfZnVuYykoY29uc3QgUkFORF9NRVRIT0QgKm1ldGgsCi0JCQkJCQljb25zdCBSQU5EX01FVEhPRCAqKnBtZXRoKSwKLQljb25zdCBSQU5EX01FVEhPRCAqKCpnZXRfcmFuZF9mdW5jKQotCQkJCQkJKGNvbnN0IFJBTkRfTUVUSE9EICoqcG1ldGgpKTsKLWludCBlbmdfUkFORF9zZXRfcmFuZF9tZXRob2QoY29uc3QgUkFORF9NRVRIT0QgKm1ldGgsCi0JCQkJY29uc3QgUkFORF9NRVRIT0QgKipwbWV0aCk7Ci1jb25zdCBSQU5EX01FVEhPRCAqZW5nX1JBTkRfZ2V0X3JhbmRfbWV0aG9kKGNvbnN0IFJBTkRfTUVUSE9EICoqcG1ldGgpOwotI2VuZGlmCi0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9jcnlwdG8vcmFuZC9yYW5kX2xpYi5jIGIvY3J5cHRvL3JhbmQvcmFuZF9saWIuYwppbmRleCBkYTZiNGUwLi41MTNlMzM4IDEwMDY0NAotLS0gYS9jcnlwdG8vcmFuZC9yYW5kX2xpYi5jCisrKyBiL2NyeXB0by9yYW5kL3JhbmRfbGliLmMKQEAgLTYwLDgyICs2MCwxNSBAQAogI2luY2x1ZGUgPHRpbWUuaD4KICNpbmNsdWRlICJjcnlwdGxpYi5oIgogI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotI2luY2x1ZGUgInJhbmRfbGNsLmgiCi0jaWZkZWYgT1BFTlNTTF9GSVBTCi0jaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0jaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSNlbmRpZgotCiAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCiAjaW5jbHVkZSA8b3BlbnNzbC9lbmdpbmUuaD4KICNlbmRpZgogCi1zdGF0aWMgY29uc3QgUkFORF9NRVRIT0QgKmRlZmF1bHRfUkFORF9tZXRoID0gTlVMTDsKLQotI2lmZGVmIE9QRU5TU0xfRklQUwotCi1zdGF0aWMgaW50IGZpcHNfUkFORF9zZXRfcmFuZF9tZXRob2QoY29uc3QgUkFORF9NRVRIT0QgKm1ldGgsCi0JCQkJCWNvbnN0IFJBTkRfTUVUSE9EICoqcG1ldGgpCi0JewotCSpwbWV0aCA9IG1ldGg7Ci0JcmV0dXJuIDE7Ci0JfQotCi1zdGF0aWMgY29uc3QgUkFORF9NRVRIT0QgKmZpcHNfUkFORF9nZXRfcmFuZF9tZXRob2QoY29uc3QgUkFORF9NRVRIT0QgKipwbWV0aCkKLQl7Ci0JaWYgKCEqcG1ldGgpCi0JCXsKLQkJaWYoRklQU19tb2RlKCkpCi0JCQkqcG1ldGg9RklQU19yYW5kX21ldGhvZCgpOwotCQllbHNlCi0JCQkqcG1ldGggPSBSQU5EX1NTTGVheSgpOwotCQl9Ci0KLQlpZihGSVBTX21vZGUoKQotCQkmJiAqcG1ldGggIT0gRklQU19yYW5kX2NoZWNrKCkpCi0JICAgIHsKLQkgICAgUkFORGVycihSQU5EX0ZfRklQU19SQU5EX0dFVF9SQU5EX01FVEhPRCxSQU5EX1JfTk9OX0ZJUFNfTUVUSE9EKTsKLQkgICAgcmV0dXJuIDA7Ci0JICAgIH0KLQotCXJldHVybiAqcG1ldGg7Ci0JfQotCi1zdGF0aWMgaW50ICgqUkFORF9zZXRfcmFuZF9tZXRob2RfZnVuYykoY29uc3QgUkFORF9NRVRIT0QgKm1ldGgsCi0JCQkJCQljb25zdCBSQU5EX01FVEhPRCAqKnBtZXRoKQotCT0gZmlwc19SQU5EX3NldF9yYW5kX21ldGhvZDsKLXN0YXRpYyBjb25zdCBSQU5EX01FVEhPRCAqKCpSQU5EX2dldF9yYW5kX21ldGhvZF9mdW5jKQotCQkJCQkJKGNvbnN0IFJBTkRfTUVUSE9EICoqcG1ldGgpCi0JPSBmaXBzX1JBTkRfZ2V0X3JhbmRfbWV0aG9kOwotCi0jaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCi12b2lkIGludF9SQU5EX3NldF9jYWxsYmFja3MoCi0JaW50ICgqc2V0X3JhbmRfZnVuYykoY29uc3QgUkFORF9NRVRIT0QgKm1ldGgsCi0JCQkJCQljb25zdCBSQU5EX01FVEhPRCAqKnBtZXRoKSwKLQljb25zdCBSQU5EX01FVEhPRCAqKCpnZXRfcmFuZF9mdW5jKQotCQkJCQkJKGNvbnN0IFJBTkRfTUVUSE9EICoqcG1ldGgpKQotCXsKLQlSQU5EX3NldF9yYW5kX21ldGhvZF9mdW5jID0gc2V0X3JhbmRfZnVuYzsKLQlSQU5EX2dldF9yYW5kX21ldGhvZF9mdW5jID0gZ2V0X3JhbmRfZnVuYzsKLQl9Ci0jZW5kaWYKLQotaW50IFJBTkRfc2V0X3JhbmRfbWV0aG9kKGNvbnN0IFJBTkRfTUVUSE9EICptZXRoKQotCXsKLQlyZXR1cm4gUkFORF9zZXRfcmFuZF9tZXRob2RfZnVuYyhtZXRoLCAmZGVmYXVsdF9SQU5EX21ldGgpOwotCX0KLQotY29uc3QgUkFORF9NRVRIT0QgKlJBTkRfZ2V0X3JhbmRfbWV0aG9kKHZvaWQpCi0JewotCXJldHVybiBSQU5EX2dldF9yYW5kX21ldGhvZF9mdW5jKCZkZWZhdWx0X1JBTkRfbWV0aCk7Ci0JfQotCi0jZWxzZQotCiAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCiAvKiBub24tTlVMTCBpZiBkZWZhdWx0X1JBTkRfbWV0aCBpcyBFTkdJTkUtcHJvdmlkZWQgKi8KIHN0YXRpYyBFTkdJTkUgKmZ1bmN0X3JlZiA9TlVMTDsKICNlbmRpZgorc3RhdGljIGNvbnN0IFJBTkRfTUVUSE9EICpkZWZhdWx0X1JBTkRfbWV0aCA9IE5VTEw7CiAKIGludCBSQU5EX3NldF9yYW5kX21ldGhvZChjb25zdCBSQU5EX01FVEhPRCAqbWV0aCkKIAl7CkBAIC0xOTYsOCArMTI5LDYgQEAKIAl9CiAjZW5kaWYKIAotI2VuZGlmCi0KIHZvaWQgUkFORF9jbGVhbnVwKHZvaWQpCiAJewogCWNvbnN0IFJBTkRfTUVUSE9EICptZXRoID0gUkFORF9nZXRfcmFuZF9tZXRob2QoKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9yYW5kL3JhbmRfb3MyLmMgYi9jcnlwdG8vcmFuZC9yYW5kX29zMi5jCmluZGV4IGMzZTM2ZDQuLmZjMWU3OGIgMTAwNjQ0Ci0tLSBhL2NyeXB0by9yYW5kL3JhbmRfb3MyLmMKKysrIGIvY3J5cHRvL3JhbmQvcmFuZF9vczIuYwpAQCAtNzgsOCArNzgsMTAgQEAKICAgICBVTE9ORyB1bEludHJIaWdoOyAgICAgICAgICAgLyogSGlnaCAzMiBiaXRzIG9mIGludGVycnVwdCB0aW1lICovCiB9IENQVVVUSUw7CiAKKyNpZm5kZWYgX19LTElCQ19fCiBBUElSRVQgQVBJRU5UUlkoKkRvc1BlcmZTeXNDYWxsKSAoVUxPTkcgdWxDb21tYW5kLCBVTE9ORyB1bFBhcm0xLCBVTE9ORyB1bFBhcm0yLCBVTE9ORyB1bFBhcm0zKSA9IE5VTEw7CiBBUElSRVQgQVBJRU5UUlkoKkRvc1F1ZXJ5U3lzU3RhdGUpIChVTE9ORyBmdW5jLCBVTE9ORyBhcmcxLCBVTE9ORyBwaWQsIFVMT05HIF9yZXNfLCBQVk9JRCBidWYsIFVMT05HIGJ1ZnN6KSA9IE5VTEw7CisjZW5kaWYKIEhNT0RVTEUgaERvc2NhbGxzID0gMDsKIAogaW50IFJBTkRfcG9sbCh2b2lkKQpAQCAtOTEsNiArOTMsNyBAQAogICAgIGlmIChoRG9zY2FsbHMgPT0gMCkgewogICAgICAgICBVTE9ORyByYyA9IERvc0xvYWRNb2R1bGUoZmFpbGVkX21vZHVsZSwgc2l6ZW9mKGZhaWxlZF9tb2R1bGUpLCAiRE9TQ0FMTFMiLCAmaERvc2NhbGxzKTsKIAorI2lmbmRlZiBfX0tMSUJDX18KICAgICAgICAgaWYgKHJjID09IDApIHsKICAgICAgICAgICAgIHJjID0gRG9zUXVlcnlQcm9jQWRkcihoRG9zY2FsbHMsIDk3NiwgTlVMTCwgKFBGTiAqKSZEb3NQZXJmU3lzQ2FsbCk7CiAKQEAgLTEwMiw2ICsxMDUsNyBAQAogICAgICAgICAgICAgaWYgKHJjKQogICAgICAgICAgICAgICAgIERvc1F1ZXJ5U3lzU3RhdGUgPSBOVUxMOwogICAgICAgICB9CisjZW5kaWYKICAgICB9CiAKICAgICAvKiBTYW1wbGUgdGhlIGhpLXJlcyB0aW1lciwgcnVucyBhdCBhcm91bmQgMS4xIE1IeiAqLwpAQCAtMTIyLDcgKzEyNiw5IEBACiAgICAgICAgICAgICBSQU5EX2FkZCgmdXRpbCwgc2l6ZW9mKHV0aWwpLCAxMCk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CisjaWZuZGVmIF9fS0xJQkNfXwogICAgICAgICAgICAgRG9zUGVyZlN5c0NhbGwgPSBOVUxMOworI2VuZGlmCiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL2NyeXB0by9yYW5kL3JhbmRfdW5peC5jIGIvY3J5cHRvL3JhbmQvcmFuZF91bml4LmMKaW5kZXggNzFiOThlYy4uZTllYWQzYSAxMDA2NDQKLS0tIGEvY3J5cHRvL3JhbmQvcmFuZF91bml4LmMKKysrIGIvY3J5cHRvL3JhbmQvcmFuZF91bml4LmMKQEAgLTEzMyw3ICsxMzMsNTAgQEAKICMgZGVmaW5lIEZEX1NFVFNJWkUgKDgqc2l6ZW9mKGZkX3NldCkpCiAjZW5kaWYKIAotI2lmZGVmIF9fT3BlbkJTRF9fCisjaWZkZWYgX19WT1NfXworaW50IFJBTkRfcG9sbCh2b2lkKQoreworCXVuc2lnbmVkIGNoYXIgYnVmW0VOVFJPUFlfTkVFREVEXTsKKwlwaWRfdCBjdXJyX3BpZDsKKwl1aWRfdCBjdXJyX3VpZDsKKwlzdGF0aWMgaW50IGZpcnN0PTE7CisJaW50IGk7CisJbG9uZyBybmQgPSAwOworCXN0cnVjdCB0aW1lc3BlYyB0czsKKwl1bnNpZ25lZCBzZWVkOworCisvKiBUaGUgVk9TIHJhbmRvbSgpIGZ1bmN0aW9uIHN0YXJ0cyBmcm9tIGEgc3RhdGljIHNlZWQgc28gaXRzCisgICBpbml0aWFsIHZhbHVlIGlzIHByZWRpY3RhYmxlLiAgSWYgcmFuZG9tKCkgcmV0dXJucyB0aGUKKyAgIGluaXRpYWwgdmFsdWUsIHJlc2VlZCBpdCB3aXRoIGR5bmFtaWMgZGF0YS4gIFRoZSBWT1MKKyAgIHJlYWwtdGltZSBjbG9jayBoYXMgYSBncmFudWxhcml0eSBvZiAxIG5zZWMgc28gaXQgc2hvdWxkIGJlCisgICByZWFzb25hYmx5IGRpZmZpY3VsdCB0byBwcmVkaWN0IGl0cyBleGFjdCB2YWx1ZS4gIERvIG5vdAorICAgZ3JhdHVpdG91c2x5IHJlc2VlZCB0aGUgUFJORyBiZWNhdXNlIG90aGVyIGNvZGUgaW4gdGhpcworICAgcHJvY2VzcyBvciB0aHJlYWQgbWF5IGJlIHVzaW5nIGl0LiAgKi8KKworCWlmIChmaXJzdCkgeworCQlmaXJzdCA9IDA7CisJCXJuZCA9IHJhbmRvbSAoKTsKKwkJaWYgKHJuZCA9PSAxODA0Mjg5MzgzKSB7CisJCQljbG9ja19nZXR0aW1lIChDTE9DS19SRUFMVElNRSwgJnRzKTsKKwkJCWN1cnJfcGlkID0gZ2V0cGlkKCk7CisJCQljdXJyX3VpZCA9IGdldHVpZCgpOworCQkJc2VlZCA9IHRzLnR2X3NlYyBeIHRzLnR2X25zZWMgXiBjdXJyX3BpZCBeIGN1cnJfdWlkOworCQkJc3JhbmRvbSAoc2VlZCk7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGJ1Zik7IGkrKykgeworCQlpZiAoaSAlIDQgPT0gMCkKKwkJCXJuZCA9IHJhbmRvbSgpOworCQlidWZbaV0gPSBybmQ7CisJCXJuZCA+Pj0gODsKKwl9CisJUkFORF9hZGQoYnVmLCBzaXplb2YoYnVmKSwgRU5UUk9QWV9ORUVERUQpOworCW1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKKworCXJldHVybiAxOworfQorI2VsaWYgZGVmaW5lZCBfX09wZW5CU0RfXwogaW50IFJBTkRfcG9sbCh2b2lkKQogewogCXVfaW50MzJfdCBybmQgPSAwLCBpOwpAQCAtMTYzLDcgKzIwNiw3IEBACiAJc3RhdGljIGNvbnN0IGNoYXIgKnJhbmRvbWZpbGVzW10gPSB7IERFVlJBTkRPTSB9OwogCXN0cnVjdCBzdGF0IHJhbmRvbXN0YXRzW3NpemVvZihyYW5kb21maWxlcykvc2l6ZW9mKHJhbmRvbWZpbGVzWzBdKV07CiAJaW50IGZkOwotCXNpemVfdCBpOworCXVuc2lnbmVkIGludCBpOwogI2VuZGlmCiAjaWZkZWYgREVWUkFORE9NX0VHRAogCXN0YXRpYyBjb25zdCBjaGFyICplZ2Rzb2NrZXRzW10gPSB7IERFVlJBTkRPTV9FR0QsIE5VTEwgfTsKQEAgLTE3Niw3ICsyMTksOCBAQAogCSAqIGhhdmUgdGhpcy4gVXNlIC9kZXYvdXJhbmRvbSBpZiB5b3UgY2FuIGFzIC9kZXYvcmFuZG9tIG1heSBibG9jawogCSAqIGlmIGl0IHJ1bnMgb3V0IG9mIHJhbmRvbSBlbnRyaWVzLiAgKi8KIAotCWZvciAoaT0wOyBpPHNpemVvZihyYW5kb21maWxlcykvc2l6ZW9mKHJhbmRvbWZpbGVzWzBdKSAmJiBuIDwgRU5UUk9QWV9ORUVERUQ7IGkrKykKKwlmb3IgKGkgPSAwOyAoaSA8IHNpemVvZihyYW5kb21maWxlcykvc2l6ZW9mKHJhbmRvbWZpbGVzWzBdKSkgJiYKKwkJCShuIDwgRU5UUk9QWV9ORUVERUQpOyBpKyspCiAJCXsKIAkJaWYgKChmZCA9IG9wZW4ocmFuZG9tZmlsZXNbaV0sIE9fUkRPTkxZCiAjaWZkZWYgT19OT05CTE9DSwpAQCAtMTkzLDcgKzIzNyw3IEBACiAJCQl7CiAJCQlpbnQgdXNlYyA9IDEwKjEwMDA7IC8qIHNwZW5kIDEwbXMgb24gZWFjaCBmaWxlICovCiAJCQlpbnQgcjsKLQkJCXNpemVfdCBqOworCQkJdW5zaWduZWQgaW50IGo7CiAJCQlzdHJ1Y3Qgc3RhdCAqc3Q9JnJhbmRvbXN0YXRzW2ldOwogCiAJCQkvKiBBdm9pZCB1c2luZyBzYW1lIGlucHV0Li4uIFVzZWQgdG8gYmUgT19OT0ZPTExPVwpAQCAtMjExLDcgKzI1NSwxMiBAQAogCQkJCXsKIAkJCQlpbnQgdHJ5X3JlYWQgPSAwOwogCi0jaWYgZGVmaW5lZChPUEVOU1NMX1NZU19MSU5VWCkKKyNpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX0JFT1NfUjUpCisJCQkJLyogc2VsZWN0KCkgaXMgYnJva2VuIGluIEJlT1MgUjUsIHNvIHdlIHNpbXBseQorCQkJCSAqICB0cnkgdG8gcmVhZCBzb21ldGhpbmcgYW5kIHNub296ZSBpZiB3ZSBjb3VsZG4ndCAqLworCQkJCXRyeV9yZWFkID0gMTsKKworI2VsaWYgZGVmaW5lZChPUEVOU1NMX1NZU19MSU5VWCkKIAkJCQkvKiB1c2UgcG9sbCgpICovCiAJCQkJc3RydWN0IHBvbGxmZCBwc2V0OwogCQkJCQpAQCAtMjU4LDYgKzMwNywxMCBAQAogCQkJCQlyID0gcmVhZChmZCwodW5zaWduZWQgY2hhciAqKXRtcGJ1ZituLCBFTlRST1BZX05FRURFRC1uKTsKIAkJCQkJaWYgKHIgPiAwKQogCQkJCQkJbiArPSByOworI2lmIGRlZmluZWQoT1BFTlNTTF9TWVNfQkVPU19SNSkKKwkJCQkJaWYgKHIgPT0gMCkKKwkJCQkJCXNub296ZSh0LnR2X3VzZWMpOworI2VuZGlmCiAJCQkJCX0KIAkJCQllbHNlCiAJCQkJCXIgPSAtMTsKQEAgLTMxMSw2ICszNjQsMTQgQEAKIAlsPXRpbWUoTlVMTCk7CiAJUkFORF9hZGQoJmwsc2l6ZW9mKGwpLDAuMCk7CiAKKyNpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX0JFT1MpCisJeworCXN5c3RlbV9pbmZvIHN5c0luZm87CisJZ2V0X3N5c3RlbV9pbmZvKCZzeXNJbmZvKTsKKwlSQU5EX2FkZCgmc3lzSW5mbyxzaXplb2Yoc3lzSW5mbyksMCk7CisJfQorI2VuZGlmCisKICNpZiBkZWZpbmVkKERFVlJBTkRPTSkgfHwgZGVmaW5lZChERVZSQU5ET01fRUdEKQogCXJldHVybiAxOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2NyeXB0by9yYW5kL3JhbmRfd2luLmMgYi9jcnlwdG8vcmFuZC9yYW5kX3dpbi5jCmluZGV4IDUxOTgzNTEuLjVkMTM0ZTEgMTAwNjQ0Ci0tLSBhL2NyeXB0by9yYW5kL3JhbmRfd2luLmMKKysrIGIvY3J5cHRvL3JhbmQvcmFuZF93aW4uYwpAQCAtNzUwLDcgKzc1MCw3IEBACiAgIGludAkJeTsJCS8qIHktY29vcmRpbmF0ZSBvZiBzY3JlZW4gbGluZXMgdG8gZ3JhYiAqLwogICBpbnQJCW4gPSAxNjsJCS8qIG51bWJlciBvZiBzY3JlZW4gbGluZXMgdG8gZ3JhYiBhdCBhIHRpbWUgKi8KIAotICBpZiAoR2V0VmVyc2lvbigpID49IDB4ODAwMDAwMDAgfHwgIU9QRU5TU0xfaXNzZXJ2aWNlKCkpCisgIGlmIChHZXRWZXJzaW9uKCkgPCAweDgwMDAwMDAwICYmIE9QRU5TU0xfaXNzZXJ2aWNlKCk+MCkKICAgICByZXR1cm47CiAKICAgLyogQ3JlYXRlIGEgc2NyZWVuIERDIGFuZCBhIG1lbW9yeSBEQyBjb21wYXRpYmxlIHRvIHNjcmVlbiBEQyAqLwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3JhbmQvcmFuZGZpbGUuYyBiL2NyeXB0by9yYW5kL3JhbmRmaWxlLmMKaW5kZXggODQyNzZkNy4uNGVkNDBiNyAxMDA2NDQKLS0tIGEvY3J5cHRvL3JhbmQvcmFuZGZpbGUuYworKysgYi9jcnlwdG8vcmFuZC9yYW5kZmlsZS5jCkBAIC03NSw5ICs3NSw3IEBACiAjaWZuZGVmIE5PX1NZU19UWVBFU19ICiAjIGluY2x1ZGUgPHN5cy90eXBlcy5oPgogI2VuZGlmCi0jaWZkZWYgTUFDX09TX3ByZV9YCi0jIGluY2x1ZGUgPHN0YXQuaD4KLSNlbHNlCisjaWZuZGVmIE9QRU5TU0xfTk9fUE9TSVhfSU8KICMgaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNlbmRpZgogCkBAIC0xMTEsMTIgKzEwOSwxNSBAQAogCSAqIGlmIGJ5dGVzID09IC0xLCByZWFkIGNvbXBsZXRlIGZpbGUuICovCiAKIAlNU19TVEFUSUMgdW5zaWduZWQgY2hhciBidWZbQlVGU0laRV07CisjaWZuZGVmIE9QRU5TU0xfTk9fUE9TSVhfSU8KIAlzdHJ1Y3Qgc3RhdCBzYjsKKyNlbmRpZgogCWludCBpLHJldD0wLG47CiAJRklMRSAqaW47CiAKIAlpZiAoZmlsZSA9PSBOVUxMKSByZXR1cm4oMCk7CiAKKyNpZm5kZWYgT1BFTlNTTF9OT19QT1NJWF9JTwogI2lmZGVmIFBVUklGWQogCS8qIHN0cnVjdCBzdGF0IGNhbiBoYXZlIHBhZGRpbmcgYW5kIHVudXNlZCBmaWVsZHMgdGhhdCBtYXkgbm90IGJlCiAJICogaW5pdGlhbGl6ZWQgaW4gdGhlIGNhbGwgdG8gc3RhdCgpLiBXZSBuZWVkIHRvIGNsZWFyIHRoZSBlbnRpcmUKQEAgLTEyNSw5ICsxMjYsOSBAQAogCSAqLwogCW1lbXNldCgmc2IsIDAsIHNpemVvZihzYikpOwogI2VuZGlmCi0KIAlpZiAoc3RhdChmaWxlLCZzYikgPCAwKSByZXR1cm4oMCk7CiAJUkFORF9hZGQoJnNiLHNpemVvZihzYiksMC4wKTsKKyNlbmRpZgogCWlmIChieXRlcyA9PSAwKSByZXR1cm4ocmV0KTsKIAogI2lmZGVmIE9QRU5TU0xfU1lTX1ZNUwpAQCAtMTM2LDggKzEzNyw4IEBACiAJaW49Zm9wZW4oZmlsZSwicmIiKTsKICNlbmRpZgogCWlmIChpbiA9PSBOVUxMKSBnb3RvIGVycjsKLSNpZiBkZWZpbmVkKFNfSVNCTEspICYmIGRlZmluZWQoU19JU0NIUikKLQlpZiAoU19JU0JMSyhzYi5zdF9tb2RlKSB8fCBTX0lTQ0hSKHNiLnN0X21vZGUpKSB7CisjaWYgZGVmaW5lZChTX0lGQkxLKSAmJiBkZWZpbmVkKFNfSUZDSFIpICYmICFkZWZpbmVkKE9QTkVTU0xfTk9fUE9TSVhfSU8pCisJaWYgKHNiLnN0X21vZGUgJiAoU19JRkJMSyB8IFNfSUZDSFIpKSB7CiAJICAvKiB0aGlzIGZpbGUgaXMgYSBkZXZpY2UuIHdlIGRvbid0IHdhbnQgcmVhZCBhbiBpbmZpbml0ZSBudW1iZXIKIAkgICAqIG9mIGJ5dGVzIGZyb20gYSByYW5kb20gZGV2aWNlLCBub3IgZG8gd2Ugd2FudCB0byB1c2UgYnVmZmVyZWQKIAkgICAqIEkvTyBiZWNhdXNlIHdlIHdpbGwgd2FzdGUgc3lzdGVtIGVudHJvcHkuIApAQCAtMTc5LDYgKzE4MCw3IEBACiAJaW50IGkscmV0PTAscmFuZF9lcnI9MDsKIAlGSUxFICpvdXQgPSBOVUxMOwogCWludCBuOworI2lmbmRlZiBPUEVOU1NMX05PX1BPU0lYX0lPCiAJc3RydWN0IHN0YXQgc2I7CiAJCiAJaT1zdGF0KGZpbGUsJnNiKTsKQEAgLTE5NCwxNCArMTk2LDE2IEBACiAJICB9CiAjZW5kaWYKIAl9CisjZW5kaWYKIAotI2lmIGRlZmluZWQoT19DUkVBVCkgJiYgIWRlZmluZWQoT1BFTlNTTF9TWVNfV0lOMzIpICYmICFkZWZpbmVkKE9QRU5TU0xfU1lTX1ZNUykKKyNpZiBkZWZpbmVkKE9fQ1JFQVQpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fUE9TSVhfSU8pICYmICFkZWZpbmVkKE9QRU5TU0xfU1lTX1ZNUykKIAl7Ci0JLyogRm9yIHNvbWUgcmVhc29uIFdpbjMyIGNhbid0IHdyaXRlIHRvIGZpbGVzIGNyZWF0ZWQgdGhpcyB3YXkgKi8KLQkKKyNpZm5kZWYgT19CSU5BUlkKKyNkZWZpbmUgT19CSU5BUlkgMAorI2VuZGlmCiAJLyogY2htb2QoLi4uLCAwNjAwKSBpcyB0b28gbGF0ZSB0byBwcm90ZWN0IHRoZSBmaWxlLAogCSAqIHBlcm1pc3Npb25zIHNob3VsZCBiZSByZXN0cmljdGl2ZSBmcm9tIHRoZSBzdGFydCAqLwotCWludCBmZCA9IG9wZW4oZmlsZSwgT19DUkVBVCwgMDYwMCk7CisJaW50IGZkID0gb3BlbihmaWxlLCBPX1dST05MWXxPX0NSRUFUfE9fQklOQVJZLCAwNjAwKTsKIAlpZiAoZmQgIT0gLTEpCiAJCW91dCA9IGZkb3BlbihmZCwgIndiIik7CiAJfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL3JjMi9NYWtlZmlsZSBiL2NyeXB0by9yYzIvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiNjI5MmIuLjAwMDAwMDAKLS0tIGEvY3J5cHRvL3JjMi9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLSMKLSMgT3BlblNTTC9jcnlwdG8vcmMyL01ha2VmaWxlCi0jCi0KLURJUj0JcmMyCi1UT1A9CS4uLy4uCi1DQz0JY2MKLUlOQ0xVREVTPQotQ0ZMQUc9LWcKLU1BS0VGSUxFPQlNYWtlZmlsZQotQVI9CQlhciByCi0KLUNGTEFHUz0gJChJTkNMVURFUykgJChDRkxBRykKLQotR0VORVJBTD1NYWtlZmlsZQotVEVTVD1yYzJ0ZXN0LmMKLUFQUFM9Ci0KLUxJQj0kKFRPUCkvbGliY3J5cHRvLmEKLUxJQlNSQz1yYzJfZWNiLmMgcmMyX3NrZXkuYyByYzJfY2JjLmMgcmMyY2ZiNjQuYyByYzJvZmI2NC5jCi1MSUJPQko9cmMyX2VjYi5vIHJjMl9za2V5Lm8gcmMyX2NiYy5vIHJjMmNmYjY0Lm8gcmMyb2ZiNjQubwotCi1TUkM9ICQoTElCU1JDKQotCi1FWEhFQURFUj0gcmMyLmgKLUhFQURFUj0JcmMyX2xvY2wuaCAkKEVYSEVBREVSKQotCi1BTEw9ICAgICQoR0VORVJBTCkgJChTUkMpICQoSEVBREVSKQotCi10b3A6Ci0JKGNkIC4uLy4uOyAkKE1BS0UpIERJUlM9Y3J5cHRvIFNESVJTPSQoRElSKSBzdWJfYWxsKQotCi1hbGw6CWxpYgotCi1saWI6CSQoTElCT0JKKQotCSQoQVJYKSAkKExJQikgJChMSUJPQkopCi0JJChSQU5MSUIpICQoTElCKSB8fCBlY2hvIE5ldmVyIG1pbmQuCi0JQHRvdWNoIGxpYgotCi1maWxlczoKLQkkKFBFUkwpICQoVE9QKS91dGlsL2ZpbGVzLnBsIE1ha2VmaWxlID4+ICQoVE9QKS9NSU5GTwotCi1saW5rczoKLQlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vaW5jbHVkZS9vcGVuc3NsICQoRVhIRUFERVIpCi0JQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL3Rlc3QgJChURVNUKQotCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9hcHBzICQoQVBQUykKLQotaW5zdGFsbDoKLQlAWyAtbiAiJChJTlNUQUxMVE9QKSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdG9wIE1ha2VmaWxlLi4uCi0JQGhlYWRlcmxpc3Q9IiQoRVhIRUFERVIpIjsgZm9yIGkgaW4gJCRoZWFkZXJsaXN0IDsgXAotCWRvICBcCi0JKGNwICQkaSAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaTsgXAotCWNobW9kIDY0NCAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaSApOyBcCi0JZG9uZTsKLQotdGFnczoKLQljdGFncyAkKFNSQykKLQotdGVzdHM6Ci0KLWxpbnQ6Ci0JbGludCAtRExJTlQgJChJTkNMVURFUykgJChTUkMpPmZsdWZmCi0KLWRlcGVuZDoKLQlAWyAtbiAiJChNQUtFREVQRU5EKSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdXBwZXIgTWFrZWZpbGUuLi4KLQkkKE1BS0VERVBFTkQpIC0tICQoQ0ZMQUcpICQoSU5DTFVERVMpICQoREVQRkxBRykgLS0gJChQUk9HUykgJChMSUJTUkMpCi0KLWRjbGVhbjoKLQkkKFBFUkwpIC1wZSAnaWYgKC9eIyBETyBOT1QgREVMRVRFIFRISVMgTElORS8pIHtwcmludDsgZXhpdCgwKTt9JyAkKE1BS0VGSUxFKSA+TWFrZWZpbGUubmV3Ci0JbXYgLWYgTWFrZWZpbGUubmV3ICQoTUFLRUZJTEUpCi0KLWNsZWFuOgotCXJtIC1mICoubyAqLm9iaiBsaWIgdGFncyBjb3JlIC5wdXJlIC5uZnMqICoub2xkICouYmFrIGZsdWZmCi0KLSMgRE8gTk9UIERFTEVURSBUSElTIExJTkUgLS0gbWFrZSBkZXBlbmQgZGVwZW5kcyBvbiBpdC4KLQotcmMyX2NiYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmMyLmgKLXJjMl9jYmMubzogcmMyX2NiYy5jIHJjMl9sb2NsLmgKLXJjMl9lY2IubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLXJjMl9lY2IubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JjMi5oIHJjMl9lY2IuYyByYzJfbG9jbC5oCi1yYzJfc2tleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLXJjMl9za2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXJjMl9za2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1yYzJfc2tleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmMyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1yYzJfc2tleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotcmMyX3NrZXkubzogcmMyX2xvY2wuaCByYzJfc2tleS5jCi1yYzJjZmI2NC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmMyLmgKLXJjMmNmYjY0Lm86IHJjMl9sb2NsLmggcmMyY2ZiNjQuYwotcmMyb2ZiNjQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JjMi5oCi1yYzJvZmI2NC5vOiByYzJfbG9jbC5oIHJjMm9mYjY0LmMKZGlmZiAtLWdpdCBhL2NyeXB0by9yYzIvcmMyLmggYi9jcnlwdG8vcmMyL3JjMi5oCmluZGV4IGU1NDJlYzkuLjM0YzgzNjIgMTAwNjQ0Ci0tLSBhL2NyeXB0by9yYzIvcmMyLmgKKysrIGIvY3J5cHRvL3JjMi9yYzIuaApAQCAtNzksOSArNzksNyBAQAogCVJDMl9JTlQgZGF0YVs2NF07CiAJfSBSQzJfS0VZOwogCi0jaWZkZWYgT1BFTlNTTF9GSVBTIAotdm9pZCBwcml2YXRlX1JDMl9zZXRfa2V5KFJDMl9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSxpbnQgYml0cyk7Ci0jZW5kaWYKKyAKIHZvaWQgUkMyX3NldF9rZXkoUkMyX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLGludCBiaXRzKTsKIHZvaWQgUkMyX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLHVuc2lnbmVkIGNoYXIgKm91dCxSQzJfS0VZICprZXksCiAJCSAgICAgaW50IGVuYyk7CmRpZmYgLS1naXQgYS9jcnlwdG8vcmMyL3JjMl9za2V5LmMgYi9jcnlwdG8vcmMyL3JjMl9za2V5LmMKaW5kZXggNGUwMDBlNS4uMDE1MGIwZSAxMDA2NDQKLS0tIGEvY3J5cHRvL3JjMi9yYzJfc2tleS5jCisrKyBiL2NyeXB0by9yYzIvcmMyX3NrZXkuYwpAQCAtNTcsMTQgKzU3LDkgQEAKICAqLwogCiAjaW5jbHVkZSA8b3BlbnNzbC9yYzIuaD4KLSNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotI2lmZGVmIE9QRU5TU0xfRklQUwotI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotI2VuZGlmCi0KICNpbmNsdWRlICJyYzJfbG9jbC5oIgogCi1zdGF0aWMgdW5zaWduZWQgY2hhciBrZXlfdGFibGVbMjU2XT17CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrZXlfdGFibGVbMjU2XT17CiAJMHhkOSwweDc4LDB4ZjksMHhjNCwweDE5LDB4ZGQsMHhiNSwweGVkLDB4MjgsMHhlOSwweGZkLDB4NzksCiAJMHg0YSwweGEwLDB4ZDgsMHg5ZCwweGM2LDB4N2UsMHgzNywweDgzLDB4MmIsMHg3NiwweDUzLDB4OGUsCiAJMHg2MiwweDRjLDB4NjQsMHg4OCwweDQ0LDB4OGIsMHhmYiwweGEyLDB4MTcsMHg5YSwweDU5LDB4ZjUsCkBAIC05OSwyMCArOTQsOCBAQAogICogQlNBRkUgdXNlcyB0aGUgJ3JldGFyZGVkJyB2ZXJzaW9uLiAgV2hhdCBJIHByZXZpb3VzbHkgc2hpcHBlZCBpcwogICogdGhlIHNhbWUgYXMgc3BlY2lmeWluZyAxMDI0IGZvciB0aGUgJ2JpdHMnIHBhcmFtZXRlci4gIEJzYWZlIHVzZXMKICAqIGEgdmVyc2lvbiB3aGVyZSB0aGUgYml0cyBwYXJhbWV0ZXIgaXMgdGhlIHNhbWUgYXMgbGVuKjggKi8KLQotI2lmZGVmIE9QRU5TU0xfRklQUwogdm9pZCBSQzJfc2V0X2tleShSQzJfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBiaXRzKQogCXsKLQlpZiAoRklQU19tb2RlKCkpCi0JCUZJUFNfQkFEX0FCT1JUKFJDMikKLQlwcml2YXRlX1JDMl9zZXRfa2V5KGtleSwgbGVuLCBkYXRhLCBiaXRzKTsKLQl9Ci12b2lkIHByaXZhdGVfUkMyX3NldF9rZXkoUkMyX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLAotCQkJCQkJCQlpbnQgYml0cykKLSNlbHNlCi12b2lkIFJDMl9zZXRfa2V5KFJDMl9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGJpdHMpCi0jZW5kaWYKLQl7CiAJaW50IGksajsKIAl1bnNpZ25lZCBjaGFyICprOwogCVJDMl9JTlQgKmtpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3JjNC9NYWtlZmlsZSBiL2NyeXB0by9yYzQvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwYmQ3NjcuLjAwMDAwMDAKLS0tIGEvY3J5cHRvL3JjNC9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDEyNSArMCwwIEBACi0jCi0jIE9wZW5TU0wvY3J5cHRvL3JjNC9NYWtlZmlsZQotIwotCi1ESVI9CXJjNAotVE9QPQkuLi8uLgotQ0M9CWNjCi1DUFA9ICAgICQoQ0MpIC1FCi1JTkNMVURFUz0KLUNGTEFHPS1nCi1BUj0JCWFyIHIKLQotUkM0X0VOQz1yYzRfZW5jLm8gcmM0X3NrZXkubwotCi1DRkxBR1M9ICQoSU5DTFVERVMpICQoQ0ZMQUcpCi1BU0ZMQUdTPSAkKElOQ0xVREVTKSAkKEFTRkxBRykKLUFGTEFHUz0gJChBU0ZMQUdTKQotCi1HRU5FUkFMPU1ha2VmaWxlCi1URVNUPXJjNHRlc3QuYwotQVBQUz0KLQotTElCPSQoVE9QKS9saWJjcnlwdG8uYQotTElCU1JDPXJjNF9za2V5LmMgcmM0X2VuYy5jIHJjNF9mYmxrLmMKLUxJQk9CSj0kKFJDNF9FTkMpIHJjNF9mYmxrLm8KLQotU1JDPSAkKExJQlNSQykKLQotRVhIRUFERVI9IHJjNC5oCi1IRUFERVI9CSQoRVhIRUFERVIpIHJjNF9sb2NsLmgKLQotQUxMPSAgICAkKEdFTkVSQUwpICQoU1JDKSAkKEhFQURFUikKLQotdG9wOgotCShjZCAuLi8uLjsgJChNQUtFKSBESVJTPWNyeXB0byBTRElSUz0kKERJUikgc3ViX2FsbCkKLQotYWxsOglsaWIKLQotbGliOgkkKExJQk9CSikKLQkkKEFSWCkgJChMSUIpICQoTElCT0JKKQotCSQoUkFOTElCKSAkKExJQikgfHwgZWNobyBOZXZlciBtaW5kLgotCUB0b3VjaCBsaWIKLQotIyBFTEYKLXJ4ODYtZWxmLnM6IGFzbS9yYzQtNTg2LnBsIC4uL3Blcmxhc20veDg2YXNtLnBsCi0JKGNkIGFzbTsgJChQRVJMKSByYzQtNTg2LnBsIGVsZiAkKENGTEFHUykgPiAuLi8kQCkKLSMgQ09GRgotcng4Ni1jb2YuczogYXNtL3JjNC01ODYucGwgLi4vcGVybGFzbS94ODZhc20ucGwKLQkoY2QgYXNtOyAkKFBFUkwpIHJjNC01ODYucGwgY29mZiAkKENGTEFHUykgPiAuLi8kQCkKLSMgYS5vdXQKLXJ4ODYtb3V0LnM6IGFzbS9yYzQtNTg2LnBsIC4uL3Blcmxhc20veDg2YXNtLnBsCi0JKGNkIGFzbTsgJChQRVJMKSByYzQtNTg2LnBsIGEub3V0ICQoQ0ZMQUdTKSA+IC4uLyRAKQotCi1yYzQteDg2XzY0LnM6IGFzbS9yYzQteDg2XzY0LnBsOwkkKFBFUkwpIGFzbS9yYzQteDg2XzY0LnBsICRACi0KLXJjNC1pYTY0LnM6IGFzbS9yYzQtaWE2NC5TCi0JQGNhc2UgYGF3ayAnL14jZGVmaW5lIFJDNF9JTlQve3ByaW50JCRORn0nICQoVE9QKS9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaGAgaW4gXAotCWludCkJc2V0IC14OyAkKENDKSAkKENGTEFHUykgLURTWj00IC1FIGFzbS9yYzQtaWE2NC5TID4gJEAgOzsgXAotCWNoYXIpCXNldCAteDsgJChDQykgJChDRkxBR1MpIC1EU1o9MSAtRSBhc20vcmM0LWlhNjQuUyA+ICRAIDs7IFwKLQkqKQlleGl0IDEgOzsgXAotCWVzYWMKLQotZmlsZXM6Ci0JJChQRVJMKSAkKFRPUCkvdXRpbC9maWxlcy5wbCBNYWtlZmlsZSA+PiAkKFRPUCkvTUlORk8KLQotbGlua3M6Ci0JQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL2luY2x1ZGUvb3BlbnNzbCAkKEVYSEVBREVSKQotCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi90ZXN0ICQoVEVTVCkKLQlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vYXBwcyAkKEFQUFMpCi0KLWluc3RhbGw6Ci0JQFsgLW4gIiQoSU5TVEFMTFRPUCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHRvcCBNYWtlZmlsZS4uLgotCUBoZWFkZXJsaXN0PSIkKEVYSEVBREVSKSI7IGZvciBpIGluICQkaGVhZGVybGlzdCA7IFwKLQlkbyAgXAotCShjcCAkJGkgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGk7IFwKLQljaG1vZCA2NDQgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGkgKTsgXAotCWRvbmU7Ci0KLXRhZ3M6Ci0JY3RhZ3MgJChTUkMpCi0KLXRlc3RzOgotCi1saW50OgotCWxpbnQgLURMSU5UICQoSU5DTFVERVMpICQoU1JDKT5mbHVmZgotCi1kZXBlbmQ6Ci0JQFsgLW4gIiQoTUFLRURFUEVORCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHVwcGVyIE1ha2VmaWxlLi4uCi0JJChNQUtFREVQRU5EKSAtLSAkKENGTEFHKSAkKElOQ0xVREVTKSAkKERFUEZMQUcpIC0tICQoUFJPR1MpICQoTElCU1JDKQotCi1kY2xlYW46Ci0JJChQRVJMKSAtcGUgJ2lmICgvXiMgRE8gTk9UIERFTEVURSBUSElTIExJTkUvKSB7cHJpbnQ7IGV4aXQoMCk7fScgJChNQUtFRklMRSkgPk1ha2VmaWxlLm5ldwotCW12IC1mIE1ha2VmaWxlLm5ldyAkKE1BS0VGSUxFKQotCi1jbGVhbjoKLQlybSAtZiAqLnMgKi5vICoub2JqIGxpYiB0YWdzIGNvcmUgLnB1cmUgLm5mcyogKi5vbGQgKi5iYWsgZmx1ZmYKLQotIyBETyBOT1QgREVMRVRFIFRISVMgTElORSAtLSBtYWtlIGRlcGVuZCBkZXBlbmRzIG9uIGl0LgotCi1yYzRfZW5jLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXJjNF9lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotcmM0X2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLXJjNF9lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXJjNF9lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXJjNF9lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JjNC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotcmM0X2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotcmM0X2VuYy5vOiAuLi9jcnlwdGxpYi5oIHJjNF9lbmMuYyByYzRfbG9jbC5oCi1yYzRfZmJsay5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1yYzRfZmJsay5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1yYzRfZmJsay5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLXJjNF9mYmxrLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLXJjNF9mYmxrLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1yYzRfZmJsay5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotcmM0X2ZibGsubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JjNC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotcmM0X2ZibGsubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLXJjNF9mYmxrLm86IC4uL2NyeXB0bGliLmggcmM0X2ZibGsuYyByYzRfbG9jbC5oCi1yYzRfc2tleS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1yYzRfc2tleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1yYzRfc2tleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLXJjNF9za2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLXJjNF9za2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1yYzRfc2tleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotcmM0X3NrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JjNC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotcmM0X3NrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLXJjNF9za2V5Lm86IC4uL2NyeXB0bGliLmggcmM0X2xvY2wuaCByYzRfc2tleS5jCmRpZmYgLS1naXQgYS9jcnlwdG8vcmM0L2FzbS9yYzQtNTg2LnBsIGIvY3J5cHRvL3JjNC9hc20vcmM0LTU4Ni5wbAppbmRleCBlZjdlZWU3Li4zOGE0NGE3IDEwMDY0NAotLS0gYS9jcnlwdG8vcmM0L2FzbS9yYzQtNTg2LnBsCisrKyBiL2NyeXB0by9yYzQvYXNtL3JjNC01ODYucGwKQEAgLTEsMTQgKzEsMjEgQEAKLSMhL3Vzci9sb2NhbC9iaW4vcGVybAorIyEvdXNyL2Jpbi9lbnYgcGVybAorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFtSZV13cml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPiBmb3IgdGhlIE9wZW5TU0wKKyMgcHJvamVjdC4gVGhlIG1vZHVsZSBpcywgaG93ZXZlciwgZHVhbCBsaWNlbnNlZCB1bmRlciBPcGVuU1NMIGFuZAorIyBDUllQVE9HQU1TIGxpY2Vuc2VzIGRlcGVuZGluZyBvbiB3aGVyZSB5b3Ugb2J0YWluIGl0LiBGb3IgZnVydGhlcgorIyBkZXRhaWxzIHNlZSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL35hcHByby9jcnlwdG9nYW1zLy4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogIyBBdCBzb21lIHBvaW50IGl0IGJlY2FtZSBhcHBhcmVudCB0aGF0IHRoZSBvcmlnaW5hbCBTU0xlYXkgUkM0Ci0jIGFzc2VtYmxlciBpbXBsZW1lbnRhdGlvbiBwZXJmb3JtcyBzdWJvcHRpbWFseSBvbiBsYXRlc3QgSUEtMzIKKyMgYXNzZW1ibGVyIGltcGxlbWVudGF0aW9uIHBlcmZvcm1zIHN1Ym9wdGltYWxseSBvbiBsYXRlc3QgSUEtMzIKICMgbWljcm9hcmNoaXRlY3R1cmVzLiBBZnRlciByZS10dW5pbmcgcGVyZm9ybWFuY2UgaGFzIGNoYW5nZWQgYXMKICMgZm9sbG93aW5nOgogIwotIyBQZW50aXVtCSswJQotIyBQZW50aXVtIElJSQkrMTclCi0jIEFNRAkJKzUyJSgqKQotIyBQNAkJKzE4MCUoKiopCisjIFBlbnRpdW0JLTEwJQorIyBQZW50aXVtIElJSQkrMTIlCisjIEFNRAkJKzUwJSgqKQorIyBQNAkJKzI1MCUoKiopCiAjCiAjICgqKQlUaGlzIG51bWJlciBpcyBhY3R1YWxseSBhIHRyYWRlLW9mZjotKSBJdCdzIHBvc3NpYmxlIHRvCiAjCWFjaGlldmUJKzcyJSwgYnV0IGF0IHRoZSBjb3N0IG9mIC00OCUgb2ZmIFBJSUkgcGVyZm9ybWFuY2UuCkBAIC0xNywyMTQgKzI0LDI0NyBAQAogIwlGb3IgcmVmZXJlbmNlISBUaGlzIGNvZGUgZGVsaXZlcnMgfjgwJSBvZiByYzQtYW1kNjQucGwKICMJcGVyZm9ybWFuY2Ugb24gdGhlIHNhbWUgT3B0ZXJvbiBtYWNoaW5lLgogIyAoKiopCVRoaXMgbnVtYmVyIHJlcXVpcmVzIGNvbXByZXNzZWQga2V5IHNjaGVkdWxlIHNldCB1cCBieQotIwlSQzRfc2V0X2tleSBhbmQgdGhlcmVmb3JlIGRvZXNuJ3QgYXBwbHkgdG8gMC45LjcgW29wdGlvbiBmb3IKLSMJY29tcHJlc3NlZCBrZXkgc2NoZWR1bGUgaXMgaW1wbGVtZW50ZWQgaW4gMC45LjggYW5kIGxhdGVyLAotIwlzZWUgY29tbWVudGFyeSBzZWN0aW9uIGluIHJjNF9za2V5LmMgZm9yIGZ1cnRoZXIgZGV0YWlsc10uCisjCVJDNF9zZXRfa2V5IFtzZWUgY29tbWVudGFyeSBiZWxvdyBmb3IgZnVydGhlciBkZXRhaWxzXS4KICMKICMJCQkJCTxhcHByb0BmeS5jaGFsbWVycy5zZT4KIAotcHVzaChASU5DLCJwZXJsYXNtIiwiLi4vLi4vcGVybGFzbSIpOworJDAgPX4gbS8oLipbXC9cXF0pW15cL1xcXSskLzsgJGRpcj0kMTsKK3B1c2goQElOQywiJHtkaXJ9IiwiJHtkaXJ9Li4vLi4vcGVybGFzbSIpOwogcmVxdWlyZSAieDg2YXNtLnBsIjsKIAogJmFzbV9pbml0KCRBUkdWWzBdLCJyYzQtNTg2LnBsIik7CiAKLSR4PSJlYXgiOwotJHk9ImVieCI7CiskeHg9ImVheCI7CiskeXk9ImVieCI7CiAkdHg9ImVjeCI7CiAkdHk9ImVkeCI7Ci0kaW49ImVzaSI7Ci0kb3V0PSJlZGkiOwotJGQ9ImVicCI7CiskaW5wPSJlc2kiOworJG91dD0iZWJwIjsKKyRkYXQ9ImVkaSI7CiAKLSZSQzQoIlJDNCIpOworc3ViIFJDNF9sb29wIHsKKyAgbXkgJGk9c2hpZnQ7CisgIG15ICRmdW5jID0gKCRpPT0wKT8qbW92OipvcjsKKworCSZhZGQJKCZMQigkeXkpLCZMQigkdHgpKTsKKwkmbW92CSgkdHksJkRXUCgwLCRkYXQsJHl5LDQpKTsKKwkmbW92CSgmRFdQKDAsJGRhdCwkeXksNCksJHR4KTsKKwkmbW92CSgmRFdQKDAsJGRhdCwkeHgsNCksJHR5KTsKKwkmYWRkCSgkdHksJHR4KTsKKwkmaW5jCSgmTEIoJHh4KSk7CisJJmFuZAkoJHR5LDB4ZmYpOworCSZyb3IJKCRvdXQsOCkJaWYgKCRpIT0wKTsKKwlpZiAoJGk8MykgeworCSAgJm1vdgkoJHR4LCZEV1AoMCwkZGF0LCR4eCw0KSk7CisJfSBlbHNlIHsKKwkgICZtb3YJKCR0eCwmd3BhcmFtKDMpKTsJIyByZWxvYWQgW3JlLWJpYXNlZF0gb3V0CisJfQorCSYkZnVuYwkoJG91dCwmRFdQKDAsJGRhdCwkdHksNCkpOworfQorCisjIHZvaWQgUkM0KFJDNF9LRVkgKmtleSxzaXplX3QgbGVuLGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucCx1bnNpZ25lZCBjaGFyICpvdXQpOworJmZ1bmN0aW9uX2JlZ2luKCJSQzQiKTsKKwkmbW92CSgkZGF0LCZ3cGFyYW0oMCkpOwkjIGxvYWQga2V5IHNjaGVkdWxlIHBvaW50ZXIKKwkmbW92CSgkdHksICZ3cGFyYW0oMSkpOwkjIGxvYWQgbGVuCisJJm1vdgkoJGlucCwmd3BhcmFtKDIpKTsJIyBsb2FkIGlucAorCSZtb3YJKCRvdXQsJndwYXJhbSgzKSk7CSMgbG9hZCBvdXQKKworCSZ4b3IJKCR4eCwkeHgpOwkJIyBhdm9pZCBwYXJ0aWFsIHJlZ2lzdGVyIHN0YWxscworCSZ4b3IJKCR5eSwkeXkpOworCisJJmNtcAkoJHR5LDApOwkJIyBzYWZldHkgbmV0CisJJmplCSgmbGFiZWwoImFib3J0IikpOworCisJJm1vdgkoJkxCKCR4eCksJkJQKDAsJGRhdCkpOwkjIGxvYWQga2V5LT54CisJJm1vdgkoJkxCKCR5eSksJkJQKDQsJGRhdCkpOwkjIGxvYWQga2V5LT55CisJJmFkZAkoJGRhdCw4KTsKKworCSZsZWEJKCR0eCwmRFdQKDAsJGlucCwkdHkpKTsKKwkmc3ViCSgkb3V0LCRpbnApOwkJIyByZS1iaWFzIG91dAorCSZtb3YJKCZ3cGFyYW0oMSksJHR4KTsJIyBzYXZlIGlucHV0K2xlbgorCisJJmluYwkoJkxCKCR4eCkpOworCisJIyBkZXRlY3QgY29tcHJlc3NlZCBrZXkgc2NoZWR1bGUuLi4KKwkmY21wCSgmRFdQKDI1NiwkZGF0KSwtMSk7CisJJmplCSgmbGFiZWwoIlJDNF9DSEFSIikpOworCisJJm1vdgkoJHR4LCZEV1AoMCwkZGF0LCR4eCw0KSk7CisKKwkmYW5kCSgkdHksLTQpOwkJIyBob3cgbWFueSA0LWJ5dGUgY2h1bmtzPworCSZqegkoJmxhYmVsKCJsb29wMSIpKTsKKworCSZsZWEJKCR0eSwmRFdQKC00LCRpbnAsJHR5KSk7CisJJm1vdgkoJndwYXJhbSgyKSwkdHkpOwkjIHNhdmUgaW5wdXQrKGxlbi80KSo0LTQKKwkmbW92CSgmd3BhcmFtKDMpLCRvdXQpOwkjICRvdXQgYXMgYWNjdW11bGF0b3IgaW4gdGhpcyBsb29wCisKKwkmc2V0X2xhYmVsKCJsb29wNCIsMTYpOworCQlmb3IgKCRpPTA7JGk8NDskaSsrKSB7IFJDNF9sb29wKCRpKTsgfQorCQkmcm9yCSgkb3V0LDgpOworCQkmeG9yCSgkb3V0LCZEV1AoMCwkaW5wKSk7CisJCSZjbXAJKCRpbnAsJndwYXJhbSgyKSk7CSMgY29tcGFyZSB0byBpbnB1dCsobGVuLzQpKjQtNAorCQkmbW92CSgmRFdQKDAsJHR4LCRpbnApLCRvdXQpOyMgJHR4IGhvbGRzIHJlLWJpYXNlZCBvdXQgaGVyZQorCQkmbGVhCSgkaW5wLCZEV1AoNCwkaW5wKSk7CisJCSZtb3YJKCR0eCwmRFdQKDAsJGRhdCwkeHgsNCkpOworCSZqYgkoJmxhYmVsKCJsb29wNCIpKTsKKworCSZjbXAJKCRpbnAsJndwYXJhbSgxKSk7CSMgY29tcGFyZSB0byBpbnB1dCtsZW4KKwkmamUJKCZsYWJlbCgiZG9uZSIpKTsKKwkmbW92CSgkb3V0LCZ3cGFyYW0oMykpOwkjIHJlc3RvcmUgJG91dAorCisJJnNldF9sYWJlbCgibG9vcDEiLDE2KTsKKwkJJmFkZAkoJkxCKCR5eSksJkxCKCR0eCkpOworCQkmbW92CSgkdHksJkRXUCgwLCRkYXQsJHl5LDQpKTsKKwkJJm1vdgkoJkRXUCgwLCRkYXQsJHl5LDQpLCR0eCk7CisJCSZtb3YJKCZEV1AoMCwkZGF0LCR4eCw0KSwkdHkpOworCQkmYWRkCSgkdHksJHR4KTsKKwkJJmluYwkoJkxCKCR4eCkpOworCQkmYW5kCSgkdHksMHhmZik7CisJCSZtb3YJKCR0eSwmRFdQKDAsJGRhdCwkdHksNCkpOworCQkmeG9yCSgmTEIoJHR5KSwmQlAoMCwkaW5wKSk7CisJCSZsZWEJKCRpbnAsJkRXUCgxLCRpbnApKTsKKwkJJm1vdgkoJHR4LCZEV1AoMCwkZGF0LCR4eCw0KSk7CisJCSZjbXAJKCRpbnAsJndwYXJhbSgxKSk7CSMgY29tcGFyZSB0byBpbnB1dCtsZW4KKwkJJm1vdgkoJkJQKC0xLCRvdXQsJGlucCksJkxCKCR0eSkpOworCSZqYgkoJmxhYmVsKCJsb29wMSIpKTsKKworCSZqbXAJKCZsYWJlbCgiZG9uZSIpKTsKKworIyB0aGlzIGlzIGVzc2VudGlhbGx5IEludGVsIFA0IHNwZWNpZmljIGNvZGVwYXRoLi4uCismc2V0X2xhYmVsKCJSQzRfQ0hBUiIsMTYpOworCSZtb3Z6CSgkdHgsJkJQKDAsJGRhdCwkeHgpKTsKKwkjIHN0cmFuZ2VseSBlbm91Z2ggdW5yb2xsZWQgbG9vcCBwZXJmb3JtcyBvdmVyIDIwJSBzbG93ZXIuLi4KKwkmc2V0X2xhYmVsKCJjbG9vcDEiKTsKKwkJJmFkZAkoJkxCKCR5eSksJkxCKCR0eCkpOworCQkmbW92egkoJHR5LCZCUCgwLCRkYXQsJHl5KSk7CisJCSZtb3YJKCZCUCgwLCRkYXQsJHl5KSwmTEIoJHR4KSk7CisJCSZtb3YJKCZCUCgwLCRkYXQsJHh4KSwmTEIoJHR5KSk7CisJCSZhZGQJKCZMQigkdHkpLCZMQigkdHgpKTsKKwkJJm1vdnoJKCR0eSwmQlAoMCwkZGF0LCR0eSkpOworCQkmYWRkCSgmTEIoJHh4KSwxKTsKKwkJJnhvcgkoJkxCKCR0eSksJkJQKDAsJGlucCkpOworCQkmbGVhCSgkaW5wLCZEV1AoMSwkaW5wKSk7CisJCSZtb3Z6CSgkdHgsJkJQKDAsJGRhdCwkeHgpKTsKKwkJJmNtcAkoJGlucCwmd3BhcmFtKDEpKTsKKwkJJm1vdgkoJkJQKC0xLCRvdXQsJGlucCksJkxCKCR0eSkpOworCSZqYgkoJmxhYmVsKCJjbG9vcDEiKSk7CisKKyZzZXRfbGFiZWwoImRvbmUiKTsKKwkmZGVjCSgmTEIoJHh4KSk7CisJJm1vdgkoJkJQKC00LCRkYXQpLCZMQigkeXkpKTsJIyBzYXZlIGtleS0+eQorCSZtb3YJKCZCUCgtOCwkZGF0KSwmTEIoJHh4KSk7CSMgc2F2ZSBrZXktPngKKyZzZXRfbGFiZWwoImFib3J0Iik7CismZnVuY3Rpb25fZW5kKCJSQzQiKTsKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyRpbnA9ImVzaSI7Ciskb3V0PSJlZGkiOworJGlkaT0iZWJwIjsKKyRpZG89ImVjeCI7CiskaWR4PSJlZHgiOworCismZXh0ZXJuYWxfbGFiZWwoIk9QRU5TU0xfaWEzMmNhcF9QIik7CisKKyMgdm9pZCBSQzRfc2V0X2tleShSQzRfS0VZICprZXksaW50IGxlbixjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKKyZmdW5jdGlvbl9iZWdpbigiUkM0X3NldF9rZXkiKTsKKwkmbW92CSgkb3V0LCZ3cGFyYW0oMCkpOwkJIyBsb2FkIGtleQorCSZtb3YJKCRpZGksJndwYXJhbSgxKSk7CQkjIGxvYWQgbGVuCisJJm1vdgkoJGlucCwmd3BhcmFtKDIpKTsJCSMgbG9hZCBkYXRhCisJJnBpY21ldXAoJGlkeCwiT1BFTlNTTF9pYTMyY2FwX1AiKTsKKworCSZsZWEJKCRvdXQsJkRXUCgyKjQsJG91dCkpOwkJIyAma2V5LT5kYXRhCisJJmxlYQkoJGlucCwmRFdQKDAsJGlucCwkaWRpKSk7CSMgJGlucCB0byBwb2ludCBhdCB0aGUgZW5kCisJJm5lZwkoJGlkaSk7CisJJnhvcgkoImVheCIsImVheCIpOworCSZtb3YJKCZEV1AoLTQsJG91dCksJGlkaSk7CQkjIGJvcnJvdyBrZXktPnkKKworCSZidAkoJkRXUCgwLCRpZHgpLDIwKTsJCSMgY2hlY2sgZm9yIGJpdCMyMAorCSZqYwkoJmxhYmVsKCJjMXN0bG9vcCIpKTsKKworJnNldF9sYWJlbCgidzFzdGxvb3AiLDE2KTsKKwkmbW92CSgmRFdQKDAsJG91dCwiZWF4Iiw0KSwiZWF4Iik7CSMga2V5LT5kYXRhW2ldPWk7CisJJmFkZAkoJkxCKCJlYXgiKSwxKTsJCQkjIGkrKzsKKwkmam5jCSgmbGFiZWwoIncxc3Rsb29wIikpOworCisJJnhvcgkoJGlkbywkaWRvKTsKKwkmeG9yCSgkaWR4LCRpZHgpOworCismc2V0X2xhYmVsKCJ3Mm5kbG9vcCIsMTYpOworCSZtb3YJKCJlYXgiLCZEV1AoMCwkb3V0LCRpZG8sNCkpOworCSZhZGQJKCZMQigkaWR4KSwmQlAoMCwkaW5wLCRpZGkpKTsKKwkmYWRkCSgmTEIoJGlkeCksJkxCKCJlYXgiKSk7CisJJmFkZAkoJGlkaSwxKTsKKwkmbW92CSgiZWJ4IiwmRFdQKDAsJG91dCwkaWR4LDQpKTsKKwkmam56CSgmbGFiZWwoIndub3dyYXAiKSk7CisJICAmbW92CSgkaWRpLCZEV1AoLTQsJG91dCkpOworCSZzZXRfbGFiZWwoIndub3dyYXAiKTsKKwkmbW92CSgmRFdQKDAsJG91dCwkaWR4LDQpLCJlYXgiKTsKKwkmbW92CSgmRFdQKDAsJG91dCwkaWRvLDQpLCJlYngiKTsKKwkmYWRkCSgmTEIoJGlkbyksMSk7CisJJmpuYwkoJmxhYmVsKCJ3Mm5kbG9vcCIpKTsKKyZqbXAJKCZsYWJlbCgiZXhpdCIpKTsKKworIyBVbmxpa2UgYWxsIG90aGVyIHg4NiBbYW5kIHg4Nl82NF0gaW1wbGVtZW50YXRpb25zLCBJbnRlbCBQNCBjb3JlCisjIFtpbmNsdWRpbmcgRU02NFRdIHdhcyBmb3VuZCB0byBwZXJmb3JtIHBvb3JseSB3aXRoIGFib3ZlICIzMi1iaXQiIGtleQorIyBzY2hlZHVsZSwgYS5rLmEuIFJDNF9JTlQuIFBlcmZvcm1hbmNlIGltcHJvdmVtZW50IGZvciBJQS0zMiBoYW5kLWNvZGVkCisjIGFzc2VtYmxlciB0dXJuZWQgb3V0IHRvIGJlIDMuNXggaWYgcmUtY29kZWQgZm9yIGNvbXByZXNzZWQgOC1iaXQgb25lLAorIyBhLmsuYS4gUkM0X0NIQVIhIEl0J3MgaG93ZXZlciBpbmFwcHJvcHJpYXRlIHRvIGp1c3Qgc3dpdGNoIHRvIDgtYml0CisjIHNjaGVkdWxlIGZvciB4ODZbXzY0XSwgYmVjYXVzZSBub24tUDQgaW1wbGVtZW50YXRpb25zIHN1ZmZlciBmcm9tCisjIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGxvc3NlcyB0aGVuLCBlLmcuIFBJSUkgZXhoaWJpdHMgPjJ4CisjIGRldGVyaW9yYXRpb24sIGFuZCBzbyBkb2VzIE9wdGVyb24uIEluIG9yZGVyIHRvIGFzc3VyZSBvcHRpbWFsCisjIGFsbC1yb3VuZCBwZXJmb3JtYW5jZSwgd2UgZGV0ZWN0IFA0IGF0IHJ1bi10aW1lIGFuZCBzZXQgdXAgY29tcHJlc3NlZAorIyBrZXkgc2NoZWR1bGUsIHdoaWNoIGlzIHJlY29nbml6ZWQgYnkgUkM0IHByb2NlZHVyZS4KKworJnNldF9sYWJlbCgiYzFzdGxvb3AiLDE2KTsKKwkmbW92CSgmQlAoMCwkb3V0LCJlYXgiKSwmTEIoImVheCIpKTsJIyBrZXktPmRhdGFbaV09aTsKKwkmYWRkCSgmTEIoImVheCIpLDEpOwkJCSMgaSsrOworCSZqbmMJKCZsYWJlbCgiYzFzdGxvb3AiKSk7CisKKwkmeG9yCSgkaWRvLCRpZG8pOworCSZ4b3IJKCRpZHgsJGlkeCk7CisJJnhvcgkoImVieCIsImVieCIpOworCismc2V0X2xhYmVsKCJjMm5kbG9vcCIsMTYpOworCSZtb3YJKCZMQigiZWF4IiksJkJQKDAsJG91dCwkaWRvKSk7CisJJmFkZAkoJkxCKCRpZHgpLCZCUCgwLCRpbnAsJGlkaSkpOworCSZhZGQJKCZMQigkaWR4KSwmTEIoImVheCIpKTsKKwkmYWRkCSgkaWRpLDEpOworCSZtb3YJKCZMQigiZWJ4IiksJkJQKDAsJG91dCwkaWR4KSk7CisJJmpuegkoJmxhYmVsKCJjbm93cmFwIikpOworCSAgJm1vdgkoJGlkaSwmRFdQKC00LCRvdXQpKTsKKwkmc2V0X2xhYmVsKCJjbm93cmFwIik7CisJJm1vdgkoJkJQKDAsJG91dCwkaWR4KSwmTEIoImVheCIpKTsKKwkmbW92CSgmQlAoMCwkb3V0LCRpZG8pLCZMQigiZWJ4IikpOworCSZhZGQJKCZMQigkaWRvKSwxKTsKKwkmam5jCSgmbGFiZWwoImMybmRsb29wIikpOworCisJJm1vdgkoJkRXUCgyNTYsJG91dCksLTEpOwkJIyBtYXJrIHNjaGVkdWxlIGFzIGNvbXByZXNzZWQKKworJnNldF9sYWJlbCgiZXhpdCIpOworCSZ4b3IJKCJlYXgiLCJlYXgiKTsKKwkmbW92CSgmRFdQKC04LCRvdXQpLCJlYXgiKTsJCSMga2V5LT54PTA7CisJJm1vdgkoJkRXUCgtNCwkb3V0KSwiZWF4Iik7CQkjIGtleS0+eT0wOworJmZ1bmN0aW9uX2VuZCgiUkM0X3NldF9rZXkiKTsKKworIyBjb25zdCBjaGFyICpSQzRfb3B0aW9ucyh2b2lkKTsKKyZmdW5jdGlvbl9iZWdpbl9CKCJSQzRfb3B0aW9ucyIpOworCSZjYWxsCSgmbGFiZWwoInBpY19wb2ludCIpKTsKKyZzZXRfbGFiZWwoInBpY19wb2ludCIpOworCSZibGluZHBvcCgiZWF4Iik7CisJJmxlYQkoImVheCIsJkRXUCgmbGFiZWwoIm9wdHMiKS4iLSIuJmxhYmVsKCJwaWNfcG9pbnQiKSwiZWF4IikpOworCSZwaWNtZXVwKCJlZHgiLCJPUEVOU1NMX2lhMzJjYXBfUCIpOworCSZidAkoJkRXUCgwLCJlZHgiKSwyMCk7CisJJmpuYwkoJmxhYmVsKCJza2lwIikpOworCSAgJmFkZAkoImVheCIsMTIpOworCSZzZXRfbGFiZWwoInNraXAiKTsKKwkmcmV0CSgpOworJnNldF9sYWJlbCgib3B0cyIsNjQpOworJmFzY2l6CSgicmM0KDR4LGludCkiKTsKKyZhc2NpegkoInJjNCgxeCxjaGFyKSIpOworJmFzY2l6CSgiUkM0IGZvciB4ODYsIENSWVBUT0dBTVMgYnkgPGFwcHJvXEBvcGVuc3NsLm9yZz4iKTsKKyZhbGlnbgkoNjQpOworJmZ1bmN0aW9uX2VuZF9CKCJSQzRfb3B0aW9ucyIpOwogCiAmYXNtX2ZpbmlzaCgpOwogCi1zdWIgUkM0X2xvb3AKLQl7Ci0JbG9jYWwoJG4sJHAsJGNoYXIpPUBfOwotCi0JJmNvbW1lbnQoIlJvdW5kICRuIik7Ci0KLQlpZiAoJGNoYXIpCi0JCXsKLQkJaWYgKCRwID49IDApCi0JCQl7Ci0JCQkgJm1vdigkdHksCSZzd3RtcCgyKSk7Ci0JCQkmY21wKCR0eSwJJGluKTsKLQkJCSAmamJlKCZsYWJlbCgiZmluaXNoZWQiKSk7Ci0JCQkmaW5jKCRpbik7Ci0JCQl9Ci0JCWVsc2UKLQkJCXsKLQkJCSZhZGQoJHR5LAk4KTsKLQkJCSAmaW5jKCRpbik7Ci0JCQkmY21wKCR0eSwJJGluKTsKLQkJCSAmamIoJmxhYmVsKCJmaW5pc2hlZCIpKTsKLQkJCSZtb3YoJnN3dG1wKDIpLAkkdHkpOwotCQkJfQotCQl9Ci0JIyBNb3ZlZCBvdXQKLQkjICZtb3YoCSR0eCwJCSZEV1AoMCwkZCwkeCw0KSkgaWYgJHAgPCAwOwotCi0JJmFkZCgJJkxCKCR5KSwJJkxCKCR0eCkpOwotCSZtb3YoCSR0eSwJCSZEV1AoMCwkZCwkeSw0KSk7Ci0JICMgWFhYCi0JJm1vdigJJkRXUCgwLCRkLCR4LDQpLCR0eSk7Ci0JICZhZGQoCSR0eSwJCSR0eCk7Ci0JJm1vdigJJkRXUCgwLCRkLCR5LDQpLCR0eCk7Ci0JICZhbmQoCSR0eSwJCTB4ZmYpOwotCSAmaW5jKAkmTEIoJHgpKTsJCQkjIE5FWFQgUk9VTkQKLQkmbW92KAkkdHgsCQkmRFdQKDAsJGQsJHgsNCkpIGlmICRwIDwgMTsgIyBORVhUIFJPVU5ECi0JICZtb3YoCSR0eSwJCSZEV1AoMCwkZCwkdHksNCkpOwotCi0JaWYgKCEkY2hhcikKLQkJewotCQkjbW92ZWQgdXAgaW50byBsYXN0IHJvdW5kCi0JCWlmICgkcCA+PSAxKQotCQkJewotCQkJJmFkZCgJJG91dCwJOCkKLQkJCX0KLQkJJm1vdmIoCSZCUCgkbiwiZXNwIiwiIiwwKSwJJkxCKCR0eSkpOwotCQl9Ci0JZWxzZQotCQl7Ci0JCSMgTm90ZSBpbis9OCBoYXMgb2NjdXJlZAotCQkmbW92YigJJkhCKCR0eSksCSZCUCgtMSwkaW4sIiIsMCkpOwotCQkgIyBYWFgKLQkJJnhvcmIoJkxCKCR0eSksCQkmSEIoJHR5KSk7Ci0JCSAjIFhYWAotCQkmbW92YigmQlAoJG4sJG91dCwiIiwwKSwmTEIoJHR5KSk7Ci0JCX0KLQl9Ci0KLQotc3ViIFJDNAotCXsKLQlsb2NhbCgkbmFtZSk9QF87Ci0KLQkmZnVuY3Rpb25fYmVnaW5fQigkbmFtZSwiIik7Ci0KLQkmbW92KCR0eSwmd3BhcmFtKDEpKTsJCSMgbGVuCi0JJmNtcCgkdHksMCk7Ci0JJmpuZSgmbGFiZWwoInByb2NlZWQiKSk7Ci0JJnJldCgpOwotCSZzZXRfbGFiZWwoInByb2NlZWQiKTsKLQotCSZjb21tZW50KCIiKTsKLQotCSZwdXNoKCJlYnAiKTsKLQkgJnB1c2goImVieCIpOwotCSZwdXNoKCJlc2kiKTsKLQkgJnhvcigJJHgsCSR4KTsJCSMgYXZvaWQgcGFydGlhbCByZWdpc3RlciBzdGFsbHMKLQkmcHVzaCgiZWRpIik7Ci0JICZ4b3IoCSR5LAkkeSk7CQkjIGF2b2lkIHBhcnRpYWwgcmVnaXN0ZXIgc3RhbGxzCi0JJm1vdigJJGQsCSZ3cGFyYW0oMCkpOwkjIGtleQotCSAmbW92KAkkaW4sCSZ3cGFyYW0oMikpOwotCi0JJm1vdmIoCSZMQigkeCksCSZCUCgwLCRkLCIiLDEpKTsKLQkgJm1vdmIoCSZMQigkeSksCSZCUCg0LCRkLCIiLDEpKTsKLQotCSZtb3YoCSRvdXQsCSZ3cGFyYW0oMykpOwotCSAmaW5jKAkmTEIoJHgpKTsKLQotCSZzdGFja19wdXNoKDMpOwkjIDMgdGVtcCB2YXJpYWJsZXMKLQkgJmFkZCgJJGQsCTgpOwotCi0JIyBkZXRlY3QgY29tcHJlc3NlZCBzY2hlZHVsZSwgc2VlIGNvbW1lbnRhcnkgc2VjdGlvbiBpbiByYzRfc2tleS5jLi4uCi0JIyBpbiAwLjkuNyBjb250ZXh0IH41MCBieXRlcyBiZWxvdyBSQzRfQ0hBUiBsYWJlbCByZW1haW4gcmVkdW5kYW50LAotCSMgYXMgY29tcHJlc3NlZCBrZXkgc2NoZWR1bGUgaXMgc2V0IHVwIGluIDAuOS44IGFuZCBsYXRlci4KLQkmY21wKCZEV1AoMjU2LCRkKSwtMSk7Ci0JJmplKCZsYWJlbCgiUkM0X0NIQVIiKSk7Ci0KLQkgJmxlYSgJJHR5LAkmRFdQKC04LCR0eSwkaW4pKTsKLQotCSMgY2hlY2sgZm9yIDAgbGVuZ3RoIGlucHV0Ci0KLQkgJm1vdigJJnN3dG1wKDIpLAkkdHkpOwkjIHRoaXMgaXMgbm93IGFkZHJlc3MgdG8gZXhpdCBhdAotCSZtb3YoCSR0eCwJJkRXUCgwLCRkLCR4LDQpKTsKLQotCSAmY21wKAkkdHksCSRpbik7Ci0JJmpiKAkmbGFiZWwoImVuZCIpKTsgIyBsZXNzIHRoYW4gOCBieXRlcwotCi0JJnNldF9sYWJlbCgic3RhcnQiKTsKLQotCSMgZmlsbGluZyBERUxBWSBTTE9UCi0JJmFkZCgJJGluLAk4KTsKLQotCSZSQzRfbG9vcCgwLC0xLDApOwotCSZSQzRfbG9vcCgxLDAsMCk7Ci0JJlJDNF9sb29wKDIsMCwwKTsKLQkmUkM0X2xvb3AoMywwLDApOwotCSZSQzRfbG9vcCg0LDAsMCk7Ci0JJlJDNF9sb29wKDUsMCwwKTsKLQkmUkM0X2xvb3AoNiwwLDApOwotCSZSQzRfbG9vcCg3LDEsMCk7Ci0JCi0JJmNvbW1lbnQoImFwcGx5IHRoZSBjaXBoZXIgdGV4dCIpOwotCSMgeG9yIHRoZSBjaXBoZXIgZGF0YSB3aXRoIGlucHV0Ci0KLQkjJmFkZCgJJG91dCwJOCk7ICNtb3ZlZCB1cCBpbnRvIGxhc3Qgcm91bmQKLQotCSZtb3YoCSR0eCwJJnN3dG1wKDApKTsKLQkgJm1vdigJJHR5LAkmRFdQKC04LCRpbiwiIiwwKSk7Ci0JJnhvcigJJHR4LAkkdHkpOwotCSAmbW92KAkkdHksCSZEV1AoLTQsJGluLCIiLDApKTsgCi0JJm1vdigJJkRXUCgtOCwkb3V0LCIiLDApLAkkdHgpOwotCSAmbW92KAkkdHgsCSZzd3RtcCgxKSk7Ci0JJnhvcigJJHR4LAkkdHkpOwotCSAmbW92KAkkdHksCSZzd3RtcCgyKSk7CSMgbG9hZCBlbmQgcHRyOwotCSZtb3YoCSZEV1AoLTQsJG91dCwiIiwwKSwJJHR4KTsKLQkgJm1vdigJJHR4LAkJJkRXUCgwLCRkLCR4LDQpKTsKLQkmY21wKCRpbiwJJHR5KTsKLQkgJmpiZSgmbGFiZWwoInN0YXJ0IikpOwotCi0JJnNldF9sYWJlbCgiZW5kIik7Ci0KLQkjIFRoZXJlIGlzIHF1aXRlIGEgYml0IG9mIGV4dHJhIGNyYXAgaW4gUkM0X2xvb3AoKSBmb3IgdGhpcwotCSMgZmlyc3Qgcm91bmQKLQkmUkM0X2xvb3AoMCwtMSwxKTsKLQkmUkM0X2xvb3AoMSwwLDEpOwotCSZSQzRfbG9vcCgyLDAsMSk7Ci0JJlJDNF9sb29wKDMsMCwxKTsKLQkmUkM0X2xvb3AoNCwwLDEpOwotCSZSQzRfbG9vcCg1LDAsMSk7Ci0JJlJDNF9sb29wKDYsMSwxKTsKLQotCSZqbXAoJmxhYmVsKCJmaW5pc2hlZCIpKTsKLQotCSZhbGlnbigxNik7Ci0JIyB0aGlzIGlzIGVzc2VudGlhbGx5IEludGVsIFA0IHNwZWNpZmljIGNvZGVwYXRoLCBzZWUgcmM0X3NrZXkuYywKLQkjIGFuZCBpcyBlbmdhZ2VkIGluIDAuOS44IGFuZCBsYXRlciBjb250ZXh0Li4uCi0JJnNldF9sYWJlbCgiUkM0X0NIQVIiKTsKLQotCSZsZWEJKCR0eSwmRFdQKDAsJGluLCR0eSkpOwotCSZtb3YJKCZzd3RtcCgyKSwkdHkpOwotCSZtb3Z6CSgkdHgsJkJQKDAsJGQsJHgpKTsKLQotCSMgc3RyYW5nZWx5IGVub3VnaCB1bnJvbGxlZCBsb29wIHBlcmZvcm1zIG92ZXIgMjAlIHNsb3dlci4uLgotCSZzZXRfbGFiZWwoIlJDNF9DSEFSX2xvb3AiKTsKLQkJJmFkZAkoJkxCKCR5KSwmTEIoJHR4KSk7Ci0JCSZtb3Z6CSgkdHksJkJQKDAsJGQsJHkpKTsKLQkJJm1vdmIJKCZCUCgwLCRkLCR5KSwmTEIoJHR4KSk7Ci0JCSZtb3ZiCSgmQlAoMCwkZCwkeCksJkxCKCR0eSkpOwotCQkmYWRkCSgmTEIoJHR5KSwmTEIoJHR4KSk7Ci0JCSZtb3Z6CSgkdHksJkJQKDAsJGQsJHR5KSk7Ci0JCSZhZGQJKCZMQigkeCksMSk7Ci0JCSZ4b3JiCSgmTEIoJHR5KSwmQlAoMCwkaW4pKTsKLQkJJmxlYQkoJGluLCZEV1AoMSwkaW4pKTsKLQkJJm1vdnoJKCR0eCwmQlAoMCwkZCwkeCkpOwotCQkmY21wCSgkaW4sJnN3dG1wKDIpKTsKLQkJJm1vdmIJKCZCUCgwLCRvdXQpLCZMQigkdHkpKTsKLQkJJmxlYQkoJG91dCwmRFdQKDEsJG91dCkpOwotCSZqYgkoJmxhYmVsKCJSQzRfQ0hBUl9sb29wIikpOwotCi0JJnNldF9sYWJlbCgiZmluaXNoZWQiKTsKLQkmZGVjKAkkeCk7Ci0JICZzdGFja19wb3AoMyk7Ci0JJm1vdmIoCSZCUCgtNCwkZCwiIiwwKSwmTEIoJHkpKTsKLQkgJm1vdmIoCSZCUCgtOCwkZCwiIiwwKSwmTEIoJHgpKTsKLQotCSZmdW5jdGlvbl9lbmQoJG5hbWUpOwotCX0KLQpkaWZmIC0tZ2l0IGEvY3J5cHRvL3JjNC9hc20vcmM0LWlhNjQuUyBiL2NyeXB0by9yYzQvYXNtL3JjNC1pYTY0LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyMTBjNDcuLjAwMDAwMDAKLS0tIGEvY3J5cHRvL3JjNC9hc20vcmM0LWlhNjQuUworKysgL2Rldi9udWxsCkBAIC0xLDE1OSArMCwwIEBACi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gV3JpdHRlbiBieSBBbmR5IFBvbHlha292IDxhcHByb0BmeS5jaGFsbWVycy5zZT4gZm9yIHRoZSBPcGVuU1NMCi0vLyBwcm9qZWN0LgotLy8KLS8vIFJpZ2h0cyBmb3IgcmVkaXN0cmlidXRpb24gYW5kIHVzYWdlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zIGFyZQotLy8gZ3JhbnRlZCBhY2NvcmRpbmcgdG8gdGhlIE9wZW5TU0wgbGljZW5zZS4gV2FycmFudHkgb2YgYW55IGtpbmQgaXMKLS8vIGRpc2NsYWltZWQuCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0uaWRlbnQgICJyYzQtaWE2NC5TLCBWZXJzaW9uIDIuMCIKLS5pZGVudCAgIklBLTY0IElTQSBhcnR3b3JrIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPiIKLQotLy8gV2hhdCdzIHdyb25nIHdpdGggY29tcGlsZXIgZ2VuZXJhdGVkIGNvZGU/IEJlY2F1c2Ugb2YgdGhlIG5hdHVyZSBvZgotLy8gQyBsYW5ndWFnZSwgY29tcGlsZXIgZG9lc24ndCBbZGFyZSB0b10gcmVvcmRlciBsb2FkIGFuZCBzdG9yZXMuIEJ1dAotLy8gYmVpbmcgbWVtb3J5LWJvdW5kLCBSQzQgc2hvdWxkIGJlbmVmaXQgZnJvbSByZW9yZGVyIFtvbiBpbi1vcmRlci0KLS8vIGV4ZWN1dGlvbiBjb3JlIHN1Y2ggYXMgSUEtNjRdLiBCdXQgd2hhdCBjYW4gd2UgcmVvcmRlcj8gQXQgdGhlIHZlcnkKLS8vIGxlYXN0IHdlIGNhbiBzYWZlbHkgcmVvcmRlciByZWZlcmVuY2VzIHRvIGtleSBzY2hlZHVsZSBpbiByZXNwZWN0Ci0vLyB0byBpbnB1dCBhbmQgb3V0cHV0IHN0cmVhbXMuIFNlY29uZGx5LCBmcm9tIHRoZSBmaXJzdCBbY2xvc2VdIGdsYW5jZQotLy8gaXQgYXBwZWFyZWQgdGhhdCBpdCdzIHBvc3NpYmxlIHRvIHB1bGwgdXAgc29tZSByZWZlcmVuY2VzIHRvCi0vLyBlbGVtZW50cyBvZiB0aGUga2V5IHNjaGVkdWxlIGl0c2VsZi4gT3JpZ2luYWwgcmF0aW9uYWxlIFsicHJpb3IKLS8vIGxvYWRzIGFyZSBub3Qgc2FmZSBvbmx5IGZvciAiZGVnZW5lcmF0ZWQiIGtleSBzY2hlZHVsZSwgd2hlbiBzb21lCi0vLyBlbGVtZW50cyBlcXVhbCB0byB0aGUgc2FtZSB2YWx1ZSJdIHdhcyBraW5kIG9mIHNsb3BweS4gSSBzaG91bGQgaGF2ZQotLy8gZm9ybXVsYXRlZCBhcyBpdCByZWFsbHkgd2FzOiBpZiB3ZSBhc3N1bWUgdGhhdCBwdWxsaW5nIHVwIHJlZmVyZW5jZQotLy8gdG8ga2V5W3grMV0gaXMgbm90IHNhZmUsIHRoZW4gaXQgd291bGQgbWVhbiB0aGF0IGtleSBzY2hlZHVsZSB3b3VsZAotLy8gImRlZ2VuZXJhdGUsIiB3aGljaCBpcyBuZXZlciB0aGUgY2FzZS4gVGhlIHByb2JsZW0gaXMgdGhhdCB0aGlzCi0vLyBob2xkcyB0cnVlIGluIHJlc3BlY3QgdG8gcmVmZXJlbmNlcyB0byBrZXlbeF0sIGJ1dCBub3QgdG8ga2V5W3ldLgotLy8gTGVnaXRpbWF0ZSAiY29sbGlzaW9ucyIgZG8gb2NjdXIgd2l0aGluIGV2ZXJ5IDI1Nl4yIGJ5dGVzIHdpbmRvdy4KLS8vIEZvcnR1bmF0ZWx5IHRoZXJlJ3JlIGVub3VnaCBmcmVlIGluc3RydWN0aW9uIHNsb3RzIHRvIGtlZXAgcHJpb3IKLS8vIHJlZmVyZW5jZSB0byBrZXlbeCsxXSwgZGV0ZWN0ICJjb2xsaXNpb24iIGFuZCBjb21wZW5zYXRlIGZvciBpdC4KLS8vIEFsbCB0aGlzIHdpdGhvdXQgc2FjcmlmaWNpbmcgYSBzaW5nbGUgY2xvY2sgY3ljbGU6LSkgVGhyb3VnaHB1dCBpcwotLy8gfjIxME1CcHMgb24gOTAwTUh6IENQVSwgd2hpY2ggaXMgaXMgPjN4IGZhc3RlciB0aGFuIGdjYyBnZW5lcmF0ZWQKLS8vIGNvZGUgYW5kICszMCUgLSBpZiBjb21wYXJlZCB0byBIUC1VWCBDLiBVbnJvbGxpbmcgbG9vcCBiZWxvdyBzaG91bGQKLS8vIGdpdmUgPjMwJSBvbiB0b3Agb2YgdGhhdC4uLgotCi0udGV4dAotLmV4cGxpY2l0Ci0KLSNpZiBkZWZpbmVkKF9IUFVYX1NPVVJDRSkgJiYgIWRlZmluZWQoX0xQNjQpCi0jIGRlZmluZSBBRERQCWFkZHA0Ci0jZWxzZQotIyBkZWZpbmUgQUREUAlhZGQKLSNlbmRpZgotCi0jaWZuZGVmIFNaCi0jZGVmaW5lIFNaCTQJLy8gdGhpcyBpcyBzZXQgdG8gc2l6ZW9mKFJDNF9JTlQpCi0jZW5kaWYKLS8vIFNaPT00IHNlZW1zIHRvIGJlIG9wdGltYWwuIEF0IGxlYXN0IFNaPT04IGlzIG5vdCBhbnkgZmFzdGVyLCBub3QgZm9yCi0vLyBhc3NlbWJsZXIgaW1wbGVtZW50YXRpb24sIHdoaWxlIFNaPT0xIGNvZGUgaXMgfjMwJSBzbG93ZXIuCi0jaWYgU1o9PTEJLy8gUkM0X0lOVCBpcyB1bnNpZ25lZCBjaGFyCi0jIGRlZmluZQlMREtFWQlsZDEKLSMgZGVmaW5lCVNUS0VZCXN0MQotIyBkZWZpbmUJT0ZGCTAKLSNlbGlmIFNaPT00CS8vIFJDNF9JTlQgaXMgdW5zaWduZWQgaW50Ci0jIGRlZmluZQlMREtFWQlsZDQKLSMgZGVmaW5lCVNUS0VZCXN0NAotIyBkZWZpbmUJT0ZGCTIKLSNlbGlmIFNaPT04CS8vIFJDNF9JTlQgaXMgdW5zaWduZWQgbG9uZwotIyBkZWZpbmUJTERLRVkJbGQ4Ci0jIGRlZmluZQlTVEtFWQlzdDgKLSMgZGVmaW5lCU9GRgkzCi0jZW5kaWYKLQotb3V0PXI4OwkJLy8gW2V4cGFuZGVkXSBvdXRwdXQgcG9pbnRlcgotaW5wPXI5OwkJLy8gW2V4cGFuZGVkXSBvdXRwdXQgcG9pbnRlcgotcHJzYXZlPXIxMDsKLWtleT1yMjg7CS8vIFtleHBhbmRlZF0gcG9pbnRlciB0byBSQzRfS0VZCi1rc2NoPXIyOTsJLy8gKGtleS0+ZGF0YSsyNTUpWyZ+KHNpemVvZihrZXktPmRhdGEpLTEpXQoteHg9cjMwOwoteXk9cjMxOwotCi0vLyB2b2lkIFJDNChSQzRfS0VZICprZXksc2l6ZV90IGxlbixjb25zdCB2b2lkICppbnAsdm9pZCAqb3V0KTsKLS5nbG9iYWwJUkM0IwotLnByb2MJUkM0IwotLmFsaWduCTMyCi0uc2tpcAkxNgotUkM0OgotCS5wcm9sb2d1ZQotCS5zYXZlICAgYXIucGZzLHIyCi17IC5taWk7CWFsbG9jCXIyPWFyLnBmcyw0LDEyLDAsMTYKLQkuc2F2ZQlwcixwcnNhdmUKLQltb3YJcHJzYXZlPXByCi0JQUREUAlrZXk9MCxpbjAJCX07OwoteyAubWliOwljbXAuZXEJcDYscDA9MCxpbjEJCQkvLyBsZW49PTA/Ci0JLnNhdmUJYXIubGMscjMKLQltb3YJcjM9YXIubGMKLShwNikJYnIucmV0LnNwbnQubWFueQliMAl9OzsJLy8gZW1lcmdlbmN5IGV4aXQKLQotCS5ib2R5Ci0JLnJvdHIJZGF0WzRdLGtleV94WzRdLHR4WzJdLHJuZFsyXSxrZXlfeVsyXSx0eVsxXTsKLQoteyAubWliOwlMREtFWQl4eD1ba2V5XSxTWgkJCS8vIGxvYWQga2V5LT54Ci0JYWRkCWluMT0tMSxpbjEJCQkvLyBhZGp1c3QgbGVuIGZvciBsb29wIGNvdW50ZXIKLQlub3AuYgkwCQkJfQoteyAubWliOwlBRERQCWlucD0wLGluMgotCUFERFAJb3V0PTAsaW4zCi0JYnJwLmxvb3AuaW1wCS5MdG9wLC5MZXhpdC0xNgl9OzsKLXsgLm1taTsJTERLRVkJeXk9W2tleV0JCQkvLyBsb2FkIGtleS0+eQotCWFkZAlrc2NoPVNaLGtleQotCW1vdglhci5sYz1pbjEJCX0KLXsgLm1taTsJbW92CWtleV95WzFdPXIwCQkJLy8gZ3VhcmFudGVlIGluZXF1YWxpdHkKLQkJCQkJCS8vIGluIGZpcnN0IGl0ZXJhdGlvbgotCWFkZAl4eD0xLHh4Ci0JbW92CXByLnJvdD0xPDwxNgkJfTs7Ci17IC5taWk7CW5vcC5tCTAKLQlkZXAJa2V5X3hbMV09eHgscjAsT0ZGLDgKLQltb3YJYXIuZWM9MwkJCX07OwkvLyBub3RlIHRoYXQgZXBpbG9ndWUgY291bnRlcgotCQkJCQkJLy8gaXMgb2ZmIGJ5IDEuIEkgY29tcGVuc2F0ZQotCQkJCQkJLy8gZm9yIHRoaXMgYXQgZXhpdC4uLgotLkx0b3A6Ci0vLyBUaGUgbG9vcCBpcyBzY2hlZHVsZWQgZm9yIDQqKG4rMikgc3Bpbi1yYXRlIG9uIEl0YW5pdW0gMiwgd2hpY2gKLS8vIHRoZW9yZXRpY2FsbHkgZ2l2ZXMgYXN5bXB0b3RpYyBwZXJmb3JtYW5jZSBvZiBjbG9jayBmcmVxdWVuY3kKLS8vIGRpdmlkZWQgYnkgNCBieXRlcyBwZXIgc2Vjb25kcywgb3IgNDAwTUJwcyBvbiAxLjZHSHogQ1BVLiBUaGlzIGlzCi0vLyBmb3Igc2l6ZW9mKFJDNF9JTlQpPT00LiBGb3Igc21hbGxlciBSQzRfSU5UIFNUS0VZIGluYWR2ZXJ0ZW50bHkKLS8vIHNwbGl0cyB0aGUgbGFzdCBidW5kbGUgYW5kIHlvdSBlbmQgdXAgd2l0aCA1Km4gc3Bpbi1yYXRlOi0oCi0vLyBPcmlnaW5hbGx5IHRoZSBsb29wIHdhcyBzY2hlZHVsZWQgZm9yIDMqbiBhbmQgcmVsaWVkIG9uIGtleQotLy8gc2NoZWR1bGUgdG8gYmUgYWxpZ25lZCBhdCAyNTYqc2l6ZW9mKFJDNF9JTlQpIGJvdW5kYXJ5LiBCdXQKLS8vICoob3V0KyspPWRhdCwgd2hpY2ggbWFwcyB0byBzdDEsIGhhZCBzYW1lIGVmZmVjdCBbaW5hZHZlcnRlbnQKLS8vIGJ1bmRsZSBzcGxpdF0gYW5kIGhvbGRlZCB0aGUgbG9vcCBiYWNrLiBSZXNjaGVkdWxpbmcgZm9yIDQqbgotLy8gbWFkZSBpdCBwb3NzaWJsZSB0byBlbGltaW5hdGUgZGVwZW5kZW5jZSBvbiBzcGVjaWZpYyBhbGlnbm1lbnQKLS8vIGFuZCBhbGxvdyBPcGVuU1NIIGtlZXAgImFidXNpbmciIG91ciBBUEkuIFJlYWNoaW5nIGZvciAzKm4gd291bGQKLS8vIHJlcXVpcmUgdW5yb2xsaW5nLCBzdGlja2luZyB0byB2YXJpYWJsZSBzaGlmdCBpbnN0cnVjdGlvbiBmb3IKLS8vIGNvbGxlY3Rpbmcgb3V0cHV0IFt0byBhdm9pZCBzdGFydmF0aW9uIGZvciBpbnRlZ2VyIHNoaWZ0ZXJdIGFuZAotLy8gY29weWluZyBvZiBrZXkgc2NoZWR1bGUgdG8gY29udHJvbGxlZCBwbGFjZSBpbiBzdGFjayBbc28gdGhhdAotLy8gZGVwb3NpdCBpbnN0cnVjdGlvbiBjYW4gc2VydmUgYXMgc3Vic3RpdHV0ZSBmb3Igd2hvbGUKLS8vIGtleS0+ZGF0YSsoKHgmMjU1KTw8bG9nMihzaXplb2Yoa2V5LT5kYXRhWzBdKSkpXS4uLgoteyAubW1pOwkocDE5KQlzdDEJW291dF09ZGF0WzNdLDEJCQkvLyAqKG91dCsrKT1kYXQKLQkocDE2KQlhZGQJeHg9MSx4eAkJCQkvLyB4KysKLQkocDE4KQlkZXAJcm5kWzFdPXJuZFsxXSxyMCxPRkYsOAl9CS8vICgodHgrdHkpJjI1NSk8PE9GRgoteyAubW1pOwkocDE2KQlhZGQJa2V5X3hbMV09a3NjaCxrZXlfeFsxXQkJLy8gJmtleVt4eCYyNTVdCi0JKHAxNykJYWRkCWtleV95WzFdPWtzY2gsa2V5X3lbMV0JfTs7CS8vICZrZXlbeXkmMjU1XQkKLXsgLm1taTsJKHAxNikJTERLRVkJdHhbMF09W2tleV94WzFdXQkJLy8gdHg9a2V5W3h4XQotCShwMTcpCUxES0VZCXR5WzBdPVtrZXlfeVsxXV0JCS8vIHR5PWtleVt5eV0JCi0JKHAxNikJZGVwCWtleV94WzBdPXh4LHIwLE9GRiw4CX0JLy8gKHh4JjI1NSk8PE9GRgoteyAubW1pOwkocDE4KQlhZGQJcm5kWzFdPWtzY2gscm5kWzFdCQkvLyAma2V5Wyh0eCt0eSkmMjU1XQotCShwMTYpCWNtcC5uZS51bmMgcDIwLHAyMT1rZXlfeFsxXSxrZXlfeVsxXSB9OzsKLXsgLm1taTsJKHAxOCkJTERLRVkJcm5kWzFdPVtybmRbMV1dCQkJLy8gcm5kPWtleVsodHgrdHkpJjI1NV0KLQkocDE2KQlsZDEJZGF0WzBdPVtpbnBdLDEJCX0JLy8gZGF0PSooaW5wKyspCi0ucHJlZC5yZWwJIm11dGV4IixwMjAscDIxCi17IC5tbWk7CShwMjEpCWFkZAl5eT15eSx0eFsxXQkJCS8vIChwMTYpCi0JKHAyMCkJYWRkCXl5PXl5LHR4WzBdCQkJLy8gKHAxNikgeSs9dHgKLQkocDIxKQltb3YJdHhbMF09dHhbMV0JCX07OwkvLyAocDE2KQoteyAubW1pOwkocDE3KQlTVEtFWQlba2V5X3lbMV1dPXR4WzFdCQkvLyBrZXlbeXldPXR4Ci0JKHAxNykJU1RLRVkJW2tleV94WzJdXT10eVswXQkJLy8ga2V5W3h4XT10eQotCShwMTYpCWRlcAlrZXlfeVswXT15eSxyMCxPRkYsOAl9CS8vICZrZXlbeXkmMjU1XQoteyAubW1iOwkocDE3KQlhZGQJcm5kWzBdPXR4WzFdLHR5WzBdCQkvLyB0eCs9dHkKLQkocDE4KQl4b3IJZGF0WzJdPWRhdFsyXSxybmRbMV0JCS8vIGRhdF49cm5kCi0JYnIuY3RvcC5zcHRrCS5MdG9wCQkJfTs7Ci0uTGV4aXQ6Ci17IC5taWI7CVNUS0VZCVtrZXldPXl5LC1TWgkJCS8vIHNhdmUga2V5LT55Ci0JbW92CXByPXByc2F2ZSwweDFmZmZmCi0Jbm9wLmIJMAkJCX0KLXsgLm1pYjsJc3QxCVtvdXRdPWRhdFszXSwxCQkJLy8gY29tcGVuc2F0ZSBmb3IgdHJ1bmNhdGVkCi0JCQkJCQkvLyBlcGlsb2d1ZSBjb3VudGVyCi0JYWRkCXh4PS0xLHh4Ci0Jbm9wLmIJMAkJCX07OwoteyAubWliOwlTVEtFWQlba2V5XT14eAkJCS8vIHNhdmUga2V5LT54Ci0JbW92CWFyLmxjPXIzCi0JYnIucmV0LnNwdGsubWFueQliMAl9OzsKLS5lbmRwCVJDNCMKZGlmZiAtLWdpdCBhL2NyeXB0by9yYzQvYXNtL3JjNC1pYTY0LnBsIGIvY3J5cHRvL3JjNC9hc20vcmM0LWlhNjQucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDljZDViNQotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9yYzQvYXNtL3JjNC1pYTY0LnBsCkBAIC0wLDAgKzEsNzU1IEBACisjIS91c3IvYmluL2VudiBwZXJsCisjCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFdyaXR0ZW4gYnkgRGF2aWQgTW9zYmVyZ2VyIDxEYXZpZC5Nb3NiZXJnZXJAYWNtLm9yZz4gYmFzZWQgb24gdGhlCisjIEl0YW5pdW0gb3B0aW1pemVkIENyeXB0byBjb2RlIHdoaWNoIHdhcyByZWxlYXNlZCBieSBIUCBMYWJzIGF0CisjIGh0dHA6Ly93d3cuaHBsLmhwLmNvbS9yZXNlYXJjaC9saW51eC9jcnlwdG8vLgorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSGV3bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwuUC4KKyMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisjIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorIyAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisjIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyMgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworIyB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisjIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorIyBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyMgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyMgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisjIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorIyBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCisKKworCisjIFRoaXMgaXMgYSBsaXR0bGUgaGVscGVyIHByb2dyYW0gd2hpY2ggZ2VuZXJhdGVzIGEgc29mdHdhcmUtcGlwZWxpbmVkCisjIGZvciBSQzQgZW5jcnlwdGlvbi4gIFRoZSBiYXNpYyBhbGdvcml0aG0gbG9va3MgbGlrZSB0aGlzOgorIworIyAgIGZvciAoY291bnRlciA9IDA7IGNvdW50ZXIgPCBsZW47ICsrY291bnRlcikKKyMgICAgIHsKKyMgICAgICAgaW4gPSBpbnBbY291bnRlcl07CisjICAgICAgIFNJID0gU1tJXTsKKyMgICAgICAgSiA9IChTSSArIEopICYgMHhmZjsKKyMgICAgICAgU0ogPSBTW0pdOworIyAgICAgICBUID0gKFNJICsgU0opICYgMHhmZjsKKyMgICAgICAgU1tJXSA9IFNKLCBTW0pdID0gU0k7CisjICAgICAgIFNUID0gU1tUXTsKKyMgICAgICAgb3V0cFtjb3VudGVyXSA9IGluIF4gU1Q7CisjICAgICAgIEkgPSAoSSArIDEpICYgMHhmZjsKKyMgICAgIH0KKyMKKyMgUGlwZWxpbmluZyB0aGlzIGxvb3AgaXNuJ3QgZWFzeSwgYmVjYXVzZSB0aGUgc3RvcmVzIHRvIHRoZSBTW10gYXJyYXkKKyMgbmVlZCB0byBiZSBvYnNlcnZlZCBpbiB0aGUgcmlnaHQgb3JkZXIuICBUaGUgbG9vcCBnZW5lcmF0ZWQgYnkgdGhlCisjIGNvZGUgYmVsb3cgaGFzIHRoZSBmb2xsb3dpbmcgcGlwZWxpbmUgZGlhZ3JhbToKKyMKKyMgICAgICBjeWNsZQorIyAgICAgfCAwIHwgMSB8IDIgfCAzIHwgNCB8IDUgfCA2IHwgNyB8IDggfCA5IHwxMCB8MTEgfDEyIHwxMyB8MTQgfDE1IHwxNiB8MTcgfAorIyBpdGVyCisjICAgMTogeHh4IExESSB4eHggeHh4IHh4eCBMREogeHh4IFNXUCB4eHggTERUIHh4eCB4eHgKKyMgICAyOiAgICAgICAgICAgICB4eHggTERJIHh4eCB4eHggeHh4IExESiB4eHggU1dQIHh4eCBMRFQgeHh4IHh4eAorIyAgIDM6ICAgICAgICAgICAgICAgICAgICAgICAgIHh4eCBMREkgeHh4IHh4eCB4eHggTERKIHh4eCBTV1AgeHh4IExEVCB4eHggeHh4CisjCisjICAgd2hlcmU6CisjIAlMREkgPSBsb2FkIG9mIFNbSV0KKyMgCUxESiA9IGxvYWQgb2YgU1tKXQorIyAJU1dQID0gc3dhcCBvZiBTW0ldIGFuZCBTW0pdCisjIAlMRFQgPSBsb2FkIG9mIFNbVF0KKyMKKyMgTm90ZSB0aGF0IGluIHRoZSBhYm92ZSBkaWFncmFtLCB0aGUgbWFqb3IgdHJvdWJsZS1zcG90IGlzIHRoYXQgTERJCisjIG9mIHRoZSAybmQgaXRlcmF0aW9uIGlzIHBlcmZvcm1lZCBCRUZPUkUgdGhlIFNXUCBvZiB0aGUgZmlyc3QKKyMgaXRlcmF0aW9uLiAgRm9ydHVuYXRlbHksIHRoaXMgaXMgZWFzeSB0byBkZXRlY3QgKEkgb2YgdGhlIDFzdAorIyBpdGVyYXRpb24gd2lsbCBiZSBlcXVhbCB0byBKIG9mIHRoZSAybmQgaXRlcmF0aW9uKSBhbmQgd2hlbiB0aGlzCisjIGhhcHBlbnMsIHdlIHNpbXBseSBmb3J3YXJkIHRoZSBwcm9wZXIgdmFsdWUgZnJvbSB0aGUgMXN0IGl0ZXJhdGlvbgorIyB0byB0aGUgMm5kIG9uZS4gIFRoZSBwcm9wZXIgdmFsdWUgaW4gdGhpcyBjYXNlIGlzIHNpbXBseSB0aGUgdmFsdWUKKyMgb2YgU1tJXSBmcm9tIHRoZSBmaXJzdCBpdGVyYXRpb24gKHRoYW5rcyB0byB0aGUgZmFjdCB0aGF0IFNXUAorIyBzaW1wbHkgc3dhcHMgdGhlIGNvbnRlbnRzIG9mIFNbSV0gYW5kIFNbSl0pLgorIworIyBBbm90aGVyIHBvdGVudGlhbCB0cm91YmxlLXNwb3QgaXMgaW4gY3ljbGUgNywgd2hlcmUgU1dQIG9mIHRoZSAxc3QKKyMgaXRlcmF0aW9uIGlzc3VlcyBhdCB0aGUgc2FtZSB0aW1lIGFzIHRoZSBMREkgb2YgdGhlIDNyZCBpdGVyYXRpb24uCisjIEhvd2V2ZXIsIHRoYW5rcyB0byBJQS02NCBleGVjdXRpb24gc2VtYW50aWNzLCB0aGlzIGNhbiBiZSB0YWtlbgorIyBjYXJlIG9mIHNpbXBseSBieSBwbGFjaW5nIExESSBsYXRlciBpbiB0aGUgaW5zdHJ1Y3Rpb24tZ3JvdXAgdGhhbgorIyBTV1AuICBJQS02NCBDUFVzIHdpbGwgYXV0b21hdGljYWxseSBmb3J3YXJkIHRoZSB2YWx1ZSBpZiB0aGV5CisjIGRldGVjdCB0aGF0IHRoZSBTV1AgYW5kIExESSBhcmUgYWNjZXNzaW5nIHRoZSBzYW1lIG1lbW9yeS1sb2NhdGlvbi4KKworIyBUaGUgY29yZS1sb29wIHRoYXQgY2FuIGJlIHBpcGVsaW5lZCB0aGVuIGxvb2tzIGxpa2UgdGhpcyAoYW5ub3RhdGVkCisjIHdpdGggTWNLaW5sZXkvTWFkaXNvbiBpc3N1ZSBwb3J0ICYgbGF0ZW5jeSBudW1iZXJzLCBhc3N1bWluZyBMMQorIyBjYWNoZSBoaXRzIGZvciB0aGUgbW9zdCBwYXJ0KToKKworIyBvcGVyYXRpb246CSAgICBpbnN0cnVjdGlvbjoJCSAgICBpc3N1ZS1wb3J0czogIGxhdGVuY3kKKyMgLS0tLS0tLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgIC0tLS0tLS0tLS0tLS0gLS0tLS0tLQorCisjIERhdGEgPSAqaW5wKysgICAgICAgbGQxIGRhdGEgPSBbaW5wXSwgMSAgICAgICAgICAgICBNMC1NMSAgICAgICAgIDEgY3ljICAgICBjMAorIyAgICAgICAgICAgICAgICAgICAgIHNobGFkZCBJcHRyID0gSSwgS2V5VGFibGUsIDMgICAgTTAtTTMsIEkwLCBJMSAxIGN5YworIyBJID0gKEkgKyAxKSAmIDB4ZmYgIHBhZGQxIG5leHRJID0gSSwgb25lICAgICAgICAgICAgTTAtTTMsIEkwLCBJMSAzIGN5YworIyAgICAgICAgICAgICAgICAgICAgIDs7CisjIFNJID0gU1tJXSAgICAgICAgICAgbGQ4IFNJID0gW0lwdHJdICAgICAgICAgICAgICAgICBNMC1NMSAgICAgICAgIDEgY3ljICAgICBjMSAqIGFmdGVyIFNXQVAhCisjICAgICAgICAgICAgICAgICAgICAgOzsKKyMgICAgICAgICAgICAgICAgICAgICBjbXAuZXEudW5jIHBCeXBhc3MgPSBJLCBKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYWZ0ZXIgSiBpcyB2YWxpZCEKKyMgSiA9IFNJICsgSiAgICAgICAgICBhZGQgSiA9IEosIFNJICAgICAgICAgICAgICAgICAgIE0wLU0zLCBJMCwgSTEgMSBjeWMgICAgIGMyCisjICAgICAgICAgICAgICAgICAgICAgKHBCeXBhc3MpIGJyLmNvbmQuc3BudCBCeXBhc3MKKyMgICAgICAgICAgICAgICAgICAgICA7OworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSiA9IEogJiAweGZmICAgICAgICB6eHQxIEogPSBKICAgICAgICAgICAgICAgICAgICAgIEkwLCBJMSwgMSBjeWMgICAgICAgICAgIGMzCisjICAgICAgICAgICAgICAgICAgICAgOzsKKyMgICAgICAgICAgICAgICAgICAgICBzaGxhZGQgSnB0ciA9IEosIEtleVRhYmxlLCAzICAgIE0wLU0zLCBJMCwgSTEgMSBjeWMgICAgIGM0CisjICAgICAgICAgICAgICAgICAgICAgOzsKKyMgU0ogPSBTW0pdICAgICAgICAgICBsZDggU0ogPSBbSnB0cl0gICAgICAgICAgICAgICAgIE0wLU0xICAgICAgICAgMSBjeWMgICAgIGM1CisjICAgICAgICAgICAgICAgICAgICAgOzsKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFQgPSAoU0kgKyBTSikgICAgICAgYWRkIFQgPSBTSSwgU0ogICAgICAgICAgICAgICAgICBNMC1NMywgSTAsIEkxIDEgY3ljICAgICBjNgorIyAgICAgICAgICAgICAgICAgICAgIDs7CisjIFQgPSBUICYgMHhmZiAgICAgICAgenh0MSBUID0gVCAgICAgICAgICAgICAgICAgICAgICBJMCwgSTEgICAgICAgIDEgY3ljCisjIFNbSV0gPSBTSiAgICAgICAgICAgc3Q4IFtJcHRyXSA9IFNKICAgICAgICAgICAgICAgICBNMi1NMyAgICAgICAgICAgICAgICAgICBjNworIyBTW0pdID0gU0kgICAgICAgICAgIHN0OCBbSnB0cl0gPSBTSSAgICAgICAgICAgICAgICAgTTItTTMKKyMgICAgICAgICAgICAgICAgICAgICA7OworIyAgICAgICAgICAgICAgICAgICAgIHNobGFkZCBUcHRyID0gVCwgS2V5VGFibGUsIDMgICAgTTAtTTMsIEkwLCBJMSAxIGN5YyAgICAgYzgKKyMgICAgICAgICAgICAgICAgICAgICA7OworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVCA9IFNbVF0gICAgICAgICAgICBsZDggVCA9IFtUcHRyXSAgICAgICAgICAgICAgICAgIE0wLU0xICAgICAgICAgMSBjeWMgICAgIGM5CisjICAgICAgICAgICAgICAgICAgICAgOzsKKyMgZGF0YSBePSBUICAgICAgICAgICB4b3IgZGF0YSA9IGRhdGEsIFQgICAgICAgICAgICAgIE0wLU0zLCBJMCwgSTEgMSBjeWMgICAgIGMxMAorIyAgICAgICAgICAgICAgICAgICAgIDs7CisjICpvdXQrKyA9IERhdGEgXiBUICAgZGVwIHdvcmQgPSB3b3JkLCBkYXRhLCA4LCBQT1MgICBJMCwgSTEgICAgICAgIDEgY3ljICAgICBjMTEKKyMgICAgICAgICAgICAgICAgICAgICA7OworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBUaGVyZSBhcmUgc2V2ZXJhbCBwb2ludHMgd29ydGggbWFraW5nIGhlcmU6CisKKyMgICAtIE5vdGUgdGhhdCBkdWUgdG8gdGhlIGJ5cGFzcy9mb3J3YXJkaW5nLXBhdGgsIHRoZSBmaXJzdCB0d28KKyMgICAgIHBoYXNlcyBvZiB0aGUgbG9vcCBhcmUgc3RyYW5nbHkgbWluZ2xlZCB0b2dldGhlci4gIEluCisjICAgICBwYXJ0aWN1bGFyLCBub3RlIHRoYXQgdGhlIGZpcnN0IHN0YWdlIG9mIHRoZSBwaXBlbGluZSBpcworIyAgICAgdXNpbmcgdGhlIHZhbHVlIG9mICJKIiwgYXMgY2FsY3VsYXRlZCBieSB0aGUgc2Vjb25kIHN0YWdlLgorIyAgIC0gRWFjaCBidW5kbGUtcGFpciB3aWxsIGhhdmUgZXhhY3RseSA2IGluc3RydWN0aW9ucy4KKyMgICAtIFBpcGVsaW5lZCwgdGhlIGxvb3AgY2FuIGV4ZWN1dGUgaW4gMyBjeWNsZXMvaXRlcmF0aW9uIGFuZAorIyAgICAgNCBzdGFnZXMuICBIb3dldmVyLCBNY0tpbmxleS9NYWRpc29uIGNhbiBpc3N1ZSAic3QxIiB0bworIyAgICAgdGhlIHNhbWUgYmFuayBhdCBhIHJhdGUgb2YgYXQgbW9zdCBvbmUgcGVyIDQgY3ljbGVzLiAgVGh1cywKKyMgICAgIGluc3RlYWQgb2Ygc3RvcmluZyBlYWNoIGJ5dGUsIHdlIGFjY3VtdWxhdGUgdGhlbSBpbiBhIHdvcmQKKyMgICAgIGFuZCB0aGVuIHdyaXRlIHRoZW0gYmFjayBhdCBvbmNlIHdpdGggYSBzaW5nbGUgInN0OCIgKHRoaXMKKyMgICAgIGltcGxpZXMgdGhhdCB0aGUgc2V0dXAgY29kZSBuZWVkcyB0byBlbnN1cmUgdGhhdCB0aGUgb3V0cHV0CisjICAgICBidWZmZXIgaXMgcHJvcGVybHkgYWxpZ25lZCwgaWYgbmVlZCBiZSwgYnkgZW5jb2RpbmcgdGhlCisjICAgICBmaXJzdCBmZXcgYnl0ZXMgc2VwYXJhdGVseSkuCisjICAgLSBUaGVyZSBpcyBubyBzcGFjZSBmb3IgYSAiYnIuY3RvcCIgaW5zdHJ1Y3Rpb24uICBGb3IgdGhpcworIyAgICAgcmVhc29uIHdlIGNhbid0IHVzZSBtb2R1bGUtbG9vcCBzdXBwb3J0IGluIElBLTY0IGFuZCBoYXZlCisjICAgICB0byBkbyBhIHRyYWRpdGlvbmFsLCBwdXJlbHkgc29mdHdhcmUtcGlwZWxpbmVkIGxvb3AuCisjICAgLSBXZSBjYW4ndCByZXBsYWNlIGFueSBvZiB0aGUgcmVtYWluaW5nICJhZGQvenh0MSIgcGFpcnMgd2l0aAorIyAgICAgInBhZGQxIiBiZWNhdXNlIHRoZSBsYXRlbmN5IGZvciB0aGF0IGluc3RydWN0aW9uIGlzIHRvbyBoaWdoCisjICAgICBhbmQgd291bGQgcHVzaCB0aGUgbG9vcCB0byB0aGUgcG9pbnQgd2hlcmUgbW9yZSBieXBhc3NlcworIyAgICAgd291bGQgYmUgbmVlZGVkLCB3aGljaCB3ZSBkb24ndCBoYXZlIHNwYWNlIGZvci4KKyMgICAtIFRoZSBhYm92ZSBsb29wIHJ1bnMgYXQgYXJvdW5kIDMuMjYgY3ljbGVzL2J5dGUsIG9yIHJvdWdobHkKKyMgICAgIDQ0MCBNQnl0ZS9zZWMgb24gYSAxLjVHSHogTWFkaXNvbi4gIFRoaXMgaXMgd2VsbCBiZWxvdyB0aGUKKyMgICAgIHN5c3RlbSBidXMgYmFuZHdpZHRoIGFuZCBoZW5jZSB3aXRoIGp1ZGljaW91cyB1c2Ugb2YKKyMgICAgICJsZmV0Y2giIHRoaXMgbG9vcCBjYW4gcnVuIGF0IChhbG1vc3QpIHBlYWsgc3BlZWQgZXZlbiB3aGVuCisjICAgICB0aGUgaW5wdXQgYW5kIG91dHB1dCBkYXRhIHJlc2lkZSBpbiBtZW1vcnkuICBUaGUKKyMgICAgIG1heC4gbGF0ZW5jeSB0aGF0IGNhbiBiZSB0b2xlcmF0ZWQgaXMgKFBSRUZFVENIX0RJU1RBTkNFICoKKyMgICAgIEwyX0xJTkVfU0laRSAqIDMgY3ljKSwgb3IgYWJvdXQgMzg0IGN5Y2xlcyBhc3N1bWluZyAoYXQKKyMgICAgIGxlYXN0KSAxLWFoZWFkIHByZWZldGNoaW5nIG9mIDEyOCBieXRlIGNhY2hlLWxpbmVzLiAgTm90ZQorIyAgICAgdGhhdCB3ZSBkbyBOT1QgcHJlZmV0Y2ggaW50byBMMSwgc2luY2UgdGhhdCB3b3VsZCBvbmx5CisjICAgICBpbnRlcmZlcmUgd2l0aCB0aGUgU1tdIHRhYmxlIHZhbHVlcyBzdG9yZWQgdGhlcmUuICBUaGlzIGlzCisjICAgICBhY2NlcHRhYmxlIGJlY2F1c2UgdGhlcmUgaXMgYSAxMCBjeWNsZSBsYXRlbmN5IGJldHdlZW4KKyMgICAgIGxvYWQgYW5kIGZpcnN0IHVzZSBvZiB0aGUgaW5wdXQgZGF0YS4KKyMgICAtIFdlIHVzZSBhIGJyYW5jaCB0byBvdXQtb2YtbGluZSBieXBhc3MtY29kZSBvZiBjeWNsZS1wcmVzc3VyZToKKyMgICAgIHdlIGNhbGN1bGF0ZSB0aGUgbmV4dCBKLCBjaGVjayBmb3IgdGhlIG5lZWQgdG8gYWN0aXZhdGUgdGhlCisjICAgICBieXBhc3MgcGF0aCwgYW5kIGFjdGl2YXRlIHRoZSBieXBhc3MgcGF0aCBBTEwgSU4gVEhFIFNBTUUKKyMgICAgIENZQ0xFLiAgSWYgd2UgZGlkbid0IGhhdmUgdGhlc2UgY29uc3RyYWludHMsIHdlIGNvdWxkIGRvCisjICAgICB0aGUgYnlwYXNzIHdpdGggYSBzaW1wbGUgY29uZGl0aW9uYWwgbW92ZSBpbnN0cnVjdGlvbi4KKyMgICAgIEZvcnR1bmF0ZWx5LCB0aGUgYnlwYXNzIHBhdGhzIGdldCBhY3RpdmF0ZWQgcmVsYXRpdmVseQorIyAgICAgaW5mcmVxdWVudGx5LCBzbyB0aGUgZXh0cmEgYnJhbmNoZXMgZG9uJ3QgY29zdCBhbGwgdGhhdCBtdWNoCisjICAgICAoYWJvdXQgMC4wNCBjeWNsZXMvYnl0ZSwgbWVhc3VyZWQgb24gYSAxNjM5NiBieXRlIGZpbGUgd2l0aAorIyAgICAgcmFuZG9tIGlucHV0IGRhdGEpLgorIworCiskcGhhc2VzID0gNDsJCSMgbnVtYmVyIG9mIHN0YWdlcy9waGFzZXMgaW4gdGhlIHBpcGVsaW5lZC1sb29wCiskdW5yb2xsX2NvdW50ID0gNjsJIyBudW1iZXIgb2YgdGltZXMgd2UgdW5yb2xsZWQgaXQKKyRwQ29tSSA9ICgxIDw8IDApOworJHBDb21KID0gKDEgPDwgMSk7CiskcENvbVQgPSAoMSA8PCAyKTsKKyRwT3V0ICA9ICgxIDw8IDMpOworCiskTkRhdGEgPSA0OworJE5JUCA9IDM7CiskTkpQID0gMjsKKyROSSA9IDI7CiskTlNJID0gMzsKKyROU0ogPSAyOworJE5UID0gMjsKKyROT3V0V29yZCA9IDI7CisKKyMKKyMgJHRocmVzaG9sZCBpcyB0aGUgbWluaW11bSBsZW5ndGggYmVmb3JlIHdlIGF0dGVtcHQgdG8gdXNlIHRoZQorIyBiaWcgc29mdHdhcmUtcGlwZWxpbmVkIGxvb3AuICBJdCBNVVNUIGJlIGdyZWF0ZXItb3ItZXF1YWwKKyMgdG86CisjICAJCVBIQVNFUyAqIChVTlJPTExfQ09VTlQgKyAxKSArIDcKKyMKKyMgVGhlICIrIDciIGNvbWVzIGZyb20gdGhlIGZhY3Qgd2UgbWF5IGhhdmUgdG8gZW5jb2RlIHVwIHRvCisjICAgNyBieXRlcyBzZXBhcmF0ZWx5IGJlZm9yZSB0aGUgb3V0cHV0IHBvaW50ZXIgaXMgYWxpZ25lZC4KKyMKKyR0aHJlc2hvbGQgPSAoMyAqICgkcGhhc2VzICogKCR1bnJvbGxfY291bnQgKyAxKSkgKyA3KTsKKworc3ViIEkgeworICAgIGxvY2FsICpjb2RlID0gc2hpZnQ7CisgICAgbG9jYWwgJGZvcm1hdCA9IHNoaWZ0OworICAgICRjb2RlIC49IHNwcmludGYgKCJcdFx0Ii4kZm9ybWF0LiJcbiIsIEBfKTsKK30KKworc3ViIFAgeworICAgIGxvY2FsICpjb2RlID0gc2hpZnQ7CisgICAgbG9jYWwgJGZvcm1hdCA9IHNoaWZ0OworICAgICRjb2RlIC49IHNwcmludGYgKCRmb3JtYXQuIlxuIiwgQF8pOworfQorCitzdWIgU1RPUCB7CisgICAgbG9jYWwgKmNvZGUgPSBzaGlmdDsKKyAgICAkY29kZSAuPTw8X19fOworCQk7OworX19fCit9CisKK3N1YiBlbWl0X2JvZHkgeworICAgIGxvY2FsICpjID0gc2hpZnQ7CisgICAgbG9jYWwgKmJ5cGFzcyA9IHNoaWZ0OworICAgIGxvY2FsICgkaXRlcmF0aW9uLCAkcCkgPSBAXzsKKworICAgIGxvY2FsICRpMCA9ICRpdGVyYXRpb247CisgICAgbG9jYWwgJGkxID0gJGl0ZXJhdGlvbiAtIDE7CisgICAgbG9jYWwgJGkyID0gJGl0ZXJhdGlvbiAtIDI7CisgICAgbG9jYWwgJGkzID0gJGl0ZXJhdGlvbiAtIDM7CisgICAgbG9jYWwgJGl3MCA9ICgkaXRlcmF0aW9uIC0gMykgLyA4OworICAgIGxvY2FsICRpdzEgPSAoJGl0ZXJhdGlvbiA+IDMpID8gKCRpdGVyYXRpb24gLSA0KSAvIDggOiAxOworICAgIGxvY2FsICRieXRlX251bSA9ICgkaXRlcmF0aW9uIC0gMykgJSA4OworICAgIGxvY2FsICRsYWJlbCA9ICRpdGVyYXRpb24gKyAxOworICAgIGxvY2FsICRwQW55ID0gKCRwICYgMHhmKSA9PSAweGY7CisgICAgbG9jYWwgJHBCeXAgPSAoKCRwICYgJHBDb21JKSAmJiAoJGl0ZXJhdGlvbiA+IDApKTsKKworICAgICRjLj08PF9fXzsKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCitfX18KKworICAgIGlmICgoJHAgJiAweGYpID09IDApIHsKKwkkYy49IiNpZmRlZiBIT1NUX0lTX0JJR19FTkRJQU5cbiI7CisJJkkoXCRjLCJzaHIudQlPdXRXb3JkWyV1XSA9IE91dFdvcmRbJXVdLCAzMjs7IiwKKwkJCQkkaXcxICUgJE5PdXRXb3JkLCAkaXcxICUgJE5PdXRXb3JkKTsKKwkkYy49IiNlbmRpZlxuIjsKKwkmSShcJGMsICJzdDQgW091dFB0cl0gPSBPdXRXb3JkWyV1XSwgNCIsICRpdzEgJSAkTk91dFdvcmQpOworCXJldHVybjsKKyAgICB9CisKKyAgICAjIEN5Y2xlIDAKKyAgICAmSShcJGMsICJ7IC5tbWkiKQkJCQkJICAgICAgaWYgKCRwQW55KTsKKyAgICAmSShcJGMsICJsZDEgICAgRGF0YVsldV0gPSBbSW5QdHJdLCAxIiwgJGkwICUgJE5EYXRhKSAgICAgaWYgKCRwICYgJHBDb21JKTsKKyAgICAmSShcJGMsICJwYWRkMSAgSVsldV0gPSBPbmUsIElbJXVdIiwgJGkwICUgJE5JLCAkaTEgJSAkTkkpaWYgKCRwICYgJHBDb21JKTsKKyAgICAmSShcJGMsICJ6eHQxICAgSiA9IEoiKQkJCQkgICAgICBpZiAoJHAgJiAkcENvbUopOworICAgICZJKFwkYywgIn0iKQkJCQkJICAgICAgaWYgKCRwQW55KTsKKyAgICAmSShcJGMsICJ7IC5tbWkiKQkJCQkJICAgICAgaWYgKCRwQW55KTsKKyAgICAmSShcJGMsICJMS0VZICAgVFsldV0gPSBbVFsldV1dIiwgJGkxICUgJE5ULCAkaTEgJSAkTlQpICAgaWYgKCRwICYgJHBPdXQpOworICAgICZJKFwkYywgImFkZCAgICBUWyV1XSA9IFNJWyV1XSwgU0pbJXVdIiwKKyAgICAgICAkaTAgJSAkTlQsICRpMiAlICROU0ksICRpMSAlICROU0opCQkgICAgICBpZiAoJHAgJiAkcENvbVQpOworICAgICZJKFwkYywgIktFWUFERFIoSVByWyV1XSwgSVsldV0pIiwgJGkwICUgJE5JUCwgJGkxICUgJE5JKSBpZiAoJHAgJiAkcENvbUkpOworICAgICZJKFwkYywgIn0iKQkJCQkJICAgICAgaWYgKCRwQW55KTsKKyAgICAmU1RPUChcJGMpOworCisgICAgIyBDeWNsZSAxCisgICAgJkkoXCRjLCAieyAubW1pIikJCQkJCSAgICAgIGlmICgkcEFueSk7CisgICAgJkkoXCRjLCAiU0tFWSAgIFtJUHJbJXVdXSA9IFNKWyV1XSIsICRpMiAlICROSVAsICRpMSUkTlNKKWlmICgkcCAmICRwQ29tVCk7CisgICAgJkkoXCRjLCAiU0tFWSAgIFtKUFsldV1dID0gU0lbJXVdIiwgJGkxICUgJE5KUCwgJGkyJSROU0kpIGlmICgkcCAmICRwQ29tVCk7CisgICAgJkkoXCRjLCAienh0MSAgIFRbJXVdID0gVFsldV0iLCAkaTAgJSAkTlQsICRpMCAlICROVCkgICAgIGlmICgkcCAmICRwQ29tVCk7CisgICAgJkkoXCRjLCAifSIpCQkJCQkgICAgICBpZiAoJHBBbnkpOworICAgICZJKFwkYywgInsgLm1taSIpCQkJCQkgICAgICBpZiAoJHBBbnkpOworICAgICZJKFwkYywgIkxLRVkgICBTSVsldV0gPSBbSVByWyV1XV0iLCAkaTAgJSAkTlNJLCAkaTAlJE5JUClpZiAoJHAgJiAkcENvbUkpOworICAgICZJKFwkYywgIktFWUFERFIoSlBbJXVdLCBKKSIsICRpMCAlICROSlApCQkgICAgICBpZiAoJHAgJiAkcENvbUopOworICAgICZJKFwkYywgInhvciAgICBEYXRhWyV1XSA9IERhdGFbJXVdLCBUWyV1XSIsCisgICAgICAgJGkzICUgJE5EYXRhLCAkaTMgJSAkTkRhdGEsICRpMSAlICROVCkJCSAgICAgIGlmICgkcCAmICRwT3V0KTsKKyAgICAmSShcJGMsICJ9IikJCQkJCSAgICAgIGlmICgkcEFueSk7CisgICAgJlNUT1AoXCRjKTsKKworICAgICMgQ3ljbGUgMgorICAgICZJKFwkYywgInsgLm1taSIpCQkJCQkgICAgICBpZiAoJHBBbnkpOworICAgICZJKFwkYywgIkxLRVkgICBTSlsldV0gPSBbSlBbJXVdXSIsICRpMCAlICROU0osICRpMCUkTkpQKSBpZiAoJHAgJiAkcENvbUopOworICAgICZJKFwkYywgImNtcC5lcSBwQnlwYXNzLCBwMCA9IElbJXVdLCBKIiwgJGkxICUgJE5JKQkgICAgICBpZiAoJHBCeXApOworICAgICZJKFwkYywgImRlcCBPdXRXb3JkWyV1XSA9IERhdGFbJXVdLCBPdXRXb3JkWyV1XSwgQllURV9QT1MoJXUpLCA4IiwKKyAgICAgICAkaXcwJSROT3V0V29yZCwgJGkzJSRORGF0YSwgJGl3MSUkTk91dFdvcmQsICRieXRlX251bSkgaWYgKCRwICYgJHBPdXQpOworICAgICZJKFwkYywgIn0iKQkJCQkJICAgICAgaWYgKCRwQW55KTsKKyAgICAmSShcJGMsICJ7IC5tbWIiKQkJCQkJICAgICAgaWYgKCRwQW55KTsKKyAgICAmSShcJGMsICJhZGQgICAgSiA9IEosIFNJWyV1XSIsICRpMCAlICROU0kpCQkgICAgICBpZiAoJHAgJiAkcENvbUkpOworICAgICZJKFwkYywgIktFWUFERFIoVFsldV0sIFRbJXVdKSIsICRpMCAlICROVCwgJGkwICUgJE5UKSAgICBpZiAoJHAgJiAkcENvbVQpOworICAgICZQKFwkYywgIihwQnlwYXNzKVx0YnIuY29uZC5zcG50Lm1hbnkgLnJjNEJ5cGFzcyV1IiwkbGFiZWwpaWYgKCRwQnlwKTsKKyAgICAmSShcJGMsICJ9IikgaWYgKCRwQW55KTsKKyAgICAmU1RPUChcJGMpOworCisgICAgJlAoXCRjLCAiLnJjNFJlc3VtZSV1OiIsICRsYWJlbCkJCQkgICAgICBpZiAoJHBCeXApOworICAgIGlmICgkYnl0ZV9udW0gPT0gMCAmJiAkaXRlcmF0aW9uID49ICRwaGFzZXMpIHsKKwkmSShcJGMsICJzdDggW091dFB0cl0gPSBPdXRXb3JkWyV1XSwgOCIsCisJICAgJGl3MSAlICROT3V0V29yZCkJCQkJICAgICAgaWYgKCRwICYgJHBPdXQpOworCWlmICgkaXRlcmF0aW9uID09ICgxICsgJHVucm9sbF9jb3VudCkgKiAkcGhhc2VzIC0gMSkgeworCSAgICBpZiAoJHVucm9sbF9jb3VudCA9PSA2KSB7CisJCSZJKFwkYywgIm1vdiBPdXRXb3JkWyV1XSA9IE91dFdvcmRbJXVdIiwKKwkJICAgJGl3MSAlICROT3V0V29yZCwgJGl3MCAlICROT3V0V29yZCk7CisJICAgIH0KKwkgICAgJkkoXCRjLCAibGZldGNoLm50MSBbSW5QcmVmZXRjaF0sICV1IiwKKwkgICAgICAgJHVucm9sbF9jb3VudCAqICRwaGFzZXMpOworCSAgICAmSShcJGMsICJsZmV0Y2guZXhjbC5udDEgW091dFByZWZldGNoXSwgJXUiLAorCSAgICAgICAkdW5yb2xsX2NvdW50ICogJHBoYXNlcyk7CisJICAgICZJKFwkYywgImJyLmNsb29wLnNwdGsuZmV3IC5yYzRMb29wIik7CisJfQorICAgIH0KKworICAgIGlmICgkcEJ5cCkgeworCSZQKFwkYnlwYXNzLCAiLnJjNEJ5cGFzcyV1OiIsICRsYWJlbCk7CisJJkkoXCRieXBhc3MsICJzdWIgSiA9IEosIFNJWyV1XSIsICRpMCAlICROU0kpOworCSZJKFwkYnlwYXNzLCAibm9wIDAiKTsKKwkmSShcJGJ5cGFzcywgIm5vcCAwIik7CisJJkkoXCRieXBhc3MsICI7OyIpOworCSZJKFwkYnlwYXNzLCAiYWRkIEogPSBKLCBTSVsldV0iLCAkaTEgJSAkTlNJKTsKKwkmSShcJGJ5cGFzcywgIm1vdiBTSVsldV0gPSBTSVsldV0iLCAkaTAgJSAkTlNJLCAkaTEgJSAkTlNJKTsKKwkmSShcJGJ5cGFzcywgImJyLnNwdGsubWFueSAucmM0UmVzdW1lJXVcbiIsICRsYWJlbCk7CisJJkkoXCRieXBhc3MsICI7OyIpOworICAgIH0KK30KKworJGNvZGU9PDxfX187CisuaWRlbnQgXCJyYzQtaWE2NC5zLCB2ZXJzaW9uIDMuMFwiCisuaWRlbnQgXCJDb3B5cmlnaHQgKGMpIDIwMDUgSGV3bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwuUC5cIgorCisjZGVmaW5lIExDU2F2ZQkJcjgKKyNkZWZpbmUgUFJTYXZlCQlyOQorCisvKiBJbnB1dHMgYmVjb21lIGludmFsaWQgb25jZSByb3RhdGlvbiBiZWdpbnMhICAqLworCisjZGVmaW5lIFN0YXRlVGFibGUJaW4wCisjZGVmaW5lIERhdGFMZW4JCWluMQorI2RlZmluZSBJbnB1dEJ1ZmZlcglpbjIKKyNkZWZpbmUgT3V0cHV0QnVmZmVyCWluMworCisjZGVmaW5lIEtUYWJsZQkJcjE0CisjZGVmaW5lIEoJCXIxNQorI2RlZmluZSBJblB0cgkJcjE2CisjZGVmaW5lIE91dFB0cgkJcjE3CisjZGVmaW5lIEluUHJlZmV0Y2gJcjE4CisjZGVmaW5lIE91dFByZWZldGNoCXIxOQorI2RlZmluZSBPbmUJCXIyMAorI2RlZmluZSBMb29wQ291bnQJcjIxCisjZGVmaW5lIFJlbWFpbmRlcglyMjIKKyNkZWZpbmUgSUZpbmFsCQlyMjMKKyNkZWZpbmUgRW5kUHRyCQlyMjQKKworI2RlZmluZSB0bXAwCQlyMjUKKyNkZWZpbmUgdG1wMQkJcjI2CisKKyNkZWZpbmUgcEJ5cGFzcwkJcDYKKyNkZWZpbmUgcERvbmUJCXA3CisjZGVmaW5lIHBTbWFsbAkJcDgKKyNkZWZpbmUgcEFsaWduZWQJcDkKKyNkZWZpbmUgcFVuYWxpZ25lZAlwMTAKKworI2RlZmluZSBwQ29tcHV0ZUkJcFBoYXNlWzBdCisjZGVmaW5lIHBDb21wdXRlSglwUGhhc2VbMV0KKyNkZWZpbmUgcENvbXB1dGVUCXBQaGFzZVsyXQorI2RlZmluZSBwT3V0cHV0CQlwUGhhc2VbM10KKworI2RlZmluZSBSZXRWYWwJCXI4CisjZGVmaW5lIExfT0sJCXA3CisjZGVmaW5lIExfTk9LCQlwOAorCisjZGVmaW5lCV9OSU5QVVRTCTQKKyNkZWZpbmUJX05PVVRQVVQJMAorCisjZGVmaW5lCV9OUk9UQVRFCTI0CisjZGVmaW5lCV9OTE9DQUxTCShfTlJPVEFURSAtIF9OSU5QVVRTIC0gX05PVVRQVVQpCisKKyNpZm5kZWYgU1oKKyMgZGVmaW5lIFNaCTQJLy8gdGhpcyBtdXN0IGJlIHNldCB0byBzaXplb2YoUkM0X0lOVCkKKyNlbmRpZgorCisjaWYgU1ogPT0gMQorIyBkZWZpbmUgTEtFWQkJCWxkMQorIyBkZWZpbmUgU0tFWQkJCXN0MQorIyBkZWZpbmUgS0VZQUREUihkc3QsIGkpCWFkZCBkc3QgPSBpLCBLVGFibGUKKyNlbGlmIFNaID09IDIKKyMgZGVmaW5lIExLRVkJCQlsZDIKKyMgZGVmaW5lIFNLRVkJCQlzdDIKKyMgZGVmaW5lIEtFWUFERFIoZHN0LCBpKQlzaGxhZGQgZHN0ID0gaSwgMSwgS1RhYmxlCisjZWxpZiBTWiA9PSA0CisjIGRlZmluZSBMS0VZCQkJbGQ0CisjIGRlZmluZSBTS0VZCQkJc3Q0CisjIGRlZmluZSBLRVlBRERSKGRzdCwgaSkJc2hsYWRkIGRzdCA9IGksIDIsIEtUYWJsZQorI2Vsc2UKKyMgZGVmaW5lIExLRVkJCQlsZDgKKyMgZGVmaW5lIFNLRVkJCQlzdDgKKyMgZGVmaW5lIEtFWUFERFIoZHN0LCBpKQlzaGxhZGQgZHN0ID0gaSwgMywgS1RhYmxlCisjZW5kaWYKKworI2lmIGRlZmluZWQoX0hQVVhfU09VUkNFKSAmJiAhZGVmaW5lZChfTFA2NCkKKyMgZGVmaW5lIEFERFAJYWRkcDQKKyNlbHNlCisjIGRlZmluZSBBRERQCWFkZAorI2VuZGlmCisKKy8qIERlZmluZSBhIG1hY3JvIGZvciB0aGUgYml0IG51bWJlciBvZiB0aGUgbi10aCBieXRlOiAqLworCisjaWYgZGVmaW5lZChfSFBVWF9TT1VSQ0UpIHx8IGRlZmluZWQoQl9FTkRJQU4pCisjIGRlZmluZSBIT1NUX0lTX0JJR19FTkRJQU4KKyMgZGVmaW5lIEJZVEVfUE9TKG4pCSg1NiAtICg4ICogKG4pKSkKKyNlbHNlCisjIGRlZmluZSBCWVRFX1BPUyhuKQkoOCAqIChuKSkKKyNlbmRpZgorCisvKgorICAgV2UgbXVzdCBwZXJmb3JtIHRoZSBmaXJzdCBwaGFzZSBvZiB0aGUgcGlwZWxpbmUgZXhwbGljaXRseSBzaW5jZQorICAgd2Ugd2lsbCBhbHdheXMgbG9hZCBmcm9tIHRoZSBzdGFibGUgdGhlIGZpcnN0IHRpbWUuIFRoZSBici5jZXhpdAorICAgd2lsbCBuZXZlciBiZSB0YWtlbiBzaW5jZSByZWdhcmRsZXNzIG9mIHRoZSBudW1iZXIgb2YgYnl0ZXMgYmVjYXVzZQorICAgdGhlIGVwaWxvZ3VlIGNvdW50IGlzIDQuCisqLworLyogTU9EU0NIRURfUkM0IG1hY3JvIHdhcyBzcGxpdCB0byBfUFJPTE9HVUUgYW5kIF9MT09QLCBiZWNhdXNlIEhQLVVYCisgICBhc3NlbWJsZXIgZmFpbGVkIG9uIG9yaWdpbmFsIG1hY3JvIHdpdGggc3ludGF4IGVycm9yLiA8YXBwcm8+ICovCisjZGVmaW5lIE1PRFNDSEVEX1JDNF9QUk9MT0dVRQkJCQkJCSAgIFxcCisJewkJCQkJCQkJICAgXFwKKwkJCQlsZDEJCURhdGFbMF0gPSBbSW5QdHJdLCAxOwkgICBcXAorCQkJCWFkZAkJSUZpbmFsID0gMSwgSVsxXTsJICAgXFwKKwkJCQlLRVlBRERSKElQclswXSwgSVsxXSk7CQkJICAgXFwKKwl9IDs7CQkJCQkJCQkgICBcXAorCXsJCQkJCQkJCSAgIFxcCisJCQkJTEtFWQkJU0lbMF0gPSBbSVByWzBdXTsJICAgXFwKKwkJCQltb3YJCXByLnJvdCA9IDB4MTAwMDA7CSAgIFxcCisJCQkJbW92CQlhci5lYyA9IDQ7CQkgICBcXAorCX0gOzsJCQkJCQkJCSAgIFxcCisJewkJCQkJCQkJICAgXFwKKwkJCQlhZGQJCUogPSBKLCBTSVswXTsJCSAgIFxcCisJCQkJenh0MQkJSVswXSA9IElGaW5hbDsJCSAgIFxcCisJCQkJYnIuY2V4aXQuc3BudC5mZXcgLisxNjsgLyogbmV2ZXIgdGFrZW4gKi8gIFxcCisJfSA7OworI2RlZmluZSBNT0RTQ0hFRF9SQzRfTE9PUChsYWJlbCkJCQkJCSAgIFxcCitsYWJlbDoJCQkJCQkJCQkgICBcXAorCXsJLm1taTsJCQkJCQkJICAgXFwKKwkJKHBDb21wdXRlSSkJbGQxCQlEYXRhWzBdID0gW0luUHRyXSwgMTsJICAgXFwKKwkJKHBDb21wdXRlSSkJYWRkCQlJRmluYWwgPSAxLCBJWzFdOwkgICBcXAorCQkocENvbXB1dGVKKQl6eHQxCQlKID0gSjsJCQkgICBcXAorCX17CS5tbWk7CQkJCQkJCSAgIFxcCisJCShwT3V0cHV0KQlMS0VZCQlUWzFdID0gW1RbMV1dOwkJICAgXFwKKwkJKHBDb21wdXRlVCkJYWRkCQlUWzBdID0gU0lbMl0sIFNKWzFdOwkgICBcXAorCQkocENvbXB1dGVJKQlLRVlBRERSKElQclswXSwgSVsxXSk7CQkJICAgXFwKKwl9IDs7CQkJCQkJCQkgICBcXAorCXsJLm1taTsJCQkJCQkJICAgXFwKKwkJKHBDb21wdXRlVCkJU0tFWQkJW0lQclsyXV0gPSBTSlsxXTsJICAgXFwKKwkJKHBDb21wdXRlVCkJU0tFWQkJW0pQWzFdXSA9IFNJWzJdOwkgICBcXAorCQkocENvbXB1dGVUKQl6eHQxCQlUWzBdID0gVFswXTsJCSAgIFxcCisJfXsJLm1taTsJCQkJCQkJICAgXFwKKwkJKHBDb21wdXRlSSkJTEtFWQkJU0lbMF0gPSBbSVByWzBdXTsJICAgXFwKKwkJKHBDb21wdXRlSikJS0VZQUREUihKUFswXSwgSik7CQkJICAgXFwKKwkJKHBDb21wdXRlSSkJY21wLmVxLnVuYwlwQnlwYXNzLCBwMCA9IElbMV0sIEo7CSAgIFxcCisJfSA7OwkJCQkJCQkJICAgXFwKKwl7CS5tbWk7CQkJCQkJCSAgIFxcCisJCShwQ29tcHV0ZUopCUxLRVkJCVNKWzBdID0gW0pQWzBdXTsJICAgXFwKKwkJKHBPdXRwdXQpCXhvcgkJRGF0YVszXSA9IERhdGFbM10sIFRbMV07ICAgXFwKKwkJCQlub3AJCTB4MDsJCQkgICBcXAorCX17CS5tbWk7CQkJCQkJCSAgIFxcCisJCShwQ29tcHV0ZVQpCUtFWUFERFIoVFswXSwgVFswXSk7CQkJICAgXFwKKwkJKHBCeXBhc3MpCW1vdgkJU0lbMF0gPSBTSVsxXTsJCSAgIFxcCisJCShwQ29tcHV0ZUkpCXp4dDEJCUlbMF0gPSBJRmluYWw7CQkgICBcXAorCX0gOzsJCQkJCQkJCSAgIFxcCisJewkubW1iOwkJCQkJCQkgICBcXAorCQkocE91dHB1dCkJc3QxCQlbT3V0UHRyXSA9IERhdGFbM10sIDE7CSAgIFxcCisJCShwQ29tcHV0ZUkpCWFkZAkJSiA9IEosIFNJWzBdOwkJICAgXFwKKwkJCQlici5jdG9wLnNwdGsuZmV3IGxhYmVsOwkJCSAgIFxcCisJfSA7OworCisJLnRleHQKKworCS5hbGlnbgkzMgorCisJLnR5cGUJUkM0LCBcQGZ1bmN0aW9uCisJLmdsb2JhbAlSQzQKKworCS5wcm9jCVJDNAorCS5wcm9sb2d1ZQorCitSQzQ6CisJeworCSAgCS5tbWkKKwkJYWxsb2MJcjIgPSBhci5wZnMsIF9OSU5QVVRTLCBfTkxPQ0FMUywgX05PVVRQVVQsIF9OUk9UQVRFCisKKwkJLnJvdHIgRGF0YVs0XSwgSVsyXSwgSVByWzNdLCBTSVszXSwgSlBbMl0sIFNKWzJdLCBUWzJdLCBcXAorCQkgICAgICBPdXRXb3JkWzJdCisJCS5yb3RwIHBQaGFzZVs0XQorCisJCUFERFAJCUluUHJlZmV0Y2ggPSAwLCBJbnB1dEJ1ZmZlcgorCQlBRERQCQlLVGFibGUgPSAwLCBTdGF0ZVRhYmxlCisJfQorCXsKKwkJLm1taQorCQlBRERQCQlJblB0ciA9IDAsIElucHV0QnVmZmVyCisJCUFERFAJCU91dFB0ciA9IDAsIE91dHB1dEJ1ZmZlcgorCQltb3YJCVJldFZhbCA9IHIwCisJfQorCTs7CisJeworCQkubW1pCisJCWxmZXRjaC5udDEJW0luUHJlZmV0Y2hdLCAweDgwCisJCUFERFAJCU91dFByZWZldGNoID0gMCwgT3V0cHV0QnVmZmVyCisJfQorCXsgICAgICAgICAgICAgICAvLyBSZXR1cm4gMCBpZiB0aGUgaW5wdXQgbGVuZ3RoIGlzIG5vbnNlbnNpY2FsCisgICAgICAgIAkubWliCisJCUFERFAJCVN0YXRlVGFibGUgPSAwLCBTdGF0ZVRhYmxlCisgICAgICAgIAljbXAuZ2UudW5jICAJTF9OT0ssIExfT0sgPSByMCwgRGF0YUxlbgorCShMX05PSykgYnIucmV0LnNwdGsuZmV3IHJwCisJfQorCTs7CisJeworICAgICAgICAJLm1pYgorICAgICAgICAJY21wLmVxLm9yICAJTF9OT0ssIExfT0sgPSByMCwgSW5QdHIKKyAgICAgICAgCWNtcC5lcS5vciAgCUxfTk9LLCBMX09LID0gcjAsIE91dFB0cgorCQlub3AJCTB4MAorCX0KKwl7CisJCS5taWIKKyAgICAgICAgCWNtcC5lcS5vciAgCUxfTk9LLCBMX09LID0gcjAsIFN0YXRlVGFibGUKKwkJbm9wCQkweDAKKwkoTF9OT0spIGJyLnJldC5zcHRrLmZldyBycAorCX0KKwk7OworCQlMS0VZCQlJWzFdID0gW0tUYWJsZV0sIFNaCisvKiBQcmVmZXRjaCB0aGUgc3RhdGUtdGFibGUuIEl0IGNvbnRhaW5zIDI1NiBlbGVtZW50cyBvZiBzaXplIFNaICovCisKKyNpZiBTWiA9PSAxCisJCUFERFAJCXRtcDAgPSAxKjEyOCwgU3RhdGVUYWJsZQorI2VsaWYgU1ogPT0gMgorCQlBRERQCQl0bXAwID0gMyoxMjgsIFN0YXRlVGFibGUKKwkJQUREUAkJdG1wMSA9IDIqMTI4LCBTdGF0ZVRhYmxlCisjZWxpZiBTWiA9PSA0CisJCUFERFAJCXRtcDAgPSA3KjEyOCwgU3RhdGVUYWJsZQorCQlBRERQCQl0bXAxID0gNioxMjgsIFN0YXRlVGFibGUKKyNlbGlmIFNaID09IDgKKwkJQUREUAkJdG1wMCA9IDE1KjEyOCwgU3RhdGVUYWJsZQorCQlBRERQCQl0bXAxID0gMTQqMTI4LCBTdGF0ZVRhYmxlCisjZW5kaWYKKwkJOzsKKyNpZiBTWiA+PSA4CisJCWxmZXRjaC5mYXVsdC5udDEJCVt0bXAwXSwgLTI1NgkvLyAxNQorCQlsZmV0Y2guZmF1bHQubnQxCQlbdG1wMV0sIC0yNTY7OworCQlsZmV0Y2guZmF1bHQubnQxCQlbdG1wMF0sIC0yNTYJLy8gMTMKKwkJbGZldGNoLmZhdWx0Lm50MQkJW3RtcDFdLCAtMjU2OzsKKwkJbGZldGNoLmZhdWx0Lm50MQkJW3RtcDBdLCAtMjU2CS8vIDExCisJCWxmZXRjaC5mYXVsdC5udDEJCVt0bXAxXSwgLTI1Njs7CisJCWxmZXRjaC5mYXVsdC5udDEJCVt0bXAwXSwgLTI1NgkvLyAgOQorCQlsZmV0Y2guZmF1bHQubnQxCQlbdG1wMV0sIC0yNTY7OworI2VuZGlmCisjaWYgU1ogPj0gNAorCQlsZmV0Y2guZmF1bHQubnQxCQlbdG1wMF0sIC0yNTYJLy8gIDcKKwkJbGZldGNoLmZhdWx0Lm50MQkJW3RtcDFdLCAtMjU2OzsKKwkJbGZldGNoLmZhdWx0Lm50MQkJW3RtcDBdLCAtMjU2CS8vICA1CisJCWxmZXRjaC5mYXVsdC5udDEJCVt0bXAxXSwgLTI1Njs7CisjZW5kaWYKKyNpZiBTWiA+PSAyCisJCWxmZXRjaC5mYXVsdC5udDEJCVt0bXAwXSwgLTI1NgkvLyAgMworCQlsZmV0Y2guZmF1bHQubnQxCQlbdG1wMV0sIC0yNTY7OworI2VuZGlmCisJeworCQkubWlpCisJCWxmZXRjaC5mYXVsdC5udDEJCVt0bXAwXQkJLy8gIDEKKwkJYWRkCQlJWzFdPTEsSVsxXTs7CisJCXp4dDEJCUlbMV09SVsxXQorCX0KKwl7CisJCS5tbWkKKwkJbGZldGNoLm50MQlbSW5QcmVmZXRjaF0sIDB4ODAKKwkJbGZldGNoLmV4Y2wubnQxCVtPdXRQcmVmZXRjaF0sIDB4ODAKKwkJLnNhdmUJCXByLCBQUlNhdmUKKwkJbW92CQlQUlNhdmUgPSBwcgorCX0gOzsKKwl7CisJCS5tbWkKKwkJbGZldGNoLmV4Y2wubnQxCVtPdXRQcmVmZXRjaF0sIDB4ODAKKwkJTEtFWQkJSiA9IFtLVGFibGVdLCBTWgorCQlBRERQCQlFbmRQdHIgPSBEYXRhTGVuLCBJblB0cgorCX0gIDs7CisJeworCQkubW1pCisJCUFERFAJCUVuZFB0ciA9IC0xLCBFbmRQdHIJLy8gTWFrZSBpdCBwb2ludCB0bworCQkJCQkJCS8vIGxhc3QgZGF0YSBieXRlLgorCQltb3YJCU9uZSA9IDEKKwkJLnNhdmUJCWFyLmxjLCBMQ1NhdmUKKwkJbW92CQlMQ1NhdmUgPSBhci5sYworCQkuYm9keQorCX0gOzsKKwl7CisJCS5tbWIKKwkJc3ViCQlSZW1haW5kZXIgPSAwLCBPdXRQdHIKKwkJY21wLmd0dQkJcFNtYWxsLCBwMCA9ICR0aHJlc2hvbGQsIERhdGFMZW4KKyhwU21hbGwpCWJyLmNvbmQuZHBudAkucmM0UmVtYWluZGVyCQkvLyBEYXRhIHRvbyBzbWFsbCBmb3IKKwkJCQkJCQkvLyBiaWcgbG9vcC4KKwl9IDs7CisJeworCQkubW1pCisJCWFuZAkJUmVtYWluZGVyID0gMHg3LCBSZW1haW5kZXIKKwkJOzsKKwkJY21wLmVxCQlwQWxpZ25lZCwgcFVuYWxpZ25lZCA9IFJlbWFpbmRlciwgcjAKKwkJbm9wCQkweDAKKwl9IDs7CisJeworCQkubW1iCisucHJlZC5yZWwJIm11dGV4IixwVW5hbGlnbmVkLHBBbGlnbmVkCisocFVuYWxpZ25lZCkJYWRkCQlSZW1haW5kZXIgPSAtMSwgUmVtYWluZGVyCisocEFsaWduZWQpCXN1YgkJUmVtYWluZGVyID0gRW5kUHRyLCBJblB0cgorKHBBbGlnbmVkKQlici5jb25kLmRwdGsubWFueSAucmM0QWxpZ25lZAorCX0gOzsKKwl7CisJCS5tbWkKKwkJbm9wCQkweDAKKwkJbm9wCQkweDAKKwkJbW92LmkJCWFyLmxjID0gUmVtYWluZGVyCisJfQorCisvKiBEbyB0aGUgaW5pdGlhbCBmZXcgYnl0ZXMgdmlhIHRoZSBjb21wYWN0LCBtb2R1bG8tc2NoZWR1bGVkIGxvb3AKKyAgIHVudGlsIHRoZSBvdXRwdXQgcG9pbnRlciBpcyA4LWJ5dGUtYWxpZ25lZC4gICovCisKKwkJTU9EU0NIRURfUkM0X1BST0xPR1VFCisJCU1PRFNDSEVEX1JDNF9MT09QKC5SQzRBbGlnbkxvb3ApCisKKwl7CisJCS5taWIKKwkJc3ViCQlSZW1haW5kZXIgPSBFbmRQdHIsIEluUHRyCisJCXp4dDEJCUlGaW5hbCA9IElGaW5hbAorCQljbHJycmIJCQkJLy8gQ2xlYXIgQ0ZNLnJyYi5wciBzbworCQk7OwkJCQkvLyBuZXh0ICJtb3YgcHIucm90ID0gTiIKKwkJCQkJCS8vIGRvZXMgdGhlIHJpZ2h0IHRoaW5nLgorCX0KKwl7CisJCS5tbWkKKwkJbW92CQlJWzFdID0gSUZpbmFsCisJCW5vcAkJMHgwCisJCW5vcAkJMHgwCisJfSA7OworCisKKy5yYzRBbGlnbmVkOgorCisvKgorICAgVW5yb2xsZWQgbG9vcCBjb3VudCA9IChSZW1haW5kZXIgLSAoJHVucm9sbF9jb3VudCsxKSokcGhhc2VzKS8oJHVucm9sbF9jb3VudCokcGhhc2VzKQorICovCisKKwl7CisJCS5tbHgKKwkJYWRkCUxvb3BDb3VudCA9IDEgLSAoJHVucm9sbF9jb3VudCArIDEpKiRwaGFzZXMsIFJlbWFpbmRlcgorCQltb3ZsCQlSZW1haW5kZXIgPSAweGFhYWFhYWFhYWFhYWFhYWIKKwl9IDs7CisJeworCQkubW1pCisJCXNldGYuc2lnCWY2ID0gTG9vcENvdW50CQkvLyBNMiwgTTMJNiBjeWMKKwkJc2V0Zi5zaWcJZjcgPSBSZW1haW5kZXIJCS8vIE0yLCBNMwk2IGN5YworCQlub3AJCTB4MAorCX0gOzsKKwl7CisJCS5tZmIKKwkJbm9wCQkweDAKKwkJeG1weS5odQkJZjYgPSBmNiwgZjcKKwkJbm9wCQkweDAKKwl9IDs7CisJeworCQkubW1pCisJCWdldGYuc2lnCUxvb3BDb3VudCA9IGY2OzsJLy8gTTIJCTUgY3ljCisJCW5vcAkJMHgwCisJCXNoci51CQlMb29wQ291bnQgPSBMb29wQ291bnQsIDQKKwl9IDs7CisJeworCQkubW1pCisJCW5vcAkJMHgwCisJCW5vcAkJMHgwCisJCW1vdi5pCQlhci5sYyA9IExvb3BDb3VudAorCX0gOzsKKworLyogTm93IGNvbWVzIHRoZSB1bnJvbGxlZCBsb29wOiAqLworCisucmM0UHJvbG9ndWU6CitfX18KKworJGl0ZXJhdGlvbiA9IDA7CisKKyMgR2VuZXJhdGUgdGhlIHByb2xvZ3VlOgorJHByZWRpY2F0ZXMgPSAxOworZm9yICgkaSA9IDA7ICRpIDwgJHBoYXNlczsgKyskaSkgeworICAgICZlbWl0X2JvZHkgKFwkY29kZSwgXCRieXBhc3MsICRpdGVyYXRpb24rKywgJHByZWRpY2F0ZXMpOworICAgICRwcmVkaWNhdGVzID0gKCRwcmVkaWNhdGVzIDw8IDEpIHwgMTsKK30KKworJGNvZGUuPTw8X19fOworLnJjNExvb3A6CitfX18KKworIyBHZW5lcmF0ZSB0aGUgYm9keToKK2ZvciAoJGkgPSAwOyAkaSA8ICR1bnJvbGxfY291bnQqJHBoYXNlczsgKyskaSkgeworICAgICZlbWl0X2JvZHkgKFwkY29kZSwgXCRieXBhc3MsICRpdGVyYXRpb24rKywgJHByZWRpY2F0ZXMpOworfQorCiskY29kZS49PDxfX187CisucmM0RXBpbG9ndWU6CitfX18KKworIyBHZW5lcmF0ZSB0aGUgZXBpbG9ndWU6Citmb3IgKCRpID0gMDsgJGkgPCAkcGhhc2VzOyArKyRpKSB7CisgICAgJHByZWRpY2F0ZXMgPDw9IDE7CisgICAgJmVtaXRfYm9keSAoXCRjb2RlLCBcJGJ5cGFzcywgJGl0ZXJhdGlvbisrLCAkcHJlZGljYXRlcyk7Cit9CisKKyRjb2RlLj08PF9fXzsKKwl7CisJCS5tbWkKKwkJbGZldGNoLm50MQlbRW5kUHRyXQkvLyBmZXRjaCBsaW5lIHdpdGggbGFzdCBieXRlCisJCW1vdgkJSUZpbmFsID0gSVsxXQorCQlub3AJCTB4MAorCX0KKworLnJjNFJlbWFpbmRlcjoKKwl7CisJCS5tbWkKKwkJc3ViCQlSZW1haW5kZXIgPSBFbmRQdHIsIEluUHRyCS8vIENhbGN1bGF0ZQorCQkJCQkJCQkvLyAjIG9mIGJ5dGVzCisJCQkJCQkJCS8vIGxlZnQgLSAxCisJCW5vcAkJMHgwCisJCW5vcAkJMHgwCisJfSA7OworCXsKKwkJLm1pYgorCQljbXAuZXEJCXBEb25lLCBwMCA9IC0xLCBSZW1haW5kZXIgLy8gZG9uZSBhbHJlYWR5PworCQltb3YuaQkJYXIubGMgPSBSZW1haW5kZXIKKyhwRG9uZSkJCWJyLmNvbmQuZHB0ay5mZXcgLnJjNENvbXBsZXRlCisJfQorCisvKiBEbyB0aGUgcmVtYWluaW5nIGJ5dGVzIHZpYSB0aGUgY29tcGFjdCwgbW9kdWxvLXNjaGVkdWxlZCBsb29wICovCisKKwkJTU9EU0NIRURfUkM0X1BST0xPR1VFCisJCU1PRFNDSEVEX1JDNF9MT09QKC5SQzRSZXN0TG9vcCkKKworLnJjNENvbXBsZXRlOgorCXsKKwkJLm1taQorCQlhZGQJCUtUYWJsZSA9IC1TWiwgS1RhYmxlCisJCWFkZAkJSUZpbmFsID0gLTEsIElGaW5hbAorCQltb3YJCWFyLmxjID0gTENTYXZlCisJfSA7OworCXsKKwkJLm1paQorCQlTS0VZCQlbS1RhYmxlXSA9IEosLVNaCisJCXp4dDEJCUlGaW5hbCA9IElGaW5hbAorCQltb3YJCXByID0gUFJTYXZlLCAweDFGRkZGCisJfSA7OworCXsKKwkJLm1pYgorCQlTS0VZCQlbS1RhYmxlXSA9IElGaW5hbAorCQlhZGQJCVJldFZhbCA9IDEsIHIwCisJCWJyLnJldC5zcHRrLmZldwlycAorCX0gOzsKK19fXworCisjIExhc3QgYnV0IG5vdCBsZWFzdCwgZW1pdCB0aGUgY29kZSBmb3IgdGhlIGJ5cGFzcy1jb2RlIG9mIHRoZSB1bnJvbGxlZCBsb29wOgorCiskY29kZS49JGJ5cGFzczsKKworJGNvZGUuPTw8X19fOworCS5lbmRwIFJDNAorX19fCisKK3ByaW50ICRjb2RlOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3JjNC9hc20vcmM0LXMzOTB4LnBsIGIvY3J5cHRvL3JjNC9hc20vcmM0LXMzOTB4LnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2NjgxZmEKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vcmM0L2FzbS9yYzQtczM5MHgucGwKQEAgLTAsMCArMSwyMDUgQEAKKyMhL3Vzci9iaW4vZW52IHBlcmwKKyMKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgV3JpdHRlbiBieSBBbmR5IFBvbHlha292IDxhcHByb0BmeS5jaGFsbWVycy5zZT4gZm9yIHRoZSBPcGVuU1NMCisjIHByb2plY3QuIFRoZSBtb2R1bGUgaXMsIGhvd2V2ZXIsIGR1YWwgbGljZW5zZWQgdW5kZXIgT3BlblNTTCBhbmQKKyMgQ1JZUFRPR0FNUyBsaWNlbnNlcyBkZXBlbmRpbmcgb24gd2hlcmUgeW91IG9idGFpbiBpdC4gRm9yIGZ1cnRoZXIKKyMgZGV0YWlscyBzZWUgaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9+YXBwcm8vY3J5cHRvZ2Ftcy8uCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjCisjIEZlYnJ1YXJ5IDIwMDkKKyMKKyMgUGVyZm9ybWFuY2UgaXMgMnggb2YgZ2NjIDMuNC42IG9uIHoxMC4gQ29kaW5nICJzZWNyZXQiIGlzIHRvCisjICJjbHVzdGVyIiBBZGRyZXNzIEdlbmVyYXRpb24gSW50ZXJsb2Nrcywgc28gdGhhdCBvbmUgcGlwZWxpbmUgc3RhbGwKKyMgcmVzb2x2ZXMgc2V2ZXJhbCBkZXBlbmRlbmNpZXMuCisKKyRycD0iJXIxNCI7Ciskc3A9IiVyMTUiOworJGNvZGU9PDxfX187CisudGV4dAorCitfX18KKworIyB2b2lkIFJDNChSQzRfS0VZICprZXksc2l6ZV90IGxlbixjb25zdCB2b2lkICppbnAsdm9pZCAqb3V0KQoreworJGFjYz0iJXIwIjsKKyRjbnQ9IiVyMSI7Ciska2V5PSIlcjIiOworJGxlbj0iJXIzIjsKKyRpbnA9IiVyNCI7Ciskb3V0PSIlcjUiOworCitAWFg9KCIlcjYiLCIlcjciKTsKK0BUWD0oIiVyOCIsIiVyOSIpOworJFlZPSIlcjEwIjsKKyRUWT0iJXIxMSI7CisKKyRjb2RlLj08PF9fXzsKKy5nbG9ibAlSQzQKKy50eXBlCVJDNCxcQGZ1bmN0aW9uCisuYWxpZ24JNjQKK1JDNDoKKwlzdG1nCSVyNiwlcjExLDQ4KCRzcCkKKwlsbGdjCSRYWFswXSwwKCRrZXkpCisJbGxnYwkkWVksMSgka2V5KQorCWxhCSRYWFswXSwxKCRYWFswXSkKKwluaWxsCSRYWFswXSwweGZmCisJc3JsZwkkY250LCRsZW4sMworCWx0Z3IJJGNudCwkY250CisJbGxnYwkkVFhbMF0sMigkWFhbMF0sJGtleSkKKwlqegkuTHNob3J0CisJagkuTG9vcDgKKworLmFsaWduCTY0CisuTG9vcDg6CitfX18KK2ZvciAoJGk9MDskaTw4OyRpKyspIHsKKyRjb2RlLj08PF9fXzsKKwlsYQkkWVksMCgkWVksJFRYWzBdKQkjICRpCisJbmlsbAkkWVksMjU1CisJbGEJJFhYWzFdLDEoJFhYWzBdKQorCW5pbGwJJFhYWzFdLDI1NQorX19fCiskY29kZS49PDxfX18gaWYgKCRpPT0xKTsKKwlsbGdjCSRhY2MsMigkVFksJGtleSkKK19fXworJGNvZGUuPTw8X19fIGlmICgkaT4xKTsKKwlzbGxnCSRhY2MsJGFjYyw4CisJaWMJJGFjYywyKCRUWSwka2V5KQorX19fCiskY29kZS49PDxfX187CisJbGxnYwkkVFksMigkWVksJGtleSkKKwlzdGMJJFRYWzBdLDIoJFlZLCRrZXkpCisJbGxnYwkkVFhbMV0sMigkWFhbMV0sJGtleSkKKwlzdGMJJFRZLDIoJFhYWzBdLCRrZXkpCisJY3IJJFhYWzFdLCRZWQorCWpuZQkuTGNtb3YkaQorCWxhCSRUWFsxXSwwKCRUWFswXSkKKy5MY21vdiRpOgorCWxhCSRUWSwwKCRUWSwkVFhbMF0pCisJbmlsbAkkVFksMjU1CitfX18KK3B1c2goQFRYLHNoaWZ0KEBUWCkpOyBwdXNoKEBYWCxzaGlmdChAWFgpKTsgICAgICMgInJvdGF0ZSIgcmVnaXN0ZXJzCit9CisKKyRjb2RlLj08PF9fXzsKKwlsZwkkVFhbMV0sMCgkaW5wKQorCXNsbGcJJGFjYywkYWNjLDgKKwlsYQkkaW5wLDgoJGlucCkKKwlpYwkkYWNjLDIoJFRZLCRrZXkpCisJeGdyCSRhY2MsJFRYWzFdCisJc3RnCSRhY2MsMCgkb3V0KQorCWxhCSRvdXQsOCgkb3V0KQorCWJyY3QJJGNudCwuTG9vcDgKKworLkxzaG9ydDoKKwlsZ2hpCSRhY2MsNworCW5ncgkkbGVuLCRhY2MKKwlqegkuTGV4aXQKKwlqCS5Mb29wMQorCisuYWxpZ24JMTYKKy5Mb29wMToKKwlsYQkkWVksMCgkWVksJFRYWzBdKQorCW5pbGwJJFlZLDI1NQorCWxsZ2MJJFRZLDIoJFlZLCRrZXkpCisJc3RjCSRUWFswXSwyKCRZWSwka2V5KQorCXN0YwkkVFksMigkWFhbMF0sJGtleSkKKwlhcgkkVFksJFRYWzBdCisJYWhpCSRYWFswXSwxCisJbmlsbAkkVFksMjU1CisJbmlsbAkkWFhbMF0sMjU1CisJbGxnYwkkYWNjLDAoJGlucCkKKwlsYQkkaW5wLDEoJGlucCkKKwlsbGdjCSRUWSwyKCRUWSwka2V5KQorCWxsZ2MJJFRYWzBdLDIoJFhYWzBdLCRrZXkpCisJeHIJJGFjYywkVFkKKwlzdGMJJGFjYywwKCRvdXQpCisJbGEJJG91dCwxKCRvdXQpCisJYnJjdAkkbGVuLC5Mb29wMQorCisuTGV4aXQ6CisJYWhpCSRYWFswXSwtMQorCXN0YwkkWFhbMF0sMCgka2V5KQorCXN0YwkkWVksMSgka2V5KQorCWxtZwklcjYsJXIxMSw0OCgkc3ApCisJYnIJJHJwCisuc2l6ZQlSQzQsLi1SQzQKKy5zdHJpbmcJIlJDNCBmb3IgczM5MHgsIENSWVBUT0dBTVMgYnkgPGFwcHJvXEBvcGVuc3NsLm9yZz4iCisKK19fXworfQorCisjIHZvaWQgUkM0X3NldF9rZXkoUkM0X0tFWSAqa2V5LHVuc2lnbmVkIGludCBsZW4sY29uc3Qgdm9pZCAqaW5wKQoreworJGNudD0iJXIwIjsKKyRpZHg9IiVyMSI7Ciska2V5PSIlcjIiOworJGxlbj0iJXIzIjsKKyRpbnA9IiVyNCI7CiskYWNjPSIlcjUiOworJGRhdD0iJXI2IjsKKyRpa2V5PSIlcjciOworJGlpbnA9IiVyOCI7CisKKyRjb2RlLj08PF9fXzsKKy5nbG9ibAlSQzRfc2V0X2tleQorLnR5cGUJUkM0X3NldF9rZXksXEBmdW5jdGlvbgorLmFsaWduCTY0CitSQzRfc2V0X2tleToKKwlzdG1nCSVyNiwlcjgsNDgoJHNwKQorCWxoaQkkY250LDI1NgorCWxhCSRpZHgsMCglcjApCisJc3RoCSRpZHgsMCgka2V5KQorLmFsaWduCTQKKy5MMXN0bG9vcDoKKwlzdGMJJGlkeCwyKCRpZHgsJGtleSkKKwlsYQkkaWR4LDEoJGlkeCkKKwlicmN0CSRjbnQsLkwxc3Rsb29wCisKKwlsZ2hpCSRpa2V5LC0yNTYKKwlscgkkY250LCRsZW4KKwlsYQkkaWlucCwwKCVyMCkKKwlsYQkkaWR4LDAoJXIwKQorLmFsaWduCTE2CisuTDJuZGxvb3A6CisJbGxnYwkkYWNjLDIrMjU2KCRpa2V5LCRrZXkpCisJbGxnYwkkZGF0LDAoJGlpbnAsJGlucCkKKwlsYQkkaWR4LDAoJGlkeCwkYWNjKQorCWxhCSRpa2V5LDEoJGlrZXkpCisJbGEJJGlkeCwwKCRpZHgsJGRhdCkKKwluaWxsCSRpZHgsMjU1CisJbGEJJGlpbnAsMSgkaWlucCkKKwl0bWwJJGlrZXksMjU1CisJbGxnYwkkZGF0LDIoJGlkeCwka2V5KQorCXN0YwkkZGF0LDIrMjU2LTEoJGlrZXksJGtleSkKKwlzdGMJJGFjYywyKCRpZHgsJGtleSkKKwlqegkuTGRvbmUKKwlicmN0CSRjbnQsLkwybmRsb29wCisJbHIJJGNudCwkbGVuCisJbGEJJGlpbnAsMCglcjApCisJagkuTDJuZGxvb3AKKy5MZG9uZToKKwlsbWcJJXI2LCVyOCw0OCgkc3ApCisJYnIJJHJwCisuc2l6ZQlSQzRfc2V0X2tleSwuLVJDNF9zZXRfa2V5CisKK19fXworfQorCisjIGNvbnN0IGNoYXIgKlJDNF9vcHRpb25zKCkKKyRjb2RlLj08PF9fXzsKKy5nbG9ibAlSQzRfb3B0aW9ucworLnR5cGUJUkM0X29wdGlvbnMsXEBmdW5jdGlvbgorLmFsaWduCTE2CitSQzRfb3B0aW9uczoKKwlsYXJsCSVyMiwuTG9wdGlvbnMKKwlicgklcjE0Cisuc2l6ZQlSQzRfb3B0aW9ucywuLVJDNF9vcHRpb25zCisuc2VjdGlvbgkucm9kYXRhCisuTG9wdGlvbnM6CisuYWxpZ24JOAorLnN0cmluZwkicmM0KDh4LGNoYXIpIgorX19fCisKK3ByaW50ICRjb2RlOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3JjNC9hc20vcmM0LXg4Nl82NC5wbCBiL2NyeXB0by9yYzQvYXNtL3JjNC14ODZfNjQucGwKaW5kZXggMDBjNmZhMi4uNjc3YmU1ZiAxMDA3NTUKLS0tIGEvY3J5cHRvL3JjNC9hc20vcmM0LXg4Nl82NC5wbAorKysgYi9jcnlwdG8vcmM0L2FzbS9yYzQteDg2XzY0LnBsCkBAIC01OCwxNCArNTgsMTggQEAKICMgZml0IGZvciBDb3JlMiBhbmQgdGhlcmVmb3JlIHRoZSBjb2RlIHdhcyBtb2RpZmllZCB0byBza2lwIGNsb29wOCBvbgogIyB0aGlzIENQVS4KIAotJG91dHB1dD1zaGlmdDsKKyRmbGF2b3VyID0gc2hpZnQ7Ciskb3V0cHV0ICA9IHNoaWZ0OworaWYgKCRmbGF2b3VyID1+IC9cLi8pIHsgJG91dHB1dCA9ICRmbGF2b3VyOyB1bmRlZiAkZmxhdm91cjsgfQorCiskd2luNjQ9MDsgJHdpbjY0PTEgaWYgKCRmbGF2b3VyID1+IC9bbm1dYXNtfG1pbmd3NjQvIHx8ICRvdXRwdXQgPX4gL1wuYXNtJC8pOwogCiAkMCA9fiBtLyguKltcL1xcXSlbXlwvXFxdKyQvOyAkZGlyPSQxOwogKCAkeGxhdGU9IiR7ZGlyfXg4Nl82NC14bGF0ZS5wbCIgYW5kIC1mICR4bGF0ZSApIG9yCiAoICR4bGF0ZT0iJHtkaXJ9Li4vLi4vcGVybGFzbS94ODZfNjQteGxhdGUucGwiIGFuZCAtZiAkeGxhdGUpIG9yCiBkaWUgImNhbid0IGxvY2F0ZSB4ODZfNjQteGxhdGUucGwiOwogCi1vcGVuIFNURE9VVCwifCAkXlggJHhsYXRlICRvdXRwdXQiOworb3BlbiBTVERPVVQsInwgJF5YICR4bGF0ZSAkZmxhdm91ciAkb3V0cHV0IjsKIAogJGRhdD0iJXJkaSI7CSAgICAjIGFyZzEKICRsZW49IiVyc2kiOwkgICAgIyBhcmcyCkBAIC04Nyw4ICs5MSwxMCBAQAogCWpuZQkuTGVudHJ5CiAJcmV0CiAuTGVudHJ5OgorCXB1c2gJJXJieAogCXB1c2gJJXIxMgogCXB1c2gJJXIxMworLkxwcm9sb2d1ZToKIAogCWFkZAlcJDgsJGRhdAogCW1vdmwJLTgoJGRhdCksJFhYWzBdI2QKQEAgLTEzMywxNiArMTM5LDggQEAKIAlqbnoJLkxsb29wOAogCWNtcAlcJDAsJGxlbgogCWpuZQkuTGxvb3AxCi1fX18KLSRjb2RlLj08PF9fXzsKLS5MZXhpdDoKLQlzdWIJXCQxLCRYWFswXSNiCi0JbW92bAkkWFhbMF0jZCwtOCgkZGF0KQotCW1vdmwJJFlZI2QsLTQoJGRhdCkKKwlqbXAJLkxleGl0CiAKLQlwb3AJJXIxMwotCXBvcAklcjEyCi0JcmV0CiAuYWxpZ24JMTYKIC5MbG9vcDE6CiAJYWRkCSRUWFswXSNiLCRZWSNiCkBAIC0xNjcsOSArMTY1LDggQEAKIAltb3Z6YgkoJGRhdCwkWFhbMF0pLCRUWFswXSNkCiAJdGVzdAlcJC04LCRsZW4KIAlqegkuTGNsb29wMQotCWNtcAlcJDAsMjYwKCRkYXQpCisJY21wbAlcJDAsMjYwKCRkYXQpCiAJam56CS5MY2xvb3AxCi0JcHVzaAklcmJ4CiAJam1wCS5MY2xvb3A4CiAuYWxpZ24JMTYKIC5MY2xvb3A4OgpAQCAtMjI0LDcgKzIyMSw2IEBACiAKIAl0ZXN0CVwkLTgsJGxlbgogCWpuegkuTGNsb29wOAotCXBvcAklcmJ4CiAJY21wCVwkMCwkbGVuCiAJam5lCS5MY2xvb3AxCiAJam1wCS5MZXhpdApAQCAtMjQ5LDYgKzI0NSwxOSBAQAogCXN1YglcJDEsJGxlbgogCWpuegkuTGNsb29wMQogCWptcAkuTGV4aXQKKworLmFsaWduCTE2CisuTGV4aXQ6CisJc3ViCVwkMSwkWFhbMF0jYgorCW1vdmwJJFhYWzBdI2QsLTgoJGRhdCkKKwltb3ZsCSRZWSNkLC00KCRkYXQpCisKKwltb3YJKCVyc3ApLCVyMTMKKwltb3YJOCglcnNwKSwlcjEyCisJbW92CTE2KCVyc3ApLCVyYngKKwlhZGQJXCQyNCwlcnNwCisuTGVwaWxvZ3VlOgorCXJldAogLnNpemUJUkM0LC4tUkM0CiBfX18KIApAQCAtMzMzLDExICszNDIsMTAgQEAKIC5zaXplCVJDNF9zZXRfa2V5LC4tUkM0X3NldF9rZXkKIAogLmdsb2JsCVJDNF9vcHRpb25zCi0udHlwZQlSQzRfb3B0aW9ucyxcQGZ1bmN0aW9uLDAKKy50eXBlCVJDNF9vcHRpb25zLFxAYWJpLW9tbmlwb3RlbnQKIC5hbGlnbgkxNgogUkM0X29wdGlvbnM6Ci0JLnBpY21ldXAgJXJheAotCWxlYQkuTG9wdHMtLiglcmF4KSwlcmF4CisJbGVhCS5Mb3B0cyglcmlwKSwlcmF4CiAJbW92CU9QRU5TU0xfaWEzMmNhcF9QKCVyaXApLCVlZHgKIAlidAlcJDIwLCVlZHgKIAlqbmMJLkxkb25lCkBAIC0zNTcsOSArMzY1LDEzOSBAQAogLnNpemUJUkM0X29wdGlvbnMsLi1SQzRfb3B0aW9ucwogX19fCiAKLSRjb2RlID1+IHMvIyhbYndkXSkvJDEvZ207CisjIEVYQ0VQVElPTl9ESVNQT1NJVElPTiBoYW5kbGVyIChFWENFUFRJT05fUkVDT1JEICpyZWMsVUxPTkc2NCBmcmFtZSwKKyMJCUNPTlRFWFQgKmNvbnRleHQsRElTUEFUQ0hFUl9DT05URVhUICpkaXNwKQoraWYgKCR3aW42NCkgeworJHJlYz0iJXJjeCI7CiskZnJhbWU9IiVyZHgiOworJGNvbnRleHQ9IiVyOCI7CiskZGlzcD0iJXI5IjsKIAotJGNvZGUgPX4gcy9SQzRfc2V0X2tleS9wcml2YXRlX1JDNF9zZXRfa2V5L2cgaWYgKCRFTlZ7RklQU0NBTkxJQn0gbmUgIiIpOworJGNvZGUuPTw8X19fOworLmV4dGVybglfX2ltcF9SdGxWaXJ0dWFsVW53aW5kCisudHlwZQlzdHJlYW1fc2VfaGFuZGxlcixcQGFiaS1vbW5pcG90ZW50CisuYWxpZ24JMTYKK3N0cmVhbV9zZV9oYW5kbGVyOgorCXB1c2gJJXJzaQorCXB1c2gJJXJkaQorCXB1c2gJJXJieAorCXB1c2gJJXJicAorCXB1c2gJJXIxMgorCXB1c2gJJXIxMworCXB1c2gJJXIxNAorCXB1c2gJJXIxNQorCXB1c2hmcQorCXN1YglcJDY0LCVyc3AKKworCW1vdgkxMjAoJGNvbnRleHQpLCVyYXgJIyBwdWxsIGNvbnRleHQtPlJheAorCW1vdgkyNDgoJGNvbnRleHQpLCVyYngJIyBwdWxsIGNvbnRleHQtPlJpcAorCisJbGVhCS5McHJvbG9ndWUoJXJpcCksJXIxMAorCWNtcAklcjEwLCVyYngJCSMgY29udGV4dC0+UmlwPHByb2xvZ3VlIGxhYmVsCisJamIJLkxpbl9wcm9sb2d1ZQorCisJbW92CTE1MigkY29udGV4dCksJXJheAkjIHB1bGwgY29udGV4dC0+UnNwCisKKwlsZWEJLkxlcGlsb2d1ZSglcmlwKSwlcjEwCisJY21wCSVyMTAsJXJieAkJIyBjb250ZXh0LT5SaXA+PWVwaWxvZ3VlIGxhYmVsCisJamFlCS5MaW5fcHJvbG9ndWUKKworCWxlYQkyNCglcmF4KSwlcmF4CisKKwltb3YJLTgoJXJheCksJXJieAorCW1vdgktMTYoJXJheCksJXIxMgorCW1vdgktMjQoJXJheCksJXIxMworCW1vdgklcmJ4LDE0NCgkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlJieAorCW1vdgklcjEyLDIxNigkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlIxMgorCW1vdgklcjEzLDIyNCgkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlIxMworCisuTGluX3Byb2xvZ3VlOgorCW1vdgk4KCVyYXgpLCVyZGkKKwltb3YJMTYoJXJheCksJXJzaQorCW1vdgklcmF4LDE1MigkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlJzcAorCW1vdgklcnNpLDE2OCgkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlJzaQorCW1vdgklcmRpLDE3NigkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlJkaQorCisJam1wCS5MY29tbW9uX3NlaF9leGl0Cisuc2l6ZQlzdHJlYW1fc2VfaGFuZGxlciwuLXN0cmVhbV9zZV9oYW5kbGVyCisKKy50eXBlCWtleV9zZV9oYW5kbGVyLFxAYWJpLW9tbmlwb3RlbnQKKy5hbGlnbgkxNgora2V5X3NlX2hhbmRsZXI6CisJcHVzaAklcnNpCisJcHVzaAklcmRpCisJcHVzaAklcmJ4CisJcHVzaAklcmJwCisJcHVzaAklcjEyCisJcHVzaAklcjEzCisJcHVzaAklcjE0CisJcHVzaAklcjE1CisJcHVzaGZxCisJc3ViCVwkNjQsJXJzcAorCisJbW92CTE1MigkY29udGV4dCksJXJheAkjIHB1bGwgY29udGV4dC0+UnNwCisJbW92CTgoJXJheCksJXJkaQorCW1vdgkxNiglcmF4KSwlcnNpCisJbW92CSVyc2ksMTY4KCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UnNpCisJbW92CSVyZGksMTc2KCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UmRpCisKKy5MY29tbW9uX3NlaF9leGl0OgorCisJbW92CTQwKCRkaXNwKSwlcmRpCQkjIGRpc3AtPkNvbnRleHRSZWNvcmQKKwltb3YJJGNvbnRleHQsJXJzaQkJIyBjb250ZXh0CisJbW92CVwkMTU0LCVlY3gJCSMgc2l6ZW9mKENPTlRFWFQpCisJLmxvbmcJMHhhNTQ4ZjNmYwkJIyBjbGQ7IHJlcCBtb3ZzcQorCisJbW92CSRkaXNwLCVyc2kKKwl4b3IJJXJjeCwlcmN4CQkjIGFyZzEsIFVOV19GTEFHX05IQU5ETEVSCisJbW92CTgoJXJzaSksJXJkeAkJIyBhcmcyLCBkaXNwLT5JbWFnZUJhc2UKKwltb3YJMCglcnNpKSwlcjgJCSMgYXJnMywgZGlzcC0+Q29udHJvbFBjCisJbW92CTE2KCVyc2kpLCVyOQkJIyBhcmc0LCBkaXNwLT5GdW5jdGlvbkVudHJ5CisJbW92CTQwKCVyc2kpLCVyMTAJCSMgZGlzcC0+Q29udGV4dFJlY29yZAorCWxlYQk1NiglcnNpKSwlcjExCQkjICZkaXNwLT5IYW5kbGVyRGF0YQorCWxlYQkyNCglcnNpKSwlcjEyCQkjICZkaXNwLT5Fc3RhYmxpc2hlckZyYW1lCisJbW92CSVyMTAsMzIoJXJzcCkJCSMgYXJnNQorCW1vdgklcjExLDQwKCVyc3ApCQkjIGFyZzYKKwltb3YJJXIxMiw0OCglcnNwKQkJIyBhcmc3CisJbW92CSVyY3gsNTYoJXJzcCkJCSMgYXJnOCwgKE5VTEwpCisJY2FsbAkqX19pbXBfUnRsVmlydHVhbFVud2luZCglcmlwKQorCisJbW92CVwkMSwlZWF4CQkjIEV4Y2VwdGlvbkNvbnRpbnVlU2VhcmNoCisJYWRkCVwkNjQsJXJzcAorCXBvcGZxCisJcG9wCSVyMTUKKwlwb3AJJXIxNAorCXBvcAklcjEzCisJcG9wCSVyMTIKKwlwb3AJJXJicAorCXBvcAklcmJ4CisJcG9wCSVyZGkKKwlwb3AJJXJzaQorCXJldAorLnNpemUJa2V5X3NlX2hhbmRsZXIsLi1rZXlfc2VfaGFuZGxlcgorCisuc2VjdGlvbgkucGRhdGEKKy5hbGlnbgk0CisJLnJ2YQkuTFNFSF9iZWdpbl9SQzQKKwkucnZhCS5MU0VIX2VuZF9SQzQKKwkucnZhCS5MU0VIX2luZm9fUkM0CisKKwkucnZhCS5MU0VIX2JlZ2luX1JDNF9zZXRfa2V5CisJLnJ2YQkuTFNFSF9lbmRfUkM0X3NldF9rZXkKKwkucnZhCS5MU0VIX2luZm9fUkM0X3NldF9rZXkKKworLnNlY3Rpb24JLnhkYXRhCisuYWxpZ24JOAorLkxTRUhfaW5mb19SQzQ6CisJLmJ5dGUJOSwwLDAsMAorCS5ydmEJc3RyZWFtX3NlX2hhbmRsZXIKKy5MU0VIX2luZm9fUkM0X3NldF9rZXk6CisJLmJ5dGUJOSwwLDAsMAorCS5ydmEJa2V5X3NlX2hhbmRsZXIKK19fXworfQorCiskY29kZSA9fiBzLyMoW2J3ZF0pLyQxL2dtOwogCiBwcmludCAkY29kZTsKIApkaWZmIC0tZ2l0IGEvY3J5cHRvL3JjNC9yYzQuaCBiL2NyeXB0by9yYzQvcmM0LmgKaW5kZXggMmQ4NjIwZC4uMjlkMWFjYyAxMDA2NDQKLS0tIGEvY3J5cHRvL3JjNC9yYzQuaAorKysgYi9jcnlwdG8vcmM0L3JjNC5oCkBAIC02NCw2ICs2NCw4IEBACiAjZXJyb3IgUkM0IGlzIGRpc2FibGVkLgogI2VuZGlmCiAKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKwogI2lmZGVmICBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CiAjZW5kaWYKQEAgLTc2LDExICs3OCw4IEBACiAKICAKIGNvbnN0IGNoYXIgKlJDNF9vcHRpb25zKHZvaWQpOwotI2lmZGVmIE9QRU5TU0xfRklQUwotdm9pZCBwcml2YXRlX1JDNF9zZXRfa2V5KFJDNF9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7Ci0jZW5kaWYKIHZvaWQgUkM0X3NldF9rZXkoUkM0X0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKLXZvaWQgUkM0KFJDNF9LRVkgKmtleSwgdW5zaWduZWQgbG9uZyBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluZGF0YSwKK3ZvaWQgUkM0KFJDNF9LRVkgKmtleSwgc2l6ZV90IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5kYXRhLAogCQl1bnNpZ25lZCBjaGFyICpvdXRkYXRhKTsKIAogI2lmZGVmICBfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3JjNC9yYzRfZW5jLmMgYi9jcnlwdG8vcmM0L3JjNF9lbmMuYwppbmRleCAwNjYwZWE2Li44YzRmYzZjIDEwMDY0NAotLS0gYS9jcnlwdG8vcmM0L3JjNF9lbmMuYworKysgYi9jcnlwdG8vcmM0L3JjNF9lbmMuYwpAQCAtNjcsMTIgKzY3LDEyIEBACiAgKiBEYXRlOiBXZWQsIDE0IFNlcCAxOTk0IDA2OjM1OjMxIEdNVAogICovCiAKLXZvaWQgUkM0KFJDNF9LRVkgKmtleSwgdW5zaWduZWQgbG9uZyBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluZGF0YSwKK3ZvaWQgUkM0KFJDNF9LRVkgKmtleSwgc2l6ZV90IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5kYXRhLAogCSAgICAgdW5zaWduZWQgY2hhciAqb3V0ZGF0YSkKIAl7CiAgICAgICAgIHJlZ2lzdGVyIFJDNF9JTlQgKmQ7CiAgICAgICAgIHJlZ2lzdGVyIFJDNF9JTlQgeCx5LHR4LHR5OwotCWludCBpOworCXNpemVfdCBpOwogICAgICAgICAKICAgICAgICAgeD1rZXktPng7ICAgICAKICAgICAgICAgeT1rZXktPnk7ICAgICAKQEAgLTEyMCw4ICsxMjAsOCBAQAogCQkJKFJDNF9DSFVOSylkWyh0eCt0eSkmMHhmZl1cCiAJCQkpCiAKLQlpZiAoICggKCh1bnNpZ25lZCBsb25nKWluZGF0YSAgJiAoc2l6ZW9mKFJDNF9DSFVOSyktMSkpIHwgCi0JICAgICAgICgodW5zaWduZWQgbG9uZylvdXRkYXRhICYgKHNpemVvZihSQzRfQ0hVTkspLTEpKSApID09IDAgKQorCWlmICggKCAoKHNpemVfdClpbmRhdGEgICYgKHNpemVvZihSQzRfQ0hVTkspLTEpKSB8IAorCSAgICAgICAoKHNpemVfdClvdXRkYXRhICYgKHNpemVvZihSQzRfQ0hVTkspLTEpKSApID09IDAgKQogCQl7CiAJCVJDNF9DSFVOSyBpY2h1bmssb3RwOwogCQljb25zdCB1bmlvbiB7IGxvbmcgb25lOyBjaGFyIGxpdHRsZTsgfSBpc19lbmRpYW4gPSB7MX07CkBAIC0xNTcsNyArMTU3LDcgQEAKIAkJaWYgKCFpc19lbmRpYW4ubGl0dGxlKQogCQkJewkvKiBCSUctRU5ESUFOIENBU0UgKi8KICMgZGVmaW5lIEJFU0hGVChjKQkoKChzaXplb2YoUkM0X0NIVU5LKS0oYyktMSkqOCkmKHNpemVvZihSQzRfQ0hVTkspKjgtMSkpCi0JCQlmb3IgKDtsZW4mfihzaXplb2YoUkM0X0NIVU5LKS0xKTtsZW4tPXNpemVvZihSQzRfQ0hVTkspKQorCQkJZm9yICg7bGVuJigwLXNpemVvZihSQzRfQ0hVTkspKTtsZW4tPXNpemVvZihSQzRfQ0hVTkspKQogCQkJCXsKIAkJCQlpY2h1bmsgID0gKihSQzRfQ0hVTksgKilpbmRhdGE7CiAJCQkJb3RwICA9IFJDNF9TVEVQPDxCRVNIRlQoMCk7CkBAIC0yMTAsNyArMjEwLDcgQEAKIAkJZWxzZQogCQkJewkvKiBMSVRUTEUtRU5ESUFOIENBU0UgKi8KICMgZGVmaW5lIExFU0hGVChjKQkoKChjKSo4KSYoc2l6ZW9mKFJDNF9DSFVOSykqOC0xKSkKLQkJCWZvciAoO2xlbiZ+KHNpemVvZihSQzRfQ0hVTkspLTEpO2xlbi09c2l6ZW9mKFJDNF9DSFVOSykpCisJCQlmb3IgKDtsZW4mKDAtc2l6ZW9mKFJDNF9DSFVOSykpO2xlbi09c2l6ZW9mKFJDNF9DSFVOSykpCiAJCQkJewogCQkJCWljaHVuayAgPSAqKFJDNF9DSFVOSyAqKWluZGF0YTsKIAkJCQlvdHAgID0gUkM0X1NURVA7CkBAIC0yNzYsNyArMjc2LDcgQEAKICNkZWZpbmUgUkM0X0xPT1AoYSxiLGkpCUxPT1AoYVtpXSxiW2ldKQogI2VuZGlmCiAKLQlpPShpbnQpKGxlbj4+M0wpOworCWk9bGVuPj4zOwogCWlmIChpKQogCQl7CiAJCWZvciAoOzspCkBAIC0yOTYsNyArMjk2LDcgQEAKIAkJCWlmICgtLWkgPT0gMCkgYnJlYWs7CiAJCQl9CiAJCX0KLQlpPShpbnQpbGVuJjB4MDc7CisJaT1sZW4mMHgwNzsKIAlpZiAoaSkKIAkJewogCQlmb3IgKDs7KQpkaWZmIC0tZ2l0IGEvY3J5cHRvL3JjNC9yYzRfc2tleS5jIGIvY3J5cHRvL3JjNC9yYzRfc2tleS5jCmluZGV4IDQ0NzhkMWEuLmIyMmM0MGIgMTAwNjQ0Ci0tLSBhL2NyeXB0by9yYzQvcmM0X3NrZXkuYworKysgYi9jcnlwdG8vcmM0L3JjNF9za2V5LmMKQEAgLTU5LDExICs1OSw2IEBACiAjaW5jbHVkZSA8b3BlbnNzbC9yYzQuaD4KICNpbmNsdWRlICJyYzRfbG9jbC5oIgogI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KLSNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotI2lmZGVmIE9QRU5TU0xfRklQUwotI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotI2VuZGlmCi0KIAogY29uc3QgY2hhciBSQzRfdmVyc2lvbltdPSJSQzQiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKIApAQCAtOTAsMTEgKzg1LDcgQEAKICAqIERhdGU6IFdlZCwgMTQgU2VwIDE5OTQgMDY6MzU6MzEgR01UCiAgKi8KIAotI2lmZGVmIE9QRU5TU0xfRklQUwotdm9pZCBwcml2YXRlX1JDNF9zZXRfa2V5KFJDNF9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKLSNlbHNlCiB2b2lkIFJDNF9zZXRfa2V5KFJDNF9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKLSNlbmRpZgogCXsKICAgICAgICAgcmVnaXN0ZXIgUkM0X0lOVCB0bXA7CiAgICAgICAgIHJlZ2lzdGVyIGludCBpZDEsaWQyOwpAQCAtMTI4LDIwICsxMTksMTQgQEAKIAkJICogaW1wbGVtZW50YXRpb25zIHN1ZmZlciBmcm9tIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlCiAJCSAqIGxvc3NlcyB0aGVuLCBlLmcuIFBJSUkgZXhoaWJpdHMgPjJ4IGRldGVyaW9yYXRpb24sCiAJCSAqIGFuZCBzbyBkb2VzIE9wdGVyb24uIEluIG9yZGVyIHRvIGFzc3VyZSBvcHRpbWFsCi0JCSAqIGFsbC1yb3VuZCBwZXJmb3JtYW5jZSwgd2UgZGV0ZWN0IFA0IGF0IHJ1bi10aW1lIGJ5Ci0JCSAqIGNoZWNraW5nIHVwb24gcmVzZXJ2ZWQgYml0IDIwIGluIENQVSBjYXBhYmlsaXR5CisJCSAqIGFsbC1yb3VuZCBwZXJmb3JtYW5jZSwgbGV0IHVzIFt0cnkgdG9dIGRldGVjdCBQNCBhdAorCQkgKiBydW4tdGltZSBieSBjaGVja2luZyB1cG9uIEhUVCBiaXQgaW4gQ1BVIGNhcGFiaWxpdHkKIAkJICogdmVjdG9yIGFuZCBzZXQgdXAgY29tcHJlc3NlZCBrZXkgc2NoZWR1bGUsIHdoaWNoIGlzCiAJCSAqIHJlY29nbml6ZWQgYnkgY29ycmVzcG9uZGluZ2x5IHVwZGF0ZWQgYXNzZW1ibGVyCi0JCSAqIG1vZHVsZS4uLiBCaXQgMjAgaXMgc2V0IHVwIGJ5IE9QRU5TU0xfaWEzMl9jcHVpZC4KLQkJICoKKwkJICogbW9kdWxlLi4uCiAJCSAqCQkJCTxhcHByb0BmeS5jaGFsbWVycy5zZT4KIAkJICovCi0jaWZkZWYgT1BFTlNTTF9GSVBTCi0JCXVuc2lnbmVkIGxvbmcgKmlhMzJjYXBfcHRyID0gT1BFTlNTTF9pYTMyY2FwX2xvYygpOwotCQlpZiAoaWEzMmNhcF9wdHIgJiYgKCppYTMyY2FwX3B0ciAmICgxPDwyOCkpKSB7Ci0jZWxzZQogCQlpZiAoT1BFTlNTTF9pYTMyY2FwX1AgJiAoMTw8MjgpKSB7Ci0jZW5kaWYKIAkJCXVuc2lnbmVkIGNoYXIgKmNwPSh1bnNpZ25lZCBjaGFyICopZDsKIAogCQkJZm9yIChpPTA7aTwyNTY7aSsrKSBjcFtpXT1pOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3JjNC9yYzR0ZXN0LmMgYi9jcnlwdG8vcmM0L3JjNHRlc3QuYwppbmRleCA1NGI1OTdmLi42MzNhNzllIDEwMDY0NAotLS0gYS9jcnlwdG8vcmM0L3JjNHRlc3QuYworKysgYi9jcnlwdG8vcmM0L3JjNHRlc3QuYwpAQCAtMTE0LDggKzExNCw4IEBACiAKIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJewotCWludCBlcnI9MDsKLQl1bnNpZ25lZCBpbnQgaSwgajsKKwlpbnQgaSxlcnI9MDsKKwlpbnQgajsKIAl1bnNpZ25lZCBjaGFyICpwOwogCVJDNF9LRVkga2V5OwogCXVuc2lnbmVkIGNoYXIgb2J1Zls1MTJdOwpAQCAtMTI5LDEyICsxMjksMTIgQEAKIAkJCXsKIAkJCXByaW50ZigiZXJyb3IgY2FsY3VsYXRpbmcgUkM0XG4iKTsKIAkJCXByaW50Zigib3V0cHV0OiIpOwotCQkJZm9yIChqPTA7IGo8ZGF0YV9sZW5baV0rMVU7IGorKykKKwkJCWZvciAoaj0wOyBqPGRhdGFfbGVuW2ldKzE7IGorKykKIAkJCQlwcmludGYoIiAlMDJ4IixvYnVmW2pdKTsKIAkJCXByaW50ZigiXG4iKTsKIAkJCXByaW50ZigiZXhwZWN0OiIpOwogCQkJcD0gJihvdXRwdXRbaV1bMF0pOwotCQkJZm9yIChqPTA7IGo8ZGF0YV9sZW5baV0rMVU7IGorKykKKwkJCWZvciAoaj0wOyBqPGRhdGFfbGVuW2ldKzE7IGorKykKIAkJCQlwcmludGYoIiAlMDJ4IiwqKHArKykpOwogCQkJcHJpbnRmKCJcbiIpOwogCQkJZXJyKys7CkBAIC0xODAsMTIgKzE4MCwxMiBAQAogCQkJewogCQkJcHJpbnRmKCJlcnJvciBpbiBSQzQgbXVsdGktY2FsbCBwcm9jZXNzaW5nXG4iKTsKIAkJCXByaW50Zigib3V0cHV0OiIpOwotCQkJZm9yIChqPTA7IGo8ZGF0YV9sZW5bM10rMVU7IGorKykKKwkJCWZvciAoaj0wOyBqPGRhdGFfbGVuWzNdKzE7IGorKykKIAkJCQlwcmludGYoIiAlMDJ4IixvYnVmW2pdKTsKIAkJCXByaW50ZigiXG4iKTsKIAkJCXByaW50ZigiZXhwZWN0OiIpOwogCQkJcD0gJihvdXRwdXRbM11bMF0pOwotCQkJZm9yIChqPTA7IGo8ZGF0YV9sZW5bM10rMVU7IGorKykKKwkJCWZvciAoaj0wOyBqPGRhdGFfbGVuWzNdKzE7IGorKykKIAkJCQlwcmludGYoIiAlMDJ4IiwqKHArKykpOwogCQkJZXJyKys7CiAJCQl9CkBAIC0yMTYsMTEgKzIxNiwxMSBAQAogCQlpZiAobWVtY21wKG1kLGV4cGVjdGVkLHNpemVvZihtZCkpKSB7CiAJCQlwcmludGYoImVycm9yIGluIFJDNCBidWxrIHRlc3RcbiIpOwogCQkJcHJpbnRmKCJvdXRwdXQ6Iik7Ci0JCQlmb3IgKGo9MDsgajxzaXplb2YobWQpOyBqKyspCisJCQlmb3IgKGo9MDsgajwoaW50KXNpemVvZihtZCk7IGorKykKIAkJCQlwcmludGYoIiAlMDJ4IixtZFtqXSk7CiAJCQlwcmludGYoIlxuIik7CiAJCQlwcmludGYoImV4cGVjdDoiKTsKLQkJCWZvciAoaj0wOyBqPHNpemVvZihtZCk7IGorKykKKwkJCWZvciAoaj0wOyBqPChpbnQpc2l6ZW9mKG1kKTsgaisrKQogCQkJCXByaW50ZigiICUwMngiLGV4cGVjdGVkW2pdKTsKIAkJCXByaW50ZigiXG4iKTsKIAkJCWVycisrOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3JpcGVtZC9NYWtlZmlsZSBiL2NyeXB0by9yaXBlbWQvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxNDVmMTMuLjAwMDAwMDAKLS0tIGEvY3J5cHRvL3JpcGVtZC9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0jCi0jIE9wZW5TU0wvY3J5cHRvL3JpcGVtZC9NYWtlZmlsZQotIwotCi1ESVI9ICAgIHJpcGVtZAotVE9QPSAgICAuLi8uLgotQ0M9ICAgICBjYwotQ1BQPSAgICAkKENDKSAtRQotSU5DTFVERVM9Ci1DRkxBRz0tZwotTUFLRUZJTEU9ICAgICAgIE1ha2VmaWxlCi1BUj0gICAgICAgICAgICAgYXIgcgotCi1SSVBfQVNNX09CSj0KLQotQ0ZMQUdTPSAkKElOQ0xVREVTKSAkKENGTEFHKQotQVNGTEFHUz0gJChJTkNMVURFUykgJChBU0ZMQUcpCi1BRkxBR1M9ICQoQVNGTEFHUykKLQotR0VORVJBTD1NYWtlZmlsZQotVEVTVD1ybWR0ZXN0LmMKLUFQUFM9Ci0KLUxJQj0kKFRPUCkvbGliY3J5cHRvLmEKLUxJQlNSQz1ybWRfZGdzdC5jIHJtZF9vbmUuYwotTElCT0JKPXJtZF9kZ3N0Lm8gcm1kX29uZS5vICQoUk1EMTYwX0FTTV9PQkopCi0KLVNSQz0gJChMSUJTUkMpCi0KLUVYSEVBREVSPSByaXBlbWQuaAotSEVBREVSPSBybWRfbG9jbC5oIHJtZGNvbnN0LmggJChFWEhFQURFUikKLQotQUxMPSAgICAkKEdFTkVSQUwpICQoU1JDKSAkKEhFQURFUikKLQotdG9wOgotCShjZCAuLi8uLjsgJChNQUtFKSBESVJTPWNyeXB0byBTRElSUz0kKERJUikgc3ViX2FsbCkKLQotYWxsOiAgICBsaWIKLQotbGliOiAgICAkKExJQk9CSikKLQkkKEFSWCkgJChMSUIpICQoTElCT0JKKQotCSQoUkFOTElCKSAkKExJQikgfHwgZWNobyBOZXZlciBtaW5kLgotCUB0b3VjaCBsaWIKLQotIyBFTEYKLXJtODYtZWxmLnM6IGFzbS9ybWQtNTg2LnBsIC4uL3Blcmxhc20veDg2YXNtLnBsCi0JKGNkIGFzbTsgJChQRVJMKSBybWQtNTg2LnBsIGVsZiAkKENGTEFHUykgPiAuLi8kQCkKLSMgQ09GRgotcm04Ni1jb2YuczogYXNtL3JtZC01ODYucGwgLi4vcGVybGFzbS94ODZhc20ucGwKLQkoY2QgYXNtOyAkKFBFUkwpIHJtZC01ODYucGwgY29mZiAkKENGTEFHUykgPiAuLi8kQCkKLSMgYS5vdXQKLXJtODYtb3V0LnM6IGFzbS9ybWQtNTg2LnBsIC4uL3Blcmxhc20veDg2YXNtLnBsCi0JKGNkIGFzbTsgJChQRVJMKSBybWQtNTg2LnBsIGEub3V0ICQoQ0ZMQUdTKSA+IC4uLyRAKQotCi1maWxlczoKLQkkKFBFUkwpICQoVE9QKS91dGlsL2ZpbGVzLnBsIE1ha2VmaWxlID4+ICQoVE9QKS9NSU5GTwotCi1saW5rczoKLQlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vaW5jbHVkZS9vcGVuc3NsICQoRVhIRUFERVIpCi0JQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL3Rlc3QgJChURVNUKQotCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9hcHBzICQoQVBQUykKLQotaW5zdGFsbDoKLQlAWyAtbiAiJChJTlNUQUxMVE9QKSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdG9wIE1ha2VmaWxlLi4uCi0JQGhlYWRlcmxpc3Q9IiQoRVhIRUFERVIpIjsgZm9yIGkgaW4gJCRoZWFkZXJsaXN0IDsgXAotCWRvICBcCi0JKGNwICQkaSAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaTsgXAotCWNobW9kIDY0NCAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaSApOyBcCi0JZG9uZTsKLQotdGFnczoKLQljdGFncyAkKFNSQykKLQotdGVzdHM6Ci0KLWxpbnQ6Ci0JbGludCAtRExJTlQgJChJTkNMVURFUykgJChTUkMpPmZsdWZmCi0KLWRlcGVuZDoKLQlAWyAtbiAiJChNQUtFREVQRU5EKSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdXBwZXIgTWFrZWZpbGUuLi4KLQkkKE1BS0VERVBFTkQpIC0tICQoQ0ZMQUcpICQoSU5DTFVERVMpICQoREVQRkxBRykgLS0gJChQUk9HUykgJChMSUJTUkMpCi0KLWRjbGVhbjoKLQkkKFBFUkwpIC1wZSAnaWYgKC9eIyBETyBOT1QgREVMRVRFIFRISVMgTElORS8pIHtwcmludDsgZXhpdCgwKTt9JyAkKE1BS0VGSUxFKSA+TWFrZWZpbGUubmV3Ci0JbXYgLWYgTWFrZWZpbGUubmV3ICQoTUFLRUZJTEUpCi0KLWNsZWFuOgotCXJtIC1mICoucyAqLm8gKi5vYmogbGliIHRhZ3MgY29yZSAucHVyZSAubmZzKiAqLm9sZCAqLmJhayBmbHVmZgotCi0jIERPIE5PVCBERUxFVEUgVEhJUyBMSU5FIC0tIG1ha2UgZGVwZW5kIGRlcGVuZHMgb24gaXQuCi0KLXJtZF9kZ3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLXJtZF9kZ3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotcm1kX2Rnc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotcm1kX2Rnc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXJtZF9kZ3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1ybWRfZGdzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmlwZW1kLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1ybWRfZGdzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotcm1kX2Rnc3QubzogLi4vbWQzMl9jb21tb24uaCBybWRfZGdzdC5jIHJtZF9sb2NsLmggcm1kY29uc3QuaAotcm1kX29uZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLXJtZF9vbmUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLXJtZF9vbmUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JpcGVtZC5oCi1ybWRfb25lLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotcm1kX29uZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBybWRfb25lLmMKZGlmZiAtLWdpdCBhL2NyeXB0by9yaXBlbWQvYXNtL3JtZC01ODYucGwgYi9jcnlwdG8vcmlwZW1kL2FzbS9ybWQtNTg2LnBsCmluZGV4IDRmM2M0YzkuLmU4YjJiYzIgMTAwNjQ0Ci0tLSBhL2NyeXB0by9yaXBlbWQvYXNtL3JtZC01ODYucGwKKysrIGIvY3J5cHRvL3JpcGVtZC9hc20vcm1kLTU4Ni5wbApAQCAtNSw3ICs1LDggQEAKIAogJG5vcm1hbD0wOwogCi1wdXNoKEBJTkMsInBlcmxhc20iLCIuLi8uLi9wZXJsYXNtIik7CiskMCA9fiBtLyguKltcL1xcXSlbXlwvXFxdKyQvOyAkZGlyPSQxOworcHVzaChASU5DLCIke2Rpcn0iLCIke2Rpcn0uLi8uLi9wZXJsYXNtIik7CiByZXF1aXJlICJ4ODZhc20ucGwiOwogCiAmYXNtX2luaXQoJEFSR1ZbMF0sJDApOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3JpcGVtZC9yaXBlbWQuaCBiL2NyeXB0by9yaXBlbWQvcmlwZW1kLmgKaW5kZXggM2I2ZDA0My4uNTk0MmViNiAxMDA2NDQKLS0tIGEvY3J5cHRvL3JpcGVtZC9yaXBlbWQuaAorKysgYi9jcnlwdG8vcmlwZW1kL3JpcGVtZC5oCkBAIC03MCw3ICs3MCw3IEBACiAjZXJyb3IgUklQRU1EIGlzIGRpc2FibGVkLgogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX1dJTjE2KSB8fCBkZWZpbmVkKF9fTFAzMl9fKQorI2lmIGRlZmluZWQoX19MUDMyX18pCiAjZGVmaW5lIFJJUEVNRDE2MF9MT05HIHVuc2lnbmVkIGxvbmcKICNlbGlmIGRlZmluZWQoT1BFTlNTTF9TWVNfQ1JBWSkgfHwgZGVmaW5lZChfX0lMUDY0X18pCiAjZGVmaW5lIFJJUEVNRDE2MF9MT05HIHVuc2lnbmVkIGxvbmcKQEAgLTkwLDkgKzkwLDcgQEAKIAlSSVBFTUQxNjBfTE9ORyBkYXRhW1JJUEVNRDE2MF9MQkxPQ0tdOwogCXVuc2lnbmVkIGludCAgIG51bTsKIAl9IFJJUEVNRDE2MF9DVFg7Ci0jaWZkZWYgT1BFTlNTTF9GSVBTCi1pbnQgcHJpdmF0ZV9SSVBFTUQxNjBfSW5pdChSSVBFTUQxNjBfQ1RYICpjKTsKLSNlbmRpZgorCiBpbnQgUklQRU1EMTYwX0luaXQoUklQRU1EMTYwX0NUWCAqYyk7CiBpbnQgUklQRU1EMTYwX1VwZGF0ZShSSVBFTUQxNjBfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKIGludCBSSVBFTUQxNjBfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIFJJUEVNRDE2MF9DVFggKmMpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3JpcGVtZC9ybWRfZGdzdC5jIGIvY3J5cHRvL3JpcGVtZC9ybWRfZGdzdC5jCmluZGV4IGVhZDExZDAuLjU5YjAxN2YgMTAwNjQ0Ci0tLSBhL2NyeXB0by9yaXBlbWQvcm1kX2Rnc3QuYworKysgYi9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMKQEAgLTU5LDExICs1OSw2IEBACiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlICJybWRfbG9jbC5oIgogI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KLSNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotI2lmZGVmIE9QRU5TU0xfRklQUwotI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotI2VuZGlmCi0KIAogY29uc3QgY2hhciBSTUQxNjBfdmVyc2lvbltdPSJSSVBFLU1EMTYwIiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7CiAKQEAgLTc0LDE2ICs2OSwxNCBAQAogICAgICB2b2lkIHJpcGVtZDE2MF9ibG9jayhSSVBFTUQxNjBfQ1RYICpjLCB1bnNpZ25lZCBsb25nICpwLHNpemVfdCBudW0pOwogIyAgZW5kaWYKIAotRklQU19OT05fRklQU19NRF9Jbml0KFJJUEVNRDE2MCkKK2ludCBSSVBFTUQxNjBfSW5pdChSSVBFTUQxNjBfQ1RYICpjKQogCXsKKwltZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsKIAljLT5BPVJJUEVNRDE2MF9BOwogCWMtPkI9UklQRU1EMTYwX0I7CiAJYy0+Qz1SSVBFTUQxNjBfQzsKIAljLT5EPVJJUEVNRDE2MF9EOwogCWMtPkU9UklQRU1EMTYwX0U7Ci0JYy0+Tmw9MDsKLQljLT5OaD0wOwotCWMtPm51bT0wOwogCXJldHVybiAxOwogCX0KIApkaWZmIC0tZ2l0IGEvY3J5cHRvL3JpcGVtZC9ybWRfbG9jbC5oIGIvY3J5cHRvL3JpcGVtZC9ybWRfbG9jbC5oCmluZGV4IGNlMTJhODAuLmYxNGIzNDYgMTAwNjQ0Ci0tLSBhL2NyeXB0by9yaXBlbWQvcm1kX2xvY2wuaAorKysgYi9jcnlwdG8vcmlwZW1kL3JtZF9sb2NsLmgKQEAgLTcyLDcgKzcyLDcgQEAKICAqLwogI2lmZGVmIFJNRDE2MF9BU00KICMgaWYgZGVmaW5lZChfX2kzODYpIHx8IGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX01fSVg4NikgfHwgZGVmaW5lZChfX0lOVEVMX18pCi0jICBkZWZpbmUgcmlwZW1kMTYwX2Jsb2NrX2hvc3Rfb3JkZXIgcmlwZW1kMTYwX2Jsb2NrX2FzbV9kYXRhX29yZGVyCisjICBkZWZpbmUgcmlwZW1kMTYwX2Jsb2NrX2RhdGFfb3JkZXIgcmlwZW1kMTYwX2Jsb2NrX2FzbV9kYXRhX29yZGVyCiAjIGVuZGlmCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvY3J5cHRvL3JzYS9NYWtlZmlsZSBiL2NyeXB0by9yc2EvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiMWZkNjQuLjAwMDAwMDAKLS0tIGEvY3J5cHRvL3JzYS9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDI3MCArMCwwIEBACi0jCi0jIE9wZW5TU0wvY3J5cHRvL3JzYS9NYWtlZmlsZQotIwotCi1ESVI9CXJzYQotVE9QPQkuLi8uLgotQ0M9CWNjCi1JTkNMVURFUz0gLUkuLiAtSSQoVE9QKSAtSS4uLy4uL2luY2x1ZGUKLUNGTEFHPS1nCi1NQUtFRklMRT0JTWFrZWZpbGUKLUFSPQkJYXIgcgotCi1DRkxBR1M9ICQoSU5DTFVERVMpICQoQ0ZMQUcpCi0KLUdFTkVSQUw9TWFrZWZpbGUKLVRFU1Q9cnNhX3Rlc3QuYwotQVBQUz0KLQotTElCPSQoVE9QKS9saWJjcnlwdG8uYQotTElCU1JDPSByc2FfZWF5LmMgcnNhX2dlbi5jIHJzYV9saWIuYyByc2Ffc2lnbi5jIHJzYV9zYW9zLmMgcnNhX2Vyci5jIFwKLQlyc2FfcGsxLmMgcnNhX3NzbC5jIHJzYV9ub25lLmMgcnNhX29hZXAuYyByc2FfY2hrLmMgcnNhX251bGwuYyBcCi0JcnNhX3Bzcy5jIHJzYV94OTMxLmMgcnNhX3g5MzFnLmMgcnNhX2FzbjEuYyByc2FfZGVwci5jIHJzYV9lbmcuYwotTElCT0JKPSByc2FfZWF5Lm8gcnNhX2dlbi5vIHJzYV9saWIubyByc2Ffc2lnbi5vIHJzYV9zYW9zLm8gcnNhX2Vyci5vIFwKLQlyc2FfcGsxLm8gcnNhX3NzbC5vIHJzYV9ub25lLm8gcnNhX29hZXAubyByc2FfY2hrLm8gcnNhX251bGwubyBcCi0JcnNhX3Bzcy5vIHJzYV94OTMxLm8gcnNhX3g5MzFnLm8gcnNhX2FzbjEubyByc2FfZGVwci5vIHJzYV9lbmcubwotCi1TUkM9ICQoTElCU1JDKQotCi1FWEhFQURFUj0gcnNhLmgKLUhFQURFUj0JJChFWEhFQURFUikKLQotQUxMPSAgICAkKEdFTkVSQUwpICQoU1JDKSAkKEhFQURFUikKLQotdG9wOgotCShjZCAuLi8uLjsgJChNQUtFKSBESVJTPWNyeXB0byBTRElSUz0kKERJUikgc3ViX2FsbCkKLQotYWxsOglsaWIKLQotbGliOgkkKExJQk9CSikKLQkkKEFSWCkgJChMSUIpICQoTElCT0JKKQotCSQoUkFOTElCKSAkKExJQikgfHwgZWNobyBOZXZlciBtaW5kLgotCUB0b3VjaCBsaWIKLQotZmlsZXM6Ci0JJChQRVJMKSAkKFRPUCkvdXRpbC9maWxlcy5wbCBNYWtlZmlsZSA+PiAkKFRPUCkvTUlORk8KLQotbGlua3M6Ci0JQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL2luY2x1ZGUvb3BlbnNzbCAkKEVYSEVBREVSKQotCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi90ZXN0ICQoVEVTVCkKLQlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vYXBwcyAkKEFQUFMpCi0KLWluc3RhbGw6Ci0JQFsgLW4gIiQoSU5TVEFMTFRPUCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHRvcCBNYWtlZmlsZS4uLgotCUBoZWFkZXJsaXN0PSIkKEVYSEVBREVSKSI7IGZvciBpIGluICQkaGVhZGVybGlzdCA7IFwKLQlkbyAgXAotCShjcCAkJGkgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGk7IFwKLQljaG1vZCA2NDQgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGkgKTsgXAotCWRvbmU7Ci0KLXRhZ3M6Ci0JY3RhZ3MgJChTUkMpCi0KLXRlc3RzOgotCi1saW50OgotCWxpbnQgLURMSU5UICQoSU5DTFVERVMpICQoU1JDKT5mbHVmZgotCi1kZXBlbmQ6Ci0JQFsgLW4gIiQoTUFLRURFUEVORCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHVwcGVyIE1ha2VmaWxlLi4uCi0JJChNQUtFREVQRU5EKSAtLSAkKENGTEFHKSAkKElOQ0xVREVTKSAkKERFUEZMQUcpIC0tICQoUFJPR1MpICQoTElCU1JDKQotCi1kY2xlYW46Ci0JJChQRVJMKSAtcGUgJ2lmICgvXiMgRE8gTk9UIERFTEVURSBUSElTIExJTkUvKSB7cHJpbnQ7IGV4aXQoMCk7fScgJChNQUtFRklMRSkgPk1ha2VmaWxlLm5ldwotCW12IC1mIE1ha2VmaWxlLm5ldyAkKE1BS0VGSUxFKQotCi1jbGVhbjoKLQlybSAtZiAqLm8gKi8qLm8gKi5vYmogbGliIHRhZ3MgY29yZSAucHVyZSAubmZzKiAqLm9sZCAqLmJhayBmbHVmZgotCi0jIERPIE5PVCBERUxFVEUgVEhJUyBMSU5FIC0tIG1ha2UgZGVwZW5kIGRlcGVuZHMgb24gaXQuCi0KLXJzYV9hc24xLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi1yc2FfYXNuMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMXQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXJzYV9hc24xLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotcnNhX2FzbjEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1yc2FfYXNuMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLXJzYV9hc24xLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1yc2FfYXNuMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotcnNhX2FzbjEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotcnNhX2FzbjEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLXJzYV9hc24xLm86IC4uL2NyeXB0bGliLmggcnNhX2FzbjEuYwotcnNhX2Noay5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotcnNhX2Noay5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLXJzYV9jaGsubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1yc2FfY2hrLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1yc2FfY2hrLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1yc2FfY2hrLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLXJzYV9jaGsubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLXJzYV9jaGsubzogcnNhX2Noay5jCi1yc2FfZGVwci5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotcnNhX2RlcHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oCi1yc2FfZGVwci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1yc2FfZGVwci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLXJzYV9kZXByLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1yc2FfZGVwci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotcnNhX2RlcHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotcnNhX2RlcHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLXJzYV9kZXByLm86IC4uL2NyeXB0bGliLmggcnNhX2RlcHIuYwotcnNhX2VheS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotcnNhX2VheS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmgKLXJzYV9lYXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotcnNhX2VheS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLXJzYV9lYXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXJzYV9lYXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXJzYV9lYXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKLXJzYV9lYXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1yc2FfZWF5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggcnNhX2VheS5jCi1yc2FfZW5nLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi1yc2FfZW5nLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaAotcnNhX2VuZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1yc2FfZW5nLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1yc2FfZW5nLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLXJzYV9lbmcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotcnNhX2VuZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotcnNhX2VuZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi1yc2FfZW5nLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXJzYV9lbmcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXJzYV9lbmcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAotcnNhX2VuZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcnNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1yc2FfZW5nLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotcnNhX2VuZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi1yc2FfZW5nLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2NyeXB0bGliLmggcnNhX2VuZy5jCi1yc2FfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1yc2FfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotcnNhX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLXJzYV9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLXJzYV9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCi1yc2FfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotcnNhX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCByc2FfZXJyLmMKLXJzYV9nZW4ubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLXJzYV9nZW4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oCi1yc2FfZ2VuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLXJzYV9nZW4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1yc2FfZ2VuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1yc2FfZ2VuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1yc2FfZ2VuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLXJzYV9nZW4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLXJzYV9nZW4ubzogLi4vY3J5cHRsaWIuaCByc2FfZ2VuLmMKLXJzYV9saWIubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLXJzYV9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oCi1yc2FfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLXJzYV9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLXJzYV9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotcnNhX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZW5naW5lLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1yc2FfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi1yc2FfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLXJzYV9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotcnNhX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotcnNhX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCi1yc2FfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLXJzYV9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1yc2FfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLXJzYV9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vY3J5cHRsaWIuaCByc2FfbGliLmMKLXJzYV9ub25lLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi1yc2Ffbm9uZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmgKLXJzYV9ub25lLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLXJzYV9ub25lLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotcnNhX25vbmUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXJzYV9ub25lLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1yc2Ffbm9uZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAotcnNhX25vbmUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1yc2Ffbm9uZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIHJzYV9ub25lLmMKLXJzYV9udWxsLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi1yc2FfbnVsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmgKLXJzYV9udWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLXJzYV9udWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotcnNhX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXJzYV9udWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1yc2FfbnVsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAotcnNhX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1yc2FfbnVsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIHJzYV9udWxsLmMKLXJzYV9vYWVwLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi1yc2Ffb2FlcC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmgKLXJzYV9vYWVwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLXJzYV9vYWVwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotcnNhX29hZXAubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLXJzYV9vYWVwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLXJzYV9vYWVwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXJzYV9vYWVwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1yc2Ffb2FlcC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAotcnNhX29hZXAubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotcnNhX29hZXAubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLXJzYV9vYWVwLm86IC4uL2NyeXB0bGliLmggcnNhX29hZXAuYwotcnNhX3BrMS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotcnNhX3BrMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmgKLXJzYV9wazEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotcnNhX3BrMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLXJzYV9wazEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXJzYV9wazEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXJzYV9wazEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKLXJzYV9wazEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1yc2FfcGsxLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggcnNhX3BrMS5jCi1yc2FfcHNzLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi1yc2FfcHNzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaAotcnNhX3Bzcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1yc2FfcHNzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotcnNhX3Bzcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotcnNhX3Bzcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi1yc2FfcHNzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXJzYV9wc3MubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXJzYV9wc3MubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKLXJzYV9wc3MubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotcnNhX3Bzcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotcnNhX3Bzcy5vOiAuLi9jcnlwdGxpYi5oIHJzYV9wc3MuYwotcnNhX3Nhb3MubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLXJzYV9zYW9zLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaAotcnNhX3Nhb3MubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotcnNhX3Nhb3MubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLXJzYV9zYW9zLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLXJzYV9zYW9zLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLXJzYV9zYW9zLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLXJzYV9zYW9zLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotcnNhX3Nhb3MubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXJzYV9zYW9zLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1yc2Ffc2Fvcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKLXJzYV9zYW9zLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLXJzYV9zYW9zLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1yc2Ffc2Fvcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oCi1yc2Ffc2Fvcy5vOiAuLi9jcnlwdGxpYi5oIHJzYV9zYW9zLmMKLXJzYV9zaWduLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi1yc2Ffc2lnbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmgKLXJzYV9zaWduLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLXJzYV9zaWduLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1yc2Ffc2lnbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi1yc2Ffc2lnbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1yc2Ffc2lnbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1yc2Ffc2lnbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLXJzYV9zaWduLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1yc2Ffc2lnbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotcnNhX3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCi1yc2Ffc2lnbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCi1yc2Ffc2lnbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotcnNhX3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAotcnNhX3NpZ24ubzogLi4vY3J5cHRsaWIuaCByc2Ffc2lnbi5jCi1yc2Ffc3NsLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi1yc2Ffc3NsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaAotcnNhX3NzbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1yc2Ffc3NsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotcnNhX3NzbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotcnNhX3NzbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotcnNhX3NzbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAotcnNhX3NzbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLXJzYV9zc2wubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCByc2Ffc3NsLmMKLXJzYV94OTMxLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi1yc2FfeDkzMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmgKLXJzYV94OTMxLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLXJzYV94OTMxLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotcnNhX3g5MzEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotcnNhX3g5MzEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotcnNhX3g5MzEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXJzYV94OTMxLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCi1yc2FfeDkzMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLXJzYV94OTMxLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggcnNhX3g5MzEuYwotcnNhX3g5MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1yc2FfeDkzMWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1yc2FfeDkzMWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1yc2FfeDkzMWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXJzYV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotcnNhX3g5MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLXJzYV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotcnNhX3g5MzFnLm86IHJzYV94OTMxZy5jCmRpZmYgLS1naXQgYS9jcnlwdG8vcnNhL3JzYS5oIGIvY3J5cHRvL3JzYS9yc2EuaAppbmRleCA1YmI5MzJhLi5jZjc0MzQzIDEwMDY0NAotLS0gYS9jcnlwdG8vcnNhL3JzYS5oCisrKyBiL2NyeXB0by9yc2EvcnNhLmgKQEAgLTc0LDI1ICs3NCw2IEBACiAjZXJyb3IgUlNBIGlzIGRpc2FibGVkLgogI2VuZGlmCiAKLS8qIElmIHRoaXMgZmxhZyBpcyBzZXQgdGhlIFJTQSBtZXRob2QgaXMgRklQUyBjb21wbGlhbnQgYW5kIGNhbiBiZSB1c2VkCi0gKiBpbiBGSVBTIG1vZGUuIFRoaXMgaXMgc2V0IGluIHRoZSB2YWxpZGF0ZWQgbW9kdWxlIG1ldGhvZC4gSWYgYW4KLSAqIGFwcGxpY2F0aW9uIHNldHMgdGhpcyBmbGFnIGluIGl0cyBvd24gbWV0aG9kcyBpdCBpcyBpdHMgcmVwb3NpYmlsaXR5Ci0gKiB0byBlbnN1cmUgdGhlIHJlc3VsdCBpcyBjb21wbGlhbnQuCi0gKi8KLQotI2RlZmluZSBSU0FfRkxBR19GSVBTX01FVEhPRAkJCTB4MDQwMAotCi0vKiBJZiB0aGlzIGZsYWcgaXMgc2V0IHRoZSBvcGVyYXRpb25zIG5vcm1hbGx5IGRpc2FibGVkIGluIEZJUFMgbW9kZSBhcmUKLSAqIHBlcm1pdHRlZCBpdCBpcyB0aGVuIHRoZSBhcHBsaWNhdGlvbnMgcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlIHRoYXQgdGhlCi0gKiB1c2FnZSBpcyBjb21wbGlhbnQuCi0gKi8KLQotI2RlZmluZSBSU0FfRkxBR19OT05fRklQU19BTExPVwkJCTB4MDQwMAotCi0jaWZkZWYgT1BFTlNTTF9GSVBTCi0jZGVmaW5lIEZJUFNfUlNBX1NJWkVfVAlpbnQKLSNlbmRpZgotCiAjaWZkZWYgIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKICNlbmRpZgpAQCAtMTM2LDcgKzExNyw4IEBACiAJCXVuc2lnbmVkIGNoYXIgKnNpZ3JldCwgdW5zaWduZWQgaW50ICpzaWdsZW4sIGNvbnN0IFJTQSAqcnNhKTsKIAlpbnQgKCpyc2FfdmVyaWZ5KShpbnQgZHR5cGUsCiAJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm0sIHVuc2lnbmVkIGludCBtX2xlbmd0aCwKLQkJdW5zaWduZWQgY2hhciAqc2lnYnVmLCB1bnNpZ25lZCBpbnQgc2lnbGVuLCBjb25zdCBSU0EgKnJzYSk7CisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZ2J1ZiwgdW5zaWduZWQgaW50IHNpZ2xlbiwKKwkJCQkJCQkJY29uc3QgUlNBICpyc2EpOwogLyogSWYgdGhpcyBjYWxsYmFjayBpcyBOVUxMLCB0aGUgYnVpbHRpbiBzb2Z0d2FyZSBSU0Ega2V5LWdlbiB3aWxsIGJlIHVzZWQuIFRoaXMKICAqIGlzIGZvciBiZWhhdmlvdXJhbCBjb21wYXRpYmlsaXR5IHdoaWxzdCB0aGUgY29kZSBnZXRzIHJld2lyZWQsIGJ1dCBvbmUgZGF5CiAgKiBpdCB3b3VsZCBiZSBuaWNlIHRvIGFzc3VtZSB0aGVyZSBhcmUgbm8gc3VjaCB0aGluZ3MgYXMgImJ1aWx0aW4gc29mdHdhcmUiCkBAIC0xODIsOCArMTY0LDYgQEAKICMgZGVmaW5lIE9QRU5TU0xfUlNBX01BWF9NT0RVTFVTX0JJVFMJMTYzODQKICNlbmRpZgogCi0jZGVmaW5lIE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUyAxMDI0Ci0KICNpZm5kZWYgT1BFTlNTTF9SU0FfU01BTExfTU9EVUxVU19CSVRTCiAjIGRlZmluZSBPUEVOU1NMX1JTQV9TTUFMTF9NT0RVTFVTX0JJVFMJMzA3MgogI2VuZGlmCkBAIC0yMzgsMTEgKzIxOCwzNyBAQAogI2VuZGlmCiAKIAorI2RlZmluZSBFVlBfUEtFWV9DVFhfc2V0X3JzYV9wYWRkaW5nKGN0eCwgcGFkKSBcCisJRVZQX1BLRVlfQ1RYX2N0cmwoY3R4LCBFVlBfUEtFWV9SU0EsIC0xLCBFVlBfUEtFWV9DVFJMX1JTQV9QQURESU5HLCBcCisJCQkJcGFkLCBOVUxMKQorCisjZGVmaW5lIEVWUF9QS0VZX0NUWF9zZXRfcnNhX3Bzc19zYWx0bGVuKGN0eCwgbGVuKSBcCisJRVZQX1BLRVlfQ1RYX2N0cmwoY3R4LCBFVlBfUEtFWV9SU0EsIFwKKwkJCQkoRVZQX1BLRVlfT1BfU0lHTnxFVlBfUEtFWV9PUF9WRVJJRlkpLCBcCisJCQkJRVZQX1BLRVlfQ1RSTF9SU0FfUFNTX1NBTFRMRU4sIFwKKwkJCQlsZW4sIE5VTEwpCisKKyNkZWZpbmUgRVZQX1BLRVlfQ1RYX3NldF9yc2Ffa2V5Z2VuX2JpdHMoY3R4LCBiaXRzKSBcCisJRVZQX1BLRVlfQ1RYX2N0cmwoY3R4LCBFVlBfUEtFWV9SU0EsIEVWUF9QS0VZX09QX0tFWUdFTiwgXAorCQkJCUVWUF9QS0VZX0NUUkxfUlNBX0tFWUdFTl9CSVRTLCBiaXRzLCBOVUxMKQorCisjZGVmaW5lIEVWUF9QS0VZX0NUWF9zZXRfcnNhX2tleWdlbl9wdWJleHAoY3R4LCBwdWJleHApIFwKKwlFVlBfUEtFWV9DVFhfY3RybChjdHgsIEVWUF9QS0VZX1JTQSwgRVZQX1BLRVlfT1BfS0VZR0VOLCBcCisJCQkJRVZQX1BLRVlfQ1RSTF9SU0FfS0VZR0VOX1BVQkVYUCwgMCwgcHViZXhwKQorCisjZGVmaW5lIEVWUF9QS0VZX0NUUkxfUlNBX1BBRERJTkcJKEVWUF9QS0VZX0FMR19DVFJMICsgMSkKKyNkZWZpbmUgRVZQX1BLRVlfQ1RSTF9SU0FfUFNTX1NBTFRMRU4JKEVWUF9QS0VZX0FMR19DVFJMICsgMikKKworI2RlZmluZSBFVlBfUEtFWV9DVFJMX1JTQV9LRVlHRU5fQklUUwkoRVZQX1BLRVlfQUxHX0NUUkwgKyAzKQorI2RlZmluZSBFVlBfUEtFWV9DVFJMX1JTQV9LRVlHRU5fUFVCRVhQCShFVlBfUEtFWV9BTEdfQ1RSTCArIDQpCisKICNkZWZpbmUgUlNBX1BLQ1MxX1BBRERJTkcJMQogI2RlZmluZSBSU0FfU1NMVjIzX1BBRERJTkcJMgogI2RlZmluZSBSU0FfTk9fUEFERElORwkJMwogI2RlZmluZSBSU0FfUEtDUzFfT0FFUF9QQURESU5HCTQKICNkZWZpbmUgUlNBX1g5MzFfUEFERElORwk1CisvKiBFVlBfUEtFWV8gb25seSAqLworI2RlZmluZSBSU0FfUEtDUzFfUFNTX1BBRERJTkcJNgogCiAjZGVmaW5lIFJTQV9QS0NTMV9QQURESU5HX1NJWkUJMTEKIApAQCAtMjYxLDExICsyNjcsNiBAQAogCiAvKiBOZXcgdmVyc2lvbiAqLwogaW50CVJTQV9nZW5lcmF0ZV9rZXlfZXgoUlNBICpyc2EsIGludCBiaXRzLCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYik7Ci1pbnQgUlNBX1g5MzFfZGVyaXZlX2V4KFJTQSAqcnNhLCBCSUdOVU0gKnAxLCBCSUdOVU0gKnAyLCBCSUdOVU0gKnExLCBCSUdOVU0gKnEyLAotCQkJY29uc3QgQklHTlVNICpYcDEsIGNvbnN0IEJJR05VTSAqWHAyLCBjb25zdCBCSUdOVU0gKlhwLAotCQkJY29uc3QgQklHTlVNICpYcTEsIGNvbnN0IEJJR05VTSAqWHEyLCBjb25zdCBCSUdOVU0gKlhxLAotCQkJY29uc3QgQklHTlVNICplLCBCTl9HRU5DQiAqY2IpOwotaW50IFJTQV9YOTMxX2dlbmVyYXRlX2tleV9leChSU0EgKnJzYSwgaW50IGJpdHMsIGNvbnN0IEJJR05VTSAqZSwgQk5fR0VOQ0IgKmNiKTsKIAogaW50CVJTQV9jaGVja19rZXkoY29uc3QgUlNBICopOwogCS8qIG5leHQgNCByZXR1cm4gLTEgb24gZXJyb3IgKi8KQEAgLTI4MywxMSArMjg0LDYgQEAKIAogaW50CVJTQV9mbGFncyhjb25zdCBSU0EgKnIpOwogCi0jaWZkZWYgT1BFTlNTTF9GSVBTCi1SU0EgKkZJUFNfcnNhX25ldyh2b2lkKTsKLXZvaWQgRklQU19yc2FfZnJlZShSU0EgKnIpOwotI2VuZGlmCi0KIHZvaWQgUlNBX3NldF9kZWZhdWx0X21ldGhvZChjb25zdCBSU0FfTUVUSE9EICptZXRoKTsKIGNvbnN0IFJTQV9NRVRIT0QgKlJTQV9nZXRfZGVmYXVsdF9tZXRob2Qodm9pZCk7CiBjb25zdCBSU0FfTUVUSE9EICpSU0FfZ2V0X21ldGhvZChjb25zdCBSU0EgKnJzYSk7CkBAIC0zMzMsNyArMzI5LDcgQEAKIGludCBSU0Ffc2lnbihpbnQgdHlwZSwgY29uc3QgdW5zaWduZWQgY2hhciAqbSwgdW5zaWduZWQgaW50IG1fbGVuZ3RoLAogCXVuc2lnbmVkIGNoYXIgKnNpZ3JldCwgdW5zaWduZWQgaW50ICpzaWdsZW4sIFJTQSAqcnNhKTsKIGludCBSU0FfdmVyaWZ5KGludCB0eXBlLCBjb25zdCB1bnNpZ25lZCBjaGFyICptLCB1bnNpZ25lZCBpbnQgbV9sZW5ndGgsCi0JdW5zaWduZWQgY2hhciAqc2lnYnVmLCB1bnNpZ25lZCBpbnQgc2lnbGVuLCBSU0EgKnJzYSk7CisJY29uc3QgdW5zaWduZWQgY2hhciAqc2lnYnVmLCB1bnNpZ25lZCBpbnQgc2lnbGVuLCBSU0EgKnJzYSk7CiAKIC8qIFRoZSBmb2xsb3dpbmcgMiBmdW5jdGlvbiBzaWduIGFuZCB2ZXJpZnkgYSBBU04xX09DVEVUX1NUUklORwogICogb2JqZWN0IGluc2lkZSBQS0NTIzEgcGFkZGVkIFJTQSBlbmNyeXB0aW9uICovCkBAIC00MDEsOSArMzk3LDE1IEBACiAvKiBFcnJvciBjb2RlcyBmb3IgdGhlIFJTQSBmdW5jdGlvbnMuICovCiAKIC8qIEZ1bmN0aW9uIGNvZGVzLiAqLwotI2RlZmluZSBSU0FfRl9GSVBTX1JTQV9TSUdOCQkJCSAxNDAKLSNkZWZpbmUgUlNBX0ZfRklQU19SU0FfVkVSSUZZCQkJCSAxNDEKKyNkZWZpbmUgUlNBX0ZfQ0hFQ0tfUEFERElOR19NRAkJCQkgMTQwCisjZGVmaW5lIFJTQV9GX0RPX1JTQV9QUklOVAkJCQkgMTQ2CisjZGVmaW5lIFJTQV9GX0lOVF9SU0FfVkVSSUZZCQkJCSAxNDUKICNkZWZpbmUgUlNBX0ZfTUVNT1JZX0xPQ0sJCQkJIDEwMAorI2RlZmluZSBSU0FfRl9PTERfUlNBX1BSSVZfREVDT0RFCQkJIDE0NworI2RlZmluZSBSU0FfRl9QS0VZX1JTQV9DVFJMCQkJCSAxNDMKKyNkZWZpbmUgUlNBX0ZfUEtFWV9SU0FfQ1RSTF9TVFIJCQkJIDE0NAorI2RlZmluZSBSU0FfRl9QS0VZX1JTQV9TSUdOCQkJCSAxNDIKKyNkZWZpbmUgUlNBX0ZfUEtFWV9SU0FfVkVSSUZZUkVDT1ZFUgkJCSAxNDEKICNkZWZpbmUgUlNBX0ZfUlNBX0JVSUxUSU5fS0VZR0VOCQkJIDEyOQogI2RlZmluZSBSU0FfRl9SU0FfQ0hFQ0tfS0VZCQkJCSAxMjMKICNkZWZpbmUgUlNBX0ZfUlNBX0VBWV9QUklWQVRFX0RFQ1JZUFQJCQkgMTAxCkBAIC00MzQsMTEgKzQzNiwxMCBAQAogI2RlZmluZSBSU0FfRl9SU0FfUEFERElOR19DSEVDS19YOTMxCQkJIDEyOAogI2RlZmluZSBSU0FfRl9SU0FfUFJJTlQJCQkJCSAxMTUKICNkZWZpbmUgUlNBX0ZfUlNBX1BSSU5UX0ZQCQkJCSAxMTYKLSNkZWZpbmUgUlNBX0ZfUlNBX1BSSVZBVEVfRU5DUllQVAkJCSAxMzcKLSNkZWZpbmUgUlNBX0ZfUlNBX1BVQkxJQ19ERUNSWVBUCQkJIDEzOAorI2RlZmluZSBSU0FfRl9SU0FfUFJJVl9ERUNPREUJCQkJIDEzNworI2RlZmluZSBSU0FfRl9SU0FfUFJJVl9FTkNPREUJCQkJIDEzOAorI2RlZmluZSBSU0FfRl9SU0FfUFVCX0RFQ09ERQkJCQkgMTM5CiAjZGVmaW5lIFJTQV9GX1JTQV9TRVRVUF9CTElORElORwkJCSAxMzYKLSNkZWZpbmUgUlNBX0ZfUlNBX1NFVF9ERUZBVUxUX01FVEhPRAkJCSAxMzkKLSNkZWZpbmUgUlNBX0ZfUlNBX1NFVF9NRVRIT0QJCQkJIDE0MgogI2RlZmluZSBSU0FfRl9SU0FfU0lHTgkJCQkJIDExNwogI2RlZmluZSBSU0FfRl9SU0FfU0lHTl9BU04xX09DVEVUX1NUUklORwkJIDExOAogI2RlZmluZSBSU0FfRl9SU0FfVkVSSUZZCQkJCSAxMTkKQEAgLTQ2NCwyMCArNDY1LDI1IEBACiAjZGVmaW5lIFJTQV9SX0RNUTFfTk9UX0NPTkdSVUVOVF9UT19ECQkJIDEyNQogI2RlZmluZSBSU0FfUl9EX0VfTk9UX0NPTkdSVUVOVF9UT18xCQkJIDEyMwogI2RlZmluZSBSU0FfUl9GSVJTVF9PQ1RFVF9JTlZBTElECQkJIDEzMworI2RlZmluZSBSU0FfUl9JTExFR0FMX09SX1VOU1VQUE9SVEVEX1BBRERJTkdfTU9ERQkgMTQ0CisjZGVmaW5lIFJTQV9SX0lOVkFMSURfRElHRVNUX0xFTkdUSAkJCSAxNDMKICNkZWZpbmUgUlNBX1JfSU5WQUxJRF9IRUFERVIJCQkJIDEzNworI2RlZmluZSBSU0FfUl9JTlZBTElEX0tFWUJJVFMJCQkJIDE0NQogI2RlZmluZSBSU0FfUl9JTlZBTElEX01FU1NBR0VfTEVOR1RICQkJIDEzMQogI2RlZmluZSBSU0FfUl9JTlZBTElEX1BBRERJTkcJCQkJIDEzOAorI2RlZmluZSBSU0FfUl9JTlZBTElEX1BBRERJTkdfTU9ERQkJCSAxNDEKKyNkZWZpbmUgUlNBX1JfSU5WQUxJRF9QU1NfU0FMVExFTgkJCSAxNDYKICNkZWZpbmUgUlNBX1JfSU5WQUxJRF9UUkFJTEVSCQkJCSAxMzkKKyNkZWZpbmUgUlNBX1JfSU5WQUxJRF9YOTMxX0RJR0VTVAkJCSAxNDIKICNkZWZpbmUgUlNBX1JfSVFNUF9OT1RfSU5WRVJTRV9PRl9RCQkJIDEyNgogI2RlZmluZSBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwJCQkgMTIwCiAjZGVmaW5lIFJTQV9SX0xBU1RfT0NURVRfSU5WQUxJRAkJCSAxMzQKICNkZWZpbmUgUlNBX1JfTU9EVUxVU19UT09fTEFSR0UJCQkJIDEwNQotI2RlZmluZSBSU0FfUl9OT05fRklQU19NRVRIT0QJCQkJIDE0MQogI2RlZmluZSBSU0FfUl9OT19QVUJMSUNfRVhQT05FTlQJCQkgMTQwCiAjZGVmaW5lIFJTQV9SX05VTExfQkVGT1JFX0JMT0NLX01JU1NJTkcJCQkgMTEzCiAjZGVmaW5lIFJTQV9SX05fRE9FU19OT1RfRVFVQUxfUF9RCQkJIDEyNwogI2RlZmluZSBSU0FfUl9PQUVQX0RFQ09ESU5HX0VSUk9SCQkJIDEyMQotI2RlZmluZSBSU0FfUl9PUEVSQVRJT05fTk9UX0FMTE9XRURfSU5fRklQU19NT0RFCSAxNDIKKyNkZWZpbmUgUlNBX1JfT1BFUkFUSU9OX05PVF9TVVBQT1JURURfRk9SX1RISVNfS0VZVFlQRQkgMTQ4CiAjZGVmaW5lIFJTQV9SX1BBRERJTkdfQ0hFQ0tfRkFJTEVECQkJIDExNAogI2RlZmluZSBSU0FfUl9QX05PVF9QUklNRQkJCQkgMTI4CiAjZGVmaW5lIFJTQV9SX1FfTk9UX1BSSU1FCQkJCSAxMjkKQEAgLTQ4OCw2ICs0OTQsNyBAQAogI2RlZmluZSBSU0FfUl9USEVfQVNOMV9PQkpFQ1RfSURFTlRJRklFUl9JU19OT1RfS05PV05fRk9SX1RISVNfTUQgMTE2CiAjZGVmaW5lIFJTQV9SX1VOS05PV05fQUxHT1JJVEhNX1RZUEUJCQkgMTE3CiAjZGVmaW5lIFJTQV9SX1VOS05PV05fUEFERElOR19UWVBFCQkJIDExOAorI2RlZmluZSBSU0FfUl9WQUxVRV9NSVNTSU5HCQkJCSAxNDcKICNkZWZpbmUgUlNBX1JfV1JPTkdfU0lHTkFUVVJFX0xFTkdUSAkJCSAxMTkKIAogI2lmZGVmICBfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3JzYS9yc2FfYW1ldGguYyBiL2NyeXB0by9yc2EvcnNhX2FtZXRoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMzMjA5OAotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9yc2EvcnNhX2FtZXRoLmMKQEAgLTAsMCArMSwzNDkgQEAKKy8qIGNyeXB0by9yc2EvcnNhX2FtZXRoLmMgKi8KKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorICogcHJvamVjdCAyMDA2LgorICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChjKSAyMDA2IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorICoKKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKyAqCisgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKyAqCisgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisgKiAgICBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZworICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQorICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisgKgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgImNyeXB0bGliLmgiCisjaW5jbHVkZSA8b3BlbnNzbC9hc24xdC5oPgorI2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgorI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorI2lmbmRlZiBPUEVOU1NMX05PX0NNUworI2luY2x1ZGUgPG9wZW5zc2wvY21zLmg+CisjZW5kaWYKKyNpbmNsdWRlICJhc24xX2xvY2wuaCIKKworc3RhdGljIGludCByc2FfcHViX2VuY29kZShYNTA5X1BVQktFWSAqcGssIGNvbnN0IEVWUF9QS0VZICpwa2V5KQorCXsKKwl1bnNpZ25lZCBjaGFyICpwZW5jID0gTlVMTDsKKwlpbnQgcGVuY2xlbjsKKwlwZW5jbGVuID0gaTJkX1JTQVB1YmxpY0tleShwa2V5LT5wa2V5LnJzYSwgJnBlbmMpOworCWlmIChwZW5jbGVuIDw9IDApCisJCXJldHVybiAwOworCWlmIChYNTA5X1BVQktFWV9zZXQwX3BhcmFtKHBrLCBPQkpfbmlkMm9iaihFVlBfUEtFWV9SU0EpLAorCQkJCVZfQVNOMV9OVUxMLCBOVUxMLCBwZW5jLCBwZW5jbGVuKSkKKwkJcmV0dXJuIDE7CisKKwlPUEVOU1NMX2ZyZWUocGVuYyk7CisJcmV0dXJuIDA7CisJfQorCitzdGF0aWMgaW50IHJzYV9wdWJfZGVjb2RlKEVWUF9QS0VZICpwa2V5LCBYNTA5X1BVQktFWSAqcHVia2V5KQorCXsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpwOworCWludCBwa2xlbjsKKwlSU0EgKnJzYSA9IE5VTEw7CisJaWYgKCFYNTA5X1BVQktFWV9nZXQwX3BhcmFtKE5VTEwsICZwLCAmcGtsZW4sIE5VTEwsIHB1YmtleSkpCisJCXJldHVybiAwOworCWlmICghKHJzYSA9IGQyaV9SU0FQdWJsaWNLZXkoTlVMTCwgJnAsIHBrbGVuKSkpCisJCXsKKwkJUlNBZXJyKFJTQV9GX1JTQV9QVUJfREVDT0RFLCBFUlJfUl9SU0FfTElCKTsKKwkJcmV0dXJuIDA7CisJCX0KKwlFVlBfUEtFWV9hc3NpZ25fUlNBIChwa2V5LCByc2EpOworCXJldHVybiAxOworCX0KKworc3RhdGljIGludCByc2FfcHViX2NtcChjb25zdCBFVlBfUEtFWSAqYSwgY29uc3QgRVZQX1BLRVkgKmIpCisJeworCWlmIChCTl9jbXAoYi0+cGtleS5yc2EtPm4sYS0+cGtleS5yc2EtPm4pICE9IDAKKwkJfHwgQk5fY21wKGItPnBrZXkucnNhLT5lLGEtPnBrZXkucnNhLT5lKSAhPSAwKQorCQkJcmV0dXJuIDA7CisJcmV0dXJuIDE7CisJfQorCitzdGF0aWMgaW50IG9sZF9yc2FfcHJpdl9kZWNvZGUoRVZQX1BLRVkgKnBrZXksCisJCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKipwZGVyLCBpbnQgZGVybGVuKQorCXsKKwlSU0EgKnJzYTsKKwlpZiAoIShyc2EgPSBkMmlfUlNBUHJpdmF0ZUtleSAoTlVMTCwgcGRlciwgZGVybGVuKSkpCisJCXsKKwkJUlNBZXJyKFJTQV9GX09MRF9SU0FfUFJJVl9ERUNPREUsIEVSUl9SX1JTQV9MSUIpOworCQlyZXR1cm4gMDsKKwkJfQorCUVWUF9QS0VZX2Fzc2lnbl9SU0EocGtleSwgcnNhKTsKKwlyZXR1cm4gMTsKKwl9CisKK3N0YXRpYyBpbnQgb2xkX3JzYV9wcml2X2VuY29kZShjb25zdCBFVlBfUEtFWSAqcGtleSwgdW5zaWduZWQgY2hhciAqKnBkZXIpCisJeworCXJldHVybiBpMmRfUlNBUHJpdmF0ZUtleShwa2V5LT5wa2V5LnJzYSwgcGRlcik7CisJfQorCitzdGF0aWMgaW50IHJzYV9wcml2X2VuY29kZShQS0NTOF9QUklWX0tFWV9JTkZPICpwOCwgY29uc3QgRVZQX1BLRVkgKnBrZXkpCisJeworCXVuc2lnbmVkIGNoYXIgKnJrID0gTlVMTDsKKwlpbnQgcmtsZW47CisJcmtsZW4gPSBpMmRfUlNBUHJpdmF0ZUtleShwa2V5LT5wa2V5LnJzYSwgJnJrKTsKKworCWlmIChya2xlbiA8PSAwKQorCQl7CisJCVJTQWVycihSU0FfRl9SU0FfUFJJVl9FTkNPREUsRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOworCQlyZXR1cm4gMDsKKwkJfQorCisJaWYgKCFQS0NTOF9wa2V5X3NldDAocDgsIE9CSl9uaWQyb2JqKE5JRF9yc2FFbmNyeXB0aW9uKSwgMCwKKwkJCQlWX0FTTjFfTlVMTCwgTlVMTCwgcmssIHJrbGVuKSkKKwkJeworCQlSU0FlcnIoUlNBX0ZfUlNBX1BSSVZfRU5DT0RFLEVSUl9SX01BTExPQ19GQUlMVVJFKTsKKwkJcmV0dXJuIDA7CisJCX0KKworCXJldHVybiAxOworCX0KKworc3RhdGljIGludCByc2FfcHJpdl9kZWNvZGUoRVZQX1BLRVkgKnBrZXksIFBLQ1M4X1BSSVZfS0VZX0lORk8gKnA4KQorCXsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpwOworCWludCBwa2xlbjsKKwlpZiAoIVBLQ1M4X3BrZXlfZ2V0MChOVUxMLCAmcCwgJnBrbGVuLCBOVUxMLCBwOCkpCisJCXJldHVybiAwOworCXJldHVybiBvbGRfcnNhX3ByaXZfZGVjb2RlKHBrZXksICZwLCBwa2xlbik7CisJfQorCitzdGF0aWMgaW50IGludF9yc2Ffc2l6ZShjb25zdCBFVlBfUEtFWSAqcGtleSkKKwl7CisJcmV0dXJuIFJTQV9zaXplKHBrZXktPnBrZXkucnNhKTsKKwl9CisKK3N0YXRpYyBpbnQgcnNhX2JpdHMoY29uc3QgRVZQX1BLRVkgKnBrZXkpCisJeworCXJldHVybiBCTl9udW1fYml0cyhwa2V5LT5wa2V5LnJzYS0+bik7CisJfQorCitzdGF0aWMgdm9pZCBpbnRfcnNhX2ZyZWUoRVZQX1BLRVkgKnBrZXkpCisJeworCVJTQV9mcmVlKHBrZXktPnBrZXkucnNhKTsKKwl9CisKKworc3RhdGljIHZvaWQgdXBkYXRlX2J1Zmxlbihjb25zdCBCSUdOVU0gKmIsIHNpemVfdCAqcGJ1ZmxlbikKKwl7CisJc2l6ZV90IGk7CisJaWYgKCFiKQorCQlyZXR1cm47CisJaWYgKCpwYnVmbGVuIDwgKGkgPSAoc2l6ZV90KUJOX251bV9ieXRlcyhiKSkpCisJCQkqcGJ1ZmxlbiA9IGk7CisJfQorCitzdGF0aWMgaW50IGRvX3JzYV9wcmludChCSU8gKmJwLCBjb25zdCBSU0EgKngsIGludCBvZmYsIGludCBwcml2KQorCXsKKwljaGFyICpzdHI7CisJY29uc3QgY2hhciAqczsKKwl1bnNpZ25lZCBjaGFyICptPU5VTEw7CisJaW50IHJldD0wLCBtb2RfbGVuID0gMDsKKwlzaXplX3QgYnVmX2xlbj0wOworCisJdXBkYXRlX2J1Zmxlbih4LT5uLCAmYnVmX2xlbik7CisJdXBkYXRlX2J1Zmxlbih4LT5lLCAmYnVmX2xlbik7CisKKwlpZiAocHJpdikKKwkJeworCQl1cGRhdGVfYnVmbGVuKHgtPmQsICZidWZfbGVuKTsKKwkJdXBkYXRlX2J1Zmxlbih4LT5wLCAmYnVmX2xlbik7CisJCXVwZGF0ZV9idWZsZW4oeC0+cSwgJmJ1Zl9sZW4pOworCQl1cGRhdGVfYnVmbGVuKHgtPmRtcDEsICZidWZfbGVuKTsKKwkJdXBkYXRlX2J1Zmxlbih4LT5kbXExLCAmYnVmX2xlbik7CisJCXVwZGF0ZV9idWZsZW4oeC0+aXFtcCwgJmJ1Zl9sZW4pOworCQl9CisKKwltPSh1bnNpZ25lZCBjaGFyICopT1BFTlNTTF9tYWxsb2MoYnVmX2xlbisxMCk7CisJaWYgKG0gPT0gTlVMTCkKKwkJeworCQlSU0FlcnIoUlNBX0ZfRE9fUlNBX1BSSU5ULEVSUl9SX01BTExPQ19GQUlMVVJFKTsKKwkJZ290byBlcnI7CisJCX0KKworCWlmICh4LT5uICE9IE5VTEwpCisJCW1vZF9sZW4gPSBCTl9udW1fYml0cyh4LT5uKTsKKworCWlmKCFCSU9faW5kZW50KGJwLG9mZiwxMjgpKQorCQlnb3RvIGVycjsKKworCWlmIChwcml2ICYmIHgtPmQpCisJCXsKKwkJaWYgKEJJT19wcmludGYoYnAsIlByaXZhdGUtS2V5OiAoJWQgYml0KVxuIiwgbW9kX2xlbikKKwkJCTw9IDApIGdvdG8gZXJyOworCQlzdHIgPSAibW9kdWx1czoiOworCQlzID0gInB1YmxpY0V4cG9uZW50OiI7CisJCX0KKwllbHNlCisJCXsKKwkJaWYgKEJJT19wcmludGYoYnAsIlB1YmxpYy1LZXk6ICglZCBiaXQpXG4iLCBtb2RfbGVuKQorCQkJPD0gMCkgZ290byBlcnI7CisJCXN0ciA9ICJNb2R1bHVzOiI7CisJCXM9ICJFeHBvbmVudDoiOworCQl9CisJaWYgKCFBU04xX2JuX3ByaW50KGJwLHN0cix4LT5uLG0sb2ZmKSkgZ290byBlcnI7CisJaWYgKCFBU04xX2JuX3ByaW50KGJwLHMseC0+ZSxtLG9mZikpCisJCWdvdG8gZXJyOworCWlmIChwcml2KQorCQl7CisJCWlmICghQVNOMV9ibl9wcmludChicCwicHJpdmF0ZUV4cG9uZW50OiIseC0+ZCxtLG9mZikpCisJCQlnb3RvIGVycjsKKwkJaWYgKCFBU04xX2JuX3ByaW50KGJwLCJwcmltZTE6Iix4LT5wLG0sb2ZmKSkKKwkJCWdvdG8gZXJyOworCQlpZiAoIUFTTjFfYm5fcHJpbnQoYnAsInByaW1lMjoiLHgtPnEsbSxvZmYpKQorCQkJZ290byBlcnI7CisJCWlmICghQVNOMV9ibl9wcmludChicCwiZXhwb25lbnQxOiIseC0+ZG1wMSxtLG9mZikpCisJCQlnb3RvIGVycjsKKwkJaWYgKCFBU04xX2JuX3ByaW50KGJwLCJleHBvbmVudDI6Iix4LT5kbXExLG0sb2ZmKSkKKwkJCWdvdG8gZXJyOworCQlpZiAoIUFTTjFfYm5fcHJpbnQoYnAsImNvZWZmaWNpZW50OiIseC0+aXFtcCxtLG9mZikpCisJCQlnb3RvIGVycjsKKwkJfQorCXJldD0xOworZXJyOgorCWlmIChtICE9IE5VTEwpIE9QRU5TU0xfZnJlZShtKTsKKwlyZXR1cm4ocmV0KTsKKwl9CisKK3N0YXRpYyBpbnQgcnNhX3B1Yl9wcmludChCSU8gKmJwLCBjb25zdCBFVlBfUEtFWSAqcGtleSwgaW50IGluZGVudCwKKwkJCQkJCQlBU04xX1BDVFggKmN0eCkKKwl7CisJcmV0dXJuIGRvX3JzYV9wcmludChicCwgcGtleS0+cGtleS5yc2EsIGluZGVudCwgMCk7CisJfQorCisKK3N0YXRpYyBpbnQgcnNhX3ByaXZfcHJpbnQoQklPICpicCwgY29uc3QgRVZQX1BLRVkgKnBrZXksIGludCBpbmRlbnQsCisJCQkJCQkJQVNOMV9QQ1RYICpjdHgpCisJeworCXJldHVybiBkb19yc2FfcHJpbnQoYnAsIHBrZXktPnBrZXkucnNhLCBpbmRlbnQsIDEpOworCX0KKworCitzdGF0aWMgaW50IHJzYV9wa2V5X2N0cmwoRVZQX1BLRVkgKnBrZXksIGludCBvcCwgbG9uZyBhcmcxLCB2b2lkICphcmcyKQorCXsKKwlYNTA5X0FMR09SICphbGcgPSBOVUxMOworCXN3aXRjaCAob3ApCisJCXsKKworCQljYXNlIEFTTjFfUEtFWV9DVFJMX1BLQ1M3X1NJR046CisJCWlmIChhcmcxID09IDApCisJCQlQS0NTN19TSUdORVJfSU5GT19nZXQwX2FsZ3MoYXJnMiwgTlVMTCwgTlVMTCwgJmFsZyk7CisJCWJyZWFrOworCisJCWNhc2UgQVNOMV9QS0VZX0NUUkxfUEtDUzdfRU5DUllQVDoKKwkJaWYgKGFyZzEgPT0gMCkKKwkJCVBLQ1M3X1JFQ0lQX0lORk9fZ2V0MF9hbGcoYXJnMiwgJmFsZyk7CisJCWJyZWFrOworI2lmbmRlZiBPUEVOU1NMX05PX0NNUworCQljYXNlIEFTTjFfUEtFWV9DVFJMX0NNU19TSUdOOgorCQlpZiAoYXJnMSA9PSAwKQorCQkJQ01TX1NpZ25lckluZm9fZ2V0MF9hbGdzKGFyZzIsIE5VTEwsIE5VTEwsIE5VTEwsICZhbGcpOworCQlicmVhazsKKworCQljYXNlIEFTTjFfUEtFWV9DVFJMX0NNU19FTlZFTE9QRToKKwkJaWYgKGFyZzEgPT0gMCkKKwkJCUNNU19SZWNpcGllbnRJbmZvX2t0cmlfZ2V0MF9hbGdzKGFyZzIsIE5VTEwsIE5VTEwsICZhbGcpOworCQlicmVhazsKKyNlbmRpZgorCisJCWNhc2UgQVNOMV9QS0VZX0NUUkxfREVGQVVMVF9NRF9OSUQ6CisJCSooaW50ICopYXJnMiA9IE5JRF9zaGExOworCQlyZXR1cm4gMTsKKworCQlkZWZhdWx0OgorCQlyZXR1cm4gLTI7CisKKwkJfQorCisJaWYgKGFsZykKKwkJWDUwOV9BTEdPUl9zZXQwKGFsZywgT0JKX25pZDJvYmooTklEX3JzYUVuY3J5cHRpb24pLAorCQkJCQkJCVZfQVNOMV9OVUxMLCAwKTsKKworCXJldHVybiAxOworCisJfQorCisKK2NvbnN0IEVWUF9QS0VZX0FTTjFfTUVUSE9EIHJzYV9hc24xX21ldGhzW10gPSAKKwl7CisJCXsKKwkJRVZQX1BLRVlfUlNBLAorCQlFVlBfUEtFWV9SU0EsCisJCUFTTjFfUEtFWV9TSUdQQVJBTV9OVUxMLAorCisJCSJSU0EiLAorCQkiT3BlblNTTCBSU0EgbWV0aG9kIiwKKworCQlyc2FfcHViX2RlY29kZSwKKwkJcnNhX3B1Yl9lbmNvZGUsCisJCXJzYV9wdWJfY21wLAorCQlyc2FfcHViX3ByaW50LAorCisJCXJzYV9wcml2X2RlY29kZSwKKwkJcnNhX3ByaXZfZW5jb2RlLAorCQlyc2FfcHJpdl9wcmludCwKKworCQlpbnRfcnNhX3NpemUsCisJCXJzYV9iaXRzLAorCisJCTAsMCwwLDAsMCwwLAorCisJCWludF9yc2FfZnJlZSwKKwkJcnNhX3BrZXlfY3RybCwKKwkJb2xkX3JzYV9wcml2X2RlY29kZSwKKwkJb2xkX3JzYV9wcml2X2VuY29kZQorCQl9LAorCisJCXsKKwkJRVZQX1BLRVlfUlNBMiwKKwkJRVZQX1BLRVlfUlNBLAorCQlBU04xX1BLRVlfQUxJQVMKKwkJfQorCX07CmRpZmYgLS1naXQgYS9jcnlwdG8vcnNhL3JzYV9hc24xLmMgYi9jcnlwdG8vcnNhL3JzYV9hc24xLmMKaW5kZXggNmU4YTgwMy4uNGVmY2E4YyAxMDA2NDQKLS0tIGEvY3J5cHRvL3JzYS9yc2FfYXNuMS5jCisrKyBiL2NyeXB0by9yc2EvcnNhX2FzbjEuYwpAQCAtMyw3ICszLDcgQEAKICAqIHByb2plY3QgMjAwMC4KICAqLwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoYykgMjAwMCBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwMC0yMDA1IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02MiwxOSArNjIsOSBAQAogI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9hc24xdC5oPgogCi1zdGF0aWMgQVNOMV9NRVRIT0QgbWV0aG9kPXsKLSAgICAgICAgKEkyRF9PRih2b2lkKSkgICAgIGkyZF9SU0FQcml2YXRlS2V5LAotICAgICAgICAoRDJJX09GKHZvaWQpKSAgICAgZDJpX1JTQVByaXZhdGVLZXksCi0gICAgICAgICh2b2lkICooKikodm9pZCkpICBSU0FfbmV3LAotICAgICAgICAodm9pZCAoKikodm9pZCAqKSkgUlNBX2ZyZWV9OwotCi1BU04xX01FVEhPRCAqUlNBUHJpdmF0ZUtleV9hc24xX21ldGgodm9pZCkKLQl7Ci0JcmV0dXJuKCZtZXRob2QpOwotCX0KLQogLyogT3ZlcnJpZGUgdGhlIGRlZmF1bHQgZnJlZSBhbmQgbmV3IG1ldGhvZHMgKi8KLXN0YXRpYyBpbnQgcnNhX2NiKGludCBvcGVyYXRpb24sIEFTTjFfVkFMVUUgKipwdmFsLCBjb25zdCBBU04xX0lURU0gKml0KQorc3RhdGljIGludCByc2FfY2IoaW50IG9wZXJhdGlvbiwgQVNOMV9WQUxVRSAqKnB2YWwsIGNvbnN0IEFTTjFfSVRFTSAqaXQsCisJCQkJCQkJCXZvaWQgKmV4YXJnKQogewogCWlmKG9wZXJhdGlvbiA9PSBBU04xX09QX05FV19QUkUpIHsKIAkJKnB2YWwgPSAoQVNOMV9WQUxVRSAqKVJTQV9uZXcoKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9yc2EvcnNhX2VheS5jIGIvY3J5cHRvL3JzYS9yc2FfZWF5LmMKaW5kZXggMGFjNjQxOC4uYzVlYWVlYSAxMDA2NDQKLS0tIGEvY3J5cHRvL3JzYS9yc2FfZWF5LmMKKysrIGIvY3J5cHRvL3JzYS9yc2FfZWF5LmMKQEAgLTExNSw3ICsxMTUsNyBAQAogI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CiAKLSNpZiAhZGVmaW5lZChSU0FfTlVMTCkgJiYgIWRlZmluZWQoT1BFTlNTTF9GSVBTKQorI2lmbmRlZiBSU0FfTlVMTAogCiBzdGF0aWMgaW50IFJTQV9lYXlfcHVibGljX2VuY3J5cHQoaW50IGZsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZyb20sCiAJCXVuc2lnbmVkIGNoYXIgKnRvLCBSU0EgKnJzYSxpbnQgcGFkZGluZyk7CkBAIC0yNTYsNiArMjU2LDcgQEAKIHsKIAlCTl9CTElORElORyAqcmV0OwogCWludCBnb3Rfd3JpdGVfbG9jayA9IDA7CisJQ1JZUFRPX1RIUkVBRElEIGN1cjsKIAogCUNSWVBUT19yX2xvY2soQ1JZUFRPX0xPQ0tfUlNBKTsKIApAQCAtMjczLDcgKzI3NCw4IEBACiAJaWYgKHJldCA9PSBOVUxMKQogCQlnb3RvIGVycjsKIAotCWlmIChCTl9CTElORElOR19nZXRfdGhyZWFkX2lkKHJldCkgPT0gQ1JZUFRPX3RocmVhZF9pZCgpKQorCUNSWVBUT19USFJFQURJRF9jdXJyZW50KCZjdXIpOworCWlmICghQ1JZUFRPX1RIUkVBRElEX2NtcCgmY3VyLCBCTl9CTElORElOR190aHJlYWRfaWQocmV0KSkpCiAJCXsKIAkJLyogcnNhLT5ibGluZGluZyBpcyBvdXJzISAqLwogCmRpZmYgLS1naXQgYS9jcnlwdG8vcnNhL3JzYV9lbmcuYyBiL2NyeXB0by9yc2EvcnNhX2VuZy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjIxZGRiLi4wMDAwMDAwCi0tLSBhL2NyeXB0by9yc2EvcnNhX2VuZy5jCisrKyAvZGV2L251bGwKQEAgLTEsMzU3ICswLDAgQEAKLS8qIGNyeXB0by9yc2EvcnNhX2xpYi5jICovCi0vKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCi0gKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCi0gKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCi0gKiAKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcwotICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAotICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCi0gKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCi0gKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSAqIAotICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KLSAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KLSAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KLSAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCi0gKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKLSAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKLSAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCi0gKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKLSAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgotICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCi0gKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgotICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICogCi0gKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgotICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCi0gKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCi0gKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQotICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0jaW5jbHVkZSAiY3J5cHRsaWIuaCIKLSNpbmNsdWRlIDxvcGVuc3NsL2xoYXNoLmg+Ci0jaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0jaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0jaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCi0jaW5jbHVkZSA8b3BlbnNzbC9lbmdpbmUuaD4KLSNlbmRpZgotCi1jb25zdCBjaGFyIFJTQV92ZXJzaW9uW109IlJTQSIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOwotCi1zdGF0aWMgY29uc3QgUlNBX01FVEhPRCAqZGVmYXVsdF9SU0FfbWV0aD1OVUxMOwotCi1SU0EgKlJTQV9uZXcodm9pZCkKLQl7Ci0JUlNBICpyPVJTQV9uZXdfbWV0aG9kKE5VTEwpOwotCi0JcmV0dXJuIHI7Ci0JfQotCi12b2lkIFJTQV9zZXRfZGVmYXVsdF9tZXRob2QoY29uc3QgUlNBX01FVEhPRCAqbWV0aCkKLQl7Ci0jaWZkZWYgT1BFTlNTTF9GSVBTCi0JaWYgKEZJUFNfbW9kZSgpICYmICEobWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkpCi0JCXsKLQkJUlNBZXJyKFJTQV9GX1JTQV9TRVRfREVGQVVMVF9NRVRIT0QsIFJTQV9SX05PTl9GSVBTX01FVEhPRCk7Ci0JCXJldHVybjsKLQkJfQotI2VuZGlmCi0JZGVmYXVsdF9SU0FfbWV0aCA9IG1ldGg7Ci0JfQotCi1jb25zdCBSU0FfTUVUSE9EICpSU0FfZ2V0X2RlZmF1bHRfbWV0aG9kKHZvaWQpCi0JewotCWlmIChkZWZhdWx0X1JTQV9tZXRoID09IE5VTEwpCi0JCXsKLSNpZmRlZiBSU0FfTlVMTAotCQlkZWZhdWx0X1JTQV9tZXRoPVJTQV9udWxsX21ldGhvZCgpOwotI2Vsc2UKLSNpZiAwIC8qIHdhczogI2lmZGVmIFJTQXJlZiAqLwotCQlkZWZhdWx0X1JTQV9tZXRoPVJTQV9QS0NTMV9SU0FyZWYoKTsKLSNlbHNlCi0JCWRlZmF1bHRfUlNBX21ldGg9UlNBX1BLQ1MxX1NTTGVheSgpOwotI2VuZGlmCi0jZW5kaWYKLQkJfQotCi0JcmV0dXJuIGRlZmF1bHRfUlNBX21ldGg7Ci0JfQotCi1jb25zdCBSU0FfTUVUSE9EICpSU0FfZ2V0X21ldGhvZChjb25zdCBSU0EgKnJzYSkKLQl7Ci0JcmV0dXJuIHJzYS0+bWV0aDsKLQl9Ci0KLWludCBSU0Ffc2V0X21ldGhvZChSU0EgKnJzYSwgY29uc3QgUlNBX01FVEhPRCAqbWV0aCkKLQl7Ci0JLyogTkI6IFRoZSBjYWxsZXIgaXMgc3BlY2lmaWNhbGx5IHNldHRpbmcgYSBtZXRob2QsIHNvIGl0J3Mgbm90IHVwIHRvIHVzCi0JICogdG8gZGVhbCB3aXRoIHdoaWNoIEVOR0lORSBpdCBjb21lcyBmcm9tLiAqLwotCWNvbnN0IFJTQV9NRVRIT0QgKm10bXA7Ci0jaWZkZWYgT1BFTlNTTF9GSVBTCi0JaWYgKEZJUFNfbW9kZSgpICYmICEobWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkpCi0JCXsKLQkJUlNBZXJyKFJTQV9GX1JTQV9TRVRfTUVUSE9ELCBSU0FfUl9OT05fRklQU19NRVRIT0QpOwotCQlyZXR1cm4gMDsKLQkJfQotI2VuZGlmCi0JbXRtcCA9IHJzYS0+bWV0aDsKLQlpZiAobXRtcC0+ZmluaXNoKSBtdG1wLT5maW5pc2gocnNhKTsKLSNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKLQlpZiAocnNhLT5lbmdpbmUpCi0JCXsKLQkJRU5HSU5FX2ZpbmlzaChyc2EtPmVuZ2luZSk7Ci0JCXJzYS0+ZW5naW5lID0gTlVMTDsKLQkJfQotI2VuZGlmCi0JcnNhLT5tZXRoID0gbWV0aDsKLQlpZiAobWV0aC0+aW5pdCkgbWV0aC0+aW5pdChyc2EpOwotCXJldHVybiAxOwotCX0KLQotUlNBICpSU0FfbmV3X21ldGhvZChFTkdJTkUgKmVuZ2luZSkKLQl7Ci0JUlNBICpyZXQ7Ci0KLQlyZXQ9KFJTQSAqKU9QRU5TU0xfbWFsbG9jKHNpemVvZihSU0EpKTsKLQlpZiAocmV0ID09IE5VTEwpCi0JCXsKLQkJUlNBZXJyKFJTQV9GX1JTQV9ORVdfTUVUSE9ELEVSUl9SX01BTExPQ19GQUlMVVJFKTsKLQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQotCXJldC0+bWV0aCA9IFJTQV9nZXRfZGVmYXVsdF9tZXRob2QoKTsKLSNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKLQlpZiAoZW5naW5lKQotCQl7Ci0JCWlmICghRU5HSU5FX2luaXQoZW5naW5lKSkKLQkJCXsKLQkJCVJTQWVycihSU0FfRl9SU0FfTkVXX01FVEhPRCwgRVJSX1JfRU5HSU5FX0xJQik7Ci0JCQlPUEVOU1NMX2ZyZWUocmV0KTsKLQkJCXJldHVybiBOVUxMOwotCQkJfQotCQlyZXQtPmVuZ2luZSA9IGVuZ2luZTsKLQkJfQotCWVsc2UKLQkJcmV0LT5lbmdpbmUgPSBFTkdJTkVfZ2V0X2RlZmF1bHRfUlNBKCk7Ci0JaWYocmV0LT5lbmdpbmUpCi0JCXsKLQkJcmV0LT5tZXRoID0gRU5HSU5FX2dldF9SU0EocmV0LT5lbmdpbmUpOwotCQlpZighcmV0LT5tZXRoKQotCQkJewotCQkJUlNBZXJyKFJTQV9GX1JTQV9ORVdfTUVUSE9ELAotCQkJCUVSUl9SX0VOR0lORV9MSUIpOwotCQkJRU5HSU5FX2ZpbmlzaChyZXQtPmVuZ2luZSk7Ci0JCQlPUEVOU1NMX2ZyZWUocmV0KTsKLQkJCXJldHVybiBOVUxMOwotCQkJfQotCQl9Ci0jZW5kaWYKLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLQlpZiAoRklQU19tb2RlKCkgJiYgIShyZXQtPm1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpKQotCQl7Ci0JCVJTQWVycihSU0FfRl9SU0FfTkVXX01FVEhPRCwgUlNBX1JfTk9OX0ZJUFNfTUVUSE9EKTsKLSNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKLQkJaWYgKHJldC0+ZW5naW5lKQotCQkJRU5HSU5FX2ZpbmlzaChyZXQtPmVuZ2luZSk7Ci0jZW5kaWYKLQkJT1BFTlNTTF9mcmVlKHJldCk7Ci0JCXJldHVybiBOVUxMOwotCQl9Ci0jZW5kaWYKLQotCXJldC0+cGFkPTA7Ci0JcmV0LT52ZXJzaW9uPTA7Ci0JcmV0LT5uPU5VTEw7Ci0JcmV0LT5lPU5VTEw7Ci0JcmV0LT5kPU5VTEw7Ci0JcmV0LT5wPU5VTEw7Ci0JcmV0LT5xPU5VTEw7Ci0JcmV0LT5kbXAxPU5VTEw7Ci0JcmV0LT5kbXExPU5VTEw7Ci0JcmV0LT5pcW1wPU5VTEw7Ci0JcmV0LT5yZWZlcmVuY2VzPTE7Ci0JcmV0LT5fbWV0aG9kX21vZF9uPU5VTEw7Ci0JcmV0LT5fbWV0aG9kX21vZF9wPU5VTEw7Ci0JcmV0LT5fbWV0aG9kX21vZF9xPU5VTEw7Ci0JcmV0LT5ibGluZGluZz1OVUxMOwotCXJldC0+bXRfYmxpbmRpbmc9TlVMTDsKLQlyZXQtPmJpZ251bV9kYXRhPU5VTEw7Ci0JcmV0LT5mbGFncz1yZXQtPm1ldGgtPmZsYWdzICYgflJTQV9GTEFHX05PTl9GSVBTX0FMTE9XOwotCWlmICghQ1JZUFRPX25ld19leF9kYXRhKENSWVBUT19FWF9JTkRFWF9SU0EsIHJldCwgJnJldC0+ZXhfZGF0YSkpCi0JCXsKLSNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKLQlpZiAocmV0LT5lbmdpbmUpCi0JCUVOR0lORV9maW5pc2gocmV0LT5lbmdpbmUpOwotI2VuZGlmCi0JCU9QRU5TU0xfZnJlZShyZXQpOwotCQlyZXR1cm4oTlVMTCk7Ci0JCX0KLQotCWlmICgocmV0LT5tZXRoLT5pbml0ICE9IE5VTEwpICYmICFyZXQtPm1ldGgtPmluaXQocmV0KSkKLQkJewotI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQotCQlpZiAocmV0LT5lbmdpbmUpCi0JCQlFTkdJTkVfZmluaXNoKHJldC0+ZW5naW5lKTsKLSNlbmRpZgotCQlDUllQVE9fZnJlZV9leF9kYXRhKENSWVBUT19FWF9JTkRFWF9SU0EsIHJldCwgJnJldC0+ZXhfZGF0YSk7Ci0JCU9QRU5TU0xfZnJlZShyZXQpOwotCQlyZXQ9TlVMTDsKLQkJfQotCXJldHVybihyZXQpOwotCX0KLQotdm9pZCBSU0FfZnJlZShSU0EgKnIpCi0JewotCWludCBpOwotCi0JaWYgKHIgPT0gTlVMTCkgcmV0dXJuOwotCi0JaT1DUllQVE9fYWRkKCZyLT5yZWZlcmVuY2VzLC0xLENSWVBUT19MT0NLX1JTQSk7Ci0jaWZkZWYgUkVGX1BSSU5UCi0JUkVGX1BSSU5UKCJSU0EiLHIpOwotI2VuZGlmCi0JaWYgKGkgPiAwKSByZXR1cm47Ci0jaWZkZWYgUkVGX0NIRUNLCi0JaWYgKGkgPCAwKQotCQl7Ci0JCWZwcmludGYoc3RkZXJyLCJSU0FfZnJlZSwgYmFkIHJlZmVyZW5jZSBjb3VudFxuIik7Ci0JCWFib3J0KCk7Ci0JCX0KLSNlbmRpZgotCi0JaWYgKHItPm1ldGgtPmZpbmlzaCkKLQkJci0+bWV0aC0+ZmluaXNoKHIpOwotI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQotCWlmIChyLT5lbmdpbmUpCi0JCUVOR0lORV9maW5pc2goci0+ZW5naW5lKTsKLSNlbmRpZgotCi0JQ1JZUFRPX2ZyZWVfZXhfZGF0YShDUllQVE9fRVhfSU5ERVhfUlNBLCByLCAmci0+ZXhfZGF0YSk7Ci0KLQlpZiAoci0+biAhPSBOVUxMKSBCTl9jbGVhcl9mcmVlKHItPm4pOwotCWlmIChyLT5lICE9IE5VTEwpIEJOX2NsZWFyX2ZyZWUoci0+ZSk7Ci0JaWYgKHItPmQgIT0gTlVMTCkgQk5fY2xlYXJfZnJlZShyLT5kKTsKLQlpZiAoci0+cCAhPSBOVUxMKSBCTl9jbGVhcl9mcmVlKHItPnApOwotCWlmIChyLT5xICE9IE5VTEwpIEJOX2NsZWFyX2ZyZWUoci0+cSk7Ci0JaWYgKHItPmRtcDEgIT0gTlVMTCkgQk5fY2xlYXJfZnJlZShyLT5kbXAxKTsKLQlpZiAoci0+ZG1xMSAhPSBOVUxMKSBCTl9jbGVhcl9mcmVlKHItPmRtcTEpOwotCWlmIChyLT5pcW1wICE9IE5VTEwpIEJOX2NsZWFyX2ZyZWUoci0+aXFtcCk7Ci0JaWYgKHItPmJsaW5kaW5nICE9IE5VTEwpIEJOX0JMSU5ESU5HX2ZyZWUoci0+YmxpbmRpbmcpOwotCWlmIChyLT5tdF9ibGluZGluZyAhPSBOVUxMKSBCTl9CTElORElOR19mcmVlKHItPm10X2JsaW5kaW5nKTsKLQlpZiAoci0+YmlnbnVtX2RhdGEgIT0gTlVMTCkgT1BFTlNTTF9mcmVlX2xvY2tlZChyLT5iaWdudW1fZGF0YSk7Ci0JT1BFTlNTTF9mcmVlKHIpOwotCX0KLQotaW50IFJTQV91cF9yZWYoUlNBICpyKQotCXsKLQlpbnQgaSA9IENSWVBUT19hZGQoJnItPnJlZmVyZW5jZXMsIDEsIENSWVBUT19MT0NLX1JTQSk7Ci0jaWZkZWYgUkVGX1BSSU5UCi0JUkVGX1BSSU5UKCJSU0EiLHIpOwotI2VuZGlmCi0jaWZkZWYgUkVGX0NIRUNLCi0JaWYgKGkgPCAyKQotCQl7Ci0JCWZwcmludGYoc3RkZXJyLCAiUlNBX3VwX3JlZiwgYmFkIHJlZmVyZW5jZSBjb3VudFxuIik7Ci0JCWFib3J0KCk7Ci0JCX0KLSNlbmRpZgotCXJldHVybiAoKGkgPiAxKSA/IDEgOiAwKTsKLQl9Ci0KLWludCBSU0FfZ2V0X2V4X25ld19pbmRleChsb25nIGFyZ2wsIHZvaWQgKmFyZ3AsIENSWVBUT19FWF9uZXcgKm5ld19mdW5jLAotCSAgICAgQ1JZUFRPX0VYX2R1cCAqZHVwX2Z1bmMsIENSWVBUT19FWF9mcmVlICpmcmVlX2Z1bmMpCi0gICAgICAgIHsKLQlyZXR1cm4gQ1JZUFRPX2dldF9leF9uZXdfaW5kZXgoQ1JZUFRPX0VYX0lOREVYX1JTQSwgYXJnbCwgYXJncCwKLQkJCQluZXdfZnVuYywgZHVwX2Z1bmMsIGZyZWVfZnVuYyk7Ci0gICAgICAgIH0KLQotaW50IFJTQV9zZXRfZXhfZGF0YShSU0EgKnIsIGludCBpZHgsIHZvaWQgKmFyZykKLQl7Ci0JcmV0dXJuKENSWVBUT19zZXRfZXhfZGF0YSgmci0+ZXhfZGF0YSxpZHgsYXJnKSk7Ci0JfQotCi12b2lkICpSU0FfZ2V0X2V4X2RhdGEoY29uc3QgUlNBICpyLCBpbnQgaWR4KQotCXsKLQlyZXR1cm4oQ1JZUFRPX2dldF9leF9kYXRhKCZyLT5leF9kYXRhLGlkeCkpOwotCX0KLQotaW50IFJTQV9mbGFncyhjb25zdCBSU0EgKnIpCi0JewotCXJldHVybigociA9PSBOVUxMKT8wOnItPm1ldGgtPmZsYWdzKTsKLQl9Ci0KLWludCBSU0FfbWVtb3J5X2xvY2soUlNBICpyKQotCXsKLQlpbnQgaSxqLGssb2ZmOwotCWNoYXIgKnA7Ci0JQklHTlVNICpibiwqKnRbNl0sKmI7Ci0JQk5fVUxPTkcgKnVsOwotCi0JaWYgKHItPmQgPT0gTlVMTCkgcmV0dXJuKDEpOwotCXRbMF09ICZyLT5kOwotCXRbMV09ICZyLT5wOwotCXRbMl09ICZyLT5xOwotCXRbM109ICZyLT5kbXAxOwotCXRbNF09ICZyLT5kbXExOwotCXRbNV09ICZyLT5pcW1wOwotCWs9c2l6ZW9mKEJJR05VTSkqNjsKLQlvZmY9ay9zaXplb2YoQk5fVUxPTkcpKzE7Ci0Jaj0xOwotCWZvciAoaT0wOyBpPDY7IGkrKykKLQkJais9ICgqdFtpXSktPnRvcDsKLQlpZiAoKHA9T1BFTlNTTF9tYWxsb2NfbG9ja2VkKChvZmYraikqc2l6ZW9mKEJOX1VMT05HKSkpID09IE5VTEwpCi0JCXsKLQkJUlNBZXJyKFJTQV9GX1JTQV9NRU1PUllfTE9DSyxFUlJfUl9NQUxMT0NfRkFJTFVSRSk7Ci0JCXJldHVybigwKTsKLQkJfQotCWJuPShCSUdOVU0gKilwOwotCXVsPShCTl9VTE9ORyAqKSYocFtvZmZdKTsKLQlmb3IgKGk9MDsgaTw2OyBpKyspCi0JCXsKLQkJYj0gKih0W2ldKTsKLQkJKih0W2ldKT0gJihibltpXSk7Ci0JCW1lbWNweSgoY2hhciAqKSYoYm5baV0pLChjaGFyICopYixzaXplb2YoQklHTlVNKSk7Ci0JCWJuW2ldLmZsYWdzPUJOX0ZMR19TVEFUSUNfREFUQTsKLQkJYm5baV0uZD11bDsKLQkJbWVtY3B5KChjaGFyICopdWwsYi0+ZCxzaXplb2YoQk5fVUxPTkcpKmItPnRvcCk7Ci0JCXVsKz1iLT50b3A7Ci0JCUJOX2NsZWFyX2ZyZWUoYik7Ci0JCX0KLQkKLQkvKiBJIHNob3VsZCBmaXggdGhpcyBzbyBpdCBjYW4gc3RpbGwgYmUgZG9uZSAqLwotCXItPmZsYWdzJj0gfihSU0FfRkxBR19DQUNIRV9QUklWQVRFfFJTQV9GTEFHX0NBQ0hFX1BVQkxJQyk7Ci0KLQlyLT5iaWdudW1fZGF0YT1wOwotCXJldHVybigxKTsKLQl9CmRpZmYgLS1naXQgYS9jcnlwdG8vcnNhL3JzYV9lcnIuYyBiL2NyeXB0by9yc2EvcnNhX2Vyci5jCmluZGV4IDUwMWY1ZWEuLmNmOWYxMTAgMTAwNjQ0Ci0tLSBhL2NyeXB0by9yc2EvcnNhX2Vyci5jCisrKyBiL2NyeXB0by9yc2EvcnNhX2Vyci5jCkBAIC0xLDYgKzEsNiBAQAogLyogY3J5cHRvL3JzYS9yc2FfZXJyLmMgKi8KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA4IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MCw5ICs3MCwxNSBAQAogCiBzdGF0aWMgRVJSX1NUUklOR19EQVRBIFJTQV9zdHJfZnVuY3RzW109CiAJewote0VSUl9GVU5DKFJTQV9GX0ZJUFNfUlNBX1NJR04pLAkiRklQU19SU0FfU0lHTiJ9LAote0VSUl9GVU5DKFJTQV9GX0ZJUFNfUlNBX1ZFUklGWSksCSJGSVBTX1JTQV9WRVJJRlkifSwKK3tFUlJfRlVOQyhSU0FfRl9DSEVDS19QQURESU5HX01EKSwJIkNIRUNLX1BBRERJTkdfTUQifSwKK3tFUlJfRlVOQyhSU0FfRl9ET19SU0FfUFJJTlQpLAkiRE9fUlNBX1BSSU5UIn0sCit7RVJSX0ZVTkMoUlNBX0ZfSU5UX1JTQV9WRVJJRlkpLAkiSU5UX1JTQV9WRVJJRlkifSwKIHtFUlJfRlVOQyhSU0FfRl9NRU1PUllfTE9DSyksCSJNRU1PUllfTE9DSyJ9LAore0VSUl9GVU5DKFJTQV9GX09MRF9SU0FfUFJJVl9ERUNPREUpLAkiT0xEX1JTQV9QUklWX0RFQ09ERSJ9LAore0VSUl9GVU5DKFJTQV9GX1BLRVlfUlNBX0NUUkwpLAkiUEtFWV9SU0FfQ1RSTCJ9LAore0VSUl9GVU5DKFJTQV9GX1BLRVlfUlNBX0NUUkxfU1RSKSwJIlBLRVlfUlNBX0NUUkxfU1RSIn0sCit7RVJSX0ZVTkMoUlNBX0ZfUEtFWV9SU0FfU0lHTiksCSJQS0VZX1JTQV9TSUdOIn0sCit7RVJSX0ZVTkMoUlNBX0ZfUEtFWV9SU0FfVkVSSUZZUkVDT1ZFUiksCSJQS0VZX1JTQV9WRVJJRllSRUNPVkVSIn0sCiB7RVJSX0ZVTkMoUlNBX0ZfUlNBX0JVSUxUSU5fS0VZR0VOKSwJIlJTQV9CVUlMVElOX0tFWUdFTiJ9LAoge0VSUl9GVU5DKFJTQV9GX1JTQV9DSEVDS19LRVkpLAkiUlNBX2NoZWNrX2tleSJ9LAoge0VSUl9GVU5DKFJTQV9GX1JTQV9FQVlfUFJJVkFURV9ERUNSWVBUKSwJIlJTQV9FQVlfUFJJVkFURV9ERUNSWVBUIn0sCkBAIC0xMDMsMTEgKzEwOSwxMCBAQAoge0VSUl9GVU5DKFJTQV9GX1JTQV9QQURESU5HX0NIRUNLX1g5MzEpLAkiUlNBX3BhZGRpbmdfY2hlY2tfWDkzMSJ9LAoge0VSUl9GVU5DKFJTQV9GX1JTQV9QUklOVCksCSJSU0FfcHJpbnQifSwKIHtFUlJfRlVOQyhSU0FfRl9SU0FfUFJJTlRfRlApLAkiUlNBX3ByaW50X2ZwIn0sCi17RVJSX0ZVTkMoUlNBX0ZfUlNBX1BSSVZBVEVfRU5DUllQVCksCSJSU0FfcHJpdmF0ZV9lbmNyeXB0In0sCi17RVJSX0ZVTkMoUlNBX0ZfUlNBX1BVQkxJQ19ERUNSWVBUKSwJIlJTQV9wdWJsaWNfZGVjcnlwdCJ9LAore0VSUl9GVU5DKFJTQV9GX1JTQV9QUklWX0RFQ09ERSksCSJSU0FfUFJJVl9ERUNPREUifSwKK3tFUlJfRlVOQyhSU0FfRl9SU0FfUFJJVl9FTkNPREUpLAkiUlNBX1BSSVZfRU5DT0RFIn0sCit7RVJSX0ZVTkMoUlNBX0ZfUlNBX1BVQl9ERUNPREUpLAkiUlNBX1BVQl9ERUNPREUifSwKIHtFUlJfRlVOQyhSU0FfRl9SU0FfU0VUVVBfQkxJTkRJTkcpLAkiUlNBX3NldHVwX2JsaW5kaW5nIn0sCi17RVJSX0ZVTkMoUlNBX0ZfUlNBX1NFVF9ERUZBVUxUX01FVEhPRCksCSJSU0Ffc2V0X2RlZmF1bHRfbWV0aG9kIn0sCi17RVJSX0ZVTkMoUlNBX0ZfUlNBX1NFVF9NRVRIT0QpLAkiUlNBX3NldF9tZXRob2QifSwKIHtFUlJfRlVOQyhSU0FfRl9SU0FfU0lHTiksCSJSU0Ffc2lnbiJ9LAoge0VSUl9GVU5DKFJTQV9GX1JTQV9TSUdOX0FTTjFfT0NURVRfU1RSSU5HKSwJIlJTQV9zaWduX0FTTjFfT0NURVRfU1RSSU5HIn0sCiB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1ZFUklGWSksCSJSU0FfdmVyaWZ5In0sCkBAIC0xMzYsMjAgKzE0MSwyNSBAQAoge0VSUl9SRUFTT04oUlNBX1JfRE1RMV9OT1RfQ09OR1JVRU5UX1RPX0QpLCJkbXExIG5vdCBjb25ncnVlbnQgdG8gZCJ9LAoge0VSUl9SRUFTT04oUlNBX1JfRF9FX05PVF9DT05HUlVFTlRfVE9fMSksImQgZSBub3QgY29uZ3J1ZW50IHRvIDEifSwKIHtFUlJfUkVBU09OKFJTQV9SX0ZJUlNUX09DVEVUX0lOVkFMSUQpICAgLCJmaXJzdCBvY3RldCBpbnZhbGlkIn0sCit7RVJSX1JFQVNPTihSU0FfUl9JTExFR0FMX09SX1VOU1VQUE9SVEVEX1BBRERJTkdfTU9ERSksImlsbGVnYWwgb3IgdW5zdXBwb3J0ZWQgcGFkZGluZyBtb2RlIn0sCit7RVJSX1JFQVNPTihSU0FfUl9JTlZBTElEX0RJR0VTVF9MRU5HVEgpICwiaW52YWxpZCBkaWdlc3QgbGVuZ3RoIn0sCiB7RVJSX1JFQVNPTihSU0FfUl9JTlZBTElEX0hFQURFUikgICAgICAgICwiaW52YWxpZCBoZWFkZXIifSwKK3tFUlJfUkVBU09OKFJTQV9SX0lOVkFMSURfS0VZQklUUykgICAgICAgLCJpbnZhbGlkIGtleWJpdHMifSwKIHtFUlJfUkVBU09OKFJTQV9SX0lOVkFMSURfTUVTU0FHRV9MRU5HVEgpLCJpbnZhbGlkIG1lc3NhZ2UgbGVuZ3RoIn0sCiB7RVJSX1JFQVNPTihSU0FfUl9JTlZBTElEX1BBRERJTkcpICAgICAgICwiaW52YWxpZCBwYWRkaW5nIn0sCit7RVJSX1JFQVNPTihSU0FfUl9JTlZBTElEX1BBRERJTkdfTU9ERSkgICwiaW52YWxpZCBwYWRkaW5nIG1vZGUifSwKK3tFUlJfUkVBU09OKFJTQV9SX0lOVkFMSURfUFNTX1NBTFRMRU4pICAgLCJpbnZhbGlkIHBzcyBzYWx0bGVuIn0sCiB7RVJSX1JFQVNPTihSU0FfUl9JTlZBTElEX1RSQUlMRVIpICAgICAgICwiaW52YWxpZCB0cmFpbGVyIn0sCit7RVJSX1JFQVNPTihSU0FfUl9JTlZBTElEX1g5MzFfRElHRVNUKSAgICwiaW52YWxpZCB4OTMxIGRpZ2VzdCJ9LAoge0VSUl9SRUFTT04oUlNBX1JfSVFNUF9OT1RfSU5WRVJTRV9PRl9RKSAsImlxbXAgbm90IGludmVyc2Ugb2YgcSJ9LAoge0VSUl9SRUFTT04oUlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKSAgICAsImtleSBzaXplIHRvbyBzbWFsbCJ9LAoge0VSUl9SRUFTT04oUlNBX1JfTEFTVF9PQ1RFVF9JTlZBTElEKSAgICAsImxhc3Qgb2N0ZXQgaW52YWxpZCJ9LAoge0VSUl9SRUFTT04oUlNBX1JfTU9EVUxVU19UT09fTEFSR0UpICAgICAsIm1vZHVsdXMgdG9vIGxhcmdlIn0sCi17RVJSX1JFQVNPTihSU0FfUl9OT05fRklQU19NRVRIT0QpICAgICAgICwibm9uIGZpcHMgbWV0aG9kIn0sCiB7RVJSX1JFQVNPTihSU0FfUl9OT19QVUJMSUNfRVhQT05FTlQpICAgICwibm8gcHVibGljIGV4cG9uZW50In0sCiB7RVJSX1JFQVNPTihSU0FfUl9OVUxMX0JFRk9SRV9CTE9DS19NSVNTSU5HKSwibnVsbCBiZWZvcmUgYmxvY2sgbWlzc2luZyJ9LAoge0VSUl9SRUFTT04oUlNBX1JfTl9ET0VTX05PVF9FUVVBTF9QX1EpICAsIm4gZG9lcyBub3QgZXF1YWwgcCBxIn0sCiB7RVJSX1JFQVNPTihSU0FfUl9PQUVQX0RFQ09ESU5HX0VSUk9SKSAgICwib2FlcCBkZWNvZGluZyBlcnJvciJ9LAote0VSUl9SRUFTT04oUlNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERSksIm9wZXJhdGlvbiBub3QgYWxsb3dlZCBpbiBmaXBzIG1vZGUifSwKK3tFUlJfUkVBU09OKFJTQV9SX09QRVJBVElPTl9OT1RfU1VQUE9SVEVEX0ZPUl9USElTX0tFWVRZUEUpLCJvcGVyYXRpb24gbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBrZXl0eXBlIn0sCiB7RVJSX1JFQVNPTihSU0FfUl9QQURESU5HX0NIRUNLX0ZBSUxFRCkgICwicGFkZGluZyBjaGVjayBmYWlsZWQifSwKIHtFUlJfUkVBU09OKFJTQV9SX1BfTk9UX1BSSU1FKSAgICAgICAgICAgLCJwIG5vdCBwcmltZSJ9LAoge0VSUl9SRUFTT04oUlNBX1JfUV9OT1RfUFJJTUUpICAgICAgICAgICAsInEgbm90IHByaW1lIn0sCkBAIC0xNjAsNiArMTcwLDcgQEAKIHtFUlJfUkVBU09OKFJTQV9SX1RIRV9BU04xX09CSkVDVF9JREVOVElGSUVSX0lTX05PVF9LTk9XTl9GT1JfVEhJU19NRCksInRoZSBhc24xIG9iamVjdCBpZGVudGlmaWVyIGlzIG5vdCBrbm93biBmb3IgdGhpcyBtZCJ9LAoge0VSUl9SRUFTT04oUlNBX1JfVU5LTk9XTl9BTEdPUklUSE1fVFlQRSksInVua25vd24gYWxnb3JpdGhtIHR5cGUifSwKIHtFUlJfUkVBU09OKFJTQV9SX1VOS05PV05fUEFERElOR19UWVBFKSAgLCJ1bmtub3duIHBhZGRpbmcgdHlwZSJ9LAore0VSUl9SRUFTT04oUlNBX1JfVkFMVUVfTUlTU0lORykgICAgICAgICAsInZhbHVlIG1pc3NpbmcifSwKIHtFUlJfUkVBU09OKFJTQV9SX1dST05HX1NJR05BVFVSRV9MRU5HVEgpLCJ3cm9uZyBzaWduYXR1cmUgbGVuZ3RoIn0sCiB7MCxOVUxMfQogCX07CmRpZmYgLS1naXQgYS9jcnlwdG8vcnNhL3JzYV9nZW4uYyBiL2NyeXB0by9yc2EvcnNhX2dlbi5jCmluZGV4IDQxMjc4ZjguLjc2N2Y3YWIgMTAwNjQ0Ci0tLSBhL2NyeXB0by9yc2EvcnNhX2dlbi5jCisrKyBiL2NyeXB0by9yc2EvcnNhX2dlbi5jCkBAIC02OCw4ICs2OCw2IEBACiAjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgogI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CiAKLSNpZm5kZWYgT1BFTlNTTF9GSVBTCi0KIHN0YXRpYyBpbnQgcnNhX2J1aWx0aW5fa2V5Z2VuKFJTQSAqcnNhLCBpbnQgYml0cywgQklHTlVNICplX3ZhbHVlLCBCTl9HRU5DQiAqY2IpOwogCiAvKiBOQjogdGhpcyB3cmFwcGVyIHdvdWxkIG5vcm1hbGx5IGJlIHBsYWNlZCBpbiByc2FfbGliLmMgYW5kIHRoZSBzdGF0aWMKQEAgLTIxOSw0ICsyMTcsMyBAQAogCXJldHVybiBvazsKIAl9CiAKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvY3J5cHRvL3JzYS9yc2FfbGliLmMgYi9jcnlwdG8vcnNhL3JzYV9saWIuYwppbmRleCA1NzE0ODQxLi5kZTQ1MDg4IDEwMDY0NAotLS0gYS9jcnlwdG8vcnNhL3JzYV9saWIuYworKysgYi9jcnlwdG8vcnNhL3JzYV9saWIuYwpAQCAtNjcsNiArNjcsMjI0IEBACiAjaW5jbHVkZSA8b3BlbnNzbC9lbmdpbmUuaD4KICNlbmRpZgogCitjb25zdCBjaGFyIFJTQV92ZXJzaW9uW109IlJTQSIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOworCitzdGF0aWMgY29uc3QgUlNBX01FVEhPRCAqZGVmYXVsdF9SU0FfbWV0aD1OVUxMOworCitSU0EgKlJTQV9uZXcodm9pZCkKKwl7CisJUlNBICpyPVJTQV9uZXdfbWV0aG9kKE5VTEwpOworCisJcmV0dXJuIHI7CisJfQorCit2b2lkIFJTQV9zZXRfZGVmYXVsdF9tZXRob2QoY29uc3QgUlNBX01FVEhPRCAqbWV0aCkKKwl7CisJZGVmYXVsdF9SU0FfbWV0aCA9IG1ldGg7CisJfQorCitjb25zdCBSU0FfTUVUSE9EICpSU0FfZ2V0X2RlZmF1bHRfbWV0aG9kKHZvaWQpCisJeworCWlmIChkZWZhdWx0X1JTQV9tZXRoID09IE5VTEwpCisJCXsKKyNpZmRlZiBSU0FfTlVMTAorCQlkZWZhdWx0X1JTQV9tZXRoPVJTQV9udWxsX21ldGhvZCgpOworI2Vsc2UKKyNpZiAwIC8qIHdhczogI2lmZGVmIFJTQXJlZiAqLworCQlkZWZhdWx0X1JTQV9tZXRoPVJTQV9QS0NTMV9SU0FyZWYoKTsKKyNlbHNlCisJCWRlZmF1bHRfUlNBX21ldGg9UlNBX1BLQ1MxX1NTTGVheSgpOworI2VuZGlmCisjZW5kaWYKKwkJfQorCisJcmV0dXJuIGRlZmF1bHRfUlNBX21ldGg7CisJfQorCitjb25zdCBSU0FfTUVUSE9EICpSU0FfZ2V0X21ldGhvZChjb25zdCBSU0EgKnJzYSkKKwl7CisJcmV0dXJuIHJzYS0+bWV0aDsKKwl9CisKK2ludCBSU0Ffc2V0X21ldGhvZChSU0EgKnJzYSwgY29uc3QgUlNBX01FVEhPRCAqbWV0aCkKKwl7CisJLyogTkI6IFRoZSBjYWxsZXIgaXMgc3BlY2lmaWNhbGx5IHNldHRpbmcgYSBtZXRob2QsIHNvIGl0J3Mgbm90IHVwIHRvIHVzCisJICogdG8gZGVhbCB3aXRoIHdoaWNoIEVOR0lORSBpdCBjb21lcyBmcm9tLiAqLworCWNvbnN0IFJTQV9NRVRIT0QgKm10bXA7CisJbXRtcCA9IHJzYS0+bWV0aDsKKwlpZiAobXRtcC0+ZmluaXNoKSBtdG1wLT5maW5pc2gocnNhKTsKKyNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKKwlpZiAocnNhLT5lbmdpbmUpCisJCXsKKwkJRU5HSU5FX2ZpbmlzaChyc2EtPmVuZ2luZSk7CisJCXJzYS0+ZW5naW5lID0gTlVMTDsKKwkJfQorI2VuZGlmCisJcnNhLT5tZXRoID0gbWV0aDsKKwlpZiAobWV0aC0+aW5pdCkgbWV0aC0+aW5pdChyc2EpOworCXJldHVybiAxOworCX0KKworUlNBICpSU0FfbmV3X21ldGhvZChFTkdJTkUgKmVuZ2luZSkKKwl7CisJUlNBICpyZXQ7CisKKwlyZXQ9KFJTQSAqKU9QRU5TU0xfbWFsbG9jKHNpemVvZihSU0EpKTsKKwlpZiAocmV0ID09IE5VTEwpCisJCXsKKwkJUlNBZXJyKFJTQV9GX1JTQV9ORVdfTUVUSE9ELEVSUl9SX01BTExPQ19GQUlMVVJFKTsKKwkJcmV0dXJuIE5VTEw7CisJCX0KKworCXJldC0+bWV0aCA9IFJTQV9nZXRfZGVmYXVsdF9tZXRob2QoKTsKKyNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKKwlpZiAoZW5naW5lKQorCQl7CisJCWlmICghRU5HSU5FX2luaXQoZW5naW5lKSkKKwkJCXsKKwkJCVJTQWVycihSU0FfRl9SU0FfTkVXX01FVEhPRCwgRVJSX1JfRU5HSU5FX0xJQik7CisJCQlPUEVOU1NMX2ZyZWUocmV0KTsKKwkJCXJldHVybiBOVUxMOworCQkJfQorCQlyZXQtPmVuZ2luZSA9IGVuZ2luZTsKKwkJfQorCWVsc2UKKwkJcmV0LT5lbmdpbmUgPSBFTkdJTkVfZ2V0X2RlZmF1bHRfUlNBKCk7CisJaWYocmV0LT5lbmdpbmUpCisJCXsKKwkJcmV0LT5tZXRoID0gRU5HSU5FX2dldF9SU0EocmV0LT5lbmdpbmUpOworCQlpZighcmV0LT5tZXRoKQorCQkJeworCQkJUlNBZXJyKFJTQV9GX1JTQV9ORVdfTUVUSE9ELAorCQkJCUVSUl9SX0VOR0lORV9MSUIpOworCQkJRU5HSU5FX2ZpbmlzaChyZXQtPmVuZ2luZSk7CisJCQlPUEVOU1NMX2ZyZWUocmV0KTsKKwkJCXJldHVybiBOVUxMOworCQkJfQorCQl9CisjZW5kaWYKKworCXJldC0+cGFkPTA7CisJcmV0LT52ZXJzaW9uPTA7CisJcmV0LT5uPU5VTEw7CisJcmV0LT5lPU5VTEw7CisJcmV0LT5kPU5VTEw7CisJcmV0LT5wPU5VTEw7CisJcmV0LT5xPU5VTEw7CisJcmV0LT5kbXAxPU5VTEw7CisJcmV0LT5kbXExPU5VTEw7CisJcmV0LT5pcW1wPU5VTEw7CisJcmV0LT5yZWZlcmVuY2VzPTE7CisJcmV0LT5fbWV0aG9kX21vZF9uPU5VTEw7CisJcmV0LT5fbWV0aG9kX21vZF9wPU5VTEw7CisJcmV0LT5fbWV0aG9kX21vZF9xPU5VTEw7CisJcmV0LT5ibGluZGluZz1OVUxMOworCXJldC0+bXRfYmxpbmRpbmc9TlVMTDsKKwlyZXQtPmJpZ251bV9kYXRhPU5VTEw7CisJcmV0LT5mbGFncz1yZXQtPm1ldGgtPmZsYWdzOworCWlmICghQ1JZUFRPX25ld19leF9kYXRhKENSWVBUT19FWF9JTkRFWF9SU0EsIHJldCwgJnJldC0+ZXhfZGF0YSkpCisJCXsKKyNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKKwlpZiAocmV0LT5lbmdpbmUpCisJCUVOR0lORV9maW5pc2gocmV0LT5lbmdpbmUpOworI2VuZGlmCisJCU9QRU5TU0xfZnJlZShyZXQpOworCQlyZXR1cm4oTlVMTCk7CisJCX0KKworCWlmICgocmV0LT5tZXRoLT5pbml0ICE9IE5VTEwpICYmICFyZXQtPm1ldGgtPmluaXQocmV0KSkKKwkJeworI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQorCQlpZiAocmV0LT5lbmdpbmUpCisJCQlFTkdJTkVfZmluaXNoKHJldC0+ZW5naW5lKTsKKyNlbmRpZgorCQlDUllQVE9fZnJlZV9leF9kYXRhKENSWVBUT19FWF9JTkRFWF9SU0EsIHJldCwgJnJldC0+ZXhfZGF0YSk7CisJCU9QRU5TU0xfZnJlZShyZXQpOworCQlyZXQ9TlVMTDsKKwkJfQorCXJldHVybihyZXQpOworCX0KKwordm9pZCBSU0FfZnJlZShSU0EgKnIpCisJeworCWludCBpOworCisJaWYgKHIgPT0gTlVMTCkgcmV0dXJuOworCisJaT1DUllQVE9fYWRkKCZyLT5yZWZlcmVuY2VzLC0xLENSWVBUT19MT0NLX1JTQSk7CisjaWZkZWYgUkVGX1BSSU5UCisJUkVGX1BSSU5UKCJSU0EiLHIpOworI2VuZGlmCisJaWYgKGkgPiAwKSByZXR1cm47CisjaWZkZWYgUkVGX0NIRUNLCisJaWYgKGkgPCAwKQorCQl7CisJCWZwcmludGYoc3RkZXJyLCJSU0FfZnJlZSwgYmFkIHJlZmVyZW5jZSBjb3VudFxuIik7CisJCWFib3J0KCk7CisJCX0KKyNlbmRpZgorCisJaWYgKHItPm1ldGgtPmZpbmlzaCkKKwkJci0+bWV0aC0+ZmluaXNoKHIpOworI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQorCWlmIChyLT5lbmdpbmUpCisJCUVOR0lORV9maW5pc2goci0+ZW5naW5lKTsKKyNlbmRpZgorCisJQ1JZUFRPX2ZyZWVfZXhfZGF0YShDUllQVE9fRVhfSU5ERVhfUlNBLCByLCAmci0+ZXhfZGF0YSk7CisKKwlpZiAoci0+biAhPSBOVUxMKSBCTl9jbGVhcl9mcmVlKHItPm4pOworCWlmIChyLT5lICE9IE5VTEwpIEJOX2NsZWFyX2ZyZWUoci0+ZSk7CisJaWYgKHItPmQgIT0gTlVMTCkgQk5fY2xlYXJfZnJlZShyLT5kKTsKKwlpZiAoci0+cCAhPSBOVUxMKSBCTl9jbGVhcl9mcmVlKHItPnApOworCWlmIChyLT5xICE9IE5VTEwpIEJOX2NsZWFyX2ZyZWUoci0+cSk7CisJaWYgKHItPmRtcDEgIT0gTlVMTCkgQk5fY2xlYXJfZnJlZShyLT5kbXAxKTsKKwlpZiAoci0+ZG1xMSAhPSBOVUxMKSBCTl9jbGVhcl9mcmVlKHItPmRtcTEpOworCWlmIChyLT5pcW1wICE9IE5VTEwpIEJOX2NsZWFyX2ZyZWUoci0+aXFtcCk7CisJaWYgKHItPmJsaW5kaW5nICE9IE5VTEwpIEJOX0JMSU5ESU5HX2ZyZWUoci0+YmxpbmRpbmcpOworCWlmIChyLT5tdF9ibGluZGluZyAhPSBOVUxMKSBCTl9CTElORElOR19mcmVlKHItPm10X2JsaW5kaW5nKTsKKwlpZiAoci0+YmlnbnVtX2RhdGEgIT0gTlVMTCkgT1BFTlNTTF9mcmVlX2xvY2tlZChyLT5iaWdudW1fZGF0YSk7CisJT1BFTlNTTF9mcmVlKHIpOworCX0KKworaW50IFJTQV91cF9yZWYoUlNBICpyKQorCXsKKwlpbnQgaSA9IENSWVBUT19hZGQoJnItPnJlZmVyZW5jZXMsIDEsIENSWVBUT19MT0NLX1JTQSk7CisjaWZkZWYgUkVGX1BSSU5UCisJUkVGX1BSSU5UKCJSU0EiLHIpOworI2VuZGlmCisjaWZkZWYgUkVGX0NIRUNLCisJaWYgKGkgPCAyKQorCQl7CisJCWZwcmludGYoc3RkZXJyLCAiUlNBX3VwX3JlZiwgYmFkIHJlZmVyZW5jZSBjb3VudFxuIik7CisJCWFib3J0KCk7CisJCX0KKyNlbmRpZgorCXJldHVybiAoKGkgPiAxKSA/IDEgOiAwKTsKKwl9CisKK2ludCBSU0FfZ2V0X2V4X25ld19pbmRleChsb25nIGFyZ2wsIHZvaWQgKmFyZ3AsIENSWVBUT19FWF9uZXcgKm5ld19mdW5jLAorCSAgICAgQ1JZUFRPX0VYX2R1cCAqZHVwX2Z1bmMsIENSWVBUT19FWF9mcmVlICpmcmVlX2Z1bmMpCisgICAgICAgIHsKKwlyZXR1cm4gQ1JZUFRPX2dldF9leF9uZXdfaW5kZXgoQ1JZUFRPX0VYX0lOREVYX1JTQSwgYXJnbCwgYXJncCwKKwkJCQluZXdfZnVuYywgZHVwX2Z1bmMsIGZyZWVfZnVuYyk7CisgICAgICAgIH0KKworaW50IFJTQV9zZXRfZXhfZGF0YShSU0EgKnIsIGludCBpZHgsIHZvaWQgKmFyZykKKwl7CisJcmV0dXJuKENSWVBUT19zZXRfZXhfZGF0YSgmci0+ZXhfZGF0YSxpZHgsYXJnKSk7CisJfQorCit2b2lkICpSU0FfZ2V0X2V4X2RhdGEoY29uc3QgUlNBICpyLCBpbnQgaWR4KQorCXsKKwlyZXR1cm4oQ1JZUFRPX2dldF9leF9kYXRhKCZyLT5leF9kYXRhLGlkeCkpOworCX0KKworaW50IFJTQV9zaXplKGNvbnN0IFJTQSAqcikKKwl7CisJcmV0dXJuKEJOX251bV9ieXRlcyhyLT5uKSk7CisJfQorCiBpbnQgUlNBX3B1YmxpY19lbmNyeXB0KGludCBmbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpmcm9tLCB1bnNpZ25lZCBjaGFyICp0bywKIAkgICAgIFJTQSAqcnNhLCBpbnQgcGFkZGluZykKIAl7CkBAIC03NiwxMyArMjk0LDYgQEAKIGludCBSU0FfcHJpdmF0ZV9lbmNyeXB0KGludCBmbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpmcm9tLCB1bnNpZ25lZCBjaGFyICp0bywKIAkgICAgIFJTQSAqcnNhLCBpbnQgcGFkZGluZykKIAl7Ci0jaWZkZWYgT1BFTlNTTF9GSVBTCi0JaWYoRklQU19tb2RlKCkgJiYgIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQotCQl7Ci0JCVJTQWVycihSU0FfRl9SU0FfUFJJVkFURV9FTkNSWVBULCBSU0FfUl9PUEVSQVRJT05fTk9UX0FMTE9XRURfSU5fRklQU19NT0RFKTsKLQkJcmV0dXJuIDA7Ci0JCX0KLSNlbmRpZgogCXJldHVybihyc2EtPm1ldGgtPnJzYV9wcml2X2VuYyhmbGVuLCBmcm9tLCB0bywgcnNhLCBwYWRkaW5nKSk7CiAJfQogCkBAIC05NSwxOSArMzA2LDEyIEBACiBpbnQgUlNBX3B1YmxpY19kZWNyeXB0KGludCBmbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpmcm9tLCB1bnNpZ25lZCBjaGFyICp0bywKIAkgICAgIFJTQSAqcnNhLCBpbnQgcGFkZGluZykKIAl7Ci0jaWZkZWYgT1BFTlNTTF9GSVBTCi0JaWYoRklQU19tb2RlKCkgJiYgIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQotCQl7Ci0JCVJTQWVycihSU0FfRl9SU0FfUFVCTElDX0RFQ1JZUFQsIFJTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBTX01PREUpOwotCQlyZXR1cm4gMDsKLQkJfQotI2VuZGlmCiAJcmV0dXJuKHJzYS0+bWV0aC0+cnNhX3B1Yl9kZWMoZmxlbiwgZnJvbSwgdG8sIHJzYSwgcGFkZGluZykpOwogCX0KIAotaW50IFJTQV9zaXplKGNvbnN0IFJTQSAqcikKK2ludCBSU0FfZmxhZ3MoY29uc3QgUlNBICpyKQogCXsKLQlyZXR1cm4oQk5fbnVtX2J5dGVzKHItPm4pKTsKKwlyZXR1cm4oKHIgPT0gTlVMTCk/MDpyLT5tZXRoLT5mbGFncyk7CiAJfQogCiB2b2lkIFJTQV9ibGluZGluZ19vZmYoUlNBICpyc2EpCkBAIC0yMjIsNyArNDI2LDcgQEAKIAkJUlNBZXJyKFJTQV9GX1JTQV9TRVRVUF9CTElORElORywgRVJSX1JfQk5fTElCKTsKIAkJZ290byBlcnI7CiAJCX0KLQlCTl9CTElORElOR19zZXRfdGhyZWFkX2lkKHJldCwgQ1JZUFRPX3RocmVhZF9pZCgpKTsKKwlDUllQVE9fVEhSRUFESURfY3VycmVudChCTl9CTElORElOR190aHJlYWRfaWQocmV0KSk7CiBlcnI6CiAJQk5fQ1RYX2VuZChjdHgpOwogCWlmIChpbl9jdHggPT0gTlVMTCkKQEAgLTIzMiwzICs0MzYsNDggQEAKIAogCXJldHVybiByZXQ7CiB9CisKK2ludCBSU0FfbWVtb3J5X2xvY2soUlNBICpyKQorCXsKKwlpbnQgaSxqLGssb2ZmOworCWNoYXIgKnA7CisJQklHTlVNICpibiwqKnRbNl0sKmI7CisJQk5fVUxPTkcgKnVsOworCisJaWYgKHItPmQgPT0gTlVMTCkgcmV0dXJuKDEpOworCXRbMF09ICZyLT5kOworCXRbMV09ICZyLT5wOworCXRbMl09ICZyLT5xOworCXRbM109ICZyLT5kbXAxOworCXRbNF09ICZyLT5kbXExOworCXRbNV09ICZyLT5pcW1wOworCWs9c2l6ZW9mKEJJR05VTSkqNjsKKwlvZmY9ay9zaXplb2YoQk5fVUxPTkcpKzE7CisJaj0xOworCWZvciAoaT0wOyBpPDY7IGkrKykKKwkJais9ICgqdFtpXSktPnRvcDsKKwlpZiAoKHA9T1BFTlNTTF9tYWxsb2NfbG9ja2VkKChvZmYraikqc2l6ZW9mKEJOX1VMT05HKSkpID09IE5VTEwpCisJCXsKKwkJUlNBZXJyKFJTQV9GX1JTQV9NRU1PUllfTE9DSyxFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CisJCXJldHVybigwKTsKKwkJfQorCWJuPShCSUdOVU0gKilwOworCXVsPShCTl9VTE9ORyAqKSYocFtvZmZdKTsKKwlmb3IgKGk9MDsgaTw2OyBpKyspCisJCXsKKwkJYj0gKih0W2ldKTsKKwkJKih0W2ldKT0gJihibltpXSk7CisJCW1lbWNweSgoY2hhciAqKSYoYm5baV0pLChjaGFyICopYixzaXplb2YoQklHTlVNKSk7CisJCWJuW2ldLmZsYWdzPUJOX0ZMR19TVEFUSUNfREFUQTsKKwkJYm5baV0uZD11bDsKKwkJbWVtY3B5KChjaGFyICopdWwsYi0+ZCxzaXplb2YoQk5fVUxPTkcpKmItPnRvcCk7CisJCXVsKz1iLT50b3A7CisJCUJOX2NsZWFyX2ZyZWUoYik7CisJCX0KKwkKKwkvKiBJIHNob3VsZCBmaXggdGhpcyBzbyBpdCBjYW4gc3RpbGwgYmUgZG9uZSAqLworCXItPmZsYWdzJj0gfihSU0FfRkxBR19DQUNIRV9QUklWQVRFfFJTQV9GTEFHX0NBQ0hFX1BVQkxJQyk7CisKKwlyLT5iaWdudW1fZGF0YT1wOworCXJldHVybigxKTsKKwl9CmRpZmYgLS1naXQgYS9jcnlwdG8vcnNhL3JzYV9sb2NsLmggYi9jcnlwdG8vcnNhL3JzYV9sb2NsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVkMmQ1NgotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9yc2EvcnNhX2xvY2wuaApAQCAtMCwwICsxLDQgQEAKK2V4dGVybiBpbnQgaW50X3JzYV92ZXJpZnkoaW50IGR0eXBlLCBjb25zdCB1bnNpZ25lZCBjaGFyICptLCB1bnNpZ25lZCBpbnQgbV9sZW4sCisJCXVuc2lnbmVkIGNoYXIgKnJtLCBzaXplX3QgKnBybV9sZW4sCisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZ2J1Ziwgc2l6ZV90IHNpZ2xlbiwKKwkJUlNBICpyc2EpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3JzYS9yc2Ffb2FlcC5jIGIvY3J5cHRvL3JzYS9yc2Ffb2FlcC5jCmluZGV4IDU0NmFlNWYuLmUyMzhkMTAgMTAwNjQ0Ci0tLSBhL2NyeXB0by9yc2EvcnNhX29hZXAuYworKysgYi9jcnlwdG8vcnNhL3JzYV9vYWVwLmMKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KICNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgogCi1pbnQgTUdGMSh1bnNpZ25lZCBjaGFyICptYXNrLCBsb25nIGxlbiwKK3N0YXRpYyBpbnQgTUdGMSh1bnNpZ25lZCBjaGFyICptYXNrLCBsb25nIGxlbiwKIAljb25zdCB1bnNpZ25lZCBjaGFyICpzZWVkLCBsb25nIHNlZWRsZW4pOwogCiBpbnQgUlNBX3BhZGRpbmdfYWRkX1BLQ1MxX09BRVAodW5zaWduZWQgY2hhciAqdG8sIGludCB0bGVuLApAQCAtNzYsMTEgKzc2LDEzIEBACiAJCXJldHVybiAwOwogCQl9CiAKLQlNR0YxKGRibWFzaywgZW1sZW4gLSBTSEFfRElHRVNUX0xFTkdUSCwgc2VlZCwgU0hBX0RJR0VTVF9MRU5HVEgpOworCWlmIChNR0YxKGRibWFzaywgZW1sZW4gLSBTSEFfRElHRVNUX0xFTkdUSCwgc2VlZCwgU0hBX0RJR0VTVF9MRU5HVEgpIDwgMCkKKwkJcmV0dXJuIDA7CiAJZm9yIChpID0gMDsgaSA8IGVtbGVuIC0gU0hBX0RJR0VTVF9MRU5HVEg7IGkrKykKIAkJZGJbaV0gXj0gZGJtYXNrW2ldOwogCi0JTUdGMShzZWVkbWFzaywgU0hBX0RJR0VTVF9MRU5HVEgsIGRiLCBlbWxlbiAtIFNIQV9ESUdFU1RfTEVOR1RIKTsKKwlpZiAoTUdGMShzZWVkbWFzaywgU0hBX0RJR0VTVF9MRU5HVEgsIGRiLCBlbWxlbiAtIFNIQV9ESUdFU1RfTEVOR1RIKSA8IDApCisJCXJldHVybiAwOwogCWZvciAoaSA9IDA7IGkgPCBTSEFfRElHRVNUX0xFTkdUSDsgaSsrKQogCQlzZWVkW2ldIF49IHNlZWRtYXNrW2ldOwogCkBAIC0xMzMsMTEgKzEzNSwxMyBAQAogCiAJbWFza2VkZGIgPSBwYWRkZWRfZnJvbSArIFNIQV9ESUdFU1RfTEVOR1RIOwogCi0JTUdGMShzZWVkLCBTSEFfRElHRVNUX0xFTkdUSCwgbWFza2VkZGIsIGRibGVuKTsKKwlpZiAoTUdGMShzZWVkLCBTSEFfRElHRVNUX0xFTkdUSCwgbWFza2VkZGIsIGRibGVuKSkKKwkJcmV0dXJuIC0xOwogCWZvciAoaSA9IDA7IGkgPCBTSEFfRElHRVNUX0xFTkdUSDsgaSsrKQogCQlzZWVkW2ldIF49IHBhZGRlZF9mcm9tW2ldOwogICAKLQlNR0YxKGRiLCBkYmxlbiwgc2VlZCwgU0hBX0RJR0VTVF9MRU5HVEgpOworCWlmIChNR0YxKGRiLCBkYmxlbiwgc2VlZCwgU0hBX0RJR0VTVF9MRU5HVEgpKQorCQlyZXR1cm4gLTE7CiAJZm9yIChpID0gMDsgaSA8IGRibGVuOyBpKyspCiAJCWRiW2ldIF49IG1hc2tlZGRiW2ldOwogCkBAIC0xODcsNyArMTkxLDkgQEAKIAlpbnQgbWRsZW47CiAKIAlFVlBfTURfQ1RYX2luaXQoJmMpOwotCW1kbGVuID0gTV9FVlBfTURfc2l6ZShkZ3N0KTsKKwltZGxlbiA9IEVWUF9NRF9zaXplKGRnc3QpOworCWlmIChtZGxlbiA8IDApCisJCXJldHVybiAtMTsKIAlmb3IgKGkgPSAwOyBvdXRsZW4gPCBsZW47IGkrKykKIAkJewogCQljbnRbMF0gPSAodW5zaWduZWQgY2hhcikoKGkgPj4gMjQpICYgMjU1KTsKQEAgLTIxMyw3ICsyMTksOCBAQAogCXJldHVybiAwOwogCX0KIAotaW50IE1HRjEodW5zaWduZWQgY2hhciAqbWFzaywgbG9uZyBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlZWQsIGxvbmcgc2VlZGxlbikKK3N0YXRpYyBpbnQgTUdGMSh1bnNpZ25lZCBjaGFyICptYXNrLCBsb25nIGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqc2VlZCwKKwkJIGxvbmcgc2VlZGxlbikKIAl7CiAJcmV0dXJuIFBLQ1MxX01HRjEobWFzaywgbGVuLCBzZWVkLCBzZWVkbGVuLCBFVlBfc2hhMSgpKTsKIAl9CmRpZmYgLS1naXQgYS9jcnlwdG8vcnNhL3JzYV9wbWV0aC5jIGIvY3J5cHRvL3JzYS9yc2FfcG1ldGguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTdlMTdjCi0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL3JzYS9yc2FfcG1ldGguYwpAQCAtMCwwICsxLDU4NSBAQAorLyogY3J5cHRvL3JzYS9yc2FfcG1ldGguYyAqLworLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisgKiBwcm9qZWN0IDIwMDYuCisgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisgKgorICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgorICoKKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorICoKKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKyAqICAgIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCisgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAqCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAiY3J5cHRsaWIuaCIKKyNpbmNsdWRlIDxvcGVuc3NsL2FzbjF0Lmg+CisjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+CisjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKyNpbmNsdWRlICJldnBfbG9jbC5oIgorI2luY2x1ZGUgInJzYV9sb2NsLmgiCisKKy8qIFJTQSBwa2V5IGNvbnRleHQgc3RydWN0dXJlICovCisKK3R5cGVkZWYgc3RydWN0CisJeworCS8qIEtleSBnZW4gcGFyYW1ldGVycyAqLworCWludCBuYml0czsKKwlCSUdOVU0gKnB1Yl9leHA7CisJLyogS2V5Z2VuIGNhbGxiYWNrIGluZm8gKi8KKwlpbnQgZ2VudG1wWzJdOworCS8qIFJTQSBwYWRkaW5nIG1vZGUgKi8KKwlpbnQgcGFkX21vZGU7CisJLyogbWVzc2FnZSBkaWdlc3QgKi8KKwljb25zdCBFVlBfTUQgKm1kOworCS8qIFBTUy9PQUVQIHNhbHQgbGVuZ3RoICovCisJaW50IHNhbHRsZW47CisJLyogVGVtcCBidWZmZXIgKi8KKwl1bnNpZ25lZCBjaGFyICp0YnVmOworCX0gUlNBX1BLRVlfQ1RYOworCitzdGF0aWMgaW50IHBrZXlfcnNhX2luaXQoRVZQX1BLRVlfQ1RYICpjdHgpCisJeworCVJTQV9QS0VZX0NUWCAqcmN0eDsKKwlyY3R4ID0gT1BFTlNTTF9tYWxsb2Moc2l6ZW9mKFJTQV9QS0VZX0NUWCkpOworCWlmICghcmN0eCkKKwkJcmV0dXJuIDA7CisJcmN0eC0+bmJpdHMgPSAxMDI0OworCXJjdHgtPnB1Yl9leHAgPSBOVUxMOworCXJjdHgtPnBhZF9tb2RlID0gUlNBX1BLQ1MxX1BBRERJTkc7CisJcmN0eC0+bWQgPSBOVUxMOworCXJjdHgtPnRidWYgPSBOVUxMOworCisJcmN0eC0+c2FsdGxlbiA9IC0yOworCisJY3R4LT5kYXRhID0gcmN0eDsKKwljdHgtPmtleWdlbl9pbmZvID0gcmN0eC0+Z2VudG1wOworCWN0eC0+a2V5Z2VuX2luZm9fY291bnQgPSAyOworCQorCXJldHVybiAxOworCX0KKworc3RhdGljIGludCBwa2V5X3JzYV9jb3B5KEVWUF9QS0VZX0NUWCAqZHN0LCBFVlBfUEtFWV9DVFggKnNyYykKKwl7CisJUlNBX1BLRVlfQ1RYICpkY3R4LCAqc2N0eDsKKwlpZiAoIXBrZXlfcnNhX2luaXQoZHN0KSkKKwkJcmV0dXJuIDA7CisgICAgICAgCXNjdHggPSBzcmMtPmRhdGE7CisJZGN0eCA9IGRzdC0+ZGF0YTsKKwlkY3R4LT5uYml0cyA9IHNjdHgtPm5iaXRzOworCWlmIChzY3R4LT5wdWJfZXhwKQorCQl7CisJCWRjdHgtPnB1Yl9leHAgPSBCTl9kdXAoc2N0eC0+cHViX2V4cCk7CisJCWlmICghZGN0eC0+cHViX2V4cCkKKwkJCXJldHVybiAwOworCQl9CisJZGN0eC0+cGFkX21vZGUgPSBzY3R4LT5wYWRfbW9kZTsKKwlkY3R4LT5tZCA9IHNjdHgtPm1kOworCXJldHVybiAxOworCX0KKworc3RhdGljIGludCBzZXR1cF90YnVmKFJTQV9QS0VZX0NUWCAqY3R4LCBFVlBfUEtFWV9DVFggKnBrKQorCXsKKwlpZiAoY3R4LT50YnVmKQorCQlyZXR1cm4gMTsKKwljdHgtPnRidWYgPSBPUEVOU1NMX21hbGxvYyhFVlBfUEtFWV9zaXplKHBrLT5wa2V5KSk7CisJaWYgKCFjdHgtPnRidWYpCisJCXJldHVybiAwOworCXJldHVybiAxOworCX0KKworc3RhdGljIHZvaWQgcGtleV9yc2FfY2xlYW51cChFVlBfUEtFWV9DVFggKmN0eCkKKwl7CisJUlNBX1BLRVlfQ1RYICpyY3R4ID0gY3R4LT5kYXRhOworCWlmIChyY3R4KQorCQl7CisJCWlmIChyY3R4LT5wdWJfZXhwKQorCQkJQk5fZnJlZShyY3R4LT5wdWJfZXhwKTsKKwkJaWYgKHJjdHgtPnRidWYpCisJCQlPUEVOU1NMX2ZyZWUocmN0eC0+dGJ1Zik7CisJCU9QRU5TU0xfZnJlZShyY3R4KTsKKwkJfQorCX0KKworc3RhdGljIGludCBwa2V5X3JzYV9zaWduKEVWUF9QS0VZX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpzaWcsIHNpemVfdCAqc2lnbGVuLAorCQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICp0YnMsIHNpemVfdCB0YnNsZW4pCisJeworCWludCByZXQ7CisJUlNBX1BLRVlfQ1RYICpyY3R4ID0gY3R4LT5kYXRhOworCVJTQSAqcnNhID0gY3R4LT5wa2V5LT5wa2V5LnJzYTsKKworCWlmIChyY3R4LT5tZCkKKwkJeworCQlpZiAodGJzbGVuICE9IChzaXplX3QpRVZQX01EX3NpemUocmN0eC0+bWQpKQorCQkJeworCQkJUlNBZXJyKFJTQV9GX1BLRVlfUlNBX1NJR04sCisJCQkJCVJTQV9SX0lOVkFMSURfRElHRVNUX0xFTkdUSCk7CisJCQlyZXR1cm4gLTE7CisJCQl9CisJCWlmIChyY3R4LT5wYWRfbW9kZSA9PSBSU0FfWDkzMV9QQURESU5HKQorCQkJeworCQkJaWYgKCFzZXR1cF90YnVmKHJjdHgsIGN0eCkpCisJCQkJcmV0dXJuIC0xOworCQkJbWVtY3B5KHJjdHgtPnRidWYsIHRicywgdGJzbGVuKTsKKwkJCXJjdHgtPnRidWZbdGJzbGVuXSA9CisJCQkJUlNBX1g5MzFfaGFzaF9pZChFVlBfTURfdHlwZShyY3R4LT5tZCkpOworCQkJcmV0ID0gUlNBX3ByaXZhdGVfZW5jcnlwdCh0YnNsZW4gKyAxLCByY3R4LT50YnVmLAorCQkJCQkJc2lnLCByc2EsIFJTQV9YOTMxX1BBRERJTkcpOworCQkJfQorCQllbHNlIGlmIChyY3R4LT5wYWRfbW9kZSA9PSBSU0FfUEtDUzFfUEFERElORykKKwkJCXsKKwkJCXVuc2lnbmVkIGludCBzbHRtcDsKKwkJCXJldCA9IFJTQV9zaWduKEVWUF9NRF90eXBlKHJjdHgtPm1kKSwKKwkJCQkJCXRicywgdGJzbGVuLCBzaWcsICZzbHRtcCwgcnNhKTsKKwkJCWlmIChyZXQgPD0gMCkKKwkJCQlyZXR1cm4gcmV0OworCQkJcmV0ID0gc2x0bXA7CisJCQl9CisJCWVsc2UgaWYgKHJjdHgtPnBhZF9tb2RlID09IFJTQV9QS0NTMV9QU1NfUEFERElORykKKwkJCXsKKwkJCWlmICghc2V0dXBfdGJ1ZihyY3R4LCBjdHgpKQorCQkJCXJldHVybiAtMTsKKwkJCWlmICghUlNBX3BhZGRpbmdfYWRkX1BLQ1MxX1BTUyhyc2EsIHJjdHgtPnRidWYsIHRicywKKwkJCQkJCXJjdHgtPm1kLCByY3R4LT5zYWx0bGVuKSkKKwkJCQlyZXR1cm4gLTE7CisJCQlyZXQgPSBSU0FfcHJpdmF0ZV9lbmNyeXB0KFJTQV9zaXplKHJzYSksIHJjdHgtPnRidWYsCisJCQkJCQlzaWcsIHJzYSwgUlNBX05PX1BBRERJTkcpOworCQkJfQorCQllbHNlCisJCQlyZXR1cm4gLTE7CisJCX0KKwllbHNlCisJCXJldCA9IFJTQV9wcml2YXRlX2VuY3J5cHQodGJzbGVuLCB0YnMsIHNpZywgY3R4LT5wa2V5LT5wa2V5LnJzYSwKKwkJCQkJCQlyY3R4LT5wYWRfbW9kZSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJKnNpZ2xlbiA9IHJldDsKKwlyZXR1cm4gMTsKKwl9CisKKworc3RhdGljIGludCBwa2V5X3JzYV92ZXJpZnlyZWNvdmVyKEVWUF9QS0VZX0NUWCAqY3R4LAorCQkJCQl1bnNpZ25lZCBjaGFyICpyb3V0LCBzaXplX3QgKnJvdXRsZW4sCisJCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZywgc2l6ZV90IHNpZ2xlbikKKwl7CisJaW50IHJldDsKKwlSU0FfUEtFWV9DVFggKnJjdHggPSBjdHgtPmRhdGE7CisKKwlpZiAocmN0eC0+bWQpCisJCXsKKwkJaWYgKHJjdHgtPnBhZF9tb2RlID09IFJTQV9YOTMxX1BBRERJTkcpCisJCQl7CisJCQlpZiAoIXNldHVwX3RidWYocmN0eCwgY3R4KSkKKwkJCQlyZXR1cm4gLTE7CisJCQlyZXQgPSBSU0FfcHVibGljX2RlY3J5cHQoc2lnbGVuLCBzaWcsCisJCQkJCQlyY3R4LT50YnVmLCBjdHgtPnBrZXktPnBrZXkucnNhLAorCQkJCQkJUlNBX1g5MzFfUEFERElORyk7CisJCQlpZiAocmV0IDwgMSkKKwkJCQlyZXR1cm4gMDsKKwkJCXJldC0tOworCQkJaWYgKHJjdHgtPnRidWZbcmV0XSAhPQorCQkJCVJTQV9YOTMxX2hhc2hfaWQoRVZQX01EX3R5cGUocmN0eC0+bWQpKSkKKwkJCQl7CisJCQkJUlNBZXJyKFJTQV9GX1BLRVlfUlNBX1ZFUklGWVJFQ09WRVIsCisJCQkJCQlSU0FfUl9BTEdPUklUSE1fTUlTTUFUQ0gpOworCQkJCXJldHVybiAwOworCQkJCX0KKwkJCWlmIChyZXQgIT0gRVZQX01EX3NpemUocmN0eC0+bWQpKQorCQkJCXsKKwkJCQlSU0FlcnIoUlNBX0ZfUEtFWV9SU0FfVkVSSUZZUkVDT1ZFUiwKKwkJCQkJUlNBX1JfSU5WQUxJRF9ESUdFU1RfTEVOR1RIKTsKKwkJCQlyZXR1cm4gMDsKKwkJCQl9CisJCQlpZiAocm91dCkKKwkJCQltZW1jcHkocm91dCwgcmN0eC0+dGJ1ZiwgcmV0KTsKKwkJCX0KKwkJZWxzZSBpZiAocmN0eC0+cGFkX21vZGUgPT0gUlNBX1BLQ1MxX1BBRERJTkcpCisJCQl7CisJCQlzaXplX3Qgc2x0bXA7CisJCQlyZXQgPSBpbnRfcnNhX3ZlcmlmeShFVlBfTURfdHlwZShyY3R4LT5tZCksCisJCQkJCQlOVUxMLCAwLCByb3V0LCAmc2x0bXAsCisJCQkJCXNpZywgc2lnbGVuLCBjdHgtPnBrZXktPnBrZXkucnNhKTsKKwkJCXJldCA9IHNsdG1wOworCQkJfQorCQllbHNlCisJCQlyZXR1cm4gLTE7CisJCX0KKwllbHNlCisJCXJldCA9IFJTQV9wdWJsaWNfZGVjcnlwdChzaWdsZW4sIHNpZywgcm91dCwgY3R4LT5wa2V5LT5wa2V5LnJzYSwKKwkJCQkJCQlyY3R4LT5wYWRfbW9kZSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJKnJvdXRsZW4gPSByZXQ7CisJcmV0dXJuIDE7CisJfQorCitzdGF0aWMgaW50IHBrZXlfcnNhX3ZlcmlmeShFVlBfUEtFWV9DVFggKmN0eCwKKwkJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqc2lnLCBzaXplX3Qgc2lnbGVuLAorCQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICp0YnMsIHNpemVfdCB0YnNsZW4pCisJeworCVJTQV9QS0VZX0NUWCAqcmN0eCA9IGN0eC0+ZGF0YTsKKwlSU0EgKnJzYSA9IGN0eC0+cGtleS0+cGtleS5yc2E7CisJc2l6ZV90IHJzbGVuOworCWlmIChyY3R4LT5tZCkKKwkJeworCQlpZiAocmN0eC0+cGFkX21vZGUgPT0gUlNBX1BLQ1MxX1BBRERJTkcpCisJCQlyZXR1cm4gUlNBX3ZlcmlmeShFVlBfTURfdHlwZShyY3R4LT5tZCksIHRicywgdGJzbGVuLAorCQkJCQlzaWcsIHNpZ2xlbiwgcnNhKTsKKwkJaWYgKHJjdHgtPnBhZF9tb2RlID09IFJTQV9YOTMxX1BBRERJTkcpCisJCQl7CisJCQlpZiAocGtleV9yc2FfdmVyaWZ5cmVjb3ZlcihjdHgsIE5VTEwsICZyc2xlbiwKKwkJCQkJc2lnLCBzaWdsZW4pIDw9IDApCisJCQkJcmV0dXJuIDA7CisJCQl9CisJCWVsc2UgaWYgKHJjdHgtPnBhZF9tb2RlID09IFJTQV9QS0NTMV9QU1NfUEFERElORykKKwkJCXsKKwkJCWludCByZXQ7CisJCQlpZiAoIXNldHVwX3RidWYocmN0eCwgY3R4KSkKKwkJCQlyZXR1cm4gLTE7CisJCQlyZXQgPSBSU0FfcHVibGljX2RlY3J5cHQoc2lnbGVuLCBzaWcsIHJjdHgtPnRidWYsCisJCQkJCQkJcnNhLCBSU0FfTk9fUEFERElORyk7CisJCQlpZiAocmV0IDw9IDApCisJCQkJcmV0dXJuIDA7CisJCQlyZXQgPSBSU0FfdmVyaWZ5X1BLQ1MxX1BTUyhyc2EsIHRicywgcmN0eC0+bWQsCisJCQkJCQlyY3R4LT50YnVmLCByY3R4LT5zYWx0bGVuKTsKKwkJCWlmIChyZXQgPD0gMCkKKwkJCQlyZXR1cm4gMDsKKwkJCXJldHVybiAxOworCQkJfQorCQllbHNlCisJCQlyZXR1cm4gLTE7CisJCX0KKwllbHNlCisJCXsKKwkJaWYgKCFzZXR1cF90YnVmKHJjdHgsIGN0eCkpCisJCQlyZXR1cm4gLTE7CisJCXJzbGVuID0gUlNBX3B1YmxpY19kZWNyeXB0KHNpZ2xlbiwgc2lnLCByY3R4LT50YnVmLAorCQkJCQkJcnNhLCByY3R4LT5wYWRfbW9kZSk7CisJCWlmIChyc2xlbiA9PSAwKQorCQkJcmV0dXJuIDA7CisJCX0KKworCWlmICgocnNsZW4gIT0gdGJzbGVuKSB8fCBtZW1jbXAodGJzLCByY3R4LT50YnVmLCByc2xlbikpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7CisJCQkKKwl9CisJCisKK3N0YXRpYyBpbnQgcGtleV9yc2FfZW5jcnlwdChFVlBfUEtFWV9DVFggKmN0eCwKKwkJCQkJdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3QgKm91dGxlbiwKKwkJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBpbmxlbikKKwl7CisJaW50IHJldDsKKwlSU0FfUEtFWV9DVFggKnJjdHggPSBjdHgtPmRhdGE7CisJcmV0ID0gUlNBX3B1YmxpY19lbmNyeXB0KGlubGVuLCBpbiwgb3V0LCBjdHgtPnBrZXktPnBrZXkucnNhLAorCQkJCQkJCXJjdHgtPnBhZF9tb2RlKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwkqb3V0bGVuID0gcmV0OworCXJldHVybiAxOworCX0KKworc3RhdGljIGludCBwa2V5X3JzYV9kZWNyeXB0KEVWUF9QS0VZX0NUWCAqY3R4LAorCQkJCQl1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCAqb3V0bGVuLAorCQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGlubGVuKQorCXsKKwlpbnQgcmV0OworCVJTQV9QS0VZX0NUWCAqcmN0eCA9IGN0eC0+ZGF0YTsKKwlyZXQgPSBSU0FfcHJpdmF0ZV9kZWNyeXB0KGlubGVuLCBpbiwgb3V0LCBjdHgtPnBrZXktPnBrZXkucnNhLAorCQkJCQkJCXJjdHgtPnBhZF9tb2RlKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwkqb3V0bGVuID0gcmV0OworCXJldHVybiAxOworCX0KKworc3RhdGljIGludCBjaGVja19wYWRkaW5nX21kKGNvbnN0IEVWUF9NRCAqbWQsIGludCBwYWRkaW5nKQorCXsKKwlpZiAoIW1kKQorCQlyZXR1cm4gMTsKKworCWlmIChwYWRkaW5nID09IFJTQV9OT19QQURESU5HKQorCQl7CisJCVJTQWVycihSU0FfRl9DSEVDS19QQURESU5HX01ELCBSU0FfUl9JTlZBTElEX1BBRERJTkdfTU9ERSk7CisJCXJldHVybiAwOworCQl9CisKKwlpZiAocGFkZGluZyA9PSBSU0FfWDkzMV9QQURESU5HKQorCQl7CisJCWlmIChSU0FfWDkzMV9oYXNoX2lkKEVWUF9NRF90eXBlKG1kKSkgPT0gLTEpCisJCQl7CisJCQlSU0FlcnIoUlNBX0ZfQ0hFQ0tfUEFERElOR19NRCwKKwkJCQkJCVJTQV9SX0lOVkFMSURfWDkzMV9ESUdFU1QpOworCQkJcmV0dXJuIDA7CisJCQl9CisJCXJldHVybiAxOworCQl9CisKKwlyZXR1cm4gMTsKKwl9CisJCQkKKworc3RhdGljIGludCBwa2V5X3JzYV9jdHJsKEVWUF9QS0VZX0NUWCAqY3R4LCBpbnQgdHlwZSwgaW50IHAxLCB2b2lkICpwMikKKwl7CisJUlNBX1BLRVlfQ1RYICpyY3R4ID0gY3R4LT5kYXRhOworCXN3aXRjaCAodHlwZSkKKwkJeworCQljYXNlIEVWUF9QS0VZX0NUUkxfUlNBX1BBRERJTkc6CisJCWlmICgocDEgPj0gUlNBX1BLQ1MxX1BBRERJTkcpICYmIChwMSA8PSBSU0FfUEtDUzFfUFNTX1BBRERJTkcpKQorCQkJeworCQkJaWYgKCFjaGVja19wYWRkaW5nX21kKHJjdHgtPm1kLCBwMSkpCisJCQkJcmV0dXJuIDA7CisJCQlpZiAocDEgPT0gUlNBX1BLQ1MxX1BTU19QQURESU5HKSAKKwkJCQl7CisJCQkJaWYgKCEoY3R4LT5vcGVyYXRpb24gJgorCQkJCSAgICAgKEVWUF9QS0VZX09QX1NJR04gfCBFVlBfUEtFWV9PUF9WRVJJRlkpKSkKKwkJCQkJZ290byBiYWRfcGFkOworCQkJCWlmICghcmN0eC0+bWQpCisJCQkJCXJjdHgtPm1kID0gRVZQX3NoYTEoKTsKKwkJCQl9CisJCQlpZiAocDEgPT0gUlNBX1BLQ1MxX09BRVBfUEFERElORykgCisJCQkJeworCQkJCWlmICghKGN0eC0+b3BlcmF0aW9uICYgRVZQX1BLRVlfT1BfVFlQRV9DUllQVCkpCisJCQkJCWdvdG8gYmFkX3BhZDsKKwkJCQlpZiAoIXJjdHgtPm1kKQorCQkJCQlyY3R4LT5tZCA9IEVWUF9zaGExKCk7CisJCQkJfQorCQkJcmN0eC0+cGFkX21vZGUgPSBwMTsKKwkJCXJldHVybiAxOworCQkJfQorCQliYWRfcGFkOgorCQlSU0FlcnIoUlNBX0ZfUEtFWV9SU0FfQ1RSTCwKKwkJCQlSU0FfUl9JTExFR0FMX09SX1VOU1VQUE9SVEVEX1BBRERJTkdfTU9ERSk7CisJCXJldHVybiAtMjsKKworCQljYXNlIEVWUF9QS0VZX0NUUkxfUlNBX1BTU19TQUxUTEVOOgorCQlpZiAocDEgPCAtMikKKwkJCXJldHVybiAtMjsKKwkJaWYgKHJjdHgtPnBhZF9tb2RlICE9IFJTQV9QS0NTMV9QU1NfUEFERElORykKKwkJCXsKKwkJCVJTQWVycihSU0FfRl9QS0VZX1JTQV9DVFJMLCBSU0FfUl9JTlZBTElEX1BTU19TQUxUTEVOKTsKKwkJCXJldHVybiAtMjsKKwkJCX0KKwkJcmN0eC0+c2FsdGxlbiA9IHAxOworCQlyZXR1cm4gMTsKKworCQljYXNlIEVWUF9QS0VZX0NUUkxfUlNBX0tFWUdFTl9CSVRTOgorCQlpZiAocDEgPCAyNTYpCisJCQl7CisJCQlSU0FlcnIoUlNBX0ZfUEtFWV9SU0FfQ1RSTCwgUlNBX1JfSU5WQUxJRF9LRVlCSVRTKTsKKwkJCXJldHVybiAtMjsKKwkJCX0KKwkJcmN0eC0+bmJpdHMgPSBwMTsKKwkJcmV0dXJuIDE7CisKKwkJY2FzZSBFVlBfUEtFWV9DVFJMX1JTQV9LRVlHRU5fUFVCRVhQOgorCQlpZiAoIXAyKQorCQkJcmV0dXJuIC0yOworCQlyY3R4LT5wdWJfZXhwID0gcDI7CisJCXJldHVybiAxOworCisJCWNhc2UgRVZQX1BLRVlfQ1RSTF9NRDoKKwkJaWYgKCFjaGVja19wYWRkaW5nX21kKHAyLCByY3R4LT5wYWRfbW9kZSkpCisJCQlyZXR1cm4gMDsKKwkJcmN0eC0+bWQgPSBwMjsKKwkJcmV0dXJuIDE7CisKKwkJY2FzZSBFVlBfUEtFWV9DVFJMX0RJR0VTVElOSVQ6CisJCWNhc2UgRVZQX1BLRVlfQ1RSTF9QS0NTN19FTkNSWVBUOgorCQljYXNlIEVWUF9QS0VZX0NUUkxfUEtDUzdfREVDUllQVDoKKwkJY2FzZSBFVlBfUEtFWV9DVFJMX1BLQ1M3X1NJR046CisjaWZuZGVmIE9QRU5TU0xfTk9fQ01TCisJCWNhc2UgRVZQX1BLRVlfQ1RSTF9DTVNfRU5DUllQVDoKKwkJY2FzZSBFVlBfUEtFWV9DVFJMX0NNU19ERUNSWVBUOgorCQljYXNlIEVWUF9QS0VZX0NUUkxfQ01TX1NJR046CisjZW5kaWYKKwkJcmV0dXJuIDE7CisJCWNhc2UgRVZQX1BLRVlfQ1RSTF9QRUVSX0tFWToKKwkJCVJTQWVycihSU0FfRl9QS0VZX1JTQV9DVFJMLAorCQkJUlNBX1JfT1BFUkFUSU9OX05PVF9TVVBQT1JURURfRk9SX1RISVNfS0VZVFlQRSk7CisJCQlyZXR1cm4gLTI7CQorCisJCWRlZmF1bHQ6CisJCXJldHVybiAtMjsKKworCQl9CisJfQorCQkJCitzdGF0aWMgaW50IHBrZXlfcnNhX2N0cmxfc3RyKEVWUF9QS0VZX0NUWCAqY3R4LAorCQkJY29uc3QgY2hhciAqdHlwZSwgY29uc3QgY2hhciAqdmFsdWUpCisJeworCWlmICghdmFsdWUpCisJCXsKKwkJUlNBZXJyKFJTQV9GX1BLRVlfUlNBX0NUUkxfU1RSLCBSU0FfUl9WQUxVRV9NSVNTSU5HKTsKKwkJcmV0dXJuIDA7CisJCX0KKwlpZiAoIXN0cmNtcCh0eXBlLCAicnNhX3BhZGRpbmdfbW9kZSIpKQorCQl7CisJCWludCBwbTsKKwkJaWYgKCFzdHJjbXAodmFsdWUsICJwa2NzMSIpKQorCQkJcG0gPSBSU0FfUEtDUzFfUEFERElORzsKKwkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgInNzbHYyMyIpKQorCQkJcG0gPSBSU0FfU1NMVjIzX1BBRERJTkc7CisJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJub25lIikpCisJCQlwbSA9IFJTQV9OT19QQURESU5HOworCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAib2VhcCIpKQorCQkJcG0gPSBSU0FfUEtDUzFfT0FFUF9QQURESU5HOworCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAieDkzMSIpKQorCQkJcG0gPSBSU0FfWDkzMV9QQURESU5HOworCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAicHNzIikpCisJCQlwbSA9IFJTQV9QS0NTMV9QU1NfUEFERElORzsKKwkJZWxzZQorCQkJeworCQkJUlNBZXJyKFJTQV9GX1BLRVlfUlNBX0NUUkxfU1RSLAorCQkJCQkJUlNBX1JfVU5LTk9XTl9QQURESU5HX1RZUEUpOworCQkJcmV0dXJuIC0yOworCQkJfQorCQlyZXR1cm4gRVZQX1BLRVlfQ1RYX3NldF9yc2FfcGFkZGluZyhjdHgsIHBtKTsKKwkJfQorCisJaWYgKCFzdHJjbXAodHlwZSwgInJzYV9wc3Nfc2FsdGxlbiIpKQorCQl7CisJCWludCBzYWx0bGVuOworCQlzYWx0bGVuID0gYXRvaSh2YWx1ZSk7CisJCXJldHVybiBFVlBfUEtFWV9DVFhfc2V0X3JzYV9wc3Nfc2FsdGxlbihjdHgsIHNhbHRsZW4pOworCQl9CisKKwlpZiAoIXN0cmNtcCh0eXBlLCAicnNhX2tleWdlbl9iaXRzIikpCisJCXsKKwkJaW50IG5iaXRzOworCQluYml0cyA9IGF0b2kodmFsdWUpOworCQlyZXR1cm4gRVZQX1BLRVlfQ1RYX3NldF9yc2Ffa2V5Z2VuX2JpdHMoY3R4LCBuYml0cyk7CisJCX0KKworCWlmICghc3RyY21wKHR5cGUsICJyc2Ffa2V5Z2VuX3B1YmV4cCIpKQorCQl7CisJCWludCByZXQ7CisJCUJJR05VTSAqcHViZXhwID0gTlVMTDsKKwkJaWYgKCFCTl9hc2MyYm4oJnB1YmV4cCwgdmFsdWUpKQorCQkJcmV0dXJuIDA7CisJCXJldCA9IEVWUF9QS0VZX0NUWF9zZXRfcnNhX2tleWdlbl9wdWJleHAoY3R4LCBwdWJleHApOworCQlpZiAocmV0IDw9IDApCisJCQlCTl9mcmVlKHB1YmV4cCk7CisJCXJldHVybiByZXQ7CisJCX0KKworCXJldHVybiAtMjsKKwl9CisKK3N0YXRpYyBpbnQgcGtleV9yc2Ffa2V5Z2VuKEVWUF9QS0VZX0NUWCAqY3R4LCBFVlBfUEtFWSAqcGtleSkKKwl7CisJUlNBICpyc2EgPSBOVUxMOworCVJTQV9QS0VZX0NUWCAqcmN0eCA9IGN0eC0+ZGF0YTsKKwlCTl9HRU5DQiAqcGNiLCBjYjsKKwlpbnQgcmV0OworCWlmICghcmN0eC0+cHViX2V4cCkKKwkJeworCQlyY3R4LT5wdWJfZXhwID0gQk5fbmV3KCk7CisJCWlmICghcmN0eC0+cHViX2V4cCB8fCAhQk5fc2V0X3dvcmQocmN0eC0+cHViX2V4cCwgUlNBX0Y0KSkKKwkJCXJldHVybiAwOworCQl9CisJcnNhID0gUlNBX25ldygpOworCWlmICghcnNhKQorCQlyZXR1cm4gMDsKKwlpZiAoY3R4LT5wa2V5X2dlbmNiKQorCQl7CisJCXBjYiA9ICZjYjsKKwkJZXZwX3BrZXlfc2V0X2NiX3RyYW5zbGF0ZShwY2IsIGN0eCk7CisJCX0KKwllbHNlCisJCXBjYiA9IE5VTEw7CisJcmV0ID0gUlNBX2dlbmVyYXRlX2tleV9leChyc2EsIHJjdHgtPm5iaXRzLCByY3R4LT5wdWJfZXhwLCBwY2IpOworCWlmIChyZXQgPiAwKQorCQlFVlBfUEtFWV9hc3NpZ25fUlNBKHBrZXksIHJzYSk7CisJZWxzZQorCQlSU0FfZnJlZShyc2EpOworCXJldHVybiByZXQ7CisJfQorCitjb25zdCBFVlBfUEtFWV9NRVRIT0QgcnNhX3BrZXlfbWV0aCA9IAorCXsKKwlFVlBfUEtFWV9SU0EsCisJRVZQX1BLRVlfRkxBR19BVVRPQVJHTEVOLAorCXBrZXlfcnNhX2luaXQsCisJcGtleV9yc2FfY29weSwKKwlwa2V5X3JzYV9jbGVhbnVwLAorCisJMCwwLAorCisJMCwKKwlwa2V5X3JzYV9rZXlnZW4sCisKKwkwLAorCXBrZXlfcnNhX3NpZ24sCisKKwkwLAorCXBrZXlfcnNhX3ZlcmlmeSwKKworCTAsCisJcGtleV9yc2FfdmVyaWZ5cmVjb3ZlciwKKworCisJMCwwLDAsMCwKKworCTAsCisJcGtleV9yc2FfZW5jcnlwdCwKKworCTAsCisJcGtleV9yc2FfZGVjcnlwdCwKKworCTAsMCwKKworCXBrZXlfcnNhX2N0cmwsCisJcGtleV9yc2FfY3RybF9zdHIKKworCisJfTsKZGlmZiAtLWdpdCBhL2NyeXB0by9yYzQvcmM0X2ZibGsuYyBiL2NyeXB0by9yc2EvcnNhX3Bybi5jCnNpbWlsYXJpdHkgaW5kZXggNzIlCmNvcHkgZnJvbSBjcnlwdG8vcmM0L3JjNF9mYmxrLmMKY29weSB0byBjcnlwdG8vcnNhL3JzYV9wcm4uYwppbmRleCAxYjJhNDI5Li4yMjRkYjBmIDEwMDY0NAotLS0gYS9jcnlwdG8vcmM0L3JjNF9mYmxrLmMKKysrIGIvY3J5cHRvL3JzYS9yc2FfcHJuLmMKQEAgLTEsOSArMSw5IEBACi0vKiBjcnlwdG8vcmM0L3JjNF9mYmxrLmMgKi8KKy8qIGNyeXB0by9yc2EvcnNhX3Bybi5jICovCiAvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKLSAqIHByb2plY3QuCisgKiBwcm9qZWN0IDIwMDYuCiAgKi8KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDggVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ5LDI3ICs0OSw0NSBAQAogICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAogICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorICoKICAqLwogCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJjcnlwdGxpYi5oIgorI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KIAotI2luY2x1ZGUgPG9wZW5zc2wvcmM0Lmg+Ci0jaW5jbHVkZSAicmM0X2xvY2wuaCIKLSNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+Ci0jaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLSNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSNlbmRpZgotCi0vKiBGSVBTIG1vZGUgYmxvY2tpbmcgZm9yIFJDNCBoYXMgdG8gYmUgZG9uZSBzZXBhcmF0ZWx5IHNpbmNlIFJDNF9zZXRfa2V5Ci0gKiBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW4gYXNzZW1ibHkgbGFuZ3VhZ2UgZmlsZS4KLSAqLwotCi0jaWZkZWYgT1BFTlNTTF9GSVBTCi12b2lkIFJDNF9zZXRfa2V5KFJDNF9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKKyNpZm5kZWYgT1BFTlNTTF9OT19GUF9BUEkKK2ludCBSU0FfcHJpbnRfZnAoRklMRSAqZnAsIGNvbnN0IFJTQSAqeCwgaW50IG9mZikKIAl7Ci0JaWYgKEZJUFNfbW9kZSgpKQotCQlGSVBTX0JBRF9BQk9SVChSQzQpCi0JcHJpdmF0ZV9SQzRfc2V0X2tleShrZXksIGxlbiwgZGF0YSk7CisJQklPICpiOworCWludCByZXQ7CisKKwlpZiAoKGI9QklPX25ldyhCSU9fc19maWxlKCkpKSA9PSBOVUxMKQorCQl7CisJCVJTQWVycihSU0FfRl9SU0FfUFJJTlRfRlAsRVJSX1JfQlVGX0xJQik7CisJCXJldHVybigwKTsKKwkJfQorCUJJT19zZXRfZnAoYixmcCxCSU9fTk9DTE9TRSk7CisJcmV0PVJTQV9wcmludChiLHgsb2ZmKTsKKwlCSU9fZnJlZShiKTsKKwlyZXR1cm4ocmV0KTsKIAl9CiAjZW5kaWYKIAoraW50IFJTQV9wcmludChCSU8gKmJwLCBjb25zdCBSU0EgKngsIGludCBvZmYpCisJeworCUVWUF9QS0VZICpwazsKKwlpbnQgcmV0OworCXBrID0gRVZQX1BLRVlfbmV3KCk7CisJaWYgKCFwayB8fCAhRVZQX1BLRVlfc2V0MV9SU0EocGssIChSU0EgKil4KSkKKwkJcmV0dXJuIDA7CisJcmV0ID0gRVZQX1BLRVlfcHJpbnRfcHJpdmF0ZShicCwgcGssIG9mZiwgTlVMTCk7CisJRVZQX1BLRVlfZnJlZShwayk7CisJcmV0dXJuIHJldDsKKwl9CisKZGlmZiAtLWdpdCBhL2NyeXB0by9yc2EvcnNhX3Bzcy5jIGIvY3J5cHRvL3JzYS9yc2FfcHNzLmMKaW5kZXggMmJkYTQ5MS4uYWMyMTFlMiAxMDA2NDQKLS0tIGEvY3J5cHRvL3JzYS9yc2FfcHNzLmMKKysrIGIvY3J5cHRvL3JzYS9yc2FfcHNzLmMKQEAgLTgxLDcgKzgxLDkgQEAKIAlFVlBfTURfQ1RYIGN0eDsKIAl1bnNpZ25lZCBjaGFyIEhfW0VWUF9NQVhfTURfU0laRV07CiAKLQloTGVuID0gTV9FVlBfTURfc2l6ZShIYXNoKTsKKwloTGVuID0gRVZQX01EX3NpemUoSGFzaCk7CisJaWYgKGhMZW4gPCAwKQorCQlnb3RvIGVycjsKIAkvKgogCSAqIE5lZ2F0aXZlIHNMZW4gaGFzIHNwZWNpYWwgbWVhbmluZ3M6CiAJICoJLTEJc0xlbiA9PSBoTGVuCkBAIC0xMjYsNyArMTI4LDggQEAKIAkJUlNBZXJyKFJTQV9GX1JTQV9WRVJJRllfUEtDUzFfUFNTLCBFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CiAJCWdvdG8gZXJyOwogCQl9Ci0JUEtDUzFfTUdGMShEQiwgbWFza2VkREJMZW4sIEgsIGhMZW4sIEhhc2gpOworCWlmIChQS0NTMV9NR0YxKERCLCBtYXNrZWREQkxlbiwgSCwgaExlbiwgSGFzaCkgPCAwKQorCQlnb3RvIGVycjsKIAlmb3IgKGkgPSAwOyBpIDwgbWFza2VkREJMZW47IGkrKykKIAkJREJbaV0gXj0gRU1baV07CiAJaWYgKE1TQml0cykKQEAgLTE3Niw3ICsxNzksOSBAQAogCXVuc2lnbmVkIGNoYXIgKkgsICpzYWx0ID0gTlVMTCwgKnA7CiAJRVZQX01EX0NUWCBjdHg7CiAKLQloTGVuID0gTV9FVlBfTURfc2l6ZShIYXNoKTsKKwloTGVuID0gRVZQX01EX3NpemUoSGFzaCk7CisJaWYgKGhMZW4gPCAwKQorCQlnb3RvIGVycjsKIAkvKgogCSAqIE5lZ2F0aXZlIHNMZW4gaGFzIHNwZWNpYWwgbWVhbmluZ3M6CiAJICoJLTEJc0xlbiA9PSBoTGVuCkBAIC0yMzIsNyArMjM3LDggQEAKIAlFVlBfTURfQ1RYX2NsZWFudXAoJmN0eCk7CiAKIAkvKiBHZW5lcmF0ZSBkYk1hc2sgaW4gcGxhY2UgdGhlbiBwZXJmb3JtIFhPUiBvbiBpdCAqLwotCVBLQ1MxX01HRjEoRU0sIG1hc2tlZERCTGVuLCBILCBoTGVuLCBIYXNoKTsKKwlpZiAoUEtDUzFfTUdGMShFTSwgbWFza2VkREJMZW4sIEgsIGhMZW4sIEhhc2gpKQorCQlnb3RvIGVycjsKIAogCXAgPSBFTTsKIApkaWZmIC0tZ2l0IGEvY3J5cHRvL3JzYS9yc2Ffc2lnbi5jIGIvY3J5cHRvL3JzYS9yc2Ffc2lnbi5jCmluZGV4IDc0M2RmZDcuLjBiZTRlYzcgMTAwNjQ0Ci0tLSBhL2NyeXB0by9yc2EvcnNhX3NpZ24uYworKysgYi9jcnlwdG8vcnNhL3JzYV9zaWduLmMKQEAgLTYyLDYgKzYyLDcgQEAKICNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgogI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgogI2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgorI2luY2x1ZGUgInJzYV9sb2NsLmgiCiAKIC8qIFNpemUgb2YgYW4gU1NMIHNpZ25hdHVyZTogTUQ1K1NIQTEgKi8KICNkZWZpbmUgU1NMX1NJR19MRU5HVEgJMzYKQEAgLTkwLDE0ICs5MSw2IEBACiAJCWkgPSBTU0xfU0lHX0xFTkdUSDsKIAkJcyA9IG07CiAJfSBlbHNlIHsKLQkvKiBOQjogaW4gRklQUyBtb2RlIGJsb2NrIGFueXRoaW5nIHRoYXQgaXNuJ3QgYSBUTFMgc2lnbmF0dXJlICovCi0jaWZkZWYgT1BFTlNTTF9GSVBTCi0JCWlmKEZJUFNfbW9kZSgpICYmICEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSkKLQkJCXsKLQkJCVJTQWVycihSU0FfRl9SU0FfU0lHTiwgUlNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERSk7Ci0JCQlyZXR1cm4gMDsKLQkJCX0KLSNlbmRpZgogCQlzaWcuYWxnb3I9ICZhbGdvcjsKIAkJc2lnLmFsZ29yLT5hbGdvcml0aG09T0JKX25pZDJvYmoodHlwZSk7CiAJCWlmIChzaWcuYWxnb3ItPmFsZ29yaXRobSA9PSBOVUxMKQpAQCAtMTM3LDEyICsxMzAsNyBAQAogCQlpMmRfWDUwOV9TSUcoJnNpZywmcCk7CiAJCXM9dG1wczsKIAl9Ci0jaWZkZWYgT1BFTlNTTF9GSVBTCi0JLyogQnlwYXNzIGFsZ29yaXRobSBibG9ja2luZzogdGhpcyBpcyBhbGxvd2VkIGlmIHdlIGdldCB0aGlzIGZhciAqLwotCWk9cnNhLT5tZXRoLT5yc2FfcHJpdl9lbmMoaSxzLHNpZ3JldCxyc2EsUlNBX1BLQ1MxX1BBRERJTkcpOwotI2Vsc2UKIAlpPVJTQV9wcml2YXRlX2VuY3J5cHQoaSxzLHNpZ3JldCxyc2EsUlNBX1BLQ1MxX1BBRERJTkcpOwotI2VuZGlmCiAJaWYgKGkgPD0gMCkKIAkJcmV0PTA7CiAJZWxzZQpAQCAtMTU1LDggKzE0MywxMSBAQAogCXJldHVybihyZXQpOwogCX0KIAotaW50IFJTQV92ZXJpZnkoaW50IGR0eXBlLCBjb25zdCB1bnNpZ25lZCBjaGFyICptLCB1bnNpZ25lZCBpbnQgbV9sZW4sCi0JICAgICB1bnNpZ25lZCBjaGFyICpzaWdidWYsIHVuc2lnbmVkIGludCBzaWdsZW4sIFJTQSAqcnNhKQoraW50IGludF9yc2FfdmVyaWZ5KGludCBkdHlwZSwgY29uc3QgdW5zaWduZWQgY2hhciAqbSwKKwkJCSAgdW5zaWduZWQgaW50IG1fbGVuLAorCQkJICB1bnNpZ25lZCBjaGFyICpybSwgc2l6ZV90ICpwcm1fbGVuLAorCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaWdidWYsIHNpemVfdCBzaWdsZW4sCisJCQkgIFJTQSAqcnNhKQogCXsKIAlpbnQgaSxyZXQ9MCxzaWd0eXBlOwogCXVuc2lnbmVkIGNoYXIgKnM7CkBAIC0xNjQsNDkgKzE1NSwzOCBAQAogCiAJaWYgKHNpZ2xlbiAhPSAodW5zaWduZWQgaW50KVJTQV9zaXplKHJzYSkpCiAJCXsKLQkJUlNBZXJyKFJTQV9GX1JTQV9WRVJJRlksUlNBX1JfV1JPTkdfU0lHTkFUVVJFX0xFTkdUSCk7CisJCVJTQWVycihSU0FfRl9JTlRfUlNBX1ZFUklGWSxSU0FfUl9XUk9OR19TSUdOQVRVUkVfTEVOR1RIKTsKIAkJcmV0dXJuKDApOwogCQl9CiAKLQlpZigocnNhLT5mbGFncyAmIFJTQV9GTEFHX1NJR05fVkVSKSAmJiByc2EtPm1ldGgtPnJzYV92ZXJpZnkpCisJaWYoKGR0eXBlID09IE5JRF9tZDVfc2hhMSkgJiYgcm0pCiAJCXsKLQkJcmV0dXJuIHJzYS0+bWV0aC0+cnNhX3ZlcmlmeShkdHlwZSwgbSwgbV9sZW4sCi0JCQlzaWdidWYsIHNpZ2xlbiwgcnNhKTsKKwkJaSA9IFJTQV9wdWJsaWNfZGVjcnlwdCgoaW50KXNpZ2xlbiwKKwkJCQkJc2lnYnVmLHJtLHJzYSxSU0FfUEtDUzFfUEFERElORyk7CisJCWlmIChpIDw9IDApCisJCQlyZXR1cm4gMDsKKwkJKnBybV9sZW4gPSBpOworCQlyZXR1cm4gMTsKIAkJfQogCiAJcz0odW5zaWduZWQgY2hhciAqKU9QRU5TU0xfbWFsbG9jKCh1bnNpZ25lZCBpbnQpc2lnbGVuKTsKIAlpZiAocyA9PSBOVUxMKQogCQl7Ci0JCVJTQWVycihSU0FfRl9SU0FfVkVSSUZZLEVSUl9SX01BTExPQ19GQUlMVVJFKTsKKwkJUlNBZXJyKFJTQV9GX0lOVF9SU0FfVkVSSUZZLEVSUl9SX01BTExPQ19GQUlMVVJFKTsKIAkJZ290byBlcnI7CiAJCX0KLQlpZihkdHlwZSA9PSBOSURfbWQ1X3NoYTEpCi0JCXsKLQkJaWYgKG1fbGVuICE9IFNTTF9TSUdfTEVOR1RIKQotCQkJewotCQkJUlNBZXJyKFJTQV9GX1JTQV9WRVJJRlksUlNBX1JfSU5WQUxJRF9NRVNTQUdFX0xFTkdUSCk7CisJaWYoKGR0eXBlID09IE5JRF9tZDVfc2hhMSkgJiYgKG1fbGVuICE9IFNTTF9TSUdfTEVOR1RIKSApIHsKKwkJCVJTQWVycihSU0FfRl9JTlRfUlNBX1ZFUklGWSxSU0FfUl9JTlZBTElEX01FU1NBR0VfTEVOR1RIKTsKIAkJCWdvdG8gZXJyOwotCQkJfQotCQl9Ci0JLyogTkI6IGluIEZJUFMgbW9kZSBibG9jayBhbnl0aGluZyB0aGF0IGlzbid0IGEgVExTIHNpZ25hdHVyZSAqLwotI2lmZGVmIE9QRU5TU0xfRklQUwotCWVsc2UgaWYoRklQU19tb2RlKCkgJiYgIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQotCQl7Ci0JCVJTQWVycihSU0FfRl9SU0FfVkVSSUZZLCBSU0FfUl9PUEVSQVRJT05fTk9UX0FMTE9XRURfSU5fRklQU19NT0RFKTsKLQkJcmV0dXJuIDA7Ci0JCX0KLQkvKiBCeXBhc3MgYWxnb3JpdGhtIGJsb2NraW5nOiB0aGlzIGlzIGFsbG93ZWQgKi8KLQlpPXJzYS0+bWV0aC0+cnNhX3B1Yl9kZWMoKGludClzaWdsZW4sc2lnYnVmLHMscnNhLFJTQV9QS0NTMV9QQURESU5HKTsKLSNlbHNlCisJfQogCWk9UlNBX3B1YmxpY19kZWNyeXB0KChpbnQpc2lnbGVuLHNpZ2J1ZixzLHJzYSxSU0FfUEtDUzFfUEFERElORyk7Ci0jZW5kaWYKIAogCWlmIChpIDw9IDApIGdvdG8gZXJyOwogCiAJLyogU3BlY2lhbCBjYXNlOiBTU0wgc2lnbmF0dXJlICovCiAJaWYoZHR5cGUgPT0gTklEX21kNV9zaGExKSB7CiAJCWlmKChpICE9IFNTTF9TSUdfTEVOR1RIKSB8fCBtZW1jbXAocywgbSwgU1NMX1NJR19MRU5HVEgpKQotCQkJCVJTQWVycihSU0FfRl9SU0FfVkVSSUZZLFJTQV9SX0JBRF9TSUdOQVRVUkUpOworCQkJCVJTQWVycihSU0FfRl9JTlRfUlNBX1ZFUklGWSxSU0FfUl9CQURfU0lHTkFUVVJFKTsKIAkJZWxzZSByZXQgPSAxOwogCX0gZWxzZSB7CiAJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnA9czsKQEAgLTIxNyw3ICsxOTcsNyBAQAogCQkvKiBFeGNlc3MgZGF0YSBjYW4gYmUgdXNlZCB0byBjcmVhdGUgZm9yZ2VyaWVzICovCiAJCWlmKHAgIT0gcytpKQogCQkJewotCQkJUlNBZXJyKFJTQV9GX1JTQV9WRVJJRlksUlNBX1JfQkFEX1NJR05BVFVSRSk7CisJCQlSU0FlcnIoUlNBX0ZfSU5UX1JTQV9WRVJJRlksUlNBX1JfQkFEX1NJR05BVFVSRSk7CiAJCQlnb3RvIGVycjsKIAkJCX0KIApAQCAtMjI2LDcgKzIwNiw3IEBACiAJCWlmKHNpZy0+YWxnb3ItPnBhcmFtZXRlcgogCQkgICAmJiBBU04xX1RZUEVfZ2V0KHNpZy0+YWxnb3ItPnBhcmFtZXRlcikgIT0gVl9BU04xX05VTEwpCiAJCQl7Ci0JCQlSU0FlcnIoUlNBX0ZfUlNBX1ZFUklGWSxSU0FfUl9CQURfU0lHTkFUVVJFKTsKKwkJCVJTQWVycihSU0FfRl9JTlRfUlNBX1ZFUklGWSxSU0FfUl9CQURfU0lHTkFUVVJFKTsKIAkJCWdvdG8gZXJyOwogCQkJfQogCkBAIC0yNTIsMTUgKzIzMiwzMCBAQAogCQkJCX0KIAkJCWVsc2UKIAkJCQl7Ci0JCQkJUlNBZXJyKFJTQV9GX1JTQV9WRVJJRlksCisJCQkJUlNBZXJyKFJTQV9GX0lOVF9SU0FfVkVSSUZZLAogCQkJCQkJUlNBX1JfQUxHT1JJVEhNX01JU01BVENIKTsKIAkJCQlnb3RvIGVycjsKIAkJCQl9CiAJCQl9Ci0JCWlmICgJKCh1bnNpZ25lZCBpbnQpc2lnLT5kaWdlc3QtPmxlbmd0aCAhPSBtX2xlbikgfHwKKwkJaWYgKHJtKQorCQkJeworCQkJY29uc3QgRVZQX01EICptZDsKKwkJCW1kID0gRVZQX2dldF9kaWdlc3RieW5pZChkdHlwZSk7CisJCQlpZiAobWQgJiYgKEVWUF9NRF9zaXplKG1kKSAhPSBzaWctPmRpZ2VzdC0+bGVuZ3RoKSkKKwkJCQlSU0FlcnIoUlNBX0ZfSU5UX1JTQV9WRVJJRlksCisJCQkJCQlSU0FfUl9JTlZBTElEX0RJR0VTVF9MRU5HVEgpOworCQkJZWxzZQorCQkJCXsKKwkJCQltZW1jcHkocm0sIHNpZy0+ZGlnZXN0LT5kYXRhLAorCQkJCQkJCXNpZy0+ZGlnZXN0LT5sZW5ndGgpOworCQkJCSpwcm1fbGVuID0gc2lnLT5kaWdlc3QtPmxlbmd0aDsKKwkJCQlyZXQgPSAxOworCQkJCX0KKwkJCX0KKwkJZWxzZSBpZiAoKCh1bnNpZ25lZCBpbnQpc2lnLT5kaWdlc3QtPmxlbmd0aCAhPSBtX2xlbikgfHwKIAkJCShtZW1jbXAobSxzaWctPmRpZ2VzdC0+ZGF0YSxtX2xlbikgIT0gMCkpCiAJCQl7Ci0JCQlSU0FlcnIoUlNBX0ZfUlNBX1ZFUklGWSxSU0FfUl9CQURfU0lHTkFUVVJFKTsKKwkJCVJTQWVycihSU0FfRl9JTlRfUlNBX1ZFUklGWSxSU0FfUl9CQURfU0lHTkFUVVJFKTsKIAkJCX0KIAkJZWxzZQogCQkJcmV0PTE7CkBAIC0yNzUsMyArMjcwLDE2IEBACiAJcmV0dXJuKHJldCk7CiAJfQogCitpbnQgUlNBX3ZlcmlmeShpbnQgZHR5cGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm0sIHVuc2lnbmVkIGludCBtX2xlbiwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqc2lnYnVmLCB1bnNpZ25lZCBpbnQgc2lnbGVuLAorCQlSU0EgKnJzYSkKKwl7CisKKwlpZigocnNhLT5mbGFncyAmIFJTQV9GTEFHX1NJR05fVkVSKSAmJiByc2EtPm1ldGgtPnJzYV92ZXJpZnkpCisJCXsKKwkJcmV0dXJuIHJzYS0+bWV0aC0+cnNhX3ZlcmlmeShkdHlwZSwgbSwgbV9sZW4sCisJCQlzaWdidWYsIHNpZ2xlbiwgcnNhKTsKKwkJfQorCisJcmV0dXJuIGludF9yc2FfdmVyaWZ5KGR0eXBlLCBtLCBtX2xlbiwgTlVMTCwgTlVMTCwgc2lnYnVmLCBzaWdsZW4sIHJzYSk7CisJfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL3JzYS9yc2FfdGVzdC5jIGIvY3J5cHRvL3JzYS9yc2FfdGVzdC5jCmluZGV4IDQwODBkZTguLmM4NzA1YTAgMTAwNjQ0Ci0tLSBhL2NyeXB0by9yc2EvcnNhX3Rlc3QuYworKysgYi9jcnlwdG8vcnNhL3JzYV90ZXN0LmMKQEAgLTMyOCw3ICszMjgsNyBAQAogCX0KIAogICAgIENSWVBUT19jbGVhbnVwX2FsbF9leF9kYXRhKCk7Ci0gICAgRVJSX3JlbW92ZV9zdGF0ZSgwKTsKKyAgICBFUlJfcmVtb3ZlX3RocmVhZF9zdGF0ZShOVUxMKTsKIAogICAgIENSWVBUT19tZW1fbGVha3NfZnAoc3RkZXJyKTsKIApkaWZmIC0tZ2l0IGEvY3J5cHRvL3JzYS9yc2FfeDkzMWcuYyBiL2NyeXB0by9yc2EvcnNhX3g5MzFnLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmOTRmOGIuLjAwMDAwMDAKLS0tIGEvY3J5cHRvL3JzYS9yc2FfeDkzMWcuYworKysgL2Rldi9udWxsCkBAIC0xLDI1NSArMCwwIEBACi0vKiBjcnlwdG8vcnNhL3JzYV9nZW4uYyAqLwotLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgotICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgotICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgotICogCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKLSAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKLSAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgotICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcwotICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0gKiAKLSAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCi0gKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCi0gKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCi0gKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgotICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCi0gKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5Ci0gKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgotICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5Ci0gKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KLSAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAotICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKLSAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqIAotICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKLSAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQotICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQotICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx0aW1lLmg+Ci0jaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0jaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KLQotI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLQotLyogWDkuMzEgUlNBIGtleSBkZXJpdmF0aW9uIGFuZCBnZW5lcmF0aW9uICovCi0KLWludCBSU0FfWDkzMV9kZXJpdmVfZXgoUlNBICpyc2EsIEJJR05VTSAqcDEsIEJJR05VTSAqcDIsIEJJR05VTSAqcTEsIEJJR05VTSAqcTIsCi0JCQljb25zdCBCSUdOVU0gKlhwMSwgY29uc3QgQklHTlVNICpYcDIsIGNvbnN0IEJJR05VTSAqWHAsCi0JCQljb25zdCBCSUdOVU0gKlhxMSwgY29uc3QgQklHTlVNICpYcTIsIGNvbnN0IEJJR05VTSAqWHEsCi0JCQljb25zdCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYikKLQl7Ci0JQklHTlVNICpyMD1OVUxMLCpyMT1OVUxMLCpyMj1OVUxMLCpyMz1OVUxMOwotCUJOX0NUWCAqY3R4PU5VTEwsKmN0eDI9TlVMTDsKLQotCWlmICghcnNhKSAKLQkJZ290byBlcnI7Ci0KLQljdHggPSBCTl9DVFhfbmV3KCk7Ci0JaWYgKCFjdHgpIAotCQlnb3RvIGVycjsKLQlCTl9DVFhfc3RhcnQoY3R4KTsKLQotCXIwID0gQk5fQ1RYX2dldChjdHgpOwotCXIxID0gQk5fQ1RYX2dldChjdHgpOwotCXIyID0gQk5fQ1RYX2dldChjdHgpOwotCXIzID0gQk5fQ1RYX2dldChjdHgpOwotCi0JaWYgKHIzID09IE5VTEwpCi0JCWdvdG8gZXJyOwotCWlmICghcnNhLT5lKQotCQl7Ci0JCXJzYS0+ZSA9IEJOX2R1cChlKTsKLQkJaWYgKCFyc2EtPmUpCi0JCQlnb3RvIGVycjsKLQkJfQotCWVsc2UKLQkJZSA9IHJzYS0+ZTsKLQotCS8qIElmIG5vdCBhbGwgcGFyYW1ldGVycyBwcmVzZW50IG9ubHkgY2FsY3VsYXRlIHdoYXQgd2UgY2FuLgotCSAqIFRoaXMgYWxsb3dzIHRlc3QgcHJvZ3JhbXMgdG8gb3V0cHV0IHNlbGVjdGl2ZSBwYXJhbWV0ZXJzLgotCSAqLwotCi0JaWYgKFhwICYmICFyc2EtPnApCi0JCXsKLQkJcnNhLT5wID0gQk5fbmV3KCk7Ci0JCWlmICghcnNhLT5wKQotCQkJZ290byBlcnI7Ci0KLQkJaWYgKCFCTl9YOTMxX2Rlcml2ZV9wcmltZV9leChyc2EtPnAsIHAxLCBwMiwKLQkJCQkJWHAsIFhwMSwgWHAyLCBlLCBjdHgsIGNiKSkKLQkJCWdvdG8gZXJyOwotCQl9Ci0KLQlpZiAoWHEgJiYgIXJzYS0+cSkKLQkJewotCQlyc2EtPnEgPSBCTl9uZXcoKTsKLQkJaWYgKCFyc2EtPnEpCi0JCQlnb3RvIGVycjsKLQkJaWYgKCFCTl9YOTMxX2Rlcml2ZV9wcmltZV9leChyc2EtPnEsIHExLCBxMiwKLQkJCQkJWHEsIFhxMSwgWHEyLCBlLCBjdHgsIGNiKSkKLQkJCWdvdG8gZXJyOwotCQl9Ci0KLQlpZiAoIXJzYS0+cCB8fCAhcnNhLT5xKQotCQl7Ci0JCUJOX0NUWF9lbmQoY3R4KTsKLQkJQk5fQ1RYX2ZyZWUoY3R4KTsKLQkJcmV0dXJuIDI7Ci0JCX0KLQotCS8qIFNpbmNlIGJvdGggcHJpbWVzIGFyZSBzZXQgd2UgY2FuIG5vdyBjYWxjdWxhdGUgYWxsIHJlbWFpbmluZyAKLQkgKiBjb21wb25lbnRzLgotCSAqLwotCi0JLyogY2FsY3VsYXRlIG4gKi8KLQlyc2EtPm49Qk5fbmV3KCk7Ci0JaWYgKHJzYS0+biA9PSBOVUxMKQotCQlnb3RvIGVycjsKLQlpZiAoIUJOX211bChyc2EtPm4scnNhLT5wLHJzYS0+cSxjdHgpKQotCQlnb3RvIGVycjsKLQotCS8qIGNhbGN1bGF0ZSBkICovCi0JaWYgKCFCTl9zdWIocjEscnNhLT5wLEJOX3ZhbHVlX29uZSgpKSkKLQkJZ290byBlcnI7CS8qIHAtMSAqLwotCWlmICghQk5fc3ViKHIyLHJzYS0+cSxCTl92YWx1ZV9vbmUoKSkpCi0JCWdvdG8gZXJyOwkvKiBxLTEgKi8KLQlpZiAoIUJOX211bChyMCxyMSxyMixjdHgpKQotCQlnb3RvIGVycjsJLyogKHAtMSkocS0xKSAqLwotCi0JaWYgKCFCTl9nY2QocjMsIHIxLCByMiwgY3R4KSkKLQkJZ290byBlcnI7Ci0KLQlpZiAoIUJOX2RpdihyMCwgTlVMTCwgcjAsIHIzLCBjdHgpKQotCQlnb3RvIGVycjsJLyogTENNKChwLTEpKHEtMSkpICovCi0KLQljdHgyID0gQk5fQ1RYX25ldygpOwotCWlmICghY3R4MikKLQkJZ290byBlcnI7Ci0KLQlyc2EtPmQ9Qk5fbW9kX2ludmVyc2UoTlVMTCxyc2EtPmUscjAsY3R4Mik7CS8qIGQgKi8KLQlpZiAocnNhLT5kID09IE5VTEwpCi0JCWdvdG8gZXJyOwotCi0JLyogY2FsY3VsYXRlIGQgbW9kIChwLTEpICovCi0JcnNhLT5kbXAxPUJOX25ldygpOwotCWlmIChyc2EtPmRtcDEgPT0gTlVMTCkKLQkJZ290byBlcnI7Ci0JaWYgKCFCTl9tb2QocnNhLT5kbXAxLHJzYS0+ZCxyMSxjdHgpKQotCQlnb3RvIGVycjsKLQotCS8qIGNhbGN1bGF0ZSBkIG1vZCAocS0xKSAqLwotCXJzYS0+ZG1xMT1CTl9uZXcoKTsKLQlpZiAocnNhLT5kbXExID09IE5VTEwpCi0JCWdvdG8gZXJyOwotCWlmICghQk5fbW9kKHJzYS0+ZG1xMSxyc2EtPmQscjIsY3R4KSkKLQkJZ290byBlcnI7Ci0KLQkvKiBjYWxjdWxhdGUgaW52ZXJzZSBvZiBxIG1vZCBwICovCi0JcnNhLT5pcW1wPUJOX21vZF9pbnZlcnNlKE5VTEwscnNhLT5xLHJzYS0+cCxjdHgyKTsKLQotCWVycjoKLQlpZiAoY3R4KQotCQl7Ci0JCUJOX0NUWF9lbmQoY3R4KTsKLQkJQk5fQ1RYX2ZyZWUoY3R4KTsKLQkJfQotCWlmIChjdHgyKQotCQlCTl9DVFhfZnJlZShjdHgyKTsKLQkvKiBJZiB0aGlzIGlzIHNldCBhbGwgY2FsbHMgc3VjY2Vzc2Z1bCAqLwotCWlmIChyc2EgJiYgcnNhLT5pcW1wICE9IE5VTEwpCi0JCXJldHVybiAxOwotCi0JcmV0dXJuIDA7Ci0KLQl9Ci0KLWludCBSU0FfWDkzMV9nZW5lcmF0ZV9rZXlfZXgoUlNBICpyc2EsIGludCBiaXRzLCBjb25zdCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYikKLQl7Ci0JaW50IG9rID0gMDsKLQlCSUdOVU0gKlhwID0gTlVMTCwgKlhxID0gTlVMTDsKLQlCTl9DVFggKmN0eCA9IE5VTEw7Ci0JCi0JY3R4ID0gQk5fQ1RYX25ldygpOwotCWlmICghY3R4KQotCQlnb3RvIGVycm9yOwotCi0JQk5fQ1RYX3N0YXJ0KGN0eCk7Ci0JWHAgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0JWHEgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0JaWYgKCFCTl9YOTMxX2dlbmVyYXRlX1hwcShYcCwgWHEsIGJpdHMsIGN0eCkpCi0JCWdvdG8gZXJyb3I7Ci0KLQlyc2EtPnAgPSBCTl9uZXcoKTsKLQlyc2EtPnEgPSBCTl9uZXcoKTsKLQlpZiAoIXJzYS0+cCB8fCAhcnNhLT5xKQotCQlnb3RvIGVycm9yOwotCi0JLyogR2VuZXJhdGUgdHdvIHByaW1lcyBmcm9tIFhwLCBYcSAqLwotCi0JaWYgKCFCTl9YOTMxX2dlbmVyYXRlX3ByaW1lX2V4KHJzYS0+cCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgWHAsCi0JCQkJCWUsIGN0eCwgY2IpKQotCQlnb3RvIGVycm9yOwotCi0JaWYgKCFCTl9YOTMxX2dlbmVyYXRlX3ByaW1lX2V4KHJzYS0+cSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgWHEsCi0JCQkJCWUsIGN0eCwgY2IpKQotCQlnb3RvIGVycm9yOwotCi0JLyogU2luY2UgcnNhLT5wIGFuZCByc2EtPnEgYXJlIHZhbGlkIHRoaXMgY2FsbCB3aWxsIGp1c3QgZGVyaXZlCi0JICogcmVtYWluaW5nIFJTQSBjb21wb25lbnRzLgotCSAqLwotCi0JaWYgKCFSU0FfWDkzMV9kZXJpdmVfZXgocnNhLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAotCQkJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIGUsIGNiKSkKLQkJZ290byBlcnJvcjsKLQotCW9rID0gMTsKLQotCWVycm9yOgotCWlmIChjdHgpCi0JCXsKLQkJQk5fQ1RYX2VuZChjdHgpOwotCQlCTl9DVFhfZnJlZShjdHgpOwotCQl9Ci0KLQlpZiAob2spCi0JCXJldHVybiAxOwotCi0JcmV0dXJuIDA7Ci0KLQl9Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvY3J5cHRvL3MzOTB4Y2FwLmMgYi9jcnlwdG8vczM5MHhjYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmJlMDIzCi0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL3MzOTB4Y2FwLmMKQEAgLTAsMCArMSwzNyBAQAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c2V0am1wLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIE9QRU5TU0xfczM5MHhjYXBfUDsKKworc3RhdGljIHNpZ2ptcF9idWYgaWxsX2ptcDsKK3N0YXRpYyB2b2lkIGlsbF9oYW5kbGVyIChpbnQgc2lnKSB7IHNpZ2xvbmdqbXAoaWxsX2ptcCxzaWcpOyB9CisKK3Vuc2lnbmVkIGxvbmcgT1BFTlNTTF9zMzkweF9mYWNpbGl0aWVzKHZvaWQpOworCit2b2lkIE9QRU5TU0xfY3B1aWRfc2V0dXAodm9pZCkKKwl7CisJc2lnc2V0X3Qgb3NldDsKKwlzdHJ1Y3Qgc2lnYWN0aW9uIGlsbF9hY3Qsb2FjdDsKKworCWlmIChPUEVOU1NMX3MzOTB4Y2FwX1ApIHJldHVybjsKKworCW1lbXNldCgmaWxsX2FjdCwwLHNpemVvZihpbGxfYWN0KSk7CisJaWxsX2FjdC5zYV9oYW5kbGVyID0gaWxsX2hhbmRsZXI7CisJc2lnZmlsbHNldCgmaWxsX2FjdC5zYV9tYXNrKTsKKwlzaWdkZWxzZXQoJmlsbF9hY3Quc2FfbWFzayxTSUdJTEwpOworCXNpZ2RlbHNldCgmaWxsX2FjdC5zYV9tYXNrLFNJR1RSQVApOworCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCZpbGxfYWN0LnNhX21hc2ssJm9zZXQpOworCXNpZ2FjdGlvbiAoU0lHSUxMLCZpbGxfYWN0LCZvYWN0KTsKKworCS8qIHByb3RlY3Rpb24gYWdhaW5zdCBtaXNzaW5nIHN0b3JlLWZhY2lsaXR5LWxpc3QtZXh0ZW5kZWQgKi8KKwlpZiAoc2lnc2V0am1wKGlsbF9qbXAsMCkgPT0gMCkKKwkJT1BFTlNTTF9zMzkweGNhcF9QID0gT1BFTlNTTF9zMzkweF9mYWNpbGl0aWVzKCk7CisJZWxzZQorCQlPUEVOU1NMX3MzOTB4Y2FwX1AgPSAxVUw8PDYzOworCisJc2lnYWN0aW9uIChTSUdJTEwsJm9hY3QsTlVMTCk7CisJc2lncHJvY21hc2soU0lHX1NFVE1BU0ssJm9zZXQsTlVMTCk7CisJfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL3MzOTB4Y3B1aWQuUyBiL2NyeXB0by9zMzkweGNwdWlkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA1M2M2YQotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9zMzkweGNwdWlkLlMKQEAgLTAsMCArMSw5MiBAQAorLnRleHQKKworLmdsb2JsCU9QRU5TU0xfczM5MHhfZmFjaWxpdGllcworLnR5cGUJT1BFTlNTTF9zMzkweF9mYWNpbGl0aWVzLEBmdW5jdGlvbgorLmFsaWduCTE2CitPUEVOU1NMX3MzOTB4X2ZhY2lsaXRpZXM6CisJbGdoaQklcjAsMAorCS5sb25nCTB4YjJiMGYwMTAJIyBzdGZsZQkxNiglcjE1KQorCWxnCSVyMiwxNiglcjE1KQorCWxhcmwJJXIxLE9QRU5TU0xfczM5MHhjYXBfUAorCXN0ZwklcjIsMCglcjEpCisJYnIJJXIxNAorLnNpemUJT1BFTlNTTF9zMzkweF9mYWNpbGl0aWVzLC4tT1BFTlNTTF9zMzkweF9mYWNpbGl0aWVzCisKKy5nbG9ibAlPUEVOU1NMX3JkdHNjCisudHlwZQlPUEVOU1NMX3JkdHNjLEBmdW5jdGlvbgorLmFsaWduCTE2CitPUEVOU1NMX3JkdHNjOgorCXN0Y2sJMTYoJXIxNSkKKwlsZwklcjIsMTYoJXIxNSkKKwlicgklcjE0Cisuc2l6ZQlPUEVOU1NMX3JkdHNjLC4tT1BFTlNTTF9yZHRzYworCisuZ2xvYmwJT1BFTlNTTF9hdG9taWNfYWRkCisudHlwZQlPUEVOU1NMX2F0b21pY19hZGQsQGZ1bmN0aW9uCisuYWxpZ24JMTYKK09QRU5TU0xfYXRvbWljX2FkZDoKKwlsCSVyMSwwKCVyMikKKy5Mc3BpbjoJbHIJJXIwLCVyMQorCWFyCSVyMCwlcjMKKwljcwklcjEsJXIwLDAoJXIyKQorCWJyYwk0LC5Mc3BpbgorCWxnZnIJJXIyLCVyMAkJIyBPcGVuU1NMIGV4cGVjdHMgdGhlIG5ldyB2YWx1ZQorCWJyCSVyMTQKKy5zaXplCU9QRU5TU0xfYXRvbWljX2FkZCwuLU9QRU5TU0xfYXRvbWljX2FkZAorCisuZ2xvYmwJT1BFTlNTTF93aXBlX2NwdQorLnR5cGUJT1BFTlNTTF93aXBlX2NwdSxAZnVuY3Rpb24KKy5hbGlnbgkxNgorT1BFTlNTTF93aXBlX2NwdToKKwl4Z3IJJXIwLCVyMAorCXhncgklcjEsJXIxCisJbGdyCSVyMiwlcjE1CisJeGdyCSVyMywlcjMKKwl4Z3IJJXI0LCVyNAorCWx6ZHIJJWYwCisJbHpkcgklZjEKKwlsemRyCSVmMgorCWx6ZHIJJWYzCisJbHpkcgklZjQKKwlsemRyCSVmNQorCWx6ZHIJJWY2CisJbHpkcgklZjcKKwlicgklcjE0Cisuc2l6ZQlPUEVOU1NMX3dpcGVfY3B1LC4tT1BFTlNTTF93aXBlX2NwdQorCisuZ2xvYmwJT1BFTlNTTF9jbGVhbnNlCisudHlwZQlPUEVOU1NMX2NsZWFuc2UsQGZ1bmN0aW9uCisuYWxpZ24JMTYKK09QRU5TU0xfY2xlYW5zZToKKwlsZ2hpCSVyNCwxNQorCWxnaGkJJXIwLDAKKwljbGdyCSVyMywlcjQKKwlqaAkuTG90CisJY2xncgklcjMsJXIwCisJYmNyCTgsJXIxNAorLkxpdHRsZToKKwlzdGMJJXIwLDAoJXIyKQorCWxhCSVyMiwxKCVyMikKKwlicmN0ZwklcjMsLkxpdHRsZQorCWJyCSVyMTQKKy5hbGlnbgk0CisuTG90Ogl0bWxsCSVyMiw3CisJanoJLkxhbGlnbmVkCisJc3RjCSVyMCwwKCVyMikKKwlsYQklcjIsMSglcjIpCisJYnJjdGcJJXIzLC5Mb3QKKy5MYWxpZ25lZDoKKwlzcmxnCSVyNCwlcjMsMworLkxvb3A6CXN0ZwklcjAsMCglcjIpCisJbGEJJXIyLDgoJXIyKQorCWJyY3RnCSVyNCwuTG9vcAorCWxnaGkJJXI0LDcKKwluZ3IJJXIzLCVyNAorCWpuegkuTGl0dGxlCisJYnIJJXIxNAorLnNpemUJT1BFTlNTTF9jbGVhbnNlLC4tT1BFTlNTTF9jbGVhbnNlCisKKy5zZWN0aW9uCS5pbml0CisJYnJhc2wJJXIxNCxPUEVOU1NMX2NwdWlkX3NldHVwCisKKy5jb21tCU9QRU5TU0xfczM5MHhjYXBfUCw4LDgKZGlmZiAtLWdpdCBhL2NyeXB0by9zaGEvTWFrZWZpbGUgYi9jcnlwdG8vc2hhL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDc0MWI5Li4wMDAwMDAwCi0tLSBhL2NyeXB0by9zaGEvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwxNDYgKzAsMCBAQAotIwotIyBPcGVuU1NML2NyeXB0by9zaGEvTWFrZWZpbGUKLSMKLQotRElSPSAgICBzaGEKLVRPUD0gICAgLi4vLi4KLUNDPSAgICAgY2MKLUNQUD0gICAgJChDQykgLUUKLUlOQ0xVREVTPQotQ0ZMQUc9LWcKLU1BS0VGSUxFPSAgICAgICBNYWtlZmlsZQotQVI9ICAgICAgICAgICAgIGFyIHIKLQotU0hBMV9BU01fT0JKPQotCi1DRkxBR1M9ICQoSU5DTFVERVMpICQoQ0ZMQUcpCi1BU0ZMQUdTPSAkKElOQ0xVREVTKSAkKEFTRkxBRykKLUFGTEFHUz0gJChBU0ZMQUdTKQotCi1HRU5FUkFMPU1ha2VmaWxlCi1URVNUPXNoYXRlc3QuYyBzaGExdGVzdC5jIHNoYTI1NnQuYyBzaGE1MTJ0LmMKLUFQUFM9Ci0KLUxJQj0kKFRPUCkvbGliY3J5cHRvLmEKLUxJQlNSQz1zaGFfZGdzdC5jIHNoYTFkZ3N0LmMgc2hhX29uZS5jIHNoYTFfb25lLmMgc2hhMjU2LmMgc2hhNTEyLmMKLUxJQk9CSj1zaGFfZGdzdC5vIHNoYTFkZ3N0Lm8gc2hhX29uZS5vIHNoYTFfb25lLm8gc2hhMjU2Lm8gc2hhNTEyLm8gJChTSEExX0FTTV9PQkopCi0KLVNSQz0gJChMSUJTUkMpCi0KLUVYSEVBREVSPSBzaGEuaAotSEVBREVSPSBzaGFfbG9jbC5oICQoRVhIRUFERVIpCi0KLUFMTD0gICAgJChHRU5FUkFMKSAkKFNSQykgJChIRUFERVIpCi0KLXRvcDoKLQkoY2QgLi4vLi47ICQoTUFLRSkgRElSUz1jcnlwdG8gU0RJUlM9JChESVIpIHN1Yl9hbGwpCi0KLWFsbDogICAgbGliCi0KLWxpYjogICAgJChMSUJPQkopCi0JJChBUlgpICQoTElCKSAkKExJQk9CSikKLQkkKFJBTkxJQikgJChMSUIpIHx8IGVjaG8gTmV2ZXIgbWluZC4KLQlAdG91Y2ggbGliCi0KLSMgRUxGCi1zeDg2LWVsZi5zOiBhc20vc2hhMS01ODYucGwgLi4vcGVybGFzbS94ODZhc20ucGwKLQkoY2QgYXNtOyAkKFBFUkwpIHNoYTEtNTg2LnBsIGVsZiAkKENGTEFHUykgJChQUk9DRVNTT1IpID4gLi4vJEApCi1zNTEyc3NlMi1lbGYuczoJYXNtL3NoYTUxMi1zc2UyLnBsIC4uL3Blcmxhc20veDg2YXNtLnBsCi0JKGNkIGFzbTsgJChQRVJMKSBzaGE1MTItc3NlMi5wbCBlbGYgJChDRkxBR1MpICQoUFJPQ0VTU09SKSA+IC4uLyRAKQotIyBDT0ZGCi1zeDg2LWNvZi5zOiBhc20vc2hhMS01ODYucGwgLi4vcGVybGFzbS94ODZhc20ucGwKLQkoY2QgYXNtOyAkKFBFUkwpIHNoYTEtNTg2LnBsIGNvZmYgJChDRkxBR1MpICQoUFJPQ0VTU09SKSA+IC4uLyRAKQotczUxMnNzZTItY29mLnM6ICAgICBhc20vc2hhNTEyLXNzZTIucGwgLi4vcGVybGFzbS94ODZhc20ucGwKLQkoY2QgYXNtOyAkKFBFUkwpIHNoYTUxMi1zc2UyLnBsIGNvZmYgJChDRkxBR1MpICQoUFJPQ0VTU09SKSA+IC4uLyRAKQotIyBhLm91dAotc3g4Ni1vdXQuczogYXNtL3NoYTEtNTg2LnBsIC4uL3Blcmxhc20veDg2YXNtLnBsCi0JKGNkIGFzbTsgJChQRVJMKSBzaGExLTU4Ni5wbCBhLm91dCAkKENGTEFHUykgJChQUk9DRVNTT1IpID4gLi4vJEApCi1zNTEyc3NlMi1vdXQuczogICAgIGFzbS9zaGE1MTItc3NlMi5wbCAuLi9wZXJsYXNtL3g4NmFzbS5wbAotCShjZCBhc207ICQoUEVSTCkgc2hhNTEyLXNzZTIucGwgYS5vdXQgJChDRkxBR1MpICQoUFJPQ0VTU09SKSA+IC4uLyRAKQotCi1zaGExLWlhNjQuczogICBhc20vc2hhMS1pYTY0LnBsCi0JKGNkIGFzbTsgJChQRVJMKSBzaGExLWlhNjQucGwgLi4vJEAgJChDRkxBR1MpKQotc2hhMjU2LWlhNjQuczogYXNtL3NoYTUxMi1pYTY0LnBsCi0JKGNkIGFzbTsgJChQRVJMKSBzaGE1MTItaWE2NC5wbCAuLi8kQCAkKENGTEFHUykpCi1zaGE1MTItaWE2NC5zOiBhc20vc2hhNTEyLWlhNjQucGwKLQkoY2QgYXNtOyAkKFBFUkwpIHNoYTUxMi1pYTY0LnBsIC4uLyRAICQoQ0ZMQUdTKSkKLQotIyBTb2xhcmlzIG1ha2UgaGFzIHRvIGJlIGV4cGxpY2l0bHkgdG9sZAotc2hhMS14ODZfNjQuczoJYXNtL3NoYTEteDg2XzY0LnBsOwkkKFBFUkwpIGFzbS9zaGExLXg4Nl82NC5wbCAkQAotc2hhMjU2LXg4Nl82NC5zOmFzbS9zaGE1MTIteDg2XzY0LnBsOwkkKFBFUkwpIGFzbS9zaGE1MTIteDg2XzY0LnBsICRACi1zaGE1MTIteDg2XzY0LnM6YXNtL3NoYTUxMi14ODZfNjQucGw7CSQoUEVSTCkgYXNtL3NoYTUxMi14ODZfNjQucGwgJEAKLQotZmlsZXM6Ci0JJChQRVJMKSAkKFRPUCkvdXRpbC9maWxlcy5wbCBNYWtlZmlsZSA+PiAkKFRPUCkvTUlORk8KLQotbGlua3M6Ci0JQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL2luY2x1ZGUvb3BlbnNzbCAkKEVYSEVBREVSKQotCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi90ZXN0ICQoVEVTVCkKLQlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vYXBwcyAkKEFQUFMpCi0KLWluc3RhbGw6Ci0JQFsgLW4gIiQoSU5TVEFMTFRPUCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHRvcCBNYWtlZmlsZS4uLgotCUBoZWFkZXJsaXN0PSIkKEVYSEVBREVSKSI7IGZvciBpIGluICQkaGVhZGVybGlzdCA7IFwKLQlkbyAgXAotCShjcCAkJGkgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGk7IFwKLQljaG1vZCA2NDQgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGkgKTsgXAotCWRvbmU7Ci0KLXRhZ3M6Ci0JY3RhZ3MgJChTUkMpCi0KLXRlc3RzOgotCi1saW50OgotCWxpbnQgLURMSU5UICQoSU5DTFVERVMpICQoU1JDKT5mbHVmZgotCi1kZXBlbmQ6Ci0JQFsgLW4gIiQoTUFLRURFUEVORCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHVwcGVyIE1ha2VmaWxlLi4uCi0JJChNQUtFREVQRU5EKSAtLSAkKENGTEFHKSAkKElOQ0xVREVTKSAkKERFUEZMQUcpIC0tICQoUFJPR1MpICQoTElCU1JDKQotCi1kY2xlYW46Ci0JJChQRVJMKSAtcGUgJ2lmICgvXiMgRE8gTk9UIERFTEVURSBUSElTIExJTkUvKSB7cHJpbnQ7IGV4aXQoMCk7fScgJChNQUtFRklMRSkgPk1ha2VmaWxlLm5ldwotCW12IC1mIE1ha2VmaWxlLm5ldyAkKE1BS0VGSUxFKQotCi1jbGVhbjoKLQlybSAtZiAqLnMgKi5vICoub2JqIGxpYiB0YWdzIGNvcmUgLnB1cmUgLm5mcyogKi5vbGQgKi5iYWsgZmx1ZmYKLQotIyBETyBOT1QgREVMRVRFIFRISVMgTElORSAtLSBtYWtlIGRlcGVuZCBkZXBlbmRzIG9uIGl0LgotCi1zaGExX29uZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLXNoYTFfb25lLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1zaGExX29uZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotc2hhMV9vbmUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotc2hhMV9vbmUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLXNoYTFfb25lLm86IHNoYTFfb25lLmMKLXNoYTFkZ3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLXNoYTFkZ3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1zaGExZGdzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLXNoYTFkZ3N0Lm86IC4uL21kMzJfY29tbW9uLmggc2hhMWRnc3QuYyBzaGFfbG9jbC5oCi1zaGEyNTYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1zaGEyNTYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotc2hhMjU2Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1zaGEyNTYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotc2hhMjU2Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1zaGEyNTYubzogLi4vbWQzMl9jb21tb24uaCBzaGEyNTYuYwotc2hhNTEyLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXNoYTUxMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1zaGE1MTIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1zaGE1MTIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotc2hhNTEyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi1zaGE1MTIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1zaGE1MTIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1zaGE1MTIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBzaGE1MTIuYwotc2hhX2Rnc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotc2hhX2Rnc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1zaGFfZGdzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1zaGFfZGdzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotc2hhX2Rnc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXNoYV9kZ3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLXNoYV9kZ3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1zaGFfZGdzdC5vOiAuLi9tZDMyX2NvbW1vbi5oIHNoYV9kZ3N0LmMgc2hhX2xvY2wuaAotc2hhX29uZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLXNoYV9vbmUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLXNoYV9vbmUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1zaGFfb25lLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotc2hhX29uZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBzaGFfb25lLmMKZGlmZiAtLWdpdCBhL2NyeXB0by9zaGEvYXNtL3NoYTEtNTg2LnBsIGIvY3J5cHRvL3NoYS9hc20vc2hhMS01ODYucGwKaW5kZXggYTc4N2RkMy4uYTFmODc2MiAxMDA2NDQKLS0tIGEvY3J5cHRvL3NoYS9hc20vc2hhMS01ODYucGwKKysrIGIvY3J5cHRvL3NoYS9hc20vc2hhMS01ODYucGwKQEAgLTIxNSw1ICsyMTUsNiBAQAogCiAJJnN0YWNrX3BvcCgxNik7CiAmZnVuY3Rpb25fZW5kKCJzaGExX2Jsb2NrX2RhdGFfb3JkZXIiKTsKKyZhc2NpeigiU0hBMSBibG9jayB0cmFuc2Zvcm0gZm9yIHg4NiwgQ1JZUFRPR0FNUyBieSA8YXBwcm9cQG9wZW5zc2wub3JnPiIpOwogCiAmYXNtX2ZpbmlzaCgpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvLzAuOS45LWRldi9zaGEvc2hhMS1hcm12NC1sYXJnZS5wbCBiL2NyeXB0by9zaGEvYXNtL3NoYTEtYXJtdjQtbGFyZ2UucGwKc2ltaWxhcml0eSBpbmRleCA5MyUKcmVuYW1lIGZyb20gY3J5cHRvLzAuOS45LWRldi9zaGEvc2hhMS1hcm12NC1sYXJnZS5wbApyZW5hbWUgdG8gY3J5cHRvL3NoYS9hc20vc2hhMS1hcm12NC1sYXJnZS5wbAppbmRleCBkNDY4YmUzLi44ODg2MWFmIDEwMDY0NAotLS0gYS9jcnlwdG8vMC45LjktZGV2L3NoYS9zaGExLWFybXY0LWxhcmdlLnBsCisrKyBiL2NyeXB0by9zaGEvYXNtL3NoYTEtYXJtdjQtbGFyZ2UucGwKQEAgLTE4LDggKzE4LDggQEAKICMgdGh1bWIJCTMwNAkJMzIxMgkJNDQyMAogIyBhcm12NC1zbWFsbAkzOTIvKzI5JQkxOTU4Lys2NCUJMjI1MC8rOTYlCiAjIGFybXY0LWNvbXBhY3QJNzQwLys4OSUJMTU1Mi8rMjYlCTE4NDAvKzIyJQotIyBhcm12NC1sYXJnZQkxNDIwLys5MiUJMTMwNy8rMTklCTE1MDAvKzIzJQotIyBmdWxsIHVucm9sbAl+NTEwMC8rMjYwJQl+MTI2MC8rNCUJfjE1MDAvKzAlCisjIGFybXY0LWxhcmdlCTE0MjAvKzkyJQkxMzA3LysxOSUJMTM3MC8rMzQlWyoqKl0KKyMgZnVsbCB1bnJvbGwJfjUxMDAvKzI2MCUJfjEyNjAvKzQlCX4xMzAwLys1JQogIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIyB0aHVtYgkJPSBzYW1lIGFzICdzbWFsbCcgYnV0IGluIFRodW1iIGluc3RydWN0aW9uc1sqKl0gYW5kCiAjCQkgIHdpdGggcmVjdXJyaW5nIGNvZGUgaW4gdHdvIHByaXZhdGUgZnVuY3Rpb25zOwpAQCAtMzcsNiArMzcsNyBAQAogIwltb2RlcyBhcmUgbGltaXRlZC4gQXMgcmVzdWx0IGl0IHRha2VzIG1vcmUgaW5zdHJ1Y3Rpb25zIHRvIGRvCiAjCXRoZSBzYW1lIGpvYiBpbiBUaHVtYiwgdGhlcmVmb3JlIHRoZSBjb2RlIGlzIG5ldmVyIHR3aWNlIGFzCiAjCXNtYWxsIGFuZCBhbHdheXMgc2xvd2VyLgorIyBbKioqXQl3aGljaCBpcyBhbHNvIH4zNSUgYmV0dGVyIHRoYW4gY29tcGlsZXIgZ2VuZXJhdGVkIGNvZGUuCiAKICRvdXRwdXQ9c2hpZnQ7CiBvcGVuIFNURE9VVCwiPiRvdXRwdXQiOwpAQCAtNTAsOSArNTEsMTAgQEAKICRkPSJyNiI7CiAkZT0icjciOwogJEs9InI4IjsKLSR0MD0icjEwIjsKLSR0MT0icjExIjsKLSR0Mj0icjEyIjsKKyR0MD0icjkiOworJHQxPSJyMTAiOworJHQyPSJyMTEiOworJHQzPSJyMTIiOwogJFhpPSJyMTQiOwogQFY9KCRhLCRiLCRjLCRkLCRlKTsKIApAQCAtNjQsMTQgKzY2LDE0IEBACiAJbGRyYgkkdDAsWyRpbnBdLCM0CiAJbGRyYgkkdDEsWyRpbnAsIy0zXQogCWxkcmIJJHQyLFskaW5wLCMtMl0KKwlsZHJiCSR0MyxbJGlucCwjLTFdCiAJYWRkCSRlLCRLLCRlLHJvciMyCQkJQCBFKz1LXzAwXzE5CiAJb3JyCSR0MCwkdDEsJHQwLGxzbCM4Ci0JbGRyYgkkdDEsWyRpbnAsIy0xXQotCW9ycgkkdDAsJHQyLCR0MCxsc2wjOAogCWFkZAkkZSwkZSwkYSxyb3IjMjcJCQlAIEUrPVJPUihBLDI3KQotCW9ycgkkdDAsJHQxLCR0MCxsc2wjOAotCWFkZAkkZSwkZSwkdDAJCQlAIEUrPVhbaV0KKwlvcnIJJHQwLCR0MiwkdDAsbHNsIzgKIAllb3IJJHQxLCRjLCRkCQkJQCBGX3h4X3h4CisJb3JyCSR0MCwkdDMsJHQwLGxzbCM4CisJYWRkCSRlLCRlLCR0MAkJCUAgRSs9WFtpXQogCXN0cgkkdDAsWyRYaSwjLTRdIQogX19fCiB9CkBAIC04MSwxMiArODMsMTIgQEAKIAlsZHIJJHQwLFskWGksIzE1KjRdCiAJbGRyCSR0MSxbJFhpLCMxMyo0XQogCWxkcgkkdDIsWyRYaSwjNyo0XQorCWxkcgkkdDMsWyRYaSwjMio0XQogCWFkZAkkZSwkSywkZSxyb3IjMgkJCUAgRSs9S194eF94eAogCWVvcgkkdDAsJHQwLCR0MQotCWxkcgkkdDEsWyRYaSwjMio0XQotCWFkZAkkZSwkZSwkYSxyb3IjMjcJCQlAIEUrPVJPUihBLDI3KQogCWVvcgkkdDAsJHQwLCR0MgotCWVvcgkkdDAsJHQwLCR0MQorCWVvcgkkdDAsJHQwLCR0MworCWFkZAkkZSwkZSwkYSxyb3IjMjcJCQlAIEUrPVJPUihBLDI3KQogX19fCiAkY29kZS49PDxfX18gaWYgKCFkZWZpbmVkKCRmbGFnKSk7CiAJZW9yCSR0MSwkYywkZAkJCUAgRl94eF94eCwgYnV0IG5vdCBpbiA0MF81OQpAQCAtMjAzLDEyICsyMDUsMTIgQEAKIAliCS5MXzIwXzM5X29yXzYwXzc5CUAgWys0XSwgc3BhcmUgMzAwIGJ5dGVzCiAuTF9kb25lOgogCWFkZAlzcCxzcCwjODAqNAkJQCAiZGVhbGxvY2F0ZSIgc3RhY2sgZnJhbWUKLQlsZG1pYQkkY3R4LHskSywkdDAsJHQxLCR0MiwkWGl9CisJbGRtaWEJJGN0eCx7JEssJHQwLCR0MSwkdDIsJHQzfQogCWFkZAkkYSwkSywkYQogCWFkZAkkYiwkdDAsJGIKIAlhZGQJJGMsJHQxLCRjLHJvciMyCiAJYWRkCSRkLCR0MiwkZCxyb3IjMgotCWFkZAkkZSwkWGksJGUscm9yIzIKKwlhZGQJJGUsJHQzLCRlLHJvciMyCiAJc3RtaWEJJGN0eCx7JGEsJGIsJGMsJGQsJGV9CiAJdGVxCSRpbnAsJGxlbgogCWJuZQkuTGxvb3AJCQlAIFsrMThdLCB0b3RhbCAxMzA3CkBAIC0yMjQsNiArMjI2LDcgQEAKIC5MS182MF83OToJLndvcmQJMHhjYTYyYzFkNgogLnNpemUJc2hhMV9ibG9ja19kYXRhX29yZGVyLC4tc2hhMV9ibG9ja19kYXRhX29yZGVyCiAuYXNjaXoJIlNIQTEgYmxvY2sgdHJhbnNmb3JtIGZvciBBUk12NCwgQ1JZUFRPR0FNUyBieSA8YXBwcm9cQG9wZW5zc2wub3JnPiIKKy5hbGlnbgkyCiBfX18KIAogJGNvZGUgPX4gcy9cYmJ4XHMrbHJcYi8ud29yZFx0MHhlMTJmZmYxZS9nbTsJIyBtYWtlIGl0IHBvc3NpYmxlIHRvIGNvbXBpbGUgd2l0aCAtbWFyY2g9YXJtdjQKZGlmZiAtLWdpdCBhL2NyeXB0by9zaGEvYXNtL3NoYTEtYXJtdjQtbGFyZ2UucyBiL2NyeXB0by9zaGEvYXNtL3NoYTEtYXJtdjQtbGFyZ2UucwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmM5MGM1Ci0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL3NoYS9hc20vc2hhMS1hcm12NC1sYXJnZS5zCkBAIC0wLDAgKzEsMzc3IEBACisudGV4dAorCisuZ2xvYmFsCXNoYTFfYmxvY2tfZGF0YV9vcmRlcgorLnR5cGUJc2hhMV9ibG9ja19kYXRhX29yZGVyLCVmdW5jdGlvbgorCisuYWxpZ24JMgorc2hhMV9ibG9ja19kYXRhX29yZGVyOgorCXN0bWRiCXNwISx7cjQtcjEyLGxyfQorCWFkZAlyMixyMSxyMixsc2wjNglAIHIyIHRvIHBvaW50IGF0IHRoZSBlbmQgb2YgcjEKKwlsZG1pYQlyMCx7cjMscjQscjUscjYscjd9CisuTGxvb3A6CisJbGRyCXI4LC5MS18wMF8xOQorCW1vdglyMTQsc3AKKwlzdWIJc3Asc3AsIzE1KjQKKwltb3YJcjUscjUscm9yIzMwCisJbW92CXI2LHI2LHJvciMzMAorCW1vdglyNyxyNyxyb3IjMzAJCUAgWzZdCisuTF8wMF8xNToKKwlsZHJiCXI5LFtyMV0sIzQKKwlsZHJiCXIxMCxbcjEsIy0zXQorCWxkcmIJcjExLFtyMSwjLTJdCisJbGRyYglyMTIsW3IxLCMtMV0KKwlhZGQJcjcscjgscjcscm9yIzIJCQlAIEUrPUtfMDBfMTkKKwlvcnIJcjkscjEwLHI5LGxzbCM4CisJYWRkCXI3LHI3LHIzLHJvciMyNwkJCUAgRSs9Uk9SKEEsMjcpCisJb3JyCXI5LHIxMSxyOSxsc2wjOAorCWVvcglyMTAscjUscjYJCQlAIEZfeHhfeHgKKwlvcnIJcjkscjEyLHI5LGxzbCM4CisJYWRkCXI3LHI3LHI5CQkJQCBFKz1YW2ldCisJc3RyCXI5LFtyMTQsIy00XSEKKwlhbmQJcjEwLHI0LHIxMCxyb3IjMgorCWVvcglyMTAscjEwLHI2LHJvciMyCQlAIEZfMDBfMTkoQixDLEQpCisJYWRkCXI3LHI3LHIxMAkJCUAgRSs9Rl8wMF8xOShCLEMsRCkKKwlsZHJiCXI5LFtyMV0sIzQKKwlsZHJiCXIxMCxbcjEsIy0zXQorCWxkcmIJcjExLFtyMSwjLTJdCisJbGRyYglyMTIsW3IxLCMtMV0KKwlhZGQJcjYscjgscjYscm9yIzIJCQlAIEUrPUtfMDBfMTkKKwlvcnIJcjkscjEwLHI5LGxzbCM4CisJYWRkCXI2LHI2LHI3LHJvciMyNwkJCUAgRSs9Uk9SKEEsMjcpCisJb3JyCXI5LHIxMSxyOSxsc2wjOAorCWVvcglyMTAscjQscjUJCQlAIEZfeHhfeHgKKwlvcnIJcjkscjEyLHI5LGxzbCM4CisJYWRkCXI2LHI2LHI5CQkJQCBFKz1YW2ldCisJc3RyCXI5LFtyMTQsIy00XSEKKwlhbmQJcjEwLHIzLHIxMCxyb3IjMgorCWVvcglyMTAscjEwLHI1LHJvciMyCQlAIEZfMDBfMTkoQixDLEQpCisJYWRkCXI2LHI2LHIxMAkJCUAgRSs9Rl8wMF8xOShCLEMsRCkKKwlsZHJiCXI5LFtyMV0sIzQKKwlsZHJiCXIxMCxbcjEsIy0zXQorCWxkcmIJcjExLFtyMSwjLTJdCisJbGRyYglyMTIsW3IxLCMtMV0KKwlhZGQJcjUscjgscjUscm9yIzIJCQlAIEUrPUtfMDBfMTkKKwlvcnIJcjkscjEwLHI5LGxzbCM4CisJYWRkCXI1LHI1LHI2LHJvciMyNwkJCUAgRSs9Uk9SKEEsMjcpCisJb3JyCXI5LHIxMSxyOSxsc2wjOAorCWVvcglyMTAscjMscjQJCQlAIEZfeHhfeHgKKwlvcnIJcjkscjEyLHI5LGxzbCM4CisJYWRkCXI1LHI1LHI5CQkJQCBFKz1YW2ldCisJc3RyCXI5LFtyMTQsIy00XSEKKwlhbmQJcjEwLHI3LHIxMCxyb3IjMgorCWVvcglyMTAscjEwLHI0LHJvciMyCQlAIEZfMDBfMTkoQixDLEQpCisJYWRkCXI1LHI1LHIxMAkJCUAgRSs9Rl8wMF8xOShCLEMsRCkKKwlsZHJiCXI5LFtyMV0sIzQKKwlsZHJiCXIxMCxbcjEsIy0zXQorCWxkcmIJcjExLFtyMSwjLTJdCisJbGRyYglyMTIsW3IxLCMtMV0KKwlhZGQJcjQscjgscjQscm9yIzIJCQlAIEUrPUtfMDBfMTkKKwlvcnIJcjkscjEwLHI5LGxzbCM4CisJYWRkCXI0LHI0LHI1LHJvciMyNwkJCUAgRSs9Uk9SKEEsMjcpCisJb3JyCXI5LHIxMSxyOSxsc2wjOAorCWVvcglyMTAscjcscjMJCQlAIEZfeHhfeHgKKwlvcnIJcjkscjEyLHI5LGxzbCM4CisJYWRkCXI0LHI0LHI5CQkJQCBFKz1YW2ldCisJc3RyCXI5LFtyMTQsIy00XSEKKwlhbmQJcjEwLHI2LHIxMCxyb3IjMgorCWVvcglyMTAscjEwLHIzLHJvciMyCQlAIEZfMDBfMTkoQixDLEQpCisJYWRkCXI0LHI0LHIxMAkJCUAgRSs9Rl8wMF8xOShCLEMsRCkKKwlsZHJiCXI5LFtyMV0sIzQKKwlsZHJiCXIxMCxbcjEsIy0zXQorCWxkcmIJcjExLFtyMSwjLTJdCisJbGRyYglyMTIsW3IxLCMtMV0KKwlhZGQJcjMscjgscjMscm9yIzIJCQlAIEUrPUtfMDBfMTkKKwlvcnIJcjkscjEwLHI5LGxzbCM4CisJYWRkCXIzLHIzLHI0LHJvciMyNwkJCUAgRSs9Uk9SKEEsMjcpCisJb3JyCXI5LHIxMSxyOSxsc2wjOAorCWVvcglyMTAscjYscjcJCQlAIEZfeHhfeHgKKwlvcnIJcjkscjEyLHI5LGxzbCM4CisJYWRkCXIzLHIzLHI5CQkJQCBFKz1YW2ldCisJc3RyCXI5LFtyMTQsIy00XSEKKwlhbmQJcjEwLHI1LHIxMCxyb3IjMgorCWVvcglyMTAscjEwLHI3LHJvciMyCQlAIEZfMDBfMTkoQixDLEQpCisJYWRkCXIzLHIzLHIxMAkJCUAgRSs9Rl8wMF8xOShCLEMsRCkKKwl0ZXEJcjE0LHNwCisJYm5lCS5MXzAwXzE1CQlAIFsoKDExKzQpKjUrMikqM10KKwlsZHJiCXI5LFtyMV0sIzQKKwlsZHJiCXIxMCxbcjEsIy0zXQorCWxkcmIJcjExLFtyMSwjLTJdCisJbGRyYglyMTIsW3IxLCMtMV0KKwlhZGQJcjcscjgscjcscm9yIzIJCQlAIEUrPUtfMDBfMTkKKwlvcnIJcjkscjEwLHI5LGxzbCM4CisJYWRkCXI3LHI3LHIzLHJvciMyNwkJCUAgRSs9Uk9SKEEsMjcpCisJb3JyCXI5LHIxMSxyOSxsc2wjOAorCWVvcglyMTAscjUscjYJCQlAIEZfeHhfeHgKKwlvcnIJcjkscjEyLHI5LGxzbCM4CisJYWRkCXI3LHI3LHI5CQkJQCBFKz1YW2ldCisJc3RyCXI5LFtyMTQsIy00XSEKKwlhbmQJcjEwLHI0LHIxMCxyb3IjMgorCWVvcglyMTAscjEwLHI2LHJvciMyCQlAIEZfMDBfMTkoQixDLEQpCisJYWRkCXI3LHI3LHIxMAkJCUAgRSs9Rl8wMF8xOShCLEMsRCkKKwlsZHIJcjksW3IxNCwjMTUqNF0KKwlsZHIJcjEwLFtyMTQsIzEzKjRdCisJbGRyCXIxMSxbcjE0LCM3KjRdCisJbGRyCXIxMixbcjE0LCMyKjRdCisJYWRkCXI2LHI4LHI2LHJvciMyCQkJQCBFKz1LX3h4X3h4CisJZW9yCXI5LHI5LHIxMAorCWVvcglyOSxyOSxyMTEKKwllb3IJcjkscjkscjEyCisJYWRkCXI2LHI2LHI3LHJvciMyNwkJCUAgRSs9Uk9SKEEsMjcpCisJZW9yCXIxMCxyNCxyNQkJCUAgRl94eF94eCwgYnV0IG5vdCBpbiA0MF81OQorCW1vdglyOSxyOSxyb3IjMzEKKwlhZGQJcjYscjYscjkJCQlAIEUrPVhbaV0KKwlzdHIJcjksW3IxNCwjLTRdIQorCWFuZAlyMTAscjMscjEwLHJvciMyCisJZW9yCXIxMCxyMTAscjUscm9yIzIJCUAgRl8wMF8xOShCLEMsRCkKKwlhZGQJcjYscjYscjEwCQkJQCBFKz1GXzAwXzE5KEIsQyxEKQorCWxkcglyOSxbcjE0LCMxNSo0XQorCWxkcglyMTAsW3IxNCwjMTMqNF0KKwlsZHIJcjExLFtyMTQsIzcqNF0KKwlsZHIJcjEyLFtyMTQsIzIqNF0KKwlhZGQJcjUscjgscjUscm9yIzIJCQlAIEUrPUtfeHhfeHgKKwllb3IJcjkscjkscjEwCisJZW9yCXI5LHI5LHIxMQorCWVvcglyOSxyOSxyMTIKKwlhZGQJcjUscjUscjYscm9yIzI3CQkJQCBFKz1ST1IoQSwyNykKKwllb3IJcjEwLHIzLHI0CQkJQCBGX3h4X3h4LCBidXQgbm90IGluIDQwXzU5CisJbW92CXI5LHI5LHJvciMzMQorCWFkZAlyNSxyNSxyOQkJCUAgRSs9WFtpXQorCXN0cglyOSxbcjE0LCMtNF0hCisJYW5kCXIxMCxyNyxyMTAscm9yIzIKKwllb3IJcjEwLHIxMCxyNCxyb3IjMgkJQCBGXzAwXzE5KEIsQyxEKQorCWFkZAlyNSxyNSxyMTAJCQlAIEUrPUZfMDBfMTkoQixDLEQpCisJbGRyCXI5LFtyMTQsIzE1KjRdCisJbGRyCXIxMCxbcjE0LCMxMyo0XQorCWxkcglyMTEsW3IxNCwjNyo0XQorCWxkcglyMTIsW3IxNCwjMio0XQorCWFkZAlyNCxyOCxyNCxyb3IjMgkJCUAgRSs9S194eF94eAorCWVvcglyOSxyOSxyMTAKKwllb3IJcjkscjkscjExCisJZW9yCXI5LHI5LHIxMgorCWFkZAlyNCxyNCxyNSxyb3IjMjcJCQlAIEUrPVJPUihBLDI3KQorCWVvcglyMTAscjcscjMJCQlAIEZfeHhfeHgsIGJ1dCBub3QgaW4gNDBfNTkKKwltb3YJcjkscjkscm9yIzMxCisJYWRkCXI0LHI0LHI5CQkJQCBFKz1YW2ldCisJc3RyCXI5LFtyMTQsIy00XSEKKwlhbmQJcjEwLHI2LHIxMCxyb3IjMgorCWVvcglyMTAscjEwLHIzLHJvciMyCQlAIEZfMDBfMTkoQixDLEQpCisJYWRkCXI0LHI0LHIxMAkJCUAgRSs9Rl8wMF8xOShCLEMsRCkKKwlsZHIJcjksW3IxNCwjMTUqNF0KKwlsZHIJcjEwLFtyMTQsIzEzKjRdCisJbGRyCXIxMSxbcjE0LCM3KjRdCisJbGRyCXIxMixbcjE0LCMyKjRdCisJYWRkCXIzLHI4LHIzLHJvciMyCQkJQCBFKz1LX3h4X3h4CisJZW9yCXI5LHI5LHIxMAorCWVvcglyOSxyOSxyMTEKKwllb3IJcjkscjkscjEyCisJYWRkCXIzLHIzLHI0LHJvciMyNwkJCUAgRSs9Uk9SKEEsMjcpCisJZW9yCXIxMCxyNixyNwkJCUAgRl94eF94eCwgYnV0IG5vdCBpbiA0MF81OQorCW1vdglyOSxyOSxyb3IjMzEKKwlhZGQJcjMscjMscjkJCQlAIEUrPVhbaV0KKwlzdHIJcjksW3IxNCwjLTRdIQorCWFuZAlyMTAscjUscjEwLHJvciMyCisJZW9yCXIxMCxyMTAscjcscm9yIzIJCUAgRl8wMF8xOShCLEMsRCkKKwlhZGQJcjMscjMscjEwCQkJQCBFKz1GXzAwXzE5KEIsQyxEKQorCisJbGRyCXI4LC5MS18yMF8zOQkJQCBbKzE1KzE2KjRdCisJc3ViCXNwLHNwLCMyNSo0CisJY21uCXNwLCMwCQkJQCBbKzNdLCBjbGVhciBjYXJyeSB0byBkZW5vdGUgMjBfMzkKKy5MXzIwXzM5X29yXzYwXzc5OgorCWxkcglyOSxbcjE0LCMxNSo0XQorCWxkcglyMTAsW3IxNCwjMTMqNF0KKwlsZHIJcjExLFtyMTQsIzcqNF0KKwlsZHIJcjEyLFtyMTQsIzIqNF0KKwlhZGQJcjcscjgscjcscm9yIzIJCQlAIEUrPUtfeHhfeHgKKwllb3IJcjkscjkscjEwCisJZW9yCXI5LHI5LHIxMQorCWVvcglyOSxyOSxyMTIKKwlhZGQJcjcscjcscjMscm9yIzI3CQkJQCBFKz1ST1IoQSwyNykKKwllb3IJcjEwLHI1LHI2CQkJQCBGX3h4X3h4LCBidXQgbm90IGluIDQwXzU5CisJbW92CXI5LHI5LHJvciMzMQorCWFkZAlyNyxyNyxyOQkJCUAgRSs9WFtpXQorCXN0cglyOSxbcjE0LCMtNF0hCisJZW9yCXIxMCxyNCxyMTAscm9yIzIJCUAgRl8yMF8zOShCLEMsRCkKKwlhZGQJcjcscjcscjEwCQkJQCBFKz1GXzIwXzM5KEIsQyxEKQorCWxkcglyOSxbcjE0LCMxNSo0XQorCWxkcglyMTAsW3IxNCwjMTMqNF0KKwlsZHIJcjExLFtyMTQsIzcqNF0KKwlsZHIJcjEyLFtyMTQsIzIqNF0KKwlhZGQJcjYscjgscjYscm9yIzIJCQlAIEUrPUtfeHhfeHgKKwllb3IJcjkscjkscjEwCisJZW9yCXI5LHI5LHIxMQorCWVvcglyOSxyOSxyMTIKKwlhZGQJcjYscjYscjcscm9yIzI3CQkJQCBFKz1ST1IoQSwyNykKKwllb3IJcjEwLHI0LHI1CQkJQCBGX3h4X3h4LCBidXQgbm90IGluIDQwXzU5CisJbW92CXI5LHI5LHJvciMzMQorCWFkZAlyNixyNixyOQkJCUAgRSs9WFtpXQorCXN0cglyOSxbcjE0LCMtNF0hCisJZW9yCXIxMCxyMyxyMTAscm9yIzIJCUAgRl8yMF8zOShCLEMsRCkKKwlhZGQJcjYscjYscjEwCQkJQCBFKz1GXzIwXzM5KEIsQyxEKQorCWxkcglyOSxbcjE0LCMxNSo0XQorCWxkcglyMTAsW3IxNCwjMTMqNF0KKwlsZHIJcjExLFtyMTQsIzcqNF0KKwlsZHIJcjEyLFtyMTQsIzIqNF0KKwlhZGQJcjUscjgscjUscm9yIzIJCQlAIEUrPUtfeHhfeHgKKwllb3IJcjkscjkscjEwCisJZW9yCXI5LHI5LHIxMQorCWVvcglyOSxyOSxyMTIKKwlhZGQJcjUscjUscjYscm9yIzI3CQkJQCBFKz1ST1IoQSwyNykKKwllb3IJcjEwLHIzLHI0CQkJQCBGX3h4X3h4LCBidXQgbm90IGluIDQwXzU5CisJbW92CXI5LHI5LHJvciMzMQorCWFkZAlyNSxyNSxyOQkJCUAgRSs9WFtpXQorCXN0cglyOSxbcjE0LCMtNF0hCisJZW9yCXIxMCxyNyxyMTAscm9yIzIJCUAgRl8yMF8zOShCLEMsRCkKKwlhZGQJcjUscjUscjEwCQkJQCBFKz1GXzIwXzM5KEIsQyxEKQorCWxkcglyOSxbcjE0LCMxNSo0XQorCWxkcglyMTAsW3IxNCwjMTMqNF0KKwlsZHIJcjExLFtyMTQsIzcqNF0KKwlsZHIJcjEyLFtyMTQsIzIqNF0KKwlhZGQJcjQscjgscjQscm9yIzIJCQlAIEUrPUtfeHhfeHgKKwllb3IJcjkscjkscjEwCisJZW9yCXI5LHI5LHIxMQorCWVvcglyOSxyOSxyMTIKKwlhZGQJcjQscjQscjUscm9yIzI3CQkJQCBFKz1ST1IoQSwyNykKKwllb3IJcjEwLHI3LHIzCQkJQCBGX3h4X3h4LCBidXQgbm90IGluIDQwXzU5CisJbW92CXI5LHI5LHJvciMzMQorCWFkZAlyNCxyNCxyOQkJCUAgRSs9WFtpXQorCXN0cglyOSxbcjE0LCMtNF0hCisJZW9yCXIxMCxyNixyMTAscm9yIzIJCUAgRl8yMF8zOShCLEMsRCkKKwlhZGQJcjQscjQscjEwCQkJQCBFKz1GXzIwXzM5KEIsQyxEKQorCWxkcglyOSxbcjE0LCMxNSo0XQorCWxkcglyMTAsW3IxNCwjMTMqNF0KKwlsZHIJcjExLFtyMTQsIzcqNF0KKwlsZHIJcjEyLFtyMTQsIzIqNF0KKwlhZGQJcjMscjgscjMscm9yIzIJCQlAIEUrPUtfeHhfeHgKKwllb3IJcjkscjkscjEwCisJZW9yCXI5LHI5LHIxMQorCWVvcglyOSxyOSxyMTIKKwlhZGQJcjMscjMscjQscm9yIzI3CQkJQCBFKz1ST1IoQSwyNykKKwllb3IJcjEwLHI2LHI3CQkJQCBGX3h4X3h4LCBidXQgbm90IGluIDQwXzU5CisJbW92CXI5LHI5LHJvciMzMQorCWFkZAlyMyxyMyxyOQkJCUAgRSs9WFtpXQorCXN0cglyOSxbcjE0LCMtNF0hCisJZW9yCXIxMCxyNSxyMTAscm9yIzIJCUAgRl8yMF8zOShCLEMsRCkKKwlhZGQJcjMscjMscjEwCQkJQCBFKz1GXzIwXzM5KEIsQyxEKQorCXRlcQlyMTQsc3AJCQlAIHByZXNlcnZlIGNhcnJ5CisJYm5lCS5MXzIwXzM5X29yXzYwXzc5CUAgWysoKDEyKzMpKjUrMikqNF0KKwliY3MJLkxfZG9uZQkJCUAgWysoKDEyKzMpKjUrMikqNF0sIHNwYXJlIDMwMCBieXRlcworCisJbGRyCXI4LC5MS180MF81OQorCXN1YglzcCxzcCwjMjAqNAkJQCBbKzJdCisuTF80MF81OToKKwlsZHIJcjksW3IxNCwjMTUqNF0KKwlsZHIJcjEwLFtyMTQsIzEzKjRdCisJbGRyCXIxMSxbcjE0LCM3KjRdCisJbGRyCXIxMixbcjE0LCMyKjRdCisJYWRkCXI3LHI4LHI3LHJvciMyCQkJQCBFKz1LX3h4X3h4CisJZW9yCXI5LHI5LHIxMAorCWVvcglyOSxyOSxyMTEKKwllb3IJcjkscjkscjEyCisJYWRkCXI3LHI3LHIzLHJvciMyNwkJCUAgRSs9Uk9SKEEsMjcpCisJbW92CXI5LHI5LHJvciMzMQorCWFkZAlyNyxyNyxyOQkJCUAgRSs9WFtpXQorCXN0cglyOSxbcjE0LCMtNF0hCisJYW5kCXIxMCxyNCxyNSxyb3IjMgorCW9ycglyMTEscjQscjUscm9yIzIKKwlhbmQJcjExLHIxMSxyNixyb3IjMgorCW9ycglyMTAscjEwLHIxMQkJCUAgRl80MF81OShCLEMsRCkKKwlhZGQJcjcscjcscjEwCQkJQCBFKz1GXzQwXzU5KEIsQyxEKQorCWxkcglyOSxbcjE0LCMxNSo0XQorCWxkcglyMTAsW3IxNCwjMTMqNF0KKwlsZHIJcjExLFtyMTQsIzcqNF0KKwlsZHIJcjEyLFtyMTQsIzIqNF0KKwlhZGQJcjYscjgscjYscm9yIzIJCQlAIEUrPUtfeHhfeHgKKwllb3IJcjkscjkscjEwCisJZW9yCXI5LHI5LHIxMQorCWVvcglyOSxyOSxyMTIKKwlhZGQJcjYscjYscjcscm9yIzI3CQkJQCBFKz1ST1IoQSwyNykKKwltb3YJcjkscjkscm9yIzMxCisJYWRkCXI2LHI2LHI5CQkJQCBFKz1YW2ldCisJc3RyCXI5LFtyMTQsIy00XSEKKwlhbmQJcjEwLHIzLHI0LHJvciMyCisJb3JyCXIxMSxyMyxyNCxyb3IjMgorCWFuZAlyMTEscjExLHI1LHJvciMyCisJb3JyCXIxMCxyMTAscjExCQkJQCBGXzQwXzU5KEIsQyxEKQorCWFkZAlyNixyNixyMTAJCQlAIEUrPUZfNDBfNTkoQixDLEQpCisJbGRyCXI5LFtyMTQsIzE1KjRdCisJbGRyCXIxMCxbcjE0LCMxMyo0XQorCWxkcglyMTEsW3IxNCwjNyo0XQorCWxkcglyMTIsW3IxNCwjMio0XQorCWFkZAlyNSxyOCxyNSxyb3IjMgkJCUAgRSs9S194eF94eAorCWVvcglyOSxyOSxyMTAKKwllb3IJcjkscjkscjExCisJZW9yCXI5LHI5LHIxMgorCWFkZAlyNSxyNSxyNixyb3IjMjcJCQlAIEUrPVJPUihBLDI3KQorCW1vdglyOSxyOSxyb3IjMzEKKwlhZGQJcjUscjUscjkJCQlAIEUrPVhbaV0KKwlzdHIJcjksW3IxNCwjLTRdIQorCWFuZAlyMTAscjcscjMscm9yIzIKKwlvcnIJcjExLHI3LHIzLHJvciMyCisJYW5kCXIxMSxyMTEscjQscm9yIzIKKwlvcnIJcjEwLHIxMCxyMTEJCQlAIEZfNDBfNTkoQixDLEQpCisJYWRkCXI1LHI1LHIxMAkJCUAgRSs9Rl80MF81OShCLEMsRCkKKwlsZHIJcjksW3IxNCwjMTUqNF0KKwlsZHIJcjEwLFtyMTQsIzEzKjRdCisJbGRyCXIxMSxbcjE0LCM3KjRdCisJbGRyCXIxMixbcjE0LCMyKjRdCisJYWRkCXI0LHI4LHI0LHJvciMyCQkJQCBFKz1LX3h4X3h4CisJZW9yCXI5LHI5LHIxMAorCWVvcglyOSxyOSxyMTEKKwllb3IJcjkscjkscjEyCisJYWRkCXI0LHI0LHI1LHJvciMyNwkJCUAgRSs9Uk9SKEEsMjcpCisJbW92CXI5LHI5LHJvciMzMQorCWFkZAlyNCxyNCxyOQkJCUAgRSs9WFtpXQorCXN0cglyOSxbcjE0LCMtNF0hCisJYW5kCXIxMCxyNixyNyxyb3IjMgorCW9ycglyMTEscjYscjcscm9yIzIKKwlhbmQJcjExLHIxMSxyMyxyb3IjMgorCW9ycglyMTAscjEwLHIxMQkJCUAgRl80MF81OShCLEMsRCkKKwlhZGQJcjQscjQscjEwCQkJQCBFKz1GXzQwXzU5KEIsQyxEKQorCWxkcglyOSxbcjE0LCMxNSo0XQorCWxkcglyMTAsW3IxNCwjMTMqNF0KKwlsZHIJcjExLFtyMTQsIzcqNF0KKwlsZHIJcjEyLFtyMTQsIzIqNF0KKwlhZGQJcjMscjgscjMscm9yIzIJCQlAIEUrPUtfeHhfeHgKKwllb3IJcjkscjkscjEwCisJZW9yCXI5LHI5LHIxMQorCWVvcglyOSxyOSxyMTIKKwlhZGQJcjMscjMscjQscm9yIzI3CQkJQCBFKz1ST1IoQSwyNykKKwltb3YJcjkscjkscm9yIzMxCisJYWRkCXIzLHIzLHI5CQkJQCBFKz1YW2ldCisJc3RyCXI5LFtyMTQsIy00XSEKKwlhbmQJcjEwLHI1LHI2LHJvciMyCisJb3JyCXIxMSxyNSxyNixyb3IjMgorCWFuZAlyMTEscjExLHI3LHJvciMyCisJb3JyCXIxMCxyMTAscjExCQkJQCBGXzQwXzU5KEIsQyxEKQorCWFkZAlyMyxyMyxyMTAJCQlAIEUrPUZfNDBfNTkoQixDLEQpCisJdGVxCXIxNCxzcAorCWJuZQkuTF80MF81OQkJQCBbKygoMTIrNSkqNSsyKSo0XQorCisJbGRyCXI4LC5MS182MF83OQorCXN1YglzcCxzcCwjMjAqNAorCWNtcAlzcCwjMAkJCUAgc2V0IGNhcnJ5IHRvIGRlbm90ZSA2MF83OQorCWIJLkxfMjBfMzlfb3JfNjBfNzkJQCBbKzRdLCBzcGFyZSAzMDAgYnl0ZXMKKy5MX2RvbmU6CisJYWRkCXNwLHNwLCM4MCo0CQlAICJkZWFsbG9jYXRlIiBzdGFjayBmcmFtZQorCWxkbWlhCXIwLHtyOCxyOSxyMTAscjExLHIxMn0KKwlhZGQJcjMscjgscjMKKwlhZGQJcjQscjkscjQKKwlhZGQJcjUscjEwLHI1LHJvciMyCisJYWRkCXI2LHIxMSxyNixyb3IjMgorCWFkZAlyNyxyMTIscjcscm9yIzIKKwlzdG1pYQlyMCx7cjMscjQscjUscjYscjd9CisJdGVxCXIxLHIyCisJYm5lCS5MbG9vcAkJCUAgWysxOF0sIHRvdGFsIDEzMDcKKworCWxkbWlhCXNwISx7cjQtcjEyLGxyfQorCXRzdAlsciwjMQorCW1vdmVxCXBjLGxyCQkJQCBiZSBiaW5hcnkgY29tcGF0aWJsZSB3aXRoIFY0LCB5ZXQKKwkud29yZAkweGUxMmZmZjFlCQkJQCBpbnRlcm9wZXJhYmxlIHdpdGggVGh1bWIgSVNBOi0pCisuYWxpZ24JMgorLkxLXzAwXzE5Ogkud29yZAkweDVhODI3OTk5CisuTEtfMjBfMzk6CS53b3JkCTB4NmVkOWViYTEKKy5MS180MF81OToJLndvcmQJMHg4ZjFiYmNkYworLkxLXzYwXzc5Ogkud29yZAkweGNhNjJjMWQ2Cisuc2l6ZQlzaGExX2Jsb2NrX2RhdGFfb3JkZXIsLi1zaGExX2Jsb2NrX2RhdGFfb3JkZXIKKy5hc2NpegkiU0hBMSBibG9jayB0cmFuc2Zvcm0gZm9yIEFSTXY0LCBDUllQVE9HQU1TIGJ5IDxhcHByb0BvcGVuc3NsLm9yZz4iCisuYWxpZ24JMgpkaWZmIC0tZ2l0IGEvY3J5cHRvL3NoYS9hc20vc2hhMS1wcGMucGwgYi9jcnlwdG8vc2hhL2FzbS9zaGExLXBwYy5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kY2QwZmNkCi0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL3NoYS9hc20vc2hhMS1wcGMucGwKQEAgLTAsMCArMSwzMTkgQEAKKyMhL3Vzci9iaW4vZW52IHBlcmwKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPiBmb3IgdGhlIE9wZW5TU0wKKyMgcHJvamVjdC4gVGhlIG1vZHVsZSBpcywgaG93ZXZlciwgZHVhbCBsaWNlbnNlZCB1bmRlciBPcGVuU1NMIGFuZAorIyBDUllQVE9HQU1TIGxpY2Vuc2VzIGRlcGVuZGluZyBvbiB3aGVyZSB5b3Ugb2J0YWluIGl0LiBGb3IgZnVydGhlcgorIyBkZXRhaWxzIHNlZSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL35hcHByby9jcnlwdG9nYW1zLy4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyBJIGxldCBoYXJkd2FyZSBoYW5kbGUgdW5hbGlnbmVkIGlucHV0KCopLCBleGNlcHQgb24gcGFnZSBib3VuZGFyaWVzCisjIChzZWUgYmVsb3cgZm9yIGRldGFpbHMpLiBPdGhlcndpc2Ugc3RyYWlnaHRmb3J3YXJkIGltcGxlbWVudGF0aW9uCisjIHdpdGggWCB2ZWN0b3IgaW4gcmVnaXN0ZXIgYmFuay4gVGhlIG1vZHVsZSBpcyBiaWctZW5kaWFuIFt3aGljaCBpcworIyBub3QgYmlnIGRlYWwgYXMgdGhlcmUncmUgbm8gbGl0dGxlLWVuZGlhbiB0YXJnZXRzIGxlZnQgYXJvdW5kXS4KKyMKKyMgKCopIHRoaXMgbWVhbnMgdGhhdCB0aGlzIG1vZHVsZSBpcyBpbmFwcHJvcHJpYXRlIGZvciBQUEM0MDM/IERvZXMKKyMgICAgIGFueWJvZHkga25vdyBpZiBwcmUtUE9XRVIzIGNhbiBzdXN0YWluIHVuYWxpZ25lZCBsb2FkPworCisjIAkJCS1tNjQJLW0zMgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBQQzk3MCxnY2MtNC4wLjAJKzc2JQkrNTklCisjIFBvd2VyNix4bGMtNwkJKzY4JQkrMzMlCisKKyRmbGF2b3VyID0gc2hpZnQ7CisKK2lmICgkZmxhdm91ciA9fiAvNjQvKSB7CisJJFNJWkVfVAk9ODsKKwkkVUNNUAk9ImNtcGxkIjsKKwkkU1RVCT0ic3RkdSI7CisJJFBPUAk9ImxkIjsKKwkkUFVTSAk9InN0ZCI7Cit9IGVsc2lmICgkZmxhdm91ciA9fiAvMzIvKSB7CisJJFNJWkVfVAk9NDsKKwkkVUNNUAk9ImNtcGx3IjsKKwkkU1RVCT0ic3R3dSI7CisJJFBPUAk9Imx3eiI7CisJJFBVU0gJPSJzdHciOworfSBlbHNlIHsgZGllICJub25zZW5zZSAkZmxhdm91ciI7IH0KKworJDAgPX4gbS8oLipbXC9cXF0pW15cL1xcXSskLzsgJGRpcj0kMTsKKyggJHhsYXRlPSIke2Rpcn1wcGMteGxhdGUucGwiIGFuZCAtZiAkeGxhdGUgKSBvcgorKCAkeGxhdGU9IiR7ZGlyfS4uLy4uL3Blcmxhc20vcHBjLXhsYXRlLnBsIiBhbmQgLWYgJHhsYXRlKSBvcgorZGllICJjYW4ndCBsb2NhdGUgcHBjLXhsYXRlLnBsIjsKKworb3BlbiBTVERPVVQsInwgJF5YICR4bGF0ZSAkZmxhdm91ciAiLnNoaWZ0IHx8IGRpZSAiY2FuJ3QgY2FsbCAkeGxhdGU6ICQhIjsKKworJEZSQU1FPTI0KiRTSVpFX1Q7CisKKyRLICA9InIwIjsKKyRzcCA9InIxIjsKKyR0b2M9InIyIjsKKyRjdHg9InIzIjsKKyRpbnA9InI0IjsKKyRudW09InI1IjsKKyR0MCA9InIxNSI7CiskdDEgPSJyNiI7CisKKyRBICA9InI3IjsKKyRCICA9InI4IjsKKyRDICA9InI5IjsKKyREICA9InIxMCI7CiskRSAgPSJyMTEiOworJFQgID0icjEyIjsKKworQFY9KCRBLCRCLCRDLCRELCRFLCRUKTsKK0BYPSgicjE2IiwicjE3IiwicjE4IiwicjE5IiwicjIwIiwicjIxIiwicjIyIiwicjIzIiwKKyAgICAicjI0IiwicjI1IiwicjI2IiwicjI3IiwicjI4IiwicjI5IiwicjMwIiwicjMxIik7CisKK3N1YiBCT0RZXzAwXzE5IHsKK215ICgkaSwkYSwkYiwkYywkZCwkZSwkZik9QF87CitteSAkaj0kaSsxOworJGNvZGUuPTw8X19fIGlmICgkaT09MCk7CisJbHd6CUBYWyRpXSxgJGkqNGAoJGlucCkKK19fXworJGNvZGUuPTw8X19fIGlmICgkaTwxNSk7CisJbHd6CUBYWyRqXSxgJGoqNGAoJGlucCkKKwlhZGQJJGYsJEssJGUKKwlyb3Rsd2kJJGUsJGEsNQorCWFkZAkkZiwkZixAWFskaV0KKwlhbmQJJHQwLCRjLCRiCisJYWRkCSRmLCRmLCRlCisJYW5kYwkkdDEsJGQsJGIKKwlyb3Rsd2kJJGIsJGIsMzAKKwlvcgkkdDAsJHQwLCR0MQorCWFkZAkkZiwkZiwkdDAKK19fXworJGNvZGUuPTw8X19fIGlmICgkaT49MTUpOworCWFkZAkkZiwkSywkZQorCXJvdGx3aQkkZSwkYSw1CisJeG9yCUBYWyRqJTE2XSxAWFskaiUxNl0sQFhbKCRqKzIpJTE2XQorCWFkZAkkZiwkZixAWFskaSUxNl0KKwlhbmQJJHQwLCRjLCRiCisJeG9yCUBYWyRqJTE2XSxAWFskaiUxNl0sQFhbKCRqKzgpJTE2XQorCWFkZAkkZiwkZiwkZQorCWFuZGMJJHQxLCRkLCRiCisJcm90bHdpCSRiLCRiLDMwCisJb3IJJHQwLCR0MCwkdDEKKwl4b3IJQFhbJGolMTZdLEBYWyRqJTE2XSxAWFsoJGorMTMpJTE2XQorCWFkZAkkZiwkZiwkdDAKKwlyb3Rsd2kJQFhbJGolMTZdLEBYWyRqJTE2XSwxCitfX18KK30KKworc3ViIEJPRFlfMjBfMzkgeworbXkgKCRpLCRhLCRiLCRjLCRkLCRlLCRmKT1AXzsKK215ICRqPSRpKzE7CiskY29kZS49PDxfX18gaWYgKCRpPDc5KTsKKwlhZGQJJGYsJEssJGUKKwlyb3Rsd2kJJGUsJGEsNQorCXhvcglAWFskaiUxNl0sQFhbJGolMTZdLEBYWygkaisyKSUxNl0KKwlhZGQJJGYsJGYsQFhbJGklMTZdCisJeG9yCSR0MCwkYiwkYworCXhvcglAWFskaiUxNl0sQFhbJGolMTZdLEBYWygkais4KSUxNl0KKwlhZGQJJGYsJGYsJGUKKwlyb3Rsd2kJJGIsJGIsMzAKKwl4b3IJJHQwLCR0MCwkZAorCXhvcglAWFskaiUxNl0sQFhbJGolMTZdLEBYWygkaisxMyklMTZdCisJYWRkCSRmLCRmLCR0MAorCXJvdGx3aQlAWFskaiUxNl0sQFhbJGolMTZdLDEKK19fXworJGNvZGUuPTw8X19fIGlmICgkaT09NzkpOworCWFkZAkkZiwkSywkZQorCXJvdGx3aQkkZSwkYSw1CisJbHd6CXIxNiwwKCRjdHgpCisJYWRkCSRmLCRmLEBYWyRpJTE2XQorCXhvcgkkdDAsJGIsJGMKKwlsd3oJcjE3LDQoJGN0eCkKKwlhZGQJJGYsJGYsJGUKKwlyb3Rsd2kJJGIsJGIsMzAKKwlsd3oJcjE4LDgoJGN0eCkKKwl4b3IJJHQwLCR0MCwkZAorCWx3eglyMTksMTIoJGN0eCkKKwlhZGQJJGYsJGYsJHQwCisJbHd6CXIyMCwxNigkY3R4KQorX19fCit9CisKK3N1YiBCT0RZXzQwXzU5IHsKK215ICgkaSwkYSwkYiwkYywkZCwkZSwkZik9QF87CitteSAkaj0kaSsxOworJGNvZGUuPTw8X19fOworCWFkZAkkZiwkSywkZQorCXJvdGx3aQkkZSwkYSw1CisJeG9yCUBYWyRqJTE2XSxAWFskaiUxNl0sQFhbKCRqKzIpJTE2XQorCWFkZAkkZiwkZixAWFskaSUxNl0KKwlhbmQJJHQwLCRiLCRjCisJeG9yCUBYWyRqJTE2XSxAWFskaiUxNl0sQFhbKCRqKzgpJTE2XQorCWFkZAkkZiwkZiwkZQorCW9yCSR0MSwkYiwkYworCXJvdGx3aQkkYiwkYiwzMAorCXhvcglAWFskaiUxNl0sQFhbJGolMTZdLEBYWygkaisxMyklMTZdCisJYW5kCSR0MSwkdDEsJGQKKwlvcgkkdDAsJHQwLCR0MQorCXJvdGx3aQlAWFskaiUxNl0sQFhbJGolMTZdLDEKKwlhZGQJJGYsJGYsJHQwCitfX18KK30KKworJGNvZGU9PDxfX187CisubWFjaGluZQkiYW55IgorLnRleHQKKworLmdsb2JsCS5zaGExX2Jsb2NrX2RhdGFfb3JkZXIKKy5hbGlnbgk0Cisuc2hhMV9ibG9ja19kYXRhX29yZGVyOgorCW1mbHIJcjAKKwkkU1RVCSRzcCxgLSgkRlJBTUUrNjQpYCgkc3ApCisJJFBVU0gJcjAsYCRGUkFNRS0kU0laRV9UKjE4YCgkc3ApCisJJFBVU0gJcjE1LGAkRlJBTUUtJFNJWkVfVCoxN2AoJHNwKQorCSRQVVNICXIxNixgJEZSQU1FLSRTSVpFX1QqMTZgKCRzcCkKKwkkUFVTSAlyMTcsYCRGUkFNRS0kU0laRV9UKjE1YCgkc3ApCisJJFBVU0gJcjE4LGAkRlJBTUUtJFNJWkVfVCoxNGAoJHNwKQorCSRQVVNICXIxOSxgJEZSQU1FLSRTSVpFX1QqMTNgKCRzcCkKKwkkUFVTSAlyMjAsYCRGUkFNRS0kU0laRV9UKjEyYCgkc3ApCisJJFBVU0gJcjIxLGAkRlJBTUUtJFNJWkVfVCoxMWAoJHNwKQorCSRQVVNICXIyMixgJEZSQU1FLSRTSVpFX1QqMTBgKCRzcCkKKwkkUFVTSAlyMjMsYCRGUkFNRS0kU0laRV9UKjlgKCRzcCkKKwkkUFVTSAlyMjQsYCRGUkFNRS0kU0laRV9UKjhgKCRzcCkKKwkkUFVTSAlyMjUsYCRGUkFNRS0kU0laRV9UKjdgKCRzcCkKKwkkUFVTSAlyMjYsYCRGUkFNRS0kU0laRV9UKjZgKCRzcCkKKwkkUFVTSAlyMjcsYCRGUkFNRS0kU0laRV9UKjVgKCRzcCkKKwkkUFVTSAlyMjgsYCRGUkFNRS0kU0laRV9UKjRgKCRzcCkKKwkkUFVTSAlyMjksYCRGUkFNRS0kU0laRV9UKjNgKCRzcCkKKwkkUFVTSAlyMzAsYCRGUkFNRS0kU0laRV9UKjJgKCRzcCkKKwkkUFVTSAlyMzEsYCRGUkFNRS0kU0laRV9UKjFgKCRzcCkKKwlsd3oJJEEsMCgkY3R4KQorCWx3egkkQiw0KCRjdHgpCisJbHd6CSRDLDgoJGN0eCkKKwlsd3oJJEQsMTIoJGN0eCkKKwlsd3oJJEUsMTYoJGN0eCkKKwlhbmRpLglyMCwkaW5wLDMKKwlibmUJTHVuYWxpZ25lZAorTGFsaWduZWQ6CisJbXRjdHIJJG51bQorCWJsCUxzaGExX2Jsb2NrX3ByaXZhdGUKK0xkb25lOgorCSRQT1AJcjAsYCRGUkFNRS0kU0laRV9UKjE4YCgkc3ApCisJJFBPUAlyMTUsYCRGUkFNRS0kU0laRV9UKjE3YCgkc3ApCisJJFBPUAlyMTYsYCRGUkFNRS0kU0laRV9UKjE2YCgkc3ApCisJJFBPUAlyMTcsYCRGUkFNRS0kU0laRV9UKjE1YCgkc3ApCisJJFBPUAlyMTgsYCRGUkFNRS0kU0laRV9UKjE0YCgkc3ApCisJJFBPUAlyMTksYCRGUkFNRS0kU0laRV9UKjEzYCgkc3ApCisJJFBPUAlyMjAsYCRGUkFNRS0kU0laRV9UKjEyYCgkc3ApCisJJFBPUAlyMjEsYCRGUkFNRS0kU0laRV9UKjExYCgkc3ApCisJJFBPUAlyMjIsYCRGUkFNRS0kU0laRV9UKjEwYCgkc3ApCisJJFBPUAlyMjMsYCRGUkFNRS0kU0laRV9UKjlgKCRzcCkKKwkkUE9QCXIyNCxgJEZSQU1FLSRTSVpFX1QqOGAoJHNwKQorCSRQT1AJcjI1LGAkRlJBTUUtJFNJWkVfVCo3YCgkc3ApCisJJFBPUAlyMjYsYCRGUkFNRS0kU0laRV9UKjZgKCRzcCkKKwkkUE9QCXIyNyxgJEZSQU1FLSRTSVpFX1QqNWAoJHNwKQorCSRQT1AJcjI4LGAkRlJBTUUtJFNJWkVfVCo0YCgkc3ApCisJJFBPUAlyMjksYCRGUkFNRS0kU0laRV9UKjNgKCRzcCkKKwkkUE9QCXIzMCxgJEZSQU1FLSRTSVpFX1QqMmAoJHNwKQorCSRQT1AJcjMxLGAkRlJBTUUtJFNJWkVfVCoxYCgkc3ApCisJbXRscglyMAorCWFkZGkJJHNwLCRzcCxgJEZSQU1FKzY0YAorCWJscgorX19fCisKKyMgUG93ZXJQQyBzcGVjaWZpY2F0aW9uIGFsbG93cyBhbiBpbXBsZW1lbnRhdGlvbiB0byBiZSBpbGwtYmVoYXZlZAorIyB1cG9uIHVuYWxpZ25lZCBhY2Nlc3Mgd2hpY2ggY3Jvc3NlcyBwYWdlIGJvdW5kYXJ5LiAiQmV0dGVyIHNhZmUKKyMgdGhhbiBzb3JyeSIgcHJpbmNpcGxlIG1ha2VzIG1lIHRyZWF0IGl0IHNwZWNpYWxseS4gQnV0IEkgZG9uJ3QKKyMgbG9vayBmb3IgcGFydGljdWxhciBvZmZlbmRpbmcgd29yZCwgYnV0IHJhdGhlciBmb3IgNjQtYnl0ZSBpbnB1dAorIyBibG9jayB3aGljaCBjcm9zc2VzIHRoZSBib3VuZGFyeS4gT25jZSBmb3VuZCB0aGF0IGJsb2NrIGlzIGFsaWduZWQKKyMgYW5kIGhhc2hlZCBzZXBhcmF0ZWx5Li4uCiskY29kZS49PDxfX187CisuYWxpZ24JNAorTHVuYWxpZ25lZDoKKwlzdWJmaWMJJHQxLCRpbnAsNDA5NgorCWFuZGkuCSR0MSwkdDEsNDA5NQk7IGRpc3RhbmNlIHRvIGNsb3Nlc3QgcGFnZSBib3VuZGFyeQorCXNyd2kuCSR0MSwkdDEsNgk7IHQxLz02NAorCWJlcQlMY3Jvc3NfcGFnZQorCSRVQ01QCSRudW0sJHQxCisJYmxlLQlMYWxpZ25lZAk7IGRpZG4ndCBjcm9zcyB0aGUgcGFnZSBib3VuZGFyeQorCW10Y3RyCSR0MQorCXN1YmZjCSRudW0sJHQxLCRudW0KKwlibAlMc2hhMV9ibG9ja19wcml2YXRlCitMY3Jvc3NfcGFnZToKKwlsaQkkdDEsMTYKKwltdGN0cgkkdDEKKwlhZGRpCXIyMCwkc3AsJEZSQU1FCTsgc3BvdCBiZWxvdyB0aGUgZnJhbWUKK0xtZW1jcHk6CisJbGJ6CXIxNiwwKCRpbnApCisJbGJ6CXIxNywxKCRpbnApCisJbGJ6CXIxOCwyKCRpbnApCisJbGJ6CXIxOSwzKCRpbnApCisJYWRkaQkkaW5wLCRpbnAsNAorCXN0YglyMTYsMChyMjApCisJc3RiCXIxNywxKHIyMCkKKwlzdGIJcjE4LDIocjIwKQorCXN0YglyMTksMyhyMjApCisJYWRkaQlyMjAscjIwLDQKKwliZG56CUxtZW1jcHkKKworCSRQVVNICSRpbnAsYCRGUkFNRS0kU0laRV9UKjE5YCgkc3ApCisJbGkJJHQxLDEKKwlhZGRpCSRpbnAsJHNwLCRGUkFNRQorCW10Y3RyCSR0MQorCWJsCUxzaGExX2Jsb2NrX3ByaXZhdGUKKwkkUE9QCSRpbnAsYCRGUkFNRS0kU0laRV9UKjE5YCgkc3ApCisJYWRkaWMuCSRudW0sJG51bSwtMQorCWJuZS0JTHVuYWxpZ25lZAorCWIJTGRvbmUKK19fXworCisjIFRoaXMgaXMgcHJpdmF0ZSBibG9jayBmdW5jdGlvbiwgd2hpY2ggdXNlcyB0YWlsb3JlZCBjYWxsaW5nCisjIGludGVyZmFjZSwgbmFtZWx5IHVwb24gZW50cnkgU0hBX0NUWCBpcyBwcmUtbG9hZGVkIHRvIGdpdmVuCisjIHJlZ2lzdGVycyBhbmQgY291bnRlciByZWdpc3RlciBjb250YWlucyBhbW91bnQgb2YgY2h1bmtzIHRvCisjIGRpZ2VzdC4uLgorJGNvZGUuPTw8X19fOworLmFsaWduCTQKK0xzaGExX2Jsb2NrX3ByaXZhdGU6CitfX18KKyRjb2RlLj08PF9fXzsJIyBsb2FkIEtfMDBfMTkKKwlsaXMJJEssMHg1YTgyCisJb3JpCSRLLCRLLDB4Nzk5OQorX19fCitmb3IoJGk9MDskaTwyMDskaSsrKQl7ICZCT0RZXzAwXzE5KCRpLEBWKTsgdW5zaGlmdChAVixwb3AoQFYpKTsgfQorJGNvZGUuPTw8X19fOwkjIGxvYWQgS18yMF8zOQorCWxpcwkkSywweDZlZDkKKwlvcmkJJEssJEssMHhlYmExCitfX18KK2Zvcig7JGk8NDA7JGkrKykJeyAmQk9EWV8yMF8zOSgkaSxAVik7IHVuc2hpZnQoQFYscG9wKEBWKSk7IH0KKyRjb2RlLj08PF9fXzsJIyBsb2FkIEtfNDBfNTkKKwlsaXMJJEssMHg4ZjFiCisJb3JpCSRLLCRLLDB4YmNkYworX19fCitmb3IoOyRpPDYwOyRpKyspCXsgJkJPRFlfNDBfNTkoJGksQFYpOyB1bnNoaWZ0KEBWLHBvcChAVikpOyB9CiskY29kZS49PDxfX187CSMgbG9hZCBLXzYwXzc5CisJbGlzCSRLLDB4Y2E2MgorCW9yaQkkSywkSywweGMxZDYKK19fXworZm9yKDskaTw4MDskaSsrKQl7ICZCT0RZXzIwXzM5KCRpLEBWKTsgdW5zaGlmdChAVixwb3AoQFYpKTsgfQorJGNvZGUuPTw8X19fOworCWFkZAlyMTYscjE2LCRFCisJYWRkCXIxNyxyMTcsJFQKKwlhZGQJcjE4LHIxOCwkQQorCWFkZAlyMTkscjE5LCRCCisJYWRkCXIyMCxyMjAsJEMKKwlzdHcJcjE2LDAoJGN0eCkKKwltcgkkQSxyMTYKKwlzdHcJcjE3LDQoJGN0eCkKKwltcgkkQixyMTcKKwlzdHcJcjE4LDgoJGN0eCkKKwltcgkkQyxyMTgKKwlzdHcJcjE5LDEyKCRjdHgpCisJbXIJJEQscjE5CisJc3R3CXIyMCwxNigkY3R4KQorCW1yCSRFLHIyMAorCWFkZGkJJGlucCwkaW5wLGAxNio0YAorCWJkbnotCUxzaGExX2Jsb2NrX3ByaXZhdGUKKwlibHIKK19fXworJGNvZGUuPTw8X19fOworLmFzY2l6CSJTSEExIGJsb2NrIHRyYW5zZm9ybSBmb3IgUFBDLCBDUllQVE9HQU1TIGJ5IDxhcHByb1xAZnkuY2hhbG1lcnMuc2U+IgorX19fCisKKyRjb2RlID1+IHMvXGAoW15cYF0qKVxgL2V2YWwgJDEvZ2VtOworcHJpbnQgJGNvZGU7CitjbG9zZSBTVERPVVQ7CmRpZmYgLS1naXQgYS9jcnlwdG8vc2hhL2FzbS9zaGExLXMzOTB4LnBsIGIvY3J5cHRvL3NoYS9hc20vc2hhMS1zMzkweC5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjE3ODQ4Ci0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL3NoYS9hc20vc2hhMS1zMzkweC5wbApAQCAtMCwwICsxLDIyNiBAQAorIyEvdXNyL2Jpbi9lbnYgcGVybAorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFdyaXR0ZW4gYnkgQW5keSBQb2x5YWtvdiA8YXBwcm9AZnkuY2hhbG1lcnMuc2U+IGZvciB0aGUgT3BlblNTTAorIyBwcm9qZWN0LiBUaGUgbW9kdWxlIGlzLCBob3dldmVyLCBkdWFsIGxpY2Vuc2VkIHVuZGVyIE9wZW5TU0wgYW5kCisjIENSWVBUT0dBTVMgbGljZW5zZXMgZGVwZW5kaW5nIG9uIHdoZXJlIHlvdSBvYnRhaW4gaXQuIEZvciBmdXJ0aGVyCisjIGRldGFpbHMgc2VlIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvfmFwcHJvL2NyeXB0b2dhbXMvLgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjIFNIQTEgYmxvY2sgcHJvY2VkdXJlIGZvciBzMzkweC4KKworIyBBcHJpbCAyMDA3LgorIworIyBQZXJmb3JtYW5jZSBpcyA+MzAlIGJldHRlciB0aGFuIGdjYyAzLjMgZ2VuZXJhdGVkIGNvZGUuIEJ1dCB0aGUgcmVhbAorIyB0d2lzdCBpcyB0aGF0IFNIQTEgaGFyZHdhcmUgc3VwcG9ydCBpcyBkZXRlY3RlZCBhbmQgdXRpbGl6ZWQuIEluCisjIHdoaWNoIGNhc2UgcGVyZm9ybWFuY2UgY2FuIHJlYWNoIGZ1cnRoZXIgPjQuNXggZm9yIGxhcmdlciBjaHVua3MuCisKKyMgSmFudWFyeSAyMDA5LgorIworIyBPcHRpbWl6ZSBYdXBkYXRlIGZvciBhbW91bnQgb2YgbWVtb3J5IHJlZmVyZW5jZXMgYW5kIHJlc2NoZWR1bGUKKyMgaW5zdHJ1Y3Rpb25zIHRvIGZhdm91ciBkdWFsLWlzc3VlIHoxMCBwaXBlbGluZS4gT24gejEwIGhhcmR3YXJlIGlzCisjICJvbmx5IiB+Mi4zeCBmYXN0ZXIgdGhhbiBzb2Z0d2FyZS4KKworJGtpbWRmdW5jPTE7CSMgbWFnaWMgZnVuY3Rpb24gY29kZSBmb3Iga2ltZCBpbnN0cnVjdGlvbgorCiskb3V0cHV0PXNoaWZ0Oworb3BlbiBTVERPVVQsIj4kb3V0cHV0IjsKKworJEtfMDBfMzk9IiVyMCI7ICRLPSRLXzAwXzM5OworJEtfNDBfNzk9IiVyMSI7CiskY3R4PSIlcjIiOwkkcHJlZmV0Y2g9IiVyMiI7CiskaW5wPSIlcjMiOworJGxlbj0iJXI0IjsKKworJEE9IiVyNSI7CiskQj0iJXI2IjsKKyRDPSIlcjciOworJEQ9IiVyOCI7CiskRT0iJXI5IjsJQFY9KCRBLCRCLCRDLCRELCRFKTsKKyR0MD0iJXIxMCI7CiskdDE9IiVyMTEiOworQFg9KCIlcjEyIiwiJXIxMyIsIiVyMTQiKTsKKyRzcD0iJXIxNSI7CisKKyRmcmFtZT0xNjArMTYqNDsKKworc3ViIFh1cGRhdGUgeworbXkgJGk9c2hpZnQ7CisKKyRjb2RlLj08PF9fXyBpZiAoJGk9PTE1KTsKKwlsZwkkcHJlZmV0Y2gsMTYwKCRzcCkJIyMjIFh1cGRhdGUoMTYpIHdhcm0tdXAKKwlscgkkWFswXSwkWFsyXQorX19fCityZXR1cm4gaWYgKCRpJjEpOwkjIFh1cGRhdGUgaXMgdmVjdG9yaXplZCBhbmQgZXhlY3V0ZWQgZXZlcnkgMm5kIGN5Y2xlCiskY29kZS49PDxfX18gaWYgKCRpPDE2KTsKKwlsZwkkWFswXSxgJGkqNGAoJGlucCkJIyMjIFhsb2FkKCRpKQorCXJsbGcJJFhbMV0sJFhbMF0sMzIKK19fXworJGNvZGUuPTw8X19fIGlmICgkaT49MTYpOworCXhncgkkWFswXSwkcHJlZmV0Y2gJCSMjIyBYdXBkYXRlKCRpKQorCWxnCSRwcmVmZXRjaCxgMTYwKzQqKCgkaSsyKSUxNilgKCRzcCkKKwl4ZwkkWFswXSxgMTYwKzQqKCgkaSs4KSUxNilgKCRzcCkKKwl4Z3IJJFhbMF0sJHByZWZldGNoCisJcmxsCSRYWzBdLCRYWzBdLDEKKwlybGxnCSRYWzFdLCRYWzBdLDMyCisJcmxsCSRYWzFdLCRYWzFdLDEKKwlybGxnCSRYWzBdLCRYWzFdLDMyCisJbHIJJFhbMl0sJFhbMV0JCSMgZmVlZGJhY2sKK19fXworJGNvZGUuPTw8X19fIGlmICgkaTw9NzApOworCXN0ZwkkWFswXSxgMTYwKzQqKCRpJTE2KWAoJHNwKQorX19fCit1bnNoaWZ0KEBYLHBvcChAWCkpOworfQorCitzdWIgQk9EWV8wMF8xOSB7CitteSAoJGksJGEsJGIsJGMsJGQsJGUpPUBfOworbXkgJHhpPSRYWzFdOworCisJJlh1cGRhdGUoJGkpOworJGNvZGUuPTw8X19fOworCWFscgkkZSwkSwkJIyMjICRpCisJcmxsCSR0MSwkYSw1CisJbHIJJHQwLCRkCisJeHIJJHQwLCRjCisJYWxyCSRlLCR0MQorCW5yCSR0MCwkYgorCWFscgkkZSwkeGkKKwl4cgkkdDAsJGQKKwlybGwJJGIsJGIsMzAKKwlhbHIJJGUsJHQwCitfX18KK30KKworc3ViIEJPRFlfMjBfMzkgeworbXkgKCRpLCRhLCRiLCRjLCRkLCRlKT1AXzsKK215ICR4aT0kWFsxXTsKKworCSZYdXBkYXRlKCRpKTsKKyRjb2RlLj08PF9fXzsKKwlhbHIJJGUsJEsJCSMjIyAkaQorCXJsbAkkdDEsJGEsNQorCWxyCSR0MCwkYgorCWFscgkkZSwkdDEKKwl4cgkkdDAsJGMKKwlhbHIJJGUsJHhpCisJeHIJJHQwLCRkCisJcmxsCSRiLCRiLDMwCisJYWxyCSRlLCR0MAorX19fCit9CisKK3N1YiBCT0RZXzQwXzU5IHsKK215ICgkaSwkYSwkYiwkYywkZCwkZSk9QF87CitteSAkeGk9JFhbMV07CisKKwkmWHVwZGF0ZSgkaSk7CiskY29kZS49PDxfX187CisJYWxyCSRlLCRLCQkjIyMgJGkKKwlybGwJJHQxLCRhLDUKKwlscgkkdDAsJGIKKwlhbHIJJGUsJHQxCisJb3IJJHQwLCRjCisJbHIJJHQxLCRiCisJbnIJJHQwLCRkCisJbnIJJHQxLCRjCisJYWxyCSRlLCR4aQorCW9yCSR0MCwkdDEKKwlybGwJJGIsJGIsMzAKKwlhbHIJJGUsJHQwCitfX18KK30KKworJGNvZGUuPTw8X19fOworLnRleHQKKy5hbGlnbgk2NAorLnR5cGUJS3RhYmxlLFxAb2JqZWN0CitLdGFibGU6IC5sb25nCTB4NWE4Mjc5OTksMHg2ZWQ5ZWJhMSwweDhmMWJiY2RjLDB4Y2E2MmMxZDYKKwkuc2tpcAk0OAkjLmxvbmcJMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKKy5zaXplCUt0YWJsZSwuLUt0YWJsZQorLmdsb2JsCXNoYTFfYmxvY2tfZGF0YV9vcmRlcgorLnR5cGUJc2hhMV9ibG9ja19kYXRhX29yZGVyLFxAZnVuY3Rpb24KK3NoYTFfYmxvY2tfZGF0YV9vcmRlcjoKK19fXworJGNvZGUuPTw8X19fIGlmICgka2ltZGZ1bmMpOworCWxhcmwJJXIxLE9QRU5TU0xfczM5MHhjYXBfUAorCWxnCSVyMCwwKCVyMSkKKwl0bWhsCSVyMCwweDQwMDAJIyBjaGVjayBmb3IgbWVzc2FnZS1zZWN1cml0eSBhc3Npc3QKKwlqegkuTHNvZnR3YXJlCisJbGdoaQklcjAsMAorCWxhCSVyMSwxNigkc3ApCisJLmxvbmcJMHhiOTNlMDAwMgkjIGtpbWQgJXIwLCVyMgorCWxnCSVyMCwxNigkc3ApCisJdG1oaAklcjAsYDB4ODAwMD4+JGtpbWRmdW5jYAorCWp6CS5Mc29mdHdhcmUKKwlsZ2hpCSVyMCwka2ltZGZ1bmMKKwlsZ3IJJXIxLCRjdHgKKwlsZ3IJJXIyLCRpbnAKKwlzbGxnCSVyMywkbGVuLDYKKwkubG9uZwkweGI5M2UwMDAyCSMga2ltZCAlcjAsJXIyCisJYnJjCTEsLi00CQkjIHBheSBhdHRlbnRpb24gdG8gInBhcnRpYWwgY29tcGxldGlvbiIKKwlicgklcjE0CisuYWxpZ24JMTYKKy5Mc29mdHdhcmU6CitfX18KKyRjb2RlLj08PF9fXzsKKwlsZ2hpCSVyMSwtJGZyYW1lCisJc3RnCSRjdHgsMTYoJHNwKQorCXN0bWcJJXI2LCVyMTUsNDgoJHNwKQorCWxncgklcjAsJHNwCisJbGEJJHNwLDAoJXIxLCRzcCkKKwlzdGcJJXIwLDAoJHNwKQorCisJbGFybAkkdDAsS3RhYmxlCisJbGxnZgkkQSwwKCRjdHgpCisJbGxnZgkkQiw0KCRjdHgpCisJbGxnZgkkQyw4KCRjdHgpCisJbGxnZgkkRCwxMigkY3R4KQorCWxsZ2YJJEUsMTYoJGN0eCkKKworCWxnCSRLXzAwXzM5LDAoJHQwKQorCWxnCSRLXzQwXzc5LDgoJHQwKQorCisuTGxvb3A6CisJcmxsZwkkS18wMF8zOSwkS18wMF8zOSwzMgorX19fCitmb3IgKCRpPTA7JGk8MjA7JGkrKykJeyAmQk9EWV8wMF8xOSgkaSxAVik7IHVuc2hpZnQoQFYscG9wKEBWKSk7IH0KKyRjb2RlLj08PF9fXzsKKwlybGxnCSRLXzAwXzM5LCRLXzAwXzM5LDMyCitfX18KK2ZvciAoOyRpPDQwOyRpKyspCXsgJkJPRFlfMjBfMzkoJGksQFYpOyB1bnNoaWZ0KEBWLHBvcChAVikpOyB9CiskY29kZS49PDxfX187CSRLPSRLXzQwXzc5OworCXJsbGcJJEtfNDBfNzksJEtfNDBfNzksMzIKK19fXworZm9yICg7JGk8NjA7JGkrKykJeyAmQk9EWV80MF81OSgkaSxAVik7IHVuc2hpZnQoQFYscG9wKEBWKSk7IH0KKyRjb2RlLj08PF9fXzsKKwlybGxnCSRLXzQwXzc5LCRLXzQwXzc5LDMyCitfX18KK2ZvciAoOyRpPDgwOyRpKyspCXsgJkJPRFlfMjBfMzkoJGksQFYpOyB1bnNoaWZ0KEBWLHBvcChAVikpOyB9CiskY29kZS49PDxfX187CisKKwlsZwkkY3R4LGAkZnJhbWUrMTZgKCRzcCkKKwlsYQkkaW5wLDY0KCRpbnApCisJYWwJJEEsMCgkY3R4KQorCWFsCSRCLDQoJGN0eCkKKwlhbAkkQyw4KCRjdHgpCisJYWwJJEQsMTIoJGN0eCkKKwlhbAkkRSwxNigkY3R4KQorCXN0CSRBLDAoJGN0eCkKKwlzdAkkQiw0KCRjdHgpCisJc3QJJEMsOCgkY3R4KQorCXN0CSRELDEyKCRjdHgpCisJc3QJJEUsMTYoJGN0eCkKKwlicmN0CSRsZW4sLkxsb29wCisKKwlsbWcJJXI2LCVyMTUsYCRmcmFtZSs0OGAoJHNwKQorCWJyCSVyMTQKKy5zaXplCXNoYTFfYmxvY2tfZGF0YV9vcmRlciwuLXNoYTFfYmxvY2tfZGF0YV9vcmRlcgorLnN0cmluZwkiU0hBMSBibG9jayB0cmFuc2Zvcm0gZm9yIHMzOTB4LCBDUllQVE9HQU1TIGJ5IDxhcHByb1xAb3BlbnNzbC5vcmc+IgorLmNvbW0JT1BFTlNTTF9zMzkweGNhcF9QLDgsOAorX19fCisKKyRjb2RlID1+IHMvXGAoW15cYF0qKVxgL2V2YWwgJDEvZ2VtOworCitwcmludCAkY29kZTsKK2Nsb3NlIFNURE9VVDsKZGlmZiAtLWdpdCBhL2NyeXB0by9zaGEvYXNtL3NoYTEtc3BhcmN2OS5wbCBiL2NyeXB0by9zaGEvYXNtL3NoYTEtc3BhcmN2OS5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzA2ZmM4Ci0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL3NoYS9hc20vc2hhMS1zcGFyY3Y5LnBsCkBAIC0wLDAgKzEsMjgzIEBACisjIS91c3IvYmluL2VudiBwZXJsCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgV3JpdHRlbiBieSBBbmR5IFBvbHlha292IDxhcHByb0BmeS5jaGFsbWVycy5zZT4gZm9yIHRoZSBPcGVuU1NMCisjIHByb2plY3QuIFRoZSBtb2R1bGUgaXMsIGhvd2V2ZXIsIGR1YWwgbGljZW5zZWQgdW5kZXIgT3BlblNTTCBhbmQKKyMgQ1JZUFRPR0FNUyBsaWNlbnNlcyBkZXBlbmRpbmcgb24gd2hlcmUgeW91IG9idGFpbiBpdC4gRm9yIGZ1cnRoZXIKKyMgZGV0YWlscyBzZWUgaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9+YXBwcm8vY3J5cHRvZ2Ftcy8uCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgUGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgaXMgbm90IHJlYWxseSBpbXByZXNzaXZlIG9uIHByZS1UMSBDUFU6ICs4JQorIyBvdmVyIFN1biBDIGFuZCArMjUlIG92ZXIgZ2NjIFszLjNdLiBXaGlsZSBvbiBUMSwgYS5rLmEuIE5pYWdhcmEsIGl0CisjIHR1cm5lZCB0byBiZSA0MCUgZmFzdGVyIHRoYW4gNjQtYml0IGNvZGUgZ2VuZXJhdGVkIGJ5IFN1biBDIDUuOCBhbmQKKyMgPjJ4IHRoYW4gNjQtYml0IGNvZGUgZ2VuZXJhdGVkIGJ5IGdjYyAzLjQuIEFuZCB0aGVyZSBpcyBhIGdpbW1pY2suCisjIFhbMTZdIHZlY3RvciBpcyBwYWNrZWQgdG8gOCA2NC1iaXQgcmVnaXN0ZXJzIGFuZCBhcyByZXN1bHQgbm90aGluZworIyBpcyBzcGlsbGVkIG9uIHN0YWNrLiBJbiBhZGRpdGlvbiBpbnB1dCBkYXRhIGlzIGxvYWRlZCBpbiBjb21wYWN0CisjIGluc3RydWN0aW9uIHNlcXVlbmNlLCB0aHVzIG1pbmltaXppbmcgdGhlIHdpbmRvdyB3aGVuIHRoZSBjb2RlIGlzCisjIHN1YmplY3QgdG8gW2ludGVyLXRocmVhZF0gY2FjaGUtdGhyYXNoaW5nIGhhemFyZC4gVGhlIGdvYWwgaXMgdG8KKyMgZW5zdXJlIHNjYWxhYmlsaXR5IG9uIFVsdHJhU1BBUkMgVDEsIG9yIHJhdGhlciB0byBhdm9pZCBkZWNheSB3aGVuCisjIGFtb3VudCBvZiBhY3RpdmUgdGhyZWFkcyBleGNlZWRzIHRoZSBudW1iZXIgb2YgcGh5c2ljYWwgY29yZXMuCisKKyRiaXRzPTMyOworZm9yIChAQVJHVikJeyAkYml0cz02NCBpZiAoL1wtbTY0LyB8fCAvXC14YXJjaFw9djkvKTsgfQoraWYgKCRiaXRzPT02NCkJeyAkYmlhcz0yMDQ3OyAkZnJhbWU9MTkyOyB9CitlbHNlCQl7ICRiaWFzPTA7ICAgICRmcmFtZT0xMTI7IH0KKworJG91dHB1dD1zaGlmdDsKK29wZW4gU1RET1VULCI+JG91dHB1dCI7CisKK0BYPSgiJW8wIiwiJW8xIiwiJW8yIiwiJW8zIiwiJW80IiwiJW81IiwiJWcxIiwiJW83Iik7Ciskcm90MW09IiVnMiI7CiskdG1wNjQ9IiVnMyI7CiskWGk9IiVnNCI7CiskQT0iJWwwIjsKKyRCPSIlbDEiOworJEM9IiVsMiI7CiskRD0iJWwzIjsKKyRFPSIlbDQiOworQFY9KCRBLCRCLCRDLCRELCRFKTsKKyRLXzAwXzE5PSIlbDUiOworJEtfMjBfMzk9IiVsNiI7CiskS180MF81OT0iJWw3IjsKKyRLXzYwXzc5PSIlZzUiOworQEs9KCRLXzAwXzE5LCRLXzIwXzM5LCRLXzQwXzU5LCRLXzYwXzc5KTsKKworJGN0eD0iJWkwIjsKKyRpbnA9IiVpMSI7CiskbGVuPSIlaTIiOworJHRtcDA9IiVpMyI7CiskdG1wMT0iJWk0IjsKKyR0bXAyPSIlaTUiOworCitzdWIgQk9EWV8wMF8xNSB7CitteSAoJGksJGEsJGIsJGMsJGQsJGUpPUBfOworbXkgJHhpPSgkaSYxKT9AWFsoJGkvMiklOF06JFhpOworCiskY29kZS49PDxfX187CisJc2xsCSRhLDUsJHRtcDAJCSEhICRpCisJYWRkCUBLWyRpLzIwXSwkZSwkZQorCXNybAkkYSwyNywkdG1wMQorCWFkZAkkdG1wMCwkZSwkZQorCWFuZAkkYywkYiwkdG1wMAorCWFkZAkkdG1wMSwkZSwkZQorCXNsbAkkYiwzMCwkdG1wMgorCWFuZG4JJGQsJGIsJHRtcDEKKwlzcmwJJGIsMiwkYgorCW9yCSR0bXAxLCR0bXAwLCR0bXAxCisJb3IJJHRtcDIsJGIsJGIKKwlhZGQJJHhpLCRlLCRlCitfX18KK2lmICgkaSYxICYmICRpPDE1KSB7CisJJGNvZGUuPQorCSIJc3JseAlAWFsoKCRpKzEpLzIpJThdLDMyLCRYaVxuIjsKK30KKyRjb2RlLj08PF9fXzsKKwlhZGQJJHRtcDEsJGUsJGUKK19fXworfQorCitzdWIgWHVwZGF0ZSB7CitteSAoJGksJGEsJGIsJGMsJGQsJGUpPUBfOworbXkgJGo9JGkvMjsKKworaWYgKCRpJjEpIHsKKyRjb2RlLj08PF9fXzsKKwlzbGwJJGEsNSwkdG1wMAkJISEgJGkKKwlhZGQJQEtbJGkvMjBdLCRlLCRlCisJc3JsCSRhLDI3LCR0bXAxCitfX18KK30gZWxzZSB7CiskY29kZS49PDxfX187CisJc2xseAlAWFsoJGorNiklOF0sMzIsJFhpCSEgWHVwZGF0ZSgkaSkKKwl4b3IJQFhbKCRqKzEpJThdLEBYWyRqJThdLEBYWyRqJThdCisJc3JseAlAWFsoJGorNyklOF0sMzIsJHRtcDEKKwl4b3IJQFhbKCRqKzQpJThdLEBYWyRqJThdLEBYWyRqJThdCisJc2xsCSRhLDUsJHRtcDAJCSEhICRpCisJb3IJJHRtcDEsJFhpLCRYaQorCWFkZAlAS1skaS8yMF0sJGUsJGUJCSEhCisJeG9yCSRYaSxAWFskaiU4XSxAWFskaiU4XQorCXNybHgJQFhbJGolOF0sMzEsJFhpCisJYWRkCUBYWyRqJThdLEBYWyRqJThdLEBYWyRqJThdCisJYW5kCSRYaSwkcm90MW0sJFhpCisJYW5kbglAWFskaiU4XSwkcm90MW0sQFhbJGolOF0KKwlzcmwJJGEsMjcsJHRtcDEJCSEhCisJb3IJJFhpLEBYWyRqJThdLEBYWyRqJThdCitfX18KK30KK30KKworc3ViIEJPRFlfMTZfMTkgeworbXkgKCRpLCRhLCRiLCRjLCRkLCRlKT1AXzsKKworCSZYdXBkYXRlKEBfKTsKKyAgICBpZiAoJGkmMSkgeworCSR4aT1AWFsoJGkvMiklOF07CisgICAgfSBlbHNlIHsKKwkkeGk9JFhpOworCSRjb2RlLj0iXHRzcmx4CUBYWygkaS8yKSU4XSwzMiwkeGlcbiI7CisgICAgfQorJGNvZGUuPTw8X19fOworCWFkZAkkdG1wMCwkZSwkZQkJISEKKwlhbmQJJGMsJGIsJHRtcDAKKwlhZGQJJHRtcDEsJGUsJGUKKwlzbGwJJGIsMzAsJHRtcDIKKwlhZGQJJHhpLCRlLCRlCisJYW5kbgkkZCwkYiwkdG1wMQorCXNybAkkYiwyLCRiCisJb3IJJHRtcDEsJHRtcDAsJHRtcDEKKwlvcgkkdG1wMiwkYiwkYgorCWFkZAkkdG1wMSwkZSwkZQorX19fCit9CisKK3N1YiBCT0RZXzIwXzM5IHsKK215ICgkaSwkYSwkYiwkYywkZCwkZSk9QF87CitteSAkeGk7CisJJlh1cGRhdGUoQF8pOworICAgIGlmICgkaSYxKSB7CisJJHhpPUBYWygkaS8yKSU4XTsKKyAgICB9IGVsc2UgeworCSR4aT0kWGk7CisJJGNvZGUuPSJcdHNybHgJQFhbKCRpLzIpJThdLDMyLCR4aVxuIjsKKyAgICB9CiskY29kZS49PDxfX187CisJYWRkCSR0bXAwLCRlLCRlCQkhIQorCXhvcgkkYywkYiwkdG1wMAorCWFkZAkkdG1wMSwkZSwkZQorCXNsbAkkYiwzMCwkdG1wMgorCXhvcgkkZCwkdG1wMCwkdG1wMQorCXNybAkkYiwyLCRiCisJYWRkCSR0bXAxLCRlLCRlCisJb3IJJHRtcDIsJGIsJGIKKwlhZGQJJHhpLCRlLCRlCitfX18KK30KKworc3ViIEJPRFlfNDBfNTkgeworbXkgKCRpLCRhLCRiLCRjLCRkLCRlKT1AXzsKK215ICR4aTsKKwkmWHVwZGF0ZShAXyk7CisgICAgaWYgKCRpJjEpIHsKKwkkeGk9QFhbKCRpLzIpJThdOworICAgIH0gZWxzZSB7CisJJHhpPSRYaTsKKwkkY29kZS49Ilx0c3JseAlAWFsoJGkvMiklOF0sMzIsJHhpXG4iOworICAgIH0KKyRjb2RlLj08PF9fXzsKKwlhZGQJJHRtcDAsJGUsJGUJCSEhCisJYW5kCSRjLCRiLCR0bXAwCisJYWRkCSR0bXAxLCRlLCRlCisJc2xsCSRiLDMwLCR0bXAyCisJb3IJJGMsJGIsJHRtcDEKKwlzcmwJJGIsMiwkYgorCWFuZAkkZCwkdG1wMSwkdG1wMQorCWFkZAkkeGksJGUsJGUKKwlvcgkkdG1wMSwkdG1wMCwkdG1wMQorCW9yCSR0bXAyLCRiLCRiCisJYWRkCSR0bXAxLCRlLCRlCitfX18KK30KKworJGNvZGUuPTw8X19fIGlmICgkYml0cz09NjQpOworLnJlZ2lzdGVyCSVnMiwjc2NyYXRjaAorLnJlZ2lzdGVyCSVnMywjc2NyYXRjaAorX19fCiskY29kZS49PDxfX187Cisuc2VjdGlvbgkiLnRleHQiLCNhbGxvYywjZXhlY2luc3RyCisKKy5hbGlnbgkzMgorLmdsb2JsCXNoYTFfYmxvY2tfZGF0YV9vcmRlcgorc2hhMV9ibG9ja19kYXRhX29yZGVyOgorCXNhdmUJJXNwLC0kZnJhbWUsJXNwCisJc2xseAkkbGVuLDYsJGxlbgorCWFkZAkkaW5wLCRsZW4sJGxlbgorCisJb3IJJWcwLDEsJHJvdDFtCisJc2xseAkkcm90MW0sMzIsJHJvdDFtCisJb3IJJHJvdDFtLDEsJHJvdDFtCisKKwlsZAlbJGN0eCswXSwkQQorCWxkCVskY3R4KzRdLCRCCisJbGQJWyRjdHgrOF0sJEMKKwlsZAlbJGN0eCsxMl0sJEQKKwlsZAlbJGN0eCsxNl0sJEUKKwlhbmRuCSRpbnAsNywkdG1wMAorCisJc2V0aGkJJWhpKDB4NWE4Mjc5OTkpLCRLXzAwXzE5CisJb3IJJEtfMDBfMTksJWxvKDB4NWE4Mjc5OTkpLCRLXzAwXzE5CisJc2V0aGkJJWhpKDB4NmVkOWViYTEpLCRLXzIwXzM5CisJb3IJJEtfMjBfMzksJWxvKDB4NmVkOWViYTEpLCRLXzIwXzM5CisJc2V0aGkJJWhpKDB4OGYxYmJjZGMpLCRLXzQwXzU5CisJb3IJJEtfNDBfNTksJWxvKDB4OGYxYmJjZGMpLCRLXzQwXzU5CisJc2V0aGkJJWhpKDB4Y2E2MmMxZDYpLCRLXzYwXzc5CisJb3IJJEtfNjBfNzksJWxvKDB4Y2E2MmMxZDYpLCRLXzYwXzc5CisKKy5MbG9vcDoKKwlsZHgJWyR0bXAwKzBdLEBYWzBdCisJbGR4CVskdG1wMCsxNl0sQFhbMl0KKwlsZHgJWyR0bXAwKzMyXSxAWFs0XQorCWxkeAlbJHRtcDArNDhdLEBYWzZdCisJYW5kCSRpbnAsNywkdG1wMQorCWxkeAlbJHRtcDArOF0sQFhbMV0KKwlzbGwJJHRtcDEsMywkdG1wMQorCWxkeAlbJHRtcDArMjRdLEBYWzNdCisJc3ViY2MJJWcwLCR0bXAxLCR0bXAyCSEgc2hvdWxkIGJlIDY0LSR0bXAxLCBidXQgLSR0bXAxIHdvcmtzIHRvbworCWxkeAlbJHRtcDArNDBdLEBYWzVdCisJYnoscHQJJWljYywuTGFsaWduZWQKKwlsZHgJWyR0bXAwKzU2XSxAWFs3XQorCisJc2xseAlAWFswXSwkdG1wMSxAWFswXQorCWxkeAlbJHRtcDArNjRdLCR0bXA2NAorX19fCitmb3IoJGk9MDskaTw3OyRpKyspCit7ICAgJGNvZGUuPTw8X19fOworCXNybHgJQFhbJGkrMV0sJHRtcDIsJFhpCisJc2xseAlAWFskaSsxXSwkdG1wMSxAWFskaSsxXQorCW9yCSRYaSxAWFskaV0sQFhbJGldCitfX18KK30KKyRjb2RlLj08PF9fXzsKKwlzcmx4CSR0bXA2NCwkdG1wMiwkdG1wNjQKKwlvcgkkdG1wNjQsQFhbN10sQFhbN10KKy5MYWxpZ25lZDoKKwlzcmx4CUBYWzBdLDMyLCRYaQorX19fCitmb3IgKCRpPTA7JGk8MTY7JGkrKykJeyAmQk9EWV8wMF8xNSgkaSxAVik7IHVuc2hpZnQoQFYscG9wKEBWKSk7IH0KK2ZvciAoOyRpPDIwOyRpKyspCXsgJkJPRFlfMTZfMTkoJGksQFYpOyB1bnNoaWZ0KEBWLHBvcChAVikpOyB9Citmb3IgKDskaTw0MDskaSsrKQl7ICZCT0RZXzIwXzM5KCRpLEBWKTsgdW5zaGlmdChAVixwb3AoQFYpKTsgfQorZm9yICg7JGk8NjA7JGkrKykJeyAmQk9EWV80MF81OSgkaSxAVik7IHVuc2hpZnQoQFYscG9wKEBWKSk7IH0KK2ZvciAoOyRpPDgwOyRpKyspCXsgJkJPRFlfMjBfMzkoJGksQFYpOyB1bnNoaWZ0KEBWLHBvcChAVikpOyB9CiskY29kZS49PDxfX187CisKKwlsZAlbJGN0eCswXSxAWFswXQorCWxkCVskY3R4KzRdLEBYWzFdCisJbGQJWyRjdHgrOF0sQFhbMl0KKwlsZAlbJGN0eCsxMl0sQFhbM10KKwlhZGQJJGlucCw2NCwkaW5wCisJbGQJWyRjdHgrMTZdLEBYWzRdCisJY21wCSRpbnAsJGxlbgorCisJYWRkCSRBLEBYWzBdLCRBCisJc3QJJEEsWyRjdHgrMF0KKwlhZGQJJEIsQFhbMV0sJEIKKwlzdAkkQixbJGN0eCs0XQorCWFkZAkkQyxAWFsyXSwkQworCXN0CSRDLFskY3R4KzhdCisJYWRkCSRELEBYWzNdLCRECisJc3QJJEQsWyRjdHgrMTJdCisJYWRkCSRFLEBYWzRdLCRFCisJc3QJJEUsWyRjdHgrMTZdCisKKwlibmUJYCRiaXRzPT02ND8iJXhjYyI6IiVpY2MiYCwuTGxvb3AKKwlhbmRuCSRpbnAsNywkdG1wMAorCisJcmV0CisJcmVzdG9yZQorLnR5cGUJc2hhMV9ibG9ja19kYXRhX29yZGVyLCNmdW5jdGlvbgorLnNpemUJc2hhMV9ibG9ja19kYXRhX29yZGVyLCguLXNoYTFfYmxvY2tfZGF0YV9vcmRlcikKKy5hc2NpegkiU0hBMSBibG9jayB0cmFuc2Zvcm0gZm9yIFNQQVJDdjksIENSWVBUT0dBTVMgYnkgPGFwcHJvXEBvcGVuc3NsLm9yZz4iCitfX18KKworJGNvZGUgPX4gcy9cYChbXlxgXSopXGAvZXZhbCAkMS9nZW07CitwcmludCAkY29kZTsKK2Nsb3NlIFNURE9VVDsKZGlmZiAtLWdpdCBhL2NyeXB0by9zaGEvYXNtL3NoYTEtc3BhcmN2OWEucGwgYi9jcnlwdG8vc2hhL2FzbS9zaGExLXNwYXJjdjlhLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1ZWI4NTQKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vc2hhL2FzbS9zaGExLXNwYXJjdjlhLnBsCkBAIC0wLDAgKzEsNjAwIEBACisjIS91c3IvYmluL2VudiBwZXJsCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgV3JpdHRlbiBieSBBbmR5IFBvbHlha292IDxhcHByb0BmeS5jaGFsbWVycy5zZT4gZm9yIHRoZSBPcGVuU1NMCisjIHByb2plY3QuIFRoZSBtb2R1bGUgaXMsIGhvd2V2ZXIsIGR1YWwgbGljZW5zZWQgdW5kZXIgT3BlblNTTCBhbmQKKyMgQ1JZUFRPR0FNUyBsaWNlbnNlcyBkZXBlbmRpbmcgb24gd2hlcmUgeW91IG9idGFpbiBpdC4gRm9yIGZ1cnRoZXIKKyMgZGV0YWlscyBzZWUgaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9+YXBwcm8vY3J5cHRvZ2Ftcy8uCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgSmFudWFyeSAyMDA5CisjCisjIFByb3ZpZGVkIHRoYXQgVWx0cmFTUEFSQyBWSVMgaW5zdHJ1Y3Rpb25zIGFyZSBwaXBlLWxpbmVkKCopIGFuZAorIyBwYWlyYWJsZSgqKSB3aXRoIElBTFUgb25lcywgb2ZmbG9hZGluZyBvZiBYdXBkYXRlIHRvIHRoZSBVbHRyYVNQQVJDCisjIEdyYXBoaWMgVW5pdCB3b3VsZCBtYWtlIGl0IHBvc3NpYmxlIHRvIGFjaGlldmUgaGlnaGVyIGluc3RydWN0aW9uLQorIyBsZXZlbCBwYXJhbGxlbGlzbSwgSUxQLCBhbmQgdGh1cyBoaWdoZXIgcGVyZm9ybWFuY2UuIEl0IHNob3VsZCBiZQorIyBleHBsaWNpdGx5IG5vdGVkIHRoYXQgSUxQIGlzIHRoZSBrZXl3b3JkLCBhbmQgaXQgbWVhbnMgdGhhdCB0aGlzCisjIGNvZGUgd291bGQgYmUgdW5zdWl0YWJsZSBmb3IgY29yZXMgbGlrZSBVbHRyYVNQQVJDLVR4LiBUaGUgaWRlYSBpcworIyBub3QgcmVhbGx5IG5vdmVsLCBTdW4gaGFkIFZJUy1wb3dlcmVkIGltcGxlbWVudGF0aW9uIGZvciBhIHdoaWxlLgorIyBVbmxpa2UgU3VuJ3MgaW1wbGVtZW50YXRpb24gdGhpcyBvbmUgY2FuIHByb2Nlc3MgbXVsdGlwbGUgdW5hbGlnbmVkCisjIGlucHV0IGJsb2NrcywgYW5kIGFzIHN1Y2ggd29ya3MgYXMgZHJvcC1pbiByZXBsYWNlbWVudCBmb3IgT3BlblNTTAorIyBzaGExX2Jsb2NrX2RhdGFfb3JkZXIuIFBlcmZvcm1hbmNlIGltcHJvdmVtZW50IHdhcyBtZWFzdXJlZCB0byBiZQorIyA0MCUgb3ZlciBwdXJlIElBTFUgc2hhMS1zcGFyY3Y5LnBsIG9uIFVsdHJhU1BBUkMtSUlpLCBidXQgMTIlIG9uCisjIFVsdHJhU1BBUkMtSUlJLiBTZWUgYmVsb3cgZm9yIGRpc2N1c3Npb24uLi4KKyMKKyMgVGhlIG1vZHVsZSBkb2VzIG5vdCBwcmVzZW50IGRpcmVjdCBpbnRlcmVzdCBmb3IgT3BlblNTTCwgYmVjYXVzZQorIyBpdCBkb2Vzbid0IHByb3ZpZGUgYmV0dGVyIHBlcmZvcm1hbmNlIG9uIGNvbnRlbXBvcmFyeSBTUEFSQ3Y5IENQVXMsCisjIFVsdHJhU1BBUkMtVHggYW5kIFNQQVJDNjQtVltJSV0gdG8gYmUgc3BlY2lmaWMuIFRob3NlIHdobyBmZWVsIHRoZXkKKyMgYWJzb2x1dGVseSBtdXN0IHNjb3JlIG9uIFVsdHJhU1BBUkMtSS1JViBjYW4gc2ltcGx5IHJlcGxhY2UKKyMgY3J5cHRvL3NoYS9hc20vc2hhMS1zcGFyY3Y5LnBsIHdpdGggdGhpcyBtb2R1bGUuCisjCisjICgqKQkiUGlwZS1saW5lZCIgbWVhbnMgdGhhdCBldmVuIGlmIGl0IHRha2VzIHNldmVyYWwgY3ljbGVzIHRvCisjCWNvbXBsZXRlLCBuZXh0IGluc3RydWN0aW9uIHVzaW5nIHNhbWUgZnVuY3Rpb25hbCB1bml0IFtidXQgbm90CisjCWRlcGVuZGluZyBvbiB0aGUgcmVzdWx0IG9mIHRoZSBjdXJyZW50IGluc3RydWN0aW9uXSBjYW4gc3RhcnQKKyMJZXhlY3V0aW9uIHdpdGhvdXQgaGF2aW5nIHRvIHdhaXQgZm9yIHRoZSB1bml0LiAiUGFpcmFibGUiCisjCW1lYW5zIHRoYXQgdHdvIFtvciBtb3JlXSBpbmRlcGVuZGVudCBpbnN0cnVjdGlvbnMgY2FuIGJlCisjCWlzc3VlZCBhdCB0aGUgdmVyeSBzYW1lIHRpbWUuCisKKyRiaXRzPTMyOworZm9yIChAQVJHVikJeyAkYml0cz02NCBpZiAoL1wtbTY0LyB8fCAvXC14YXJjaFw9djkvKTsgfQoraWYgKCRiaXRzPT02NCkJeyAkYmlhcz0yMDQ3OyAkZnJhbWU9MTkyOyB9CitlbHNlCQl7ICRiaWFzPTA7ICAgICRmcmFtZT0xMTI7IH0KKworJG91dHB1dD1zaGlmdDsKK29wZW4gU1RET1VULCI+JG91dHB1dCI7CisKKyRjdHg9IiVpMCI7CiskaW5wPSIlaTEiOworJGxlbj0iJWkyIjsKKyR0bXAwPSIlaTMiOworJHRtcDE9IiVpNCI7CiskdG1wMj0iJWk1IjsKKyR0bXAzPSIlZzUiOworCiskYmFzZT0iJWcxIjsKKyRhbGlnbj0iJWc0IjsKKyRYZmVyPSIlbzUiOworJG5YZmVyPSR0bXAzOworJFhpPSIlbzciOworCiskQT0iJWwwIjsKKyRCPSIlbDEiOworJEM9IiVsMiI7CiskRD0iJWwzIjsKKyRFPSIlbDQiOworQFY9KCRBLCRCLCRDLCRELCRFKTsKKworJEFjdHg9IiVvMCI7CiskQmN0eD0iJW8xIjsKKyRDY3R4PSIlbzIiOworJERjdHg9IiVvMyI7CiskRWN0eD0iJW80IjsKKworJGZtdWw9IiVmMzIiOworJFZLXzAwXzE5PSIlZjM0IjsKKyRWS18yMF8zOT0iJWYzNiI7CiskVktfNDBfNTk9IiVmMzgiOworJFZLXzYwXzc5PSIlZjQwIjsKK0BWSz0oJFZLXzAwXzE5LCRWS18yMF8zOSwkVktfNDBfNTksJFZLXzYwXzc5KTsKK0BYPSgiJWYwIiwgIiVmMSIsICIlZjIiLCAiJWYzIiwgIiVmNCIsICIlZjUiLCAiJWY2IiwgIiVmNyIsCisgICAgIiVmOCIsICIlZjkiLCIlZjEwIiwiJWYxMSIsIiVmMTIiLCIlZjEzIiwiJWYxNCIsIiVmMTUiLCIlZjE2Iik7CisKKyMgVGhpcyBpcyByZWZlcmVuY2UgMngtcGFyYWxsZWxpemVkIFZJUy1wb3dlcmVkIFh1cGRhdGUgcHJvY2VkdXJlLiBJdAorIyBjb3ZlcnMgZXZlbiBLX05OX01NIGFkZGl0aW9uLi4uCitzdWIgWHVwZGF0ZSB7CitteSAoJGkpPUBfOworbXkgJEs9QFZLWygkaSsxNikvMjBdOworbXkgJGo9KCRpKzE2KSUxNjsKKworIwlbIHByb3ZpZGVkIHRoYXQgR1NSLmFsaWduYWRkcl9vZmZzZXQgaXMgNSwgJG11bCBjb250YWlucworIwkgIDB4MTAwVUxMPDwzMnwweDEwMCB2YWx1ZSBhbmQgS19OTl9NTSBhcmUgcHJlLWxvYWRlZCB0bworIwkgIGNob3NlbiByZWdpc3RlcnMuLi4gXQorJGNvZGUuPTw8X19fOworCWZ4b3JzCQlAWFsoJGorMTMpJTE2XSxAWFskal0sQFhbJGpdCSEtMS8tMS8tMTpYWzBdXj1YWzEzXQorCWZ4b3JzCQlAWFsoJGorMTQpJTE2XSxAWFskaisxXSxAWFskaisxXSEgMC8gMC8gMDpYWzFdXj1YWzE0XQorCWZ4b3IJCUBYWygkaisyKSUxNl0sQFhbKCRqKzgpJTE2XSwlZjE4ISAxLyAxLyAxOlRtcD1YWzIsM11eWFs4LDldCisJZnhvcgkJJWYxOCxAWFskal0sQFhbJGpdCQkhIDIvIDQvIDM6WFswLDFdXj1YWzIsM11eWFs4LDldCisJZmFsaWduZGF0YQlAWFskal0sQFhbJGpdLCVmMTgJCSEgMy8gNy8gNTpUbXA9WFswLDFdPj4+MjQKKwlmcGFkZDMyCQlAWFskal0sQFhbJGpdLEBYWyRqXQkJISA0LyA4LyA2OlhbMCwxXTw8PTEKKwlmbXVsOHVseDE2CSVmMTgsJGZtdWwsJWYxOAkJCSEgNS8xMC8gNzpUbXA+Pj03LCBUbXAmPTEKKwkhW2Z4b3JzCQklZjE1LCVmMiwlZjJdCisJZm9yCQklZjE4LEBYWyRqXSxAWFskal0JCSEgOC8xNC8xMDpYWzAsMV18PVRtcAorCSFbZnhvcnMJCSVmMCwlZjMsJWYzXQkJCSExMC8xNy8xMjpYWzBdIGRlcGVuZGVuY3kKKwlmcGFkZDMyCQkkSyxAWFskal0sJWYyMAorCXN0ZAkJJWYyMCxbJFhmZXIrYDQqJGpgXQorX19fCisjIFRoZSBudW1iZXJzIGRlbGltaXRlZCB3aXRoIHNsYXNoIGFyZSB0aGUgZWFybGllc3QgcG9zc2libGUgZGlzcGF0Y2gKKyMgY3ljbGVzIGZvciBnaXZlbiBpbnN0cnVjdGlvbiBhc3N1bWluZyAxIGN5Y2xlIGxhdGVuY3kgZm9yIHNpbXBsZSBWSVMKKyMgaW5zdHJ1Y3Rpb25zLCBzdWNoIGFzIG9uIFVsdHJhU1BBUkMtSSZJSSwgMyBjeWNsZXMgbGF0ZW5jeSwgc3VjaCBhcworIyBvbiBVbHRyYVNQQVJDLUlJSSZJViwgYW5kIDIgY3ljbGVzIGxhdGVuY3koKiksIHJlc3BlY3RpdmVseS4gQmVpbmcKKyMgMngtcGFyYWxsZWxpemVkIHRoZSBwcm9jZWR1cmUgaXMgIndvcnRoIiA1LCA4LjUgb3IgNiB0aWNrcyBwZXIgU0hBMQorIyByb3VuZC4gQXMgW2xvbmcgYXNdIEZQVS9WSVMgaW5zdHJ1Y3Rpb25zIGFyZSBwZXJmZWN0bHkgcGFpcmFibGUgd2l0aAorIyBJQUxVIG9uZXMsIHRoZSByb3VuZCB0aW1pbmcgaXMgZGVmaW5lZCBieSB0aGUgbWF4aW11bSBiZXR3ZWVuIFZJUworIyBhbmQgSUFMVSB0aW1pbmdzLiBUaGUgbGF0dGVyIHZhcmllcyBmcm9tIHJvdW5kIHRvIHJvdW5kIGFuZCBhdmVyYWdlcworIyBvdXQgYXQgNi4yNSB0aWNrcy4gVGhpcyBtZWFucyB0aGF0IFVTSSZJSSBzaG91bGQgb3BlcmF0ZSBhdCBJQUxVCisjIHJhdGUsIHdoaWxlIFVTSUlJJklWIC0gYXQgVklTIHJhdGUuIFRoaXMgZXhwbGFpbnMgd2h5IHBlcmZvcm1hbmNlCisjIGltcHJvdmVtZW50IHZhcmllcyBhbW9uZyBwcm9jZXNzb3JzLiBXZWxsLCBnaXZlbiB0aGF0IHB1cmUgSUFMVQorIyBzaGExLXNwYXJjdjkucGwgbW9kdWxlIGV4aGliaXRzIHZpcnR1YWxseSB1bmlmb3JtIHBlcmZvcm1hbmNlIG9mCisjIH45LjMgY3ljbGVzIHBlciBTSEExIHJvdW5kLiBUaW1pbmdzIG1lbnRpb25lZCBhYm92ZSBhcmUgdGhlb3JldGljYWwKKyMgbG93ZXIgbGltaXRzLiBSZWFsLWxpZmUgcGVyZm9ybWFuY2Ugd2FzIG1lYXN1cmVkIHRvIGJlIDYuNiBjeWNsZXMKKyMgcGVyIFNIQTEgcm91bmQgb24gVVNJSWkgYW5kIDguMyBvbiBVU0lJSS4gVGhlIGxhdHRlciBpcyBsb3dlciB0aGFuCisjIGhhbGYtcm91bmQgVklTIHRpbWluZywgYmVjYXVzZSB0aGVyZSBhcmUgMTYgWHVwZGF0ZS1mcmVlIHJvdW5kcywKKyMgd2hpY2ggInB1c2ggZG93biIgYXZlcmFnZSB0aGVvcmV0aWNhbCB0aW1pbmcgdG8gOCBjeWNsZXMuLi4KKworIyAoKikJU1BBUkM2NC1WW0lJXSB3YXMgb3JpZ2luYWxseSBiZWxpZXZlZCB0byBoYXZlIDIgY3ljbGVzIFZJUworIwlsYXRlbmN5LiBXZWxsLCBpdCBtaWdodCBoYXZlLCBidXQgaXQgZG9lc24ndCBoYXZlIGRlZGljYXRlZAorIwlWSVMtdW5pdC4gSW5zdGVhZCwgVklTIGluc3RydWN0aW9ucyBhcmUgZXhlY3V0ZWQgYnkgb3RoZXIKKyMJZnVuY3Rpb25hbCB1bml0cywgb25lcyB1c2VkIGhlcmUgLSBieSBJQUxVLiBUaGlzIGRvZXNuJ3QKKyMJaW1wcm92ZSBlZmZlY3RpdmUgSUxQLi4uCit9CisKKyMgVGhlIHJlZmVyZW5jZSBYdXBkYXRlIHByb2NlZHVyZSBpcyB0aGVuICJzdHJhaW5lZCIgb3ZlciAqcGFpcnMqIG9mCisjIEJPRFlfTk5fTU0gYW5kIGtpbmQgb2YgbW9kdWxvLXNjaGVkdWxlZCBpbiByZXNwZWN0IHRvIFhbbl1ePVhbbisxM10KKyMgYW5kIEtfTk5fTU0gYWRkaXRpb24uIEl0J3MgInJ1bm5pbmciIDE1IHJvdW5kcyBhaGVhZCwgd2hpY2ggbGVhdmVzCisjIHBsZW50eSBvZiByb29tIHRvIGFtb3J0aXplIGZvciByZWFkLWFmdGVyLXdyaXRlIGhhemFyZCwgYXMgd2VsbCBhcworIyB0byBmZXRjaCBhbmQgYWxpZ24gaW5wdXQgZm9yIHRoZSBuZXh0IHNwaW4uIFRoZSBWSVMgaW5zdHJ1Y3Rpb25zIGFyZQorIyBzY2hlZHVsZWQgZm9yIGxhdGVuY3kgb2YgMiBjeWNsZXMsIGJlY2F1c2UgdGhlcmUgYXJlIG5vdCBlbm91Z2ggSUFMVQorIyBpbnN0cnVjdGlvbnMgdG8gc2NoZWR1bGUgZm9yIGxhdGVuY3kgb2YgMywgd2hpbGUgc2NoZWR1bGluZyBmb3IgMQorIyB3b3VsZCBnaXZlIG5vIGdhaW4gb24gVVNJJklJIGFueXdheS4KKworc3ViIEJPRFlfMDBfMTkgeworbXkgKCRpLCRhLCRiLCRjLCRkLCRlKT1AXzsKK215ICRqPSRpJn4xOworbXkgJGs9KCRqKzE2KzIpJTE2OwkjIGFoZWFkIHJlZmVyZW5jZQorbXkgJGw9KCRqKzE2LTIpJTE2OwkjIGJlaGluZCByZWZlcmVuY2UKK215ICRLPUBWS1soJGorMTYtMikvMjBdOworCiskaj0oJGorMTYpJTE2OworCiskY29kZS49PDxfX18gaWYgKCEoJGkmMSkpOworCXNsbAkJJGEsNSwkdG1wMAkJCSEhICRpCisJYW5kCQkkYywkYiwkdG1wMworCWxkCQlbJFhmZXIrYDQqKCRpJTE2KWBdLCRYaQorCSBmeG9ycwkJQFhbKCRqKzE0KSUxNl0sQFhbJGorMV0sQFhbJGorMV0hIDAvIDAvIDA6WFsxXV49WFsxNF0KKwlzcmwJCSRhLDI3LCR0bXAxCisJYWRkCQkkdG1wMCwkZSwkZQorCSBmeG9yCQlAWFsoJGorMiklMTZdLEBYWygkais4KSUxNl0sJWYxOCEgMS8gMS8gMTpUbXA9WFsyLDNdXlhbOCw5XQorCXNsbAkJJGIsMzAsJHRtcDIKKwlhZGQJCSR0bXAxLCRlLCRlCisJYW5kbgkJJGQsJGIsJHRtcDEKKwlhZGQJCSRYaSwkZSwkZQorCSBmeG9yCQklZjE4LEBYWyRqXSxAWFskal0JCSEgMi8gNC8gMzpYWzAsMV1ePVhbMiwzXV5YWzgsOV0KKwlzcmwJCSRiLDIsJGIKKwlvcgkJJHRtcDEsJHRtcDMsJHRtcDEKKwlvcgkJJHRtcDIsJGIsJGIKKwlhZGQJCSR0bXAxLCRlLCRlCisJIGZhbGlnbmRhdGEJQFhbJGpdLEBYWyRqXSwlZjE4CQkhIDMvIDcvIDU6VG1wPVhbMCwxXT4+PjI0CitfX18KKyRjb2RlLj08PF9fXyBpZiAoJGkmMSk7CisJc2xsCQkkYSw1LCR0bXAwCQkJISEgJGkKKwlhbmQJCSRjLCRiLCR0bXAzCisJbGQJCVskWGZlcitgNCooJGklMTYpYF0sJFhpCisJIGZwYWRkMzIJQFhbJGpdLEBYWyRqXSxAWFskal0JCSEgNC8gOC8gNjpYWzAsMV08PD0xCisJc3JsCQkkYSwyNywkdG1wMQorCWFkZAkJJHRtcDAsJGUsJGUKKwkgZm11bDh1bHgxNgklZjE4LCRmbXVsLCVmMTgJCQkhIDUvMTAvIDc6VG1wPj49NywgVG1wJj0xCisJc2xsCQkkYiwzMCwkdG1wMgorCWFkZAkJJHRtcDEsJGUsJGUKKwkgZnBhZGQzMgkkSyxAWFskbF0sJWYyMAkJCSEKKwlhbmRuCQkkZCwkYiwkdG1wMQorCWFkZAkJJFhpLCRlLCRlCisJIGZ4b3JzCQlAWFsoJGsrMTMpJTE2XSxAWFska10sQFhbJGtdCSEtMS8tMS8tMTpYWzBdXj1YWzEzXQorCXNybAkJJGIsMiwkYgorCW9yCQkkdG1wMSwkdG1wMywkdG1wMQorCSBmeG9yCQklZjE4LEBYWyRqXSxAWFskal0JCSEgOC8xNC8xMDpYWzAsMV18PVRtcAorCW9yCQkkdG1wMiwkYiwkYgorCWFkZAkJJHRtcDEsJGUsJGUKK19fXworJGNvZGUuPTw8X19fIGlmICgkaSYxICYmICRpPj0yKTsKKwkgc3RkCQklZjIwLFskWGZlcitgNCokbGBdCQkhCitfX18KK30KKworc3ViIEJPRFlfMjBfMzkgeworbXkgKCRpLCRhLCRiLCRjLCRkLCRlKT1AXzsKK215ICRqPSRpJn4xOworbXkgJGs9KCRqKzE2KzIpJTE2OwkjIGFoZWFkIHJlZmVyZW5jZQorbXkgJGw9KCRqKzE2LTIpJTE2OwkjIGJlaGluZCByZWZlcmVuY2UKK215ICRLPUBWS1soJGorMTYtMikvMjBdOworCiskaj0oJGorMTYpJTE2OworCiskY29kZS49PDxfX18gaWYgKCEoJGkmMSkgJiYgJGk8NjQpOworCXNsbAkJJGEsNSwkdG1wMAkJCSEhICRpCisJbGQJCVskWGZlcitgNCooJGklMTYpYF0sJFhpCisJIGZ4b3JzCQlAWFsoJGorMTQpJTE2XSxAWFskaisxXSxAWFskaisxXSEgMC8gMC8gMDpYWzFdXj1YWzE0XQorCXNybAkJJGEsMjcsJHRtcDEKKwlhZGQJCSR0bXAwLCRlLCRlCisJIGZ4b3IJCUBYWygkaisyKSUxNl0sQFhbKCRqKzgpJTE2XSwlZjE4ISAxLyAxLyAxOlRtcD1YWzIsM11eWFs4LDldCisJeG9yCQkkYywkYiwkdG1wMAorCWFkZAkJJHRtcDEsJGUsJGUKKwlzbGwJCSRiLDMwLCR0bXAyCisJeG9yCQkkZCwkdG1wMCwkdG1wMQorCSBmeG9yCQklZjE4LEBYWyRqXSxAWFskal0JCSEgMi8gNC8gMzpYWzAsMV1ePVhbMiwzXV5YWzgsOV0KKwlzcmwJCSRiLDIsJGIKKwlhZGQJCSR0bXAxLCRlLCRlCisJb3IJCSR0bXAyLCRiLCRiCisJYWRkCQkkWGksJGUsJGUKKwkgZmFsaWduZGF0YQlAWFskal0sQFhbJGpdLCVmMTgJCSEgMy8gNy8gNTpUbXA9WFswLDFdPj4+MjQKK19fXworJGNvZGUuPTw8X19fIGlmICgkaSYxICYmICRpPDY0KTsKKwlzbGwJCSRhLDUsJHRtcDAJCQkhISAkaQorCWxkCQlbJFhmZXIrYDQqKCRpJTE2KWBdLCRYaQorCSBmcGFkZDMyCUBYWyRqXSxAWFskal0sQFhbJGpdCQkhIDQvIDgvIDY6WFswLDFdPDw9MQorCXNybAkJJGEsMjcsJHRtcDEKKwlhZGQJCSR0bXAwLCRlLCRlCisJIGZtdWw4dWx4MTYJJWYxOCwkZm11bCwlZjE4CQkJISA1LzEwLyA3OlRtcD4+PTcsIFRtcCY9MQorCXhvcgkJJGMsJGIsJHRtcDAKKwlhZGQJCSR0bXAxLCRlLCRlCisJIGZwYWRkMzIJJEssQFhbJGxdLCVmMjAJCQkhCisJc2xsCQkkYiwzMCwkdG1wMgorCXhvcgkJJGQsJHRtcDAsJHRtcDEKKwkgZnhvcnMJCUBYWygkaysxMyklMTZdLEBYWyRrXSxAWFska10JIS0xLy0xLy0xOlhbMF1ePVhbMTNdCisJc3JsCQkkYiwyLCRiCisJYWRkCQkkdG1wMSwkZSwkZQorCSBmeG9yCQklZjE4LEBYWyRqXSxAWFskal0JCSEgOC8xNC8xMDpYWzAsMV18PVRtcAorCW9yCQkkdG1wMiwkYiwkYgorCWFkZAkJJFhpLCRlLCRlCisJIHN0ZAkJJWYyMCxbJFhmZXIrYDQqJGxgXQkJIQorX19fCiskY29kZS49PDxfX18gaWYgKCRpPT02NCk7CisJc2xsCQkkYSw1LCR0bXAwCQkJISEgJGkKKwlsZAkJWyRYZmVyK2A0KigkaSUxNilgXSwkWGkKKwkgZnBhZGQzMgkkSyxAWFskbF0sJWYyMAorCXNybAkJJGEsMjcsJHRtcDEKKwlhZGQJCSR0bXAwLCRlLCRlCisJeG9yCQkkYywkYiwkdG1wMAorCWFkZAkJJHRtcDEsJGUsJGUKKwlzbGwJCSRiLDMwLCR0bXAyCisJeG9yCQkkZCwkdG1wMCwkdG1wMQorCSBzdGQJCSVmMjAsWyRYZmVyK2A0KiRsYF0KKwlzcmwJCSRiLDIsJGIKKwlhZGQJCSR0bXAxLCRlLCRlCisJb3IJCSR0bXAyLCRiLCRiCisJYWRkCQkkWGksJGUsJGUKK19fXworJGNvZGUuPTw8X19fIGlmICgkaT42NCk7CisJc2xsCQkkYSw1LCR0bXAwCQkJISEgJGkKKwlsZAkJWyRYZmVyK2A0KigkaSUxNilgXSwkWGkKKwlzcmwJCSRhLDI3LCR0bXAxCisJYWRkCQkkdG1wMCwkZSwkZQorCXhvcgkJJGMsJGIsJHRtcDAKKwlhZGQJCSR0bXAxLCRlLCRlCisJc2xsCQkkYiwzMCwkdG1wMgorCXhvcgkJJGQsJHRtcDAsJHRtcDEKKwlzcmwJCSRiLDIsJGIKKwlhZGQJCSR0bXAxLCRlLCRlCisJb3IJCSR0bXAyLCRiLCRiCisJYWRkCQkkWGksJGUsJGUKK19fXworfQorCitzdWIgQk9EWV80MF81OSB7CitteSAoJGksJGEsJGIsJGMsJGQsJGUpPUBfOworbXkgJGo9JGkmfjE7CitteSAkaz0oJGorMTYrMiklMTY7CSMgYWhlYWQgcmVmZXJlbmNlCitteSAkbD0oJGorMTYtMiklMTY7CSMgYmVoaW5kIHJlZmVyZW5jZQorbXkgJEs9QFZLWygkaisxNi0yKS8yMF07CisKKyRqPSgkaisxNiklMTY7CisKKyRjb2RlLj08PF9fXyBpZiAoISgkaSYxKSk7CisJc2xsCQkkYSw1LCR0bXAwCQkJISEgJGkKKwlsZAkJWyRYZmVyK2A0KigkaSUxNilgXSwkWGkKKwkgZnhvcnMJCUBYWygkaisxNCklMTZdLEBYWyRqKzFdLEBYWyRqKzFdISAwLyAwLyAwOlhbMV1ePVhbMTRdCisJc3JsCQkkYSwyNywkdG1wMQorCWFkZAkJJHRtcDAsJGUsJGUKKwkgZnhvcgkJQFhbKCRqKzIpJTE2XSxAWFsoJGorOCklMTZdLCVmMTghIDEvIDEvIDE6VG1wPVhbMiwzXV5YWzgsOV0KKwlhbmQJCSRjLCRiLCR0bXAwCisJYWRkCQkkdG1wMSwkZSwkZQorCXNsbAkJJGIsMzAsJHRtcDIKKwlvcgkJJGMsJGIsJHRtcDEKKwkgZnhvcgkJJWYxOCxAWFskal0sQFhbJGpdCQkhIDIvIDQvIDM6WFswLDFdXj1YWzIsM11eWFs4LDldCisJc3JsCQkkYiwyLCRiCisJYW5kCQkkZCwkdG1wMSwkdG1wMQorCWFkZAkJJFhpLCRlLCRlCisJb3IJCSR0bXAxLCR0bXAwLCR0bXAxCisJIGZhbGlnbmRhdGEJQFhbJGpdLEBYWyRqXSwlZjE4CQkhIDMvIDcvIDU6VG1wPVhbMCwxXT4+PjI0CisJb3IJCSR0bXAyLCRiLCRiCisJYWRkCQkkdG1wMSwkZSwkZQorCSBmcGFkZDMyCUBYWyRqXSxAWFskal0sQFhbJGpdCQkhIDQvIDgvIDY6WFswLDFdPDw9MQorX19fCiskY29kZS49PDxfX18gaWYgKCRpJjEpOworCXNsbAkJJGEsNSwkdG1wMAkJCSEhICRpCisJbGQJCVskWGZlcitgNCooJGklMTYpYF0sJFhpCisJc3JsCQkkYSwyNywkdG1wMQorCWFkZAkJJHRtcDAsJGUsJGUKKwkgZm11bDh1bHgxNgklZjE4LCRmbXVsLCVmMTgJCQkhIDUvMTAvIDc6VG1wPj49NywgVG1wJj0xCisJYW5kCQkkYywkYiwkdG1wMAorCWFkZAkJJHRtcDEsJGUsJGUKKwkgZnBhZGQzMgkkSyxAWFskbF0sJWYyMAkJCSEKKwlzbGwJCSRiLDMwLCR0bXAyCisJb3IJCSRjLCRiLCR0bXAxCisJIGZ4b3JzCQlAWFsoJGsrMTMpJTE2XSxAWFska10sQFhbJGtdCSEtMS8tMS8tMTpYWzBdXj1YWzEzXQorCXNybAkJJGIsMiwkYgorCWFuZAkJJGQsJHRtcDEsJHRtcDEKKwkgZnhvcgkJJWYxOCxAWFskal0sQFhbJGpdCQkhIDgvMTQvMTA6WFswLDFdfD1UbXAKKwlhZGQJCSRYaSwkZSwkZQorCW9yCQkkdG1wMSwkdG1wMCwkdG1wMQorCW9yCQkkdG1wMiwkYiwkYgorCWFkZAkJJHRtcDEsJGUsJGUKKwkgc3RkCQklZjIwLFskWGZlcitgNCokbGBdCQkhCitfX18KK30KKworIyBJZiB0aGVyZSBpcyBtb3JlIGRhdGEgdG8gcHJvY2VzcywgdGhlbiB3ZSBwcmUtZmV0Y2ggdGhlIGRhdGEgZm9yCisjIG5leHQgaXRlcmF0aW9uIGluIGxhc3QgdGVuIHJvdW5kcy4uLgorc3ViIEJPRFlfNzBfNzkgeworbXkgKCRpLCRhLCRiLCRjLCRkLCRlKT1AXzsKK215ICRqPSRpJn4xOworbXkgJG09KCRpJTgpKjI7CisKKyRqPSgkaisxNiklMTY7CisKKyRjb2RlLj08PF9fXyBpZiAoJGk9PTcwKTsKKwlzbGwJCSRhLDUsJHRtcDAJCQkhISAkaQorCWxkCQlbJFhmZXIrYDQqKCRpJTE2KWBdLCRYaQorCXNybAkJJGEsMjcsJHRtcDEKKwlhZGQJCSR0bXAwLCRlLCRlCisJIGxkZAkJWyRpbnArNjRdLEBYWzBdCisJeG9yCQkkYywkYiwkdG1wMAorCWFkZAkJJHRtcDEsJGUsJGUKKwlzbGwJCSRiLDMwLCR0bXAyCisJeG9yCQkkZCwkdG1wMCwkdG1wMQorCXNybAkJJGIsMiwkYgorCWFkZAkJJHRtcDEsJGUsJGUKKwlvcgkJJHRtcDIsJGIsJGIKKwlhZGQJCSRYaSwkZSwkZQorCisJYW5kCQkkaW5wLC02NCwkblhmZXIKKwlpbmMJCTY0LCRpbnAKKwlhbmQJCSRuWGZlciwyNTUsJG5YZmVyCisJYWxpZ25hZGRyCSVnMCwkYWxpZ24sJWcwCisJYWRkCQkkYmFzZSwkblhmZXIsJG5YZmVyCitfX18KKyRjb2RlLj08PF9fXyBpZiAoJGk9PTcxKTsKKwlzbGwJCSRhLDUsJHRtcDAJCQkhISAkaQorCWxkCQlbJFhmZXIrYDQqKCRpJTE2KWBdLCRYaQorCXNybAkJJGEsMjcsJHRtcDEKKwlhZGQJCSR0bXAwLCRlLCRlCisJeG9yCQkkYywkYiwkdG1wMAorCWFkZAkJJHRtcDEsJGUsJGUKKwlzbGwJCSRiLDMwLCR0bXAyCisJeG9yCQkkZCwkdG1wMCwkdG1wMQorCXNybAkJJGIsMiwkYgorCWFkZAkJJHRtcDEsJGUsJGUKKwlvcgkJJHRtcDIsJGIsJGIKKwlhZGQJCSRYaSwkZSwkZQorX19fCiskY29kZS49PDxfX18gaWYgKCRpPj03Mik7CisJIGZhbGlnbmRhdGEJQFhbJG1dLEBYWyRtKzJdLEBYWyRtXQorCXNsbAkJJGEsNSwkdG1wMAkJCSEhICRpCisJbGQJCVskWGZlcitgNCooJGklMTYpYF0sJFhpCisJc3JsCQkkYSwyNywkdG1wMQorCWFkZAkJJHRtcDAsJGUsJGUKKwl4b3IJCSRjLCRiLCR0bXAwCisJYWRkCQkkdG1wMSwkZSwkZQorCSBmcGFkZDMyCSRWS18wMF8xOSxAWFskbV0sJWYyMAorCXNsbAkJJGIsMzAsJHRtcDIKKwl4b3IJCSRkLCR0bXAwLCR0bXAxCisJc3JsCQkkYiwyLCRiCisJYWRkCQkkdG1wMSwkZSwkZQorCW9yCQkkdG1wMiwkYiwkYgorCWFkZAkJJFhpLCRlLCRlCitfX18KKyRjb2RlLj08PF9fXyBpZiAoJGk8NzcpOworCSBsZGQJCVskaW5wK2A4KigkaSsxLTcwKWBdLEBYWzIqKCRpKzEtNzApXQorX19fCiskY29kZS49PDxfX18gaWYgKCRpPT03Nyk7CSMgcmVkdW5kYW50IGlmICRpbnAgd2FzIGFsaWduZWQKKwkgYWRkCQkkYWxpZ24sNjMsJHRtcDAKKwkgYW5kCQkkdG1wMCwtOCwkdG1wMAorCSBsZGQJCVskaW5wKyR0bXAwXSxAWFsxNl0KK19fXworJGNvZGUuPTw8X19fIGlmICgkaT49NzIpOworCSBzdGQJCSVmMjAsWyRuWGZlcitgNCokbWBdCitfX18KK30KKworJGNvZGUuPTw8X19fOworLnNlY3Rpb24JIi50ZXh0IiwjYWxsb2MsI2V4ZWNpbnN0cgorCisuYWxpZ24JNjQKK3Zpc19jb25zdDoKKy5sb25nCTB4NWE4Mjc5OTksMHg1YTgyNzk5OQkhIEtfMDBfMTkKKy5sb25nCTB4NmVkOWViYTEsMHg2ZWQ5ZWJhMQkhIEtfMjBfMzkKKy5sb25nCTB4OGYxYmJjZGMsMHg4ZjFiYmNkYwkhIEtfNDBfNTkKKy5sb25nCTB4Y2E2MmMxZDYsMHhjYTYyYzFkNgkhIEtfNjBfNzkKKy5sb25nCTB4MDAwMDAxMDAsMHgwMDAwMDEwMAorLmFsaWduCTY0CisudHlwZQl2aXNfY29uc3QsI29iamVjdAorLnNpemUJdmlzX2NvbnN0LCguLXZpc19jb25zdCkKKworLmdsb2JsCXNoYTFfYmxvY2tfZGF0YV9vcmRlcgorc2hhMV9ibG9ja19kYXRhX29yZGVyOgorCXNhdmUJJXNwLC0kZnJhbWUsJXNwCisJYWRkCSVmcCwkYmlhcy0yNTYsJGJhc2UKKworMToJY2FsbAkuKzgKKwlhZGQJJW83LHZpc19jb25zdC0xYiwkdG1wMAorCisJbGRkCVskdG1wMCswXSwkVktfMDBfMTkKKwlsZGQJWyR0bXAwKzhdLCRWS18yMF8zOQorCWxkZAlbJHRtcDArMTZdLCRWS180MF81OQorCWxkZAlbJHRtcDArMjRdLCRWS182MF83OQorCWxkZAlbJHRtcDArMzJdLCRmbXVsCisKKwlsZAlbJGN0eCswXSwkQWN0eAorCWFuZAkkYmFzZSwtMjU2LCRiYXNlCisJbGQJWyRjdHgrNF0sJEJjdHgKKwlzdWIJJGJhc2UsJGJpYXMrJGZyYW1lLCVzcAorCWxkCVskY3R4KzhdLCRDY3R4CisJYW5kCSRpbnAsNywkYWxpZ24KKwlsZAlbJGN0eCsxMl0sJERjdHgKKwlhbmQJJGlucCwtOCwkaW5wCisJbGQJWyRjdHgrMTZdLCRFY3R4CisKKwkhIFhbMTZdIGlzIG1haW50YWluZWQgaW4gRlAgcmVnaXN0ZXIgYmFuaworCWFsaWduYWRkcgklZzAsJGFsaWduLCVnMAorCWxkZAkJWyRpbnArMF0sQFhbMF0KKwlzdWIJCSRpbnAsLTY0LCRYZmVyCisJbGRkCQlbJGlucCs4XSxAWFsyXQorCWFuZAkJJFhmZXIsLTY0LCRYZmVyCisJbGRkCQlbJGlucCsxNl0sQFhbNF0KKwlhbmQJCSRYZmVyLDI1NSwkWGZlcgorCWxkZAkJWyRpbnArMjRdLEBYWzZdCisJYWRkCQkkYmFzZSwkWGZlciwkWGZlcgorCWxkZAkJWyRpbnArMzJdLEBYWzhdCisJbGRkCQlbJGlucCs0MF0sQFhbMTBdCisJbGRkCQlbJGlucCs0OF0sQFhbMTJdCisJYnJ6LHB0CQkkYWxpZ24sLkxhbGlnbmVkCisJbGRkCQlbJGlucCs1Nl0sQFhbMTRdCisKKwlsZGQJCVskaW5wKzY0XSxAWFsxNl0KKwlmYWxpZ25kYXRhCUBYWzBdLEBYWzJdLEBYWzBdCisJZmFsaWduZGF0YQlAWFsyXSxAWFs0XSxAWFsyXQorCWZhbGlnbmRhdGEJQFhbNF0sQFhbNl0sQFhbNF0KKwlmYWxpZ25kYXRhCUBYWzZdLEBYWzhdLEBYWzZdCisJZmFsaWduZGF0YQlAWFs4XSxAWFsxMF0sQFhbOF0KKwlmYWxpZ25kYXRhCUBYWzEwXSxAWFsxMl0sQFhbMTBdCisJZmFsaWduZGF0YQlAWFsxMl0sQFhbMTRdLEBYWzEyXQorCWZhbGlnbmRhdGEJQFhbMTRdLEBYWzE2XSxAWFsxNF0KKworLkxhbGlnbmVkOgorCW1vdgkJNSwkdG1wMAorCWRlYwkJMSwkbGVuCisJYWxpZ25hZGRyCSVnMCwkdG1wMCwlZzAKKwlmcGFkZDMyCQkkVktfMDBfMTksQFhbMF0sJWYxNgorCWZwYWRkMzIJCSRWS18wMF8xOSxAWFsyXSwlZjE4CisJZnBhZGQzMgkJJFZLXzAwXzE5LEBYWzRdLCVmMjAKKwlmcGFkZDMyCQkkVktfMDBfMTksQFhbNl0sJWYyMgorCWZwYWRkMzIJCSRWS18wMF8xOSxAWFs4XSwlZjI0CisJZnBhZGQzMgkJJFZLXzAwXzE5LEBYWzEwXSwlZjI2CisJZnBhZGQzMgkJJFZLXzAwXzE5LEBYWzEyXSwlZjI4CisJZnBhZGQzMgkJJFZLXzAwXzE5LEBYWzE0XSwlZjMwCisJc3RkCQklZjE2LFskWGZlciswXQorCW1vdgkJJEFjdHgsJEEKKwlzdGQJCSVmMTgsWyRYZmVyKzhdCisJbW92CQkkQmN0eCwkQgorCXN0ZAkJJWYyMCxbJFhmZXIrMTZdCisJbW92CQkkQ2N0eCwkQworCXN0ZAkJJWYyMixbJFhmZXIrMjRdCisJbW92CQkkRGN0eCwkRAorCXN0ZAkJJWYyNCxbJFhmZXIrMzJdCisJbW92CQkkRWN0eCwkRQorCXN0ZAkJJWYyNixbJFhmZXIrNDBdCisJZnhvcnMJCUBYWzEzXSxAWFswXSxAWFswXQorCXN0ZAkJJWYyOCxbJFhmZXIrNDhdCisJYmEJCS5Mb29wCisJc3RkCQklZjMwLFskWGZlcis1Nl0KKy5hbGlnbgkzMgorLkxvb3A6CitfX18KK2ZvciAoJGk9MDskaTwyMDskaSsrKQl7ICZCT0RZXzAwXzE5KCRpLEBWKTsgdW5zaGlmdChAVixwb3AoQFYpKTsgfQorZm9yICg7JGk8NDA7JGkrKykJeyAmQk9EWV8yMF8zOSgkaSxAVik7IHVuc2hpZnQoQFYscG9wKEBWKSk7IH0KK2ZvciAoOyRpPDYwOyRpKyspCXsgJkJPRFlfNDBfNTkoJGksQFYpOyB1bnNoaWZ0KEBWLHBvcChAVikpOyB9Citmb3IgKDskaTw3MDskaSsrKQl7ICZCT0RZXzIwXzM5KCRpLEBWKTsgdW5zaGlmdChAVixwb3AoQFYpKTsgfQorJGNvZGUuPTw8X19fOworCXRzdAkJJGxlbgorCWJ6LHBuCQlgJGJpdHM9PTMyPyIlaWNjIjoiJXhjYyJgLC5MdGFpbAorCW5vcAorX19fCitmb3IgKDskaTw4MDskaSsrKQl7ICZCT0RZXzcwXzc5KCRpLEBWKTsgdW5zaGlmdChAVixwb3AoQFYpKTsgfQorJGNvZGUuPTw8X19fOworCWFkZAkJJEEsJEFjdHgsJEFjdHgKKwlhZGQJCSRCLCRCY3R4LCRCY3R4CisJYWRkCQkkQywkQ2N0eCwkQ2N0eAorCWFkZAkJJEQsJERjdHgsJERjdHgKKwlhZGQJCSRFLCRFY3R4LCRFY3R4CisJbW92CQk1LCR0bXAwCisJZnhvcnMJCUBYWzEzXSxAWFswXSxAWFswXQorCW1vdgkJJEFjdHgsJEEKKwltb3YJCSRCY3R4LCRCCisJbW92CQkkQ2N0eCwkQworCW1vdgkJJERjdHgsJEQKKwltb3YJCSRFY3R4LCRFCisJYWxpZ25hZGRyCSVnMCwkdG1wMCwlZzAJCisJZGVjCQkxLCRsZW4KKwliYQkJLkxvb3AKKwltb3YJCSRuWGZlciwkWGZlcgorCisuYWxpZ24JMzIKKy5MdGFpbDoKK19fXworZm9yKCRpPTcwOyRpPDgwOyRpKyspCXsgJkJPRFlfMjBfMzkoJGksQFYpOyB1bnNoaWZ0KEBWLHBvcChAVikpOyB9CiskY29kZS49PDxfX187CisJYWRkCSRBLCRBY3R4LCRBY3R4CisJYWRkCSRCLCRCY3R4LCRCY3R4CisJYWRkCSRDLCRDY3R4LCRDY3R4CisJYWRkCSRELCREY3R4LCREY3R4CisJYWRkCSRFLCRFY3R4LCRFY3R4CisKKwlzdAkkQWN0eCxbJGN0eCswXQorCXN0CSRCY3R4LFskY3R4KzRdCisJc3QJJENjdHgsWyRjdHgrOF0KKwlzdAkkRGN0eCxbJGN0eCsxMl0KKwlzdAkkRWN0eCxbJGN0eCsxNl0KKworCXJldAorCXJlc3RvcmUKKy50eXBlCXNoYTFfYmxvY2tfZGF0YV9vcmRlciwjZnVuY3Rpb24KKy5zaXplCXNoYTFfYmxvY2tfZGF0YV9vcmRlciwoLi1zaGExX2Jsb2NrX2RhdGFfb3JkZXIpCisuYXNjaXoJIlNIQTEgYmxvY2sgdHJhbnNmb3JtIGZvciBTUEFSQ3Y5YSwgQ1JZUFRPR0FNUyBieSA8YXBwcm9cQG9wZW5zc2wub3JnPiIKK19fXworCisjIFB1cnBvc2Ugb2YgdGhlc2Ugc3Vicm91dGluZXMgaXMgdG8gZXhwbGljaXRseSBlbmNvZGUgVklTIGluc3RydWN0aW9ucywKKyMgc28gdGhhdCBvbmUgY2FuIGNvbXBpbGUgdGhlIG1vZHVsZSB3aXRob3V0IGhhdmluZyB0byBzcGVjaWZ5IFZJUworIyBleHRlbnRpb25zIG9uIGNvbXBpbGVyIGNvbW1hbmQgbGluZSwgZS5nLiAteGFyY2g9djkgdnMuIC14YXJjaD12OWEuCisjIElkZWEgaXMgdG8gcmVzZXJ2ZSBmb3Igb3B0aW9uIHRvIHByb2R1Y2UgInVuaXZlcnNhbCIgYmluYXJ5IGFuZCBsZXQKKyMgcHJvZ3JhbW1lciBkZXRlY3QgaWYgY3VycmVudCBDUFUgaXMgVklTIGNhcGFibGUgYXQgcnVuLXRpbWUuCitzdWIgdW52aXMgeworbXkgKCRtbmVtb25pYywkcnMxLCRyczIsJHJkKT1AXzsKK215ICRyZWYsJG9wZjsKK215ICV2aXNvcGYgPSAoCSJmbXVsOHVseDE2Igk9PiAweDAzNywKKwkJImZhbGlnbmRhdGEiCT0+IDB4MDQ4LAorCQkiZnBhZGQzMiIJPT4gMHgwNTIsCisJCSJmeG9yIgkJPT4gMHgwNmMsCisJCSJmeG9ycyIJCT0+IDB4MDZkCSk7CisKKyAgICAkcmVmID0gIiRtbmVtb25pY1x0JHJzMSwkcnMyLCRyZCI7CisKKyAgICBpZiAoJG9wZj0kdmlzb3BmeyRtbmVtb25pY30pIHsKKwlmb3JlYWNoICgkcnMxLCRyczIsJHJkKSB7CisJICAgIHJldHVybiAkcmVmIGlmICghLyVmKFswLTldezEsMn0pLyk7CisJICAgICRfPSQxOworCSAgICBpZiAoJDE+PTMyKSB7CisJCXJldHVybiAkcmVmIGlmICgkMSYxKTsKKwkJIyByZS1lbmNvZGUgZm9yIHVwcGVyIGRvdWJsZSByZWdpc3RlciBhZGRyZXNzaW5nCisJCSRfPSgkMXwkMT4+NSkmMzE7CisJICAgIH0KKwl9CisKKwlyZXR1cm4Jc3ByaW50ZiAiLndvcmRcdDB4JTA4eCAhJXMiLAorCQkJMHg4MWIwMDAwMHwkcmQ8PDI1fCRyczE8PDE0fCRvcGY8PDV8JHJzMiwKKwkJCSRyZWY7CisgICAgfSBlbHNlIHsKKwlyZXR1cm4gJHJlZjsKKyAgICB9Cit9CitzdWIgdW5hbGlnbmFkZHIgeworbXkgKCRtbmVtb25pYywkcnMxLCRyczIsJHJkKT1AXzsKK215ICViaWFzID0gKCAiZyIgPT4gMCwgIm8iID0+IDgsICJsIiA9PiAxNiwgImkiID0+IDI0ICk7CitteSAkcmVmPSIkbW5lbW9uaWNcdCRyczEsJHJzMiwkcmQiOworCisgICAgZm9yZWFjaCAoJHJzMSwkcnMyLCRyZCkgeworCWlmICgvJShbZ29saV0pKFswLTddKS8pCXsgJF89JGJpYXN7JDF9KyQyOyB9CisJZWxzZQkJCXsgcmV0dXJuICRyZWY7IH0KKyAgICB9CisgICAgcmV0dXJuICBzcHJpbnRmICIud29yZFx0MHglMDh4ICElcyIsCisJCSAgICAweDgxYjAwMzAwfCRyZDw8MjV8JHJzMTw8MTR8JHJzMiwKKwkJICAgICRyZWY7Cit9CisKKyRjb2RlID1+IHMvXGAoW15cYF0qKVxgL2V2YWwgJDEvZ2VtOworJGNvZGUgPX4gcy9cYihmW15cc10qKVxzKyglZlswLTldezEsMn0pLCglZlswLTldezEsMn0pLCglZlswLTldezEsMn0pLworCQkmdW52aXMoJDEsJDIsJDMsJDQpCisJICAvZ2VtOworJGNvZGUgPX4gcy9cYihhbGlnbmFkZHIpXHMrKCVbZ29saV1bMC03XSksKCVbZ29saV1bMC03XSksKCVbZ29saV1bMC03XSkvCisJCSZ1bmFsaWduYWRkcigkMSwkMiwkMywkNCkKKwkgIC9nZW07CitwcmludCAkY29kZTsKK2Nsb3NlIFNURE9VVDsKZGlmZiAtLWdpdCBhL2NyeXB0by9zaGEvYXNtL3NoYTEtdGh1bWIucGwgYi9jcnlwdG8vc2hhL2FzbS9zaGExLXRodW1iLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjOWVhOWIKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vc2hhL2FzbS9zaGExLXRodW1iLnBsCkBAIC0wLDAgKzEsMjU5IEBACisjIS91c3IvYmluL2VudiBwZXJsCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgV3JpdHRlbiBieSBBbmR5IFBvbHlha292IDxhcHByb0BmeS5jaGFsbWVycy5zZT4gZm9yIHRoZSBPcGVuU1NMCisjIHByb2plY3QuIFRoZSBtb2R1bGUgaXMsIGhvd2V2ZXIsIGR1YWwgbGljZW5zZWQgdW5kZXIgT3BlblNTTCBhbmQKKyMgQ1JZUFRPR0FNUyBsaWNlbnNlcyBkZXBlbmRpbmcgb24gd2hlcmUgeW91IG9idGFpbiBpdC4gRm9yIGZ1cnRoZXIKKyMgZGV0YWlscyBzZWUgaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9+YXBwcm8vY3J5cHRvZ2Ftcy8uCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgc2hhMV9ibG9jayBmb3IgVGh1bWIuCisjCisjIEphbnVhcnkgMjAwNy4KKyMKKyMgVGhlIGNvZGUgZG9lcyBub3QgcHJlc2VudCBkaXJlY3QgaW50ZXJlc3QgdG8gT3BlblNTTCwgYmVjYXVzZSBvZiBsb3cKKyMgcGVyZm9ybWFuY2UuIEl0cyBwdXJwb3NlIGlzIHRvIGVzdGFibGlzaCBfc2l6ZV8gYmVuY2htYXJrLiBQcmV0dHkKKyMgdXNlbGVzcyBvbmUgSSBtdXN0IHNheSwgYmVjYXVzZSAzMCUgb3IgODggYnl0ZXMgbGFyZ2VyIEFSTXY0IGNvZGUKKyMgW2F2aWFsYWJsZSBvbiBkZW1hbmRdIGlzIGFsbW9zdCBfdHdpY2VfIGFzIGZhc3QuIEl0IHNob3VsZCBhbHNvIGJlCisjIG5vdGVkIHRoYXQgaW4tbGluaW5nIG9mIC5MY29tbW9uIGFuZCAuTHJvdGF0ZSBpbXByb3ZlcyBwZXJmb3JtYW5jZQorIyBieSBvdmVyIDQwJSwgd2hpbGUgY29kZSBpbmNyZWFzZXMgYnkgb25seSAxMCUgb3IgMzIgYnl0ZXMuIEJ1dCBvbmNlCisjIGFnYWluLCB0aGUgZ29hbCB3YXMgdG8gZXN0YWJsaXNoIF9zaXplXyBiZW5jaG1hcmssIG5vdCBwZXJmb3JtYW5jZS4KKworJG91dHB1dD1zaGlmdDsKK29wZW4gU1RET1VULCI+JG91dHB1dCI7CisKKyRpbmxpbmU9MDsKKyMkY2hlYXRfb25fYmludXRpbHM9MTsKKworJHQwPSJyMCI7CiskdDE9InIxIjsKKyR0Mj0icjIiOworJGE9InIzIjsKKyRiPSJyNCI7CiskYz0icjUiOworJGQ9InI2IjsKKyRlPSJyNyI7CiskSz0icjgiOwkjICJ1cHBlciIgcmVnaXN0ZXJzIGNhbiBiZSB1c2VkIGluIGFkZC9zdWIgYW5kIG1vdiBpbnNucworJGN0eD0icjkiOworJGlucD0icjEwIjsKKyRsZW49InIxMSI7CiskWGk9InIxMiI7CisKK3N1YiBjb21tb24geworPDxfX187CisJc3ViCSR0MCwjNAorCWxkcgkkdDEsWyR0MF0KKwlhZGQJJGUsJEsJCQlAIEUrPUtfeHhfeHgKKwlsc2wJJHQyLCRhLCM1CisJYWRkCSR0MiwkZQorCWxzcgkkZSwkYSwjMjcKKwlhZGQJJHQyLCRlCQkJQCBFKz1ST1IoQSwyNykKKwlhZGQJJHQyLCR0MQkJCUAgRSs9WFtpXQorX19fCit9CitzdWIgcm90YXRlIHsKKzw8X19fOworCW1vdgkkZSwkZAkJCUAgRT1ECisJbW92CSRkLCRjCQkJQCBEPUMKKwlsc2wJJGMsJGIsIzMwCisJbHNyCSRiLCRiLCMyCisJb3JyCSRjLCRiCQkJQCBDPVJPUihCLDIpCisJbW92CSRiLCRhCQkJQCBCPUEKKwlhZGQJJGEsJHQyLCR0MQkJQCBBPUUrRl94eF94eChCLEMsRCkKK19fXworfQorCitzdWIgQk9EWV8wMF8xOSB7CiskY29kZS49JGlubGluZT8mY29tbW9uKCk6Ilx0YmwJLkxjb21tb25cbiI7CiskY29kZS49PDxfX187CisJbW92CSR0MSwkYworCWVvcgkkdDEsJGQKKwlhbmQJJHQxLCRiCisJZW9yCSR0MSwkZAkJCUAgRl8wMF8xOShCLEMsRCkKK19fXworJGNvZGUuPSRpbmxpbmU/JnJvdGF0ZSgpOiJcdGJsCS5Mcm90YXRlXG4iOworfQorCitzdWIgQk9EWV8yMF8zOSB7CiskY29kZS49JGlubGluZT8mY29tbW9uKCk6Ilx0YmwJLkxjb21tb25cbiI7CiskY29kZS49PDxfX187CisJbW92CSR0MSwkYgorCWVvcgkkdDEsJGMKKwllb3IJJHQxLCRkCQkJQCBGXzIwXzM5KEIsQyxEKQorX19fCiskY29kZS49JGlubGluZT8mcm90YXRlKCk6Ilx0YmwJLkxyb3RhdGVcbiI7Cit9CisKK3N1YiBCT0RZXzQwXzU5IHsKKyRjb2RlLj0kaW5saW5lPyZjb21tb24oKToiXHRibAkuTGNvbW1vblxuIjsKKyRjb2RlLj08PF9fXzsKKwltb3YJJHQxLCRiCisJYW5kCSR0MSwkYworCW1vdgkkZSwkYgorCW9ycgkkZSwkYworCWFuZAkkZSwkZAorCW9ycgkkdDEsJGUJCQlAIEZfNDBfNTkoQixDLEQpCitfX18KKyRjb2RlLj0kaW5saW5lPyZyb3RhdGUoKToiXHRibAkuTHJvdGF0ZVxuIjsKK30KKworJGNvZGU9PDxfX187CisudGV4dAorLmNvZGUJMTYKKworLmdsb2JhbAlzaGExX2Jsb2NrX2RhdGFfb3JkZXIKKy50eXBlCXNoYTFfYmxvY2tfZGF0YV9vcmRlciwlZnVuY3Rpb24KKworLmFsaWduCTIKK3NoYTFfYmxvY2tfZGF0YV9vcmRlcjoKK19fXworaWYgKCRjaGVhdF9vbl9iaW51dGlscykgeworJGNvZGUuPTw8X19fOworLmNvZGUJMzIKKwlhZGQJcjMscGMsIzEKKwlieAlyMwkJCUAgc3dpdGNoIHRvIFRodW1iIElTQQorLmNvZGUJMTYKK19fXworfQorJGNvZGUuPTw8X19fOworCXB1c2gJe3I0LXI3fQorCW1vdglyMyxyOAorCW1vdglyNCxyOQorCW1vdglyNSxyMTAKKwltb3YJcjYscjExCisJbW92CXI3LHIxMgorCXB1c2gJe3IzLXI3LGxyfQorCWxzbAlyMiwjNgorCW1vdgkkY3R4LHIwCQkJQCBzYXZlIGNvbnRleHQKKwltb3YJJGlucCxyMQkJCUAgc2F2ZSBpbnAKKwltb3YJJGxlbixyMgkJCUAgc2F2ZSBsZW4KKwlhZGQJJGxlbiwkaW5wCQlAICRsZW4gdG8gcG9pbnQgYXQgaW5wIGVuZAorCisuTGxvb3A6CisJbW92CSRYaSxzcAorCW1vdgkkdDIsc3AKKwlzdWIJJHQyLCMxNio0CQlAIFszXQorLkxYbG9hZDoKKwlsZHJiCSRhLFskdDEsIzBdCQlAICR0MSBpcyByMSBhbmQgaG9sZHMgaW5wCisJbGRyYgkkYixbJHQxLCMxXQorCWxkcmIJJGMsWyR0MSwjMl0KKwlsZHJiCSRkLFskdDEsIzNdCisJbHNsCSRhLCMyNAorCWxzbAkkYiwjMTYKKwlsc2wJJGMsIzgKKwlvcnIJJGEsJGIKKwlvcnIJJGEsJGMKKwlvcnIJJGEsJGQKKwlhZGQJJHQxLCM0CisJcHVzaAl7JGF9CisJY21wCXNwLCR0MgorCWJuZQkuTFhsb2FkCQkJQCBbKzE0KjE2XQorCisJbW92CSRpbnAsJHQxCQlAIHVwZGF0ZSAkaW5wCisJc3ViCSR0MiwjMzIqNAorCXN1YgkkdDIsIzMyKjQKKwltb3YJJGUsIzMxCQkJQCBbKzRdCisuTFh1cGRhdGU6CisJbGRyCSRhLFtzcCwjMTUqNF0KKwlsZHIJJGIsW3NwLCMxMyo0XQorCWxkcgkkYyxbc3AsIzcqNF0KKwlsZHIJJGQsW3NwLCMyKjRdCisJZW9yCSRhLCRiCisJZW9yCSRhLCRjCisJZW9yCSRhLCRkCisJcm9yCSRhLCRlCisJcHVzaAl7JGF9CisJY21wCXNwLCR0MgorCWJuZQkuTFh1cGRhdGUJCUAgWysoMTErMSkqNjRdCisKKwlsZG1pYQkkdDAhLHskYSwkYiwkYywkZCwkZX0JQCAkdDAgaXMgcjAgYW5kIGhvbGRzIGN0eAorCW1vdgkkdDAsJFhpCisKKwlsZHIJJHQyLC5MS18wMF8xOQorCW1vdgkkdDEsJHQwCisJc3ViCSR0MSwjMjAqNAorCW1vdgkkWGksJHQxCisJbW92CSRLLCR0MgkJCUAgWys3KzRdCisuTF8wMF8xOToKK19fXworCSZCT0RZXzAwXzE5KCk7CiskY29kZS49PDxfX187CisJY21wCSRYaSwkdDAKKwlibmUJLkxfMDBfMTkJCUAgWysoMis5KzQrMis4KzIpKjIwXQorCisJbGRyCSR0MiwuTEtfMjBfMzkKKwltb3YJJHQxLCR0MAorCXN1YgkkdDEsIzIwKjQKKwltb3YJJFhpLCR0MQorCW1vdgkkSywkdDIJCQlAIFsrNV0KKy5MXzIwXzM5X29yXzYwXzc5OgorX19fCisJJkJPRFlfMjBfMzkoKTsKKyRjb2RlLj08PF9fXzsKKwljbXAJJFhpLCR0MAorCWJuZQkuTF8yMF8zOV9vcl82MF83OQlAIFsrKDIrOSszKzIrOCsyKSoyMCoyXQorCWNtcAlzcCwkdDAKKwliZXEJLkxkb25lCQkJQCBbKzJdCisKKwlsZHIJJHQyLC5MS180MF81OQorCW1vdgkkdDEsJHQwCisJc3ViCSR0MSwjMjAqNAorCW1vdgkkWGksJHQxCisJbW92CSRLLCR0MgkJCUAgWys1XQorLkxfNDBfNTk6CitfX18KKwkmQk9EWV80MF81OSgpOworJGNvZGUuPTw8X19fOworCWNtcAkkWGksJHQwCisJYm5lCS5MXzQwXzU5CQlAIFsrKDIrOSs2KzIrOCsyKSoyMF0KKworCWxkcgkkdDIsLkxLXzYwXzc5CisJbW92CSRYaSxzcAorCW1vdgkkSywkdDIKKwliCS5MXzIwXzM5X29yXzYwXzc5CUAgWys0XQorLkxkb25lOgorCW1vdgkkdDAsJGN0eAorCWxkcgkkdDEsWyR0MCwjMF0KKwlsZHIJJHQyLFskdDAsIzRdCisJYWRkCSRhLCR0MQorCWxkcgkkdDEsWyR0MCwjOF0KKwlhZGQJJGIsJHQyCisJbGRyCSR0MixbJHQwLCMxMl0KKwlhZGQJJGMsJHQxCisJbGRyCSR0MSxbJHQwLCMxNl0KKwlhZGQJJGQsJHQyCisJYWRkCSRlLCR0MQorCXN0bWlhCSR0MCEseyRhLCRiLCRjLCRkLCRlfQlAIFsrMjBdCisKKwlhZGQJc3AsIzgwKjQJCUAgZGVhbGxvY2F0ZSBzdGFjayBmcmFtZQorCW1vdgkkdDAsJGN0eAkJQCByZXN0b3JlIGN0eAorCW1vdgkkdDEsJGlucAkJQCByZXN0b3JlIGlucAorCWNtcAkkdDEsJGxlbgorCWJlcQkuTGV4aXQKKwliCS5MbG9vcAkJCUAgWys2XSB0b3RhbCAzMjEyIGN5Y2xlcworLkxleGl0OgorCXBvcAl7cjItcjd9CisJbW92CXI4LHIyCisJbW92CXI5LHIzCisJbW92CXIxMCxyNAorCW1vdglyMTEscjUKKwltb3YJcjEyLHI2CisJbW92CWxyLHI3CisJcG9wCXtyNC1yN30KKwlieAlscgorLmFsaWduCTIKK19fXworJGNvZGUuPSIuTGNvbW1vbjpcbiIuJmNvbW1vbigpLiJcdG1vdglwYyxsclxuIiBpZiAoISRpbmxpbmUpOworJGNvZGUuPSIuTHJvdGF0ZTpcbiIuJnJvdGF0ZSgpLiJcdG1vdglwYyxsclxuIiBpZiAoISRpbmxpbmUpOworJGNvZGUuPTw8X19fOworLmFsaWduCTIKKy5MS18wMF8xOToJLndvcmQJMHg1YTgyNzk5OQorLkxLXzIwXzM5Ogkud29yZAkweDZlZDllYmExCisuTEtfNDBfNTk6CS53b3JkCTB4OGYxYmJjZGMKKy5MS182MF83OToJLndvcmQJMHhjYTYyYzFkNgorLnNpemUJc2hhMV9ibG9ja19kYXRhX29yZGVyLC4tc2hhMV9ibG9ja19kYXRhX29yZGVyCisuYXNjaXoJIlNIQTEgYmxvY2sgdHJhbnNmb3JtIGZvciBUaHVtYiwgQ1JZUFRPR0FNUyBieSA8YXBwcm9cQG9wZW5zc2wub3JnPiIKK19fXworCitwcmludCAkY29kZTsKK2Nsb3NlIFNURE9VVDsgIyBlbmZvcmNlIGZsdXNoCmRpZmYgLS1naXQgYS9jcnlwdG8vc2hhL2FzbS9zaGExLXg4Nl82NC5wbCBiL2NyeXB0by9zaGEvYXNtL3NoYTEteDg2XzY0LnBsCmluZGV4IGY3ZWQ2N2EuLjRlZGM1ZWEgMTAwNzU1Ci0tLSBhL2NyeXB0by9zaGEvYXNtL3NoYTEteDg2XzY0LnBsCisrKyBiL2NyeXB0by9zaGEvYXNtL3NoYTEteDg2XzY0LnBsCkBAIC0yOSwxNCArMjksMTggQEAKICMgWGVvbiBQNAkrNjUlCQkrMCUJCTkuOQogIyBDb3JlMgkJKzYwJQkJKzEwJQkJNy4wCiAKLSRvdXRwdXQ9c2hpZnQ7CiskZmxhdm91ciA9IHNoaWZ0OworJG91dHB1dCAgPSBzaGlmdDsKK2lmICgkZmxhdm91ciA9fiAvXC4vKSB7ICRvdXRwdXQgPSAkZmxhdm91cjsgdW5kZWYgJGZsYXZvdXI7IH0KKworJHdpbjY0PTA7ICR3aW42ND0xIGlmICgkZmxhdm91ciA9fiAvW25tXWFzbXxtaW5ndzY0LyB8fCAkb3V0cHV0ID1+IC9cLmFzbSQvKTsKIAogJDAgPX4gbS8oLipbXC9cXF0pW15cL1xcXSskLzsgJGRpcj0kMTsKICggJHhsYXRlPSIke2Rpcn14ODZfNjQteGxhdGUucGwiIGFuZCAtZiAkeGxhdGUgKSBvcgogKCAkeGxhdGU9IiR7ZGlyfS4uLy4uL3Blcmxhc20veDg2XzY0LXhsYXRlLnBsIiBhbmQgLWYgJHhsYXRlKSBvcgogZGllICJjYW4ndCBsb2NhdGUgeDg2XzY0LXhsYXRlLnBsIjsKIAotb3BlbiBTVERPVVQsInwgJF5YICR4bGF0ZSAkb3V0cHV0IjsKK29wZW4gU1RET1VULCJ8ICReWCAkeGxhdGUgJGZsYXZvdXIgJG91dHB1dCI7CiAKICRjdHg9IiVyZGkiOwkjIDFzdCBhcmcKICRpbnA9IiVyc2kiOwkjIDJuZCBhcmcKQEAgLTY5LDEzICs3MywxNCBAQAogCXB1c2gJJXJieAogCXB1c2gJJXJicAogCXB1c2gJJXIxMgotCW1vdgklcnNwLCVyYXgKKwltb3YJJXJzcCwlcjExCiAJbW92CSVyZGksJGN0eAkjIHJlYXNzaWduZWQgYXJndW1lbnQKIAlzdWIJXCRgOCsxNio0YCwlcnNwCiAJbW92CSVyc2ksJGlucAkjIHJlYXNzaWduZWQgYXJndW1lbnQKIAlhbmQJXCQtNjQsJXJzcAogCW1vdgklcmR4LCRudW0JIyByZWFzc2lnbmVkIGFyZ3VtZW50Ci0JbW92CSVyYXgsYDE2KjRgKCVyc3ApCisJbW92CSVyMTEsYDE2KjRgKCVyc3ApCisuTHByb2xvZ3VlOgogCiAJbW92CTAoJGN0eCksJEEKIAltb3YJNCgkY3R4KSwkQgpAQCAtODgsMTAgKzkzLDEyIEBACiBzdWIgRVBJTE9HVUUgewogbXkgJGZ1bmM9c2hpZnQ7CiAkY29kZS49PDxfX187Ci0JbW92CWAxNio0YCglcnNwKSwlcnNwCi0JcG9wCSVyMTIKLQlwb3AJJXJicAotCXBvcAklcmJ4CisJbW92CWAxNio0YCglcnNwKSwlcnNpCisJbW92CSglcnNpKSwlcjEyCisJbW92CTgoJXJzaSksJXJicAorCW1vdgkxNiglcnNpKSwlcmJ4CisJbGVhCTI0KCVyc2kpLCVyc3AKKy5MZXBpbG9ndWU6CiAJcmV0CiAuc2l6ZQkkZnVuYywuLSRmdW5jCiBfX18KQEAgLTIzMyw4ICsyNDAsMTEwIEBACiAmRVBJTE9HVUUoInNoYTFfYmxvY2tfZGF0YV9vcmRlciIpOwogJGNvZGUuPTw8X19fOwogLmFzY2l6CSJTSEExIGJsb2NrIHRyYW5zZm9ybSBmb3IgeDg2XzY0LCBDUllQVE9HQU1TIGJ5IDxhcHByb1xAb3BlbnNzbC5vcmc+IgorLmFsaWduCTE2CiBfX18KIAorIyBFWENFUFRJT05fRElTUE9TSVRJT04gaGFuZGxlciAoRVhDRVBUSU9OX1JFQ09SRCAqcmVjLFVMT05HNjQgZnJhbWUsCisjCQlDT05URVhUICpjb250ZXh0LERJU1BBVENIRVJfQ09OVEVYVCAqZGlzcCkKK2lmICgkd2luNjQpIHsKKyRyZWM9IiVyY3giOworJGZyYW1lPSIlcmR4IjsKKyRjb250ZXh0PSIlcjgiOworJGRpc3A9IiVyOSI7CisKKyRjb2RlLj08PF9fXzsKKy5leHRlcm4JX19pbXBfUnRsVmlydHVhbFVud2luZAorLnR5cGUJc2VfaGFuZGxlcixcQGFiaS1vbW5pcG90ZW50CisuYWxpZ24JMTYKK3NlX2hhbmRsZXI6CisJcHVzaAklcnNpCisJcHVzaAklcmRpCisJcHVzaAklcmJ4CisJcHVzaAklcmJwCisJcHVzaAklcjEyCisJcHVzaAklcjEzCisJcHVzaAklcjE0CisJcHVzaAklcjE1CisJcHVzaGZxCisJc3ViCVwkNjQsJXJzcAorCisJbW92CTEyMCgkY29udGV4dCksJXJheAkjIHB1bGwgY29udGV4dC0+UmF4CisJbW92CTI0OCgkY29udGV4dCksJXJieAkjIHB1bGwgY29udGV4dC0+UmlwCisKKwlsZWEJLkxwcm9sb2d1ZSglcmlwKSwlcjEwCisJY21wCSVyMTAsJXJieAkJIyBjb250ZXh0LT5SaXA8Lkxwcm9sb2d1ZQorCWpiCS5MaW5fcHJvbG9ndWUKKworCW1vdgkxNTIoJGNvbnRleHQpLCVyYXgJIyBwdWxsIGNvbnRleHQtPlJzcAorCisJbGVhCS5MZXBpbG9ndWUoJXJpcCksJXIxMAorCWNtcAklcjEwLCVyYngJCSMgY29udGV4dC0+UmlwPj0uTGVwaWxvZ3VlCisJamFlCS5MaW5fcHJvbG9ndWUKKworCW1vdglgMTYqNGAoJXJheCksJXJheAkjIHB1bGwgc2F2ZWQgc3RhY2sgcG9pbnRlcgorCWxlYQkyNCglcmF4KSwlcmF4CisKKwltb3YJLTgoJXJheCksJXJieAorCW1vdgktMTYoJXJheCksJXJicAorCW1vdgktMjQoJXJheCksJXIxMgorCW1vdgklcmJ4LDE0NCgkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlJieAorCW1vdgklcmJwLDE2MCgkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlJicAorCW1vdgklcjEyLDIxNigkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlIxMgorCisuTGluX3Byb2xvZ3VlOgorCW1vdgk4KCVyYXgpLCVyZGkKKwltb3YJMTYoJXJheCksJXJzaQorCW1vdgklcmF4LDE1MigkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlJzcAorCW1vdgklcnNpLDE2OCgkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlJzaQorCW1vdgklcmRpLDE3NigkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlJkaQorCisJbW92CTQwKCRkaXNwKSwlcmRpCQkjIGRpc3AtPkNvbnRleHRSZWNvcmQKKwltb3YJJGNvbnRleHQsJXJzaQkJIyBjb250ZXh0CisJbW92CVwkMTU0LCVlY3gJCSMgc2l6ZW9mKENPTlRFWFQpCisJLmxvbmcJMHhhNTQ4ZjNmYwkJIyBjbGQ7IHJlcCBtb3ZzcQorCisJbW92CSRkaXNwLCVyc2kKKwl4b3IJJXJjeCwlcmN4CQkjIGFyZzEsIFVOV19GTEFHX05IQU5ETEVSCisJbW92CTgoJXJzaSksJXJkeAkJIyBhcmcyLCBkaXNwLT5JbWFnZUJhc2UKKwltb3YJMCglcnNpKSwlcjgJCSMgYXJnMywgZGlzcC0+Q29udHJvbFBjCisJbW92CTE2KCVyc2kpLCVyOQkJIyBhcmc0LCBkaXNwLT5GdW5jdGlvbkVudHJ5CisJbW92CTQwKCVyc2kpLCVyMTAJCSMgZGlzcC0+Q29udGV4dFJlY29yZAorCWxlYQk1NiglcnNpKSwlcjExCQkjICZkaXNwLT5IYW5kbGVyRGF0YQorCWxlYQkyNCglcnNpKSwlcjEyCQkjICZkaXNwLT5Fc3RhYmxpc2hlckZyYW1lCisJbW92CSVyMTAsMzIoJXJzcCkJCSMgYXJnNQorCW1vdgklcjExLDQwKCVyc3ApCQkjIGFyZzYKKwltb3YJJXIxMiw0OCglcnNwKQkJIyBhcmc3CisJbW92CSVyY3gsNTYoJXJzcCkJCSMgYXJnOCwgKE5VTEwpCisJY2FsbAkqX19pbXBfUnRsVmlydHVhbFVud2luZCglcmlwKQorCisJbW92CVwkMSwlZWF4CQkjIEV4Y2VwdGlvbkNvbnRpbnVlU2VhcmNoCisJYWRkCVwkNjQsJXJzcAorCXBvcGZxCisJcG9wCSVyMTUKKwlwb3AJJXIxNAorCXBvcAklcjEzCisJcG9wCSVyMTIKKwlwb3AJJXJicAorCXBvcAklcmJ4CisJcG9wCSVyZGkKKwlwb3AJJXJzaQorCXJldAorLnNpemUJc2VfaGFuZGxlciwuLXNlX2hhbmRsZXIKKworLnNlY3Rpb24JLnBkYXRhCisuYWxpZ24JNAorCS5ydmEJLkxTRUhfYmVnaW5fc2hhMV9ibG9ja19kYXRhX29yZGVyCisJLnJ2YQkuTFNFSF9lbmRfc2hhMV9ibG9ja19kYXRhX29yZGVyCisJLnJ2YQkuTFNFSF9pbmZvX3NoYTFfYmxvY2tfZGF0YV9vcmRlcgorCisuc2VjdGlvbgkueGRhdGEKKy5hbGlnbgk4CisuTFNFSF9pbmZvX3NoYTFfYmxvY2tfZGF0YV9vcmRlcjoKKwkuYnl0ZQk5LDAsMCwwCisJLnJ2YQlzZV9oYW5kbGVyCitfX18KK30KKwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAogJGNvZGUgPX4gcy9cYChbXlxgXSopXGAvZXZhbCAkMS9nZW07CmRpZmYgLS1naXQgYS9jcnlwdG8vc2hhL2FzbS9zaGEyNTYtNTg2LnBsIGIvY3J5cHRvL3NoYS9hc20vc2hhMjU2LTU4Ni5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2M4YjY5Ci0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL3NoYS9hc20vc2hhMjU2LTU4Ni5wbApAQCAtMCwwICsxLDI1MSBAQAorIyEvdXNyL2Jpbi9lbnYgcGVybAorIworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPiBmb3IgdGhlIE9wZW5TU0wKKyMgcHJvamVjdC4gVGhlIG1vZHVsZSBpcywgaG93ZXZlciwgZHVhbCBsaWNlbnNlZCB1bmRlciBPcGVuU1NMIGFuZAorIyBDUllQVE9HQU1TIGxpY2Vuc2VzIGRlcGVuZGluZyBvbiB3aGVyZSB5b3Ugb2J0YWluIGl0LiBGb3IgZnVydGhlcgorIyBkZXRhaWxzIHNlZSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL35hcHByby9jcnlwdG9nYW1zLy4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMKKyMgU0hBMjU2IGJsb2NrIHRyYW5zZm9ybSBmb3IgeDg2LiBTZXB0ZW1iZXIgMjAwNy4KKyMKKyMgUGVyZm9ybWFuY2UgaW4gY2xvY2sgY3ljbGVzIHBlciBwcm9jZXNzZWQgYnl0ZSAobGVzcyBpcyBiZXR0ZXIpOgorIworIwkJUGVudGl1bQlQSUlJCVA0CUFNRCBLOAlDb3JlMgorIyBnY2MJCTQ2CTM2CTQxCTI3CTI2CisjIGljYwkJNTcJMzMJMzgJMjUJMjMJCisjIHg4NiBhc20JNDAJMzAJMzUJMjAJMjAKKyMgeDg2XzY0IGFzbSgqKQktCS0JMjEJMTUuOAkxNi41CisjCisjICgqKSB4ODZfNjQgYXNzZW1ibGVyIHBlcmZvcm1hbmNlIGlzIHByZXNlbnRlZCBmb3IgcmVmZXJlbmNlCisjICAgICBwdXJwb3Nlcy4KKyMKKyMgUGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgb3ZlciBjb21waWxlciBnZW5lcmF0ZWQgY29kZSB2YXJpZXMgZnJvbQorIyAxMCUgdG8gNDAlIFtzZWUgYWJvdmVdLiBOb3QgdmVyeSBpbXByZXNzaXZlIG9uIHNvbWUgtS1hcmNocywgYnV0CisjIGl0J3MgNSB0aW1lcyBzbWFsbGVyIGFuZCBvcHRpbWl6aWVzIGFtb3VudCBvZiB3cml0ZXMuCisKKyQwID1+IG0vKC4qW1wvXFxdKVteXC9cXF0rJC87ICRkaXI9JDE7CitwdXNoKEBJTkMsIiR7ZGlyfSIsIiR7ZGlyfS4uLy4uL3Blcmxhc20iKTsKK3JlcXVpcmUgIng4NmFzbS5wbCI7CisKKyZhc21faW5pdCgkQVJHVlswXSwic2hhNTEyLTU4Ni5wbCIsJEFSR1ZbJCNBUkdWXSBlcSAiMzg2Iik7CisKKyRBPSJlYXgiOworJEU9ImVkeCI7CiskVD0iZWJ4IjsKKyRBb2ZmPSZEV1AoMCwiZXNwIik7CiskQm9mZj0mRFdQKDQsImVzcCIpOworJENvZmY9JkRXUCg4LCJlc3AiKTsKKyREb2ZmPSZEV1AoMTIsImVzcCIpOworJEVvZmY9JkRXUCgxNiwiZXNwIik7CiskRm9mZj0mRFdQKDIwLCJlc3AiKTsKKyRHb2ZmPSZEV1AoMjQsImVzcCIpOworJEhvZmY9JkRXUCgyOCwiZXNwIik7CiskWG9mZj0mRFdQKDMyLCJlc3AiKTsKKyRLMjU2PSJlYnAiOworCitzdWIgQk9EWV8wMF8xNSgpIHsKKyAgICBteSAkaW5fMTZfNjM9c2hpZnQ7CisKKwkmbW92CSgiZWN4IiwkRSk7CisJICZhZGQJKCRULCZEV1AoNCooOCsxNSsxNi05KSwiZXNwIikpCWlmICgkaW5fMTZfNjMpOwkjIFQgKz0gWFstN10KKwkmcm9yCSgiZWN4Iiw2KTsKKwkmbW92CSgiZWRpIiwkRSk7CisJJnJvcgkoImVkaSIsMTEpOworCSAmbW92CSgiZXNpIiwkRm9mZik7CisJJnhvcgkoImVjeCIsImVkaSIpOworCSZyb3IJKCJlZGkiLDI1LTExKTsKKwkgJm1vdgkoJkRXUCg0Kig4KzE1KSwiZXNwIiksJFQpCWlmICgkaW5fMTZfNjMpOwkjIHNhdmUgWFswXQorCSZ4b3IJKCJlY3giLCJlZGkiKTsJIyBTaWdtYTEoZSkKKwkgJm1vdgkoImVkaSIsJEdvZmYpOworCSZhZGQJKCRULCJlY3giKTsJIyBUICs9IFNpZ21hMShlKQorCSAmbW92CSgkRW9mZiwkRSk7CSMgbW9kdWxvLXNjaGVkdWxlZAorCisJJnhvcgkoImVzaSIsImVkaSIpOworCSAmbW92CSgiZWN4IiwkQSk7CisJJmFuZAkoImVzaSIsJEUpOworCSAmbW92CSgkRSwkRG9mZik7CSMgZSBiZWNvbWVzIGQsIHdoaWNoIGlzIGUgaW4gbmV4dCBpdGVyYXRpb24KKwkmeG9yCSgiZXNpIiwiZWRpIik7CSMgQ2goZSxmLGcpCisJICZtb3YJKCJlZGkiLCRBKTsKKwkmYWRkCSgkVCwiZXNpIik7CSMgVCArPSBDaChlLGYsZykKKworCSZyb3IJKCJlY3giLDIpOworCSAmYWRkCSgkVCwkSG9mZik7CSMgVCArPSBoCisJJnJvcgkoImVkaSIsMTMpOworCSAmbW92CSgiZXNpIiwkQm9mZik7CisJJnhvcgkoImVjeCIsImVkaSIpOworCSZyb3IJKCJlZGkiLDIyLTEzKTsKKwkgJmFkZAkoJEUsJFQpOwkjIGQgKz0gVAorCSZ4b3IJKCJlY3giLCJlZGkiKTsJIyBTaWdtYTAoYSkKKwkgJm1vdgkoImVkaSIsJENvZmYpOworCisJJmFkZAkoJFQsImVjeCIpOwkjIFQgKz0gU2lnbWEwKGEpCisJICZtb3YJKCRBb2ZmLCRBKTsJIyBtb2R1bG8tc2NoZWR1bGVkCisKKwkmbW92CSgiZWN4IiwkQSk7CisJICZzdWIJKCJlc3AiLDQpOworCSZvcgkoJEEsImVzaSIpOwkjIGEgYmVjb21lcyBoLCB3aGljaCBpcyBhIGluIG5leHQgaXRlcmF0aW9uCisJJmFuZAkoImVjeCIsImVzaSIpOworCSZhbmQJKCRBLCJlZGkiKTsKKwkgJm1vdgkoImVzaSIsJkRXUCgwLCRLMjU2KSk7CisJJm9yCSgkQSwiZWN4Iik7CSMgaD1NYWooYSxiLGMpCisKKwkmYWRkCSgkSzI1Niw0KTsKKwkmYWRkCSgkQSwkVCk7CSMgaCArPSBUCisJICZtb3YJKCRULCZEV1AoNCooOCsxNSsxNi0xKSwiZXNwIikpCWlmICgkaW5fMTZfNjMpOwkjIHByZWxvYWQgVAorCSZhZGQJKCRFLCJlc2kiKTsJIyBkICs9IEsyNTZbaV0KKwkmYWRkCSgkQSwiZXNpIik7CSMgaCArPSBLMjU2W2ldCit9CisKKyZmdW5jdGlvbl9iZWdpbigic2hhMjU2X2Jsb2NrX2RhdGFfb3JkZXIiKTsKKwkmbW92CSgiZXNpIix3cGFyYW0oMCkpOwkjIGN0eAorCSZtb3YJKCJlZGkiLHdwYXJhbSgxKSk7CSMgaW5wCisJJm1vdgkoImVheCIsd3BhcmFtKDIpKTsJIyBudW0KKwkmbW92CSgiZWJ4IiwiZXNwIik7CQkjIHNhdmVkIHNwCisKKwkmY2FsbAkoJmxhYmVsKCJwaWNfcG9pbnQiKSk7CSMgbWFrZSBpdCBQSUMhCismc2V0X2xhYmVsKCJwaWNfcG9pbnQiKTsKKwkmYmxpbmRwb3AoJEsyNTYpOworCSZsZWEJKCRLMjU2LCZEV1AoJmxhYmVsKCJLMjU2IikuIi0iLiZsYWJlbCgicGljX3BvaW50IiksJEsyNTYpKTsKKworCSZzdWIJKCJlc3AiLDE2KTsKKwkmYW5kCSgiZXNwIiwtNjQpOworCisJJnNobAkoImVheCIsNik7CisJJmFkZAkoImVheCIsImVkaSIpOworCSZtb3YJKCZEV1AoMCwiZXNwIiksImVzaSIpOwkjIGN0eAorCSZtb3YJKCZEV1AoNCwiZXNwIiksImVkaSIpOwkjIGlucAorCSZtb3YJKCZEV1AoOCwiZXNwIiksImVheCIpOwkjIGlucCtudW0qMTI4CisJJm1vdgkoJkRXUCgxMiwiZXNwIiksImVieCIpOwkjIHNhdmVkIHNwCisKKyZzZXRfbGFiZWwoImxvb3AiLDE2KTsKKyAgICAjIGNvcHkgaW5wdXQgYmxvY2sgdG8gc3RhY2sgcmV2ZXJzaW5nIGJ5dGUgYW5kIGR3b3JkIG9yZGVyCisgICAgZm9yKCRpPTA7JGk8NDskaSsrKSB7CisJJm1vdgkoImVheCIsJkRXUCgkaSoxNiswLCJlZGkiKSk7CisJJm1vdgkoImVieCIsJkRXUCgkaSoxNis0LCJlZGkiKSk7CisJJm1vdgkoImVjeCIsJkRXUCgkaSoxNis4LCJlZGkiKSk7CisJJm1vdgkoImVkeCIsJkRXUCgkaSoxNisxMiwiZWRpIikpOworCSZic3dhcAkoImVheCIpOworCSZic3dhcAkoImVieCIpOworCSZic3dhcAkoImVjeCIpOworCSZic3dhcAkoImVkeCIpOworCSZwdXNoCSgiZWF4Iik7CisJJnB1c2gJKCJlYngiKTsKKwkmcHVzaAkoImVjeCIpOworCSZwdXNoCSgiZWR4Iik7CisgICAgfQorCSZhZGQJKCJlZGkiLDY0KTsKKwkmc3ViCSgiZXNwIiw0KjgpOwkJIyBwbGFjZSBmb3IgQSxCLEMsRCxFLEYsRyxICisJJm1vdgkoJkRXUCg0Kig4KzE2KSs0LCJlc3AiKSwiZWRpIik7CisKKwkjIGNvcHkgY3R4LT5oWzAtN10gdG8gQSxCLEMsRCxFLEYsRyxIIG9uIHN0YWNrCisJJm1vdgkoJEEsJkRXUCgwLCJlc2kiKSk7CisJJm1vdgkoImVieCIsJkRXUCg0LCJlc2kiKSk7CisJJm1vdgkoImVjeCIsJkRXUCg4LCJlc2kiKSk7CisJJm1vdgkoImVkaSIsJkRXUCgxMiwiZXNpIikpOworCSMgJm1vdgkoJEFvZmYsJEEpOworCSZtb3YJKCRCb2ZmLCJlYngiKTsKKwkmbW92CSgkQ29mZiwiZWN4Iik7CisJJm1vdgkoJERvZmYsImVkaSIpOworCSZtb3YJKCRFLCZEV1AoMTYsImVzaSIpKTsJCisJJm1vdgkoImVieCIsJkRXUCgyMCwiZXNpIikpOworCSZtb3YJKCJlY3giLCZEV1AoMjQsImVzaSIpKTsKKwkmbW92CSgiZWRpIiwmRFdQKDI4LCJlc2kiKSk7CisJIyAmbW92CSgkRW9mZiwkRSk7CisJJm1vdgkoJEZvZmYsImVieCIpOworCSZtb3YJKCRHb2ZmLCJlY3giKTsKKwkmbW92CSgkSG9mZiwiZWRpIik7CisKKyZzZXRfbGFiZWwoIjAwXzE1IiwxNik7CisJJm1vdgkoJFQsJkRXUCg0Kig4KzE1KSwiZXNwIikpOworCisJJkJPRFlfMDBfMTUoKTsKKworCSZjbXAJKCJlc2kiLDB4YzE5YmYxNzQpOworCSZqbmUJKCZsYWJlbCgiMDBfMTUiKSk7CisKKwkmbW92CSgkVCwmRFdQKDQqKDgrMTUrMTYtMSksImVzcCIpKTsJIyBwcmVsb2FkZWQgaW4gQk9EWV8wMF8xNSgxKQorJnNldF9sYWJlbCgiMTZfNjMiLDE2KTsKKwkmbW92CSgiZXNpIiwkVCk7CisJICZtb3YJKCJlY3giLCZEV1AoNCooOCsxNSsxNi0xNCksImVzcCIpKTsKKwkmc2hyCSgkVCwzKTsKKwkmcm9yCSgiZXNpIiw3KTsKKwkmeG9yCSgkVCwiZXNpIik7CisJJnJvcgkoImVzaSIsMTgtNyk7CisJICZtb3YJKCJlZGkiLCJlY3giKTsKKwkmeG9yCSgkVCwiZXNpIik7CQkJIyBUID0gc2lnbWEwKFhbLTE1XSkKKworCSZzaHIJKCJlY3giLDEwKTsKKwkgJm1vdgkoImVzaSIsJkRXUCg0Kig4KzE1KzE2KSwiZXNwIikpOworCSZyb3IJKCJlZGkiLDE3KTsKKwkmeG9yCSgiZWN4IiwiZWRpIik7CisJJnJvcgkoImVkaSIsMTktMTcpOworCSAmYWRkCSgkVCwiZXNpIik7CQkJIyBUICs9IFhbLTE2XQorCSZ4b3IJKCJlZGkiLCJlY3giKQkJCSMgc2lnbWExKFhbLTJdKQorCisJJmFkZAkoJFQsImVkaSIpOwkJCSMgVCArPSBzaWdtYTEoWFstMl0pCisJIyAmYWRkCSgkVCwmRFdQKDQqKDgrMTUrMTYtOSksImVzcCIpKTsJIyBUICs9IFhbLTddLCBtb3ZlZCB0byBCT0RZXzAwXzE1KDEpCisJIyAmbW92CSgmRFdQKDQqKDgrMTUpLCJlc3AiKSwkVCk7CSMgc2F2ZSBYWzBdCisKKwkmQk9EWV8wMF8xNSgxKTsKKworCSZjbXAJKCJlc2kiLDB4YzY3MTc4ZjIpOworCSZqbmUJKCZsYWJlbCgiMTZfNjMiKSk7CisKKwkmbW92CSgiZXNpIiwmRFdQKDQqKDgrMTYrNjQpKzAsImVzcCIpKTsjY3R4CisJIyAmbW92CSgkQSwkQW9mZik7CisJJm1vdgkoImVieCIsJEJvZmYpOworCSZtb3YJKCJlY3giLCRDb2ZmKTsKKwkmbW92CSgiZWRpIiwkRG9mZik7CisJJmFkZAkoJEEsJkRXUCgwLCJlc2kiKSk7CisJJmFkZAkoImVieCIsJkRXUCg0LCJlc2kiKSk7CisJJmFkZAkoImVjeCIsJkRXUCg4LCJlc2kiKSk7CisJJmFkZAkoImVkaSIsJkRXUCgxMiwiZXNpIikpOworCSZtb3YJKCZEV1AoMCwiZXNpIiksJEEpOworCSZtb3YJKCZEV1AoNCwiZXNpIiksImVieCIpOworCSZtb3YJKCZEV1AoOCwiZXNpIiksImVjeCIpOworCSZtb3YJKCZEV1AoMTIsImVzaSIpLCJlZGkiKTsKKwkjICZtb3YJKCRFLCRFb2ZmKTsKKwkmbW92CSgiZWF4IiwkRm9mZik7CisJJm1vdgkoImVieCIsJEdvZmYpOworCSZtb3YJKCJlY3giLCRIb2ZmKTsKKwkmbW92CSgiZWRpIiwmRFdQKDQqKDgrMTYrNjQpKzQsImVzcCIpKTsjaW5wCisJJmFkZAkoJEUsJkRXUCgxNiwiZXNpIikpOworCSZhZGQJKCJlYXgiLCZEV1AoMjAsImVzaSIpKTsKKwkmYWRkCSgiZWJ4IiwmRFdQKDI0LCJlc2kiKSk7CisJJmFkZAkoImVjeCIsJkRXUCgyOCwiZXNpIikpOworCSZtb3YJKCZEV1AoMTYsImVzaSIpLCRFKTsKKwkmbW92CSgmRFdQKDIwLCJlc2kiKSwiZWF4Iik7CisJJm1vdgkoJkRXUCgyNCwiZXNpIiksImVieCIpOworCSZtb3YJKCZEV1AoMjgsImVzaSIpLCJlY3giKTsKKworCSZhZGQJKCJlc3AiLDQqKDgrMTYrNjQpKTsJCSMgZGVzdHJveSBmcmFtZQorCSZzdWIJKCRLMjU2LDQqNjQpOwkJCSMgcmV3aW5kIEsKKworCSZjbXAJKCJlZGkiLCZEV1AoOCwiZXNwIikpOwkJIyBhcmUgd2UgZG9uZSB5ZXQ/CisJJmpiCSgmbGFiZWwoImxvb3AiKSk7CisKKwkmbW92CSgiZXNwIiwmRFdQKDEyLCJlc3AiKSk7CQkjIHJlc3RvcmUgc3AKKyZmdW5jdGlvbl9lbmRfQSgpOworCismc2V0X2xhYmVsKCJLMjU2Iiw2NCk7CSMgWWVzISBJIGtlZXAgaXQgaW4gdGhlIGNvZGUgc2VnbWVudCEKKwkmZGF0YV93b3JkKDB4NDI4YTJmOTgsMHg3MTM3NDQ5MSwweGI1YzBmYmNmLDB4ZTliNWRiYTUpOworCSZkYXRhX3dvcmQoMHgzOTU2YzI1YiwweDU5ZjExMWYxLDB4OTIzZjgyYTQsMHhhYjFjNWVkNSk7CisJJmRhdGFfd29yZCgweGQ4MDdhYTk4LDB4MTI4MzViMDEsMHgyNDMxODViZSwweDU1MGM3ZGMzKTsKKwkmZGF0YV93b3JkKDB4NzJiZTVkNzQsMHg4MGRlYjFmZSwweDliZGMwNmE3LDB4YzE5YmYxNzQpOworCSZkYXRhX3dvcmQoMHhlNDliNjljMSwweGVmYmU0Nzg2LDB4MGZjMTlkYzYsMHgyNDBjYTFjYyk7CisJJmRhdGFfd29yZCgweDJkZTkyYzZmLDB4NGE3NDg0YWEsMHg1Y2IwYTlkYywweDc2Zjk4OGRhKTsKKwkmZGF0YV93b3JkKDB4OTgzZTUxNTIsMHhhODMxYzY2ZCwweGIwMDMyN2M4LDB4YmY1OTdmYzcpOworCSZkYXRhX3dvcmQoMHhjNmUwMGJmMywweGQ1YTc5MTQ3LDB4MDZjYTYzNTEsMHgxNDI5Mjk2Nyk7CisJJmRhdGFfd29yZCgweDI3YjcwYTg1LDB4MmUxYjIxMzgsMHg0ZDJjNmRmYywweDUzMzgwZDEzKTsKKwkmZGF0YV93b3JkKDB4NjUwYTczNTQsMHg3NjZhMGFiYiwweDgxYzJjOTJlLDB4OTI3MjJjODUpOworCSZkYXRhX3dvcmQoMHhhMmJmZThhMSwweGE4MWE2NjRiLDB4YzI0YjhiNzAsMHhjNzZjNTFhMyk7CisJJmRhdGFfd29yZCgweGQxOTJlODE5LDB4ZDY5OTA2MjQsMHhmNDBlMzU4NSwweDEwNmFhMDcwKTsKKwkmZGF0YV93b3JkKDB4MTlhNGMxMTYsMHgxZTM3NmMwOCwweDI3NDg3NzRjLDB4MzRiMGJjYjUpOworCSZkYXRhX3dvcmQoMHgzOTFjMGNiMywweDRlZDhhYTRhLDB4NWI5Y2NhNGYsMHg2ODJlNmZmMyk7CisJJmRhdGFfd29yZCgweDc0OGY4MmVlLDB4NzhhNTYzNmYsMHg4NGM4NzgxNCwweDhjYzcwMjA4KTsKKwkmZGF0YV93b3JkKDB4OTBiZWZmZmEsMHhhNDUwNmNlYiwweGJlZjlhM2Y3LDB4YzY3MTc4ZjIpOworJmZ1bmN0aW9uX2VuZF9CKCJzaGEyNTZfYmxvY2tfZGF0YV9vcmRlciIpOworJmFzY2l6KCJTSEEyNTYgYmxvY2sgdHJhbnNmb3JtIGZvciB4ODYsIENSWVBUT0dBTVMgYnkgPGFwcHJvXEBvcGVuc3NsLm9yZz4iKTsKKworJmFzbV9maW5pc2goKTsKZGlmZiAtLWdpdCBhL2NyeXB0by8wLjkuOS1kZXYvc2hhL3NoYTI1Ni1hcm12NC5wbCBiL2NyeXB0by9zaGEvYXNtL3NoYTI1Ni1hcm12NC5wbApzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBjcnlwdG8vMC45LjktZGV2L3NoYS9zaGEyNTYtYXJtdjQucGwKcmVuYW1lIHRvIGNyeXB0by9zaGEvYXNtL3NoYTI1Ni1hcm12NC5wbAppbmRleCA4NTNjYTMxLi40OGQ4NDZkIDEwMDY0NAotLS0gYS9jcnlwdG8vMC45LjktZGV2L3NoYS9zaGEyNTYtYXJtdjQucGwKKysrIGIvY3J5cHRvL3NoYS9hc20vc2hhMjU2LWFybXY0LnBsCkBAIC0xNzIsNiArMTcyLDcgQEAKIAlieAlscgkJCUAgaW50ZXJvcGVyYWJsZSB3aXRoIFRodW1iIElTQTotKQogLnNpemUgICBzaGEyNTZfYmxvY2tfZGF0YV9vcmRlciwuLXNoYTI1Nl9ibG9ja19kYXRhX29yZGVyCiAuYXNjaXogICJTSEEyNTYgYmxvY2sgdHJhbnNmb3JtIGZvciBBUk12NCwgQ1JZUFRPR0FNUyBieSA8YXBwcm9cQG9wZW5zc2wub3JnPiIKKy5hbGlnbgkyCiBfX18KIAogJGNvZGUgPX4gcy9cYChbXlxgXSopXGAvZXZhbCAkMS9nZW07CmRpZmYgLS1naXQgYS9jcnlwdG8vMC45LjktZGV2L3NoYS9zaGEyNTYtYXJtdjQucyBiL2NyeXB0by9zaGEvYXNtL3NoYTI1Ni1hcm12NC5zCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIGNyeXB0by8wLjkuOS1kZXYvc2hhL3NoYTI1Ni1hcm12NC5zCnJlbmFtZSB0byBjcnlwdG8vc2hhL2FzbS9zaGEyNTYtYXJtdjQucwppbmRleCBjN2ZlNzIwLi44ZjljY2U5IDEwMDY0NAotLS0gYS9jcnlwdG8vMC45LjktZGV2L3NoYS9zaGEyNTYtYXJtdjQucworKysgYi9jcnlwdG8vc2hhL2FzbS9zaGEyNTYtYXJtdjQucwpAQCAtMTEwOCwzICsxMTA4LDQgQEAKIAkud29yZAkweGUxMmZmZjFlCQkJQCBpbnRlcm9wZXJhYmxlIHdpdGggVGh1bWIgSVNBOi0pCiAuc2l6ZSAgIHNoYTI1Nl9ibG9ja19kYXRhX29yZGVyLC4tc2hhMjU2X2Jsb2NrX2RhdGFfb3JkZXIKIC5hc2NpeiAgIlNIQTI1NiBibG9jayB0cmFuc2Zvcm0gZm9yIEFSTXY0LCBDUllQVE9HQU1TIGJ5IDxhcHByb0BvcGVuc3NsLm9yZz4iCisuYWxpZ24JMgpkaWZmIC0tZ2l0IGEvY3J5cHRvL3NoYS9hc20vc2hhNTEyLTU4Ni5wbCBiL2NyeXB0by9zaGEvYXNtL3NoYTUxMi01ODYucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI5ZjMzMwotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9zaGEvYXNtL3NoYTUxMi01ODYucGwKQEAgLTAsMCArMSw2NDQgQEAKKyMhL3Vzci9iaW4vZW52IHBlcmwKKyMKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgV3JpdHRlbiBieSBBbmR5IFBvbHlha292IDxhcHByb0BmeS5jaGFsbWVycy5zZT4gZm9yIHRoZSBPcGVuU1NMCisjIHByb2plY3QuIFRoZSBtb2R1bGUgaXMsIGhvd2V2ZXIsIGR1YWwgbGljZW5zZWQgdW5kZXIgT3BlblNTTCBhbmQKKyMgQ1JZUFRPR0FNUyBsaWNlbnNlcyBkZXBlbmRpbmcgb24gd2hlcmUgeW91IG9idGFpbiBpdC4gRm9yIGZ1cnRoZXIKKyMgZGV0YWlscyBzZWUgaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9+YXBwcm8vY3J5cHRvZ2Ftcy8uCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjCisjIFNIQTUxMiBibG9jayB0cmFuc2Zvcm0gZm9yIHg4Ni4gU2VwdGVtYmVyIDIwMDcuCisjCisjIFBlcmZvcm1hbmNlIGluIGNsb2NrIGN5Y2xlcyBwZXIgcHJvY2Vzc2VkIGJ5dGUgKGxlc3MgaXMgYmV0dGVyKToKKyMKKyMJCVBlbnRpdW0JUElJSQlQNAlBTUQgSzgJQ29yZTIKKyMgZ2NjCQkxMDAJNzUJMTE2CTU0CTY2CisjIGljYwkJOTcJNzcJOTUJNTUJNTcKKyMgeDg2IGFzbQk2MQk1Ngk4MgkzNgk0MAorIyBTU0UyIGFzbQktCS0JMzgJMjQJMjAKKyMgeDg2XzY0IGFzbSgqKQktCS0JMzAJMTAuMAkxMC41CisjCisjICgqKSB4ODZfNjQgYXNzZW1ibGVyIHBlcmZvcm1hbmNlIGlzIHByZXNlbnRlZCBmb3IgcmVmZXJlbmNlCisjICAgICBwdXJwb3Nlcy4KKyMKKyMgSUFMVSBjb2RlLXBhdGggaXMgb3B0aW1pemVkIGZvciBlbGRlciBQZW50aXVtcy4gT24gdmFuaWxsYSBQZW50aXVtCisjIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IG92ZXIgY29tcGlsZXIgZ2VuZXJhdGVkIGNvZGUgcmVhY2hlcyB+NjAlLAorIyB3aGlsZSBvbiBQSUlJIC0gfjM1JS4gT24gbmV3ZXIgtS1hcmNocyBpbXByb3ZlbWVudCB2YXJpZXMgZnJvbSAxNSUKKyMgdG8gNTAlLCBidXQgaXQncyBsZXNzIGltcG9ydGFudCBhcyB0aGV5IGFyZSBleHBlY3RlZCB0byBleGVjdXRlIFNTRTIKKyMgY29kZS1wYXRoLCB3aGljaCBpcyBjb21tb25seSB+Mi0zeCBmYXN0ZXIgW3RoYW4gY29tcGlsZXIgZ2VuZXJhdGVkCisjIGNvZGVdLiBTU0UyIGNvZGUtcGF0aCBpcyBhcyBmYXN0IGFzIG9yaWdpbmFsIHNoYTUxMi1zc2UyLnBsLCBldmVuCisjIHRob3VnaCBpdCBkb2VzIG5vdCB1c2UgMTI4LWJpdCBvcGVyYXRpb25zLiBUaGUgbGF0dGVyIG1lYW5zIHRoYXQKKyMgU1NFMi1hd2FyZSBrZXJuZWwgaXMgbm8gbG9uZ2VyIHJlcXVpcmVkIHRvIGV4ZWN1dGUgdGhlIGNvZGUuIEFub3RoZXIKKyMgZGlmZmVyZW5jZSBpcyB0aGF0IG5ldyBjb2RlIG9wdGltaXplcyBhbW91bnQgb2Ygd3JpdGVzLCBidXQgYXQgdGhlCisjIGNvc3Qgb2YgaW5jcmVhc2VkIGRhdGEgY2FjaGUgImZvb3RwcmludCIgYnkgMS8yS0IuCisKKyQwID1+IG0vKC4qW1wvXFxdKVteXC9cXF0rJC87ICRkaXI9JDE7CitwdXNoKEBJTkMsIiR7ZGlyfSIsIiR7ZGlyfS4uLy4uL3Blcmxhc20iKTsKK3JlcXVpcmUgIng4NmFzbS5wbCI7CisKKyZhc21faW5pdCgkQVJHVlswXSwic2hhNTEyLTU4Ni5wbCIsJEFSR1ZbJCNBUkdWXSBlcSAiMzg2Iik7CisKKyRzc2UyPTA7Citmb3IgKEBBUkdWKSB7ICRzc2UyPTEgaWYgKC8tRE9QRU5TU0xfSUEzMl9TU0UyLyk7IH0KKworJmV4dGVybmFsX2xhYmVsKCJPUEVOU1NMX2lhMzJjYXBfUCIpIGlmICgkc3NlMik7CisKKyRUbG89JkRXUCgwLCJlc3AiKTsJJFRoaT0mRFdQKDQsImVzcCIpOworJEFsbz0mRFdQKDgsImVzcCIpOwkkQWhpPSZEV1AoOCs0LCJlc3AiKTsKKyRCbG89JkRXUCgxNiwiZXNwIik7CSRCaGk9JkRXUCgxNis0LCJlc3AiKTsKKyRDbG89JkRXUCgyNCwiZXNwIik7CSRDaGk9JkRXUCgyNCs0LCJlc3AiKTsKKyREbG89JkRXUCgzMiwiZXNwIik7CSREaGk9JkRXUCgzMis0LCJlc3AiKTsKKyRFbG89JkRXUCg0MCwiZXNwIik7CSRFaGk9JkRXUCg0MCs0LCJlc3AiKTsKKyRGbG89JkRXUCg0OCwiZXNwIik7CSRGaGk9JkRXUCg0OCs0LCJlc3AiKTsKKyRHbG89JkRXUCg1NiwiZXNwIik7CSRHaGk9JkRXUCg1Nis0LCJlc3AiKTsKKyRIbG89JkRXUCg2NCwiZXNwIik7CSRIaGk9JkRXUCg2NCs0LCJlc3AiKTsKKyRLNTEyPSJlYnAiOworCiskQXNzZTI9JlFXUCgwLCJlc3AiKTsKKyRCc3NlMj0mUVdQKDgsImVzcCIpOworJENzc2UyPSZRV1AoMTYsImVzcCIpOworJERzc2UyPSZRV1AoMjQsImVzcCIpOworJEVzc2UyPSZRV1AoMzIsImVzcCIpOworJEZzc2UyPSZRV1AoNDAsImVzcCIpOworJEdzc2UyPSZRV1AoNDgsImVzcCIpOworJEhzc2UyPSZRV1AoNTYsImVzcCIpOworCiskQT0ibW0wIjsJIyBCLUQgYW5kCiskRT0ibW00IjsJIyBGLUggYXJlIGNvbW1vbmx5IGxvYWRlZCB0byByZXNwZWN0aXZlbHkgbW0xLW1tMyBhbmQKKwkJIyBtbTUtbW03LCBidXQgaXQncyBkb25lIG9uIG9uLWRlbWFuZCBiYXNpcy4uLgorCitzdWIgQk9EWV8wMF8xNV9zc2UyIHsKKyAgICBteSAkcHJlZmV0Y2g9c2hpZnQ7CisKKwkmbW92cQkoIm1tNSIsJEZzc2UyKTsJCQkjIGxvYWQgZgorCSZtb3ZxCSgibW02IiwkR3NzZTIpOwkJCSMgbG9hZCBnCisJJm1vdnEJKCJtbTciLCRIc3NlMik7CQkJIyBsb2FkIGgKKworCSZtb3ZxCSgibW0xIiwkRSk7CQkJIyAlbW0xIGlzIHNsaWRpbmcgcmlnaHQKKwkmbW92cQkoIm1tMiIsJEUpOwkJCSMgJW1tMiBpcyBzbGlkaW5nIGxlZnQKKwkmcHNybHEJKCJtbTEiLDE0KTsKKwkmbW92cQkoJEVzc2UyLCRFKTsJCQkjIG1vZHVsby1zY2hlZHVsZWQgc2F2ZSBlCisJJnBzbGxxCSgibW0yIiwyMyk7CisJJm1vdnEJKCJtbTMiLCJtbTEiKTsJCQkjICVtbTMgaXMgVDEKKwkmcHNybHEJKCJtbTEiLDQpOworCSZweG9yCSgibW0zIiwibW0yIik7CisJJnBzbGxxCSgibW0yIiwyMyk7CisJJnB4b3IJKCJtbTMiLCJtbTEiKTsKKwkmcHNybHEJKCJtbTEiLDIzKTsKKwkmcHhvcgkoIm1tMyIsIm1tMiIpOworCSZwc2xscQkoIm1tMiIsNCk7CisJJnB4b3IJKCJtbTMiLCJtbTEiKTsKKwkmcGFkZHEJKCJtbTciLFFXUCgwLCRLNTEyKSk7CQkjIGgrPUs1MTJbaV0KKwkmcHhvcgkoIm1tMyIsIm1tMiIpOwkJCSMgVDE9U2lnbWExXzUxMihlKQorCisJJnB4b3IJKCJtbTUiLCJtbTYiKTsJCQkjIGZePWcKKwkmbW92cQkoIm1tMSIsJEJzc2UyKTsJCQkjIGxvYWQgYgorCSZwYW5kCSgibW01IiwkRSk7CQkJIyBmJj1lCisJJm1vdnEJKCJtbTIiLCRDc3NlMik7CQkJIyBsb2FkIGMKKwkmcHhvcgkoIm1tNSIsIm1tNiIpOwkJCSMgZl49ZworCSZtb3ZxCSgkRSwkRHNzZTIpOwkJCSMgZSA9IGxvYWQgZAorCSZwYWRkcQkoIm1tMyIsIm1tNSIpOwkJCSMgVDErPUNoKGUsZixnKQorCSZtb3ZxCSgmUVdQKDAsImVzcCIpLCRBKTsJCSMgbW9kdWxvLXNjaGVkdWxlZCBzYXZlIGEKKwkmcGFkZHEJKCJtbTMiLCJtbTciKTsJCQkjIFQxKz1oCisKKwkmbW92cQkoIm1tNSIsJEEpOwkJCSMgJW1tNSBpcyBzbGlkaW5nIHJpZ2h0CisJJm1vdnEJKCJtbTYiLCRBKTsJCQkjICVtbTYgaXMgc2xpZGluZyBsZWZ0CisJJnBhZGRxCSgibW0zIiwmUVdQKDgqOSwiZXNwIikpOwkjIFQxKz1YWzBdCisJJnBzcmxxCSgibW01IiwyOCk7CisJJnBhZGRxCSgkRSwibW0zIik7CQkJIyBlICs9IFQxCisJJnBzbGxxCSgibW02IiwyNSk7CisJJm1vdnEJKCJtbTciLCJtbTUiKTsJCQkjICVtbTcgaXMgVDIKKwkmcHNybHEJKCJtbTUiLDYpOworCSZweG9yCSgibW03IiwibW02Iik7CisJJnBzbGxxCSgibW02Iiw1KTsKKwkmcHhvcgkoIm1tNyIsIm1tNSIpOworCSZwc3JscQkoIm1tNSIsNSk7CisJJnB4b3IJKCJtbTciLCJtbTYiKTsKKwkmcHNsbHEJKCJtbTYiLDYpOworCSZweG9yCSgibW03IiwibW01Iik7CisJJnN1YgkoImVzcCIsOCk7CisJJnB4b3IJKCJtbTciLCJtbTYiKTsJCQkjIFQyPVNpZ21hMF81MTIoYSkKKworCSZtb3ZxCSgibW01IiwkQSk7CQkJIyAlbW01PWEKKwkmcG9yCSgkQSwibW0yIik7CQkJIyBhPWF8YworCSZtb3ZxCSgibW02IiwmUVdQKDgqKDkrMTYtMTQpLCJlc3AiKSkJaWYgKCRwcmVmZXRjaCk7CisJJnBhbmQJKCJtbTUiLCJtbTIiKTsJCQkjICVtbTU9YSZjCisJJnBhbmQJKCRBLCJtbTEiKTsJCQkjIGE9KGF8YykmYgorCSZtb3ZxCSgibW0yIiwmUVdQKDgqKDkrMTYtMSksImVzcCIpKQlpZiAoJHByZWZldGNoKTsKKwkmcG9yCSgibW01IiwkQSk7CQkJIyAlbW01PShhJmMpfCgoYXxjKSZiKQorCSZwYWRkcQkoIm1tNyIsIm1tNSIpOwkJCSMgVDIrPU1haihhLGIsYykKKwkmbW92cQkoJEEsIm1tMyIpOwkJCSMgYT1UMQorCisJJm1vdgkoJkxCKCJlZHgiKSwmQlAoMCwkSzUxMikpOworCSZwYWRkcQkoJEEsIm1tNyIpOwkJCSMgYSs9VDIKKwkmYWRkCSgkSzUxMiw4KTsKK30KKworc3ViIEJPRFlfMDBfMTVfeDg2IHsKKwkjZGVmaW5lIFNpZ21hMSh4KQkoUk9UUigoeCksMTQpIF4gUk9UUigoeCksMTgpICBeIFJPVFIoKHgpLDQxKSkKKwkjCUxPCQlsbz4+MTReaGk8PDE4IF4gbG8+PjE4XmhpPDwxNCBeIGhpPj45XmxvPDwyMworCSMJSEkJCWhpPj4xNF5sbzw8MTggXiBoaT4+MThebG88PDE0IF4gbG8+PjleaGk8PDIzCisJJm1vdgkoImVjeCIsJEVsbyk7CisJJm1vdgkoImVkeCIsJEVoaSk7CisJJm1vdgkoImVzaSIsImVjeCIpOworCisJJnNocgkoImVjeCIsOSkJIyBsbz4+OQorCSZtb3YJKCJlZGkiLCJlZHgiKTsKKwkmc2hyCSgiZWR4Iiw5KQkjIGhpPj45CisJJm1vdgkoImVieCIsImVjeCIpOworCSZzaGwJKCJlc2kiLDE0KTsJIyBsbzw8MTQKKwkmbW92CSgiZWF4IiwiZWR4Iik7CisJJnNobAkoImVkaSIsMTQpOwkjIGhpPDwxNAorCSZ4b3IJKCJlYngiLCJlc2kiKTsKKworCSZzaHIJKCJlY3giLDE0LTkpOwkjIGxvPj4xNAorCSZ4b3IJKCJlYXgiLCJlZGkiKTsKKwkmc2hyCSgiZWR4IiwxNC05KTsJIyBoaT4+MTQKKwkmeG9yCSgiZWF4IiwiZWN4Iik7CisJJnNobAkoImVzaSIsMTgtMTQpOwkjIGxvPDwxOAorCSZ4b3IJKCJlYngiLCJlZHgiKTsKKwkmc2hsCSgiZWRpIiwxOC0xNCk7CSMgaGk8PDE4CisJJnhvcgkoImVieCIsImVzaSIpOworCisJJnNocgkoImVjeCIsMTgtMTQpOwkjIGxvPj4xOAorCSZ4b3IJKCJlYXgiLCJlZGkiKTsKKwkmc2hyCSgiZWR4IiwxOC0xNCk7CSMgaGk+PjE4CisJJnhvcgkoImVheCIsImVjeCIpOworCSZzaGwJKCJlc2kiLDIzLTE4KTsJIyBsbzw8MjMKKwkmeG9yCSgiZWJ4IiwiZWR4Iik7CisJJnNobAkoImVkaSIsMjMtMTgpOwkjIGhpPDwyMworCSZ4b3IJKCJlYXgiLCJlc2kiKTsKKwkmeG9yCSgiZWJ4IiwiZWRpIik7CQkJIyBUMSA9IFNpZ21hMShlKQorCisJJm1vdgkoImVjeCIsJEZsbyk7CisJJm1vdgkoImVkeCIsJEZoaSk7CisJJm1vdgkoImVzaSIsJEdsbyk7CisJJm1vdgkoImVkaSIsJEdoaSk7CisJICZhZGQJKCJlYXgiLCRIbG8pOworCSAmYWRjCSgiZWJ4IiwkSGhpKTsJCQkjIFQxICs9IGgKKwkmeG9yCSgiZWN4IiwiZXNpIik7CisJJnhvcgkoImVkeCIsImVkaSIpOworCSZhbmQJKCJlY3giLCRFbG8pOworCSZhbmQJKCJlZHgiLCRFaGkpOworCSAmYWRkCSgiZWF4IiwmRFdQKDgqKDkrMTUpKzAsImVzcCIpKTsKKwkgJmFkYwkoImVieCIsJkRXUCg4Kig5KzE1KSs0LCJlc3AiKSk7CSMgVDEgKz0gWFswXQorCSZ4b3IJKCJlY3giLCJlc2kiKTsKKwkmeG9yCSgiZWR4IiwiZWRpIik7CQkJIyBDaChlLGYsZykgPSAoZl5nKSZlKV5nCisKKwkmbW92CSgiZXNpIiwmRFdQKDAsJEs1MTIpKTsKKwkmbW92CSgiZWRpIiwmRFdQKDQsJEs1MTIpKTsJCSMgS1tpXQorCSZhZGQJKCJlYXgiLCJlY3giKTsKKwkmYWRjCSgiZWJ4IiwiZWR4Iik7CQkJIyBUMSArPSBDaChlLGYsZykKKwkmbW92CSgiZWN4IiwkRGxvKTsKKwkmbW92CSgiZWR4IiwkRGhpKTsKKwkmYWRkCSgiZWF4IiwiZXNpIik7CisJJmFkYwkoImVieCIsImVkaSIpOwkJCSMgVDEgKz0gS1tpXQorCSZtb3YJKCRUbG8sImVheCIpOworCSZtb3YJKCRUaGksImVieCIpOwkJCSMgcHV0IFQxIGF3YXkKKwkmYWRkCSgiZWF4IiwiZWN4Iik7CisJJmFkYwkoImVieCIsImVkeCIpOwkJCSMgZCArPSBUMQorCisJI2RlZmluZSBTaWdtYTAoeCkJKFJPVFIoKHgpLDI4KSBeIFJPVFIoKHgpLDM0KSBeIFJPVFIoKHgpLDM5KSkKKwkjCUxPCQlsbz4+MjheaGk8PDQgIF4gaGk+PjJebG88PDMwIF4gaGk+PjdebG88PDI1CisJIwlISQkJaGk+PjI4XmxvPDw0ICBeIGxvPj4yXmhpPDwzMCBeIGxvPj43XmhpPDwyNQorCSZtb3YJKCJlY3giLCRBbG8pOworCSZtb3YJKCJlZHgiLCRBaGkpOworCSZtb3YJKCREbG8sImVheCIpOworCSZtb3YJKCREaGksImVieCIpOworCSZtb3YJKCJlc2kiLCJlY3giKTsKKworCSZzaHIJKCJlY3giLDIpCSMgbG8+PjIKKwkmbW92CSgiZWRpIiwiZWR4Iik7CisJJnNocgkoImVkeCIsMikJIyBoaT4+MgorCSZtb3YJKCJlYngiLCJlY3giKTsKKwkmc2hsCSgiZXNpIiw0KTsJIyBsbzw8NAorCSZtb3YJKCJlYXgiLCJlZHgiKTsKKwkmc2hsCSgiZWRpIiw0KTsJIyBoaTw8NAorCSZ4b3IJKCJlYngiLCJlc2kiKTsKKworCSZzaHIJKCJlY3giLDctMik7CSMgbG8+PjcKKwkmeG9yCSgiZWF4IiwiZWRpIik7CisJJnNocgkoImVkeCIsNy0yKTsJIyBoaT4+NworCSZ4b3IJKCJlYngiLCJlY3giKTsKKwkmc2hsCSgiZXNpIiwyNS00KTsJIyBsbzw8MjUKKwkmeG9yCSgiZWF4IiwiZWR4Iik7CisJJnNobAkoImVkaSIsMjUtNCk7CSMgaGk8PDI1CisJJnhvcgkoImVheCIsImVzaSIpOworCisJJnNocgkoImVjeCIsMjgtNyk7CSMgbG8+PjI4CisJJnhvcgkoImVieCIsImVkaSIpOworCSZzaHIJKCJlZHgiLDI4LTcpOwkjIGhpPj4yOAorCSZ4b3IJKCJlYXgiLCJlY3giKTsKKwkmc2hsCSgiZXNpIiwzMC0yNSk7CSMgbG88PDMwCisJJnhvcgkoImVieCIsImVkeCIpOworCSZzaGwJKCJlZGkiLDMwLTI1KTsJIyBoaTw8MzAKKwkmeG9yCSgiZWF4IiwiZXNpIik7CisJJnhvcgkoImVieCIsImVkaSIpOwkJCSMgU2lnbWEwKGEpCisKKwkmbW92CSgiZWN4IiwkQWxvKTsKKwkmbW92CSgiZWR4IiwkQWhpKTsKKwkmbW92CSgiZXNpIiwkQmxvKTsKKwkmbW92CSgiZWRpIiwkQmhpKTsKKwkmYWRkCSgiZWF4IiwkVGxvKTsKKwkmYWRjCSgiZWJ4IiwkVGhpKTsJCQkjIFQxID0gU2lnbWEwKGEpK1QxCisJJm9yCSgiZWN4IiwiZXNpIik7CisJJm9yCSgiZWR4IiwiZWRpIik7CisJJmFuZAkoImVjeCIsJENsbyk7CisJJmFuZAkoImVkeCIsJENoaSk7CisJJmFuZAkoImVzaSIsJEFsbyk7CisJJmFuZAkoImVkaSIsJEFoaSk7CisJJm9yCSgiZWN4IiwiZXNpIik7CisJJm9yCSgiZWR4IiwiZWRpIik7CQkJIyBNYWooYSxiLGMpID0gKChhfGIpJmMpfChhJmIpCisKKwkmYWRkCSgiZWF4IiwiZWN4Iik7CisJJmFkYwkoImVieCIsImVkeCIpOwkJCSMgVDEgKz0gTWFqKGEsYixjKQorCSZtb3YJKCRUbG8sImVheCIpOworCSZtb3YJKCRUaGksImVieCIpOworCisJJm1vdgkoJkxCKCJlZHgiKSwmQlAoMCwkSzUxMikpOwkjIHByZS1mZXRjaCBMU0Igb2YgKksKKwkmc3ViCSgiZXNwIiw4KTsKKwkmbGVhCSgkSzUxMiwmRFdQKDgsJEs1MTIpKTsJCSMgSysrCit9CisKKworJmZ1bmN0aW9uX2JlZ2luKCJzaGE1MTJfYmxvY2tfZGF0YV9vcmRlciIpOworCSZtb3YJKCJlc2kiLHdwYXJhbSgwKSk7CSMgY3R4CisJJm1vdgkoImVkaSIsd3BhcmFtKDEpKTsJIyBpbnAKKwkmbW92CSgiZWF4Iix3cGFyYW0oMikpOwkjIG51bQorCSZtb3YJKCJlYngiLCJlc3AiKTsJCSMgc2F2ZWQgc3AKKworCSZjYWxsCSgmbGFiZWwoInBpY19wb2ludCIpKTsJIyBtYWtlIGl0IFBJQyEKKyZzZXRfbGFiZWwoInBpY19wb2ludCIpOworCSZibGluZHBvcCgkSzUxMik7CisJJmxlYQkoJEs1MTIsJkRXUCgmbGFiZWwoIks1MTIiKS4iLSIuJmxhYmVsKCJwaWNfcG9pbnQiKSwkSzUxMikpOworCisJJnN1YgkoImVzcCIsMTYpOworCSZhbmQJKCJlc3AiLC02NCk7CisKKwkmc2hsCSgiZWF4Iiw3KTsKKwkmYWRkCSgiZWF4IiwiZWRpIik7CisJJm1vdgkoJkRXUCgwLCJlc3AiKSwiZXNpIik7CSMgY3R4CisJJm1vdgkoJkRXUCg0LCJlc3AiKSwiZWRpIik7CSMgaW5wCisJJm1vdgkoJkRXUCg4LCJlc3AiKSwiZWF4Iik7CSMgaW5wK251bSoxMjgKKwkmbW92CSgmRFdQKDEyLCJlc3AiKSwiZWJ4Iik7CSMgc2F2ZWQgc3AKKworaWYgKCRzc2UyKSB7CisJJnBpY21ldXAoImVkeCIsIk9QRU5TU0xfaWEzMmNhcF9QIiwkSzUxMiwmbGFiZWwoIks1MTIiKSk7CisJJmJ0CSgmRFdQKDAsImVkeCIpLDI2KTsKKwkmam5jCSgmbGFiZWwoImxvb3BfeDg2IikpOworCisJIyBsb2FkIGN0eC0+aFswLTddCisJJm1vdnEJKCRBLCZRV1AoMCwiZXNpIikpOworCSZtb3ZxCSgibW0xIiwmUVdQKDgsImVzaSIpKTsKKwkmbW92cQkoIm1tMiIsJlFXUCgxNiwiZXNpIikpOworCSZtb3ZxCSgibW0zIiwmUVdQKDI0LCJlc2kiKSk7CisJJm1vdnEJKCRFLCZRV1AoMzIsImVzaSIpKTsKKwkmbW92cQkoIm1tNSIsJlFXUCg0MCwiZXNpIikpOworCSZtb3ZxCSgibW02IiwmUVdQKDQ4LCJlc2kiKSk7CisJJm1vdnEJKCJtbTciLCZRV1AoNTYsImVzaSIpKTsKKwkmc3ViCSgiZXNwIiw4KjEwKTsKKworJnNldF9sYWJlbCgibG9vcF9zc2UyIiwxNik7CisJIyAmbW92cQkoJEFzc2UyLCRBKTsKKwkmbW92cQkoJEJzc2UyLCJtbTEiKTsKKwkmbW92cQkoJENzc2UyLCJtbTIiKTsKKwkmbW92cQkoJERzc2UyLCJtbTMiKTsKKwkjICZtb3ZxCSgkRXNzZTIsJEUpOworCSZtb3ZxCSgkRnNzZTIsIm1tNSIpOworCSZtb3ZxCSgkR3NzZTIsIm1tNiIpOworCSZtb3ZxCSgkSHNzZTIsIm1tNyIpOworCisJJm1vdgkoImVjeCIsJkRXUCgwLCJlZGkiKSk7CisJJm1vdgkoImVkeCIsJkRXUCg0LCJlZGkiKSk7CisJJmFkZAkoImVkaSIsOCk7CisJJmJzd2FwCSgiZWN4Iik7CisJJmJzd2FwCSgiZWR4Iik7CisJJm1vdgkoJkRXUCg4KjkrNCwiZXNwIiksImVjeCIpOworCSZtb3YJKCZEV1AoOCo5KzAsImVzcCIpLCJlZHgiKTsKKworJnNldF9sYWJlbCgiMDBfMTRfc3NlMiIsMTYpOworCSZtb3YJKCJlYXgiLCZEV1AoMCwiZWRpIikpOworCSZtb3YJKCJlYngiLCZEV1AoNCwiZWRpIikpOworCSZhZGQJKCJlZGkiLDgpOworCSZic3dhcAkoImVheCIpOworCSZic3dhcAkoImVieCIpOworCSZtb3YJKCZEV1AoOCo4KzQsImVzcCIpLCJlYXgiKTsKKwkmbW92CSgmRFdQKDgqOCswLCJlc3AiKSwiZWJ4Iik7CisKKwkmQk9EWV8wMF8xNV9zc2UyKCk7CisKKwkmY21wCSgmTEIoImVkeCIpLDB4MzUpOworCSZqbmUJKCZsYWJlbCgiMDBfMTRfc3NlMiIpKTsKKworCSZCT0RZXzAwXzE1X3NzZTIoMSk7CisKKyZzZXRfbGFiZWwoIjE2Xzc5X3NzZTIiLDE2KTsKKwkjJm1vdnEJKCJtbTIiLCZRV1AoOCooOSsxNi0xKSwiZXNwIikpOwkjcHJlZmV0Y2hlZCBpbiBCT0RZXzAwXzE1IAorCSMmbW92cQkoIm1tNiIsJlFXUCg4Kig5KzE2LTE0KSwiZXNwIikpOworCSZtb3ZxCSgibW0xIiwibW0yIik7CisKKwkmcHNybHEJKCJtbTIiLDEpOworCSZtb3ZxCSgibW03IiwibW02Iik7CisJJnBzcmxxCSgibW02Iiw2KTsKKwkmbW92cQkoIm1tMyIsIm1tMiIpOworCisJJnBzcmxxCSgibW0yIiw3LTEpOworCSZtb3ZxCSgibW01IiwibW02Iik7CisJJnBzcmxxCSgibW02IiwxOS02KTsKKwkmcHhvcgkoIm1tMyIsIm1tMiIpOworCisJJnBzcmxxCSgibW0yIiw4LTcpOworCSZweG9yCSgibW01IiwibW02Iik7CisJJnBzcmxxCSgibW02Iiw2MS0xOSk7CisJJnB4b3IJKCJtbTMiLCJtbTIiKTsKKworCSZtb3ZxCSgibW0yIiwmUVdQKDgqKDkrMTYpLCJlc3AiKSk7CisKKwkmcHNsbHEJKCJtbTEiLDU2KTsKKwkmcHhvcgkoIm1tNSIsIm1tNiIpOworCSZwc2xscQkoIm1tNyIsMyk7CisJJnB4b3IJKCJtbTMiLCJtbTEiKTsKKworCSZwYWRkcQkoIm1tMiIsJlFXUCg4Kig5KzE2LTkpLCJlc3AiKSk7CisKKwkmcHNsbHEJKCJtbTEiLDYzLTU2KTsKKwkmcHhvcgkoIm1tNSIsIm1tNyIpOworCSZwc2xscQkoIm1tNyIsNDUtMyk7CisJJnB4b3IJKCJtbTMiLCJtbTEiKTsKKwkmcHhvcgkoIm1tNSIsIm1tNyIpOworCisJJnBhZGRxCSgibW0zIiwibW01Iik7CisJJnBhZGRxCSgibW0zIiwibW0yIik7CisJJm1vdnEJKCZRV1AoOCo5LCJlc3AiKSwibW0zIik7CisKKwkmQk9EWV8wMF8xNV9zc2UyKDEpOworCisJJmNtcAkoJkxCKCJlZHgiKSwweDE3KTsKKwkmam5lCSgmbGFiZWwoIjE2Xzc5X3NzZTIiKSk7CisKKwkjICZtb3ZxCSgkQSwkQXNzZTIpOworCSZtb3ZxCSgibW0xIiwkQnNzZTIpOworCSZtb3ZxCSgibW0yIiwkQ3NzZTIpOworCSZtb3ZxCSgibW0zIiwkRHNzZTIpOworCSMgJm1vdnEJKCRFLCRFc3NlMik7CisJJm1vdnEJKCJtbTUiLCRGc3NlMik7CisJJm1vdnEJKCJtbTYiLCRHc3NlMik7CisJJm1vdnEJKCJtbTciLCRIc3NlMik7CisKKwkmcGFkZHEJKCRBLCZRV1AoMCwiZXNpIikpOworCSZwYWRkcQkoIm1tMSIsJlFXUCg4LCJlc2kiKSk7CisJJnBhZGRxCSgibW0yIiwmUVdQKDE2LCJlc2kiKSk7CisJJnBhZGRxCSgibW0zIiwmUVdQKDI0LCJlc2kiKSk7CisJJnBhZGRxCSgkRSwmUVdQKDMyLCJlc2kiKSk7CisJJnBhZGRxCSgibW01IiwmUVdQKDQwLCJlc2kiKSk7CisJJnBhZGRxCSgibW02IiwmUVdQKDQ4LCJlc2kiKSk7CisJJnBhZGRxCSgibW03IiwmUVdQKDU2LCJlc2kiKSk7CisKKwkmbW92cQkoJlFXUCgwLCJlc2kiKSwkQSk7CisJJm1vdnEJKCZRV1AoOCwiZXNpIiksIm1tMSIpOworCSZtb3ZxCSgmUVdQKDE2LCJlc2kiKSwibW0yIik7CisJJm1vdnEJKCZRV1AoMjQsImVzaSIpLCJtbTMiKTsKKwkmbW92cQkoJlFXUCgzMiwiZXNpIiksJEUpOworCSZtb3ZxCSgmUVdQKDQwLCJlc2kiKSwibW01Iik7CisJJm1vdnEJKCZRV1AoNDgsImVzaSIpLCJtbTYiKTsKKwkmbW92cQkoJlFXUCg1NiwiZXNpIiksIm1tNyIpOworCisJJmFkZAkoImVzcCIsOCo4MCk7CQkJIyBkZXN0cm95IGZyYW1lCisJJnN1YgkoJEs1MTIsOCo4MCk7CQkJIyByZXdpbmQgSworCisJJmNtcAkoImVkaSIsJkRXUCg4KjEwKzgsImVzcCIpKTsJIyBhcmUgd2UgZG9uZSB5ZXQ/CisJJmpiCSgmbGFiZWwoImxvb3Bfc3NlMiIpKTsKKworCSZlbW1zCSgpOworCSZtb3YJKCJlc3AiLCZEV1AoOCoxMCsxMiwiZXNwIikpOwkjIHJlc3RvcmUgc3AKKyZmdW5jdGlvbl9lbmRfQSgpOworfQorJnNldF9sYWJlbCgibG9vcF94ODYiLDE2KTsKKyAgICAjIGNvcHkgaW5wdXQgYmxvY2sgdG8gc3RhY2sgcmV2ZXJzaW5nIGJ5dGUgYW5kIHF3b3JkIG9yZGVyCisgICAgZm9yICgkaT0wOyRpPDg7JGkrKykgeworCSZtb3YJKCJlYXgiLCZEV1AoJGkqMTYrMCwiZWRpIikpOworCSZtb3YJKCJlYngiLCZEV1AoJGkqMTYrNCwiZWRpIikpOworCSZtb3YJKCJlY3giLCZEV1AoJGkqMTYrOCwiZWRpIikpOworCSZtb3YJKCJlZHgiLCZEV1AoJGkqMTYrMTIsImVkaSIpKTsKKwkmYnN3YXAJKCJlYXgiKTsKKwkmYnN3YXAJKCJlYngiKTsKKwkmYnN3YXAJKCJlY3giKTsKKwkmYnN3YXAJKCJlZHgiKTsKKwkmcHVzaAkoImVheCIpOworCSZwdXNoCSgiZWJ4Iik7CisJJnB1c2gJKCJlY3giKTsKKwkmcHVzaAkoImVkeCIpOworICAgIH0KKwkmYWRkCSgiZWRpIiwxMjgpOworCSZzdWIJKCJlc3AiLDkqOCk7CQkjIHBsYWNlIGZvciBULEEsQixDLEQsRSxGLEcsSAorCSZtb3YJKCZEV1AoOCooOSsxNikrNCwiZXNwIiksImVkaSIpOworCisJIyBjb3B5IGN0eC0+aFswLTddIHRvIEEsQixDLEQsRSxGLEcsSCBvbiBzdGFjaworCSZsZWEJKCJlZGkiLCZEV1AoOCwiZXNwIikpOworCSZtb3YJKCJlY3giLDE2KTsKKwkmZGF0YV93b3JkKDB4QTVGM0Y2ODkpOwkJIyByZXAgbW92c2QKKworJnNldF9sYWJlbCgiMDBfMTVfeDg2IiwxNik7CisJJkJPRFlfMDBfMTVfeDg2KCk7CisKKwkmY21wCSgmTEIoImVkeCIpLDB4OTQpOworCSZqbmUJKCZsYWJlbCgiMDBfMTVfeDg2IikpOworCismc2V0X2xhYmVsKCIxNl83OV94ODYiLDE2KTsKKwkjZGVmaW5lIHNpZ21hMCh4KQkoUk9UUigoeCksMSkgIF4gUk9UUigoeCksOCkgIF4gKCh4KT4+NykpCisJIwlMTwkJbG8+PjFeaGk8PDMxICBeIGxvPj44XmhpPDwyNCBeIGxvPj43XmhpPDwyNQorCSMJSEkJCWhpPj4xXmxvPDwzMSAgXiBoaT4+OF5sbzw8MjQgXiBoaT4+NworCSZtb3YJKCJlY3giLCZEV1AoOCooOSsxNSsxNi0xKSswLCJlc3AiKSk7CisJJm1vdgkoImVkeCIsJkRXUCg4Kig5KzE1KzE2LTEpKzQsImVzcCIpKTsKKwkmbW92CSgiZXNpIiwiZWN4Iik7CisKKwkmc2hyCSgiZWN4IiwxKQkjIGxvPj4xCisJJm1vdgkoImVkaSIsImVkeCIpOworCSZzaHIJKCJlZHgiLDEpCSMgaGk+PjEKKwkmbW92CSgiZWF4IiwiZWN4Iik7CisJJnNobAkoImVzaSIsMjQpOwkjIGxvPDwyNAorCSZtb3YJKCJlYngiLCJlZHgiKTsKKwkmc2hsCSgiZWRpIiwyNCk7CSMgaGk8PDI0CisJJnhvcgkoImVieCIsImVzaSIpOworCisJJnNocgkoImVjeCIsNy0xKTsJIyBsbz4+NworCSZ4b3IJKCJlYXgiLCJlZGkiKTsKKwkmc2hyCSgiZWR4Iiw3LTEpOwkjIGhpPj43CisJJnhvcgkoImVheCIsImVjeCIpOworCSZzaGwJKCJlc2kiLDMxLTI0KTsJIyBsbzw8MzEKKwkmeG9yCSgiZWJ4IiwiZWR4Iik7CisJJnNobAkoImVkaSIsMjUtMjQpOwkjIGhpPDwyNQorCSZ4b3IJKCJlYngiLCJlc2kiKTsKKworCSZzaHIJKCJlY3giLDgtNyk7CSMgbG8+PjgKKwkmeG9yCSgiZWF4IiwiZWRpIik7CisJJnNocgkoImVkeCIsOC03KTsJIyBoaT4+OAorCSZ4b3IJKCJlYXgiLCJlY3giKTsKKwkmc2hsCSgiZWRpIiwzMS0yNSk7CSMgaGk8PDMxCisJJnhvcgkoImVieCIsImVkeCIpOworCSZ4b3IJKCJlYXgiLCJlZGkiKTsJCQkjIFQxID0gc2lnbWEwKFhbLTE1XSkKKworCSZtb3YJKCZEV1AoMCwiZXNwIiksImVheCIpOworCSZtb3YJKCZEV1AoNCwiZXNwIiksImVieCIpOwkJIyBwdXQgVDEgYXdheQorCisJI2RlZmluZSBzaWdtYTEoeCkJKFJPVFIoKHgpLDE5KSBeIFJPVFIoKHgpLDYxKSBeICgoeCk+PjYpKQorCSMJTE8JCWxvPj4xOV5oaTw8MTMgXiBoaT4+MjlebG88PDMgXiBsbz4+Nl5oaTw8MjYKKwkjCUhJCQloaT4+MTlebG88PDEzIF4gbG8+PjI5XmhpPDwzIF4gaGk+PjYKKwkmbW92CSgiZWN4IiwmRFdQKDgqKDkrMTUrMTYtMTQpKzAsImVzcCIpKTsKKwkmbW92CSgiZWR4IiwmRFdQKDgqKDkrMTUrMTYtMTQpKzQsImVzcCIpKTsKKwkmbW92CSgiZXNpIiwiZWN4Iik7CisKKwkmc2hyCSgiZWN4Iiw2KQkjIGxvPj42CisJJm1vdgkoImVkaSIsImVkeCIpOworCSZzaHIJKCJlZHgiLDYpCSMgaGk+PjYKKwkmbW92CSgiZWF4IiwiZWN4Iik7CisJJnNobAkoImVzaSIsMyk7CSMgbG88PDMKKwkmbW92CSgiZWJ4IiwiZWR4Iik7CisJJnNobAkoImVkaSIsMyk7CSMgaGk8PDMKKwkmeG9yCSgiZWF4IiwiZXNpIik7CisKKwkmc2hyCSgiZWN4IiwxOS02KTsJIyBsbz4+MTkKKwkmeG9yCSgiZWJ4IiwiZWRpIik7CisJJnNocgkoImVkeCIsMTktNik7CSMgaGk+PjE5CisJJnhvcgkoImVheCIsImVjeCIpOworCSZzaGwJKCJlc2kiLDEzLTMpOwkjIGxvPDwxMworCSZ4b3IJKCJlYngiLCJlZHgiKTsKKwkmc2hsCSgiZWRpIiwxMy0zKTsJIyBoaTw8MTMKKwkmeG9yCSgiZWJ4IiwiZXNpIik7CisKKwkmc2hyCSgiZWN4IiwyOS0xOSk7CSMgbG8+PjI5CisJJnhvcgkoImVheCIsImVkaSIpOworCSZzaHIJKCJlZHgiLDI5LTE5KTsJIyBoaT4+MjkKKwkmeG9yCSgiZWJ4IiwiZWN4Iik7CisJJnNobAkoImVkaSIsMjYtMTMpOwkjIGhpPDwyNgorCSZ4b3IJKCJlYXgiLCJlZHgiKTsKKwkmeG9yCSgiZWF4IiwiZWRpIik7CQkJIyBzaWdtYTEoWFstMl0pCisKKwkmbW92CSgiZWN4IiwmRFdQKDgqKDkrMTUrMTYpKzAsImVzcCIpKTsKKwkmbW92CSgiZWR4IiwmRFdQKDgqKDkrMTUrMTYpKzQsImVzcCIpKTsKKwkmYWRkCSgiZWF4IiwmRFdQKDAsImVzcCIpKTsKKwkmYWRjCSgiZWJ4IiwmRFdQKDQsImVzcCIpKTsJCSMgVDEgPSBzaWdtYTEoWFstMl0pK1QxCisJJm1vdgkoImVzaSIsJkRXUCg4Kig5KzE1KzE2LTkpKzAsImVzcCIpKTsKKwkmbW92CSgiZWRpIiwmRFdQKDgqKDkrMTUrMTYtOSkrNCwiZXNwIikpOworCSZhZGQJKCJlYXgiLCJlY3giKTsKKwkmYWRjCSgiZWJ4IiwiZWR4Iik7CQkJIyBUMSArPSBYWy0xNl0KKwkmYWRkCSgiZWF4IiwiZXNpIik7CisJJmFkYwkoImVieCIsImVkaSIpOwkJCSMgVDEgKz0gWFstN10KKwkmbW92CSgmRFdQKDgqKDkrMTUpKzAsImVzcCIpLCJlYXgiKTsKKwkmbW92CSgmRFdQKDgqKDkrMTUpKzQsImVzcCIpLCJlYngiKTsJIyBzYXZlIFhbMF0KKworCSZCT0RZXzAwXzE1X3g4NigpOworCisJJmNtcAkoJkxCKCJlZHgiKSwweDE3KTsKKwkmam5lCSgmbGFiZWwoIjE2Xzc5X3g4NiIpKTsKKworCSZtb3YJKCJlc2kiLCZEV1AoOCooOSsxNis4MCkrMCwiZXNwIikpOyMgY3R4CisJJm1vdgkoImVkaSIsJkRXUCg4Kig5KzE2KzgwKSs0LCJlc3AiKSk7IyBpbnAKKyAgICBmb3IoJGk9MDskaTw0OyRpKyspIHsKKwkmbW92CSgiZWF4IiwmRFdQKCRpKjE2KzAsImVzaSIpKTsKKwkmbW92CSgiZWJ4IiwmRFdQKCRpKjE2KzQsImVzaSIpKTsKKwkmbW92CSgiZWN4IiwmRFdQKCRpKjE2KzgsImVzaSIpKTsKKwkmbW92CSgiZWR4IiwmRFdQKCRpKjE2KzEyLCJlc2kiKSk7CisJJmFkZAkoImVheCIsJkRXUCg4KygkaSoxNikrMCwiZXNwIikpOworCSZhZGMJKCJlYngiLCZEV1AoOCsoJGkqMTYpKzQsImVzcCIpKTsKKwkmbW92CSgmRFdQKCRpKjE2KzAsImVzaSIpLCJlYXgiKTsKKwkmbW92CSgmRFdQKCRpKjE2KzQsImVzaSIpLCJlYngiKTsKKwkmYWRkCSgiZWN4IiwmRFdQKDgrKCRpKjE2KSs4LCJlc3AiKSk7CisJJmFkYwkoImVkeCIsJkRXUCg4KygkaSoxNikrMTIsImVzcCIpKTsKKwkmbW92CSgmRFdQKCRpKjE2KzgsImVzaSIpLCJlY3giKTsKKwkmbW92CSgmRFdQKCRpKjE2KzEyLCJlc2kiKSwiZWR4Iik7CisgICAgfQorCSZhZGQJKCJlc3AiLDgqKDkrMTYrODApKTsJCSMgZGVzdHJveSBmcmFtZQorCSZzdWIJKCRLNTEyLDgqODApOwkJCSMgcmV3aW5kIEsKKworCSZjbXAJKCJlZGkiLCZEV1AoOCwiZXNwIikpOwkJIyBhcmUgd2UgZG9uZSB5ZXQ/CisJJmpiCSgmbGFiZWwoImxvb3BfeDg2IikpOworCisJJm1vdgkoImVzcCIsJkRXUCgxMiwiZXNwIikpOwkJIyByZXN0b3JlIHNwCismZnVuY3Rpb25fZW5kX0EoKTsKKworJnNldF9sYWJlbCgiSzUxMiIsNjQpOwkjIFllcyEgSSBrZWVwIGl0IGluIHRoZSBjb2RlIHNlZ21lbnQhCisJJmRhdGFfd29yZCgweGQ3MjhhZTIyLDB4NDI4YTJmOTgpOwkjIHU2NAorCSZkYXRhX3dvcmQoMHgyM2VmNjVjZCwweDcxMzc0NDkxKTsJIyB1NjQKKwkmZGF0YV93b3JkKDB4ZWM0ZDNiMmYsMHhiNWMwZmJjZik7CSMgdTY0CisJJmRhdGFfd29yZCgweDgxODlkYmJjLDB4ZTliNWRiYTUpOwkjIHU2NAorCSZkYXRhX3dvcmQoMHhmMzQ4YjUzOCwweDM5NTZjMjViKTsJIyB1NjQKKwkmZGF0YV93b3JkKDB4YjYwNWQwMTksMHg1OWYxMTFmMSk7CSMgdTY0CisJJmRhdGFfd29yZCgweGFmMTk0ZjliLDB4OTIzZjgyYTQpOwkjIHU2NAorCSZkYXRhX3dvcmQoMHhkYTZkODExOCwweGFiMWM1ZWQ1KTsJIyB1NjQKKwkmZGF0YV93b3JkKDB4YTMwMzAyNDIsMHhkODA3YWE5OCk7CSMgdTY0CisJJmRhdGFfd29yZCgweDQ1NzA2ZmJlLDB4MTI4MzViMDEpOwkjIHU2NAorCSZkYXRhX3dvcmQoMHg0ZWU0YjI4YywweDI0MzE4NWJlKTsJIyB1NjQKKwkmZGF0YV93b3JkKDB4ZDVmZmI0ZTIsMHg1NTBjN2RjMyk7CSMgdTY0CisJJmRhdGFfd29yZCgweGYyN2I4OTZmLDB4NzJiZTVkNzQpOwkjIHU2NAorCSZkYXRhX3dvcmQoMHgzYjE2OTZiMSwweDgwZGViMWZlKTsJIyB1NjQKKwkmZGF0YV93b3JkKDB4MjVjNzEyMzUsMHg5YmRjMDZhNyk7CSMgdTY0CisJJmRhdGFfd29yZCgweGNmNjkyNjk0LDB4YzE5YmYxNzQpOwkjIHU2NAorCSZkYXRhX3dvcmQoMHg5ZWYxNGFkMiwweGU0OWI2OWMxKTsJIyB1NjQKKwkmZGF0YV93b3JkKDB4Mzg0ZjI1ZTMsMHhlZmJlNDc4Nik7CSMgdTY0CisJJmRhdGFfd29yZCgweDhiOGNkNWI1LDB4MGZjMTlkYzYpOwkjIHU2NAorCSZkYXRhX3dvcmQoMHg3N2FjOWM2NSwweDI0MGNhMWNjKTsJIyB1NjQKKwkmZGF0YV93b3JkKDB4NTkyYjAyNzUsMHgyZGU5MmM2Zik7CSMgdTY0CisJJmRhdGFfd29yZCgweDZlYTZlNDgzLDB4NGE3NDg0YWEpOwkjIHU2NAorCSZkYXRhX3dvcmQoMHhiZDQxZmJkNCwweDVjYjBhOWRjKTsJIyB1NjQKKwkmZGF0YV93b3JkKDB4ODMxMTUzYjUsMHg3NmY5ODhkYSk7CSMgdTY0CisJJmRhdGFfd29yZCgweGVlNjZkZmFiLDB4OTgzZTUxNTIpOwkjIHU2NAorCSZkYXRhX3dvcmQoMHgyZGI0MzIxMCwweGE4MzFjNjZkKTsJIyB1NjQKKwkmZGF0YV93b3JkKDB4OThmYjIxM2YsMHhiMDAzMjdjOCk7CSMgdTY0CisJJmRhdGFfd29yZCgweGJlZWYwZWU0LDB4YmY1OTdmYzcpOwkjIHU2NAorCSZkYXRhX3dvcmQoMHgzZGE4OGZjMiwweGM2ZTAwYmYzKTsJIyB1NjQKKwkmZGF0YV93b3JkKDB4OTMwYWE3MjUsMHhkNWE3OTE0Nyk7CSMgdTY0CisJJmRhdGFfd29yZCgweGUwMDM4MjZmLDB4MDZjYTYzNTEpOwkjIHU2NAorCSZkYXRhX3dvcmQoMHgwYTBlNmU3MCwweDE0MjkyOTY3KTsJIyB1NjQKKwkmZGF0YV93b3JkKDB4NDZkMjJmZmMsMHgyN2I3MGE4NSk7CSMgdTY0CisJJmRhdGFfd29yZCgweDVjMjZjOTI2LDB4MmUxYjIxMzgpOwkjIHU2NAorCSZkYXRhX3dvcmQoMHg1YWM0MmFlZCwweDRkMmM2ZGZjKTsJIyB1NjQKKwkmZGF0YV93b3JkKDB4OWQ5NWIzZGYsMHg1MzM4MGQxMyk7CSMgdTY0CisJJmRhdGFfd29yZCgweDhiYWY2M2RlLDB4NjUwYTczNTQpOwkjIHU2NAorCSZkYXRhX3dvcmQoMHgzYzc3YjJhOCwweDc2NmEwYWJiKTsJIyB1NjQKKwkmZGF0YV93b3JkKDB4NDdlZGFlZTYsMHg4MWMyYzkyZSk7CSMgdTY0CisJJmRhdGFfd29yZCgweDE0ODIzNTNiLDB4OTI3MjJjODUpOwkjIHU2NAorCSZkYXRhX3dvcmQoMHg0Y2YxMDM2NCwweGEyYmZlOGExKTsJIyB1NjQKKwkmZGF0YV93b3JkKDB4YmM0MjMwMDEsMHhhODFhNjY0Yik7CSMgdTY0CisJJmRhdGFfd29yZCgweGQwZjg5NzkxLDB4YzI0YjhiNzApOwkjIHU2NAorCSZkYXRhX3dvcmQoMHgwNjU0YmUzMCwweGM3NmM1MWEzKTsJIyB1NjQKKwkmZGF0YV93b3JkKDB4ZDZlZjUyMTgsMHhkMTkyZTgxOSk7CSMgdTY0CisJJmRhdGFfd29yZCgweDU1NjVhOTEwLDB4ZDY5OTA2MjQpOwkjIHU2NAorCSZkYXRhX3dvcmQoMHg1NzcxMjAyYSwweGY0MGUzNTg1KTsJIyB1NjQKKwkmZGF0YV93b3JkKDB4MzJiYmQxYjgsMHgxMDZhYTA3MCk7CSMgdTY0CisJJmRhdGFfd29yZCgweGI4ZDJkMGM4LDB4MTlhNGMxMTYpOwkjIHU2NAorCSZkYXRhX3dvcmQoMHg1MTQxYWI1MywweDFlMzc2YzA4KTsJIyB1NjQKKwkmZGF0YV93b3JkKDB4ZGY4ZWViOTksMHgyNzQ4Nzc0Yyk7CSMgdTY0CisJJmRhdGFfd29yZCgweGUxOWI0OGE4LDB4MzRiMGJjYjUpOwkjIHU2NAorCSZkYXRhX3dvcmQoMHhjNWM5NWE2MywweDM5MWMwY2IzKTsJIyB1NjQKKwkmZGF0YV93b3JkKDB4ZTM0MThhY2IsMHg0ZWQ4YWE0YSk7CSMgdTY0CisJJmRhdGFfd29yZCgweDc3NjNlMzczLDB4NWI5Y2NhNGYpOwkjIHU2NAorCSZkYXRhX3dvcmQoMHhkNmIyYjhhMywweDY4MmU2ZmYzKTsJIyB1NjQKKwkmZGF0YV93b3JkKDB4NWRlZmIyZmMsMHg3NDhmODJlZSk7CSMgdTY0CisJJmRhdGFfd29yZCgweDQzMTcyZjYwLDB4NzhhNTYzNmYpOwkjIHU2NAorCSZkYXRhX3dvcmQoMHhhMWYwYWI3MiwweDg0Yzg3ODE0KTsJIyB1NjQKKwkmZGF0YV93b3JkKDB4MWE2NDM5ZWMsMHg4Y2M3MDIwOCk7CSMgdTY0CisJJmRhdGFfd29yZCgweDIzNjMxZTI4LDB4OTBiZWZmZmEpOwkjIHU2NAorCSZkYXRhX3dvcmQoMHhkZTgyYmRlOSwweGE0NTA2Y2ViKTsJIyB1NjQKKwkmZGF0YV93b3JkKDB4YjJjNjc5MTUsMHhiZWY5YTNmNyk7CSMgdTY0CisJJmRhdGFfd29yZCgweGUzNzI1MzJiLDB4YzY3MTc4ZjIpOwkjIHU2NAorCSZkYXRhX3dvcmQoMHhlYTI2NjE5YywweGNhMjczZWNlKTsJIyB1NjQKKwkmZGF0YV93b3JkKDB4MjFjMGMyMDcsMHhkMTg2YjhjNyk7CSMgdTY0CisJJmRhdGFfd29yZCgweGNkZTBlYjFlLDB4ZWFkYTdkZDYpOwkjIHU2NAorCSZkYXRhX3dvcmQoMHhlZTZlZDE3OCwweGY1N2Q0ZjdmKTsJIyB1NjQKKwkmZGF0YV93b3JkKDB4NzIxNzZmYmEsMHgwNmYwNjdhYSk7CSMgdTY0CisJJmRhdGFfd29yZCgweGEyYzg5OGE2LDB4MGE2MzdkYzUpOwkjIHU2NAorCSZkYXRhX3dvcmQoMHhiZWY5MGRhZSwweDExM2Y5ODA0KTsJIyB1NjQKKwkmZGF0YV93b3JkKDB4MTMxYzQ3MWIsMHgxYjcxMGIzNSk7CSMgdTY0CisJJmRhdGFfd29yZCgweDIzMDQ3ZDg0LDB4MjhkYjc3ZjUpOwkjIHU2NAorCSZkYXRhX3dvcmQoMHg0MGM3MjQ5MywweDMyY2FhYjdiKTsJIyB1NjQKKwkmZGF0YV93b3JkKDB4MTVjOWJlYmMsMHgzYzllYmUwYSk7CSMgdTY0CisJJmRhdGFfd29yZCgweDljMTAwZDRjLDB4NDMxZDY3YzQpOwkjIHU2NAorCSZkYXRhX3dvcmQoMHhjYjNlNDJiNiwweDRjYzVkNGJlKTsJIyB1NjQKKwkmZGF0YV93b3JkKDB4ZmM2NTdlMmEsMHg1OTdmMjk5Yyk7CSMgdTY0CisJJmRhdGFfd29yZCgweDNhZDZmYWVjLDB4NWZjYjZmYWIpOwkjIHU2NAorCSZkYXRhX3dvcmQoMHg0YTQ3NTgxNywweDZjNDQxOThjKTsJIyB1NjQKKyZmdW5jdGlvbl9lbmRfQigic2hhNTEyX2Jsb2NrX2RhdGFfb3JkZXIiKTsKKyZhc2NpeigiU0hBNTEyIGJsb2NrIHRyYW5zZm9ybSBmb3IgeDg2LCBDUllQVE9HQU1TIGJ5IDxhcHByb1xAb3BlbnNzbC5vcmc+Iik7CisKKyZhc21fZmluaXNoKCk7CmRpZmYgLS1naXQgYS9jcnlwdG8vMC45LjktZGV2L3NoYS9zaGE1MTItYXJtdjQucGwgYi9jcnlwdG8vc2hhL2FzbS9zaGE1MTItYXJtdjQucGwKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gY3J5cHRvLzAuOS45LWRldi9zaGEvc2hhNTEyLWFybXY0LnBsCnJlbmFtZSB0byBjcnlwdG8vc2hhL2FzbS9zaGE1MTItYXJtdjQucGwKaW5kZXggZjI3ZTljZC4uNGZiYjk0YSAxMDA2NDQKLS0tIGEvY3J5cHRvLzAuOS45LWRldi9zaGEvc2hhNTEyLWFybXY0LnBsCisrKyBiL2NyeXB0by9zaGEvYXNtL3NoYTUxMi1hcm12NC5wbApAQCAtMzkwLDYgKzM5MCw3IEBACiAJYngJbHIJCQlAIGludGVyb3BlcmFibGUgd2l0aCBUaHVtYiBJU0E6LSkKIC5zaXplICAgc2hhNTEyX2Jsb2NrX2RhdGFfb3JkZXIsLi1zaGE1MTJfYmxvY2tfZGF0YV9vcmRlcgogLmFzY2l6ICAiU0hBNTEyIGJsb2NrIHRyYW5zZm9ybSBmb3IgQVJNdjQsIENSWVBUT0dBTVMgYnkgPGFwcHJvXEBvcGVuc3NsLm9yZz4iCisuYWxpZ24JMgogX19fCiAKICRjb2RlID1+IHMvXGAoW15cYF0qKVxgL2V2YWwgJDEvZ2VtOwpkaWZmIC0tZ2l0IGEvY3J5cHRvLzAuOS45LWRldi9zaGEvc2hhNTEyLWFybXY0LnMgYi9jcnlwdG8vc2hhL2FzbS9zaGE1MTItYXJtdjQucwpzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBjcnlwdG8vMC45LjktZGV2L3NoYS9zaGE1MTItYXJtdjQucwpyZW5hbWUgdG8gY3J5cHRvL3NoYS9hc20vc2hhNTEyLWFybXY0LnMKaW5kZXggOWVjMmZmMS4uYjBiZjliNiAxMDA2NDQKLS0tIGEvY3J5cHRvLzAuOS45LWRldi9zaGEvc2hhNTEyLWFybXY0LnMKKysrIGIvY3J5cHRvL3NoYS9hc20vc2hhNTEyLWFybXY0LnMKQEAgLTQxMywzICs0MTMsNCBAQAogCS53b3JkCTB4ZTEyZmZmMWUJCQlAIGludGVyb3BlcmFibGUgd2l0aCBUaHVtYiBJU0E6LSkKIC5zaXplICAgc2hhNTEyX2Jsb2NrX2RhdGFfb3JkZXIsLi1zaGE1MTJfYmxvY2tfZGF0YV9vcmRlcgogLmFzY2l6ICAiU0hBNTEyIGJsb2NrIHRyYW5zZm9ybSBmb3IgQVJNdjQsIENSWVBUT0dBTVMgYnkgPGFwcHJvQG9wZW5zc2wub3JnPiIKKy5hbGlnbgkyCmRpZmYgLS1naXQgYS9jcnlwdG8vc2hhL2FzbS9zaGE1MTItcHBjLnBsIGIvY3J5cHRvL3NoYS9hc20vc2hhNTEyLXBwYy5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43NjhhNmE2Ci0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL3NoYS9hc20vc2hhNTEyLXBwYy5wbApAQCAtMCwwICsxLDQ2MiBAQAorIyEvdXNyL2Jpbi9lbnYgcGVybAorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFdyaXR0ZW4gYnkgQW5keSBQb2x5YWtvdiA8YXBwcm9AZnkuY2hhbG1lcnMuc2U+IGZvciB0aGUgT3BlblNTTAorIyBwcm9qZWN0LiBUaGUgbW9kdWxlIGlzLCBob3dldmVyLCBkdWFsIGxpY2Vuc2VkIHVuZGVyIE9wZW5TU0wgYW5kCisjIENSWVBUT0dBTVMgbGljZW5zZXMgZGVwZW5kaW5nIG9uIHdoZXJlIHlvdSBvYnRhaW4gaXQuIEZvciBmdXJ0aGVyCisjIGRldGFpbHMgc2VlIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvfmFwcHJvL2NyeXB0b2dhbXMvLgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjIEkgbGV0IGhhcmR3YXJlIGhhbmRsZSB1bmFsaWduZWQgaW5wdXQsIGV4Y2VwdCBvbiBwYWdlIGJvdW5kYXJpZXMKKyMgKHNlZSBiZWxvdyBmb3IgZGV0YWlscykuIE90aGVyd2lzZSBzdHJhaWdodGZvcndhcmQgaW1wbGVtZW50YXRpb24KKyMgd2l0aCBYIHZlY3RvciBpbiByZWdpc3RlciBiYW5rLiBUaGUgbW9kdWxlIGlzIGJpZy1lbmRpYW4gW3doaWNoIGlzCisjIG5vdCBiaWcgZGVhbCBhcyB0aGVyZSdyZSBubyBsaXR0bGUtZW5kaWFuIHRhcmdldHMgbGVmdCBhcm91bmRdLgorCisjCQkJc2hhMjU2CQl8CXNoYTUxMgorIyAJCQktbTY0CS1tMzIJfAktbTY0CS1tMzIKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUFBDOTcwLGdjYy00LjAuMAkrNTAlCSszOCUJfAkrNDAlCSs0MTAlKCopCisjIFBvd2VyNix4bGMtNwkJKzE1MCUJKzkwJQl8CSsxMDAlCSs0MzAlKCopCisjCisjICgqKQk2NC1iaXQgY29kZSBpbiAzMi1iaXQgYXBwbGljYXRpb24gY29udGV4dCwgd2hpY2ggYWN0dWFsbHkgaXMKKyMJb24gVE9ETyBsaXN0LiBJdCBzaG91bGQgYmUgbm90ZWQgdGhhdCBmb3Igc2FmZSBkZXBsb3ltZW50IGluCisjCTMyLWJpdCAqbXV0bGktdGhyZWFkZWQqIGNvbnRleHQgYXN5bmNyb25vdXMgc2lnbmFscyBzaG91bGQgYmUKKyMJYmxvY2tlZCB1cG9uIGVudHJ5IHRvIFNIQTUxMiBibG9jayByb3V0aW5lLiBUaGlzIGlzIGJlY2F1c2UKKyMJMzItYml0IHNpZ25hbGluZyBwcm9jZWR1cmUgaW52YWxpZGF0ZXMgdXBwZXIgaGFsdmVzIG9mIEdQUnMuCisjCUNvbnRleHQgc3dpdGNoIHByb2NlZHVyZSBwcmVzZXJ2ZXMgdGhlbSwgYnV0IG5vdCBzaWduYWxpbmc6LSgKKworIyBTZWNvbmQgdmVyc2lvbiBpcyB0cnVlIG11bHRpLXRocmVhZCBzYWZlLiBUcm91YmxlIHdpdGggdGhlIG9yaWdpbmFsCisjIHZlcnNpb24gd2FzIHRoYXQgaXQgd2FzIHVzaW5nIHRocmVhZCBsb2NhbCBzdG9yYWdlIHBvaW50ZXIgcmVnaXN0ZXIuCisjIFdlbGwsIGl0IHNjcnVwdWxvdXNseSBwcmVzZXJ2ZWQgaXQsIGJ1dCB0aGUgcHJvYmxlbSB3b3VsZCBhcmlzZSB0aGUKKyMgbW9tZW50IGFzeW5jaHJvbm91cyBzaWduYWwgd2FzIGRlbGl2ZXJlZCBhbmQgc2lnbmFsIGhhbmRsZXIgd291bGQKKyMgZGVyZWZlcmVuY2UgdGhlIFRMUyBwb2ludGVyLiBXaGlsZSBpdCdzIG5ldmVyIHRoZSBjYXNlIGluIG9wZW5zc2wKKyMgYXBwbGljYXRpb24gb3IgdGVzdCBzdWl0ZSwgd2UgaGF2ZSB0byByZXNwZWN0IHRoaXMgc2NlbmFyaW8gYW5kIG5vdAorIyB1c2UgVExTIHBvaW50ZXIgcmVnaXN0ZXIuIEFsdGVybmF0aXZlIHdvdWxkIGJlIHRvIHJlcXVpcmUgY2FsbGVyIHRvCisjIGJsb2NrIHNpZ25hbHMgcHJpb3IgY2FsbGluZyB0aGlzIHJvdXRpbmUuIEZvciB0aGUgcmVjb3JkLCBpbiAzMi1iaXQKKyMgY29udGV4dCBSMiBzZXJ2ZXMgYXMgVExTIHBvaW50ZXIsIHdoaWxlIGluIDY0LWJpdCBjb250ZXh0IC0gUjEzLgorCiskZmxhdm91cj1zaGlmdDsKKyRvdXRwdXQgPXNoaWZ0OworCitpZiAoJGZsYXZvdXIgPX4gLzY0LykgeworCSRTSVpFX1Q9ODsKKwkkU1RVPSJzdGR1IjsKKwkkVUNNUD0iY21wbGQiOworCSRTSEw9InNsZGkiOworCSRQT1A9ImxkIjsKKwkkUFVTSD0ic3RkIjsKK30gZWxzaWYgKCRmbGF2b3VyID1+IC8zMi8pIHsKKwkkU0laRV9UPTQ7CisJJFNUVT0ic3R3dSI7CisJJFVDTVA9ImNtcGx3IjsKKwkkU0hMPSJzbHdpIjsKKwkkUE9QPSJsd3oiOworCSRQVVNIPSJzdHciOworfSBlbHNlIHsgZGllICJub25zZW5zZSAkZmxhdm91ciI7IH0KKworJDAgPX4gbS8oLipbXC9cXF0pW15cL1xcXSskLzsgJGRpcj0kMTsKKyggJHhsYXRlPSIke2Rpcn1wcGMteGxhdGUucGwiIGFuZCAtZiAkeGxhdGUgKSBvcgorKCAkeGxhdGU9IiR7ZGlyfS4uLy4uL3Blcmxhc20vcHBjLXhsYXRlLnBsIiBhbmQgLWYgJHhsYXRlKSBvcgorZGllICJjYW4ndCBsb2NhdGUgcHBjLXhsYXRlLnBsIjsKKworb3BlbiBTVERPVVQsInwgJF5YICR4bGF0ZSAkZmxhdm91ciAkb3V0cHV0IiB8fCBkaWUgImNhbid0IGNhbGwgJHhsYXRlOiAkISI7CisKK2lmICgkb3V0cHV0ID1+IC81MTIvKSB7CisJJGZ1bmM9InNoYTUxMl9ibG9ja19kYXRhX29yZGVyIjsKKwkkU1o9ODsKKwlAU2lnbWEwPSgyOCwzNCwzOSk7CisJQFNpZ21hMT0oMTQsMTgsNDEpOworCUBzaWdtYTA9KDEsICA4LCA3KTsKKwlAc2lnbWExPSgxOSw2MSwgNik7CisJJHJvdW5kcz04MDsKKwkkTEQ9ImxkIjsKKwkkU1Q9InN0ZCI7CisJJFJPUj0icm90cmRpIjsKKwkkU0hSPSJzcmRpIjsKK30gZWxzZSB7CisJJGZ1bmM9InNoYTI1Nl9ibG9ja19kYXRhX29yZGVyIjsKKwkkU1o9NDsKKwlAU2lnbWEwPSggMiwxMywyMik7CisJQFNpZ21hMT0oIDYsMTEsMjUpOworCUBzaWdtYTA9KCA3LDE4LCAzKTsKKwlAc2lnbWExPSgxNywxOSwxMCk7CisJJHJvdW5kcz02NDsKKwkkTEQ9Imx3eiI7CisJJFNUPSJzdHciOworCSRST1I9InJvdHJ3aSI7CisJJFNIUj0ic3J3aSI7Cit9CisKKyRGUkFNRT0zMiokU0laRV9UOworCiskc3AgPSJyMSI7CiskdG9jPSJyMiI7CiskY3R4PSJyMyI7CSMgemFwcGVkIGJ5ICRhMAorJGlucD0icjQiOwkjIHphcHBlZCBieSAkYTEKKyRudW09InI1IjsJIyB6YXBwZWQgYnkgJHQwCisKKyRUICA9InIwIjsKKyRhMCA9InIzIjsKKyRhMSA9InI0IjsKKyR0MCA9InI1IjsKKyR0MSA9InI2IjsKKyRUYmw9InI3IjsKKworJEEgID0icjgiOworJEIgID0icjkiOworJEMgID0icjEwIjsKKyREICA9InIxMSI7CiskRSAgPSJyMTIiOworJEYgID0icjEzIjsJJEY9InIyIiBpZiAoJFNJWkVfVD09OCk7IyByZWFzc2lnbmVkIHRvIGV4ZW1wdCBUTFMgcG9pbnRlcgorJEcgID0icjE0IjsKKyRIICA9InIxNSI7CisKK0BWPSgkQSwkQiwkQywkRCwkRSwkRiwkRywkSCk7CitAWD0oInIxNiIsInIxNyIsInIxOCIsInIxOSIsInIyMCIsInIyMSIsInIyMiIsInIyMyIsCisgICAgInIyNCIsInIyNSIsInIyNiIsInIyNyIsInIyOCIsInIyOSIsInIzMCIsInIzMSIpOworCiskaW5wPSJyMzEiOwkjIHJlYXNzaWduZWQgJGlucCEgYWxpYXNlcyB3aXRoIEBYWzE1XQorCitzdWIgUk9VTkRfMDBfMTUgeworbXkgKCRpLCRhLCRiLCRjLCRkLCRlLCRmLCRnLCRoKT1AXzsKKyRjb2RlLj08PF9fXzsKKwkkTEQJJFQsYCRpKiRTWmAoJFRibCkKKwkkUk9SCSRhMCwkZSwkU2lnbWExWzBdCisJJFJPUgkkYTEsJGUsJFNpZ21hMVsxXQorCWFuZAkkdDAsJGYsJGUKKwlhbmRjCSR0MSwkZywkZQorCWFkZAkkVCwkVCwkaAorCXhvcgkkYTAsJGEwLCRhMQorCSRST1IJJGExLCRhMSxgJFNpZ21hMVsyXS0kU2lnbWExWzFdYAorCW9yCSR0MCwkdDAsJHQxCQk7IENoKGUsZixnKQorCWFkZAkkVCwkVCxAWFskaV0KKwl4b3IJJGEwLCRhMCwkYTEJCTsgU2lnbWExKGUpCisJYWRkCSRULCRULCR0MAorCWFkZAkkVCwkVCwkYTAKKworCSRST1IJJGEwLCRhLCRTaWdtYTBbMF0KKwkkUk9SCSRhMSwkYSwkU2lnbWEwWzFdCisJYW5kCSR0MCwkYSwkYgorCWFuZAkkdDEsJGEsJGMKKwl4b3IJJGEwLCRhMCwkYTEKKwkkUk9SCSRhMSwkYTEsYCRTaWdtYTBbMl0tJFNpZ21hMFsxXWAKKwl4b3IJJHQwLCR0MCwkdDEKKwlhbmQJJHQxLCRiLCRjCisJeG9yCSRhMCwkYTAsJGExCQk7IFNpZ21hMChhKQorCWFkZAkkZCwkZCwkVAorCXhvcgkkdDAsJHQwLCR0MQkJOyBNYWooYSxiLGMpCisJYWRkCSRoLCRULCRhMAorCWFkZAkkaCwkaCwkdDAKKworX19fCit9CisKK3N1YiBST1VORF8xNl94eCB7CitteSAoJGksJGEsJGIsJGMsJGQsJGUsJGYsJGcsJGgpPUBfOworJGktPTE2OworJGNvZGUuPTw8X19fOworCSRST1IJJGEwLEBYWygkaSsxKSUxNl0sJHNpZ21hMFswXQorCSRST1IJJGExLEBYWygkaSsxKSUxNl0sJHNpZ21hMFsxXQorCSRST1IJJHQwLEBYWygkaSsxNCklMTZdLCRzaWdtYTFbMF0KKwkkUk9SCSR0MSxAWFsoJGkrMTQpJTE2XSwkc2lnbWExWzFdCisJeG9yCSRhMCwkYTAsJGExCisJJFNIUgkkYTEsQFhbKCRpKzEpJTE2XSwkc2lnbWEwWzJdCisJeG9yCSR0MCwkdDAsJHQxCisJJFNIUgkkdDEsQFhbKCRpKzE0KSUxNl0sJHNpZ21hMVsyXQorCWFkZAlAWFskaV0sQFhbJGldLEBYWygkaSs5KSUxNl0KKwl4b3IJJGEwLCRhMCwkYTEJCTsgc2lnbWEwKFhbKGkrMSkmMHgwZl0pCisJeG9yCSR0MCwkdDAsJHQxCQk7IHNpZ21hMShYWyhpKzE0KSYweDBmXSkKKwlhZGQJQFhbJGldLEBYWyRpXSwkYTAKKwlhZGQJQFhbJGldLEBYWyRpXSwkdDAKK19fXworJlJPVU5EXzAwXzE1KCRpLCRhLCRiLCRjLCRkLCRlLCRmLCRnLCRoKTsKK30KKworJGNvZGU9PDxfX187CisubWFjaGluZQkiYW55IgorLnRleHQKKworLmdsb2JsCSRmdW5jCisuYWxpZ24JNgorJGZ1bmM6CisJbWZscglyMAorCSRTVFUJJHNwLGAtKCRGUkFNRSsxNiokU1opYCgkc3ApCisJJFNITAkkbnVtLCRudW0sYGxvZygxNiokU1opL2xvZygyKWAKKworCSRQVVNICSRjdHgsYCRGUkFNRS0kU0laRV9UKjIyYCgkc3ApCisKKwkkUFVTSAlyMCxgJEZSQU1FLSRTSVpFX1QqMjFgKCRzcCkKKwkkUFVTSAkkdG9jLGAkRlJBTUUtJFNJWkVfVCoyMGAoJHNwKQorCSRQVVNICXIxMyxgJEZSQU1FLSRTSVpFX1QqMTlgKCRzcCkKKwkkUFVTSAlyMTQsYCRGUkFNRS0kU0laRV9UKjE4YCgkc3ApCisJJFBVU0gJcjE1LGAkRlJBTUUtJFNJWkVfVCoxN2AoJHNwKQorCSRQVVNICXIxNixgJEZSQU1FLSRTSVpFX1QqMTZgKCRzcCkKKwkkUFVTSAlyMTcsYCRGUkFNRS0kU0laRV9UKjE1YCgkc3ApCisJJFBVU0gJcjE4LGAkRlJBTUUtJFNJWkVfVCoxNGAoJHNwKQorCSRQVVNICXIxOSxgJEZSQU1FLSRTSVpFX1QqMTNgKCRzcCkKKwkkUFVTSAlyMjAsYCRGUkFNRS0kU0laRV9UKjEyYCgkc3ApCisJJFBVU0gJcjIxLGAkRlJBTUUtJFNJWkVfVCoxMWAoJHNwKQorCSRQVVNICXIyMixgJEZSQU1FLSRTSVpFX1QqMTBgKCRzcCkKKwkkUFVTSAlyMjMsYCRGUkFNRS0kU0laRV9UKjlgKCRzcCkKKwkkUFVTSAlyMjQsYCRGUkFNRS0kU0laRV9UKjhgKCRzcCkKKwkkUFVTSAlyMjUsYCRGUkFNRS0kU0laRV9UKjdgKCRzcCkKKwkkUFVTSAlyMjYsYCRGUkFNRS0kU0laRV9UKjZgKCRzcCkKKwkkUFVTSAlyMjcsYCRGUkFNRS0kU0laRV9UKjVgKCRzcCkKKwkkUFVTSAlyMjgsYCRGUkFNRS0kU0laRV9UKjRgKCRzcCkKKwkkUFVTSAlyMjksYCRGUkFNRS0kU0laRV9UKjNgKCRzcCkKKwkkUFVTSAlyMzAsYCRGUkFNRS0kU0laRV9UKjJgKCRzcCkKKwkkUFVTSAlyMzEsYCRGUkFNRS0kU0laRV9UKjFgKCRzcCkKKworCSRMRAkkQSxgMCokU1pgKCRjdHgpCisJbXIJJGlucCxyNAkJCQk7IGluY2FybmF0ZSAkaW5wCisJJExECSRCLGAxKiRTWmAoJGN0eCkKKwkkTEQJJEMsYDIqJFNaYCgkY3R4KQorCSRMRAkkRCxgMyokU1pgKCRjdHgpCisJJExECSRFLGA0KiRTWmAoJGN0eCkKKwkkTEQJJEYsYDUqJFNaYCgkY3R4KQorCSRMRAkkRyxgNiokU1pgKCRjdHgpCisJJExECSRILGA3KiRTWmAoJGN0eCkKKworCWIJTFBJQ21ldXAKK0xQSUNlZHVwOgorCWFuZGkuCXIwLCRpbnAsMworCWJuZQlMdW5hbGlnbmVkCitMYWxpZ25lZDoKKwlhZGQJJG51bSwkaW5wLCRudW0KKwkkUFVTSAkkbnVtLGAkRlJBTUUtJFNJWkVfVCoyNGAoJHNwKQk7IGVuZCBwb2ludGVyCisJJFBVU0gJJGlucCxgJEZSQU1FLSRTSVpFX1QqMjNgKCRzcCkJOyBpbnAgcG9pbnRlcgorCWJsCUxzaGEyX2Jsb2NrX3ByaXZhdGUKK0xkb25lOgorCSRQT1AJcjAsYCRGUkFNRS0kU0laRV9UKjIxYCgkc3ApCisJJFBPUAkkdG9jLGAkRlJBTUUtJFNJWkVfVCoyMGAoJHNwKQorCSRQT1AJcjEzLGAkRlJBTUUtJFNJWkVfVCoxOWAoJHNwKQorCSRQT1AJcjE0LGAkRlJBTUUtJFNJWkVfVCoxOGAoJHNwKQorCSRQT1AJcjE1LGAkRlJBTUUtJFNJWkVfVCoxN2AoJHNwKQorCSRQT1AJcjE2LGAkRlJBTUUtJFNJWkVfVCoxNmAoJHNwKQorCSRQT1AJcjE3LGAkRlJBTUUtJFNJWkVfVCoxNWAoJHNwKQorCSRQT1AJcjE4LGAkRlJBTUUtJFNJWkVfVCoxNGAoJHNwKQorCSRQT1AJcjE5LGAkRlJBTUUtJFNJWkVfVCoxM2AoJHNwKQorCSRQT1AJcjIwLGAkRlJBTUUtJFNJWkVfVCoxMmAoJHNwKQorCSRQT1AJcjIxLGAkRlJBTUUtJFNJWkVfVCoxMWAoJHNwKQorCSRQT1AJcjIyLGAkRlJBTUUtJFNJWkVfVCoxMGAoJHNwKQorCSRQT1AJcjIzLGAkRlJBTUUtJFNJWkVfVCo5YCgkc3ApCisJJFBPUAlyMjQsYCRGUkFNRS0kU0laRV9UKjhgKCRzcCkKKwkkUE9QCXIyNSxgJEZSQU1FLSRTSVpFX1QqN2AoJHNwKQorCSRQT1AJcjI2LGAkRlJBTUUtJFNJWkVfVCo2YCgkc3ApCisJJFBPUAlyMjcsYCRGUkFNRS0kU0laRV9UKjVgKCRzcCkKKwkkUE9QCXIyOCxgJEZSQU1FLSRTSVpFX1QqNGAoJHNwKQorCSRQT1AJcjI5LGAkRlJBTUUtJFNJWkVfVCozYCgkc3ApCisJJFBPUAlyMzAsYCRGUkFNRS0kU0laRV9UKjJgKCRzcCkKKwkkUE9QCXIzMSxgJEZSQU1FLSRTSVpFX1QqMWAoJHNwKQorCW10bHIJcjAKKwlhZGRpCSRzcCwkc3AsYCRGUkFNRSsxNiokU1pgCisJYmxyCitfX18KKworIyBQb3dlclBDIHNwZWNpZmljYXRpb24gYWxsb3dzIGFuIGltcGxlbWVudGF0aW9uIHRvIGJlIGlsbC1iZWhhdmVkCisjIHVwb24gdW5hbGlnbmVkIGFjY2VzcyB3aGljaCBjcm9zc2VzIHBhZ2UgYm91bmRhcnkuICJCZXR0ZXIgc2FmZQorIyB0aGFuIHNvcnJ5IiBwcmluY2lwbGUgbWFrZXMgbWUgdHJlYXQgaXQgc3BlY2lhbGx5LiBCdXQgSSBkb24ndAorIyBsb29rIGZvciBwYXJ0aWN1bGFyIG9mZmVuZGluZyB3b3JkLCBidXQgcmF0aGVyIGZvciB0aGUgaW5wdXQKKyMgYmxvY2sgd2hpY2ggY3Jvc3NlcyB0aGUgYm91bmRhcnkuIE9uY2UgZm91bmQgdGhhdCBibG9jayBpcyBhbGlnbmVkCisjIGFuZCBoYXNoZWQgc2VwYXJhdGVseS4uLgorJGNvZGUuPTw8X19fOworLmFsaWduCTQKK0x1bmFsaWduZWQ6CisJc3ViZmljCSR0MSwkaW5wLDQwOTYKKwlhbmRpLgkkdDEsJHQxLGA0MDk2LTE2KiRTWmAJOyBkaXN0YW5jZSB0byBjbG9zZXN0IHBhZ2UgYm91bmRhcnkKKwliZXEJTGNyb3NzX3BhZ2UKKwkkVUNNUAkkbnVtLCR0MQorCWJsZS0JTGFsaWduZWQJCTsgZGlkbid0IGNyb3NzIHRoZSBwYWdlIGJvdW5kYXJ5CisJc3ViZmMJJG51bSwkdDEsJG51bQorCWFkZAkkdDEsJGlucCwkdDEKKwkkUFVTSAkkbnVtLGAkRlJBTUUtJFNJWkVfVCoyNWAoJHNwKQk7IHNhdmUgcmVhbCByZW1haW5pbmcgbnVtCisJJFBVU0gJJHQxLGAkRlJBTUUtJFNJWkVfVCoyNGAoJHNwKQk7IGludGVybWVkaWF0ZSBlbmQgcG9pbnRlcgorCSRQVVNICSRpbnAsYCRGUkFNRS0kU0laRV9UKjIzYCgkc3ApCTsgaW5wIHBvaW50ZXIKKwlibAlMc2hhMl9ibG9ja19wcml2YXRlCisJOyAkaW5wIGVxdWFscyB0byB0aGUgaW50ZXJtZWRpYXRlIGVuZCBwb2ludGVyIGhlcmUKKwkkUE9QCSRudW0sYCRGUkFNRS0kU0laRV9UKjI1YCgkc3ApCTsgcmVzdG9yZSByZWFsIHJlbWFpbmluZyBudW0KK0xjcm9zc19wYWdlOgorCWxpCSR0MSxgMTYqJFNaLzRgCisJbXRjdHIJJHQxCisJYWRkaQlyMjAsJHNwLCRGUkFNRQkJCTsgYWxpZ25lZCBzcG90IGJlbG93IHRoZSBmcmFtZQorTG1lbWNweToKKwlsYnoJcjE2LDAoJGlucCkKKwlsYnoJcjE3LDEoJGlucCkKKwlsYnoJcjE4LDIoJGlucCkKKwlsYnoJcjE5LDMoJGlucCkKKwlhZGRpCSRpbnAsJGlucCw0CisJc3RiCXIxNiwwKHIyMCkKKwlzdGIJcjE3LDEocjIwKQorCXN0YglyMTgsMihyMjApCisJc3RiCXIxOSwzKHIyMCkKKwlhZGRpCXIyMCxyMjAsNAorCWJkbnoJTG1lbWNweQorCisJJFBVU0gJJGlucCxgJEZSQU1FLSRTSVpFX1QqMjZgKCRzcCkJOyBzYXZlIHJlYWwgaW5wCisJYWRkaQkkdDEsJHNwLGAkRlJBTUUrMTYqJFNaYAkJOyBmaWN0aXRpb3VzIGVuZCBwb2ludGVyCisJYWRkaQkkaW5wLCRzcCwkRlJBTUUJCQk7IGZpY3RpdGlvdXMgaW5wIHBvaW50ZXIKKwkkUFVTSAkkbnVtLGAkRlJBTUUtJFNJWkVfVCoyNWAoJHNwKQk7IHNhdmUgcmVhbCBudW0KKwkkUFVTSAkkdDEsYCRGUkFNRS0kU0laRV9UKjI0YCgkc3ApCTsgZW5kIHBvaW50ZXIKKwkkUFVTSAkkaW5wLGAkRlJBTUUtJFNJWkVfVCoyM2AoJHNwKQk7IGlucCBwb2ludGVyCisJYmwJTHNoYTJfYmxvY2tfcHJpdmF0ZQorCSRQT1AJJGlucCxgJEZSQU1FLSRTSVpFX1QqMjZgKCRzcCkJOyByZXN0b3JlIHJlYWwgaW5wCisJJFBPUAkkbnVtLGAkRlJBTUUtJFNJWkVfVCoyNWAoJHNwKQk7IHJlc3RvcmUgcmVhbCBudW0KKwlhZGRpYy4JJG51bSwkbnVtLGAtMTYqJFNaYAkJOyBudW0tLQorCWJuZS0JTHVuYWxpZ25lZAorCWIJTGRvbmUKK19fXworCiskY29kZS49PDxfX187CisuYWxpZ24JNAorTHNoYTJfYmxvY2tfcHJpdmF0ZToKK19fXworZm9yKCRpPTA7JGk8MTY7JGkrKykgeworJGNvZGUuPTw8X19fIGlmICgkU1o9PTQpOworCWx3eglAWFskaV0sYCRpKiRTWmAoJGlucCkKK19fXworIyA2NC1iaXQgbG9hZHMgYXJlIHNwbGl0IHRvIDJ4MzItYml0IG9uZXMsIGFzIENQVSBjYW4ndCBoYW5kbGUKKyMgdW5hbGlnbmVkIDY0LWJpdCBsb2Fkcywgb25seSAzMi1iaXQgb25lcy4uLgorJGNvZGUuPTw8X19fIGlmICgkU1o9PTgpOworCWx3egkkdDAsYCRpKiRTWmAoJGlucCkKKwlsd3oJQFhbJGldLGAkaSokU1orNGAoJGlucCkKKwlpbnNyZGkJQFhbJGldLCR0MCwzMiwwCitfX18KKwkmUk9VTkRfMDBfMTUoJGksQFYpOworCXVuc2hpZnQoQFYscG9wKEBWKSk7Cit9CiskY29kZS49PDxfX187CisJbGkJJFQsYCRyb3VuZHMvMTYtMWAKKwltdGN0cgkkVAorLmFsaWduCTQKK0xyb3VuZHM6CisJYWRkaQkkVGJsLCRUYmwsYDE2KiRTWmAKK19fXworZm9yKDskaTwzMjskaSsrKSB7CisJJlJPVU5EXzE2X3h4KCRpLEBWKTsKKwl1bnNoaWZ0KEBWLHBvcChAVikpOworfQorJGNvZGUuPTw8X19fOworCWJkbnotCUxyb3VuZHMKKworCSRQT1AJJGN0eCxgJEZSQU1FLSRTSVpFX1QqMjJgKCRzcCkKKwkkUE9QCSRpbnAsYCRGUkFNRS0kU0laRV9UKjIzYCgkc3ApCTsgaW5wIHBvaW50ZXIKKwkkUE9QCSRudW0sYCRGUkFNRS0kU0laRV9UKjI0YCgkc3ApCTsgZW5kIHBvaW50ZXIKKwlzdWJpCSRUYmwsJFRibCxgKCRyb3VuZHMtMTYpKiRTWmAJOyByZXdpbmQgVGJsCisKKwkkTEQJcjE2LGAwKiRTWmAoJGN0eCkKKwkkTEQJcjE3LGAxKiRTWmAoJGN0eCkKKwkkTEQJcjE4LGAyKiRTWmAoJGN0eCkKKwkkTEQJcjE5LGAzKiRTWmAoJGN0eCkKKwkkTEQJcjIwLGA0KiRTWmAoJGN0eCkKKwkkTEQJcjIxLGA1KiRTWmAoJGN0eCkKKwkkTEQJcjIyLGA2KiRTWmAoJGN0eCkKKwlhZGRpCSRpbnAsJGlucCxgMTYqJFNaYAkJOyBhZHZhbmNlIGlucAorCSRMRAlyMjMsYDcqJFNaYCgkY3R4KQorCWFkZAkkQSwkQSxyMTYKKwlhZGQJJEIsJEIscjE3CisJJFBVU0gJJGlucCxgJEZSQU1FLSRTSVpFX1QqMjNgKCRzcCkKKwlhZGQJJEMsJEMscjE4CisJJFNUCSRBLGAwKiRTWmAoJGN0eCkKKwlhZGQJJEQsJEQscjE5CisJJFNUCSRCLGAxKiRTWmAoJGN0eCkKKwlhZGQJJEUsJEUscjIwCisJJFNUCSRDLGAyKiRTWmAoJGN0eCkKKwlhZGQJJEYsJEYscjIxCisJJFNUCSRELGAzKiRTWmAoJGN0eCkKKwlhZGQJJEcsJEcscjIyCisJJFNUCSRFLGA0KiRTWmAoJGN0eCkKKwlhZGQJJEgsJEgscjIzCisJJFNUCSRGLGA1KiRTWmAoJGN0eCkKKwkkU1QJJEcsYDYqJFNaYCgkY3R4KQorCSRVQ01QCSRpbnAsJG51bQorCSRTVAkkSCxgNyokU1pgKCRjdHgpCisJYm5lCUxzaGEyX2Jsb2NrX3ByaXZhdGUKKwlibHIKK19fXworCisjIFVnbHkgaGFjayBoZXJlLCBiZWNhdXNlIFBQQyBhc3NlbWJsZXIgc3ludGF4IHNlZW0gdG8gdmFyeSB0b28KKyMgbXVjaCBmcm9tIHBsYXRmb3JtcyB0byBwbGF0Zm9ybS4uLgorJGNvZGUuPTw8X19fOworLmFsaWduCTYKK0xQSUNtZXVwOgorCWJsCUxQSUMKKwlhZGRpCSRUYmwsJFRibCxgNjQtNGAJOyAiZGlzdGFuY2UiIGJldHdlZW4gLiBhbmQgbGFzdCBub3AKKwliCUxQSUNlZHVwCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCitMUElDOgltZmxyCSRUYmwKKwlibHIKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKK19fXworJGNvZGUuPTw8X19fIGlmICgkU1o9PTgpOworCS5sb25nCTB4NDI4YTJmOTgsMHhkNzI4YWUyMiwweDcxMzc0NDkxLDB4MjNlZjY1Y2QKKwkubG9uZwkweGI1YzBmYmNmLDB4ZWM0ZDNiMmYsMHhlOWI1ZGJhNSwweDgxODlkYmJjCisJLmxvbmcJMHgzOTU2YzI1YiwweGYzNDhiNTM4LDB4NTlmMTExZjEsMHhiNjA1ZDAxOQorCS5sb25nCTB4OTIzZjgyYTQsMHhhZjE5NGY5YiwweGFiMWM1ZWQ1LDB4ZGE2ZDgxMTgKKwkubG9uZwkweGQ4MDdhYTk4LDB4YTMwMzAyNDIsMHgxMjgzNWIwMSwweDQ1NzA2ZmJlCisJLmxvbmcJMHgyNDMxODViZSwweDRlZTRiMjhjLDB4NTUwYzdkYzMsMHhkNWZmYjRlMgorCS5sb25nCTB4NzJiZTVkNzQsMHhmMjdiODk2ZiwweDgwZGViMWZlLDB4M2IxNjk2YjEKKwkubG9uZwkweDliZGMwNmE3LDB4MjVjNzEyMzUsMHhjMTliZjE3NCwweGNmNjkyNjk0CisJLmxvbmcJMHhlNDliNjljMSwweDllZjE0YWQyLDB4ZWZiZTQ3ODYsMHgzODRmMjVlMworCS5sb25nCTB4MGZjMTlkYzYsMHg4YjhjZDViNSwweDI0MGNhMWNjLDB4NzdhYzljNjUKKwkubG9uZwkweDJkZTkyYzZmLDB4NTkyYjAyNzUsMHg0YTc0ODRhYSwweDZlYTZlNDgzCisJLmxvbmcJMHg1Y2IwYTlkYywweGJkNDFmYmQ0LDB4NzZmOTg4ZGEsMHg4MzExNTNiNQorCS5sb25nCTB4OTgzZTUxNTIsMHhlZTY2ZGZhYiwweGE4MzFjNjZkLDB4MmRiNDMyMTAKKwkubG9uZwkweGIwMDMyN2M4LDB4OThmYjIxM2YsMHhiZjU5N2ZjNywweGJlZWYwZWU0CisJLmxvbmcJMHhjNmUwMGJmMywweDNkYTg4ZmMyLDB4ZDVhNzkxNDcsMHg5MzBhYTcyNQorCS5sb25nCTB4MDZjYTYzNTEsMHhlMDAzODI2ZiwweDE0MjkyOTY3LDB4MGEwZTZlNzAKKwkubG9uZwkweDI3YjcwYTg1LDB4NDZkMjJmZmMsMHgyZTFiMjEzOCwweDVjMjZjOTI2CisJLmxvbmcJMHg0ZDJjNmRmYywweDVhYzQyYWVkLDB4NTMzODBkMTMsMHg5ZDk1YjNkZgorCS5sb25nCTB4NjUwYTczNTQsMHg4YmFmNjNkZSwweDc2NmEwYWJiLDB4M2M3N2IyYTgKKwkubG9uZwkweDgxYzJjOTJlLDB4NDdlZGFlZTYsMHg5MjcyMmM4NSwweDE0ODIzNTNiCisJLmxvbmcJMHhhMmJmZThhMSwweDRjZjEwMzY0LDB4YTgxYTY2NGIsMHhiYzQyMzAwMQorCS5sb25nCTB4YzI0YjhiNzAsMHhkMGY4OTc5MSwweGM3NmM1MWEzLDB4MDY1NGJlMzAKKwkubG9uZwkweGQxOTJlODE5LDB4ZDZlZjUyMTgsMHhkNjk5MDYyNCwweDU1NjVhOTEwCisJLmxvbmcJMHhmNDBlMzU4NSwweDU3NzEyMDJhLDB4MTA2YWEwNzAsMHgzMmJiZDFiOAorCS5sb25nCTB4MTlhNGMxMTYsMHhiOGQyZDBjOCwweDFlMzc2YzA4LDB4NTE0MWFiNTMKKwkubG9uZwkweDI3NDg3NzRjLDB4ZGY4ZWViOTksMHgzNGIwYmNiNSwweGUxOWI0OGE4CisJLmxvbmcJMHgzOTFjMGNiMywweGM1Yzk1YTYzLDB4NGVkOGFhNGEsMHhlMzQxOGFjYgorCS5sb25nCTB4NWI5Y2NhNGYsMHg3NzYzZTM3MywweDY4MmU2ZmYzLDB4ZDZiMmI4YTMKKwkubG9uZwkweDc0OGY4MmVlLDB4NWRlZmIyZmMsMHg3OGE1NjM2ZiwweDQzMTcyZjYwCisJLmxvbmcJMHg4NGM4NzgxNCwweGExZjBhYjcyLDB4OGNjNzAyMDgsMHgxYTY0MzllYworCS5sb25nCTB4OTBiZWZmZmEsMHgyMzYzMWUyOCwweGE0NTA2Y2ViLDB4ZGU4MmJkZTkKKwkubG9uZwkweGJlZjlhM2Y3LDB4YjJjNjc5MTUsMHhjNjcxNzhmMiwweGUzNzI1MzJiCisJLmxvbmcJMHhjYTI3M2VjZSwweGVhMjY2MTljLDB4ZDE4NmI4YzcsMHgyMWMwYzIwNworCS5sb25nCTB4ZWFkYTdkZDYsMHhjZGUwZWIxZSwweGY1N2Q0ZjdmLDB4ZWU2ZWQxNzgKKwkubG9uZwkweDA2ZjA2N2FhLDB4NzIxNzZmYmEsMHgwYTYzN2RjNSwweGEyYzg5OGE2CisJLmxvbmcJMHgxMTNmOTgwNCwweGJlZjkwZGFlLDB4MWI3MTBiMzUsMHgxMzFjNDcxYgorCS5sb25nCTB4MjhkYjc3ZjUsMHgyMzA0N2Q4NCwweDMyY2FhYjdiLDB4NDBjNzI0OTMKKwkubG9uZwkweDNjOWViZTBhLDB4MTVjOWJlYmMsMHg0MzFkNjdjNCwweDljMTAwZDRjCisJLmxvbmcJMHg0Y2M1ZDRiZSwweGNiM2U0MmI2LDB4NTk3ZjI5OWMsMHhmYzY1N2UyYQorCS5sb25nCTB4NWZjYjZmYWIsMHgzYWQ2ZmFlYywweDZjNDQxOThjLDB4NGE0NzU4MTcKK19fXworJGNvZGUuPTw8X19fIGlmICgkU1o9PTQpOworCS5sb25nCTB4NDI4YTJmOTgsMHg3MTM3NDQ5MSwweGI1YzBmYmNmLDB4ZTliNWRiYTUKKwkubG9uZwkweDM5NTZjMjViLDB4NTlmMTExZjEsMHg5MjNmODJhNCwweGFiMWM1ZWQ1CisJLmxvbmcJMHhkODA3YWE5OCwweDEyODM1YjAxLDB4MjQzMTg1YmUsMHg1NTBjN2RjMworCS5sb25nCTB4NzJiZTVkNzQsMHg4MGRlYjFmZSwweDliZGMwNmE3LDB4YzE5YmYxNzQKKwkubG9uZwkweGU0OWI2OWMxLDB4ZWZiZTQ3ODYsMHgwZmMxOWRjNiwweDI0MGNhMWNjCisJLmxvbmcJMHgyZGU5MmM2ZiwweDRhNzQ4NGFhLDB4NWNiMGE5ZGMsMHg3NmY5ODhkYQorCS5sb25nCTB4OTgzZTUxNTIsMHhhODMxYzY2ZCwweGIwMDMyN2M4LDB4YmY1OTdmYzcKKwkubG9uZwkweGM2ZTAwYmYzLDB4ZDVhNzkxNDcsMHgwNmNhNjM1MSwweDE0MjkyOTY3CisJLmxvbmcJMHgyN2I3MGE4NSwweDJlMWIyMTM4LDB4NGQyYzZkZmMsMHg1MzM4MGQxMworCS5sb25nCTB4NjUwYTczNTQsMHg3NjZhMGFiYiwweDgxYzJjOTJlLDB4OTI3MjJjODUKKwkubG9uZwkweGEyYmZlOGExLDB4YTgxYTY2NGIsMHhjMjRiOGI3MCwweGM3NmM1MWEzCisJLmxvbmcJMHhkMTkyZTgxOSwweGQ2OTkwNjI0LDB4ZjQwZTM1ODUsMHgxMDZhYTA3MAorCS5sb25nCTB4MTlhNGMxMTYsMHgxZTM3NmMwOCwweDI3NDg3NzRjLDB4MzRiMGJjYjUKKwkubG9uZwkweDM5MWMwY2IzLDB4NGVkOGFhNGEsMHg1YjljY2E0ZiwweDY4MmU2ZmYzCisJLmxvbmcJMHg3NDhmODJlZSwweDc4YTU2MzZmLDB4ODRjODc4MTQsMHg4Y2M3MDIwOAorCS5sb25nCTB4OTBiZWZmZmEsMHhhNDUwNmNlYiwweGJlZjlhM2Y3LDB4YzY3MTc4ZjIKK19fXworCiskY29kZSA9fiBzL1xgKFteXGBdKilcYC9ldmFsICQxL2dlbTsKK3ByaW50ICRjb2RlOworY2xvc2UgU1RET1VUOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3NoYS9hc20vc2hhNTEyLXMzOTB4LnBsIGIvY3J5cHRvL3NoYS9hc20vc2hhNTEyLXMzOTB4LnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3ZWYyZDUKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vc2hhL2FzbS9zaGE1MTItczM5MHgucGwKQEAgLTAsMCArMSwzMDEgQEAKKyMhL3Vzci9iaW4vZW52IHBlcmwKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPiBmb3IgdGhlIE9wZW5TU0wKKyMgcHJvamVjdC4gVGhlIG1vZHVsZSBpcywgaG93ZXZlciwgZHVhbCBsaWNlbnNlZCB1bmRlciBPcGVuU1NMIGFuZAorIyBDUllQVE9HQU1TIGxpY2Vuc2VzIGRlcGVuZGluZyBvbiB3aGVyZSB5b3Ugb2J0YWluIGl0LiBGb3IgZnVydGhlcgorIyBkZXRhaWxzIHNlZSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL35hcHByby9jcnlwdG9nYW1zLy4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyBTSEEyNTYvNTEyIGJsb2NrIHByb2NlZHVyZXMgZm9yIHMzOTB4LgorCisjIEFwcmlsIDIwMDcuCisjCisjIHNoYTI1Nl9ibG9ja19kYXRhX29yZGVyIGlzIHJlcG9ydGVkbHkgPjMgdGltZXMgZmFzdGVyIHRoYW4gZ2NjIDMuMworIyBnZW5lcmF0ZWQgY29kZSAobXVzdCBiZSBhIGJ1ZyBpbiBjb21waWxlciwgYXMgaW1wcm92ZW1lbnQgaXMKKyMgInBhdGhvbG9naWNhbGx5IiBoaWdoLCBpbiBwYXJ0aWN1bGFyIGluIGNvbXBhcmlzb24gdG8gb3RoZXIgU0hBCisjIG1vZHVsZXMpLiBCdXQgdGhlIHJlYWwgdHdpc3QgaXMgdGhhdCBpdCBkZXRlY3RzIGlmIGhhcmR3YXJlIHN1cHBvcnQKKyMgZm9yIFNIQTI1NiBpcyBhdmFpbGFibGUgYW5kIGluIHN1Y2ggY2FzZSB1dGlsaXplcyBpdC4gVGhlbiB0aGUKKyMgcGVyZm9ybWFuY2UgY2FuIHJlYWNoID42LjV4IG9mIGFzc2VtYmxlciBvbmUgZm9yIGxhcmdlciBjaHVua3MuCisjCisjIHNoYTUxMl9ibG9ja19kYXRhX29yZGVyIGlzIH43MCUgZmFzdGVyIHRoYW4gZ2NjIDMuMyBnZW5lcmF0ZWQgY29kZS4KKworIyBKYW51YXJ5IDIwMDkuCisjCisjIEFkZCBzdXBwb3J0IGZvciBoYXJkd2FyZSBTSEE1MTIgYW5kIHJlc2NoZWR1bGUgaW5zdHJ1Y3Rpb25zIHRvCisjIGZhdm91ciBkdWFsLWlzc3VlIHoxMCBwaXBlbGluZS4gSGFyZHdhcmUgU0hBMjU2LzUxMiBpcyB+NC43eCBmYXN0ZXIKKyMgdGhhbiBzb2Z0d2FyZS4KKworJHQwPSIlcjAiOworJHQxPSIlcjEiOworJGN0eD0iJXIyIjsJJHQyPSIlcjIiOworJGlucD0iJXIzIjsKKyRsZW49IiVyNCI7CSMgdXNlZCBhcyBpbmRleCBpbiBpbm5lciBsb29wCisKKyRBPSIlcjUiOworJEI9IiVyNiI7CiskQz0iJXI3IjsKKyREPSIlcjgiOworJEU9IiVyOSI7CiskRj0iJXIxMCI7CiskRz0iJXIxMSI7CiskSD0iJXIxMiI7CUBWPSgkQSwkQiwkQywkRCwkRSwkRiwkRywkSCk7CiskdGJsPSIlcjEzIjsKKyRUMT0iJXIxNCI7Ciskc3A9IiVyMTUiOworCiskb3V0cHV0PXNoaWZ0Oworb3BlbiBTVERPVVQsIj4kb3V0cHV0IjsKKworaWYgKCRvdXRwdXQgPX4gLzUxMi8pIHsKKwkkbGFiZWw9IjUxMiI7CisJJFNaPTg7CisJJExEPSJsZyI7CSMgbG9hZCBmcm9tIG1lbW9yeQorCSRTVD0ic3RnIjsJIyBzdG9yZSB0byBtZW1vcnkKKwkkQUREPSJhbGciOwkjIGFkZCB3aXRoIG1lbW9yeSBvcGVyYW5kCisJJFJPVD0icmxsZyI7CSMgcm90YXRlIGxlZnQKKwkkU0hSPSJzcmxnIjsJIyBsb2dpY2FsIHJpZ2h0IHNoaWZ0IFtzZWUgZXZlbiBhdCB0aGUgZW5kXQorCUBTaWdtYTA9KDI1LDMwLDM2KTsKKwlAU2lnbWExPSgyMyw0Niw1MCk7CisJQHNpZ21hMD0oNTYsNjMsIDcpOworCUBzaWdtYTE9KCAzLDQ1LCA2KTsKKwkkcm91bmRzPTgwOworCSRraW1kZnVuYz0zOwkjIDAgbWVhbnMgdW5rbm93bi91bnN1cHBvcnRlZC91bmltcGxlbWVudGVkL2Rpc2FibGVkCit9IGVsc2UgeworCSRsYWJlbD0iMjU2IjsKKwkkU1o9NDsKKwkkTEQ9ImxsZ2YiOwkjIGxvYWQgZnJvbSBtZW1vcnkKKwkkU1Q9InN0IjsJIyBzdG9yZSB0byBtZW1vcnkKKwkkQUREPSJhbCI7CSMgYWRkIHdpdGggbWVtb3J5IG9wZXJhbmQKKwkkUk9UPSJybGwiOwkjIHJvdGF0ZSBsZWZ0CisJJFNIUj0ic3JsIjsJIyBsb2dpY2FsIHJpZ2h0IHNoaWZ0CisJQFNpZ21hMD0oMTAsMTksMzApOworCUBTaWdtYTE9KCA3LDIxLDI2KTsKKwlAc2lnbWEwPSgxNCwyNSwgMyk7CisJQHNpZ21hMT0oMTMsMTUsMTApOworCSRyb3VuZHM9NjQ7CisJJGtpbWRmdW5jPTI7CSMgbWFnaWMgZnVuY3Rpb24gY29kZSBmb3Iga2ltZCBpbnN0cnVjdGlvbgorfQorJEZ1bmM9InNoYSR7bGFiZWx9X2Jsb2NrX2RhdGFfb3JkZXIiOworJFRhYmxlPSJLJHtsYWJlbH0iOworJGZyYW1lPTE2MCsxNiokU1o7CisKK3N1YiBCT0RZXzAwXzE1IHsKK215ICgkaSwkYSwkYiwkYywkZCwkZSwkZiwkZywkaCkgPSBAXzsKKworJGNvZGUuPTw8X19fIGlmICgkaTwxNik7CisJJExECSRUMSxgJGkqJFNaYCgkaW5wKQkjIyMgJGkKK19fXworJGNvZGUuPTw8X19fOworCSRST1QJJHQwLCRlLCRTaWdtYTFbMF0KKwkkUk9UCSR0MSwkZSwkU2lnbWExWzFdCisJIGxncgkkdDIsJGYKKwl4Z3IJJHQwLCR0MQorCSRST1QJJHQxLCR0MSxgJFNpZ21hMVsyXS0kU2lnbWExWzFdYAorCSB4Z3IJJHQyLCRnCisJJFNUCSRUMSxgMTYwKyRTWiooJGklMTYpYCgkc3ApCisJeGdyCSR0MCwkdDEJCQkjIFNpZ21hMShlKQorCWxhCSRUMSwwKCRUMSwkaCkJCSMgVDErPWgKKwkgbmdyCSR0MiwkZQorCSBsZ3IJJHQxLCRhCisJYWxncgkkVDEsJHQwCQkJIyBUMSs9U2lnbWExKGUpCisJJFJPVAkkaCwkYSwkU2lnbWEwWzBdCisJIHhncgkkdDIsJGcJCQkjIENoKGUsZixnKQorCSRBREQJJFQxLGAkaSokU1pgKCRsZW4sJHRibCkJIyBUMSs9S1tpXQorCSRST1QJJHQwLCRhLCRTaWdtYTBbMV0KKwlhbGdyCSRUMSwkdDIJCQkjIFQxKz1DaChlLGYsZykKKwkgb2dyCSR0MSwkYgorCXhncgkkaCwkdDAKKwkgbGdyCSR0MiwkYQorCSBuZ3IJJHQxLCRjCisJJFJPVAkkdDAsJHQwLGAkU2lnbWEwWzJdLSRTaWdtYTBbMV1gCisJeGdyCSRoLCR0MAkJCSMgaD1TaWdtYTAoYSkKKwkgbmdyCSR0MiwkYgorCWFsZ3IJJGgsJFQxCQkJIyBoKz1UMQorCSBvZ3IJJHQyLCR0MQkJCSMgTWFqKGEsYixjKQorCWxhCSRkLDAoJGQsJFQxKQkJIyBkKz1UMQorCWFsZ3IJJGgsJHQyCQkJIyBoKz1NYWooYSxiLGMpCitfX18KK30KKworc3ViIEJPRFlfMTZfWFggeworbXkgKCRpLCRhLCRiLCRjLCRkLCRlLCRmLCRnLCRoKSA9IEBfOworCiskY29kZS49PDxfX187CisJJExECSRUMSxgMTYwKyRTWiooKCRpKzEpJTE2KWAoJHNwKQkjIyMgJGkKKwkkTEQJJHQxLGAxNjArJFNaKigoJGkrMTQpJTE2KWAoJHNwKQorCSRST1QJJHQwLCRUMSwkc2lnbWEwWzBdCisJJFNIUgkkVDEsJHNpZ21hMFsyXQorCSRST1QJJHQyLCR0MCxgJHNpZ21hMFsxXS0kc2lnbWEwWzBdYAorCXhncgkkVDEsJHQwCisJJFJPVAkkdDAsJHQxLCRzaWdtYTFbMF0KKwl4Z3IJJFQxLCR0MgkJCQkjIHNpZ21hMChYW2krMV0pCisJJFNIUgkkdDEsJHNpZ21hMVsyXQorCSRBREQJJFQxLGAxNjArJFNaKigkaSUxNilgKCRzcCkJIyArPVhbaV0KKwl4Z3IJJHQxLCR0MAorCSRST1QJJHQwLCR0MCxgJHNpZ21hMVsxXS0kc2lnbWExWzBdYAorCSRBREQJJFQxLGAxNjArJFNaKigoJGkrOSklMTYpYCgkc3ApCSMgKz1YW2krOV0KKwl4Z3IJJHQxLCR0MAkJCQkjIHNpZ21hMShYW2krMTRdKQorCWFsZ3IJJFQxLCR0MQkJCQkjICs9c2lnbWExKFhbaSsxNF0pCitfX18KKwkmQk9EWV8wMF8xNShAXyk7Cit9CisKKyRjb2RlLj08PF9fXzsKKy50ZXh0CisuYWxpZ24JNjQKKy50eXBlCSRUYWJsZSxcQG9iamVjdAorJFRhYmxlOgorX19fCiskY29kZS49PDxfX18gaWYgKCRTWj09NCk7CisJLmxvbmcJMHg0MjhhMmY5OCwweDcxMzc0NDkxLDB4YjVjMGZiY2YsMHhlOWI1ZGJhNQorCS5sb25nCTB4Mzk1NmMyNWIsMHg1OWYxMTFmMSwweDkyM2Y4MmE0LDB4YWIxYzVlZDUKKwkubG9uZwkweGQ4MDdhYTk4LDB4MTI4MzViMDEsMHgyNDMxODViZSwweDU1MGM3ZGMzCisJLmxvbmcJMHg3MmJlNWQ3NCwweDgwZGViMWZlLDB4OWJkYzA2YTcsMHhjMTliZjE3NAorCS5sb25nCTB4ZTQ5YjY5YzEsMHhlZmJlNDc4NiwweDBmYzE5ZGM2LDB4MjQwY2ExY2MKKwkubG9uZwkweDJkZTkyYzZmLDB4NGE3NDg0YWEsMHg1Y2IwYTlkYywweDc2Zjk4OGRhCisJLmxvbmcJMHg5ODNlNTE1MiwweGE4MzFjNjZkLDB4YjAwMzI3YzgsMHhiZjU5N2ZjNworCS5sb25nCTB4YzZlMDBiZjMsMHhkNWE3OTE0NywweDA2Y2E2MzUxLDB4MTQyOTI5NjcKKwkubG9uZwkweDI3YjcwYTg1LDB4MmUxYjIxMzgsMHg0ZDJjNmRmYywweDUzMzgwZDEzCisJLmxvbmcJMHg2NTBhNzM1NCwweDc2NmEwYWJiLDB4ODFjMmM5MmUsMHg5MjcyMmM4NQorCS5sb25nCTB4YTJiZmU4YTEsMHhhODFhNjY0YiwweGMyNGI4YjcwLDB4Yzc2YzUxYTMKKwkubG9uZwkweGQxOTJlODE5LDB4ZDY5OTA2MjQsMHhmNDBlMzU4NSwweDEwNmFhMDcwCisJLmxvbmcJMHgxOWE0YzExNiwweDFlMzc2YzA4LDB4Mjc0ODc3NGMsMHgzNGIwYmNiNQorCS5sb25nCTB4MzkxYzBjYjMsMHg0ZWQ4YWE0YSwweDViOWNjYTRmLDB4NjgyZTZmZjMKKwkubG9uZwkweDc0OGY4MmVlLDB4NzhhNTYzNmYsMHg4NGM4NzgxNCwweDhjYzcwMjA4CisJLmxvbmcJMHg5MGJlZmZmYSwweGE0NTA2Y2ViLDB4YmVmOWEzZjcsMHhjNjcxNzhmMgorX19fCiskY29kZS49PDxfX18gaWYgKCRTWj09OCk7CisJLnF1YWQJMHg0MjhhMmY5OGQ3MjhhZTIyLDB4NzEzNzQ0OTEyM2VmNjVjZAorCS5xdWFkCTB4YjVjMGZiY2ZlYzRkM2IyZiwweGU5YjVkYmE1ODE4OWRiYmMKKwkucXVhZAkweDM5NTZjMjViZjM0OGI1MzgsMHg1OWYxMTFmMWI2MDVkMDE5CisJLnF1YWQJMHg5MjNmODJhNGFmMTk0ZjliLDB4YWIxYzVlZDVkYTZkODExOAorCS5xdWFkCTB4ZDgwN2FhOThhMzAzMDI0MiwweDEyODM1YjAxNDU3MDZmYmUKKwkucXVhZAkweDI0MzE4NWJlNGVlNGIyOGMsMHg1NTBjN2RjM2Q1ZmZiNGUyCisJLnF1YWQJMHg3MmJlNWQ3NGYyN2I4OTZmLDB4ODBkZWIxZmUzYjE2OTZiMQorCS5xdWFkCTB4OWJkYzA2YTcyNWM3MTIzNSwweGMxOWJmMTc0Y2Y2OTI2OTQKKwkucXVhZAkweGU0OWI2OWMxOWVmMTRhZDIsMHhlZmJlNDc4NjM4NGYyNWUzCisJLnF1YWQJMHgwZmMxOWRjNjhiOGNkNWI1LDB4MjQwY2ExY2M3N2FjOWM2NQorCS5xdWFkCTB4MmRlOTJjNmY1OTJiMDI3NSwweDRhNzQ4NGFhNmVhNmU0ODMKKwkucXVhZAkweDVjYjBhOWRjYmQ0MWZiZDQsMHg3NmY5ODhkYTgzMTE1M2I1CisJLnF1YWQJMHg5ODNlNTE1MmVlNjZkZmFiLDB4YTgzMWM2NmQyZGI0MzIxMAorCS5xdWFkCTB4YjAwMzI3Yzg5OGZiMjEzZiwweGJmNTk3ZmM3YmVlZjBlZTQKKwkucXVhZAkweGM2ZTAwYmYzM2RhODhmYzIsMHhkNWE3OTE0NzkzMGFhNzI1CisJLnF1YWQJMHgwNmNhNjM1MWUwMDM4MjZmLDB4MTQyOTI5NjcwYTBlNmU3MAorCS5xdWFkCTB4MjdiNzBhODU0NmQyMmZmYywweDJlMWIyMTM4NWMyNmM5MjYKKwkucXVhZAkweDRkMmM2ZGZjNWFjNDJhZWQsMHg1MzM4MGQxMzlkOTViM2RmCisJLnF1YWQJMHg2NTBhNzM1NDhiYWY2M2RlLDB4NzY2YTBhYmIzYzc3YjJhOAorCS5xdWFkCTB4ODFjMmM5MmU0N2VkYWVlNiwweDkyNzIyYzg1MTQ4MjM1M2IKKwkucXVhZAkweGEyYmZlOGExNGNmMTAzNjQsMHhhODFhNjY0YmJjNDIzMDAxCisJLnF1YWQJMHhjMjRiOGI3MGQwZjg5NzkxLDB4Yzc2YzUxYTMwNjU0YmUzMAorCS5xdWFkCTB4ZDE5MmU4MTlkNmVmNTIxOCwweGQ2OTkwNjI0NTU2NWE5MTAKKwkucXVhZAkweGY0MGUzNTg1NTc3MTIwMmEsMHgxMDZhYTA3MDMyYmJkMWI4CisJLnF1YWQJMHgxOWE0YzExNmI4ZDJkMGM4LDB4MWUzNzZjMDg1MTQxYWI1MworCS5xdWFkCTB4Mjc0ODc3NGNkZjhlZWI5OSwweDM0YjBiY2I1ZTE5YjQ4YTgKKwkucXVhZAkweDM5MWMwY2IzYzVjOTVhNjMsMHg0ZWQ4YWE0YWUzNDE4YWNiCisJLnF1YWQJMHg1YjljY2E0Zjc3NjNlMzczLDB4NjgyZTZmZjNkNmIyYjhhMworCS5xdWFkCTB4NzQ4ZjgyZWU1ZGVmYjJmYywweDc4YTU2MzZmNDMxNzJmNjAKKwkucXVhZAkweDg0Yzg3ODE0YTFmMGFiNzIsMHg4Y2M3MDIwODFhNjQzOWVjCisJLnF1YWQJMHg5MGJlZmZmYTIzNjMxZTI4LDB4YTQ1MDZjZWJkZTgyYmRlOQorCS5xdWFkCTB4YmVmOWEzZjdiMmM2NzkxNSwweGM2NzE3OGYyZTM3MjUzMmIKKwkucXVhZAkweGNhMjczZWNlZWEyNjYxOWMsMHhkMTg2YjhjNzIxYzBjMjA3CisJLnF1YWQJMHhlYWRhN2RkNmNkZTBlYjFlLDB4ZjU3ZDRmN2ZlZTZlZDE3OAorCS5xdWFkCTB4MDZmMDY3YWE3MjE3NmZiYSwweDBhNjM3ZGM1YTJjODk4YTYKKwkucXVhZAkweDExM2Y5ODA0YmVmOTBkYWUsMHgxYjcxMGIzNTEzMWM0NzFiCisJLnF1YWQJMHgyOGRiNzdmNTIzMDQ3ZDg0LDB4MzJjYWFiN2I0MGM3MjQ5MworCS5xdWFkCTB4M2M5ZWJlMGExNWM5YmViYywweDQzMWQ2N2M0OWMxMDBkNGMKKwkucXVhZAkweDRjYzVkNGJlY2IzZTQyYjYsMHg1OTdmMjk5Y2ZjNjU3ZTJhCisJLnF1YWQJMHg1ZmNiNmZhYjNhZDZmYWVjLDB4NmM0NDE5OGM0YTQ3NTgxNworX19fCiskY29kZS49PDxfX187Cisuc2l6ZQkkVGFibGUsLi0kVGFibGUKKy5nbG9ibAkkRnVuYworLnR5cGUJJEZ1bmMsXEBmdW5jdGlvbgorJEZ1bmM6CitfX18KKyRjb2RlLj08PF9fXyBpZiAoJGtpbWRmdW5jKTsKKwlsYXJsCSVyMSxPUEVOU1NMX3MzOTB4Y2FwX1AKKwlsZwklcjAsMCglcjEpCisJdG1obAklcjAsMHg0MDAwCSMgY2hlY2sgZm9yIG1lc3NhZ2Utc2VjdXJpdHkgYXNzaXN0CisJanoJLkxzb2Z0d2FyZQorCWxnaGkJJXIwLDAKKwlsYQklcjEsMTYoJHNwKQorCS5sb25nCTB4YjkzZTAwMDIJIyBraW1kICVyMCwlcjIKKwlsZwklcjAsMTYoJHNwKQorCXRtaGgJJXIwLGAweDgwMDA+PiRraW1kZnVuY2AKKwlqegkuTHNvZnR3YXJlCisJbGdoaQklcjAsJGtpbWRmdW5jCisJbGdyCSVyMSwkY3R4CisJbGdyCSVyMiwkaW5wCisJc2xsZwklcjMsJGxlbixgbG9nKDE2KiRTWikvbG9nKDIpYAorCS5sb25nCTB4YjkzZTAwMDIJIyBraW1kICVyMCwlcjIKKwlicmMJMSwuLTQJCSMgcGF5IGF0dGVudGlvbiB0byAicGFydGlhbCBjb21wbGV0aW9uIgorCWJyCSVyMTQKKy5hbGlnbgkxNgorLkxzb2Z0d2FyZToKK19fXworJGNvZGUuPTw8X19fOworCXNsbGcJJGxlbiwkbGVuLGBsb2coMTYqJFNaKS9sb2coMilgCisJbGdoaQklcjEsLSRmcmFtZQorCWFncgkkbGVuLCRpbnAKKwlzdG1nCSRjdHgsJXIxNSwxNigkc3ApCisJbGdyCSVyMCwkc3AKKwlsYQkkc3AsMCglcjEsJHNwKQorCXN0ZwklcjAsMCgkc3ApCisKKwlsYXJsCSR0YmwsJFRhYmxlCisJJExECSRBLGAwKiRTWmAoJGN0eCkKKwkkTEQJJEIsYDEqJFNaYCgkY3R4KQorCSRMRAkkQyxgMiokU1pgKCRjdHgpCisJJExECSRELGAzKiRTWmAoJGN0eCkKKwkkTEQJJEUsYDQqJFNaYCgkY3R4KQorCSRMRAkkRixgNSokU1pgKCRjdHgpCisJJExECSRHLGA2KiRTWmAoJGN0eCkKKwkkTEQJJEgsYDcqJFNaYCgkY3R4KQorCisuTGxvb3A6CisJbGdoaQkkbGVuLDAKK19fXworZm9yICgkaT0wOyRpPDE2OyRpKyspCXsgJkJPRFlfMDBfMTUoJGksQFYpOyB1bnNoaWZ0KEBWLHBvcChAVikpOyB9CiskY29kZS49Ii5Mcm91bmRzXzE2X3h4OlxuIjsKK2ZvciAoOyRpPDMyOyRpKyspCXsgJkJPRFlfMTZfWFgoJGksQFYpOyB1bnNoaWZ0KEBWLHBvcChAVikpOyB9CiskY29kZS49PDxfX187CisJYWdoaQkkbGVuLGAxNiokU1pgCisJbGdoaQkkdDAsYCgkcm91bmRzLTE2KSokU1pgCisJY2xncgkkbGVuLCR0MAorCWpuZQkuTHJvdW5kc18xNl94eAorCisJbGcJJGN0eCxgJGZyYW1lKzE2YCgkc3ApCisJbGEJJGlucCxgMTYqJFNaYCgkaW5wKQorCSRBREQJJEEsYDAqJFNaYCgkY3R4KQorCSRBREQJJEIsYDEqJFNaYCgkY3R4KQorCSRBREQJJEMsYDIqJFNaYCgkY3R4KQorCSRBREQJJEQsYDMqJFNaYCgkY3R4KQorCSRBREQJJEUsYDQqJFNaYCgkY3R4KQorCSRBREQJJEYsYDUqJFNaYCgkY3R4KQorCSRBREQJJEcsYDYqJFNaYCgkY3R4KQorCSRBREQJJEgsYDcqJFNaYCgkY3R4KQorCSRTVAkkQSxgMCokU1pgKCRjdHgpCisJJFNUCSRCLGAxKiRTWmAoJGN0eCkKKwkkU1QJJEMsYDIqJFNaYCgkY3R4KQorCSRTVAkkRCxgMyokU1pgKCRjdHgpCisJJFNUCSRFLGA0KiRTWmAoJGN0eCkKKwkkU1QJJEYsYDUqJFNaYCgkY3R4KQorCSRTVAkkRyxgNiokU1pgKCRjdHgpCisJJFNUCSRILGA3KiRTWmAoJGN0eCkKKwljbGcJJGlucCxgJGZyYW1lKzMyYCgkc3ApCisJam5lCS5MbG9vcAorCisJbG1nCSVyNiwlcjE1LGAkZnJhbWUrNDhgKCRzcCkJCisJYnIJJXIxNAorLnNpemUJJEZ1bmMsLi0kRnVuYworLnN0cmluZwkiU0hBJHtsYWJlbH0gYmxvY2sgdHJhbnNmb3JtIGZvciBzMzkweCwgQ1JZUFRPR0FNUyBieSA8YXBwcm9cQG9wZW5zc2wub3JnPiIKKy5jb21tCU9QRU5TU0xfczM5MHhjYXBfUCw4LDgKK19fXworCiskY29kZSA9fiBzL1xgKFteXGBdKilcYC9ldmFsICQxL2dlbTsKKyMgdW5saWtlIDMyLWJpdCBzaGlmdCA2NC1iaXQgb25lIHRha2VzIHRocmVlIGFyZ3VtZW50cworJGNvZGUgPX4gcy8oc3JsZ1xzKykoJXJbMC05XSspLC8kMSQyLCQyLC9nbTsKKworcHJpbnQgJGNvZGU7CitjbG9zZSBTVERPVVQ7CmRpZmYgLS1naXQgYS9jcnlwdG8vc2hhL2FzbS9zaGE1MTItc3BhcmN2OS5wbCBiL2NyeXB0by9zaGEvYXNtL3NoYTUxMi1zcGFyY3Y5LnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MjQxYWEKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vc2hhL2FzbS9zaGE1MTItc3BhcmN2OS5wbApAQCAtMCwwICsxLDU5MyBAQAorIyEvdXNyL2Jpbi9lbnYgcGVybAorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFdyaXR0ZW4gYnkgQW5keSBQb2x5YWtvdiA8YXBwcm9AZnkuY2hhbG1lcnMuc2U+IGZvciB0aGUgT3BlblNTTAorIyBwcm9qZWN0LiBUaGUgbW9kdWxlIGlzLCBob3dldmVyLCBkdWFsIGxpY2Vuc2VkIHVuZGVyIE9wZW5TU0wgYW5kCisjIENSWVBUT0dBTVMgbGljZW5zZXMgZGVwZW5kaW5nIG9uIHdoZXJlIHlvdSBvYnRhaW4gaXQuIEZvciBmdXJ0aGVyCisjIGRldGFpbHMgc2VlIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvfmFwcHJvL2NyeXB0b2dhbXMvLgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjIFNIQTI1NiBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBvdmVyIGNvbXBpbGVyIGdlbmVyYXRlZCBjb2RlIHZhcmllcworIyBmcm9tIDQwJSBmb3IgU3VuIEMgWzMyLWJpdCBidWlsZF0gdG8gNzAlIGZvciBnY2MgWzMuMywgNjQtYml0CisjIGJ1aWxkXS4gSnVzdCBsaWtlIGluIFNIQTEgbW9kdWxlIEkgYWltIHRvIGVuc3VyZSBzY2FsYWJpbGl0eSBvbgorIyBVbHRyYVNQQVJDIFQxIGJ5IHBhY2tpbmcgWFsxNl0gdG8gOCA2NC1iaXQgcmVnaXN0ZXJzLgorCisjIFNIQTUxMiBvbiBwcmUtVDEgVWx0cmFTUEFSQy4KKyMKKyMgUGVyZm9ybWFuY2UgaXMgPjc1JSBiZXR0ZXIgdGhhbiA2NC1iaXQgY29kZSBnZW5lcmF0ZWQgYnkgU3VuIEMgYW5kCisjIG92ZXIgMnggdGhhbiAzMi1iaXQgY29kZS4gWFsxNl0gcmVzaWRlcyBvbiBzdGFjaywgYnV0IGFjY2VzcyB0byBpdAorIyBpcyBzY2hlZHVsZWQgZm9yIEwyIGxhdGVuY3kgYW5kIHN0YWdlZCB0aHJvdWdoIDMyIGxlYXN0IHNpZ25pZmljYW50CisjIGJpdHMgb2YgJWwwLSVsNy4gVGhlIGxhdHRlciBpcyBkb25lIHRvIGFjaGlldmUgMzItLzY0LWJpdCBBQkkKKyMgZHVhbGl0eS4gTmV2ZXRoZWxlc3MgaXQncyB+NDAlIGZhc3RlciB0aGFuIFNIQTI1Niwgd2hpY2ggaXMgcHJldHR5CisjIGdvb2QgW29wdGltYWwgY29lZmZpY2llbnQgaXMgNTAlXS4KKyMKKyMgU0hBNTEyIG9uIFVsdHJhU1BBUkMgVDEuCisjCisjIEl0J3Mgbm90IGFueSBmYXN0ZXIgdGhhbiA2NC1iaXQgY29kZSBnZW5lcmF0ZWQgYnkgU3VuIEMgNS44LiBUaGlzIGlzCisjIGJlY2F1c2UgNjQtYml0IGNvZGUgZ2VuZXJhdG9yIGhhcyB0aGUgYWR2YW50YWdlIG9mIHVzaW5nIDY0LWJpdAorIyBsb2FkcygqKSB0byBhY2Nlc3MgWFsxNl0sIHdoaWNoIEkgY29uc2Npb3VzbHkgdHJhZGVkIGZvciAzMi0vNjQtYml0CisjIEFCSSBkdWFsaXR5IFthcyBwZXIgYWJvdmVdLiBCdXQgaXQgc3VycGFzc2VzIDMyLWJpdCBTdW4gQyBnZW5lcmF0ZWQKKyMgY29kZSBieSA2MCUsIG5vdCB0byBtZW50aW9uIHRoYXQgaXQgZG9lc24ndCBzdWZmZXIgZnJvbSBzZXZlcmUgZGVjYXkKKyMgd2hlbiBydW5uaW5nIDQgdGltZXMgcGh5c2ljYWwgY29yZXMgdGhyZWFkcyBhbmQgdGhhdCBpdCBsZWF2ZXMgZ2NjCisjIFszLjRdIGJlaGluZCBieSBvdmVyIDR4IGZhY3RvciEgSWYgY29tcGFyZWQgdG8gU0hBMjU2LCBzaW5nbGUgdGhyZWFkCisjIHBlcmZvcm1hbmNlIGlzIG9ubHkgMTAlIGJldHRlciwgYnV0IG92ZXJhbGwgdGhyb3VnaHB1dCBmb3IgbWF4aW11bQorIyBhbW91bnQgb2YgdGhyZWFkcyBmb3IgZ2l2ZW4gQ1BVIGV4Y2VlZHMgY29ycmVzcG9uZGluZyBvbmUgb2YgU0hBMjU2CisjIGJ5IDMwJSBbYWdhaW4sIG9wdGltYWwgY29lZmZpY2llbnQgaXMgNTAlXS4KKyMKKyMgKCopCVVubGlrZSBwcmUtVDEgVWx0cmFTUEFSQyBsb2FkcyBvbiBUMSBhcmUgZXhlY3V0ZWQgc3RyaWN0bHkKKyMJaW4tb3JkZXIsIGkuZS4gbG9hZCBpbnN0cnVjdGlvbiBoYXMgdG8gY29tcGxldGUgcHJpb3IgbmV4dAorIwlpbnN0cnVjdGlvbiBpbiBnaXZlbiB0aHJlYWQgaXMgZXhlY3V0ZWQsIGV2ZW4gaWYgdGhlIGxhdHRlciBpcworIwlub3QgZGVwZW5kZW50IG9uIGxvYWQgcmVzdWx0ISBUaGlzIG1lYW5zIHRoYXQgb24gVDEgdHdvIDMyLWJpdAorIwlsb2FkcyBhcmUgYWx3YXlzIHNsb3dlciB0aGFuIG9uZSA2NC1iaXQgbG9hZC4gT25jZSBhZ2FpbiB0aGlzCisjCWlzIHVubGlrZSBwcmUtVDEgVWx0cmFTUEFSQywgd2hlcmUsIGlmIHNjaGVkdWxlZCBhcHByb3ByaWF0ZWx5LAorIwkyeDMyLWJpdCBsb2FkcyBjYW4gYmUgYXMgZmFzdCBhcyAxeDY0LWJpdCBvbmVzLgorCiskYml0cz0zMjsKK2ZvciAoQEFSR1YpCXsgJGJpdHM9NjQgaWYgKC9cLW02NC8gfHwgL1wteGFyY2hcPXY5Lyk7IH0KK2lmICgkYml0cz09NjQpCXsgJGJpYXM9MjA0NzsgJGZyYW1lPTE5MjsgfQorZWxzZQkJeyAkYmlhcz0wOyAgICAkZnJhbWU9MTEyOyB9CisKKyRvdXRwdXQ9c2hpZnQ7CitvcGVuIFNURE9VVCwiPiRvdXRwdXQiOworCitpZiAoJG91dHB1dCA9fiAvNTEyLykgeworCSRsYWJlbD0iNTEyIjsKKwkkU1o9ODsKKwkkTEQ9ImxkeCI7CQkjIGxvYWQgZnJvbSBtZW1vcnkKKwkkU1Q9InN0eCI7CQkjIHN0b3JlIHRvIG1lbW9yeQorCSRTTEw9InNsbHgiOwkJIyBzaGlmdCBsZWZ0IGxvZ2ljYWwKKwkkU1JMPSJzcmx4IjsJCSMgc2hpZnQgcmlnaHQgbG9naWNhbAorCUBTaWdtYTA9KDI4LDM0LDM5KTsKKwlAU2lnbWExPSgxNCwxOCw0MSk7CisJQHNpZ21hMD0oIDcsIDEsIDgpOwkjIHJpZ2h0IHNoaWZ0IGZpcnN0CisJQHNpZ21hMT0oIDYsMTksNjEpOwkjIHJpZ2h0IHNoaWZ0IGZpcnN0CisJJGxhc3RLPTB4ODE3OworCSRyb3VuZHM9ODA7CisJJGFsaWduPTQ7CisKKwkkbG9jYWxzPTE2KiRTWjsJCSMgWFsxNl0KKworCSRBPSIlbzAiOworCSRCPSIlbzEiOworCSRDPSIlbzIiOworCSREPSIlbzMiOworCSRFPSIlbzQiOworCSRGPSIlbzUiOworCSRHPSIlZzEiOworCSRIPSIlbzciOworCUBWPSgkQSwkQiwkQywkRCwkRSwkRiwkRywkSCk7Cit9IGVsc2UgeworCSRsYWJlbD0iMjU2IjsKKwkkU1o9NDsKKwkkTEQ9ImxkIjsJCSMgbG9hZCBmcm9tIG1lbW9yeQorCSRTVD0ic3QiOwkJIyBzdG9yZSB0byBtZW1vcnkKKwkkU0xMPSJzbGwiOwkJIyBzaGlmdCBsZWZ0IGxvZ2ljYWwKKwkkU1JMPSJzcmwiOwkJIyBzaGlmdCByaWdodCBsb2dpY2FsCisJQFNpZ21hMD0oIDIsMTMsMjIpOworCUBTaWdtYTE9KCA2LDExLDI1KTsKKwlAc2lnbWEwPSggMywgNywxOCk7CSMgcmlnaHQgc2hpZnQgZmlyc3QKKwlAc2lnbWExPSgxMCwxNywxOSk7CSMgcmlnaHQgc2hpZnQgZmlyc3QKKwkkbGFzdEs9MHg4ZjI7CisJJHJvdW5kcz02NDsKKwkkYWxpZ249ODsKKworCSRsb2NhbHM9MDsJCSMgWFsxNl0gaXMgcmVnaXN0ZXIgcmVzaWRlbnQKKwlAWD0oIiVvMCIsIiVvMSIsIiVvMiIsIiVvMyIsIiVvNCIsIiVvNSIsIiVnMSIsIiVvNyIpOworCQorCSRBPSIlbDAiOworCSRCPSIlbDEiOworCSRDPSIlbDIiOworCSREPSIlbDMiOworCSRFPSIlbDQiOworCSRGPSIlbDUiOworCSRHPSIlbDYiOworCSRIPSIlbDciOworCUBWPSgkQSwkQiwkQywkRCwkRSwkRiwkRywkSCk7Cit9CiskVDE9IiVnMiI7CiskdG1wMD0iJWczIjsKKyR0bXAxPSIlZzQiOworJHRtcDI9IiVnNSI7CisKKyRjdHg9IiVpMCI7CiskaW5wPSIlaTEiOworJGxlbj0iJWkyIjsKKyRLdGJsPSIlaTMiOworJHRtcDMxPSIlaTQiOworJHRtcDMyPSIlaTUiOworCisjIyMjIyMjIyMjIyBTSEEyNTYKKyRYbG9hZCA9IHN1YiB7CitteSAoJGksJGEsJGIsJGMsJGQsJGUsJGYsJGcsJGgpPUBfOworCisgICAgaWYgKCRpPT0wKSB7CiskY29kZS49PDxfX187CisJbGR4CVskaW5wKzBdLEBYWzBdCisJbGR4CVskaW5wKzE2XSxAWFsyXQorCWxkeAlbJGlucCszMl0sQFhbNF0KKwlsZHgJWyRpbnArNDhdLEBYWzZdCisJbGR4CVskaW5wKzhdLEBYWzFdCisJbGR4CVskaW5wKzI0XSxAWFszXQorCXN1YmNjCSVnMCwkdG1wMzEsJHRtcDMyICEgc2hvdWxkIGJlIDY0LSR0bXAzMSwgYnV0IC0kdG1wMzEgd29ya3MgdG9vCisJbGR4CVskaW5wKzQwXSxAWFs1XQorCWJ6LHB0CSVpY2MsLkxhbGlnbmVkCisJbGR4CVskaW5wKzU2XSxAWFs3XQorCisJc2xseAlAWFswXSwkdG1wMzEsQFhbMF0KKwlsZHgJWyRpbnArNjRdLCRUMQorX19fCitmb3IoJGo9MDskajw3OyRqKyspCit7ICAgJGNvZGUuPTw8X19fOworCXNybHgJQFhbJGorMV0sJHRtcDMyLCR0bXAxCisJc2xseAlAWFskaisxXSwkdG1wMzEsQFhbJGorMV0KKwlvcgkkdG1wMSxAWFskal0sQFhbJGpdCitfX18KK30KKyRjb2RlLj08PF9fXzsKKwlzcmx4CSRUMSwkdG1wMzIsJFQxCisJb3IJJFQxLEBYWzddLEBYWzddCisuTGFsaWduZWQ6CitfX18KKyAgICB9CisKKyAgICBpZiAoJGkmMSkgeworCSRjb2RlLj0iXHRhZGQJQFhbJGkvMl0sJGgsJFQxXG4iOworICAgIH0gZWxzZSB7CisJJGNvZGUuPSJcdHNybHgJQFhbJGkvMl0sMzIsJFQxXG5cdGFkZAkkaCwkVDEsJFQxXG4iOworICAgIH0KK30gaWYgKCRTWj09NCk7CisKKyMjIyMjIyMjIyMjIFNIQTUxMgorJFhsb2FkID0gc3ViIHsKK215ICgkaSwkYSwkYiwkYywkZCwkZSwkZiwkZywkaCk9QF87CitteSBAcGFpcj0oIiVsIi5ldmFsKCgkaSoyKSU4KSwiJWwiLmV2YWwoKCRpKjIpJTgrMSksIiVsIi5ldmFsKCgoJGkrMSkqMiklOCkpOworCiskY29kZS49PDxfX18gaWYgKCRpPT0wKTsKKwlsZAlbJGlucCswXSwlbDAKKwlsZAlbJGlucCs0XSwlbDEKKwlsZAlbJGlucCs4XSwlbDIKKwlsZAlbJGlucCsxMl0sJWwzCisJbGQJWyRpbnArMTZdLCVsNAorCWxkCVskaW5wKzIwXSwlbDUKKwlsZAlbJGlucCsyNF0sJWw2CisJbGQJWyRpbnArMjhdLCVsNworX19fCiskY29kZS49PDxfX18gaWYgKCRpPDE1KTsKKwlzbGx4CUBwYWlyWzFdLCR0bXAzMSwkdG1wMgkhIFhsb2FkKCRpKQorCWFkZAkkdG1wMzEsMzIsJHRtcDAKKwlzbGx4CUBwYWlyWzBdLCR0bXAwLCR0bXAxCisJYCJsZAlbJGlucCsiLmV2YWwoMzIrMCskaSo4KS4iXSxAcGFpclswXSIJaWYgKCRpPDEyKWAKKwlzcmx4CUBwYWlyWzJdLCR0bXAzMixAcGFpclsxXQorCW9yCSR0bXAxLCR0bXAyLCR0bXAyCisJb3IJQHBhaXJbMV0sJHRtcDIsJHRtcDIKKwlgImxkCVskaW5wKyIuZXZhbCgzMis0KyRpKjgpLiJdLEBwYWlyWzFdIglpZiAoJGk8MTIpYAorCWFkZAkkaCwkdG1wMiwkVDEKKwkkU1QJJHRtcDIsWyVzcCtgJGJpYXMrJGZyYW1lKyRpKiRTWmBdCitfX18KKyRjb2RlLj08PF9fXyBpZiAoJGk9PTEyKTsKKwlicm56LGEJJHRtcDMxLC4rOAorCWxkCVskaW5wKzEyOF0sJWwwCitfX18KKyRjb2RlLj08PF9fXyBpZiAoJGk9PTE1KTsKKwlsZAlbJXNwK2AkYmlhcyskZnJhbWUrKCgkaSsxKzEpJTE2KSokU1orMGBdLCVsMgorCXNsbHgJQHBhaXJbMV0sJHRtcDMxLCR0bXAyCSEgWGxvYWQoJGkpCisJYWRkCSR0bXAzMSwzMiwkdG1wMAorCWxkCVslc3ArYCRiaWFzKyRmcmFtZSsoKCRpKzErMSklMTYpKiRTWis0YF0sJWwzCisJc2xseAlAcGFpclswXSwkdG1wMCwkdG1wMQorCWxkCVslc3ArYCRiaWFzKyRmcmFtZSsoKCRpKzErOSklMTYpKiRTWiswYF0sJWw0CisJc3JseAlAcGFpclsyXSwkdG1wMzIsQHBhaXJbMV0KKwlvcgkkdG1wMSwkdG1wMiwkdG1wMgorCWxkCVslc3ArYCRiaWFzKyRmcmFtZSsoKCRpKzErOSklMTYpKiRTWis0YF0sJWw1CisJb3IJQHBhaXJbMV0sJHRtcDIsJHRtcDIKKwlsZAlbJXNwK2AkYmlhcyskZnJhbWUrKCgkaSsxKzE0KSUxNikqJFNaKzBgXSwlbDYKKwlhZGQJJGgsJHRtcDIsJFQxCisJJFNUCSR0bXAyLFslc3ArYCRiaWFzKyRmcmFtZSskaSokU1pgXQorCWxkCVslc3ArYCRiaWFzKyRmcmFtZSsoKCRpKzErMTQpJTE2KSokU1orNGBdLCVsNworCWxkCVslc3ArYCRiaWFzKyRmcmFtZSsoKCRpKzErMCklMTYpKiRTWiswYF0sJWwwCisJbGQJWyVzcCtgJGJpYXMrJGZyYW1lKygoJGkrMSswKSUxNikqJFNaKzRgXSwlbDEKK19fXworfSBpZiAoJFNaPT04KTsKKworIyMjIyMjIyMjIyMgY29tbW9uCitzdWIgQk9EWV8wMF8xNSB7CitteSAoJGksJGEsJGIsJGMsJGQsJGUsJGYsJGcsJGgpPUBfOworCisgICAgaWYgKCRpPDE2KSB7CisJJiRYbG9hZChAXyk7CisgICAgfSBlbHNlIHsKKwkkY29kZS49Ilx0YWRkCSRoLCRUMSwkVDFcbiI7CisgICAgfQorCiskY29kZS49PDxfX187CisJJFNSTAkkZSxAU2lnbWExWzBdLCRoCSEhICRpCisJeG9yCSRmLCRnLCR0bXAyCisJJFNMTAkkZSxgJFNaKjgtQFNpZ21hMVsyXWAsJHRtcDEKKwlhbmQJJGUsJHRtcDIsJHRtcDIKKwkkU1JMCSRlLEBTaWdtYTFbMV0sJHRtcDAKKwl4b3IJJHRtcDEsJGgsJGgKKwkkU0xMCSRlLGAkU1oqOC1AU2lnbWExWzFdYCwkdG1wMQorCXhvcgkkdG1wMCwkaCwkaAorCSRTUkwJJGUsQFNpZ21hMVsyXSwkdG1wMAorCXhvcgkkdG1wMSwkaCwkaAorCSRTTEwJJGUsYCRTWio4LUBTaWdtYTFbMF1gLCR0bXAxCisJeG9yCSR0bXAwLCRoLCRoCisJeG9yCSRnLCR0bXAyLCR0bXAyCQkhIENoKGUsZixnKQorCXhvcgkkdG1wMSwkaCwkdG1wMAkJISBTaWdtYTEoZSkKKworCSRTUkwJJGEsQFNpZ21hMFswXSwkaAorCWFkZAkkdG1wMiwkVDEsJFQxCisJJExECVskS3RibCtgJGkqJFNaYF0sJHRtcDIJISBLWyRpXQorCSRTTEwJJGEsYCRTWio4LUBTaWdtYTBbMl1gLCR0bXAxCisJYWRkCSR0bXAwLCRUMSwkVDEKKwkkU1JMCSRhLEBTaWdtYTBbMV0sJHRtcDAKKwl4b3IJJHRtcDEsJGgsJGgKKwkkU0xMCSRhLGAkU1oqOC1AU2lnbWEwWzFdYCwkdG1wMQorCXhvcgkkdG1wMCwkaCwkaAorCSRTUkwJJGEsQFNpZ21hMFsyXSwkdG1wMAorCXhvcgkkdG1wMSwkaCwkaAkKKwkkU0xMCSRhLGAkU1oqOC1AU2lnbWEwWzBdYCwkdG1wMQorCXhvcgkkdG1wMCwkaCwkaAorCXhvcgkkdG1wMSwkaCwkaAkJISBTaWdtYTAoYSkKKworCW9yCSRhLCRiLCR0bXAwCisJYW5kCSRhLCRiLCR0bXAxCisJYW5kCSRjLCR0bXAwLCR0bXAwCisJb3IJJHRtcDAsJHRtcDEsJHRtcDEJISBNYWooYSxiLGMpCisJYWRkCSR0bXAyLCRUMSwkVDEJCSEgKz1LWyRpXQorCWFkZAkkdG1wMSwkaCwkaAorCisJYWRkCSRUMSwkZCwkZAorCWFkZAkkVDEsJGgsJGgKK19fXworfQorCisjIyMjIyMjIyMjIyBTSEEyNTYKKyRCT0RZXzE2X1hYID0gc3ViIHsKK215ICRpPUBfWzBdOworbXkgJHhpOworCisgICAgaWYgKCRpJjEpIHsKKwkkeGk9JHRtcDMyOworCSRjb2RlLj0iXHRzcmx4CUBYWygoJGkrMSkvMiklOF0sMzIsJHhpXG4iOworICAgIH0gZWxzZSB7CisJJHhpPUBYWygoJGkrMSkvMiklOF07CisgICAgfQorJGNvZGUuPTw8X19fOworCXNybAkkeGksQHNpZ21hMFswXSwkVDEJCSEhIFh1cGRhdGUoJGkpCisJc2xsCSR4aSxgMzItQHNpZ21hMFsyXWAsJHRtcDEKKwlzcmwJJHhpLEBzaWdtYTBbMV0sJHRtcDAKKwl4b3IJJHRtcDEsJFQxLCRUMQorCXNsbAkkdG1wMSxgQHNpZ21hMFsyXS1Ac2lnbWEwWzFdYCwkdG1wMQorCXhvcgkkdG1wMCwkVDEsJFQxCisJc3JsCSR4aSxAc2lnbWEwWzJdLCR0bXAwCisJeG9yCSR0bXAxLCRUMSwkVDEKK19fXworICAgIGlmICgkaSYxKSB7CisJJHhpPUBYWygoJGkrMTQpLzIpJThdOworICAgIH0gZWxzZSB7CisJJHhpPSR0bXAzMjsKKwkkY29kZS49Ilx0c3JseAlAWFsoKCRpKzE0KS8yKSU4XSwzMiwkeGlcbiI7CisgICAgfQorJGNvZGUuPTw8X19fOworCXNybAkkeGksQHNpZ21hMVswXSwkdG1wMgorCXhvcgkkdG1wMCwkVDEsJFQxCQkJISBUMT1zaWdtYTAoWFtpKzFdKQorCXNsbAkkeGksYDMyLUBzaWdtYTFbMl1gLCR0bXAxCisJc3JsCSR4aSxAc2lnbWExWzFdLCR0bXAwCisJeG9yCSR0bXAxLCR0bXAyLCR0bXAyCisJc2xsCSR0bXAxLGBAc2lnbWExWzJdLUBzaWdtYTFbMV1gLCR0bXAxCisJeG9yCSR0bXAwLCR0bXAyLCR0bXAyCisJc3JsCSR4aSxAc2lnbWExWzJdLCR0bXAwCisJeG9yCSR0bXAxLCR0bXAyLCR0bXAyCitfX18KKyAgICBpZiAoJGkmMSkgeworCSR4aT1AWFsoJGkvMiklOF07CiskY29kZS49PDxfX187CisJc3JseAlAWFsoKCRpKzkpLzIpJThdLDMyLCR0bXAxCSEgWFtpKzldCisJeG9yCSR0bXAwLCR0bXAyLCR0bXAyCQkhIHNpZ21hMShYW2krMTRdKQorCXNybAlAWFsoJGkvMiklOF0sMCwkdG1wMAorCWFkZAkkeGksJFQxLCRUMQkJCSEgKz1YW2ldCisJeG9yCSR0bXAwLEBYWygkaS8yKSU4XSxAWFsoJGkvMiklOF0KKwlhZGQJJHRtcDIsJFQxLCRUMQorCWFkZAkkdG1wMSwkVDEsJFQxCisKKwlzcmwJJFQxLDAsJFQxCisJb3IJJFQxLEBYWygkaS8yKSU4XSxAWFsoJGkvMiklOF0KK19fXworICAgIH0gZWxzZSB7CisJJHhpPUBYWygoJGkrOSkvMiklOF07CiskY29kZS49PDxfX187CisJc3JseAlAWFsoJGkvMiklOF0sMzIsJHRtcDEJCSEgWFtpXQorCXhvcgkkdG1wMCwkdG1wMiwkdG1wMgkJISBzaWdtYTEoWFtpKzE0XSkKKwlzcmwJQFhbKCRpLzIpJThdLDAsQFhbKCRpLzIpJThdCisJYWRkCSR4aSwkVDEsJFQxCQkJISArPVhbaSs5XQorCWFkZAkkdG1wMiwkVDEsJFQxCisJYWRkCSR0bXAxLCRUMSwkVDEKKworCXNsbHgJJFQxLDMyLCR0bXAwCisJb3IJJHRtcDAsQFhbKCRpLzIpJThdLEBYWygkaS8yKSU4XQorX19fCisgICAgfQorICAgICZCT0RZXzAwXzE1KEBfKTsKK30gaWYgKCRTWj09NCk7CisKKyMjIyMjIyMjIyMjIFNIQTUxMgorJEJPRFlfMTZfWFggPSBzdWIgeworbXkgJGk9QF9bMF07CitteSBAcGFpcj0oIiVsIi5ldmFsKCgkaSoyKSU4KSwiJWwiLmV2YWwoKCRpKjIpJTgrMSkpOworCiskY29kZS49PDxfX187CisJc2xseAklbDIsMzIsJHRtcDAJCSEhIFh1cGRhdGUoJGkpCisJb3IJJWwzLCR0bXAwLCR0bXAwCisKKwlzcmx4CSR0bXAwLEBzaWdtYTBbMF0sJFQxCisJbGQJWyVzcCtgJGJpYXMrJGZyYW1lKygoJGkrMSsxKSUxNikqJFNaKzBgXSwlbDIKKwlzbGx4CSR0bXAwLGA2NC1Ac2lnbWEwWzJdYCwkdG1wMQorCWxkCVslc3ArYCRiaWFzKyRmcmFtZSsoKCRpKzErMSklMTYpKiRTWis0YF0sJWwzCisJc3JseAkkdG1wMCxAc2lnbWEwWzFdLCR0bXAwCisJeG9yCSR0bXAxLCRUMSwkVDEKKwlzbGx4CSR0bXAxLGBAc2lnbWEwWzJdLUBzaWdtYTBbMV1gLCR0bXAxCisJeG9yCSR0bXAwLCRUMSwkVDEKKwlzcmx4CSR0bXAwLGBAc2lnbWEwWzJdLUBzaWdtYTBbMV1gLCR0bXAwCisJeG9yCSR0bXAxLCRUMSwkVDEKKwlzbGx4CSVsNiwzMiwkdG1wMgorCXhvcgkkdG1wMCwkVDEsJFQxCQkhIHNpZ21hMChYWyRpKzFdKQorCW9yCSVsNywkdG1wMiwkdG1wMgorCisJc3JseAkkdG1wMixAc2lnbWExWzBdLCR0bXAxCisJbGQJWyVzcCtgJGJpYXMrJGZyYW1lKygoJGkrMSsxNCklMTYpKiRTWiswYF0sJWw2CisJc2xseAkkdG1wMixgNjQtQHNpZ21hMVsyXWAsJHRtcDAKKwlsZAlbJXNwK2AkYmlhcyskZnJhbWUrKCgkaSsxKzE0KSUxNikqJFNaKzRgXSwlbDcKKwlzcmx4CSR0bXAyLEBzaWdtYTFbMV0sJHRtcDIKKwl4b3IJJHRtcDAsJHRtcDEsJHRtcDEKKwlzbGx4CSR0bXAwLGBAc2lnbWExWzJdLUBzaWdtYTFbMV1gLCR0bXAwCisJeG9yCSR0bXAyLCR0bXAxLCR0bXAxCisJc3JseAkkdG1wMixgQHNpZ21hMVsyXS1Ac2lnbWExWzFdYCwkdG1wMgorCXhvcgkkdG1wMCwkdG1wMSwkdG1wMQorCXNsbHgJJWw0LDMyLCR0bXAwCisJeG9yCSR0bXAyLCR0bXAxLCR0bXAxCSEgc2lnbWExKFhbJGkrMTRdKQorCWxkCVslc3ArYCRiaWFzKyRmcmFtZSsoKCRpKzErOSklMTYpKiRTWiswYF0sJWw0CisJb3IJJWw1LCR0bXAwLCR0bXAwCisJbGQJWyVzcCtgJGJpYXMrJGZyYW1lKygoJGkrMSs5KSUxNikqJFNaKzRgXSwlbDUKKworCXNsbHgJJWwwLDMyLCR0bXAyCisJYWRkCSR0bXAxLCRUMSwkVDEKKwlsZAlbJXNwK2AkYmlhcyskZnJhbWUrKCgkaSsxKzApJTE2KSokU1orMGBdLCVsMAorCW9yCSVsMSwkdG1wMiwkdG1wMgorCWFkZAkkdG1wMCwkVDEsJFQxCQkhICs9WFskaSs5XQorCWxkCVslc3ArYCRiaWFzKyRmcmFtZSsoKCRpKzErMCklMTYpKiRTWis0YF0sJWwxCisJYWRkCSR0bXAyLCRUMSwkVDEJCSEgKz1YWyRpXQorCSRTVAkkVDEsWyVzcCtgJGJpYXMrJGZyYW1lKygkaSUxNikqJFNaYF0KK19fXworICAgICZCT0RZXzAwXzE1KEBfKTsKK30gaWYgKCRTWj09OCk7CisKKyRjb2RlLj08PF9fXyBpZiAoJGJpdHM9PTY0KTsKKy5yZWdpc3RlcgklZzIsI3NjcmF0Y2gKKy5yZWdpc3RlcgklZzMsI3NjcmF0Y2gKK19fXworJGNvZGUuPTw8X19fOworLnNlY3Rpb24JIi50ZXh0IiwjYWxsb2MsI2V4ZWNpbnN0cgorCisuYWxpZ24JNjQKK0ske2xhYmVsfToKKy50eXBlCUske2xhYmVsfSwjb2JqZWN0CitfX18KK2lmICgkU1o9PTQpIHsKKyRjb2RlLj08PF9fXzsKKwkubG9uZwkweDQyOGEyZjk4LCAweDcxMzc0NDkxLCAweGI1YzBmYmNmLCAweGU5YjVkYmE1CisJLmxvbmcJMHgzOTU2YzI1YiwgMHg1OWYxMTFmMSwgMHg5MjNmODJhNCwgMHhhYjFjNWVkNQorCS5sb25nCTB4ZDgwN2FhOTgsIDB4MTI4MzViMDEsIDB4MjQzMTg1YmUsIDB4NTUwYzdkYzMKKwkubG9uZwkweDcyYmU1ZDc0LCAweDgwZGViMWZlLCAweDliZGMwNmE3LCAweGMxOWJmMTc0CisJLmxvbmcJMHhlNDliNjljMSwgMHhlZmJlNDc4NiwgMHgwZmMxOWRjNiwgMHgyNDBjYTFjYworCS5sb25nCTB4MmRlOTJjNmYsIDB4NGE3NDg0YWEsIDB4NWNiMGE5ZGMsIDB4NzZmOTg4ZGEKKwkubG9uZwkweDk4M2U1MTUyLCAweGE4MzFjNjZkLCAweGIwMDMyN2M4LCAweGJmNTk3ZmM3CisJLmxvbmcJMHhjNmUwMGJmMywgMHhkNWE3OTE0NywgMHgwNmNhNjM1MSwgMHgxNDI5Mjk2NworCS5sb25nCTB4MjdiNzBhODUsIDB4MmUxYjIxMzgsIDB4NGQyYzZkZmMsIDB4NTMzODBkMTMKKwkubG9uZwkweDY1MGE3MzU0LCAweDc2NmEwYWJiLCAweDgxYzJjOTJlLCAweDkyNzIyYzg1CisJLmxvbmcJMHhhMmJmZThhMSwgMHhhODFhNjY0YiwgMHhjMjRiOGI3MCwgMHhjNzZjNTFhMworCS5sb25nCTB4ZDE5MmU4MTksIDB4ZDY5OTA2MjQsIDB4ZjQwZTM1ODUsIDB4MTA2YWEwNzAKKwkubG9uZwkweDE5YTRjMTE2LCAweDFlMzc2YzA4LCAweDI3NDg3NzRjLCAweDM0YjBiY2I1CisJLmxvbmcJMHgzOTFjMGNiMywgMHg0ZWQ4YWE0YSwgMHg1YjljY2E0ZiwgMHg2ODJlNmZmMworCS5sb25nCTB4NzQ4ZjgyZWUsIDB4NzhhNTYzNmYsIDB4ODRjODc4MTQsIDB4OGNjNzAyMDgKKwkubG9uZwkweDkwYmVmZmZhLCAweGE0NTA2Y2ViLCAweGJlZjlhM2Y3LCAweGM2NzE3OGYyCitfX18KK30gZWxzZSB7CiskY29kZS49PDxfX187CisJLmxvbmcJMHg0MjhhMmY5OCwweGQ3MjhhZTIyLCAweDcxMzc0NDkxLDB4MjNlZjY1Y2QKKwkubG9uZwkweGI1YzBmYmNmLDB4ZWM0ZDNiMmYsIDB4ZTliNWRiYTUsMHg4MTg5ZGJiYworCS5sb25nCTB4Mzk1NmMyNWIsMHhmMzQ4YjUzOCwgMHg1OWYxMTFmMSwweGI2MDVkMDE5CisJLmxvbmcJMHg5MjNmODJhNCwweGFmMTk0ZjliLCAweGFiMWM1ZWQ1LDB4ZGE2ZDgxMTgKKwkubG9uZwkweGQ4MDdhYTk4LDB4YTMwMzAyNDIsIDB4MTI4MzViMDEsMHg0NTcwNmZiZQorCS5sb25nCTB4MjQzMTg1YmUsMHg0ZWU0YjI4YywgMHg1NTBjN2RjMywweGQ1ZmZiNGUyCisJLmxvbmcJMHg3MmJlNWQ3NCwweGYyN2I4OTZmLCAweDgwZGViMWZlLDB4M2IxNjk2YjEKKwkubG9uZwkweDliZGMwNmE3LDB4MjVjNzEyMzUsIDB4YzE5YmYxNzQsMHhjZjY5MjY5NAorCS5sb25nCTB4ZTQ5YjY5YzEsMHg5ZWYxNGFkMiwgMHhlZmJlNDc4NiwweDM4NGYyNWUzCisJLmxvbmcJMHgwZmMxOWRjNiwweDhiOGNkNWI1LCAweDI0MGNhMWNjLDB4NzdhYzljNjUKKwkubG9uZwkweDJkZTkyYzZmLDB4NTkyYjAyNzUsIDB4NGE3NDg0YWEsMHg2ZWE2ZTQ4MworCS5sb25nCTB4NWNiMGE5ZGMsMHhiZDQxZmJkNCwgMHg3NmY5ODhkYSwweDgzMTE1M2I1CisJLmxvbmcJMHg5ODNlNTE1MiwweGVlNjZkZmFiLCAweGE4MzFjNjZkLDB4MmRiNDMyMTAKKwkubG9uZwkweGIwMDMyN2M4LDB4OThmYjIxM2YsIDB4YmY1OTdmYzcsMHhiZWVmMGVlNAorCS5sb25nCTB4YzZlMDBiZjMsMHgzZGE4OGZjMiwgMHhkNWE3OTE0NywweDkzMGFhNzI1CisJLmxvbmcJMHgwNmNhNjM1MSwweGUwMDM4MjZmLCAweDE0MjkyOTY3LDB4MGEwZTZlNzAKKwkubG9uZwkweDI3YjcwYTg1LDB4NDZkMjJmZmMsIDB4MmUxYjIxMzgsMHg1YzI2YzkyNgorCS5sb25nCTB4NGQyYzZkZmMsMHg1YWM0MmFlZCwgMHg1MzM4MGQxMywweDlkOTViM2RmCisJLmxvbmcJMHg2NTBhNzM1NCwweDhiYWY2M2RlLCAweDc2NmEwYWJiLDB4M2M3N2IyYTgKKwkubG9uZwkweDgxYzJjOTJlLDB4NDdlZGFlZTYsIDB4OTI3MjJjODUsMHgxNDgyMzUzYgorCS5sb25nCTB4YTJiZmU4YTEsMHg0Y2YxMDM2NCwgMHhhODFhNjY0YiwweGJjNDIzMDAxCisJLmxvbmcJMHhjMjRiOGI3MCwweGQwZjg5NzkxLCAweGM3NmM1MWEzLDB4MDY1NGJlMzAKKwkubG9uZwkweGQxOTJlODE5LDB4ZDZlZjUyMTgsIDB4ZDY5OTA2MjQsMHg1NTY1YTkxMAorCS5sb25nCTB4ZjQwZTM1ODUsMHg1NzcxMjAyYSwgMHgxMDZhYTA3MCwweDMyYmJkMWI4CisJLmxvbmcJMHgxOWE0YzExNiwweGI4ZDJkMGM4LCAweDFlMzc2YzA4LDB4NTE0MWFiNTMKKwkubG9uZwkweDI3NDg3NzRjLDB4ZGY4ZWViOTksIDB4MzRiMGJjYjUsMHhlMTliNDhhOAorCS5sb25nCTB4MzkxYzBjYjMsMHhjNWM5NWE2MywgMHg0ZWQ4YWE0YSwweGUzNDE4YWNiCisJLmxvbmcJMHg1YjljY2E0ZiwweDc3NjNlMzczLCAweDY4MmU2ZmYzLDB4ZDZiMmI4YTMKKwkubG9uZwkweDc0OGY4MmVlLDB4NWRlZmIyZmMsIDB4NzhhNTYzNmYsMHg0MzE3MmY2MAorCS5sb25nCTB4ODRjODc4MTQsMHhhMWYwYWI3MiwgMHg4Y2M3MDIwOCwweDFhNjQzOWVjCisJLmxvbmcJMHg5MGJlZmZmYSwweDIzNjMxZTI4LCAweGE0NTA2Y2ViLDB4ZGU4MmJkZTkKKwkubG9uZwkweGJlZjlhM2Y3LDB4YjJjNjc5MTUsIDB4YzY3MTc4ZjIsMHhlMzcyNTMyYgorCS5sb25nCTB4Y2EyNzNlY2UsMHhlYTI2NjE5YywgMHhkMTg2YjhjNywweDIxYzBjMjA3CisJLmxvbmcJMHhlYWRhN2RkNiwweGNkZTBlYjFlLCAweGY1N2Q0ZjdmLDB4ZWU2ZWQxNzgKKwkubG9uZwkweDA2ZjA2N2FhLDB4NzIxNzZmYmEsIDB4MGE2MzdkYzUsMHhhMmM4OThhNgorCS5sb25nCTB4MTEzZjk4MDQsMHhiZWY5MGRhZSwgMHgxYjcxMGIzNSwweDEzMWM0NzFiCisJLmxvbmcJMHgyOGRiNzdmNSwweDIzMDQ3ZDg0LCAweDMyY2FhYjdiLDB4NDBjNzI0OTMKKwkubG9uZwkweDNjOWViZTBhLDB4MTVjOWJlYmMsIDB4NDMxZDY3YzQsMHg5YzEwMGQ0YworCS5sb25nCTB4NGNjNWQ0YmUsMHhjYjNlNDJiNiwgMHg1OTdmMjk5YywweGZjNjU3ZTJhCisJLmxvbmcJMHg1ZmNiNmZhYiwweDNhZDZmYWVjLCAweDZjNDQxOThjLDB4NGE0NzU4MTcKK19fXworfQorJGNvZGUuPTw8X19fOworLnNpemUJSyR7bGFiZWx9LC4tSyR7bGFiZWx9CisuZ2xvYmwJc2hhJHtsYWJlbH1fYmxvY2tfZGF0YV9vcmRlcgorc2hhJHtsYWJlbH1fYmxvY2tfZGF0YV9vcmRlcjoKKwlzYXZlCSVzcCxgLSRmcmFtZS0kbG9jYWxzYCwlc3AKKwlhbmQJJGlucCxgJGFsaWduLTFgLCR0bXAzMQorCXNsbHgJJGxlbixgbG9nKDE2KiRTWikvbG9nKDIpYCwkbGVuCisJYW5kbgkkaW5wLGAkYWxpZ24tMWAsJGlucAorCXNsbAkkdG1wMzEsMywkdG1wMzEKKwlhZGQJJGlucCwkbGVuLCRsZW4KK19fXworJGNvZGUuPTw8X19fIGlmICgkU1o9PTgpOyAjIFNIQTUxMgorCW1vdgkzMiwkdG1wMzIKKwlzdWIJJHRtcDMyLCR0bXAzMSwkdG1wMzIKK19fXworJGNvZGUuPTw8X19fOworLkxwaWM6CWNhbGwJLis4CisJYWRkCSVvNyxLJHtsYWJlbH0tLkxwaWMsJEt0YmwKKworCSRMRAlbJGN0eCtgMCokU1pgXSwkQQorCSRMRAlbJGN0eCtgMSokU1pgXSwkQgorCSRMRAlbJGN0eCtgMiokU1pgXSwkQworCSRMRAlbJGN0eCtgMyokU1pgXSwkRAorCSRMRAlbJGN0eCtgNCokU1pgXSwkRQorCSRMRAlbJGN0eCtgNSokU1pgXSwkRgorCSRMRAlbJGN0eCtgNiokU1pgXSwkRworCSRMRAlbJGN0eCtgNyokU1pgXSwkSAorCisuTGxvb3A6CitfX18KK2ZvciAoJGk9MDskaTwxNjskaSsrKQl7ICZCT0RZXzAwXzE1KCRpLEBWKTsgdW5zaGlmdChAVixwb3AoQFYpKTsgfQorJGNvZGUuPSIuTDE2X3h4OlxuIjsKK2ZvciAoOyRpPDMyOyRpKyspCXsgJiRCT0RZXzE2X1hYKCRpLEBWKTsgdW5zaGlmdChAVixwb3AoQFYpKTsgfQorJGNvZGUuPTw8X19fOworCWFuZAkkdG1wMiwweGZmZiwkdG1wMgorCWNtcAkkdG1wMiwkbGFzdEsKKwlibmUJLkwxNl94eAorCWFkZAkkS3RibCxgMTYqJFNaYCwkS3RibAkhIEt0YmwrPTE2CisKK19fXworJGNvZGUuPTw8X19fIGlmICgkU1o9PTQpOyAjIFNIQTI1NgorCSRMRAlbJGN0eCtgMCokU1pgXSxAWFswXQorCSRMRAlbJGN0eCtgMSokU1pgXSxAWFsxXQorCSRMRAlbJGN0eCtgMiokU1pgXSxAWFsyXQorCSRMRAlbJGN0eCtgMyokU1pgXSxAWFszXQorCSRMRAlbJGN0eCtgNCokU1pgXSxAWFs0XQorCSRMRAlbJGN0eCtgNSokU1pgXSxAWFs1XQorCSRMRAlbJGN0eCtgNiokU1pgXSxAWFs2XQorCSRMRAlbJGN0eCtgNyokU1pgXSxAWFs3XQorCisJYWRkCSRBLEBYWzBdLCRBCisJJFNUCSRBLFskY3R4K2AwKiRTWmBdCisJYWRkCSRCLEBYWzFdLCRCCisJJFNUCSRCLFskY3R4K2AxKiRTWmBdCisJYWRkCSRDLEBYWzJdLCRDCisJJFNUCSRDLFskY3R4K2AyKiRTWmBdCisJYWRkCSRELEBYWzNdLCRECisJJFNUCSRELFskY3R4K2AzKiRTWmBdCisJYWRkCSRFLEBYWzRdLCRFCisJJFNUCSRFLFskY3R4K2A0KiRTWmBdCisJYWRkCSRGLEBYWzVdLCRGCisJJFNUCSRGLFskY3R4K2A1KiRTWmBdCisJYWRkCSRHLEBYWzZdLCRHCisJJFNUCSRHLFskY3R4K2A2KiRTWmBdCisJYWRkCSRILEBYWzddLCRICisJJFNUCSRILFskY3R4K2A3KiRTWmBdCitfX18KKyRjb2RlLj08PF9fXyBpZiAoJFNaPT04KTsgIyBTSEE1MTIKKwlsZAlbJGN0eCtgMCokU1orMGBdLCVsMAorCWxkCVskY3R4K2AwKiRTWis0YF0sJWwxCisJbGQJWyRjdHgrYDEqJFNaKzBgXSwlbDIKKwlsZAlbJGN0eCtgMSokU1orNGBdLCVsMworCWxkCVskY3R4K2AyKiRTWiswYF0sJWw0CisJbGQJWyRjdHgrYDIqJFNaKzRgXSwlbDUKKwlsZAlbJGN0eCtgMyokU1orMGBdLCVsNgorCisJc2xseAklbDAsMzIsJHRtcDAKKwlsZAlbJGN0eCtgMyokU1orNGBdLCVsNworCXNsbHgJJWwyLDMyLCR0bXAxCisJb3IJJWwxLCR0bXAwLCR0bXAwCisJb3IJJWwzLCR0bXAxLCR0bXAxCisJYWRkCSR0bXAwLCRBLCRBCisJYWRkCSR0bXAxLCRCLCRCCisJJFNUCSRBLFskY3R4K2AwKiRTWmBdCisJc2xseAklbDQsMzIsJHRtcDIKKwkkU1QJJEIsWyRjdHgrYDEqJFNaYF0KKwlzbGx4CSVsNiwzMiwkVDEKKwlvcgklbDUsJHRtcDIsJHRtcDIKKwlvcgklbDcsJFQxLCRUMQorCWFkZAkkdG1wMiwkQywkQworCSRTVAkkQyxbJGN0eCtgMiokU1pgXQorCWFkZAkkVDEsJEQsJEQKKwkkU1QJJEQsWyRjdHgrYDMqJFNaYF0KKworCWxkCVskY3R4K2A0KiRTWiswYF0sJWwwCisJbGQJWyRjdHgrYDQqJFNaKzRgXSwlbDEKKwlsZAlbJGN0eCtgNSokU1orMGBdLCVsMgorCWxkCVskY3R4K2A1KiRTWis0YF0sJWwzCisJbGQJWyRjdHgrYDYqJFNaKzBgXSwlbDQKKwlsZAlbJGN0eCtgNiokU1orNGBdLCVsNQorCWxkCVskY3R4K2A3KiRTWiswYF0sJWw2CisKKwlzbGx4CSVsMCwzMiwkdG1wMAorCWxkCVskY3R4K2A3KiRTWis0YF0sJWw3CisJc2xseAklbDIsMzIsJHRtcDEKKwlvcgklbDEsJHRtcDAsJHRtcDAKKwlvcgklbDMsJHRtcDEsJHRtcDEKKwlhZGQJJHRtcDAsJEUsJEUKKwlhZGQJJHRtcDEsJEYsJEYKKwkkU1QJJEUsWyRjdHgrYDQqJFNaYF0KKwlzbGx4CSVsNCwzMiwkdG1wMgorCSRTVAkkRixbJGN0eCtgNSokU1pgXQorCXNsbHgJJWw2LDMyLCRUMQorCW9yCSVsNSwkdG1wMiwkdG1wMgorCW9yCSVsNywkVDEsJFQxCisJYWRkCSR0bXAyLCRHLCRHCisJJFNUCSRHLFskY3R4K2A2KiRTWmBdCisJYWRkCSRUMSwkSCwkSAorCSRTVAkkSCxbJGN0eCtgNyokU1pgXQorX19fCiskY29kZS49PDxfX187CisJYWRkCSRpbnAsYDE2KiRTWmAsJGlucAkJISBhZHZhbmNlIGlucAorCWNtcAkkaW5wLCRsZW4KKwlibmUJYCRiaXRzPT02ND8iJXhjYyI6IiVpY2MiYCwuTGxvb3AKKwlzdWIJJEt0YmwsYCgkcm91bmRzLTE2KSokU1pgLCRLdGJsCSEgcmV3aW5kIEt0YmwKKworCXJldAorCXJlc3RvcmUKKy50eXBlCXNoYSR7bGFiZWx9X2Jsb2NrX2RhdGFfb3JkZXIsI2Z1bmN0aW9uCisuc2l6ZQlzaGEke2xhYmVsfV9ibG9ja19kYXRhX29yZGVyLCguLXNoYSR7bGFiZWx9X2Jsb2NrX2RhdGFfb3JkZXIpCisuYXNjaXoJIlNIQSR7bGFiZWx9IGJsb2NrIHRyYW5zZm9ybSBmb3IgU1BBUkN2OSwgQ1JZUFRPR0FNUyBieSA8YXBwcm9cQG9wZW5zc2wub3JnPiIKK19fXworCiskY29kZSA9fiBzL1xgKFteXGBdKilcYC9ldmFsICQxL2dlbTsKK3ByaW50ICRjb2RlOworY2xvc2UgU1RET1VUOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3NoYS9hc20vc2hhNTEyLXNzZTIucGwgYi9jcnlwdG8vc2hhL2FzbS9zaGE1MTItc3NlMi5wbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA5MDJiZi4uMDAwMDAwMAotLS0gYS9jcnlwdG8vc2hhL2FzbS9zaGE1MTItc3NlMi5wbAorKysgL2Rldi9udWxsCkBAIC0xLDQwNCArMCwwIEBACi0jIS91c3IvYmluL2VudiBwZXJsCi0jCi0jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0jIFdyaXR0ZW4gYnkgQW5keSBQb2x5YWtvdiA8YXBwcm9AZnkuY2hhbG1lcnMuc2U+IGZvciB0aGUgT3BlblNTTAotIyBwcm9qZWN0LiBSaWdodHMgZm9yIHJlZGlzdHJpYnV0aW9uIGFuZCB1c2FnZSBpbiBzb3VyY2UgYW5kIGJpbmFyeQotIyBmb3JtcyBhcmUgZ3JhbnRlZCBhY2NvcmRpbmcgdG8gdGhlIE9wZW5TU0wgbGljZW5zZS4KLSMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSMKLSMgU0hBNTEyX1RyYW5zZm9ybV9TU0UyLgotIwotIyBBcyB0aGUgbmFtZSBzdWdnZXN0cywgdGhpcyBpcyBhbiBJQS0zMiBTU0UyIGltcGxlbWVudGF0aW9uIG9mCi0jIFNIQTUxMl9UcmFuc2Zvcm0uIE1vdGl2YXRpbmcgZmFjdG9yIGZvciB0aGUgdW5kZXJ0YWtlbiBlZmZvcnQgd2FzIHRoYXQKLSMgU0hBNTEyIHdhcyBvYnNlcnZlZCB0byAqY29uc2lzdGVudGx5KiBwZXJmb3JtICpzaWduaWZpY2FudGx5KiBwb29yZXIKLSMgdGhhbiBTSEEyNTYgWzJ4IGFuZCBzbG93ZXIgaXMgY29tbW9uXSBvbiAzMi1iaXQgcGxhdGZvcm1zLiBPbiA2NC1iaXQKLSMgcGxhdGZvcm1zIG9uIHRoZSBvdGhlciBoYW5kIFNIQTUxMiB0ZW5kIHRvIG91dHBlcmZvcm0gU0hBMjU2IFt+NTAlCi0jIHNlZW0gdG8gYmUgY29tbW9uIGltcHJvdmVtZW50IGZhY3Rvcl0uIEFsbCB0aGlzIGlzIHBlcmZlY3RseSBuYXR1cmFsLAotIyBhcyBTSEE1MTIgaXMgYSA2NC1iaXQgYWxnb3JpdGhtLiBCdXQgaXNuJ3QgSUEtMzIgU1NFMiBlc3NlbnRpYWxseQotIyBhIDY0LWJpdCBpbnN0cnVjdGlvbiBzZXQ/IElzIGl0IHJpY2ggZW5vdWdoIHRvIGltcGxlbWVudCBTSEE1MTI/Ci0jIElmIGFuc3dlciB3YXMgIm5vLCIgdGhlbiB5b3Ugd291bGRuJ3QgaGF2ZSBiZWVuIHJlYWRpbmcgdGhpcy4uLgotIwotIyBUaHJvdWdocHV0IHBlcmZvcm1hbmNlIGluIE1CcHMgKGxhcmdlciBpcyBiZXR0ZXIpOgotIwotIwkJMi40R0h6IFA0CTEuNEdIeiBBTUQzMgkxLjRHSHogQU1ENjQoKikKLSMgU0hBMjU2L2djYygqKQk1NAkJNDMJCTU5Ci0jIFNIQTUxMi9nY2MJMTcJCTIzCQk5MgotIyBTSEE1MTIvc3NlMgk2MSgqKikJCTU3KCoqKQotIyBTSEE1MTIvaWNjCTI2CQkyOAotIyBTSEEyNTYvaWNjKCopCTY1CQk1NAotIwotIyAoKikJQU1ENjQgYW5kIFNIQTI1NiBudW1iZXJzIGFyZSBwcmVzZW50ZWQgbW9zdGx5IGZvciBhbXVzZW1lbnQgb3IKLSMJcmVmZXJlbmNlIHB1cnBvc2VzLgotIyAoKiopCUkuZS4gaXQgZ2l2ZXMgfjItM3ggc3BlZWQtdXAgaWYgY29tcGFyZWQgd2l0aCBjb21waWxlciBnZW5lcmF0ZWQKLSMJY29kZS4gT25lIGNhbiBhcmd1ZSB0aGF0IGhhbmQtY29kZWQgKm5vbiotU1NFMiBpbXBsZW1lbnRhdGlvbgotIwl3b3VsZCBwZXJmb3JtIGJldHRlciB0aGFuIGNvbXBpbGVyIGdlbmVyYXRlZCBvbmUgYXMgd2VsbCwgYW5kCi0jCXRoYXQgY29tcGFyaXNvbiBpcyB0aGVyZWZvcmUgbm90IGV4YWN0bHkgZmFpci4gV2VsbCwgYXMgU0hBNTEyCi0jCXB1dHMgZW5vcm1vdXMgcHJlc3N1cmUgb24gSUEtMzIgR1AgcmVnaXN0ZXIgYmFuaywgSSByZWNrb24gdGhhdAotIwloYW5kLWNvZGVkIHZlcnNpb24gd291bGRuJ3QgcGVyZm9ybSBzaWduaWZpY2FudGx5IGJldHRlciB0aGFuCi0jCW9uZSBjb21waWxlZCB3aXRoIGljYywgfjIwJSBwZXJoYXBzLi4uIFNvIHRoYXQgdGhpcyBjb2RlIHdvdWxkCi0jCXN0aWxsIG91dHBlcmZvcm0gaXQgd2l0aCBkaXN0aW5ndWlzaGluZyBtYXJnaW5hbC4gQnV0IGZlZWwgZnJlZQotIwl0byBwcm92ZSBtZSB3cm9uZzotKQotIwkJCQkJCTxhcHByb0BmeS5jaGFsbWVycy5zZT4KLXB1c2goQElOQywicGVybGFzbSIsIi4uLy4uL3Blcmxhc20iKTsKLXJlcXVpcmUgIng4NmFzbS5wbCI7Ci0KLSZhc21faW5pdCgkQVJHVlswXSwic2hhNTEyLXNzZTIucGwiLCRBUkdWWyQjQVJHVl0gZXEgIjM4NiIpOwotCi0kSzUxMj0iZXNpIjsJIyBLNTEyWzgwXSB0YWJsZSwgZm91bmQgYXQgdGhlIGVuZC4uLgotIyRXNTEyPSJlc3AiOwkjICRXNTEyIGlzIG5vdCBqdXN0IFc1MTJbMTZdOiBpdCBjb21wcmlzZXMgKnR3byogY29waWVzCi0JCSMgb2YgVzUxMlsxNl0gYW5kIGEgY29weSBvZiBBLUggdmFyaWFibGVzLi4uCi0kVzUxMl9TWj04KigxNisxNis4KTsJIyBzZWUgYWJvdmUuLi4KLSMkS2lkeD0iZWJ4IjsJIyBpbmRleCBpbiBLNTEyIHRhYmxlLCBhZHZhbmNlcyBmcm9tIDAgdG8gODAuLi4KLSRXaWR4PSJlZHgiOwkjIGluZGV4IGluIFc1MTIsIHdyYXBzIGFyb3VuZCBhdCAxNi4uLgotJGRhdGE9ImVkaSI7CSMgMTYgcXdvcmRzIG9mIGlucHV0IGRhdGEuLi4KLSRBPSJtbTAiOwkjIEItRCBhbmQKLSRFPSJtbTEiOwkjIEYtSCBhcmUgYWxsb2NhdGVkIGR5bmFtaWNhbGx5Li4uCi0kQW9mZj0yNTYrMDsJIyBBLUggb2Zmc2V0cyByZWxhdGl2ZSB0byAkVzUxMi4uLgotJEJvZmY9MjU2Kzg7Ci0kQ29mZj0yNTYrMTY7Ci0kRG9mZj0yNTYrMjQ7Ci0kRW9mZj0yNTYrMzI7Ci0kRm9mZj0yNTYrNDA7Ci0kR29mZj0yNTYrNDg7Ci0kSG9mZj0yNTYrNTY7Ci0KLXN1YiBTSEEyX1JPVU5EKCkKLXsgbG9jYWwgKCRraWR4LCR3aWR4KT1AXzsKLQotCSMgT25lIGNhbiBhcmd1ZSB0aGF0IG9uZSBjb3VsZCByZW9yZGVyIGluc3RydWN0aW9ucyBmb3IgYmV0dGVyCi0JIyBwZXJmb3JtYW5jZS4gV2VsbCwgSSB0cmllZCBhbmQgaXQgZG9lc24ndCBzZWVtIHRvIG1ha2UgYW55Ci0JIyBub3RpY2VhYmxlIGRpZmZlcmVuY2UuIE1vZGVybiBvdXQtb2Ytb3JkZXIgZXhlY3V0aW9uIGNvcmVzCi0JIyByZW9yZGVyIGluc3RydWN0aW9ucyB0byB0aGVpciBsaWtpbmcgaW4gZWl0aGVyIGNhc2UgYW5kIHRoZXkKLQkjIGFwcGFyZW50bHkgZG8gZGVjZW50IGpvYi4gU28gd2UgY2FuIGtlZXAgdGhlIGNvZGUgbW9yZQotCSMgcmVhZGFibGUvcmVndWxhci9jb21wcmVoZW5zaWJsZTotKQotCi0JIyBJIGFkaGVyZSB0byA2NC1iaXQgJW1tWCByZWdpc3RlcnMgaW4gb3JkZXIgdG8gYXZvaWQvbm90IGNhcmUKLQkjIGFib3V0ICNHUCBleGNlcHRpb25zIG9uIG1pc2FsaWduZWQgMTI4LWJpdCBhY2Nlc3MsIG1vc3QKLQkjIG5vdGFibHkgaW4gcGFkZHEgd2l0aCBtZW1vcnkgb3BlcmFuZC4gTm90IHRvIG1lbnRpb24gdGhhdAotCSMgU1NFMiBpbnRydWN0aW9ucyBvcGVyYXRpbmcgb24gJW1tWCBjYW4gYmUgc2NoZWR1bGVkIGV2ZXJ5Ci0JIyBjeWNsZSBbYW5kIG5vdCBldmVyeSBzZWNvbmQgb25lIGlmIG9wZXJhdGluZyBvbiAleG1tTl0uCi0KLQkmbW92cQkoIm1tNCIsJlFXUCgkRm9mZiwkVzUxMikpOwkjIGxvYWQgZgotCSZtb3ZxCSgibW01IiwmUVdQKCRHb2ZmLCRXNTEyKSk7CSMgbG9hZCBnCi0JJm1vdnEJKCJtbTYiLCZRV1AoJEhvZmYsJFc1MTIpKTsJIyBsb2FkIGgKLQotCSZtb3ZxCSgibW0yIiwkRSk7CQkJIyAlbW0yIGlzIHNsaWRpbmcgcmlnaHQKLQkmbW92cQkoIm1tMyIsJEUpOwkJCSMgJW1tMyBpcyBzbGlkaW5nIGxlZnQKLQkmcHNybHEJKCJtbTIiLDE0KTsKLQkmcHNsbHEJKCJtbTMiLDIzKTsKLQkmbW92cQkoIm1tNyIsIm1tMiIpOwkJCSMgJW1tNyBpcyBUMQotCSZweG9yCSgibW03IiwibW0zIik7Ci0JJnBzcmxxCSgibW0yIiw0KTsKLQkmcHNsbHEJKCJtbTMiLDIzKTsKLQkmcHhvcgkoIm1tNyIsIm1tMiIpOwotCSZweG9yCSgibW03IiwibW0zIik7Ci0JJnBzcmxxCSgibW0yIiwyMyk7Ci0JJnBzbGxxCSgibW0zIiw0KTsKLQkmcHhvcgkoIm1tNyIsIm1tMiIpOwotCSZweG9yCSgibW03IiwibW0zIik7CQkJIyBUMT1TaWdtYTFfNTEyKGUpCi0KLQkmbW92cQkoJlFXUCgkRm9mZiwkVzUxMiksJEUpOwkJIyBmID0gZQotCSZtb3ZxCSgmUVdQKCRHb2ZmLCRXNTEyKSwibW00Iik7CSMgZyA9IGYKLQkmbW92cQkoJlFXUCgkSG9mZiwkVzUxMiksIm1tNSIpOwkjIGggPSBnCi0KLQkmcHhvcgkoIm1tNCIsIm1tNSIpOwkJCSMgZl49ZwotCSZwYW5kCSgibW00IiwkRSk7CQkJIyBmJj1lCi0JJnB4b3IJKCJtbTQiLCJtbTUiKTsJCQkjIGZePWcKLQkmcGFkZHEJKCJtbTciLCJtbTQiKTsJCQkjIFQxKz1DaChlLGYsZykKLQotCSZtb3ZxCSgibW0yIiwmUVdQKCRCb2ZmLCRXNTEyKSk7CSMgbG9hZCBiCi0JJm1vdnEJKCJtbTMiLCZRV1AoJENvZmYsJFc1MTIpKTsJIyBsb2FkIGMKLQkmbW92cQkoJEUsJlFXUCgkRG9mZiwkVzUxMikpOwkJIyBlID0gZAotCi0JJnBhZGRxCSgibW03IiwibW02Iik7CQkJIyBUMSs9aAotCSZwYWRkcQkoIm1tNyIsJlFXUCgwLCRLNTEyLCRraWR4LDgpKTsJIyBUMSs9SzUxMltpXQotCSZwYWRkcQkoIm1tNyIsJlFXUCgwLCRXNTEyLCR3aWR4LDgpKTsJIyBUMSs9VzUxMltpXQotCSZwYWRkcQkoJEUsIm1tNyIpOwkJCSMgZSArPSBUMQotCi0JJm1vdnEJKCJtbTQiLCRBKTsJCQkjICVtbTQgaXMgc2xpZGluZyByaWdodAotCSZtb3ZxCSgibW01IiwkQSk7CQkJIyAlbW01IGlzIHNsaWRpbmcgbGVmdAotCSZwc3JscQkoIm1tNCIsMjgpOwotCSZwc2xscQkoIm1tNSIsMjUpOwotCSZtb3ZxCSgibW02IiwibW00Iik7CQkJIyAlbW02IGlzIFQyCi0JJnB4b3IJKCJtbTYiLCJtbTUiKTsKLQkmcHNybHEJKCJtbTQiLDYpOwotCSZwc2xscQkoIm1tNSIsNSk7Ci0JJnB4b3IJKCJtbTYiLCJtbTQiKTsKLQkmcHhvcgkoIm1tNiIsIm1tNSIpOwotCSZwc3JscQkoIm1tNCIsNSk7Ci0JJnBzbGxxCSgibW01Iiw2KTsKLQkmcHhvcgkoIm1tNiIsIm1tNCIpOwotCSZweG9yCSgibW02IiwibW01Iik7CQkJIyBUMj1TaWdtYTBfNTEyKGEpCi0KLQkmbW92cQkoJlFXUCgkQm9mZiwkVzUxMiksJEEpOwkJIyBiID0gYQotCSZtb3ZxCSgmUVdQKCRDb2ZmLCRXNTEyKSwibW0yIik7CSMgYyA9IGIKLQkmbW92cQkoJlFXUCgkRG9mZiwkVzUxMiksIm1tMyIpOwkjIGQgPSBjCi0KLQkmbW92cQkoIm1tNCIsJEEpOwkJCSMgJW1tND1hCi0JJnBvcgkoJEEsIm1tMyIpOwkJCSMgYT1hfGMKLQkmcGFuZAkoIm1tNCIsIm1tMyIpOwkJCSMgJW1tND1hJmMKLQkmcGFuZAkoJEEsIm1tMiIpOwkJCSMgYT0oYXxjKSZiCi0JJnBvcgkoIm1tNCIsJEEpOwkJCSMgJW1tND0oYSZjKXwoKGF8YykmYikKLQkmcGFkZHEJKCJtbTYiLCJtbTQiKTsJCQkjIFQyKz1NYWooYSxiLGMpCi0KLQkmbW92cQkoJEEsIm1tNyIpOwkJCSMgYT1UMQotCSZwYWRkcQkoJEEsIm1tNiIpOwkJCSMgYSs9VDIKLX0KLQotJGZ1bmM9InNoYTUxMl9ibG9ja19zc2UyIjsKLQotJmZ1bmN0aW9uX2JlZ2luX0IoJGZ1bmMpOwotCWlmICgwKSB7IyBDYWxsZXIgaXMgZXhwZWN0ZWQgdG8gY2hlY2sgaWYgaXQncyBhcHByb3ByaWF0ZSB0bwotCQkjIGNhbGwgdGhpcyByb3V0aW5lLiBCZWxvdyAzIGxpbmVzIGFyZSByZXRhaW5lZCBmb3IKLQkJIyBkZWJ1Z2dpbmcgcHVycG9zZXMuLi4KLQkJJnBpY21ldXAoImVheCIsIk9QRU5TU0xfaWEzMmNhcCIpOwotCQkmYnQJKCZEV1AoMCwiZWF4IiksMjYpOwotCQkmam5jCSgiU0hBNTEyX1RyYW5zZm9ybSIpOwotCX0KLQotCSZwdXNoCSgiZWJwIik7Ci0JJm1vdgkoImVicCIsImVzcCIpOwotCSZwdXNoCSgiZWJ4Iik7Ci0JJnB1c2gJKCJlc2kiKTsKLQkmcHVzaAkoImVkaSIpOwotCi0JJm1vdgkoJFdpZHgsJkRXUCg4LCJlYnAiKSk7CQkjIEEtSCBzdGF0ZSwgMXN0IGFyZwotCSZtb3YJKCRkYXRhLCZEV1AoMTIsImVicCIpKTsJCSMgaW5wdXQgZGF0YSwgMm5kIGFyZwotCSZjYWxsCSgmbGFiZWwoInBpY19wb2ludCIpKTsJCSMgbWFrZSBpdCBQSUMhCi0mc2V0X2xhYmVsKCJwaWNfcG9pbnQiKTsKLQkmYmxpbmRwb3AoJEs1MTIpOwotCSZsZWEJKCRLNTEyLCZEV1AoJmxhYmVsKCJLNTEyIikuIi0iLiZsYWJlbCgicGljX3BvaW50IiksJEs1MTIpKTsKLQotCSRXNTEyID0gImVzcCI7CQkJIyBzdGFydCB1c2luZyAlZXNwIGFzIFc1MTIKLQkmc3ViCSgkVzUxMiwkVzUxMl9TWik7Ci0JJmFuZAkoJFc1MTIsLTE2KTsJCSMgZW5zdXJlIDEyOC1iaXQgYWxpZ25tZW50Ci0KLQkjIG1ha2UgcHJpdmF0ZSBjb3B5IG9mIEEtSAotCSMgICAgIHYgYXNzdW1lIHRoZSB3b3JzdCBhbmQgc3RpY2sgdG8gdW5hbGlnbmVkIGxvYWQKLQkmbW92ZHF1CSgieG1tMCIsJlFXUCgwLCRXaWR4KSk7Ci0JJm1vdmRxdQkoInhtbTEiLCZRV1AoMTYsJFdpZHgpKTsKLQkmbW92ZHF1CSgieG1tMiIsJlFXUCgzMiwkV2lkeCkpOwotCSZtb3ZkcXUJKCJ4bW0zIiwmUVdQKDQ4LCRXaWR4KSk7Ci0KLSZhbGlnbig4KTsKLSZzZXRfbGFiZWwoIl9jaHVua19sb29wIik7Ci0KLQkmbW92ZHFhCSgmUVdQKCRBb2ZmLCRXNTEyKSwieG1tMCIpOwkjIGEsYgotCSZtb3ZkcWEJKCZRV1AoJENvZmYsJFc1MTIpLCJ4bW0xIik7CSMgYyxkCi0JJm1vdmRxYQkoJlFXUCgkRW9mZiwkVzUxMiksInhtbTIiKTsJIyBlLGYKLQkmbW92ZHFhCSgmUVdQKCRHb2ZmLCRXNTEyKSwieG1tMyIpOwkjIGcsaAotCi0JJnhvcgkoJFdpZHgsJFdpZHgpOwotCi0JJm1vdmRxMnEoJEEsInhtbTAiKTsJCQkjIGxvYWQgYQotCSZtb3ZkcTJxKCRFLCJ4bW0yIik7CQkJIyBsb2FkIGUKLQotCSMgV2h5IGFyZW4ndCBsb29wcyB1bnJvbGxlZD8gSXQgbWFrZXMgc2Vuc2UgdG8gdW5yb2xsIGlmCi0JIyBleGVjdXRpb24gdGltZSBmb3IgbG9vcCBib2R5IGlzIGNvbXBhcmFibGUgd2l0aCBicmFuY2gKLQkjIHBlbmFsdGllcyBhbmQvb3IgaWYgd2hvbGUgZGF0YS1zZXQgcmVzaWRlcyBpbiByZWdpc3RlciBiYW5rLgotCSMgTmVpdGhlciBpcyBjYXNlIGhlcmUuLi4gV2VsbCwgaXQgd291bGQgYmUgcG9zc2libGUgdG8KLQkjIGVsaW1pbmF0ZSBmZXcgc3RvcmUgb3BlcmF0aW9ucywgYnV0IGl0IHdvdWxkIGhhcmRseSBhZmZlY3QKLQkjIHNvIHRvIHNheSBzdG9wLXdhdGNoIHBlcmZvcm1hbmNlLCBhcyB0aGVyZSBpcyBhIGxvdCBvZgotCSMgYXZhaWxhYmxlIG1lbW9yeSBzbG90cyB0byBmaWxsLiBJdCB3aWxsIG9ubHkgcmVsaWV2ZSBzb21lCi0JIyBwcmVzc3VyZSBvZmYgbWVtb3J5IGJ1cy4uLgotCi0JIyBmbGlwIGlucHV0IHN0cmVhbSBieXRlIG9yZGVyLi4uCi0JJm1vdgkoImVheCIsJkRXUCgwLCRkYXRhLCRXaWR4LDgpKTsKLQkmbW92CSgiZWJ4IiwmRFdQKDQsJGRhdGEsJFdpZHgsOCkpOwotCSZic3dhcAkoImVheCIpOwotCSZic3dhcAkoImVieCIpOwotCSZtb3YJKCZEV1AoMCwkVzUxMiwkV2lkeCw4KSwiZWJ4Iik7CQkjIFc1MTJbaV0KLQkmbW92CSgmRFdQKDQsJFc1MTIsJFdpZHgsOCksImVheCIpOwotCSZtb3YJKCZEV1AoMTI4KzAsJFc1MTIsJFdpZHgsOCksImVieCIpOwkjIGNvcHkgb2YgVzUxMltpXQotCSZtb3YJKCZEV1AoMTI4KzQsJFc1MTIsJFdpZHgsOCksImVheCIpOwotCi0mYWxpZ24oOCk7Ci0mc2V0X2xhYmVsKCJfMXN0X2xvb3AiKTsJCSMgMC0xNQotCSMgZmxpcCBpbnB1dCBzdHJlYW0gYnl0ZSBvcmRlci4uLgotCSZtb3YJKCJlYXgiLCZEV1AoMCs4LCRkYXRhLCRXaWR4LDgpKTsKLQkmbW92CSgiZWJ4IiwmRFdQKDQrOCwkZGF0YSwkV2lkeCw4KSk7Ci0JJmJzd2FwCSgiZWF4Iik7Ci0JJmJzd2FwCSgiZWJ4Iik7Ci0JJm1vdgkoJkRXUCgwKzgsJFc1MTIsJFdpZHgsOCksImVieCIpOwkjIFc1MTJbaV0KLQkmbW92CSgmRFdQKDQrOCwkVzUxMiwkV2lkeCw4KSwiZWF4Iik7Ci0JJm1vdgkoJkRXUCgxMjgrMCs4LCRXNTEyLCRXaWR4LDgpLCJlYngiKTsJIyBjb3B5IG9mIFc1MTJbaV0KLQkmbW92CSgmRFdQKDEyOCs0KzgsJFc1MTIsJFdpZHgsOCksImVheCIpOwotJnNldF9sYWJlbCgiXzFzdF9sb29wbGV0Iik7Ci0JJlNIQTJfUk9VTkQoJFdpZHgsJFdpZHgpOyAmaW5jKCRXaWR4KTsKLQotJmNtcAkoJFdpZHgsMTUpCi0mamwJKCZsYWJlbCgiXzFzdF9sb29wIikpOwotJmplCSgmbGFiZWwoIl8xc3RfbG9vcGxldCIpKTsJIyBwbGF5aW5nIHNpbWlsYXIgdHJpY2sgb24gMm5kIGxvb3AKLQkJCQkJIyBkb2VzIG5vdCBpbXByb3ZlIHBlcmZvcm1hbmNlLi4uCi0KLQkkS2lkeCA9ICJlYngiOwkJCSMgc3RhcnQgdXNpbmcgJWVieCBhcyBLaWR4Ci0JJm1vdgkoJEtpZHgsJFdpZHgpOwotCi0mYWxpZ24oOCk7Ci0mc2V0X2xhYmVsKCJfMm5kX2xvb3AiKTsJCSMgMTYtNzkKLQkmYW5kKCRXaWR4LDB4Zik7Ci0KLQkjIDEyOC1iaXQgZnJhZ21lbnQhIEkgdXBkYXRlIFc1MTJbaV0gYW5kIFc1MTJbaSsxXSBpbgotCSMgcGFyYWxsZWw6LSkgTm90ZSB0aGF0IEkgcmVmZXIgdG8gVzUxMlsoaSYweGYpK05dIGFuZCBub3QgdG8KLQkjIFc1MTJbKGkrTikmMHhmXSEgVGhpcyBpcyBleGFjdGx5IHdoYXQgSSBtYWludGFpbiB0aGUgc2Vjb25kCi0JIyBjb3B5IG9mIFc1MTJbMTZdIGZvci4uLgotCSZtb3ZkcXUJKCJ4bW0wIiwmUVdQKDgqMSwkVzUxMiwkV2lkeCw4KSk7CSMgczA9VzUxMltpKzFdCi0JJm1vdmRxYQkoInhtbTIiLCJ4bW0wIik7CQkjICV4bW0yIGlzIHNsaWRpbmcgcmlnaHQKLQkmbW92ZHFhCSgieG1tMyIsInhtbTAiKTsJCSMgJXhtbTMgaXMgc2xpZGluZyBsZWZ0Ci0JJnBzcmxxCSgieG1tMiIsMSk7Ci0JJnBzbGxxCSgieG1tMyIsNTYpOwotCSZtb3ZkcWEJKCJ4bW0wIiwieG1tMiIpOwotCSZweG9yCSgieG1tMCIsInhtbTMiKTsKLQkmcHNybHEJKCJ4bW0yIiw2KTsKLQkmcHNsbHEJKCJ4bW0zIiw3KTsKLQkmcHhvcgkoInhtbTAiLCJ4bW0yIik7Ci0JJnB4b3IJKCJ4bW0wIiwieG1tMyIpOwotCSZwc3JscQkoInhtbTIiLDEpOwotCSZweG9yCSgieG1tMCIsInhtbTIiKTsJCSMgczAgPSBzaWdtYTBfNTEyKHMwKTsKLQotCSZtb3ZkcWEJKCJ4bW0xIiwmUVdQKDgqMTQsJFc1MTIsJFdpZHgsOCkpOwkjIHMxPVc1MTJbaSsxNF0KLQkmbW92ZHFhCSgieG1tNCIsInhtbTEiKTsJCSMgJXhtbTQgaXMgc2xpZGluZyByaWdodAotCSZtb3ZkcWEJKCJ4bW01IiwieG1tMSIpOwkJIyAleG1tNSBpcyBzbGlkaW5nIGxlZnQKLQkmcHNybHEJKCJ4bW00Iiw2KTsKLQkmcHNsbHEJKCJ4bW01IiwzKTsKLQkmbW92ZHFhCSgieG1tMSIsInhtbTQiKTsKLQkmcHhvcgkoInhtbTEiLCJ4bW01Iik7Ci0JJnBzcmxxCSgieG1tNCIsMTMpOwotCSZwc2xscQkoInhtbTUiLDQyKTsKLQkmcHhvcgkoInhtbTEiLCJ4bW00Iik7Ci0JJnB4b3IJKCJ4bW0xIiwieG1tNSIpOwotCSZwc3JscQkoInhtbTQiLDQyKTsKLQkmcHhvcgkoInhtbTEiLCJ4bW00Iik7CQkjIHMxID0gc2lnbWExXzUxMihzMSk7Ci0KLQkjICAgICArIGhhdmUgdG8gZXhwbGljdGx5IGxvYWQgVzUxMltpKzldIGFzIGl0J3Mgbm90IDEyOC1iaXQKLQkjICAgICB2CWFsaWduZWQgYW5kIHBhZGRxIHdvdWxkIHRocm93IGFuIGV4Y2VwdGlvbi4uLgotCSZtb3ZkcXUJKCJ4bW02IiwmUVdQKDgqOSwkVzUxMiwkV2lkeCw4KSk7Ci0JJnBhZGRxCSgieG1tMCIsInhtbTEiKTsJCSMgczAgKz0gczEKLQkmcGFkZHEJKCJ4bW0wIiwieG1tNiIpOwkJIyBzMCArPSBXNTEyW2krOV0KLQkmcGFkZHEJKCJ4bW0wIiwmUVdQKDAsJFc1MTIsJFdpZHgsOCkpOwkjIHMwICs9IFc1MTJbaV0KLQotCSZtb3ZkcWEJKCZRV1AoMCwkVzUxMiwkV2lkeCw4KSwieG1tMCIpOwkJIyBXNTEyW2ldID0gczAKLQkmbW92ZHFhCSgmUVdQKDE2KjgsJFc1MTIsJFdpZHgsOCksInhtbTAiKTsJIyBjb3B5IG9mIFc1MTJbaV0KLQotCSMgYXMgdGhlIGFib3ZlIGZyYWdtZW50IHdhcyAxMjgtYml0LCB3ZSAib3dlIiAyIHJvdW5kcy4uLgotCSZTSEEyX1JPVU5EKCRLaWR4LCRXaWR4KTsgJmluYygkS2lkeCk7ICZpbmMoJFdpZHgpOwotCSZTSEEyX1JPVU5EKCRLaWR4LCRXaWR4KTsgJmluYygkS2lkeCk7ICZpbmMoJFdpZHgpOwotCi0mY21wCSgkS2lkeCw4MCk7Ci0mamwJKCZsYWJlbCgiXzJuZF9sb29wIikpOwotCi0JIyB1cGRhdGUgQS1IIHN0YXRlCi0JJm1vdgkoJFdpZHgsJkRXUCg4LCJlYnAiKSk7CQkjIEEtSCBzdGF0ZSwgMXN0IGFyZwotCSZtb3ZxCSgmUVdQKCRBb2ZmLCRXNTEyKSwkQSk7CQkjIHdyaXRlIG91dCBhCi0JJm1vdnEJKCZRV1AoJEVvZmYsJFc1MTIpLCRFKTsJCSMgd3JpdGUgb3V0IGUKLQkmbW92ZHF1CSgieG1tMCIsJlFXUCgwLCRXaWR4KSk7Ci0JJm1vdmRxdQkoInhtbTEiLCZRV1AoMTYsJFdpZHgpKTsKLQkmbW92ZHF1CSgieG1tMiIsJlFXUCgzMiwkV2lkeCkpOwotCSZtb3ZkcXUJKCJ4bW0zIiwmUVdQKDQ4LCRXaWR4KSk7Ci0JJnBhZGRxCSgieG1tMCIsJlFXUCgkQW9mZiwkVzUxMikpOwkjIDEyOC1iaXQgYWRkaXRpb25zLi4uCi0JJnBhZGRxCSgieG1tMSIsJlFXUCgkQ29mZiwkVzUxMikpOwotCSZwYWRkcQkoInhtbTIiLCZRV1AoJEVvZmYsJFc1MTIpKTsKLQkmcGFkZHEJKCJ4bW0zIiwmUVdQKCRHb2ZmLCRXNTEyKSk7Ci0JJm1vdmRxdQkoJlFXUCgwLCRXaWR4KSwieG1tMCIpOwotCSZtb3ZkcXUJKCZRV1AoMTYsJFdpZHgpLCJ4bW0xIik7Ci0JJm1vdmRxdQkoJlFXUCgzMiwkV2lkeCksInhtbTIiKTsKLQkmbW92ZHF1CSgmUVdQKDQ4LCRXaWR4KSwieG1tMyIpOwotCi0mYWRkCSgkZGF0YSwxNio4KTsJCQkJIyBhZHZhbmNlIGlucHV0IGRhdGEgcG9pbnRlcgotJmRlYwkoJkRXUCgxNiwiZWJwIikpOwkJCSMgZGVjcmVtZW50IDNyZCBhcmcKLSZqbnoJKCZsYWJlbCgiX2NodW5rX2xvb3AiKSk7Ci0KLQkjIGVwaWxvZ3VlCi0JJmVtbXMJKCk7CSMgcmVxdWlyZWQgZm9yIGF0IGxlYXN0IEVMRiBhbmQgV2luMzIgQUJJcwotCSZtb3YJKCJlZGkiLCZEV1AoLTEyLCJlYnAiKSk7Ci0JJm1vdgkoImVzaSIsJkRXUCgtOCwiZWJwIikpOwotCSZtb3YJKCJlYngiLCZEV1AoLTQsImVicCIpKTsKLQkmbGVhdmUJKCk7Ci0mcmV0CSgpOwotCi0mYWxpZ24oNjQpOwotJnNldF9sYWJlbCgiSzUxMiIpOwkjIFllcyEgSSBrZWVwIGl0IGluIHRoZSBjb2RlIHNlZ21lbnQhCi0JJmRhdGFfd29yZCgweGQ3MjhhZTIyLDB4NDI4YTJmOTgpOwkjIHU2NAotCSZkYXRhX3dvcmQoMHgyM2VmNjVjZCwweDcxMzc0NDkxKTsJIyB1NjQKLQkmZGF0YV93b3JkKDB4ZWM0ZDNiMmYsMHhiNWMwZmJjZik7CSMgdTY0Ci0JJmRhdGFfd29yZCgweDgxODlkYmJjLDB4ZTliNWRiYTUpOwkjIHU2NAotCSZkYXRhX3dvcmQoMHhmMzQ4YjUzOCwweDM5NTZjMjViKTsJIyB1NjQKLQkmZGF0YV93b3JkKDB4YjYwNWQwMTksMHg1OWYxMTFmMSk7CSMgdTY0Ci0JJmRhdGFfd29yZCgweGFmMTk0ZjliLDB4OTIzZjgyYTQpOwkjIHU2NAotCSZkYXRhX3dvcmQoMHhkYTZkODExOCwweGFiMWM1ZWQ1KTsJIyB1NjQKLQkmZGF0YV93b3JkKDB4YTMwMzAyNDIsMHhkODA3YWE5OCk7CSMgdTY0Ci0JJmRhdGFfd29yZCgweDQ1NzA2ZmJlLDB4MTI4MzViMDEpOwkjIHU2NAotCSZkYXRhX3dvcmQoMHg0ZWU0YjI4YywweDI0MzE4NWJlKTsJIyB1NjQKLQkmZGF0YV93b3JkKDB4ZDVmZmI0ZTIsMHg1NTBjN2RjMyk7CSMgdTY0Ci0JJmRhdGFfd29yZCgweGYyN2I4OTZmLDB4NzJiZTVkNzQpOwkjIHU2NAotCSZkYXRhX3dvcmQoMHgzYjE2OTZiMSwweDgwZGViMWZlKTsJIyB1NjQKLQkmZGF0YV93b3JkKDB4MjVjNzEyMzUsMHg5YmRjMDZhNyk7CSMgdTY0Ci0JJmRhdGFfd29yZCgweGNmNjkyNjk0LDB4YzE5YmYxNzQpOwkjIHU2NAotCSZkYXRhX3dvcmQoMHg5ZWYxNGFkMiwweGU0OWI2OWMxKTsJIyB1NjQKLQkmZGF0YV93b3JkKDB4Mzg0ZjI1ZTMsMHhlZmJlNDc4Nik7CSMgdTY0Ci0JJmRhdGFfd29yZCgweDhiOGNkNWI1LDB4MGZjMTlkYzYpOwkjIHU2NAotCSZkYXRhX3dvcmQoMHg3N2FjOWM2NSwweDI0MGNhMWNjKTsJIyB1NjQKLQkmZGF0YV93b3JkKDB4NTkyYjAyNzUsMHgyZGU5MmM2Zik7CSMgdTY0Ci0JJmRhdGFfd29yZCgweDZlYTZlNDgzLDB4NGE3NDg0YWEpOwkjIHU2NAotCSZkYXRhX3dvcmQoMHhiZDQxZmJkNCwweDVjYjBhOWRjKTsJIyB1NjQKLQkmZGF0YV93b3JkKDB4ODMxMTUzYjUsMHg3NmY5ODhkYSk7CSMgdTY0Ci0JJmRhdGFfd29yZCgweGVlNjZkZmFiLDB4OTgzZTUxNTIpOwkjIHU2NAotCSZkYXRhX3dvcmQoMHgyZGI0MzIxMCwweGE4MzFjNjZkKTsJIyB1NjQKLQkmZGF0YV93b3JkKDB4OThmYjIxM2YsMHhiMDAzMjdjOCk7CSMgdTY0Ci0JJmRhdGFfd29yZCgweGJlZWYwZWU0LDB4YmY1OTdmYzcpOwkjIHU2NAotCSZkYXRhX3dvcmQoMHgzZGE4OGZjMiwweGM2ZTAwYmYzKTsJIyB1NjQKLQkmZGF0YV93b3JkKDB4OTMwYWE3MjUsMHhkNWE3OTE0Nyk7CSMgdTY0Ci0JJmRhdGFfd29yZCgweGUwMDM4MjZmLDB4MDZjYTYzNTEpOwkjIHU2NAotCSZkYXRhX3dvcmQoMHgwYTBlNmU3MCwweDE0MjkyOTY3KTsJIyB1NjQKLQkmZGF0YV93b3JkKDB4NDZkMjJmZmMsMHgyN2I3MGE4NSk7CSMgdTY0Ci0JJmRhdGFfd29yZCgweDVjMjZjOTI2LDB4MmUxYjIxMzgpOwkjIHU2NAotCSZkYXRhX3dvcmQoMHg1YWM0MmFlZCwweDRkMmM2ZGZjKTsJIyB1NjQKLQkmZGF0YV93b3JkKDB4OWQ5NWIzZGYsMHg1MzM4MGQxMyk7CSMgdTY0Ci0JJmRhdGFfd29yZCgweDhiYWY2M2RlLDB4NjUwYTczNTQpOwkjIHU2NAotCSZkYXRhX3dvcmQoMHgzYzc3YjJhOCwweDc2NmEwYWJiKTsJIyB1NjQKLQkmZGF0YV93b3JkKDB4NDdlZGFlZTYsMHg4MWMyYzkyZSk7CSMgdTY0Ci0JJmRhdGFfd29yZCgweDE0ODIzNTNiLDB4OTI3MjJjODUpOwkjIHU2NAotCSZkYXRhX3dvcmQoMHg0Y2YxMDM2NCwweGEyYmZlOGExKTsJIyB1NjQKLQkmZGF0YV93b3JkKDB4YmM0MjMwMDEsMHhhODFhNjY0Yik7CSMgdTY0Ci0JJmRhdGFfd29yZCgweGQwZjg5NzkxLDB4YzI0YjhiNzApOwkjIHU2NAotCSZkYXRhX3dvcmQoMHgwNjU0YmUzMCwweGM3NmM1MWEzKTsJIyB1NjQKLQkmZGF0YV93b3JkKDB4ZDZlZjUyMTgsMHhkMTkyZTgxOSk7CSMgdTY0Ci0JJmRhdGFfd29yZCgweDU1NjVhOTEwLDB4ZDY5OTA2MjQpOwkjIHU2NAotCSZkYXRhX3dvcmQoMHg1NzcxMjAyYSwweGY0MGUzNTg1KTsJIyB1NjQKLQkmZGF0YV93b3JkKDB4MzJiYmQxYjgsMHgxMDZhYTA3MCk7CSMgdTY0Ci0JJmRhdGFfd29yZCgweGI4ZDJkMGM4LDB4MTlhNGMxMTYpOwkjIHU2NAotCSZkYXRhX3dvcmQoMHg1MTQxYWI1MywweDFlMzc2YzA4KTsJIyB1NjQKLQkmZGF0YV93b3JkKDB4ZGY4ZWViOTksMHgyNzQ4Nzc0Yyk7CSMgdTY0Ci0JJmRhdGFfd29yZCgweGUxOWI0OGE4LDB4MzRiMGJjYjUpOwkjIHU2NAotCSZkYXRhX3dvcmQoMHhjNWM5NWE2MywweDM5MWMwY2IzKTsJIyB1NjQKLQkmZGF0YV93b3JkKDB4ZTM0MThhY2IsMHg0ZWQ4YWE0YSk7CSMgdTY0Ci0JJmRhdGFfd29yZCgweDc3NjNlMzczLDB4NWI5Y2NhNGYpOwkjIHU2NAotCSZkYXRhX3dvcmQoMHhkNmIyYjhhMywweDY4MmU2ZmYzKTsJIyB1NjQKLQkmZGF0YV93b3JkKDB4NWRlZmIyZmMsMHg3NDhmODJlZSk7CSMgdTY0Ci0JJmRhdGFfd29yZCgweDQzMTcyZjYwLDB4NzhhNTYzNmYpOwkjIHU2NAotCSZkYXRhX3dvcmQoMHhhMWYwYWI3MiwweDg0Yzg3ODE0KTsJIyB1NjQKLQkmZGF0YV93b3JkKDB4MWE2NDM5ZWMsMHg4Y2M3MDIwOCk7CSMgdTY0Ci0JJmRhdGFfd29yZCgweDIzNjMxZTI4LDB4OTBiZWZmZmEpOwkjIHU2NAotCSZkYXRhX3dvcmQoMHhkZTgyYmRlOSwweGE0NTA2Y2ViKTsJIyB1NjQKLQkmZGF0YV93b3JkKDB4YjJjNjc5MTUsMHhiZWY5YTNmNyk7CSMgdTY0Ci0JJmRhdGFfd29yZCgweGUzNzI1MzJiLDB4YzY3MTc4ZjIpOwkjIHU2NAotCSZkYXRhX3dvcmQoMHhlYTI2NjE5YywweGNhMjczZWNlKTsJIyB1NjQKLQkmZGF0YV93b3JkKDB4MjFjMGMyMDcsMHhkMTg2YjhjNyk7CSMgdTY0Ci0JJmRhdGFfd29yZCgweGNkZTBlYjFlLDB4ZWFkYTdkZDYpOwkjIHU2NAotCSZkYXRhX3dvcmQoMHhlZTZlZDE3OCwweGY1N2Q0ZjdmKTsJIyB1NjQKLQkmZGF0YV93b3JkKDB4NzIxNzZmYmEsMHgwNmYwNjdhYSk7CSMgdTY0Ci0JJmRhdGFfd29yZCgweGEyYzg5OGE2LDB4MGE2MzdkYzUpOwkjIHU2NAotCSZkYXRhX3dvcmQoMHhiZWY5MGRhZSwweDExM2Y5ODA0KTsJIyB1NjQKLQkmZGF0YV93b3JkKDB4MTMxYzQ3MWIsMHgxYjcxMGIzNSk7CSMgdTY0Ci0JJmRhdGFfd29yZCgweDIzMDQ3ZDg0LDB4MjhkYjc3ZjUpOwkjIHU2NAotCSZkYXRhX3dvcmQoMHg0MGM3MjQ5MywweDMyY2FhYjdiKTsJIyB1NjQKLQkmZGF0YV93b3JkKDB4MTVjOWJlYmMsMHgzYzllYmUwYSk7CSMgdTY0Ci0JJmRhdGFfd29yZCgweDljMTAwZDRjLDB4NDMxZDY3YzQpOwkjIHU2NAotCSZkYXRhX3dvcmQoMHhjYjNlNDJiNiwweDRjYzVkNGJlKTsJIyB1NjQKLQkmZGF0YV93b3JkKDB4ZmM2NTdlMmEsMHg1OTdmMjk5Yyk7CSMgdTY0Ci0JJmRhdGFfd29yZCgweDNhZDZmYWVjLDB4NWZjYjZmYWIpOwkjIHU2NAotCSZkYXRhX3dvcmQoMHg0YTQ3NTgxNywweDZjNDQxOThjKTsJIyB1NjQKLQotJmZ1bmN0aW9uX2VuZF9CKCRmdW5jKTsKLQotJmFzbV9maW5pc2goKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9zaGEvYXNtL3NoYTUxMi14ODZfNjQucGwgYi9jcnlwdG8vc2hhL2FzbS9zaGE1MTIteDg2XzY0LnBsCmluZGV4IGI2MjUyZDMuLmU2NjQzZjggMTAwNzU1Ci0tLSBhL2NyeXB0by9zaGEvYXNtL3NoYTUxMi14ODZfNjQucGwKKysrIGIvY3J5cHRvL3NoYS9hc20vc2hhNTEyLXg4Nl82NC5wbApAQCAtNDAsMTQgKzQwLDE4IEBACiAjIHNoYTI1Nl9ibG9jazotKCBUaGlzIGlzIHByZXN1bWFibHkgYmVjYXVzZSA2NC1iaXQgc2hpZnRzL3JvdGF0ZXMKICMgYXBwYXJlbnRseSBhcmUgbm90IGF0b21pYyBpbnN0cnVjdGlvbnMsIGJ1dCBpbXBsZW1lbnRlZCBpbiBtaWNyb2NvZGUuCiAKLSRvdXRwdXQ9c2hpZnQ7CiskZmxhdm91ciA9IHNoaWZ0OworJG91dHB1dCAgPSBzaGlmdDsKK2lmICgkZmxhdm91ciA9fiAvXC4vKSB7ICRvdXRwdXQgPSAkZmxhdm91cjsgdW5kZWYgJGZsYXZvdXI7IH0KKworJHdpbjY0PTA7ICR3aW42ND0xIGlmICgkZmxhdm91ciA9fiAvW25tXWFzbXxtaW5ndzY0LyB8fCAkb3V0cHV0ID1+IC9cLmFzbSQvKTsKIAogJDAgPX4gbS8oLipbXC9cXF0pW15cL1xcXSskLzsgJGRpcj0kMTsKICggJHhsYXRlPSIke2Rpcn14ODZfNjQteGxhdGUucGwiIGFuZCAtZiAkeGxhdGUgKSBvcgogKCAkeGxhdGU9IiR7ZGlyfS4uLy4uL3Blcmxhc20veDg2XzY0LXhsYXRlLnBsIiBhbmQgLWYgJHhsYXRlKSBvcgogZGllICJjYW4ndCBsb2NhdGUgeDg2XzY0LXhsYXRlLnBsIjsKIAotb3BlbiBTVERPVVQsInwgJF5YICR4bGF0ZSAkb3V0cHV0IjsKK29wZW4gU1RET1VULCJ8ICReWCAkeGxhdGUgJGZsYXZvdXIgJG91dHB1dCI7CiAKIGlmICgkb3V0cHV0ID1+IC81MTIvKSB7CiAJJGZ1bmM9InNoYTUxMl9ibG9ja19kYXRhX29yZGVyIjsKQEAgLTE4Niw3ICsxOTAsNyBAQAogCXB1c2gJJXIxMwogCXB1c2gJJXIxNAogCXB1c2gJJXIxNQotCW1vdgklcnNwLCVyYnAJCSMgY29weSAlcnNwCisJbW92CSVyc3AsJXIxMQkJIyBjb3B5ICVyc3AKIAlzaGwJXCQ0LCVyZHgJCSMgbnVtKjE2CiAJc3ViCVwkJGZyYW1lc3osJXJzcAogCWxlYQkoJGlucCwlcmR4LCRTWiksJXJkeAkjIGlucCtudW0qMTYqJFNaCkBAIC0xOTQsMTAgKzE5OCwxMCBAQAogCW1vdgkkY3R4LCRfY3R4CQkjIHNhdmUgY3R4LCAxc3QgYXJnCiAJbW92CSRpbnAsJF9pbnAJCSMgc2F2ZSBpbnAsIDJuZCBhcmgKIAltb3YJJXJkeCwkX2VuZAkJIyBzYXZlIGVuZCBwb2ludGVyLCAiM3JkIiBhcmcKLQltb3YJJXJicCwkX3JzcAkJIyBzYXZlIGNvcHkgb2YgJXJzcAorCW1vdgklcjExLCRfcnNwCQkjIHNhdmUgY29weSBvZiAlcnNwCisuTHByb2xvZ3VlOgogCi0JLnBpY21ldXAgJFRibAotCWxlYQkkVEFCTEUtLigkVGJsKSwkVGJsCisJbGVhCSRUQUJMRSglcmlwKSwkVGJsCiAKIAltb3YJJFNaKjAoJGN0eCksJEEKIAltb3YJJFNaKjEoJGN0eCksJEIKQEAgLTI1NywxNCArMjYxLDE1IEBACiAJbW92CSRILCRTWio3KCRjdHgpCiAJamIJLkxsb29wCiAKLQltb3YJJF9yc3AsJXJzcAotCXBvcAklcjE1Ci0JcG9wCSVyMTQKLQlwb3AJJXIxMwotCXBvcAklcjEyCi0JcG9wCSVyYnAKLQlwb3AJJXJieAotCisJbW92CSRfcnNwLCVyc2kKKwltb3YJKCVyc2kpLCVyMTUKKwltb3YJOCglcnNpKSwlcjE0CisJbW92CTE2KCVyc2kpLCVyMTMKKwltb3YJMjQoJXJzaSksJXIxMgorCW1vdgkzMiglcnNpKSwlcmJwCisJbW92CTQwKCVyc2kpLCVyYngKKwlsZWEJNDgoJXJzaSksJXJzcAorLkxlcGlsb2d1ZToKIAlyZXQKIC5zaXplCSRmdW5jLC4tJGZ1bmMKIF9fXwpAQCAtMzM5LDYgKzM0NCwxMTMgQEAKIF9fXwogfQogCisjIEVYQ0VQVElPTl9ESVNQT1NJVElPTiBoYW5kbGVyIChFWENFUFRJT05fUkVDT1JEICpyZWMsVUxPTkc2NCBmcmFtZSwKKyMJCUNPTlRFWFQgKmNvbnRleHQsRElTUEFUQ0hFUl9DT05URVhUICpkaXNwKQoraWYgKCR3aW42NCkgeworJHJlYz0iJXJjeCI7CiskZnJhbWU9IiVyZHgiOworJGNvbnRleHQ9IiVyOCI7CiskZGlzcD0iJXI5IjsKKworJGNvZGUuPTw8X19fOworLmV4dGVybglfX2ltcF9SdGxWaXJ0dWFsVW53aW5kCisudHlwZQlzZV9oYW5kbGVyLFxAYWJpLW9tbmlwb3RlbnQKKy5hbGlnbgkxNgorc2VfaGFuZGxlcjoKKwlwdXNoCSVyc2kKKwlwdXNoCSVyZGkKKwlwdXNoCSVyYngKKwlwdXNoCSVyYnAKKwlwdXNoCSVyMTIKKwlwdXNoCSVyMTMKKwlwdXNoCSVyMTQKKwlwdXNoCSVyMTUKKwlwdXNoZnEKKwlzdWIJXCQ2NCwlcnNwCisKKwltb3YJMTIwKCRjb250ZXh0KSwlcmF4CSMgcHVsbCBjb250ZXh0LT5SYXgKKwltb3YJMjQ4KCRjb250ZXh0KSwlcmJ4CSMgcHVsbCBjb250ZXh0LT5SaXAKKworCWxlYQkuTHByb2xvZ3VlKCVyaXApLCVyMTAKKwljbXAJJXIxMCwlcmJ4CQkjIGNvbnRleHQtPlJpcDwuTHByb2xvZ3VlCisJamIJLkxpbl9wcm9sb2d1ZQorCisJbW92CTE1MigkY29udGV4dCksJXJheAkjIHB1bGwgY29udGV4dC0+UnNwCisKKwlsZWEJLkxlcGlsb2d1ZSglcmlwKSwlcjEwCisJY21wCSVyMTAsJXJieAkJIyBjb250ZXh0LT5SaXA+PS5MZXBpbG9ndWUKKwlqYWUJLkxpbl9wcm9sb2d1ZQorCisJbW92CTE2KiRTWiszKjgoJXJheCksJXJheAkjIHB1bGwgJF9yc3AKKwlsZWEJNDgoJXJheCksJXJheAorCisJbW92CS04KCVyYXgpLCVyYngKKwltb3YJLTE2KCVyYXgpLCVyYnAKKwltb3YJLTI0KCVyYXgpLCVyMTIKKwltb3YJLTMyKCVyYXgpLCVyMTMKKwltb3YJLTQwKCVyYXgpLCVyMTQKKwltb3YJLTQ4KCVyYXgpLCVyMTUKKwltb3YJJXJieCwxNDQoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SYngKKwltb3YJJXJicCwxNjAoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SYnAKKwltb3YJJXIxMiwyMTYoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SMTIKKwltb3YJJXIxMywyMjQoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SMTMKKwltb3YJJXIxNCwyMzIoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SMTQKKwltb3YJJXIxNSwyNDAoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SMTUKKworLkxpbl9wcm9sb2d1ZToKKwltb3YJOCglcmF4KSwlcmRpCisJbW92CTE2KCVyYXgpLCVyc2kKKwltb3YJJXJheCwxNTIoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5Sc3AKKwltb3YJJXJzaSwxNjgoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5Sc2kKKwltb3YJJXJkaSwxNzYoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SZGkKKworCW1vdgk0MCgkZGlzcCksJXJkaQkJIyBkaXNwLT5Db250ZXh0UmVjb3JkCisJbW92CSRjb250ZXh0LCVyc2kJCSMgY29udGV4dAorCW1vdglcJDE1NCwlZWN4CQkjIHNpemVvZihDT05URVhUKQorCS5sb25nCTB4YTU0OGYzZmMJCSMgY2xkOyByZXAgbW92c3EKKworCW1vdgkkZGlzcCwlcnNpCisJeG9yCSVyY3gsJXJjeAkJIyBhcmcxLCBVTldfRkxBR19OSEFORExFUgorCW1vdgk4KCVyc2kpLCVyZHgJCSMgYXJnMiwgZGlzcC0+SW1hZ2VCYXNlCisJbW92CTAoJXJzaSksJXI4CQkjIGFyZzMsIGRpc3AtPkNvbnRyb2xQYworCW1vdgkxNiglcnNpKSwlcjkJCSMgYXJnNCwgZGlzcC0+RnVuY3Rpb25FbnRyeQorCW1vdgk0MCglcnNpKSwlcjEwCQkjIGRpc3AtPkNvbnRleHRSZWNvcmQKKwlsZWEJNTYoJXJzaSksJXIxMQkJIyAmZGlzcC0+SGFuZGxlckRhdGEKKwlsZWEJMjQoJXJzaSksJXIxMgkJIyAmZGlzcC0+RXN0YWJsaXNoZXJGcmFtZQorCW1vdgklcjEwLDMyKCVyc3ApCQkjIGFyZzUKKwltb3YJJXIxMSw0MCglcnNwKQkJIyBhcmc2CisJbW92CSVyMTIsNDgoJXJzcCkJCSMgYXJnNworCW1vdgklcmN4LDU2KCVyc3ApCQkjIGFyZzgsIChOVUxMKQorCWNhbGwJKl9faW1wX1J0bFZpcnR1YWxVbndpbmQoJXJpcCkKKworCW1vdglcJDEsJWVheAkJIyBFeGNlcHRpb25Db250aW51ZVNlYXJjaAorCWFkZAlcJDY0LCVyc3AKKwlwb3BmcQorCXBvcAklcjE1CisJcG9wCSVyMTQKKwlwb3AJJXIxMworCXBvcAklcjEyCisJcG9wCSVyYnAKKwlwb3AJJXJieAorCXBvcAklcmRpCisJcG9wCSVyc2kKKwlyZXQKKy5zaXplCXNlX2hhbmRsZXIsLi1zZV9oYW5kbGVyCisKKy5zZWN0aW9uCS5wZGF0YQorLmFsaWduCTQKKwkucnZhCS5MU0VIX2JlZ2luXyRmdW5jCisJLnJ2YQkuTFNFSF9lbmRfJGZ1bmMKKwkucnZhCS5MU0VIX2luZm9fJGZ1bmMKKworLnNlY3Rpb24JLnhkYXRhCisuYWxpZ24JOAorLkxTRUhfaW5mb18kZnVuYzoKKwkuYnl0ZQk5LDAsMCwwCisJLnJ2YQlzZV9oYW5kbGVyCitfX18KK30KKwogJGNvZGUgPX4gcy9cYChbXlxgXSopXGAvZXZhbCAkMS9nZW07CiBwcmludCAkY29kZTsKIGNsb3NlIFNURE9VVDsKZGlmZiAtLWdpdCBhL2NyeXB0by9zaGEvc2hhLmggYi9jcnlwdG8vc2hhL3NoYS5oCmluZGV4IDQ3YTJjMjkuLjE2Y2FjZjkgMTAwNjQ0Ci0tLSBhL2NyeXB0by9zaGEvc2hhLmgKKysrIGIvY3J5cHRvL3NoYS9zaGEuaApAQCAtODEsNyArODEsNyBAQAogICogISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQogICovCiAKLSNpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX1dJTjE2KSB8fCBkZWZpbmVkKF9fTFAzMl9fKQorI2lmIGRlZmluZWQoX19MUDMyX18pCiAjZGVmaW5lIFNIQV9MT05HIHVuc2lnbmVkIGxvbmcKICNlbGlmIGRlZmluZWQoT1BFTlNTTF9TWVNfQ1JBWSkgfHwgZGVmaW5lZChfX0lMUDY0X18pCiAjZGVmaW5lIFNIQV9MT05HIHVuc2lnbmVkIGxvbmcKQEAgLTEwNiw5ICsxMDYsNiBAQAogCX0gU0hBX0NUWDsKIAogI2lmbmRlZiBPUEVOU1NMX05PX1NIQTAKLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLWludCBwcml2YXRlX1NIQV9Jbml0KFNIQV9DVFggKmMpOwotI2VuZGlmCiBpbnQgU0hBX0luaXQoU0hBX0NUWCAqYyk7CiBpbnQgU0hBX1VwZGF0ZShTSEFfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKIGludCBTSEFfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIFNIQV9DVFggKmMpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3NoYS9zaGExX29uZS5jIGIvY3J5cHRvL3NoYS9zaGExX29uZS5jCmluZGV4IDQ4MzExNzQuLjdjNjViNjAgMTAwNjQ0Ci0tLSBhL2NyeXB0by9zaGEvc2hhMV9vbmUuYworKysgYi9jcnlwdG8vc2hhL3NoYTFfb25lLmMKQEAgLTYxLDcgKzYxLDcgQEAKICNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgogI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CiAKLSNpZiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQTEpCisjaWZuZGVmIE9QRU5TU0xfTk9fU0hBMQogdW5zaWduZWQgY2hhciAqU0hBMShjb25zdCB1bnNpZ25lZCBjaGFyICpkLCBzaXplX3QgbiwgdW5zaWduZWQgY2hhciAqbWQpCiAJewogCVNIQV9DVFggYzsKZGlmZiAtLWdpdCBhL2NyeXB0by9zaGEvc2hhMWRnc3QuYyBiL2NyeXB0by9zaGEvc2hhMWRnc3QuYwppbmRleCBkMzFmMDc4Li41MGQxOTI1IDEwMDY0NAotLS0gYS9jcnlwdG8vc2hhL3NoYTFkZ3N0LmMKKysrIGIvY3J5cHRvL3NoYS9zaGExZGdzdC5jCkBAIC02MywxMCArNjMsNiBAQAogI2RlZmluZSBTSEFfMQogCiAjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgotI2lmZGVmIE9QRU5TU0xfRklQUwotI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotI2VuZGlmCi0KIAogY29uc3QgY2hhciBTSEExX3ZlcnNpb25bXT0iU0hBMSIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOwogCmRpZmYgLS1naXQgYS9jcnlwdG8vc2hhL3NoYTFzLmNwcCBiL2NyeXB0by9zaGEvc2hhMXMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjIzZDFlLi4wMDAwMDAwCi0tLSBhL2NyeXB0by9zaGEvc2hhMXMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLy8KLS8vIGdldHRzYy5pbmwKLS8vCi0vLyBnaXZlcyBhY2Nlc3MgdG8gdGhlIFBlbnRpdW0ncyAoc2VjcmV0KSBjeWNsZSBjb3VudGVyCi0vLwotLy8gVGhpcyBzb2Z0d2FyZSB3YXMgd3JpdHRlbiBieSBMZW9uYXJkIEphbmtlIChqYW5rZUB1bml4Zy51YmMuY2EpCi0vLyBpbiAxOTk2LTcgYW5kIGlzIGVudGVyZWQsIGJ5IGhpbSwgaW50byB0aGUgcHVibGljIGRvbWFpbi4KLQotI2lmIGRlZmluZWQoX19XQVRDT01DX18pCi12b2lkIEdldFRTQyh1bnNpZ25lZCBsb25nJik7Ci0jcHJhZ21hIGF1eCBHZXRUU0MgPSAweDBmIDB4MzEgIm1vdiBbZWRpXSwgZWF4IiBwYXJtIFtlZGldIG1vZGlmeSBbZWR4IGVheF07Ci0jZWxpZiBkZWZpbmVkKF9fR05VQ19fKQotaW5saW5lCi12b2lkIEdldFRTQyh1bnNpZ25lZCBsb25nJiB0c2MpCi17Ci0gIGFzbSB2b2xhdGlsZSgiLmJ5dGUgMTUsIDQ5XG5cdCIKLQkgICAgICAgOiAiPWVheCIgKHRzYykKLQkgICAgICAgOgotCSAgICAgICA6ICIlZWR4IiwgIiVlYXgiKTsKLX0KLSNlbGlmIGRlZmluZWQoX01TQ19WRVIpCi1pbmxpbmUKLXZvaWQgR2V0VFNDKHVuc2lnbmVkIGxvbmcmIHRzYykKLXsKLSAgdW5zaWduZWQgbG9uZyBhOwotICBfX2FzbSBfZW1pdCAwZmgKLSAgX19hc20gX2VtaXQgMzFoCi0gIF9fYXNtIG1vdiBhLCBlYXg7Ci0gIHRzYz1hOwotfQotI2VuZGlmICAgICAgCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+Ci0KLSNkZWZpbmUgc2hhMV9ibG9ja194ODYgc2hhMV9ibG9ja19hc21fZGF0YV9vcmRlcgotZXh0ZXJuICJDIiB7Ci12b2lkIHNoYTFfYmxvY2tfeDg2KFNIQV9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqYnVmZmVyLGludCBudW0pOwotfQotCi12b2lkIG1haW4oaW50IGFyZ2MsY2hhciAqYXJndltdKQotCXsKLQl1bnNpZ25lZCBjaGFyIGJ1ZmZlcls2NCoyNTZdOwotCVNIQV9DVFggY3R4OwotCXVuc2lnbmVkIGxvbmcgczEsczIsZTEsZTI7Ci0JdW5zaWduZWQgY2hhciBrWzE2XTsKLQl1bnNpZ25lZCBsb25nIGRhdGFbMl07Ci0JdW5zaWduZWQgY2hhciBpdls4XTsKLQlpbnQgaSxudW09MCxudW1tOwotCWludCBqPTA7Ci0KLQlpZiAoYXJnYyA+PSAyKQotCQludW09YXRvaShhcmd2WzFdKTsKLQotCWlmIChudW0gPT0gMCkgbnVtPTE2OwotCWlmIChudW0gPiAyNTApIG51bT0xNjsKLQludW1tPW51bSsyOwotI2lmIDAKLQludW0qPTY0OwotCW51bW0qPTY0OwotI2VuZGlmCi0KLQlmb3IgKGo9MDsgajw2OyBqKyspCi0JCXsKLQkJZm9yIChpPTA7IGk8MTA7IGkrKykgLyoqLwotCQkJewotCQkJc2hhMV9ibG9ja194ODYoJmN0eCxidWZmZXIsbnVtbSk7Ci0JCQlHZXRUU0MoczEpOwotCQkJc2hhMV9ibG9ja194ODYoJmN0eCxidWZmZXIsbnVtbSk7Ci0JCQlHZXRUU0MoZTEpOwotCQkJR2V0VFNDKHMyKTsKLQkJCXNoYTFfYmxvY2tfeDg2KCZjdHgsYnVmZmVyLG51bSk7Ci0JCQlHZXRUU0MoZTIpOwotCQkJc2hhMV9ibG9ja194ODYoJmN0eCxidWZmZXIsbnVtKTsKLQkJCX0KLQotCQlwcmludGYoInNoYTEgKCVkIGJ5dGVzKSAlZCAlZCAoJS4yZilcbiIsbnVtKjY0LAotCQkJZTEtczEsZTItczIsKGRvdWJsZSkoKGUxLXMxKS0oZTItczIpKS8yKTsKLQkJfQotCX0KLQpkaWZmIC0tZ2l0IGEvY3J5cHRvL3NoYS9zaGEyNTYuYyBiL2NyeXB0by9zaGEvc2hhMjU2LmMKaW5kZXggMzI1NmE4My4uODk1MmQ4NyAxMDA2NDQKLS0tIGEvY3J5cHRvL3NoYS9zaGEyNTYuYworKysgYi9jcnlwdG8vc2hhL3NoYTI1Ni5jCkBAIC0xMiwzOSArMTIsMjkgQEAKIAogI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLSNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSNlbmRpZgotCiAjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgogCiBjb25zdCBjaGFyIFNIQTI1Nl92ZXJzaW9uW109IlNIQS0yNTYiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKIAogaW50IFNIQTIyNF9Jbml0IChTSEEyNTZfQ1RYICpjKQogCXsKLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLQlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0jZW5kaWYKKwltZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsKIAljLT5oWzBdPTB4YzEwNTllZDhVTDsJYy0+aFsxXT0weDM2N2NkNTA3VUw7CiAJYy0+aFsyXT0weDMwNzBkZDE3VUw7CWMtPmhbM109MHhmNzBlNTkzOVVMOwogCWMtPmhbNF09MHhmZmMwMGIzMVVMOwljLT5oWzVdPTB4Njg1ODE1MTFVTDsKIAljLT5oWzZdPTB4NjRmOThmYTdVTDsJYy0+aFs3XT0weGJlZmE0ZmE0VUw7Ci0JYy0+Tmw9MDsJYy0+Tmg9MDsKLQljLT5udW09MDsJYy0+bWRfbGVuPVNIQTIyNF9ESUdFU1RfTEVOR1RIOworCWMtPm1kX2xlbj1TSEEyMjRfRElHRVNUX0xFTkdUSDsKIAlyZXR1cm4gMTsKIAl9CiAKIGludCBTSEEyNTZfSW5pdCAoU0hBMjU2X0NUWCAqYykKIAl7Ci0jaWZkZWYgT1BFTlNTTF9GSVBTCi0JRklQU19zZWxmdGVzdF9jaGVjaygpOwotI2VuZGlmCisJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7CiAJYy0+aFswXT0weDZhMDllNjY3VUw7CWMtPmhbMV09MHhiYjY3YWU4NVVMOwogCWMtPmhbMl09MHgzYzZlZjM3MlVMOwljLT5oWzNdPTB4YTU0ZmY1M2FVTDsKIAljLT5oWzRdPTB4NTEwZTUyN2ZVTDsJYy0+aFs1XT0weDliMDU2ODhjVUw7CiAJYy0+aFs2XT0weDFmODNkOWFiVUw7CWMtPmhbN109MHg1YmUwY2QxOVVMOwotCWMtPk5sPTA7CWMtPk5oPTA7Ci0JYy0+bnVtPTA7CWMtPm1kX2xlbj1TSEEyNTZfRElHRVNUX0xFTkdUSDsKKwljLT5tZF9sZW49U0hBMjU2X0RJR0VTVF9MRU5HVEg7CiAJcmV0dXJuIDE7CiAJfQogCkBAIC05NCwyMSArODQsMjEgQEAKICAqLwogI2RlZmluZQlIQVNIX01BS0VfU1RSSU5HKGMscykJZG8gewlcCiAJdW5zaWduZWQgbG9uZyBsbDsJCVwKLQl1bnNpZ25lZCBpbnQgIHhuOwkJXAorCXVuc2lnbmVkIGludCAgbm47CQlcCiAJc3dpdGNoICgoYyktPm1kX2xlbikJCVwKIAl7ICAgY2FzZSBTSEEyMjRfRElHRVNUX0xFTkdUSDoJXAotCQlmb3IgKHhuPTA7eG48U0hBMjI0X0RJR0VTVF9MRU5HVEgvNDt4bisrKQlcCi0JCXsgICBsbD0oYyktPmhbeG5dOyBIT1NUX2wyYyhsbCwocykpOyAgIH0JXAorCQlmb3IgKG5uPTA7bm48U0hBMjI0X0RJR0VTVF9MRU5HVEgvNDtubisrKQlcCisJCXsgICBsbD0oYyktPmhbbm5dOyBIT1NUX2wyYyhsbCwocykpOyAgIH0JXAogCQlicmVhazsJCQlcCiAJICAgIGNhc2UgU0hBMjU2X0RJR0VTVF9MRU5HVEg6CVwKLQkJZm9yICh4bj0wO3huPFNIQTI1Nl9ESUdFU1RfTEVOR1RILzQ7eG4rKykJXAotCQl7ICAgbGw9KGMpLT5oW3huXTsgSE9TVF9sMmMobGwsKHMpKTsgICB9CVwKKwkJZm9yIChubj0wO25uPFNIQTI1Nl9ESUdFU1RfTEVOR1RILzQ7bm4rKykJXAorCQl7ICAgbGw9KGMpLT5oW25uXTsgSE9TVF9sMmMobGwsKHMpKTsgICB9CVwKIAkJYnJlYWs7CQkJXAogCSAgICBkZWZhdWx0OgkJCVwKIAkJaWYgKChjKS0+bWRfbGVuID4gU0hBMjU2X0RJR0VTVF9MRU5HVEgpCVwKIAkJICAgIHJldHVybiAwOwkJCQlcCi0JCWZvciAoeG49MDt4bjwoYyktPm1kX2xlbi80O3huKyspCQlcCi0JCXsgICBsbD0oYyktPmhbeG5dOyBIT1NUX2wyYyhsbCwocykpOyAgIH0JXAorCQlmb3IgKG5uPTA7bm48KGMpLT5tZF9sZW4vNDtubisrKQkJXAorCQl7ICAgbGw9KGMpLT5oW25uXTsgSE9TVF9sMmMobGwsKHMpKTsgICB9CVwKIAkJYnJlYWs7CQkJXAogCX0JCQkJXAogCX0gd2hpbGUgKDApCmRpZmYgLS1naXQgYS9jcnlwdG8vc2hhL3NoYTUxMi5jIGIvY3J5cHRvL3NoYS9zaGE1MTIuYwppbmRleCA5ZTkxYmNhLi5jYmMwZTU4IDEwMDY0NAotLS0gYS9jcnlwdG8vc2hhL3NoYTUxMi5jCisrKyBiL2NyeXB0by9zaGEvc2hhNTEyLmMKQEAgLTUsMTAgKzUsNiBAQAogICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqLwogI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLSNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSNlbmRpZgotCiAjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEEpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBNTEyKQogLyoKICAqIElNUExFTUVOVEFUSU9OIE5PVEVTLgpAQCAtNjUsOSArNjEsMTkgQEAKIAogaW50IFNIQTM4NF9Jbml0IChTSEE1MTJfQ1RYICpjKQogCXsKLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLQlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0jZW5kaWYKKyNpZiBkZWZpbmVkKFNIQTUxMl9BU00pICYmIChkZWZpbmVkKF9fYXJtX18pIHx8IGRlZmluZWQoX19hcm0pKQorCS8qIG1haW50YWluIGR3b3JkIG9yZGVyIHJlcXVpcmVkIGJ5IGFzc2VtYmxlciBtb2R1bGUgKi8KKwl1bnNpZ25lZCBpbnQgKmggPSAodW5zaWduZWQgaW50ICopYy0+aDsKKworCWhbMF0gID0gMHhjYmJiOWQ1ZDsgaFsxXSAgPSAweGMxMDU5ZWQ4OworCWhbMl0gID0gMHg2MjlhMjkyYTsgaFszXSAgPSAweDM2N2NkNTA3OworCWhbNF0gID0gMHg5MTU5MDE1YTsgaFs1XSAgPSAweDMwNzBkZDE3OworCWhbNl0gID0gMHgxNTJmZWNkODsgaFs3XSAgPSAweGY3MGU1OTM5OworCWhbOF0gID0gMHg2NzMzMjY2NzsgaFs5XSAgPSAweGZmYzAwYjMxOworCWhbMTBdID0gMHg4ZWI0NGE4NzsgaFsxMV0gPSAweDY4NTgxNTExOworCWhbMTJdID0gMHhkYjBjMmUwZDsgaFsxM10gPSAweDY0Zjk4ZmE3OworCWhbMTRdID0gMHg0N2I1NDgxZDsgaFsxNV0gPSAweGJlZmE0ZmE0OworI2Vsc2UKIAljLT5oWzBdPVU2NCgweGNiYmI5ZDVkYzEwNTllZDgpOwogCWMtPmhbMV09VTY0KDB4NjI5YTI5MmEzNjdjZDUwNyk7CiAJYy0+aFsyXT1VNjQoMHg5MTU5MDE1YTMwNzBkZDE3KTsKQEAgLTc2LDYgKzgyLDcgQEAKIAljLT5oWzVdPVU2NCgweDhlYjQ0YTg3Njg1ODE1MTEpOwogCWMtPmhbNl09VTY0KDB4ZGIwYzJlMGQ2NGY5OGZhNyk7CiAJYy0+aFs3XT1VNjQoMHg0N2I1NDgxZGJlZmE0ZmE0KTsKKyNlbmRpZgogICAgICAgICBjLT5ObD0wOyAgICAgICAgYy0+Tmg9MDsKICAgICAgICAgYy0+bnVtPTA7ICAgICAgIGMtPm1kX2xlbj1TSEEzODRfRElHRVNUX0xFTkdUSDsKICAgICAgICAgcmV0dXJuIDE7CkBAIC04Myw5ICs5MCwxOSBAQAogCiBpbnQgU0hBNTEyX0luaXQgKFNIQTUxMl9DVFggKmMpCiAJewotI2lmZGVmIE9QRU5TU0xfRklQUwotCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSNlbmRpZgorI2lmIGRlZmluZWQoU0hBNTEyX0FTTSkgJiYgKGRlZmluZWQoX19hcm1fXykgfHwgZGVmaW5lZChfX2FybSkpCisJLyogbWFpbnRhaW4gZHdvcmQgb3JkZXIgcmVxdWlyZWQgYnkgYXNzZW1ibGVyIG1vZHVsZSAqLworCXVuc2lnbmVkIGludCAqaCA9ICh1bnNpZ25lZCBpbnQgKiljLT5oOworCisJaFswXSAgPSAweDZhMDllNjY3OyBoWzFdICA9IDB4ZjNiY2M5MDg7CisJaFsyXSAgPSAweGJiNjdhZTg1OyBoWzNdICA9IDB4ODRjYWE3M2I7CisJaFs0XSAgPSAweDNjNmVmMzcyOyBoWzVdICA9IDB4ZmU5NGY4MmI7CisJaFs2XSAgPSAweGE1NGZmNTNhOyBoWzddICA9IDB4NWYxZDM2ZjE7CisJaFs4XSAgPSAweDUxMGU1MjdmOyBoWzldICA9IDB4YWRlNjgyZDE7CisJaFsxMF0gPSAweDliMDU2ODhjOyBoWzExXSA9IDB4MmIzZTZjMWY7CisJaFsxMl0gPSAweDFmODNkOWFiOyBoWzEzXSA9IDB4ZmI0MWJkNmI7CisJaFsxNF0gPSAweDViZTBjZDE5OyBoWzE1XSA9IDB4MTM3ZTIxNzk7CisjZWxzZQogCWMtPmhbMF09VTY0KDB4NmEwOWU2NjdmM2JjYzkwOCk7CiAJYy0+aFsxXT1VNjQoMHhiYjY3YWU4NTg0Y2FhNzNiKTsKIAljLT5oWzJdPVU2NCgweDNjNmVmMzcyZmU5NGY4MmIpOwpAQCAtOTQsNiArMTExLDcgQEAKIAljLT5oWzVdPVU2NCgweDliMDU2ODhjMmIzZTZjMWYpOwogCWMtPmhbNl09VTY0KDB4MWY4M2Q5YWJmYjQxYmQ2Yik7CiAJYy0+aFs3XT1VNjQoMHg1YmUwY2QxOTEzN2UyMTc5KTsKKyNlbmRpZgogICAgICAgICBjLT5ObD0wOyAgICAgICAgYy0+Tmg9MDsKICAgICAgICAgYy0+bnVtPTA7ICAgICAgIGMtPm1kX2xlbj1TSEE1MTJfRElHRVNUX0xFTkdUSDsKICAgICAgICAgcmV0dXJuIDE7CkBAIC0xNDIsNiArMTYwLDI0IEBACiAKIAlpZiAobWQ9PTApIHJldHVybiAwOwogCisjaWYgZGVmaW5lZChTSEE1MTJfQVNNKSAmJiAoZGVmaW5lZChfX2FybV9fKSB8fCBkZWZpbmVkKF9fYXJtKSkKKwkvKiByZWNhbGwgYXNzZW1ibGVyIGR3b3JkIG9yZGVyLi4uICovCisJbiA9IGMtPm1kX2xlbjsKKwlpZiAobiA9PSBTSEEzODRfRElHRVNUX0xFTkdUSCB8fCBuID09IFNIQTUxMl9ESUdFU1RfTEVOR1RIKQorCQl7CisJCXVuc2lnbmVkIGludCAqaCA9ICh1bnNpZ25lZCBpbnQgKiljLT5oLCB0OworCisJCWZvciAobi89NDtuO24tLSkKKwkJCXsKKwkJCXQgPSAqKGgrKyk7CisJCQkqKG1kKyspID0gKHVuc2lnbmVkIGNoYXIpKHQ+PjI0KTsKKwkJCSoobWQrKykgPSAodW5zaWduZWQgY2hhcikodD4+MTYpOworCQkJKihtZCsrKSA9ICh1bnNpZ25lZCBjaGFyKSh0Pj44KTsKKwkJCSoobWQrKykgPSAodW5zaWduZWQgY2hhcikodCk7CisJCQl9CisJCX0KKwllbHNlCXJldHVybiAwOworI2Vsc2UKIAlzd2l0Y2ggKGMtPm1kX2xlbikKIAkJewogCQkvKiBMZXQgY29tcGlsZXIgZGVjaWRlIGlmIGl0J3MgYXBwcm9wcmlhdGUgdG8gdW5yb2xsLi4uICovCkBAIC0xNzgsNyArMjE0LDcgQEAKIAkJLyogLi4uIGFzIHdlbGwgYXMgbWFrZSBzdXJlIG1kX2xlbiBpcyBub3QgYWJ1c2VkLiAqLwogCQlkZWZhdWx0OglyZXR1cm4gMDsKIAkJfQotCisjZW5kaWYKIAlyZXR1cm4gMTsKIAl9CiAKQEAgLTIwNCw3ICsyNDAsNyBAQAogCiAJCWlmIChsZW4gPCBuKQogCQkJewotCQkJbWVtY3B5IChwK2MtPm51bSxkYXRhLGxlbiksIGMtPm51bSArPSBsZW47CisJCQltZW1jcHkgKHArYy0+bnVtLGRhdGEsbGVuKSwgYy0+bnVtICs9ICh1bnNpZ25lZCBpbnQpbGVuOwogCQkJcmV0dXJuIDE7CiAJCQl9CiAJCWVsc2UJewpAQCAtMzE0LDcgKzM1MCw3IEBACiAjaWZuZGVmIFBFREFOVElDCiAjIGlmIGRlZmluZWQoX19HTlVDX18pICYmIF9fR05VQ19fPj0yICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fQVNNKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX0lOTElORV9BU00pCiAjICBpZiBkZWZpbmVkKF9feDg2XzY0KSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCi0jICAgZGVmaW5lIFJPVFIoYSxuKQkoeyB1bnNpZ25lZCBsb25nIHJldDsJCVwKKyMgICBkZWZpbmUgUk9UUihhLG4pCSh7IFNIQV9MT05HNjQgcmV0OwkJXAogCQkJCWFzbSAoInJvcnEgJTEsJTAiCVwKIAkJCQk6ICI9ciIocmV0KQkJXAogCQkJCTogIkoiKG4pLCIwIihhKQkJXApAQCAtMzM3LDIwICszNzMsMjEgQEAKIAkJCQkoKFNIQV9MT05HNjQpaGkpPDwzMnxsbzsJfSkKICMgICBlbHNlCiAjICAgIGRlZmluZSBQVUxMNjQoeCkgKHsgY29uc3QgdW5zaWduZWQgaW50ICpwPShjb25zdCB1bnNpZ25lZCBpbnQgKikoJih4KSk7XAotCQkJIHVuc2lnbmVkIGludCBoaT1wWzBdLGxvPXBbMV07CQkJXAorCQkJIHVuc2lnbmVkIGludCBoaT1wWzBdLGxvPXBbMV07CQlcCiAJCQkJYXNtICgiYnN3YXBsICUwOyBic3dhcGwgJTE7IglcCiAJCQkJOiAiPXIiKGxvKSwiPXIiKGhpKQkJXAogCQkJCTogIjAiKGxvKSwiMSIoaGkpKTsJCVwKIAkJCQkoKFNIQV9MT05HNjQpaGkpPDwzMnxsbzsJfSkKICMgICBlbmRpZgogIyAgZWxpZiAoZGVmaW5lZChfQVJDSF9QUEMpICYmIGRlZmluZWQoX182NEJJVF9fKSkgfHwgZGVmaW5lZChfQVJDSF9QUEM2NCkKLSMgICBkZWZpbmUgUk9UUihhLG4pCSh7IHVuc2lnbmVkIGxvbmcgcmV0OwkJXAorIyAgIGRlZmluZSBST1RSKGEsbikJKHsgU0hBX0xPTkc2NCByZXQ7CQlcCiAJCQkJYXNtICgicm90cmRpICUwLCUxLCUyIglcCiAJCQkJOiAiPXIiKHJldCkJCVwKIAkJCQk6ICJyIihhKSwiSyIobikpOyByZXQ7CX0pCiAjICBlbmRpZgogIyBlbGlmIGRlZmluZWQoX01TQ19WRVIpCiAjICBpZiBkZWZpbmVkKF9XSU42NCkJLyogYXBwbGllcyB0byBib3RoIElBLTY0IGFuZCBBTUQ2NCAqLworIyAgIHByYWdtYSBpbnRyaW5zaWMoX3JvdHI2NCkKICMgICBkZWZpbmUgUk9UUihhLG4pCV9yb3RyNjQoKGEpLG4pCiAjICBlbmRpZgogIyAgaWYgZGVmaW5lZChfTV9JWDg2KSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX0FTTSkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19JTkxJTkVfQVNNKQpAQCAtMzk4LDE1ICs0MzUsNjYgQEAKICNkZWZpbmUgQ2goeCx5LHopCSgoKHgpICYgKHkpKSBeICgofih4KSkgJiAoeikpKQogI2RlZmluZSBNYWooeCx5LHopCSgoKHgpICYgKHkpKSBeICgoeCkgJiAoeikpIF4gKCh5KSAmICh6KSkpCiAKLSNpZiBkZWZpbmVkKE9QRU5TU0xfSUEzMl9TU0UyKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX0FTTSkgJiYgIWRlZmluZWQoSTM4Nl9PTkxZKQotI2RlZmluZQlHT19GT1JfU1NFMihjdHgsaW4sbnVtKQkJZG8gewkJXAotCXZvaWQJc2hhNTEyX2Jsb2NrX3NzZTIodm9pZCAqLGNvbnN0IHZvaWQgKixzaXplX3QpOwlcCi0JaWYgKCEoT1BFTlNTTF9pYTMyY2FwX1AgJiAoMTw8MjYpKSkgYnJlYWs7CVwKLQlzaGE1MTJfYmxvY2tfc3NlMihjdHgtPmgsaW4sbnVtKTsgcmV0dXJuOwlcCi0JCQkJCX0gd2hpbGUgKDApCi0jZW5kaWYKIAotI2lmZGVmIE9QRU5TU0xfU01BTExfRk9PVFBSSU5UCisjaWYgZGVmaW5lZChfX2kzODYpIHx8IGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX01fSVg4NikKKy8qCisgKiBUaGlzIGNvZGUgc2hvdWxkIGdpdmUgYmV0dGVyIHJlc3VsdHMgb24gMzItYml0IENQVSB3aXRoIGxlc3MgdGhhbgorICogfjI0IHJlZ2lzdGVycywgYm90aCBzaXplIGFuZCBwZXJmb3JtYW5jZSB3aXNlLi4uCisgKi8KK3N0YXRpYyB2b2lkIHNoYTUxMl9ibG9ja19kYXRhX29yZGVyIChTSEE1MTJfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmluLCBzaXplX3QgbnVtKQorCXsKKwljb25zdCBTSEFfTE9ORzY0ICpXPWluOworCVNIQV9MT05HNjQJQSxFLFQ7CisJU0hBX0xPTkc2NAlYWzkrODBdLCpGOworCWludCBpOworCisJCQl3aGlsZSAobnVtLS0pIHsKKworCUYgICAgPSBYKzgwOworCUEgICAgPSBjdHgtPmhbMF07CUZbMV0gPSBjdHgtPmhbMV07CisJRlsyXSA9IGN0eC0+aFsyXTsJRlszXSA9IGN0eC0+aFszXTsKKwlFICAgID0gY3R4LT5oWzRdOwlGWzVdID0gY3R4LT5oWzVdOworCUZbNl0gPSBjdHgtPmhbNl07CUZbN10gPSBjdHgtPmhbN107CisKKwlmb3IgKGk9MDtpPDE2O2krKyxGLS0pCisJCXsKKyNpZmRlZiBCX0VORElBTgorCQlUID0gV1tpXTsKKyNlbHNlCisJCVQgPSBQVUxMNjQoV1tpXSk7CisjZW5kaWYKKwkJRlswXSA9IEE7CisJCUZbNF0gPSBFOworCQlGWzhdID0gVDsKKwkJVCAgICs9IEZbN10gKyBTaWdtYTEoRSkgKyBDaChFLEZbNV0sRls2XSkgKyBLNTEyW2ldOworCQlFICAgID0gRlszXSArIFQ7CisJCUEgICAgPSBUICsgU2lnbWEwKEEpICsgTWFqKEEsRlsxXSxGWzJdKTsKKwkJfQorCisJZm9yICg7aTw4MDtpKyssRi0tKQorCQl7CisJCVQgICAgPSBzaWdtYTAoRls4KzE2LTFdKTsKKwkJVCAgICs9IHNpZ21hMShGWzgrMTYtMTRdKTsKKwkJVCAgICs9IEZbOCsxNl0gKyBGWzgrMTYtOV07CisKKwkJRlswXSA9IEE7CisJCUZbNF0gPSBFOworCQlGWzhdID0gVDsKKwkJVCAgICs9IEZbN10gKyBTaWdtYTEoRSkgKyBDaChFLEZbNV0sRls2XSkgKyBLNTEyW2ldOworCQlFICAgID0gRlszXSArIFQ7CisJCUEgICAgPSBUICsgU2lnbWEwKEEpICsgTWFqKEEsRlsxXSxGWzJdKTsKKwkJfQorCisJY3R4LT5oWzBdICs9IEE7CQljdHgtPmhbMV0gKz0gRlsxXTsKKwljdHgtPmhbMl0gKz0gRlsyXTsJY3R4LT5oWzNdICs9IEZbM107CisJY3R4LT5oWzRdICs9IEU7CQljdHgtPmhbNV0gKz0gRls1XTsKKwljdHgtPmhbNl0gKz0gRls2XTsJY3R4LT5oWzddICs9IEZbN107CisKKwkJCVcrPVNIQV9MQkxPQ0s7CisJCQl9CisJfQorCisjZWxpZiBkZWZpbmVkKE9QRU5TU0xfU01BTExfRk9PVFBSSU5UKQogCiBzdGF0aWMgdm9pZCBzaGE1MTJfYmxvY2tfZGF0YV9vcmRlciAoU0hBNTEyX0NUWCAqY3R4LCBjb25zdCB2b2lkICppbiwgc2l6ZV90IG51bSkKIAl7CkBAIC00MTUsMTAgKzUwMyw2IEBACiAJU0hBX0xPTkc2NAlYWzE2XTsKIAlpbnQgaTsKIAotI2lmZGVmIEdPX0ZPUl9TU0UyCi0JR09fRk9SX1NTRTIoY3R4LGluLG51bSk7Ci0jZW5kaWYKLQogCQkJd2hpbGUgKG51bS0tKSB7CiAKIAlhID0gY3R4LT5oWzBdOwliID0gY3R4LT5oWzFdOwljID0gY3R4LT5oWzJdOwlkID0gY3R4LT5oWzNdOwpAQCAtNDYzLDExICs1NDcsMTEgQEAKIAloID0gU2lnbWEwKGEpICsgTWFqKGEsYixjKTsJCQlcCiAJZCArPSBUMTsJaCArPSBUMTsJCX0gd2hpbGUgKDApCiAKLSNkZWZpbmUJUk9VTkRfMTZfODAoaSxhLGIsYyxkLGUsZixnLGgsWCkJZG8gewlcCi0JczAgPSBYWyhpKzEpJjB4MGZdOwlzMCA9IHNpZ21hMChzMCk7CVwKLQlzMSA9IFhbKGkrMTQpJjB4MGZdOwlzMSA9IHNpZ21hMShzMSk7CVwKLQlUMSA9IFhbKGkpJjB4MGZdICs9IHMwICsgczEgKyBYWyhpKzkpJjB4MGZdOwlcCi0JUk9VTkRfMDBfMTUoaSxhLGIsYyxkLGUsZixnLGgpOwkJfSB3aGlsZSAoMCkKKyNkZWZpbmUJUk9VTkRfMTZfODAoaSxqLGEsYixjLGQsZSxmLGcsaCxYKQlkbyB7CVwKKwlzMCA9IFhbKGorMSkmMHgwZl07CXMwID0gc2lnbWEwKHMwKTsJXAorCXMxID0gWFsoaisxNCkmMHgwZl07CXMxID0gc2lnbWExKHMxKTsJXAorCVQxID0gWFsoaikmMHgwZl0gKz0gczAgKyBzMSArIFhbKGorOSkmMHgwZl07CVwKKwlST1VORF8wMF8xNShpK2osYSxiLGMsZCxlLGYsZyxoKTsJCX0gd2hpbGUgKDApCiAKIHN0YXRpYyB2b2lkIHNoYTUxMl9ibG9ja19kYXRhX29yZGVyIChTSEE1MTJfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmluLCBzaXplX3QgbnVtKQogCXsKQEAgLTQ3NiwxMCArNTYwLDYgQEAKIAlTSEFfTE9ORzY0CVhbMTZdOwogCWludCBpOwogCi0jaWZkZWYgR09fRk9SX1NTRTIKLQlHT19GT1JfU1NFMihjdHgsaW4sbnVtKTsKLSNlbmRpZgotCiAJCQl3aGlsZSAobnVtLS0pIHsKIAogCWEgPSBjdHgtPmhbMF07CWIgPSBjdHgtPmhbMV07CWMgPSBjdHgtPmhbMl07CWQgPSBjdHgtPmhbM107CkBAIC01MjEsMTYgKzYwMSwyNCBAQAogCVQxID0gWFsxNV0gPSBQVUxMNjQoV1sxNV0pOwlST1VORF8wMF8xNSgxNSxiLGMsZCxlLGYsZyxoLGEpOwogI2VuZGlmCiAKLQlmb3IgKGk9MTY7aTw4MDtpKz04KQorCWZvciAoaT0xNjtpPDgwO2krPTE2KQogCQl7Ci0JCVJPVU5EXzE2XzgwKGkrMCxhLGIsYyxkLGUsZixnLGgsWCk7Ci0JCVJPVU5EXzE2XzgwKGkrMSxoLGEsYixjLGQsZSxmLGcsWCk7Ci0JCVJPVU5EXzE2XzgwKGkrMixnLGgsYSxiLGMsZCxlLGYsWCk7Ci0JCVJPVU5EXzE2XzgwKGkrMyxmLGcsaCxhLGIsYyxkLGUsWCk7Ci0JCVJPVU5EXzE2XzgwKGkrNCxlLGYsZyxoLGEsYixjLGQsWCk7Ci0JCVJPVU5EXzE2XzgwKGkrNSxkLGUsZixnLGgsYSxiLGMsWCk7Ci0JCVJPVU5EXzE2XzgwKGkrNixjLGQsZSxmLGcsaCxhLGIsWCk7Ci0JCVJPVU5EXzE2XzgwKGkrNyxiLGMsZCxlLGYsZyxoLGEsWCk7CisJCVJPVU5EXzE2XzgwKGksIDAsYSxiLGMsZCxlLGYsZyxoLFgpOworCQlST1VORF8xNl84MChpLCAxLGgsYSxiLGMsZCxlLGYsZyxYKTsKKwkJUk9VTkRfMTZfODAoaSwgMixnLGgsYSxiLGMsZCxlLGYsWCk7CisJCVJPVU5EXzE2XzgwKGksIDMsZixnLGgsYSxiLGMsZCxlLFgpOworCQlST1VORF8xNl84MChpLCA0LGUsZixnLGgsYSxiLGMsZCxYKTsKKwkJUk9VTkRfMTZfODAoaSwgNSxkLGUsZixnLGgsYSxiLGMsWCk7CisJCVJPVU5EXzE2XzgwKGksIDYsYyxkLGUsZixnLGgsYSxiLFgpOworCQlST1VORF8xNl84MChpLCA3LGIsYyxkLGUsZixnLGgsYSxYKTsKKwkJUk9VTkRfMTZfODAoaSwgOCxhLGIsYyxkLGUsZixnLGgsWCk7CisJCVJPVU5EXzE2XzgwKGksIDksaCxhLGIsYyxkLGUsZixnLFgpOworCQlST1VORF8xNl84MChpLDEwLGcsaCxhLGIsYyxkLGUsZixYKTsKKwkJUk9VTkRfMTZfODAoaSwxMSxmLGcsaCxhLGIsYyxkLGUsWCk7CisJCVJPVU5EXzE2XzgwKGksMTIsZSxmLGcsaCxhLGIsYyxkLFgpOworCQlST1VORF8xNl84MChpLDEzLGQsZSxmLGcsaCxhLGIsYyxYKTsKKwkJUk9VTkRfMTZfODAoaSwxNCxjLGQsZSxmLGcsaCxhLGIsWCk7CisJCVJPVU5EXzE2XzgwKGksMTUsYixjLGQsZSxmLGcsaCxhLFgpOwogCQl9CiAKIAljdHgtPmhbMF0gKz0gYTsJY3R4LT5oWzFdICs9IGI7CWN0eC0+aFsyXSArPSBjOwljdHgtPmhbM10gKz0gZDsKQEAgLTU0NCwxMyArNjMyLDEwIEBACiAKICNlbmRpZiAvKiBTSEE1MTJfQVNNICovCiAKLSNlbHNlIC8qIE9QRU5TU0xfTk9fU0hBNTEyICovCisjZWxzZSAvKiAhT1BFTlNTTF9OT19TSEE1MTIgKi8KIAotLyogU2Vuc2l0aXZlIGNvbXBpbGVycyAoIkNvbXBhcSBDIFY2LjQtMDA1IG9uIE9wZW5WTVMgVkFYIFY3LjMiLCBmb3IKLSAqIGV4YW1wbGUpIGRpc2xpa2UgYSBzdGF0ZW1lbnQtZnJlZSBmaWxlLCBjb21wbGFpbmluZzoKLSAqICIlQ0MtVy1FTVBUWUZJTEUsIFNvdXJjZSBmaWxlIGRvZXMgbm90IGNvbnRhaW4gYW55IGRlY2xhcmF0aW9ucy4iCi0gKi8KKyNpZiBkZWZpbmVkKFBFREFOVElDKSB8fCBkZWZpbmVkKF9fREVDQykgfHwgZGVmaW5lZChPUEVOU1NMX1NZU19NQUNPU1gpCitzdGF0aWMgdm9pZCAqZHVtbXk9JmR1bW15OworI2VuZGlmCiAKLWludCBzaGE1MTJfZHVtbXkoKTsKLQotI2VuZGlmIC8qIE9QRU5TU0xfTk9fU0hBNTEyICovCisjZW5kaWYgLyogIU9QRU5TU0xfTk9fU0hBNTEyICovCmRpZmYgLS1naXQgYS9jcnlwdG8vc2hhL3NoYV9kZ3N0LmMgYi9jcnlwdG8vc2hhL3NoYV9kZ3N0LmMKaW5kZXggNTk4ZjRkNy4uNzBlYjU2MCAxMDA2NDQKLS0tIGEvY3J5cHRvL3NoYS9zaGFfZGdzdC5jCisrKyBiL2NyeXB0by9zaGEvc2hhX2Rnc3QuYwpAQCAtNTcsMTIgKzU3LDYgQEAKICAqLwogCiAjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgotI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0jaWZkZWYgT1BFTlNTTF9GSVBTCi0jaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CiAjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEEwKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQSkKIAogI3VuZGVmICBTSEFfMQpkaWZmIC0tZ2l0IGEvY3J5cHRvL3NoYS9zaGFfbG9jbC5oIGIvY3J5cHRvL3NoYS9zaGFfbG9jbC5oCmluZGV4IGRhNDZkZGYuLjY3MmMyNmUgMTAwNjQ0Ci0tLSBhL2NyeXB0by9zaGEvc2hhX2xvY2wuaAorKysgYi9jcnlwdG8vc2hhL3NoYV9sb2NsLmgKQEAgLTEyMiwyMyArMTIyLDE0IEBACiAjZGVmaW5lIElOSVRfREFUQV9oMyAweDEwMzI1NDc2VUwKICNkZWZpbmUgSU5JVF9EQVRBX2g0IDB4YzNkMmUxZjBVTAogCi0jaWYgZGVmaW5lZChTSEFfMCkgJiYgZGVmaW5lZChPUEVOU1NMX0ZJUFMpCi1GSVBTX05PTl9GSVBTX01EX0luaXQoU0hBKQotI2Vsc2UKIGludCBIQVNIX0lOSVQgKFNIQV9DVFggKmMpCi0jZW5kaWYKIAl7Ci0jaWYgZGVmaW5lZChTSEFfMSkgJiYgZGVmaW5lZChPUEVOU1NMX0ZJUFMpCi0JRklQU19zZWxmdGVzdF9jaGVjaygpOwotI2VuZGlmCisJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7CiAJYy0+aDA9SU5JVF9EQVRBX2gwOwogCWMtPmgxPUlOSVRfREFUQV9oMTsKIAljLT5oMj1JTklUX0RBVEFfaDI7CiAJYy0+aDM9SU5JVF9EQVRBX2gzOwogCWMtPmg0PUlOSVRfREFUQV9oNDsKLQljLT5ObD0wOwotCWMtPk5oPTA7Ci0JYy0+bnVtPTA7CiAJcmV0dXJuIDE7CiAJfQogCmRpZmYgLS1naXQgYS9jcnlwdG8vc2hhL3NoYXRlc3QuYyBiL2NyeXB0by9zaGEvc2hhdGVzdC5jCmluZGV4IGVkMGZlMDYuLjI3NjE0NjQgMTAwNjQ0Ci0tLSBhL2NyeXB0by9zaGEvc2hhdGVzdC5jCisrKyBiL2NyeXB0by9zaGEvc2hhdGVzdC5jCkBAIC0xMjMsOSArMTIzLDkgQEAKIAlpPTE7CiAJd2hpbGUgKCpQICE9IE5VTEwpCiAJCXsKLQkJRVZQX0RpZ2VzdCgqUCxzdHJsZW4oKGNoYXIgKikqUCksbWQsTlVMTCxFVlBfc2hhKCksIE5VTEwpOworCQlFVlBfRGlnZXN0KCpQLHN0cmxlbigqUCksbWQsTlVMTCxFVlBfc2hhKCksIE5VTEwpOwogCQlwPXB0KG1kKTsKLQkJaWYgKHN0cmNtcChwLChjaGFyICopKlIpICE9IDApCisJCWlmIChzdHJjbXAocCwqUikgIT0gMCkKIAkJCXsKIAkJCXByaW50ZigiZXJyb3IgY2FsY3VsYXRpbmcgU0hBIG9uICclcydcbiIsKlApOwogCQkJcHJpbnRmKCJnb3QgJXMgaW5zdGVhZCBvZiAlc1xuIixwLCpSKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9zcGFyY2NwdWlkLlMgYi9jcnlwdG8vc3BhcmNjcHVpZC5TCmluZGV4IGMxNzM1MGYuLmJjZjQ2ZjIgMTAwNjQ0Ci0tLSBhL2NyeXB0by9zcGFyY2NwdWlkLlMKKysrIGIvY3J5cHRvL3NwYXJjY3B1aWQuUwpAQCAtMzQsNyArMzQsOCBAQAogCW5vcAogCWNhbGwJLlBJQy56ZXJvLnVwCiAJbW92CS56ZXJvLSguLTQpLCVvMAotCWxkZAlbJW8wXSwlZjAKKwlsZAlbJW8wXSwlZjAKKwlsZAlbJW8wXSwlZjEKIAogCXN1YmNjCSVnMCwxLCVvMAogCSEgRm9sbG93aW5nIGlzIFY5ICJyZCAlY2NyLCVvMCIgaW5zdHJ1Y3Rpb24uIEhvd2V2ZXIhIFY4CkBAIC0xNjYsNiArMTY3LDcgQEAKIAogLmdsb2JhbAlPUEVOU1NMX2F0b21pY19hZGQKIC50eXBlCU9QRU5TU0xfYXRvbWljX2FkZCwjZnVuY3Rpb24KKy5hbGlnbgkzMgogT1BFTlNTTF9hdG9taWNfYWRkOgogI2lmbmRlZiBBQkk2NAogCXN1YmNjCSVnMCwxLCVvMgpAQCAtMjEzLDI3ICsyMTUsMTA2IEBACiAJc3JhCSVvMCwlZzAsJW8wCSEgd2UgcmV0dXJuIHNpZ25lZCBpbnQsIHJlbWVtYmVyPwogLnNpemUJT1BFTlNTTF9hdG9taWNfYWRkLC4tT1BFTlNTTF9hdG9taWNfYWRkCiAKLS5nbG9iYWwJT1BFTlNTTF9yZHRzYworLmdsb2JhbAlfc3BhcmN2OV9yZHRpY2sKKy5hbGlnbgkzMgorX3NwYXJjdjlfcmR0aWNrOgogCXN1YmNjCSVnMCwxLCVvMAogCS53b3JkCTB4OTE0MDgwMDAJIXJkCSVjY3IsJW8wCiAJY21wCSVvMCwweDk5Ci0JYm5lCS5ub3RzYworCWJuZQkubm90aWNrCiAJeG9yCSVvMCwlbzAsJW8wCi0Jc2F2ZQklc3AsRlJBTUUtMTYsJXNwCi0JbW92CTUxMywlbzAJCSFTSV9QTEFURk9STQotCWFkZAklc3AsQklBUysxNiwlbzEKLQljYWxsCXN5c2luZm8KLQltb3YJMjU2LCVvMgorCS53b3JkCTB4OTE0MTAwMDAJIXJkCSV0aWNrLCVvMAorCXJldGwKKwkud29yZAkweDkzMzIzMDIwCSFzcmx4CSVvMiwzMiwlbzEKKy5ub3RpY2s6CisJcmV0bAorCXhvcgklbzEsJW8xLCVvMQorLnR5cGUJX3NwYXJjdjlfcmR0aWNrLCNmdW5jdGlvbgorLnNpemUJX3NwYXJjdjlfcmR0aWNrLC4tX3NwYXJjdjlfcmR0aWNrCiAKLQlhZGQJJXNwLEJJQVMtMTYsJW8xCi0JbGQJWyVvMV0sJWwwCi0JbGQJWyVvMSs0XSwlbDEKLQlsZAlbJW8xKzhdLCVsMgotCW1vdgklbG8oJ1NVTlcnKSwlbDMKLQlyZXQKLQlyZXN0b3JlCi0ubm90c2M6CisuZ2xvYmFsCU9QRU5TU0xfY2xlYW5zZQorLmFsaWduCTMyCitPUEVOU1NMX2NsZWFuc2U6CisJY21wCSVvMSwxNAorCW5vcAorI2lmZGVmIEFCSTY0CisJYmd1CSV4Y2MsLkxvdAorI2Vsc2UKKwliZ3UJLkxvdAorI2VuZGlmCisJY21wCSVvMSwwCisJYm5lCS5MaXR0bGUKKwlub3AKIAlyZXRsCiAJbm9wCi0udHlwZQlPUEVOU1NMX3JkdHNjLCNmdW5jdGlvbgotLnNpemUJT1BFTlNTTF9yZHRzYywuLU9QRU5TU0xfYXRvbWljX2FkZAorCisuTGl0dGxlOgorCXN0YgklZzAsWyVvMF0KKwlzdWJjYwklbzEsMSwlbzEKKwlibnoJLkxpdHRsZQorCWFkZAklbzAsMSwlbzAKKwlyZXRsCisJbm9wCisuYWxpZ24JMzIKKy5Mb3Q6CisjaWZuZGVmIEFCSTY0CisJc3ViY2MJJWcwLDEsJWcxCisJISBzZWUgYWJvdmUgZm9yIGV4cGxhbmF0aW9uCisJLndvcmQJMHg4MzQwODAwMAkhcmQJJWNjciwlZzEKKwljbXAJJWcxLDB4OTkKKwlibmUJLnY4bG90CisJbm9wCisjZW5kaWYKKworLnY5bG90OglhbmRjYwklbzAsNywlZzAKKwliegkudjlhbGlnbmVkCisJbm9wCisJc3RiCSVnMCxbJW8wXQorCXN1YgklbzEsMSwlbzEKKwliYQkudjlsb3QKKwlhZGQJJW8wLDEsJW8wCisuYWxpZ24JMTYsMHgwMTAwMDAwMAorLnY5YWxpZ25lZDoKKwkud29yZAkweGMwNzIwMDAwCSFzdHgJJWcwLFslbzBdCisJc3ViCSVvMSw4LCVvMQorCWFuZGNjCSVvMSwtOCwlZzAKKyNpZmRlZiBBQkk2NAorCS53b3JkCTB4MTI2ZmZmZmQJIWJuegkleGNjLC52OWFsaWduZWQKKyNlbHNlCisJLndvcmQJMHgxMjRmZmZmZAkhYm56CSVpY2MsLnY5YWxpZ25lZAorI2VuZGlmCisJYWRkCSVvMCw4LCVvMAorCisJY21wCSVvMSwwCisJYm5lCS5MaXR0bGUKKwlub3AKKwlyZXRsCisJbm9wCisjaWZuZGVmIEFCSTY0Cisudjhsb3Q6CWFuZGNjCSVvMCwzLCVnMAorCWJ6CS52OGFsaWduZWQKKwlub3AKKwlzdGIJJWcwLFslbzBdCisJc3ViCSVvMSwxLCVvMQorCWJhCS52OGxvdAorCWFkZAklbzAsMSwlbzAKKwlub3AKKy52OGFsaWduZWQ6CisJc3QJJWcwLFslbzBdCisJc3ViCSVvMSw0LCVvMQorCWFuZGNjCSVvMSwtNCwlZzAKKwlibnoJLnY4YWxpZ25lZAorCWFkZAklbzAsNCwlbzAKKworCWNtcAklbzEsMAorCWJuZQkuTGl0dGxlCisJbm9wCisJcmV0bAorCW5vcAorI2VuZGlmCisudHlwZQlPUEVOU1NMX2NsZWFuc2UsI2Z1bmN0aW9uCisuc2l6ZQlPUEVOU1NMX2NsZWFuc2UsLi1PUEVOU1NMX2NsZWFuc2UKKworLnNlY3Rpb24JIi5pbml0IiwjYWxsb2MsI2V4ZWNpbnN0cgorCWNhbGwJT1BFTlNTTF9jcHVpZF9zZXR1cAorCW5vcApkaWZmIC0tZ2l0IGEvY3J5cHRvL3NwYXJjdjljYXAuYyBiL2NyeXB0by9zcGFyY3Y5Y2FwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWYzMWQyMAotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9zcGFyY3Y5Y2FwLmMKQEAgLTAsMCArMSwxNTQgQEAKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorCisjZGVmaW5lIFNQQVJDVjlfVElDS19QUklWSUxFR0VECSgxPDwwKQorI2RlZmluZSBTUEFSQ1Y5X1BSRUZFUl9GUFUJKDE8PDEpCisjZGVmaW5lIFNQQVJDVjlfVklTMQkJKDE8PDIpCisjZGVmaW5lIFNQQVJDVjlfVklTMgkJKDE8PDMpCS8qIHJlc2VydmVkICovCisjZGVmaW5lIFNQQVJDVjlfRk1BREQJCSgxPDw0KQkvKiByZXNlcnZlZCBmb3IgU1BBUkM2NCBWICovCitzdGF0aWMgaW50IE9QRU5TU0xfc3BhcmN2OWNhcF9QPVNQQVJDVjlfVElDS19QUklWSUxFR0VEOworCitpbnQgYm5fbXVsX21vbnQoQk5fVUxPTkcgKnJwLCBjb25zdCBCTl9VTE9ORyAqYXAsIGNvbnN0IEJOX1VMT05HICpicCwgY29uc3QgQk5fVUxPTkcgKm5wLGNvbnN0IEJOX1VMT05HICpuMCwgaW50IG51bSkKKwl7CisJaW50IGJuX211bF9tb250X2ZwdShCTl9VTE9ORyAqcnAsIGNvbnN0IEJOX1VMT05HICphcCwgY29uc3QgQk5fVUxPTkcgKmJwLCBjb25zdCBCTl9VTE9ORyAqbnAsY29uc3QgQk5fVUxPTkcgKm4wLCBpbnQgbnVtKTsKKwlpbnQgYm5fbXVsX21vbnRfaW50KEJOX1VMT05HICpycCwgY29uc3QgQk5fVUxPTkcgKmFwLCBjb25zdCBCTl9VTE9ORyAqYnAsIGNvbnN0IEJOX1VMT05HICpucCxjb25zdCBCTl9VTE9ORyAqbjAsIGludCBudW0pOworCisJaWYgKChPUEVOU1NMX3NwYXJjdjljYXBfUCYoU1BBUkNWOV9QUkVGRVJfRlBVfFNQQVJDVjlfVklTMSkpID09CisJCShTUEFSQ1Y5X1BSRUZFUl9GUFV8U1BBUkNWOV9WSVMxKSkKKwkJcmV0dXJuIGJuX211bF9tb250X2ZwdShycCxhcCxicCxucCxuMCxudW0pOworCWVsc2UKKwkJcmV0dXJuIGJuX211bF9tb250X2ludChycCxhcCxicCxucCxuMCxudW0pOworCX0KKwordW5zaWduZWQgbG9uZyBPUEVOU1NMX3JkdHNjKHZvaWQpCisJeworCXVuc2lnbmVkIGxvbmcgX3NwYXJjdjlfcmR0aWNrKHZvaWQpOworCisJaWYgKE9QRU5TU0xfc3BhcmN2OWNhcF9QJlNQQVJDVjlfVElDS19QUklWSUxFR0VEKQorI2lmIGRlZmluZWQoX19zdW4pICYmIGRlZmluZWQoX19TVlI0KQorCQlyZXR1cm4gZ2V0aHJ0aW1lKCk7CisjZWxzZQorCQlyZXR1cm4gMDsKKyNlbmRpZgorCWVsc2UKKwkJcmV0dXJuIF9zcGFyY3Y5X3JkdGljaygpOworCX0KKworI2lmIGRlZmluZWQoX19zdW4pICYmIGRlZmluZWQoX19TVlI0KQorCisjaW5jbHVkZSA8ZGxmY24uaD4KKyNpbmNsdWRlIDxsaWJkZXZpbmZvLmg+CisjaW5jbHVkZSA8c3lzL3N5c3RlbWluZm8uaD4KKwordHlwZWRlZiBkaV9ub2RlX3QgKCpkaV9pbml0X3QpKGNvbnN0IGNoYXIgKix1aW50X3QpOwordHlwZWRlZiB2b2lkICAgICAgKCpkaV9maW5pX3QpKGRpX25vZGVfdCk7Cit0eXBlZGVmIGNoYXIgKiAgICAoKmRpX25vZGVfbmFtZV90KShkaV9ub2RlX3QpOwordHlwZWRlZiBpbnQgICAgICAgKCpkaV93YWxrX25vZGVfdCkoZGlfbm9kZV90LHVpbnRfdCxkaV9ub2RlX25hbWVfdCxpbnQgKCopKGRpX25vZGVfdCxkaV9ub2RlX25hbWVfdCkpOworCisjZGVmaW5lIERMTElOSyhoLG5hbWUpIChuYW1lPShuYW1lIyNfdClkbHN5bSgoaCksI25hbWUpKQorCitzdGF0aWMgaW50IHdhbGtfbm9kZW5hbWUoZGlfbm9kZV90IG5vZGUsIGRpX25vZGVfbmFtZV90IGRpX25vZGVfbmFtZSkKKwl7CisJY2hhciAqbmFtZSA9ICgqZGlfbm9kZV9uYW1lKShub2RlKTsKKworCS8qIFRoaXMgaXMgZXhwZWN0ZWQgdG8gY2F0Y2ggYWxsIFVsdHJhU1BBUkMgZmxhdm9ycyBwcmlvciBUMSAqLworCWlmICghc3RyY21wIChuYW1lLCJTVU5XLFVsdHJhU1BBUkMiKSB8fAorCSAgICAhc3RybmNtcChuYW1lLCJTVU5XLFVsdHJhU1BBUkMtSSIsMTcpKSAgLyogY292ZXJzIElJLElJSSxJViAqLworCQl7CisJCU9QRU5TU0xfc3BhcmN2OWNhcF9QIHw9IFNQQVJDVjlfUFJFRkVSX0ZQVXxTUEFSQ1Y5X1ZJUzE7CisKKwkJLyogJXRpY2sgaXMgcHJpdmlsZWdlZCBvbmx5IG9uIFVsdHJhU1BBUkMtSS9JSSwgYnV0IG5vdCBJSWUgKi8KKwkJaWYgKG5hbWVbMTRdIT0nXDAnICYmIG5hbWVbMTddIT0nXDAnICYmIG5hbWVbMThdIT0nXDAnKQorCQkJT1BFTlNTTF9zcGFyY3Y5Y2FwX1AgJj0gflNQQVJDVjlfVElDS19QUklWSUxFR0VEOworCisJCXJldHVybiBESV9XQUxLX1RFUk1JTkFURTsKKwkJfQorCS8qIFRoaXMgaXMgZXhwZWN0ZWQgdG8gY2F0Y2ggcmVtYWluaW5nIFVsdHJhU1BBUkNzLCBzdWNoIGFzIFQxICovCisJZWxzZSBpZiAoIXN0cm5jbXAobmFtZSwiU1VOVyxVbHRyYVNQQVJDIiwxNSkpCisJCXsKKwkJT1BFTlNTTF9zcGFyY3Y5Y2FwX1AgJj0gflNQQVJDVjlfVElDS19QUklWSUxFR0VEOworCisJCXJldHVybiBESV9XQUxLX1RFUk1JTkFURTsKKwkJfQorCisJcmV0dXJuIERJX1dBTEtfQ09OVElOVUU7CisJfQorCit2b2lkIE9QRU5TU0xfY3B1aWRfc2V0dXAodm9pZCkKKwl7CisJdm9pZCAqaDsKKwljaGFyICplLHNpWzI1Nl07CisJc3RhdGljIGludCB0cmlnZ2VyPTA7CisKKwlpZiAodHJpZ2dlcikgcmV0dXJuOworCXRyaWdnZXI9MTsKKworCWlmICgoZT1nZXRlbnYoIk9QRU5TU0xfc3BhcmN2OWNhcCIpKSkKKwkJeworCQlPUEVOU1NMX3NwYXJjdjljYXBfUD1zdHJ0b3VsKGUsTlVMTCwwKTsKKwkJcmV0dXJuOworCQl9CisKKwlpZiAoc3lzaW5mbyhTSV9NQUNISU5FLHNpLHNpemVvZihzaSkpPjApCisJCXsKKwkJaWYgKHN0cmNtcChzaSwic3VuNHYiKSkKKwkJCS8qIEZQVSBpcyBwcmVmZXJyZWQgZm9yIGFsbCBDUFVzLCBidXQgVVMtVDEvMiAqLworCQkJT1BFTlNTTF9zcGFyY3Y5Y2FwX1AgfD0gU1BBUkNWOV9QUkVGRVJfRlBVOworCQl9CisKKwlpZiAoc3lzaW5mbyhTSV9JU0FMSVNULHNpLHNpemVvZihzaSkpPjApCisJCXsKKwkJaWYgKHN0cnN0cihzaSwiK3ZpcyIpKQorCQkJT1BFTlNTTF9zcGFyY3Y5Y2FwX1AgfD0gU1BBUkNWOV9WSVMxOworCQlpZiAoc3Ryc3RyKHNpLCIrdmlzMiIpKQorCQkJeworCQkJT1BFTlNTTF9zcGFyY3Y5Y2FwX1AgfD0gU1BBUkNWOV9WSVMyOworCQkJT1BFTlNTTF9zcGFyY3Y5Y2FwX1AgJj0gflNQQVJDVjlfVElDS19QUklWSUxFR0VEOworCQkJcmV0dXJuOworCQkJfQorCQl9CisKKwlpZiAoKGggPSBkbG9wZW4oImxpYmRldmluZm8uc28uMSIsUlRMRF9MQVpZKSkpIGRvCisJCXsKKwkJZGlfaW5pdF90CWRpX2luaXQ7CisJCWRpX2ZpbmlfdAlkaV9maW5pOworCQlkaV93YWxrX25vZGVfdAlkaV93YWxrX25vZGU7CisJCWRpX25vZGVfbmFtZV90CWRpX25vZGVfbmFtZTsKKwkJZGlfbm9kZV90CXJvb3Rfbm9kZTsKKworCQlpZiAoIURMTElOSyhoLGRpX2luaXQpKQkJYnJlYWs7CisJCWlmICghRExMSU5LKGgsZGlfZmluaSkpCQlicmVhazsKKwkJaWYgKCFETExJTksoaCxkaV93YWxrX25vZGUpKQlicmVhazsKKwkJaWYgKCFETExJTksoaCxkaV9ub2RlX25hbWUpKQlicmVhazsKKworCQlpZiAoKHJvb3Rfbm9kZSA9ICgqZGlfaW5pdCkoIi8iLERJTkZPU1VCVFJFRSkpIT1ESV9OT0RFX05JTCkKKwkJCXsKKwkJCSgqZGlfd2Fsa19ub2RlKShyb290X25vZGUsRElfV0FMS19TSUJGSVJTVCwKKwkJCQkJZGlfbm9kZV9uYW1lLHdhbGtfbm9kZW5hbWUpOworCQkJKCpkaV9maW5pKShyb290X25vZGUpOworCQkJfQorCQl9IHdoaWxlKDApOworCisJaWYgKGgpIGRsY2xvc2UoaCk7CisJfQorCisjZWxzZQorCit2b2lkIE9QRU5TU0xfY3B1aWRfc2V0dXAodm9pZCkKKwl7CisJY2hhciAqZTsKKyAKKwlpZiAoKGU9Z2V0ZW52KCJPUEVOU1NMX3NwYXJjdjljYXAiKSkpCisJCXsKKwkJT1BFTlNTTF9zcGFyY3Y5Y2FwX1A9c3RydG91bChlLE5VTEwsMCk7CisJCXJldHVybjsKKwkJfQorCisJLyogRm9yIG5vdyB3ZSBhc3N1bWUgdGhhdCB0aGUgcmVzdCBzdXBwb3J0cyBVbHRyYVNQQVJDLUkqIG9ubHkgKi8KKwlPUEVOU1NMX3NwYXJjdjljYXBfUCB8PSBTUEFSQ1Y5X1BSRUZFUl9GUFV8U1BBUkNWOV9WSVMxOworCX0KKworI2VuZGlmCmRpZmYgLS1naXQgYS9jcnlwdG8vc3RhY2svTWFrZWZpbGUgYi9jcnlwdG8vc3RhY2svTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4OWE3N2IuLjAwMDAwMDAKLS0tIGEvY3J5cHRvL3N0YWNrL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotIwotIyBPcGVuU1NML2NyeXB0by9zdGFjay9NYWtlZmlsZQotIwotCi1ESVI9CXN0YWNrCi1UT1A9CS4uLy4uCi1DQz0JY2MKLUlOQ0xVREVTPQotQ0ZMQUc9LWcKLU1BS0VGSUxFPQlNYWtlZmlsZQotQVI9CQlhciByCi0KLUNGTEFHUz0gJChJTkNMVURFUykgJChDRkxBRykKLQotR0VORVJBTD1NYWtlZmlsZQotVEVTVD0KLUFQUFM9Ci0KLUxJQj0kKFRPUCkvbGliY3J5cHRvLmEKLUxJQlNSQz1zdGFjay5jCi1MSUJPQko9c3RhY2subwotCi1TUkM9ICQoTElCU1JDKQotCi1FWEhFQURFUj0gc3RhY2suaCBzYWZlc3RhY2suaAotSEVBREVSPQkkKEVYSEVBREVSKQotCi1BTEw9ICAgICQoR0VORVJBTCkgJChTUkMpICQoSEVBREVSKQotCi10b3A6Ci0JKGNkIC4uLy4uOyAkKE1BS0UpIERJUlM9Y3J5cHRvIFNESVJTPSQoRElSKSBzdWJfYWxsKQotCi1hbGw6CWxpYgotCi1saWI6CSQoTElCT0JKKQotCSQoQVJYKSAkKExJQikgJChMSUJPQkopCi0JJChSQU5MSUIpICQoTElCKSB8fCBlY2hvIE5ldmVyIG1pbmQuCi0JQHRvdWNoIGxpYgotCi1maWxlczoKLQkkKFBFUkwpICQoVE9QKS91dGlsL2ZpbGVzLnBsIE1ha2VmaWxlID4+ICQoVE9QKS9NSU5GTwotCi1saW5rczoKLQlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vaW5jbHVkZS9vcGVuc3NsICQoRVhIRUFERVIpCi0JQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL3Rlc3QgJChURVNUKQotCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9hcHBzICQoQVBQUykKLQotaW5zdGFsbDoKLQlAWyAtbiAiJChJTlNUQUxMVE9QKSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdG9wIE1ha2VmaWxlLi4uCi0JQGhlYWRlcmxpc3Q9IiQoRVhIRUFERVIpIjsgZm9yIGkgaW4gJCRoZWFkZXJsaXN0IDsgXAotCWRvICBcCi0JKGNwICQkaSAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaTsgXAotCWNobW9kIDY0NCAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaSApOyBcCi0JZG9uZTsKLQotdGFnczoKLQljdGFncyAkKFNSQykKLQotdGVzdHM6Ci0KLWxpbnQ6Ci0JbGludCAtRExJTlQgJChJTkNMVURFUykgJChTUkMpPmZsdWZmCi0KLWRlcGVuZDoKLQlAWyAtbiAiJChNQUtFREVQRU5EKSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdXBwZXIgTWFrZWZpbGUuLi4KLQkkKE1BS0VERVBFTkQpIC0tICQoQ0ZMQUcpICQoSU5DTFVERVMpICQoREVQRkxBRykgLS0gJChQUk9HUykgJChMSUJTUkMpCi0KLWRjbGVhbjoKLQkkKFBFUkwpIC1wZSAnaWYgKC9eIyBETyBOT1QgREVMRVRFIFRISVMgTElORS8pIHtwcmludDsgZXhpdCgwKTt9JyAkKE1BS0VGSUxFKSA+TWFrZWZpbGUubmV3Ci0JbXYgLWYgTWFrZWZpbGUubmV3ICQoTUFLRUZJTEUpCi0KLWNsZWFuOgotCXJtIC1mICoubyAqLm9iaiBsaWIgdGFncyBjb3JlIC5wdXJlIC5uZnMqICoub2xkICouYmFrIGZsdWZmCi0KLSMgRE8gTk9UIERFTEVURSBUSElTIExJTkUgLS0gbWFrZSBkZXBlbmQgZGVwZW5kcyBvbiBpdC4KLQotc3RhY2subzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1zdGFjay5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1zdGFjay5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLXN0YWNrLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLXN0YWNrLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXN0YWNrLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1zdGFjay5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLXN0YWNrLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggc3RhY2suYwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3N0YWNrL3NhZmVzdGFjay5oIGIvY3J5cHRvL3N0YWNrL3NhZmVzdGFjay5oCmluZGV4IDc4Y2M0ODUuLmQ2MTZiNGEgMTAwNjQ0Ci0tLSBhL2NyeXB0by9zdGFjay9zYWZlc3RhY2suaAorKysgYi9jcnlwdG8vc3RhY2svc2FmZXN0YWNrLmgKQEAgLTU3LDE4ICs1NywyNyBAQAogCiAjaW5jbHVkZSA8b3BlbnNzbC9zdGFjay5oPgogCi0jaWZkZWYgREVCVUdfU0FGRVNUQUNLCi0KICNpZm5kZWYgQ0hFQ0tFRF9QVFJfT0YKICNkZWZpbmUgQ0hFQ0tFRF9QVFJfT0YodHlwZSwgcCkgXAogICAgICgodm9pZCopICgxID8gcCA6ICh0eXBlKikwKSkKICNlbmRpZgogCisvKiBJbiBDKysgd2UgZ2V0IHByb2JsZW1zIGJlY2F1c2UgYW4gZXhwbGljaXQgY2FzdCBpcyBuZWVkZWQgZnJvbSAodm9pZCAqKQorICogd2UgdXNlIENIRUNLRURfU1RBQ0tfT0YgdG8gZW5zdXJlIHRoZSBjb3JyZWN0IHR5cGUgaXMgcGFzc2VkIGluIHRoZSBtYWNyb3MKKyAqIGJlbG93LiAKKyAqLworCisjZGVmaW5lIENIRUNLRURfU1RBQ0tfT0YodHlwZSwgcCkgXAorICAgICgoX1NUQUNLKikgKDEgPyBwIDogKFNUQUNLX09GKHR5cGUpKikwKSkKKwogI2RlZmluZSBDSEVDS0VEX1NLX0ZSRUVfRlVOQyh0eXBlLCBwKSBcCiAgICAgKCh2b2lkICgqKSh2b2lkICopKSAoKDEgPyBwIDogKHZvaWQgKCopKHR5cGUgKikpMCkpKQogCisjZGVmaW5lIENIRUNLRURfU0tfRlJFRV9GVU5DMih0eXBlLCBwKSBcCisgICAgKCh2b2lkICgqKSh2b2lkICopKSAoKDEgPyBwIDogKHZvaWQgKCopKHR5cGUpKTApKSkKKwogI2RlZmluZSBDSEVDS0VEX1NLX0NNUF9GVU5DKHR5cGUsIHApIFwKLSAgICAoKGludCAoKikoY29uc3QgY2hhciAqIGNvbnN0ICosIGNvbnN0IGNoYXIgKiBjb25zdCAqKSkgXAorICAgICgoaW50ICgqKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpIFwKIAkoKDEgPyBwIDogKGludCAoKikoY29uc3QgdHlwZSAqIGNvbnN0ICosIGNvbnN0IHR5cGUgKiBjb25zdCAqKSkwKSkpCiAKICNkZWZpbmUgU1RBQ0tfT0YodHlwZSkgc3RydWN0IHN0YWNrX3N0XyMjdHlwZQpAQCAtNzcsMTEgKzg2LDUxIEBACiAjZGVmaW5lIERFQ0xBUkVfU1RBQ0tfT0YodHlwZSkgXAogU1RBQ0tfT0YodHlwZSkgXAogICAgIHsgXAotICAgIFNUQUNLIHN0YWNrOyBcCisgICAgX1NUQUNLIHN0YWNrOyBcCisgICAgfTsKKyNkZWZpbmUgREVDTEFSRV9TUEVDSUFMX1NUQUNLX09GKHR5cGUsIHR5cGUyKSBcCitTVEFDS19PRih0eXBlKSBcCisgICAgeyBcCisgICAgX1NUQUNLIHN0YWNrOyBcCiAgICAgfTsKIAogI2RlZmluZSBJTVBMRU1FTlRfU1RBQ0tfT0YodHlwZSkgLyogbmFkYSAob2Jzb2xldGUgaW4gbmV3IHNhZmVzdGFjayBhcHByb2FjaCkqLwogCisKKy8qIFN0cmluZ3MgYXJlIHNwZWNpYWw6IG5vcm1hbGx5IGFuIGxoYXNoIGVudHJ5IHdpbGwgcG9pbnQgdG8gYSBzaW5nbGUKKyAqIChzb21ld2hhdCkgbXV0YWJsZSBvYmplY3QuIEluIHRoZSBjYXNlIG9mIHN0cmluZ3M6CisgKgorICogYSkgSW5zdGVhZCBvZiBhIHNpbmdsZSBjaGFyLCB0aGVyZSBpcyBhbiBhcnJheSBvZiBjaGFycywgTlVMLXRlcm1pbmF0ZWQuCisgKiBiKSBUaGUgc3RyaW5nIG1heSBoYXZlIGJlIGltbXV0YWJsZS4KKyAqCisgKiBTbywgdGhleSBuZWVkIHRoZWlyIG93biBkZWNsYXJhdGlvbnMuIEVzcGVjaWFsbHkgaW1wb3J0YW50IGZvcgorICogdHlwZS1jaGVja2luZyB0b29scywgc3VjaCBhcyBEZXB1dHkuCisgKgorbyAqIEluIHByYWN0aWNlLCBob3dldmVyLCBpdCBhcHBlYXJzIHRvIGJlIGhhcmQgdG8gaGF2ZSBhIGNvbnN0CisgKiBzdHJpbmcuIEZvciBub3csIEknbSBzZXR0bGluZyBmb3IgZGVhbGluZyB3aXRoIHRoZSBmYWN0IGl0IGlzIGEKKyAqIHN0cmluZyBhdCBhbGwuCisgKi8KK3R5cGVkZWYgY2hhciAqT1BFTlNTTF9TVFJJTkc7CisKK3R5cGVkZWYgY29uc3QgY2hhciAqT1BFTlNTTF9DU1RSSU5HOworCisvKiBDb25mdXNpbmdseSwgTEhBU0hfT0YoU1RSSU5HKSBkZWFscyB3aXRoIGNoYXIgKiogdGhyb3VnaG91dCwgYnV0CisgKiBTVEFDS19PRihTVFJJTkcpIGlzIHJlYWxseSBtb3JlIGxpa2UgU1RBQ0tfT0YoY2hhciksIG9ubHksIGFzCisgKiBtZW50aW9uZWQgYWJvdmUsIGluc3RlYWQgb2YgYSBzaW5nbGUgY2hhciBlYWNoIGVudHJ5IGlzIGEKKyAqIE5VTC10ZXJtaW5hdGVkIGFycmF5IG9mIGNoYXJzLiBTbywgd2UgaGF2ZSB0byBpbXBsZW1lbnQgU1RSSU5HCisgKiBzcGVjaWFsbHkgZm9yIFNUQUNLX09GLiBUaGlzIGlzIGRlYWx0IHdpdGggaW4gdGhlIGF1dG9nZW5lcmF0ZWQKKyAqIG1hY3JvcyBiZWxvdy4KKyAqLworCitERUNMQVJFX1NQRUNJQUxfU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcsIGNoYXIpCisKKy8qIFNpbWlsYXJseSwgd2Ugc29tZXRpbWVzIHVzZSBhIGJsb2NrIG9mIGNoYXJhY3RlcnMsIE5PVAorICogbnVsLXRlcm1pbmF0ZWQuIFRoZXNlIHNob3VsZCBhbHNvIGJlIGRpc3Rpbmd1aXNoZWQgZnJvbSAibm9ybWFsIgorICogc3RhY2tzLiAqLworCit0eXBlZGVmIHZvaWQgKk9QRU5TU0xfQkxPQ0s7CitERUNMQVJFX1NQRUNJQUxfU1RBQ0tfT0YoT1BFTlNTTF9CTE9DSywgdm9pZCkKKwogLyogU0tNX3NrXy4uLiBzdGFjayBtYWNyb3MgYXJlIGludGVybmFsIHRvIHNhZmVzdGFjay5oOgogICogbmV2ZXIgdXNlIHRoZW0gZGlyZWN0bHksIHVzZSBza188dHlwZT5fLi4uIGluc3RlYWQgKi8KICNkZWZpbmUgU0tNX3NrX25ldyh0eXBlLCBjbXApIFwKQEAgLTg5LDUyICsxMzgsNTUgQEAKICNkZWZpbmUgU0tNX3NrX25ld19udWxsKHR5cGUpIFwKIAkoKFNUQUNLX09GKHR5cGUpICopc2tfbmV3X251bGwoKSkKICNkZWZpbmUgU0tNX3NrX2ZyZWUodHlwZSwgc3QpIFwKLQlza19mcmVlKENIRUNLRURfUFRSX09GKFNUQUNLX09GKHR5cGUpLCBzdCkpCisJc2tfZnJlZShDSEVDS0VEX1NUQUNLX09GKHR5cGUsIHN0KSkKICNkZWZpbmUgU0tNX3NrX251bSh0eXBlLCBzdCkgXAotCXNrX251bShDSEVDS0VEX1BUUl9PRihTVEFDS19PRih0eXBlKSwgc3QpKQorCXNrX251bShDSEVDS0VEX1NUQUNLX09GKHR5cGUsIHN0KSkKICNkZWZpbmUgU0tNX3NrX3ZhbHVlKHR5cGUsIHN0LGkpIFwKLQkoKHR5cGUgKilza192YWx1ZShDSEVDS0VEX1BUUl9PRihTVEFDS19PRih0eXBlKSwgc3QpLCBpKSkKKwkoKHR5cGUgKilza192YWx1ZShDSEVDS0VEX1NUQUNLX09GKHR5cGUsIHN0KSwgaSkpCiAjZGVmaW5lIFNLTV9za19zZXQodHlwZSwgc3QsaSx2YWwpIFwKLQlza19zZXQoQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YodHlwZSksIHN0KSwgaSwgQ0hFQ0tFRF9QVFJfT0YodHlwZSwgdmFsKSkKKwlza19zZXQoQ0hFQ0tFRF9TVEFDS19PRih0eXBlLCBzdCksIGksIENIRUNLRURfUFRSX09GKHR5cGUsIHZhbCkpCiAjZGVmaW5lIFNLTV9za196ZXJvKHR5cGUsIHN0KSBcCi0Jc2tfemVybyhDSEVDS0VEX1BUUl9PRihTVEFDS19PRih0eXBlKSwgc3QpKQotI2RlZmluZSBTS01fc2tfcHVzaCh0eXBlLCBzdCx2YWwpIFwKLQlza19wdXNoKENIRUNLRURfUFRSX09GKFNUQUNLX09GKHR5cGUpLCBzdCksIENIRUNLRURfUFRSX09GKHR5cGUsIHZhbCkpCi0jZGVmaW5lIFNLTV9za191bnNoaWZ0KHR5cGUsIHN0LHZhbCkgXAotCXNrX3Vuc2hpZnQoQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YodHlwZSksIHN0KSwgQ0hFQ0tFRF9QVFJfT0YodHlwZSwgdmFsKSkKLSNkZWZpbmUgU0tNX3NrX2ZpbmQodHlwZSwgc3QsdmFsKSBcCi0Jc2tfZmluZChDSEVDS0VEX1BUUl9PRihTVEFDS19PRih0eXBlKSwgc3QpLCBDSEVDS0VEX1BUUl9PRih0eXBlLCB2YWwpKQotI2RlZmluZSBTS01fc2tfZGVsZXRlKHR5cGUsIHN0LGkpIFwKLQkodHlwZSAqKXNrX2RlbGV0ZShDSEVDS0VEX1BUUl9PRihTVEFDS19PRih0eXBlKSwgc3QpLCBpKQotI2RlZmluZSBTS01fc2tfZGVsZXRlX3B0cih0eXBlLCBzdCxwdHIpIFwKLQkodHlwZSAqKXNrX2RlbGV0ZV9wdHIoQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YodHlwZSksIHN0KSwgQ0hFQ0tFRF9QVFJfT0YodHlwZSwgcHRyKSkKLSNkZWZpbmUgU0tNX3NrX2luc2VydCh0eXBlLCBzdCx2YWwsaSkgXAotCXNrX2luc2VydChDSEVDS0VEX1BUUl9PRihTVEFDS19PRih0eXBlKSwgc3QpLCBDSEVDS0VEX1BUUl9PRih0eXBlLCB2YWwpLCBpKQotI2RlZmluZSBTS01fc2tfc2V0X2NtcF9mdW5jKHR5cGUsIHN0LGNtcCkgXAorCXNrX3plcm8oQ0hFQ0tFRF9TVEFDS19PRih0eXBlLCBzdCkpCisjZGVmaW5lIFNLTV9za19wdXNoKHR5cGUsIHN0LCB2YWwpIFwKKwlza19wdXNoKENIRUNLRURfU1RBQ0tfT0YodHlwZSwgc3QpLCBDSEVDS0VEX1BUUl9PRih0eXBlLCB2YWwpKQorI2RlZmluZSBTS01fc2tfdW5zaGlmdCh0eXBlLCBzdCwgdmFsKSBcCisJc2tfdW5zaGlmdChDSEVDS0VEX1NUQUNLX09GKHR5cGUsIHN0KSwgQ0hFQ0tFRF9QVFJfT0YodHlwZSwgdmFsKSkKKyNkZWZpbmUgU0tNX3NrX2ZpbmQodHlwZSwgc3QsIHZhbCkgXAorCXNrX2ZpbmQoQ0hFQ0tFRF9TVEFDS19PRih0eXBlLCBzdCksIENIRUNLRURfUFRSX09GKHR5cGUsIHZhbCkpCisjZGVmaW5lIFNLTV9za19maW5kX2V4KHR5cGUsIHN0LCB2YWwpIFwKKwlza19maW5kX2V4KENIRUNLRURfU1RBQ0tfT0YodHlwZSwgc3QpLCBcCisJCSAgIENIRUNLRURfUFRSX09GKHR5cGUsIHZhbCkpCisjZGVmaW5lIFNLTV9za19kZWxldGUodHlwZSwgc3QsIGkpIFwKKwkodHlwZSAqKXNrX2RlbGV0ZShDSEVDS0VEX1NUQUNLX09GKHR5cGUsIHN0KSwgaSkKKyNkZWZpbmUgU0tNX3NrX2RlbGV0ZV9wdHIodHlwZSwgc3QsIHB0cikgXAorCSh0eXBlICopc2tfZGVsZXRlX3B0cihDSEVDS0VEX1NUQUNLX09GKHR5cGUsIHN0KSwgQ0hFQ0tFRF9QVFJfT0YodHlwZSwgcHRyKSkKKyNkZWZpbmUgU0tNX3NrX2luc2VydCh0eXBlLCBzdCx2YWwsIGkpIFwKKwlza19pbnNlcnQoQ0hFQ0tFRF9TVEFDS19PRih0eXBlLCBzdCksIENIRUNLRURfUFRSX09GKHR5cGUsIHZhbCksIGkpCisjZGVmaW5lIFNLTV9za19zZXRfY21wX2Z1bmModHlwZSwgc3QsIGNtcCkgXAogCSgoaW50ICgqKShjb25zdCB0eXBlICogY29uc3QgKixjb25zdCB0eXBlICogY29uc3QgKikpIFwKLQlza19zZXRfY21wX2Z1bmMoQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YodHlwZSksIHN0KSwgQ0hFQ0tFRF9TS19DTVBfRlVOQyh0eXBlLCBjbXApKSkKKwlza19zZXRfY21wX2Z1bmMoQ0hFQ0tFRF9TVEFDS19PRih0eXBlLCBzdCksIENIRUNLRURfU0tfQ01QX0ZVTkModHlwZSwgY21wKSkpCiAjZGVmaW5lIFNLTV9za19kdXAodHlwZSwgc3QpIFwKLQkoU1RBQ0tfT0YodHlwZSkgKilza19kdXAoQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YodHlwZSksIHN0KSkKLSNkZWZpbmUgU0tNX3NrX3BvcF9mcmVlKHR5cGUsIHN0LGZyZWVfZnVuYykgXAotCXNrX3BvcF9mcmVlKENIRUNLRURfUFRSX09GKFNUQUNLX09GKHR5cGUpLCBzdCksIENIRUNLRURfU0tfRlJFRV9GVU5DKHR5cGUsIGZyZWVfZnVuYykpCisJKFNUQUNLX09GKHR5cGUpICopc2tfZHVwKENIRUNLRURfU1RBQ0tfT0YodHlwZSwgc3QpKQorI2RlZmluZSBTS01fc2tfcG9wX2ZyZWUodHlwZSwgc3QsIGZyZWVfZnVuYykgXAorCXNrX3BvcF9mcmVlKENIRUNLRURfU1RBQ0tfT0YodHlwZSwgc3QpLCBDSEVDS0VEX1NLX0ZSRUVfRlVOQyh0eXBlLCBmcmVlX2Z1bmMpKQogI2RlZmluZSBTS01fc2tfc2hpZnQodHlwZSwgc3QpIFwKLQkodHlwZSAqKXNrX3NoaWZ0KENIRUNLRURfUFRSX09GKFNUQUNLX09GKHR5cGUpLCBzdCkpCisJKHR5cGUgKilza19zaGlmdChDSEVDS0VEX1NUQUNLX09GKHR5cGUsIHN0KSkKICNkZWZpbmUgU0tNX3NrX3BvcCh0eXBlLCBzdCkgXAotCSh0eXBlICopc2tfcG9wKENIRUNLRURfUFRSX09GKFNUQUNLX09GKHR5cGUpLCBzdCkpCisJKHR5cGUgKilza19wb3AoQ0hFQ0tFRF9TVEFDS19PRih0eXBlLCBzdCkpCiAjZGVmaW5lIFNLTV9za19zb3J0KHR5cGUsIHN0KSBcCi0Jc2tfc29ydChDSEVDS0VEX1BUUl9PRihTVEFDS19PRih0eXBlKSwgc3QpKQorCXNrX3NvcnQoQ0hFQ0tFRF9TVEFDS19PRih0eXBlLCBzdCkpCiAjZGVmaW5lIFNLTV9za19pc19zb3J0ZWQodHlwZSwgc3QpIFwKLQlza19pc19zb3J0ZWQoQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YodHlwZSksIHN0KSkKKwlza19pc19zb3J0ZWQoQ0hFQ0tFRF9TVEFDS19PRih0eXBlLCBzdCkpCiAKICNkZWZpbmUJU0tNX0FTTjFfU0VUX09GX2QyaSh0eXBlLCBzdCwgcHAsIGxlbmd0aCwgZDJpX2Z1bmMsIGZyZWVfZnVuYywgZXhfdGFnLCBleF9jbGFzcykgXAotCShTVEFDS19PRih0eXBlKSAqKWQyaV9BU04xX1NFVChDSEVDS0VEX1BUUl9PRihTVEFDS19PRih0eXBlKSwgc3QpLCBcCisJKFNUQUNLX09GKHR5cGUpICopZDJpX0FTTjFfU0VUKENIRUNLRURfU1RBQ0tfT0YodHlwZSwgc3QpLCBcCiAJCQkJcHAsIGxlbmd0aCwgXAogCQkJCUNIRUNLRURfRDJJX09GKHR5cGUsIGQyaV9mdW5jKSwgXAogCQkJCUNIRUNLRURfU0tfRlJFRV9GVU5DKHR5cGUsIGZyZWVfZnVuYyksIFwKIAkJCQlleF90YWcsIGV4X2NsYXNzKQogCiAjZGVmaW5lCVNLTV9BU04xX1NFVF9PRl9pMmQodHlwZSwgc3QsIHBwLCBpMmRfZnVuYywgZXhfdGFnLCBleF9jbGFzcywgaXNfc2V0KSBcCi0JaTJkX0FTTjFfU0VUKENIRUNLRURfUFRSX09GKFNUQUNLX09GKHR5cGUpLCBzdCksIHBwLCBcCisgIGkyZF9BU04xX1NFVCgoU1RBQ0tfT0YoT1BFTlNTTF9CTE9DSykgKilDSEVDS0VEX1NUQUNLX09GKHR5cGUsIHN0KSwgcHAsIFwKIAkJCQlDSEVDS0VEX0kyRF9PRih0eXBlLCBpMmRfZnVuYyksIFwKIAkJCQlleF90YWcsIGV4X2NsYXNzLCBpc19zZXQpCiAKQEAgLTE1MSw3MiArMjAzLDggQEAKIAkJCQlDSEVDS0VEX1NLX0ZSRUVfRlVOQyh0eXBlLCBmcmVlX2Z1bmMpLCBcCiAJCQkJcGFzcywgcGFzc2xlbiwgb2N0LCBzZXEpCiAKLSNlbHNlCi0KLSNkZWZpbmUgU1RBQ0tfT0YodHlwZSkgU1RBQ0sKLSNkZWZpbmUgUFJFREVDTEFSRV9TVEFDS19PRih0eXBlKSAvKiBuYWRhICovCi0jZGVmaW5lIERFQ0xBUkVfU1RBQ0tfT0YodHlwZSkgICAgLyogbmFkYSAqLwotI2RlZmluZSBJTVBMRU1FTlRfU1RBQ0tfT0YodHlwZSkgIC8qIG5hZGEgKi8KLQotI2RlZmluZSBTS01fc2tfbmV3KHR5cGUsIGNtcCkgXAotCXNrX25ldygoaW50ICgqKShjb25zdCBjaGFyICogY29uc3QgKiwgY29uc3QgY2hhciAqIGNvbnN0ICopKShjbXApKQotI2RlZmluZSBTS01fc2tfbmV3X251bGwodHlwZSkgXAotCXNrX25ld19udWxsKCkKLSNkZWZpbmUgU0tNX3NrX2ZyZWUodHlwZSwgc3QpIFwKLQlza19mcmVlKHN0KQotI2RlZmluZSBTS01fc2tfbnVtKHR5cGUsIHN0KSBcCi0Jc2tfbnVtKHN0KQotI2RlZmluZSBTS01fc2tfdmFsdWUodHlwZSwgc3QsaSkgXAotCSgodHlwZSAqKXNrX3ZhbHVlKHN0LCBpKSkKLSNkZWZpbmUgU0tNX3NrX3NldCh0eXBlLCBzdCxpLHZhbCkgXAotCSgodHlwZSAqKXNrX3NldChzdCwgaSwoY2hhciAqKXZhbCkpCi0jZGVmaW5lIFNLTV9za196ZXJvKHR5cGUsIHN0KSBcCi0Jc2tfemVybyhzdCkKLSNkZWZpbmUgU0tNX3NrX3B1c2godHlwZSwgc3QsdmFsKSBcCi0Jc2tfcHVzaChzdCwgKGNoYXIgKil2YWwpCi0jZGVmaW5lIFNLTV9za191bnNoaWZ0KHR5cGUsIHN0LHZhbCkgXAotCXNrX3Vuc2hpZnQoc3QsIChjaGFyICopdmFsKQotI2RlZmluZSBTS01fc2tfZmluZCh0eXBlLCBzdCx2YWwpIFwKLQlza19maW5kKHN0LCAoY2hhciAqKXZhbCkKLSNkZWZpbmUgU0tNX3NrX2RlbGV0ZSh0eXBlLCBzdCxpKSBcCi0JKCh0eXBlICopc2tfZGVsZXRlKHN0LCBpKSkKLSNkZWZpbmUgU0tNX3NrX2RlbGV0ZV9wdHIodHlwZSwgc3QscHRyKSBcCi0JKCh0eXBlICopc2tfZGVsZXRlX3B0cihzdCwoY2hhciAqKXB0cikpCi0jZGVmaW5lIFNLTV9za19pbnNlcnQodHlwZSwgc3QsdmFsLGkpIFwKLQlza19pbnNlcnQoc3QsIChjaGFyICopdmFsLCBpKQotI2RlZmluZSBTS01fc2tfc2V0X2NtcF9mdW5jKHR5cGUsIHN0LGNtcCkgXAotCSgoaW50ICgqKShjb25zdCB0eXBlICogY29uc3QgKixjb25zdCB0eXBlICogY29uc3QgKikpIFwKLQlza19zZXRfY21wX2Z1bmMoc3QsIChpbnQgKCopKGNvbnN0IGNoYXIgKiBjb25zdCAqLCBjb25zdCBjaGFyICogY29uc3QgKikpKGNtcCkpKQotI2RlZmluZSBTS01fc2tfZHVwKHR5cGUsIHN0KSBcCi0Jc2tfZHVwKHN0KQotI2RlZmluZSBTS01fc2tfcG9wX2ZyZWUodHlwZSwgc3QsZnJlZV9mdW5jKSBcCi0Jc2tfcG9wX2ZyZWUoc3QsICh2b2lkICgqKSh2b2lkICopKWZyZWVfZnVuYykKLSNkZWZpbmUgU0tNX3NrX3NoaWZ0KHR5cGUsIHN0KSBcCi0JKCh0eXBlICopc2tfc2hpZnQoc3QpKQotI2RlZmluZSBTS01fc2tfcG9wKHR5cGUsIHN0KSBcCi0JKCh0eXBlICopc2tfcG9wKHN0KSkKLSNkZWZpbmUgU0tNX3NrX3NvcnQodHlwZSwgc3QpIFwKLQlza19zb3J0KHN0KQotI2RlZmluZSBTS01fc2tfaXNfc29ydGVkKHR5cGUsIHN0KSBcCi0Jc2tfaXNfc29ydGVkKHN0KQotCi0jZGVmaW5lCVNLTV9BU04xX1NFVF9PRl9kMmkodHlwZSwgc3QsIHBwLCBsZW5ndGgsIGQyaV9mdW5jLCBmcmVlX2Z1bmMsIGV4X3RhZywgZXhfY2xhc3MpIFwKLQlkMmlfQVNOMV9TRVQoc3QscHAsbGVuZ3RoLCAodm9pZCAqKCopKHZvaWQgKiogLGNvbnN0IHVuc2lnbmVkIGNoYXIgKiogLGxvbmcpKWQyaV9mdW5jLCAodm9pZCAoKikodm9pZCAqKSlmcmVlX2Z1bmMsIGV4X3RhZyxleF9jbGFzcykKLSNkZWZpbmUJU0tNX0FTTjFfU0VUX09GX2kyZCh0eXBlLCBzdCwgcHAsIGkyZF9mdW5jLCBleF90YWcsIGV4X2NsYXNzLCBpc19zZXQpIFwKLQlpMmRfQVNOMV9TRVQoc3QscHAsKGludCAoKikodm9pZCAqLCB1bnNpZ25lZCBjaGFyICoqKSlpMmRfZnVuYyxleF90YWcsZXhfY2xhc3MsaXNfc2V0KQotCi0jZGVmaW5lCVNLTV9BU04xX3NlcV9wYWNrKHR5cGUsIHN0LCBpMmRfZnVuYywgYnVmLCBsZW4pIFwKLQlBU04xX3NlcV9wYWNrKHN0LCAoaW50ICgqKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiopKWkyZF9mdW5jLCBidWYsIGxlbikKLSNkZWZpbmUJU0tNX0FTTjFfc2VxX3VucGFjayh0eXBlLCBidWYsIGxlbiwgZDJpX2Z1bmMsIGZyZWVfZnVuYykgXAotCUFTTjFfc2VxX3VucGFjayhidWYsbGVuLCh2b2lkICooKikodm9pZCAqKixjb25zdCB1bnNpZ25lZCBjaGFyICoqLGxvbmcpKWQyaV9mdW5jLCAodm9pZCgqKSh2b2lkICopKWZyZWVfZnVuYykKLQotI2RlZmluZSBTS01fUEtDUzEyX2RlY3J5cHRfZDJpKHR5cGUsIGFsZ29yLCBkMmlfZnVuYywgZnJlZV9mdW5jLCBwYXNzLCBwYXNzbGVuLCBvY3QsIHNlcSkgXAotCSgoU1RBQ0sgKilQS0NTMTJfZGVjcnlwdF9kMmkoYWxnb3IsKGNoYXIgKigqKSgpKWQyaV9mdW5jLCAodm9pZCgqKSh2b2lkICopKWZyZWVfZnVuYyxwYXNzLHBhc3NsZW4sb2N0LHNlcSkpCi0KLSNlbmRpZgotCiAvKiBUaGlzIGJsb2NrIG9mIGRlZmluZXMgaXMgdXBkYXRlZCBieSB1dGlsL21rc3RhY2sucGwsIHBsZWFzZSBkbyBub3QgdG91Y2ghICovCi0jZGVmaW5lIHNrX0FDQ0VTU19ERVNDUklQVElPTl9uZXcoc3QpIFNLTV9za19uZXcoQUNDRVNTX0RFU0NSSVBUSU9OLCAoc3QpKQorI2RlZmluZSBza19BQ0NFU1NfREVTQ1JJUFRJT05fbmV3KGNtcCkgU0tNX3NrX25ldyhBQ0NFU1NfREVTQ1JJUFRJT04sIChjbXApKQogI2RlZmluZSBza19BQ0NFU1NfREVTQ1JJUFRJT05fbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoQUNDRVNTX0RFU0NSSVBUSU9OKQogI2RlZmluZSBza19BQ0NFU1NfREVTQ1JJUFRJT05fZnJlZShzdCkgU0tNX3NrX2ZyZWUoQUNDRVNTX0RFU0NSSVBUSU9OLCAoc3QpKQogI2RlZmluZSBza19BQ0NFU1NfREVTQ1JJUFRJT05fbnVtKHN0KSBTS01fc2tfbnVtKEFDQ0VTU19ERVNDUklQVElPTiwgKHN0KSkKQEAgLTIzOCw3ICsyMjYsNyBAQAogI2RlZmluZSBza19BQ0NFU1NfREVTQ1JJUFRJT05fc29ydChzdCkgU0tNX3NrX3NvcnQoQUNDRVNTX0RFU0NSSVBUSU9OLCAoc3QpKQogI2RlZmluZSBza19BQ0NFU1NfREVTQ1JJUFRJT05faXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKEFDQ0VTU19ERVNDUklQVElPTiwgKHN0KSkKIAotI2RlZmluZSBza19BU0lkT3JSYW5nZV9uZXcoc3QpIFNLTV9za19uZXcoQVNJZE9yUmFuZ2UsIChzdCkpCisjZGVmaW5lIHNrX0FTSWRPclJhbmdlX25ldyhjbXApIFNLTV9za19uZXcoQVNJZE9yUmFuZ2UsIChjbXApKQogI2RlZmluZSBza19BU0lkT3JSYW5nZV9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChBU0lkT3JSYW5nZSkKICNkZWZpbmUgc2tfQVNJZE9yUmFuZ2VfZnJlZShzdCkgU0tNX3NrX2ZyZWUoQVNJZE9yUmFuZ2UsIChzdCkpCiAjZGVmaW5lIHNrX0FTSWRPclJhbmdlX251bShzdCkgU0tNX3NrX251bShBU0lkT3JSYW5nZSwgKHN0KSkKQEAgLTI2MCw3ICsyNDgsNyBAQAogI2RlZmluZSBza19BU0lkT3JSYW5nZV9zb3J0KHN0KSBTS01fc2tfc29ydChBU0lkT3JSYW5nZSwgKHN0KSkKICNkZWZpbmUgc2tfQVNJZE9yUmFuZ2VfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKEFTSWRPclJhbmdlLCAoc3QpKQogCi0jZGVmaW5lIHNrX0FTTjFfR0VORVJBTFNUUklOR19uZXcoc3QpIFNLTV9za19uZXcoQVNOMV9HRU5FUkFMU1RSSU5HLCAoc3QpKQorI2RlZmluZSBza19BU04xX0dFTkVSQUxTVFJJTkdfbmV3KGNtcCkgU0tNX3NrX25ldyhBU04xX0dFTkVSQUxTVFJJTkcsIChjbXApKQogI2RlZmluZSBza19BU04xX0dFTkVSQUxTVFJJTkdfbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoQVNOMV9HRU5FUkFMU1RSSU5HKQogI2RlZmluZSBza19BU04xX0dFTkVSQUxTVFJJTkdfZnJlZShzdCkgU0tNX3NrX2ZyZWUoQVNOMV9HRU5FUkFMU1RSSU5HLCAoc3QpKQogI2RlZmluZSBza19BU04xX0dFTkVSQUxTVFJJTkdfbnVtKHN0KSBTS01fc2tfbnVtKEFTTjFfR0VORVJBTFNUUklORywgKHN0KSkKQEAgLTI4Miw3ICsyNzAsNyBAQAogI2RlZmluZSBza19BU04xX0dFTkVSQUxTVFJJTkdfc29ydChzdCkgU0tNX3NrX3NvcnQoQVNOMV9HRU5FUkFMU1RSSU5HLCAoc3QpKQogI2RlZmluZSBza19BU04xX0dFTkVSQUxTVFJJTkdfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKEFTTjFfR0VORVJBTFNUUklORywgKHN0KSkKIAotI2RlZmluZSBza19BU04xX0lOVEVHRVJfbmV3KHN0KSBTS01fc2tfbmV3KEFTTjFfSU5URUdFUiwgKHN0KSkKKyNkZWZpbmUgc2tfQVNOMV9JTlRFR0VSX25ldyhjbXApIFNLTV9za19uZXcoQVNOMV9JTlRFR0VSLCAoY21wKSkKICNkZWZpbmUgc2tfQVNOMV9JTlRFR0VSX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKEFTTjFfSU5URUdFUikKICNkZWZpbmUgc2tfQVNOMV9JTlRFR0VSX2ZyZWUoc3QpIFNLTV9za19mcmVlKEFTTjFfSU5URUdFUiwgKHN0KSkKICNkZWZpbmUgc2tfQVNOMV9JTlRFR0VSX251bShzdCkgU0tNX3NrX251bShBU04xX0lOVEVHRVIsIChzdCkpCkBAIC0zMDQsNyArMjkyLDcgQEAKICNkZWZpbmUgc2tfQVNOMV9JTlRFR0VSX3NvcnQoc3QpIFNLTV9za19zb3J0KEFTTjFfSU5URUdFUiwgKHN0KSkKICNkZWZpbmUgc2tfQVNOMV9JTlRFR0VSX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChBU04xX0lOVEVHRVIsIChzdCkpCiAKLSNkZWZpbmUgc2tfQVNOMV9PQkpFQ1RfbmV3KHN0KSBTS01fc2tfbmV3KEFTTjFfT0JKRUNULCAoc3QpKQorI2RlZmluZSBza19BU04xX09CSkVDVF9uZXcoY21wKSBTS01fc2tfbmV3KEFTTjFfT0JKRUNULCAoY21wKSkKICNkZWZpbmUgc2tfQVNOMV9PQkpFQ1RfbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoQVNOMV9PQkpFQ1QpCiAjZGVmaW5lIHNrX0FTTjFfT0JKRUNUX2ZyZWUoc3QpIFNLTV9za19mcmVlKEFTTjFfT0JKRUNULCAoc3QpKQogI2RlZmluZSBza19BU04xX09CSkVDVF9udW0oc3QpIFNLTV9za19udW0oQVNOMV9PQkpFQ1QsIChzdCkpCkBAIC0zMjYsNyArMzE0LDcgQEAKICNkZWZpbmUgc2tfQVNOMV9PQkpFQ1Rfc29ydChzdCkgU0tNX3NrX3NvcnQoQVNOMV9PQkpFQ1QsIChzdCkpCiAjZGVmaW5lIHNrX0FTTjFfT0JKRUNUX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChBU04xX09CSkVDVCwgKHN0KSkKIAotI2RlZmluZSBza19BU04xX1NUUklOR19UQUJMRV9uZXcoc3QpIFNLTV9za19uZXcoQVNOMV9TVFJJTkdfVEFCTEUsIChzdCkpCisjZGVmaW5lIHNrX0FTTjFfU1RSSU5HX1RBQkxFX25ldyhjbXApIFNLTV9za19uZXcoQVNOMV9TVFJJTkdfVEFCTEUsIChjbXApKQogI2RlZmluZSBza19BU04xX1NUUklOR19UQUJMRV9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChBU04xX1NUUklOR19UQUJMRSkKICNkZWZpbmUgc2tfQVNOMV9TVFJJTkdfVEFCTEVfZnJlZShzdCkgU0tNX3NrX2ZyZWUoQVNOMV9TVFJJTkdfVEFCTEUsIChzdCkpCiAjZGVmaW5lIHNrX0FTTjFfU1RSSU5HX1RBQkxFX251bShzdCkgU0tNX3NrX251bShBU04xX1NUUklOR19UQUJMRSwgKHN0KSkKQEAgLTM0OCw3ICszMzYsNyBAQAogI2RlZmluZSBza19BU04xX1NUUklOR19UQUJMRV9zb3J0KHN0KSBTS01fc2tfc29ydChBU04xX1NUUklOR19UQUJMRSwgKHN0KSkKICNkZWZpbmUgc2tfQVNOMV9TVFJJTkdfVEFCTEVfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKEFTTjFfU1RSSU5HX1RBQkxFLCAoc3QpKQogCi0jZGVmaW5lIHNrX0FTTjFfVFlQRV9uZXcoc3QpIFNLTV9za19uZXcoQVNOMV9UWVBFLCAoc3QpKQorI2RlZmluZSBza19BU04xX1RZUEVfbmV3KGNtcCkgU0tNX3NrX25ldyhBU04xX1RZUEUsIChjbXApKQogI2RlZmluZSBza19BU04xX1RZUEVfbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoQVNOMV9UWVBFKQogI2RlZmluZSBza19BU04xX1RZUEVfZnJlZShzdCkgU0tNX3NrX2ZyZWUoQVNOMV9UWVBFLCAoc3QpKQogI2RlZmluZSBza19BU04xX1RZUEVfbnVtKHN0KSBTS01fc2tfbnVtKEFTTjFfVFlQRSwgKHN0KSkKQEAgLTM3MCw3ICszNTgsMjkgQEAKICNkZWZpbmUgc2tfQVNOMV9UWVBFX3NvcnQoc3QpIFNLTV9za19zb3J0KEFTTjFfVFlQRSwgKHN0KSkKICNkZWZpbmUgc2tfQVNOMV9UWVBFX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChBU04xX1RZUEUsIChzdCkpCiAKLSNkZWZpbmUgc2tfQVNOMV9WQUxVRV9uZXcoc3QpIFNLTV9za19uZXcoQVNOMV9WQUxVRSwgKHN0KSkKKyNkZWZpbmUgc2tfQVNOMV9VVEY4U1RSSU5HX25ldyhjbXApIFNLTV9za19uZXcoQVNOMV9VVEY4U1RSSU5HLCAoY21wKSkKKyNkZWZpbmUgc2tfQVNOMV9VVEY4U1RSSU5HX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKEFTTjFfVVRGOFNUUklORykKKyNkZWZpbmUgc2tfQVNOMV9VVEY4U1RSSU5HX2ZyZWUoc3QpIFNLTV9za19mcmVlKEFTTjFfVVRGOFNUUklORywgKHN0KSkKKyNkZWZpbmUgc2tfQVNOMV9VVEY4U1RSSU5HX251bShzdCkgU0tNX3NrX251bShBU04xX1VURjhTVFJJTkcsIChzdCkpCisjZGVmaW5lIHNrX0FTTjFfVVRGOFNUUklOR192YWx1ZShzdCwgaSkgU0tNX3NrX3ZhbHVlKEFTTjFfVVRGOFNUUklORywgKHN0KSwgKGkpKQorI2RlZmluZSBza19BU04xX1VURjhTVFJJTkdfc2V0KHN0LCBpLCB2YWwpIFNLTV9za19zZXQoQVNOMV9VVEY4U1RSSU5HLCAoc3QpLCAoaSksICh2YWwpKQorI2RlZmluZSBza19BU04xX1VURjhTVFJJTkdfemVybyhzdCkgU0tNX3NrX3plcm8oQVNOMV9VVEY4U1RSSU5HLCAoc3QpKQorI2RlZmluZSBza19BU04xX1VURjhTVFJJTkdfcHVzaChzdCwgdmFsKSBTS01fc2tfcHVzaChBU04xX1VURjhTVFJJTkcsIChzdCksICh2YWwpKQorI2RlZmluZSBza19BU04xX1VURjhTVFJJTkdfdW5zaGlmdChzdCwgdmFsKSBTS01fc2tfdW5zaGlmdChBU04xX1VURjhTVFJJTkcsIChzdCksICh2YWwpKQorI2RlZmluZSBza19BU04xX1VURjhTVFJJTkdfZmluZChzdCwgdmFsKSBTS01fc2tfZmluZChBU04xX1VURjhTVFJJTkcsIChzdCksICh2YWwpKQorI2RlZmluZSBza19BU04xX1VURjhTVFJJTkdfZmluZF9leChzdCwgdmFsKSBTS01fc2tfZmluZF9leChBU04xX1VURjhTVFJJTkcsIChzdCksICh2YWwpKQorI2RlZmluZSBza19BU04xX1VURjhTVFJJTkdfZGVsZXRlKHN0LCBpKSBTS01fc2tfZGVsZXRlKEFTTjFfVVRGOFNUUklORywgKHN0KSwgKGkpKQorI2RlZmluZSBza19BU04xX1VURjhTVFJJTkdfZGVsZXRlX3B0cihzdCwgcHRyKSBTS01fc2tfZGVsZXRlX3B0cihBU04xX1VURjhTVFJJTkcsIChzdCksIChwdHIpKQorI2RlZmluZSBza19BU04xX1VURjhTVFJJTkdfaW5zZXJ0KHN0LCB2YWwsIGkpIFNLTV9za19pbnNlcnQoQVNOMV9VVEY4U1RSSU5HLCAoc3QpLCAodmFsKSwgKGkpKQorI2RlZmluZSBza19BU04xX1VURjhTVFJJTkdfc2V0X2NtcF9mdW5jKHN0LCBjbXApIFNLTV9za19zZXRfY21wX2Z1bmMoQVNOMV9VVEY4U1RSSU5HLCAoc3QpLCAoY21wKSkKKyNkZWZpbmUgc2tfQVNOMV9VVEY4U1RSSU5HX2R1cChzdCkgU0tNX3NrX2R1cChBU04xX1VURjhTVFJJTkcsIHN0KQorI2RlZmluZSBza19BU04xX1VURjhTVFJJTkdfcG9wX2ZyZWUoc3QsIGZyZWVfZnVuYykgU0tNX3NrX3BvcF9mcmVlKEFTTjFfVVRGOFNUUklORywgKHN0KSwgKGZyZWVfZnVuYykpCisjZGVmaW5lIHNrX0FTTjFfVVRGOFNUUklOR19zaGlmdChzdCkgU0tNX3NrX3NoaWZ0KEFTTjFfVVRGOFNUUklORywgKHN0KSkKKyNkZWZpbmUgc2tfQVNOMV9VVEY4U1RSSU5HX3BvcChzdCkgU0tNX3NrX3BvcChBU04xX1VURjhTVFJJTkcsIChzdCkpCisjZGVmaW5lIHNrX0FTTjFfVVRGOFNUUklOR19zb3J0KHN0KSBTS01fc2tfc29ydChBU04xX1VURjhTVFJJTkcsIChzdCkpCisjZGVmaW5lIHNrX0FTTjFfVVRGOFNUUklOR19pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoQVNOMV9VVEY4U1RSSU5HLCAoc3QpKQorCisjZGVmaW5lIHNrX0FTTjFfVkFMVUVfbmV3KGNtcCkgU0tNX3NrX25ldyhBU04xX1ZBTFVFLCAoY21wKSkKICNkZWZpbmUgc2tfQVNOMV9WQUxVRV9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChBU04xX1ZBTFVFKQogI2RlZmluZSBza19BU04xX1ZBTFVFX2ZyZWUoc3QpIFNLTV9za19mcmVlKEFTTjFfVkFMVUUsIChzdCkpCiAjZGVmaW5lIHNrX0FTTjFfVkFMVUVfbnVtKHN0KSBTS01fc2tfbnVtKEFTTjFfVkFMVUUsIChzdCkpCkBAIC0zOTIsNyArNDAyLDcgQEAKICNkZWZpbmUgc2tfQVNOMV9WQUxVRV9zb3J0KHN0KSBTS01fc2tfc29ydChBU04xX1ZBTFVFLCAoc3QpKQogI2RlZmluZSBza19BU04xX1ZBTFVFX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChBU04xX1ZBTFVFLCAoc3QpKQogCi0jZGVmaW5lIHNrX0JJT19uZXcoc3QpIFNLTV9za19uZXcoQklPLCAoc3QpKQorI2RlZmluZSBza19CSU9fbmV3KGNtcCkgU0tNX3NrX25ldyhCSU8sIChjbXApKQogI2RlZmluZSBza19CSU9fbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoQklPKQogI2RlZmluZSBza19CSU9fZnJlZShzdCkgU0tNX3NrX2ZyZWUoQklPLCAoc3QpKQogI2RlZmluZSBza19CSU9fbnVtKHN0KSBTS01fc2tfbnVtKEJJTywgKHN0KSkKQEAgLTQxNCw3ICs0MjQsNTEgQEAKICNkZWZpbmUgc2tfQklPX3NvcnQoc3QpIFNLTV9za19zb3J0KEJJTywgKHN0KSkKICNkZWZpbmUgc2tfQklPX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChCSU8sIChzdCkpCiAKLSNkZWZpbmUgc2tfQ01TX0NlcnRpZmljYXRlQ2hvaWNlc19uZXcoc3QpIFNLTV9za19uZXcoQ01TX0NlcnRpZmljYXRlQ2hvaWNlcywgKHN0KSkKKyNkZWZpbmUgc2tfQllfRElSX0VOVFJZX25ldyhjbXApIFNLTV9za19uZXcoQllfRElSX0VOVFJZLCAoY21wKSkKKyNkZWZpbmUgc2tfQllfRElSX0VOVFJZX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKEJZX0RJUl9FTlRSWSkKKyNkZWZpbmUgc2tfQllfRElSX0VOVFJZX2ZyZWUoc3QpIFNLTV9za19mcmVlKEJZX0RJUl9FTlRSWSwgKHN0KSkKKyNkZWZpbmUgc2tfQllfRElSX0VOVFJZX251bShzdCkgU0tNX3NrX251bShCWV9ESVJfRU5UUlksIChzdCkpCisjZGVmaW5lIHNrX0JZX0RJUl9FTlRSWV92YWx1ZShzdCwgaSkgU0tNX3NrX3ZhbHVlKEJZX0RJUl9FTlRSWSwgKHN0KSwgKGkpKQorI2RlZmluZSBza19CWV9ESVJfRU5UUllfc2V0KHN0LCBpLCB2YWwpIFNLTV9za19zZXQoQllfRElSX0VOVFJZLCAoc3QpLCAoaSksICh2YWwpKQorI2RlZmluZSBza19CWV9ESVJfRU5UUllfemVybyhzdCkgU0tNX3NrX3plcm8oQllfRElSX0VOVFJZLCAoc3QpKQorI2RlZmluZSBza19CWV9ESVJfRU5UUllfcHVzaChzdCwgdmFsKSBTS01fc2tfcHVzaChCWV9ESVJfRU5UUlksIChzdCksICh2YWwpKQorI2RlZmluZSBza19CWV9ESVJfRU5UUllfdW5zaGlmdChzdCwgdmFsKSBTS01fc2tfdW5zaGlmdChCWV9ESVJfRU5UUlksIChzdCksICh2YWwpKQorI2RlZmluZSBza19CWV9ESVJfRU5UUllfZmluZChzdCwgdmFsKSBTS01fc2tfZmluZChCWV9ESVJfRU5UUlksIChzdCksICh2YWwpKQorI2RlZmluZSBza19CWV9ESVJfRU5UUllfZmluZF9leChzdCwgdmFsKSBTS01fc2tfZmluZF9leChCWV9ESVJfRU5UUlksIChzdCksICh2YWwpKQorI2RlZmluZSBza19CWV9ESVJfRU5UUllfZGVsZXRlKHN0LCBpKSBTS01fc2tfZGVsZXRlKEJZX0RJUl9FTlRSWSwgKHN0KSwgKGkpKQorI2RlZmluZSBza19CWV9ESVJfRU5UUllfZGVsZXRlX3B0cihzdCwgcHRyKSBTS01fc2tfZGVsZXRlX3B0cihCWV9ESVJfRU5UUlksIChzdCksIChwdHIpKQorI2RlZmluZSBza19CWV9ESVJfRU5UUllfaW5zZXJ0KHN0LCB2YWwsIGkpIFNLTV9za19pbnNlcnQoQllfRElSX0VOVFJZLCAoc3QpLCAodmFsKSwgKGkpKQorI2RlZmluZSBza19CWV9ESVJfRU5UUllfc2V0X2NtcF9mdW5jKHN0LCBjbXApIFNLTV9za19zZXRfY21wX2Z1bmMoQllfRElSX0VOVFJZLCAoc3QpLCAoY21wKSkKKyNkZWZpbmUgc2tfQllfRElSX0VOVFJZX2R1cChzdCkgU0tNX3NrX2R1cChCWV9ESVJfRU5UUlksIHN0KQorI2RlZmluZSBza19CWV9ESVJfRU5UUllfcG9wX2ZyZWUoc3QsIGZyZWVfZnVuYykgU0tNX3NrX3BvcF9mcmVlKEJZX0RJUl9FTlRSWSwgKHN0KSwgKGZyZWVfZnVuYykpCisjZGVmaW5lIHNrX0JZX0RJUl9FTlRSWV9zaGlmdChzdCkgU0tNX3NrX3NoaWZ0KEJZX0RJUl9FTlRSWSwgKHN0KSkKKyNkZWZpbmUgc2tfQllfRElSX0VOVFJZX3BvcChzdCkgU0tNX3NrX3BvcChCWV9ESVJfRU5UUlksIChzdCkpCisjZGVmaW5lIHNrX0JZX0RJUl9FTlRSWV9zb3J0KHN0KSBTS01fc2tfc29ydChCWV9ESVJfRU5UUlksIChzdCkpCisjZGVmaW5lIHNrX0JZX0RJUl9FTlRSWV9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoQllfRElSX0VOVFJZLCAoc3QpKQorCisjZGVmaW5lIHNrX0JZX0RJUl9IQVNIX25ldyhjbXApIFNLTV9za19uZXcoQllfRElSX0hBU0gsIChjbXApKQorI2RlZmluZSBza19CWV9ESVJfSEFTSF9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChCWV9ESVJfSEFTSCkKKyNkZWZpbmUgc2tfQllfRElSX0hBU0hfZnJlZShzdCkgU0tNX3NrX2ZyZWUoQllfRElSX0hBU0gsIChzdCkpCisjZGVmaW5lIHNrX0JZX0RJUl9IQVNIX251bShzdCkgU0tNX3NrX251bShCWV9ESVJfSEFTSCwgKHN0KSkKKyNkZWZpbmUgc2tfQllfRElSX0hBU0hfdmFsdWUoc3QsIGkpIFNLTV9za192YWx1ZShCWV9ESVJfSEFTSCwgKHN0KSwgKGkpKQorI2RlZmluZSBza19CWV9ESVJfSEFTSF9zZXQoc3QsIGksIHZhbCkgU0tNX3NrX3NldChCWV9ESVJfSEFTSCwgKHN0KSwgKGkpLCAodmFsKSkKKyNkZWZpbmUgc2tfQllfRElSX0hBU0hfemVybyhzdCkgU0tNX3NrX3plcm8oQllfRElSX0hBU0gsIChzdCkpCisjZGVmaW5lIHNrX0JZX0RJUl9IQVNIX3B1c2goc3QsIHZhbCkgU0tNX3NrX3B1c2goQllfRElSX0hBU0gsIChzdCksICh2YWwpKQorI2RlZmluZSBza19CWV9ESVJfSEFTSF91bnNoaWZ0KHN0LCB2YWwpIFNLTV9za191bnNoaWZ0KEJZX0RJUl9IQVNILCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfQllfRElSX0hBU0hfZmluZChzdCwgdmFsKSBTS01fc2tfZmluZChCWV9ESVJfSEFTSCwgKHN0KSwgKHZhbCkpCisjZGVmaW5lIHNrX0JZX0RJUl9IQVNIX2ZpbmRfZXgoc3QsIHZhbCkgU0tNX3NrX2ZpbmRfZXgoQllfRElSX0hBU0gsIChzdCksICh2YWwpKQorI2RlZmluZSBza19CWV9ESVJfSEFTSF9kZWxldGUoc3QsIGkpIFNLTV9za19kZWxldGUoQllfRElSX0hBU0gsIChzdCksIChpKSkKKyNkZWZpbmUgc2tfQllfRElSX0hBU0hfZGVsZXRlX3B0cihzdCwgcHRyKSBTS01fc2tfZGVsZXRlX3B0cihCWV9ESVJfSEFTSCwgKHN0KSwgKHB0cikpCisjZGVmaW5lIHNrX0JZX0RJUl9IQVNIX2luc2VydChzdCwgdmFsLCBpKSBTS01fc2tfaW5zZXJ0KEJZX0RJUl9IQVNILCAoc3QpLCAodmFsKSwgKGkpKQorI2RlZmluZSBza19CWV9ESVJfSEFTSF9zZXRfY21wX2Z1bmMoc3QsIGNtcCkgU0tNX3NrX3NldF9jbXBfZnVuYyhCWV9ESVJfSEFTSCwgKHN0KSwgKGNtcCkpCisjZGVmaW5lIHNrX0JZX0RJUl9IQVNIX2R1cChzdCkgU0tNX3NrX2R1cChCWV9ESVJfSEFTSCwgc3QpCisjZGVmaW5lIHNrX0JZX0RJUl9IQVNIX3BvcF9mcmVlKHN0LCBmcmVlX2Z1bmMpIFNLTV9za19wb3BfZnJlZShCWV9ESVJfSEFTSCwgKHN0KSwgKGZyZWVfZnVuYykpCisjZGVmaW5lIHNrX0JZX0RJUl9IQVNIX3NoaWZ0KHN0KSBTS01fc2tfc2hpZnQoQllfRElSX0hBU0gsIChzdCkpCisjZGVmaW5lIHNrX0JZX0RJUl9IQVNIX3BvcChzdCkgU0tNX3NrX3BvcChCWV9ESVJfSEFTSCwgKHN0KSkKKyNkZWZpbmUgc2tfQllfRElSX0hBU0hfc29ydChzdCkgU0tNX3NrX3NvcnQoQllfRElSX0hBU0gsIChzdCkpCisjZGVmaW5lIHNrX0JZX0RJUl9IQVNIX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChCWV9ESVJfSEFTSCwgKHN0KSkKKworI2RlZmluZSBza19DTVNfQ2VydGlmaWNhdGVDaG9pY2VzX25ldyhjbXApIFNLTV9za19uZXcoQ01TX0NlcnRpZmljYXRlQ2hvaWNlcywgKGNtcCkpCiAjZGVmaW5lIHNrX0NNU19DZXJ0aWZpY2F0ZUNob2ljZXNfbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoQ01TX0NlcnRpZmljYXRlQ2hvaWNlcykKICNkZWZpbmUgc2tfQ01TX0NlcnRpZmljYXRlQ2hvaWNlc19mcmVlKHN0KSBTS01fc2tfZnJlZShDTVNfQ2VydGlmaWNhdGVDaG9pY2VzLCAoc3QpKQogI2RlZmluZSBza19DTVNfQ2VydGlmaWNhdGVDaG9pY2VzX251bShzdCkgU0tNX3NrX251bShDTVNfQ2VydGlmaWNhdGVDaG9pY2VzLCAoc3QpKQpAQCAtNDM2LDcgKzQ5MCw3IEBACiAjZGVmaW5lIHNrX0NNU19DZXJ0aWZpY2F0ZUNob2ljZXNfc29ydChzdCkgU0tNX3NrX3NvcnQoQ01TX0NlcnRpZmljYXRlQ2hvaWNlcywgKHN0KSkKICNkZWZpbmUgc2tfQ01TX0NlcnRpZmljYXRlQ2hvaWNlc19pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoQ01TX0NlcnRpZmljYXRlQ2hvaWNlcywgKHN0KSkKIAotI2RlZmluZSBza19DTVNfUmVjaXBpZW50SW5mb19uZXcoc3QpIFNLTV9za19uZXcoQ01TX1JlY2lwaWVudEluZm8sIChzdCkpCisjZGVmaW5lIHNrX0NNU19SZWNpcGllbnRJbmZvX25ldyhjbXApIFNLTV9za19uZXcoQ01TX1JlY2lwaWVudEluZm8sIChjbXApKQogI2RlZmluZSBza19DTVNfUmVjaXBpZW50SW5mb19uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChDTVNfUmVjaXBpZW50SW5mbykKICNkZWZpbmUgc2tfQ01TX1JlY2lwaWVudEluZm9fZnJlZShzdCkgU0tNX3NrX2ZyZWUoQ01TX1JlY2lwaWVudEluZm8sIChzdCkpCiAjZGVmaW5lIHNrX0NNU19SZWNpcGllbnRJbmZvX251bShzdCkgU0tNX3NrX251bShDTVNfUmVjaXBpZW50SW5mbywgKHN0KSkKQEAgLTQ1OCw3ICs1MTIsNyBAQAogI2RlZmluZSBza19DTVNfUmVjaXBpZW50SW5mb19zb3J0KHN0KSBTS01fc2tfc29ydChDTVNfUmVjaXBpZW50SW5mbywgKHN0KSkKICNkZWZpbmUgc2tfQ01TX1JlY2lwaWVudEluZm9faXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKENNU19SZWNpcGllbnRJbmZvLCAoc3QpKQogCi0jZGVmaW5lIHNrX0NNU19SZXZvY2F0aW9uSW5mb0Nob2ljZV9uZXcoc3QpIFNLTV9za19uZXcoQ01TX1Jldm9jYXRpb25JbmZvQ2hvaWNlLCAoc3QpKQorI2RlZmluZSBza19DTVNfUmV2b2NhdGlvbkluZm9DaG9pY2VfbmV3KGNtcCkgU0tNX3NrX25ldyhDTVNfUmV2b2NhdGlvbkluZm9DaG9pY2UsIChjbXApKQogI2RlZmluZSBza19DTVNfUmV2b2NhdGlvbkluZm9DaG9pY2VfbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoQ01TX1Jldm9jYXRpb25JbmZvQ2hvaWNlKQogI2RlZmluZSBza19DTVNfUmV2b2NhdGlvbkluZm9DaG9pY2VfZnJlZShzdCkgU0tNX3NrX2ZyZWUoQ01TX1Jldm9jYXRpb25JbmZvQ2hvaWNlLCAoc3QpKQogI2RlZmluZSBza19DTVNfUmV2b2NhdGlvbkluZm9DaG9pY2VfbnVtKHN0KSBTS01fc2tfbnVtKENNU19SZXZvY2F0aW9uSW5mb0Nob2ljZSwgKHN0KSkKQEAgLTQ4MCw3ICs1MzQsNyBAQAogI2RlZmluZSBza19DTVNfUmV2b2NhdGlvbkluZm9DaG9pY2Vfc29ydChzdCkgU0tNX3NrX3NvcnQoQ01TX1Jldm9jYXRpb25JbmZvQ2hvaWNlLCAoc3QpKQogI2RlZmluZSBza19DTVNfUmV2b2NhdGlvbkluZm9DaG9pY2VfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKENNU19SZXZvY2F0aW9uSW5mb0Nob2ljZSwgKHN0KSkKIAotI2RlZmluZSBza19DTVNfU2lnbmVySW5mb19uZXcoc3QpIFNLTV9za19uZXcoQ01TX1NpZ25lckluZm8sIChzdCkpCisjZGVmaW5lIHNrX0NNU19TaWduZXJJbmZvX25ldyhjbXApIFNLTV9za19uZXcoQ01TX1NpZ25lckluZm8sIChjbXApKQogI2RlZmluZSBza19DTVNfU2lnbmVySW5mb19uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChDTVNfU2lnbmVySW5mbykKICNkZWZpbmUgc2tfQ01TX1NpZ25lckluZm9fZnJlZShzdCkgU0tNX3NrX2ZyZWUoQ01TX1NpZ25lckluZm8sIChzdCkpCiAjZGVmaW5lIHNrX0NNU19TaWduZXJJbmZvX251bShzdCkgU0tNX3NrX251bShDTVNfU2lnbmVySW5mbywgKHN0KSkKQEAgLTUwMiw3ICs1NTYsNyBAQAogI2RlZmluZSBza19DTVNfU2lnbmVySW5mb19zb3J0KHN0KSBTS01fc2tfc29ydChDTVNfU2lnbmVySW5mbywgKHN0KSkKICNkZWZpbmUgc2tfQ01TX1NpZ25lckluZm9faXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKENNU19TaWduZXJJbmZvLCAoc3QpKQogCi0jZGVmaW5lIHNrX0NPTkZfSU1PRFVMRV9uZXcoc3QpIFNLTV9za19uZXcoQ09ORl9JTU9EVUxFLCAoc3QpKQorI2RlZmluZSBza19DT05GX0lNT0RVTEVfbmV3KGNtcCkgU0tNX3NrX25ldyhDT05GX0lNT0RVTEUsIChjbXApKQogI2RlZmluZSBza19DT05GX0lNT0RVTEVfbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoQ09ORl9JTU9EVUxFKQogI2RlZmluZSBza19DT05GX0lNT0RVTEVfZnJlZShzdCkgU0tNX3NrX2ZyZWUoQ09ORl9JTU9EVUxFLCAoc3QpKQogI2RlZmluZSBza19DT05GX0lNT0RVTEVfbnVtKHN0KSBTS01fc2tfbnVtKENPTkZfSU1PRFVMRSwgKHN0KSkKQEAgLTUyNCw3ICs1NzgsNyBAQAogI2RlZmluZSBza19DT05GX0lNT0RVTEVfc29ydChzdCkgU0tNX3NrX3NvcnQoQ09ORl9JTU9EVUxFLCAoc3QpKQogI2RlZmluZSBza19DT05GX0lNT0RVTEVfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKENPTkZfSU1PRFVMRSwgKHN0KSkKIAotI2RlZmluZSBza19DT05GX01PRFVMRV9uZXcoc3QpIFNLTV9za19uZXcoQ09ORl9NT0RVTEUsIChzdCkpCisjZGVmaW5lIHNrX0NPTkZfTU9EVUxFX25ldyhjbXApIFNLTV9za19uZXcoQ09ORl9NT0RVTEUsIChjbXApKQogI2RlZmluZSBza19DT05GX01PRFVMRV9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChDT05GX01PRFVMRSkKICNkZWZpbmUgc2tfQ09ORl9NT0RVTEVfZnJlZShzdCkgU0tNX3NrX2ZyZWUoQ09ORl9NT0RVTEUsIChzdCkpCiAjZGVmaW5lIHNrX0NPTkZfTU9EVUxFX251bShzdCkgU0tNX3NrX251bShDT05GX01PRFVMRSwgKHN0KSkKQEAgLTU0Niw3ICs2MDAsNyBAQAogI2RlZmluZSBza19DT05GX01PRFVMRV9zb3J0KHN0KSBTS01fc2tfc29ydChDT05GX01PRFVMRSwgKHN0KSkKICNkZWZpbmUgc2tfQ09ORl9NT0RVTEVfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKENPTkZfTU9EVUxFLCAoc3QpKQogCi0jZGVmaW5lIHNrX0NPTkZfVkFMVUVfbmV3KHN0KSBTS01fc2tfbmV3KENPTkZfVkFMVUUsIChzdCkpCisjZGVmaW5lIHNrX0NPTkZfVkFMVUVfbmV3KGNtcCkgU0tNX3NrX25ldyhDT05GX1ZBTFVFLCAoY21wKSkKICNkZWZpbmUgc2tfQ09ORl9WQUxVRV9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChDT05GX1ZBTFVFKQogI2RlZmluZSBza19DT05GX1ZBTFVFX2ZyZWUoc3QpIFNLTV9za19mcmVlKENPTkZfVkFMVUUsIChzdCkpCiAjZGVmaW5lIHNrX0NPTkZfVkFMVUVfbnVtKHN0KSBTS01fc2tfbnVtKENPTkZfVkFMVUUsIChzdCkpCkBAIC01NjgsNyArNjIyLDcgQEAKICNkZWZpbmUgc2tfQ09ORl9WQUxVRV9zb3J0KHN0KSBTS01fc2tfc29ydChDT05GX1ZBTFVFLCAoc3QpKQogI2RlZmluZSBza19DT05GX1ZBTFVFX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChDT05GX1ZBTFVFLCAoc3QpKQogCi0jZGVmaW5lIHNrX0NSWVBUT19FWF9EQVRBX0ZVTkNTX25ldyhzdCkgU0tNX3NrX25ldyhDUllQVE9fRVhfREFUQV9GVU5DUywgKHN0KSkKKyNkZWZpbmUgc2tfQ1JZUFRPX0VYX0RBVEFfRlVOQ1NfbmV3KGNtcCkgU0tNX3NrX25ldyhDUllQVE9fRVhfREFUQV9GVU5DUywgKGNtcCkpCiAjZGVmaW5lIHNrX0NSWVBUT19FWF9EQVRBX0ZVTkNTX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKENSWVBUT19FWF9EQVRBX0ZVTkNTKQogI2RlZmluZSBza19DUllQVE9fRVhfREFUQV9GVU5DU19mcmVlKHN0KSBTS01fc2tfZnJlZShDUllQVE9fRVhfREFUQV9GVU5DUywgKHN0KSkKICNkZWZpbmUgc2tfQ1JZUFRPX0VYX0RBVEFfRlVOQ1NfbnVtKHN0KSBTS01fc2tfbnVtKENSWVBUT19FWF9EQVRBX0ZVTkNTLCAoc3QpKQpAQCAtNTkwLDcgKzY0NCw3IEBACiAjZGVmaW5lIHNrX0NSWVBUT19FWF9EQVRBX0ZVTkNTX3NvcnQoc3QpIFNLTV9za19zb3J0KENSWVBUT19FWF9EQVRBX0ZVTkNTLCAoc3QpKQogI2RlZmluZSBza19DUllQVE9fRVhfREFUQV9GVU5DU19pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoQ1JZUFRPX0VYX0RBVEFfRlVOQ1MsIChzdCkpCiAKLSNkZWZpbmUgc2tfQ1JZUFRPX2R5bmxvY2tfbmV3KHN0KSBTS01fc2tfbmV3KENSWVBUT19keW5sb2NrLCAoc3QpKQorI2RlZmluZSBza19DUllQVE9fZHlubG9ja19uZXcoY21wKSBTS01fc2tfbmV3KENSWVBUT19keW5sb2NrLCAoY21wKSkKICNkZWZpbmUgc2tfQ1JZUFRPX2R5bmxvY2tfbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoQ1JZUFRPX2R5bmxvY2spCiAjZGVmaW5lIHNrX0NSWVBUT19keW5sb2NrX2ZyZWUoc3QpIFNLTV9za19mcmVlKENSWVBUT19keW5sb2NrLCAoc3QpKQogI2RlZmluZSBza19DUllQVE9fZHlubG9ja19udW0oc3QpIFNLTV9za19udW0oQ1JZUFRPX2R5bmxvY2ssIChzdCkpCkBAIC02MTIsNyArNjY2LDcgQEAKICNkZWZpbmUgc2tfQ1JZUFRPX2R5bmxvY2tfc29ydChzdCkgU0tNX3NrX3NvcnQoQ1JZUFRPX2R5bmxvY2ssIChzdCkpCiAjZGVmaW5lIHNrX0NSWVBUT19keW5sb2NrX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChDUllQVE9fZHlubG9jaywgKHN0KSkKIAotI2RlZmluZSBza19ESVNUX1BPSU5UX25ldyhzdCkgU0tNX3NrX25ldyhESVNUX1BPSU5ULCAoc3QpKQorI2RlZmluZSBza19ESVNUX1BPSU5UX25ldyhjbXApIFNLTV9za19uZXcoRElTVF9QT0lOVCwgKGNtcCkpCiAjZGVmaW5lIHNrX0RJU1RfUE9JTlRfbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoRElTVF9QT0lOVCkKICNkZWZpbmUgc2tfRElTVF9QT0lOVF9mcmVlKHN0KSBTS01fc2tfZnJlZShESVNUX1BPSU5ULCAoc3QpKQogI2RlZmluZSBza19ESVNUX1BPSU5UX251bShzdCkgU0tNX3NrX251bShESVNUX1BPSU5ULCAoc3QpKQpAQCAtNjM0LDcgKzY4OCw3IEBACiAjZGVmaW5lIHNrX0RJU1RfUE9JTlRfc29ydChzdCkgU0tNX3NrX3NvcnQoRElTVF9QT0lOVCwgKHN0KSkKICNkZWZpbmUgc2tfRElTVF9QT0lOVF9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoRElTVF9QT0lOVCwgKHN0KSkKIAotI2RlZmluZSBza19FTkdJTkVfbmV3KHN0KSBTS01fc2tfbmV3KEVOR0lORSwgKHN0KSkKKyNkZWZpbmUgc2tfRU5HSU5FX25ldyhjbXApIFNLTV9za19uZXcoRU5HSU5FLCAoY21wKSkKICNkZWZpbmUgc2tfRU5HSU5FX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKEVOR0lORSkKICNkZWZpbmUgc2tfRU5HSU5FX2ZyZWUoc3QpIFNLTV9za19mcmVlKEVOR0lORSwgKHN0KSkKICNkZWZpbmUgc2tfRU5HSU5FX251bShzdCkgU0tNX3NrX251bShFTkdJTkUsIChzdCkpCkBAIC02NTYsNyArNzEwLDcgQEAKICNkZWZpbmUgc2tfRU5HSU5FX3NvcnQoc3QpIFNLTV9za19zb3J0KEVOR0lORSwgKHN0KSkKICNkZWZpbmUgc2tfRU5HSU5FX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChFTkdJTkUsIChzdCkpCiAKLSNkZWZpbmUgc2tfRU5HSU5FX0NMRUFOVVBfSVRFTV9uZXcoc3QpIFNLTV9za19uZXcoRU5HSU5FX0NMRUFOVVBfSVRFTSwgKHN0KSkKKyNkZWZpbmUgc2tfRU5HSU5FX0NMRUFOVVBfSVRFTV9uZXcoY21wKSBTS01fc2tfbmV3KEVOR0lORV9DTEVBTlVQX0lURU0sIChjbXApKQogI2RlZmluZSBza19FTkdJTkVfQ0xFQU5VUF9JVEVNX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKEVOR0lORV9DTEVBTlVQX0lURU0pCiAjZGVmaW5lIHNrX0VOR0lORV9DTEVBTlVQX0lURU1fZnJlZShzdCkgU0tNX3NrX2ZyZWUoRU5HSU5FX0NMRUFOVVBfSVRFTSwgKHN0KSkKICNkZWZpbmUgc2tfRU5HSU5FX0NMRUFOVVBfSVRFTV9udW0oc3QpIFNLTV9za19udW0oRU5HSU5FX0NMRUFOVVBfSVRFTSwgKHN0KSkKQEAgLTY3OCw3ICs3MzIsMTE3IEBACiAjZGVmaW5lIHNrX0VOR0lORV9DTEVBTlVQX0lURU1fc29ydChzdCkgU0tNX3NrX3NvcnQoRU5HSU5FX0NMRUFOVVBfSVRFTSwgKHN0KSkKICNkZWZpbmUgc2tfRU5HSU5FX0NMRUFOVVBfSVRFTV9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoRU5HSU5FX0NMRUFOVVBfSVRFTSwgKHN0KSkKIAotI2RlZmluZSBza19HRU5FUkFMX05BTUVfbmV3KHN0KSBTS01fc2tfbmV3KEdFTkVSQUxfTkFNRSwgKHN0KSkKKyNkZWZpbmUgc2tfRVNTX0NFUlRfSURfbmV3KGNtcCkgU0tNX3NrX25ldyhFU1NfQ0VSVF9JRCwgKGNtcCkpCisjZGVmaW5lIHNrX0VTU19DRVJUX0lEX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKEVTU19DRVJUX0lEKQorI2RlZmluZSBza19FU1NfQ0VSVF9JRF9mcmVlKHN0KSBTS01fc2tfZnJlZShFU1NfQ0VSVF9JRCwgKHN0KSkKKyNkZWZpbmUgc2tfRVNTX0NFUlRfSURfbnVtKHN0KSBTS01fc2tfbnVtKEVTU19DRVJUX0lELCAoc3QpKQorI2RlZmluZSBza19FU1NfQ0VSVF9JRF92YWx1ZShzdCwgaSkgU0tNX3NrX3ZhbHVlKEVTU19DRVJUX0lELCAoc3QpLCAoaSkpCisjZGVmaW5lIHNrX0VTU19DRVJUX0lEX3NldChzdCwgaSwgdmFsKSBTS01fc2tfc2V0KEVTU19DRVJUX0lELCAoc3QpLCAoaSksICh2YWwpKQorI2RlZmluZSBza19FU1NfQ0VSVF9JRF96ZXJvKHN0KSBTS01fc2tfemVybyhFU1NfQ0VSVF9JRCwgKHN0KSkKKyNkZWZpbmUgc2tfRVNTX0NFUlRfSURfcHVzaChzdCwgdmFsKSBTS01fc2tfcHVzaChFU1NfQ0VSVF9JRCwgKHN0KSwgKHZhbCkpCisjZGVmaW5lIHNrX0VTU19DRVJUX0lEX3Vuc2hpZnQoc3QsIHZhbCkgU0tNX3NrX3Vuc2hpZnQoRVNTX0NFUlRfSUQsIChzdCksICh2YWwpKQorI2RlZmluZSBza19FU1NfQ0VSVF9JRF9maW5kKHN0LCB2YWwpIFNLTV9za19maW5kKEVTU19DRVJUX0lELCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfRVNTX0NFUlRfSURfZmluZF9leChzdCwgdmFsKSBTS01fc2tfZmluZF9leChFU1NfQ0VSVF9JRCwgKHN0KSwgKHZhbCkpCisjZGVmaW5lIHNrX0VTU19DRVJUX0lEX2RlbGV0ZShzdCwgaSkgU0tNX3NrX2RlbGV0ZShFU1NfQ0VSVF9JRCwgKHN0KSwgKGkpKQorI2RlZmluZSBza19FU1NfQ0VSVF9JRF9kZWxldGVfcHRyKHN0LCBwdHIpIFNLTV9za19kZWxldGVfcHRyKEVTU19DRVJUX0lELCAoc3QpLCAocHRyKSkKKyNkZWZpbmUgc2tfRVNTX0NFUlRfSURfaW5zZXJ0KHN0LCB2YWwsIGkpIFNLTV9za19pbnNlcnQoRVNTX0NFUlRfSUQsIChzdCksICh2YWwpLCAoaSkpCisjZGVmaW5lIHNrX0VTU19DRVJUX0lEX3NldF9jbXBfZnVuYyhzdCwgY21wKSBTS01fc2tfc2V0X2NtcF9mdW5jKEVTU19DRVJUX0lELCAoc3QpLCAoY21wKSkKKyNkZWZpbmUgc2tfRVNTX0NFUlRfSURfZHVwKHN0KSBTS01fc2tfZHVwKEVTU19DRVJUX0lELCBzdCkKKyNkZWZpbmUgc2tfRVNTX0NFUlRfSURfcG9wX2ZyZWUoc3QsIGZyZWVfZnVuYykgU0tNX3NrX3BvcF9mcmVlKEVTU19DRVJUX0lELCAoc3QpLCAoZnJlZV9mdW5jKSkKKyNkZWZpbmUgc2tfRVNTX0NFUlRfSURfc2hpZnQoc3QpIFNLTV9za19zaGlmdChFU1NfQ0VSVF9JRCwgKHN0KSkKKyNkZWZpbmUgc2tfRVNTX0NFUlRfSURfcG9wKHN0KSBTS01fc2tfcG9wKEVTU19DRVJUX0lELCAoc3QpKQorI2RlZmluZSBza19FU1NfQ0VSVF9JRF9zb3J0KHN0KSBTS01fc2tfc29ydChFU1NfQ0VSVF9JRCwgKHN0KSkKKyNkZWZpbmUgc2tfRVNTX0NFUlRfSURfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKEVTU19DRVJUX0lELCAoc3QpKQorCisjZGVmaW5lIHNrX0VWUF9NRF9uZXcoY21wKSBTS01fc2tfbmV3KEVWUF9NRCwgKGNtcCkpCisjZGVmaW5lIHNrX0VWUF9NRF9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChFVlBfTUQpCisjZGVmaW5lIHNrX0VWUF9NRF9mcmVlKHN0KSBTS01fc2tfZnJlZShFVlBfTUQsIChzdCkpCisjZGVmaW5lIHNrX0VWUF9NRF9udW0oc3QpIFNLTV9za19udW0oRVZQX01ELCAoc3QpKQorI2RlZmluZSBza19FVlBfTURfdmFsdWUoc3QsIGkpIFNLTV9za192YWx1ZShFVlBfTUQsIChzdCksIChpKSkKKyNkZWZpbmUgc2tfRVZQX01EX3NldChzdCwgaSwgdmFsKSBTS01fc2tfc2V0KEVWUF9NRCwgKHN0KSwgKGkpLCAodmFsKSkKKyNkZWZpbmUgc2tfRVZQX01EX3plcm8oc3QpIFNLTV9za196ZXJvKEVWUF9NRCwgKHN0KSkKKyNkZWZpbmUgc2tfRVZQX01EX3B1c2goc3QsIHZhbCkgU0tNX3NrX3B1c2goRVZQX01ELCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfRVZQX01EX3Vuc2hpZnQoc3QsIHZhbCkgU0tNX3NrX3Vuc2hpZnQoRVZQX01ELCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfRVZQX01EX2ZpbmQoc3QsIHZhbCkgU0tNX3NrX2ZpbmQoRVZQX01ELCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfRVZQX01EX2ZpbmRfZXgoc3QsIHZhbCkgU0tNX3NrX2ZpbmRfZXgoRVZQX01ELCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfRVZQX01EX2RlbGV0ZShzdCwgaSkgU0tNX3NrX2RlbGV0ZShFVlBfTUQsIChzdCksIChpKSkKKyNkZWZpbmUgc2tfRVZQX01EX2RlbGV0ZV9wdHIoc3QsIHB0cikgU0tNX3NrX2RlbGV0ZV9wdHIoRVZQX01ELCAoc3QpLCAocHRyKSkKKyNkZWZpbmUgc2tfRVZQX01EX2luc2VydChzdCwgdmFsLCBpKSBTS01fc2tfaW5zZXJ0KEVWUF9NRCwgKHN0KSwgKHZhbCksIChpKSkKKyNkZWZpbmUgc2tfRVZQX01EX3NldF9jbXBfZnVuYyhzdCwgY21wKSBTS01fc2tfc2V0X2NtcF9mdW5jKEVWUF9NRCwgKHN0KSwgKGNtcCkpCisjZGVmaW5lIHNrX0VWUF9NRF9kdXAoc3QpIFNLTV9za19kdXAoRVZQX01ELCBzdCkKKyNkZWZpbmUgc2tfRVZQX01EX3BvcF9mcmVlKHN0LCBmcmVlX2Z1bmMpIFNLTV9za19wb3BfZnJlZShFVlBfTUQsIChzdCksIChmcmVlX2Z1bmMpKQorI2RlZmluZSBza19FVlBfTURfc2hpZnQoc3QpIFNLTV9za19zaGlmdChFVlBfTUQsIChzdCkpCisjZGVmaW5lIHNrX0VWUF9NRF9wb3Aoc3QpIFNLTV9za19wb3AoRVZQX01ELCAoc3QpKQorI2RlZmluZSBza19FVlBfTURfc29ydChzdCkgU0tNX3NrX3NvcnQoRVZQX01ELCAoc3QpKQorI2RlZmluZSBza19FVlBfTURfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKEVWUF9NRCwgKHN0KSkKKworI2RlZmluZSBza19FVlBfUEJFX0NUTF9uZXcoY21wKSBTS01fc2tfbmV3KEVWUF9QQkVfQ1RMLCAoY21wKSkKKyNkZWZpbmUgc2tfRVZQX1BCRV9DVExfbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoRVZQX1BCRV9DVEwpCisjZGVmaW5lIHNrX0VWUF9QQkVfQ1RMX2ZyZWUoc3QpIFNLTV9za19mcmVlKEVWUF9QQkVfQ1RMLCAoc3QpKQorI2RlZmluZSBza19FVlBfUEJFX0NUTF9udW0oc3QpIFNLTV9za19udW0oRVZQX1BCRV9DVEwsIChzdCkpCisjZGVmaW5lIHNrX0VWUF9QQkVfQ1RMX3ZhbHVlKHN0LCBpKSBTS01fc2tfdmFsdWUoRVZQX1BCRV9DVEwsIChzdCksIChpKSkKKyNkZWZpbmUgc2tfRVZQX1BCRV9DVExfc2V0KHN0LCBpLCB2YWwpIFNLTV9za19zZXQoRVZQX1BCRV9DVEwsIChzdCksIChpKSwgKHZhbCkpCisjZGVmaW5lIHNrX0VWUF9QQkVfQ1RMX3plcm8oc3QpIFNLTV9za196ZXJvKEVWUF9QQkVfQ1RMLCAoc3QpKQorI2RlZmluZSBza19FVlBfUEJFX0NUTF9wdXNoKHN0LCB2YWwpIFNLTV9za19wdXNoKEVWUF9QQkVfQ1RMLCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfRVZQX1BCRV9DVExfdW5zaGlmdChzdCwgdmFsKSBTS01fc2tfdW5zaGlmdChFVlBfUEJFX0NUTCwgKHN0KSwgKHZhbCkpCisjZGVmaW5lIHNrX0VWUF9QQkVfQ1RMX2ZpbmQoc3QsIHZhbCkgU0tNX3NrX2ZpbmQoRVZQX1BCRV9DVEwsIChzdCksICh2YWwpKQorI2RlZmluZSBza19FVlBfUEJFX0NUTF9maW5kX2V4KHN0LCB2YWwpIFNLTV9za19maW5kX2V4KEVWUF9QQkVfQ1RMLCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfRVZQX1BCRV9DVExfZGVsZXRlKHN0LCBpKSBTS01fc2tfZGVsZXRlKEVWUF9QQkVfQ1RMLCAoc3QpLCAoaSkpCisjZGVmaW5lIHNrX0VWUF9QQkVfQ1RMX2RlbGV0ZV9wdHIoc3QsIHB0cikgU0tNX3NrX2RlbGV0ZV9wdHIoRVZQX1BCRV9DVEwsIChzdCksIChwdHIpKQorI2RlZmluZSBza19FVlBfUEJFX0NUTF9pbnNlcnQoc3QsIHZhbCwgaSkgU0tNX3NrX2luc2VydChFVlBfUEJFX0NUTCwgKHN0KSwgKHZhbCksIChpKSkKKyNkZWZpbmUgc2tfRVZQX1BCRV9DVExfc2V0X2NtcF9mdW5jKHN0LCBjbXApIFNLTV9za19zZXRfY21wX2Z1bmMoRVZQX1BCRV9DVEwsIChzdCksIChjbXApKQorI2RlZmluZSBza19FVlBfUEJFX0NUTF9kdXAoc3QpIFNLTV9za19kdXAoRVZQX1BCRV9DVEwsIHN0KQorI2RlZmluZSBza19FVlBfUEJFX0NUTF9wb3BfZnJlZShzdCwgZnJlZV9mdW5jKSBTS01fc2tfcG9wX2ZyZWUoRVZQX1BCRV9DVEwsIChzdCksIChmcmVlX2Z1bmMpKQorI2RlZmluZSBza19FVlBfUEJFX0NUTF9zaGlmdChzdCkgU0tNX3NrX3NoaWZ0KEVWUF9QQkVfQ1RMLCAoc3QpKQorI2RlZmluZSBza19FVlBfUEJFX0NUTF9wb3Aoc3QpIFNLTV9za19wb3AoRVZQX1BCRV9DVEwsIChzdCkpCisjZGVmaW5lIHNrX0VWUF9QQkVfQ1RMX3NvcnQoc3QpIFNLTV9za19zb3J0KEVWUF9QQkVfQ1RMLCAoc3QpKQorI2RlZmluZSBza19FVlBfUEJFX0NUTF9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoRVZQX1BCRV9DVEwsIChzdCkpCisKKyNkZWZpbmUgc2tfRVZQX1BLRVlfQVNOMV9NRVRIT0RfbmV3KGNtcCkgU0tNX3NrX25ldyhFVlBfUEtFWV9BU04xX01FVEhPRCwgKGNtcCkpCisjZGVmaW5lIHNrX0VWUF9QS0VZX0FTTjFfTUVUSE9EX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKEVWUF9QS0VZX0FTTjFfTUVUSE9EKQorI2RlZmluZSBza19FVlBfUEtFWV9BU04xX01FVEhPRF9mcmVlKHN0KSBTS01fc2tfZnJlZShFVlBfUEtFWV9BU04xX01FVEhPRCwgKHN0KSkKKyNkZWZpbmUgc2tfRVZQX1BLRVlfQVNOMV9NRVRIT0RfbnVtKHN0KSBTS01fc2tfbnVtKEVWUF9QS0VZX0FTTjFfTUVUSE9ELCAoc3QpKQorI2RlZmluZSBza19FVlBfUEtFWV9BU04xX01FVEhPRF92YWx1ZShzdCwgaSkgU0tNX3NrX3ZhbHVlKEVWUF9QS0VZX0FTTjFfTUVUSE9ELCAoc3QpLCAoaSkpCisjZGVmaW5lIHNrX0VWUF9QS0VZX0FTTjFfTUVUSE9EX3NldChzdCwgaSwgdmFsKSBTS01fc2tfc2V0KEVWUF9QS0VZX0FTTjFfTUVUSE9ELCAoc3QpLCAoaSksICh2YWwpKQorI2RlZmluZSBza19FVlBfUEtFWV9BU04xX01FVEhPRF96ZXJvKHN0KSBTS01fc2tfemVybyhFVlBfUEtFWV9BU04xX01FVEhPRCwgKHN0KSkKKyNkZWZpbmUgc2tfRVZQX1BLRVlfQVNOMV9NRVRIT0RfcHVzaChzdCwgdmFsKSBTS01fc2tfcHVzaChFVlBfUEtFWV9BU04xX01FVEhPRCwgKHN0KSwgKHZhbCkpCisjZGVmaW5lIHNrX0VWUF9QS0VZX0FTTjFfTUVUSE9EX3Vuc2hpZnQoc3QsIHZhbCkgU0tNX3NrX3Vuc2hpZnQoRVZQX1BLRVlfQVNOMV9NRVRIT0QsIChzdCksICh2YWwpKQorI2RlZmluZSBza19FVlBfUEtFWV9BU04xX01FVEhPRF9maW5kKHN0LCB2YWwpIFNLTV9za19maW5kKEVWUF9QS0VZX0FTTjFfTUVUSE9ELCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfRVZQX1BLRVlfQVNOMV9NRVRIT0RfZmluZF9leChzdCwgdmFsKSBTS01fc2tfZmluZF9leChFVlBfUEtFWV9BU04xX01FVEhPRCwgKHN0KSwgKHZhbCkpCisjZGVmaW5lIHNrX0VWUF9QS0VZX0FTTjFfTUVUSE9EX2RlbGV0ZShzdCwgaSkgU0tNX3NrX2RlbGV0ZShFVlBfUEtFWV9BU04xX01FVEhPRCwgKHN0KSwgKGkpKQorI2RlZmluZSBza19FVlBfUEtFWV9BU04xX01FVEhPRF9kZWxldGVfcHRyKHN0LCBwdHIpIFNLTV9za19kZWxldGVfcHRyKEVWUF9QS0VZX0FTTjFfTUVUSE9ELCAoc3QpLCAocHRyKSkKKyNkZWZpbmUgc2tfRVZQX1BLRVlfQVNOMV9NRVRIT0RfaW5zZXJ0KHN0LCB2YWwsIGkpIFNLTV9za19pbnNlcnQoRVZQX1BLRVlfQVNOMV9NRVRIT0QsIChzdCksICh2YWwpLCAoaSkpCisjZGVmaW5lIHNrX0VWUF9QS0VZX0FTTjFfTUVUSE9EX3NldF9jbXBfZnVuYyhzdCwgY21wKSBTS01fc2tfc2V0X2NtcF9mdW5jKEVWUF9QS0VZX0FTTjFfTUVUSE9ELCAoc3QpLCAoY21wKSkKKyNkZWZpbmUgc2tfRVZQX1BLRVlfQVNOMV9NRVRIT0RfZHVwKHN0KSBTS01fc2tfZHVwKEVWUF9QS0VZX0FTTjFfTUVUSE9ELCBzdCkKKyNkZWZpbmUgc2tfRVZQX1BLRVlfQVNOMV9NRVRIT0RfcG9wX2ZyZWUoc3QsIGZyZWVfZnVuYykgU0tNX3NrX3BvcF9mcmVlKEVWUF9QS0VZX0FTTjFfTUVUSE9ELCAoc3QpLCAoZnJlZV9mdW5jKSkKKyNkZWZpbmUgc2tfRVZQX1BLRVlfQVNOMV9NRVRIT0Rfc2hpZnQoc3QpIFNLTV9za19zaGlmdChFVlBfUEtFWV9BU04xX01FVEhPRCwgKHN0KSkKKyNkZWZpbmUgc2tfRVZQX1BLRVlfQVNOMV9NRVRIT0RfcG9wKHN0KSBTS01fc2tfcG9wKEVWUF9QS0VZX0FTTjFfTUVUSE9ELCAoc3QpKQorI2RlZmluZSBza19FVlBfUEtFWV9BU04xX01FVEhPRF9zb3J0KHN0KSBTS01fc2tfc29ydChFVlBfUEtFWV9BU04xX01FVEhPRCwgKHN0KSkKKyNkZWZpbmUgc2tfRVZQX1BLRVlfQVNOMV9NRVRIT0RfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKEVWUF9QS0VZX0FTTjFfTUVUSE9ELCAoc3QpKQorCisjZGVmaW5lIHNrX0VWUF9QS0VZX01FVEhPRF9uZXcoY21wKSBTS01fc2tfbmV3KEVWUF9QS0VZX01FVEhPRCwgKGNtcCkpCisjZGVmaW5lIHNrX0VWUF9QS0VZX01FVEhPRF9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChFVlBfUEtFWV9NRVRIT0QpCisjZGVmaW5lIHNrX0VWUF9QS0VZX01FVEhPRF9mcmVlKHN0KSBTS01fc2tfZnJlZShFVlBfUEtFWV9NRVRIT0QsIChzdCkpCisjZGVmaW5lIHNrX0VWUF9QS0VZX01FVEhPRF9udW0oc3QpIFNLTV9za19udW0oRVZQX1BLRVlfTUVUSE9ELCAoc3QpKQorI2RlZmluZSBza19FVlBfUEtFWV9NRVRIT0RfdmFsdWUoc3QsIGkpIFNLTV9za192YWx1ZShFVlBfUEtFWV9NRVRIT0QsIChzdCksIChpKSkKKyNkZWZpbmUgc2tfRVZQX1BLRVlfTUVUSE9EX3NldChzdCwgaSwgdmFsKSBTS01fc2tfc2V0KEVWUF9QS0VZX01FVEhPRCwgKHN0KSwgKGkpLCAodmFsKSkKKyNkZWZpbmUgc2tfRVZQX1BLRVlfTUVUSE9EX3plcm8oc3QpIFNLTV9za196ZXJvKEVWUF9QS0VZX01FVEhPRCwgKHN0KSkKKyNkZWZpbmUgc2tfRVZQX1BLRVlfTUVUSE9EX3B1c2goc3QsIHZhbCkgU0tNX3NrX3B1c2goRVZQX1BLRVlfTUVUSE9ELCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfRVZQX1BLRVlfTUVUSE9EX3Vuc2hpZnQoc3QsIHZhbCkgU0tNX3NrX3Vuc2hpZnQoRVZQX1BLRVlfTUVUSE9ELCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfRVZQX1BLRVlfTUVUSE9EX2ZpbmQoc3QsIHZhbCkgU0tNX3NrX2ZpbmQoRVZQX1BLRVlfTUVUSE9ELCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfRVZQX1BLRVlfTUVUSE9EX2ZpbmRfZXgoc3QsIHZhbCkgU0tNX3NrX2ZpbmRfZXgoRVZQX1BLRVlfTUVUSE9ELCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfRVZQX1BLRVlfTUVUSE9EX2RlbGV0ZShzdCwgaSkgU0tNX3NrX2RlbGV0ZShFVlBfUEtFWV9NRVRIT0QsIChzdCksIChpKSkKKyNkZWZpbmUgc2tfRVZQX1BLRVlfTUVUSE9EX2RlbGV0ZV9wdHIoc3QsIHB0cikgU0tNX3NrX2RlbGV0ZV9wdHIoRVZQX1BLRVlfTUVUSE9ELCAoc3QpLCAocHRyKSkKKyNkZWZpbmUgc2tfRVZQX1BLRVlfTUVUSE9EX2luc2VydChzdCwgdmFsLCBpKSBTS01fc2tfaW5zZXJ0KEVWUF9QS0VZX01FVEhPRCwgKHN0KSwgKHZhbCksIChpKSkKKyNkZWZpbmUgc2tfRVZQX1BLRVlfTUVUSE9EX3NldF9jbXBfZnVuYyhzdCwgY21wKSBTS01fc2tfc2V0X2NtcF9mdW5jKEVWUF9QS0VZX01FVEhPRCwgKHN0KSwgKGNtcCkpCisjZGVmaW5lIHNrX0VWUF9QS0VZX01FVEhPRF9kdXAoc3QpIFNLTV9za19kdXAoRVZQX1BLRVlfTUVUSE9ELCBzdCkKKyNkZWZpbmUgc2tfRVZQX1BLRVlfTUVUSE9EX3BvcF9mcmVlKHN0LCBmcmVlX2Z1bmMpIFNLTV9za19wb3BfZnJlZShFVlBfUEtFWV9NRVRIT0QsIChzdCksIChmcmVlX2Z1bmMpKQorI2RlZmluZSBza19FVlBfUEtFWV9NRVRIT0Rfc2hpZnQoc3QpIFNLTV9za19zaGlmdChFVlBfUEtFWV9NRVRIT0QsIChzdCkpCisjZGVmaW5lIHNrX0VWUF9QS0VZX01FVEhPRF9wb3Aoc3QpIFNLTV9za19wb3AoRVZQX1BLRVlfTUVUSE9ELCAoc3QpKQorI2RlZmluZSBza19FVlBfUEtFWV9NRVRIT0Rfc29ydChzdCkgU0tNX3NrX3NvcnQoRVZQX1BLRVlfTUVUSE9ELCAoc3QpKQorI2RlZmluZSBza19FVlBfUEtFWV9NRVRIT0RfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKEVWUF9QS0VZX01FVEhPRCwgKHN0KSkKKworI2RlZmluZSBza19HRU5FUkFMX05BTUVfbmV3KGNtcCkgU0tNX3NrX25ldyhHRU5FUkFMX05BTUUsIChjbXApKQogI2RlZmluZSBza19HRU5FUkFMX05BTUVfbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoR0VORVJBTF9OQU1FKQogI2RlZmluZSBza19HRU5FUkFMX05BTUVfZnJlZShzdCkgU0tNX3NrX2ZyZWUoR0VORVJBTF9OQU1FLCAoc3QpKQogI2RlZmluZSBza19HRU5FUkFMX05BTUVfbnVtKHN0KSBTS01fc2tfbnVtKEdFTkVSQUxfTkFNRSwgKHN0KSkKQEAgLTcwMCw3ICs4NjQsNyBAQAogI2RlZmluZSBza19HRU5FUkFMX05BTUVfc29ydChzdCkgU0tNX3NrX3NvcnQoR0VORVJBTF9OQU1FLCAoc3QpKQogI2RlZmluZSBza19HRU5FUkFMX05BTUVfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKEdFTkVSQUxfTkFNRSwgKHN0KSkKIAotI2RlZmluZSBza19HRU5FUkFMX05BTUVTX25ldyhzdCkgU0tNX3NrX25ldyhHRU5FUkFMX05BTUVTLCAoc3QpKQorI2RlZmluZSBza19HRU5FUkFMX05BTUVTX25ldyhjbXApIFNLTV9za19uZXcoR0VORVJBTF9OQU1FUywgKGNtcCkpCiAjZGVmaW5lIHNrX0dFTkVSQUxfTkFNRVNfbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoR0VORVJBTF9OQU1FUykKICNkZWZpbmUgc2tfR0VORVJBTF9OQU1FU19mcmVlKHN0KSBTS01fc2tfZnJlZShHRU5FUkFMX05BTUVTLCAoc3QpKQogI2RlZmluZSBza19HRU5FUkFMX05BTUVTX251bShzdCkgU0tNX3NrX251bShHRU5FUkFMX05BTUVTLCAoc3QpKQpAQCAtNzIyLDcgKzg4Niw3IEBACiAjZGVmaW5lIHNrX0dFTkVSQUxfTkFNRVNfc29ydChzdCkgU0tNX3NrX3NvcnQoR0VORVJBTF9OQU1FUywgKHN0KSkKICNkZWZpbmUgc2tfR0VORVJBTF9OQU1FU19pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoR0VORVJBTF9OQU1FUywgKHN0KSkKIAotI2RlZmluZSBza19HRU5FUkFMX1NVQlRSRUVfbmV3KHN0KSBTS01fc2tfbmV3KEdFTkVSQUxfU1VCVFJFRSwgKHN0KSkKKyNkZWZpbmUgc2tfR0VORVJBTF9TVUJUUkVFX25ldyhjbXApIFNLTV9za19uZXcoR0VORVJBTF9TVUJUUkVFLCAoY21wKSkKICNkZWZpbmUgc2tfR0VORVJBTF9TVUJUUkVFX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKEdFTkVSQUxfU1VCVFJFRSkKICNkZWZpbmUgc2tfR0VORVJBTF9TVUJUUkVFX2ZyZWUoc3QpIFNLTV9za19mcmVlKEdFTkVSQUxfU1VCVFJFRSwgKHN0KSkKICNkZWZpbmUgc2tfR0VORVJBTF9TVUJUUkVFX251bShzdCkgU0tNX3NrX251bShHRU5FUkFMX1NVQlRSRUUsIChzdCkpCkBAIC03NDQsNyArOTA4LDcgQEAKICNkZWZpbmUgc2tfR0VORVJBTF9TVUJUUkVFX3NvcnQoc3QpIFNLTV9za19zb3J0KEdFTkVSQUxfU1VCVFJFRSwgKHN0KSkKICNkZWZpbmUgc2tfR0VORVJBTF9TVUJUUkVFX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChHRU5FUkFMX1NVQlRSRUUsIChzdCkpCiAKLSNkZWZpbmUgc2tfSVBBZGRyZXNzRmFtaWx5X25ldyhzdCkgU0tNX3NrX25ldyhJUEFkZHJlc3NGYW1pbHksIChzdCkpCisjZGVmaW5lIHNrX0lQQWRkcmVzc0ZhbWlseV9uZXcoY21wKSBTS01fc2tfbmV3KElQQWRkcmVzc0ZhbWlseSwgKGNtcCkpCiAjZGVmaW5lIHNrX0lQQWRkcmVzc0ZhbWlseV9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChJUEFkZHJlc3NGYW1pbHkpCiAjZGVmaW5lIHNrX0lQQWRkcmVzc0ZhbWlseV9mcmVlKHN0KSBTS01fc2tfZnJlZShJUEFkZHJlc3NGYW1pbHksIChzdCkpCiAjZGVmaW5lIHNrX0lQQWRkcmVzc0ZhbWlseV9udW0oc3QpIFNLTV9za19udW0oSVBBZGRyZXNzRmFtaWx5LCAoc3QpKQpAQCAtNzY2LDcgKzkzMCw3IEBACiAjZGVmaW5lIHNrX0lQQWRkcmVzc0ZhbWlseV9zb3J0KHN0KSBTS01fc2tfc29ydChJUEFkZHJlc3NGYW1pbHksIChzdCkpCiAjZGVmaW5lIHNrX0lQQWRkcmVzc0ZhbWlseV9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoSVBBZGRyZXNzRmFtaWx5LCAoc3QpKQogCi0jZGVmaW5lIHNrX0lQQWRkcmVzc09yUmFuZ2VfbmV3KHN0KSBTS01fc2tfbmV3KElQQWRkcmVzc09yUmFuZ2UsIChzdCkpCisjZGVmaW5lIHNrX0lQQWRkcmVzc09yUmFuZ2VfbmV3KGNtcCkgU0tNX3NrX25ldyhJUEFkZHJlc3NPclJhbmdlLCAoY21wKSkKICNkZWZpbmUgc2tfSVBBZGRyZXNzT3JSYW5nZV9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChJUEFkZHJlc3NPclJhbmdlKQogI2RlZmluZSBza19JUEFkZHJlc3NPclJhbmdlX2ZyZWUoc3QpIFNLTV9za19mcmVlKElQQWRkcmVzc09yUmFuZ2UsIChzdCkpCiAjZGVmaW5lIHNrX0lQQWRkcmVzc09yUmFuZ2VfbnVtKHN0KSBTS01fc2tfbnVtKElQQWRkcmVzc09yUmFuZ2UsIChzdCkpCkBAIC03ODgsNyArOTUyLDcgQEAKICNkZWZpbmUgc2tfSVBBZGRyZXNzT3JSYW5nZV9zb3J0KHN0KSBTS01fc2tfc29ydChJUEFkZHJlc3NPclJhbmdlLCAoc3QpKQogI2RlZmluZSBza19JUEFkZHJlc3NPclJhbmdlX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChJUEFkZHJlc3NPclJhbmdlLCAoc3QpKQogCi0jZGVmaW5lIHNrX0tSQjVfQVBSRVFCT0RZX25ldyhzdCkgU0tNX3NrX25ldyhLUkI1X0FQUkVRQk9EWSwgKHN0KSkKKyNkZWZpbmUgc2tfS1JCNV9BUFJFUUJPRFlfbmV3KGNtcCkgU0tNX3NrX25ldyhLUkI1X0FQUkVRQk9EWSwgKGNtcCkpCiAjZGVmaW5lIHNrX0tSQjVfQVBSRVFCT0RZX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKEtSQjVfQVBSRVFCT0RZKQogI2RlZmluZSBza19LUkI1X0FQUkVRQk9EWV9mcmVlKHN0KSBTS01fc2tfZnJlZShLUkI1X0FQUkVRQk9EWSwgKHN0KSkKICNkZWZpbmUgc2tfS1JCNV9BUFJFUUJPRFlfbnVtKHN0KSBTS01fc2tfbnVtKEtSQjVfQVBSRVFCT0RZLCAoc3QpKQpAQCAtODEwLDcgKzk3NCw3IEBACiAjZGVmaW5lIHNrX0tSQjVfQVBSRVFCT0RZX3NvcnQoc3QpIFNLTV9za19zb3J0KEtSQjVfQVBSRVFCT0RZLCAoc3QpKQogI2RlZmluZSBza19LUkI1X0FQUkVRQk9EWV9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoS1JCNV9BUFJFUUJPRFksIChzdCkpCiAKLSNkZWZpbmUgc2tfS1JCNV9BVVRIREFUQV9uZXcoc3QpIFNLTV9za19uZXcoS1JCNV9BVVRIREFUQSwgKHN0KSkKKyNkZWZpbmUgc2tfS1JCNV9BVVRIREFUQV9uZXcoY21wKSBTS01fc2tfbmV3KEtSQjVfQVVUSERBVEEsIChjbXApKQogI2RlZmluZSBza19LUkI1X0FVVEhEQVRBX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKEtSQjVfQVVUSERBVEEpCiAjZGVmaW5lIHNrX0tSQjVfQVVUSERBVEFfZnJlZShzdCkgU0tNX3NrX2ZyZWUoS1JCNV9BVVRIREFUQSwgKHN0KSkKICNkZWZpbmUgc2tfS1JCNV9BVVRIREFUQV9udW0oc3QpIFNLTV9za19udW0oS1JCNV9BVVRIREFUQSwgKHN0KSkKQEAgLTgzMiw3ICs5OTYsNyBAQAogI2RlZmluZSBza19LUkI1X0FVVEhEQVRBX3NvcnQoc3QpIFNLTV9za19zb3J0KEtSQjVfQVVUSERBVEEsIChzdCkpCiAjZGVmaW5lIHNrX0tSQjVfQVVUSERBVEFfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKEtSQjVfQVVUSERBVEEsIChzdCkpCiAKLSNkZWZpbmUgc2tfS1JCNV9BVVRIRU5UQk9EWV9uZXcoc3QpIFNLTV9za19uZXcoS1JCNV9BVVRIRU5UQk9EWSwgKHN0KSkKKyNkZWZpbmUgc2tfS1JCNV9BVVRIRU5UQk9EWV9uZXcoY21wKSBTS01fc2tfbmV3KEtSQjVfQVVUSEVOVEJPRFksIChjbXApKQogI2RlZmluZSBza19LUkI1X0FVVEhFTlRCT0RZX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKEtSQjVfQVVUSEVOVEJPRFkpCiAjZGVmaW5lIHNrX0tSQjVfQVVUSEVOVEJPRFlfZnJlZShzdCkgU0tNX3NrX2ZyZWUoS1JCNV9BVVRIRU5UQk9EWSwgKHN0KSkKICNkZWZpbmUgc2tfS1JCNV9BVVRIRU5UQk9EWV9udW0oc3QpIFNLTV9za19udW0oS1JCNV9BVVRIRU5UQk9EWSwgKHN0KSkKQEAgLTg1NCw3ICsxMDE4LDcgQEAKICNkZWZpbmUgc2tfS1JCNV9BVVRIRU5UQk9EWV9zb3J0KHN0KSBTS01fc2tfc29ydChLUkI1X0FVVEhFTlRCT0RZLCAoc3QpKQogI2RlZmluZSBza19LUkI1X0FVVEhFTlRCT0RZX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChLUkI1X0FVVEhFTlRCT0RZLCAoc3QpKQogCi0jZGVmaW5lIHNrX0tSQjVfQ0hFQ0tTVU1fbmV3KHN0KSBTS01fc2tfbmV3KEtSQjVfQ0hFQ0tTVU0sIChzdCkpCisjZGVmaW5lIHNrX0tSQjVfQ0hFQ0tTVU1fbmV3KGNtcCkgU0tNX3NrX25ldyhLUkI1X0NIRUNLU1VNLCAoY21wKSkKICNkZWZpbmUgc2tfS1JCNV9DSEVDS1NVTV9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChLUkI1X0NIRUNLU1VNKQogI2RlZmluZSBza19LUkI1X0NIRUNLU1VNX2ZyZWUoc3QpIFNLTV9za19mcmVlKEtSQjVfQ0hFQ0tTVU0sIChzdCkpCiAjZGVmaW5lIHNrX0tSQjVfQ0hFQ0tTVU1fbnVtKHN0KSBTS01fc2tfbnVtKEtSQjVfQ0hFQ0tTVU0sIChzdCkpCkBAIC04NzYsNyArMTA0MCw3IEBACiAjZGVmaW5lIHNrX0tSQjVfQ0hFQ0tTVU1fc29ydChzdCkgU0tNX3NrX3NvcnQoS1JCNV9DSEVDS1NVTSwgKHN0KSkKICNkZWZpbmUgc2tfS1JCNV9DSEVDS1NVTV9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoS1JCNV9DSEVDS1NVTSwgKHN0KSkKIAotI2RlZmluZSBza19LUkI1X0VOQ0RBVEFfbmV3KHN0KSBTS01fc2tfbmV3KEtSQjVfRU5DREFUQSwgKHN0KSkKKyNkZWZpbmUgc2tfS1JCNV9FTkNEQVRBX25ldyhjbXApIFNLTV9za19uZXcoS1JCNV9FTkNEQVRBLCAoY21wKSkKICNkZWZpbmUgc2tfS1JCNV9FTkNEQVRBX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKEtSQjVfRU5DREFUQSkKICNkZWZpbmUgc2tfS1JCNV9FTkNEQVRBX2ZyZWUoc3QpIFNLTV9za19mcmVlKEtSQjVfRU5DREFUQSwgKHN0KSkKICNkZWZpbmUgc2tfS1JCNV9FTkNEQVRBX251bShzdCkgU0tNX3NrX251bShLUkI1X0VOQ0RBVEEsIChzdCkpCkBAIC04OTgsNyArMTA2Miw3IEBACiAjZGVmaW5lIHNrX0tSQjVfRU5DREFUQV9zb3J0KHN0KSBTS01fc2tfc29ydChLUkI1X0VOQ0RBVEEsIChzdCkpCiAjZGVmaW5lIHNrX0tSQjVfRU5DREFUQV9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoS1JCNV9FTkNEQVRBLCAoc3QpKQogCi0jZGVmaW5lIHNrX0tSQjVfRU5DS0VZX25ldyhzdCkgU0tNX3NrX25ldyhLUkI1X0VOQ0tFWSwgKHN0KSkKKyNkZWZpbmUgc2tfS1JCNV9FTkNLRVlfbmV3KGNtcCkgU0tNX3NrX25ldyhLUkI1X0VOQ0tFWSwgKGNtcCkpCiAjZGVmaW5lIHNrX0tSQjVfRU5DS0VZX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKEtSQjVfRU5DS0VZKQogI2RlZmluZSBza19LUkI1X0VOQ0tFWV9mcmVlKHN0KSBTS01fc2tfZnJlZShLUkI1X0VOQ0tFWSwgKHN0KSkKICNkZWZpbmUgc2tfS1JCNV9FTkNLRVlfbnVtKHN0KSBTS01fc2tfbnVtKEtSQjVfRU5DS0VZLCAoc3QpKQpAQCAtOTIwLDcgKzEwODQsNyBAQAogI2RlZmluZSBza19LUkI1X0VOQ0tFWV9zb3J0KHN0KSBTS01fc2tfc29ydChLUkI1X0VOQ0tFWSwgKHN0KSkKICNkZWZpbmUgc2tfS1JCNV9FTkNLRVlfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKEtSQjVfRU5DS0VZLCAoc3QpKQogCi0jZGVmaW5lIHNrX0tSQjVfUFJJTkNOQU1FX25ldyhzdCkgU0tNX3NrX25ldyhLUkI1X1BSSU5DTkFNRSwgKHN0KSkKKyNkZWZpbmUgc2tfS1JCNV9QUklOQ05BTUVfbmV3KGNtcCkgU0tNX3NrX25ldyhLUkI1X1BSSU5DTkFNRSwgKGNtcCkpCiAjZGVmaW5lIHNrX0tSQjVfUFJJTkNOQU1FX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKEtSQjVfUFJJTkNOQU1FKQogI2RlZmluZSBza19LUkI1X1BSSU5DTkFNRV9mcmVlKHN0KSBTS01fc2tfZnJlZShLUkI1X1BSSU5DTkFNRSwgKHN0KSkKICNkZWZpbmUgc2tfS1JCNV9QUklOQ05BTUVfbnVtKHN0KSBTS01fc2tfbnVtKEtSQjVfUFJJTkNOQU1FLCAoc3QpKQpAQCAtOTQyLDcgKzExMDYsNyBAQAogI2RlZmluZSBza19LUkI1X1BSSU5DTkFNRV9zb3J0KHN0KSBTS01fc2tfc29ydChLUkI1X1BSSU5DTkFNRSwgKHN0KSkKICNkZWZpbmUgc2tfS1JCNV9QUklOQ05BTUVfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKEtSQjVfUFJJTkNOQU1FLCAoc3QpKQogCi0jZGVmaW5lIHNrX0tSQjVfVEtUQk9EWV9uZXcoc3QpIFNLTV9za19uZXcoS1JCNV9US1RCT0RZLCAoc3QpKQorI2RlZmluZSBza19LUkI1X1RLVEJPRFlfbmV3KGNtcCkgU0tNX3NrX25ldyhLUkI1X1RLVEJPRFksIChjbXApKQogI2RlZmluZSBza19LUkI1X1RLVEJPRFlfbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoS1JCNV9US1RCT0RZKQogI2RlZmluZSBza19LUkI1X1RLVEJPRFlfZnJlZShzdCkgU0tNX3NrX2ZyZWUoS1JCNV9US1RCT0RZLCAoc3QpKQogI2RlZmluZSBza19LUkI1X1RLVEJPRFlfbnVtKHN0KSBTS01fc2tfbnVtKEtSQjVfVEtUQk9EWSwgKHN0KSkKQEAgLTk2NCw3ICsxMTI4LDI5IEBACiAjZGVmaW5lIHNrX0tSQjVfVEtUQk9EWV9zb3J0KHN0KSBTS01fc2tfc29ydChLUkI1X1RLVEJPRFksIChzdCkpCiAjZGVmaW5lIHNrX0tSQjVfVEtUQk9EWV9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoS1JCNV9US1RCT0RZLCAoc3QpKQogCi0jZGVmaW5lIHNrX01JTUVfSEVBREVSX25ldyhzdCkgU0tNX3NrX25ldyhNSU1FX0hFQURFUiwgKHN0KSkKKyNkZWZpbmUgc2tfTUVNX09CSkVDVF9EQVRBX25ldyhjbXApIFNLTV9za19uZXcoTUVNX09CSkVDVF9EQVRBLCAoY21wKSkKKyNkZWZpbmUgc2tfTUVNX09CSkVDVF9EQVRBX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKE1FTV9PQkpFQ1RfREFUQSkKKyNkZWZpbmUgc2tfTUVNX09CSkVDVF9EQVRBX2ZyZWUoc3QpIFNLTV9za19mcmVlKE1FTV9PQkpFQ1RfREFUQSwgKHN0KSkKKyNkZWZpbmUgc2tfTUVNX09CSkVDVF9EQVRBX251bShzdCkgU0tNX3NrX251bShNRU1fT0JKRUNUX0RBVEEsIChzdCkpCisjZGVmaW5lIHNrX01FTV9PQkpFQ1RfREFUQV92YWx1ZShzdCwgaSkgU0tNX3NrX3ZhbHVlKE1FTV9PQkpFQ1RfREFUQSwgKHN0KSwgKGkpKQorI2RlZmluZSBza19NRU1fT0JKRUNUX0RBVEFfc2V0KHN0LCBpLCB2YWwpIFNLTV9za19zZXQoTUVNX09CSkVDVF9EQVRBLCAoc3QpLCAoaSksICh2YWwpKQorI2RlZmluZSBza19NRU1fT0JKRUNUX0RBVEFfemVybyhzdCkgU0tNX3NrX3plcm8oTUVNX09CSkVDVF9EQVRBLCAoc3QpKQorI2RlZmluZSBza19NRU1fT0JKRUNUX0RBVEFfcHVzaChzdCwgdmFsKSBTS01fc2tfcHVzaChNRU1fT0JKRUNUX0RBVEEsIChzdCksICh2YWwpKQorI2RlZmluZSBza19NRU1fT0JKRUNUX0RBVEFfdW5zaGlmdChzdCwgdmFsKSBTS01fc2tfdW5zaGlmdChNRU1fT0JKRUNUX0RBVEEsIChzdCksICh2YWwpKQorI2RlZmluZSBza19NRU1fT0JKRUNUX0RBVEFfZmluZChzdCwgdmFsKSBTS01fc2tfZmluZChNRU1fT0JKRUNUX0RBVEEsIChzdCksICh2YWwpKQorI2RlZmluZSBza19NRU1fT0JKRUNUX0RBVEFfZmluZF9leChzdCwgdmFsKSBTS01fc2tfZmluZF9leChNRU1fT0JKRUNUX0RBVEEsIChzdCksICh2YWwpKQorI2RlZmluZSBza19NRU1fT0JKRUNUX0RBVEFfZGVsZXRlKHN0LCBpKSBTS01fc2tfZGVsZXRlKE1FTV9PQkpFQ1RfREFUQSwgKHN0KSwgKGkpKQorI2RlZmluZSBza19NRU1fT0JKRUNUX0RBVEFfZGVsZXRlX3B0cihzdCwgcHRyKSBTS01fc2tfZGVsZXRlX3B0cihNRU1fT0JKRUNUX0RBVEEsIChzdCksIChwdHIpKQorI2RlZmluZSBza19NRU1fT0JKRUNUX0RBVEFfaW5zZXJ0KHN0LCB2YWwsIGkpIFNLTV9za19pbnNlcnQoTUVNX09CSkVDVF9EQVRBLCAoc3QpLCAodmFsKSwgKGkpKQorI2RlZmluZSBza19NRU1fT0JKRUNUX0RBVEFfc2V0X2NtcF9mdW5jKHN0LCBjbXApIFNLTV9za19zZXRfY21wX2Z1bmMoTUVNX09CSkVDVF9EQVRBLCAoc3QpLCAoY21wKSkKKyNkZWZpbmUgc2tfTUVNX09CSkVDVF9EQVRBX2R1cChzdCkgU0tNX3NrX2R1cChNRU1fT0JKRUNUX0RBVEEsIHN0KQorI2RlZmluZSBza19NRU1fT0JKRUNUX0RBVEFfcG9wX2ZyZWUoc3QsIGZyZWVfZnVuYykgU0tNX3NrX3BvcF9mcmVlKE1FTV9PQkpFQ1RfREFUQSwgKHN0KSwgKGZyZWVfZnVuYykpCisjZGVmaW5lIHNrX01FTV9PQkpFQ1RfREFUQV9zaGlmdChzdCkgU0tNX3NrX3NoaWZ0KE1FTV9PQkpFQ1RfREFUQSwgKHN0KSkKKyNkZWZpbmUgc2tfTUVNX09CSkVDVF9EQVRBX3BvcChzdCkgU0tNX3NrX3BvcChNRU1fT0JKRUNUX0RBVEEsIChzdCkpCisjZGVmaW5lIHNrX01FTV9PQkpFQ1RfREFUQV9zb3J0KHN0KSBTS01fc2tfc29ydChNRU1fT0JKRUNUX0RBVEEsIChzdCkpCisjZGVmaW5lIHNrX01FTV9PQkpFQ1RfREFUQV9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoTUVNX09CSkVDVF9EQVRBLCAoc3QpKQorCisjZGVmaW5lIHNrX01JTUVfSEVBREVSX25ldyhjbXApIFNLTV9za19uZXcoTUlNRV9IRUFERVIsIChjbXApKQogI2RlZmluZSBza19NSU1FX0hFQURFUl9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChNSU1FX0hFQURFUikKICNkZWZpbmUgc2tfTUlNRV9IRUFERVJfZnJlZShzdCkgU0tNX3NrX2ZyZWUoTUlNRV9IRUFERVIsIChzdCkpCiAjZGVmaW5lIHNrX01JTUVfSEVBREVSX251bShzdCkgU0tNX3NrX251bShNSU1FX0hFQURFUiwgKHN0KSkKQEAgLTk4Niw3ICsxMTcyLDcgQEAKICNkZWZpbmUgc2tfTUlNRV9IRUFERVJfc29ydChzdCkgU0tNX3NrX3NvcnQoTUlNRV9IRUFERVIsIChzdCkpCiAjZGVmaW5lIHNrX01JTUVfSEVBREVSX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChNSU1FX0hFQURFUiwgKHN0KSkKIAotI2RlZmluZSBza19NSU1FX1BBUkFNX25ldyhzdCkgU0tNX3NrX25ldyhNSU1FX1BBUkFNLCAoc3QpKQorI2RlZmluZSBza19NSU1FX1BBUkFNX25ldyhjbXApIFNLTV9za19uZXcoTUlNRV9QQVJBTSwgKGNtcCkpCiAjZGVmaW5lIHNrX01JTUVfUEFSQU1fbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoTUlNRV9QQVJBTSkKICNkZWZpbmUgc2tfTUlNRV9QQVJBTV9mcmVlKHN0KSBTS01fc2tfZnJlZShNSU1FX1BBUkFNLCAoc3QpKQogI2RlZmluZSBza19NSU1FX1BBUkFNX251bShzdCkgU0tNX3NrX251bShNSU1FX1BBUkFNLCAoc3QpKQpAQCAtMTAwOCw3ICsxMTk0LDcgQEAKICNkZWZpbmUgc2tfTUlNRV9QQVJBTV9zb3J0KHN0KSBTS01fc2tfc29ydChNSU1FX1BBUkFNLCAoc3QpKQogI2RlZmluZSBza19NSU1FX1BBUkFNX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChNSU1FX1BBUkFNLCAoc3QpKQogCi0jZGVmaW5lIHNrX05BTUVfRlVOQ1NfbmV3KHN0KSBTS01fc2tfbmV3KE5BTUVfRlVOQ1MsIChzdCkpCisjZGVmaW5lIHNrX05BTUVfRlVOQ1NfbmV3KGNtcCkgU0tNX3NrX25ldyhOQU1FX0ZVTkNTLCAoY21wKSkKICNkZWZpbmUgc2tfTkFNRV9GVU5DU19uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChOQU1FX0ZVTkNTKQogI2RlZmluZSBza19OQU1FX0ZVTkNTX2ZyZWUoc3QpIFNLTV9za19mcmVlKE5BTUVfRlVOQ1MsIChzdCkpCiAjZGVmaW5lIHNrX05BTUVfRlVOQ1NfbnVtKHN0KSBTS01fc2tfbnVtKE5BTUVfRlVOQ1MsIChzdCkpCkBAIC0xMDMwLDcgKzEyMTYsNyBAQAogI2RlZmluZSBza19OQU1FX0ZVTkNTX3NvcnQoc3QpIFNLTV9za19zb3J0KE5BTUVfRlVOQ1MsIChzdCkpCiAjZGVmaW5lIHNrX05BTUVfRlVOQ1NfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKE5BTUVfRlVOQ1MsIChzdCkpCiAKLSNkZWZpbmUgc2tfT0NTUF9DRVJUSURfbmV3KHN0KSBTS01fc2tfbmV3KE9DU1BfQ0VSVElELCAoc3QpKQorI2RlZmluZSBza19PQ1NQX0NFUlRJRF9uZXcoY21wKSBTS01fc2tfbmV3KE9DU1BfQ0VSVElELCAoY21wKSkKICNkZWZpbmUgc2tfT0NTUF9DRVJUSURfbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoT0NTUF9DRVJUSUQpCiAjZGVmaW5lIHNrX09DU1BfQ0VSVElEX2ZyZWUoc3QpIFNLTV9za19mcmVlKE9DU1BfQ0VSVElELCAoc3QpKQogI2RlZmluZSBza19PQ1NQX0NFUlRJRF9udW0oc3QpIFNLTV9za19udW0oT0NTUF9DRVJUSUQsIChzdCkpCkBAIC0xMDUyLDcgKzEyMzgsNyBAQAogI2RlZmluZSBza19PQ1NQX0NFUlRJRF9zb3J0KHN0KSBTS01fc2tfc29ydChPQ1NQX0NFUlRJRCwgKHN0KSkKICNkZWZpbmUgc2tfT0NTUF9DRVJUSURfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKE9DU1BfQ0VSVElELCAoc3QpKQogCi0jZGVmaW5lIHNrX09DU1BfT05FUkVRX25ldyhzdCkgU0tNX3NrX25ldyhPQ1NQX09ORVJFUSwgKHN0KSkKKyNkZWZpbmUgc2tfT0NTUF9PTkVSRVFfbmV3KGNtcCkgU0tNX3NrX25ldyhPQ1NQX09ORVJFUSwgKGNtcCkpCiAjZGVmaW5lIHNrX09DU1BfT05FUkVRX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKE9DU1BfT05FUkVRKQogI2RlZmluZSBza19PQ1NQX09ORVJFUV9mcmVlKHN0KSBTS01fc2tfZnJlZShPQ1NQX09ORVJFUSwgKHN0KSkKICNkZWZpbmUgc2tfT0NTUF9PTkVSRVFfbnVtKHN0KSBTS01fc2tfbnVtKE9DU1BfT05FUkVRLCAoc3QpKQpAQCAtMTA3NCw3ICsxMjYwLDcgQEAKICNkZWZpbmUgc2tfT0NTUF9PTkVSRVFfc29ydChzdCkgU0tNX3NrX3NvcnQoT0NTUF9PTkVSRVEsIChzdCkpCiAjZGVmaW5lIHNrX09DU1BfT05FUkVRX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChPQ1NQX09ORVJFUSwgKHN0KSkKIAotI2RlZmluZSBza19PQ1NQX1JFU1BJRF9uZXcoc3QpIFNLTV9za19uZXcoT0NTUF9SRVNQSUQsIChzdCkpCisjZGVmaW5lIHNrX09DU1BfUkVTUElEX25ldyhjbXApIFNLTV9za19uZXcoT0NTUF9SRVNQSUQsIChjbXApKQogI2RlZmluZSBza19PQ1NQX1JFU1BJRF9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChPQ1NQX1JFU1BJRCkKICNkZWZpbmUgc2tfT0NTUF9SRVNQSURfZnJlZShzdCkgU0tNX3NrX2ZyZWUoT0NTUF9SRVNQSUQsIChzdCkpCiAjZGVmaW5lIHNrX09DU1BfUkVTUElEX251bShzdCkgU0tNX3NrX251bShPQ1NQX1JFU1BJRCwgKHN0KSkKQEAgLTEwOTYsNyArMTI4Miw3IEBACiAjZGVmaW5lIHNrX09DU1BfUkVTUElEX3NvcnQoc3QpIFNLTV9za19zb3J0KE9DU1BfUkVTUElELCAoc3QpKQogI2RlZmluZSBza19PQ1NQX1JFU1BJRF9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoT0NTUF9SRVNQSUQsIChzdCkpCiAKLSNkZWZpbmUgc2tfT0NTUF9TSU5HTEVSRVNQX25ldyhzdCkgU0tNX3NrX25ldyhPQ1NQX1NJTkdMRVJFU1AsIChzdCkpCisjZGVmaW5lIHNrX09DU1BfU0lOR0xFUkVTUF9uZXcoY21wKSBTS01fc2tfbmV3KE9DU1BfU0lOR0xFUkVTUCwgKGNtcCkpCiAjZGVmaW5lIHNrX09DU1BfU0lOR0xFUkVTUF9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChPQ1NQX1NJTkdMRVJFU1ApCiAjZGVmaW5lIHNrX09DU1BfU0lOR0xFUkVTUF9mcmVlKHN0KSBTS01fc2tfZnJlZShPQ1NQX1NJTkdMRVJFU1AsIChzdCkpCiAjZGVmaW5lIHNrX09DU1BfU0lOR0xFUkVTUF9udW0oc3QpIFNLTV9za19udW0oT0NTUF9TSU5HTEVSRVNQLCAoc3QpKQpAQCAtMTExOCw3ICsxMzA0LDcgQEAKICNkZWZpbmUgc2tfT0NTUF9TSU5HTEVSRVNQX3NvcnQoc3QpIFNLTV9za19zb3J0KE9DU1BfU0lOR0xFUkVTUCwgKHN0KSkKICNkZWZpbmUgc2tfT0NTUF9TSU5HTEVSRVNQX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChPQ1NQX1NJTkdMRVJFU1AsIChzdCkpCiAKLSNkZWZpbmUgc2tfUEtDUzEyX1NBRkVCQUdfbmV3KHN0KSBTS01fc2tfbmV3KFBLQ1MxMl9TQUZFQkFHLCAoc3QpKQorI2RlZmluZSBza19QS0NTMTJfU0FGRUJBR19uZXcoY21wKSBTS01fc2tfbmV3KFBLQ1MxMl9TQUZFQkFHLCAoY21wKSkKICNkZWZpbmUgc2tfUEtDUzEyX1NBRkVCQUdfbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoUEtDUzEyX1NBRkVCQUcpCiAjZGVmaW5lIHNrX1BLQ1MxMl9TQUZFQkFHX2ZyZWUoc3QpIFNLTV9za19mcmVlKFBLQ1MxMl9TQUZFQkFHLCAoc3QpKQogI2RlZmluZSBza19QS0NTMTJfU0FGRUJBR19udW0oc3QpIFNLTV9za19udW0oUEtDUzEyX1NBRkVCQUcsIChzdCkpCkBAIC0xMTQwLDcgKzEzMjYsNyBAQAogI2RlZmluZSBza19QS0NTMTJfU0FGRUJBR19zb3J0KHN0KSBTS01fc2tfc29ydChQS0NTMTJfU0FGRUJBRywgKHN0KSkKICNkZWZpbmUgc2tfUEtDUzEyX1NBRkVCQUdfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKFBLQ1MxMl9TQUZFQkFHLCAoc3QpKQogCi0jZGVmaW5lIHNrX1BLQ1M3X25ldyhzdCkgU0tNX3NrX25ldyhQS0NTNywgKHN0KSkKKyNkZWZpbmUgc2tfUEtDUzdfbmV3KGNtcCkgU0tNX3NrX25ldyhQS0NTNywgKGNtcCkpCiAjZGVmaW5lIHNrX1BLQ1M3X25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKFBLQ1M3KQogI2RlZmluZSBza19QS0NTN19mcmVlKHN0KSBTS01fc2tfZnJlZShQS0NTNywgKHN0KSkKICNkZWZpbmUgc2tfUEtDUzdfbnVtKHN0KSBTS01fc2tfbnVtKFBLQ1M3LCAoc3QpKQpAQCAtMTE2Miw3ICsxMzQ4LDcgQEAKICNkZWZpbmUgc2tfUEtDUzdfc29ydChzdCkgU0tNX3NrX3NvcnQoUEtDUzcsIChzdCkpCiAjZGVmaW5lIHNrX1BLQ1M3X2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChQS0NTNywgKHN0KSkKIAotI2RlZmluZSBza19QS0NTN19SRUNJUF9JTkZPX25ldyhzdCkgU0tNX3NrX25ldyhQS0NTN19SRUNJUF9JTkZPLCAoc3QpKQorI2RlZmluZSBza19QS0NTN19SRUNJUF9JTkZPX25ldyhjbXApIFNLTV9za19uZXcoUEtDUzdfUkVDSVBfSU5GTywgKGNtcCkpCiAjZGVmaW5lIHNrX1BLQ1M3X1JFQ0lQX0lORk9fbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoUEtDUzdfUkVDSVBfSU5GTykKICNkZWZpbmUgc2tfUEtDUzdfUkVDSVBfSU5GT19mcmVlKHN0KSBTS01fc2tfZnJlZShQS0NTN19SRUNJUF9JTkZPLCAoc3QpKQogI2RlZmluZSBza19QS0NTN19SRUNJUF9JTkZPX251bShzdCkgU0tNX3NrX251bShQS0NTN19SRUNJUF9JTkZPLCAoc3QpKQpAQCAtMTE4NCw3ICsxMzcwLDcgQEAKICNkZWZpbmUgc2tfUEtDUzdfUkVDSVBfSU5GT19zb3J0KHN0KSBTS01fc2tfc29ydChQS0NTN19SRUNJUF9JTkZPLCAoc3QpKQogI2RlZmluZSBza19QS0NTN19SRUNJUF9JTkZPX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChQS0NTN19SRUNJUF9JTkZPLCAoc3QpKQogCi0jZGVmaW5lIHNrX1BLQ1M3X1NJR05FUl9JTkZPX25ldyhzdCkgU0tNX3NrX25ldyhQS0NTN19TSUdORVJfSU5GTywgKHN0KSkKKyNkZWZpbmUgc2tfUEtDUzdfU0lHTkVSX0lORk9fbmV3KGNtcCkgU0tNX3NrX25ldyhQS0NTN19TSUdORVJfSU5GTywgKGNtcCkpCiAjZGVmaW5lIHNrX1BLQ1M3X1NJR05FUl9JTkZPX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKFBLQ1M3X1NJR05FUl9JTkZPKQogI2RlZmluZSBza19QS0NTN19TSUdORVJfSU5GT19mcmVlKHN0KSBTS01fc2tfZnJlZShQS0NTN19TSUdORVJfSU5GTywgKHN0KSkKICNkZWZpbmUgc2tfUEtDUzdfU0lHTkVSX0lORk9fbnVtKHN0KSBTS01fc2tfbnVtKFBLQ1M3X1NJR05FUl9JTkZPLCAoc3QpKQpAQCAtMTIwNiw3ICsxMzkyLDcgQEAKICNkZWZpbmUgc2tfUEtDUzdfU0lHTkVSX0lORk9fc29ydChzdCkgU0tNX3NrX3NvcnQoUEtDUzdfU0lHTkVSX0lORk8sIChzdCkpCiAjZGVmaW5lIHNrX1BLQ1M3X1NJR05FUl9JTkZPX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChQS0NTN19TSUdORVJfSU5GTywgKHN0KSkKIAotI2RlZmluZSBza19QT0xJQ1lJTkZPX25ldyhzdCkgU0tNX3NrX25ldyhQT0xJQ1lJTkZPLCAoc3QpKQorI2RlZmluZSBza19QT0xJQ1lJTkZPX25ldyhjbXApIFNLTV9za19uZXcoUE9MSUNZSU5GTywgKGNtcCkpCiAjZGVmaW5lIHNrX1BPTElDWUlORk9fbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoUE9MSUNZSU5GTykKICNkZWZpbmUgc2tfUE9MSUNZSU5GT19mcmVlKHN0KSBTS01fc2tfZnJlZShQT0xJQ1lJTkZPLCAoc3QpKQogI2RlZmluZSBza19QT0xJQ1lJTkZPX251bShzdCkgU0tNX3NrX251bShQT0xJQ1lJTkZPLCAoc3QpKQpAQCAtMTIyOCw3ICsxNDE0LDcgQEAKICNkZWZpbmUgc2tfUE9MSUNZSU5GT19zb3J0KHN0KSBTS01fc2tfc29ydChQT0xJQ1lJTkZPLCAoc3QpKQogI2RlZmluZSBza19QT0xJQ1lJTkZPX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChQT0xJQ1lJTkZPLCAoc3QpKQogCi0jZGVmaW5lIHNrX1BPTElDWVFVQUxJTkZPX25ldyhzdCkgU0tNX3NrX25ldyhQT0xJQ1lRVUFMSU5GTywgKHN0KSkKKyNkZWZpbmUgc2tfUE9MSUNZUVVBTElORk9fbmV3KGNtcCkgU0tNX3NrX25ldyhQT0xJQ1lRVUFMSU5GTywgKGNtcCkpCiAjZGVmaW5lIHNrX1BPTElDWVFVQUxJTkZPX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKFBPTElDWVFVQUxJTkZPKQogI2RlZmluZSBza19QT0xJQ1lRVUFMSU5GT19mcmVlKHN0KSBTS01fc2tfZnJlZShQT0xJQ1lRVUFMSU5GTywgKHN0KSkKICNkZWZpbmUgc2tfUE9MSUNZUVVBTElORk9fbnVtKHN0KSBTS01fc2tfbnVtKFBPTElDWVFVQUxJTkZPLCAoc3QpKQpAQCAtMTI1MCw3ICsxNDM2LDcgQEAKICNkZWZpbmUgc2tfUE9MSUNZUVVBTElORk9fc29ydChzdCkgU0tNX3NrX3NvcnQoUE9MSUNZUVVBTElORk8sIChzdCkpCiAjZGVmaW5lIHNrX1BPTElDWVFVQUxJTkZPX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChQT0xJQ1lRVUFMSU5GTywgKHN0KSkKIAotI2RlZmluZSBza19QT0xJQ1lfTUFQUElOR19uZXcoc3QpIFNLTV9za19uZXcoUE9MSUNZX01BUFBJTkcsIChzdCkpCisjZGVmaW5lIHNrX1BPTElDWV9NQVBQSU5HX25ldyhjbXApIFNLTV9za19uZXcoUE9MSUNZX01BUFBJTkcsIChjbXApKQogI2RlZmluZSBza19QT0xJQ1lfTUFQUElOR19uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChQT0xJQ1lfTUFQUElORykKICNkZWZpbmUgc2tfUE9MSUNZX01BUFBJTkdfZnJlZShzdCkgU0tNX3NrX2ZyZWUoUE9MSUNZX01BUFBJTkcsIChzdCkpCiAjZGVmaW5lIHNrX1BPTElDWV9NQVBQSU5HX251bShzdCkgU0tNX3NrX251bShQT0xJQ1lfTUFQUElORywgKHN0KSkKQEAgLTEyNzIsNyArMTQ1OCw3IEBACiAjZGVmaW5lIHNrX1BPTElDWV9NQVBQSU5HX3NvcnQoc3QpIFNLTV9za19zb3J0KFBPTElDWV9NQVBQSU5HLCAoc3QpKQogI2RlZmluZSBza19QT0xJQ1lfTUFQUElOR19pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoUE9MSUNZX01BUFBJTkcsIChzdCkpCiAKLSNkZWZpbmUgc2tfU1NMX0NJUEhFUl9uZXcoc3QpIFNLTV9za19uZXcoU1NMX0NJUEhFUiwgKHN0KSkKKyNkZWZpbmUgc2tfU1NMX0NJUEhFUl9uZXcoY21wKSBTS01fc2tfbmV3KFNTTF9DSVBIRVIsIChjbXApKQogI2RlZmluZSBza19TU0xfQ0lQSEVSX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKFNTTF9DSVBIRVIpCiAjZGVmaW5lIHNrX1NTTF9DSVBIRVJfZnJlZShzdCkgU0tNX3NrX2ZyZWUoU1NMX0NJUEhFUiwgKHN0KSkKICNkZWZpbmUgc2tfU1NMX0NJUEhFUl9udW0oc3QpIFNLTV9za19udW0oU1NMX0NJUEhFUiwgKHN0KSkKQEAgLTEyOTQsNyArMTQ4MCw3IEBACiAjZGVmaW5lIHNrX1NTTF9DSVBIRVJfc29ydChzdCkgU0tNX3NrX3NvcnQoU1NMX0NJUEhFUiwgKHN0KSkKICNkZWZpbmUgc2tfU1NMX0NJUEhFUl9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoU1NMX0NJUEhFUiwgKHN0KSkKIAotI2RlZmluZSBza19TU0xfQ09NUF9uZXcoc3QpIFNLTV9za19uZXcoU1NMX0NPTVAsIChzdCkpCisjZGVmaW5lIHNrX1NTTF9DT01QX25ldyhjbXApIFNLTV9za19uZXcoU1NMX0NPTVAsIChjbXApKQogI2RlZmluZSBza19TU0xfQ09NUF9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChTU0xfQ09NUCkKICNkZWZpbmUgc2tfU1NMX0NPTVBfZnJlZShzdCkgU0tNX3NrX2ZyZWUoU1NMX0NPTVAsIChzdCkpCiAjZGVmaW5lIHNrX1NTTF9DT01QX251bShzdCkgU0tNX3NrX251bShTU0xfQ09NUCwgKHN0KSkKQEAgLTEzMTYsNyArMTUwMiw1MSBAQAogI2RlZmluZSBza19TU0xfQ09NUF9zb3J0KHN0KSBTS01fc2tfc29ydChTU0xfQ09NUCwgKHN0KSkKICNkZWZpbmUgc2tfU1NMX0NPTVBfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKFNTTF9DT01QLCAoc3QpKQogCi0jZGVmaW5lIHNrX1NUT1JFX09CSkVDVF9uZXcoc3QpIFNLTV9za19uZXcoU1RPUkVfT0JKRUNULCAoc3QpKQorI2RlZmluZSBza19TVEFDS19PRl9YNTA5X05BTUVfRU5UUllfbmV3KGNtcCkgU0tNX3NrX25ldyhTVEFDS19PRl9YNTA5X05BTUVfRU5UUlksIChjbXApKQorI2RlZmluZSBza19TVEFDS19PRl9YNTA5X05BTUVfRU5UUllfbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoU1RBQ0tfT0ZfWDUwOV9OQU1FX0VOVFJZKQorI2RlZmluZSBza19TVEFDS19PRl9YNTA5X05BTUVfRU5UUllfZnJlZShzdCkgU0tNX3NrX2ZyZWUoU1RBQ0tfT0ZfWDUwOV9OQU1FX0VOVFJZLCAoc3QpKQorI2RlZmluZSBza19TVEFDS19PRl9YNTA5X05BTUVfRU5UUllfbnVtKHN0KSBTS01fc2tfbnVtKFNUQUNLX09GX1g1MDlfTkFNRV9FTlRSWSwgKHN0KSkKKyNkZWZpbmUgc2tfU1RBQ0tfT0ZfWDUwOV9OQU1FX0VOVFJZX3ZhbHVlKHN0LCBpKSBTS01fc2tfdmFsdWUoU1RBQ0tfT0ZfWDUwOV9OQU1FX0VOVFJZLCAoc3QpLCAoaSkpCisjZGVmaW5lIHNrX1NUQUNLX09GX1g1MDlfTkFNRV9FTlRSWV9zZXQoc3QsIGksIHZhbCkgU0tNX3NrX3NldChTVEFDS19PRl9YNTA5X05BTUVfRU5UUlksIChzdCksIChpKSwgKHZhbCkpCisjZGVmaW5lIHNrX1NUQUNLX09GX1g1MDlfTkFNRV9FTlRSWV96ZXJvKHN0KSBTS01fc2tfemVybyhTVEFDS19PRl9YNTA5X05BTUVfRU5UUlksIChzdCkpCisjZGVmaW5lIHNrX1NUQUNLX09GX1g1MDlfTkFNRV9FTlRSWV9wdXNoKHN0LCB2YWwpIFNLTV9za19wdXNoKFNUQUNLX09GX1g1MDlfTkFNRV9FTlRSWSwgKHN0KSwgKHZhbCkpCisjZGVmaW5lIHNrX1NUQUNLX09GX1g1MDlfTkFNRV9FTlRSWV91bnNoaWZ0KHN0LCB2YWwpIFNLTV9za191bnNoaWZ0KFNUQUNLX09GX1g1MDlfTkFNRV9FTlRSWSwgKHN0KSwgKHZhbCkpCisjZGVmaW5lIHNrX1NUQUNLX09GX1g1MDlfTkFNRV9FTlRSWV9maW5kKHN0LCB2YWwpIFNLTV9za19maW5kKFNUQUNLX09GX1g1MDlfTkFNRV9FTlRSWSwgKHN0KSwgKHZhbCkpCisjZGVmaW5lIHNrX1NUQUNLX09GX1g1MDlfTkFNRV9FTlRSWV9maW5kX2V4KHN0LCB2YWwpIFNLTV9za19maW5kX2V4KFNUQUNLX09GX1g1MDlfTkFNRV9FTlRSWSwgKHN0KSwgKHZhbCkpCisjZGVmaW5lIHNrX1NUQUNLX09GX1g1MDlfTkFNRV9FTlRSWV9kZWxldGUoc3QsIGkpIFNLTV9za19kZWxldGUoU1RBQ0tfT0ZfWDUwOV9OQU1FX0VOVFJZLCAoc3QpLCAoaSkpCisjZGVmaW5lIHNrX1NUQUNLX09GX1g1MDlfTkFNRV9FTlRSWV9kZWxldGVfcHRyKHN0LCBwdHIpIFNLTV9za19kZWxldGVfcHRyKFNUQUNLX09GX1g1MDlfTkFNRV9FTlRSWSwgKHN0KSwgKHB0cikpCisjZGVmaW5lIHNrX1NUQUNLX09GX1g1MDlfTkFNRV9FTlRSWV9pbnNlcnQoc3QsIHZhbCwgaSkgU0tNX3NrX2luc2VydChTVEFDS19PRl9YNTA5X05BTUVfRU5UUlksIChzdCksICh2YWwpLCAoaSkpCisjZGVmaW5lIHNrX1NUQUNLX09GX1g1MDlfTkFNRV9FTlRSWV9zZXRfY21wX2Z1bmMoc3QsIGNtcCkgU0tNX3NrX3NldF9jbXBfZnVuYyhTVEFDS19PRl9YNTA5X05BTUVfRU5UUlksIChzdCksIChjbXApKQorI2RlZmluZSBza19TVEFDS19PRl9YNTA5X05BTUVfRU5UUllfZHVwKHN0KSBTS01fc2tfZHVwKFNUQUNLX09GX1g1MDlfTkFNRV9FTlRSWSwgc3QpCisjZGVmaW5lIHNrX1NUQUNLX09GX1g1MDlfTkFNRV9FTlRSWV9wb3BfZnJlZShzdCwgZnJlZV9mdW5jKSBTS01fc2tfcG9wX2ZyZWUoU1RBQ0tfT0ZfWDUwOV9OQU1FX0VOVFJZLCAoc3QpLCAoZnJlZV9mdW5jKSkKKyNkZWZpbmUgc2tfU1RBQ0tfT0ZfWDUwOV9OQU1FX0VOVFJZX3NoaWZ0KHN0KSBTS01fc2tfc2hpZnQoU1RBQ0tfT0ZfWDUwOV9OQU1FX0VOVFJZLCAoc3QpKQorI2RlZmluZSBza19TVEFDS19PRl9YNTA5X05BTUVfRU5UUllfcG9wKHN0KSBTS01fc2tfcG9wKFNUQUNLX09GX1g1MDlfTkFNRV9FTlRSWSwgKHN0KSkKKyNkZWZpbmUgc2tfU1RBQ0tfT0ZfWDUwOV9OQU1FX0VOVFJZX3NvcnQoc3QpIFNLTV9za19zb3J0KFNUQUNLX09GX1g1MDlfTkFNRV9FTlRSWSwgKHN0KSkKKyNkZWZpbmUgc2tfU1RBQ0tfT0ZfWDUwOV9OQU1FX0VOVFJZX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChTVEFDS19PRl9YNTA5X05BTUVfRU5UUlksIChzdCkpCisKKyNkZWZpbmUgc2tfU1RPUkVfQVRUUl9JTkZPX25ldyhjbXApIFNLTV9za19uZXcoU1RPUkVfQVRUUl9JTkZPLCAoY21wKSkKKyNkZWZpbmUgc2tfU1RPUkVfQVRUUl9JTkZPX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKFNUT1JFX0FUVFJfSU5GTykKKyNkZWZpbmUgc2tfU1RPUkVfQVRUUl9JTkZPX2ZyZWUoc3QpIFNLTV9za19mcmVlKFNUT1JFX0FUVFJfSU5GTywgKHN0KSkKKyNkZWZpbmUgc2tfU1RPUkVfQVRUUl9JTkZPX251bShzdCkgU0tNX3NrX251bShTVE9SRV9BVFRSX0lORk8sIChzdCkpCisjZGVmaW5lIHNrX1NUT1JFX0FUVFJfSU5GT192YWx1ZShzdCwgaSkgU0tNX3NrX3ZhbHVlKFNUT1JFX0FUVFJfSU5GTywgKHN0KSwgKGkpKQorI2RlZmluZSBza19TVE9SRV9BVFRSX0lORk9fc2V0KHN0LCBpLCB2YWwpIFNLTV9za19zZXQoU1RPUkVfQVRUUl9JTkZPLCAoc3QpLCAoaSksICh2YWwpKQorI2RlZmluZSBza19TVE9SRV9BVFRSX0lORk9femVybyhzdCkgU0tNX3NrX3plcm8oU1RPUkVfQVRUUl9JTkZPLCAoc3QpKQorI2RlZmluZSBza19TVE9SRV9BVFRSX0lORk9fcHVzaChzdCwgdmFsKSBTS01fc2tfcHVzaChTVE9SRV9BVFRSX0lORk8sIChzdCksICh2YWwpKQorI2RlZmluZSBza19TVE9SRV9BVFRSX0lORk9fdW5zaGlmdChzdCwgdmFsKSBTS01fc2tfdW5zaGlmdChTVE9SRV9BVFRSX0lORk8sIChzdCksICh2YWwpKQorI2RlZmluZSBza19TVE9SRV9BVFRSX0lORk9fZmluZChzdCwgdmFsKSBTS01fc2tfZmluZChTVE9SRV9BVFRSX0lORk8sIChzdCksICh2YWwpKQorI2RlZmluZSBza19TVE9SRV9BVFRSX0lORk9fZmluZF9leChzdCwgdmFsKSBTS01fc2tfZmluZF9leChTVE9SRV9BVFRSX0lORk8sIChzdCksICh2YWwpKQorI2RlZmluZSBza19TVE9SRV9BVFRSX0lORk9fZGVsZXRlKHN0LCBpKSBTS01fc2tfZGVsZXRlKFNUT1JFX0FUVFJfSU5GTywgKHN0KSwgKGkpKQorI2RlZmluZSBza19TVE9SRV9BVFRSX0lORk9fZGVsZXRlX3B0cihzdCwgcHRyKSBTS01fc2tfZGVsZXRlX3B0cihTVE9SRV9BVFRSX0lORk8sIChzdCksIChwdHIpKQorI2RlZmluZSBza19TVE9SRV9BVFRSX0lORk9faW5zZXJ0KHN0LCB2YWwsIGkpIFNLTV9za19pbnNlcnQoU1RPUkVfQVRUUl9JTkZPLCAoc3QpLCAodmFsKSwgKGkpKQorI2RlZmluZSBza19TVE9SRV9BVFRSX0lORk9fc2V0X2NtcF9mdW5jKHN0LCBjbXApIFNLTV9za19zZXRfY21wX2Z1bmMoU1RPUkVfQVRUUl9JTkZPLCAoc3QpLCAoY21wKSkKKyNkZWZpbmUgc2tfU1RPUkVfQVRUUl9JTkZPX2R1cChzdCkgU0tNX3NrX2R1cChTVE9SRV9BVFRSX0lORk8sIHN0KQorI2RlZmluZSBza19TVE9SRV9BVFRSX0lORk9fcG9wX2ZyZWUoc3QsIGZyZWVfZnVuYykgU0tNX3NrX3BvcF9mcmVlKFNUT1JFX0FUVFJfSU5GTywgKHN0KSwgKGZyZWVfZnVuYykpCisjZGVmaW5lIHNrX1NUT1JFX0FUVFJfSU5GT19zaGlmdChzdCkgU0tNX3NrX3NoaWZ0KFNUT1JFX0FUVFJfSU5GTywgKHN0KSkKKyNkZWZpbmUgc2tfU1RPUkVfQVRUUl9JTkZPX3BvcChzdCkgU0tNX3NrX3BvcChTVE9SRV9BVFRSX0lORk8sIChzdCkpCisjZGVmaW5lIHNrX1NUT1JFX0FUVFJfSU5GT19zb3J0KHN0KSBTS01fc2tfc29ydChTVE9SRV9BVFRSX0lORk8sIChzdCkpCisjZGVmaW5lIHNrX1NUT1JFX0FUVFJfSU5GT19pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoU1RPUkVfQVRUUl9JTkZPLCAoc3QpKQorCisjZGVmaW5lIHNrX1NUT1JFX09CSkVDVF9uZXcoY21wKSBTS01fc2tfbmV3KFNUT1JFX09CSkVDVCwgKGNtcCkpCiAjZGVmaW5lIHNrX1NUT1JFX09CSkVDVF9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChTVE9SRV9PQkpFQ1QpCiAjZGVmaW5lIHNrX1NUT1JFX09CSkVDVF9mcmVlKHN0KSBTS01fc2tfZnJlZShTVE9SRV9PQkpFQ1QsIChzdCkpCiAjZGVmaW5lIHNrX1NUT1JFX09CSkVDVF9udW0oc3QpIFNLTV9za19udW0oU1RPUkVfT0JKRUNULCAoc3QpKQpAQCAtMTMzOCw3ICsxNTY4LDcgQEAKICNkZWZpbmUgc2tfU1RPUkVfT0JKRUNUX3NvcnQoc3QpIFNLTV9za19zb3J0KFNUT1JFX09CSkVDVCwgKHN0KSkKICNkZWZpbmUgc2tfU1RPUkVfT0JKRUNUX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChTVE9SRV9PQkpFQ1QsIChzdCkpCiAKLSNkZWZpbmUgc2tfU1hORVRJRF9uZXcoc3QpIFNLTV9za19uZXcoU1hORVRJRCwgKHN0KSkKKyNkZWZpbmUgc2tfU1hORVRJRF9uZXcoY21wKSBTS01fc2tfbmV3KFNYTkVUSUQsIChjbXApKQogI2RlZmluZSBza19TWE5FVElEX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKFNYTkVUSUQpCiAjZGVmaW5lIHNrX1NYTkVUSURfZnJlZShzdCkgU0tNX3NrX2ZyZWUoU1hORVRJRCwgKHN0KSkKICNkZWZpbmUgc2tfU1hORVRJRF9udW0oc3QpIFNLTV9za19udW0oU1hORVRJRCwgKHN0KSkKQEAgLTEzNjAsNyArMTU5MCw3IEBACiAjZGVmaW5lIHNrX1NYTkVUSURfc29ydChzdCkgU0tNX3NrX3NvcnQoU1hORVRJRCwgKHN0KSkKICNkZWZpbmUgc2tfU1hORVRJRF9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoU1hORVRJRCwgKHN0KSkKIAotI2RlZmluZSBza19VSV9TVFJJTkdfbmV3KHN0KSBTS01fc2tfbmV3KFVJX1NUUklORywgKHN0KSkKKyNkZWZpbmUgc2tfVUlfU1RSSU5HX25ldyhjbXApIFNLTV9za19uZXcoVUlfU1RSSU5HLCAoY21wKSkKICNkZWZpbmUgc2tfVUlfU1RSSU5HX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKFVJX1NUUklORykKICNkZWZpbmUgc2tfVUlfU1RSSU5HX2ZyZWUoc3QpIFNLTV9za19mcmVlKFVJX1NUUklORywgKHN0KSkKICNkZWZpbmUgc2tfVUlfU1RSSU5HX251bShzdCkgU0tNX3NrX251bShVSV9TVFJJTkcsIChzdCkpCkBAIC0xMzgyLDcgKzE2MTIsNyBAQAogI2RlZmluZSBza19VSV9TVFJJTkdfc29ydChzdCkgU0tNX3NrX3NvcnQoVUlfU1RSSU5HLCAoc3QpKQogI2RlZmluZSBza19VSV9TVFJJTkdfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKFVJX1NUUklORywgKHN0KSkKIAotI2RlZmluZSBza19YNTA5X25ldyhzdCkgU0tNX3NrX25ldyhYNTA5LCAoc3QpKQorI2RlZmluZSBza19YNTA5X25ldyhjbXApIFNLTV9za19uZXcoWDUwOSwgKGNtcCkpCiAjZGVmaW5lIHNrX1g1MDlfbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoWDUwOSkKICNkZWZpbmUgc2tfWDUwOV9mcmVlKHN0KSBTS01fc2tfZnJlZShYNTA5LCAoc3QpKQogI2RlZmluZSBza19YNTA5X251bShzdCkgU0tNX3NrX251bShYNTA5LCAoc3QpKQpAQCAtMTQwNCw3ICsxNjM0LDcgQEAKICNkZWZpbmUgc2tfWDUwOV9zb3J0KHN0KSBTS01fc2tfc29ydChYNTA5LCAoc3QpKQogI2RlZmluZSBza19YNTA5X2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChYNTA5LCAoc3QpKQogCi0jZGVmaW5lIHNrX1g1MDlWM19FWFRfTUVUSE9EX25ldyhzdCkgU0tNX3NrX25ldyhYNTA5VjNfRVhUX01FVEhPRCwgKHN0KSkKKyNkZWZpbmUgc2tfWDUwOVYzX0VYVF9NRVRIT0RfbmV3KGNtcCkgU0tNX3NrX25ldyhYNTA5VjNfRVhUX01FVEhPRCwgKGNtcCkpCiAjZGVmaW5lIHNrX1g1MDlWM19FWFRfTUVUSE9EX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKFg1MDlWM19FWFRfTUVUSE9EKQogI2RlZmluZSBza19YNTA5VjNfRVhUX01FVEhPRF9mcmVlKHN0KSBTS01fc2tfZnJlZShYNTA5VjNfRVhUX01FVEhPRCwgKHN0KSkKICNkZWZpbmUgc2tfWDUwOVYzX0VYVF9NRVRIT0RfbnVtKHN0KSBTS01fc2tfbnVtKFg1MDlWM19FWFRfTUVUSE9ELCAoc3QpKQpAQCAtMTQyNiw3ICsxNjU2LDcgQEAKICNkZWZpbmUgc2tfWDUwOVYzX0VYVF9NRVRIT0Rfc29ydChzdCkgU0tNX3NrX3NvcnQoWDUwOVYzX0VYVF9NRVRIT0QsIChzdCkpCiAjZGVmaW5lIHNrX1g1MDlWM19FWFRfTUVUSE9EX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChYNTA5VjNfRVhUX01FVEhPRCwgKHN0KSkKIAotI2RlZmluZSBza19YNTA5X0FMR09SX25ldyhzdCkgU0tNX3NrX25ldyhYNTA5X0FMR09SLCAoc3QpKQorI2RlZmluZSBza19YNTA5X0FMR09SX25ldyhjbXApIFNLTV9za19uZXcoWDUwOV9BTEdPUiwgKGNtcCkpCiAjZGVmaW5lIHNrX1g1MDlfQUxHT1JfbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoWDUwOV9BTEdPUikKICNkZWZpbmUgc2tfWDUwOV9BTEdPUl9mcmVlKHN0KSBTS01fc2tfZnJlZShYNTA5X0FMR09SLCAoc3QpKQogI2RlZmluZSBza19YNTA5X0FMR09SX251bShzdCkgU0tNX3NrX251bShYNTA5X0FMR09SLCAoc3QpKQpAQCAtMTQ0OCw3ICsxNjc4LDcgQEAKICNkZWZpbmUgc2tfWDUwOV9BTEdPUl9zb3J0KHN0KSBTS01fc2tfc29ydChYNTA5X0FMR09SLCAoc3QpKQogI2RlZmluZSBza19YNTA5X0FMR09SX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChYNTA5X0FMR09SLCAoc3QpKQogCi0jZGVmaW5lIHNrX1g1MDlfQVRUUklCVVRFX25ldyhzdCkgU0tNX3NrX25ldyhYNTA5X0FUVFJJQlVURSwgKHN0KSkKKyNkZWZpbmUgc2tfWDUwOV9BVFRSSUJVVEVfbmV3KGNtcCkgU0tNX3NrX25ldyhYNTA5X0FUVFJJQlVURSwgKGNtcCkpCiAjZGVmaW5lIHNrX1g1MDlfQVRUUklCVVRFX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKFg1MDlfQVRUUklCVVRFKQogI2RlZmluZSBza19YNTA5X0FUVFJJQlVURV9mcmVlKHN0KSBTS01fc2tfZnJlZShYNTA5X0FUVFJJQlVURSwgKHN0KSkKICNkZWZpbmUgc2tfWDUwOV9BVFRSSUJVVEVfbnVtKHN0KSBTS01fc2tfbnVtKFg1MDlfQVRUUklCVVRFLCAoc3QpKQpAQCAtMTQ3MCw3ICsxNzAwLDcgQEAKICNkZWZpbmUgc2tfWDUwOV9BVFRSSUJVVEVfc29ydChzdCkgU0tNX3NrX3NvcnQoWDUwOV9BVFRSSUJVVEUsIChzdCkpCiAjZGVmaW5lIHNrX1g1MDlfQVRUUklCVVRFX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChYNTA5X0FUVFJJQlVURSwgKHN0KSkKIAotI2RlZmluZSBza19YNTA5X0NSTF9uZXcoc3QpIFNLTV9za19uZXcoWDUwOV9DUkwsIChzdCkpCisjZGVmaW5lIHNrX1g1MDlfQ1JMX25ldyhjbXApIFNLTV9za19uZXcoWDUwOV9DUkwsIChjbXApKQogI2RlZmluZSBza19YNTA5X0NSTF9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChYNTA5X0NSTCkKICNkZWZpbmUgc2tfWDUwOV9DUkxfZnJlZShzdCkgU0tNX3NrX2ZyZWUoWDUwOV9DUkwsIChzdCkpCiAjZGVmaW5lIHNrX1g1MDlfQ1JMX251bShzdCkgU0tNX3NrX251bShYNTA5X0NSTCwgKHN0KSkKQEAgLTE0OTIsNyArMTcyMiw3IEBACiAjZGVmaW5lIHNrX1g1MDlfQ1JMX3NvcnQoc3QpIFNLTV9za19zb3J0KFg1MDlfQ1JMLCAoc3QpKQogI2RlZmluZSBza19YNTA5X0NSTF9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoWDUwOV9DUkwsIChzdCkpCiAKLSNkZWZpbmUgc2tfWDUwOV9FWFRFTlNJT05fbmV3KHN0KSBTS01fc2tfbmV3KFg1MDlfRVhURU5TSU9OLCAoc3QpKQorI2RlZmluZSBza19YNTA5X0VYVEVOU0lPTl9uZXcoY21wKSBTS01fc2tfbmV3KFg1MDlfRVhURU5TSU9OLCAoY21wKSkKICNkZWZpbmUgc2tfWDUwOV9FWFRFTlNJT05fbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoWDUwOV9FWFRFTlNJT04pCiAjZGVmaW5lIHNrX1g1MDlfRVhURU5TSU9OX2ZyZWUoc3QpIFNLTV9za19mcmVlKFg1MDlfRVhURU5TSU9OLCAoc3QpKQogI2RlZmluZSBza19YNTA5X0VYVEVOU0lPTl9udW0oc3QpIFNLTV9za19udW0oWDUwOV9FWFRFTlNJT04sIChzdCkpCkBAIC0xNTE0LDcgKzE3NDQsNyBAQAogI2RlZmluZSBza19YNTA5X0VYVEVOU0lPTl9zb3J0KHN0KSBTS01fc2tfc29ydChYNTA5X0VYVEVOU0lPTiwgKHN0KSkKICNkZWZpbmUgc2tfWDUwOV9FWFRFTlNJT05faXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKFg1MDlfRVhURU5TSU9OLCAoc3QpKQogCi0jZGVmaW5lIHNrX1g1MDlfSU5GT19uZXcoc3QpIFNLTV9za19uZXcoWDUwOV9JTkZPLCAoc3QpKQorI2RlZmluZSBza19YNTA5X0lORk9fbmV3KGNtcCkgU0tNX3NrX25ldyhYNTA5X0lORk8sIChjbXApKQogI2RlZmluZSBza19YNTA5X0lORk9fbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoWDUwOV9JTkZPKQogI2RlZmluZSBza19YNTA5X0lORk9fZnJlZShzdCkgU0tNX3NrX2ZyZWUoWDUwOV9JTkZPLCAoc3QpKQogI2RlZmluZSBza19YNTA5X0lORk9fbnVtKHN0KSBTS01fc2tfbnVtKFg1MDlfSU5GTywgKHN0KSkKQEAgLTE1MzYsNyArMTc2Niw3IEBACiAjZGVmaW5lIHNrX1g1MDlfSU5GT19zb3J0KHN0KSBTS01fc2tfc29ydChYNTA5X0lORk8sIChzdCkpCiAjZGVmaW5lIHNrX1g1MDlfSU5GT19pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoWDUwOV9JTkZPLCAoc3QpKQogCi0jZGVmaW5lIHNrX1g1MDlfTE9PS1VQX25ldyhzdCkgU0tNX3NrX25ldyhYNTA5X0xPT0tVUCwgKHN0KSkKKyNkZWZpbmUgc2tfWDUwOV9MT09LVVBfbmV3KGNtcCkgU0tNX3NrX25ldyhYNTA5X0xPT0tVUCwgKGNtcCkpCiAjZGVmaW5lIHNrX1g1MDlfTE9PS1VQX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKFg1MDlfTE9PS1VQKQogI2RlZmluZSBza19YNTA5X0xPT0tVUF9mcmVlKHN0KSBTS01fc2tfZnJlZShYNTA5X0xPT0tVUCwgKHN0KSkKICNkZWZpbmUgc2tfWDUwOV9MT09LVVBfbnVtKHN0KSBTS01fc2tfbnVtKFg1MDlfTE9PS1VQLCAoc3QpKQpAQCAtMTU1OCw3ICsxNzg4LDcgQEAKICNkZWZpbmUgc2tfWDUwOV9MT09LVVBfc29ydChzdCkgU0tNX3NrX3NvcnQoWDUwOV9MT09LVVAsIChzdCkpCiAjZGVmaW5lIHNrX1g1MDlfTE9PS1VQX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChYNTA5X0xPT0tVUCwgKHN0KSkKIAotI2RlZmluZSBza19YNTA5X05BTUVfbmV3KHN0KSBTS01fc2tfbmV3KFg1MDlfTkFNRSwgKHN0KSkKKyNkZWZpbmUgc2tfWDUwOV9OQU1FX25ldyhjbXApIFNLTV9za19uZXcoWDUwOV9OQU1FLCAoY21wKSkKICNkZWZpbmUgc2tfWDUwOV9OQU1FX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKFg1MDlfTkFNRSkKICNkZWZpbmUgc2tfWDUwOV9OQU1FX2ZyZWUoc3QpIFNLTV9za19mcmVlKFg1MDlfTkFNRSwgKHN0KSkKICNkZWZpbmUgc2tfWDUwOV9OQU1FX251bShzdCkgU0tNX3NrX251bShYNTA5X05BTUUsIChzdCkpCkBAIC0xNTgwLDcgKzE4MTAsNyBAQAogI2RlZmluZSBza19YNTA5X05BTUVfc29ydChzdCkgU0tNX3NrX3NvcnQoWDUwOV9OQU1FLCAoc3QpKQogI2RlZmluZSBza19YNTA5X05BTUVfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKFg1MDlfTkFNRSwgKHN0KSkKIAotI2RlZmluZSBza19YNTA5X05BTUVfRU5UUllfbmV3KHN0KSBTS01fc2tfbmV3KFg1MDlfTkFNRV9FTlRSWSwgKHN0KSkKKyNkZWZpbmUgc2tfWDUwOV9OQU1FX0VOVFJZX25ldyhjbXApIFNLTV9za19uZXcoWDUwOV9OQU1FX0VOVFJZLCAoY21wKSkKICNkZWZpbmUgc2tfWDUwOV9OQU1FX0VOVFJZX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKFg1MDlfTkFNRV9FTlRSWSkKICNkZWZpbmUgc2tfWDUwOV9OQU1FX0VOVFJZX2ZyZWUoc3QpIFNLTV9za19mcmVlKFg1MDlfTkFNRV9FTlRSWSwgKHN0KSkKICNkZWZpbmUgc2tfWDUwOV9OQU1FX0VOVFJZX251bShzdCkgU0tNX3NrX251bShYNTA5X05BTUVfRU5UUlksIChzdCkpCkBAIC0xNjAyLDcgKzE4MzIsNyBAQAogI2RlZmluZSBza19YNTA5X05BTUVfRU5UUllfc29ydChzdCkgU0tNX3NrX3NvcnQoWDUwOV9OQU1FX0VOVFJZLCAoc3QpKQogI2RlZmluZSBza19YNTA5X05BTUVfRU5UUllfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKFg1MDlfTkFNRV9FTlRSWSwgKHN0KSkKIAotI2RlZmluZSBza19YNTA5X09CSkVDVF9uZXcoc3QpIFNLTV9za19uZXcoWDUwOV9PQkpFQ1QsIChzdCkpCisjZGVmaW5lIHNrX1g1MDlfT0JKRUNUX25ldyhjbXApIFNLTV9za19uZXcoWDUwOV9PQkpFQ1QsIChjbXApKQogI2RlZmluZSBza19YNTA5X09CSkVDVF9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChYNTA5X09CSkVDVCkKICNkZWZpbmUgc2tfWDUwOV9PQkpFQ1RfZnJlZShzdCkgU0tNX3NrX2ZyZWUoWDUwOV9PQkpFQ1QsIChzdCkpCiAjZGVmaW5lIHNrX1g1MDlfT0JKRUNUX251bShzdCkgU0tNX3NrX251bShYNTA5X09CSkVDVCwgKHN0KSkKQEAgLTE2MjQsNyArMTg1NCw3IEBACiAjZGVmaW5lIHNrX1g1MDlfT0JKRUNUX3NvcnQoc3QpIFNLTV9za19zb3J0KFg1MDlfT0JKRUNULCAoc3QpKQogI2RlZmluZSBza19YNTA5X09CSkVDVF9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoWDUwOV9PQkpFQ1QsIChzdCkpCiAKLSNkZWZpbmUgc2tfWDUwOV9QT0xJQ1lfREFUQV9uZXcoc3QpIFNLTV9za19uZXcoWDUwOV9QT0xJQ1lfREFUQSwgKHN0KSkKKyNkZWZpbmUgc2tfWDUwOV9QT0xJQ1lfREFUQV9uZXcoY21wKSBTS01fc2tfbmV3KFg1MDlfUE9MSUNZX0RBVEEsIChjbXApKQogI2RlZmluZSBza19YNTA5X1BPTElDWV9EQVRBX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKFg1MDlfUE9MSUNZX0RBVEEpCiAjZGVmaW5lIHNrX1g1MDlfUE9MSUNZX0RBVEFfZnJlZShzdCkgU0tNX3NrX2ZyZWUoWDUwOV9QT0xJQ1lfREFUQSwgKHN0KSkKICNkZWZpbmUgc2tfWDUwOV9QT0xJQ1lfREFUQV9udW0oc3QpIFNLTV9za19udW0oWDUwOV9QT0xJQ1lfREFUQSwgKHN0KSkKQEAgLTE2NDYsNyArMTg3Niw3IEBACiAjZGVmaW5lIHNrX1g1MDlfUE9MSUNZX0RBVEFfc29ydChzdCkgU0tNX3NrX3NvcnQoWDUwOV9QT0xJQ1lfREFUQSwgKHN0KSkKICNkZWZpbmUgc2tfWDUwOV9QT0xJQ1lfREFUQV9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoWDUwOV9QT0xJQ1lfREFUQSwgKHN0KSkKIAotI2RlZmluZSBza19YNTA5X1BPTElDWV9OT0RFX25ldyhzdCkgU0tNX3NrX25ldyhYNTA5X1BPTElDWV9OT0RFLCAoc3QpKQorI2RlZmluZSBza19YNTA5X1BPTElDWV9OT0RFX25ldyhjbXApIFNLTV9za19uZXcoWDUwOV9QT0xJQ1lfTk9ERSwgKGNtcCkpCiAjZGVmaW5lIHNrX1g1MDlfUE9MSUNZX05PREVfbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoWDUwOV9QT0xJQ1lfTk9ERSkKICNkZWZpbmUgc2tfWDUwOV9QT0xJQ1lfTk9ERV9mcmVlKHN0KSBTS01fc2tfZnJlZShYNTA5X1BPTElDWV9OT0RFLCAoc3QpKQogI2RlZmluZSBza19YNTA5X1BPTElDWV9OT0RFX251bShzdCkgU0tNX3NrX251bShYNTA5X1BPTElDWV9OT0RFLCAoc3QpKQpAQCAtMTY2OCwyOSArMTg5OCw3IEBACiAjZGVmaW5lIHNrX1g1MDlfUE9MSUNZX05PREVfc29ydChzdCkgU0tNX3NrX3NvcnQoWDUwOV9QT0xJQ1lfTk9ERSwgKHN0KSkKICNkZWZpbmUgc2tfWDUwOV9QT0xJQ1lfTk9ERV9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoWDUwOV9QT0xJQ1lfTk9ERSwgKHN0KSkKIAotI2RlZmluZSBza19YNTA5X1BPTElDWV9SRUZfbmV3KHN0KSBTS01fc2tfbmV3KFg1MDlfUE9MSUNZX1JFRiwgKHN0KSkKLSNkZWZpbmUgc2tfWDUwOV9QT0xJQ1lfUkVGX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKFg1MDlfUE9MSUNZX1JFRikKLSNkZWZpbmUgc2tfWDUwOV9QT0xJQ1lfUkVGX2ZyZWUoc3QpIFNLTV9za19mcmVlKFg1MDlfUE9MSUNZX1JFRiwgKHN0KSkKLSNkZWZpbmUgc2tfWDUwOV9QT0xJQ1lfUkVGX251bShzdCkgU0tNX3NrX251bShYNTA5X1BPTElDWV9SRUYsIChzdCkpCi0jZGVmaW5lIHNrX1g1MDlfUE9MSUNZX1JFRl92YWx1ZShzdCwgaSkgU0tNX3NrX3ZhbHVlKFg1MDlfUE9MSUNZX1JFRiwgKHN0KSwgKGkpKQotI2RlZmluZSBza19YNTA5X1BPTElDWV9SRUZfc2V0KHN0LCBpLCB2YWwpIFNLTV9za19zZXQoWDUwOV9QT0xJQ1lfUkVGLCAoc3QpLCAoaSksICh2YWwpKQotI2RlZmluZSBza19YNTA5X1BPTElDWV9SRUZfemVybyhzdCkgU0tNX3NrX3plcm8oWDUwOV9QT0xJQ1lfUkVGLCAoc3QpKQotI2RlZmluZSBza19YNTA5X1BPTElDWV9SRUZfcHVzaChzdCwgdmFsKSBTS01fc2tfcHVzaChYNTA5X1BPTElDWV9SRUYsIChzdCksICh2YWwpKQotI2RlZmluZSBza19YNTA5X1BPTElDWV9SRUZfdW5zaGlmdChzdCwgdmFsKSBTS01fc2tfdW5zaGlmdChYNTA5X1BPTElDWV9SRUYsIChzdCksICh2YWwpKQotI2RlZmluZSBza19YNTA5X1BPTElDWV9SRUZfZmluZChzdCwgdmFsKSBTS01fc2tfZmluZChYNTA5X1BPTElDWV9SRUYsIChzdCksICh2YWwpKQotI2RlZmluZSBza19YNTA5X1BPTElDWV9SRUZfZmluZF9leChzdCwgdmFsKSBTS01fc2tfZmluZF9leChYNTA5X1BPTElDWV9SRUYsIChzdCksICh2YWwpKQotI2RlZmluZSBza19YNTA5X1BPTElDWV9SRUZfZGVsZXRlKHN0LCBpKSBTS01fc2tfZGVsZXRlKFg1MDlfUE9MSUNZX1JFRiwgKHN0KSwgKGkpKQotI2RlZmluZSBza19YNTA5X1BPTElDWV9SRUZfZGVsZXRlX3B0cihzdCwgcHRyKSBTS01fc2tfZGVsZXRlX3B0cihYNTA5X1BPTElDWV9SRUYsIChzdCksIChwdHIpKQotI2RlZmluZSBza19YNTA5X1BPTElDWV9SRUZfaW5zZXJ0KHN0LCB2YWwsIGkpIFNLTV9za19pbnNlcnQoWDUwOV9QT0xJQ1lfUkVGLCAoc3QpLCAodmFsKSwgKGkpKQotI2RlZmluZSBza19YNTA5X1BPTElDWV9SRUZfc2V0X2NtcF9mdW5jKHN0LCBjbXApIFNLTV9za19zZXRfY21wX2Z1bmMoWDUwOV9QT0xJQ1lfUkVGLCAoc3QpLCAoY21wKSkKLSNkZWZpbmUgc2tfWDUwOV9QT0xJQ1lfUkVGX2R1cChzdCkgU0tNX3NrX2R1cChYNTA5X1BPTElDWV9SRUYsIHN0KQotI2RlZmluZSBza19YNTA5X1BPTElDWV9SRUZfcG9wX2ZyZWUoc3QsIGZyZWVfZnVuYykgU0tNX3NrX3BvcF9mcmVlKFg1MDlfUE9MSUNZX1JFRiwgKHN0KSwgKGZyZWVfZnVuYykpCi0jZGVmaW5lIHNrX1g1MDlfUE9MSUNZX1JFRl9zaGlmdChzdCkgU0tNX3NrX3NoaWZ0KFg1MDlfUE9MSUNZX1JFRiwgKHN0KSkKLSNkZWZpbmUgc2tfWDUwOV9QT0xJQ1lfUkVGX3BvcChzdCkgU0tNX3NrX3BvcChYNTA5X1BPTElDWV9SRUYsIChzdCkpCi0jZGVmaW5lIHNrX1g1MDlfUE9MSUNZX1JFRl9zb3J0KHN0KSBTS01fc2tfc29ydChYNTA5X1BPTElDWV9SRUYsIChzdCkpCi0jZGVmaW5lIHNrX1g1MDlfUE9MSUNZX1JFRl9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoWDUwOV9QT0xJQ1lfUkVGLCAoc3QpKQotCi0jZGVmaW5lIHNrX1g1MDlfUFVSUE9TRV9uZXcoc3QpIFNLTV9za19uZXcoWDUwOV9QVVJQT1NFLCAoc3QpKQorI2RlZmluZSBza19YNTA5X1BVUlBPU0VfbmV3KGNtcCkgU0tNX3NrX25ldyhYNTA5X1BVUlBPU0UsIChjbXApKQogI2RlZmluZSBza19YNTA5X1BVUlBPU0VfbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoWDUwOV9QVVJQT1NFKQogI2RlZmluZSBza19YNTA5X1BVUlBPU0VfZnJlZShzdCkgU0tNX3NrX2ZyZWUoWDUwOV9QVVJQT1NFLCAoc3QpKQogI2RlZmluZSBza19YNTA5X1BVUlBPU0VfbnVtKHN0KSBTS01fc2tfbnVtKFg1MDlfUFVSUE9TRSwgKHN0KSkKQEAgLTE3MTIsNyArMTkyMCw3IEBACiAjZGVmaW5lIHNrX1g1MDlfUFVSUE9TRV9zb3J0KHN0KSBTS01fc2tfc29ydChYNTA5X1BVUlBPU0UsIChzdCkpCiAjZGVmaW5lIHNrX1g1MDlfUFVSUE9TRV9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoWDUwOV9QVVJQT1NFLCAoc3QpKQogCi0jZGVmaW5lIHNrX1g1MDlfUkVWT0tFRF9uZXcoc3QpIFNLTV9za19uZXcoWDUwOV9SRVZPS0VELCAoc3QpKQorI2RlZmluZSBza19YNTA5X1JFVk9LRURfbmV3KGNtcCkgU0tNX3NrX25ldyhYNTA5X1JFVk9LRUQsIChjbXApKQogI2RlZmluZSBza19YNTA5X1JFVk9LRURfbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoWDUwOV9SRVZPS0VEKQogI2RlZmluZSBza19YNTA5X1JFVk9LRURfZnJlZShzdCkgU0tNX3NrX2ZyZWUoWDUwOV9SRVZPS0VELCAoc3QpKQogI2RlZmluZSBza19YNTA5X1JFVk9LRURfbnVtKHN0KSBTS01fc2tfbnVtKFg1MDlfUkVWT0tFRCwgKHN0KSkKQEAgLTE3MzQsNyArMTk0Miw3IEBACiAjZGVmaW5lIHNrX1g1MDlfUkVWT0tFRF9zb3J0KHN0KSBTS01fc2tfc29ydChYNTA5X1JFVk9LRUQsIChzdCkpCiAjZGVmaW5lIHNrX1g1MDlfUkVWT0tFRF9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoWDUwOV9SRVZPS0VELCAoc3QpKQogCi0jZGVmaW5lIHNrX1g1MDlfVFJVU1RfbmV3KHN0KSBTS01fc2tfbmV3KFg1MDlfVFJVU1QsIChzdCkpCisjZGVmaW5lIHNrX1g1MDlfVFJVU1RfbmV3KGNtcCkgU0tNX3NrX25ldyhYNTA5X1RSVVNULCAoY21wKSkKICNkZWZpbmUgc2tfWDUwOV9UUlVTVF9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChYNTA5X1RSVVNUKQogI2RlZmluZSBza19YNTA5X1RSVVNUX2ZyZWUoc3QpIFNLTV9za19mcmVlKFg1MDlfVFJVU1QsIChzdCkpCiAjZGVmaW5lIHNrX1g1MDlfVFJVU1RfbnVtKHN0KSBTS01fc2tfbnVtKFg1MDlfVFJVU1QsIChzdCkpCkBAIC0xNzU2LDcgKzE5NjQsNyBAQAogI2RlZmluZSBza19YNTA5X1RSVVNUX3NvcnQoc3QpIFNLTV9za19zb3J0KFg1MDlfVFJVU1QsIChzdCkpCiAjZGVmaW5lIHNrX1g1MDlfVFJVU1RfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKFg1MDlfVFJVU1QsIChzdCkpCiAKLSNkZWZpbmUgc2tfWDUwOV9WRVJJRllfUEFSQU1fbmV3KHN0KSBTS01fc2tfbmV3KFg1MDlfVkVSSUZZX1BBUkFNLCAoc3QpKQorI2RlZmluZSBza19YNTA5X1ZFUklGWV9QQVJBTV9uZXcoY21wKSBTS01fc2tfbmV3KFg1MDlfVkVSSUZZX1BBUkFNLCAoY21wKSkKICNkZWZpbmUgc2tfWDUwOV9WRVJJRllfUEFSQU1fbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoWDUwOV9WRVJJRllfUEFSQU0pCiAjZGVmaW5lIHNrX1g1MDlfVkVSSUZZX1BBUkFNX2ZyZWUoc3QpIFNLTV9za19mcmVlKFg1MDlfVkVSSUZZX1BBUkFNLCAoc3QpKQogI2RlZmluZSBza19YNTA5X1ZFUklGWV9QQVJBTV9udW0oc3QpIFNLTV9za19udW0oWDUwOV9WRVJJRllfUEFSQU0sIChzdCkpCkBAIC0xNzc4LDYgKzE5ODYsMTI1IEBACiAjZGVmaW5lIHNrX1g1MDlfVkVSSUZZX1BBUkFNX3NvcnQoc3QpIFNLTV9za19zb3J0KFg1MDlfVkVSSUZZX1BBUkFNLCAoc3QpKQogI2RlZmluZSBza19YNTA5X1ZFUklGWV9QQVJBTV9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoWDUwOV9WRVJJRllfUEFSQU0sIChzdCkpCiAKKyNkZWZpbmUgc2tfbmlkX3RyaXBsZV9uZXcoY21wKSBTS01fc2tfbmV3KG5pZF90cmlwbGUsIChjbXApKQorI2RlZmluZSBza19uaWRfdHJpcGxlX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKG5pZF90cmlwbGUpCisjZGVmaW5lIHNrX25pZF90cmlwbGVfZnJlZShzdCkgU0tNX3NrX2ZyZWUobmlkX3RyaXBsZSwgKHN0KSkKKyNkZWZpbmUgc2tfbmlkX3RyaXBsZV9udW0oc3QpIFNLTV9za19udW0obmlkX3RyaXBsZSwgKHN0KSkKKyNkZWZpbmUgc2tfbmlkX3RyaXBsZV92YWx1ZShzdCwgaSkgU0tNX3NrX3ZhbHVlKG5pZF90cmlwbGUsIChzdCksIChpKSkKKyNkZWZpbmUgc2tfbmlkX3RyaXBsZV9zZXQoc3QsIGksIHZhbCkgU0tNX3NrX3NldChuaWRfdHJpcGxlLCAoc3QpLCAoaSksICh2YWwpKQorI2RlZmluZSBza19uaWRfdHJpcGxlX3plcm8oc3QpIFNLTV9za196ZXJvKG5pZF90cmlwbGUsIChzdCkpCisjZGVmaW5lIHNrX25pZF90cmlwbGVfcHVzaChzdCwgdmFsKSBTS01fc2tfcHVzaChuaWRfdHJpcGxlLCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfbmlkX3RyaXBsZV91bnNoaWZ0KHN0LCB2YWwpIFNLTV9za191bnNoaWZ0KG5pZF90cmlwbGUsIChzdCksICh2YWwpKQorI2RlZmluZSBza19uaWRfdHJpcGxlX2ZpbmQoc3QsIHZhbCkgU0tNX3NrX2ZpbmQobmlkX3RyaXBsZSwgKHN0KSwgKHZhbCkpCisjZGVmaW5lIHNrX25pZF90cmlwbGVfZmluZF9leChzdCwgdmFsKSBTS01fc2tfZmluZF9leChuaWRfdHJpcGxlLCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfbmlkX3RyaXBsZV9kZWxldGUoc3QsIGkpIFNLTV9za19kZWxldGUobmlkX3RyaXBsZSwgKHN0KSwgKGkpKQorI2RlZmluZSBza19uaWRfdHJpcGxlX2RlbGV0ZV9wdHIoc3QsIHB0cikgU0tNX3NrX2RlbGV0ZV9wdHIobmlkX3RyaXBsZSwgKHN0KSwgKHB0cikpCisjZGVmaW5lIHNrX25pZF90cmlwbGVfaW5zZXJ0KHN0LCB2YWwsIGkpIFNLTV9za19pbnNlcnQobmlkX3RyaXBsZSwgKHN0KSwgKHZhbCksIChpKSkKKyNkZWZpbmUgc2tfbmlkX3RyaXBsZV9zZXRfY21wX2Z1bmMoc3QsIGNtcCkgU0tNX3NrX3NldF9jbXBfZnVuYyhuaWRfdHJpcGxlLCAoc3QpLCAoY21wKSkKKyNkZWZpbmUgc2tfbmlkX3RyaXBsZV9kdXAoc3QpIFNLTV9za19kdXAobmlkX3RyaXBsZSwgc3QpCisjZGVmaW5lIHNrX25pZF90cmlwbGVfcG9wX2ZyZWUoc3QsIGZyZWVfZnVuYykgU0tNX3NrX3BvcF9mcmVlKG5pZF90cmlwbGUsIChzdCksIChmcmVlX2Z1bmMpKQorI2RlZmluZSBza19uaWRfdHJpcGxlX3NoaWZ0KHN0KSBTS01fc2tfc2hpZnQobmlkX3RyaXBsZSwgKHN0KSkKKyNkZWZpbmUgc2tfbmlkX3RyaXBsZV9wb3Aoc3QpIFNLTV9za19wb3AobmlkX3RyaXBsZSwgKHN0KSkKKyNkZWZpbmUgc2tfbmlkX3RyaXBsZV9zb3J0KHN0KSBTS01fc2tfc29ydChuaWRfdHJpcGxlLCAoc3QpKQorI2RlZmluZSBza19uaWRfdHJpcGxlX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChuaWRfdHJpcGxlLCAoc3QpKQorCisjZGVmaW5lIHNrX3ZvaWRfbmV3KGNtcCkgU0tNX3NrX25ldyh2b2lkLCAoY21wKSkKKyNkZWZpbmUgc2tfdm9pZF9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbCh2b2lkKQorI2RlZmluZSBza192b2lkX2ZyZWUoc3QpIFNLTV9za19mcmVlKHZvaWQsIChzdCkpCisjZGVmaW5lIHNrX3ZvaWRfbnVtKHN0KSBTS01fc2tfbnVtKHZvaWQsIChzdCkpCisjZGVmaW5lIHNrX3ZvaWRfdmFsdWUoc3QsIGkpIFNLTV9za192YWx1ZSh2b2lkLCAoc3QpLCAoaSkpCisjZGVmaW5lIHNrX3ZvaWRfc2V0KHN0LCBpLCB2YWwpIFNLTV9za19zZXQodm9pZCwgKHN0KSwgKGkpLCAodmFsKSkKKyNkZWZpbmUgc2tfdm9pZF96ZXJvKHN0KSBTS01fc2tfemVybyh2b2lkLCAoc3QpKQorI2RlZmluZSBza192b2lkX3B1c2goc3QsIHZhbCkgU0tNX3NrX3B1c2godm9pZCwgKHN0KSwgKHZhbCkpCisjZGVmaW5lIHNrX3ZvaWRfdW5zaGlmdChzdCwgdmFsKSBTS01fc2tfdW5zaGlmdCh2b2lkLCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfdm9pZF9maW5kKHN0LCB2YWwpIFNLTV9za19maW5kKHZvaWQsIChzdCksICh2YWwpKQorI2RlZmluZSBza192b2lkX2ZpbmRfZXgoc3QsIHZhbCkgU0tNX3NrX2ZpbmRfZXgodm9pZCwgKHN0KSwgKHZhbCkpCisjZGVmaW5lIHNrX3ZvaWRfZGVsZXRlKHN0LCBpKSBTS01fc2tfZGVsZXRlKHZvaWQsIChzdCksIChpKSkKKyNkZWZpbmUgc2tfdm9pZF9kZWxldGVfcHRyKHN0LCBwdHIpIFNLTV9za19kZWxldGVfcHRyKHZvaWQsIChzdCksIChwdHIpKQorI2RlZmluZSBza192b2lkX2luc2VydChzdCwgdmFsLCBpKSBTS01fc2tfaW5zZXJ0KHZvaWQsIChzdCksICh2YWwpLCAoaSkpCisjZGVmaW5lIHNrX3ZvaWRfc2V0X2NtcF9mdW5jKHN0LCBjbXApIFNLTV9za19zZXRfY21wX2Z1bmModm9pZCwgKHN0KSwgKGNtcCkpCisjZGVmaW5lIHNrX3ZvaWRfZHVwKHN0KSBTS01fc2tfZHVwKHZvaWQsIHN0KQorI2RlZmluZSBza192b2lkX3BvcF9mcmVlKHN0LCBmcmVlX2Z1bmMpIFNLTV9za19wb3BfZnJlZSh2b2lkLCAoc3QpLCAoZnJlZV9mdW5jKSkKKyNkZWZpbmUgc2tfdm9pZF9zaGlmdChzdCkgU0tNX3NrX3NoaWZ0KHZvaWQsIChzdCkpCisjZGVmaW5lIHNrX3ZvaWRfcG9wKHN0KSBTS01fc2tfcG9wKHZvaWQsIChzdCkpCisjZGVmaW5lIHNrX3ZvaWRfc29ydChzdCkgU0tNX3NrX3NvcnQodm9pZCwgKHN0KSkKKyNkZWZpbmUgc2tfdm9pZF9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQodm9pZCwgKHN0KSkKKworI2RlZmluZSBza19PUEVOU1NMX0JMT0NLX25ldyhjbXApICgoU1RBQ0tfT0YoT1BFTlNTTF9CTE9DSykgKilza19uZXcoQ0hFQ0tFRF9TS19DTVBfRlVOQyh2b2lkLCBjbXApKSkKKyNkZWZpbmUgc2tfT1BFTlNTTF9CTE9DS19uZXdfbnVsbCgpICgoU1RBQ0tfT0YoT1BFTlNTTF9CTE9DSykgKilza19uZXdfbnVsbCgpKQorI2RlZmluZSBza19PUEVOU1NMX0JMT0NLX3B1c2goc3QsIHZhbCkgc2tfcHVzaChDSEVDS0VEX1BUUl9PRihTVEFDS19PRihPUEVOU1NMX0JMT0NLKSwgc3QpLCBDSEVDS0VEX1BUUl9PRih2b2lkLCB2YWwpKQorI2RlZmluZSBza19PUEVOU1NMX0JMT0NLX2ZpbmQoc3QsIHZhbCkgc2tfZmluZChDSEVDS0VEX1BUUl9PRihTVEFDS19PRihPUEVOU1NMX0JMT0NLKSwgc3QpLCBDSEVDS0VEX1BUUl9PRih2b2lkLCB2YWwpKQorI2RlZmluZSBza19PUEVOU1NMX0JMT0NLX3ZhbHVlKHN0LCBpKSAoKE9QRU5TU0xfQkxPQ0spc2tfdmFsdWUoQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoT1BFTlNTTF9CTE9DSyksIHN0KSwgaSkpCisjZGVmaW5lIHNrX09QRU5TU0xfQkxPQ0tfbnVtKHN0KSBTS01fc2tfbnVtKE9QRU5TU0xfQkxPQ0ssIHN0KQorI2RlZmluZSBza19PUEVOU1NMX0JMT0NLX3BvcF9mcmVlKHN0LCBmcmVlX2Z1bmMpIHNrX3BvcF9mcmVlKENIRUNLRURfUFRSX09GKFNUQUNLX09GKE9QRU5TU0xfQkxPQ0spLCBzdCksIENIRUNLRURfU0tfRlJFRV9GVU5DMihPUEVOU1NMX0JMT0NLLCBmcmVlX2Z1bmMpKQorI2RlZmluZSBza19PUEVOU1NMX0JMT0NLX2luc2VydChzdCwgdmFsLCBpKSBza19pbnNlcnQoQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoT1BFTlNTTF9CTE9DSyksIHN0KSwgQ0hFQ0tFRF9QVFJfT0Yodm9pZCwgdmFsKSwgaSkKKyNkZWZpbmUgc2tfT1BFTlNTTF9CTE9DS19mcmVlKHN0KSBTS01fc2tfZnJlZShPUEVOU1NMX0JMT0NLLCBzdCkKKyNkZWZpbmUgc2tfT1BFTlNTTF9CTE9DS19zZXQoc3QsIGksIHZhbCkgc2tfc2V0KChfU1RBQ0sgKilDSEVDS0VEX1BUUl9PRihTVEFDS19PRihPUEVOU1NMX0JMT0NLKSwgc3QpLCBpLCBDSEVDS0VEX1BUUl9PRih2b2lkLCB2YWwpKQorI2RlZmluZSBza19PUEVOU1NMX0JMT0NLX3plcm8oc3QpIFNLTV9za196ZXJvKE9QRU5TU0xfQkxPQ0ssIChzdCkpCisjZGVmaW5lIHNrX09QRU5TU0xfQkxPQ0tfdW5zaGlmdChzdCwgdmFsKSBza191bnNoaWZ0KChfU1RBQ0sgKilDSEVDS0VEX1BUUl9PRihTVEFDS19PRihPUEVOU1NMX0JMT0NLKSwgc3QpLCBDSEVDS0VEX1BUUl9PRih2b2lkLCB2YWwpKQorI2RlZmluZSBza19PUEVOU1NMX0JMT0NLX2ZpbmRfZXgoc3QsIHZhbCkgc2tfZmluZF9leCgoX1NUQUNLICopQ0hFQ0tFRF9DT05TVF9QVFJfT0YoU1RBQ0tfT0YoT1BFTlNTTF9CTE9DSyksIHN0KSwgQ0hFQ0tFRF9DT05TVF9QVFJfT0Yodm9pZCwgdmFsKSkKKyNkZWZpbmUgc2tfT1BFTlNTTF9CTE9DS19kZWxldGUoc3QsIGkpIFNLTV9za19kZWxldGUoT1BFTlNTTF9CTE9DSywgKHN0KSwgKGkpKQorI2RlZmluZSBza19PUEVOU1NMX0JMT0NLX2RlbGV0ZV9wdHIoc3QsIHB0cikgKE9QRU5TU0xfQkxPQ0sgKilza19kZWxldGVfcHRyKChfU1RBQ0sgKilDSEVDS0VEX1BUUl9PRihTVEFDS19PRihPUEVOU1NMX0JMT0NLKSwgc3QpLCBDSEVDS0VEX1BUUl9PRih2b2lkLCBwdHIpKQorI2RlZmluZSBza19PUEVOU1NMX0JMT0NLX3NldF9jbXBfZnVuYyhzdCwgY21wKSAgXAorCSgoaW50ICgqKShjb25zdCB2b2lkICogY29uc3QgKixjb25zdCB2b2lkICogY29uc3QgKikpIFwKKwlza19zZXRfY21wX2Z1bmMoKF9TVEFDSyAqKUNIRUNLRURfUFRSX09GKFNUQUNLX09GKE9QRU5TU0xfQkxPQ0spLCBzdCksIENIRUNLRURfU0tfQ01QX0ZVTkModm9pZCwgY21wKSkpCisjZGVmaW5lIHNrX09QRU5TU0xfQkxPQ0tfZHVwKHN0KSBTS01fc2tfZHVwKE9QRU5TU0xfQkxPQ0ssIHN0KQorI2RlZmluZSBza19PUEVOU1NMX0JMT0NLX3NoaWZ0KHN0KSBTS01fc2tfc2hpZnQoT1BFTlNTTF9CTE9DSywgKHN0KSkKKyNkZWZpbmUgc2tfT1BFTlNTTF9CTE9DS19wb3Aoc3QpICh2b2lkICopc2tfcG9wKChfU1RBQ0sgKilDSEVDS0VEX1BUUl9PRihTVEFDS19PRihPUEVOU1NMX0JMT0NLKSwgc3QpKQorI2RlZmluZSBza19PUEVOU1NMX0JMT0NLX3NvcnQoc3QpIFNLTV9za19zb3J0KE9QRU5TU0xfQkxPQ0ssIChzdCkpCisjZGVmaW5lIHNrX09QRU5TU0xfQkxPQ0tfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKE9QRU5TU0xfQkxPQ0ssIChzdCkpCisKKworI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfbmV3KGNtcCkgKChTVEFDS19PRihPUEVOU1NMX1BTVFJJTkcpICopc2tfbmV3KENIRUNLRURfU0tfQ01QX0ZVTkMoT1BFTlNTTF9TVFJJTkcsIGNtcCkpKQorI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfbmV3X251bGwoKSAoKFNUQUNLX09GKE9QRU5TU0xfUFNUUklORykgKilza19uZXdfbnVsbCgpKQorI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfcHVzaChzdCwgdmFsKSBza19wdXNoKENIRUNLRURfUFRSX09GKFNUQUNLX09GKE9QRU5TU0xfUFNUUklORyksIHN0KSwgQ0hFQ0tFRF9QVFJfT0YoT1BFTlNTTF9TVFJJTkcsIHZhbCkpCisjZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19maW5kKHN0LCB2YWwpIHNrX2ZpbmQoQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoT1BFTlNTTF9QU1RSSU5HKSwgc3QpLCBDSEVDS0VEX1BUUl9PRihPUEVOU1NMX1NUUklORywgdmFsKSkKKyNkZWZpbmUgc2tfT1BFTlNTTF9QU1RSSU5HX3ZhbHVlKHN0LCBpKSAoKE9QRU5TU0xfUFNUUklORylza192YWx1ZShDSEVDS0VEX1BUUl9PRihTVEFDS19PRihPUEVOU1NMX1BTVFJJTkcpLCBzdCksIGkpKQorI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfbnVtKHN0KSBTS01fc2tfbnVtKE9QRU5TU0xfUFNUUklORywgc3QpCisjZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19wb3BfZnJlZShzdCwgZnJlZV9mdW5jKSBza19wb3BfZnJlZShDSEVDS0VEX1BUUl9PRihTVEFDS19PRihPUEVOU1NMX1BTVFJJTkcpLCBzdCksIENIRUNLRURfU0tfRlJFRV9GVU5DMihPUEVOU1NMX1BTVFJJTkcsIGZyZWVfZnVuYykpCisjZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19pbnNlcnQoc3QsIHZhbCwgaSkgc2tfaW5zZXJ0KENIRUNLRURfUFRSX09GKFNUQUNLX09GKE9QRU5TU0xfUFNUUklORyksIHN0KSwgQ0hFQ0tFRF9QVFJfT0YoT1BFTlNTTF9TVFJJTkcsIHZhbCksIGkpCisjZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19mcmVlKHN0KSBTS01fc2tfZnJlZShPUEVOU1NMX1BTVFJJTkcsIHN0KQorI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfc2V0KHN0LCBpLCB2YWwpIHNrX3NldCgoX1NUQUNLICopQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoT1BFTlNTTF9QU1RSSU5HKSwgc3QpLCBpLCBDSEVDS0VEX1BUUl9PRihPUEVOU1NMX1NUUklORywgdmFsKSkKKyNkZWZpbmUgc2tfT1BFTlNTTF9QU1RSSU5HX3plcm8oc3QpIFNLTV9za196ZXJvKE9QRU5TU0xfUFNUUklORywgKHN0KSkKKyNkZWZpbmUgc2tfT1BFTlNTTF9QU1RSSU5HX3Vuc2hpZnQoc3QsIHZhbCkgc2tfdW5zaGlmdCgoX1NUQUNLICopQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoT1BFTlNTTF9QU1RSSU5HKSwgc3QpLCBDSEVDS0VEX1BUUl9PRihPUEVOU1NMX1NUUklORywgdmFsKSkKKyNkZWZpbmUgc2tfT1BFTlNTTF9QU1RSSU5HX2ZpbmRfZXgoc3QsIHZhbCkgc2tfZmluZF9leCgoX1NUQUNLICopQ0hFQ0tFRF9DT05TVF9QVFJfT0YoU1RBQ0tfT0YoT1BFTlNTTF9QU1RSSU5HKSwgc3QpLCBDSEVDS0VEX0NPTlNUX1BUUl9PRihPUEVOU1NMX1NUUklORywgdmFsKSkKKyNkZWZpbmUgc2tfT1BFTlNTTF9QU1RSSU5HX2RlbGV0ZShzdCwgaSkgU0tNX3NrX2RlbGV0ZShPUEVOU1NMX1BTVFJJTkcsIChzdCksIChpKSkKKyNkZWZpbmUgc2tfT1BFTlNTTF9QU1RSSU5HX2RlbGV0ZV9wdHIoc3QsIHB0cikgKE9QRU5TU0xfUFNUUklORyAqKXNrX2RlbGV0ZV9wdHIoKF9TVEFDSyAqKUNIRUNLRURfUFRSX09GKFNUQUNLX09GKE9QRU5TU0xfUFNUUklORyksIHN0KSwgQ0hFQ0tFRF9QVFJfT0YoT1BFTlNTTF9TVFJJTkcsIHB0cikpCisjZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19zZXRfY21wX2Z1bmMoc3QsIGNtcCkgIFwKKwkoKGludCAoKikoY29uc3QgT1BFTlNTTF9TVFJJTkcgKiBjb25zdCAqLGNvbnN0IE9QRU5TU0xfU1RSSU5HICogY29uc3QgKikpIFwKKwlza19zZXRfY21wX2Z1bmMoKF9TVEFDSyAqKUNIRUNLRURfUFRSX09GKFNUQUNLX09GKE9QRU5TU0xfUFNUUklORyksIHN0KSwgQ0hFQ0tFRF9TS19DTVBfRlVOQyhPUEVOU1NMX1NUUklORywgY21wKSkpCisjZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19kdXAoc3QpIFNLTV9za19kdXAoT1BFTlNTTF9QU1RSSU5HLCBzdCkKKyNkZWZpbmUgc2tfT1BFTlNTTF9QU1RSSU5HX3NoaWZ0KHN0KSBTS01fc2tfc2hpZnQoT1BFTlNTTF9QU1RSSU5HLCAoc3QpKQorI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfcG9wKHN0KSAoT1BFTlNTTF9TVFJJTkcgKilza19wb3AoKF9TVEFDSyAqKUNIRUNLRURfUFRSX09GKFNUQUNLX09GKE9QRU5TU0xfUFNUUklORyksIHN0KSkKKyNkZWZpbmUgc2tfT1BFTlNTTF9QU1RSSU5HX3NvcnQoc3QpIFNLTV9za19zb3J0KE9QRU5TU0xfUFNUUklORywgKHN0KSkKKyNkZWZpbmUgc2tfT1BFTlNTTF9QU1RSSU5HX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChPUEVOU1NMX1BTVFJJTkcsIChzdCkpCisKKworI2RlZmluZSBza19PUEVOU1NMX1NUUklOR19uZXcoY21wKSAoKFNUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSAqKXNrX25ldyhDSEVDS0VEX1NLX0NNUF9GVU5DKGNoYXIsIGNtcCkpKQorI2RlZmluZSBza19PUEVOU1NMX1NUUklOR19uZXdfbnVsbCgpICgoU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpICopc2tfbmV3X251bGwoKSkKKyNkZWZpbmUgc2tfT1BFTlNTTF9TVFJJTkdfcHVzaChzdCwgdmFsKSBza19wdXNoKENIRUNLRURfUFRSX09GKFNUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSwgc3QpLCBDSEVDS0VEX1BUUl9PRihjaGFyLCB2YWwpKQorI2RlZmluZSBza19PUEVOU1NMX1NUUklOR19maW5kKHN0LCB2YWwpIHNrX2ZpbmQoQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpLCBzdCksIENIRUNLRURfUFRSX09GKGNoYXIsIHZhbCkpCisjZGVmaW5lIHNrX09QRU5TU0xfU1RSSU5HX3ZhbHVlKHN0LCBpKSAoKE9QRU5TU0xfU1RSSU5HKXNrX3ZhbHVlKENIRUNLRURfUFRSX09GKFNUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSwgc3QpLCBpKSkKKyNkZWZpbmUgc2tfT1BFTlNTTF9TVFJJTkdfbnVtKHN0KSBTS01fc2tfbnVtKE9QRU5TU0xfU1RSSU5HLCBzdCkKKyNkZWZpbmUgc2tfT1BFTlNTTF9TVFJJTkdfcG9wX2ZyZWUoc3QsIGZyZWVfZnVuYykgc2tfcG9wX2ZyZWUoQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpLCBzdCksIENIRUNLRURfU0tfRlJFRV9GVU5DMihPUEVOU1NMX1NUUklORywgZnJlZV9mdW5jKSkKKyNkZWZpbmUgc2tfT1BFTlNTTF9TVFJJTkdfaW5zZXJ0KHN0LCB2YWwsIGkpIHNrX2luc2VydChDSEVDS0VEX1BUUl9PRihTVEFDS19PRihPUEVOU1NMX1NUUklORyksIHN0KSwgQ0hFQ0tFRF9QVFJfT0YoY2hhciwgdmFsKSwgaSkKKyNkZWZpbmUgc2tfT1BFTlNTTF9TVFJJTkdfZnJlZShzdCkgU0tNX3NrX2ZyZWUoT1BFTlNTTF9TVFJJTkcsIHN0KQorI2RlZmluZSBza19PUEVOU1NMX1NUUklOR19zZXQoc3QsIGksIHZhbCkgc2tfc2V0KChfU1RBQ0sgKilDSEVDS0VEX1BUUl9PRihTVEFDS19PRihPUEVOU1NMX1NUUklORyksIHN0KSwgaSwgQ0hFQ0tFRF9QVFJfT0YoY2hhciwgdmFsKSkKKyNkZWZpbmUgc2tfT1BFTlNTTF9TVFJJTkdfemVybyhzdCkgU0tNX3NrX3plcm8oT1BFTlNTTF9TVFJJTkcsIChzdCkpCisjZGVmaW5lIHNrX09QRU5TU0xfU1RSSU5HX3Vuc2hpZnQoc3QsIHZhbCkgc2tfdW5zaGlmdCgoX1NUQUNLICopQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpLCBzdCksIENIRUNLRURfUFRSX09GKGNoYXIsIHZhbCkpCisjZGVmaW5lIHNrX09QRU5TU0xfU1RSSU5HX2ZpbmRfZXgoc3QsIHZhbCkgc2tfZmluZF9leCgoX1NUQUNLICopQ0hFQ0tFRF9DT05TVF9QVFJfT0YoU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpLCBzdCksIENIRUNLRURfQ09OU1RfUFRSX09GKGNoYXIsIHZhbCkpCisjZGVmaW5lIHNrX09QRU5TU0xfU1RSSU5HX2RlbGV0ZShzdCwgaSkgU0tNX3NrX2RlbGV0ZShPUEVOU1NMX1NUUklORywgKHN0KSwgKGkpKQorI2RlZmluZSBza19PUEVOU1NMX1NUUklOR19kZWxldGVfcHRyKHN0LCBwdHIpIChPUEVOU1NMX1NUUklORyAqKXNrX2RlbGV0ZV9wdHIoKF9TVEFDSyAqKUNIRUNLRURfUFRSX09GKFNUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSwgc3QpLCBDSEVDS0VEX1BUUl9PRihjaGFyLCBwdHIpKQorI2RlZmluZSBza19PUEVOU1NMX1NUUklOR19zZXRfY21wX2Z1bmMoc3QsIGNtcCkgIFwKKwkoKGludCAoKikoY29uc3QgY2hhciAqIGNvbnN0ICosY29uc3QgY2hhciAqIGNvbnN0ICopKSBcCisJc2tfc2V0X2NtcF9mdW5jKChfU1RBQ0sgKilDSEVDS0VEX1BUUl9PRihTVEFDS19PRihPUEVOU1NMX1NUUklORyksIHN0KSwgQ0hFQ0tFRF9TS19DTVBfRlVOQyhjaGFyLCBjbXApKSkKKyNkZWZpbmUgc2tfT1BFTlNTTF9TVFJJTkdfZHVwKHN0KSBTS01fc2tfZHVwKE9QRU5TU0xfU1RSSU5HLCBzdCkKKyNkZWZpbmUgc2tfT1BFTlNTTF9TVFJJTkdfc2hpZnQoc3QpIFNLTV9za19zaGlmdChPUEVOU1NMX1NUUklORywgKHN0KSkKKyNkZWZpbmUgc2tfT1BFTlNTTF9TVFJJTkdfcG9wKHN0KSAoY2hhciAqKXNrX3BvcCgoX1NUQUNLICopQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpLCBzdCkpCisjZGVmaW5lIHNrX09QRU5TU0xfU1RSSU5HX3NvcnQoc3QpIFNLTV9za19zb3J0KE9QRU5TU0xfU1RSSU5HLCAoc3QpKQorI2RlZmluZSBza19PUEVOU1NMX1NUUklOR19pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoT1BFTlNTTF9TVFJJTkcsIChzdCkpCisKKwogI2RlZmluZSBkMmlfQVNOMV9TRVRfT0ZfQUNDRVNTX0RFU0NSSVBUSU9OKHN0LCBwcCwgbGVuZ3RoLCBkMmlfZnVuYywgZnJlZV9mdW5jLCBleF90YWcsIGV4X2NsYXNzKSBcCiAJU0tNX0FTTjFfU0VUX09GX2QyaShBQ0NFU1NfREVTQ1JJUFRJT04sIChzdCksIChwcCksIChsZW5ndGgpLCAoZDJpX2Z1bmMpLCAoZnJlZV9mdW5jKSwgKGV4X3RhZyksIChleF9jbGFzcykpIAogI2RlZmluZSBpMmRfQVNOMV9TRVRfT0ZfQUNDRVNTX0RFU0NSSVBUSU9OKHN0LCBwcCwgaTJkX2Z1bmMsIGV4X3RhZywgZXhfY2xhc3MsIGlzX3NldCkgXApAQCAtMTgxNCw2ICsyMTQxLDE1IEBACiAjZGVmaW5lIEFTTjFfc2VxX3VucGFja19BU04xX1RZUEUoYnVmLCBsZW4sIGQyaV9mdW5jLCBmcmVlX2Z1bmMpIFwKIAlTS01fQVNOMV9zZXFfdW5wYWNrKEFTTjFfVFlQRSwgKGJ1ZiksIChsZW4pLCAoZDJpX2Z1bmMpLCAoZnJlZV9mdW5jKSkKIAorI2RlZmluZSBkMmlfQVNOMV9TRVRfT0ZfQVNOMV9VVEY4U1RSSU5HKHN0LCBwcCwgbGVuZ3RoLCBkMmlfZnVuYywgZnJlZV9mdW5jLCBleF90YWcsIGV4X2NsYXNzKSBcCisJU0tNX0FTTjFfU0VUX09GX2QyaShBU04xX1VURjhTVFJJTkcsIChzdCksIChwcCksIChsZW5ndGgpLCAoZDJpX2Z1bmMpLCAoZnJlZV9mdW5jKSwgKGV4X3RhZyksIChleF9jbGFzcykpIAorI2RlZmluZSBpMmRfQVNOMV9TRVRfT0ZfQVNOMV9VVEY4U1RSSU5HKHN0LCBwcCwgaTJkX2Z1bmMsIGV4X3RhZywgZXhfY2xhc3MsIGlzX3NldCkgXAorCVNLTV9BU04xX1NFVF9PRl9pMmQoQVNOMV9VVEY4U1RSSU5HLCAoc3QpLCAocHApLCAoaTJkX2Z1bmMpLCAoZXhfdGFnKSwgKGV4X2NsYXNzKSwgKGlzX3NldCkpCisjZGVmaW5lIEFTTjFfc2VxX3BhY2tfQVNOMV9VVEY4U1RSSU5HKHN0LCBpMmRfZnVuYywgYnVmLCBsZW4pIFwKKwlTS01fQVNOMV9zZXFfcGFjayhBU04xX1VURjhTVFJJTkcsIChzdCksIChpMmRfZnVuYyksIChidWYpLCAobGVuKSkKKyNkZWZpbmUgQVNOMV9zZXFfdW5wYWNrX0FTTjFfVVRGOFNUUklORyhidWYsIGxlbiwgZDJpX2Z1bmMsIGZyZWVfZnVuYykgXAorCVNLTV9BU04xX3NlcV91bnBhY2soQVNOMV9VVEY4U1RSSU5HLCAoYnVmKSwgKGxlbiksIChkMmlfZnVuYyksIChmcmVlX2Z1bmMpKQorCiAjZGVmaW5lIGQyaV9BU04xX1NFVF9PRl9ESVNUX1BPSU5UKHN0LCBwcCwgbGVuZ3RoLCBkMmlfZnVuYywgZnJlZV9mdW5jLCBleF90YWcsIGV4X2NsYXNzKSBcCiAJU0tNX0FTTjFfU0VUX09GX2QyaShESVNUX1BPSU5ULCAoc3QpLCAocHApLCAobGVuZ3RoKSwgKGQyaV9mdW5jKSwgKGZyZWVfZnVuYyksIChleF90YWcpLCAoZXhfY2xhc3MpKSAKICNkZWZpbmUgaTJkX0FTTjFfU0VUX09GX0RJU1RfUE9JTlQoc3QsIHBwLCBpMmRfZnVuYywgZXhfdGFnLCBleF9jbGFzcywgaXNfc2V0KSBcCkBAIC0xODIzLDYgKzIxNTksMjQgQEAKICNkZWZpbmUgQVNOMV9zZXFfdW5wYWNrX0RJU1RfUE9JTlQoYnVmLCBsZW4sIGQyaV9mdW5jLCBmcmVlX2Z1bmMpIFwKIAlTS01fQVNOMV9zZXFfdW5wYWNrKERJU1RfUE9JTlQsIChidWYpLCAobGVuKSwgKGQyaV9mdW5jKSwgKGZyZWVfZnVuYykpCiAKKyNkZWZpbmUgZDJpX0FTTjFfU0VUX09GX0VTU19DRVJUX0lEKHN0LCBwcCwgbGVuZ3RoLCBkMmlfZnVuYywgZnJlZV9mdW5jLCBleF90YWcsIGV4X2NsYXNzKSBcCisJU0tNX0FTTjFfU0VUX09GX2QyaShFU1NfQ0VSVF9JRCwgKHN0KSwgKHBwKSwgKGxlbmd0aCksIChkMmlfZnVuYyksIChmcmVlX2Z1bmMpLCAoZXhfdGFnKSwgKGV4X2NsYXNzKSkgCisjZGVmaW5lIGkyZF9BU04xX1NFVF9PRl9FU1NfQ0VSVF9JRChzdCwgcHAsIGkyZF9mdW5jLCBleF90YWcsIGV4X2NsYXNzLCBpc19zZXQpIFwKKwlTS01fQVNOMV9TRVRfT0ZfaTJkKEVTU19DRVJUX0lELCAoc3QpLCAocHApLCAoaTJkX2Z1bmMpLCAoZXhfdGFnKSwgKGV4X2NsYXNzKSwgKGlzX3NldCkpCisjZGVmaW5lIEFTTjFfc2VxX3BhY2tfRVNTX0NFUlRfSUQoc3QsIGkyZF9mdW5jLCBidWYsIGxlbikgXAorCVNLTV9BU04xX3NlcV9wYWNrKEVTU19DRVJUX0lELCAoc3QpLCAoaTJkX2Z1bmMpLCAoYnVmKSwgKGxlbikpCisjZGVmaW5lIEFTTjFfc2VxX3VucGFja19FU1NfQ0VSVF9JRChidWYsIGxlbiwgZDJpX2Z1bmMsIGZyZWVfZnVuYykgXAorCVNLTV9BU04xX3NlcV91bnBhY2soRVNTX0NFUlRfSUQsIChidWYpLCAobGVuKSwgKGQyaV9mdW5jKSwgKGZyZWVfZnVuYykpCisKKyNkZWZpbmUgZDJpX0FTTjFfU0VUX09GX0VWUF9NRChzdCwgcHAsIGxlbmd0aCwgZDJpX2Z1bmMsIGZyZWVfZnVuYywgZXhfdGFnLCBleF9jbGFzcykgXAorCVNLTV9BU04xX1NFVF9PRl9kMmkoRVZQX01ELCAoc3QpLCAocHApLCAobGVuZ3RoKSwgKGQyaV9mdW5jKSwgKGZyZWVfZnVuYyksIChleF90YWcpLCAoZXhfY2xhc3MpKSAKKyNkZWZpbmUgaTJkX0FTTjFfU0VUX09GX0VWUF9NRChzdCwgcHAsIGkyZF9mdW5jLCBleF90YWcsIGV4X2NsYXNzLCBpc19zZXQpIFwKKwlTS01fQVNOMV9TRVRfT0ZfaTJkKEVWUF9NRCwgKHN0KSwgKHBwKSwgKGkyZF9mdW5jKSwgKGV4X3RhZyksIChleF9jbGFzcyksIChpc19zZXQpKQorI2RlZmluZSBBU04xX3NlcV9wYWNrX0VWUF9NRChzdCwgaTJkX2Z1bmMsIGJ1ZiwgbGVuKSBcCisJU0tNX0FTTjFfc2VxX3BhY2soRVZQX01ELCAoc3QpLCAoaTJkX2Z1bmMpLCAoYnVmKSwgKGxlbikpCisjZGVmaW5lIEFTTjFfc2VxX3VucGFja19FVlBfTUQoYnVmLCBsZW4sIGQyaV9mdW5jLCBmcmVlX2Z1bmMpIFwKKwlTS01fQVNOMV9zZXFfdW5wYWNrKEVWUF9NRCwgKGJ1ZiksIChsZW4pLCAoZDJpX2Z1bmMpLCAoZnJlZV9mdW5jKSkKKwogI2RlZmluZSBkMmlfQVNOMV9TRVRfT0ZfR0VORVJBTF9OQU1FKHN0LCBwcCwgbGVuZ3RoLCBkMmlfZnVuYywgZnJlZV9mdW5jLCBleF90YWcsIGV4X2NsYXNzKSBcCiAJU0tNX0FTTjFfU0VUX09GX2QyaShHRU5FUkFMX05BTUUsIChzdCksIChwcCksIChsZW5ndGgpLCAoZDJpX2Z1bmMpLCAoZnJlZV9mdW5jKSwgKGV4X3RhZyksIChleF9jbGFzcykpIAogI2RlZmluZSBpMmRfQVNOMV9TRVRfT0ZfR0VORVJBTF9OQU1FKHN0LCBwcCwgaTJkX2Z1bmMsIGV4X3RhZywgZXhfY2xhc3MsIGlzX3NldCkgXApAQCAtMTk4MSw2ICsyMzM1LDI0MCBAQAogCiAjZGVmaW5lIFBLQ1MxMl9kZWNyeXB0X2QyaV9QS0NTNyhhbGdvciwgZDJpX2Z1bmMsIGZyZWVfZnVuYywgcGFzcywgcGFzc2xlbiwgb2N0LCBzZXEpIFwKIAlTS01fUEtDUzEyX2RlY3J5cHRfZDJpKFBLQ1M3LCAoYWxnb3IpLCAoZDJpX2Z1bmMpLCAoZnJlZV9mdW5jKSwgKHBhc3MpLCAocGFzc2xlbiksIChvY3QpLCAoc2VxKSkKKworI2RlZmluZSBsaF9BRERFRF9PQkpfbmV3KCkgTEhNX2xoX25ldyhBRERFRF9PQkosYWRkZWRfb2JqKQorI2RlZmluZSBsaF9BRERFRF9PQkpfaW5zZXJ0KGxoLGluc3QpIExITV9saF9pbnNlcnQoQURERURfT0JKLGxoLGluc3QpCisjZGVmaW5lIGxoX0FEREVEX09CSl9yZXRyaWV2ZShsaCxpbnN0KSBMSE1fbGhfcmV0cmlldmUoQURERURfT0JKLGxoLGluc3QpCisjZGVmaW5lIGxoX0FEREVEX09CSl9kZWxldGUobGgsaW5zdCkgTEhNX2xoX2RlbGV0ZShBRERFRF9PQkosbGgsaW5zdCkKKyNkZWZpbmUgbGhfQURERURfT0JKX2RvYWxsKGxoLGZuKSBMSE1fbGhfZG9hbGwoQURERURfT0JKLGxoLGZuKQorI2RlZmluZSBsaF9BRERFRF9PQkpfZG9hbGxfYXJnKGxoLGZuLGFyZ190eXBlLGFyZykgXAorICBMSE1fbGhfZG9hbGxfYXJnKEFEREVEX09CSixsaCxmbixhcmdfdHlwZSxhcmcpCisjZGVmaW5lIGxoX0FEREVEX09CSl9lcnJvcihsaCkgTEhNX2xoX2Vycm9yKEFEREVEX09CSixsaCkKKyNkZWZpbmUgbGhfQURERURfT0JKX251bV9pdGVtcyhsaCkgTEhNX2xoX251bV9pdGVtcyhBRERFRF9PQkosbGgpCisjZGVmaW5lIGxoX0FEREVEX09CSl9kb3duX2xvYWQobGgpIExITV9saF9kb3duX2xvYWQoQURERURfT0JKLGxoKQorI2RlZmluZSBsaF9BRERFRF9PQkpfbm9kZV9zdGF0c19iaW8obGgsb3V0KSBcCisgIExITV9saF9ub2RlX3N0YXRzX2JpbyhBRERFRF9PQkosbGgsb3V0KQorI2RlZmluZSBsaF9BRERFRF9PQkpfbm9kZV91c2FnZV9zdGF0c19iaW8obGgsb3V0KSBcCisgIExITV9saF9ub2RlX3VzYWdlX3N0YXRzX2JpbyhBRERFRF9PQkosbGgsb3V0KQorI2RlZmluZSBsaF9BRERFRF9PQkpfc3RhdHNfYmlvKGxoLG91dCkgXAorICBMSE1fbGhfc3RhdHNfYmlvKEFEREVEX09CSixsaCxvdXQpCisjZGVmaW5lIGxoX0FEREVEX09CSl9mcmVlKGxoKSBMSE1fbGhfZnJlZShBRERFRF9PQkosbGgpCisKKyNkZWZpbmUgbGhfQVBQX0lORk9fbmV3KCkgTEhNX2xoX25ldyhBUFBfSU5GTyxhcHBfaW5mbykKKyNkZWZpbmUgbGhfQVBQX0lORk9faW5zZXJ0KGxoLGluc3QpIExITV9saF9pbnNlcnQoQVBQX0lORk8sbGgsaW5zdCkKKyNkZWZpbmUgbGhfQVBQX0lORk9fcmV0cmlldmUobGgsaW5zdCkgTEhNX2xoX3JldHJpZXZlKEFQUF9JTkZPLGxoLGluc3QpCisjZGVmaW5lIGxoX0FQUF9JTkZPX2RlbGV0ZShsaCxpbnN0KSBMSE1fbGhfZGVsZXRlKEFQUF9JTkZPLGxoLGluc3QpCisjZGVmaW5lIGxoX0FQUF9JTkZPX2RvYWxsKGxoLGZuKSBMSE1fbGhfZG9hbGwoQVBQX0lORk8sbGgsZm4pCisjZGVmaW5lIGxoX0FQUF9JTkZPX2RvYWxsX2FyZyhsaCxmbixhcmdfdHlwZSxhcmcpIFwKKyAgTEhNX2xoX2RvYWxsX2FyZyhBUFBfSU5GTyxsaCxmbixhcmdfdHlwZSxhcmcpCisjZGVmaW5lIGxoX0FQUF9JTkZPX2Vycm9yKGxoKSBMSE1fbGhfZXJyb3IoQVBQX0lORk8sbGgpCisjZGVmaW5lIGxoX0FQUF9JTkZPX251bV9pdGVtcyhsaCkgTEhNX2xoX251bV9pdGVtcyhBUFBfSU5GTyxsaCkKKyNkZWZpbmUgbGhfQVBQX0lORk9fZG93bl9sb2FkKGxoKSBMSE1fbGhfZG93bl9sb2FkKEFQUF9JTkZPLGxoKQorI2RlZmluZSBsaF9BUFBfSU5GT19ub2RlX3N0YXRzX2JpbyhsaCxvdXQpIFwKKyAgTEhNX2xoX25vZGVfc3RhdHNfYmlvKEFQUF9JTkZPLGxoLG91dCkKKyNkZWZpbmUgbGhfQVBQX0lORk9fbm9kZV91c2FnZV9zdGF0c19iaW8obGgsb3V0KSBcCisgIExITV9saF9ub2RlX3VzYWdlX3N0YXRzX2JpbyhBUFBfSU5GTyxsaCxvdXQpCisjZGVmaW5lIGxoX0FQUF9JTkZPX3N0YXRzX2JpbyhsaCxvdXQpIFwKKyAgTEhNX2xoX3N0YXRzX2JpbyhBUFBfSU5GTyxsaCxvdXQpCisjZGVmaW5lIGxoX0FQUF9JTkZPX2ZyZWUobGgpIExITV9saF9mcmVlKEFQUF9JTkZPLGxoKQorCisjZGVmaW5lIGxoX0NPTkZfVkFMVUVfbmV3KCkgTEhNX2xoX25ldyhDT05GX1ZBTFVFLGNvbmZfdmFsdWUpCisjZGVmaW5lIGxoX0NPTkZfVkFMVUVfaW5zZXJ0KGxoLGluc3QpIExITV9saF9pbnNlcnQoQ09ORl9WQUxVRSxsaCxpbnN0KQorI2RlZmluZSBsaF9DT05GX1ZBTFVFX3JldHJpZXZlKGxoLGluc3QpIExITV9saF9yZXRyaWV2ZShDT05GX1ZBTFVFLGxoLGluc3QpCisjZGVmaW5lIGxoX0NPTkZfVkFMVUVfZGVsZXRlKGxoLGluc3QpIExITV9saF9kZWxldGUoQ09ORl9WQUxVRSxsaCxpbnN0KQorI2RlZmluZSBsaF9DT05GX1ZBTFVFX2RvYWxsKGxoLGZuKSBMSE1fbGhfZG9hbGwoQ09ORl9WQUxVRSxsaCxmbikKKyNkZWZpbmUgbGhfQ09ORl9WQUxVRV9kb2FsbF9hcmcobGgsZm4sYXJnX3R5cGUsYXJnKSBcCisgIExITV9saF9kb2FsbF9hcmcoQ09ORl9WQUxVRSxsaCxmbixhcmdfdHlwZSxhcmcpCisjZGVmaW5lIGxoX0NPTkZfVkFMVUVfZXJyb3IobGgpIExITV9saF9lcnJvcihDT05GX1ZBTFVFLGxoKQorI2RlZmluZSBsaF9DT05GX1ZBTFVFX251bV9pdGVtcyhsaCkgTEhNX2xoX251bV9pdGVtcyhDT05GX1ZBTFVFLGxoKQorI2RlZmluZSBsaF9DT05GX1ZBTFVFX2Rvd25fbG9hZChsaCkgTEhNX2xoX2Rvd25fbG9hZChDT05GX1ZBTFVFLGxoKQorI2RlZmluZSBsaF9DT05GX1ZBTFVFX25vZGVfc3RhdHNfYmlvKGxoLG91dCkgXAorICBMSE1fbGhfbm9kZV9zdGF0c19iaW8oQ09ORl9WQUxVRSxsaCxvdXQpCisjZGVmaW5lIGxoX0NPTkZfVkFMVUVfbm9kZV91c2FnZV9zdGF0c19iaW8obGgsb3V0KSBcCisgIExITV9saF9ub2RlX3VzYWdlX3N0YXRzX2JpbyhDT05GX1ZBTFVFLGxoLG91dCkKKyNkZWZpbmUgbGhfQ09ORl9WQUxVRV9zdGF0c19iaW8obGgsb3V0KSBcCisgIExITV9saF9zdGF0c19iaW8oQ09ORl9WQUxVRSxsaCxvdXQpCisjZGVmaW5lIGxoX0NPTkZfVkFMVUVfZnJlZShsaCkgTEhNX2xoX2ZyZWUoQ09ORl9WQUxVRSxsaCkKKworI2RlZmluZSBsaF9FTkdJTkVfUElMRV9uZXcoKSBMSE1fbGhfbmV3KEVOR0lORV9QSUxFLGVuZ2luZV9waWxlKQorI2RlZmluZSBsaF9FTkdJTkVfUElMRV9pbnNlcnQobGgsaW5zdCkgTEhNX2xoX2luc2VydChFTkdJTkVfUElMRSxsaCxpbnN0KQorI2RlZmluZSBsaF9FTkdJTkVfUElMRV9yZXRyaWV2ZShsaCxpbnN0KSBMSE1fbGhfcmV0cmlldmUoRU5HSU5FX1BJTEUsbGgsaW5zdCkKKyNkZWZpbmUgbGhfRU5HSU5FX1BJTEVfZGVsZXRlKGxoLGluc3QpIExITV9saF9kZWxldGUoRU5HSU5FX1BJTEUsbGgsaW5zdCkKKyNkZWZpbmUgbGhfRU5HSU5FX1BJTEVfZG9hbGwobGgsZm4pIExITV9saF9kb2FsbChFTkdJTkVfUElMRSxsaCxmbikKKyNkZWZpbmUgbGhfRU5HSU5FX1BJTEVfZG9hbGxfYXJnKGxoLGZuLGFyZ190eXBlLGFyZykgXAorICBMSE1fbGhfZG9hbGxfYXJnKEVOR0lORV9QSUxFLGxoLGZuLGFyZ190eXBlLGFyZykKKyNkZWZpbmUgbGhfRU5HSU5FX1BJTEVfZXJyb3IobGgpIExITV9saF9lcnJvcihFTkdJTkVfUElMRSxsaCkKKyNkZWZpbmUgbGhfRU5HSU5FX1BJTEVfbnVtX2l0ZW1zKGxoKSBMSE1fbGhfbnVtX2l0ZW1zKEVOR0lORV9QSUxFLGxoKQorI2RlZmluZSBsaF9FTkdJTkVfUElMRV9kb3duX2xvYWQobGgpIExITV9saF9kb3duX2xvYWQoRU5HSU5FX1BJTEUsbGgpCisjZGVmaW5lIGxoX0VOR0lORV9QSUxFX25vZGVfc3RhdHNfYmlvKGxoLG91dCkgXAorICBMSE1fbGhfbm9kZV9zdGF0c19iaW8oRU5HSU5FX1BJTEUsbGgsb3V0KQorI2RlZmluZSBsaF9FTkdJTkVfUElMRV9ub2RlX3VzYWdlX3N0YXRzX2JpbyhsaCxvdXQpIFwKKyAgTEhNX2xoX25vZGVfdXNhZ2Vfc3RhdHNfYmlvKEVOR0lORV9QSUxFLGxoLG91dCkKKyNkZWZpbmUgbGhfRU5HSU5FX1BJTEVfc3RhdHNfYmlvKGxoLG91dCkgXAorICBMSE1fbGhfc3RhdHNfYmlvKEVOR0lORV9QSUxFLGxoLG91dCkKKyNkZWZpbmUgbGhfRU5HSU5FX1BJTEVfZnJlZShsaCkgTEhNX2xoX2ZyZWUoRU5HSU5FX1BJTEUsbGgpCisKKyNkZWZpbmUgbGhfRVJSX1NUQVRFX25ldygpIExITV9saF9uZXcoRVJSX1NUQVRFLGVycl9zdGF0ZSkKKyNkZWZpbmUgbGhfRVJSX1NUQVRFX2luc2VydChsaCxpbnN0KSBMSE1fbGhfaW5zZXJ0KEVSUl9TVEFURSxsaCxpbnN0KQorI2RlZmluZSBsaF9FUlJfU1RBVEVfcmV0cmlldmUobGgsaW5zdCkgTEhNX2xoX3JldHJpZXZlKEVSUl9TVEFURSxsaCxpbnN0KQorI2RlZmluZSBsaF9FUlJfU1RBVEVfZGVsZXRlKGxoLGluc3QpIExITV9saF9kZWxldGUoRVJSX1NUQVRFLGxoLGluc3QpCisjZGVmaW5lIGxoX0VSUl9TVEFURV9kb2FsbChsaCxmbikgTEhNX2xoX2RvYWxsKEVSUl9TVEFURSxsaCxmbikKKyNkZWZpbmUgbGhfRVJSX1NUQVRFX2RvYWxsX2FyZyhsaCxmbixhcmdfdHlwZSxhcmcpIFwKKyAgTEhNX2xoX2RvYWxsX2FyZyhFUlJfU1RBVEUsbGgsZm4sYXJnX3R5cGUsYXJnKQorI2RlZmluZSBsaF9FUlJfU1RBVEVfZXJyb3IobGgpIExITV9saF9lcnJvcihFUlJfU1RBVEUsbGgpCisjZGVmaW5lIGxoX0VSUl9TVEFURV9udW1faXRlbXMobGgpIExITV9saF9udW1faXRlbXMoRVJSX1NUQVRFLGxoKQorI2RlZmluZSBsaF9FUlJfU1RBVEVfZG93bl9sb2FkKGxoKSBMSE1fbGhfZG93bl9sb2FkKEVSUl9TVEFURSxsaCkKKyNkZWZpbmUgbGhfRVJSX1NUQVRFX25vZGVfc3RhdHNfYmlvKGxoLG91dCkgXAorICBMSE1fbGhfbm9kZV9zdGF0c19iaW8oRVJSX1NUQVRFLGxoLG91dCkKKyNkZWZpbmUgbGhfRVJSX1NUQVRFX25vZGVfdXNhZ2Vfc3RhdHNfYmlvKGxoLG91dCkgXAorICBMSE1fbGhfbm9kZV91c2FnZV9zdGF0c19iaW8oRVJSX1NUQVRFLGxoLG91dCkKKyNkZWZpbmUgbGhfRVJSX1NUQVRFX3N0YXRzX2JpbyhsaCxvdXQpIFwKKyAgTEhNX2xoX3N0YXRzX2JpbyhFUlJfU1RBVEUsbGgsb3V0KQorI2RlZmluZSBsaF9FUlJfU1RBVEVfZnJlZShsaCkgTEhNX2xoX2ZyZWUoRVJSX1NUQVRFLGxoKQorCisjZGVmaW5lIGxoX0VSUl9TVFJJTkdfREFUQV9uZXcoKSBMSE1fbGhfbmV3KEVSUl9TVFJJTkdfREFUQSxlcnJfc3RyaW5nX2RhdGEpCisjZGVmaW5lIGxoX0VSUl9TVFJJTkdfREFUQV9pbnNlcnQobGgsaW5zdCkgTEhNX2xoX2luc2VydChFUlJfU1RSSU5HX0RBVEEsbGgsaW5zdCkKKyNkZWZpbmUgbGhfRVJSX1NUUklOR19EQVRBX3JldHJpZXZlKGxoLGluc3QpIExITV9saF9yZXRyaWV2ZShFUlJfU1RSSU5HX0RBVEEsbGgsaW5zdCkKKyNkZWZpbmUgbGhfRVJSX1NUUklOR19EQVRBX2RlbGV0ZShsaCxpbnN0KSBMSE1fbGhfZGVsZXRlKEVSUl9TVFJJTkdfREFUQSxsaCxpbnN0KQorI2RlZmluZSBsaF9FUlJfU1RSSU5HX0RBVEFfZG9hbGwobGgsZm4pIExITV9saF9kb2FsbChFUlJfU1RSSU5HX0RBVEEsbGgsZm4pCisjZGVmaW5lIGxoX0VSUl9TVFJJTkdfREFUQV9kb2FsbF9hcmcobGgsZm4sYXJnX3R5cGUsYXJnKSBcCisgIExITV9saF9kb2FsbF9hcmcoRVJSX1NUUklOR19EQVRBLGxoLGZuLGFyZ190eXBlLGFyZykKKyNkZWZpbmUgbGhfRVJSX1NUUklOR19EQVRBX2Vycm9yKGxoKSBMSE1fbGhfZXJyb3IoRVJSX1NUUklOR19EQVRBLGxoKQorI2RlZmluZSBsaF9FUlJfU1RSSU5HX0RBVEFfbnVtX2l0ZW1zKGxoKSBMSE1fbGhfbnVtX2l0ZW1zKEVSUl9TVFJJTkdfREFUQSxsaCkKKyNkZWZpbmUgbGhfRVJSX1NUUklOR19EQVRBX2Rvd25fbG9hZChsaCkgTEhNX2xoX2Rvd25fbG9hZChFUlJfU1RSSU5HX0RBVEEsbGgpCisjZGVmaW5lIGxoX0VSUl9TVFJJTkdfREFUQV9ub2RlX3N0YXRzX2JpbyhsaCxvdXQpIFwKKyAgTEhNX2xoX25vZGVfc3RhdHNfYmlvKEVSUl9TVFJJTkdfREFUQSxsaCxvdXQpCisjZGVmaW5lIGxoX0VSUl9TVFJJTkdfREFUQV9ub2RlX3VzYWdlX3N0YXRzX2JpbyhsaCxvdXQpIFwKKyAgTEhNX2xoX25vZGVfdXNhZ2Vfc3RhdHNfYmlvKEVSUl9TVFJJTkdfREFUQSxsaCxvdXQpCisjZGVmaW5lIGxoX0VSUl9TVFJJTkdfREFUQV9zdGF0c19iaW8obGgsb3V0KSBcCisgIExITV9saF9zdGF0c19iaW8oRVJSX1NUUklOR19EQVRBLGxoLG91dCkKKyNkZWZpbmUgbGhfRVJSX1NUUklOR19EQVRBX2ZyZWUobGgpIExITV9saF9mcmVlKEVSUl9TVFJJTkdfREFUQSxsaCkKKworI2RlZmluZSBsaF9FWF9DTEFTU19JVEVNX25ldygpIExITV9saF9uZXcoRVhfQ0xBU1NfSVRFTSxleF9jbGFzc19pdGVtKQorI2RlZmluZSBsaF9FWF9DTEFTU19JVEVNX2luc2VydChsaCxpbnN0KSBMSE1fbGhfaW5zZXJ0KEVYX0NMQVNTX0lURU0sbGgsaW5zdCkKKyNkZWZpbmUgbGhfRVhfQ0xBU1NfSVRFTV9yZXRyaWV2ZShsaCxpbnN0KSBMSE1fbGhfcmV0cmlldmUoRVhfQ0xBU1NfSVRFTSxsaCxpbnN0KQorI2RlZmluZSBsaF9FWF9DTEFTU19JVEVNX2RlbGV0ZShsaCxpbnN0KSBMSE1fbGhfZGVsZXRlKEVYX0NMQVNTX0lURU0sbGgsaW5zdCkKKyNkZWZpbmUgbGhfRVhfQ0xBU1NfSVRFTV9kb2FsbChsaCxmbikgTEhNX2xoX2RvYWxsKEVYX0NMQVNTX0lURU0sbGgsZm4pCisjZGVmaW5lIGxoX0VYX0NMQVNTX0lURU1fZG9hbGxfYXJnKGxoLGZuLGFyZ190eXBlLGFyZykgXAorICBMSE1fbGhfZG9hbGxfYXJnKEVYX0NMQVNTX0lURU0sbGgsZm4sYXJnX3R5cGUsYXJnKQorI2RlZmluZSBsaF9FWF9DTEFTU19JVEVNX2Vycm9yKGxoKSBMSE1fbGhfZXJyb3IoRVhfQ0xBU1NfSVRFTSxsaCkKKyNkZWZpbmUgbGhfRVhfQ0xBU1NfSVRFTV9udW1faXRlbXMobGgpIExITV9saF9udW1faXRlbXMoRVhfQ0xBU1NfSVRFTSxsaCkKKyNkZWZpbmUgbGhfRVhfQ0xBU1NfSVRFTV9kb3duX2xvYWQobGgpIExITV9saF9kb3duX2xvYWQoRVhfQ0xBU1NfSVRFTSxsaCkKKyNkZWZpbmUgbGhfRVhfQ0xBU1NfSVRFTV9ub2RlX3N0YXRzX2JpbyhsaCxvdXQpIFwKKyAgTEhNX2xoX25vZGVfc3RhdHNfYmlvKEVYX0NMQVNTX0lURU0sbGgsb3V0KQorI2RlZmluZSBsaF9FWF9DTEFTU19JVEVNX25vZGVfdXNhZ2Vfc3RhdHNfYmlvKGxoLG91dCkgXAorICBMSE1fbGhfbm9kZV91c2FnZV9zdGF0c19iaW8oRVhfQ0xBU1NfSVRFTSxsaCxvdXQpCisjZGVmaW5lIGxoX0VYX0NMQVNTX0lURU1fc3RhdHNfYmlvKGxoLG91dCkgXAorICBMSE1fbGhfc3RhdHNfYmlvKEVYX0NMQVNTX0lURU0sbGgsb3V0KQorI2RlZmluZSBsaF9FWF9DTEFTU19JVEVNX2ZyZWUobGgpIExITV9saF9mcmVlKEVYX0NMQVNTX0lURU0sbGgpCisKKyNkZWZpbmUgbGhfRlVOQ1RJT05fbmV3KCkgTEhNX2xoX25ldyhGVU5DVElPTixmdW5jdGlvbikKKyNkZWZpbmUgbGhfRlVOQ1RJT05faW5zZXJ0KGxoLGluc3QpIExITV9saF9pbnNlcnQoRlVOQ1RJT04sbGgsaW5zdCkKKyNkZWZpbmUgbGhfRlVOQ1RJT05fcmV0cmlldmUobGgsaW5zdCkgTEhNX2xoX3JldHJpZXZlKEZVTkNUSU9OLGxoLGluc3QpCisjZGVmaW5lIGxoX0ZVTkNUSU9OX2RlbGV0ZShsaCxpbnN0KSBMSE1fbGhfZGVsZXRlKEZVTkNUSU9OLGxoLGluc3QpCisjZGVmaW5lIGxoX0ZVTkNUSU9OX2RvYWxsKGxoLGZuKSBMSE1fbGhfZG9hbGwoRlVOQ1RJT04sbGgsZm4pCisjZGVmaW5lIGxoX0ZVTkNUSU9OX2RvYWxsX2FyZyhsaCxmbixhcmdfdHlwZSxhcmcpIFwKKyAgTEhNX2xoX2RvYWxsX2FyZyhGVU5DVElPTixsaCxmbixhcmdfdHlwZSxhcmcpCisjZGVmaW5lIGxoX0ZVTkNUSU9OX2Vycm9yKGxoKSBMSE1fbGhfZXJyb3IoRlVOQ1RJT04sbGgpCisjZGVmaW5lIGxoX0ZVTkNUSU9OX251bV9pdGVtcyhsaCkgTEhNX2xoX251bV9pdGVtcyhGVU5DVElPTixsaCkKKyNkZWZpbmUgbGhfRlVOQ1RJT05fZG93bl9sb2FkKGxoKSBMSE1fbGhfZG93bl9sb2FkKEZVTkNUSU9OLGxoKQorI2RlZmluZSBsaF9GVU5DVElPTl9ub2RlX3N0YXRzX2JpbyhsaCxvdXQpIFwKKyAgTEhNX2xoX25vZGVfc3RhdHNfYmlvKEZVTkNUSU9OLGxoLG91dCkKKyNkZWZpbmUgbGhfRlVOQ1RJT05fbm9kZV91c2FnZV9zdGF0c19iaW8obGgsb3V0KSBcCisgIExITV9saF9ub2RlX3VzYWdlX3N0YXRzX2JpbyhGVU5DVElPTixsaCxvdXQpCisjZGVmaW5lIGxoX0ZVTkNUSU9OX3N0YXRzX2JpbyhsaCxvdXQpIFwKKyAgTEhNX2xoX3N0YXRzX2JpbyhGVU5DVElPTixsaCxvdXQpCisjZGVmaW5lIGxoX0ZVTkNUSU9OX2ZyZWUobGgpIExITV9saF9mcmVlKEZVTkNUSU9OLGxoKQorCisjZGVmaW5lIGxoX01FTV9uZXcoKSBMSE1fbGhfbmV3KE1FTSxtZW0pCisjZGVmaW5lIGxoX01FTV9pbnNlcnQobGgsaW5zdCkgTEhNX2xoX2luc2VydChNRU0sbGgsaW5zdCkKKyNkZWZpbmUgbGhfTUVNX3JldHJpZXZlKGxoLGluc3QpIExITV9saF9yZXRyaWV2ZShNRU0sbGgsaW5zdCkKKyNkZWZpbmUgbGhfTUVNX2RlbGV0ZShsaCxpbnN0KSBMSE1fbGhfZGVsZXRlKE1FTSxsaCxpbnN0KQorI2RlZmluZSBsaF9NRU1fZG9hbGwobGgsZm4pIExITV9saF9kb2FsbChNRU0sbGgsZm4pCisjZGVmaW5lIGxoX01FTV9kb2FsbF9hcmcobGgsZm4sYXJnX3R5cGUsYXJnKSBcCisgIExITV9saF9kb2FsbF9hcmcoTUVNLGxoLGZuLGFyZ190eXBlLGFyZykKKyNkZWZpbmUgbGhfTUVNX2Vycm9yKGxoKSBMSE1fbGhfZXJyb3IoTUVNLGxoKQorI2RlZmluZSBsaF9NRU1fbnVtX2l0ZW1zKGxoKSBMSE1fbGhfbnVtX2l0ZW1zKE1FTSxsaCkKKyNkZWZpbmUgbGhfTUVNX2Rvd25fbG9hZChsaCkgTEhNX2xoX2Rvd25fbG9hZChNRU0sbGgpCisjZGVmaW5lIGxoX01FTV9ub2RlX3N0YXRzX2JpbyhsaCxvdXQpIFwKKyAgTEhNX2xoX25vZGVfc3RhdHNfYmlvKE1FTSxsaCxvdXQpCisjZGVmaW5lIGxoX01FTV9ub2RlX3VzYWdlX3N0YXRzX2JpbyhsaCxvdXQpIFwKKyAgTEhNX2xoX25vZGVfdXNhZ2Vfc3RhdHNfYmlvKE1FTSxsaCxvdXQpCisjZGVmaW5lIGxoX01FTV9zdGF0c19iaW8obGgsb3V0KSBcCisgIExITV9saF9zdGF0c19iaW8oTUVNLGxoLG91dCkKKyNkZWZpbmUgbGhfTUVNX2ZyZWUobGgpIExITV9saF9mcmVlKE1FTSxsaCkKKworI2RlZmluZSBsaF9PQkpfTkFNRV9uZXcoKSBMSE1fbGhfbmV3KE9CSl9OQU1FLG9ial9uYW1lKQorI2RlZmluZSBsaF9PQkpfTkFNRV9pbnNlcnQobGgsaW5zdCkgTEhNX2xoX2luc2VydChPQkpfTkFNRSxsaCxpbnN0KQorI2RlZmluZSBsaF9PQkpfTkFNRV9yZXRyaWV2ZShsaCxpbnN0KSBMSE1fbGhfcmV0cmlldmUoT0JKX05BTUUsbGgsaW5zdCkKKyNkZWZpbmUgbGhfT0JKX05BTUVfZGVsZXRlKGxoLGluc3QpIExITV9saF9kZWxldGUoT0JKX05BTUUsbGgsaW5zdCkKKyNkZWZpbmUgbGhfT0JKX05BTUVfZG9hbGwobGgsZm4pIExITV9saF9kb2FsbChPQkpfTkFNRSxsaCxmbikKKyNkZWZpbmUgbGhfT0JKX05BTUVfZG9hbGxfYXJnKGxoLGZuLGFyZ190eXBlLGFyZykgXAorICBMSE1fbGhfZG9hbGxfYXJnKE9CSl9OQU1FLGxoLGZuLGFyZ190eXBlLGFyZykKKyNkZWZpbmUgbGhfT0JKX05BTUVfZXJyb3IobGgpIExITV9saF9lcnJvcihPQkpfTkFNRSxsaCkKKyNkZWZpbmUgbGhfT0JKX05BTUVfbnVtX2l0ZW1zKGxoKSBMSE1fbGhfbnVtX2l0ZW1zKE9CSl9OQU1FLGxoKQorI2RlZmluZSBsaF9PQkpfTkFNRV9kb3duX2xvYWQobGgpIExITV9saF9kb3duX2xvYWQoT0JKX05BTUUsbGgpCisjZGVmaW5lIGxoX09CSl9OQU1FX25vZGVfc3RhdHNfYmlvKGxoLG91dCkgXAorICBMSE1fbGhfbm9kZV9zdGF0c19iaW8oT0JKX05BTUUsbGgsb3V0KQorI2RlZmluZSBsaF9PQkpfTkFNRV9ub2RlX3VzYWdlX3N0YXRzX2JpbyhsaCxvdXQpIFwKKyAgTEhNX2xoX25vZGVfdXNhZ2Vfc3RhdHNfYmlvKE9CSl9OQU1FLGxoLG91dCkKKyNkZWZpbmUgbGhfT0JKX05BTUVfc3RhdHNfYmlvKGxoLG91dCkgXAorICBMSE1fbGhfc3RhdHNfYmlvKE9CSl9OQU1FLGxoLG91dCkKKyNkZWZpbmUgbGhfT0JKX05BTUVfZnJlZShsaCkgTEhNX2xoX2ZyZWUoT0JKX05BTUUsbGgpCisKKyNkZWZpbmUgbGhfT1BFTlNTTF9DU1RSSU5HX25ldygpIExITV9saF9uZXcoT1BFTlNTTF9DU1RSSU5HLG9wZW5zc2xfY3N0cmluZykKKyNkZWZpbmUgbGhfT1BFTlNTTF9DU1RSSU5HX2luc2VydChsaCxpbnN0KSBMSE1fbGhfaW5zZXJ0KE9QRU5TU0xfQ1NUUklORyxsaCxpbnN0KQorI2RlZmluZSBsaF9PUEVOU1NMX0NTVFJJTkdfcmV0cmlldmUobGgsaW5zdCkgTEhNX2xoX3JldHJpZXZlKE9QRU5TU0xfQ1NUUklORyxsaCxpbnN0KQorI2RlZmluZSBsaF9PUEVOU1NMX0NTVFJJTkdfZGVsZXRlKGxoLGluc3QpIExITV9saF9kZWxldGUoT1BFTlNTTF9DU1RSSU5HLGxoLGluc3QpCisjZGVmaW5lIGxoX09QRU5TU0xfQ1NUUklOR19kb2FsbChsaCxmbikgTEhNX2xoX2RvYWxsKE9QRU5TU0xfQ1NUUklORyxsaCxmbikKKyNkZWZpbmUgbGhfT1BFTlNTTF9DU1RSSU5HX2RvYWxsX2FyZyhsaCxmbixhcmdfdHlwZSxhcmcpIFwKKyAgTEhNX2xoX2RvYWxsX2FyZyhPUEVOU1NMX0NTVFJJTkcsbGgsZm4sYXJnX3R5cGUsYXJnKQorI2RlZmluZSBsaF9PUEVOU1NMX0NTVFJJTkdfZXJyb3IobGgpIExITV9saF9lcnJvcihPUEVOU1NMX0NTVFJJTkcsbGgpCisjZGVmaW5lIGxoX09QRU5TU0xfQ1NUUklOR19udW1faXRlbXMobGgpIExITV9saF9udW1faXRlbXMoT1BFTlNTTF9DU1RSSU5HLGxoKQorI2RlZmluZSBsaF9PUEVOU1NMX0NTVFJJTkdfZG93bl9sb2FkKGxoKSBMSE1fbGhfZG93bl9sb2FkKE9QRU5TU0xfQ1NUUklORyxsaCkKKyNkZWZpbmUgbGhfT1BFTlNTTF9DU1RSSU5HX25vZGVfc3RhdHNfYmlvKGxoLG91dCkgXAorICBMSE1fbGhfbm9kZV9zdGF0c19iaW8oT1BFTlNTTF9DU1RSSU5HLGxoLG91dCkKKyNkZWZpbmUgbGhfT1BFTlNTTF9DU1RSSU5HX25vZGVfdXNhZ2Vfc3RhdHNfYmlvKGxoLG91dCkgXAorICBMSE1fbGhfbm9kZV91c2FnZV9zdGF0c19iaW8oT1BFTlNTTF9DU1RSSU5HLGxoLG91dCkKKyNkZWZpbmUgbGhfT1BFTlNTTF9DU1RSSU5HX3N0YXRzX2JpbyhsaCxvdXQpIFwKKyAgTEhNX2xoX3N0YXRzX2JpbyhPUEVOU1NMX0NTVFJJTkcsbGgsb3V0KQorI2RlZmluZSBsaF9PUEVOU1NMX0NTVFJJTkdfZnJlZShsaCkgTEhNX2xoX2ZyZWUoT1BFTlNTTF9DU1RSSU5HLGxoKQorCisjZGVmaW5lIGxoX09QRU5TU0xfU1RSSU5HX25ldygpIExITV9saF9uZXcoT1BFTlNTTF9TVFJJTkcsb3BlbnNzbF9zdHJpbmcpCisjZGVmaW5lIGxoX09QRU5TU0xfU1RSSU5HX2luc2VydChsaCxpbnN0KSBMSE1fbGhfaW5zZXJ0KE9QRU5TU0xfU1RSSU5HLGxoLGluc3QpCisjZGVmaW5lIGxoX09QRU5TU0xfU1RSSU5HX3JldHJpZXZlKGxoLGluc3QpIExITV9saF9yZXRyaWV2ZShPUEVOU1NMX1NUUklORyxsaCxpbnN0KQorI2RlZmluZSBsaF9PUEVOU1NMX1NUUklOR19kZWxldGUobGgsaW5zdCkgTEhNX2xoX2RlbGV0ZShPUEVOU1NMX1NUUklORyxsaCxpbnN0KQorI2RlZmluZSBsaF9PUEVOU1NMX1NUUklOR19kb2FsbChsaCxmbikgTEhNX2xoX2RvYWxsKE9QRU5TU0xfU1RSSU5HLGxoLGZuKQorI2RlZmluZSBsaF9PUEVOU1NMX1NUUklOR19kb2FsbF9hcmcobGgsZm4sYXJnX3R5cGUsYXJnKSBcCisgIExITV9saF9kb2FsbF9hcmcoT1BFTlNTTF9TVFJJTkcsbGgsZm4sYXJnX3R5cGUsYXJnKQorI2RlZmluZSBsaF9PUEVOU1NMX1NUUklOR19lcnJvcihsaCkgTEhNX2xoX2Vycm9yKE9QRU5TU0xfU1RSSU5HLGxoKQorI2RlZmluZSBsaF9PUEVOU1NMX1NUUklOR19udW1faXRlbXMobGgpIExITV9saF9udW1faXRlbXMoT1BFTlNTTF9TVFJJTkcsbGgpCisjZGVmaW5lIGxoX09QRU5TU0xfU1RSSU5HX2Rvd25fbG9hZChsaCkgTEhNX2xoX2Rvd25fbG9hZChPUEVOU1NMX1NUUklORyxsaCkKKyNkZWZpbmUgbGhfT1BFTlNTTF9TVFJJTkdfbm9kZV9zdGF0c19iaW8obGgsb3V0KSBcCisgIExITV9saF9ub2RlX3N0YXRzX2JpbyhPUEVOU1NMX1NUUklORyxsaCxvdXQpCisjZGVmaW5lIGxoX09QRU5TU0xfU1RSSU5HX25vZGVfdXNhZ2Vfc3RhdHNfYmlvKGxoLG91dCkgXAorICBMSE1fbGhfbm9kZV91c2FnZV9zdGF0c19iaW8oT1BFTlNTTF9TVFJJTkcsbGgsb3V0KQorI2RlZmluZSBsaF9PUEVOU1NMX1NUUklOR19zdGF0c19iaW8obGgsb3V0KSBcCisgIExITV9saF9zdGF0c19iaW8oT1BFTlNTTF9TVFJJTkcsbGgsb3V0KQorI2RlZmluZSBsaF9PUEVOU1NMX1NUUklOR19mcmVlKGxoKSBMSE1fbGhfZnJlZShPUEVOU1NMX1NUUklORyxsaCkKKworI2RlZmluZSBsaF9TU0xfU0VTU0lPTl9uZXcoKSBMSE1fbGhfbmV3KFNTTF9TRVNTSU9OLHNzbF9zZXNzaW9uKQorI2RlZmluZSBsaF9TU0xfU0VTU0lPTl9pbnNlcnQobGgsaW5zdCkgTEhNX2xoX2luc2VydChTU0xfU0VTU0lPTixsaCxpbnN0KQorI2RlZmluZSBsaF9TU0xfU0VTU0lPTl9yZXRyaWV2ZShsaCxpbnN0KSBMSE1fbGhfcmV0cmlldmUoU1NMX1NFU1NJT04sbGgsaW5zdCkKKyNkZWZpbmUgbGhfU1NMX1NFU1NJT05fZGVsZXRlKGxoLGluc3QpIExITV9saF9kZWxldGUoU1NMX1NFU1NJT04sbGgsaW5zdCkKKyNkZWZpbmUgbGhfU1NMX1NFU1NJT05fZG9hbGwobGgsZm4pIExITV9saF9kb2FsbChTU0xfU0VTU0lPTixsaCxmbikKKyNkZWZpbmUgbGhfU1NMX1NFU1NJT05fZG9hbGxfYXJnKGxoLGZuLGFyZ190eXBlLGFyZykgXAorICBMSE1fbGhfZG9hbGxfYXJnKFNTTF9TRVNTSU9OLGxoLGZuLGFyZ190eXBlLGFyZykKKyNkZWZpbmUgbGhfU1NMX1NFU1NJT05fZXJyb3IobGgpIExITV9saF9lcnJvcihTU0xfU0VTU0lPTixsaCkKKyNkZWZpbmUgbGhfU1NMX1NFU1NJT05fbnVtX2l0ZW1zKGxoKSBMSE1fbGhfbnVtX2l0ZW1zKFNTTF9TRVNTSU9OLGxoKQorI2RlZmluZSBsaF9TU0xfU0VTU0lPTl9kb3duX2xvYWQobGgpIExITV9saF9kb3duX2xvYWQoU1NMX1NFU1NJT04sbGgpCisjZGVmaW5lIGxoX1NTTF9TRVNTSU9OX25vZGVfc3RhdHNfYmlvKGxoLG91dCkgXAorICBMSE1fbGhfbm9kZV9zdGF0c19iaW8oU1NMX1NFU1NJT04sbGgsb3V0KQorI2RlZmluZSBsaF9TU0xfU0VTU0lPTl9ub2RlX3VzYWdlX3N0YXRzX2JpbyhsaCxvdXQpIFwKKyAgTEhNX2xoX25vZGVfdXNhZ2Vfc3RhdHNfYmlvKFNTTF9TRVNTSU9OLGxoLG91dCkKKyNkZWZpbmUgbGhfU1NMX1NFU1NJT05fc3RhdHNfYmlvKGxoLG91dCkgXAorICBMSE1fbGhfc3RhdHNfYmlvKFNTTF9TRVNTSU9OLGxoLG91dCkKKyNkZWZpbmUgbGhfU1NMX1NFU1NJT05fZnJlZShsaCkgTEhNX2xoX2ZyZWUoU1NMX1NFU1NJT04sbGgpCiAvKiBFbmQgb2YgdXRpbC9ta3N0YWNrLnBsIGJsb2NrLCB5b3UgbWF5IG5vdyBlZGl0IDotKSAqLwogCiAjZW5kaWYgLyogIWRlZmluZWQgSEVBREVSX1NBRkVTVEFDS19IICovCmRpZmYgLS1naXQgYS9jcnlwdG8vc3RhY2svc3RhY2suYyBiL2NyeXB0by9zdGFjay9zdGFjay5jCmluZGV4IDM3OGJkN2MuLjc2Y2YxYTEgMTAwNjQ0Ci0tLSBhL2NyeXB0by9zdGFjay9zdGFjay5jCisrKyBiL2NyeXB0by9zdGFjay9zdGFjay5jCkBAIC03NywxMCArNzcsMTAgQEAKIAogI2luY2x1ZGUgPGVycm5vLmg+CiAKLWludCAoKnNrX3NldF9jbXBfZnVuYyhTVEFDSyAqc2ssIGludCAoKmMpKGNvbnN0IGNoYXIgKiBjb25zdCAqLGNvbnN0IGNoYXIgKiBjb25zdCAqKSkpCi0JCShjb25zdCBjaGFyICogY29uc3QgKiwgY29uc3QgY2hhciAqIGNvbnN0ICopCitpbnQgKCpza19zZXRfY21wX2Z1bmMoX1NUQUNLICpzaywgaW50ICgqYykoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKSkKKwkJKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKQogCXsKLQlpbnQgKCpvbGQpKGNvbnN0IGNoYXIgKiBjb25zdCAqLGNvbnN0IGNoYXIgKiBjb25zdCAqKT1zay0+Y29tcDsKKwlpbnQgKCpvbGQpKGNvbnN0IHZvaWQgKixjb25zdCB2b2lkICopPXNrLT5jb21wOwogCiAJaWYgKHNrLT5jb21wICE9IGMpCiAJCXNrLT5zb3J0ZWQ9MDsKQEAgLTg5LDkgKzg5LDkgQEAKIAlyZXR1cm4gb2xkOwogCX0KIAotU1RBQ0sgKnNrX2R1cChTVEFDSyAqc2spCitfU1RBQ0sgKnNrX2R1cChfU1RBQ0sgKnNrKQogCXsKLQlTVEFDSyAqcmV0OworCV9TVEFDSyAqcmV0OwogCWNoYXIgKipzOwogCiAJaWYgKChyZXQ9c2tfbmV3KHNrLT5jb21wKSkgPT0gTlVMTCkgZ290byBlcnI7CkBAIC0xMTIsMTkgKzExMiwxOSBAQAogCXJldHVybihOVUxMKTsKIAl9CiAKLVNUQUNLICpza19uZXdfbnVsbCh2b2lkKQorX1NUQUNLICpza19uZXdfbnVsbCh2b2lkKQogCXsKLQlyZXR1cm4gc2tfbmV3KChpbnQgKCopKGNvbnN0IGNoYXIgKiBjb25zdCAqLCBjb25zdCBjaGFyICogY29uc3QgKikpMCk7CisJcmV0dXJuIHNrX25ldygoaW50ICgqKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpMCk7CiAJfQogCi1TVEFDSyAqc2tfbmV3KGludCAoKmMpKGNvbnN0IGNoYXIgKiBjb25zdCAqLCBjb25zdCBjaGFyICogY29uc3QgKikpCitfU1RBQ0sgKnNrX25ldyhpbnQgKCpjKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpCiAJewotCVNUQUNLICpyZXQ7CisJX1NUQUNLICpyZXQ7CiAJaW50IGk7CiAKLQlpZiAoKHJldD0oU1RBQ0sgKilPUEVOU1NMX21hbGxvYyhzaXplb2YoU1RBQ0spKSkgPT0gTlVMTCkKKwlpZiAoKHJldD1PUEVOU1NMX21hbGxvYyhzaXplb2YoX1NUQUNLKSkpID09IE5VTEwpCiAJCWdvdG8gZXJyOwotCWlmICgocmV0LT5kYXRhPShjaGFyICoqKU9QRU5TU0xfbWFsbG9jKHNpemVvZihjaGFyICopKk1JTl9OT0RFUykpID09IE5VTEwpCisJaWYgKChyZXQtPmRhdGE9T1BFTlNTTF9tYWxsb2Moc2l6ZW9mKGNoYXIgKikqTUlOX05PREVTKSkgPT0gTlVMTCkKIAkJZ290byBlcnI7CiAJZm9yIChpPTA7IGk8TUlOX05PREVTOyBpKyspCiAJCXJldC0+ZGF0YVtpXT1OVUxMOwpAQCAtMTM5LDE0ICsxMzksMTQgQEAKIAlyZXR1cm4oTlVMTCk7CiAJfQogCi1pbnQgc2tfaW5zZXJ0KFNUQUNLICpzdCwgY2hhciAqZGF0YSwgaW50IGxvYykKK2ludCBza19pbnNlcnQoX1NUQUNLICpzdCwgdm9pZCAqZGF0YSwgaW50IGxvYykKIAl7CiAJY2hhciAqKnM7CiAKIAlpZihzdCA9PSBOVUxMKSByZXR1cm4gMDsKIAlpZiAoc3QtPm51bV9hbGxvYyA8PSBzdC0+bnVtKzEpCiAJCXsKLQkJcz0oY2hhciAqKilPUEVOU1NMX3JlYWxsb2MoKGNoYXIgKilzdC0+ZGF0YSwKKwkJcz1PUEVOU1NMX3JlYWxsb2MoKGNoYXIgKilzdC0+ZGF0YSwKIAkJCSh1bnNpZ25lZCBpbnQpc2l6ZW9mKGNoYXIgKikqc3QtPm51bV9hbGxvYyoyKTsKIAkJaWYgKHMgPT0gTlVMTCkKIAkJCXJldHVybigwKTsKQEAgLTE2MCwxNCArMTYwLDE0IEBACiAJCWludCBpOwogCQljaGFyICoqZiwqKnQ7CiAKLQkJZj0oY2hhciAqKilzdC0+ZGF0YTsKLQkJdD0oY2hhciAqKikmKHN0LT5kYXRhWzFdKTsKKwkJZj1zdC0+ZGF0YTsKKwkJdD0mKHN0LT5kYXRhWzFdKTsKIAkJZm9yIChpPXN0LT5udW07IGk+PWxvYzsgaS0tKQogCQkJdFtpXT1mW2ldOwogCQkJCiAjaWZkZWYgdW5kZWYgLyogbm8gbWVtbW92ZSBvbiBzdW5vcyA6LSggKi8KLQkJbWVtbW92ZSggKGNoYXIgKikmKHN0LT5kYXRhW2xvYysxXSksCi0JCQkoY2hhciAqKSYoc3QtPmRhdGFbbG9jXSksCisJCW1lbW1vdmUoJihzdC0+ZGF0YVtsb2MrMV0pLAorCQkJJihzdC0+ZGF0YVtsb2NdKSwKIAkJCXNpemVvZihjaGFyICopKihzdC0+bnVtLWxvYykpOwogI2VuZGlmCiAJCXN0LT5kYXRhW2xvY109ZGF0YTsKQEAgLTE3Nyw3ICsxNzcsNyBAQAogCXJldHVybihzdC0+bnVtKTsKIAl9CiAKLWNoYXIgKnNrX2RlbGV0ZV9wdHIoU1RBQ0sgKnN0LCBjaGFyICpwKQordm9pZCAqc2tfZGVsZXRlX3B0cihfU1RBQ0sgKnN0LCB2b2lkICpwKQogCXsKIAlpbnQgaTsKIApAQCAtMTg3LDcgKzE4Nyw3IEBACiAJcmV0dXJuKE5VTEwpOwogCX0KIAotY2hhciAqc2tfZGVsZXRlKFNUQUNLICpzdCwgaW50IGxvYykKK3ZvaWQgKnNrX2RlbGV0ZShfU1RBQ0sgKnN0LCBpbnQgbG9jKQogCXsKIAljaGFyICpyZXQ7CiAJaW50IGksajsKQEAgLTIxMCwxMSArMjEwLDExIEBACiAJcmV0dXJuKHJldCk7CiAJfQogCi1zdGF0aWMgaW50IGludGVybmFsX2ZpbmQoU1RBQ0sgKnN0LCBjaGFyICpkYXRhLCBpbnQgcmV0X3ZhbF9vcHRpb25zKQorc3RhdGljIGludCBpbnRlcm5hbF9maW5kKF9TVEFDSyAqc3QsIHZvaWQgKmRhdGEsIGludCByZXRfdmFsX29wdGlvbnMpCiAJewotCWNoYXIgKipyOworCWNvbnN0IHZvaWQgKiBjb25zdCAqcjsKIAlpbnQgaTsKLQlpbnQgKCpjb21wX2Z1bmMpKGNvbnN0IHZvaWQgKixjb25zdCB2b2lkICopOworCiAJaWYoc3QgPT0gTlVMTCkgcmV0dXJuIC0xOwogCiAJaWYgKHN0LT5jb21wID09IE5VTEwpCkBAIC0yMjYsNTMgKzIyNiw0NiBAQAogCQl9CiAJc2tfc29ydChzdCk7CiAJaWYgKGRhdGEgPT0gTlVMTCkgcmV0dXJuKC0xKTsKLQkvKiBUaGlzIChhbmQgdGhlICJxc29ydCIgYmVsb3cpIGFyZSB0aGUgdHdvIHBsYWNlcyBpbiBPcGVuU1NMCi0JICogd2hlcmUgd2UgbmVlZCB0byBjb252ZXJ0IGZyb20gb3VyIHN0YW5kYXJkICh0eXBlICoqLHR5cGUgKiopCi0JICogY29tcGFyZSBjYWxsYmFjayB0eXBlIHRvIHRoZSAodm9pZCAqLHZvaWQgKikgdHlwZSByZXF1aXJlZCBieQotCSAqIGJzZWFyY2guIEhvd2V2ZXIsIHRoZSAiZGF0YSIgaXQgaXMgYmVpbmcgY2FsbGVkKGJhY2spIHdpdGggYXJlCi0JICogbm90ICh0eXBlICopIHBvaW50ZXJzLCBidXQgdGhlICpwb2ludGVycyogdG8gKHR5cGUgKikgcG9pbnRlcnMsCi0JICogc28gd2UgZ2V0IG91ciBleHRyYSBsZXZlbCBvZiBwb2ludGVyIGRlcmVmZXJlbmNpbmcgdGhhdCB3YXkuICovCi0JY29tcF9mdW5jPShpbnQgKCopKGNvbnN0IHZvaWQgKixjb25zdCB2b2lkICopKShzdC0+Y29tcCk7Ci0Jcj0oY2hhciAqKilPQkpfYnNlYXJjaF9leCgoY2hhciAqKSZkYXRhLChjaGFyICopc3QtPmRhdGEsCi0JCXN0LT5udW0sc2l6ZW9mKGNoYXIgKiksY29tcF9mdW5jLHJldF92YWxfb3B0aW9ucyk7CisJcj1PQkpfYnNlYXJjaF9leF8oJmRhdGEsc3QtPmRhdGEsc3QtPm51bSxzaXplb2Yodm9pZCAqKSxzdC0+Y29tcCwKKwkJCSAgcmV0X3ZhbF9vcHRpb25zKTsKIAlpZiAociA9PSBOVUxMKSByZXR1cm4oLTEpOwotCXJldHVybigoaW50KShyLXN0LT5kYXRhKSk7CisJcmV0dXJuIChpbnQpKChjaGFyICoqKXItc3QtPmRhdGEpOwogCX0KIAotaW50IHNrX2ZpbmQoU1RBQ0sgKnN0LCBjaGFyICpkYXRhKQoraW50IHNrX2ZpbmQoX1NUQUNLICpzdCwgdm9pZCAqZGF0YSkKIAl7CiAJcmV0dXJuIGludGVybmFsX2ZpbmQoc3QsIGRhdGEsIE9CSl9CU0VBUkNIX0ZJUlNUX1ZBTFVFX09OX01BVENIKTsKIAl9Ci1pbnQgc2tfZmluZF9leChTVEFDSyAqc3QsIGNoYXIgKmRhdGEpCitpbnQgc2tfZmluZF9leChfU1RBQ0sgKnN0LCB2b2lkICpkYXRhKQogCXsKIAlyZXR1cm4gaW50ZXJuYWxfZmluZChzdCwgZGF0YSwgT0JKX0JTRUFSQ0hfVkFMVUVfT05fTk9NQVRDSCk7CiAJfQogCi1pbnQgc2tfcHVzaChTVEFDSyAqc3QsIGNoYXIgKmRhdGEpCitpbnQgc2tfcHVzaChfU1RBQ0sgKnN0LCB2b2lkICpkYXRhKQogCXsKIAlyZXR1cm4oc2tfaW5zZXJ0KHN0LGRhdGEsc3QtPm51bSkpOwogCX0KIAotaW50IHNrX3Vuc2hpZnQoU1RBQ0sgKnN0LCBjaGFyICpkYXRhKQoraW50IHNrX3Vuc2hpZnQoX1NUQUNLICpzdCwgdm9pZCAqZGF0YSkKIAl7CiAJcmV0dXJuKHNrX2luc2VydChzdCxkYXRhLDApKTsKIAl9CiAKLWNoYXIgKnNrX3NoaWZ0KFNUQUNLICpzdCkKK3ZvaWQgKnNrX3NoaWZ0KF9TVEFDSyAqc3QpCiAJewogCWlmIChzdCA9PSBOVUxMKSByZXR1cm4oTlVMTCk7CiAJaWYgKHN0LT5udW0gPD0gMCkgcmV0dXJuKE5VTEwpOwogCXJldHVybihza19kZWxldGUoc3QsMCkpOwogCX0KIAotY2hhciAqc2tfcG9wKFNUQUNLICpzdCkKK3ZvaWQgKnNrX3BvcChfU1RBQ0sgKnN0KQogCXsKIAlpZiAoc3QgPT0gTlVMTCkgcmV0dXJuKE5VTEwpOwogCWlmIChzdC0+bnVtIDw9IDApIHJldHVybihOVUxMKTsKIAlyZXR1cm4oc2tfZGVsZXRlKHN0LHN0LT5udW0tMSkpOwogCX0KIAotdm9pZCBza196ZXJvKFNUQUNLICpzdCkKK3ZvaWQgc2tfemVybyhfU1RBQ0sgKnN0KQogCXsKIAlpZiAoc3QgPT0gTlVMTCkgcmV0dXJuOwogCWlmIChzdC0+bnVtIDw9IDApIHJldHVybjsKQEAgLTI4MCw3ICsyNzMsNyBAQAogCXN0LT5udW09MDsKIAl9CiAKLXZvaWQgc2tfcG9wX2ZyZWUoU1RBQ0sgKnN0LCB2b2lkICgqZnVuYykodm9pZCAqKSkKK3ZvaWQgc2tfcG9wX2ZyZWUoX1NUQUNLICpzdCwgdm9pZCAoKmZ1bmMpKHZvaWQgKikpCiAJewogCWludCBpOwogCkBAIC0yOTEsMzIgKzI4NCwzMiBAQAogCXNrX2ZyZWUoc3QpOwogCX0KIAotdm9pZCBza19mcmVlKFNUQUNLICpzdCkKK3ZvaWQgc2tfZnJlZShfU1RBQ0sgKnN0KQogCXsKIAlpZiAoc3QgPT0gTlVMTCkgcmV0dXJuOwogCWlmIChzdC0+ZGF0YSAhPSBOVUxMKSBPUEVOU1NMX2ZyZWUoc3QtPmRhdGEpOwogCU9QRU5TU0xfZnJlZShzdCk7CiAJfQogCi1pbnQgc2tfbnVtKGNvbnN0IFNUQUNLICpzdCkKK2ludCBza19udW0oY29uc3QgX1NUQUNLICpzdCkKIHsKIAlpZihzdCA9PSBOVUxMKSByZXR1cm4gLTE7CiAJcmV0dXJuIHN0LT5udW07CiB9CiAKLWNoYXIgKnNrX3ZhbHVlKGNvbnN0IFNUQUNLICpzdCwgaW50IGkpCit2b2lkICpza192YWx1ZShjb25zdCBfU1RBQ0sgKnN0LCBpbnQgaSkKIHsKIAlpZighc3QgfHwgKGkgPCAwKSB8fCAoaSA+PSBzdC0+bnVtKSkgcmV0dXJuIE5VTEw7CiAJcmV0dXJuIHN0LT5kYXRhW2ldOwogfQogCi1jaGFyICpza19zZXQoU1RBQ0sgKnN0LCBpbnQgaSwgY2hhciAqdmFsdWUpCit2b2lkICpza19zZXQoX1NUQUNLICpzdCwgaW50IGksIHZvaWQgKnZhbHVlKQogewogCWlmKCFzdCB8fCAoaSA8IDApIHx8IChpID49IHN0LT5udW0pKSByZXR1cm4gTlVMTDsKIAlyZXR1cm4gKHN0LT5kYXRhW2ldID0gdmFsdWUpOwogfQogCi12b2lkIHNrX3NvcnQoU1RBQ0sgKnN0KQordm9pZCBza19zb3J0KF9TVEFDSyAqc3QpCiAJewogCWlmIChzdCAmJiAhc3QtPnNvcnRlZCkKIAkJewpAQCAtMzMzLDcgKzMyNiw3IEBACiAJCX0KIAl9CiAKLWludCBza19pc19zb3J0ZWQoY29uc3QgU1RBQ0sgKnN0KQoraW50IHNrX2lzX3NvcnRlZChjb25zdCBfU1RBQ0sgKnN0KQogCXsKIAlpZiAoIXN0KQogCQlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL2NyeXB0by9zdGFjay9zdGFjay5oIGIvY3J5cHRvL3N0YWNrL3N0YWNrLmgKaW5kZXggNWNiYjExNi4uY2UzNWU1NSAxMDA2NDQKLS0tIGEvY3J5cHRvL3N0YWNrL3N0YWNrLmgKKysrIGIvY3J5cHRvL3N0YWNrL3N0YWNrLmgKQEAgLTcwLDM3ICs3MCwzNiBAQAogCWludCBzb3J0ZWQ7CiAKIAlpbnQgbnVtX2FsbG9jOwotCWludCAoKmNvbXApKGNvbnN0IGNoYXIgKiBjb25zdCAqLCBjb25zdCBjaGFyICogY29uc3QgKik7Ci0JfSBTVEFDSzsKKwlpbnQgKCpjb21wKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKik7CisJfSBfU1RBQ0s7ICAvKiBVc2UgU1RBQ0tfT0YoLi4uKSBpbnN0ZWFkICovCiAKICNkZWZpbmUgTV9za19udW0oc2spCQkoKHNrKSA/IChzayktPm51bTotMSkKICNkZWZpbmUgTV9za192YWx1ZShzayxuKQkoKHNrKSA/IChzayktPmRhdGFbbl0gOiBOVUxMKQogCi1pbnQgc2tfbnVtKGNvbnN0IFNUQUNLICopOwotY2hhciAqc2tfdmFsdWUoY29uc3QgU1RBQ0sgKiwgaW50KTsKK2ludCBza19udW0oY29uc3QgX1NUQUNLICopOwordm9pZCAqc2tfdmFsdWUoY29uc3QgX1NUQUNLICosIGludCk7CiAKLWNoYXIgKnNrX3NldChTVEFDSyAqLCBpbnQsIGNoYXIgKik7Cit2b2lkICpza19zZXQoX1NUQUNLICosIGludCwgdm9pZCAqKTsKIAotU1RBQ0sgKnNrX25ldyhpbnQgKCpjbXApKGNvbnN0IGNoYXIgKiBjb25zdCAqLCBjb25zdCBjaGFyICogY29uc3QgKikpOwotU1RBQ0sgKnNrX25ld19udWxsKHZvaWQpOwotdm9pZCBza19mcmVlKFNUQUNLICopOwotdm9pZCBza19wb3BfZnJlZShTVEFDSyAqc3QsIHZvaWQgKCpmdW5jKSh2b2lkICopKTsKLWludCBza19pbnNlcnQoU1RBQ0sgKnNrLGNoYXIgKmRhdGEsaW50IHdoZXJlKTsKLWNoYXIgKnNrX2RlbGV0ZShTVEFDSyAqc3QsaW50IGxvYyk7Ci1jaGFyICpza19kZWxldGVfcHRyKFNUQUNLICpzdCwgY2hhciAqcCk7Ci1pbnQgc2tfZmluZChTVEFDSyAqc3QsY2hhciAqZGF0YSk7Ci1pbnQgc2tfZmluZF9leChTVEFDSyAqc3QsY2hhciAqZGF0YSk7Ci1pbnQgc2tfcHVzaChTVEFDSyAqc3QsY2hhciAqZGF0YSk7Ci1pbnQgc2tfdW5zaGlmdChTVEFDSyAqc3QsY2hhciAqZGF0YSk7Ci1jaGFyICpza19zaGlmdChTVEFDSyAqc3QpOwotY2hhciAqc2tfcG9wKFNUQUNLICpzdCk7Ci12b2lkIHNrX3plcm8oU1RBQ0sgKnN0KTsKLWludCAoKnNrX3NldF9jbXBfZnVuYyhTVEFDSyAqc2ssIGludCAoKmMpKGNvbnN0IGNoYXIgKiBjb25zdCAqLAotCQkJY29uc3QgY2hhciAqIGNvbnN0ICopKSkKLQkJCShjb25zdCBjaGFyICogY29uc3QgKiwgY29uc3QgY2hhciAqIGNvbnN0ICopOwotU1RBQ0sgKnNrX2R1cChTVEFDSyAqc3QpOwotdm9pZCBza19zb3J0KFNUQUNLICpzdCk7Ci1pbnQgc2tfaXNfc29ydGVkKGNvbnN0IFNUQUNLICpzdCk7CitfU1RBQ0sgKnNrX25ldyhpbnQgKCpjbXApKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSk7CitfU1RBQ0sgKnNrX25ld19udWxsKHZvaWQpOwordm9pZCBza19mcmVlKF9TVEFDSyAqKTsKK3ZvaWQgc2tfcG9wX2ZyZWUoX1NUQUNLICpzdCwgdm9pZCAoKmZ1bmMpKHZvaWQgKikpOworaW50IHNrX2luc2VydChfU1RBQ0sgKnNrLCB2b2lkICpkYXRhLCBpbnQgd2hlcmUpOwordm9pZCAqc2tfZGVsZXRlKF9TVEFDSyAqc3QsIGludCBsb2MpOwordm9pZCAqc2tfZGVsZXRlX3B0cihfU1RBQ0sgKnN0LCB2b2lkICpwKTsKK2ludCBza19maW5kKF9TVEFDSyAqc3QsIHZvaWQgKmRhdGEpOworaW50IHNrX2ZpbmRfZXgoX1NUQUNLICpzdCwgdm9pZCAqZGF0YSk7CitpbnQgc2tfcHVzaChfU1RBQ0sgKnN0LCB2b2lkICpkYXRhKTsKK2ludCBza191bnNoaWZ0KF9TVEFDSyAqc3QsIHZvaWQgKmRhdGEpOwordm9pZCAqc2tfc2hpZnQoX1NUQUNLICpzdCk7Cit2b2lkICpza19wb3AoX1NUQUNLICpzdCk7Cit2b2lkIHNrX3plcm8oX1NUQUNLICpzdCk7CitpbnQgKCpza19zZXRfY21wX2Z1bmMoX1NUQUNLICpzaywgaW50ICgqYykoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKSkKKwkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOworX1NUQUNLICpza19kdXAoX1NUQUNLICpzdCk7Cit2b2lkIHNrX3NvcnQoX1NUQUNLICpzdCk7CitpbnQgc2tfaXNfc29ydGVkKGNvbnN0IF9TVEFDSyAqc3QpOwogCiAjaWZkZWYgIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9jcnlwdG8vc3RvcmUvTWFrZWZpbGUgYi9jcnlwdG8vc3RvcmUvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5ZjVkMDAuLjAwMDAwMDAKLS0tIGEvY3J5cHRvL3N0b3JlL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLSMKLSMgT3BlblNTTC9jcnlwdG8vc3RvcmUvTWFrZWZpbGUKLSMKLQotRElSPQlzdG9yZQotVE9QPQkuLi8uLgotQ0M9CWNjCi1JTkNMVURFUz0gLUkuLiAtSSQoVE9QKSAtSS4uLy4uL2luY2x1ZGUKLUNGTEFHPS1nCi1NQUtFRklMRT0JTWFrZWZpbGUKLUFSPQkJYXIgcgotCi1DRkxBR1M9ICQoSU5DTFVERVMpICQoQ0ZMQUcpCi0KLUdFTkVSQUw9TWFrZWZpbGUKLSNURVNUPSBzdG9yZXRlc3QuYwotVEVTVD0KLUFQUFM9Ci0KLUxJQj0kKFRPUCkvbGliY3J5cHRvLmEKLUxJQlNSQz0gc3RyX2Vyci5jIHN0cl9saWIuYyBzdHJfbWV0aC5jIHN0cl9tZW0uYwotTElCT0JKPSBzdHJfZXJyLm8gc3RyX2xpYi5vIHN0cl9tZXRoLm8gc3RyX21lbS5vCi0KLVNSQz0gJChMSUJTUkMpCi0KLSNFWEhFQURFUj0gc3RvcmUuaCBzdHJfY29tcGF0LmgKLUVYSEVBREVSPSBzdG9yZS5oCi1IRUFERVI9CSQoRVhIRUFERVIpIHN0cl9sb2NsLmgKLQotQUxMPSAgICAkKEdFTkVSQUwpICQoU1JDKSAkKEhFQURFUikKLQotdG9wOgotCShjZCAuLi8uLjsgJChNQUtFKSBESVJTPWNyeXB0byBTRElSUz0kKERJUikgc3ViX2FsbCkKLQotYWxsOglsaWIKLQotbGliOgkkKExJQk9CSikKLQkkKEFSWCkgJChMSUIpICQoTElCT0JKKQotCSQoUkFOTElCKSAkKExJQikgfHwgZWNobyBOZXZlciBtaW5kLgotCUB0b3VjaCBsaWIKLQotZmlsZXM6Ci0JJChQRVJMKSAkKFRPUCkvdXRpbC9maWxlcy5wbCBNYWtlZmlsZSA+PiAkKFRPUCkvTUlORk8KLQotbGlua3M6Ci0JQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL2luY2x1ZGUvb3BlbnNzbCAkKEVYSEVBREVSKQotCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi90ZXN0ICQoVEVTVCkKLQlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vYXBwcyAkKEFQUFMpCi0KLWluc3RhbGw6Ci0JQFsgLW4gIiQoSU5TVEFMTFRPUCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHRvcCBNYWtlZmlsZS4uLgotCUBoZWFkZXJsaXN0PSIkKEVYSEVBREVSKSI7IGZvciBpIGluICQkaGVhZGVybGlzdDsgXAotCWRvICBcCi0JKGNwICQkaSAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaTsgXAotCWNobW9kIDY0NCAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaSApOyBcCi0JZG9uZTsKLQotdGFnczoKLQljdGFncyAkKFNSQykKLQotdGVzdHM6Ci0KLWxpbnQ6Ci0JbGludCAtRExJTlQgJChJTkNMVURFUykgJChTUkMpPmZsdWZmCi0KLWRlcGVuZDoKLQlAWyAtbiAiJChNQUtFREVQRU5EKSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdXBwZXIgTWFrZWZpbGUuLi4KLQkkKE1BS0VERVBFTkQpIC0tICQoQ0ZMQUcpICQoSU5DTFVERVMpICQoREVQRkxBRykgLS0gJChQUk9HUykgJChMSUJTUkMpCi0KLWRjbGVhbjoKLQkkKFBFUkwpIC1wZSAnaWYgKC9eIyBETyBOT1QgREVMRVRFIFRISVMgTElORS8pIHtwcmludDsgZXhpdCgwKTt9JyAkKE1BS0VGSUxFKSA+TWFrZWZpbGUubmV3Ci0JbXYgLWYgTWFrZWZpbGUubmV3ICQoTUFLRUZJTEUpCi0KLWNsZWFuOgotCXJtIC1mICoubyAqLyoubyAqLm9iaiBsaWIgdGFncyBjb3JlIC5wdXJlIC5uZnMqICoub2xkICouYmFrIGZsdWZmCi0KLSMgRE8gTk9UIERFTEVURSBUSElTIExJTkUgLS0gbWFrZSBkZXBlbmQgZGVwZW5kcyBvbiBpdC4KLQotc3RyX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1zdHJfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotc3RyX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotc3RyX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotc3RyX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLXN0cl9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0b3JlLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLXN0cl9lcnIubzogc3RyX2Vyci5jCi1zdHJfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1zdHJfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotc3RyX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLXN0cl9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotc3RyX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZW5naW5lLmgKLXN0cl9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotc3RyX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1zdHJfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotc3RyX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotc3RyX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAotc3RyX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCi1zdHJfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdG9yZS5oCi1zdHJfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLXN0cl9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5Lmggc3RyX2xpYi5jIHN0cl9sb2NsLmgKLXN0cl9tZW0ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotc3RyX21lbS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLXN0cl9tZW0ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXN0cl9tZW0ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXN0cl9tZW0ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1zdHJfbWVtLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdG9yZS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1zdHJfbWVtLm86IHN0cl9sb2NsLmggc3RyX21lbS5jCi1zdHJfbWV0aC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1zdHJfbWV0aC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotc3RyX21ldGgubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXN0cl9tZXRoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotc3RyX21ldGgubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0b3JlLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLXN0cl9tZXRoLm86IHN0cl9sb2NsLmggc3RyX21ldGguYwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3N0b3JlL3N0b3JlLmggYi9jcnlwdG8vc3RvcmUvc3RvcmUuaAppbmRleCA2NDU4MzM3Li4wYTI4YzdkIDEwMDY0NAotLS0gYS9jcnlwdG8vc3RvcmUvc3RvcmUuaAorKysgYi9jcnlwdG8vc3RvcmUvc3RvcmUuaApAQCAtNTksNiArNTksMTIgQEAKICNpZm5kZWYgSEVBREVSX1NUT1JFX0gKICNkZWZpbmUgSEVBREVSX1NUT1JFX0gKIAorI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KKworI2lmZGVmIE9QRU5TU0xfTk9fU1RPUkUKKyNlcnJvciBTVE9SRSBpcyBkaXNhYmxlZC4KKyNlbmRpZgorCiAjaW5jbHVkZSA8b3BlbnNzbC9vc3NsX3R5cC5oPgogI2lmbmRlZiBPUEVOU1NMX05PX0RFUFJFQ0FURUQKICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgpAQCAtNDA4LDcgKzQxNCw4IEBACiAKIC8qIENvbXBhcmUgb24gYmFzaXMgb2YgYSBiaXQgcGF0dGVybiBmb3JtZWQgYnkgdGhlIFNUT1JFX0FUVFJfVFlQRVMgdmFsdWVzCiAgICBpbiBlYWNoIGNvbnRhaW5lZCBhdHRyaWJ1dGUuICovCi1pbnQgU1RPUkVfQVRUUl9JTkZPX2NvbXBhcmUoU1RPUkVfQVRUUl9JTkZPICphLCBTVE9SRV9BVFRSX0lORk8gKmIpOworaW50IFNUT1JFX0FUVFJfSU5GT19jb21wYXJlKGNvbnN0IFNUT1JFX0FUVFJfSU5GTyAqIGNvbnN0ICphLAorCQkJICAgIGNvbnN0IFNUT1JFX0FUVFJfSU5GTyAqIGNvbnN0ICpiKTsKIC8qIENoZWNrIGlmIHRoZSBzZXQgb2YgYXR0cmlidXRlcyBpbiBhIGlzIHdpdGhpbiB0aGUgcmFuZ2Ugb2YgYXR0cmlidXRlcwogICAgc2V0IGluIGIuICovCiBpbnQgU1RPUkVfQVRUUl9JTkZPX2luX3JhbmdlKFNUT1JFX0FUVFJfSU5GTyAqYSwgU1RPUkVfQVRUUl9JTkZPICpiKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9zdG9yZS9zdHJfZXJyLmMgYi9jcnlwdG8vc3RvcmUvc3RyX2Vyci5jCmluZGV4IDZmZWU2NDkuLjkyNGVkZjAgMTAwNjQ0Ci0tLSBhL2NyeXB0by9zdG9yZS9zdHJfZXJyLmMKKysrIGIvY3J5cHRvL3N0b3JlL3N0cl9lcnIuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIGNyeXB0by9zdG9yZS9zdHJfZXJyLmMgKi8KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA2IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCmRpZmYgLS1naXQgYS9jcnlwdG8vc3RvcmUvc3RyX2xpYi5jIGIvY3J5cHRvL3N0b3JlL3N0cl9saWIuYwppbmRleCAzMmFlNWJkLi5mMWRiY2JkIDEwMDY0NAotLS0gYS9jcnlwdG8vc3RvcmUvc3RyX2xpYi5jCisrKyBiL2NyeXB0by9zdG9yZS9zdHJfbGliLmMKQEAgLTE2NzAsNyArMTY3MCw3IEBACiAJfQogCiBzdGF0aWMgaW50IGF0dHJfaW5mb19jb21wYXJlX2NvbXB1dGVfcmFuZ2UoCi0JdW5zaWduZWQgY2hhciAqYWJpdHMsIHVuc2lnbmVkIGNoYXIgKmJiaXRzLAorCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFiaXRzLCBjb25zdCB1bnNpZ25lZCBjaGFyICpiYml0cywKIAl1bnNpZ25lZCBpbnQgKmFsb3dwLCB1bnNpZ25lZCBpbnQgKmFoaWdocCwKIAl1bnNpZ25lZCBpbnQgKmJsb3dwLCB1bnNpZ25lZCBpbnQgKmJoaWdocCkKIAl7CkBAIC0xNzM5LDEzICsxNzM5LDE1IEBACiAJcmV0dXJuIHJlczsKIAl9CiAKLWludCBTVE9SRV9BVFRSX0lORk9fY29tcGFyZShTVE9SRV9BVFRSX0lORk8gKmEsIFNUT1JFX0FUVFJfSU5GTyAqYikKK2ludCBTVE9SRV9BVFRSX0lORk9fY29tcGFyZShjb25zdCBTVE9SRV9BVFRSX0lORk8gKiBjb25zdCAqYSwKKwkJCSAgICBjb25zdCBTVE9SRV9BVFRSX0lORk8gKiBjb25zdCAqYikKIAl7CiAJaWYgKGEgPT0gYikgcmV0dXJuIDA7CiAJaWYgKCFhKSByZXR1cm4gLTE7CiAJaWYgKCFiKSByZXR1cm4gMTsKLQlyZXR1cm4gYXR0cl9pbmZvX2NvbXBhcmVfY29tcHV0ZV9yYW5nZShhLT5zZXQsIGItPnNldCwgMCwgMCwgMCwgMCk7CisJcmV0dXJuIGF0dHJfaW5mb19jb21wYXJlX2NvbXB1dGVfcmFuZ2UoKCphKS0+c2V0LCAoKmIpLT5zZXQsIDAsIDAsIDAsIDApOwogCX0KKwogaW50IFNUT1JFX0FUVFJfSU5GT19pbl9yYW5nZShTVE9SRV9BVFRSX0lORk8gKmEsIFNUT1JFX0FUVFJfSU5GTyAqYikKIAl7CiAJdW5zaWduZWQgaW50IGFsb3csIGFoaWdoLCBibG93LCBiaGlnaDsKQEAgLTE3NTksNiArMTc2MSw3IEBACiAJCXJldHVybiAxOwogCXJldHVybiAwOwogCX0KKwogaW50IFNUT1JFX0FUVFJfSU5GT19pbihTVE9SRV9BVFRSX0lORk8gKmEsIFNUT1JFX0FUVFJfSU5GTyAqYikKIAl7CiAJdW5zaWduZWQgY2hhciAqYWJpdHMsICpiYml0czsKQEAgLTE3NzYsNiArMTc3OSw3IEBACiAJCX0KIAlyZXR1cm4gMTsKIAl9CisKIGludCBTVE9SRV9BVFRSX0lORk9faW5fZXgoU1RPUkVfQVRUUl9JTkZPICphLCBTVE9SRV9BVFRSX0lORk8gKmIpCiAJewogCVNUT1JFX0FUVFJfVFlQRVMgaTsKZGlmZiAtLWdpdCBhL2NyeXB0by9zdG9yZS9zdHJfbWVtLmMgYi9jcnlwdG8vc3RvcmUvc3RyX21lbS5jCmluZGV4IDUyNzc1N2EuLjhhYzRmN2UgMTAwNjQ0Ci0tLSBhL2NyeXB0by9zdG9yZS9zdHJfbWVtLmMKKysrIGIvY3J5cHRvL3N0b3JlL3N0cl9tZW0uYwpAQCAtNzYsMzAgKzc2LDM1IEBACiAgICBhdHRyaWJ1dGUgdHlwZSBjb2RlKS4KICovCiAKLXN0cnVjdCBtZW1fb2JqZWN0X2RhdGFfc3QKK3R5cGVkZWYgc3RydWN0IG1lbV9vYmplY3RfZGF0YV9zdAogCXsKIAlTVE9SRV9PQkpFQ1QgKm9iamVjdDsKIAlTVE9SRV9BVFRSX0lORk8gKmF0dHJfaW5mbzsKIAlpbnQgcmVmZXJlbmNlczsKLQl9OworCX0gTUVNX09CSkVDVF9EQVRBOwogCitERUNMQVJFX1NUQUNLX09GKE1FTV9PQkpFQ1RfREFUQSkKIHN0cnVjdCBtZW1fZGF0YV9zdAogCXsKLQlTVEFDSyAqZGF0YTsJCS8qIEEgc3RhY2sgb2YgbWVtX29iamVjdF9kYXRhX3N0LAotCQkJCSAgIHNvcnRlZCB3aXRoIFNUT1JFX0FUVFJfSU5GT19jb21wYXJlKCkuICovCisJU1RBQ0tfT0YoTUVNX09CSkVDVF9EQVRBKSAqZGF0YTsgLyogc29ydGVkIHdpdGgKKwkJCQkJICAqIFNUT1JFX0FUVFJfSU5GT19jb21wYXJlKCkuICovCiAJdW5zaWduZWQgaW50IGNvbXB1dGVfY29tcG9uZW50cyA6IDE7IC8qIEN1cnJlbnRseSB1bnVzZWQsIGJ1dCBjYW4KIAkJCQkJCWJlIHVzZWQgdG8gYWRkIGF0dHJpYnV0ZXMKIAkJCQkJCWZyb20gcGFydHMgb2YgdGhlIGRhdGEuICovCiAJfTsKIAorREVDTEFSRV9TVEFDS19PRihTVE9SRV9BVFRSX0lORk8pCiBzdHJ1Y3QgbWVtX2N0eF9zdAogCXsKIAlpbnQgdHlwZTsJCS8qIFRoZSB0eXBlIHdlJ3JlIHNlYXJjaGluZyBmb3IgKi8KLQlTVEFDSyAqc2VhcmNoX2F0dHJpYnV0ZXM7IC8qIFNldHMgb2YgYXR0cmlidXRlcyB0byBzZWFyY2ggZm9yLgotCQkJCSAgICAgRWFjaCBlbGVtZW50IGlzIGEgU1RPUkVfQVRUUl9JTkZPLiAqLwotCWludCBzZWFyY2hfaW5kZXg7CS8qIHdoaWNoIG9mIHRoZSBzZWFyY2ggYXR0cmlidXRlcyB3ZSBmb3VuZCBhIG1hdGNoCi0JCQkJICAgZm9yLCAtMSB3aGVuIHdlIHN0aWxsIGhhdmVuJ3QgZm91bmQgYW55ICovCi0JaW50IGluZGV4OwkJLyogLTEgYXMgbG9uZyBhcyB3ZSdyZSBzZWFyY2hpbmcgZm9yIHRoZSBmaXJzdCAqLworCVNUQUNLX09GKFNUT1JFX0FUVFJfSU5GTykgKnNlYXJjaF9hdHRyaWJ1dGVzOyAvKiBTZXRzIG9mCisJCQkJICAgICBhdHRyaWJ1dGVzIHRvIHNlYXJjaCBmb3IuICBFYWNoCisJCQkJICAgICBlbGVtZW50IGlzIGEgU1RPUkVfQVRUUl9JTkZPLiAqLworCWludCBzZWFyY2hfaW5kZXg7CS8qIHdoaWNoIG9mIHRoZSBzZWFyY2ggYXR0cmlidXRlcyB3ZQorCQkJCSAgIGZvdW5kIGEgbWF0Y2ggZm9yLCAtMSB3aGVuIHdlIHN0aWxsCisJCQkJICAgaGF2ZW4ndCBmb3VuZCBhbnkgKi8KKwlpbnQgaW5kZXg7CQkvKiAtMSBhcyBsb25nIGFzIHdlJ3JlIHNlYXJjaGluZyBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmaXJzdCAqLwogCX07CiAKIHN0YXRpYyBpbnQgbWVtX2luaXQoU1RPUkUgKnMpOwpAQCAtMjQwLDcgKzI0NSw3IEBACiAJCWlmIChjb250ZXh0LT5zZWFyY2hfYXR0cmlidXRlcyA9PSBOVUxMKQogCQkJewogCQkJY29udGV4dC0+c2VhcmNoX2F0dHJpYnV0ZXMgPQotCQkJCXNrX25ldygoaW50ICgqKShjb25zdCBjaGFyICogY29uc3QgKiwgY29uc3QgY2hhciAqIGNvbnN0ICopKVNUT1JFX0FUVFJfSU5GT19jb21wYXJlKTsKKwkJCQlza19TVE9SRV9BVFRSX0lORk9fbmV3KFNUT1JFX0FUVFJfSU5GT19jb21wYXJlKTsKIAkJCWlmICghY29udGV4dC0+c2VhcmNoX2F0dHJpYnV0ZXMpCiAJCQkJewogCQkJCVNUT1JFZXJyKFNUT1JFX0ZfTUVNX0xJU1RfU1RBUlQsCkBAIC0yNDgsNyArMjUzLDcgQEAKIAkJCQlnb3RvIGVycjsKIAkJCQl9CiAJCQl9Ci0JCXNrX3B1c2goY29udGV4dC0+c2VhcmNoX2F0dHJpYnV0ZXMsKGNoYXIgKilhdHRycyk7CisJCXNrX1NUT1JFX0FUVFJfSU5GT19wdXNoKGNvbnRleHQtPnNlYXJjaF9hdHRyaWJ1dGVzLGF0dHJzKTsKIAkJfQogCWlmICghU1RPUkVfcGFyc2VfYXR0cnNfZW5kcChhdHRyaWJ1dGVfY29udGV4dCkpCiAJCWdvdG8gZXJyOwpAQCAtMjg0LDExICsyODksMTQgQEAKIAogCWlmIChjb250ZXh0LT5zZWFyY2hfaW5kZXggPT0gLTEpCiAJCXsKLQkJZm9yIChpID0gMDsgaSA8IHNrX251bShjb250ZXh0LT5zZWFyY2hfYXR0cmlidXRlcyk7IGkrKykKKwkJZm9yIChpID0gMDsKKwkJICAgICBpIDwgc2tfU1RPUkVfQVRUUl9JTkZPX251bShjb250ZXh0LT5zZWFyY2hfYXR0cmlidXRlcyk7CisJCSAgICAgaSsrKQogCQkJewotCQkJa2V5LmF0dHJfaW5mbyA9Ci0JCQkJKFNUT1JFX0FUVFJfSU5GTyAqKXNrX3ZhbHVlKGNvbnRleHQtPnNlYXJjaF9hdHRyaWJ1dGVzLCBpKTsKLQkJCXNyY2ggPSBza19maW5kX2V4KHN0b3JlLT5kYXRhLCAoY2hhciAqKSZrZXkpOworCQkJa2V5LmF0dHJfaW5mbworCQkJICA9IHNrX1NUT1JFX0FUVFJfSU5GT192YWx1ZShjb250ZXh0LT5zZWFyY2hfYXR0cmlidXRlcywKKwkJCQkJCSAgICAgaSk7CisJCQlzcmNoID0gc2tfTUVNX09CSkVDVF9EQVRBX2ZpbmRfZXgoc3RvcmUtPmRhdGEsICZrZXkpOwogCiAJCQlpZiAoc3JjaCA+PSAwKQogCQkJCXsKQEAgLTMwMSwyMSArMzA5LDIwIEBACiAJCXJldHVybiBOVUxMOwogCQogCWtleS5hdHRyX2luZm8gPQotCQkoU1RPUkVfQVRUUl9JTkZPICopc2tfdmFsdWUoY29udGV4dC0+c2VhcmNoX2F0dHJpYnV0ZXMsCi0JCQljb250ZXh0LT5zZWFyY2hfaW5kZXgpOworCQlza19TVE9SRV9BVFRSX0lORk9fdmFsdWUoY29udGV4dC0+c2VhcmNoX2F0dHJpYnV0ZXMsCisJCQkJCSBjb250ZXh0LT5zZWFyY2hfaW5kZXgpOwogCWZvcihzcmNoID0gY29udGV4dC0+c2VhcmNoX2luZGV4OwotCSAgICBzcmNoIDwgc2tfbnVtKHN0b3JlLT5kYXRhKQorCSAgICBzcmNoIDwgc2tfTUVNX09CSkVDVF9EQVRBX251bShzdG9yZS0+ZGF0YSkKIAkJICAgICYmIFNUT1JFX0FUVFJfSU5GT19pbl9yYW5nZShrZXkuYXR0cl9pbmZvLAotCQkJICAgIChTVE9SRV9BVFRSX0lORk8gKilza192YWx1ZShzdG9yZS0+ZGF0YSwgc3JjaCkpCisJCQkgICAgc2tfTUVNX09CSkVDVF9EQVRBX3ZhbHVlKHN0b3JlLT5kYXRhLCBzcmNoKS0+YXR0cl9pbmZvKQogCQkgICAgJiYgIShjcmVzID0gU1RPUkVfQVRUUl9JTkZPX2luX2V4KGtleS5hdHRyX2luZm8sCi0JCQkJIChTVE9SRV9BVFRSX0lORk8gKilza192YWx1ZShzdG9yZS0+ZGF0YSwgc3JjaCkpKTsKKwkJCQkgc2tfTUVNX09CSkVDVF9EQVRBX3ZhbHVlKHN0b3JlLT5kYXRhLCBzcmNoKS0+YXR0cl9pbmZvKSk7CiAJICAgIHNyY2grKykKIAkJOwogCiAJY29udGV4dC0+c2VhcmNoX2luZGV4ID0gc3JjaDsKIAlpZiAoY3JlcykKLQkJcmV0dXJuICgoc3RydWN0IG1lbV9vYmplY3RfZGF0YV9zdCAqKXNrX3ZhbHVlKHN0b3JlLT5kYXRhLAotCQkJCXNyY2gpKS0+b2JqZWN0OworCQlyZXR1cm4gKHNrX01FTV9PQkpFQ1RfREFUQV92YWx1ZShzdG9yZS0+ZGF0YSwgc3JjaCkpLT5vYmplY3Q7CiAJcmV0dXJuIE5VTEw7CiAJfQogc3RhdGljIGludCBtZW1fbGlzdF9lbmQoU1RPUkUgKnMsIHZvaWQgKmhhbmRsZSkKQEAgLTMyOCw3ICszMzUsNyBAQAogCQlyZXR1cm4gMDsKIAkJfQogCWlmIChjb250ZXh0ICYmIGNvbnRleHQtPnNlYXJjaF9hdHRyaWJ1dGVzKQotCQlza19mcmVlKGNvbnRleHQtPnNlYXJjaF9hdHRyaWJ1dGVzKTsKKwkJc2tfU1RPUkVfQVRUUl9JTkZPX2ZyZWUoY29udGV4dC0+c2VhcmNoX2F0dHJpYnV0ZXMpOwogCWlmIChjb250ZXh0KSBPUEVOU1NMX2ZyZWUoY29udGV4dCk7CiAJcmV0dXJuIDE7CiAJfQpAQCAtMzM3LDcgKzM0NCw4IEBACiAJc3RydWN0IG1lbV9jdHhfc3QgKmNvbnRleHQgPSAoc3RydWN0IG1lbV9jdHhfc3QgKiloYW5kbGU7CiAKIAlpZiAoIWNvbnRleHQKLQkJfHwgY29udGV4dC0+c2VhcmNoX2luZGV4ID09IHNrX251bShjb250ZXh0LT5zZWFyY2hfYXR0cmlidXRlcykpCisJICAgIHx8IGNvbnRleHQtPnNlYXJjaF9pbmRleAorCSAgICAgICA9PSBza19TVE9SRV9BVFRSX0lORk9fbnVtKGNvbnRleHQtPnNlYXJjaF9hdHRyaWJ1dGVzKSkKIAkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CiAJfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL3N5bWhhY2tzLmggYi9jcnlwdG8vc3ltaGFja3MuaAppbmRleCAwMTE0MDkzLi4xNTFiNjgzIDEwMDY0NAotLS0gYS9jcnlwdG8vc3ltaGFja3MuaAorKysgYi9jcnlwdG8vc3ltaGFja3MuaApAQCAtNjcsMTAgKzY3LDYgQEAKICAgIGluY29tcGF0aWJpbGl0aWVzLiAqLwogI2lmZGVmIE9QRU5TU0xfU1lTX1ZNUwogCi0vKiBIYWNrIGEgbG9uZyBuYW1lIGluIGNyeXB0by9jcnlwdGxpYi5jICovCi0jdW5kZWYgaW50X0NSWVBUT19zZXRfZG9fZHlubG9ja19jYWxsYmFjawotI2RlZmluZSBpbnRfQ1JZUFRPX3NldF9kb19keW5sb2NrX2NhbGxiYWNrCWludF9DUllQVE9fc2V0X2RvX2R5bmxvY2tfY2IKLQogLyogSGFjayBhIGxvbmcgbmFtZSBpbiBjcnlwdG8vZXhfZGF0YS5jICovCiAjdW5kZWYgQ1JZUFRPX2dldF9leF9kYXRhX2ltcGxlbWVudGF0aW9uCiAjZGVmaW5lIENSWVBUT19nZXRfZXhfZGF0YV9pbXBsZW1lbnRhdGlvbglDUllQVE9fZ2V0X2V4X2RhdGFfaW1wbApAQCAtMTUxLDkgKzE0Nyw5IEBACiAjdW5kZWYgQ1JZUFRPX3NldF9keW5sb2NrX2NyZWF0ZV9jYWxsYmFjawogI2RlZmluZSBDUllQVE9fc2V0X2R5bmxvY2tfY3JlYXRlX2NhbGxiYWNrICAgICAgQ1JZUFRPX3NldF9keW5sb2NrX2NyZWF0ZV9jYgogI3VuZGVmIENSWVBUT19zZXRfZHlubG9ja19sb2NrX2NhbGxiYWNrCi0jZGVmaW5lIENSWVBUT19zZXRfZHlubG9ja19sb2NrX2NhbGxiYWNrICAgICAgICBDUllQVE9fc2V0X2R5bmxvY2tfbG9ja19jYgorI2RlZmluZSBDUllQVE9fc2V0X2R5bmxvY2tfbG9ja19jYWxsYmFjawlDUllQVE9fc2V0X2R5bmxvY2tfbG9ja19jYgogI3VuZGVmIENSWVBUT19nZXRfZHlubG9ja19sb2NrX2NhbGxiYWNrCi0jZGVmaW5lIENSWVBUT19nZXRfZHlubG9ja19sb2NrX2NhbGxiYWNrICAgICAgICBDUllQVE9fZ2V0X2R5bmxvY2tfbG9ja19jYgorI2RlZmluZSBDUllQVE9fZ2V0X2R5bmxvY2tfbG9ja19jYWxsYmFjawlDUllQVE9fZ2V0X2R5bmxvY2tfbG9ja19jYgogI3VuZGVmIENSWVBUT19nZXRfZHlubG9ja19kZXN0cm95X2NhbGxiYWNrCiAjZGVmaW5lIENSWVBUT19nZXRfZHlubG9ja19kZXN0cm95X2NhbGxiYWNrICAgICBDUllQVE9fZ2V0X2R5bmxvY2tfZGVzdHJveV9jYgogI3VuZGVmIENSWVBUT19nZXRfZHlubG9ja19jcmVhdGVfY2FsbGJhY2sKQEAgLTE2NSw3ICsxNjEsNyBAQAogCiAvKiBIYWNrIHNvbWUgbG9uZyBTU0wgbmFtZXMgKi8KICN1bmRlZiBTU0xfQ1RYX3NldF9kZWZhdWx0X3ZlcmlmeV9wYXRocwotI2RlZmluZSBTU0xfQ1RYX3NldF9kZWZhdWx0X3ZlcmlmeV9wYXRocyAgICAgICAgU1NMX0NUWF9zZXRfZGVmX3ZlcmlmeV9wYXRocworI2RlZmluZSBTU0xfQ1RYX3NldF9kZWZhdWx0X3ZlcmlmeV9wYXRocwlTU0xfQ1RYX3NldF9kZWZfdmVyaWZ5X3BhdGhzCiAjdW5kZWYgU1NMX2dldF9leF9kYXRhX1g1MDlfU1RPUkVfQ1RYX2lkeAogI2RlZmluZSBTU0xfZ2V0X2V4X2RhdGFfWDUwOV9TVE9SRV9DVFhfaWR4ICAgICAgU1NMX2dldF9leF9kX1g1MDlfU1RPUkVfQ1RYX2lkeAogI3VuZGVmIFNTTF9hZGRfZmlsZV9jZXJ0X3N1YmplY3RzX3RvX3N0YWNrCkBAIC0xNzUsNyArMTcxLDcgQEAKICN1bmRlZiBTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9jaGFpbl9maWxlCiAjZGVmaW5lIFNTTF9DVFhfdXNlX2NlcnRpZmljYXRlX2NoYWluX2ZpbGUgICAgICBTU0xfQ1RYX3VzZV9jZXJ0X2NoYWluX2ZpbGUKICN1bmRlZiBTU0xfQ1RYX3NldF9jZXJ0X3ZlcmlmeV9jYWxsYmFjawotI2RlZmluZSBTU0xfQ1RYX3NldF9jZXJ0X3ZlcmlmeV9jYWxsYmFjayAgICAgICAgU1NMX0NUWF9zZXRfY2VydF92ZXJpZnlfY2IKKyNkZWZpbmUgU1NMX0NUWF9zZXRfY2VydF92ZXJpZnlfY2FsbGJhY2sJU1NMX0NUWF9zZXRfY2VydF92ZXJpZnlfY2IKICN1bmRlZiBTU0xfQ1RYX3NldF9kZWZhdWx0X3Bhc3N3ZF9jYl91c2VyZGF0YQogI2RlZmluZSBTU0xfQ1RYX3NldF9kZWZhdWx0X3Bhc3N3ZF9jYl91c2VyZGF0YSAgU1NMX0NUWF9zZXRfZGVmX3Bhc3N3ZF9jYl91ZAogI3VuZGVmIFNTTF9DT01QX2dldF9jb21wcmVzc2lvbl9tZXRob2RzCkBAIC0xOTYsOSArMTkyLDE3IEBACiAjdW5kZWYgRU5HSU5FX3NldF9kZWZhdWx0X0JOX21vZF9leHBfY3J0CiAjZGVmaW5lIEVOR0lORV9zZXRfZGVmYXVsdF9CTl9tb2RfZXhwX2NydAlFTkdJTkVfc2V0X2RlZl9CTl9tb2RfZXhwX2NydAogI3VuZGVmIEVOR0lORV9zZXRfbG9hZF9wcml2a2V5X2Z1bmN0aW9uCi0jZGVmaW5lIEVOR0lORV9zZXRfbG9hZF9wcml2a2V5X2Z1bmN0aW9uICAgICAgICBFTkdJTkVfc2V0X2xvYWRfcHJpdmtleV9mbgorI2RlZmluZSBFTkdJTkVfc2V0X2xvYWRfcHJpdmtleV9mdW5jdGlvbglFTkdJTkVfc2V0X2xvYWRfcHJpdmtleV9mbgogI3VuZGVmIEVOR0lORV9nZXRfbG9hZF9wcml2a2V5X2Z1bmN0aW9uCi0jZGVmaW5lIEVOR0lORV9nZXRfbG9hZF9wcml2a2V5X2Z1bmN0aW9uICAgICAgICBFTkdJTkVfZ2V0X2xvYWRfcHJpdmtleV9mbgorI2RlZmluZSBFTkdJTkVfZ2V0X2xvYWRfcHJpdmtleV9mdW5jdGlvbglFTkdJTkVfZ2V0X2xvYWRfcHJpdmtleV9mbgorI3VuZGVmIEVOR0lORV91bnJlZ2lzdGVyX3BrZXlfYXNuMV9tZXRocworI2RlZmluZSBFTkdJTkVfdW5yZWdpc3Rlcl9wa2V5X2FzbjFfbWV0aHMJRU5HSU5FX3VucmVnX3BrZXlfYXNuMV9tZXRocworI3VuZGVmIEVOR0lORV9yZWdpc3Rlcl9hbGxfcGtleV9hc24xX21ldGhzCisjZGVmaW5lIEVOR0lORV9yZWdpc3Rlcl9hbGxfcGtleV9hc24xX21ldGhzCUVOR0lORV9yZWdfYWxsX3BrZXlfYXNuMV9tZXRocworI3VuZGVmIEVOR0lORV9zZXRfZGVmYXVsdF9wa2V5X2FzbjFfbWV0aHMKKyNkZWZpbmUgRU5HSU5FX3NldF9kZWZhdWx0X3BrZXlfYXNuMV9tZXRocwlFTkdJTkVfc2V0X2RlZl9wa2V5X2FzbjFfbWV0aHMKKyN1bmRlZiBFTkdJTkVfZ2V0X3BrZXlfYXNuMV9tZXRoX2VuZ2luZQorI2RlZmluZSBFTkdJTkVfZ2V0X3BrZXlfYXNuMV9tZXRoX2VuZ2luZQlFTkdJTkVfZ2V0X3BrZXlfYXNuMV9tZXRoX2VuZwogI3VuZGVmIEVOR0lORV9zZXRfbG9hZF9zc2xfY2xpZW50X2NlcnRfZnVuY3Rpb24KICNkZWZpbmUgRU5HSU5FX3NldF9sb2FkX3NzbF9jbGllbnRfY2VydF9mdW5jdGlvbiBcCiAJCQkJCQlFTkdJTkVfc2V0X2xkX3NzbF9jbG50X2NlcnRfZm4KQEAgLTIwNyw3ICsyMTEsNyBAQAogCiAvKiBIYWNrIHNvbWUgbG9uZyBPQ1NQIG5hbWVzICovCiAjdW5kZWYgT0NTUF9SRVFVRVNUX2dldF9leHRfYnlfY3JpdGljYWwKLSNkZWZpbmUgT0NTUF9SRVFVRVNUX2dldF9leHRfYnlfY3JpdGljYWwgICAgICAgIE9DU1BfUkVRVUVTVF9nZXRfZXh0X2J5X2NyaXQKKyNkZWZpbmUgT0NTUF9SRVFVRVNUX2dldF9leHRfYnlfY3JpdGljYWwJT0NTUF9SRVFVRVNUX2dldF9leHRfYnlfY3JpdAogI3VuZGVmIE9DU1BfQkFTSUNSRVNQX2dldF9leHRfYnlfY3JpdGljYWwKICNkZWZpbmUgT0NTUF9CQVNJQ1JFU1BfZ2V0X2V4dF9ieV9jcml0aWNhbCAgICAgIE9DU1BfQkFTSUNSRVNQX2dldF9leHRfYnlfY3JpdAogI3VuZGVmIE9DU1BfU0lOR0xFUkVTUF9nZXRfZXh0X2J5X2NyaXRpY2FsCkBAIC0yMjQsNiArMjI4LDggQEAKICNkZWZpbmUgT1BFTlNTTF9hZGRfYWxsX2FsZ29yaXRobXNfbm9jb25mCU9QRU5TU0xfYWRkX2FsbF9hbGdvX25vY29uZgogI3VuZGVmIE9QRU5TU0xfYWRkX2FsbF9hbGdvcml0aG1zX2NvbmYKICNkZWZpbmUgT1BFTlNTTF9hZGRfYWxsX2FsZ29yaXRobXNfY29uZgkJT1BFTlNTTF9hZGRfYWxsX2FsZ29fY29uZgorI3VuZGVmIEVWUF9QS0VZX21ldGhfc2V0X3ZlcmlmeV9yZWNvdmVyCisjZGVmaW5lIEVWUF9QS0VZX21ldGhfc2V0X3ZlcmlmeV9yZWNvdmVyCUVWUF9QS0VZX21ldGhfc2V0X3ZyZnlfcmVjb3ZlcgogCiAvKiBIYWNrIHNvbWUgbG9uZyBFQyBuYW1lcyAqLwogI3VuZGVmIEVDX0dST1VQX3NldF9wb2ludF9jb252ZXJzaW9uX2Zvcm0KQEAgLTI1MiwxNSArMjU4LDE1IEBACiAjZGVmaW5lIEVDX1BPSU5UX3NldF9jb21wcmVzc2VkX2Nvb3JkaW5hdGVzX0dGMm0gXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUNfUE9JTlRfc2V0X2NvbXByX2Nvb3Jkc19HRjJtCiAjdW5kZWYgZWNfR0YybV9zaW1wbGVfZ3JvdXBfY2xlYXJfZmluaXNoCi0jZGVmaW5lIGVjX0dGMm1fc2ltcGxlX2dyb3VwX2NsZWFyX2ZpbmlzaCAgICAgICAgZWNfR0YybV9zaW1wbGVfZ3JwX2Nscl9maW5pc2gKKyNkZWZpbmUgZWNfR0YybV9zaW1wbGVfZ3JvdXBfY2xlYXJfZmluaXNoCWVjX0dGMm1fc2ltcGxlX2dycF9jbHJfZmluaXNoCiAjdW5kZWYgZWNfR0YybV9zaW1wbGVfZ3JvdXBfY2hlY2tfZGlzY3JpbWluYW50CiAjZGVmaW5lIGVjX0dGMm1fc2ltcGxlX2dyb3VwX2NoZWNrX2Rpc2NyaW1pbmFudAllY19HRjJtX3NpbXBsZV9ncnBfY2hrX2Rpc2NyaW0KICN1bmRlZiBlY19HRjJtX3NpbXBsZV9wb2ludF9jbGVhcl9maW5pc2gKLSNkZWZpbmUgZWNfR0YybV9zaW1wbGVfcG9pbnRfY2xlYXJfZmluaXNoICAgICAgICBlY19HRjJtX3NpbXBsZV9wdF9jbHJfZmluaXNoCisjZGVmaW5lIGVjX0dGMm1fc2ltcGxlX3BvaW50X2NsZWFyX2ZpbmlzaAllY19HRjJtX3NpbXBsZV9wdF9jbHJfZmluaXNoCiAjdW5kZWYgZWNfR0YybV9zaW1wbGVfcG9pbnRfc2V0X3RvX2luZmluaXR5Ci0jZGVmaW5lIGVjX0dGMm1fc2ltcGxlX3BvaW50X3NldF90b19pbmZpbml0eSAgICAgZWNfR0YybV9zaW1wbGVfcHRfc2V0X3RvX2luZgorI2RlZmluZSBlY19HRjJtX3NpbXBsZV9wb2ludF9zZXRfdG9faW5maW5pdHkJZWNfR0YybV9zaW1wbGVfcHRfc2V0X3RvX2luZgogI3VuZGVmIGVjX0dGMm1fc2ltcGxlX3BvaW50c19tYWtlX2FmZmluZQotI2RlZmluZSBlY19HRjJtX3NpbXBsZV9wb2ludHNfbWFrZV9hZmZpbmUgICAgICAgIGVjX0dGMm1fc2ltcGxlX3B0c19tYWtlX2FmZmluZQorI2RlZmluZSBlY19HRjJtX3NpbXBsZV9wb2ludHNfbWFrZV9hZmZpbmUJZWNfR0YybV9zaW1wbGVfcHRzX21ha2VfYWZmaW5lCiAjdW5kZWYgZWNfR0YybV9zaW1wbGVfcG9pbnRfc2V0X2FmZmluZV9jb29yZGluYXRlcwogI2RlZmluZSBlY19HRjJtX3NpbXBsZV9wb2ludF9zZXRfYWZmaW5lX2Nvb3JkaW5hdGVzIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjX0dGMm1fc21wX3B0X3NldF9hZl9jb29yZHMKQEAgLTI3NSwxOSArMjgxLDE5IEBACiAjdW5kZWYgZWNfR0ZwX3NpbXBsZV9ncm91cF9nZXRfY3VydmVfR0ZwCiAjZGVmaW5lIGVjX0dGcF9zaW1wbGVfZ3JvdXBfZ2V0X2N1cnZlX0dGcCAgICAgICBlY19HRnBfc2ltcGxlX2dycF9nZXRfY3VydmVfR0ZwCiAjdW5kZWYgZWNfR0ZwX3NpbXBsZV9ncm91cF9jbGVhcl9maW5pc2gKLSNkZWZpbmUgZWNfR0ZwX3NpbXBsZV9ncm91cF9jbGVhcl9maW5pc2ggICAgICAgIGVjX0dGcF9zaW1wbGVfZ3JwX2NsZWFyX2ZpbmlzaAorI2RlZmluZSBlY19HRnBfc2ltcGxlX2dyb3VwX2NsZWFyX2ZpbmlzaAllY19HRnBfc2ltcGxlX2dycF9jbGVhcl9maW5pc2gKICN1bmRlZiBlY19HRnBfc2ltcGxlX2dyb3VwX3NldF9nZW5lcmF0b3IKICNkZWZpbmUgZWNfR0ZwX3NpbXBsZV9ncm91cF9zZXRfZ2VuZXJhdG9yICAgICAgIGVjX0dGcF9zaW1wbGVfZ3JwX3NldF9nZW5lcmF0b3IKICN1bmRlZiBlY19HRnBfc2ltcGxlX2dyb3VwX2dldDBfZ2VuZXJhdG9yCiAjZGVmaW5lIGVjX0dGcF9zaW1wbGVfZ3JvdXBfZ2V0MF9nZW5lcmF0b3IgICAgICBlY19HRnBfc2ltcGxlX2dycF9ndDBfZ2VuZXJhdG9yCiAjdW5kZWYgZWNfR0ZwX3NpbXBsZV9ncm91cF9nZXRfY29mYWN0b3IKLSNkZWZpbmUgZWNfR0ZwX3NpbXBsZV9ncm91cF9nZXRfY29mYWN0b3IgICAgICAgIGVjX0dGcF9zaW1wbGVfZ3JwX2dldF9jb2ZhY3RvcgorI2RlZmluZSBlY19HRnBfc2ltcGxlX2dyb3VwX2dldF9jb2ZhY3RvcgllY19HRnBfc2ltcGxlX2dycF9nZXRfY29mYWN0b3IKICN1bmRlZiBlY19HRnBfc2ltcGxlX3BvaW50X2NsZWFyX2ZpbmlzaAotI2RlZmluZSBlY19HRnBfc2ltcGxlX3BvaW50X2NsZWFyX2ZpbmlzaCAgICAgICAgZWNfR0ZwX3NpbXBsZV9wdF9jbGVhcl9maW5pc2gKKyNkZWZpbmUgZWNfR0ZwX3NpbXBsZV9wb2ludF9jbGVhcl9maW5pc2gJZWNfR0ZwX3NpbXBsZV9wdF9jbGVhcl9maW5pc2gKICN1bmRlZiBlY19HRnBfc2ltcGxlX3BvaW50X3NldF90b19pbmZpbml0eQogI2RlZmluZSBlY19HRnBfc2ltcGxlX3BvaW50X3NldF90b19pbmZpbml0eSAgICAgZWNfR0ZwX3NpbXBsZV9wdF9zZXRfdG9faW5mCiAjdW5kZWYgZWNfR0ZwX3NpbXBsZV9wb2ludHNfbWFrZV9hZmZpbmUKLSNkZWZpbmUgZWNfR0ZwX3NpbXBsZV9wb2ludHNfbWFrZV9hZmZpbmUgICAgICAgIGVjX0dGcF9zaW1wbGVfcHRzX21ha2VfYWZmaW5lCisjZGVmaW5lIGVjX0dGcF9zaW1wbGVfcG9pbnRzX21ha2VfYWZmaW5lCWVjX0dGcF9zaW1wbGVfcHRzX21ha2VfYWZmaW5lCiAjdW5kZWYgZWNfR0ZwX3NpbXBsZV9ncm91cF9nZXRfY3VydmVfR0ZwCiAjZGVmaW5lIGVjX0dGcF9zaW1wbGVfZ3JvdXBfZ2V0X2N1cnZlX0dGcCAgICAgICBlY19HRnBfc2ltcGxlX2dycF9nZXRfY3VydmVfR0ZwCiAjdW5kZWYgZWNfR0ZwX3NpbXBsZV9zZXRfSnByb2plY3RpdmVfY29vcmRpbmF0ZXNfR0ZwCkBAIC0zNjcsNiArMzczLDE0IEBACiAjdW5kZWYgU1RPUkVfbWV0aG9kX2dldF91bmxvY2tfc3RvcmVfZnVuY3Rpb24KICNkZWZpbmUgU1RPUkVfbWV0aG9kX2dldF91bmxvY2tfc3RvcmVfZnVuY3Rpb24JU1RPUkVfbWV0aF9nZXRfdW5sb2NrX3N0b3JlX2ZuCiAKKy8qIEhhY2sgc29tZSBsb25nIFRTIG5hbWVzICovCisjdW5kZWYgVFNfUkVTUF9DVFhfc2V0X3N0YXR1c19pbmZvX2NvbmQKKyNkZWZpbmUgVFNfUkVTUF9DVFhfc2V0X3N0YXR1c19pbmZvX2NvbmQJVFNfUkVTUF9DVFhfc2V0X3N0YXRfaW5mb19jb25kCisjdW5kZWYgVFNfUkVTUF9DVFhfc2V0X2Nsb2NrX3ByZWNpc2lvbl9kaWdpdHMKKyNkZWZpbmUgVFNfUkVTUF9DVFhfc2V0X2Nsb2NrX3ByZWNpc2lvbl9kaWdpdHMJVFNfUkVTUF9DVFhfc2V0X2Nsa19wcmVjX2RpZ2l0cworI3VuZGVmIFRTX0NPTkZfc2V0X2Nsb2NrX3ByZWNpc2lvbl9kaWdpdHMKKyNkZWZpbmUgVFNfQ09ORl9zZXRfY2xvY2tfcHJlY2lzaW9uX2RpZ2l0cwlUU19DT05GX3NldF9jbGtfcHJlY19kaWdpdHMKKwogLyogSGFjayBzb21lIGxvbmcgQ01TIG5hbWVzICovCiAjdW5kZWYgQ01TX1JlY2lwaWVudEluZm9fa3RyaV9nZXQwX2FsZ3MKICNkZWZpbmUgQ01TX1JlY2lwaWVudEluZm9fa3RyaV9nZXQwX2FsZ3MJQ01TX1JlY2lwSW5mb19rdHJpX2dldDBfYWxncwpAQCAtMzg4LDIxICs0MDIsMjEgQEAKICNlbmRpZiAvKiBkZWZpbmVkIE9QRU5TU0xfU1lTX1ZNUyAqLwogCiAKLS8qIENhc2UgaW5zZW5zaXRldmUgbGlua2luZyBjYXVzZXMgcHJvYmxlbXMuLi4uICovCi0jaWYgZGVmaW5lZChPUEVOU1NMX1NZU19XSU4xNikgfHwgZGVmaW5lZChPUEVOU1NMX1NZU19WTVMpIHx8IGRlZmluZWQoT1BFTlNTTF9TWVNfT1MyKQorLyogQ2FzZSBpbnNlbnNpdGl2ZSBsaW5raW5nIGNhdXNlcyBwcm9ibGVtcy4uLi4gKi8KKyNpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX1ZNUykgfHwgZGVmaW5lZChPUEVOU1NMX1NZU19PUzIpCiAjdW5kZWYgRVJSX2xvYWRfQ1JZUFRPX3N0cmluZ3MKICNkZWZpbmUgRVJSX2xvYWRfQ1JZUFRPX3N0cmluZ3MJCQlFUlJfbG9hZF9DUllQVE9saWJfc3RyaW5ncwogI3VuZGVmIE9DU1BfY3JsSURfbmV3Ci0jZGVmaW5lIE9DU1BfY3JsSURfbmV3ICAgICAgICAgICAgICAgICAgICAgICAgICBPQ1NQX2NybElEMl9uZXcKKyNkZWZpbmUgT0NTUF9jcmxJRF9uZXcJCQkJT0NTUF9jcmxJRDJfbmV3CiAKICN1bmRlZiBkMmlfRUNQQVJBTUVURVJTCi0jZGVmaW5lIGQyaV9FQ1BBUkFNRVRFUlMgICAgICAgICAgICAgICAgICAgICAgICBkMmlfVUNfRUNQQVJBTUVURVJTCisjZGVmaW5lIGQyaV9FQ1BBUkFNRVRFUlMJCQlkMmlfVUNfRUNQQVJBTUVURVJTCiAjdW5kZWYgaTJkX0VDUEFSQU1FVEVSUwotI2RlZmluZSBpMmRfRUNQQVJBTUVURVJTICAgICAgICAgICAgICAgICAgICAgICAgaTJkX1VDX0VDUEFSQU1FVEVSUworI2RlZmluZSBpMmRfRUNQQVJBTUVURVJTCQkJaTJkX1VDX0VDUEFSQU1FVEVSUwogI3VuZGVmIGQyaV9FQ1BLUEFSQU1FVEVSUwotI2RlZmluZSBkMmlfRUNQS1BBUkFNRVRFUlMgICAgICAgICAgICAgICAgICAgICAgZDJpX1VDX0VDUEtQQVJBTUVURVJTCisjZGVmaW5lIGQyaV9FQ1BLUEFSQU1FVEVSUwkJCWQyaV9VQ19FQ1BLUEFSQU1FVEVSUwogI3VuZGVmIGkyZF9FQ1BLUEFSQU1FVEVSUwotI2RlZmluZSBpMmRfRUNQS1BBUkFNRVRFUlMgICAgICAgICAgICAgICAgICAgICAgaTJkX1VDX0VDUEtQQVJBTUVURVJTCisjZGVmaW5lIGkyZF9FQ1BLUEFSQU1FVEVSUwkJCWkyZF9VQ19FQ1BLUEFSQU1FVEVSUwogCiAvKiBUaGVzZSBmdW5jdGlvbnMgZG8gbm90IHNlZW0gdG8gZXhpc3QhICBIb3dldmVyLCBJJ20gcGFyYW5vaWQuLi4KICAgIE9yaWdpbmFsIGNvbW1hbmQgaW4geDUwOXYzLmg6CkBAIC00MTEsMTkgKzQyNSwxOSBAQAogICAgaGlkZSB0aGVtIGEgbGl0dGxlLCBieSBnaXZpbmcgdGhlbSBhbiBleHRyYSAnbycgYXQgdGhlCiAgICBiZWdpbm5pbmcgb2YgdGhlIG5hbWUuLi4gKi8KICN1bmRlZiBYNTA5djNfY2xlYW51cF9leHRlbnNpb25zCi0jZGVmaW5lIFg1MDl2M19jbGVhbnVwX2V4dGVuc2lvbnMgICAgICAgICAgICAgICBvWDUwOXYzX2NsZWFudXBfZXh0ZW5zaW9ucworI2RlZmluZSBYNTA5djNfY2xlYW51cF9leHRlbnNpb25zCQlvWDUwOXYzX2NsZWFudXBfZXh0ZW5zaW9ucwogI3VuZGVmIFg1MDl2M19hZGRfZXh0ZW5zaW9uCi0jZGVmaW5lIFg1MDl2M19hZGRfZXh0ZW5zaW9uICAgICAgICAgICAgICAgICAgICBvWDUwOXYzX2FkZF9leHRlbnNpb24KKyNkZWZpbmUgWDUwOXYzX2FkZF9leHRlbnNpb24JCQlvWDUwOXYzX2FkZF9leHRlbnNpb24KICN1bmRlZiBYNTA5djNfYWRkX25ldHNjYXBlX2V4dGVuc2lvbnMKLSNkZWZpbmUgWDUwOXYzX2FkZF9uZXRzY2FwZV9leHRlbnNpb25zICAgICAgICAgIG9YNTA5djNfYWRkX25ldHNjYXBlX2V4dGVuc2lvbnMKKyNkZWZpbmUgWDUwOXYzX2FkZF9uZXRzY2FwZV9leHRlbnNpb25zCQlvWDUwOXYzX2FkZF9uZXRzY2FwZV9leHRlbnNpb25zCiAjdW5kZWYgWDUwOXYzX2FkZF9zdGFuZGFyZF9leHRlbnNpb25zCi0jZGVmaW5lIFg1MDl2M19hZGRfc3RhbmRhcmRfZXh0ZW5zaW9ucyAgICAgICAgICBvWDUwOXYzX2FkZF9zdGFuZGFyZF9leHRlbnNpb25zCisjZGVmaW5lIFg1MDl2M19hZGRfc3RhbmRhcmRfZXh0ZW5zaW9ucwkJb1g1MDl2M19hZGRfc3RhbmRhcmRfZXh0ZW5zaW9ucwogCisvKiBUaGlzIG9uZSBjbGFzaGVzIHdpdGggQ01TX2RhdGFfY3JlYXRlICovCisjdW5kZWYgY21zX0RhdGFfY3JlYXRlCisjZGVmaW5lIGNtc19EYXRhX2NyZWF0ZQkJCQlwcml2X2Ntc19EYXRhX2NyZWF0ZQogCiAjZW5kaWYKIAogCiAjZW5kaWYgLyogISBkZWZpbmVkIEhFQURFUl9WTVNfSURIQUNLU19IICovCi0vKiBUaGlzIG9uZSBjbGFzaGVzIHdpdGggQ01TX2RhdGFfY3JlYXRlICovCi0jdW5kZWYgY21zX0RhdGFfY3JlYXRlCi0jZGVmaW5lIGNtc19EYXRhX2NyZWF0ZQkJCQlwcml2X2Ntc19EYXRhX2NyZWF0ZQpkaWZmIC0tZ2l0IGEvY3J5cHRvL3RocmVhZHMvbXR0ZXN0LmMgYi9jcnlwdG8vdGhyZWFkcy9tdHRlc3QuYwppbmRleCBmNmYzZGY0Li5lYmE3YWE4IDEwMDY0NAotLS0gYS9jcnlwdG8vdGhyZWFkcy9tdHRlc3QuYworKysgYi9jcnlwdG8vdGhyZWFkcy9tdHRlc3QuYwpAQCAtMTE3LDExICsxMTcsMTMgQEAKIHZvaWQgd2luMzJfbG9ja2luZ19jYWxsYmFjayhpbnQgbW9kZSxpbnQgdHlwZSxjaGFyICpmaWxlLGludCBsaW5lKTsKIHZvaWQgcHRocmVhZHNfbG9ja2luZ19jYWxsYmFjayhpbnQgbW9kZSxpbnQgdHlwZSxjaGFyICpmaWxlLGludCBsaW5lKTsKIHZvaWQgbmV0d2FyZV9sb2NraW5nX2NhbGxiYWNrKGludCBtb2RlLGludCB0eXBlLGNoYXIgKmZpbGUsaW50IGxpbmUpOwordm9pZCBiZW9zX2xvY2tpbmdfY2FsbGJhY2soaW50IG1vZGUsaW50IHR5cGUsY29uc3QgY2hhciAqZmlsZSxpbnQgbGluZSk7CiAKIHVuc2lnbmVkIGxvbmcgaXJpeF90aHJlYWRfaWQodm9pZCApOwogdW5zaWduZWQgbG9uZyBzb2xhcmlzX3RocmVhZF9pZCh2b2lkICk7CiB1bnNpZ25lZCBsb25nIHB0aHJlYWRzX3RocmVhZF9pZCh2b2lkICk7CiB1bnNpZ25lZCBsb25nIG5ldHdhcmVfdGhyZWFkX2lkKHZvaWQgKTsKK3Vuc2lnbmVkIGxvbmcgYmVvc190aHJlYWRfaWQodm9pZCApOwogCiAjaWYgZGVmaW5lZChPUEVOU1NMX1NZU19ORVRXQVJFKQogc3RhdGljIE1QS011dGV4ICpsb2NrX2NzOwpAQCAtMTIwOSwzICsxMjExLDEwMCBAQAogICAgcmV0dXJuKHJldCk7CiB9CiAjZW5kaWYgLyogTkVUV0FSRSAqLworCisjaWZkZWYgQkVPU19USFJFQURTCisKKyNpbmNsdWRlIDxMb2NrZXIuaD4KKworc3RhdGljIEJMb2NrZXIqKiBsb2NrX2NzOworc3RhdGljIGxvbmcqIGxvY2tfY291bnQ7CisKK3ZvaWQgdGhyZWFkX3NldHVwKHZvaWQpCisJeworCWludCBpOworCisJbG9ja19jcz0oQkxvY2tlcioqKU9QRU5TU0xfbWFsbG9jKENSWVBUT19udW1fbG9ja3MoKSAqIHNpemVvZihCTG9ja2VyKikpOworCWxvY2tfY291bnQ9KGxvbmcqKU9QRU5TU0xfbWFsbG9jKENSWVBUT19udW1fbG9ja3MoKSAqIHNpemVvZihsb25nKSk7CisJZm9yIChpPTA7IGk8Q1JZUFRPX251bV9sb2NrcygpOyBpKyspCisJCXsKKwkJbG9ja19jb3VudFtpXT0wOworCQlsb2NrX2NzW2ldID0gbmV3IEJMb2NrZXIoQ1JZUFRPX2dldF9sb2NrX25hbWUoaSkpOworCQl9CisKKwlDUllQVE9fc2V0X2lkX2NhbGxiYWNrKCh1bnNpZ25lZCBsb25nICgqKSgpKWJlb3NfdGhyZWFkX2lkKTsKKwlDUllQVE9fc2V0X2xvY2tpbmdfY2FsbGJhY2soYmVvc19sb2NraW5nX2NhbGxiYWNrKTsKKwl9CisKK3ZvaWQgdGhyZWFkX2NsZWFudXAodm9pZCkKKwl7CisJaW50IGk7CisKKwlDUllQVE9fc2V0X2xvY2tpbmdfY2FsbGJhY2soTlVMTCk7CisJZnByaW50ZihzdGRlcnIsImNsZWFudXBcbiIpOworCWZvciAoaT0wOyBpPENSWVBUT19udW1fbG9ja3MoKTsgaSsrKQorCQl7CisJCWRlbGV0ZSBsb2NrX2NzW2ldOworCQlmcHJpbnRmKHN0ZGVyciwiJThsZDolc1xuIixsb2NrX2NvdW50W2ldLAorCQkJQ1JZUFRPX2dldF9sb2NrX25hbWUoaSkpOworCQl9CisJT1BFTlNTTF9mcmVlKGxvY2tfY3MpOworCU9QRU5TU0xfZnJlZShsb2NrX2NvdW50KTsKKworCWZwcmludGYoc3RkZXJyLCJkb25lIGNsZWFudXBcbiIpOworCX0KKwordm9pZCBiZW9zX2xvY2tpbmdfY2FsbGJhY2soaW50IG1vZGUsIGludCB0eXBlLCBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSkKKyAgICB7CisjaWYgMAorCWZwcmludGYoc3RkZXJyLCJ0aHJlYWQ9JTRkIG1vZGU9JXMgbG9jaz0lcyAlczolZFxuIiwKKwkJQ1JZUFRPX3RocmVhZF9pZCgpLAorCQkobW9kZSZDUllQVE9fTE9DSyk/ImwiOiJ1IiwKKwkJKHR5cGUmQ1JZUFRPX1JFQUQpPyJyIjoidyIsZmlsZSxsaW5lKTsKKyNlbmRpZgorCWlmIChtb2RlICYgQ1JZUFRPX0xPQ0spCisJCXsKKwkJbG9ja19jc1t0eXBlXS0+TG9jaygpOworCQlsb2NrX2NvdW50W3R5cGVdKys7CisJCX0KKwllbHNlCisJCXsKKwkJbG9ja19jc1t0eXBlXS0+VW5sb2NrKCk7CisJCX0KKwl9CisKK3ZvaWQgZG9fdGhyZWFkcyhTU0xfQ1RYICpzX2N0eCwgU1NMX0NUWCAqY19jdHgpCisJeworCVNTTF9DVFggKnNzbF9jdHhbMl07CisJdGhyZWFkX2lkIHRocmVhZF9jdHhbTUFYX1RIUkVBRF9OVU1CRVJdOworCWludCBpOworCisJc3NsX2N0eFswXT1zX2N0eDsKKwlzc2xfY3R4WzFdPWNfY3R4OworCisJZm9yIChpPTA7IGk8dGhyZWFkX251bWJlcjsgaSsrKQorCQl7CisJCXRocmVhZF9jdHhbaV0gPSBzcGF3bl90aHJlYWQoKHRocmVhZF9mdW5jKW5kb2l0LAorCQkJTlVMTCwgQl9OT1JNQUxfUFJJT1JJVFksICh2b2lkICopc3NsX2N0eCk7CisJCXJlc3VtZV90aHJlYWQodGhyZWFkX2N0eFtpXSk7CisJCX0KKworCXByaW50Zigid2FpdGluZy4uLlxuIik7CisJZm9yIChpPTA7IGk8dGhyZWFkX251bWJlcjsgaSsrKQorCQl7CisJCXN0YXR1c190IHJlc3VsdDsKKwkJd2FpdF9mb3JfdGhyZWFkKHRocmVhZF9jdHhbaV0sICZyZXN1bHQpOworCQl9CisKKwlwcmludGYoImJlb3MgdGhyZWFkcyBkb25lICglZCwlZClcbiIsCisJCXNfY3R4LT5yZWZlcmVuY2VzLGNfY3R4LT5yZWZlcmVuY2VzKTsKKwl9CisKK3Vuc2lnbmVkIGxvbmcgYmVvc190aHJlYWRfaWQodm9pZCkKKwl7CisJdW5zaWduZWQgbG9uZyByZXQ7CisKKwlyZXQ9KHVuc2lnbmVkIGxvbmcpZmluZF90aHJlYWQoTlVMTCk7CisJcmV0dXJuKHJldCk7CisJfQorCisjZW5kaWYgLyogQkVPU19USFJFQURTICovCmRpZmYgLS1naXQgYS9jcnlwdG8vdG1kaWZmLmMgYi9jcnlwdG8vdG1kaWZmLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjNmUwNTIuLjAwMDAwMDAKLS0tIGEvY3J5cHRvL3RtZGlmZi5jCisrKyAvZGV2L251bGwKQEAgLTEsMjYwICswLDAgQEAKLS8qIGNyeXB0by90bWRpZmYuYyAqLwotLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgotICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgotICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgotICogCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKLSAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKLSAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgotICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcwotICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0gKiAKLSAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCi0gKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCi0gKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCi0gKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgotICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCi0gKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5Ci0gKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgotICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5Ci0gKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KLSAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAotICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKLSAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqIAotICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKLSAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQotICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQotICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KLSAqLwotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSAiY3J5cHRsaWIuaCIKLSNpbmNsdWRlIDxvcGVuc3NsL3RtZGlmZi5oPgotI2lmICFkZWZpbmVkKE9QRU5TU0xfU1lTX01TRE9TKQotI2luY2x1ZGUgT1BFTlNTTF9VTklTVEQKLSNlbmRpZgotCi0jaWZkZWYgVElNRUIKLSN1bmRlZiBPUEVOU1NMX1NZU19XSU4zMgotI3VuZGVmIFRJTUVTCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKE9QRU5TU0xfU1lTX01TRE9TKSAmJiAhZGVmaW5lZChPUEVOU1NMX1NZU19XSU4zMikgJiYgIShkZWZpbmVkKE9QRU5TU0xfU1lTX1ZNUykgfHwgZGVmaW5lZChfX0RFQ0MpKSAmJiAhZGVmaW5lZChPUEVOU1NMX1NZU19NQUNPU1hfUkhBUFNPRFkpICYmICFkZWZpbmVkKE9QRU5TU0xfU1lTX1ZYV09SS1MpCi0jIGRlZmluZSBUSU1FUwotI2VuZGlmCi0KLSNpZmRlZiBPUEVOU1NMX1NZU19ORVRXQVJFCi0jdW5kZWYgVElNRVMKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoX0lSSVgpIHx8IGRlZmluZWQgKE9QRU5TU0xfU1lTX05FVFdBUkUpCi0jICBpbmNsdWRlIDx0aW1lLmg+Ci0jZW5kaWYKLSNpZmRlZiBUSU1FUwotIyAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jICBpbmNsdWRlIDxzeXMvdGltZXMuaD4KLSNlbmRpZgotCi0vKiBEZXBlbmRpbmcgb24gdGhlIFZNUyB2ZXJzaW9uLCB0aGUgdG1zIHN0cnVjdHVyZSBpcyBwZXJoYXBzIGRlZmluZWQuCi0gICBUaGUgX19UTVMgbWFjcm8gd2lsbCBzaG93IGlmIGl0IHdhcy4gIElmIGl0IHdhc24ndCBkZWZpbmVkLCB3ZSBzaG91bGQKLSAgIHVuZGVmaW5lIFRJTUVTLCBzaW5jZSB0aGF0IHRlbGxzIHRoZSByZXN0IG9mIHRoZSBwcm9ncmFtIGhvdyB0aGluZ3MKLSAgIHNob3VsZCBiZSBoYW5kbGVkLgkJCQktLSBSaWNoYXJkIExldml0dGUgKi8KLSNpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX1ZNU19ERUNDKSAmJiAhZGVmaW5lZChfX1RNUykKLSN1bmRlZiBUSU1FUwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKHN1bikgfHwgZGVmaW5lZChfX3VsdHJpeCkKLSNkZWZpbmUgX1BPU0lYX1NPVVJDRQotI2luY2x1ZGUgPGxpbWl0cy5oPgotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChUSU1FUykgJiYgIWRlZmluZWQoT1BFTlNTTF9TWVNfVlhXT1JLUykgJiYgIWRlZmluZWQoT1BFTlNTTF9TWVNfTkVUV0FSRSkKLSNpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSNlbmRpZgotCi0jaWZkZWYgT1BFTlNTTF9TWVNfV0lOMzIKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jZW5kaWYKLQotLyogVGhlIGZvbGxvd2luZyBpZiBmcm9tIHRpbWVzKDMpIG1hbiBwYWdlLiAgSXQgbWF5IG5lZWQgdG8gYmUgY2hhbmdlZCAqLwotI2lmbmRlZiBIWgotIyBpZiBkZWZpbmVkKF9TQ19DTEtfVENLKSBcCi0gICAgICYmICghZGVmaW5lZChPUEVOU1NMX1NZU19WTVMpIHx8IF9fQ1RSTF9WRVIgPj0gNzAwMDAwMDApCi0vKiAjICBkZWZpbmUgSFogKChkb3VibGUpc3lzY29uZihfU0NfQ0xLX1RDSykpICovCi0jICBkZWZpbmUgSFogc3lzY29uZihfU0NfQ0xLX1RDSykKLSMgZWxzZQotIyAgaWZuZGVmIENMS19UQ0sKLSMgICBpZm5kZWYgX0JTRF9DTEtfVENLXyAvKiBGcmVlQlNEIGhhY2sgKi8KLSMgICAgZGVmaW5lIEhaICAxMDAuMAotIyAgIGVsc2UgLyogX0JTRF9DTEtfVENLXyAqLwotIyAgICBkZWZpbmUgSFogKChkb3VibGUpX0JTRF9DTEtfVENLXykKLSMgICBlbmRpZgotIyAgZWxzZSAvKiBDTEtfVENLICovCi0jICAgZGVmaW5lIEhaICgoZG91YmxlKUNMS19UQ0spCi0jICBlbmRpZgotIyBlbmRpZgotI2VuZGlmCi0KLXN0cnVjdCBtc190bQotCXsKLSNpZmRlZiBUSU1FUwotCXN0cnVjdCB0bXMgbXNfdG1zOwotI2Vsc2UKLSMgIGlmZGVmIE9QRU5TU0xfU1lTX1dJTjMyCi0JSEFORExFIHRocmVhZF9pZDsKLQlGSUxFVElNRSBtc193aW4zMjsKLSMgIGVsaWYgZGVmaW5lZCAoT1BFTlNTTF9TWVNfTkVUV0FSRSkKLSAgIGNsb2NrX3QgbXNfY2xvY2s7Ci0jICBlbHNlCi0jICAgIGlmZGVmIE9QRU5TU0xfU1lTX1ZYV09SS1MKLSAgICAgICAgICB1bnNpZ25lZCBsb25nIHRpY2tzOwotIyAgICBlbHNlCi0Jc3RydWN0IHRpbWViIG1zX3RpbWViOwotIyAgICBlbmRpZgotIyAgZW5kaWYKLSNlbmRpZgotCX07Ci0KLU1TX1RNICptc190aW1lX25ldyh2b2lkKQotCXsKLQlNU19UTSAqcmV0OwotCi0JcmV0PShNU19UTSAqKU9QRU5TU0xfbWFsbG9jKHNpemVvZihNU19UTSkpOwotCWlmIChyZXQgPT0gTlVMTCkKLQkJcmV0dXJuKE5VTEwpOwotCW1lbXNldChyZXQsMCxzaXplb2YoTVNfVE0pKTsKLSNpZmRlZiBPUEVOU1NMX1NZU19XSU4zMgotCXJldC0+dGhyZWFkX2lkPUdldEN1cnJlbnRUaHJlYWQoKTsKLSNlbmRpZgotCXJldHVybiByZXQ7Ci0JfQotCi12b2lkIG1zX3RpbWVfZnJlZShNU19UTSAqYSkKLQl7Ci0JaWYgKGEgIT0gTlVMTCkKLQkJT1BFTlNTTF9mcmVlKGEpOwotCX0KLQotdm9pZCBtc190aW1lX2dldChNU19UTSAqdG0pCi0JewotI2lmZGVmIE9QRU5TU0xfU1lTX1dJTjMyCi0JRklMRVRJTUUgdG1wYSx0bXBiLHRtcGM7Ci0jZW5kaWYKLQotI2lmZGVmIFRJTUVTCi0JdGltZXMoJnRtLT5tc190bXMpOwotI2Vsc2UKLSMgIGlmZGVmIE9QRU5TU0xfU1lTX1dJTjMyCi0JR2V0VGhyZWFkVGltZXModG0tPnRocmVhZF9pZCwmdG1wYSwmdG1wYiwmdG1wYywmKHRtLT5tc193aW4zMikpOwotIyAgZWxpZiBkZWZpbmVkIChPUEVOU1NMX1NZU19ORVRXQVJFKQotICAgdG0tPm1zX2Nsb2NrID0gY2xvY2soKTsKLSMgIGVsc2UKLSMgICAgaWZkZWYgT1BFTlNTTF9TWVNfVlhXT1JLUwotICAgICAgICB0bS0+dGlja3MgPSB0aWNrR2V0KCk7Ci0jICAgIGVsc2UKLQlmdGltZSgmdG0tPm1zX3RpbWViKTsKLSMgICAgZW5kaWYKLSMgIGVuZGlmCi0jZW5kaWYKLQl9Ci0KLWRvdWJsZSBtc190aW1lX2RpZmYoTVNfVE0gKmEsIE1TX1RNICpiKQotCXsKLQlkb3VibGUgcmV0OwotCi0jaWZkZWYgVElNRVMKLQlyZXQgPSBIWjsKLQlyZXQgPSAoYi0+bXNfdG1zLnRtc191dGltZS1hLT5tc190bXMudG1zX3V0aW1lKSAvIHJldDsKLSNlbHNlCi0jIGlmZGVmIE9QRU5TU0xfU1lTX1dJTjMyCi0JewotI2lmZGVmIF9fR05VQ19fCi0Jc2lnbmVkIGxvbmcgbG9uZyBsYSxsYjsKLSNlbHNlCi0Jc2lnbmVkIF9pbnQ2NCBsYSxsYjsKLSNlbmRpZgotCWxhPWEtPm1zX3dpbjMyLmR3SGlnaERhdGVUaW1lOwotCWxiPWItPm1zX3dpbjMyLmR3SGlnaERhdGVUaW1lOwotCWxhPDw9MzI7Ci0JbGI8PD0zMjsKLQlsYSs9YS0+bXNfd2luMzIuZHdMb3dEYXRlVGltZTsKLQlsYis9Yi0+bXNfd2luMzIuZHdMb3dEYXRlVGltZTsKLQlyZXQ9KChkb3VibGUpKGxiLWxhKSkvMWU3OwotCX0KLSMgZWxpZiBkZWZpbmVkIChPUEVOU1NMX1NZU19ORVRXQVJFKQotICAgIHJldD0gKGRvdWJsZSkoYi0+bXNfY2xvY2sgLSBhLT5tc19jbG9jayk7Ci0jIGVsc2UKLSMgIGlmZGVmIE9QRU5TU0xfU1lTX1ZYV09SS1MKLSAgICAgICAgcmV0ID0gKGRvdWJsZSkoYi0+dGlja3MgLSBhLT50aWNrcykgLyAoZG91YmxlKXN5c0Nsa1JhdGVHZXQoKTsKLSMgIGVsc2UKLQlyZXQ9CSAoZG91YmxlKShiLT5tc190aW1lYi50aW1lLWEtPm1zX3RpbWViLnRpbWUpKwotCQkoKChkb3VibGUpYi0+bXNfdGltZWIubWlsbGl0bSktCi0JCSgoZG91YmxlKWEtPm1zX3RpbWViLm1pbGxpdG0pKS8xMDAwLjA7Ci0jICBlbmRpZgotIyBlbmRpZgotI2VuZGlmCi0JcmV0dXJuKChyZXQgPCAwLjAwMDAwMDEpPzAuMDAwMDAwMTpyZXQpOwotCX0KLQotaW50IG1zX3RpbWVfY21wKGNvbnN0IE1TX1RNICphLCBjb25zdCBNU19UTSAqYikKLQl7Ci0JZG91YmxlIGQ7Ci0JaW50IHJldDsKLQotI2lmZGVmIFRJTUVTCi0JZCA9IEhaOwotCWQgPSAoYi0+bXNfdG1zLnRtc191dGltZS1hLT5tc190bXMudG1zX3V0aW1lKSAvIGQ7Ci0jZWxzZQotIyBpZmRlZiBPUEVOU1NMX1NZU19XSU4zMgotCWQgPShiLT5tc193aW4zMi5kd0hpZ2hEYXRlVGltZSYweDAwMGZmZmZmKSoxMCtiLT5tc193aW4zMi5kd0xvd0RhdGVUaW1lLzFlNzsKLQlkLT0oYS0+bXNfd2luMzIuZHdIaWdoRGF0ZVRpbWUmMHgwMDBmZmZmZikqMTArYS0+bXNfd2luMzIuZHdMb3dEYXRlVGltZS8xZTc7Ci0jIGVsaWYgZGVmaW5lZCAoT1BFTlNTTF9TWVNfTkVUV0FSRSkKLSAgICBkPSAoZG91YmxlKShiLT5tc19jbG9jayAtIGEtPm1zX2Nsb2NrKTsKLSMgZWxzZQotIyAgaWZkZWYgT1BFTlNTTF9TWVNfVlhXT1JLUwotICAgICAgICBkID0gKGItPnRpY2tzIC0gYS0+dGlja3MpOwotIyAgZWxzZQotCWQ9CSAoZG91YmxlKShiLT5tc190aW1lYi50aW1lLWEtPm1zX3RpbWViLnRpbWUpKwotCQkoKChkb3VibGUpYi0+bXNfdGltZWIubWlsbGl0bSktKGRvdWJsZSlhLT5tc190aW1lYi5taWxsaXRtKS8xMDAwLjA7Ci0jICBlbmRpZgotIyBlbmRpZgotI2VuZGlmCi0JaWYgKGQgPT0gMC4wKQotCQlyZXQ9MDsKLQllbHNlIGlmIChkIDwgMCkKLQkJcmV0PSAtMTsKLQllbHNlCi0JCXJldD0xOwotCXJldHVybihyZXQpOwotCX0KLQpkaWZmIC0tZ2l0IGEvY3J5cHRvL3RtZGlmZi5oIGIvY3J5cHRvL3RtZGlmZi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjVjNDFjLi4wMDAwMDAwCi0tLSBhL2NyeXB0by90bWRpZmYuaAorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qIGNyeXB0by90bWRpZmYuaCAqLwotLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgotICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgotICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgotICogCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKLSAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKLSAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgotICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcwotICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0gKiAKLSAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCi0gKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCi0gKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCi0gKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgotICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCi0gKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5Ci0gKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgotICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5Ci0gKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KLSAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAotICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKLSAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqIAotICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKLSAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQotICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQotICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KLSAqLwotCi0vKiBIZWFkZXIgZm9yIGR5bmFtaWMgaGFzaCB0YWJsZSByb3V0aW5lcwotICogQXV0aG9yIC0gRXJpYyBZb3VuZwotICovCi0vKiAuLi4gZXJtIHllYWgsICJkeW5hbWljIGhhc2ggdGFibGVzIiB5b3Ugc2F5PwotICogCi0gKiBBbmQgd2hhdCB3b3VsZCBkeW5hbWljIGhhc2ggdGFibGVzIGhhdmUgdG8gZG8gd2l0aCBhbnkgb2YgdGhpcyBjb2RlICpub3cqPwotICogQUZBSUNTLCB0aGlzIGNvZGUgaXMgb25seSByZWZlcmVuY2VkIGJ5IGNyeXB0by9ibi9leHAuYyB3aGljaCBpcyBhbiB1bnVzZWQKLSAqIGZpbGUgdGhhdCBJIGRvdWJ0IGNvbXBpbGVzIGFueSBtb3JlLiBzcGVlZC5jIGlzIHRoZSBvbmx5IHRoaW5nIHRoYXQgY291bGQKLSAqIHVzZSB0aGlzIChhbmQgaXQgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCBoYXNoIHRhYmxlcyksIHlldCBpdCBpbnN0ZWFkIGhhcyBpdHMKLSAqIG93biBkdXBsaWNhdGlvbiBvZiBhbGwgdGhpcyBzdHVmZiBhbmQgbG9va3MsIGlmIGFueXRoaW5nLCBtb3JlIGNvbXBsZXRlLiBTZWUKLSAqIHRoZSBjb3JyZXNwb25kaW5nIG5vdGUgaW4gYXBwcy9zcGVlZC5jLgotICogVGhlIEJlbXVzZWQgLSBHZW9mZgotICovCi0KLSNpZm5kZWYgSEVBREVSX1RNRElGRl9ICi0jZGVmaW5lIEhFQURFUl9UTURJRkZfSAotCi0jaWZkZWYgIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi10eXBlZGVmIHN0cnVjdCBtc190bSBNU19UTTsKLQotTVNfVE0gKm1zX3RpbWVfbmV3KHZvaWQgKTsKLXZvaWQgbXNfdGltZV9mcmVlKE1TX1RNICphKTsKLXZvaWQgbXNfdGltZV9nZXQoTVNfVE0gKmEpOwotZG91YmxlIG1zX3RpbWVfZGlmZihNU19UTSAqc3RhcnQsIE1TX1RNICplbmQpOwotaW50IG1zX3RpbWVfY21wKGNvbnN0IE1TX1RNICphcCwgY29uc3QgTVNfVE0gKmJwKTsKLQotI2lmZGVmICBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLSNlbmRpZgotCmRpZmYgLS1naXQgYS9jcnlwdG8vdHMvdHNfZXJyLmMgYi9jcnlwdG8vdHMvdHNfZXJyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA4YjBmZgotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by90cy90c19lcnIuYwpAQCAtMCwwICsxLDE3OSBAQAorLyogY3J5cHRvL3RzL3RzX2Vyci5jICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDcgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisgKgorICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorICogICAgb3BlbnNzbC1jb3JlQE9wZW5TU0wub3JnLgorICoKKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorICoKKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKyAqICAgIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCisgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAqCisgKi8KKworLyogTk9URTogdGhpcyBmaWxlIHdhcyBhdXRvIGdlbmVyYXRlZCBieSB0aGUgbWtlcnIucGwgc2NyaXB0OiBhbnkgY2hhbmdlcworICogbWFkZSB0byBpdCB3aWxsIGJlIG92ZXJ3cml0dGVuIHdoZW4gdGhlIHNjcmlwdCBuZXh0IHVwZGF0ZXMgdGhpcyBmaWxlLAorICogb25seSByZWFzb24gc3RyaW5ncyB3aWxsIGJlIHByZXNlcnZlZC4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorI2luY2x1ZGUgPG9wZW5zc2wvdHMuaD4KKworLyogQkVHSU4gRVJST1IgQ09ERVMgKi8KKyNpZm5kZWYgT1BFTlNTTF9OT19FUlIKKworI2RlZmluZSBFUlJfRlVOQyhmdW5jKSBFUlJfUEFDSyhFUlJfTElCX1RTLGZ1bmMsMCkKKyNkZWZpbmUgRVJSX1JFQVNPTihyZWFzb24pIEVSUl9QQUNLKEVSUl9MSUJfVFMsMCxyZWFzb24pCisKK3N0YXRpYyBFUlJfU1RSSU5HX0RBVEEgVFNfc3RyX2Z1bmN0c1tdPQorCXsKK3tFUlJfRlVOQyhUU19GX0QySV9UU19SRVNQKSwJImQyaV9UU19SRVNQIn0sCit7RVJSX0ZVTkMoVFNfRl9ERUZfU0VSSUFMX0NCKSwJIkRFRl9TRVJJQUxfQ0IifSwKK3tFUlJfRlVOQyhUU19GX0RFRl9USU1FX0NCKSwJIkRFRl9USU1FX0NCIn0sCit7RVJSX0ZVTkMoVFNfRl9FU1NfQUREX1NJR05JTkdfQ0VSVCksCSJFU1NfQUREX1NJR05JTkdfQ0VSVCJ9LAore0VSUl9GVU5DKFRTX0ZfRVNTX0NFUlRfSURfTkVXX0lOSVQpLAkiRVNTX0NFUlRfSURfTkVXX0lOSVQifSwKK3tFUlJfRlVOQyhUU19GX0VTU19TSUdOSU5HX0NFUlRfTkVXX0lOSVQpLAkiRVNTX1NJR05JTkdfQ0VSVF9ORVdfSU5JVCJ9LAore0VSUl9GVU5DKFRTX0ZfSU5UX1RTX1JFU1BfVkVSSUZZX1RPS0VOKSwJIklOVF9UU19SRVNQX1ZFUklGWV9UT0tFTiJ9LAore0VSUl9GVU5DKFRTX0ZfUEtDUzdfVE9fVFNfVFNUX0lORk8pLAkiUEtDUzdfdG9fVFNfVFNUX0lORk8ifSwKK3tFUlJfRlVOQyhUU19GX1RTX0FDQ1VSQUNZX1NFVF9NSUNST1MpLAkiVFNfQUNDVVJBQ1lfc2V0X21pY3JvcyJ9LAore0VSUl9GVU5DKFRTX0ZfVFNfQUNDVVJBQ1lfU0VUX01JTExJUyksCSJUU19BQ0NVUkFDWV9zZXRfbWlsbGlzIn0sCit7RVJSX0ZVTkMoVFNfRl9UU19BQ0NVUkFDWV9TRVRfU0VDT05EUyksCSJUU19BQ0NVUkFDWV9zZXRfc2Vjb25kcyJ9LAore0VSUl9GVU5DKFRTX0ZfVFNfQ0hFQ0tfSU1QUklOVFMpLAkiVFNfQ0hFQ0tfSU1QUklOVFMifSwKK3tFUlJfRlVOQyhUU19GX1RTX0NIRUNLX05PTkNFUyksCSJUU19DSEVDS19OT05DRVMifSwKK3tFUlJfRlVOQyhUU19GX1RTX0NIRUNLX1BPTElDWSksCSJUU19DSEVDS19QT0xJQ1kifSwKK3tFUlJfRlVOQyhUU19GX1RTX0NIRUNLX1NJR05JTkdfQ0VSVFMpLAkiVFNfQ0hFQ0tfU0lHTklOR19DRVJUUyJ9LAore0VSUl9GVU5DKFRTX0ZfVFNfQ0hFQ0tfU1RBVFVTX0lORk8pLAkiVFNfQ0hFQ0tfU1RBVFVTX0lORk8ifSwKK3tFUlJfRlVOQyhUU19GX1RTX0NPTVBVVEVfSU1QUklOVCksCSJUU19DT01QVVRFX0lNUFJJTlQifSwKK3tFUlJfRlVOQyhUU19GX1RTX0NPTkZfU0VUX0RFRkFVTFRfRU5HSU5FKSwJIlRTX0NPTkZfc2V0X2RlZmF1bHRfZW5naW5lIn0sCit7RVJSX0ZVTkMoVFNfRl9UU19HRVRfU1RBVFVTX1RFWFQpLAkiVFNfR0VUX1NUQVRVU19URVhUIn0sCit7RVJSX0ZVTkMoVFNfRl9UU19NU0dfSU1QUklOVF9TRVRfQUxHTyksCSJUU19NU0dfSU1QUklOVF9zZXRfYWxnbyJ9LAore0VSUl9GVU5DKFRTX0ZfVFNfUkVRX1NFVF9NU0dfSU1QUklOVCksCSJUU19SRVFfc2V0X21zZ19pbXByaW50In0sCit7RVJSX0ZVTkMoVFNfRl9UU19SRVFfU0VUX05PTkNFKSwJIlRTX1JFUV9zZXRfbm9uY2UifSwKK3tFUlJfRlVOQyhUU19GX1RTX1JFUV9TRVRfUE9MSUNZX0lEKSwJIlRTX1JFUV9zZXRfcG9saWN5X2lkIn0sCit7RVJSX0ZVTkMoVFNfRl9UU19SRVNQX0NSRUFURV9SRVNQT05TRSksCSJUU19SRVNQX2NyZWF0ZV9yZXNwb25zZSJ9LAore0VSUl9GVU5DKFRTX0ZfVFNfUkVTUF9DUkVBVEVfVFNUX0lORk8pLAkiVFNfUkVTUF9DUkVBVEVfVFNUX0lORk8ifSwKK3tFUlJfRlVOQyhUU19GX1RTX1JFU1BfQ1RYX0FERF9GQUlMVVJFX0lORk8pLAkiVFNfUkVTUF9DVFhfYWRkX2ZhaWx1cmVfaW5mbyJ9LAore0VSUl9GVU5DKFRTX0ZfVFNfUkVTUF9DVFhfQUREX01EKSwJIlRTX1JFU1BfQ1RYX2FkZF9tZCJ9LAore0VSUl9GVU5DKFRTX0ZfVFNfUkVTUF9DVFhfQUREX1BPTElDWSksCSJUU19SRVNQX0NUWF9hZGRfcG9saWN5In0sCit7RVJSX0ZVTkMoVFNfRl9UU19SRVNQX0NUWF9ORVcpLAkiVFNfUkVTUF9DVFhfbmV3In0sCit7RVJSX0ZVTkMoVFNfRl9UU19SRVNQX0NUWF9TRVRfQUNDVVJBQ1kpLAkiVFNfUkVTUF9DVFhfc2V0X2FjY3VyYWN5In0sCit7RVJSX0ZVTkMoVFNfRl9UU19SRVNQX0NUWF9TRVRfQ0VSVFMpLAkiVFNfUkVTUF9DVFhfc2V0X2NlcnRzIn0sCit7RVJSX0ZVTkMoVFNfRl9UU19SRVNQX0NUWF9TRVRfREVGX1BPTElDWSksCSJUU19SRVNQX0NUWF9zZXRfZGVmX3BvbGljeSJ9LAore0VSUl9GVU5DKFRTX0ZfVFNfUkVTUF9DVFhfU0VUX1NJR05FUl9DRVJUKSwJIlRTX1JFU1BfQ1RYX3NldF9zaWduZXJfY2VydCJ9LAore0VSUl9GVU5DKFRTX0ZfVFNfUkVTUF9DVFhfU0VUX1NUQVRVU19JTkZPKSwJIlRTX1JFU1BfQ1RYX3NldF9zdGF0dXNfaW5mbyJ9LAore0VSUl9GVU5DKFRTX0ZfVFNfUkVTUF9HRVRfUE9MSUNZKSwJIlRTX1JFU1BfR0VUX1BPTElDWSJ9LAore0VSUl9GVU5DKFRTX0ZfVFNfUkVTUF9TRVRfR0VOVElNRV9XSVRIX1BSRUNJU0lPTiksCSJUU19SRVNQX1NFVF9HRU5USU1FX1dJVEhfUFJFQ0lTSU9OIn0sCit7RVJSX0ZVTkMoVFNfRl9UU19SRVNQX1NFVF9TVEFUVVNfSU5GTyksCSJUU19SRVNQX3NldF9zdGF0dXNfaW5mbyJ9LAore0VSUl9GVU5DKFRTX0ZfVFNfUkVTUF9TRVRfVFNUX0lORk8pLAkiVFNfUkVTUF9zZXRfdHN0X2luZm8ifSwKK3tFUlJfRlVOQyhUU19GX1RTX1JFU1BfU0lHTiksCSJUU19SRVNQX1NJR04ifSwKK3tFUlJfRlVOQyhUU19GX1RTX1JFU1BfVkVSSUZZX1NJR05BVFVSRSksCSJUU19SRVNQX3ZlcmlmeV9zaWduYXR1cmUifSwKK3tFUlJfRlVOQyhUU19GX1RTX1JFU1BfVkVSSUZZX1RPS0VOKSwJIlRTX1JFU1BfdmVyaWZ5X3Rva2VuIn0sCit7RVJSX0ZVTkMoVFNfRl9UU19UU1RfSU5GT19TRVRfQUNDVVJBQ1kpLAkiVFNfVFNUX0lORk9fc2V0X2FjY3VyYWN5In0sCit7RVJSX0ZVTkMoVFNfRl9UU19UU1RfSU5GT19TRVRfTVNHX0lNUFJJTlQpLAkiVFNfVFNUX0lORk9fc2V0X21zZ19pbXByaW50In0sCit7RVJSX0ZVTkMoVFNfRl9UU19UU1RfSU5GT19TRVRfTk9OQ0UpLAkiVFNfVFNUX0lORk9fc2V0X25vbmNlIn0sCit7RVJSX0ZVTkMoVFNfRl9UU19UU1RfSU5GT19TRVRfUE9MSUNZX0lEKSwJIlRTX1RTVF9JTkZPX3NldF9wb2xpY3lfaWQifSwKK3tFUlJfRlVOQyhUU19GX1RTX1RTVF9JTkZPX1NFVF9TRVJJQUwpLAkiVFNfVFNUX0lORk9fc2V0X3NlcmlhbCJ9LAore0VSUl9GVU5DKFRTX0ZfVFNfVFNUX0lORk9fU0VUX1RJTUUpLAkiVFNfVFNUX0lORk9fc2V0X3RpbWUifSwKK3tFUlJfRlVOQyhUU19GX1RTX1RTVF9JTkZPX1NFVF9UU0EpLAkiVFNfVFNUX0lORk9fc2V0X3RzYSJ9LAore0VSUl9GVU5DKFRTX0ZfVFNfVkVSSUZZKSwJIlRTX1ZFUklGWSJ9LAore0VSUl9GVU5DKFRTX0ZfVFNfVkVSSUZZX0NFUlQpLAkiVFNfVkVSSUZZX0NFUlQifSwKK3tFUlJfRlVOQyhUU19GX1RTX1ZFUklGWV9DVFhfTkVXKSwJIlRTX1ZFUklGWV9DVFhfbmV3In0sCit7MCxOVUxMfQorCX07CisKK3N0YXRpYyBFUlJfU1RSSU5HX0RBVEEgVFNfc3RyX3JlYXNvbnNbXT0KKwl7Cit7RVJSX1JFQVNPTihUU19SX0JBRF9QS0NTN19UWVBFKSAgICAgICAgICwiYmFkIHBrY3M3IHR5cGUifSwKK3tFUlJfUkVBU09OKFRTX1JfQkFEX1RZUEUpICAgICAgICAgICAgICAgLCJiYWQgdHlwZSJ9LAore0VSUl9SRUFTT04oVFNfUl9DRVJUSUZJQ0FURV9WRVJJRllfRVJST1IpLCJjZXJ0aWZpY2F0ZSB2ZXJpZnkgZXJyb3IifSwKK3tFUlJfUkVBU09OKFRTX1JfQ09VTERfTk9UX1NFVF9FTkdJTkUpICAgLCJjb3VsZCBub3Qgc2V0IGVuZ2luZSJ9LAore0VSUl9SRUFTT04oVFNfUl9DT1VMRF9OT1RfU0VUX1RJTUUpICAgICAsImNvdWxkIG5vdCBzZXQgdGltZSJ9LAore0VSUl9SRUFTT04oVFNfUl9EMklfVFNfUkVTUF9JTlRfRkFJTEVEKSAsImQyaSB0cyByZXNwIGludCBmYWlsZWQifSwKK3tFUlJfUkVBU09OKFRTX1JfREVUQUNIRURfQ09OVEVOVCkgICAgICAgLCJkZXRhY2hlZCBjb250ZW50In0sCit7RVJSX1JFQVNPTihUU19SX0VTU19BRERfU0lHTklOR19DRVJUX0VSUk9SKSwiZXNzIGFkZCBzaWduaW5nIGNlcnQgZXJyb3IifSwKK3tFUlJfUkVBU09OKFRTX1JfRVNTX1NJR05JTkdfQ0VSVElGSUNBVEVfRVJST1IpLCJlc3Mgc2lnbmluZyBjZXJ0aWZpY2F0ZSBlcnJvciJ9LAore0VSUl9SRUFTT04oVFNfUl9JTlZBTElEX05VTExfUE9JTlRFUikgICAsImludmFsaWQgbnVsbCBwb2ludGVyIn0sCit7RVJSX1JFQVNPTihUU19SX0lOVkFMSURfU0lHTkVSX0NFUlRJRklDQVRFX1BVUlBPU0UpLCJpbnZhbGlkIHNpZ25lciBjZXJ0aWZpY2F0ZSBwdXJwb3NlIn0sCit7RVJSX1JFQVNPTihUU19SX01FU1NBR0VfSU1QUklOVF9NSVNNQVRDSCksIm1lc3NhZ2UgaW1wcmludCBtaXNtYXRjaCJ9LAore0VSUl9SRUFTT04oVFNfUl9OT05DRV9NSVNNQVRDSCkgICAgICAgICAsIm5vbmNlIG1pc21hdGNoIn0sCit7RVJSX1JFQVNPTihUU19SX05PTkNFX05PVF9SRVRVUk5FRCkgICAgICwibm9uY2Ugbm90IHJldHVybmVkIn0sCit7RVJSX1JFQVNPTihUU19SX05PX0NPTlRFTlQpICAgICAgICAgICAgICwibm8gY29udGVudCJ9LAore0VSUl9SRUFTT04oVFNfUl9OT19USU1FX1NUQU1QX1RPS0VOKSAgICAsIm5vIHRpbWUgc3RhbXAgdG9rZW4ifSwKK3tFUlJfUkVBU09OKFRTX1JfUEtDUzdfQUREX1NJR05BVFVSRV9FUlJPUiksInBrY3M3IGFkZCBzaWduYXR1cmUgZXJyb3IifSwKK3tFUlJfUkVBU09OKFRTX1JfUEtDUzdfQUREX1NJR05FRF9BVFRSX0VSUk9SKSwicGtjczcgYWRkIHNpZ25lZCBhdHRyIGVycm9yIn0sCit7RVJSX1JFQVNPTihUU19SX1BLQ1M3X1RPX1RTX1RTVF9JTkZPX0ZBSUxFRCksInBrY3M3IHRvIHRzIHRzdCBpbmZvIGZhaWxlZCJ9LAore0VSUl9SRUFTT04oVFNfUl9QT0xJQ1lfTUlTTUFUQ0gpICAgICAgICAsInBvbGljeSBtaXNtYXRjaCJ9LAore0VSUl9SRUFTT04oVFNfUl9QUklWQVRFX0tFWV9ET0VTX05PVF9NQVRDSF9DRVJUSUZJQ0FURSksInByaXZhdGUga2V5IGRvZXMgbm90IG1hdGNoIGNlcnRpZmljYXRlIn0sCit7RVJSX1JFQVNPTihUU19SX1JFU1BPTlNFX1NFVFVQX0VSUk9SKSAgICwicmVzcG9uc2Ugc2V0dXAgZXJyb3IifSwKK3tFUlJfUkVBU09OKFRTX1JfU0lHTkFUVVJFX0ZBSUxVUkUpICAgICAgLCJzaWduYXR1cmUgZmFpbHVyZSJ9LAore0VSUl9SRUFTT04oVFNfUl9USEVSRV9NVVNUX0JFX09ORV9TSUdORVIpLCJ0aGVyZSBtdXN0IGJlIG9uZSBzaWduZXIifSwKK3tFUlJfUkVBU09OKFRTX1JfVElNRV9TWVNDQUxMX0VSUk9SKSAgICAgLCJ0aW1lIHN5c2NhbGwgZXJyb3IifSwKK3tFUlJfUkVBU09OKFRTX1JfVE9LRU5fTk9UX1BSRVNFTlQpICAgICAgLCJ0b2tlbiBub3QgcHJlc2VudCJ9LAore0VSUl9SRUFTT04oVFNfUl9UT0tFTl9QUkVTRU5UKSAgICAgICAgICAsInRva2VuIHByZXNlbnQifSwKK3tFUlJfUkVBU09OKFRTX1JfVFNBX05BTUVfTUlTTUFUQ0gpICAgICAgLCJ0c2EgbmFtZSBtaXNtYXRjaCJ9LAore0VSUl9SRUFTT04oVFNfUl9UU0FfVU5UUlVTVEVEKSAgICAgICAgICAsInRzYSB1bnRydXN0ZWQifSwKK3tFUlJfUkVBU09OKFRTX1JfVFNUX0lORk9fU0VUVVBfRVJST1IpICAgLCJ0c3QgaW5mbyBzZXR1cCBlcnJvciJ9LAore0VSUl9SRUFTT04oVFNfUl9UU19EQVRBU0lHTikgICAgICAgICAgICAsInRzIGRhdGFzaWduIn0sCit7RVJSX1JFQVNPTihUU19SX1VOQUNDRVBUQUJMRV9QT0xJQ1kpICAgICwidW5hY2NlcHRhYmxlIHBvbGljeSJ9LAore0VSUl9SRUFTT04oVFNfUl9VTlNVUFBPUlRFRF9NRF9BTEdPUklUSE0pLCJ1bnN1cHBvcnRlZCBtZCBhbGdvcml0aG0ifSwKK3tFUlJfUkVBU09OKFRTX1JfVU5TVVBQT1JURURfVkVSU0lPTikgICAgLCJ1bnN1cHBvcnRlZCB2ZXJzaW9uIn0sCit7RVJSX1JFQVNPTihUU19SX1dST05HX0NPTlRFTlRfVFlQRSkgICAgICwid3JvbmcgY29udGVudCB0eXBlIn0sCit7MCxOVUxMfQorCX07CisKKyNlbmRpZgorCit2b2lkIEVSUl9sb2FkX1RTX3N0cmluZ3Modm9pZCkKKwl7CisjaWZuZGVmIE9QRU5TU0xfTk9fRVJSCisKKwlpZiAoRVJSX2Z1bmNfZXJyb3Jfc3RyaW5nKFRTX3N0cl9mdW5jdHNbMF0uZXJyb3IpID09IE5VTEwpCisJCXsKKwkJRVJSX2xvYWRfc3RyaW5ncygwLFRTX3N0cl9mdW5jdHMpOworCQlFUlJfbG9hZF9zdHJpbmdzKDAsVFNfc3RyX3JlYXNvbnMpOworCQl9CisjZW5kaWYKKwl9CmRpZmYgLS1naXQgYS9jcnlwdG8vdHh0X2RiL01ha2VmaWxlIGIvY3J5cHRvL3R4dF9kYi9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODdlNTdiNC4uMDAwMDAwMAotLS0gYS9jcnlwdG8vdHh0X2RiL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotIwotIyBPcGVuU1NML2NyeXB0by90eHRfZGIvTWFrZWZpbGUKLSMKLQotRElSPQl0eHRfZGIKLVRPUD0JLi4vLi4KLUNDPQljYwotSU5DTFVERVM9Ci1DRkxBRz0tZwotTUFLRUZJTEU9CU1ha2VmaWxlCi1BUj0JCWFyIHIKLQotQ0ZMQUdTPSAkKElOQ0xVREVTKSAkKENGTEFHKQotCi1HRU5FUkFMPU1ha2VmaWxlCi1URVNUPQotQVBQUz0KLQotTElCPSQoVE9QKS9saWJjcnlwdG8uYQotTElCU1JDPXR4dF9kYi5jCi1MSUJPQko9dHh0X2RiLm8KLQotU1JDPSAkKExJQlNSQykKLQotRVhIRUFERVI9IHR4dF9kYi5oCi1IRUFERVI9CSQoRVhIRUFERVIpCi0KLUFMTD0gICAgJChHRU5FUkFMKSAkKFNSQykgJChIRUFERVIpCi0KLXRvcDoKLQkoY2QgLi4vLi47ICQoTUFLRSkgRElSUz1jcnlwdG8gU0RJUlM9JChESVIpIHN1Yl9hbGwpCi0KLWFsbDoJbGliCi0KLWxpYjoJJChMSUJPQkopCi0JJChBUlgpICQoTElCKSAkKExJQk9CSikKLQkkKFJBTkxJQikgJChMSUIpIHx8IGVjaG8gTmV2ZXIgbWluZC4KLQlAdG91Y2ggbGliCi0KLWZpbGVzOgotCSQoUEVSTCkgJChUT1ApL3V0aWwvZmlsZXMucGwgTWFrZWZpbGUgPj4gJChUT1ApL01JTkZPCi0KLWxpbmtzOgotCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9pbmNsdWRlL29wZW5zc2wgJChFWEhFQURFUikKLQlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vdGVzdCAkKFRFU1QpCi0JQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL2FwcHMgJChBUFBTKQotCi1pbnN0YWxsOgotCUBbIC1uICIkKElOU1RBTExUT1ApIiBdICMgc2hvdWxkIGJlIHNldCBieSB0b3AgTWFrZWZpbGUuLi4KLQlAaGVhZGVybGlzdD0iJChFWEhFQURFUikiOyBmb3IgaSBpbiAkJGhlYWRlcmxpc3QgOyBcCi0JZG8gIFwKLQkoY3AgJCRpICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpOyBcCi0JY2htb2QgNjQ0ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpICk7IFwKLQlkb25lOwotCi10YWdzOgotCWN0YWdzICQoU1JDKQotCi10ZXN0czoKLQotbGludDoKLQlsaW50IC1ETElOVCAkKElOQ0xVREVTKSAkKFNSQyk+Zmx1ZmYKLQotZGVwZW5kOgotCUBbIC1uICIkKE1BS0VERVBFTkQpIiBdICMgc2hvdWxkIGJlIHNldCBieSB0b3AgTWFrZWZpbGUuLi4KLQkkKE1BS0VERVBFTkQpIC0tICQoQ0ZMQUcpICQoSU5DTFVERVMpICQoREVQRkxBRykgLS0gJChQUk9HUykgJChMSUJTUkMpCi0KLWRjbGVhbjoKLQkkKFBFUkwpIC1wZSAnaWYgKC9eIyBETyBOT1QgREVMRVRFIFRISVMgTElORS8pIHtwcmludDsgZXhpdCgwKTt9JyAkKE1BS0VGSUxFKSA+TWFrZWZpbGUubmV3Ci0JbXYgLWYgTWFrZWZpbGUubmV3ICQoTUFLRUZJTEUpCi0KLWNsZWFuOgotCXJtIC1mICoubyAqLm9iaiBsaWIgdGFncyBjb3JlIC5wdXJlIC5uZnMqICoub2xkICouYmFrIGZsdWZmCi0KLSMgRE8gTk9UIERFTEVURSBUSElTIExJTkUgLS0gbWFrZSBkZXBlbmQgZGVwZW5kcyBvbiBpdC4KLQotdHh0X2RiLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXR4dF9kYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi10eHRfZGIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi10eHRfZGIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXR4dF9kYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotdHh0X2RiLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotdHh0X2RiLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC90eHRfZGIuaAotdHh0X2RiLm86IC4uL2NyeXB0bGliLmggdHh0X2RiLmMKZGlmZiAtLWdpdCBhL2NyeXB0by90eHRfZGIvdHh0X2RiLmMgYi9jcnlwdG8vdHh0X2RiL3R4dF9kYi5jCmluZGV4IDNlZDVmNzIuLjZmMmNlM2IgMTAwNjQ0Ci0tLSBhL2NyeXB0by90eHRfZGIvdHh0X2RiLmMKKysrIGIvY3J5cHRvL3R4dF9kYi90eHRfZGIuYwpAQCAtNzcsMjIgKzc3LDIzIEBACiAJaW50IGksYWRkLG47CiAJaW50IHNpemU9QlVGU0laRTsKIAlpbnQgb2Zmc2V0PTA7Ci0JY2hhciAqcCwqKnBwLCpmOworCWNoYXIgKnAsKmY7CisJT1BFTlNTTF9TVFJJTkcgKnBwOwogCUJVRl9NRU0gKmJ1Zj1OVUxMOwogCiAJaWYgKChidWY9QlVGX01FTV9uZXcoKSkgPT0gTlVMTCkgZ290byBlcnI7CiAJaWYgKCFCVUZfTUVNX2dyb3coYnVmLHNpemUpKSBnb3RvIGVycjsKIAotCWlmICgocmV0PShUWFRfREIgKilPUEVOU1NMX21hbGxvYyhzaXplb2YoVFhUX0RCKSkpID09IE5VTEwpCisJaWYgKChyZXQ9T1BFTlNTTF9tYWxsb2Moc2l6ZW9mKFRYVF9EQikpKSA9PSBOVUxMKQogCQlnb3RvIGVycjsKIAlyZXQtPm51bV9maWVsZHM9bnVtOwogCXJldC0+aW5kZXg9TlVMTDsKIAlyZXQtPnF1YWw9TlVMTDsKLQlpZiAoKHJldC0+ZGF0YT1za19uZXdfbnVsbCgpKSA9PSBOVUxMKQorCWlmICgocmV0LT5kYXRhPXNrX09QRU5TU0xfUFNUUklOR19uZXdfbnVsbCgpKSA9PSBOVUxMKQogCQlnb3RvIGVycjsKLQlpZiAoKHJldC0+aW5kZXg9KExIQVNIICoqKU9QRU5TU0xfbWFsbG9jKHNpemVvZihMSEFTSCAqKSpudW0pKSA9PSBOVUxMKQorCWlmICgocmV0LT5pbmRleD1PUEVOU1NMX21hbGxvYyhzaXplb2YoKnJldC0+aW5kZXgpKm51bSkpID09IE5VTEwpCiAJCWdvdG8gZXJyOwotCWlmICgocmV0LT5xdWFsPShpbnQgKCoqKShjaGFyICoqKSlPUEVOU1NMX21hbGxvYyhzaXplb2YoaW50ICgqKikoY2hhciAqKikpKm51bSkpID09IE5VTEwpCisJaWYgKChyZXQtPnF1YWw9T1BFTlNTTF9tYWxsb2Moc2l6ZW9mKCoocmV0LT5xdWFsKSkqbnVtKSkgPT0gTlVMTCkKIAkJZ290byBlcnI7CiAJZm9yIChpPTA7IGk8bnVtOyBpKyspCiAJCXsKQEAgLTEyMiw3ICsxMjMsNyBAQAogCQllbHNlCiAJCQl7CiAJCQlidWYtPmRhdGFbb2Zmc2V0LTFdPSdcMCc7IC8qIGJsYXQgdGhlICdcbicgKi8KLQkJCWlmICghKHA9KGNoYXIgKilPUEVOU1NMX21hbGxvYyhhZGQrb2Zmc2V0KSkpIGdvdG8gZXJyOworCQkJaWYgKCEocD1PUEVOU1NMX21hbGxvYyhhZGQrb2Zmc2V0KSkpIGdvdG8gZXJyOwogCQkJb2Zmc2V0PTA7CiAJCQl9CiAJCXBwPShjaGFyICoqKXA7CkBAIC0xNTUsMTYgKzE1NiwxNiBAQAogCQkqKHArKyk9J1wwJzsKIAkJaWYgKChuICE9IG51bSkgfHwgKCpmICE9ICdcMCcpKQogCQkJewotI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fU1RESU8pICYmICFkZWZpbmVkKE9QRU5TU0xfU1lTX1dJTjE2KQkvKiB0ZW1wb3JhdHkgZml4IDotKCAqLworI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fU1RESU8pICYmICFkZWZpbmVkKE9QRU5TU0xfU1lTX1dJTjE2KQkvKiB0ZW1wb3JhcnkgZml4IDotKCAqLwogCQkJZnByaW50ZihzdGRlcnIsIndyb25nIG51bWJlciBvZiBmaWVsZHMgb24gbGluZSAlbGQgKGxvb2tpbmcgZm9yIGZpZWxkICVkLCBnb3QgJWQsICclcycgbGVmdClcbiIsbG4sbnVtLG4sZik7CiAjZW5kaWYKIAkJCWVyPTI7CiAJCQlnb3RvIGVycjsKIAkJCX0KIAkJcHBbbl09cDsKLQkJaWYgKCFza19wdXNoKHJldC0+ZGF0YSwoY2hhciAqKXBwKSkKKwkJaWYgKCFza19PUEVOU1NMX1BTVFJJTkdfcHVzaChyZXQtPmRhdGEscHApKQogCQkJewotI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fU1RESU8pICYmICFkZWZpbmVkKE9QRU5TU0xfU1lTX1dJTjE2KQkvKiB0ZW1wb3JhdHkgZml4IDotKCAqLworI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fU1RESU8pICYmICFkZWZpbmVkKE9QRU5TU0xfU1lTX1dJTjE2KQkvKiB0ZW1wb3JhcnkgZml4IDotKCAqLwogCQkJZnByaW50ZihzdGRlcnIsImZhaWx1cmUgaW4gc2tfcHVzaFxuIik7CiAjZW5kaWYKIAkJCWVyPTI7CkBAIC0xODEsNyArMTgyLDcgQEAKICNlbmRpZgogCQlpZiAocmV0ICE9IE5VTEwpCiAJCQl7Ci0JCQlpZiAocmV0LT5kYXRhICE9IE5VTEwpIHNrX2ZyZWUocmV0LT5kYXRhKTsKKwkJCWlmIChyZXQtPmRhdGEgIT0gTlVMTCkgc2tfT1BFTlNTTF9QU1RSSU5HX2ZyZWUocmV0LT5kYXRhKTsKIAkJCWlmIChyZXQtPmluZGV4ICE9IE5VTEwpIE9QRU5TU0xfZnJlZShyZXQtPmluZGV4KTsKIAkJCWlmIChyZXQtPnF1YWwgIT0gTlVMTCkgT1BFTlNTTF9mcmVlKHJldC0+cXVhbCk7CiAJCQlpZiAocmV0ICE9IE5VTEwpIE9QRU5TU0xfZnJlZShyZXQpOwpAQCAtMTkyLDEwICsxOTMsMTAgQEAKIAkJcmV0dXJuKHJldCk7CiAJfQogCi1jaGFyICoqVFhUX0RCX2dldF9ieV9pbmRleChUWFRfREIgKmRiLCBpbnQgaWR4LCBjaGFyICoqdmFsdWUpCitPUEVOU1NMX1NUUklORyAqVFhUX0RCX2dldF9ieV9pbmRleChUWFRfREIgKmRiLCBpbnQgaWR4LCBPUEVOU1NMX1NUUklORyAqdmFsdWUpCiAJewotCWNoYXIgKipyZXQ7Ci0JTEhBU0ggKmxoOworCU9QRU5TU0xfU1RSSU5HICpyZXQ7CisJTEhBU0hfT0YoT1BFTlNTTF9TVFJJTkcpICpsaDsKIAogCWlmIChpZHggPj0gZGItPm51bV9maWVsZHMpCiAJCXsKQEAgLTIwOCwxNiArMjA5LDE2IEBACiAJCWRiLT5lcnJvcj1EQl9FUlJPUl9OT19JTkRFWDsKIAkJcmV0dXJuKE5VTEwpOwogCQl9Ci0JcmV0PShjaGFyICoqKWxoX3JldHJpZXZlKGxoLHZhbHVlKTsKKwlyZXQ9bGhfT1BFTlNTTF9TVFJJTkdfcmV0cmlldmUobGgsdmFsdWUpOwogCWRiLT5lcnJvcj1EQl9FUlJPUl9PSzsKIAlyZXR1cm4ocmV0KTsKIAl9CiAKLWludCBUWFRfREJfY3JlYXRlX2luZGV4KFRYVF9EQiAqZGIsIGludCBmaWVsZCwgaW50ICgqcXVhbCkoY2hhciAqKiksCi0JCUxIQVNIX0hBU0hfRk5fVFlQRSBoYXNoLCBMSEFTSF9DT01QX0ZOX1RZUEUgY21wKQoraW50IFRYVF9EQl9jcmVhdGVfaW5kZXgoVFhUX0RCICpkYiwgaW50IGZpZWxkLCBpbnQgKCpxdWFsKShPUEVOU1NMX1NUUklORyAqKSwKKwkJCUxIQVNIX0hBU0hfRk5fVFlQRSBoYXNoLCBMSEFTSF9DT01QX0ZOX1RZUEUgY21wKQogCXsKLQlMSEFTSCAqaWR4OwotCWNoYXIgKipyOworCUxIQVNIX09GKE9QRU5TU0xfU1RSSU5HKSAqaWR4OworCU9QRU5TU0xfU1RSSU5HICpyOwogCWludCBpLG47CiAKIAlpZiAoZmllbGQgPj0gZGItPm51bV9maWVsZHMpCkBAIC0yMjUsMjYgKzIyNiwyNyBAQAogCQlkYi0+ZXJyb3I9REJfRVJST1JfSU5ERVhfT1VUX09GX1JBTkdFOwogCQlyZXR1cm4oMCk7CiAJCX0KLQlpZiAoKGlkeD1saF9uZXcoaGFzaCxjbXApKSA9PSBOVUxMKQorCS8qIEZJWE1FOiB3ZSBsb3NlIHR5cGUgY2hlY2tpbmcgYXQgdGhpcyBwb2ludCAqLworCWlmICgoaWR4PShMSEFTSF9PRihPUEVOU1NMX1NUUklORykgKilsaF9uZXcoaGFzaCxjbXApKSA9PSBOVUxMKQogCQl7CiAJCWRiLT5lcnJvcj1EQl9FUlJPUl9NQUxMT0M7CiAJCXJldHVybigwKTsKIAkJfQotCW49c2tfbnVtKGRiLT5kYXRhKTsKKwluPXNrX09QRU5TU0xfUFNUUklOR19udW0oZGItPmRhdGEpOwogCWZvciAoaT0wOyBpPG47IGkrKykKIAkJewotCQlyPShjaGFyICoqKXNrX3ZhbHVlKGRiLT5kYXRhLGkpOworCQlyPXNrX09QRU5TU0xfUFNUUklOR192YWx1ZShkYi0+ZGF0YSxpKTsKIAkJaWYgKChxdWFsICE9IE5VTEwpICYmIChxdWFsKHIpID09IDApKSBjb250aW51ZTsKLQkJaWYgKChyPWxoX2luc2VydChpZHgscikpICE9IE5VTEwpCisJCWlmICgocj1saF9PUEVOU1NMX1NUUklOR19pbnNlcnQoaWR4LHIpKSAhPSBOVUxMKQogCQkJewogCQkJZGItPmVycm9yPURCX0VSUk9SX0lOREVYX0NMQVNIOwotCQkJZGItPmFyZzE9c2tfZmluZChkYi0+ZGF0YSwoY2hhciAqKXIpOworCQkJZGItPmFyZzE9c2tfT1BFTlNTTF9QU1RSSU5HX2ZpbmQoZGItPmRhdGEscik7CiAJCQlkYi0+YXJnMj1pOwotCQkJbGhfZnJlZShpZHgpOworCQkJbGhfT1BFTlNTTF9TVFJJTkdfZnJlZShpZHgpOwogCQkJcmV0dXJuKDApOwogCQkJfQogCQl9Ci0JaWYgKGRiLT5pbmRleFtmaWVsZF0gIT0gTlVMTCkgbGhfZnJlZShkYi0+aW5kZXhbZmllbGRdKTsKKwlpZiAoZGItPmluZGV4W2ZpZWxkXSAhPSBOVUxMKSBsaF9PUEVOU1NMX1NUUklOR19mcmVlKGRiLT5pbmRleFtmaWVsZF0pOwogCWRiLT5pbmRleFtmaWVsZF09aWR4OwogCWRiLT5xdWFsW2ZpZWxkXT1xdWFsOwogCXJldHVybigxKTsKQEAgLTI1OSwxMSArMjYxLDExIEBACiAKIAlpZiAoKGJ1Zj1CVUZfTUVNX25ldygpKSA9PSBOVUxMKQogCQlnb3RvIGVycjsKLQluPXNrX251bShkYi0+ZGF0YSk7CisJbj1za19PUEVOU1NMX1BTVFJJTkdfbnVtKGRiLT5kYXRhKTsKIAlubj1kYi0+bnVtX2ZpZWxkczsKIAlmb3IgKGk9MDsgaTxuOyBpKyspCiAJCXsKLQkJcHA9KGNoYXIgKiopc2tfdmFsdWUoZGItPmRhdGEsaSk7CisJCXBwPXNrX09QRU5TU0xfUFNUUklOR192YWx1ZShkYi0+ZGF0YSxpKTsKIAogCQlsPTA7CiAJCWZvciAoaj0wOyBqPG5uOyBqKyspCkBAIC0yOTgsMTAgKzMwMCwxMCBAQAogCXJldHVybihyZXQpOwogCX0KIAotaW50IFRYVF9EQl9pbnNlcnQoVFhUX0RCICpkYiwgY2hhciAqKnJvdykKK2ludCBUWFRfREJfaW5zZXJ0KFRYVF9EQiAqZGIsIE9QRU5TU0xfU1RSSU5HICpyb3cpCiAJewogCWludCBpOwotCWNoYXIgKipyOworCU9QRU5TU0xfU1RSSU5HICpyOwogCiAJZm9yIChpPTA7IGk8ZGItPm51bV9maWVsZHM7IGkrKykKIAkJewpAQCAtMzA5LDcgKzMxMSw3IEBACiAJCQl7CiAJCQlpZiAoKGRiLT5xdWFsW2ldICE9IE5VTEwpICYmCiAJCQkJKGRiLT5xdWFsW2ldKHJvdykgPT0gMCkpIGNvbnRpbnVlOwotCQkJcj0oY2hhciAqKilsaF9yZXRyaWV2ZShkYi0+aW5kZXhbaV0scm93KTsKKwkJCXI9bGhfT1BFTlNTTF9TVFJJTkdfcmV0cmlldmUoZGItPmluZGV4W2ldLHJvdyk7CiAJCQlpZiAociAhPSBOVUxMKQogCQkJCXsKIAkJCQlkYi0+ZXJyb3I9REJfRVJST1JfSU5ERVhfQ0xBU0g7CkBAIC0zMjAsNyArMzIyLDcgQEAKIAkJCX0KIAkJfQogCS8qIFdlIGhhdmUgcGFzc2VkIHRoZSBpbmRleCBjaGVja3MsIG5vdyBqdXN0IGFwcGVuZCBhbmQgaW5zZXJ0ICovCi0JaWYgKCFza19wdXNoKGRiLT5kYXRhLChjaGFyICopcm93KSkKKwlpZiAoIXNrX09QRU5TU0xfUFNUUklOR19wdXNoKGRiLT5kYXRhLHJvdykpCiAJCXsKIAkJZGItPmVycm9yPURCX0VSUk9SX01BTExPQzsKIAkJZ290byBlcnI7CkBAIC0zMzIsNyArMzM0LDcgQEAKIAkJCXsKIAkJCWlmICgoZGItPnF1YWxbaV0gIT0gTlVMTCkgJiYKIAkJCQkoZGItPnF1YWxbaV0ocm93KSA9PSAwKSkgY29udGludWU7Ci0JCQlsaF9pbnNlcnQoZGItPmluZGV4W2ldLHJvdyk7CisJCQkodm9pZClsaF9PUEVOU1NMX1NUUklOR19pbnNlcnQoZGItPmluZGV4W2ldLHJvdyk7CiAJCQl9CiAJCX0KIAlyZXR1cm4oMSk7CkBAIC0zNTEsMTggKzM1MywxOCBAQAogCWlmIChkYi0+aW5kZXggIT0gTlVMTCkKIAkJewogCQlmb3IgKGk9ZGItPm51bV9maWVsZHMtMTsgaT49MDsgaS0tKQotCQkJaWYgKGRiLT5pbmRleFtpXSAhPSBOVUxMKSBsaF9mcmVlKGRiLT5pbmRleFtpXSk7CisJCQlpZiAoZGItPmluZGV4W2ldICE9IE5VTEwpIGxoX09QRU5TU0xfU1RSSU5HX2ZyZWUoZGItPmluZGV4W2ldKTsKIAkJT1BFTlNTTF9mcmVlKGRiLT5pbmRleCk7CiAJCX0KIAlpZiAoZGItPnF1YWwgIT0gTlVMTCkKIAkJT1BFTlNTTF9mcmVlKGRiLT5xdWFsKTsKIAlpZiAoZGItPmRhdGEgIT0gTlVMTCkKIAkJewotCQlmb3IgKGk9c2tfbnVtKGRiLT5kYXRhKS0xOyBpPj0wOyBpLS0pCisJCWZvciAoaT1za19PUEVOU1NMX1BTVFJJTkdfbnVtKGRiLT5kYXRhKS0xOyBpPj0wOyBpLS0pCiAJCQl7CiAJCQkvKiBjaGVjayBpZiBhbnkgJ2ZpZWxkcycgaGF2ZSBiZWVuIGFsbG9jYXRlZAogCQkJICogZnJvbSBvdXRzaWRlIG9mIHRoZSBpbml0aWFsIGJsb2NrICovCi0JCQlwPShjaGFyICoqKXNrX3ZhbHVlKGRiLT5kYXRhLGkpOworCQkJcD1za19PUEVOU1NMX1BTVFJJTkdfdmFsdWUoZGItPmRhdGEsaSk7CiAJCQltYXg9cFtkYi0+bnVtX2ZpZWxkc107IC8qIGxhc3QgYWRkcmVzcyAqLwogCQkJaWYgKG1heCA9PSBOVUxMKSAvKiBuZXcgcm93ICovCiAJCQkJewpAQCAtMzc4LDkgKzM4MCw5IEBACiAJCQkJCQlPUEVOU1NMX2ZyZWUocFtuXSk7CiAJCQkJCX0KIAkJCQl9Ci0JCQlPUEVOU1NMX2ZyZWUoc2tfdmFsdWUoZGItPmRhdGEsaSkpOworCQkJT1BFTlNTTF9mcmVlKHNrX09QRU5TU0xfUFNUUklOR192YWx1ZShkYi0+ZGF0YSxpKSk7CiAJCQl9Ci0JCXNrX2ZyZWUoZGItPmRhdGEpOworCQlza19PUEVOU1NMX1BTVFJJTkdfZnJlZShkYi0+ZGF0YSk7CiAJCX0KIAlPUEVOU1NMX2ZyZWUoZGIpOwogCX0KZGlmZiAtLWdpdCBhL2NyeXB0by90eHRfZGIvdHh0X2RiLmggYi9jcnlwdG8vdHh0X2RiL3R4dF9kYi5oCmluZGV4IDMwN2UxYmEuLjZhYmU0MzUgMTAwNjQ0Ci0tLSBhL2NyeXB0by90eHRfZGIvdHh0X2RiLmgKKysrIGIvY3J5cHRvL3R4dF9kYi90eHRfZGIuaApAQCAtNzcsMTYgKzc3LDE5IEBACiBleHRlcm4gIkMiIHsKICNlbmRpZgogCit0eXBlZGVmIE9QRU5TU0xfU1RSSU5HICpPUEVOU1NMX1BTVFJJTkc7CitERUNMQVJFX1NQRUNJQUxfU1RBQ0tfT0YoT1BFTlNTTF9QU1RSSU5HLCBPUEVOU1NMX1NUUklORykKKwogdHlwZWRlZiBzdHJ1Y3QgdHh0X2RiX3N0CiAJewogCWludCBudW1fZmllbGRzOwotCVNUQUNLIC8qIGNoYXIgKiogKi8gKmRhdGE7Ci0JTEhBU0ggKippbmRleDsKLQlpbnQgKCoqcXVhbCkoY2hhciAqKik7CisJU1RBQ0tfT0YoT1BFTlNTTF9QU1RSSU5HKSAqZGF0YTsKKwlMSEFTSF9PRihPUEVOU1NMX1NUUklORykgKippbmRleDsKKwlpbnQgKCoqcXVhbCkoT1BFTlNTTF9TVFJJTkcgKik7CiAJbG9uZyBlcnJvcjsKIAlsb25nIGFyZzE7CiAJbG9uZyBhcmcyOwotCWNoYXIgKiphcmdfcm93OworCU9QRU5TU0xfU1RSSU5HICphcmdfcm93OwogCX0gVFhUX0RCOwogCiAjaWZuZGVmIE9QRU5TU0xfTk9fQklPCkBAIC05NiwxMSArOTksMTEgQEAKIFRYVF9EQiAqVFhUX0RCX3JlYWQoY2hhciAqaW4sIGludCBudW0pOwogbG9uZyBUWFRfREJfd3JpdGUoY2hhciAqb3V0LCBUWFRfREIgKmRiKTsKICNlbmRpZgotaW50IFRYVF9EQl9jcmVhdGVfaW5kZXgoVFhUX0RCICpkYixpbnQgZmllbGQsaW50ICgqcXVhbCkoY2hhciAqKiksCi0JCUxIQVNIX0hBU0hfRk5fVFlQRSBoYXNoLCBMSEFTSF9DT01QX0ZOX1RZUEUgY21wKTsKK2ludCBUWFRfREJfY3JlYXRlX2luZGV4KFRYVF9EQiAqZGIsaW50IGZpZWxkLGludCAoKnF1YWwpKE9QRU5TU0xfU1RSSU5HICopLAorCQkJTEhBU0hfSEFTSF9GTl9UWVBFIGhhc2gsIExIQVNIX0NPTVBfRk5fVFlQRSBjbXApOwogdm9pZCBUWFRfREJfZnJlZShUWFRfREIgKmRiKTsKLWNoYXIgKipUWFRfREJfZ2V0X2J5X2luZGV4KFRYVF9EQiAqZGIsIGludCBpZHgsIGNoYXIgKip2YWx1ZSk7Ci1pbnQgVFhUX0RCX2luc2VydChUWFRfREIgKmRiLGNoYXIgKip2YWx1ZSk7CitPUEVOU1NMX1NUUklORyAqVFhUX0RCX2dldF9ieV9pbmRleChUWFRfREIgKmRiLCBpbnQgaWR4LCBPUEVOU1NMX1NUUklORyAqdmFsdWUpOworaW50IFRYVF9EQl9pbnNlcnQoVFhUX0RCICpkYiwgT1BFTlNTTF9TVFJJTkcgKnZhbHVlKTsKIAogI2lmZGVmICBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL3VpL01ha2VmaWxlIGIvY3J5cHRvL3VpL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzU1ZTIwLi4wMDAwMDAwCi0tLSBhL2NyeXB0by91aS9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0jCi0jIE9wZW5TU0wvY3J5cHRvL3VpL01ha2VmaWxlCi0jCi0KLURJUj0JdWkKLVRPUD0JLi4vLi4KLUNDPQljYwotSU5DTFVERVM9IC1JLi4gLUkkKFRPUCkgLUkuLi8uLi9pbmNsdWRlCi1DRkxBRz0tZwotTUFLRUZJTEU9CU1ha2VmaWxlCi1BUj0JCWFyIHIKLQotQ0ZMQUdTPSAkKElOQ0xVREVTKSAkKENGTEFHKQotCi1HRU5FUkFMPU1ha2VmaWxlCi0jVEVTVD0gdWl0ZXN0LmMKLVRFU1Q9Ci1BUFBTPQotCi1DT01QQVRTUkM9IHVpX2NvbXBhdC5jCi1DT01QQVRPQko9IHVpX2NvbXBhdC5vCi0KLUxJQj0kKFRPUCkvbGliY3J5cHRvLmEKLUxJQlNSQz0gdWlfZXJyLmMgdWlfbGliLmMgdWlfb3BlbnNzbC5jIHVpX3V0aWwuYyAkKENPTVBBVFNSQykKLUxJQk9CSj0gdWlfZXJyLm8gdWlfbGliLm8gdWlfb3BlbnNzbC5vIHVpX3V0aWwubyAkKENPTVBBVE9CSikKLQotU1JDPSAkKExJQlNSQykKLQotRVhIRUFERVI9IHVpLmggdWlfY29tcGF0LmgKLUhFQURFUj0JJChFWEhFQURFUikgdWlfbG9jbC5oCi0KLUFMTD0gICAgJChHRU5FUkFMKSAkKFNSQykgJChIRUFERVIpCi0KLXRvcDoKLQkoY2QgLi4vLi47ICQoTUFLRSkgRElSUz1jcnlwdG8gU0RJUlM9JChESVIpIHN1Yl9hbGwpCi0KLWFsbDoJbGliCi0KLWxpYjoJJChMSUJPQkopCi0JJChBUlgpICQoTElCKSAkKExJQk9CSikKLQkkKFJBTkxJQikgJChMSUIpIHx8IGVjaG8gTmV2ZXIgbWluZC4KLQlAdG91Y2ggbGliCi0KLWZpbGVzOgotCSQoUEVSTCkgJChUT1ApL3V0aWwvZmlsZXMucGwgTWFrZWZpbGUgPj4gJChUT1ApL01JTkZPCi0KLWxpbmtzOgotCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9pbmNsdWRlL29wZW5zc2wgJChFWEhFQURFUikKLQlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vdGVzdCAkKFRFU1QpCi0JQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL2FwcHMgJChBUFBTKQotCi1pbnN0YWxsOgotCUBbIC1uICIkKElOU1RBTExUT1ApIiBdICMgc2hvdWxkIGJlIHNldCBieSB0b3AgTWFrZWZpbGUuLi4KLQlAaGVhZGVybGlzdD0iJChFWEhFQURFUikiOyBmb3IgaSBpbiAkJGhlYWRlcmxpc3QgOyBcCi0JZG8gIFwKLQkoY3AgJCRpICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpOyBcCi0JY2htb2QgNjQ0ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpICk7IFwKLQlkb25lOwotCi10YWdzOgotCWN0YWdzICQoU1JDKQotCi10ZXN0czoKLQotbGludDoKLQlsaW50IC1ETElOVCAkKElOQ0xVREVTKSAkKFNSQyk+Zmx1ZmYKLQotZGVwZW5kOgotCUBbIC1uICIkKE1BS0VERVBFTkQpIiBdICMgc2hvdWxkIGJlIHNldCBieSB1cHBlciBNYWtlZmlsZS4uLgotCSQoTUFLRURFUEVORCkgLS0gJChDRkxBRykgJChJTkNMVURFUykgJChERVBGTEFHKSAtLSAkKFBST0dTKSAkKExJQlNSQykKLQotZGNsZWFuOgotCSQoUEVSTCkgLXBlICdpZiAoL14jIERPIE5PVCBERUxFVEUgVEhJUyBMSU5FLykge3ByaW50OyBleGl0KDApO30nICQoTUFLRUZJTEUpID5NYWtlZmlsZS5uZXcKLQltdiAtZiBNYWtlZmlsZS5uZXcgJChNQUtFRklMRSkKLQotY2xlYW46Ci0Jcm0gLWYgKi5vICovKi5vICoub2JqIGxpYiB0YWdzIGNvcmUgLnB1cmUgLm5mcyogKi5vbGQgKi5iYWsgZmx1ZmYKLQotIyBETyBOT1QgREVMRVRFIFRISVMgTElORSAtLSBtYWtlIGRlcGVuZCBkZXBlbmRzIG9uIGl0LgotCi11aV9jb21wYXQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXVpX2NvbXBhdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLXVpX2NvbXBhdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvdWkuaAotdWlfY29tcGF0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC91aV9jb21wYXQuaCB1aV9jb21wYXQuYwotdWlfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLXVpX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLXVpX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotdWlfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi11aV9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi11aV9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3VpLmggdWlfZXJyLmMKLXVpX2xpYi5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi11aV9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotdWlfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotdWlfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi11aV9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXVpX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLXVpX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvdWkuaAotdWlfbGliLm86IC4uL2NyeXB0bGliLmggdWlfbGliLmMgdWlfbG9jbC5oCi11aV9vcGVuc3NsLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXVpX29wZW5zc2wubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotdWlfb3BlbnNzbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLXVpX29wZW5zc2wubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXVpX29wZW5zc2wubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXVpX29wZW5zc2wubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi11aV9vcGVuc3NsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC91aS5oCi11aV9vcGVuc3NsLm86IC4uL2NyeXB0bGliLmggdWlfbG9jbC5oIHVpX29wZW5zc2wuYwotdWlfdXRpbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLXVpX3V0aWwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLXVpX3V0aWwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi11aV91dGlsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi11aV91dGlsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC91aS5oIHVpX2xvY2wuaCB1aV91dGlsLmMKZGlmZiAtLWdpdCBhL2NyeXB0by91aS91aS5oIGIvY3J5cHRvL3VpL3VpLmgKaW5kZXggMDE4Mjk2NC4uMmIxY2ZhMiAxMDA2NDQKLS0tIGEvY3J5cHRvL3VpL3VpLmgKKysrIGIvY3J5cHRvL3VpL3VpLmgKQEAgLTI4Nyw4ICsyODcsOCBAQAogLyogVGhlIFVJX1NUUklORyB0eXBlIGlzIHRoZSBkYXRhIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgbmVlZGVkIGluZm8KICAgIGFib3V0IGEgc3RyaW5nIG9yIGEgcHJvbXB0LCBpbmNsdWRpbmcgdGVzdCBkYXRhIGZvciBhIHZlcmlmaWNhdGlvbiBwcm9tcHQuCiAqLwotREVDTEFSRV9TVEFDS19PRihVSV9TVFJJTkcpCiB0eXBlZGVmIHN0cnVjdCB1aV9zdHJpbmdfc3QgVUlfU1RSSU5HOworREVDTEFSRV9TVEFDS19PRihVSV9TVFJJTkcpCiAKIC8qIFRoZSBkaWZmZXJlbnQgdHlwZXMgb2Ygc3RyaW5ncyB0aGF0IGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkLgogICAgVGhpcyBpcyBvbmx5IG5lZWRlZCBieSBtZXRob2QgYXV0aG9ycy4gKi8KQEAgLTMxMCwxMSArMzEwLDEzIEBACiBpbnQgVUlfbWV0aG9kX3NldF9mbHVzaGVyKFVJX01FVEhPRCAqbWV0aG9kLCBpbnQgKCpmbHVzaGVyKShVSSAqdWkpKTsKIGludCBVSV9tZXRob2Rfc2V0X3JlYWRlcihVSV9NRVRIT0QgKm1ldGhvZCwgaW50ICgqcmVhZGVyKShVSSAqdWksIFVJX1NUUklORyAqdWlzKSk7CiBpbnQgVUlfbWV0aG9kX3NldF9jbG9zZXIoVUlfTUVUSE9EICptZXRob2QsIGludCAoKmNsb3NlcikoVUkgKnVpKSk7CitpbnQgVUlfbWV0aG9kX3NldF9wcm9tcHRfY29uc3RydWN0b3IoVUlfTUVUSE9EICptZXRob2QsIGNoYXIgKigqcHJvbXB0X2NvbnN0cnVjdG9yKShVSSogdWksIGNvbnN0IGNoYXIqIG9iamVjdF9kZXNjLCBjb25zdCBjaGFyKiBvYmplY3RfbmFtZSkpOwogaW50ICgqVUlfbWV0aG9kX2dldF9vcGVuZXIoVUlfTUVUSE9EICptZXRob2QpKShVSSopOwogaW50ICgqVUlfbWV0aG9kX2dldF93cml0ZXIoVUlfTUVUSE9EICptZXRob2QpKShVSSosVUlfU1RSSU5HKik7CiBpbnQgKCpVSV9tZXRob2RfZ2V0X2ZsdXNoZXIoVUlfTUVUSE9EICptZXRob2QpKShVSSopOwogaW50ICgqVUlfbWV0aG9kX2dldF9yZWFkZXIoVUlfTUVUSE9EICptZXRob2QpKShVSSosVUlfU1RSSU5HKik7CiBpbnQgKCpVSV9tZXRob2RfZ2V0X2Nsb3NlcihVSV9NRVRIT0QgKm1ldGhvZCkpKFVJKik7CitjaGFyKiAoKlVJX21ldGhvZF9nZXRfcHJvbXB0X2NvbnN0cnVjdG9yKFVJX01FVEhPRCAqbWV0aG9kKSkoVUkqLCBjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOwogCiAvKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgaGVscGVycyBmb3IgbWV0aG9kIHdyaXRlcnMgdG8gYWNjZXNzIHJlbGV2YW50CiAgICBkYXRhIGZyb20gYSBVSV9TVFJJTkcuICovCmRpZmYgLS1naXQgYS9jcnlwdG8vdWkvdWlfZXJyLmMgYi9jcnlwdG8vdWkvdWlfZXJyLmMKaW5kZXggNzg2YmQwZC4uYTZiOTYyOSAxMDA2NDQKLS0tIGEvY3J5cHRvL3VpL3VpX2Vyci5jCisrKyBiL2NyeXB0by91aS91aV9lcnIuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIGNyeXB0by91aS91aV9lcnIuYyAqLwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA1IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDYgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKZGlmZiAtLWdpdCBhL2NyeXB0by91aS91aV9saWIuYyBiL2NyeXB0by91aS91aV9saWIuYwppbmRleCBhYzAxMDA4Li5hOGFiYzI3IDEwMDY0NAotLS0gYS9jcnlwdG8vdWkvdWlfbGliLmMKKysrIGIvY3J5cHRvL3VpL3VpX2xpYi5jCkBAIC02OTMsNiArNjkzLDE3IEBACiAJCXJldHVybiAtMTsKIAl9CiAKK2ludCBVSV9tZXRob2Rfc2V0X3Byb21wdF9jb25zdHJ1Y3RvcihVSV9NRVRIT0QgKm1ldGhvZCwgY2hhciAqKCpwcm9tcHRfY29uc3RydWN0b3IpKFVJKiB1aSwgY29uc3QgY2hhciogb2JqZWN0X2Rlc2MsIGNvbnN0IGNoYXIqIG9iamVjdF9uYW1lKSkKKwl7CisJaWYgKG1ldGhvZCkKKwkJeworCQltZXRob2QtPnVpX2NvbnN0cnVjdF9wcm9tcHQgPSBwcm9tcHRfY29uc3RydWN0b3I7CisJCXJldHVybiAwOworCQl9CisJZWxzZQorCQlyZXR1cm4gLTE7CisJfQorCiBpbnQgKCpVSV9tZXRob2RfZ2V0X29wZW5lcihVSV9NRVRIT0QgKm1ldGhvZCkpKFVJKikKIAl7CiAJaWYgKG1ldGhvZCkKQEAgLTczMyw2ICs3NDQsMTQgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCitjaGFyKiAoKlVJX21ldGhvZF9nZXRfcHJvbXB0X2NvbnN0cnVjdG9yKFVJX01FVEhPRCAqbWV0aG9kKSkoVUkqLCBjb25zdCBjaGFyKiwgY29uc3QgY2hhciopCisJeworCWlmIChtZXRob2QpCisJCXJldHVybiBtZXRob2QtPnVpX2NvbnN0cnVjdF9wcm9tcHQ7CisJZWxzZQorCQlyZXR1cm4gTlVMTDsKKwl9CisKIGVudW0gVUlfc3RyaW5nX3R5cGVzIFVJX2dldF9zdHJpbmdfdHlwZShVSV9TVFJJTkcgKnVpcykKIAl7CiAJaWYgKCF1aXMpCmRpZmYgLS1naXQgYS9jcnlwdG8vdWkvdWlfb3BlbnNzbC5jIGIvY3J5cHRvL3VpL3VpX29wZW5zc2wuYwppbmRleCAwNjI3MGYwLi4xYmMyNWY0IDEwMDY0NAotLS0gYS9jcnlwdG8vdWkvdWlfb3BlbnNzbC5jCisrKyBiL2NyeXB0by91aS91aV9vcGVuc3NsLmMKQEAgLTEyMiw3ICsxMjIsOSBAQAogICogc2lnYWN0aW9uIGFuZCBmaWxlbm8gaW5jbHVkZWQuIC1wZWRhbnRpYyB3b3VsZCBiZSBtb3JlIGFwcHJvcHJpYXRlIGZvcgogICogdGhlIGludGVuZGVkIHB1cnBvc2VzLCBidXQgd2UgY2FuJ3QgcHJldmVudCB1c2VycyBmcm9tIGFkZGluZyAtYW5zaS4KICAqLwotI2RlZmluZSBfUE9TSVhfQ19TT1VSQ0UgMQorI2lmbmRlZiBfUE9TSVhfQ19TT1VSQ0UKKyNkZWZpbmUgX1BPU0lYX0NfU09VUkNFIDIKKyNlbmRpZgogI2luY2x1ZGUgPHNpZ25hbC5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CkBAIC00NzYsNyArNDc4LDcgQEAKIAlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1VJKTsKIAlpc19hX3R0eSA9IDE7CiAKLSNpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX01BQ0lOVE9TSF9DTEFTU0lDKSB8fCBkZWZpbmVkKE9QRU5TU0xfU1lTX1ZYV09SS1MpIHx8IGRlZmluZWQoT1BFTlNTTF9TWVNfTkVUV0FSRSkKKyNpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX01BQ0lOVE9TSF9DTEFTU0lDKSB8fCBkZWZpbmVkKE9QRU5TU0xfU1lTX1ZYV09SS1MpIHx8IGRlZmluZWQoT1BFTlNTTF9TWVNfTkVUV0FSRSkgfHwgZGVmaW5lZChPUEVOU1NMX1NZU19CRU9TKQogCXR0eV9pbj1zdGRpbjsKIAl0dHlfb3V0PXN0ZGVycjsKICNlbHNlCmRpZmYgLS1naXQgYS9jcnlwdG8veDUwOS9NYWtlZmlsZSBiL2NyeXB0by94NTA5L01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjQ3NTJiLi4wMDAwMDAwCi0tLSBhL2NyeXB0by94NTA5L01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsNDE3ICswLDAgQEAKLSMKLSMgT3BlblNTTC9jcnlwdG8veDUwOS9NYWtlZmlsZQotIwotCi1ESVI9CXg1MDkKLVRPUD0JLi4vLi4KLUNDPQljYwotSU5DTFVERVM9IC1JLi4gLUkkKFRPUCkgLUkuLi8uLi9pbmNsdWRlCi1DRkxBRz0tZwotTUFLRUZJTEU9CU1ha2VmaWxlCi1BUj0JCWFyIHIKLQotQ0ZMQUdTPSAkKElOQ0xVREVTKSAkKENGTEFHKQotCi1HRU5FUkFMPU1ha2VmaWxlIFJFQURNRQotVEVTVD0KLUFQUFM9Ci0KLUxJQj0kKFRPUCkvbGliY3J5cHRvLmEKLUxJQlNSQz0JeDUwOV9kZWYuYyB4NTA5X2QyLmMgeDUwOV9yMnguYyB4NTA5X2NtcC5jIFwKLQl4NTA5X29iai5jIHg1MDlfcmVxLmMgeDUwOXNwa2kuYyB4NTA5X3ZmeS5jIFwKLQl4NTA5X3NldC5jIHg1MDljc2V0LmMgeDUwOXJzZXQuYyB4NTA5X2Vyci5jIFwKLQl4NTA5bmFtZS5jIHg1MDlfdjMuYyB4NTA5X2V4dC5jIHg1MDlfYXR0LmMgXAotCXg1MDl0eXBlLmMgeDUwOV9sdS5jIHhfYWxsLmMgeDUwOV90eHQuYyBcCi0JeDUwOV90cnMuYyBieV9maWxlLmMgYnlfZGlyLmMgeDUwOV92cG0uYwotTElCT0JKPSB4NTA5X2RlZi5vIHg1MDlfZDIubyB4NTA5X3IyeC5vIHg1MDlfY21wLm8gXAotCXg1MDlfb2JqLm8geDUwOV9yZXEubyB4NTA5c3BraS5vIHg1MDlfdmZ5Lm8gXAotCXg1MDlfc2V0Lm8geDUwOWNzZXQubyB4NTA5cnNldC5vIHg1MDlfZXJyLm8gXAotCXg1MDluYW1lLm8geDUwOV92My5vIHg1MDlfZXh0Lm8geDUwOV9hdHQubyBcCi0JeDUwOXR5cGUubyB4NTA5X2x1Lm8geF9hbGwubyB4NTA5X3R4dC5vIFwKLQl4NTA5X3Rycy5vIGJ5X2ZpbGUubyBieV9kaXIubyB4NTA5X3ZwbS5vCi0KLVNSQz0gJChMSUJTUkMpCi0KLUVYSEVBREVSPSB4NTA5LmggeDUwOV92ZnkuaAotSEVBREVSPQkkKEVYSEVBREVSKQotCi1BTEw9ICAgICQoR0VORVJBTCkgJChTUkMpICQoSEVBREVSKQotCi10b3A6Ci0JKGNkIC4uLy4uOyAkKE1BS0UpIERJUlM9Y3J5cHRvIFNESVJTPSQoRElSKSBzdWJfYWxsKQotCi1hbGw6CWxpYgotCi1saWI6CSQoTElCT0JKKQotCSQoQVJYKSAkKExJQikgJChMSUJPQkopCi0JJChSQU5MSUIpICQoTElCKSB8fCBlY2hvIE5ldmVyIG1pbmQuCi0JQHRvdWNoIGxpYgotCi1maWxlczoKLQkkKFBFUkwpICQoVE9QKS91dGlsL2ZpbGVzLnBsIE1ha2VmaWxlLnNzbCA+PiAkKFRPUCkvTUlORk8KLQotbGlua3M6Ci0JQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL2luY2x1ZGUvb3BlbnNzbCAkKEVYSEVBREVSKQotCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi90ZXN0ICQoVEVTVCkKLQlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vYXBwcyAkKEFQUFMpCi0KLWluc3RhbGw6Ci0JQFsgLW4gIiQoSU5TVEFMTFRPUCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHRvcCBNYWtlZmlsZS4uLgotCUBoZWFkZXJsaXN0PSIkKEVYSEVBREVSKSI7IGZvciBpIGluICQkaGVhZGVybGlzdCA7IFwKLQlkbyAgXAotCShjcCAkJGkgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGk7IFwKLQljaG1vZCA2NDQgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGkgKTsgXAotCWRvbmU7Ci0KLXRhZ3M6Ci0JY3RhZ3MgJChTUkMpCi0KLXRlc3RzOgotCi1saW50OgotCWxpbnQgLURMSU5UICQoSU5DTFVERVMpICQoU1JDKT5mbHVmZgotCi1kZXBlbmQ6Ci0JQFsgLW4gIiQoTUFLRURFUEVORCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHVwcGVyIE1ha2VmaWxlLi4uCi0JJChNQUtFREVQRU5EKSAtLSAkKENGTEFHKSAkKElOQ0xVREVTKSAkKERFUEZMQUcpIC0tICQoUFJPR1MpICQoTElCU1JDKQotCi1kY2xlYW46Ci0JJChQRVJMKSAtcGUgJ2lmICgvXiMgRE8gTk9UIERFTEVURSBUSElTIExJTkUvKSB7cHJpbnQ7IGV4aXQoMCk7fScgJChNQUtFRklMRSkgPk1ha2VmaWxlLm5ldwotCW12IC1mIE1ha2VmaWxlLm5ldyAkKE1BS0VGSUxFKQotCi1jbGVhbjoKLQlybSAtZiAqLm8gKi5vYmogbGliIHRhZ3MgY29yZSAucHVyZSAubmZzKiAqLm9sZCAqLmJhayBmbHVmZgotCi0jIERPIE5PVCBERUxFVEUgVEhJUyBMSU5FIC0tIG1ha2UgZGVwZW5kIGRlcGVuZHMgb24gaXQuCi0KLWJ5X2Rpci5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWJ5X2Rpci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1ieV9kaXIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLWJ5X2Rpci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi1ieV9kaXIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotYnlfZGlyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLWJ5X2Rpci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLWJ5X2Rpci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotYnlfZGlyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi1ieV9kaXIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotYnlfZGlyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1ieV9kaXIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAotYnlfZGlyLm86IC4uL2NyeXB0bGliLmggYnlfZGlyLmMKLWJ5X2ZpbGUubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLWJ5X2ZpbGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotYnlfZmlsZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLWJ5X2ZpbGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotYnlfZmlsZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLWJ5X2ZpbGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLWJ5X2ZpbGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotYnlfZmlsZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi1ieV9maWxlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1ieV9maWxlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wZW0uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGVtMi5oCi1ieV9maWxlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotYnlfZmlsZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWJ5X2ZpbGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotYnlfZmlsZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9jcnlwdGxpYi5oIGJ5X2ZpbGUuYwoteDUwOV9hdHQubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLXg1MDlfYXR0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXg1MDlfYXR0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi14NTA5X2F0dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAoteDUwOV9hdHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAoteDUwOV9hdHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAoteDUwOV9hdHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAoteDUwOV9hdHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi14NTA5X2F0dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAoteDUwOV9hdHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXg1MDlfYXR0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAoteDUwOV9hdHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi14NTA5X2F0dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi14NTA5X2F0dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOXYzLmgKLXg1MDlfYXR0Lm86IC4uL2NyeXB0bGliLmggeDUwOV9hdHQuYwoteDUwOV9jbXAubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLXg1MDlfY21wLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXg1MDlfY21wLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi14NTA5X2NtcC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAoteDUwOV9jbXAubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAoteDUwOV9jbXAubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAoteDUwOV9jbXAubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAoteDUwOV9jbXAubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi14NTA5X2NtcC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAoteDUwOV9jbXAubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXg1MDlfY21wLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAoteDUwOV9jbXAubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi14NTA5X2NtcC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi14NTA5X2NtcC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOXYzLmgKLXg1MDlfY21wLm86IC4uL2NyeXB0bGliLmggeDUwOV9jbXAuYwoteDUwOV9kMi5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAoteDUwOV9kMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi14NTA5X2QyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAoteDUwOV9kMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi14NTA5X2QyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAoteDUwOV9kMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAoteDUwOV9kMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi14NTA5X2QyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXg1MDlfZDIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXg1MDlfZDIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi14NTA5X2QyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAoteDUwOV9kMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi14NTA5X2QyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2NyeXB0bGliLmggeDUwOV9kMi5jCi14NTA5X2RlZi5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAoteDUwOV9kZWYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAoteDUwOV9kZWYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi14NTA5X2RlZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi14NTA5X2RlZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLXg1MDlfZGVmLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi14NTA5X2RlZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi14NTA5X2RlZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi14NTA5X2RlZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAoteDUwOV9kZWYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi14NTA5X2RlZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLXg1MDlfZGVmLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLXg1MDlfZGVmLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2NyeXB0bGliLmggeDUwOV9kZWYuYwoteDUwOV9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXg1MDlfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLXg1MDlfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi14NTA5X2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi14NTA5X2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi14NTA5X2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi14NTA5X2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLXg1MDlfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi14NTA5X2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAoteDUwOV9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi14NTA5X2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLXg1MDlfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLXg1MDlfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIHg1MDlfZXJyLmMKLXg1MDlfZXh0Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi14NTA5X2V4dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi14NTA5X2V4dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAoteDUwOV9leHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLXg1MDlfZXh0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLXg1MDlfZXh0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLXg1MDlfZXh0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLXg1MDlfZXh0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAoteDUwOV9leHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXg1MDlfZXh0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi14NTA5X2V4dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLXg1MDlfZXh0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAoteDUwOV9leHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAoteDUwOV9leHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDl2My5oCi14NTA5X2V4dC5vOiAuLi9jcnlwdGxpYi5oIHg1MDlfZXh0LmMKLXg1MDlfbHUubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLXg1MDlfbHUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAoteDUwOV9sdS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAoteDUwOV9sdS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAoteDUwOV9sdS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi14NTA5X2x1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLXg1MDlfbHUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAoteDUwOV9sdS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLXg1MDlfbHUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLXg1MDlfbHUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLXg1MDlfbHUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAoteDUwOV9sdS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAoteDUwOV9sdS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oCi14NTA5X2x1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5djMuaCAuLi9jcnlwdGxpYi5oIHg1MDlfbHUuYwoteDUwOV9vYmoubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLXg1MDlfb2JqLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXg1MDlfb2JqLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAoteDUwOV9vYmoubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAoteDUwOV9vYmoubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi14NTA5X29iai5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAoteDUwOV9vYmoubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAoteDUwOV9vYmoubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAoteDUwOV9vYmoubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXg1MDlfb2JqLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAoteDUwOV9vYmoubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi14NTA5X29iai5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi14NTA5X29iai5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9jcnlwdGxpYi5oIHg1MDlfb2JqLmMKLXg1MDlfcjJ4Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi14NTA5X3IyeC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmgKLXg1MDlfcjJ4Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLXg1MDlfcjJ4Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi14NTA5X3IyeC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi14NTA5X3IyeC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi14NTA5X3IyeC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi14NTA5X3IyeC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLXg1MDlfcjJ4Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi14NTA5X3IyeC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAoteDUwOV9yMngubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi14NTA5X3IyeC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLXg1MDlfcjJ4Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLXg1MDlfcjJ4Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2NyeXB0bGliLmggeDUwOV9yMnguYwoteDUwOV9yZXEubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLXg1MDlfcmVxLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaAoteDUwOV9yZXEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAoteDUwOV9yZXEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLXg1MDlfcmVxLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLXg1MDlfcmVxLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLXg1MDlfcmVxLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLXg1MDlfcmVxLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAoteDUwOV9yZXEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXg1MDlfcmVxLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi14NTA5X3JlcS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGVtLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaAoteDUwOV9yZXEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi14NTA5X3JlcS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLXg1MDlfcmVxLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLXg1MDlfcmVxLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2NyeXB0bGliLmggeDUwOV9yZXEuYwoteDUwOV9zZXQubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLXg1MDlfc2V0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXg1MDlfc2V0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAoteDUwOV9zZXQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAoteDUwOV9zZXQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi14NTA5X3NldC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAoteDUwOV9zZXQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAoteDUwOV9zZXQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAoteDUwOV9zZXQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXg1MDlfc2V0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAoteDUwOV9zZXQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi14NTA5X3NldC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi14NTA5X3NldC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9jcnlwdGxpYi5oIHg1MDlfc2V0LmMKLXg1MDlfdHJzLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi14NTA5X3Rycy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi14NTA5X3Rycy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAoteDUwOV90cnMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLXg1MDlfdHJzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLXg1MDlfdHJzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLXg1MDlfdHJzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLXg1MDlfdHJzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAoteDUwOV90cnMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXg1MDlfdHJzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi14NTA5X3Rycy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLXg1MDlfdHJzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAoteDUwOV90cnMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAoteDUwOV90cnMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDl2My5oCi14NTA5X3Rycy5vOiAuLi9jcnlwdGxpYi5oIHg1MDlfdHJzLmMKLXg1MDlfdHh0Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi14NTA5X3R4dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi14NTA5X3R4dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLXg1MDlfdHh0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKLXg1MDlfdHh0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAoteDUwOV90eHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLXg1MDlfdHh0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLXg1MDlfdHh0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXg1MDlfdHh0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi14NTA5X3R4dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLXg1MDlfdHh0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAoteDUwOV90eHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAoteDUwOV90eHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vY3J5cHRsaWIuaCB4NTA5X3R4dC5jCi14NTA5X3YzLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi14NTA5X3YzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXg1MDlfdjMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLXg1MDlfdjMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLXg1MDlfdjMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAoteDUwOV92My5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi14NTA5X3YzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLXg1MDlfdjMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi14NTA5X3YzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi14NTA5X3YzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi14NTA5X3YzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLXg1MDlfdjMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLXg1MDlfdjMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAoteDUwOV92My5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOXYzLmggLi4vY3J5cHRsaWIuaCB4NTA5X3YzLmMKLXg1MDlfdmZ5Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi14NTA5X3ZmeS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi14NTA5X3ZmeS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAoteDUwOV92ZnkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLXg1MDlfdmZ5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLXg1MDlfdmZ5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLXg1MDlfdmZ5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLXg1MDlfdmZ5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAoteDUwOV92ZnkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXg1MDlfdmZ5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi14NTA5X3ZmeS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLXg1MDlfdmZ5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAoteDUwOV92ZnkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAoteDUwOV92ZnkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDl2My5oCi14NTA5X3ZmeS5vOiAuLi9jcnlwdGxpYi5oIHg1MDlfdmZ5LmMKLXg1MDlfdnBtLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi14NTA5X3ZwbS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi14NTA5X3ZwbS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAoteDUwOV92cG0ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLXg1MDlfdnBtLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLXg1MDlfdnBtLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLXg1MDlfdnBtLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLXg1MDlfdnBtLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAoteDUwOV92cG0ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXg1MDlfdnBtLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi14NTA5X3ZwbS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLXg1MDlfdnBtLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAoteDUwOV92cG0ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAoteDUwOV92cG0ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDl2My5oCi14NTA5X3ZwbS5vOiAuLi9jcnlwdGxpYi5oIHg1MDlfdnBtLmMKLXg1MDljc2V0Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi14NTA5Y3NldC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi14NTA5Y3NldC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLXg1MDljc2V0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKLXg1MDljc2V0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAoteDUwOWNzZXQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLXg1MDljc2V0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLXg1MDljc2V0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXg1MDljc2V0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi14NTA5Y3NldC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLXg1MDljc2V0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAoteDUwOWNzZXQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAoteDUwOWNzZXQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vY3J5cHRsaWIuaCB4NTA5Y3NldC5jCi14NTA5bmFtZS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAoteDUwOW5hbWUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAoteDUwOW5hbWUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi14NTA5bmFtZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi14NTA5bmFtZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLXg1MDluYW1lLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi14NTA5bmFtZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi14NTA5bmFtZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi14NTA5bmFtZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAoteDUwOW5hbWUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi14NTA5bmFtZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLXg1MDluYW1lLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLXg1MDluYW1lLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2NyeXB0bGliLmggeDUwOW5hbWUuYwoteDUwOXJzZXQubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLXg1MDlyc2V0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXg1MDlyc2V0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAoteDUwOXJzZXQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAoteDUwOXJzZXQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi14NTA5cnNldC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAoteDUwOXJzZXQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAoteDUwOXJzZXQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAoteDUwOXJzZXQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXg1MDlyc2V0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAoteDUwOXJzZXQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi14NTA5cnNldC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi14NTA5cnNldC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9jcnlwdGxpYi5oIHg1MDlyc2V0LmMKLXg1MDlzcGtpLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi14NTA5c3BraS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi14NTA5c3BraS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLXg1MDlzcGtpLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKLXg1MDlzcGtpLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAoteDUwOXNwa2kubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLXg1MDlzcGtpLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLXg1MDlzcGtpLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXg1MDlzcGtpLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi14NTA5c3BraS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLXg1MDlzcGtpLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAoteDUwOXNwa2kubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAoteDUwOXNwa2kubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vY3J5cHRsaWIuaCB4NTA5c3BraS5jCi14NTA5dHlwZS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAoteDUwOXR5cGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAoteDUwOXR5cGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi14NTA5dHlwZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi14NTA5dHlwZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLXg1MDl0eXBlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi14NTA5dHlwZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi14NTA5dHlwZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi14NTA5dHlwZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAoteDUwOXR5cGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi14NTA5dHlwZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLXg1MDl0eXBlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLXg1MDl0eXBlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2NyeXB0bGliLmggeDUwOXR5cGUuYwoteF9hbGwubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi14X2FsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi14X2FsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLXhfYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKLXhfYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAoteF9hbGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLXhfYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLXhfYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXhfYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi14X2FsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKLXhfYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLXhfYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi14X2FsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oCi14X2FsbC5vOiAuLi9jcnlwdGxpYi5oIHhfYWxsLmMKZGlmZiAtLWdpdCBhL2NyeXB0by94NTA5L2J5X2Rpci5jIGIvY3J5cHRvL3g1MDkvYnlfZGlyLmMKaW5kZXggYjNhY2Q4MC4uMjdjYTUxNSAxMDA2NDQKLS0tIGEvY3J5cHRvL3g1MDkvYnlfZGlyLmMKKysrIGIvY3J5cHRvL3g1MDkvYnlfZGlyLmMKQEAgLTY1LDI4ICs2NSwzNiBAQAogI2lmbmRlZiBOT19TWVNfVFlQRVNfSAogIyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNlbmRpZgotI2lmZGVmIE1BQ19PU19wcmVfWAotIyBpbmNsdWRlIDxzdGF0Lmg+Ci0jZWxzZQorI2lmbmRlZiBPUEVOU1NMX05PX1BPU0lYX0lPCiAjIGluY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjZW5kaWYKIAogI2luY2x1ZGUgPG9wZW5zc2wvbGhhc2guaD4KICNpbmNsdWRlIDxvcGVuc3NsL3g1MDkuaD4KIAotI2lmZGVmIF9XSU4zMgotI2RlZmluZSBzdGF0CV9zdGF0Ci0jZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgbG9va3VwX2Rpcl9oYXNoZXNfc3QKKwl7CisJdW5zaWduZWQgbG9uZyBoYXNoOworCWludCBzdWZmaXg7CisJfSBCWV9ESVJfSEFTSDsKKwordHlwZWRlZiBzdHJ1Y3QgbG9va3VwX2Rpcl9lbnRyeV9zdAorCXsKKwljaGFyICpkaXI7CisJaW50IGRpcl90eXBlOworCVNUQUNLX09GKEJZX0RJUl9IQVNIKSAqaGFzaGVzOworCX0gQllfRElSX0VOVFJZOwogCiB0eXBlZGVmIHN0cnVjdCBsb29rdXBfZGlyX3N0CiAJewogCUJVRl9NRU0gKmJ1ZmZlcjsKLQlpbnQgbnVtX2RpcnM7Ci0JY2hhciAqKmRpcnM7Ci0JaW50ICpkaXJzX3R5cGU7Ci0JaW50IG51bV9kaXJzX2FsbG9jZWQ7CisJU1RBQ0tfT0YoQllfRElSX0VOVFJZKSAqZGlyczsKIAl9IEJZX0RJUjsKIAorREVDTEFSRV9TVEFDS19PRihCWV9ESVJfSEFTSCkKK0RFQ0xBUkVfU1RBQ0tfT0YoQllfRElSX0VOVFJZKQorCiBzdGF0aWMgaW50IGRpcl9jdHJsKFg1MDlfTE9PS1VQICpjdHgsIGludCBjbWQsIGNvbnN0IGNoYXIgKmFyZ3AsIGxvbmcgYXJnbCwKIAljaGFyICoqcmV0KTsKIHN0YXRpYyBpbnQgbmV3X2RpcihYNTA5X0xPT0tVUCAqbHUpOwpAQCAtMTI3LDcgKzEzNSw3IEBACiAJY2FzZSBYNTA5X0xfQUREX0RJUjoKIAkJaWYgKGFyZ2wgPT0gWDUwOV9GSUxFVFlQRV9ERUZBVUxUKQogCQkJewotCQkJZGlyPShjaGFyICopR2V0ZW52KFg1MDlfZ2V0X2RlZmF1bHRfY2VydF9kaXJfZW52KCkpOworCQkJZGlyPShjaGFyICopZ2V0ZW52KFg1MDlfZ2V0X2RlZmF1bHRfY2VydF9kaXJfZW52KCkpOwogCQkJaWYgKGRpcikKIAkJCQlyZXQ9YWRkX2NlcnRfZGlyKGxkLGRpcixYNTA5X0ZJTEVUWVBFX1BFTSk7CiAJCQllbHNlCkBAIC0xNTYsMzQgKzE2NCw1MSBAQAogCQlPUEVOU1NMX2ZyZWUoYSk7CiAJCXJldHVybigwKTsKIAkJfQotCWEtPm51bV9kaXJzPTA7CiAJYS0+ZGlycz1OVUxMOwotCWEtPmRpcnNfdHlwZT1OVUxMOwotCWEtPm51bV9kaXJzX2FsbG9jZWQ9MDsKIAlsdS0+bWV0aG9kX2RhdGE9KGNoYXIgKilhOwogCXJldHVybigxKTsKIAl9CiAKK3N0YXRpYyB2b2lkIGJ5X2Rpcl9oYXNoX2ZyZWUoQllfRElSX0hBU0ggKmhhc2gpCisJeworCU9QRU5TU0xfZnJlZShoYXNoKTsKKwl9CisKK3N0YXRpYyBpbnQgYnlfZGlyX2hhc2hfY21wKGNvbnN0IEJZX0RJUl9IQVNIICogY29uc3QgKmEsCisJCQljb25zdCBCWV9ESVJfSEFTSCAqIGNvbnN0ICpiKQorCXsKKwlpZiAoKCphKS0+aGFzaCA+ICgqYiktPmhhc2gpCisJCXJldHVybiAxOworCWlmICgoKmEpLT5oYXNoIDwgKCpiKS0+aGFzaCkKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworCX0KKworc3RhdGljIHZvaWQgYnlfZGlyX2VudHJ5X2ZyZWUoQllfRElSX0VOVFJZICplbnQpCisJeworCWlmIChlbnQtPmRpcikKKwkJT1BFTlNTTF9mcmVlKGVudC0+ZGlyKTsKKwlpZiAoZW50LT5oYXNoZXMpCisJCXNrX0JZX0RJUl9IQVNIX3BvcF9mcmVlKGVudC0+aGFzaGVzLCBieV9kaXJfaGFzaF9mcmVlKTsKKwlPUEVOU1NMX2ZyZWUoZW50KTsKKwl9CisKIHN0YXRpYyB2b2lkIGZyZWVfZGlyKFg1MDlfTE9PS1VQICpsdSkKIAl7CiAJQllfRElSICphOwotCWludCBpOwogCiAJYT0oQllfRElSICopbHUtPm1ldGhvZF9kYXRhOwotCWZvciAoaT0wOyBpPGEtPm51bV9kaXJzOyBpKyspCi0JCWlmIChhLT5kaXJzW2ldICE9IE5VTEwpIE9QRU5TU0xfZnJlZShhLT5kaXJzW2ldKTsKLQlpZiAoYS0+ZGlycyAhPSBOVUxMKSBPUEVOU1NMX2ZyZWUoYS0+ZGlycyk7Ci0JaWYgKGEtPmRpcnNfdHlwZSAhPSBOVUxMKSBPUEVOU1NMX2ZyZWUoYS0+ZGlyc190eXBlKTsKLQlpZiAoYS0+YnVmZmVyICE9IE5VTEwpIEJVRl9NRU1fZnJlZShhLT5idWZmZXIpOworCWlmIChhLT5kaXJzICE9IE5VTEwpCisJCXNrX0JZX0RJUl9FTlRSWV9wb3BfZnJlZShhLT5kaXJzLCBieV9kaXJfZW50cnlfZnJlZSk7CisJaWYgKGEtPmJ1ZmZlciAhPSBOVUxMKQorCQlCVUZfTUVNX2ZyZWUoYS0+YnVmZmVyKTsKIAlPUEVOU1NMX2ZyZWUoYSk7CiAJfQogCiBzdGF0aWMgaW50IGFkZF9jZXJ0X2RpcihCWV9ESVIgKmN0eCwgY29uc3QgY2hhciAqZGlyLCBpbnQgdHlwZSkKIAl7CiAJaW50IGosbGVuOwotCWludCAqaXA7CiAJY29uc3QgY2hhciAqcywqc3MsKnA7Ci0JY2hhciAqKnBwOwogCiAJaWYgKGRpciA9PSBOVUxMIHx8ICEqZGlyKQogCSAgICB7CkBAIC0xOTcsNDkgKzIyMiw1MiBAQAogCQl7CiAJCWlmICgoKnAgPT0gTElTVF9TRVBBUkFUT1JfQ0hBUikgfHwgKCpwID09ICdcMCcpKQogCQkJeworCQkJQllfRElSX0VOVFJZICplbnQ7CiAJCQlzcz1zOwogCQkJcz1wKzE7CiAJCQlsZW49KGludCkocC1zcyk7CiAJCQlpZiAobGVuID09IDApIGNvbnRpbnVlOwotCQkJZm9yIChqPTA7IGo8Y3R4LT5udW1fZGlyczsgaisrKQotCQkJCWlmIChzdHJsZW4oY3R4LT5kaXJzW2pdKSA9PSAoc2l6ZV90KWxlbiAmJgotCQkJCSAgICBzdHJuY21wKGN0eC0+ZGlyc1tqXSxzcywodW5zaWduZWQgaW50KWxlbikgPT0gMCkKLQkJCQkJYnJlYWs7Ci0JCQlpZiAoajxjdHgtPm51bV9kaXJzKQotCQkJCWNvbnRpbnVlOwotCQkJaWYgKGN0eC0+bnVtX2RpcnNfYWxsb2NlZCA8IChjdHgtPm51bV9kaXJzKzEpKQorCQkJZm9yIChqPTA7IGogPCBza19CWV9ESVJfRU5UUllfbnVtKGN0eC0+ZGlycyk7IGorKykKIAkJCQl7Ci0JCQkJY3R4LT5udW1fZGlyc19hbGxvY2VkKz0xMDsKLQkJCQlwcD0oY2hhciAqKilPUEVOU1NMX21hbGxvYyhjdHgtPm51bV9kaXJzX2FsbG9jZWQqCi0JCQkJCXNpemVvZihjaGFyICopKTsKLQkJCQlpcD0oaW50ICopT1BFTlNTTF9tYWxsb2MoY3R4LT5udW1fZGlyc19hbGxvY2VkKgotCQkJCQlzaXplb2YoaW50KSk7Ci0JCQkJaWYgKChwcCA9PSBOVUxMKSB8fCAoaXAgPT0gTlVMTCkpCisJCQkJZW50ID0gc2tfQllfRElSX0VOVFJZX3ZhbHVlKGN0eC0+ZGlycywgaik7CisJCQkJaWYgKHN0cmxlbihlbnQtPmRpcikgPT0gKHNpemVfdClsZW4gJiYKKwkJCQkgICAgc3RybmNtcChlbnQtPmRpcixzcywodW5zaWduZWQgaW50KWxlbikgPT0gMCkKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJaWYgKGogPCBza19CWV9ESVJfRU5UUllfbnVtKGN0eC0+ZGlycykpCisJCQkJY29udGludWU7CisJCQlpZiAoY3R4LT5kaXJzID09IE5VTEwpCisJCQkJeworCQkJCWN0eC0+ZGlycyA9IHNrX0JZX0RJUl9FTlRSWV9uZXdfbnVsbCgpOworCQkJCWlmICghY3R4LT5kaXJzKQogCQkJCQl7CiAJCQkJCVg1MDllcnIoWDUwOV9GX0FERF9DRVJUX0RJUixFUlJfUl9NQUxMT0NfRkFJTFVSRSk7Ci0JCQkJCXJldHVybigwKTsKKwkJCQkJcmV0dXJuIDA7CiAJCQkJCX0KLQkJCQltZW1jcHkocHAsY3R4LT5kaXJzLChjdHgtPm51bV9kaXJzX2FsbG9jZWQtMTApKgotCQkJCQlzaXplb2YoY2hhciAqKSk7Ci0JCQkJbWVtY3B5KGlwLGN0eC0+ZGlyc190eXBlLChjdHgtPm51bV9kaXJzX2FsbG9jZWQtMTApKgotCQkJCQlzaXplb2YoaW50KSk7Ci0JCQkJaWYgKGN0eC0+ZGlycyAhPSBOVUxMKQotCQkJCQlPUEVOU1NMX2ZyZWUoY3R4LT5kaXJzKTsKLQkJCQlpZiAoY3R4LT5kaXJzX3R5cGUgIT0gTlVMTCkKLQkJCQkJT1BFTlNTTF9mcmVlKGN0eC0+ZGlyc190eXBlKTsKLQkJCQljdHgtPmRpcnM9cHA7Ci0JCQkJY3R4LT5kaXJzX3R5cGU9aXA7CiAJCQkJfQotCQkJY3R4LT5kaXJzX3R5cGVbY3R4LT5udW1fZGlyc109dHlwZTsKLQkJCWN0eC0+ZGlyc1tjdHgtPm51bV9kaXJzXT0oY2hhciAqKU9QRU5TU0xfbWFsbG9jKCh1bnNpZ25lZCBpbnQpbGVuKzEpOwotCQkJaWYgKGN0eC0+ZGlyc1tjdHgtPm51bV9kaXJzXSA9PSBOVUxMKSByZXR1cm4oMCk7Ci0JCQlzdHJuY3B5KGN0eC0+ZGlyc1tjdHgtPm51bV9kaXJzXSxzcywodW5zaWduZWQgaW50KWxlbik7Ci0JCQljdHgtPmRpcnNbY3R4LT5udW1fZGlyc11bbGVuXT0nXDAnOwotCQkJY3R4LT5udW1fZGlycysrOworCQkJZW50ID0gT1BFTlNTTF9tYWxsb2Moc2l6ZW9mKEJZX0RJUl9FTlRSWSkpOworCQkJaWYgKCFlbnQpCisJCQkJcmV0dXJuIDA7CisJCQllbnQtPmRpcl90eXBlID0gdHlwZTsKKwkJCWVudC0+aGFzaGVzID0gc2tfQllfRElSX0hBU0hfbmV3KGJ5X2Rpcl9oYXNoX2NtcCk7CisJCQllbnQtPmRpciA9IE9QRU5TU0xfbWFsbG9jKCh1bnNpZ25lZCBpbnQpbGVuKzEpOworCQkJaWYgKCFlbnQtPmRpciB8fCAhZW50LT5oYXNoZXMpCisJCQkJeworCQkJCWJ5X2Rpcl9lbnRyeV9mcmVlKGVudCk7CisJCQkJcmV0dXJuIDA7CisJCQkJfQorCQkJc3RybmNweShlbnQtPmRpcixzcywodW5zaWduZWQgaW50KWxlbik7CisJCQllbnQtPmRpcltsZW5dID0gJ1wwJzsKKwkJCWlmICghc2tfQllfRElSX0VOVFJZX3B1c2goY3R4LT5kaXJzLCBlbnQpKQorCQkJCXsKKwkJCQlieV9kaXJfZW50cnlfZnJlZShlbnQpOworCQkJCXJldHVybiAwOworCQkJCX0KIAkJCX0KLQkJaWYgKCpwID09ICdcMCcpIGJyZWFrOworCQlpZiAoKnAgPT0gJ1wwJykKKwkJCWJyZWFrOwogCQl9Ci0JcmV0dXJuKDEpOworCXJldHVybiAxOwogCX0KIAogc3RhdGljIGludCBnZXRfY2VydF9ieV9zdWJqZWN0KFg1MDlfTE9PS1VQICp4bCwgaW50IHR5cGUsIFg1MDlfTkFNRSAqbmFtZSwKQEAgLTI2MCw3ICsyODgsNiBAQAogCWludCBpLGosazsKIAl1bnNpZ25lZCBsb25nIGg7CiAJQlVGX01FTSAqYj1OVUxMOwotCXN0cnVjdCBzdGF0IHN0OwogCVg1MDlfT0JKRUNUIHN0bXAsKnRtcDsKIAljb25zdCBjaGFyICpwb3N0Zml4PSIiOwogCkBAIC0yOTYsMjAgKzMyMyw0NSBAQAogCWN0eD0oQllfRElSICopeGwtPm1ldGhvZF9kYXRhOwogCiAJaD1YNTA5X05BTUVfaGFzaChuYW1lKTsKLQlmb3IgKGk9MDsgaTxjdHgtPm51bV9kaXJzOyBpKyspCisJZm9yIChpPTA7IGkgPCBza19CWV9ESVJfRU5UUllfbnVtKGN0eC0+ZGlycyk7IGkrKykKIAkJewotCQlqPXN0cmxlbihjdHgtPmRpcnNbaV0pKzErOCs2KzErMTsKKwkJQllfRElSX0VOVFJZICplbnQ7CisJCWludCBpZHg7CisJCUJZX0RJUl9IQVNIIGh0bXAsICpoZW50OworCQllbnQgPSBza19CWV9ESVJfRU5UUllfdmFsdWUoY3R4LT5kaXJzLCBpKTsKKwkJaj1zdHJsZW4oZW50LT5kaXIpKzErOCs2KzErMTsKIAkJaWYgKCFCVUZfTUVNX2dyb3coYixqKSkKIAkJCXsKIAkJCVg1MDllcnIoWDUwOV9GX0dFVF9DRVJUX0JZX1NVQkpFQ1QsRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwogCQkJZ290byBmaW5pc2g7CiAJCQl9Ci0JCWs9MDsKKwkJaWYgKHR5cGUgPT0gWDUwOV9MVV9DUkwgJiYgZW50LT5oYXNoZXMpCisJCQl7CisJCQlodG1wLmhhc2ggPSBoOworCQkJQ1JZUFRPX3JfbG9jayhDUllQVE9fTE9DS19YNTA5X1NUT1JFKTsKKwkJCWlkeCA9IHNrX0JZX0RJUl9IQVNIX2ZpbmQoZW50LT5oYXNoZXMsICZodG1wKTsKKwkJCWlmIChpZHggPj0gMCkKKwkJCQl7CisJCQkJaGVudCA9IHNrX0JZX0RJUl9IQVNIX3ZhbHVlKGVudC0+aGFzaGVzLCBpZHgpOworCQkJCWsgPSBoZW50LT5zdWZmaXg7CisJCQkJfQorCQkJZWxzZQorCQkJCXsKKwkJCQloZW50ID0gTlVMTDsKKwkJCQlrPTA7CisJCQkJfQorCQkJQ1JZUFRPX3JfdW5sb2NrKENSWVBUT19MT0NLX1g1MDlfU1RPUkUpOworCQkJfQorCQllbHNlCisJCQl7CisJCQlrID0gMDsKKwkJCWhlbnQgPSBOVUxMOworCQkJfQogCQlmb3IgKDs7KQogCQkJewogCQkJY2hhciBjID0gJy8nOwogI2lmZGVmIE9QRU5TU0xfU1lTX1ZNUwotCQkJYyA9IGN0eC0+ZGlyc1tpXVtzdHJsZW4oY3R4LT5kaXJzW2ldKS0xXTsKKwkJCWMgPSBlbnQtPmRpcltzdHJsZW4oZW50LT5kaXIpLTFdOwogCQkJaWYgKGMgIT0gJzonICYmIGMgIT0gJz4nICYmIGMgIT0gJ10nKQogCQkJCXsKIAkJCQkvKiBJZiBubyBzZXBhcmF0b3IgaXMgcHJlc2VudCwgd2UgYXNzdW1lIHRoZQpAQCAtMzMwLDMyICszODIsNDAgQEAKIAkJCQkvKiBUaGlzIGlzIHNwZWNpYWwuICBXaGVuIGMgPT0gJ1wwJywgbm8KIAkJCQkgICBkaXJlY3Rvcnkgc2VwYXJhdG9yIHNob3VsZCBiZSBhZGRlZC4gKi8KIAkJCQlCSU9fc25wcmludGYoYi0+ZGF0YSxiLT5tYXgsCi0JCQkJCSIlcyUwOGx4LiVzJWQiLGN0eC0+ZGlyc1tpXSxoLAorCQkJCQkiJXMlMDhseC4lcyVkIixlbnQtPmRpcixoLAogCQkJCQlwb3N0Zml4LGspOwogCQkJCX0KIAkJCWVsc2UKIAkJCQl7CiAJCQkJQklPX3NucHJpbnRmKGItPmRhdGEsYi0+bWF4LAotCQkJCQkiJXMlYyUwOGx4LiVzJWQiLGN0eC0+ZGlyc1tpXSxjLGgsCisJCQkJCSIlcyVjJTA4bHguJXMlZCIsZW50LT5kaXIsYyxoLAogCQkJCQlwb3N0Zml4LGspOwogCQkJCX0KLQkJCWsrKzsKKyNpZm5kZWYgT1BFTlNTTF9OT19QT1NJWF9JTworI2lmZGVmIF9XSU4zMgorI2RlZmluZSBzdGF0IF9zdGF0CisjZW5kaWYKKwkJCXsKKwkJCXN0cnVjdCBzdGF0IHN0OwogCQkJaWYgKHN0YXQoYi0+ZGF0YSwmc3QpIDwgMCkKIAkJCQlicmVhazsKKwkJCX0KKyNlbmRpZgogCQkJLyogZm91bmQgb25lLiAqLwogCQkJaWYgKHR5cGUgPT0gWDUwOV9MVV9YNTA5KQogCQkJCXsKIAkJCQlpZiAoKFg1MDlfbG9hZF9jZXJ0X2ZpbGUoeGwsYi0+ZGF0YSwKLQkJCQkJY3R4LT5kaXJzX3R5cGVbaV0pKSA9PSAwKQorCQkJCQllbnQtPmRpcl90eXBlKSkgPT0gMCkKIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJZWxzZSBpZiAodHlwZSA9PSBYNTA5X0xVX0NSTCkKIAkJCQl7CiAJCQkJaWYgKChYNTA5X2xvYWRfY3JsX2ZpbGUoeGwsYi0+ZGF0YSwKLQkJCQkJY3R4LT5kaXJzX3R5cGVbaV0pKSA9PSAwKQorCQkJCQllbnQtPmRpcl90eXBlKSkgPT0gMCkKIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJLyogZWxzZSBjYXNlIHdpbGwgY2F1Z2h0IGhpZ2hlciB1cCAqLworCQkJaysrOwogCQkJfQogCiAJCS8qIHdlIGhhdmUgYWRkZWQgaXQgdG8gdGhlIGNhY2hlIHNvIG5vdyBwdWxsCkBAIC0zNjYsNiArNDI2LDQzIEBACiAJCWVsc2UgdG1wID0gTlVMTDsKIAkJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1g1MDlfU1RPUkUpOwogCisKKwkJLyogSWYgYSBDUkwsIHVwZGF0ZSB0aGUgbGFzdCBmaWxlIHN1ZmZpeCBhZGRlZCBmb3IgdGhpcyAqLworCisJCWlmICh0eXBlID09IFg1MDlfTFVfQ1JMKQorCQkJeworCQkJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19YNTA5X1NUT1JFKTsKKwkJCS8qIExvb2sgZm9yIGVudHJ5IGFnYWluIGluIGNhc2UgYW5vdGhlciB0aHJlYWQgYWRkZWQKKwkJCSAqIGFuIGVudHJ5IGZpcnN0LgorCQkJICovCisJCQlpZiAoIWhlbnQpCisJCQkJeworCQkJCWh0bXAuaGFzaCA9IGg7CisJCQkJaWR4ID0gc2tfQllfRElSX0hBU0hfZmluZChlbnQtPmhhc2hlcywgJmh0bXApOworCQkJCWlmIChpZHggPj0gMCkKKwkJCQkJaGVudCA9CisJCQkJCSBza19CWV9ESVJfSEFTSF92YWx1ZShlbnQtPmhhc2hlcywgaWR4KTsKKwkJCQl9CisJCQlpZiAoIWhlbnQpCisJCQkJeworCQkJCWhlbnQgPSBPUEVOU1NMX21hbGxvYyhzaXplb2YoQllfRElSX0hBU0gpKTsKKwkJCQloZW50LT5oYXNoID0gaDsKKwkJCQloZW50LT5zdWZmaXggPSBrOworCQkJCWlmICghc2tfQllfRElSX0hBU0hfcHVzaChlbnQtPmhhc2hlcywgaGVudCkpCisJCQkJCXsKKwkJCQkJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1g1MDlfU1RPUkUpOworCQkJCQlPUEVOU1NMX2ZyZWUoaGVudCk7CisJCQkJCW9rID0gMDsKKwkJCQkJZ290byBmaW5pc2g7CisJCQkJCX0KKwkJCQl9CisJCQllbHNlIGlmIChoZW50LT5zdWZmaXggPCBrKQorCQkJCWhlbnQtPnN1ZmZpeCA9IGs7CisKKwkJCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19YNTA5X1NUT1JFKTsKKworCQkJfQorCiAJCWlmICh0bXAgIT0gTlVMTCkKIAkJCXsKIAkJCW9rPTE7CmRpZmYgLS1naXQgYS9jcnlwdG8veDUwOS9ieV9maWxlLmMgYi9jcnlwdG8veDUwOS9ieV9maWxlLmMKaW5kZXggYTVlMGQ0YS4uNTdiMDhlZSAxMDA2NDQKLS0tIGEvY3J5cHRvL3g1MDkvYnlfZmlsZS5jCisrKyBiL2NyeXB0by94NTA5L2J5X2ZpbGUuYwpAQCAtMTAwLDcgKzEwMCw3IEBACiAJY2FzZSBYNTA5X0xfRklMRV9MT0FEOgogCQlpZiAoYXJnbCA9PSBYNTA5X0ZJTEVUWVBFX0RFRkFVTFQpCiAJCQl7Ci0JCQlmaWxlID0gKGNoYXIgKilHZXRlbnYoWDUwOV9nZXRfZGVmYXVsdF9jZXJ0X2ZpbGVfZW52KCkpOworCQkJZmlsZSA9IChjaGFyICopZ2V0ZW52KFg1MDlfZ2V0X2RlZmF1bHRfY2VydF9maWxlX2VudigpKTsKIAkJCWlmIChmaWxlKQogCQkJCW9rID0gKFg1MDlfbG9hZF9jZXJ0X2NybF9maWxlKGN0eCxmaWxlLAogCQkJCQkgICAgICBYNTA5X0ZJTEVUWVBFX1BFTSkgIT0gMCk7CmRpZmYgLS1naXQgYS9jcnlwdG8veDUwOS94NTA5LmggYi9jcnlwdG8veDUwOS94NTA5LmgKaW5kZXggODk1OGUzNC4uNjA0ZjRmYiAxMDA2NDQKLS0tIGEvY3J5cHRvL3g1MDkveDUwOS5oCisrKyBiL2NyeXB0by94NTA5L3g1MDkuaApAQCAtMTU3LDEyICsxNTcsMTIgQEAKIAlBU04xX1RJTUUgKm5vdEFmdGVyOwogCX0gWDUwOV9WQUw7CiAKLXR5cGVkZWYgc3RydWN0IFg1MDlfcHVia2V5X3N0CitzdHJ1Y3QgWDUwOV9wdWJrZXlfc3QKIAl7CiAJWDUwOV9BTEdPUiAqYWxnb3I7CiAJQVNOMV9CSVRfU1RSSU5HICpwdWJsaWNfa2V5OwogCUVWUF9QS0VZICpwa2V5OwotCX0gWDUwOV9QVUJLRVk7CisJfTsKIAogdHlwZWRlZiBzdHJ1Y3QgWDUwOV9zaWdfc3QKIAl7CkBAIC0xOTEsNyArMTkxLDkgQEAKICNlbHNlCiAJY2hhciAqYnl0ZXM7CiAjZW5kaWYKLQl1bnNpZ25lZCBsb25nIGhhc2g7IC8qIEtlZXAgdGhlIGhhc2ggYXJvdW5kIGZvciBsb29rdXBzICovCisvKgl1bnNpZ25lZCBsb25nIGhhc2g7IEtlZXAgdGhlIGhhc2ggYXJvdW5kIGZvciBsb29rdXBzICovCisJdW5zaWduZWQgY2hhciAqY2Fub25fZW5jOworCWludCBjYW5vbl9lbmNsZW47CiAJfSAvKiBYNTA5X05BTUUgKi87CiAKIERFQ0xBUkVfU1RBQ0tfT0YoWDUwOV9OQU1FKQpAQCAtMjkwLDggKzI5MiwxMSBAQAogCXVuc2lnbmVkIGxvbmcgZXhfeGt1c2FnZTsKIAl1bnNpZ25lZCBsb25nIGV4X25zY2VydDsKIAlBU04xX09DVEVUX1NUUklORyAqc2tpZDsKLQlzdHJ1Y3QgQVVUSE9SSVRZX0tFWUlEX3N0ICpha2lkOworCUFVVEhPUklUWV9LRVlJRCAqYWtpZDsKIAlYNTA5X1BPTElDWV9DQUNIRSAqcG9saWN5X2NhY2hlOworCVNUQUNLX09GKERJU1RfUE9JTlQpICpjcmxkcDsKKwlTVEFDS19PRihHRU5FUkFMX05BTUUpICphbHRuYW1lOworCU5BTUVfQ09OU1RSQUlOVFMgKm5jOwogI2lmbmRlZiBPUEVOU1NMX05PX1JGQzM3NzkKIAlTVEFDS19PRihJUEFkZHJlc3NGYW1pbHkpICpyZmMzNzc5X2FkZHI7CiAJc3RydWN0IEFTSWRlbnRpZmllcnNfc3QgKnJmYzM3NzlfYXNpZDsKQEAgLTMzNCwxMCArMzM5LDExIEBACiAjZGVmaW5lIFg1MDlfVFJVU1RfT0JKRUNUX1NJR04JNQogI2RlZmluZSBYNTA5X1RSVVNUX09DU1BfU0lHTgk2CiAjZGVmaW5lIFg1MDlfVFJVU1RfT0NTUF9SRVFVRVNUCTcKKyNkZWZpbmUgWDUwOV9UUlVTVF9UU0EJCTgKIAogLyogS2VlcCB0aGVzZSB1cCB0byBkYXRlISAqLwogI2RlZmluZSBYNTA5X1RSVVNUX01JTgkJMQotI2RlZmluZSBYNTA5X1RSVVNUX01BWAkJNworI2RlZmluZSBYNTA5X1RSVVNUX01BWAkJOAogCiAKIC8qIHRydXN0X2ZsYWdzIHZhbHVlcyAqLwpAQCAtNDI0LDEzICs0MzAsMTcgQEAKIAkJCVhOX0ZMQUdfRk5fTE4gfCBcCiAJCQlYTl9GTEFHX0ZOX0FMSUdOKQogCi10eXBlZGVmIHN0cnVjdCBYNTA5X3Jldm9rZWRfc3QKK3N0cnVjdCB4NTA5X3Jldm9rZWRfc3QKIAl7CiAJQVNOMV9JTlRFR0VSICpzZXJpYWxOdW1iZXI7CiAJQVNOMV9USU1FICpyZXZvY2F0aW9uRGF0ZTsKIAlTVEFDS19PRihYNTA5X0VYVEVOU0lPTikgLyogb3B0aW9uYWwgKi8gKmV4dGVuc2lvbnM7CisJLyogU2V0IHVwIGlmIGluZGlyZWN0IENSTCAqLworCVNUQUNLX09GKEdFTkVSQUxfTkFNRSkgKmlzc3VlcjsKKwkvKiBSZXZvY2F0aW9uIHJlYXNvbiAqLworCWludCByZWFzb247CiAJaW50IHNlcXVlbmNlOyAvKiBsb2FkIHNlcXVlbmNlICovCi0JfSBYNTA5X1JFVk9LRUQ7CisJfTsKIAogREVDTEFSRV9TVEFDS19PRihYNTA5X1JFVk9LRUQpCiBERUNMQVJFX0FTTjFfU0VUX09GKFg1MDlfUkVWT0tFRCkKQEAgLTQ1NCw2ICs0NjQsMjIgQEAKIAlYNTA5X0FMR09SICpzaWdfYWxnOwogCUFTTjFfQklUX1NUUklORyAqc2lnbmF0dXJlOwogCWludCByZWZlcmVuY2VzOworCWludCBmbGFnczsKKwkvKiBDb3BpZXMgb2YgdmFyaW91cyBleHRlbnNpb25zICovCisJQVVUSE9SSVRZX0tFWUlEICpha2lkOworCUlTU1VJTkdfRElTVF9QT0lOVCAqaWRwOworCS8qIENvbnZlbmllbnQgYnJlYWtkb3duIG9mIElEUCAqLworCWludCBpZHBfZmxhZ3M7CisJaW50IGlkcF9yZWFzb25zOworCS8qIENSTCBhbmQgYmFzZSBDUkwgbnVtYmVycyBmb3IgZGVsdGEgcHJvY2Vzc2luZyAqLworCUFTTjFfSU5URUdFUiAqY3JsX251bWJlcjsKKwlBU04xX0lOVEVHRVIgKmJhc2VfY3JsX251bWJlcjsKKyNpZm5kZWYgT1BFTlNTTF9OT19TSEEKKwl1bnNpZ25lZCBjaGFyIHNoYTFfaGFzaFtTSEFfRElHRVNUX0xFTkdUSF07CisjZW5kaWYKKwlTVEFDS19PRihHRU5FUkFMX05BTUVTKSAqaXNzdWVyczsKKwljb25zdCBYNTA5X0NSTF9NRVRIT0QgKm1ldGg7CisJdm9pZCAqbWV0aF9kYXRhOwogCX0gLyogWDUwOV9DUkwgKi87CiAKIERFQ0xBUkVfU1RBQ0tfT0YoWDUwOV9DUkwpCkBAIC01NTIsMTggKzU3OCwxOSBAQAogCiAvKiBQS0NTIzggcHJpdmF0ZSBrZXkgaW5mbyBzdHJ1Y3R1cmUgKi8KIAotdHlwZWRlZiBzdHJ1Y3QgcGtjczhfcHJpdl9rZXlfaW5mb19zdAorc3RydWN0IHBrY3M4X3ByaXZfa2V5X2luZm9fc3QKICAgICAgICAgewogICAgICAgICBpbnQgYnJva2VuOyAgICAgLyogRmxhZyBmb3IgdmFyaW91cyBicm9rZW4gZm9ybWF0cyAqLwogI2RlZmluZSBQS0NTOF9PSwkJMAogI2RlZmluZSBQS0NTOF9OT19PQ1RFVAkJMQogI2RlZmluZSBQS0NTOF9FTUJFRERFRF9QQVJBTQkyCiAjZGVmaW5lIFBLQ1M4X05TX0RCCQkzCisjZGVmaW5lIFBLQ1M4X05FR19QUklWS0VZCTQKICAgICAgICAgQVNOMV9JTlRFR0VSICp2ZXJzaW9uOwogICAgICAgICBYNTA5X0FMR09SICpwa2V5YWxnOwogICAgICAgICBBU04xX1RZUEUgKnBrZXk7IC8qIFNob3VsZCBiZSBPQ1RFVCBTVFJJTkcgYnV0IHNvbWUgYXJlIGJyb2tlbiAqLwogICAgICAgICBTVEFDS19PRihYNTA5X0FUVFJJQlVURSkgKmF0dHJpYnV0ZXM7Ci0gICAgICAgIH0gUEtDUzhfUFJJVl9LRVlfSU5GTzsKKyAgICAgICAgfTsKIAogI2lmZGVmICBfX2NwbHVzcGx1cwogfQpAQCAtNTc2LDE1MSArNjAzLDYgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLSNpZmRlZiBTU0xFQVlfTUFDUk9TCi0jZGVmaW5lIFg1MDlfdmVyaWZ5KGEscikgQVNOMV92ZXJpZnkoKGludCAoKikoKSlpMmRfWDUwOV9DSU5GLGEtPnNpZ19hbGcsXAotCWEtPnNpZ25hdHVyZSwoY2hhciAqKWEtPmNlcnRfaW5mbyxyKQotI2RlZmluZSBYNTA5X1JFUV92ZXJpZnkoYSxyKSBBU04xX3ZlcmlmeSgoaW50ICgqKSgpKWkyZF9YNTA5X1JFUV9JTkZPLCBcCi0JYS0+c2lnX2FsZyxhLT5zaWduYXR1cmUsKGNoYXIgKilhLT5yZXFfaW5mbyxyKQotI2RlZmluZSBYNTA5X0NSTF92ZXJpZnkoYSxyKSBBU04xX3ZlcmlmeSgoaW50ICgqKSgpKWkyZF9YNTA5X0NSTF9JTkZPLCBcCi0JYS0+c2lnX2FsZywgYS0+c2lnbmF0dXJlLChjaGFyICopYS0+Y3JsLHIpCi0KLSNkZWZpbmUgWDUwOV9zaWduKHgscGtleSxtZCkgXAotCUFTTjFfc2lnbigoaW50ICgqKSgpKWkyZF9YNTA5X0NJTkYsIHgtPmNlcnRfaW5mby0+c2lnbmF0dXJlLCBcCi0JCXgtPnNpZ19hbGcsIHgtPnNpZ25hdHVyZSwgKGNoYXIgKil4LT5jZXJ0X2luZm8scGtleSxtZCkKLSNkZWZpbmUgWDUwOV9SRVFfc2lnbih4LHBrZXksbWQpIFwKLQlBU04xX3NpZ24oKGludCAoKikoKSlpMmRfWDUwOV9SRVFfSU5GTyx4LT5zaWdfYWxnLCBOVUxMLCBcCi0JCXgtPnNpZ25hdHVyZSwgKGNoYXIgKil4LT5yZXFfaW5mbyxwa2V5LG1kKQotI2RlZmluZSBYNTA5X0NSTF9zaWduKHgscGtleSxtZCkgXAotCUFTTjFfc2lnbigoaW50ICgqKSgpKWkyZF9YNTA5X0NSTF9JTkZPLHgtPmNybC0+c2lnX2FsZyx4LT5zaWdfYWxnLCBcCi0JCXgtPnNpZ25hdHVyZSwgKGNoYXIgKil4LT5jcmwscGtleSxtZCkKLSNkZWZpbmUgTkVUU0NBUEVfU1BLSV9zaWduKHgscGtleSxtZCkgXAotCUFTTjFfc2lnbigoaW50ICgqKSgpKWkyZF9ORVRTQ0FQRV9TUEtBQywgeC0+c2lnX2FsZ29yLE5VTEwsIFwKLQkJeC0+c2lnbmF0dXJlLCAoY2hhciAqKXgtPnNwa2FjLHBrZXksbWQpCi0KLSNkZWZpbmUgWDUwOV9kdXAoeDUwOSkgKFg1MDkgKilBU04xX2R1cCgoaW50ICgqKSgpKWkyZF9YNTA5LCBcCi0JCShjaGFyICooKikoKSlkMmlfWDUwOSwoY2hhciAqKXg1MDkpCi0jZGVmaW5lIFg1MDlfQVRUUklCVVRFX2R1cCh4YSkgKFg1MDlfQVRUUklCVVRFICopQVNOMV9kdXAoXAotCQkoaW50ICgqKSgpKWkyZF9YNTA5X0FUVFJJQlVURSwgXAotCQkoY2hhciAqKCopKCkpZDJpX1g1MDlfQVRUUklCVVRFLChjaGFyICopeGEpCi0jZGVmaW5lIFg1MDlfRVhURU5TSU9OX2R1cChleCkgKFg1MDlfRVhURU5TSU9OICopQVNOMV9kdXAoIFwKLQkJKGludCAoKikoKSlpMmRfWDUwOV9FWFRFTlNJT04sIFwKLQkJKGNoYXIgKigqKSgpKWQyaV9YNTA5X0VYVEVOU0lPTiwoY2hhciAqKWV4KQotI2RlZmluZSBkMmlfWDUwOV9mcChmcCx4NTA5KSAoWDUwOSAqKUFTTjFfZDJpX2ZwKChjaGFyICooKikoKSlYNTA5X25ldywgXAotCQkoY2hhciAqKCopKCkpZDJpX1g1MDksIChmcCksKHVuc2lnbmVkIGNoYXIgKiopKHg1MDkpKQotI2RlZmluZSBpMmRfWDUwOV9mcChmcCx4NTA5KSBBU04xX2kyZF9mcChpMmRfWDUwOSxmcCwodW5zaWduZWQgY2hhciAqKXg1MDkpCi0jZGVmaW5lIGQyaV9YNTA5X2JpbyhicCx4NTA5KSAoWDUwOSAqKUFTTjFfZDJpX2JpbygoY2hhciAqKCopKCkpWDUwOV9uZXcsIFwKLQkJKGNoYXIgKigqKSgpKWQyaV9YNTA5LCAoYnApLCh1bnNpZ25lZCBjaGFyICoqKSh4NTA5KSkKLSNkZWZpbmUgaTJkX1g1MDlfYmlvKGJwLHg1MDkpIEFTTjFfaTJkX2JpbyhpMmRfWDUwOSxicCwodW5zaWduZWQgY2hhciAqKXg1MDkpCi0KLSNkZWZpbmUgWDUwOV9DUkxfZHVwKGNybCkgKFg1MDlfQ1JMICopQVNOMV9kdXAoKGludCAoKikoKSlpMmRfWDUwOV9DUkwsIFwKLQkJKGNoYXIgKigqKSgpKWQyaV9YNTA5X0NSTCwoY2hhciAqKWNybCkKLSNkZWZpbmUgZDJpX1g1MDlfQ1JMX2ZwKGZwLGNybCkgKFg1MDlfQ1JMICopQVNOMV9kMmlfZnAoKGNoYXIgKigqKSgpKSBcCi0JCVg1MDlfQ1JMX25ldywoY2hhciAqKCopKCkpZDJpX1g1MDlfQ1JMLCAoZnApLFwKLQkJKHVuc2lnbmVkIGNoYXIgKiopKGNybCkpCi0jZGVmaW5lIGkyZF9YNTA5X0NSTF9mcChmcCxjcmwpIEFTTjFfaTJkX2ZwKGkyZF9YNTA5X0NSTCxmcCxcCi0JCSh1bnNpZ25lZCBjaGFyICopY3JsKQotI2RlZmluZSBkMmlfWDUwOV9DUkxfYmlvKGJwLGNybCkgKFg1MDlfQ1JMICopQVNOMV9kMmlfYmlvKChjaGFyICooKikoKSkgXAotCQlYNTA5X0NSTF9uZXcsKGNoYXIgKigqKSgpKWQyaV9YNTA5X0NSTCwgKGJwKSxcCi0JCSh1bnNpZ25lZCBjaGFyICoqKShjcmwpKQotI2RlZmluZSBpMmRfWDUwOV9DUkxfYmlvKGJwLGNybCkgQVNOMV9pMmRfYmlvKGkyZF9YNTA5X0NSTCxicCxcCi0JCSh1bnNpZ25lZCBjaGFyICopY3JsKQotCi0jZGVmaW5lIFBLQ1M3X2R1cChwNykgKFBLQ1M3ICopQVNOMV9kdXAoKGludCAoKikoKSlpMmRfUEtDUzcsIFwKLQkJKGNoYXIgKigqKSgpKWQyaV9QS0NTNywoY2hhciAqKXA3KQotI2RlZmluZSBkMmlfUEtDUzdfZnAoZnAscDcpIChQS0NTNyAqKUFTTjFfZDJpX2ZwKChjaGFyICooKikoKSkgXAotCQlQS0NTN19uZXcsKGNoYXIgKigqKSgpKWQyaV9QS0NTNywgKGZwKSxcCi0JCSh1bnNpZ25lZCBjaGFyICoqKShwNykpCi0jZGVmaW5lIGkyZF9QS0NTN19mcChmcCxwNykgQVNOMV9pMmRfZnAoaTJkX1BLQ1M3LGZwLFwKLQkJKHVuc2lnbmVkIGNoYXIgKilwNykKLSNkZWZpbmUgZDJpX1BLQ1M3X2JpbyhicCxwNykgKFBLQ1M3ICopQVNOMV9kMmlfYmlvKChjaGFyICooKikoKSkgXAotCQlQS0NTN19uZXcsKGNoYXIgKigqKSgpKWQyaV9QS0NTNywgKGJwKSxcCi0JCSh1bnNpZ25lZCBjaGFyICoqKShwNykpCi0jZGVmaW5lIGkyZF9QS0NTN19iaW8oYnAscDcpIEFTTjFfaTJkX2JpbyhpMmRfUEtDUzcsYnAsXAotCQkodW5zaWduZWQgY2hhciAqKXA3KQotCi0jZGVmaW5lIFg1MDlfUkVRX2R1cChyZXEpIChYNTA5X1JFUSAqKUFTTjFfZHVwKChpbnQgKCopKCkpaTJkX1g1MDlfUkVRLCBcCi0JCShjaGFyICooKikoKSlkMmlfWDUwOV9SRVEsKGNoYXIgKilyZXEpCi0jZGVmaW5lIGQyaV9YNTA5X1JFUV9mcChmcCxyZXEpIChYNTA5X1JFUSAqKUFTTjFfZDJpX2ZwKChjaGFyICooKikoKSlcCi0JCVg1MDlfUkVRX25ldywgKGNoYXIgKigqKSgpKWQyaV9YNTA5X1JFUSwgKGZwKSxcCi0JCSh1bnNpZ25lZCBjaGFyICoqKShyZXEpKQotI2RlZmluZSBpMmRfWDUwOV9SRVFfZnAoZnAscmVxKSBBU04xX2kyZF9mcChpMmRfWDUwOV9SRVEsZnAsXAotCQkodW5zaWduZWQgY2hhciAqKXJlcSkKLSNkZWZpbmUgZDJpX1g1MDlfUkVRX2JpbyhicCxyZXEpIChYNTA5X1JFUSAqKUFTTjFfZDJpX2JpbygoY2hhciAqKCopKCkpXAotCQlYNTA5X1JFUV9uZXcsIChjaGFyICooKikoKSlkMmlfWDUwOV9SRVEsIChicCksXAotCQkodW5zaWduZWQgY2hhciAqKikocmVxKSkKLSNkZWZpbmUgaTJkX1g1MDlfUkVRX2JpbyhicCxyZXEpIEFTTjFfaTJkX2JpbyhpMmRfWDUwOV9SRVEsYnAsXAotCQkodW5zaWduZWQgY2hhciAqKXJlcSkKLQotI2RlZmluZSBSU0FQdWJsaWNLZXlfZHVwKHJzYSkgKFJTQSAqKUFTTjFfZHVwKChpbnQgKCopKCkpaTJkX1JTQVB1YmxpY0tleSwgXAotCQkoY2hhciAqKCopKCkpZDJpX1JTQVB1YmxpY0tleSwoY2hhciAqKXJzYSkKLSNkZWZpbmUgUlNBUHJpdmF0ZUtleV9kdXAocnNhKSAoUlNBICopQVNOMV9kdXAoKGludCAoKikoKSlpMmRfUlNBUHJpdmF0ZUtleSwgXAotCQkoY2hhciAqKCopKCkpZDJpX1JTQVByaXZhdGVLZXksKGNoYXIgKilyc2EpCi0KLSNkZWZpbmUgZDJpX1JTQVByaXZhdGVLZXlfZnAoZnAscnNhKSAoUlNBICopQVNOMV9kMmlfZnAoKGNoYXIgKigqKSgpKVwKLQkJUlNBX25ldywoY2hhciAqKCopKCkpZDJpX1JTQVByaXZhdGVLZXksIChmcCksIFwKLQkJKHVuc2lnbmVkIGNoYXIgKiopKHJzYSkpCi0jZGVmaW5lIGkyZF9SU0FQcml2YXRlS2V5X2ZwKGZwLHJzYSkgQVNOMV9pMmRfZnAoaTJkX1JTQVByaXZhdGVLZXksZnAsIFwKLQkJKHVuc2lnbmVkIGNoYXIgKilyc2EpCi0jZGVmaW5lIGQyaV9SU0FQcml2YXRlS2V5X2JpbyhicCxyc2EpIChSU0EgKilBU04xX2QyaV9iaW8oKGNoYXIgKigqKSgpKVwKLQkJUlNBX25ldywoY2hhciAqKCopKCkpZDJpX1JTQVByaXZhdGVLZXksIChicCksIFwKLQkJKHVuc2lnbmVkIGNoYXIgKiopKHJzYSkpCi0jZGVmaW5lIGkyZF9SU0FQcml2YXRlS2V5X2JpbyhicCxyc2EpIEFTTjFfaTJkX2JpbyhpMmRfUlNBUHJpdmF0ZUtleSxicCwgXAotCQkodW5zaWduZWQgY2hhciAqKXJzYSkKLQotI2RlZmluZSBkMmlfUlNBUHVibGljS2V5X2ZwKGZwLHJzYSkgKFJTQSAqKUFTTjFfZDJpX2ZwKChjaGFyICooKikoKSlcCi0JCVJTQV9uZXcsKGNoYXIgKigqKSgpKWQyaV9SU0FQdWJsaWNLZXksIChmcCksIFwKLQkJKHVuc2lnbmVkIGNoYXIgKiopKHJzYSkpCi0jZGVmaW5lIGkyZF9SU0FQdWJsaWNLZXlfZnAoZnAscnNhKSBBU04xX2kyZF9mcChpMmRfUlNBUHVibGljS2V5LGZwLCBcCi0JCSh1bnNpZ25lZCBjaGFyICopcnNhKQotI2RlZmluZSBkMmlfUlNBUHVibGljS2V5X2JpbyhicCxyc2EpIChSU0EgKilBU04xX2QyaV9iaW8oKGNoYXIgKigqKSgpKVwKLQkJUlNBX25ldywoY2hhciAqKCopKCkpZDJpX1JTQVB1YmxpY0tleSwgKGJwKSwgXAotCQkodW5zaWduZWQgY2hhciAqKikocnNhKSkKLSNkZWZpbmUgaTJkX1JTQVB1YmxpY0tleV9iaW8oYnAscnNhKSBBU04xX2kyZF9iaW8oaTJkX1JTQVB1YmxpY0tleSxicCwgXAotCQkodW5zaWduZWQgY2hhciAqKXJzYSkKLQotI2RlZmluZSBkMmlfRFNBUHJpdmF0ZUtleV9mcChmcCxkc2EpIChEU0EgKilBU04xX2QyaV9mcCgoY2hhciAqKCopKCkpXAotCQlEU0FfbmV3LChjaGFyICooKikoKSlkMmlfRFNBUHJpdmF0ZUtleSwgKGZwKSwgXAotCQkodW5zaWduZWQgY2hhciAqKikoZHNhKSkKLSNkZWZpbmUgaTJkX0RTQVByaXZhdGVLZXlfZnAoZnAsZHNhKSBBU04xX2kyZF9mcChpMmRfRFNBUHJpdmF0ZUtleSxmcCwgXAotCQkodW5zaWduZWQgY2hhciAqKWRzYSkKLSNkZWZpbmUgZDJpX0RTQVByaXZhdGVLZXlfYmlvKGJwLGRzYSkgKERTQSAqKUFTTjFfZDJpX2JpbygoY2hhciAqKCopKCkpXAotCQlEU0FfbmV3LChjaGFyICooKikoKSlkMmlfRFNBUHJpdmF0ZUtleSwgKGJwKSwgXAotCQkodW5zaWduZWQgY2hhciAqKikoZHNhKSkKLSNkZWZpbmUgaTJkX0RTQVByaXZhdGVLZXlfYmlvKGJwLGRzYSkgQVNOMV9pMmRfYmlvKGkyZF9EU0FQcml2YXRlS2V5LGJwLCBcCi0JCSh1bnNpZ25lZCBjaGFyICopZHNhKQotCi0jZGVmaW5lIGQyaV9FQ1ByaXZhdGVLZXlfZnAoZnAsZWNkc2EpIChFQ19LRVkgKilBU04xX2QyaV9mcCgoY2hhciAqKCopKCkpXAotCQlFQ19LRVlfbmV3LChjaGFyICooKikoKSlkMmlfRUNQcml2YXRlS2V5LCAoZnApLCBcCi0JCSh1bnNpZ25lZCBjaGFyICoqKShlY2RzYSkpCi0jZGVmaW5lIGkyZF9FQ1ByaXZhdGVLZXlfZnAoZnAsZWNkc2EpIEFTTjFfaTJkX2ZwKGkyZF9FQ1ByaXZhdGVLZXksZnAsIFwKLQkJKHVuc2lnbmVkIGNoYXIgKillY2RzYSkKLSNkZWZpbmUgZDJpX0VDUHJpdmF0ZUtleV9iaW8oYnAsZWNkc2EpIChFQ19LRVkgKilBU04xX2QyaV9iaW8oKGNoYXIgKigqKSgpKVwKLQkJRUNfS0VZX25ldywoY2hhciAqKCopKCkpZDJpX0VDUHJpdmF0ZUtleSwgKGJwKSwgXAotCQkodW5zaWduZWQgY2hhciAqKikoZWNkc2EpKQotI2RlZmluZSBpMmRfRUNQcml2YXRlS2V5X2JpbyhicCxlY2RzYSkgQVNOMV9pMmRfYmlvKGkyZF9FQ1ByaXZhdGVLZXksYnAsIFwKLQkJKHVuc2lnbmVkIGNoYXIgKillY2RzYSkKLQotI2RlZmluZSBYNTA5X0FMR09SX2R1cCh4bikgKFg1MDlfQUxHT1IgKilBU04xX2R1cCgoaW50ICgqKSgpKWkyZF9YNTA5X0FMR09SLFwKLQkJKGNoYXIgKigqKSgpKWQyaV9YNTA5X0FMR09SLChjaGFyICopeG4pCi0KLSNkZWZpbmUgWDUwOV9OQU1FX2R1cCh4bikgKFg1MDlfTkFNRSAqKUFTTjFfZHVwKChpbnQgKCopKCkpaTJkX1g1MDlfTkFNRSwgXAotCQkoY2hhciAqKCopKCkpZDJpX1g1MDlfTkFNRSwoY2hhciAqKXhuKQotI2RlZmluZSBYNTA5X05BTUVfRU5UUllfZHVwKG5lKSAoWDUwOV9OQU1FX0VOVFJZICopQVNOMV9kdXAoIFwKLQkJKGludCAoKikoKSlpMmRfWDUwOV9OQU1FX0VOVFJZLCBcCi0JCShjaGFyICooKikoKSlkMmlfWDUwOV9OQU1FX0VOVFJZLFwKLQkJKGNoYXIgKiluZSkKLQotI2RlZmluZSBYNTA5X2RpZ2VzdChkYXRhLHR5cGUsbWQsbGVuKSBcCi0JQVNOMV9kaWdlc3QoKGludCAoKikoKSlpMmRfWDUwOSx0eXBlLChjaGFyICopZGF0YSxtZCxsZW4pCi0jZGVmaW5lIFg1MDlfTkFNRV9kaWdlc3QoZGF0YSx0eXBlLG1kLGxlbikgXAotCUFTTjFfZGlnZXN0KChpbnQgKCopKCkpaTJkX1g1MDlfTkFNRSx0eXBlLChjaGFyICopZGF0YSxtZCxsZW4pCi0jaWZuZGVmIFBLQ1M3X0lTU1VFUl9BTkRfU0VSSUFMX2RpZ2VzdAotI2RlZmluZSBQS0NTN19JU1NVRVJfQU5EX1NFUklBTF9kaWdlc3QoZGF0YSx0eXBlLG1kLGxlbikgXAotCUFTTjFfZGlnZXN0KChpbnQgKCopKCkpaTJkX1BLQ1M3X0lTU1VFUl9BTkRfU0VSSUFMLHR5cGUsXAotCQkoY2hhciAqKWRhdGEsbWQsbGVuKQotI2VuZGlmCi0jZW5kaWYKLQogI2RlZmluZSBYNTA5X0VYVF9QQUNLX1VOS05PV04JMQogI2RlZmluZSBYNTA5X0VYVF9QQUNLX1NUUklORwkyCiAKQEAgLTc0MSw2ICs2MjMsMTggQEAKICNkZWZpbmUJCVg1MDlfQ1JMX2dldF9pc3N1ZXIoeCkgKCh4KS0+Y3JsLT5pc3N1ZXIpCiAjZGVmaW5lCQlYNTA5X0NSTF9nZXRfUkVWT0tFRCh4KSAoKHgpLT5jcmwtPnJldm9rZWQpCiAKK3ZvaWQgWDUwOV9DUkxfc2V0X2RlZmF1bHRfbWV0aG9kKGNvbnN0IFg1MDlfQ1JMX01FVEhPRCAqbWV0aCk7CitYNTA5X0NSTF9NRVRIT0QgKlg1MDlfQ1JMX01FVEhPRF9uZXcoCisJaW50ICgqY3JsX2luaXQpKFg1MDlfQ1JMICpjcmwpLAorCWludCAoKmNybF9mcmVlKShYNTA5X0NSTCAqY3JsKSwKKwlpbnQgKCpjcmxfbG9va3VwKShYNTA5X0NSTCAqY3JsLCBYNTA5X1JFVk9LRUQgKipyZXQsCisJCQkJQVNOMV9JTlRFR0VSICpzZXIsIFg1MDlfTkFNRSAqaXNzdWVyKSwKKwlpbnQgKCpjcmxfdmVyaWZ5KShYNTA5X0NSTCAqY3JsLCBFVlBfUEtFWSAqcGspKTsKK3ZvaWQgWDUwOV9DUkxfTUVUSE9EX2ZyZWUoWDUwOV9DUkxfTUVUSE9EICptKTsKKwordm9pZCBYNTA5X0NSTF9zZXRfbWV0aF9kYXRhKFg1MDlfQ1JMICpjcmwsIHZvaWQgKmRhdCk7Cit2b2lkICpYNTA5X0NSTF9nZXRfbWV0aF9kYXRhKFg1MDlfQ1JMICpjcmwpOworCiAvKiBUaGlzIG9uZSBpcyBvbmx5IHVzZWQgc28gdGhhdCBhIGJpbmFyeSBmb3JtIGNhbiBvdXRwdXQsIGFzIGluCiAgKiBpMmRfWDUwOV9OQU1FKFg1MDlfZ2V0X1g1MDlfUFVCS0VZKHgpLCZidWYpICovCiAjZGVmaW5lIAlYNTA5X2dldF9YNTA5X1BVQktFWSh4KSAoKHgpLT5jZXJ0X2luZm8tPmtleSkKQEAgLTc0OCw3ICs2NDIsNiBAQAogCiBjb25zdCBjaGFyICpYNTA5X3ZlcmlmeV9jZXJ0X2Vycm9yX3N0cmluZyhsb25nIG4pOwogCi0jaWZuZGVmIFNTTEVBWV9NQUNST1MKICNpZm5kZWYgT1BFTlNTTF9OT19FVlAKIGludCBYNTA5X3ZlcmlmeShYNTA5ICphLCBFVlBfUEtFWSAqcik7CiAKQEAgLTg3MywxMSArNzY2LDExIEBACiBYNTA5X05BTUUgKlg1MDlfTkFNRV9kdXAoWDUwOV9OQU1FICp4bik7CiBYNTA5X05BTUVfRU5UUlkgKlg1MDlfTkFNRV9FTlRSWV9kdXAoWDUwOV9OQU1FX0VOVFJZICpuZSk7CiAKLSNlbmRpZiAvKiAhU1NMRUFZX01BQ1JPUyAqLwotCi1pbnQJCVg1MDlfY21wX3RpbWUoQVNOMV9USU1FICpzLCB0aW1lX3QgKnQpOwotaW50CQlYNTA5X2NtcF9jdXJyZW50X3RpbWUoQVNOMV9USU1FICpzKTsKK2ludAkJWDUwOV9jbXBfdGltZShjb25zdCBBU04xX1RJTUUgKnMsIHRpbWVfdCAqdCk7CitpbnQJCVg1MDlfY21wX2N1cnJlbnRfdGltZShjb25zdCBBU04xX1RJTUUgKnMpOwogQVNOMV9USU1FICoJWDUwOV90aW1lX2FkaihBU04xX1RJTUUgKnMsIGxvbmcgYWRqLCB0aW1lX3QgKnQpOworQVNOMV9USU1FICoJWDUwOV90aW1lX2Fkal9leChBU04xX1RJTUUgKnMsCisJCQkJaW50IG9mZnNldF9kYXksIGxvbmcgb2Zmc2V0X3NlYywgdGltZV90ICp0KTsKIEFTTjFfVElNRSAqCVg1MDlfZ210aW1lX2FkaihBU04xX1RJTUUgKnMsIGxvbmcgYWRqKTsKIAogY29uc3QgY2hhciAqCVg1MDlfZ2V0X2RlZmF1bHRfY2VydF9hcmVhKHZvaWQgKTsKQEAgLTk2NSw2ICs4NTgsOSBAQAogREVDTEFSRV9BU04xX0ZVTkNUSU9OUyhYNTA5X0NSTCkKIAogaW50IFg1MDlfQ1JMX2FkZDBfcmV2b2tlZChYNTA5X0NSTCAqY3JsLCBYNTA5X1JFVk9LRUQgKnJldik7CitpbnQgWDUwOV9DUkxfZ2V0MF9ieV9zZXJpYWwoWDUwOV9DUkwgKmNybCwKKwkJWDUwOV9SRVZPS0VEICoqcmV0LCBBU04xX0lOVEVHRVIgKnNlcmlhbCk7CitpbnQgWDUwOV9DUkxfZ2V0MF9ieV9jZXJ0KFg1MDlfQ1JMICpjcmwsIFg1MDlfUkVWT0tFRCAqKnJldCwgWDUwOSAqeCk7CiAKIFg1MDlfUEtFWSAqCVg1MDlfUEtFWV9uZXcodm9pZCApOwogdm9pZAkJWDUwOV9QS0VZX2ZyZWUoWDUwOV9QS0VZICphKTsKQEAgLTEwMDgsOCArOTA0LDggQEAKIFg1MDlfTkFNRSAqCVg1MDlfZ2V0X2lzc3Vlcl9uYW1lKFg1MDkgKmEpOwogaW50IAkJWDUwOV9zZXRfc3ViamVjdF9uYW1lKFg1MDkgKngsIFg1MDlfTkFNRSAqbmFtZSk7CiBYNTA5X05BTUUgKglYNTA5X2dldF9zdWJqZWN0X25hbWUoWDUwOSAqYSk7Ci1pbnQgCQlYNTA5X3NldF9ub3RCZWZvcmUoWDUwOSAqeCwgQVNOMV9USU1FICp0bSk7Ci1pbnQgCQlYNTA5X3NldF9ub3RBZnRlcihYNTA5ICp4LCBBU04xX1RJTUUgKnRtKTsKK2ludCAJCVg1MDlfc2V0X25vdEJlZm9yZShYNTA5ICp4LCBjb25zdCBBU04xX1RJTUUgKnRtKTsKK2ludCAJCVg1MDlfc2V0X25vdEFmdGVyKFg1MDkgKngsIGNvbnN0IEFTTjFfVElNRSAqdG0pOwogaW50IAkJWDUwOV9zZXRfcHVia2V5KFg1MDkgKngsIEVWUF9QS0VZICpwa2V5KTsKIEVWUF9QS0VZICoJWDUwOV9nZXRfcHVia2V5KFg1MDkgKngpOwogQVNOMV9CSVRfU1RSSU5HICogWDUwOV9nZXQwX3B1YmtleV9iaXRzdHIoY29uc3QgWDUwOSAqeCk7CkBAIC0xMDQ2LDggKzk0Miw4IEBACiAKIGludCBYNTA5X0NSTF9zZXRfdmVyc2lvbihYNTA5X0NSTCAqeCwgbG9uZyB2ZXJzaW9uKTsKIGludCBYNTA5X0NSTF9zZXRfaXNzdWVyX25hbWUoWDUwOV9DUkwgKngsIFg1MDlfTkFNRSAqbmFtZSk7Ci1pbnQgWDUwOV9DUkxfc2V0X2xhc3RVcGRhdGUoWDUwOV9DUkwgKngsIEFTTjFfVElNRSAqdG0pOwotaW50IFg1MDlfQ1JMX3NldF9uZXh0VXBkYXRlKFg1MDlfQ1JMICp4LCBBU04xX1RJTUUgKnRtKTsKK2ludCBYNTA5X0NSTF9zZXRfbGFzdFVwZGF0ZShYNTA5X0NSTCAqeCwgY29uc3QgQVNOMV9USU1FICp0bSk7CitpbnQgWDUwOV9DUkxfc2V0X25leHRVcGRhdGUoWDUwOV9DUkwgKngsIGNvbnN0IEFTTjFfVElNRSAqdG0pOwogaW50IFg1MDlfQ1JMX3NvcnQoWDUwOV9DUkwgKmNybCk7CiAKIGludCBYNTA5X1JFVk9LRURfc2V0X3NlcmlhbE51bWJlcihYNTA5X1JFVk9LRUQgKngsIEFTTjFfSU5URUdFUiAqc2VyaWFsKTsKQEAgLTEwNjYsMTEgKzk2MiwxOCBAQAogaW50CQlYNTA5X3N1YmplY3RfbmFtZV9jbXAoY29uc3QgWDUwOSAqYSwgY29uc3QgWDUwOSAqYik7CiB1bnNpZ25lZCBsb25nCVg1MDlfc3ViamVjdF9uYW1lX2hhc2goWDUwOSAqeCk7CiAKKyNpZm5kZWYgT1BFTlNTTF9OT19NRDUKK3Vuc2lnbmVkIGxvbmcJWDUwOV9pc3N1ZXJfbmFtZV9oYXNoX29sZChYNTA5ICphKTsKK3Vuc2lnbmVkIGxvbmcJWDUwOV9zdWJqZWN0X25hbWVfaGFzaF9vbGQoWDUwOSAqeCk7CisjZW5kaWYKKwogaW50CQlYNTA5X2NtcChjb25zdCBYNTA5ICphLCBjb25zdCBYNTA5ICpiKTsKIGludAkJWDUwOV9OQU1FX2NtcChjb25zdCBYNTA5X05BTUUgKmEsIGNvbnN0IFg1MDlfTkFNRSAqYik7CiB1bnNpZ25lZCBsb25nCVg1MDlfTkFNRV9oYXNoKFg1MDlfTkFNRSAqeCk7Cit1bnNpZ25lZCBsb25nCVg1MDlfTkFNRV9oYXNoX29sZChYNTA5X05BTUUgKngpOwogCiBpbnQJCVg1MDlfQ1JMX2NtcChjb25zdCBYNTA5X0NSTCAqYSwgY29uc3QgWDUwOV9DUkwgKmIpOworaW50CQlYNTA5X0NSTF9tYXRjaChjb25zdCBYNTA5X0NSTCAqYSwgY29uc3QgWDUwOV9DUkwgKmIpOwogI2lmbmRlZiBPUEVOU1NMX05PX0ZQX0FQSQogaW50CQlYNTA5X3ByaW50X2V4X2ZwKEZJTEUgKmJwLFg1MDkgKngsIHVuc2lnbmVkIGxvbmcgbm1mbGFnLCB1bnNpZ25lZCBsb25nIGNmbGFnKTsKIGludAkJWDUwOV9wcmludF9mcChGSUxFICpicCxYNTA5ICp4KTsKQEAgLTEyNDYsOSArMTE0OSwxNiBAQAogREVDTEFSRV9BU04xX0ZVTkNUSU9OUyhQQkUyUEFSQU0pCiBERUNMQVJFX0FTTjFfRlVOQ1RJT05TKFBCS0RGMlBBUkFNKQogCi1YNTA5X0FMR09SICpQS0NTNV9wYmVfc2V0KGludCBhbGcsIGludCBpdGVyLCB1bnNpZ25lZCBjaGFyICpzYWx0LCBpbnQgc2FsdGxlbik7CitpbnQgUEtDUzVfcGJlX3NldDBfYWxnb3IoWDUwOV9BTEdPUiAqYWxnb3IsIGludCBhbGcsIGludCBpdGVyLAorCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNhbHQsIGludCBzYWx0bGVuKTsKKworWDUwOV9BTEdPUiAqUEtDUzVfcGJlX3NldChpbnQgYWxnLCBpbnQgaXRlciwKKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpzYWx0LCBpbnQgc2FsdGxlbik7CiBYNTA5X0FMR09SICpQS0NTNV9wYmUyX3NldChjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIsIGludCBpdGVyLAogCQkJCQkgdW5zaWduZWQgY2hhciAqc2FsdCwgaW50IHNhbHRsZW4pOworWDUwOV9BTEdPUiAqUEtDUzVfcGJlMl9zZXRfaXYoY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyLCBpbnQgaXRlciwKKwkJCQkgdW5zaWduZWQgY2hhciAqc2FsdCwgaW50IHNhbHRsZW4sCisJCQkJIHVuc2lnbmVkIGNoYXIgKmFpdiwgaW50IHByZl9uaWQpOwogCiAvKiBQS0NTIzggdXRpbGl0aWVzICovCiAKQEAgLTEyNTksNiArMTE2OSwyMiBAQAogUEtDUzhfUFJJVl9LRVlfSU5GTyAqRVZQX1BLRVkyUEtDUzhfYnJva2VuKEVWUF9QS0VZICpwa2V5LCBpbnQgYnJva2VuKTsKIFBLQ1M4X1BSSVZfS0VZX0lORk8gKlBLQ1M4X3NldF9icm9rZW4oUEtDUzhfUFJJVl9LRVlfSU5GTyAqcDgsIGludCBicm9rZW4pOwogCitpbnQgUEtDUzhfcGtleV9zZXQwKFBLQ1M4X1BSSVZfS0VZX0lORk8gKnByaXYsIEFTTjFfT0JKRUNUICphb2JqLAorCQkJaW50IHZlcnNpb24sIGludCBwdHlwZSwgdm9pZCAqcHZhbCwKKwkJCQl1bnNpZ25lZCBjaGFyICpwZW5jLCBpbnQgcGVuY2xlbik7CitpbnQgUEtDUzhfcGtleV9nZXQwKEFTTjFfT0JKRUNUICoqcHBrYWxnLAorCQljb25zdCB1bnNpZ25lZCBjaGFyICoqcGssIGludCAqcHBrbGVuLAorCQlYNTA5X0FMR09SICoqcGEsCisJCVBLQ1M4X1BSSVZfS0VZX0lORk8gKnA4KTsKKworaW50IFg1MDlfUFVCS0VZX3NldDBfcGFyYW0oWDUwOV9QVUJLRVkgKnB1YiwgQVNOMV9PQkpFQ1QgKmFvYmosCisJCQkJCWludCBwdHlwZSwgdm9pZCAqcHZhbCwKKwkJCQkJdW5zaWduZWQgY2hhciAqcGVuYywgaW50IHBlbmNsZW4pOworaW50IFg1MDlfUFVCS0VZX2dldDBfcGFyYW0oQVNOMV9PQkpFQ1QgKipwcGthbGcsCisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKipwaywgaW50ICpwcGtsZW4sCisJCVg1MDlfQUxHT1IgKipwYSwKKwkJWDUwOV9QVUJLRVkgKnB1Yik7CisKIGludCBYNTA5X2NoZWNrX3RydXN0KFg1MDkgKngsIGludCBpZCwgaW50IGZsYWdzKTsKIGludCBYNTA5X1RSVVNUX2dldF9jb3VudCh2b2lkKTsKIFg1MDlfVFJVU1QgKiBYNTA5X1RSVVNUX2dldDAoaW50IGlkeCk7CkBAIC0xMzM4LDcgKzEyNjQsMTAgQEAKICNkZWZpbmUgWDUwOV9SX0tFWV9WQUxVRVNfTUlTTUFUQ0gJCQkgMTE2CiAjZGVmaW5lIFg1MDlfUl9MT0FESU5HX0NFUlRfRElSCQkJCSAxMDMKICNkZWZpbmUgWDUwOV9SX0xPQURJTkdfREVGQVVMVFMJCQkJIDEwNAorI2RlZmluZSBYNTA5X1JfTUVUSE9EX05PVF9TVVBQT1JURUQJCQkgMTI0CiAjZGVmaW5lIFg1MDlfUl9OT19DRVJUX1NFVF9GT1JfVVNfVE9fVkVSSUZZCQkgMTA1CisjZGVmaW5lIFg1MDlfUl9QVUJMSUNfS0VZX0RFQ09ERV9FUlJPUgkJCSAxMjUKKyNkZWZpbmUgWDUwOV9SX1BVQkxJQ19LRVlfRU5DT0RFX0VSUk9SCQkJIDEyNgogI2RlZmluZSBYNTA5X1JfU0hPVUxEX1JFVFJZCQkJCSAxMDYKICNkZWZpbmUgWDUwOV9SX1VOQUJMRV9UT19GSU5EX1BBUkFNRVRFUlNfSU5fQ0hBSU4JIDEwNwogI2RlZmluZSBYNTA5X1JfVU5BQkxFX1RPX0dFVF9DRVJUU19QVUJMSUNfS0VZCQkgMTA4CmRpZmYgLS1naXQgYS9jcnlwdG8veDUwOS94NTA5X2NtcC5jIGIvY3J5cHRvL3g1MDkveDUwOV9jbXAuYwppbmRleCAyZmFmOTI1Li40YmM5ZGEwIDEwMDY0NAotLS0gYS9jcnlwdG8veDUwOS94NTA5X2NtcC5jCisrKyBiL2NyeXB0by94NTA5L3g1MDlfY21wLmMKQEAgLTExNiw2ICsxMTYsMTMgQEAKIAlyZXR1cm4oWDUwOV9OQU1FX2NtcChhLT5jcmwtPmlzc3VlcixiLT5jcmwtPmlzc3VlcikpOwogCX0KIAorI2lmbmRlZiBPUEVOU1NMX05PX1NIQQoraW50IFg1MDlfQ1JMX21hdGNoKGNvbnN0IFg1MDlfQ1JMICphLCBjb25zdCBYNTA5X0NSTCAqYikKKwl7CisJcmV0dXJuIG1lbWNtcChhLT5zaGExX2hhc2gsIGItPnNoYTFfaGFzaCwgMjApOworCX0KKyNlbmRpZgorCiBYNTA5X05BTUUgKlg1MDlfZ2V0X2lzc3Vlcl9uYW1lKFg1MDkgKmEpCiAJewogCXJldHVybihhLT5jZXJ0X2luZm8tPmlzc3Vlcik7CkBAIC0xMjYsNiArMTMzLDEzIEBACiAJcmV0dXJuKFg1MDlfTkFNRV9oYXNoKHgtPmNlcnRfaW5mby0+aXNzdWVyKSk7CiAJfQogCisjaWZuZGVmIE9QRU5TU0xfTk9fTUQ1Cit1bnNpZ25lZCBsb25nIFg1MDlfaXNzdWVyX25hbWVfaGFzaF9vbGQoWDUwOSAqeCkKKwl7CisJcmV0dXJuKFg1MDlfTkFNRV9oYXNoX29sZCh4LT5jZXJ0X2luZm8tPmlzc3VlcikpOworCX0KKyNlbmRpZgorCiBYNTA5X05BTUUgKlg1MDlfZ2V0X3N1YmplY3RfbmFtZShYNTA5ICphKQogCXsKIAlyZXR1cm4oYS0+Y2VydF9pbmZvLT5zdWJqZWN0KTsKQEAgLTE0MSw2ICsxNTUsMTMgQEAKIAlyZXR1cm4oWDUwOV9OQU1FX2hhc2goeC0+Y2VydF9pbmZvLT5zdWJqZWN0KSk7CiAJfQogCisjaWZuZGVmIE9QRU5TU0xfTk9fTUQ1Cit1bnNpZ25lZCBsb25nIFg1MDlfc3ViamVjdF9uYW1lX2hhc2hfb2xkKFg1MDkgKngpCisJeworCXJldHVybihYNTA5X05BTUVfaGFzaF9vbGQoeC0+Y2VydF9pbmZvLT5zdWJqZWN0KSk7CisJfQorI2VuZGlmCisKICNpZm5kZWYgT1BFTlNTTF9OT19TSEEKIC8qIENvbXBhcmUgdHdvIGNlcnRpZmljYXRlczogdGhleSBtdXN0IGJlIGlkZW50aWNhbCBmb3IKICAqIHRoaXMgdG8gd29yay4gTkI6IEFsdGhvdWdoICJjbXAiIG9wZXJhdGlvbnMgYXJlIGdlbmVyYWxseQpAQCAtMTYyLDE3NyArMTgzLDYzIEBACiAjZW5kaWYKIAogCi0vKiBDYXNlIGluc2Vuc2l0aXZlIHN0cmluZyBjb21wYXJpc2lvbiAqLwotc3RhdGljIGludCBub2Nhc2VfY21wKGNvbnN0IEFTTjFfU1RSSU5HICphLCBjb25zdCBBU04xX1NUUklORyAqYikKLXsKLQlpbnQgaTsKLQotCWlmIChhLT5sZW5ndGggIT0gYi0+bGVuZ3RoKQotCQlyZXR1cm4gKGEtPmxlbmd0aCAtIGItPmxlbmd0aCk7Ci0KLQlmb3IgKGk9MDsgaTxhLT5sZW5ndGg7IGkrKykKLQl7Ci0JCWludCBjYSwgY2I7Ci0KLQkJY2EgPSB0b2xvd2VyKGEtPmRhdGFbaV0pOwotCQljYiA9IHRvbG93ZXIoYi0+ZGF0YVtpXSk7Ci0KLQkJaWYgKGNhICE9IGNiKQotCQkJcmV0dXJuKGNhLWNiKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIENhc2UgaW5zZW5zaXRpdmUgc3RyaW5nIGNvbXBhcmlzaW9uIHdpdGggc3BhY2Ugbm9ybWFsaXphdGlvbiAKLSAqIFNwYWNlIG5vcm1hbGl6YXRpb24gLSBpZ25vcmUgbGVhZGluZywgdHJhaWxpbmcgc3BhY2VzLCAKLSAqICAgICAgIG11bHRpcGxlIHNwYWNlcyBiZXR3ZWVuIGNoYXJhY3RlcnMgYXJlIHJlcGxhY2VkIGJ5IHNpbmdsZSBzcGFjZSAgCi0gKi8KLXN0YXRpYyBpbnQgbm9jYXNlX3NwYWNlbm9ybV9jbXAoY29uc3QgQVNOMV9TVFJJTkcgKmEsIGNvbnN0IEFTTjFfU1RSSU5HICpiKQotewotCXVuc2lnbmVkIGNoYXIgKnBhID0gTlVMTCwgKnBiID0gTlVMTDsKLQlpbnQgbGEsIGxiOwotCQotCWxhID0gYS0+bGVuZ3RoOwotCWxiID0gYi0+bGVuZ3RoOwotCXBhID0gYS0+ZGF0YTsKLQlwYiA9IGItPmRhdGE7Ci0KLQkvKiBza2lwIGxlYWRpbmcgc3BhY2VzICovCi0Jd2hpbGUgKGxhID4gMCAmJiBpc3NwYWNlKCpwYSkpCi0JewotCQlsYS0tOwotCQlwYSsrOwotCX0KLQl3aGlsZSAobGIgPiAwICYmIGlzc3BhY2UoKnBiKSkKLQl7Ci0JCWxiLS07Ci0JCXBiKys7Ci0JfQotCi0JLyogc2tpcCB0cmFpbGluZyBzcGFjZXMgKi8KLQl3aGlsZSAobGEgPiAwICYmIGlzc3BhY2UocGFbbGEtMV0pKQotCQlsYS0tOwotCXdoaWxlIChsYiA+IDAgJiYgaXNzcGFjZShwYltsYi0xXSkpCi0JCWxiLS07Ci0KLQkvKiBjb21wYXJlIHN0cmluZ3Mgd2l0aCBzcGFjZSBub3JtYWxpemF0aW9uICovCi0Jd2hpbGUgKGxhID4gMCAmJiBsYiA+IDApCi0JewotCQlpbnQgY2EsIGNiOwotCi0JCS8qIGNvbXBhcmUgY2hhcmFjdGVyICovCi0JCWNhID0gdG9sb3dlcigqcGEpOwotCQljYiA9IHRvbG93ZXIoKnBiKTsKLQkJaWYgKGNhICE9IGNiKQotCQkJcmV0dXJuIChjYSAtIGNiKTsKLQotCQlwYSsrOyBwYisrOwotCQlsYS0tOyBsYi0tOwotCi0JCWlmIChsYSA8PSAwIHx8IGxiIDw9IDApCi0JCQlicmVhazsKLQotCQkvKiBpcyB3aGl0ZSBzcGFjZSBuZXh0IGNoYXJhY3RlciA/ICovCi0JCWlmIChpc3NwYWNlKCpwYSkgJiYgaXNzcGFjZSgqcGIpKQotCQl7Ci0JCQkvKiBza2lwIHJlbWFpbmluZyB3aGl0ZSBzcGFjZXMgKi8KLQkJCXdoaWxlIChsYSA+IDAgJiYgaXNzcGFjZSgqcGEpKQotCQkJewotCQkJCWxhLS07Ci0JCQkJcGErKzsKLQkJCX0KLQkJCXdoaWxlIChsYiA+IDAgJiYgaXNzcGFjZSgqcGIpKQotCQkJewotCQkJCWxiLS07Ci0JCQkJcGIrKzsKLQkJCX0KLQkJfQotCX0KLQlpZiAobGEgPiAwIHx8IGxiID4gMCkKLQkJcmV0dXJuIGxhIC0gbGI7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhc24xX3N0cmluZ19tZW1jbXAoQVNOMV9TVFJJTkcgKmEsIEFTTjFfU1RSSU5HICpiKQotCXsKLQlpbnQgajsKLQlqID0gYS0+bGVuZ3RoIC0gYi0+bGVuZ3RoOwotCWlmIChqKQotCQlyZXR1cm4gajsKLQlyZXR1cm4gbWVtY21wKGEtPmRhdGEsIGItPmRhdGEsIGEtPmxlbmd0aCk7Ci0JfQotCi0jZGVmaW5lIFNUUl9UWVBFX0NNUCAoQl9BU04xX1BSSU5UQUJMRVNUUklOR3xCX0FTTjFfVDYxU1RSSU5HfEJfQVNOMV9VVEY4U1RSSU5HKQotCiBpbnQgWDUwOV9OQU1FX2NtcChjb25zdCBYNTA5X05BTUUgKmEsIGNvbnN0IFg1MDlfTkFNRSAqYikKIAl7Ci0JaW50IGksajsKLQlYNTA5X05BTUVfRU5UUlkgKm5hLCpuYjsKKwlpbnQgcmV0OwogCi0JdW5zaWduZWQgbG9uZyBuYWJpdCwgbmJiaXQ7CisJLyogRW5zdXJlIGNhbm9uaWNhbCBlbmNvZGluZyBpcyBwcmVzZW50IGFuZCB1cCB0byBkYXRlICovCiAKLQlqID0gc2tfWDUwOV9OQU1FX0VOVFJZX251bShhLT5lbnRyaWVzKQotCQkgIC0gc2tfWDUwOV9OQU1FX0VOVFJZX251bShiLT5lbnRyaWVzKTsKLQlpZiAoaikKLQkJcmV0dXJuIGo7Ci0JZm9yIChpPXNrX1g1MDlfTkFNRV9FTlRSWV9udW0oYS0+ZW50cmllcyktMTsgaT49MDsgaS0tKQorCWlmICghYS0+Y2Fub25fZW5jIHx8IGEtPm1vZGlmaWVkKQogCQl7Ci0JCW5hPXNrX1g1MDlfTkFNRV9FTlRSWV92YWx1ZShhLT5lbnRyaWVzLGkpOwotCQluYj1za19YNTA5X05BTUVfRU5UUllfdmFsdWUoYi0+ZW50cmllcyxpKTsKLQkJaj1uYS0+dmFsdWUtPnR5cGUtbmItPnZhbHVlLT50eXBlOwotCQlpZiAoaikKLQkJCXsKLQkJCW5hYml0ID0gQVNOMV90YWcyYml0KG5hLT52YWx1ZS0+dHlwZSk7Ci0JCQluYmJpdCA9IEFTTjFfdGFnMmJpdChuYi0+dmFsdWUtPnR5cGUpOwotCQkJaWYgKCEobmFiaXQgJiBTVFJfVFlQRV9DTVApIHx8Ci0JCQkJIShuYmJpdCAmIFNUUl9UWVBFX0NNUCkpCi0JCQkJcmV0dXJuIGo7Ci0JCQlpZiAoIWFzbjFfc3RyaW5nX21lbWNtcChuYS0+dmFsdWUsIG5iLT52YWx1ZSkpCi0JCQkJaiA9IDA7Ci0JCQl9Ci0JCWVsc2UgaWYgKG5hLT52YWx1ZS0+dHlwZSA9PSBWX0FTTjFfUFJJTlRBQkxFU1RSSU5HKQotCQkJaj1ub2Nhc2Vfc3BhY2Vub3JtX2NtcChuYS0+dmFsdWUsIG5iLT52YWx1ZSk7Ci0JCWVsc2UgaWYgKG5hLT52YWx1ZS0+dHlwZSA9PSBWX0FTTjFfSUE1U1RSSU5HCi0JCQkmJiBPQkpfb2JqMm5pZChuYS0+b2JqZWN0KSA9PSBOSURfcGtjczlfZW1haWxBZGRyZXNzKQotCQkJaj1ub2Nhc2VfY21wKG5hLT52YWx1ZSwgbmItPnZhbHVlKTsKLQkJZWxzZQotCQkJaiA9IGFzbjFfc3RyaW5nX21lbWNtcChuYS0+dmFsdWUsIG5iLT52YWx1ZSk7Ci0JCWlmIChqKSByZXR1cm4oaik7Ci0JCWo9bmEtPnNldC1uYi0+c2V0OwotCQlpZiAoaikgcmV0dXJuKGopOworCQlyZXQgPSBpMmRfWDUwOV9OQU1FKChYNTA5X05BTUUgKilhLCBOVUxMKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gLTI7CiAJCX0KIAotCS8qIFdlIHdpbGwgY2hlY2sgdGhlIG9iamVjdCB0eXBlcyBhZnRlciBjaGVja2luZyB0aGUgdmFsdWVzCi0JICogc2luY2UgdGhlIHZhbHVlcyB3aWxsIG1vcmUgb2Z0ZW4gYmUgZGlmZmVyZW50IHRoYW4gdGhlIG9iamVjdAotCSAqIHR5cGVzLiAqLwotCWZvciAoaT1za19YNTA5X05BTUVfRU5UUllfbnVtKGEtPmVudHJpZXMpLTE7IGk+PTA7IGktLSkKKwlpZiAoIWItPmNhbm9uX2VuYyB8fCBiLT5tb2RpZmllZCkKIAkJewotCQluYT1za19YNTA5X05BTUVfRU5UUllfdmFsdWUoYS0+ZW50cmllcyxpKTsKLQkJbmI9c2tfWDUwOV9OQU1FX0VOVFJZX3ZhbHVlKGItPmVudHJpZXMsaSk7Ci0JCWo9T0JKX2NtcChuYS0+b2JqZWN0LG5iLT5vYmplY3QpOwotCQlpZiAoaikgcmV0dXJuKGopOworCQlyZXQgPSBpMmRfWDUwOV9OQU1FKChYNTA5X05BTUUgKiliLCBOVUxMKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gLTI7CiAJCX0KLQlyZXR1cm4oMCk7CisKKwlyZXQgPSBhLT5jYW5vbl9lbmNsZW4gLSBiLT5jYW5vbl9lbmNsZW47CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIG1lbWNtcChhLT5jYW5vbl9lbmMsIGItPmNhbm9uX2VuYywgYS0+Y2Fub25fZW5jbGVuKTsKKwogCX0KIAordW5zaWduZWQgbG9uZyBYNTA5X05BTUVfaGFzaChYNTA5X05BTUUgKngpCisJeworCXVuc2lnbmVkIGxvbmcgcmV0PTA7CisJdW5zaWduZWQgY2hhciBtZFtTSEFfRElHRVNUX0xFTkdUSF07CisKKwkvKiBNYWtlIHN1cmUgWDUwOV9OQU1FIHN0cnVjdHVyZSBjb250YWlucyB2YWxpZCBjYWNoZWQgZW5jb2RpbmcgKi8KKwlpMmRfWDUwOV9OQU1FKHgsTlVMTCk7CisJRVZQX0RpZ2VzdCh4LT5jYW5vbl9lbmMsIHgtPmNhbm9uX2VuY2xlbiwgbWQsIE5VTEwsIEVWUF9zaGExKCksIE5VTEwpOworCisJcmV0PSgJKCh1bnNpZ25lZCBsb25nKW1kWzBdICAgICApfCgodW5zaWduZWQgbG9uZyltZFsxXTw8OEwpfAorCQkoKHVuc2lnbmVkIGxvbmcpbWRbMl08PDE2TCl8KCh1bnNpZ25lZCBsb25nKW1kWzNdPDwyNEwpCisJCSkmMHhmZmZmZmZmZkw7CisJcmV0dXJuKHJldCk7CisJfQorCisKICNpZm5kZWYgT1BFTlNTTF9OT19NRDUKIC8qIEkgbm93IERFUiBlbmNvZGUgdGhlIG5hbWUgYW5kIGhhc2ggaXQuICBTaW5jZSBJIGNhY2hlIHRoZSBERVIgZW5jb2RpbmcsCiAgKiB0aGlzIGlzIHJlYXNvbmFibHkgZWZmaWNpZW50LiAqLwotdW5zaWduZWQgbG9uZyBYNTA5X05BTUVfaGFzaChYNTA5X05BTUUgKngpCisKK3Vuc2lnbmVkIGxvbmcgWDUwOV9OQU1FX2hhc2hfb2xkKFg1MDlfTkFNRSAqeCkKIAl7CiAJdW5zaWduZWQgbG9uZyByZXQ9MDsKIAl1bnNpZ25lZCBjaGFyIG1kWzE2XTsKLQlFVlBfTURfQ1RYIG1kX2N0eDsKIAogCS8qIE1ha2Ugc3VyZSBYNTA5X05BTUUgc3RydWN0dXJlIGNvbnRhaW5zIHZhbGlkIGNhY2hlZCBlbmNvZGluZyAqLwogCWkyZF9YNTA5X05BTUUoeCxOVUxMKTsKLQlFVlBfTURfQ1RYX2luaXQoJm1kX2N0eCk7Ci0JRVZQX01EX0NUWF9zZXRfZmxhZ3MoJm1kX2N0eCwgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKTsKLQlFVlBfRGlnZXN0SW5pdF9leCgmbWRfY3R4LCBFVlBfbWQ1KCksIE5VTEwpOwotCUVWUF9EaWdlc3RVcGRhdGUoJm1kX2N0eCwgeC0+Ynl0ZXMtPmRhdGEsIHgtPmJ5dGVzLT5sZW5ndGgpOwotCUVWUF9EaWdlc3RGaW5hbF9leCgmbWRfY3R4LG1kLE5VTEwpOwotCUVWUF9NRF9DVFhfY2xlYW51cCgmbWRfY3R4KTsKKwlFVlBfRGlnZXN0KHgtPmJ5dGVzLT5kYXRhLCB4LT5ieXRlcy0+bGVuZ3RoLCBtZCwgTlVMTCwgRVZQX21kNSgpLCBOVUxMKTsKIAogCXJldD0oCSgodW5zaWduZWQgbG9uZyltZFswXSAgICAgKXwoKHVuc2lnbmVkIGxvbmcpbWRbMV08PDhMKXwKIAkJKCh1bnNpZ25lZCBsb25nKW1kWzJdPDwxNkwpfCgodW5zaWduZWQgbG9uZyltZFszXTw8MjRMKQpAQCAtMzkzLDE0ICszMDAsMTkgQEAKIAogaW50IFg1MDlfY2hlY2tfcHJpdmF0ZV9rZXkoWDUwOSAqeCwgRVZQX1BLRVkgKmspCiAJewotCUVWUF9QS0VZICp4az1OVUxMOwotCWludCBvaz0wOworCUVWUF9QS0VZICp4azsKKwlpbnQgcmV0OwogCiAJeGs9WDUwOV9nZXRfcHVia2V5KHgpOwotCXN3aXRjaCAoRVZQX1BLRVlfY21wKHhrLCBrKSkKKworCWlmICh4aykKKwkJcmV0ID0gRVZQX1BLRVlfY21wKHhrLCBrKTsKKwllbHNlCisJCXJldCA9IC0yOworCisJc3dpdGNoIChyZXQpCiAJCXsKIAljYXNlIDE6Ci0JCW9rPTE7CiAJCWJyZWFrOwogCWNhc2UgMDoKIAkJWDUwOWVycihYNTA5X0ZfWDUwOV9DSEVDS19QUklWQVRFX0tFWSxYNTA5X1JfS0VZX1ZBTFVFU19NSVNNQVRDSCk7CkBAIC00MDksMjQgKzMyMSwxMSBAQAogCQlYNTA5ZXJyKFg1MDlfRl9YNTA5X0NIRUNLX1BSSVZBVEVfS0VZLFg1MDlfUl9LRVlfVFlQRV9NSVNNQVRDSCk7CiAJCWJyZWFrOwogCWNhc2UgLTI6Ci0jaWZuZGVmIE9QRU5TU0xfTk9fRUMKLQkJaWYgKGstPnR5cGUgPT0gRVZQX1BLRVlfRUMpCi0JCQl7Ci0JCQlYNTA5ZXJyKFg1MDlfRl9YNTA5X0NIRUNLX1BSSVZBVEVfS0VZLCBFUlJfUl9FQ19MSUIpOwotCQkJYnJlYWs7Ci0JCQl9Ci0jZW5kaWYKLSNpZm5kZWYgT1BFTlNTTF9OT19ESAotCQlpZiAoay0+dHlwZSA9PSBFVlBfUEtFWV9ESCkKLQkJCXsKLQkJCS8qIE5vIGlkZWEgKi8KLQkJCVg1MDllcnIoWDUwOV9GX1g1MDlfQ0hFQ0tfUFJJVkFURV9LRVksWDUwOV9SX0NBTlRfQ0hFQ0tfREhfS0VZKTsKLQkJCWJyZWFrOwotCQkJfQotI2VuZGlmCiAJICAgICAgICBYNTA5ZXJyKFg1MDlfRl9YNTA5X0NIRUNLX1BSSVZBVEVfS0VZLFg1MDlfUl9VTktOT1dOX0tFWV9UWVBFKTsKIAkJfQotCi0JRVZQX1BLRVlfZnJlZSh4ayk7Ci0JcmV0dXJuKG9rKTsKKwlpZiAoeGspCisJCUVWUF9QS0VZX2ZyZWUoeGspOworCWlmIChyZXQgPiAwKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKIAl9CmRpZmYgLS1naXQgYS9jcnlwdG8veDUwOS94NTA5X2Vyci5jIGIvY3J5cHRvL3g1MDkveDUwOV9lcnIuYwppbmRleCBmYjM3NzI5Li5hMDE0MDJmIDEwMDY0NAotLS0gYS9jcnlwdG8veDUwOS94NTA5X2Vyci5jCisrKyBiL2NyeXB0by94NTA5L3g1MDlfZXJyLmMKQEAgLTEsNiArMSw2IEBACiAvKiBjcnlwdG8veDUwOS94NTA5X2Vyci5jICovCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNiBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTMyLDcgKzEzMiwxMCBAQAoge0VSUl9SRUFTT04oWDUwOV9SX0tFWV9WQUxVRVNfTUlTTUFUQ0gpICAsImtleSB2YWx1ZXMgbWlzbWF0Y2gifSwKIHtFUlJfUkVBU09OKFg1MDlfUl9MT0FESU5HX0NFUlRfRElSKSAgICAgLCJsb2FkaW5nIGNlcnQgZGlyIn0sCiB7RVJSX1JFQVNPTihYNTA5X1JfTE9BRElOR19ERUZBVUxUUykgICAgICwibG9hZGluZyBkZWZhdWx0cyJ9LAore0VSUl9SRUFTT04oWDUwOV9SX01FVEhPRF9OT1RfU1VQUE9SVEVEKSAsIm1ldGhvZCBub3Qgc3VwcG9ydGVkIn0sCiB7RVJSX1JFQVNPTihYNTA5X1JfTk9fQ0VSVF9TRVRfRk9SX1VTX1RPX1ZFUklGWSksIm5vIGNlcnQgc2V0IGZvciB1cyB0byB2ZXJpZnkifSwKK3tFUlJfUkVBU09OKFg1MDlfUl9QVUJMSUNfS0VZX0RFQ09ERV9FUlJPUiksInB1YmxpYyBrZXkgZGVjb2RlIGVycm9yIn0sCit7RVJSX1JFQVNPTihYNTA5X1JfUFVCTElDX0tFWV9FTkNPREVfRVJST1IpLCJwdWJsaWMga2V5IGVuY29kZSBlcnJvciJ9LAoge0VSUl9SRUFTT04oWDUwOV9SX1NIT1VMRF9SRVRSWSkgICAgICAgICAsInNob3VsZCByZXRyeSJ9LAoge0VSUl9SRUFTT04oWDUwOV9SX1VOQUJMRV9UT19GSU5EX1BBUkFNRVRFUlNfSU5fQ0hBSU4pLCJ1bmFibGUgdG8gZmluZCBwYXJhbWV0ZXJzIGluIGNoYWluIn0sCiB7RVJSX1JFQVNPTihYNTA5X1JfVU5BQkxFX1RPX0dFVF9DRVJUU19QVUJMSUNfS0VZKSwidW5hYmxlIHRvIGdldCBjZXJ0cyBwdWJsaWMga2V5In0sCmRpZmYgLS1naXQgYS9jcnlwdG8veDUwOS94NTA5X2x1LmMgYi9jcnlwdG8veDUwOS94NTA5X2x1LmMKaW5kZXggYjQ4NjE3MS4uM2E2ZTA0YSAxMDA2NDQKLS0tIGEvY3J5cHRvL3g1MDkveDUwOV9sdS5jCisrKyBiL2NyeXB0by94NTA5L3g1MDlfbHUuYwpAQCAtMTk2LDYgKzE5Niw4IEBACiAJcmV0LT5nZXRfY3JsID0gMDsKIAlyZXQtPmNoZWNrX2NybCA9IDA7CiAJcmV0LT5jZXJ0X2NybCA9IDA7CisJcmV0LT5sb29rdXBfY2VydHMgPSAwOworCXJldC0+bG9va3VwX2NybHMgPSAwOwogCXJldC0+Y2xlYW51cCA9IDA7CiAKIAlpZiAoIUNSWVBUT19uZXdfZXhfZGF0YShDUllQVE9fRVhfSU5ERVhfWDUwOV9TVE9SRSwgcmV0LCAmcmV0LT5leF9kYXRhKSkKQEAgLTI5Niw3ICsyOTgsNyBAQAogCXRtcD1YNTA5X09CSkVDVF9yZXRyaWV2ZV9ieV9zdWJqZWN0KGN0eC0+b2Jqcyx0eXBlLG5hbWUpOwogCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19YNTA5X1NUT1JFKTsKIAotCWlmICh0bXAgPT0gTlVMTCkKKwlpZiAodG1wID09IE5VTEwgfHwgdHlwZSA9PSBYNTA5X0xVX0NSTCkKIAkJewogCQlmb3IgKGk9dnMtPmN1cnJlbnRfbWV0aG9kOyBpPHNrX1g1MDlfTE9PS1VQX251bShjdHgtPmdldF9jZXJ0X21ldGhvZHMpOyBpKyspCiAJCQl7CkBAIC00MjEsMTQgKzQyMywxNSBAQAogCQl9CiAJfQogCi1pbnQgWDUwOV9PQkpFQ1RfaWR4X2J5X3N1YmplY3QoU1RBQ0tfT0YoWDUwOV9PQkpFQ1QpICpoLCBpbnQgdHlwZSwKLQkgICAgIFg1MDlfTkFNRSAqbmFtZSkKK3N0YXRpYyBpbnQgeDUwOV9vYmplY3RfaWR4X2NudChTVEFDS19PRihYNTA5X09CSkVDVCkgKmgsIGludCB0eXBlLAorCSAgICAgWDUwOV9OQU1FICpuYW1lLCBpbnQgKnBubWF0Y2gpCiAJewogCVg1MDlfT0JKRUNUIHN0bXA7CiAJWDUwOSB4NTA5X3M7CiAJWDUwOV9DSU5GIGNpbmZfczsKIAlYNTA5X0NSTCBjcmxfczsKIAlYNTA5X0NSTF9JTkZPIGNybF9pbmZvX3M7CisJaW50IGlkeDsKIAogCXN0bXAudHlwZT10eXBlOwogCXN3aXRjaCAodHlwZSkKQEAgLTQ0OCw3ICs0NTEsMjkgQEAKIAkJcmV0dXJuIC0xOwogCQl9CiAKLQlyZXR1cm4gc2tfWDUwOV9PQkpFQ1RfZmluZChoLCZzdG1wKTsKKwlpZHggPSBza19YNTA5X09CSkVDVF9maW5kKGgsJnN0bXApOworCWlmIChpZHggPj0gMCAmJiBwbm1hdGNoKQorCQl7CisJCWludCB0aWR4OworCQljb25zdCBYNTA5X09CSkVDVCAqdG9iaiwgKnBzdG1wOworCQkqcG5tYXRjaCA9IDE7CisJCXBzdG1wID0gJnN0bXA7CisJCWZvciAodGlkeCA9IGlkeCArIDE7IHRpZHggPCBza19YNTA5X09CSkVDVF9udW0oaCk7IHRpZHgrKykKKwkJCXsKKwkJCXRvYmogPSBza19YNTA5X09CSkVDVF92YWx1ZShoLCB0aWR4KTsKKwkJCWlmICh4NTA5X29iamVjdF9jbXAoJnRvYmosICZwc3RtcCkpCisJCQkJYnJlYWs7CisJCQkoKnBubWF0Y2gpKys7CisJCQl9CisJCX0KKwlyZXR1cm4gaWR4OworCX0KKworCitpbnQgWDUwOV9PQkpFQ1RfaWR4X2J5X3N1YmplY3QoU1RBQ0tfT0YoWDUwOV9PQkpFQ1QpICpoLCBpbnQgdHlwZSwKKwkgICAgIFg1MDlfTkFNRSAqbmFtZSkKKwl7CisJcmV0dXJuIHg1MDlfb2JqZWN0X2lkeF9jbnQoaCwgdHlwZSwgbmFtZSwgTlVMTCk7CiAJfQogCiBYNTA5X09CSkVDVCAqWDUwOV9PQkpFQ1RfcmV0cmlldmVfYnlfc3ViamVjdChTVEFDS19PRihYNTA5X09CSkVDVCkgKmgsIGludCB0eXBlLApAQCAtNDYwLDE5ICs0ODUsMTI1IEBACiAJcmV0dXJuIHNrX1g1MDlfT0JKRUNUX3ZhbHVlKGgsIGlkeCk7CiAJfQogCitTVEFDS19PRihYNTA5KSogWDUwOV9TVE9SRV9nZXQxX2NlcnRzKFg1MDlfU1RPUkVfQ1RYICpjdHgsIFg1MDlfTkFNRSAqbm0pCisJeworCWludCBpLCBpZHgsIGNudDsKKwlTVEFDS19PRihYNTA5KSAqc2s7CisJWDUwOSAqeDsKKwlYNTA5X09CSkVDVCAqb2JqOworCXNrID0gc2tfWDUwOV9uZXdfbnVsbCgpOworCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfWDUwOV9TVE9SRSk7CisJaWR4ID0geDUwOV9vYmplY3RfaWR4X2NudChjdHgtPmN0eC0+b2JqcywgWDUwOV9MVV9YNTA5LCBubSwgJmNudCk7CisJaWYgKGlkeCA8IDApCisJCXsKKwkJLyogTm90aGluZyBmb3VuZCBpbiBjYWNoZTogZG8gbG9va3VwIHRvIHBvc3NpYmx5IGFkZCBuZXcKKwkJICogb2JqZWN0cyB0byBjYWNoZQorCQkgKi8KKwkJWDUwOV9PQkpFQ1QgeG9iajsKKwkJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1g1MDlfU1RPUkUpOworCQlpZiAoIVg1MDlfU1RPUkVfZ2V0X2J5X3N1YmplY3QoY3R4LCBYNTA5X0xVX1g1MDksIG5tLCAmeG9iaikpCisJCQl7CisJCQlza19YNTA5X2ZyZWUoc2spOworCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCVg1MDlfT0JKRUNUX2ZyZWVfY29udGVudHMoJnhvYmopOworCQlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1g1MDlfU1RPUkUpOworCQlpZHggPSB4NTA5X29iamVjdF9pZHhfY250KGN0eC0+Y3R4LT5vYmpzLFg1MDlfTFVfWDUwOSxubSwgJmNudCk7CisJCWlmIChpZHggPCAwKQorCQkJeworCQkJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1g1MDlfU1RPUkUpOworCQkJc2tfWDUwOV9mcmVlKHNrKTsKKwkJCXJldHVybiBOVUxMOworCQkJfQorCQl9CisJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrLCBpZHgrKykKKwkJeworCQlvYmogPSBza19YNTA5X09CSkVDVF92YWx1ZShjdHgtPmN0eC0+b2JqcywgaWR4KTsKKwkJeCA9IG9iai0+ZGF0YS54NTA5OworCQlDUllQVE9fYWRkKCZ4LT5yZWZlcmVuY2VzLCAxLCBDUllQVE9fTE9DS19YNTA5KTsKKwkJaWYgKCFza19YNTA5X3B1c2goc2ssIHgpKQorCQkJeworCQkJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1g1MDlfU1RPUkUpOworCQkJWDUwOV9mcmVlKHgpOworCQkJc2tfWDUwOV9wb3BfZnJlZShzaywgWDUwOV9mcmVlKTsKKwkJCXJldHVybiBOVUxMOworCQkJfQorCQl9CisJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1g1MDlfU1RPUkUpOworCXJldHVybiBzazsKKworCX0KKworU1RBQ0tfT0YoWDUwOV9DUkwpKiBYNTA5X1NUT1JFX2dldDFfY3JscyhYNTA5X1NUT1JFX0NUWCAqY3R4LCBYNTA5X05BTUUgKm5tKQorCXsKKwlpbnQgaSwgaWR4LCBjbnQ7CisJU1RBQ0tfT0YoWDUwOV9DUkwpICpzazsKKwlYNTA5X0NSTCAqeDsKKwlYNTA5X09CSkVDVCAqb2JqLCB4b2JqOworCXNrID0gc2tfWDUwOV9DUkxfbmV3X251bGwoKTsKKwlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1g1MDlfU1RPUkUpOworCS8qIENoZWNrIGNhY2hlIGZpcnN0ICovCisJaWR4ID0geDUwOV9vYmplY3RfaWR4X2NudChjdHgtPmN0eC0+b2JqcywgWDUwOV9MVV9DUkwsIG5tLCAmY250KTsKKworCS8qIEFsd2F5cyBkbyBsb29rdXAgdG8gcG9zc2libHkgYWRkIG5ldyBDUkxzIHRvIGNhY2hlCisJICovCisJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1g1MDlfU1RPUkUpOworCWlmICghWDUwOV9TVE9SRV9nZXRfYnlfc3ViamVjdChjdHgsIFg1MDlfTFVfQ1JMLCBubSwgJnhvYmopKQorCQl7CisJCXNrX1g1MDlfQ1JMX2ZyZWUoc2spOworCQlyZXR1cm4gTlVMTDsKKwkJfQorCVg1MDlfT0JKRUNUX2ZyZWVfY29udGVudHMoJnhvYmopOworCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfWDUwOV9TVE9SRSk7CisJaWR4ID0geDUwOV9vYmplY3RfaWR4X2NudChjdHgtPmN0eC0+b2JqcyxYNTA5X0xVX0NSTCwgbm0sICZjbnQpOworCWlmIChpZHggPCAwKQorCQl7CisJCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19YNTA5X1NUT1JFKTsKKwkJc2tfWDUwOV9DUkxfZnJlZShzayk7CisJCXJldHVybiBOVUxMOworCQl9CisKKwlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyssIGlkeCsrKQorCQl7CisJCW9iaiA9IHNrX1g1MDlfT0JKRUNUX3ZhbHVlKGN0eC0+Y3R4LT5vYmpzLCBpZHgpOworCQl4ID0gb2JqLT5kYXRhLmNybDsKKwkJQ1JZUFRPX2FkZCgmeC0+cmVmZXJlbmNlcywgMSwgQ1JZUFRPX0xPQ0tfWDUwOV9DUkwpOworCQlpZiAoIXNrX1g1MDlfQ1JMX3B1c2goc2ssIHgpKQorCQkJeworCQkJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1g1MDlfU1RPUkUpOworCQkJWDUwOV9DUkxfZnJlZSh4KTsKKwkJCXNrX1g1MDlfQ1JMX3BvcF9mcmVlKHNrLCBYNTA5X0NSTF9mcmVlKTsKKwkJCXJldHVybiBOVUxMOworCQkJfQorCQl9CisJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1g1MDlfU1RPUkUpOworCXJldHVybiBzazsKKwl9CisKIFg1MDlfT0JKRUNUICpYNTA5X09CSkVDVF9yZXRyaWV2ZV9tYXRjaChTVEFDS19PRihYNTA5X09CSkVDVCkgKmgsIFg1MDlfT0JKRUNUICp4KQogCXsKIAlpbnQgaWR4LCBpOwogCVg1MDlfT0JKRUNUICpvYmo7CiAJaWR4ID0gc2tfWDUwOV9PQkpFQ1RfZmluZChoLCB4KTsKIAlpZiAoaWR4ID09IC0xKSByZXR1cm4gTlVMTDsKLQlpZiAoeC0+dHlwZSAhPSBYNTA5X0xVX1g1MDkpIHJldHVybiBza19YNTA5X09CSkVDVF92YWx1ZShoLCBpZHgpOworCWlmICgoeC0+dHlwZSAhPSBYNTA5X0xVX1g1MDkpICYmICh4LT50eXBlICE9IFg1MDlfTFVfQ1JMKSkKKwkJcmV0dXJuIHNrX1g1MDlfT0JKRUNUX3ZhbHVlKGgsIGlkeCk7CiAJZm9yIChpID0gaWR4OyBpIDwgc2tfWDUwOV9PQkpFQ1RfbnVtKGgpOyBpKyspCiAJCXsKIAkJb2JqID0gc2tfWDUwOV9PQkpFQ1RfdmFsdWUoaCwgaSk7CiAJCWlmICh4NTA5X29iamVjdF9jbXAoKGNvbnN0IFg1MDlfT0JKRUNUICoqKSZvYmosIChjb25zdCBYNTA5X09CSkVDVCAqKikmeCkpCiAJCQlyZXR1cm4gTlVMTDsKLQkJaWYgKCh4LT50eXBlICE9IFg1MDlfTFVfWDUwOSkgfHwgIVg1MDlfY21wKG9iai0+ZGF0YS54NTA5LCB4LT5kYXRhLng1MDkpKQorCQlpZiAoeC0+dHlwZSA9PSBYNTA5X0xVX1g1MDkpCisJCQl7CisJCQlpZiAoIVg1MDlfY21wKG9iai0+ZGF0YS54NTA5LCB4LT5kYXRhLng1MDkpKQorCQkJCXJldHVybiBvYmo7CisJCQl9CisJCWVsc2UgaWYgKHgtPnR5cGUgPT0gWDUwOV9MVV9DUkwpCisJCQl7CisJCQlpZiAoIVg1MDlfQ1JMX21hdGNoKG9iai0+ZGF0YS5jcmwsIHgtPmRhdGEuY3JsKSkKKwkJCQlyZXR1cm4gb2JqOworCQkJfQorCQllbHNlCiAJCQlyZXR1cm4gb2JqOwogCQl9CiAJcmV0dXJuIE5VTEw7CkBAIC01NzUsNSArNzA2LDExIEBACiAJcmV0dXJuIFg1MDlfVkVSSUZZX1BBUkFNX3NldDEoY3R4LT5wYXJhbSwgcGFyYW0pOwogCX0KIAordm9pZCBYNTA5X1NUT1JFX3NldF92ZXJpZnlfY2IoWDUwOV9TVE9SRSAqY3R4LAorCQkJCSAgaW50ICgqdmVyaWZ5X2NiKShpbnQsIFg1MDlfU1RPUkVfQ1RYICopKQorCXsKKwljdHgtPnZlcmlmeV9jYiA9IHZlcmlmeV9jYjsKKwl9CisKIElNUExFTUVOVF9TVEFDS19PRihYNTA5X0xPT0tVUCkKIElNUExFTUVOVF9TVEFDS19PRihYNTA5X09CSkVDVCkKZGlmZiAtLWdpdCBhL2NyeXB0by94NTA5L3g1MDlfb2JqLmMgYi9jcnlwdG8veDUwOS94NTA5X29iai5jCmluZGV4IDFlNzE4ZjcuLjIxZmVkOWYgMTAwNjQ0Ci0tLSBhL2NyeXB0by94NTA5L3g1MDlfb2JqLmMKKysrIGIvY3J5cHRvL3g1MDkveDUwOV9vYmouYwpAQCAtNzIsNyArNzIsNyBAQAogCWNoYXIgKnA7CiAJdW5zaWduZWQgY2hhciAqcTsKIAlCVUZfTUVNICpiPU5VTEw7Ci0Jc3RhdGljIGNoYXIgaGV4WzE3XT0iMDEyMzQ1Njc4OUFCQ0RFRiI7CisJc3RhdGljIGNvbnN0IGNoYXIgaGV4WzE3XT0iMDEyMzQ1Njc4OUFCQ0RFRiI7CiAJaW50IGdzX2RvaXRbNF07CiAJY2hhciB0bXBfYnVmWzgwXTsKICNpZmRlZiBDSEFSU0VUX0VCQ0RJQwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3g1MDkveDUwOV9yZXEuYyBiL2NyeXB0by94NTA5L3g1MDlfcmVxLmMKaW5kZXggMzg3MmUxZi4uNDgxODNkYyAxMDA2NDQKLS0tIGEvY3J5cHRvL3g1MDkveDUwOV9yZXEuYworKysgYi9jcnlwdG8veDUwOS94NTA5X3JlcS5jCkBAIC02MSw2ICs2MSw3IEBACiAjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgogI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9hc24xLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9hc24xdC5oPgogI2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgogI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgogI2luY2x1ZGUgPG9wZW5zc2wvYnVmZmVyLmg+CkBAIC0yMDUsMTAgKzIwNiw5IEBACiAJaWYoIWV4dCB8fCAoZXh0LT50eXBlICE9IFZfQVNOMV9TRVFVRU5DRSkpCiAJCXJldHVybiBOVUxMOwogCXAgPSBleHQtPnZhbHVlLnNlcXVlbmNlLT5kYXRhOwotCXJldHVybiBkMmlfQVNOMV9TRVRfT0ZfWDUwOV9FWFRFTlNJT04oTlVMTCwgJnAsCi0JCQlleHQtPnZhbHVlLnNlcXVlbmNlLT5sZW5ndGgsCi0JCQlkMmlfWDUwOV9FWFRFTlNJT04sIFg1MDlfRVhURU5TSU9OX2ZyZWUsCi0JCQlWX0FTTjFfU0VRVUVOQ0UsIFZfQVNOMV9VTklWRVJTQUwpOworCXJldHVybiAoU1RBQ0tfT0YoWDUwOV9FWFRFTlNJT04pICopCisJCUFTTjFfaXRlbV9kMmkoTlVMTCwgJnAsIGV4dC0+dmFsdWUuc2VxdWVuY2UtPmxlbmd0aCwKKwkJCQlBU04xX0lURU1fcnB0cihYNTA5X0VYVEVOU0lPTlMpKTsKIH0KIAogLyogQWRkIGEgU1RBQ0tfT0YgZXh0ZW5zaW9ucyB0byBhIGNlcnRpZmljYXRlIHJlcXVlc3Q6IGFsbG93IGFsdGVybmF0aXZlIE9JRHMKQEAgLTIxOCw4ICsyMTgsNiBAQAogaW50IFg1MDlfUkVRX2FkZF9leHRlbnNpb25zX25pZChYNTA5X1JFUSAqcmVxLCBTVEFDS19PRihYNTA5X0VYVEVOU0lPTikgKmV4dHMsCiAJCQkJaW50IG5pZCkKIHsKLQl1bnNpZ25lZCBjaGFyICpwID0gTlVMTCwgKnE7Ci0JbG9uZyBsZW47CiAJQVNOMV9UWVBFICphdCA9IE5VTEw7CiAJWDUwOV9BVFRSSUJVVEUgKmF0dHIgPSBOVUxMOwogCWlmKCEoYXQgPSBBU04xX1RZUEVfbmV3KCkpIHx8CkBAIC0yMjcsMTUgKzIyNSwxMCBAQAogCiAJYXQtPnR5cGUgPSBWX0FTTjFfU0VRVUVOQ0U7CiAJLyogR2VuZXJhdGUgZW5jb2Rpbmcgb2YgZXh0ZW5zaW9ucyAqLwotCWxlbiA9IGkyZF9BU04xX1NFVF9PRl9YNTA5X0VYVEVOU0lPTihleHRzLCBOVUxMLCBpMmRfWDUwOV9FWFRFTlNJT04sCi0JCQlWX0FTTjFfU0VRVUVOQ0UsIFZfQVNOMV9VTklWRVJTQUwsIElTX1NFUVVFTkNFKTsKLQlpZighKHAgPSBPUEVOU1NMX21hbGxvYyhsZW4pKSkgZ290byBlcnI7Ci0JcSA9IHA7Ci0JaTJkX0FTTjFfU0VUX09GX1g1MDlfRVhURU5TSU9OKGV4dHMsICZxLCBpMmRfWDUwOV9FWFRFTlNJT04sCi0JCQlWX0FTTjFfU0VRVUVOQ0UsIFZfQVNOMV9VTklWRVJTQUwsIElTX1NFUVVFTkNFKTsKLQlhdC0+dmFsdWUuc2VxdWVuY2UtPmRhdGEgPSBwOwotCXAgPSBOVUxMOwotCWF0LT52YWx1ZS5zZXF1ZW5jZS0+bGVuZ3RoID0gbGVuOworCWF0LT52YWx1ZS5zZXF1ZW5jZS0+bGVuZ3RoID0gCisJCQlBU04xX2l0ZW1faTJkKChBU04xX1ZBTFVFICopZXh0cywKKwkJCQkmYXQtPnZhbHVlLnNlcXVlbmNlLT5kYXRhLAorCQkJCUFTTjFfSVRFTV9ycHRyKFg1MDlfRVhURU5TSU9OUykpOwogCWlmKCEoYXR0ciA9IFg1MDlfQVRUUklCVVRFX25ldygpKSkgZ290byBlcnI7CiAJaWYoIShhdHRyLT52YWx1ZS5zZXQgPSBza19BU04xX1RZUEVfbmV3X251bGwoKSkpIGdvdG8gZXJyOwogCWlmKCFza19BU04xX1RZUEVfcHVzaChhdHRyLT52YWx1ZS5zZXQsIGF0KSkgZ290byBlcnI7CkBAIC0yNTAsNyArMjQzLDYgQEAKIAlpZighc2tfWDUwOV9BVFRSSUJVVEVfcHVzaChyZXEtPnJlcV9pbmZvLT5hdHRyaWJ1dGVzLCBhdHRyKSkgZ290byBlcnI7CiAJcmV0dXJuIDE7CiAJZXJyOgotCWlmKHApIE9QRU5TU0xfZnJlZShwKTsKIAlYNTA5X0FUVFJJQlVURV9mcmVlKGF0dHIpOwogCUFTTjFfVFlQRV9mcmVlKGF0KTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2NyeXB0by94NTA5L3g1MDlfc2V0LmMgYi9jcnlwdG8veDUwOS94NTA5X3NldC5jCmluZGV4IGFhZjYxY2EuLjRiOTRmYzUgMTAwNjQ0Ci0tLSBhL2NyeXB0by94NTA5L3g1MDlfc2V0LmMKKysrIGIvY3J5cHRvL3g1MDkveDUwOV9zZXQuYwpAQCAtMTA0LDcgKzEwNCw3IEBACiAJcmV0dXJuKFg1MDlfTkFNRV9zZXQoJngtPmNlcnRfaW5mby0+c3ViamVjdCxuYW1lKSk7CiAJfQogCi1pbnQgWDUwOV9zZXRfbm90QmVmb3JlKFg1MDkgKngsIEFTTjFfVElNRSAqdG0pCitpbnQgWDUwOV9zZXRfbm90QmVmb3JlKFg1MDkgKngsIGNvbnN0IEFTTjFfVElNRSAqdG0pCiAJewogCUFTTjFfVElNRSAqaW47CiAKQEAgLTEyMiw3ICsxMjIsNyBAQAogCXJldHVybihpbiAhPSBOVUxMKTsKIAl9CiAKLWludCBYNTA5X3NldF9ub3RBZnRlcihYNTA5ICp4LCBBU04xX1RJTUUgKnRtKQoraW50IFg1MDlfc2V0X25vdEFmdGVyKFg1MDkgKngsIGNvbnN0IEFTTjFfVElNRSAqdG0pCiAJewogCUFTTjFfVElNRSAqaW47CiAKZGlmZiAtLWdpdCBhL2NyeXB0by94NTA5L3g1MDlfdHJzLmMgYi9jcnlwdG8veDUwOS94NTA5X3Rycy5jCmluZGV4IGVkMTg3MDAuLmE2Y2I5YzggMTAwNjQ0Ci0tLSBhL2NyeXB0by94NTA5L3g1MDlfdHJzLmMKKysrIGIvY3J5cHRvL3g1MDkveDUwOV90cnMuYwpAQCAtODQsNyArODQsOCBAQAoge1g1MDlfVFJVU1RfRU1BSUwsIDAsIHRydXN0XzFvaWRhbnksICJTL01JTUUgZW1haWwiLCBOSURfZW1haWxfcHJvdGVjdCwgTlVMTH0sCiB7WDUwOV9UUlVTVF9PQkpFQ1RfU0lHTiwgMCwgdHJ1c3RfMW9pZGFueSwgIk9iamVjdCBTaWduZXIiLCBOSURfY29kZV9zaWduLCBOVUxMfSwKIHtYNTA5X1RSVVNUX09DU1BfU0lHTiwgMCwgdHJ1c3RfMW9pZCwgIk9DU1AgcmVzcG9uZGVyIiwgTklEX09DU1Bfc2lnbiwgTlVMTH0sCi17WDUwOV9UUlVTVF9PQ1NQX1JFUVVFU1QsIDAsIHRydXN0XzFvaWQsICJPQ1NQIHJlcXVlc3QiLCBOSURfYWRfT0NTUCwgTlVMTH0KK3tYNTA5X1RSVVNUX09DU1BfUkVRVUVTVCwgMCwgdHJ1c3RfMW9pZCwgIk9DU1AgcmVxdWVzdCIsIE5JRF9hZF9PQ1NQLCBOVUxMfSwKK3tYNTA5X1RSVVNUX1RTQSwgMCwgdHJ1c3RfMW9pZGFueSwgIlRTQSBzZXJ2ZXIiLCBOSURfdGltZV9zdGFtcCwgTlVMTH0KIH07CiAKICNkZWZpbmUgWDUwOV9UUlVTVF9DT1VOVAkoc2l6ZW9mKHRyc3RhbmRhcmQpL3NpemVvZihYNTA5X1RSVVNUKSkKZGlmZiAtLWdpdCBhL2NyeXB0by94NTA5L3g1MDlfdHh0LmMgYi9jcnlwdG8veDUwOS94NTA5X3R4dC5jCmluZGV4IDczYThlYzcuLmM0NGY3NTMgMTAwNjQ0Ci0tLSBhL2NyeXB0by94NTA5L3g1MDlfdHh0LmMKKysrIGIvY3J5cHRvL3g1MDkveDUwOV90eHQuYwpAQCAtMTYyLDggKzE2MiwyOCBAQAogCQlyZXR1cm4oImludmFsaWQgb3IgaW5jb25zaXN0ZW50IGNlcnRpZmljYXRlIHBvbGljeSBleHRlbnNpb24iKTsKIAljYXNlIFg1MDlfVl9FUlJfTk9fRVhQTElDSVRfUE9MSUNZOgogCQlyZXR1cm4oIm5vIGV4cGxpY2l0IHBvbGljeSIpOwotCWNhc2UgWDUwOV9WX0VSUl9VTk5FU1RFRF9SRVNPVVJDRToKLQkJcmV0dXJuKCJSRkMgMzc3OSByZXNvdXJjZSBub3Qgc3Vic2V0IG9mIHBhcmVudCdzIHJlc291cmNlcyIpOworCWNhc2UgWDUwOV9WX0VSUl9ESUZGRVJFTlRfQ1JMX1NDT1BFOgorCXJldHVybigiRGlmZmVyZW50IENSTCBzY29wZSIpOworCWNhc2UgWDUwOV9WX0VSUl9VTlNVUFBPUlRFRF9FWFRFTlNJT05fRkVBVFVSRToKKwlyZXR1cm4oIlVuc3VwcG9ydGVkIGV4dGVuc2lvbiBmZWF0dXJlIik7CisgCWNhc2UgWDUwOV9WX0VSUl9VTk5FU1RFRF9SRVNPVVJDRToKKyAJCXJldHVybigiUkZDIDM3NzkgcmVzb3VyY2Ugbm90IHN1YnNldCBvZiBwYXJlbnQncyByZXNvdXJjZXMiKTsKKworCWNhc2UgWDUwOV9WX0VSUl9QRVJNSVRURURfVklPTEFUSU9OOgorCQlyZXR1cm4oInBlcm1pdHRlZCBzdWJ0cmVlIHZpb2xhdGlvbiIpOworCWNhc2UgWDUwOV9WX0VSUl9FWENMVURFRF9WSU9MQVRJT046CisJCXJldHVybigiZXhjbHVkZWQgc3VidHJlZSB2aW9sYXRpb24iKTsKKwljYXNlIFg1MDlfVl9FUlJfU1VCVFJFRV9NSU5NQVg6CisJCXJldHVybigibmFtZSBjb25zdHJhaW50cyBtaW5pbXVtIGFuZCBtYXhpbXVtIG5vdCBzdXBwb3J0ZWQiKTsKKwljYXNlIFg1MDlfVl9FUlJfVU5TVVBQT1JURURfQ09OU1RSQUlOVF9UWVBFOgorCQlyZXR1cm4oInVuc3VwcG9ydGVkIG5hbWUgY29uc3RyYWludCB0eXBlIik7CisJY2FzZSBYNTA5X1ZfRVJSX1VOU1VQUE9SVEVEX0NPTlNUUkFJTlRfU1lOVEFYOgorCQlyZXR1cm4oInVuc3VwcG9ydGVkIG9yIGludmFsaWQgbmFtZSBjb25zdHJhaW50IHN5bnRheCIpOworCWNhc2UgWDUwOV9WX0VSUl9VTlNVUFBPUlRFRF9OQU1FX1NZTlRBWDoKKwkJcmV0dXJuKCJ1bnN1cHBvcnRlZCBvciBpbnZhbGlkIG5hbWUgc3ludGF4Iik7CisJY2FzZSBYNTA5X1ZfRVJSX0NSTF9QQVRIX1ZBTElEQVRJT05fRVJST1I6CisJCXJldHVybigiQ1JMIHBhdGggdmFsaWRhdGlvbiBlcnJvciIpOworCiAJZGVmYXVsdDoKIAkJQklPX3NucHJpbnRmKGJ1ZixzaXplb2YgYnVmLCJlcnJvciBudW1iZXIgJWxkIixuKTsKIAkJcmV0dXJuKGJ1Zik7CmRpZmYgLS1naXQgYS9jcnlwdG8veDUwOS94NTA5X3ZmeS5jIGIvY3J5cHRvL3g1MDkveDUwOV92ZnkuYwppbmRleCBiODU0NTZlLi44N2ViZjYyIDEwMDY0NAotLS0gYS9jcnlwdG8veDUwOS94NTA5X3ZmeS5jCisrKyBiL2NyeXB0by94NTA5L3g1MDlfdmZ5LmMKQEAgLTcwLDE0ICs3MCw3MCBAQAogI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+CiAKKy8qIENSTCBzY29yZSB2YWx1ZXMgKi8KKworLyogTm8gdW5oYW5kbGVkIGNyaXRpY2FsIGV4dGVuc2lvbnMgKi8KKworI2RlZmluZSBDUkxfU0NPUkVfTk9DUklUSUNBTAkweDEwMAorCisvKiBjZXJ0aWZpY2F0ZSBpcyB3aXRoaW4gQ1JMIHNjb3BlICovCisKKyNkZWZpbmUgQ1JMX1NDT1JFX1NDT1BFCQkweDA4MAorCisvKiBDUkwgdGltZXMgdmFsaWQgKi8KKworI2RlZmluZSBDUkxfU0NPUkVfVElNRQkJMHgwNDAKKworLyogSXNzdWVyIG5hbWUgbWF0Y2hlcyBjZXJ0aWZpY2F0ZSAqLworCisjZGVmaW5lIENSTF9TQ09SRV9JU1NVRVJfTkFNRQkweDAyMAorCisvKiBJZiB0aGlzIHNjb3JlIG9yIGFib3ZlIENSTCBpcyBwcm9iYWJseSB2YWxpZCAqLworCisjZGVmaW5lIENSTF9TQ09SRV9WQUxJRCAoQ1JMX1NDT1JFX05PQ1JJVElDQUx8Q1JMX1NDT1JFX1RJTUV8Q1JMX1NDT1JFX1NDT1BFKQorCisvKiBDUkwgaXNzdWVyIGlzIGNlcnRpZmljYXRlIGlzc3VlciAqLworCisjZGVmaW5lIENSTF9TQ09SRV9JU1NVRVJfQ0VSVAkweDAxOAorCisvKiBDUkwgaXNzdWVyIGlzIG9uIGNlcnRpZmljYXRlIHBhdGggKi8KKworI2RlZmluZSBDUkxfU0NPUkVfU0FNRV9QQVRICTB4MDA4CisKKy8qIENSTCBpc3N1ZXIgbWF0Y2hlcyBDUkwgQUtJRCAqLworCisjZGVmaW5lIENSTF9TQ09SRV9BS0lECQkweDAwNAorCisvKiBIYXZlIGEgZGVsdGEgQ1JMIHdpdGggdmFsaWQgdGltZXMgKi8KKworI2RlZmluZSBDUkxfU0NPUkVfVElNRV9ERUxUQQkweDAwMgorCiBzdGF0aWMgaW50IG51bGxfY2FsbGJhY2soaW50IG9rLFg1MDlfU1RPUkVfQ1RYICplKTsKIHN0YXRpYyBpbnQgY2hlY2tfaXNzdWVkKFg1MDlfU1RPUkVfQ1RYICpjdHgsIFg1MDkgKngsIFg1MDkgKmlzc3Vlcik7CiBzdGF0aWMgWDUwOSAqZmluZF9pc3N1ZXIoWDUwOV9TVE9SRV9DVFggKmN0eCwgU1RBQ0tfT0YoWDUwOSkgKnNrLCBYNTA5ICp4KTsKIHN0YXRpYyBpbnQgY2hlY2tfY2hhaW5fZXh0ZW5zaW9ucyhYNTA5X1NUT1JFX0NUWCAqY3R4KTsKK3N0YXRpYyBpbnQgY2hlY2tfbmFtZV9jb25zdHJhaW50cyhYNTA5X1NUT1JFX0NUWCAqY3R4KTsKIHN0YXRpYyBpbnQgY2hlY2tfdHJ1c3QoWDUwOV9TVE9SRV9DVFggKmN0eCk7CiBzdGF0aWMgaW50IGNoZWNrX3Jldm9jYXRpb24oWDUwOV9TVE9SRV9DVFggKmN0eCk7CiBzdGF0aWMgaW50IGNoZWNrX2NlcnQoWDUwOV9TVE9SRV9DVFggKmN0eCk7CiBzdGF0aWMgaW50IGNoZWNrX3BvbGljeShYNTA5X1NUT1JFX0NUWCAqY3R4KTsKKworc3RhdGljIGludCBnZXRfY3JsX3Njb3JlKFg1MDlfU1RPUkVfQ1RYICpjdHgsIFg1MDkgKipwaXNzdWVyLAorCQkJdW5zaWduZWQgaW50ICpwcmVhc29ucywKKwkJCVg1MDlfQ1JMICpjcmwsIFg1MDkgKngpOworc3RhdGljIGludCBnZXRfY3JsX2RlbHRhKFg1MDlfU1RPUkVfQ1RYICpjdHgsCisJCQkJWDUwOV9DUkwgKipwY3JsLCBYNTA5X0NSTCAqKnBkY3JsLCBYNTA5ICp4KTsKK3N0YXRpYyB2b2lkIGdldF9kZWx0YV9zayhYNTA5X1NUT1JFX0NUWCAqY3R4LCBYNTA5X0NSTCAqKmRjcmwsIGludCAqcGNybF9zY29yZSwKKwkJCVg1MDlfQ1JMICpiYXNlLCBTVEFDS19PRihYNTA5X0NSTCkgKmNybHMpOworc3RhdGljIHZvaWQgY3JsX2FraWRfY2hlY2soWDUwOV9TVE9SRV9DVFggKmN0eCwgWDUwOV9DUkwgKmNybCwKKwkJCQlYNTA5ICoqcGlzc3VlciwgaW50ICpwY3JsX3Njb3JlKTsKK3N0YXRpYyBpbnQgY3JsX2NybGRwX2NoZWNrKFg1MDkgKngsIFg1MDlfQ1JMICpjcmwsIGludCBjcmxfc2NvcmUsCisJCQkJdW5zaWduZWQgaW50ICpwcmVhc29ucyk7CitzdGF0aWMgaW50IGNoZWNrX2NybF9wYXRoKFg1MDlfU1RPUkVfQ1RYICpjdHgsIFg1MDkgKngpOworc3RhdGljIGludCBjaGVja19jcmxfY2hhaW4oWDUwOV9TVE9SRV9DVFggKmN0eCwKKwkJCVNUQUNLX09GKFg1MDkpICpjZXJ0X3BhdGgsCisJCQlTVEFDS19PRihYNTA5KSAqY3JsX3BhdGgpOworCiBzdGF0aWMgaW50IGludGVybmFsX3ZlcmlmeShYNTA5X1NUT1JFX0NUWCAqY3R4KTsKIGNvbnN0IGNoYXIgWDUwOV92ZXJzaW9uW109IlguNTA5IiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7CiAKQEAgLTI4OSw2ICszNDUsMTIgQEAKIAogCWlmICghb2spIGdvdG8gZW5kOwogCisJLyogQ2hlY2sgbmFtZSBjb25zdHJhaW50cyAqLworCisJb2sgPSBjaGVja19uYW1lX2NvbnN0cmFpbnRzKGN0eCk7CisJCisJaWYgKCFvaykgZ290byBlbmQ7CisKIAkvKiBUaGUgY2hhaW4gZXh0ZW5zaW9ucyBhcmUgT0s6IGNoZWNrIHRydXN0ICovCiAKIAlpZiAocGFyYW0tPnRydXN0ID4gMCkgb2sgPSBjaGVja190cnVzdChjdHgpOwpAQCAtMzk4LDggKzQ2MCw4IEBACiAJWDUwOSAqeDsKIAlpbnQgKCpjYikoaW50IHhvayxYNTA5X1NUT1JFX0NUWCAqeGN0eCk7CiAJaW50IHByb3h5X3BhdGhfbGVuZ3RoID0gMDsKLQlpbnQgYWxsb3dfcHJveHlfY2VydHMgPQotCQkhIShjdHgtPnBhcmFtLT5mbGFncyAmIFg1MDlfVl9GTEFHX0FMTE9XX1BST1hZX0NFUlRTKTsKKwlpbnQgcHVycG9zZTsKKwlpbnQgYWxsb3dfcHJveHlfY2VydHM7CiAJY2I9Y3R4LT52ZXJpZnlfY2I7CiAKIAkvKiBtdXN0X2JlX2NhIGNhbiBoYXZlIDEgb2YgMyB2YWx1ZXM6CkBAIC00MTIsMTAgKzQ3NCwyMiBAQAogCSovCiAJbXVzdF9iZV9jYSA9IC0xOwogCi0JLyogQSBoYWNrIHRvIGtlZXAgcGVvcGxlIHdobyBkb24ndCB3YW50IHRvIG1vZGlmeSB0aGVpciBzb2Z0d2FyZQotCSAgIGhhcHB5ICovCi0JaWYgKGdldGVudigiT1BFTlNTTF9BTExPV19QUk9YWV9DRVJUUyIpKQotCQlhbGxvd19wcm94eV9jZXJ0cyA9IDE7CisJLyogQ1JMIHBhdGggdmFsaWRhdGlvbiAqLworCWlmIChjdHgtPnBhcmVudCkKKwkJeworCQlhbGxvd19wcm94eV9jZXJ0cyA9IDA7CisJCXB1cnBvc2UgPSBYNTA5X1BVUlBPU0VfQ1JMX1NJR047CisJCX0KKwllbHNlCisJCXsKKwkJYWxsb3dfcHJveHlfY2VydHMgPQorCQkJISEoY3R4LT5wYXJhbS0+ZmxhZ3MgJiBYNTA5X1ZfRkxBR19BTExPV19QUk9YWV9DRVJUUyk7CisJCS8qIEEgaGFjayB0byBrZWVwIHBlb3BsZSB3aG8gZG9uJ3Qgd2FudCB0byBtb2RpZnkgdGhlaXIKKwkJICAgc29mdHdhcmUgaGFwcHkgKi8KKwkJaWYgKGdldGVudigiT1BFTlNTTF9BTExPV19QUk9YWV9DRVJUUyIpKQorCQkJYWxsb3dfcHJveHlfY2VydHMgPSAxOworCQlwdXJwb3NlID0gY3R4LT5wYXJhbS0+cHVycG9zZTsKKwkJfQogCiAJLyogQ2hlY2sgYWxsIHVudHJ1c3RlZCBjZXJ0aWZpY2F0ZXMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgY3R4LT5sYXN0X3VudHJ1c3RlZDsgaSsrKQpAQCAtNDgyLDggKzU1Niw3IEBACiAJCQl9CiAJCWlmIChjdHgtPnBhcmFtLT5wdXJwb3NlID4gMCkKIAkJCXsKLQkJCXJldCA9IFg1MDlfY2hlY2tfcHVycG9zZSh4LCBjdHgtPnBhcmFtLT5wdXJwb3NlLAotCQkJCW11c3RfYmVfY2EgPiAwKTsKKwkJCXJldCA9IFg1MDlfY2hlY2tfcHVycG9zZSh4LCBwdXJwb3NlLCBtdXN0X2JlX2NhID4gMCk7CiAJCQlpZiAoKHJldCA9PSAwKQogCQkJCXx8ICgoY3R4LT5wYXJhbS0+ZmxhZ3MgJiBYNTA5X1ZfRkxBR19YNTA5X1NUUklDVCkKIAkJCQkJJiYgKHJldCAhPSAxKSkpCkBAIC01MzYsNiArNjA5LDQyIEBACiAjZW5kaWYKIH0KIAorc3RhdGljIGludCBjaGVja19uYW1lX2NvbnN0cmFpbnRzKFg1MDlfU1RPUkVfQ1RYICpjdHgpCisJeworCVg1MDkgKng7CisJaW50IGksIGosIHJ2OworCS8qIENoZWNrIG5hbWUgY29uc3RyYWludHMgZm9yIGFsbCBjZXJ0aWZpY2F0ZXMgKi8KKwlmb3IgKGkgPSBza19YNTA5X251bShjdHgtPmNoYWluKSAtIDE7IGkgPj0gMDsgaS0tKQorCQl7CisJCXggPSBza19YNTA5X3ZhbHVlKGN0eC0+Y2hhaW4sIGkpOworCQkvKiBJZ25vcmUgc2VsZiBpc3N1ZWQgY2VydHMgdW5sZXNzIGxhc3QgaW4gY2hhaW4gKi8KKwkJaWYgKGkgJiYgKHgtPmV4X2ZsYWdzICYgRVhGTEFHX1NJKSkKKwkJCWNvbnRpbnVlOworCQkvKiBDaGVjayBhZ2FpbnN0IGNvbnN0cmFpbnRzIGZvciBhbGwgY2VydGlmaWNhdGVzIGhpZ2hlciBpbgorCQkgKiBjaGFpbiBpbmNsdWRpbmcgdHJ1c3QgYW5jaG9yLiBUcnVzdCBhbmNob3Igbm90IHN0cmljdGx5CisJCSAqIHNwZWFraW5nIG5lZWRlZCBidXQgaWYgaXQgaW5jbHVkZXMgY29uc3RyYWludHMgaXQgaXMgdG8gYmUKKwkJICogYXNzdW1lZCBpdCBleHBlY3RzIHRoZW0gdG8gYmUgb2JleWVkLgorCQkgKi8KKwkJZm9yIChqID0gc2tfWDUwOV9udW0oY3R4LT5jaGFpbikgLSAxOyBqID4gaTsgai0tKQorCQkJeworCQkJTkFNRV9DT05TVFJBSU5UUyAqbmMgPSBza19YNTA5X3ZhbHVlKGN0eC0+Y2hhaW4sIGopLT5uYzsKKwkJCWlmIChuYykKKwkJCQl7CisJCQkJcnYgPSBOQU1FX0NPTlNUUkFJTlRTX2NoZWNrKHgsIG5jKTsKKwkJCQlpZiAocnYgIT0gWDUwOV9WX09LKQorCQkJCQl7CisJCQkJCWN0eC0+ZXJyb3IgPSBydjsKKwkJCQkJY3R4LT5lcnJvcl9kZXB0aCA9IGk7CisJCQkJCWN0eC0+Y3VycmVudF9jZXJ0ID0geDsKKwkJCQkJaWYgKCFjdHgtPnZlcmlmeV9jYigwLGN0eCkpCisJCQkJCQlyZXR1cm4gMDsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCXJldHVybiAxOworCX0KKwogc3RhdGljIGludCBjaGVja190cnVzdChYNTA5X1NUT1JFX0NUWCAqY3R4KQogewogI2lmZGVmIE9QRU5TU0xfTk9fQ0hBSU5fVkVSSUZZCkBAIC01NzAsNyArNjc5LDEyIEBACiAJaWYgKGN0eC0+cGFyYW0tPmZsYWdzICYgWDUwOV9WX0ZMQUdfQ1JMX0NIRUNLX0FMTCkKIAkJbGFzdCA9IHNrX1g1MDlfbnVtKGN0eC0+Y2hhaW4pIC0gMTsKIAllbHNlCisJCXsKKwkJLyogSWYgY2hlY2tpbmcgQ1JMIHBhdGhzIHRoaXMgaXNuJ3QgdGhlIEVFIGNlcnRpZmljYXRlICovCisJCWlmIChjdHgtPnBhcmVudCkKKwkJCXJldHVybiAxOwogCQlsYXN0ID0gMDsKKwkJfQogCWZvcihpID0gMDsgaSA8PSBsYXN0OyBpKyspCiAJCXsKIAkJY3R4LT5lcnJvcl9kZXB0aCA9IGk7CkBAIC01ODIsMzAgKzY5Niw2NSBAQAogCiBzdGF0aWMgaW50IGNoZWNrX2NlcnQoWDUwOV9TVE9SRV9DVFggKmN0eCkKIAl7Ci0JWDUwOV9DUkwgKmNybCA9IE5VTEw7CisJWDUwOV9DUkwgKmNybCA9IE5VTEwsICpkY3JsID0gTlVMTDsKIAlYNTA5ICp4OwogCWludCBvaywgY251bTsKIAljbnVtID0gY3R4LT5lcnJvcl9kZXB0aDsKIAl4ID0gc2tfWDUwOV92YWx1ZShjdHgtPmNoYWluLCBjbnVtKTsKIAljdHgtPmN1cnJlbnRfY2VydCA9IHg7Ci0JLyogVHJ5IHRvIHJldHJpZXZlIHJlbGV2YW50IENSTCAqLwotCW9rID0gY3R4LT5nZXRfY3JsKGN0eCwgJmNybCwgeCk7Ci0JLyogSWYgZXJyb3IgbG9va2luZyB1cCBDUkwsIG5vdGhpbmcgd2UgY2FuIGRvIGV4Y2VwdAotCSAqIG5vdGlmeSBjYWxsYmFjawotCSAqLwotCWlmKCFvaykKKwljdHgtPmN1cnJlbnRfaXNzdWVyID0gTlVMTDsKKwljdHgtPmN1cnJlbnRfcmVhc29ucyA9IDA7CisJd2hpbGUgKGN0eC0+Y3VycmVudF9yZWFzb25zICE9IENSTERQX0FMTF9SRUFTT05TKQogCQl7Ci0JCWN0eC0+ZXJyb3IgPSBYNTA5X1ZfRVJSX1VOQUJMRV9UT19HRVRfQ1JMOwotCQlvayA9IGN0eC0+dmVyaWZ5X2NiKDAsIGN0eCk7Ci0JCWdvdG8gZXJyOworCQkvKiBUcnkgdG8gcmV0cmlldmUgcmVsZXZhbnQgQ1JMICovCisJCWlmIChjdHgtPmdldF9jcmwpCisJCQlvayA9IGN0eC0+Z2V0X2NybChjdHgsICZjcmwsIHgpOworCQllbHNlCisJCQlvayA9IGdldF9jcmxfZGVsdGEoY3R4LCAmY3JsLCAmZGNybCwgeCk7CisJCS8qIElmIGVycm9yIGxvb2tpbmcgdXAgQ1JMLCBub3RoaW5nIHdlIGNhbiBkbyBleGNlcHQKKwkJICogbm90aWZ5IGNhbGxiYWNrCisJCSAqLworCQlpZighb2spCisJCQl7CisJCQljdHgtPmVycm9yID0gWDUwOV9WX0VSUl9VTkFCTEVfVE9fR0VUX0NSTDsKKwkJCW9rID0gY3R4LT52ZXJpZnlfY2IoMCwgY3R4KTsKKwkJCWdvdG8gZXJyOworCQkJfQorCQljdHgtPmN1cnJlbnRfY3JsID0gY3JsOworCQlvayA9IGN0eC0+Y2hlY2tfY3JsKGN0eCwgY3JsKTsKKwkJaWYgKCFvaykKKwkJCWdvdG8gZXJyOworCisJCWlmIChkY3JsKQorCQkJeworCQkJb2sgPSBjdHgtPmNoZWNrX2NybChjdHgsIGRjcmwpOworCQkJaWYgKCFvaykKKwkJCQlnb3RvIGVycjsKKwkJCW9rID0gY3R4LT5jZXJ0X2NybChjdHgsIGRjcmwsIHgpOworCQkJaWYgKCFvaykKKwkJCQlnb3RvIGVycjsKKwkJCX0KKwkJZWxzZQorCQkJb2sgPSAxOworCisJCS8qIERvbid0IGxvb2sgaW4gZnVsbCBDUkwgaWYgZGVsdGEgcmVhc29uIGlzIHJlbW92ZWZyb21DUkwgKi8KKwkJaWYgKG9rICE9IDIpCisJCQl7CisJCQlvayA9IGN0eC0+Y2VydF9jcmwoY3R4LCBjcmwsIHgpOworCQkJaWYgKCFvaykKKwkJCQlnb3RvIGVycjsKKwkJCX0KKworCQlYNTA5X0NSTF9mcmVlKGNybCk7CisJCVg1MDlfQ1JMX2ZyZWUoZGNybCk7CisJCWNybCA9IE5VTEw7CisJCWRjcmwgPSBOVUxMOwogCQl9Ci0JY3R4LT5jdXJyZW50X2NybCA9IGNybDsKLQlvayA9IGN0eC0+Y2hlY2tfY3JsKGN0eCwgY3JsKTsKLQlpZiAoIW9rKSBnb3RvIGVycjsKLQlvayA9IGN0eC0+Y2VydF9jcmwoY3R4LCBjcmwsIHgpOwogCWVycjoKLQljdHgtPmN1cnJlbnRfY3JsID0gTlVMTDsKIAlYNTA5X0NSTF9mcmVlKGNybCk7CisJWDUwOV9DUkxfZnJlZShkY3JsKTsKKworCWN0eC0+Y3VycmVudF9jcmwgPSBOVUxMOwogCXJldHVybiBvazsKIAogCX0KQEAgLTYxNiw3ICs3NjUsOCBAQAogCXsKIAl0aW1lX3QgKnB0aW1lOwogCWludCBpOwotCWN0eC0+Y3VycmVudF9jcmwgPSBjcmw7CisJaWYgKG5vdGlmeSkKKwkJY3R4LT5jdXJyZW50X2NybCA9IGNybDsKIAlpZiAoY3R4LT5wYXJhbS0+ZmxhZ3MgJiBYNTA5X1ZfRkxBR19VU0VfQ0hFQ0tfVElNRSkKIAkJcHRpbWUgPSAmY3R4LT5wYXJhbS0+Y2hlY2tfdGltZTsKIAllbHNlCkBAIC02MjUsMTUgKzc3NSwxOSBAQAogCWk9WDUwOV9jbXBfdGltZShYNTA5X0NSTF9nZXRfbGFzdFVwZGF0ZShjcmwpLCBwdGltZSk7CiAJaWYgKGkgPT0gMCkKIAkJeworCQlpZiAoIW5vdGlmeSkKKwkJCXJldHVybiAwOwogCQljdHgtPmVycm9yPVg1MDlfVl9FUlJfRVJST1JfSU5fQ1JMX0xBU1RfVVBEQVRFX0ZJRUxEOwotCQlpZiAoIW5vdGlmeSB8fCAhY3R4LT52ZXJpZnlfY2IoMCwgY3R4KSkKKwkJaWYgKCFjdHgtPnZlcmlmeV9jYigwLCBjdHgpKQogCQkJcmV0dXJuIDA7CiAJCX0KIAogCWlmIChpID4gMCkKIAkJeworCQlpZiAoIW5vdGlmeSkKKwkJCXJldHVybiAwOwogCQljdHgtPmVycm9yPVg1MDlfVl9FUlJfQ1JMX05PVF9ZRVRfVkFMSUQ7Ci0JCWlmICghbm90aWZ5IHx8ICFjdHgtPnZlcmlmeV9jYigwLCBjdHgpKQorCQlpZiAoIWN0eC0+dmVyaWZ5X2NiKDAsIGN0eCkpCiAJCQlyZXR1cm4gMDsKIAkJfQogCkBAIC02NDMsOTIgKzc5Nyw1NDUgQEAKIAogCQlpZiAoaSA9PSAwKQogCQkJeworCQkJaWYgKCFub3RpZnkpCisJCQkJcmV0dXJuIDA7CiAJCQljdHgtPmVycm9yPVg1MDlfVl9FUlJfRVJST1JfSU5fQ1JMX05FWFRfVVBEQVRFX0ZJRUxEOwotCQkJaWYgKCFub3RpZnkgfHwgIWN0eC0+dmVyaWZ5X2NiKDAsIGN0eCkpCisJCQlpZiAoIWN0eC0+dmVyaWZ5X2NiKDAsIGN0eCkpCiAJCQkJcmV0dXJuIDA7CiAJCQl9Ci0KLQkJaWYgKGkgPCAwKQorCQkvKiBJZ25vcmUgZXhwaXJ5IG9mIGJhc2UgQ1JMIGlzIGRlbHRhIGlzIHZhbGlkICovCisJCWlmICgoaSA8IDApICYmICEoY3R4LT5jdXJyZW50X2NybF9zY29yZSAmIENSTF9TQ09SRV9USU1FX0RFTFRBKSkKIAkJCXsKKwkJCWlmICghbm90aWZ5KQorCQkJCXJldHVybiAwOwogCQkJY3R4LT5lcnJvcj1YNTA5X1ZfRVJSX0NSTF9IQVNfRVhQSVJFRDsKLQkJCWlmICghbm90aWZ5IHx8ICFjdHgtPnZlcmlmeV9jYigwLCBjdHgpKQorCQkJaWYgKCFjdHgtPnZlcmlmeV9jYigwLCBjdHgpKQogCQkJCXJldHVybiAwOwogCQkJfQogCQl9CiAKLQljdHgtPmN1cnJlbnRfY3JsID0gTlVMTDsKKwlpZiAobm90aWZ5KQorCQljdHgtPmN1cnJlbnRfY3JsID0gTlVMTDsKIAogCXJldHVybiAxOwogCX0KIAotLyogTG9va3VwIENSTHMgZnJvbSB0aGUgc3VwcGxpZWQgbGlzdC4gTG9vayBmb3IgbWF0Y2hpbmcgaXNzZXIgbmFtZQotICogYW5kIHZhbGlkaXR5LiBJZiB3ZSBjYW4ndCBmaW5kIGEgdmFsaWQgQ1JMIHJldHVybiB0aGUgbGFzdCBvbmUKLSAqIHdpdGggbWF0Y2hpbmcgbmFtZS4gVGhpcyBnaXZlcyBtb3JlIG1lYW5pbmdmdWwgZXJyb3IgY29kZXMuIE90aGVyd2lzZQotICogd2UnZCBnZXQgYSBDUkwgbm90IGZvdW5kIGVycm9yIGlmIGEgQ1JMIGV4aXN0ZWQgd2l0aCBtYXRjaGluZyBuYW1lIGJ1dAotICogd2FzIGludmFsaWQuCi0gKi8KLQotc3RhdGljIGludCBnZXRfY3JsX3NrKFg1MDlfU1RPUkVfQ1RYICpjdHgsIFg1MDlfQ1JMICoqcGNybCwKLQkJCVg1MDlfTkFNRSAqbm0sIFNUQUNLX09GKFg1MDlfQ1JMKSAqY3JscykKK3N0YXRpYyBpbnQgZ2V0X2NybF9zayhYNTA5X1NUT1JFX0NUWCAqY3R4LCBYNTA5X0NSTCAqKnBjcmwsIFg1MDlfQ1JMICoqcGRjcmwsCisJCQlYNTA5ICoqcGlzc3VlciwgaW50ICpwc2NvcmUsIHVuc2lnbmVkIGludCAqcHJlYXNvbnMsCisJCQlTVEFDS19PRihYNTA5X0NSTCkgKmNybHMpCiAJewotCWludCBpOworCWludCBpLCBjcmxfc2NvcmUsIGJlc3Rfc2NvcmUgPSAqcHNjb3JlOworCXVuc2lnbmVkIGludCByZWFzb25zLCBiZXN0X3JlYXNvbnMgPSAwOworCVg1MDkgKnggPSBjdHgtPmN1cnJlbnRfY2VydDsKIAlYNTA5X0NSTCAqY3JsLCAqYmVzdF9jcmwgPSBOVUxMOworCVg1MDkgKmNybF9pc3N1ZXIgPSBOVUxMLCAqYmVzdF9jcmxfaXNzdWVyID0gTlVMTDsKKwogCWZvciAoaSA9IDA7IGkgPCBza19YNTA5X0NSTF9udW0oY3Jscyk7IGkrKykKIAkJewogCQljcmwgPSBza19YNTA5X0NSTF92YWx1ZShjcmxzLCBpKTsKLQkJaWYgKFg1MDlfTkFNRV9jbXAobm0sIFg1MDlfQ1JMX2dldF9pc3N1ZXIoY3JsKSkpCi0JCQljb250aW51ZTsKLQkJaWYgKGNoZWNrX2NybF90aW1lKGN0eCwgY3JsLCAwKSkKKwkJcmVhc29ucyA9ICpwcmVhc29uczsKKwkJY3JsX3Njb3JlID0gZ2V0X2NybF9zY29yZShjdHgsICZjcmxfaXNzdWVyLCAmcmVhc29ucywgY3JsLCB4KTsKKworCQlpZiAoY3JsX3Njb3JlID4gYmVzdF9zY29yZSkKIAkJCXsKLQkJCSpwY3JsID0gY3JsOwotCQkJQ1JZUFRPX2FkZCgmY3JsLT5yZWZlcmVuY2VzLCAxLCBDUllQVE9fTE9DS19YNTA5KTsKLQkJCXJldHVybiAxOworCQkJYmVzdF9jcmwgPSBjcmw7CisJCQliZXN0X2NybF9pc3N1ZXIgPSBjcmxfaXNzdWVyOworCQkJYmVzdF9zY29yZSA9IGNybF9zY29yZTsKKwkJCWJlc3RfcmVhc29ucyA9IHJlYXNvbnM7CiAJCQl9Ci0JCWJlc3RfY3JsID0gY3JsOwogCQl9CisKIAlpZiAoYmVzdF9jcmwpCiAJCXsKKwkJaWYgKCpwY3JsKQorCQkJWDUwOV9DUkxfZnJlZSgqcGNybCk7CiAJCSpwY3JsID0gYmVzdF9jcmw7Ci0JCUNSWVBUT19hZGQoJmJlc3RfY3JsLT5yZWZlcmVuY2VzLCAxLCBDUllQVE9fTE9DS19YNTA5KTsKKwkJKnBpc3N1ZXIgPSBiZXN0X2NybF9pc3N1ZXI7CisJCSpwc2NvcmUgPSBiZXN0X3Njb3JlOworCQkqcHJlYXNvbnMgPSBiZXN0X3JlYXNvbnM7CisJCUNSWVBUT19hZGQoJmJlc3RfY3JsLT5yZWZlcmVuY2VzLCAxLCBDUllQVE9fTE9DS19YNTA5X0NSTCk7CisJCWlmICgqcGRjcmwpCisJCQl7CisJCQlYNTA5X0NSTF9mcmVlKCpwZGNybCk7CisJCQkqcGRjcmwgPSBOVUxMOworCQkJfQorCQlnZXRfZGVsdGFfc2soY3R4LCBwZGNybCwgcHNjb3JlLCBiZXN0X2NybCwgY3Jscyk7CiAJCX0KLQkJCisKKwlpZiAoYmVzdF9zY29yZSA+PSBDUkxfU0NPUkVfVkFMSUQpCisJCXJldHVybiAxOworCiAJcmV0dXJuIDA7CiAJfQogCi0vKiBSZXRyaWV2ZSBDUkwgY29ycmVzcG9uZGluZyB0byBjZXJ0aWZpY2F0ZTogY3VycmVudGx5IGp1c3QgYQotICogc3ViamVjdCBsb29rdXA6IG1heWJlIHVzZSBBS0lEIGxhdGVyLi4uCisvKiBDb21wYXJlIHR3byBDUkwgZXh0ZW5zaW9ucyBmb3IgZGVsdGEgY2hlY2tpbmcgcHVycG9zZXMuIFRoZXkgc2hvdWxkIGJlCisgKiBib3RoIHByZXNlbnQgb3IgYm90aCBhYnNlbnQuIElmIGJvdGggcHJlc2VudCBhbGwgZmllbGRzIG11c3QgYmUgaWRlbnRpY2FsLgogICovCi1zdGF0aWMgaW50IGdldF9jcmwoWDUwOV9TVE9SRV9DVFggKmN0eCwgWDUwOV9DUkwgKipwY3JsLCBYNTA5ICp4KQorCitzdGF0aWMgaW50IGNybF9leHRlbnNpb25fbWF0Y2goWDUwOV9DUkwgKmEsIFg1MDlfQ1JMICpiLCBpbnQgbmlkKQogCXsKLQlpbnQgb2s7Ci0JWDUwOV9DUkwgKmNybCA9IE5VTEw7Ci0JWDUwOV9PQkpFQ1QgeG9iajsKLQlYNTA5X05BTUUgKm5tOwotCW5tID0gWDUwOV9nZXRfaXNzdWVyX25hbWUoeCk7Ci0Jb2sgPSBnZXRfY3JsX3NrKGN0eCwgJmNybCwgbm0sIGN0eC0+Y3Jscyk7Ci0JaWYgKG9rKQorCUFTTjFfT0NURVRfU1RSSU5HICpleHRhLCAqZXh0YjsKKwlpbnQgaTsKKwlpID0gWDUwOV9DUkxfZ2V0X2V4dF9ieV9OSUQoYSwgbmlkLCAwKTsKKwlpZiAoaSA+PSAwKQogCQl7Ci0JCSpwY3JsID0gY3JsOworCQkvKiBDYW4ndCBoYXZlIG11bHRpcGxlIG9jY3VycmVuY2VzICovCisJCWlmIChYNTA5X0NSTF9nZXRfZXh0X2J5X05JRChhLCBuaWQsIGkpICE9IC0xKQorCQkJcmV0dXJuIDA7CisJCWV4dGEgPSBYNTA5X0VYVEVOU0lPTl9nZXRfZGF0YShYNTA5X0NSTF9nZXRfZXh0KGEsIGkpKTsKKwkJfQorCWVsc2UKKwkJZXh0YSA9IE5VTEw7CisKKwlpID0gWDUwOV9DUkxfZ2V0X2V4dF9ieV9OSUQoYiwgbmlkLCAwKTsKKworCWlmIChpID49IDApCisJCXsKKworCQlpZiAoWDUwOV9DUkxfZ2V0X2V4dF9ieV9OSUQoYiwgbmlkLCBpKSAhPSAtMSkKKwkJCXJldHVybiAwOworCQlleHRiID0gWDUwOV9FWFRFTlNJT05fZ2V0X2RhdGEoWDUwOV9DUkxfZ2V0X2V4dChiLCBpKSk7CisJCX0KKwllbHNlCisJCWV4dGIgPSBOVUxMOworCisJaWYgKCFleHRhICYmICFleHRiKQogCQlyZXR1cm4gMTsKKworCWlmICghZXh0YSB8fCAhZXh0YikKKwkJcmV0dXJuIDA7CisKKworCWlmIChBU04xX09DVEVUX1NUUklOR19jbXAoZXh0YSwgZXh0YikpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7CisJfQorCisvKiBTZWUgaWYgYSBiYXNlIGFuZCBkZWx0YSBhcmUgY29tcGF0aWJsZSAqLworCitzdGF0aWMgaW50IGNoZWNrX2RlbHRhX2Jhc2UoWDUwOV9DUkwgKmRlbHRhLCBYNTA5X0NSTCAqYmFzZSkKKwl7CisJLyogRGVsdGEgQ1JMIG11c3QgYmUgYSBkZWx0YSAqLworCWlmICghZGVsdGEtPmJhc2VfY3JsX251bWJlcikKKwkJCXJldHVybiAwOworCS8qIEJhc2UgbXVzdCBoYXZlIGEgQ1JMIG51bWJlciAqLworCWlmICghYmFzZS0+Y3JsX251bWJlcikKKwkJCXJldHVybiAwOworCS8qIElzc3VlciBuYW1lcyBtdXN0IG1hdGNoICovCisJaWYgKFg1MDlfTkFNRV9jbXAoWDUwOV9DUkxfZ2V0X2lzc3VlcihiYXNlKSwKKwkJCQlYNTA5X0NSTF9nZXRfaXNzdWVyKGRlbHRhKSkpCisJCXJldHVybiAwOworCS8qIEFLSUQgYW5kIElEUCBtdXN0IG1hdGNoICovCisJaWYgKCFjcmxfZXh0ZW5zaW9uX21hdGNoKGRlbHRhLCBiYXNlLCBOSURfYXV0aG9yaXR5X2tleV9pZGVudGlmaWVyKSkKKwkJCXJldHVybiAwOworCWlmICghY3JsX2V4dGVuc2lvbl9tYXRjaChkZWx0YSwgYmFzZSwgTklEX2lzc3VpbmdfZGlzdHJpYnV0aW9uX3BvaW50KSkKKwkJCXJldHVybiAwOworCS8qIERlbHRhIENSTCBiYXNlIG51bWJlciBtdXN0IG5vdCBleGNlZWQgRnVsbCBDUkwgbnVtYmVyLiAqLworCWlmIChBU04xX0lOVEVHRVJfY21wKGRlbHRhLT5iYXNlX2NybF9udW1iZXIsIGJhc2UtPmNybF9udW1iZXIpID4gMCkKKwkJCXJldHVybiAwOworCS8qIERlbHRhIENSTCBudW1iZXIgbXVzdCBleGNlZWQgZnVsbCBDUkwgbnVtYmVyICovCisJaWYgKEFTTjFfSU5URUdFUl9jbXAoZGVsdGEtPmNybF9udW1iZXIsIGJhc2UtPmNybF9udW1iZXIpID4gMCkKKwkJCXJldHVybiAxOworCXJldHVybiAwOworCX0KKworLyogRm9yIGEgZ2l2ZW4gYmFzZSBDUkwgZmluZCBhIGRlbHRhLi4uIG1heWJlIGV4dGVuZCB0byBkZWx0YSBzY29yaW5nCisgKiBvciByZXRyaWV2ZSBhIGNoYWluIG9mIGRlbHRhcy4uLgorICovCisKK3N0YXRpYyB2b2lkIGdldF9kZWx0YV9zayhYNTA5X1NUT1JFX0NUWCAqY3R4LCBYNTA5X0NSTCAqKmRjcmwsIGludCAqcHNjb3JlLAorCQkJWDUwOV9DUkwgKmJhc2UsIFNUQUNLX09GKFg1MDlfQ1JMKSAqY3JscykKKwl7CisJWDUwOV9DUkwgKmRlbHRhOworCWludCBpOworCWlmICghKGN0eC0+cGFyYW0tPmZsYWdzICYgWDUwOV9WX0ZMQUdfVVNFX0RFTFRBUykpCisJCXJldHVybjsKKwlpZiAoISgoY3R4LT5jdXJyZW50X2NlcnQtPmV4X2ZsYWdzIHwgYmFzZS0+ZmxhZ3MpICYgRVhGTEFHX0ZSRVNIRVNUKSkKKwkJcmV0dXJuOworCWZvciAoaSA9IDA7IGkgPCBza19YNTA5X0NSTF9udW0oY3Jscyk7IGkrKykKKwkJeworCQlkZWx0YSA9IHNrX1g1MDlfQ1JMX3ZhbHVlKGNybHMsIGkpOworCQlpZiAoY2hlY2tfZGVsdGFfYmFzZShkZWx0YSwgYmFzZSkpCisJCQl7CisJCQlpZiAoY2hlY2tfY3JsX3RpbWUoY3R4LCBkZWx0YSwgMCkpCisJCQkJKnBzY29yZSB8PSBDUkxfU0NPUkVfVElNRV9ERUxUQTsKKwkJCUNSWVBUT19hZGQoJmRlbHRhLT5yZWZlcmVuY2VzLCAxLCBDUllQVE9fTE9DS19YNTA5X0NSTCk7CisJCQkqZGNybCA9IGRlbHRhOworCQkJcmV0dXJuOworCQkJfQorCQl9CisJKmRjcmwgPSBOVUxMOworCX0KKworLyogRm9yIGEgZ2l2ZW4gQ1JMIHJldHVybiBob3cgc3VpdGFibGUgaXQgaXMgZm9yIHRoZSBzdXBwbGllZCBjZXJ0aWZpY2F0ZSAneCcuCisgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgbWFzayBvZiBzZXZlcmFsIGNyaXRlcmlhLgorICogSWYgdGhlIGlzc3VlciBpcyBub3QgdGhlIGNlcnRpZmljYXRlIGlzc3VlciB0aGlzIGlzIHJldHVybmVkIGluICpwaXNzdWVyLgorICogVGhlIHJlYXNvbnMgbWFzayBpcyBhbHNvIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSBDUkwgaXMgc3VpdGFibGU6IGlmCisgKiBubyBuZXcgcmVhc29ucyB0aGUgQ1JMIGlzIHJlamVjdGVkLCBvdGhlcndpc2UgcmVhc29ucyBpcyB1cGRhdGVkLgorICovCisKK3N0YXRpYyBpbnQgZ2V0X2NybF9zY29yZShYNTA5X1NUT1JFX0NUWCAqY3R4LCBYNTA5ICoqcGlzc3VlciwKKwkJCXVuc2lnbmVkIGludCAqcHJlYXNvbnMsCisJCQlYNTA5X0NSTCAqY3JsLCBYNTA5ICp4KQorCXsKKworCWludCBjcmxfc2NvcmUgPSAwOworCXVuc2lnbmVkIGludCB0bXBfcmVhc29ucyA9ICpwcmVhc29ucywgY3JsX3JlYXNvbnM7CisKKwkvKiBGaXJzdCBzZWUgaWYgd2UgY2FuIHJlamVjdCBDUkwgc3RyYWlnaHQgYXdheSAqLworCisJLyogSW52YWxpZCBJRFAgY2Fubm90IGJlIHByb2Nlc3NlZCAqLworCWlmIChjcmwtPmlkcF9mbGFncyAmIElEUF9JTlZBTElEKQorCQlyZXR1cm4gMDsKKwkvKiBSZWFzb24gY29kZXMgb3IgaW5kaXJlY3QgQ1JMcyBuZWVkIGV4dGVuZGVkIENSTCBzdXBwb3J0ICovCisJaWYgKCEoY3R4LT5wYXJhbS0+ZmxhZ3MgJiBYNTA5X1ZfRkxBR19FWFRFTkRFRF9DUkxfU1VQUE9SVCkpCisJCXsKKwkJaWYgKGNybC0+aWRwX2ZsYWdzICYgKElEUF9JTkRJUkVDVCB8IElEUF9SRUFTT05TKSkKKwkJCXJldHVybiAwOworCQl9CisJZWxzZSBpZiAoY3JsLT5pZHBfZmxhZ3MgJiBJRFBfUkVBU09OUykKKwkJeworCQkvKiBJZiBubyBuZXcgcmVhc29ucyByZWplY3QgKi8KKwkJaWYgKCEoY3JsLT5pZHBfcmVhc29ucyAmIH50bXBfcmVhc29ucykpCisJCQlyZXR1cm4gMDsKKwkJfQorCS8qIERvbid0IHByb2Nlc3MgZGVsdGFzIGF0IHRoaXMgc3RhZ2UgKi8KKwllbHNlIGlmIChjcmwtPmJhc2VfY3JsX251bWJlcikKKwkJcmV0dXJuIDA7CisJLyogSWYgaXNzdWVyIG5hbWUgZG9lc24ndCBtYXRjaCBjZXJ0aWZpY2F0ZSBuZWVkIGluZGlyZWN0IENSTCAqLworCWlmIChYNTA5X05BTUVfY21wKFg1MDlfZ2V0X2lzc3Vlcl9uYW1lKHgpLCBYNTA5X0NSTF9nZXRfaXNzdWVyKGNybCkpKQorCQl7CisJCWlmICghKGNybC0+aWRwX2ZsYWdzICYgSURQX0lORElSRUNUKSkKKwkJCXJldHVybiAwOworCQl9CisJZWxzZQorCQljcmxfc2NvcmUgfD0gQ1JMX1NDT1JFX0lTU1VFUl9OQU1FOworCisJaWYgKCEoY3JsLT5mbGFncyAmIEVYRkxBR19DUklUSUNBTCkpCisJCWNybF9zY29yZSB8PSBDUkxfU0NPUkVfTk9DUklUSUNBTDsKKworCS8qIENoZWNrIGV4cGlyeSAqLworCWlmIChjaGVja19jcmxfdGltZShjdHgsIGNybCwgMCkpCisJCWNybF9zY29yZSB8PSBDUkxfU0NPUkVfVElNRTsKKworCS8qIENoZWNrIGF1dGhvcml0eSBrZXkgSUQgYW5kIGxvY2F0ZSBjZXJ0aWZpY2F0ZSBpc3N1ZXIgKi8KKwljcmxfYWtpZF9jaGVjayhjdHgsIGNybCwgcGlzc3VlciwgJmNybF9zY29yZSk7CisKKwkvKiBJZiB3ZSBjYW4ndCBsb2NhdGUgY2VydGlmaWNhdGUgaXNzdWVyIGF0IHRoaXMgcG9pbnQgZm9yZ2V0IGl0ICovCisKKwlpZiAoIShjcmxfc2NvcmUgJiBDUkxfU0NPUkVfQUtJRCkpCisJCXJldHVybiAwOworCisJLyogQ2hlY2sgY2VydCBmb3IgbWF0Y2hpbmcgQ1JMIGRpc3RyaWJ1dGlvbiBwb2ludHMgKi8KKworCWlmIChjcmxfY3JsZHBfY2hlY2soeCwgY3JsLCBjcmxfc2NvcmUsICZjcmxfcmVhc29ucykpCisJCXsKKwkJLyogSWYgbm8gbmV3IHJlYXNvbnMgcmVqZWN0ICovCisJCWlmICghKGNybF9yZWFzb25zICYgfnRtcF9yZWFzb25zKSkKKwkJCXJldHVybiAwOworCQl0bXBfcmVhc29ucyB8PSBjcmxfcmVhc29uczsKKwkJY3JsX3Njb3JlIHw9IENSTF9TQ09SRV9TQ09QRTsKIAkJfQogCi0Jb2sgPSBYNTA5X1NUT1JFX2dldF9ieV9zdWJqZWN0KGN0eCwgWDUwOV9MVV9DUkwsIG5tLCAmeG9iaik7CisJKnByZWFzb25zID0gdG1wX3JlYXNvbnM7CiAKLQlpZiAoIW9rKQorCXJldHVybiBjcmxfc2NvcmU7CisKKwl9CisKK3N0YXRpYyB2b2lkIGNybF9ha2lkX2NoZWNrKFg1MDlfU1RPUkVfQ1RYICpjdHgsIFg1MDlfQ1JMICpjcmwsCisJCQkJWDUwOSAqKnBpc3N1ZXIsIGludCAqcGNybF9zY29yZSkKKwl7CisJWDUwOSAqY3JsX2lzc3VlciA9IE5VTEw7CisJWDUwOV9OQU1FICpjbm0gPSBYNTA5X0NSTF9nZXRfaXNzdWVyKGNybCk7CisJaW50IGNpZHggPSBjdHgtPmVycm9yX2RlcHRoOworCWludCBpOworCisJaWYgKGNpZHggIT0gc2tfWDUwOV9udW0oY3R4LT5jaGFpbikgLSAxKQorCQljaWR4Kys7CisKKwljcmxfaXNzdWVyID0gc2tfWDUwOV92YWx1ZShjdHgtPmNoYWluLCBjaWR4KTsKKworCWlmIChYNTA5X2NoZWNrX2FraWQoY3JsX2lzc3VlciwgY3JsLT5ha2lkKSA9PSBYNTA5X1ZfT0spCiAJCXsKLQkJLyogSWYgd2UgZ290IGEgbmVhciBtYXRjaCBmcm9tIGdldF9jcmxfc2sgdXNlIHRoYXQgKi8KLQkJaWYgKGNybCkKKwkJaWYgKCpwY3JsX3Njb3JlICYgQ1JMX1NDT1JFX0lTU1VFUl9OQU1FKQogCQkJewotCQkJKnBjcmwgPSBjcmw7Ci0JCQlyZXR1cm4gMTsKKwkJCSpwY3JsX3Njb3JlIHw9IENSTF9TQ09SRV9BS0lEfENSTF9TQ09SRV9JU1NVRVJfQ0VSVDsKKwkJCSpwaXNzdWVyID0gY3JsX2lzc3VlcjsKKwkJCXJldHVybjsKKwkJCX0KKwkJfQorCisJZm9yIChjaWR4Kys7IGNpZHggPCBza19YNTA5X251bShjdHgtPmNoYWluKTsgY2lkeCsrKQorCQl7CisJCWNybF9pc3N1ZXIgPSBza19YNTA5X3ZhbHVlKGN0eC0+Y2hhaW4sIGNpZHgpOworCQlpZiAoWDUwOV9OQU1FX2NtcChYNTA5X2dldF9zdWJqZWN0X25hbWUoY3JsX2lzc3VlciksIGNubSkpCisJCQljb250aW51ZTsKKwkJaWYgKFg1MDlfY2hlY2tfYWtpZChjcmxfaXNzdWVyLCBjcmwtPmFraWQpID09IFg1MDlfVl9PSykKKwkJCXsKKwkJCSpwY3JsX3Njb3JlIHw9IENSTF9TQ09SRV9BS0lEfENSTF9TQ09SRV9TQU1FX1BBVEg7CisJCQkqcGlzc3VlciA9IGNybF9pc3N1ZXI7CisJCQlyZXR1cm47CisJCQl9CisJCX0KKworCS8qIEFueXRoaW5nIGVsc2UgbmVlZHMgZXh0ZW5kZWQgQ1JMIHN1cHBvcnQgKi8KKworCWlmICghKGN0eC0+cGFyYW0tPmZsYWdzICYgWDUwOV9WX0ZMQUdfRVhURU5ERURfQ1JMX1NVUFBPUlQpKQorCQlyZXR1cm47CisKKwkvKiBPdGhlcndpc2UgdGhlIENSTCBpc3N1ZXIgaXMgbm90IG9uIHRoZSBwYXRoLiBMb29rIGZvciBpdCBpbiB0aGUKKwkgKiBzZXQgb2YgdW50cnVzdGVkIGNlcnRpZmljYXRlcy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2tfWDUwOV9udW0oY3R4LT51bnRydXN0ZWQpOyBpKyspCisJCXsKKwkJY3JsX2lzc3VlciA9IHNrX1g1MDlfdmFsdWUoY3R4LT51bnRydXN0ZWQsIGkpOworCQlpZiAoWDUwOV9OQU1FX2NtcChYNTA5X2dldF9zdWJqZWN0X25hbWUoY3JsX2lzc3VlciksIGNubSkpCisJCQljb250aW51ZTsKKwkJaWYgKFg1MDlfY2hlY2tfYWtpZChjcmxfaXNzdWVyLCBjcmwtPmFraWQpID09IFg1MDlfVl9PSykKKwkJCXsKKwkJCSpwaXNzdWVyID0gY3JsX2lzc3VlcjsKKwkJCSpwY3JsX3Njb3JlIHw9IENSTF9TQ09SRV9BS0lEOworCQkJcmV0dXJuOworCQkJfQorCQl9CisJfQorCisvKiBDaGVjayB0aGUgcGF0aCBvZiBhIENSTCBpc3N1ZXIgY2VydGlmaWNhdGUuIFRoaXMgY3JlYXRlcyBhIG5ldworICogWDUwOV9TVE9SRV9DVFggYW5kIHBvcHVsYXRlcyBpdCB3aXRoIG1vc3Qgb2YgdGhlIHBhcmFtZXRlcnMgZnJvbSB0aGUKKyAqIHBhcmVudC4gVGhpcyBjb3VsZCBiZSBvcHRpbWlzZWQgc29tZXdoYXQgc2luY2UgYSBsb3Qgb2YgcGF0aCBjaGVja2luZworICogd2lsbCBiZSBkdXBsaWNhdGVkIGJ5IHRoZSBwYXJlbnQsIGJ1dCB0aGlzIHdpbGwgcmFyZWx5IGJlIHVzZWQgaW4gCisgKiBwcmFjdGljZS4KKyAqLworCitzdGF0aWMgaW50IGNoZWNrX2NybF9wYXRoKFg1MDlfU1RPUkVfQ1RYICpjdHgsIFg1MDkgKngpCisJeworCVg1MDlfU1RPUkVfQ1RYIGNybF9jdHg7CisJaW50IHJldDsKKwkvKiBEb24ndCBhbGxvdyByZWN1cnNpdmUgQ1JMIHBhdGggdmFsaWRhdGlvbiAqLworCWlmIChjdHgtPnBhcmVudCkKKwkJcmV0dXJuIDA7CisJaWYgKCFYNTA5X1NUT1JFX0NUWF9pbml0KCZjcmxfY3R4LCBjdHgtPmN0eCwgeCwgY3R4LT51bnRydXN0ZWQpKQorCQlyZXR1cm4gLTE7CisKKwljcmxfY3R4LmNybHMgPSBjdHgtPmNybHM7CisJLyogQ29weSB2ZXJpZnkgcGFyYW1zIGFjcm9zcyAqLworCVg1MDlfU1RPUkVfQ1RYX3NldDBfcGFyYW0oJmNybF9jdHgsIGN0eC0+cGFyYW0pOworCisJY3JsX2N0eC5wYXJlbnQgPSBjdHg7CisJY3JsX2N0eC52ZXJpZnlfY2IgPSBjdHgtPnZlcmlmeV9jYjsKKworCS8qIFZlcmlmeSBDUkwgaXNzdWVyICovCisJcmV0ID0gWDUwOV92ZXJpZnlfY2VydCgmY3JsX2N0eCk7CisKKwlpZiAocmV0IDw9IDApCisJCWdvdG8gZXJyOworCisJLyogQ2hlY2sgY2hhaW4gaXMgYWNjZXB0YWJsZSAqLworCisJcmV0ID0gY2hlY2tfY3JsX2NoYWluKGN0eCwgY3R4LT5jaGFpbiwgY3JsX2N0eC5jaGFpbik7CisJZXJyOgorCVg1MDlfU1RPUkVfQ1RYX2NsZWFudXAoJmNybF9jdHgpOworCXJldHVybiByZXQ7CisJfQorCisvKiBSRkMzMjgwIHNheXMgbm90aGluZyBhYm91dCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gQ1JMIHBhdGgKKyAqIGFuZCBjZXJ0aWZpY2F0ZSBwYXRoLCB3aGljaCBjb3VsZCBsZWFkIHRvIHNpdHVhdGlvbnMgd2hlcmUgYQorICogY2VydGlmaWNhdGUgY291bGQgYmUgcmV2b2tlZCBvciB2YWxpZGF0ZWQgYnkgYSBDQSBub3QgYXV0aG9yaXNlZAorICogdG8gZG8gc28uIFJGQzUyODAgaXMgbW9yZSBzdHJpY3QgYW5kIHN0YXRlcyB0aGF0IHRoZSB0d28gcGF0aHMgbXVzdAorICogZW5kIGluIHRoZSBzYW1lIHRydXN0IGFuY2hvciwgdGhvdWdoIHNvbWUgZGlzY3Vzc2lvbnMgcmVtYWluLi4uCisgKiB1bnRpbCB0aGlzIGlzIHJlc29sdmVkIHdlIHVzZSB0aGUgUkZDNTI4MCB2ZXJzaW9uCisgKi8KKworc3RhdGljIGludCBjaGVja19jcmxfY2hhaW4oWDUwOV9TVE9SRV9DVFggKmN0eCwKKwkJCVNUQUNLX09GKFg1MDkpICpjZXJ0X3BhdGgsCisJCQlTVEFDS19PRihYNTA5KSAqY3JsX3BhdGgpCisJeworCVg1MDkgKmNlcnRfdGEsICpjcmxfdGE7CisJY2VydF90YSA9IHNrX1g1MDlfdmFsdWUoY2VydF9wYXRoLCBza19YNTA5X251bShjZXJ0X3BhdGgpIC0gMSk7CisJY3JsX3RhID0gc2tfWDUwOV92YWx1ZShjcmxfcGF0aCwgc2tfWDUwOV9udW0oY3JsX3BhdGgpIC0gMSk7CisJaWYgKCFYNTA5X2NtcChjZXJ0X3RhLCBjcmxfdGEpKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKKwl9CisKKy8qIENoZWNrIGZvciBtYXRjaCBiZXR3ZWVuIHR3byBkaXN0IHBvaW50IG5hbWVzOiB0aHJlZSBzZXBhcmF0ZSBjYXNlcy4KKyAqIDEuIEJvdGggYXJlIHJlbGF0aXZlIG5hbWVzIGFuZCBjb21wYXJlIFg1MDlfTkFNRSB0eXBlcy4KKyAqIDIuIE9uZSBmdWxsLCBvbmUgcmVsYXRpdmUuIENvbXBhcmUgWDUwOV9OQU1FIHRvIEdFTkVSQUxfTkFNRVMuCisgKiAzLiBCb3RoIGFyZSBmdWxsIG5hbWVzIGFuZCBjb21wYXJlIHR3byBHRU5FUkFMX05BTUVTLgorICogNC4gT25lIGlzIE5VTEw6IGF1dG9tYXRpYyBtYXRjaC4KKyAqLworCisKK3N0YXRpYyBpbnQgaWRwX2NoZWNrX2RwKERJU1RfUE9JTlRfTkFNRSAqYSwgRElTVF9QT0lOVF9OQU1FICpiKQorCXsKKwlYNTA5X05BTUUgKm5tID0gTlVMTDsKKwlHRU5FUkFMX05BTUVTICpnZW5zID0gTlVMTDsKKwlHRU5FUkFMX05BTUUgKmdlbmEsICpnZW5iOworCWludCBpLCBqOworCWlmICghYSB8fCAhYikKKwkJcmV0dXJuIDE7CisJaWYgKGEtPnR5cGUgPT0gMSkKKwkJeworCQlpZiAoIWEtPmRwbmFtZSkKKwkJCXJldHVybiAwOworCQkvKiBDYXNlIDE6IHR3byBYNTA5X05BTUUgKi8KKwkJaWYgKGItPnR5cGUgPT0gMSkKKwkJCXsKKwkJCWlmICghYi0+ZHBuYW1lKQorCQkJCXJldHVybiAwOworCQkJaWYgKCFYNTA5X05BTUVfY21wKGEtPmRwbmFtZSwgYi0+ZHBuYW1lKSkKKwkJCQlyZXR1cm4gMTsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJLyogQ2FzZSAyOiBzZXQgbmFtZSBhbmQgR0VORVJBTF9OQU1FUyBhcHByb3ByaWF0ZWx5ICovCisJCW5tID0gYS0+ZHBuYW1lOworCQlnZW5zID0gYi0+bmFtZS5mdWxsbmFtZTsKKwkJfQorCWVsc2UgaWYgKGItPnR5cGUgPT0gMSkKKwkJeworCQlpZiAoIWItPmRwbmFtZSkKKwkJCXJldHVybiAwOworCQkvKiBDYXNlIDI6IHNldCBuYW1lIGFuZCBHRU5FUkFMX05BTUVTIGFwcHJvcHJpYXRlbHkgKi8KKwkJZ2VucyA9IGEtPm5hbWUuZnVsbG5hbWU7CisJCW5tID0gYi0+ZHBuYW1lOworCQl9CisKKwkvKiBIYW5kbGUgY2FzZSAyIHdpdGggb25lIEdFTkVSQUxfTkFNRVMgYW5kIG9uZSBYNTA5X05BTUUgKi8KKwlpZiAobm0pCisJCXsKKwkJZm9yIChpID0gMDsgaSA8IHNrX0dFTkVSQUxfTkFNRV9udW0oZ2Vucyk7IGkrKykKKwkJCXsKKwkJCWdlbmEgPSBza19HRU5FUkFMX05BTUVfdmFsdWUoZ2VucywgaSk7CQorCQkJaWYgKGdlbmEtPnR5cGUgIT0gR0VOX0RJUk5BTUUpCisJCQkJY29udGludWU7CisJCQlpZiAoIVg1MDlfTkFNRV9jbXAobm0sIGdlbmEtPmQuZGlyZWN0b3J5TmFtZSkpCisJCQkJcmV0dXJuIDE7CiAJCQl9CiAJCXJldHVybiAwOwogCQl9CiAKLQkqcGNybCA9IHhvYmouZGF0YS5jcmw7CisJLyogRWxzZSBjYXNlIDM6IHR3byBHRU5FUkFMX05BTUVTICovCisKKwlmb3IgKGkgPSAwOyBpIDwgc2tfR0VORVJBTF9OQU1FX251bShhLT5uYW1lLmZ1bGxuYW1lKTsgaSsrKQorCQl7CisJCWdlbmEgPSBza19HRU5FUkFMX05BTUVfdmFsdWUoYS0+bmFtZS5mdWxsbmFtZSwgaSk7CisJCWZvciAoaiA9IDA7IGogPCBza19HRU5FUkFMX05BTUVfbnVtKGItPm5hbWUuZnVsbG5hbWUpOyBqKyspCisJCQl7CisJCQlnZW5iID0gc2tfR0VORVJBTF9OQU1FX3ZhbHVlKGItPm5hbWUuZnVsbG5hbWUsIGopOworCQkJaWYgKCFHRU5FUkFMX05BTUVfY21wKGdlbmEsIGdlbmIpKQorCQkJCXJldHVybiAxOworCQkJfQorCQl9CisKKwlyZXR1cm4gMDsKKworCX0KKworc3RhdGljIGludCBjcmxkcF9jaGVja19jcmxpc3N1ZXIoRElTVF9QT0lOVCAqZHAsIFg1MDlfQ1JMICpjcmwsIGludCBjcmxfc2NvcmUpCisJeworCWludCBpOworCVg1MDlfTkFNRSAqbm0gPSBYNTA5X0NSTF9nZXRfaXNzdWVyKGNybCk7CisJLyogSWYgbm8gQ1JMaXNzdWVyIHJldHVybiBpcyBzdWNjZXNzZnVsIGlmZiBkb24ndCBuZWVkIGEgbWF0Y2ggKi8KKwlpZiAoIWRwLT5DUkxpc3N1ZXIpCisJCXJldHVybiAhIShjcmxfc2NvcmUgJiBDUkxfU0NPUkVfSVNTVUVSX05BTUUpOworCWZvciAoaSA9IDA7IGkgPCBza19HRU5FUkFMX05BTUVfbnVtKGRwLT5DUkxpc3N1ZXIpOyBpKyspCisJCXsKKwkJR0VORVJBTF9OQU1FICpnZW4gPSBza19HRU5FUkFMX05BTUVfdmFsdWUoZHAtPkNSTGlzc3VlciwgaSk7CisJCWlmIChnZW4tPnR5cGUgIT0gR0VOX0RJUk5BTUUpCisJCQljb250aW51ZTsKKwkJaWYgKCFYNTA5X05BTUVfY21wKGdlbi0+ZC5kaXJlY3RvcnlOYW1lLCBubSkpCisJCQlyZXR1cm4gMTsKKwkJfQorCXJldHVybiAwOworCX0KKworLyogQ2hlY2sgQ1JMRFAgYW5kIElEUCAqLworCitzdGF0aWMgaW50IGNybF9jcmxkcF9jaGVjayhYNTA5ICp4LCBYNTA5X0NSTCAqY3JsLCBpbnQgY3JsX3Njb3JlLAorCQkJCXVuc2lnbmVkIGludCAqcHJlYXNvbnMpCisJeworCWludCBpOworCWlmIChjcmwtPmlkcF9mbGFncyAmIElEUF9PTkxZQVRUUikKKwkJcmV0dXJuIDA7CisJaWYgKHgtPmV4X2ZsYWdzICYgRVhGTEFHX0NBKQorCQl7CisJCWlmIChjcmwtPmlkcF9mbGFncyAmIElEUF9PTkxZVVNFUikKKwkJCXJldHVybiAwOworCQl9CisJZWxzZQorCQl7CisJCWlmIChjcmwtPmlkcF9mbGFncyAmIElEUF9PTkxZQ0EpCisJCQlyZXR1cm4gMDsKKwkJfQorCSpwcmVhc29ucyA9IGNybC0+aWRwX3JlYXNvbnM7CisJZm9yIChpID0gMDsgaSA8IHNrX0RJU1RfUE9JTlRfbnVtKHgtPmNybGRwKTsgaSsrKQorCQl7CisJCURJU1RfUE9JTlQgKmRwID0gc2tfRElTVF9QT0lOVF92YWx1ZSh4LT5jcmxkcCwgaSk7CisJCWlmIChjcmxkcF9jaGVja19jcmxpc3N1ZXIoZHAsIGNybCwgY3JsX3Njb3JlKSkKKwkJCXsKKwkJCWlmICghY3JsLT5pZHAgfHwKKwkJCSAgICAgaWRwX2NoZWNrX2RwKGRwLT5kaXN0cG9pbnQsIGNybC0+aWRwLT5kaXN0cG9pbnQpKQorCQkJCXsKKwkJCQkqcHJlYXNvbnMgJj0gZHAtPmRwX3JlYXNvbnM7CisJCQkJcmV0dXJuIDE7CisJCQkJfQorCQkJfQorCQl9CisJaWYgKCghY3JsLT5pZHAgfHwgIWNybC0+aWRwLT5kaXN0cG9pbnQpICYmIChjcmxfc2NvcmUgJiBDUkxfU0NPUkVfSVNTVUVSX05BTUUpKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKKwl9CisKKy8qIFJldHJpZXZlIENSTCBjb3JyZXNwb25kaW5nIHRvIGN1cnJlbnQgY2VydGlmaWNhdGUuCisgKiBJZiBkZWx0YXMgZW5hYmxlZCB0cnkgdG8gZmluZCBhIGRlbHRhIENSTCB0b28KKyAqLworCQorc3RhdGljIGludCBnZXRfY3JsX2RlbHRhKFg1MDlfU1RPUkVfQ1RYICpjdHgsCisJCQkJWDUwOV9DUkwgKipwY3JsLCBYNTA5X0NSTCAqKnBkY3JsLCBYNTA5ICp4KQorCXsKKwlpbnQgb2s7CisJWDUwOSAqaXNzdWVyID0gTlVMTDsKKwlpbnQgY3JsX3Njb3JlID0gMDsKKwl1bnNpZ25lZCBpbnQgcmVhc29uczsKKwlYNTA5X0NSTCAqY3JsID0gTlVMTCwgKmRjcmwgPSBOVUxMOworCVNUQUNLX09GKFg1MDlfQ1JMKSAqc2tjcmw7CisJWDUwOV9OQU1FICpubSA9IFg1MDlfZ2V0X2lzc3Vlcl9uYW1lKHgpOworCXJlYXNvbnMgPSBjdHgtPmN1cnJlbnRfcmVhc29uczsKKwlvayA9IGdldF9jcmxfc2soY3R4LCAmY3JsLCAmZGNybCwgCisJCQkJJmlzc3VlciwgJmNybF9zY29yZSwgJnJlYXNvbnMsIGN0eC0+Y3Jscyk7CisKKwlpZiAob2spCisJCWdvdG8gZG9uZTsKKworCS8qIExvb2t1cCBDUkxzIGZyb20gc3RvcmUgKi8KKworCXNrY3JsID0gY3R4LT5sb29rdXBfY3JscyhjdHgsIG5tKTsKKworCS8qIElmIG5vIENSTHMgZm91bmQgYW5kIGEgbmVhciBtYXRjaCBmcm9tIGdldF9jcmxfc2sgdXNlIHRoYXQgKi8KKwlpZiAoIXNrY3JsICYmIGNybCkKKwkJZ290byBkb25lOworCisJZ2V0X2NybF9zayhjdHgsICZjcmwsICZkY3JsLCAmaXNzdWVyLCAmY3JsX3Njb3JlLCAmcmVhc29ucywgc2tjcmwpOworCisJc2tfWDUwOV9DUkxfcG9wX2ZyZWUoc2tjcmwsIFg1MDlfQ1JMX2ZyZWUpOworCisJZG9uZToKKworCS8qIElmIHdlIGdvdCBhbnkga2luZCBvZiBDUkwgdXNlIGl0IGFuZCByZXR1cm4gc3VjY2VzcyAqLwogCWlmIChjcmwpCi0JCVg1MDlfQ1JMX2ZyZWUoY3JsKTsKLQlyZXR1cm4gMTsKKwkJeworCQljdHgtPmN1cnJlbnRfaXNzdWVyID0gaXNzdWVyOworCQljdHgtPmN1cnJlbnRfY3JsX3Njb3JlID0gY3JsX3Njb3JlOworCQljdHgtPmN1cnJlbnRfcmVhc29ucyA9IHJlYXNvbnM7CisJCSpwY3JsID0gY3JsOworCQkqcGRjcmwgPSBkY3JsOworCQlyZXR1cm4gMTsKKwkJfQorCisJcmV0dXJuIDA7CiAJfQogCiAvKiBDaGVjayBDUkwgdmFsaWRpdHkgKi8KQEAgLTczOSwxMCArMTM0NiwxNCBAQAogCWludCBvayA9IDAsIGNobnVtLCBjbnVtOwogCWNudW0gPSBjdHgtPmVycm9yX2RlcHRoOwogCWNobnVtID0gc2tfWDUwOV9udW0oY3R4LT5jaGFpbikgLSAxOwotCS8qIEZpbmQgQ1JMIGlzc3VlcjogaWYgbm90IGxhc3QgY2VydGlmaWNhdGUgdGhlbiBpc3N1ZXIKKwkvKiBpZiB3ZSBoYXZlIGFuIGFsdGVybmF0aXZlIENSTCBpc3N1ZXIgY2VydCB1c2UgdGhhdCAqLworCWlmIChjdHgtPmN1cnJlbnRfaXNzdWVyKQorCQlpc3N1ZXIgPSBjdHgtPmN1cnJlbnRfaXNzdWVyOworCisJLyogRWxzZSBmaW5kIENSTCBpc3N1ZXI6IGlmIG5vdCBsYXN0IGNlcnRpZmljYXRlIHRoZW4gaXNzdWVyCiAJICogaXMgbmV4dCBjZXJ0aWZpY2F0ZSBpbiBjaGFpbi4KIAkgKi8KLQlpZihjbnVtIDwgY2hudW0pCisJZWxzZSBpZiAoY251bSA8IGNobnVtKQogCQlpc3N1ZXIgPSBza19YNTA5X3ZhbHVlKGN0eC0+Y2hhaW4sIGNudW0gKyAxKTsKIAllbHNlCiAJCXsKQEAgLTc1OCwxMyArMTM2OSw1MiBAQAogCiAJaWYoaXNzdWVyKQogCQl7Ci0JCS8qIENoZWNrIGZvciBjUkxTaWduIGJpdCBpZiBrZXlVc2FnZSBwcmVzZW50ICovCi0JCWlmICgoaXNzdWVyLT5leF9mbGFncyAmIEVYRkxBR19LVVNBR0UpICYmCi0JCQkhKGlzc3Vlci0+ZXhfa3VzYWdlICYgS1VfQ1JMX1NJR04pKQorCQkvKiBTa2lwIG1vc3QgdGVzdHMgZm9yIGRlbHRhcyBiZWNhdXNlIHRoZXkgaGF2ZSBhbHJlYWR5CisJCSAqIGJlZW4gZG9uZQorCQkgKi8KKwkJaWYgKCFjcmwtPmJhc2VfY3JsX251bWJlcikKIAkJCXsKLQkJCWN0eC0+ZXJyb3IgPSBYNTA5X1ZfRVJSX0tFWVVTQUdFX05PX0NSTF9TSUdOOwotCQkJb2sgPSBjdHgtPnZlcmlmeV9jYigwLCBjdHgpOwotCQkJaWYoIW9rKSBnb3RvIGVycjsKKwkJCS8qIENoZWNrIGZvciBjUkxTaWduIGJpdCBpZiBrZXlVc2FnZSBwcmVzZW50ICovCisJCQlpZiAoKGlzc3Vlci0+ZXhfZmxhZ3MgJiBFWEZMQUdfS1VTQUdFKSAmJgorCQkJCSEoaXNzdWVyLT5leF9rdXNhZ2UgJiBLVV9DUkxfU0lHTikpCisJCQkJeworCQkJCWN0eC0+ZXJyb3IgPSBYNTA5X1ZfRVJSX0tFWVVTQUdFX05PX0NSTF9TSUdOOworCQkJCW9rID0gY3R4LT52ZXJpZnlfY2IoMCwgY3R4KTsKKwkJCQlpZighb2spIGdvdG8gZXJyOworCQkJCX0KKworCQkJaWYgKCEoY3R4LT5jdXJyZW50X2NybF9zY29yZSAmIENSTF9TQ09SRV9TQ09QRSkpCisJCQkJeworCQkJCWN0eC0+ZXJyb3IgPSBYNTA5X1ZfRVJSX0RJRkZFUkVOVF9DUkxfU0NPUEU7CisJCQkJb2sgPSBjdHgtPnZlcmlmeV9jYigwLCBjdHgpOworCQkJCWlmKCFvaykgZ290byBlcnI7CisJCQkJfQorCisJCQlpZiAoIShjdHgtPmN1cnJlbnRfY3JsX3Njb3JlICYgQ1JMX1NDT1JFX1NBTUVfUEFUSCkpCisJCQkJeworCQkJCWlmIChjaGVja19jcmxfcGF0aChjdHgsIGN0eC0+Y3VycmVudF9pc3N1ZXIpIDw9IDApCisJCQkJCXsKKwkJCQkJY3R4LT5lcnJvciA9IFg1MDlfVl9FUlJfQ1JMX1BBVEhfVkFMSURBVElPTl9FUlJPUjsKKwkJCQkJb2sgPSBjdHgtPnZlcmlmeV9jYigwLCBjdHgpOworCQkJCQlpZighb2spIGdvdG8gZXJyOworCQkJCQl9CisJCQkJfQorCisJCQlpZiAoY3JsLT5pZHBfZmxhZ3MgJiBJRFBfSU5WQUxJRCkKKwkJCQl7CisJCQkJY3R4LT5lcnJvciA9IFg1MDlfVl9FUlJfSU5WQUxJRF9FWFRFTlNJT047CisJCQkJb2sgPSBjdHgtPnZlcmlmeV9jYigwLCBjdHgpOworCQkJCWlmKCFvaykgZ290byBlcnI7CisJCQkJfQorCisKKwkJCX0KKworCQlpZiAoIShjdHgtPmN1cnJlbnRfY3JsX3Njb3JlICYgQ1JMX1NDT1JFX1RJTUUpKQorCQkJeworCQkJb2sgPSBjaGVja19jcmxfdGltZShjdHgsIGNybCwgMSk7CisJCQlpZiAoIW9rKQorCQkJCWdvdG8gZXJyOwogCQkJfQogCiAJCS8qIEF0dGVtcHQgdG8gZ2V0IGlzc3VlciBjZXJ0aWZpY2F0ZSBwdWJsaWMga2V5ICovCkBAIC03ODgsMTAgKzE0MzgsNiBAQAogCQkJfQogCQl9CiAKLQlvayA9IGNoZWNrX2NybF90aW1lKGN0eCwgY3JsLCAxKTsKLQlpZiAoIW9rKQotCQlnb3RvIGVycjsKLQogCW9rID0gMTsKIAogCWVycjoKQEAgLTgwMiw2MiArMTQ0OCw0MyBAQAogLyogQ2hlY2sgY2VydGlmaWNhdGUgYWdhaW5zdCBDUkwgKi8KIHN0YXRpYyBpbnQgY2VydF9jcmwoWDUwOV9TVE9SRV9DVFggKmN0eCwgWDUwOV9DUkwgKmNybCwgWDUwOSAqeCkKIAl7Ci0JaW50IGlkeCwgb2s7Ci0JWDUwOV9SRVZPS0VEIHJ0bXA7Ci0JU1RBQ0tfT0YoWDUwOV9FWFRFTlNJT04pICpleHRzOwotCVg1MDlfRVhURU5TSU9OICpleHQ7Ci0JLyogTG9vayBmb3Igc2VyaWFsIG51bWJlciBvZiBjZXJ0aWZpY2F0ZSBpbiBDUkwgKi8KLQlydG1wLnNlcmlhbE51bWJlciA9IFg1MDlfZ2V0X3NlcmlhbE51bWJlcih4KTsKLQkvKiBTb3J0IHJldm9rZWQgaW50byBzZXJpYWwgbnVtYmVyIG9yZGVyIGlmIG5vdCBhbHJlYWR5IHNvcnRlZC4KLQkgKiBEbyB0aGlzIHVuZGVyIGEgbG9jayB0byBhdm9pZCByYWNlIGNvbmRpdGlvbi4KLSAJICovCi0JaWYgKCFza19YNTA5X1JFVk9LRURfaXNfc29ydGVkKGNybC0+Y3JsLT5yZXZva2VkKSkKLQkJewotCQlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1g1MDlfQ1JMKTsKLQkJc2tfWDUwOV9SRVZPS0VEX3NvcnQoY3JsLT5jcmwtPnJldm9rZWQpOwotCQlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfWDUwOV9DUkwpOwotCQl9Ci0JaWR4ID0gc2tfWDUwOV9SRVZPS0VEX2ZpbmQoY3JsLT5jcmwtPnJldm9rZWQsICZydG1wKTsKLQkvKiBJZiBmb3VuZCBhc3N1bWUgcmV2b2tlZDogd2FudCBzb21ldGhpbmcgY2xldmVyZXIgdGhhbgotCSAqIHRoaXMgdG8gaGFuZGxlIGVudHJ5IGV4dGVuc2lvbnMgaW4gVjIgQ1JMcy4KKwlpbnQgb2s7CisJWDUwOV9SRVZPS0VEICpyZXY7CisJLyogVGhlIHJ1bGVzIGNoYW5nZWQgZm9yIHRoaXMuLi4gcHJldmlvdXNseSBpZiBhIENSTCBjb250YWluZWQKKwkgKiB1bmhhbmRsZWQgY3JpdGljYWwgZXh0ZW5zaW9ucyBpdCBjb3VsZCBzdGlsbCBiZSB1c2VkIHRvIGluZGljYXRlCisJICogYSBjZXJ0aWZpY2F0ZSB3YXMgcmV2b2tlZC4gVGhpcyBoYXMgc2luY2UgYmVlbiBjaGFuZ2VkIHNpbmNlIAorCSAqIGNyaXRpY2FsIGV4dGVuc2lvbiBjYW4gY2hhbmdlIHRoZSBtZWFuaW5nIG9mIENSTCBlbnRyaWVzLgogCSAqLwotCWlmKGlkeCA+PSAwKQorCWlmIChjcmwtPmZsYWdzICYgRVhGTEFHX0NSSVRJQ0FMKQogCQl7CisJCWlmIChjdHgtPnBhcmFtLT5mbGFncyAmIFg1MDlfVl9GTEFHX0lHTk9SRV9DUklUSUNBTCkKKwkJCXJldHVybiAxOworCQljdHgtPmVycm9yID0gWDUwOV9WX0VSUl9VTkhBTkRMRURfQ1JJVElDQUxfQ1JMX0VYVEVOU0lPTjsKKwkJb2sgPSBjdHgtPnZlcmlmeV9jYigwLCBjdHgpOworCQlpZighb2spCisJCQlyZXR1cm4gMDsKKwkJfQorCS8qIExvb2sgZm9yIHNlcmlhbCBudW1iZXIgb2YgY2VydGlmaWNhdGUgaW4gQ1JMCisJICogSWYgZm91bmQgbWFrZSBzdXJlIHJlYXNvbiBpcyBub3QgcmVtb3ZlRnJvbUNSTC4KKwkgKi8KKwlpZiAoWDUwOV9DUkxfZ2V0MF9ieV9jZXJ0KGNybCwgJnJldiwgeCkpCisJCXsKKwkJaWYgKHJldi0+cmVhc29uID09IENSTF9SRUFTT05fUkVNT1ZFX0ZST01fQ1JMKQorCQkJcmV0dXJuIDI7CiAJCWN0eC0+ZXJyb3IgPSBYNTA5X1ZfRVJSX0NFUlRfUkVWT0tFRDsKIAkJb2sgPSBjdHgtPnZlcmlmeV9jYigwLCBjdHgpOwotCQlpZiAoIW9rKSByZXR1cm4gMDsKKwkJaWYgKCFvaykKKwkJCXJldHVybiAwOwogCQl9CiAKLQlpZiAoY3R4LT5wYXJhbS0+ZmxhZ3MgJiBYNTA5X1ZfRkxBR19JR05PUkVfQ1JJVElDQUwpCi0JCXJldHVybiAxOwotCi0JLyogU2VlIGlmIHdlIGhhdmUgYW55IGNyaXRpY2FsIENSTCBleHRlbnNpb25zOiBzaW5jZSB3ZQotCSAqIGN1cnJlbnRseSBkb24ndCBoYW5kbGUgYW55IENSTCBleHRlbnNpb25zIHRoZSBDUkwgbXVzdCBiZQotCSAqIHJlamVjdGVkLiAKLQkgKiBUaGlzIGNvZGUgYWNjZXNzZXMgdGhlIFg1MDlfQ1JMIHN0cnVjdHVyZSBkaXJlY3RseTogYXBwbGljYXRpb25zCi0JICogc2hvdWxkbid0IGRvIHRoaXMuCi0JICovCi0KLQlleHRzID0gY3JsLT5jcmwtPmV4dGVuc2lvbnM7Ci0KLQlmb3IgKGlkeCA9IDA7IGlkeCA8IHNrX1g1MDlfRVhURU5TSU9OX251bShleHRzKTsgaWR4KyspCi0JCXsKLQkJZXh0ID0gc2tfWDUwOV9FWFRFTlNJT05fdmFsdWUoZXh0cywgaWR4KTsKLQkJaWYgKGV4dC0+Y3JpdGljYWwgPiAwKQotCQkJewotCQkJY3R4LT5lcnJvciA9Ci0JCQkJWDUwOV9WX0VSUl9VTkhBTkRMRURfQ1JJVElDQUxfQ1JMX0VYVEVOU0lPTjsKLQkJCW9rID0gY3R4LT52ZXJpZnlfY2IoMCwgY3R4KTsKLQkJCWlmKCFvaykgcmV0dXJuIDA7Ci0JCQlicmVhazsKLQkJCX0KLQkJfQogCXJldHVybiAxOwogCX0KIAogc3RhdGljIGludCBjaGVja19wb2xpY3koWDUwOV9TVE9SRV9DVFggKmN0eCkKIAl7CiAJaW50IHJldDsKKwlpZiAoY3R4LT5wYXJlbnQpCisJCXJldHVybiAxOwogCXJldCA9IFg1MDlfcG9saWN5X2NoZWNrKCZjdHgtPnRyZWUsICZjdHgtPmV4cGxpY2l0X3BvbGljeSwgY3R4LT5jaGFpbiwKIAkJCQljdHgtPnBhcmFtLT5wb2xpY2llcywgY3R4LT5wYXJhbS0+ZmxhZ3MpOwogCWlmIChyZXQgPT0gMCkKQEAgLTg4MCw3ICsxNTA3LDggQEAKIAkJCQljb250aW51ZTsKIAkJCWN0eC0+Y3VycmVudF9jZXJ0ID0geDsKIAkJCWN0eC0+ZXJyb3IgPSBYNTA5X1ZfRVJSX0lOVkFMSURfUE9MSUNZX0VYVEVOU0lPTjsKLQkJCXJldCA9IGN0eC0+dmVyaWZ5X2NiKDAsIGN0eCk7CisJCQlpZighY3R4LT52ZXJpZnlfY2IoMCwgY3R4KSkKKwkJCQlyZXR1cm4gMDsKIAkJCX0KIAkJcmV0dXJuIDE7CiAJCX0KQEAgLTEwMzksMTIgKzE2NjcsMTIgQEAKIAlyZXR1cm4gb2s7CiAJfQogCi1pbnQgWDUwOV9jbXBfY3VycmVudF90aW1lKEFTTjFfVElNRSAqY3RtKQoraW50IFg1MDlfY21wX2N1cnJlbnRfdGltZShjb25zdCBBU04xX1RJTUUgKmN0bSkKIHsKIAlyZXR1cm4gWDUwOV9jbXBfdGltZShjdG0sIE5VTEwpOwogfQogCi1pbnQgWDUwOV9jbXBfdGltZShBU04xX1RJTUUgKmN0bSwgdGltZV90ICpjbXBfdGltZSkKK2ludCBYNTA5X2NtcF90aW1lKGNvbnN0IEFTTjFfVElNRSAqY3RtLCB0aW1lX3QgKmNtcF90aW1lKQogCXsKIAljaGFyICpzdHI7CiAJQVNOMV9USU1FIGF0bTsKQEAgLTEwOTksNiArMTcyNyw3IEBACiAJCQlvZmZzZXQ9IC1vZmZzZXQ7CiAJCX0KIAlhdG0udHlwZT1jdG0tPnR5cGU7CisJYXRtLmZsYWdzID0gMDsKIAlhdG0ubGVuZ3RoPXNpemVvZihidWZmMik7CiAJYXRtLmRhdGE9KHVuc2lnbmVkIGNoYXIgKilidWZmMjsKIApAQCAtMTEyNywxOSArMTc1NiwyOCBAQAogCXJldHVybiBYNTA5X3RpbWVfYWRqKHMsIGFkaiwgTlVMTCk7CiB9CiAKLUFTTjFfVElNRSAqWDUwOV90aW1lX2FkaihBU04xX1RJTUUgKnMsIGxvbmcgYWRqLCB0aW1lX3QgKmluX3RtKQorQVNOMV9USU1FICpYNTA5X3RpbWVfYWRqKEFTTjFfVElNRSAqcywgbG9uZyBvZmZzZXRfc2VjLCB0aW1lX3QgKmluX3RtKQorCXsKKwlyZXR1cm4gWDUwOV90aW1lX2Fkal9leChzLCAwLCBvZmZzZXRfc2VjLCBpbl90bSk7CisJfQorCitBU04xX1RJTUUgKlg1MDlfdGltZV9hZGpfZXgoQVNOMV9USU1FICpzLAorCQkJCWludCBvZmZzZXRfZGF5LCBsb25nIG9mZnNldF9zZWMsIHRpbWVfdCAqaW5fdG0pCiAJewogCXRpbWVfdCB0OwotCWludCB0eXBlID0gLTE7CiAKIAlpZiAoaW5fdG0pIHQgPSAqaW5fdG07CiAJZWxzZSB0aW1lKCZ0KTsKIAotCXQrPWFkajsKLQlpZiAocykgdHlwZSA9IHMtPnR5cGU7Ci0JaWYgKHR5cGUgPT0gVl9BU04xX1VUQ1RJTUUpIHJldHVybiBBU04xX1VUQ1RJTUVfc2V0KHMsdCk7Ci0JaWYgKHR5cGUgPT0gVl9BU04xX0dFTkVSQUxJWkVEVElNRSkgcmV0dXJuIEFTTjFfR0VORVJBTElaRURUSU1FX3NldChzLCB0KTsKLQlyZXR1cm4gQVNOMV9USU1FX3NldChzLCB0KTsKKwlpZiAocyAmJiAhKHMtPmZsYWdzICYgQVNOMV9TVFJJTkdfRkxBR19NU1RSSU5HKSkKKwkJeworCQlpZiAocy0+dHlwZSA9PSBWX0FTTjFfVVRDVElNRSkKKwkJCXJldHVybiBBU04xX1VUQ1RJTUVfYWRqKHMsdCwgb2Zmc2V0X2RheSwgb2Zmc2V0X3NlYyk7CisJCWlmIChzLT50eXBlID09IFZfQVNOMV9HRU5FUkFMSVpFRFRJTUUpCisJCQlyZXR1cm4gQVNOMV9HRU5FUkFMSVpFRFRJTUVfYWRqKHMsIHQsIG9mZnNldF9kYXksCisJCQkJCQkJCW9mZnNldF9zZWMpOworCQl9CisJcmV0dXJuIEFTTjFfVElNRV9hZGoocywgdCwgb2Zmc2V0X2RheSwgb2Zmc2V0X3NlYyk7CiAJfQogCiBpbnQgWDUwOV9nZXRfcHVia2V5X3BhcmFtZXRlcnMoRVZQX1BLRVkgKnBrZXksIFNUQUNLX09GKFg1MDkpICpjaGFpbikKQEAgLTEyNDIsNiArMTg4MCwyMSBAQAogCXJldHVybiBjaGFpbjsKIAl9CiAKK1g1MDkgKlg1MDlfU1RPUkVfQ1RYX2dldDBfY3VycmVudF9pc3N1ZXIoWDUwOV9TVE9SRV9DVFggKmN0eCkKKwl7CisJcmV0dXJuIGN0eC0+Y3VycmVudF9pc3N1ZXI7CisJfQorCitYNTA5X0NSTCAqWDUwOV9TVE9SRV9DVFhfZ2V0MF9jdXJyZW50X2NybChYNTA5X1NUT1JFX0NUWCAqY3R4KQorCXsKKwlyZXR1cm4gY3R4LT5jdXJyZW50X2NybDsKKwl9CisKK1g1MDlfU1RPUkVfQ1RYICpYNTA5X1NUT1JFX0NUWF9nZXQwX3BhcmVudF9jdHgoWDUwOV9TVE9SRV9DVFggKmN0eCkKKwl7CisJcmV0dXJuIGN0eC0+cGFyZW50OworCX0KKwogdm9pZCBYNTA5X1NUT1JFX0NUWF9zZXRfY2VydChYNTA5X1NUT1JFX0NUWCAqY3R4LCBYNTA5ICp4KQogCXsKIAljdHgtPmNlcnQ9eDsKQEAgLTEzNjMsNiArMjAxNiw3IEBACiAJY3R4LT5jdXJyZW50X2NlcnQ9TlVMTDsKIAljdHgtPmN1cnJlbnRfaXNzdWVyPU5VTEw7CiAJY3R4LT50cmVlID0gTlVMTDsKKwljdHgtPnBhcmVudCA9IE5VTEw7CiAKIAljdHgtPnBhcmFtID0gWDUwOV9WRVJJRllfUEFSQU1fbmV3KCk7CiAKQEAgLTE0MjgsNyArMjA4Miw3IEBACiAJaWYgKHN0b3JlICYmIHN0b3JlLT5nZXRfY3JsKQogCQljdHgtPmdldF9jcmwgPSBzdG9yZS0+Z2V0X2NybDsKIAllbHNlCi0JCWN0eC0+Z2V0X2NybCA9IGdldF9jcmw7CisJCWN0eC0+Z2V0X2NybCA9IE5VTEw7CiAKIAlpZiAoc3RvcmUgJiYgc3RvcmUtPmNoZWNrX2NybCkKIAkJY3R4LT5jaGVja19jcmwgPSBzdG9yZS0+Y2hlY2tfY3JsOwpAQCAtMTQ0MCw2ICsyMDk0LDE2IEBACiAJZWxzZQogCQljdHgtPmNlcnRfY3JsID0gY2VydF9jcmw7CiAKKwlpZiAoc3RvcmUgJiYgc3RvcmUtPmxvb2t1cF9jZXJ0cykKKwkJY3R4LT5sb29rdXBfY2VydHMgPSBzdG9yZS0+bG9va3VwX2NlcnRzOworCWVsc2UKKwkJY3R4LT5sb29rdXBfY2VydHMgPSBYNTA5X1NUT1JFX2dldDFfY2VydHM7CisKKwlpZiAoc3RvcmUgJiYgc3RvcmUtPmxvb2t1cF9jcmxzKQorCQljdHgtPmxvb2t1cF9jcmxzID0gc3RvcmUtPmxvb2t1cF9jcmxzOworCWVsc2UKKwkJY3R4LT5sb29rdXBfY3JscyA9IFg1MDlfU1RPUkVfZ2V0MV9jcmxzOworCiAJY3R4LT5jaGVja19wb2xpY3kgPSBjaGVja19wb2xpY3k7CiAKIApAQCAtMTQ3Miw3ICsyMTM2LDggQEAKIAlpZiAoY3R4LT5jbGVhbnVwKSBjdHgtPmNsZWFudXAoY3R4KTsKIAlpZiAoY3R4LT5wYXJhbSAhPSBOVUxMKQogCQl7Ci0JCVg1MDlfVkVSSUZZX1BBUkFNX2ZyZWUoY3R4LT5wYXJhbSk7CisJCWlmIChjdHgtPnBhcmVudCA9PSBOVUxMKQorCQkJWDUwOV9WRVJJRllfUEFSQU1fZnJlZShjdHgtPnBhcmFtKTsKIAkJY3R4LT5wYXJhbT1OVUxMOwogCQl9CiAJaWYgKGN0eC0+dHJlZSAhPSBOVUxMKQpkaWZmIC0tZ2l0IGEvY3J5cHRvL3g1MDkveDUwOV92ZnkuaCBiL2NyeXB0by94NTA5L3g1MDlfdmZ5LmgKaW5kZXggODZhZTM1Zi4uZmUwOWIzMCAxMDA2NDQKLS0tIGEvY3J5cHRvL3g1MDkveDUwOV92ZnkuaAorKysgYi9jcnlwdG8veDUwOS94NTA5X3ZmeS5oCkBAIC03Nyw2ICs3Nyw3IEBACiBleHRlcm4gIkMiIHsKICNlbmRpZgogCisjaWYgMAogLyogT3V0ZXIgb2JqZWN0ICovCiB0eXBlZGVmIHN0cnVjdCB4NTA5X2hhc2hfZGlyX3N0CiAJewpAQCAtODUsNiArODYsNyBAQAogCWludCAqZGlyc190eXBlOwogCWludCBudW1fZGlyc19hbGxvY2VkOwogCX0gWDUwOV9IQVNIX0RJUl9DVFg7CisjZW5kaWYKIAogdHlwZWRlZiBzdHJ1Y3QgeDUwOV9maWxlX3N0CiAJewpAQCAtMTk4LDYgKzIwMCw4IEBACiAJaW50ICgqZ2V0X2NybCkoWDUwOV9TVE9SRV9DVFggKmN0eCwgWDUwOV9DUkwgKipjcmwsIFg1MDkgKngpOyAvKiByZXRyaWV2ZSBDUkwgKi8KIAlpbnQgKCpjaGVja19jcmwpKFg1MDlfU1RPUkVfQ1RYICpjdHgsIFg1MDlfQ1JMICpjcmwpOyAvKiBDaGVjayBDUkwgdmFsaWRpdHkgKi8KIAlpbnQgKCpjZXJ0X2NybCkoWDUwOV9TVE9SRV9DVFggKmN0eCwgWDUwOV9DUkwgKmNybCwgWDUwOSAqeCk7IC8qIENoZWNrIGNlcnRpZmljYXRlIGFnYWluc3QgQ1JMICovCisJU1RBQ0tfT0YoWDUwOSkgKiAoKmxvb2t1cF9jZXJ0cykoWDUwOV9TVE9SRV9DVFggKmN0eCwgWDUwOV9OQU1FICpubSk7CisJU1RBQ0tfT0YoWDUwOV9DUkwpICogKCpsb29rdXBfY3JscykoWDUwOV9TVE9SRV9DVFggKmN0eCwgWDUwOV9OQU1FICpubSk7CiAJaW50ICgqY2xlYW51cCkoWDUwOV9TVE9SRV9DVFggKmN0eCk7CiAKIAlDUllQVE9fRVhfREFUQSBleF9kYXRhOwpAQCAtMjQ2LDYgKzI1MCw4IEBACiAJaW50ICgqY2hlY2tfY3JsKShYNTA5X1NUT1JFX0NUWCAqY3R4LCBYNTA5X0NSTCAqY3JsKTsgLyogQ2hlY2sgQ1JMIHZhbGlkaXR5ICovCiAJaW50ICgqY2VydF9jcmwpKFg1MDlfU1RPUkVfQ1RYICpjdHgsIFg1MDlfQ1JMICpjcmwsIFg1MDkgKngpOyAvKiBDaGVjayBjZXJ0aWZpY2F0ZSBhZ2FpbnN0IENSTCAqLwogCWludCAoKmNoZWNrX3BvbGljeSkoWDUwOV9TVE9SRV9DVFggKmN0eCk7CisJU1RBQ0tfT0YoWDUwOSkgKiAoKmxvb2t1cF9jZXJ0cykoWDUwOV9TVE9SRV9DVFggKmN0eCwgWDUwOV9OQU1FICpubSk7CisJU1RBQ0tfT0YoWDUwOV9DUkwpICogKCpsb29rdXBfY3JscykoWDUwOV9TVE9SRV9DVFggKmN0eCwgWDUwOV9OQU1FICpubSk7CiAJaW50ICgqY2xlYW51cCkoWDUwOV9TVE9SRV9DVFggKmN0eCk7CiAKIAkvKiBUaGUgZm9sbG93aW5nIGlzIGJ1aWx0IHVwICovCkBAIC0yNjMsNiArMjY5LDExIEBACiAJWDUwOSAqY3VycmVudF9pc3N1ZXI7CS8qIGNlcnQgY3VycmVudGx5IGJlaW5nIHRlc3RlZCBhcyB2YWxpZCBpc3N1ZXIgKi8KIAlYNTA5X0NSTCAqY3VycmVudF9jcmw7CS8qIGN1cnJlbnQgQ1JMICovCiAKKwlpbnQgY3VycmVudF9jcmxfc2NvcmU7ICAvKiBzY29yZSBvZiBjdXJyZW50IENSTCAqLworCXVuc2lnbmVkIGludCBjdXJyZW50X3JlYXNvbnM7ICAvKiBSZWFzb24gbWFzayAqLworCisJWDUwOV9TVE9SRV9DVFggKnBhcmVudDsgLyogRm9yIENSTCBwYXRoIHZhbGlkYXRpb246IHBhcmVudCBjb250ZXh0ICovCisKIAlDUllQVE9fRVhfREFUQSBleF9kYXRhOwogCX0gLyogWDUwOV9TVE9SRV9DVFggKi87CiAKQEAgLTMzMCw4ICszNDEsMTggQEAKICNkZWZpbmUJCVg1MDlfVl9FUlJfSU5WQUxJRF9FWFRFTlNJT04JCQk0MQogI2RlZmluZQkJWDUwOV9WX0VSUl9JTlZBTElEX1BPTElDWV9FWFRFTlNJT04JCTQyCiAjZGVmaW5lCQlYNTA5X1ZfRVJSX05PX0VYUExJQ0lUX1BPTElDWQkJCTQzCisjZGVmaW5lCQlYNTA5X1ZfRVJSX0RJRkZFUkVOVF9DUkxfU0NPUEUJCQk0NAorI2RlZmluZQkJWDUwOV9WX0VSUl9VTlNVUFBPUlRFRF9FWFRFTlNJT05fRkVBVFVSRQk0NQogCi0jZGVmaW5lCQlYNTA5X1ZfRVJSX1VOTkVTVEVEX1JFU09VUkNFCQkJNDQKKyNkZWZpbmUJCVg1MDlfVl9FUlJfVU5ORVNURURfUkVTT1VSQ0UJCQk0NgorCisjZGVmaW5lCQlYNTA5X1ZfRVJSX1BFUk1JVFRFRF9WSU9MQVRJT04JCQk0NworI2RlZmluZQkJWDUwOV9WX0VSUl9FWENMVURFRF9WSU9MQVRJT04JCQk0OAorI2RlZmluZQkJWDUwOV9WX0VSUl9TVUJUUkVFX01JTk1BWAkJCTQ5CisjZGVmaW5lCQlYNTA5X1ZfRVJSX1VOU1VQUE9SVEVEX0NPTlNUUkFJTlRfVFlQRQkJNTEKKyNkZWZpbmUJCVg1MDlfVl9FUlJfVU5TVVBQT1JURURfQ09OU1RSQUlOVF9TWU5UQVgJNTIKKyNkZWZpbmUJCVg1MDlfVl9FUlJfVU5TVVBQT1JURURfTkFNRV9TWU5UQVgJCTUzCisjZGVmaW5lCQlYNTA5X1ZfRVJSX0NSTF9QQVRIX1ZBTElEQVRJT05fRVJST1IJCTU0CiAKIC8qIFRoZSBhcHBsaWNhdGlvbiBpcyBub3QgaGFwcHkgKi8KICNkZWZpbmUJCVg1MDlfVl9FUlJfQVBQTElDQVRJT05fVkVSSUZJQ0FUSU9OCQk1MApAQCAtMzYyLDEwICszODMsMTQgQEAKICNkZWZpbmUgWDUwOV9WX0ZMQUdfSU5ISUJJVF9NQVAJCQkweDQwMAogLyogTm90aWZ5IGNhbGxiYWNrIHRoYXQgcG9saWN5IGlzIE9LICovCiAjZGVmaW5lIFg1MDlfVl9GTEFHX05PVElGWV9QT0xJQ1kJCTB4ODAwCi0KKy8qIEV4dGVuZGVkIENSTCBmZWF0dXJlcyBzdWNoIGFzIGluZGlyZWN0IENSTHMsIGFsdGVybmF0ZSBDUkwgc2lnbmluZyBrZXlzICovCisjZGVmaW5lIFg1MDlfVl9GTEFHX0VYVEVOREVEX0NSTF9TVVBQT1JUCTB4MTAwMAorLyogRGVsdGEgQ1JMIHN1cHBvcnQgKi8KKyNkZWZpbmUgWDUwOV9WX0ZMQUdfVVNFX0RFTFRBUwkJCTB4MjAwMAogLyogQ2hlY2sgc2VsZnNpZ25lZCBDQSBzaWduYXR1cmUgKi8KICNkZWZpbmUgWDUwOV9WX0ZMQUdfQ0hFQ0tfU1NfU0lHTkFUVVJFCQkweDQwMDAKIAorCiAjZGVmaW5lIFg1MDlfVlBfRkxBR19ERUZBVUxUCQkJMHgxCiAjZGVmaW5lIFg1MDlfVlBfRkxBR19PVkVSV1JJVEUJCQkweDIKICNkZWZpbmUgWDUwOV9WUF9GTEFHX1JFU0VUX0ZMQUdTCQkweDQKQEAgLTM4NywxMSArNDEyLDE2IEBACiBYNTA5X1NUT1JFICpYNTA5X1NUT1JFX25ldyh2b2lkICk7CiB2b2lkIFg1MDlfU1RPUkVfZnJlZShYNTA5X1NUT1JFICp2KTsKIAorU1RBQ0tfT0YoWDUwOSkqIFg1MDlfU1RPUkVfZ2V0MV9jZXJ0cyhYNTA5X1NUT1JFX0NUWCAqc3QsIFg1MDlfTkFNRSAqbm0pOworU1RBQ0tfT0YoWDUwOV9DUkwpKiBYNTA5X1NUT1JFX2dldDFfY3JscyhYNTA5X1NUT1JFX0NUWCAqc3QsIFg1MDlfTkFNRSAqbm0pOwogaW50IFg1MDlfU1RPUkVfc2V0X2ZsYWdzKFg1MDlfU1RPUkUgKmN0eCwgdW5zaWduZWQgbG9uZyBmbGFncyk7CiBpbnQgWDUwOV9TVE9SRV9zZXRfcHVycG9zZShYNTA5X1NUT1JFICpjdHgsIGludCBwdXJwb3NlKTsKIGludCBYNTA5X1NUT1JFX3NldF90cnVzdChYNTA5X1NUT1JFICpjdHgsIGludCB0cnVzdCk7CiBpbnQgWDUwOV9TVE9SRV9zZXQxX3BhcmFtKFg1MDlfU1RPUkUgKmN0eCwgWDUwOV9WRVJJRllfUEFSQU0gKnBtKTsKIAordm9pZCBYNTA5X1NUT1JFX3NldF92ZXJpZnlfY2IoWDUwOV9TVE9SRSAqY3R4LAorCQkJCSAgaW50ICgqdmVyaWZ5X2NiKShpbnQsIFg1MDlfU1RPUkVfQ1RYICopKTsKKwogWDUwOV9TVE9SRV9DVFggKlg1MDlfU1RPUkVfQ1RYX25ldyh2b2lkKTsKIAogaW50IFg1MDlfU1RPUkVfQ1RYX2dldDFfaXNzdWVyKFg1MDkgKippc3N1ZXIsIFg1MDlfU1RPUkVfQ1RYICpjdHgsIFg1MDkgKngpOwpAQCAtNDUwLDYgKzQ4MCw5IEBACiB2b2lkCVg1MDlfU1RPUkVfQ1RYX3NldF9lcnJvcihYNTA5X1NUT1JFX0NUWCAqY3R4LGludCBzKTsKIGludAlYNTA5X1NUT1JFX0NUWF9nZXRfZXJyb3JfZGVwdGgoWDUwOV9TVE9SRV9DVFggKmN0eCk7CiBYNTA5ICoJWDUwOV9TVE9SRV9DVFhfZ2V0X2N1cnJlbnRfY2VydChYNTA5X1NUT1JFX0NUWCAqY3R4KTsKK1g1MDkgKlg1MDlfU1RPUkVfQ1RYX2dldDBfY3VycmVudF9pc3N1ZXIoWDUwOV9TVE9SRV9DVFggKmN0eCk7CitYNTA5X0NSTCAqWDUwOV9TVE9SRV9DVFhfZ2V0MF9jdXJyZW50X2NybChYNTA5X1NUT1JFX0NUWCAqY3R4KTsKK1g1MDlfU1RPUkVfQ1RYICpYNTA5X1NUT1JFX0NUWF9nZXQwX3BhcmVudF9jdHgoWDUwOV9TVE9SRV9DVFggKmN0eCk7CiBTVEFDS19PRihYNTA5KSAqWDUwOV9TVE9SRV9DVFhfZ2V0X2NoYWluKFg1MDlfU1RPUkVfQ1RYICpjdHgpOwogU1RBQ0tfT0YoWDUwOSkgKlg1MDlfU1RPUkVfQ1RYX2dldDFfY2hhaW4oWDUwOV9TVE9SRV9DVFggKmN0eCk7CiB2b2lkCVg1MDlfU1RPUkVfQ1RYX3NldF9jZXJ0KFg1MDlfU1RPUkVfQ1RYICpjLFg1MDkgKngpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3g1MDkveDUwOV92cG0uYyBiL2NyeXB0by94NTA5L3g1MDlfdnBtLmMKaW5kZXggMDFjNTU0MS4uZGZkODlkOCAxMDA2NDQKLS0tIGEvY3J5cHRvL3g1MDkveDUwOV92cG0uYworKysgYi9jcnlwdG8veDUwOS94NTA5X3ZwbS5jCkBAIC03NCw2ICs3NCw3IEBACiAJcGFyYW0tPm5hbWUgPSBOVUxMOwogCXBhcmFtLT5wdXJwb3NlID0gMDsKIAlwYXJhbS0+dHJ1c3QgPSAwOworCS8qcGFyYW0tPmluaF9mbGFncyA9IFg1MDlfVlBfRkxBR19ERUZBVUxUOyovCiAJcGFyYW0tPmluaF9mbGFncyA9IDA7CiAJcGFyYW0tPmZsYWdzID0gMDsKIAlwYXJhbS0+ZGVwdGggPSAtMTsKQEAgLTMyOCw3ICszMjksNyBAQAogCU5VTEwJCS8qIHBvbGljaWVzICovCiAJfSwKIAl7Ci0JInBrY3M3IiwJCQkvKiBTL01JTUUgc2lnbmluZyBwYXJhbWV0ZXJzICovCisJInBrY3M3IiwJCQkvKiBTL01JTUUgc2lnbiBwYXJhbWV0ZXJzICovCiAJMCwJCQkJLyogQ2hlY2sgdGltZSAqLwogCTAsCQkJCS8qIGludGVybmFsIGZsYWdzICovCiAJMCwJCQkJLyogZmxhZ3MgKi8KQEAgLTMzOCw3ICszMzksNyBAQAogCU5VTEwJCQkJLyogcG9saWNpZXMgKi8KIAl9LAogCXsKLQkic21pbWVfc2lnbiIsCQkJLyogUy9NSU1FIHNpZ25pbmcgcGFyYW1ldGVycyAqLworCSJzbWltZV9zaWduIiwJCQkvKiBTL01JTUUgc2lnbiBwYXJhbWV0ZXJzICovCiAJMCwJCQkJLyogQ2hlY2sgdGltZSAqLwogCTAsCQkJCS8qIGludGVybmFsIGZsYWdzICovCiAJMCwJCQkJLyogZmxhZ3MgKi8KQEAgLTM3MCwxMiArMzcxLDE3IEBACiAKIHN0YXRpYyBTVEFDS19PRihYNTA5X1ZFUklGWV9QQVJBTSkgKnBhcmFtX3RhYmxlID0gTlVMTDsKIAotc3RhdGljIGludCB0YWJsZV9jbXAoY29uc3Qgdm9pZCAqcGEsIGNvbnN0IHZvaWQgKnBiKQorc3RhdGljIGludCB0YWJsZV9jbXAoY29uc3QgWDUwOV9WRVJJRllfUEFSQU0gKmEsIGNvbnN0IFg1MDlfVkVSSUZZX1BBUkFNICpiKQorCiAJewotCWNvbnN0IFg1MDlfVkVSSUZZX1BBUkFNICphID0gcGEsICpiID0gcGI7CiAJcmV0dXJuIHN0cmNtcChhLT5uYW1lLCBiLT5uYW1lKTsKIAl9CiAKK0RFQ0xBUkVfT0JKX0JTRUFSQ0hfQ01QX0ZOKFg1MDlfVkVSSUZZX1BBUkFNLCBYNTA5X1ZFUklGWV9QQVJBTSwKKwkJCSAgIHRhYmxlKTsKK0lNUExFTUVOVF9PQkpfQlNFQVJDSF9DTVBfRk4oWDUwOV9WRVJJRllfUEFSQU0sIFg1MDlfVkVSSUZZX1BBUkFNLAorCQkJICAgICB0YWJsZSk7CisKIHN0YXRpYyBpbnQgcGFyYW1fY21wKGNvbnN0IFg1MDlfVkVSSUZZX1BBUkFNICogY29uc3QgKmEsCiAJCQljb25zdCBYNTA5X1ZFUklGWV9QQVJBTSAqIGNvbnN0ICpiKQogCXsKQEAgLTQxMSw2ICs0MTcsNyBAQAogCXsKIAlpbnQgaWR4OwogCVg1MDlfVkVSSUZZX1BBUkFNIHBtOworCiAJcG0ubmFtZSA9IChjaGFyICopbmFtZTsKIAlpZiAocGFyYW1fdGFibGUpCiAJCXsKQEAgLTQxOCwxMSArNDI1LDggQEAKIAkJaWYgKGlkeCAhPSAtMSkKIAkJCXJldHVybiBza19YNTA5X1ZFUklGWV9QQVJBTV92YWx1ZShwYXJhbV90YWJsZSwgaWR4KTsKIAkJfQotCXJldHVybiAoY29uc3QgWDUwOV9WRVJJRllfUEFSQU0gKikgT0JKX2JzZWFyY2goKGNoYXIgKikmcG0sCi0JCQkJKGNoYXIgKikmZGVmYXVsdF90YWJsZSwKLQkJCQlzaXplb2YoZGVmYXVsdF90YWJsZSkvc2l6ZW9mKFg1MDlfVkVSSUZZX1BBUkFNKSwKLQkJCQlzaXplb2YoWDUwOV9WRVJJRllfUEFSQU0pLAotCQkJCXRhYmxlX2NtcCk7CisJcmV0dXJuIE9CSl9ic2VhcmNoX3RhYmxlKCZwbSwgZGVmYXVsdF90YWJsZSwKKwkJCSAgIHNpemVvZihkZWZhdWx0X3RhYmxlKS9zaXplb2YoWDUwOV9WRVJJRllfUEFSQU0pKTsKIAl9CiAKIHZvaWQgWDUwOV9WRVJJRllfUEFSQU1fdGFibGVfY2xlYW51cCh2b2lkKQpkaWZmIC0tZ2l0IGEvY3J5cHRvL3g1MDkveDUwOWNzZXQuYyBiL2NyeXB0by94NTA5L3g1MDljc2V0LmMKaW5kZXggN2Y0MDA0Yi4uMzEwOWRlZiAxMDA2NDQKLS0tIGEvY3J5cHRvL3g1MDkveDUwOWNzZXQuYworKysgYi9jcnlwdG8veDUwOS94NTA5Y3NldC5jCkBAIC04MSw3ICs4MSw3IEBACiAJfQogCiAKLWludCBYNTA5X0NSTF9zZXRfbGFzdFVwZGF0ZShYNTA5X0NSTCAqeCwgQVNOMV9USU1FICp0bSkKK2ludCBYNTA5X0NSTF9zZXRfbGFzdFVwZGF0ZShYNTA5X0NSTCAqeCwgY29uc3QgQVNOMV9USU1FICp0bSkKIAl7CiAJQVNOMV9USU1FICppbjsKIApAQCAtOTksNyArOTksNyBAQAogCXJldHVybihpbiAhPSBOVUxMKTsKIAl9CiAKLWludCBYNTA5X0NSTF9zZXRfbmV4dFVwZGF0ZShYNTA5X0NSTCAqeCwgQVNOMV9USU1FICp0bSkKK2ludCBYNTA5X0NSTF9zZXRfbmV4dFVwZGF0ZShYNTA5X0NSTCAqeCwgY29uc3QgQVNOMV9USU1FICp0bSkKIAl7CiAJQVNOMV9USU1FICppbjsKIApkaWZmIC0tZ2l0IGEvY3J5cHRvL3g1MDkveDUwOW5hbWUuYyBiL2NyeXB0by94NTA5L3g1MDluYW1lLmMKaW5kZXggMDY4YWJmZS4uMjdiYzRkYyAxMDA2NDQKLS0tIGEvY3J5cHRvL3g1MDkveDUwOW5hbWUuYworKysgYi9jcnlwdG8veDUwOS94NTA5bmFtZS5jCkBAIC0zNTYsNyArMzU2LDcgQEAKIAkJcmV0dXJuIEFTTjFfU1RSSU5HX3NldF9ieV9OSUQoJm5lLT52YWx1ZSwgYnl0ZXMsCiAJCQkJCQlsZW4sIHR5cGUsCiAJCQkJCU9CSl9vYmoybmlkKG5lLT5vYmplY3QpKSA/IDEgOiAwOwotCWlmIChsZW4gPCAwKSBsZW49c3RybGVuKChjaGFyICopYnl0ZXMpOworCWlmIChsZW4gPCAwKSBsZW49c3RybGVuKChjb25zdCBjaGFyICopYnl0ZXMpOwogCWk9QVNOMV9TVFJJTkdfc2V0KG5lLT52YWx1ZSxieXRlcyxsZW4pOwogCWlmICghaSkgcmV0dXJuKDApOwogCWlmICh0eXBlICE9IFZfQVNOMV9VTkRFRikKZGlmZiAtLWdpdCBhL2NyeXB0by94NTA5L3g1MDl0eXBlLmMgYi9jcnlwdG8veDUwOS94NTA5dHlwZS5jCmluZGV4IDJjZDk5NGMuLjMzODVhZDMgMTAwNjQ0Ci0tLSBhL2NyeXB0by94NTA5L3g1MDl0eXBlLmMKKysrIGIvY3J5cHRvL3g1MDkveDUwOXR5cGUuYwpAQCAtOTEsNiArOTEsMTAgQEAKIAkJYnJlYWs7CiAJY2FzZSBFVlBfUEtFWV9ESDoKIAkJcmV0PUVWUF9QS19ESHxFVlBfUEtUX0VYQ0g7CisJCWJyZWFrOwkKKwljYXNlIE5JRF9pZF9Hb3N0UjM0MTBfOTQ6CisJY2FzZSBOSURfaWRfR29zdFIzNDEwXzIwMDE6CisJCXJldD1FVlBfUEtUX0VYQ0h8RVZQX1BLVF9TSUdOOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKZGlmZiAtLWdpdCBhL2NyeXB0by94NTA5L3hfYWxsLmMgYi9jcnlwdG8veDUwOS94X2FsbC5jCmluZGV4IDkwMzljYWEuLmViYWUzMGIgMTAwNjQ0Ci0tLSBhL2NyeXB0by94NTA5L3hfYWxsLmMKKysrIGIvY3J5cHRvL3g1MDkveF9hbGwuYwpAQCAtNTcsNyArNTcsNiBAQAogICovCiAKICNpbmNsdWRlIDxzdGRpby5oPgotI3VuZGVmIFNTTEVBWV9NQUNST1MKICNpbmNsdWRlIDxvcGVuc3NsL3N0YWNrLmg+CiAjaW5jbHVkZSAiY3J5cHRsaWIuaCIKICNpbmNsdWRlIDxvcGVuc3NsL2J1ZmZlci5oPgpAQCAtODMsMTIgKzgyLDYgQEAKIAkJYS0+c2lnX2FsZyxhLT5zaWduYXR1cmUsYS0+cmVxX2luZm8scikpOwogCX0KIAotaW50IFg1MDlfQ1JMX3ZlcmlmeShYNTA5X0NSTCAqYSwgRVZQX1BLRVkgKnIpCi0JewotCXJldHVybihBU04xX2l0ZW1fdmVyaWZ5KEFTTjFfSVRFTV9ycHRyKFg1MDlfQ1JMX0lORk8pLAotCQlhLT5zaWdfYWxnLCBhLT5zaWduYXR1cmUsYS0+Y3JsLHIpKTsKLQl9Ci0KIGludCBORVRTQ0FQRV9TUEtJX3ZlcmlmeShORVRTQ0FQRV9TUEtJICphLCBFVlBfUEtFWSAqcikKIAl7CiAJcmV0dXJuKEFTTjFfaXRlbV92ZXJpZnkoQVNOMV9JVEVNX3JwdHIoTkVUU0NBUEVfU1BLQUMpLApkaWZmIC0tZ2l0IGEvY3J5cHRvL3g1MDl2My9NYWtlZmlsZSBiL2NyeXB0by94NTA5djMvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3MWRjNDIuLjAwMDAwMDAKLS0tIGEvY3J5cHRvL3g1MDl2My9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDYxMCArMCwwIEBACi0jCi0jIE9wZW5TU0wvY3J5cHRvL3g1MDl2My9NYWtlZmlsZQotIwotCi1ESVI9CXg1MDl2MwotVE9QPQkuLi8uLgotQ0M9CWNjCi1JTkNMVURFUz0gLUkuLiAtSSQoVE9QKSAtSS4uLy4uL2luY2x1ZGUKLUNGTEFHPS1nCi1NQUtFRklMRT0JTWFrZWZpbGUKLUFSPQkJYXIgcgotCi1DRkxBR1M9ICQoSU5DTFVERVMpICQoQ0ZMQUcpCi0KLUdFTkVSQUw9TWFrZWZpbGUgUkVBRE1FCi1URVNUPQotQVBQUz0KLQotTElCPSQoVE9QKS9saWJjcnlwdG8uYQotTElCU1JDPQl2M19iY29ucy5jIHYzX2JpdHN0LmMgdjNfY29uZi5jIHYzX2V4dGt1LmMgdjNfaWE1LmMgdjNfbGliLmMgXAotdjNfcHJuLmMgdjNfdXRsLmMgdjNlcnIuYyB2M19nZW5uLmMgdjNfYWx0LmMgdjNfc2tleS5jIHYzX2FrZXkuYyB2M19wa3UuYyBcCi12M19pbnQuYyB2M19lbnVtLmMgdjNfc3huZXQuYyB2M19jcG9scy5jIHYzX2NybGQuYyB2M19wdXJwLmMgdjNfaW5mby5jIFwKLXYzX29jc3AuYyB2M19ha2V5YS5jIHYzX3BtYXBzLmMgdjNfcGNvbnMuYyB2M19uY29ucy5jIHYzX3BjaWEuYyB2M19wY2kuYyBcCi1wY3lfY2FjaGUuYyBwY3lfbm9kZS5jIHBjeV9kYXRhLmMgcGN5X21hcC5jIHBjeV90cmVlLmMgcGN5X2xpYi5jIFwKLXYzX2FzaWQuYyB2M19hZGRyLmMKLUxJQk9CSj0gdjNfYmNvbnMubyB2M19iaXRzdC5vIHYzX2NvbmYubyB2M19leHRrdS5vIHYzX2lhNS5vIHYzX2xpYi5vIFwKLXYzX3Bybi5vIHYzX3V0bC5vIHYzZXJyLm8gdjNfZ2Vubi5vIHYzX2FsdC5vIHYzX3NrZXkubyB2M19ha2V5Lm8gdjNfcGt1Lm8gXAotdjNfaW50Lm8gdjNfZW51bS5vIHYzX3N4bmV0Lm8gdjNfY3BvbHMubyB2M19jcmxkLm8gdjNfcHVycC5vIHYzX2luZm8ubyBcCi12M19vY3NwLm8gdjNfYWtleWEubyB2M19wbWFwcy5vIHYzX3Bjb25zLm8gdjNfbmNvbnMubyB2M19wY2lhLm8gdjNfcGNpLm8gXAotcGN5X2NhY2hlLm8gcGN5X25vZGUubyBwY3lfZGF0YS5vIHBjeV9tYXAubyBwY3lfdHJlZS5vIHBjeV9saWIubyBcCi12M19hc2lkLm8gdjNfYWRkci5vCi0KLVNSQz0gJChMSUJTUkMpCi0KLUVYSEVBREVSPSB4NTA5djMuaAotSEVBREVSPQkkKEVYSEVBREVSKSBwY3lfaW50LmgKLQotQUxMPSAgICAkKEdFTkVSQUwpICQoU1JDKSAkKEhFQURFUikKLQotdG9wOgotCShjZCAuLi8uLjsgJChNQUtFKSBESVJTPWNyeXB0byBTRElSUz0kKERJUikgc3ViX2FsbCkKLQotYWxsOglsaWIKLQotbGliOgkkKExJQk9CSikKLQkkKEFSWCkgJChMSUIpICQoTElCT0JKKQotCSQoUkFOTElCKSAkKExJQikgfHwgZWNobyBOZXZlciBtaW5kLgotCUB0b3VjaCBsaWIKLQotZmlsZXM6Ci0JJChQRVJMKSAkKFRPUCkvdXRpbC9maWxlcy5wbCBNYWtlZmlsZSA+PiAkKFRPUCkvTUlORk8KLQotbGlua3M6Ci0JQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL2luY2x1ZGUvb3BlbnNzbCAkKEVYSEVBREVSKQotCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi90ZXN0ICQoVEVTVCkKLQlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vYXBwcyAkKEFQUFMpCi0KLWluc3RhbGw6Ci0JQFsgLW4gIiQoSU5TVEFMTFRPUCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHRvcCBNYWtlZmlsZS4uLgotCUBoZWFkZXJsaXN0PSIkKEVYSEVBREVSKSI7IGZvciBpIGluICQkaGVhZGVybGlzdCA7IFwKLQlkbyAgXAotCShjcCAkJGkgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGk7IFwKLQljaG1vZCA2NDQgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGkgKTsgXAotCWRvbmU7Ci0KLXRhZ3M6Ci0JY3RhZ3MgJChTUkMpCi0KLXRlc3RzOgotCi1saW50OgotCWxpbnQgLURMSU5UICQoSU5DTFVERVMpICQoU1JDKT5mbHVmZgotCi1kZXBlbmQ6Ci0JQFsgLW4gIiQoTUFLRURFUEVORCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHVwcGVyIE1ha2VmaWxlLi4uCi0JJChNQUtFREVQRU5EKSAtLSAkKENGTEFHKSAkKElOQ0xVREVTKSAkKERFUEZMQUcpIC0tICQoUFJPR1MpICQoTElCU1JDKQotCi1kY2xlYW46Ci0JJChQRVJMKSAtcGUgJ2lmICgvXiMgRE8gTk9UIERFTEVURSBUSElTIExJTkUvKSB7cHJpbnQ7IGV4aXQoMCk7fScgJChNQUtFRklMRSkgPk1ha2VmaWxlLm5ldwotCW12IC1mIE1ha2VmaWxlLm5ldyAkKE1BS0VGSUxFKQotCi1jbGVhbjoKLQlybSAtZiAqLm8gKi5vYmogbGliIHRhZ3MgY29yZSAucHVyZSAubmZzKiAqLm9sZCAqLmJhayBmbHVmZgotCi0jIERPIE5PVCBERUxFVEUgVEhJUyBMSU5FIC0tIG1ha2UgZGVwZW5kIGRlcGVuZHMgb24gaXQuCi0KLXBjeV9jYWNoZS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotcGN5X2NhY2hlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXBjeV9jYWNoZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotcGN5X2NhY2hlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1wY3lfY2FjaGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotcGN5X2NhY2hlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLXBjeV9jYWNoZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1wY3lfY2FjaGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi1wY3lfY2FjaGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXBjeV9jYWNoZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotcGN5X2NhY2hlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotcGN5X2NhY2hlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotcGN5X2NhY2hlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLXBjeV9jYWNoZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOXYzLmgKLXBjeV9jYWNoZS5vOiAuLi9jcnlwdGxpYi5oIHBjeV9jYWNoZS5jIHBjeV9pbnQuaAotcGN5X2RhdGEubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLXBjeV9kYXRhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXBjeV9kYXRhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1wY3lfZGF0YS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotcGN5X2RhdGEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotcGN5X2RhdGEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotcGN5X2RhdGEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotcGN5X2RhdGEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi1wY3lfZGF0YS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotcGN5X2RhdGEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXBjeV9kYXRhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotcGN5X2RhdGEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1wY3lfZGF0YS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi1wY3lfZGF0YS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOXYzLmgKLXBjeV9kYXRhLm86IC4uL2NyeXB0bGliLmggcGN5X2RhdGEuYyBwY3lfaW50LmgKLXBjeV9saWIubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLXBjeV9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotcGN5X2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotcGN5X2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotcGN5X2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi1wY3lfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLXBjeV9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotcGN5X2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLXBjeV9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLXBjeV9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLXBjeV9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotcGN5X2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotcGN5X2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oCi1wY3lfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5djMuaCAuLi9jcnlwdGxpYi5oIHBjeV9pbnQuaCBwY3lfbGliLmMKLXBjeV9tYXAubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLXBjeV9tYXAubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotcGN5X21hcC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotcGN5X21hcC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotcGN5X21hcC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi1wY3lfbWFwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLXBjeV9tYXAubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotcGN5X21hcC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLXBjeV9tYXAubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLXBjeV9tYXAubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLXBjeV9tYXAubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotcGN5X21hcC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotcGN5X21hcC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oCi1wY3lfbWFwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5djMuaCAuLi9jcnlwdGxpYi5oIHBjeV9pbnQuaCBwY3lfbWFwLmMKLXBjeV9ub2RlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1wY3lfbm9kZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NvbmYuaAotcGN5X25vZGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1wY3lfbm9kZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi1wY3lfbm9kZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLXBjeV9ub2RlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLXBjeV9ub2RlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotcGN5X25vZGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXBjeV9ub2RlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1wY3lfbm9kZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLXBjeV9ub2RlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotcGN5X25vZGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotcGN5X25vZGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDl2My5oCi1wY3lfbm9kZS5vOiBwY3lfaW50LmggcGN5X25vZGUuYwotcGN5X3RyZWUubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLXBjeV90cmVlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXBjeV90cmVlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1wY3lfdHJlZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotcGN5X3RyZWUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotcGN5X3RyZWUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotcGN5X3RyZWUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotcGN5X3RyZWUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi1wY3lfdHJlZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotcGN5X3RyZWUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXBjeV90cmVlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotcGN5X3RyZWUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1wY3lfdHJlZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi1wY3lfdHJlZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOXYzLmgKLXBjeV90cmVlLm86IC4uL2NyeXB0bGliLmggcGN5X2ludC5oIHBjeV90cmVlLmMKLXYzX2FkZHIubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLXYzX2FkZHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjF0LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi12M19hZGRyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY29uZi5oCi12M19hZGRyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotdjNfYWRkci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi12M19hZGRyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotdjNfYWRkci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotdjNfYWRkci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi12M19hZGRyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXYzX2FkZHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXYzX2FkZHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi12M19hZGRyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotdjNfYWRkci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi12M19hZGRyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5djMuaAotdjNfYWRkci5vOiAuLi9jcnlwdGxpYi5oIHYzX2FkZHIuYwotdjNfYWtleS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotdjNfYWtleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMXQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXYzX2FrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jb25mLmgKLXYzX2FrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi12M19ha2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKLXYzX2FrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi12M19ha2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi12M19ha2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLXYzX2FrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotdjNfYWtleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotdjNfYWtleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLXYzX2FrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi12M19ha2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLXYzX2FrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDl2My5oCi12M19ha2V5Lm86IC4uL2NyeXB0bGliLmggdjNfYWtleS5jCi12M19ha2V5YS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotdjNfYWtleWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjF0LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi12M19ha2V5YS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NvbmYuaAotdjNfYWtleWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi12M19ha2V5YS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi12M19ha2V5YS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLXYzX2FrZXlhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi12M19ha2V5YS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi12M19ha2V5YS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi12M19ha2V5YS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotdjNfYWtleWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi12M19ha2V5YS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLXYzX2FrZXlhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLXYzX2FrZXlhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5djMuaAotdjNfYWtleWEubzogLi4vY3J5cHRsaWIuaCB2M19ha2V5YS5jCi12M19hbHQubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi12M19hbHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jb25mLmgKLXYzX2FsdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLXYzX2FsdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi12M19hbHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi12M19hbHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLXYzX2FsdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi12M19hbHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotdjNfYWx0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi12M19hbHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi12M19hbHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi12M19hbHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotdjNfYWx0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5djMuaAotdjNfYWx0Lm86IC4uL2NyeXB0bGliLmggdjNfYWx0LmMKLXYzX2FzaWQubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLXYzX2FzaWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjF0LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi12M19hc2lkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotdjNfYXNpZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotdjNfYXNpZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotdjNfYXNpZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi12M19hc2lkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLXYzX2FzaWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotdjNfYXNpZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLXYzX2FzaWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLXYzX2FzaWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLXYzX2FzaWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotdjNfYXNpZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotdjNfYXNpZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oCi12M19hc2lkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5djMuaCAuLi9jcnlwdGxpYi5oIHYzX2FzaWQuYwotdjNfYmNvbnMubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLXYzX2Jjb25zLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xdC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotdjNfYmNvbnMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jb25mLmgKLXYzX2Jjb25zLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotdjNfYmNvbnMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotdjNfYmNvbnMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi12M19iY29ucy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotdjNfYmNvbnMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotdjNfYmNvbnMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotdjNfYmNvbnMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXYzX2Jjb25zLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotdjNfYmNvbnMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi12M19iY29ucy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi12M19iY29ucy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOXYzLmgKLXYzX2Jjb25zLm86IC4uL2NyeXB0bGliLmggdjNfYmNvbnMuYwotdjNfYml0c3QubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLXYzX2JpdHN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXYzX2JpdHN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi12M19iaXRzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotdjNfYml0c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotdjNfYml0c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotdjNfYml0c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotdjNfYml0c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi12M19iaXRzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotdjNfYml0c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXYzX2JpdHN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotdjNfYml0c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi12M19iaXRzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi12M19iaXRzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOXYzLmgKLXYzX2JpdHN0Lm86IC4uL2NyeXB0bGliLmggdjNfYml0c3QuYwotdjNfY29uZi5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotdjNfY29uZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi12M19jb25mLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi12M19jb25mLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi12M19jb25mLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLXYzX2NvbmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotdjNfY29uZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi12M19jb25mLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotdjNfY29uZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotdjNfY29uZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAotdjNfY29uZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCi12M19jb25mLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi12M19jb25mLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmgKLXYzX2NvbmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDl2My5oIC4uL2NyeXB0bGliLmggdjNfY29uZi5jCi12M19jcG9scy5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotdjNfY3BvbHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjF0LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi12M19jcG9scy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NvbmYuaAotdjNfY3BvbHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi12M19jcG9scy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi12M19jcG9scy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLXYzX2Nwb2xzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi12M19jcG9scy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi12M19jcG9scy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi12M19jcG9scy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotdjNfY3BvbHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi12M19jcG9scy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLXYzX2Nwb2xzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLXYzX2Nwb2xzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5djMuaAotdjNfY3BvbHMubzogLi4vY3J5cHRsaWIuaCBwY3lfaW50LmggdjNfY3BvbHMuYwotdjNfY3JsZC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotdjNfY3JsZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMXQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXYzX2NybGQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jb25mLmgKLXYzX2NybGQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi12M19jcmxkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKLXYzX2NybGQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi12M19jcmxkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi12M19jcmxkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLXYzX2NybGQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotdjNfY3JsZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotdjNfY3JsZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLXYzX2NybGQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi12M19jcmxkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLXYzX2NybGQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDl2My5oCi12M19jcmxkLm86IC4uL2NyeXB0bGliLmggdjNfY3JsZC5jCi12M19lbnVtLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi12M19lbnVtLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXYzX2VudW0ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLXYzX2VudW0ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLXYzX2VudW0ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotdjNfZW51bS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi12M19lbnVtLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLXYzX2VudW0ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi12M19lbnVtLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi12M19lbnVtLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi12M19lbnVtLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLXYzX2VudW0ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLXYzX2VudW0ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAotdjNfZW51bS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOXYzLmggLi4vY3J5cHRsaWIuaCB2M19lbnVtLmMKLXYzX2V4dGt1Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi12M19leHRrdS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMXQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXYzX2V4dGt1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY29uZi5oCi12M19leHRrdS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLXYzX2V4dGt1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKLXYzX2V4dGt1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotdjNfZXh0a3UubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLXYzX2V4dGt1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLXYzX2V4dGt1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXYzX2V4dGt1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi12M19leHRrdS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLXYzX2V4dGt1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotdjNfZXh0a3UubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotdjNfZXh0a3UubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDl2My5oCi12M19leHRrdS5vOiAuLi9jcnlwdGxpYi5oIHYzX2V4dGt1LmMKLXYzX2dlbm4ubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLXYzX2dlbm4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjF0LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi12M19nZW5uLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY29uZi5oCi12M19nZW5uLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotdjNfZ2Vubi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi12M19nZW5uLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotdjNfZ2Vubi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotdjNfZ2Vubi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi12M19nZW5uLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXYzX2dlbm4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXYzX2dlbm4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi12M19nZW5uLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotdjNfZ2Vubi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi12M19nZW5uLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5djMuaAotdjNfZ2Vubi5vOiAuLi9jcnlwdGxpYi5oIHYzX2dlbm4uYwotdjNfaWE1Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotdjNfaWE1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY29uZi5oCi12M19pYTUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi12M19pYTUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotdjNfaWE1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotdjNfaWE1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi12M19pYTUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotdjNfaWE1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXYzX2lhNS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotdjNfaWE1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotdjNfaWE1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotdjNfaWE1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLXYzX2lhNS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOXYzLmgKLXYzX2lhNS5vOiAuLi9jcnlwdGxpYi5oIHYzX2lhNS5jCi12M19pbmZvLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi12M19pbmZvLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xdC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotdjNfaW5mby5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NvbmYuaAotdjNfaW5mby5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLXYzX2luZm8ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotdjNfaW5mby5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLXYzX2luZm8ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLXYzX2luZm8ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotdjNfaW5mby5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi12M19pbmZvLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi12M19pbmZvLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotdjNfaW5mby5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLXYzX2luZm8ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotdjNfaW5mby5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOXYzLmgKLXYzX2luZm8ubzogLi4vY3J5cHRsaWIuaCB2M19pbmZvLmMKLXYzX2ludC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXYzX2ludC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NvbmYuaAotdjNfaW50Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotdjNfaW50Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKLXYzX2ludC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLXYzX2ludC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotdjNfaW50Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLXYzX2ludC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi12M19pbnQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXYzX2ludC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLXYzX2ludC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLXYzX2ludC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi12M19pbnQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDl2My5oCi12M19pbnQubzogLi4vY3J5cHRsaWIuaCB2M19pbnQuYwotdjNfbGliLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotdjNfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY29uZi5oCi12M19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi12M19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotdjNfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotdjNfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi12M19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotdjNfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXYzX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotdjNfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotdjNfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotdjNfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLXYzX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOXYzLmgKLXYzX2xpYi5vOiAuLi9jcnlwdGxpYi5oIGV4dF9kYXQuaCB2M19saWIuYwotdjNfbmNvbnMubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLXYzX25jb25zLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xdC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotdjNfbmNvbnMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jb25mLmgKLXYzX25jb25zLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotdjNfbmNvbnMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotdjNfbmNvbnMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi12M19uY29ucy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotdjNfbmNvbnMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotdjNfbmNvbnMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotdjNfbmNvbnMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXYzX25jb25zLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotdjNfbmNvbnMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi12M19uY29ucy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi12M19uY29ucy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOXYzLmgKLXYzX25jb25zLm86IC4uL2NyeXB0bGliLmggdjNfbmNvbnMuYwotdjNfb2NzcC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotdjNfb2NzcC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi12M19vY3NwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi12M19vY3NwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi12M19vY3NwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLXYzX29jc3AubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotdjNfb2NzcC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi12M19vY3NwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotdjNfb2NzcC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2NzcC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi12M19vY3NwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi12M19vY3NwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotdjNfb2NzcC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLXYzX29jc3AubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotdjNfb2NzcC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOXYzLmgKLXYzX29jc3AubzogLi4vY3J5cHRsaWIuaCB2M19vY3NwLmMKLXYzX3BjaS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXYzX3BjaS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NvbmYuaAotdjNfcGNpLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotdjNfcGNpLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKLXYzX3BjaS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLXYzX3BjaS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotdjNfcGNpLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLXYzX3BjaS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi12M19wY2kubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXYzX3BjaS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLXYzX3BjaS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLXYzX3BjaS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi12M19wY2kubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDl2My5oCi12M19wY2kubzogLi4vY3J5cHRsaWIuaCB2M19wY2kuYwotdjNfcGNpYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xdC5oCi12M19wY2lhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXYzX3BjaWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLXYzX3BjaWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLXYzX3BjaWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotdjNfcGNpYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotdjNfcGNpYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi12M19wY2lhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXYzX3BjaWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXYzX3BjaWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi12M19wY2lhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotdjNfcGNpYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi12M19wY2lhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5djMuaAotdjNfcGNpYS5vOiB2M19wY2lhLmMKLXYzX3Bjb25zLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi12M19wY29ucy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMXQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXYzX3Bjb25zLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY29uZi5oCi12M19wY29ucy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLXYzX3Bjb25zLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKLXYzX3Bjb25zLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotdjNfcGNvbnMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLXYzX3Bjb25zLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLXYzX3Bjb25zLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXYzX3Bjb25zLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi12M19wY29ucy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLXYzX3Bjb25zLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotdjNfcGNvbnMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotdjNfcGNvbnMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDl2My5oCi12M19wY29ucy5vOiAuLi9jcnlwdGxpYi5oIHYzX3Bjb25zLmMKLXYzX3BrdS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotdjNfcGt1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xdC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotdjNfcGt1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY29uZi5oCi12M19wa3UubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi12M19wa3UubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotdjNfcGt1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotdjNfcGt1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi12M19wa3UubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotdjNfcGt1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXYzX3BrdS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotdjNfcGt1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotdjNfcGt1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotdjNfcGt1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLXYzX3BrdS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOXYzLmgKLXYzX3BrdS5vOiAuLi9jcnlwdGxpYi5oIHYzX3BrdS5jCi12M19wbWFwcy5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotdjNfcG1hcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjF0LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi12M19wbWFwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NvbmYuaAotdjNfcG1hcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi12M19wbWFwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi12M19wbWFwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLXYzX3BtYXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi12M19wbWFwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi12M19wbWFwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi12M19wbWFwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotdjNfcG1hcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi12M19wbWFwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLXYzX3BtYXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLXYzX3BtYXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5djMuaAotdjNfcG1hcHMubzogLi4vY3J5cHRsaWIuaCB2M19wbWFwcy5jCi12M19wcm4ubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi12M19wcm4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jb25mLmgKLXYzX3Bybi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLXYzX3Bybi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi12M19wcm4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi12M19wcm4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLXYzX3Bybi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi12M19wcm4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotdjNfcHJuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi12M19wcm4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi12M19wcm4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi12M19wcm4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotdjNfcHJuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5djMuaAotdjNfcHJuLm86IC4uL2NyeXB0bGliLmggdjNfcHJuLmMKLXYzX3B1cnAubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLXYzX3B1cnAubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotdjNfcHVycC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotdjNfcHVycC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotdjNfcHVycC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi12M19wdXJwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLXYzX3B1cnAubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotdjNfcHVycC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLXYzX3B1cnAubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLXYzX3B1cnAubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLXYzX3B1cnAubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotdjNfcHVycC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotdjNfcHVycC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oCi12M19wdXJwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5djMuaCAuLi9jcnlwdGxpYi5oIHYzX3B1cnAuYwotdjNfc2tleS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotdjNfc2tleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi12M19za2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi12M19za2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi12M19za2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLXYzX3NrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotdjNfc2tleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi12M19za2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotdjNfc2tleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotdjNfc2tleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAotdjNfc2tleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCi12M19za2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi12M19za2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmgKLXYzX3NrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDl2My5oIC4uL2NyeXB0bGliLmggdjNfc2tleS5jCi12M19zeG5ldC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotdjNfc3huZXQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjF0LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi12M19zeG5ldC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NvbmYuaAotdjNfc3huZXQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi12M19zeG5ldC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi12M19zeG5ldC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLXYzX3N4bmV0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi12M19zeG5ldC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi12M19zeG5ldC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi12M19zeG5ldC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotdjNfc3huZXQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi12M19zeG5ldC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLXYzX3N4bmV0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLXYzX3N4bmV0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5djMuaAotdjNfc3huZXQubzogLi4vY3J5cHRsaWIuaCB2M19zeG5ldC5jCi12M191dGwubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi12M191dGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi12M191dGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLXYzX3V0bC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotdjNfdXRsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLXYzX3V0bC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi12M191dGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotdjNfdXRsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotdjNfdXRsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi12M191dGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLXYzX3V0bC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCi12M191dGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLXYzX3V0bC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oCi12M191dGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDl2My5oIC4uL2NyeXB0bGliLmggdjNfdXRsLmMKLXYzZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi12M2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NvbmYuaAotdjNlcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi12M2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi12M2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLXYzZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi12M2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi12M2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi12M2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotdjNlcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi12M2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLXYzZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLXYzZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5djMuaAotdjNlcnIubzogdjNlcnIuYwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3g1MDl2My9leHRfZGF0LmggYi9jcnlwdG8veDUwOXYzL2V4dF9kYXQuaAppbmRleCAzZWFlYzQ2Li43NmRhZWU2IDEwMDY0NAotLS0gYS9jcnlwdG8veDUwOXYzL2V4dF9kYXQuaAorKysgYi9jcnlwdG8veDUwOXYzL2V4dF9kYXQuaApAQCAtNjEsMjEgKzYxLDE5IEBACiBleHRlcm4gWDUwOVYzX0VYVF9NRVRIT0QgdjNfcGtleV91c2FnZV9wZXJpb2QsIHYzX3N4bmV0LCB2M19pbmZvLCB2M19zaW5mbzsKIGV4dGVybiBYNTA5VjNfRVhUX01FVEhPRCB2M19uc19pYTVfbGlzdFtdLCB2M19hbHRbXSwgdjNfc2tleV9pZCwgdjNfYWtleV9pZDsKIGV4dGVybiBYNTA5VjNfRVhUX01FVEhPRCB2M19jcmxfbnVtLCB2M19jcmxfcmVhc29uLCB2M19jcmxfaW52ZGF0ZTsKLWV4dGVybiBYNTA5VjNfRVhUX01FVEhPRCB2M19kZWx0YV9jcmwsIHYzX2Nwb2xzLCB2M19jcmxkOworZXh0ZXJuIFg1MDlWM19FWFRfTUVUSE9EIHYzX2RlbHRhX2NybCwgdjNfY3BvbHMsIHYzX2NybGQsIHYzX2ZyZXNoZXN0X2NybDsKIGV4dGVybiBYNTA5VjNfRVhUX01FVEhPRCB2M19vY3NwX25vbmNlLCB2M19vY3NwX2FjY3Jlc3AsIHYzX29jc3BfYWN1dG9mZjsKIGV4dGVybiBYNTA5VjNfRVhUX01FVEhPRCB2M19vY3NwX2NybGlkLCB2M19vY3NwX25vY2hlY2ssIHYzX29jc3Bfc2VydmljZWxvYzsKIGV4dGVybiBYNTA5VjNfRVhUX01FVEhPRCB2M19jcmxfaG9sZCwgdjNfcGNpOwogZXh0ZXJuIFg1MDlWM19FWFRfTUVUSE9EIHYzX3BvbGljeV9tYXBwaW5ncywgdjNfcG9saWN5X2NvbnN0cmFpbnRzOwotZXh0ZXJuIFg1MDlWM19FWFRfTUVUSE9EIHYzX25hbWVfY29uc3RyYWludHMsIHYzX2luaGliaXRfYW55cDsKLSNpZm5kZWYgT1BFTlNTTF9OT19SRkMzNzc5CitleHRlcm4gWDUwOVYzX0VYVF9NRVRIT0QgdjNfbmFtZV9jb25zdHJhaW50cywgdjNfaW5oaWJpdF9hbnlwLCB2M19pZHA7CiBleHRlcm4gWDUwOVYzX0VYVF9NRVRIT0QgdjNfYWRkciwgdjNfYXNpZDsKLSNlbmRpZgogCiAvKiBUaGlzIHRhYmxlIHdpbGwgYmUgc2VhcmNoZWQgdXNpbmcgT0JKX2JzZWFyY2ggc28gaXQgKm11c3QqIGtlcHQgaW4KICAqIG9yZGVyIG9mIHRoZSBleHRfbmlkIHZhbHVlcy4KICAqLwogCi1zdGF0aWMgWDUwOVYzX0VYVF9NRVRIT0QgKnN0YW5kYXJkX2V4dHNbXSA9IHsKK3N0YXRpYyBjb25zdCBYNTA5VjNfRVhUX01FVEhPRCAqc3RhbmRhcmRfZXh0c1tdID0gewogJnYzX25zY2VydCwKICZ2M19uc19pYTVfbGlzdFswXSwKICZ2M19uc19pYTVfbGlzdFsxXSwKQEAgLTEyMiw3ICsxMjAsMTAgQEAKICZ2M19wY2ksCiAmdjNfbmFtZV9jb25zdHJhaW50cywKICZ2M19wb2xpY3lfbWFwcGluZ3MsCi0mdjNfaW5oaWJpdF9hbnlwCismdjNfaW5oaWJpdF9hbnlwLAorJnYzX2lkcCwKKyZ2M19hbHRbMl0sCismdjNfZnJlc2hlc3RfY3JsLAogfTsKIAogLyogTnVtYmVyIG9mIHN0YW5kYXJkIGV4dGVuc2lvbnMgKi8KZGlmZiAtLWdpdCBhL2NyeXB0by94NTA5djMvcGN5X2NhY2hlLmMgYi9jcnlwdG8veDUwOXYzL3BjeV9jYWNoZS5jCmluZGV4IDEwMzA5MzEuLjE3MmI3ZTcgMTAwNjQ0Ci0tLSBhL2NyeXB0by94NTA5djMvcGN5X2NhY2hlLmMKKysrIGIvY3J5cHRvL3g1MDl2My9wY3lfY2FjaGUuYwpAQCAtMTM5LDcgKzEzOSw2IEBACiAJCXJldHVybiAwOwogCWNhY2hlLT5hbnlQb2xpY3kgPSBOVUxMOwogCWNhY2hlLT5kYXRhID0gTlVMTDsKLQljYWNoZS0+bWFwcyA9IE5VTEw7CiAJY2FjaGUtPmFueV9za2lwID0gLTE7CiAJY2FjaGUtPmV4cGxpY2l0X3NraXAgPSAtMTsKIAljYWNoZS0+bWFwX3NraXAgPSAtMTsKZGlmZiAtLWdpdCBhL2NyeXB0by94NTA5djMvcGN5X2RhdGEuYyBiL2NyeXB0by94NTA5djMvcGN5X2RhdGEuYwppbmRleCBmYjM5MmI5Li4zNDQ0YjAzIDEwMDY0NAotLS0gYS9jcnlwdG8veDUwOXYzL3BjeV9kYXRhLmMKKysrIGIvY3J5cHRvL3g1MDl2My9wY3lfZGF0YS5jCkBAIC04MiwxNyArODIsMjEgQEAKICAqIGFub3RoZXIgc291cmNlLgogICovCiAKLVg1MDlfUE9MSUNZX0RBVEEgKnBvbGljeV9kYXRhX25ldyhQT0xJQ1lJTkZPICpwb2xpY3ksIEFTTjFfT0JKRUNUICppZCwgaW50IGNyaXQpCitYNTA5X1BPTElDWV9EQVRBICpwb2xpY3lfZGF0YV9uZXcoUE9MSUNZSU5GTyAqcG9saWN5LAorCQkJCQljb25zdCBBU04xX09CSkVDVCAqY2lkLCBpbnQgY3JpdCkKIAl7CiAJWDUwOV9QT0xJQ1lfREFUQSAqcmV0OwotCWlmICghcG9saWN5ICYmICFpZCkKKwlBU04xX09CSkVDVCAqaWQ7CisJaWYgKCFwb2xpY3kgJiYgIWNpZCkKIAkJcmV0dXJuIE5VTEw7Ci0JaWYgKGlkKQorCWlmIChjaWQpCiAJCXsKLQkJaWQgPSBPQkpfZHVwKGlkKTsKKwkJaWQgPSBPQkpfZHVwKGNpZCk7CiAJCWlmICghaWQpCiAJCQlyZXR1cm4gTlVMTDsKIAkJfQorCWVsc2UKKwkJaWQgPSBOVUxMOwogCXJldCA9IE9QRU5TU0xfbWFsbG9jKHNpemVvZihYNTA5X1BPTElDWV9EQVRBKSk7CiAJaWYgKCFyZXQpCiAJCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3g1MDl2My9wY3lfaW50LmggYi9jcnlwdG8veDUwOXYzL3BjeV9pbnQuaAppbmRleCAzNzgwZGU0Li5jY2ZmOTI4IDEwMDY0NAotLS0gYS9jcnlwdG8veDUwOXYzL3BjeV9pbnQuaAorKysgYi9jcnlwdG8veDUwOXYzL3BjeV9pbnQuaApAQCAtNTYsMTIgKzU2LDEwIEBACiAgKgogICovCiAKLURFQ0xBUkVfU1RBQ0tfT0YoWDUwOV9QT0xJQ1lfREFUQSkKLURFQ0xBUkVfU1RBQ0tfT0YoWDUwOV9QT0xJQ1lfUkVGKQotREVDTEFSRV9TVEFDS19PRihYNTA5X1BPTElDWV9OT0RFKQogCiB0eXBlZGVmIHN0cnVjdCBYNTA5X1BPTElDWV9EQVRBX3N0IFg1MDlfUE9MSUNZX0RBVEE7Ci10eXBlZGVmIHN0cnVjdCBYNTA5X1BPTElDWV9SRUZfc3QgWDUwOV9QT0xJQ1lfUkVGOworCitERUNMQVJFX1NUQUNLX09GKFg1MDlfUE9MSUNZX0RBVEEpCiAKIC8qIEludGVybmFsIHN0cnVjdHVyZXMgKi8KIApAQCAtMTEwLDE2ICsxMDgsNiBAQAogCiAjZGVmaW5lIFBPTElDWV9EQVRBX0ZMQUdfQ1JJVElDQUwJCTB4MTAKIAotLyogVGhpcyBzdHJ1Y3R1cmUgaXMgYW4gZW50cnkgZnJvbSBhIHRhYmxlIG9mIG1hcHBlZCBwb2xpY2llcyB3aGljaAotICogY3Jvc3MgcmVmZXJlbmNlIHRoZSBwb2xpY3kgaXQgcmVmZXJzIHRvLgotICovCi0KLXN0cnVjdCBYNTA5X1BPTElDWV9SRUZfc3QKLQl7Ci0JQVNOMV9PQkpFQ1QgKnN1YmplY3REb21haW5Qb2xpY3k7Ci0JY29uc3QgWDUwOV9QT0xJQ1lfREFUQSAqZGF0YTsKLQl9OwotCiAvKiBUaGlzIHN0cnVjdHVyZSBpcyBjYWNoZWQgd2l0aCBhIGNlcnRpZmljYXRlICovCiAKIHN0cnVjdCBYNTA5X1BPTElDWV9DQUNIRV9zdCB7CkBAIC0xMjcsOCArMTE1LDYgQEAKIAlYNTA5X1BPTElDWV9EQVRBICphbnlQb2xpY3k7CiAJLyogb3RoZXIgcG9saWN5IGRhdGEgKi8KIAlTVEFDS19PRihYNTA5X1BPTElDWV9EQVRBKSAqZGF0YTsKLQkvKiBJZiBwb2xpY3lNYXBwaW5ncyBleHRlbnNpb24gcHJlc2VudCBhIHRhYmxlIG9mIG1hcHBlZCBwb2xpY2llcyAqLwotCVNUQUNLX09GKFg1MDlfUE9MSUNZX1JFRikgKm1hcHM7CiAJLyogSWYgSW5oaWJpdEFueVBvbGljeSBwcmVzZW50IHRoaXMgaXMgaXRzIHZhbHVlIG9yIC0xIGlmIGFic2VudC4gKi8KIAlsb25nIGFueV9za2lwOwogCS8qIElmIHBvbGljeUNvbnN0cmFpbnRzIGFuZCByZXF1aXJlRXhwbGljaXRQb2xpY3kgcHJlc2VudCB0aGlzIGlzIGl0cwpAQCAtMTkzLDcgKzE3OSw3IEBACiAKIC8qIEludGVybmFsIGZ1bmN0aW9ucyAqLwogCi1YNTA5X1BPTElDWV9EQVRBICpwb2xpY3lfZGF0YV9uZXcoUE9MSUNZSU5GTyAqcG9saWN5LCBBU04xX09CSkVDVCAqaWQsCitYNTA5X1BPTElDWV9EQVRBICpwb2xpY3lfZGF0YV9uZXcoUE9MSUNZSU5GTyAqcG9saWN5LCBjb25zdCBBU04xX09CSkVDVCAqaWQsCiAJCQkJCQkJCWludCBjcml0KTsKIHZvaWQgcG9saWN5X2RhdGFfZnJlZShYNTA5X1BPTElDWV9EQVRBICpkYXRhKTsKIApAQCAtMjA5LDE1ICsxOTUsMTggQEAKIHZvaWQgcG9saWN5X2NhY2hlX2ZyZWUoWDUwOV9QT0xJQ1lfQ0FDSEUgKmNhY2hlKTsKIAogWDUwOV9QT0xJQ1lfTk9ERSAqbGV2ZWxfZmluZF9ub2RlKGNvbnN0IFg1MDlfUE9MSUNZX0xFVkVMICpsZXZlbCwKKwkJCQkJY29uc3QgWDUwOV9QT0xJQ1lfTk9ERSAqcGFyZW50LAkKIAkJCQkJY29uc3QgQVNOMV9PQkpFQ1QgKmlkKTsKIAogWDUwOV9QT0xJQ1lfTk9ERSAqdHJlZV9maW5kX3NrKFNUQUNLX09GKFg1MDlfUE9MSUNZX05PREUpICpzaywKIAkJCQkJCWNvbnN0IEFTTjFfT0JKRUNUICppZCk7CiAKIFg1MDlfUE9MSUNZX05PREUgKmxldmVsX2FkZF9ub2RlKFg1MDlfUE9MSUNZX0xFVkVMICpsZXZlbCwKLQkJCVg1MDlfUE9MSUNZX0RBVEEgKmRhdGEsCisJCQljb25zdCBYNTA5X1BPTElDWV9EQVRBICpkYXRhLAogCQkJWDUwOV9QT0xJQ1lfTk9ERSAqcGFyZW50LAogCQkJWDUwOV9QT0xJQ1lfVFJFRSAqdHJlZSk7CiB2b2lkIHBvbGljeV9ub2RlX2ZyZWUoWDUwOV9QT0xJQ1lfTk9ERSAqbm9kZSk7CitpbnQgcG9saWN5X25vZGVfbWF0Y2goY29uc3QgWDUwOV9QT0xJQ1lfTEVWRUwgKmx2bCwKKwkJICAgICAgY29uc3QgWDUwOV9QT0xJQ1lfTk9ERSAqbm9kZSwgY29uc3QgQVNOMV9PQkpFQ1QgKm9pZCk7CiAKIGNvbnN0IFg1MDlfUE9MSUNZX0NBQ0hFICpwb2xpY3lfY2FjaGVfc2V0KFg1MDkgKngpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3g1MDl2My9wY3lfbWFwLmMgYi9jcnlwdG8veDUwOXYzL3BjeV9tYXAuYwppbmRleCBmMjg3OTZlLi4yMTE2M2I1IDEwMDY0NAotLS0gYS9jcnlwdG8veDUwOXYzL3BjeV9tYXAuYworKysgYi9jcnlwdG8veDUwOXYzL3BjeV9tYXAuYwpAQCAtNjIsMzEgKzYyLDYgQEAKIAogI2luY2x1ZGUgInBjeV9pbnQuaCIKIAotc3RhdGljIGludCByZWZfY21wKGNvbnN0IFg1MDlfUE9MSUNZX1JFRiAqIGNvbnN0ICphLAotCQkJY29uc3QgWDUwOV9QT0xJQ1lfUkVGICogY29uc3QgKmIpCi0JewotCXJldHVybiBPQkpfY21wKCgqYSktPnN1YmplY3REb21haW5Qb2xpY3ksICgqYiktPnN1YmplY3REb21haW5Qb2xpY3kpOwotCX0KLQotc3RhdGljIHZvaWQgcG9saWN5X21hcF9mcmVlKFg1MDlfUE9MSUNZX1JFRiAqbWFwKQotCXsKLQlpZiAobWFwLT5zdWJqZWN0RG9tYWluUG9saWN5KQotCQlBU04xX09CSkVDVF9mcmVlKG1hcC0+c3ViamVjdERvbWFpblBvbGljeSk7Ci0JT1BFTlNTTF9mcmVlKG1hcCk7Ci0JfQotCi1zdGF0aWMgWDUwOV9QT0xJQ1lfUkVGICpwb2xpY3lfbWFwX2ZpbmQoWDUwOV9QT0xJQ1lfQ0FDSEUgKmNhY2hlLCBBU04xX09CSkVDVCAqaWQpCi0JewotCVg1MDlfUE9MSUNZX1JFRiB0bXA7Ci0JaW50IGlkeDsKLQl0bXAuc3ViamVjdERvbWFpblBvbGljeSA9IGlkOwotCi0JaWR4ID0gc2tfWDUwOV9QT0xJQ1lfUkVGX2ZpbmQoY2FjaGUtPm1hcHMsICZ0bXApOwotCWlmIChpZHggPT0gLTEpCi0JCXJldHVybiBOVUxMOwotCXJldHVybiBza19YNTA5X1BPTElDWV9SRUZfdmFsdWUoY2FjaGUtPm1hcHMsIGlkeCk7Ci0JfQotCiAvKiBTZXQgcG9saWN5IG1hcHBpbmcgZW50cmllcyBpbiBjYWNoZS4KICAqIE5vdGU6IHRoaXMgbW9kaWZpZXMgdGhlIHBhc3NlZCBQT0xJQ1lfTUFQUElOR1Mgc3RydWN0dXJlCiAgKi8KQEAgLTk0LDcgKzY5LDYgQEAKIGludCBwb2xpY3lfY2FjaGVfc2V0X21hcHBpbmcoWDUwOSAqeCwgUE9MSUNZX01BUFBJTkdTICptYXBzKQogCXsKIAlQT0xJQ1lfTUFQUElORyAqbWFwOwotCVg1MDlfUE9MSUNZX1JFRiAqcmVmID0gTlVMTDsKIAlYNTA5X1BPTElDWV9EQVRBICpkYXRhOwogCVg1MDlfUE9MSUNZX0NBQ0hFICpjYWNoZSA9IHgtPnBvbGljeV9jYWNoZTsKIAlpbnQgaTsKQEAgLTEwNCw3ICs3OCw2IEBACiAJCXJldCA9IC0xOwogCQlnb3RvIGJhZF9tYXBwaW5nOwogCQl9Ci0JY2FjaGUtPm1hcHMgPSBza19YNTA5X1BPTElDWV9SRUZfbmV3KHJlZl9jbXApOwogCWZvciAoaSA9IDA7IGkgPCBza19QT0xJQ1lfTUFQUElOR19udW0obWFwcyk7IGkrKykKIAkJewogCQltYXAgPSBza19QT0xJQ1lfTUFQUElOR192YWx1ZShtYXBzLCBpKTsKQEAgLTExNiwxMyArODksNiBAQAogCQkJZ290byBiYWRfbWFwcGluZzsKIAkJCX0KIAotCQkvKiBJZiB3ZSd2ZSBhbHJlYWR5IG1hcHBlZCBmcm9tIHRoaXMgT0lEIGJhZCBtYXBwaW5nICovCi0JCWlmIChwb2xpY3lfbWFwX2ZpbmQoY2FjaGUsIG1hcC0+c3ViamVjdERvbWFpblBvbGljeSkgIT0gTlVMTCkKLQkJCXsKLQkJCXJldCA9IC0xOwotCQkJZ290byBiYWRfbWFwcGluZzsKLQkJCX0KLQogCQkvKiBBdHRlbXB0IHRvIGZpbmQgbWF0Y2hpbmcgcG9saWN5IGRhdGEgKi8KIAkJZGF0YSA9IHBvbGljeV9jYWNoZV9maW5kX2RhdGEoY2FjaGUsIG1hcC0+aXNzdWVyRG9tYWluUG9saWN5KTsKIAkJLyogSWYgd2UgZG9uJ3QgaGF2ZSBhbnlQb2xpY3kgY2FuJ3QgbWFwICovCkBAIC0xMzgsNyArMTA0LDcgQEAKIAkJCWlmICghZGF0YSkKIAkJCQlnb3RvIGJhZF9tYXBwaW5nOwogCQkJZGF0YS0+cXVhbGlmaWVyX3NldCA9IGNhY2hlLT5hbnlQb2xpY3ktPnF1YWxpZmllcl9zZXQ7Ci0JCQltYXAtPmlzc3VlckRvbWFpblBvbGljeSA9IE5VTEw7CisJCQkvKm1hcC0+aXNzdWVyRG9tYWluUG9saWN5ID0gTlVMTDsqLwogCQkJZGF0YS0+ZmxhZ3MgfD0gUE9MSUNZX0RBVEFfRkxBR19NQVBQRURfQU5ZOwogCQkJZGF0YS0+ZmxhZ3MgfD0gUE9MSUNZX0RBVEFfRkxBR19TSEFSRURfUVVBTElGSUVSUzsKIAkJCWlmICghc2tfWDUwOV9QT0xJQ1lfREFUQV9wdXNoKGNhY2hlLT5kYXRhLCBkYXRhKSkKQEAgLTE0OSwyMyArMTE1LDEwIEBACiAJCQl9CiAJCWVsc2UKIAkJCWRhdGEtPmZsYWdzIHw9IFBPTElDWV9EQVRBX0ZMQUdfTUFQUEVEOwotCiAJCWlmICghc2tfQVNOMV9PQkpFQ1RfcHVzaChkYXRhLT5leHBlY3RlZF9wb2xpY3lfc2V0LCAKIAkJCQkJCW1hcC0+c3ViamVjdERvbWFpblBvbGljeSkpCiAJCQlnb3RvIGJhZF9tYXBwaW5nOwotCQkKLQkJcmVmID0gT1BFTlNTTF9tYWxsb2Moc2l6ZW9mKFg1MDlfUE9MSUNZX1JFRikpOwotCQlpZiAoIXJlZikKLQkJCWdvdG8gYmFkX21hcHBpbmc7Ci0KLQkJcmVmLT5zdWJqZWN0RG9tYWluUG9saWN5ID0gbWFwLT5zdWJqZWN0RG9tYWluUG9saWN5OwogCQltYXAtPnN1YmplY3REb21haW5Qb2xpY3kgPSBOVUxMOwotCQlyZWYtPmRhdGEgPSBkYXRhOwotCi0JCWlmICghc2tfWDUwOV9QT0xJQ1lfUkVGX3B1c2goY2FjaGUtPm1hcHMsIHJlZikpCi0JCQlnb3RvIGJhZF9tYXBwaW5nOwotCi0JCXJlZiA9IE5VTEw7CiAKIAkJfQogCkBAIC0xNzMsMTMgKzEyNiw2IEBACiAJYmFkX21hcHBpbmc6CiAJaWYgKHJldCA9PSAtMSkKIAkJeC0+ZXhfZmxhZ3MgfD0gRVhGTEFHX0lOVkFMSURfUE9MSUNZOwotCWlmIChyZWYpCi0JCXBvbGljeV9tYXBfZnJlZShyZWYpOwotCWlmIChyZXQgPD0gMCkKLQkJewotCQlza19YNTA5X1BPTElDWV9SRUZfcG9wX2ZyZWUoY2FjaGUtPm1hcHMsIHBvbGljeV9tYXBfZnJlZSk7Ci0JCWNhY2hlLT5tYXBzID0gTlVMTDsKLQkJfQogCXNrX1BPTElDWV9NQVBQSU5HX3BvcF9mcmVlKG1hcHMsIFBPTElDWV9NQVBQSU5HX2ZyZWUpOwogCXJldHVybiByZXQ7CiAKZGlmZiAtLWdpdCBhL2NyeXB0by94NTA5djMvcGN5X25vZGUuYyBiL2NyeXB0by94NTA5djMvcGN5X25vZGUuYwppbmRleCA2NTg3Y2IwLi5iZDFlN2YxIDEwMDY0NAotLS0gYS9jcnlwdG8veDUwOXYzL3BjeV9ub2RlLmMKKysrIGIvY3J5cHRvL3g1MDl2My9wY3lfbm9kZS5jCkBAIC05MiwxMyArOTIsMjUgQEAKIAl9CiAKIFg1MDlfUE9MSUNZX05PREUgKmxldmVsX2ZpbmRfbm9kZShjb25zdCBYNTA5X1BPTElDWV9MRVZFTCAqbGV2ZWwsCisJCQkJCWNvbnN0IFg1MDlfUE9MSUNZX05PREUgKnBhcmVudCwJCiAJCQkJCWNvbnN0IEFTTjFfT0JKRUNUICppZCkKIAl7Ci0JcmV0dXJuIHRyZWVfZmluZF9zayhsZXZlbC0+bm9kZXMsIGlkKTsKKwlYNTA5X1BPTElDWV9OT0RFICpub2RlOworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBza19YNTA5X1BPTElDWV9OT0RFX251bShsZXZlbC0+bm9kZXMpOyBpKyspCisJCXsKKwkJbm9kZSA9IHNrX1g1MDlfUE9MSUNZX05PREVfdmFsdWUobGV2ZWwtPm5vZGVzLCBpKTsKKwkJaWYgKG5vZGUtPnBhcmVudCA9PSBwYXJlbnQpCisJCQl7CisJCQlpZiAoIU9CSl9jbXAobm9kZS0+ZGF0YS0+dmFsaWRfcG9saWN5LCBpZCkpCisJCQkJcmV0dXJuIG5vZGU7CisJCQl9CisJCX0KKwlyZXR1cm4gTlVMTDsKIAl9CiAKIFg1MDlfUE9MSUNZX05PREUgKmxldmVsX2FkZF9ub2RlKFg1MDlfUE9MSUNZX0xFVkVMICpsZXZlbCwKLQkJCVg1MDlfUE9MSUNZX0RBVEEgKmRhdGEsCisJCQljb25zdCBYNTA5X1BPTElDWV9EQVRBICpkYXRhLAogCQkJWDUwOV9QT0xJQ1lfTk9ERSAqcGFyZW50LAogCQkJWDUwOV9QT0xJQ1lfVFJFRSAqdHJlZSkKIAl7CkBAIC0xNTUsNCArMTY3LDMxIEBACiAJT1BFTlNTTF9mcmVlKG5vZGUpOwogCX0KIAorLyogU2VlIGlmIGEgcG9saWN5IG5vZGUgbWF0Y2hlcyBhIHBvbGljeSBPSUQuIElmIG1hcHBpbmcgZW5hYmxlZCBsb29rIHRocm91Z2gKKyAqIGV4cGVjdGVkIHBvbGljeSBzZXQgb3RoZXJ3aXNlIGp1c3QgdmFsaWQgcG9saWN5LgorICovCiAKK2ludCBwb2xpY3lfbm9kZV9tYXRjaChjb25zdCBYNTA5X1BPTElDWV9MRVZFTCAqbHZsLAorCQkgICAgICBjb25zdCBYNTA5X1BPTElDWV9OT0RFICpub2RlLCBjb25zdCBBU04xX09CSkVDVCAqb2lkKQorCXsKKwlpbnQgaTsKKwlBU04xX09CSkVDVCAqcG9saWN5X29pZDsKKwljb25zdCBYNTA5X1BPTElDWV9EQVRBICp4ID0gbm9kZS0+ZGF0YTsKKworCWlmICgJICAgIChsdmwtPmZsYWdzICYgWDUwOV9WX0ZMQUdfSU5ISUJJVF9NQVApCisJCXx8ICEoeC0+ZmxhZ3MgJiBQT0xJQ1lfREFUQV9GTEFHX01BUF9NQVNLKSkKKwkJeworCQlpZiAoIU9CSl9jbXAoeC0+dmFsaWRfcG9saWN5LCBvaWQpKQorCQkJcmV0dXJuIDE7CisJCXJldHVybiAwOworCQl9CisKKwlmb3IgKGkgPSAwOyBpIDwgc2tfQVNOMV9PQkpFQ1RfbnVtKHgtPmV4cGVjdGVkX3BvbGljeV9zZXQpOyBpKyspCisJCXsKKwkJcG9saWN5X29pZCA9IHNrX0FTTjFfT0JKRUNUX3ZhbHVlKHgtPmV4cGVjdGVkX3BvbGljeV9zZXQsIGkpOworCQlpZiAoIU9CSl9jbXAocG9saWN5X29pZCwgb2lkKSkKKwkJCXJldHVybiAxOworCQl9CisJcmV0dXJuIDA7CisKKwl9CmRpZmYgLS1naXQgYS9jcnlwdG8veDUwOXYzL3BjeV90cmVlLmMgYi9jcnlwdG8veDUwOXYzL3BjeV90cmVlLmMKaW5kZXggODlmODRiZi4uOTJmNmIyNCAxMDA2NDQKLS0tIGEvY3J5cHRvL3g1MDl2My9wY3lfdHJlZS5jCisrKyBiL2NyeXB0by94NTA5djMvcGN5X3RyZWUuYwpAQCAtNjIsNiArNjIsNzUgQEAKIAogI2luY2x1ZGUgInBjeV9pbnQuaCIKIAorLyogRW5hYmxlIHRoaXMgdG8gcHJpbnQgb3V0IHRoZSBjb21wbGV0ZSBwb2xpY3kgdHJlZSBhdCB2YXJpb3VzIHBvaW50IGR1cmluZworICogZXZhbHVhdGlvbi4KKyAqLworCisvKiNkZWZpbmUgT1BFTlNTTF9QT0xJQ1lfREVCVUcqLworCisjaWZkZWYgT1BFTlNTTF9QT0xJQ1lfREVCVUcKKworc3RhdGljIHZvaWQgZXhwZWN0ZWRfcHJpbnQoQklPICplcnIsIFg1MDlfUE9MSUNZX0xFVkVMICpsZXYsCisJCQkJWDUwOV9QT0xJQ1lfTk9ERSAqbm9kZSwgaW50IGluZGVudCkKKwl7CisJaWYgKAkgICAgKGxldi0+ZmxhZ3MgJiBYNTA5X1ZfRkxBR19JTkhJQklUX01BUCkKKwkJfHwgIShub2RlLT5kYXRhLT5mbGFncyAmIFBPTElDWV9EQVRBX0ZMQUdfTUFQX01BU0spKQorCQlCSU9fcHV0cyhlcnIsICIgIE5vdCBNYXBwZWRcbiIpOworCWVsc2UKKwkJeworCQlpbnQgaTsKKwkJU1RBQ0tfT0YoQVNOMV9PQkpFQ1QpICpwc2V0ID0gbm9kZS0+ZGF0YS0+ZXhwZWN0ZWRfcG9saWN5X3NldDsKKwkJQVNOMV9PQkpFQ1QgKm9pZDsKKwkJQklPX3B1dHMoZXJyLCAiICBFeHBlY3RlZDogIik7CisJCWZvciAoaSA9IDA7IGkgPCBza19BU04xX09CSkVDVF9udW0ocHNldCk7IGkrKykKKwkJCXsKKwkJCW9pZCA9IHNrX0FTTjFfT0JKRUNUX3ZhbHVlKHBzZXQsIGkpOworCQkJaWYgKGkpCisJCQkJQklPX3B1dHMoZXJyLCAiLCAiKTsKKwkJCWkyYV9BU04xX09CSkVDVChlcnIsIG9pZCk7CisJCQl9CisJCUJJT19wdXRzKGVyciwgIlxuIik7CisJCX0KKwl9CisKK3N0YXRpYyB2b2lkIHRyZWVfcHJpbnQoY2hhciAqc3RyLCBYNTA5X1BPTElDWV9UUkVFICp0cmVlLAorCQkJWDUwOV9QT0xJQ1lfTEVWRUwgKmN1cnIpCisJeworCVg1MDlfUE9MSUNZX0xFVkVMICpwbGV2OworCVg1MDlfUE9MSUNZX05PREUgKm5vZGU7CisJaW50IGk7CisJQklPICplcnI7CisJZXJyID0gQklPX25ld19mcChzdGRlcnIsIEJJT19OT0NMT1NFKTsKKwlpZiAoIWN1cnIpCisJCWN1cnIgPSB0cmVlLT5sZXZlbHMgKyB0cmVlLT5ubGV2ZWw7CisJZWxzZQorCQljdXJyKys7CisJQklPX3ByaW50ZihlcnIsICJMZXZlbCBwcmludCBhZnRlciAlc1xuIiwgc3RyKTsKKwlCSU9fcHJpbnRmKGVyciwgIlByaW50aW5nIFVwIHRvIExldmVsICVsZFxuIiwgY3VyciAtIHRyZWUtPmxldmVscyk7CisJZm9yIChwbGV2ID0gdHJlZS0+bGV2ZWxzOyBwbGV2ICE9IGN1cnI7IHBsZXYrKykKKwkJeworCQlCSU9fcHJpbnRmKGVyciwgIkxldmVsICVsZCwgZmxhZ3MgPSAleFxuIiwKKwkJCQlwbGV2IC0gdHJlZS0+bGV2ZWxzLCBwbGV2LT5mbGFncyk7CisJCWZvciAoaSA9IDA7IGkgPCBza19YNTA5X1BPTElDWV9OT0RFX251bShwbGV2LT5ub2Rlcyk7IGkrKykKKwkJCXsKKwkJCW5vZGUgPSBza19YNTA5X1BPTElDWV9OT0RFX3ZhbHVlKHBsZXYtPm5vZGVzLCBpKTsKKwkJCVg1MDlfUE9MSUNZX05PREVfcHJpbnQoZXJyLCBub2RlLCAyKTsKKwkJCWV4cGVjdGVkX3ByaW50KGVyciwgcGxldiwgbm9kZSwgMik7CisJCQlCSU9fcHJpbnRmKGVyciwgIiAgRmxhZ3M6ICV4XG4iLCBub2RlLT5kYXRhLT5mbGFncyk7CisJCQl9CisJCWlmIChwbGV2LT5hbnlQb2xpY3kpCisJCQlYNTA5X1BPTElDWV9OT0RFX3ByaW50KGVyciwgcGxldi0+YW55UG9saWN5LCAyKTsKKwkJfQorCisJQklPX2ZyZWUoZXJyKTsKKworCX0KKyNlbHNlCisKKyNkZWZpbmUgdHJlZV9wcmludChhLGIsYykgLyogKi8KKworI2VuZGlmCisKIC8qIEluaXRpYWxpemUgcG9saWN5IHRyZWUuIFJldHVybiB2YWx1ZXM6CiAgKiAgMCBTb21lIGludGVybmFsIGVycm9yIG9jY3VyZWQuCiAgKiAtMSBJbmNvbnNpc3RlbnQgb3IgaW52YWxpZCBleHRlbnNpb25zIGluIGNlcnRpZmljYXRlcy4KQEAgLTg3LDggKzE1NiwxMCBAQAogCSpwdHJlZSA9IE5VTEw7CiAJbiA9IHNrX1g1MDlfbnVtKGNlcnRzKTsKIAorI2lmIDAKIAkvKiBEaXNhYmxlIHBvbGljeSBtYXBwaW5nIGZvciBub3cuLi4gKi8KIAlmbGFncyB8PSBYNTA5X1ZfRkxBR19JTkhJQklUX01BUDsKKyNlbmRpZgogCiAJaWYgKGZsYWdzICYgWDUwOV9WX0ZMQUdfRVhQTElDSVRfUE9MSUNZKQogCQlleHBsaWNpdF9wb2xpY3kgPSAwOwpAQCAtMTg0LDcgKzI1NSw2IEBACiAJCWxldmVsKys7CiAJCXggPSBza19YNTA5X3ZhbHVlKGNlcnRzLCBpKTsKIAkJY2FjaGUgPSBwb2xpY3lfY2FjaGVfc2V0KHgpOwotCiAJCUNSWVBUT19hZGQoJngtPnJlZmVyZW5jZXMsIDEsIENSWVBUT19MT0NLX1g1MDkpOwogCQlsZXZlbC0+Y2VydCA9IHg7CiAKQEAgLTIxMywxMyArMjgzLDEzIEBACiAJCQlsZXZlbC0+ZmxhZ3MgfD0gWDUwOV9WX0ZMQUdfSU5ISUJJVF9NQVA7CiAJCWVsc2UKIAkJCXsKLQkJCW1hcF9za2lwLS07CisJCQlpZiAoISh4LT5leF9mbGFncyAmIEVYRkxBR19TSSkpCisJCQkJbWFwX3NraXAtLTsKIAkJCWlmICgoY2FjaGUtPm1hcF9za2lwID49IDApCiAJCQkJJiYgKGNhY2hlLT5tYXBfc2tpcCA8IG1hcF9za2lwKSkKIAkJCQltYXBfc2tpcCA9IGNhY2hlLT5tYXBfc2tpcDsKIAkJCX0KIAotCiAJCX0KIAogCSpwdHJlZSA9IHRyZWU7CkBAIC0yMzcsNyArMzA3LDMyIEBACiAKIAl9CiAKLS8qIFRoaXMgY29ycmVzcG9uZHMgdG8gUkZDMzI4MCBYWFhYIFhYWFhYOgorc3RhdGljIGludCB0cmVlX2xpbmtfbWF0Y2hpbmdfbm9kZXMoWDUwOV9QT0xJQ1lfTEVWRUwgKmN1cnIsCisJCQkJY29uc3QgWDUwOV9QT0xJQ1lfREFUQSAqZGF0YSkKKwl7CisJWDUwOV9QT0xJQ1lfTEVWRUwgKmxhc3QgPSBjdXJyIC0gMTsKKwlYNTA5X1BPTElDWV9OT0RFICpub2RlOworCWludCBpLCBtYXRjaGVkID0gMDsKKwkvKiBJdGVyYXRlIHRocm91Z2ggYWxsIGluIG5vZGVzIGxpbmtpbmcgbWF0Y2hlcyAqLworCWZvciAoaSA9IDA7IGkgPCBza19YNTA5X1BPTElDWV9OT0RFX251bShsYXN0LT5ub2Rlcyk7IGkrKykKKwkJeworCQlub2RlID0gc2tfWDUwOV9QT0xJQ1lfTk9ERV92YWx1ZShsYXN0LT5ub2RlcywgaSk7CisJCWlmIChwb2xpY3lfbm9kZV9tYXRjaChsYXN0LCBub2RlLCBkYXRhLT52YWxpZF9wb2xpY3kpKQorCQkJeworCQkJaWYgKCFsZXZlbF9hZGRfbm9kZShjdXJyLCBkYXRhLCBub2RlLCBOVUxMKSkKKwkJCQlyZXR1cm4gMDsKKwkJCW1hdGNoZWQgPSAxOworCQkJfQorCQl9CisJaWYgKCFtYXRjaGVkICYmIGxhc3QtPmFueVBvbGljeSkKKwkJeworCQlpZiAoIWxldmVsX2FkZF9ub2RlKGN1cnIsIGRhdGEsIGxhc3QtPmFueVBvbGljeSwgTlVMTCkpCisJCQlyZXR1cm4gMDsKKwkJfQorCXJldHVybiAxOworCX0KKworLyogVGhpcyBjb3JyZXNwb25kcyB0byBSRkMzMjgwIDYuMS4zKGQpKDEpOgogICogbGluayBhbnkgZGF0YSBmcm9tIENlcnRpZmljYXRlUG9saWNpZXMgb250byBtYXRjaGluZyBwYXJlbnQKICAqIG9yIGFueVBvbGljeSBpZiBubyBtYXRjaC4KICAqLwpAQCAtMjQ4LDcgKzM0Myw2IEBACiAJaW50IGk7CiAJWDUwOV9QT0xJQ1lfTEVWRUwgKmxhc3Q7CiAJWDUwOV9QT0xJQ1lfREFUQSAqZGF0YTsKLQlYNTA5X1BPTElDWV9OT0RFICpwYXJlbnQ7CiAJbGFzdCA9IGN1cnIgLSAxOwogCWZvciAoaSA9IDA7IGkgPCBza19YNTA5X1BPTElDWV9EQVRBX251bShjYWNoZS0+ZGF0YSk7IGkrKykKIAkJewpAQCAtMjYxLDQwICszNTUsMTA5IEBACiAJCSAqIGxpbmsgYmVjYXVzZSB0aGVuIGl0IHdpbGwgaGF2ZSB0aGUgbWFwcGluZyBmbGFncwogCQkgKiByaWdodCBhbmQgd2UgY2FuIHBydW5lIGl0IGxhdGVyLgogCQkgKi8KKyNpZiAwCiAJCWlmICgoZGF0YS0+ZmxhZ3MgJiBQT0xJQ1lfREFUQV9GTEFHX01BUFBFRF9BTlkpCiAJCQkmJiAhKGN1cnItPmZsYWdzICYgWDUwOV9WX0ZMQUdfSU5ISUJJVF9BTlkpKQogCQkJY29udGludWU7Ci0JCS8qIExvb2sgZm9yIG1hdGNoaW5nIG5vZGUgaW4gcGFyZW50ICovCi0JCXBhcmVudCA9IGxldmVsX2ZpbmRfbm9kZShsYXN0LCBkYXRhLT52YWxpZF9wb2xpY3kpOwotCQkvKiBJZiBubyBtYXRjaCBsaW5rIHRvIGFueVBvbGljeSAqLwotCQlpZiAoIXBhcmVudCkKLQkJCXBhcmVudCA9IGxhc3QtPmFueVBvbGljeTsKLQkJaWYgKHBhcmVudCAmJiAhbGV2ZWxfYWRkX25vZGUoY3VyciwgZGF0YSwgcGFyZW50LCBOVUxMKSkKKyNlbmRpZgorCQkvKiBMb29rIGZvciBtYXRjaGluZyBub2RlcyBpbiBwcmV2aW91cyBsZXZlbCAqLworCQlpZiAoIXRyZWVfbGlua19tYXRjaGluZ19ub2RlcyhjdXJyLCBkYXRhKSkKIAkJCQlyZXR1cm4gMDsKIAkJfQogCXJldHVybiAxOwogCX0KIAotLyogVGhpcyBjb3JyZXNwb25kcyB0byBSRkMzMjgwIFhYWFggWFhYWFg6CisvKiBUaGlzIGNvcnJlc3BvbmRzIHRvIFJGQzMyODAgNi4xLjMoZCkoMik6CiAgKiBDcmVhdGUgbmV3IGRhdGEgZm9yIGFueSB1bm1hdGNoZWQgcG9saWNpZXMgaW4gdGhlIHBhcmVudCBhbmQgbGluawogICogdG8gYW55UG9saWN5LgogICovCiAKK3N0YXRpYyBpbnQgdHJlZV9hZGRfdW5tYXRjaGVkKFg1MDlfUE9MSUNZX0xFVkVMICpjdXJyLAorCQkJY29uc3QgWDUwOV9QT0xJQ1lfQ0FDSEUgKmNhY2hlLAorCQkJY29uc3QgQVNOMV9PQkpFQ1QgKmlkLAorCQkJWDUwOV9QT0xJQ1lfTk9ERSAqbm9kZSwKKwkJCVg1MDlfUE9MSUNZX1RSRUUgKnRyZWUpCisJeworCVg1MDlfUE9MSUNZX0RBVEEgKmRhdGE7CisJaWYgKGlkID09IE5VTEwpCisJCWlkID0gbm9kZS0+ZGF0YS0+dmFsaWRfcG9saWN5OworCS8qIENyZWF0ZSBhIG5ldyBub2RlIHdpdGggcXVhbGlmaWVycyBmcm9tIGFueVBvbGljeSBhbmQKKwkgKiBpZCBmcm9tIHVubWF0Y2hlZCBub2RlLgorCSAqLworCWRhdGEgPSBwb2xpY3lfZGF0YV9uZXcoTlVMTCwgaWQsIG5vZGVfY3JpdGljYWwobm9kZSkpOworCisJaWYgKGRhdGEgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisJLyogQ3VyciBtYXkgbm90IGhhdmUgYW55UG9saWN5ICovCisJZGF0YS0+cXVhbGlmaWVyX3NldCA9IGNhY2hlLT5hbnlQb2xpY3ktPnF1YWxpZmllcl9zZXQ7CisJZGF0YS0+ZmxhZ3MgfD0gUE9MSUNZX0RBVEFfRkxBR19TSEFSRURfUVVBTElGSUVSUzsKKwlpZiAoIWxldmVsX2FkZF9ub2RlKGN1cnIsIGRhdGEsIG5vZGUsIHRyZWUpKQorCQl7CisJCXBvbGljeV9kYXRhX2ZyZWUoZGF0YSk7CisJCXJldHVybiAwOworCQl9CisKKwlyZXR1cm4gMTsKKwl9CisKK3N0YXRpYyBpbnQgdHJlZV9saW5rX3VubWF0Y2hlZChYNTA5X1BPTElDWV9MRVZFTCAqY3VyciwKKwkJCWNvbnN0IFg1MDlfUE9MSUNZX0NBQ0hFICpjYWNoZSwKKwkJCVg1MDlfUE9MSUNZX05PREUgKm5vZGUsCisJCQlYNTA5X1BPTElDWV9UUkVFICp0cmVlKQorCXsKKwljb25zdCBYNTA5X1BPTElDWV9MRVZFTCAqbGFzdCA9IGN1cnIgLSAxOworCWludCBpOworCisJaWYgKAkgICAgKGxhc3QtPmZsYWdzICYgWDUwOV9WX0ZMQUdfSU5ISUJJVF9NQVApCisJCXx8ICEobm9kZS0+ZGF0YS0+ZmxhZ3MgJiBQT0xJQ1lfREFUQV9GTEFHX01BUFBFRCkpCisJCXsKKwkJLyogSWYgbm8gcG9saWN5IG1hcHBpbmc6IG1hdGNoZWQgaWYgb25lIGNoaWxkIHByZXNlbnQgKi8KKwkJaWYgKG5vZGUtPm5jaGlsZCkKKwkJCXJldHVybiAxOworCQlpZiAoIXRyZWVfYWRkX3VubWF0Y2hlZChjdXJyLCBjYWNoZSwgTlVMTCwgbm9kZSwgdHJlZSkpCisJCQlyZXR1cm4gMDsKKwkJLyogQWRkIGl0ICovCisJCX0KKwllbHNlCisJCXsKKwkJLyogSWYgbWFwcGluZzogbWF0Y2hlZCBpZiBvbmUgY2hpbGQgcGVyIGV4cGVjdGVkIHBvbGljeSBzZXQgKi8KKwkJU1RBQ0tfT0YoQVNOMV9PQkpFQ1QpICpleHBzZXQgPSBub2RlLT5kYXRhLT5leHBlY3RlZF9wb2xpY3lfc2V0OworCQlpZiAobm9kZS0+bmNoaWxkID09IHNrX0FTTjFfT0JKRUNUX251bShleHBzZXQpKQorCQkJcmV0dXJuIDE7CisJCS8qIExvY2F0ZSB1bm1hdGNoZWQgbm9kZXMgKi8KKwkJZm9yIChpID0gMDsgaSA8IHNrX0FTTjFfT0JKRUNUX251bShleHBzZXQpOyBpKyspCisJCQl7CisJCQlBU04xX09CSkVDVCAqb2lkID0gc2tfQVNOMV9PQkpFQ1RfdmFsdWUoZXhwc2V0LCBpKTsKKwkJCWlmIChsZXZlbF9maW5kX25vZGUoY3Vyciwgbm9kZSwgb2lkKSkKKwkJCQljb250aW51ZTsKKwkJCWlmICghdHJlZV9hZGRfdW5tYXRjaGVkKGN1cnIsIGNhY2hlLCBvaWQsIG5vZGUsIHRyZWUpKQorCQkJCXJldHVybiAwOworCQkJfQorCisJCX0KKworCXJldHVybiAxOworCisJfQorCiBzdGF0aWMgaW50IHRyZWVfbGlua19hbnkoWDUwOV9QT0xJQ1lfTEVWRUwgKmN1cnIsCiAJCQljb25zdCBYNTA5X1BPTElDWV9DQUNIRSAqY2FjaGUsCiAJCQlYNTA5X1BPTElDWV9UUkVFICp0cmVlKQogCXsKIAlpbnQgaTsKLQlYNTA5X1BPTElDWV9EQVRBICpkYXRhOworCS8qWDUwOV9QT0xJQ1lfREFUQSAqZGF0YTsqLwogCVg1MDlfUE9MSUNZX05PREUgKm5vZGU7Ci0JWDUwOV9QT0xJQ1lfTEVWRUwgKmxhc3Q7Ci0KLQlsYXN0ID0gY3VyciAtIDE7CisJWDUwOV9QT0xJQ1lfTEVWRUwgKmxhc3QgPSBjdXJyIC0gMTsKIAogCWZvciAoaSA9IDA7IGkgPCBza19YNTA5X1BPTElDWV9OT0RFX251bShsYXN0LT5ub2Rlcyk7IGkrKykKIAkJewogCQlub2RlID0gc2tfWDUwOV9QT0xJQ1lfTk9ERV92YWx1ZShsYXN0LT5ub2RlcywgaSk7CiAKKwkJaWYgKCF0cmVlX2xpbmtfdW5tYXRjaGVkKGN1cnIsIGNhY2hlLCBub2RlLCB0cmVlKSkKKwkJCXJldHVybiAwOworCisjaWYgMAorCiAJCS8qIFNraXAgYW55IG5vZGUgd2l0aCBhbnkgY2hpbGRyZW46IHdlIG9ubHkgd2FudCB1bm1hdGhjZWQKIAkJICogbm9kZXMuCiAJCSAqCkBAIC0zMDMsNiArNDY2LDcgQEAKIAkJICovCiAJCWlmIChub2RlLT5uY2hpbGQpCiAJCQljb250aW51ZTsKKwogCQkvKiBDcmVhdGUgYSBuZXcgbm9kZSB3aXRoIHF1YWxpZmllcnMgZnJvbSBhbnlQb2xpY3kgYW5kCiAJCSAqIGlkIGZyb20gdW5tYXRjaGVkIG5vZGUuCiAJCSAqLwpAQCAtMzE5LDYgKzQ4Myw5IEBACiAJCQlwb2xpY3lfZGF0YV9mcmVlKGRhdGEpOwogCQkJcmV0dXJuIDA7CiAJCQl9CisKKyNlbmRpZgorCiAJCX0KIAkvKiBGaW5hbGx5IGFkZCBsaW5rIHRvIGFueVBvbGljeSAqLwogCWlmIChsYXN0LT5hbnlQb2xpY3kpCkBAIC0zMzcsMzAgKzUwNCwzNiBAQAogCiBzdGF0aWMgaW50IHRyZWVfcHJ1bmUoWDUwOV9QT0xJQ1lfVFJFRSAqdHJlZSwgWDUwOV9QT0xJQ1lfTEVWRUwgKmN1cnIpCiAJeworCVNUQUNLX09GKFg1MDlfUE9MSUNZX05PREUpICpub2RlczsKIAlYNTA5X1BPTElDWV9OT0RFICpub2RlOwogCWludCBpOwotCWZvciAoaSA9IHNrX1g1MDlfUE9MSUNZX05PREVfbnVtKGN1cnItPm5vZGVzKSAtIDE7IGkgPj0gMDsgaS0tKQorCW5vZGVzID0gY3Vyci0+bm9kZXM7CisJaWYgKGN1cnItPmZsYWdzICYgWDUwOV9WX0ZMQUdfSU5ISUJJVF9NQVApCiAJCXsKLQkJbm9kZSA9IHNrX1g1MDlfUE9MSUNZX05PREVfdmFsdWUoY3Vyci0+bm9kZXMsIGkpOwotCQkvKiBEZWxldGUgYW55IG1hcHBlZCBkYXRhOiBzZWUgUkZDMzI4MCBYWFhYICovCi0JCWlmIChub2RlLT5kYXRhLT5mbGFncyAmIFBPTElDWV9EQVRBX0ZMQUdfTUFQX01BU0spCisJCWZvciAoaSA9IHNrX1g1MDlfUE9MSUNZX05PREVfbnVtKG5vZGVzKSAtIDE7IGkgPj0gMDsgaS0tKQogCQkJewotCQkJbm9kZS0+cGFyZW50LT5uY2hpbGQtLTsKLQkJCU9QRU5TU0xfZnJlZShub2RlKTsKLQkJCSh2b2lkKXNrX1g1MDlfUE9MSUNZX05PREVfZGVsZXRlKGN1cnItPm5vZGVzLCBpKTsKKwkJCW5vZGUgPSBza19YNTA5X1BPTElDWV9OT0RFX3ZhbHVlKG5vZGVzLCBpKTsKKwkJCS8qIERlbGV0ZSBhbnkgbWFwcGVkIGRhdGE6IHNlZSBSRkMzMjgwIFhYWFggKi8KKwkJCWlmIChub2RlLT5kYXRhLT5mbGFncyAmIFBPTElDWV9EQVRBX0ZMQUdfTUFQX01BU0spCisJCQkJeworCQkJCW5vZGUtPnBhcmVudC0+bmNoaWxkLS07CisJCQkJT1BFTlNTTF9mcmVlKG5vZGUpOworCQkJCSh2b2lkKXNrX1g1MDlfUE9MSUNZX05PREVfZGVsZXRlKG5vZGVzLGkpOworCQkJCX0KIAkJCX0KIAkJfQogCiAJZm9yKDs7KQl7CiAJCS0tY3VycjsKLQkJZm9yIChpID0gc2tfWDUwOV9QT0xJQ1lfTk9ERV9udW0oY3Vyci0+bm9kZXMpIC0gMTsgaSA+PSAwOyBpLS0pCisJCW5vZGVzID0gY3Vyci0+bm9kZXM7CisJCWZvciAoaSA9IHNrX1g1MDlfUE9MSUNZX05PREVfbnVtKG5vZGVzKSAtIDE7IGkgPj0gMDsgaS0tKQogCQkJewotCQkJbm9kZSA9IHNrX1g1MDlfUE9MSUNZX05PREVfdmFsdWUoY3Vyci0+bm9kZXMsIGkpOworCQkJbm9kZSA9IHNrX1g1MDlfUE9MSUNZX05PREVfdmFsdWUobm9kZXMsIGkpOwogCQkJaWYgKG5vZGUtPm5jaGlsZCA9PSAwKQogCQkJCXsKIAkJCQlub2RlLT5wYXJlbnQtPm5jaGlsZC0tOwogCQkJCU9QRU5TU0xfZnJlZShub2RlKTsKLQkJCQkodm9pZClza19YNTA5X1BPTElDWV9OT0RFX2RlbGV0ZShjdXJyLT5ub2RlcywgaSk7CisJCQkJKHZvaWQpc2tfWDUwOV9QT0xJQ1lfTk9ERV9kZWxldGUobm9kZXMsIGkpOwogCQkJCX0KIAkJCX0KIAkJaWYgKGN1cnItPmFueVBvbGljeSAmJiAhY3Vyci0+YW55UG9saWN5LT5uY2hpbGQpCkBAIC01MzYsNiArNzA5LDcgQEAKIAkJaWYgKCEoY3Vyci0+ZmxhZ3MgJiBYNTA5X1ZfRkxBR19JTkhJQklUX0FOWSkKIAkJCSYmICF0cmVlX2xpbmtfYW55KGN1cnIsIGNhY2hlLCB0cmVlKSkKIAkJCXJldHVybiAwOworCXRyZWVfcHJpbnQoImJlZm9yZSB0cmVlX3BydW5lKCkiLCB0cmVlLCBjdXJyKTsKIAkJcmV0ID0gdHJlZV9wcnVuZSh0cmVlLCBjdXJyKTsKIAkJaWYgKHJldCAhPSAxKQogCQkJcmV0dXJuIHJldDsKQEAgLTYwNCw3ICs3NzgsNiBAQAogCSpwZXhwbGljaXRfcG9saWN5ID0gMDsKIAlyZXQgPSB0cmVlX2luaXQoJnRyZWUsIGNlcnRzLCBmbGFncyk7CiAKLQogCXN3aXRjaCAocmV0KQogCQl7CiAKQEAgLTYxMyw2ICs3ODYsMTAgQEAKIAkJcmV0dXJuIDE7CiAKIAkJLyogU29tZSBpbnRlcm5hbCBlcnJvciAqLworCQljYXNlIC0xOgorCQlyZXR1cm4gLTE7CisKKwkJLyogU29tZSBpbnRlcm5hbCBlcnJvciAqLwogCQljYXNlIDA6CiAJCXJldHVybiAwOwogCkBAIC02NDYsNiArODIzLDggQEAKIAlpZiAoIXRyZWUpIGdvdG8gZXJyb3I7CiAJcmV0ID0gdHJlZV9ldmFsdWF0ZSh0cmVlKTsKIAorCXRyZWVfcHJpbnQoInRyZWVfZXZhbHVhdGUoKSIsIHRyZWUsIE5VTEwpOworCiAJaWYgKHJldCA8PSAwKQogCQlnb3RvIGVycm9yOwogCmRpZmYgLS1naXQgYS9jcnlwdG8veDUwOXYzL3YzX2FkZHIuYyBiL2NyeXB0by94NTA5djMvdjNfYWRkci5jCmluZGV4IGVmZGY3YzMuLjkwODdkNjYgMTAwNjQ0Ci0tLSBhL2NyeXB0by94NTA5djMvdjNfYWRkci5jCisrKyBiL2NyeXB0by94NTA5djMvdjNfYWRkci5jCkBAIC0yMzYsNyArMjM2LDcgQEAKIC8qCiAgKiBpMnIgaGFuZGxlciBmb3IgYW4gSVBBZGRyQmxvY2tzIGV4dGVuc2lvbi4KICAqLwotc3RhdGljIGludCBpMnJfSVBBZGRyQmxvY2tzKFg1MDlWM19FWFRfTUVUSE9EICptZXRob2QsCitzdGF0aWMgaW50IGkycl9JUEFkZHJCbG9ja3MoY29uc3QgWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZCwKIAkJCSAgICB2b2lkICpleHQsCiAJCQkgICAgQklPICpvdXQsCiAJCQkgICAgaW50IGluZGVudCkKQEAgLTMxNSw4ICszMTUsNyBAQAogCQkJCWNvbnN0IGludCBsZW5ndGgpCiB7CiAgIHVuc2lnbmVkIGNoYXIgYWRkcl9hW0FERFJfUkFXX0JVRl9MRU5dLCBhZGRyX2JbQUREUl9SQVdfQlVGX0xFTl07Ci0gIGludCBwcmVmaXhsZW5fYSA9IDA7Ci0gIGludCBwcmVmaXhsZW5fYiA9IDA7CisgIGludCBwcmVmaXhsZW5fYSA9IDAsIHByZWZpeGxlbl9iID0gMDsKICAgaW50IHI7CiAKICAgc3dpdGNoIChhLT50eXBlKSB7CkBAIC01OTYsMTAgKzU5NSwxMCBAQAogICAgIHJldHVybiBOVUxMOwogICBzd2l0Y2ggKGFmaSkgewogICBjYXNlIElBTkFfQUZJX0lQVjQ6Ci0gICAgKHZvaWQpc2tfSVBBZGRyZXNzT3JSYW5nZV9zZXRfY21wX2Z1bmMoYW9ycywgdjRJUEFkZHJlc3NPclJhbmdlX2NtcCk7CisgICAgc2tfSVBBZGRyZXNzT3JSYW5nZV9zZXRfY21wX2Z1bmMoYW9ycywgdjRJUEFkZHJlc3NPclJhbmdlX2NtcCk7CiAgICAgYnJlYWs7CiAgIGNhc2UgSUFOQV9BRklfSVBWNjoKLSAgICAodm9pZClza19JUEFkZHJlc3NPclJhbmdlX3NldF9jbXBfZnVuYyhhb3JzLCB2NklQQWRkcmVzc09yUmFuZ2VfY21wKTsKKyAgICBza19JUEFkZHJlc3NPclJhbmdlX3NldF9jbXBfZnVuYyhhb3JzLCB2NklQQWRkcmVzc09yUmFuZ2VfY21wKTsKICAgICBicmVhazsKICAgfQogICBmLT5pcEFkZHJlc3NDaG9pY2UtPnR5cGUgPSBJUEFkZHJlc3NDaG9pY2VfYWRkcmVzc2VzT3JSYW5nZXM7CkBAIC04NTYsNyArODU1LDcgQEAKICAgICAgIGlmICghbWFrZV9hZGRyZXNzUmFuZ2UoJm1lcmdlZCwgYV9taW4sIGJfbWF4LCBsZW5ndGgpKQogCXJldHVybiAwOwogICAgICAgc2tfSVBBZGRyZXNzT3JSYW5nZV9zZXQoYW9ycywgaSwgbWVyZ2VkKTsKLSAgICAgICh2b2lkKXNrX0lQQWRkcmVzc09yUmFuZ2VfZGVsZXRlKGFvcnMsIGkgKyAxKTsKKyAgICAgIHNrX0lQQWRkcmVzc09yUmFuZ2VfZGVsZXRlKGFvcnMsIGkgKyAxKTsKICAgICAgIElQQWRkcmVzc09yUmFuZ2VfZnJlZShhKTsKICAgICAgIElQQWRkcmVzc09yUmFuZ2VfZnJlZShiKTsKICAgICAgIC0taTsKQEAgLTg4MCw3ICs4NzksNyBAQAogCQkJCSAgICB2M19hZGRyX2dldF9hZmkoZikpKQogICAgICAgcmV0dXJuIDA7CiAgIH0KLSAgKHZvaWQpc2tfSVBBZGRyZXNzRmFtaWx5X3NldF9jbXBfZnVuYyhhZGRyLCBJUEFkZHJlc3NGYW1pbHlfY21wKTsKKyAgc2tfSVBBZGRyZXNzRmFtaWx5X3NldF9jbXBfZnVuYyhhZGRyLCBJUEFkZHJlc3NGYW1pbHlfY21wKTsKICAgc2tfSVBBZGRyZXNzRmFtaWx5X3NvcnQoYWRkcik7CiAgIE9QRU5TU0xfYXNzZXJ0KHYzX2FkZHJfaXNfY2Fub25pY2FsKGFkZHIpKTsKICAgcmV0dXJuIDE7CkBAIC04ODksNyArODg4LDcgQEAKIC8qCiAgKiB2MmkgaGFuZGxlciBmb3IgdGhlIElQQWRkckJsb2NrcyBleHRlbnNpb24uCiAgKi8KLXN0YXRpYyB2b2lkICp2MmlfSVBBZGRyQmxvY2tzKHN0cnVjdCB2M19leHRfbWV0aG9kICptZXRob2QsCitzdGF0aWMgdm9pZCAqdjJpX0lQQWRkckJsb2Nrcyhjb25zdCBzdHJ1Y3QgdjNfZXh0X21ldGhvZCAqbWV0aG9kLAogCQkJICAgICAgc3RydWN0IHYzX2V4dF9jdHggKmN0eCwKIAkJCSAgICAgIFNUQUNLX09GKENPTkZfVkFMVUUpICp2YWx1ZXMpCiB7CkBAIC0xMTI1LDcgKzExMjQsNyBAQAogICAgIHJldHVybiAxOwogICBpZiAoYiA9PSBOVUxMIHx8IHYzX2FkZHJfaW5oZXJpdHMoYSkgfHwgdjNfYWRkcl9pbmhlcml0cyhiKSkKICAgICByZXR1cm4gMDsKLSAgKHZvaWQpc2tfSVBBZGRyZXNzRmFtaWx5X3NldF9jbXBfZnVuYyhiLCBJUEFkZHJlc3NGYW1pbHlfY21wKTsKKyAgc2tfSVBBZGRyZXNzRmFtaWx5X3NldF9jbXBfZnVuYyhiLCBJUEFkZHJlc3NGYW1pbHlfY21wKTsKICAgZm9yIChpID0gMDsgaSA8IHNrX0lQQWRkcmVzc0ZhbWlseV9udW0oYSk7IGkrKykgewogICAgIElQQWRkcmVzc0ZhbWlseSAqZmEgPSBza19JUEFkZHJlc3NGYW1pbHlfdmFsdWUoYSwgaSk7CiAgICAgaW50IGogPSBza19JUEFkZHJlc3NGYW1pbHlfZmluZChiLCBmYSk7CkBAIC0xMTY3LDcgKzExNjYsNyBAQAogewogICBJUEFkZHJCbG9ja3MgKmNoaWxkID0gTlVMTDsKICAgaW50IGksIGosIHJldCA9IDE7Ci0gIFg1MDkgKnggPSBOVUxMOworICBYNTA5ICp4OwogCiAgIE9QRU5TU0xfYXNzZXJ0KGNoYWluICE9IE5VTEwgJiYgc2tfWDUwOV9udW0oY2hhaW4pID4gMCk7CiAgIE9QRU5TU0xfYXNzZXJ0KGN0eCAhPSBOVUxMIHx8IGV4dCAhPSBOVUxMKTsKQEAgLTExODAsNiArMTE3OSw3IEBACiAgICAqLwogICBpZiAoZXh0ICE9IE5VTEwpIHsKICAgICBpID0gLTE7CisgICAgeCA9IE5VTEw7CiAgIH0gZWxzZSB7CiAgICAgaSA9IDA7CiAgICAgeCA9IHNrX1g1MDlfdmFsdWUoY2hhaW4sIGkpOwpAQCAtMTE4OSw3ICsxMTg5LDcgQEAKICAgfQogICBpZiAoIXYzX2FkZHJfaXNfY2Fub25pY2FsKGV4dCkpCiAgICAgdmFsaWRhdGlvbl9lcnIoWDUwOV9WX0VSUl9JTlZBTElEX0VYVEVOU0lPTik7Ci0gICh2b2lkKXNrX0lQQWRkcmVzc0ZhbWlseV9zZXRfY21wX2Z1bmMoZXh0LCBJUEFkZHJlc3NGYW1pbHlfY21wKTsKKyAgc2tfSVBBZGRyZXNzRmFtaWx5X3NldF9jbXBfZnVuYyhleHQsIElQQWRkcmVzc0ZhbWlseV9jbXApOwogICBpZiAoKGNoaWxkID0gc2tfSVBBZGRyZXNzRmFtaWx5X2R1cChleHQpKSA9PSBOVUxMKSB7CiAgICAgWDUwOVYzZXJyKFg1MDlWM19GX1YzX0FERFJfVkFMSURBVEVfUEFUSF9JTlRFUk5BTCwgRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwogICAgIHJldCA9IDA7CkBAIC0xMjE1LDcgKzEyMTUsNyBAQAogICAgICAgfQogICAgICAgY29udGludWU7CiAgICAgfQotICAgICh2b2lkKXNrX0lQQWRkcmVzc0ZhbWlseV9zZXRfY21wX2Z1bmMoeC0+cmZjMzc3OV9hZGRyLCBJUEFkZHJlc3NGYW1pbHlfY21wKTsKKyAgICBza19JUEFkZHJlc3NGYW1pbHlfc2V0X2NtcF9mdW5jKHgtPnJmYzM3NzlfYWRkciwgSVBBZGRyZXNzRmFtaWx5X2NtcCk7CiAgICAgZm9yIChqID0gMDsgaiA8IHNrX0lQQWRkcmVzc0ZhbWlseV9udW0oY2hpbGQpOyBqKyspIHsKICAgICAgIElQQWRkcmVzc0ZhbWlseSAqZmMgPSBza19JUEFkZHJlc3NGYW1pbHlfdmFsdWUoY2hpbGQsIGopOwogICAgICAgaW50IGsgPSBza19JUEFkZHJlc3NGYW1pbHlfZmluZCh4LT5yZmMzNzc5X2FkZHIsIGZjKTsKQEAgLTEyNDIsNiArMTI0Miw3IEBACiAgIC8qCiAgICAqIFRydXN0IGFuY2hvciBjYW4ndCBpbmhlcml0LgogICAgKi8KKyAgT1BFTlNTTF9hc3NlcnQoeCAhPSBOVUxMKTsKICAgaWYgKHgtPnJmYzM3NzlfYWRkciAhPSBOVUxMKSB7CiAgICAgZm9yIChqID0gMDsgaiA8IHNrX0lQQWRkcmVzc0ZhbWlseV9udW0oeC0+cmZjMzc3OV9hZGRyKTsgaisrKSB7CiAgICAgICBJUEFkZHJlc3NGYW1pbHkgKmZwID0gc2tfSVBBZGRyZXNzRmFtaWx5X3ZhbHVlKHgtPnJmYzM3NzlfYWRkciwgaik7CmRpZmYgLS1naXQgYS9jcnlwdG8veDUwOXYzL3YzX2FsdC5jIGIvY3J5cHRvL3g1MDl2My92M19hbHQuYwppbmRleCA2OTI0NGU0Li5kMjlkOTQzIDEwMDY0NAotLS0gYS9jcnlwdG8veDUwOXYzL3YzX2FsdC5jCisrKyBiL2NyeXB0by94NTA5djMvdjNfYWx0LmMKQEAgLTgyLDYgKzgyLDEyIEBACiAoWDUwOVYzX0VYVF9JMlYpaTJ2X0dFTkVSQUxfTkFNRVMsCiAoWDUwOVYzX0VYVF9WMkkpdjJpX2lzc3Vlcl9hbHQsCiBOVUxMLCBOVUxMLCBOVUxMfSwKKworeyBOSURfY2VydGlmaWNhdGVfaXNzdWVyLCAwLCBBU04xX0lURU1fcmVmKEdFTkVSQUxfTkFNRVMpLAorMCwwLDAsMCwKKzAsMCwKKyhYNTA5VjNfRVhUX0kyVilpMnZfR0VORVJBTF9OQU1FUywKK05VTEwsIE5VTEwsIE5VTEwsIE5VTEx9LAogfTsKIAogU1RBQ0tfT0YoQ09ORl9WQUxVRSkgKmkydl9HRU5FUkFMX05BTUVTKFg1MDlWM19FWFRfTUVUSE9EICptZXRob2QsCkBAIC0zODcsOCArMzkzLDggQEAKIAkKIH0KIAotR0VORVJBTF9OQU1FUyAqdjJpX0dFTkVSQUxfTkFNRVMoWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZCwKLQkJCQlYNTA5VjNfQ1RYICpjdHgsIFNUQUNLX09GKENPTkZfVkFMVUUpICpudmFsKQorR0VORVJBTF9OQU1FUyAqdjJpX0dFTkVSQUxfTkFNRVMoY29uc3QgWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZCwKKwkJCQkgWDUwOVYzX0NUWCAqY3R4LCBTVEFDS19PRihDT05GX1ZBTFVFKSAqbnZhbCkKIHsKIAlHRU5FUkFMX05BTUUgKmdlbjsKIAlHRU5FUkFMX05BTUVTICpnZW5zID0gTlVMTDsKQEAgLTQwOSwyMCArNDE1LDExOCBAQAogCXJldHVybiBOVUxMOwogfQogCi1HRU5FUkFMX05BTUUgKnYyaV9HRU5FUkFMX05BTUUoWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZCwgWDUwOVYzX0NUWCAqY3R4LAotCQkJCQkJCSBDT05GX1ZBTFVFICpjbmYpCitHRU5FUkFMX05BTUUgKnYyaV9HRU5FUkFMX05BTUUoY29uc3QgWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZCwgWDUwOVYzX0NUWCAqY3R4LAorCQkJICAgICAgIENPTkZfVkFMVUUgKmNuZikKIAl7CiAJcmV0dXJuIHYyaV9HRU5FUkFMX05BTUVfZXgoTlVMTCwgbWV0aG9kLCBjdHgsIGNuZiwgMCk7CiAJfQogCi1HRU5FUkFMX05BTUUgKnYyaV9HRU5FUkFMX05BTUVfZXgoR0VORVJBTF9OQU1FICpvdXQsCi0JCQkJWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZCwgWDUwOVYzX0NUWCAqY3R4LAotCQkJCQkJIENPTkZfVkFMVUUgKmNuZiwgaW50IGlzX25jKQorR0VORVJBTF9OQU1FICphMmlfR0VORVJBTF9OQU1FKEdFTkVSQUxfTkFNRSAqb3V0LAorCQkJICAgICAgIGNvbnN0IFg1MDlWM19FWFRfTUVUSE9EICptZXRob2QsIFg1MDlWM19DVFggKmN0eCwKKwkJCSAgICAgICBpbnQgZ2VuX3R5cGUsIGNoYXIgKnZhbHVlLCBpbnQgaXNfbmMpCiAJewogCWNoYXIgaXNfc3RyaW5nID0gMDsKLQlpbnQgdHlwZTsKIAlHRU5FUkFMX05BTUUgKmdlbiA9IE5VTEw7CiAKKwlpZighdmFsdWUpCisJCXsKKwkJWDUwOVYzZXJyKFg1MDlWM19GX0EySV9HRU5FUkFMX05BTUUsWDUwOVYzX1JfTUlTU0lOR19WQUxVRSk7CisJCXJldHVybiBOVUxMOworCQl9CisKKwlpZiAob3V0KQorCQlnZW4gPSBvdXQ7CisJZWxzZQorCQl7CisJCWdlbiA9IEdFTkVSQUxfTkFNRV9uZXcoKTsKKwkJaWYoZ2VuID09IE5VTEwpCisJCQl7CisJCQlYNTA5VjNlcnIoWDUwOVYzX0ZfQTJJX0dFTkVSQUxfTkFNRSxFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CisJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKwkJfQorCisJc3dpdGNoIChnZW5fdHlwZSkKKwkJeworCQljYXNlIEdFTl9VUkk6CisJCWNhc2UgR0VOX0VNQUlMOgorCQljYXNlIEdFTl9ETlM6CisJCWlzX3N0cmluZyA9IDE7CisJCWJyZWFrOworCQkKKwkJY2FzZSBHRU5fUklEOgorCQl7CisJCUFTTjFfT0JKRUNUICpvYmo7CisJCWlmKCEob2JqID0gT0JKX3R4dDJvYmoodmFsdWUsMCkpKQorCQkJeworCQkJWDUwOVYzZXJyKFg1MDlWM19GX0EySV9HRU5FUkFMX05BTUUsWDUwOVYzX1JfQkFEX09CSkVDVCk7CisJCQlFUlJfYWRkX2Vycm9yX2RhdGEoMiwgInZhbHVlPSIsIHZhbHVlKTsKKwkJCWdvdG8gZXJyOworCQkJfQorCQlnZW4tPmQucmlkID0gb2JqOworCQl9CisJCWJyZWFrOworCisJCWNhc2UgR0VOX0lQQUREOgorCQlpZiAoaXNfbmMpCisJCQlnZW4tPmQuaXAgPSBhMmlfSVBBRERSRVNTX05DKHZhbHVlKTsKKwkJZWxzZQorCQkJZ2VuLT5kLmlwID0gYTJpX0lQQUREUkVTUyh2YWx1ZSk7CisJCWlmKGdlbi0+ZC5pcCA9PSBOVUxMKQorCQkJeworCQkJWDUwOVYzZXJyKFg1MDlWM19GX0EySV9HRU5FUkFMX05BTUUsWDUwOVYzX1JfQkFEX0lQX0FERFJFU1MpOworCQkJRVJSX2FkZF9lcnJvcl9kYXRhKDIsICJ2YWx1ZT0iLCB2YWx1ZSk7CisJCQlnb3RvIGVycjsKKwkJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBHRU5fRElSTkFNRToKKwkJaWYgKCFkb19kaXJuYW1lKGdlbiwgdmFsdWUsIGN0eCkpCisJCQl7CisJCQlYNTA5VjNlcnIoWDUwOVYzX0ZfQTJJX0dFTkVSQUxfTkFNRSxYNTA5VjNfUl9ESVJOQU1FX0VSUk9SKTsKKwkJCWdvdG8gZXJyOworCQkJfQorCQlicmVhazsKKworCQljYXNlIEdFTl9PVEhFUk5BTUU6CisJCWlmICghZG9fb3RoZXJuYW1lKGdlbiwgdmFsdWUsIGN0eCkpCisJCQl7CisJCQlYNTA5VjNlcnIoWDUwOVYzX0ZfQTJJX0dFTkVSQUxfTkFNRSxYNTA5VjNfUl9PVEhFUk5BTUVfRVJST1IpOworCQkJZ290byBlcnI7CisJCQl9CisJCWJyZWFrOworCQlkZWZhdWx0OgorCQlYNTA5VjNlcnIoWDUwOVYzX0ZfQTJJX0dFTkVSQUxfTkFNRSxYNTA5VjNfUl9VTlNVUFBPUlRFRF9UWVBFKTsKKwkJZ290byBlcnI7CisJCX0KKworCWlmKGlzX3N0cmluZykKKwkJeworCQlpZighKGdlbi0+ZC5pYTUgPSBNX0FTTjFfSUE1U1RSSU5HX25ldygpKSB8fAorCQkJICAgICAgIUFTTjFfU1RSSU5HX3NldChnZW4tPmQuaWE1LCAodW5zaWduZWQgY2hhciopdmFsdWUsCisJCQkJCSAgICAgICBzdHJsZW4odmFsdWUpKSkKKwkJCXsKKwkJCVg1MDlWM2VycihYNTA5VjNfRl9BMklfR0VORVJBTF9OQU1FLEVSUl9SX01BTExPQ19GQUlMVVJFKTsKKwkJCWdvdG8gZXJyOworCQkJfQorCQl9CisKKwlnZW4tPnR5cGUgPSBnZW5fdHlwZTsKKworCXJldHVybiBnZW47CisKKwllcnI6CisJaWYgKCFvdXQpCisJCUdFTkVSQUxfTkFNRV9mcmVlKGdlbik7CisJcmV0dXJuIE5VTEw7CisJfQorCitHRU5FUkFMX05BTUUgKnYyaV9HRU5FUkFMX05BTUVfZXgoR0VORVJBTF9OQU1FICpvdXQsCisJCQkJICBjb25zdCBYNTA5VjNfRVhUX01FVEhPRCAqbWV0aG9kLAorCQkJCSAgWDUwOVYzX0NUWCAqY3R4LCBDT05GX1ZBTFVFICpjbmYsIGludCBpc19uYykKKwl7CisJaW50IHR5cGU7CisKIAljaGFyICpuYW1lLCAqdmFsdWU7CiAKIAluYW1lID0gY25mLT5uYW1lOwpAQCAtNDM0LDEwMyArNTM4LDI5IEBACiAJCXJldHVybiBOVUxMOwogCQl9CiAKLQlpZiAob3V0KQotCQlnZW4gPSBvdXQ7Ci0JZWxzZQotCQl7Ci0JCWdlbiA9IEdFTkVSQUxfTkFNRV9uZXcoKTsKLQkJaWYoZ2VuID09IE5VTEwpCi0JCQl7Ci0JCQlYNTA5VjNlcnIoWDUwOVYzX0ZfVjJJX0dFTkVSQUxfTkFNRV9FWCxFUlJfUl9NQUxMT0NfRkFJTFVSRSk7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJCX0KLQkJfQotCiAJaWYoIW5hbWVfY21wKG5hbWUsICJlbWFpbCIpKQotCQl7Ci0JCWlzX3N0cmluZyA9IDE7CiAJCXR5cGUgPSBHRU5fRU1BSUw7Ci0JCX0KIAllbHNlIGlmKCFuYW1lX2NtcChuYW1lLCAiVVJJIikpCi0JCXsKLQkJaXNfc3RyaW5nID0gMTsKIAkJdHlwZSA9IEdFTl9VUkk7Ci0JCX0KIAllbHNlIGlmKCFuYW1lX2NtcChuYW1lLCAiRE5TIikpCi0JCXsKLQkJaXNfc3RyaW5nID0gMTsKIAkJdHlwZSA9IEdFTl9ETlM7Ci0JCX0KIAllbHNlIGlmKCFuYW1lX2NtcChuYW1lLCAiUklEIikpCi0JCXsKLQkJQVNOMV9PQkpFQ1QgKm9iajsKLQkJaWYoIShvYmogPSBPQkpfdHh0Mm9iaih2YWx1ZSwwKSkpCi0JCQl7Ci0JCQlYNTA5VjNlcnIoWDUwOVYzX0ZfVjJJX0dFTkVSQUxfTkFNRV9FWCxYNTA5VjNfUl9CQURfT0JKRUNUKTsKLQkJCUVSUl9hZGRfZXJyb3JfZGF0YSgyLCAidmFsdWU9IiwgdmFsdWUpOwotCQkJZ290byBlcnI7Ci0JCQl9Ci0JCWdlbi0+ZC5yaWQgPSBvYmo7CiAJCXR5cGUgPSBHRU5fUklEOwotCQl9CiAJZWxzZSBpZighbmFtZV9jbXAobmFtZSwgIklQIikpCi0JCXsKLQkJaWYgKGlzX25jKQotCQkJZ2VuLT5kLmlwID0gYTJpX0lQQUREUkVTU19OQyh2YWx1ZSk7Ci0JCWVsc2UKLQkJCWdlbi0+ZC5pcCA9IGEyaV9JUEFERFJFU1ModmFsdWUpOwotCQlpZihnZW4tPmQuaXAgPT0gTlVMTCkKLQkJCXsKLQkJCVg1MDlWM2VycihYNTA5VjNfRl9WMklfR0VORVJBTF9OQU1FX0VYLFg1MDlWM19SX0JBRF9JUF9BRERSRVNTKTsKLQkJCUVSUl9hZGRfZXJyb3JfZGF0YSgyLCAidmFsdWU9IiwgdmFsdWUpOwotCQkJZ290byBlcnI7Ci0JCQl9CiAJCXR5cGUgPSBHRU5fSVBBREQ7Ci0JCX0KIAllbHNlIGlmKCFuYW1lX2NtcChuYW1lLCAiZGlyTmFtZSIpKQotCQl7CiAJCXR5cGUgPSBHRU5fRElSTkFNRTsKLQkJaWYgKCFkb19kaXJuYW1lKGdlbiwgdmFsdWUsIGN0eCkpCi0JCQl7Ci0JCQlYNTA5VjNlcnIoWDUwOVYzX0ZfVjJJX0dFTkVSQUxfTkFNRV9FWCxYNTA5VjNfUl9ESVJOQU1FX0VSUk9SKTsKLQkJCWdvdG8gZXJyOwotCQkJfQotCQl9CiAJZWxzZSBpZighbmFtZV9jbXAobmFtZSwgIm90aGVyTmFtZSIpKQotCQl7Ci0JCWlmICghZG9fb3RoZXJuYW1lKGdlbiwgdmFsdWUsIGN0eCkpCi0JCQl7Ci0JCQlYNTA5VjNlcnIoWDUwOVYzX0ZfVjJJX0dFTkVSQUxfTkFNRV9FWCxYNTA5VjNfUl9PVEhFUk5BTUVfRVJST1IpOwotCQkJZ290byBlcnI7Ci0JCQl9CiAJCXR5cGUgPSBHRU5fT1RIRVJOQU1FOwotCQl9CiAJZWxzZQogCQl7CiAJCVg1MDlWM2VycihYNTA5VjNfRl9WMklfR0VORVJBTF9OQU1FX0VYLFg1MDlWM19SX1VOU1VQUE9SVEVEX09QVElPTik7CiAJCUVSUl9hZGRfZXJyb3JfZGF0YSgyLCAibmFtZT0iLCBuYW1lKTsKLQkJZ290byBlcnI7CisJCXJldHVybiBOVUxMOwogCQl9CiAKLQlpZihpc19zdHJpbmcpCi0JCXsKLQkJaWYoIShnZW4tPmQuaWE1ID0gTV9BU04xX0lBNVNUUklOR19uZXcoKSkgfHwKLQkJCSAgICAgICFBU04xX1NUUklOR19zZXQoZ2VuLT5kLmlhNSwgKHVuc2lnbmVkIGNoYXIqKXZhbHVlLAotCQkJCQkgICAgICAgc3RybGVuKHZhbHVlKSkpCi0JCQl7Ci0JCQlYNTA5VjNlcnIoWDUwOVYzX0ZfVjJJX0dFTkVSQUxfTkFNRV9FWCxFUlJfUl9NQUxMT0NfRkFJTFVSRSk7Ci0JCQlnb3RvIGVycjsKLQkJCX0KLQkJfQorCXJldHVybiBhMmlfR0VORVJBTF9OQU1FKG91dCwgbWV0aG9kLCBjdHgsIHR5cGUsIHZhbHVlLCBpc19uYyk7CiAKLQlnZW4tPnR5cGUgPSB0eXBlOwotCi0JcmV0dXJuIGdlbjsKLQotCWVycjoKLQlpZiAoIW91dCkKLQkJR0VORVJBTF9OQU1FX2ZyZWUoZ2VuKTsKLQlyZXR1cm4gTlVMTDsKIAl9CiAKIHN0YXRpYyBpbnQgZG9fb3RoZXJuYW1lKEdFTkVSQUxfTkFNRSAqZ2VuLCBjaGFyICp2YWx1ZSwgWDUwOVYzX0NUWCAqY3R4KQpAQCAtNTc4LDcgKzYwOCw2IEBACiAJaWYgKCFyZXQpCiAJCVg1MDlfTkFNRV9mcmVlKG5tKTsKIAlnZW4tPmQuZGlybiA9IG5tOwotCiAJWDUwOVYzX3NlY3Rpb25fZnJlZShjdHgsIHNrKTsKIAkJCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2NyeXB0by94NTA5djMvdjNfYXNpZC5jIGIvY3J5cHRvL3g1MDl2My92M19hc2lkLmMKaW5kZXggYWJkNDk3ZS4uNTY3MDJmOCAxMDA2NDQKLS0tIGEvY3J5cHRvL3g1MDl2My92M19hc2lkLmMKKysrIGIvY3J5cHRvL3g1MDl2My92M19hc2lkLmMKQEAgLTE1Miw3ICsxNTIsNyBAQAogLyoKICAqIGkyciBtZXRob2QgZm9yIGFuIEFTSWRlbnRpZmllciBleHRlbnNpb24uCiAgKi8KLXN0YXRpYyBpbnQgaTJyX0FTSWRlbnRpZmllcnMoWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZCwKK3N0YXRpYyBpbnQgaTJyX0FTSWRlbnRpZmllcnMoY29uc3QgWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZCwKIAkJCSAgICAgdm9pZCAqZXh0LAogCQkJICAgICBCSU8gKm91dCwKIAkJCSAgICAgaW50IGluZGVudCkKQEAgLTQ2Niw3ICs0NjYsNyBAQAogCWJyZWFrOwogICAgICAgfQogICAgICAgQVNJZE9yUmFuZ2VfZnJlZShiKTsKLSAgICAgICh2b2lkKXNrX0FTSWRPclJhbmdlX2RlbGV0ZShjaG9pY2UtPnUuYXNJZHNPclJhbmdlcywgaSArIDEpOworICAgICAgc2tfQVNJZE9yUmFuZ2VfZGVsZXRlKGNob2ljZS0+dS5hc0lkc09yUmFuZ2VzLCBpICsgMSk7CiAgICAgICBpLS07CiAgICAgICBjb250aW51ZTsKICAgICB9CkBAIC00OTUsNyArNDk1LDcgQEAKIC8qCiAgKiB2MmkgbWV0aG9kIGZvciBhbiBBU0lkZW50aWZpZXIgZXh0ZW5zaW9uLgogICovCi1zdGF0aWMgdm9pZCAqdjJpX0FTSWRlbnRpZmllcnMoc3RydWN0IHYzX2V4dF9tZXRob2QgKm1ldGhvZCwKK3N0YXRpYyB2b2lkICp2MmlfQVNJZGVudGlmaWVycyhjb25zdCBzdHJ1Y3QgdjNfZXh0X21ldGhvZCAqbWV0aG9kLAogCQkJICAgICAgIHN0cnVjdCB2M19leHRfY3R4ICpjdHgsCiAJCQkgICAgICAgU1RBQ0tfT0YoQ09ORl9WQUxVRSkgKnZhbHVlcykKIHsKQEAgLTcwNyw3ICs3MDcsNyBAQAogewogICBBU0lkT3JSYW5nZXMgKmNoaWxkX2FzID0gTlVMTCwgKmNoaWxkX3JkaSA9IE5VTEw7CiAgIGludCBpLCByZXQgPSAxLCBpbmhlcml0X2FzID0gMCwgaW5oZXJpdF9yZGkgPSAwOwotICBYNTA5ICp4ID0gTlVMTDsKKyAgWDUwOSAqeDsKIAogICBhc3NlcnQoY2hhaW4gIT0gTlVMTCAmJiBza19YNTA5X251bShjaGFpbikgPiAwKTsKICAgYXNzZXJ0KGN0eCAhPSBOVUxMIHx8IGV4dCAhPSBOVUxMKTsKQEAgLTcyMCw2ICs3MjAsNyBAQAogICAgKi8KICAgaWYgKGV4dCAhPSBOVUxMKSB7CiAgICAgaSA9IC0xOworICAgIHggPSBOVUxMOwogICB9IGVsc2UgewogICAgIGkgPSAwOwogICAgIHggPSBza19YNTA5X3ZhbHVlKGNoYWluLCBpKTsKQEAgLTc5OSw2ICs4MDAsNyBAQAogICAvKgogICAgKiBUcnVzdCBhbmNob3IgY2FuJ3QgaW5oZXJpdC4KICAgICovCisgIGFzc2VydCh4ICE9IE5VTEwpOwogICBpZiAoeC0+cmZjMzc3OV9hc2lkICE9IE5VTEwpIHsKICAgICBpZiAoeC0+cmZjMzc3OV9hc2lkLT5hc251bSAhPSBOVUxMICYmCiAJeC0+cmZjMzc3OV9hc2lkLT5hc251bS0+dHlwZSA9PSBBU0lkZW50aWZpZXJDaG9pY2VfaW5oZXJpdCkKZGlmZiAtLWdpdCBhL2NyeXB0by94NTA5djMvdjNfY29uZi5jIGIvY3J5cHRvL3g1MDl2My92M19jb25mLmMKaW5kZXggMTFlYjZiNy4uNjczMGY5YSAxMDA2NDQKLS0tIGEvY3J5cHRvL3g1MDl2My92M19jb25mLmMKKysrIGIvY3J5cHRvL3g1MDl2My92M19jb25mLmMKQEAgLTcyLDE0ICs3MiwxNCBAQAogc3RhdGljIFg1MDlfRVhURU5TSU9OICp2M19nZW5lcmljX2V4dGVuc2lvbihjb25zdCBjaGFyICpleHQsIGNoYXIgKnZhbHVlLCBpbnQgY3JpdCwgaW50IHR5cGUsIFg1MDlWM19DVFggKmN0eCk7CiBzdGF0aWMgY2hhciAqY29uZl9saGFzaF9nZXRfc3RyaW5nKHZvaWQgKmRiLCBjaGFyICpzZWN0aW9uLCBjaGFyICp2YWx1ZSk7CiBzdGF0aWMgU1RBQ0tfT0YoQ09ORl9WQUxVRSkgKmNvbmZfbGhhc2hfZ2V0X3NlY3Rpb24odm9pZCAqZGIsIGNoYXIgKnNlY3Rpb24pOwotc3RhdGljIFg1MDlfRVhURU5TSU9OICpkb19leHRfaTJkKFg1MDlWM19FWFRfTUVUSE9EICptZXRob2QsIGludCBleHRfbmlkLAotCQkJCQkJIGludCBjcml0LCB2b2lkICpleHRfc3RydWMpOworc3RhdGljIFg1MDlfRVhURU5TSU9OICpkb19leHRfaTJkKGNvbnN0IFg1MDlWM19FWFRfTUVUSE9EICptZXRob2QsIGludCBleHRfbmlkLAorCQkJCSAgaW50IGNyaXQsIHZvaWQgKmV4dF9zdHJ1Yyk7CiBzdGF0aWMgdW5zaWduZWQgY2hhciAqZ2VuZXJpY19hc24xKGNoYXIgKnZhbHVlLCBYNTA5VjNfQ1RYICpjdHgsIGxvbmcgKmV4dF9sZW4pOwogLyogQ09ORiAqY29uZjogIENvbmZpZyBmaWxlICAgICovCiAvKiBjaGFyICpuYW1lOiAgTmFtZSAgICAqLwogLyogY2hhciAqdmFsdWU6ICBWYWx1ZSAgICAqLwogWDUwOV9FWFRFTlNJT04gKlg1MDlWM19FWFRfbmNvbmYoQ09ORiAqY29uZiwgWDUwOVYzX0NUWCAqY3R4LCBjaGFyICpuYW1lLAotCSAgICAgY2hhciAqdmFsdWUpCisJCQkJIGNoYXIgKnZhbHVlKQogCXsKIAlpbnQgY3JpdDsKIAlpbnQgZXh0X3R5cGU7CkBAIC05OSw3ICs5OSw3IEBACiAvKiBDT05GICpjb25mOiAgQ29uZmlnIGZpbGUgICAgKi8KIC8qIGNoYXIgKnZhbHVlOiAgVmFsdWUgICAgKi8KIFg1MDlfRVhURU5TSU9OICpYNTA5VjNfRVhUX25jb25mX25pZChDT05GICpjb25mLCBYNTA5VjNfQ1RYICpjdHgsIGludCBleHRfbmlkLAotCSAgICAgY2hhciAqdmFsdWUpCisJCQkJICAgICBjaGFyICp2YWx1ZSkKIAl7CiAJaW50IGNyaXQ7CiAJaW50IGV4dF90eXBlOwpAQCAtMTEzLDkgKzExMyw5IEBACiAvKiBDT05GICpjb25mOiAgQ29uZmlnIGZpbGUgICAgKi8KIC8qIGNoYXIgKnZhbHVlOiAgVmFsdWUgICAgKi8KIHN0YXRpYyBYNTA5X0VYVEVOU0lPTiAqZG9fZXh0X25jb25mKENPTkYgKmNvbmYsIFg1MDlWM19DVFggKmN0eCwgaW50IGV4dF9uaWQsCi0JICAgICBpbnQgY3JpdCwgY2hhciAqdmFsdWUpCisJCQkJICAgIGludCBjcml0LCBjaGFyICp2YWx1ZSkKIAl7Ci0JWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZDsKKwljb25zdCBYNTA5VjNfRVhUX01FVEhPRCAqbWV0aG9kOwogCVg1MDlfRVhURU5TSU9OICpleHQ7CiAJU1RBQ0tfT0YoQ09ORl9WQUxVRSkgKm52YWw7CiAJdm9pZCAqZXh0X3N0cnVjOwpAQCAtMTcyLDggKzE3Miw4IEBACiAKIAl9CiAKLXN0YXRpYyBYNTA5X0VYVEVOU0lPTiAqZG9fZXh0X2kyZChYNTA5VjNfRVhUX01FVEhPRCAqbWV0aG9kLCBpbnQgZXh0X25pZCwKLQkJCQkJCSBpbnQgY3JpdCwgdm9pZCAqZXh0X3N0cnVjKQorc3RhdGljIFg1MDlfRVhURU5TSU9OICpkb19leHRfaTJkKGNvbnN0IFg1MDlWM19FWFRfTUVUSE9EICptZXRob2QsIGludCBleHRfbmlkLAorCQkJCSAgaW50IGNyaXQsIHZvaWQgKmV4dF9zdHJ1YykKIAl7CiAJdW5zaWduZWQgY2hhciAqZXh0X2RlcjsKIAlpbnQgZXh0X2xlbjsKQEAgLTIxNCw3ICsyMTQsNyBAQAogCiBYNTA5X0VYVEVOU0lPTiAqWDUwOVYzX0VYVF9pMmQoaW50IGV4dF9uaWQsIGludCBjcml0LCB2b2lkICpleHRfc3RydWMpCiAJewotCVg1MDlWM19FWFRfTUVUSE9EICptZXRob2Q7CisJY29uc3QgWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZDsKIAlpZiAoIShtZXRob2QgPSBYNTA5VjNfRVhUX2dldF9uaWQoZXh0X25pZCkpKSB7CiAJCVg1MDlWM2VycihYNTA5VjNfRl9YNTA5VjNfRVhUX0kyRCxYNTA5VjNfUl9VTktOT1dOX0VYVEVOU0lPTik7CiAJCXJldHVybiBOVUxMOwpAQCAtMjU4LDcgKzI1OCw4IEBACiAKIC8qIENyZWF0ZSBhIGdlbmVyaWMgZXh0ZW5zaW9uOiBmb3Igbm93IGp1c3QgaGFuZGxlIERFUiB0eXBlICovCiBzdGF0aWMgWDUwOV9FWFRFTlNJT04gKnYzX2dlbmVyaWNfZXh0ZW5zaW9uKGNvbnN0IGNoYXIgKmV4dCwgY2hhciAqdmFsdWUsCi0JICAgICBpbnQgY3JpdCwgaW50IGdlbl90eXBlLCBYNTA5VjNfQ1RYICpjdHgpCisJCQkJCSAgICBpbnQgY3JpdCwgaW50IGdlbl90eXBlLAorCQkJCQkgICAgWDUwOVYzX0NUWCAqY3R4KQogCXsKIAl1bnNpZ25lZCBjaGFyICpleHRfZGVyPU5VTEw7CiAJbG9uZyBleHRfbGVuOwpAQCAtMzIyLDcgKzMyMyw3IEBACiAKIAogaW50IFg1MDlWM19FWFRfYWRkX25jb25mX3NrKENPTkYgKmNvbmYsIFg1MDlWM19DVFggKmN0eCwgY2hhciAqc2VjdGlvbiwKLQkgICAgIFNUQUNLX09GKFg1MDlfRVhURU5TSU9OKSAqKnNrKQorCQkJICAgIFNUQUNLX09GKFg1MDlfRVhURU5TSU9OKSAqKnNrKQogCXsKIAlYNTA5X0VYVEVOU0lPTiAqZXh0OwogCVNUQUNLX09GKENPTkZfVkFMVUUpICpudmFsOwpAQCAtMzQzLDcgKzM0NCw3IEBACiAvKiBDb252ZW5pZW5jZSBmdW5jdGlvbnMgdG8gYWRkIGV4dGVuc2lvbnMgdG8gYSBjZXJ0aWZpY2F0ZSwgQ1JMIGFuZCByZXF1ZXN0ICovCiAKIGludCBYNTA5VjNfRVhUX2FkZF9uY29uZihDT05GICpjb25mLCBYNTA5VjNfQ1RYICpjdHgsIGNoYXIgKnNlY3Rpb24sCi0JICAgICBYNTA5ICpjZXJ0KQorCQkJIFg1MDkgKmNlcnQpCiAJewogCVNUQUNLX09GKFg1MDlfRVhURU5TSU9OKSAqKnNrID0gTlVMTDsKIAlpZiAoY2VydCkKQEAgLTM1NCw3ICszNTUsNyBAQAogLyogU2FtZSBhcyBhYm92ZSBidXQgZm9yIGEgQ1JMICovCiAKIGludCBYNTA5VjNfRVhUX0NSTF9hZGRfbmNvbmYoQ09ORiAqY29uZiwgWDUwOVYzX0NUWCAqY3R4LCBjaGFyICpzZWN0aW9uLAotCSAgICAgWDUwOV9DUkwgKmNybCkKKwkJCSAgICAgWDUwOV9DUkwgKmNybCkKIAl7CiAJU1RBQ0tfT0YoWDUwOV9FWFRFTlNJT04pICoqc2sgPSBOVUxMOwogCWlmIChjcmwpCkBAIC00NDMsNyArNDQ0LDcgQEAKIAl9CiAKIHZvaWQgWDUwOVYzX3NldF9jdHgoWDUwOVYzX0NUWCAqY3R4LCBYNTA5ICppc3N1ZXIsIFg1MDkgKnN1YmosIFg1MDlfUkVRICpyZXEsCi0JICAgICBYNTA5X0NSTCAqY3JsLCBpbnQgZmxhZ3MpCisJCSAgICBYNTA5X0NSTCAqY3JsLCBpbnQgZmxhZ3MpCiAJewogCWN0eC0+aXNzdWVyX2NlcnQgPSBpc3N1ZXI7CiAJY3R4LT5zdWJqZWN0X2NlcnQgPSBzdWJqOwpAQCAtNDU0LDggKzQ1NSw4IEBACiAKIC8qIE9sZCBjb25mIGNvbXBhdGliaWxpdHkgZnVuY3Rpb25zICovCiAKLVg1MDlfRVhURU5TSU9OICpYNTA5VjNfRVhUX2NvbmYoTEhBU0ggKmNvbmYsIFg1MDlWM19DVFggKmN0eCwgY2hhciAqbmFtZSwKLQkgICAgIGNoYXIgKnZhbHVlKQorWDUwOV9FWFRFTlNJT04gKlg1MDlWM19FWFRfY29uZihMSEFTSF9PRihDT05GX1ZBTFVFKSAqY29uZiwgWDUwOVYzX0NUWCAqY3R4LAorCQkJCWNoYXIgKm5hbWUsIGNoYXIgKnZhbHVlKQogCXsKIAlDT05GIGN0bXA7CiAJQ09ORl9zZXRfbmNvbmYoJmN0bXAsIGNvbmYpOwpAQCAtNDY0LDggKzQ2NSw4IEBACiAKIC8qIExIQVNIICpjb25mOiAgQ29uZmlnIGZpbGUgICAgKi8KIC8qIGNoYXIgKnZhbHVlOiAgVmFsdWUgICAgKi8KLVg1MDlfRVhURU5TSU9OICpYNTA5VjNfRVhUX2NvbmZfbmlkKExIQVNIICpjb25mLCBYNTA5VjNfQ1RYICpjdHgsIGludCBleHRfbmlkLAotCSAgICAgY2hhciAqdmFsdWUpCitYNTA5X0VYVEVOU0lPTiAqWDUwOVYzX0VYVF9jb25mX25pZChMSEFTSF9PRihDT05GX1ZBTFVFKSAqY29uZiwgWDUwOVYzX0NUWCAqY3R4LAorCQkJCSAgICBpbnQgZXh0X25pZCwgY2hhciAqdmFsdWUpCiAJewogCUNPTkYgY3RtcDsKIAlDT05GX3NldF9uY29uZigmY3RtcCwgY29uZik7CkBAIC00ODksMTQgKzQ5MCwxNCBAQAogTlVMTAogfTsKIAotdm9pZCBYNTA5VjNfc2V0X2NvbmZfbGhhc2goWDUwOVYzX0NUWCAqY3R4LCBMSEFTSCAqbGhhc2gpCit2b2lkIFg1MDlWM19zZXRfY29uZl9saGFzaChYNTA5VjNfQ1RYICpjdHgsIExIQVNIX09GKENPTkZfVkFMVUUpICpsaGFzaCkKIAl7CiAJY3R4LT5kYl9tZXRoID0gJmNvbmZfbGhhc2hfbWV0aG9kOwogCWN0eC0+ZGIgPSBsaGFzaDsKIAl9CiAKLWludCBYNTA5VjNfRVhUX2FkZF9jb25mKExIQVNIICpjb25mLCBYNTA5VjNfQ1RYICpjdHgsIGNoYXIgKnNlY3Rpb24sCi0JICAgICBYNTA5ICpjZXJ0KQoraW50IFg1MDlWM19FWFRfYWRkX2NvbmYoTEhBU0hfT0YoQ09ORl9WQUxVRSkgKmNvbmYsIFg1MDlWM19DVFggKmN0eCwKKwkJCWNoYXIgKnNlY3Rpb24sIFg1MDkgKmNlcnQpCiAJewogCUNPTkYgY3RtcDsKIAlDT05GX3NldF9uY29uZigmY3RtcCwgY29uZik7CkBAIC01MDUsOCArNTA2LDggQEAKIAogLyogU2FtZSBhcyBhYm92ZSBidXQgZm9yIGEgQ1JMICovCiAKLWludCBYNTA5VjNfRVhUX0NSTF9hZGRfY29uZihMSEFTSCAqY29uZiwgWDUwOVYzX0NUWCAqY3R4LCBjaGFyICpzZWN0aW9uLAotCSAgICAgWDUwOV9DUkwgKmNybCkKK2ludCBYNTA5VjNfRVhUX0NSTF9hZGRfY29uZihMSEFTSF9PRihDT05GX1ZBTFVFKSAqY29uZiwgWDUwOVYzX0NUWCAqY3R4LAorCQkJICAgIGNoYXIgKnNlY3Rpb24sIFg1MDlfQ1JMICpjcmwpCiAJewogCUNPTkYgY3RtcDsKIAlDT05GX3NldF9uY29uZigmY3RtcCwgY29uZik7CkBAIC01MTUsOCArNTE2LDggQEAKIAogLyogQWRkIGV4dGVuc2lvbnMgdG8gY2VydGlmaWNhdGUgcmVxdWVzdCAqLwogCi1pbnQgWDUwOVYzX0VYVF9SRVFfYWRkX2NvbmYoTEhBU0ggKmNvbmYsIFg1MDlWM19DVFggKmN0eCwgY2hhciAqc2VjdGlvbiwKLQkgICAgIFg1MDlfUkVRICpyZXEpCitpbnQgWDUwOVYzX0VYVF9SRVFfYWRkX2NvbmYoTEhBU0hfT0YoQ09ORl9WQUxVRSkgKmNvbmYsIFg1MDlWM19DVFggKmN0eCwKKwkJCSAgICBjaGFyICpzZWN0aW9uLCBYNTA5X1JFUSAqcmVxKQogCXsKIAlDT05GIGN0bXA7CiAJQ09ORl9zZXRfbmNvbmYoJmN0bXAsIGNvbmYpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3g1MDl2My92M19jcG9scy5jIGIvY3J5cHRvL3g1MDl2My92M19jcG9scy5jCmluZGV4IGFkMDUwNmQuLjFmMDc5OGIgMTAwNjQ0Ci0tLSBhL2NyeXB0by94NTA5djMvdjNfY3BvbHMuYworKysgYi9jcnlwdG8veDUwOXYzL3YzX2Nwb2xzLmMKQEAgLTQ1MCw1ICs0NTAsOCBAQAogCWVsc2UKIAkJQklPX3ByaW50ZihvdXQsICIlKnNObyBRdWFsaWZpZXJzXG4iLCBpbmRlbnQgKyAyLCAiIik7CiAJfQotCQorCisKIElNUExFTUVOVF9TVEFDS19PRihYNTA5X1BPTElDWV9OT0RFKQorSU1QTEVNRU5UX1NUQUNLX09GKFg1MDlfUE9MSUNZX0RBVEEpCisKZGlmZiAtLWdpdCBhL2NyeXB0by94NTA5djMvdjNfY3JsZC5jIGIvY3J5cHRvL3g1MDl2My92M19jcmxkLmMKaW5kZXggMTgxYTg5Ny4uNzkwYTZkZCAxMDA2NDQKLS0tIGEvY3J5cHRvL3g1MDl2My92M19jcmxkLmMKKysrIGIvY3J5cHRvL3g1MDl2My92M19jcmxkLmMKQEAgLTMsNyArMyw3IEBACiAgKiBwcm9qZWN0IDE5OTkuCiAgKi8KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKGMpIDE5OTkgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwOCBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjMsNDUgKzYzLDI1NCBAQAogI2luY2x1ZGUgPG9wZW5zc2wvYXNuMXQuaD4KICNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgogCi1zdGF0aWMgU1RBQ0tfT0YoQ09ORl9WQUxVRSkgKmkydl9jcmxkKFg1MDlWM19FWFRfTUVUSE9EICptZXRob2QsCi0JCVNUQUNLX09GKERJU1RfUE9JTlQpICpjcmxkLCBTVEFDS19PRihDT05GX1ZBTFVFKSAqZXh0bGlzdCk7Ci1zdGF0aWMgU1RBQ0tfT0YoRElTVF9QT0lOVCkgKnYyaV9jcmxkKFg1MDlWM19FWFRfTUVUSE9EICptZXRob2QsCi0JCQkJWDUwOVYzX0NUWCAqY3R4LCBTVEFDS19PRihDT05GX1ZBTFVFKSAqbnZhbCk7CitzdGF0aWMgdm9pZCAqdjJpX2NybGQoY29uc3QgWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZCwKKwkJICAgICAgWDUwOVYzX0NUWCAqY3R4LCBTVEFDS19PRihDT05GX1ZBTFVFKSAqbnZhbCk7CitzdGF0aWMgaW50IGkycl9jcmxkcChjb25zdCBYNTA5VjNfRVhUX01FVEhPRCAqbWV0aG9kLCB2b2lkICpwY3JsZHAsIEJJTyAqb3V0LAorCQkgICAgIGludCBpbmRlbnQpOwogCi1jb25zdCBYNTA5VjNfRVhUX01FVEhPRCB2M19jcmxkID0gewotTklEX2NybF9kaXN0cmlidXRpb25fcG9pbnRzLCBYNTA5VjNfRVhUX01VTFRJTElORSwgQVNOMV9JVEVNX3JlZihDUkxfRElTVF9QT0lOVFMpLAotMCwwLDAsMCwKLTAsMCwKLShYNTA5VjNfRVhUX0kyVilpMnZfY3JsZCwKLShYNTA5VjNfRVhUX1YySSl2MmlfY3JsZCwKLTAsMCwKLU5VTEwKK2NvbnN0IFg1MDlWM19FWFRfTUVUSE9EIHYzX2NybGQgPQorCXsKKwlOSURfY3JsX2Rpc3RyaWJ1dGlvbl9wb2ludHMsIDAsIEFTTjFfSVRFTV9yZWYoQ1JMX0RJU1RfUE9JTlRTKSwKKwkwLDAsMCwwLAorCTAsMCwKKwkwLAorCXYyaV9jcmxkLAorCWkycl9jcmxkcCwwLAorCU5VTEwKKwl9OworCitjb25zdCBYNTA5VjNfRVhUX01FVEhPRCB2M19mcmVzaGVzdF9jcmwgPQorCXsKKwlOSURfZnJlc2hlc3RfY3JsLCAwLCBBU04xX0lURU1fcmVmKENSTF9ESVNUX1BPSU5UUyksCisJMCwwLDAsMCwKKwkwLDAsCisJMCwKKwl2MmlfY3JsZCwKKwlpMnJfY3JsZHAsMCwKKwlOVUxMCisJfTsKKworc3RhdGljIFNUQUNLX09GKEdFTkVSQUxfTkFNRSkgKmduYW1lc19mcm9tX3NlY3RuYW1lKFg1MDlWM19DVFggKmN0eCwgY2hhciAqc2VjdCkKKwl7CisJU1RBQ0tfT0YoQ09ORl9WQUxVRSkgKmduc2VjdDsKKwlTVEFDS19PRihHRU5FUkFMX05BTUUpICpnZW5zOworCWlmICgqc2VjdCA9PSAnQCcpCisJCWduc2VjdCA9IFg1MDlWM19nZXRfc2VjdGlvbihjdHgsIHNlY3QgKyAxKTsKKwllbHNlCisJCWduc2VjdCA9IFg1MDlWM19wYXJzZV9saXN0KHNlY3QpOworCWlmICghZ25zZWN0KQorCQl7CisJCVg1MDlWM2VycihYNTA5VjNfRl9HTkFNRVNfRlJPTV9TRUNUTkFNRSwKKwkJCQkJCVg1MDlWM19SX1NFQ1RJT05fTk9UX0ZPVU5EKTsKKwkJcmV0dXJuIE5VTEw7CisJCX0KKwlnZW5zID0gdjJpX0dFTkVSQUxfTkFNRVMoTlVMTCwgY3R4LCBnbnNlY3QpOworCWlmICgqc2VjdCA9PSAnQCcpCisJCVg1MDlWM19zZWN0aW9uX2ZyZWUoY3R4LCBnbnNlY3QpOworCWVsc2UKKwkJc2tfQ09ORl9WQUxVRV9wb3BfZnJlZShnbnNlY3QsIFg1MDlWM19jb25mX2ZyZWUpOworCXJldHVybiBnZW5zOworCX0KKworc3RhdGljIGludCBzZXRfZGlzdF9wb2ludF9uYW1lKERJU1RfUE9JTlRfTkFNRSAqKnBkcCwgWDUwOVYzX0NUWCAqY3R4LAorCQkJCQkJCUNPTkZfVkFMVUUgKmNuZikKKwl7CisJU1RBQ0tfT0YoR0VORVJBTF9OQU1FKSAqZm5tID0gTlVMTDsKKwlTVEFDS19PRihYNTA5X05BTUVfRU5UUlkpICpybm0gPSBOVUxMOworCWlmICghc3RybmNtcChjbmYtPm5hbWUsICJmdWxsbmFtZSIsIDkpKQorCQl7CisJCWZubSA9IGduYW1lc19mcm9tX3NlY3RuYW1lKGN0eCwgY25mLT52YWx1ZSk7CisJCWlmICghZm5tKQorCQkJZ290byBlcnI7CisJCX0KKwllbHNlIGlmICghc3RyY21wKGNuZi0+bmFtZSwgInJlbGF0aXZlbmFtZSIpKQorCQl7CisJCWludCByZXQ7CisJCVNUQUNLX09GKENPTkZfVkFMVUUpICpkbnNlY3Q7CisJCVg1MDlfTkFNRSAqbm07CisJCW5tID0gWDUwOV9OQU1FX25ldygpOworCQlpZiAoIW5tKQorCQkJcmV0dXJuIC0xOworCQlkbnNlY3QgPSBYNTA5VjNfZ2V0X3NlY3Rpb24oY3R4LCBjbmYtPnZhbHVlKTsKKwkJaWYgKCFkbnNlY3QpCisJCQl7CisJCQlYNTA5VjNlcnIoWDUwOVYzX0ZfU0VUX0RJU1RfUE9JTlRfTkFNRSwKKwkJCQkJCVg1MDlWM19SX1NFQ1RJT05fTk9UX0ZPVU5EKTsKKwkJCXJldHVybiAtMTsKKwkJCX0KKwkJcmV0ID0gWDUwOVYzX05BTUVfZnJvbV9zZWN0aW9uKG5tLCBkbnNlY3QsIE1CU1RSSU5HX0FTQyk7CisJCVg1MDlWM19zZWN0aW9uX2ZyZWUoY3R4LCBkbnNlY3QpOworCQlybm0gPSBubS0+ZW50cmllczsKKwkJbm0tPmVudHJpZXMgPSBOVUxMOworCQlYNTA5X05BTUVfZnJlZShubSk7CisJCWlmICghcmV0IHx8IHNrX1g1MDlfTkFNRV9FTlRSWV9udW0ocm5tKSA8PSAwKQorCQkJZ290byBlcnI7CisJCS8qIFNpbmNlIGl0cyBhIG5hbWUgZnJhZ21lbnQgY2FuJ3QgaGF2ZSBtb3JlIHRoYW4gb25lCisJCSAqIFJETlNlcXVlbmNlCisJCSAqLworCQlpZiAoc2tfWDUwOV9OQU1FX0VOVFJZX3ZhbHVlKHJubSwKKwkJCQlza19YNTA5X05BTUVfRU5UUllfbnVtKHJubSkgLSAxKS0+c2V0KQorCQkJeworCQkJWDUwOVYzZXJyKFg1MDlWM19GX1NFVF9ESVNUX1BPSU5UX05BTUUsCisJCQkJCQlYNTA5VjNfUl9JTlZBTElEX01VTFRJUExFX1JETlMpOworCQkJZ290byBlcnI7CisJCQl9CisJCX0KKwllbHNlCisJCXJldHVybiAwOworCisJaWYgKCpwZHApCisJCXsKKwkJWDUwOVYzZXJyKFg1MDlWM19GX1NFVF9ESVNUX1BPSU5UX05BTUUsCisJCQkJCQlYNTA5VjNfUl9ESVNUUE9JTlRfQUxSRUFEWV9TRVQpOworCQlnb3RvIGVycjsKKwkJfQorCisJKnBkcCA9IERJU1RfUE9JTlRfTkFNRV9uZXcoKTsKKwlpZiAoISpwZHApCisJCWdvdG8gZXJyOworCWlmIChmbm0pCisJCXsKKwkJKCpwZHApLT50eXBlID0gMDsKKwkJKCpwZHApLT5uYW1lLmZ1bGxuYW1lID0gZm5tOworCQl9CisJZWxzZQorCQl7CisJCSgqcGRwKS0+dHlwZSA9IDE7CisJCSgqcGRwKS0+bmFtZS5yZWxhdGl2ZW5hbWUgPSBybm07CisJCX0KKworCXJldHVybiAxOworCQkKKwllcnI6CisJaWYgKGZubSkKKwkJc2tfR0VORVJBTF9OQU1FX3BvcF9mcmVlKGZubSwgR0VORVJBTF9OQU1FX2ZyZWUpOworCWlmIChybm0pCisJCXNrX1g1MDlfTkFNRV9FTlRSWV9wb3BfZnJlZShybm0sIFg1MDlfTkFNRV9FTlRSWV9mcmVlKTsKKwlyZXR1cm4gLTE7CisJfQorCitzdGF0aWMgY29uc3QgQklUX1NUUklOR19CSVROQU1FIHJlYXNvbl9mbGFnc1tdID0geworezAsICJVbnVzZWQiLCAidW51c2VkIn0sCit7MSwgIktleSBDb21wcm9taXNlIiwgImtleUNvbXByb21pc2UifSwKK3syLCAiQ0EgQ29tcHJvbWlzZSIsICJDQUNvbXByb21pc2UifSwKK3szLCAiQWZmaWxpYXRpb24gQ2hhbmdlZCIsICJhZmZpbGlhdGlvbkNoYW5nZWQifSwKK3s0LCAiU3VwZXJzZWRlZCIsICJzdXBlcnNlZGVkIn0sCit7NSwgIkNlc3NhdGlvbiBPZiBPcGVyYXRpb24iLCAiY2Vzc2F0aW9uT2ZPcGVyYXRpb24ifSwKK3s2LCAiQ2VydGlmaWNhdGUgSG9sZCIsICJjZXJ0aWZpY2F0ZUhvbGQifSwKK3s3LCAiUHJpdmlsZWdlIFdpdGhkcmF3biIsICJwcml2aWxlZ2VXaXRoZHJhd24ifSwKK3s4LCAiQUEgQ29tcHJvbWlzZSIsICJBQUNvbXByb21pc2UifSwKK3stMSwgTlVMTCwgTlVMTH0KIH07CiAKLXN0YXRpYyBTVEFDS19PRihDT05GX1ZBTFVFKSAqaTJ2X2NybGQoWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZCwKLQkJCVNUQUNLX09GKERJU1RfUE9JTlQpICpjcmxkLCBTVEFDS19PRihDT05GX1ZBTFVFKSAqZXh0cykKLXsKLQlESVNUX1BPSU5UICpwb2ludDsKLQlpbnQgaTsKLQlmb3IoaSA9IDA7IGkgPCBza19ESVNUX1BPSU5UX251bShjcmxkKTsgaSsrKSB7Ci0JCXBvaW50ID0gc2tfRElTVF9QT0lOVF92YWx1ZShjcmxkLCBpKTsKLQkJaWYocG9pbnQtPmRpc3Rwb2ludCkgewotCQkJaWYocG9pbnQtPmRpc3Rwb2ludC0+dHlwZSA9PSAwKQotCQkJCWV4dHMgPSBpMnZfR0VORVJBTF9OQU1FUyhOVUxMLAotCQkJCQkgcG9pbnQtPmRpc3Rwb2ludC0+bmFtZS5mdWxsbmFtZSwgZXh0cyk7Ci0JCSAgICAgICAgZWxzZSBYNTA5VjNfYWRkX3ZhbHVlKCJSZWxhdGl2ZU5hbWUiLCI8VU5TVVBQT1JURUQ+IiwgJmV4dHMpOworc3RhdGljIGludCBzZXRfcmVhc29ucyhBU04xX0JJVF9TVFJJTkcgKipwcmVhcywgY2hhciAqdmFsdWUpCisJeworCVNUQUNLX09GKENPTkZfVkFMVUUpICpyc2sgPSBOVUxMOworCWNvbnN0IEJJVF9TVFJJTkdfQklUTkFNRSAqcGJuOworCWNvbnN0IGNoYXIgKmJuYW07CisJaW50IGksIHJldCA9IDA7CisJcnNrID0gWDUwOVYzX3BhcnNlX2xpc3QodmFsdWUpOworCWlmICghcnNrKQorCQlyZXR1cm4gMDsKKwlpZiAoKnByZWFzKQorCQlyZXR1cm4gMDsKKwlmb3IgKGkgPSAwOyBpIDwgc2tfQ09ORl9WQUxVRV9udW0ocnNrKTsgaSsrKQorCQl7CisJCWJuYW0gPSBza19DT05GX1ZBTFVFX3ZhbHVlKHJzaywgaSktPm5hbWU7CisJCWlmICghKnByZWFzKQorCQkJeworCQkJKnByZWFzID0gQVNOMV9CSVRfU1RSSU5HX25ldygpOworCQkJaWYgKCEqcHJlYXMpCisJCQkJZ290byBlcnI7CisJCQl9CisJCWZvciAocGJuID0gcmVhc29uX2ZsYWdzOyBwYm4tPmxuYW1lOyBwYm4rKykKKwkJCXsKKwkJCWlmICghc3RyY21wKHBibi0+c25hbWUsIGJuYW0pKQorCQkJCXsKKwkJCQlpZiAoIUFTTjFfQklUX1NUUklOR19zZXRfYml0KCpwcmVhcywKKwkJCQkJCQlwYm4tPmJpdG51bSwgMSkpCisJCQkJCWdvdG8gZXJyOworCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJaWYgKCFwYm4tPmxuYW1lKQorCQkJZ290byBlcnI7CiAJCX0KLQkJaWYocG9pbnQtPnJlYXNvbnMpIAotCQkJWDUwOVYzX2FkZF92YWx1ZSgicmVhc29ucyIsIjxVTlNVUFBPUlRFRD4iLCAmZXh0cyk7Ci0JCWlmKHBvaW50LT5DUkxpc3N1ZXIpCi0JCQlYNTA5VjNfYWRkX3ZhbHVlKCJDUkxpc3N1ZXIiLCI8VU5TVVBQT1JURUQ+IiwgJmV4dHMpOwotCX0KLQlyZXR1cm4gZXh0czsKLX0KKwlyZXQgPSAxOwogCi1zdGF0aWMgU1RBQ0tfT0YoRElTVF9QT0lOVCkgKnYyaV9jcmxkKFg1MDlWM19FWFRfTUVUSE9EICptZXRob2QsCi0JCQkJWDUwOVYzX0NUWCAqY3R4LCBTVEFDS19PRihDT05GX1ZBTFVFKSAqbnZhbCkKLXsKKwllcnI6CisJc2tfQ09ORl9WQUxVRV9wb3BfZnJlZShyc2ssIFg1MDlWM19jb25mX2ZyZWUpOworCXJldHVybiByZXQ7CisJfQorCitzdGF0aWMgaW50IHByaW50X3JlYXNvbnMoQklPICpvdXQsIGNvbnN0IGNoYXIgKnJuYW1lLAorCQkJQVNOMV9CSVRfU1RSSU5HICpyZmxhZ3MsIGludCBpbmRlbnQpCisJeworCWludCBmaXJzdCA9IDE7CisJY29uc3QgQklUX1NUUklOR19CSVROQU1FICpwYm47CisJQklPX3ByaW50ZihvdXQsICIlKnMlczpcbiUqcyIsIGluZGVudCwgIiIsIHJuYW1lLCBpbmRlbnQgKyAyLCAiIik7CisJZm9yIChwYm4gPSByZWFzb25fZmxhZ3M7IHBibi0+bG5hbWU7IHBibisrKQorCQl7CisJCWlmIChBU04xX0JJVF9TVFJJTkdfZ2V0X2JpdChyZmxhZ3MsIHBibi0+Yml0bnVtKSkKKwkJCXsKKwkJCWlmIChmaXJzdCkKKwkJCQlmaXJzdCA9IDA7CisJCQllbHNlCisJCQkJQklPX3B1dHMob3V0LCAiLCAiKTsKKwkJCUJJT19wdXRzKG91dCwgcGJuLT5sbmFtZSk7CisJCQl9CisJCX0KKwlpZiAoZmlyc3QpCisJCUJJT19wdXRzKG91dCwgIjxFTVBUWT5cbiIpOworCWVsc2UKKwkJQklPX3B1dHMob3V0LCAiXG4iKTsKKwlyZXR1cm4gMTsKKwl9CisKK3N0YXRpYyBESVNUX1BPSU5UICpjcmxkcF9mcm9tX3NlY3Rpb24oWDUwOVYzX0NUWCAqY3R4LAorCQkJCQkJU1RBQ0tfT0YoQ09ORl9WQUxVRSkgKm52YWwpCisJeworCWludCBpOworCUNPTkZfVkFMVUUgKmNuZjsKKwlESVNUX1BPSU5UICpwb2ludCA9IE5VTEw7CisJcG9pbnQgPSBESVNUX1BPSU5UX25ldygpOworCWlmICghcG9pbnQpCisJCWdvdG8gZXJyOworCWZvcihpID0gMDsgaSA8IHNrX0NPTkZfVkFMVUVfbnVtKG52YWwpOyBpKyspCisJCXsKKwkJaW50IHJldDsKKwkJY25mID0gc2tfQ09ORl9WQUxVRV92YWx1ZShudmFsLCBpKTsKKwkJcmV0ID0gc2V0X2Rpc3RfcG9pbnRfbmFtZSgmcG9pbnQtPmRpc3Rwb2ludCwgY3R4LCBjbmYpOworCQlpZiAocmV0ID4gMCkKKwkJCWNvbnRpbnVlOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZXJyOworCQlpZiAoIXN0cmNtcChjbmYtPm5hbWUsICJyZWFzb25zIikpCisJCQl7CisJCQlpZiAoIXNldF9yZWFzb25zKCZwb2ludC0+cmVhc29ucywgY25mLT52YWx1ZSkpCisJCQkJZ290byBlcnI7CisJCQl9CisJCWVsc2UgaWYgKCFzdHJjbXAoY25mLT5uYW1lLCAiQ1JMaXNzdWVyIikpCisJCQl7CisJCQlwb2ludC0+Q1JMaXNzdWVyID0KKwkJCQlnbmFtZXNfZnJvbV9zZWN0bmFtZShjdHgsIGNuZi0+dmFsdWUpOworCQkJaWYgKCFwb2ludC0+Q1JMaXNzdWVyKQorCQkJCWdvdG8gZXJyOworCQkJfQorCQl9CisKKwlyZXR1cm4gcG9pbnQ7CisJCQkKKworCWVycjoKKwlpZiAocG9pbnQpCisJCURJU1RfUE9JTlRfZnJlZShwb2ludCk7CisJcmV0dXJuIE5VTEw7CisJfQorCitzdGF0aWMgdm9pZCAqdjJpX2NybGQoY29uc3QgWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZCwKKwkJICAgICAgWDUwOVYzX0NUWCAqY3R4LCBTVEFDS19PRihDT05GX1ZBTFVFKSAqbnZhbCkKKwl7CiAJU1RBQ0tfT0YoRElTVF9QT0lOVCkgKmNybGQgPSBOVUxMOwogCUdFTkVSQUxfTkFNRVMgKmdlbnMgPSBOVUxMOwogCUdFTkVSQUxfTkFNRSAqZ2VuID0gTlVMTDsKQEAgLTExMSwxOSArMzIwLDQ0IEBACiAJZm9yKGkgPSAwOyBpIDwgc2tfQ09ORl9WQUxVRV9udW0obnZhbCk7IGkrKykgewogCQlESVNUX1BPSU5UICpwb2ludDsKIAkJY25mID0gc2tfQ09ORl9WQUxVRV92YWx1ZShudmFsLCBpKTsKLQkJaWYoIShnZW4gPSB2MmlfR0VORVJBTF9OQU1FKG1ldGhvZCwgY3R4LCBjbmYpKSkgZ290byBlcnI7IAotCQlpZighKGdlbnMgPSBHRU5FUkFMX05BTUVTX25ldygpKSkgZ290byBtZXJyOwotCQlpZighc2tfR0VORVJBTF9OQU1FX3B1c2goZ2VucywgZ2VuKSkgZ290byBtZXJyOwotCQlnZW4gPSBOVUxMOwotCQlpZighKHBvaW50ID0gRElTVF9QT0lOVF9uZXcoKSkpIGdvdG8gbWVycjsKLQkJaWYoIXNrX0RJU1RfUE9JTlRfcHVzaChjcmxkLCBwb2ludCkpIHsKLQkJCURJU1RfUE9JTlRfZnJlZShwb2ludCk7Ci0JCQlnb3RvIG1lcnI7Ci0JCX0KLQkJaWYoIShwb2ludC0+ZGlzdHBvaW50ID0gRElTVF9QT0lOVF9OQU1FX25ldygpKSkgZ290byBtZXJyOwotCQlwb2ludC0+ZGlzdHBvaW50LT5uYW1lLmZ1bGxuYW1lID0gZ2VuczsKLQkJcG9pbnQtPmRpc3Rwb2ludC0+dHlwZSA9IDA7Ci0JCWdlbnMgPSBOVUxMOworCQlpZiAoIWNuZi0+dmFsdWUpCisJCQl7CisJCQlTVEFDS19PRihDT05GX1ZBTFVFKSAqZHBzZWN0OworCQkJZHBzZWN0ID0gWDUwOVYzX2dldF9zZWN0aW9uKGN0eCwgY25mLT5uYW1lKTsKKwkJCWlmICghZHBzZWN0KQorCQkJCWdvdG8gZXJyOworCQkJcG9pbnQgPSBjcmxkcF9mcm9tX3NlY3Rpb24oY3R4LCBkcHNlY3QpOworCQkJWDUwOVYzX3NlY3Rpb25fZnJlZShjdHgsIGRwc2VjdCk7CisJCQlpZiAoIXBvaW50KQorCQkJCWdvdG8gZXJyOworCQkJaWYoIXNrX0RJU1RfUE9JTlRfcHVzaChjcmxkLCBwb2ludCkpCisJCQkJeworCQkJCURJU1RfUE9JTlRfZnJlZShwb2ludCk7CisJCQkJZ290byBtZXJyOworCQkJCX0KKwkJCX0KKwkJZWxzZQorCQkJeworCQkJaWYoIShnZW4gPSB2MmlfR0VORVJBTF9OQU1FKG1ldGhvZCwgY3R4LCBjbmYpKSkKKwkJCQlnb3RvIGVycjsgCisJCQlpZighKGdlbnMgPSBHRU5FUkFMX05BTUVTX25ldygpKSkKKwkJCQlnb3RvIG1lcnI7CisJCQlpZighc2tfR0VORVJBTF9OQU1FX3B1c2goZ2VucywgZ2VuKSkKKwkJCQlnb3RvIG1lcnI7CisJCQlnZW4gPSBOVUxMOworCQkJaWYoIShwb2ludCA9IERJU1RfUE9JTlRfbmV3KCkpKQorCQkJCWdvdG8gbWVycjsKKwkJCWlmKCFza19ESVNUX1BPSU5UX3B1c2goY3JsZCwgcG9pbnQpKQorCQkJCXsKKwkJCQlESVNUX1BPSU5UX2ZyZWUocG9pbnQpOworCQkJCWdvdG8gbWVycjsKKwkJCQl9CisJCQlpZighKHBvaW50LT5kaXN0cG9pbnQgPSBESVNUX1BPSU5UX05BTUVfbmV3KCkpKQorCQkJCWdvdG8gbWVycjsKKwkJCXBvaW50LT5kaXN0cG9pbnQtPm5hbWUuZnVsbG5hbWUgPSBnZW5zOworCQkJcG9pbnQtPmRpc3Rwb2ludC0+dHlwZSA9IDA7CisJCQlnZW5zID0gTlVMTDsKKwkJCX0KIAl9CiAJcmV0dXJuIGNybGQ7CiAKQEAgLTEzOSwxMSArMzczLDMxIEBACiBJTVBMRU1FTlRfU1RBQ0tfT0YoRElTVF9QT0lOVCkKIElNUExFTUVOVF9BU04xX1NFVF9PRihESVNUX1BPSU5UKQogCitzdGF0aWMgaW50IGRwbl9jYihpbnQgb3BlcmF0aW9uLCBBU04xX1ZBTFVFICoqcHZhbCwgY29uc3QgQVNOMV9JVEVNICppdCwKKwkJCQkJCQkJdm9pZCAqZXhhcmcpCisJeworCURJU1RfUE9JTlRfTkFNRSAqZHBuID0gKERJU1RfUE9JTlRfTkFNRSAqKSpwdmFsOwogCi1BU04xX0NIT0lDRShESVNUX1BPSU5UX05BTUUpID0geworCXN3aXRjaChvcGVyYXRpb24pCisJCXsKKwkJY2FzZSBBU04xX09QX05FV19QT1NUOgorCQlkcG4tPmRwbmFtZSA9IE5VTEw7CisJCWJyZWFrOworCisJCWNhc2UgQVNOMV9PUF9GUkVFX1BPU1Q6CisJCWlmIChkcG4tPmRwbmFtZSkKKwkJCVg1MDlfTkFNRV9mcmVlKGRwbi0+ZHBuYW1lKTsKKwkJYnJlYWs7CisJCX0KKwlyZXR1cm4gMTsKKwl9CisKKworQVNOMV9DSE9JQ0VfY2IoRElTVF9QT0lOVF9OQU1FLCBkcG5fY2IpID0gewogCUFTTjFfSU1QX1NFUVVFTkNFX09GKERJU1RfUE9JTlRfTkFNRSwgbmFtZS5mdWxsbmFtZSwgR0VORVJBTF9OQU1FLCAwKSwKIAlBU04xX0lNUF9TRVRfT0YoRElTVF9QT0lOVF9OQU1FLCBuYW1lLnJlbGF0aXZlbmFtZSwgWDUwOV9OQU1FX0VOVFJZLCAxKQotfSBBU04xX0NIT0lDRV9FTkQoRElTVF9QT0lOVF9OQU1FKQorfSBBU04xX0NIT0lDRV9FTkRfY2IoRElTVF9QT0lOVF9OQU1FLCBESVNUX1BPSU5UX05BTUUsIHR5cGUpCisKIAogSU1QTEVNRU5UX0FTTjFfRlVOQ1RJT05TKERJU1RfUE9JTlRfTkFNRSkKIApAQCAtMTYwLDMgKzQxNCwyMDMgQEAKIEFTTjFfSVRFTV9URU1QTEFURV9FTkQoQ1JMX0RJU1RfUE9JTlRTKQogCiBJTVBMRU1FTlRfQVNOMV9GVU5DVElPTlMoQ1JMX0RJU1RfUE9JTlRTKQorCitBU04xX1NFUVVFTkNFKElTU1VJTkdfRElTVF9QT0lOVCkgPSB7CisJQVNOMV9FWFBfT1BUKElTU1VJTkdfRElTVF9QT0lOVCwgZGlzdHBvaW50LCBESVNUX1BPSU5UX05BTUUsIDApLAorCUFTTjFfSU1QX09QVChJU1NVSU5HX0RJU1RfUE9JTlQsIG9ubHl1c2VyLCBBU04xX0ZCT09MRUFOLCAxKSwKKwlBU04xX0lNUF9PUFQoSVNTVUlOR19ESVNUX1BPSU5ULCBvbmx5Q0EsIEFTTjFfRkJPT0xFQU4sIDIpLAorCUFTTjFfSU1QX09QVChJU1NVSU5HX0RJU1RfUE9JTlQsIG9ubHlzb21lcmVhc29ucywgQVNOMV9CSVRfU1RSSU5HLCAzKSwKKwlBU04xX0lNUF9PUFQoSVNTVUlOR19ESVNUX1BPSU5ULCBpbmRpcmVjdENSTCwgQVNOMV9GQk9PTEVBTiwgNCksCisJQVNOMV9JTVBfT1BUKElTU1VJTkdfRElTVF9QT0lOVCwgb25seWF0dHIsIEFTTjFfRkJPT0xFQU4sIDUpCit9IEFTTjFfU0VRVUVOQ0VfRU5EKElTU1VJTkdfRElTVF9QT0lOVCkKKworSU1QTEVNRU5UX0FTTjFfRlVOQ1RJT05TKElTU1VJTkdfRElTVF9QT0lOVCkKKworc3RhdGljIGludCBpMnJfaWRwKGNvbnN0IFg1MDlWM19FWFRfTUVUSE9EICptZXRob2QsIHZvaWQgKnBpZHAsIEJJTyAqb3V0LAorCQkgICBpbnQgaW5kZW50KTsKK3N0YXRpYyB2b2lkICp2MmlfaWRwKGNvbnN0IFg1MDlWM19FWFRfTUVUSE9EICptZXRob2QsIFg1MDlWM19DVFggKmN0eCwKKwkJICAgICBTVEFDS19PRihDT05GX1ZBTFVFKSAqbnZhbCk7CisKK2NvbnN0IFg1MDlWM19FWFRfTUVUSE9EIHYzX2lkcCA9CisJeworCU5JRF9pc3N1aW5nX2Rpc3RyaWJ1dGlvbl9wb2ludCwgWDUwOVYzX0VYVF9NVUxUSUxJTkUsCisJQVNOMV9JVEVNX3JlZihJU1NVSU5HX0RJU1RfUE9JTlQpLAorCTAsMCwwLDAsCisJMCwwLAorCTAsCisJdjJpX2lkcCwKKwlpMnJfaWRwLDAsCisJTlVMTAorCX07CisKK3N0YXRpYyB2b2lkICp2MmlfaWRwKGNvbnN0IFg1MDlWM19FWFRfTUVUSE9EICptZXRob2QsIFg1MDlWM19DVFggKmN0eCwKKwkJICAgICBTVEFDS19PRihDT05GX1ZBTFVFKSAqbnZhbCkKKwl7CisJSVNTVUlOR19ESVNUX1BPSU5UICppZHAgPSBOVUxMOworCUNPTkZfVkFMVUUgKmNuZjsKKwljaGFyICpuYW1lLCAqdmFsOworCWludCBpLCByZXQ7CisJaWRwID0gSVNTVUlOR19ESVNUX1BPSU5UX25ldygpOworCWlmICghaWRwKQorCQlnb3RvIG1lcnI7CisJZm9yKGkgPSAwOyBpIDwgc2tfQ09ORl9WQUxVRV9udW0obnZhbCk7IGkrKykKKwkJeworCQljbmYgPSBza19DT05GX1ZBTFVFX3ZhbHVlKG52YWwsIGkpOworCQluYW1lID0gY25mLT5uYW1lOworCQl2YWwgPSBjbmYtPnZhbHVlOworCQlyZXQgPSBzZXRfZGlzdF9wb2ludF9uYW1lKCZpZHAtPmRpc3Rwb2ludCwgY3R4LCBjbmYpOworCQlpZiAocmV0ID4gMCkKKwkJCWNvbnRpbnVlOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZXJyOworCQlpZiAoIXN0cmNtcChuYW1lLCAib25seXVzZXIiKSkKKwkJCXsKKwkJCWlmICghWDUwOVYzX2dldF92YWx1ZV9ib29sKGNuZiwgJmlkcC0+b25seXVzZXIpKQorCQkJCWdvdG8gZXJyOworCQkJfQorCQllbHNlIGlmICghc3RyY21wKG5hbWUsICJvbmx5Q0EiKSkKKwkJCXsKKwkJCWlmICghWDUwOVYzX2dldF92YWx1ZV9ib29sKGNuZiwgJmlkcC0+b25seUNBKSkKKwkJCQlnb3RvIGVycjsKKwkJCX0KKwkJZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAib25seUFBIikpCisJCQl7CisJCQlpZiAoIVg1MDlWM19nZXRfdmFsdWVfYm9vbChjbmYsICZpZHAtPm9ubHlhdHRyKSkKKwkJCQlnb3RvIGVycjsKKwkJCX0KKwkJZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAiaW5kaXJlY3RDUkwiKSkKKwkJCXsKKwkJCWlmICghWDUwOVYzX2dldF92YWx1ZV9ib29sKGNuZiwgJmlkcC0+aW5kaXJlY3RDUkwpKQorCQkJCWdvdG8gZXJyOworCQkJfQorCQllbHNlIGlmICghc3RyY21wKG5hbWUsICJvbmx5c29tZXJlYXNvbnMiKSkKKwkJCXsKKwkJCWlmICghc2V0X3JlYXNvbnMoJmlkcC0+b25seXNvbWVyZWFzb25zLCB2YWwpKQorCQkJCWdvdG8gZXJyOworCQkJfQorCQllbHNlCisJCQl7CisgICAgICAgICAgICAgICAgICAgICAgICBYNTA5VjNlcnIoWDUwOVYzX0ZfVjJJX0lEUCwgWDUwOVYzX1JfSU5WQUxJRF9OQU1FKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFg1MDlWM19jb25mX2VycihjbmYpOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnI7CisJCQl9CisJCX0KKwlyZXR1cm4gaWRwOworCisJbWVycjoKKwlYNTA5VjNlcnIoWDUwOVYzX0ZfVjJJX0lEUCxFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CisJZXJyOgorCUlTU1VJTkdfRElTVF9QT0lOVF9mcmVlKGlkcCk7CisJcmV0dXJuIE5VTEw7CisJfQorCitzdGF0aWMgaW50IHByaW50X2dlbnMoQklPICpvdXQsIFNUQUNLX09GKEdFTkVSQUxfTkFNRSkgKmdlbnMsIGludCBpbmRlbnQpCisJeworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBza19HRU5FUkFMX05BTUVfbnVtKGdlbnMpOyBpKyspCisJCXsKKwkJQklPX3ByaW50ZihvdXQsICIlKnMiLCBpbmRlbnQgKyAyLCAiIik7CisJCUdFTkVSQUxfTkFNRV9wcmludChvdXQsIHNrX0dFTkVSQUxfTkFNRV92YWx1ZShnZW5zLCBpKSk7CisJCUJJT19wdXRzKG91dCwgIlxuIik7CisJCX0KKwlyZXR1cm4gMTsKKwl9CisKK3N0YXRpYyBpbnQgcHJpbnRfZGlzdHBvaW50KEJJTyAqb3V0LCBESVNUX1BPSU5UX05BTUUgKmRwbiwgaW50IGluZGVudCkKKwl7CisJaWYgKGRwbi0+dHlwZSA9PSAwKQorCQl7CisJCUJJT19wcmludGYob3V0LCAiJSpzRnVsbCBOYW1lOlxuIiwgaW5kZW50LCAiIik7CisJCXByaW50X2dlbnMob3V0LCBkcG4tPm5hbWUuZnVsbG5hbWUsIGluZGVudCk7CisJCX0KKwllbHNlCisJCXsKKwkJWDUwOV9OQU1FIG50bXA7CisJCW50bXAuZW50cmllcyA9IGRwbi0+bmFtZS5yZWxhdGl2ZW5hbWU7CisJCUJJT19wcmludGYob3V0LCAiJSpzUmVsYXRpdmUgTmFtZTpcbiUqcyIsCisJCQkJCQlpbmRlbnQsICIiLCBpbmRlbnQgKyAyLCAiIik7CisJCVg1MDlfTkFNRV9wcmludF9leChvdXQsICZudG1wLCAwLCBYTl9GTEFHX09ORUxJTkUpOworCQlCSU9fcHV0cyhvdXQsICJcbiIpOworCQl9CisJcmV0dXJuIDE7CisJfQorCitzdGF0aWMgaW50IGkycl9pZHAoY29uc3QgWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZCwgdm9pZCAqcGlkcCwgQklPICpvdXQsCisJCSAgIGludCBpbmRlbnQpCisJeworCUlTU1VJTkdfRElTVF9QT0lOVCAqaWRwID0gcGlkcDsKKwlpZiAoaWRwLT5kaXN0cG9pbnQpCisJCXByaW50X2Rpc3Rwb2ludChvdXQsIGlkcC0+ZGlzdHBvaW50LCBpbmRlbnQpOworCWlmIChpZHAtPm9ubHl1c2VyID4gMCkKKwkJQklPX3ByaW50ZihvdXQsICIlKnNPbmx5IFVzZXIgQ2VydGlmaWNhdGVzXG4iLCBpbmRlbnQsICIiKTsKKwlpZiAoaWRwLT5vbmx5Q0EgPiAwKQorCQlCSU9fcHJpbnRmKG91dCwgIiUqc09ubHkgQ0EgQ2VydGlmaWNhdGVzXG4iLCBpbmRlbnQsICIiKTsKKwlpZiAoaWRwLT5pbmRpcmVjdENSTCA+IDApCisJCUJJT19wcmludGYob3V0LCAiJSpzSW5kaXJlY3QgQ1JMXG4iLCBpbmRlbnQsICIiKTsKKwlpZiAoaWRwLT5vbmx5c29tZXJlYXNvbnMpCisJCXByaW50X3JlYXNvbnMob3V0LCAiT25seSBTb21lIFJlYXNvbnMiLCAKKwkJCQlpZHAtPm9ubHlzb21lcmVhc29ucywgaW5kZW50KTsKKwlpZiAoaWRwLT5vbmx5YXR0ciA+IDApCisJCUJJT19wcmludGYob3V0LCAiJSpzT25seSBBdHRyaWJ1dGUgQ2VydGlmaWNhdGVzXG4iLCBpbmRlbnQsICIiKTsKKwlpZiAoIWlkcC0+ZGlzdHBvaW50ICYmIChpZHAtPm9ubHl1c2VyIDw9IDApICYmIChpZHAtPm9ubHlDQSA8PSAwKQorCQkmJiAoaWRwLT5pbmRpcmVjdENSTCA8PSAwKSAmJiAhaWRwLT5vbmx5c29tZXJlYXNvbnMKKwkJJiYgKGlkcC0+b25seWF0dHIgPD0gMCkpCisJCUJJT19wcmludGYob3V0LCAiJSpzPEVNUFRZPlxuIiwgaW5kZW50LCAiIik7CisJCQorCXJldHVybiAxOworCX0KKworc3RhdGljIGludCBpMnJfY3JsZHAoY29uc3QgWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZCwgdm9pZCAqcGNybGRwLCBCSU8gKm91dCwKKwkJICAgICBpbnQgaW5kZW50KQorCXsKKwlTVEFDS19PRihESVNUX1BPSU5UKSAqY3JsZCA9IHBjcmxkcDsKKwlESVNUX1BPSU5UICpwb2ludDsKKwlpbnQgaTsKKwlmb3IoaSA9IDA7IGkgPCBza19ESVNUX1BPSU5UX251bShjcmxkKTsgaSsrKQorCQl7CisJCUJJT19wdXRzKG91dCwgIlxuIik7CisJCXBvaW50ID0gc2tfRElTVF9QT0lOVF92YWx1ZShjcmxkLCBpKTsKKwkJaWYocG9pbnQtPmRpc3Rwb2ludCkKKwkJCXByaW50X2Rpc3Rwb2ludChvdXQsIHBvaW50LT5kaXN0cG9pbnQsIGluZGVudCk7CisJCWlmKHBvaW50LT5yZWFzb25zKSAKKwkJCXByaW50X3JlYXNvbnMob3V0LCAiUmVhc29ucyIsIHBvaW50LT5yZWFzb25zLAorCQkJCQkJCQlpbmRlbnQpOworCQlpZihwb2ludC0+Q1JMaXNzdWVyKQorCQkJeworCQkJQklPX3ByaW50ZihvdXQsICIlKnNDUkwgSXNzdWVyOlxuIiwgaW5kZW50LCAiIik7CisJCQlwcmludF9nZW5zKG91dCwgcG9pbnQtPkNSTGlzc3VlciwgaW5kZW50KTsKKwkJCX0KKwkJfQorCXJldHVybiAxOworCX0KKworaW50IERJU1RfUE9JTlRfc2V0X2RwbmFtZShESVNUX1BPSU5UX05BTUUgKmRwbiwgWDUwOV9OQU1FICppbmFtZSkKKwl7CisJaW50IGk7CisJU1RBQ0tfT0YoWDUwOV9OQU1FX0VOVFJZKSAqZnJhZzsKKwlYNTA5X05BTUVfRU5UUlkgKm5lOworCWlmICghZHBuIHx8IChkcG4tPnR5cGUgIT0gMSkpCisJCXJldHVybiAxOworCWZyYWcgPSBkcG4tPm5hbWUucmVsYXRpdmVuYW1lOworCWRwbi0+ZHBuYW1lID0gWDUwOV9OQU1FX2R1cChpbmFtZSk7CisJaWYgKCFkcG4tPmRwbmFtZSkKKwkJcmV0dXJuIDA7CisJZm9yIChpID0gMDsgaSA8IHNrX1g1MDlfTkFNRV9FTlRSWV9udW0oZnJhZyk7IGkrKykKKwkJeworCQluZSA9IHNrX1g1MDlfTkFNRV9FTlRSWV92YWx1ZShmcmFnLCBpKTsKKwkJaWYgKCFYNTA5X05BTUVfYWRkX2VudHJ5KGRwbi0+ZHBuYW1lLCBuZSwgLTEsIGkgPyAwIDogMSkpCisJCQl7CisJCQlYNTA5X05BTUVfZnJlZShkcG4tPmRwbmFtZSk7CisJCQlkcG4tPmRwbmFtZSA9IE5VTEw7CisJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCS8qIGdlbmVyYXRlIGNhY2hlZCBlbmNvZGluZyBvZiBuYW1lICovCisJaWYgKGkyZF9YNTA5X05BTUUoZHBuLT5kcG5hbWUsIE5VTEwpIDwgMCkKKwkJeworCQlYNTA5X05BTUVfZnJlZShkcG4tPmRwbmFtZSk7CisJCWRwbi0+ZHBuYW1lID0gTlVMTDsKKwkJcmV0dXJuIDA7CisJCX0KKwlyZXR1cm4gMTsKKwl9CmRpZmYgLS1naXQgYS9jcnlwdG8veDUwOXYzL3YzX2VudW0uYyBiL2NyeXB0by94NTA5djMvdjNfZW51bS5jCmluZGV4IDM2NTc2ZWEuLmMwNTc1ZTMgMTAwNjQ0Ci0tLSBhL2NyeXB0by94NTA5djMvdjNfZW51bS5jCisrKyBiL2NyeXB0by94NTA5djMvdjNfZW51bS5jCkBAIC02MSwxNCArNjEsMTcgQEAKICNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgogCiBzdGF0aWMgRU5VTUVSQVRFRF9OQU1FUyBjcmxfcmVhc29uc1tdID0gewotezAsICJVbnNwZWNpZmllZCIsICJ1bnNwZWNpZmllZCJ9LAotezEsICJLZXkgQ29tcHJvbWlzZSIsICJrZXlDb21wcm9taXNlIn0sCi17MiwgIkNBIENvbXByb21pc2UiLCAiQ0FDb21wcm9taXNlIn0sCi17MywgIkFmZmlsaWF0aW9uIENoYW5nZWQiLCAiYWZmaWxpYXRpb25DaGFuZ2VkIn0sCi17NCwgIlN1cGVyc2VkZWQiLCAic3VwZXJzZWRlZCJ9LAotezUsICJDZXNzYXRpb24gT2YgT3BlcmF0aW9uIiwgImNlc3NhdGlvbk9mT3BlcmF0aW9uIn0sCi17NiwgIkNlcnRpZmljYXRlIEhvbGQiLCAiY2VydGlmaWNhdGVIb2xkIn0sCi17OCwgIlJlbW92ZSBGcm9tIENSTCIsICJyZW1vdmVGcm9tQ1JMIn0sCit7Q1JMX1JFQVNPTl9VTlNQRUNJRklFRCwgCSAiVW5zcGVjaWZpZWQiLCAidW5zcGVjaWZpZWQifSwKK3tDUkxfUkVBU09OX0tFWV9DT01QUk9NSVNFLAkgIktleSBDb21wcm9taXNlIiwgImtleUNvbXByb21pc2UifSwKK3tDUkxfUkVBU09OX0NBX0NPTVBST01JU0UsCSAiQ0EgQ29tcHJvbWlzZSIsICJDQUNvbXByb21pc2UifSwKK3tDUkxfUkVBU09OX0FGRklMSUFUSU9OX0NIQU5HRUQsICJBZmZpbGlhdGlvbiBDaGFuZ2VkIiwgImFmZmlsaWF0aW9uQ2hhbmdlZCJ9LAore0NSTF9SRUFTT05fU1VQRVJTRURFRCwgCSAiU3VwZXJzZWRlZCIsICJzdXBlcnNlZGVkIn0sCit7Q1JMX1JFQVNPTl9DRVNTQVRJT05fT0ZfT1BFUkFUSU9OLAorCQkJIkNlc3NhdGlvbiBPZiBPcGVyYXRpb24iLCAiY2Vzc2F0aW9uT2ZPcGVyYXRpb24ifSwKK3tDUkxfUkVBU09OX0NFUlRJRklDQVRFX0hPTEQsCSAiQ2VydGlmaWNhdGUgSG9sZCIsICJjZXJ0aWZpY2F0ZUhvbGQifSwKK3tDUkxfUkVBU09OX1JFTU9WRV9GUk9NX0NSTCwJICJSZW1vdmUgRnJvbSBDUkwiLCAicmVtb3ZlRnJvbUNSTCJ9LAore0NSTF9SRUFTT05fUFJJVklMRUdFX1dJVEhEUkFXTiwgIlByaXZpbGVnZSBXaXRoZHJhd24iLCAicHJpdmlsZWdlV2l0aGRyYXduIn0sCit7Q1JMX1JFQVNPTl9BQV9DT01QUk9NSVNFLAkgIkFBIENvbXByb21pc2UiLCAiQUFDb21wcm9taXNlIn0sCiB7LTEsIE5VTEwsIE5VTEx9CiB9OwogCmRpZmYgLS1naXQgYS9jcnlwdG8veDUwOXYzL3YzX2V4dGt1LmMgYi9jcnlwdG8veDUwOXYzL3YzX2V4dGt1LmMKaW5kZXggYzBkMTQ1MC4uMWM2NjUzMiAxMDA2NDQKLS0tIGEvY3J5cHRvL3g1MDl2My92M19leHRrdS5jCisrKyBiL2NyeXB0by94NTA5djMvdjNfZXh0a3UuYwpAQCAtNjMsOSArNjMsMTAgQEAKICNpbmNsdWRlIDxvcGVuc3NsL2NvbmYuaD4KICNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgogCi1zdGF0aWMgdm9pZCAqdjJpX0VYVEVOREVEX0tFWV9VU0FHRShYNTA5VjNfRVhUX01FVEhPRCAqbWV0aG9kLAotCQkJCVg1MDlWM19DVFggKmN0eCwgU1RBQ0tfT0YoQ09ORl9WQUxVRSkgKm52YWwpOwotc3RhdGljIFNUQUNLX09GKENPTkZfVkFMVUUpICppMnZfRVhURU5ERURfS0VZX1VTQUdFKFg1MDlWM19FWFRfTUVUSE9EICptZXRob2QsCitzdGF0aWMgdm9pZCAqdjJpX0VYVEVOREVEX0tFWV9VU0FHRShjb25zdCBYNTA5VjNfRVhUX01FVEhPRCAqbWV0aG9kLAorCQkJCSAgICBYNTA5VjNfQ1RYICpjdHgsCisJCQkJICAgIFNUQUNLX09GKENPTkZfVkFMVUUpICpudmFsKTsKK3N0YXRpYyBTVEFDS19PRihDT05GX1ZBTFVFKSAqaTJ2X0VYVEVOREVEX0tFWV9VU0FHRShjb25zdCBYNTA5VjNfRVhUX01FVEhPRCAqbWV0aG9kLAogCQl2b2lkICpla3UsIFNUQUNLX09GKENPTkZfVkFMVUUpICpleHRsaXN0KTsKIAogY29uc3QgWDUwOVYzX0VYVF9NRVRIT0QgdjNfZXh0X2t1ID0gewpAQCAtOTcsOCArOTgsOSBAQAogCiBJTVBMRU1FTlRfQVNOMV9GVU5DVElPTlMoRVhURU5ERURfS0VZX1VTQUdFKQogCi1zdGF0aWMgU1RBQ0tfT0YoQ09ORl9WQUxVRSkgKmkydl9FWFRFTkRFRF9LRVlfVVNBR0UoWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZCwKLQkJdm9pZCAqYSwgU1RBQ0tfT0YoQ09ORl9WQUxVRSkgKmV4dF9saXN0KQorc3RhdGljIFNUQUNLX09GKENPTkZfVkFMVUUpICoKKyAgaTJ2X0VYVEVOREVEX0tFWV9VU0FHRShjb25zdCBYNTA5VjNfRVhUX01FVEhPRCAqbWV0aG9kLCB2b2lkICphLAorCQkJIFNUQUNLX09GKENPTkZfVkFMVUUpICpleHRfbGlzdCkKIHsKIAlFWFRFTkRFRF9LRVlfVVNBR0UgKmVrdSA9IGE7CiAJaW50IGk7CkBAIC0xMTIsOCArMTE0LDggQEAKIAlyZXR1cm4gZXh0X2xpc3Q7CiB9CiAKLXN0YXRpYyB2b2lkICp2MmlfRVhURU5ERURfS0VZX1VTQUdFKFg1MDlWM19FWFRfTUVUSE9EICptZXRob2QsCi0JCQkJWDUwOVYzX0NUWCAqY3R4LCBTVEFDS19PRihDT05GX1ZBTFVFKSAqbnZhbCkKK3N0YXRpYyB2b2lkICp2MmlfRVhURU5ERURfS0VZX1VTQUdFKGNvbnN0IFg1MDlWM19FWFRfTUVUSE9EICptZXRob2QsCisJCQkJICAgIFg1MDlWM19DVFggKmN0eCwgU1RBQ0tfT0YoQ09ORl9WQUxVRSkgKm52YWwpCiB7CiAJRVhURU5ERURfS0VZX1VTQUdFICpleHRrdTsKIAljaGFyICpleHR2YWw7CmRpZmYgLS1naXQgYS9jcnlwdG8veDUwOXYzL3YzX2dlbm4uYyBiL2NyeXB0by94NTA5djMvdjNfZ2Vubi5jCmluZGV4IDg0YjRiMWMuLmI2MjgzNTcgMTAwNjQ0Ci0tLSBhL2NyeXB0by94NTA5djMvdjNfZ2Vubi5jCisrKyBiL2NyeXB0by94NTA5djMvdjNfZ2Vubi5jCkBAIC0zLDcgKzMsNyBAQAogICogcHJvamVjdCAxOTk5LgogICovCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChjKSAxOTk5IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDggVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk5LDMgKzk5LDE1NCBAQAogQVNOMV9JVEVNX1RFTVBMQVRFX0VORChHRU5FUkFMX05BTUVTKQogCiBJTVBMRU1FTlRfQVNOMV9GVU5DVElPTlMoR0VORVJBTF9OQU1FUykKKworR0VORVJBTF9OQU1FICpHRU5FUkFMX05BTUVfZHVwKEdFTkVSQUxfTkFNRSAqYSkKKwl7CisJcmV0dXJuIChHRU5FUkFMX05BTUUgKikgQVNOMV9kdXAoKGkyZF9vZl92b2lkICopIGkyZF9HRU5FUkFMX05BTUUsCisJCQkJCSAoZDJpX29mX3ZvaWQgKikgZDJpX0dFTkVSQUxfTkFNRSwKKwkJCQkJIChjaGFyICopIGEpOworCX0KKworLyogUmV0dXJucyAwIGlmIHRoZXkgYXJlIGVxdWFsLCAhPSAwIG90aGVyd2lzZS4gKi8KK2ludCBHRU5FUkFMX05BTUVfY21wKEdFTkVSQUxfTkFNRSAqYSwgR0VORVJBTF9OQU1FICpiKQorCXsKKwlpbnQgcmVzdWx0ID0gLTE7CisKKwlpZiAoIWEgfHwgIWIgfHwgYS0+dHlwZSAhPSBiLT50eXBlKSByZXR1cm4gLTE7CisJc3dpdGNoKGEtPnR5cGUpCisJCXsKKwljYXNlIEdFTl9YNDAwOgorCWNhc2UgR0VOX0VESVBBUlRZOgorCQlyZXN1bHQgPSBBU04xX1RZUEVfY21wKGEtPmQub3RoZXIsIGItPmQub3RoZXIpOworCQlicmVhazsKKworCWNhc2UgR0VOX09USEVSTkFNRToKKwkJcmVzdWx0ID0gT1RIRVJOQU1FX2NtcChhLT5kLm90aGVyTmFtZSwgYi0+ZC5vdGhlck5hbWUpOworCQlicmVhazsKKworCWNhc2UgR0VOX0VNQUlMOgorCWNhc2UgR0VOX0ROUzoKKwljYXNlIEdFTl9VUkk6CisJCXJlc3VsdCA9IEFTTjFfU1RSSU5HX2NtcChhLT5kLmlhNSwgYi0+ZC5pYTUpOworCQlicmVhazsKKworCWNhc2UgR0VOX0RJUk5BTUU6CisJCXJlc3VsdCA9IFg1MDlfTkFNRV9jbXAoYS0+ZC5kaXJuLCBiLT5kLmRpcm4pOworCQlicmVhazsKKworCWNhc2UgR0VOX0lQQUREOgorCQlyZXN1bHQgPSBBU04xX09DVEVUX1NUUklOR19jbXAoYS0+ZC5pcCwgYi0+ZC5pcCk7CisJCWJyZWFrOworCQorCWNhc2UgR0VOX1JJRDoKKwkJcmVzdWx0ID0gT0JKX2NtcChhLT5kLnJpZCwgYi0+ZC5yaWQpOworCQlicmVhazsKKwkJfQorCXJldHVybiByZXN1bHQ7CisJfQorCisvKiBSZXR1cm5zIDAgaWYgdGhleSBhcmUgZXF1YWwsICE9IDAgb3RoZXJ3aXNlLiAqLworaW50IE9USEVSTkFNRV9jbXAoT1RIRVJOQU1FICphLCBPVEhFUk5BTUUgKmIpCisJeworCWludCByZXN1bHQgPSAtMTsKKworCWlmICghYSB8fCAhYikgcmV0dXJuIC0xOworCS8qIENoZWNrIHRoZWlyIHR5cGUgZmlyc3QuICovCisJaWYgKChyZXN1bHQgPSBPQkpfY21wKGEtPnR5cGVfaWQsIGItPnR5cGVfaWQpKSAhPSAwKQorCQlyZXR1cm4gcmVzdWx0OworCS8qIENoZWNrIHRoZSB2YWx1ZS4gKi8KKwlyZXN1bHQgPSBBU04xX1RZUEVfY21wKGEtPnZhbHVlLCBiLT52YWx1ZSk7CisJcmV0dXJuIHJlc3VsdDsKKwl9CisKK3ZvaWQgR0VORVJBTF9OQU1FX3NldDBfdmFsdWUoR0VORVJBTF9OQU1FICphLCBpbnQgdHlwZSwgdm9pZCAqdmFsdWUpCisJeworCXN3aXRjaCh0eXBlKQorCQl7CisJY2FzZSBHRU5fWDQwMDoKKwljYXNlIEdFTl9FRElQQVJUWToKKwkJYS0+ZC5vdGhlciA9IHZhbHVlOworCQlicmVhazsKKworCWNhc2UgR0VOX09USEVSTkFNRToKKwkJYS0+ZC5vdGhlck5hbWUgPSB2YWx1ZTsKKwkJYnJlYWs7CisKKwljYXNlIEdFTl9FTUFJTDoKKwljYXNlIEdFTl9ETlM6CisJY2FzZSBHRU5fVVJJOgorCQlhLT5kLmlhNSA9IHZhbHVlOworCQlicmVhazsKKworCWNhc2UgR0VOX0RJUk5BTUU6CisJCWEtPmQuZGlybiA9IHZhbHVlOworCQlicmVhazsKKworCWNhc2UgR0VOX0lQQUREOgorCQlhLT5kLmlwID0gdmFsdWU7CisJCWJyZWFrOworCQorCWNhc2UgR0VOX1JJRDoKKwkJYS0+ZC5yaWQgPSB2YWx1ZTsKKwkJYnJlYWs7CisJCX0KKwlhLT50eXBlID0gdHlwZTsKKwl9CisKK3ZvaWQgKkdFTkVSQUxfTkFNRV9nZXQwX3ZhbHVlKEdFTkVSQUxfTkFNRSAqYSwgaW50ICpwdHlwZSkKKwl7CisJaWYgKHB0eXBlKQorCQkqcHR5cGUgPSBhLT50eXBlOworCXN3aXRjaChhLT50eXBlKQorCQl7CisJY2FzZSBHRU5fWDQwMDoKKwljYXNlIEdFTl9FRElQQVJUWToKKwkJcmV0dXJuIGEtPmQub3RoZXI7CisKKwljYXNlIEdFTl9PVEhFUk5BTUU6CisJCXJldHVybiBhLT5kLm90aGVyTmFtZTsKKworCWNhc2UgR0VOX0VNQUlMOgorCWNhc2UgR0VOX0ROUzoKKwljYXNlIEdFTl9VUkk6CisJCXJldHVybiBhLT5kLmlhNTsKKworCWNhc2UgR0VOX0RJUk5BTUU6CisJCXJldHVybiBhLT5kLmRpcm47CisKKwljYXNlIEdFTl9JUEFERDoKKwkJcmV0dXJuIGEtPmQuaXA7CisJCisJY2FzZSBHRU5fUklEOgorCQlyZXR1cm4gYS0+ZC5yaWQ7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KKworaW50IEdFTkVSQUxfTkFNRV9zZXQwX290aGVybmFtZShHRU5FUkFMX05BTUUgKmdlbiwKKwkJCQlBU04xX09CSkVDVCAqb2lkLCBBU04xX1RZUEUgKnZhbHVlKQorCXsKKwlPVEhFUk5BTUUgKm90aDsKKwlvdGggPSBPVEhFUk5BTUVfbmV3KCk7CisJaWYgKCFvdGgpCisJCXJldHVybiAwOworCW90aC0+dHlwZV9pZCA9IG9pZDsKKwlvdGgtPnZhbHVlID0gdmFsdWU7CisJR0VORVJBTF9OQU1FX3NldDBfdmFsdWUoZ2VuLCBHRU5fT1RIRVJOQU1FLCBvdGgpOworCXJldHVybiAxOworCX0KKworaW50IEdFTkVSQUxfTkFNRV9nZXQwX290aGVyTmFtZShHRU5FUkFMX05BTUUgKmdlbiwgCisJCQkJQVNOMV9PQkpFQ1QgKipwb2lkLCBBU04xX1RZUEUgKipwdmFsdWUpCisJeworCWlmIChnZW4tPnR5cGUgIT0gR0VOX09USEVSTkFNRSkKKwkJcmV0dXJuIDA7CisJaWYgKHBvaWQpCisJCSpwb2lkID0gZ2VuLT5kLm90aGVyTmFtZS0+dHlwZV9pZDsKKwlpZiAocHZhbHVlKQorCQkqcHZhbHVlID0gZ2VuLT5kLm90aGVyTmFtZS0+dmFsdWU7CisJcmV0dXJuIDE7CisJfQorCmRpZmYgLS1naXQgYS9jcnlwdG8veDUwOXYzL3YzX2xpYi5jIGIvY3J5cHRvL3g1MDl2My92M19saWIuYwppbmRleCBkZjNhNDhmLi4wZjFlMWQ0IDEwMDY0NAotLS0gYS9jcnlwdG8veDUwOXYzL3YzX2xpYi5jCisrKyBiL2NyeXB0by94NTA5djMvdjNfbGliLmMKQEAgLTg0LDIwICs4NCwyNCBAQAogfQogCiBzdGF0aWMgaW50IGV4dF9jbXAoY29uc3QgWDUwOVYzX0VYVF9NRVRIT0QgKiBjb25zdCAqYSwKLQkJY29uc3QgWDUwOVYzX0VYVF9NRVRIT0QgKiBjb25zdCAqYikKKwkJICAgY29uc3QgWDUwOVYzX0VYVF9NRVRIT0QgKiBjb25zdCAqYikKIHsKIAlyZXR1cm4gKCgqYSktPmV4dF9uaWQgLSAoKmIpLT5leHRfbmlkKTsKIH0KIAotWDUwOVYzX0VYVF9NRVRIT0QgKlg1MDlWM19FWFRfZ2V0X25pZChpbnQgbmlkKQorREVDTEFSRV9PQkpfQlNFQVJDSF9DTVBfRk4oY29uc3QgWDUwOVYzX0VYVF9NRVRIT0QgKiwgY29uc3QgWDUwOVYzX0VYVF9NRVRIT0QgKiwKKwkJCSAgIGV4dCk7CitJTVBMRU1FTlRfT0JKX0JTRUFSQ0hfQ01QX0ZOKGNvbnN0IFg1MDlWM19FWFRfTUVUSE9EICosCisJCQkgICAgIGNvbnN0IFg1MDlWM19FWFRfTUVUSE9EICosIGV4dCk7CisKK2NvbnN0IFg1MDlWM19FWFRfTUVUSE9EICpYNTA5VjNfRVhUX2dldF9uaWQoaW50IG5pZCkKIHsKLQlYNTA5VjNfRVhUX01FVEhPRCB0bXAsICp0ID0gJnRtcCwgKipyZXQ7CisJWDUwOVYzX0VYVF9NRVRIT0QgdG1wOworCWNvbnN0IFg1MDlWM19FWFRfTUVUSE9EICp0ID0gJnRtcCwgKiBjb25zdCAqcmV0OwogCWludCBpZHg7CiAJaWYobmlkIDwgMCkgcmV0dXJuIE5VTEw7CiAJdG1wLmV4dF9uaWQgPSBuaWQ7Ci0JcmV0ID0gKFg1MDlWM19FWFRfTUVUSE9EICoqKSBPQkpfYnNlYXJjaCgoY2hhciAqKSZ0LAotCQkJKGNoYXIgKilzdGFuZGFyZF9leHRzLCBTVEFOREFSRF9FWFRFTlNJT05fQ09VTlQsCi0JCQlzaXplb2YoWDUwOVYzX0VYVF9NRVRIT0QgKiksIChpbnQgKCopKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSlleHRfY21wKTsKKwlyZXQgPSBPQkpfYnNlYXJjaF9leHQoJnQsIHN0YW5kYXJkX2V4dHMsIFNUQU5EQVJEX0VYVEVOU0lPTl9DT1VOVCk7CiAJaWYocmV0KSByZXR1cm4gKnJldDsKIAlpZighZXh0X2xpc3QpIHJldHVybiBOVUxMOwogCWlkeCA9IHNrX1g1MDlWM19FWFRfTUVUSE9EX2ZpbmQoZXh0X2xpc3QsICZ0bXApOwpAQCAtMTA1LDcgKzEwOSw3IEBACiAJcmV0dXJuIHNrX1g1MDlWM19FWFRfTUVUSE9EX3ZhbHVlKGV4dF9saXN0LCBpZHgpOwogfQogCi1YNTA5VjNfRVhUX01FVEhPRCAqWDUwOVYzX0VYVF9nZXQoWDUwOV9FWFRFTlNJT04gKmV4dCkKK2NvbnN0IFg1MDlWM19FWFRfTUVUSE9EICpYNTA5VjNfRVhUX2dldChYNTA5X0VYVEVOU0lPTiAqZXh0KQogewogCWludCBuaWQ7CiAJaWYoKG5pZCA9IE9CSl9vYmoybmlkKGV4dC0+b2JqZWN0KSkgPT0gTklEX3VuZGVmKSByZXR1cm4gTlVMTDsKQEAgLTEyMiw3ICsxMjYsOSBAQAogCiBpbnQgWDUwOVYzX0VYVF9hZGRfYWxpYXMoaW50IG5pZF90bywgaW50IG5pZF9mcm9tKQogewotCVg1MDlWM19FWFRfTUVUSE9EICpleHQsICp0bXBleHQ7CisJY29uc3QgWDUwOVYzX0VYVF9NRVRIT0QgKmV4dDsKKwlYNTA5VjNfRVhUX01FVEhPRCAqdG1wZXh0OworCiAJaWYoIShleHQgPSBYNTA5VjNfRVhUX2dldF9uaWQobmlkX2Zyb20pKSkgewogCQlYNTA5VjNlcnIoWDUwOVYzX0ZfWDUwOVYzX0VYVF9BRERfQUxJQVMsWDUwOVYzX1JfRVhURU5TSU9OX05PVF9GT1VORCk7CiAJCXJldHVybiAwOwpAQCAtMTYxLDcgKzE2Nyw3IEBACiAKIHZvaWQgKlg1MDlWM19FWFRfZDJpKFg1MDlfRVhURU5TSU9OICpleHQpCiB7Ci0JWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZDsKKwljb25zdCBYNTA5VjNfRVhUX01FVEhPRCAqbWV0aG9kOwogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnA7CiAKIAlpZighKG1ldGhvZCA9IFg1MDlWM19FWFRfZ2V0KGV4dCkpKSByZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2NyeXB0by94NTA5djMvdjNfbmNvbnMuYyBiL2NyeXB0by94NTA5djMvdjNfbmNvbnMuYwppbmRleCA0ZTcwNmJlLi42ODlkZjQ2IDEwMDY0NAotLS0gYS9jcnlwdG8veDUwOXYzL3YzX25jb25zLmMKKysrIGIvY3J5cHRvL3g1MDl2My92M19uY29ucy5jCkBAIC02MywxNSArNjMsMjIgQEAKICNpbmNsdWRlIDxvcGVuc3NsL2NvbmYuaD4KICNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgogCi1zdGF0aWMgdm9pZCAqdjJpX05BTUVfQ09OU1RSQUlOVFMoWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZCwKLQkJCQlYNTA5VjNfQ1RYICpjdHgsIFNUQUNLX09GKENPTkZfVkFMVUUpICpudmFsKTsKLXN0YXRpYyBpbnQgaTJyX05BTUVfQ09OU1RSQUlOVFMoWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZCwgCitzdGF0aWMgdm9pZCAqdjJpX05BTUVfQ09OU1RSQUlOVFMoY29uc3QgWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZCwKKwkJCQkgIFg1MDlWM19DVFggKmN0eCwgU1RBQ0tfT0YoQ09ORl9WQUxVRSkgKm52YWwpOworc3RhdGljIGludCBpMnJfTkFNRV9DT05TVFJBSU5UUyhjb25zdCBYNTA5VjNfRVhUX01FVEhPRCAqbWV0aG9kLCAKIAkJCQl2b2lkICphLCBCSU8gKmJwLCBpbnQgaW5kKTsKLXN0YXRpYyBpbnQgZG9faTJyX25hbWVfY29uc3RyYWludHMoWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZCwKLQkJCQlTVEFDS19PRihHRU5FUkFMX1NVQlRSRUUpICp0cmVlcywKLQkJCQkJQklPICpicCwgaW50IGluZCwgY2hhciAqbmFtZSk7CitzdGF0aWMgaW50IGRvX2kycl9uYW1lX2NvbnN0cmFpbnRzKGNvbnN0IFg1MDlWM19FWFRfTUVUSE9EICptZXRob2QsCisJCQkJICAgU1RBQ0tfT0YoR0VORVJBTF9TVUJUUkVFKSAqdHJlZXMsCisJCQkJICAgQklPICpicCwgaW50IGluZCwgY2hhciAqbmFtZSk7CiBzdGF0aWMgaW50IHByaW50X25jX2lwYWRkKEJJTyAqYnAsIEFTTjFfT0NURVRfU1RSSU5HICppcCk7CiAKK3N0YXRpYyBpbnQgbmNfbWF0Y2goR0VORVJBTF9OQU1FICpnZW4sIE5BTUVfQ09OU1RSQUlOVFMgKm5jKTsKK3N0YXRpYyBpbnQgbmNfbWF0Y2hfc2luZ2xlKEdFTkVSQUxfTkFNRSAqc3ViLCBHRU5FUkFMX05BTUUgKmdlbik7CitzdGF0aWMgaW50IG5jX2RuKFg1MDlfTkFNRSAqc3ViLCBYNTA5X05BTUUgKm5tKTsKK3N0YXRpYyBpbnQgbmNfZG5zKEFTTjFfSUE1U1RSSU5HICpzdWIsIEFTTjFfSUE1U1RSSU5HICpkbnMpOworc3RhdGljIGludCBuY19lbWFpbChBU04xX0lBNVNUUklORyAqc3ViLCBBU04xX0lBNVNUUklORyAqZW1sKTsKK3N0YXRpYyBpbnQgbmNfdXJpKEFTTjFfSUE1U1RSSU5HICp1cmksIEFTTjFfSUE1U1RSSU5HICpiYXNlKTsKKwogY29uc3QgWDUwOVYzX0VYVF9NRVRIT0QgdjNfbmFtZV9jb25zdHJhaW50cyA9IHsKIAlOSURfbmFtZV9jb25zdHJhaW50cywgMCwKIAlBU04xX0lURU1fcmVmKE5BTUVfQ09OU1RSQUlOVFMpLApAQCAtOTksOCArMTA2LDggQEAKIElNUExFTUVOVF9BU04xX0FMTE9DX0ZVTkNUSU9OUyhHRU5FUkFMX1NVQlRSRUUpCiBJTVBMRU1FTlRfQVNOMV9BTExPQ19GVU5DVElPTlMoTkFNRV9DT05TVFJBSU5UUykKIAotc3RhdGljIHZvaWQgKnYyaV9OQU1FX0NPTlNUUkFJTlRTKFg1MDlWM19FWFRfTUVUSE9EICptZXRob2QsCi0JCQkJWDUwOVYzX0NUWCAqY3R4LCBTVEFDS19PRihDT05GX1ZBTFVFKSAqbnZhbCkKK3N0YXRpYyB2b2lkICp2MmlfTkFNRV9DT05TVFJBSU5UUyhjb25zdCBYNTA5VjNfRVhUX01FVEhPRCAqbWV0aG9kLAorCQkJCSAgWDUwOVYzX0NUWCAqY3R4LCBTVEFDS19PRihDT05GX1ZBTFVFKSAqbnZhbCkKIAl7CiAJaW50IGk7CiAJQ09ORl9WQUxVRSB0dmFsLCAqdmFsOwpAQCAtMTU1LDggKzE2Miw4IEBACiAKIAkKIAotc3RhdGljIGludCBpMnJfTkFNRV9DT05TVFJBSU5UUyhYNTA5VjNfRVhUX01FVEhPRCAqbWV0aG9kLAotCQkJCXZvaWQgKmEsIEJJTyAqYnAsIGludCBpbmQpCitzdGF0aWMgaW50IGkycl9OQU1FX0NPTlNUUkFJTlRTKGNvbnN0IFg1MDlWM19FWFRfTUVUSE9EICptZXRob2QsIHZvaWQgKmEsCisJCQkJQklPICpicCwgaW50IGluZCkKIAl7CiAJTkFNRV9DT05TVFJBSU5UUyAqbmNvbnMgPSBhOwogCWRvX2kycl9uYW1lX2NvbnN0cmFpbnRzKG1ldGhvZCwgbmNvbnMtPnBlcm1pdHRlZFN1YnRyZWVzLApAQCAtMTY2LDkgKzE3Myw5IEBACiAJcmV0dXJuIDE7CiAJfQogCi1zdGF0aWMgaW50IGRvX2kycl9uYW1lX2NvbnN0cmFpbnRzKFg1MDlWM19FWFRfTUVUSE9EICptZXRob2QsCi0JCQkJU1RBQ0tfT0YoR0VORVJBTF9TVUJUUkVFKSAqdHJlZXMsCi0JCQkJCUJJTyAqYnAsIGludCBpbmQsIGNoYXIgKm5hbWUpCitzdGF0aWMgaW50IGRvX2kycl9uYW1lX2NvbnN0cmFpbnRzKGNvbnN0IFg1MDlWM19FWFRfTUVUSE9EICptZXRob2QsCisJCQkJICAgU1RBQ0tfT0YoR0VORVJBTF9TVUJUUkVFKSAqdHJlZXMsCisJCQkJICAgQklPICpicCwgaW50IGluZCwgY2hhciAqbmFtZSkKIAl7CiAJR0VORVJBTF9TVUJUUkVFICp0cmVlOwogCWludCBpOwpAQCAtMjE4LDMgKzIyNSwyODIgQEAKIAlyZXR1cm4gMTsKIAl9CiAKKy8qIENoZWNrIGEgY2VydGlmaWNhdGUgY29uZm9ybXMgdG8gYSBzcGVjaWZpZWQgc2V0IG9mIGNvbnN0cmFpbnRzLgorICogUmV0dXJuIHZhbHVlczoKKyAqICBYNTA5X1ZfT0s6IEFsbCBjb25zdHJhaW50cyBvYmV5ZWQuCisgKiAgWDUwOV9WX0VSUl9QRVJNSVRURURfVklPTEFUSU9OOiBQZXJtaXR0ZWQgc3VidHJlZSB2aW9sYXRpb24uCisgKiAgWDUwOV9WX0VSUl9FWENMVURFRF9WSU9MQVRJT046IEV4Y2x1ZGVkIHN1YnRyZWUgdmlvbGF0aW9uLgorICogIFg1MDlfVl9FUlJfU1VCVFJFRV9NSU5NQVg6IE1pbiBvciBtYXggdmFsdWVzIHByZXNlbnQgYW5kIG1hdGNoaW5nIHR5cGUuCisgKiAgWDUwOV9WX0VSUl9VTlNVUFBPUlRFRF9DT05TVFJBSU5UX1RZUEU6ICBVbnN1cHBvcnRlZCBjb25zdHJhaW50IHR5cGUuCisgKiAgWDUwOV9WX0VSUl9VTlNVUFBPUlRFRF9DT05TVFJBSU5UX1NZTlRBWDogYmFkIHVuc3VwcG9ydGVkIGNvbnN0cmFpbnQgc3ludGF4LgorICogIFg1MDlfVl9FUlJfVU5TVVBQT1JURURfTkFNRV9TWU5UQVg6IGJhZCBvciB1bnN1cHBvcnRlZCBzeW50YXggb2YgbmFtZQorCisgKi8KKworaW50IE5BTUVfQ09OU1RSQUlOVFNfY2hlY2soWDUwOSAqeCwgTkFNRV9DT05TVFJBSU5UUyAqbmMpCisJeworCWludCByLCBpOworCVg1MDlfTkFNRSAqbm07CisKKwlubSA9IFg1MDlfZ2V0X3N1YmplY3RfbmFtZSh4KTsKKworCWlmIChYNTA5X05BTUVfZW50cnlfY291bnQobm0pID4gMCkKKwkJeworCQlHRU5FUkFMX05BTUUgZ250bXA7CisJCWdudG1wLnR5cGUgPSBHRU5fRElSTkFNRTsKKwkJZ250bXAuZC5kaXJlY3RvcnlOYW1lID0gbm07CisKKwkJciA9IG5jX21hdGNoKCZnbnRtcCwgbmMpOworCisJCWlmIChyICE9IFg1MDlfVl9PSykKKwkJCXJldHVybiByOworCisJCWdudG1wLnR5cGUgPSBHRU5fRU1BSUw7CisKKworCQkvKiBQcm9jZXNzIGFueSBlbWFpbCBhZGRyZXNzIGF0dHJpYnV0ZXMgaW4gc3ViamVjdCBuYW1lICovCisKKwkJZm9yIChpID0gLTE7OykKKwkJCXsKKwkJCVg1MDlfTkFNRV9FTlRSWSAqbmU7CisJCQlpID0gWDUwOV9OQU1FX2dldF9pbmRleF9ieV9OSUQobm0sCisJCQkJCQkgICAgICAgTklEX3BrY3M5X2VtYWlsQWRkcmVzcywKKwkJCQkJCSAgICAgICBpKTsKKwkJCWlmIChpID09IC0xKQorCQkJCWJyZWFrOworCQkJbmUgPSBYNTA5X05BTUVfZ2V0X2VudHJ5KG5tLCBpKTsKKwkJCWdudG1wLmQucmZjODIyTmFtZSA9IFg1MDlfTkFNRV9FTlRSWV9nZXRfZGF0YShuZSk7CisJCQlpZiAoZ250bXAuZC5yZmM4MjJOYW1lLT50eXBlICE9IFZfQVNOMV9JQTVTVFJJTkcpCisJCQkJcmV0dXJuIFg1MDlfVl9FUlJfVU5TVVBQT1JURURfTkFNRV9TWU5UQVg7CisKKwkJCXIgPSBuY19tYXRjaCgmZ250bXAsIG5jKTsKKworCQkJaWYgKHIgIT0gWDUwOV9WX09LKQorCQkJCXJldHVybiByOworCQkJfQorCQkKKwkJfQorCisJZm9yIChpID0gMDsgaSA8IHNrX0dFTkVSQUxfTkFNRV9udW0oeC0+YWx0bmFtZSk7IGkrKykKKwkJeworCQlHRU5FUkFMX05BTUUgKmdlbiA9IHNrX0dFTkVSQUxfTkFNRV92YWx1ZSh4LT5hbHRuYW1lLCBpKTsKKwkJciA9IG5jX21hdGNoKGdlbiwgbmMpOworCQlpZiAociAhPSBYNTA5X1ZfT0spCisJCQlyZXR1cm4gcjsKKwkJfQorCisJcmV0dXJuIFg1MDlfVl9PSzsKKworCX0KKworc3RhdGljIGludCBuY19tYXRjaChHRU5FUkFMX05BTUUgKmdlbiwgTkFNRV9DT05TVFJBSU5UUyAqbmMpCisJeworCUdFTkVSQUxfU1VCVFJFRSAqc3ViOworCWludCBpLCByLCBtYXRjaCA9IDA7CisKKwkvKiBQZXJtaXR0ZWQgc3VidHJlZXM6IGlmIGFueSBzdWJ0cmVlcyBleGlzdCBvZiBtYXRjaGluZyB0aGUgdHlwZQorCSAqIGF0IGxlYXN0IG9uZSBzdWJ0cmVlIG11c3QgbWF0Y2guCisJICovCisKKwlmb3IgKGkgPSAwOyBpIDwgc2tfR0VORVJBTF9TVUJUUkVFX251bShuYy0+cGVybWl0dGVkU3VidHJlZXMpOyBpKyspCisJCXsKKwkJc3ViID0gc2tfR0VORVJBTF9TVUJUUkVFX3ZhbHVlKG5jLT5wZXJtaXR0ZWRTdWJ0cmVlcywgaSk7CisJCWlmIChnZW4tPnR5cGUgIT0gc3ViLT5iYXNlLT50eXBlKQorCQkJY29udGludWU7CisJCWlmIChzdWItPm1pbmltdW0gfHwgc3ViLT5tYXhpbXVtKQorCQkJcmV0dXJuIFg1MDlfVl9FUlJfU1VCVFJFRV9NSU5NQVg7CisJCS8qIElmIHdlIGFscmVhZHkgaGF2ZSBhIG1hdGNoIGRvbid0IGJvdGhlciB0cnlpbmcgYW55IG1vcmUgKi8KKwkJaWYgKG1hdGNoID09IDIpCisJCQljb250aW51ZTsKKwkJaWYgKG1hdGNoID09IDApCisJCQltYXRjaCA9IDE7CisJCXIgPSBuY19tYXRjaF9zaW5nbGUoZ2VuLCBzdWItPmJhc2UpOworCQlpZiAociA9PSBYNTA5X1ZfT0spCisJCQltYXRjaCA9IDI7CisJCWVsc2UgaWYgKHIgIT0gWDUwOV9WX0VSUl9QRVJNSVRURURfVklPTEFUSU9OKQorCQkJcmV0dXJuIHI7CisJCX0KKworCWlmIChtYXRjaCA9PSAxKQorCQlyZXR1cm4gWDUwOV9WX0VSUl9QRVJNSVRURURfVklPTEFUSU9OOworCisJLyogRXhjbHVkZWQgc3VidHJlZXM6IG11c3Qgbm90IG1hdGNoIGFueSBvZiB0aGVzZSAqLworCisJZm9yIChpID0gMDsgaSA8IHNrX0dFTkVSQUxfU1VCVFJFRV9udW0obmMtPmV4Y2x1ZGVkU3VidHJlZXMpOyBpKyspCisJCXsKKwkJc3ViID0gc2tfR0VORVJBTF9TVUJUUkVFX3ZhbHVlKG5jLT5leGNsdWRlZFN1YnRyZWVzLCBpKTsKKwkJaWYgKGdlbi0+dHlwZSAhPSBzdWItPmJhc2UtPnR5cGUpCisJCQljb250aW51ZTsKKwkJaWYgKHN1Yi0+bWluaW11bSB8fCBzdWItPm1heGltdW0pCisJCQlyZXR1cm4gWDUwOV9WX0VSUl9TVUJUUkVFX01JTk1BWDsKKworCQlyID0gbmNfbWF0Y2hfc2luZ2xlKGdlbiwgc3ViLT5iYXNlKTsKKwkJaWYgKHIgPT0gWDUwOV9WX09LKQorCQkJcmV0dXJuIFg1MDlfVl9FUlJfRVhDTFVERURfVklPTEFUSU9OOworCQllbHNlIGlmIChyICE9IFg1MDlfVl9FUlJfUEVSTUlUVEVEX1ZJT0xBVElPTikKKwkJCXJldHVybiByOworCisJCX0KKworCXJldHVybiBYNTA5X1ZfT0s7CisKKwl9CisKK3N0YXRpYyBpbnQgbmNfbWF0Y2hfc2luZ2xlKEdFTkVSQUxfTkFNRSAqZ2VuLCBHRU5FUkFMX05BTUUgKmJhc2UpCisJeworCXN3aXRjaChiYXNlLT50eXBlKQorCQl7CisJCWNhc2UgR0VOX0RJUk5BTUU6CisJCXJldHVybiBuY19kbihnZW4tPmQuZGlyZWN0b3J5TmFtZSwgYmFzZS0+ZC5kaXJlY3RvcnlOYW1lKTsKKworCQljYXNlIEdFTl9ETlM6CisJCXJldHVybiBuY19kbnMoZ2VuLT5kLmROU05hbWUsIGJhc2UtPmQuZE5TTmFtZSk7CisKKwkJY2FzZSBHRU5fRU1BSUw6CisJCXJldHVybiBuY19lbWFpbChnZW4tPmQucmZjODIyTmFtZSwgYmFzZS0+ZC5yZmM4MjJOYW1lKTsKKworCQljYXNlIEdFTl9VUkk6CisJCXJldHVybiBuY191cmkoZ2VuLT5kLnVuaWZvcm1SZXNvdXJjZUlkZW50aWZpZXIsCisJCQkJCWJhc2UtPmQudW5pZm9ybVJlc291cmNlSWRlbnRpZmllcik7CisKKwkJZGVmYXVsdDoKKwkJcmV0dXJuIFg1MDlfVl9FUlJfVU5TVVBQT1JURURfQ09OU1RSQUlOVF9UWVBFOworCQl9CisKKwl9CisKKy8qIGRpcmVjdG9yeU5hbWUgbmFtZSBjb25zdHJhaW50IG1hdGNoaW5nLgorICogVGhlIGNhbm9uaWNhbCBlbmNvZGluZyBvZiBYNTA5X05BTUUgbWFrZXMgdGhpcyBjb21wYXJpc29uIGVhc3kuIEl0IGlzCisgKiBtYXRjaGVkIGlmIHRoZSBzdWJ0cmVlIGlzIGEgc3Vic2V0IG9mIHRoZSBuYW1lLgorICovCisKK3N0YXRpYyBpbnQgbmNfZG4oWDUwOV9OQU1FICpubSwgWDUwOV9OQU1FICpiYXNlKQorCXsKKwkvKiBFbnN1cmUgY2Fub25pY2FsIGVuY29kaW5ncyBhcmUgdXAgdG8gZGF0ZS4gICovCisJaWYgKG5tLT5tb2RpZmllZCAmJiBpMmRfWDUwOV9OQU1FKG5tLCBOVUxMKSA8IDApCisJCXJldHVybiBYNTA5X1ZfRVJSX09VVF9PRl9NRU07CisJaWYgKGJhc2UtPm1vZGlmaWVkICYmIGkyZF9YNTA5X05BTUUoYmFzZSwgTlVMTCkgPCAwKQorCQlyZXR1cm4gWDUwOV9WX0VSUl9PVVRfT0ZfTUVNOworCWlmIChiYXNlLT5jYW5vbl9lbmNsZW4gPiBubS0+Y2Fub25fZW5jbGVuKQorCQlyZXR1cm4gWDUwOV9WX0VSUl9QRVJNSVRURURfVklPTEFUSU9OOworCWlmIChtZW1jbXAoYmFzZS0+Y2Fub25fZW5jLCBubS0+Y2Fub25fZW5jLCBiYXNlLT5jYW5vbl9lbmNsZW4pKQorCQlyZXR1cm4gWDUwOV9WX0VSUl9QRVJNSVRURURfVklPTEFUSU9OOworCXJldHVybiBYNTA5X1ZfT0s7CisJfQorCitzdGF0aWMgaW50IG5jX2RucyhBU04xX0lBNVNUUklORyAqZG5zLCBBU04xX0lBNVNUUklORyAqYmFzZSkKKwl7CisJY2hhciAqYmFzZXB0ciA9IChjaGFyICopYmFzZS0+ZGF0YTsKKwljaGFyICpkbnNwdHIgPSAoY2hhciAqKWRucy0+ZGF0YTsKKwkvKiBFbXB0eSBtYXRjaGVzIGV2ZXJ5dGhpbmcgKi8KKwlpZiAoISpiYXNlcHRyKQorCQlyZXR1cm4gWDUwOV9WX09LOworCS8qIE90aGVyd2lzZSBjYW4gYWRkIHplcm8gb3IgbW9yZSBjb21wb25lbnRzIG9uIHRoZSBsZWZ0IHNvCisJICogY29tcGFyZSBSSFMgYW5kIGlmIGRucyBpcyBsb25nZXIgYW5kIGV4cGVjdCAnLicgYXMgcHJlY2VkaW5nCisJICogY2hhcmFjdGVyLgorCSAqLworCWlmIChkbnMtPmxlbmd0aCA+IGJhc2UtPmxlbmd0aCkKKwkJeworCQlkbnNwdHIgKz0gZG5zLT5sZW5ndGggLSBiYXNlLT5sZW5ndGg7CisJCWlmIChkbnNwdHJbLTFdICE9ICcuJykKKwkJCXJldHVybiBYNTA5X1ZfRVJSX1BFUk1JVFRFRF9WSU9MQVRJT047CisJCX0KKworCWlmIChzdHJjYXNlY21wKGJhc2VwdHIsIGRuc3B0cikpCisJCQlyZXR1cm4gWDUwOV9WX0VSUl9QRVJNSVRURURfVklPTEFUSU9OOworCisJcmV0dXJuIFg1MDlfVl9PSzsKKworCX0KKworc3RhdGljIGludCBuY19lbWFpbChBU04xX0lBNVNUUklORyAqZW1sLCBBU04xX0lBNVNUUklORyAqYmFzZSkKKwl7CisJY29uc3QgY2hhciAqYmFzZXB0ciA9IChjaGFyICopYmFzZS0+ZGF0YTsKKwljb25zdCBjaGFyICplbWxwdHIgPSAoY2hhciAqKWVtbC0+ZGF0YTsKKworCWNvbnN0IGNoYXIgKmJhc2VhdCA9IHN0cmNocihiYXNlcHRyLCAnQCcpOworCWNvbnN0IGNoYXIgKmVtbGF0ID0gc3RyY2hyKGVtbHB0ciwgJ0AnKTsKKwlpZiAoIWVtbGF0KQorCQlyZXR1cm4gWDUwOV9WX0VSUl9VTlNVUFBPUlRFRF9OQU1FX1NZTlRBWDsKKwkvKiBTcGVjaWFsIGNhc2U6IGluaXRhbCAnLicgaXMgUkhTIG1hdGNoICovCisJaWYgKCFiYXNlYXQgJiYgKCpiYXNlcHRyID09ICcuJykpCisJCXsKKwkJaWYgKGVtbC0+bGVuZ3RoID4gYmFzZS0+bGVuZ3RoKQorCQkJeworCQkJZW1scHRyICs9IGVtbC0+bGVuZ3RoIC0gYmFzZS0+bGVuZ3RoOworCQkJaWYgKCFzdHJjYXNlY21wKGJhc2VwdHIsIGVtbHB0cikpCisJCQkJcmV0dXJuIFg1MDlfVl9PSzsKKwkJCX0KKwkJcmV0dXJuIFg1MDlfVl9FUlJfUEVSTUlUVEVEX1ZJT0xBVElPTjsKKwkJfQorCisJLyogSWYgd2UgaGF2ZSBhbnl0aGluZyBiZWZvcmUgJ0AnIG1hdGNoIGxvY2FsIHBhcnQgKi8KKworCWlmIChiYXNlYXQpCisJCXsKKwkJaWYgKGJhc2VhdCAhPSBiYXNlcHRyKQorCQkJeworCQkJaWYgKChiYXNlYXQgLSBiYXNlcHRyKSAhPSAoZW1sYXQgLSBlbWxwdHIpKQorCQkJCXJldHVybiBYNTA5X1ZfRVJSX1BFUk1JVFRFRF9WSU9MQVRJT047CisJCQkvKiBDYXNlIHNlbnNpdGl2ZSBtYXRjaCBvZiBsb2NhbCBwYXJ0ICovCisJCQlpZiAoc3RybmNtcChiYXNlcHRyLCBlbWxwdHIsIGVtbGF0IC0gZW1scHRyKSkKKwkJCQlyZXR1cm4gWDUwOV9WX0VSUl9QRVJNSVRURURfVklPTEFUSU9OOworCQkJfQorCQkvKiBQb3NpdGlvbiBiYXNlIGFmdGVyICdAJyAqLworCQliYXNlcHRyID0gYmFzZWF0ICsgMTsKKwkJfQorCWVtbHB0ciA9IGVtbGF0ICsgMTsKKwkvKiBKdXN0IGhhdmUgaG9zdG5hbWUgbGVmdCB0byBtYXRjaDogY2FzZSBpbnNlbnNpdGl2ZSAqLworCWlmIChzdHJjYXNlY21wKGJhc2VwdHIsIGVtbHB0cikpCisJCXJldHVybiBYNTA5X1ZfRVJSX1BFUk1JVFRFRF9WSU9MQVRJT047CisKKwlyZXR1cm4gWDUwOV9WX09LOworCisJfQorCitzdGF0aWMgaW50IG5jX3VyaShBU04xX0lBNVNUUklORyAqdXJpLCBBU04xX0lBNVNUUklORyAqYmFzZSkKKwl7CisJY29uc3QgY2hhciAqYmFzZXB0ciA9IChjaGFyICopYmFzZS0+ZGF0YTsKKwljb25zdCBjaGFyICpob3N0cHRyID0gKGNoYXIgKil1cmktPmRhdGE7CisJY29uc3QgY2hhciAqcCA9IHN0cmNocihob3N0cHRyLCAnOicpOworCWludCBob3N0bGVuOworCS8qIENoZWNrIGZvciBmb286Ly8gYW5kIHNraXAgcGFzdCBpdCAqLworCWlmICghcCB8fCAocFsxXSAhPSAnLycpIHx8IChwWzJdICE9ICcvJykpCisJCXJldHVybiBYNTA5X1ZfRVJSX1VOU1VQUE9SVEVEX05BTUVfU1lOVEFYOworCWhvc3RwdHIgPSBwICsgMzsKKworCS8qIERldGVybWluZSBsZW5ndGggb2YgaG9zdG5hbWUgcGFydCBvZiBVUkkgKi8KKworCS8qIExvb2sgZm9yIGEgcG9ydCBpbmRpY2F0b3IgYXMgZW5kIG9mIGhvc3RuYW1lIGZpcnN0ICovCisKKwlwID0gc3RyY2hyKGhvc3RwdHIsICc6Jyk7CisJLyogT3RoZXJ3aXNlIGxvb2sgZm9yIHRyYWlsaW5nIHNsYXNoICovCisJaWYgKCFwKQorCQlwID0gc3RyY2hyKGhvc3RwdHIsICcvJyk7CisKKwlpZiAoIXApCisJCWhvc3RsZW4gPSBzdHJsZW4oaG9zdHB0cik7CisJZWxzZQorCQlob3N0bGVuID0gcCAtIGhvc3RwdHI7CisKKwlpZiAoaG9zdGxlbiA9PSAwKQorCQlyZXR1cm4gWDUwOV9WX0VSUl9VTlNVUFBPUlRFRF9OQU1FX1NZTlRBWDsKKworCS8qIFNwZWNpYWwgY2FzZTogaW5pdGFsICcuJyBpcyBSSFMgbWF0Y2ggKi8KKwlpZiAoKmJhc2VwdHIgPT0gJy4nKQorCQl7CisJCWlmIChob3N0bGVuID4gYmFzZS0+bGVuZ3RoKQorCQkJeworCQkJcCA9IGhvc3RwdHIgKyBob3N0bGVuIC0gYmFzZS0+bGVuZ3RoOworCQkJaWYgKCFzdHJuY2FzZWNtcChwLCBiYXNlcHRyLCBiYXNlLT5sZW5ndGgpKQorCQkJCXJldHVybiBYNTA5X1ZfT0s7CisJCQl9CisJCXJldHVybiBYNTA5X1ZfRVJSX1BFUk1JVFRFRF9WSU9MQVRJT047CisJCX0KKworCWlmICgoYmFzZS0+bGVuZ3RoICE9IChpbnQpaG9zdGxlbikgfHwgc3RybmNhc2VjbXAoaG9zdHB0ciwgYmFzZXB0ciwgaG9zdGxlbikpCisJCXJldHVybiBYNTA5X1ZfRVJSX1BFUk1JVFRFRF9WSU9MQVRJT047CisKKwlyZXR1cm4gWDUwOV9WX09LOworCisJfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL3g1MDl2My92M19vY3NwLmMgYi9jcnlwdG8veDUwOXYzL3YzX29jc3AuYwppbmRleCA1YzE5Y2Y0Li4wYzE2NWFmIDEwMDY0NAotLS0gYS9jcnlwdG8veDUwOXYzL3YzX29jc3AuYworKysgYi9jcnlwdG8veDUwOXYzL3YzX29jc3AuYwpAQCAtNjgsMTkgKzY4LDI2IEBACiAvKiBPQ1NQIGV4dGVuc2lvbnMgYW5kIGEgY291cGxlIG9mIENSTCBlbnRyeSBleHRlbnNpb25zCiAgKi8KIAotc3RhdGljIGludCBpMnJfb2NzcF9jcmxpZChYNTA5VjNfRVhUX01FVEhPRCAqbWV0aG9kLCB2b2lkICpub25jZSwgQklPICpvdXQsIGludCBpbmRlbnQpOwotc3RhdGljIGludCBpMnJfb2NzcF9hY3V0b2ZmKFg1MDlWM19FWFRfTUVUSE9EICptZXRob2QsIHZvaWQgKm5vbmNlLCBCSU8gKm91dCwgaW50IGluZGVudCk7Ci1zdGF0aWMgaW50IGkycl9vYmplY3QoWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZCwgdm9pZCAqb2JqLCBCSU8gKm91dCwgaW50IGluZGVudCk7CitzdGF0aWMgaW50IGkycl9vY3NwX2NybGlkKGNvbnN0IFg1MDlWM19FWFRfTUVUSE9EICptZXRob2QsIHZvaWQgKm5vbmNlLAorCQkJICBCSU8gKm91dCwgaW50IGluZGVudCk7CitzdGF0aWMgaW50IGkycl9vY3NwX2FjdXRvZmYoY29uc3QgWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZCwgdm9pZCAqbm9uY2UsCisJCQkgICAgQklPICpvdXQsIGludCBpbmRlbnQpOworc3RhdGljIGludCBpMnJfb2JqZWN0KGNvbnN0IFg1MDlWM19FWFRfTUVUSE9EICptZXRob2QsIHZvaWQgKm9iaiwgQklPICpvdXQsCisJCSAgICAgIGludCBpbmRlbnQpOwogCiBzdGF0aWMgdm9pZCAqb2NzcF9ub25jZV9uZXcodm9pZCk7CiBzdGF0aWMgaW50IGkyZF9vY3NwX25vbmNlKHZvaWQgKmEsIHVuc2lnbmVkIGNoYXIgKipwcCk7CiBzdGF0aWMgdm9pZCAqZDJpX29jc3Bfbm9uY2Uodm9pZCAqYSwgY29uc3QgdW5zaWduZWQgY2hhciAqKnBwLCBsb25nIGxlbmd0aCk7CiBzdGF0aWMgdm9pZCBvY3NwX25vbmNlX2ZyZWUodm9pZCAqYSk7Ci1zdGF0aWMgaW50IGkycl9vY3NwX25vbmNlKFg1MDlWM19FWFRfTUVUSE9EICptZXRob2QsIHZvaWQgKm5vbmNlLCBCSU8gKm91dCwgaW50IGluZGVudCk7CitzdGF0aWMgaW50IGkycl9vY3NwX25vbmNlKGNvbnN0IFg1MDlWM19FWFRfTUVUSE9EICptZXRob2QsIHZvaWQgKm5vbmNlLAorCQkJICBCSU8gKm91dCwgaW50IGluZGVudCk7CiAKLXN0YXRpYyBpbnQgaTJyX29jc3Bfbm9jaGVjayhYNTA5VjNfRVhUX01FVEhPRCAqbWV0aG9kLCB2b2lkICpub2NoZWNrLCBCSU8gKm91dCwgaW50IGluZGVudCk7Ci1zdGF0aWMgdm9pZCAqczJpX29jc3Bfbm9jaGVjayhYNTA5VjNfRVhUX01FVEhPRCAqbWV0aG9kLCBYNTA5VjNfQ1RYICpjdHgsIGNvbnN0IGNoYXIgKnN0cik7Ci1zdGF0aWMgaW50IGkycl9vY3NwX3NlcnZpY2Vsb2MoWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZCwgdm9pZCAqaW4sIEJJTyAqYnAsIGludCBpbmQpOworc3RhdGljIGludCBpMnJfb2NzcF9ub2NoZWNrKGNvbnN0IFg1MDlWM19FWFRfTUVUSE9EICptZXRob2QsCisJCQkgICAgdm9pZCAqbm9jaGVjaywgQklPICpvdXQsIGludCBpbmRlbnQpOworc3RhdGljIHZvaWQgKnMyaV9vY3NwX25vY2hlY2soY29uc3QgWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZCwgWDUwOVYzX0NUWCAqY3R4LAorCQkJICAgICAgY29uc3QgY2hhciAqc3RyKTsKK3N0YXRpYyBpbnQgaTJyX29jc3Bfc2VydmljZWxvYyhjb25zdCBYNTA5VjNfRVhUX01FVEhPRCAqbWV0aG9kLCB2b2lkICppbiwKKwkJCSAgICAgICBCSU8gKmJwLCBpbnQgaW5kKTsKIAogY29uc3QgWDUwOVYzX0VYVF9NRVRIT0QgdjNfb2NzcF9jcmxpZCA9IHsKIAlOSURfaWRfcGtpeF9PQ1NQX0NybElELCAwLCBBU04xX0lURU1fcmVmKE9DU1BfQ1JMSUQpLApAQCAtMTQ4LDcgKzE1NSw4IEBACiAJTlVMTAogfTsKIAotc3RhdGljIGludCBpMnJfb2NzcF9jcmxpZChYNTA5VjNfRVhUX01FVEhPRCAqbWV0aG9kLCB2b2lkICppbiwgQklPICpicCwgaW50IGluZCkKK3N0YXRpYyBpbnQgaTJyX29jc3BfY3JsaWQoY29uc3QgWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZCwgdm9pZCAqaW4sIEJJTyAqYnAsCisJCQkgIGludCBpbmQpCiB7CiAJT0NTUF9DUkxJRCAqYSA9IGluOwogCWlmIChhLT5jcmxVcmwpCkBAIC0xNzQsNyArMTgyLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpMnJfb2NzcF9hY3V0b2ZmKFg1MDlWM19FWFRfTUVUSE9EICptZXRob2QsIHZvaWQgKmN1dG9mZiwgQklPICpicCwgaW50IGluZCkKK3N0YXRpYyBpbnQgaTJyX29jc3BfYWN1dG9mZihjb25zdCBYNTA5VjNfRVhUX01FVEhPRCAqbWV0aG9kLCB2b2lkICpjdXRvZmYsCisJCQkgICAgQklPICpicCwgaW50IGluZCkKIHsKIAlpZiAoQklPX3ByaW50ZihicCwgIiUqcyIsIGluZCwgIiIpIDw9IDApIHJldHVybiAwOwogCWlmKCFBU04xX0dFTkVSQUxJWkVEVElNRV9wcmludChicCwgY3V0b2ZmKSkgcmV0dXJuIDA7CkBAIC0xODIsNyArMTkxLDggQEAKIH0KIAogCi1zdGF0aWMgaW50IGkycl9vYmplY3QoWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZCwgdm9pZCAqb2lkLCBCSU8gKmJwLCBpbnQgaW5kKQorc3RhdGljIGludCBpMnJfb2JqZWN0KGNvbnN0IFg1MDlWM19FWFRfTUVUSE9EICptZXRob2QsIHZvaWQgKm9pZCwgQklPICpicCwKKwkJICAgICAgaW50IGluZCkKIHsKIAlpZiAoQklPX3ByaW50ZihicCwgIiUqcyIsIGluZCwgIiIpIDw9IDApIHJldHVybiAwOwogCWlmKGkyYV9BU04xX09CSkVDVChicCwgb2lkKSA8PSAwKSByZXR1cm4gMDsKQEAgLTIzMiw3ICsyNDIsOCBAQAogCU1fQVNOMV9PQ1RFVF9TVFJJTkdfZnJlZShhKTsKIH0KIAotc3RhdGljIGludCBpMnJfb2NzcF9ub25jZShYNTA5VjNfRVhUX01FVEhPRCAqbWV0aG9kLCB2b2lkICpub25jZSwgQklPICpvdXQsIGludCBpbmRlbnQpCitzdGF0aWMgaW50IGkycl9vY3NwX25vbmNlKGNvbnN0IFg1MDlWM19FWFRfTUVUSE9EICptZXRob2QsIHZvaWQgKm5vbmNlLAorCQkJICBCSU8gKm91dCwgaW50IGluZGVudCkKIHsKIAlpZihCSU9fcHJpbnRmKG91dCwgIiUqcyIsIGluZGVudCwgIiIpIDw9IDApIHJldHVybiAwOwogCWlmKGkyYV9BU04xX1NUUklORyhvdXQsIG5vbmNlLCBWX0FTTjFfT0NURVRfU1RSSU5HKSA8PSAwKSByZXR1cm4gMDsKQEAgLTI0MSwxNyArMjUyLDIwIEBACiAKIC8qIE5vY2hlY2sgaXMganVzdCBhIHNpbmdsZSBOVUxMLiBEb24ndCBwcmludCBhbnl0aGluZyBhbmQgYWx3YXlzIHNldCBpdCAqLwogCi1zdGF0aWMgaW50IGkycl9vY3NwX25vY2hlY2soWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZCwgdm9pZCAqbm9jaGVjaywgQklPICpvdXQsIGludCBpbmRlbnQpCitzdGF0aWMgaW50IGkycl9vY3NwX25vY2hlY2soY29uc3QgWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZCwgdm9pZCAqbm9jaGVjaywKKwkJCSAgICBCSU8gKm91dCwgaW50IGluZGVudCkKIHsKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHZvaWQgKnMyaV9vY3NwX25vY2hlY2soWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZCwgWDUwOVYzX0NUWCAqY3R4LCBjb25zdCBjaGFyICpzdHIpCitzdGF0aWMgdm9pZCAqczJpX29jc3Bfbm9jaGVjayhjb25zdCBYNTA5VjNfRVhUX01FVEhPRCAqbWV0aG9kLCBYNTA5VjNfQ1RYICpjdHgsCisJCQkgICAgICBjb25zdCBjaGFyICpzdHIpCiB7CiAJcmV0dXJuIEFTTjFfTlVMTF9uZXcoKTsKIH0KIAotc3RhdGljIGludCBpMnJfb2NzcF9zZXJ2aWNlbG9jKFg1MDlWM19FWFRfTUVUSE9EICptZXRob2QsIHZvaWQgKmluLCBCSU8gKmJwLCBpbnQgaW5kKQorc3RhdGljIGludCBpMnJfb2NzcF9zZXJ2aWNlbG9jKGNvbnN0IFg1MDlWM19FWFRfTUVUSE9EICptZXRob2QsIHZvaWQgKmluLAorCQkJICAgICAgIEJJTyAqYnAsIGludCBpbmQpCiAgICAgICAgIHsKIAlpbnQgaTsKIAlPQ1NQX1NFUlZJQ0VMT0MgKmEgPSBpbjsKZGlmZiAtLWdpdCBhL2NyeXB0by94NTA5djMvdjNfcGNpLmMgYi9jcnlwdG8veDUwOXYzL3YzX3BjaS5jCmluZGV4IDYwMTIxMWYuLmMyNTRiMmYgMTAwNjQ0Ci0tLSBhL2NyeXB0by94NTA5djMvdjNfcGNpLmMKKysrIGIvY3J5cHRvL3g1MDl2My92M19wY2kuYwpAQCAtODIsNyArODIsNyBAQAogCQl7CiAJCWlmICgqbGFuZ3VhZ2UpCiAJCQl7Ci0JCQlYNTA5VjNlcnIoWDUwOVYzX0ZfUFJPQ0VTU19QQ0lfVkFMVUUsWDUwOVYzX1JfUE9MSUNZX0xBTkdVQUdFX0FMUkVBRFRZX0RFRklORUQpOworCQkJWDUwOVYzZXJyKFg1MDlWM19GX1BST0NFU1NfUENJX1ZBTFVFLFg1MDlWM19SX1BPTElDWV9MQU5HVUFHRV9BTFJFQURZX0RFRklORUQpOwogCQkJWDUwOVYzX2NvbmZfZXJyKHZhbCk7CiAJCQlyZXR1cm4gMDsKIAkJCX0KQEAgLTk3LDcgKzk3LDcgQEAKIAkJewogCQlpZiAoKnBhdGhsZW4pCiAJCQl7Ci0JCQlYNTA5VjNlcnIoWDUwOVYzX0ZfUFJPQ0VTU19QQ0lfVkFMVUUsWDUwOVYzX1JfUE9MSUNZX1BBVEhfTEVOR1RIX0FMUkVBRFRZX0RFRklORUQpOworCQkJWDUwOVYzZXJyKFg1MDlWM19GX1BST0NFU1NfUENJX1ZBTFVFLFg1MDlWM19SX1BPTElDWV9QQVRIX0xFTkdUSF9BTFJFQURZX0RFRklORUQpOwogCQkJWDUwOVYzX2NvbmZfZXJyKHZhbCk7CiAJCQlyZXR1cm4gMDsKIAkJCX0KZGlmZiAtLWdpdCBhL2NyeXB0by94NTA5djMvdjNfcGNvbnMuYyBiL2NyeXB0by94NTA5djMvdjNfcGNvbnMuYwppbmRleCA4NmMwZmY3Li4zMGNhNjUyIDEwMDY0NAotLS0gYS9jcnlwdG8veDUwOXYzL3YzX3Bjb25zLmMKKysrIGIvY3J5cHRvL3g1MDl2My92M19wY29ucy5jCkBAIC02NCwxMCArNjQsMTIgQEAKICNpbmNsdWRlIDxvcGVuc3NsL2NvbmYuaD4KICNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgogCi1zdGF0aWMgU1RBQ0tfT0YoQ09ORl9WQUxVRSkgKmkydl9QT0xJQ1lfQ09OU1RSQUlOVFMoWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZCwKLQkJCQl2b2lkICpiY29ucywgU1RBQ0tfT0YoQ09ORl9WQUxVRSkgKmV4dGxpc3QpOwotc3RhdGljIHZvaWQgKnYyaV9QT0xJQ1lfQ09OU1RSQUlOVFMoWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZCwKLQkJCQlYNTA5VjNfQ1RYICpjdHgsIFNUQUNLX09GKENPTkZfVkFMVUUpICp2YWx1ZXMpOworc3RhdGljIFNUQUNLX09GKENPTkZfVkFMVUUpICoKK2kydl9QT0xJQ1lfQ09OU1RSQUlOVFMoY29uc3QgWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZCwgdm9pZCAqYmNvbnMsCisJCSAgICAgICBTVEFDS19PRihDT05GX1ZBTFVFKSAqZXh0bGlzdCk7CitzdGF0aWMgdm9pZCAqdjJpX1BPTElDWV9DT05TVFJBSU5UUyhjb25zdCBYNTA5VjNfRVhUX01FVEhPRCAqbWV0aG9kLAorCQkJCSAgICBYNTA5VjNfQ1RYICpjdHgsCisJCQkJICAgIFNUQUNLX09GKENPTkZfVkFMVUUpICp2YWx1ZXMpOwogCiBjb25zdCBYNTA5VjNfRVhUX01FVEhPRCB2M19wb2xpY3lfY29uc3RyYWludHMgPSB7CiBOSURfcG9saWN5X2NvbnN0cmFpbnRzLCAwLApAQCAtODgsOCArOTAsOSBAQAogSU1QTEVNRU5UX0FTTjFfQUxMT0NfRlVOQ1RJT05TKFBPTElDWV9DT05TVFJBSU5UUykKIAogCi1zdGF0aWMgU1RBQ0tfT0YoQ09ORl9WQUxVRSkgKmkydl9QT0xJQ1lfQ09OU1RSQUlOVFMoWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZCwKLQkgICAgIHZvaWQgKmEsIFNUQUNLX09GKENPTkZfVkFMVUUpICpleHRsaXN0KQorc3RhdGljIFNUQUNLX09GKENPTkZfVkFMVUUpICoKK2kydl9QT0xJQ1lfQ09OU1RSQUlOVFMoY29uc3QgWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZCwgdm9pZCAqYSwKKwkJICAgICAgIFNUQUNLX09GKENPTkZfVkFMVUUpICpleHRsaXN0KQogewogCVBPTElDWV9DT05TVFJBSU5UUyAqcGNvbnMgPSBhOwogCVg1MDlWM19hZGRfdmFsdWVfaW50KCJSZXF1aXJlIEV4cGxpY2l0IFBvbGljeSIsCkBAIC05OSw4ICsxMDIsOSBAQAogCXJldHVybiBleHRsaXN0OwogfQogCi1zdGF0aWMgdm9pZCAqdjJpX1BPTElDWV9DT05TVFJBSU5UUyhYNTA5VjNfRVhUX01FVEhPRCAqbWV0aG9kLAotCSAgICAgWDUwOVYzX0NUWCAqY3R4LCBTVEFDS19PRihDT05GX1ZBTFVFKSAqdmFsdWVzKQorc3RhdGljIHZvaWQgKnYyaV9QT0xJQ1lfQ09OU1RSQUlOVFMoY29uc3QgWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZCwKKwkJCQkgICAgWDUwOVYzX0NUWCAqY3R4LAorCQkJCSAgICBTVEFDS19PRihDT05GX1ZBTFVFKSAqdmFsdWVzKQogewogCVBPTElDWV9DT05TVFJBSU5UUyAqcGNvbnM9TlVMTDsKIAlDT05GX1ZBTFVFICp2YWw7CmRpZmYgLS1naXQgYS9jcnlwdG8veDUwOXYzL3YzX3BtYXBzLmMgYi9jcnlwdG8veDUwOXYzL3YzX3BtYXBzLmMKaW5kZXggZGEwM2JiYy4uODY1YmNkMyAxMDA2NDQKLS0tIGEvY3J5cHRvL3g1MDl2My92M19wbWFwcy5jCisrKyBiL2NyeXB0by94NTA5djMvdjNfcG1hcHMuYwpAQCAtNjMsMTAgKzYzLDExIEBACiAjaW5jbHVkZSA8b3BlbnNzbC9jb25mLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC94NTA5djMuaD4KIAotc3RhdGljIHZvaWQgKnYyaV9QT0xJQ1lfTUFQUElOR1MoWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZCwKLQkJCQlYNTA5VjNfQ1RYICpjdHgsIFNUQUNLX09GKENPTkZfVkFMVUUpICpudmFsKTsKLXN0YXRpYyBTVEFDS19PRihDT05GX1ZBTFVFKSAqaTJ2X1BPTElDWV9NQVBQSU5HUyhYNTA5VjNfRVhUX01FVEhPRCAqbWV0aG9kLAotCQkJCXZvaWQgKnBtcHMsIFNUQUNLX09GKENPTkZfVkFMVUUpICpleHRsaXN0KTsKK3N0YXRpYyB2b2lkICp2MmlfUE9MSUNZX01BUFBJTkdTKGNvbnN0IFg1MDlWM19FWFRfTUVUSE9EICptZXRob2QsCisJCQkJIFg1MDlWM19DVFggKmN0eCwgU1RBQ0tfT0YoQ09ORl9WQUxVRSkgKm52YWwpOworc3RhdGljIFNUQUNLX09GKENPTkZfVkFMVUUpICoKK2kydl9QT0xJQ1lfTUFQUElOR1MoY29uc3QgWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZCwgdm9pZCAqcG1wcywKKwkJICAgIFNUQUNLX09GKENPTkZfVkFMVUUpICpleHRsaXN0KTsKIAogY29uc3QgWDUwOVYzX0VYVF9NRVRIT0QgdjNfcG9saWN5X21hcHBpbmdzID0gewogCU5JRF9wb2xpY3lfbWFwcGluZ3MsIDAsCkBAIC05Miw4ICs5Myw5IEBACiBJTVBMRU1FTlRfQVNOMV9BTExPQ19GVU5DVElPTlMoUE9MSUNZX01BUFBJTkcpCiAKIAotc3RhdGljIFNUQUNLX09GKENPTkZfVkFMVUUpICppMnZfUE9MSUNZX01BUFBJTkdTKFg1MDlWM19FWFRfTUVUSE9EICptZXRob2QsCi0JCXZvaWQgKmEsIFNUQUNLX09GKENPTkZfVkFMVUUpICpleHRfbGlzdCkKK3N0YXRpYyBTVEFDS19PRihDT05GX1ZBTFVFKSAqCitpMnZfUE9MSUNZX01BUFBJTkdTKGNvbnN0IFg1MDlWM19FWFRfTUVUSE9EICptZXRob2QsIHZvaWQgKmEsCisJCSAgICBTVEFDS19PRihDT05GX1ZBTFVFKSAqZXh0X2xpc3QpCiB7CiAJUE9MSUNZX01BUFBJTkdTICpwbWFwcyA9IGE7CiAJUE9MSUNZX01BUFBJTkcgKnBtYXA7CkBAIC0xMDksOCArMTExLDggQEAKIAlyZXR1cm4gZXh0X2xpc3Q7CiB9CiAKLXN0YXRpYyB2b2lkICp2MmlfUE9MSUNZX01BUFBJTkdTKFg1MDlWM19FWFRfTUVUSE9EICptZXRob2QsCi0JCQkJWDUwOVYzX0NUWCAqY3R4LCBTVEFDS19PRihDT05GX1ZBTFVFKSAqbnZhbCkKK3N0YXRpYyB2b2lkICp2MmlfUE9MSUNZX01BUFBJTkdTKGNvbnN0IFg1MDlWM19FWFRfTUVUSE9EICptZXRob2QsCisJCQkJIFg1MDlWM19DVFggKmN0eCwgU1RBQ0tfT0YoQ09ORl9WQUxVRSkgKm52YWwpCiB7CiAJUE9MSUNZX01BUFBJTkdTICpwbWFwczsKIAlQT0xJQ1lfTUFQUElORyAqcG1hcDsKZGlmZiAtLWdpdCBhL2NyeXB0by94NTA5djMvdjNfcHJuLmMgYi9jcnlwdG8veDUwOXYzL3YzX3Bybi5jCmluZGV4IGMxYmIxN2YuLjMxNDYyMTggMTAwNjQ0Ci0tLSBhL2NyeXB0by94NTA5djMvdjNfcHJuLmMKKysrIGIvY3J5cHRvL3g1MDl2My92M19wcm4uYwpAQCAtMTEwLDcgKzExMCw3IEBACiAJdm9pZCAqZXh0X3N0ciA9IE5VTEw7CiAJY2hhciAqdmFsdWUgPSBOVUxMOwogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnA7Ci0JWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZDsJCisJY29uc3QgWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZDsJCiAJU1RBQ0tfT0YoQ09ORl9WQUxVRSkgKm52YWwgPSBOVUxMOwogCWludCBvayA9IDE7CiAKZGlmZiAtLWdpdCBhL2NyeXB0by94NTA5djMvdjNfcHVycC5jIGIvY3J5cHRvL3g1MDl2My92M19wdXJwLmMKaW5kZXggZTE4NzUxZS4uMTgxYmQzNCAxMDA2NDQKLS0tIGEvY3J5cHRvL3g1MDl2My92M19wdXJwLmMKKysrIGIvY3J5cHRvL3g1MDl2My92M19wdXJwLmMKQEAgLTcxLDYgKzcxLDcgQEAKIHN0YXRpYyBpbnQgY2hlY2tfcHVycG9zZV9zbWltZV9zaWduKGNvbnN0IFg1MDlfUFVSUE9TRSAqeHAsIGNvbnN0IFg1MDkgKngsIGludCBjYSk7CiBzdGF0aWMgaW50IGNoZWNrX3B1cnBvc2Vfc21pbWVfZW5jcnlwdChjb25zdCBYNTA5X1BVUlBPU0UgKnhwLCBjb25zdCBYNTA5ICp4LCBpbnQgY2EpOwogc3RhdGljIGludCBjaGVja19wdXJwb3NlX2NybF9zaWduKGNvbnN0IFg1MDlfUFVSUE9TRSAqeHAsIGNvbnN0IFg1MDkgKngsIGludCBjYSk7CitzdGF0aWMgaW50IGNoZWNrX3B1cnBvc2VfdGltZXN0YW1wX3NpZ24oY29uc3QgWDUwOV9QVVJQT1NFICp4cCwgY29uc3QgWDUwOSAqeCwgaW50IGNhKTsKIHN0YXRpYyBpbnQgbm9fY2hlY2soY29uc3QgWDUwOV9QVVJQT1NFICp4cCwgY29uc3QgWDUwOSAqeCwgaW50IGNhKTsKIHN0YXRpYyBpbnQgb2NzcF9oZWxwZXIoY29uc3QgWDUwOV9QVVJQT1NFICp4cCwgY29uc3QgWDUwOSAqeCwgaW50IGNhKTsKIApAQCAtODcsNiArODgsNyBAQAogCXtYNTA5X1BVUlBPU0VfQ1JMX1NJR04sIFg1MDlfVFJVU1RfQ09NUEFULCAwLCBjaGVja19wdXJwb3NlX2NybF9zaWduLCAiQ1JMIHNpZ25pbmciLCAiY3Jsc2lnbiIsIE5VTEx9LAogCXtYNTA5X1BVUlBPU0VfQU5ZLCBYNTA5X1RSVVNUX0RFRkFVTFQsIDAsIG5vX2NoZWNrLCAiQW55IFB1cnBvc2UiLCAiYW55IiwgTlVMTH0sCiAJe1g1MDlfUFVSUE9TRV9PQ1NQX0hFTFBFUiwgWDUwOV9UUlVTVF9DT01QQVQsIDAsIG9jc3BfaGVscGVyLCAiT0NTUCBoZWxwZXIiLCAib2NzcGhlbHBlciIsIE5VTEx9LAorCXtYNTA5X1BVUlBPU0VfVElNRVNUQU1QX1NJR04sIFg1MDlfVFJVU1RfVFNBLCAwLCBjaGVja19wdXJwb3NlX3RpbWVzdGFtcF9zaWduLCAiVGltZSBTdGFtcCBzaWduaW5nIiwgInRpbWVzdGFtcHNpZ24iLCBOVUxMfSwKIH07CiAKICNkZWZpbmUgWDUwOV9QVVJQT1NFX0NPVU5UIChzaXplb2YoeHN0YW5kYXJkKS9zaXplb2YoWDUwOV9QVVJQT1NFKSkKQEAgLTI2NSwxMSArMjY3LDE0IEBACiAJcmV0dXJuIHhwLT50cnVzdDsKIH0KIAotc3RhdGljIGludCBuaWRfY21wKGludCAqYSwgaW50ICpiKQorc3RhdGljIGludCBuaWRfY21wKGNvbnN0IGludCAqYSwgY29uc3QgaW50ICpiKQogCXsKIAlyZXR1cm4gKmEgLSAqYjsKIAl9CiAKK0RFQ0xBUkVfT0JKX0JTRUFSQ0hfQ01QX0ZOKGludCwgaW50LCBuaWQpOworSU1QTEVNRU5UX09CSl9CU0VBUkNIX0NNUF9GTihpbnQsIGludCwgbmlkKTsKKwogaW50IFg1MDlfc3VwcG9ydGVkX2V4dGVuc2lvbihYNTA5X0VYVEVOU0lPTiAqZXgpCiAJewogCS8qIFRoaXMgdGFibGUgaXMgYSBsaXN0IG9mIHRoZSBOSURzIG9mIHN1cHBvcnRlZCBleHRlbnNpb25zOgpAQCAtMjgwLDcgKzI4NSw3IEBACiAJICogc2VhcmNoZWQgdXNpbmcgYnNlYXJjaC4KIAkgKi8KIAotCXN0YXRpYyBpbnQgc3VwcG9ydGVkX25pZHNbXSA9IHsKKwlzdGF0aWMgY29uc3QgaW50IHN1cHBvcnRlZF9uaWRzW10gPSB7CiAJCU5JRF9uZXRzY2FwZV9jZXJ0X3R5cGUsIC8qIDcxICovCiAgICAgICAgIAlOSURfa2V5X3VzYWdlLAkJLyogODMgKi8KIAkJTklEX3N1YmplY3RfYWx0X25hbWUsCS8qIDg1ICovCkBAIC0yOTIsMjQgKzI5Nyw2MiBAQAogCQlOSURfc2JncF9hdXRvbm9tb3VzU3lzTnVtLCAvKiAyOTEgKi8KICNlbmRpZgogCQlOSURfcG9saWN5X2NvbnN0cmFpbnRzLAkvKiA0MDEgKi8KLQkJTklEX3Byb3h5Q2VydEluZm8sCS8qIDY2MSAqLworCQlOSURfcHJveHlDZXJ0SW5mbywJLyogNjYzICovCisJCU5JRF9uYW1lX2NvbnN0cmFpbnRzLAkvKiA2NjYgKi8KKwkJTklEX3BvbGljeV9tYXBwaW5ncywJLyogNzQ3ICovCiAJCU5JRF9pbmhpYml0X2FueV9wb2xpY3kJLyogNzQ4ICovCiAJfTsKIAotCWludCBleF9uaWQ7Ci0KLQlleF9uaWQgPSBPQkpfb2JqMm5pZChYNTA5X0VYVEVOU0lPTl9nZXRfb2JqZWN0KGV4KSk7CisJaW50IGV4X25pZCA9IE9CSl9vYmoybmlkKFg1MDlfRVhURU5TSU9OX2dldF9vYmplY3QoZXgpKTsKIAogCWlmIChleF9uaWQgPT0gTklEX3VuZGVmKSAKIAkJcmV0dXJuIDA7CiAKLQlpZiAoT0JKX2JzZWFyY2goKGNoYXIgKikmZXhfbmlkLCAoY2hhciAqKXN1cHBvcnRlZF9uaWRzLAotCQlzaXplb2Yoc3VwcG9ydGVkX25pZHMpL3NpemVvZihpbnQpLCBzaXplb2YoaW50KSwKLQkJKGludCAoKikoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKW5pZF9jbXApKQorCWlmIChPQkpfYnNlYXJjaF9uaWQoJmV4X25pZCwgc3VwcG9ydGVkX25pZHMsCisJCQlzaXplb2Yoc3VwcG9ydGVkX25pZHMpL3NpemVvZihpbnQpKSkKIAkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CiAJfQotIAorCitzdGF0aWMgdm9pZCBzZXR1cF9kcChYNTA5ICp4LCBESVNUX1BPSU5UICpkcCkKKwl7CisJWDUwOV9OQU1FICppbmFtZSA9IE5VTEw7CisJaW50IGk7CisJaWYgKGRwLT5yZWFzb25zKQorCQl7CisJCWlmIChkcC0+cmVhc29ucy0+bGVuZ3RoID4gMCkKKwkJCWRwLT5kcF9yZWFzb25zID0gZHAtPnJlYXNvbnMtPmRhdGFbMF07CisJCWlmIChkcC0+cmVhc29ucy0+bGVuZ3RoID4gMSkKKwkJCWRwLT5kcF9yZWFzb25zIHw9IChkcC0+cmVhc29ucy0+ZGF0YVsxXSA8PCA4KTsKKwkJZHAtPmRwX3JlYXNvbnMgJj0gQ1JMRFBfQUxMX1JFQVNPTlM7CisJCX0KKwllbHNlCisJCWRwLT5kcF9yZWFzb25zID0gQ1JMRFBfQUxMX1JFQVNPTlM7CisJaWYgKCFkcC0+ZGlzdHBvaW50IHx8IChkcC0+ZGlzdHBvaW50LT50eXBlICE9IDEpKQorCQlyZXR1cm47CisJZm9yIChpID0gMDsgaSA8IHNrX0dFTkVSQUxfTkFNRV9udW0oZHAtPkNSTGlzc3Vlcik7IGkrKykKKwkJeworCQlHRU5FUkFMX05BTUUgKmdlbiA9IHNrX0dFTkVSQUxfTkFNRV92YWx1ZShkcC0+Q1JMaXNzdWVyLCBpKTsKKwkJaWYgKGdlbi0+dHlwZSA9PSBHRU5fRElSTkFNRSkKKwkJCXsKKwkJCWluYW1lID0gZ2VuLT5kLmRpcmVjdG9yeU5hbWU7CisJCQlicmVhazsKKwkJCX0KKwkJfQorCWlmICghaW5hbWUpCisJCWluYW1lID0gWDUwOV9nZXRfaXNzdWVyX25hbWUoeCk7CisKKwlESVNUX1BPSU5UX3NldF9kcG5hbWUoZHAtPmRpc3Rwb2ludCwgaW5hbWUpOworCisJfQorCitzdGF0aWMgdm9pZCBzZXR1cF9jcmxkcChYNTA5ICp4KQorCXsKKwlpbnQgaTsKKwl4LT5jcmxkcCA9IFg1MDlfZ2V0X2V4dF9kMmkoeCwgTklEX2NybF9kaXN0cmlidXRpb25fcG9pbnRzLCBOVUxMLCBOVUxMKTsKKwlmb3IgKGkgPSAwOyBpIDwgc2tfRElTVF9QT0lOVF9udW0oeC0+Y3JsZHApOyBpKyspCisJCXNldHVwX2RwKHgsIHNrX0RJU1RfUE9JTlRfdmFsdWUoeC0+Y3JsZHAsIGkpKTsKKwl9CiAKIHN0YXRpYyB2b2lkIHg1MDl2M19jYWNoZV9leHRlbnNpb25zKFg1MDkgKngpCiB7CkBAIC00MTcsMTYgKzQ2MCwyNSBAQAogCX0KIAl4LT5za2lkID1YNTA5X2dldF9leHRfZDJpKHgsIE5JRF9zdWJqZWN0X2tleV9pZGVudGlmaWVyLCBOVUxMLCBOVUxMKTsKIAl4LT5ha2lkID1YNTA5X2dldF9leHRfZDJpKHgsIE5JRF9hdXRob3JpdHlfa2V5X2lkZW50aWZpZXIsIE5VTEwsIE5VTEwpOworCXgtPmFsdG5hbWUgPSBYNTA5X2dldF9leHRfZDJpKHgsIE5JRF9zdWJqZWN0X2FsdF9uYW1lLCBOVUxMLCBOVUxMKTsKKwl4LT5uYyA9IFg1MDlfZ2V0X2V4dF9kMmkoeCwgTklEX25hbWVfY29uc3RyYWludHMsICZpLCBOVUxMKTsKKwlpZiAoIXgtPm5jICYmIChpICE9IC0xKSkKKwkJeC0+ZXhfZmxhZ3MgfD0gRVhGTEFHX0lOVkFMSUQ7CisJc2V0dXBfY3JsZHAoeCk7CisKICNpZm5kZWYgT1BFTlNTTF9OT19SRkMzNzc5Ci0JeC0+cmZjMzc3OV9hZGRyID1YNTA5X2dldF9leHRfZDJpKHgsIE5JRF9zYmdwX2lwQWRkckJsb2NrLCBOVUxMLCBOVUxMKTsKLQl4LT5yZmMzNzc5X2FzaWQgPVg1MDlfZ2V0X2V4dF9kMmkoeCwgTklEX3NiZ3BfYXV0b25vbW91c1N5c051bSwKLQkJCQkJICBOVUxMLCBOVUxMKTsKKyAJeC0+cmZjMzc3OV9hZGRyID1YNTA5X2dldF9leHRfZDJpKHgsIE5JRF9zYmdwX2lwQWRkckJsb2NrLCBOVUxMLCBOVUxMKTsKKyAJeC0+cmZjMzc3OV9hc2lkID1YNTA5X2dldF9leHRfZDJpKHgsIE5JRF9zYmdwX2F1dG9ub21vdXNTeXNOdW0sCisgCQkJCQkgIE5VTEwsIE5VTEwpOwogI2VuZGlmCiAJZm9yIChpID0gMDsgaSA8IFg1MDlfZ2V0X2V4dF9jb3VudCh4KTsgaSsrKQogCQl7CiAJCWV4ID0gWDUwOV9nZXRfZXh0KHgsIGkpOwogCQlpZiAoIVg1MDlfRVhURU5TSU9OX2dldF9jcml0aWNhbChleCkpCiAJCQljb250aW51ZTsKKwkJaWYgKE9CSl9vYmoybmlkKFg1MDlfRVhURU5TSU9OX2dldF9vYmplY3QoZXgpKQorCQkJCQk9PSBOSURfZnJlc2hlc3RfY3JsKQorCQkJeC0+ZXhfZmxhZ3MgfD0gRVhGTEFHX0ZSRVNIRVNUOwogCQlpZiAoIVg1MDlfc3VwcG9ydGVkX2V4dGVuc2lvbihleCkpCiAJCQl7CiAJCQl4LT5leF9mbGFncyB8PSBFWEZMQUdfQ1JJVElDQUw7CkBAIC01OTQsNiArNjQ2LDQxIEBACiAJcmV0dXJuIDE7CiB9CiAKK3N0YXRpYyBpbnQgY2hlY2tfcHVycG9zZV90aW1lc3RhbXBfc2lnbihjb25zdCBYNTA5X1BVUlBPU0UgKnhwLCBjb25zdCBYNTA5ICp4LAorCQkJCQlpbnQgY2EpCit7CisJaW50IGlfZXh0OworCisJLyogSWYgY2EgaXMgdHJ1ZSB3ZSBtdXN0IHJldHVybiBpZiB0aGlzIGlzIGEgdmFsaWQgQ0EgY2VydGlmaWNhdGUuICovCisJaWYgKGNhKSByZXR1cm4gY2hlY2tfY2EoeCk7CisKKwkvKiAKKwkgKiBDaGVjayB0aGUgb3B0aW9uYWwga2V5IHVzYWdlIGZpZWxkOgorCSAqIGlmIEtleSBVc2FnZSBpcyBwcmVzZW50LCBpdCBtdXN0IGJlIG9uZSBvZiBkaWdpdGFsU2lnbmF0dXJlIAorCSAqIGFuZC9vciBub25SZXB1ZGlhdGlvbiAob3RoZXIgdmFsdWVzIGFyZSBub3QgY29uc2lzdGVudCBhbmQgc2hhbGwKKwkgKiBiZSByZWplY3RlZCkuCisJICovCisJaWYgKCh4LT5leF9mbGFncyAmIEVYRkxBR19LVVNBR0UpCisJICAgICYmICgoeC0+ZXhfa3VzYWdlICYgfihLVV9OT05fUkVQVURJQVRJT04gfCBLVV9ESUdJVEFMX1NJR05BVFVSRSkpIHx8CisJCSEoeC0+ZXhfa3VzYWdlICYgKEtVX05PTl9SRVBVRElBVElPTiB8IEtVX0RJR0lUQUxfU0lHTkFUVVJFKSkpKQorCQlyZXR1cm4gMDsKKworCS8qIE9ubHkgdGltZSBzdGFtcCBrZXkgdXNhZ2UgaXMgcGVybWl0dGVkIGFuZCBpdCdzIHJlcXVpcmVkLiAqLworCWlmICghKHgtPmV4X2ZsYWdzICYgRVhGTEFHX1hLVVNBR0UpIHx8IHgtPmV4X3hrdXNhZ2UgIT0gWEtVX1RJTUVTVEFNUCkKKwkJcmV0dXJuIDA7CisKKwkvKiBFeHRlbmRlZCBLZXkgVXNhZ2UgTVVTVCBiZSBjcml0aWNhbCAqLworCWlfZXh0ID0gWDUwOV9nZXRfZXh0X2J5X05JRCgoWDUwOSAqKSB4LCBOSURfZXh0X2tleV91c2FnZSwgMCk7CisJaWYgKGlfZXh0ID49IDApCisJCXsKKwkJWDUwOV9FWFRFTlNJT04gKmV4dCA9IFg1MDlfZ2V0X2V4dCgoWDUwOSAqKSB4LCBpX2V4dCk7CisJCWlmICghWDUwOV9FWFRFTlNJT05fZ2V0X2NyaXRpY2FsKGV4dCkpCisJCQlyZXR1cm4gMDsKKwkJfQorCisJcmV0dXJuIDE7Cit9CisKIHN0YXRpYyBpbnQgbm9fY2hlY2soY29uc3QgWDUwOV9QVVJQT1NFICp4cCwgY29uc3QgWDUwOSAqeCwgaW50IGNhKQogewogCXJldHVybiAxOwpAQCAtNjE4LDM5ICs3MDUsMTQgQEAKIAkJCQlyZXR1cm4gWDUwOV9WX0VSUl9TVUJKRUNUX0lTU1VFUl9NSVNNQVRDSDsKIAl4NTA5djNfY2FjaGVfZXh0ZW5zaW9ucyhpc3N1ZXIpOwogCXg1MDl2M19jYWNoZV9leHRlbnNpb25zKHN1YmplY3QpOwotCWlmKHN1YmplY3QtPmFraWQpIHsKLQkJLyogQ2hlY2sga2V5IGlkcyAoaWYgcHJlc2VudCkgKi8KLQkJaWYoc3ViamVjdC0+YWtpZC0+a2V5aWQgJiYgaXNzdWVyLT5za2lkICYmCi0JCSBBU04xX09DVEVUX1NUUklOR19jbXAoc3ViamVjdC0+YWtpZC0+a2V5aWQsIGlzc3Vlci0+c2tpZCkgKQotCQkJCXJldHVybiBYNTA5X1ZfRVJSX0FLSURfU0tJRF9NSVNNQVRDSDsKLQkJLyogQ2hlY2sgc2VyaWFsIG51bWJlciAqLwotCQlpZihzdWJqZWN0LT5ha2lkLT5zZXJpYWwgJiYKLQkJCUFTTjFfSU5URUdFUl9jbXAoWDUwOV9nZXRfc2VyaWFsTnVtYmVyKGlzc3VlciksCi0JCQkJCQlzdWJqZWN0LT5ha2lkLT5zZXJpYWwpKQotCQkJCXJldHVybiBYNTA5X1ZfRVJSX0FLSURfSVNTVUVSX1NFUklBTF9NSVNNQVRDSDsKLQkJLyogQ2hlY2sgaXNzdWVyIG5hbWUgKi8KLQkJaWYoc3ViamVjdC0+YWtpZC0+aXNzdWVyKSB7Ci0JCQkvKiBVZ2gsIGZvciBzb21lIHBlY3VsaWFyIHJlYXNvbiBBS0lEIGluY2x1ZGVzCi0JCQkgKiBTRVFVRU5DRSBPRiBHZW5lcmFsTmFtZS4gU28gbG9vayBmb3IgYSBEaXJOYW1lLgotCQkJICogVGhlcmUgbWF5IGJlIG1vcmUgdGhhbiBvbmUgYnV0IHdlIG9ubHkgdGFrZSBhbnkKLQkJCSAqIG5vdGljZSBvZiB0aGUgZmlyc3QuCi0JCQkgKi8KLQkJCUdFTkVSQUxfTkFNRVMgKmdlbnM7Ci0JCQlHRU5FUkFMX05BTUUgKmdlbjsKLQkJCVg1MDlfTkFNRSAqbm0gPSBOVUxMOwotCQkJaW50IGk7Ci0JCQlnZW5zID0gc3ViamVjdC0+YWtpZC0+aXNzdWVyOwotCQkJZm9yKGkgPSAwOyBpIDwgc2tfR0VORVJBTF9OQU1FX251bShnZW5zKTsgaSsrKSB7Ci0JCQkJZ2VuID0gc2tfR0VORVJBTF9OQU1FX3ZhbHVlKGdlbnMsIGkpOwotCQkJCWlmKGdlbi0+dHlwZSA9PSBHRU5fRElSTkFNRSkgewotCQkJCQlubSA9IGdlbi0+ZC5kaXJuOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCQlpZihubSAmJiBYNTA5X05BTUVfY21wKG5tLCBYNTA5X2dldF9pc3N1ZXJfbmFtZShpc3N1ZXIpKSkKLQkJCQlyZXR1cm4gWDUwOV9WX0VSUl9BS0lEX0lTU1VFUl9TRVJJQUxfTUlTTUFUQ0g7CisKKwlpZihzdWJqZWN0LT5ha2lkKQorCQl7CisJCWludCByZXQgPSBYNTA5X2NoZWNrX2FraWQoaXNzdWVyLCBzdWJqZWN0LT5ha2lkKTsKKwkJaWYgKHJldCAhPSBYNTA5X1ZfT0spCisJCQlyZXR1cm4gcmV0OwogCQl9Ci0JfQorCiAJaWYoc3ViamVjdC0+ZXhfZmxhZ3MgJiBFWEZMQUdfUFJPWFkpCiAJCXsKIAkJaWYoa3VfcmVqZWN0KGlzc3VlciwgS1VfRElHSVRBTF9TSUdOQVRVUkUpKQpAQCAtNjYxLDMgKzcyMyw0NSBAQAogCXJldHVybiBYNTA5X1ZfT0s7CiB9CiAKK2ludCBYNTA5X2NoZWNrX2FraWQoWDUwOSAqaXNzdWVyLCBBVVRIT1JJVFlfS0VZSUQgKmFraWQpCisJeworCisJaWYoIWFraWQpCisJCXJldHVybiBYNTA5X1ZfT0s7CisKKwkvKiBDaGVjayBrZXkgaWRzIChpZiBwcmVzZW50KSAqLworCWlmKGFraWQtPmtleWlkICYmIGlzc3Vlci0+c2tpZCAmJgorCQkgQVNOMV9PQ1RFVF9TVFJJTkdfY21wKGFraWQtPmtleWlkLCBpc3N1ZXItPnNraWQpICkKKwkJCQlyZXR1cm4gWDUwOV9WX0VSUl9BS0lEX1NLSURfTUlTTUFUQ0g7CisJLyogQ2hlY2sgc2VyaWFsIG51bWJlciAqLworCWlmKGFraWQtPnNlcmlhbCAmJgorCQlBU04xX0lOVEVHRVJfY21wKFg1MDlfZ2V0X3NlcmlhbE51bWJlcihpc3N1ZXIpLCBha2lkLT5zZXJpYWwpKQorCQkJCXJldHVybiBYNTA5X1ZfRVJSX0FLSURfSVNTVUVSX1NFUklBTF9NSVNNQVRDSDsKKwkvKiBDaGVjayBpc3N1ZXIgbmFtZSAqLworCWlmKGFraWQtPmlzc3VlcikKKwkJeworCQkvKiBVZ2gsIGZvciBzb21lIHBlY3VsaWFyIHJlYXNvbiBBS0lEIGluY2x1ZGVzCisJCSAqIFNFUVVFTkNFIE9GIEdlbmVyYWxOYW1lLiBTbyBsb29rIGZvciBhIERpck5hbWUuCisJCSAqIFRoZXJlIG1heSBiZSBtb3JlIHRoYW4gb25lIGJ1dCB3ZSBvbmx5IHRha2UgYW55CisJCSAqIG5vdGljZSBvZiB0aGUgZmlyc3QuCisJCSAqLworCQlHRU5FUkFMX05BTUVTICpnZW5zOworCQlHRU5FUkFMX05BTUUgKmdlbjsKKwkJWDUwOV9OQU1FICpubSA9IE5VTEw7CisJCWludCBpOworCQlnZW5zID0gYWtpZC0+aXNzdWVyOworCQlmb3IoaSA9IDA7IGkgPCBza19HRU5FUkFMX05BTUVfbnVtKGdlbnMpOyBpKyspCisJCQl7CisJCQlnZW4gPSBza19HRU5FUkFMX05BTUVfdmFsdWUoZ2VucywgaSk7CisJCQlpZihnZW4tPnR5cGUgPT0gR0VOX0RJUk5BTUUpCisJCQkJeworCQkJCW5tID0gZ2VuLT5kLmRpcm47CisJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQlpZihubSAmJiBYNTA5X05BTUVfY21wKG5tLCBYNTA5X2dldF9pc3N1ZXJfbmFtZShpc3N1ZXIpKSkKKwkJCXJldHVybiBYNTA5X1ZfRVJSX0FLSURfSVNTVUVSX1NFUklBTF9NSVNNQVRDSDsKKwkJfQorCXJldHVybiBYNTA5X1ZfT0s7CisJfQorCmRpZmYgLS1naXQgYS9jcnlwdG8veDUwOXYzL3YzX3V0bC5jIGIvY3J5cHRvL3g1MDl2My92M191dGwuYwppbmRleCA3YTQ1MjE2Li5lMDMwMjM0IDEwMDY0NAotLS0gYS9jcnlwdG8veDUwOXYzL3YzX3V0bC5jCisrKyBiL2NyeXB0by94NTA5djMvdjNfdXRsLmMKQEAgLTY3LDkgKzY3LDkgQEAKIAogc3RhdGljIGNoYXIgKnN0cmlwX3NwYWNlcyhjaGFyICpuYW1lKTsKIHN0YXRpYyBpbnQgc2tfc3RyY21wKGNvbnN0IGNoYXIgKiBjb25zdCAqYSwgY29uc3QgY2hhciAqIGNvbnN0ICpiKTsKLXN0YXRpYyBTVEFDSyAqZ2V0X2VtYWlsKFg1MDlfTkFNRSAqbmFtZSwgR0VORVJBTF9OQU1FUyAqZ2Vucyk7Ci1zdGF0aWMgdm9pZCBzdHJfZnJlZSh2b2lkICpzdHIpOwotc3RhdGljIGludCBhcHBlbmRfaWE1KFNUQUNLICoqc2ssIEFTTjFfSUE1U1RSSU5HICplbWFpbCk7CitzdGF0aWMgU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpICpnZXRfZW1haWwoWDUwOV9OQU1FICpuYW1lLCBHRU5FUkFMX05BTUVTICpnZW5zKTsKK3N0YXRpYyB2b2lkIHN0cl9mcmVlKE9QRU5TU0xfU1RSSU5HIHN0cik7CitzdGF0aWMgaW50IGFwcGVuZF9pYTUoU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpICoqc2ssIEFTTjFfSUE1U1RSSU5HICplbWFpbCk7CiAKIHN0YXRpYyBpbnQgaXB2NF9mcm9tX2FzYyh1bnNpZ25lZCBjaGFyICp2NCwgY29uc3QgY2hhciAqaW4pOwogc3RhdGljIGludCBpcHY2X2Zyb21fYXNjKHVuc2lnbmVkIGNoYXIgKnY2LCBjb25zdCBjaGFyICppbik7CkBAIC0zNjAsMTAgKzM2MCwxMCBAQAogICogQEBAIChDb250ZW50cyBvZiBidWZmZXIgYXJlIGFsd2F5cyBrZXB0IGluIEFTQ0lJLCBhbHNvIG9uIEVCQ0RJQyBtYWNoaW5lcykKICAqLwogCi1jaGFyICpoZXhfdG9fc3RyaW5nKHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgbG9uZyBsZW4pCitjaGFyICpoZXhfdG9fc3RyaW5nKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgbG9uZyBsZW4pCiB7CiAJY2hhciAqdG1wLCAqcTsKLQl1bnNpZ25lZCBjaGFyICpwOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnA7CiAJaW50IGk7CiAJY29uc3Qgc3RhdGljIGNoYXIgaGV4ZGlnW10gPSAiMDEyMzQ1Njc4OUFCQ0RFRiI7CiAJaWYoIWJ1ZmZlciB8fCAhbGVuKSByZXR1cm4gTlVMTDsKQEAgLTM4OSw3ICszODksNyBAQAogICogYSBidWZmZXIKICAqLwogCi11bnNpZ25lZCBjaGFyICpzdHJpbmdfdG9faGV4KGNoYXIgKnN0ciwgbG9uZyAqbGVuKQordW5zaWduZWQgY2hhciAqc3RyaW5nX3RvX2hleChjb25zdCBjaGFyICpzdHIsIGxvbmcgKmxlbikKIHsKIAl1bnNpZ25lZCBjaGFyICpoZXhidWYsICpxOwogCXVuc2lnbmVkIGNoYXIgY2gsIGNsLCAqcDsKQEAgLTQ2MywyMSArNDYzLDIzIEBACiAJcmV0dXJuIHN0cmNtcCgqYSwgKmIpOwogfQogCi1TVEFDSyAqWDUwOV9nZXQxX2VtYWlsKFg1MDkgKngpCitTVEFDS19PRihPUEVOU1NMX1NUUklORykgKlg1MDlfZ2V0MV9lbWFpbChYNTA5ICp4KQogewogCUdFTkVSQUxfTkFNRVMgKmdlbnM7Ci0JU1RBQ0sgKnJldDsKKwlTVEFDS19PRihPUEVOU1NMX1NUUklORykgKnJldDsKKwogCWdlbnMgPSBYNTA5X2dldF9leHRfZDJpKHgsIE5JRF9zdWJqZWN0X2FsdF9uYW1lLCBOVUxMLCBOVUxMKTsKIAlyZXQgPSBnZXRfZW1haWwoWDUwOV9nZXRfc3ViamVjdF9uYW1lKHgpLCBnZW5zKTsKIAlza19HRU5FUkFMX05BTUVfcG9wX2ZyZWUoZ2VucywgR0VORVJBTF9OQU1FX2ZyZWUpOwogCXJldHVybiByZXQ7CiB9CiAKLVNUQUNLICpYNTA5X2dldDFfb2NzcChYNTA5ICp4KQorU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpICpYNTA5X2dldDFfb2NzcChYNTA5ICp4KQogewogCUFVVEhPUklUWV9JTkZPX0FDQ0VTUyAqaW5mbzsKLQlTVEFDSyAqcmV0ID0gTlVMTDsKKwlTVEFDS19PRihPUEVOU1NMX1NUUklORykgKnJldCA9IE5VTEw7CiAJaW50IGk7CisKIAlpbmZvID0gWDUwOV9nZXRfZXh0X2QyaSh4LCBOSURfaW5mb19hY2Nlc3MsIE5VTEwsIE5VTEwpOwogCWlmICghaW5mbykKIAkJcmV0dXJuIE5VTEw7CkBAIC00OTcsMTEgKzQ5OSwxMiBAQAogCXJldHVybiByZXQ7CiB9CiAKLVNUQUNLICpYNTA5X1JFUV9nZXQxX2VtYWlsKFg1MDlfUkVRICp4KQorU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpICpYNTA5X1JFUV9nZXQxX2VtYWlsKFg1MDlfUkVRICp4KQogewogCUdFTkVSQUxfTkFNRVMgKmdlbnM7CiAJU1RBQ0tfT0YoWDUwOV9FWFRFTlNJT04pICpleHRzOwotCVNUQUNLICpyZXQ7CisJU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpICpyZXQ7CisKIAlleHRzID0gWDUwOV9SRVFfZ2V0X2V4dGVuc2lvbnMoeCk7CiAJZ2VucyA9IFg1MDlWM19nZXRfZDJpKGV4dHMsIE5JRF9zdWJqZWN0X2FsdF9uYW1lLCBOVUxMLCBOVUxMKTsKIAlyZXQgPSBnZXRfZW1haWwoWDUwOV9SRVFfZ2V0X3N1YmplY3RfbmFtZSh4KSwgZ2Vucyk7CkBAIC01MTEsOSArNTE0LDkgQEAKIH0KIAogCi1zdGF0aWMgU1RBQ0sgKmdldF9lbWFpbChYNTA5X05BTUUgKm5hbWUsIEdFTkVSQUxfTkFNRVMgKmdlbnMpCitzdGF0aWMgU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpICpnZXRfZW1haWwoWDUwOV9OQU1FICpuYW1lLCBHRU5FUkFMX05BTUVTICpnZW5zKQogewotCVNUQUNLICpyZXQgPSBOVUxMOworCVNUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSAqcmV0ID0gTlVMTDsKIAlYNTA5X05BTUVfRU5UUlkgKm5lOwogCUFTTjFfSUE1U1RSSU5HICplbWFpbDsKIAlHRU5FUkFMX05BTUUgKmdlbjsKQEAgLTUzNiwyMyArNTM5LDIzIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgc3RyX2ZyZWUodm9pZCAqc3RyKQorc3RhdGljIHZvaWQgc3RyX2ZyZWUoT1BFTlNTTF9TVFJJTkcgc3RyKQogewogCU9QRU5TU0xfZnJlZShzdHIpOwogfQogCi1zdGF0aWMgaW50IGFwcGVuZF9pYTUoU1RBQ0sgKipzaywgQVNOMV9JQTVTVFJJTkcgKmVtYWlsKQorc3RhdGljIGludCBhcHBlbmRfaWE1KFNUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSAqKnNrLCBBU04xX0lBNVNUUklORyAqZW1haWwpCiB7CiAJY2hhciAqZW10bXA7CiAJLyogRmlyc3Qgc29tZSBzYW5pdHkgY2hlY2tzICovCiAJaWYoZW1haWwtPnR5cGUgIT0gVl9BU04xX0lBNVNUUklORykgcmV0dXJuIDE7CiAJaWYoIWVtYWlsLT5kYXRhIHx8ICFlbWFpbC0+bGVuZ3RoKSByZXR1cm4gMTsKLQlpZighKnNrKSAqc2sgPSBza19uZXcoc2tfc3RyY21wKTsKKwlpZighKnNrKSAqc2sgPSBza19PUEVOU1NMX1NUUklOR19uZXcoc2tfc3RyY21wKTsKIAlpZighKnNrKSByZXR1cm4gMDsKIAkvKiBEb24ndCBhZGQgZHVwbGljYXRlcyAqLwotCWlmKHNrX2ZpbmQoKnNrLCAoY2hhciAqKWVtYWlsLT5kYXRhKSAhPSAtMSkgcmV0dXJuIDE7CisJaWYoc2tfT1BFTlNTTF9TVFJJTkdfZmluZCgqc2ssIChjaGFyICopZW1haWwtPmRhdGEpICE9IC0xKSByZXR1cm4gMTsKIAllbXRtcCA9IEJVRl9zdHJkdXAoKGNoYXIgKillbWFpbC0+ZGF0YSk7Ci0JaWYoIWVtdG1wIHx8ICFza19wdXNoKCpzaywgZW10bXApKSB7CisJaWYoIWVtdG1wIHx8ICFza19PUEVOU1NMX1NUUklOR19wdXNoKCpzaywgZW10bXApKSB7CiAJCVg1MDlfZW1haWxfZnJlZSgqc2spOwogCQkqc2sgPSBOVUxMOwogCQlyZXR1cm4gMDsKQEAgLTU2MCw5ICs1NjMsOSBAQAogCXJldHVybiAxOwogfQogCi12b2lkIFg1MDlfZW1haWxfZnJlZShTVEFDSyAqc2spCit2b2lkIFg1MDlfZW1haWxfZnJlZShTVEFDS19PRihPUEVOU1NMX1NUUklORykgKnNrKQogewotCXNrX3BvcF9mcmVlKHNrLCBzdHJfZnJlZSk7CisJc2tfT1BFTlNTTF9TVFJJTkdfcG9wX2ZyZWUoc2ssIHN0cl9mcmVlKTsKIH0KIAogLyogQ29udmVydCBJUCBhZGRyZXNzZXMgYm90aCBJUHY0IGFuZCBJUHY2IGludG8gYW4gCmRpZmYgLS1naXQgYS9jcnlwdG8veDUwOXYzL3YzZXJyLmMgYi9jcnlwdG8veDUwOXYzL3YzZXJyLmMKaW5kZXggZDUzOGFkOC4uZjlmNmYxZiAxMDA2NDQKLS0tIGEvY3J5cHRvL3g1MDl2My92M2Vyci5jCisrKyBiL2NyeXB0by94NTA5djMvdjNlcnIuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIGNyeXB0by94NTA5djMvdjNlcnIuYyAqLwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA1IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDcgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcwLDYgKzcwLDcgQEAKIAogc3RhdGljIEVSUl9TVFJJTkdfREFUQSBYNTA5VjNfc3RyX2Z1bmN0c1tdPQogCXsKK3tFUlJfRlVOQyhYNTA5VjNfRl9BMklfR0VORVJBTF9OQU1FKSwJIkEySV9HRU5FUkFMX05BTUUifSwKIHtFUlJfRlVOQyhYNTA5VjNfRl9BU0lERU5USUZJRVJDSE9JQ0VfQ0FOT05JWkUpLAkiQVNJREVOVElGSUVSQ0hPSUNFX0NBTk9OSVpFIn0sCiB7RVJSX0ZVTkMoWDUwOVYzX0ZfQVNJREVOVElGSUVSQ0hPSUNFX0lTX0NBTk9OSUNBTCksCSJBU0lERU5USUZJRVJDSE9JQ0VfSVNfQ0FOT05JQ0FMIn0sCiB7RVJSX0ZVTkMoWDUwOVYzX0ZfQ09QWV9FTUFJTCksCSJDT1BZX0VNQUlMIn0sCkBAIC03OSw2ICs4MCw3IEBACiB7RVJSX0ZVTkMoWDUwOVYzX0ZfRE9fRVhUX0kyRCksCSJET19FWFRfSTJEIn0sCiB7RVJSX0ZVTkMoWDUwOVYzX0ZfRE9fRVhUX05DT05GKSwJIkRPX0VYVF9OQ09ORiJ9LAoge0VSUl9GVU5DKFg1MDlWM19GX0RPX0kyVl9OQU1FX0NPTlNUUkFJTlRTKSwJIkRPX0kyVl9OQU1FX0NPTlNUUkFJTlRTIn0sCit7RVJSX0ZVTkMoWDUwOVYzX0ZfR05BTUVTX0ZST01fU0VDVE5BTUUpLAkiR05BTUVTX0ZST01fU0VDVE5BTUUifSwKIHtFUlJfRlVOQyhYNTA5VjNfRl9IRVhfVE9fU1RSSU5HKSwJImhleF90b19zdHJpbmcifSwKIHtFUlJfRlVOQyhYNTA5VjNfRl9JMlNfQVNOMV9FTlVNRVJBVEVEKSwJImkyc19BU04xX0VOVU1FUkFURUQifSwKIHtFUlJfRlVOQyhYNTA5VjNfRl9JMlNfQVNOMV9JQTVTVFJJTkcpLAkiSTJTX0FTTjFfSUE1U1RSSU5HIn0sCkBAIC05NSw2ICs5Nyw3IEBACiB7RVJSX0ZVTkMoWDUwOVYzX0ZfUzJJX0FTTjFfT0NURVRfU1RSSU5HKSwJInMyaV9BU04xX09DVEVUX1NUUklORyJ9LAoge0VSUl9GVU5DKFg1MDlWM19GX1MySV9BU04xX1NLRVlfSUQpLAkiUzJJX0FTTjFfU0tFWV9JRCJ9LAoge0VSUl9GVU5DKFg1MDlWM19GX1MySV9TS0VZX0lEKSwJIlMySV9TS0VZX0lEIn0sCit7RVJSX0ZVTkMoWDUwOVYzX0ZfU0VUX0RJU1RfUE9JTlRfTkFNRSksCSJTRVRfRElTVF9QT0lOVF9OQU1FIn0sCiB7RVJSX0ZVTkMoWDUwOVYzX0ZfU1RSSU5HX1RPX0hFWCksCSJzdHJpbmdfdG9faGV4In0sCiB7RVJSX0ZVTkMoWDUwOVYzX0ZfU1hORVRfQUREX0lEX0FTQyksCSJTWE5FVF9hZGRfaWRfYXNjIn0sCiB7RVJSX0ZVTkMoWDUwOVYzX0ZfU1hORVRfQUREX0lEX0lOVEVHRVIpLAkiU1hORVRfYWRkX2lkX0lOVEVHRVIifSwKQEAgLTExMCw2ICsxMTMsNyBAQAoge0VSUl9GVU5DKFg1MDlWM19GX1YySV9FWFRFTkRFRF9LRVlfVVNBR0UpLAkiVjJJX0VYVEVOREVEX0tFWV9VU0FHRSJ9LAoge0VSUl9GVU5DKFg1MDlWM19GX1YySV9HRU5FUkFMX05BTUVTKSwJInYyaV9HRU5FUkFMX05BTUVTIn0sCiB7RVJSX0ZVTkMoWDUwOVYzX0ZfVjJJX0dFTkVSQUxfTkFNRV9FWCksCSJ2MmlfR0VORVJBTF9OQU1FX2V4In0sCit7RVJSX0ZVTkMoWDUwOVYzX0ZfVjJJX0lEUCksCSJWMklfSURQIn0sCiB7RVJSX0ZVTkMoWDUwOVYzX0ZfVjJJX0lQQUREUkJMT0NLUyksCSJWMklfSVBBRERSQkxPQ0tTIn0sCiB7RVJSX0ZVTkMoWDUwOVYzX0ZfVjJJX0lTU1VFUl9BTFQpLAkiVjJJX0lTU1VFUl9BTFQifSwKIHtFUlJfRlVOQyhYNTA5VjNfRl9WMklfTkFNRV9DT05TVFJBSU5UUyksCSJWMklfTkFNRV9DT05TVFJBSU5UUyJ9LApAQCAtMTQxLDYgKzE0NSw3IEBACiB7RVJSX1JFQVNPTihYNTA5VjNfUl9CTl9ERUMyQk5fRVJST1IpICAgICwiYm4gZGVjMmJuIGVycm9yIn0sCiB7RVJSX1JFQVNPTihYNTA5VjNfUl9CTl9UT19BU04xX0lOVEVHRVJfRVJST1IpLCJibiB0byBhc24xIGludGVnZXIgZXJyb3IifSwKIHtFUlJfUkVBU09OKFg1MDlWM19SX0RJUk5BTUVfRVJST1IpICAgICAgLCJkaXJuYW1lIGVycm9yIn0sCit7RVJSX1JFQVNPTihYNTA5VjNfUl9ESVNUUE9JTlRfQUxSRUFEWV9TRVQpLCJkaXN0cG9pbnQgYWxyZWFkeSBzZXQifSwKIHtFUlJfUkVBU09OKFg1MDlWM19SX0RVUExJQ0FURV9aT05FX0lEKSAgLCJkdXBsaWNhdGUgem9uZSBpZCJ9LAoge0VSUl9SRUFTT04oWDUwOVYzX1JfRVJST1JfQ09OVkVSVElOR19aT05FKSwiZXJyb3IgY29udmVydGluZyB6b25lIn0sCiB7RVJSX1JFQVNPTihYNTA5VjNfUl9FUlJPUl9DUkVBVElOR19FWFRFTlNJT04pLCJlcnJvciBjcmVhdGluZyBleHRlbnNpb24ifSwKQEAgLTE1NCw2ICsxNTksNyBAQAoge0VSUl9SRUFTT04oWDUwOVYzX1JfSUxMRUdBTF9FTVBUWV9FWFRFTlNJT04pLCJpbGxlZ2FsIGVtcHR5IGV4dGVuc2lvbiJ9LAoge0VSUl9SRUFTT04oWDUwOVYzX1JfSUxMRUdBTF9IRVhfRElHSVQpICAsImlsbGVnYWwgaGV4IGRpZ2l0In0sCiB7RVJSX1JFQVNPTihYNTA5VjNfUl9JTkNPUlJFQ1RfUE9MSUNZX1NZTlRBWF9UQUcpLCJpbmNvcnJlY3QgcG9saWN5IHN5bnRheCB0YWcifSwKK3tFUlJfUkVBU09OKFg1MDlWM19SX0lOVkFMSURfTVVMVElQTEVfUkROUyksImludmFsaWQgbXVsdGlwbGUgcmRucyJ9LAoge0VSUl9SRUFTT04oWDUwOVYzX1JfSU5WQUxJRF9BU05VTUJFUikgICAsImludmFsaWQgYXNudW1iZXIifSwKIHtFUlJfUkVBU09OKFg1MDlWM19SX0lOVkFMSURfQVNSQU5HRSkgICAgLCJpbnZhbGlkIGFzcmFuZ2UifSwKIHtFUlJfUkVBU09OKFg1MDlWM19SX0lOVkFMSURfQk9PTEVBTl9TVFJJTkcpLCJpbnZhbGlkIGJvb2xlYW4gc3RyaW5nIn0sCkBAIC0xODcsOSArMTkzLDkgQEAKIHtFUlJfUkVBU09OKFg1MDlWM19SX09ERF9OVU1CRVJfT0ZfRElHSVRTKSwib2RkIG51bWJlciBvZiBkaWdpdHMifSwKIHtFUlJfUkVBU09OKFg1MDlWM19SX09QRVJBVElPTl9OT1RfREVGSU5FRCksIm9wZXJhdGlvbiBub3QgZGVmaW5lZCJ9LAoge0VSUl9SRUFTT04oWDUwOVYzX1JfT1RIRVJOQU1FX0VSUk9SKSAgICAsIm90aGVybmFtZSBlcnJvciJ9LAote0VSUl9SRUFTT04oWDUwOVYzX1JfUE9MSUNZX0xBTkdVQUdFX0FMUkVBRFRZX0RFRklORUQpLCJwb2xpY3kgbGFuZ3VhZ2UgYWxyZWFkdHkgZGVmaW5lZCJ9LAore0VSUl9SRUFTT04oWDUwOVYzX1JfUE9MSUNZX0xBTkdVQUdFX0FMUkVBRFlfREVGSU5FRCksInBvbGljeSBsYW5ndWFnZSBhbHJlYWR5IGRlZmluZWQifSwKIHtFUlJfUkVBU09OKFg1MDlWM19SX1BPTElDWV9QQVRIX0xFTkdUSCkgLCJwb2xpY3kgcGF0aCBsZW5ndGgifSwKLXtFUlJfUkVBU09OKFg1MDlWM19SX1BPTElDWV9QQVRIX0xFTkdUSF9BTFJFQURUWV9ERUZJTkVEKSwicG9saWN5IHBhdGggbGVuZ3RoIGFscmVhZHR5IGRlZmluZWQifSwKK3tFUlJfUkVBU09OKFg1MDlWM19SX1BPTElDWV9QQVRIX0xFTkdUSF9BTFJFQURZX0RFRklORUQpLCJwb2xpY3kgcGF0aCBsZW5ndGggYWxyZWFkeSBkZWZpbmVkIn0sCiB7RVJSX1JFQVNPTihYNTA5VjNfUl9QT0xJQ1lfU1lOVEFYX05PVF9DVVJSRU5UTFlfU1VQUE9SVEVEKSwicG9saWN5IHN5bnRheCBub3QgY3VycmVudGx5IHN1cHBvcnRlZCJ9LAoge0VSUl9SRUFTT04oWDUwOVYzX1JfUE9MSUNZX1dIRU5fUFJPWFlfTEFOR1VBR0VfUkVRVUlSRVNfTk9fUE9MSUNZKSwicG9saWN5IHdoZW4gcHJveHkgbGFuZ3VhZ2UgcmVxdWlyZXMgbm8gcG9saWN5In0sCiB7RVJSX1JFQVNPTihYNTA5VjNfUl9TRUNUSU9OX05PVF9GT1VORCkgICwic2VjdGlvbiBub3QgZm91bmQifSwKQEAgLTIwMCw2ICsyMDYsNyBAQAoge0VSUl9SRUFTT04oWDUwOVYzX1JfVU5LTk9XTl9FWFRFTlNJT05fTkFNRSksInVua25vd24gZXh0ZW5zaW9uIG5hbWUifSwKIHtFUlJfUkVBU09OKFg1MDlWM19SX1VOS05PV05fT1BUSU9OKSAgICAgLCJ1bmtub3duIG9wdGlvbiJ9LAoge0VSUl9SRUFTT04oWDUwOVYzX1JfVU5TVVBQT1JURURfT1BUSU9OKSAsInVuc3VwcG9ydGVkIG9wdGlvbiJ9LAore0VSUl9SRUFTT04oWDUwOVYzX1JfVU5TVVBQT1JURURfVFlQRSkgICAsInVuc3VwcG9ydGVkIHR5cGUifSwKIHtFUlJfUkVBU09OKFg1MDlWM19SX1VTRVJfVE9PX0xPTkcpICAgICAgLCJ1c2VyIHRvbyBsb25nIn0sCiB7MCxOVUxMfQogCX07CmRpZmYgLS1naXQgYS9jcnlwdG8veDUwOXYzL3g1MDl2My5oIGIvY3J5cHRvL3g1MDl2My94NTA5djMuaAppbmRleCA5ZWY4M2RhLi5iMzA4YWJlIDEwMDY0NAotLS0gYS9jcnlwdG8veDUwOXYzL3g1MDl2My5oCisrKyBiL2NyeXB0by94NTA5djMveDUwOXYzLmgKQEAgLTc2LDEyICs3NiwxOSBAQAogdHlwZWRlZiB2b2lkICgqWDUwOVYzX0VYVF9GUkVFKSh2b2lkICopOwogdHlwZWRlZiB2b2lkICogKCpYNTA5VjNfRVhUX0QySSkodm9pZCAqLCBjb25zdCB1bnNpZ25lZCBjaGFyICoqICwgbG9uZyk7CiB0eXBlZGVmIGludCAoKlg1MDlWM19FWFRfSTJEKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiopOwotdHlwZWRlZiBTVEFDS19PRihDT05GX1ZBTFVFKSAqICgqWDUwOVYzX0VYVF9JMlYpKHN0cnVjdCB2M19leHRfbWV0aG9kICptZXRob2QsIHZvaWQgKmV4dCwgU1RBQ0tfT0YoQ09ORl9WQUxVRSkgKmV4dGxpc3QpOwotdHlwZWRlZiB2b2lkICogKCpYNTA5VjNfRVhUX1YySSkoc3RydWN0IHYzX2V4dF9tZXRob2QgKm1ldGhvZCwgc3RydWN0IHYzX2V4dF9jdHggKmN0eCwgU1RBQ0tfT0YoQ09ORl9WQUxVRSkgKnZhbHVlcyk7Ci10eXBlZGVmIGNoYXIgKiAoKlg1MDlWM19FWFRfSTJTKShzdHJ1Y3QgdjNfZXh0X21ldGhvZCAqbWV0aG9kLCB2b2lkICpleHQpOwotdHlwZWRlZiB2b2lkICogKCpYNTA5VjNfRVhUX1MySSkoc3RydWN0IHYzX2V4dF9tZXRob2QgKm1ldGhvZCwgc3RydWN0IHYzX2V4dF9jdHggKmN0eCwgY29uc3QgY2hhciAqc3RyKTsKLXR5cGVkZWYgaW50ICgqWDUwOVYzX0VYVF9JMlIpKHN0cnVjdCB2M19leHRfbWV0aG9kICptZXRob2QsIHZvaWQgKmV4dCwgQklPICpvdXQsIGludCBpbmRlbnQpOwotdHlwZWRlZiB2b2lkICogKCpYNTA5VjNfRVhUX1IySSkoc3RydWN0IHYzX2V4dF9tZXRob2QgKm1ldGhvZCwgc3RydWN0IHYzX2V4dF9jdHggKmN0eCwgY29uc3QgY2hhciAqc3RyKTsKK3R5cGVkZWYgU1RBQ0tfT0YoQ09ORl9WQUxVRSkgKgorICAoKlg1MDlWM19FWFRfSTJWKShjb25zdCBzdHJ1Y3QgdjNfZXh0X21ldGhvZCAqbWV0aG9kLCB2b2lkICpleHQsCisJCSAgICBTVEFDS19PRihDT05GX1ZBTFVFKSAqZXh0bGlzdCk7Cit0eXBlZGVmIHZvaWQgKiAoKlg1MDlWM19FWFRfVjJJKShjb25zdCBzdHJ1Y3QgdjNfZXh0X21ldGhvZCAqbWV0aG9kLAorCQkJCSBzdHJ1Y3QgdjNfZXh0X2N0eCAqY3R4LAorCQkJCSBTVEFDS19PRihDT05GX1ZBTFVFKSAqdmFsdWVzKTsKK3R5cGVkZWYgY2hhciAqICgqWDUwOVYzX0VYVF9JMlMpKGNvbnN0IHN0cnVjdCB2M19leHRfbWV0aG9kICptZXRob2QsIHZvaWQgKmV4dCk7Cit0eXBlZGVmIHZvaWQgKiAoKlg1MDlWM19FWFRfUzJJKShjb25zdCBzdHJ1Y3QgdjNfZXh0X21ldGhvZCAqbWV0aG9kLAorCQkJCSBzdHJ1Y3QgdjNfZXh0X2N0eCAqY3R4LCBjb25zdCBjaGFyICpzdHIpOwordHlwZWRlZiBpbnQgKCpYNTA5VjNfRVhUX0kyUikoY29uc3Qgc3RydWN0IHYzX2V4dF9tZXRob2QgKm1ldGhvZCwgdm9pZCAqZXh0LAorCQkJICAgICAgQklPICpvdXQsIGludCBpbmRlbnQpOwordHlwZWRlZiB2b2lkICogKCpYNTA5VjNfRVhUX1IySSkoY29uc3Qgc3RydWN0IHYzX2V4dF9tZXRob2QgKm1ldGhvZCwKKwkJCQkgc3RydWN0IHYzX2V4dF9jdHggKmN0eCwgY29uc3QgY2hhciAqc3RyKTsKIAogLyogVjMgZXh0ZW5zaW9uIHN0cnVjdHVyZSAqLwogCkBAIC0yMjAsMjQgKzIyNyw0MSBAQAogCUdFTkVSQUxfTkFNRVMgKmZ1bGxuYW1lOwogCVNUQUNLX09GKFg1MDlfTkFNRV9FTlRSWSkgKnJlbGF0aXZlbmFtZTsKIH0gbmFtZTsKKy8qIElmIHJlbGF0aXZlbmFtZSB0aGVuIHRoaXMgY29udGFpbnMgdGhlIGZ1bGwgZGlzdHJpYnV0aW9uIHBvaW50IG5hbWUgKi8KK1g1MDlfTkFNRSAqZHBuYW1lOwogfSBESVNUX1BPSU5UX05BTUU7CisvKiBBbGwgZXhpc3RpbmcgcmVhc29ucyAqLworI2RlZmluZSBDUkxEUF9BTExfUkVBU09OUwkweDgwN2YKIAotdHlwZWRlZiBzdHJ1Y3QgRElTVF9QT0lOVF9zdCB7CisjZGVmaW5lIENSTF9SRUFTT05fTk9ORQkJCQktMQorI2RlZmluZSBDUkxfUkVBU09OX1VOU1BFQ0lGSUVECQkJMAorI2RlZmluZSBDUkxfUkVBU09OX0tFWV9DT01QUk9NSVNFCQkxCisjZGVmaW5lIENSTF9SRUFTT05fQ0FfQ09NUFJPTUlTRQkJMgorI2RlZmluZSBDUkxfUkVBU09OX0FGRklMSUFUSU9OX0NIQU5HRUQJCTMKKyNkZWZpbmUgQ1JMX1JFQVNPTl9TVVBFUlNFREVECQkJNAorI2RlZmluZSBDUkxfUkVBU09OX0NFU1NBVElPTl9PRl9PUEVSQVRJT04JNQorI2RlZmluZSBDUkxfUkVBU09OX0NFUlRJRklDQVRFX0hPTEQJCTYKKyNkZWZpbmUgQ1JMX1JFQVNPTl9SRU1PVkVfRlJPTV9DUkwJCTgKKyNkZWZpbmUgQ1JMX1JFQVNPTl9QUklWSUxFR0VfV0lUSERSQVdOCQk5CisjZGVmaW5lIENSTF9SRUFTT05fQUFfQ09NUFJPTUlTRQkJMTAKKworc3RydWN0IERJU1RfUE9JTlRfc3QgewogRElTVF9QT0lOVF9OQU1FCSpkaXN0cG9pbnQ7CiBBU04xX0JJVF9TVFJJTkcgKnJlYXNvbnM7CiBHRU5FUkFMX05BTUVTICpDUkxpc3N1ZXI7Ci19IERJU1RfUE9JTlQ7CitpbnQgZHBfcmVhc29uczsKK307CiAKIHR5cGVkZWYgU1RBQ0tfT0YoRElTVF9QT0lOVCkgQ1JMX0RJU1RfUE9JTlRTOwogCiBERUNMQVJFX1NUQUNLX09GKERJU1RfUE9JTlQpCiBERUNMQVJFX0FTTjFfU0VUX09GKERJU1RfUE9JTlQpCiAKLXR5cGVkZWYgc3RydWN0IEFVVEhPUklUWV9LRVlJRF9zdCB7CitzdHJ1Y3QgQVVUSE9SSVRZX0tFWUlEX3N0IHsKIEFTTjFfT0NURVRfU1RSSU5HICprZXlpZDsKIEdFTkVSQUxfTkFNRVMgKmlzc3VlcjsKIEFTTjFfSU5URUdFUiAqc2VyaWFsOwotfSBBVVRIT1JJVFlfS0VZSUQ7Cit9OwogCiAvKiBTdHJvbmcgZXh0cmFuZXQgc3RydWN0dXJlcyAqLwogCkBAIC0zMDMsMTAgKzMyNywxMCBAQAogCiBERUNMQVJFX1NUQUNLX09GKEdFTkVSQUxfU1VCVFJFRSkKIAotdHlwZWRlZiBzdHJ1Y3QgTkFNRV9DT05TVFJBSU5UU19zdCB7CitzdHJ1Y3QgTkFNRV9DT05TVFJBSU5UU19zdCB7CiAJU1RBQ0tfT0YoR0VORVJBTF9TVUJUUkVFKSAqcGVybWl0dGVkU3VidHJlZXM7CiAJU1RBQ0tfT0YoR0VORVJBTF9TVUJUUkVFKSAqZXhjbHVkZWRTdWJ0cmVlczsKLX0gTkFNRV9DT05TVFJBSU5UUzsKK307CiAKIHR5cGVkZWYgc3RydWN0IFBPTElDWV9DT05TVFJBSU5UU19zdCB7CiAJQVNOMV9JTlRFR0VSICpyZXF1aXJlRXhwbGljaXRQb2xpY3k7CkBAIC0zMjksNiArMzUzLDMxIEBACiBERUNMQVJFX0FTTjFfRlVOQ1RJT05TKFBST1hZX1BPTElDWSkKIERFQ0xBUkVfQVNOMV9GVU5DVElPTlMoUFJPWFlfQ0VSVF9JTkZPX0VYVEVOU0lPTikKIAorc3RydWN0IElTU1VJTkdfRElTVF9QT0lOVF9zdAorCXsKKwlESVNUX1BPSU5UX05BTUUgKmRpc3Rwb2ludDsKKwlpbnQgb25seXVzZXI7CisJaW50IG9ubHlDQTsKKwlBU04xX0JJVF9TVFJJTkcgKm9ubHlzb21lcmVhc29uczsKKwlpbnQgaW5kaXJlY3RDUkw7CisJaW50IG9ubHlhdHRyOworCX07CisKKy8qIFZhbHVlcyBpbiBpZHBfZmxhZ3MgZmllbGQgKi8KKy8qIElEUCBwcmVzZW50ICovCisjZGVmaW5lCUlEUF9QUkVTRU5UCTB4MQorLyogSURQIHZhbHVlcyBpbmNvbnNpc3RlbnQgKi8KKyNkZWZpbmUgSURQX0lOVkFMSUQJMHgyCisvKiBvbmx5dXNlciB0cnVlICovCisjZGVmaW5lCUlEUF9PTkxZVVNFUgkweDQKKy8qIG9ubHlDQSB0cnVlICovCisjZGVmaW5lCUlEUF9PTkxZQ0EJMHg4CisvKiBvbmx5YXR0ciB0cnVlICovCisjZGVmaW5lIElEUF9PTkxZQVRUUgkweDEwCisvKiBpbmRpcmVjdENSTCB0cnVlICovCisjZGVmaW5lIElEUF9JTkRJUkVDVAkweDIwCisvKiBvbmx5c29tZXJlYXNvbnMgcHJlc2VudCAqLworI2RlZmluZSBJRFBfUkVBU09OUwkweDQwCiAKICNkZWZpbmUgWDUwOVYzX2NvbmZfZXJyKHZhbCkgRVJSX2FkZF9lcnJvcl9kYXRhKDYsICJzZWN0aW9uOiIsIHZhbC0+c2VjdGlvbiwgXAogIixuYW1lOiIsIHZhbC0+bmFtZSwgIix2YWx1ZToiLCB2YWwtPnZhbHVlKTsKQEAgLTM3Myw2ICs0MjIsNyBAQAogI2RlZmluZSBFWEZMQUdfUFJPWFkJCTB4NDAwCiAKICNkZWZpbmUgRVhGTEFHX0lOVkFMSURfUE9MSUNZCTB4ODAwCisjZGVmaW5lIEVYRkxBR19GUkVTSEVTVAkJMHgxMDAwCiAKICNkZWZpbmUgS1VfRElHSVRBTF9TSUdOQVRVUkUJMHgwMDgwCiAjZGVmaW5lIEtVX05PTl9SRVBVRElBVElPTgkweDAwNDAKQEAgLTQyNCw5ICs0NzQsMTAgQEAKICNkZWZpbmUgWDUwOV9QVVJQT1NFX0NSTF9TSUdOCQk2CiAjZGVmaW5lIFg1MDlfUFVSUE9TRV9BTlkJCTcKICNkZWZpbmUgWDUwOV9QVVJQT1NFX09DU1BfSEVMUEVSCTgKKyNkZWZpbmUgWDUwOV9QVVJQT1NFX1RJTUVTVEFNUF9TSUdOCTkKIAogI2RlZmluZSBYNTA5X1BVUlBPU0VfTUlOCQkxCi0jZGVmaW5lIFg1MDlfUFVSUE9TRV9NQVgJCTgKKyNkZWZpbmUgWDUwOV9QVVJQT1NFX01BWAkJOQogCiAvKiBGbGFncyBmb3IgWDUwOVYzX0VYVF9wcmludCgpICovCiAKQEAgLTQ3MSw2ICs1MjIsOSBAQAogREVDTEFSRV9BU04xX0ZVTkNUSU9OUyhQS0VZX1VTQUdFX1BFUklPRCkKIAogREVDTEFSRV9BU04xX0ZVTkNUSU9OUyhHRU5FUkFMX05BTUUpCitHRU5FUkFMX05BTUUgKkdFTkVSQUxfTkFNRV9kdXAoR0VORVJBTF9OQU1FICphKTsKK2ludCBHRU5FUkFMX05BTUVfY21wKEdFTkVSQUxfTkFNRSAqYSwgR0VORVJBTF9OQU1FICpiKTsKKwogCiAKIEFTTjFfQklUX1NUUklORyAqdjJpX0FTTjFfQklUX1NUUklORyhYNTA5VjNfRVhUX01FVEhPRCAqbWV0aG9kLApAQCAtNDg2LDExICs1NDAsMTggQEAKIAogU1RBQ0tfT0YoQ09ORl9WQUxVRSkgKmkydl9HRU5FUkFMX05BTUVTKFg1MDlWM19FWFRfTUVUSE9EICptZXRob2QsCiAJCUdFTkVSQUxfTkFNRVMgKmdlbiwgU1RBQ0tfT0YoQ09ORl9WQUxVRSkgKmV4dGxpc3QpOwotR0VORVJBTF9OQU1FUyAqdjJpX0dFTkVSQUxfTkFNRVMoWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZCwKLQkJCQlYNTA5VjNfQ1RYICpjdHgsIFNUQUNLX09GKENPTkZfVkFMVUUpICpudmFsKTsKK0dFTkVSQUxfTkFNRVMgKnYyaV9HRU5FUkFMX05BTUVTKGNvbnN0IFg1MDlWM19FWFRfTUVUSE9EICptZXRob2QsCisJCQkJIFg1MDlWM19DVFggKmN0eCwgU1RBQ0tfT0YoQ09ORl9WQUxVRSkgKm52YWwpOwogCiBERUNMQVJFX0FTTjFfRlVOQ1RJT05TKE9USEVSTkFNRSkKIERFQ0xBUkVfQVNOMV9GVU5DVElPTlMoRURJUEFSVFlOQU1FKQoraW50IE9USEVSTkFNRV9jbXAoT1RIRVJOQU1FICphLCBPVEhFUk5BTUUgKmIpOwordm9pZCBHRU5FUkFMX05BTUVfc2V0MF92YWx1ZShHRU5FUkFMX05BTUUgKmEsIGludCB0eXBlLCB2b2lkICp2YWx1ZSk7Cit2b2lkICpHRU5FUkFMX05BTUVfZ2V0MF92YWx1ZShHRU5FUkFMX05BTUUgKmEsIGludCAqcHR5cGUpOworaW50IEdFTkVSQUxfTkFNRV9zZXQwX290aGVybmFtZShHRU5FUkFMX05BTUUgKmdlbiwKKwkJCQlBU04xX09CSkVDVCAqb2lkLCBBU04xX1RZUEUgKnZhbHVlKTsKK2ludCBHRU5FUkFMX05BTUVfZ2V0MF9vdGhlck5hbWUoR0VORVJBTF9OQU1FICpnZW4sIAorCQkJCUFTTjFfT0JKRUNUICoqcG9pZCwgQVNOMV9UWVBFICoqcHZhbHVlKTsKIAogY2hhciAqaTJzX0FTTjFfT0NURVRfU1RSSU5HKFg1MDlWM19FWFRfTUVUSE9EICptZXRob2QsIEFTTjFfT0NURVRfU1RSSU5HICppYTUpOwogQVNOMV9PQ1RFVF9TVFJJTkcgKnMyaV9BU04xX09DVEVUX1NUUklORyhYNTA5VjNfRVhUX01FVEhPRCAqbWV0aG9kLCBYNTA5VjNfQ1RYICpjdHgsIGNoYXIgKnN0cik7CkBAIC01MDcsNiArNTY4LDExIEBACiBERUNMQVJFX0FTTjFfRlVOQ1RJT05TKENSTF9ESVNUX1BPSU5UUykKIERFQ0xBUkVfQVNOMV9GVU5DVElPTlMoRElTVF9QT0lOVCkKIERFQ0xBUkVfQVNOMV9GVU5DVElPTlMoRElTVF9QT0lOVF9OQU1FKQorREVDTEFSRV9BU04xX0ZVTkNUSU9OUyhJU1NVSU5HX0RJU1RfUE9JTlQpCisKK2ludCBESVNUX1BPSU5UX3NldF9kcG5hbWUoRElTVF9QT0lOVF9OQU1FICpkcG4sIFg1MDlfTkFNRSAqaW5hbWUpOworCitpbnQgTkFNRV9DT05TVFJBSU5UU19jaGVjayhYNTA5ICp4LCBOQU1FX0NPTlNUUkFJTlRTICpuYyk7CiAKIERFQ0xBUkVfQVNOMV9GVU5DVElPTlMoQUNDRVNTX0RFU0NSSVBUSU9OKQogREVDTEFSRV9BU04xX0ZVTkNUSU9OUyhBVVRIT1JJVFlfSU5GT19BQ0NFU1MpCkBAIC01MjQsMTEgKzU5MCwxNiBAQAogREVDTEFSRV9BU04xX0FMTE9DX0ZVTkNUSU9OUyhQT0xJQ1lfQ09OU1RSQUlOVFMpCiBERUNMQVJFX0FTTjFfSVRFTShQT0xJQ1lfQ09OU1RSQUlOVFMpCiAKK0dFTkVSQUxfTkFNRSAqYTJpX0dFTkVSQUxfTkFNRShHRU5FUkFMX05BTUUgKm91dCwKKwkJCSAgICAgICBjb25zdCBYNTA5VjNfRVhUX01FVEhPRCAqbWV0aG9kLCBYNTA5VjNfQ1RYICpjdHgsCisJCQkgICAgICAgaW50IGdlbl90eXBlLCBjaGFyICp2YWx1ZSwgaW50IGlzX25jKTsKKwogI2lmZGVmIEhFQURFUl9DT05GX0gKLUdFTkVSQUxfTkFNRSAqdjJpX0dFTkVSQUxfTkFNRShYNTA5VjNfRVhUX01FVEhPRCAqbWV0aG9kLCBYNTA5VjNfQ1RYICpjdHgsCi0JCQkJCQkJQ09ORl9WQUxVRSAqY25mKTsKLUdFTkVSQUxfTkFNRSAqdjJpX0dFTkVSQUxfTkFNRV9leChHRU5FUkFMX05BTUUgKm91dCwgWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZCwKLQkJCQlYNTA5VjNfQ1RYICpjdHgsIENPTkZfVkFMVUUgKmNuZiwgaW50IGlzX25jKTsKK0dFTkVSQUxfTkFNRSAqdjJpX0dFTkVSQUxfTkFNRShjb25zdCBYNTA5VjNfRVhUX01FVEhPRCAqbWV0aG9kLCBYNTA5VjNfQ1RYICpjdHgsCisJCQkgICAgICAgQ09ORl9WQUxVRSAqY25mKTsKK0dFTkVSQUxfTkFNRSAqdjJpX0dFTkVSQUxfTkFNRV9leChHRU5FUkFMX05BTUUgKm91dCwKKwkJCQkgIGNvbnN0IFg1MDlWM19FWFRfTUVUSE9EICptZXRob2QsCisJCQkJICBYNTA5VjNfQ1RYICpjdHgsIENPTkZfVkFMVUUgKmNuZiwgaW50IGlzX25jKTsKIHZvaWQgWDUwOVYzX2NvbmZfZnJlZShDT05GX1ZBTFVFICp2YWwpOwogCiBYNTA5X0VYVEVOU0lPTiAqWDUwOVYzX0VYVF9uY29uZl9uaWQoQ09ORiAqY29uZiwgWDUwOVYzX0NUWCAqY3R4LCBpbnQgZXh0X25pZCwgY2hhciAqdmFsdWUpOwpAQCAtNTM4LDE4ICs2MDksMjMgQEAKIGludCBYNTA5VjNfRVhUX1JFUV9hZGRfbmNvbmYoQ09ORiAqY29uZiwgWDUwOVYzX0NUWCAqY3R4LCBjaGFyICpzZWN0aW9uLCBYNTA5X1JFUSAqcmVxKTsKIGludCBYNTA5VjNfRVhUX0NSTF9hZGRfbmNvbmYoQ09ORiAqY29uZiwgWDUwOVYzX0NUWCAqY3R4LCBjaGFyICpzZWN0aW9uLCBYNTA5X0NSTCAqY3JsKTsKIAotWDUwOV9FWFRFTlNJT04gKlg1MDlWM19FWFRfY29uZl9uaWQoTEhBU0ggKmNvbmYsIFg1MDlWM19DVFggKmN0eCwgaW50IGV4dF9uaWQsIGNoYXIgKnZhbHVlKTsKLVg1MDlfRVhURU5TSU9OICpYNTA5VjNfRVhUX2NvbmYoTEhBU0ggKmNvbmYsIFg1MDlWM19DVFggKmN0eCwgY2hhciAqbmFtZSwgY2hhciAqdmFsdWUpOwotaW50IFg1MDlWM19FWFRfYWRkX2NvbmYoTEhBU0ggKmNvbmYsIFg1MDlWM19DVFggKmN0eCwgY2hhciAqc2VjdGlvbiwgWDUwOSAqY2VydCk7Ci1pbnQgWDUwOVYzX0VYVF9SRVFfYWRkX2NvbmYoTEhBU0ggKmNvbmYsIFg1MDlWM19DVFggKmN0eCwgY2hhciAqc2VjdGlvbiwgWDUwOV9SRVEgKnJlcSk7Ci1pbnQgWDUwOVYzX0VYVF9DUkxfYWRkX2NvbmYoTEhBU0ggKmNvbmYsIFg1MDlWM19DVFggKmN0eCwgY2hhciAqc2VjdGlvbiwgWDUwOV9DUkwgKmNybCk7CitYNTA5X0VYVEVOU0lPTiAqWDUwOVYzX0VYVF9jb25mX25pZChMSEFTSF9PRihDT05GX1ZBTFVFKSAqY29uZiwgWDUwOVYzX0NUWCAqY3R4LAorCQkJCSAgICBpbnQgZXh0X25pZCwgY2hhciAqdmFsdWUpOworWDUwOV9FWFRFTlNJT04gKlg1MDlWM19FWFRfY29uZihMSEFTSF9PRihDT05GX1ZBTFVFKSAqY29uZiwgWDUwOVYzX0NUWCAqY3R4LAorCQkJCWNoYXIgKm5hbWUsIGNoYXIgKnZhbHVlKTsKK2ludCBYNTA5VjNfRVhUX2FkZF9jb25mKExIQVNIX09GKENPTkZfVkFMVUUpICpjb25mLCBYNTA5VjNfQ1RYICpjdHgsCisJCQljaGFyICpzZWN0aW9uLCBYNTA5ICpjZXJ0KTsKK2ludCBYNTA5VjNfRVhUX1JFUV9hZGRfY29uZihMSEFTSF9PRihDT05GX1ZBTFVFKSAqY29uZiwgWDUwOVYzX0NUWCAqY3R4LAorCQkJICAgIGNoYXIgKnNlY3Rpb24sIFg1MDlfUkVRICpyZXEpOworaW50IFg1MDlWM19FWFRfQ1JMX2FkZF9jb25mKExIQVNIX09GKENPTkZfVkFMVUUpICpjb25mLCBYNTA5VjNfQ1RYICpjdHgsCisJCQkgICAgY2hhciAqc2VjdGlvbiwgWDUwOV9DUkwgKmNybCk7CiAKIGludCBYNTA5VjNfYWRkX3ZhbHVlX2Jvb2xfbmYoY2hhciAqbmFtZSwgaW50IGFzbjFfYm9vbCwKLQkJCQkJCVNUQUNLX09GKENPTkZfVkFMVUUpICoqZXh0bGlzdCk7CisJCQkgICAgIFNUQUNLX09GKENPTkZfVkFMVUUpICoqZXh0bGlzdCk7CiBpbnQgWDUwOVYzX2dldF92YWx1ZV9ib29sKENPTkZfVkFMVUUgKnZhbHVlLCBpbnQgKmFzbjFfYm9vbCk7CiBpbnQgWDUwOVYzX2dldF92YWx1ZV9pbnQoQ09ORl9WQUxVRSAqdmFsdWUsIEFTTjFfSU5URUdFUiAqKmFpbnQpOwogdm9pZCBYNTA5VjNfc2V0X25jb25mKFg1MDlWM19DVFggKmN0eCwgQ09ORiAqY29uZik7Ci12b2lkIFg1MDlWM19zZXRfY29uZl9saGFzaChYNTA5VjNfQ1RYICpjdHgsIExIQVNIICpsaGFzaCk7Cit2b2lkIFg1MDlWM19zZXRfY29uZl9saGFzaChYNTA5VjNfQ1RYICpjdHgsIExIQVNIX09GKENPTkZfVkFMVUUpICpsaGFzaCk7CiAjZW5kaWYKIAogY2hhciAqIFg1MDlWM19nZXRfc3RyaW5nKFg1MDlWM19DVFggKmN0eCwgY2hhciAqbmFtZSwgY2hhciAqc2VjdGlvbik7CkBAIC01NzYsOCArNjUyLDggQEAKIGludCBYNTA5VjNfRVhUX2FkZF9hbGlhcyhpbnQgbmlkX3RvLCBpbnQgbmlkX2Zyb20pOwogdm9pZCBYNTA5VjNfRVhUX2NsZWFudXAodm9pZCk7CiAKLVg1MDlWM19FWFRfTUVUSE9EICpYNTA5VjNfRVhUX2dldChYNTA5X0VYVEVOU0lPTiAqZXh0KTsKLVg1MDlWM19FWFRfTUVUSE9EICpYNTA5VjNfRVhUX2dldF9uaWQoaW50IG5pZCk7Citjb25zdCBYNTA5VjNfRVhUX01FVEhPRCAqWDUwOVYzX0VYVF9nZXQoWDUwOV9FWFRFTlNJT04gKmV4dCk7Citjb25zdCBYNTA5VjNfRVhUX01FVEhPRCAqWDUwOVYzX0VYVF9nZXRfbmlkKGludCBuaWQpOwogaW50IFg1MDlWM19hZGRfc3RhbmRhcmRfZXh0ZW5zaW9ucyh2b2lkKTsKIFNUQUNLX09GKENPTkZfVkFMVUUpICpYNTA5VjNfcGFyc2VfbGlzdChjb25zdCBjaGFyICpsaW5lKTsKIHZvaWQgKlg1MDlWM19FWFRfZDJpKFg1MDlfRVhURU5TSU9OICpleHQpOwpAQCAtNTg3LDggKzY2Myw4IEBACiBYNTA5X0VYVEVOU0lPTiAqWDUwOVYzX0VYVF9pMmQoaW50IGV4dF9uaWQsIGludCBjcml0LCB2b2lkICpleHRfc3RydWMpOwogaW50IFg1MDlWM19hZGQxX2kyZChTVEFDS19PRihYNTA5X0VYVEVOU0lPTikgKip4LCBpbnQgbmlkLCB2b2lkICp2YWx1ZSwgaW50IGNyaXQsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwogCi1jaGFyICpoZXhfdG9fc3RyaW5nKHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgbG9uZyBsZW4pOwotdW5zaWduZWQgY2hhciAqc3RyaW5nX3RvX2hleChjaGFyICpzdHIsIGxvbmcgKmxlbik7CitjaGFyICpoZXhfdG9fc3RyaW5nKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgbG9uZyBsZW4pOwordW5zaWduZWQgY2hhciAqc3RyaW5nX3RvX2hleChjb25zdCBjaGFyICpzdHIsIGxvbmcgKmxlbik7CiBpbnQgbmFtZV9jbXAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqY21wKTsKIAogdm9pZCBYNTA5VjNfRVhUX3ZhbF9wcm4oQklPICpvdXQsIFNUQUNLX09GKENPTkZfVkFMVUUpICp2YWwsIGludCBpbmRlbnQsCkBAIC02MDMsNiArNjc5LDcgQEAKIGludCBYNTA5X3N1cHBvcnRlZF9leHRlbnNpb24oWDUwOV9FWFRFTlNJT04gKmV4KTsKIGludCBYNTA5X1BVUlBPU0Vfc2V0KGludCAqcCwgaW50IHB1cnBvc2UpOwogaW50IFg1MDlfY2hlY2tfaXNzdWVkKFg1MDkgKmlzc3VlciwgWDUwOSAqc3ViamVjdCk7CitpbnQgWDUwOV9jaGVja19ha2lkKFg1MDkgKmlzc3VlciwgQVVUSE9SSVRZX0tFWUlEICpha2lkKTsKIGludCBYNTA5X1BVUlBPU0VfZ2V0X2NvdW50KHZvaWQpOwogWDUwOV9QVVJQT1NFICogWDUwOV9QVVJQT1NFX2dldDAoaW50IGlkeCk7CiBpbnQgWDUwOV9QVVJQT1NFX2dldF9ieV9zbmFtZShjaGFyICpzbmFtZSk7CkBAIC02MTYsMTAgKzY5MywxMCBAQAogdm9pZCBYNTA5X1BVUlBPU0VfY2xlYW51cCh2b2lkKTsKIGludCBYNTA5X1BVUlBPU0VfZ2V0X2lkKFg1MDlfUFVSUE9TRSAqKTsKIAotU1RBQ0sgKlg1MDlfZ2V0MV9lbWFpbChYNTA5ICp4KTsKLVNUQUNLICpYNTA5X1JFUV9nZXQxX2VtYWlsKFg1MDlfUkVRICp4KTsKLXZvaWQgWDUwOV9lbWFpbF9mcmVlKFNUQUNLICpzayk7Ci1TVEFDSyAqWDUwOV9nZXQxX29jc3AoWDUwOSAqeCk7CitTVEFDS19PRihPUEVOU1NMX1NUUklORykgKlg1MDlfZ2V0MV9lbWFpbChYNTA5ICp4KTsKK1NUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSAqWDUwOV9SRVFfZ2V0MV9lbWFpbChYNTA5X1JFUSAqeCk7Cit2b2lkIFg1MDlfZW1haWxfZnJlZShTVEFDS19PRihPUEVOU1NMX1NUUklORykgKnNrKTsKK1NUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSAqWDUwOV9nZXQxX29jc3AoWDUwOSAqeCk7CiAKIEFTTjFfT0NURVRfU1RSSU5HICphMmlfSVBBRERSRVNTKGNvbnN0IGNoYXIgKmlwYXNjKTsKIEFTTjFfT0NURVRfU1RSSU5HICphMmlfSVBBRERSRVNTX05DKGNvbnN0IGNoYXIgKmlwYXNjKTsKQEAgLTYyOCw2ICs3MDUsNyBAQAogCQkJCQkJdW5zaWduZWQgbG9uZyBjaHR5cGUpOwogCiB2b2lkIFg1MDlfUE9MSUNZX05PREVfcHJpbnQoQklPICpvdXQsIFg1MDlfUE9MSUNZX05PREUgKm5vZGUsIGludCBpbmRlbnQpOworREVDTEFSRV9TVEFDS19PRihYNTA5X1BPTElDWV9OT0RFKQogCiAjaWZuZGVmIE9QRU5TU0xfTk9fUkZDMzc3OQogCkBAIC03ODcsOCArODY1LDkgQEAKIC8qIEVycm9yIGNvZGVzIGZvciB0aGUgWDUwOVYzIGZ1bmN0aW9ucy4gKi8KIAogLyogRnVuY3Rpb24gY29kZXMuICovCi0jZGVmaW5lIFg1MDlWM19GX0FTSURFTlRJRklFUkNIT0lDRV9DQU5PTklaRQkJIDE1NgotI2RlZmluZSBYNTA5VjNfRl9BU0lERU5USUZJRVJDSE9JQ0VfSVNfQ0FOT05JQ0FMCSAxNTcKKyNkZWZpbmUgWDUwOVYzX0ZfQTJJX0dFTkVSQUxfTkFNRQkJCSAxNjQKKyNkZWZpbmUgWDUwOVYzX0ZfQVNJREVOVElGSUVSQ0hPSUNFX0NBTk9OSVpFCQkgMTYxCisjZGVmaW5lIFg1MDlWM19GX0FTSURFTlRJRklFUkNIT0lDRV9JU19DQU5PTklDQUwJIDE2MgogI2RlZmluZSBYNTA5VjNfRl9DT1BZX0VNQUlMCQkJCSAxMjIKICNkZWZpbmUgWDUwOVYzX0ZfQ09QWV9JU1NVRVIJCQkJIDEyMwogI2RlZmluZSBYNTA5VjNfRl9ET19ESVJOQU1FCQkJCSAxNDQKQEAgLTc5Niw2ICs4NzUsNyBAQAogI2RlZmluZSBYNTA5VjNfRl9ET19FWFRfSTJECQkJCSAxMzUKICNkZWZpbmUgWDUwOVYzX0ZfRE9fRVhUX05DT05GCQkJCSAxNTEKICNkZWZpbmUgWDUwOVYzX0ZfRE9fSTJWX05BTUVfQ09OU1RSQUlOVFMJCSAxNDgKKyNkZWZpbmUgWDUwOVYzX0ZfR05BTUVTX0ZST01fU0VDVE5BTUUJCQkgMTU2CiAjZGVmaW5lIFg1MDlWM19GX0hFWF9UT19TVFJJTkcJCQkJIDExMQogI2RlZmluZSBYNTA5VjNfRl9JMlNfQVNOMV9FTlVNRVJBVEVECQkJIDEyMQogI2RlZmluZSBYNTA5VjNfRl9JMlNfQVNOMV9JQTVTVFJJTkcJCQkgMTQ5CkBAIC04MTIsMTMgKzg5MiwxNCBAQAogI2RlZmluZSBYNTA5VjNfRl9TMklfQVNOMV9PQ1RFVF9TVFJJTkcJCQkgMTEyCiAjZGVmaW5lIFg1MDlWM19GX1MySV9BU04xX1NLRVlfSUQJCQkgMTE0CiAjZGVmaW5lIFg1MDlWM19GX1MySV9TS0VZX0lECQkJCSAxMTUKKyNkZWZpbmUgWDUwOVYzX0ZfU0VUX0RJU1RfUE9JTlRfTkFNRQkJCSAxNTgKICNkZWZpbmUgWDUwOVYzX0ZfU1RSSU5HX1RPX0hFWAkJCQkgMTEzCiAjZGVmaW5lIFg1MDlWM19GX1NYTkVUX0FERF9JRF9BU0MJCQkgMTI1CiAjZGVmaW5lIFg1MDlWM19GX1NYTkVUX0FERF9JRF9JTlRFR0VSCQkJIDEyNgogI2RlZmluZSBYNTA5VjNfRl9TWE5FVF9BRERfSURfVUxPTkcJCQkgMTI3CiAjZGVmaW5lIFg1MDlWM19GX1NYTkVUX0dFVF9JRF9BU0MJCQkgMTI4CiAjZGVmaW5lIFg1MDlWM19GX1NYTkVUX0dFVF9JRF9VTE9ORwkJCSAxMjkKLSNkZWZpbmUgWDUwOVYzX0ZfVjJJX0FTSURFTlRJRklFUlMJCQkgMTU4CisjZGVmaW5lIFg1MDlWM19GX1YySV9BU0lERU5USUZJRVJTCQkJIDE2MwogI2RlZmluZSBYNTA5VjNfRl9WMklfQVNOMV9CSVRfU1RSSU5HCQkJIDEwMQogI2RlZmluZSBYNTA5VjNfRl9WMklfQVVUSE9SSVRZX0lORk9fQUNDRVNTCQkgMTM5CiAjZGVmaW5lIFg1MDlWM19GX1YySV9BVVRIT1JJVFlfS0VZSUQJCQkgMTE5CkBAIC04MjcsNiArOTA4LDcgQEAKICNkZWZpbmUgWDUwOVYzX0ZfVjJJX0VYVEVOREVEX0tFWV9VU0FHRQkJCSAxMDMKICNkZWZpbmUgWDUwOVYzX0ZfVjJJX0dFTkVSQUxfTkFNRVMJCQkgMTE4CiAjZGVmaW5lIFg1MDlWM19GX1YySV9HRU5FUkFMX05BTUVfRVgJCQkgMTE3CisjZGVmaW5lIFg1MDlWM19GX1YySV9JRFAJCQkJIDE1NwogI2RlZmluZSBYNTA5VjNfRl9WMklfSVBBRERSQkxPQ0tTCQkJIDE1OQogI2RlZmluZSBYNTA5VjNfRl9WMklfSVNTVUVSX0FMVAkJCQkgMTUzCiAjZGVmaW5lIFg1MDlWM19GX1YySV9OQU1FX0NPTlNUUkFJTlRTCQkJIDE0NwpAQCAtODU1LDYgKzkzNyw3IEBACiAjZGVmaW5lIFg1MDlWM19SX0JOX0RFQzJCTl9FUlJPUgkJCSAxMDAKICNkZWZpbmUgWDUwOVYzX1JfQk5fVE9fQVNOMV9JTlRFR0VSX0VSUk9SCQkgMTAxCiAjZGVmaW5lIFg1MDlWM19SX0RJUk5BTUVfRVJST1IJCQkJIDE0OQorI2RlZmluZSBYNTA5VjNfUl9ESVNUUE9JTlRfQUxSRUFEWV9TRVQJCQkgMTYwCiAjZGVmaW5lIFg1MDlWM19SX0RVUExJQ0FURV9aT05FX0lECQkJIDEzMwogI2RlZmluZSBYNTA5VjNfUl9FUlJPUl9DT05WRVJUSU5HX1pPTkUJCQkgMTMxCiAjZGVmaW5lIFg1MDlWM19SX0VSUk9SX0NSRUFUSU5HX0VYVEVOU0lPTgkJIDE0NApAQCAtODY4LDEyICs5NTEsMTMgQEAKICNkZWZpbmUgWDUwOVYzX1JfSUxMRUdBTF9FTVBUWV9FWFRFTlNJT04JCSAxNTEKICNkZWZpbmUgWDUwOVYzX1JfSUxMRUdBTF9IRVhfRElHSVQJCQkgMTEzCiAjZGVmaW5lIFg1MDlWM19SX0lOQ09SUkVDVF9QT0xJQ1lfU1lOVEFYX1RBRwkJIDE1MgotI2RlZmluZSBYNTA5VjNfUl9JTlZBTElEX0FTTlVNQkVSCQkJIDE2MAotI2RlZmluZSBYNTA5VjNfUl9JTlZBTElEX0FTUkFOR0UJCQkgMTYxCisjZGVmaW5lIFg1MDlWM19SX0lOVkFMSURfTVVMVElQTEVfUkROUwkJCSAxNjEKKyNkZWZpbmUgWDUwOVYzX1JfSU5WQUxJRF9BU05VTUJFUgkJCSAxNjIKKyNkZWZpbmUgWDUwOVYzX1JfSU5WQUxJRF9BU1JBTkdFCQkJIDE2MwogI2RlZmluZSBYNTA5VjNfUl9JTlZBTElEX0JPT0xFQU5fU1RSSU5HCQkJIDEwNAogI2RlZmluZSBYNTA5VjNfUl9JTlZBTElEX0VYVEVOU0lPTl9TVFJJTkcJCSAxMDUKLSNkZWZpbmUgWDUwOVYzX1JfSU5WQUxJRF9JTkhFUklUQU5DRQkJCSAxNjIKLSNkZWZpbmUgWDUwOVYzX1JfSU5WQUxJRF9JUEFERFJFU1MJCQkgMTYzCisjZGVmaW5lIFg1MDlWM19SX0lOVkFMSURfSU5IRVJJVEFOQ0UJCQkgMTY1CisjZGVmaW5lIFg1MDlWM19SX0lOVkFMSURfSVBBRERSRVNTCQkJIDE2NgogI2RlZmluZSBYNTA5VjNfUl9JTlZBTElEX05BTUUJCQkJIDEwNgogI2RlZmluZSBYNTA5VjNfUl9JTlZBTElEX05VTExfQVJHVU1FTlQJCQkgMTA3CiAjZGVmaW5lIFg1MDlWM19SX0lOVkFMSURfTlVMTF9OQU1FCQkJIDEwOApAQCAtOTAxLDkgKzk4NSw5IEBACiAjZGVmaW5lIFg1MDlWM19SX09ERF9OVU1CRVJfT0ZfRElHSVRTCQkJIDExMgogI2RlZmluZSBYNTA5VjNfUl9PUEVSQVRJT05fTk9UX0RFRklORUQJCQkgMTQ4CiAjZGVmaW5lIFg1MDlWM19SX09USEVSTkFNRV9FUlJPUgkJCSAxNDcKLSNkZWZpbmUgWDUwOVYzX1JfUE9MSUNZX0xBTkdVQUdFX0FMUkVBRFRZX0RFRklORUQJIDE1NQorI2RlZmluZSBYNTA5VjNfUl9QT0xJQ1lfTEFOR1VBR0VfQUxSRUFEWV9ERUZJTkVECSAxNTUKICNkZWZpbmUgWDUwOVYzX1JfUE9MSUNZX1BBVEhfTEVOR1RICQkJIDE1NgotI2RlZmluZSBYNTA5VjNfUl9QT0xJQ1lfUEFUSF9MRU5HVEhfQUxSRUFEVFlfREVGSU5FRAkgMTU3CisjZGVmaW5lIFg1MDlWM19SX1BPTElDWV9QQVRIX0xFTkdUSF9BTFJFQURZX0RFRklORUQJIDE1NwogI2RlZmluZSBYNTA5VjNfUl9QT0xJQ1lfU1lOVEFYX05PVF9DVVJSRU5UTFlfU1VQUE9SVEVECSAxNTgKICNkZWZpbmUgWDUwOVYzX1JfUE9MSUNZX1dIRU5fUFJPWFlfTEFOR1VBR0VfUkVRVUlSRVNfTk9fUE9MSUNZIDE1OQogI2RlZmluZSBYNTA5VjNfUl9TRUNUSU9OX05PVF9GT1VORAkJCSAxNTAKQEAgLTkxNCw2ICs5OTgsNyBAQAogI2RlZmluZSBYNTA5VjNfUl9VTktOT1dOX0VYVEVOU0lPTl9OQU1FCQkJIDEzMAogI2RlZmluZSBYNTA5VjNfUl9VTktOT1dOX09QVElPTgkJCQkgMTIwCiAjZGVmaW5lIFg1MDlWM19SX1VOU1VQUE9SVEVEX09QVElPTgkJCSAxMTcKKyNkZWZpbmUgWDUwOVYzX1JfVU5TVVBQT1JURURfVFlQRQkJCSAxNjcKICNkZWZpbmUgWDUwOVYzX1JfVVNFUl9UT09fTE9ORwkJCQkgMTMyCiAKICNpZmRlZiAgX19jcGx1c3BsdXMKZGlmZiAtLWdpdCBhL2NyeXB0by94ODZfNjRjcHVpZC5wbCBiL2NyeXB0by94ODZfNjRjcHVpZC5wbAppbmRleCAyNjE2YTAzLi5hN2Y5OGIzIDEwMDY0NAotLS0gYS9jcnlwdG8veDg2XzY0Y3B1aWQucGwKKysrIGIvY3J5cHRvL3g4Nl82NGNwdWlkLnBsCkBAIC0xLDY5ICsxLDE4MSBAQAogIyEvdXNyL2Jpbi9lbnYgcGVybAogCi0kb3V0cHV0PXNoaWZ0OwotJG1hc209MSBpZiAoJG91dHB1dCA9fiAvXC5hc20vKTsKLW9wZW4gU1RET1VULCI+JG91dHB1dCIgfHwgZGllICJjYW4ndCBvcGVuICRvdXRwdXQ6ICQhIjsKKyRmbGF2b3VyID0gc2hpZnQ7Ciskb3V0cHV0ICA9IHNoaWZ0OworaWYgKCRmbGF2b3VyID1+IC9cLi8pIHsgJG91dHB1dCA9ICRmbGF2b3VyOyB1bmRlZiAkZmxhdm91cjsgfQogCi1wcmludDw8X19fIGlmKGRlZmluZWQoJG1hc20pKTsKLV9URVhUCVNFR01FTlQKLVBVQkxJQwlPUEVOU1NMX3JkdHNjCiskd2luNjQ9MDsgJHdpbjY0PTEgaWYgKCRmbGF2b3VyID1+IC9bbm1dYXNtfG1pbmd3NjQvIHx8ICRvdXRwdXQgPX4gL1wuYXNtJC8pOwogCi1QVUJMSUMJT1BFTlNTTF9hdG9taWNfYWRkCi1BTElHTgkxNgotT1BFTlNTTF9hdG9taWNfYWRkCVBST0MKLQltb3YJZWF4LERXT1JEIFBUUltyY3hdCi1cJExzcGluOglsZWEJcjgsRFdPUkQgUFRSW3JkeCtyYXhdCi1sb2NrCWNtcHhjaGcJRFdPUkQgUFRSW3JjeF0scjhkCi0Jam5lCVwkTHNwaW4KLQltb3YJZWF4LHI4ZAotCWNkcWUgICAgCi0JcmV0Ci1PUEVOU1NMX2F0b21pY19hZGQJRU5EUAorJDAgPX4gbS8oLipbXC9cXF0pW15cL1xcXSskLzsgJGRpcj0kMTsKK29wZW4gU1RET1VULCJ8ICReWCAke2Rpcn1wZXJsYXNtL3g4Nl82NC14bGF0ZS5wbCAkZmxhdm91ciAkb3V0cHV0IjsKIAotUFVCTElDCU9QRU5TU0xfd2lwZV9jcHUKLUFMSUdOCTE2Ci1PUEVOU1NMX3dpcGVfY3B1CVBST0MKLQlweG9yCXhtbTAseG1tMAotCXB4b3IJeG1tMSx4bW0xCi0JcHhvcgl4bW0yLHhtbTIKLQlweG9yCXhtbTMseG1tMwotCXB4b3IJeG1tNCx4bW00Ci0JcHhvcgl4bW01LHhtbTUKLQl4b3IJcmN4LHJjeAotCXhvcglyZHgscmR4Ci0JeG9yCXI4LHI4Ci0JeG9yCXI5LHI5Ci0JeG9yCXIxMCxyMTAKLQl4b3IJcjExLHIxMQotCWxlYQlyYXgsUVdPUkQgUFRSW3JzcCs4XQotCXJldAotT1BFTlNTTF93aXBlX2NwdQlFTkRQCi1fVEVYVAlFTkRTCitpZiAoJHdpbjY0KQl7ICRhcmcxPSIlcmN4IjsgJGFyZzI9IiVyZHgiOyB9CitlbHNlCQl7ICRhcmcxPSIlcmRpIjsgJGFyZzI9IiVyc2kiOyB9CitwcmludDw8X19fOworLmV4dGVybgkJT1BFTlNTTF9jcHVpZF9zZXR1cAorLnNlY3Rpb24JLmluaXQKKwljYWxsCU9QRU5TU0xfY3B1aWRfc2V0dXAKIAotQ1JUXCRYSVUJU0VHTUVOVAotRVhUUk4JT1BFTlNTTF9jcHVpZF9zZXR1cDpQUk9DCi1EUQlPUEVOU1NMX2NwdWlkX3NldHVwCi1DUlRcJFhJVQlFTkRTCi0KLV9fXwotcHJpbnQ8PF9fXyBpZighZGVmaW5lZCgkbWFzbSkpOwogLnRleHQKIAogLmdsb2JsCU9QRU5TU0xfYXRvbWljX2FkZAotLnR5cGUJT1BFTlNTTF9hdG9taWNfYWRkLFxAZnVuY3Rpb24KKy50eXBlCU9QRU5TU0xfYXRvbWljX2FkZCxcQGFiaS1vbW5pcG90ZW50CiAuYWxpZ24JMTYKIE9QRU5TU0xfYXRvbWljX2FkZDoKLQltb3ZsCSglcmRpKSwlZWF4Ci0uTHNwaW46CWxlYXEJKCVyc2ksJXJheCksJXI4Ci1sb2NrOwljbXB4Y2hnbAklcjhkLCglcmRpKQorCW1vdmwJKCRhcmcxKSwlZWF4CisuTHNwaW46CWxlYXEJKCRhcmcyLCVyYXgpLCVyOAorCS5ieXRlCTB4ZjAJCSMgbG9jaworCWNtcHhjaGdsCSVyOGQsKCRhcmcxKQogCWpuZQkuTHNwaW4KIAltb3ZsCSVyOGQsJWVheAotCS5ieXRlCTB4NDgsMHg5OAorCS5ieXRlCTB4NDgsMHg5OAkjIGNsdHEvY2RxZQogCXJldAogLnNpemUJT1BFTlNTTF9hdG9taWNfYWRkLC4tT1BFTlNTTF9hdG9taWNfYWRkCiAKKy5nbG9ibAlPUEVOU1NMX3JkdHNjCisudHlwZQlPUEVOU1NMX3JkdHNjLFxAYWJpLW9tbmlwb3RlbnQKKy5hbGlnbgkxNgorT1BFTlNTTF9yZHRzYzoKKwlyZHRzYworCXNobAlcJDMyLCVyZHgKKwlvcgklcmR4LCVyYXgKKwlyZXQKKy5zaXplCU9QRU5TU0xfcmR0c2MsLi1PUEVOU1NMX3JkdHNjCisKKy5nbG9ibAlPUEVOU1NMX2lhMzJfY3B1aWQKKy50eXBlCU9QRU5TU0xfaWEzMl9jcHVpZCxcQGFiaS1vbW5pcG90ZW50CisuYWxpZ24JMTYKK09QRU5TU0xfaWEzMl9jcHVpZDoKKwltb3YJJXJieCwlcjgKKworCXhvcgklZWF4LCVlYXgKKwljcHVpZAorCW1vdgklZWF4LCVyMTFkCQkjIG1heCB2YWx1ZSBmb3Igc3RhbmRhcmQgcXVlcnkgbGV2ZWwKKworCXhvcgklZWF4LCVlYXgKKwljbXAJXCQweDc1NmU2NTQ3LCVlYngJIyAiR2VudSIKKwlzZXRuZQklYWwKKwltb3YJJWVheCwlcjlkCisJY21wCVwkMHg0OTY1NmU2OSwlZWR4CSMgImluZUkiCisJc2V0bmUJJWFsCisJb3IJJWVheCwlcjlkCisJY21wCVwkMHg2YzY1NzQ2ZSwlZWN4CSMgIm50ZWwiCisJc2V0bmUJJWFsCisJb3IJJWVheCwlcjlkCQkjIDAgaW5kaWNhdGVzIEludGVsIENQVQorCWp6CS5MaW50ZWwKKworCWNtcAlcJDB4Njg3NDc1NDEsJWVieAkjICJBdXRoIgorCXNldG5lCSVhbAorCW1vdgklZWF4LCVyMTBkCisJY21wCVwkMHg2OTc0NkU2NSwlZWR4CSMgImVudGkiCisJc2V0bmUJJWFsCisJb3IJJWVheCwlcjEwZAorCWNtcAlcJDB4NDQ0RDQxNjMsJWVjeAkjICJjQU1EIgorCXNldG5lCSVhbAorCW9yCSVlYXgsJXIxMGQJCSMgMCBpbmRpY2F0ZXMgQU1EIENQVQorCWpuegkuTGludGVsCisKKwkjIEFNRCBzcGVjaWZpYworCW1vdglcJDB4ODAwMDAwMDAsJWVheAorCWNwdWlkCisJY21wCVwkMHg4MDAwMDAwOCwlZWF4CisJamIJLkxpbnRlbAorCisJbW92CVwkMHg4MDAwMDAwOCwlZWF4CisJY3B1aWQKKwltb3Z6YgklY2wsJXIxMAkJIyBudW1iZXIgb2YgY29yZXMgLSAxCisJaW5jCSVyMTAJCQkjIG51bWJlciBvZiBjb3JlcworCisJbW92CVwkMSwlZWF4CisJY3B1aWQKKwlidAlcJDI4LCVlZHgJCSMgdGVzdCBoeXBlci10aHJlYWRpbmcgYml0CisJam5jCS5MZG9uZQorCXNocglcJDE2LCVlYngJCSMgbnVtYmVyIG9mIGxvZ2ljYWwgcHJvY2Vzc29ycworCWNtcAklcjEwYiwlYmwKKwlqYQkuTGRvbmUKKwlhbmQJXCQweGVmZmZmZmZmLCVlZHgJIyB+KDE8PDI4KQorCWptcAkuTGRvbmUKKworLkxpbnRlbDoKKwljbXAJXCQ0LCVyMTFkCisJbW92CVwkLTEsJXIxMGQKKwlqYgkuTG5vY2FjaGVpbmZvCisKKwltb3YJXCQ0LCVlYXgKKwltb3YJXCQwLCVlY3gJCSMgcXVlcnkgTDFECisJY3B1aWQKKwltb3YJJWVheCwlcjEwZAorCXNocglcJDE0LCVyMTBkCisJYW5kCVwkMHhmZmYsJXIxMGQJCSMgbnVtYmVyIG9mIGNvcmVzIC0xIHBlciBMMUQKKworLkxub2NhY2hlaW5mbzoKKwltb3YJXCQxLCVlYXgKKwljcHVpZAorCWNtcAlcJDAsJXI5ZAorCWpuZQkuTG5vdGludGVsCisJb3IJXCQweDAwMTAwMDAwLCVlZHgJIyB1c2UgcmVzZXJ2ZWQgMjB0aCBiaXQgdG8gZW5nYWdlIFJDNF9DSEFSCisJYW5kCVwkMTUsJWFoCisJY21wCVwkMTUsJWFoCQkjIGV4YW1pbmUgRmFtaWx5IElECisJamUJLkxub3RpbnRlbAorCW9yCVwkMHg0MDAwMDAwMCwlZWR4CSMgdXNlIHJlc2VydmVkIGJpdCB0byBza2lwIHVucm9sbGVkIGxvb3AKKy5Mbm90aW50ZWw6CisJYnQJXCQyOCwlZWR4CQkjIHRlc3QgaHlwZXItdGhyZWFkaW5nIGJpdAorCWpuYwkuTGRvbmUKKwlhbmQJXCQweGVmZmZmZmZmLCVlZHgJIyB+KDE8PDI4KQorCWNtcAlcJDAsJXIxMGQKKwlqZQkuTGRvbmUKKworCW9yCVwkMHgxMDAwMDAwMCwlZWR4CSMgMTw8MjgKKwlzaHIJXCQxNiwlZWJ4CisJY21wCVwkMSwlYmwJCQkjIHNlZSBpZiBjYWNoZSBpcyBzaGFyZWQKKwlqYQkuTGRvbmUKKwlhbmQJXCQweGVmZmZmZmZmLCVlZHgJIyB+KDE8PDI4KQorLkxkb25lOgorCXNobAlcJDMyLCVyY3gKKwltb3YJJWVkeCwlZWF4CisJbW92CSVyOCwlcmJ4CisJb3IJJXJjeCwlcmF4CisJcmV0Cisuc2l6ZQlPUEVOU1NMX2lhMzJfY3B1aWQsLi1PUEVOU1NMX2lhMzJfY3B1aWQKKworLmdsb2JsICBPUEVOU1NMX2NsZWFuc2UKKy50eXBlICAgT1BFTlNTTF9jbGVhbnNlLFxAYWJpLW9tbmlwb3RlbnQKKy5hbGlnbiAgMTYKK09QRU5TU0xfY2xlYW5zZToKKwl4b3IJJXJheCwlcmF4CisJY21wCVwkMTUsJGFyZzIKKwlqYWUJLkxvdAorCWNtcAlcJDAsJGFyZzIKKwlqZQkuTHJldAorLkxpdHRsZToKKwltb3YJJWFsLCgkYXJnMSkKKwlzdWIJXCQxLCRhcmcyCisJbGVhCTEoJGFyZzEpLCRhcmcxCisJam56CS5MaXR0bGUKKy5McmV0OglyZXQKKy5hbGlnbgkxNgorLkxvdDoKKwl0ZXN0CVwkNywkYXJnMQorCWp6CS5MYWxpZ25lZAorCW1vdgklYWwsKCRhcmcxKQorCWxlYQktMSgkYXJnMiksJGFyZzIKKwlsZWEJMSgkYXJnMSksJGFyZzEKKwlqbXAJLkxvdAorLkxhbGlnbmVkOgorCW1vdgklcmF4LCgkYXJnMSkKKwlsZWEJLTgoJGFyZzIpLCRhcmcyCisJdGVzdAlcJC04LCRhcmcyCisJbGVhCTgoJGFyZzEpLCRhcmcxCisJam56CS5MYWxpZ25lZAorCWNtcAlcJDAsJGFyZzIKKwlqbmUJLkxpdHRsZQorCXJldAorLnNpemUJT1BFTlNTTF9jbGVhbnNlLC4tT1BFTlNTTF9jbGVhbnNlCitfX18KKworcHJpbnQ8PF9fXyBpZiAoISR3aW42NCk7CiAuZ2xvYmwJT1BFTlNTTF93aXBlX2NwdQotLnR5cGUJT1BFTlNTTF93aXBlX2NwdSxcQGZ1bmN0aW9uCisudHlwZQlPUEVOU1NMX3dpcGVfY3B1LFxAYWJpLW9tbmlwb3RlbnQKIC5hbGlnbgkxNgogT1BFTlNTTF93aXBlX2NwdToKIAlweG9yCSV4bW0wLCV4bW0wCkBAIC05Myw2NyArMjA1LDI3IEBACiAJbGVhcQk4KCVyc3ApLCVyYXgKIAlyZXQKIC5zaXplCU9QRU5TU0xfd2lwZV9jcHUsLi1PUEVOU1NMX3dpcGVfY3B1Ci0KLS5zZWN0aW9uCS5pbml0Ci0JY2FsbAlPUEVOU1NMX2NwdWlkX3NldHVwCi0KK19fXworcHJpbnQ8PF9fXyBpZiAoJHdpbjY0KTsKKy5nbG9ibAlPUEVOU1NMX3dpcGVfY3B1CisudHlwZQlPUEVOU1NMX3dpcGVfY3B1LFxAYWJpLW9tbmlwb3RlbnQKKy5hbGlnbgkxNgorT1BFTlNTTF93aXBlX2NwdToKKwlweG9yCSV4bW0wLCV4bW0wCisJcHhvcgkleG1tMSwleG1tMQorCXB4b3IJJXhtbTIsJXhtbTIKKwlweG9yCSV4bW0zLCV4bW0zCisJcHhvcgkleG1tNCwleG1tNAorCXB4b3IJJXhtbTUsJXhtbTUKKwl4b3JxCSVyY3gsJXJjeAorCXhvcnEJJXJkeCwlcmR4CisJeG9ycQklcjgsJXI4CisJeG9ycQklcjksJXI5CisJeG9ycQklcjEwLCVyMTAKKwl4b3JxCSVyMTEsJXIxMQorCWxlYXEJOCglcnNwKSwlcmF4CisJcmV0Cisuc2l6ZQlPUEVOU1NMX3dpcGVfY3B1LC4tT1BFTlNTTF93aXBlX2NwdQogX19fCiAKLW9wZW4gU1RET1VULCJ8ICReWCBwZXJsYXNtL3g4Nl82NC14bGF0ZS5wbCAkb3V0cHV0IjsKLXByaW50PDxfX187Ci0udGV4dAotCi0uZ2xvYmwJT1BFTlNTTF9yZHRzYwotLnR5cGUJT1BFTlNTTF9yZHRzYyxcQGFiaS1vbW5pcG90ZW50Ci0uYWxpZ24JMTYKLU9QRU5TU0xfcmR0c2M6Ci0JcmR0c2MKLQlzaGwJXCQzMiwlcmR4Ci0Jb3IJJXJkeCwlcmF4Ci0JcmV0Ci0uc2l6ZQlPUEVOU1NMX3JkdHNjLC4tT1BFTlNTTF9yZHRzYwotCi0uZ2xvYmwJT1BFTlNTTF9pYTMyX2NwdWlkCi0udHlwZQlPUEVOU1NMX2lhMzJfY3B1aWQsXEBhYmktb21uaXBvdGVudAotLmFsaWduCTE2Ci1PUEVOU1NMX2lhMzJfY3B1aWQ6Ci0JbW92CSVyYngsJXI4Ci0KLQl4b3IJJWVheCwlZWF4Ci0JY3B1aWQKLQl4b3IJJWVheCwlZWF4Ci0JY21wCVwkMHg3NTZlNjU0NywlZWJ4CSMgIkdlbnUiCi0Jc2V0bmUJJWFsCi0JbW92CSVlYXgsJXI5ZAotCWNtcAlcJDB4NDk2NTZlNjksJWVkeAkjICJpbmVJIgotCXNldG5lCSVhbAotCW9yCSVlYXgsJXI5ZAotCWNtcAlcJDB4NmM2NTc0NmUsJWVjeAkjICJudGVsIgotCXNldG5lCSVhbAotCW9yCSVlYXgsJXI5ZAotCi0JbW92CVwkMSwlZWF4Ci0JY3B1aWQKLQljbXAJXCQwLCVyOWQKLQlqbmUJLkxub3RpbnRlbAotCW9yCVwkMHgwMDEwMDAwMCwlZWR4CSMgdXNlIHJlc2VydmVkIDIwdGggYml0IHRvIGVuZ2FnZSBSQzRfQ0hBUgotCWFuZAlcJDE1LCVhaAotCWNtcAlcJDE1LCVhaAkJIyBleGFtaW5lIEZhbWlseSBJRAotCWplCS5Mbm90aW50ZWwKLQlvcglcJDB4NDAwMDAwMDAsJWVkeAkjIHVzZSByZXNlcnZlZCBiaXQgdG8gc2tpcCB1bnJvbGxlZCBsb29wCi0uTG5vdGludGVsOgotCWJ0CVwkMjgsJWVkeAkJIyB0ZXN0IGh5cGVyLXRocmVhZGluZyBiaXQKLQlqbmMJLkxkb25lCi0Jc2hyCVwkMTYsJWVieAotCWNtcAlcJDEsJWJsCQkJIyBzZWUgaWYgY2FjaGUgaXMgc2hhcmVkCi0JamEJLkxkb25lCi0JYW5kCVwkMHhlZmZmZmZmZiwlZWR4CSMgfigxPDwyOCkKLS5MZG9uZToKLQlzaGwJXCQzMiwlcmN4Ci0JbW92CSVlZHgsJWVheAotCW1vdgklcjgsJXJieAotCW9yCSVyY3gsJXJheAotCXJldAotLnNpemUJT1BFTlNTTF9pYTMyX2NwdWlkLC4tT1BFTlNTTF9pYTMyX2NwdWlkCi1fX18KIGNsb3NlIFNURE9VVDsJIyBmbHVzaApkaWZmIC0tZ2l0IGEvY3J5cHRvL3g4NmNwdWlkLnBsIGIvY3J5cHRvL3g4NmNwdWlkLnBsCmluZGV4IDQ0MDhlZjIuLmE3NDY0YWYgMTAwNjQ0Ci0tLSBhL2NyeXB0by94ODZjcHVpZC5wbAorKysgYi9jcnlwdG8veDg2Y3B1aWQucGwKQEAgLTEsNiArMSw3IEBACiAjIS91c3IvYmluL2VudiBwZXJsCiAKLXB1c2goQElOQywicGVybGFzbSIpOworJDAgPX4gbS8oLipbXC9cXF0pW15cL1xcXSskLzsgJGRpcj0kMTsKK3B1c2goQElOQywgIiR7ZGlyfXBlcmxhc20iLCAicGVybGFzbSIpOwogcmVxdWlyZSAieDg2YXNtLnBsIjsKIAogJmFzbV9pbml0KCRBUkdWWzBdLCJ4ODZjcHVpZCIpOwpAQCAtMjIsMzggKzIzLDkwIEBACiAJJmpuYwkoJmxhYmVsKCJkb25lIikpOwogCSZ4b3IJKCJlYXgiLCJlYXgiKTsKIAkmY3B1aWQJKCk7CisJJm1vdgkoImVkaSIsImVheCIpOwkJIyBtYXggdmFsdWUgZm9yIHN0YW5kYXJkIHF1ZXJ5IGxldmVsCisKIAkmeG9yCSgiZWF4IiwiZWF4Iik7CiAJJmNtcAkoImVieCIsMHg3NTZlNjU0Nyk7CSMgIkdlbnUiCi0JJmRhdGFfYnl0ZSgweDBmLDB4OTUsMHhjMCk7CSMmc2V0bmUJKCZMQigiZWF4IikpOworCSZzZXRuZQkoJkxCKCJlYXgiKSk7CiAJJm1vdgkoImVicCIsImVheCIpOwogCSZjbXAJKCJlZHgiLDB4NDk2NTZlNjkpOwkjICJpbmVJIgotCSZkYXRhX2J5dGUoMHgwZiwweDk1LDB4YzApOwkjJnNldG5lCSgmTEIoImVheCIpKTsKKwkmc2V0bmUJKCZMQigiZWF4IikpOwogCSZvcgkoImVicCIsImVheCIpOwogCSZjbXAJKCJlY3giLDB4NmM2NTc0NmUpOwkjICJudGVsIgotCSZkYXRhX2J5dGUoMHgwZiwweDk1LDB4YzApOwkjJnNldG5lCSgmTEIoImVheCIpKTsKLQkmb3IJKCJlYnAiLCJlYXgiKTsKKwkmc2V0bmUJKCZMQigiZWF4IikpOworCSZvcgkoImVicCIsImVheCIpOwkJIyAwIGluZGljYXRlcyBJbnRlbCBDUFUKKwkmanoJKCZsYWJlbCgiaW50ZWwiKSk7CisKKwkmY21wCSgiZWJ4IiwweDY4NzQ3NTQxKTsJIyAiQXV0aCIKKwkmc2V0bmUJKCZMQigiZWF4IikpOworCSZtb3YJKCJlc2kiLCJlYXgiKTsKKwkmY21wCSgiZWR4IiwweDY5NzQ2RTY1KTsJIyAiZW50aSIKKwkmc2V0bmUJKCZMQigiZWF4IikpOworCSZvcgkoImVzaSIsImVheCIpOworCSZjbXAJKCJlY3giLDB4NDQ0RDQxNjMpOwkjICJjQU1EIgorCSZzZXRuZQkoJkxCKCJlYXgiKSk7CisJJm9yCSgiZXNpIiwiZWF4Iik7CQkjIDAgaW5kaWNhdGVzIEFNRCBDUFUKKwkmam56CSgmbGFiZWwoImludGVsIikpOworCisJIyBBTUQgc3BlY2lmaWMKKwkmbW92CSgiZWF4IiwweDgwMDAwMDAwKTsKKwkmY3B1aWQJKCk7CisJJmNtcAkoImVheCIsMHg4MDAwMDAwOCk7CisJJmpiCSgmbGFiZWwoImludGVsIikpOworCisJJm1vdgkoImVheCIsMHg4MDAwMDAwOCk7CisJJmNwdWlkCSgpOworCSZtb3Z6CSgiZXNpIiwmTEIoImVjeCIpKTsJIyBudW1iZXIgb2YgY29yZXMgLSAxCisJJmluYwkoImVzaSIpOwkJIyBudW1iZXIgb2YgY29yZXMKKworCSZtb3YJKCJlYXgiLDEpOworCSZjcHVpZAkoKTsKKwkmYnQJKCJlZHgiLDI4KTsKKwkmam5jCSgmbGFiZWwoImRvbmUiKSk7CisJJnNocgkoImVieCIsMTYpOworCSZhbmQJKCJlYngiLDB4ZmYpOworCSZjbXAJKCJlYngiLCJlc2kiKTsKKwkmamEJKCZsYWJlbCgiZG9uZSIpKTsKKwkmYW5kCSgiZWR4IiwweGVmZmZmZmZmKTsJIyBjbGVhciBoeXBlci10aHJlYWRpbmcgYml0CisJJmptcAkoJmxhYmVsKCJkb25lIikpOworCQorJnNldF9sYWJlbCgiaW50ZWwiKTsKKwkmY21wCSgiZWRpIiw0KTsKKwkmbW92CSgiZWRpIiwtMSk7CisJJmpiCSgmbGFiZWwoIm5vY2FjaGVpbmZvIikpOworCisJJm1vdgkoImVheCIsNCk7CisJJm1vdgkoImVjeCIsMCk7CQkjIHF1ZXJ5IEwxRAorCSZjcHVpZAkoKTsKKwkmbW92CSgiZWRpIiwiZWF4Iik7CisJJnNocgkoImVkaSIsMTQpOworCSZhbmQJKCJlZGkiLDB4ZmZmKTsJCSMgbnVtYmVyIG9mIGNvcmVzIC0xIHBlciBMMUQKKworJnNldF9sYWJlbCgibm9jYWNoZWluZm8iKTsKIAkmbW92CSgiZWF4IiwxKTsKIAkmY3B1aWQJKCk7CiAJJmNtcAkoImVicCIsMCk7CiAJJmpuZQkoJmxhYmVsKCJub3RQNCIpKTsKLQkmYW5kCSgiZWF4IiwxNTw8OCk7CQkjIGZhbWlsaXkgSUQKLQkmY21wCSgiZWF4IiwxNTw8OCk7CQkjIFA0PworCSZhbmQJKCZIQigiZWF4IiksMTUpOwkjIGZhbWlsaXkgSUQKKwkmY21wCSgmSEIoImVheCIpLDE1KTsJIyBQND8KIAkmam5lCSgmbGFiZWwoIm5vdFA0IikpOwogCSZvcgkoImVkeCIsMTw8MjApOwkJIyB1c2UgcmVzZXJ2ZWQgYml0IHRvIGVuZ2FnZSBSQzRfQ0hBUgogJnNldF9sYWJlbCgibm90UDQiKTsKIAkmYnQJKCJlZHgiLDI4KTsJCSMgdGVzdCBoeXBlci10aHJlYWRpbmcgYml0CiAJJmpuYwkoJmxhYmVsKCJkb25lIikpOworCSZhbmQJKCJlZHgiLDB4ZWZmZmZmZmYpOworCSZjbXAJKCJlZGkiLDApOworCSZqZQkoJmxhYmVsKCJkb25lIikpOworCisJJm9yCSgiZWR4IiwweDEwMDAwMDAwKTsKIAkmc2hyCSgiZWJ4IiwxNik7Ci0JJmFuZAkoImVieCIsMHhmZik7Ci0JJmNtcAkoImVieCIsMSk7CQkjIHNlZSBpZiBjYWNoZSBpcyBzaGFyZWQoKikKKwkmY21wCSgmTEIoImVieCIpLDEpOwogCSZqYQkoJmxhYmVsKCJkb25lIikpOwogCSZhbmQJKCJlZHgiLDB4ZWZmZmZmZmYpOwkjIGNsZWFyIGh5cGVyLXRocmVhZGluZyBiaXQgaWYgbm90CiAmc2V0X2xhYmVsKCJkb25lIik7CiAJJm1vdgkoImVheCIsImVkeCIpOwogCSZtb3YJKCJlZHgiLCJlY3giKTsKICZmdW5jdGlvbl9lbmQoIk9QRU5TU0xfaWEzMl9jcHVpZCIpOwotIyAoKikJb24gQ29yZTIgdGhpcyB2YWx1ZSBpcyBzZXQgdG8gMiBkZW5vdGluZyB0aGUgZmFjdCB0aGF0IEwyCi0jCWNhY2hlIGlzIHNoYXJlZCBiZXR3ZWVuIGNvcmVzLgogCiAmZXh0ZXJuYWxfbGFiZWwoIk9QRU5TU0xfaWEzMmNhcF9QIik7CiAKQEAgLTIyMCw2ICsyNzMsNDAgQEAKIAl9CiAmZnVuY3Rpb25fZW5kX0IoIk9QRU5TU0xfaW5kaXJlY3RfY2FsbCIpOwogCismZnVuY3Rpb25fYmVnaW5fQigiT1BFTlNTTF9jbGVhbnNlIik7CisJJm1vdgkoImVkeCIsJndwYXJhbSgwKSk7CisJJm1vdgkoImVjeCIsJndwYXJhbSgxKSk7CisJJnhvcgkoImVheCIsImVheCIpOworCSZjbXAJKCJlY3giLDcpOworCSZqYWUJKCZsYWJlbCgibG90IikpOworCSZjbXAJKCJlY3giLDApOworCSZqZQkoJmxhYmVsKCJyZXQiKSk7Cismc2V0X2xhYmVsKCJsaXR0bGUiKTsKKwkmbW92CSgmQlAoMCwiZWR4IiksImFsIik7CisJJnN1YgkoImVjeCIsMSk7CisJJmxlYQkoImVkeCIsJkRXUCgxLCJlZHgiKSk7CisJJmpuegkoJmxhYmVsKCJsaXR0bGUiKSk7Cismc2V0X2xhYmVsKCJyZXQiKTsKKwkmcmV0CSgpOworCismc2V0X2xhYmVsKCJsb3QiLDE2KTsKKwkmdGVzdAkoImVkeCIsMyk7CisJJmp6CSgmbGFiZWwoImFsaWduZWQiKSk7CisJJm1vdgkoJkJQKDAsImVkeCIpLCJhbCIpOworCSZsZWEJKCJlY3giLCZEV1AoLTEsImVjeCIpKTsKKwkmbGVhCSgiZWR4IiwmRFdQKDEsImVkeCIpKTsKKwkmam1wCSgmbGFiZWwoImxvdCIpKTsKKyZzZXRfbGFiZWwoImFsaWduZWQiKTsKKwkmbW92CSgmRFdQKDAsImVkeCIpLCJlYXgiKTsKKwkmbGVhCSgiZWN4IiwmRFdQKC00LCJlY3giKSk7CisJJnRlc3QJKCJlY3giLC00KTsKKwkmbGVhCSgiZWR4IiwmRFdQKDQsImVkeCIpKTsKKwkmam56CSgmbGFiZWwoImFsaWduZWQiKSk7CisJJmNtcAkoImVjeCIsMCk7CisJJmpuZQkoJmxhYmVsKCJsaXR0bGUiKSk7CisJJnJldAkoKTsKKyZmdW5jdGlvbl9lbmRfQigiT1BFTlNTTF9jbGVhbnNlIik7CisKICZpbml0c2VnKCJPUEVOU1NMX2NwdWlkX3NldHVwIik7CiAKICZhc21fZmluaXNoKCk7CmRpZmYgLS1naXQgYS9lX29zLmggYi9lX29zLmgKaW5kZXggOWM1YzZmZC4uMGY0Yjc5OSAxMDA2NDQKLS0tIGEvZV9vcy5oCisrKyBiL2Vfb3MuaApAQCAtMTEyLDcgKzExMiw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICBUaGUgTWljcm9zb2Z0IHNlY3Rpb24KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIFRoZSBmb2xsb3dpbmcgaXMgdXNlZCBiZWNhdWUgb2YgdGhlIHNtYWxsIHN0YWNrIGluIHNvbWUKKy8qIFRoZSBmb2xsb3dpbmcgaXMgdXNlZCBiZWNhdXNlIG9mIHRoZSBzbWFsbCBzdGFjayBpbiBzb21lCiAgKiBNaWNyb3NvZnQgb3BlcmF0aW5nIHN5c3RlbXMgKi8KICNpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX01TRE9TKSAmJiAhZGVmaW5lZChPUEVOU1NMX1NZU05BTUVfV0lOMzIpCiAjICBkZWZpbmUgTVNfU1RBVElDCXN0YXRpYwpAQCAtMTIzLDkgKzEyMyw2IEBACiAjaWYgZGVmaW5lZChPUEVOU1NMX1NZU19XSU4zMikgJiYgIWRlZmluZWQoV0lOMzIpCiAjICBkZWZpbmUgV0lOMzIKICNlbmRpZgotI2lmIGRlZmluZWQoT1BFTlNTTF9TWVNfV0lOMTYpICYmICFkZWZpbmVkKFdJTjE2KQotIyAgZGVmaW5lIFdJTjE2Ci0jZW5kaWYKICNpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX1dJTkRPV1MpICYmICFkZWZpbmVkKFdJTkRPV1MpCiAjICBkZWZpbmUgV0lORE9XUwogI2VuZGlmCkBAIC0xODEsNiArMTc4LDEzIEBACiAjZGVmaW5lIGNsb3Nlc29ja2V0KHMpCQkgICAgY2xvc2UocykKICNkZWZpbmUgcmVhZHNvY2tldChzLGIsbikJICAgIHJlYWQoKHMpLChiKSwobikpCiAjZGVmaW5lIHdyaXRlc29ja2V0KHMsYixuKQkgICAgd3JpdGUoKHMpLChjaGFyICopKGIpLChuKSkKKyNlbGlmIGRlZmluZWQoT1BFTlNTTF9TWVNfQkVPU19SNSkKKyNkZWZpbmUgZ2V0X2xhc3Rfc29ja2V0X2Vycm9yKCkgZXJybm8KKyNkZWZpbmUgY2xlYXJfc29ja2V0X2Vycm9yKCkgICAgZXJybm89MAorI2RlZmluZSBGSU9OQklPIFNPX05PTkJMT0NLCisjZGVmaW5lIGlvY3Rsc29ja2V0KGEsYixjKQkJICBzZXRzb2Nrb3B0KChhKSxTT0xfU09DS0VULChiKSwoYyksc2l6ZW9mKCooYykpKQorI2RlZmluZSByZWFkc29ja2V0KHMsYixuKSAgICAgICByZWN2KChzKSwoYiksKG4pLDApCisjZGVmaW5lIHdyaXRlc29ja2V0KHMsYixuKSAgICAgIHNlbmQoKHMpLChiKSwobiksMCkKICNlbGlmIGRlZmluZWQoT1BFTlNTTF9TWVNfTkVUV0FSRSkKICNpZiBkZWZpbmVkKE5FVFdBUkVfQlNEU09DSykKICNkZWZpbmUgZ2V0X2xhc3Rfc29ja2V0X2Vycm9yKCkgZXJybm8KQEAgLTIwOSw3ICsyMTMsNyBAQAogI2RlZmluZSB3cml0ZXNvY2tldChzLGIsbikJd3JpdGUoKHMpLChiKSwobikpCiAjZW5kaWYKIAotI2lmZGVmIFdJTjE2CisjaWZkZWYgV0lOMTYgLyogbmV2ZXIgdGhlIGNhc2UgKi8KICMgIGRlZmluZSBNU19DQUxMQkFDSwlfZmFyIF9sb2FkZHMKICMgIGRlZmluZSBNU19GQVIJX2ZhcgogI2Vsc2UKQEAgLTI1NSwxOSArMjU5LDMxIEBACiAgICAgICAgLyoKIAkqIERlZmluaW5nIF9XSU4zMl9XSU5OVCBoZXJlIGluIGVfb3MuaCBpbXBsaWVzIGNlcnRhaW4gImRpc2NpcGxpbmUuIgogCSogTW9zdCBub3RhYmx5IHdlIG91Z2h0IHRvIGNoZWNrIGZvciBhdmFpbGFiaWxpdHkgb2YgZWFjaCBzcGVjaWZpYwotCSogcm91dGluZSB3aXRoIEdldFByb2NBZGRyZXNzKCkgYW5kL29yIHF1YXJkIE5ULXNwZWNpZmljIGNhbGxzIHdpdGgKKwkqIHJvdXRpbmUgd2l0aCBHZXRQcm9jQWRkcmVzcygpIGFuZC9vciBndWFyZCBOVC1zcGVjaWZpYyBjYWxscyB3aXRoCiAJKiBHZXRWZXJzaW9uKCkgPCAweDgwMDAwMDAwLiBPbmUgY2FuIGFyZ3VlIHRoYXQgaW4gbGF0dGVyICJvciIgY2FzZQogCSogd2Ugb3VnaHQgdG8gL0RFTEFZTE9BRCBzb21lIC5ETExzIGluIG9yZGVyIHRvIHByb3RlY3Qgb3Vyc2VsdmVzCiAJKiBhZ2FpbnN0IHJ1bi10aW1lIGxpbmsgZXJyb3JzLiBUaGlzIGRvZXNuJ3Qgc2VlbSB0byBiZSBuZWNlc3NhcnksCiAJKiBiZWNhdXNlIGl0IHR1cm5lZCBvdXQgdGhhdCBhbHJlYWR5IFdpbmRvd3MgOTUsIGZpcnN0IG5vbi1OVCBXaW4zMgogCSogaW1wbGVtZW50YXRpb24sIGlzIGVxdWlwcGVkIHdpdGggYXQgbGVhc3QgTlQgMy41MSBzdHVicywgZHVtbXkKIAkqIHJvdXRpbmVzIHdpdGggc2FtZSBuYW1lLCBidXQgd2hpY2ggZG8gbm90aGluZy4gTWVhbmluZyB0aGF0IGl0J3MKLQkqIGFwcGFyZW50bHkgYXBwcm9wcmlhdGUgdG8gZ3VhcmQgZ2VuZXJpYyBOVCBjYWxscyB3aXRoIEdldFZlcnNpb24KLQkqIGFsb25lLCB3aGlsZSBOVCA0LjAgYW5kIGFib3ZlIGNhbGxzIG91Z2h0IHRvIGJlIGFkZGl0aW9uYWxseQotCSogY2hlY2tlZCB1cG9uIHdpdGggR2V0UHJvY0FkZHJlc3MuCisJKiBhcHBhcmVudGx5IHN1ZmZpY2llbnQgdG8gZ3VhcmQgInZhbmlsbGEiIE5UIGNhbGxzIHdpdGggR2V0VmVyc2lvbgorCSogYWxvbmUsIHdoaWxlIE5UIDQuMCBhbmQgYWJvdmUgaW50ZXJmYWNlcyBvdWdodCB0byBiZSBsaW5rZWQgd2l0aAorCSogR2V0UHJvY0FkZHJlc3MgYXQgcnVuLXRpbWUuCiAJKi8KICMgICAgICBkZWZpbmUgX1dJTjMyX1dJTk5UIDB4MDQwMAogIyAgICBlbmRpZgorIyAgICBpZiAhZGVmaW5lZChPUEVOU1NMX05PX1NPQ0spICYmIGRlZmluZWQoX1dJTjMyX1dJTk5UKQorICAgICAgIC8qCisgICAgICAgICogSnVzdCBsaWtlIGRlZmluaW5nIF9XSU4zMl9XSU5OVCBpbmNsdWRpbmcgd2luc29jazIuaCBpbXBsaWVzCisgICAgICAgICogY2VydGFpbiAiZGlzY2lwbGluZSIgZm9yIG1haW50YWluaW5nIFticm9hZF0gYmluYXJ5IGNvbXBhdGliaWxpdHkuCisgICAgICAgICogQXMgbG9uZyBhcyBzdHJ1Y3R1cmVzIGFyZSBpbnZhcmlhbnQgYW1vbmcgV2luc29jayB2ZXJzaW9ucywKKyAgICAgICAgKiBpdCdzIHN1ZmZpY2llbnQgdG8gY2hlY2sgZm9yIHNwZWNpZmljIFdpbnNvY2syIEFQSSBhdmFpbGFiaWxpdHkKKyAgICAgICAgKiBhdCBydW4tdGltZSBbRFNPX2dsb2JhbF9sb29rdXAgaXMgcmVjb21tZW5kZWRdLi4uCisgICAgICAgICovCisjICAgICAgaW5jbHVkZSA8d2luc29jazIuaD4KKyMgICAgICBpbmNsdWRlIDx3czJ0Y3BpcC5oPgorICAgICAgIC8qIHllcywgdGhleSBoYXZlIHRvIGJlICNpbmNsdWRlZCBwcmlvciB0byA8d2luZG93cy5oPiAqLworIyAgICBlbmRpZgogIyAgICBpbmNsdWRlIDx3aW5kb3dzLmg+CiAjICAgIGluY2x1ZGUgPHN0ZGlvLmg+CiAjICAgIGluY2x1ZGUgPHN0ZGRlZi5oPgpAQCAtMzA4LDggKzMyNCw4IEBACiAgICAgICAgICAvKiBwcmUtMTMwMCBoYXMgX19wX19pb2IoKSwgYnV0IGl0J3MgYXZhaWxhYmxlIG9ubHkgaW4gbXN2Y3J0LmxpYiwKICAgICAgICAgICAqIG9yIGluIG90aGVyIHdvcmRzIHdpdGggL01ELiBEZWNsYXJpbmcgaW1wbGljaXQgaW1wb3J0LCBpLmUuCiAgICAgICAgICAgKiB3aXRoIF9pbXBfIHByZWZpeCwgd29ya3MgY29ycmVjdGx5IHdpdGggYWxsIGNvbXBpbGVyIG9wdGlvbnMsCi0gICAgICAgICAgKiBidXQgd2l0aG91dCAvTUQgcmVzdWx0cyBpbiBMSU5LIHdhcm5pbmcgTE5LNDA0OToKLSAgICAgICAgICAqICdsb2NhbGx5IGRlZmluZWQgc3ltYm9sICJfX2lvYiIgaW1wb3J0ZWQnLgorCSAgKiBidXQgd2l0aG91dCAvTUQgcmVzdWx0cyBpbiBMSU5LIHdhcm5pbmcgTE5LNDA0OToKKwkgICogJ2xvY2FsbHkgZGVmaW5lZCBzeW1ib2wgIl9faW9iIiBpbXBvcnRlZCcuCiAgICAgICAgICAgKi8KICAgICAgICAgIGV4dGVybiBGSUxFICpfaW1wX19faW9iOwogIyAgICAgICAgZGVmaW5lIHN0ZGluICAoJl9pbXBfX19pb2JbMF0pCkBAIC0zMjIsNyArMzM4LDcgQEAKICMgIGluY2x1ZGUgPGZjbnRsLmg+CiAKICMgIGlmZGVmIE9QRU5TU0xfU1lTX1dJTkNFCi0jICAgIGluY2x1ZGUgPHdpbnNvY2tfZXh0cmFzLmg+CisjICAgIGRlZmluZSBPUEVOU1NMX05PX1BPU0lYX0lPCiAjICBlbmRpZgogCiAjICBkZWZpbmUgc3NpemVfdCBsb25nCkBAIC0zMzUsMTIgKzM1MSw3IEBACiAjICAgIGRlZmluZSBfa2JoaXQga2JoaXQKICMgIGVuZGlmCiAKLSMgIGlmIGRlZmluZWQoV0lOMTYpICYmIGRlZmluZWQoU1NMRUFZKSAmJiBkZWZpbmVkKF9XSU5FWElUTk9QRVJTSVNUKQotIyAgICBkZWZpbmUgRVhJVChuKSBfd3NldGV4aXQoX1dJTkVYSVROT1BFUlNJU1QpCi0jICAgIGRlZmluZSBPUEVOU1NMX0VYSVQobikgZG8geyBpZiAobiA9PSAwKSBFWElUKG4pOyByZXR1cm4obik7IH0gd2hpbGUoMCkKLSMgIGVsc2UKLSMgICAgZGVmaW5lIEVYSVQobikgZXhpdChuKQotIyAgZW5kaWYKKyMgIGRlZmluZSBFWElUKG4pIGV4aXQobikKICMgIGRlZmluZSBMSVNUX1NFUEFSQVRPUl9DSEFSICc7JwogIyAgaWZuZGVmIFhfT0sKICMgICAgZGVmaW5lIFhfT0sJMApAQCAtMzYxLDcgKzM3Miw3IEBACiAjICAgIGRlZmluZSBERUZBVUxUX0hPTUUgICJDOiIKICMgIGVuZGlmCiAKLSNlbHNlIC8qIFRoZSBub24tbWljcm9zb2Z0IHdvcmxkIHdvcmxkICovCisjZWxzZSAvKiBUaGUgbm9uLW1pY3Jvc29mdCB3b3JsZCAqLwogCiAjICBpZmRlZiBPUEVOU1NMX1NZU19WTVMKICMgICAgZGVmaW5lIFZNUyAxCkBAIC00MTQsNyArNDI1LDYgQEAKICAgICAgICBleHRlcm4gaW50IEdldFRocmVhZElEKHZvaWQpOwogLyogIyAgICAgIGluY2x1ZGUgPGNvbmlvLmg+ICovCiAgICAgICAgZXh0ZXJuIGludCBrYmhpdCh2b2lkKTsKLSAgICAgICBleHRlcm4gdm9pZCBkZWxheSh1bnNpZ25lZCBtaWxsaXNlY29uZHMpOwogIyAgICBlbHNlCiAjICAgICAgaW5jbHVkZSA8c2NyZWVuLmg+CiAjICAgIGVuZGlmCkBAIC00NTQsNiArNDY0LDEwIEBACiAjICAgICAgZGVmaW5lIHNldHZidWYoYSwgYiwgYywgZCkgc2V0YnVmZmVyKChhKSwgKGIpLCAoZCkpCiAgICAgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGNsb2NrX3Q7CiAjICAgIGVuZGlmCisjICAgIGlmZGVmIE9QRU5TU0xfU1lTX1dJTjMyX0NZR1dJTgorIyAgICAgIGluY2x1ZGUgPGlvLmg+CisjICAgICAgaW5jbHVkZSA8ZmNudGwuaD4KKyMgICAgZW5kaWYKIAogIyAgICBkZWZpbmUgT1BFTlNTTF9DT05GCSJvcGVuc3NsLmNuZiIKICMgICAgZGVmaW5lIFNTTEVBWV9DT05GCQlPUEVOU1NMX0NPTkYKQEAgLTQ4MCw4ICs0OTQsMTkgQEAKICMgICAgICBkZWZpbmUgU0hVVERPV04oZmQpCQljbG9zZShmZCkKICMgICAgICBkZWZpbmUgU0hVVERPV04yKGZkKQkJY2xvc2UoZmQpCiAjICAgIGVsaWYgIWRlZmluZWQoX19ESkdQUF9fKQotIyAgICAgIGluY2x1ZGUgPHdpbnNvY2suaD4KLWV4dGVybiBISU5TVEFOQ0UgX2hJbnN0YW5jZTsKKyMgICAgICBpZiBkZWZpbmVkKF9XSU4zMl9XQ0UpICYmIF9XSU4zMl9XQ0U8NDEwCisjICAgICAgICBkZWZpbmUgZ2V0c2VydmJ5bmFtZSBfbWFza2VkX2RlY2xhcmF0aW9uX2dldHNlcnZieW5hbWUKKyMgICAgICBlbmRpZgorIyAgICAgIGlmICFkZWZpbmVkKElQUFJPVE9fSVApCisgICAgICAgICAvKiB3aW5zb2NrWzJdLmggd2FzIGluY2x1ZGVkIGFscmVhZHk/ICovCisjICAgICAgICBpbmNsdWRlIDx3aW5zb2NrLmg+CisjICAgICAgZW5kaWYKKyMgICAgICBpZmRlZiBnZXRzZXJ2YnluYW1lCisjICAgICAgICB1bmRlZiBnZXRzZXJ2YnluYW1lCisgICAgICAgICAvKiB0aGlzIGlzIHVzZWQgdG8gYmUgd2NlY29tcGF0L2luY2x1ZGUvd2luc29ja19leHRyYXMuaCAqLworICAgICAgICAgc3RydWN0IHNlcnZlbnQqIFBBU0NBTCBnZXRzZXJ2YnluYW1lKGNvbnN0IGNoYXIqLGNvbnN0IGNoYXIqKTsKKyMgICAgICBlbmRpZgorCiAjICAgICAgaWZkZWYgX1dJTjY0CiAvKgogICogRXZlbiB0aG91Z2ggc2l6ZW9mKFNPQ0tFVCkgaXMgOCwgaXQncyBzYWZlIHRvIGNhc3QgaXQgdG8gaW50LCBiZWNhdXNlCkBAIC01NTMsOCArNTc4LDEwIEBACiAjICAgICAgICBpbmNsdWRlIDxzeXMvZmlsaW8uaD4gLyogQWRkZWQgZm9yIEZJT05CSU8gdW5kZXIgdW5peHdhcmUgKi8KICMgICAgICBlbmRpZgogIyAgICAgIGluY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyMgICAgICBpZiAhZGVmaW5lZChPUEVOU1NMX1NZU19CRU9TX1I1KQogIyAgICAgIGluY2x1ZGUgPGFycGEvaW5ldC5oPgogIyAgICBlbmRpZgorIyAgICBlbmRpZgogCiAjICAgIGlmIGRlZmluZWQoTmVYVCkgfHwgZGVmaW5lZChfTkVYVF9TT1VSQ0UpCiAjICAgICAgaW5jbHVkZSA8c3lzL2ZjbnRsLmg+CkBAIC01OTcsNiArNjI0LDE4IEBACiAjICAgIGRlZmluZSBJTlZBTElEX1NPQ0tFVAkoLTEpCiAjICAgIGVuZGlmIC8qIElOVkFMSURfU09DS0VUICovCiAjICBlbmRpZgorCisvKiBTb21lIElQdjYgaW1wbGVtZW50YXRpb25zIGFyZSBicm9rZW4sIGRpc2FibGUgdGhlbSBpbiBrbm93biBiYWQKKyAqIHZlcnNpb25zLgorICovCisjICBpZiAhZGVmaW5lZChPUEVOU1NMX1VTRV9JUFY2KQorIyAgICBpZiBkZWZpbmVkKEFGX0lORVQ2KSAmJiAhZGVmaW5lZChPUEVOU1NMX1NZU19CRU9TX0JPTkUpICYmICFkZWZpbmVkKE5FVFdBUkVfQ0xJQikKKyMgICAgICBkZWZpbmUgT1BFTlNTTF9VU0VfSVBWNiAxCisjICAgIGVsc2UKKyMgICAgICBkZWZpbmUgT1BFTlNTTF9VU0VfSVBWNiAwCisjICAgIGVuZGlmCisjICBlbmRpZgorCiAjZW5kaWYKIAogI2lmIGRlZmluZWQoX191bHRyaXgpCkBAIC02MzAsMTggKzY2OSw2IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotLyogZG8gd2UgbmVlZCB0byBkbyB0aGlzIGZvciBnZXRlbnYuCi0gKiBKdXN0IGRlZmluZSBnZXRlbnYgZm9yIHVzZSB1bmRlciB3aW5kb3dzICovCi0KLSNpZmRlZiBXSU4xNgotLyogSG93IHRvIGRvIHRoaXMgbmVlZHMgdG8gYmUgdGhvdWdodCBvdXQgYSBiaXQgbW9yZS4uLi4gKi8KLS8qY2hhciAqR0VURU5WKGNoYXIgKik7Ci0jZGVmaW5lIEdldGVudglHRVRFTlYqLwotI2RlZmluZSBHZXRlbnYJZ2V0ZW52Ci0jZWxzZQotI2RlZmluZSBHZXRlbnYgZ2V0ZW52Ci0jZW5kaWYKLQogI2RlZmluZSBER19HQ0NfQlVHCS8qIGdjYyA8IDIuNi4zIG9uIERHVVggKi8KIAogI2lmZGVmIHNnaQpAQCAtNzAzLDYgKzczMCwxNSBAQAogI2VuZGlmCiAvKiBlbmQgdnh3b3JrcyAqLwogCisvKiBiZW9zICovCisjaWYgZGVmaW5lZChPUEVOU1NMX1NZU19CRU9TX1I1KQorI2RlZmluZSBTT19FUlJPUiAwCisjZGVmaW5lIE5PX1NZU19VTgorI2RlZmluZSBJUFBST1RPX0lQIDAKKyNpbmNsdWRlIDxPUy5oPgorI2VuZGlmCisKKwogI2lmZGVmICBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9lX29zMi5oIGIvZV9vczIuaAppbmRleCA5ZGEwYjY1Li40Yzc4NWM2IDEwMDY0NAotLS0gYS9lX29zMi5oCisrKyBiL2Vfb3MyLmgKQEAgLTIwMiw2ICsyMDIsMTcgQEAKICMgZGVmaW5lIE9QRU5TU0xfU1lTX1ZYV09SS1MKICNlbmRpZgogCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQmVPUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjaWYgZGVmaW5lZChfX0JFT1NfXykKKyMgZGVmaW5lIE9QRU5TU0xfU1lTX0JFT1MKKyMgaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorIyBpZiBkZWZpbmVkKEJPTkVfVkVSU0lPTikKKyMgIGRlZmluZSBPUEVOU1NMX1NZU19CRU9TX0JPTkUKKyMgZWxzZQorIyAgZGVmaW5lIE9QRU5TU0xfU1lTX0JFT1NfUjUKKyMgZW5kaWYKKyNlbmRpZgorCiAvKioKICAqIFRoYXQncyBpdCBmb3IgT1Mtc3BlY2lmaWMgc3R1ZmYKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTI1MSwyNCArMjYyLDIzIEBACiAjZGVmaW5lIE9QRU5TU0xfRVhURVJOIE9QRU5TU0xfSU1QT1JUCiAKIC8qIE1hY3JvcyB0byBhbGxvdyBnbG9iYWwgdmFyaWFibGVzIHRvIGJlIHJlYWNoZWQgdGhyb3VnaCBmdW5jdGlvbiBjYWxscyB3aGVuCi0gICByZXF1aXJlZCAoaWYgYSBzaGFyZWQgbGlicmFyeSB2ZXJzaW9uIHJlcXV2cmVzIGl0LCBmb3IgZXhhbXBsZS4KKyAgIHJlcXVpcmVkIChpZiBhIHNoYXJlZCBsaWJyYXJ5IHZlcnNpb24gcmVxdWlyZXMgaXQsIGZvciBleGFtcGxlLgogICAgVGhlIHdheSBpdCdzIGRvbmUgYWxsb3dzIGRlZmluaXRpb25zIGxpa2UgdGhpczoKIAogCS8vIGluIGZvb2Jhci5jCi0JT1BFTlNTTF9JTVBMRU1FTlRfR0xPQkFMKGludCxmb29iYXIpID0gMDsKKwlPUEVOU1NMX0lNUExFTUVOVF9HTE9CQUwoaW50LGZvb2JhciwwKQogCS8vIGluIGZvb2Jhci5oCiAJT1BFTlNTTF9ERUNMQVJFX0dMT0JBTChpbnQsZm9vYmFyKTsKIAkjZGVmaW5lIGZvb2JhciBPUEVOU1NMX0dMT0JBTF9SRUYoZm9vYmFyKQogKi8KICNpZmRlZiBPUEVOU1NMX0VYUE9SVF9WQVJfQVNfRlVOQ1RJT04KLSMgZGVmaW5lIE9QRU5TU0xfSU1QTEVNRU5UX0dMT0JBTCh0eXBlLG5hbWUpCQkJICAgICBcCi0JZXh0ZXJuIHR5cGUgX2hpZGVfIyNuYW1lOwkJCQkgICAgIFwKLQl0eXBlICpfc2hhZG93XyMjbmFtZSh2b2lkKSB7IHJldHVybiAmX2hpZGVfIyNuYW1lOyB9CSAgICAgXAotCXN0YXRpYyB0eXBlIF9oaWRlXyMjbmFtZQorIyBkZWZpbmUgT1BFTlNTTF9JTVBMRU1FTlRfR0xPQkFMKHR5cGUsbmFtZSx2YWx1ZSkJCQlcCisJdHlwZSAqX3NoYWRvd18jI25hbWUodm9pZCkJCQkJCVwKKwl7IHN0YXRpYyB0eXBlIF9oaWRlXyMjbmFtZT12YWx1ZTsgcmV0dXJuICZfaGlkZV8jI25hbWU7IH0KICMgZGVmaW5lIE9QRU5TU0xfREVDTEFSRV9HTE9CQUwodHlwZSxuYW1lKSB0eXBlICpfc2hhZG93XyMjbmFtZSh2b2lkKQogIyBkZWZpbmUgT1BFTlNTTF9HTE9CQUxfUkVGKG5hbWUpICgqKF9zaGFkb3dfIyNuYW1lKCkpKQogI2Vsc2UKLSMgZGVmaW5lIE9QRU5TU0xfSU1QTEVNRU5UX0dMT0JBTCh0eXBlLG5hbWUpIE9QRU5TU0xfR0xPQkFMIHR5cGUgX3NoYWRvd18jI25hbWUKKyMgZGVmaW5lIE9QRU5TU0xfSU1QTEVNRU5UX0dMT0JBTCh0eXBlLG5hbWUsdmFsdWUpIE9QRU5TU0xfR0xPQkFMIHR5cGUgX3NoYWRvd18jI25hbWU9dmFsdWU7CiAjIGRlZmluZSBPUEVOU1NMX0RFQ0xBUkVfR0xPQkFMKHR5cGUsbmFtZSkgT1BFTlNTTF9FWFBPUlQgdHlwZSBfc2hhZG93XyMjbmFtZQogIyBkZWZpbmUgT1BFTlNTTF9HTE9CQUxfUkVGKG5hbWUpIF9zaGFkb3dfIyNuYW1lCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ltcG9ydF9vcGVuc3NsLnNoIGIvaW1wb3J0X29wZW5zc2wuc2gKaW5kZXggMTVlZmNlMy4uNWRjYjFjMCAxMDA3NTUKLS0tIGEvaW1wb3J0X29wZW5zc2wuc2gKKysrIGIvaW1wb3J0X29wZW5zc2wuc2gKQEAgLTE0NCw2ICsxNDQsMTMgQEAKICAgY3AgLi4vcGF0Y2hlcy9jcnlwdG9fQW5kcm9pZC5tayBjcnlwdG8vQW5kcm9pZC5tawogICBjcCAuLi9wYXRjaGVzL3NzbF9BbmRyb2lkLm1rIHNzbC9BbmRyb2lkLm1rCiAKKyAgIyBHZW5lcmF0ZSBhc20KKyAgcGVybCBjcnlwdG8vYWVzL2FzbS9hZXMtYXJtdjQucGwgICAgICAgICA+IGNyeXB0by9hZXMvYXNtL2Flcy1hcm12NC5zCisgIHBlcmwgY3J5cHRvL2JuL2FzbS9hcm12NC1tb250LnBsICAgICAgICAgPiBjcnlwdG8vYm4vYXNtL2FybXY0LW1vbnQucworICBwZXJsIGNyeXB0by9zaGEvYXNtL3NoYTEtYXJtdjQtbGFyZ2UucGwgID4gY3J5cHRvL3NoYS9hc20vc2hhMS1hcm12NC1sYXJnZS5zCisgIHBlcmwgY3J5cHRvL3NoYS9hc20vc2hhMjU2LWFybXY0LnBsICAgICAgPiBjcnlwdG8vc2hhL2FzbS9zaGEyNTYtYXJtdjQucworICBwZXJsIGNyeXB0by9zaGEvYXNtL3NoYTUxMi1hcm12NC5wbCAgICAgID4gY3J5cHRvL3NoYS9hc20vc2hhNTEyLWFybXY0LnMKKwogICAjIFNldHVwIGFuZHJvaWQudGVzdHNzbCBkaXJlY3RvcnkKICAgbWtkaXIgYW5kcm9pZC50ZXN0c3NsCiAgIGNhdCB0ZXN0L3Rlc3Rzc2wgfCBcCkBAIC0xNjQsNiArMTcxLDcgQEAKICAgcm0gLXJmICRVTk5FRURFRF9TT1VSQ0VTCiAKICAgY2QgLi4KKyAgcm0gLXJmIGluY2x1ZGUvCiAgIGNwIC1hZiBvcGVuc3NsLSRPUEVOU1NMX1ZFUlNJT04vaW5jbHVkZSAuCiAgIHJtIC1yZiBhcHBzLwogICBtdiBvcGVuc3NsLSRPUEVOU1NMX1ZFUlNJT04vYXBwcyAuCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW5zc2wvYWVzLmggYi9pbmNsdWRlL29wZW5zc2wvYWVzLmgKaW5kZXggNDUwZjJiNC4uZDJjOTk3MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9vcGVuc3NsL2Flcy5oCisrKyBiL2luY2x1ZGUvb3BlbnNzbC9hZXMuaApAQCAtNTgsNiArNTgsOCBAQAogI2Vycm9yIEFFUyBpcyBkaXNhYmxlZC4KICNlbmRpZgogCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKICNkZWZpbmUgQUVTX0VOQ1JZUFQJMQogI2RlZmluZSBBRVNfREVDUllQVAkwCiAKQEAgLTY2LDEwICs2OCw2IEBACiAjZGVmaW5lIEFFU19NQVhOUiAxNAogI2RlZmluZSBBRVNfQkxPQ0tfU0laRSAxNgogCi0jaWZkZWYgT1BFTlNTTF9GSVBTCi0jZGVmaW5lIEZJUFNfQUVTX1NJWkVfVAlpbnQKLSNlbmRpZgotCiAjaWZkZWYgIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKICNlbmRpZgpAQCAtMTAwLDM3ICs5OCwzMiBAQAogdm9pZCBBRVNfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKIAljb25zdCBBRVNfS0VZICprZXksIGNvbnN0IGludCBlbmMpOwogdm9pZCBBRVNfY2JjX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKLQljb25zdCB1bnNpZ25lZCBsb25nIGxlbmd0aCwgY29uc3QgQUVTX0tFWSAqa2V5LAorCXNpemVfdCBsZW5ndGgsIGNvbnN0IEFFU19LRVkgKmtleSwKIAl1bnNpZ25lZCBjaGFyICppdmVjLCBjb25zdCBpbnQgZW5jKTsKIHZvaWQgQUVTX2NmYjEyOF9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCi0JY29uc3QgdW5zaWduZWQgbG9uZyBsZW5ndGgsIGNvbnN0IEFFU19LRVkgKmtleSwKKwlzaXplX3QgbGVuZ3RoLCBjb25zdCBBRVNfS0VZICprZXksCiAJdW5zaWduZWQgY2hhciAqaXZlYywgaW50ICpudW0sIGNvbnN0IGludCBlbmMpOwogdm9pZCBBRVNfY2ZiMV9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCi0JY29uc3QgdW5zaWduZWQgbG9uZyBsZW5ndGgsIGNvbnN0IEFFU19LRVkgKmtleSwKKwlzaXplX3QgbGVuZ3RoLCBjb25zdCBBRVNfS0VZICprZXksCiAJdW5zaWduZWQgY2hhciAqaXZlYywgaW50ICpudW0sIGNvbnN0IGludCBlbmMpOwogdm9pZCBBRVNfY2ZiOF9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCi0JY29uc3QgdW5zaWduZWQgbG9uZyBsZW5ndGgsIGNvbnN0IEFFU19LRVkgKmtleSwKKwlzaXplX3QgbGVuZ3RoLCBjb25zdCBBRVNfS0VZICprZXksCiAJdW5zaWduZWQgY2hhciAqaXZlYywgaW50ICpudW0sIGNvbnN0IGludCBlbmMpOwotdm9pZCBBRVNfY2Zicl9lbmNyeXB0X2Jsb2NrKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLHVuc2lnbmVkIGNoYXIgKm91dCwKLQkJCSAgICBjb25zdCBpbnQgbmJpdHMsY29uc3QgQUVTX0tFWSAqa2V5LAotCQkJICAgIHVuc2lnbmVkIGNoYXIgKml2ZWMsY29uc3QgaW50IGVuYyk7CiB2b2lkIEFFU19vZmIxMjhfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAotCWNvbnN0IHVuc2lnbmVkIGxvbmcgbGVuZ3RoLCBjb25zdCBBRVNfS0VZICprZXksCisJc2l6ZV90IGxlbmd0aCwgY29uc3QgQUVTX0tFWSAqa2V5LAogCXVuc2lnbmVkIGNoYXIgKml2ZWMsIGludCAqbnVtKTsKIHZvaWQgQUVTX2N0cjEyOF9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCi0JY29uc3QgdW5zaWduZWQgbG9uZyBsZW5ndGgsIGNvbnN0IEFFU19LRVkgKmtleSwKKwlzaXplX3QgbGVuZ3RoLCBjb25zdCBBRVNfS0VZICprZXksCiAJdW5zaWduZWQgY2hhciBpdmVjW0FFU19CTE9DS19TSVpFXSwKIAl1bnNpZ25lZCBjaGFyIGVjb3VudF9idWZbQUVTX0JMT0NLX1NJWkVdLAogCXVuc2lnbmVkIGludCAqbnVtKTsKLQotLyogRm9yIElHRSwgc2VlIGFsc28gaHR0cDovL3d3dy5saW5rcy5vcmcvZmlsZXMvb3BlbnNzbC1pZ2UucGRmICovCiAvKiBOQjogdGhlIElWIGlzIF90d29fIGJsb2NrcyBsb25nICovCiB2b2lkIEFFU19pZ2VfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAotCQkgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgbGVuZ3RoLCBjb25zdCBBRVNfS0VZICprZXksCisJCSAgICAgc2l6ZV90IGxlbmd0aCwgY29uc3QgQUVTX0tFWSAqa2V5LAogCQkgICAgIHVuc2lnbmVkIGNoYXIgKml2ZWMsIGNvbnN0IGludCBlbmMpOwogLyogTkI6IHRoZSBJViBpcyBfZm91cl8gYmxvY2tzIGxvbmcgKi8KIHZvaWQgQUVTX2JpX2lnZV9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCi0JCQljb25zdCB1bnNpZ25lZCBsb25nIGxlbmd0aCwgY29uc3QgQUVTX0tFWSAqa2V5LAorCQkJc2l6ZV90IGxlbmd0aCwgY29uc3QgQUVTX0tFWSAqa2V5LAogCQkJY29uc3QgQUVTX0tFWSAqa2V5MiwgY29uc3QgdW5zaWduZWQgY2hhciAqaXZlYywKIAkJCWNvbnN0IGludCBlbmMpOwogCkBAIC0xNDEsNiArMTM0LDcgQEAKIAkJdW5zaWduZWQgY2hhciAqb3V0LAogCQljb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgaW50IGlubGVuKTsKIAorCiAjaWZkZWYgIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggYi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCmluZGV4IDE5NTgyOTguLmY3NzE4YjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKKysrIGIvaW5jbHVkZS9vcGVuc3NsL2FzbjEuaApAQCAtMjEzLDcgKzIxMyw3IEBACiAJY29uc3QgY2hhciAqc24sKmxuOwogCWludCBuaWQ7CiAJaW50IGxlbmd0aDsKLQl1bnNpZ25lZCBjaGFyICpkYXRhOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGE7CS8qIGRhdGEgcmVtYWlucyBjb25zdCBhZnRlciBpbml0ICovCiAJaW50IGZsYWdzOwkvKiBTaG91bGQgd2UgZnJlZSB0aGlzIG9uZSAqLwogCX0gQVNOMV9PQkpFQ1Q7CiAKQEAgLTIyOCw4ICsyMjgsMTIgQEAKICAqIGNvbXBsZXRlIGFuZCBpcyBhIHBsYWNlIGhvbGRlciBmb3IgY29udGVudCB3aGVuIGl0IGhhZCBhbGwgYmVlbiAKICAqIGFjY2Vzc2VkLiBUaGUgZmxhZyB3aWxsIGJlIHJlc2V0IHdoZW4gY29udGVudCBoYXMgYmVlbiB3cml0dGVuIHRvIGl0LgogICovCi0jZGVmaW5lIEFTTjFfU1RSSU5HX0ZMQUdfQ09OVCAweDAyMCAKIAorI2RlZmluZSBBU04xX1NUUklOR19GTEFHX0NPTlQgMHgwMjAgCisvKiBUaGlzIGZsYWcgaXMgdXNlZCBieSBBU04xIGNvZGUgdG8gaW5kaWNhdGUgYW4gQVNOMV9TVFJJTkcgaXMgYW4gTVNUUklORworICogdHlwZS4KKyAqLworI2RlZmluZSBBU04xX1NUUklOR19GTEFHX01TVFJJTkcgMHgwNDAgCiAvKiBUaGlzIGlzIHRoZSBiYXNlIHR5cGUgdGhhdCBob2xkcyBqdXN0IGFib3V0IGV2ZXJ5dGhpbmcgOi0pICovCiB0eXBlZGVmIHN0cnVjdCBhc24xX3N0cmluZ19zdAogCXsKQEAgLTMzMCw2ICszMzQsMTMgQEAKIAl0eXBlICpuYW1lIyNfbmV3KHZvaWQpOyBcCiAJdm9pZCBuYW1lIyNfZnJlZSh0eXBlICphKTsKIAorI2RlZmluZSBERUNMQVJFX0FTTjFfUFJJTlRfRlVOQ1RJT04oc3RuYW1lKSBcCisJREVDTEFSRV9BU04xX1BSSU5UX0ZVTkNUSU9OX2ZuYW1lKHN0bmFtZSwgc3RuYW1lKQorCisjZGVmaW5lIERFQ0xBUkVfQVNOMV9QUklOVF9GVU5DVElPTl9mbmFtZShzdG5hbWUsIGZuYW1lKSBcCisJaW50IGZuYW1lIyNfcHJpbnRfY3R4KEJJTyAqb3V0LCBzdG5hbWUgKngsIGludCBpbmRlbnQsIFwKKwkJCQkJIGNvbnN0IEFTTjFfUENUWCAqcGN0eCk7CisKICNkZWZpbmUgRDJJX09GKHR5cGUpIHR5cGUgKigqKSh0eXBlICoqLGNvbnN0IHVuc2lnbmVkIGNoYXIgKiosbG9uZykKICNkZWZpbmUgSTJEX09GKHR5cGUpIGludCAoKikodHlwZSAqLHVuc2lnbmVkIGNoYXIgKiopCiAjZGVmaW5lIEkyRF9PRl9jb25zdCh0eXBlKSBpbnQgKCopKGNvbnN0IHR5cGUgKix1bnNpZ25lZCBjaGFyICoqKQpAQCAtMzQ0LDggKzM1NSw2IEBACiAgICAgKCh2b2lkKikgKDEgPyBwIDogKHR5cGUqKTApKQogI2RlZmluZSBDSEVDS0VEX1BQVFJfT0YodHlwZSwgcCkgXAogICAgICgodm9pZCoqKSAoMSA/IHAgOiAodHlwZSoqKTApKQotI2RlZmluZSBDSEVDS0VEX1BUUl9PRl9UT19DSEFSKHR5cGUsIHApIFwKLSAgICAoKGNoYXIqKSAoMSA/IHAgOiAodHlwZSopMCkpCiAKICNkZWZpbmUgVFlQRURFRl9EMklfT0YodHlwZSkgdHlwZWRlZiB0eXBlICpkMmlfb2ZfIyN0eXBlKHR5cGUgKiosY29uc3QgdW5zaWduZWQgY2hhciAqKixsb25nKQogI2RlZmluZSBUWVBFREVGX0kyRF9PRih0eXBlKSB0eXBlZGVmIGludCBpMmRfb2ZfIyN0eXBlKHR5cGUgKix1bnNpZ25lZCBjaGFyICoqKQpAQCAtNTM2LDI4ICs1NDUsMjMgQEAKIAkJICogY29udGFpbiB0aGUgc2V0IG9yIHNlcXVlbmNlIGJ5dGVzICovCiAJCUFTTjFfU1RSSU5HICoJCXNldDsKIAkJQVNOMV9TVFJJTkcgKgkJc2VxdWVuY2U7Ci0JCUFTTjFfVkFMVUUgICoJCWFzbjFfdmFsdWU7CisJCUFTTjFfVkFMVUUgKgkJYXNuMV92YWx1ZTsKIAkJfSB2YWx1ZTsKIAl9IEFTTjFfVFlQRTsKIAogREVDTEFSRV9TVEFDS19PRihBU04xX1RZUEUpCiBERUNMQVJFX0FTTjFfU0VUX09GKEFTTjFfVFlQRSkKIAotdHlwZWRlZiBzdHJ1Y3QgYXNuMV9tZXRob2Rfc3QKLQl7Ci0JaTJkX29mX3ZvaWQgKmkyZDsKLQlkMmlfb2Zfdm9pZCAqZDJpOwotCXZvaWQgKigqY3JlYXRlKSh2b2lkKTsKLQl2b2lkICgqZGVzdHJveSkodm9pZCAqKTsKLQl9IEFTTjFfTUVUSE9EOwordHlwZWRlZiBTVEFDS19PRihBU04xX1RZUEUpIEFTTjFfU0VRVUVOQ0VfQU5ZOwogCi0vKiBUaGlzIGlzIHVzZWQgd2hlbiBwYXJzaW5nIHNvbWUgTmV0c2NhcGUgb2JqZWN0cyAqLwotdHlwZWRlZiBzdHJ1Y3QgYXNuMV9oZWFkZXJfc3QKK0RFQ0xBUkVfQVNOMV9FTkNPREVfRlVOQ1RJT05TX2NvbnN0KEFTTjFfU0VRVUVOQ0VfQU5ZLCBBU04xX1NFUVVFTkNFX0FOWSkKK0RFQ0xBUkVfQVNOMV9FTkNPREVfRlVOQ1RJT05TX2NvbnN0KEFTTjFfU0VRVUVOQ0VfQU5ZLCBBU04xX1NFVF9BTlkpCisKK3R5cGVkZWYgc3RydWN0IE5FVFNDQVBFX1g1MDlfc3QKIAl7CiAJQVNOMV9PQ1RFVF9TVFJJTkcgKmhlYWRlcjsKLQl2b2lkICpkYXRhOwotCUFTTjFfTUVUSE9EICptZXRoOwotCX0gQVNOMV9IRUFERVI7CisJWDUwOSAqY2VydDsKKwl9IE5FVFNDQVBFX1g1MDk7CiAKIC8qIFRoaXMgaXMgdXNlZCB0byBjb250YWluIGEgbGlzdCBvZiBiaXQgbmFtZXMgKi8KIHR5cGVkZWYgc3RydWN0IEJJVF9TVFJJTkdfQklUTkFNRV9zdCB7CkBAIC01NzcsMzIgKzU4MSwzNCBAQAogCQlBU04xX1NUUklOR190eXBlX25ldyhWX0FTTjFfQklUX1NUUklORykKICNkZWZpbmUgTV9BU04xX0JJVF9TVFJJTkdfZnJlZShhKQlBU04xX1NUUklOR19mcmVlKChBU04xX1NUUklORyAqKWEpCiAjZGVmaW5lIE1fQVNOMV9CSVRfU1RSSU5HX2R1cChhKSAoQVNOMV9CSVRfU1RSSU5HICopXAotCQlBU04xX1NUUklOR19kdXAoKEFTTjFfU1RSSU5HICopYSkKKwkJQVNOMV9TVFJJTkdfZHVwKChjb25zdCBBU04xX1NUUklORyAqKWEpCiAjZGVmaW5lIE1fQVNOMV9CSVRfU1RSSU5HX2NtcChhLGIpIEFTTjFfU1RSSU5HX2NtcChcCi0JCShBU04xX1NUUklORyAqKWEsKEFTTjFfU1RSSU5HICopYikKKwkJKGNvbnN0IEFTTjFfU1RSSU5HICopYSwoY29uc3QgQVNOMV9TVFJJTkcgKiliKQogI2RlZmluZSBNX0FTTjFfQklUX1NUUklOR19zZXQoYSxiLGMpIEFTTjFfU1RSSU5HX3NldCgoQVNOMV9TVFJJTkcgKilhLGIsYykKIAogI2RlZmluZSBNX0FTTjFfSU5URUdFUl9uZXcoKQkoQVNOMV9JTlRFR0VSICopXAogCQlBU04xX1NUUklOR190eXBlX25ldyhWX0FTTjFfSU5URUdFUikKICNkZWZpbmUgTV9BU04xX0lOVEVHRVJfZnJlZShhKQkJQVNOMV9TVFJJTkdfZnJlZSgoQVNOMV9TVFJJTkcgKilhKQotI2RlZmluZSBNX0FTTjFfSU5URUdFUl9kdXAoYSkgKEFTTjFfSU5URUdFUiAqKUFTTjFfU1RSSU5HX2R1cCgoQVNOMV9TVFJJTkcgKilhKQorI2RlZmluZSBNX0FTTjFfSU5URUdFUl9kdXAoYSkgKEFTTjFfSU5URUdFUiAqKVwKKwkJQVNOMV9TVFJJTkdfZHVwKChjb25zdCBBU04xX1NUUklORyAqKWEpCiAjZGVmaW5lIE1fQVNOMV9JTlRFR0VSX2NtcChhLGIpCUFTTjFfU1RSSU5HX2NtcChcCi0JCShBU04xX1NUUklORyAqKWEsKEFTTjFfU1RSSU5HICopYikKKwkJKGNvbnN0IEFTTjFfU1RSSU5HICopYSwoY29uc3QgQVNOMV9TVFJJTkcgKiliKQogCiAjZGVmaW5lIE1fQVNOMV9FTlVNRVJBVEVEX25ldygpCShBU04xX0VOVU1FUkFURUQgKilcCiAJCUFTTjFfU1RSSU5HX3R5cGVfbmV3KFZfQVNOMV9FTlVNRVJBVEVEKQogI2RlZmluZSBNX0FTTjFfRU5VTUVSQVRFRF9mcmVlKGEpCUFTTjFfU1RSSU5HX2ZyZWUoKEFTTjFfU1RSSU5HICopYSkKLSNkZWZpbmUgTV9BU04xX0VOVU1FUkFURURfZHVwKGEpIChBU04xX0VOVU1FUkFURUQgKilBU04xX1NUUklOR19kdXAoKEFTTjFfU1RSSU5HICopYSkKKyNkZWZpbmUgTV9BU04xX0VOVU1FUkFURURfZHVwKGEpIChBU04xX0VOVU1FUkFURUQgKilcCisJCUFTTjFfU1RSSU5HX2R1cCgoY29uc3QgQVNOMV9TVFJJTkcgKilhKQogI2RlZmluZSBNX0FTTjFfRU5VTUVSQVRFRF9jbXAoYSxiKQlBU04xX1NUUklOR19jbXAoXAotCQkoQVNOMV9TVFJJTkcgKilhLChBU04xX1NUUklORyAqKWIpCisJCShjb25zdCBBU04xX1NUUklORyAqKWEsKGNvbnN0IEFTTjFfU1RSSU5HICopYikKIAogI2RlZmluZSBNX0FTTjFfT0NURVRfU1RSSU5HX25ldygpCShBU04xX09DVEVUX1NUUklORyAqKVwKIAkJQVNOMV9TVFJJTkdfdHlwZV9uZXcoVl9BU04xX09DVEVUX1NUUklORykKICNkZWZpbmUgTV9BU04xX09DVEVUX1NUUklOR19mcmVlKGEpCUFTTjFfU1RSSU5HX2ZyZWUoKEFTTjFfU1RSSU5HICopYSkKICNkZWZpbmUgTV9BU04xX09DVEVUX1NUUklOR19kdXAoYSkgKEFTTjFfT0NURVRfU1RSSU5HICopXAotCQlBU04xX1NUUklOR19kdXAoKEFTTjFfU1RSSU5HICopYSkKKwkJQVNOMV9TVFJJTkdfZHVwKChjb25zdCBBU04xX1NUUklORyAqKWEpCiAjZGVmaW5lIE1fQVNOMV9PQ1RFVF9TVFJJTkdfY21wKGEsYikgQVNOMV9TVFJJTkdfY21wKFwKLQkJKEFTTjFfU1RSSU5HICopYSwoQVNOMV9TVFJJTkcgKiliKQorCQkoY29uc3QgQVNOMV9TVFJJTkcgKilhLChjb25zdCBBU04xX1NUUklORyAqKWIpCiAjZGVmaW5lIE1fQVNOMV9PQ1RFVF9TVFJJTkdfc2V0KGEsYixjKQlBU04xX1NUUklOR19zZXQoKEFTTjFfU1RSSU5HICopYSxiLGMpCiAjZGVmaW5lIE1fQVNOMV9PQ1RFVF9TVFJJTkdfcHJpbnQoYSxiKQlBU04xX1NUUklOR19wcmludChhLChBU04xX1NUUklORyAqKWIpCiAjZGVmaW5lIE1faTJkX0FTTjFfT0NURVRfU1RSSU5HKGEscHApIFwKQEAgLTY4Niw3ICs2OTIsNyBAQAogCQlBU04xX1NUUklOR190eXBlX25ldyhWX0FTTjFfSUE1U1RSSU5HKQogI2RlZmluZSBNX0FTTjFfSUE1U1RSSU5HX2ZyZWUoYSkJQVNOMV9TVFJJTkdfZnJlZSgoQVNOMV9TVFJJTkcgKilhKQogI2RlZmluZSBNX0FTTjFfSUE1U1RSSU5HX2R1cChhKQlcCi0JCQkoQVNOMV9JQTVTVFJJTkcgKilBU04xX1NUUklOR19kdXAoKEFTTjFfU1RSSU5HICopYSkKKwkJKEFTTjFfSUE1U1RSSU5HICopQVNOMV9TVFJJTkdfZHVwKChjb25zdCBBU04xX1NUUklORyAqKWEpCiAjZGVmaW5lIE1faTJkX0FTTjFfSUE1U1RSSU5HKGEscHApIFwKIAkJaTJkX0FTTjFfYnl0ZXMoKEFTTjFfU1RSSU5HICopYSxwcCxWX0FTTjFfSUE1U1RSSU5HLFwKIAkJCVZfQVNOMV9VTklWRVJTQUwpCkBAIC02OTcsMTggKzcwMywyMCBAQAogI2RlZmluZSBNX0FTTjFfVVRDVElNRV9uZXcoKQkoQVNOMV9VVENUSU1FICopXAogCQlBU04xX1NUUklOR190eXBlX25ldyhWX0FTTjFfVVRDVElNRSkKICNkZWZpbmUgTV9BU04xX1VUQ1RJTUVfZnJlZShhKQlBU04xX1NUUklOR19mcmVlKChBU04xX1NUUklORyAqKWEpCi0jZGVmaW5lIE1fQVNOMV9VVENUSU1FX2R1cChhKSAoQVNOMV9VVENUSU1FICopQVNOMV9TVFJJTkdfZHVwKChBU04xX1NUUklORyAqKWEpCisjZGVmaW5lIE1fQVNOMV9VVENUSU1FX2R1cChhKSAoQVNOMV9VVENUSU1FICopXAorCQlBU04xX1NUUklOR19kdXAoKGNvbnN0IEFTTjFfU1RSSU5HICopYSkKIAogI2RlZmluZSBNX0FTTjFfR0VORVJBTElaRURUSU1FX25ldygpCShBU04xX0dFTkVSQUxJWkVEVElNRSAqKVwKIAkJQVNOMV9TVFJJTkdfdHlwZV9uZXcoVl9BU04xX0dFTkVSQUxJWkVEVElNRSkKICNkZWZpbmUgTV9BU04xX0dFTkVSQUxJWkVEVElNRV9mcmVlKGEpCUFTTjFfU1RSSU5HX2ZyZWUoKEFTTjFfU1RSSU5HICopYSkKICNkZWZpbmUgTV9BU04xX0dFTkVSQUxJWkVEVElNRV9kdXAoYSkgKEFTTjFfR0VORVJBTElaRURUSU1FICopQVNOMV9TVFJJTkdfZHVwKFwKLQkoQVNOMV9TVFJJTkcgKilhKQorCShjb25zdCBBU04xX1NUUklORyAqKWEpCiAKICNkZWZpbmUgTV9BU04xX1RJTUVfbmV3KCkJKEFTTjFfVElNRSAqKVwKIAkJQVNOMV9TVFJJTkdfdHlwZV9uZXcoVl9BU04xX1VUQ1RJTUUpCiAjZGVmaW5lIE1fQVNOMV9USU1FX2ZyZWUoYSkJQVNOMV9TVFJJTkdfZnJlZSgoQVNOMV9TVFJJTkcgKilhKQotI2RlZmluZSBNX0FTTjFfVElNRV9kdXAoYSkgKEFTTjFfVElNRSAqKUFTTjFfU1RSSU5HX2R1cCgoQVNOMV9TVFJJTkcgKilhKQorI2RlZmluZSBNX0FTTjFfVElNRV9kdXAoYSkgKEFTTjFfVElNRSAqKVwKKwlBU04xX1NUUklOR19kdXAoKGNvbnN0IEFTTjFfU1RSSU5HICopYSkKIAogI2RlZmluZSBNX0FTTjFfR0VORVJBTFNUUklOR19uZXcoKQkoQVNOMV9HRU5FUkFMU1RSSU5HICopXAogCQlBU04xX1NUUklOR190eXBlX25ldyhWX0FTTjFfR0VORVJBTFNUUklORykKQEAgLTc2OSw2ICs3NzcsNyBAQAogaW50IEFTTjFfVFlQRV9nZXQoQVNOMV9UWVBFICphKTsKIHZvaWQgQVNOMV9UWVBFX3NldChBU04xX1RZUEUgKmEsIGludCB0eXBlLCB2b2lkICp2YWx1ZSk7CiBpbnQgQVNOMV9UWVBFX3NldDEoQVNOMV9UWVBFICphLCBpbnQgdHlwZSwgY29uc3Qgdm9pZCAqdmFsdWUpOworaW50ICAgICAgICAgICAgQVNOMV9UWVBFX2NtcChBU04xX1RZUEUgKmEsIEFTTjFfVFlQRSAqYik7CiAKIEFTTjFfT0JKRUNUICoJQVNOMV9PQkpFQ1RfbmV3KHZvaWQgKTsKIHZvaWQJCUFTTjFfT0JKRUNUX2ZyZWUoQVNOMV9PQkpFQ1QgKmEpOwpAQCAtNzg1LDE0ICs3OTQsMTUgQEAKIAogQVNOMV9TVFJJTkcgKglBU04xX1NUUklOR19uZXcodm9pZCk7CiB2b2lkCQlBU04xX1NUUklOR19mcmVlKEFTTjFfU1RSSU5HICphKTsKLUFTTjFfU1RSSU5HICoJQVNOMV9TVFJJTkdfZHVwKEFTTjFfU1RSSU5HICphKTsKK2ludAkJQVNOMV9TVFJJTkdfY29weShBU04xX1NUUklORyAqZHN0LCBjb25zdCBBU04xX1NUUklORyAqc3RyKTsKK0FTTjFfU1RSSU5HICoJQVNOMV9TVFJJTkdfZHVwKGNvbnN0IEFTTjFfU1RSSU5HICphKTsKIEFTTjFfU1RSSU5HICoJQVNOMV9TVFJJTkdfdHlwZV9uZXcoaW50IHR5cGUgKTsKLWludCAJCUFTTjFfU1RSSU5HX2NtcChBU04xX1NUUklORyAqYSwgQVNOMV9TVFJJTkcgKmIpOworaW50IAkJQVNOMV9TVFJJTkdfY21wKGNvbnN0IEFTTjFfU1RSSU5HICphLCBjb25zdCBBU04xX1NUUklORyAqYik7CiAgIC8qIFNpbmNlIHRoaXMgaXMgdXNlZCB0byBzdG9yZSBhbGwgc29ydHMgb2YgdGhpbmdzLCB2aWEgbWFjcm9zLCBmb3Igbm93LCBtYWtlCiAgICAgIGl0cyBkYXRhIHZvaWQgKiAqLwogaW50IAkJQVNOMV9TVFJJTkdfc2V0KEFTTjFfU1RSSU5HICpzdHIsIGNvbnN0IHZvaWQgKmRhdGEsIGludCBsZW4pOwogdm9pZAkJQVNOMV9TVFJJTkdfc2V0MChBU04xX1NUUklORyAqc3RyLCB2b2lkICpkYXRhLCBpbnQgbGVuKTsKLWludCBBU04xX1NUUklOR19sZW5ndGgoQVNOMV9TVFJJTkcgKngpOworaW50IEFTTjFfU1RSSU5HX2xlbmd0aChjb25zdCBBU04xX1NUUklORyAqeCk7CiB2b2lkIEFTTjFfU1RSSU5HX2xlbmd0aF9zZXQoQVNOMV9TVFJJTkcgKngsIGludCBuKTsKIGludCBBU04xX1NUUklOR190eXBlKEFTTjFfU1RSSU5HICp4KTsKIHVuc2lnbmVkIGNoYXIgKiBBU04xX1NUUklOR19kYXRhKEFTTjFfU1RSSU5HICp4KTsKQEAgLTgwNSw2ICs4MTUsOCBAQAogCQkJaW50IGxlbmd0aCApOwogaW50CQlBU04xX0JJVF9TVFJJTkdfc2V0X2JpdChBU04xX0JJVF9TVFJJTkcgKmEsIGludCBuLCBpbnQgdmFsdWUpOwogaW50CQlBU04xX0JJVF9TVFJJTkdfZ2V0X2JpdChBU04xX0JJVF9TVFJJTkcgKmEsIGludCBuKTsKK2ludCAgICAgICAgICAgIEFTTjFfQklUX1NUUklOR19jaGVjayhBU04xX0JJVF9TVFJJTkcgKmEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZmxhZ3MsIGludCBmbGFnc19sZW4pOwogCiAjaWZuZGVmIE9QRU5TU0xfTk9fQklPCiBpbnQgQVNOMV9CSVRfU1RSSU5HX25hbWVfcHJpbnQoQklPICpvdXQsIEFTTjFfQklUX1NUUklORyAqYnMsCkBAIC04MjMsMTMgKzgzNSwxNSBAQAogCQkJbG9uZyBsZW5ndGgpOwogQVNOMV9JTlRFR0VSICpkMmlfQVNOMV9VSU5URUdFUihBU04xX0lOVEVHRVIgKiphLGNvbnN0IHVuc2lnbmVkIGNoYXIgKipwcCwKIAkJCWxvbmcgbGVuZ3RoKTsKLUFTTjFfSU5URUdFUiAqCUFTTjFfSU5URUdFUl9kdXAoQVNOMV9JTlRFR0VSICp4KTsKLWludCBBU04xX0lOVEVHRVJfY21wKEFTTjFfSU5URUdFUiAqeCwgQVNOMV9JTlRFR0VSICp5KTsKK0FTTjFfSU5URUdFUiAqCUFTTjFfSU5URUdFUl9kdXAoY29uc3QgQVNOMV9JTlRFR0VSICp4KTsKK2ludCBBU04xX0lOVEVHRVJfY21wKGNvbnN0IEFTTjFfSU5URUdFUiAqeCwgY29uc3QgQVNOMV9JTlRFR0VSICp5KTsKIAogREVDTEFSRV9BU04xX0ZVTkNUSU9OUyhBU04xX0VOVU1FUkFURUQpCiAKIGludCBBU04xX1VUQ1RJTUVfY2hlY2soQVNOMV9VVENUSU1FICphKTsKIEFTTjFfVVRDVElNRSAqQVNOMV9VVENUSU1FX3NldChBU04xX1VUQ1RJTUUgKnMsdGltZV90IHQpOworQVNOMV9VVENUSU1FICpBU04xX1VUQ1RJTUVfYWRqKEFTTjFfVVRDVElNRSAqcywgdGltZV90IHQsCisJCQkJaW50IG9mZnNldF9kYXksIGxvbmcgb2Zmc2V0X3NlYyk7CiBpbnQgQVNOMV9VVENUSU1FX3NldF9zdHJpbmcoQVNOMV9VVENUSU1FICpzLCBjb25zdCBjaGFyICpzdHIpOwogaW50IEFTTjFfVVRDVElNRV9jbXBfdGltZV90KGNvbnN0IEFTTjFfVVRDVElNRSAqcywgdGltZV90IHQpOwogI2lmIDAKQEAgLTgzOCwxMSArODUyLDEzIEBACiAKIGludCBBU04xX0dFTkVSQUxJWkVEVElNRV9jaGVjayhBU04xX0dFTkVSQUxJWkVEVElNRSAqYSk7CiBBU04xX0dFTkVSQUxJWkVEVElNRSAqQVNOMV9HRU5FUkFMSVpFRFRJTUVfc2V0KEFTTjFfR0VORVJBTElaRURUSU1FICpzLHRpbWVfdCB0KTsKK0FTTjFfR0VORVJBTElaRURUSU1FICpBU04xX0dFTkVSQUxJWkVEVElNRV9hZGooQVNOMV9HRU5FUkFMSVpFRFRJTUUgKnMsCisJICAgICB0aW1lX3QgdCwgaW50IG9mZnNldF9kYXksIGxvbmcgb2Zmc2V0X3NlYyk7CiBpbnQgQVNOMV9HRU5FUkFMSVpFRFRJTUVfc2V0X3N0cmluZyhBU04xX0dFTkVSQUxJWkVEVElNRSAqcywgY29uc3QgY2hhciAqc3RyKTsKIAogREVDTEFSRV9BU04xX0ZVTkNUSU9OUyhBU04xX09DVEVUX1NUUklORykKLUFTTjFfT0NURVRfU1RSSU5HICoJQVNOMV9PQ1RFVF9TVFJJTkdfZHVwKEFTTjFfT0NURVRfU1RSSU5HICphKTsKLWludCAJQVNOMV9PQ1RFVF9TVFJJTkdfY21wKEFTTjFfT0NURVRfU1RSSU5HICphLCBBU04xX09DVEVUX1NUUklORyAqYik7CitBU04xX09DVEVUX1NUUklORyAqCUFTTjFfT0NURVRfU1RSSU5HX2R1cChjb25zdCBBU04xX09DVEVUX1NUUklORyAqYSk7CitpbnQgCUFTTjFfT0NURVRfU1RSSU5HX2NtcChjb25zdCBBU04xX09DVEVUX1NUUklORyAqYSwgY29uc3QgQVNOMV9PQ1RFVF9TVFJJTkcgKmIpOwogaW50IAlBU04xX09DVEVUX1NUUklOR19zZXQoQVNOMV9PQ1RFVF9TVFJJTkcgKnN0ciwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxlbik7CiAKIERFQ0xBUkVfQVNOMV9GVU5DVElPTlMoQVNOMV9WSVNJQkxFU1RSSU5HKQpAQCAtODY5LDE0ICs4ODUsMjAgQEAKIERFQ0xBUkVfQVNOMV9JVEVNKEFTTjFfT0NURVRfU1RSSU5HX05ERUYpCiAKIEFTTjFfVElNRSAqQVNOMV9USU1FX3NldChBU04xX1RJTUUgKnMsdGltZV90IHQpOworQVNOMV9USU1FICpBU04xX1RJTUVfYWRqKEFTTjFfVElNRSAqcyx0aW1lX3QgdCwKKwkJCQlpbnQgb2Zmc2V0X2RheSwgbG9uZyBvZmZzZXRfc2VjKTsKIGludCBBU04xX1RJTUVfY2hlY2soQVNOMV9USU1FICp0KTsKIEFTTjFfR0VORVJBTElaRURUSU1FICpBU04xX1RJTUVfdG9fZ2VuZXJhbGl6ZWR0aW1lKEFTTjFfVElNRSAqdCwgQVNOMV9HRU5FUkFMSVpFRFRJTUUgKipvdXQpOworaW50IEFTTjFfVElNRV9zZXRfc3RyaW5nKEFTTjFfVElNRSAqcywgY29uc3QgY2hhciAqc3RyKTsKIAotaW50IGkyZF9BU04xX1NFVChTVEFDSyAqYSwgdW5zaWduZWQgY2hhciAqKnBwLAotCQkgaTJkX29mX3ZvaWQgKmkyZCwgaW50IGV4X3RhZywgaW50IGV4X2NsYXNzLCBpbnQgaXNfc2V0KTsKLVNUQUNLICoJZDJpX0FTTjFfU0VUKFNUQUNLICoqYSwgY29uc3QgdW5zaWduZWQgY2hhciAqKnBwLCBsb25nIGxlbmd0aCwKLQkJICAgICBkMmlfb2Zfdm9pZCAqZDJpLCB2b2lkICgqZnJlZV9mdW5jKSh2b2lkICopLAotCQkgICAgIGludCBleF90YWcsIGludCBleF9jbGFzcyk7CitpbnQgaTJkX0FTTjFfU0VUKFNUQUNLX09GKE9QRU5TU0xfQkxPQ0spICphLCB1bnNpZ25lZCBjaGFyICoqcHAsCisJCSBpMmRfb2Zfdm9pZCAqaTJkLCBpbnQgZXhfdGFnLCBpbnQgZXhfY2xhc3MsCisJCSBpbnQgaXNfc2V0KTsKK1NUQUNLX09GKE9QRU5TU0xfQkxPQ0spICpkMmlfQVNOMV9TRVQoU1RBQ0tfT0YoT1BFTlNTTF9CTE9DSykgKiphLAorCQkJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqKnBwLAorCQkJICAgICAgbG9uZyBsZW5ndGgsIGQyaV9vZl92b2lkICpkMmksCisJCQkgICAgICB2b2lkICgqZnJlZV9mdW5jKShPUEVOU1NMX0JMT0NLKSwgaW50IGV4X3RhZywKKwkJCSAgICAgIGludCBleF9jbGFzcyk7CiAKICNpZm5kZWYgT1BFTlNTTF9OT19CSU8KIGludCBpMmFfQVNOMV9JTlRFR0VSKEJJTyAqYnAsIEFTTjFfSU5URUdFUiAqYSk7CkBAIC04OTQsOSArOTE2LDkgQEAKIAljb25zdCBjaGFyICpzbiwgY29uc3QgY2hhciAqbG4pOwogCiBpbnQgQVNOMV9JTlRFR0VSX3NldChBU04xX0lOVEVHRVIgKmEsIGxvbmcgdik7Ci1sb25nIEFTTjFfSU5URUdFUl9nZXQoQVNOMV9JTlRFR0VSICphKTsKLUFTTjFfSU5URUdFUiAqQk5fdG9fQVNOMV9JTlRFR0VSKEJJR05VTSAqYm4sIEFTTjFfSU5URUdFUiAqYWkpOwotQklHTlVNICpBU04xX0lOVEVHRVJfdG9fQk4oQVNOMV9JTlRFR0VSICphaSxCSUdOVU0gKmJuKTsKK2xvbmcgQVNOMV9JTlRFR0VSX2dldChjb25zdCBBU04xX0lOVEVHRVIgKmEpOworQVNOMV9JTlRFR0VSICpCTl90b19BU04xX0lOVEVHRVIoY29uc3QgQklHTlVNICpibiwgQVNOMV9JTlRFR0VSICphaSk7CitCSUdOVU0gKkFTTjFfSU5URUdFUl90b19CTihjb25zdCBBU04xX0lOVEVHRVIgKmFpLEJJR05VTSAqYm4pOwogCiBpbnQgQVNOMV9FTlVNRVJBVEVEX3NldChBU04xX0VOVU1FUkFURUQgKmEsIGxvbmcgdik7CiBsb25nIEFTTjFfRU5VTUVSQVRFRF9nZXQoQVNOMV9FTlVNRVJBVEVEICphKTsKQEAgLTkzMCwxNyArOTUyLDE3IEBACiBpbnQgQVNOMV9vYmplY3Rfc2l6ZShpbnQgY29uc3RydWN0ZWQsIGludCBsZW5ndGgsIGludCB0YWcpOwogCiAvKiBVc2VkIHRvIGltcGxlbWVudCBvdGhlciBmdW5jdGlvbnMgKi8KLXZvaWQgKkFTTjFfZHVwKGkyZF9vZl92b2lkICppMmQsIGQyaV9vZl92b2lkICpkMmksIGNoYXIgKngpOwordm9pZCAqQVNOMV9kdXAoaTJkX29mX3ZvaWQgKmkyZCwgZDJpX29mX3ZvaWQgKmQyaSwgdm9pZCAqeCk7CiAKICNkZWZpbmUgQVNOMV9kdXBfb2YodHlwZSxpMmQsZDJpLHgpIFwKICAgICAoKHR5cGUqKUFTTjFfZHVwKENIRUNLRURfSTJEX09GKHR5cGUsIGkyZCksIFwKIAkJICAgICBDSEVDS0VEX0QySV9PRih0eXBlLCBkMmkpLCBcCi0JCSAgICAgQ0hFQ0tFRF9QVFJfT0ZfVE9fQ0hBUih0eXBlLCB4KSkpCisJCSAgICAgQ0hFQ0tFRF9QVFJfT0YodHlwZSwgeCkpKQogCiAjZGVmaW5lIEFTTjFfZHVwX29mX2NvbnN0KHR5cGUsaTJkLGQyaSx4KSBcCiAgICAgKCh0eXBlKilBU04xX2R1cChDSEVDS0VEX0kyRF9PRihjb25zdCB0eXBlLCBpMmQpLCBcCiAJCSAgICAgQ0hFQ0tFRF9EMklfT0YodHlwZSwgZDJpKSwgXAotCQkgICAgIENIRUNLRURfUFRSX09GX1RPX0NIQVIoY29uc3QgdHlwZSwgeCkpKQorCQkgICAgIENIRUNLRURfUFRSX09GKGNvbnN0IHR5cGUsIHgpKSkKIAogdm9pZCAqQVNOMV9pdGVtX2R1cChjb25zdCBBU04xX0lURU0gKml0LCB2b2lkICp4KTsKIApAQCAtMTAwMSwzMCArMTAyMywyNCBAQAogCQkgIENIRUNLRURfUFRSX09GKGNvbnN0IHR5cGUsIHgpKSkKIAogaW50IEFTTjFfaXRlbV9pMmRfYmlvKGNvbnN0IEFTTjFfSVRFTSAqaXQsIEJJTyAqb3V0LCB2b2lkICp4KTsKLWludCBBU04xX1VUQ1RJTUVfcHJpbnQoQklPICpmcCxBU04xX1VUQ1RJTUUgKmEpOwotaW50IEFTTjFfR0VORVJBTElaRURUSU1FX3ByaW50KEJJTyAqZnAsQVNOMV9HRU5FUkFMSVpFRFRJTUUgKmEpOwotaW50IEFTTjFfVElNRV9wcmludChCSU8gKmZwLEFTTjFfVElNRSAqYSk7Ci1pbnQgQVNOMV9TVFJJTkdfcHJpbnQoQklPICpicCxBU04xX1NUUklORyAqdik7CitpbnQgQVNOMV9VVENUSU1FX3ByaW50KEJJTyAqZnAsIGNvbnN0IEFTTjFfVVRDVElNRSAqYSk7CitpbnQgQVNOMV9HRU5FUkFMSVpFRFRJTUVfcHJpbnQoQklPICpmcCwgY29uc3QgQVNOMV9HRU5FUkFMSVpFRFRJTUUgKmEpOworaW50IEFTTjFfVElNRV9wcmludChCSU8gKmZwLCBjb25zdCBBU04xX1RJTUUgKmEpOworaW50IEFTTjFfU1RSSU5HX3ByaW50KEJJTyAqYnAsIGNvbnN0IEFTTjFfU1RSSU5HICp2KTsKIGludCBBU04xX1NUUklOR19wcmludF9leChCSU8gKm91dCwgQVNOMV9TVFJJTkcgKnN0ciwgdW5zaWduZWQgbG9uZyBmbGFncyk7CitpbnQgQVNOMV9ibl9wcmludChCSU8gKmJwLCBjb25zdCBjaGFyICpudW1iZXIsIGNvbnN0IEJJR05VTSAqbnVtLAorCQkJCXVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IG9mZik7CiBpbnQgQVNOMV9wYXJzZShCSU8gKmJwLGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBwLGxvbmcgbGVuLGludCBpbmRlbnQpOwogaW50IEFTTjFfcGFyc2VfZHVtcChCSU8gKmJwLGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBwLGxvbmcgbGVuLGludCBpbmRlbnQsaW50IGR1bXApOwogI2VuZGlmCiBjb25zdCBjaGFyICpBU04xX3RhZzJzdHIoaW50IHRhZyk7CiAKLS8qIFVzZWQgdG8gbG9hZCBhbmQgd3JpdGUgbmV0c2NhcGUgZm9ybWF0IGNlcnQva2V5ICovCi1pbnQgaTJkX0FTTjFfSEVBREVSKEFTTjFfSEVBREVSICphLHVuc2lnbmVkIGNoYXIgKipwcCk7Ci1BU04xX0hFQURFUiAqZDJpX0FTTjFfSEVBREVSKEFTTjFfSEVBREVSICoqYSxjb25zdCB1bnNpZ25lZCBjaGFyICoqcHAsIGxvbmcgbGVuZ3RoKTsKLUFTTjFfSEVBREVSICpBU04xX0hFQURFUl9uZXcodm9pZCApOwotdm9pZCBBU04xX0hFQURFUl9mcmVlKEFTTjFfSEVBREVSICphKTsKKy8qIFVzZWQgdG8gbG9hZCBhbmQgd3JpdGUgbmV0c2NhcGUgZm9ybWF0IGNlcnQgKi8KKworREVDTEFSRV9BU04xX0ZVTkNUSU9OUyhORVRTQ0FQRV9YNTA5KQogCiBpbnQgQVNOMV9VTklWRVJTQUxTVFJJTkdfdG9fc3RyaW5nKEFTTjFfVU5JVkVSU0FMU1RSSU5HICpzKTsKIAotLyogTm90IHVzZWQgdGhhdCBtdWNoIGF0IHRoaXMgcG9pbnQsIGV4Y2VwdCBmb3IgdGhlIGZpcnN0IHR3byAqLwotQVNOMV9NRVRIT0QgKlg1MDlfYXNuMV9tZXRoKHZvaWQpOwotQVNOMV9NRVRIT0QgKlJTQVByaXZhdGVLZXlfYXNuMV9tZXRoKHZvaWQpOwotQVNOMV9NRVRIT0QgKkFTTjFfSUE1U1RSSU5HX2FzbjFfbWV0aCh2b2lkKTsKLUFTTjFfTUVUSE9EICpBU04xX0JJVF9TVFJJTkdfYXNuMV9tZXRoKHZvaWQpOwotCiBpbnQgQVNOMV9UWVBFX3NldF9vY3RldHN0cmluZyhBU04xX1RZUEUgKmEsCiAJdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxlbik7CiBpbnQgQVNOMV9UWVBFX2dldF9vY3RldHN0cmluZyhBU04xX1RZUEUgKmEsCkBAIC0xMDM0LDkgKzEwNTAsOSBAQAogaW50IEFTTjFfVFlQRV9nZXRfaW50X29jdGV0c3RyaW5nKEFTTjFfVFlQRSAqYSxsb25nICpudW0sCiAJdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IG1heF9sZW4pOwogCi1TVEFDSyAqQVNOMV9zZXFfdW5wYWNrKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbiwKLQkJICAgICAgIGQyaV9vZl92b2lkICpkMmksIHZvaWQgKCpmcmVlX2Z1bmMpKHZvaWQgKikpOwotdW5zaWduZWQgY2hhciAqQVNOMV9zZXFfcGFjayhTVEFDSyAqc2FmZXMsIGkyZF9vZl92b2lkICppMmQsCitTVEFDS19PRihPUEVOU1NMX0JMT0NLKSAqQVNOMV9zZXFfdW5wYWNrKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbiwKKwkJCQkgZDJpX29mX3ZvaWQgKmQyaSwgdm9pZCAoKmZyZWVfZnVuYykoT1BFTlNTTF9CTE9DSykpOwordW5zaWduZWQgY2hhciAqQVNOMV9zZXFfcGFjayhTVEFDS19PRihPUEVOU1NMX0JMT0NLKSAqc2FmZXMsIGkyZF9vZl92b2lkICppMmQsCiAJCQkgICAgIHVuc2lnbmVkIGNoYXIgKipidWYsIGludCAqbGVuICk7CiB2b2lkICpBU04xX3VucGFja19zdHJpbmcoQVNOMV9TVFJJTkcgKm9jdCwgZDJpX29mX3ZvaWQgKmQyaSk7CiB2b2lkICpBU04xX2l0ZW1fdW5wYWNrKEFTTjFfU1RSSU5HICpvY3QsIGNvbnN0IEFTTjFfSVRFTSAqaXQpOwpAQCAtMTA3OSwxNSArMTA5NSw1OCBAQAogQVNOMV9UWVBFICpBU04xX2dlbmVyYXRlX25jb25mKGNoYXIgKnN0ciwgQ09ORiAqbmNvbmYpOwogQVNOMV9UWVBFICpBU04xX2dlbmVyYXRlX3YzKGNoYXIgKnN0ciwgWDUwOVYzX0NUWCAqY25mKTsKIAotdHlwZWRlZiBpbnQgYXNuMV9vdXRwdXRfZGF0YV9mbihCSU8gKm91dCwgQklPICpkYXRhLCBBU04xX1ZBTFVFICp2YWwsIGludCBmbGFncywKLQkJCQkJY29uc3QgQVNOMV9JVEVNICppdCk7CisvKiBBU04xIFByaW50IGZsYWdzICovCiAKLWludCBpbnRfc21pbWVfd3JpdGVfQVNOMShCSU8gKmJpbywgQVNOMV9WQUxVRSAqdmFsLCBCSU8gKmRhdGEsIGludCBmbGFncywKKy8qIEluZGljYXRlIG1pc3NpbmcgT1BUSU9OQUwgZmllbGRzICovCisjZGVmaW5lIEFTTjFfUENUWF9GTEFHU19TSE9XX0FCU0VOVAkJMHgwMDEJCisvKiBNYXJrIHN0YXJ0IGFuZCBlbmQgb2YgU0VRVUVOQ0UgKi8KKyNkZWZpbmUgQVNOMV9QQ1RYX0ZMQUdTX1NIT1dfU0VRVUVOQ0UJCTB4MDAyCisvKiBNYXJrIHN0YXJ0IGFuZCBlbmQgb2YgU0VRVUVOQ0UvU0VUIE9GICovCisjZGVmaW5lIEFTTjFfUENUWF9GTEFHU19TSE9XX1NTT0YJCTB4MDA0CisvKiBTaG93IHRoZSBBU04xIHR5cGUgb2YgcHJpbWl0aXZlcyAqLworI2RlZmluZSBBU04xX1BDVFhfRkxBR1NfU0hPV19UWVBFCQkweDAwOAorLyogRG9uJ3Qgc2hvdyBBU04xIHR5cGUgb2YgQU5ZICovCisjZGVmaW5lIEFTTjFfUENUWF9GTEFHU19OT19BTllfVFlQRQkJMHgwMTAKKy8qIERvbid0IHNob3cgQVNOMSB0eXBlIG9mIE1TVFJJTkdzICovCisjZGVmaW5lIEFTTjFfUENUWF9GTEFHU19OT19NU1RSSU5HX1RZUEUJCTB4MDIwCisvKiBEb24ndCBzaG93IGZpZWxkIG5hbWVzIGluIFNFUVVFTkNFICovCisjZGVmaW5lIEFTTjFfUENUWF9GTEFHU19OT19GSUVMRF9OQU1FCQkweDA0MAorLyogU2hvdyBzdHJ1Y3R1cmUgbmFtZXMgb2YgZWFjaCBTRVFVRU5DRSBmaWVsZCAqLworI2RlZmluZSBBU04xX1BDVFhfRkxBR1NfU0hPV19GSUVMRF9TVFJVQ1RfTkFNRQkweDA4MAorLyogRG9uJ3Qgc2hvdyBzdHJ1Y3R1cmUgbmFtZSBldmVuIGF0IHRvcCBsZXZlbCAqLworI2RlZmluZSBBU04xX1BDVFhfRkxBR1NfTk9fU1RSVUNUX05BTUUJCTB4MTAwCisKK2ludCBBU04xX2l0ZW1fcHJpbnQoQklPICpvdXQsIEFTTjFfVkFMVUUgKmlmbGQsIGludCBpbmRlbnQsCisJCQkJY29uc3QgQVNOMV9JVEVNICppdCwgY29uc3QgQVNOMV9QQ1RYICpwY3R4KTsKK0FTTjFfUENUWCAqQVNOMV9QQ1RYX25ldyh2b2lkKTsKK3ZvaWQgQVNOMV9QQ1RYX2ZyZWUoQVNOMV9QQ1RYICpwKTsKK3Vuc2lnbmVkIGxvbmcgQVNOMV9QQ1RYX2dldF9mbGFncyhBU04xX1BDVFggKnApOwordm9pZCBBU04xX1BDVFhfc2V0X2ZsYWdzKEFTTjFfUENUWCAqcCwgdW5zaWduZWQgbG9uZyBmbGFncyk7Cit1bnNpZ25lZCBsb25nIEFTTjFfUENUWF9nZXRfbm1fZmxhZ3MoQVNOMV9QQ1RYICpwKTsKK3ZvaWQgQVNOMV9QQ1RYX3NldF9ubV9mbGFncyhBU04xX1BDVFggKnAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwordW5zaWduZWQgbG9uZyBBU04xX1BDVFhfZ2V0X2NlcnRfZmxhZ3MoQVNOMV9QQ1RYICpwKTsKK3ZvaWQgQVNOMV9QQ1RYX3NldF9jZXJ0X2ZsYWdzKEFTTjFfUENUWCAqcCwgdW5zaWduZWQgbG9uZyBmbGFncyk7Cit1bnNpZ25lZCBsb25nIEFTTjFfUENUWF9nZXRfb2lkX2ZsYWdzKEFTTjFfUENUWCAqcCk7Cit2b2lkIEFTTjFfUENUWF9zZXRfb2lkX2ZsYWdzKEFTTjFfUENUWCAqcCwgdW5zaWduZWQgbG9uZyBmbGFncyk7Cit1bnNpZ25lZCBsb25nIEFTTjFfUENUWF9nZXRfc3RyX2ZsYWdzKEFTTjFfUENUWCAqcCk7Cit2b2lkIEFTTjFfUENUWF9zZXRfc3RyX2ZsYWdzKEFTTjFfUENUWCAqcCwgdW5zaWduZWQgbG9uZyBmbGFncyk7CisKK0JJT19NRVRIT0QgKkJJT19mX2FzbjEodm9pZCk7CisKK0JJTyAqQklPX25ld19OREVGKEJJTyAqb3V0LCBBU04xX1ZBTFVFICp2YWwsIGNvbnN0IEFTTjFfSVRFTSAqaXQpOworCitpbnQgaTJkX0FTTjFfYmlvX3N0cmVhbShCSU8gKm91dCwgQVNOMV9WQUxVRSAqdmFsLCBCSU8gKmluLCBpbnQgZmxhZ3MsCisJCQkJY29uc3QgQVNOMV9JVEVNICppdCk7CitpbnQgUEVNX3dyaXRlX2Jpb19BU04xX3N0cmVhbShCSU8gKm91dCwgQVNOMV9WQUxVRSAqdmFsLCBCSU8gKmluLCBpbnQgZmxhZ3MsCisJCQkJY29uc3QgY2hhciAqaGRyLAorCQkJCWNvbnN0IEFTTjFfSVRFTSAqaXQpOworaW50IFNNSU1FX3dyaXRlX0FTTjEoQklPICpiaW8sIEFTTjFfVkFMVUUgKnZhbCwgQklPICpkYXRhLCBpbnQgZmxhZ3MsCiAJCQkJaW50IGN0eXBlX25pZCwgaW50IGVjb250X25pZCwKIAkJCQlTVEFDS19PRihYNTA5X0FMR09SKSAqbWRhbGdzLAotCQkJCWFzbjFfb3V0cHV0X2RhdGFfZm4gKmRhdGFfZm4sCiAJCQkJY29uc3QgQVNOMV9JVEVNICppdCk7CiBBU04xX1ZBTFVFICpTTUlNRV9yZWFkX0FTTjEoQklPICpiaW8sIEJJTyAqKmJjb250LCBjb25zdCBBU04xX0lURU0gKml0KTsKK2ludCBTTUlNRV9jcmxmX2NvcHkoQklPICppbiwgQklPICpvdXQsIGludCBmbGFncyk7CitpbnQgU01JTUVfdGV4dChCSU8gKmluLCBCSU8gKm91dCk7CiAKIC8qIEJFR0lOIEVSUk9SIENPREVTICovCiAvKiBUaGUgZm9sbG93aW5nIGxpbmVzIGFyZSBhdXRvIGdlbmVyYXRlZCBieSB0aGUgc2NyaXB0IG1rZXJyLnBsLiBBbnkgY2hhbmdlcwpAQCAtMTExOCw2ICsxMTc3LDcgQEAKICNkZWZpbmUgQVNOMV9GX0FTTjFfRU5VTUVSQVRFRF9UT19CTgkJCSAxMTMKICNkZWZpbmUgQVNOMV9GX0FTTjFfRVhfQzJJCQkJCSAyMDQKICNkZWZpbmUgQVNOMV9GX0FTTjFfRklORF9FTkQJCQkJIDE5MAorI2RlZmluZSBBU04xX0ZfQVNOMV9HRU5FUkFMSVpFRFRJTUVfQURKCQkJIDIxNgogI2RlZmluZSBBU04xX0ZfQVNOMV9HRU5FUkFMSVpFRFRJTUVfU0VUCQkJIDE4NQogI2RlZmluZSBBU04xX0ZfQVNOMV9HRU5FUkFURV9WMwkJCQkgMTc4CiAjZGVmaW5lIEFTTjFfRl9BU04xX0dFVF9PQkpFQ1QJCQkJIDExNApAQCAtMTEzOCw3ICsxMTk4LDcgQEAKICNkZWZpbmUgQVNOMV9GX0FTTjFfSVRFTV9WRVJJRlkJCQkJIDE5NwogI2RlZmluZSBBU04xX0ZfQVNOMV9NQlNUUklOR19OQ09QWQkJCSAxMjIKICNkZWZpbmUgQVNOMV9GX0FTTjFfT0JKRUNUX05FVwkJCQkgMTIzCi0jZGVmaW5lIEFTTjFfRl9BU04xX09VVFBVVF9EQVRBCQkJCSAyMDcKKyNkZWZpbmUgQVNOMV9GX0FTTjFfT1VUUFVUX0RBVEEJCQkJIDIxNAogI2RlZmluZSBBU04xX0ZfQVNOMV9QQUNLX1NUUklORwkJCQkgMTI0CiAjZGVmaW5lIEFTTjFfRl9BU04xX1BDVFhfTkVXCQkJCSAyMDUKICNkZWZpbmUgQVNOMV9GX0FTTjFfUEtDUzVfUEJFX1NFVAkJCSAxMjUKQEAgLTExNTIsMTQgKzEyMTIsMTcgQEAKICNkZWZpbmUgQVNOMV9GX0FTTjFfVEVNUExBVEVfRVhfRDJJCQkJIDEzMgogI2RlZmluZSBBU04xX0ZfQVNOMV9URU1QTEFURV9ORVcJCQkgMTMzCiAjZGVmaW5lIEFTTjFfRl9BU04xX1RFTVBMQVRFX05PRVhQX0QySQkJCSAxMzEKKyNkZWZpbmUgQVNOMV9GX0FTTjFfVElNRV9BREoJCQkJIDIxNwogI2RlZmluZSBBU04xX0ZfQVNOMV9USU1FX1NFVAkJCQkgMTc1CiAjZGVmaW5lIEFTTjFfRl9BU04xX1RZUEVfR0VUX0lOVF9PQ1RFVFNUUklORwkJIDEzNAogI2RlZmluZSBBU04xX0ZfQVNOMV9UWVBFX0dFVF9PQ1RFVFNUUklORwkJIDEzNQogI2RlZmluZSBBU04xX0ZfQVNOMV9VTlBBQ0tfU1RSSU5HCQkJIDEzNgorI2RlZmluZSBBU04xX0ZfQVNOMV9VVENUSU1FX0FESgkJCQkgMjE4CiAjZGVmaW5lIEFTTjFfRl9BU04xX1VUQ1RJTUVfU0VUCQkJCSAxODcKICNkZWZpbmUgQVNOMV9GX0FTTjFfVkVSSUZZCQkJCSAxMzcKLSNkZWZpbmUgQVNOMV9GX0I2NF9SRUFEX0FTTjEJCQkJIDIwOAotI2RlZmluZSBBU04xX0ZfQjY0X1dSSVRFX0FTTjEJCQkJIDIwOQorI2RlZmluZSBBU04xX0ZfQjY0X1JFQURfQVNOMQkJCQkgMjA5CisjZGVmaW5lIEFTTjFfRl9CNjRfV1JJVEVfQVNOMQkJCQkgMjEwCisjZGVmaW5lIEFTTjFfRl9CSU9fTkVXX05ERUYJCQkJIDIwOAogI2RlZmluZSBBU04xX0ZfQklUU1RSX0NCCQkJCSAxODAKICNkZWZpbmUgQVNOMV9GX0JOX1RPX0FTTjFfRU5VTUVSQVRFRAkJCSAxMzgKICNkZWZpbmUgQVNOMV9GX0JOX1RPX0FTTjFfSU5URUdFUgkJCSAxMzkKQEAgLTExNzgsNiArMTI0MSw3IEBACiAjZGVmaW5lIEFTTjFfRl9EMklfQVNOMV9UWVBFX0JZVEVTCQkJIDE0OQogI2RlZmluZSBBU04xX0ZfRDJJX0FTTjFfVUlOVEVHRVIJCQkgMTUwCiAjZGVmaW5lIEFTTjFfRl9EMklfQVNOMV9VVENUSU1FCQkJCSAxNTEKKyNkZWZpbmUgQVNOMV9GX0QySV9BVVRPUFJJVkFURUtFWQkJCSAyMDcKICNkZWZpbmUgQVNOMV9GX0QySV9ORVRTQ0FQRV9SU0EJCQkJIDE1MgogI2RlZmluZSBBU04xX0ZfRDJJX05FVFNDQVBFX1JTQV8yCQkJIDE1MwogI2RlZmluZSBBU04xX0ZfRDJJX1BSSVZBVEVLRVkJCQkJIDE1NApAQCAtMTE4Nyw2ICsxMjUxLDcgQEAKICNkZWZpbmUgQVNOMV9GX0QySV9YNTA5CQkJCQkgMTU2CiAjZGVmaW5lIEFTTjFfRl9EMklfWDUwOV9DSU5GCQkJCSAxNTcKICNkZWZpbmUgQVNOMV9GX0QySV9YNTA5X1BLRVkJCQkJIDE1OQorI2RlZmluZSBBU04xX0ZfSTJEX0FTTjFfQklPX1NUUkVBTQkJCSAyMTEKICNkZWZpbmUgQVNOMV9GX0kyRF9BU04xX1NFVAkJCQkgMTg4CiAjZGVmaW5lIEFTTjFfRl9JMkRfQVNOMV9USU1FCQkJCSAxNjAKICNkZWZpbmUgQVNOMV9GX0kyRF9EU0FfUFVCS0VZCQkJCSAxNjEKQEAgLTExOTgsMTAgKzEyNjMsMTEgQEAKICNkZWZpbmUgQVNOMV9GX0xPTkdfQzJJCQkJCQkgMTY2CiAjZGVmaW5lIEFTTjFfRl9PSURfTU9EVUxFX0lOSVQJCQkJIDE3NAogI2RlZmluZSBBU04xX0ZfUEFSU0VfVEFHR0lORwkJCQkgMTgyCi0jZGVmaW5lIEFTTjFfRl9QS0NTNV9QQkUyX1NFVAkJCQkgMTY3CisjZGVmaW5lIEFTTjFfRl9QS0NTNV9QQkUyX1NFVF9JVgkJCSAxNjcKICNkZWZpbmUgQVNOMV9GX1BLQ1M1X1BCRV9TRVQJCQkJIDIwMgotI2RlZmluZSBBU04xX0ZfU01JTUVfUkVBRF9BU04xCQkJCSAyMTAKLSNkZWZpbmUgQVNOMV9GX1NNSU1FX1RFWFQJCQkJIDIxMQorI2RlZmluZSBBU04xX0ZfUEtDUzVfUEJFX1NFVDBfQUxHT1IJCQkgMjE1CisjZGVmaW5lIEFTTjFfRl9TTUlNRV9SRUFEX0FTTjEJCQkJIDIxMgorI2RlZmluZSBBU04xX0ZfU01JTUVfVEVYVAkJCQkgMjEzCiAjZGVmaW5lIEFTTjFfRl9YNTA5X0NJTkZfTkVXCQkJCSAxNjgKICNkZWZpbmUgQVNOMV9GX1g1MDlfQ1JMX0FERDBfUkVWT0tFRAkJCSAxNjkKICNkZWZpbmUgQVNOMV9GX1g1MDlfSU5GT19ORVcJCQkJIDE3MApAQCAtMTIxMywxNCArMTI3OSwxNCBAQAogCiAvKiBSZWFzb24gY29kZXMuICovCiAjZGVmaW5lIEFTTjFfUl9BRERJTkdfT0JKRUNUCQkJCSAxNzEKLSNkZWZpbmUgQVNOMV9SX0FTTjFfUEFSU0VfRVJST1IJCQkJIDE5OAotI2RlZmluZSBBU04xX1JfQVNOMV9TSUdfUEFSU0VfRVJST1IJCQkgMTk5CisjZGVmaW5lIEFTTjFfUl9BU04xX1BBUlNFX0VSUk9SCQkJCSAyMDMKKyNkZWZpbmUgQVNOMV9SX0FTTjFfU0lHX1BBUlNFX0VSUk9SCQkJIDIwNAogI2RlZmluZSBBU04xX1JfQVVYX0VSUk9SCQkJCSAxMDAKICNkZWZpbmUgQVNOMV9SX0JBRF9DTEFTUwkJCQkgMTAxCiAjZGVmaW5lIEFTTjFfUl9CQURfT0JKRUNUX0hFQURFUgkJCSAxMDIKICNkZWZpbmUgQVNOMV9SX0JBRF9QQVNTV09SRF9SRUFECQkJIDEwMwogI2RlZmluZSBBU04xX1JfQkFEX1RBRwkJCQkJIDEwNAotI2RlZmluZSBBU04xX1JfQk1QU1RSSU5HX0lTX1dST05HX0xFTkdUSAkJIDIxMAorI2RlZmluZSBBU04xX1JfQk1QU1RSSU5HX0lTX1dST05HX0xFTkdUSAkJIDIxNAogI2RlZmluZSBBU04xX1JfQk5fTElCCQkJCQkgMTA1CiAjZGVmaW5lIEFTTjFfUl9CT09MRUFOX0lTX1dST05HX0xFTkdUSAkJCSAxMDYKICNkZWZpbmUgQVNOMV9SX0JVRkZFUl9UT09fU01BTEwJCQkJIDEwNwpAQCAtMTIyOSw2ICsxMjk1LDcgQEAKICNkZWZpbmUgQVNOMV9SX0RFQ09ERV9FUlJPUgkJCQkgMTEwCiAjZGVmaW5lIEFTTjFfUl9ERUNPRElOR19FUlJPUgkJCQkgMTExCiAjZGVmaW5lIEFTTjFfUl9ERVBUSF9FWENFRURFRAkJCQkgMTc0CisjZGVmaW5lIEFTTjFfUl9ESUdFU1RfQU5EX0tFWV9UWVBFX05PVF9TVVBQT1JURUQJIDE5OAogI2RlZmluZSBBU04xX1JfRU5DT0RFX0VSUk9SCQkJCSAxMTIKICNkZWZpbmUgQVNOMV9SX0VSUk9SX0dFVFRJTkdfVElNRQkJCSAxNzMKICNkZWZpbmUgQVNOMV9SX0VSUk9SX0xPQURJTkdfU0VDVElPTgkJCSAxNzIKQEAgLTEyNjIsMTAgKzEzMjksMTAgQEAKICNkZWZpbmUgQVNOMV9SX0lOVEVHRVJfVE9PX0xBUkdFX0ZPUl9MT05HCQkgMTI4CiAjZGVmaW5lIEFTTjFfUl9JTlZBTElEX0JNUFNUUklOR19MRU5HVEgJCQkgMTI5CiAjZGVmaW5lIEFTTjFfUl9JTlZBTElEX0RJR0lUCQkJCSAxMzAKLSNkZWZpbmUgQVNOMV9SX0lOVkFMSURfTUlNRV9UWVBFCQkJIDIwMAorI2RlZmluZSBBU04xX1JfSU5WQUxJRF9NSU1FX1RZUEUJCQkgMjA1CiAjZGVmaW5lIEFTTjFfUl9JTlZBTElEX01PRElGSUVSCQkJCSAxODYKICNkZWZpbmUgQVNOMV9SX0lOVkFMSURfTlVNQkVSCQkJCSAxODcKLSNkZWZpbmUgQVNOMV9SX0lOVkFMSURfT0JKRUNUX0VOQ09ESU5HCQkJIDIxMgorI2RlZmluZSBBU04xX1JfSU5WQUxJRF9PQkpFQ1RfRU5DT0RJTkcJCQkgMjE2CiAjZGVmaW5lIEFTTjFfUl9JTlZBTElEX1NFUEFSQVRPUgkJCSAxMzEKICNkZWZpbmUgQVNOMV9SX0lOVkFMSURfVElNRV9GT1JNQVQJCQkgMTMyCiAjZGVmaW5lIEFTTjFfUl9JTlZBTElEX1VOSVZFUlNBTFNUUklOR19MRU5HVEgJCSAxMzMKQEAgLTEyNzMsOSArMTM0MCw5IEBACiAjZGVmaW5lIEFTTjFfUl9JVl9UT09fTEFSR0UJCQkJIDEzNQogI2RlZmluZSBBU04xX1JfTEVOR1RIX0VSUk9SCQkJCSAxMzYKICNkZWZpbmUgQVNOMV9SX0xJU1RfRVJST1IJCQkJIDE4OAotI2RlZmluZSBBU04xX1JfTUlNRV9OT19DT05URU5UX1RZUEUJCQkgMjAxCi0jZGVmaW5lIEFTTjFfUl9NSU1FX1BBUlNFX0VSUk9SCQkJCSAyMDIKLSNkZWZpbmUgQVNOMV9SX01JTUVfU0lHX1BBUlNFX0VSUk9SCQkJIDIwMworI2RlZmluZSBBU04xX1JfTUlNRV9OT19DT05URU5UX1RZUEUJCQkgMjA2CisjZGVmaW5lIEFTTjFfUl9NSU1FX1BBUlNFX0VSUk9SCQkJCSAyMDcKKyNkZWZpbmUgQVNOMV9SX01JTUVfU0lHX1BBUlNFX0VSUk9SCQkJIDIwOAogI2RlZmluZSBBU04xX1JfTUlTU0lOR19FT0MJCQkJIDEzNwogI2RlZmluZSBBU04xX1JfTUlTU0lOR19TRUNPTkRfTlVNQkVSCQkJIDEzOAogI2RlZmluZSBBU04xX1JfTUlTU0lOR19WQUxVRQkJCQkgMTg5CkBAIC0xMjg1LDExICsxMzUyLDEyIEBACiAjZGVmaW5lIEFTTjFfUl9OT05fSEVYX0NIQVJBQ1RFUlMJCQkgMTQxCiAjZGVmaW5lIEFTTjFfUl9OT1RfQVNDSUlfRk9STUFUCQkJCSAxOTAKICNkZWZpbmUgQVNOMV9SX05PVF9FTk9VR0hfREFUQQkJCQkgMTQyCi0jZGVmaW5lIEFTTjFfUl9OT19DT05URU5UX1RZUEUJCQkJIDIwNAorI2RlZmluZSBBU04xX1JfTk9fQ09OVEVOVF9UWVBFCQkJCSAyMDkKKyNkZWZpbmUgQVNOMV9SX05PX0RFRkFVTFRfRElHRVNUCQkJIDIwMQogI2RlZmluZSBBU04xX1JfTk9fTUFUQ0hJTkdfQ0hPSUNFX1RZUEUJCQkgMTQzCi0jZGVmaW5lIEFTTjFfUl9OT19NVUxUSVBBUlRfQk9EWV9GQUlMVVJFCQkgMjA1Ci0jZGVmaW5lIEFTTjFfUl9OT19NVUxUSVBBUlRfQk9VTkRBUlkJCQkgMjA2Ci0jZGVmaW5lIEFTTjFfUl9OT19TSUdfQ09OVEVOVF9UWVBFCQkJIDIwNworI2RlZmluZSBBU04xX1JfTk9fTVVMVElQQVJUX0JPRFlfRkFJTFVSRQkJIDIxMAorI2RlZmluZSBBU04xX1JfTk9fTVVMVElQQVJUX0JPVU5EQVJZCQkJIDIxMQorI2RlZmluZSBBU04xX1JfTk9fU0lHX0NPTlRFTlRfVFlQRQkJCSAyMTIKICNkZWZpbmUgQVNOMV9SX05VTExfSVNfV1JPTkdfTEVOR1RICQkJIDE0NAogI2RlZmluZSBBU04xX1JfT0JKRUNUX05PVF9BU0NJSV9GT1JNQVQJCQkgMTkxCiAjZGVmaW5lIEFTTjFfUl9PRERfTlVNQkVSX09GX0NIQVJTCQkJIDE0NQpAQCAtMTI5OSw4ICsxMzY3LDggQEAKICNkZWZpbmUgQVNOMV9SX1NFUVVFTkNFX05PVF9DT05TVFJVQ1RFRAkJCSAxNDkKICNkZWZpbmUgQVNOMV9SX1NFUVVFTkNFX09SX1NFVF9ORUVEU19DT05GSUcJCSAxOTIKICNkZWZpbmUgQVNOMV9SX1NIT1JUX0xJTkUJCQkJIDE1MAotI2RlZmluZSBBU04xX1JfU0lHX0lOVkFMSURfTUlNRV9UWVBFCQkJIDIwOAotI2RlZmluZSBBU04xX1JfU1RSRUFNSU5HX05PVF9TVVBQT1JURUQJCQkgMjA5CisjZGVmaW5lIEFTTjFfUl9TSUdfSU5WQUxJRF9NSU1FX1RZUEUJCQkgMjEzCisjZGVmaW5lIEFTTjFfUl9TVFJFQU1JTkdfTk9UX1NVUFBPUlRFRAkJCSAyMDIKICNkZWZpbmUgQVNOMV9SX1NUUklOR19UT09fTE9ORwkJCQkgMTUxCiAjZGVmaW5lIEFTTjFfUl9TVFJJTkdfVE9PX1NIT1JUCQkJCSAxNTIKICNkZWZpbmUgQVNOMV9SX1RBR19WQUxVRV9UT09fSElHSAkJCSAxNTMKQEAgLTEzMTEsMTEgKzEzNzksMTIgQEAKICNkZWZpbmUgQVNOMV9SX1VOQUJMRV9UT19ERUNPREVfUlNBX0tFWQkJCSAxNTcKICNkZWZpbmUgQVNOMV9SX1VOQUJMRV9UT19ERUNPREVfUlNBX1BSSVZBVEVfS0VZCQkgMTU4CiAjZGVmaW5lIEFTTjFfUl9VTkVYUEVDVEVEX0VPQwkJCQkgMTU5Ci0jZGVmaW5lIEFTTjFfUl9VTklWRVJTQUxTVFJJTkdfSVNfV1JPTkdfTEVOR1RICQkgMjExCisjZGVmaW5lIEFTTjFfUl9VTklWRVJTQUxTVFJJTkdfSVNfV1JPTkdfTEVOR1RICQkgMjE1CiAjZGVmaW5lIEFTTjFfUl9VTktOT1dOX0ZPUk1BVAkJCQkgMTYwCiAjZGVmaW5lIEFTTjFfUl9VTktOT1dOX01FU1NBR0VfRElHRVNUX0FMR09SSVRITQkJIDE2MQogI2RlZmluZSBBU04xX1JfVU5LTk9XTl9PQkpFQ1RfVFlQRQkJCSAxNjIKICNkZWZpbmUgQVNOMV9SX1VOS05PV05fUFVCTElDX0tFWV9UWVBFCQkJIDE2MworI2RlZmluZSBBU04xX1JfVU5LTk9XTl9TSUdOQVRVUkVfQUxHT1JJVEhNCQkgMTk5CiAjZGVmaW5lIEFTTjFfUl9VTktOT1dOX1RBRwkJCQkgMTk0CiAjZGVmaW5lIEFTTjFfUl9VTktPV05fRk9STUFUCQkJCSAxOTUKICNkZWZpbmUgQVNOMV9SX1VOU1VQUE9SVEVEX0FOWV9ERUZJTkVEX0JZX1RZUEUJCSAxNjQKQEAgLTEzMjMsNiArMTM5Miw3IEBACiAjZGVmaW5lIEFTTjFfUl9VTlNVUFBPUlRFRF9FTkNSWVBUSU9OX0FMR09SSVRITQkJIDE2NgogI2RlZmluZSBBU04xX1JfVU5TVVBQT1JURURfUFVCTElDX0tFWV9UWVBFCQkgMTY3CiAjZGVmaW5lIEFTTjFfUl9VTlNVUFBPUlRFRF9UWVBFCQkJCSAxOTYKKyNkZWZpbmUgQVNOMV9SX1dST05HX1BVQkxJQ19LRVlfVFlQRQkJCSAyMDAKICNkZWZpbmUgQVNOMV9SX1dST05HX1RBRwkJCQkgMTY4CiAjZGVmaW5lIEFTTjFfUl9XUk9OR19UWVBFCQkJCSAxNjkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVuc3NsL2FzbjFfbWFjLmggYi9pbmNsdWRlL29wZW5zc2wvYXNuMV9tYWMuaAppbmRleCBkOTU4Y2E2Li44N2JkMGU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL29wZW5zc2wvYXNuMV9tYWMuaAorKysgYi9pbmNsdWRlL29wZW5zc2wvYXNuMV9tYWMuaApAQCAtMTUzLDYgKzE1MywxMyBAQAogCQlNX0FTTjFfRDJJX2dldChiLGZ1bmMpOyBcCiAJCX0KIAorI2RlZmluZSBNX0FTTjFfRDJJX2dldF9pbnRfb3B0KGIsZnVuYyx0eXBlKSBcCisJaWYgKChjLnNsZW4gIT0gMCkgJiYgKChNX0FTTjFfbmV4dCAmICh+Vl9BU04xX0NPTlNUUlVDVEVEKSkgXAorCQk9PSAoVl9BU04xX1VOSVZFUlNBTHwodHlwZSkpKSkgXAorCQl7IFwKKwkJTV9BU04xX0QySV9nZXRfaW50KGIsZnVuYyk7IFwKKwkJfQorCiAjZGVmaW5lIE1fQVNOMV9EMklfZ2V0X2ltcChiLGZ1bmMsIHR5cGUpIFwKIAlNX0FTTjFfbmV4dD0oX3RtcCYgVl9BU04xX0NPTlNUUlVDVEVEKXx0eXBlOyBcCiAJYy5xPWMucDsgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVuc3NsL2FzbjF0LmggYi9pbmNsdWRlL29wZW5zc2wvYXNuMXQuaAppbmRleCBhYzE0Zjk0Li5kMjMwZTRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL29wZW5zc2wvYXNuMXQuaAorKysgYi9pbmNsdWRlL29wZW5zc2wvYXNuMXQuaApAQCAtMyw3ICszLDcgQEAKICAqIHByb2plY3QgMjAwMC4KICAqLwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoYykgMjAwMCBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwMC0yMDA1IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMTgsNiArMjE4LDE4IEBACiAJCSNzdG5hbWUgXAogCUFTTjFfSVRFTV9lbmQodG5hbWUpCiAKKyNkZWZpbmUgQVNOMV9OREVGX1NFUVVFTkNFX0VORF9jYihzdG5hbWUsIHRuYW1lKSBcCisJO1wKKwlBU04xX0lURU1fc3RhcnQodG5hbWUpIFwKKwkJQVNOMV9JVFlQRV9OREVGX1NFUVVFTkNFLFwKKwkJVl9BU04xX1NFUVVFTkNFLFwKKwkJdG5hbWUjI19zZXFfdHQsXAorCQlzaXplb2YodG5hbWUjI19zZXFfdHQpIC8gc2l6ZW9mKEFTTjFfVEVNUExBVEUpLFwKKwkJJnRuYW1lIyNfYXV4LFwKKwkJc2l6ZW9mKHN0bmFtZSksXAorCQkjc3RuYW1lIFwKKwlBU04xX0lURU1fZW5kKHRuYW1lKQorCiAKIC8qIFRoaXMgcGFpciBoZWxwcyBkZWNsYXJlIGEgQ0hPSUNFIHR5cGUuIFdlIGNhbiBkbzoKICAqCkBAIC02NTEsOCArNjYzLDEzIEBACiB0eXBlZGVmIGludCBBU04xX2V4X25ld19mdW5jKEFTTjFfVkFMVUUgKipwdmFsLCBjb25zdCBBU04xX0lURU0gKml0KTsKIHR5cGVkZWYgdm9pZCBBU04xX2V4X2ZyZWVfZnVuYyhBU04xX1ZBTFVFICoqcHZhbCwgY29uc3QgQVNOMV9JVEVNICppdCk7CiAKK3R5cGVkZWYgaW50IEFTTjFfZXhfcHJpbnRfZnVuYyhCSU8gKm91dCwgQVNOMV9WQUxVRSAqKnB2YWwsIAorCQkJCQkJaW50IGluZGVudCwgY29uc3QgY2hhciAqZm5hbWUsIAorCQkJCQkJY29uc3QgQVNOMV9QQ1RYICpwY3R4KTsKKwogdHlwZWRlZiBpbnQgQVNOMV9wcmltaXRpdmVfaTJjKEFTTjFfVkFMVUUgKipwdmFsLCB1bnNpZ25lZCBjaGFyICpjb250LCBpbnQgKnB1dHlwZSwgY29uc3QgQVNOMV9JVEVNICppdCk7CiB0eXBlZGVmIGludCBBU04xX3ByaW1pdGl2ZV9jMmkoQVNOMV9WQUxVRSAqKnB2YWwsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbnQsIGludCBsZW4sIGludCB1dHlwZSwgY2hhciAqZnJlZV9jb250LCBjb25zdCBBU04xX0lURU0gKml0KTsKK3R5cGVkZWYgaW50IEFTTjFfcHJpbWl0aXZlX3ByaW50KEJJTyAqb3V0LCBBU04xX1ZBTFVFICoqcHZhbCwgY29uc3QgQVNOMV9JVEVNICppdCwgaW50IGluZGVudCwgY29uc3QgQVNOMV9QQ1RYICpwY3R4KTsKIAogdHlwZWRlZiBzdHJ1Y3QgQVNOMV9DT01QQVRfRlVOQ1Nfc3QgewogCUFTTjFfbmV3X2Z1bmMgKmFzbjFfbmV3OwpAQCAtNjY4LDYgKzY4NSw3IEBACiAJQVNOMV9leF9mcmVlX2Z1bmMgKmFzbjFfZXhfY2xlYXI7CiAJQVNOMV9leF9kMmkgKmFzbjFfZXhfZDJpOwogCUFTTjFfZXhfaTJkICphc24xX2V4X2kyZDsKKwlBU04xX2V4X3ByaW50X2Z1bmMgKmFzbjFfZXhfcHJpbnQ7CiB9IEFTTjFfRVhURVJOX0ZVTkNTOwogCiB0eXBlZGVmIHN0cnVjdCBBU04xX1BSSU1JVElWRV9GVU5DU19zdCB7CkBAIC02NzgsNiArNjk2LDcgQEAKIAlBU04xX2V4X2ZyZWVfZnVuYyAqcHJpbV9jbGVhcjsKIAlBU04xX3ByaW1pdGl2ZV9jMmkgKnByaW1fYzJpOwogCUFTTjFfcHJpbWl0aXZlX2kyYyAqcHJpbV9pMmM7CisJQVNOMV9wcmltaXRpdmVfcHJpbnQgKnByaW1fcHJpbnQ7CiB9IEFTTjFfUFJJTUlUSVZFX0ZVTkNTOwogCiAvKiBUaGlzIGlzIHRoZSBBU04xX0FVWCBzdHJ1Y3R1cmU6IGl0IGhhbmRsZXMgdmFyaW91cwpAQCAtNjk3LDcgKzcxNiw4IEBACiAgKiB0aGVuIGFuIGV4dGVybmFsIHR5cGUgaXMgbW9yZSBhcHByb3ByaWF0ZS4KICAqLwogCi10eXBlZGVmIGludCBBU04xX2F1eF9jYihpbnQgb3BlcmF0aW9uLCBBU04xX1ZBTFVFICoqaW4sIGNvbnN0IEFTTjFfSVRFTSAqaXQpOwordHlwZWRlZiBpbnQgQVNOMV9hdXhfY2IoaW50IG9wZXJhdGlvbiwgQVNOMV9WQUxVRSAqKmluLCBjb25zdCBBU04xX0lURU0gKml0LAorCQkJCXZvaWQgKmV4YXJnKTsKIAogdHlwZWRlZiBzdHJ1Y3QgQVNOMV9BVVhfc3QgewogCXZvaWQgKmFwcF9kYXRhOwpAQCAtNzA4LDYgKzcyOCwyMyBAQAogCWludCBlbmNfb2Zmc2V0OwkJLyogT2Zmc2V0IG9mIEFTTjFfRU5DT0RJTkcgc3RydWN0dXJlICovCiB9IEFTTjFfQVVYOwogCisvKiBGb3IgcHJpbnQgcmVsYXRlZCBjYWxsYmFja3MgZXhhcmcgcG9pbnRzIHRvIHRoaXMgc3RydWN0dXJlICovCit0eXBlZGVmIHN0cnVjdCBBU04xX1BSSU5UX0FSR19zdCB7CisJQklPICpvdXQ7CisJaW50IGluZGVudDsKKwljb25zdCBBU04xX1BDVFggKnBjdHg7Cit9IEFTTjFfUFJJTlRfQVJHOworCisvKiBGb3Igc3RyZWFtaW5nIHJlbGF0ZWQgY2FsbGJhY2tzIGV4YXJnIHBvaW50cyB0byB0aGlzIHN0cnVjdHVyZSAqLwordHlwZWRlZiBzdHJ1Y3QgQVNOMV9TVFJFQU1fQVJHX3N0IHsKKwkvKiBCSU8gdG8gc3RyZWFtIHRocm91Z2ggKi8KKwlCSU8gKm91dDsKKwkvKiBCSU8gd2l0aCBmaWx0ZXJzIGFwcGVuZGVkICovCisJQklPICpuZGVmX2JpbzsKKwkvKiBTdHJlYW1pbmcgSS9PIGJvdW5kYXJ5ICovCisJdW5zaWduZWQgY2hhciAqKmJvdW5kYXJ5OworfSBBU04xX1NUUkVBTV9BUkc7CisKIC8qIEZsYWdzIGluIEFTTjFfQVVYICovCiAKIC8qIFVzZSBhIHJlZmVyZW5jZSBjb3VudCAqLwpAQCAtNzI3LDYgKzc2NCwxMiBAQAogI2RlZmluZSBBU04xX09QX0QySV9QT1NUCTUKICNkZWZpbmUgQVNOMV9PUF9JMkRfUFJFCQk2CiAjZGVmaW5lIEFTTjFfT1BfSTJEX1BPU1QJNworI2RlZmluZSBBU04xX09QX1BSSU5UX1BSRQk4CisjZGVmaW5lIEFTTjFfT1BfUFJJTlRfUE9TVAk5CisjZGVmaW5lIEFTTjFfT1BfU1RSRUFNX1BSRQkxMAorI2RlZmluZSBBU04xX09QX1NUUkVBTV9QT1NUCTExCisjZGVmaW5lIEFTTjFfT1BfREVUQUNIRURfUFJFCTEyCisjZGVmaW5lIEFTTjFfT1BfREVUQUNIRURfUE9TVAkxMwogCiAvKiBNYWNybyB0byBpbXBsZW1lbnQgYSBwcmltaXRpdmUgdHlwZSAqLwogI2RlZmluZSBJTVBMRU1FTlRfQVNOMV9UWVBFKHN0bmFtZSkgSU1QTEVNRU5UX0FTTjFfVFlQRV9leChzdG5hbWUsIHN0bmFtZSwgMCkKQEAgLTc4Miw5ICs4MjUsMjIgQEAKICNkZWZpbmUgSU1QTEVNRU5UX0FTTjFfRlVOQ1RJT05TX0VOQ09ERV9uYW1lKHN0bmFtZSwgaXRuYW1lKSBcCiAJCQlJTVBMRU1FTlRfQVNOMV9GVU5DVElPTlNfRU5DT0RFX2ZuYW1lKHN0bmFtZSwgaXRuYW1lLCBpdG5hbWUpCiAKKyNkZWZpbmUgSU1QTEVNRU5UX1NUQVRJQ19BU04xX0FMTE9DX0ZVTkNUSU9OUyhzdG5hbWUpIFwKKwkJSU1QTEVNRU5UX0FTTjFfQUxMT0NfRlVOQ1RJT05TX3BmbmFtZShzdGF0aWMsIHN0bmFtZSwgc3RuYW1lLCBzdG5hbWUpCisKICNkZWZpbmUgSU1QTEVNRU5UX0FTTjFfQUxMT0NfRlVOQ1RJT05TKHN0bmFtZSkgXAogCQlJTVBMRU1FTlRfQVNOMV9BTExPQ19GVU5DVElPTlNfZm5hbWUoc3RuYW1lLCBzdG5hbWUsIHN0bmFtZSkKIAorI2RlZmluZSBJTVBMRU1FTlRfQVNOMV9BTExPQ19GVU5DVElPTlNfcGZuYW1lKHByZSwgc3RuYW1lLCBpdG5hbWUsIGZuYW1lKSBcCisJcHJlIHN0bmFtZSAqZm5hbWUjI19uZXcodm9pZCkgXAorCXsgXAorCQlyZXR1cm4gKHN0bmFtZSAqKUFTTjFfaXRlbV9uZXcoQVNOMV9JVEVNX3JwdHIoaXRuYW1lKSk7IFwKKwl9IFwKKwlwcmUgdm9pZCBmbmFtZSMjX2ZyZWUoc3RuYW1lICphKSBcCisJeyBcCisJCUFTTjFfaXRlbV9mcmVlKChBU04xX1ZBTFVFICopYSwgQVNOMV9JVEVNX3JwdHIoaXRuYW1lKSk7IFwKKwl9CisKICNkZWZpbmUgSU1QTEVNRU5UX0FTTjFfQUxMT0NfRlVOQ1RJT05TX2ZuYW1lKHN0bmFtZSwgaXRuYW1lLCBmbmFtZSkgXAogCXN0bmFtZSAqZm5hbWUjI19uZXcodm9pZCkgXAogCXsgXApAQCAtODM0LDYgKzg5MCwxNyBAQAogICAgICAgICByZXR1cm4gQVNOMV9pdGVtX2R1cChBU04xX0lURU1fcnB0cihzdG5hbWUpLCB4KTsgXAogICAgICAgICB9CiAKKyNkZWZpbmUgSU1QTEVNRU5UX0FTTjFfUFJJTlRfRlVOQ1RJT04oc3RuYW1lKSBcCisJSU1QTEVNRU5UX0FTTjFfUFJJTlRfRlVOQ1RJT05fZm5hbWUoc3RuYW1lLCBzdG5hbWUsIHN0bmFtZSkKKworI2RlZmluZSBJTVBMRU1FTlRfQVNOMV9QUklOVF9GVU5DVElPTl9mbmFtZShzdG5hbWUsIGl0bmFtZSwgZm5hbWUpIFwKKwlpbnQgZm5hbWUjI19wcmludF9jdHgoQklPICpvdXQsIHN0bmFtZSAqeCwgaW50IGluZGVudCwgXAorCQkJCQkJY29uc3QgQVNOMV9QQ1RYICpwY3R4KSBcCisJeyBcCisJCXJldHVybiBBU04xX2l0ZW1fcHJpbnQob3V0LCAoQVNOMV9WQUxVRSAqKXgsIGluZGVudCwgXAorCQkJQVNOMV9JVEVNX3JwdHIoaXRuYW1lKSwgcGN0eCk7IFwKKwl9IAorCiAjZGVmaW5lIElNUExFTUVOVF9BU04xX0ZVTkNUSU9OU19jb25zdChuYW1lKSBcCiAJCUlNUExFTUVOVF9BU04xX0ZVTkNUSU9OU19jb25zdF9mbmFtZShuYW1lLCBuYW1lLCBuYW1lKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW5zc2wvYmlvLmggYi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKaW5kZXggZWJiNDI3OC4uMTUyODAyZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisrKyBiL2luY2x1ZGUvb3BlbnNzbC9iaW8uaApAQCAtOTUsNiArOTUsNyBAQAogI2RlZmluZSBCSU9fVFlQRV9CSU8JCSgxOXwweDA0MDApCQkvKiAoaGFsZiBhKSBCSU8gcGFpciAqLwogI2RlZmluZSBCSU9fVFlQRV9MSU5FQlVGRkVSCSgyMHwweDAyMDApCQkvKiBmaWx0ZXIgKi8KICNkZWZpbmUgQklPX1RZUEVfREdSQU0JCSgyMXwweDA0MDB8MHgwMTAwKQorI2RlZmluZSBCSU9fVFlQRV9BU04xIAkJKDIyfDB4MDIwMCkJCS8qIGZpbHRlciAqLwogI2RlZmluZSBCSU9fVFlQRV9DT01QIAkJKDIzfDB4MDIwMCkJCS8qIGZpbHRlciAqLwogCiAjZGVmaW5lIEJJT19UWVBFX0RFU0NSSVBUT1IJMHgwMTAwCS8qIHNvY2tldCwgZmQsIGNvbm5lY3Qgb3IgYWNjZXB0ICovCkBAIC0yNjUsNyArMjY2LDYgQEAKIAogdHlwZWRlZiB2b2lkIGJpb19pbmZvX2NiKHN0cnVjdCBiaW9fc3QgKiwgaW50LCBjb25zdCBjaGFyICosIGludCwgbG9uZywgbG9uZyk7CiAKLSNpZm5kZWYgT1BFTlNTTF9TWVNfV0lOMTYKIHR5cGVkZWYgc3RydWN0IGJpb19tZXRob2Rfc3QKIAl7CiAJaW50IHR5cGU7CkBAIC0yNzksMjEgKzI3OSw2IEBACiAJaW50ICgqZGVzdHJveSkoQklPICopOwogICAgICAgICBsb25nICgqY2FsbGJhY2tfY3RybCkoQklPICosIGludCwgYmlvX2luZm9fY2IgKik7CiAJfSBCSU9fTUVUSE9EOwotI2Vsc2UKLXR5cGVkZWYgc3RydWN0IGJpb19tZXRob2Rfc3QKLQl7Ci0JaW50IHR5cGU7Ci0JY29uc3QgY2hhciAqbmFtZTsKLQlpbnQgKF9mYXIgKmJ3cml0ZSkoKTsKLQlpbnQgKF9mYXIgKmJyZWFkKSgpOwotCWludCAoX2ZhciAqYnB1dHMpKCk7Ci0JaW50IChfZmFyICpiZ2V0cykoKTsKLQlsb25nIChfZmFyICpjdHJsKSgpOwotCWludCAoX2ZhciAqY3JlYXRlKSgpOwotCWludCAoX2ZhciAqZGVzdHJveSkoKTsKLQlsb25nIChfZmFyICpjYWxsYmFja19jdHJsKSgpOwotCX0gQklPX01FVEhPRDsKLSNlbmRpZgogCiBzdHJ1Y3QgYmlvX3N0CiAJewpAQCAtMzM0LDYgKzMxOSw5IEBACiAJaW50IG9idWZfb2ZmOwkJLyogd3JpdGUvcmVhZCBvZmZzZXQgKi8KIAl9IEJJT19GX0JVRkZFUl9DVFg7CiAKKy8qIFByZWZpeCBhbmQgc3VmZml4IGNhbGxiYWNrIGluIEFTTjEgQklPICovCit0eXBlZGVmIGludCBhc24xX3BzX2Z1bmMoQklPICpiLCB1bnNpZ25lZCBjaGFyICoqcGJ1ZiwgaW50ICpwbGVuLCB2b2lkICpwYXJnKTsKKwogLyogY29ubmVjdCBCSU8gc3R1ZmYgKi8KICNkZWZpbmUgQklPX0NPTk5fU19CRUZPUkUJCTEKICNkZWZpbmUgQklPX0NPTk5fU19HRVRfSVAJCTIKQEAgLTM5Niw2ICszODQsMTMgQEAKICNkZWZpbmUgQklPX0NfUkVTRVRfUkVBRF9SRVFVRVNUCQkxNDcKICNkZWZpbmUgQklPX0NfU0VUX01EX0NUWAkJCTE0OAogCisjZGVmaW5lIEJJT19DX1NFVF9QUkVGSVgJCQkxNDkKKyNkZWZpbmUgQklPX0NfR0VUX1BSRUZJWAkJCTE1MAorI2RlZmluZSBCSU9fQ19TRVRfU1VGRklYCQkJMTUxCisjZGVmaW5lIEJJT19DX0dFVF9TVUZGSVgJCQkxNTIKKworI2RlZmluZSBCSU9fQ19TRVRfRVhfQVJHCQkJMTUzCisjZGVmaW5lIEJJT19DX0dFVF9FWF9BUkcJCQkxNTQKIAogI2RlZmluZSBCSU9fc2V0X2FwcF9kYXRhKHMsYXJnKQkJQklPX3NldF9leF9kYXRhKHMsMCxhcmcpCiAjZGVmaW5lIEJJT19nZXRfYXBwX2RhdGEocykJCUJJT19nZXRfZXhfZGF0YShzLDApCkBAIC01NTksMjIgKzU1NCwyMSBAQAogdW5zaWduZWQgbG9uZyBCSU9fbnVtYmVyX3JlYWQoQklPICpiaW8pOwogdW5zaWduZWQgbG9uZyBCSU9fbnVtYmVyX3dyaXR0ZW4oQklPICpiaW8pOwogCisvKiBGb3IgQklPX2ZfYXNuMSgpICovCitpbnQgQklPX2FzbjFfc2V0X3ByZWZpeChCSU8gKmIsIGFzbjFfcHNfZnVuYyAqcHJlZml4LAorCQkJCQlhc24xX3BzX2Z1bmMgKnByZWZpeF9mcmVlKTsKK2ludCBCSU9fYXNuMV9nZXRfcHJlZml4KEJJTyAqYiwgYXNuMV9wc19mdW5jICoqcHByZWZpeCwKKwkJCQkJYXNuMV9wc19mdW5jICoqcHByZWZpeF9mcmVlKTsKK2ludCBCSU9fYXNuMV9zZXRfc3VmZml4KEJJTyAqYiwgYXNuMV9wc19mdW5jICpzdWZmaXgsCisJCQkJCWFzbjFfcHNfZnVuYyAqc3VmZml4X2ZyZWUpOworaW50IEJJT19hc24xX2dldF9zdWZmaXgoQklPICpiLCBhc24xX3BzX2Z1bmMgKipwc3VmZml4LAorCQkJCQlhc24xX3BzX2Z1bmMgKipwc3VmZml4X2ZyZWUpOworCiAjIGlmbmRlZiBPUEVOU1NMX05PX0ZQX0FQSQotIyAgaWYgZGVmaW5lZChPUEVOU1NMX1NZU19XSU4xNikgJiYgZGVmaW5lZChfV0lORExMKQotQklPX01FVEhPRCAqQklPX3NfZmlsZV9pbnRlcm5hbCh2b2lkKTsKLUJJTyAqQklPX25ld19maWxlX2ludGVybmFsKGNoYXIgKmZpbGVuYW1lLCBjaGFyICptb2RlKTsKLUJJTyAqQklPX25ld19mcF9pbnRlcm5hbChGSUxFICpzdHJlYW0sIGludCBjbG9zZV9mbGFnKTsKLSMgICAgZGVmaW5lIEJJT19zX2ZpbGUJQklPX3NfZmlsZV9pbnRlcm5hbAotIyAgICBkZWZpbmUgQklPX25ld19maWxlCUJJT19uZXdfZmlsZV9pbnRlcm5hbAotIyAgICBkZWZpbmUgQklPX25ld19mcAlCSU9fbmV3X2ZwX2ludGVybmFsCi0jICBlbHNlIC8qIEZQX0FQSSAqLwogQklPX01FVEhPRCAqQklPX3NfZmlsZSh2b2lkICk7CiBCSU8gKkJJT19uZXdfZmlsZShjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqbW9kZSk7CiBCSU8gKkJJT19uZXdfZnAoRklMRSAqc3RyZWFtLCBpbnQgY2xvc2VfZmxhZyk7Ci0jICAgIGRlZmluZSBCSU9fc19maWxlX2ludGVybmFsCQlCSU9fc19maWxlCi0jICAgIGRlZmluZSBCSU9fbmV3X2ZpbGVfaW50ZXJuYWwJQklPX25ld19maWxlCi0jICAgIGRlZmluZSBCSU9fbmV3X2ZwX2ludGVybmFsCQlCSU9fc19maWxlCi0jICBlbmRpZiAvKiBGUF9BUEkgKi8KKyMgZGVmaW5lIEJJT19zX2ZpbGVfaW50ZXJuYWwJQklPX3NfZmlsZQogIyBlbmRpZgogQklPICoJQklPX25ldyhCSU9fTUVUSE9EICp0eXBlKTsKIGludAlCSU9fc2V0KEJJTyAqYSxCSU9fTUVUSE9EICp0eXBlKTsKQEAgLTYwMywxMyArNTk3LDggQEAKIGludCBCSU9fbndyaXRlMChCSU8gKmJpbywgY2hhciAqKmJ1Zik7CiBpbnQgQklPX253cml0ZShCSU8gKmJpbywgY2hhciAqKmJ1ZiwgaW50IG51bSk7CiAKLSNpZm5kZWYgT1BFTlNTTF9TWVNfV0lOMTYKIGxvbmcgQklPX2RlYnVnX2NhbGxiYWNrKEJJTyAqYmlvLGludCBjbWQsY29uc3QgY2hhciAqYXJncCxpbnQgYXJnaSwKIAlsb25nIGFyZ2wsbG9uZyByZXQpOwotI2Vsc2UKLWxvbmcgX2ZhciBfbG9hZGRzIEJJT19kZWJ1Z19jYWxsYmFjayhCSU8gKmJpbyxpbnQgY21kLGNvbnN0IGNoYXIgKmFyZ3AsaW50IGFyZ2ksCi0JbG9uZyBhcmdsLGxvbmcgcmV0KTsKLSNlbmRpZgogCiBCSU9fTUVUSE9EICpCSU9fc19tZW0odm9pZCk7CiBCSU8gKkJJT19uZXdfbWVtX2J1Zih2b2lkICpidWYsIGludCBsZW4pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVuc3NsL2JuLmggYi9pbmNsdWRlL29wZW5zc2wvYm4uaAppbmRleCBmMTcxOWE1Li5lNDg0YjdmIDEwMDY0NAotLS0gYS9pbmNsdWRlL29wZW5zc2wvYm4uaAorKysgYi9pbmNsdWRlL29wZW5zc2wvYm4uaApAQCAtNTYsNiArNTYsNTkgQEAKICAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCiAgKi8KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKyAqCisgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisgKgorICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisgKgorICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworICogICAgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorICoKKyAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIENvcHlyaWdodCAyMDAyIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQUxMIFJJR0hUUyBSRVNFUlZFRC4KICAqCiAgKiBQb3J0aW9ucyBvZiB0aGUgYXR0YWNoZWQgc29mdHdhcmUgKCJDb250cmlidXRpb24iKSBhcmUgZGV2ZWxvcGVkIGJ5IApAQCAtNzcsNiArMTMwLDcgQEAKICNpbmNsdWRlIDxzdGRpby5oPiAvKiBGSUxFICovCiAjZW5kaWYKICNpbmNsdWRlIDxvcGVuc3NsL29zc2xfdHlwLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KIAogI2lmZGVmICBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CkBAIC05NCw5ICsxNDgsMTEgQEAKIC8qICNkZWZpbmUgQk5fREVCVUcgKi8KIC8qICNkZWZpbmUgQk5fREVCVUdfUkFORCAqLwogCisjaWZuZGVmIE9QRU5TU0xfU01BTExfRk9PVFBSSU5UCiAjZGVmaW5lIEJOX01VTF9DT01CQQogI2RlZmluZSBCTl9TUVJfQ09NQkEKICNkZWZpbmUgQk5fUkVDVVJTSU9OCisjZW5kaWYKIAogLyogVGhpcyBuZXh0IG9wdGlvbiB1c2VzIHRoZSBDIGxpYnJhcmllcyAoMiB3b3JkKS8oMSB3b3JkKSBmdW5jdGlvbi4KICAqIElmIGl0IGlzIG5vdCBkZWZpbmVkLCBJIHVzZSBteSBDIHZlcnNpb24gKHdoaWNoIGlzIHNsb3dlcikuCkBAIC0xMzcsNiArMTkzLDggQEAKICNkZWZpbmUgQk5fREVDX0ZNVDEJIiVsdSIKICNkZWZpbmUgQk5fREVDX0ZNVDIJIiUwMTlsdSIKICNkZWZpbmUgQk5fREVDX05VTQkxOQorI2RlZmluZSBCTl9IRVhfRk1UMQkiJWxYIgorI2RlZmluZSBCTl9IRVhfRk1UMgkiJTAxNmxYIgogI2VuZGlmCiAKIC8qIFRoaXMgaXMgd2hlcmUgdGhlIGxvbmcgbG9uZyBkYXRhIHR5cGUgaXMgNjQgYml0cywgYnV0IGxvbmcgaXMgMzIuCkBAIC0xNjIsODMgKzIyMCwzNyBAQAogI2RlZmluZSBCTl9ERUNfRk1UMQkiJWxsdSIKICNkZWZpbmUgQk5fREVDX0ZNVDIJIiUwMTlsbHUiCiAjZGVmaW5lIEJOX0RFQ19OVU0JMTkKKyNkZWZpbmUgQk5fSEVYX0ZNVDEJIiVsbFgiCisjZGVmaW5lIEJOX0hFWF9GTVQyCSIlMDE2bGxYIgogI2VuZGlmCiAKICNpZmRlZiBUSElSVFlfVFdPX0JJVAogI2lmZGVmIEJOX0xMT05HCi0jIGlmIGRlZmluZWQoT1BFTlNTTF9TWVNfV0lOMzIpICYmICFkZWZpbmVkKF9fR05VQ19fKQorIyBpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19HTlVDX18pCiAjICBkZWZpbmUgQk5fVUxMT05HCXVuc2lnbmVkIF9faW50NjQKKyMgIGRlZmluZSBCTl9NQVNLCSgweGZmZmZmZmZmZmZmZmZmZmZJNjQpCiAjIGVsc2UKICMgIGRlZmluZSBCTl9VTExPTkcJdW5zaWduZWQgbG9uZyBsb25nCisjICBkZWZpbmUgQk5fTUFTSwkoMHhmZmZmZmZmZmZmZmZmZmZmTEwpCiAjIGVuZGlmCiAjZW5kaWYKLSNkZWZpbmUgQk5fVUxPTkcJdW5zaWduZWQgbG9uZwotI2RlZmluZSBCTl9MT05HCQlsb25nCisjZGVmaW5lIEJOX1VMT05HCXVuc2lnbmVkIGludAorI2RlZmluZSBCTl9MT05HCQlpbnQKICNkZWZpbmUgQk5fQklUUwkJNjQKICNkZWZpbmUgQk5fQllURVMJNAogI2RlZmluZSBCTl9CSVRTMgkzMgogI2RlZmluZSBCTl9CSVRTNAkxNgotI2lmZGVmIE9QRU5TU0xfU1lTX1dJTjMyCi0vKiBWQysrIGRvZXNuJ3QgbGlrZSB0aGUgTEwgc3VmZml4ICovCi0jZGVmaW5lIEJOX01BU0sJCSgweGZmZmZmZmZmZmZmZmZmZmZMKQotI2Vsc2UKLSNkZWZpbmUgQk5fTUFTSwkJKDB4ZmZmZmZmZmZmZmZmZmZmZkxMKQotI2VuZGlmCiAjZGVmaW5lIEJOX01BU0syCSgweGZmZmZmZmZmTCkKICNkZWZpbmUgQk5fTUFTSzJsCSgweGZmZmYpCiAjZGVmaW5lIEJOX01BU0syaDEJKDB4ZmZmZjgwMDBMKQogI2RlZmluZSBCTl9NQVNLMmgJKDB4ZmZmZjAwMDBMKQogI2RlZmluZSBCTl9UQklUCQkoMHg4MDAwMDAwMEwpCiAjZGVmaW5lIEJOX0RFQ19DT05WCSgxMDAwMDAwMDAwTCkKLSNkZWZpbmUgQk5fREVDX0ZNVDEJIiVsdSIKLSNkZWZpbmUgQk5fREVDX0ZNVDIJIiUwOWx1IgorI2RlZmluZSBCTl9ERUNfRk1UMQkiJXUiCisjZGVmaW5lIEJOX0RFQ19GTVQyCSIlMDl1IgogI2RlZmluZSBCTl9ERUNfTlVNCTkKLSNlbmRpZgotCi0jaWZkZWYgU0lYVEVFTl9CSVQKLSNpZm5kZWYgQk5fRElWMlcKLSNkZWZpbmUgQk5fRElWMlcKLSNlbmRpZgotI2RlZmluZSBCTl9VTExPTkcJdW5zaWduZWQgbG9uZwotI2RlZmluZSBCTl9VTE9ORwl1bnNpZ25lZCBzaG9ydAotI2RlZmluZSBCTl9MT05HCQlzaG9ydAotI2RlZmluZSBCTl9CSVRTCQkzMgotI2RlZmluZSBCTl9CWVRFUwkyCi0jZGVmaW5lIEJOX0JJVFMyCTE2Ci0jZGVmaW5lIEJOX0JJVFM0CTgKLSNkZWZpbmUgQk5fTUFTSwkJKDB4ZmZmZmZmZmYpCi0jZGVmaW5lIEJOX01BU0syCSgweGZmZmYpCi0jZGVmaW5lIEJOX01BU0sybAkoMHhmZikKLSNkZWZpbmUgQk5fTUFTSzJoMQkoMHhmZjgwKQotI2RlZmluZSBCTl9NQVNLMmgJKDB4ZmYwMCkKLSNkZWZpbmUgQk5fVEJJVAkJKDB4ODAwMCkKLSNkZWZpbmUgQk5fREVDX0NPTlYJKDEwMDAwMCkKLSNkZWZpbmUgQk5fREVDX0ZNVDEJIiV1IgotI2RlZmluZSBCTl9ERUNfRk1UMgkiJTA1dSIKLSNkZWZpbmUgQk5fREVDX05VTQk1Ci0jZW5kaWYKLQotI2lmZGVmIEVJR0hUX0JJVAotI2lmbmRlZiBCTl9ESVYyVwotI2RlZmluZSBCTl9ESVYyVwotI2VuZGlmCi0jZGVmaW5lIEJOX1VMTE9ORwl1bnNpZ25lZCBzaG9ydAotI2RlZmluZSBCTl9VTE9ORwl1bnNpZ25lZCBjaGFyCi0jZGVmaW5lIEJOX0xPTkcJCWNoYXIKLSNkZWZpbmUgQk5fQklUUwkJMTYKLSNkZWZpbmUgQk5fQllURVMJMQotI2RlZmluZSBCTl9CSVRTMgk4Ci0jZGVmaW5lIEJOX0JJVFM0CTQKLSNkZWZpbmUgQk5fTUFTSwkJKDB4ZmZmZikKLSNkZWZpbmUgQk5fTUFTSzIJKDB4ZmYpCi0jZGVmaW5lIEJOX01BU0sybAkoMHhmKQotI2RlZmluZSBCTl9NQVNLMmgxCSgweGY4KQotI2RlZmluZSBCTl9NQVNLMmgJKDB4ZjApCi0jZGVmaW5lIEJOX1RCSVQJCSgweDgwKQotI2RlZmluZSBCTl9ERUNfQ09OVgkoMTAwKQotI2RlZmluZSBCTl9ERUNfRk1UMQkiJXUiCi0jZGVmaW5lIEJOX0RFQ19GTVQyCSIlMDJ1IgotI2RlZmluZSBCTl9ERUNfTlVNCTIKKyNkZWZpbmUgQk5fSEVYX0ZNVDEJIiVYIgorI2RlZmluZSBCTl9IRVhfRk1UMgkiJTA4WCIKICNlbmRpZgogCiAjZGVmaW5lIEJOX0RFRkFVTFRfQklUUwkxMjgwCkBAIC0zMDMsMTIgKzMxNSw4IEBACiAJQklHTlVNIE47ICAgICAgLyogVGhlIG1vZHVsdXMgKi8KIAlCSUdOVU0gTmk7ICAgICAvKiBSKigxL1IgbW9kIE4pIC0gTipOaSA9IDEKIAkgICAgICAgICAgICAgICAgKiAoTmkgaXMgb25seSBzdG9yZWQgZm9yIGJpZ251bSBhbGdvcml0aG0pICovCi0jaWYgMAotCS8qIE9wZW5TU0wgMC45LjkgcHJldmlldzogKi8KLQlCTl9VTE9ORyBuMFsyXTsvKiBsZWFzdCBzaWduaWZpY2FudCB3b3JkKHMpIG9mIE5pICovCi0jZWxzZQotCUJOX1VMT05HIG4wOyAgIC8qIGxlYXN0IHNpZ25pZmljYW50IHdvcmQgb2YgTmkgKi8KLSNlbmRpZgorCUJOX1VMT05HIG4wWzJdOy8qIGxlYXN0IHNpZ25pZmljYW50IHdvcmQocykgb2YgTmk7CisJICAgICAgICAgICAgICAgICAgKHR5cGUgY2hhbmdlZCB3aXRoIDAuOS45LCB3YXMgIkJOX1VMT05HIG4wOyIgYmVmb3JlKSAqLwogCWludCBmbGFnczsKIAl9OwogCkBAIC01MDQsNiArNTEyLDcgQEAKIGNoYXIgKglCTl9ibjJkZWMoY29uc3QgQklHTlVNICphKTsKIGludCAJQk5faGV4MmJuKEJJR05VTSAqKmEsIGNvbnN0IGNoYXIgKnN0cik7CiBpbnQgCUJOX2RlYzJibihCSUdOVU0gKiphLCBjb25zdCBjaGFyICpzdHIpOworaW50CUJOX2FzYzJibihCSUdOVU0gKiphLCBjb25zdCBjaGFyICpzdHIpOwogaW50CUJOX2djZChCSUdOVU0gKnIsY29uc3QgQklHTlVNICphLGNvbnN0IEJJR05VTSAqYixCTl9DVFggKmN0eCk7CiBpbnQJQk5fa3JvbmVja2VyKGNvbnN0IEJJR05VTSAqYSxjb25zdCBCSUdOVU0gKmIsQk5fQ1RYICpjdHgpOyAvKiByZXR1cm5zIC0yIGZvciBlcnJvciAqLwogQklHTlVNICpCTl9tb2RfaW52ZXJzZShCSUdOVU0gKnJldCwKQEAgLTUzMSwxNyArNTQwLDYgQEAKIGludAlCTl9pc19wcmltZV9mYXN0dGVzdF9leChjb25zdCBCSUdOVU0gKnAsaW50IG5jaGVja3MsIEJOX0NUWCAqY3R4LAogCQlpbnQgZG9fdHJpYWxfZGl2aXNpb24sIEJOX0dFTkNCICpjYik7CiAKLWludCBCTl9YOTMxX2dlbmVyYXRlX1hwcShCSUdOVU0gKlhwLCBCSUdOVU0gKlhxLCBpbnQgbmJpdHMsIEJOX0NUWCAqY3R4KTsKLQotaW50IEJOX1g5MzFfZGVyaXZlX3ByaW1lX2V4KEJJR05VTSAqcCwgQklHTlVNICpwMSwgQklHTlVNICpwMiwKLQkJCWNvbnN0IEJJR05VTSAqWHAsIGNvbnN0IEJJR05VTSAqWHAxLCBjb25zdCBCSUdOVU0gKlhwMiwKLQkJCWNvbnN0IEJJR05VTSAqZSwgQk5fQ1RYICpjdHgsIEJOX0dFTkNCICpjYik7Ci1pbnQgQk5fWDkzMV9nZW5lcmF0ZV9wcmltZV9leChCSUdOVU0gKnAsIEJJR05VTSAqcDEsIEJJR05VTSAqcDIsCi0JCQlCSUdOVU0gKlhwMSwgQklHTlVNICpYcDIsCi0JCQljb25zdCBCSUdOVU0gKlhwLAotCQkJY29uc3QgQklHTlVNICplLCBCTl9DVFggKmN0eCwKLQkJCUJOX0dFTkNCICpjYik7Ci0KIEJOX01PTlRfQ1RYICpCTl9NT05UX0NUWF9uZXcodm9pZCApOwogdm9pZCBCTl9NT05UX0NUWF9pbml0KEJOX01PTlRfQ1RYICpjdHgpOwogaW50IEJOX21vZF9tdWxfbW9udGdvbWVyeShCSUdOVU0gKnIsY29uc3QgQklHTlVNICphLGNvbnN0IEJJR05VTSAqYiwKQEAgLTU2MCwxOSArNTU4LDIyIEBACiAjZGVmaW5lCUJOX0JMSU5ESU5HX05PX1VQREFURQkweDAwMDAwMDAxCiAjZGVmaW5lCUJOX0JMSU5ESU5HX05PX1JFQ1JFQVRFCTB4MDAwMDAwMDIKIAotQk5fQkxJTkRJTkcgKkJOX0JMSU5ESU5HX25ldyhjb25zdCBCSUdOVU0gKkEsIGNvbnN0IEJJR05VTSAqQWksIC8qIGNvbnN0ICovIEJJR05VTSAqbW9kKTsKK0JOX0JMSU5ESU5HICpCTl9CTElORElOR19uZXcoY29uc3QgQklHTlVNICpBLCBjb25zdCBCSUdOVU0gKkFpLCBCSUdOVU0gKm1vZCk7CiB2b2lkIEJOX0JMSU5ESU5HX2ZyZWUoQk5fQkxJTkRJTkcgKmIpOwogaW50IEJOX0JMSU5ESU5HX3VwZGF0ZShCTl9CTElORElORyAqYixCTl9DVFggKmN0eCk7CiBpbnQgQk5fQkxJTkRJTkdfY29udmVydChCSUdOVU0gKm4sIEJOX0JMSU5ESU5HICpiLCBCTl9DVFggKmN0eCk7CiBpbnQgQk5fQkxJTkRJTkdfaW52ZXJ0KEJJR05VTSAqbiwgQk5fQkxJTkRJTkcgKmIsIEJOX0NUWCAqY3R4KTsKIGludCBCTl9CTElORElOR19jb252ZXJ0X2V4KEJJR05VTSAqbiwgQklHTlVNICpyLCBCTl9CTElORElORyAqYiwgQk5fQ1RYICopOwogaW50IEJOX0JMSU5ESU5HX2ludmVydF9leChCSUdOVU0gKm4sIGNvbnN0IEJJR05VTSAqciwgQk5fQkxJTkRJTkcgKmIsIEJOX0NUWCAqKTsKKyNpZm5kZWYgT1BFTlNTTF9OT19ERVBSRUNBVEVECiB1bnNpZ25lZCBsb25nIEJOX0JMSU5ESU5HX2dldF90aHJlYWRfaWQoY29uc3QgQk5fQkxJTkRJTkcgKik7CiB2b2lkIEJOX0JMSU5ESU5HX3NldF90aHJlYWRfaWQoQk5fQkxJTkRJTkcgKiwgdW5zaWduZWQgbG9uZyk7CisjZW5kaWYKK0NSWVBUT19USFJFQURJRCAqQk5fQkxJTkRJTkdfdGhyZWFkX2lkKEJOX0JMSU5ESU5HICopOwogdW5zaWduZWQgbG9uZyBCTl9CTElORElOR19nZXRfZmxhZ3MoY29uc3QgQk5fQkxJTkRJTkcgKik7CiB2b2lkIEJOX0JMSU5ESU5HX3NldF9mbGFncyhCTl9CTElORElORyAqLCB1bnNpZ25lZCBsb25nKTsKIEJOX0JMSU5ESU5HICpCTl9CTElORElOR19jcmVhdGVfcGFyYW0oQk5fQkxJTkRJTkcgKmIsCi0JY29uc3QgQklHTlVNICplLCAvKiBjb25zdCAqLyBCSUdOVU0gKm0sIEJOX0NUWCAqY3R4LAorCWNvbnN0IEJJR05VTSAqZSwgQklHTlVNICptLCBCTl9DVFggKmN0eCwKIAlpbnQgKCpibl9tb2RfZXhwKShCSUdOVU0gKnIsIGNvbnN0IEJJR05VTSAqYSwgY29uc3QgQklHTlVNICpwLAogCQkJICBjb25zdCBCSUdOVU0gKm0sIEJOX0NUWCAqY3R4LCBCTl9NT05UX0NUWCAqbV9jdHgpLAogCUJOX01PTlRfQ1RYICptX2N0eCk7CkBAIC02MjUsMjQgKzYyNiwyNCBAQAogICogICAgIHRecFswXSArIHRecFsxXSArIC4uLiArIHRecFtrXQogICogd2hlcmUgbSA9IHBbMF0gPiBwWzFdID4gLi4uID4gcFtrXSA9IDAuCiAgKi8KLWludAlCTl9HRjJtX21vZF9hcnIoQklHTlVNICpyLCBjb25zdCBCSUdOVU0gKmEsIGNvbnN0IHVuc2lnbmVkIGludCBwW10pOworaW50CUJOX0dGMm1fbW9kX2FycihCSUdOVU0gKnIsIGNvbnN0IEJJR05VTSAqYSwgY29uc3QgaW50IHBbXSk7CiAJLyogciA9IGEgbW9kIHAgKi8KIGludAlCTl9HRjJtX21vZF9tdWxfYXJyKEJJR05VTSAqciwgY29uc3QgQklHTlVNICphLCBjb25zdCBCSUdOVU0gKmIsCi0JY29uc3QgdW5zaWduZWQgaW50IHBbXSwgQk5fQ1RYICpjdHgpOyAvKiByID0gKGEgKiBiKSBtb2QgcCAqLwotaW50CUJOX0dGMm1fbW9kX3Nxcl9hcnIoQklHTlVNICpyLCBjb25zdCBCSUdOVU0gKmEsIGNvbnN0IHVuc2lnbmVkIGludCBwW10sCisJY29uc3QgaW50IHBbXSwgQk5fQ1RYICpjdHgpOyAvKiByID0gKGEgKiBiKSBtb2QgcCAqLworaW50CUJOX0dGMm1fbW9kX3Nxcl9hcnIoQklHTlVNICpyLCBjb25zdCBCSUdOVU0gKmEsIGNvbnN0IGludCBwW10sCiAJQk5fQ1RYICpjdHgpOyAvKiByID0gKGEgKiBhKSBtb2QgcCAqLwotaW50CUJOX0dGMm1fbW9kX2ludl9hcnIoQklHTlVNICpyLCBjb25zdCBCSUdOVU0gKmIsIGNvbnN0IHVuc2lnbmVkIGludCBwW10sCitpbnQJQk5fR0YybV9tb2RfaW52X2FycihCSUdOVU0gKnIsIGNvbnN0IEJJR05VTSAqYiwgY29uc3QgaW50IHBbXSwKIAlCTl9DVFggKmN0eCk7IC8qIHIgPSAoMSAvIGIpIG1vZCBwICovCiBpbnQJQk5fR0YybV9tb2RfZGl2X2FycihCSUdOVU0gKnIsIGNvbnN0IEJJR05VTSAqYSwgY29uc3QgQklHTlVNICpiLAotCWNvbnN0IHVuc2lnbmVkIGludCBwW10sIEJOX0NUWCAqY3R4KTsgLyogciA9IChhIC8gYikgbW9kIHAgKi8KKwljb25zdCBpbnQgcFtdLCBCTl9DVFggKmN0eCk7IC8qIHIgPSAoYSAvIGIpIG1vZCBwICovCiBpbnQJQk5fR0YybV9tb2RfZXhwX2FycihCSUdOVU0gKnIsIGNvbnN0IEJJR05VTSAqYSwgY29uc3QgQklHTlVNICpiLAotCWNvbnN0IHVuc2lnbmVkIGludCBwW10sIEJOX0NUWCAqY3R4KTsgLyogciA9IChhIF4gYikgbW9kIHAgKi8KKwljb25zdCBpbnQgcFtdLCBCTl9DVFggKmN0eCk7IC8qIHIgPSAoYSBeIGIpIG1vZCBwICovCiBpbnQJQk5fR0YybV9tb2Rfc3FydF9hcnIoQklHTlVNICpyLCBjb25zdCBCSUdOVU0gKmEsCi0JY29uc3QgdW5zaWduZWQgaW50IHBbXSwgQk5fQ1RYICpjdHgpOyAvKiByID0gc3FydChhKSBtb2QgcCAqLworCWNvbnN0IGludCBwW10sIEJOX0NUWCAqY3R4KTsgLyogciA9IHNxcnQoYSkgbW9kIHAgKi8KIGludAlCTl9HRjJtX21vZF9zb2x2ZV9xdWFkX2FycihCSUdOVU0gKnIsIGNvbnN0IEJJR05VTSAqYSwKLQljb25zdCB1bnNpZ25lZCBpbnQgcFtdLCBCTl9DVFggKmN0eCk7IC8qIHJeMiArIHIgPSBhIG1vZCBwICovCi1pbnQJQk5fR0YybV9wb2x5MmFycihjb25zdCBCSUdOVU0gKmEsIHVuc2lnbmVkIGludCBwW10sIGludCBtYXgpOwotaW50CUJOX0dGMm1fYXJyMnBvbHkoY29uc3QgdW5zaWduZWQgaW50IHBbXSwgQklHTlVNICphKTsKKwljb25zdCBpbnQgcFtdLCBCTl9DVFggKmN0eCk7IC8qIHJeMiArIHIgPSBhIG1vZCBwICovCitpbnQJQk5fR0YybV9wb2x5MmFycihjb25zdCBCSUdOVU0gKmEsIGludCBwW10sIGludCBtYXgpOworaW50CUJOX0dGMm1fYXJyMnBvbHkoY29uc3QgaW50IHBbXSwgQklHTlVNICphKTsKIAogLyogZmFzdGVyIG1vZCBmdW5jdGlvbnMgZm9yIHRoZSAnTklTVCBwcmltZXMnIAogICogMCA8PSBhIDwgcF4yICovCkBAIC03NTEsMTAgKzc1MiwxMiBAQAogI2RlZmluZSBibl9jb3JyZWN0X3RvcChhKSBcCiAgICAgICAgIHsgXAogICAgICAgICBCTl9VTE9ORyAqZnRsOyBcCi0JaWYgKChhKS0+dG9wID4gMCkgXAorCWludCB0bXBfdG9wID0gKGEpLT50b3A7IFwKKwlpZiAodG1wX3RvcCA+IDApIFwKIAkJeyBcCi0JCWZvciAoZnRsPSAmKChhKS0+ZFsoYSktPnRvcC0xXSk7IChhKS0+dG9wID4gMDsgKGEpLT50b3AtLSkgXAotCQlpZiAoKihmdGwtLSkpIGJyZWFrOyBcCisJCWZvciAoZnRsPSAmKChhKS0+ZFt0bXBfdG9wLTFdKTsgdG1wX3RvcCA+IDA7IHRtcF90b3AtLSkgXAorCQkJaWYgKCooZnRsLS0pKSBicmVhazsgXAorCQkoYSktPnRvcCA9IHRtcF90b3A7IFwKIAkJfSBcCiAJYm5fcG9sbHV0ZShhKTsgXAogCX0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCBiL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAppbmRleCAxZGI5NjA3Li4xNzhlNDE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKKysrIGIvaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCkBAIC03NiwxOCArNzYsMTkgQEAKIAogc3RydWN0IGJ1Zl9tZW1fc3QKIAl7Ci0JaW50IGxlbmd0aDsJLyogY3VycmVudCBudW1iZXIgb2YgYnl0ZXMgKi8KKwlzaXplX3QgbGVuZ3RoOwkvKiBjdXJyZW50IG51bWJlciBvZiBieXRlcyAqLwogCWNoYXIgKmRhdGE7Ci0JaW50IG1heDsJLyogc2l6ZSBvZiBidWZmZXIgKi8KKwlzaXplX3QgbWF4OwkvKiBzaXplIG9mIGJ1ZmZlciAqLwogCX07CiAKIEJVRl9NRU0gKkJVRl9NRU1fbmV3KHZvaWQpOwogdm9pZAlCVUZfTUVNX2ZyZWUoQlVGX01FTSAqYSk7Ci1pbnQJQlVGX01FTV9ncm93KEJVRl9NRU0gKnN0ciwgaW50IGxlbik7Ci1pbnQJQlVGX01FTV9ncm93X2NsZWFuKEJVRl9NRU0gKnN0ciwgaW50IGxlbik7CitpbnQJQlVGX01FTV9ncm93KEJVRl9NRU0gKnN0ciwgc2l6ZV90IGxlbik7CitpbnQJQlVGX01FTV9ncm93X2NsZWFuKEJVRl9NRU0gKnN0ciwgc2l6ZV90IGxlbik7CiBjaGFyICoJQlVGX3N0cmR1cChjb25zdCBjaGFyICpzdHIpOwogY2hhciAqCUJVRl9zdHJuZHVwKGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IHNpeik7CiB2b2lkICoJQlVGX21lbWR1cChjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6KTsKK3ZvaWQJQlVGX3JldmVyc2UodW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IHNpeik7CiAKIC8qIHNhZmUgc3RyaW5nIGZ1bmN0aW9ucyAqLwogc2l6ZV90IEJVRl9zdHJsY3B5KGNoYXIgKmRzdCxjb25zdCBjaGFyICpzcmMsc2l6ZV90IHNpeik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW5zc2wvY29uZi5oIGIvaW5jbHVkZS9vcGVuc3NsL2NvbmYuaAppbmRleCA4YWEwNmJjLi5jMjE5OTk3IDEwMDY0NAotLS0gYS9pbmNsdWRlL29wZW5zc2wvY29uZi5oCisrKyBiL2luY2x1ZGUvb3BlbnNzbC9jb25mLmgKQEAgLTc5LDggKzc5LDcgQEAKIAl9IENPTkZfVkFMVUU7CiAKIERFQ0xBUkVfU1RBQ0tfT0YoQ09ORl9WQUxVRSkKLURFQ0xBUkVfU1RBQ0tfT0YoQ09ORl9NT0RVTEUpCi1ERUNMQVJFX1NUQUNLX09GKENPTkZfSU1PRFVMRSkKK0RFQ0xBUkVfTEhBU0hfT0YoQ09ORl9WQUxVRSk7CiAKIHN0cnVjdCBjb25mX3N0Owogc3RydWN0IGNvbmZfbWV0aG9kX3N0OwpAQCAtMTA1LDYgKzEwNCw5IEBACiB0eXBlZGVmIHN0cnVjdCBjb25mX2ltb2R1bGVfc3QgQ09ORl9JTU9EVUxFOwogdHlwZWRlZiBzdHJ1Y3QgY29uZl9tb2R1bGVfc3QgQ09ORl9NT0RVTEU7CiAKK0RFQ0xBUkVfU1RBQ0tfT0YoQ09ORl9NT0RVTEUpCitERUNMQVJFX1NUQUNLX09GKENPTkZfSU1PRFVMRSkKKwogLyogRFNPIG1vZHVsZSBmdW5jdGlvbiB0eXBlZGVmcyAqLwogdHlwZWRlZiBpbnQgY29uZl9pbml0X2Z1bmMoQ09ORl9JTU9EVUxFICptZCwgY29uc3QgQ09ORiAqY25mKTsKIHR5cGVkZWYgdm9pZCBjb25mX2ZpbmlzaF9mdW5jKENPTkZfSU1PRFVMRSAqbWQpOwpAQCAtMTE3LDE4ICsxMTksMjMgQEAKICNkZWZpbmUgQ09ORl9NRkxBR1NfREVGQVVMVF9TRUNUSU9OCTB4MjAKIAogaW50IENPTkZfc2V0X2RlZmF1bHRfbWV0aG9kKENPTkZfTUVUSE9EICptZXRoKTsKLXZvaWQgQ09ORl9zZXRfbmNvbmYoQ09ORiAqY29uZixMSEFTSCAqaGFzaCk7Ci1MSEFTSCAqQ09ORl9sb2FkKExIQVNIICpjb25mLGNvbnN0IGNoYXIgKmZpbGUsbG9uZyAqZWxpbmUpOwordm9pZCBDT05GX3NldF9uY29uZihDT05GICpjb25mLExIQVNIX09GKENPTkZfVkFMVUUpICpoYXNoKTsKK0xIQVNIX09GKENPTkZfVkFMVUUpICpDT05GX2xvYWQoTEhBU0hfT0YoQ09ORl9WQUxVRSkgKmNvbmYsY29uc3QgY2hhciAqZmlsZSwKKwkJCQlsb25nICplbGluZSk7CiAjaWZuZGVmIE9QRU5TU0xfTk9fRlBfQVBJCi1MSEFTSCAqQ09ORl9sb2FkX2ZwKExIQVNIICpjb25mLCBGSUxFICpmcCxsb25nICplbGluZSk7CitMSEFTSF9PRihDT05GX1ZBTFVFKSAqQ09ORl9sb2FkX2ZwKExIQVNIX09GKENPTkZfVkFMVUUpICpjb25mLCBGSUxFICpmcCwKKwkJCQkgICBsb25nICplbGluZSk7CiAjZW5kaWYKLUxIQVNIICpDT05GX2xvYWRfYmlvKExIQVNIICpjb25mLCBCSU8gKmJwLGxvbmcgKmVsaW5lKTsKLVNUQUNLX09GKENPTkZfVkFMVUUpICpDT05GX2dldF9zZWN0aW9uKExIQVNIICpjb25mLGNvbnN0IGNoYXIgKnNlY3Rpb24pOwotY2hhciAqQ09ORl9nZXRfc3RyaW5nKExIQVNIICpjb25mLGNvbnN0IGNoYXIgKmdyb3VwLGNvbnN0IGNoYXIgKm5hbWUpOwotbG9uZyBDT05GX2dldF9udW1iZXIoTEhBU0ggKmNvbmYsY29uc3QgY2hhciAqZ3JvdXAsY29uc3QgY2hhciAqbmFtZSk7Ci12b2lkIENPTkZfZnJlZShMSEFTSCAqY29uZik7Ci1pbnQgQ09ORl9kdW1wX2ZwKExIQVNIICpjb25mLCBGSUxFICpvdXQpOwotaW50IENPTkZfZHVtcF9iaW8oTEhBU0ggKmNvbmYsIEJJTyAqb3V0KTsKK0xIQVNIX09GKENPTkZfVkFMVUUpICpDT05GX2xvYWRfYmlvKExIQVNIX09GKENPTkZfVkFMVUUpICpjb25mLCBCSU8gKmJwLGxvbmcgKmVsaW5lKTsKK1NUQUNLX09GKENPTkZfVkFMVUUpICpDT05GX2dldF9zZWN0aW9uKExIQVNIX09GKENPTkZfVkFMVUUpICpjb25mLAorCQkJCSAgICAgICBjb25zdCBjaGFyICpzZWN0aW9uKTsKK2NoYXIgKkNPTkZfZ2V0X3N0cmluZyhMSEFTSF9PRihDT05GX1ZBTFVFKSAqY29uZixjb25zdCBjaGFyICpncm91cCwKKwkJICAgICAgY29uc3QgY2hhciAqbmFtZSk7Citsb25nIENPTkZfZ2V0X251bWJlcihMSEFTSF9PRihDT05GX1ZBTFVFKSAqY29uZixjb25zdCBjaGFyICpncm91cCwKKwkJICAgICBjb25zdCBjaGFyICpuYW1lKTsKK3ZvaWQgQ09ORl9mcmVlKExIQVNIX09GKENPTkZfVkFMVUUpICpjb25mKTsKK2ludCBDT05GX2R1bXBfZnAoTEhBU0hfT0YoQ09ORl9WQUxVRSkgKmNvbmYsIEZJTEUgKm91dCk7CitpbnQgQ09ORl9kdW1wX2JpbyhMSEFTSF9PRihDT05GX1ZBTFVFKSAqY29uZiwgQklPICpvdXQpOwogCiB2b2lkIE9QRU5TU0xfY29uZmlnKGNvbnN0IGNoYXIgKmNvbmZpZ19uYW1lKTsKIHZvaWQgT1BFTlNTTF9ub19jb25maWcodm9pZCk7CkBAIC0xNDAsNyArMTQ3LDcgQEAKIAl7CiAJQ09ORl9NRVRIT0QgKm1ldGg7CiAJdm9pZCAqbWV0aF9kYXRhOwotCUxIQVNIICpkYXRhOworCUxIQVNIX09GKENPTkZfVkFMVUUpICpkYXRhOwogCX07CiAKIENPTkYgKk5DT05GX25ldyhDT05GX01FVEhPRCAqbWV0aCk7CkBAIC0yMTQsNiArMjIxLDcgQEAKICNkZWZpbmUgQ09ORl9GX0NPTkZfTE9BRF9CSU8JCQkJIDEwMgogI2RlZmluZSBDT05GX0ZfQ09ORl9MT0FEX0ZQCQkJCSAxMDMKICNkZWZpbmUgQ09ORl9GX0NPTkZfTU9EVUxFU19MT0FECQkJIDExNgorI2RlZmluZSBDT05GX0ZfQ09ORl9QQVJTRV9MSVNUCQkJCSAxMTkKICNkZWZpbmUgQ09ORl9GX0RFRl9MT0FECQkJCQkgMTIwCiAjZGVmaW5lIENPTkZfRl9ERUZfTE9BRF9CSU8JCQkJIDEyMQogI2RlZmluZSBDT05GX0ZfTU9EVUxFX0lOSVQJCQkJIDExNQpAQCAtMjMzLDYgKzI0MSw3IEBACiAKIC8qIFJlYXNvbiBjb2Rlcy4gKi8KICNkZWZpbmUgQ09ORl9SX0VSUk9SX0xPQURJTkdfRFNPCQkJIDExMAorI2RlZmluZSBDT05GX1JfTElTVF9DQU5OT1RfQkVfTlVMTAkJCSAxMTUKICNkZWZpbmUgQ09ORl9SX01JU1NJTkdfQ0xPU0VfU1FVQVJFX0JSQUNLRVQJCSAxMDAKICNkZWZpbmUgQ09ORl9SX01JU1NJTkdfRVFVQUxfU0lHTgkJCSAxMDEKICNkZWZpbmUgQ09ORl9SX01JU1NJTkdfRklOSVNIX0ZVTkNUSU9OCQkJIDExMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIGIvaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCmluZGV4IDBlNGZiMDcuLmIwMzYwY2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorKysgYi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKQEAgLTEsNiArMSw2IEBACiAvKiBjcnlwdG8vY3J5cHRvLmggKi8KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMTksMTMgKzIxOSw5IEBACiAjZGVmaW5lIENSWVBUT19MT0NLX0VDX1BSRV9DT01QCQkzNgogI2RlZmluZSBDUllQVE9fTE9DS19TVE9SRQkJMzcKICNkZWZpbmUgQ1JZUFRPX0xPQ0tfQ09NUAkJMzgKLSNpZm5kZWYgT1BFTlNTTF9GSVBTCi0jZGVmaW5lIENSWVBUT19OVU1fTE9DS1MJCTM5Ci0jZWxzZQogI2RlZmluZSBDUllQVE9fTE9DS19GSVBTCQkzOQogI2RlZmluZSBDUllQVE9fTE9DS19GSVBTMgkJNDAKICNkZWZpbmUgQ1JZUFRPX05VTV9MT0NLUwkJNDEKLSNlbmRpZgogCiAjZGVmaW5lIENSWVBUT19MT0NLCQkxCiAjZGVmaW5lIENSWVBUT19VTkxPQ0sJCTIKQEAgLTI4OCw5ICsyODQsMTAgQEAKIAogc3RydWN0IGNyeXB0b19leF9kYXRhX3N0CiAJewotCVNUQUNLICpzazsKKwlTVEFDS19PRih2b2lkKSAqc2s7CiAJaW50IGR1bW15OyAvKiBnY2MgaXMgc2NyZXdpbmcgdXAgdGhpcyBkYXRhIHN0cnVjdHVyZSA6LSggKi8KIAl9OworREVDTEFSRV9TVEFDS19PRih2b2lkKQogCiAvKiBUaGlzIHN0dWZmIGlzIGJhc2ljYWxseSBjbGFzcyBjYWxsYmFjayBmdW5jdGlvbnMKICAqIFRoZSBjdXJyZW50IGNsYXNzZXMgYXJlIFNTTF9DVFgsIFNTTCwgU1NMX1NFU1NJT04sIGFuZCBhIGZldyBtb3JlICovCkBAIC0zNDcsNyArMzQ0LDE0IEBACiAKIC8qIFNldCBzdGFuZGFyZCBkZWJ1Z2dpbmcgZnVuY3Rpb25zIChub3QgZG9uZSBieSBkZWZhdWx0CiAgKiB1bmxlc3MgQ1JZUFRPX01ERUJVRyBpcyBkZWZpbmVkKSAqLwotdm9pZCBDUllQVE9fbWFsbG9jX2RlYnVnX2luaXQodm9pZCk7CisjZGVmaW5lIENSWVBUT19tYWxsb2NfZGVidWdfaW5pdCgpCWRvIHtcCisJQ1JZUFRPX3NldF9tZW1fZGVidWdfZnVuY3Rpb25zKFwKKwkJQ1JZUFRPX2RiZ19tYWxsb2MsXAorCQlDUllQVE9fZGJnX3JlYWxsb2MsXAorCQlDUllQVE9fZGJnX2ZyZWUsXAorCQlDUllQVE9fZGJnX3NldF9vcHRpb25zLFwKKwkJQ1JZUFRPX2RiZ19nZXRfb3B0aW9ucyk7XAorCX0gd2hpbGUoMCkKIAogaW50IENSWVBUT19tZW1fY3RybChpbnQgbW9kZSk7CiBpbnQgQ1JZUFRPX2lzX21lbV9jaGVja19vbih2b2lkKTsKQEAgLTQyMCwxNiArNDI0LDMyIEBACiAJCQkJCSAgICAgIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKSk7CiBpbnQgKCpDUllQVE9fZ2V0X2FkZF9sb2NrX2NhbGxiYWNrKHZvaWQpKShpbnQgKm51bSxpbnQgbW91bnQsaW50IHR5cGUsCiAJCQkJCSAgY29uc3QgY2hhciAqZmlsZSxpbnQgbGluZSk7CisKKy8qIERvbid0IHVzZSB0aGlzIHN0cnVjdHVyZSBkaXJlY3RseS4gKi8KK3R5cGVkZWYgc3RydWN0IGNyeXB0b190aHJlYWRpZF9zdAorCXsKKwl2b2lkICpwdHI7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJfSBDUllQVE9fVEhSRUFESUQ7CisvKiBPbmx5IHVzZSBDUllQVE9fVEhSRUFESURfc2V0X1tudW1lcmljfHBvaW50ZXJdKCkgd2l0aGluIGNhbGxiYWNrcyAqLwordm9pZCBDUllQVE9fVEhSRUFESURfc2V0X251bWVyaWMoQ1JZUFRPX1RIUkVBRElEICppZCwgdW5zaWduZWQgbG9uZyB2YWwpOwordm9pZCBDUllQVE9fVEhSRUFESURfc2V0X3BvaW50ZXIoQ1JZUFRPX1RIUkVBRElEICppZCwgdm9pZCAqcHRyKTsKK2ludCBDUllQVE9fVEhSRUFESURfc2V0X2NhbGxiYWNrKHZvaWQgKCp0aHJlYWRpZF9mdW5jKShDUllQVE9fVEhSRUFESUQgKikpOwordm9pZCAoKkNSWVBUT19USFJFQURJRF9nZXRfY2FsbGJhY2sodm9pZCkpKENSWVBUT19USFJFQURJRCAqKTsKK3ZvaWQgQ1JZUFRPX1RIUkVBRElEX2N1cnJlbnQoQ1JZUFRPX1RIUkVBRElEICppZCk7CitpbnQgQ1JZUFRPX1RIUkVBRElEX2NtcChjb25zdCBDUllQVE9fVEhSRUFESUQgKmEsIGNvbnN0IENSWVBUT19USFJFQURJRCAqYik7Cit2b2lkIENSWVBUT19USFJFQURJRF9jcHkoQ1JZUFRPX1RIUkVBRElEICpkZXN0LCBjb25zdCBDUllQVE9fVEhSRUFESUQgKnNyYyk7Cit1bnNpZ25lZCBsb25nIENSWVBUT19USFJFQURJRF9oYXNoKGNvbnN0IENSWVBUT19USFJFQURJRCAqaWQpOworI2lmbmRlZiBPUEVOU1NMX05PX0RFUFJFQ0FURUQKIHZvaWQgQ1JZUFRPX3NldF9pZF9jYWxsYmFjayh1bnNpZ25lZCBsb25nICgqZnVuYykodm9pZCkpOwogdW5zaWduZWQgbG9uZyAoKkNSWVBUT19nZXRfaWRfY2FsbGJhY2sodm9pZCkpKHZvaWQpOwogdW5zaWduZWQgbG9uZyBDUllQVE9fdGhyZWFkX2lkKHZvaWQpOworI2VuZGlmCisKIGNvbnN0IGNoYXIgKkNSWVBUT19nZXRfbG9ja19uYW1lKGludCB0eXBlKTsKIGludCBDUllQVE9fYWRkX2xvY2soaW50ICpwb2ludGVyLGludCBhbW91bnQsaW50IHR5cGUsIGNvbnN0IGNoYXIgKmZpbGUsCiAJCSAgICBpbnQgbGluZSk7CiAKLXZvaWQgaW50X0NSWVBUT19zZXRfZG9fZHlubG9ja19jYWxsYmFjaygKLQl2b2lkICgqZG9fZHlubG9ja19jYikoaW50IG1vZGUsIGludCB0eXBlLCBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSkpOwotCiBpbnQgQ1JZUFRPX2dldF9uZXdfZHlubG9ja2lkKHZvaWQpOwogdm9pZCBDUllQVE9fZGVzdHJveV9keW5sb2NraWQoaW50IGkpOwogc3RydWN0IENSWVBUT19keW5sb2NrX3ZhbHVlICpDUllQVE9fZ2V0X2R5bmxvY2tfdmFsdWUoaW50IGkpOwpAQCAtNDU0LDEwICs0NzQsNiBAQAogCQkJCSAgIHZvaWQgKCpmKSh2b2lkICosaW50KSwKIAkJCQkgICB2b2lkICgqc28pKGxvbmcpLAogCQkJCSAgIGxvbmcgKCpnbykodm9pZCkpOwotdm9pZCBDUllQVE9fc2V0X21lbV9pbmZvX2Z1bmN0aW9ucygKLQlpbnQgICgqcHVzaF9pbmZvX2ZuKShjb25zdCBjaGFyICppbmZvLCBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSksCi0JaW50ICAoKnBvcF9pbmZvX2ZuKSh2b2lkKSwKLQlpbnQgKCpyZW1vdmVfYWxsX2luZm9fZm4pKHZvaWQpKTsKIHZvaWQgQ1JZUFRPX2dldF9tZW1fZnVuY3Rpb25zKHZvaWQgKigqKm0pKHNpemVfdCksdm9pZCAqKCoqcikodm9pZCAqLCBzaXplX3QpLCB2b2lkICgqKmYpKHZvaWQgKikpOwogdm9pZCBDUllQVE9fZ2V0X2xvY2tlZF9tZW1fZnVuY3Rpb25zKHZvaWQgKigqKm0pKHNpemVfdCksIHZvaWQgKCoqZikodm9pZCAqKSk7CiB2b2lkIENSWVBUT19nZXRfbWVtX2V4X2Z1bmN0aW9ucyh2b2lkICooKiptKShzaXplX3QsY29uc3QgY2hhciAqLGludCksCkBAIC01MTQsOSArNTMwLDYgQEAKIHZvaWQgQ1JZUFRPX2RiZ19zZXRfb3B0aW9ucyhsb25nIGJpdHMpOwogbG9uZyBDUllQVE9fZGJnX2dldF9vcHRpb25zKHZvaWQpOwogCi1pbnQgQ1JZUFRPX2RiZ19wdXNoX2luZm8oY29uc3QgY2hhciAqaW5mbywgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUpOwotaW50IENSWVBUT19kYmdfcG9wX2luZm8odm9pZCk7Ci1pbnQgQ1JZUFRPX2RiZ19yZW1vdmVfYWxsX2luZm8odm9pZCk7CiAKICNpZm5kZWYgT1BFTlNTTF9OT19GUF9BUEkKIHZvaWQgQ1JZUFRPX21lbV9sZWFrc19mcChGSUxFICopOwpAQCAtNTM0LDY5ICs1NDcsMTIgQEAKICNkZWZpbmUgT1BFTlNTTF9pYTMyY2FwICgqKE9QRU5TU0xfaWEzMmNhcF9sb2MoKSkpCiBpbnQgT1BFTlNTTF9pc3NlcnZpY2Uodm9pZCk7CiAKLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLSNkZWZpbmUgRklQU19FUlJPUl9JR05PUkVEKGFsZykgT3BlblNTTERpZShfX0ZJTEVfXywgX19MSU5FX18sIFwKLQkJYWxnICIgcHJldmlvdXMgRklQUyBmb3JiaWRkZW4gYWxnb3JpdGhtIGVycm9yIGlnbm9yZWQiKTsKLQotI2RlZmluZSBGSVBTX0JBRF9BQk9SVChhbGcpIE9wZW5TU0xEaWUoX19GSUxFX18sIF9fTElORV9fLCBcCi0JCSNhbGcgIiBBbGdvcml0aG0gZm9yYmlkZGVuIGluIEZJUFMgbW9kZSIpOwotCi0jaWZkZWYgT1BFTlNTTF9GSVBTX1NUUklDVAotI2RlZmluZSBGSVBTX0JBRF9BTEdPUklUSE0oYWxnKSBGSVBTX0JBRF9BQk9SVChhbGcpCi0jZWxzZQotI2RlZmluZSBGSVBTX0JBRF9BTEdPUklUSE0oYWxnKSBcCi0JeyBcCi0JRklQU2VycihGSVBTX0ZfSEFTSF9GSU5BTCxGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsgXAotCUVSUl9hZGRfZXJyb3JfZGF0YSgyLCAiQWxnb3JpdGhtPSIsICNhbGcpOyBcCi0JcmV0dXJuIDA7IFwKLQl9Ci0jZW5kaWYKLQotLyogTG93IGxldmVsIGRpZ2VzdCBBUEkgYmxvY2tpbmcgbWFjcm8gKi8KLQotI2RlZmluZSBGSVBTX05PTl9GSVBTX01EX0luaXQoYWxnKSBcCi0JaW50IGFsZyMjX0luaXQoYWxnIyNfQ1RYICpjKSBcCi0JCXsgXAotCQlpZiAoRklQU19tb2RlKCkpIFwKLQkJCUZJUFNfQkFEX0FMR09SSVRITShhbGcpIFwKLQkJcmV0dXJuIHByaXZhdGVfIyNhbGcjI19Jbml0KGMpOyBcCi0JCX0gXAotCWludCBwcml2YXRlXyMjYWxnIyNfSW5pdChhbGcjI19DVFggKmMpCi0KLS8qIEZvciBjaXBoZXJzIHRoZSBBUEkgb2Z0ZW4gdmFyaWVzIGZyb20gY2lwaGVyIHRvIGNpcGhlciBhbmQgZWFjaCBuZWVkcyB0bwotICogYmUgdHJlYXRlZCBhcyBhIHNwZWNpYWwgY2FzZS4gVmFyaWFibGUga2V5IGxlbmd0aCBjaXBoZXJzIChCbG93ZmlzaCwgUkM0LAotICogQ0FTVCkgaG93ZXZlciBhcmUgdmVyeSBzaW1pbGFyIGFuZCBjYW4gdXNlIGEgYmxvY2tpbmcgbWFjcm8uCi0gKi8KLQotI2RlZmluZSBGSVBTX05PTl9GSVBTX1ZDSVBIRVJfSW5pdChhbGcpIFwKLQl2b2lkIGFsZyMjX3NldF9rZXkoYWxnIyNfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpIFwKLQkJeyBcCi0JCWlmIChGSVBTX21vZGUoKSkgXAotCQkJRklQU19CQURfQUJPUlQoYWxnKSBcCi0JCXByaXZhdGVfIyNhbGcjI19zZXRfa2V5KGtleSwgbGVuLCBkYXRhKTsgXAotCQl9IFwKLQl2b2lkIHByaXZhdGVfIyNhbGcjI19zZXRfa2V5KGFsZyMjX0tFWSAqa2V5LCBpbnQgbGVuLCBcCi0JCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCi0KLSNlbHNlCi0KLSNkZWZpbmUgRklQU19OT05fRklQU19WQ0lQSEVSX0luaXQoYWxnKSBcCi0Jdm9pZCBhbGcjI19zZXRfa2V5KGFsZyMjX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQotCi0jZGVmaW5lIEZJUFNfTk9OX0ZJUFNfTURfSW5pdChhbGcpIFwKLQlpbnQgYWxnIyNfSW5pdChhbGcjI19DVFggKmMpIAotCi0jZW5kaWYgLyogZGVmIE9QRU5TU0xfRklQUyAqLwotCiAvKiBCRUdJTiBFUlJPUiBDT0RFUyAqLwogLyogVGhlIGZvbGxvd2luZyBsaW5lcyBhcmUgYXV0byBnZW5lcmF0ZWQgYnkgdGhlIHNjcmlwdCBta2Vyci5wbC4gQW55IGNoYW5nZXMKICAqIG1hZGUgYWZ0ZXIgdGhpcyBwb2ludCBtYXkgYmUgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgc2NyaXB0IGlzIG5leHQgcnVuLgogICovCiB2b2lkIEVSUl9sb2FkX0NSWVBUT19zdHJpbmdzKHZvaWQpOwogCi0jZGVmaW5lIE9QRU5TU0xfSEFWRV9JTklUCTEKLXZvaWQgT1BFTlNTTF9pbml0KHZvaWQpOwotCiAvKiBFcnJvciBjb2RlcyBmb3IgdGhlIENSWVBUTyBmdW5jdGlvbnMuICovCiAKIC8qIEZ1bmN0aW9uIGNvZGVzLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVuc3NsL2RoLmggYi9pbmNsdWRlL29wZW5zc2wvZGguaAppbmRleCAxMDQ3NWFjLi44NDkzMDlhIDEwMDY0NAotLS0gYS9pbmNsdWRlL29wZW5zc2wvZGguaAorKysgYi9pbmNsdWRlL29wZW5zc2wvZGguaApAQCAtNzcsOCArNzcsNiBAQAogIyBkZWZpbmUgT1BFTlNTTF9ESF9NQVhfTU9EVUxVU19CSVRTCTEwMDAwCiAjZW5kaWYKIAotI2RlZmluZSBPUEVOU1NMX0RIX0ZJUFNfTUlOX01PRFVMVVNfQklUUyAxMDI0Ci0KICNkZWZpbmUgREhfRkxBR19DQUNIRV9NT05UX1AgICAgIDB4MDEKICNkZWZpbmUgREhfRkxBR19OT19FWFBfQ09OU1RUSU1FIDB4MDIgLyogbmV3IHdpdGggMC45LjdoOyB0aGUgYnVpbHQtaW4gREgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaW1wbGVtZW50YXRpb24gbm93IHVzZXMgY29uc3RhbnQgdGltZQpAQCAtMTU5LDcgKzE1Nyw2IEBACiAgICB0aGlzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OiAqLwogI2RlZmluZSBESF9DSEVDS19QX05PVF9TVFJPTkdfUFJJTUUJREhfQ0hFQ0tfUF9OT1RfU0FGRV9QUklNRQogCi0jZGVmaW5lIERIcGFyYW1zX2R1cCh4KSBBU04xX2R1cF9vZl9jb25zdChESCxpMmRfREhwYXJhbXMsZDJpX0RIcGFyYW1zLHgpCiAjZGVmaW5lIGQyaV9ESHBhcmFtc19mcChmcCx4KSAoREggKilBU04xX2QyaV9mcCgoY2hhciAqKCopKCkpREhfbmV3LCBcCiAJCShjaGFyICooKikoKSlkMmlfREhwYXJhbXMsKGZwKSwodW5zaWduZWQgY2hhciAqKikoeCkpCiAjZGVmaW5lIGkyZF9ESHBhcmFtc19mcChmcCx4KSBBU04xX2kyZF9mcChpMmRfREhwYXJhbXMsKGZwKSwgXApAQCAtMTY3LDEyICsxNjQsOSBAQAogI2RlZmluZSBkMmlfREhwYXJhbXNfYmlvKGJwLHgpIEFTTjFfZDJpX2Jpb19vZihESCxESF9uZXcsZDJpX0RIcGFyYW1zLGJwLHgpCiAjZGVmaW5lIGkyZF9ESHBhcmFtc19iaW8oYnAseCkgQVNOMV9pMmRfYmlvX29mX2NvbnN0KERILGkyZF9ESHBhcmFtcyxicCx4KQogCi1jb25zdCBESF9NRVRIT0QgKkRIX09wZW5TU0wodm9pZCk7CitESCAqREhwYXJhbXNfZHVwKERIICopOwogCi0jaWZkZWYgT1BFTlNTTF9GSVBTCi1ESCAqCUZJUFNfZGhfbmV3KHZvaWQpOwotdm9pZAlGSVBTX2RoX2ZyZWUoREggKmRoKTsKLSNlbmRpZgorY29uc3QgREhfTUVUSE9EICpESF9PcGVuU1NMKHZvaWQpOwogCiB2b2lkIERIX3NldF9kZWZhdWx0X21ldGhvZChjb25zdCBESF9NRVRIT0QgKm1ldGgpOwogY29uc3QgREhfTUVUSE9EICpESF9nZXRfZGVmYXVsdF9tZXRob2Qodm9pZCk7CkBAIC0yMTIsNiArMjA2LDE4IEBACiBpbnQJREhwYXJhbXNfcHJpbnQoY2hhciAqYnAsIGNvbnN0IERIICp4KTsKICNlbmRpZgogCisjZGVmaW5lIEVWUF9QS0VZX0NUWF9zZXRfZGhfcGFyYW1nZW5fcHJpbWVfbGVuKGN0eCwgbGVuKSBcCisJRVZQX1BLRVlfQ1RYX2N0cmwoY3R4LCBFVlBfUEtFWV9ESCwgRVZQX1BLRVlfT1BfUEFSQU1HRU4sIFwKKwkJCUVWUF9QS0VZX0NUUkxfREhfUEFSQU1HRU5fUFJJTUVfTEVOLCBsZW4sIE5VTEwpCisKKyNkZWZpbmUgRVZQX1BLRVlfQ1RYX3NldF9kaF9wYXJhbWdlbl9nZW5lcmF0b3IoY3R4LCBnZW4pIFwKKwlFVlBfUEtFWV9DVFhfY3RybChjdHgsIEVWUF9QS0VZX0RILCBFVlBfUEtFWV9PUF9QQVJBTUdFTiwgXAorCQkJRVZQX1BLRVlfQ1RSTF9ESF9QQVJBTUdFTl9HRU5FUkFUT1IsIGdlbiwgTlVMTCkKKworI2RlZmluZQlFVlBfUEtFWV9DVFJMX0RIX1BBUkFNR0VOX1BSSU1FX0xFTgkoRVZQX1BLRVlfQUxHX0NUUkwgKyAxKQorI2RlZmluZQlFVlBfUEtFWV9DVFJMX0RIX1BBUkFNR0VOX0dFTkVSQVRPUgkoRVZQX1BLRVlfQUxHX0NUUkwgKyAyKQorCQkKKwogLyogQkVHSU4gRVJST1IgQ09ERVMgKi8KIC8qIFRoZSBmb2xsb3dpbmcgbGluZXMgYXJlIGF1dG8gZ2VuZXJhdGVkIGJ5IHRoZSBzY3JpcHQgbWtlcnIucGwuIEFueSBjaGFuZ2VzCiAgKiBtYWRlIGFmdGVyIHRoaXMgcG9pbnQgbWF5IGJlIG92ZXJ3cml0dGVuIHdoZW4gdGhlIHNjcmlwdCBpcyBuZXh0IHJ1bi4KQEAgLTIyMiwyMiArMjI4LDMxIEBACiAKIC8qIEZ1bmN0aW9uIGNvZGVzLiAqLwogI2RlZmluZSBESF9GX0NPTVBVVEVfS0VZCQkJCSAxMDIKLSNkZWZpbmUgREhfRl9ESFBBUkFNU19QUklOVAkJCQkgMTAwCiAjZGVmaW5lIERIX0ZfREhQQVJBTVNfUFJJTlRfRlAJCQkJIDEwMQogI2RlZmluZSBESF9GX0RIX0JVSUxUSU5fR0VOUEFSQU1TCQkJIDEwNgotI2RlZmluZSBESF9GX0RIX0NPTVBVVEVfS0VZCQkJCSAxMDcKLSNkZWZpbmUgREhfRl9ESF9HRU5FUkFURV9LRVkJCQkJIDEwOAotI2RlZmluZSBESF9GX0RIX0dFTkVSQVRFX1BBUkFNRVRFUlMJCQkgMTA5CiAjZGVmaW5lIERIX0ZfREhfTkVXX01FVEhPRAkJCQkgMTA1CisjZGVmaW5lIERIX0ZfREhfUEFSQU1fREVDT0RFCQkJCSAxMDcKKyNkZWZpbmUgREhfRl9ESF9QUklWX0RFQ09ERQkJCQkgMTEwCisjZGVmaW5lIERIX0ZfREhfUFJJVl9FTkNPREUJCQkJIDExMQorI2RlZmluZSBESF9GX0RIX1BVQl9ERUNPREUJCQkJIDEwOAorI2RlZmluZSBESF9GX0RIX1BVQl9FTkNPREUJCQkJIDEwOQorI2RlZmluZSBESF9GX0RPX0RIX1BSSU5UCQkJCSAxMDAKICNkZWZpbmUgREhfRl9HRU5FUkFURV9LRVkJCQkJIDEwMwogI2RlZmluZSBESF9GX0dFTkVSQVRFX1BBUkFNRVRFUlMJCQkgMTA0CisjZGVmaW5lIERIX0ZfUEtFWV9ESF9ERVJJVkUJCQkJIDExMgorI2RlZmluZSBESF9GX1BLRVlfREhfS0VZR0VOCQkJCSAxMTMKIAogLyogUmVhc29uIGNvZGVzLiAqLwogI2RlZmluZSBESF9SX0JBRF9HRU5FUkFUT1IJCQkJIDEwMQorI2RlZmluZSBESF9SX0JOX0RFQ09ERV9FUlJPUgkJCQkgMTA5CisjZGVmaW5lIERIX1JfQk5fRVJST1IJCQkJCSAxMDYKKyNkZWZpbmUgREhfUl9ERUNPREVfRVJST1IJCQkJIDEwNAogI2RlZmluZSBESF9SX0lOVkFMSURfUFVCS0VZCQkJCSAxMDIKLSNkZWZpbmUgREhfUl9LRVlfU0laRV9UT09fU01BTEwJCQkJIDEwNAorI2RlZmluZSBESF9SX0tFWVNfTk9UX1NFVAkJCQkgMTA4CiAjZGVmaW5lIERIX1JfTU9EVUxVU19UT09fTEFSR0UJCQkJIDEwMworI2RlZmluZSBESF9SX05PX1BBUkFNRVRFUlNfU0VUCQkJCSAxMDcKICNkZWZpbmUgREhfUl9OT19QUklWQVRFX1ZBTFVFCQkJCSAxMDAKKyNkZWZpbmUgREhfUl9QQVJBTUVURVJfRU5DT0RJTkdfRVJST1IJCQkgMTA1CiAKICNpZmRlZiAgX19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnNzbC9kc2EuaCBiL2luY2x1ZGUvb3BlbnNzbC9kc2EuaAppbmRleCA3MDJjNTBkLi5hYzUwYTVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL29wZW5zc2wvZHNhLmgKKysrIGIvaW5jbHVkZS9vcGVuc3NsL2RzYS5oCkBAIC04OCw4ICs4OCw2IEBACiAjIGRlZmluZSBPUEVOU1NMX0RTQV9NQVhfTU9EVUxVU19CSVRTCTEwMDAwCiAjZW5kaWYKIAotI2RlZmluZSBPUEVOU1NMX0RTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMgMTAyNAotCiAjZGVmaW5lIERTQV9GTEFHX0NBQ0hFX01PTlRfUAkweDAxCiAjZGVmaW5lIERTQV9GTEFHX05PX0VYUF9DT05TVFRJTUUgICAgICAgMHgwMiAvKiBuZXcgd2l0aCAwLjkuN2g7IHRoZSBidWlsdC1pbiBEU0EKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGltcGxlbWVudGF0aW9uIG5vdyB1c2VzIGNvbnN0YW50IHRpbWUKQEAgLTk5LDI1ICs5Nyw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBiZSB1c2VkIGZvciBhbGwgZXhwb25lbnRzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLS8qIElmIHRoaXMgZmxhZyBpcyBzZXQgdGhlIERTQSBtZXRob2QgaXMgRklQUyBjb21wbGlhbnQgYW5kIGNhbiBiZSB1c2VkCi0gKiBpbiBGSVBTIG1vZGUuIFRoaXMgaXMgc2V0IGluIHRoZSB2YWxpZGF0ZWQgbW9kdWxlIG1ldGhvZC4gSWYgYW4KLSAqIGFwcGxpY2F0aW9uIHNldHMgdGhpcyBmbGFnIGluIGl0cyBvd24gbWV0aG9kcyBpdCBpcyBpdHMgcmVwb3NpYmlsaXR5Ci0gKiB0byBlbnN1cmUgdGhlIHJlc3VsdCBpcyBjb21wbGlhbnQuCi0gKi8KLQotI2RlZmluZSBEU0FfRkxBR19GSVBTX01FVEhPRAkJCTB4MDQwMAotCi0vKiBJZiB0aGlzIGZsYWcgaXMgc2V0IHRoZSBvcGVyYXRpb25zIG5vcm1hbGx5IGRpc2FibGVkIGluIEZJUFMgbW9kZSBhcmUKLSAqIHBlcm1pdHRlZCBpdCBpcyB0aGVuIHRoZSBhcHBsaWNhdGlvbnMgcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlIHRoYXQgdGhlCi0gKiB1c2FnZSBpcyBjb21wbGlhbnQuCi0gKi8KLQotI2RlZmluZSBEU0FfRkxBR19OT05fRklQU19BTExPVwkJCTB4MDQwMAotCi0jaWZkZWYgT1BFTlNTTF9GSVBTCi0jZGVmaW5lIEZJUFNfRFNBX1NJWkVfVAlpbnQKLSNlbmRpZgotCiAjaWZkZWYgIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKICNlbmRpZgpAQCAtMTM5LDcgKzExOCw3IEBACiAJaW50ICgqZHNhX3NpZ25fc2V0dXApKERTQSAqZHNhLCBCTl9DVFggKmN0eF9pbiwgQklHTlVNICoqa2ludnAsCiAJCQkJCQkJCUJJR05VTSAqKnJwKTsKIAlpbnQgKCpkc2FfZG9fdmVyaWZ5KShjb25zdCB1bnNpZ25lZCBjaGFyICpkZ3N0LCBpbnQgZGdzdF9sZW4sCi0JCQkJCQkJRFNBX1NJRyAqc2lnLCBEU0EgKmRzYSk7CisJCQkgICAgIERTQV9TSUcgKnNpZywgRFNBICpkc2EpOwogCWludCAoKmRzYV9tb2RfZXhwKShEU0EgKmRzYSwgQklHTlVNICpyciwgQklHTlVNICphMSwgQklHTlVNICpwMSwKIAkJCUJJR05VTSAqYTIsIEJJR05VTSAqcDIsIEJJR05VTSAqbSwgQk5fQ1RYICpjdHgsCiAJCQlCTl9NT05UX0NUWCAqaW5fbW9udCk7CkBAIC0xNTIsNyArMTMxLDcgQEAKIAljaGFyICphcHBfZGF0YTsKIAkvKiBJZiB0aGlzIGlzIG5vbi1OVUxMLCBpdCBpcyB1c2VkIHRvIGdlbmVyYXRlIERTQSBwYXJhbWV0ZXJzICovCiAJaW50ICgqZHNhX3BhcmFtZ2VuKShEU0EgKmRzYSwgaW50IGJpdHMsCi0JCQl1bnNpZ25lZCBjaGFyICpzZWVkLCBpbnQgc2VlZF9sZW4sCisJCQljb25zdCB1bnNpZ25lZCBjaGFyICpzZWVkLCBpbnQgc2VlZF9sZW4sCiAJCQlpbnQgKmNvdW50ZXJfcmV0LCB1bnNpZ25lZCBsb25nICpoX3JldCwKIAkJCUJOX0dFTkNCICpjYik7CiAJLyogSWYgdGhpcyBpcyBub24tTlVMTCwgaXQgaXMgdXNlZCB0byBnZW5lcmF0ZSBEU0Ega2V5cyAqLwpAQCAtMTg2LDcgKzE2NSw2IEBACiAJRU5HSU5FICplbmdpbmU7CiAJfTsKIAotI2RlZmluZSBEU0FwYXJhbXNfZHVwKHgpIEFTTjFfZHVwX29mX2NvbnN0KERTQSxpMmRfRFNBcGFyYW1zLGQyaV9EU0FwYXJhbXMseCkKICNkZWZpbmUgZDJpX0RTQXBhcmFtc19mcChmcCx4KSAoRFNBICopQVNOMV9kMmlfZnAoKGNoYXIgKigqKSgpKURTQV9uZXcsIFwKIAkJKGNoYXIgKigqKSgpKWQyaV9EU0FwYXJhbXMsKGZwKSwodW5zaWduZWQgY2hhciAqKikoeCkpCiAjZGVmaW5lIGkyZF9EU0FwYXJhbXNfZnAoZnAseCkgQVNOMV9pMmRfZnAoaTJkX0RTQXBhcmFtcywoZnApLCBcCkBAIC0xOTUsNiArMTczLDcgQEAKICNkZWZpbmUgaTJkX0RTQXBhcmFtc19iaW8oYnAseCkgQVNOMV9pMmRfYmlvX29mX2NvbnN0KERTQSxpMmRfRFNBcGFyYW1zLGJwLHgpCiAKIAorRFNBICpEU0FwYXJhbXNfZHVwKERTQSAqeCk7CiBEU0FfU0lHICogRFNBX1NJR19uZXcodm9pZCk7CiB2b2lkCURTQV9TSUdfZnJlZShEU0FfU0lHICphKTsKIGludAlpMmRfRFNBX1NJRyhjb25zdCBEU0FfU0lHICphLCB1bnNpZ25lZCBjaGFyICoqcHApOwpAQCAtMjEwLDExICsxODksNiBAQAogY29uc3QgRFNBX01FVEhPRCAqRFNBX2dldF9kZWZhdWx0X21ldGhvZCh2b2lkKTsKIGludAlEU0Ffc2V0X21ldGhvZChEU0EgKmRzYSwgY29uc3QgRFNBX01FVEhPRCAqKTsKIAotI2lmZGVmIE9QRU5TU0xfRklQUwotRFNBICoJRklQU19kc2FfbmV3KHZvaWQpOwotdm9pZAlGSVBTX2RzYV9mcmVlIChEU0EgKnIpOwotI2VuZGlmCi0KIERTQSAqCURTQV9uZXcodm9pZCk7CiBEU0EgKglEU0FfbmV3X21ldGhvZChFTkdJTkUgKmVuZ2luZSk7CiB2b2lkCURTQV9mcmVlIChEU0EgKnIpOwpAQCAtMjQ2LDcgKzIyMCw3IEBACiAKIC8qIE5ldyB2ZXJzaW9uICovCiBpbnQJRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoRFNBICpkc2EsIGludCBiaXRzLAotCQl1bnNpZ25lZCBjaGFyICpzZWVkLGludCBzZWVkX2xlbiwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqc2VlZCxpbnQgc2VlZF9sZW4sCiAJCWludCAqY291bnRlcl9yZXQsIHVuc2lnbmVkIGxvbmcgKmhfcmV0LCBCTl9HRU5DQiAqY2IpOwogCiBpbnQJRFNBX2dlbmVyYXRlX2tleShEU0EgKmEpOwpAQCAtMjc1LDEwICsyNDksMTMgQEAKIERIICpEU0FfZHVwX0RIKGNvbnN0IERTQSAqcik7CiAjZW5kaWYKIAotI2lmZGVmIE9QRU5TU0xfRklQUwotaW50IEZJUFNfZHNhX3NpZ19lbmNvZGUodW5zaWduZWQgY2hhciAqb3V0LCBEU0FfU0lHICpzaWcpOwotaW50IEZJUFNfZHNhX3NpZ19kZWNvZGUoRFNBX1NJRyAqc2lnLCBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgaW50IGlubGVuKTsKLSNlbmRpZgorI2RlZmluZSBFVlBfUEtFWV9DVFhfc2V0X2RzYV9wYXJhbWdlbl9iaXRzKGN0eCwgbmJpdHMpIFwKKwlFVlBfUEtFWV9DVFhfY3RybChjdHgsIEVWUF9QS0VZX0RTQSwgRVZQX1BLRVlfT1BfUEFSQU1HRU4sIFwKKwkJCQlFVlBfUEtFWV9DVFJMX0RTQV9QQVJBTUdFTl9CSVRTLCBuYml0cywgTlVMTCkKKworI2RlZmluZQlFVlBfUEtFWV9DVFJMX0RTQV9QQVJBTUdFTl9CSVRTCQkoRVZQX1BLRVlfQUxHX0NUUkwgKyAxKQorI2RlZmluZQlFVlBfUEtFWV9DVFJMX0RTQV9QQVJBTUdFTl9RX0JJVFMJKEVWUF9QS0VZX0FMR19DVFJMICsgMikKKyNkZWZpbmUJRVZQX1BLRVlfQ1RSTF9EU0FfUEFSQU1HRU5fTUQJCShFVlBfUEtFWV9BTEdfQ1RSTCArIDMpCiAKIC8qIEJFR0lOIEVSUk9SIENPREVTICovCiAvKiBUaGUgZm9sbG93aW5nIGxpbmVzIGFyZSBhdXRvIGdlbmVyYXRlZCBieSB0aGUgc2NyaXB0IG1rZXJyLnBsLiBBbnkgY2hhbmdlcwpAQCAtMjkwLDMzICsyNjcsMzkgQEAKIAogLyogRnVuY3Rpb24gY29kZXMuICovCiAjZGVmaW5lIERTQV9GX0QySV9EU0FfU0lHCQkJCSAxMTAKKyNkZWZpbmUgRFNBX0ZfRE9fRFNBX1BSSU5UCQkJCSAxMDQKICNkZWZpbmUgRFNBX0ZfRFNBUEFSQU1TX1BSSU5UCQkJCSAxMDAKICNkZWZpbmUgRFNBX0ZfRFNBUEFSQU1TX1BSSU5UX0ZQCQkJIDEwMQotI2RlZmluZSBEU0FfRl9EU0FfQlVJTFRJTl9LRVlHRU4JCQkgMTE5Ci0jZGVmaW5lIERTQV9GX0RTQV9CVUlMVElOX1BBUkFNR0VOCQkJIDExOAogI2RlZmluZSBEU0FfRl9EU0FfRE9fU0lHTgkJCQkgMTEyCiAjZGVmaW5lIERTQV9GX0RTQV9ET19WRVJJRlkJCQkJIDExMwotI2RlZmluZSBEU0FfRl9EU0FfR0VORVJBVEVfUEFSQU1FVEVSUwkJCSAxMTcKICNkZWZpbmUgRFNBX0ZfRFNBX05FV19NRVRIT0QJCQkJIDEwMwotI2RlZmluZSBEU0FfRl9EU0FfUFJJTlQJCQkJCSAxMDQKKyNkZWZpbmUgRFNBX0ZfRFNBX1BBUkFNX0RFQ09ERQkJCQkgMTE5CiAjZGVmaW5lIERTQV9GX0RTQV9QUklOVF9GUAkJCQkgMTA1Ci0jZGVmaW5lIERTQV9GX0RTQV9TRVRfREVGQVVMVF9NRVRIT0QJCQkgMTE1Ci0jZGVmaW5lIERTQV9GX0RTQV9TRVRfTUVUSE9ECQkJCSAxMTYKKyNkZWZpbmUgRFNBX0ZfRFNBX1BSSVZfREVDT0RFCQkJCSAxMTUKKyNkZWZpbmUgRFNBX0ZfRFNBX1BSSVZfRU5DT0RFCQkJCSAxMTYKKyNkZWZpbmUgRFNBX0ZfRFNBX1BVQl9ERUNPREUJCQkJIDExNworI2RlZmluZSBEU0FfRl9EU0FfUFVCX0VOQ09ERQkJCQkgMTE4CiAjZGVmaW5lIERTQV9GX0RTQV9TSUdOCQkJCQkgMTA2CiAjZGVmaW5lIERTQV9GX0RTQV9TSUdOX1NFVFVQCQkJCSAxMDcKICNkZWZpbmUgRFNBX0ZfRFNBX1NJR19ORVcJCQkJIDEwOQogI2RlZmluZSBEU0FfRl9EU0FfVkVSSUZZCQkJCSAxMDgKICNkZWZpbmUgRFNBX0ZfSTJEX0RTQV9TSUcJCQkJIDExMQorI2RlZmluZSBEU0FfRl9PTERfRFNBX1BSSVZfREVDT0RFCQkJIDEyMgorI2RlZmluZSBEU0FfRl9QS0VZX0RTQV9DVFJMCQkJCSAxMjAKKyNkZWZpbmUgRFNBX0ZfUEtFWV9EU0FfS0VZR0VOCQkJCSAxMjEKICNkZWZpbmUgRFNBX0ZfU0lHX0NCCQkJCQkgMTE0CiAKIC8qIFJlYXNvbiBjb2Rlcy4gKi8KICNkZWZpbmUgRFNBX1JfQkFEX1FfVkFMVUUJCQkJIDEwMgorI2RlZmluZSBEU0FfUl9CTl9ERUNPREVfRVJST1IJCQkJIDEwOAorI2RlZmluZSBEU0FfUl9CTl9FUlJPUgkJCQkJIDEwOQogI2RlZmluZSBEU0FfUl9EQVRBX1RPT19MQVJHRV9GT1JfS0VZX1NJWkUJCSAxMDAKLSNkZWZpbmUgRFNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMCQkJIDEwNgorI2RlZmluZSBEU0FfUl9ERUNPREVfRVJST1IJCQkJIDEwNAorI2RlZmluZSBEU0FfUl9JTlZBTElEX0RJR0VTVF9UWVBFCQkJIDEwNgogI2RlZmluZSBEU0FfUl9NSVNTSU5HX1BBUkFNRVRFUlMJCQkgMTAxCiAjZGVmaW5lIERTQV9SX01PRFVMVVNfVE9PX0xBUkdFCQkJCSAxMDMKLSNkZWZpbmUgRFNBX1JfTk9OX0ZJUFNfTUVUSE9ECQkJCSAxMDQKLSNkZWZpbmUgRFNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERQkgMTA1CisjZGVmaW5lIERTQV9SX05PX1BBUkFNRVRFUlNfU0VUCQkJCSAxMDcKKyNkZWZpbmUgRFNBX1JfUEFSQU1FVEVSX0VOQ09ESU5HX0VSUk9SCQkJIDEwNQogCiAjaWZkZWYgIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW5zc2wvZHNvLmggYi9pbmNsdWRlL29wZW5zc2wvZHNvLmgKaW5kZXggM2U1MTkxMy4uODM5ZjJlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9vcGVuc3NsL2Rzby5oCisrKyBiL2luY2x1ZGUvb3BlbnNzbC9kc28uaApAQCAtMTcwLDYgKzE3MCwxMSBAQAogCS8qIFtEZV1Jbml0aWFsaXNhdGlvbiBoYW5kbGVycy4gKi8KIAlpbnQgKCppbml0KShEU08gKmRzbyk7CiAJaW50ICgqZmluaXNoKShEU08gKmRzbyk7CisKKwkvKiBSZXR1cm4gcGF0aG5hbWUgb2YgdGhlIG1vZHVsZSBjb250YWluaW5nIGxvY2F0aW9uICovCisJaW50ICgqcGF0aGJ5YWRkcikodm9pZCAqYWRkcixjaGFyICpwYXRoLGludCBzeik7CisJLyogUGVyZm9ybSBnbG9iYWwgc3ltYm9sIGxvb2t1cCwgaS5lLiBhbW9uZyAqYWxsKiBtb2R1bGVzICovCisJdm9pZCAqKCpnbG9iYWxsb29rdXApKGNvbnN0IGNoYXIgKnN5bW5hbWUpOwogCX0gRFNPX01FVEhPRDsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xODMsNyArMTg4LDcgQEAKIAkgKiBmb3IgdXNlIGluIHRoZSBkc29fYmluZCBoYW5kbGVyLiBBbGwgaW4gYWxsLCBsZXQgZWFjaAogCSAqIG1ldGhvZCBjb250cm9sIGl0cyBvd24gZGVzdGlueS4gIkhhbmRsZXMiIGFuZCBzdWNoIGdvIGluCiAJICogYSBTVEFDSy4gKi8KLQlTVEFDSyAqbWV0aF9kYXRhOworCVNUQUNLX09GKHZvaWQpICptZXRoX2RhdGE7CiAJaW50IHJlZmVyZW5jZXM7CiAJaW50IGZsYWdzOwogCS8qIEZvciB1c2UgYnkgYXBwbGljYXRpb25zIGV0YyAuLi4gdXNlIHRoaXMgZm9yIHlvdXIgYml0cyduJ3BpZWNlcywKQEAgLTI5Niw2ICszMDEsMzAgQEAKIC8qIElmIFZNUyBpcyBkZWZpbmVkLCB1c2Ugc2hhcmVkIGltYWdlcy4gSWYgbm90LCByZXR1cm4gTlVMTC4gKi8KIERTT19NRVRIT0QgKkRTT19NRVRIT0Rfdm1zKHZvaWQpOwogCisvKiBUaGlzIGZ1bmN0aW9uIHdyaXRlcyBudWxsLXRlcm1pbmF0ZWQgcGF0aG5hbWUgb2YgRFNPIG1vZHVsZQorICogY29udGFpbmluZyAnYWRkcicgaW50byAnc3onIGxhcmdlIGNhbGxlci1wcm92aWRlZCAncGF0aCcgYW5kCisgKiByZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBbaW5jbHVkaW5nIHRyYWlsaW5nIHplcm9dCisgKiB3cml0dGVuIHRvIGl0LiBJZiAnc3onIGlzIDAgb3IgbmVnYXRpdmUsICdwYXRoJyBpcyBpZ25vcmVkIGFuZAorICogcmVxdWlyZWQgYW1vdW50IG9mIGNoYXJhY2hlcnMgW2luY2x1ZGluZyB0cmFpbGluZyB6ZXJvXSB0bworICogYWNjb21vZGF0ZSBwYXRobmFtZSBpcyByZXR1cm5lZC4gSWYgJ2FkZHInIGlzIE5VTEwsIHRoZW4KKyAqIHBhdGhuYW1lIG9mIGNyeXB0b2xpYiBpdHNlbGYgaXMgcmV0dXJuZWQuIE5lZ2F0aXZlIG9yIHplcm8KKyAqIHJldHVybiB2YWx1ZSBkZW5vdGVzIGVycm9yLgorICovCitpbnQgRFNPX3BhdGhieWFkZHIodm9pZCAqYWRkcixjaGFyICpwYXRoLGludCBzeik7CisKKy8qIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIHVzZWQgd2l0aCBjYXV0aW9uISBJdCBsb29rcyB1cCBzeW1ib2xzIGluCisgKiAqYWxsKiBsb2FkZWQgbW9kdWxlcyBhbmQgaWYgbW9kdWxlIGdldHMgdW5sb2FkZWQgYnkgc29tZWJvZHkgZWxzZQorICogYXR0ZW1wdCB0byBkZXJlZmVyZW5jZSB0aGUgcG9pbnRlciBpcyBkb29tZWQgdG8gaGF2ZSBmYXRhbAorICogY29uc2VxdWVuY2VzLiBQcmltYXJ5IHVzYWdlIGZvciB0aGlzIGZ1bmN0aW9uIGlzIHRvIHByb2JlICpjb3JlKgorICogc3lzdGVtIGZ1bmN0aW9uYWxpdHksIGUuZy4gY2hlY2sgaWYgZ2V0bmFtZWluZm8oMykgaXMgYXZhaWxhYmxlCisgKiBhdCBydW4tdGltZSB3aXRob3V0IGJvdGhlcmluZyBhYm91dCBPUy1zcGVjaWZpYyBkZXRhaWxzIHN1Y2ggYXMKKyAqIGxpYmMuc28udmVyc2lvbmluZyBvciB3aGVyZSBkb2VzIGl0IGFjdHVhbGx5IHJlc2lkZTogaW4gbGliYworICogaXRzZWxmIG9yIGxpYnNvY2tldC4gKi8KK3ZvaWQgKkRTT19nbG9iYWxfbG9va3VwKGNvbnN0IGNoYXIgKm5hbWUpOworCisvKiBJZiBCZU9TIGlzIGRlZmluZWQsIHVzZSBzaGFyZWQgaW1hZ2VzLiBJZiBub3QsIHJldHVybiBOVUxMLiAqLworRFNPX01FVEhPRCAqRFNPX01FVEhPRF9iZW9zKHZvaWQpOworCiAvKiBCRUdJTiBFUlJPUiBDT0RFUyAqLwogLyogVGhlIGZvbGxvd2luZyBsaW5lcyBhcmUgYXV0byBnZW5lcmF0ZWQgYnkgdGhlIHNjcmlwdCBta2Vyci5wbC4gQW55IGNoYW5nZXMKICAqIG1hZGUgYWZ0ZXIgdGhpcyBwb2ludCBtYXkgYmUgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgc2NyaXB0IGlzIG5leHQgcnVuLgpAQCAtMzA1LDYgKzMzNCwxMSBAQAogLyogRXJyb3IgY29kZXMgZm9yIHRoZSBEU08gZnVuY3Rpb25zLiAqLwogCiAvKiBGdW5jdGlvbiBjb2Rlcy4gKi8KKyNkZWZpbmUgRFNPX0ZfQkVPU19CSU5EX0ZVTkMJCQkJIDE0NAorI2RlZmluZSBEU09fRl9CRU9TX0JJTkRfVkFSCQkJCSAxNDUKKyNkZWZpbmUgRFNPX0ZfQkVPU19MT0FECQkJCQkgMTQ2CisjZGVmaW5lIERTT19GX0JFT1NfTkFNRV9DT05WRVJURVIJCQkgMTQ3CisjZGVmaW5lIERTT19GX0JFT1NfVU5MT0FECQkJCSAxNDgKICNkZWZpbmUgRFNPX0ZfRExGQ05fQklORF9GVU5DCQkJCSAxMDAKICNkZWZpbmUgRFNPX0ZfRExGQ05fQklORF9WQVIJCQkJIDEwMQogI2RlZmluZSBEU09fRl9ETEZDTl9MT0FECQkJCSAxMDIKQEAgLTMyNCwyMiArMzU4LDI5IEBACiAjZGVmaW5lIERTT19GX0RTT19GUkVFCQkJCQkgMTExCiAjZGVmaW5lIERTT19GX0RTT19HRVRfRklMRU5BTUUJCQkJIDEyNwogI2RlZmluZSBEU09fRl9EU09fR0VUX0xPQURFRF9GSUxFTkFNRQkJCSAxMjgKKyNkZWZpbmUgRFNPX0ZfRFNPX0dMT0JBTF9MT09LVVAJCQkJIDEzOQogI2RlZmluZSBEU09fRl9EU09fTE9BRAkJCQkJIDExMgogI2RlZmluZSBEU09fRl9EU09fTUVSR0UJCQkJCSAxMzIKICNkZWZpbmUgRFNPX0ZfRFNPX05FV19NRVRIT0QJCQkJIDExMworI2RlZmluZSBEU09fRl9EU09fUEFUSEJZQUREUgkJCQkgMTQwCiAjZGVmaW5lIERTT19GX0RTT19TRVRfRklMRU5BTUUJCQkJIDEyOQogI2RlZmluZSBEU09fRl9EU09fU0VUX05BTUVfQ09OVkVSVEVSCQkJIDEyMgogI2RlZmluZSBEU09fRl9EU09fVVBfUkVGCQkJCSAxMTQKKyNkZWZpbmUgRFNPX0ZfR0xPQkFMX0xPT0tVUF9GVU5DCQkJIDEzOAorI2RlZmluZSBEU09fRl9QQVRIQllBRERSCQkJCSAxMzcKICNkZWZpbmUgRFNPX0ZfVk1TX0JJTkRfU1lNCQkJCSAxMTUKICNkZWZpbmUgRFNPX0ZfVk1TX0xPQUQJCQkJCSAxMTYKICNkZWZpbmUgRFNPX0ZfVk1TX01FUkdFUgkJCQkgMTMzCiAjZGVmaW5lIERTT19GX1ZNU19VTkxPQUQJCQkJIDExNwogI2RlZmluZSBEU09fRl9XSU4zMl9CSU5EX0ZVTkMJCQkJIDExOAogI2RlZmluZSBEU09fRl9XSU4zMl9CSU5EX1ZBUgkJCQkgMTE5CisjZGVmaW5lIERTT19GX1dJTjMyX0dMT0JBTExPT0tVUAkJCSAxNDIKKyNkZWZpbmUgRFNPX0ZfV0lOMzJfR0xPQkFMTE9PS1VQX0ZVTkMJCQkgMTQzCiAjZGVmaW5lIERTT19GX1dJTjMyX0pPSU5FUgkJCQkgMTM1CiAjZGVmaW5lIERTT19GX1dJTjMyX0xPQUQJCQkJIDEyMAogI2RlZmluZSBEU09fRl9XSU4zMl9NRVJHRVIJCQkJIDEzNAogI2RlZmluZSBEU09fRl9XSU4zMl9OQU1FX0NPTlZFUlRFUgkJCSAxMjUKKyNkZWZpbmUgRFNPX0ZfV0lOMzJfUEFUSEJZQUREUgkJCQkgMTQxCiAjZGVmaW5lIERTT19GX1dJTjMyX1NQTElUVEVSCQkJCSAxMzYKICNkZWZpbmUgRFNPX0ZfV0lOMzJfVU5MT0FECQkJCSAxMjEKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVuc3NsL2R0bHMxLmggYi9pbmNsdWRlL29wZW5zc2wvZHRsczEuaAppbmRleCBhOGNlNTFhLi5hZjM2M2E5IDEwMDY0NAotLS0gYS9pbmNsdWRlL29wZW5zc2wvZHRsczEuaAorKysgYi9pbmNsdWRlL29wZW5zc2wvZHRsczEuaApAQCAtMTA4LDE1ICsxMDgsMTcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgZHRsczFfYml0bWFwX3N0CiAJewotCVBRXzY0QklUIG1hcDsKLQl1bnNpZ25lZCBsb25nIGxlbmd0aDsgICAgIC8qIHNpemVvZiB0aGUgYml0bWFwIGluIGJpdHMgKi8KLQlQUV82NEJJVCBtYXhfc2VxX251bTsgIC8qIG1heCByZWNvcmQgbnVtYmVyIHNlZW4gc28gZmFyICovCisJdW5zaWduZWQgbG9uZyBtYXA7CQkvKiB0cmFjayAzMiBwYWNrZXRzIG9uIDMyLWJpdCBzeXN0ZW1zCisJCQkJCSAgIGFuZCA2NCAtIG9uIDY0LWJpdCBzeXN0ZW1zICovCisJdW5zaWduZWQgY2hhciBtYXhfc2VxX251bVs4XTsJLyogbWF4IHJlY29yZCBudW1iZXIgc2VlbiBzbyBmYXIsCisJCQkJCSAgIDY0LWJpdCB2YWx1ZSBpbiBiaWctZW5kaWFuCisJCQkJCSAgIGVuY29kaW5nICovCiAJfSBEVExTMV9CSVRNQVA7CiAKIHN0cnVjdCBkdGxzMV9yZXRyYW5zbWl0X3N0YXRlCiAJewogCUVWUF9DSVBIRVJfQ1RYICplbmNfd3JpdGVfY3R4OwkvKiBjcnlwdG9ncmFwaGljIHN0YXRlICovCi0JY29uc3QgRVZQX01EICp3cml0ZV9oYXNoOwkJLyogdXNlZCBmb3IgbWFjIGdlbmVyYXRpb24gKi8KKwlFVlBfTURfQ1RYICp3cml0ZV9oYXNoOwkJCS8qIHVzZWQgZm9yIG1hYyBnZW5lcmF0aW9uICovCiAjaWZuZGVmIE9QRU5TU0xfTk9fQ09NUAogCUNPTVBfQ1RYICpjb21wcmVzczsJCQkJLyogY29tcHJlc3Npb24gKi8KICNlbHNlCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCBiL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCmluZGV4IDlkYTBiNjUuLjRjNzg1YzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCisrKyBiL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCkBAIC0yMDIsNiArMjAyLDE3IEBACiAjIGRlZmluZSBPUEVOU1NMX1NZU19WWFdPUktTCiAjZW5kaWYKIAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJlT1MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2lmIGRlZmluZWQoX19CRU9TX18pCisjIGRlZmluZSBPUEVOU1NMX1NZU19CRU9TCisjIGluY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyMgaWYgZGVmaW5lZChCT05FX1ZFUlNJT04pCisjICBkZWZpbmUgT1BFTlNTTF9TWVNfQkVPU19CT05FCisjIGVsc2UKKyMgIGRlZmluZSBPUEVOU1NMX1NZU19CRU9TX1I1CisjIGVuZGlmCisjZW5kaWYKKwogLyoqCiAgKiBUaGF0J3MgaXQgZm9yIE9TLXNwZWNpZmljIHN0dWZmCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yNTEsMjQgKzI2MiwyMyBAQAogI2RlZmluZSBPUEVOU1NMX0VYVEVSTiBPUEVOU1NMX0lNUE9SVAogCiAvKiBNYWNyb3MgdG8gYWxsb3cgZ2xvYmFsIHZhcmlhYmxlcyB0byBiZSByZWFjaGVkIHRocm91Z2ggZnVuY3Rpb24gY2FsbHMgd2hlbgotICAgcmVxdWlyZWQgKGlmIGEgc2hhcmVkIGxpYnJhcnkgdmVyc2lvbiByZXF1dnJlcyBpdCwgZm9yIGV4YW1wbGUuCisgICByZXF1aXJlZCAoaWYgYSBzaGFyZWQgbGlicmFyeSB2ZXJzaW9uIHJlcXVpcmVzIGl0LCBmb3IgZXhhbXBsZS4KICAgIFRoZSB3YXkgaXQncyBkb25lIGFsbG93cyBkZWZpbml0aW9ucyBsaWtlIHRoaXM6CiAKIAkvLyBpbiBmb29iYXIuYwotCU9QRU5TU0xfSU1QTEVNRU5UX0dMT0JBTChpbnQsZm9vYmFyKSA9IDA7CisJT1BFTlNTTF9JTVBMRU1FTlRfR0xPQkFMKGludCxmb29iYXIsMCkKIAkvLyBpbiBmb29iYXIuaAogCU9QRU5TU0xfREVDTEFSRV9HTE9CQUwoaW50LGZvb2Jhcik7CiAJI2RlZmluZSBmb29iYXIgT1BFTlNTTF9HTE9CQUxfUkVGKGZvb2JhcikKICovCiAjaWZkZWYgT1BFTlNTTF9FWFBPUlRfVkFSX0FTX0ZVTkNUSU9OCi0jIGRlZmluZSBPUEVOU1NMX0lNUExFTUVOVF9HTE9CQUwodHlwZSxuYW1lKQkJCSAgICAgXAotCWV4dGVybiB0eXBlIF9oaWRlXyMjbmFtZTsJCQkJICAgICBcCi0JdHlwZSAqX3NoYWRvd18jI25hbWUodm9pZCkgeyByZXR1cm4gJl9oaWRlXyMjbmFtZTsgfQkgICAgIFwKLQlzdGF0aWMgdHlwZSBfaGlkZV8jI25hbWUKKyMgZGVmaW5lIE9QRU5TU0xfSU1QTEVNRU5UX0dMT0JBTCh0eXBlLG5hbWUsdmFsdWUpCQkJXAorCXR5cGUgKl9zaGFkb3dfIyNuYW1lKHZvaWQpCQkJCQlcCisJeyBzdGF0aWMgdHlwZSBfaGlkZV8jI25hbWU9dmFsdWU7IHJldHVybiAmX2hpZGVfIyNuYW1lOyB9CiAjIGRlZmluZSBPUEVOU1NMX0RFQ0xBUkVfR0xPQkFMKHR5cGUsbmFtZSkgdHlwZSAqX3NoYWRvd18jI25hbWUodm9pZCkKICMgZGVmaW5lIE9QRU5TU0xfR0xPQkFMX1JFRihuYW1lKSAoKihfc2hhZG93XyMjbmFtZSgpKSkKICNlbHNlCi0jIGRlZmluZSBPUEVOU1NMX0lNUExFTUVOVF9HTE9CQUwodHlwZSxuYW1lKSBPUEVOU1NMX0dMT0JBTCB0eXBlIF9zaGFkb3dfIyNuYW1lCisjIGRlZmluZSBPUEVOU1NMX0lNUExFTUVOVF9HTE9CQUwodHlwZSxuYW1lLHZhbHVlKSBPUEVOU1NMX0dMT0JBTCB0eXBlIF9zaGFkb3dfIyNuYW1lPXZhbHVlOwogIyBkZWZpbmUgT1BFTlNTTF9ERUNMQVJFX0dMT0JBTCh0eXBlLG5hbWUpIE9QRU5TU0xfRVhQT1JUIHR5cGUgX3NoYWRvd18jI25hbWUKICMgZGVmaW5lIE9QRU5TU0xfR0xPQkFMX1JFRihuYW1lKSBfc2hhZG93XyMjbmFtZQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW5zc2wvZWMuaCBiL2luY2x1ZGUvb3BlbnNzbC9lYy5oCmluZGV4IDhiYzJhMjMuLmVlNzA3ODEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvb3BlbnNzbC9lYy5oCisrKyBiL2luY2x1ZGUvb3BlbnNzbC9lYy5oCkBAIC0yLDggKzIsMTIgQEAKIC8qCiAgKiBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgQm9kbyBNb2VsbGVyIGZvciB0aGUgT3BlblNTTCBwcm9qZWN0LgogICovCisvKioKKyAqIFxmaWxlIGNyeXB0by9lYy9lYy5oIEluY2x1ZGUgZmlsZSBmb3IgdGhlIE9wZW5TU0wgRUMgZnVuY3Rpb25zCisgKiBcYXV0aG9yIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBCb2RvIE1vZWxsZXIgZm9yIHRoZSBPcGVuU1NMIHByb2plY3QKKyAqLwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkyLDE1ICs5NiwyMSBAQAogIyBlbmRpZgogI2VuZGlmCiAKLQorICAKICNpZm5kZWYgT1BFTlNTTF9FQ0NfTUFYX0ZJRUxEX0JJVFMKICMgZGVmaW5lIE9QRU5TU0xfRUNDX01BWF9GSUVMRF9CSVRTIDY2MQogI2VuZGlmCiAKKy8qKiBFbnVtIGZvciB0aGUgcG9pbnQgY29udmVyc2lvbiBmb3JtIGFzIGRlZmluZWQgaW4gWDkuNjIgKEVDRFNBKQorICogIGZvciB0aGUgZW5jb2Rpbmcgb2YgYSBlbGxpcHRpYyBjdXJ2ZSBwb2ludCAoeCx5KSAqLwogdHlwZWRlZiBlbnVtIHsKLQkvKiB2YWx1ZXMgYXMgZGVmaW5lZCBpbiBYOS42MiAoRUNEU0EpIGFuZCBlbHNld2hlcmUgKi8KKwkvKiogdGhlIHBvaW50IGlzIGVuY29kZWQgYXMgenx8eCwgd2hlcmUgdGhlIG9jdGV0IHogc3BlY2lmaWVzIAorCSAqICB3aGljaCBzb2x1dGlvbiBvZiB0aGUgcXVhZHJhdGljIGVxdWF0aW9uIHkgaXMgICovCiAJUE9JTlRfQ09OVkVSU0lPTl9DT01QUkVTU0VEID0gMiwKKwkvKiogdGhlIHBvaW50IGlzIGVuY29kZWQgYXMgenx8eHx8eSwgd2hlcmUgeiBpcyB0aGUgb2N0ZXQgMHgwMiAgKi8KIAlQT0lOVF9DT05WRVJTSU9OX1VOQ09NUFJFU1NFRCA9IDQsCisJLyoqIHRoZSBwb2ludCBpcyBlbmNvZGVkIGFzIHp8fHh8fHksIHdoZXJlIHRoZSBvY3RldCB6IHNwZWNpZmllcworICAgICAgICAgKiAgd2hpY2ggc29sdXRpb24gb2YgdGhlIHF1YWRyYXRpYyBlcXVhdGlvbiB5IGlzICAqLwogCVBPSU5UX0NPTlZFUlNJT05fSFlCUklEID0gNgogfSBwb2ludF9jb252ZXJzaW9uX2Zvcm1fdDsKIApAQCAtMTIxLDM3ICsxMzEsMTI5IEBACiB0eXBlZGVmIHN0cnVjdCBlY19wb2ludF9zdCBFQ19QT0lOVDsKIAogCi0vKiBFQ19NRVRIT0RzIGZvciBjdXJ2ZXMgb3ZlciBHRihwKS4KLSAqIEVDX0dGcF9zaW1wbGVfbWV0aG9kIHByb3ZpZGVzIHRoZSBiYXNpcyBmb3IgdGhlIG9wdGltaXplZCBtZXRob2RzLgorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICBFQ19NRVRIT0RzIGZvciBjdXJ2ZXMgb3ZlciBHRihwKSAgICAgICAgICAgICAgICAgICAqLyAgICAgICAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqIFJldHVybnMgdGhlIGJhc2ljIEdGcCBlYyBtZXRob2RzIHdoaWNoIHByb3ZpZGVzIHRoZSBiYXNpcyBmb3IgdGhlCisgKiAgb3B0aW1pemVkIG1ldGhvZHMuIAorICogIFxyZXR1cm4gIEVDX01FVEhPRCBvYmplY3QKICAqLwogY29uc3QgRUNfTUVUSE9EICpFQ19HRnBfc2ltcGxlX21ldGhvZCh2b2lkKTsKKworLyoqIFJldHVybnMgR0ZwIG1ldGhvZHMgdXNpbmcgbW9udGdvbWVyeSBtdWx0aXBsaWNhdGlvbi4KKyAqICBccmV0dXJuICBFQ19NRVRIT0Qgb2JqZWN0CisgKi8KIGNvbnN0IEVDX01FVEhPRCAqRUNfR0ZwX21vbnRfbWV0aG9kKHZvaWQpOworCisvKiogUmV0dXJucyBHRnAgbWV0aG9kcyB1c2luZyBvcHRpbWl6ZWQgbWV0aG9kcyBmb3IgTklTVCByZWNvbW1lbmRlZCBjdXJ2ZXMKKyAqICBccmV0dXJuICBFQ19NRVRIT0Qgb2JqZWN0CisgKi8KIGNvbnN0IEVDX01FVEhPRCAqRUNfR0ZwX25pc3RfbWV0aG9kKHZvaWQpOwogCi0vKiBFQ19NRVRIT0QgZm9yIGN1cnZlcyBvdmVyIEdGKDJebSkuCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gCisvKiAgICAgICAgICAgRUNfTUVUSE9EIGZvciBjdXJ2ZXMgb3ZlciBHRigyXm0pICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKiBSZXR1cm5zIHRoZSBiYXNpYyBHRjJtIGVjIG1ldGhvZCAKKyAqICBccmV0dXJuICBFQ19NRVRIT0Qgb2JqZWN0CiAgKi8KIGNvbnN0IEVDX01FVEhPRCAqRUNfR0YybV9zaW1wbGVfbWV0aG9kKHZvaWQpOwogCiAKLUVDX0dST1VQICpFQ19HUk9VUF9uZXcoY29uc3QgRUNfTUVUSE9EICopOwotdm9pZCBFQ19HUk9VUF9mcmVlKEVDX0dST1VQICopOwotdm9pZCBFQ19HUk9VUF9jbGVhcl9mcmVlKEVDX0dST1VQICopOwotaW50IEVDX0dST1VQX2NvcHkoRUNfR1JPVVAgKiwgY29uc3QgRUNfR1JPVVAgKik7Ci1FQ19HUk9VUCAqRUNfR1JPVVBfZHVwKGNvbnN0IEVDX0dST1VQICopOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgRUNfR1JPVVAgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1jb25zdCBFQ19NRVRIT0QgKkVDX0dST1VQX21ldGhvZF9vZihjb25zdCBFQ19HUk9VUCAqKTsKLWludCBFQ19NRVRIT0RfZ2V0X2ZpZWxkX3R5cGUoY29uc3QgRUNfTUVUSE9EICopOworLyoqIENyZWF0ZXMgYSBuZXcgRUNfR1JPVVAgb2JqZWN0CisgKiAgXHBhcmFtICAgbWV0aCAgRUNfTUVUSE9EIHRvIHVzZQorICogIFxyZXR1cm4gIG5ld2x5IGNyZWF0ZWQgRUNfR1JPVVAgb2JqZWN0IG9yIE5VTEwgaW4gY2FzZSBvZiBhbiBlcnJvci4KKyAqLworRUNfR1JPVVAgKkVDX0dST1VQX25ldyhjb25zdCBFQ19NRVRIT0QgKm1ldGgpOwogCi1pbnQgRUNfR1JPVVBfc2V0X2dlbmVyYXRvcihFQ19HUk9VUCAqLCBjb25zdCBFQ19QT0lOVCAqZ2VuZXJhdG9yLCBjb25zdCBCSUdOVU0gKm9yZGVyLCBjb25zdCBCSUdOVU0gKmNvZmFjdG9yKTsKLWNvbnN0IEVDX1BPSU5UICpFQ19HUk9VUF9nZXQwX2dlbmVyYXRvcihjb25zdCBFQ19HUk9VUCAqKTsKLWludCBFQ19HUk9VUF9nZXRfb3JkZXIoY29uc3QgRUNfR1JPVVAgKiwgQklHTlVNICpvcmRlciwgQk5fQ1RYICopOwotaW50IEVDX0dST1VQX2dldF9jb2ZhY3Rvcihjb25zdCBFQ19HUk9VUCAqLCBCSUdOVU0gKmNvZmFjdG9yLCBCTl9DVFggKik7CisvKiogRnJlZXMgYSBFQ19HUk9VUCBvYmplY3QKKyAqICBccGFyYW0gIGdyb3VwICBFQ19HUk9VUCBvYmplY3QgdG8gYmUgZnJlZWQuCisgKi8KK3ZvaWQgRUNfR1JPVVBfZnJlZShFQ19HUk9VUCAqZ3JvdXApOwogCi12b2lkIEVDX0dST1VQX3NldF9jdXJ2ZV9uYW1lKEVDX0dST1VQICosIGludCBuaWQpOwotaW50IEVDX0dST1VQX2dldF9jdXJ2ZV9uYW1lKGNvbnN0IEVDX0dST1VQICopOworLyoqIENsZWFycyBhbmQgZnJlZXMgYSBFQ19HUk9VUCBvYmplY3QKKyAqICBccGFyYW0gIGdyb3VwICBFQ19HUk9VUCBvYmplY3QgdG8gYmUgY2xlYXJlZCBhbmQgZnJlZWQuCisgKi8KK3ZvaWQgRUNfR1JPVVBfY2xlYXJfZnJlZShFQ19HUk9VUCAqZ3JvdXApOwogCi12b2lkIEVDX0dST1VQX3NldF9hc24xX2ZsYWcoRUNfR1JPVVAgKiwgaW50IGZsYWcpOwotaW50IEVDX0dST1VQX2dldF9hc24xX2ZsYWcoY29uc3QgRUNfR1JPVVAgKik7CisvKiogQ29waWVzIEVDX0dST1VQIG9iamVjdHMuIE5vdGU6IGJvdGggRUNfR1JPVVBzIG11c3QgdXNlIHRoZSBzYW1lIEVDX01FVEhPRC4KKyAqICBccGFyYW0gIGRzdCAgZGVzdGluYXRpb24gRUNfR1JPVVAgb2JqZWN0CisgKiAgXHBhcmFtICBzcmMgIHNvdXJjZSBFQ19HUk9VUCBvYmplY3QKKyAqICBccmV0dXJuIDEgb24gc3VjY2VzcyBhbmQgMCBpZiBhbiBlcnJvciBvY2N1cnJlZC4KKyAqLworaW50IEVDX0dST1VQX2NvcHkoRUNfR1JPVVAgKmRzdCwgY29uc3QgRUNfR1JPVVAgKnNyYyk7CisKKy8qKiBDcmVhdGVzIGEgbmV3IEVDX0dST1VQIG9iamVjdCBhbmQgY29waWVzIHRoZSBjb3BpZXMgdGhlIGNvbnRlbnQKKyAqICBmb3JtIHNyYyB0byB0aGUgbmV3bHkgY3JlYXRlZCBFQ19LRVkgb2JqZWN0CisgKiAgXHBhcmFtICBzcmMgIHNvdXJjZSBFQ19HUk9VUCBvYmplY3QKKyAqICBccmV0dXJuIG5ld2x5IGNyZWF0ZWQgRUNfR1JPVVAgb2JqZWN0IG9yIE5VTEwgaW4gY2FzZSBvZiBhbiBlcnJvci4KKyAqLworRUNfR1JPVVAgKkVDX0dST1VQX2R1cChjb25zdCBFQ19HUk9VUCAqc3JjKTsKKworLyoqIFJldHVybnMgdGhlIEVDX01FVEhPRCBvZiB0aGUgRUNfR1JPVVAgb2JqZWN0LgorICogIFxwYXJhbSAgZ3JvdXAgIEVDX0dST1VQIG9iamVjdCAKKyAqICBccmV0dXJuIEVDX01FVEhPRCB1c2VkIGluIHRoaXMgRUNfR1JPVVAgb2JqZWN0LgorICovCitjb25zdCBFQ19NRVRIT0QgKkVDX0dST1VQX21ldGhvZF9vZihjb25zdCBFQ19HUk9VUCAqZ3JvdXApOworCisvKiogUmV0dXJucyB0aGUgZmllbGQgdHlwZSBvZiB0aGUgRUNfTUVUSE9ELgorICogIFxwYXJhbSAgbWV0aCAgRUNfTUVUSE9EIG9iamVjdAorICogIFxyZXR1cm4gTklEIG9mIHRoZSB1bmRlcmx5aW5nIGZpZWxkIHR5cGUgT0lELgorICovCitpbnQgRUNfTUVUSE9EX2dldF9maWVsZF90eXBlKGNvbnN0IEVDX01FVEhPRCAqbWV0aCk7CisKKy8qKiBTZXRzIHRoZSBnZW5lcmF0b3IgYW5kIGl0J3Mgb3JkZXIvY29mYWN0b3Igb2YgYSBFQ19HUk9VUCBvYmplY3QuCisgKiAgXHBhcmFtICBncm91cCAgICAgIEVDX0dST1VQIG9iamVjdCAKKyAqICBccGFyYW0gIGdlbmVyYXRvciAgRUNfUE9JTlQgb2JqZWN0IHdpdGggdGhlIGdlbmVyYXRvci4KKyAqICBccGFyYW0gIG9yZGVyICAgICAgdGhlIG9yZGVyIG9mIHRoZSBncm91cCBnZW5lcmF0ZWQgYnkgdGhlIGdlbmVyYXRvci4KKyAqICBccGFyYW0gIGNvZmFjdG9yICAgdGhlIGluZGV4IG9mIHRoZSBzdWItZ3JvdXAgZ2VuZXJhdGVkIGJ5IHRoZSBnZW5lcmF0b3IKKyAqICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGdyb3VwIG9mIGFsbCBwb2ludHMgb24gdGhlIGVsbGlwdGljIGN1cnZlLgorICogIFxyZXR1cm4gMSBvbiBzdWNjZXNzIGFuZCAwIGlmIGFuIGVycm9yIG9jY3VyZWQKKyAqLworaW50IEVDX0dST1VQX3NldF9nZW5lcmF0b3IoRUNfR1JPVVAgKmdyb3VwLCBjb25zdCBFQ19QT0lOVCAqZ2VuZXJhdG9yLCBjb25zdCBCSUdOVU0gKm9yZGVyLCBjb25zdCBCSUdOVU0gKmNvZmFjdG9yKTsKKworLyoqIFJldHVybnMgdGhlIGdlbmVyYXRvciBvZiBhIEVDX0dST1VQIG9iamVjdC4KKyAqICBccGFyYW0gIGdyb3VwICBFQ19HUk9VUCBvYmplY3QKKyAqICBccmV0dXJuIHRoZSBjdXJyZW50bHkgdXNlZCBnZW5lcmF0b3IgKHBvc3NpYmx5IE5VTEwpLgorICovCitjb25zdCBFQ19QT0lOVCAqRUNfR1JPVVBfZ2V0MF9nZW5lcmF0b3IoY29uc3QgRUNfR1JPVVAgKmdyb3VwKTsKKworLyoqIEdldHMgdGhlIG9yZGVyIG9mIGEgRUNfR1JPVVAKKyAqICBccGFyYW0gIGdyb3VwICBFQ19HUk9VUCBvYmplY3QKKyAqICBccGFyYW0gIG9yZGVyICBCSUdOVU0gdG8gd2hpY2ggdGhlIG9yZGVyIGlzIGNvcGllZAorICogIFxwYXJhbSAgY3R4ICAgIEJOX0NUWCBvYmplY3QgKG9wdGlvbmFsKQorICogIFxyZXR1cm4gMSBvbiBzdWNjZXNzIGFuZCAwIGlmIGFuIGVycm9yIG9jY3VyZWQKKyAqLworaW50IEVDX0dST1VQX2dldF9vcmRlcihjb25zdCBFQ19HUk9VUCAqZ3JvdXAsIEJJR05VTSAqb3JkZXIsIEJOX0NUWCAqY3R4KTsKKworLyoqIEdldHMgdGhlIGNvZmFjdG9yIG9mIGEgRUNfR1JPVVAKKyAqICBccGFyYW0gIGdyb3VwICAgICBFQ19HUk9VUCBvYmplY3QKKyAqICBccGFyYW0gIGNvZmFjdG9yICBCSUdOVU0gdG8gd2hpY2ggdGhlIGNvZmFjdG9yIGlzIGNvcGllZAorICogIFxwYXJhbSAgY3R4ICAgICAgIEJOX0NUWCBvYmplY3QgKG9wdGlvbmFsKQorICogIFxyZXR1cm4gMSBvbiBzdWNjZXNzIGFuZCAwIGlmIGFuIGVycm9yIG9jY3VyZWQKKyAqLworaW50IEVDX0dST1VQX2dldF9jb2ZhY3Rvcihjb25zdCBFQ19HUk9VUCAqZ3JvdXAsIEJJR05VTSAqY29mYWN0b3IsIEJOX0NUWCAqY3R4KTsKKworLyoqIFNldHMgdGhlIG5hbWUgb2YgYSBFQ19HUk9VUCBvYmplY3QKKyAqICBccGFyYW0gIGdyb3VwICBFQ19HUk9VUCBvYmplY3QKKyAqICBccGFyYW0gIG5pZCAgICBOSUQgb2YgdGhlIGN1cnZlIG5hbWUgT0lECisgKi8KK3ZvaWQgRUNfR1JPVVBfc2V0X2N1cnZlX25hbWUoRUNfR1JPVVAgKmdyb3VwLCBpbnQgbmlkKTsKKworLyoqIFJldHVybnMgdGhlIGN1cnZlIG5hbWUgb2YgYSBFQ19HUk9VUCBvYmplY3QKKyAqICBccGFyYW0gIGdyb3VwICBFQ19HUk9VUCBvYmplY3QKKyAqICBccmV0dXJuIE5JRCBvZiB0aGUgY3VydmUgbmFtZSBPSUQgb3IgMCBpZiBub3Qgc2V0LgorICovCitpbnQgRUNfR1JPVVBfZ2V0X2N1cnZlX25hbWUoY29uc3QgRUNfR1JPVVAgKmdyb3VwKTsKKwordm9pZCBFQ19HUk9VUF9zZXRfYXNuMV9mbGFnKEVDX0dST1VQICpncm91cCwgaW50IGZsYWcpOworaW50IEVDX0dST1VQX2dldF9hc24xX2ZsYWcoY29uc3QgRUNfR1JPVVAgKmdyb3VwKTsKIAogdm9pZCBFQ19HUk9VUF9zZXRfcG9pbnRfY29udmVyc2lvbl9mb3JtKEVDX0dST1VQICosIHBvaW50X2NvbnZlcnNpb25fZm9ybV90KTsKIHBvaW50X2NvbnZlcnNpb25fZm9ybV90IEVDX0dST1VQX2dldF9wb2ludF9jb252ZXJzaW9uX2Zvcm0oY29uc3QgRUNfR1JPVVAgKik7CkBAIC0xNjAsMzYgKzI2MiwxMTQgQEAKIHNpemVfdCBFQ19HUk9VUF9nZXRfc2VlZF9sZW4oY29uc3QgRUNfR1JPVVAgKik7CiBzaXplX3QgRUNfR1JPVVBfc2V0X3NlZWQoRUNfR1JPVVAgKiwgY29uc3QgdW5zaWduZWQgY2hhciAqLCBzaXplX3QgbGVuKTsKIAotaW50IEVDX0dST1VQX3NldF9jdXJ2ZV9HRnAoRUNfR1JPVVAgKiwgY29uc3QgQklHTlVNICpwLCBjb25zdCBCSUdOVU0gKmEsIGNvbnN0IEJJR05VTSAqYiwgQk5fQ1RYICopOwotaW50IEVDX0dST1VQX2dldF9jdXJ2ZV9HRnAoY29uc3QgRUNfR1JPVVAgKiwgQklHTlVNICpwLCBCSUdOVU0gKmEsIEJJR05VTSAqYiwgQk5fQ1RYICopOwotaW50IEVDX0dST1VQX3NldF9jdXJ2ZV9HRjJtKEVDX0dST1VQICosIGNvbnN0IEJJR05VTSAqcCwgY29uc3QgQklHTlVNICphLCBjb25zdCBCSUdOVU0gKmIsIEJOX0NUWCAqKTsKLWludCBFQ19HUk9VUF9nZXRfY3VydmVfR0YybShjb25zdCBFQ19HUk9VUCAqLCBCSUdOVU0gKnAsIEJJR05VTSAqYSwgQklHTlVNICpiLCBCTl9DVFggKik7CisvKiogU2V0cyB0aGUgcGFyYW1ldGVyIG9mIGEgZWMgb3ZlciBHRnAgZGVmaW5lZCBieSB5XjIgPSB4XjMgKyBhKnggKyBiCisgKiAgXHBhcmFtICBncm91cCAgRUNfR1JPVVAgb2JqZWN0CisgKiAgXHBhcmFtICBwICAgICAgQklHTlVNIHdpdGggdGhlIHByaW1lIG51bWJlcgorICogIFxwYXJhbSAgYSAgICAgIEJJR05VTSB3aXRoIHBhcmFtZXRlciBhIG9mIHRoZSBlcXVhdGlvbgorICogIFxwYXJhbSAgYiAgICAgIEJJR05VTSB3aXRoIHBhcmFtZXRlciBiIG9mIHRoZSBlcXVhdGlvbgorICogIFxwYXJhbSAgY3R4ICAgIEJOX0NUWCBvYmplY3QgKG9wdGlvbmFsKQorICogIFxyZXR1cm4gMSBvbiBzdWNjZXNzIGFuZCAwIGlmIGFuIGVycm9yIG9jY3VyZWQKKyAqLworaW50IEVDX0dST1VQX3NldF9jdXJ2ZV9HRnAoRUNfR1JPVVAgKmdyb3VwLCBjb25zdCBCSUdOVU0gKnAsIGNvbnN0IEJJR05VTSAqYSwgY29uc3QgQklHTlVNICpiLCBCTl9DVFggKmN0eCk7CiAKLS8qIHJldHVybnMgdGhlIG51bWJlciBvZiBiaXRzIG5lZWRlZCB0byByZXByZXNlbnQgYSBmaWVsZCBlbGVtZW50ICovCi1pbnQgRUNfR1JPVVBfZ2V0X2RlZ3JlZShjb25zdCBFQ19HUk9VUCAqKTsKKy8qKiBHZXRzIHRoZSBwYXJhbWV0ZXIgb2YgdGhlIGVjIG92ZXIgR0ZwIGRlZmluZWQgYnkgeV4yID0geF4zICsgYSp4ICsgYgorICogIFxwYXJhbSAgZ3JvdXAgIEVDX0dST1VQIG9iamVjdAorICogIFxwYXJhbSAgcCAgICAgIEJJR05VTSBmb3IgdGhlIHByaW1lIG51bWJlcgorICogIFxwYXJhbSAgYSAgICAgIEJJR05VTSBmb3IgcGFyYW1ldGVyIGEgb2YgdGhlIGVxdWF0aW9uCisgKiAgXHBhcmFtICBiICAgICAgQklHTlVNIGZvciBwYXJhbWV0ZXIgYiBvZiB0aGUgZXF1YXRpb24KKyAqICBccGFyYW0gIGN0eCAgICBCTl9DVFggb2JqZWN0IChvcHRpb25hbCkKKyAqICBccmV0dXJuIDEgb24gc3VjY2VzcyBhbmQgMCBpZiBhbiBlcnJvciBvY2N1cmVkCisgKi8KK2ludCBFQ19HUk9VUF9nZXRfY3VydmVfR0ZwKGNvbnN0IEVDX0dST1VQICpncm91cCwgQklHTlVNICpwLCBCSUdOVU0gKmEsIEJJR05VTSAqYiwgQk5fQ1RYICpjdHgpOwogCi0vKiBFQ19HUk9VUF9jaGVjaygpIHJldHVybnMgMSBpZiAnZ3JvdXAnIGRlZmluZXMgYSB2YWxpZCBncm91cCwgMCBvdGhlcndpc2UgKi8KKy8qKiBTZXRzIHRoZSBwYXJhbWV0ZXIgb2YgYSBlYyBvdmVyIEdGMm0gZGVmaW5lZCBieSB5XjIgKyB4KnkgPSB4XjMgKyBhKnheMiArIGIKKyAqICBccGFyYW0gIGdyb3VwICBFQ19HUk9VUCBvYmplY3QKKyAqICBccGFyYW0gIHAgICAgICBCSUdOVU0gd2l0aCB0aGUgcG9seW5vbWlhbCBkZWZpbmluZyB0aGUgdW5kZXJseWluZyBmaWVsZAorICogIFxwYXJhbSAgYSAgICAgIEJJR05VTSB3aXRoIHBhcmFtZXRlciBhIG9mIHRoZSBlcXVhdGlvbgorICogIFxwYXJhbSAgYiAgICAgIEJJR05VTSB3aXRoIHBhcmFtZXRlciBiIG9mIHRoZSBlcXVhdGlvbgorICogIFxwYXJhbSAgY3R4ICAgIEJOX0NUWCBvYmplY3QgKG9wdGlvbmFsKQorICogIFxyZXR1cm4gMSBvbiBzdWNjZXNzIGFuZCAwIGlmIGFuIGVycm9yIG9jY3VyZWQKKyAqLworaW50IEVDX0dST1VQX3NldF9jdXJ2ZV9HRjJtKEVDX0dST1VQICpncm91cCwgY29uc3QgQklHTlVNICpwLCBjb25zdCBCSUdOVU0gKmEsIGNvbnN0IEJJR05VTSAqYiwgQk5fQ1RYICpjdHgpOworCisvKiogR2V0cyB0aGUgcGFyYW1ldGVyIG9mIHRoZSBlYyBvdmVyIEdGMm0gZGVmaW5lZCBieSB5XjIgKyB4KnkgPSB4XjMgKyBhKnheMiArIGIKKyAqICBccGFyYW0gIGdyb3VwICBFQ19HUk9VUCBvYmplY3QKKyAqICBccGFyYW0gIHAgICAgICBCSUdOVU0gZm9yIHRoZSBwb2x5bm9taWFsIGRlZmluaW5nIHRoZSB1bmRlcmx5aW5nIGZpZWxkCisgKiAgXHBhcmFtICBhICAgICAgQklHTlVNIGZvciBwYXJhbWV0ZXIgYSBvZiB0aGUgZXF1YXRpb24KKyAqICBccGFyYW0gIGIgICAgICBCSUdOVU0gZm9yIHBhcmFtZXRlciBiIG9mIHRoZSBlcXVhdGlvbgorICogIFxwYXJhbSAgY3R4ICAgIEJOX0NUWCBvYmplY3QgKG9wdGlvbmFsKQorICogIFxyZXR1cm4gMSBvbiBzdWNjZXNzIGFuZCAwIGlmIGFuIGVycm9yIG9jY3VyZWQKKyAqLworaW50IEVDX0dST1VQX2dldF9jdXJ2ZV9HRjJtKGNvbnN0IEVDX0dST1VQICpncm91cCwgQklHTlVNICpwLCBCSUdOVU0gKmEsIEJJR05VTSAqYiwgQk5fQ1RYICpjdHgpOworCisvKiogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJpdHMgbmVlZGVkIHRvIHJlcHJlc2VudCBhIGZpZWxkIGVsZW1lbnQgCisgKiAgXHBhcmFtICBncm91cCAgRUNfR1JPVVAgb2JqZWN0CisgKiAgXHJldHVybiBudW1iZXIgb2YgYml0cyBuZWVkZWQgdG8gcmVwcmVzZW50IGEgZmllbGQgZWxlbWVudAorICovCitpbnQgRUNfR1JPVVBfZ2V0X2RlZ3JlZShjb25zdCBFQ19HUk9VUCAqZ3JvdXApOworCisvKiogQ2hlY2tzIHdoZXRoZXIgdGhlIHBhcmFtZXRlciBpbiB0aGUgRUNfR1JPVVAgZGVmaW5lIGEgdmFsaWQgZWMgZ3JvdXAKKyAqICBccGFyYW0gIGdyb3VwICBFQ19HUk9VUCBvYmplY3QKKyAqICBccGFyYW0gIGN0eCAgICBCTl9DVFggb2JqZWN0IChvcHRpb25hbCkKKyAqICBccmV0dXJuIDEgaWYgZ3JvdXAgaXMgYSB2YWxpZCBlYyBncm91cCBhbmQgMCBvdGhlcndpc2UKKyAqLwogaW50IEVDX0dST1VQX2NoZWNrKGNvbnN0IEVDX0dST1VQICpncm91cCwgQk5fQ1RYICpjdHgpOwotLyogRUNfR1JPVVBfY2hlY2tfZGlzY3JpbWluYW50KCkgcmV0dXJucyAxIGlmIHRoZSBkaXNjcmltaW5hbnQgb2YgdGhlCi0gKiBlbGxpcHRpYyBjdXJ2ZSBpcyBub3QgemVybywgMCBvdGhlcndpc2UgKi8KLWludCBFQ19HUk9VUF9jaGVja19kaXNjcmltaW5hbnQoY29uc3QgRUNfR1JPVVAgKiwgQk5fQ1RYICopOwogCi0vKiBFQ19HUk9VUF9jbXAoKSByZXR1cm5zIDAgaWYgYm90aCBncm91cHMgYXJlIGVxdWFsIGFuZCAxIG90aGVyd2lzZSAqLwotaW50IEVDX0dST1VQX2NtcChjb25zdCBFQ19HUk9VUCAqLCBjb25zdCBFQ19HUk9VUCAqLCBCTl9DVFggKik7CisvKiogQ2hlY2tzIHdoZXRoZXIgdGhlIGRpc2NyaW1pbmFudCBvZiB0aGUgZWxsaXB0aWMgY3VydmUgaXMgemVybyBvciBub3QKKyAqICBccGFyYW0gIGdyb3VwICBFQ19HUk9VUCBvYmplY3QKKyAqICBccGFyYW0gIGN0eCAgICBCTl9DVFggb2JqZWN0IChvcHRpb25hbCkKKyAqICBccmV0dXJuIDEgaWYgdGhlIGRpc2NyaW1pbmFudCBpcyBub3QgemVybyBhbmQgMCBvdGhlcndpc2UKKyAqLworaW50IEVDX0dST1VQX2NoZWNrX2Rpc2NyaW1pbmFudChjb25zdCBFQ19HUk9VUCAqZ3JvdXAsIEJOX0NUWCAqY3R4KTsKKworLyoqIENvbXBhcmVzIHR3byBFQ19HUk9VUCBvYmplY3RzCisgKiAgXHBhcmFtICBhICAgIGZpcnN0IEVDX0dST1VQIG9iamVjdAorICogIFxwYXJhbSAgYiAgICBzZWNvbmQgRUNfR1JPVVAgb2JqZWN0CisgKiAgXHBhcmFtICBjdHggIEJOX0NUWCBvYmplY3QgKG9wdGlvbmFsKQorICogIFxyZXR1cm4gMCBpZiBib3RoIGdyb3VwcyBhcmUgZXF1YWwgYW5kIDEgb3RoZXJ3aXNlCisgKi8KK2ludCBFQ19HUk9VUF9jbXAoY29uc3QgRUNfR1JPVVAgKmEsIGNvbnN0IEVDX0dST1VQICpiLCBCTl9DVFggKmN0eCk7CiAKIC8qIEVDX0dST1VQX25ld19HRiooKSBjYWxscyBFQ19HUk9VUF9uZXcoKSBhbmQgRUNfR1JPVVBfc2V0X0dGKigpCiAgKiBhZnRlciBjaG9vc2luZyBhbiBhcHByb3ByaWF0ZSBFQ19NRVRIT0QgKi8KLUVDX0dST1VQICpFQ19HUk9VUF9uZXdfY3VydmVfR0ZwKGNvbnN0IEJJR05VTSAqcCwgY29uc3QgQklHTlVNICphLCBjb25zdCBCSUdOVU0gKmIsIEJOX0NUWCAqKTsKLUVDX0dST1VQICpFQ19HUk9VUF9uZXdfY3VydmVfR0YybShjb25zdCBCSUdOVU0gKnAsIGNvbnN0IEJJR05VTSAqYSwgY29uc3QgQklHTlVNICpiLCBCTl9DVFggKik7CiAKLS8qIEVDX0dST1VQX25ld19ieV9jdXJ2ZV9uYW1lKCkgY3JlYXRlcyBhIEVDX0dST1VQIHN0cnVjdHVyZQotICogc3BlY2lmaWVkIGJ5IGEgY3VydmUgbmFtZSAoaW4gZm9ybSBvZiBhIE5JRCkgKi8KKy8qKiBDcmVhdGVzIGEgbmV3IEVDX0dST1VQIG9iamVjdCB3aXRoIHRoZSBzcGVjaWZpZWQgcGFyYW1ldGVycyBkZWZpbmVkCisgKiAgb3ZlciBHRnAgKGRlZmluZWQgYnkgdGhlIGVxdWF0aW9uIHleMiA9IHheMyArIGEqeCArIGIpCisgKiAgXHBhcmFtICBwICAgIEJJR05VTSB3aXRoIHRoZSBwcmltZSBudW1iZXIKKyAqICBccGFyYW0gIGEgICAgQklHTlVNIHdpdGggdGhlIHBhcmFtZXRlciBhIG9mIHRoZSBlcXVhdGlvbgorICogIFxwYXJhbSAgYiAgICBCSUdOVU0gd2l0aCB0aGUgcGFyYW1ldGVyIGIgb2YgdGhlIGVxdWF0aW9uCisgKiAgXHBhcmFtICBjdHggIEJOX0NUWCBvYmplY3QgKG9wdGlvbmFsKQorICogIFxyZXR1cm4gbmV3bHkgY3JlYXRlZCBFQ19HUk9VUCBvYmplY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIHBhcmFtZXRlcnMKKyAqLworRUNfR1JPVVAgKkVDX0dST1VQX25ld19jdXJ2ZV9HRnAoY29uc3QgQklHTlVNICpwLCBjb25zdCBCSUdOVU0gKmEsIGNvbnN0IEJJR05VTSAqYiwgQk5fQ1RYICpjdHgpOworCisvKiogQ3JlYXRlcyBhIG5ldyBFQ19HUk9VUCBvYmplY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIHBhcmFtZXRlcnMgZGVmaW5lZAorICogIG92ZXIgR0YybSAoZGVmaW5lZCBieSB0aGUgZXF1YXRpb24geV4yICsgeCp5ID0geF4zICsgYSp4XjIgKyBiKQorICogIFxwYXJhbSAgcCAgICBCSUdOVU0gd2l0aCB0aGUgcG9seW5vbWlhbCBkZWZpbmluZyB0aGUgdW5kZXJseWluZyBmaWVsZAorICogIFxwYXJhbSAgYSAgICBCSUdOVU0gd2l0aCB0aGUgcGFyYW1ldGVyIGEgb2YgdGhlIGVxdWF0aW9uCisgKiAgXHBhcmFtICBiICAgIEJJR05VTSB3aXRoIHRoZSBwYXJhbWV0ZXIgYiBvZiB0aGUgZXF1YXRpb24KKyAqICBccGFyYW0gIGN0eCAgQk5fQ1RYIG9iamVjdCAob3B0aW9uYWwpCisgKiAgXHJldHVybiBuZXdseSBjcmVhdGVkIEVDX0dST1VQIG9iamVjdCB3aXRoIHRoZSBzcGVjaWZpZWQgcGFyYW1ldGVycworICovCitFQ19HUk9VUCAqRUNfR1JPVVBfbmV3X2N1cnZlX0dGMm0oY29uc3QgQklHTlVNICpwLCBjb25zdCBCSUdOVU0gKmEsIGNvbnN0IEJJR05VTSAqYiwgQk5fQ1RYICpjdHgpOworCisvKiogQ3JlYXRlcyBhIEVDX0dST1VQIG9iamVjdCB3aXRoIGEgY3VydmUgc3BlY2lmaWVkIGJ5IGEgTklECisgKiAgXHBhcmFtICBuaWQgIE5JRCBvZiB0aGUgT0lEIG9mIHRoZSBjdXJ2ZSBuYW1lCisgKiAgXHJldHVybiBuZXdseSBjcmVhdGVkIEVDX0dST1VQIG9iamVjdCB3aXRoIHNwZWNpZmllZCBjdXJ2ZSBvciBOVUxMCisgKiAgICAgICAgICBpZiBhbiBlcnJvciBvY2N1cnJlZAorICovCiBFQ19HUk9VUCAqRUNfR1JPVVBfbmV3X2J5X2N1cnZlX25hbWUoaW50IG5pZCk7Ci0vKiBoYW5kbGluZyBvZiBpbnRlcm5hbCBjdXJ2ZXMgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgIGhhbmRsaW5nIG9mIGludGVybmFsIGN1cnZlcyAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKIHR5cGVkZWYgc3RydWN0IHsgCiAJaW50IG5pZDsKIAljb25zdCBjaGFyICpjb21tZW50OwogCX0gRUNfYnVpbHRpbl9jdXJ2ZTsKKwogLyogRUNfYnVpbHRpbl9jdXJ2ZXMoRUNfYnVpbHRpbl9jdXJ2ZSAqciwgc2l6ZV90IHNpemUpIHJldHVybnMgbnVtYmVyIAogICogb2YgYWxsIGF2YWlsYWJsZSBjdXJ2ZXMgb3IgemVybyBpZiBhIGVycm9yIG9jY3VycmVkLiAKICAqIEluIGNhc2UgciBpc3Qgbm90IHplcm8gbml0ZW1zIEVDX2J1aWx0aW5fY3VydmUgc3RydWN0dXJlcyAKQEAgLTE5NywzOSArMzc3LDE2OCBAQAogc2l6ZV90IEVDX2dldF9idWlsdGluX2N1cnZlcyhFQ19idWlsdGluX2N1cnZlICpyLCBzaXplX3Qgbml0ZW1zKTsKIAogCi0vKiBFQ19QT0lOVCBmdW5jdGlvbnMgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICBFQ19QT0lOVCBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotRUNfUE9JTlQgKkVDX1BPSU5UX25ldyhjb25zdCBFQ19HUk9VUCAqKTsKLXZvaWQgRUNfUE9JTlRfZnJlZShFQ19QT0lOVCAqKTsKLXZvaWQgRUNfUE9JTlRfY2xlYXJfZnJlZShFQ19QT0lOVCAqKTsKLWludCBFQ19QT0lOVF9jb3B5KEVDX1BPSU5UICosIGNvbnN0IEVDX1BPSU5UICopOwotRUNfUE9JTlQgKkVDX1BPSU5UX2R1cChjb25zdCBFQ19QT0lOVCAqLCBjb25zdCBFQ19HUk9VUCAqKTsKKy8qKiBDcmVhdGVzIGEgbmV3IEVDX1BPSU5UIG9iamVjdCBmb3IgdGhlIHNwZWNpZmllZCBFQ19HUk9VUAorICogIFxwYXJhbSAgZ3JvdXAgIEVDX0dST1VQIHRoZSB1bmRlcmx5aW5nIEVDX0dST1VQIG9iamVjdAorICogIFxyZXR1cm4gbmV3bHkgY3JlYXRlZCBFQ19QT0lOVCBvYmplY3Qgb3IgTlVMTCBpZiBhbiBlcnJvciBvY2N1cnJlZAorICovCitFQ19QT0lOVCAqRUNfUE9JTlRfbmV3KGNvbnN0IEVDX0dST1VQICpncm91cCk7CisKKy8qKiBGcmVlcyBhIEVDX1BPSU5UIG9iamVjdAorICogIFxwYXJhbSAgcG9pbnQgIEVDX1BPSU5UIG9iamVjdCB0byBiZSBmcmVlZAorICovCit2b2lkIEVDX1BPSU5UX2ZyZWUoRUNfUE9JTlQgKnBvaW50KTsKKworLyoqIENsZWFycyBhbmQgZnJlZXMgYSBFQ19QT0lOVCBvYmplY3QKKyAqICBccGFyYW0gIHBvaW50ICBFQ19QT0lOVCBvYmplY3QgdG8gYmUgY2xlYXJlZCBhbmQgZnJlZWQKKyAqLwordm9pZCBFQ19QT0lOVF9jbGVhcl9mcmVlKEVDX1BPSU5UICpwb2ludCk7CisKKy8qKiBDb3BpZXMgRUNfUE9JTlQgb2JqZWN0CisgKiAgXHBhcmFtICBkc3QgIGRlc3RpbmF0aW9uIEVDX1BPSU5UIG9iamVjdAorICogIFxwYXJhbSAgc3JjICBzb3VyY2UgRUNfUE9JTlQgb2JqZWN0CisgKiAgXHJldHVybiAxIG9uIHN1Y2Nlc3MgYW5kIDAgaWYgYW4gZXJyb3Igb2NjdXJlZAorICovCitpbnQgRUNfUE9JTlRfY29weShFQ19QT0lOVCAqZHN0LCBjb25zdCBFQ19QT0lOVCAqc3JjKTsKKworLyoqIENyZWF0ZXMgYSBuZXcgRUNfUE9JTlQgb2JqZWN0IGFuZCBjb3BpZXMgdGhlIGNvbnRlbnQgb2YgdGhlIHN1cHBsaWVkCisgKiAgRUNfUE9JTlQKKyAqICBccGFyYW0gIHNyYyAgICBzb3VyY2UgRUNfUE9JTlQgb2JqZWN0CisgKiAgXHBhcmFtICBncm91cCAgdW5kZXJseWluZyB0aGUgRUNfR1JPVVAgb2JqZWN0CisgKiAgXHJldHVybiBuZXdseSBjcmVhdGVkIEVDX1BPSU5UIG9iamVjdCBvciBOVUxMIGlmIGFuIGVycm9yIG9jY3VycmVkIAorICovCitFQ19QT0lOVCAqRUNfUE9JTlRfZHVwKGNvbnN0IEVDX1BPSU5UICpzcmMsIGNvbnN0IEVDX0dST1VQICpncm91cCk7CiAgCi1jb25zdCBFQ19NRVRIT0QgKkVDX1BPSU5UX21ldGhvZF9vZihjb25zdCBFQ19QT0lOVCAqKTsKKy8qKiBSZXR1cm5zIHRoZSBFQ19NRVRIT0QgdXNlZCBpbiBFQ19QT0lOVCBvYmplY3QgCisgKiAgXHBhcmFtICBwb2ludCAgRUNfUE9JTlQgb2JqZWN0CisgKiAgXHJldHVybiB0aGUgRUNfTUVUSE9EIHVzZWQKKyAqLworY29uc3QgRUNfTUVUSE9EICpFQ19QT0lOVF9tZXRob2Rfb2YoY29uc3QgRUNfUE9JTlQgKnBvaW50KTsKIAotaW50IEVDX1BPSU5UX3NldF90b19pbmZpbml0eShjb25zdCBFQ19HUk9VUCAqLCBFQ19QT0lOVCAqKTsKLWludCBFQ19QT0lOVF9zZXRfSnByb2plY3RpdmVfY29vcmRpbmF0ZXNfR0ZwKGNvbnN0IEVDX0dST1VQICosIEVDX1BPSU5UICosCi0JY29uc3QgQklHTlVNICp4LCBjb25zdCBCSUdOVU0gKnksIGNvbnN0IEJJR05VTSAqeiwgQk5fQ1RYICopOwotaW50IEVDX1BPSU5UX2dldF9KcHJvamVjdGl2ZV9jb29yZGluYXRlc19HRnAoY29uc3QgRUNfR1JPVVAgKiwgY29uc3QgRUNfUE9JTlQgKiwKLQlCSUdOVU0gKngsIEJJR05VTSAqeSwgQklHTlVNICp6LCBCTl9DVFggKik7Ci1pbnQgRUNfUE9JTlRfc2V0X2FmZmluZV9jb29yZGluYXRlc19HRnAoY29uc3QgRUNfR1JPVVAgKiwgRUNfUE9JTlQgKiwKLQljb25zdCBCSUdOVU0gKngsIGNvbnN0IEJJR05VTSAqeSwgQk5fQ1RYICopOwotaW50IEVDX1BPSU5UX2dldF9hZmZpbmVfY29vcmRpbmF0ZXNfR0ZwKGNvbnN0IEVDX0dST1VQICosIGNvbnN0IEVDX1BPSU5UICosCi0JQklHTlVNICp4LCBCSUdOVU0gKnksIEJOX0NUWCAqKTsKLWludCBFQ19QT0lOVF9zZXRfY29tcHJlc3NlZF9jb29yZGluYXRlc19HRnAoY29uc3QgRUNfR1JPVVAgKiwgRUNfUE9JTlQgKiwKLQljb25zdCBCSUdOVU0gKngsIGludCB5X2JpdCwgQk5fQ1RYICopOworLyoqIFNldHMgYSBwb2ludCB0byBpbmZpbml0eSAobmV1dHJhbCBlbGVtZW50KQorICogIFxwYXJhbSAgZ3JvdXAgIHVuZGVybHlpbmcgRUNfR1JPVVAgb2JqZWN0CisgKiAgXHBhcmFtICBwb2ludCAgRUNfUE9JTlQgdG8gc2V0IHRvIGluZmluaXR5CisgKiAgXHJldHVybiAxIG9uIHN1Y2Nlc3MgYW5kIDAgaWYgYW4gZXJyb3Igb2NjdXJlZAorICovCitpbnQgRUNfUE9JTlRfc2V0X3RvX2luZmluaXR5KGNvbnN0IEVDX0dST1VQICpncm91cCwgRUNfUE9JTlQgKnBvaW50KTsKIAotaW50IEVDX1BPSU5UX3NldF9hZmZpbmVfY29vcmRpbmF0ZXNfR0YybShjb25zdCBFQ19HUk9VUCAqLCBFQ19QT0lOVCAqLAotCWNvbnN0IEJJR05VTSAqeCwgY29uc3QgQklHTlVNICp5LCBCTl9DVFggKik7Ci1pbnQgRUNfUE9JTlRfZ2V0X2FmZmluZV9jb29yZGluYXRlc19HRjJtKGNvbnN0IEVDX0dST1VQICosIGNvbnN0IEVDX1BPSU5UICosCi0JQklHTlVNICp4LCBCSUdOVU0gKnksIEJOX0NUWCAqKTsKLWludCBFQ19QT0lOVF9zZXRfY29tcHJlc3NlZF9jb29yZGluYXRlc19HRjJtKGNvbnN0IEVDX0dST1VQICosIEVDX1BPSU5UICosCi0JY29uc3QgQklHTlVNICp4LCBpbnQgeV9iaXQsIEJOX0NUWCAqKTsKKy8qKiBTZXRzIHRoZSBqYWNvYmlhbiBwcm9qZWN0aXZlIGNvb3JkaW5hdGVzIG9mIGEgRUNfUE9JTlQgb3ZlciBHRnAKKyAqICBccGFyYW0gIGdyb3VwICB1bmRlcmx5aW5nIEVDX0dST1VQIG9iamVjdAorICogIFxwYXJhbSAgcCAgICAgIEVDX1BPSU5UIG9iamVjdAorICogIFxwYXJhbSAgeCAgICAgIEJJR05VTSB3aXRoIHRoZSB4LWNvb3JkaW5hdGUKKyAqICBccGFyYW0gIHkgICAgICBCSUdOVU0gd2l0aCB0aGUgeS1jb29yZGluYXRlCisgKiAgXHBhcmFtICB6ICAgICAgQklHTlVNIHdpdGggdGhlIHotY29vcmRpbmF0ZQorICogIFxwYXJhbSAgY3R4ICAgIEJOX0NUWCBvYmplY3QgKG9wdGlvbmFsKQorICogIFxyZXR1cm4gMSBvbiBzdWNjZXNzIGFuZCAwIGlmIGFuIGVycm9yIG9jY3VyZWQKKyAqLworaW50IEVDX1BPSU5UX3NldF9KcHJvamVjdGl2ZV9jb29yZGluYXRlc19HRnAoY29uc3QgRUNfR1JPVVAgKmdyb3VwLCBFQ19QT0lOVCAqcCwKKwljb25zdCBCSUdOVU0gKngsIGNvbnN0IEJJR05VTSAqeSwgY29uc3QgQklHTlVNICp6LCBCTl9DVFggKmN0eCk7CiAKLXNpemVfdCBFQ19QT0lOVF9wb2ludDJvY3QoY29uc3QgRUNfR1JPVVAgKiwgY29uc3QgRUNfUE9JTlQgKiwgcG9pbnRfY29udmVyc2lvbl9mb3JtX3QgZm9ybSwKLSAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgbGVuLCBCTl9DVFggKik7Ci1pbnQgRUNfUE9JTlRfb2N0MnBvaW50KGNvbnN0IEVDX0dST1VQICosIEVDX1BPSU5UICosCi0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwgQk5fQ1RYICopOworLyoqIEdldHMgdGhlIGphY29iaWFuIHByb2plY3RpdmUgY29vcmRpbmF0ZXMgb2YgYSBFQ19QT0lOVCBvdmVyIEdGcAorICogIFxwYXJhbSAgZ3JvdXAgIHVuZGVybHlpbmcgRUNfR1JPVVAgb2JqZWN0CisgKiAgXHBhcmFtICBwICAgICAgRUNfUE9JTlQgb2JqZWN0CisgKiAgXHBhcmFtICB4ICAgICAgQklHTlVNIGZvciB0aGUgeC1jb29yZGluYXRlCisgKiAgXHBhcmFtICB5ICAgICAgQklHTlVNIGZvciB0aGUgeS1jb29yZGluYXRlCisgKiAgXHBhcmFtICB6ICAgICAgQklHTlVNIGZvciB0aGUgei1jb29yZGluYXRlCisgKiAgXHBhcmFtICBjdHggICAgQk5fQ1RYIG9iamVjdCAob3B0aW9uYWwpCisgKiAgXHJldHVybiAxIG9uIHN1Y2Nlc3MgYW5kIDAgaWYgYW4gZXJyb3Igb2NjdXJlZAorICovCitpbnQgRUNfUE9JTlRfZ2V0X0pwcm9qZWN0aXZlX2Nvb3JkaW5hdGVzX0dGcChjb25zdCBFQ19HUk9VUCAqZ3JvdXAsCisJY29uc3QgRUNfUE9JTlQgKnAsIEJJR05VTSAqeCwgQklHTlVNICp5LCBCSUdOVU0gKnosIEJOX0NUWCAqY3R4KTsKKworLyoqIFNldHMgdGhlIGFmZmluZSBjb29yZGluYXRlcyBvZiBhIEVDX1BPSU5UIG92ZXIgR0ZwCisgKiAgXHBhcmFtICBncm91cCAgdW5kZXJseWluZyBFQ19HUk9VUCBvYmplY3QKKyAqICBccGFyYW0gIHAgICAgICBFQ19QT0lOVCBvYmplY3QKKyAqICBccGFyYW0gIHggICAgICBCSUdOVU0gd2l0aCB0aGUgeC1jb29yZGluYXRlCisgKiAgXHBhcmFtICB5ICAgICAgQklHTlVNIHdpdGggdGhlIHktY29vcmRpbmF0ZQorICogIFxwYXJhbSAgY3R4ICAgIEJOX0NUWCBvYmplY3QgKG9wdGlvbmFsKQorICogIFxyZXR1cm4gMSBvbiBzdWNjZXNzIGFuZCAwIGlmIGFuIGVycm9yIG9jY3VyZWQKKyAqLworaW50IEVDX1BPSU5UX3NldF9hZmZpbmVfY29vcmRpbmF0ZXNfR0ZwKGNvbnN0IEVDX0dST1VQICpncm91cCwgRUNfUE9JTlQgKnAsCisJY29uc3QgQklHTlVNICp4LCBjb25zdCBCSUdOVU0gKnksIEJOX0NUWCAqY3R4KTsKKworLyoqIEdldHMgdGhlIGFmZmluZSBjb29yZGluYXRlcyBvZiBhIEVDX1BPSU5UIG92ZXIgR0ZwCisgKiAgXHBhcmFtICBncm91cCAgdW5kZXJseWluZyBFQ19HUk9VUCBvYmplY3QKKyAqICBccGFyYW0gIHAgICAgICBFQ19QT0lOVCBvYmplY3QKKyAqICBccGFyYW0gIHggICAgICBCSUdOVU0gZm9yIHRoZSB4LWNvb3JkaW5hdGUKKyAqICBccGFyYW0gIHkgICAgICBCSUdOVU0gZm9yIHRoZSB5LWNvb3JkaW5hdGUKKyAqICBccGFyYW0gIGN0eCAgICBCTl9DVFggb2JqZWN0IChvcHRpb25hbCkKKyAqICBccmV0dXJuIDEgb24gc3VjY2VzcyBhbmQgMCBpZiBhbiBlcnJvciBvY2N1cmVkCisgKi8KK2ludCBFQ19QT0lOVF9nZXRfYWZmaW5lX2Nvb3JkaW5hdGVzX0dGcChjb25zdCBFQ19HUk9VUCAqZ3JvdXAsCisJY29uc3QgRUNfUE9JTlQgKnAsIEJJR05VTSAqeCwgQklHTlVNICp5LCBCTl9DVFggKmN0eCk7CisKKy8qKiBTZXRzIHRoZSB4OS42MiBjb21wcmVzc2VkIGNvb3JkaW5hdGVzIG9mIGEgRUNfUE9JTlQgb3ZlciBHRnAKKyAqICBccGFyYW0gIGdyb3VwICB1bmRlcmx5aW5nIEVDX0dST1VQIG9iamVjdAorICogIFxwYXJhbSAgcCAgICAgIEVDX1BPSU5UIG9iamVjdAorICogIFxwYXJhbSAgeCAgICAgIEJJR05VTSB3aXRoIHgtY29vcmRpbmF0ZQorICogIFxwYXJhbSAgeV9iaXQgIGludGVnZXIgd2l0aCB0aGUgeS1CaXQgKGVpdGhlciAwIG9yIDEpCisgKiAgXHBhcmFtICBjdHggICAgQk5fQ1RYIG9iamVjdCAob3B0aW9uYWwpCisgKiAgXHJldHVybiAxIG9uIHN1Y2Nlc3MgYW5kIDAgaWYgYW4gZXJyb3Igb2NjdXJlZAorICovCitpbnQgRUNfUE9JTlRfc2V0X2NvbXByZXNzZWRfY29vcmRpbmF0ZXNfR0ZwKGNvbnN0IEVDX0dST1VQICpncm91cCwgRUNfUE9JTlQgKnAsCisJY29uc3QgQklHTlVNICp4LCBpbnQgeV9iaXQsIEJOX0NUWCAqY3R4KTsKKworLyoqIFNldHMgdGhlIGFmZmluZSBjb29yZGluYXRlcyBvZiBhIEVDX1BPSU5UIG92ZXIgR0YybQorICogIFxwYXJhbSAgZ3JvdXAgIHVuZGVybHlpbmcgRUNfR1JPVVAgb2JqZWN0CisgKiAgXHBhcmFtICBwICAgICAgRUNfUE9JTlQgb2JqZWN0CisgKiAgXHBhcmFtICB4ICAgICAgQklHTlVNIHdpdGggdGhlIHgtY29vcmRpbmF0ZQorICogIFxwYXJhbSAgeSAgICAgIEJJR05VTSB3aXRoIHRoZSB5LWNvb3JkaW5hdGUKKyAqICBccGFyYW0gIGN0eCAgICBCTl9DVFggb2JqZWN0IChvcHRpb25hbCkKKyAqICBccmV0dXJuIDEgb24gc3VjY2VzcyBhbmQgMCBpZiBhbiBlcnJvciBvY2N1cmVkCisgKi8KK2ludCBFQ19QT0lOVF9zZXRfYWZmaW5lX2Nvb3JkaW5hdGVzX0dGMm0oY29uc3QgRUNfR1JPVVAgKmdyb3VwLCBFQ19QT0lOVCAqcCwKKwljb25zdCBCSUdOVU0gKngsIGNvbnN0IEJJR05VTSAqeSwgQk5fQ1RYICpjdHgpOworCisvKiogR2V0cyB0aGUgYWZmaW5lIGNvb3JkaW5hdGVzIG9mIGEgRUNfUE9JTlQgb3ZlciBHRjJtCisgKiAgXHBhcmFtICBncm91cCAgdW5kZXJseWluZyBFQ19HUk9VUCBvYmplY3QKKyAqICBccGFyYW0gIHAgICAgICBFQ19QT0lOVCBvYmplY3QKKyAqICBccGFyYW0gIHggICAgICBCSUdOVU0gZm9yIHRoZSB4LWNvb3JkaW5hdGUKKyAqICBccGFyYW0gIHkgICAgICBCSUdOVU0gZm9yIHRoZSB5LWNvb3JkaW5hdGUKKyAqICBccGFyYW0gIGN0eCAgICBCTl9DVFggb2JqZWN0IChvcHRpb25hbCkKKyAqICBccmV0dXJuIDEgb24gc3VjY2VzcyBhbmQgMCBpZiBhbiBlcnJvciBvY2N1cmVkCisgKi8KK2ludCBFQ19QT0lOVF9nZXRfYWZmaW5lX2Nvb3JkaW5hdGVzX0dGMm0oY29uc3QgRUNfR1JPVVAgKmdyb3VwLAorCWNvbnN0IEVDX1BPSU5UICpwLCBCSUdOVU0gKngsIEJJR05VTSAqeSwgQk5fQ1RYICpjdHgpOworCisvKiogU2V0cyB0aGUgeDkuNjIgY29tcHJlc3NlZCBjb29yZGluYXRlcyBvZiBhIEVDX1BPSU5UIG92ZXIgR0YybQorICogIFxwYXJhbSAgZ3JvdXAgIHVuZGVybHlpbmcgRUNfR1JPVVAgb2JqZWN0CisgKiAgXHBhcmFtICBwICAgICAgRUNfUE9JTlQgb2JqZWN0CisgKiAgXHBhcmFtICB4ICAgICAgQklHTlVNIHdpdGggeC1jb29yZGluYXRlCisgKiAgXHBhcmFtICB5X2JpdCAgaW50ZWdlciB3aXRoIHRoZSB5LUJpdCAoZWl0aGVyIDAgb3IgMSkKKyAqICBccGFyYW0gIGN0eCAgICBCTl9DVFggb2JqZWN0IChvcHRpb25hbCkKKyAqICBccmV0dXJuIDEgb24gc3VjY2VzcyBhbmQgMCBpZiBhbiBlcnJvciBvY2N1cmVkCisgKi8KK2ludCBFQ19QT0lOVF9zZXRfY29tcHJlc3NlZF9jb29yZGluYXRlc19HRjJtKGNvbnN0IEVDX0dST1VQICpncm91cCwgRUNfUE9JTlQgKnAsCisJY29uc3QgQklHTlVNICp4LCBpbnQgeV9iaXQsIEJOX0NUWCAqY3R4KTsKKworLyoqIEVuY29kZXMgYSBFQ19QT0lOVCBvYmplY3QgdG8gYSBvY3RldCBzdHJpbmcKKyAqICBccGFyYW0gIGdyb3VwICB1bmRlcmx5aW5nIEVDX0dST1VQIG9iamVjdAorICogIFxwYXJhbSAgcCAgICAgIEVDX1BPSU5UIG9iamVjdAorICogIFxwYXJhbSAgZm9ybSAgIHBvaW50IGNvbnZlcnNpb24gZm9ybQorICogIFxwYXJhbSAgYnVmICAgIG1lbW9yeSBidWZmZXIgZm9yIHRoZSByZXN1bHQuIElmIE5VTEwgdGhlIGZ1bmN0aW9uIHJldHVybnMKKyAqICAgICAgICAgICAgICAgICByZXF1aXJlZCBidWZmZXIgc2l6ZS4KKyAqICBccGFyYW0gIGxlbiAgICBsZW5ndGggb2YgdGhlIG1lbW9yeSBidWZmZXIKKyAqICBccGFyYW0gIGN0eCAgICBCTl9DVFggb2JqZWN0IChvcHRpb25hbCkKKyAqICBccmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGVuY29kZWQgb2N0ZXQgc3RyaW5nIG9yIDAgaWYgYW4gZXJyb3Igb2NjdXJyZWQKKyAqLworc2l6ZV90IEVDX1BPSU5UX3BvaW50Mm9jdChjb25zdCBFQ19HUk9VUCAqZ3JvdXAsIGNvbnN0IEVDX1BPSU5UICpwLAorCXBvaW50X2NvbnZlcnNpb25fZm9ybV90IGZvcm0sCisgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwgQk5fQ1RYICpjdHgpOworCisvKiogRGVjb2RlcyBhIEVDX1BPSU5UIGZyb20gYSBvY3RldCBzdHJpbmcKKyAqICBccGFyYW0gIGdyb3VwICB1bmRlcmx5aW5nIEVDX0dST1VQIG9iamVjdAorICogIFxwYXJhbSAgcCAgICAgIEVDX1BPSU5UIG9iamVjdAorICogIFxwYXJhbSAgYnVmICAgIG1lbW9yeSBidWZmZXIgd2l0aCB0aGUgZW5jb2RlZCBlYyBwb2ludAorICogIFxwYXJhbSAgbGVuICAgIGxlbmd0aCBvZiB0aGUgZW5jb2RlZCBlYyBwb2ludAorICogIFxwYXJhbSAgY3R4ICAgIEJOX0NUWCBvYmplY3QgKG9wdGlvbmFsKQorICogIFxyZXR1cm4gMSBvbiBzdWNjZXNzIGFuZCAwIGlmIGFuIGVycm9yIG9jY3VyZWQKKyAqLworaW50IEVDX1BPSU5UX29jdDJwb2ludChjb25zdCBFQ19HUk9VUCAqZ3JvdXAsIEVDX1BPSU5UICpwLAorICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBsZW4sIEJOX0NUWCAqY3R4KTsKIAogLyogb3RoZXIgaW50ZXJmYWNlcyB0byBwb2ludDJvY3Qvb2N0MnBvaW50OiAqLwogQklHTlVNICpFQ19QT0lOVF9wb2ludDJibihjb25zdCBFQ19HUk9VUCAqLCBjb25zdCBFQ19QT0lOVCAqLApAQCAtMjQxLDI5ICs1NTAsMTA1IEBACiBFQ19QT0lOVCAqRUNfUE9JTlRfaGV4MnBvaW50KGNvbnN0IEVDX0dST1VQICosIGNvbnN0IGNoYXIgKiwKIAlFQ19QT0lOVCAqLCBCTl9DVFggKik7CiAKLWludCBFQ19QT0lOVF9hZGQoY29uc3QgRUNfR1JPVVAgKiwgRUNfUE9JTlQgKnIsIGNvbnN0IEVDX1BPSU5UICphLCBjb25zdCBFQ19QT0lOVCAqYiwgQk5fQ1RYICopOwotaW50IEVDX1BPSU5UX2RibChjb25zdCBFQ19HUk9VUCAqLCBFQ19QT0lOVCAqciwgY29uc3QgRUNfUE9JTlQgKmEsIEJOX0NUWCAqKTsKLWludCBFQ19QT0lOVF9pbnZlcnQoY29uc3QgRUNfR1JPVVAgKiwgRUNfUE9JTlQgKiwgQk5fQ1RYICopOwogCi1pbnQgRUNfUE9JTlRfaXNfYXRfaW5maW5pdHkoY29uc3QgRUNfR1JPVVAgKiwgY29uc3QgRUNfUE9JTlQgKik7Ci1pbnQgRUNfUE9JTlRfaXNfb25fY3VydmUoY29uc3QgRUNfR1JPVVAgKiwgY29uc3QgRUNfUE9JTlQgKiwgQk5fQ1RYICopOwotaW50IEVDX1BPSU5UX2NtcChjb25zdCBFQ19HUk9VUCAqLCBjb25zdCBFQ19QT0lOVCAqYSwgY29uc3QgRUNfUE9JTlQgKmIsIEJOX0NUWCAqKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgZnVuY3Rpb25zIGZvciBkb2luZyBFQ19QT0lOVCBhcml0aG1ldGljICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqIENvbXB1dGVzIHRoZSBzdW0gb2YgdHdvIEVDX1BPSU5UIAorICogIFxwYXJhbSAgZ3JvdXAgIHVuZGVybHlpbmcgRUNfR1JPVVAgb2JqZWN0CisgKiAgXHBhcmFtICByICAgICAgRUNfUE9JTlQgb2JqZWN0IGZvciB0aGUgcmVzdWx0IChyID0gYSArIGIpCisgKiAgXHBhcmFtICBhICAgICAgRUNfUE9JTlQgb2JqZWN0IHdpdGggdGhlIGZpcnN0IHN1bW1hbmQKKyAqICBccGFyYW0gIGIgICAgICBFQ19QT0lOVCBvYmplY3Qgd2l0aCB0aGUgc2Vjb25kIHN1bW1hbmQKKyAqICBccGFyYW0gIGN0eCAgICBCTl9DVFggb2JqZWN0IChvcHRpb25hbCkKKyAqICBccmV0dXJuIDEgb24gc3VjY2VzcyBhbmQgMCBpZiBhbiBlcnJvciBvY2N1cmVkCisgKi8KK2ludCBFQ19QT0lOVF9hZGQoY29uc3QgRUNfR1JPVVAgKmdyb3VwLCBFQ19QT0lOVCAqciwgY29uc3QgRUNfUE9JTlQgKmEsIGNvbnN0IEVDX1BPSU5UICpiLCBCTl9DVFggKmN0eCk7CisKKy8qKiBDb21wdXRlcyB0aGUgZG91YmxlIG9mIGEgRUNfUE9JTlQKKyAqICBccGFyYW0gIGdyb3VwICB1bmRlcmx5aW5nIEVDX0dST1VQIG9iamVjdAorICogIFxwYXJhbSAgciAgICAgIEVDX1BPSU5UIG9iamVjdCBmb3IgdGhlIHJlc3VsdCAociA9IDIgKiBhKQorICogIFxwYXJhbSAgYSAgICAgIEVDX1BPSU5UIG9iamVjdCAKKyAqICBccGFyYW0gIGN0eCAgICBCTl9DVFggb2JqZWN0IChvcHRpb25hbCkKKyAqICBccmV0dXJuIDEgb24gc3VjY2VzcyBhbmQgMCBpZiBhbiBlcnJvciBvY2N1cmVkCisgKi8KK2ludCBFQ19QT0lOVF9kYmwoY29uc3QgRUNfR1JPVVAgKmdyb3VwLCBFQ19QT0lOVCAqciwgY29uc3QgRUNfUE9JTlQgKmEsIEJOX0NUWCAqY3R4KTsKKworLyoqIENvbXB1dGVzIHRoZSBpbnZlcnNlIG9mIGEgRUNfUE9JTlQKKyAqICBccGFyYW0gIGdyb3VwICB1bmRlcmx5aW5nIEVDX0dST1VQIG9iamVjdAorICogIFxwYXJhbSAgYSAgICAgIEVDX1BPSU5UIG9iamVjdCB0byBiZSBpbnZlcnRlZCAoaXQncyB1c2VkIGZvciB0aGUgcmVzdWx0IGFzIHdlbGwpCisgKiAgXHBhcmFtICBjdHggICAgQk5fQ1RYIG9iamVjdCAob3B0aW9uYWwpCisgKiAgXHJldHVybiAxIG9uIHN1Y2Nlc3MgYW5kIDAgaWYgYW4gZXJyb3Igb2NjdXJlZAorICovCitpbnQgRUNfUE9JTlRfaW52ZXJ0KGNvbnN0IEVDX0dST1VQICpncm91cCwgRUNfUE9JTlQgKmEsIEJOX0NUWCAqY3R4KTsKKworLyoqIENoZWNrcyB3aGV0aGVyIHRoZSBwb2ludCBpcyB0aGUgbmV1dHJhbCBlbGVtZW50IG9mIHRoZSBncm91cAorICogIFxwYXJhbSAgZ3JvdXAgIHRoZSB1bmRlcmx5aW5nIEVDX0dST1VQIG9iamVjdAorICogIFxwYXJhbSAgcCAgICAgIEVDX1BPSU5UIG9iamVjdAorICogIFxyZXR1cm4gMSBpZiB0aGUgcG9pbnQgaXMgdGhlIG5ldXRyYWwgZWxlbWVudCBhbmQgMCBvdGhlcndpc2UKKyAqLworaW50IEVDX1BPSU5UX2lzX2F0X2luZmluaXR5KGNvbnN0IEVDX0dST1VQICpncm91cCwgY29uc3QgRUNfUE9JTlQgKnApOworCisvKiogQ2hlY2tzIHdoZXRoZXIgdGhlIHBvaW50IGlzIG9uIHRoZSBjdXJ2ZSAKKyAqICBccGFyYW0gIGdyb3VwICB1bmRlcmx5aW5nIEVDX0dST1VQIG9iamVjdAorICogIFxwYXJhbSAgcG9pbnQgIEVDX1BPSU5UIG9iamVjdCB0byBjaGVjaworICogIFxwYXJhbSAgY3R4ICAgIEJOX0NUWCBvYmplY3QgKG9wdGlvbmFsKQorICogIFxyZXR1cm4gMSBpZiBwb2ludCBpZiBvbiB0aGUgY3VydmUgYW5kIDAgb3RoZXJ3aXNlCisgKi8KK2ludCBFQ19QT0lOVF9pc19vbl9jdXJ2ZShjb25zdCBFQ19HUk9VUCAqZ3JvdXAsIGNvbnN0IEVDX1BPSU5UICpwb2ludCwgQk5fQ1RYICpjdHgpOworCisvKiogQ29tcGFyZXMgdHdvIEVDX1BPSU5UcyAKKyAqICBccGFyYW0gIGdyb3VwICB1bmRlcmx5aW5nIEVDX0dST1VQIG9iamVjdAorICogIFxwYXJhbSAgYSAgICAgIGZpcnN0IEVDX1BPSU5UIG9iamVjdAorICogIFxwYXJhbSAgYiAgICAgIHNlY29uZCBFQ19QT0lOVCBvYmplY3QKKyAqICBccGFyYW0gIGN0eCAgICBCTl9DVFggb2JqZWN0IChvcHRpb25hbCkKKyAqICBccmV0dXJuIDAgaWYgYm90aCBwb2ludHMgYXJlIGVxdWFsIGFuZCBhIHZhbHVlICE9IDAgb3RoZXJ3aXNlCisgKi8KK2ludCBFQ19QT0lOVF9jbXAoY29uc3QgRUNfR1JPVVAgKmdyb3VwLCBjb25zdCBFQ19QT0lOVCAqYSwgY29uc3QgRUNfUE9JTlQgKmIsIEJOX0NUWCAqY3R4KTsKIAogaW50IEVDX1BPSU5UX21ha2VfYWZmaW5lKGNvbnN0IEVDX0dST1VQICosIEVDX1BPSU5UICosIEJOX0NUWCAqKTsKIGludCBFQ19QT0lOVHNfbWFrZV9hZmZpbmUoY29uc3QgRUNfR1JPVVAgKiwgc2l6ZV90IG51bSwgRUNfUE9JTlQgKltdLCBCTl9DVFggKik7CiAKKy8qKiBDb21wdXRlcyByID0gZ2VuZXJhdG9yICogbiBzdW1fe2k9MH1ebnVtIHBbaV0gKiBtW2ldCisgKiAgXHBhcmFtICBncm91cCAgdW5kZXJseWluZyBFQ19HUk9VUCBvYmplY3QKKyAqICBccGFyYW0gIHIgICAgICBFQ19QT0lOVCBvYmplY3QgZm9yIHRoZSByZXN1bHQKKyAqICBccGFyYW0gIG4gICAgICBCSUdOVU0gd2l0aCB0aGUgbXVsdGlwbGllciBmb3IgdGhlIGdyb3VwIGdlbmVyYXRvciAob3B0aW9uYWwpCisgKiAgXHBhcmFtICBudW0gICAgbnVtYmVyIGZ1dGhlciBzdW1tYW5kcworICogIFxwYXJhbSAgcCAgICAgIGFycmF5IG9mIHNpemUgbnVtIG9mIEVDX1BPSU5UIG9iamVjdHMKKyAqICBccGFyYW0gIG0gICAgICBhcnJheSBvZiBzaXplIG51bSBvZiBCSUdOVU0gb2JqZWN0cworICogIFxwYXJhbSAgY3R4ICAgIEJOX0NUWCBvYmplY3QgKG9wdGlvbmFsKQorICogIFxyZXR1cm4gMSBvbiBzdWNjZXNzIGFuZCAwIGlmIGFuIGVycm9yIG9jY3VyZWQKKyAqLworaW50IEVDX1BPSU5Uc19tdWwoY29uc3QgRUNfR1JPVVAgKmdyb3VwLCBFQ19QT0lOVCAqciwgY29uc3QgQklHTlVNICpuLCBzaXplX3QgbnVtLCBjb25zdCBFQ19QT0lOVCAqcFtdLCBjb25zdCBCSUdOVU0gKm1bXSwgQk5fQ1RYICpjdHgpOwogCi1pbnQgRUNfUE9JTlRzX211bChjb25zdCBFQ19HUk9VUCAqLCBFQ19QT0lOVCAqciwgY29uc3QgQklHTlVNICosIHNpemVfdCBudW0sIGNvbnN0IEVDX1BPSU5UICpbXSwgY29uc3QgQklHTlVNICpbXSwgQk5fQ1RYICopOwotaW50IEVDX1BPSU5UX211bChjb25zdCBFQ19HUk9VUCAqLCBFQ19QT0lOVCAqciwgY29uc3QgQklHTlVNICosIGNvbnN0IEVDX1BPSU5UICosIGNvbnN0IEJJR05VTSAqLCBCTl9DVFggKik7CisvKiogQ29tcHV0ZXMgciA9IGdlbmVyYXRvciAqIG4gKyBxICogbQorICogIFxwYXJhbSAgZ3JvdXAgIHVuZGVybHlpbmcgRUNfR1JPVVAgb2JqZWN0CisgKiAgXHBhcmFtICByICAgICAgRUNfUE9JTlQgb2JqZWN0IGZvciB0aGUgcmVzdWx0CisgKiAgXHBhcmFtICBuICAgICAgQklHTlVNIHdpdGggdGhlIG11bHRpcGxpZXIgZm9yIHRoZSBncm91cCBnZW5lcmF0b3IgKG9wdGlvbmFsKQorICogIFxwYXJhbSAgcSAgICAgIEVDX1BPSU5UIG9iamVjdCB3aXRoIHRoZSBmaXJzdCBmYWN0b3Igb2YgdGhlIHNlY29uZCBzdW1tYW5kCisgKiAgXHBhcmFtICBtICAgICAgQklHTlVNIHdpdGggdGhlIHNlY29uZCBmYWN0b3Igb2YgdGhlIHNlY29uZCBzdW1tYW5kCisgKiAgXHBhcmFtICBjdHggICAgQk5fQ1RYIG9iamVjdCAob3B0aW9uYWwpCisgKiAgXHJldHVybiAxIG9uIHN1Y2Nlc3MgYW5kIDAgaWYgYW4gZXJyb3Igb2NjdXJlZAorICovCitpbnQgRUNfUE9JTlRfbXVsKGNvbnN0IEVDX0dST1VQICpncm91cCwgRUNfUE9JTlQgKnIsIGNvbnN0IEJJR05VTSAqbiwgY29uc3QgRUNfUE9JTlQgKnEsIGNvbnN0IEJJR05VTSAqbSwgQk5fQ1RYICpjdHgpOwogCi0vKiBFQ19HUk9VUF9wcmVjb21wdXRlX211bHQoKSBzdG9yZXMgbXVsdGlwbGVzIG9mIGdlbmVyYXRvciBmb3IgZmFzdGVyIHBvaW50IG11bHRpcGxpY2F0aW9uICovCi1pbnQgRUNfR1JPVVBfcHJlY29tcHV0ZV9tdWx0KEVDX0dST1VQICosIEJOX0NUWCAqKTsKLS8qIEVDX0dST1VQX2hhdmVfcHJlY29tcHV0ZV9tdWx0KCkgcmVwb3J0cyB3aGV0aGVyIHN1Y2ggcHJlY29tcHV0YXRpb24gaGFzIGJlZW4gZG9uZSAqLwotaW50IEVDX0dST1VQX2hhdmVfcHJlY29tcHV0ZV9tdWx0KGNvbnN0IEVDX0dST1VQICopOworLyoqIFN0b3JlcyBtdWx0aXBsZXMgb2YgZ2VuZXJhdG9yIGZvciBmYXN0ZXIgcG9pbnQgbXVsdGlwbGljYXRpb24KKyAqICBccGFyYW0gIGdyb3VwICBFQ19HUk9VUCBvYmplY3QKKyAqICBccGFyYW0gIGN0eCAgICBCTl9DVFggb2JqZWN0IChvcHRpb25hbCkKKyAqICBccmV0dXJuIDEgb24gc3VjY2VzcyBhbmQgMCBpZiBhbiBlcnJvciBvY2N1cmVkCisgKi8KK2ludCBFQ19HUk9VUF9wcmVjb21wdXRlX211bHQoRUNfR1JPVVAgKmdyb3VwLCBCTl9DVFggKmN0eCk7CisKKy8qKiBSZXBvcnRzIHdoZXRoZXIgYSBwcmVjb21wdXRhdGlvbiBoYXMgYmVlbiBkb25lCisgKiAgXHBhcmFtICBncm91cCAgRUNfR1JPVVAgb2JqZWN0CisgKiAgXHJldHVybiAxIGlmIGEgcHJlLWNvbXB1dGF0aW9uIGhhcyBiZWVuIGRvbmUgYW5kIDAgb3RoZXJ3aXNlCisgKi8KK2ludCBFQ19HUk9VUF9oYXZlX3ByZWNvbXB1dGVfbXVsdChjb25zdCBFQ19HUk9VUCAqZ3JvdXApOwogCiAKLQotLyogQVNOMSBzdHVmZiAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgIEFTTjEgc3R1ZmYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKiBFQ19HUk9VUF9nZXRfYmFzaXNfdHlwZSgpIHJldHVybnMgdGhlIE5JRCBvZiB0aGUgYmFzaXMgdHlwZQogICogdXNlZCB0byByZXByZXNlbnQgdGhlIGZpZWxkIGVsZW1lbnRzICovCkBAIC0yOTMsMjggKzY3OCw5NiBAQAogaW50ICAgICBFQ1BLUGFyYW1ldGVyc19wcmludF9mcChGSUxFICpmcCwgY29uc3QgRUNfR1JPVVAgKngsIGludCBvZmYpOwogI2VuZGlmCiAKLS8qIHRoZSBFQ19LRVkgc3R1ZmYgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgRUNfS0VZIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCiB0eXBlZGVmIHN0cnVjdCBlY19rZXlfc3QgRUNfS0VZOwogCiAvKiBzb21lIHZhbHVlcyBmb3IgdGhlIGVuY29kaW5nX2ZsYWcgKi8KICNkZWZpbmUgRUNfUEtFWV9OT19QQVJBTUVURVJTCTB4MDAxCiAjZGVmaW5lIEVDX1BLRVlfTk9fUFVCS0VZCTB4MDAyCiAKKy8qKiBDcmVhdGVzIGEgbmV3IEVDX0tFWSBvYmplY3QuCisgKiAgXHJldHVybiBFQ19LRVkgb2JqZWN0IG9yIE5VTEwgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCisgKi8KIEVDX0tFWSAqRUNfS0VZX25ldyh2b2lkKTsKKworLyoqIENyZWF0ZXMgYSBuZXcgRUNfS0VZIG9iamVjdCB1c2luZyBhIG5hbWVkIGN1cnZlIGFzIHVuZGVybHlpbmcKKyAqICBFQ19HUk9VUCBvYmplY3QuCisgKiAgXHBhcmFtICBuaWQgIE5JRCBvZiB0aGUgbmFtZWQgY3VydmUuCisgKiAgXHJldHVybiBFQ19LRVkgb2JqZWN0IG9yIE5VTEwgaWYgYW4gZXJyb3Igb2NjdXJyZWQuIAorICovCiBFQ19LRVkgKkVDX0tFWV9uZXdfYnlfY3VydmVfbmFtZShpbnQgbmlkKTsKLXZvaWQgRUNfS0VZX2ZyZWUoRUNfS0VZICopOwotRUNfS0VZICpFQ19LRVlfY29weShFQ19LRVkgKiwgY29uc3QgRUNfS0VZICopOwotRUNfS0VZICpFQ19LRVlfZHVwKGNvbnN0IEVDX0tFWSAqKTsKIAotaW50IEVDX0tFWV91cF9yZWYoRUNfS0VZICopOworLyoqIEZyZWVzIGEgRUNfS0VZIG9iamVjdC4KKyAqICBccGFyYW0gIGtleSAgRUNfS0VZIG9iamVjdCB0byBiZSBmcmVlZC4KKyAqLwordm9pZCBFQ19LRVlfZnJlZShFQ19LRVkgKmtleSk7CiAKLWNvbnN0IEVDX0dST1VQICpFQ19LRVlfZ2V0MF9ncm91cChjb25zdCBFQ19LRVkgKik7Ci1pbnQgRUNfS0VZX3NldF9ncm91cChFQ19LRVkgKiwgY29uc3QgRUNfR1JPVVAgKik7Ci1jb25zdCBCSUdOVU0gKkVDX0tFWV9nZXQwX3ByaXZhdGVfa2V5KGNvbnN0IEVDX0tFWSAqKTsKLWludCBFQ19LRVlfc2V0X3ByaXZhdGVfa2V5KEVDX0tFWSAqLCBjb25zdCBCSUdOVU0gKik7Ci1jb25zdCBFQ19QT0lOVCAqRUNfS0VZX2dldDBfcHVibGljX2tleShjb25zdCBFQ19LRVkgKik7Ci1pbnQgRUNfS0VZX3NldF9wdWJsaWNfa2V5KEVDX0tFWSAqLCBjb25zdCBFQ19QT0lOVCAqKTsKLXVuc2lnbmVkIEVDX0tFWV9nZXRfZW5jX2ZsYWdzKGNvbnN0IEVDX0tFWSAqKTsKKy8qKiBDb3BpZXMgYSBFQ19LRVkgb2JqZWN0LgorICogIFxwYXJhbSAgZHN0ICBkZXN0aW5hdGlvbiBFQ19LRVkgb2JqZWN0CisgKiAgXHBhcmFtICBzcmMgIHNyYyBFQ19LRVkgb2JqZWN0CisgKiAgXHJldHVybiBkc3Qgb3IgTlVMTCBpZiBhbiBlcnJvciBvY2N1cnJlZC4KKyAqLworRUNfS0VZICpFQ19LRVlfY29weShFQ19LRVkgKmRzdCwgY29uc3QgRUNfS0VZICpzcmMpOworCisvKiogQ3JlYXRlcyBhIG5ldyBFQ19LRVkgb2JqZWN0IGFuZCBjb3BpZXMgdGhlIGNvbnRlbnQgZnJvbSBzcmMgdG8gaXQuCisgKiAgXHBhcmFtICBzcmMgIHRoZSBzb3VyY2UgRUNfS0VZIG9iamVjdAorICogIFxyZXR1cm4gbmV3bHkgY3JlYXRlZCBFQ19LRVkgb2JqZWN0IG9yIE5VTEwgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCisgKi8KK0VDX0tFWSAqRUNfS0VZX2R1cChjb25zdCBFQ19LRVkgKnNyYyk7CisKKy8qKiBJbmNyZWFzZXMgdGhlIGludGVybmFsIHJlZmVyZW5jZSBjb3VudCBvZiBhIEVDX0tFWSBvYmplY3QuCisgKiAgXHBhcmFtICBrZXkgIEVDX0tFWSBvYmplY3QKKyAqICBccmV0dXJuIDEgb24gc3VjY2VzcyBhbmQgMCBpZiBhbiBlcnJvciBvY2N1cnJlZC4KKyAqLworaW50IEVDX0tFWV91cF9yZWYoRUNfS0VZICprZXkpOworCisvKiogUmV0dXJucyB0aGUgRUNfR1JPVVAgb2JqZWN0IG9mIGEgRUNfS0VZIG9iamVjdAorICogIFxwYXJhbSAga2V5ICBFQ19LRVkgb2JqZWN0CisgKiAgXHJldHVybiB0aGUgRUNfR1JPVVAgb2JqZWN0IChwb3NzaWJseSBOVUxMKS4KKyAqLworY29uc3QgRUNfR1JPVVAgKkVDX0tFWV9nZXQwX2dyb3VwKGNvbnN0IEVDX0tFWSAqa2V5KTsKKworLyoqIFNldHMgdGhlIEVDX0dST1VQIG9mIGEgRUNfS0VZIG9iamVjdC4KKyAqICBccGFyYW0gIGtleSAgICBFQ19LRVkgb2JqZWN0CisgKiAgXHBhcmFtICBncm91cCAgRUNfR1JPVVAgdG8gdXNlIGluIHRoZSBFQ19LRVkgb2JqZWN0IChub3RlOiB0aGUgRUNfS0VZCisgKiAgICAgICAgICAgICAgICAgb2JqZWN0IHdpbGwgdXNlIGFuIG93biBjb3B5IG9mIHRoZSBFQ19HUk9VUCkuCisgKiAgXHJldHVybiAxIG9uIHN1Y2Nlc3MgYW5kIDAgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCisgKi8KK2ludCBFQ19LRVlfc2V0X2dyb3VwKEVDX0tFWSAqa2V5LCBjb25zdCBFQ19HUk9VUCAqZ3JvdXApOworCisvKiogUmV0dXJucyB0aGUgcHJpdmF0ZSBrZXkgb2YgYSBFQ19LRVkgb2JqZWN0LgorICogIFxwYXJhbSAga2V5ICBFQ19LRVkgb2JqZWN0CisgKiAgXHJldHVybiBhIEJJR05VTSB3aXRoIHRoZSBwcml2YXRlIGtleSAocG9zc2libHkgTlVMTCkuCisgKi8KK2NvbnN0IEJJR05VTSAqRUNfS0VZX2dldDBfcHJpdmF0ZV9rZXkoY29uc3QgRUNfS0VZICprZXkpOworCisvKiogU2V0cyB0aGUgcHJpdmF0ZSBrZXkgb2YgYSBFQ19LRVkgb2JqZWN0LgorICogIFxwYXJhbSAga2V5ICBFQ19LRVkgb2JqZWN0CisgKiAgXHBhcmFtICBwcnYgIEJJR05VTSB3aXRoIHRoZSBwcml2YXRlIGtleSAobm90ZTogdGhlIEVDX0tFWSBvYmplY3QKKyAqICAgICAgICAgICAgICAgd2lsbCB1c2UgYW4gb3duIGNvcHkgb2YgdGhlIEJJR05VTSkuCisgKiAgXHJldHVybiAxIG9uIHN1Y2Nlc3MgYW5kIDAgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCisgKi8KK2ludCBFQ19LRVlfc2V0X3ByaXZhdGVfa2V5KEVDX0tFWSAqa2V5LCBjb25zdCBCSUdOVU0gKnBydik7CisKKy8qKiBSZXR1cm5zIHRoZSBwdWJsaWMga2V5IG9mIGEgRUNfS0VZIG9iamVjdC4KKyAqICBccGFyYW0gIGtleSAgdGhlIEVDX0tFWSBvYmplY3QKKyAqICBccmV0dXJuIGEgRUNfUE9JTlQgb2JqZWN0IHdpdGggdGhlIHB1YmxpYyBrZXkgKHBvc3NpYmx5IE5VTEwpCisgKi8KK2NvbnN0IEVDX1BPSU5UICpFQ19LRVlfZ2V0MF9wdWJsaWNfa2V5KGNvbnN0IEVDX0tFWSAqa2V5KTsKKworLyoqIFNldHMgdGhlIHB1YmxpYyBrZXkgb2YgYSBFQ19LRVkgb2JqZWN0LgorICogIFxwYXJhbSAga2V5ICBFQ19LRVkgb2JqZWN0CisgKiAgXHBhcmFtICBwdWIgIEVDX1BPSU5UIG9iamVjdCB3aXRoIHRoZSBwdWJsaWMga2V5IChub3RlOiB0aGUgRUNfS0VZIG9iamVjdAorICogICAgICAgICAgICAgICB3aWxsIHVzZSBhbiBvd24gY29weSBvZiB0aGUgRUNfUE9JTlQgb2JqZWN0KS4KKyAqICBccmV0dXJuIDEgb24gc3VjY2VzcyBhbmQgMCBpZiBhbiBlcnJvciBvY2N1cnJlZC4KKyAqLworaW50IEVDX0tFWV9zZXRfcHVibGljX2tleShFQ19LRVkgKmtleSwgY29uc3QgRUNfUE9JTlQgKnB1Yik7CisKK3Vuc2lnbmVkIEVDX0tFWV9nZXRfZW5jX2ZsYWdzKGNvbnN0IEVDX0tFWSAqa2V5KTsKIHZvaWQgRUNfS0VZX3NldF9lbmNfZmxhZ3MoRUNfS0VZICosIHVuc2lnbmVkIGludCk7CiBwb2ludF9jb252ZXJzaW9uX2Zvcm1fdCBFQ19LRVlfZ2V0X2NvbnZfZm9ybShjb25zdCBFQ19LRVkgKik7CiB2b2lkIEVDX0tFWV9zZXRfY29udl9mb3JtKEVDX0tFWSAqLCBwb2ludF9jb252ZXJzaW9uX2Zvcm1fdCk7CkBAIC0zMjUsMzEgKzc3OCwxMjYgQEAKIAl2b2lkICooKmR1cF9mdW5jKSh2b2lkICopLCB2b2lkICgqZnJlZV9mdW5jKSh2b2lkICopLCB2b2lkICgqY2xlYXJfZnJlZV9mdW5jKSh2b2lkICopKTsKIC8qIHdyYXBwZXIgZnVuY3Rpb25zIGZvciB0aGUgdW5kZXJseWluZyBFQ19HUk9VUCBvYmplY3QgKi8KIHZvaWQgRUNfS0VZX3NldF9hc24xX2ZsYWcoRUNfS0VZICosIGludCk7Ci1pbnQgRUNfS0VZX3ByZWNvbXB1dGVfbXVsdChFQ19LRVkgKiwgQk5fQ1RYICpjdHgpOwogCi0vKiBFQ19LRVlfZ2VuZXJhdGVfa2V5KCkgY3JlYXRlcyBhIGVjIHByaXZhdGUgKHB1YmxpYykga2V5ICovCi1pbnQgRUNfS0VZX2dlbmVyYXRlX2tleShFQ19LRVkgKik7Ci0vKiBFQ19LRVlfY2hlY2tfa2V5KCkgKi8KLWludCBFQ19LRVlfY2hlY2tfa2V5KGNvbnN0IEVDX0tFWSAqKTsKKy8qKiBDcmVhdGVzIGEgdGFibGUgb2YgcHJlLWNvbXB1dGVkIG11bHRpcGxlcyBvZiB0aGUgZ2VuZXJhdG9yIHRvIAorICogIGFjY2VsZXJhdGUgZnVydGhlciBFQ19LRVkgb3BlcmF0aW9ucy4KKyAqICBccGFyYW0gIGtleSAgRUNfS0VZIG9iamVjdAorICogIFxwYXJhbSAgY3R4ICBCTl9DVFggb2JqZWN0IChvcHRpb25hbCkKKyAqICBccmV0dXJuIDEgb24gc3VjY2VzcyBhbmQgMCBpZiBhbiBlcnJvciBvY2N1cnJlZC4KKyAqLworaW50IEVDX0tFWV9wcmVjb21wdXRlX211bHQoRUNfS0VZICprZXksIEJOX0NUWCAqY3R4KTsKIAotLyogZGUtIGFuZCBlbmNvZGluZyBmdW5jdGlvbnMgZm9yIFNFQzEgRUNQcml2YXRlS2V5ICovCi1FQ19LRVkgKmQyaV9FQ1ByaXZhdGVLZXkoRUNfS0VZICoqYSwgY29uc3QgdW5zaWduZWQgY2hhciAqKmluLCBsb25nIGxlbik7Ci1pbnQgaTJkX0VDUHJpdmF0ZUtleShFQ19LRVkgKmEsIHVuc2lnbmVkIGNoYXIgKipvdXQpOwotLyogZGUtIGFuZCBlbmNvZGluZyBmdW5jdGlvbnMgZm9yIEVDIHBhcmFtZXRlcnMgKi8KLUVDX0tFWSAqZDJpX0VDUGFyYW1ldGVycyhFQ19LRVkgKiphLCBjb25zdCB1bnNpZ25lZCBjaGFyICoqaW4sIGxvbmcgbGVuKTsKLWludCBpMmRfRUNQYXJhbWV0ZXJzKEVDX0tFWSAqYSwgdW5zaWduZWQgY2hhciAqKm91dCk7Ci0vKiBkZS0gYW5kIGVuY29kaW5nIGZ1bmN0aW9ucyBmb3IgRUMgcHVibGljIGtleQotICogKG9jdGV0IHN0cmluZywgbm90IERFUiAtLSBoZW5jZSAnbzJpJyBhbmQgJ2kybycpICovCi1FQ19LRVkgKm8yaV9FQ1B1YmxpY0tleShFQ19LRVkgKiphLCBjb25zdCB1bnNpZ25lZCBjaGFyICoqaW4sIGxvbmcgbGVuKTsKLWludCBpMm9fRUNQdWJsaWNLZXkoRUNfS0VZICphLCB1bnNpZ25lZCBjaGFyICoqb3V0KTsKKy8qKiBDcmVhdGVzIGEgbmV3IGVjIHByaXZhdGUgKGFuZCBvcHRpb25hbCBhIG5ldyBwdWJsaWMpIGtleS4KKyAqICBccGFyYW0gIGtleSAgRUNfS0VZIG9iamVjdAorICogIFxyZXR1cm4gMSBvbiBzdWNjZXNzIGFuZCAwIGlmIGFuIGVycm9yIG9jY3VycmVkLgorICovCitpbnQgRUNfS0VZX2dlbmVyYXRlX2tleShFQ19LRVkgKmtleSk7CisKKy8qKiBWZXJpZmllcyB0aGF0IGEgcHJpdmF0ZSBhbmQvb3IgcHVibGljIGtleSBpcyB2YWxpZC4KKyAqICBccGFyYW0gIGtleSAgdGhlIEVDX0tFWSBvYmplY3QKKyAqICBccmV0dXJuIDEgb24gc3VjY2VzcyBhbmQgMCBvdGhlcndpc2UuCisgKi8KK2ludCBFQ19LRVlfY2hlY2tfa2V5KGNvbnN0IEVDX0tFWSAqa2V5KTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgZGUtIGFuZCBlbmNvZGluZyBmdW5jdGlvbnMgZm9yIFNFQzEgRUNQcml2YXRlS2V5ICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKiBEZWNvZGVzIGEgcHJpdmF0ZSBrZXkgZnJvbSBhIG1lbW9yeSBidWZmZXIuCisgKiAgXHBhcmFtICBrZXkgIGEgcG9pbnRlciB0byBhIEVDX0tFWSBvYmplY3Qgd2hpY2ggc2hvdWxkIGJlIHVzZWQgKG9yIE5VTEwpCisgKiAgXHBhcmFtICBpbiAgIHBvaW50ZXIgdG8gbWVtb3J5IHdpdGggdGhlIERFUiBlbmNvZGVkIHByaXZhdGUga2V5CisgKiAgXHBhcmFtICBsZW4gIGxlbmd0aCBvZiB0aGUgREVSIGVuY29kZWQgcHJpdmF0ZSBrZXkKKyAqICBccmV0dXJuIHRoZSBkZWNvZGVkIHByaXZhdGUga2V5IG9yIE5VTEwgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCisgKi8KK0VDX0tFWSAqZDJpX0VDUHJpdmF0ZUtleShFQ19LRVkgKiprZXksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKippbiwgbG9uZyBsZW4pOworCisvKiogRW5jb2RlcyBhIHByaXZhdGUga2V5IG9iamVjdCBhbmQgc3RvcmVzIHRoZSByZXN1bHQgaW4gYSBidWZmZXIuCisgKiAgXHBhcmFtICBrZXkgIHRoZSBFQ19LRVkgb2JqZWN0IHRvIGVuY29kZQorICogIFxwYXJhbSAgb3V0ICB0aGUgYnVmZmVyIGZvciB0aGUgcmVzdWx0IChpZiBOVUxMIHRoZSBmdW5jdGlvbiByZXR1cm5zIG51bWJlcgorICogICAgICAgICAgICAgICBvZiBieXRlcyBuZWVkZWQpLgorICogIFxyZXR1cm4gMSBvbiBzdWNjZXNzIGFuZCAwIGlmIGFuIGVycm9yIG9jY3VycmVkLgorICovCitpbnQgaTJkX0VDUHJpdmF0ZUtleShFQ19LRVkgKmtleSwgdW5zaWduZWQgY2hhciAqKm91dCk7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgIGRlLSBhbmQgZW5jb2RpbmcgZnVuY3Rpb25zIGZvciBFQyBwYXJhbWV0ZXJzICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiogRGVjb2RlcyBlYyBwYXJhbWV0ZXIgZnJvbSBhIG1lbW9yeSBidWZmZXIuCisgKiAgXHBhcmFtICBrZXkgIGEgcG9pbnRlciB0byBhIEVDX0tFWSBvYmplY3Qgd2hpY2ggc2hvdWxkIGJlIHVzZWQgKG9yIE5VTEwpCisgKiAgXHBhcmFtICBpbiAgIHBvaW50ZXIgdG8gbWVtb3J5IHdpdGggdGhlIERFUiBlbmNvZGVkIGVjIHBhcmFtZXRlcnMKKyAqICBccGFyYW0gIGxlbiAgbGVuZ3RoIG9mIHRoZSBERVIgZW5jb2RlZCBlYyBwYXJhbWV0ZXJzCisgKiAgXHJldHVybiBhIEVDX0tFWSBvYmplY3Qgd2l0aCB0aGUgZGVjb2RlZCBwYXJhbWV0ZXJzIG9yIE5VTEwgaWYgYW4gZXJyb3IKKyAqICAgICAgICAgIG9jY3VycmVkLgorICovCitFQ19LRVkgKmQyaV9FQ1BhcmFtZXRlcnMoRUNfS0VZICoqa2V5LCBjb25zdCB1bnNpZ25lZCBjaGFyICoqaW4sIGxvbmcgbGVuKTsKKworLyoqIEVuY29kZXMgZWMgcGFyYW1ldGVyIGFuZCBzdG9yZXMgdGhlIHJlc3VsdCBpbiBhIGJ1ZmZlci4KKyAqICBccGFyYW0gIGtleSAgdGhlIEVDX0tFWSBvYmplY3Qgd2l0aCBlYyBwYXJhbXRlcnMgdG8gZW5jb2RlCisgKiAgXHBhcmFtICBvdXQgIHRoZSBidWZmZXIgZm9yIHRoZSByZXN1bHQgKGlmIE5VTEwgdGhlIGZ1bmN0aW9uIHJldHVybnMgbnVtYmVyCisgKiAgICAgICAgICAgICAgIG9mIGJ5dGVzIG5lZWRlZCkuCisgKiAgXHJldHVybiAxIG9uIHN1Y2Nlc3MgYW5kIDAgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCisgKi8KK2ludCBpMmRfRUNQYXJhbWV0ZXJzKEVDX0tFWSAqa2V5LCB1bnNpZ25lZCBjaGFyICoqb3V0KTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgIGRlLSBhbmQgZW5jb2RpbmcgZnVuY3Rpb25zIGZvciBFQyBwdWJsaWMga2V5ICAgICAgICAgICAgICovCisvKiAgICAgICAgIChvY3RldCBzdHJpbmcsIG5vdCBERVIgLS0gaGVuY2UgJ28yaScgYW5kICdpMm8nKSAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKiBEZWNvZGVzIGEgZWMgcHVibGljIGtleSBmcm9tIGEgb2N0ZXQgc3RyaW5nLgorICogIFxwYXJhbSAga2V5ICBhIHBvaW50ZXIgdG8gYSBFQ19LRVkgb2JqZWN0IHdoaWNoIHNob3VsZCBiZSB1c2VkCisgKiAgXHBhcmFtICBpbiAgIG1lbW9yeSBidWZmZXIgd2l0aCB0aGUgZW5jb2RlZCBwdWJsaWMga2V5CisgKiAgXHBhcmFtICBsZW4gIGxlbmd0aCBvZiB0aGUgZW5jb2RlZCBwdWJsaWMga2V5CisgKiAgXHJldHVybiBFQ19LRVkgb2JqZWN0IHdpdGggZGVjb2RlZCBwdWJsaWMga2V5IG9yIE5VTEwgaWYgYW4gZXJyb3IKKyAqICAgICAgICAgIG9jY3VycmVkLgorICovCitFQ19LRVkgKm8yaV9FQ1B1YmxpY0tleShFQ19LRVkgKiprZXksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKippbiwgbG9uZyBsZW4pOworCisvKiogRW5jb2RlcyBhIGVjIHB1YmxpYyBrZXkgaW4gYW4gb2N0ZXQgc3RyaW5nLgorICogIFxwYXJhbSAga2V5ICB0aGUgRUNfS0VZIG9iamVjdCB3aXRoIHRoZSBwdWJsaWMga2V5CisgKiAgXHBhcmFtICBvdXQgIHRoZSBidWZmZXIgZm9yIHRoZSByZXN1bHQgKGlmIE5VTEwgdGhlIGZ1bmN0aW9uIHJldHVybnMgbnVtYmVyCisgKiAgICAgICAgICAgICAgIG9mIGJ5dGVzIG5lZWRlZCkuCisgKiAgXHJldHVybiAxIG9uIHN1Y2Nlc3MgYW5kIDAgaWYgYW4gZXJyb3Igb2NjdXJyZWQKKyAqLworaW50IGkyb19FQ1B1YmxpY0tleShFQ19LRVkgKmtleSwgdW5zaWduZWQgY2hhciAqKm91dCk7CiAKICNpZm5kZWYgT1BFTlNTTF9OT19CSU8KLWludAlFQ1BhcmFtZXRlcnNfcHJpbnQoQklPICpicCwgY29uc3QgRUNfS0VZICp4KTsKLWludAlFQ19LRVlfcHJpbnQoQklPICpicCwgY29uc3QgRUNfS0VZICp4LCBpbnQgb2ZmKTsKKy8qKiBQcmludHMgb3V0IHRoZSBlYyBwYXJhbWV0ZXJzIG9uIGh1bWFuIHJlYWRhYmxlIGZvcm0uCisgKiAgXHBhcmFtICBicCAgIEJJTyBvYmplY3QgdG8gd2hpY2ggdGhlIGluZm9ybWF0aW9uIGlzIHByaW50ZWQKKyAqICBccGFyYW0gIGtleSAgRUNfS0VZIG9iamVjdAorICogIFxyZXR1cm4gMSBvbiBzdWNjZXNzIGFuZCAwIGlmIGFuIGVycm9yIG9jY3VycmVkCisgKi8KK2ludAlFQ1BhcmFtZXRlcnNfcHJpbnQoQklPICpicCwgY29uc3QgRUNfS0VZICprZXkpOworCisvKiogUHJpbnRzIG91dCB0aGUgY29udGVudHMgb2YgYSBFQ19LRVkgb2JqZWN0CisgKiAgXHBhcmFtICBicCAgIEJJTyBvYmplY3QgdG8gd2hpY2ggdGhlIGluZm9ybWF0aW9uIGlzIHByaW50ZWQKKyAqICBccGFyYW0gIGtleSAgRUNfS0VZIG9iamVjdAorICogIFxwYXJhbSAgb2ZmICBsaW5lIG9mZnNldCAKKyAqICBccmV0dXJuIDEgb24gc3VjY2VzcyBhbmQgMCBpZiBhbiBlcnJvciBvY2N1cnJlZAorICovCitpbnQJRUNfS0VZX3ByaW50KEJJTyAqYnAsIGNvbnN0IEVDX0tFWSAqa2V5LCBpbnQgb2ZmKTsKKwogI2VuZGlmCiAjaWZuZGVmIE9QRU5TU0xfTk9fRlBfQVBJCi1pbnQJRUNQYXJhbWV0ZXJzX3ByaW50X2ZwKEZJTEUgKmZwLCBjb25zdCBFQ19LRVkgKngpOwotaW50CUVDX0tFWV9wcmludF9mcChGSUxFICpmcCwgY29uc3QgRUNfS0VZICp4LCBpbnQgb2ZmKTsKKy8qKiBQcmludHMgb3V0IHRoZSBlYyBwYXJhbWV0ZXJzIG9uIGh1bWFuIHJlYWRhYmxlIGZvcm0uCisgKiAgXHBhcmFtICBmcCAgIGZpbGUgZGVzY3JpcHRvciB0byB3aGljaCB0aGUgaW5mb3JtYXRpb24gaXMgcHJpbnRlZAorICogIFxwYXJhbSAga2V5ICBFQ19LRVkgb2JqZWN0CisgKiAgXHJldHVybiAxIG9uIHN1Y2Nlc3MgYW5kIDAgaWYgYW4gZXJyb3Igb2NjdXJyZWQKKyAqLworaW50CUVDUGFyYW1ldGVyc19wcmludF9mcChGSUxFICpmcCwgY29uc3QgRUNfS0VZICprZXkpOworCisvKiogUHJpbnRzIG91dCB0aGUgY29udGVudHMgb2YgYSBFQ19LRVkgb2JqZWN0CisgKiAgXHBhcmFtICBmcCAgIGZpbGUgZGVzY3JpcHRvciB0byB3aGljaCB0aGUgaW5mb3JtYXRpb24gaXMgcHJpbnRlZAorICogIFxwYXJhbSAga2V5ICBFQ19LRVkgb2JqZWN0CisgKiAgXHBhcmFtICBvZmYgIGxpbmUgb2Zmc2V0IAorICogIFxyZXR1cm4gMSBvbiBzdWNjZXNzIGFuZCAwIGlmIGFuIGVycm9yIG9jY3VycmVkCisgKi8KK2ludAlFQ19LRVlfcHJpbnRfZnAoRklMRSAqZnAsIGNvbnN0IEVDX0tFWSAqa2V5LCBpbnQgb2ZmKTsKKwogI2VuZGlmCiAKICNkZWZpbmUgRUNQYXJhbWV0ZXJzX2R1cCh4KSBBU04xX2R1cF9vZihFQ19LRVksaTJkX0VDUGFyYW1ldGVycyxkMmlfRUNQYXJhbWV0ZXJzLHgpCkBAIC0zNjIsNiArOTEwLDEzIEBACiAjIGVuZGlmCiAjZW5kaWYKIAorI2RlZmluZSBFVlBfUEtFWV9DVFhfc2V0X2VjX3BhcmFtZ2VuX2N1cnZlX25pZChjdHgsIG5pZCkgXAorCUVWUF9QS0VZX0NUWF9jdHJsKGN0eCwgRVZQX1BLRVlfRUMsIEVWUF9QS0VZX09QX1BBUkFNR0VOLCBcCisJCQkJRVZQX1BLRVlfQ1RSTF9FQ19QQVJBTUdFTl9DVVJWRV9OSUQsIG5pZCwgTlVMTCkKKworCisjZGVmaW5lIEVWUF9QS0VZX0NUUkxfRUNfUEFSQU1HRU5fQ1VSVkVfTklECQkoRVZQX1BLRVlfQUxHX0NUUkwgKyAxKQorCiAvKiBCRUdJTiBFUlJPUiBDT0RFUyAqLwogLyogVGhlIGZvbGxvd2luZyBsaW5lcyBhcmUgYXV0byBnZW5lcmF0ZWQgYnkgdGhlIHNjcmlwdCBta2Vyci5wbC4gQW55IGNoYW5nZXMKICAqIG1hZGUgYWZ0ZXIgdGhpcyBwb2ludCBtYXkgYmUgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgc2NyaXB0IGlzIG5leHQgcnVuLgpAQCAtMzc1LDYgKzkzMCwxNCBAQAogI2RlZmluZSBFQ19GX0QySV9FQ1BBUkFNRVRFUlMJCQkJIDE0NAogI2RlZmluZSBFQ19GX0QySV9FQ1BLUEFSQU1FVEVSUwkJCQkgMTQ1CiAjZGVmaW5lIEVDX0ZfRDJJX0VDUFJJVkFURUtFWQkJCQkgMTQ2CisjZGVmaW5lIEVDX0ZfRE9fRUNfS0VZX1BSSU5UCQkJCSAyMjEKKyNkZWZpbmUgRUNfRl9FQ0tFWV9QQVJBTTJUWVBFCQkJCSAyMjMKKyNkZWZpbmUgRUNfRl9FQ0tFWV9QQVJBTV9ERUNPREUJCQkJIDIxMgorI2RlZmluZSBFQ19GX0VDS0VZX1BSSVZfREVDT0RFCQkJCSAyMTMKKyNkZWZpbmUgRUNfRl9FQ0tFWV9QUklWX0VOQ09ERQkJCQkgMjE0CisjZGVmaW5lIEVDX0ZfRUNLRVlfUFVCX0RFQ09ERQkJCQkgMjE1CisjZGVmaW5lIEVDX0ZfRUNLRVlfUFVCX0VOQ09ERQkJCQkgMjE2CisjZGVmaW5lIEVDX0ZfRUNLRVlfVFlQRTJQQVJBTQkJCQkgMjIwCiAjZGVmaW5lIEVDX0ZfRUNQQVJBTUVURVJTX1BSSU5UCQkJCSAxNDcKICNkZWZpbmUgRUNfRl9FQ1BBUkFNRVRFUlNfUFJJTlRfRlAJCQkgMTQ4CiAjZGVmaW5lIEVDX0ZfRUNQS1BBUkFNRVRFUlNfUFJJTlQJCQkgMTQ5CkBAIC00NDgsNyArMTAxMSw2IEBACiAjZGVmaW5lIEVDX0ZfRUNfS0VZX1BSSU5UCQkJCSAxODAKICNkZWZpbmUgRUNfRl9FQ19LRVlfUFJJTlRfRlAJCQkJIDE4MQogI2RlZmluZSBFQ19GX0VDX1BPSU5UU19NQUtFX0FGRklORQkJCSAxMzYKLSNkZWZpbmUgRUNfRl9FQ19QT0lOVFNfTVVMCQkJCSAxMzgKICNkZWZpbmUgRUNfRl9FQ19QT0lOVF9BREQJCQkJIDExMgogI2RlZmluZSBFQ19GX0VDX1BPSU5UX0NNUAkJCQkgMTEzCiAjZGVmaW5lIEVDX0ZfRUNfUE9JTlRfQ09QWQkJCQkgMTE0CkBAIC00NzksMjEgKzEwNDEsMzEgQEAKICNkZWZpbmUgRUNfRl9JMkRfRUNQUklWQVRFS0VZCQkJCSAxOTIKICNkZWZpbmUgRUNfRl9JMk9fRUNQVUJMSUNLRVkJCQkJIDE1MQogI2RlZmluZSBFQ19GX08ySV9FQ1BVQkxJQ0tFWQkJCQkgMTUyCisjZGVmaW5lIEVDX0ZfT0xEX0VDX1BSSVZfREVDT0RFCQkJCSAyMjIKKyNkZWZpbmUgRUNfRl9QS0VZX0VDX0NUUkwJCQkJIDE5NworI2RlZmluZSBFQ19GX1BLRVlfRUNfQ1RSTF9TVFIJCQkJIDE5OAorI2RlZmluZSBFQ19GX1BLRVlfRUNfREVSSVZFCQkJCSAyMTcKKyNkZWZpbmUgRUNfRl9QS0VZX0VDX0tFWUdFTgkJCQkgMTk5CisjZGVmaW5lIEVDX0ZfUEtFWV9FQ19QQVJBTUdFTgkJCQkgMjE5CisjZGVmaW5lIEVDX0ZfUEtFWV9FQ19TSUdOCQkJCSAyMTgKIAogLyogUmVhc29uIGNvZGVzLiAqLwogI2RlZmluZSBFQ19SX0FTTjFfRVJST1IJCQkJCSAxMTUKICNkZWZpbmUgRUNfUl9BU04xX1VOS05PV05fRklFTEQJCQkJIDExNgogI2RlZmluZSBFQ19SX0JVRkZFUl9UT09fU01BTEwJCQkJIDEwMAogI2RlZmluZSBFQ19SX0QySV9FQ1BLUEFSQU1FVEVSU19GQUlMVVJFCQkJIDExNworI2RlZmluZSBFQ19SX0RFQ09ERV9FUlJPUgkJCQkgMTQyCiAjZGVmaW5lIEVDX1JfRElTQ1JJTUlOQU5UX0lTX1pFUk8JCQkgMTE4CiAjZGVmaW5lIEVDX1JfRUNfR1JPVVBfTkVXX0JZX05BTUVfRkFJTFVSRQkJIDExOQotI2RlZmluZSBFQ19SX0ZJRUxEX1RPT19MQVJHRQkJCQkgMTM4CisjZGVmaW5lIEVDX1JfRklFTERfVE9PX0xBUkdFCQkJCSAxNDMKICNkZWZpbmUgRUNfUl9HUk9VUDJQS1BBUkFNRVRFUlNfRkFJTFVSRQkJCSAxMjAKICNkZWZpbmUgRUNfUl9JMkRfRUNQS1BBUkFNRVRFUlNfRkFJTFVSRQkJCSAxMjEKICNkZWZpbmUgRUNfUl9JTkNPTVBBVElCTEVfT0JKRUNUUwkJCSAxMDEKICNkZWZpbmUgRUNfUl9JTlZBTElEX0FSR1VNRU5UCQkJCSAxMTIKICNkZWZpbmUgRUNfUl9JTlZBTElEX0NPTVBSRVNTRURfUE9JTlQJCQkgMTEwCiAjZGVmaW5lIEVDX1JfSU5WQUxJRF9DT01QUkVTU0lPTl9CSVQJCQkgMTA5CisjZGVmaW5lIEVDX1JfSU5WQUxJRF9DVVJWRQkJCQkgMTQxCisjZGVmaW5lIEVDX1JfSU5WQUxJRF9ESUdFU1RfVFlQRQkJCSAxMzgKICNkZWZpbmUgRUNfUl9JTlZBTElEX0VOQ09ESU5HCQkJCSAxMDIKICNkZWZpbmUgRUNfUl9JTlZBTElEX0ZJRUxECQkJCSAxMDMKICNkZWZpbmUgRUNfUl9JTlZBTElEX0ZPUk0JCQkJIDEwNApAQCAtNTAxLDYgKzEwNzMsNyBAQAogI2RlZmluZSBFQ19SX0lOVkFMSURfUEVOVEFOT01JQUxfQkFTSVMJCQkgMTMyCiAjZGVmaW5lIEVDX1JfSU5WQUxJRF9QUklWQVRFX0tFWQkJCSAxMjMKICNkZWZpbmUgRUNfUl9JTlZBTElEX1RSSU5PTUlBTF9CQVNJUwkJCSAxMzcKKyNkZWZpbmUgRUNfUl9LRVlTX05PVF9TRVQJCQkJIDE0MAogI2RlZmluZSBFQ19SX01JU1NJTkdfUEFSQU1FVEVSUwkJCQkgMTI0CiAjZGVmaW5lIEVDX1JfTUlTU0lOR19QUklWQVRFX0tFWQkJCSAxMjUKICNkZWZpbmUgRUNfUl9OT1RfQV9OSVNUX1BSSU1FCQkJCSAxMzUKQEAgLTUwOCw2ICsxMDgxLDcgQEAKICNkZWZpbmUgRUNfUl9OT1RfSU1QTEVNRU5URUQJCQkJIDEyNgogI2RlZmluZSBFQ19SX05PVF9JTklUSUFMSVpFRAkJCQkgMTExCiAjZGVmaW5lIEVDX1JfTk9fRklFTERfTU9ECQkJCSAxMzMKKyNkZWZpbmUgRUNfUl9OT19QQVJBTUVURVJTX1NFVAkJCQkgMTM5CiAjZGVmaW5lIEVDX1JfUEFTU0VEX05VTExfUEFSQU1FVEVSCQkJIDEzNAogI2RlZmluZSBFQ19SX1BLUEFSQU1FVEVSUzJHUk9VUF9GQUlMVVJFCQkJIDEyNwogI2RlZmluZSBFQ19SX1BPSU5UX0FUX0lORklOSVRZCQkJCSAxMDYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIGIvaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKaW5kZXggZjIwYzhlZS4uZTYxYzUzOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKKysrIGIvaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKQEAgLTQsNyArNCw3IEBACiAgKiBcYXV0aG9yIFdyaXR0ZW4gYnkgTmlscyBMYXJzY2ggZm9yIHRoZSBPcGVuU1NMIHByb2plY3QKICAqLwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoYykgMjAwMC0yMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgxLDE1NiArODEsMTQzIEBACiAJQklHTlVNICpzOwogCX0gRUNEU0FfU0lHOwogCi0vKiogRUNEU0FfU0lHICpFQ0RTQV9TSUdfbmV3KHZvaWQpCi0gKiBhbGxvY2F0ZXMgYW5kIGluaXRpYWxpemUgYSBFQ0RTQV9TSUcgc3RydWN0dXJlCi0gKiBccmV0dXJuIHBvaW50ZXIgdG8gYSBFQ0RTQV9TSUcgc3RydWN0dXJlIG9yIE5VTEwgaWYgYW4gZXJyb3Igb2NjdXJyZWQKKy8qKiBBbGxvY2F0ZXMgYW5kIGluaXRpYWxpemUgYSBFQ0RTQV9TSUcgc3RydWN0dXJlCisgKiAgXHJldHVybiBwb2ludGVyIHRvIGEgRUNEU0FfU0lHIHN0cnVjdHVyZSBvciBOVUxMIGlmIGFuIGVycm9yIG9jY3VycmVkCiAgKi8KIEVDRFNBX1NJRyAqRUNEU0FfU0lHX25ldyh2b2lkKTsKIAotLyoqIEVDRFNBX1NJR19mcmVlCi0gKiBmcmVlcyBhIEVDRFNBX1NJRyBzdHJ1Y3R1cmUKLSAqIFxwYXJhbSBhIHBvaW50ZXIgdG8gdGhlIEVDRFNBX1NJRyBzdHJ1Y3R1cmUKKy8qKiBmcmVlcyBhIEVDRFNBX1NJRyBzdHJ1Y3R1cmUKKyAqICBccGFyYW0gIHNpZyAgcG9pbnRlciB0byB0aGUgRUNEU0FfU0lHIHN0cnVjdHVyZQogICovCi12b2lkCSAgRUNEU0FfU0lHX2ZyZWUoRUNEU0FfU0lHICphKTsKK3ZvaWQJICBFQ0RTQV9TSUdfZnJlZShFQ0RTQV9TSUcgKnNpZyk7CiAKLS8qKiBpMmRfRUNEU0FfU0lHCi0gKiBERVIgZW5jb2RlIGNvbnRlbnQgb2YgRUNEU0FfU0lHIG9iamVjdCAobm90ZTogdGhpcyBmdW5jdGlvbiBtb2RpZmllcyAqcHAKLSAqICgqcHAgKz0gbGVuZ3RoIG9mIHRoZSBERVIgZW5jb2RlZCBzaWduYXR1cmUpKS4KLSAqIFxwYXJhbSBhICBwb2ludGVyIHRvIHRoZSBFQ0RTQV9TSUcgb2JqZWN0Ci0gKiBccGFyYW0gcHAgcG9pbnRlciB0byBhIHVuc2lnbmVkIGNoYXIgcG9pbnRlciBmb3IgdGhlIG91dHB1dCBvciBOVUxMCi0gKiBccmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIERFUiBlbmNvZGVkIEVDRFNBX1NJRyBvYmplY3Qgb3IgMCAKKy8qKiBERVIgZW5jb2RlIGNvbnRlbnQgb2YgRUNEU0FfU0lHIG9iamVjdCAobm90ZTogdGhpcyBmdW5jdGlvbiBtb2RpZmllcyAqcHAKKyAqICAoKnBwICs9IGxlbmd0aCBvZiB0aGUgREVSIGVuY29kZWQgc2lnbmF0dXJlKSkuCisgKiAgXHBhcmFtICBzaWcgIHBvaW50ZXIgdG8gdGhlIEVDRFNBX1NJRyBvYmplY3QKKyAqICBccGFyYW0gIHBwICAgcG9pbnRlciB0byBhIHVuc2lnbmVkIGNoYXIgcG9pbnRlciBmb3IgdGhlIG91dHB1dCBvciBOVUxMCisgKiAgXHJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBERVIgZW5jb2RlZCBFQ0RTQV9TSUcgb2JqZWN0IG9yIDAgCiAgKi8KLWludAkgIGkyZF9FQ0RTQV9TSUcoY29uc3QgRUNEU0FfU0lHICphLCB1bnNpZ25lZCBjaGFyICoqcHApOworaW50CSAgaTJkX0VDRFNBX1NJRyhjb25zdCBFQ0RTQV9TSUcgKnNpZywgdW5zaWduZWQgY2hhciAqKnBwKTsKIAotLyoqIGQyaV9FQ0RTQV9TSUcKLSAqIGRlY29kZXMgYSBERVIgZW5jb2RlZCBFQ0RTQSBzaWduYXR1cmUgKG5vdGU6IHRoaXMgZnVuY3Rpb24gY2hhbmdlcyAqcHAKLSAqICgqcHAgKz0gbGVuKSkuIAotICogXHBhcmFtIHYgcG9pbnRlciB0byBFQ0RTQV9TSUcgcG9pbnRlciAobWF5IGJlIE5VTEwpCi0gKiBccGFyYW0gcHAgYnVmZmVyIHdpdGggdGhlIERFUiBlbmNvZGVkIHNpZ25hdHVyZQotICogXHBhcmFtIGxlbiBidWZmZXJsZW5ndGgKLSAqIFxyZXR1cm4gcG9pbnRlciB0byB0aGUgZGVjb2RlZCBFQ0RTQV9TSUcgc3RydWN0dXJlIChvciBOVUxMKQorLyoqIERlY29kZXMgYSBERVIgZW5jb2RlZCBFQ0RTQSBzaWduYXR1cmUgKG5vdGU6IHRoaXMgZnVuY3Rpb24gY2hhbmdlcyAqcHAKKyAqICAoKnBwICs9IGxlbikpLiAKKyAqICBccGFyYW0gIHNpZyAgcG9pbnRlciB0byBFQ0RTQV9TSUcgcG9pbnRlciAobWF5IGJlIE5VTEwpCisgKiAgXHBhcmFtICBwcCAgIG1lbW9yeSBidWZmZXIgd2l0aCB0aGUgREVSIGVuY29kZWQgc2lnbmF0dXJlCisgKiAgXHBhcmFtICBsZW4gIGxlbmd0aCBvZiB0aGUgYnVmZmVyCisgKiAgXHJldHVybiBwb2ludGVyIHRvIHRoZSBkZWNvZGVkIEVDRFNBX1NJRyBzdHJ1Y3R1cmUgKG9yIE5VTEwpCiAgKi8KLUVDRFNBX1NJRyAqZDJpX0VDRFNBX1NJRyhFQ0RTQV9TSUcgKip2LCBjb25zdCB1bnNpZ25lZCBjaGFyICoqcHAsIGxvbmcgbGVuKTsKK0VDRFNBX1NJRyAqZDJpX0VDRFNBX1NJRyhFQ0RTQV9TSUcgKipzaWcsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKipwcCwgbG9uZyBsZW4pOwogCi0vKiogRUNEU0FfZG9fc2lnbgotICogY29tcHV0ZXMgdGhlIEVDRFNBIHNpZ25hdHVyZSBvZiB0aGUgZ2l2ZW4gaGFzaCB2YWx1ZSB1c2luZwotICogdGhlIHN1cHBsaWVkIHByaXZhdGUga2V5IGFuZCByZXR1cm5zIHRoZSBjcmVhdGVkIHNpZ25hdHVyZS4KLSAqIFxwYXJhbSBkZ3N0IHBvaW50ZXIgdG8gdGhlIGhhc2ggdmFsdWUKLSAqIFxwYXJhbSBkZ3N0X2xlbiBsZW5ndGggb2YgdGhlIGhhc2ggdmFsdWUKLSAqIFxwYXJhbSBlY2tleSBwb2ludGVyIHRvIHRoZSBFQ19LRVkgb2JqZWN0IGNvbnRhaW5pbmcgYSBwcml2YXRlIEVDIGtleQotICogXHJldHVybiBwb2ludGVyIHRvIGEgRUNEU0FfU0lHIHN0cnVjdHVyZSBvciBOVUxMCisvKiogQ29tcHV0ZXMgdGhlIEVDRFNBIHNpZ25hdHVyZSBvZiB0aGUgZ2l2ZW4gaGFzaCB2YWx1ZSB1c2luZworICogIHRoZSBzdXBwbGllZCBwcml2YXRlIGtleSBhbmQgcmV0dXJucyB0aGUgY3JlYXRlZCBzaWduYXR1cmUuCisgKiAgXHBhcmFtICBkZ3N0ICAgICAgcG9pbnRlciB0byB0aGUgaGFzaCB2YWx1ZQorICogIFxwYXJhbSAgZGdzdF9sZW4gIGxlbmd0aCBvZiB0aGUgaGFzaCB2YWx1ZQorICogIFxwYXJhbSAgZWNrZXkgICAgIEVDX0tFWSBvYmplY3QgY29udGFpbmluZyBhIHByaXZhdGUgRUMga2V5CisgKiAgXHJldHVybiBwb2ludGVyIHRvIGEgRUNEU0FfU0lHIHN0cnVjdHVyZSBvciBOVUxMIGlmIGFuIGVycm9yIG9jY3VycmVkCiAgKi8KIEVDRFNBX1NJRyAqRUNEU0FfZG9fc2lnbihjb25zdCB1bnNpZ25lZCBjaGFyICpkZ3N0LGludCBkZ3N0X2xlbixFQ19LRVkgKmVja2V5KTsKIAotLyoqIEVDRFNBX2RvX3NpZ25fZXgKLSAqIGNvbXB1dGVzIEVDRFNBIHNpZ25hdHVyZSBvZiBhIGdpdmVuIGhhc2ggdmFsdWUgdXNpbmcgdGhlIHN1cHBsaWVkCi0gKiBwcml2YXRlIGtleSAobm90ZTogc2lnIG11c3QgcG9pbnQgdG8gRUNEU0Ffc2l6ZShlY2tleSkgYnl0ZXMgb2YgbWVtb3J5KS4KLSAqIFxwYXJhbSBkZ3N0IHBvaW50ZXIgdG8gdGhlIGhhc2ggdmFsdWUgdG8gc2lnbgotICogXHBhcmFtIGRnc3RsZW4gbGVuZ3RoIG9mIHRoZSBoYXNoIHZhbHVlCi0gKiBccGFyYW0ga2ludiBvcHRpb25hbCBwb2ludGVyIHRvIGEgcHJlLWNvbXB1dGVkIGludmVyc2UgawotICogXHBhcmFtIHJwIG9wdGlvbmFsIHBvaW50ZXIgdG8gdGhlIHByZS1jb21wdXRlZCBycCB2YWx1ZSAoc2VlIAotICogICAgICAgIEVDRFNBX3NpZ25fc2V0dXAKLSAqIFxwYXJhbSBlY2tleSBwb2ludGVyIHRvIHRoZSBFQ19LRVkgb2JqZWN0IGNvbnRhaW5pbmcgYSBwcml2YXRlIEVDIGtleQotICogXHJldHVybiBwb2ludGVyIHRvIGEgRUNEU0FfU0lHIHN0cnVjdHVyZSBvciBOVUxMCisvKiogQ29tcHV0ZXMgRUNEU0Egc2lnbmF0dXJlIG9mIGEgZ2l2ZW4gaGFzaCB2YWx1ZSB1c2luZyB0aGUgc3VwcGxpZWQKKyAqICBwcml2YXRlIGtleSAobm90ZTogc2lnIG11c3QgcG9pbnQgdG8gRUNEU0Ffc2l6ZShlY2tleSkgYnl0ZXMgb2YgbWVtb3J5KS4KKyAqICBccGFyYW0gIGRnc3QgICAgIHBvaW50ZXIgdG8gdGhlIGhhc2ggdmFsdWUgdG8gc2lnbgorICogIFxwYXJhbSAgZGdzdGxlbiAgbGVuZ3RoIG9mIHRoZSBoYXNoIHZhbHVlCisgKiAgXHBhcmFtICBraW52ICAgICBCSUdOVU0gd2l0aCBhIHByZS1jb21wdXRlZCBpbnZlcnNlIGsgKG9wdGlvbmFsKQorICogIFxwYXJhbSAgcnAgICAgICAgQklHTlVNIHdpdGggYSBwcmUtY29tcHV0ZWQgcnAgdmFsdWUgKG9wdGlvYW5sKSwgCisgKiAgICAgICAgICAgICAgICAgICBzZWUgRUNEU0Ffc2lnbl9zZXR1cAorICogIFxwYXJhbSAgZWNrZXkgICAgRUNfS0VZIG9iamVjdCBjb250YWluaW5nIGEgcHJpdmF0ZSBFQyBrZXkKKyAqICBccmV0dXJuIHBvaW50ZXIgdG8gYSBFQ0RTQV9TSUcgc3RydWN0dXJlIG9yIE5VTEwgaWYgYW4gZXJyb3Igb2NjdXJyZWQKICAqLwogRUNEU0FfU0lHICpFQ0RTQV9kb19zaWduX2V4KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRnc3QsIGludCBkZ3N0bGVuLCAKIAkJY29uc3QgQklHTlVNICpraW52LCBjb25zdCBCSUdOVU0gKnJwLCBFQ19LRVkgKmVja2V5KTsKIAotLyoqIEVDRFNBX2RvX3ZlcmlmeQotICogdmVyaWZpZXMgdGhhdCB0aGUgc3VwcGxpZWQgc2lnbmF0dXJlIGlzIGEgdmFsaWQgRUNEU0EKLSAqIHNpZ25hdHVyZSBvZiB0aGUgc3VwcGxpZWQgaGFzaCB2YWx1ZSB1c2luZyB0aGUgc3VwcGxpZWQgcHVibGljIGtleS4KLSAqIFxwYXJhbSBkZ3N0IHBvaW50ZXIgdG8gdGhlIGhhc2ggdmFsdWUKLSAqIFxwYXJhbSBkZ3N0X2xlbiBsZW5ndGggb2YgdGhlIGhhc2ggdmFsdWUKLSAqIFxwYXJhbSBzaWcgIHBvaW50ZXIgdG8gdGhlIEVDRFNBX1NJRyBzdHJ1Y3R1cmUKLSAqIFxwYXJhbSBlY2tleSBwb2ludGVyIHRvIHRoZSBFQ19LRVkgb2JqZWN0IGNvbnRhaW5pbmcgYSBwdWJsaWMgRUMga2V5Ci0gKiBccmV0dXJuIDEgaWYgdGhlIHNpZ25hdHVyZSBpcyB2YWxpZCwgMCBpZiB0aGUgc2lnbmF0dXJlIGlzIGludmFsaWQgYW5kIC0xIG9uIGVycm9yCisvKiogVmVyaWZpZXMgdGhhdCB0aGUgc3VwcGxpZWQgc2lnbmF0dXJlIGlzIGEgdmFsaWQgRUNEU0EKKyAqICBzaWduYXR1cmUgb2YgdGhlIHN1cHBsaWVkIGhhc2ggdmFsdWUgdXNpbmcgdGhlIHN1cHBsaWVkIHB1YmxpYyBrZXkuCisgKiAgXHBhcmFtICBkZ3N0ICAgICAgcG9pbnRlciB0byB0aGUgaGFzaCB2YWx1ZQorICogIFxwYXJhbSAgZGdzdF9sZW4gIGxlbmd0aCBvZiB0aGUgaGFzaCB2YWx1ZQorICogIFxwYXJhbSAgc2lnICAgICAgIEVDRFNBX1NJRyBzdHJ1Y3R1cmUKKyAqICBccGFyYW0gIGVja2V5ICAgICBFQ19LRVkgb2JqZWN0IGNvbnRhaW5pbmcgYSBwdWJsaWMgRUMga2V5CisgKiAgXHJldHVybiAxIGlmIHRoZSBzaWduYXR1cmUgaXMgdmFsaWQsIDAgaWYgdGhlIHNpZ25hdHVyZSBpcyBpbnZhbGlkCisgKiAgICAgICAgICBhbmQgLTEgb24gZXJyb3IKICAqLwogaW50CSAgRUNEU0FfZG9fdmVyaWZ5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRnc3QsIGludCBkZ3N0X2xlbiwKIAkJY29uc3QgRUNEU0FfU0lHICpzaWcsIEVDX0tFWSogZWNrZXkpOwogCiBjb25zdCBFQ0RTQV9NRVRIT0QgKkVDRFNBX09wZW5TU0wodm9pZCk7CiAKLS8qKiBFQ0RTQV9zZXRfZGVmYXVsdF9tZXRob2QKLSAqIHNldHMgdGhlIGRlZmF1bHQgRUNEU0EgbWV0aG9kCi0gKiBccGFyYW0gbWV0aCB0aGUgbmV3IGRlZmF1bHQgRUNEU0FfTUVUSE9ECisvKiogU2V0cyB0aGUgZGVmYXVsdCBFQ0RTQSBtZXRob2QKKyAqICBccGFyYW0gIG1ldGggIG5ldyBkZWZhdWx0IEVDRFNBX01FVEhPRAogICovCiB2b2lkCSAgRUNEU0Ffc2V0X2RlZmF1bHRfbWV0aG9kKGNvbnN0IEVDRFNBX01FVEhPRCAqbWV0aCk7CiAKLS8qKiBFQ0RTQV9nZXRfZGVmYXVsdF9tZXRob2QKLSAqIHJldHVybnMgdGhlIGRlZmF1bHQgRUNEU0EgbWV0aG9kCi0gKiBccmV0dXJuIHBvaW50ZXIgdG8gRUNEU0FfTUVUSE9EIHN0cnVjdHVyZSBjb250YWluaW5nIHRoZSBkZWZhdWx0IG1ldGhvZAorLyoqIFJldHVybnMgdGhlIGRlZmF1bHQgRUNEU0EgbWV0aG9kCisgKiAgXHJldHVybiBwb2ludGVyIHRvIEVDRFNBX01FVEhPRCBzdHJ1Y3R1cmUgY29udGFpbmluZyB0aGUgZGVmYXVsdCBtZXRob2QKICAqLwogY29uc3QgRUNEU0FfTUVUSE9EICpFQ0RTQV9nZXRfZGVmYXVsdF9tZXRob2Qodm9pZCk7CiAKLS8qKiBFQ0RTQV9zZXRfbWV0aG9kCi0gKiBzZXRzIG1ldGhvZCB0byBiZSB1c2VkIGZvciB0aGUgRUNEU0Egb3BlcmF0aW9ucwotICogXHBhcmFtIGVja2V5IHBvaW50ZXIgdG8gdGhlIEVDX0tFWSBvYmplY3QKLSAqIFxwYXJhbSBtZXRoICBwb2ludGVyIHRvIHRoZSBuZXcgbWV0aG9kCi0gKiBccmV0dXJuIDEgb24gc3VjY2VzcyBhbmQgMCBvdGhlcndpc2UgCisvKiogU2V0cyBtZXRob2QgdG8gYmUgdXNlZCBmb3IgdGhlIEVDRFNBIG9wZXJhdGlvbnMKKyAqICBccGFyYW0gIGVja2V5ICBFQ19LRVkgb2JqZWN0CisgKiAgXHBhcmFtICBtZXRoICAgbmV3IG1ldGhvZAorICogIFxyZXR1cm4gMSBvbiBzdWNjZXNzIGFuZCAwIG90aGVyd2lzZSAKICAqLwogaW50IAkgIEVDRFNBX3NldF9tZXRob2QoRUNfS0VZICplY2tleSwgY29uc3QgRUNEU0FfTUVUSE9EICptZXRoKTsKIAotLyoqIEVDRFNBX3NpemUKLSAqIHJldHVybnMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIHRoZSBERVIgZW5jb2RlZCBzaWduYXR1cmUKLSAqIFxwYXJhbSAgZWNrZXkgcG9pbnRlciB0byBhIEVDX0tFWSBvYmplY3QKLSAqIFxyZXR1cm4gbnVtYmVycyBvZiBieXRlcyByZXF1aXJlZCBmb3IgdGhlIERFUiBlbmNvZGVkIHNpZ25hdHVyZQorLyoqIFJldHVybnMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIHRoZSBERVIgZW5jb2RlZCBzaWduYXR1cmUKKyAqICBccGFyYW0gIGVja2V5ICBFQ19LRVkgb2JqZWN0CisgKiAgXHJldHVybiBudW1iZXJzIG9mIGJ5dGVzIHJlcXVpcmVkIGZvciB0aGUgREVSIGVuY29kZWQgc2lnbmF0dXJlCiAgKi8KIGludAkgIEVDRFNBX3NpemUoY29uc3QgRUNfS0VZICplY2tleSk7CiAKLS8qKiBFQ0RTQV9zaWduX3NldHVwCi0gKiBwcmVjb21wdXRlIHBhcnRzIG9mIHRoZSBzaWduaW5nIG9wZXJhdGlvbi4gCi0gKiBccGFyYW0gZWNrZXkgcG9pbnRlciB0byB0aGUgRUNfS0VZIG9iamVjdCBjb250YWluaW5nIGEgcHJpdmF0ZSBFQyBrZXkKLSAqIFxwYXJhbSBjdHggIHBvaW50ZXIgdG8gYSBCTl9DVFggb2JqZWN0IChtYXkgYmUgTlVMTCkKLSAqIFxwYXJhbSBraW52IHBvaW50ZXIgdG8gYSBCSUdOVU0gcG9pbnRlciBmb3IgdGhlIGludmVyc2Ugb2YgawotICogXHBhcmFtIHJwICAgcG9pbnRlciB0byBhIEJJR05VTSBwb2ludGVyIGZvciB4IGNvb3JkaW5hdGUgb2YgayAqIGdlbmVyYXRvcgotICogXHJldHVybiAxIG9uIHN1Y2Nlc3MgYW5kIDAgb3RoZXJ3aXNlCisvKiogUHJlY29tcHV0ZSBwYXJ0cyBvZiB0aGUgc2lnbmluZyBvcGVyYXRpb24KKyAqICBccGFyYW0gIGVja2V5ICBFQ19LRVkgb2JqZWN0IGNvbnRhaW5pbmcgYSBwcml2YXRlIEVDIGtleQorICogIFxwYXJhbSAgY3R4ICAgIEJOX0NUWCBvYmplY3QgKG9wdGlvbmFsKQorICogIFxwYXJhbSAga2ludiAgIEJJR05VTSBwb2ludGVyIGZvciB0aGUgaW52ZXJzZSBvZiBrCisgKiAgXHBhcmFtICBycCAgICAgQklHTlVNIHBvaW50ZXIgZm9yIHggY29vcmRpbmF0ZSBvZiBrICogZ2VuZXJhdG9yCisgKiAgXHJldHVybiAxIG9uIHN1Y2Nlc3MgYW5kIDAgb3RoZXJ3aXNlCiAgKi8KIGludCAJICBFQ0RTQV9zaWduX3NldHVwKEVDX0tFWSAqZWNrZXksIEJOX0NUWCAqY3R4LCBCSUdOVU0gKipraW52LCAKIAkJQklHTlVNICoqcnApOwogCi0vKiogRUNEU0Ffc2lnbgotICogY29tcHV0ZXMgRUNEU0Egc2lnbmF0dXJlIG9mIGEgZ2l2ZW4gaGFzaCB2YWx1ZSB1c2luZyB0aGUgc3VwcGxpZWQKLSAqIHByaXZhdGUga2V5IChub3RlOiBzaWcgbXVzdCBwb2ludCB0byBFQ0RTQV9zaXplKGVja2V5KSBieXRlcyBvZiBtZW1vcnkpLgotICogXHBhcmFtIHR5cGUgdGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZAotICogXHBhcmFtIGRnc3QgcG9pbnRlciB0byB0aGUgaGFzaCB2YWx1ZSB0byBzaWduCi0gKiBccGFyYW0gZGdzdGxlbiBsZW5ndGggb2YgdGhlIGhhc2ggdmFsdWUKLSAqIFxwYXJhbSBzaWcgYnVmZmVyIHRvIGhvbGQgdGhlIERFUiBlbmNvZGVkIHNpZ25hdHVyZQotICogXHBhcmFtIHNpZ2xlbiBwb2ludGVyIHRvIHRoZSBsZW5ndGggb2YgdGhlIHJldHVybmVkIHNpZ25hdHVyZQotICogXHBhcmFtIGVja2V5IHBvaW50ZXIgdG8gdGhlIEVDX0tFWSBvYmplY3QgY29udGFpbmluZyBhIHByaXZhdGUgRUMga2V5Ci0gKiBccmV0dXJuIDEgb24gc3VjY2VzcyBhbmQgMCBvdGhlcndpc2UKKy8qKiBDb21wdXRlcyBFQ0RTQSBzaWduYXR1cmUgb2YgYSBnaXZlbiBoYXNoIHZhbHVlIHVzaW5nIHRoZSBzdXBwbGllZAorICogIHByaXZhdGUga2V5IChub3RlOiBzaWcgbXVzdCBwb2ludCB0byBFQ0RTQV9zaXplKGVja2V5KSBieXRlcyBvZiBtZW1vcnkpLgorICogIFxwYXJhbSAgdHlwZSAgICAgdGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZAorICogIFxwYXJhbSAgZGdzdCAgICAgcG9pbnRlciB0byB0aGUgaGFzaCB2YWx1ZSB0byBzaWduCisgKiAgXHBhcmFtICBkZ3N0bGVuICBsZW5ndGggb2YgdGhlIGhhc2ggdmFsdWUKKyAqICBccGFyYW0gIHNpZyAgICAgIG1lbW9yeSBmb3IgdGhlIERFUiBlbmNvZGVkIGNyZWF0ZWQgc2lnbmF0dXJlCisgKiAgXHBhcmFtICBzaWdsZW4gICBwb2ludGVyIHRvIHRoZSBsZW5ndGggb2YgdGhlIHJldHVybmVkIHNpZ25hdHVyZQorICogIFxwYXJhbSAgZWNrZXkgICAgRUNfS0VZIG9iamVjdCBjb250YWluaW5nIGEgcHJpdmF0ZSBFQyBrZXkKKyAqICBccmV0dXJuIDEgb24gc3VjY2VzcyBhbmQgMCBvdGhlcndpc2UKICAqLwogaW50CSAgRUNEU0Ffc2lnbihpbnQgdHlwZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGdzdCwgaW50IGRnc3RsZW4sIAogCQl1bnNpZ25lZCBjaGFyICpzaWcsIHVuc2lnbmVkIGludCAqc2lnbGVuLCBFQ19LRVkgKmVja2V5KTsKIAogCi0vKiogRUNEU0Ffc2lnbl9leAotICogY29tcHV0ZXMgRUNEU0Egc2lnbmF0dXJlIG9mIGEgZ2l2ZW4gaGFzaCB2YWx1ZSB1c2luZyB0aGUgc3VwcGxpZWQKLSAqIHByaXZhdGUga2V5IChub3RlOiBzaWcgbXVzdCBwb2ludCB0byBFQ0RTQV9zaXplKGVja2V5KSBieXRlcyBvZiBtZW1vcnkpLgotICogXHBhcmFtIHR5cGUgdGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZAotICogXHBhcmFtIGRnc3QgcG9pbnRlciB0byB0aGUgaGFzaCB2YWx1ZSB0byBzaWduCi0gKiBccGFyYW0gZGdzdGxlbiBsZW5ndGggb2YgdGhlIGhhc2ggdmFsdWUKLSAqIFxwYXJhbSBzaWcgYnVmZmVyIHRvIGhvbGQgdGhlIERFUiBlbmNvZGVkIHNpZ25hdHVyZQotICogXHBhcmFtIHNpZ2xlbiBwb2ludGVyIHRvIHRoZSBsZW5ndGggb2YgdGhlIHJldHVybmVkIHNpZ25hdHVyZQotICogXHBhcmFtIGtpbnYgb3B0aW9uYWwgcG9pbnRlciB0byBhIHByZS1jb21wdXRlZCBpbnZlcnNlIGsKLSAqIFxwYXJhbSBycCBvcHRpb25hbCBwb2ludGVyIHRvIHRoZSBwcmUtY29tcHV0ZWQgcnAgdmFsdWUgKHNlZSAKLSAqICAgICAgICBFQ0RTQV9zaWduX3NldHVwCi0gKiBccGFyYW0gZWNrZXkgcG9pbnRlciB0byB0aGUgRUNfS0VZIG9iamVjdCBjb250YWluaW5nIGEgcHJpdmF0ZSBFQyBrZXkKLSAqIFxyZXR1cm4gMSBvbiBzdWNjZXNzIGFuZCAwIG90aGVyd2lzZQorLyoqIENvbXB1dGVzIEVDRFNBIHNpZ25hdHVyZSBvZiBhIGdpdmVuIGhhc2ggdmFsdWUgdXNpbmcgdGhlIHN1cHBsaWVkCisgKiAgcHJpdmF0ZSBrZXkgKG5vdGU6IHNpZyBtdXN0IHBvaW50IHRvIEVDRFNBX3NpemUoZWNrZXkpIGJ5dGVzIG9mIG1lbW9yeSkuCisgKiAgXHBhcmFtICB0eXBlICAgICB0aGlzIHBhcmFtZXRlciBpcyBpZ25vcmVkCisgKiAgXHBhcmFtICBkZ3N0ICAgICBwb2ludGVyIHRvIHRoZSBoYXNoIHZhbHVlIHRvIHNpZ24KKyAqICBccGFyYW0gIGRnc3RsZW4gIGxlbmd0aCBvZiB0aGUgaGFzaCB2YWx1ZQorICogIFxwYXJhbSAgc2lnICAgICAgYnVmZmVyIHRvIGhvbGQgdGhlIERFUiBlbmNvZGVkIHNpZ25hdHVyZQorICogIFxwYXJhbSAgc2lnbGVuICAgcG9pbnRlciB0byB0aGUgbGVuZ3RoIG9mIHRoZSByZXR1cm5lZCBzaWduYXR1cmUKKyAqICBccGFyYW0gIGtpbnYgICAgIEJJR05VTSB3aXRoIGEgcHJlLWNvbXB1dGVkIGludmVyc2UgayAob3B0aW9uYWwpCisgKiAgXHBhcmFtICBycCAgICAgICBCSUdOVU0gd2l0aCBhIHByZS1jb21wdXRlZCBycCB2YWx1ZSAob3B0aW9hbmwpLCAKKyAqICAgICAgICAgICAgICAgICAgIHNlZSBFQ0RTQV9zaWduX3NldHVwCisgKiAgXHBhcmFtICBlY2tleSAgICBFQ19LRVkgb2JqZWN0IGNvbnRhaW5pbmcgYSBwcml2YXRlIEVDIGtleQorICogIFxyZXR1cm4gMSBvbiBzdWNjZXNzIGFuZCAwIG90aGVyd2lzZQogICovCiBpbnQJICBFQ0RTQV9zaWduX2V4KGludCB0eXBlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkZ3N0LCBpbnQgZGdzdGxlbiwgCiAJCXVuc2lnbmVkIGNoYXIgKnNpZywgdW5zaWduZWQgaW50ICpzaWdsZW4sIGNvbnN0IEJJR05VTSAqa2ludiwKIAkJY29uc3QgQklHTlVNICpycCwgRUNfS0VZICplY2tleSk7CiAKLS8qKiBFQ0RTQV92ZXJpZnkKLSAqIHZlcmlmaWVzIHRoYXQgdGhlIGdpdmVuIHNpZ25hdHVyZSBpcyB2YWxpZCBFQ0RTQSBzaWduYXR1cmUKLSAqIG9mIHRoZSBzdXBwbGllZCBoYXNoIHZhbHVlIHVzaW5nIHRoZSBzcGVjaWZpZWQgcHVibGljIGtleS4KLSAqIFxwYXJhbSB0eXBlIHRoaXMgcGFyYW1ldGVyIGlzIGlnbm9yZWQKLSAqIFxwYXJhbSBkZ3N0IHBvaW50ZXIgdG8gdGhlIGhhc2ggdmFsdWUgCi0gKiBccGFyYW0gZGdzdGxlbiBsZW5ndGggb2YgdGhlIGhhc2ggdmFsdWUKLSAqIFxwYXJhbSBzaWcgIHBvaW50ZXIgdG8gdGhlIERFUiBlbmNvZGVkIHNpZ25hdHVyZQotICogXHBhcmFtIHNpZ2xlbiBsZW5ndGggb2YgdGhlIERFUiBlbmNvZGVkIHNpZ25hdHVyZQotICogXHBhcmFtIGVja2V5IHBvaW50ZXIgdG8gdGhlIEVDX0tFWSBvYmplY3QgY29udGFpbmluZyBhIHB1YmxpYyBFQyBrZXkKLSAqIFxyZXR1cm4gMSBpZiB0aGUgc2lnbmF0dXJlIGlzIHZhbGlkLCAwIGlmIHRoZSBzaWduYXR1cmUgaXMgaW52YWxpZCBhbmQgLTEgb24gZXJyb3IKKy8qKiBWZXJpZmllcyB0aGF0IHRoZSBnaXZlbiBzaWduYXR1cmUgaXMgdmFsaWQgRUNEU0Egc2lnbmF0dXJlCisgKiAgb2YgdGhlIHN1cHBsaWVkIGhhc2ggdmFsdWUgdXNpbmcgdGhlIHNwZWNpZmllZCBwdWJsaWMga2V5LgorICogIFxwYXJhbSAgdHlwZSAgICAgdGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZAorICogIFxwYXJhbSAgZGdzdCAgICAgcG9pbnRlciB0byB0aGUgaGFzaCB2YWx1ZSAKKyAqICBccGFyYW0gIGRnc3RsZW4gIGxlbmd0aCBvZiB0aGUgaGFzaCB2YWx1ZQorICogIFxwYXJhbSAgc2lnICAgICAgcG9pbnRlciB0byB0aGUgREVSIGVuY29kZWQgc2lnbmF0dXJlCisgKiAgXHBhcmFtICBzaWdsZW4gICBsZW5ndGggb2YgdGhlIERFUiBlbmNvZGVkIHNpZ25hdHVyZQorICogIFxwYXJhbSAgZWNrZXkgICAgRUNfS0VZIG9iamVjdCBjb250YWluaW5nIGEgcHVibGljIEVDIGtleQorICogIFxyZXR1cm4gMSBpZiB0aGUgc2lnbmF0dXJlIGlzIHZhbGlkLCAwIGlmIHRoZSBzaWduYXR1cmUgaXMgaW52YWxpZAorICogICAgICAgICAgYW5kIC0xIG9uIGVycm9yCiAgKi8KIGludCAJICBFQ0RTQV92ZXJpZnkoaW50IHR5cGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRnc3QsIGludCBkZ3N0bGVuLCAKIAkJY29uc3QgdW5zaWduZWQgY2hhciAqc2lnLCBpbnQgc2lnbGVuLCBFQ19LRVkgKmVja2V5KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnNzbC9lbmdpbmUuaCBiL2luY2x1ZGUvb3BlbnNzbC9lbmdpbmUuaAppbmRleCBkNGJjMWVmLi43ZmJkOTVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL29wZW5zc2wvZW5naW5lLmgKKysrIGIvaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oCkBAIC04OCwxNiArODgsMTUgQEAKICNpbmNsdWRlIDxvcGVuc3NsL2VjZHNhLmg+CiAjZW5kaWYKICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSNpbmNsdWRlIDxvcGVuc3NsL3N0b3JlLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC91aS5oPgogI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgotCiAjaW5jbHVkZSA8b3BlbnNzbC9vc3NsX3R5cC5oPgogI2luY2x1ZGUgPG9wZW5zc2wvc3ltaGFja3MuaD4KIAorI2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgorCiAjaWZkZWYgIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKICNlbmRpZgpAQCAtMTEzLDYgKzExMiw4IEBACiAjZGVmaW5lIEVOR0lORV9NRVRIT0RfQ0lQSEVSUwkJKHVuc2lnbmVkIGludCkweDAwNDAKICNkZWZpbmUgRU5HSU5FX01FVEhPRF9ESUdFU1RTCQkodW5zaWduZWQgaW50KTB4MDA4MAogI2RlZmluZSBFTkdJTkVfTUVUSE9EX1NUT1JFCQkodW5zaWduZWQgaW50KTB4MDEwMAorI2RlZmluZSBFTkdJTkVfTUVUSE9EX1BLRVlfTUVUSFMJKHVuc2lnbmVkIGludCkweDAyMDAKKyNkZWZpbmUgRU5HSU5FX01FVEhPRF9QS0VZX0FTTjFfTUVUSFMJKHVuc2lnbmVkIGludCkweDA0MDAKIC8qIE9idmlvdXMgYWxsLW9yLW5vdGhpbmcgY2FzZXMuICovCiAjZGVmaW5lIEVOR0lORV9NRVRIT0RfQUxMCQkodW5zaWduZWQgaW50KTB4RkZGRgogI2RlZmluZSBFTkdJTkVfTUVUSE9EX05PTkUJCSh1bnNpZ25lZCBpbnQpMHgwMDAwCkBAIC0yOTcsNyArMjk4LDggQEAKICAqIHBhcmFtZXRlciBpcyBub24tTlVMTCBpdCBpcyBzZXQgdG8gdGhlIHNpemUgb2YgdGhlIHJldHVybmVkIGFycmF5LiAqLwogdHlwZWRlZiBpbnQgKCpFTkdJTkVfQ0lQSEVSU19QVFIpKEVOR0lORSAqLCBjb25zdCBFVlBfQ0lQSEVSICoqLCBjb25zdCBpbnQgKiosIGludCk7CiB0eXBlZGVmIGludCAoKkVOR0lORV9ESUdFU1RTX1BUUikoRU5HSU5FICosIGNvbnN0IEVWUF9NRCAqKiwgY29uc3QgaW50ICoqLCBpbnQpOwotCit0eXBlZGVmIGludCAoKkVOR0lORV9QS0VZX01FVEhTX1BUUikoRU5HSU5FICosIEVWUF9QS0VZX01FVEhPRCAqKiwgY29uc3QgaW50ICoqLCBpbnQpOwordHlwZWRlZiBpbnQgKCpFTkdJTkVfUEtFWV9BU04xX01FVEhTX1BUUikoRU5HSU5FICosIEVWUF9QS0VZX0FTTjFfTUVUSE9EICoqLCBjb25zdCBpbnQgKiosIGludCk7CiAvKiBTVFJVQ1RVUkUgZnVuY3Rpb25zIC4uLiBhbGwgb2YgdGhlc2UgZnVuY3Rpb25zIGRlYWwgd2l0aCBwb2ludGVycyB0byBFTkdJTkUKICAqIHN0cnVjdHVyZXMgd2hlcmUgdGhlIHBvaW50ZXJzIGhhdmUgYSAic3RydWN0dXJhbCByZWZlcmVuY2UiLiBUaGlzIG1lYW5zIHRoYXQKICAqIHRoZWlyIHJlZmVyZW5jZSBpcyB0byBhbGxvd2VkIGFjY2VzcyB0byB0aGUgc3RydWN0dXJlIGJ1dCBpdCBkb2VzIG5vdCBpbXBseQpAQCAtMzI5LDIxICszMzEsMjAgQEAKIHZvaWQgRU5HSU5FX2xvYWRfYXRhbGxhKHZvaWQpOwogdm9pZCBFTkdJTkVfbG9hZF9jaGlsKHZvaWQpOwogdm9pZCBFTkdJTkVfbG9hZF9jc3dpZnQodm9pZCk7Ci0jaWZuZGVmIE9QRU5TU0xfTk9fR01QCi12b2lkIEVOR0lORV9sb2FkX2dtcCh2b2lkKTsKLSNlbmRpZgogdm9pZCBFTkdJTkVfbG9hZF9udXJvbih2b2lkKTsKIHZvaWQgRU5HSU5FX2xvYWRfc3VyZXdhcmUodm9pZCk7CiB2b2lkIEVOR0lORV9sb2FkX3Vic2VjKHZvaWQpOwordm9pZCBFTkdJTkVfbG9hZF9wYWRsb2NrKHZvaWQpOwordm9pZCBFTkdJTkVfbG9hZF9jYXBpKHZvaWQpOworI2lmbmRlZiBPUEVOU1NMX05PX0dNUAordm9pZCBFTkdJTkVfbG9hZF9nbXAodm9pZCk7CisjZW5kaWYKKyNpZm5kZWYgT1BFTlNTTF9OT19HT1NUCit2b2lkIEVOR0lORV9sb2FkX2dvc3Qodm9pZCk7CisjZW5kaWYKICNlbmRpZgogdm9pZCBFTkdJTkVfbG9hZF9jcnlwdG9kZXYodm9pZCk7Ci12b2lkIEVOR0lORV9sb2FkX3BhZGxvY2sodm9pZCk7CiB2b2lkIEVOR0lORV9sb2FkX2J1aWx0aW5fZW5naW5lcyh2b2lkKTsKLSNpZmRlZiBPUEVOU1NMX1NZU19XSU4zMgotI2lmbmRlZiBPUEVOU1NMX05PX0NBUElFTkcKLXZvaWQgRU5HSU5FX2xvYWRfY2FwaSh2b2lkKTsKLSNlbmRpZgotI2VuZGlmCiAKIC8qIEdldCBhbmQgc2V0IGdsb2JhbCBmbGFncyAoRU5HSU5FX1RBQkxFX0ZMQUdfKioqKSBmb3IgdGhlIGltcGxlbWVudGF0aW9uCiAgKiAicmVnaXN0cnkiIGhhbmRsaW5nLiAqLwpAQCAtMzk0LDYgKzM5NSwxNCBAQAogdm9pZCBFTkdJTkVfdW5yZWdpc3Rlcl9kaWdlc3RzKEVOR0lORSAqZSk7CiB2b2lkIEVOR0lORV9yZWdpc3Rlcl9hbGxfZGlnZXN0cyh2b2lkKTsKIAoraW50IEVOR0lORV9yZWdpc3Rlcl9wa2V5X21ldGhzKEVOR0lORSAqZSk7Cit2b2lkIEVOR0lORV91bnJlZ2lzdGVyX3BrZXlfbWV0aHMoRU5HSU5FICplKTsKK3ZvaWQgRU5HSU5FX3JlZ2lzdGVyX2FsbF9wa2V5X21ldGhzKHZvaWQpOworCitpbnQgRU5HSU5FX3JlZ2lzdGVyX3BrZXlfYXNuMV9tZXRocyhFTkdJTkUgKmUpOwordm9pZCBFTkdJTkVfdW5yZWdpc3Rlcl9wa2V5X2FzbjFfbWV0aHMoRU5HSU5FICplKTsKK3ZvaWQgRU5HSU5FX3JlZ2lzdGVyX2FsbF9wa2V5X2FzbjFfbWV0aHModm9pZCk7CisKIC8qIFRoZXNlIGZ1bmN0aW9ucyByZWdpc3RlciBhbGwgc3VwcG9ydCBmcm9tIHRoZSBhYm92ZSBjYXRlZ29yaWVzLiBOb3RlLCB1c2Ugb2YKICAqIHRoZXNlIGZ1bmN0aW9ucyBjYW4gcmVzdWx0IGluIHN0YXRpYyBsaW5rYWdlIG9mIGNvZGUgeW91ciBhcHBsaWNhdGlvbiBtYXkgbm90CiAgKiBuZWVkLiBJZiB5b3Ugb25seSBuZWVkIGEgc3Vic2V0IG9mIGZ1bmN0aW9uYWxpdHksIGNvbnNpZGVyIHVzaW5nIG1vcmUKQEAgLTQ3Myw2ICs0ODIsOCBAQAogCQkJCUVOR0lORV9TU0xfQ0xJRU5UX0NFUlRfUFRSIGxvYWRzc2xfZik7CiBpbnQgRU5HSU5FX3NldF9jaXBoZXJzKEVOR0lORSAqZSwgRU5HSU5FX0NJUEhFUlNfUFRSIGYpOwogaW50IEVOR0lORV9zZXRfZGlnZXN0cyhFTkdJTkUgKmUsIEVOR0lORV9ESUdFU1RTX1BUUiBmKTsKK2ludCBFTkdJTkVfc2V0X3BrZXlfbWV0aHMoRU5HSU5FICplLCBFTkdJTkVfUEtFWV9NRVRIU19QVFIgZik7CitpbnQgRU5HSU5FX3NldF9wa2V5X2FzbjFfbWV0aHMoRU5HSU5FICplLCBFTkdJTkVfUEtFWV9BU04xX01FVEhTX1BUUiBmKTsKIGludCBFTkdJTkVfc2V0X2ZsYWdzKEVOR0lORSAqZSwgaW50IGZsYWdzKTsKIGludCBFTkdJTkVfc2V0X2NtZF9kZWZucyhFTkdJTkUgKmUsIGNvbnN0IEVOR0lORV9DTURfREVGTiAqZGVmbnMpOwogLyogVGhlc2UgZnVuY3Rpb25zIGFsbG93IGNvbnRyb2wgb3ZlciBhbnkgcGVyLXN0cnVjdHVyZSBFTkdJTkUgZGF0YS4gKi8KQEAgLTUwOSw4ICs1MjAsMTYgQEAKIEVOR0lORV9TU0xfQ0xJRU5UX0NFUlRfUFRSIEVOR0lORV9nZXRfc3NsX2NsaWVudF9jZXJ0X2Z1bmN0aW9uKGNvbnN0IEVOR0lORSAqZSk7CiBFTkdJTkVfQ0lQSEVSU19QVFIgRU5HSU5FX2dldF9jaXBoZXJzKGNvbnN0IEVOR0lORSAqZSk7CiBFTkdJTkVfRElHRVNUU19QVFIgRU5HSU5FX2dldF9kaWdlc3RzKGNvbnN0IEVOR0lORSAqZSk7CitFTkdJTkVfUEtFWV9NRVRIU19QVFIgRU5HSU5FX2dldF9wa2V5X21ldGhzKGNvbnN0IEVOR0lORSAqZSk7CitFTkdJTkVfUEtFWV9BU04xX01FVEhTX1BUUiBFTkdJTkVfZ2V0X3BrZXlfYXNuMV9tZXRocyhjb25zdCBFTkdJTkUgKmUpOwogY29uc3QgRVZQX0NJUEhFUiAqRU5HSU5FX2dldF9jaXBoZXIoRU5HSU5FICplLCBpbnQgbmlkKTsKIGNvbnN0IEVWUF9NRCAqRU5HSU5FX2dldF9kaWdlc3QoRU5HSU5FICplLCBpbnQgbmlkKTsKK2NvbnN0IEVWUF9QS0VZX01FVEhPRCAqRU5HSU5FX2dldF9wa2V5X21ldGgoRU5HSU5FICplLCBpbnQgbmlkKTsKK2NvbnN0IEVWUF9QS0VZX0FTTjFfTUVUSE9EICpFTkdJTkVfZ2V0X3BrZXlfYXNuMV9tZXRoKEVOR0lORSAqZSwgaW50IG5pZCk7Citjb25zdCBFVlBfUEtFWV9BU04xX01FVEhPRCAqRU5HSU5FX2dldF9wa2V5X2FzbjFfbWV0aF9zdHIoRU5HSU5FICplLAorCQkJCQljb25zdCBjaGFyICpzdHIsIGludCBsZW4pOworY29uc3QgRVZQX1BLRVlfQVNOMV9NRVRIT0QgKkVOR0lORV9wa2V5X2FzbjFfZmluZF9zdHIoRU5HSU5FICoqcGUsCisJCQkJCWNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbik7CiBjb25zdCBFTkdJTkVfQ01EX0RFRk4gKkVOR0lORV9nZXRfY21kX2RlZm5zKGNvbnN0IEVOR0lORSAqZSk7CiBpbnQgRU5HSU5FX2dldF9mbGFncyhjb25zdCBFTkdJTkUgKmUpOwogCkBAIC01NjIsNiArNTgxLDggQEAKICAqIGNpcGhlcmluZyBvciBkaWdlc3RpbmcgY29ycmVzcG9uZGluZyB0byAibmlkIi4gKi8KIEVOR0lORSAqRU5HSU5FX2dldF9jaXBoZXJfZW5naW5lKGludCBuaWQpOwogRU5HSU5FICpFTkdJTkVfZ2V0X2RpZ2VzdF9lbmdpbmUoaW50IG5pZCk7CitFTkdJTkUgKkVOR0lORV9nZXRfcGtleV9tZXRoX2VuZ2luZShpbnQgbmlkKTsKK0VOR0lORSAqRU5HSU5FX2dldF9wa2V5X2FzbjFfbWV0aF9lbmdpbmUoaW50IG5pZCk7CiAKIC8qIFRoaXMgc2V0cyBhIG5ldyBkZWZhdWx0IEVOR0lORSBzdHJ1Y3R1cmUgZm9yIHBlcmZvcm1pbmcgUlNBCiAgKiBvcGVyYXRpb25zLiBJZiB0aGUgcmVzdWx0IGlzIG5vbi16ZXJvIChzdWNjZXNzKSB0aGVuIHRoZSBFTkdJTkUKQEAgLTU3Nyw2ICs1OTgsOCBAQAogaW50IEVOR0lORV9zZXRfZGVmYXVsdF9SQU5EKEVOR0lORSAqZSk7CiBpbnQgRU5HSU5FX3NldF9kZWZhdWx0X2NpcGhlcnMoRU5HSU5FICplKTsKIGludCBFTkdJTkVfc2V0X2RlZmF1bHRfZGlnZXN0cyhFTkdJTkUgKmUpOworaW50IEVOR0lORV9zZXRfZGVmYXVsdF9wa2V5X21ldGhzKEVOR0lORSAqZSk7CitpbnQgRU5HSU5FX3NldF9kZWZhdWx0X3BrZXlfYXNuMV9tZXRocyhFTkdJTkUgKmUpOwogCiAvKiBUaGUgY29tYmluYXRpb24gInNldCIgLSB0aGUgZmxhZ3MgYXJlIGJpdHdpc2UgIk9SImQgZnJvbSB0aGUKICAqIEVOR0lORV9NRVRIT0RfKioqIGRlZmluZXMgYWJvdmUuIEFzIHdpdGggdGhlICJFTkdJTkVfcmVnaXN0ZXJfY29tcGxldGUoKSIKQEAgLTcwNSw3ICs3MjgsNyBAQAogICogdmFsdWVzLiAqLwogdm9pZCAqRU5HSU5FX2dldF9zdGF0aWNfc3RhdGUodm9pZCk7CiAKLSNpZiBkZWZpbmVkKF9fT3BlbkJTRF9fKSB8fCBkZWZpbmVkKF9fRnJlZUJTRF9fKQorI2lmIGRlZmluZWQoX19PcGVuQlNEX18pIHx8IGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoSEFWRV9DUllQVE9ERVYpCiB2b2lkIEVOR0lORV9zZXR1cF9ic2RfY3J5cHRvZGV2KHZvaWQpOwogI2VuZGlmCiAKQEAgLTczNCwxMyArNzU3LDE1IEBACiAjZGVmaW5lIEVOR0lORV9GX0VOR0lORV9HRVRfREVGQVVMVF9UWVBFCQkgMTc3CiAjZGVmaW5lIEVOR0lORV9GX0VOR0lORV9HRVRfRElHRVNUCQkJIDE4NgogI2RlZmluZSBFTkdJTkVfRl9FTkdJTkVfR0VUX05FWFQJCQkgMTE1CisjZGVmaW5lIEVOR0lORV9GX0VOR0lORV9HRVRfUEtFWV9BU04xX01FVEgJCSAxOTMKKyNkZWZpbmUgRU5HSU5FX0ZfRU5HSU5FX0dFVF9QS0VZX01FVEgJCQkgMTkyCiAjZGVmaW5lIEVOR0lORV9GX0VOR0lORV9HRVRfUFJFVgkJCSAxMTYKICNkZWZpbmUgRU5HSU5FX0ZfRU5HSU5FX0lOSVQJCQkJIDExOQogI2RlZmluZSBFTkdJTkVfRl9FTkdJTkVfTElTVF9BREQJCQkgMTIwCiAjZGVmaW5lIEVOR0lORV9GX0VOR0lORV9MSVNUX1JFTU9WRQkJCSAxMjEKICNkZWZpbmUgRU5HSU5FX0ZfRU5HSU5FX0xPQURfUFJJVkFURV9LRVkJCSAxNTAKICNkZWZpbmUgRU5HSU5FX0ZfRU5HSU5FX0xPQURfUFVCTElDX0tFWQkJCSAxNTEKLSNkZWZpbmUgRU5HSU5FX0ZfRU5HSU5FX0xPQURfU1NMX0NMSUVOVF9DRVJUCQkgMTkyCisjZGVmaW5lIEVOR0lORV9GX0VOR0lORV9MT0FEX1NTTF9DTElFTlRfQ0VSVAkJIDE5NAogI2RlZmluZSBFTkdJTkVfRl9FTkdJTkVfTkVXCQkJCSAxMjIKICNkZWZpbmUgRU5HSU5FX0ZfRU5HSU5FX1JFTU9WRQkJCQkgMTIzCiAjZGVmaW5lIEVOR0lORV9GX0VOR0lORV9TRVRfREVGQVVMVF9TVFJJTkcJCSAxODkKQEAgLTc2OSw3ICs3OTQsNyBAQAogI2RlZmluZSBFTkdJTkVfUl9EU09fRkFJTFVSRQkJCQkgMTA0CiAjZGVmaW5lIEVOR0lORV9SX0RTT19OT1RfRk9VTkQJCQkJIDEzMgogI2RlZmluZSBFTkdJTkVfUl9FTkdJTkVTX1NFQ1RJT05fRVJST1IJCQkgMTQ4Ci0jZGVmaW5lIEVOR0lORV9SX0VOR0lORV9DT05GSUdVUkFUSU9OX0VSUk9SCQkgMTAxCisjZGVmaW5lIEVOR0lORV9SX0VOR0lORV9DT05GSUdVUkFUSU9OX0VSUk9SCQkgMTAyCiAjZGVmaW5lIEVOR0lORV9SX0VOR0lORV9JU19OT1RfSU5fTElTVAkJCSAxMDUKICNkZWZpbmUgRU5HSU5FX1JfRU5HSU5FX1NFQ1RJT05fRVJST1IJCQkgMTQ5CiAjZGVmaW5lIEVOR0lORV9SX0ZBSUxFRF9MT0FESU5HX1BSSVZBVEVfS0VZCQkgMTI4CkBAIC03OTYsNiArODIxLDcgQEAKICNkZWZpbmUgRU5HSU5FX1JfUlNBX05PVF9JTVBMRU1FTlRFRAkJCSAxNDEKICNkZWZpbmUgRU5HSU5FX1JfVU5JTVBMRU1FTlRFRF9DSVBIRVIJCQkgMTQ2CiAjZGVmaW5lIEVOR0lORV9SX1VOSU1QTEVNRU5URURfRElHRVNUCQkJIDE0NworI2RlZmluZSBFTkdJTkVfUl9VTklNUExFTUVOVEVEX1BVQkxJQ19LRVlfTUVUSE9ECSAxMDEKICNkZWZpbmUgRU5HSU5FX1JfVkVSU0lPTl9JTkNPTVBBVElCSUxJVFkJCSAxNDUKIAogI2lmZGVmICBfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVuc3NsL2Vyci5oIGIvaW5jbHVkZS9vcGVuc3NsL2Vyci5oCmluZGV4IGRjYWM0MTUuLmI5ZjhjMTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorKysgYi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKQEAgLTU1LDYgKzU1LDU5IEBACiAgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCiAgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQogICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisgKgorICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorICoKKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorICoKKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKyAqICAgIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCisgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAqCisgKi8KIAogI2lmbmRlZiBIRUFERVJfRVJSX0gKICNkZWZpbmUgSEVBREVSX0VSUl9ICkBAIC05NCw3ICsxNDcsNyBAQAogI2RlZmluZSBFUlJfTlVNX0VSUk9SUwkxNgogdHlwZWRlZiBzdHJ1Y3QgZXJyX3N0YXRlX3N0CiAJewotCXVuc2lnbmVkIGxvbmcgcGlkOworCUNSWVBUT19USFJFQURJRCB0aWQ7CiAJaW50IGVycl9mbGFnc1tFUlJfTlVNX0VSUk9SU107CiAJdW5zaWduZWQgbG9uZyBlcnJfYnVmZmVyW0VSUl9OVU1fRVJST1JTXTsKIAljaGFyICplcnJfZGF0YVtFUlJfTlVNX0VSUk9SU107CkBAIC0xNDIsNyArMTk1LDkgQEAKICNkZWZpbmUgRVJSX0xJQl9TVE9SRSAgICAgICAgICAgNDQKICNkZWZpbmUgRVJSX0xJQl9GSVBTCQk0NQogI2RlZmluZSBFUlJfTElCX0NNUwkJNDYKLSNkZWZpbmUgRVJSX0xJQl9KUEFLRQkJNDcKKyNkZWZpbmUgRVJSX0xJQl9UUwkJNDcKKyNkZWZpbmUgRVJSX0xJQl9ITUFDCQk0OAorI2RlZmluZSBFUlJfTElCX0pQQUtFCQk0OQogCiAjZGVmaW5lIEVSUl9MSUJfVVNFUgkJMTI4CiAKQEAgLTE3Niw2ICsyMzEsOCBAQAogI2RlZmluZSBTVE9SRWVycihmLHIpIEVSUl9QVVRfZXJyb3IoRVJSX0xJQl9TVE9SRSwoZiksKHIpLF9fRklMRV9fLF9fTElORV9fKQogI2RlZmluZSBGSVBTZXJyKGYscikgRVJSX1BVVF9lcnJvcihFUlJfTElCX0ZJUFMsKGYpLChyKSxfX0ZJTEVfXyxfX0xJTkVfXykKICNkZWZpbmUgQ01TZXJyKGYscikgRVJSX1BVVF9lcnJvcihFUlJfTElCX0NNUywoZiksKHIpLF9fRklMRV9fLF9fTElORV9fKQorI2RlZmluZSBUU2VycihmLHIpIEVSUl9QVVRfZXJyb3IoRVJSX0xJQl9UUywoZiksKHIpLF9fRklMRV9fLF9fTElORV9fKQorI2RlZmluZSBITUFDZXJyKGYscikgRVJSX1BVVF9lcnJvcihFUlJfTElCX0hNQUMsKGYpLChyKSxfX0ZJTEVfXyxfX0xJTkVfXykKICNkZWZpbmUgSlBBS0VlcnIoZixyKSBFUlJfUFVUX2Vycm9yKEVSUl9MSUJfSlBBS0UsKGYpLChyKSxfX0ZJTEVfXyxfX0xJTkVfXykKIAogLyogQm9ybGFuZCBDIHNlZW1zIHRvbyBzdHVwaWQgdG8gYmUgYWJsZSB0byBzaGlmdCBhbmQgZG8gbG9uZ3MgaW4KQEAgLTIzMiw2ICsyODksNyBAQAogI2RlZmluZSBFUlJfUl9FQ0RTQV9MSUIgRVJSX0xJQl9FQ0RTQQkgLyogNDIgKi8KICNkZWZpbmUgRVJSX1JfRUNESF9MSUIgIEVSUl9MSUJfRUNESAkgLyogNDMgKi8KICNkZWZpbmUgRVJSX1JfU1RPUkVfTElCIEVSUl9MSUJfU1RPUkUgICAgLyogNDQgKi8KKyNkZWZpbmUgRVJSX1JfVFNfTElCCUVSUl9MSUJfVFMgICAgICAgLyogNDUgKi8KIAogI2RlZmluZSBFUlJfUl9ORVNURURfQVNOMV9FUlJPUgkJCTU4CiAjZGVmaW5lIEVSUl9SX0JBRF9BU04xX09CSkVDVF9IRUFERVIJCTU5CkBAIC0yOTQsMTMgKzM1MiwxNiBAQAogdm9pZCBFUlJfbG9hZF9jcnlwdG9fc3RyaW5ncyh2b2lkKTsKIHZvaWQgRVJSX2ZyZWVfc3RyaW5ncyh2b2lkKTsKIAordm9pZCBFUlJfcmVtb3ZlX3RocmVhZF9zdGF0ZShjb25zdCBDUllQVE9fVEhSRUFESUQgKnRpZCk7CisjaWZuZGVmIE9QRU5TU0xfTk9fREVQUkVDQVRFRAogdm9pZCBFUlJfcmVtb3ZlX3N0YXRlKHVuc2lnbmVkIGxvbmcgcGlkKTsgLyogaWYgemVybyB3ZSBsb29rIGl0IHVwICovCisjZW5kaWYKIEVSUl9TVEFURSAqRVJSX2dldF9zdGF0ZSh2b2lkKTsKIAogI2lmbmRlZiBPUEVOU1NMX05PX0xIQVNICi1MSEFTSCAqRVJSX2dldF9zdHJpbmdfdGFibGUodm9pZCk7Ci1MSEFTSCAqRVJSX2dldF9lcnJfc3RhdGVfdGFibGUodm9pZCk7Ci12b2lkIEVSUl9yZWxlYXNlX2Vycl9zdGF0ZV90YWJsZShMSEFTSCAqKmhhc2gpOworTEhBU0hfT0YoRVJSX1NUUklOR19EQVRBKSAqRVJSX2dldF9zdHJpbmdfdGFibGUodm9pZCk7CitMSEFTSF9PRihFUlJfU1RBVEUpICpFUlJfZ2V0X2Vycl9zdGF0ZV90YWJsZSh2b2lkKTsKK3ZvaWQgRVJSX3JlbGVhc2VfZXJyX3N0YXRlX3RhYmxlKExIQVNIX09GKEVSUl9TVEFURSkgKipoYXNoKTsKICNlbmRpZgogCiBpbnQgRVJSX2dldF9uZXh0X2Vycm9yX2xpYnJhcnkodm9pZCk7CkBAIC0zMDgsMTIgKzM2OSw2IEBACiBpbnQgRVJSX3NldF9tYXJrKHZvaWQpOwogaW50IEVSUl9wb3BfdG9fbWFyayh2b2lkKTsKIAotI2lmZGVmIE9QRU5TU0xfRklQUwotdm9pZCBpbnRfRVJSX3NldF9zdGF0ZV9mdW5jKEVSUl9TVEFURSAqKCpnZXRfZnVuYykodm9pZCksCi0JCQkJdm9pZCAoKnJlbW92ZV9mdW5jKSh1bnNpZ25lZCBsb25nIHBpZCkpOwotdm9pZCBpbnRfRVJSX2xpYl9pbml0KHZvaWQpOwotI2VuZGlmCi0KIC8qIEFscmVhZHkgZGVmaW5lZCBpbiBvc3NsX3R5cC5oICovCiAvKiB0eXBlZGVmIHN0cnVjdCBzdF9FUlJfRk5TIEVSUl9GTlM7ICovCiAvKiBBbiBhcHBsaWNhdGlvbiBjYW4gdXNlIHRoaXMgZnVuY3Rpb24gYW5kIHByb3ZpZGUgdGhlIHJldHVybiB2YWx1ZSB0byBsb2FkZWQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCBiL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAppbmRleCA3OWMwOTcxLi45Zjk3OTVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL29wZW5zc2wvZXZwLmgKKysrIGIvaW5jbHVkZS9vcGVuc3NsL2V2cC5oCkBAIC03NSwxMCArNzUsNiBAQAogI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+CiAjZW5kaWYKIAotI2lmZGVmIE9QRU5TU0xfRklQUwotI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotI2VuZGlmCi0KIC8qCiAjZGVmaW5lIEVWUF9SQzJfS0VZX1NJWkUJCTE2CiAjZGVmaW5lIEVWUF9SQzRfS0VZX1NJWkUJCTE2CkBAIC0xMTksNiArMTE1LDcgQEAKICNkZWZpbmUgRVZQX1BLRVlfRFNBNAlOSURfZHNhV2l0aFNIQTFfMgogI2RlZmluZSBFVlBfUEtFWV9ESAlOSURfZGhLZXlBZ3JlZW1lbnQKICNkZWZpbmUgRVZQX1BLRVlfRUMJTklEX1g5XzYyX2lkX2VjUHVibGljS2V5CisjZGVmaW5lIEVWUF9QS0VZX0hNQUMJTklEX2htYWMKIAogI2lmZGVmCV9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKQEAgLTEzMiw2ICsxMjksOCBAQAogCWludCB0eXBlOwogCWludCBzYXZlX3R5cGU7CiAJaW50IHJlZmVyZW5jZXM7CisJY29uc3QgRVZQX1BLRVlfQVNOMV9NRVRIT0QgKmFtZXRoOworCUVOR0lORSAqZW5naW5lOwogCXVuaW9uCXsKIAkJY2hhciAqcHRyOwogI2lmbmRlZiBPUEVOU1NMX05PX1JTQQpAQCAtMTU2LDczICsxNTUsNiBAQAogI2RlZmluZSBFVlBfUEtFWV9NT19FTkNSWVBUCTB4MDAwNAogI2RlZmluZSBFVlBfUEtFWV9NT19ERUNSWVBUCTB4MDAwOAogCi0jaWYgMAotLyogVGhpcyBzdHJ1Y3R1cmUgaXMgcmVxdWlyZWQgdG8gdGllIHRoZSBtZXNzYWdlIGRpZ2VzdCBhbmQgc2lnbmluZyB0b2dldGhlci4KLSAqIFRoZSBsb29rdXAgY2FuIGJlIGRvbmUgYnkgbWQvcGtleV9tZXRob2QsIG9pZCwgb2lkL3BrZXlfbWV0aG9kLCBvcgotICogb2lkLCBtZCBhbmQgcGtleS4KLSAqIFRoaXMgaXMgcmVxdWlyZWQgYmVjYXVzZSBmb3IgdmFyaW91cyBzbWFydC1jYXJkIHBlcmZvcm0gdGhlIGRpZ2VzdCBhbmQKLSAqIHNpZ25pbmcvdmVyaWZpY2F0aW9uIG9uLWJvYXJkLiAgVG8gaGFuZGxlIHRoaXMgY2FzZSwgdGhlIHNwZWNpZmljCi0gKiBFVlBfTUQgYW5kIEVWUF9QS0VZX01FVEhPRHMgbmVlZCB0byBiZSBjbG9zZWx5IGFzc29jaWF0ZWQuCi0gKiBXaGVuIGEgUEtFWSBpcyBjcmVhdGVkLCBpdCB3aWxsIGhhdmUgYSBFVlBfUEtFWV9NRVRIT0QgYXNzb2NpYXRlZCB3aXRoIGl0LgotICogVGhpcyBjYW4gZWl0aGVyIGJlIHNvZnR3YXJlIG9yIGEgdG9rZW4gdG8gcHJvdmlkZSB0aGUgcmVxdWlyZWQgbG93IGxldmVsCi0gKiByb3V0aW5lcy4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgZXZwX3BrZXlfbWRfc3QKLQl7Ci0JaW50IG9pZDsKLQlFVlBfTUQgKm1kOwotCUVWUF9QS0VZX01FVEhPRCAqcGtleTsKLQl9IEVWUF9QS0VZX01EOwotCi0jZGVmaW5lIEVWUF9yc2FfbWQyKCkgXAotCQlFVlBfUEtFWV9NRF9hZGQoTklEX21kMldpdGhSU0FFbmNyeXB0aW9uLFwKLQkJCUVWUF9yc2FfcGtjczEoKSxFVlBfbWQyKCkpCi0jZGVmaW5lIEVWUF9yc2FfbWQ1KCkgXAotCQlFVlBfUEtFWV9NRF9hZGQoTklEX21kNVdpdGhSU0FFbmNyeXB0aW9uLFwKLQkJCUVWUF9yc2FfcGtjczEoKSxFVlBfbWQ1KCkpCi0jZGVmaW5lIEVWUF9yc2Ffc2hhMCgpIFwKLQkJRVZQX1BLRVlfTURfYWRkKE5JRF9zaGFXaXRoUlNBRW5jcnlwdGlvbixcCi0JCQlFVlBfcnNhX3BrY3MxKCksRVZQX3NoYSgpKQotI2RlZmluZSBFVlBfcnNhX3NoYTEoKSBcCi0JCUVWUF9QS0VZX01EX2FkZChOSURfc2hhMVdpdGhSU0FFbmNyeXB0aW9uLFwKLQkJCUVWUF9yc2FfcGtjczEoKSxFVlBfc2hhMSgpKQotI2RlZmluZSBFVlBfcnNhX3JpcGVtZDE2MCgpIFwKLQkJRVZQX1BLRVlfTURfYWRkKE5JRF9yaXBlbWQxNjBXaXRoUlNBLFwKLQkJCUVWUF9yc2FfcGtjczEoKSxFVlBfcmlwZW1kMTYwKCkpCi0jZGVmaW5lIEVWUF9yc2FfbWRjMigpIFwKLQkJRVZQX1BLRVlfTURfYWRkKE5JRF9tZGMyV2l0aFJTQSxcCi0JCQlFVlBfcnNhX29jdGV0X3N0cmluZygpLEVWUF9tZGMyKCkpCi0jZGVmaW5lIEVWUF9kc2Ffc2hhKCkgXAotCQlFVlBfUEtFWV9NRF9hZGQoTklEX2RzYVdpdGhTSEEsXAotCQkJRVZQX2RzYSgpLEVWUF9zaGEoKSkKLSNkZWZpbmUgRVZQX2RzYV9zaGExKCkgXAotCQlFVlBfUEtFWV9NRF9hZGQoTklEX2RzYVdpdGhTSEExLFwKLQkJCUVWUF9kc2EoKSxFVlBfc2hhMSgpKQotCi10eXBlZGVmIHN0cnVjdCBldnBfcGtleV9tZXRob2Rfc3QKLQl7Ci0JY2hhciAqbmFtZTsKLQlpbnQgZmxhZ3M7Ci0JaW50IHR5cGU7CQkvKiBSU0EsIERTQSwgYW4gU1NMZWF5IHNwZWNpZmljIGNvbnN0YW50ICovCi0JaW50IG9pZDsJCS8qIEZvciB0aGUgcHViLWtleSB0eXBlICovCi0JaW50IGVuY3J5cHRfb2lkOwkvKiBwdWIvcHJpdiBrZXkgZW5jcnlwdGlvbiAqLwotCi0JaW50ICgqc2lnbikoKTsKLQlpbnQgKCp2ZXJpZnkpKCk7Ci0Jc3RydWN0CXsKLQkJaW50ICgqc2V0KSgpOwkvKiBnZXQgYW5kL29yIHNldCB0aGUgdW5kZXJseWluZyB0eXBlICovCi0JCWludCAoKmdldCkoKTsKLQkJaW50ICgqZW5jcnlwdCkoKTsKLQkJaW50ICgqZGVjcnlwdCkoKTsKLQkJaW50ICgqaTJkKSgpOwotCQlpbnQgKCpkMmkpKCk7Ci0JCWludCAoKmR1cCkoKTsKLQkJfSBwdWIscHJpdjsKLQlpbnQgKCpzZXRfYXNuMV9wYXJhbWV0ZXJzKSgpOwotCWludCAoKmdldF9hc24xX3BhcmFtZXRlcnMpKCk7Ci0JfSBFVlBfUEtFWV9NRVRIT0Q7Ci0jZW5kaWYKLQogI2lmbmRlZiBFVlBfTUQKIHN0cnVjdCBlbnZfbWRfc3QKIAl7CkBAIC0yNDUsNiArMTc3LDggQEAKIAlpbnQgcmVxdWlyZWRfcGtleV90eXBlWzVdOyAvKkVWUF9QS0VZX3h4eCAqLwogCWludCBibG9ja19zaXplOwogCWludCBjdHhfc2l6ZTsgLyogaG93IGJpZyBkb2VzIHRoZSBjdHgtPm1kX2RhdGEgbmVlZCB0byBiZSAqLworCS8qIGNvbnRyb2wgZnVuY3Rpb24gKi8KKwlpbnQgKCptZF9jdHJsKShFVlBfTURfQ1RYICpjdHgsIGludCBjbWQsIGludCBwMSwgdm9pZCAqcDIpOwogCX0gLyogRVZQX01EICovOwogCiB0eXBlZGVmIGludCBldnBfc2lnbl9tZXRob2QoaW50IHR5cGUsY29uc3QgdW5zaWduZWQgY2hhciAqbSwKQEAgLTI1NCwxOCArMTg4LDQyIEBACiAJCQkgICAgdW5zaWduZWQgaW50IG1fbGVuZ3RoLGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZ2J1ZiwKIAkJCSAgICB1bnNpZ25lZCBpbnQgc2lnbGVuLCB2b2lkICprZXkpOwogCi10eXBlZGVmIHN0cnVjdAotCXsKLQlFVlBfTURfQ1RYICptY3R4OwotCXZvaWQgKmtleTsKLQl9IEVWUF9NRF9TVkNUWDsKLQogI2RlZmluZSBFVlBfTURfRkxBR19PTkVTSE9UCTB4MDAwMSAvKiBkaWdlc3QgY2FuIG9ubHkgaGFuZGxlIGEgc2luZ2xlCiAJCQkJCSogYmxvY2sgKi8KIAotI2RlZmluZSBFVlBfTURfRkxBR19GSVBTCTB4MDQwMCAvKiBOb3RlIGlmIHN1aXRhYmxlIGZvciB1c2UgaW4gRklQUyBtb2RlICovCisjZGVmaW5lIEVWUF9NRF9GTEFHX1BLRVlfRElHRVNUCTB4MDAwMiAvKiBkaWdlc3QgaXMgYSAiY2xvbmUiIGRpZ2VzdCB1c2VkCisJCQkJCSogd2hpY2ggaXMgYSBjb3B5IG9mIGFuIGV4aXN0aW5nCisJCQkJCSogb25lIGZvciBhIHNwZWNpZmljIHB1YmxpYyBrZXkgdHlwZS4KKwkJCQkJKiBFVlBfZHNzMSgpIGV0YyAqLwogCi0jZGVmaW5lIEVWUF9NRF9GTEFHX1NWQ1RYCTB4MDgwMCAvKiBwYXNzIEVWUF9NRF9TVkNUWCB0byBzaWduL3ZlcmlmeSAqLworLyogRGlnZXN0IHVzZXMgRVZQX1BLRVlfTUVUSE9EIGZvciBzaWduaW5nIGluc3RlYWQgb2YgTUQgc3BlY2lmaWMgc2lnbmluZyAqLworCisjZGVmaW5lIEVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRQkweDAwMDQKKworLyogRGlnZXN0QWxnb3JpdGhtSWRlbnRpZmllciBmbGFncy4uLiAqLworCisjZGVmaW5lIEVWUF9NRF9GTEFHX0RJR0FMR0lEX01BU0sJCTB4MDAxOAorCisvKiBOVUxMIG9yIGFic2VudCBwYXJhbWV0ZXIgYWNjZXB0ZWQuIFVzZSBOVUxMICovCisKKyNkZWZpbmUgRVZQX01EX0ZMQUdfRElHQUxHSURfTlVMTAkJMHgwMDAwCisKKy8qIE5VTEwgb3IgYWJzZW50IHBhcmFtZXRlciBhY2NlcHRlZC4gVXNlIE5VTEwgZm9yIFBLQ1MjMSBvdGhlcndpc2UgYWJzZW50ICovCisKKyNkZWZpbmUgRVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5UCQkweDAwMDgKKworLyogQ3VzdG9tIGhhbmRsaW5nIHZpYSBjdHJsICovCisKKyNkZWZpbmUgRVZQX01EX0ZMQUdfRElHQUxHSURfQ1VTVE9NCQkweDAwMTgKKworLyogRGlnZXN0IGN0cmxzICovCisKKyNkZWZpbmUJRVZQX01EX0NUUkxfRElHQUxHSUQJCQkweDEKKyNkZWZpbmUJRVZQX01EX0NUUkxfTUlDQUxHCQkJMHgyCisKKy8qIE1pbmltdW0gQWxnb3JpdGhtIHNwZWNpZmljIGN0cmwgdmFsdWUgKi8KKworI2RlZmluZQlFVlBfTURfQ1RSTF9BTEdfQ1RSTAkJCTB4MTAwMAogCiAjZGVmaW5lIEVWUF9QS0VZX05VTExfbWV0aG9kCU5VTEwsTlVMTCx7MCwwLDAsMH0KIApAQCAtMzA3LDYgKzI2NSwxMCBAQAogCUVOR0lORSAqZW5naW5lOyAvKiBmdW5jdGlvbmFsIHJlZmVyZW5jZSBpZiAnZGlnZXN0JyBpcyBFTkdJTkUtcHJvdmlkZWQgKi8KIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXZvaWQgKm1kX2RhdGE7CisJLyogUHVibGljIGtleSBjb250ZXh0IGZvciBzaWduL3ZlcmlmeSAqLworCUVWUF9QS0VZX0NUWCAqcGN0eDsKKwkvKiBVcGRhdGUgZnVuY3Rpb246IHVzdWFsbHkgY29waWVkIGZyb20gRVZQX01EICovCisJaW50ICgqdXBkYXRlKShFVlBfTURfQ1RYICpjdHgsY29uc3Qgdm9pZCAqZGF0YSxzaXplX3QgY291bnQpOwogCX0gLyogRVZQX01EX0NUWCAqLzsKIAogLyogdmFsdWVzIGZvciBFVlBfTURfQ1RYIGZsYWdzICovCkBAIC0zMTcsMTcgKzI3OSwyMyBAQAogCQkJCQkJKiBjbGVhbmVkICovCiAjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19SRVVTRQkJMHgwMDA0IC8qIERvbid0IGZyZWUgdXAgY3R4LT5tZF9kYXRhCiAJCQkJCQkqIGluIEVWUF9NRF9DVFhfY2xlYW51cCAqLworLyogRklQUyBhbmQgcGFkIG9wdGlvbnMgYXJlIGlnbm9yZWQgaW4gMS4wLjAsIGRlZmluaXRpb25zIGFyZSBoZXJlCisgKiBzbyB3ZSBkb24ndCBhY2NpZGVudGFsbHkgcmV1c2UgdGhlIHZhbHVlcyBmb3Igb3RoZXIgcHVycG9zZXMuCisgKi8KKwogI2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cJMHgwMDA4CS8qIEFsbG93IHVzZSBvZiBub24gRklQUyBkaWdlc3QKIAkJCQkJCSAqIGluIEZJUFMgbW9kZSAqLwogCisvKiBUaGUgZm9sbG93aW5nIFBBRCBvcHRpb25zIGFyZSBhbHNvIGN1cnJlbnRseSBpZ25vcmVkIGluIDEuMC4wLCBkaWdlc3QKKyAqIHBhcmFtZXRlcnMgYXJlIGhhbmRsZWQgdGhyb3VnaCBFVlBfRGlnZXN0U2lnbiooKSBhbmQgRVZQX0RpZ2VzdFZlcmlmeSooKQorICogaW5zdGVhZC4KKyAqLwogI2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfUEFEX01BU0sJMHhGMAkvKiBSU0EgbW9kZSB0byB1c2UgKi8KICNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMQkweDAwCS8qIFBLQ1MjMSB2MS41IG1vZGUgKi8KICNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxCTB4MTAJLyogWDkuMzEgbW9kZSAqLwogI2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUwkJMHgyMAkvKiBQU1MgbW9kZSAqLwotI2RlZmluZSBNX0VWUF9NRF9DVFhfRkxBR19QU1NfU0FMVChjdHgpIFwKLQkJKChjdHgtPmZsYWdzPj4xNikgJjB4RkZGRikgLyogc2VlZCBsZW5ndGggKi8KLSNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX1BTU19NRExFTgkweEZGRkYJLyogc2FsdCBsZW4gc2FtZSBhcyBkaWdlc3QgKi8KLSNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX1BTU19NUkVDCTB4RkZGRQkvKiBzYWx0IG1heCBvciBhdXRvIHJlY292ZXJlZCAqLworCisjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19OT19JTklUCQkweDAxMDAgLyogRG9uJ3QgaW5pdGlhbGl6ZSBtZF9kYXRhICovCiAKIHN0cnVjdCBldnBfY2lwaGVyX3N0CiAJewpAQCAtMzM5LDcgKzMwNyw3IEBACiAJaW50ICgqaW5pdCkoRVZQX0NJUEhFUl9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAogCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsIGludCBlbmMpOwkvKiBpbml0IGtleSAqLwogCWludCAoKmRvX2NpcGhlcikoRVZQX0NJUEhFUl9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LAotCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBpbnQgaW5sKTsvKiBlbmNyeXB0L2RlY3J5cHQgZGF0YSAqLworCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgaW5sKTsvKiBlbmNyeXB0L2RlY3J5cHQgZGF0YSAqLwogCWludCAoKmNsZWFudXApKEVWUF9DSVBIRVJfQ1RYICopOyAvKiBjbGVhbnVwIGN0eCAqLwogCWludCBjdHhfc2l6ZTsJCS8qIGhvdyBiaWcgY3R4LT5jaXBoZXJfZGF0YSBuZWVkcyB0byBiZSAqLwogCWludCAoKnNldF9hc24xX3BhcmFtZXRlcnMpKEVWUF9DSVBIRVJfQ1RYICosIEFTTjFfVFlQRSAqKTsgLyogUG9wdWxhdGUgYSBBU04xX1RZUEUgd2l0aCBwYXJhbWV0ZXJzICovCkBAIC0zNTcsNyArMzI1LDcgQEAKICNkZWZpbmUJCUVWUF9DSVBIX0NCQ19NT0RFCQkweDIKICNkZWZpbmUJCUVWUF9DSVBIX0NGQl9NT0RFCQkweDMKICNkZWZpbmUJCUVWUF9DSVBIX09GQl9NT0RFCQkweDQKLSNkZWZpbmUgCUVWUF9DSVBIX01PREUJCQkweDcKKyNkZWZpbmUgCUVWUF9DSVBIX01PREUJCQkweEYwMDA3CiAvKiBTZXQgaWYgdmFyaWFibGUgbGVuZ3RoIGNpcGhlciAqLwogI2RlZmluZSAJRVZQX0NJUEhfVkFSSUFCTEVfTEVOR1RICTB4OAogLyogU2V0IGlmIHRoZSBpdiBoYW5kbGluZyBzaG91bGQgYmUgZG9uZSBieSB0aGUgY2lwaGVyIGl0c2VsZiAqLwpAQCAtMzcyLDEwICszNDAsOCBAQAogI2RlZmluZSAJRVZQX0NJUEhfTk9fUEFERElORwkJMHgxMDAKIC8qIGNpcGhlciBoYW5kbGVzIHJhbmRvbSBrZXkgZ2VuZXJhdGlvbiAqLwogI2RlZmluZSAJRVZQX0NJUEhfUkFORF9LRVkJCTB4MjAwCi0vKiBOb3RlIGlmIHN1aXRhYmxlIGZvciB1c2UgaW4gRklQUyBtb2RlICovCi0jZGVmaW5lCQlFVlBfQ0lQSF9GTEFHX0ZJUFMJCTB4NDAwCi0vKiBBbGxvdyBub24gRklQUyBjaXBoZXIgaW4gRklQUyBtb2RlICovCi0jZGVmaW5lCQlFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XCTB4ODAwCisvKiBjaXBoZXIgaGFzIGl0cyBvd24gYWRkaXRpb25hbCBjb3B5aW5nIGxvZ2ljICovCisjZGVmaW5lIAlFVlBfQ0lQSF9DVVNUT01fQ09QWQkJMHg0MDAKIC8qIEFsbG93IHVzZSBkZWZhdWx0IEFTTjEgZ2V0L3NldCBpdiAqLwogI2RlZmluZQkJRVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEJMHgxMDAwCiAvKiBCdWZmZXIgbGVuZ3RoIGluIGJpdHMgbm90IGJ5dGVzOiBDRkIxIG1vZGUgb25seSAqLwpAQCAtMzkwLDYgKzM1Niw4IEBACiAjZGVmaW5lIAlFVlBfQ1RSTF9HRVRfUkM1X1JPVU5EUwkJMHg0CiAjZGVmaW5lIAlFVlBfQ1RSTF9TRVRfUkM1X1JPVU5EUwkJMHg1CiAjZGVmaW5lIAlFVlBfQ1RSTF9SQU5EX0tFWQkJMHg2CisjZGVmaW5lIAlFVlBfQ1RSTF9QQkVfUFJGX05JRAkJMHg3CisjZGVmaW5lIAlFVlBfQ1RSTF9DT1BZCQkJMHg4CiAKIHR5cGVkZWYgc3RydWN0IGV2cF9jaXBoZXJfaW5mb19zdAogCXsKQEAgLTQ2MiwyNiArNDMwLDE1IEBACiAjZGVmaW5lIEVWUF9nZXRfY2lwaGVyYnluaWQoYSkgRVZQX2dldF9jaXBoZXJieW5hbWUoT0JKX25pZDJzbihhKSkKICNkZWZpbmUgRVZQX2dldF9jaXBoZXJieW9iaihhKSBFVlBfZ2V0X2NpcGhlcmJ5bmlkKE9CSl9vYmoybmlkKGEpKQogCi0vKiBNYWNyb3MgdG8gcmVkdWNlIEZJUFMgZGVwZW5kZW5jaWVzOiBkbyBOT1QgdXNlIGluIGFwcGxpY2F0aW9ucyAqLwotI2RlZmluZSBNX0VWUF9NRF9zaXplKGUpCQkoKGUpLT5tZF9zaXplKQotI2RlZmluZSBNX0VWUF9NRF9ibG9ja19zaXplKGUpCQkoKGUpLT5ibG9ja19zaXplKQotI2RlZmluZSBNX0VWUF9NRF9DVFhfc2V0X2ZsYWdzKGN0eCxmbGdzKSAoKGN0eCktPmZsYWdzfD0oZmxncykpCi0jZGVmaW5lIE1fRVZQX01EX0NUWF9jbGVhcl9mbGFncyhjdHgsZmxncykgKChjdHgpLT5mbGFncyY9fihmbGdzKSkKLSNkZWZpbmUgTV9FVlBfTURfQ1RYX3Rlc3RfZmxhZ3MoY3R4LGZsZ3MpICgoY3R4KS0+ZmxhZ3MmKGZsZ3MpKQotI2RlZmluZSBNX0VWUF9NRF90eXBlKGUpCQkJKChlKS0+dHlwZSkKLSNkZWZpbmUgTV9FVlBfTURfQ1RYX3R5cGUoZSkJCU1fRVZQX01EX3R5cGUoTV9FVlBfTURfQ1RYX21kKGUpKQotI2RlZmluZSBNX0VWUF9NRF9DVFhfbWQoZSkJCQkoKGUpLT5kaWdlc3QpCi0KLSNkZWZpbmUgTV9FVlBfQ0lQSEVSX0NUWF9zZXRfZmxhZ3MoY3R4LGZsZ3MpICgoY3R4KS0+ZmxhZ3N8PShmbGdzKSkKLQogaW50IEVWUF9NRF90eXBlKGNvbnN0IEVWUF9NRCAqbWQpOwogI2RlZmluZSBFVlBfTURfbmlkKGUpCQkJRVZQX01EX3R5cGUoZSkKICNkZWZpbmUgRVZQX01EX25hbWUoZSkJCQlPQkpfbmlkMnNuKEVWUF9NRF9uaWQoZSkpCiBpbnQgRVZQX01EX3BrZXlfdHlwZShjb25zdCBFVlBfTUQgKm1kKTsJCiBpbnQgRVZQX01EX3NpemUoY29uc3QgRVZQX01EICptZCk7CiBpbnQgRVZQX01EX2Jsb2NrX3NpemUoY29uc3QgRVZQX01EICptZCk7Cit1bnNpZ25lZCBsb25nIEVWUF9NRF9mbGFncyhjb25zdCBFVlBfTUQgKm1kKTsKIAotY29uc3QgRVZQX01EICogRVZQX01EX0NUWF9tZChjb25zdCBFVlBfTURfQ1RYICpjdHgpOworY29uc3QgRVZQX01EICpFVlBfTURfQ1RYX21kKGNvbnN0IEVWUF9NRF9DVFggKmN0eCk7CiAjZGVmaW5lIEVWUF9NRF9DVFhfc2l6ZShlKQkJRVZQX01EX3NpemUoRVZQX01EX0NUWF9tZChlKSkKICNkZWZpbmUgRVZQX01EX0NUWF9ibG9ja19zaXplKGUpCUVWUF9NRF9ibG9ja19zaXplKEVWUF9NRF9DVFhfbWQoZSkpCiAjZGVmaW5lIEVWUF9NRF9DVFhfdHlwZShlKQkJRVZQX01EX3R5cGUoRVZQX01EX0NUWF9tZChlKSkKQEAgLTQ5OSw2ICs0NTYsNyBAQAogaW50IEVWUF9DSVBIRVJfQ1RYX2Jsb2NrX3NpemUoY29uc3QgRVZQX0NJUEhFUl9DVFggKmN0eCk7CiBpbnQgRVZQX0NJUEhFUl9DVFhfa2V5X2xlbmd0aChjb25zdCBFVlBfQ0lQSEVSX0NUWCAqY3R4KTsKIGludCBFVlBfQ0lQSEVSX0NUWF9pdl9sZW5ndGgoY29uc3QgRVZQX0NJUEhFUl9DVFggKmN0eCk7CitpbnQgRVZQX0NJUEhFUl9DVFhfY29weShFVlBfQ0lQSEVSX0NUWCAqb3V0LCBjb25zdCBFVlBfQ0lQSEVSX0NUWCAqaW4pOwogdm9pZCAqIEVWUF9DSVBIRVJfQ1RYX2dldF9hcHBfZGF0YShjb25zdCBFVlBfQ0lQSEVSX0NUWCAqY3R4KTsKIHZvaWQgRVZQX0NJUEhFUl9DVFhfc2V0X2FwcF9kYXRhKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHZvaWQgKmRhdGEpOwogI2RlZmluZSBFVlBfQ0lQSEVSX0NUWF90eXBlKGMpICAgICAgICAgRVZQX0NJUEhFUl90eXBlKEVWUF9DSVBIRVJfQ1RYX2NpcGhlcihjKSkKQEAgLTUxNiw2ICs0NzQsOCBAQAogI2RlZmluZQlFVlBfVmVyaWZ5VXBkYXRlKGEsYixjKQkJRVZQX0RpZ2VzdFVwZGF0ZShhLGIsYykKICNkZWZpbmUgRVZQX09wZW5VcGRhdGUoYSxiLGMsZCxlKQlFVlBfRGVjcnlwdFVwZGF0ZShhLGIsYyxkLGUpCiAjZGVmaW5lIEVWUF9TZWFsVXBkYXRlKGEsYixjLGQsZSkJRVZQX0VuY3J5cHRVcGRhdGUoYSxiLGMsZCxlKQkKKyNkZWZpbmUgRVZQX0RpZ2VzdFNpZ25VcGRhdGUoYSxiLGMpCUVWUF9EaWdlc3RVcGRhdGUoYSxiLGMpCisjZGVmaW5lIEVWUF9EaWdlc3RWZXJpZnlVcGRhdGUoYSxiLGMpCUVWUF9EaWdlc3RVcGRhdGUoYSxiLGMpCiAKICNpZmRlZiBDT05TVF9TVFJJQ1QKIHZvaWQgQklPX3NldF9tZChCSU8gKixjb25zdCBFVlBfTUQgKm1kKTsKQEAgLTU2Miw2ICs1MjIsNyBAQAogaW50CUVWUF9EaWdlc3RGaW5hbChFVlBfTURfQ1RYICpjdHgsdW5zaWduZWQgY2hhciAqbWQsdW5zaWduZWQgaW50ICpzKTsKIAogaW50CUVWUF9yZWFkX3B3X3N0cmluZyhjaGFyICpidWYsaW50IGxlbmd0aCxjb25zdCBjaGFyICpwcm9tcHQsaW50IHZlcmlmeSk7CitpbnQJRVZQX3JlYWRfcHdfc3RyaW5nX21pbihjaGFyICpidWYsaW50IG1pbmxlbixpbnQgbWF4bGVuLGNvbnN0IGNoYXIgKnByb21wdCxpbnQgdmVyaWZ5KTsKIHZvaWQJRVZQX3NldF9wd19wcm9tcHQoY29uc3QgY2hhciAqcHJvbXB0KTsKIGNoYXIgKglFVlBfZ2V0X3B3X3Byb21wdCh2b2lkKTsKIApAQCAtNjA4LDYgKzU2OSwxNiBAQAogaW50CUVWUF9WZXJpZnlGaW5hbChFVlBfTURfQ1RYICpjdHgsY29uc3QgdW5zaWduZWQgY2hhciAqc2lnYnVmLAogCQl1bnNpZ25lZCBpbnQgc2lnbGVuLEVWUF9QS0VZICpwa2V5KTsKIAoraW50CUVWUF9EaWdlc3RTaWduSW5pdChFVlBfTURfQ1RYICpjdHgsIEVWUF9QS0VZX0NUWCAqKnBjdHgsCisJCQljb25zdCBFVlBfTUQgKnR5cGUsIEVOR0lORSAqZSwgRVZQX1BLRVkgKnBrZXkpOworaW50CUVWUF9EaWdlc3RTaWduRmluYWwoRVZQX01EX0NUWCAqY3R4LAorCQkJdW5zaWduZWQgY2hhciAqc2lncmV0LCBzaXplX3QgKnNpZ2xlbik7CisKK2ludAlFVlBfRGlnZXN0VmVyaWZ5SW5pdChFVlBfTURfQ1RYICpjdHgsIEVWUF9QS0VZX0NUWCAqKnBjdHgsCisJCQljb25zdCBFVlBfTUQgKnR5cGUsIEVOR0lORSAqZSwgRVZQX1BLRVkgKnBrZXkpOworaW50CUVWUF9EaWdlc3RWZXJpZnlGaW5hbChFVlBfTURfQ1RYICpjdHgsCisJCQl1bnNpZ25lZCBjaGFyICpzaWcsIHNpemVfdCBzaWdsZW4pOworCiBpbnQJRVZQX09wZW5Jbml0KEVWUF9DSVBIRVJfQ1RYICpjdHgsY29uc3QgRVZQX0NJUEhFUiAqdHlwZSwKIAkJY29uc3QgdW5zaWduZWQgY2hhciAqZWssIGludCBla2wsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LAogCQlFVlBfUEtFWSAqcHJpdik7CkBAIC02ODAsNiArNjUxLDkgQEAKICNpZm5kZWYgT1BFTlNTTF9OT19SSVBFTUQKIGNvbnN0IEVWUF9NRCAqRVZQX3JpcGVtZDE2MCh2b2lkKTsKICNlbmRpZgorI2lmbmRlZiBPUEVOU1NMX05PX1dISVJMUE9PTAorY29uc3QgRVZQX01EICpFVlBfd2hpcmxwb29sKHZvaWQpOworI2VuZGlmCiBjb25zdCBFVlBfQ0lQSEVSICpFVlBfZW5jX251bGwodm9pZCk7CQkvKiBkb2VzIG5vdGhpbmcgOi0pICovCiAjaWZuZGVmIE9QRU5TU0xfTk9fREVTCiBjb25zdCBFVlBfQ0lQSEVSICpFVlBfZGVzX2VjYih2b2lkKTsKQEAgLTg0NywxNiArODIxLDMxIEBACiBjb25zdCBFVlBfTUQgKkVWUF9nZXRfZGlnZXN0YnluYW1lKGNvbnN0IGNoYXIgKm5hbWUpOwogdm9pZCBFVlBfY2xlYW51cCh2b2lkKTsKIAotaW50CQlFVlBfUEtFWV9kZWNyeXB0KHVuc2lnbmVkIGNoYXIgKmRlY19rZXksCit2b2lkIEVWUF9DSVBIRVJfZG9fYWxsKHZvaWQgKCpmbikoY29uc3QgRVZQX0NJUEhFUiAqY2lwaCwKKwkJY29uc3QgY2hhciAqZnJvbSwgY29uc3QgY2hhciAqdG8sIHZvaWQgKngpLCB2b2lkICphcmcpOwordm9pZCBFVlBfQ0lQSEVSX2RvX2FsbF9zb3J0ZWQodm9pZCAoKmZuKShjb25zdCBFVlBfQ0lQSEVSICpjaXBoLAorCQljb25zdCBjaGFyICpmcm9tLCBjb25zdCBjaGFyICp0bywgdm9pZCAqeCksIHZvaWQgKmFyZyk7CisKK3ZvaWQgRVZQX01EX2RvX2FsbCh2b2lkICgqZm4pKGNvbnN0IEVWUF9NRCAqY2lwaCwKKwkJY29uc3QgY2hhciAqZnJvbSwgY29uc3QgY2hhciAqdG8sIHZvaWQgKngpLCB2b2lkICphcmcpOwordm9pZCBFVlBfTURfZG9fYWxsX3NvcnRlZCh2b2lkICgqZm4pKGNvbnN0IEVWUF9NRCAqY2lwaCwKKwkJY29uc3QgY2hhciAqZnJvbSwgY29uc3QgY2hhciAqdG8sIHZvaWQgKngpLCB2b2lkICphcmcpOworCitpbnQJCUVWUF9QS0VZX2RlY3J5cHRfb2xkKHVuc2lnbmVkIGNoYXIgKmRlY19rZXksCiAJCQljb25zdCB1bnNpZ25lZCBjaGFyICplbmNfa2V5LGludCBlbmNfa2V5X2xlbiwKIAkJCUVWUF9QS0VZICpwcml2YXRlX2tleSk7Ci1pbnQJCUVWUF9QS0VZX2VuY3J5cHQodW5zaWduZWQgY2hhciAqZW5jX2tleSwKK2ludAkJRVZQX1BLRVlfZW5jcnlwdF9vbGQodW5zaWduZWQgY2hhciAqZW5jX2tleSwKIAkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSxpbnQga2V5X2xlbiwKIAkJCUVWUF9QS0VZICpwdWJfa2V5KTsKIGludAkJRVZQX1BLRVlfdHlwZShpbnQgdHlwZSk7CitpbnQJCUVWUF9QS0VZX2lkKGNvbnN0IEVWUF9QS0VZICpwa2V5KTsKK2ludAkJRVZQX1BLRVlfYmFzZV9pZChjb25zdCBFVlBfUEtFWSAqcGtleSk7CiBpbnQJCUVWUF9QS0VZX2JpdHMoRVZQX1BLRVkgKnBrZXkpOwogaW50CQlFVlBfUEtFWV9zaXplKEVWUF9QS0VZICpwa2V5KTsKLWludCAJCUVWUF9QS0VZX2Fzc2lnbihFVlBfUEtFWSAqcGtleSxpbnQgdHlwZSxjaGFyICprZXkpOworaW50IAkJRVZQX1BLRVlfc2V0X3R5cGUoRVZQX1BLRVkgKnBrZXksaW50IHR5cGUpOworaW50CQlFVlBfUEtFWV9zZXRfdHlwZV9zdHIoRVZQX1BLRVkgKnBrZXksIGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbik7CitpbnQgCQlFVlBfUEtFWV9hc3NpZ24oRVZQX1BLRVkgKnBrZXksaW50IHR5cGUsdm9pZCAqa2V5KTsKK3ZvaWQgKgkJRVZQX1BLRVlfZ2V0MChFVlBfUEtFWSAqcGtleSk7CiAKICNpZm5kZWYgT1BFTlNTTF9OT19SU0EKIHN0cnVjdCByc2Ffc3Q7CkBAIC04OTksNiArODg4LDE1IEBACiAKIGludCBFVlBfUEtFWV9jbXAoY29uc3QgRVZQX1BLRVkgKmEsIGNvbnN0IEVWUF9QS0VZICpiKTsKIAoraW50IEVWUF9QS0VZX3ByaW50X3B1YmxpYyhCSU8gKm91dCwgY29uc3QgRVZQX1BLRVkgKnBrZXksCisJCQkJaW50IGluZGVudCwgQVNOMV9QQ1RYICpwY3R4KTsKK2ludCBFVlBfUEtFWV9wcmludF9wcml2YXRlKEJJTyAqb3V0LCBjb25zdCBFVlBfUEtFWSAqcGtleSwKKwkJCQlpbnQgaW5kZW50LCBBU04xX1BDVFggKnBjdHgpOworaW50IEVWUF9QS0VZX3ByaW50X3BhcmFtcyhCSU8gKm91dCwgY29uc3QgRVZQX1BLRVkgKnBrZXksCisJCQkJaW50IGluZGVudCwgQVNOMV9QQ1RYICpwY3R4KTsKKworaW50IEVWUF9QS0VZX2dldF9kZWZhdWx0X2RpZ2VzdF9uaWQoRVZQX1BLRVkgKnBrZXksIGludCAqcG5pZCk7CisKIGludCBFVlBfQ0lQSEVSX3R5cGUoY29uc3QgRVZQX0NJUEhFUiAqY3R4KTsKIAogLyogY2FsbHMgbWV0aG9kcyAqLwpAQCAtOTE2LDYgKzkxNCwxMCBAQAogaW50IFBLQ1M1X1BCS0RGMl9ITUFDX1NIQTEoY29uc3QgY2hhciAqcGFzcywgaW50IHBhc3NsZW4sCiAJCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzYWx0LCBpbnQgc2FsdGxlbiwgaW50IGl0ZXIsCiAJCQkgICBpbnQga2V5bGVuLCB1bnNpZ25lZCBjaGFyICpvdXQpOworaW50IFBLQ1M1X1BCS0RGMl9ITUFDKGNvbnN0IGNoYXIgKnBhc3MsIGludCBwYXNzbGVuLAorCQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2FsdCwgaW50IHNhbHRsZW4sIGludCBpdGVyLAorCQkJICAgY29uc3QgRVZQX01EICpkaWdlc3QsCisJCSAgICAgIGludCBrZXlsZW4sIHVuc2lnbmVkIGNoYXIgKm91dCk7CiBpbnQgUEtDUzVfdjJfUEJFX2tleWl2Z2VuKEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IGNoYXIgKnBhc3MsIGludCBwYXNzbGVuLAogCQkJIEFTTjFfVFlQRSAqcGFyYW0sIGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciwgY29uc3QgRVZQX01EICptZCwKIAkJCSBpbnQgZW5fZGUpOwpAQCAtOTI0LDI3ICs5MjYsMjYwIEBACiAKIGludCBFVlBfUEJFX0NpcGhlckluaXQgKEFTTjFfT0JKRUNUICpwYmVfb2JqLCBjb25zdCBjaGFyICpwYXNzLCBpbnQgcGFzc2xlbiwKIAkgICAgIEFTTjFfVFlQRSAqcGFyYW0sIEVWUF9DSVBIRVJfQ1RYICpjdHgsIGludCBlbl9kZSk7CisKKy8qIFBCRSB0eXBlICovCisKKy8qIENhbiBhcHBlYXIgYXMgdGhlIG91dGVybW9zdCBBbGdvcml0aG1JZGVudGlmaWVyICovCisjZGVmaW5lIEVWUF9QQkVfVFlQRV9PVVRFUgkweDAKKy8qIElzIGFuIFBSRiB0eXBlIE9JRCAqLworI2RlZmluZSBFVlBfUEJFX1RZUEVfUFJGCTB4MQorCitpbnQgRVZQX1BCRV9hbGdfYWRkX3R5cGUoaW50IHBiZV90eXBlLCBpbnQgcGJlX25pZCwgaW50IGNpcGhlcl9uaWQsIGludCBtZF9uaWQsCisJICAgICBFVlBfUEJFX0tFWUdFTiAqa2V5Z2VuKTsKIGludCBFVlBfUEJFX2FsZ19hZGQoaW50IG5pZCwgY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyLCBjb25zdCBFVlBfTUQgKm1kLAogCQkgICAgRVZQX1BCRV9LRVlHRU4gKmtleWdlbik7CitpbnQgRVZQX1BCRV9maW5kKGludCB0eXBlLCBpbnQgcGJlX25pZCwKKwkJCWludCAqcGNuaWQsIGludCAqcG1uaWQsIEVWUF9QQkVfS0VZR0VOICoqcGtleWdlbik7CiB2b2lkIEVWUF9QQkVfY2xlYW51cCh2b2lkKTsKIAotI2lmZGVmIE9QRU5TU0xfRklQUwotI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQotdm9pZCBpbnRfRVZQX01EX3NldF9lbmdpbmVfY2FsbGJhY2tzKAotCWludCAoKmVuZ19tZF9pbml0KShFTkdJTkUgKmltcGwpLAotCWludCAoKmVuZ19tZF9maW4pKEVOR0lORSAqaW1wbCksCi0JaW50ICgqZW5nX21kX2V2cCkKLQkJKEVWUF9NRF9DVFggKmN0eCwgY29uc3QgRVZQX01EICoqcHR5cGUsIEVOR0lORSAqaW1wbCkpOwotdm9pZCBpbnRfRVZQX01EX2luaXRfZW5naW5lX2NhbGxiYWNrcyh2b2lkKTsKLXZvaWQgaW50X0VWUF9DSVBIRVJfc2V0X2VuZ2luZV9jYWxsYmFja3MoCi0JaW50ICgqZW5nX2NpcGhfZmluKShFTkdJTkUgKmltcGwpLAotCWludCAoKmVuZ19jaXBoX2V2cCkKLQkJKEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IEVWUF9DSVBIRVIgKipwY2lwaCwgRU5HSU5FICppbXBsKSk7Ci12b2lkIGludF9FVlBfQ0lQSEVSX2luaXRfZW5naW5lX2NhbGxiYWNrcyh2b2lkKTsKLSNlbmRpZgotI2VuZGlmCisjZGVmaW5lIEFTTjFfUEtFWV9BTElBUwkJMHgxCisjZGVmaW5lIEFTTjFfUEtFWV9EWU5BTUlDCTB4MgorI2RlZmluZSBBU04xX1BLRVlfU0lHUEFSQU1fTlVMTAkweDQKIAotdm9pZCBFVlBfYWRkX2FsZ19tb2R1bGUodm9pZCk7CisjZGVmaW5lIEFTTjFfUEtFWV9DVFJMX1BLQ1M3X1NJR04JMHgxCisjZGVmaW5lIEFTTjFfUEtFWV9DVFJMX1BLQ1M3X0VOQ1JZUFQJMHgyCisjZGVmaW5lIEFTTjFfUEtFWV9DVFJMX0RFRkFVTFRfTURfTklECTB4MworI2RlZmluZSBBU04xX1BLRVlfQ1RSTF9DTVNfU0lHTgkJMHg1CisjZGVmaW5lIEFTTjFfUEtFWV9DVFJMX0NNU19FTlZFTE9QRQkweDcKKworaW50IEVWUF9QS0VZX2FzbjFfZ2V0X2NvdW50KHZvaWQpOworY29uc3QgRVZQX1BLRVlfQVNOMV9NRVRIT0QgKkVWUF9QS0VZX2FzbjFfZ2V0MChpbnQgaWR4KTsKK2NvbnN0IEVWUF9QS0VZX0FTTjFfTUVUSE9EICpFVlBfUEtFWV9hc24xX2ZpbmQoRU5HSU5FICoqcGUsIGludCB0eXBlKTsKK2NvbnN0IEVWUF9QS0VZX0FTTjFfTUVUSE9EICpFVlBfUEtFWV9hc24xX2ZpbmRfc3RyKEVOR0lORSAqKnBlLAorCQkJCQljb25zdCBjaGFyICpzdHIsIGludCBsZW4pOworaW50IEVWUF9QS0VZX2FzbjFfYWRkMChjb25zdCBFVlBfUEtFWV9BU04xX01FVEhPRCAqYW1ldGgpOworaW50IEVWUF9QS0VZX2FzbjFfYWRkX2FsaWFzKGludCB0bywgaW50IGZyb20pOworaW50IEVWUF9QS0VZX2FzbjFfZ2V0MF9pbmZvKGludCAqcHBrZXlfaWQsIGludCAqcGtleV9iYXNlX2lkLCBpbnQgKnBwa2V5X2ZsYWdzLAorCQkJCWNvbnN0IGNoYXIgKipwaW5mbywgY29uc3QgY2hhciAqKnBwZW1fc3RyLAorCQkJCQljb25zdCBFVlBfUEtFWV9BU04xX01FVEhPRCAqYW1ldGgpOworCitjb25zdCBFVlBfUEtFWV9BU04xX01FVEhPRCogRVZQX1BLRVlfZ2V0MF9hc24xKEVWUF9QS0VZICpwa2V5KTsKK0VWUF9QS0VZX0FTTjFfTUVUSE9EKiBFVlBfUEtFWV9hc24xX25ldyhpbnQgaWQsIGludCBmbGFncywKKwkJCQkJY29uc3QgY2hhciAqcGVtX3N0ciwgY29uc3QgY2hhciAqaW5mbyk7Cit2b2lkIEVWUF9QS0VZX2FzbjFfY29weShFVlBfUEtFWV9BU04xX01FVEhPRCAqZHN0LCAKKwkJCWNvbnN0IEVWUF9QS0VZX0FTTjFfTUVUSE9EICpzcmMpOwordm9pZCBFVlBfUEtFWV9hc24xX2ZyZWUoRVZQX1BLRVlfQVNOMV9NRVRIT0QgKmFtZXRoKTsKK3ZvaWQgRVZQX1BLRVlfYXNuMV9zZXRfcHVibGljKEVWUF9QS0VZX0FTTjFfTUVUSE9EICphbWV0aCwKKwkJaW50ICgqcHViX2RlY29kZSkoRVZQX1BLRVkgKnBrLCBYNTA5X1BVQktFWSAqcHViKSwKKwkJaW50ICgqcHViX2VuY29kZSkoWDUwOV9QVUJLRVkgKnB1YiwgY29uc3QgRVZQX1BLRVkgKnBrKSwKKwkJaW50ICgqcHViX2NtcCkoY29uc3QgRVZQX1BLRVkgKmEsIGNvbnN0IEVWUF9QS0VZICpiKSwKKwkJaW50ICgqcHViX3ByaW50KShCSU8gKm91dCwgY29uc3QgRVZQX1BLRVkgKnBrZXksIGludCBpbmRlbnQsCisJCQkJCQkJQVNOMV9QQ1RYICpwY3R4KSwKKwkJaW50ICgqcGtleV9zaXplKShjb25zdCBFVlBfUEtFWSAqcGspLAorCQlpbnQgKCpwa2V5X2JpdHMpKGNvbnN0IEVWUF9QS0VZICpwaykpOwordm9pZCBFVlBfUEtFWV9hc24xX3NldF9wcml2YXRlKEVWUF9QS0VZX0FTTjFfTUVUSE9EICphbWV0aCwKKwkJaW50ICgqcHJpdl9kZWNvZGUpKEVWUF9QS0VZICpwaywgUEtDUzhfUFJJVl9LRVlfSU5GTyAqcDhpbmYpLAorCQlpbnQgKCpwcml2X2VuY29kZSkoUEtDUzhfUFJJVl9LRVlfSU5GTyAqcDgsIGNvbnN0IEVWUF9QS0VZICpwayksCisJCWludCAoKnByaXZfcHJpbnQpKEJJTyAqb3V0LCBjb25zdCBFVlBfUEtFWSAqcGtleSwgaW50IGluZGVudCwKKwkJCQkJCQlBU04xX1BDVFggKnBjdHgpKTsKK3ZvaWQgRVZQX1BLRVlfYXNuMV9zZXRfcGFyYW0oRVZQX1BLRVlfQVNOMV9NRVRIT0QgKmFtZXRoLAorCQlpbnQgKCpwYXJhbV9kZWNvZGUpKEVWUF9QS0VZICpwa2V5LAorCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKipwZGVyLCBpbnQgZGVybGVuKSwKKwkJaW50ICgqcGFyYW1fZW5jb2RlKShjb25zdCBFVlBfUEtFWSAqcGtleSwgdW5zaWduZWQgY2hhciAqKnBkZXIpLAorCQlpbnQgKCpwYXJhbV9taXNzaW5nKShjb25zdCBFVlBfUEtFWSAqcGspLAorCQlpbnQgKCpwYXJhbV9jb3B5KShFVlBfUEtFWSAqdG8sIGNvbnN0IEVWUF9QS0VZICpmcm9tKSwKKwkJaW50ICgqcGFyYW1fY21wKShjb25zdCBFVlBfUEtFWSAqYSwgY29uc3QgRVZQX1BLRVkgKmIpLAorCQlpbnQgKCpwYXJhbV9wcmludCkoQklPICpvdXQsIGNvbnN0IEVWUF9QS0VZICpwa2V5LCBpbnQgaW5kZW50LAorCQkJCQkJCUFTTjFfUENUWCAqcGN0eCkpOworCit2b2lkIEVWUF9QS0VZX2FzbjFfc2V0X2ZyZWUoRVZQX1BLRVlfQVNOMV9NRVRIT0QgKmFtZXRoLAorCQl2b2lkICgqcGtleV9mcmVlKShFVlBfUEtFWSAqcGtleSkpOwordm9pZCBFVlBfUEtFWV9hc24xX3NldF9jdHJsKEVWUF9QS0VZX0FTTjFfTUVUSE9EICphbWV0aCwKKwkJaW50ICgqcGtleV9jdHJsKShFVlBfUEtFWSAqcGtleSwgaW50IG9wLAorCQkJCQkJCWxvbmcgYXJnMSwgdm9pZCAqYXJnMikpOworCisKKyNkZWZpbmUgRVZQX1BLRVlfT1BfVU5ERUZJTkVECQkwCisjZGVmaW5lIEVWUF9QS0VZX09QX1BBUkFNR0VOCQkoMTw8MSkKKyNkZWZpbmUgRVZQX1BLRVlfT1BfS0VZR0VOCQkoMTw8MikKKyNkZWZpbmUgRVZQX1BLRVlfT1BfU0lHTgkJKDE8PDMpCisjZGVmaW5lIEVWUF9QS0VZX09QX1ZFUklGWQkJKDE8PDQpCisjZGVmaW5lIEVWUF9QS0VZX09QX1ZFUklGWVJFQ09WRVIJKDE8PDUpCisjZGVmaW5lIEVWUF9QS0VZX09QX1NJR05DVFgJCSgxPDw2KQorI2RlZmluZSBFVlBfUEtFWV9PUF9WRVJJRllDVFgJCSgxPDw3KQorI2RlZmluZSBFVlBfUEtFWV9PUF9FTkNSWVBUCQkoMTw8OCkKKyNkZWZpbmUgRVZQX1BLRVlfT1BfREVDUllQVAkJKDE8PDkpCisjZGVmaW5lIEVWUF9QS0VZX09QX0RFUklWRQkJKDE8PDEwKQorCisjZGVmaW5lIEVWUF9QS0VZX09QX1RZUEVfU0lHCVwKKwkoRVZQX1BLRVlfT1BfU0lHTiB8IEVWUF9QS0VZX09QX1ZFUklGWSB8IEVWUF9QS0VZX09QX1ZFUklGWVJFQ09WRVIgXAorCQl8IEVWUF9QS0VZX09QX1NJR05DVFggfCBFVlBfUEtFWV9PUF9WRVJJRllDVFgpCisKKyNkZWZpbmUgRVZQX1BLRVlfT1BfVFlQRV9DUllQVCBcCisJKEVWUF9QS0VZX09QX0VOQ1JZUFQgfCBFVlBfUEtFWV9PUF9ERUNSWVBUKQorCisjZGVmaW5lIEVWUF9QS0VZX09QX1RZUEVfTk9HRU4gXAorCShFVlBfUEtFWV9PUF9TSUcgfCBFVlBfUEtFWV9PUF9DUllQVCB8IEVWUF9QS0VZX09QX0RFUklWRSkKKworI2RlZmluZSBFVlBfUEtFWV9PUF9UWVBFX0dFTiBcCisJCShFVlBfUEtFWV9PUF9QQVJBTUdFTiB8IEVWUF9QS0VZX09QX0tFWUdFTikKKworI2RlZmluZQkgRVZQX1BLRVlfQ1RYX3NldF9zaWduYXR1cmVfbWQoY3R4LCBtZCkJXAorCQlFVlBfUEtFWV9DVFhfY3RybChjdHgsIC0xLCBFVlBfUEtFWV9PUF9UWVBFX1NJRywgIFwKKwkJCQkJRVZQX1BLRVlfQ1RSTF9NRCwgMCwgKHZvaWQgKiltZCkKKworI2RlZmluZSBFVlBfUEtFWV9DVFJMX01ECQkxCisjZGVmaW5lIEVWUF9QS0VZX0NUUkxfUEVFUl9LRVkJCTIKKworI2RlZmluZSBFVlBfUEtFWV9DVFJMX1BLQ1M3X0VOQ1JZUFQJMworI2RlZmluZSBFVlBfUEtFWV9DVFJMX1BLQ1M3X0RFQ1JZUFQJNAorCisjZGVmaW5lIEVWUF9QS0VZX0NUUkxfUEtDUzdfU0lHTgk1CisKKyNkZWZpbmUgRVZQX1BLRVlfQ1RSTF9TRVRfTUFDX0tFWQk2CisKKyNkZWZpbmUgRVZQX1BLRVlfQ1RSTF9ESUdFU1RJTklUCTcKKworLyogVXNlZCBieSBHT1NUIGtleSBlbmNyeXB0aW9uIGluIFRMUyAqLworI2RlZmluZSBFVlBfUEtFWV9DVFJMX1NFVF9JViAJCTgKKworI2RlZmluZSBFVlBfUEtFWV9DVFJMX0NNU19FTkNSWVBUCTkKKyNkZWZpbmUgRVZQX1BLRVlfQ1RSTF9DTVNfREVDUllQVAkxMAorI2RlZmluZSBFVlBfUEtFWV9DVFJMX0NNU19TSUdOCQkxMQorCisjZGVmaW5lIEVWUF9QS0VZX0FMR19DVFJMCQkweDEwMDAKKworCisjZGVmaW5lIEVWUF9QS0VZX0ZMQUdfQVVUT0FSR0xFTgkyCisKK2NvbnN0IEVWUF9QS0VZX01FVEhPRCAqRVZQX1BLRVlfbWV0aF9maW5kKGludCB0eXBlKTsKK0VWUF9QS0VZX01FVEhPRCogRVZQX1BLRVlfbWV0aF9uZXcoaW50IGlkLCBpbnQgZmxhZ3MpOwordm9pZCBFVlBfUEtFWV9tZXRoX2ZyZWUoRVZQX1BLRVlfTUVUSE9EICpwbWV0aCk7CitpbnQgRVZQX1BLRVlfbWV0aF9hZGQwKGNvbnN0IEVWUF9QS0VZX01FVEhPRCAqcG1ldGgpOworCitFVlBfUEtFWV9DVFggKkVWUF9QS0VZX0NUWF9uZXcoRVZQX1BLRVkgKnBrZXksIEVOR0lORSAqZSk7CitFVlBfUEtFWV9DVFggKkVWUF9QS0VZX0NUWF9uZXdfaWQoaW50IGlkLCBFTkdJTkUgKmUpOworRVZQX1BLRVlfQ1RYICpFVlBfUEtFWV9DVFhfZHVwKEVWUF9QS0VZX0NUWCAqY3R4KTsKK3ZvaWQgRVZQX1BLRVlfQ1RYX2ZyZWUoRVZQX1BLRVlfQ1RYICpjdHgpOworCitpbnQgRVZQX1BLRVlfQ1RYX2N0cmwoRVZQX1BLRVlfQ1RYICpjdHgsIGludCBrZXl0eXBlLCBpbnQgb3B0eXBlLAorCQkJCWludCBjbWQsIGludCBwMSwgdm9pZCAqcDIpOworaW50IEVWUF9QS0VZX0NUWF9jdHJsX3N0cihFVlBfUEtFWV9DVFggKmN0eCwgY29uc3QgY2hhciAqdHlwZSwKKwkJCQkJCWNvbnN0IGNoYXIgKnZhbHVlKTsKKworaW50IEVWUF9QS0VZX0NUWF9nZXRfb3BlcmF0aW9uKEVWUF9QS0VZX0NUWCAqY3R4KTsKK3ZvaWQgRVZQX1BLRVlfQ1RYX3NldDBfa2V5Z2VuX2luZm8oRVZQX1BLRVlfQ1RYICpjdHgsIGludCAqZGF0LCBpbnQgZGF0bGVuKTsKKworRVZQX1BLRVkgKkVWUF9QS0VZX25ld19tYWNfa2V5KGludCB0eXBlLCBFTkdJTkUgKmUsCisJCQkJdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuKTsKKwordm9pZCBFVlBfUEtFWV9DVFhfc2V0X2RhdGEoRVZQX1BLRVlfQ1RYICpjdHgsIHZvaWQgKmRhdGEpOwordm9pZCAqRVZQX1BLRVlfQ1RYX2dldF9kYXRhKEVWUF9QS0VZX0NUWCAqY3R4KTsKK0VWUF9QS0VZICpFVlBfUEtFWV9DVFhfZ2V0MF9wa2V5KEVWUF9QS0VZX0NUWCAqY3R4KTsKKworRVZQX1BLRVkgKkVWUF9QS0VZX0NUWF9nZXQwX3BlZXJrZXkoRVZQX1BLRVlfQ1RYICpjdHgpOworCit2b2lkIEVWUF9QS0VZX0NUWF9zZXRfYXBwX2RhdGEoRVZQX1BLRVlfQ1RYICpjdHgsIHZvaWQgKmRhdGEpOwordm9pZCAqRVZQX1BLRVlfQ1RYX2dldF9hcHBfZGF0YShFVlBfUEtFWV9DVFggKmN0eCk7CisKK2ludCBFVlBfUEtFWV9zaWduX2luaXQoRVZQX1BLRVlfQ1RYICpjdHgpOworaW50IEVWUF9QS0VZX3NpZ24oRVZQX1BLRVlfQ1RYICpjdHgsCisJCQl1bnNpZ25lZCBjaGFyICpzaWcsIHNpemVfdCAqc2lnbGVuLAorCQkJY29uc3QgdW5zaWduZWQgY2hhciAqdGJzLCBzaXplX3QgdGJzbGVuKTsKK2ludCBFVlBfUEtFWV92ZXJpZnlfaW5pdChFVlBfUEtFWV9DVFggKmN0eCk7CitpbnQgRVZQX1BLRVlfdmVyaWZ5KEVWUF9QS0VZX0NUWCAqY3R4LAorCQkJY29uc3QgdW5zaWduZWQgY2hhciAqc2lnLCBzaXplX3Qgc2lnbGVuLAorCQkJY29uc3QgdW5zaWduZWQgY2hhciAqdGJzLCBzaXplX3QgdGJzbGVuKTsKK2ludCBFVlBfUEtFWV92ZXJpZnlfcmVjb3Zlcl9pbml0KEVWUF9QS0VZX0NUWCAqY3R4KTsKK2ludCBFVlBfUEtFWV92ZXJpZnlfcmVjb3ZlcihFVlBfUEtFWV9DVFggKmN0eCwKKwkJCXVuc2lnbmVkIGNoYXIgKnJvdXQsIHNpemVfdCAqcm91dGxlbiwKKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZywgc2l6ZV90IHNpZ2xlbik7CitpbnQgRVZQX1BLRVlfZW5jcnlwdF9pbml0KEVWUF9QS0VZX0NUWCAqY3R4KTsKK2ludCBFVlBfUEtFWV9lbmNyeXB0KEVWUF9QS0VZX0NUWCAqY3R4LAorCQkJdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3QgKm91dGxlbiwKKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgaW5sZW4pOworaW50IEVWUF9QS0VZX2RlY3J5cHRfaW5pdChFVlBfUEtFWV9DVFggKmN0eCk7CitpbnQgRVZQX1BLRVlfZGVjcnlwdChFVlBfUEtFWV9DVFggKmN0eCwKKwkJCXVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90ICpvdXRsZW4sCisJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGlubGVuKTsKKworaW50IEVWUF9QS0VZX2Rlcml2ZV9pbml0KEVWUF9QS0VZX0NUWCAqY3R4KTsKK2ludCBFVlBfUEtFWV9kZXJpdmVfc2V0X3BlZXIoRVZQX1BLRVlfQ1RYICpjdHgsIEVWUF9QS0VZICpwZWVyKTsKK2ludCBFVlBfUEtFWV9kZXJpdmUoRVZQX1BLRVlfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKmtleSwgc2l6ZV90ICprZXlsZW4pOworCit0eXBlZGVmIGludCBFVlBfUEtFWV9nZW5fY2IoRVZQX1BLRVlfQ1RYICpjdHgpOworCitpbnQgRVZQX1BLRVlfcGFyYW1nZW5faW5pdChFVlBfUEtFWV9DVFggKmN0eCk7CitpbnQgRVZQX1BLRVlfcGFyYW1nZW4oRVZQX1BLRVlfQ1RYICpjdHgsIEVWUF9QS0VZICoqcHBrZXkpOworaW50IEVWUF9QS0VZX2tleWdlbl9pbml0KEVWUF9QS0VZX0NUWCAqY3R4KTsKK2ludCBFVlBfUEtFWV9rZXlnZW4oRVZQX1BLRVlfQ1RYICpjdHgsIEVWUF9QS0VZICoqcHBrZXkpOworCit2b2lkIEVWUF9QS0VZX0NUWF9zZXRfY2IoRVZQX1BLRVlfQ1RYICpjdHgsIEVWUF9QS0VZX2dlbl9jYiAqY2IpOworRVZQX1BLRVlfZ2VuX2NiICpFVlBfUEtFWV9DVFhfZ2V0X2NiKEVWUF9QS0VZX0NUWCAqY3R4KTsKKworaW50IEVWUF9QS0VZX0NUWF9nZXRfa2V5Z2VuX2luZm8oRVZQX1BLRVlfQ1RYICpjdHgsIGludCBpZHgpOworCit2b2lkIEVWUF9QS0VZX21ldGhfc2V0X2luaXQoRVZQX1BLRVlfTUVUSE9EICpwbWV0aCwKKwlpbnQgKCppbml0KShFVlBfUEtFWV9DVFggKmN0eCkpOworCit2b2lkIEVWUF9QS0VZX21ldGhfc2V0X2NvcHkoRVZQX1BLRVlfTUVUSE9EICpwbWV0aCwKKwlpbnQgKCpjb3B5KShFVlBfUEtFWV9DVFggKmRzdCwgRVZQX1BLRVlfQ1RYICpzcmMpKTsKKwordm9pZCBFVlBfUEtFWV9tZXRoX3NldF9jbGVhbnVwKEVWUF9QS0VZX01FVEhPRCAqcG1ldGgsCisJdm9pZCAoKmNsZWFudXApKEVWUF9QS0VZX0NUWCAqY3R4KSk7CisKK3ZvaWQgRVZQX1BLRVlfbWV0aF9zZXRfcGFyYW1nZW4oRVZQX1BLRVlfTUVUSE9EICpwbWV0aCwKKwlpbnQgKCpwYXJhbWdlbl9pbml0KShFVlBfUEtFWV9DVFggKmN0eCksCisJaW50ICgqcGFyYW1nZW4pKEVWUF9QS0VZX0NUWCAqY3R4LCBFVlBfUEtFWSAqcGtleSkpOworCit2b2lkIEVWUF9QS0VZX21ldGhfc2V0X2tleWdlbihFVlBfUEtFWV9NRVRIT0QgKnBtZXRoLAorCWludCAoKmtleWdlbl9pbml0KShFVlBfUEtFWV9DVFggKmN0eCksCisJaW50ICgqa2V5Z2VuKShFVlBfUEtFWV9DVFggKmN0eCwgRVZQX1BLRVkgKnBrZXkpKTsKKwordm9pZCBFVlBfUEtFWV9tZXRoX3NldF9zaWduKEVWUF9QS0VZX01FVEhPRCAqcG1ldGgsCisJaW50ICgqc2lnbl9pbml0KShFVlBfUEtFWV9DVFggKmN0eCksCisJaW50ICgqc2lnbikoRVZQX1BLRVlfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKnNpZywgc2l6ZV90ICpzaWdsZW4sCisJCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnRicywgc2l6ZV90IHRic2xlbikpOworCit2b2lkIEVWUF9QS0VZX21ldGhfc2V0X3ZlcmlmeShFVlBfUEtFWV9NRVRIT0QgKnBtZXRoLAorCWludCAoKnZlcmlmeV9pbml0KShFVlBfUEtFWV9DVFggKmN0eCksCisJaW50ICgqdmVyaWZ5KShFVlBfUEtFWV9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2lnLCBzaXplX3Qgc2lnbGVuLAorCQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICp0YnMsIHNpemVfdCB0YnNsZW4pKTsKKwordm9pZCBFVlBfUEtFWV9tZXRoX3NldF92ZXJpZnlfcmVjb3ZlcihFVlBfUEtFWV9NRVRIT0QgKnBtZXRoLAorCWludCAoKnZlcmlmeV9yZWNvdmVyX2luaXQpKEVWUF9QS0VZX0NUWCAqY3R4KSwKKwlpbnQgKCp2ZXJpZnlfcmVjb3ZlcikoRVZQX1BLRVlfQ1RYICpjdHgsCisJCQkJCXVuc2lnbmVkIGNoYXIgKnNpZywgc2l6ZV90ICpzaWdsZW4sCisJCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnRicywgc2l6ZV90IHRic2xlbikpOworCit2b2lkIEVWUF9QS0VZX21ldGhfc2V0X3NpZ25jdHgoRVZQX1BLRVlfTUVUSE9EICpwbWV0aCwKKwlpbnQgKCpzaWduY3R4X2luaXQpKEVWUF9QS0VZX0NUWCAqY3R4LCBFVlBfTURfQ1RYICptY3R4KSwKKwlpbnQgKCpzaWduY3R4KShFVlBfUEtFWV9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqc2lnLCBzaXplX3QgKnNpZ2xlbiwKKwkJCQkJRVZQX01EX0NUWCAqbWN0eCkpOworCit2b2lkIEVWUF9QS0VZX21ldGhfc2V0X3ZlcmlmeWN0eChFVlBfUEtFWV9NRVRIT0QgKnBtZXRoLAorCWludCAoKnZlcmlmeWN0eF9pbml0KShFVlBfUEtFWV9DVFggKmN0eCwgRVZQX01EX0NUWCAqbWN0eCksCisJaW50ICgqdmVyaWZ5Y3R4KShFVlBfUEtFWV9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2lnLGludCBzaWdsZW4sCisJCQkJCUVWUF9NRF9DVFggKm1jdHgpKTsKKwordm9pZCBFVlBfUEtFWV9tZXRoX3NldF9lbmNyeXB0KEVWUF9QS0VZX01FVEhPRCAqcG1ldGgsCisJaW50ICgqZW5jcnlwdF9pbml0KShFVlBfUEtFWV9DVFggKmN0eCksCisJaW50ICgqZW5jcnlwdGZuKShFVlBfUEtFWV9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3QgKm91dGxlbiwKKwkJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBpbmxlbikpOworCit2b2lkIEVWUF9QS0VZX21ldGhfc2V0X2RlY3J5cHQoRVZQX1BLRVlfTUVUSE9EICpwbWV0aCwKKwlpbnQgKCpkZWNyeXB0X2luaXQpKEVWUF9QS0VZX0NUWCAqY3R4KSwKKwlpbnQgKCpkZWNyeXB0KShFVlBfUEtFWV9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3QgKm91dGxlbiwKKwkJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBpbmxlbikpOworCit2b2lkIEVWUF9QS0VZX21ldGhfc2V0X2Rlcml2ZShFVlBfUEtFWV9NRVRIT0QgKnBtZXRoLAorCWludCAoKmRlcml2ZV9pbml0KShFVlBfUEtFWV9DVFggKmN0eCksCisJaW50ICgqZGVyaXZlKShFVlBfUEtFWV9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqa2V5LCBzaXplX3QgKmtleWxlbikpOworCit2b2lkIEVWUF9QS0VZX21ldGhfc2V0X2N0cmwoRVZQX1BLRVlfTUVUSE9EICpwbWV0aCwKKwlpbnQgKCpjdHJsKShFVlBfUEtFWV9DVFggKmN0eCwgaW50IHR5cGUsIGludCBwMSwgdm9pZCAqcDIpLAorCWludCAoKmN0cmxfc3RyKShFVlBfUEtFWV9DVFggKmN0eCwKKwkJCQkJY29uc3QgY2hhciAqdHlwZSwgY29uc3QgY2hhciAqdmFsdWUpKTsKIAogLyogQkVHSU4gRVJST1IgQ09ERVMgKi8KIC8qIFRoZSBmb2xsb3dpbmcgbGluZXMgYXJlIGF1dG8gZ2VuZXJhdGVkIGJ5IHRoZSBzY3JpcHQgbWtlcnIucGwuIEFueSBjaGFuZ2VzCkBAIC05NTYsNDYgKzExOTEsNjYgQEAKIAogLyogRnVuY3Rpb24gY29kZXMuICovCiAjZGVmaW5lIEVWUF9GX0FFU19JTklUX0tFWQkJCQkgMTMzCi0jZGVmaW5lIEVWUF9GX0FMR19NT0RVTEVfSU5JVAkJCQkgMTM4CiAjZGVmaW5lIEVWUF9GX0NBTUVMTElBX0lOSVRfS0VZCQkJCSAxNTkKICNkZWZpbmUgRVZQX0ZfRDJJX1BLRVkJCQkJCSAxMDAKLSNkZWZpbmUgRVZQX0ZfRE9fRVZQX0VOQ19FTkdJTkUJCQkJIDE0MAotI2RlZmluZSBFVlBfRl9ET19FVlBfRU5DX0VOR0lORV9GVUxMCQkJIDE0MQotI2RlZmluZSBFVlBfRl9ET19FVlBfTURfRU5HSU5FCQkJCSAxMzkKLSNkZWZpbmUgRVZQX0ZfRE9fRVZQX01EX0VOR0lORV9GVUxMCQkJIDE0MgorI2RlZmluZSBFVlBfRl9ET19TSUdWRVJfSU5JVAkJCQkgMTYxCiAjZGVmaW5lIEVWUF9GX0RTQVBLRVkyUEtDUzgJCQkJIDEzNAogI2RlZmluZSBFVlBfRl9EU0FfUEtFWTJQS0NTOAkJCQkgMTM1CiAjZGVmaW5lIEVWUF9GX0VDRFNBX1BLRVkyUEtDUzgJCQkJIDEyOQogI2RlZmluZSBFVlBfRl9FQ0tFWV9QS0VZMlBLQ1M4CQkJCSAxMzIKLSNkZWZpbmUgRVZQX0ZfRVZQX0NJUEhFUklOSVQJCQkJIDEzNwogI2RlZmluZSBFVlBfRl9FVlBfQ0lQSEVSSU5JVF9FWAkJCQkgMTIzCisjZGVmaW5lIEVWUF9GX0VWUF9DSVBIRVJfQ1RYX0NPUFkJCQkgMTYzCiAjZGVmaW5lIEVWUF9GX0VWUF9DSVBIRVJfQ1RYX0NUUkwJCQkgMTI0CiAjZGVmaW5lIEVWUF9GX0VWUF9DSVBIRVJfQ1RYX1NFVF9LRVlfTEVOR1RICQkgMTIyCiAjZGVmaW5lIEVWUF9GX0VWUF9ERUNSWVBURklOQUxfRVgJCQkgMTAxCi0jZGVmaW5lIEVWUF9GX0VWUF9ESUdFU1RJTklUCQkJCSAxMzYKICNkZWZpbmUgRVZQX0ZfRVZQX0RJR0VTVElOSVRfRVgJCQkJIDEyOAogI2RlZmluZSBFVlBfRl9FVlBfRU5DUllQVEZJTkFMX0VYCQkJIDEyNwogI2RlZmluZSBFVlBfRl9FVlBfTURfQ1RYX0NPUFlfRVgJCQkgMTEwCisjZGVmaW5lIEVWUF9GX0VWUF9NRF9TSVpFCQkJCSAxNjIKICNkZWZpbmUgRVZQX0ZfRVZQX09QRU5JTklUCQkJCSAxMDIKICNkZWZpbmUgRVZQX0ZfRVZQX1BCRV9BTEdfQURECQkJCSAxMTUKKyNkZWZpbmUgRVZQX0ZfRVZQX1BCRV9BTEdfQUREX1RZUEUJCQkgMTYwCiAjZGVmaW5lIEVWUF9GX0VWUF9QQkVfQ0lQSEVSSU5JVAkJCSAxMTYKICNkZWZpbmUgRVZQX0ZfRVZQX1BLQ1M4MlBLRVkJCQkJIDExMQorI2RlZmluZSBFVlBfRl9FVlBfUEtDUzgyUEtFWV9CUk9LRU4JCQkgMTM2CiAjZGVmaW5lIEVWUF9GX0VWUF9QS0VZMlBLQ1M4X0JST0tFTgkJCSAxMTMKICNkZWZpbmUgRVZQX0ZfRVZQX1BLRVlfQ09QWV9QQVJBTUVURVJTCQkJIDEwMworI2RlZmluZSBFVlBfRl9FVlBfUEtFWV9DVFhfQ1RSTAkJCQkgMTM3CisjZGVmaW5lIEVWUF9GX0VWUF9QS0VZX0NUWF9DVFJMX1NUUgkJCSAxNTAKKyNkZWZpbmUgRVZQX0ZfRVZQX1BLRVlfQ1RYX0RVUAkJCQkgMTU2CiAjZGVmaW5lIEVWUF9GX0VWUF9QS0VZX0RFQ1JZUFQJCQkJIDEwNAorI2RlZmluZSBFVlBfRl9FVlBfUEtFWV9ERUNSWVBUX0lOSVQJCQkgMTM4CisjZGVmaW5lIEVWUF9GX0VWUF9QS0VZX0RFQ1JZUFRfT0xECQkJIDE1MQorI2RlZmluZSBFVlBfRl9FVlBfUEtFWV9ERVJJVkUJCQkJIDE1MworI2RlZmluZSBFVlBfRl9FVlBfUEtFWV9ERVJJVkVfSU5JVAkJCSAxNTQKKyNkZWZpbmUgRVZQX0ZfRVZQX1BLRVlfREVSSVZFX1NFVF9QRUVSCQkJIDE1NQogI2RlZmluZSBFVlBfRl9FVlBfUEtFWV9FTkNSWVBUCQkJCSAxMDUKKyNkZWZpbmUgRVZQX0ZfRVZQX1BLRVlfRU5DUllQVF9JTklUCQkJIDEzOQorI2RlZmluZSBFVlBfRl9FVlBfUEtFWV9FTkNSWVBUX09MRAkJCSAxNTIKICNkZWZpbmUgRVZQX0ZfRVZQX1BLRVlfR0VUMV9ESAkJCQkgMTE5CiAjZGVmaW5lIEVWUF9GX0VWUF9QS0VZX0dFVDFfRFNBCQkJCSAxMjAKICNkZWZpbmUgRVZQX0ZfRVZQX1BLRVlfR0VUMV9FQ0RTQQkJCSAxMzAKICNkZWZpbmUgRVZQX0ZfRVZQX1BLRVlfR0VUMV9FQ19LRVkJCQkgMTMxCiAjZGVmaW5lIEVWUF9GX0VWUF9QS0VZX0dFVDFfUlNBCQkJCSAxMjEKKyNkZWZpbmUgRVZQX0ZfRVZQX1BLRVlfS0VZR0VOCQkJCSAxNDYKKyNkZWZpbmUgRVZQX0ZfRVZQX1BLRVlfS0VZR0VOX0lOSVQJCQkgMTQ3CiAjZGVmaW5lIEVWUF9GX0VWUF9QS0VZX05FVwkJCQkgMTA2CisjZGVmaW5lIEVWUF9GX0VWUF9QS0VZX1BBUkFNR0VOCQkJCSAxNDgKKyNkZWZpbmUgRVZQX0ZfRVZQX1BLRVlfUEFSQU1HRU5fSU5JVAkJCSAxNDkKKyNkZWZpbmUgRVZQX0ZfRVZQX1BLRVlfU0lHTgkJCQkgMTQwCisjZGVmaW5lIEVWUF9GX0VWUF9QS0VZX1NJR05fSU5JVAkJCSAxNDEKKyNkZWZpbmUgRVZQX0ZfRVZQX1BLRVlfVkVSSUZZCQkJCSAxNDIKKyNkZWZpbmUgRVZQX0ZfRVZQX1BLRVlfVkVSSUZZX0lOSVQJCQkgMTQzCisjZGVmaW5lIEVWUF9GX0VWUF9QS0VZX1ZFUklGWV9SRUNPVkVSCQkJIDE0NAorI2RlZmluZSBFVlBfRl9FVlBfUEtFWV9WRVJJRllfUkVDT1ZFUl9JTklUCQkgMTQ1CiAjZGVmaW5lIEVWUF9GX0VWUF9SSUpOREFFTAkJCQkgMTI2CiAjZGVmaW5lIEVWUF9GX0VWUF9TSUdORklOQUwJCQkJIDEwNwogI2RlZmluZSBFVlBfRl9FVlBfVkVSSUZZRklOQUwJCQkJIDEwOAorI2RlZmluZSBFVlBfRl9JTlRfQ1RYX05FVwkJCQkgMTU3CiAjZGVmaW5lIEVWUF9GX1BLQ1M1X1BCRV9LRVlJVkdFTgkJCSAxMTcKICNkZWZpbmUgRVZQX0ZfUEtDUzVfVjJfUEJFX0tFWUlWR0VOCQkJIDExOAogI2RlZmluZSBFVlBfRl9QS0NTOF9TRVRfQlJPS0VOCQkJCSAxMTIKKyNkZWZpbmUgRVZQX0ZfUEtFWV9TRVRfVFlQRQkJCQkgMTU4CiAjZGVmaW5lIEVWUF9GX1JDMl9NQUdJQ19UT19NRVRICQkJCSAxMDkKICNkZWZpbmUgRVZQX0ZfUkM1X0NUUkwJCQkJCSAxMjUKIApAQCAtMTAwNyw0MSArMTI2Miw1MiBAQAogI2RlZmluZSBFVlBfUl9CQURfS0VZX0xFTkdUSAkJCQkgMTM3CiAjZGVmaW5lIEVWUF9SX0JOX0RFQ09ERV9FUlJPUgkJCQkgMTEyCiAjZGVmaW5lIEVWUF9SX0JOX1BVQktFWV9FUlJPUgkJCQkgMTEzCisjZGVmaW5lIEVWUF9SX0JVRkZFUl9UT09fU01BTEwJCQkJIDE1NQogI2RlZmluZSBFVlBfUl9DQU1FTExJQV9LRVlfU0VUVVBfRkFJTEVECQkJIDE1NwogI2RlZmluZSBFVlBfUl9DSVBIRVJfUEFSQU1FVEVSX0VSUk9SCQkJIDEyMgorI2RlZmluZSBFVlBfUl9DT01NQU5EX05PVF9TVVBQT1JURUQJCQkgMTQ3CiAjZGVmaW5lIEVWUF9SX0NUUkxfTk9UX0lNUExFTUVOVEVECQkJIDEzMgogI2RlZmluZSBFVlBfUl9DVFJMX09QRVJBVElPTl9OT1RfSU1QTEVNRU5URUQJCSAxMzMKICNkZWZpbmUgRVZQX1JfREFUQV9OT1RfTVVMVElQTEVfT0ZfQkxPQ0tfTEVOR1RICQkgMTM4CiAjZGVmaW5lIEVWUF9SX0RFQ09ERV9FUlJPUgkJCQkgMTE0CiAjZGVmaW5lIEVWUF9SX0RJRkZFUkVOVF9LRVlfVFlQRVMJCQkgMTAxCi0jZGVmaW5lIEVWUF9SX0RJU0FCTEVEX0ZPUl9GSVBTCQkJCSAxNDQKKyNkZWZpbmUgRVZQX1JfRElGRkVSRU5UX1BBUkFNRVRFUlMJCQkgMTUzCiAjZGVmaW5lIEVWUF9SX0VOQ09ERV9FUlJPUgkJCQkgMTE1Ci0jZGVmaW5lIEVWUF9SX0VSUk9SX0xPQURJTkdfU0VDVElPTgkJCSAxNDUKLSNkZWZpbmUgRVZQX1JfRVJST1JfU0VUVElOR19GSVBTX01PREUJCQkgMTQ2CiAjZGVmaW5lIEVWUF9SX0VWUF9QQkVfQ0lQSEVSSU5JVF9FUlJPUgkJCSAxMTkKICNkZWZpbmUgRVZQX1JfRVhQRUNUSU5HX0FOX1JTQV9LRVkJCQkgMTI3CiAjZGVmaW5lIEVWUF9SX0VYUEVDVElOR19BX0RIX0tFWQkJCSAxMjgKICNkZWZpbmUgRVZQX1JfRVhQRUNUSU5HX0FfRFNBX0tFWQkJCSAxMjkKICNkZWZpbmUgRVZQX1JfRVhQRUNUSU5HX0FfRUNEU0FfS0VZCQkJIDE0MQogI2RlZmluZSBFVlBfUl9FWFBFQ1RJTkdfQV9FQ19LRVkJCQkgMTQyCi0jZGVmaW5lIEVWUF9SX0ZJUFNfTU9ERV9OT1RfU1VQUE9SVEVECQkJIDE0NwogI2RlZmluZSBFVlBfUl9JTklUSUFMSVpBVElPTl9FUlJPUgkJCSAxMzQKICNkZWZpbmUgRVZQX1JfSU5QVVRfTk9UX0lOSVRJQUxJWkVECQkJIDExMQotI2RlZmluZSBFVlBfUl9JTlZBTElEX0ZJUFNfTU9ERQkJCQkgMTQ4CisjZGVmaW5lIEVWUF9SX0lOVkFMSURfRElHRVNUCQkJCSAxNTIKICNkZWZpbmUgRVZQX1JfSU5WQUxJRF9LRVlfTEVOR1RICQkJIDEzMAorI2RlZmluZSBFVlBfUl9JTlZBTElEX09QRVJBVElPTgkJCQkgMTQ4CiAjZGVmaW5lIEVWUF9SX0lWX1RPT19MQVJHRQkJCQkgMTAyCiAjZGVmaW5lIEVWUF9SX0tFWUdFTl9GQUlMVVJFCQkJCSAxMjAKKyNkZWZpbmUgRVZQX1JfTUVTU0FHRV9ESUdFU1RfSVNfTlVMTAkJCSAxNTkKKyNkZWZpbmUgRVZQX1JfTUVUSE9EX05PVF9TVVBQT1JURUQJCQkgMTQ0CiAjZGVmaW5lIEVWUF9SX01JU1NJTkdfUEFSQU1FVEVSUwkJCSAxMDMKICNkZWZpbmUgRVZQX1JfTk9fQ0lQSEVSX1NFVAkJCQkgMTMxCisjZGVmaW5lIEVWUF9SX05PX0RFRkFVTFRfRElHRVNUCQkJCSAxNTgKICNkZWZpbmUgRVZQX1JfTk9fRElHRVNUX1NFVAkJCQkgMTM5CiAjZGVmaW5lIEVWUF9SX05PX0RTQV9QQVJBTUVURVJTCQkJCSAxMTYKKyNkZWZpbmUgRVZQX1JfTk9fS0VZX1NFVAkJCQkgMTU0CisjZGVmaW5lIEVWUF9SX05PX09QRVJBVElPTl9TRVQJCQkJIDE0OQogI2RlZmluZSBFVlBfUl9OT19TSUdOX0ZVTkNUSU9OX0NPTkZJR1VSRUQJCSAxMDQKICNkZWZpbmUgRVZQX1JfTk9fVkVSSUZZX0ZVTkNUSU9OX0NPTkZJR1VSRUQJCSAxMDUKKyNkZWZpbmUgRVZQX1JfT1BFUkFUSU9OX05PVF9TVVBQT1JURURfRk9SX1RISVNfS0VZVFlQRQkgMTUwCisjZGVmaW5lIEVWUF9SX09QRVJBVE9OX05PVF9JTklUSUFMSVpFRAkJCSAxNTEKICNkZWZpbmUgRVZQX1JfUEtDUzhfVU5LTk9XTl9CUk9LRU5fVFlQRQkJCSAxMTcKKyNkZWZpbmUgRVZQX1JfUFJJVkFURV9LRVlfREVDT0RFX0VSUk9SCQkJIDE0NQorI2RlZmluZSBFVlBfUl9QUklWQVRFX0tFWV9FTkNPREVfRVJST1IJCQkgMTQ2CiAjZGVmaW5lIEVWUF9SX1BVQkxJQ19LRVlfTk9UX1JTQQkJCSAxMDYKLSNkZWZpbmUgRVZQX1JfVU5LTk9XTl9PUFRJT04JCQkJIDE0OQorI2RlZmluZSBFVlBfUl9VTktOT1dOX0NJUEhFUgkJCQkgMTYwCisjZGVmaW5lIEVWUF9SX1VOS05PV05fRElHRVNUCQkJCSAxNjEKICNkZWZpbmUgRVZQX1JfVU5LTk9XTl9QQkVfQUxHT1JJVEhNCQkJIDEyMQogI2RlZmluZSBFVlBfUl9VTlNVUE9SVEVEX05VTUJFUl9PRl9ST1VORFMJCSAxMzUKKyNkZWZpbmUgRVZQX1JfVU5TVVBQT1JURURfQUxHT1JJVEhNCQkJIDE1NgogI2RlZmluZSBFVlBfUl9VTlNVUFBPUlRFRF9DSVBIRVIJCQkgMTA3CiAjZGVmaW5lIEVWUF9SX1VOU1VQUE9SVEVEX0tFWUxFTkdUSAkJCSAxMjMKICNkZWZpbmUgRVZQX1JfVU5TVVBQT1JURURfS0VZX0RFUklWQVRJT05fRlVOQ1RJT04JIDEyNApAQCAtMTA1MSw3ICsxMzE3LDYgQEAKICNkZWZpbmUgRVZQX1JfVU5TVVBQT1JURURfU0FMVF9UWVBFCQkJIDEyNgogI2RlZmluZSBFVlBfUl9XUk9OR19GSU5BTF9CTE9DS19MRU5HVEgJCQkgMTA5CiAjZGVmaW5lIEVWUF9SX1dST05HX1BVQkxJQ19LRVlfVFlQRQkJCSAxMTAKLSNkZWZpbmUgRVZQX1JfU0VFRF9LRVlfU0VUVVBfRkFJTEVECQkJIDE2MgogCiAjaWZkZWYgIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIGIvaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDJiZGNmMi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTYzICswLDAgQEAKLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0gKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0gKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0gKgotICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0gKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotICoKLSAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotICoKLSAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSAqICAgIGFja25vd2xlZGdtZW50OgotICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0gKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KLQotI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSNlcnJvciBGSVBTIGlzIGRpc2FibGVkLgotI2VuZGlmCi0KLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLQotI2lmZGVmICBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotc3RydWN0IGRzYV9zdDsKLXN0cnVjdCBldnBfcGtleV9zdDsKLXN0cnVjdCBlbnZfbWRfc3Q7Ci1zdHJ1Y3QgZXZwX2NpcGhlcl9zdDsKLXN0cnVjdCBldnBfY2lwaGVyX2N0eF9zdDsKLQotaW50IEZJUFNfbW9kZV9zZXQoaW50IG9ub2ZmKTsKLWludCBGSVBTX21vZGUodm9pZCk7Ci1jb25zdCB2b2lkICpGSVBTX3JhbmRfY2hlY2sodm9pZCk7Ci1pbnQgRklQU19zZWxmdGVzdF9mYWlsZWQodm9pZCk7Ci12b2lkIEZJUFNfc2VsZnRlc3RfY2hlY2sodm9pZCk7Ci12b2lkIEZJUFNfY29ycnVwdF9zaGExKHZvaWQpOwotaW50IEZJUFNfc2VsZnRlc3Rfc2hhMSh2b2lkKTsKLXZvaWQgRklQU19jb3JydXB0X2Flcyh2b2lkKTsKLWludCBGSVBTX3NlbGZ0ZXN0X2Flcyh2b2lkKTsKLXZvaWQgRklQU19jb3JydXB0X2Rlcyh2b2lkKTsKLWludCBGSVBTX3NlbGZ0ZXN0X2Rlcyh2b2lkKTsKLXZvaWQgRklQU19jb3JydXB0X3JzYSh2b2lkKTsKLXZvaWQgRklQU19jb3JydXB0X3JzYV9rZXlnZW4odm9pZCk7Ci1pbnQgRklQU19zZWxmdGVzdF9yc2Eodm9pZCk7Ci12b2lkIEZJUFNfY29ycnVwdF9kc2Eodm9pZCk7Ci12b2lkIEZJUFNfY29ycnVwdF9kc2Ffa2V5Z2VuKHZvaWQpOwotaW50IEZJUFNfc2VsZnRlc3RfZHNhKHZvaWQpOwotdm9pZCBGSVBTX2NvcnJ1cHRfcm5nKHZvaWQpOwotdm9pZCBGSVBTX3JuZ19zdGljayh2b2lkKTsKLWludCBGSVBTX3NlbGZ0ZXN0X3JuZyh2b2lkKTsKLWludCBGSVBTX3NlbGZ0ZXN0X2htYWModm9pZCk7Ci0KLWludCBmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3Qoc3RydWN0IGV2cF9wa2V5X3N0ICpwa2V5LAotCQkJY29uc3QgdW5zaWduZWQgY2hhciAqdGJzLCBpbnQgdGJzbGVuLAotCQkJY29uc3QgdW5zaWduZWQgY2hhciAqa2F0LCB1bnNpZ25lZCBpbnQga2F0bGVuLAotCQkJY29uc3Qgc3RydWN0IGVudl9tZF9zdCAqZGlnZXN0LCB1bnNpZ25lZCBpbnQgbWRfZmxhZ3MsCi0JCQljb25zdCBjaGFyICpmYWlsX3N0cik7Ci0KLWludCBmaXBzX2NpcGhlcl90ZXN0KHN0cnVjdCBldnBfY2lwaGVyX2N0eF9zdCAqY3R4LAotCQkJY29uc3Qgc3RydWN0IGV2cF9jaXBoZXJfc3QgKmNpcGhlciwKLQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKLQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LAotCQkJY29uc3QgdW5zaWduZWQgY2hhciAqcGxhaW50ZXh0LAotCQkJY29uc3QgdW5zaWduZWQgY2hhciAqY2lwaGVydGV4dCwKLQkJCWludCBsZW4pOwotCi0vKiBCRUdJTiBFUlJPUiBDT0RFUyAqLwotLyogVGhlIGZvbGxvd2luZyBsaW5lcyBhcmUgYXV0byBnZW5lcmF0ZWQgYnkgdGhlIHNjcmlwdCBta2Vyci5wbC4gQW55IGNoYW5nZXMKLSAqIG1hZGUgYWZ0ZXIgdGhpcyBwb2ludCBtYXkgYmUgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgc2NyaXB0IGlzIG5leHQgcnVuLgotICovCi12b2lkIEVSUl9sb2FkX0ZJUFNfc3RyaW5ncyh2b2lkKTsKLQotLyogRXJyb3IgY29kZXMgZm9yIHRoZSBGSVBTIGZ1bmN0aW9ucy4gKi8KLQotLyogRnVuY3Rpb24gY29kZXMuICovCi0jZGVmaW5lIEZJUFNfRl9ESF9CVUlMVElOX0dFTlBBUkFNUwkJCSAxMDAKLSNkZWZpbmUgRklQU19GX0RTQV9CVUlMVElOX1BBUkFNR0VOCQkJIDEwMQotI2RlZmluZSBGSVBTX0ZfRFNBX0RPX1NJR04JCQkJIDEwMgotI2RlZmluZSBGSVBTX0ZfRFNBX0RPX1ZFUklGWQkJCQkgMTAzCi0jZGVmaW5lIEZJUFNfRl9FVlBfQ0lQSEVSSU5JVF9FWAkJCSAxMjQKLSNkZWZpbmUgRklQU19GX0VWUF9ESUdFU1RJTklUX0VYCQkJIDEyNQotI2RlZmluZSBGSVBTX0ZfRklQU19DSEVDS19EU0EJCQkJIDEwNAotI2RlZmluZSBGSVBTX0ZfRklQU19DSEVDS19JTkNPUkVfRklOR0VSUFJJTlQJCSAxMDUKLSNkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tfUlNBCQkJCSAxMDYKLSNkZWZpbmUgRklQU19GX0ZJUFNfRFNBX0NIRUNLCQkJCSAxMDcKLSNkZWZpbmUgRklQU19GX0ZJUFNfTU9ERV9TRVQJCQkJIDEwOAotI2RlZmluZSBGSVBTX0ZfRklQU19QS0VZX1NJR05BVFVSRV9URVNUCQkJIDEwOQotI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVMJCQkgMTEwCi0jZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0RFUwkJCSAxMTEKLSNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfRFNBCQkJIDExMgotI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9ITUFDCQkJIDExMwotI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9STkcJCQkgMTE0Ci0jZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX1NIQTEJCQkgMTE1Ci0jZGVmaW5lIEZJUFNfRl9IQVNIX0ZJTkFMCQkJCSAxMjMKLSNkZWZpbmUgRklQU19GX1JTQV9CVUlMVElOX0tFWUdFTgkJCSAxMTYKLSNkZWZpbmUgRklQU19GX1JTQV9FQVlfUFJJVkFURV9ERUNSWVBUCQkJIDExNwotI2RlZmluZSBGSVBTX0ZfUlNBX0VBWV9QUklWQVRFX0VOQ1JZUFQJCQkgMTE4Ci0jZGVmaW5lIEZJUFNfRl9SU0FfRUFZX1BVQkxJQ19ERUNSWVBUCQkJIDExOQotI2RlZmluZSBGSVBTX0ZfUlNBX0VBWV9QVUJMSUNfRU5DUllQVAkJCSAxMjAKLSNkZWZpbmUgRklQU19GX1JTQV9YOTMxX0dFTkVSQVRFX0tFWV9FWAkJCSAxMjEKLSNkZWZpbmUgRklQU19GX1NTTEVBWV9SQU5EX0JZVEVTCQkJIDEyMgotCi0vKiBSZWFzb24gY29kZXMuICovCi0jZGVmaW5lIEZJUFNfUl9DQU5OT1RfUkVBRF9FWEUJCQkJIDEwMwotI2RlZmluZSBGSVBTX1JfQ0FOTk9UX1JFQURfRVhFX0RJR0VTVAkJCSAxMDQKLSNkZWZpbmUgRklQU19SX0NPTlRSQURJQ1RJTkdfRVZJREVOQ0UJCQkgMTE0Ci0jZGVmaW5lIEZJUFNfUl9FWEVfRElHRVNUX0RPRVNfTk9UX01BVENICQkgMTA1Ci0jZGVmaW5lIEZJUFNfUl9GSU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSAkJIDExMAotI2RlZmluZSBGSVBTX1JfRklOR0VSUFJJTlRfRE9FU19OT1RfTUFUQ0hfTk9OUElDX1JFTE9DQVRFRCAxMTEKLSNkZWZpbmUgRklQU19SX0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01BVENIX1NFR01FTlRfQUxJQVNJTkcgMTEyCi0jZGVmaW5lIEZJUFNfUl9GSVBTX01PREVfQUxSRUFEWV9TRVQJCQkgMTAyCi0jZGVmaW5lIEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRAkJCSAxMDYKLSNkZWZpbmUgRklQU19SX0lOVkFMSURfS0VZX0xFTkdUSAkJCSAxMDkKLSNkZWZpbmUgRklQU19SX0tFWV9UT09fU0hPUlQJCQkJIDEwOAotI2RlZmluZSBGSVBTX1JfTk9OX0ZJUFNfTUVUSE9ECQkJCSAxMDAKLSNkZWZpbmUgRklQU19SX1BBSVJXSVNFX1RFU1RfRkFJTEVECQkJIDEwNwotI2RlZmluZSBGSVBTX1JfUlNBX0RFQ1JZUFRfRVJST1IJCQkgMTE1Ci0jZGVmaW5lIEZJUFNfUl9SU0FfRU5DUllQVF9FUlJPUgkJCSAxMTYKLSNkZWZpbmUgRklQU19SX1NFTEZURVNUX0ZBSUxFRAkJCQkgMTAxCi0jZGVmaW5lIEZJUFNfUl9URVNUX0ZBSUxVUkUJCQkJIDExNwotI2RlZmluZSBGSVBTX1JfVU5TVVBQT1JURURfUExBVEZPUk0JCQkgMTEzCi0KLSNpZmRlZiAgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmggYi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExNzVhYWYuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0gKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSAqCi0gKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0gKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0gKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0gKgotICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0gKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0gKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0gKgotICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotICogICAgYWNrbm93bGVkZ21lbnQ6Ci0gKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0gKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqLwotCi0jaWZuZGVmIEhFQURFUl9GSVBTX1JBTkRfSAotI2RlZmluZSBIRUFERVJfRklQU19SQU5EX0gKLQotI2luY2x1ZGUgImRlcy5oIgotCi0jaWZkZWYgT1BFTlNTTF9GSVBTCi0KLSNpZmRlZiAgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi0KLWludCBGSVBTX3JhbmRfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIEZJUFNfUkFORF9TSVpFX1Qga2V5bGVuKTsKLWludCBGSVBTX3JhbmRfc2VlZChjb25zdCB2b2lkICpidWYsIEZJUFNfUkFORF9TSVpFX1QgbnVtKTsKLWludCBGSVBTX3JhbmRfYnl0ZXModW5zaWduZWQgY2hhciAqb3V0LCBGSVBTX1JBTkRfU0laRV9UIG91dGxlbik7Ci0KLWludCBGSVBTX3JhbmRfdGVzdF9tb2RlKHZvaWQpOwotdm9pZCBGSVBTX3JhbmRfcmVzZXQodm9pZCk7Ci1pbnQgRklQU19yYW5kX3NldF9kdCh1bnNpZ25lZCBjaGFyICpkdCk7Ci0KLWludCBGSVBTX3JhbmRfc3RhdHVzKHZvaWQpOwotCi1jb25zdCBSQU5EX01FVEhPRCAqRklQU19yYW5kX21ldGhvZCh2b2lkKTsKLQotI2lmZGVmICBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0jZW5kaWYKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVuc3NsL2htYWMuaCBiL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgKaW5kZXggZmMzOGZmYi4uMWJlMDAyMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9vcGVuc3NsL2htYWMuaAorKysgYi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCkBAIC05MCwxNSArOTAsMTYgQEAKIAogI2RlZmluZSBITUFDX2NsZWFudXAoY3R4KSBITUFDX0NUWF9jbGVhbnVwKGN0eCkgLyogZGVwcmVjYXRlZCAqLwogCi12b2lkIEhNQUNfSW5pdChITUFDX0NUWCAqY3R4LCBjb25zdCB2b2lkICprZXksIGludCBsZW4sCitpbnQgSE1BQ19Jbml0KEhNQUNfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmtleSwgaW50IGxlbiwKIAkgICAgICAgY29uc3QgRVZQX01EICptZCk7IC8qIGRlcHJlY2F0ZWQgKi8KLXZvaWQgSE1BQ19Jbml0X2V4KEhNQUNfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmtleSwgaW50IGxlbiwKK2ludCBITUFDX0luaXRfZXgoSE1BQ19DVFggKmN0eCwgY29uc3Qgdm9pZCAqa2V5LCBpbnQgbGVuLAogCQkgIGNvbnN0IEVWUF9NRCAqbWQsIEVOR0lORSAqaW1wbCk7Ci12b2lkIEhNQUNfVXBkYXRlKEhNQUNfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHNpemVfdCBsZW4pOwotdm9pZCBITUFDX0ZpbmFsKEhNQUNfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm1kLCB1bnNpZ25lZCBpbnQgKmxlbik7CitpbnQgSE1BQ19VcGRhdGUoSE1BQ19DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgc2l6ZV90IGxlbik7CitpbnQgSE1BQ19GaW5hbChITUFDX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICptZCwgdW5zaWduZWQgaW50ICpsZW4pOwogdW5zaWduZWQgY2hhciAqSE1BQyhjb25zdCBFVlBfTUQgKmV2cF9tZCwgY29uc3Qgdm9pZCAqa2V5LCBpbnQga2V5X2xlbiwKIAkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmQsIHNpemVfdCBuLCB1bnNpZ25lZCBjaGFyICptZCwKIAkJICAgIHVuc2lnbmVkIGludCAqbWRfbGVuKTsKK2ludCBITUFDX0NUWF9jb3B5KEhNQUNfQ1RYICpkY3R4LCBITUFDX0NUWCAqc2N0eCk7CiAKIHZvaWQgSE1BQ19DVFhfc2V0X2ZsYWdzKEhNQUNfQ1RYICpjdHgsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCBiL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCmluZGV4IGQzOTJkMGMuLmU3ZDg3NjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrKyBiL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCkBAIC05OCw0MiArOTgsNDIgQEAKICAqIG1hY3JvcyBpZiB0aGUgZnVuY3Rpb25zIGFyZSBzdHJpY3RseSBpbnRlcm5hbC4gKi8KIAogLyogRmlyc3Q6ICJoYXNoIiBmdW5jdGlvbnMgKi8KLSNkZWZpbmUgREVDTEFSRV9MSEFTSF9IQVNIX0ZOKGZfbmFtZSxvX3R5cGUpIFwKLQl1bnNpZ25lZCBsb25nIGZfbmFtZSMjX0xIQVNIX0hBU0goY29uc3Qgdm9pZCAqKTsKLSNkZWZpbmUgSU1QTEVNRU5UX0xIQVNIX0hBU0hfRk4oZl9uYW1lLG9fdHlwZSkgXAotCXVuc2lnbmVkIGxvbmcgZl9uYW1lIyNfTEhBU0hfSEFTSChjb25zdCB2b2lkICphcmcpIHsgXAotCQlvX3R5cGUgYSA9IChvX3R5cGUpYXJnOyBcCi0JCXJldHVybiBmX25hbWUoYSk7IH0KLSNkZWZpbmUgTEhBU0hfSEFTSF9GTihmX25hbWUpIGZfbmFtZSMjX0xIQVNIX0hBU0gKKyNkZWZpbmUgREVDTEFSRV9MSEFTSF9IQVNIX0ZOKG5hbWUsIG9fdHlwZSkgXAorCXVuc2lnbmVkIGxvbmcgbmFtZSMjX0xIQVNIX0hBU0goY29uc3Qgdm9pZCAqKTsKKyNkZWZpbmUgSU1QTEVNRU5UX0xIQVNIX0hBU0hfRk4obmFtZSwgb190eXBlKSBcCisJdW5zaWduZWQgbG9uZyBuYW1lIyNfTEhBU0hfSEFTSChjb25zdCB2b2lkICphcmcpIHsgXAorCQljb25zdCBvX3R5cGUgKmEgPSBhcmc7IFwKKwkJcmV0dXJuIG5hbWUjI19oYXNoKGEpOyB9CisjZGVmaW5lIExIQVNIX0hBU0hfRk4obmFtZSkgbmFtZSMjX0xIQVNIX0hBU0gKIAogLyogU2Vjb25kOiAiY29tcGFyZSIgZnVuY3Rpb25zICovCi0jZGVmaW5lIERFQ0xBUkVfTEhBU0hfQ09NUF9GTihmX25hbWUsb190eXBlKSBcCi0JaW50IGZfbmFtZSMjX0xIQVNIX0NPTVAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOwotI2RlZmluZSBJTVBMRU1FTlRfTEhBU0hfQ09NUF9GTihmX25hbWUsb190eXBlKSBcCi0JaW50IGZfbmFtZSMjX0xIQVNIX0NPTVAoY29uc3Qgdm9pZCAqYXJnMSwgY29uc3Qgdm9pZCAqYXJnMikgeyBcCi0JCW9fdHlwZSBhID0gKG9fdHlwZSlhcmcxOyBcCi0JCW9fdHlwZSBiID0gKG9fdHlwZSlhcmcyOyBcCi0JCXJldHVybiBmX25hbWUoYSxiKTsgfQotI2RlZmluZSBMSEFTSF9DT01QX0ZOKGZfbmFtZSkgZl9uYW1lIyNfTEhBU0hfQ09NUAorI2RlZmluZSBERUNMQVJFX0xIQVNIX0NPTVBfRk4obmFtZSwgb190eXBlKSBcCisJaW50IG5hbWUjI19MSEFTSF9DT01QKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKTsKKyNkZWZpbmUgSU1QTEVNRU5UX0xIQVNIX0NPTVBfRk4obmFtZSwgb190eXBlKSBcCisJaW50IG5hbWUjI19MSEFTSF9DT01QKGNvbnN0IHZvaWQgKmFyZzEsIGNvbnN0IHZvaWQgKmFyZzIpIHsgXAorCQljb25zdCBvX3R5cGUgKmEgPSBhcmcxOwkJICAgIFwKKwkJY29uc3Qgb190eXBlICpiID0gYXJnMjsgXAorCQlyZXR1cm4gbmFtZSMjX2NtcChhLGIpOyB9CisjZGVmaW5lIExIQVNIX0NPTVBfRk4obmFtZSkgbmFtZSMjX0xIQVNIX0NPTVAKIAogLyogVGhpcmQ6ICJkb2FsbCIgZnVuY3Rpb25zICovCi0jZGVmaW5lIERFQ0xBUkVfTEhBU0hfRE9BTExfRk4oZl9uYW1lLG9fdHlwZSkgXAotCXZvaWQgZl9uYW1lIyNfTEhBU0hfRE9BTEwodm9pZCAqKTsKLSNkZWZpbmUgSU1QTEVNRU5UX0xIQVNIX0RPQUxMX0ZOKGZfbmFtZSxvX3R5cGUpIFwKLQl2b2lkIGZfbmFtZSMjX0xIQVNIX0RPQUxMKHZvaWQgKmFyZykgeyBcCi0JCW9fdHlwZSBhID0gKG9fdHlwZSlhcmc7IFwKLQkJZl9uYW1lKGEpOyB9Ci0jZGVmaW5lIExIQVNIX0RPQUxMX0ZOKGZfbmFtZSkgZl9uYW1lIyNfTEhBU0hfRE9BTEwKKyNkZWZpbmUgREVDTEFSRV9MSEFTSF9ET0FMTF9GTihuYW1lLCBvX3R5cGUpIFwKKwl2b2lkIG5hbWUjI19MSEFTSF9ET0FMTCh2b2lkICopOworI2RlZmluZSBJTVBMRU1FTlRfTEhBU0hfRE9BTExfRk4obmFtZSwgb190eXBlKSBcCisJdm9pZCBuYW1lIyNfTEhBU0hfRE9BTEwodm9pZCAqYXJnKSB7IFwKKwkJb190eXBlICphID0gYXJnOyBcCisJCW5hbWUjI19kb2FsbChhKTsgfQorI2RlZmluZSBMSEFTSF9ET0FMTF9GTihuYW1lKSBuYW1lIyNfTEhBU0hfRE9BTEwKIAogLyogRm91cnRoOiAiZG9hbGxfYXJnIiBmdW5jdGlvbnMgKi8KLSNkZWZpbmUgREVDTEFSRV9MSEFTSF9ET0FMTF9BUkdfRk4oZl9uYW1lLG9fdHlwZSxhX3R5cGUpIFwKLQl2b2lkIGZfbmFtZSMjX0xIQVNIX0RPQUxMX0FSRyh2b2lkICosIHZvaWQgKik7Ci0jZGVmaW5lIElNUExFTUVOVF9MSEFTSF9ET0FMTF9BUkdfRk4oZl9uYW1lLG9fdHlwZSxhX3R5cGUpIFwKLQl2b2lkIGZfbmFtZSMjX0xIQVNIX0RPQUxMX0FSRyh2b2lkICphcmcxLCB2b2lkICphcmcyKSB7IFwKLQkJb190eXBlIGEgPSAob190eXBlKWFyZzE7IFwKLQkJYV90eXBlIGIgPSAoYV90eXBlKWFyZzI7IFwKLQkJZl9uYW1lKGEsYik7IH0KLSNkZWZpbmUgTEhBU0hfRE9BTExfQVJHX0ZOKGZfbmFtZSkgZl9uYW1lIyNfTEhBU0hfRE9BTExfQVJHCisjZGVmaW5lIERFQ0xBUkVfTEhBU0hfRE9BTExfQVJHX0ZOKG5hbWUsIG9fdHlwZSwgYV90eXBlKSBcCisJdm9pZCBuYW1lIyNfTEhBU0hfRE9BTExfQVJHKHZvaWQgKiwgdm9pZCAqKTsKKyNkZWZpbmUgSU1QTEVNRU5UX0xIQVNIX0RPQUxMX0FSR19GTihuYW1lLCBvX3R5cGUsIGFfdHlwZSkgXAorCXZvaWQgbmFtZSMjX0xIQVNIX0RPQUxMX0FSRyh2b2lkICphcmcxLCB2b2lkICphcmcyKSB7IFwKKwkJb190eXBlICphID0gYXJnMTsgXAorCQlhX3R5cGUgKmIgPSBhcmcyOyBcCisJCW5hbWUjI19kb2FsbF9hcmcoYSwgYik7IH0KKyNkZWZpbmUgTEhBU0hfRE9BTExfQVJHX0ZOKG5hbWUpIG5hbWUjI19MSEFTSF9ET0FMTF9BUkcKIAogdHlwZWRlZiBzdHJ1Y3QgbGhhc2hfc3QKIAl7CkBAIC0xNjMsNyArMTYzLDggQEAKIAl1bnNpZ25lZCBsb25nIG51bV9oYXNoX2NvbXBzOwogCiAJaW50IGVycm9yOwotCX0gTEhBU0g7CisJfSBfTEhBU0g7CS8qIERvIG5vdCB1c2UgX0xIQVNIIGRpcmVjdGx5LCB1c2UgTEhBU0hfT0YKKwkJCSAqIGFuZCBmcmllbmRzICovCiAKICNkZWZpbmUgTEhfTE9BRF9NVUxUCTI1NgogCkBAIC0xNzEsMjcgKzE3Miw2NyBAQAogICogaW4gbGhfaW5zZXJ0KCkuICovCiAjZGVmaW5lIGxoX2Vycm9yKGxoKQkoKGxoKS0+ZXJyb3IpCiAKLUxIQVNIICpsaF9uZXcoTEhBU0hfSEFTSF9GTl9UWVBFIGgsIExIQVNIX0NPTVBfRk5fVFlQRSBjKTsKLXZvaWQgbGhfZnJlZShMSEFTSCAqbGgpOwotdm9pZCAqbGhfaW5zZXJ0KExIQVNIICpsaCwgdm9pZCAqZGF0YSk7Ci12b2lkICpsaF9kZWxldGUoTEhBU0ggKmxoLCBjb25zdCB2b2lkICpkYXRhKTsKLXZvaWQgKmxoX3JldHJpZXZlKExIQVNIICpsaCwgY29uc3Qgdm9pZCAqZGF0YSk7Ci12b2lkIGxoX2RvYWxsKExIQVNIICpsaCwgTEhBU0hfRE9BTExfRk5fVFlQRSBmdW5jKTsKLXZvaWQgbGhfZG9hbGxfYXJnKExIQVNIICpsaCwgTEhBU0hfRE9BTExfQVJHX0ZOX1RZUEUgZnVuYywgdm9pZCAqYXJnKTsKK19MSEFTSCAqbGhfbmV3KExIQVNIX0hBU0hfRk5fVFlQRSBoLCBMSEFTSF9DT01QX0ZOX1RZUEUgYyk7Cit2b2lkIGxoX2ZyZWUoX0xIQVNIICpsaCk7Cit2b2lkICpsaF9pbnNlcnQoX0xIQVNIICpsaCwgdm9pZCAqZGF0YSk7Cit2b2lkICpsaF9kZWxldGUoX0xIQVNIICpsaCwgY29uc3Qgdm9pZCAqZGF0YSk7Cit2b2lkICpsaF9yZXRyaWV2ZShfTEhBU0ggKmxoLCBjb25zdCB2b2lkICpkYXRhKTsKK3ZvaWQgbGhfZG9hbGwoX0xIQVNIICpsaCwgTEhBU0hfRE9BTExfRk5fVFlQRSBmdW5jKTsKK3ZvaWQgbGhfZG9hbGxfYXJnKF9MSEFTSCAqbGgsIExIQVNIX0RPQUxMX0FSR19GTl9UWVBFIGZ1bmMsIHZvaWQgKmFyZyk7CiB1bnNpZ25lZCBsb25nIGxoX3N0cmhhc2goY29uc3QgY2hhciAqYyk7Ci11bnNpZ25lZCBsb25nIGxoX251bV9pdGVtcyhjb25zdCBMSEFTSCAqbGgpOwordW5zaWduZWQgbG9uZyBsaF9udW1faXRlbXMoY29uc3QgX0xIQVNIICpsaCk7CiAKICNpZm5kZWYgT1BFTlNTTF9OT19GUF9BUEkKLXZvaWQgbGhfc3RhdHMoY29uc3QgTEhBU0ggKmxoLCBGSUxFICpvdXQpOwotdm9pZCBsaF9ub2RlX3N0YXRzKGNvbnN0IExIQVNIICpsaCwgRklMRSAqb3V0KTsKLXZvaWQgbGhfbm9kZV91c2FnZV9zdGF0cyhjb25zdCBMSEFTSCAqbGgsIEZJTEUgKm91dCk7Cit2b2lkIGxoX3N0YXRzKGNvbnN0IF9MSEFTSCAqbGgsIEZJTEUgKm91dCk7Cit2b2lkIGxoX25vZGVfc3RhdHMoY29uc3QgX0xIQVNIICpsaCwgRklMRSAqb3V0KTsKK3ZvaWQgbGhfbm9kZV91c2FnZV9zdGF0cyhjb25zdCBfTEhBU0ggKmxoLCBGSUxFICpvdXQpOwogI2VuZGlmCiAKICNpZm5kZWYgT1BFTlNTTF9OT19CSU8KLXZvaWQgbGhfc3RhdHNfYmlvKGNvbnN0IExIQVNIICpsaCwgQklPICpvdXQpOwotdm9pZCBsaF9ub2RlX3N0YXRzX2Jpbyhjb25zdCBMSEFTSCAqbGgsIEJJTyAqb3V0KTsKLXZvaWQgbGhfbm9kZV91c2FnZV9zdGF0c19iaW8oY29uc3QgTEhBU0ggKmxoLCBCSU8gKm91dCk7Cit2b2lkIGxoX3N0YXRzX2Jpbyhjb25zdCBfTEhBU0ggKmxoLCBCSU8gKm91dCk7Cit2b2lkIGxoX25vZGVfc3RhdHNfYmlvKGNvbnN0IF9MSEFTSCAqbGgsIEJJTyAqb3V0KTsKK3ZvaWQgbGhfbm9kZV91c2FnZV9zdGF0c19iaW8oY29uc3QgX0xIQVNIICpsaCwgQklPICpvdXQpOwogI2VuZGlmCisKKy8qIFR5cGUgY2hlY2tpbmcuLi4gKi8KKworI2RlZmluZSBMSEFTSF9PRih0eXBlKSBzdHJ1Y3QgbGhhc2hfc3RfIyN0eXBlCisKKyNkZWZpbmUgREVDTEFSRV9MSEFTSF9PRih0eXBlKSBMSEFTSF9PRih0eXBlKSB7IGludCBkdW1teTsgfQorCisjZGVmaW5lIENIRUNLRURfTEhBU0hfT0YodHlwZSxsaCkgXAorICAoKF9MSEFTSCAqKUNIRUNLRURfUFRSX09GKExIQVNIX09GKHR5cGUpLGxoKSkKKworLyogRGVmaW5lIHdyYXBwZXIgZnVuY3Rpb25zLiAqLworI2RlZmluZSBMSE1fbGhfbmV3KHR5cGUsIG5hbWUpIFwKKyAgKChMSEFTSF9PRih0eXBlKSAqKWxoX25ldyhMSEFTSF9IQVNIX0ZOKG5hbWUpLCBMSEFTSF9DT01QX0ZOKG5hbWUpKSkKKyNkZWZpbmUgTEhNX2xoX2Vycm9yKHR5cGUsIGxoKSBcCisgIGxoX2Vycm9yKENIRUNLRURfTEhBU0hfT0YodHlwZSxsaCkpCisjZGVmaW5lIExITV9saF9pbnNlcnQodHlwZSwgbGgsIGluc3QpIFwKKyAgKCh0eXBlICopbGhfaW5zZXJ0KENIRUNLRURfTEhBU0hfT0YodHlwZSwgbGgpLCBcCisJCSAgICAgQ0hFQ0tFRF9QVFJfT0YodHlwZSwgaW5zdCkpKQorI2RlZmluZSBMSE1fbGhfcmV0cmlldmUodHlwZSwgbGgsIGluc3QpIFwKKyAgKCh0eXBlICopbGhfcmV0cmlldmUoQ0hFQ0tFRF9MSEFTSF9PRih0eXBlLCBsaCksIFwKKwkJICAgICAgIENIRUNLRURfUFRSX09GKHR5cGUsIGluc3QpKSkKKyNkZWZpbmUgTEhNX2xoX2RlbGV0ZSh0eXBlLCBsaCwgaW5zdCkgXAorICAoKHR5cGUgKilsaF9kZWxldGUoQ0hFQ0tFRF9MSEFTSF9PRih0eXBlLCBsaCksCQkJXAorCQkgICAgIENIRUNLRURfUFRSX09GKHR5cGUsIGluc3QpKSkKKyNkZWZpbmUgTEhNX2xoX2RvYWxsKHR5cGUsIGxoLGZuKSBsaF9kb2FsbChDSEVDS0VEX0xIQVNIX09GKHR5cGUsIGxoKSwgZm4pCisjZGVmaW5lIExITV9saF9kb2FsbF9hcmcodHlwZSwgbGgsIGZuLCBhcmdfdHlwZSwgYXJnKSBcCisgIGxoX2RvYWxsX2FyZyhDSEVDS0VEX0xIQVNIX09GKHR5cGUsIGxoKSwgZm4sIENIRUNLRURfUFRSX09GKGFyZ190eXBlLCBhcmcpKQorI2RlZmluZSBMSE1fbGhfbnVtX2l0ZW1zKHR5cGUsIGxoKSBsaF9udW1faXRlbXMoQ0hFQ0tFRF9MSEFTSF9PRih0eXBlLCBsaCkpCisjZGVmaW5lIExITV9saF9kb3duX2xvYWQodHlwZSwgbGgpIChDSEVDS0VEX0xIQVNIX09GKHR5cGUsIGxoKS0+ZG93bl9sb2FkKQorI2RlZmluZSBMSE1fbGhfbm9kZV9zdGF0c19iaW8odHlwZSwgbGgsIG91dCkgXAorICBsaF9ub2RlX3N0YXRzX2JpbyhDSEVDS0VEX0xIQVNIX09GKHR5cGUsIGxoKSwgb3V0KQorI2RlZmluZSBMSE1fbGhfbm9kZV91c2FnZV9zdGF0c19iaW8odHlwZSwgbGgsIG91dCkgXAorICBsaF9ub2RlX3VzYWdlX3N0YXRzX2JpbyhDSEVDS0VEX0xIQVNIX09GKHR5cGUsIGxoKSwgb3V0KQorI2RlZmluZSBMSE1fbGhfc3RhdHNfYmlvKHR5cGUsIGxoLCBvdXQpIFwKKyAgbGhfc3RhdHNfYmlvKENIRUNLRURfTEhBU0hfT0YodHlwZSwgbGgpLCBvdXQpCisjZGVmaW5lIExITV9saF9mcmVlKHR5cGUsIGxoKSBsaF9mcmVlKENIRUNLRURfTEhBU0hfT0YodHlwZSwgbGgpKQorCitERUNMQVJFX0xIQVNIX09GKE9QRU5TU0xfU1RSSU5HKTsKK0RFQ0xBUkVfTEhBU0hfT0YoT1BFTlNTTF9DU1RSSU5HKTsKKwogI2lmZGVmICBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW5zc2wvbWQ0LmggYi9pbmNsdWRlL29wZW5zc2wvbWQ0LmgKaW5kZXggYmExZmU0YS4uYzNlZDliMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9vcGVuc3NsL21kNC5oCisrKyBiL2luY2x1ZGUvb3BlbnNzbC9tZDQuaApAQCAtNzcsNyArNzcsNyBAQAogICogISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEKICAqLwogCi0jaWYgZGVmaW5lZChPUEVOU1NMX1NZU19XSU4xNikgfHwgZGVmaW5lZChfX0xQMzJfXykKKyNpZiBkZWZpbmVkKF9fTFAzMl9fKQogI2RlZmluZSBNRDRfTE9ORyB1bnNpZ25lZCBsb25nCiAjZWxpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX0NSQVkpIHx8IGRlZmluZWQoX19JTFA2NF9fKQogI2RlZmluZSBNRDRfTE9ORyB1bnNpZ25lZCBsb25nCkBAIC0xMDUsOSArMTA1LDYgQEAKIAl1bnNpZ25lZCBpbnQgbnVtOwogCX0gTUQ0X0NUWDsKIAotI2lmZGVmIE9QRU5TU0xfRklQUwotaW50IHByaXZhdGVfTUQ0X0luaXQoTUQ0X0NUWCAqYyk7Ci0jZW5kaWYKIGludCBNRDRfSW5pdChNRDRfQ1RYICpjKTsKIGludCBNRDRfVXBkYXRlKE1ENF9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOwogaW50IE1ENF9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwgTUQ0X0NUWCAqYyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW5zc2wvbWQ1LmggYi9pbmNsdWRlL29wZW5zc2wvbWQ1LmgKaW5kZXggMDc2MWY4NC4uNGNiZjg0MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9vcGVuc3NsL21kNS5oCisrKyBiL2luY2x1ZGUvb3BlbnNzbC9tZDUuaApAQCAtNzcsNyArNzcsNyBAQAogICogISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEKICAqLwogCi0jaWYgZGVmaW5lZChPUEVOU1NMX1NZU19XSU4xNikgfHwgZGVmaW5lZChfX0xQMzJfXykKKyNpZiBkZWZpbmVkKF9fTFAzMl9fKQogI2RlZmluZSBNRDVfTE9ORyB1bnNpZ25lZCBsb25nCiAjZWxpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX0NSQVkpIHx8IGRlZmluZWQoX19JTFA2NF9fKQogI2RlZmluZSBNRDVfTE9ORyB1bnNpZ25lZCBsb25nCkBAIC0xMDUsOSArMTA1LDYgQEAKIAl1bnNpZ25lZCBpbnQgbnVtOwogCX0gTUQ1X0NUWDsKIAotI2lmZGVmIE9QRU5TU0xfRklQUwotaW50IHByaXZhdGVfTUQ1X0luaXQoTUQ1X0NUWCAqYyk7Ci0jZW5kaWYKIGludCBNRDVfSW5pdChNRDVfQ1RYICpjKTsKIGludCBNRDVfVXBkYXRlKE1ENV9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOwogaW50IE1ENV9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwgTUQ1X0NUWCAqYyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW5zc2wvbW9kZXMuaCBiL2luY2x1ZGUvb3BlbnNzbC9tb2Rlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmOGQ5N2QKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL29wZW5zc2wvbW9kZXMuaApAQCAtMCwwICsxLDU5IEBACisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChjKSAyMDA4IFRoZSBPcGVuU1NMIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmlnaHRzIGZvciByZWRpc3RyaWJ1dGlvbiBhbmQgdXNhZ2UgaW4gc291cmNlIGFuZCBiaW5hcnkKKyAqIGZvcm1zIGFyZSBncmFudGVkIGFjY29yZGluZyB0byB0aGUgT3BlblNTTCBsaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKwordHlwZWRlZiB2b2lkICgqYmxvY2sxMjhfZikoY29uc3QgdW5zaWduZWQgY2hhciBpblsxNl0sCisJCQl1bnNpZ25lZCBjaGFyIG91dFsxNl0sCisJCQljb25zdCB2b2lkICprZXkpOworCit0eXBlZGVmIHZvaWQgKCpjYmMxMjhfZikoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCXNpemVfdCBsZW4sIGNvbnN0IHZvaWQgKmtleSwKKwkJCXVuc2lnbmVkIGNoYXIgaXZlY1sxNl0sIGludCBlbmMpOworCit2b2lkIENSWVBUT19jYmMxMjhfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCQkJc2l6ZV90IGxlbiwgY29uc3Qgdm9pZCAqa2V5LAorCQkJdW5zaWduZWQgY2hhciBpdmVjWzE2XSwgYmxvY2sxMjhfZiBibG9jayk7Cit2b2lkIENSWVBUT19jYmMxMjhfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCQkJc2l6ZV90IGxlbiwgY29uc3Qgdm9pZCAqa2V5LAorCQkJdW5zaWduZWQgY2hhciBpdmVjWzE2XSwgYmxvY2sxMjhfZiBibG9jayk7CisKK3ZvaWQgQ1JZUFRPX2N0cjEyOF9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJCQlzaXplX3QgbGVuLCBjb25zdCB2b2lkICprZXksCisJCQl1bnNpZ25lZCBjaGFyIGl2ZWNbMTZdLCB1bnNpZ25lZCBjaGFyIGVjb3VudF9idWZbMTZdLAorCQkJdW5zaWduZWQgaW50ICpudW0sIGJsb2NrMTI4X2YgYmxvY2spOworCit2b2lkIENSWVBUT19vZmIxMjhfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCQkJc2l6ZV90IGxlbiwgY29uc3Qgdm9pZCAqa2V5LAorCQkJdW5zaWduZWQgY2hhciBpdmVjWzE2XSwgaW50ICpudW0sCisJCQlibG9jazEyOF9mIGJsb2NrKTsKKwordm9pZCBDUllQVE9fY2ZiMTI4X2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCXNpemVfdCBsZW4sIGNvbnN0IHZvaWQgKmtleSwKKwkJCXVuc2lnbmVkIGNoYXIgaXZlY1sxNl0sIGludCAqbnVtLAorCQkJaW50IGVuYywgYmxvY2sxMjhfZiBibG9jayk7Cit2b2lkIENSWVBUT19jZmIxMjhfOF9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJCQlzaXplX3QgbGVuZ3RoLCBjb25zdCB2b2lkICprZXksCisJCQl1bnNpZ25lZCBjaGFyIGl2ZWNbMTZdLCBpbnQgKm51bSwKKwkJCWludCBlbmMsIGJsb2NrMTI4X2YgYmxvY2spOwordm9pZCBDUllQVE9fY2ZiMTI4XzFfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCQkJc2l6ZV90IGJpdHMsIGNvbnN0IHZvaWQgKmtleSwKKwkJCXVuc2lnbmVkIGNoYXIgaXZlY1sxNl0sIGludCAqbnVtLAorCQkJaW50IGVuYywgYmxvY2sxMjhfZiBibG9jayk7CisKK3NpemVfdCBDUllQVE9fY3RzMTI4X2VuY3J5cHRfYmxvY2soY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCXNpemVfdCBsZW4sIGNvbnN0IHZvaWQgKmtleSwKKwkJCXVuc2lnbmVkIGNoYXIgaXZlY1sxNl0sIGJsb2NrMTI4X2YgYmxvY2spOworc2l6ZV90IENSWVBUT19jdHMxMjhfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCQkJc2l6ZV90IGxlbiwgY29uc3Qgdm9pZCAqa2V5LAorCQkJdW5zaWduZWQgY2hhciBpdmVjWzE2XSwgY2JjMTI4X2YgY2JjKTsKK3NpemVfdCBDUllQVE9fY3RzMTI4X2RlY3J5cHRfYmxvY2soY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCXNpemVfdCBsZW4sIGNvbnN0IHZvaWQgKmtleSwKKwkJCXVuc2lnbmVkIGNoYXIgaXZlY1sxNl0sIGJsb2NrMTI4X2YgYmxvY2spOworc2l6ZV90IENSWVBUT19jdHMxMjhfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCQkJc2l6ZV90IGxlbiwgY29uc3Qgdm9pZCAqa2V5LAorCQkJdW5zaWduZWQgY2hhciBpdmVjWzE2XSwgY2JjMTI4X2YgY2JjKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggYi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCmluZGV4IDcyNDJmNzYuLmJkMGVlNTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKysrIGIvaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaApAQCAtMTAxMSwxMCArMTAxMSw5MSBAQAogaW50CQlPQkpfbG4ybmlkKGNvbnN0IGNoYXIgKnMpOwogaW50CQlPQkpfc24ybmlkKGNvbnN0IGNoYXIgKnMpOwogaW50CQlPQkpfY21wKGNvbnN0IEFTTjFfT0JKRUNUICphLGNvbnN0IEFTTjFfT0JKRUNUICpiKTsKLWNvbnN0IGNoYXIgKglPQkpfYnNlYXJjaChjb25zdCBjaGFyICprZXksY29uc3QgY2hhciAqYmFzZSxpbnQgbnVtLGludCBzaXplLAotCWludCAoKmNtcCkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKTsKLWNvbnN0IGNoYXIgKglPQkpfYnNlYXJjaF9leChjb25zdCBjaGFyICprZXksY29uc3QgY2hhciAqYmFzZSxpbnQgbnVtLAotCWludCBzaXplLCBpbnQgKCpjbXApKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSwgaW50IGZsYWdzKTsKK2NvbnN0IHZvaWQgKglPQkpfYnNlYXJjaF8oY29uc3Qgdm9pZCAqa2V5LGNvbnN0IHZvaWQgKmJhc2UsaW50IG51bSxpbnQgc2l6ZSwKKwkJCSAgICAgaW50ICgqY21wKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpOworY29uc3Qgdm9pZCAqCU9CSl9ic2VhcmNoX2V4Xyhjb25zdCB2b2lkICprZXksY29uc3Qgdm9pZCAqYmFzZSxpbnQgbnVtLAorCQkJCWludCBzaXplLAorCQkJCWludCAoKmNtcCkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopLAorCQkJCWludCBmbGFncyk7CisKKyNkZWZpbmUgX0RFQ0xBUkVfT0JKX0JTRUFSQ0hfQ01QX0ZOKHNjb3BlLCB0eXBlMSwgdHlwZTIsIG5tKQlcCisgIHN0YXRpYyBpbnQgbm0jI19jbXBfQlNFQVJDSF9DTVBfRk4oY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOyBcCisgIHN0YXRpYyBpbnQgbm0jI19jbXAodHlwZTEgY29uc3QgKiwgdHlwZTIgY29uc3QgKik7IFwKKyAgc2NvcGUgdHlwZTIgKiBPQkpfYnNlYXJjaF8jI25tKHR5cGUxICprZXksIHR5cGUyIGNvbnN0ICpiYXNlLCBpbnQgbnVtKQorCisjZGVmaW5lIERFQ0xBUkVfT0JKX0JTRUFSQ0hfQ01QX0ZOKHR5cGUxLCB0eXBlMiwgY21wKQlcCisgIF9ERUNMQVJFX09CSl9CU0VBUkNIX0NNUF9GTihzdGF0aWMsIHR5cGUxLCB0eXBlMiwgY21wKQorI2RlZmluZSBERUNMQVJFX09CSl9CU0VBUkNIX0dMT0JBTF9DTVBfRk4odHlwZTEsIHR5cGUyLCBubSkJXAorICB0eXBlMiAqIE9CSl9ic2VhcmNoXyMjbm0odHlwZTEgKmtleSwgdHlwZTIgY29uc3QgKmJhc2UsIGludCBudW0pCisKKy8qCisgKiBVbnNvbHZlZCBwcm9ibGVtOiBpZiBhIHR5cGUgaXMgYWN0dWFsbHkgYSBwb2ludGVyIHR5cGUsIGxpa2UKKyAqIG5pZF90cmlwbGUgaXMsIHRoZW4gaXRzIGltcG9zc2libGUgdG8gZ2V0IGEgY29uc3Qgd2hlcmUgeW91IG5lZWQKKyAqIGl0LiBDb25zaWRlcjoKKyAqCisgKiB0eXBlZGVmIGludCBuaWRfdHJpcGxlWzNdOworICogY29uc3Qgdm9pZCAqYV87CisgKiBjb25zdCBuaWRfdHJpcGxlIGNvbnN0ICphID0gYV87CisgKgorICogVGhlIGFzc2lnbmVtZW50IGRpc2NhcmRzIGEgY29uc3QgYmVjYXVzZSB3aGF0IHlvdSByZWFsbHkgd2FudCBpczoKKyAqCisgKiBjb25zdCBpbnQgY29uc3QgKiBjb25zdCAqYSA9IGFfOworICoKKyAqIEJ1dCBpZiB5b3UgZG8gdGhhdCwgeW91IGxvc2UgdGhlIGZhY3QgdGhhdCBhIGlzIGFuIGFycmF5IG9mIDMgaW50cywKKyAqIHdoaWNoIGJyZWFrcyBjb21wYXJpc29uIGZ1bmN0aW9ucy4KKyAqCisgKiBUaHVzIHdlIGVuZCB1cCBoYXZpbmcgdG8gY2FzdCwgc2FkbHksIG9yIHVucGFjayB0aGUKKyAqIGRlY2xhcmF0aW9ucy4gT3IsIGFzIEkgZmluYWxseSBkaWQgaW4gdGhpcyBjYXNlLCBkZWxjYXJlIG5pZF90cmlwbGUKKyAqIHRvIGJlIGEgc3RydWN0LCB3aGljaCBpdCBzaG91bGQgaGF2ZSBiZWVuIGluIHRoZSBmaXJzdCBwbGFjZS4KKyAqCisgKiBCZW4sIEF1Z3VzdCAyMDA4LgorICoKKyAqIEFsc28sIHN0cmljdGx5IHNwZWFraW5nIG5vdCBhbGwgdHlwZXMgbmVlZCBiZSBjb25zdCwgYnV0IGhhbmRsaW5nCisgKiB0aGUgbm9uLWNvbnN0bmVzcyBtZWFucyBhIGxvdCBvZiBjb21wbGljYXRpb24sIGFuZCBpbiBwcmFjdGljZQorICogY29tcGFyaXNvbiByb3V0aW5lcyBkbyBhbHdheXMgbm90IHRvdWNoIHRoZWlyIGFyZ3VtZW50cy4KKyAqLworCisjZGVmaW5lIElNUExFTUVOVF9PQkpfQlNFQVJDSF9DTVBfRk4odHlwZTEsIHR5cGUyLCBubSkJXAorICBzdGF0aWMgaW50IG5tIyNfY21wX0JTRUFSQ0hfQ01QX0ZOKGNvbnN0IHZvaWQgKmFfLCBjb25zdCB2b2lkICpiXykJXAorICAgICAgeyBcCisgICAgICB0eXBlMSBjb25zdCAqYSA9IGFfOyBcCisgICAgICB0eXBlMiBjb25zdCAqYiA9IGJfOyBcCisgICAgICByZXR1cm4gbm0jI19jbXAoYSxiKTsgXAorICAgICAgfSBcCisgIHN0YXRpYyB0eXBlMiAqT0JKX2JzZWFyY2hfIyNubSh0eXBlMSAqa2V5LCB0eXBlMiBjb25zdCAqYmFzZSwgaW50IG51bSkgXAorICAgICAgeyBcCisgICAgICByZXR1cm4gKHR5cGUyICopT0JKX2JzZWFyY2hfKGtleSwgYmFzZSwgbnVtLCBzaXplb2YodHlwZTIpLCBcCisJCQkJCW5tIyNfY21wX0JTRUFSQ0hfQ01QX0ZOKTsgXAorICAgICAgfSBcCisgICAgICBleHRlcm4gdm9pZCBkdW1teV9wcm90b3R5cGUodm9pZCkKKworI2RlZmluZSBJTVBMRU1FTlRfT0JKX0JTRUFSQ0hfR0xPQkFMX0NNUF9GTih0eXBlMSwgdHlwZTIsIG5tKQlcCisgIHN0YXRpYyBpbnQgbm0jI19jbXBfQlNFQVJDSF9DTVBfRk4oY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfKQlcCisgICAgICB7IFwKKyAgICAgIHR5cGUxIGNvbnN0ICphID0gYV87IFwKKyAgICAgIHR5cGUyIGNvbnN0ICpiID0gYl87IFwKKyAgICAgIHJldHVybiBubSMjX2NtcChhLGIpOyBcCisgICAgICB9IFwKKyAgdHlwZTIgKk9CSl9ic2VhcmNoXyMjbm0odHlwZTEgKmtleSwgdHlwZTIgY29uc3QgKmJhc2UsIGludCBudW0pIFwKKyAgICAgIHsgXAorICAgICAgcmV0dXJuICh0eXBlMiAqKU9CSl9ic2VhcmNoXyhrZXksIGJhc2UsIG51bSwgc2l6ZW9mKHR5cGUyKSwgXAorCQkJCQlubSMjX2NtcF9CU0VBUkNIX0NNUF9GTik7IFwKKyAgICAgIH0gXAorICAgICAgZXh0ZXJuIHZvaWQgZHVtbXlfcHJvdG90eXBlKHZvaWQpCisKKyNkZWZpbmUgT0JKX2JzZWFyY2godHlwZTEsa2V5LHR5cGUyLGJhc2UsbnVtLGNtcCkJCQkgICAgICAgXAorICAoKHR5cGUyICopT0JKX2JzZWFyY2hfKENIRUNLRURfUFRSX09GKHR5cGUxLGtleSksQ0hFQ0tFRF9QVFJfT0YodHlwZTIsYmFzZSksIFwKKwkJCSBudW0sc2l6ZW9mKHR5cGUyKSwJCQkJXAorCQkJICgodm9pZClDSEVDS0VEX1BUUl9PRih0eXBlMSxjbXAjI190eXBlXzEpLAlcCisJCQkgICh2b2lkKUNIRUNLRURfUFRSX09GKHR5cGUyLGNtcCMjX3R5cGVfMiksCVwKKwkJCSAgY21wIyNfQlNFQVJDSF9DTVBfRk4pKSkKKworI2RlZmluZSBPQkpfYnNlYXJjaF9leCh0eXBlMSxrZXksdHlwZTIsYmFzZSxudW0sY21wLGZsYWdzKQkJCVwKKyAgKCh0eXBlMiAqKU9CSl9ic2VhcmNoX2V4XyhDSEVDS0VEX1BUUl9PRih0eXBlMSxrZXkpLENIRUNLRURfUFRSX09GKHR5cGUyLGJhc2UpLCBcCisJCQkgbnVtLHNpemVvZih0eXBlMiksCQkJCVwKKwkJCSAoKHZvaWQpQ0hFQ0tFRF9QVFJfT0YodHlwZTEsY21wIyNfdHlwZV8xKSwJXAorCQkJICAodm9pZCl0eXBlXzI9Q0hFQ0tFRF9QVFJfT0YodHlwZTIsY21wIyNfdHlwZV8yKSwgXAorCQkJICBjbXAjI19CU0VBUkNIX0NNUF9GTikpLGZsYWdzKQogCiBpbnQJCU9CSl9uZXdfbmlkKGludCBudW0pOwogaW50CQlPQkpfYWRkX29iamVjdChjb25zdCBBU04xX09CSkVDVCAqb2JqKTsKQEAgLTEwMjIsNiArMTEwMywxNCBAQAogdm9pZAkJT0JKX2NsZWFudXAodm9pZCApOwogaW50CQlPQkpfY3JlYXRlX29iamVjdHMoQklPICppbik7CiAKK2ludCBPQkpfZmluZF9zaWdpZF9hbGdzKGludCBzaWduaWQsIGludCAqcGRpZ19uaWQsIGludCAqcHBrZXlfbmlkKTsKK2ludCBPQkpfZmluZF9zaWdpZF9ieV9hbGdzKGludCAqcHNpZ25pZCwgaW50IGRpZ19uaWQsIGludCBwa2V5X25pZCk7CitpbnQgT0JKX2FkZF9zaWdpZChpbnQgc2lnbmlkLCBpbnQgZGlnX2lkLCBpbnQgcGtleV9pZCk7Cit2b2lkIE9CSl9zaWdpZF9mcmVlKHZvaWQpOworCitleHRlcm4gaW50IG9ial9jbGVhbnVwX2RlZmVyOwordm9pZCBjaGVja19kZWZlcihpbnQgbmlkKTsKKwogLyogQkVHSU4gRVJST1IgQ09ERVMgKi8KIC8qIFRoZSBmb2xsb3dpbmcgbGluZXMgYXJlIGF1dG8gZ2VuZXJhdGVkIGJ5IHRoZSBzY3JpcHQgbWtlcnIucGwuIEFueSBjaGFuZ2VzCiAgKiBtYWRlIGFmdGVyIHRoaXMgcG9pbnQgbWF5IGJlIG92ZXJ3cml0dGVuIHdoZW4gdGhlIHNjcmlwdCBpcyBuZXh0IHJ1bi4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnNzbC9vY3NwLmggYi9pbmNsdWRlL29wZW5zc2wvb2NzcC5oCmluZGV4IGEwNTc3YTcuLjMxZTQ1NzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvb3BlbnNzbC9vY3NwLmgKKysrIGIvaW5jbHVkZS9vcGVuc3NsL29jc3AuaApAQCAtNjQsNiArNjQsNyBAQAogI2lmbmRlZiBIRUFERVJfT0NTUF9ICiAjZGVmaW5lIEhFQURFUl9PQ1NQX0gKIAorI2luY2x1ZGUgPG9wZW5zc2wvb3NzbF90eXAuaD4KICNpbmNsdWRlIDxvcGVuc3NsL3g1MDkuaD4KICNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgogI2luY2x1ZGUgPG9wZW5zc2wvc2FmZXN0YWNrLmg+CkBAIC0zOTQsMTcgKzM5NSwyMCBAQAogI2RlZmluZSBBU04xX0JJVF9TVFJJTkdfZGlnZXN0KGRhdGEsdHlwZSxtZCxsZW4pIFwKIAlBU04xX2l0ZW1fZGlnZXN0KEFTTjFfSVRFTV9ycHRyKEFTTjFfQklUX1NUUklORyksdHlwZSxkYXRhLG1kLGxlbikKIAotI2RlZmluZSBPQ1NQX0NFUlRJRF9kdXAoY2lkKSBBU04xX2R1cF9vZihPQ1NQX0NFUlRJRCxpMmRfT0NTUF9DRVJUSUQsZDJpX09DU1BfQ0VSVElELGNpZCkKLQogI2RlZmluZSBPQ1NQX0NFUlRTVEFUVVNfZHVwKGNzKVwKICAgICAgICAgICAgICAgICAoT0NTUF9DRVJUU1RBVFVTKilBU04xX2R1cCgoaW50KCopKCkpaTJkX09DU1BfQ0VSVFNUQVRVUyxcCiAJCShjaGFyICooKikoKSlkMmlfT0NTUF9DRVJUU1RBVFVTLChjaGFyICopKGNzKSkKIAorT0NTUF9DRVJUSUQgKk9DU1BfQ0VSVElEX2R1cChPQ1NQX0NFUlRJRCAqaWQpOworCiBPQ1NQX1JFU1BPTlNFICpPQ1NQX3NlbmRyZXFfYmlvKEJJTyAqYiwgY2hhciAqcGF0aCwgT0NTUF9SRVFVRVNUICpyZXEpOwogT0NTUF9SRVFfQ1RYICpPQ1NQX3NlbmRyZXFfbmV3KEJJTyAqaW8sIGNoYXIgKnBhdGgsIE9DU1BfUkVRVUVTVCAqcmVxLAogCQkJCQkJCQlpbnQgbWF4bGluZSk7CiBpbnQgT0NTUF9zZW5kcmVxX25iaW8oT0NTUF9SRVNQT05TRSAqKnByZXNwLCBPQ1NQX1JFUV9DVFggKnJjdHgpOwogdm9pZCBPQ1NQX1JFUV9DVFhfZnJlZShPQ1NQX1JFUV9DVFggKnJjdHgpOworaW50IE9DU1BfUkVRX0NUWF9zZXQxX3JlcShPQ1NQX1JFUV9DVFggKnJjdHgsIE9DU1BfUkVRVUVTVCAqcmVxKTsKK2ludCBPQ1NQX1JFUV9DVFhfYWRkMV9oZWFkZXIoT0NTUF9SRVFfQ1RYICpyY3R4LAorCQljb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSk7CiAKIE9DU1BfQ0VSVElEICpPQ1NQX2NlcnRfdG9faWQoY29uc3QgRVZQX01EICpkZ3N0LCBYNTA5ICpzdWJqZWN0LCBYNTA5ICppc3N1ZXIpOwogCkBAIC00NzQsMTEgKzQ3OCw2IEBACiAJCQlYNTA5ICpzaWduZXIsIEVWUF9QS0VZICprZXksIGNvbnN0IEVWUF9NRCAqZGdzdCwKIAkJCVNUQUNLX09GKFg1MDkpICpjZXJ0cywgdW5zaWduZWQgbG9uZyBmbGFncyk7CiAKLUFTTjFfU1RSSU5HICpBU04xX1NUUklOR19lbmNvZGUoQVNOMV9TVFJJTkcgKnMsIGkyZF9vZl92b2lkICppMmQsCi0JCQkJdm9pZCAqZGF0YSwgU1RBQ0tfT0YoQVNOMV9PQkpFQ1QpICpzayk7Ci0jZGVmaW5lIEFTTjFfU1RSSU5HX2VuY29kZV9vZih0eXBlLHMsaTJkLGRhdGEsc2spIFwKLQlBU04xX1NUUklOR19lbmNvZGUocywgQ0hFQ0tFRF9JMkRfT0YodHlwZSwgaTJkKSwgZGF0YSwgc2spCi0KIFg1MDlfRVhURU5TSU9OICpPQ1NQX2NybElEX25ldyhjaGFyICp1cmwsIGxvbmcgKm4sIGNoYXIgKnRpbSk7CiAKIFg1MDlfRVhURU5TSU9OICpPQ1NQX2FjY2VwdF9yZXNwb25zZXNfbmV3KGNoYXIgKipvaWRzKTsKQEAgLTU0Nyw5ICs1NDYsOSBAQAogREVDTEFSRV9BU04xX0ZVTkNUSU9OUyhPQ1NQX0NSTElEKQogREVDTEFSRV9BU04xX0ZVTkNUSU9OUyhPQ1NQX1NFUlZJQ0VMT0MpCiAKLWNoYXIgKk9DU1BfcmVzcG9uc2Vfc3RhdHVzX3N0cihsb25nIHMpOwotY2hhciAqT0NTUF9jZXJ0X3N0YXR1c19zdHIobG9uZyBzKTsKLWNoYXIgKk9DU1BfY3JsX3JlYXNvbl9zdHIobG9uZyBzKTsKK2NvbnN0IGNoYXIgKk9DU1BfcmVzcG9uc2Vfc3RhdHVzX3N0cihsb25nIHMpOworY29uc3QgY2hhciAqT0NTUF9jZXJ0X3N0YXR1c19zdHIobG9uZyBzKTsKK2NvbnN0IGNoYXIgKk9DU1BfY3JsX3JlYXNvbl9zdHIobG9uZyBzKTsKIAogaW50IE9DU1BfUkVRVUVTVF9wcmludChCSU8gKmJwLCBPQ1NQX1JFUVVFU1QqIGEsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwogaW50IE9DU1BfUkVTUE9OU0VfcHJpbnQoQklPICpicCwgT0NTUF9SRVNQT05TRSogbywgdW5zaWduZWQgbG9uZyBmbGFncyk7CkBAIC01ODIsNyArNTgxLDggQEAKICNkZWZpbmUgT0NTUF9GX09DU1BfUkVRVUVTVF9WRVJJRlkJCQkgMTE2CiAjZGVmaW5lIE9DU1BfRl9PQ1NQX1JFU1BPTlNFX0dFVDFfQkFTSUMJCQkgMTExCiAjZGVmaW5lIE9DU1BfRl9PQ1NQX1NFTkRSRVFfQklPCQkJCSAxMTIKLSNkZWZpbmUgT0NTUF9GX1BBUlNFX0hUVFBfTElORTEJCQkJIDExNworI2RlZmluZSBPQ1NQX0ZfT0NTUF9TRU5EUkVRX05CSU8JCQkgMTE3CisjZGVmaW5lIE9DU1BfRl9QQVJTRV9IVFRQX0xJTkUxCQkJCSAxMTgKICNkZWZpbmUgT0NTUF9GX1JFUVVFU1RfVkVSSUZZCQkJCSAxMTMKIAogLyogUmVhc29uIGNvZGVzLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggYi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAppbmRleCA0YWEwMzMwLi4zOTRkMWQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorKysgYi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaApAQCAtOCwxOCArOCw5IEBACiAjaWZuZGVmIE9QRU5TU0xfTk9fQkYKICMgZGVmaW5lIE9QRU5TU0xfTk9fQkYKICNlbmRpZgotI2lmbmRlZiBPUEVOU1NMX05PX0NBTUVMTElBCi0jIGRlZmluZSBPUEVOU1NMX05PX0NBTUVMTElBCi0jZW5kaWYKLSNpZm5kZWYgT1BFTlNTTF9OT19DQVBJRU5HCi0jIGRlZmluZSBPUEVOU1NMX05PX0NBUElFTkcKLSNlbmRpZgogI2lmbmRlZiBPUEVOU1NMX05PX0NBU1QKICMgZGVmaW5lIE9QRU5TU0xfTk9fQ0FTVAogI2VuZGlmCi0jaWZuZGVmIE9QRU5TU0xfTk9fQ01TCi0jIGRlZmluZSBPUEVOU1NMX05PX0NNUwotI2VuZGlmCiAjaWZuZGVmIE9QRU5TU0xfTk9fR01QCiAjIGRlZmluZSBPUEVOU1NMX05PX0dNUAogI2VuZGlmCkBAIC0zNSw5ICsyNiw2IEBACiAjaWZuZGVmIE9QRU5TU0xfTk9fTUQyCiAjIGRlZmluZSBPUEVOU1NMX05PX01EMgogI2VuZGlmCi0jaWZuZGVmIE9QRU5TU0xfTk9fTURDMgotIyBkZWZpbmUgT1BFTlNTTF9OT19NREMyCi0jZW5kaWYKICNpZm5kZWYgT1BFTlNTTF9OT19SQzUKICMgZGVmaW5lIE9QRU5TU0xfTk9fUkM1CiAjZW5kaWYKQEAgLTQ3LDYgKzM1LDEyIEBACiAjaWZuZGVmIE9QRU5TU0xfTk9fU0VFRAogIyBkZWZpbmUgT1BFTlNTTF9OT19TRUVECiAjZW5kaWYKKyNpZm5kZWYgT1BFTlNTTF9OT19TVE9SRQorIyBkZWZpbmUgT1BFTlNTTF9OT19TVE9SRQorI2VuZGlmCisjaWZuZGVmIE9QRU5TU0xfTk9fV0hSTFBPT0wKKyMgZGVmaW5lIE9QRU5TU0xfTk9fV0hSTFBPT0wKKyNlbmRpZgogCiAjZW5kaWYgLyogT1BFTlNTTF9ET0lOR19NQUtFREVQRU5EICovCiAKQEAgLTY1LDE4ICs1OSw5IEBACiAjIGlmIGRlZmluZWQoT1BFTlNTTF9OT19CRikgJiYgIWRlZmluZWQoTk9fQkYpCiAjICBkZWZpbmUgTk9fQkYKICMgZW5kaWYKLSMgaWYgZGVmaW5lZChPUEVOU1NMX05PX0NBTUVMTElBKSAmJiAhZGVmaW5lZChOT19DQU1FTExJQSkKLSMgIGRlZmluZSBOT19DQU1FTExJQQotIyBlbmRpZgotIyBpZiBkZWZpbmVkKE9QRU5TU0xfTk9fQ0FQSUVORykgJiYgIWRlZmluZWQoTk9fQ0FQSUVORykKLSMgIGRlZmluZSBOT19DQVBJRU5HCi0jIGVuZGlmCiAjIGlmIGRlZmluZWQoT1BFTlNTTF9OT19DQVNUKSAmJiAhZGVmaW5lZChOT19DQVNUKQogIyAgZGVmaW5lIE5PX0NBU1QKICMgZW5kaWYKLSMgaWYgZGVmaW5lZChPUEVOU1NMX05PX0NNUykgJiYgIWRlZmluZWQoTk9fQ01TKQotIyAgZGVmaW5lIE5PX0NNUwotIyBlbmRpZgogIyBpZiBkZWZpbmVkKE9QRU5TU0xfTk9fR01QKSAmJiAhZGVmaW5lZChOT19HTVApCiAjICBkZWZpbmUgTk9fR01QCiAjIGVuZGlmCkBAIC05Miw5ICs3Nyw2IEBACiAjIGlmIGRlZmluZWQoT1BFTlNTTF9OT19NRDIpICYmICFkZWZpbmVkKE5PX01EMikKICMgIGRlZmluZSBOT19NRDIKICMgZW5kaWYKLSMgaWYgZGVmaW5lZChPUEVOU1NMX05PX01EQzIpICYmICFkZWZpbmVkKE5PX01EQzIpCi0jICBkZWZpbmUgTk9fTURDMgotIyBlbmRpZgogIyBpZiBkZWZpbmVkKE9QRU5TU0xfTk9fUkM1KSAmJiAhZGVmaW5lZChOT19SQzUpCiAjICBkZWZpbmUgTk9fUkM1CiAjIGVuZGlmCkBAIC0xMDQsMjUgKzg2LDE2IEBACiAjIGlmIGRlZmluZWQoT1BFTlNTTF9OT19TRUVEKSAmJiAhZGVmaW5lZChOT19TRUVEKQogIyAgZGVmaW5lIE5PX1NFRUQKICMgZW5kaWYKKyMgaWYgZGVmaW5lZChPUEVOU1NMX05PX1NUT1JFKSAmJiAhZGVmaW5lZChOT19TVE9SRSkKKyMgIGRlZmluZSBOT19TVE9SRQorIyBlbmRpZgorIyBpZiBkZWZpbmVkKE9QRU5TU0xfTk9fV0hSTFBPT0wpICYmICFkZWZpbmVkKE5PX1dIUkxQT09MKQorIyAgZGVmaW5lIE5PX1dIUkxQT09MCisjIGVuZGlmCiAjZW5kaWYKIAogLyogY3J5cHRvL29wZW5zc2xjb25mLmguaW4gKi8KIAotI2lmZGVmIE9QRU5TU0xfRE9JTkdfTUFLRURFUEVORAotCi0vKiBJbmNsdWRlIGFueSBzeW1ib2xzIGhlcmUgdGhhdCBoYXZlIHRvIGJlIGV4cGxpY2l0bHkgc2V0IHRvIGVuYWJsZSBhIGZlYXR1cmUKLSAqIHRoYXQgc2hvdWxkIGJlIHZpc2libGUgdG8gbWFrZWRlcGVuZC4KLSAqCi0gKiBbT3VyICJtYWtlIGRlcGVuZCIgZG9lc24ndCBhY3R1YWxseSBsb29rIGF0IHRoaXMsIHdlIHVzZSBhY3R1YWwgYnVpbGQgc2V0dGluZ3MKLSAqIGluc3RlYWQ7IHdlIHdhbnQgdG8gbWFrZSBpdCBlYXN5IHRvIHJlbW92ZSBzdWJkaXJlY3RvcmllcyB3aXRoIGRpc2FibGVkIGFsZ29yaXRobXMuXQotICovCi0KLSNpZm5kZWYgT1BFTlNTTF9GSVBTCi0jZGVmaW5lIE9QRU5TU0xfRklQUwotI2VuZGlmCi0KLSNlbmRpZgotCiAvKiBHZW5lcmF0ZSA4MDM4NiBjb2RlPyAqLwogI3VuZGVmIEkzODZfT05MWQogCkBAIC0xODYsMTQgKzE1OSw5IEBACiAvKiBTaG91bGQgd2UgZGVmaW5lIEJOX0RJVjJXIGhlcmU/ICovCiAKIC8qIE9ubHkgb25lIGZvciB0aGUgZm9sbG93aW5nIHNob3VsZCBiZSBkZWZpbmVkICovCi0vKiBUaGUgcHJpbWUgbnVtYmVyIGdlbmVyYXRpb24gc3R1ZmYgbWF5IG5vdCB3b3JrIHdoZW4KLSAqIEVJR0hUX0JJVCBidXQgSSBkb24ndCBjYXJlIHNpbmNlIEkndmUgb25seSB1c2VkIHRoaXMgbW9kZQotICogZm9yIGRlYnVnaW5nIHRoZSBiaWdudW0gbGlicmFyaWVzICovCiAjdW5kZWYgU0lYVFlfRk9VUl9CSVRfTE9ORwogI3VuZGVmIFNJWFRZX0ZPVVJfQklUCiAjZGVmaW5lIFRISVJUWV9UV09fQklUCi0jdW5kZWYgU0lYVEVFTl9CSVQKLSN1bmRlZiBFSUdIVF9CSVQKICNlbmRpZgogCiAjaWYgZGVmaW5lZChIRUFERVJfUkM0X0xPQ0xfSCkgJiYgIWRlZmluZWQoQ09ORklHX0hFQURFUl9SQzRfTE9DTF9IKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggYi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAppbmRleCAzZDc5NGQ5Li5jYmU1MjY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAorKysgYi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaApAQCAtMTIsNyArMTIsNyBAQAogICogMC45LjMtYmV0YTIgICAgMHgwMDkwMzAwMiAoc2FtZSBhcyAuLi5iZXRhMi1kZXYpCiAgKiAwLjkuMwkgIDB4MDA5MDMwMGYKICAqIDAuOS4zYQkgIDB4MDA5MDMwMWYKLSAqIDAuOS40CSAgMHgwMDkwNDAwZgorICogMC45LjQgCSAgMHgwMDkwNDAwZgogICogMS4yLjN6CSAgMHgxMDIwMzFhZgogICoKICAqIEZvciBjb250aW51aXR5IHJlYXNvbnMgKGJlY2F1c2UgMC45LjUgaXMgYWxyZWFkeSBvdXQsIGFuZCBpcyBjb2RlZApAQCAtMjUsMTEgKzI1LDExIEBACiAgKiAoUHJpb3IgdG8gMC45LjVhIGJldGExLCBhIGRpZmZlcmVudCBzY2hlbWUgd2FzIHVzZWQ6IE1NTk5GRlJCQiBmb3IKICAqICBtYWpvciBtaW5vciBmaXggZmluYWwgcGF0Y2gvYmV0YSkKICAqLwotI2RlZmluZSBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSCTB4MDA5MDgwZGZMCisjZGVmaW5lIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIJMHgxMDAwMDAwZkwKICNpZmRlZiBPUEVOU1NMX0ZJUFMKLSNkZWZpbmUgT1BFTlNTTF9WRVJTSU9OX1RFWFQJIk9wZW5TU0wgMC45LjhtLWZpcHMgMjUgRmViIDIwMTAiCisjZGVmaW5lIE9QRU5TU0xfVkVSU0lPTl9URVhUCSJPcGVuU1NMIDEuMC4wLWZpcHMgMjkgTWFyIDIwMTAiCiAjZWxzZQotI2RlZmluZSBPUEVOU1NMX1ZFUlNJT05fVEVYVAkiT3BlblNTTCAwLjkuOG0gMjUgRmViIDIwMTAiCisjZGVmaW5lIE9QRU5TU0xfVkVSU0lPTl9URVhUCSJPcGVuU1NMIDEuMC4wIDI5IE1hciAyMDEwIgogI2VuZGlmCiAjZGVmaW5lIE9QRU5TU0xfVkVSU0lPTl9QVEVYVAkiIHBhcnQgb2YgIiBPUEVOU1NMX1ZFUlNJT05fVEVYVAogCkBAIC04Myw3ICs4Myw3IEBACiAgKiBzaG91bGQgb25seSBrZWVwIHRoZSB2ZXJzaW9ucyB0aGF0IGFyZSBiaW5hcnkgY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50LgogICovCiAjZGVmaW5lIFNITElCX1ZFUlNJT05fSElTVE9SWSAiIgotI2RlZmluZSBTSExJQl9WRVJTSU9OX05VTUJFUiAiMC45LjgiCisjZGVmaW5lIFNITElCX1ZFUlNJT05fTlVNQkVSICIxLjAuMCIKIAogCiAjZW5kaWYgLyogSEVBREVSX09QRU5TU0xWX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIGIvaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKaW5kZXggMGU3YTM4MC4uMTJiZDcwMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKysrIGIvaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKQEAgLTk1LDYgKzk1LDggQEAKIHR5cGVkZWYgaW50IEFTTjFfTlVMTDsKICNlbmRpZgogCit0eXBlZGVmIHN0cnVjdCBhc24xX3BjdHhfc3QgQVNOMV9QQ1RYOworCiAjaWZkZWYgT1BFTlNTTF9TWVNfV0lOMzIKICN1bmRlZiBYNTA5X05BTUUKICN1bmRlZiBYNTA5X0VYVEVOU0lPTlMKQEAgLTEyMiw2ICsxMjQsMTEgQEAKIHR5cGVkZWYgc3RydWN0IGVudl9tZF9jdHhfc3QgRVZQX01EX0NUWDsKIHR5cGVkZWYgc3RydWN0IGV2cF9wa2V5X3N0IEVWUF9QS0VZOwogCit0eXBlZGVmIHN0cnVjdCBldnBfcGtleV9hc24xX21ldGhvZF9zdCBFVlBfUEtFWV9BU04xX01FVEhPRDsKKwordHlwZWRlZiBzdHJ1Y3QgZXZwX3BrZXlfbWV0aG9kX3N0IEVWUF9QS0VZX01FVEhPRDsKK3R5cGVkZWYgc3RydWN0IGV2cF9wa2V5X2N0eF9zdCBFVlBfUEtFWV9DVFg7CisKIHR5cGVkZWYgc3RydWN0IGRoX3N0IERIOwogdHlwZWRlZiBzdHJ1Y3QgZGhfbWV0aG9kIERIX01FVEhPRDsKIApAQCAtMTM5LDExICsxNDYsMTQgQEAKIHR5cGVkZWYgc3RydWN0IHg1MDlfc3QgWDUwOTsKIHR5cGVkZWYgc3RydWN0IFg1MDlfYWxnb3Jfc3QgWDUwOV9BTEdPUjsKIHR5cGVkZWYgc3RydWN0IFg1MDlfY3JsX3N0IFg1MDlfQ1JMOwordHlwZWRlZiBzdHJ1Y3QgeDUwOV9jcmxfbWV0aG9kX3N0IFg1MDlfQ1JMX01FVEhPRDsKK3R5cGVkZWYgc3RydWN0IHg1MDlfcmV2b2tlZF9zdCBYNTA5X1JFVk9LRUQ7CiB0eXBlZGVmIHN0cnVjdCBYNTA5X25hbWVfc3QgWDUwOV9OQU1FOwordHlwZWRlZiBzdHJ1Y3QgWDUwOV9wdWJrZXlfc3QgWDUwOV9QVUJLRVk7CiB0eXBlZGVmIHN0cnVjdCB4NTA5X3N0b3JlX3N0IFg1MDlfU1RPUkU7CiB0eXBlZGVmIHN0cnVjdCB4NTA5X3N0b3JlX2N0eF9zdCBYNTA5X1NUT1JFX0NUWDsKLXR5cGVkZWYgc3RydWN0IHNzbF9zdCBTU0w7Ci10eXBlZGVmIHN0cnVjdCBzc2xfY3R4X3N0IFNTTF9DVFg7CisKK3R5cGVkZWYgc3RydWN0IHBrY3M4X3ByaXZfa2V5X2luZm9fc3QgUEtDUzhfUFJJVl9LRVlfSU5GTzsKIAogdHlwZWRlZiBzdHJ1Y3QgdjNfZXh0X2N0eCBYNTA5VjNfQ1RYOwogdHlwZWRlZiBzdHJ1Y3QgY29uZl9zdCBDT05GOwpAQCAtMTU3LDEyICsxNjcsMTkgQEAKIHR5cGVkZWYgc3RydWN0IHN0X0VSUl9GTlMgRVJSX0ZOUzsKIAogdHlwZWRlZiBzdHJ1Y3QgZW5naW5lX3N0IEVOR0lORTsKK3R5cGVkZWYgc3RydWN0IHNzbF9zdCBTU0w7Cit0eXBlZGVmIHN0cnVjdCBzc2xfY3R4X3N0IFNTTF9DVFg7CiAKIHR5cGVkZWYgc3RydWN0IFg1MDlfUE9MSUNZX05PREVfc3QgWDUwOV9QT0xJQ1lfTk9ERTsKIHR5cGVkZWYgc3RydWN0IFg1MDlfUE9MSUNZX0xFVkVMX3N0IFg1MDlfUE9MSUNZX0xFVkVMOwogdHlwZWRlZiBzdHJ1Y3QgWDUwOV9QT0xJQ1lfVFJFRV9zdCBYNTA5X1BPTElDWV9UUkVFOwogdHlwZWRlZiBzdHJ1Y3QgWDUwOV9QT0xJQ1lfQ0FDSEVfc3QgWDUwOV9QT0xJQ1lfQ0FDSEU7CiAKK3R5cGVkZWYgc3RydWN0IEFVVEhPUklUWV9LRVlJRF9zdCBBVVRIT1JJVFlfS0VZSUQ7Cit0eXBlZGVmIHN0cnVjdCBESVNUX1BPSU5UX3N0IERJU1RfUE9JTlQ7Cit0eXBlZGVmIHN0cnVjdCBJU1NVSU5HX0RJU1RfUE9JTlRfc3QgSVNTVUlOR19ESVNUX1BPSU5UOwordHlwZWRlZiBzdHJ1Y3QgTkFNRV9DT05TVFJBSU5UU19zdCBOQU1FX0NPTlNUUkFJTlRTOworCiAgIC8qIElmIHBsYWNlZCBpbiBwa2NzMTIuaCwgd2UgZW5kIHVwIHdpdGggYSBjaXJjdWxhciBkZXBlbmN5IHdpdGggcGtjczcuaCAqLwogI2RlZmluZSBERUNMQVJFX1BLQ1MxMl9TVEFDS19PRih0eXBlKSAvKiBOb3RoaW5nICovCiAjZGVmaW5lIElNUExFTUVOVF9QS0NTMTJfU1RBQ0tfT0YodHlwZSkgLyogTm90aGluZyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVuc3NsL3BlbS5oIGIvaW5jbHVkZS9vcGVuc3NsL3BlbS5oCmluZGV4IDZjMTkzZjEuLjIyMjMxYzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvb3BlbnNzbC9wZW0uaAorKysgYi9pbmNsdWRlL29wZW5zc2wvcGVtLmgKQEAgLTEzNCw2ICsxMzQsNyBAQAogI2RlZmluZSBQRU1fU1RSSU5HX0VDRFNBX1BVQkxJQyAiRUNEU0EgUFVCTElDIEtFWSIKICNkZWZpbmUgUEVNX1NUUklOR19FQ1BBUkFNRVRFUlMgIkVDIFBBUkFNRVRFUlMiCiAjZGVmaW5lIFBFTV9TVFJJTkdfRUNQUklWQVRFS0VZCSJFQyBQUklWQVRFIEtFWSIKKyNkZWZpbmUgUEVNX1NUUklOR19QQVJBTUVURVJTCSJQQVJBTUVURVJTIgogI2RlZmluZSBQRU1fU1RSSU5HX0NNUwkJIkNNUyIKIAogICAvKiBOb3RlIHRoYXQgdGhpcyBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGlzZWQgYnkgUEVNX1NlYWxJbml0IGFuZCBjbGVhbmVkIHVwCkBAIC0xODMsMTEgKzE4NCw4IEBACiAJaW50IG51bV9yZWNpcGllbnQ7CiAJUEVNX1VTRVIgKipyZWNpcGllbnQ7CiAKLSNpZm5kZWYgT1BFTlNTTF9OT19TVEFDSwotCVNUQUNLICp4NTA5X2NoYWluOwkvKiBjZXJ0aWZpY2F0ZSBjaGFpbiAqLwotI2Vsc2UKLQljaGFyICp4NTA5X2NoYWluOwkvKiBjZXJ0aWZpY2F0ZSBjaGFpbiAqLwotI2VuZGlmCisJLyogWFhYKGJlbik6IGRvbiN0IHRoaW5rIHRoaXMgaXMgdXNlZCEgCisJCVNUQUNLICp4NTA5X2NoYWluOwkvICogY2VydGlmaWNhdGUgY2hhaW4gKi8KIAlFVlBfTUQgKm1kOwkJLyogc2lnbmF0dXJlIHR5cGUgKi8KIAogCWludCBtZF9lbmM7CQkvKiBpcyB0aGUgbWQgZW5jcnlwdGVkIG9yIG5vdD8gKi8KQEAgLTIyNCwyOCArMjIyLDE5IEBACiAjZGVmaW5lIElNUExFTUVOVF9QRU1fcmVhZF9mcChuYW1lLCB0eXBlLCBzdHIsIGFzbjEpIFwKIHR5cGUgKlBFTV9yZWFkXyMjbmFtZShGSUxFICpmcCwgdHlwZSAqKngsIHBlbV9wYXNzd29yZF9jYiAqY2IsIHZvaWQgKnUpXAogeyBcCi0gICAgcmV0dXJuICh0eXBlKilQRU1fQVNOMV9yZWFkKENIRUNLRURfRDJJX09GKHR5cGUsIGQyaV8jI2FzbjEpLCBcCi0JCQkJc3RyLCBmcCwgXAotCQkJCUNIRUNLRURfUFBUUl9PRih0eXBlLCB4KSwgXAotCQkJCWNiLCB1KTsgXAorcmV0dXJuIFBFTV9BU04xX3JlYWQoKGQyaV9vZl92b2lkICopZDJpXyMjYXNuMSwgc3RyLGZwLCh2b2lkICoqKXgsY2IsdSk7IFwKIH0gCiAKICNkZWZpbmUgSU1QTEVNRU5UX1BFTV93cml0ZV9mcChuYW1lLCB0eXBlLCBzdHIsIGFzbjEpIFwKIGludCBQRU1fd3JpdGVfIyNuYW1lKEZJTEUgKmZwLCB0eXBlICp4KSBcCiB7IFwKLSAgICByZXR1cm4gUEVNX0FTTjFfd3JpdGUoQ0hFQ0tFRF9JMkRfT0YodHlwZSwgaTJkXyMjYXNuMSksIFwKLQkJCSAgc3RyLCBmcCwgXAotCQkJICBDSEVDS0VEX1BUUl9PRih0eXBlLCB4KSwgXAotCQkJICBOVUxMLCBOVUxMLCAwLCBOVUxMLCBOVUxMKTsgXAorcmV0dXJuIFBFTV9BU04xX3dyaXRlKChpMmRfb2Zfdm9pZCAqKWkyZF8jI2FzbjEsc3RyLGZwLHgsTlVMTCxOVUxMLDAsTlVMTCxOVUxMKTsgXAogfQogCiAjZGVmaW5lIElNUExFTUVOVF9QRU1fd3JpdGVfZnBfY29uc3QobmFtZSwgdHlwZSwgc3RyLCBhc24xKSBcCiBpbnQgUEVNX3dyaXRlXyMjbmFtZShGSUxFICpmcCwgY29uc3QgdHlwZSAqeCkgXAogeyBcCi0gICAgcmV0dXJuIFBFTV9BU04xX3dyaXRlKENIRUNLRURfSTJEX09GKGNvbnN0IHR5cGUsIGkyZF8jI2FzbjEpLCBcCi0JCQkgIHN0ciwgZnAsIFwKLQkJCSAgQ0hFQ0tFRF9QVFJfT0YoY29uc3QgdHlwZSwgeCksIFwKLQkJCSAgTlVMTCwgTlVMTCwgMCwgTlVMTCwgTlVMTCk7IFwKK3JldHVybiBQRU1fQVNOMV93cml0ZSgoaTJkX29mX3ZvaWQgKilpMmRfIyNhc24xLHN0cixmcCwodm9pZCAqKXgsTlVMTCxOVUxMLDAsTlVMTCxOVUxMKTsgXAogfQogCiAjZGVmaW5lIElNUExFTUVOVF9QRU1fd3JpdGVfY2JfZnAobmFtZSwgdHlwZSwgc3RyLCBhc24xKSBcCkBAIC0yNTMsMTAgKzI0Miw3IEBACiAJICAgICB1bnNpZ25lZCBjaGFyICprc3RyLCBpbnQga2xlbiwgcGVtX3Bhc3N3b3JkX2NiICpjYiwgXAogCQkgIHZvaWQgKnUpIFwKIAl7IFwKLQkgICAgcmV0dXJuIFBFTV9BU04xX3dyaXRlKENIRUNLRURfSTJEX09GKHR5cGUsIGkyZF8jI2FzbjEpLCBcCi0JCQkJICBzdHIsIGZwLCBcCi0JCQkJICBDSEVDS0VEX1BUUl9PRih0eXBlLCB4KSwgXAotCQkJCSAgZW5jLCBrc3RyLCBrbGVuLCBjYiwgdSk7IFwKKwlyZXR1cm4gUEVNX0FTTjFfd3JpdGUoKGkyZF9vZl92b2lkICopaTJkXyMjYXNuMSxzdHIsZnAseCxlbmMsa3N0cixrbGVuLGNiLHUpOyBcCiAJfQogCiAjZGVmaW5lIElNUExFTUVOVF9QRU1fd3JpdGVfY2JfZnBfY29uc3QobmFtZSwgdHlwZSwgc3RyLCBhc24xKSBcCkBAIC0yNjQsMTAgKzI1MCw3IEBACiAJICAgICB1bnNpZ25lZCBjaGFyICprc3RyLCBpbnQga2xlbiwgcGVtX3Bhc3N3b3JkX2NiICpjYiwgXAogCQkgIHZvaWQgKnUpIFwKIAl7IFwKLQkgICAgcmV0dXJuIFBFTV9BU04xX3dyaXRlKENIRUNLRURfSTJEX09GKGNvbnN0IHR5cGUsIGkyZF8jI2FzbjEpLCBcCi0JCQkJICBzdHIsIGZwLCBcCi0JCQkJICBDSEVDS0VEX1BUUl9PRihjb25zdCB0eXBlLCB4KSwgXAotCQkJCSAgZW5jLCBrc3RyLCBrbGVuLCBjYiwgdSk7IFwKKwlyZXR1cm4gUEVNX0FTTjFfd3JpdGUoKGkyZF9vZl92b2lkICopaTJkXyMjYXNuMSxzdHIsZnAseCxlbmMsa3N0cixrbGVuLGNiLHUpOyBcCiAJfQogCiAjZW5kaWYKQEAgLTI3NSw0OCArMjU4LDMzIEBACiAjZGVmaW5lIElNUExFTUVOVF9QRU1fcmVhZF9iaW8obmFtZSwgdHlwZSwgc3RyLCBhc24xKSBcCiB0eXBlICpQRU1fcmVhZF9iaW9fIyNuYW1lKEJJTyAqYnAsIHR5cGUgKip4LCBwZW1fcGFzc3dvcmRfY2IgKmNiLCB2b2lkICp1KVwKIHsgXAotICAgIHJldHVybiAodHlwZSopUEVNX0FTTjFfcmVhZF9iaW8oQ0hFQ0tFRF9EMklfT0YodHlwZSwgZDJpXyMjYXNuMSksIFwKLQkJCQkgICAgc3RyLCBicCwgXAotCQkJCSAgICBDSEVDS0VEX1BQVFJfT0YodHlwZSwgeCksIFwKLQkJCQkgICAgY2IsIHUpOyBcCityZXR1cm4gUEVNX0FTTjFfcmVhZF9iaW8oKGQyaV9vZl92b2lkICopZDJpXyMjYXNuMSwgc3RyLGJwLCh2b2lkICoqKXgsY2IsdSk7IFwKIH0KIAogI2RlZmluZSBJTVBMRU1FTlRfUEVNX3dyaXRlX2JpbyhuYW1lLCB0eXBlLCBzdHIsIGFzbjEpIFwKIGludCBQRU1fd3JpdGVfYmlvXyMjbmFtZShCSU8gKmJwLCB0eXBlICp4KSBcCiB7IFwKLSAgICByZXR1cm4gUEVNX0FTTjFfd3JpdGVfYmlvKENIRUNLRURfSTJEX09GKHR5cGUsIGkyZF8jI2FzbjEpLCBcCi0JCQkgICAgICBzdHIsIGJwLCBcCi0JCQkgICAgICBDSEVDS0VEX1BUUl9PRih0eXBlLCB4KSwgXAotCQkJICAgICAgTlVMTCwgTlVMTCwgMCwgTlVMTCwgTlVMTCk7IFwKK3JldHVybiBQRU1fQVNOMV93cml0ZV9iaW8oKGkyZF9vZl92b2lkICopaTJkXyMjYXNuMSxzdHIsYnAseCxOVUxMLE5VTEwsMCxOVUxMLE5VTEwpOyBcCiB9CiAKICNkZWZpbmUgSU1QTEVNRU5UX1BFTV93cml0ZV9iaW9fY29uc3QobmFtZSwgdHlwZSwgc3RyLCBhc24xKSBcCiBpbnQgUEVNX3dyaXRlX2Jpb18jI25hbWUoQklPICpicCwgY29uc3QgdHlwZSAqeCkgXAogeyBcCi0gICAgcmV0dXJuIFBFTV9BU04xX3dyaXRlX2JpbyhDSEVDS0VEX0kyRF9PRihjb25zdCB0eXBlLCBpMmRfIyNhc24xKSwgXAotCQkJICAgICAgc3RyLCBicCwgXAotCQkJICAgICAgQ0hFQ0tFRF9QVFJfT0YoY29uc3QgdHlwZSwgeCksIFwKLQkJCSAgICAgIE5VTEwsIE5VTEwsIDAsIE5VTEwsIE5VTEwpOyBcCityZXR1cm4gUEVNX0FTTjFfd3JpdGVfYmlvKChpMmRfb2Zfdm9pZCAqKWkyZF8jI2FzbjEsc3RyLGJwLCh2b2lkICopeCxOVUxMLE5VTEwsMCxOVUxMLE5VTEwpOyBcCiB9CiAKICNkZWZpbmUgSU1QTEVNRU5UX1BFTV93cml0ZV9jYl9iaW8obmFtZSwgdHlwZSwgc3RyLCBhc24xKSBcCiBpbnQgUEVNX3dyaXRlX2Jpb18jI25hbWUoQklPICpicCwgdHlwZSAqeCwgY29uc3QgRVZQX0NJUEhFUiAqZW5jLCBcCiAJICAgICB1bnNpZ25lZCBjaGFyICprc3RyLCBpbnQga2xlbiwgcGVtX3Bhc3N3b3JkX2NiICpjYiwgdm9pZCAqdSkgXAogCXsgXAotCSAgICByZXR1cm4gUEVNX0FTTjFfd3JpdGVfYmlvKENIRUNLRURfSTJEX09GKHR5cGUsIGkyZF8jI2FzbjEpLCBcCi0JCQkJICAgICAgc3RyLCBicCwgXAotCQkJCSAgICAgIENIRUNLRURfUFRSX09GKHR5cGUsIHgpLCBcCi0JCQkJICAgICAgZW5jLCBrc3RyLCBrbGVuLCBjYiwgdSk7IFwKKwlyZXR1cm4gUEVNX0FTTjFfd3JpdGVfYmlvKChpMmRfb2Zfdm9pZCAqKWkyZF8jI2FzbjEsc3RyLGJwLHgsZW5jLGtzdHIsa2xlbixjYix1KTsgXAogCX0KIAogI2RlZmluZSBJTVBMRU1FTlRfUEVNX3dyaXRlX2NiX2Jpb19jb25zdChuYW1lLCB0eXBlLCBzdHIsIGFzbjEpIFwKIGludCBQRU1fd3JpdGVfYmlvXyMjbmFtZShCSU8gKmJwLCB0eXBlICp4LCBjb25zdCBFVlBfQ0lQSEVSICplbmMsIFwKIAkgICAgIHVuc2lnbmVkIGNoYXIgKmtzdHIsIGludCBrbGVuLCBwZW1fcGFzc3dvcmRfY2IgKmNiLCB2b2lkICp1KSBcCiAJeyBcCi0JICAgIHJldHVybiBQRU1fQVNOMV93cml0ZV9iaW8oQ0hFQ0tFRF9JMkRfT0YoY29uc3QgdHlwZSwgaTJkXyMjYXNuMSksIFwKLQkJCQkgICAgICBzdHIsIGJwLCBcCi0JCQkJICAgICAgQ0hFQ0tFRF9QVFJfT0YoY29uc3QgdHlwZSwgeCksIFwKLQkJCQkgICAgICBlbmMsIGtzdHIsIGtsZW4sIGNiLCB1KTsgXAorCXJldHVybiBQRU1fQVNOMV93cml0ZV9iaW8oKGkyZF9vZl92b2lkICopaTJkXyMjYXNuMSxzdHIsYnAsKHZvaWQgKil4LGVuYyxrc3RyLGtsZW4sY2IsdSk7IFwKIAl9CiAKICNkZWZpbmUgSU1QTEVNRU5UX1BFTV93cml0ZShuYW1lLCB0eXBlLCBzdHIsIGFzbjEpIFwKQEAgLTM1MywxMSArMzIxLDEwIEBACiAKIC8qIFRoZXNlIGFyZSB0aGUgc2FtZSBleGNlcHQgdGhleSBhcmUgZm9yIHRoZSBkZWNsYXJhdGlvbnMgKi8KIAotI2lmIGRlZmluZWQoT1BFTlNTTF9TWVNfV0lOMTYpIHx8IGRlZmluZWQoT1BFTlNTTF9OT19GUF9BUEkpCisjaWYgZGVmaW5lZChPUEVOU1NMX05PX0ZQX0FQSSkKIAogI2RlZmluZSBERUNMQVJFX1BFTV9yZWFkX2ZwKG5hbWUsIHR5cGUpIC8qKi8KICNkZWZpbmUgREVDTEFSRV9QRU1fd3JpdGVfZnAobmFtZSwgdHlwZSkgLyoqLwotI2RlZmluZSBERUNMQVJFX1BFTV93cml0ZV9mcF9jb25zdChuYW1lLCB0eXBlKSAvKiovCiAjZGVmaW5lIERFQ0xBUkVfUEVNX3dyaXRlX2NiX2ZwKG5hbWUsIHR5cGUpIC8qKi8KIAogI2Vsc2UKQEAgLTQyOCwxMzggKzM5NSw2IEBACiAJREVDTEFSRV9QRU1fcmVhZChuYW1lLCB0eXBlKSBcCiAJREVDTEFSRV9QRU1fd3JpdGVfY2IobmFtZSwgdHlwZSkKIAotI2lmZGVmIFNTTEVBWV9NQUNST1MKLQotI2RlZmluZSBQRU1fd3JpdGVfU1NMX1NFU1NJT04oZnAseCkgXAotCQlQRU1fQVNOMV93cml0ZSgoaW50ICgqKSgpKWkyZF9TU0xfU0VTU0lPTiwgXAotCQkJUEVNX1NUUklOR19TU0xfU0VTU0lPTixmcCwgKGNoYXIgKil4LCBOVUxMLE5VTEwsMCxOVUxMLE5VTEwpCi0jZGVmaW5lIFBFTV93cml0ZV9YNTA5KGZwLHgpIFwKLQkJUEVNX0FTTjFfd3JpdGUoKGludCAoKikoKSlpMmRfWDUwOSxQRU1fU1RSSU5HX1g1MDksZnAsIFwKLQkJCShjaGFyICopeCwgTlVMTCxOVUxMLDAsTlVMTCxOVUxMKQotI2RlZmluZSBQRU1fd3JpdGVfWDUwOV9SRVEoZnAseCkgUEVNX0FTTjFfd3JpdGUoIFwKLQkJKGludCAoKikoKSlpMmRfWDUwOV9SRVEsUEVNX1NUUklOR19YNTA5X1JFUSxmcCwoY2hhciAqKXgsIFwKLQkJCU5VTEwsTlVMTCwwLE5VTEwsTlVMTCkKLSNkZWZpbmUgUEVNX3dyaXRlX1g1MDlfQ1JMKGZwLHgpIFwKLQkJUEVNX0FTTjFfd3JpdGUoKGludCAoKikoKSlpMmRfWDUwOV9DUkwsUEVNX1NUUklOR19YNTA5X0NSTCwgXAotCQkJZnAsKGNoYXIgKil4LCBOVUxMLE5VTEwsMCxOVUxMLE5VTEwpCi0jZGVmaW5lCVBFTV93cml0ZV9SU0FQcml2YXRlS2V5KGZwLHgsZW5jLGtzdHIsa2xlbixjYix1KSBcCi0JCVBFTV9BU04xX3dyaXRlKChpbnQgKCopKCkpaTJkX1JTQVByaXZhdGVLZXksUEVNX1NUUklOR19SU0EsZnAsXAotCQkJKGNoYXIgKil4LGVuYyxrc3RyLGtsZW4sY2IsdSkKLSNkZWZpbmUJUEVNX3dyaXRlX1JTQVB1YmxpY0tleShmcCx4KSBcCi0JCVBFTV9BU04xX3dyaXRlKChpbnQgKCopKCkpaTJkX1JTQVB1YmxpY0tleSxcCi0JCQlQRU1fU1RSSU5HX1JTQV9QVUJMSUMsZnAsKGNoYXIgKil4LE5VTEwsTlVMTCwwLE5VTEwsTlVMTCkKLSNkZWZpbmUJUEVNX3dyaXRlX0RTQVByaXZhdGVLZXkoZnAseCxlbmMsa3N0cixrbGVuLGNiLHUpIFwKLQkJUEVNX0FTTjFfd3JpdGUoKGludCAoKikoKSlpMmRfRFNBUHJpdmF0ZUtleSxQRU1fU1RSSU5HX0RTQSxmcCxcCi0JCQkoY2hhciAqKXgsZW5jLGtzdHIsa2xlbixjYix1KQotI2RlZmluZQlQRU1fd3JpdGVfUHJpdmF0ZUtleShicCx4LGVuYyxrc3RyLGtsZW4sY2IsdSkgXAotCQlQRU1fQVNOMV93cml0ZSgoaW50ICgqKSgpKWkyZF9Qcml2YXRlS2V5LFwKLQkJKCgoeCktPnR5cGUgPT0gRVZQX1BLRVlfRFNBKT9QRU1fU1RSSU5HX0RTQTpQRU1fU1RSSU5HX1JTQSksXAotCQkJYnAsKGNoYXIgKil4LGVuYyxrc3RyLGtsZW4sY2IsdSkKLSNkZWZpbmUgUEVNX3dyaXRlX1BLQ1M3KGZwLHgpIFwKLQkJUEVNX0FTTjFfd3JpdGUoKGludCAoKikoKSlpMmRfUEtDUzcsUEVNX1NUUklOR19QS0NTNyxmcCwgXAotCQkJKGNoYXIgKil4LCBOVUxMLE5VTEwsMCxOVUxMLE5VTEwpCi0jZGVmaW5lIFBFTV93cml0ZV9ESHBhcmFtcyhmcCx4KSBcCi0JCVBFTV9BU04xX3dyaXRlKChpbnQgKCopKCkpaTJkX0RIcGFyYW1zLFBFTV9TVFJJTkdfREhQQVJBTVMsZnAsXAotCQkJKGNoYXIgKil4LE5VTEwsTlVMTCwwLE5VTEwsTlVMTCkKLQotI2RlZmluZSBQRU1fd3JpdGVfTkVUU0NBUEVfQ0VSVF9TRVFVRU5DRShmcCx4KSBcCi0gICAgICAgICAgICAgICAgUEVNX0FTTjFfd3JpdGUoKGludCAoKikoKSlpMmRfTkVUU0NBUEVfQ0VSVF9TRVFVRU5DRSwgXAotCQkJUEVNX1NUUklOR19YNTA5LGZwLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKXgsIE5VTEwsTlVMTCwwLE5VTEwsTlVMTCkKLQotI2RlZmluZQlQRU1fcmVhZF9TU0xfU0VTU0lPTihmcCx4LGNiLHUpIChTU0xfU0VTU0lPTiAqKVBFTV9BU04xX3JlYWQoIFwKLQkoY2hhciAqKCopKCkpZDJpX1NTTF9TRVNTSU9OLFBFTV9TVFJJTkdfU1NMX1NFU1NJT04sZnAsKGNoYXIgKiopeCxjYix1KQotI2RlZmluZQlQRU1fcmVhZF9YNTA5KGZwLHgsY2IsdSkgKFg1MDkgKilQRU1fQVNOMV9yZWFkKCBcCi0JKGNoYXIgKigqKSgpKWQyaV9YNTA5LFBFTV9TVFJJTkdfWDUwOSxmcCwoY2hhciAqKil4LGNiLHUpCi0jZGVmaW5lCVBFTV9yZWFkX1g1MDlfUkVRKGZwLHgsY2IsdSkgKFg1MDlfUkVRICopUEVNX0FTTjFfcmVhZCggXAotCShjaGFyICooKikoKSlkMmlfWDUwOV9SRVEsUEVNX1NUUklOR19YNTA5X1JFUSxmcCwoY2hhciAqKil4LGNiLHUpCi0jZGVmaW5lCVBFTV9yZWFkX1g1MDlfQ1JMKGZwLHgsY2IsdSkgKFg1MDlfQ1JMICopUEVNX0FTTjFfcmVhZCggXAotCShjaGFyICooKikoKSlkMmlfWDUwOV9DUkwsUEVNX1NUUklOR19YNTA5X0NSTCxmcCwoY2hhciAqKil4LGNiLHUpCi0jZGVmaW5lCVBFTV9yZWFkX1JTQVByaXZhdGVLZXkoZnAseCxjYix1KSAoUlNBICopUEVNX0FTTjFfcmVhZCggXAotCShjaGFyICooKikoKSlkMmlfUlNBUHJpdmF0ZUtleSxQRU1fU1RSSU5HX1JTQSxmcCwoY2hhciAqKil4LGNiLHUpCi0jZGVmaW5lCVBFTV9yZWFkX1JTQVB1YmxpY0tleShmcCx4LGNiLHUpIChSU0EgKilQRU1fQVNOMV9yZWFkKCBcCi0JKGNoYXIgKigqKSgpKWQyaV9SU0FQdWJsaWNLZXksUEVNX1NUUklOR19SU0FfUFVCTElDLGZwLChjaGFyICoqKXgsY2IsdSkKLSNkZWZpbmUJUEVNX3JlYWRfRFNBUHJpdmF0ZUtleShmcCx4LGNiLHUpIChEU0EgKilQRU1fQVNOMV9yZWFkKCBcCi0JKGNoYXIgKigqKSgpKWQyaV9EU0FQcml2YXRlS2V5LFBFTV9TVFJJTkdfRFNBLGZwLChjaGFyICoqKXgsY2IsdSkKLSNkZWZpbmUJUEVNX3JlYWRfUHJpdmF0ZUtleShmcCx4LGNiLHUpIChFVlBfUEtFWSAqKVBFTV9BU04xX3JlYWQoIFwKLQkoY2hhciAqKCopKCkpZDJpX1ByaXZhdGVLZXksUEVNX1NUUklOR19FVlBfUEtFWSxmcCwoY2hhciAqKil4LGNiLHUpCi0jZGVmaW5lCVBFTV9yZWFkX1BLQ1M3KGZwLHgsY2IsdSkgKFBLQ1M3ICopUEVNX0FTTjFfcmVhZCggXAotCShjaGFyICooKikoKSlkMmlfUEtDUzcsUEVNX1NUUklOR19QS0NTNyxmcCwoY2hhciAqKil4LGNiLHUpCi0jZGVmaW5lCVBFTV9yZWFkX0RIcGFyYW1zKGZwLHgsY2IsdSkgKERIICopUEVNX0FTTjFfcmVhZCggXAotCShjaGFyICooKikoKSlkMmlfREhwYXJhbXMsUEVNX1NUUklOR19ESFBBUkFNUyxmcCwoY2hhciAqKil4LGNiLHUpCi0KLSNkZWZpbmUgUEVNX3JlYWRfTkVUU0NBUEVfQ0VSVF9TRVFVRU5DRShmcCx4LGNiLHUpIFwKLQkJKE5FVFNDQVBFX0NFUlRfU0VRVUVOQ0UgKilQRU1fQVNOMV9yZWFkKCBcCi0gICAgICAgIChjaGFyICooKikoKSlkMmlfTkVUU0NBUEVfQ0VSVF9TRVFVRU5DRSxQRU1fU1RSSU5HX1g1MDksZnAsXAotCQkJCQkJCShjaGFyICoqKXgsY2IsdSkKLQotI2RlZmluZSBQRU1fd3JpdGVfYmlvX1g1MDkoYnAseCkgXAotCQlQRU1fQVNOMV93cml0ZV9iaW8oKGludCAoKikoKSlpMmRfWDUwOSxQRU1fU1RSSU5HX1g1MDksYnAsIFwKLQkJCShjaGFyICopeCwgTlVMTCxOVUxMLDAsTlVMTCxOVUxMKQotI2RlZmluZSBQRU1fd3JpdGVfYmlvX1g1MDlfUkVRKGJwLHgpIFBFTV9BU04xX3dyaXRlX2JpbyggXAotCQkoaW50ICgqKSgpKWkyZF9YNTA5X1JFUSxQRU1fU1RSSU5HX1g1MDlfUkVRLGJwLChjaGFyICopeCwgXAotCQkJTlVMTCxOVUxMLDAsTlVMTCxOVUxMKQotI2RlZmluZSBQRU1fd3JpdGVfYmlvX1g1MDlfQ1JMKGJwLHgpIFwKLQkJUEVNX0FTTjFfd3JpdGVfYmlvKChpbnQgKCopKCkpaTJkX1g1MDlfQ1JMLFBFTV9TVFJJTkdfWDUwOV9DUkwsXAotCQkJYnAsKGNoYXIgKil4LCBOVUxMLE5VTEwsMCxOVUxMLE5VTEwpCi0jZGVmaW5lCVBFTV93cml0ZV9iaW9fUlNBUHJpdmF0ZUtleShicCx4LGVuYyxrc3RyLGtsZW4sY2IsdSkgXAotCQlQRU1fQVNOMV93cml0ZV9iaW8oKGludCAoKikoKSlpMmRfUlNBUHJpdmF0ZUtleSxQRU1fU1RSSU5HX1JTQSxcCi0JCQlicCwoY2hhciAqKXgsZW5jLGtzdHIsa2xlbixjYix1KQotI2RlZmluZQlQRU1fd3JpdGVfYmlvX1JTQVB1YmxpY0tleShicCx4KSBcCi0JCVBFTV9BU04xX3dyaXRlX2JpbygoaW50ICgqKSgpKWkyZF9SU0FQdWJsaWNLZXksIFwKLQkJCVBFTV9TVFJJTkdfUlNBX1BVQkxJQyxcCi0JCQlicCwoY2hhciAqKXgsTlVMTCxOVUxMLDAsTlVMTCxOVUxMKQotI2RlZmluZQlQRU1fd3JpdGVfYmlvX0RTQVByaXZhdGVLZXkoYnAseCxlbmMsa3N0cixrbGVuLGNiLHUpIFwKLQkJUEVNX0FTTjFfd3JpdGVfYmlvKChpbnQgKCopKCkpaTJkX0RTQVByaXZhdGVLZXksUEVNX1NUUklOR19EU0EsXAotCQkJYnAsKGNoYXIgKil4LGVuYyxrc3RyLGtsZW4sY2IsdSkKLSNkZWZpbmUJUEVNX3dyaXRlX2Jpb19Qcml2YXRlS2V5KGJwLHgsZW5jLGtzdHIsa2xlbixjYix1KSBcCi0JCVBFTV9BU04xX3dyaXRlX2JpbygoaW50ICgqKSgpKWkyZF9Qcml2YXRlS2V5LFwKLQkJKCgoeCktPnR5cGUgPT0gRVZQX1BLRVlfRFNBKT9QRU1fU1RSSU5HX0RTQTpQRU1fU1RSSU5HX1JTQSksXAotCQkJYnAsKGNoYXIgKil4LGVuYyxrc3RyLGtsZW4sY2IsdSkKLSNkZWZpbmUgUEVNX3dyaXRlX2Jpb19QS0NTNyhicCx4KSBcCi0JCVBFTV9BU04xX3dyaXRlX2JpbygoaW50ICgqKSgpKWkyZF9QS0NTNyxQRU1fU1RSSU5HX1BLQ1M3LGJwLCBcCi0JCQkoY2hhciAqKXgsIE5VTEwsTlVMTCwwLE5VTEwsTlVMTCkKLSNkZWZpbmUgUEVNX3dyaXRlX2Jpb19ESHBhcmFtcyhicCx4KSBcCi0JCVBFTV9BU04xX3dyaXRlX2JpbygoaW50ICgqKSgpKWkyZF9ESHBhcmFtcyxQRU1fU1RSSU5HX0RIUEFSQU1TLFwKLQkJCWJwLChjaGFyICopeCxOVUxMLE5VTEwsMCxOVUxMLE5VTEwpCi0jZGVmaW5lIFBFTV93cml0ZV9iaW9fRFNBcGFyYW1zKGJwLHgpIFwKLQkJUEVNX0FTTjFfd3JpdGVfYmlvKChpbnQgKCopKCkpaTJkX0RTQXBhcmFtcywgXAotCQkJUEVNX1NUUklOR19EU0FQQVJBTVMsYnAsKGNoYXIgKil4LE5VTEwsTlVMTCwwLE5VTEwsTlVMTCkKLQotI2RlZmluZSBQRU1fd3JpdGVfYmlvX05FVFNDQVBFX0NFUlRfU0VRVUVOQ0UoYnAseCkgXAotICAgICAgICAgICAgICAgIFBFTV9BU04xX3dyaXRlX2JpbygoaW50ICgqKSgpKWkyZF9ORVRTQ0FQRV9DRVJUX1NFUVVFTkNFLCBcCi0JCQlQRU1fU1RSSU5HX1g1MDksYnAsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopeCwgTlVMTCxOVUxMLDAsTlVMTCxOVUxMKQotCi0jZGVmaW5lCVBFTV9yZWFkX2Jpb19YNTA5KGJwLHgsY2IsdSkgKFg1MDkgKilQRU1fQVNOMV9yZWFkX2JpbyggXAotCShjaGFyICooKikoKSlkMmlfWDUwOSxQRU1fU1RSSU5HX1g1MDksYnAsKGNoYXIgKiopeCxjYix1KQotI2RlZmluZQlQRU1fcmVhZF9iaW9fWDUwOV9SRVEoYnAseCxjYix1KSAoWDUwOV9SRVEgKilQRU1fQVNOMV9yZWFkX2JpbyggXAotCShjaGFyICooKikoKSlkMmlfWDUwOV9SRVEsUEVNX1NUUklOR19YNTA5X1JFUSxicCwoY2hhciAqKil4LGNiLHUpCi0jZGVmaW5lCVBFTV9yZWFkX2Jpb19YNTA5X0NSTChicCx4LGNiLHUpIChYNTA5X0NSTCAqKVBFTV9BU04xX3JlYWRfYmlvKCBcCi0JKGNoYXIgKigqKSgpKWQyaV9YNTA5X0NSTCxQRU1fU1RSSU5HX1g1MDlfQ1JMLGJwLChjaGFyICoqKXgsY2IsdSkKLSNkZWZpbmUJUEVNX3JlYWRfYmlvX1JTQVByaXZhdGVLZXkoYnAseCxjYix1KSAoUlNBICopUEVNX0FTTjFfcmVhZF9iaW8oIFwKLQkoY2hhciAqKCopKCkpZDJpX1JTQVByaXZhdGVLZXksUEVNX1NUUklOR19SU0EsYnAsKGNoYXIgKiopeCxjYix1KQotI2RlZmluZQlQRU1fcmVhZF9iaW9fUlNBUHVibGljS2V5KGJwLHgsY2IsdSkgKFJTQSAqKVBFTV9BU04xX3JlYWRfYmlvKCBcCi0JKGNoYXIgKigqKSgpKWQyaV9SU0FQdWJsaWNLZXksUEVNX1NUUklOR19SU0FfUFVCTElDLGJwLChjaGFyICoqKXgsY2IsdSkKLSNkZWZpbmUJUEVNX3JlYWRfYmlvX0RTQVByaXZhdGVLZXkoYnAseCxjYix1KSAoRFNBICopUEVNX0FTTjFfcmVhZF9iaW8oIFwKLQkoY2hhciAqKCopKCkpZDJpX0RTQVByaXZhdGVLZXksUEVNX1NUUklOR19EU0EsYnAsKGNoYXIgKiopeCxjYix1KQotI2RlZmluZQlQRU1fcmVhZF9iaW9fUHJpdmF0ZUtleShicCx4LGNiLHUpIChFVlBfUEtFWSAqKVBFTV9BU04xX3JlYWRfYmlvKCBcCi0JKGNoYXIgKigqKSgpKWQyaV9Qcml2YXRlS2V5LFBFTV9TVFJJTkdfRVZQX1BLRVksYnAsKGNoYXIgKiopeCxjYix1KQotCi0jZGVmaW5lCVBFTV9yZWFkX2Jpb19QS0NTNyhicCx4LGNiLHUpIChQS0NTNyAqKVBFTV9BU04xX3JlYWRfYmlvKCBcCi0JKGNoYXIgKigqKSgpKWQyaV9QS0NTNyxQRU1fU1RSSU5HX1BLQ1M3LGJwLChjaGFyICoqKXgsY2IsdSkKLSNkZWZpbmUJUEVNX3JlYWRfYmlvX0RIcGFyYW1zKGJwLHgsY2IsdSkgKERIICopUEVNX0FTTjFfcmVhZF9iaW8oIFwKLQkoY2hhciAqKCopKCkpZDJpX0RIcGFyYW1zLFBFTV9TVFJJTkdfREhQQVJBTVMsYnAsKGNoYXIgKiopeCxjYix1KQotI2RlZmluZQlQRU1fcmVhZF9iaW9fRFNBcGFyYW1zKGJwLHgsY2IsdSkgKERTQSAqKVBFTV9BU04xX3JlYWRfYmlvKCBcCi0JKGNoYXIgKigqKSgpKWQyaV9EU0FwYXJhbXMsUEVNX1NUUklOR19EU0FQQVJBTVMsYnAsKGNoYXIgKiopeCxjYix1KQotCi0jZGVmaW5lIFBFTV9yZWFkX2Jpb19ORVRTQ0FQRV9DRVJUX1NFUVVFTkNFKGJwLHgsY2IsdSkgXAotCQkoTkVUU0NBUEVfQ0VSVF9TRVFVRU5DRSAqKVBFTV9BU04xX3JlYWRfYmlvKCBcCi0gICAgICAgIChjaGFyICooKikoKSlkMmlfTkVUU0NBUEVfQ0VSVF9TRVFVRU5DRSxQRU1fU1RSSU5HX1g1MDksYnAsXAotCQkJCQkJCShjaGFyICoqKXgsY2IsdSkKLQotI2VuZGlmCi0KICNpZiAxCiAvKiAidXNlcmRhdGEiOiBuZXcgd2l0aCBPcGVuU1NMIDAuOS40ICovCiB0eXBlZGVmIGludCBwZW1fcGFzc3dvcmRfY2IoY2hhciAqYnVmLCBpbnQgc2l6ZSwgaW50IHJ3ZmxhZywgdm9pZCAqdXNlcmRhdGEpOwpAQCAtNTgxLDQwICs0MTYsMjUgQEAKIAkgICAgIHBlbV9wYXNzd29yZF9jYiAqY2IsIHZvaWQgKnUpOwogdm9pZCAqCVBFTV9BU04xX3JlYWRfYmlvKGQyaV9vZl92b2lkICpkMmksIGNvbnN0IGNoYXIgKm5hbWUsIEJJTyAqYnAsCiAJCQkgIHZvaWQgKip4LCBwZW1fcGFzc3dvcmRfY2IgKmNiLCB2b2lkICp1KTsKLQotI2RlZmluZSBQRU1fQVNOMV9yZWFkX2Jpb19vZih0eXBlLGQyaSxuYW1lLGJwLHgsY2IsdSkgXAotICAgICgodHlwZSopUEVNX0FTTjFfcmVhZF9iaW8oQ0hFQ0tFRF9EMklfT0YodHlwZSwgZDJpKSwgXAotCQkJICAgICAgbmFtZSwgYnAsCQkJXAotCQkJICAgICAgQ0hFQ0tFRF9QUFRSX09GKHR5cGUsIHgpLCBcCi0JCQkgICAgICBjYiwgdSkpCi0KLWludAlQRU1fQVNOMV93cml0ZV9iaW8oaTJkX29mX3ZvaWQgKmkyZCxjb25zdCBjaGFyICpuYW1lLEJJTyAqYnAsY2hhciAqeCwKK2ludAlQRU1fQVNOMV93cml0ZV9iaW8oaTJkX29mX3ZvaWQgKmkyZCxjb25zdCBjaGFyICpuYW1lLEJJTyAqYnAsIHZvaWQgKngsCiAJCQkgICBjb25zdCBFVlBfQ0lQSEVSICplbmMsdW5zaWduZWQgY2hhciAqa3N0cixpbnQga2xlbiwKIAkJCSAgIHBlbV9wYXNzd29yZF9jYiAqY2IsIHZvaWQgKnUpOwogCi0jZGVmaW5lIFBFTV9BU04xX3dyaXRlX2Jpb19vZih0eXBlLGkyZCxuYW1lLGJwLHgsZW5jLGtzdHIsa2xlbixjYix1KSBcCi0gICAgKFBFTV9BU04xX3dyaXRlX2JpbyhDSEVDS0VEX0kyRF9PRih0eXBlLCBpMmQpLCBcCi0JCQluYW1lLCBicCwJCSAgIFwKLQkJCUNIRUNLRURfUFRSX09GKHR5cGUsIHgpLCBcCi0JCQllbmMsIGtzdHIsIGtsZW4sIGNiLCB1KSkKLQogU1RBQ0tfT0YoWDUwOV9JTkZPKSAqCVBFTV9YNTA5X0lORk9fcmVhZF9iaW8oQklPICpicCwgU1RBQ0tfT0YoWDUwOV9JTkZPKSAqc2ssIHBlbV9wYXNzd29yZF9jYiAqY2IsIHZvaWQgKnUpOwogaW50CVBFTV9YNTA5X0lORk9fd3JpdGVfYmlvKEJJTyAqYnAsWDUwOV9JTkZPICp4aSwgRVZQX0NJUEhFUiAqZW5jLAogCQl1bnNpZ25lZCBjaGFyICprc3RyLCBpbnQga2xlbiwgcGVtX3Bhc3N3b3JkX2NiICpjZCwgdm9pZCAqdSk7CiAjZW5kaWYKIAotI2lmbmRlZiBPUEVOU1NMX1NZU19XSU4xNgogaW50CVBFTV9yZWFkKEZJTEUgKmZwLCBjaGFyICoqbmFtZSwgY2hhciAqKmhlYWRlciwKIAkJdW5zaWduZWQgY2hhciAqKmRhdGEsbG9uZyAqbGVuKTsKIGludAlQRU1fd3JpdGUoRklMRSAqZnAsY2hhciAqbmFtZSxjaGFyICpoZHIsdW5zaWduZWQgY2hhciAqZGF0YSxsb25nIGxlbik7CiB2b2lkICogIFBFTV9BU04xX3JlYWQoZDJpX29mX3ZvaWQgKmQyaSwgY29uc3QgY2hhciAqbmFtZSwgRklMRSAqZnAsIHZvaWQgKip4LAogCQkgICAgICBwZW1fcGFzc3dvcmRfY2IgKmNiLCB2b2lkICp1KTsKIGludAlQRU1fQVNOMV93cml0ZShpMmRfb2Zfdm9pZCAqaTJkLGNvbnN0IGNoYXIgKm5hbWUsRklMRSAqZnAsCi0JCSAgICAgICBjaGFyICp4LGNvbnN0IEVWUF9DSVBIRVIgKmVuYyx1bnNpZ25lZCBjaGFyICprc3RyLAorCQkgICAgICAgdm9pZCAqeCxjb25zdCBFVlBfQ0lQSEVSICplbmMsdW5zaWduZWQgY2hhciAqa3N0ciwKIAkJICAgICAgIGludCBrbGVuLHBlbV9wYXNzd29yZF9jYiAqY2FsbGJhY2ssIHZvaWQgKnUpOwogU1RBQ0tfT0YoWDUwOV9JTkZPKSAqCVBFTV9YNTA5X0lORk9fcmVhZChGSUxFICpmcCwgU1RBQ0tfT0YoWDUwOV9JTkZPKSAqc2ssCiAJcGVtX3Bhc3N3b3JkX2NiICpjYiwgdm9pZCAqdSk7Ci0jZW5kaWYKIAogaW50CVBFTV9TZWFsSW5pdChQRU1fRU5DT0RFX1NFQUxfQ1RYICpjdHgsIEVWUF9DSVBIRVIgKnR5cGUsCiAJCUVWUF9NRCAqbWRfdHlwZSwgdW5zaWduZWQgY2hhciAqKmVrLCBpbnQgKmVrbCwKQEAgLTYzMyw3ICs0NTMsNiBAQAogdm9pZAlQRU1fcHJvY190eXBlKGNoYXIgKmJ1ZiwgaW50IHR5cGUpOwogdm9pZAlQRU1fZGVrX2luZm8oY2hhciAqYnVmLCBjb25zdCBjaGFyICp0eXBlLCBpbnQgbGVuLCBjaGFyICpzdHIpOwogCi0jaWZuZGVmIFNTTEVBWV9NQUNST1MKIAogI2luY2x1ZGUgPG9wZW5zc2wvc3ltaGFja3MuaD4KIApAQCAtNzE5LDcgKzUzOCwyMCBAQAogaW50IFBFTV93cml0ZV9QS0NTOFByaXZhdGVLZXkoRklMRSAqZnAsRVZQX1BLRVkgKngsY29uc3QgRVZQX0NJUEhFUiAqZW5jLAogCQkJICAgICAgY2hhciAqa3N0cixpbnQga2xlbiwgcGVtX3Bhc3N3b3JkX2NiICpjZCwgdm9pZCAqdSk7CiAKLSNlbmRpZiAvKiBTU0xFQVlfTUFDUk9TICovCitFVlBfUEtFWSAqUEVNX3JlYWRfYmlvX1BhcmFtZXRlcnMoQklPICpicCwgRVZQX1BLRVkgKip4KTsKK2ludCBQRU1fd3JpdGVfYmlvX1BhcmFtZXRlcnMoQklPICpicCwgRVZQX1BLRVkgKngpOworCisKK0VWUF9QS0VZICpiMmlfUHJpdmF0ZUtleShjb25zdCB1bnNpZ25lZCBjaGFyICoqaW4sIGxvbmcgbGVuZ3RoKTsKK0VWUF9QS0VZICpiMmlfUHVibGljS2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKippbiwgbG9uZyBsZW5ndGgpOworRVZQX1BLRVkgKmIyaV9Qcml2YXRlS2V5X2JpbyhCSU8gKmluKTsKK0VWUF9QS0VZICpiMmlfUHVibGljS2V5X2JpbyhCSU8gKmluKTsKK2ludCBpMmJfUHJpdmF0ZUtleV9iaW8oQklPICpvdXQsIEVWUF9QS0VZICpwayk7CitpbnQgaTJiX1B1YmxpY0tleV9iaW8oQklPICpvdXQsIEVWUF9QS0VZICpwayk7CisKK0VWUF9QS0VZICpiMmlfUFZLX2JpbyhCSU8gKmluLCBwZW1fcGFzc3dvcmRfY2IgKmNiLCB2b2lkICp1KTsKK2ludCBpMmJfUFZLX2JpbyhCSU8gKm91dCwgRVZQX1BLRVkgKnBrLCBpbnQgZW5jbGV2ZWwsCisJCXBlbV9wYXNzd29yZF9jYiAqY2IsIHZvaWQgKnUpOwogCiAKIC8qIEJFR0lOIEVSUk9SIENPREVTICovCkBAIC03MzEsMTAgKzU2MywyMiBAQAogLyogRXJyb3IgY29kZXMgZm9yIHRoZSBQRU0gZnVuY3Rpb25zLiAqLwogCiAvKiBGdW5jdGlvbiBjb2Rlcy4gKi8KKyNkZWZpbmUgUEVNX0ZfQjJJX0RTUwkJCQkJIDEyNworI2RlZmluZSBQRU1fRl9CMklfUFZLX0JJTwkJCQkgMTI4CisjZGVmaW5lIFBFTV9GX0IySV9SU0EJCQkJCSAxMjkKKyNkZWZpbmUgUEVNX0ZfQ0hFQ0tfQklUTEVOX0RTQQkJCQkgMTMwCisjZGVmaW5lIFBFTV9GX0NIRUNLX0JJVExFTl9SU0EJCQkJIDEzMQogI2RlZmluZSBQRU1fRl9EMklfUEtDUzhQUklWQVRFS0VZX0JJTwkJCSAxMjAKICNkZWZpbmUgUEVNX0ZfRDJJX1BLQ1M4UFJJVkFURUtFWV9GUAkJCSAxMjEKKyNkZWZpbmUgUEVNX0ZfRE9fQjJJCQkJCQkgMTMyCisjZGVmaW5lIFBFTV9GX0RPX0IySV9CSU8JCQkJIDEzMworI2RlZmluZSBQRU1fRl9ET19CTE9CX0hFQURFUgkJCQkgMTM0CiAjZGVmaW5lIFBFTV9GX0RPX1BLOFBLRVkJCQkJIDEyNgogI2RlZmluZSBQRU1fRl9ET19QSzhQS0VZX0ZQCQkJCSAxMjUKKyNkZWZpbmUgUEVNX0ZfRE9fUFZLX0JPRFkJCQkJIDEzNQorI2RlZmluZSBQRU1fRl9ET19QVktfSEVBREVSCQkJCSAxMzYKKyNkZWZpbmUgUEVNX0ZfSTJCX1BWSwkJCQkJIDEzNworI2RlZmluZSBQRU1fRl9JMkJfUFZLX0JJTwkJCQkgMTM4CiAjZGVmaW5lIFBFTV9GX0xPQURfSVYJCQkJCSAxMDEKICNkZWZpbmUgUEVNX0ZfUEVNX0FTTjFfUkVBRAkJCQkgMTAyCiAjZGVmaW5lIFBFTV9GX1BFTV9BU04xX1JFQURfQklPCQkJCSAxMDMKQEAgLTc0Nyw2ICs1OTEsNyBAQAogI2RlZmluZSBQRU1fRl9QRU1fUEs4UEtFWQkJCQkgMTE5CiAjZGVmaW5lIFBFTV9GX1BFTV9SRUFECQkJCQkgMTA4CiAjZGVmaW5lIFBFTV9GX1BFTV9SRUFEX0JJTwkJCQkgMTA5CisjZGVmaW5lIFBFTV9GX1BFTV9SRUFEX0JJT19QQVJBTUVURVJTCQkJIDE0MAogI2RlZmluZSBQRU1fRl9QRU1fUkVBRF9CSU9fUFJJVkFURUtFWQkJCSAxMjMKICNkZWZpbmUgUEVNX0ZfUEVNX1JFQURfUFJJVkFURUtFWQkJCSAxMjQKICNkZWZpbmUgUEVNX0ZfUEVNX1NFQUxGSU5BTAkJCQkgMTEwCkBAIC03NTQsNiArNTk5LDcgQEAKICNkZWZpbmUgUEVNX0ZfUEVNX1NJR05GSU5BTAkJCQkgMTEyCiAjZGVmaW5lIFBFTV9GX1BFTV9XUklURQkJCQkJIDExMwogI2RlZmluZSBQRU1fRl9QRU1fV1JJVEVfQklPCQkJCSAxMTQKKyNkZWZpbmUgUEVNX0ZfUEVNX1dSSVRFX1BSSVZBVEVLRVkJCQkgMTM5CiAjZGVmaW5lIFBFTV9GX1BFTV9YNTA5X0lORk9fUkVBRAkJCSAxMTUKICNkZWZpbmUgUEVNX0ZfUEVNX1g1MDlfSU5GT19SRUFEX0JJTwkJCSAxMTYKICNkZWZpbmUgUEVNX0ZfUEVNX1g1MDlfSU5GT19XUklURV9CSU8JCQkgMTE3CkBAIC03NjMsMTggKzYwOSwzMCBAQAogI2RlZmluZSBQRU1fUl9CQURfREVDUllQVAkJCQkgMTAxCiAjZGVmaW5lIFBFTV9SX0JBRF9FTkRfTElORQkJCQkgMTAyCiAjZGVmaW5lIFBFTV9SX0JBRF9JVl9DSEFSUwkJCQkgMTAzCisjZGVmaW5lIFBFTV9SX0JBRF9NQUdJQ19OVU1CRVIJCQkJIDExNgogI2RlZmluZSBQRU1fUl9CQURfUEFTU1dPUkRfUkVBRAkJCQkgMTA0CisjZGVmaW5lIFBFTV9SX0JBRF9WRVJTSU9OX05VTUJFUgkJCSAxMTcKKyNkZWZpbmUgUEVNX1JfQklPX1dSSVRFX0ZBSUxVUkUJCQkJIDExOAorI2RlZmluZSBQRU1fUl9DSVBIRVJfSVNfTlVMTAkJCQkgMTI3CiAjZGVmaW5lIFBFTV9SX0VSUk9SX0NPTlZFUlRJTkdfUFJJVkFURV9LRVkJCSAxMTUKKyNkZWZpbmUgUEVNX1JfRVhQRUNUSU5HX1BSSVZBVEVfS0VZX0JMT0IJCSAxMTkKKyNkZWZpbmUgUEVNX1JfRVhQRUNUSU5HX1BVQkxJQ19LRVlfQkxPQgkJCSAxMjAKKyNkZWZpbmUgUEVNX1JfSU5DT05TSVNURU5UX0hFQURFUgkJCSAxMjEKKyNkZWZpbmUgUEVNX1JfS0VZQkxPQl9IRUFERVJfUEFSU0VfRVJST1IJCSAxMjIKKyNkZWZpbmUgUEVNX1JfS0VZQkxPQl9UT09fU0hPUlQJCQkJIDEyMwogI2RlZmluZSBQRU1fUl9OT1RfREVLX0lORk8JCQkJIDEwNQogI2RlZmluZSBQRU1fUl9OT1RfRU5DUllQVEVECQkJCSAxMDYKICNkZWZpbmUgUEVNX1JfTk9UX1BST0NfVFlQRQkJCQkgMTA3CiAjZGVmaW5lIFBFTV9SX05PX1NUQVJUX0xJTkUJCQkJIDEwOAogI2RlZmluZSBQRU1fUl9QUk9CTEVNU19HRVRUSU5HX1BBU1NXT1JECQkJIDEwOQogI2RlZmluZSBQRU1fUl9QVUJMSUNfS0VZX05PX1JTQQkJCQkgMTEwCisjZGVmaW5lIFBFTV9SX1BWS19EQVRBX1RPT19TSE9SVAkJCSAxMjQKKyNkZWZpbmUgUEVNX1JfUFZLX1RPT19TSE9SVAkJCQkgMTI1CiAjZGVmaW5lIFBFTV9SX1JFQURfS0VZCQkJCQkgMTExCiAjZGVmaW5lIFBFTV9SX1NIT1JUX0hFQURFUgkJCQkgMTEyCiAjZGVmaW5lIFBFTV9SX1VOU1VQUE9SVEVEX0NJUEhFUgkJCSAxMTMKICNkZWZpbmUgUEVNX1JfVU5TVVBQT1JURURfRU5DUllQVElPTgkJCSAxMTQKKyNkZWZpbmUgUEVNX1JfVU5TVVBQT1JURURfS0VZX0NPTVBPTkVOVFMJCSAxMjYKIAogI2lmZGVmICBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVuc3NsL3BrY3MxMi5oIGIvaW5jbHVkZS9vcGVuc3NsL3BrY3MxMi5oCmluZGV4IDc4MzE3ZmIuLmIxN2ViOWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvb3BlbnNzbC9wa2NzMTIuaAorKysgYi9pbmNsdWRlL29wZW5zc2wvcGtjczEyLmgKQEAgLTEwOCw4ICsxMDgsNiBAQAogUEtDUzcgKmF1dGhzYWZlczsKIH0gUEtDUzEyOwogCi1QUkVERUNMQVJFX1NUQUNLX09GKFBLQ1MxMl9TQUZFQkFHKQotCiB0eXBlZGVmIHN0cnVjdCB7CiBBU04xX09CSkVDVCAqdHlwZTsKIHVuaW9uIHsKQEAgLTIzMiwxNCArMjMwLDkgQEAKIAkJICAgY29uc3QgRVZQX01EICptZF90eXBlKTsKIGludCBQS0NTMTJfc2V0dXBfbWFjKFBLQ1MxMiAqcDEyLCBpbnQgaXRlciwgdW5zaWduZWQgY2hhciAqc2FsdCwKIAkJCQkJIGludCBzYWx0bGVuLCBjb25zdCBFVlBfTUQgKm1kX3R5cGUpOwotI2lmIGRlZmluZWQoTkVUV0FSRSkgfHwgZGVmaW5lZChPUEVOU1NMX1NZU19ORVRXQVJFKQotLyogUmVuYW1lIHRoZXNlIGZ1bmN0aW9ucyB0byBhdm9pZCBuYW1lIGNsYXNoZXMgb24gTmV0V2FyZSBPUyAqLwogdW5zaWduZWQgY2hhciAqT1BFTlNTTF9hc2MydW5pKGNvbnN0IGNoYXIgKmFzYywgaW50IGFzY2xlbiwgdW5zaWduZWQgY2hhciAqKnVuaSwgaW50ICp1bmlsZW4pOwogY2hhciAqT1BFTlNTTF91bmkyYXNjKHVuc2lnbmVkIGNoYXIgKnVuaSwgaW50IHVuaWxlbik7Ci0jZWxzZQotdW5zaWduZWQgY2hhciAqYXNjMnVuaShjb25zdCBjaGFyICphc2MsIGludCBhc2NsZW4sIHVuc2lnbmVkIGNoYXIgKip1bmksIGludCAqdW5pbGVuKTsKLWNoYXIgKnVuaTJhc2ModW5zaWduZWQgY2hhciAqdW5pLCBpbnQgdW5pbGVuKTsKLSNlbmRpZgorCiBERUNMQVJFX0FTTjFfRlVOQ1RJT05TKFBLQ1MxMikKIERFQ0xBUkVfQVNOMV9GVU5DVElPTlMoUEtDUzEyX01BQ19EQVRBKQogREVDTEFSRV9BU04xX0ZVTkNUSU9OUyhQS0NTMTJfU0FGRUJBRykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIGIvaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKaW5kZXggY2MwOTJkMi4uZTRkNDQzMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKKysrIGIvaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKQEAgLTIzMiw2ICsyMzIsOSBAQAogI2RlZmluZSBQS0NTN190eXBlX2lzX3NpZ25lZEFuZEVudmVsb3BlZChhKSBcCiAJCShPQkpfb2JqMm5pZCgoYSktPnR5cGUpID09IE5JRF9wa2NzN19zaWduZWRBbmRFbnZlbG9wZWQpCiAjZGVmaW5lIFBLQ1M3X3R5cGVfaXNfZGF0YShhKSAgIChPQkpfb2JqMm5pZCgoYSktPnR5cGUpID09IE5JRF9wa2NzN19kYXRhKQorI2RlZmluZSBQS0NTN190eXBlX2lzX2RpZ2VzdChhKSAgIChPQkpfb2JqMm5pZCgoYSktPnR5cGUpID09IE5JRF9wa2NzN19kaWdlc3QpCisjZGVmaW5lIFBLQ1M3X3R5cGVfaXNfZW5jcnlwdGVkKGEpIFwKKwkJKE9CSl9vYmoybmlkKChhKS0+dHlwZSkgPT0gTklEX3BrY3M3X2VuY3J5cHRlZCkKIAogI2RlZmluZSBQS0NTN190eXBlX2lzX2RpZ2VzdChhKSAgIChPQkpfb2JqMm5pZCgoYSktPnR5cGUpID09IE5JRF9wa2NzN19kaWdlc3QpCiAKQEAgLTI0MiwxNCArMjQ1LDYgQEAKIAogI2RlZmluZSBQS0NTN19pc19kZXRhY2hlZChwNykgKFBLQ1M3X3R5cGVfaXNfc2lnbmVkKHA3KSAmJiBQS0NTN19nZXRfZGV0YWNoZWQocDcpKQogCi0jaWZkZWYgU1NMRUFZX01BQ1JPUwotI2lmbmRlZiBQS0NTN19JU1NVRVJfQU5EX1NFUklBTF9kaWdlc3QKLSNkZWZpbmUgUEtDUzdfSVNTVUVSX0FORF9TRVJJQUxfZGlnZXN0KGRhdGEsdHlwZSxtZCxsZW4pIFwKLSAgICAgICAgQVNOMV9kaWdlc3QoKGludCAoKikoKSlpMmRfUEtDUzdfSVNTVUVSX0FORF9TRVJJQUwsdHlwZSxcCi0JICAgICAgICAgICAgICAgIChjaGFyICopZGF0YSxtZCxsZW4pCi0jZW5kaWYKLSNlbmRpZgotCiAvKiBTL01JTUUgcmVsYXRlZCBmbGFncyAqLwogCiAjZGVmaW5lIFBLQ1M3X1RFWFQJCTB4MQpAQCAtMjY2LDYgKzI2MSw4IEBACiAjZGVmaW5lIFBLQ1M3X0NSTEZFT0wJCTB4ODAwCiAjZGVmaW5lIFBLQ1M3X1NUUkVBTQkJMHgxMDAwCiAjZGVmaW5lIFBLQ1M3X05PQ1JMCQkweDIwMDAKKyNkZWZpbmUgUEtDUzdfUEFSVElBTAkJMHg0MDAwCisjZGVmaW5lIFBLQ1M3X1JFVVNFX0RJR0VTVAkweDgwMDAKIAogLyogRmxhZ3M6IGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgY29kZSAqLwogCkBAIC0yODEsNyArMjc4LDYgQEAKIAogREVDTEFSRV9BU04xX0ZVTkNUSU9OUyhQS0NTN19JU1NVRVJfQU5EX1NFUklBTCkKIAotI2lmbmRlZiBTU0xFQVlfTUFDUk9TCiBpbnQgUEtDUzdfSVNTVUVSX0FORF9TRVJJQUxfZGlnZXN0KFBLQ1M3X0lTU1VFUl9BTkRfU0VSSUFMICpkYXRhLGNvbnN0IEVWUF9NRCAqdHlwZSwKIAl1bnNpZ25lZCBjaGFyICptZCx1bnNpZ25lZCBpbnQgKmxlbik7CiAjaWZuZGVmIE9QRU5TU0xfTk9fRlBfQVBJCkBAIC0yOTEsNyArMjg3LDggQEAKIFBLQ1M3ICpQS0NTN19kdXAoUEtDUzcgKnA3KTsKIFBLQ1M3ICpkMmlfUEtDUzdfYmlvKEJJTyAqYnAsUEtDUzcgKipwNyk7CiBpbnQgaTJkX1BLQ1M3X2JpbyhCSU8gKmJwLFBLQ1M3ICpwNyk7Ci0jZW5kaWYKK2ludCBpMmRfUEtDUzdfYmlvX3N0cmVhbShCSU8gKm91dCwgUEtDUzcgKnA3LCBCSU8gKmluLCBpbnQgZmxhZ3MpOworaW50IFBFTV93cml0ZV9iaW9fUEtDUzdfc3RyZWFtKEJJTyAqb3V0LCBQS0NTNyAqcDcsIEJJTyAqaW4sIGludCBmbGFncyk7CiAKIERFQ0xBUkVfQVNOMV9GVU5DVElPTlMoUEtDUzdfU0lHTkVSX0lORk8pCiBERUNMQVJFX0FTTjFfRlVOQ1RJT05TKFBLQ1M3X1JFQ0lQX0lORk8pCkBAIC0zMDcsNiArMzA0LDcgQEAKIERFQ0xBUkVfQVNOMV9JVEVNKFBLQ1M3X0FUVFJfVkVSSUZZKQogCiBERUNMQVJFX0FTTjFfTkRFRl9GVU5DVElPTihQS0NTNykKK0RFQ0xBUkVfQVNOMV9QUklOVF9GVU5DVElPTihQS0NTNykKIAogbG9uZyBQS0NTN19jdHJsKFBLQ1M3ICpwNywgaW50IGNtZCwgbG9uZyBsYXJnLCBjaGFyICpwYXJnKTsKIApAQCAtMzE1LDYgKzMxMyw3IEBACiBpbnQgUEtDUzdfc2V0X2NvbnRlbnQoUEtDUzcgKnA3LCBQS0NTNyAqcDdfZGF0YSk7CiBpbnQgUEtDUzdfU0lHTkVSX0lORk9fc2V0KFBLQ1M3X1NJR05FUl9JTkZPICpwN2ksIFg1MDkgKng1MDksIEVWUF9QS0VZICpwa2V5LAogCWNvbnN0IEVWUF9NRCAqZGdzdCk7CitpbnQgUEtDUzdfU0lHTkVSX0lORk9fc2lnbihQS0NTN19TSUdORVJfSU5GTyAqc2kpOwogaW50IFBLQ1M3X2FkZF9zaWduZXIoUEtDUzcgKnA3LCBQS0NTN19TSUdORVJfSU5GTyAqcDdpKTsKIGludCBQS0NTN19hZGRfY2VydGlmaWNhdGUoUEtDUzcgKnA3LCBYNTA5ICp4NTA5KTsKIGludCBQS0NTN19hZGRfY3JsKFBLQ1M3ICpwNywgWDUwOV9DUkwgKng1MDkpOwpAQCAtMzM2LDkgKzMzNSwxMyBAQAogU1RBQ0tfT0YoUEtDUzdfU0lHTkVSX0lORk8pICpQS0NTN19nZXRfc2lnbmVyX2luZm8oUEtDUzcgKnA3KTsKIAogUEtDUzdfUkVDSVBfSU5GTyAqUEtDUzdfYWRkX3JlY2lwaWVudChQS0NTNyAqcDcsIFg1MDkgKng1MDkpOwordm9pZCBQS0NTN19TSUdORVJfSU5GT19nZXQwX2FsZ3MoUEtDUzdfU0lHTkVSX0lORk8gKnNpLCBFVlBfUEtFWSAqKnBrLAorCQkJCQlYNTA5X0FMR09SICoqcGRpZywgWDUwOV9BTEdPUiAqKnBzaWcpOwordm9pZCBQS0NTN19SRUNJUF9JTkZPX2dldDBfYWxnKFBLQ1M3X1JFQ0lQX0lORk8gKnJpLCBYNTA5X0FMR09SICoqcGVuYyk7CiBpbnQgUEtDUzdfYWRkX3JlY2lwaWVudF9pbmZvKFBLQ1M3ICpwNywgUEtDUzdfUkVDSVBfSU5GTyAqcmkpOwogaW50IFBLQ1M3X1JFQ0lQX0lORk9fc2V0KFBLQ1M3X1JFQ0lQX0lORk8gKnA3aSwgWDUwOSAqeDUwOSk7CiBpbnQgUEtDUzdfc2V0X2NpcGhlcihQS0NTNyAqcDcsIGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlcik7CitpbnQgUEtDUzdfc3RyZWFtKHVuc2lnbmVkIGNoYXIgKioqYm91bmRhcnksIFBLQ1M3ICpwNyk7CiAKIFBLQ1M3X0lTU1VFUl9BTkRfU0VSSUFMICpQS0NTN19nZXRfaXNzdWVyX2FuZF9zZXJpYWwoUEtDUzcgKnA3LCBpbnQgaWR4KTsKIEFTTjFfT0NURVRfU1RSSU5HICpQS0NTN19kaWdlc3RfZnJvbV9hdHRyaWJ1dGVzKFNUQUNLX09GKFg1MDlfQVRUUklCVVRFKSAqc2spOwpAQCAtMzU1LDYgKzM1OCwxMiBAQAogCiBQS0NTNyAqUEtDUzdfc2lnbihYNTA5ICpzaWduY2VydCwgRVZQX1BLRVkgKnBrZXksIFNUQUNLX09GKFg1MDkpICpjZXJ0cywKIAkJCQkJCQlCSU8gKmRhdGEsIGludCBmbGFncyk7CisKK1BLQ1M3X1NJR05FUl9JTkZPICpQS0NTN19zaWduX2FkZF9zaWduZXIoUEtDUzcgKnA3LAorCQkJWDUwOSAqc2lnbmNlcnQsIEVWUF9QS0VZICpwa2V5LCBjb25zdCBFVlBfTUQgKm1kLAorCQkJaW50IGZsYWdzKTsKKworaW50IFBLQ1M3X2ZpbmFsKFBLQ1M3ICpwNywgQklPICpkYXRhLCBpbnQgZmxhZ3MpOwogaW50IFBLQ1M3X3ZlcmlmeShQS0NTNyAqcDcsIFNUQUNLX09GKFg1MDkpICpjZXJ0cywgWDUwOV9TVE9SRSAqc3RvcmUsCiAJCQkJCUJJTyAqaW5kYXRhLCBCSU8gKm91dCwgaW50IGZsYWdzKTsKIFNUQUNLX09GKFg1MDkpICpQS0NTN19nZXQwX3NpZ25lcnMoUEtDUzcgKnA3LCBTVEFDS19PRihYNTA5KSAqY2VydHMsIGludCBmbGFncyk7CkBAIC0zNjcsMTAgKzM3NiwxNiBAQAogU1RBQ0tfT0YoWDUwOV9BTEdPUikgKlBLQ1M3X2dldF9zbWltZWNhcChQS0NTN19TSUdORVJfSU5GTyAqc2kpOwogaW50IFBLQ1M3X3NpbXBsZV9zbWltZWNhcChTVEFDS19PRihYNTA5X0FMR09SKSAqc2ssIGludCBuaWQsIGludCBhcmcpOwogCitpbnQgUEtDUzdfYWRkX2F0dHJpYl9jb250ZW50X3R5cGUoUEtDUzdfU0lHTkVSX0lORk8gKnNpLCBBU04xX09CSkVDVCAqY29pZCk7CitpbnQgUEtDUzdfYWRkMF9hdHRyaWJfc2lnbmluZ190aW1lKFBLQ1M3X1NJR05FUl9JTkZPICpzaSwgQVNOMV9USU1FICp0KTsKK2ludCBQS0NTN19hZGQxX2F0dHJpYl9kaWdlc3QoUEtDUzdfU0lHTkVSX0lORk8gKnNpLAorCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm1kLCBpbnQgbWRsZW4pOworCiBpbnQgU01JTUVfd3JpdGVfUEtDUzcoQklPICpiaW8sIFBLQ1M3ICpwNywgQklPICpkYXRhLCBpbnQgZmxhZ3MpOwogUEtDUzcgKlNNSU1FX3JlYWRfUEtDUzcoQklPICpiaW8sIEJJTyAqKmJjb250KTsKLWludCBTTUlNRV9jcmxmX2NvcHkoQklPICppbiwgQklPICpvdXQsIGludCBmbGFncyk7Ci1pbnQgU01JTUVfdGV4dChCSU8gKmluLCBCSU8gKm91dCk7CisKK0JJTyAqQklPX25ld19QS0NTNyhCSU8gKm91dCwgUEtDUzcgKnA3KTsKKwogCiAvKiBCRUdJTiBFUlJPUiBDT0RFUyAqLwogLyogVGhlIGZvbGxvd2luZyBsaW5lcyBhcmUgYXV0byBnZW5lcmF0ZWQgYnkgdGhlIHNjcmlwdCBta2Vyci5wbC4gQW55IGNoYW5nZXMKQEAgLTM4MywxMiArMzk4LDE3IEBACiAvKiBGdW5jdGlvbiBjb2Rlcy4gKi8KICNkZWZpbmUgUEtDUzdfRl9CNjRfUkVBRF9QS0NTNwkJCQkgMTIwCiAjZGVmaW5lIFBLQ1M3X0ZfQjY0X1dSSVRFX1BLQ1M3CQkJCSAxMjEKKyNkZWZpbmUgUEtDUzdfRl9ET19QS0NTN19TSUdORURfQVRUUklCCQkJIDEzNgorI2RlZmluZSBQS0NTN19GX0kyRF9QS0NTN19CSU9fU1RSRUFNCQkJIDE0MAorI2RlZmluZSBQS0NTN19GX1BLQ1M3X0FERDBfQVRUUklCX1NJR05JTkdfVElNRQkJIDEzNQogI2RlZmluZSBQS0NTN19GX1BLQ1M3X0FERF9BVFRSSUJfU01JTUVDQVAJCSAxMTgKICNkZWZpbmUgUEtDUzdfRl9QS0NTN19BRERfQ0VSVElGSUNBVEUJCQkgMTAwCiAjZGVmaW5lIFBLQ1M3X0ZfUEtDUzdfQUREX0NSTAkJCQkgMTAxCiAjZGVmaW5lIFBLQ1M3X0ZfUEtDUzdfQUREX1JFQ0lQSUVOVF9JTkZPCQkgMTAyCisjZGVmaW5lIFBLQ1M3X0ZfUEtDUzdfQUREX1NJR05BVFVSRQkJCSAxMzEKICNkZWZpbmUgUEtDUzdfRl9QS0NTN19BRERfU0lHTkVSCQkJIDEwMwogI2RlZmluZSBQS0NTN19GX1BLQ1M3X0JJT19BRERfRElHRVNUCQkJIDEyNQorI2RlZmluZSBQS0NTN19GX1BLQ1M3X0NPUFlfRVhJU1RJTkdfRElHRVNUCQkgMTM4CiAjZGVmaW5lIFBLQ1M3X0ZfUEtDUzdfQ1RSTAkJCQkgMTA0CiAjZGVmaW5lIFBLQ1M3X0ZfUEtDUzdfREFUQURFQ09ERQkJCSAxMTIKICNkZWZpbmUgUEtDUzdfRl9QS0NTN19EQVRBRklOQUwJCQkJIDEyOApAQCAtMzk2LDE1ICs0MTYsMjIgQEAKICNkZWZpbmUgUEtDUzdfRl9QS0NTN19EQVRBU0lHTgkJCQkgMTA2CiAjZGVmaW5lIFBLQ1M3X0ZfUEtDUzdfREFUQVZFUklGWQkJCSAxMDcKICNkZWZpbmUgUEtDUzdfRl9QS0NTN19ERUNSWVBUCQkJCSAxMTQKKyNkZWZpbmUgUEtDUzdfRl9QS0NTN19ERUNSWVBUX1JJTkZPCQkJIDEzMworI2RlZmluZSBQS0NTN19GX1BLQ1M3X0VOQ09ERV9SSU5GTwkJCSAxMzIKICNkZWZpbmUgUEtDUzdfRl9QS0NTN19FTkNSWVBUCQkJCSAxMTUKKyNkZWZpbmUgUEtDUzdfRl9QS0NTN19GSU5BTAkJCQkgMTM0CiAjZGVmaW5lIFBLQ1M3X0ZfUEtDUzdfRklORF9ESUdFU1QJCQkgMTI3CiAjZGVmaW5lIFBLQ1M3X0ZfUEtDUzdfR0VUMF9TSUdORVJTCQkJIDEyNAorI2RlZmluZSBQS0NTN19GX1BLQ1M3X1JFQ0lQX0lORk9fU0VUCQkJIDEzMAogI2RlZmluZSBQS0NTN19GX1BLQ1M3X1NFVF9DSVBIRVIJCQkgMTA4CiAjZGVmaW5lIFBLQ1M3X0ZfUEtDUzdfU0VUX0NPTlRFTlQJCQkgMTA5CiAjZGVmaW5lIFBLQ1M3X0ZfUEtDUzdfU0VUX0RJR0VTVAkJCSAxMjYKICNkZWZpbmUgUEtDUzdfRl9QS0NTN19TRVRfVFlQRQkJCQkgMTEwCiAjZGVmaW5lIFBLQ1M3X0ZfUEtDUzdfU0lHTgkJCQkgMTE2CiAjZGVmaW5lIFBLQ1M3X0ZfUEtDUzdfU0lHTkFUVVJFVkVSSUZZCQkJIDExMworI2RlZmluZSBQS0NTN19GX1BLQ1M3X1NJR05FUl9JTkZPX1NFVAkJCSAxMjkKKyNkZWZpbmUgUEtDUzdfRl9QS0NTN19TSUdORVJfSU5GT19TSUdOCQkJIDEzOQorI2RlZmluZSBQS0NTN19GX1BLQ1M3X1NJR05fQUREX1NJR05FUgkJCSAxMzcKICNkZWZpbmUgUEtDUzdfRl9QS0NTN19TSU1QTEVfU01JTUVDQVAJCQkgMTE5CiAjZGVmaW5lIFBLQ1M3X0ZfUEtDUzdfVkVSSUZZCQkJCSAxMTcKICNkZWZpbmUgUEtDUzdfRl9TTUlNRV9SRUFEX1BLQ1M3CQkJIDEyMgpAQCAtNDE1LDEwICs0NDIsMTMgQEAKICNkZWZpbmUgUEtDUzdfUl9DSVBIRVJfSEFTX05PX09CSkVDVF9JREVOVElGSUVSCQkgMTQ0CiAjZGVmaW5lIFBLQ1M3X1JfQ0lQSEVSX05PVF9JTklUSUFMSVpFRAkJCSAxMTYKICNkZWZpbmUgUEtDUzdfUl9DT05URU5UX0FORF9EQVRBX1BSRVNFTlQJCSAxMTgKKyNkZWZpbmUgUEtDUzdfUl9DVFJMX0VSUk9SCQkJCSAxNTIKICNkZWZpbmUgUEtDUzdfUl9ERUNPREVfRVJST1IJCQkJIDEzMAogI2RlZmluZSBQS0NTN19SX0RFQ1JZUFRFRF9LRVlfSVNfV1JPTkdfTEVOR1RICQkgMTAwCiAjZGVmaW5lIFBLQ1M3X1JfREVDUllQVF9FUlJPUgkJCQkgMTE5CiAjZGVmaW5lIFBLQ1M3X1JfRElHRVNUX0ZBSUxVUkUJCQkJIDEwMQorI2RlZmluZSBQS0NTN19SX0VOQ1JZUFRJT05fQ1RSTF9GQUlMVVJFCQkJIDE0OQorI2RlZmluZSBQS0NTN19SX0VOQ1JZUFRJT05fTk9UX1NVUFBPUlRFRF9GT1JfVEhJU19LRVlfVFlQRSAxNTAKICNkZWZpbmUgUEtDUzdfUl9FUlJPUl9BRERJTkdfUkVDSVBJRU5UCQkJIDEyMAogI2RlZmluZSBQS0NTN19SX0VSUk9SX1NFVFRJTkdfQ0lQSEVSCQkJIDEyMQogI2RlZmluZSBQS0NTN19SX0lOVkFMSURfTUlNRV9UWVBFCQkJIDEzMQpAQCAtNDI5LDYgKzQ1OSw4IEBACiAjZGVmaW5lIFBLQ1M3X1JfTUlTU0lOR19DRVJJUEVORF9JTkZPCQkJIDEwMwogI2RlZmluZSBQS0NTN19SX05PX0NPTlRFTlQJCQkJIDEyMgogI2RlZmluZSBQS0NTN19SX05PX0NPTlRFTlRfVFlQRQkJCQkgMTM1CisjZGVmaW5lIFBLQ1M3X1JfTk9fREVGQVVMVF9ESUdFU1QJCQkgMTUxCisjZGVmaW5lIFBLQ1M3X1JfTk9fTUFUQ0hJTkdfRElHRVNUX1RZUEVfRk9VTkQJCSAxNTQKICNkZWZpbmUgUEtDUzdfUl9OT19NVUxUSVBBUlRfQk9EWV9GQUlMVVJFCQkgMTM2CiAjZGVmaW5lIFBLQ1M3X1JfTk9fTVVMVElQQVJUX0JPVU5EQVJZCQkJIDEzNwogI2RlZmluZSBQS0NTN19SX05PX1JFQ0lQSUVOVF9NQVRDSEVTX0NFUlRJRklDQVRFCSAxMTUKQEAgLTQzOCw2ICs0NzAsNyBAQAogI2RlZmluZSBQS0NTN19SX05PX1NJR19DT05URU5UX1RZUEUJCQkgMTM4CiAjZGVmaW5lIFBLQ1M3X1JfT1BFUkFUSU9OX05PVF9TVVBQT1JURURfT05fVEhJU19UWVBFCSAxMDQKICNkZWZpbmUgUEtDUzdfUl9QS0NTN19BRERfU0lHTkFUVVJFX0VSUk9SCQkgMTI0CisjZGVmaW5lIFBLQ1M3X1JfUEtDUzdfQUREX1NJR05FUl9FUlJPUgkJCSAxNTMKICNkZWZpbmUgUEtDUzdfUl9QS0NTN19EQVRBRklOQUwJCQkJIDEyNgogI2RlZmluZSBQS0NTN19SX1BLQ1M3X0RBVEFGSU5BTF9FUlJPUgkJCSAxMjUKICNkZWZpbmUgUEtDUzdfUl9QS0NTN19EQVRBU0lHTgkJCQkgMTQ1CkBAIC00NDYsNiArNDc5LDggQEAKICNkZWZpbmUgUEtDUzdfUl9QUklWQVRFX0tFWV9ET0VTX05PVF9NQVRDSF9DRVJUSUZJQ0FURQkgMTI3CiAjZGVmaW5lIFBLQ1M3X1JfU0lHTkFUVVJFX0ZBSUxVUkUJCQkgMTA1CiAjZGVmaW5lIFBLQ1M3X1JfU0lHTkVSX0NFUlRJRklDQVRFX05PVF9GT1VORAkJIDEyOAorI2RlZmluZSBQS0NTN19SX1NJR05JTkdfQ1RSTF9GQUlMVVJFCQkJIDE0NworI2RlZmluZSBQS0NTN19SX1NJR05JTkdfTk9UX1NVUFBPUlRFRF9GT1JfVEhJU19LRVlfVFlQRQkgMTQ4CiAjZGVmaW5lIFBLQ1M3X1JfU0lHX0lOVkFMSURfTUlNRV9UWVBFCQkJIDE0MQogI2RlZmluZSBQS0NTN19SX1NNSU1FX1RFWFRfRVJST1IJCQkgMTI5CiAjZGVmaW5lIFBLQ1M3X1JfVU5BQkxFX1RPX0ZJTkRfQ0VSVElGSUNBVEUJCSAxMDYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnNzbC9wcV9jb21wYXQuaCBiL2luY2x1ZGUvb3BlbnNzbC9wcV9jb21wYXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2IyYzMyNy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL29wZW5zc2wvcHFfY29tcGF0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTIgKzAsMCBAQAotLyogY3J5cHRvL3BxdWV1ZS9wcXVldWVfY29tcGF0LmggKi8KLS8qIAotICogRFRMUyBpbXBsZW1lbnRhdGlvbiB3cml0dGVuIGJ5IE5hZ2VuZHJhIE1vZGFkdWd1Ci0gKiAobmFnZW5kcmFAY3Muc3RhbmZvcmQuZWR1KSBmb3IgdGhlIE9wZW5TU0wgcHJvamVjdCAyMDA1LiAgCi0gKi8KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0gKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSAqCi0gKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0gKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0gKiAgICBvcGVuc3NsLWNvcmVAT3BlblNTTC5vcmcuCi0gKgotICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0gKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0gKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0gKgotICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotICogICAgYWNrbm93bGVkZ21lbnQ6Ci0gKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0gKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqCi0gKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKLSAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KLSAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgotICoKLSAqLwotCi0jaWZuZGVmIEhFQURFUl9QUV9DT01QQVRfSAotI2RlZmluZSBIRUFERVJfUFFfQ09NUEFUX0gKLQotI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KLSNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0KLS8qIAotICogVGhlIHB1cnBvc2Ugb2YgdGhpcyBoZWFkZXIgZmlsZSBpcyBmb3Igc3VwcG9ydGluZyA2NC1iaXQgaW50ZWdlcgotICogbWFuaXB1bGF0aW9uIG9uIDMyLWJpdCAoYW5kIGxvd2VyKSBtYWNoaW5lcy4gIEN1cnJlbnRseSB0aGUgb25seQotICogc3VjaCBlbnZpcm9ubWVudCBpcyBWTVMsIFV0cml4IGFuZCB0aG9zZSB3aXRoIHNtYWxsZXIgZGVmYXVsdCBpbnRlZ2VyCi0gKiBzaXplcyB0aGFuIDMyIGJpdHMuICBGb3IgYWxsIHN1Y2ggZW52aXJvbm1lbnQsIHdlIGZhbGwgYmFjayB0byB1c2luZwotICogQklHTlVNLiAgV2UgbWF5IG5lZWQgdG8gZmluZSB0dW5lIHRoZSBjb25kaXRpb25zIGZvciBzeXN0ZW1zIHRoYXQKLSAqIGFyZSBpbmNvcnJlY3RseSBjb25maWd1cmVkLgotICoKLSAqIFRoZSBvbmx5IGNsaWVudHMgb2YgdGhpcyBjb2RlIGFyZSAoMSkgcHF1ZXVlIGZvciBwcmlvcml0eSwgYW5kCi0gKiAoMikgRFRMUywgZm9yIHNlcXVlbmNlIG51bWJlciBtYW5pcHVsYXRpb24uCi0gKi8KLQotI2lmIChkZWZpbmVkKFRISVJUWV9UV09fQklUKSAmJiAhZGVmaW5lZChCTl9MTE9ORykpIHx8IGRlZmluZWQoU0lYVEVFTl9CSVQpIHx8IGRlZmluZWQoRUlHSFRfQklUKQotCi0jZGVmaW5lIFBRXzY0QklUX0lTX0lOVEVHRVIgMAotI2RlZmluZSBQUV82NEJJVF9JU19CSUdOVU0gMQotCi0jZGVmaW5lIFBRXzY0QklUICAgICBCSUdOVU0KLSNkZWZpbmUgUFFfNjRCSVRfQ1RYIEJOX0NUWAotCi0jZGVmaW5lIHBxXzY0Yml0X2luaXQoeCkgICAgICAgICAgIEJOX2luaXQoeCkKLSNkZWZpbmUgcHFfNjRiaXRfZnJlZSh4KSAgICAgICAgICAgQk5fZnJlZSh4KQotCi0jZGVmaW5lIHBxXzY0Yml0X2N0eF9uZXcoY3R4KSAgICAgIEJOX0NUWF9uZXcoKQotI2RlZmluZSBwcV82NGJpdF9jdHhfZnJlZSh4KSAgICAgICBCTl9DVFhfZnJlZSh4KQotCi0jZGVmaW5lIHBxXzY0Yml0X2Fzc2lnbih4LCB5KSAgICAgIEJOX2NvcHkoeCwgeSkKLSNkZWZpbmUgcHFfNjRiaXRfYXNzaWduX3dvcmQoeCwgeSkgQk5fc2V0X3dvcmQoeCwgeSkKLSNkZWZpbmUgcHFfNjRiaXRfZ3QoeCwgeSkgICAgICAgICAgQk5fdWNtcCh4LCB5KSA+PSAxID8gMSA6IDAKLSNkZWZpbmUgcHFfNjRiaXRfZXEoeCwgeSkgICAgICAgICAgQk5fdWNtcCh4LCB5KSA9PSAwID8gMSA6IDAKLSNkZWZpbmUgcHFfNjRiaXRfYWRkX3dvcmQoeCwgdykgICAgQk5fYWRkX3dvcmQoeCwgdykKLSNkZWZpbmUgcHFfNjRiaXRfc3ViKHIsIHgsIHkpICAgICAgQk5fc3ViKHIsIHgsIHkpCi0jZGVmaW5lIHBxXzY0Yml0X3N1Yl93b3JkKHgsIHcpICAgIEJOX3N1Yl93b3JkKHgsIHcpCi0jZGVmaW5lIHBxXzY0Yml0X21vZChyLCB4LCBuLCBjdHgpIEJOX21vZChyLCB4LCBuLCBjdHgpCi0KLSNkZWZpbmUgcHFfNjRiaXRfYmluMm51bShibiwgYnl0ZXMsIGxlbikgICBCTl9iaW4yYm4oYnl0ZXMsIGxlbiwgYm4pCi0jZGVmaW5lIHBxXzY0Yml0X251bTJiaW4oYm4sIGJ5dGVzKSAgICAgICAgQk5fYm4yYmluKGJuLCBieXRlcykKLSNkZWZpbmUgcHFfNjRiaXRfZ2V0X3dvcmQoeCkgICAgICAgICAgICAgICBCTl9nZXRfd29yZCh4KQotI2RlZmluZSBwcV82NGJpdF9pc19iaXRfc2V0KHgsIG9mZnNldCkgICAgIEJOX2lzX2JpdF9zZXQoeCwgb2Zmc2V0KQotI2RlZmluZSBwcV82NGJpdF9sc2hpZnQociwgeCwgc2hpZnQpICAgICAgIEJOX2xzaGlmdChyLCB4LCBzaGlmdCkKLSNkZWZpbmUgcHFfNjRiaXRfc2V0X2JpdCh4LCBudW0pICAgICAgICAgICBCTl9zZXRfYml0KHgsIG51bSkKLSNkZWZpbmUgcHFfNjRiaXRfZ2V0X2xlbmd0aCh4KSAgICAgICAgICAgICBCTl9udW1fYml0cygoeCkpCi0KLSNlbHNlCi0KLSNkZWZpbmUgUFFfNjRCSVRfSVNfSU5URUdFUiAxCi0jZGVmaW5lIFBRXzY0QklUX0lTX0JJR05VTSAwCi0KLSNpZiBkZWZpbmVkKFNJWFRZX0ZPVVJfQklUKQotI2RlZmluZSBQUV82NEJJVCBCTl9VTE9ORwotI2RlZmluZSBQUV82NEJJVF9QUklOVCAiJWxsZCIKLSNlbGlmIGRlZmluZWQoU0lYVFlfRk9VUl9CSVRfTE9ORykKLSNkZWZpbmUgUFFfNjRCSVQgQk5fVUxPTkcKLSNkZWZpbmUgUFFfNjRCSVRfUFJJTlQgIiVsZCIKLSNlbGlmIGRlZmluZWQoVEhJUlRZX1RXT19CSVQpCi0jZGVmaW5lIFBRXzY0QklUIEJOX1VMTE9ORwotI2RlZmluZSBQUV82NEJJVF9QUklOVCAiJWxsZCIKLSNlbmRpZgotCi0jZGVmaW5lIFBRXzY0QklUX0NUWCAgICAgIHZvaWQKLQotI2RlZmluZSBwcV82NGJpdF9pbml0KHgpCi0jZGVmaW5lIHBxXzY0Yml0X2ZyZWUoeCkKLSNkZWZpbmUgcHFfNjRiaXRfY3R4X25ldyhjdHgpICAgICAgICAoY3R4KQotI2RlZmluZSBwcV82NGJpdF9jdHhfZnJlZSh4KQotCi0jZGVmaW5lIHBxXzY0Yml0X2Fzc2lnbih4LCB5KSAgICAgICAgKCooeCkgPSAqKHkpKQotI2RlZmluZSBwcV82NGJpdF9hc3NpZ25fd29yZCh4LCB5KSAgICgqKHgpID0geSkKLSNkZWZpbmUgcHFfNjRiaXRfZ3QoeCwgeSkJICAgICAgICAgKCooeCkgPiAqKHkpKQotI2RlZmluZSBwcV82NGJpdF9lcSh4LCB5KSAgICAgICAgICAgICgqKHgpID09ICooeSkpCi0jZGVmaW5lIHBxXzY0Yml0X2FkZF93b3JkKHgsIHcpICAgICAgKCooeCkgPSAoKih4KSArICh3KSkpCi0jZGVmaW5lIHBxXzY0Yml0X3N1YihyLCB4LCB5KSAgICAgICAgKCoocikgPSAoKih4KSAtICooeSkpKQotI2RlZmluZSBwcV82NGJpdF9zdWJfd29yZCh4LCB3KSAgICAgICgqKHgpID0gKCooeCkgLSAodykpKQotI2RlZmluZSBwcV82NGJpdF9tb2QociwgeCwgbiwgY3R4KQotCi0jZGVmaW5lIHBxXzY0Yml0X2JpbjJudW0obnVtLCBieXRlcywgbGVuKSBieXRlc190b19sb25nX2xvbmcoYnl0ZXMsIG51bSkKLSNkZWZpbmUgcHFfNjRiaXRfbnVtMmJpbihudW0sIGJ5dGVzKSAgICAgIGxvbmdfbG9uZ190b19ieXRlcyhudW0sIGJ5dGVzKQotI2RlZmluZSBwcV82NGJpdF9nZXRfd29yZCh4KSAgICAgICAgICAgICAgKih4KQotI2RlZmluZSBwcV82NGJpdF9sc2hpZnQociwgeCwgc2hpZnQpICAgICAgKCoocikgPSAoKih4KSA8PCAoc2hpZnQpKSkKLSNkZWZpbmUgcHFfNjRiaXRfc2V0X2JpdCh4LCBudW0pICAgICAgICAgIGRvIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBRXzY0QklUIG1hc2sgPSAxOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzayA9IG1hc2sgPDwgKG51bSk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKHgpIHw9IG1hc2s7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKLSNlbmRpZiAvKiBPUEVOU1NMX1NZU19WTVMgKi8KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmggYi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmgKaW5kZXggMTZjNDA3Mi4uODdmYzkwMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9vcGVuc3NsL3BxdWV1ZS5oCisrKyBiL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaApAQCAtNjQsMjAgKzY0LDE4IEBACiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKLSNpbmNsdWRlIDxvcGVuc3NsL3BxX2NvbXBhdC5oPgotCiB0eXBlZGVmIHN0cnVjdCBfcHF1ZXVlICpwcXVldWU7CiAKIHR5cGVkZWYgc3RydWN0IF9waXRlbQogCXsKLQlQUV82NEJJVCBwcmlvcml0eTsKKwl1bnNpZ25lZCBjaGFyIHByaW9yaXR5WzhdOyAvKiA2NC1iaXQgdmFsdWUgaW4gYmlnLWVuZGlhbiBlbmNvZGluZyAqLwogCXZvaWQgKmRhdGE7CiAJc3RydWN0IF9waXRlbSAqbmV4dDsKIAl9IHBpdGVtOwogCiB0eXBlZGVmIHN0cnVjdCBfcGl0ZW0gKnBpdGVyYXRvcjsKIAotcGl0ZW0gKnBpdGVtX25ldyhQUV82NEJJVCBwcmlvcml0eSwgdm9pZCAqZGF0YSk7CitwaXRlbSAqcGl0ZW1fbmV3KHVuc2lnbmVkIGNoYXIgKnByaW82NGJlLCB2b2lkICpkYXRhKTsKIHZvaWQgICBwaXRlbV9mcmVlKHBpdGVtICppdGVtKTsKIAogcHF1ZXVlIHBxdWV1ZV9uZXcodm9pZCk7CkBAIC04Niw3ICs4NCw3IEBACiBwaXRlbSAqcHF1ZXVlX2luc2VydChwcXVldWUgcHEsIHBpdGVtICppdGVtKTsKIHBpdGVtICpwcXVldWVfcGVlayhwcXVldWUgcHEpOwogcGl0ZW0gKnBxdWV1ZV9wb3AocHF1ZXVlIHBxKTsKLXBpdGVtICpwcXVldWVfZmluZChwcXVldWUgcHEsIFBRXzY0QklUIHByaW9yaXR5KTsKK3BpdGVtICpwcXVldWVfZmluZChwcXVldWUgcHEsIHVuc2lnbmVkIGNoYXIgKnByaW82NGJlKTsKIHBpdGVtICpwcXVldWVfaXRlcmF0b3IocHF1ZXVlIHBxKTsKIHBpdGVtICpwcXVldWVfbmV4dChwaXRlcmF0b3IgKml0ZXIpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW5zc2wvcmFuZC5oIGIvaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAppbmRleCBlYTg5MTUzLi5hYzZjMDIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCisrKyBiL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKQEAgLTcyLDcgKzcyLDcgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChPUEVOU1NMX0ZJUFMpCi0jZGVmaW5lIEZJUFNfUkFORF9TSVpFX1QgaW50CisjZGVmaW5lIEZJUFNfUkFORF9TSVpFX1Qgc2l6ZV90CiAjZW5kaWYKIAogLyogQWxyZWFkeSBkZWZpbmVkIGluIG9zc2xfdHlwLmggKi8KQEAgLTExMSwxNSArMTExLDYgQEAKIGludCBSQU5EX2VnZChjb25zdCBjaGFyICpwYXRoKTsKIGludCBSQU5EX2VnZF9ieXRlcyhjb25zdCBjaGFyICpwYXRoLGludCBieXRlcyk7CiBpbnQgUkFORF9wb2xsKHZvaWQpOwotI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQotI2lmZGVmIE9QRU5TU0xfRklQUwotdm9pZCBpbnRfUkFORF9pbml0X2VuZ2luZV9jYWxsYmFja3Modm9pZCk7Ci12b2lkIGludF9SQU5EX3NldF9jYWxsYmFja3MoCi0JaW50ICgqc2V0X3JhbmRfZnVuYykoY29uc3QgUkFORF9NRVRIT0QgKm1ldGgsCi0JCQkJCQljb25zdCBSQU5EX01FVEhPRCAqKnBtZXRoKSwKLQljb25zdCBSQU5EX01FVEhPRCAqKCpnZXRfcmFuZF9mdW5jKShjb25zdCBSQU5EX01FVEhPRCAqKnBtZXRoKSk7Ci0jZW5kaWYKLSNlbmRpZgogCiAjaWYgZGVmaW5lZChPUEVOU1NMX1NZU19XSU5ET1dTKSB8fCBkZWZpbmVkKE9QRU5TU0xfU1lTX1dJTjMyKQogCkBAIC0xMzcsMjkgKzEyOCwxMSBAQAogLyogRXJyb3IgY29kZXMgZm9yIHRoZSBSQU5EIGZ1bmN0aW9ucy4gKi8KIAogLyogRnVuY3Rpb24gY29kZXMuICovCi0jZGVmaW5lIFJBTkRfRl9FTkdfUkFORF9HRVRfUkFORF9NRVRIT0QJCQkgMTA4Ci0jZGVmaW5lIFJBTkRfRl9GSVBTX1JBTkQJCQkJIDEwMwotI2RlZmluZSBSQU5EX0ZfRklQU19SQU5EX0JZVEVTCQkJCSAxMDIKLSNkZWZpbmUgUkFORF9GX0ZJUFNfUkFORF9HRVRfUkFORF9NRVRIT0QJCSAxMDkKLSNkZWZpbmUgUkFORF9GX0ZJUFNfUkFORF9TRVRfRFQJCQkJIDEwNgotI2RlZmluZSBSQU5EX0ZfRklQU19TRVRfRFQJCQkJIDEwNAotI2RlZmluZSBSQU5EX0ZfRklQU19TRVRfUFJOR19TRUVECQkJIDEwNwotI2RlZmluZSBSQU5EX0ZfRklQU19TRVRfVEVTVF9NT0RFCQkJIDEwNQogI2RlZmluZSBSQU5EX0ZfUkFORF9HRVRfUkFORF9NRVRIT0QJCQkgMTAxCiAjZGVmaW5lIFJBTkRfRl9TU0xFQVlfUkFORF9CWVRFUwkJCSAxMDAKIAogLyogUmVhc29uIGNvZGVzLiAqLwotI2RlZmluZSBSQU5EX1JfTk9OX0ZJUFNfTUVUSE9ECQkJCSAxMDUKLSNkZWZpbmUgUkFORF9SX05PVF9JTl9URVNUX01PREUJCQkJIDEwNgotI2RlZmluZSBSQU5EX1JfTk9fS0VZX1NFVAkJCQkgMTA3Ci0jZGVmaW5lIFJBTkRfUl9QUk5HX0FTS0lOR19GT1JfVE9PX01VQ0gJCQkgMTAxCi0jZGVmaW5lIFJBTkRfUl9QUk5HX0VSUk9SCQkJCSAxMDgKLSNkZWZpbmUgUkFORF9SX1BSTkdfS0VZRUQJCQkJIDEwOQotI2RlZmluZSBSQU5EX1JfUFJOR19OT1RfUkVLRVlFRAkJCQkgMTAyCi0jZGVmaW5lIFJBTkRfUl9QUk5HX05PVF9SRVNFRURFRAkJCSAxMDMKICNkZWZpbmUgUkFORF9SX1BSTkdfTk9UX1NFRURFRAkJCQkgMTAwCi0jZGVmaW5lIFJBTkRfUl9QUk5HX1NFRURfTVVTVF9OT1RfTUFUQ0hfS0VZCQkgMTEwCi0jZGVmaW5lIFJBTkRfUl9QUk5HX1NUVUNLCQkJCSAxMDQKIAogI2lmZGVmICBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVuc3NsL3JjMi5oIGIvaW5jbHVkZS9vcGVuc3NsL3JjMi5oCmluZGV4IGU1NDJlYzkuLjM0YzgzNjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvb3BlbnNzbC9yYzIuaAorKysgYi9pbmNsdWRlL29wZW5zc2wvcmMyLmgKQEAgLTc5LDkgKzc5LDcgQEAKIAlSQzJfSU5UIGRhdGFbNjRdOwogCX0gUkMyX0tFWTsKIAotI2lmZGVmIE9QRU5TU0xfRklQUyAKLXZvaWQgcHJpdmF0ZV9SQzJfc2V0X2tleShSQzJfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsaW50IGJpdHMpOwotI2VuZGlmCisgCiB2b2lkIFJDMl9zZXRfa2V5KFJDMl9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSxpbnQgYml0cyk7CiB2b2lkIFJDMl9lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbix1bnNpZ25lZCBjaGFyICpvdXQsUkMyX0tFWSAqa2V5LAogCQkgICAgIGludCBlbmMpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVuc3NsL3JjNC5oIGIvaW5jbHVkZS9vcGVuc3NsL3JjNC5oCmluZGV4IDJkODYyMGQuLjI5ZDFhY2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvb3BlbnNzbC9yYzQuaAorKysgYi9pbmNsdWRlL29wZW5zc2wvcmM0LmgKQEAgLTY0LDYgKzY0LDggQEAKICNlcnJvciBSQzQgaXMgZGlzYWJsZWQuCiAjZW5kaWYKIAorI2luY2x1ZGUgPHN0ZGRlZi5oPgorCiAjaWZkZWYgIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKICNlbmRpZgpAQCAtNzYsMTEgKzc4LDggQEAKIAogIAogY29uc3QgY2hhciAqUkM0X29wdGlvbnModm9pZCk7Ci0jaWZkZWYgT1BFTlNTTF9GSVBTCi12b2lkIHByaXZhdGVfUkM0X3NldF9rZXkoUkM0X0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKLSNlbmRpZgogdm9pZCBSQzRfc2V0X2tleShSQzRfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOwotdm9pZCBSQzQoUkM0X0tFWSAqa2V5LCB1bnNpZ25lZCBsb25nIGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5kYXRhLAordm9pZCBSQzQoUkM0X0tFWSAqa2V5LCBzaXplX3QgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICppbmRhdGEsCiAJCXVuc2lnbmVkIGNoYXIgKm91dGRhdGEpOwogCiAjaWZkZWYgIF9fY3BsdXNwbHVzCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW5zc2wvcmlwZW1kLmggYi9pbmNsdWRlL29wZW5zc2wvcmlwZW1kLmgKaW5kZXggM2I2ZDA0My4uNTk0MmViNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9vcGVuc3NsL3JpcGVtZC5oCisrKyBiL2luY2x1ZGUvb3BlbnNzbC9yaXBlbWQuaApAQCAtNzAsNyArNzAsNyBAQAogI2Vycm9yIFJJUEVNRCBpcyBkaXNhYmxlZC4KICNlbmRpZgogCi0jaWYgZGVmaW5lZChPUEVOU1NMX1NZU19XSU4xNikgfHwgZGVmaW5lZChfX0xQMzJfXykKKyNpZiBkZWZpbmVkKF9fTFAzMl9fKQogI2RlZmluZSBSSVBFTUQxNjBfTE9ORyB1bnNpZ25lZCBsb25nCiAjZWxpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX0NSQVkpIHx8IGRlZmluZWQoX19JTFA2NF9fKQogI2RlZmluZSBSSVBFTUQxNjBfTE9ORyB1bnNpZ25lZCBsb25nCkBAIC05MCw5ICs5MCw3IEBACiAJUklQRU1EMTYwX0xPTkcgZGF0YVtSSVBFTUQxNjBfTEJMT0NLXTsKIAl1bnNpZ25lZCBpbnQgICBudW07CiAJfSBSSVBFTUQxNjBfQ1RYOwotI2lmZGVmIE9QRU5TU0xfRklQUwotaW50IHByaXZhdGVfUklQRU1EMTYwX0luaXQoUklQRU1EMTYwX0NUWCAqYyk7Ci0jZW5kaWYKKwogaW50IFJJUEVNRDE2MF9Jbml0KFJJUEVNRDE2MF9DVFggKmMpOwogaW50IFJJUEVNRDE2MF9VcGRhdGUoUklQRU1EMTYwX0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7CiBpbnQgUklQRU1EMTYwX0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBSSVBFTUQxNjBfQ1RYICpjKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnNzbC9yc2EuaCBiL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAppbmRleCA1YmI5MzJhLi5jZjc0MzQzIDEwMDY0NAotLS0gYS9pbmNsdWRlL29wZW5zc2wvcnNhLmgKKysrIGIvaW5jbHVkZS9vcGVuc3NsL3JzYS5oCkBAIC03NCwyNSArNzQsNiBAQAogI2Vycm9yIFJTQSBpcyBkaXNhYmxlZC4KICNlbmRpZgogCi0vKiBJZiB0aGlzIGZsYWcgaXMgc2V0IHRoZSBSU0EgbWV0aG9kIGlzIEZJUFMgY29tcGxpYW50IGFuZCBjYW4gYmUgdXNlZAotICogaW4gRklQUyBtb2RlLiBUaGlzIGlzIHNldCBpbiB0aGUgdmFsaWRhdGVkIG1vZHVsZSBtZXRob2QuIElmIGFuCi0gKiBhcHBsaWNhdGlvbiBzZXRzIHRoaXMgZmxhZyBpbiBpdHMgb3duIG1ldGhvZHMgaXQgaXMgaXRzIHJlcG9zaWJpbGl0eQotICogdG8gZW5zdXJlIHRoZSByZXN1bHQgaXMgY29tcGxpYW50LgotICovCi0KLSNkZWZpbmUgUlNBX0ZMQUdfRklQU19NRVRIT0QJCQkweDA0MDAKLQotLyogSWYgdGhpcyBmbGFnIGlzIHNldCB0aGUgb3BlcmF0aW9ucyBub3JtYWxseSBkaXNhYmxlZCBpbiBGSVBTIG1vZGUgYXJlCi0gKiBwZXJtaXR0ZWQgaXQgaXMgdGhlbiB0aGUgYXBwbGljYXRpb25zIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZSB0aGF0IHRoZQotICogdXNhZ2UgaXMgY29tcGxpYW50LgotICovCi0KLSNkZWZpbmUgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cJCQkweDA0MDAKLQotI2lmZGVmIE9QRU5TU0xfRklQUwotI2RlZmluZSBGSVBTX1JTQV9TSVpFX1QJaW50Ci0jZW5kaWYKLQogI2lmZGVmICBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CiAjZW5kaWYKQEAgLTEzNiw3ICsxMTcsOCBAQAogCQl1bnNpZ25lZCBjaGFyICpzaWdyZXQsIHVuc2lnbmVkIGludCAqc2lnbGVuLCBjb25zdCBSU0EgKnJzYSk7CiAJaW50ICgqcnNhX3ZlcmlmeSkoaW50IGR0eXBlLAogCQljb25zdCB1bnNpZ25lZCBjaGFyICptLCB1bnNpZ25lZCBpbnQgbV9sZW5ndGgsCi0JCXVuc2lnbmVkIGNoYXIgKnNpZ2J1ZiwgdW5zaWduZWQgaW50IHNpZ2xlbiwgY29uc3QgUlNBICpyc2EpOworCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaWdidWYsIHVuc2lnbmVkIGludCBzaWdsZW4sCisJCQkJCQkJCWNvbnN0IFJTQSAqcnNhKTsKIC8qIElmIHRoaXMgY2FsbGJhY2sgaXMgTlVMTCwgdGhlIGJ1aWx0aW4gc29mdHdhcmUgUlNBIGtleS1nZW4gd2lsbCBiZSB1c2VkLiBUaGlzCiAgKiBpcyBmb3IgYmVoYXZpb3VyYWwgY29tcGF0aWJpbGl0eSB3aGlsc3QgdGhlIGNvZGUgZ2V0cyByZXdpcmVkLCBidXQgb25lIGRheQogICogaXQgd291bGQgYmUgbmljZSB0byBhc3N1bWUgdGhlcmUgYXJlIG5vIHN1Y2ggdGhpbmdzIGFzICJidWlsdGluIHNvZnR3YXJlIgpAQCAtMTgyLDggKzE2NCw2IEBACiAjIGRlZmluZSBPUEVOU1NMX1JTQV9NQVhfTU9EVUxVU19CSVRTCTE2Mzg0CiAjZW5kaWYKIAotI2RlZmluZSBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMgMTAyNAotCiAjaWZuZGVmIE9QRU5TU0xfUlNBX1NNQUxMX01PRFVMVVNfQklUUwogIyBkZWZpbmUgT1BFTlNTTF9SU0FfU01BTExfTU9EVUxVU19CSVRTCTMwNzIKICNlbmRpZgpAQCAtMjM4LDExICsyMTgsMzcgQEAKICNlbmRpZgogCiAKKyNkZWZpbmUgRVZQX1BLRVlfQ1RYX3NldF9yc2FfcGFkZGluZyhjdHgsIHBhZCkgXAorCUVWUF9QS0VZX0NUWF9jdHJsKGN0eCwgRVZQX1BLRVlfUlNBLCAtMSwgRVZQX1BLRVlfQ1RSTF9SU0FfUEFERElORywgXAorCQkJCXBhZCwgTlVMTCkKKworI2RlZmluZSBFVlBfUEtFWV9DVFhfc2V0X3JzYV9wc3Nfc2FsdGxlbihjdHgsIGxlbikgXAorCUVWUF9QS0VZX0NUWF9jdHJsKGN0eCwgRVZQX1BLRVlfUlNBLCBcCisJCQkJKEVWUF9QS0VZX09QX1NJR058RVZQX1BLRVlfT1BfVkVSSUZZKSwgXAorCQkJCUVWUF9QS0VZX0NUUkxfUlNBX1BTU19TQUxUTEVOLCBcCisJCQkJbGVuLCBOVUxMKQorCisjZGVmaW5lIEVWUF9QS0VZX0NUWF9zZXRfcnNhX2tleWdlbl9iaXRzKGN0eCwgYml0cykgXAorCUVWUF9QS0VZX0NUWF9jdHJsKGN0eCwgRVZQX1BLRVlfUlNBLCBFVlBfUEtFWV9PUF9LRVlHRU4sIFwKKwkJCQlFVlBfUEtFWV9DVFJMX1JTQV9LRVlHRU5fQklUUywgYml0cywgTlVMTCkKKworI2RlZmluZSBFVlBfUEtFWV9DVFhfc2V0X3JzYV9rZXlnZW5fcHViZXhwKGN0eCwgcHViZXhwKSBcCisJRVZQX1BLRVlfQ1RYX2N0cmwoY3R4LCBFVlBfUEtFWV9SU0EsIEVWUF9QS0VZX09QX0tFWUdFTiwgXAorCQkJCUVWUF9QS0VZX0NUUkxfUlNBX0tFWUdFTl9QVUJFWFAsIDAsIHB1YmV4cCkKKworI2RlZmluZSBFVlBfUEtFWV9DVFJMX1JTQV9QQURESU5HCShFVlBfUEtFWV9BTEdfQ1RSTCArIDEpCisjZGVmaW5lIEVWUF9QS0VZX0NUUkxfUlNBX1BTU19TQUxUTEVOCShFVlBfUEtFWV9BTEdfQ1RSTCArIDIpCisKKyNkZWZpbmUgRVZQX1BLRVlfQ1RSTF9SU0FfS0VZR0VOX0JJVFMJKEVWUF9QS0VZX0FMR19DVFJMICsgMykKKyNkZWZpbmUgRVZQX1BLRVlfQ1RSTF9SU0FfS0VZR0VOX1BVQkVYUAkoRVZQX1BLRVlfQUxHX0NUUkwgKyA0KQorCiAjZGVmaW5lIFJTQV9QS0NTMV9QQURESU5HCTEKICNkZWZpbmUgUlNBX1NTTFYyM19QQURESU5HCTIKICNkZWZpbmUgUlNBX05PX1BBRERJTkcJCTMKICNkZWZpbmUgUlNBX1BLQ1MxX09BRVBfUEFERElORwk0CiAjZGVmaW5lIFJTQV9YOTMxX1BBRERJTkcJNQorLyogRVZQX1BLRVlfIG9ubHkgKi8KKyNkZWZpbmUgUlNBX1BLQ1MxX1BTU19QQURESU5HCTYKIAogI2RlZmluZSBSU0FfUEtDUzFfUEFERElOR19TSVpFCTExCiAKQEAgLTI2MSwxMSArMjY3LDYgQEAKIAogLyogTmV3IHZlcnNpb24gKi8KIGludAlSU0FfZ2VuZXJhdGVfa2V5X2V4KFJTQSAqcnNhLCBpbnQgYml0cywgQklHTlVNICplLCBCTl9HRU5DQiAqY2IpOwotaW50IFJTQV9YOTMxX2Rlcml2ZV9leChSU0EgKnJzYSwgQklHTlVNICpwMSwgQklHTlVNICpwMiwgQklHTlVNICpxMSwgQklHTlVNICpxMiwKLQkJCWNvbnN0IEJJR05VTSAqWHAxLCBjb25zdCBCSUdOVU0gKlhwMiwgY29uc3QgQklHTlVNICpYcCwKLQkJCWNvbnN0IEJJR05VTSAqWHExLCBjb25zdCBCSUdOVU0gKlhxMiwgY29uc3QgQklHTlVNICpYcSwKLQkJCWNvbnN0IEJJR05VTSAqZSwgQk5fR0VOQ0IgKmNiKTsKLWludCBSU0FfWDkzMV9nZW5lcmF0ZV9rZXlfZXgoUlNBICpyc2EsIGludCBiaXRzLCBjb25zdCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYik7CiAKIGludAlSU0FfY2hlY2tfa2V5KGNvbnN0IFJTQSAqKTsKIAkvKiBuZXh0IDQgcmV0dXJuIC0xIG9uIGVycm9yICovCkBAIC0yODMsMTEgKzI4NCw2IEBACiAKIGludAlSU0FfZmxhZ3MoY29uc3QgUlNBICpyKTsKIAotI2lmZGVmIE9QRU5TU0xfRklQUwotUlNBICpGSVBTX3JzYV9uZXcodm9pZCk7Ci12b2lkIEZJUFNfcnNhX2ZyZWUoUlNBICpyKTsKLSNlbmRpZgotCiB2b2lkIFJTQV9zZXRfZGVmYXVsdF9tZXRob2QoY29uc3QgUlNBX01FVEhPRCAqbWV0aCk7CiBjb25zdCBSU0FfTUVUSE9EICpSU0FfZ2V0X2RlZmF1bHRfbWV0aG9kKHZvaWQpOwogY29uc3QgUlNBX01FVEhPRCAqUlNBX2dldF9tZXRob2QoY29uc3QgUlNBICpyc2EpOwpAQCAtMzMzLDcgKzMyOSw3IEBACiBpbnQgUlNBX3NpZ24oaW50IHR5cGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm0sIHVuc2lnbmVkIGludCBtX2xlbmd0aCwKIAl1bnNpZ25lZCBjaGFyICpzaWdyZXQsIHVuc2lnbmVkIGludCAqc2lnbGVuLCBSU0EgKnJzYSk7CiBpbnQgUlNBX3ZlcmlmeShpbnQgdHlwZSwgY29uc3QgdW5zaWduZWQgY2hhciAqbSwgdW5zaWduZWQgaW50IG1fbGVuZ3RoLAotCXVuc2lnbmVkIGNoYXIgKnNpZ2J1ZiwgdW5zaWduZWQgaW50IHNpZ2xlbiwgUlNBICpyc2EpOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZ2J1ZiwgdW5zaWduZWQgaW50IHNpZ2xlbiwgUlNBICpyc2EpOwogCiAvKiBUaGUgZm9sbG93aW5nIDIgZnVuY3Rpb24gc2lnbiBhbmQgdmVyaWZ5IGEgQVNOMV9PQ1RFVF9TVFJJTkcKICAqIG9iamVjdCBpbnNpZGUgUEtDUyMxIHBhZGRlZCBSU0EgZW5jcnlwdGlvbiAqLwpAQCAtNDAxLDkgKzM5NywxNSBAQAogLyogRXJyb3IgY29kZXMgZm9yIHRoZSBSU0EgZnVuY3Rpb25zLiAqLwogCiAvKiBGdW5jdGlvbiBjb2Rlcy4gKi8KLSNkZWZpbmUgUlNBX0ZfRklQU19SU0FfU0lHTgkJCQkgMTQwCi0jZGVmaW5lIFJTQV9GX0ZJUFNfUlNBX1ZFUklGWQkJCQkgMTQxCisjZGVmaW5lIFJTQV9GX0NIRUNLX1BBRERJTkdfTUQJCQkJIDE0MAorI2RlZmluZSBSU0FfRl9ET19SU0FfUFJJTlQJCQkJIDE0NgorI2RlZmluZSBSU0FfRl9JTlRfUlNBX1ZFUklGWQkJCQkgMTQ1CiAjZGVmaW5lIFJTQV9GX01FTU9SWV9MT0NLCQkJCSAxMDAKKyNkZWZpbmUgUlNBX0ZfT0xEX1JTQV9QUklWX0RFQ09ERQkJCSAxNDcKKyNkZWZpbmUgUlNBX0ZfUEtFWV9SU0FfQ1RSTAkJCQkgMTQzCisjZGVmaW5lIFJTQV9GX1BLRVlfUlNBX0NUUkxfU1RSCQkJCSAxNDQKKyNkZWZpbmUgUlNBX0ZfUEtFWV9SU0FfU0lHTgkJCQkgMTQyCisjZGVmaW5lIFJTQV9GX1BLRVlfUlNBX1ZFUklGWVJFQ09WRVIJCQkgMTQxCiAjZGVmaW5lIFJTQV9GX1JTQV9CVUlMVElOX0tFWUdFTgkJCSAxMjkKICNkZWZpbmUgUlNBX0ZfUlNBX0NIRUNLX0tFWQkJCQkgMTIzCiAjZGVmaW5lIFJTQV9GX1JTQV9FQVlfUFJJVkFURV9ERUNSWVBUCQkJIDEwMQpAQCAtNDM0LDExICs0MzYsMTAgQEAKICNkZWZpbmUgUlNBX0ZfUlNBX1BBRERJTkdfQ0hFQ0tfWDkzMQkJCSAxMjgKICNkZWZpbmUgUlNBX0ZfUlNBX1BSSU5UCQkJCQkgMTE1CiAjZGVmaW5lIFJTQV9GX1JTQV9QUklOVF9GUAkJCQkgMTE2Ci0jZGVmaW5lIFJTQV9GX1JTQV9QUklWQVRFX0VOQ1JZUFQJCQkgMTM3Ci0jZGVmaW5lIFJTQV9GX1JTQV9QVUJMSUNfREVDUllQVAkJCSAxMzgKKyNkZWZpbmUgUlNBX0ZfUlNBX1BSSVZfREVDT0RFCQkJCSAxMzcKKyNkZWZpbmUgUlNBX0ZfUlNBX1BSSVZfRU5DT0RFCQkJCSAxMzgKKyNkZWZpbmUgUlNBX0ZfUlNBX1BVQl9ERUNPREUJCQkJIDEzOQogI2RlZmluZSBSU0FfRl9SU0FfU0VUVVBfQkxJTkRJTkcJCQkgMTM2Ci0jZGVmaW5lIFJTQV9GX1JTQV9TRVRfREVGQVVMVF9NRVRIT0QJCQkgMTM5Ci0jZGVmaW5lIFJTQV9GX1JTQV9TRVRfTUVUSE9ECQkJCSAxNDIKICNkZWZpbmUgUlNBX0ZfUlNBX1NJR04JCQkJCSAxMTcKICNkZWZpbmUgUlNBX0ZfUlNBX1NJR05fQVNOMV9PQ1RFVF9TVFJJTkcJCSAxMTgKICNkZWZpbmUgUlNBX0ZfUlNBX1ZFUklGWQkJCQkgMTE5CkBAIC00NjQsMjAgKzQ2NSwyNSBAQAogI2RlZmluZSBSU0FfUl9ETVExX05PVF9DT05HUlVFTlRfVE9fRAkJCSAxMjUKICNkZWZpbmUgUlNBX1JfRF9FX05PVF9DT05HUlVFTlRfVE9fMQkJCSAxMjMKICNkZWZpbmUgUlNBX1JfRklSU1RfT0NURVRfSU5WQUxJRAkJCSAxMzMKKyNkZWZpbmUgUlNBX1JfSUxMRUdBTF9PUl9VTlNVUFBPUlRFRF9QQURESU5HX01PREUJIDE0NAorI2RlZmluZSBSU0FfUl9JTlZBTElEX0RJR0VTVF9MRU5HVEgJCQkgMTQzCiAjZGVmaW5lIFJTQV9SX0lOVkFMSURfSEVBREVSCQkJCSAxMzcKKyNkZWZpbmUgUlNBX1JfSU5WQUxJRF9LRVlCSVRTCQkJCSAxNDUKICNkZWZpbmUgUlNBX1JfSU5WQUxJRF9NRVNTQUdFX0xFTkdUSAkJCSAxMzEKICNkZWZpbmUgUlNBX1JfSU5WQUxJRF9QQURESU5HCQkJCSAxMzgKKyNkZWZpbmUgUlNBX1JfSU5WQUxJRF9QQURESU5HX01PREUJCQkgMTQxCisjZGVmaW5lIFJTQV9SX0lOVkFMSURfUFNTX1NBTFRMRU4JCQkgMTQ2CiAjZGVmaW5lIFJTQV9SX0lOVkFMSURfVFJBSUxFUgkJCQkgMTM5CisjZGVmaW5lIFJTQV9SX0lOVkFMSURfWDkzMV9ESUdFU1QJCQkgMTQyCiAjZGVmaW5lIFJTQV9SX0lRTVBfTk9UX0lOVkVSU0VfT0ZfUQkJCSAxMjYKICNkZWZpbmUgUlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMCQkJIDEyMAogI2RlZmluZSBSU0FfUl9MQVNUX09DVEVUX0lOVkFMSUQJCQkgMTM0CiAjZGVmaW5lIFJTQV9SX01PRFVMVVNfVE9PX0xBUkdFCQkJCSAxMDUKLSNkZWZpbmUgUlNBX1JfTk9OX0ZJUFNfTUVUSE9ECQkJCSAxNDEKICNkZWZpbmUgUlNBX1JfTk9fUFVCTElDX0VYUE9ORU5UCQkJIDE0MAogI2RlZmluZSBSU0FfUl9OVUxMX0JFRk9SRV9CTE9DS19NSVNTSU5HCQkJIDExMwogI2RlZmluZSBSU0FfUl9OX0RPRVNfTk9UX0VRVUFMX1BfUQkJCSAxMjcKICNkZWZpbmUgUlNBX1JfT0FFUF9ERUNPRElOR19FUlJPUgkJCSAxMjEKLSNkZWZpbmUgUlNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERQkgMTQyCisjZGVmaW5lIFJTQV9SX09QRVJBVElPTl9OT1RfU1VQUE9SVEVEX0ZPUl9USElTX0tFWVRZUEUJIDE0OAogI2RlZmluZSBSU0FfUl9QQURESU5HX0NIRUNLX0ZBSUxFRAkJCSAxMTQKICNkZWZpbmUgUlNBX1JfUF9OT1RfUFJJTUUJCQkJIDEyOAogI2RlZmluZSBSU0FfUl9RX05PVF9QUklNRQkJCQkgMTI5CkBAIC00ODgsNiArNDk0LDcgQEAKICNkZWZpbmUgUlNBX1JfVEhFX0FTTjFfT0JKRUNUX0lERU5USUZJRVJfSVNfTk9UX0tOT1dOX0ZPUl9USElTX01EIDExNgogI2RlZmluZSBSU0FfUl9VTktOT1dOX0FMR09SSVRITV9UWVBFCQkJIDExNwogI2RlZmluZSBSU0FfUl9VTktOT1dOX1BBRERJTkdfVFlQRQkJCSAxMTgKKyNkZWZpbmUgUlNBX1JfVkFMVUVfTUlTU0lORwkJCQkgMTQ3CiAjZGVmaW5lIFJTQV9SX1dST05HX1NJR05BVFVSRV9MRU5HVEgJCQkgMTE5CiAKICNpZmRlZiAgX19jcGx1c3BsdXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCBiL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAppbmRleCA3OGNjNDg1Li5kNjE2YjRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKysrIGIvaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCkBAIC01NywxOCArNTcsMjcgQEAKIAogI2luY2x1ZGUgPG9wZW5zc2wvc3RhY2suaD4KIAotI2lmZGVmIERFQlVHX1NBRkVTVEFDSwotCiAjaWZuZGVmIENIRUNLRURfUFRSX09GCiAjZGVmaW5lIENIRUNLRURfUFRSX09GKHR5cGUsIHApIFwKICAgICAoKHZvaWQqKSAoMSA/IHAgOiAodHlwZSopMCkpCiAjZW5kaWYKIAorLyogSW4gQysrIHdlIGdldCBwcm9ibGVtcyBiZWNhdXNlIGFuIGV4cGxpY2l0IGNhc3QgaXMgbmVlZGVkIGZyb20gKHZvaWQgKikKKyAqIHdlIHVzZSBDSEVDS0VEX1NUQUNLX09GIHRvIGVuc3VyZSB0aGUgY29ycmVjdCB0eXBlIGlzIHBhc3NlZCBpbiB0aGUgbWFjcm9zCisgKiBiZWxvdy4gCisgKi8KKworI2RlZmluZSBDSEVDS0VEX1NUQUNLX09GKHR5cGUsIHApIFwKKyAgICAoKF9TVEFDSyopICgxID8gcCA6IChTVEFDS19PRih0eXBlKSopMCkpCisKICNkZWZpbmUgQ0hFQ0tFRF9TS19GUkVFX0ZVTkModHlwZSwgcCkgXAogICAgICgodm9pZCAoKikodm9pZCAqKSkgKCgxID8gcCA6ICh2b2lkICgqKSh0eXBlICopKTApKSkKIAorI2RlZmluZSBDSEVDS0VEX1NLX0ZSRUVfRlVOQzIodHlwZSwgcCkgXAorICAgICgodm9pZCAoKikodm9pZCAqKSkgKCgxID8gcCA6ICh2b2lkICgqKSh0eXBlKSkwKSkpCisKICNkZWZpbmUgQ0hFQ0tFRF9TS19DTVBfRlVOQyh0eXBlLCBwKSBcCi0gICAgKChpbnQgKCopKGNvbnN0IGNoYXIgKiBjb25zdCAqLCBjb25zdCBjaGFyICogY29uc3QgKikpIFwKKyAgICAoKGludCAoKikoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKSBcCiAJKCgxID8gcCA6IChpbnQgKCopKGNvbnN0IHR5cGUgKiBjb25zdCAqLCBjb25zdCB0eXBlICogY29uc3QgKikpMCkpKQogCiAjZGVmaW5lIFNUQUNLX09GKHR5cGUpIHN0cnVjdCBzdGFja19zdF8jI3R5cGUKQEAgLTc3LDExICs4Niw1MSBAQAogI2RlZmluZSBERUNMQVJFX1NUQUNLX09GKHR5cGUpIFwKIFNUQUNLX09GKHR5cGUpIFwKICAgICB7IFwKLSAgICBTVEFDSyBzdGFjazsgXAorICAgIF9TVEFDSyBzdGFjazsgXAorICAgIH07CisjZGVmaW5lIERFQ0xBUkVfU1BFQ0lBTF9TVEFDS19PRih0eXBlLCB0eXBlMikgXAorU1RBQ0tfT0YodHlwZSkgXAorICAgIHsgXAorICAgIF9TVEFDSyBzdGFjazsgXAogICAgIH07CiAKICNkZWZpbmUgSU1QTEVNRU5UX1NUQUNLX09GKHR5cGUpIC8qIG5hZGEgKG9ic29sZXRlIGluIG5ldyBzYWZlc3RhY2sgYXBwcm9hY2gpKi8KIAorCisvKiBTdHJpbmdzIGFyZSBzcGVjaWFsOiBub3JtYWxseSBhbiBsaGFzaCBlbnRyeSB3aWxsIHBvaW50IHRvIGEgc2luZ2xlCisgKiAoc29tZXdoYXQpIG11dGFibGUgb2JqZWN0LiBJbiB0aGUgY2FzZSBvZiBzdHJpbmdzOgorICoKKyAqIGEpIEluc3RlYWQgb2YgYSBzaW5nbGUgY2hhciwgdGhlcmUgaXMgYW4gYXJyYXkgb2YgY2hhcnMsIE5VTC10ZXJtaW5hdGVkLgorICogYikgVGhlIHN0cmluZyBtYXkgaGF2ZSBiZSBpbW11dGFibGUuCisgKgorICogU28sIHRoZXkgbmVlZCB0aGVpciBvd24gZGVjbGFyYXRpb25zLiBFc3BlY2lhbGx5IGltcG9ydGFudCBmb3IKKyAqIHR5cGUtY2hlY2tpbmcgdG9vbHMsIHN1Y2ggYXMgRGVwdXR5LgorICoKK28gKiBJbiBwcmFjdGljZSwgaG93ZXZlciwgaXQgYXBwZWFycyB0byBiZSBoYXJkIHRvIGhhdmUgYSBjb25zdAorICogc3RyaW5nLiBGb3Igbm93LCBJJ20gc2V0dGxpbmcgZm9yIGRlYWxpbmcgd2l0aCB0aGUgZmFjdCBpdCBpcyBhCisgKiBzdHJpbmcgYXQgYWxsLgorICovCit0eXBlZGVmIGNoYXIgKk9QRU5TU0xfU1RSSU5HOworCit0eXBlZGVmIGNvbnN0IGNoYXIgKk9QRU5TU0xfQ1NUUklORzsKKworLyogQ29uZnVzaW5nbHksIExIQVNIX09GKFNUUklORykgZGVhbHMgd2l0aCBjaGFyICoqIHRocm91Z2hvdXQsIGJ1dAorICogU1RBQ0tfT0YoU1RSSU5HKSBpcyByZWFsbHkgbW9yZSBsaWtlIFNUQUNLX09GKGNoYXIpLCBvbmx5LCBhcworICogbWVudGlvbmVkIGFib3ZlLCBpbnN0ZWFkIG9mIGEgc2luZ2xlIGNoYXIgZWFjaCBlbnRyeSBpcyBhCisgKiBOVUwtdGVybWluYXRlZCBhcnJheSBvZiBjaGFycy4gU28sIHdlIGhhdmUgdG8gaW1wbGVtZW50IFNUUklORworICogc3BlY2lhbGx5IGZvciBTVEFDS19PRi4gVGhpcyBpcyBkZWFsdCB3aXRoIGluIHRoZSBhdXRvZ2VuZXJhdGVkCisgKiBtYWNyb3MgYmVsb3cuCisgKi8KKworREVDTEFSRV9TUEVDSUFMX1NUQUNLX09GKE9QRU5TU0xfU1RSSU5HLCBjaGFyKQorCisvKiBTaW1pbGFybHksIHdlIHNvbWV0aW1lcyB1c2UgYSBibG9jayBvZiBjaGFyYWN0ZXJzLCBOT1QKKyAqIG51bC10ZXJtaW5hdGVkLiBUaGVzZSBzaG91bGQgYWxzbyBiZSBkaXN0aW5ndWlzaGVkIGZyb20gIm5vcm1hbCIKKyAqIHN0YWNrcy4gKi8KKwordHlwZWRlZiB2b2lkICpPUEVOU1NMX0JMT0NLOworREVDTEFSRV9TUEVDSUFMX1NUQUNLX09GKE9QRU5TU0xfQkxPQ0ssIHZvaWQpCisKIC8qIFNLTV9za18uLi4gc3RhY2sgbWFjcm9zIGFyZSBpbnRlcm5hbCB0byBzYWZlc3RhY2suaDoKICAqIG5ldmVyIHVzZSB0aGVtIGRpcmVjdGx5LCB1c2Ugc2tfPHR5cGU+Xy4uLiBpbnN0ZWFkICovCiAjZGVmaW5lIFNLTV9za19uZXcodHlwZSwgY21wKSBcCkBAIC04OSw1MiArMTM4LDU1IEBACiAjZGVmaW5lIFNLTV9za19uZXdfbnVsbCh0eXBlKSBcCiAJKChTVEFDS19PRih0eXBlKSAqKXNrX25ld19udWxsKCkpCiAjZGVmaW5lIFNLTV9za19mcmVlKHR5cGUsIHN0KSBcCi0Jc2tfZnJlZShDSEVDS0VEX1BUUl9PRihTVEFDS19PRih0eXBlKSwgc3QpKQorCXNrX2ZyZWUoQ0hFQ0tFRF9TVEFDS19PRih0eXBlLCBzdCkpCiAjZGVmaW5lIFNLTV9za19udW0odHlwZSwgc3QpIFwKLQlza19udW0oQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YodHlwZSksIHN0KSkKKwlza19udW0oQ0hFQ0tFRF9TVEFDS19PRih0eXBlLCBzdCkpCiAjZGVmaW5lIFNLTV9za192YWx1ZSh0eXBlLCBzdCxpKSBcCi0JKCh0eXBlICopc2tfdmFsdWUoQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YodHlwZSksIHN0KSwgaSkpCisJKCh0eXBlICopc2tfdmFsdWUoQ0hFQ0tFRF9TVEFDS19PRih0eXBlLCBzdCksIGkpKQogI2RlZmluZSBTS01fc2tfc2V0KHR5cGUsIHN0LGksdmFsKSBcCi0Jc2tfc2V0KENIRUNLRURfUFRSX09GKFNUQUNLX09GKHR5cGUpLCBzdCksIGksIENIRUNLRURfUFRSX09GKHR5cGUsIHZhbCkpCisJc2tfc2V0KENIRUNLRURfU1RBQ0tfT0YodHlwZSwgc3QpLCBpLCBDSEVDS0VEX1BUUl9PRih0eXBlLCB2YWwpKQogI2RlZmluZSBTS01fc2tfemVybyh0eXBlLCBzdCkgXAotCXNrX3plcm8oQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YodHlwZSksIHN0KSkKLSNkZWZpbmUgU0tNX3NrX3B1c2godHlwZSwgc3QsdmFsKSBcCi0Jc2tfcHVzaChDSEVDS0VEX1BUUl9PRihTVEFDS19PRih0eXBlKSwgc3QpLCBDSEVDS0VEX1BUUl9PRih0eXBlLCB2YWwpKQotI2RlZmluZSBTS01fc2tfdW5zaGlmdCh0eXBlLCBzdCx2YWwpIFwKLQlza191bnNoaWZ0KENIRUNLRURfUFRSX09GKFNUQUNLX09GKHR5cGUpLCBzdCksIENIRUNLRURfUFRSX09GKHR5cGUsIHZhbCkpCi0jZGVmaW5lIFNLTV9za19maW5kKHR5cGUsIHN0LHZhbCkgXAotCXNrX2ZpbmQoQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YodHlwZSksIHN0KSwgQ0hFQ0tFRF9QVFJfT0YodHlwZSwgdmFsKSkKLSNkZWZpbmUgU0tNX3NrX2RlbGV0ZSh0eXBlLCBzdCxpKSBcCi0JKHR5cGUgKilza19kZWxldGUoQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YodHlwZSksIHN0KSwgaSkKLSNkZWZpbmUgU0tNX3NrX2RlbGV0ZV9wdHIodHlwZSwgc3QscHRyKSBcCi0JKHR5cGUgKilza19kZWxldGVfcHRyKENIRUNLRURfUFRSX09GKFNUQUNLX09GKHR5cGUpLCBzdCksIENIRUNLRURfUFRSX09GKHR5cGUsIHB0cikpCi0jZGVmaW5lIFNLTV9za19pbnNlcnQodHlwZSwgc3QsdmFsLGkpIFwKLQlza19pbnNlcnQoQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YodHlwZSksIHN0KSwgQ0hFQ0tFRF9QVFJfT0YodHlwZSwgdmFsKSwgaSkKLSNkZWZpbmUgU0tNX3NrX3NldF9jbXBfZnVuYyh0eXBlLCBzdCxjbXApIFwKKwlza196ZXJvKENIRUNLRURfU1RBQ0tfT0YodHlwZSwgc3QpKQorI2RlZmluZSBTS01fc2tfcHVzaCh0eXBlLCBzdCwgdmFsKSBcCisJc2tfcHVzaChDSEVDS0VEX1NUQUNLX09GKHR5cGUsIHN0KSwgQ0hFQ0tFRF9QVFJfT0YodHlwZSwgdmFsKSkKKyNkZWZpbmUgU0tNX3NrX3Vuc2hpZnQodHlwZSwgc3QsIHZhbCkgXAorCXNrX3Vuc2hpZnQoQ0hFQ0tFRF9TVEFDS19PRih0eXBlLCBzdCksIENIRUNLRURfUFRSX09GKHR5cGUsIHZhbCkpCisjZGVmaW5lIFNLTV9za19maW5kKHR5cGUsIHN0LCB2YWwpIFwKKwlza19maW5kKENIRUNLRURfU1RBQ0tfT0YodHlwZSwgc3QpLCBDSEVDS0VEX1BUUl9PRih0eXBlLCB2YWwpKQorI2RlZmluZSBTS01fc2tfZmluZF9leCh0eXBlLCBzdCwgdmFsKSBcCisJc2tfZmluZF9leChDSEVDS0VEX1NUQUNLX09GKHR5cGUsIHN0KSwgXAorCQkgICBDSEVDS0VEX1BUUl9PRih0eXBlLCB2YWwpKQorI2RlZmluZSBTS01fc2tfZGVsZXRlKHR5cGUsIHN0LCBpKSBcCisJKHR5cGUgKilza19kZWxldGUoQ0hFQ0tFRF9TVEFDS19PRih0eXBlLCBzdCksIGkpCisjZGVmaW5lIFNLTV9za19kZWxldGVfcHRyKHR5cGUsIHN0LCBwdHIpIFwKKwkodHlwZSAqKXNrX2RlbGV0ZV9wdHIoQ0hFQ0tFRF9TVEFDS19PRih0eXBlLCBzdCksIENIRUNLRURfUFRSX09GKHR5cGUsIHB0cikpCisjZGVmaW5lIFNLTV9za19pbnNlcnQodHlwZSwgc3QsdmFsLCBpKSBcCisJc2tfaW5zZXJ0KENIRUNLRURfU1RBQ0tfT0YodHlwZSwgc3QpLCBDSEVDS0VEX1BUUl9PRih0eXBlLCB2YWwpLCBpKQorI2RlZmluZSBTS01fc2tfc2V0X2NtcF9mdW5jKHR5cGUsIHN0LCBjbXApIFwKIAkoKGludCAoKikoY29uc3QgdHlwZSAqIGNvbnN0ICosY29uc3QgdHlwZSAqIGNvbnN0ICopKSBcCi0Jc2tfc2V0X2NtcF9mdW5jKENIRUNLRURfUFRSX09GKFNUQUNLX09GKHR5cGUpLCBzdCksIENIRUNLRURfU0tfQ01QX0ZVTkModHlwZSwgY21wKSkpCisJc2tfc2V0X2NtcF9mdW5jKENIRUNLRURfU1RBQ0tfT0YodHlwZSwgc3QpLCBDSEVDS0VEX1NLX0NNUF9GVU5DKHR5cGUsIGNtcCkpKQogI2RlZmluZSBTS01fc2tfZHVwKHR5cGUsIHN0KSBcCi0JKFNUQUNLX09GKHR5cGUpICopc2tfZHVwKENIRUNLRURfUFRSX09GKFNUQUNLX09GKHR5cGUpLCBzdCkpCi0jZGVmaW5lIFNLTV9za19wb3BfZnJlZSh0eXBlLCBzdCxmcmVlX2Z1bmMpIFwKLQlza19wb3BfZnJlZShDSEVDS0VEX1BUUl9PRihTVEFDS19PRih0eXBlKSwgc3QpLCBDSEVDS0VEX1NLX0ZSRUVfRlVOQyh0eXBlLCBmcmVlX2Z1bmMpKQorCShTVEFDS19PRih0eXBlKSAqKXNrX2R1cChDSEVDS0VEX1NUQUNLX09GKHR5cGUsIHN0KSkKKyNkZWZpbmUgU0tNX3NrX3BvcF9mcmVlKHR5cGUsIHN0LCBmcmVlX2Z1bmMpIFwKKwlza19wb3BfZnJlZShDSEVDS0VEX1NUQUNLX09GKHR5cGUsIHN0KSwgQ0hFQ0tFRF9TS19GUkVFX0ZVTkModHlwZSwgZnJlZV9mdW5jKSkKICNkZWZpbmUgU0tNX3NrX3NoaWZ0KHR5cGUsIHN0KSBcCi0JKHR5cGUgKilza19zaGlmdChDSEVDS0VEX1BUUl9PRihTVEFDS19PRih0eXBlKSwgc3QpKQorCSh0eXBlICopc2tfc2hpZnQoQ0hFQ0tFRF9TVEFDS19PRih0eXBlLCBzdCkpCiAjZGVmaW5lIFNLTV9za19wb3AodHlwZSwgc3QpIFwKLQkodHlwZSAqKXNrX3BvcChDSEVDS0VEX1BUUl9PRihTVEFDS19PRih0eXBlKSwgc3QpKQorCSh0eXBlICopc2tfcG9wKENIRUNLRURfU1RBQ0tfT0YodHlwZSwgc3QpKQogI2RlZmluZSBTS01fc2tfc29ydCh0eXBlLCBzdCkgXAotCXNrX3NvcnQoQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YodHlwZSksIHN0KSkKKwlza19zb3J0KENIRUNLRURfU1RBQ0tfT0YodHlwZSwgc3QpKQogI2RlZmluZSBTS01fc2tfaXNfc29ydGVkKHR5cGUsIHN0KSBcCi0Jc2tfaXNfc29ydGVkKENIRUNLRURfUFRSX09GKFNUQUNLX09GKHR5cGUpLCBzdCkpCisJc2tfaXNfc29ydGVkKENIRUNLRURfU1RBQ0tfT0YodHlwZSwgc3QpKQogCiAjZGVmaW5lCVNLTV9BU04xX1NFVF9PRl9kMmkodHlwZSwgc3QsIHBwLCBsZW5ndGgsIGQyaV9mdW5jLCBmcmVlX2Z1bmMsIGV4X3RhZywgZXhfY2xhc3MpIFwKLQkoU1RBQ0tfT0YodHlwZSkgKilkMmlfQVNOMV9TRVQoQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YodHlwZSksIHN0KSwgXAorCShTVEFDS19PRih0eXBlKSAqKWQyaV9BU04xX1NFVChDSEVDS0VEX1NUQUNLX09GKHR5cGUsIHN0KSwgXAogCQkJCXBwLCBsZW5ndGgsIFwKIAkJCQlDSEVDS0VEX0QySV9PRih0eXBlLCBkMmlfZnVuYyksIFwKIAkJCQlDSEVDS0VEX1NLX0ZSRUVfRlVOQyh0eXBlLCBmcmVlX2Z1bmMpLCBcCiAJCQkJZXhfdGFnLCBleF9jbGFzcykKIAogI2RlZmluZQlTS01fQVNOMV9TRVRfT0ZfaTJkKHR5cGUsIHN0LCBwcCwgaTJkX2Z1bmMsIGV4X3RhZywgZXhfY2xhc3MsIGlzX3NldCkgXAotCWkyZF9BU04xX1NFVChDSEVDS0VEX1BUUl9PRihTVEFDS19PRih0eXBlKSwgc3QpLCBwcCwgXAorICBpMmRfQVNOMV9TRVQoKFNUQUNLX09GKE9QRU5TU0xfQkxPQ0spICopQ0hFQ0tFRF9TVEFDS19PRih0eXBlLCBzdCksIHBwLCBcCiAJCQkJQ0hFQ0tFRF9JMkRfT0YodHlwZSwgaTJkX2Z1bmMpLCBcCiAJCQkJZXhfdGFnLCBleF9jbGFzcywgaXNfc2V0KQogCkBAIC0xNTEsNzIgKzIwMyw4IEBACiAJCQkJQ0hFQ0tFRF9TS19GUkVFX0ZVTkModHlwZSwgZnJlZV9mdW5jKSwgXAogCQkJCXBhc3MsIHBhc3NsZW4sIG9jdCwgc2VxKQogCi0jZWxzZQotCi0jZGVmaW5lIFNUQUNLX09GKHR5cGUpIFNUQUNLCi0jZGVmaW5lIFBSRURFQ0xBUkVfU1RBQ0tfT0YodHlwZSkgLyogbmFkYSAqLwotI2RlZmluZSBERUNMQVJFX1NUQUNLX09GKHR5cGUpICAgIC8qIG5hZGEgKi8KLSNkZWZpbmUgSU1QTEVNRU5UX1NUQUNLX09GKHR5cGUpICAvKiBuYWRhICovCi0KLSNkZWZpbmUgU0tNX3NrX25ldyh0eXBlLCBjbXApIFwKLQlza19uZXcoKGludCAoKikoY29uc3QgY2hhciAqIGNvbnN0ICosIGNvbnN0IGNoYXIgKiBjb25zdCAqKSkoY21wKSkKLSNkZWZpbmUgU0tNX3NrX25ld19udWxsKHR5cGUpIFwKLQlza19uZXdfbnVsbCgpCi0jZGVmaW5lIFNLTV9za19mcmVlKHR5cGUsIHN0KSBcCi0Jc2tfZnJlZShzdCkKLSNkZWZpbmUgU0tNX3NrX251bSh0eXBlLCBzdCkgXAotCXNrX251bShzdCkKLSNkZWZpbmUgU0tNX3NrX3ZhbHVlKHR5cGUsIHN0LGkpIFwKLQkoKHR5cGUgKilza192YWx1ZShzdCwgaSkpCi0jZGVmaW5lIFNLTV9za19zZXQodHlwZSwgc3QsaSx2YWwpIFwKLQkoKHR5cGUgKilza19zZXQoc3QsIGksKGNoYXIgKil2YWwpKQotI2RlZmluZSBTS01fc2tfemVybyh0eXBlLCBzdCkgXAotCXNrX3plcm8oc3QpCi0jZGVmaW5lIFNLTV9za19wdXNoKHR5cGUsIHN0LHZhbCkgXAotCXNrX3B1c2goc3QsIChjaGFyICopdmFsKQotI2RlZmluZSBTS01fc2tfdW5zaGlmdCh0eXBlLCBzdCx2YWwpIFwKLQlza191bnNoaWZ0KHN0LCAoY2hhciAqKXZhbCkKLSNkZWZpbmUgU0tNX3NrX2ZpbmQodHlwZSwgc3QsdmFsKSBcCi0Jc2tfZmluZChzdCwgKGNoYXIgKil2YWwpCi0jZGVmaW5lIFNLTV9za19kZWxldGUodHlwZSwgc3QsaSkgXAotCSgodHlwZSAqKXNrX2RlbGV0ZShzdCwgaSkpCi0jZGVmaW5lIFNLTV9za19kZWxldGVfcHRyKHR5cGUsIHN0LHB0cikgXAotCSgodHlwZSAqKXNrX2RlbGV0ZV9wdHIoc3QsKGNoYXIgKilwdHIpKQotI2RlZmluZSBTS01fc2tfaW5zZXJ0KHR5cGUsIHN0LHZhbCxpKSBcCi0Jc2tfaW5zZXJ0KHN0LCAoY2hhciAqKXZhbCwgaSkKLSNkZWZpbmUgU0tNX3NrX3NldF9jbXBfZnVuYyh0eXBlLCBzdCxjbXApIFwKLQkoKGludCAoKikoY29uc3QgdHlwZSAqIGNvbnN0ICosY29uc3QgdHlwZSAqIGNvbnN0ICopKSBcCi0Jc2tfc2V0X2NtcF9mdW5jKHN0LCAoaW50ICgqKShjb25zdCBjaGFyICogY29uc3QgKiwgY29uc3QgY2hhciAqIGNvbnN0ICopKShjbXApKSkKLSNkZWZpbmUgU0tNX3NrX2R1cCh0eXBlLCBzdCkgXAotCXNrX2R1cChzdCkKLSNkZWZpbmUgU0tNX3NrX3BvcF9mcmVlKHR5cGUsIHN0LGZyZWVfZnVuYykgXAotCXNrX3BvcF9mcmVlKHN0LCAodm9pZCAoKikodm9pZCAqKSlmcmVlX2Z1bmMpCi0jZGVmaW5lIFNLTV9za19zaGlmdCh0eXBlLCBzdCkgXAotCSgodHlwZSAqKXNrX3NoaWZ0KHN0KSkKLSNkZWZpbmUgU0tNX3NrX3BvcCh0eXBlLCBzdCkgXAotCSgodHlwZSAqKXNrX3BvcChzdCkpCi0jZGVmaW5lIFNLTV9za19zb3J0KHR5cGUsIHN0KSBcCi0Jc2tfc29ydChzdCkKLSNkZWZpbmUgU0tNX3NrX2lzX3NvcnRlZCh0eXBlLCBzdCkgXAotCXNrX2lzX3NvcnRlZChzdCkKLQotI2RlZmluZQlTS01fQVNOMV9TRVRfT0ZfZDJpKHR5cGUsIHN0LCBwcCwgbGVuZ3RoLCBkMmlfZnVuYywgZnJlZV9mdW5jLCBleF90YWcsIGV4X2NsYXNzKSBcCi0JZDJpX0FTTjFfU0VUKHN0LHBwLGxlbmd0aCwgKHZvaWQgKigqKSh2b2lkICoqICxjb25zdCB1bnNpZ25lZCBjaGFyICoqICxsb25nKSlkMmlfZnVuYywgKHZvaWQgKCopKHZvaWQgKikpZnJlZV9mdW5jLCBleF90YWcsZXhfY2xhc3MpCi0jZGVmaW5lCVNLTV9BU04xX1NFVF9PRl9pMmQodHlwZSwgc3QsIHBwLCBpMmRfZnVuYywgZXhfdGFnLCBleF9jbGFzcywgaXNfc2V0KSBcCi0JaTJkX0FTTjFfU0VUKHN0LHBwLChpbnQgKCopKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqKikpaTJkX2Z1bmMsZXhfdGFnLGV4X2NsYXNzLGlzX3NldCkKLQotI2RlZmluZQlTS01fQVNOMV9zZXFfcGFjayh0eXBlLCBzdCwgaTJkX2Z1bmMsIGJ1ZiwgbGVuKSBcCi0JQVNOMV9zZXFfcGFjayhzdCwgKGludCAoKikodm9pZCAqLCB1bnNpZ25lZCBjaGFyICoqKSlpMmRfZnVuYywgYnVmLCBsZW4pCi0jZGVmaW5lCVNLTV9BU04xX3NlcV91bnBhY2sodHlwZSwgYnVmLCBsZW4sIGQyaV9mdW5jLCBmcmVlX2Z1bmMpIFwKLQlBU04xX3NlcV91bnBhY2soYnVmLGxlbiwodm9pZCAqKCopKHZvaWQgKiosY29uc3QgdW5zaWduZWQgY2hhciAqKixsb25nKSlkMmlfZnVuYywgKHZvaWQoKikodm9pZCAqKSlmcmVlX2Z1bmMpCi0KLSNkZWZpbmUgU0tNX1BLQ1MxMl9kZWNyeXB0X2QyaSh0eXBlLCBhbGdvciwgZDJpX2Z1bmMsIGZyZWVfZnVuYywgcGFzcywgcGFzc2xlbiwgb2N0LCBzZXEpIFwKLQkoKFNUQUNLICopUEtDUzEyX2RlY3J5cHRfZDJpKGFsZ29yLChjaGFyICooKikoKSlkMmlfZnVuYywgKHZvaWQoKikodm9pZCAqKSlmcmVlX2Z1bmMscGFzcyxwYXNzbGVuLG9jdCxzZXEpKQotCi0jZW5kaWYKLQogLyogVGhpcyBibG9jayBvZiBkZWZpbmVzIGlzIHVwZGF0ZWQgYnkgdXRpbC9ta3N0YWNrLnBsLCBwbGVhc2UgZG8gbm90IHRvdWNoISAqLwotI2RlZmluZSBza19BQ0NFU1NfREVTQ1JJUFRJT05fbmV3KHN0KSBTS01fc2tfbmV3KEFDQ0VTU19ERVNDUklQVElPTiwgKHN0KSkKKyNkZWZpbmUgc2tfQUNDRVNTX0RFU0NSSVBUSU9OX25ldyhjbXApIFNLTV9za19uZXcoQUNDRVNTX0RFU0NSSVBUSU9OLCAoY21wKSkKICNkZWZpbmUgc2tfQUNDRVNTX0RFU0NSSVBUSU9OX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKEFDQ0VTU19ERVNDUklQVElPTikKICNkZWZpbmUgc2tfQUNDRVNTX0RFU0NSSVBUSU9OX2ZyZWUoc3QpIFNLTV9za19mcmVlKEFDQ0VTU19ERVNDUklQVElPTiwgKHN0KSkKICNkZWZpbmUgc2tfQUNDRVNTX0RFU0NSSVBUSU9OX251bShzdCkgU0tNX3NrX251bShBQ0NFU1NfREVTQ1JJUFRJT04sIChzdCkpCkBAIC0yMzgsNyArMjI2LDcgQEAKICNkZWZpbmUgc2tfQUNDRVNTX0RFU0NSSVBUSU9OX3NvcnQoc3QpIFNLTV9za19zb3J0KEFDQ0VTU19ERVNDUklQVElPTiwgKHN0KSkKICNkZWZpbmUgc2tfQUNDRVNTX0RFU0NSSVBUSU9OX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChBQ0NFU1NfREVTQ1JJUFRJT04sIChzdCkpCiAKLSNkZWZpbmUgc2tfQVNJZE9yUmFuZ2VfbmV3KHN0KSBTS01fc2tfbmV3KEFTSWRPclJhbmdlLCAoc3QpKQorI2RlZmluZSBza19BU0lkT3JSYW5nZV9uZXcoY21wKSBTS01fc2tfbmV3KEFTSWRPclJhbmdlLCAoY21wKSkKICNkZWZpbmUgc2tfQVNJZE9yUmFuZ2VfbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoQVNJZE9yUmFuZ2UpCiAjZGVmaW5lIHNrX0FTSWRPclJhbmdlX2ZyZWUoc3QpIFNLTV9za19mcmVlKEFTSWRPclJhbmdlLCAoc3QpKQogI2RlZmluZSBza19BU0lkT3JSYW5nZV9udW0oc3QpIFNLTV9za19udW0oQVNJZE9yUmFuZ2UsIChzdCkpCkBAIC0yNjAsNyArMjQ4LDcgQEAKICNkZWZpbmUgc2tfQVNJZE9yUmFuZ2Vfc29ydChzdCkgU0tNX3NrX3NvcnQoQVNJZE9yUmFuZ2UsIChzdCkpCiAjZGVmaW5lIHNrX0FTSWRPclJhbmdlX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChBU0lkT3JSYW5nZSwgKHN0KSkKIAotI2RlZmluZSBza19BU04xX0dFTkVSQUxTVFJJTkdfbmV3KHN0KSBTS01fc2tfbmV3KEFTTjFfR0VORVJBTFNUUklORywgKHN0KSkKKyNkZWZpbmUgc2tfQVNOMV9HRU5FUkFMU1RSSU5HX25ldyhjbXApIFNLTV9za19uZXcoQVNOMV9HRU5FUkFMU1RSSU5HLCAoY21wKSkKICNkZWZpbmUgc2tfQVNOMV9HRU5FUkFMU1RSSU5HX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKEFTTjFfR0VORVJBTFNUUklORykKICNkZWZpbmUgc2tfQVNOMV9HRU5FUkFMU1RSSU5HX2ZyZWUoc3QpIFNLTV9za19mcmVlKEFTTjFfR0VORVJBTFNUUklORywgKHN0KSkKICNkZWZpbmUgc2tfQVNOMV9HRU5FUkFMU1RSSU5HX251bShzdCkgU0tNX3NrX251bShBU04xX0dFTkVSQUxTVFJJTkcsIChzdCkpCkBAIC0yODIsNyArMjcwLDcgQEAKICNkZWZpbmUgc2tfQVNOMV9HRU5FUkFMU1RSSU5HX3NvcnQoc3QpIFNLTV9za19zb3J0KEFTTjFfR0VORVJBTFNUUklORywgKHN0KSkKICNkZWZpbmUgc2tfQVNOMV9HRU5FUkFMU1RSSU5HX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChBU04xX0dFTkVSQUxTVFJJTkcsIChzdCkpCiAKLSNkZWZpbmUgc2tfQVNOMV9JTlRFR0VSX25ldyhzdCkgU0tNX3NrX25ldyhBU04xX0lOVEVHRVIsIChzdCkpCisjZGVmaW5lIHNrX0FTTjFfSU5URUdFUl9uZXcoY21wKSBTS01fc2tfbmV3KEFTTjFfSU5URUdFUiwgKGNtcCkpCiAjZGVmaW5lIHNrX0FTTjFfSU5URUdFUl9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChBU04xX0lOVEVHRVIpCiAjZGVmaW5lIHNrX0FTTjFfSU5URUdFUl9mcmVlKHN0KSBTS01fc2tfZnJlZShBU04xX0lOVEVHRVIsIChzdCkpCiAjZGVmaW5lIHNrX0FTTjFfSU5URUdFUl9udW0oc3QpIFNLTV9za19udW0oQVNOMV9JTlRFR0VSLCAoc3QpKQpAQCAtMzA0LDcgKzI5Miw3IEBACiAjZGVmaW5lIHNrX0FTTjFfSU5URUdFUl9zb3J0KHN0KSBTS01fc2tfc29ydChBU04xX0lOVEVHRVIsIChzdCkpCiAjZGVmaW5lIHNrX0FTTjFfSU5URUdFUl9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoQVNOMV9JTlRFR0VSLCAoc3QpKQogCi0jZGVmaW5lIHNrX0FTTjFfT0JKRUNUX25ldyhzdCkgU0tNX3NrX25ldyhBU04xX09CSkVDVCwgKHN0KSkKKyNkZWZpbmUgc2tfQVNOMV9PQkpFQ1RfbmV3KGNtcCkgU0tNX3NrX25ldyhBU04xX09CSkVDVCwgKGNtcCkpCiAjZGVmaW5lIHNrX0FTTjFfT0JKRUNUX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKEFTTjFfT0JKRUNUKQogI2RlZmluZSBza19BU04xX09CSkVDVF9mcmVlKHN0KSBTS01fc2tfZnJlZShBU04xX09CSkVDVCwgKHN0KSkKICNkZWZpbmUgc2tfQVNOMV9PQkpFQ1RfbnVtKHN0KSBTS01fc2tfbnVtKEFTTjFfT0JKRUNULCAoc3QpKQpAQCAtMzI2LDcgKzMxNCw3IEBACiAjZGVmaW5lIHNrX0FTTjFfT0JKRUNUX3NvcnQoc3QpIFNLTV9za19zb3J0KEFTTjFfT0JKRUNULCAoc3QpKQogI2RlZmluZSBza19BU04xX09CSkVDVF9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoQVNOMV9PQkpFQ1QsIChzdCkpCiAKLSNkZWZpbmUgc2tfQVNOMV9TVFJJTkdfVEFCTEVfbmV3KHN0KSBTS01fc2tfbmV3KEFTTjFfU1RSSU5HX1RBQkxFLCAoc3QpKQorI2RlZmluZSBza19BU04xX1NUUklOR19UQUJMRV9uZXcoY21wKSBTS01fc2tfbmV3KEFTTjFfU1RSSU5HX1RBQkxFLCAoY21wKSkKICNkZWZpbmUgc2tfQVNOMV9TVFJJTkdfVEFCTEVfbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoQVNOMV9TVFJJTkdfVEFCTEUpCiAjZGVmaW5lIHNrX0FTTjFfU1RSSU5HX1RBQkxFX2ZyZWUoc3QpIFNLTV9za19mcmVlKEFTTjFfU1RSSU5HX1RBQkxFLCAoc3QpKQogI2RlZmluZSBza19BU04xX1NUUklOR19UQUJMRV9udW0oc3QpIFNLTV9za19udW0oQVNOMV9TVFJJTkdfVEFCTEUsIChzdCkpCkBAIC0zNDgsNyArMzM2LDcgQEAKICNkZWZpbmUgc2tfQVNOMV9TVFJJTkdfVEFCTEVfc29ydChzdCkgU0tNX3NrX3NvcnQoQVNOMV9TVFJJTkdfVEFCTEUsIChzdCkpCiAjZGVmaW5lIHNrX0FTTjFfU1RSSU5HX1RBQkxFX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChBU04xX1NUUklOR19UQUJMRSwgKHN0KSkKIAotI2RlZmluZSBza19BU04xX1RZUEVfbmV3KHN0KSBTS01fc2tfbmV3KEFTTjFfVFlQRSwgKHN0KSkKKyNkZWZpbmUgc2tfQVNOMV9UWVBFX25ldyhjbXApIFNLTV9za19uZXcoQVNOMV9UWVBFLCAoY21wKSkKICNkZWZpbmUgc2tfQVNOMV9UWVBFX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKEFTTjFfVFlQRSkKICNkZWZpbmUgc2tfQVNOMV9UWVBFX2ZyZWUoc3QpIFNLTV9za19mcmVlKEFTTjFfVFlQRSwgKHN0KSkKICNkZWZpbmUgc2tfQVNOMV9UWVBFX251bShzdCkgU0tNX3NrX251bShBU04xX1RZUEUsIChzdCkpCkBAIC0zNzAsNyArMzU4LDI5IEBACiAjZGVmaW5lIHNrX0FTTjFfVFlQRV9zb3J0KHN0KSBTS01fc2tfc29ydChBU04xX1RZUEUsIChzdCkpCiAjZGVmaW5lIHNrX0FTTjFfVFlQRV9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoQVNOMV9UWVBFLCAoc3QpKQogCi0jZGVmaW5lIHNrX0FTTjFfVkFMVUVfbmV3KHN0KSBTS01fc2tfbmV3KEFTTjFfVkFMVUUsIChzdCkpCisjZGVmaW5lIHNrX0FTTjFfVVRGOFNUUklOR19uZXcoY21wKSBTS01fc2tfbmV3KEFTTjFfVVRGOFNUUklORywgKGNtcCkpCisjZGVmaW5lIHNrX0FTTjFfVVRGOFNUUklOR19uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChBU04xX1VURjhTVFJJTkcpCisjZGVmaW5lIHNrX0FTTjFfVVRGOFNUUklOR19mcmVlKHN0KSBTS01fc2tfZnJlZShBU04xX1VURjhTVFJJTkcsIChzdCkpCisjZGVmaW5lIHNrX0FTTjFfVVRGOFNUUklOR19udW0oc3QpIFNLTV9za19udW0oQVNOMV9VVEY4U1RSSU5HLCAoc3QpKQorI2RlZmluZSBza19BU04xX1VURjhTVFJJTkdfdmFsdWUoc3QsIGkpIFNLTV9za192YWx1ZShBU04xX1VURjhTVFJJTkcsIChzdCksIChpKSkKKyNkZWZpbmUgc2tfQVNOMV9VVEY4U1RSSU5HX3NldChzdCwgaSwgdmFsKSBTS01fc2tfc2V0KEFTTjFfVVRGOFNUUklORywgKHN0KSwgKGkpLCAodmFsKSkKKyNkZWZpbmUgc2tfQVNOMV9VVEY4U1RSSU5HX3plcm8oc3QpIFNLTV9za196ZXJvKEFTTjFfVVRGOFNUUklORywgKHN0KSkKKyNkZWZpbmUgc2tfQVNOMV9VVEY4U1RSSU5HX3B1c2goc3QsIHZhbCkgU0tNX3NrX3B1c2goQVNOMV9VVEY4U1RSSU5HLCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfQVNOMV9VVEY4U1RSSU5HX3Vuc2hpZnQoc3QsIHZhbCkgU0tNX3NrX3Vuc2hpZnQoQVNOMV9VVEY4U1RSSU5HLCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfQVNOMV9VVEY4U1RSSU5HX2ZpbmQoc3QsIHZhbCkgU0tNX3NrX2ZpbmQoQVNOMV9VVEY4U1RSSU5HLCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfQVNOMV9VVEY4U1RSSU5HX2ZpbmRfZXgoc3QsIHZhbCkgU0tNX3NrX2ZpbmRfZXgoQVNOMV9VVEY4U1RSSU5HLCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfQVNOMV9VVEY4U1RSSU5HX2RlbGV0ZShzdCwgaSkgU0tNX3NrX2RlbGV0ZShBU04xX1VURjhTVFJJTkcsIChzdCksIChpKSkKKyNkZWZpbmUgc2tfQVNOMV9VVEY4U1RSSU5HX2RlbGV0ZV9wdHIoc3QsIHB0cikgU0tNX3NrX2RlbGV0ZV9wdHIoQVNOMV9VVEY4U1RSSU5HLCAoc3QpLCAocHRyKSkKKyNkZWZpbmUgc2tfQVNOMV9VVEY4U1RSSU5HX2luc2VydChzdCwgdmFsLCBpKSBTS01fc2tfaW5zZXJ0KEFTTjFfVVRGOFNUUklORywgKHN0KSwgKHZhbCksIChpKSkKKyNkZWZpbmUgc2tfQVNOMV9VVEY4U1RSSU5HX3NldF9jbXBfZnVuYyhzdCwgY21wKSBTS01fc2tfc2V0X2NtcF9mdW5jKEFTTjFfVVRGOFNUUklORywgKHN0KSwgKGNtcCkpCisjZGVmaW5lIHNrX0FTTjFfVVRGOFNUUklOR19kdXAoc3QpIFNLTV9za19kdXAoQVNOMV9VVEY4U1RSSU5HLCBzdCkKKyNkZWZpbmUgc2tfQVNOMV9VVEY4U1RSSU5HX3BvcF9mcmVlKHN0LCBmcmVlX2Z1bmMpIFNLTV9za19wb3BfZnJlZShBU04xX1VURjhTVFJJTkcsIChzdCksIChmcmVlX2Z1bmMpKQorI2RlZmluZSBza19BU04xX1VURjhTVFJJTkdfc2hpZnQoc3QpIFNLTV9za19zaGlmdChBU04xX1VURjhTVFJJTkcsIChzdCkpCisjZGVmaW5lIHNrX0FTTjFfVVRGOFNUUklOR19wb3Aoc3QpIFNLTV9za19wb3AoQVNOMV9VVEY4U1RSSU5HLCAoc3QpKQorI2RlZmluZSBza19BU04xX1VURjhTVFJJTkdfc29ydChzdCkgU0tNX3NrX3NvcnQoQVNOMV9VVEY4U1RSSU5HLCAoc3QpKQorI2RlZmluZSBza19BU04xX1VURjhTVFJJTkdfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKEFTTjFfVVRGOFNUUklORywgKHN0KSkKKworI2RlZmluZSBza19BU04xX1ZBTFVFX25ldyhjbXApIFNLTV9za19uZXcoQVNOMV9WQUxVRSwgKGNtcCkpCiAjZGVmaW5lIHNrX0FTTjFfVkFMVUVfbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoQVNOMV9WQUxVRSkKICNkZWZpbmUgc2tfQVNOMV9WQUxVRV9mcmVlKHN0KSBTS01fc2tfZnJlZShBU04xX1ZBTFVFLCAoc3QpKQogI2RlZmluZSBza19BU04xX1ZBTFVFX251bShzdCkgU0tNX3NrX251bShBU04xX1ZBTFVFLCAoc3QpKQpAQCAtMzkyLDcgKzQwMiw3IEBACiAjZGVmaW5lIHNrX0FTTjFfVkFMVUVfc29ydChzdCkgU0tNX3NrX3NvcnQoQVNOMV9WQUxVRSwgKHN0KSkKICNkZWZpbmUgc2tfQVNOMV9WQUxVRV9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoQVNOMV9WQUxVRSwgKHN0KSkKIAotI2RlZmluZSBza19CSU9fbmV3KHN0KSBTS01fc2tfbmV3KEJJTywgKHN0KSkKKyNkZWZpbmUgc2tfQklPX25ldyhjbXApIFNLTV9za19uZXcoQklPLCAoY21wKSkKICNkZWZpbmUgc2tfQklPX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKEJJTykKICNkZWZpbmUgc2tfQklPX2ZyZWUoc3QpIFNLTV9za19mcmVlKEJJTywgKHN0KSkKICNkZWZpbmUgc2tfQklPX251bShzdCkgU0tNX3NrX251bShCSU8sIChzdCkpCkBAIC00MTQsNyArNDI0LDUxIEBACiAjZGVmaW5lIHNrX0JJT19zb3J0KHN0KSBTS01fc2tfc29ydChCSU8sIChzdCkpCiAjZGVmaW5lIHNrX0JJT19pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoQklPLCAoc3QpKQogCi0jZGVmaW5lIHNrX0NNU19DZXJ0aWZpY2F0ZUNob2ljZXNfbmV3KHN0KSBTS01fc2tfbmV3KENNU19DZXJ0aWZpY2F0ZUNob2ljZXMsIChzdCkpCisjZGVmaW5lIHNrX0JZX0RJUl9FTlRSWV9uZXcoY21wKSBTS01fc2tfbmV3KEJZX0RJUl9FTlRSWSwgKGNtcCkpCisjZGVmaW5lIHNrX0JZX0RJUl9FTlRSWV9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChCWV9ESVJfRU5UUlkpCisjZGVmaW5lIHNrX0JZX0RJUl9FTlRSWV9mcmVlKHN0KSBTS01fc2tfZnJlZShCWV9ESVJfRU5UUlksIChzdCkpCisjZGVmaW5lIHNrX0JZX0RJUl9FTlRSWV9udW0oc3QpIFNLTV9za19udW0oQllfRElSX0VOVFJZLCAoc3QpKQorI2RlZmluZSBza19CWV9ESVJfRU5UUllfdmFsdWUoc3QsIGkpIFNLTV9za192YWx1ZShCWV9ESVJfRU5UUlksIChzdCksIChpKSkKKyNkZWZpbmUgc2tfQllfRElSX0VOVFJZX3NldChzdCwgaSwgdmFsKSBTS01fc2tfc2V0KEJZX0RJUl9FTlRSWSwgKHN0KSwgKGkpLCAodmFsKSkKKyNkZWZpbmUgc2tfQllfRElSX0VOVFJZX3plcm8oc3QpIFNLTV9za196ZXJvKEJZX0RJUl9FTlRSWSwgKHN0KSkKKyNkZWZpbmUgc2tfQllfRElSX0VOVFJZX3B1c2goc3QsIHZhbCkgU0tNX3NrX3B1c2goQllfRElSX0VOVFJZLCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfQllfRElSX0VOVFJZX3Vuc2hpZnQoc3QsIHZhbCkgU0tNX3NrX3Vuc2hpZnQoQllfRElSX0VOVFJZLCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfQllfRElSX0VOVFJZX2ZpbmQoc3QsIHZhbCkgU0tNX3NrX2ZpbmQoQllfRElSX0VOVFJZLCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfQllfRElSX0VOVFJZX2ZpbmRfZXgoc3QsIHZhbCkgU0tNX3NrX2ZpbmRfZXgoQllfRElSX0VOVFJZLCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfQllfRElSX0VOVFJZX2RlbGV0ZShzdCwgaSkgU0tNX3NrX2RlbGV0ZShCWV9ESVJfRU5UUlksIChzdCksIChpKSkKKyNkZWZpbmUgc2tfQllfRElSX0VOVFJZX2RlbGV0ZV9wdHIoc3QsIHB0cikgU0tNX3NrX2RlbGV0ZV9wdHIoQllfRElSX0VOVFJZLCAoc3QpLCAocHRyKSkKKyNkZWZpbmUgc2tfQllfRElSX0VOVFJZX2luc2VydChzdCwgdmFsLCBpKSBTS01fc2tfaW5zZXJ0KEJZX0RJUl9FTlRSWSwgKHN0KSwgKHZhbCksIChpKSkKKyNkZWZpbmUgc2tfQllfRElSX0VOVFJZX3NldF9jbXBfZnVuYyhzdCwgY21wKSBTS01fc2tfc2V0X2NtcF9mdW5jKEJZX0RJUl9FTlRSWSwgKHN0KSwgKGNtcCkpCisjZGVmaW5lIHNrX0JZX0RJUl9FTlRSWV9kdXAoc3QpIFNLTV9za19kdXAoQllfRElSX0VOVFJZLCBzdCkKKyNkZWZpbmUgc2tfQllfRElSX0VOVFJZX3BvcF9mcmVlKHN0LCBmcmVlX2Z1bmMpIFNLTV9za19wb3BfZnJlZShCWV9ESVJfRU5UUlksIChzdCksIChmcmVlX2Z1bmMpKQorI2RlZmluZSBza19CWV9ESVJfRU5UUllfc2hpZnQoc3QpIFNLTV9za19zaGlmdChCWV9ESVJfRU5UUlksIChzdCkpCisjZGVmaW5lIHNrX0JZX0RJUl9FTlRSWV9wb3Aoc3QpIFNLTV9za19wb3AoQllfRElSX0VOVFJZLCAoc3QpKQorI2RlZmluZSBza19CWV9ESVJfRU5UUllfc29ydChzdCkgU0tNX3NrX3NvcnQoQllfRElSX0VOVFJZLCAoc3QpKQorI2RlZmluZSBza19CWV9ESVJfRU5UUllfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKEJZX0RJUl9FTlRSWSwgKHN0KSkKKworI2RlZmluZSBza19CWV9ESVJfSEFTSF9uZXcoY21wKSBTS01fc2tfbmV3KEJZX0RJUl9IQVNILCAoY21wKSkKKyNkZWZpbmUgc2tfQllfRElSX0hBU0hfbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoQllfRElSX0hBU0gpCisjZGVmaW5lIHNrX0JZX0RJUl9IQVNIX2ZyZWUoc3QpIFNLTV9za19mcmVlKEJZX0RJUl9IQVNILCAoc3QpKQorI2RlZmluZSBza19CWV9ESVJfSEFTSF9udW0oc3QpIFNLTV9za19udW0oQllfRElSX0hBU0gsIChzdCkpCisjZGVmaW5lIHNrX0JZX0RJUl9IQVNIX3ZhbHVlKHN0LCBpKSBTS01fc2tfdmFsdWUoQllfRElSX0hBU0gsIChzdCksIChpKSkKKyNkZWZpbmUgc2tfQllfRElSX0hBU0hfc2V0KHN0LCBpLCB2YWwpIFNLTV9za19zZXQoQllfRElSX0hBU0gsIChzdCksIChpKSwgKHZhbCkpCisjZGVmaW5lIHNrX0JZX0RJUl9IQVNIX3plcm8oc3QpIFNLTV9za196ZXJvKEJZX0RJUl9IQVNILCAoc3QpKQorI2RlZmluZSBza19CWV9ESVJfSEFTSF9wdXNoKHN0LCB2YWwpIFNLTV9za19wdXNoKEJZX0RJUl9IQVNILCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfQllfRElSX0hBU0hfdW5zaGlmdChzdCwgdmFsKSBTS01fc2tfdW5zaGlmdChCWV9ESVJfSEFTSCwgKHN0KSwgKHZhbCkpCisjZGVmaW5lIHNrX0JZX0RJUl9IQVNIX2ZpbmQoc3QsIHZhbCkgU0tNX3NrX2ZpbmQoQllfRElSX0hBU0gsIChzdCksICh2YWwpKQorI2RlZmluZSBza19CWV9ESVJfSEFTSF9maW5kX2V4KHN0LCB2YWwpIFNLTV9za19maW5kX2V4KEJZX0RJUl9IQVNILCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfQllfRElSX0hBU0hfZGVsZXRlKHN0LCBpKSBTS01fc2tfZGVsZXRlKEJZX0RJUl9IQVNILCAoc3QpLCAoaSkpCisjZGVmaW5lIHNrX0JZX0RJUl9IQVNIX2RlbGV0ZV9wdHIoc3QsIHB0cikgU0tNX3NrX2RlbGV0ZV9wdHIoQllfRElSX0hBU0gsIChzdCksIChwdHIpKQorI2RlZmluZSBza19CWV9ESVJfSEFTSF9pbnNlcnQoc3QsIHZhbCwgaSkgU0tNX3NrX2luc2VydChCWV9ESVJfSEFTSCwgKHN0KSwgKHZhbCksIChpKSkKKyNkZWZpbmUgc2tfQllfRElSX0hBU0hfc2V0X2NtcF9mdW5jKHN0LCBjbXApIFNLTV9za19zZXRfY21wX2Z1bmMoQllfRElSX0hBU0gsIChzdCksIChjbXApKQorI2RlZmluZSBza19CWV9ESVJfSEFTSF9kdXAoc3QpIFNLTV9za19kdXAoQllfRElSX0hBU0gsIHN0KQorI2RlZmluZSBza19CWV9ESVJfSEFTSF9wb3BfZnJlZShzdCwgZnJlZV9mdW5jKSBTS01fc2tfcG9wX2ZyZWUoQllfRElSX0hBU0gsIChzdCksIChmcmVlX2Z1bmMpKQorI2RlZmluZSBza19CWV9ESVJfSEFTSF9zaGlmdChzdCkgU0tNX3NrX3NoaWZ0KEJZX0RJUl9IQVNILCAoc3QpKQorI2RlZmluZSBza19CWV9ESVJfSEFTSF9wb3Aoc3QpIFNLTV9za19wb3AoQllfRElSX0hBU0gsIChzdCkpCisjZGVmaW5lIHNrX0JZX0RJUl9IQVNIX3NvcnQoc3QpIFNLTV9za19zb3J0KEJZX0RJUl9IQVNILCAoc3QpKQorI2RlZmluZSBza19CWV9ESVJfSEFTSF9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoQllfRElSX0hBU0gsIChzdCkpCisKKyNkZWZpbmUgc2tfQ01TX0NlcnRpZmljYXRlQ2hvaWNlc19uZXcoY21wKSBTS01fc2tfbmV3KENNU19DZXJ0aWZpY2F0ZUNob2ljZXMsIChjbXApKQogI2RlZmluZSBza19DTVNfQ2VydGlmaWNhdGVDaG9pY2VzX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKENNU19DZXJ0aWZpY2F0ZUNob2ljZXMpCiAjZGVmaW5lIHNrX0NNU19DZXJ0aWZpY2F0ZUNob2ljZXNfZnJlZShzdCkgU0tNX3NrX2ZyZWUoQ01TX0NlcnRpZmljYXRlQ2hvaWNlcywgKHN0KSkKICNkZWZpbmUgc2tfQ01TX0NlcnRpZmljYXRlQ2hvaWNlc19udW0oc3QpIFNLTV9za19udW0oQ01TX0NlcnRpZmljYXRlQ2hvaWNlcywgKHN0KSkKQEAgLTQzNiw3ICs0OTAsNyBAQAogI2RlZmluZSBza19DTVNfQ2VydGlmaWNhdGVDaG9pY2VzX3NvcnQoc3QpIFNLTV9za19zb3J0KENNU19DZXJ0aWZpY2F0ZUNob2ljZXMsIChzdCkpCiAjZGVmaW5lIHNrX0NNU19DZXJ0aWZpY2F0ZUNob2ljZXNfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKENNU19DZXJ0aWZpY2F0ZUNob2ljZXMsIChzdCkpCiAKLSNkZWZpbmUgc2tfQ01TX1JlY2lwaWVudEluZm9fbmV3KHN0KSBTS01fc2tfbmV3KENNU19SZWNpcGllbnRJbmZvLCAoc3QpKQorI2RlZmluZSBza19DTVNfUmVjaXBpZW50SW5mb19uZXcoY21wKSBTS01fc2tfbmV3KENNU19SZWNpcGllbnRJbmZvLCAoY21wKSkKICNkZWZpbmUgc2tfQ01TX1JlY2lwaWVudEluZm9fbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoQ01TX1JlY2lwaWVudEluZm8pCiAjZGVmaW5lIHNrX0NNU19SZWNpcGllbnRJbmZvX2ZyZWUoc3QpIFNLTV9za19mcmVlKENNU19SZWNpcGllbnRJbmZvLCAoc3QpKQogI2RlZmluZSBza19DTVNfUmVjaXBpZW50SW5mb19udW0oc3QpIFNLTV9za19udW0oQ01TX1JlY2lwaWVudEluZm8sIChzdCkpCkBAIC00NTgsNyArNTEyLDcgQEAKICNkZWZpbmUgc2tfQ01TX1JlY2lwaWVudEluZm9fc29ydChzdCkgU0tNX3NrX3NvcnQoQ01TX1JlY2lwaWVudEluZm8sIChzdCkpCiAjZGVmaW5lIHNrX0NNU19SZWNpcGllbnRJbmZvX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChDTVNfUmVjaXBpZW50SW5mbywgKHN0KSkKIAotI2RlZmluZSBza19DTVNfUmV2b2NhdGlvbkluZm9DaG9pY2VfbmV3KHN0KSBTS01fc2tfbmV3KENNU19SZXZvY2F0aW9uSW5mb0Nob2ljZSwgKHN0KSkKKyNkZWZpbmUgc2tfQ01TX1Jldm9jYXRpb25JbmZvQ2hvaWNlX25ldyhjbXApIFNLTV9za19uZXcoQ01TX1Jldm9jYXRpb25JbmZvQ2hvaWNlLCAoY21wKSkKICNkZWZpbmUgc2tfQ01TX1Jldm9jYXRpb25JbmZvQ2hvaWNlX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKENNU19SZXZvY2F0aW9uSW5mb0Nob2ljZSkKICNkZWZpbmUgc2tfQ01TX1Jldm9jYXRpb25JbmZvQ2hvaWNlX2ZyZWUoc3QpIFNLTV9za19mcmVlKENNU19SZXZvY2F0aW9uSW5mb0Nob2ljZSwgKHN0KSkKICNkZWZpbmUgc2tfQ01TX1Jldm9jYXRpb25JbmZvQ2hvaWNlX251bShzdCkgU0tNX3NrX251bShDTVNfUmV2b2NhdGlvbkluZm9DaG9pY2UsIChzdCkpCkBAIC00ODAsNyArNTM0LDcgQEAKICNkZWZpbmUgc2tfQ01TX1Jldm9jYXRpb25JbmZvQ2hvaWNlX3NvcnQoc3QpIFNLTV9za19zb3J0KENNU19SZXZvY2F0aW9uSW5mb0Nob2ljZSwgKHN0KSkKICNkZWZpbmUgc2tfQ01TX1Jldm9jYXRpb25JbmZvQ2hvaWNlX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChDTVNfUmV2b2NhdGlvbkluZm9DaG9pY2UsIChzdCkpCiAKLSNkZWZpbmUgc2tfQ01TX1NpZ25lckluZm9fbmV3KHN0KSBTS01fc2tfbmV3KENNU19TaWduZXJJbmZvLCAoc3QpKQorI2RlZmluZSBza19DTVNfU2lnbmVySW5mb19uZXcoY21wKSBTS01fc2tfbmV3KENNU19TaWduZXJJbmZvLCAoY21wKSkKICNkZWZpbmUgc2tfQ01TX1NpZ25lckluZm9fbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoQ01TX1NpZ25lckluZm8pCiAjZGVmaW5lIHNrX0NNU19TaWduZXJJbmZvX2ZyZWUoc3QpIFNLTV9za19mcmVlKENNU19TaWduZXJJbmZvLCAoc3QpKQogI2RlZmluZSBza19DTVNfU2lnbmVySW5mb19udW0oc3QpIFNLTV9za19udW0oQ01TX1NpZ25lckluZm8sIChzdCkpCkBAIC01MDIsNyArNTU2LDcgQEAKICNkZWZpbmUgc2tfQ01TX1NpZ25lckluZm9fc29ydChzdCkgU0tNX3NrX3NvcnQoQ01TX1NpZ25lckluZm8sIChzdCkpCiAjZGVmaW5lIHNrX0NNU19TaWduZXJJbmZvX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChDTVNfU2lnbmVySW5mbywgKHN0KSkKIAotI2RlZmluZSBza19DT05GX0lNT0RVTEVfbmV3KHN0KSBTS01fc2tfbmV3KENPTkZfSU1PRFVMRSwgKHN0KSkKKyNkZWZpbmUgc2tfQ09ORl9JTU9EVUxFX25ldyhjbXApIFNLTV9za19uZXcoQ09ORl9JTU9EVUxFLCAoY21wKSkKICNkZWZpbmUgc2tfQ09ORl9JTU9EVUxFX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKENPTkZfSU1PRFVMRSkKICNkZWZpbmUgc2tfQ09ORl9JTU9EVUxFX2ZyZWUoc3QpIFNLTV9za19mcmVlKENPTkZfSU1PRFVMRSwgKHN0KSkKICNkZWZpbmUgc2tfQ09ORl9JTU9EVUxFX251bShzdCkgU0tNX3NrX251bShDT05GX0lNT0RVTEUsIChzdCkpCkBAIC01MjQsNyArNTc4LDcgQEAKICNkZWZpbmUgc2tfQ09ORl9JTU9EVUxFX3NvcnQoc3QpIFNLTV9za19zb3J0KENPTkZfSU1PRFVMRSwgKHN0KSkKICNkZWZpbmUgc2tfQ09ORl9JTU9EVUxFX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChDT05GX0lNT0RVTEUsIChzdCkpCiAKLSNkZWZpbmUgc2tfQ09ORl9NT0RVTEVfbmV3KHN0KSBTS01fc2tfbmV3KENPTkZfTU9EVUxFLCAoc3QpKQorI2RlZmluZSBza19DT05GX01PRFVMRV9uZXcoY21wKSBTS01fc2tfbmV3KENPTkZfTU9EVUxFLCAoY21wKSkKICNkZWZpbmUgc2tfQ09ORl9NT0RVTEVfbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoQ09ORl9NT0RVTEUpCiAjZGVmaW5lIHNrX0NPTkZfTU9EVUxFX2ZyZWUoc3QpIFNLTV9za19mcmVlKENPTkZfTU9EVUxFLCAoc3QpKQogI2RlZmluZSBza19DT05GX01PRFVMRV9udW0oc3QpIFNLTV9za19udW0oQ09ORl9NT0RVTEUsIChzdCkpCkBAIC01NDYsNyArNjAwLDcgQEAKICNkZWZpbmUgc2tfQ09ORl9NT0RVTEVfc29ydChzdCkgU0tNX3NrX3NvcnQoQ09ORl9NT0RVTEUsIChzdCkpCiAjZGVmaW5lIHNrX0NPTkZfTU9EVUxFX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChDT05GX01PRFVMRSwgKHN0KSkKIAotI2RlZmluZSBza19DT05GX1ZBTFVFX25ldyhzdCkgU0tNX3NrX25ldyhDT05GX1ZBTFVFLCAoc3QpKQorI2RlZmluZSBza19DT05GX1ZBTFVFX25ldyhjbXApIFNLTV9za19uZXcoQ09ORl9WQUxVRSwgKGNtcCkpCiAjZGVmaW5lIHNrX0NPTkZfVkFMVUVfbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoQ09ORl9WQUxVRSkKICNkZWZpbmUgc2tfQ09ORl9WQUxVRV9mcmVlKHN0KSBTS01fc2tfZnJlZShDT05GX1ZBTFVFLCAoc3QpKQogI2RlZmluZSBza19DT05GX1ZBTFVFX251bShzdCkgU0tNX3NrX251bShDT05GX1ZBTFVFLCAoc3QpKQpAQCAtNTY4LDcgKzYyMiw3IEBACiAjZGVmaW5lIHNrX0NPTkZfVkFMVUVfc29ydChzdCkgU0tNX3NrX3NvcnQoQ09ORl9WQUxVRSwgKHN0KSkKICNkZWZpbmUgc2tfQ09ORl9WQUxVRV9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoQ09ORl9WQUxVRSwgKHN0KSkKIAotI2RlZmluZSBza19DUllQVE9fRVhfREFUQV9GVU5DU19uZXcoc3QpIFNLTV9za19uZXcoQ1JZUFRPX0VYX0RBVEFfRlVOQ1MsIChzdCkpCisjZGVmaW5lIHNrX0NSWVBUT19FWF9EQVRBX0ZVTkNTX25ldyhjbXApIFNLTV9za19uZXcoQ1JZUFRPX0VYX0RBVEFfRlVOQ1MsIChjbXApKQogI2RlZmluZSBza19DUllQVE9fRVhfREFUQV9GVU5DU19uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChDUllQVE9fRVhfREFUQV9GVU5DUykKICNkZWZpbmUgc2tfQ1JZUFRPX0VYX0RBVEFfRlVOQ1NfZnJlZShzdCkgU0tNX3NrX2ZyZWUoQ1JZUFRPX0VYX0RBVEFfRlVOQ1MsIChzdCkpCiAjZGVmaW5lIHNrX0NSWVBUT19FWF9EQVRBX0ZVTkNTX251bShzdCkgU0tNX3NrX251bShDUllQVE9fRVhfREFUQV9GVU5DUywgKHN0KSkKQEAgLTU5MCw3ICs2NDQsNyBAQAogI2RlZmluZSBza19DUllQVE9fRVhfREFUQV9GVU5DU19zb3J0KHN0KSBTS01fc2tfc29ydChDUllQVE9fRVhfREFUQV9GVU5DUywgKHN0KSkKICNkZWZpbmUgc2tfQ1JZUFRPX0VYX0RBVEFfRlVOQ1NfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKENSWVBUT19FWF9EQVRBX0ZVTkNTLCAoc3QpKQogCi0jZGVmaW5lIHNrX0NSWVBUT19keW5sb2NrX25ldyhzdCkgU0tNX3NrX25ldyhDUllQVE9fZHlubG9jaywgKHN0KSkKKyNkZWZpbmUgc2tfQ1JZUFRPX2R5bmxvY2tfbmV3KGNtcCkgU0tNX3NrX25ldyhDUllQVE9fZHlubG9jaywgKGNtcCkpCiAjZGVmaW5lIHNrX0NSWVBUT19keW5sb2NrX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKENSWVBUT19keW5sb2NrKQogI2RlZmluZSBza19DUllQVE9fZHlubG9ja19mcmVlKHN0KSBTS01fc2tfZnJlZShDUllQVE9fZHlubG9jaywgKHN0KSkKICNkZWZpbmUgc2tfQ1JZUFRPX2R5bmxvY2tfbnVtKHN0KSBTS01fc2tfbnVtKENSWVBUT19keW5sb2NrLCAoc3QpKQpAQCAtNjEyLDcgKzY2Niw3IEBACiAjZGVmaW5lIHNrX0NSWVBUT19keW5sb2NrX3NvcnQoc3QpIFNLTV9za19zb3J0KENSWVBUT19keW5sb2NrLCAoc3QpKQogI2RlZmluZSBza19DUllQVE9fZHlubG9ja19pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoQ1JZUFRPX2R5bmxvY2ssIChzdCkpCiAKLSNkZWZpbmUgc2tfRElTVF9QT0lOVF9uZXcoc3QpIFNLTV9za19uZXcoRElTVF9QT0lOVCwgKHN0KSkKKyNkZWZpbmUgc2tfRElTVF9QT0lOVF9uZXcoY21wKSBTS01fc2tfbmV3KERJU1RfUE9JTlQsIChjbXApKQogI2RlZmluZSBza19ESVNUX1BPSU5UX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKERJU1RfUE9JTlQpCiAjZGVmaW5lIHNrX0RJU1RfUE9JTlRfZnJlZShzdCkgU0tNX3NrX2ZyZWUoRElTVF9QT0lOVCwgKHN0KSkKICNkZWZpbmUgc2tfRElTVF9QT0lOVF9udW0oc3QpIFNLTV9za19udW0oRElTVF9QT0lOVCwgKHN0KSkKQEAgLTYzNCw3ICs2ODgsNyBAQAogI2RlZmluZSBza19ESVNUX1BPSU5UX3NvcnQoc3QpIFNLTV9za19zb3J0KERJU1RfUE9JTlQsIChzdCkpCiAjZGVmaW5lIHNrX0RJU1RfUE9JTlRfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKERJU1RfUE9JTlQsIChzdCkpCiAKLSNkZWZpbmUgc2tfRU5HSU5FX25ldyhzdCkgU0tNX3NrX25ldyhFTkdJTkUsIChzdCkpCisjZGVmaW5lIHNrX0VOR0lORV9uZXcoY21wKSBTS01fc2tfbmV3KEVOR0lORSwgKGNtcCkpCiAjZGVmaW5lIHNrX0VOR0lORV9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChFTkdJTkUpCiAjZGVmaW5lIHNrX0VOR0lORV9mcmVlKHN0KSBTS01fc2tfZnJlZShFTkdJTkUsIChzdCkpCiAjZGVmaW5lIHNrX0VOR0lORV9udW0oc3QpIFNLTV9za19udW0oRU5HSU5FLCAoc3QpKQpAQCAtNjU2LDcgKzcxMCw3IEBACiAjZGVmaW5lIHNrX0VOR0lORV9zb3J0KHN0KSBTS01fc2tfc29ydChFTkdJTkUsIChzdCkpCiAjZGVmaW5lIHNrX0VOR0lORV9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoRU5HSU5FLCAoc3QpKQogCi0jZGVmaW5lIHNrX0VOR0lORV9DTEVBTlVQX0lURU1fbmV3KHN0KSBTS01fc2tfbmV3KEVOR0lORV9DTEVBTlVQX0lURU0sIChzdCkpCisjZGVmaW5lIHNrX0VOR0lORV9DTEVBTlVQX0lURU1fbmV3KGNtcCkgU0tNX3NrX25ldyhFTkdJTkVfQ0xFQU5VUF9JVEVNLCAoY21wKSkKICNkZWZpbmUgc2tfRU5HSU5FX0NMRUFOVVBfSVRFTV9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChFTkdJTkVfQ0xFQU5VUF9JVEVNKQogI2RlZmluZSBza19FTkdJTkVfQ0xFQU5VUF9JVEVNX2ZyZWUoc3QpIFNLTV9za19mcmVlKEVOR0lORV9DTEVBTlVQX0lURU0sIChzdCkpCiAjZGVmaW5lIHNrX0VOR0lORV9DTEVBTlVQX0lURU1fbnVtKHN0KSBTS01fc2tfbnVtKEVOR0lORV9DTEVBTlVQX0lURU0sIChzdCkpCkBAIC02NzgsNyArNzMyLDExNyBAQAogI2RlZmluZSBza19FTkdJTkVfQ0xFQU5VUF9JVEVNX3NvcnQoc3QpIFNLTV9za19zb3J0KEVOR0lORV9DTEVBTlVQX0lURU0sIChzdCkpCiAjZGVmaW5lIHNrX0VOR0lORV9DTEVBTlVQX0lURU1faXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKEVOR0lORV9DTEVBTlVQX0lURU0sIChzdCkpCiAKLSNkZWZpbmUgc2tfR0VORVJBTF9OQU1FX25ldyhzdCkgU0tNX3NrX25ldyhHRU5FUkFMX05BTUUsIChzdCkpCisjZGVmaW5lIHNrX0VTU19DRVJUX0lEX25ldyhjbXApIFNLTV9za19uZXcoRVNTX0NFUlRfSUQsIChjbXApKQorI2RlZmluZSBza19FU1NfQ0VSVF9JRF9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChFU1NfQ0VSVF9JRCkKKyNkZWZpbmUgc2tfRVNTX0NFUlRfSURfZnJlZShzdCkgU0tNX3NrX2ZyZWUoRVNTX0NFUlRfSUQsIChzdCkpCisjZGVmaW5lIHNrX0VTU19DRVJUX0lEX251bShzdCkgU0tNX3NrX251bShFU1NfQ0VSVF9JRCwgKHN0KSkKKyNkZWZpbmUgc2tfRVNTX0NFUlRfSURfdmFsdWUoc3QsIGkpIFNLTV9za192YWx1ZShFU1NfQ0VSVF9JRCwgKHN0KSwgKGkpKQorI2RlZmluZSBza19FU1NfQ0VSVF9JRF9zZXQoc3QsIGksIHZhbCkgU0tNX3NrX3NldChFU1NfQ0VSVF9JRCwgKHN0KSwgKGkpLCAodmFsKSkKKyNkZWZpbmUgc2tfRVNTX0NFUlRfSURfemVybyhzdCkgU0tNX3NrX3plcm8oRVNTX0NFUlRfSUQsIChzdCkpCisjZGVmaW5lIHNrX0VTU19DRVJUX0lEX3B1c2goc3QsIHZhbCkgU0tNX3NrX3B1c2goRVNTX0NFUlRfSUQsIChzdCksICh2YWwpKQorI2RlZmluZSBza19FU1NfQ0VSVF9JRF91bnNoaWZ0KHN0LCB2YWwpIFNLTV9za191bnNoaWZ0KEVTU19DRVJUX0lELCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfRVNTX0NFUlRfSURfZmluZChzdCwgdmFsKSBTS01fc2tfZmluZChFU1NfQ0VSVF9JRCwgKHN0KSwgKHZhbCkpCisjZGVmaW5lIHNrX0VTU19DRVJUX0lEX2ZpbmRfZXgoc3QsIHZhbCkgU0tNX3NrX2ZpbmRfZXgoRVNTX0NFUlRfSUQsIChzdCksICh2YWwpKQorI2RlZmluZSBza19FU1NfQ0VSVF9JRF9kZWxldGUoc3QsIGkpIFNLTV9za19kZWxldGUoRVNTX0NFUlRfSUQsIChzdCksIChpKSkKKyNkZWZpbmUgc2tfRVNTX0NFUlRfSURfZGVsZXRlX3B0cihzdCwgcHRyKSBTS01fc2tfZGVsZXRlX3B0cihFU1NfQ0VSVF9JRCwgKHN0KSwgKHB0cikpCisjZGVmaW5lIHNrX0VTU19DRVJUX0lEX2luc2VydChzdCwgdmFsLCBpKSBTS01fc2tfaW5zZXJ0KEVTU19DRVJUX0lELCAoc3QpLCAodmFsKSwgKGkpKQorI2RlZmluZSBza19FU1NfQ0VSVF9JRF9zZXRfY21wX2Z1bmMoc3QsIGNtcCkgU0tNX3NrX3NldF9jbXBfZnVuYyhFU1NfQ0VSVF9JRCwgKHN0KSwgKGNtcCkpCisjZGVmaW5lIHNrX0VTU19DRVJUX0lEX2R1cChzdCkgU0tNX3NrX2R1cChFU1NfQ0VSVF9JRCwgc3QpCisjZGVmaW5lIHNrX0VTU19DRVJUX0lEX3BvcF9mcmVlKHN0LCBmcmVlX2Z1bmMpIFNLTV9za19wb3BfZnJlZShFU1NfQ0VSVF9JRCwgKHN0KSwgKGZyZWVfZnVuYykpCisjZGVmaW5lIHNrX0VTU19DRVJUX0lEX3NoaWZ0KHN0KSBTS01fc2tfc2hpZnQoRVNTX0NFUlRfSUQsIChzdCkpCisjZGVmaW5lIHNrX0VTU19DRVJUX0lEX3BvcChzdCkgU0tNX3NrX3BvcChFU1NfQ0VSVF9JRCwgKHN0KSkKKyNkZWZpbmUgc2tfRVNTX0NFUlRfSURfc29ydChzdCkgU0tNX3NrX3NvcnQoRVNTX0NFUlRfSUQsIChzdCkpCisjZGVmaW5lIHNrX0VTU19DRVJUX0lEX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChFU1NfQ0VSVF9JRCwgKHN0KSkKKworI2RlZmluZSBza19FVlBfTURfbmV3KGNtcCkgU0tNX3NrX25ldyhFVlBfTUQsIChjbXApKQorI2RlZmluZSBza19FVlBfTURfbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoRVZQX01EKQorI2RlZmluZSBza19FVlBfTURfZnJlZShzdCkgU0tNX3NrX2ZyZWUoRVZQX01ELCAoc3QpKQorI2RlZmluZSBza19FVlBfTURfbnVtKHN0KSBTS01fc2tfbnVtKEVWUF9NRCwgKHN0KSkKKyNkZWZpbmUgc2tfRVZQX01EX3ZhbHVlKHN0LCBpKSBTS01fc2tfdmFsdWUoRVZQX01ELCAoc3QpLCAoaSkpCisjZGVmaW5lIHNrX0VWUF9NRF9zZXQoc3QsIGksIHZhbCkgU0tNX3NrX3NldChFVlBfTUQsIChzdCksIChpKSwgKHZhbCkpCisjZGVmaW5lIHNrX0VWUF9NRF96ZXJvKHN0KSBTS01fc2tfemVybyhFVlBfTUQsIChzdCkpCisjZGVmaW5lIHNrX0VWUF9NRF9wdXNoKHN0LCB2YWwpIFNLTV9za19wdXNoKEVWUF9NRCwgKHN0KSwgKHZhbCkpCisjZGVmaW5lIHNrX0VWUF9NRF91bnNoaWZ0KHN0LCB2YWwpIFNLTV9za191bnNoaWZ0KEVWUF9NRCwgKHN0KSwgKHZhbCkpCisjZGVmaW5lIHNrX0VWUF9NRF9maW5kKHN0LCB2YWwpIFNLTV9za19maW5kKEVWUF9NRCwgKHN0KSwgKHZhbCkpCisjZGVmaW5lIHNrX0VWUF9NRF9maW5kX2V4KHN0LCB2YWwpIFNLTV9za19maW5kX2V4KEVWUF9NRCwgKHN0KSwgKHZhbCkpCisjZGVmaW5lIHNrX0VWUF9NRF9kZWxldGUoc3QsIGkpIFNLTV9za19kZWxldGUoRVZQX01ELCAoc3QpLCAoaSkpCisjZGVmaW5lIHNrX0VWUF9NRF9kZWxldGVfcHRyKHN0LCBwdHIpIFNLTV9za19kZWxldGVfcHRyKEVWUF9NRCwgKHN0KSwgKHB0cikpCisjZGVmaW5lIHNrX0VWUF9NRF9pbnNlcnQoc3QsIHZhbCwgaSkgU0tNX3NrX2luc2VydChFVlBfTUQsIChzdCksICh2YWwpLCAoaSkpCisjZGVmaW5lIHNrX0VWUF9NRF9zZXRfY21wX2Z1bmMoc3QsIGNtcCkgU0tNX3NrX3NldF9jbXBfZnVuYyhFVlBfTUQsIChzdCksIChjbXApKQorI2RlZmluZSBza19FVlBfTURfZHVwKHN0KSBTS01fc2tfZHVwKEVWUF9NRCwgc3QpCisjZGVmaW5lIHNrX0VWUF9NRF9wb3BfZnJlZShzdCwgZnJlZV9mdW5jKSBTS01fc2tfcG9wX2ZyZWUoRVZQX01ELCAoc3QpLCAoZnJlZV9mdW5jKSkKKyNkZWZpbmUgc2tfRVZQX01EX3NoaWZ0KHN0KSBTS01fc2tfc2hpZnQoRVZQX01ELCAoc3QpKQorI2RlZmluZSBza19FVlBfTURfcG9wKHN0KSBTS01fc2tfcG9wKEVWUF9NRCwgKHN0KSkKKyNkZWZpbmUgc2tfRVZQX01EX3NvcnQoc3QpIFNLTV9za19zb3J0KEVWUF9NRCwgKHN0KSkKKyNkZWZpbmUgc2tfRVZQX01EX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChFVlBfTUQsIChzdCkpCisKKyNkZWZpbmUgc2tfRVZQX1BCRV9DVExfbmV3KGNtcCkgU0tNX3NrX25ldyhFVlBfUEJFX0NUTCwgKGNtcCkpCisjZGVmaW5lIHNrX0VWUF9QQkVfQ1RMX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKEVWUF9QQkVfQ1RMKQorI2RlZmluZSBza19FVlBfUEJFX0NUTF9mcmVlKHN0KSBTS01fc2tfZnJlZShFVlBfUEJFX0NUTCwgKHN0KSkKKyNkZWZpbmUgc2tfRVZQX1BCRV9DVExfbnVtKHN0KSBTS01fc2tfbnVtKEVWUF9QQkVfQ1RMLCAoc3QpKQorI2RlZmluZSBza19FVlBfUEJFX0NUTF92YWx1ZShzdCwgaSkgU0tNX3NrX3ZhbHVlKEVWUF9QQkVfQ1RMLCAoc3QpLCAoaSkpCisjZGVmaW5lIHNrX0VWUF9QQkVfQ1RMX3NldChzdCwgaSwgdmFsKSBTS01fc2tfc2V0KEVWUF9QQkVfQ1RMLCAoc3QpLCAoaSksICh2YWwpKQorI2RlZmluZSBza19FVlBfUEJFX0NUTF96ZXJvKHN0KSBTS01fc2tfemVybyhFVlBfUEJFX0NUTCwgKHN0KSkKKyNkZWZpbmUgc2tfRVZQX1BCRV9DVExfcHVzaChzdCwgdmFsKSBTS01fc2tfcHVzaChFVlBfUEJFX0NUTCwgKHN0KSwgKHZhbCkpCisjZGVmaW5lIHNrX0VWUF9QQkVfQ1RMX3Vuc2hpZnQoc3QsIHZhbCkgU0tNX3NrX3Vuc2hpZnQoRVZQX1BCRV9DVEwsIChzdCksICh2YWwpKQorI2RlZmluZSBza19FVlBfUEJFX0NUTF9maW5kKHN0LCB2YWwpIFNLTV9za19maW5kKEVWUF9QQkVfQ1RMLCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfRVZQX1BCRV9DVExfZmluZF9leChzdCwgdmFsKSBTS01fc2tfZmluZF9leChFVlBfUEJFX0NUTCwgKHN0KSwgKHZhbCkpCisjZGVmaW5lIHNrX0VWUF9QQkVfQ1RMX2RlbGV0ZShzdCwgaSkgU0tNX3NrX2RlbGV0ZShFVlBfUEJFX0NUTCwgKHN0KSwgKGkpKQorI2RlZmluZSBza19FVlBfUEJFX0NUTF9kZWxldGVfcHRyKHN0LCBwdHIpIFNLTV9za19kZWxldGVfcHRyKEVWUF9QQkVfQ1RMLCAoc3QpLCAocHRyKSkKKyNkZWZpbmUgc2tfRVZQX1BCRV9DVExfaW5zZXJ0KHN0LCB2YWwsIGkpIFNLTV9za19pbnNlcnQoRVZQX1BCRV9DVEwsIChzdCksICh2YWwpLCAoaSkpCisjZGVmaW5lIHNrX0VWUF9QQkVfQ1RMX3NldF9jbXBfZnVuYyhzdCwgY21wKSBTS01fc2tfc2V0X2NtcF9mdW5jKEVWUF9QQkVfQ1RMLCAoc3QpLCAoY21wKSkKKyNkZWZpbmUgc2tfRVZQX1BCRV9DVExfZHVwKHN0KSBTS01fc2tfZHVwKEVWUF9QQkVfQ1RMLCBzdCkKKyNkZWZpbmUgc2tfRVZQX1BCRV9DVExfcG9wX2ZyZWUoc3QsIGZyZWVfZnVuYykgU0tNX3NrX3BvcF9mcmVlKEVWUF9QQkVfQ1RMLCAoc3QpLCAoZnJlZV9mdW5jKSkKKyNkZWZpbmUgc2tfRVZQX1BCRV9DVExfc2hpZnQoc3QpIFNLTV9za19zaGlmdChFVlBfUEJFX0NUTCwgKHN0KSkKKyNkZWZpbmUgc2tfRVZQX1BCRV9DVExfcG9wKHN0KSBTS01fc2tfcG9wKEVWUF9QQkVfQ1RMLCAoc3QpKQorI2RlZmluZSBza19FVlBfUEJFX0NUTF9zb3J0KHN0KSBTS01fc2tfc29ydChFVlBfUEJFX0NUTCwgKHN0KSkKKyNkZWZpbmUgc2tfRVZQX1BCRV9DVExfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKEVWUF9QQkVfQ1RMLCAoc3QpKQorCisjZGVmaW5lIHNrX0VWUF9QS0VZX0FTTjFfTUVUSE9EX25ldyhjbXApIFNLTV9za19uZXcoRVZQX1BLRVlfQVNOMV9NRVRIT0QsIChjbXApKQorI2RlZmluZSBza19FVlBfUEtFWV9BU04xX01FVEhPRF9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChFVlBfUEtFWV9BU04xX01FVEhPRCkKKyNkZWZpbmUgc2tfRVZQX1BLRVlfQVNOMV9NRVRIT0RfZnJlZShzdCkgU0tNX3NrX2ZyZWUoRVZQX1BLRVlfQVNOMV9NRVRIT0QsIChzdCkpCisjZGVmaW5lIHNrX0VWUF9QS0VZX0FTTjFfTUVUSE9EX251bShzdCkgU0tNX3NrX251bShFVlBfUEtFWV9BU04xX01FVEhPRCwgKHN0KSkKKyNkZWZpbmUgc2tfRVZQX1BLRVlfQVNOMV9NRVRIT0RfdmFsdWUoc3QsIGkpIFNLTV9za192YWx1ZShFVlBfUEtFWV9BU04xX01FVEhPRCwgKHN0KSwgKGkpKQorI2RlZmluZSBza19FVlBfUEtFWV9BU04xX01FVEhPRF9zZXQoc3QsIGksIHZhbCkgU0tNX3NrX3NldChFVlBfUEtFWV9BU04xX01FVEhPRCwgKHN0KSwgKGkpLCAodmFsKSkKKyNkZWZpbmUgc2tfRVZQX1BLRVlfQVNOMV9NRVRIT0RfemVybyhzdCkgU0tNX3NrX3plcm8oRVZQX1BLRVlfQVNOMV9NRVRIT0QsIChzdCkpCisjZGVmaW5lIHNrX0VWUF9QS0VZX0FTTjFfTUVUSE9EX3B1c2goc3QsIHZhbCkgU0tNX3NrX3B1c2goRVZQX1BLRVlfQVNOMV9NRVRIT0QsIChzdCksICh2YWwpKQorI2RlZmluZSBza19FVlBfUEtFWV9BU04xX01FVEhPRF91bnNoaWZ0KHN0LCB2YWwpIFNLTV9za191bnNoaWZ0KEVWUF9QS0VZX0FTTjFfTUVUSE9ELCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfRVZQX1BLRVlfQVNOMV9NRVRIT0RfZmluZChzdCwgdmFsKSBTS01fc2tfZmluZChFVlBfUEtFWV9BU04xX01FVEhPRCwgKHN0KSwgKHZhbCkpCisjZGVmaW5lIHNrX0VWUF9QS0VZX0FTTjFfTUVUSE9EX2ZpbmRfZXgoc3QsIHZhbCkgU0tNX3NrX2ZpbmRfZXgoRVZQX1BLRVlfQVNOMV9NRVRIT0QsIChzdCksICh2YWwpKQorI2RlZmluZSBza19FVlBfUEtFWV9BU04xX01FVEhPRF9kZWxldGUoc3QsIGkpIFNLTV9za19kZWxldGUoRVZQX1BLRVlfQVNOMV9NRVRIT0QsIChzdCksIChpKSkKKyNkZWZpbmUgc2tfRVZQX1BLRVlfQVNOMV9NRVRIT0RfZGVsZXRlX3B0cihzdCwgcHRyKSBTS01fc2tfZGVsZXRlX3B0cihFVlBfUEtFWV9BU04xX01FVEhPRCwgKHN0KSwgKHB0cikpCisjZGVmaW5lIHNrX0VWUF9QS0VZX0FTTjFfTUVUSE9EX2luc2VydChzdCwgdmFsLCBpKSBTS01fc2tfaW5zZXJ0KEVWUF9QS0VZX0FTTjFfTUVUSE9ELCAoc3QpLCAodmFsKSwgKGkpKQorI2RlZmluZSBza19FVlBfUEtFWV9BU04xX01FVEhPRF9zZXRfY21wX2Z1bmMoc3QsIGNtcCkgU0tNX3NrX3NldF9jbXBfZnVuYyhFVlBfUEtFWV9BU04xX01FVEhPRCwgKHN0KSwgKGNtcCkpCisjZGVmaW5lIHNrX0VWUF9QS0VZX0FTTjFfTUVUSE9EX2R1cChzdCkgU0tNX3NrX2R1cChFVlBfUEtFWV9BU04xX01FVEhPRCwgc3QpCisjZGVmaW5lIHNrX0VWUF9QS0VZX0FTTjFfTUVUSE9EX3BvcF9mcmVlKHN0LCBmcmVlX2Z1bmMpIFNLTV9za19wb3BfZnJlZShFVlBfUEtFWV9BU04xX01FVEhPRCwgKHN0KSwgKGZyZWVfZnVuYykpCisjZGVmaW5lIHNrX0VWUF9QS0VZX0FTTjFfTUVUSE9EX3NoaWZ0KHN0KSBTS01fc2tfc2hpZnQoRVZQX1BLRVlfQVNOMV9NRVRIT0QsIChzdCkpCisjZGVmaW5lIHNrX0VWUF9QS0VZX0FTTjFfTUVUSE9EX3BvcChzdCkgU0tNX3NrX3BvcChFVlBfUEtFWV9BU04xX01FVEhPRCwgKHN0KSkKKyNkZWZpbmUgc2tfRVZQX1BLRVlfQVNOMV9NRVRIT0Rfc29ydChzdCkgU0tNX3NrX3NvcnQoRVZQX1BLRVlfQVNOMV9NRVRIT0QsIChzdCkpCisjZGVmaW5lIHNrX0VWUF9QS0VZX0FTTjFfTUVUSE9EX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChFVlBfUEtFWV9BU04xX01FVEhPRCwgKHN0KSkKKworI2RlZmluZSBza19FVlBfUEtFWV9NRVRIT0RfbmV3KGNtcCkgU0tNX3NrX25ldyhFVlBfUEtFWV9NRVRIT0QsIChjbXApKQorI2RlZmluZSBza19FVlBfUEtFWV9NRVRIT0RfbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoRVZQX1BLRVlfTUVUSE9EKQorI2RlZmluZSBza19FVlBfUEtFWV9NRVRIT0RfZnJlZShzdCkgU0tNX3NrX2ZyZWUoRVZQX1BLRVlfTUVUSE9ELCAoc3QpKQorI2RlZmluZSBza19FVlBfUEtFWV9NRVRIT0RfbnVtKHN0KSBTS01fc2tfbnVtKEVWUF9QS0VZX01FVEhPRCwgKHN0KSkKKyNkZWZpbmUgc2tfRVZQX1BLRVlfTUVUSE9EX3ZhbHVlKHN0LCBpKSBTS01fc2tfdmFsdWUoRVZQX1BLRVlfTUVUSE9ELCAoc3QpLCAoaSkpCisjZGVmaW5lIHNrX0VWUF9QS0VZX01FVEhPRF9zZXQoc3QsIGksIHZhbCkgU0tNX3NrX3NldChFVlBfUEtFWV9NRVRIT0QsIChzdCksIChpKSwgKHZhbCkpCisjZGVmaW5lIHNrX0VWUF9QS0VZX01FVEhPRF96ZXJvKHN0KSBTS01fc2tfemVybyhFVlBfUEtFWV9NRVRIT0QsIChzdCkpCisjZGVmaW5lIHNrX0VWUF9QS0VZX01FVEhPRF9wdXNoKHN0LCB2YWwpIFNLTV9za19wdXNoKEVWUF9QS0VZX01FVEhPRCwgKHN0KSwgKHZhbCkpCisjZGVmaW5lIHNrX0VWUF9QS0VZX01FVEhPRF91bnNoaWZ0KHN0LCB2YWwpIFNLTV9za191bnNoaWZ0KEVWUF9QS0VZX01FVEhPRCwgKHN0KSwgKHZhbCkpCisjZGVmaW5lIHNrX0VWUF9QS0VZX01FVEhPRF9maW5kKHN0LCB2YWwpIFNLTV9za19maW5kKEVWUF9QS0VZX01FVEhPRCwgKHN0KSwgKHZhbCkpCisjZGVmaW5lIHNrX0VWUF9QS0VZX01FVEhPRF9maW5kX2V4KHN0LCB2YWwpIFNLTV9za19maW5kX2V4KEVWUF9QS0VZX01FVEhPRCwgKHN0KSwgKHZhbCkpCisjZGVmaW5lIHNrX0VWUF9QS0VZX01FVEhPRF9kZWxldGUoc3QsIGkpIFNLTV9za19kZWxldGUoRVZQX1BLRVlfTUVUSE9ELCAoc3QpLCAoaSkpCisjZGVmaW5lIHNrX0VWUF9QS0VZX01FVEhPRF9kZWxldGVfcHRyKHN0LCBwdHIpIFNLTV9za19kZWxldGVfcHRyKEVWUF9QS0VZX01FVEhPRCwgKHN0KSwgKHB0cikpCisjZGVmaW5lIHNrX0VWUF9QS0VZX01FVEhPRF9pbnNlcnQoc3QsIHZhbCwgaSkgU0tNX3NrX2luc2VydChFVlBfUEtFWV9NRVRIT0QsIChzdCksICh2YWwpLCAoaSkpCisjZGVmaW5lIHNrX0VWUF9QS0VZX01FVEhPRF9zZXRfY21wX2Z1bmMoc3QsIGNtcCkgU0tNX3NrX3NldF9jbXBfZnVuYyhFVlBfUEtFWV9NRVRIT0QsIChzdCksIChjbXApKQorI2RlZmluZSBza19FVlBfUEtFWV9NRVRIT0RfZHVwKHN0KSBTS01fc2tfZHVwKEVWUF9QS0VZX01FVEhPRCwgc3QpCisjZGVmaW5lIHNrX0VWUF9QS0VZX01FVEhPRF9wb3BfZnJlZShzdCwgZnJlZV9mdW5jKSBTS01fc2tfcG9wX2ZyZWUoRVZQX1BLRVlfTUVUSE9ELCAoc3QpLCAoZnJlZV9mdW5jKSkKKyNkZWZpbmUgc2tfRVZQX1BLRVlfTUVUSE9EX3NoaWZ0KHN0KSBTS01fc2tfc2hpZnQoRVZQX1BLRVlfTUVUSE9ELCAoc3QpKQorI2RlZmluZSBza19FVlBfUEtFWV9NRVRIT0RfcG9wKHN0KSBTS01fc2tfcG9wKEVWUF9QS0VZX01FVEhPRCwgKHN0KSkKKyNkZWZpbmUgc2tfRVZQX1BLRVlfTUVUSE9EX3NvcnQoc3QpIFNLTV9za19zb3J0KEVWUF9QS0VZX01FVEhPRCwgKHN0KSkKKyNkZWZpbmUgc2tfRVZQX1BLRVlfTUVUSE9EX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChFVlBfUEtFWV9NRVRIT0QsIChzdCkpCisKKyNkZWZpbmUgc2tfR0VORVJBTF9OQU1FX25ldyhjbXApIFNLTV9za19uZXcoR0VORVJBTF9OQU1FLCAoY21wKSkKICNkZWZpbmUgc2tfR0VORVJBTF9OQU1FX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKEdFTkVSQUxfTkFNRSkKICNkZWZpbmUgc2tfR0VORVJBTF9OQU1FX2ZyZWUoc3QpIFNLTV9za19mcmVlKEdFTkVSQUxfTkFNRSwgKHN0KSkKICNkZWZpbmUgc2tfR0VORVJBTF9OQU1FX251bShzdCkgU0tNX3NrX251bShHRU5FUkFMX05BTUUsIChzdCkpCkBAIC03MDAsNyArODY0LDcgQEAKICNkZWZpbmUgc2tfR0VORVJBTF9OQU1FX3NvcnQoc3QpIFNLTV9za19zb3J0KEdFTkVSQUxfTkFNRSwgKHN0KSkKICNkZWZpbmUgc2tfR0VORVJBTF9OQU1FX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChHRU5FUkFMX05BTUUsIChzdCkpCiAKLSNkZWZpbmUgc2tfR0VORVJBTF9OQU1FU19uZXcoc3QpIFNLTV9za19uZXcoR0VORVJBTF9OQU1FUywgKHN0KSkKKyNkZWZpbmUgc2tfR0VORVJBTF9OQU1FU19uZXcoY21wKSBTS01fc2tfbmV3KEdFTkVSQUxfTkFNRVMsIChjbXApKQogI2RlZmluZSBza19HRU5FUkFMX05BTUVTX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKEdFTkVSQUxfTkFNRVMpCiAjZGVmaW5lIHNrX0dFTkVSQUxfTkFNRVNfZnJlZShzdCkgU0tNX3NrX2ZyZWUoR0VORVJBTF9OQU1FUywgKHN0KSkKICNkZWZpbmUgc2tfR0VORVJBTF9OQU1FU19udW0oc3QpIFNLTV9za19udW0oR0VORVJBTF9OQU1FUywgKHN0KSkKQEAgLTcyMiw3ICs4ODYsNyBAQAogI2RlZmluZSBza19HRU5FUkFMX05BTUVTX3NvcnQoc3QpIFNLTV9za19zb3J0KEdFTkVSQUxfTkFNRVMsIChzdCkpCiAjZGVmaW5lIHNrX0dFTkVSQUxfTkFNRVNfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKEdFTkVSQUxfTkFNRVMsIChzdCkpCiAKLSNkZWZpbmUgc2tfR0VORVJBTF9TVUJUUkVFX25ldyhzdCkgU0tNX3NrX25ldyhHRU5FUkFMX1NVQlRSRUUsIChzdCkpCisjZGVmaW5lIHNrX0dFTkVSQUxfU1VCVFJFRV9uZXcoY21wKSBTS01fc2tfbmV3KEdFTkVSQUxfU1VCVFJFRSwgKGNtcCkpCiAjZGVmaW5lIHNrX0dFTkVSQUxfU1VCVFJFRV9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChHRU5FUkFMX1NVQlRSRUUpCiAjZGVmaW5lIHNrX0dFTkVSQUxfU1VCVFJFRV9mcmVlKHN0KSBTS01fc2tfZnJlZShHRU5FUkFMX1NVQlRSRUUsIChzdCkpCiAjZGVmaW5lIHNrX0dFTkVSQUxfU1VCVFJFRV9udW0oc3QpIFNLTV9za19udW0oR0VORVJBTF9TVUJUUkVFLCAoc3QpKQpAQCAtNzQ0LDcgKzkwOCw3IEBACiAjZGVmaW5lIHNrX0dFTkVSQUxfU1VCVFJFRV9zb3J0KHN0KSBTS01fc2tfc29ydChHRU5FUkFMX1NVQlRSRUUsIChzdCkpCiAjZGVmaW5lIHNrX0dFTkVSQUxfU1VCVFJFRV9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoR0VORVJBTF9TVUJUUkVFLCAoc3QpKQogCi0jZGVmaW5lIHNrX0lQQWRkcmVzc0ZhbWlseV9uZXcoc3QpIFNLTV9za19uZXcoSVBBZGRyZXNzRmFtaWx5LCAoc3QpKQorI2RlZmluZSBza19JUEFkZHJlc3NGYW1pbHlfbmV3KGNtcCkgU0tNX3NrX25ldyhJUEFkZHJlc3NGYW1pbHksIChjbXApKQogI2RlZmluZSBza19JUEFkZHJlc3NGYW1pbHlfbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoSVBBZGRyZXNzRmFtaWx5KQogI2RlZmluZSBza19JUEFkZHJlc3NGYW1pbHlfZnJlZShzdCkgU0tNX3NrX2ZyZWUoSVBBZGRyZXNzRmFtaWx5LCAoc3QpKQogI2RlZmluZSBza19JUEFkZHJlc3NGYW1pbHlfbnVtKHN0KSBTS01fc2tfbnVtKElQQWRkcmVzc0ZhbWlseSwgKHN0KSkKQEAgLTc2Niw3ICs5MzAsNyBAQAogI2RlZmluZSBza19JUEFkZHJlc3NGYW1pbHlfc29ydChzdCkgU0tNX3NrX3NvcnQoSVBBZGRyZXNzRmFtaWx5LCAoc3QpKQogI2RlZmluZSBza19JUEFkZHJlc3NGYW1pbHlfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKElQQWRkcmVzc0ZhbWlseSwgKHN0KSkKIAotI2RlZmluZSBza19JUEFkZHJlc3NPclJhbmdlX25ldyhzdCkgU0tNX3NrX25ldyhJUEFkZHJlc3NPclJhbmdlLCAoc3QpKQorI2RlZmluZSBza19JUEFkZHJlc3NPclJhbmdlX25ldyhjbXApIFNLTV9za19uZXcoSVBBZGRyZXNzT3JSYW5nZSwgKGNtcCkpCiAjZGVmaW5lIHNrX0lQQWRkcmVzc09yUmFuZ2VfbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoSVBBZGRyZXNzT3JSYW5nZSkKICNkZWZpbmUgc2tfSVBBZGRyZXNzT3JSYW5nZV9mcmVlKHN0KSBTS01fc2tfZnJlZShJUEFkZHJlc3NPclJhbmdlLCAoc3QpKQogI2RlZmluZSBza19JUEFkZHJlc3NPclJhbmdlX251bShzdCkgU0tNX3NrX251bShJUEFkZHJlc3NPclJhbmdlLCAoc3QpKQpAQCAtNzg4LDcgKzk1Miw3IEBACiAjZGVmaW5lIHNrX0lQQWRkcmVzc09yUmFuZ2Vfc29ydChzdCkgU0tNX3NrX3NvcnQoSVBBZGRyZXNzT3JSYW5nZSwgKHN0KSkKICNkZWZpbmUgc2tfSVBBZGRyZXNzT3JSYW5nZV9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoSVBBZGRyZXNzT3JSYW5nZSwgKHN0KSkKIAotI2RlZmluZSBza19LUkI1X0FQUkVRQk9EWV9uZXcoc3QpIFNLTV9za19uZXcoS1JCNV9BUFJFUUJPRFksIChzdCkpCisjZGVmaW5lIHNrX0tSQjVfQVBSRVFCT0RZX25ldyhjbXApIFNLTV9za19uZXcoS1JCNV9BUFJFUUJPRFksIChjbXApKQogI2RlZmluZSBza19LUkI1X0FQUkVRQk9EWV9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChLUkI1X0FQUkVRQk9EWSkKICNkZWZpbmUgc2tfS1JCNV9BUFJFUUJPRFlfZnJlZShzdCkgU0tNX3NrX2ZyZWUoS1JCNV9BUFJFUUJPRFksIChzdCkpCiAjZGVmaW5lIHNrX0tSQjVfQVBSRVFCT0RZX251bShzdCkgU0tNX3NrX251bShLUkI1X0FQUkVRQk9EWSwgKHN0KSkKQEAgLTgxMCw3ICs5NzQsNyBAQAogI2RlZmluZSBza19LUkI1X0FQUkVRQk9EWV9zb3J0KHN0KSBTS01fc2tfc29ydChLUkI1X0FQUkVRQk9EWSwgKHN0KSkKICNkZWZpbmUgc2tfS1JCNV9BUFJFUUJPRFlfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKEtSQjVfQVBSRVFCT0RZLCAoc3QpKQogCi0jZGVmaW5lIHNrX0tSQjVfQVVUSERBVEFfbmV3KHN0KSBTS01fc2tfbmV3KEtSQjVfQVVUSERBVEEsIChzdCkpCisjZGVmaW5lIHNrX0tSQjVfQVVUSERBVEFfbmV3KGNtcCkgU0tNX3NrX25ldyhLUkI1X0FVVEhEQVRBLCAoY21wKSkKICNkZWZpbmUgc2tfS1JCNV9BVVRIREFUQV9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChLUkI1X0FVVEhEQVRBKQogI2RlZmluZSBza19LUkI1X0FVVEhEQVRBX2ZyZWUoc3QpIFNLTV9za19mcmVlKEtSQjVfQVVUSERBVEEsIChzdCkpCiAjZGVmaW5lIHNrX0tSQjVfQVVUSERBVEFfbnVtKHN0KSBTS01fc2tfbnVtKEtSQjVfQVVUSERBVEEsIChzdCkpCkBAIC04MzIsNyArOTk2LDcgQEAKICNkZWZpbmUgc2tfS1JCNV9BVVRIREFUQV9zb3J0KHN0KSBTS01fc2tfc29ydChLUkI1X0FVVEhEQVRBLCAoc3QpKQogI2RlZmluZSBza19LUkI1X0FVVEhEQVRBX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChLUkI1X0FVVEhEQVRBLCAoc3QpKQogCi0jZGVmaW5lIHNrX0tSQjVfQVVUSEVOVEJPRFlfbmV3KHN0KSBTS01fc2tfbmV3KEtSQjVfQVVUSEVOVEJPRFksIChzdCkpCisjZGVmaW5lIHNrX0tSQjVfQVVUSEVOVEJPRFlfbmV3KGNtcCkgU0tNX3NrX25ldyhLUkI1X0FVVEhFTlRCT0RZLCAoY21wKSkKICNkZWZpbmUgc2tfS1JCNV9BVVRIRU5UQk9EWV9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChLUkI1X0FVVEhFTlRCT0RZKQogI2RlZmluZSBza19LUkI1X0FVVEhFTlRCT0RZX2ZyZWUoc3QpIFNLTV9za19mcmVlKEtSQjVfQVVUSEVOVEJPRFksIChzdCkpCiAjZGVmaW5lIHNrX0tSQjVfQVVUSEVOVEJPRFlfbnVtKHN0KSBTS01fc2tfbnVtKEtSQjVfQVVUSEVOVEJPRFksIChzdCkpCkBAIC04NTQsNyArMTAxOCw3IEBACiAjZGVmaW5lIHNrX0tSQjVfQVVUSEVOVEJPRFlfc29ydChzdCkgU0tNX3NrX3NvcnQoS1JCNV9BVVRIRU5UQk9EWSwgKHN0KSkKICNkZWZpbmUgc2tfS1JCNV9BVVRIRU5UQk9EWV9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoS1JCNV9BVVRIRU5UQk9EWSwgKHN0KSkKIAotI2RlZmluZSBza19LUkI1X0NIRUNLU1VNX25ldyhzdCkgU0tNX3NrX25ldyhLUkI1X0NIRUNLU1VNLCAoc3QpKQorI2RlZmluZSBza19LUkI1X0NIRUNLU1VNX25ldyhjbXApIFNLTV9za19uZXcoS1JCNV9DSEVDS1NVTSwgKGNtcCkpCiAjZGVmaW5lIHNrX0tSQjVfQ0hFQ0tTVU1fbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoS1JCNV9DSEVDS1NVTSkKICNkZWZpbmUgc2tfS1JCNV9DSEVDS1NVTV9mcmVlKHN0KSBTS01fc2tfZnJlZShLUkI1X0NIRUNLU1VNLCAoc3QpKQogI2RlZmluZSBza19LUkI1X0NIRUNLU1VNX251bShzdCkgU0tNX3NrX251bShLUkI1X0NIRUNLU1VNLCAoc3QpKQpAQCAtODc2LDcgKzEwNDAsNyBAQAogI2RlZmluZSBza19LUkI1X0NIRUNLU1VNX3NvcnQoc3QpIFNLTV9za19zb3J0KEtSQjVfQ0hFQ0tTVU0sIChzdCkpCiAjZGVmaW5lIHNrX0tSQjVfQ0hFQ0tTVU1faXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKEtSQjVfQ0hFQ0tTVU0sIChzdCkpCiAKLSNkZWZpbmUgc2tfS1JCNV9FTkNEQVRBX25ldyhzdCkgU0tNX3NrX25ldyhLUkI1X0VOQ0RBVEEsIChzdCkpCisjZGVmaW5lIHNrX0tSQjVfRU5DREFUQV9uZXcoY21wKSBTS01fc2tfbmV3KEtSQjVfRU5DREFUQSwgKGNtcCkpCiAjZGVmaW5lIHNrX0tSQjVfRU5DREFUQV9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChLUkI1X0VOQ0RBVEEpCiAjZGVmaW5lIHNrX0tSQjVfRU5DREFUQV9mcmVlKHN0KSBTS01fc2tfZnJlZShLUkI1X0VOQ0RBVEEsIChzdCkpCiAjZGVmaW5lIHNrX0tSQjVfRU5DREFUQV9udW0oc3QpIFNLTV9za19udW0oS1JCNV9FTkNEQVRBLCAoc3QpKQpAQCAtODk4LDcgKzEwNjIsNyBAQAogI2RlZmluZSBza19LUkI1X0VOQ0RBVEFfc29ydChzdCkgU0tNX3NrX3NvcnQoS1JCNV9FTkNEQVRBLCAoc3QpKQogI2RlZmluZSBza19LUkI1X0VOQ0RBVEFfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKEtSQjVfRU5DREFUQSwgKHN0KSkKIAotI2RlZmluZSBza19LUkI1X0VOQ0tFWV9uZXcoc3QpIFNLTV9za19uZXcoS1JCNV9FTkNLRVksIChzdCkpCisjZGVmaW5lIHNrX0tSQjVfRU5DS0VZX25ldyhjbXApIFNLTV9za19uZXcoS1JCNV9FTkNLRVksIChjbXApKQogI2RlZmluZSBza19LUkI1X0VOQ0tFWV9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChLUkI1X0VOQ0tFWSkKICNkZWZpbmUgc2tfS1JCNV9FTkNLRVlfZnJlZShzdCkgU0tNX3NrX2ZyZWUoS1JCNV9FTkNLRVksIChzdCkpCiAjZGVmaW5lIHNrX0tSQjVfRU5DS0VZX251bShzdCkgU0tNX3NrX251bShLUkI1X0VOQ0tFWSwgKHN0KSkKQEAgLTkyMCw3ICsxMDg0LDcgQEAKICNkZWZpbmUgc2tfS1JCNV9FTkNLRVlfc29ydChzdCkgU0tNX3NrX3NvcnQoS1JCNV9FTkNLRVksIChzdCkpCiAjZGVmaW5lIHNrX0tSQjVfRU5DS0VZX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChLUkI1X0VOQ0tFWSwgKHN0KSkKIAotI2RlZmluZSBza19LUkI1X1BSSU5DTkFNRV9uZXcoc3QpIFNLTV9za19uZXcoS1JCNV9QUklOQ05BTUUsIChzdCkpCisjZGVmaW5lIHNrX0tSQjVfUFJJTkNOQU1FX25ldyhjbXApIFNLTV9za19uZXcoS1JCNV9QUklOQ05BTUUsIChjbXApKQogI2RlZmluZSBza19LUkI1X1BSSU5DTkFNRV9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChLUkI1X1BSSU5DTkFNRSkKICNkZWZpbmUgc2tfS1JCNV9QUklOQ05BTUVfZnJlZShzdCkgU0tNX3NrX2ZyZWUoS1JCNV9QUklOQ05BTUUsIChzdCkpCiAjZGVmaW5lIHNrX0tSQjVfUFJJTkNOQU1FX251bShzdCkgU0tNX3NrX251bShLUkI1X1BSSU5DTkFNRSwgKHN0KSkKQEAgLTk0Miw3ICsxMTA2LDcgQEAKICNkZWZpbmUgc2tfS1JCNV9QUklOQ05BTUVfc29ydChzdCkgU0tNX3NrX3NvcnQoS1JCNV9QUklOQ05BTUUsIChzdCkpCiAjZGVmaW5lIHNrX0tSQjVfUFJJTkNOQU1FX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChLUkI1X1BSSU5DTkFNRSwgKHN0KSkKIAotI2RlZmluZSBza19LUkI1X1RLVEJPRFlfbmV3KHN0KSBTS01fc2tfbmV3KEtSQjVfVEtUQk9EWSwgKHN0KSkKKyNkZWZpbmUgc2tfS1JCNV9US1RCT0RZX25ldyhjbXApIFNLTV9za19uZXcoS1JCNV9US1RCT0RZLCAoY21wKSkKICNkZWZpbmUgc2tfS1JCNV9US1RCT0RZX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKEtSQjVfVEtUQk9EWSkKICNkZWZpbmUgc2tfS1JCNV9US1RCT0RZX2ZyZWUoc3QpIFNLTV9za19mcmVlKEtSQjVfVEtUQk9EWSwgKHN0KSkKICNkZWZpbmUgc2tfS1JCNV9US1RCT0RZX251bShzdCkgU0tNX3NrX251bShLUkI1X1RLVEJPRFksIChzdCkpCkBAIC05NjQsNyArMTEyOCwyOSBAQAogI2RlZmluZSBza19LUkI1X1RLVEJPRFlfc29ydChzdCkgU0tNX3NrX3NvcnQoS1JCNV9US1RCT0RZLCAoc3QpKQogI2RlZmluZSBza19LUkI1X1RLVEJPRFlfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKEtSQjVfVEtUQk9EWSwgKHN0KSkKIAotI2RlZmluZSBza19NSU1FX0hFQURFUl9uZXcoc3QpIFNLTV9za19uZXcoTUlNRV9IRUFERVIsIChzdCkpCisjZGVmaW5lIHNrX01FTV9PQkpFQ1RfREFUQV9uZXcoY21wKSBTS01fc2tfbmV3KE1FTV9PQkpFQ1RfREFUQSwgKGNtcCkpCisjZGVmaW5lIHNrX01FTV9PQkpFQ1RfREFUQV9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChNRU1fT0JKRUNUX0RBVEEpCisjZGVmaW5lIHNrX01FTV9PQkpFQ1RfREFUQV9mcmVlKHN0KSBTS01fc2tfZnJlZShNRU1fT0JKRUNUX0RBVEEsIChzdCkpCisjZGVmaW5lIHNrX01FTV9PQkpFQ1RfREFUQV9udW0oc3QpIFNLTV9za19udW0oTUVNX09CSkVDVF9EQVRBLCAoc3QpKQorI2RlZmluZSBza19NRU1fT0JKRUNUX0RBVEFfdmFsdWUoc3QsIGkpIFNLTV9za192YWx1ZShNRU1fT0JKRUNUX0RBVEEsIChzdCksIChpKSkKKyNkZWZpbmUgc2tfTUVNX09CSkVDVF9EQVRBX3NldChzdCwgaSwgdmFsKSBTS01fc2tfc2V0KE1FTV9PQkpFQ1RfREFUQSwgKHN0KSwgKGkpLCAodmFsKSkKKyNkZWZpbmUgc2tfTUVNX09CSkVDVF9EQVRBX3plcm8oc3QpIFNLTV9za196ZXJvKE1FTV9PQkpFQ1RfREFUQSwgKHN0KSkKKyNkZWZpbmUgc2tfTUVNX09CSkVDVF9EQVRBX3B1c2goc3QsIHZhbCkgU0tNX3NrX3B1c2goTUVNX09CSkVDVF9EQVRBLCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfTUVNX09CSkVDVF9EQVRBX3Vuc2hpZnQoc3QsIHZhbCkgU0tNX3NrX3Vuc2hpZnQoTUVNX09CSkVDVF9EQVRBLCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfTUVNX09CSkVDVF9EQVRBX2ZpbmQoc3QsIHZhbCkgU0tNX3NrX2ZpbmQoTUVNX09CSkVDVF9EQVRBLCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfTUVNX09CSkVDVF9EQVRBX2ZpbmRfZXgoc3QsIHZhbCkgU0tNX3NrX2ZpbmRfZXgoTUVNX09CSkVDVF9EQVRBLCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfTUVNX09CSkVDVF9EQVRBX2RlbGV0ZShzdCwgaSkgU0tNX3NrX2RlbGV0ZShNRU1fT0JKRUNUX0RBVEEsIChzdCksIChpKSkKKyNkZWZpbmUgc2tfTUVNX09CSkVDVF9EQVRBX2RlbGV0ZV9wdHIoc3QsIHB0cikgU0tNX3NrX2RlbGV0ZV9wdHIoTUVNX09CSkVDVF9EQVRBLCAoc3QpLCAocHRyKSkKKyNkZWZpbmUgc2tfTUVNX09CSkVDVF9EQVRBX2luc2VydChzdCwgdmFsLCBpKSBTS01fc2tfaW5zZXJ0KE1FTV9PQkpFQ1RfREFUQSwgKHN0KSwgKHZhbCksIChpKSkKKyNkZWZpbmUgc2tfTUVNX09CSkVDVF9EQVRBX3NldF9jbXBfZnVuYyhzdCwgY21wKSBTS01fc2tfc2V0X2NtcF9mdW5jKE1FTV9PQkpFQ1RfREFUQSwgKHN0KSwgKGNtcCkpCisjZGVmaW5lIHNrX01FTV9PQkpFQ1RfREFUQV9kdXAoc3QpIFNLTV9za19kdXAoTUVNX09CSkVDVF9EQVRBLCBzdCkKKyNkZWZpbmUgc2tfTUVNX09CSkVDVF9EQVRBX3BvcF9mcmVlKHN0LCBmcmVlX2Z1bmMpIFNLTV9za19wb3BfZnJlZShNRU1fT0JKRUNUX0RBVEEsIChzdCksIChmcmVlX2Z1bmMpKQorI2RlZmluZSBza19NRU1fT0JKRUNUX0RBVEFfc2hpZnQoc3QpIFNLTV9za19zaGlmdChNRU1fT0JKRUNUX0RBVEEsIChzdCkpCisjZGVmaW5lIHNrX01FTV9PQkpFQ1RfREFUQV9wb3Aoc3QpIFNLTV9za19wb3AoTUVNX09CSkVDVF9EQVRBLCAoc3QpKQorI2RlZmluZSBza19NRU1fT0JKRUNUX0RBVEFfc29ydChzdCkgU0tNX3NrX3NvcnQoTUVNX09CSkVDVF9EQVRBLCAoc3QpKQorI2RlZmluZSBza19NRU1fT0JKRUNUX0RBVEFfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKE1FTV9PQkpFQ1RfREFUQSwgKHN0KSkKKworI2RlZmluZSBza19NSU1FX0hFQURFUl9uZXcoY21wKSBTS01fc2tfbmV3KE1JTUVfSEVBREVSLCAoY21wKSkKICNkZWZpbmUgc2tfTUlNRV9IRUFERVJfbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoTUlNRV9IRUFERVIpCiAjZGVmaW5lIHNrX01JTUVfSEVBREVSX2ZyZWUoc3QpIFNLTV9za19mcmVlKE1JTUVfSEVBREVSLCAoc3QpKQogI2RlZmluZSBza19NSU1FX0hFQURFUl9udW0oc3QpIFNLTV9za19udW0oTUlNRV9IRUFERVIsIChzdCkpCkBAIC05ODYsNyArMTE3Miw3IEBACiAjZGVmaW5lIHNrX01JTUVfSEVBREVSX3NvcnQoc3QpIFNLTV9za19zb3J0KE1JTUVfSEVBREVSLCAoc3QpKQogI2RlZmluZSBza19NSU1FX0hFQURFUl9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoTUlNRV9IRUFERVIsIChzdCkpCiAKLSNkZWZpbmUgc2tfTUlNRV9QQVJBTV9uZXcoc3QpIFNLTV9za19uZXcoTUlNRV9QQVJBTSwgKHN0KSkKKyNkZWZpbmUgc2tfTUlNRV9QQVJBTV9uZXcoY21wKSBTS01fc2tfbmV3KE1JTUVfUEFSQU0sIChjbXApKQogI2RlZmluZSBza19NSU1FX1BBUkFNX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKE1JTUVfUEFSQU0pCiAjZGVmaW5lIHNrX01JTUVfUEFSQU1fZnJlZShzdCkgU0tNX3NrX2ZyZWUoTUlNRV9QQVJBTSwgKHN0KSkKICNkZWZpbmUgc2tfTUlNRV9QQVJBTV9udW0oc3QpIFNLTV9za19udW0oTUlNRV9QQVJBTSwgKHN0KSkKQEAgLTEwMDgsNyArMTE5NCw3IEBACiAjZGVmaW5lIHNrX01JTUVfUEFSQU1fc29ydChzdCkgU0tNX3NrX3NvcnQoTUlNRV9QQVJBTSwgKHN0KSkKICNkZWZpbmUgc2tfTUlNRV9QQVJBTV9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoTUlNRV9QQVJBTSwgKHN0KSkKIAotI2RlZmluZSBza19OQU1FX0ZVTkNTX25ldyhzdCkgU0tNX3NrX25ldyhOQU1FX0ZVTkNTLCAoc3QpKQorI2RlZmluZSBza19OQU1FX0ZVTkNTX25ldyhjbXApIFNLTV9za19uZXcoTkFNRV9GVU5DUywgKGNtcCkpCiAjZGVmaW5lIHNrX05BTUVfRlVOQ1NfbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoTkFNRV9GVU5DUykKICNkZWZpbmUgc2tfTkFNRV9GVU5DU19mcmVlKHN0KSBTS01fc2tfZnJlZShOQU1FX0ZVTkNTLCAoc3QpKQogI2RlZmluZSBza19OQU1FX0ZVTkNTX251bShzdCkgU0tNX3NrX251bShOQU1FX0ZVTkNTLCAoc3QpKQpAQCAtMTAzMCw3ICsxMjE2LDcgQEAKICNkZWZpbmUgc2tfTkFNRV9GVU5DU19zb3J0KHN0KSBTS01fc2tfc29ydChOQU1FX0ZVTkNTLCAoc3QpKQogI2RlZmluZSBza19OQU1FX0ZVTkNTX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChOQU1FX0ZVTkNTLCAoc3QpKQogCi0jZGVmaW5lIHNrX09DU1BfQ0VSVElEX25ldyhzdCkgU0tNX3NrX25ldyhPQ1NQX0NFUlRJRCwgKHN0KSkKKyNkZWZpbmUgc2tfT0NTUF9DRVJUSURfbmV3KGNtcCkgU0tNX3NrX25ldyhPQ1NQX0NFUlRJRCwgKGNtcCkpCiAjZGVmaW5lIHNrX09DU1BfQ0VSVElEX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKE9DU1BfQ0VSVElEKQogI2RlZmluZSBza19PQ1NQX0NFUlRJRF9mcmVlKHN0KSBTS01fc2tfZnJlZShPQ1NQX0NFUlRJRCwgKHN0KSkKICNkZWZpbmUgc2tfT0NTUF9DRVJUSURfbnVtKHN0KSBTS01fc2tfbnVtKE9DU1BfQ0VSVElELCAoc3QpKQpAQCAtMTA1Miw3ICsxMjM4LDcgQEAKICNkZWZpbmUgc2tfT0NTUF9DRVJUSURfc29ydChzdCkgU0tNX3NrX3NvcnQoT0NTUF9DRVJUSUQsIChzdCkpCiAjZGVmaW5lIHNrX09DU1BfQ0VSVElEX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChPQ1NQX0NFUlRJRCwgKHN0KSkKIAotI2RlZmluZSBza19PQ1NQX09ORVJFUV9uZXcoc3QpIFNLTV9za19uZXcoT0NTUF9PTkVSRVEsIChzdCkpCisjZGVmaW5lIHNrX09DU1BfT05FUkVRX25ldyhjbXApIFNLTV9za19uZXcoT0NTUF9PTkVSRVEsIChjbXApKQogI2RlZmluZSBza19PQ1NQX09ORVJFUV9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChPQ1NQX09ORVJFUSkKICNkZWZpbmUgc2tfT0NTUF9PTkVSRVFfZnJlZShzdCkgU0tNX3NrX2ZyZWUoT0NTUF9PTkVSRVEsIChzdCkpCiAjZGVmaW5lIHNrX09DU1BfT05FUkVRX251bShzdCkgU0tNX3NrX251bShPQ1NQX09ORVJFUSwgKHN0KSkKQEAgLTEwNzQsNyArMTI2MCw3IEBACiAjZGVmaW5lIHNrX09DU1BfT05FUkVRX3NvcnQoc3QpIFNLTV9za19zb3J0KE9DU1BfT05FUkVRLCAoc3QpKQogI2RlZmluZSBza19PQ1NQX09ORVJFUV9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoT0NTUF9PTkVSRVEsIChzdCkpCiAKLSNkZWZpbmUgc2tfT0NTUF9SRVNQSURfbmV3KHN0KSBTS01fc2tfbmV3KE9DU1BfUkVTUElELCAoc3QpKQorI2RlZmluZSBza19PQ1NQX1JFU1BJRF9uZXcoY21wKSBTS01fc2tfbmV3KE9DU1BfUkVTUElELCAoY21wKSkKICNkZWZpbmUgc2tfT0NTUF9SRVNQSURfbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoT0NTUF9SRVNQSUQpCiAjZGVmaW5lIHNrX09DU1BfUkVTUElEX2ZyZWUoc3QpIFNLTV9za19mcmVlKE9DU1BfUkVTUElELCAoc3QpKQogI2RlZmluZSBza19PQ1NQX1JFU1BJRF9udW0oc3QpIFNLTV9za19udW0oT0NTUF9SRVNQSUQsIChzdCkpCkBAIC0xMDk2LDcgKzEyODIsNyBAQAogI2RlZmluZSBza19PQ1NQX1JFU1BJRF9zb3J0KHN0KSBTS01fc2tfc29ydChPQ1NQX1JFU1BJRCwgKHN0KSkKICNkZWZpbmUgc2tfT0NTUF9SRVNQSURfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKE9DU1BfUkVTUElELCAoc3QpKQogCi0jZGVmaW5lIHNrX09DU1BfU0lOR0xFUkVTUF9uZXcoc3QpIFNLTV9za19uZXcoT0NTUF9TSU5HTEVSRVNQLCAoc3QpKQorI2RlZmluZSBza19PQ1NQX1NJTkdMRVJFU1BfbmV3KGNtcCkgU0tNX3NrX25ldyhPQ1NQX1NJTkdMRVJFU1AsIChjbXApKQogI2RlZmluZSBza19PQ1NQX1NJTkdMRVJFU1BfbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoT0NTUF9TSU5HTEVSRVNQKQogI2RlZmluZSBza19PQ1NQX1NJTkdMRVJFU1BfZnJlZShzdCkgU0tNX3NrX2ZyZWUoT0NTUF9TSU5HTEVSRVNQLCAoc3QpKQogI2RlZmluZSBza19PQ1NQX1NJTkdMRVJFU1BfbnVtKHN0KSBTS01fc2tfbnVtKE9DU1BfU0lOR0xFUkVTUCwgKHN0KSkKQEAgLTExMTgsNyArMTMwNCw3IEBACiAjZGVmaW5lIHNrX09DU1BfU0lOR0xFUkVTUF9zb3J0KHN0KSBTS01fc2tfc29ydChPQ1NQX1NJTkdMRVJFU1AsIChzdCkpCiAjZGVmaW5lIHNrX09DU1BfU0lOR0xFUkVTUF9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoT0NTUF9TSU5HTEVSRVNQLCAoc3QpKQogCi0jZGVmaW5lIHNrX1BLQ1MxMl9TQUZFQkFHX25ldyhzdCkgU0tNX3NrX25ldyhQS0NTMTJfU0FGRUJBRywgKHN0KSkKKyNkZWZpbmUgc2tfUEtDUzEyX1NBRkVCQUdfbmV3KGNtcCkgU0tNX3NrX25ldyhQS0NTMTJfU0FGRUJBRywgKGNtcCkpCiAjZGVmaW5lIHNrX1BLQ1MxMl9TQUZFQkFHX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKFBLQ1MxMl9TQUZFQkFHKQogI2RlZmluZSBza19QS0NTMTJfU0FGRUJBR19mcmVlKHN0KSBTS01fc2tfZnJlZShQS0NTMTJfU0FGRUJBRywgKHN0KSkKICNkZWZpbmUgc2tfUEtDUzEyX1NBRkVCQUdfbnVtKHN0KSBTS01fc2tfbnVtKFBLQ1MxMl9TQUZFQkFHLCAoc3QpKQpAQCAtMTE0MCw3ICsxMzI2LDcgQEAKICNkZWZpbmUgc2tfUEtDUzEyX1NBRkVCQUdfc29ydChzdCkgU0tNX3NrX3NvcnQoUEtDUzEyX1NBRkVCQUcsIChzdCkpCiAjZGVmaW5lIHNrX1BLQ1MxMl9TQUZFQkFHX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChQS0NTMTJfU0FGRUJBRywgKHN0KSkKIAotI2RlZmluZSBza19QS0NTN19uZXcoc3QpIFNLTV9za19uZXcoUEtDUzcsIChzdCkpCisjZGVmaW5lIHNrX1BLQ1M3X25ldyhjbXApIFNLTV9za19uZXcoUEtDUzcsIChjbXApKQogI2RlZmluZSBza19QS0NTN19uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChQS0NTNykKICNkZWZpbmUgc2tfUEtDUzdfZnJlZShzdCkgU0tNX3NrX2ZyZWUoUEtDUzcsIChzdCkpCiAjZGVmaW5lIHNrX1BLQ1M3X251bShzdCkgU0tNX3NrX251bShQS0NTNywgKHN0KSkKQEAgLTExNjIsNyArMTM0OCw3IEBACiAjZGVmaW5lIHNrX1BLQ1M3X3NvcnQoc3QpIFNLTV9za19zb3J0KFBLQ1M3LCAoc3QpKQogI2RlZmluZSBza19QS0NTN19pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoUEtDUzcsIChzdCkpCiAKLSNkZWZpbmUgc2tfUEtDUzdfUkVDSVBfSU5GT19uZXcoc3QpIFNLTV9za19uZXcoUEtDUzdfUkVDSVBfSU5GTywgKHN0KSkKKyNkZWZpbmUgc2tfUEtDUzdfUkVDSVBfSU5GT19uZXcoY21wKSBTS01fc2tfbmV3KFBLQ1M3X1JFQ0lQX0lORk8sIChjbXApKQogI2RlZmluZSBza19QS0NTN19SRUNJUF9JTkZPX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKFBLQ1M3X1JFQ0lQX0lORk8pCiAjZGVmaW5lIHNrX1BLQ1M3X1JFQ0lQX0lORk9fZnJlZShzdCkgU0tNX3NrX2ZyZWUoUEtDUzdfUkVDSVBfSU5GTywgKHN0KSkKICNkZWZpbmUgc2tfUEtDUzdfUkVDSVBfSU5GT19udW0oc3QpIFNLTV9za19udW0oUEtDUzdfUkVDSVBfSU5GTywgKHN0KSkKQEAgLTExODQsNyArMTM3MCw3IEBACiAjZGVmaW5lIHNrX1BLQ1M3X1JFQ0lQX0lORk9fc29ydChzdCkgU0tNX3NrX3NvcnQoUEtDUzdfUkVDSVBfSU5GTywgKHN0KSkKICNkZWZpbmUgc2tfUEtDUzdfUkVDSVBfSU5GT19pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoUEtDUzdfUkVDSVBfSU5GTywgKHN0KSkKIAotI2RlZmluZSBza19QS0NTN19TSUdORVJfSU5GT19uZXcoc3QpIFNLTV9za19uZXcoUEtDUzdfU0lHTkVSX0lORk8sIChzdCkpCisjZGVmaW5lIHNrX1BLQ1M3X1NJR05FUl9JTkZPX25ldyhjbXApIFNLTV9za19uZXcoUEtDUzdfU0lHTkVSX0lORk8sIChjbXApKQogI2RlZmluZSBza19QS0NTN19TSUdORVJfSU5GT19uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChQS0NTN19TSUdORVJfSU5GTykKICNkZWZpbmUgc2tfUEtDUzdfU0lHTkVSX0lORk9fZnJlZShzdCkgU0tNX3NrX2ZyZWUoUEtDUzdfU0lHTkVSX0lORk8sIChzdCkpCiAjZGVmaW5lIHNrX1BLQ1M3X1NJR05FUl9JTkZPX251bShzdCkgU0tNX3NrX251bShQS0NTN19TSUdORVJfSU5GTywgKHN0KSkKQEAgLTEyMDYsNyArMTM5Miw3IEBACiAjZGVmaW5lIHNrX1BLQ1M3X1NJR05FUl9JTkZPX3NvcnQoc3QpIFNLTV9za19zb3J0KFBLQ1M3X1NJR05FUl9JTkZPLCAoc3QpKQogI2RlZmluZSBza19QS0NTN19TSUdORVJfSU5GT19pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoUEtDUzdfU0lHTkVSX0lORk8sIChzdCkpCiAKLSNkZWZpbmUgc2tfUE9MSUNZSU5GT19uZXcoc3QpIFNLTV9za19uZXcoUE9MSUNZSU5GTywgKHN0KSkKKyNkZWZpbmUgc2tfUE9MSUNZSU5GT19uZXcoY21wKSBTS01fc2tfbmV3KFBPTElDWUlORk8sIChjbXApKQogI2RlZmluZSBza19QT0xJQ1lJTkZPX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKFBPTElDWUlORk8pCiAjZGVmaW5lIHNrX1BPTElDWUlORk9fZnJlZShzdCkgU0tNX3NrX2ZyZWUoUE9MSUNZSU5GTywgKHN0KSkKICNkZWZpbmUgc2tfUE9MSUNZSU5GT19udW0oc3QpIFNLTV9za19udW0oUE9MSUNZSU5GTywgKHN0KSkKQEAgLTEyMjgsNyArMTQxNCw3IEBACiAjZGVmaW5lIHNrX1BPTElDWUlORk9fc29ydChzdCkgU0tNX3NrX3NvcnQoUE9MSUNZSU5GTywgKHN0KSkKICNkZWZpbmUgc2tfUE9MSUNZSU5GT19pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoUE9MSUNZSU5GTywgKHN0KSkKIAotI2RlZmluZSBza19QT0xJQ1lRVUFMSU5GT19uZXcoc3QpIFNLTV9za19uZXcoUE9MSUNZUVVBTElORk8sIChzdCkpCisjZGVmaW5lIHNrX1BPTElDWVFVQUxJTkZPX25ldyhjbXApIFNLTV9za19uZXcoUE9MSUNZUVVBTElORk8sIChjbXApKQogI2RlZmluZSBza19QT0xJQ1lRVUFMSU5GT19uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChQT0xJQ1lRVUFMSU5GTykKICNkZWZpbmUgc2tfUE9MSUNZUVVBTElORk9fZnJlZShzdCkgU0tNX3NrX2ZyZWUoUE9MSUNZUVVBTElORk8sIChzdCkpCiAjZGVmaW5lIHNrX1BPTElDWVFVQUxJTkZPX251bShzdCkgU0tNX3NrX251bShQT0xJQ1lRVUFMSU5GTywgKHN0KSkKQEAgLTEyNTAsNyArMTQzNiw3IEBACiAjZGVmaW5lIHNrX1BPTElDWVFVQUxJTkZPX3NvcnQoc3QpIFNLTV9za19zb3J0KFBPTElDWVFVQUxJTkZPLCAoc3QpKQogI2RlZmluZSBza19QT0xJQ1lRVUFMSU5GT19pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoUE9MSUNZUVVBTElORk8sIChzdCkpCiAKLSNkZWZpbmUgc2tfUE9MSUNZX01BUFBJTkdfbmV3KHN0KSBTS01fc2tfbmV3KFBPTElDWV9NQVBQSU5HLCAoc3QpKQorI2RlZmluZSBza19QT0xJQ1lfTUFQUElOR19uZXcoY21wKSBTS01fc2tfbmV3KFBPTElDWV9NQVBQSU5HLCAoY21wKSkKICNkZWZpbmUgc2tfUE9MSUNZX01BUFBJTkdfbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoUE9MSUNZX01BUFBJTkcpCiAjZGVmaW5lIHNrX1BPTElDWV9NQVBQSU5HX2ZyZWUoc3QpIFNLTV9za19mcmVlKFBPTElDWV9NQVBQSU5HLCAoc3QpKQogI2RlZmluZSBza19QT0xJQ1lfTUFQUElOR19udW0oc3QpIFNLTV9za19udW0oUE9MSUNZX01BUFBJTkcsIChzdCkpCkBAIC0xMjcyLDcgKzE0NTgsNyBAQAogI2RlZmluZSBza19QT0xJQ1lfTUFQUElOR19zb3J0KHN0KSBTS01fc2tfc29ydChQT0xJQ1lfTUFQUElORywgKHN0KSkKICNkZWZpbmUgc2tfUE9MSUNZX01BUFBJTkdfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKFBPTElDWV9NQVBQSU5HLCAoc3QpKQogCi0jZGVmaW5lIHNrX1NTTF9DSVBIRVJfbmV3KHN0KSBTS01fc2tfbmV3KFNTTF9DSVBIRVIsIChzdCkpCisjZGVmaW5lIHNrX1NTTF9DSVBIRVJfbmV3KGNtcCkgU0tNX3NrX25ldyhTU0xfQ0lQSEVSLCAoY21wKSkKICNkZWZpbmUgc2tfU1NMX0NJUEhFUl9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChTU0xfQ0lQSEVSKQogI2RlZmluZSBza19TU0xfQ0lQSEVSX2ZyZWUoc3QpIFNLTV9za19mcmVlKFNTTF9DSVBIRVIsIChzdCkpCiAjZGVmaW5lIHNrX1NTTF9DSVBIRVJfbnVtKHN0KSBTS01fc2tfbnVtKFNTTF9DSVBIRVIsIChzdCkpCkBAIC0xMjk0LDcgKzE0ODAsNyBAQAogI2RlZmluZSBza19TU0xfQ0lQSEVSX3NvcnQoc3QpIFNLTV9za19zb3J0KFNTTF9DSVBIRVIsIChzdCkpCiAjZGVmaW5lIHNrX1NTTF9DSVBIRVJfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKFNTTF9DSVBIRVIsIChzdCkpCiAKLSNkZWZpbmUgc2tfU1NMX0NPTVBfbmV3KHN0KSBTS01fc2tfbmV3KFNTTF9DT01QLCAoc3QpKQorI2RlZmluZSBza19TU0xfQ09NUF9uZXcoY21wKSBTS01fc2tfbmV3KFNTTF9DT01QLCAoY21wKSkKICNkZWZpbmUgc2tfU1NMX0NPTVBfbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoU1NMX0NPTVApCiAjZGVmaW5lIHNrX1NTTF9DT01QX2ZyZWUoc3QpIFNLTV9za19mcmVlKFNTTF9DT01QLCAoc3QpKQogI2RlZmluZSBza19TU0xfQ09NUF9udW0oc3QpIFNLTV9za19udW0oU1NMX0NPTVAsIChzdCkpCkBAIC0xMzE2LDcgKzE1MDIsNTEgQEAKICNkZWZpbmUgc2tfU1NMX0NPTVBfc29ydChzdCkgU0tNX3NrX3NvcnQoU1NMX0NPTVAsIChzdCkpCiAjZGVmaW5lIHNrX1NTTF9DT01QX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChTU0xfQ09NUCwgKHN0KSkKIAotI2RlZmluZSBza19TVE9SRV9PQkpFQ1RfbmV3KHN0KSBTS01fc2tfbmV3KFNUT1JFX09CSkVDVCwgKHN0KSkKKyNkZWZpbmUgc2tfU1RBQ0tfT0ZfWDUwOV9OQU1FX0VOVFJZX25ldyhjbXApIFNLTV9za19uZXcoU1RBQ0tfT0ZfWDUwOV9OQU1FX0VOVFJZLCAoY21wKSkKKyNkZWZpbmUgc2tfU1RBQ0tfT0ZfWDUwOV9OQU1FX0VOVFJZX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKFNUQUNLX09GX1g1MDlfTkFNRV9FTlRSWSkKKyNkZWZpbmUgc2tfU1RBQ0tfT0ZfWDUwOV9OQU1FX0VOVFJZX2ZyZWUoc3QpIFNLTV9za19mcmVlKFNUQUNLX09GX1g1MDlfTkFNRV9FTlRSWSwgKHN0KSkKKyNkZWZpbmUgc2tfU1RBQ0tfT0ZfWDUwOV9OQU1FX0VOVFJZX251bShzdCkgU0tNX3NrX251bShTVEFDS19PRl9YNTA5X05BTUVfRU5UUlksIChzdCkpCisjZGVmaW5lIHNrX1NUQUNLX09GX1g1MDlfTkFNRV9FTlRSWV92YWx1ZShzdCwgaSkgU0tNX3NrX3ZhbHVlKFNUQUNLX09GX1g1MDlfTkFNRV9FTlRSWSwgKHN0KSwgKGkpKQorI2RlZmluZSBza19TVEFDS19PRl9YNTA5X05BTUVfRU5UUllfc2V0KHN0LCBpLCB2YWwpIFNLTV9za19zZXQoU1RBQ0tfT0ZfWDUwOV9OQU1FX0VOVFJZLCAoc3QpLCAoaSksICh2YWwpKQorI2RlZmluZSBza19TVEFDS19PRl9YNTA5X05BTUVfRU5UUllfemVybyhzdCkgU0tNX3NrX3plcm8oU1RBQ0tfT0ZfWDUwOV9OQU1FX0VOVFJZLCAoc3QpKQorI2RlZmluZSBza19TVEFDS19PRl9YNTA5X05BTUVfRU5UUllfcHVzaChzdCwgdmFsKSBTS01fc2tfcHVzaChTVEFDS19PRl9YNTA5X05BTUVfRU5UUlksIChzdCksICh2YWwpKQorI2RlZmluZSBza19TVEFDS19PRl9YNTA5X05BTUVfRU5UUllfdW5zaGlmdChzdCwgdmFsKSBTS01fc2tfdW5zaGlmdChTVEFDS19PRl9YNTA5X05BTUVfRU5UUlksIChzdCksICh2YWwpKQorI2RlZmluZSBza19TVEFDS19PRl9YNTA5X05BTUVfRU5UUllfZmluZChzdCwgdmFsKSBTS01fc2tfZmluZChTVEFDS19PRl9YNTA5X05BTUVfRU5UUlksIChzdCksICh2YWwpKQorI2RlZmluZSBza19TVEFDS19PRl9YNTA5X05BTUVfRU5UUllfZmluZF9leChzdCwgdmFsKSBTS01fc2tfZmluZF9leChTVEFDS19PRl9YNTA5X05BTUVfRU5UUlksIChzdCksICh2YWwpKQorI2RlZmluZSBza19TVEFDS19PRl9YNTA5X05BTUVfRU5UUllfZGVsZXRlKHN0LCBpKSBTS01fc2tfZGVsZXRlKFNUQUNLX09GX1g1MDlfTkFNRV9FTlRSWSwgKHN0KSwgKGkpKQorI2RlZmluZSBza19TVEFDS19PRl9YNTA5X05BTUVfRU5UUllfZGVsZXRlX3B0cihzdCwgcHRyKSBTS01fc2tfZGVsZXRlX3B0cihTVEFDS19PRl9YNTA5X05BTUVfRU5UUlksIChzdCksIChwdHIpKQorI2RlZmluZSBza19TVEFDS19PRl9YNTA5X05BTUVfRU5UUllfaW5zZXJ0KHN0LCB2YWwsIGkpIFNLTV9za19pbnNlcnQoU1RBQ0tfT0ZfWDUwOV9OQU1FX0VOVFJZLCAoc3QpLCAodmFsKSwgKGkpKQorI2RlZmluZSBza19TVEFDS19PRl9YNTA5X05BTUVfRU5UUllfc2V0X2NtcF9mdW5jKHN0LCBjbXApIFNLTV9za19zZXRfY21wX2Z1bmMoU1RBQ0tfT0ZfWDUwOV9OQU1FX0VOVFJZLCAoc3QpLCAoY21wKSkKKyNkZWZpbmUgc2tfU1RBQ0tfT0ZfWDUwOV9OQU1FX0VOVFJZX2R1cChzdCkgU0tNX3NrX2R1cChTVEFDS19PRl9YNTA5X05BTUVfRU5UUlksIHN0KQorI2RlZmluZSBza19TVEFDS19PRl9YNTA5X05BTUVfRU5UUllfcG9wX2ZyZWUoc3QsIGZyZWVfZnVuYykgU0tNX3NrX3BvcF9mcmVlKFNUQUNLX09GX1g1MDlfTkFNRV9FTlRSWSwgKHN0KSwgKGZyZWVfZnVuYykpCisjZGVmaW5lIHNrX1NUQUNLX09GX1g1MDlfTkFNRV9FTlRSWV9zaGlmdChzdCkgU0tNX3NrX3NoaWZ0KFNUQUNLX09GX1g1MDlfTkFNRV9FTlRSWSwgKHN0KSkKKyNkZWZpbmUgc2tfU1RBQ0tfT0ZfWDUwOV9OQU1FX0VOVFJZX3BvcChzdCkgU0tNX3NrX3BvcChTVEFDS19PRl9YNTA5X05BTUVfRU5UUlksIChzdCkpCisjZGVmaW5lIHNrX1NUQUNLX09GX1g1MDlfTkFNRV9FTlRSWV9zb3J0KHN0KSBTS01fc2tfc29ydChTVEFDS19PRl9YNTA5X05BTUVfRU5UUlksIChzdCkpCisjZGVmaW5lIHNrX1NUQUNLX09GX1g1MDlfTkFNRV9FTlRSWV9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoU1RBQ0tfT0ZfWDUwOV9OQU1FX0VOVFJZLCAoc3QpKQorCisjZGVmaW5lIHNrX1NUT1JFX0FUVFJfSU5GT19uZXcoY21wKSBTS01fc2tfbmV3KFNUT1JFX0FUVFJfSU5GTywgKGNtcCkpCisjZGVmaW5lIHNrX1NUT1JFX0FUVFJfSU5GT19uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChTVE9SRV9BVFRSX0lORk8pCisjZGVmaW5lIHNrX1NUT1JFX0FUVFJfSU5GT19mcmVlKHN0KSBTS01fc2tfZnJlZShTVE9SRV9BVFRSX0lORk8sIChzdCkpCisjZGVmaW5lIHNrX1NUT1JFX0FUVFJfSU5GT19udW0oc3QpIFNLTV9za19udW0oU1RPUkVfQVRUUl9JTkZPLCAoc3QpKQorI2RlZmluZSBza19TVE9SRV9BVFRSX0lORk9fdmFsdWUoc3QsIGkpIFNLTV9za192YWx1ZShTVE9SRV9BVFRSX0lORk8sIChzdCksIChpKSkKKyNkZWZpbmUgc2tfU1RPUkVfQVRUUl9JTkZPX3NldChzdCwgaSwgdmFsKSBTS01fc2tfc2V0KFNUT1JFX0FUVFJfSU5GTywgKHN0KSwgKGkpLCAodmFsKSkKKyNkZWZpbmUgc2tfU1RPUkVfQVRUUl9JTkZPX3plcm8oc3QpIFNLTV9za196ZXJvKFNUT1JFX0FUVFJfSU5GTywgKHN0KSkKKyNkZWZpbmUgc2tfU1RPUkVfQVRUUl9JTkZPX3B1c2goc3QsIHZhbCkgU0tNX3NrX3B1c2goU1RPUkVfQVRUUl9JTkZPLCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfU1RPUkVfQVRUUl9JTkZPX3Vuc2hpZnQoc3QsIHZhbCkgU0tNX3NrX3Vuc2hpZnQoU1RPUkVfQVRUUl9JTkZPLCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfU1RPUkVfQVRUUl9JTkZPX2ZpbmQoc3QsIHZhbCkgU0tNX3NrX2ZpbmQoU1RPUkVfQVRUUl9JTkZPLCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfU1RPUkVfQVRUUl9JTkZPX2ZpbmRfZXgoc3QsIHZhbCkgU0tNX3NrX2ZpbmRfZXgoU1RPUkVfQVRUUl9JTkZPLCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfU1RPUkVfQVRUUl9JTkZPX2RlbGV0ZShzdCwgaSkgU0tNX3NrX2RlbGV0ZShTVE9SRV9BVFRSX0lORk8sIChzdCksIChpKSkKKyNkZWZpbmUgc2tfU1RPUkVfQVRUUl9JTkZPX2RlbGV0ZV9wdHIoc3QsIHB0cikgU0tNX3NrX2RlbGV0ZV9wdHIoU1RPUkVfQVRUUl9JTkZPLCAoc3QpLCAocHRyKSkKKyNkZWZpbmUgc2tfU1RPUkVfQVRUUl9JTkZPX2luc2VydChzdCwgdmFsLCBpKSBTS01fc2tfaW5zZXJ0KFNUT1JFX0FUVFJfSU5GTywgKHN0KSwgKHZhbCksIChpKSkKKyNkZWZpbmUgc2tfU1RPUkVfQVRUUl9JTkZPX3NldF9jbXBfZnVuYyhzdCwgY21wKSBTS01fc2tfc2V0X2NtcF9mdW5jKFNUT1JFX0FUVFJfSU5GTywgKHN0KSwgKGNtcCkpCisjZGVmaW5lIHNrX1NUT1JFX0FUVFJfSU5GT19kdXAoc3QpIFNLTV9za19kdXAoU1RPUkVfQVRUUl9JTkZPLCBzdCkKKyNkZWZpbmUgc2tfU1RPUkVfQVRUUl9JTkZPX3BvcF9mcmVlKHN0LCBmcmVlX2Z1bmMpIFNLTV9za19wb3BfZnJlZShTVE9SRV9BVFRSX0lORk8sIChzdCksIChmcmVlX2Z1bmMpKQorI2RlZmluZSBza19TVE9SRV9BVFRSX0lORk9fc2hpZnQoc3QpIFNLTV9za19zaGlmdChTVE9SRV9BVFRSX0lORk8sIChzdCkpCisjZGVmaW5lIHNrX1NUT1JFX0FUVFJfSU5GT19wb3Aoc3QpIFNLTV9za19wb3AoU1RPUkVfQVRUUl9JTkZPLCAoc3QpKQorI2RlZmluZSBza19TVE9SRV9BVFRSX0lORk9fc29ydChzdCkgU0tNX3NrX3NvcnQoU1RPUkVfQVRUUl9JTkZPLCAoc3QpKQorI2RlZmluZSBza19TVE9SRV9BVFRSX0lORk9faXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKFNUT1JFX0FUVFJfSU5GTywgKHN0KSkKKworI2RlZmluZSBza19TVE9SRV9PQkpFQ1RfbmV3KGNtcCkgU0tNX3NrX25ldyhTVE9SRV9PQkpFQ1QsIChjbXApKQogI2RlZmluZSBza19TVE9SRV9PQkpFQ1RfbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoU1RPUkVfT0JKRUNUKQogI2RlZmluZSBza19TVE9SRV9PQkpFQ1RfZnJlZShzdCkgU0tNX3NrX2ZyZWUoU1RPUkVfT0JKRUNULCAoc3QpKQogI2RlZmluZSBza19TVE9SRV9PQkpFQ1RfbnVtKHN0KSBTS01fc2tfbnVtKFNUT1JFX09CSkVDVCwgKHN0KSkKQEAgLTEzMzgsNyArMTU2OCw3IEBACiAjZGVmaW5lIHNrX1NUT1JFX09CSkVDVF9zb3J0KHN0KSBTS01fc2tfc29ydChTVE9SRV9PQkpFQ1QsIChzdCkpCiAjZGVmaW5lIHNrX1NUT1JFX09CSkVDVF9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoU1RPUkVfT0JKRUNULCAoc3QpKQogCi0jZGVmaW5lIHNrX1NYTkVUSURfbmV3KHN0KSBTS01fc2tfbmV3KFNYTkVUSUQsIChzdCkpCisjZGVmaW5lIHNrX1NYTkVUSURfbmV3KGNtcCkgU0tNX3NrX25ldyhTWE5FVElELCAoY21wKSkKICNkZWZpbmUgc2tfU1hORVRJRF9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChTWE5FVElEKQogI2RlZmluZSBza19TWE5FVElEX2ZyZWUoc3QpIFNLTV9za19mcmVlKFNYTkVUSUQsIChzdCkpCiAjZGVmaW5lIHNrX1NYTkVUSURfbnVtKHN0KSBTS01fc2tfbnVtKFNYTkVUSUQsIChzdCkpCkBAIC0xMzYwLDcgKzE1OTAsNyBAQAogI2RlZmluZSBza19TWE5FVElEX3NvcnQoc3QpIFNLTV9za19zb3J0KFNYTkVUSUQsIChzdCkpCiAjZGVmaW5lIHNrX1NYTkVUSURfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKFNYTkVUSUQsIChzdCkpCiAKLSNkZWZpbmUgc2tfVUlfU1RSSU5HX25ldyhzdCkgU0tNX3NrX25ldyhVSV9TVFJJTkcsIChzdCkpCisjZGVmaW5lIHNrX1VJX1NUUklOR19uZXcoY21wKSBTS01fc2tfbmV3KFVJX1NUUklORywgKGNtcCkpCiAjZGVmaW5lIHNrX1VJX1NUUklOR19uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChVSV9TVFJJTkcpCiAjZGVmaW5lIHNrX1VJX1NUUklOR19mcmVlKHN0KSBTS01fc2tfZnJlZShVSV9TVFJJTkcsIChzdCkpCiAjZGVmaW5lIHNrX1VJX1NUUklOR19udW0oc3QpIFNLTV9za19udW0oVUlfU1RSSU5HLCAoc3QpKQpAQCAtMTM4Miw3ICsxNjEyLDcgQEAKICNkZWZpbmUgc2tfVUlfU1RSSU5HX3NvcnQoc3QpIFNLTV9za19zb3J0KFVJX1NUUklORywgKHN0KSkKICNkZWZpbmUgc2tfVUlfU1RSSU5HX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChVSV9TVFJJTkcsIChzdCkpCiAKLSNkZWZpbmUgc2tfWDUwOV9uZXcoc3QpIFNLTV9za19uZXcoWDUwOSwgKHN0KSkKKyNkZWZpbmUgc2tfWDUwOV9uZXcoY21wKSBTS01fc2tfbmV3KFg1MDksIChjbXApKQogI2RlZmluZSBza19YNTA5X25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKFg1MDkpCiAjZGVmaW5lIHNrX1g1MDlfZnJlZShzdCkgU0tNX3NrX2ZyZWUoWDUwOSwgKHN0KSkKICNkZWZpbmUgc2tfWDUwOV9udW0oc3QpIFNLTV9za19udW0oWDUwOSwgKHN0KSkKQEAgLTE0MDQsNyArMTYzNCw3IEBACiAjZGVmaW5lIHNrX1g1MDlfc29ydChzdCkgU0tNX3NrX3NvcnQoWDUwOSwgKHN0KSkKICNkZWZpbmUgc2tfWDUwOV9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoWDUwOSwgKHN0KSkKIAotI2RlZmluZSBza19YNTA5VjNfRVhUX01FVEhPRF9uZXcoc3QpIFNLTV9za19uZXcoWDUwOVYzX0VYVF9NRVRIT0QsIChzdCkpCisjZGVmaW5lIHNrX1g1MDlWM19FWFRfTUVUSE9EX25ldyhjbXApIFNLTV9za19uZXcoWDUwOVYzX0VYVF9NRVRIT0QsIChjbXApKQogI2RlZmluZSBza19YNTA5VjNfRVhUX01FVEhPRF9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChYNTA5VjNfRVhUX01FVEhPRCkKICNkZWZpbmUgc2tfWDUwOVYzX0VYVF9NRVRIT0RfZnJlZShzdCkgU0tNX3NrX2ZyZWUoWDUwOVYzX0VYVF9NRVRIT0QsIChzdCkpCiAjZGVmaW5lIHNrX1g1MDlWM19FWFRfTUVUSE9EX251bShzdCkgU0tNX3NrX251bShYNTA5VjNfRVhUX01FVEhPRCwgKHN0KSkKQEAgLTE0MjYsNyArMTY1Niw3IEBACiAjZGVmaW5lIHNrX1g1MDlWM19FWFRfTUVUSE9EX3NvcnQoc3QpIFNLTV9za19zb3J0KFg1MDlWM19FWFRfTUVUSE9ELCAoc3QpKQogI2RlZmluZSBza19YNTA5VjNfRVhUX01FVEhPRF9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoWDUwOVYzX0VYVF9NRVRIT0QsIChzdCkpCiAKLSNkZWZpbmUgc2tfWDUwOV9BTEdPUl9uZXcoc3QpIFNLTV9za19uZXcoWDUwOV9BTEdPUiwgKHN0KSkKKyNkZWZpbmUgc2tfWDUwOV9BTEdPUl9uZXcoY21wKSBTS01fc2tfbmV3KFg1MDlfQUxHT1IsIChjbXApKQogI2RlZmluZSBza19YNTA5X0FMR09SX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKFg1MDlfQUxHT1IpCiAjZGVmaW5lIHNrX1g1MDlfQUxHT1JfZnJlZShzdCkgU0tNX3NrX2ZyZWUoWDUwOV9BTEdPUiwgKHN0KSkKICNkZWZpbmUgc2tfWDUwOV9BTEdPUl9udW0oc3QpIFNLTV9za19udW0oWDUwOV9BTEdPUiwgKHN0KSkKQEAgLTE0NDgsNyArMTY3OCw3IEBACiAjZGVmaW5lIHNrX1g1MDlfQUxHT1Jfc29ydChzdCkgU0tNX3NrX3NvcnQoWDUwOV9BTEdPUiwgKHN0KSkKICNkZWZpbmUgc2tfWDUwOV9BTEdPUl9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoWDUwOV9BTEdPUiwgKHN0KSkKIAotI2RlZmluZSBza19YNTA5X0FUVFJJQlVURV9uZXcoc3QpIFNLTV9za19uZXcoWDUwOV9BVFRSSUJVVEUsIChzdCkpCisjZGVmaW5lIHNrX1g1MDlfQVRUUklCVVRFX25ldyhjbXApIFNLTV9za19uZXcoWDUwOV9BVFRSSUJVVEUsIChjbXApKQogI2RlZmluZSBza19YNTA5X0FUVFJJQlVURV9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChYNTA5X0FUVFJJQlVURSkKICNkZWZpbmUgc2tfWDUwOV9BVFRSSUJVVEVfZnJlZShzdCkgU0tNX3NrX2ZyZWUoWDUwOV9BVFRSSUJVVEUsIChzdCkpCiAjZGVmaW5lIHNrX1g1MDlfQVRUUklCVVRFX251bShzdCkgU0tNX3NrX251bShYNTA5X0FUVFJJQlVURSwgKHN0KSkKQEAgLTE0NzAsNyArMTcwMCw3IEBACiAjZGVmaW5lIHNrX1g1MDlfQVRUUklCVVRFX3NvcnQoc3QpIFNLTV9za19zb3J0KFg1MDlfQVRUUklCVVRFLCAoc3QpKQogI2RlZmluZSBza19YNTA5X0FUVFJJQlVURV9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoWDUwOV9BVFRSSUJVVEUsIChzdCkpCiAKLSNkZWZpbmUgc2tfWDUwOV9DUkxfbmV3KHN0KSBTS01fc2tfbmV3KFg1MDlfQ1JMLCAoc3QpKQorI2RlZmluZSBza19YNTA5X0NSTF9uZXcoY21wKSBTS01fc2tfbmV3KFg1MDlfQ1JMLCAoY21wKSkKICNkZWZpbmUgc2tfWDUwOV9DUkxfbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoWDUwOV9DUkwpCiAjZGVmaW5lIHNrX1g1MDlfQ1JMX2ZyZWUoc3QpIFNLTV9za19mcmVlKFg1MDlfQ1JMLCAoc3QpKQogI2RlZmluZSBza19YNTA5X0NSTF9udW0oc3QpIFNLTV9za19udW0oWDUwOV9DUkwsIChzdCkpCkBAIC0xNDkyLDcgKzE3MjIsNyBAQAogI2RlZmluZSBza19YNTA5X0NSTF9zb3J0KHN0KSBTS01fc2tfc29ydChYNTA5X0NSTCwgKHN0KSkKICNkZWZpbmUgc2tfWDUwOV9DUkxfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKFg1MDlfQ1JMLCAoc3QpKQogCi0jZGVmaW5lIHNrX1g1MDlfRVhURU5TSU9OX25ldyhzdCkgU0tNX3NrX25ldyhYNTA5X0VYVEVOU0lPTiwgKHN0KSkKKyNkZWZpbmUgc2tfWDUwOV9FWFRFTlNJT05fbmV3KGNtcCkgU0tNX3NrX25ldyhYNTA5X0VYVEVOU0lPTiwgKGNtcCkpCiAjZGVmaW5lIHNrX1g1MDlfRVhURU5TSU9OX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKFg1MDlfRVhURU5TSU9OKQogI2RlZmluZSBza19YNTA5X0VYVEVOU0lPTl9mcmVlKHN0KSBTS01fc2tfZnJlZShYNTA5X0VYVEVOU0lPTiwgKHN0KSkKICNkZWZpbmUgc2tfWDUwOV9FWFRFTlNJT05fbnVtKHN0KSBTS01fc2tfbnVtKFg1MDlfRVhURU5TSU9OLCAoc3QpKQpAQCAtMTUxNCw3ICsxNzQ0LDcgQEAKICNkZWZpbmUgc2tfWDUwOV9FWFRFTlNJT05fc29ydChzdCkgU0tNX3NrX3NvcnQoWDUwOV9FWFRFTlNJT04sIChzdCkpCiAjZGVmaW5lIHNrX1g1MDlfRVhURU5TSU9OX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChYNTA5X0VYVEVOU0lPTiwgKHN0KSkKIAotI2RlZmluZSBza19YNTA5X0lORk9fbmV3KHN0KSBTS01fc2tfbmV3KFg1MDlfSU5GTywgKHN0KSkKKyNkZWZpbmUgc2tfWDUwOV9JTkZPX25ldyhjbXApIFNLTV9za19uZXcoWDUwOV9JTkZPLCAoY21wKSkKICNkZWZpbmUgc2tfWDUwOV9JTkZPX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKFg1MDlfSU5GTykKICNkZWZpbmUgc2tfWDUwOV9JTkZPX2ZyZWUoc3QpIFNLTV9za19mcmVlKFg1MDlfSU5GTywgKHN0KSkKICNkZWZpbmUgc2tfWDUwOV9JTkZPX251bShzdCkgU0tNX3NrX251bShYNTA5X0lORk8sIChzdCkpCkBAIC0xNTM2LDcgKzE3NjYsNyBAQAogI2RlZmluZSBza19YNTA5X0lORk9fc29ydChzdCkgU0tNX3NrX3NvcnQoWDUwOV9JTkZPLCAoc3QpKQogI2RlZmluZSBza19YNTA5X0lORk9faXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKFg1MDlfSU5GTywgKHN0KSkKIAotI2RlZmluZSBza19YNTA5X0xPT0tVUF9uZXcoc3QpIFNLTV9za19uZXcoWDUwOV9MT09LVVAsIChzdCkpCisjZGVmaW5lIHNrX1g1MDlfTE9PS1VQX25ldyhjbXApIFNLTV9za19uZXcoWDUwOV9MT09LVVAsIChjbXApKQogI2RlZmluZSBza19YNTA5X0xPT0tVUF9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChYNTA5X0xPT0tVUCkKICNkZWZpbmUgc2tfWDUwOV9MT09LVVBfZnJlZShzdCkgU0tNX3NrX2ZyZWUoWDUwOV9MT09LVVAsIChzdCkpCiAjZGVmaW5lIHNrX1g1MDlfTE9PS1VQX251bShzdCkgU0tNX3NrX251bShYNTA5X0xPT0tVUCwgKHN0KSkKQEAgLTE1NTgsNyArMTc4OCw3IEBACiAjZGVmaW5lIHNrX1g1MDlfTE9PS1VQX3NvcnQoc3QpIFNLTV9za19zb3J0KFg1MDlfTE9PS1VQLCAoc3QpKQogI2RlZmluZSBza19YNTA5X0xPT0tVUF9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoWDUwOV9MT09LVVAsIChzdCkpCiAKLSNkZWZpbmUgc2tfWDUwOV9OQU1FX25ldyhzdCkgU0tNX3NrX25ldyhYNTA5X05BTUUsIChzdCkpCisjZGVmaW5lIHNrX1g1MDlfTkFNRV9uZXcoY21wKSBTS01fc2tfbmV3KFg1MDlfTkFNRSwgKGNtcCkpCiAjZGVmaW5lIHNrX1g1MDlfTkFNRV9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChYNTA5X05BTUUpCiAjZGVmaW5lIHNrX1g1MDlfTkFNRV9mcmVlKHN0KSBTS01fc2tfZnJlZShYNTA5X05BTUUsIChzdCkpCiAjZGVmaW5lIHNrX1g1MDlfTkFNRV9udW0oc3QpIFNLTV9za19udW0oWDUwOV9OQU1FLCAoc3QpKQpAQCAtMTU4MCw3ICsxODEwLDcgQEAKICNkZWZpbmUgc2tfWDUwOV9OQU1FX3NvcnQoc3QpIFNLTV9za19zb3J0KFg1MDlfTkFNRSwgKHN0KSkKICNkZWZpbmUgc2tfWDUwOV9OQU1FX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChYNTA5X05BTUUsIChzdCkpCiAKLSNkZWZpbmUgc2tfWDUwOV9OQU1FX0VOVFJZX25ldyhzdCkgU0tNX3NrX25ldyhYNTA5X05BTUVfRU5UUlksIChzdCkpCisjZGVmaW5lIHNrX1g1MDlfTkFNRV9FTlRSWV9uZXcoY21wKSBTS01fc2tfbmV3KFg1MDlfTkFNRV9FTlRSWSwgKGNtcCkpCiAjZGVmaW5lIHNrX1g1MDlfTkFNRV9FTlRSWV9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChYNTA5X05BTUVfRU5UUlkpCiAjZGVmaW5lIHNrX1g1MDlfTkFNRV9FTlRSWV9mcmVlKHN0KSBTS01fc2tfZnJlZShYNTA5X05BTUVfRU5UUlksIChzdCkpCiAjZGVmaW5lIHNrX1g1MDlfTkFNRV9FTlRSWV9udW0oc3QpIFNLTV9za19udW0oWDUwOV9OQU1FX0VOVFJZLCAoc3QpKQpAQCAtMTYwMiw3ICsxODMyLDcgQEAKICNkZWZpbmUgc2tfWDUwOV9OQU1FX0VOVFJZX3NvcnQoc3QpIFNLTV9za19zb3J0KFg1MDlfTkFNRV9FTlRSWSwgKHN0KSkKICNkZWZpbmUgc2tfWDUwOV9OQU1FX0VOVFJZX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChYNTA5X05BTUVfRU5UUlksIChzdCkpCiAKLSNkZWZpbmUgc2tfWDUwOV9PQkpFQ1RfbmV3KHN0KSBTS01fc2tfbmV3KFg1MDlfT0JKRUNULCAoc3QpKQorI2RlZmluZSBza19YNTA5X09CSkVDVF9uZXcoY21wKSBTS01fc2tfbmV3KFg1MDlfT0JKRUNULCAoY21wKSkKICNkZWZpbmUgc2tfWDUwOV9PQkpFQ1RfbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoWDUwOV9PQkpFQ1QpCiAjZGVmaW5lIHNrX1g1MDlfT0JKRUNUX2ZyZWUoc3QpIFNLTV9za19mcmVlKFg1MDlfT0JKRUNULCAoc3QpKQogI2RlZmluZSBza19YNTA5X09CSkVDVF9udW0oc3QpIFNLTV9za19udW0oWDUwOV9PQkpFQ1QsIChzdCkpCkBAIC0xNjI0LDcgKzE4NTQsNyBAQAogI2RlZmluZSBza19YNTA5X09CSkVDVF9zb3J0KHN0KSBTS01fc2tfc29ydChYNTA5X09CSkVDVCwgKHN0KSkKICNkZWZpbmUgc2tfWDUwOV9PQkpFQ1RfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKFg1MDlfT0JKRUNULCAoc3QpKQogCi0jZGVmaW5lIHNrX1g1MDlfUE9MSUNZX0RBVEFfbmV3KHN0KSBTS01fc2tfbmV3KFg1MDlfUE9MSUNZX0RBVEEsIChzdCkpCisjZGVmaW5lIHNrX1g1MDlfUE9MSUNZX0RBVEFfbmV3KGNtcCkgU0tNX3NrX25ldyhYNTA5X1BPTElDWV9EQVRBLCAoY21wKSkKICNkZWZpbmUgc2tfWDUwOV9QT0xJQ1lfREFUQV9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChYNTA5X1BPTElDWV9EQVRBKQogI2RlZmluZSBza19YNTA5X1BPTElDWV9EQVRBX2ZyZWUoc3QpIFNLTV9za19mcmVlKFg1MDlfUE9MSUNZX0RBVEEsIChzdCkpCiAjZGVmaW5lIHNrX1g1MDlfUE9MSUNZX0RBVEFfbnVtKHN0KSBTS01fc2tfbnVtKFg1MDlfUE9MSUNZX0RBVEEsIChzdCkpCkBAIC0xNjQ2LDcgKzE4NzYsNyBAQAogI2RlZmluZSBza19YNTA5X1BPTElDWV9EQVRBX3NvcnQoc3QpIFNLTV9za19zb3J0KFg1MDlfUE9MSUNZX0RBVEEsIChzdCkpCiAjZGVmaW5lIHNrX1g1MDlfUE9MSUNZX0RBVEFfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKFg1MDlfUE9MSUNZX0RBVEEsIChzdCkpCiAKLSNkZWZpbmUgc2tfWDUwOV9QT0xJQ1lfTk9ERV9uZXcoc3QpIFNLTV9za19uZXcoWDUwOV9QT0xJQ1lfTk9ERSwgKHN0KSkKKyNkZWZpbmUgc2tfWDUwOV9QT0xJQ1lfTk9ERV9uZXcoY21wKSBTS01fc2tfbmV3KFg1MDlfUE9MSUNZX05PREUsIChjbXApKQogI2RlZmluZSBza19YNTA5X1BPTElDWV9OT0RFX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKFg1MDlfUE9MSUNZX05PREUpCiAjZGVmaW5lIHNrX1g1MDlfUE9MSUNZX05PREVfZnJlZShzdCkgU0tNX3NrX2ZyZWUoWDUwOV9QT0xJQ1lfTk9ERSwgKHN0KSkKICNkZWZpbmUgc2tfWDUwOV9QT0xJQ1lfTk9ERV9udW0oc3QpIFNLTV9za19udW0oWDUwOV9QT0xJQ1lfTk9ERSwgKHN0KSkKQEAgLTE2NjgsMjkgKzE4OTgsNyBAQAogI2RlZmluZSBza19YNTA5X1BPTElDWV9OT0RFX3NvcnQoc3QpIFNLTV9za19zb3J0KFg1MDlfUE9MSUNZX05PREUsIChzdCkpCiAjZGVmaW5lIHNrX1g1MDlfUE9MSUNZX05PREVfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKFg1MDlfUE9MSUNZX05PREUsIChzdCkpCiAKLSNkZWZpbmUgc2tfWDUwOV9QT0xJQ1lfUkVGX25ldyhzdCkgU0tNX3NrX25ldyhYNTA5X1BPTElDWV9SRUYsIChzdCkpCi0jZGVmaW5lIHNrX1g1MDlfUE9MSUNZX1JFRl9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChYNTA5X1BPTElDWV9SRUYpCi0jZGVmaW5lIHNrX1g1MDlfUE9MSUNZX1JFRl9mcmVlKHN0KSBTS01fc2tfZnJlZShYNTA5X1BPTElDWV9SRUYsIChzdCkpCi0jZGVmaW5lIHNrX1g1MDlfUE9MSUNZX1JFRl9udW0oc3QpIFNLTV9za19udW0oWDUwOV9QT0xJQ1lfUkVGLCAoc3QpKQotI2RlZmluZSBza19YNTA5X1BPTElDWV9SRUZfdmFsdWUoc3QsIGkpIFNLTV9za192YWx1ZShYNTA5X1BPTElDWV9SRUYsIChzdCksIChpKSkKLSNkZWZpbmUgc2tfWDUwOV9QT0xJQ1lfUkVGX3NldChzdCwgaSwgdmFsKSBTS01fc2tfc2V0KFg1MDlfUE9MSUNZX1JFRiwgKHN0KSwgKGkpLCAodmFsKSkKLSNkZWZpbmUgc2tfWDUwOV9QT0xJQ1lfUkVGX3plcm8oc3QpIFNLTV9za196ZXJvKFg1MDlfUE9MSUNZX1JFRiwgKHN0KSkKLSNkZWZpbmUgc2tfWDUwOV9QT0xJQ1lfUkVGX3B1c2goc3QsIHZhbCkgU0tNX3NrX3B1c2goWDUwOV9QT0xJQ1lfUkVGLCAoc3QpLCAodmFsKSkKLSNkZWZpbmUgc2tfWDUwOV9QT0xJQ1lfUkVGX3Vuc2hpZnQoc3QsIHZhbCkgU0tNX3NrX3Vuc2hpZnQoWDUwOV9QT0xJQ1lfUkVGLCAoc3QpLCAodmFsKSkKLSNkZWZpbmUgc2tfWDUwOV9QT0xJQ1lfUkVGX2ZpbmQoc3QsIHZhbCkgU0tNX3NrX2ZpbmQoWDUwOV9QT0xJQ1lfUkVGLCAoc3QpLCAodmFsKSkKLSNkZWZpbmUgc2tfWDUwOV9QT0xJQ1lfUkVGX2ZpbmRfZXgoc3QsIHZhbCkgU0tNX3NrX2ZpbmRfZXgoWDUwOV9QT0xJQ1lfUkVGLCAoc3QpLCAodmFsKSkKLSNkZWZpbmUgc2tfWDUwOV9QT0xJQ1lfUkVGX2RlbGV0ZShzdCwgaSkgU0tNX3NrX2RlbGV0ZShYNTA5X1BPTElDWV9SRUYsIChzdCksIChpKSkKLSNkZWZpbmUgc2tfWDUwOV9QT0xJQ1lfUkVGX2RlbGV0ZV9wdHIoc3QsIHB0cikgU0tNX3NrX2RlbGV0ZV9wdHIoWDUwOV9QT0xJQ1lfUkVGLCAoc3QpLCAocHRyKSkKLSNkZWZpbmUgc2tfWDUwOV9QT0xJQ1lfUkVGX2luc2VydChzdCwgdmFsLCBpKSBTS01fc2tfaW5zZXJ0KFg1MDlfUE9MSUNZX1JFRiwgKHN0KSwgKHZhbCksIChpKSkKLSNkZWZpbmUgc2tfWDUwOV9QT0xJQ1lfUkVGX3NldF9jbXBfZnVuYyhzdCwgY21wKSBTS01fc2tfc2V0X2NtcF9mdW5jKFg1MDlfUE9MSUNZX1JFRiwgKHN0KSwgKGNtcCkpCi0jZGVmaW5lIHNrX1g1MDlfUE9MSUNZX1JFRl9kdXAoc3QpIFNLTV9za19kdXAoWDUwOV9QT0xJQ1lfUkVGLCBzdCkKLSNkZWZpbmUgc2tfWDUwOV9QT0xJQ1lfUkVGX3BvcF9mcmVlKHN0LCBmcmVlX2Z1bmMpIFNLTV9za19wb3BfZnJlZShYNTA5X1BPTElDWV9SRUYsIChzdCksIChmcmVlX2Z1bmMpKQotI2RlZmluZSBza19YNTA5X1BPTElDWV9SRUZfc2hpZnQoc3QpIFNLTV9za19zaGlmdChYNTA5X1BPTElDWV9SRUYsIChzdCkpCi0jZGVmaW5lIHNrX1g1MDlfUE9MSUNZX1JFRl9wb3Aoc3QpIFNLTV9za19wb3AoWDUwOV9QT0xJQ1lfUkVGLCAoc3QpKQotI2RlZmluZSBza19YNTA5X1BPTElDWV9SRUZfc29ydChzdCkgU0tNX3NrX3NvcnQoWDUwOV9QT0xJQ1lfUkVGLCAoc3QpKQotI2RlZmluZSBza19YNTA5X1BPTElDWV9SRUZfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKFg1MDlfUE9MSUNZX1JFRiwgKHN0KSkKLQotI2RlZmluZSBza19YNTA5X1BVUlBPU0VfbmV3KHN0KSBTS01fc2tfbmV3KFg1MDlfUFVSUE9TRSwgKHN0KSkKKyNkZWZpbmUgc2tfWDUwOV9QVVJQT1NFX25ldyhjbXApIFNLTV9za19uZXcoWDUwOV9QVVJQT1NFLCAoY21wKSkKICNkZWZpbmUgc2tfWDUwOV9QVVJQT1NFX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKFg1MDlfUFVSUE9TRSkKICNkZWZpbmUgc2tfWDUwOV9QVVJQT1NFX2ZyZWUoc3QpIFNLTV9za19mcmVlKFg1MDlfUFVSUE9TRSwgKHN0KSkKICNkZWZpbmUgc2tfWDUwOV9QVVJQT1NFX251bShzdCkgU0tNX3NrX251bShYNTA5X1BVUlBPU0UsIChzdCkpCkBAIC0xNzEyLDcgKzE5MjAsNyBAQAogI2RlZmluZSBza19YNTA5X1BVUlBPU0Vfc29ydChzdCkgU0tNX3NrX3NvcnQoWDUwOV9QVVJQT1NFLCAoc3QpKQogI2RlZmluZSBza19YNTA5X1BVUlBPU0VfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKFg1MDlfUFVSUE9TRSwgKHN0KSkKIAotI2RlZmluZSBza19YNTA5X1JFVk9LRURfbmV3KHN0KSBTS01fc2tfbmV3KFg1MDlfUkVWT0tFRCwgKHN0KSkKKyNkZWZpbmUgc2tfWDUwOV9SRVZPS0VEX25ldyhjbXApIFNLTV9za19uZXcoWDUwOV9SRVZPS0VELCAoY21wKSkKICNkZWZpbmUgc2tfWDUwOV9SRVZPS0VEX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKFg1MDlfUkVWT0tFRCkKICNkZWZpbmUgc2tfWDUwOV9SRVZPS0VEX2ZyZWUoc3QpIFNLTV9za19mcmVlKFg1MDlfUkVWT0tFRCwgKHN0KSkKICNkZWZpbmUgc2tfWDUwOV9SRVZPS0VEX251bShzdCkgU0tNX3NrX251bShYNTA5X1JFVk9LRUQsIChzdCkpCkBAIC0xNzM0LDcgKzE5NDIsNyBAQAogI2RlZmluZSBza19YNTA5X1JFVk9LRURfc29ydChzdCkgU0tNX3NrX3NvcnQoWDUwOV9SRVZPS0VELCAoc3QpKQogI2RlZmluZSBza19YNTA5X1JFVk9LRURfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKFg1MDlfUkVWT0tFRCwgKHN0KSkKIAotI2RlZmluZSBza19YNTA5X1RSVVNUX25ldyhzdCkgU0tNX3NrX25ldyhYNTA5X1RSVVNULCAoc3QpKQorI2RlZmluZSBza19YNTA5X1RSVVNUX25ldyhjbXApIFNLTV9za19uZXcoWDUwOV9UUlVTVCwgKGNtcCkpCiAjZGVmaW5lIHNrX1g1MDlfVFJVU1RfbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoWDUwOV9UUlVTVCkKICNkZWZpbmUgc2tfWDUwOV9UUlVTVF9mcmVlKHN0KSBTS01fc2tfZnJlZShYNTA5X1RSVVNULCAoc3QpKQogI2RlZmluZSBza19YNTA5X1RSVVNUX251bShzdCkgU0tNX3NrX251bShYNTA5X1RSVVNULCAoc3QpKQpAQCAtMTc1Niw3ICsxOTY0LDcgQEAKICNkZWZpbmUgc2tfWDUwOV9UUlVTVF9zb3J0KHN0KSBTS01fc2tfc29ydChYNTA5X1RSVVNULCAoc3QpKQogI2RlZmluZSBza19YNTA5X1RSVVNUX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChYNTA5X1RSVVNULCAoc3QpKQogCi0jZGVmaW5lIHNrX1g1MDlfVkVSSUZZX1BBUkFNX25ldyhzdCkgU0tNX3NrX25ldyhYNTA5X1ZFUklGWV9QQVJBTSwgKHN0KSkKKyNkZWZpbmUgc2tfWDUwOV9WRVJJRllfUEFSQU1fbmV3KGNtcCkgU0tNX3NrX25ldyhYNTA5X1ZFUklGWV9QQVJBTSwgKGNtcCkpCiAjZGVmaW5lIHNrX1g1MDlfVkVSSUZZX1BBUkFNX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKFg1MDlfVkVSSUZZX1BBUkFNKQogI2RlZmluZSBza19YNTA5X1ZFUklGWV9QQVJBTV9mcmVlKHN0KSBTS01fc2tfZnJlZShYNTA5X1ZFUklGWV9QQVJBTSwgKHN0KSkKICNkZWZpbmUgc2tfWDUwOV9WRVJJRllfUEFSQU1fbnVtKHN0KSBTS01fc2tfbnVtKFg1MDlfVkVSSUZZX1BBUkFNLCAoc3QpKQpAQCAtMTc3OCw2ICsxOTg2LDEyNSBAQAogI2RlZmluZSBza19YNTA5X1ZFUklGWV9QQVJBTV9zb3J0KHN0KSBTS01fc2tfc29ydChYNTA5X1ZFUklGWV9QQVJBTSwgKHN0KSkKICNkZWZpbmUgc2tfWDUwOV9WRVJJRllfUEFSQU1faXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKFg1MDlfVkVSSUZZX1BBUkFNLCAoc3QpKQogCisjZGVmaW5lIHNrX25pZF90cmlwbGVfbmV3KGNtcCkgU0tNX3NrX25ldyhuaWRfdHJpcGxlLCAoY21wKSkKKyNkZWZpbmUgc2tfbmlkX3RyaXBsZV9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChuaWRfdHJpcGxlKQorI2RlZmluZSBza19uaWRfdHJpcGxlX2ZyZWUoc3QpIFNLTV9za19mcmVlKG5pZF90cmlwbGUsIChzdCkpCisjZGVmaW5lIHNrX25pZF90cmlwbGVfbnVtKHN0KSBTS01fc2tfbnVtKG5pZF90cmlwbGUsIChzdCkpCisjZGVmaW5lIHNrX25pZF90cmlwbGVfdmFsdWUoc3QsIGkpIFNLTV9za192YWx1ZShuaWRfdHJpcGxlLCAoc3QpLCAoaSkpCisjZGVmaW5lIHNrX25pZF90cmlwbGVfc2V0KHN0LCBpLCB2YWwpIFNLTV9za19zZXQobmlkX3RyaXBsZSwgKHN0KSwgKGkpLCAodmFsKSkKKyNkZWZpbmUgc2tfbmlkX3RyaXBsZV96ZXJvKHN0KSBTS01fc2tfemVybyhuaWRfdHJpcGxlLCAoc3QpKQorI2RlZmluZSBza19uaWRfdHJpcGxlX3B1c2goc3QsIHZhbCkgU0tNX3NrX3B1c2gobmlkX3RyaXBsZSwgKHN0KSwgKHZhbCkpCisjZGVmaW5lIHNrX25pZF90cmlwbGVfdW5zaGlmdChzdCwgdmFsKSBTS01fc2tfdW5zaGlmdChuaWRfdHJpcGxlLCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfbmlkX3RyaXBsZV9maW5kKHN0LCB2YWwpIFNLTV9za19maW5kKG5pZF90cmlwbGUsIChzdCksICh2YWwpKQorI2RlZmluZSBza19uaWRfdHJpcGxlX2ZpbmRfZXgoc3QsIHZhbCkgU0tNX3NrX2ZpbmRfZXgobmlkX3RyaXBsZSwgKHN0KSwgKHZhbCkpCisjZGVmaW5lIHNrX25pZF90cmlwbGVfZGVsZXRlKHN0LCBpKSBTS01fc2tfZGVsZXRlKG5pZF90cmlwbGUsIChzdCksIChpKSkKKyNkZWZpbmUgc2tfbmlkX3RyaXBsZV9kZWxldGVfcHRyKHN0LCBwdHIpIFNLTV9za19kZWxldGVfcHRyKG5pZF90cmlwbGUsIChzdCksIChwdHIpKQorI2RlZmluZSBza19uaWRfdHJpcGxlX2luc2VydChzdCwgdmFsLCBpKSBTS01fc2tfaW5zZXJ0KG5pZF90cmlwbGUsIChzdCksICh2YWwpLCAoaSkpCisjZGVmaW5lIHNrX25pZF90cmlwbGVfc2V0X2NtcF9mdW5jKHN0LCBjbXApIFNLTV9za19zZXRfY21wX2Z1bmMobmlkX3RyaXBsZSwgKHN0KSwgKGNtcCkpCisjZGVmaW5lIHNrX25pZF90cmlwbGVfZHVwKHN0KSBTS01fc2tfZHVwKG5pZF90cmlwbGUsIHN0KQorI2RlZmluZSBza19uaWRfdHJpcGxlX3BvcF9mcmVlKHN0LCBmcmVlX2Z1bmMpIFNLTV9za19wb3BfZnJlZShuaWRfdHJpcGxlLCAoc3QpLCAoZnJlZV9mdW5jKSkKKyNkZWZpbmUgc2tfbmlkX3RyaXBsZV9zaGlmdChzdCkgU0tNX3NrX3NoaWZ0KG5pZF90cmlwbGUsIChzdCkpCisjZGVmaW5lIHNrX25pZF90cmlwbGVfcG9wKHN0KSBTS01fc2tfcG9wKG5pZF90cmlwbGUsIChzdCkpCisjZGVmaW5lIHNrX25pZF90cmlwbGVfc29ydChzdCkgU0tNX3NrX3NvcnQobmlkX3RyaXBsZSwgKHN0KSkKKyNkZWZpbmUgc2tfbmlkX3RyaXBsZV9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQobmlkX3RyaXBsZSwgKHN0KSkKKworI2RlZmluZSBza192b2lkX25ldyhjbXApIFNLTV9za19uZXcodm9pZCwgKGNtcCkpCisjZGVmaW5lIHNrX3ZvaWRfbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwodm9pZCkKKyNkZWZpbmUgc2tfdm9pZF9mcmVlKHN0KSBTS01fc2tfZnJlZSh2b2lkLCAoc3QpKQorI2RlZmluZSBza192b2lkX251bShzdCkgU0tNX3NrX251bSh2b2lkLCAoc3QpKQorI2RlZmluZSBza192b2lkX3ZhbHVlKHN0LCBpKSBTS01fc2tfdmFsdWUodm9pZCwgKHN0KSwgKGkpKQorI2RlZmluZSBza192b2lkX3NldChzdCwgaSwgdmFsKSBTS01fc2tfc2V0KHZvaWQsIChzdCksIChpKSwgKHZhbCkpCisjZGVmaW5lIHNrX3ZvaWRfemVybyhzdCkgU0tNX3NrX3plcm8odm9pZCwgKHN0KSkKKyNkZWZpbmUgc2tfdm9pZF9wdXNoKHN0LCB2YWwpIFNLTV9za19wdXNoKHZvaWQsIChzdCksICh2YWwpKQorI2RlZmluZSBza192b2lkX3Vuc2hpZnQoc3QsIHZhbCkgU0tNX3NrX3Vuc2hpZnQodm9pZCwgKHN0KSwgKHZhbCkpCisjZGVmaW5lIHNrX3ZvaWRfZmluZChzdCwgdmFsKSBTS01fc2tfZmluZCh2b2lkLCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfdm9pZF9maW5kX2V4KHN0LCB2YWwpIFNLTV9za19maW5kX2V4KHZvaWQsIChzdCksICh2YWwpKQorI2RlZmluZSBza192b2lkX2RlbGV0ZShzdCwgaSkgU0tNX3NrX2RlbGV0ZSh2b2lkLCAoc3QpLCAoaSkpCisjZGVmaW5lIHNrX3ZvaWRfZGVsZXRlX3B0cihzdCwgcHRyKSBTS01fc2tfZGVsZXRlX3B0cih2b2lkLCAoc3QpLCAocHRyKSkKKyNkZWZpbmUgc2tfdm9pZF9pbnNlcnQoc3QsIHZhbCwgaSkgU0tNX3NrX2luc2VydCh2b2lkLCAoc3QpLCAodmFsKSwgKGkpKQorI2RlZmluZSBza192b2lkX3NldF9jbXBfZnVuYyhzdCwgY21wKSBTS01fc2tfc2V0X2NtcF9mdW5jKHZvaWQsIChzdCksIChjbXApKQorI2RlZmluZSBza192b2lkX2R1cChzdCkgU0tNX3NrX2R1cCh2b2lkLCBzdCkKKyNkZWZpbmUgc2tfdm9pZF9wb3BfZnJlZShzdCwgZnJlZV9mdW5jKSBTS01fc2tfcG9wX2ZyZWUodm9pZCwgKHN0KSwgKGZyZWVfZnVuYykpCisjZGVmaW5lIHNrX3ZvaWRfc2hpZnQoc3QpIFNLTV9za19zaGlmdCh2b2lkLCAoc3QpKQorI2RlZmluZSBza192b2lkX3BvcChzdCkgU0tNX3NrX3BvcCh2b2lkLCAoc3QpKQorI2RlZmluZSBza192b2lkX3NvcnQoc3QpIFNLTV9za19zb3J0KHZvaWQsIChzdCkpCisjZGVmaW5lIHNrX3ZvaWRfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKHZvaWQsIChzdCkpCisKKyNkZWZpbmUgc2tfT1BFTlNTTF9CTE9DS19uZXcoY21wKSAoKFNUQUNLX09GKE9QRU5TU0xfQkxPQ0spICopc2tfbmV3KENIRUNLRURfU0tfQ01QX0ZVTkModm9pZCwgY21wKSkpCisjZGVmaW5lIHNrX09QRU5TU0xfQkxPQ0tfbmV3X251bGwoKSAoKFNUQUNLX09GKE9QRU5TU0xfQkxPQ0spICopc2tfbmV3X251bGwoKSkKKyNkZWZpbmUgc2tfT1BFTlNTTF9CTE9DS19wdXNoKHN0LCB2YWwpIHNrX3B1c2goQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoT1BFTlNTTF9CTE9DSyksIHN0KSwgQ0hFQ0tFRF9QVFJfT0Yodm9pZCwgdmFsKSkKKyNkZWZpbmUgc2tfT1BFTlNTTF9CTE9DS19maW5kKHN0LCB2YWwpIHNrX2ZpbmQoQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoT1BFTlNTTF9CTE9DSyksIHN0KSwgQ0hFQ0tFRF9QVFJfT0Yodm9pZCwgdmFsKSkKKyNkZWZpbmUgc2tfT1BFTlNTTF9CTE9DS192YWx1ZShzdCwgaSkgKChPUEVOU1NMX0JMT0NLKXNrX3ZhbHVlKENIRUNLRURfUFRSX09GKFNUQUNLX09GKE9QRU5TU0xfQkxPQ0spLCBzdCksIGkpKQorI2RlZmluZSBza19PUEVOU1NMX0JMT0NLX251bShzdCkgU0tNX3NrX251bShPUEVOU1NMX0JMT0NLLCBzdCkKKyNkZWZpbmUgc2tfT1BFTlNTTF9CTE9DS19wb3BfZnJlZShzdCwgZnJlZV9mdW5jKSBza19wb3BfZnJlZShDSEVDS0VEX1BUUl9PRihTVEFDS19PRihPUEVOU1NMX0JMT0NLKSwgc3QpLCBDSEVDS0VEX1NLX0ZSRUVfRlVOQzIoT1BFTlNTTF9CTE9DSywgZnJlZV9mdW5jKSkKKyNkZWZpbmUgc2tfT1BFTlNTTF9CTE9DS19pbnNlcnQoc3QsIHZhbCwgaSkgc2tfaW5zZXJ0KENIRUNLRURfUFRSX09GKFNUQUNLX09GKE9QRU5TU0xfQkxPQ0spLCBzdCksIENIRUNLRURfUFRSX09GKHZvaWQsIHZhbCksIGkpCisjZGVmaW5lIHNrX09QRU5TU0xfQkxPQ0tfZnJlZShzdCkgU0tNX3NrX2ZyZWUoT1BFTlNTTF9CTE9DSywgc3QpCisjZGVmaW5lIHNrX09QRU5TU0xfQkxPQ0tfc2V0KHN0LCBpLCB2YWwpIHNrX3NldCgoX1NUQUNLICopQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoT1BFTlNTTF9CTE9DSyksIHN0KSwgaSwgQ0hFQ0tFRF9QVFJfT0Yodm9pZCwgdmFsKSkKKyNkZWZpbmUgc2tfT1BFTlNTTF9CTE9DS196ZXJvKHN0KSBTS01fc2tfemVybyhPUEVOU1NMX0JMT0NLLCAoc3QpKQorI2RlZmluZSBza19PUEVOU1NMX0JMT0NLX3Vuc2hpZnQoc3QsIHZhbCkgc2tfdW5zaGlmdCgoX1NUQUNLICopQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoT1BFTlNTTF9CTE9DSyksIHN0KSwgQ0hFQ0tFRF9QVFJfT0Yodm9pZCwgdmFsKSkKKyNkZWZpbmUgc2tfT1BFTlNTTF9CTE9DS19maW5kX2V4KHN0LCB2YWwpIHNrX2ZpbmRfZXgoKF9TVEFDSyAqKUNIRUNLRURfQ09OU1RfUFRSX09GKFNUQUNLX09GKE9QRU5TU0xfQkxPQ0spLCBzdCksIENIRUNLRURfQ09OU1RfUFRSX09GKHZvaWQsIHZhbCkpCisjZGVmaW5lIHNrX09QRU5TU0xfQkxPQ0tfZGVsZXRlKHN0LCBpKSBTS01fc2tfZGVsZXRlKE9QRU5TU0xfQkxPQ0ssIChzdCksIChpKSkKKyNkZWZpbmUgc2tfT1BFTlNTTF9CTE9DS19kZWxldGVfcHRyKHN0LCBwdHIpIChPUEVOU1NMX0JMT0NLICopc2tfZGVsZXRlX3B0cigoX1NUQUNLICopQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoT1BFTlNTTF9CTE9DSyksIHN0KSwgQ0hFQ0tFRF9QVFJfT0Yodm9pZCwgcHRyKSkKKyNkZWZpbmUgc2tfT1BFTlNTTF9CTE9DS19zZXRfY21wX2Z1bmMoc3QsIGNtcCkgIFwKKwkoKGludCAoKikoY29uc3Qgdm9pZCAqIGNvbnN0ICosY29uc3Qgdm9pZCAqIGNvbnN0ICopKSBcCisJc2tfc2V0X2NtcF9mdW5jKChfU1RBQ0sgKilDSEVDS0VEX1BUUl9PRihTVEFDS19PRihPUEVOU1NMX0JMT0NLKSwgc3QpLCBDSEVDS0VEX1NLX0NNUF9GVU5DKHZvaWQsIGNtcCkpKQorI2RlZmluZSBza19PUEVOU1NMX0JMT0NLX2R1cChzdCkgU0tNX3NrX2R1cChPUEVOU1NMX0JMT0NLLCBzdCkKKyNkZWZpbmUgc2tfT1BFTlNTTF9CTE9DS19zaGlmdChzdCkgU0tNX3NrX3NoaWZ0KE9QRU5TU0xfQkxPQ0ssIChzdCkpCisjZGVmaW5lIHNrX09QRU5TU0xfQkxPQ0tfcG9wKHN0KSAodm9pZCAqKXNrX3BvcCgoX1NUQUNLICopQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoT1BFTlNTTF9CTE9DSyksIHN0KSkKKyNkZWZpbmUgc2tfT1BFTlNTTF9CTE9DS19zb3J0KHN0KSBTS01fc2tfc29ydChPUEVOU1NMX0JMT0NLLCAoc3QpKQorI2RlZmluZSBza19PUEVOU1NMX0JMT0NLX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChPUEVOU1NMX0JMT0NLLCAoc3QpKQorCisKKyNkZWZpbmUgc2tfT1BFTlNTTF9QU1RSSU5HX25ldyhjbXApICgoU1RBQ0tfT0YoT1BFTlNTTF9QU1RSSU5HKSAqKXNrX25ldyhDSEVDS0VEX1NLX0NNUF9GVU5DKE9QRU5TU0xfU1RSSU5HLCBjbXApKSkKKyNkZWZpbmUgc2tfT1BFTlNTTF9QU1RSSU5HX25ld19udWxsKCkgKChTVEFDS19PRihPUEVOU1NMX1BTVFJJTkcpICopc2tfbmV3X251bGwoKSkKKyNkZWZpbmUgc2tfT1BFTlNTTF9QU1RSSU5HX3B1c2goc3QsIHZhbCkgc2tfcHVzaChDSEVDS0VEX1BUUl9PRihTVEFDS19PRihPUEVOU1NMX1BTVFJJTkcpLCBzdCksIENIRUNLRURfUFRSX09GKE9QRU5TU0xfU1RSSU5HLCB2YWwpKQorI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfZmluZChzdCwgdmFsKSBza19maW5kKENIRUNLRURfUFRSX09GKFNUQUNLX09GKE9QRU5TU0xfUFNUUklORyksIHN0KSwgQ0hFQ0tFRF9QVFJfT0YoT1BFTlNTTF9TVFJJTkcsIHZhbCkpCisjZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR192YWx1ZShzdCwgaSkgKChPUEVOU1NMX1BTVFJJTkcpc2tfdmFsdWUoQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoT1BFTlNTTF9QU1RSSU5HKSwgc3QpLCBpKSkKKyNkZWZpbmUgc2tfT1BFTlNTTF9QU1RSSU5HX251bShzdCkgU0tNX3NrX251bShPUEVOU1NMX1BTVFJJTkcsIHN0KQorI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfcG9wX2ZyZWUoc3QsIGZyZWVfZnVuYykgc2tfcG9wX2ZyZWUoQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoT1BFTlNTTF9QU1RSSU5HKSwgc3QpLCBDSEVDS0VEX1NLX0ZSRUVfRlVOQzIoT1BFTlNTTF9QU1RSSU5HLCBmcmVlX2Z1bmMpKQorI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfaW5zZXJ0KHN0LCB2YWwsIGkpIHNrX2luc2VydChDSEVDS0VEX1BUUl9PRihTVEFDS19PRihPUEVOU1NMX1BTVFJJTkcpLCBzdCksIENIRUNLRURfUFRSX09GKE9QRU5TU0xfU1RSSU5HLCB2YWwpLCBpKQorI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfZnJlZShzdCkgU0tNX3NrX2ZyZWUoT1BFTlNTTF9QU1RSSU5HLCBzdCkKKyNkZWZpbmUgc2tfT1BFTlNTTF9QU1RSSU5HX3NldChzdCwgaSwgdmFsKSBza19zZXQoKF9TVEFDSyAqKUNIRUNLRURfUFRSX09GKFNUQUNLX09GKE9QRU5TU0xfUFNUUklORyksIHN0KSwgaSwgQ0hFQ0tFRF9QVFJfT0YoT1BFTlNTTF9TVFJJTkcsIHZhbCkpCisjZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR196ZXJvKHN0KSBTS01fc2tfemVybyhPUEVOU1NMX1BTVFJJTkcsIChzdCkpCisjZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR191bnNoaWZ0KHN0LCB2YWwpIHNrX3Vuc2hpZnQoKF9TVEFDSyAqKUNIRUNLRURfUFRSX09GKFNUQUNLX09GKE9QRU5TU0xfUFNUUklORyksIHN0KSwgQ0hFQ0tFRF9QVFJfT0YoT1BFTlNTTF9TVFJJTkcsIHZhbCkpCisjZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19maW5kX2V4KHN0LCB2YWwpIHNrX2ZpbmRfZXgoKF9TVEFDSyAqKUNIRUNLRURfQ09OU1RfUFRSX09GKFNUQUNLX09GKE9QRU5TU0xfUFNUUklORyksIHN0KSwgQ0hFQ0tFRF9DT05TVF9QVFJfT0YoT1BFTlNTTF9TVFJJTkcsIHZhbCkpCisjZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19kZWxldGUoc3QsIGkpIFNLTV9za19kZWxldGUoT1BFTlNTTF9QU1RSSU5HLCAoc3QpLCAoaSkpCisjZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19kZWxldGVfcHRyKHN0LCBwdHIpIChPUEVOU1NMX1BTVFJJTkcgKilza19kZWxldGVfcHRyKChfU1RBQ0sgKilDSEVDS0VEX1BUUl9PRihTVEFDS19PRihPUEVOU1NMX1BTVFJJTkcpLCBzdCksIENIRUNLRURfUFRSX09GKE9QRU5TU0xfU1RSSU5HLCBwdHIpKQorI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfc2V0X2NtcF9mdW5jKHN0LCBjbXApICBcCisJKChpbnQgKCopKGNvbnN0IE9QRU5TU0xfU1RSSU5HICogY29uc3QgKixjb25zdCBPUEVOU1NMX1NUUklORyAqIGNvbnN0ICopKSBcCisJc2tfc2V0X2NtcF9mdW5jKChfU1RBQ0sgKilDSEVDS0VEX1BUUl9PRihTVEFDS19PRihPUEVOU1NMX1BTVFJJTkcpLCBzdCksIENIRUNLRURfU0tfQ01QX0ZVTkMoT1BFTlNTTF9TVFJJTkcsIGNtcCkpKQorI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfZHVwKHN0KSBTS01fc2tfZHVwKE9QRU5TU0xfUFNUUklORywgc3QpCisjZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19zaGlmdChzdCkgU0tNX3NrX3NoaWZ0KE9QRU5TU0xfUFNUUklORywgKHN0KSkKKyNkZWZpbmUgc2tfT1BFTlNTTF9QU1RSSU5HX3BvcChzdCkgKE9QRU5TU0xfU1RSSU5HICopc2tfcG9wKChfU1RBQ0sgKilDSEVDS0VEX1BUUl9PRihTVEFDS19PRihPUEVOU1NMX1BTVFJJTkcpLCBzdCkpCisjZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19zb3J0KHN0KSBTS01fc2tfc29ydChPUEVOU1NMX1BTVFJJTkcsIChzdCkpCisjZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoT1BFTlNTTF9QU1RSSU5HLCAoc3QpKQorCisKKyNkZWZpbmUgc2tfT1BFTlNTTF9TVFJJTkdfbmV3KGNtcCkgKChTVEFDS19PRihPUEVOU1NMX1NUUklORykgKilza19uZXcoQ0hFQ0tFRF9TS19DTVBfRlVOQyhjaGFyLCBjbXApKSkKKyNkZWZpbmUgc2tfT1BFTlNTTF9TVFJJTkdfbmV3X251bGwoKSAoKFNUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSAqKXNrX25ld19udWxsKCkpCisjZGVmaW5lIHNrX09QRU5TU0xfU1RSSU5HX3B1c2goc3QsIHZhbCkgc2tfcHVzaChDSEVDS0VEX1BUUl9PRihTVEFDS19PRihPUEVOU1NMX1NUUklORyksIHN0KSwgQ0hFQ0tFRF9QVFJfT0YoY2hhciwgdmFsKSkKKyNkZWZpbmUgc2tfT1BFTlNTTF9TVFJJTkdfZmluZChzdCwgdmFsKSBza19maW5kKENIRUNLRURfUFRSX09GKFNUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSwgc3QpLCBDSEVDS0VEX1BUUl9PRihjaGFyLCB2YWwpKQorI2RlZmluZSBza19PUEVOU1NMX1NUUklOR192YWx1ZShzdCwgaSkgKChPUEVOU1NMX1NUUklORylza192YWx1ZShDSEVDS0VEX1BUUl9PRihTVEFDS19PRihPUEVOU1NMX1NUUklORyksIHN0KSwgaSkpCisjZGVmaW5lIHNrX09QRU5TU0xfU1RSSU5HX251bShzdCkgU0tNX3NrX251bShPUEVOU1NMX1NUUklORywgc3QpCisjZGVmaW5lIHNrX09QRU5TU0xfU1RSSU5HX3BvcF9mcmVlKHN0LCBmcmVlX2Z1bmMpIHNrX3BvcF9mcmVlKENIRUNLRURfUFRSX09GKFNUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSwgc3QpLCBDSEVDS0VEX1NLX0ZSRUVfRlVOQzIoT1BFTlNTTF9TVFJJTkcsIGZyZWVfZnVuYykpCisjZGVmaW5lIHNrX09QRU5TU0xfU1RSSU5HX2luc2VydChzdCwgdmFsLCBpKSBza19pbnNlcnQoQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpLCBzdCksIENIRUNLRURfUFRSX09GKGNoYXIsIHZhbCksIGkpCisjZGVmaW5lIHNrX09QRU5TU0xfU1RSSU5HX2ZyZWUoc3QpIFNLTV9za19mcmVlKE9QRU5TU0xfU1RSSU5HLCBzdCkKKyNkZWZpbmUgc2tfT1BFTlNTTF9TVFJJTkdfc2V0KHN0LCBpLCB2YWwpIHNrX3NldCgoX1NUQUNLICopQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpLCBzdCksIGksIENIRUNLRURfUFRSX09GKGNoYXIsIHZhbCkpCisjZGVmaW5lIHNrX09QRU5TU0xfU1RSSU5HX3plcm8oc3QpIFNLTV9za196ZXJvKE9QRU5TU0xfU1RSSU5HLCAoc3QpKQorI2RlZmluZSBza19PUEVOU1NMX1NUUklOR191bnNoaWZ0KHN0LCB2YWwpIHNrX3Vuc2hpZnQoKF9TVEFDSyAqKUNIRUNLRURfUFRSX09GKFNUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSwgc3QpLCBDSEVDS0VEX1BUUl9PRihjaGFyLCB2YWwpKQorI2RlZmluZSBza19PUEVOU1NMX1NUUklOR19maW5kX2V4KHN0LCB2YWwpIHNrX2ZpbmRfZXgoKF9TVEFDSyAqKUNIRUNLRURfQ09OU1RfUFRSX09GKFNUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSwgc3QpLCBDSEVDS0VEX0NPTlNUX1BUUl9PRihjaGFyLCB2YWwpKQorI2RlZmluZSBza19PUEVOU1NMX1NUUklOR19kZWxldGUoc3QsIGkpIFNLTV9za19kZWxldGUoT1BFTlNTTF9TVFJJTkcsIChzdCksIChpKSkKKyNkZWZpbmUgc2tfT1BFTlNTTF9TVFJJTkdfZGVsZXRlX3B0cihzdCwgcHRyKSAoT1BFTlNTTF9TVFJJTkcgKilza19kZWxldGVfcHRyKChfU1RBQ0sgKilDSEVDS0VEX1BUUl9PRihTVEFDS19PRihPUEVOU1NMX1NUUklORyksIHN0KSwgQ0hFQ0tFRF9QVFJfT0YoY2hhciwgcHRyKSkKKyNkZWZpbmUgc2tfT1BFTlNTTF9TVFJJTkdfc2V0X2NtcF9mdW5jKHN0LCBjbXApICBcCisJKChpbnQgKCopKGNvbnN0IGNoYXIgKiBjb25zdCAqLGNvbnN0IGNoYXIgKiBjb25zdCAqKSkgXAorCXNrX3NldF9jbXBfZnVuYygoX1NUQUNLICopQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpLCBzdCksIENIRUNLRURfU0tfQ01QX0ZVTkMoY2hhciwgY21wKSkpCisjZGVmaW5lIHNrX09QRU5TU0xfU1RSSU5HX2R1cChzdCkgU0tNX3NrX2R1cChPUEVOU1NMX1NUUklORywgc3QpCisjZGVmaW5lIHNrX09QRU5TU0xfU1RSSU5HX3NoaWZ0KHN0KSBTS01fc2tfc2hpZnQoT1BFTlNTTF9TVFJJTkcsIChzdCkpCisjZGVmaW5lIHNrX09QRU5TU0xfU1RSSU5HX3BvcChzdCkgKGNoYXIgKilza19wb3AoKF9TVEFDSyAqKUNIRUNLRURfUFRSX09GKFNUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSwgc3QpKQorI2RlZmluZSBza19PUEVOU1NMX1NUUklOR19zb3J0KHN0KSBTS01fc2tfc29ydChPUEVOU1NMX1NUUklORywgKHN0KSkKKyNkZWZpbmUgc2tfT1BFTlNTTF9TVFJJTkdfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKE9QRU5TU0xfU1RSSU5HLCAoc3QpKQorCisKICNkZWZpbmUgZDJpX0FTTjFfU0VUX09GX0FDQ0VTU19ERVNDUklQVElPTihzdCwgcHAsIGxlbmd0aCwgZDJpX2Z1bmMsIGZyZWVfZnVuYywgZXhfdGFnLCBleF9jbGFzcykgXAogCVNLTV9BU04xX1NFVF9PRl9kMmkoQUNDRVNTX0RFU0NSSVBUSU9OLCAoc3QpLCAocHApLCAobGVuZ3RoKSwgKGQyaV9mdW5jKSwgKGZyZWVfZnVuYyksIChleF90YWcpLCAoZXhfY2xhc3MpKSAKICNkZWZpbmUgaTJkX0FTTjFfU0VUX09GX0FDQ0VTU19ERVNDUklQVElPTihzdCwgcHAsIGkyZF9mdW5jLCBleF90YWcsIGV4X2NsYXNzLCBpc19zZXQpIFwKQEAgLTE4MTQsNiArMjE0MSwxNSBAQAogI2RlZmluZSBBU04xX3NlcV91bnBhY2tfQVNOMV9UWVBFKGJ1ZiwgbGVuLCBkMmlfZnVuYywgZnJlZV9mdW5jKSBcCiAJU0tNX0FTTjFfc2VxX3VucGFjayhBU04xX1RZUEUsIChidWYpLCAobGVuKSwgKGQyaV9mdW5jKSwgKGZyZWVfZnVuYykpCiAKKyNkZWZpbmUgZDJpX0FTTjFfU0VUX09GX0FTTjFfVVRGOFNUUklORyhzdCwgcHAsIGxlbmd0aCwgZDJpX2Z1bmMsIGZyZWVfZnVuYywgZXhfdGFnLCBleF9jbGFzcykgXAorCVNLTV9BU04xX1NFVF9PRl9kMmkoQVNOMV9VVEY4U1RSSU5HLCAoc3QpLCAocHApLCAobGVuZ3RoKSwgKGQyaV9mdW5jKSwgKGZyZWVfZnVuYyksIChleF90YWcpLCAoZXhfY2xhc3MpKSAKKyNkZWZpbmUgaTJkX0FTTjFfU0VUX09GX0FTTjFfVVRGOFNUUklORyhzdCwgcHAsIGkyZF9mdW5jLCBleF90YWcsIGV4X2NsYXNzLCBpc19zZXQpIFwKKwlTS01fQVNOMV9TRVRfT0ZfaTJkKEFTTjFfVVRGOFNUUklORywgKHN0KSwgKHBwKSwgKGkyZF9mdW5jKSwgKGV4X3RhZyksIChleF9jbGFzcyksIChpc19zZXQpKQorI2RlZmluZSBBU04xX3NlcV9wYWNrX0FTTjFfVVRGOFNUUklORyhzdCwgaTJkX2Z1bmMsIGJ1ZiwgbGVuKSBcCisJU0tNX0FTTjFfc2VxX3BhY2soQVNOMV9VVEY4U1RSSU5HLCAoc3QpLCAoaTJkX2Z1bmMpLCAoYnVmKSwgKGxlbikpCisjZGVmaW5lIEFTTjFfc2VxX3VucGFja19BU04xX1VURjhTVFJJTkcoYnVmLCBsZW4sIGQyaV9mdW5jLCBmcmVlX2Z1bmMpIFwKKwlTS01fQVNOMV9zZXFfdW5wYWNrKEFTTjFfVVRGOFNUUklORywgKGJ1ZiksIChsZW4pLCAoZDJpX2Z1bmMpLCAoZnJlZV9mdW5jKSkKKwogI2RlZmluZSBkMmlfQVNOMV9TRVRfT0ZfRElTVF9QT0lOVChzdCwgcHAsIGxlbmd0aCwgZDJpX2Z1bmMsIGZyZWVfZnVuYywgZXhfdGFnLCBleF9jbGFzcykgXAogCVNLTV9BU04xX1NFVF9PRl9kMmkoRElTVF9QT0lOVCwgKHN0KSwgKHBwKSwgKGxlbmd0aCksIChkMmlfZnVuYyksIChmcmVlX2Z1bmMpLCAoZXhfdGFnKSwgKGV4X2NsYXNzKSkgCiAjZGVmaW5lIGkyZF9BU04xX1NFVF9PRl9ESVNUX1BPSU5UKHN0LCBwcCwgaTJkX2Z1bmMsIGV4X3RhZywgZXhfY2xhc3MsIGlzX3NldCkgXApAQCAtMTgyMyw2ICsyMTU5LDI0IEBACiAjZGVmaW5lIEFTTjFfc2VxX3VucGFja19ESVNUX1BPSU5UKGJ1ZiwgbGVuLCBkMmlfZnVuYywgZnJlZV9mdW5jKSBcCiAJU0tNX0FTTjFfc2VxX3VucGFjayhESVNUX1BPSU5ULCAoYnVmKSwgKGxlbiksIChkMmlfZnVuYyksIChmcmVlX2Z1bmMpKQogCisjZGVmaW5lIGQyaV9BU04xX1NFVF9PRl9FU1NfQ0VSVF9JRChzdCwgcHAsIGxlbmd0aCwgZDJpX2Z1bmMsIGZyZWVfZnVuYywgZXhfdGFnLCBleF9jbGFzcykgXAorCVNLTV9BU04xX1NFVF9PRl9kMmkoRVNTX0NFUlRfSUQsIChzdCksIChwcCksIChsZW5ndGgpLCAoZDJpX2Z1bmMpLCAoZnJlZV9mdW5jKSwgKGV4X3RhZyksIChleF9jbGFzcykpIAorI2RlZmluZSBpMmRfQVNOMV9TRVRfT0ZfRVNTX0NFUlRfSUQoc3QsIHBwLCBpMmRfZnVuYywgZXhfdGFnLCBleF9jbGFzcywgaXNfc2V0KSBcCisJU0tNX0FTTjFfU0VUX09GX2kyZChFU1NfQ0VSVF9JRCwgKHN0KSwgKHBwKSwgKGkyZF9mdW5jKSwgKGV4X3RhZyksIChleF9jbGFzcyksIChpc19zZXQpKQorI2RlZmluZSBBU04xX3NlcV9wYWNrX0VTU19DRVJUX0lEKHN0LCBpMmRfZnVuYywgYnVmLCBsZW4pIFwKKwlTS01fQVNOMV9zZXFfcGFjayhFU1NfQ0VSVF9JRCwgKHN0KSwgKGkyZF9mdW5jKSwgKGJ1ZiksIChsZW4pKQorI2RlZmluZSBBU04xX3NlcV91bnBhY2tfRVNTX0NFUlRfSUQoYnVmLCBsZW4sIGQyaV9mdW5jLCBmcmVlX2Z1bmMpIFwKKwlTS01fQVNOMV9zZXFfdW5wYWNrKEVTU19DRVJUX0lELCAoYnVmKSwgKGxlbiksIChkMmlfZnVuYyksIChmcmVlX2Z1bmMpKQorCisjZGVmaW5lIGQyaV9BU04xX1NFVF9PRl9FVlBfTUQoc3QsIHBwLCBsZW5ndGgsIGQyaV9mdW5jLCBmcmVlX2Z1bmMsIGV4X3RhZywgZXhfY2xhc3MpIFwKKwlTS01fQVNOMV9TRVRfT0ZfZDJpKEVWUF9NRCwgKHN0KSwgKHBwKSwgKGxlbmd0aCksIChkMmlfZnVuYyksIChmcmVlX2Z1bmMpLCAoZXhfdGFnKSwgKGV4X2NsYXNzKSkgCisjZGVmaW5lIGkyZF9BU04xX1NFVF9PRl9FVlBfTUQoc3QsIHBwLCBpMmRfZnVuYywgZXhfdGFnLCBleF9jbGFzcywgaXNfc2V0KSBcCisJU0tNX0FTTjFfU0VUX09GX2kyZChFVlBfTUQsIChzdCksIChwcCksIChpMmRfZnVuYyksIChleF90YWcpLCAoZXhfY2xhc3MpLCAoaXNfc2V0KSkKKyNkZWZpbmUgQVNOMV9zZXFfcGFja19FVlBfTUQoc3QsIGkyZF9mdW5jLCBidWYsIGxlbikgXAorCVNLTV9BU04xX3NlcV9wYWNrKEVWUF9NRCwgKHN0KSwgKGkyZF9mdW5jKSwgKGJ1ZiksIChsZW4pKQorI2RlZmluZSBBU04xX3NlcV91bnBhY2tfRVZQX01EKGJ1ZiwgbGVuLCBkMmlfZnVuYywgZnJlZV9mdW5jKSBcCisJU0tNX0FTTjFfc2VxX3VucGFjayhFVlBfTUQsIChidWYpLCAobGVuKSwgKGQyaV9mdW5jKSwgKGZyZWVfZnVuYykpCisKICNkZWZpbmUgZDJpX0FTTjFfU0VUX09GX0dFTkVSQUxfTkFNRShzdCwgcHAsIGxlbmd0aCwgZDJpX2Z1bmMsIGZyZWVfZnVuYywgZXhfdGFnLCBleF9jbGFzcykgXAogCVNLTV9BU04xX1NFVF9PRl9kMmkoR0VORVJBTF9OQU1FLCAoc3QpLCAocHApLCAobGVuZ3RoKSwgKGQyaV9mdW5jKSwgKGZyZWVfZnVuYyksIChleF90YWcpLCAoZXhfY2xhc3MpKSAKICNkZWZpbmUgaTJkX0FTTjFfU0VUX09GX0dFTkVSQUxfTkFNRShzdCwgcHAsIGkyZF9mdW5jLCBleF90YWcsIGV4X2NsYXNzLCBpc19zZXQpIFwKQEAgLTE5ODEsNiArMjMzNSwyNDAgQEAKIAogI2RlZmluZSBQS0NTMTJfZGVjcnlwdF9kMmlfUEtDUzcoYWxnb3IsIGQyaV9mdW5jLCBmcmVlX2Z1bmMsIHBhc3MsIHBhc3NsZW4sIG9jdCwgc2VxKSBcCiAJU0tNX1BLQ1MxMl9kZWNyeXB0X2QyaShQS0NTNywgKGFsZ29yKSwgKGQyaV9mdW5jKSwgKGZyZWVfZnVuYyksIChwYXNzKSwgKHBhc3NsZW4pLCAob2N0KSwgKHNlcSkpCisKKyNkZWZpbmUgbGhfQURERURfT0JKX25ldygpIExITV9saF9uZXcoQURERURfT0JKLGFkZGVkX29iaikKKyNkZWZpbmUgbGhfQURERURfT0JKX2luc2VydChsaCxpbnN0KSBMSE1fbGhfaW5zZXJ0KEFEREVEX09CSixsaCxpbnN0KQorI2RlZmluZSBsaF9BRERFRF9PQkpfcmV0cmlldmUobGgsaW5zdCkgTEhNX2xoX3JldHJpZXZlKEFEREVEX09CSixsaCxpbnN0KQorI2RlZmluZSBsaF9BRERFRF9PQkpfZGVsZXRlKGxoLGluc3QpIExITV9saF9kZWxldGUoQURERURfT0JKLGxoLGluc3QpCisjZGVmaW5lIGxoX0FEREVEX09CSl9kb2FsbChsaCxmbikgTEhNX2xoX2RvYWxsKEFEREVEX09CSixsaCxmbikKKyNkZWZpbmUgbGhfQURERURfT0JKX2RvYWxsX2FyZyhsaCxmbixhcmdfdHlwZSxhcmcpIFwKKyAgTEhNX2xoX2RvYWxsX2FyZyhBRERFRF9PQkosbGgsZm4sYXJnX3R5cGUsYXJnKQorI2RlZmluZSBsaF9BRERFRF9PQkpfZXJyb3IobGgpIExITV9saF9lcnJvcihBRERFRF9PQkosbGgpCisjZGVmaW5lIGxoX0FEREVEX09CSl9udW1faXRlbXMobGgpIExITV9saF9udW1faXRlbXMoQURERURfT0JKLGxoKQorI2RlZmluZSBsaF9BRERFRF9PQkpfZG93bl9sb2FkKGxoKSBMSE1fbGhfZG93bl9sb2FkKEFEREVEX09CSixsaCkKKyNkZWZpbmUgbGhfQURERURfT0JKX25vZGVfc3RhdHNfYmlvKGxoLG91dCkgXAorICBMSE1fbGhfbm9kZV9zdGF0c19iaW8oQURERURfT0JKLGxoLG91dCkKKyNkZWZpbmUgbGhfQURERURfT0JKX25vZGVfdXNhZ2Vfc3RhdHNfYmlvKGxoLG91dCkgXAorICBMSE1fbGhfbm9kZV91c2FnZV9zdGF0c19iaW8oQURERURfT0JKLGxoLG91dCkKKyNkZWZpbmUgbGhfQURERURfT0JKX3N0YXRzX2JpbyhsaCxvdXQpIFwKKyAgTEhNX2xoX3N0YXRzX2JpbyhBRERFRF9PQkosbGgsb3V0KQorI2RlZmluZSBsaF9BRERFRF9PQkpfZnJlZShsaCkgTEhNX2xoX2ZyZWUoQURERURfT0JKLGxoKQorCisjZGVmaW5lIGxoX0FQUF9JTkZPX25ldygpIExITV9saF9uZXcoQVBQX0lORk8sYXBwX2luZm8pCisjZGVmaW5lIGxoX0FQUF9JTkZPX2luc2VydChsaCxpbnN0KSBMSE1fbGhfaW5zZXJ0KEFQUF9JTkZPLGxoLGluc3QpCisjZGVmaW5lIGxoX0FQUF9JTkZPX3JldHJpZXZlKGxoLGluc3QpIExITV9saF9yZXRyaWV2ZShBUFBfSU5GTyxsaCxpbnN0KQorI2RlZmluZSBsaF9BUFBfSU5GT19kZWxldGUobGgsaW5zdCkgTEhNX2xoX2RlbGV0ZShBUFBfSU5GTyxsaCxpbnN0KQorI2RlZmluZSBsaF9BUFBfSU5GT19kb2FsbChsaCxmbikgTEhNX2xoX2RvYWxsKEFQUF9JTkZPLGxoLGZuKQorI2RlZmluZSBsaF9BUFBfSU5GT19kb2FsbF9hcmcobGgsZm4sYXJnX3R5cGUsYXJnKSBcCisgIExITV9saF9kb2FsbF9hcmcoQVBQX0lORk8sbGgsZm4sYXJnX3R5cGUsYXJnKQorI2RlZmluZSBsaF9BUFBfSU5GT19lcnJvcihsaCkgTEhNX2xoX2Vycm9yKEFQUF9JTkZPLGxoKQorI2RlZmluZSBsaF9BUFBfSU5GT19udW1faXRlbXMobGgpIExITV9saF9udW1faXRlbXMoQVBQX0lORk8sbGgpCisjZGVmaW5lIGxoX0FQUF9JTkZPX2Rvd25fbG9hZChsaCkgTEhNX2xoX2Rvd25fbG9hZChBUFBfSU5GTyxsaCkKKyNkZWZpbmUgbGhfQVBQX0lORk9fbm9kZV9zdGF0c19iaW8obGgsb3V0KSBcCisgIExITV9saF9ub2RlX3N0YXRzX2JpbyhBUFBfSU5GTyxsaCxvdXQpCisjZGVmaW5lIGxoX0FQUF9JTkZPX25vZGVfdXNhZ2Vfc3RhdHNfYmlvKGxoLG91dCkgXAorICBMSE1fbGhfbm9kZV91c2FnZV9zdGF0c19iaW8oQVBQX0lORk8sbGgsb3V0KQorI2RlZmluZSBsaF9BUFBfSU5GT19zdGF0c19iaW8obGgsb3V0KSBcCisgIExITV9saF9zdGF0c19iaW8oQVBQX0lORk8sbGgsb3V0KQorI2RlZmluZSBsaF9BUFBfSU5GT19mcmVlKGxoKSBMSE1fbGhfZnJlZShBUFBfSU5GTyxsaCkKKworI2RlZmluZSBsaF9DT05GX1ZBTFVFX25ldygpIExITV9saF9uZXcoQ09ORl9WQUxVRSxjb25mX3ZhbHVlKQorI2RlZmluZSBsaF9DT05GX1ZBTFVFX2luc2VydChsaCxpbnN0KSBMSE1fbGhfaW5zZXJ0KENPTkZfVkFMVUUsbGgsaW5zdCkKKyNkZWZpbmUgbGhfQ09ORl9WQUxVRV9yZXRyaWV2ZShsaCxpbnN0KSBMSE1fbGhfcmV0cmlldmUoQ09ORl9WQUxVRSxsaCxpbnN0KQorI2RlZmluZSBsaF9DT05GX1ZBTFVFX2RlbGV0ZShsaCxpbnN0KSBMSE1fbGhfZGVsZXRlKENPTkZfVkFMVUUsbGgsaW5zdCkKKyNkZWZpbmUgbGhfQ09ORl9WQUxVRV9kb2FsbChsaCxmbikgTEhNX2xoX2RvYWxsKENPTkZfVkFMVUUsbGgsZm4pCisjZGVmaW5lIGxoX0NPTkZfVkFMVUVfZG9hbGxfYXJnKGxoLGZuLGFyZ190eXBlLGFyZykgXAorICBMSE1fbGhfZG9hbGxfYXJnKENPTkZfVkFMVUUsbGgsZm4sYXJnX3R5cGUsYXJnKQorI2RlZmluZSBsaF9DT05GX1ZBTFVFX2Vycm9yKGxoKSBMSE1fbGhfZXJyb3IoQ09ORl9WQUxVRSxsaCkKKyNkZWZpbmUgbGhfQ09ORl9WQUxVRV9udW1faXRlbXMobGgpIExITV9saF9udW1faXRlbXMoQ09ORl9WQUxVRSxsaCkKKyNkZWZpbmUgbGhfQ09ORl9WQUxVRV9kb3duX2xvYWQobGgpIExITV9saF9kb3duX2xvYWQoQ09ORl9WQUxVRSxsaCkKKyNkZWZpbmUgbGhfQ09ORl9WQUxVRV9ub2RlX3N0YXRzX2JpbyhsaCxvdXQpIFwKKyAgTEhNX2xoX25vZGVfc3RhdHNfYmlvKENPTkZfVkFMVUUsbGgsb3V0KQorI2RlZmluZSBsaF9DT05GX1ZBTFVFX25vZGVfdXNhZ2Vfc3RhdHNfYmlvKGxoLG91dCkgXAorICBMSE1fbGhfbm9kZV91c2FnZV9zdGF0c19iaW8oQ09ORl9WQUxVRSxsaCxvdXQpCisjZGVmaW5lIGxoX0NPTkZfVkFMVUVfc3RhdHNfYmlvKGxoLG91dCkgXAorICBMSE1fbGhfc3RhdHNfYmlvKENPTkZfVkFMVUUsbGgsb3V0KQorI2RlZmluZSBsaF9DT05GX1ZBTFVFX2ZyZWUobGgpIExITV9saF9mcmVlKENPTkZfVkFMVUUsbGgpCisKKyNkZWZpbmUgbGhfRU5HSU5FX1BJTEVfbmV3KCkgTEhNX2xoX25ldyhFTkdJTkVfUElMRSxlbmdpbmVfcGlsZSkKKyNkZWZpbmUgbGhfRU5HSU5FX1BJTEVfaW5zZXJ0KGxoLGluc3QpIExITV9saF9pbnNlcnQoRU5HSU5FX1BJTEUsbGgsaW5zdCkKKyNkZWZpbmUgbGhfRU5HSU5FX1BJTEVfcmV0cmlldmUobGgsaW5zdCkgTEhNX2xoX3JldHJpZXZlKEVOR0lORV9QSUxFLGxoLGluc3QpCisjZGVmaW5lIGxoX0VOR0lORV9QSUxFX2RlbGV0ZShsaCxpbnN0KSBMSE1fbGhfZGVsZXRlKEVOR0lORV9QSUxFLGxoLGluc3QpCisjZGVmaW5lIGxoX0VOR0lORV9QSUxFX2RvYWxsKGxoLGZuKSBMSE1fbGhfZG9hbGwoRU5HSU5FX1BJTEUsbGgsZm4pCisjZGVmaW5lIGxoX0VOR0lORV9QSUxFX2RvYWxsX2FyZyhsaCxmbixhcmdfdHlwZSxhcmcpIFwKKyAgTEhNX2xoX2RvYWxsX2FyZyhFTkdJTkVfUElMRSxsaCxmbixhcmdfdHlwZSxhcmcpCisjZGVmaW5lIGxoX0VOR0lORV9QSUxFX2Vycm9yKGxoKSBMSE1fbGhfZXJyb3IoRU5HSU5FX1BJTEUsbGgpCisjZGVmaW5lIGxoX0VOR0lORV9QSUxFX251bV9pdGVtcyhsaCkgTEhNX2xoX251bV9pdGVtcyhFTkdJTkVfUElMRSxsaCkKKyNkZWZpbmUgbGhfRU5HSU5FX1BJTEVfZG93bl9sb2FkKGxoKSBMSE1fbGhfZG93bl9sb2FkKEVOR0lORV9QSUxFLGxoKQorI2RlZmluZSBsaF9FTkdJTkVfUElMRV9ub2RlX3N0YXRzX2JpbyhsaCxvdXQpIFwKKyAgTEhNX2xoX25vZGVfc3RhdHNfYmlvKEVOR0lORV9QSUxFLGxoLG91dCkKKyNkZWZpbmUgbGhfRU5HSU5FX1BJTEVfbm9kZV91c2FnZV9zdGF0c19iaW8obGgsb3V0KSBcCisgIExITV9saF9ub2RlX3VzYWdlX3N0YXRzX2JpbyhFTkdJTkVfUElMRSxsaCxvdXQpCisjZGVmaW5lIGxoX0VOR0lORV9QSUxFX3N0YXRzX2JpbyhsaCxvdXQpIFwKKyAgTEhNX2xoX3N0YXRzX2JpbyhFTkdJTkVfUElMRSxsaCxvdXQpCisjZGVmaW5lIGxoX0VOR0lORV9QSUxFX2ZyZWUobGgpIExITV9saF9mcmVlKEVOR0lORV9QSUxFLGxoKQorCisjZGVmaW5lIGxoX0VSUl9TVEFURV9uZXcoKSBMSE1fbGhfbmV3KEVSUl9TVEFURSxlcnJfc3RhdGUpCisjZGVmaW5lIGxoX0VSUl9TVEFURV9pbnNlcnQobGgsaW5zdCkgTEhNX2xoX2luc2VydChFUlJfU1RBVEUsbGgsaW5zdCkKKyNkZWZpbmUgbGhfRVJSX1NUQVRFX3JldHJpZXZlKGxoLGluc3QpIExITV9saF9yZXRyaWV2ZShFUlJfU1RBVEUsbGgsaW5zdCkKKyNkZWZpbmUgbGhfRVJSX1NUQVRFX2RlbGV0ZShsaCxpbnN0KSBMSE1fbGhfZGVsZXRlKEVSUl9TVEFURSxsaCxpbnN0KQorI2RlZmluZSBsaF9FUlJfU1RBVEVfZG9hbGwobGgsZm4pIExITV9saF9kb2FsbChFUlJfU1RBVEUsbGgsZm4pCisjZGVmaW5lIGxoX0VSUl9TVEFURV9kb2FsbF9hcmcobGgsZm4sYXJnX3R5cGUsYXJnKSBcCisgIExITV9saF9kb2FsbF9hcmcoRVJSX1NUQVRFLGxoLGZuLGFyZ190eXBlLGFyZykKKyNkZWZpbmUgbGhfRVJSX1NUQVRFX2Vycm9yKGxoKSBMSE1fbGhfZXJyb3IoRVJSX1NUQVRFLGxoKQorI2RlZmluZSBsaF9FUlJfU1RBVEVfbnVtX2l0ZW1zKGxoKSBMSE1fbGhfbnVtX2l0ZW1zKEVSUl9TVEFURSxsaCkKKyNkZWZpbmUgbGhfRVJSX1NUQVRFX2Rvd25fbG9hZChsaCkgTEhNX2xoX2Rvd25fbG9hZChFUlJfU1RBVEUsbGgpCisjZGVmaW5lIGxoX0VSUl9TVEFURV9ub2RlX3N0YXRzX2JpbyhsaCxvdXQpIFwKKyAgTEhNX2xoX25vZGVfc3RhdHNfYmlvKEVSUl9TVEFURSxsaCxvdXQpCisjZGVmaW5lIGxoX0VSUl9TVEFURV9ub2RlX3VzYWdlX3N0YXRzX2JpbyhsaCxvdXQpIFwKKyAgTEhNX2xoX25vZGVfdXNhZ2Vfc3RhdHNfYmlvKEVSUl9TVEFURSxsaCxvdXQpCisjZGVmaW5lIGxoX0VSUl9TVEFURV9zdGF0c19iaW8obGgsb3V0KSBcCisgIExITV9saF9zdGF0c19iaW8oRVJSX1NUQVRFLGxoLG91dCkKKyNkZWZpbmUgbGhfRVJSX1NUQVRFX2ZyZWUobGgpIExITV9saF9mcmVlKEVSUl9TVEFURSxsaCkKKworI2RlZmluZSBsaF9FUlJfU1RSSU5HX0RBVEFfbmV3KCkgTEhNX2xoX25ldyhFUlJfU1RSSU5HX0RBVEEsZXJyX3N0cmluZ19kYXRhKQorI2RlZmluZSBsaF9FUlJfU1RSSU5HX0RBVEFfaW5zZXJ0KGxoLGluc3QpIExITV9saF9pbnNlcnQoRVJSX1NUUklOR19EQVRBLGxoLGluc3QpCisjZGVmaW5lIGxoX0VSUl9TVFJJTkdfREFUQV9yZXRyaWV2ZShsaCxpbnN0KSBMSE1fbGhfcmV0cmlldmUoRVJSX1NUUklOR19EQVRBLGxoLGluc3QpCisjZGVmaW5lIGxoX0VSUl9TVFJJTkdfREFUQV9kZWxldGUobGgsaW5zdCkgTEhNX2xoX2RlbGV0ZShFUlJfU1RSSU5HX0RBVEEsbGgsaW5zdCkKKyNkZWZpbmUgbGhfRVJSX1NUUklOR19EQVRBX2RvYWxsKGxoLGZuKSBMSE1fbGhfZG9hbGwoRVJSX1NUUklOR19EQVRBLGxoLGZuKQorI2RlZmluZSBsaF9FUlJfU1RSSU5HX0RBVEFfZG9hbGxfYXJnKGxoLGZuLGFyZ190eXBlLGFyZykgXAorICBMSE1fbGhfZG9hbGxfYXJnKEVSUl9TVFJJTkdfREFUQSxsaCxmbixhcmdfdHlwZSxhcmcpCisjZGVmaW5lIGxoX0VSUl9TVFJJTkdfREFUQV9lcnJvcihsaCkgTEhNX2xoX2Vycm9yKEVSUl9TVFJJTkdfREFUQSxsaCkKKyNkZWZpbmUgbGhfRVJSX1NUUklOR19EQVRBX251bV9pdGVtcyhsaCkgTEhNX2xoX251bV9pdGVtcyhFUlJfU1RSSU5HX0RBVEEsbGgpCisjZGVmaW5lIGxoX0VSUl9TVFJJTkdfREFUQV9kb3duX2xvYWQobGgpIExITV9saF9kb3duX2xvYWQoRVJSX1NUUklOR19EQVRBLGxoKQorI2RlZmluZSBsaF9FUlJfU1RSSU5HX0RBVEFfbm9kZV9zdGF0c19iaW8obGgsb3V0KSBcCisgIExITV9saF9ub2RlX3N0YXRzX2JpbyhFUlJfU1RSSU5HX0RBVEEsbGgsb3V0KQorI2RlZmluZSBsaF9FUlJfU1RSSU5HX0RBVEFfbm9kZV91c2FnZV9zdGF0c19iaW8obGgsb3V0KSBcCisgIExITV9saF9ub2RlX3VzYWdlX3N0YXRzX2JpbyhFUlJfU1RSSU5HX0RBVEEsbGgsb3V0KQorI2RlZmluZSBsaF9FUlJfU1RSSU5HX0RBVEFfc3RhdHNfYmlvKGxoLG91dCkgXAorICBMSE1fbGhfc3RhdHNfYmlvKEVSUl9TVFJJTkdfREFUQSxsaCxvdXQpCisjZGVmaW5lIGxoX0VSUl9TVFJJTkdfREFUQV9mcmVlKGxoKSBMSE1fbGhfZnJlZShFUlJfU1RSSU5HX0RBVEEsbGgpCisKKyNkZWZpbmUgbGhfRVhfQ0xBU1NfSVRFTV9uZXcoKSBMSE1fbGhfbmV3KEVYX0NMQVNTX0lURU0sZXhfY2xhc3NfaXRlbSkKKyNkZWZpbmUgbGhfRVhfQ0xBU1NfSVRFTV9pbnNlcnQobGgsaW5zdCkgTEhNX2xoX2luc2VydChFWF9DTEFTU19JVEVNLGxoLGluc3QpCisjZGVmaW5lIGxoX0VYX0NMQVNTX0lURU1fcmV0cmlldmUobGgsaW5zdCkgTEhNX2xoX3JldHJpZXZlKEVYX0NMQVNTX0lURU0sbGgsaW5zdCkKKyNkZWZpbmUgbGhfRVhfQ0xBU1NfSVRFTV9kZWxldGUobGgsaW5zdCkgTEhNX2xoX2RlbGV0ZShFWF9DTEFTU19JVEVNLGxoLGluc3QpCisjZGVmaW5lIGxoX0VYX0NMQVNTX0lURU1fZG9hbGwobGgsZm4pIExITV9saF9kb2FsbChFWF9DTEFTU19JVEVNLGxoLGZuKQorI2RlZmluZSBsaF9FWF9DTEFTU19JVEVNX2RvYWxsX2FyZyhsaCxmbixhcmdfdHlwZSxhcmcpIFwKKyAgTEhNX2xoX2RvYWxsX2FyZyhFWF9DTEFTU19JVEVNLGxoLGZuLGFyZ190eXBlLGFyZykKKyNkZWZpbmUgbGhfRVhfQ0xBU1NfSVRFTV9lcnJvcihsaCkgTEhNX2xoX2Vycm9yKEVYX0NMQVNTX0lURU0sbGgpCisjZGVmaW5lIGxoX0VYX0NMQVNTX0lURU1fbnVtX2l0ZW1zKGxoKSBMSE1fbGhfbnVtX2l0ZW1zKEVYX0NMQVNTX0lURU0sbGgpCisjZGVmaW5lIGxoX0VYX0NMQVNTX0lURU1fZG93bl9sb2FkKGxoKSBMSE1fbGhfZG93bl9sb2FkKEVYX0NMQVNTX0lURU0sbGgpCisjZGVmaW5lIGxoX0VYX0NMQVNTX0lURU1fbm9kZV9zdGF0c19iaW8obGgsb3V0KSBcCisgIExITV9saF9ub2RlX3N0YXRzX2JpbyhFWF9DTEFTU19JVEVNLGxoLG91dCkKKyNkZWZpbmUgbGhfRVhfQ0xBU1NfSVRFTV9ub2RlX3VzYWdlX3N0YXRzX2JpbyhsaCxvdXQpIFwKKyAgTEhNX2xoX25vZGVfdXNhZ2Vfc3RhdHNfYmlvKEVYX0NMQVNTX0lURU0sbGgsb3V0KQorI2RlZmluZSBsaF9FWF9DTEFTU19JVEVNX3N0YXRzX2JpbyhsaCxvdXQpIFwKKyAgTEhNX2xoX3N0YXRzX2JpbyhFWF9DTEFTU19JVEVNLGxoLG91dCkKKyNkZWZpbmUgbGhfRVhfQ0xBU1NfSVRFTV9mcmVlKGxoKSBMSE1fbGhfZnJlZShFWF9DTEFTU19JVEVNLGxoKQorCisjZGVmaW5lIGxoX0ZVTkNUSU9OX25ldygpIExITV9saF9uZXcoRlVOQ1RJT04sZnVuY3Rpb24pCisjZGVmaW5lIGxoX0ZVTkNUSU9OX2luc2VydChsaCxpbnN0KSBMSE1fbGhfaW5zZXJ0KEZVTkNUSU9OLGxoLGluc3QpCisjZGVmaW5lIGxoX0ZVTkNUSU9OX3JldHJpZXZlKGxoLGluc3QpIExITV9saF9yZXRyaWV2ZShGVU5DVElPTixsaCxpbnN0KQorI2RlZmluZSBsaF9GVU5DVElPTl9kZWxldGUobGgsaW5zdCkgTEhNX2xoX2RlbGV0ZShGVU5DVElPTixsaCxpbnN0KQorI2RlZmluZSBsaF9GVU5DVElPTl9kb2FsbChsaCxmbikgTEhNX2xoX2RvYWxsKEZVTkNUSU9OLGxoLGZuKQorI2RlZmluZSBsaF9GVU5DVElPTl9kb2FsbF9hcmcobGgsZm4sYXJnX3R5cGUsYXJnKSBcCisgIExITV9saF9kb2FsbF9hcmcoRlVOQ1RJT04sbGgsZm4sYXJnX3R5cGUsYXJnKQorI2RlZmluZSBsaF9GVU5DVElPTl9lcnJvcihsaCkgTEhNX2xoX2Vycm9yKEZVTkNUSU9OLGxoKQorI2RlZmluZSBsaF9GVU5DVElPTl9udW1faXRlbXMobGgpIExITV9saF9udW1faXRlbXMoRlVOQ1RJT04sbGgpCisjZGVmaW5lIGxoX0ZVTkNUSU9OX2Rvd25fbG9hZChsaCkgTEhNX2xoX2Rvd25fbG9hZChGVU5DVElPTixsaCkKKyNkZWZpbmUgbGhfRlVOQ1RJT05fbm9kZV9zdGF0c19iaW8obGgsb3V0KSBcCisgIExITV9saF9ub2RlX3N0YXRzX2JpbyhGVU5DVElPTixsaCxvdXQpCisjZGVmaW5lIGxoX0ZVTkNUSU9OX25vZGVfdXNhZ2Vfc3RhdHNfYmlvKGxoLG91dCkgXAorICBMSE1fbGhfbm9kZV91c2FnZV9zdGF0c19iaW8oRlVOQ1RJT04sbGgsb3V0KQorI2RlZmluZSBsaF9GVU5DVElPTl9zdGF0c19iaW8obGgsb3V0KSBcCisgIExITV9saF9zdGF0c19iaW8oRlVOQ1RJT04sbGgsb3V0KQorI2RlZmluZSBsaF9GVU5DVElPTl9mcmVlKGxoKSBMSE1fbGhfZnJlZShGVU5DVElPTixsaCkKKworI2RlZmluZSBsaF9NRU1fbmV3KCkgTEhNX2xoX25ldyhNRU0sbWVtKQorI2RlZmluZSBsaF9NRU1faW5zZXJ0KGxoLGluc3QpIExITV9saF9pbnNlcnQoTUVNLGxoLGluc3QpCisjZGVmaW5lIGxoX01FTV9yZXRyaWV2ZShsaCxpbnN0KSBMSE1fbGhfcmV0cmlldmUoTUVNLGxoLGluc3QpCisjZGVmaW5lIGxoX01FTV9kZWxldGUobGgsaW5zdCkgTEhNX2xoX2RlbGV0ZShNRU0sbGgsaW5zdCkKKyNkZWZpbmUgbGhfTUVNX2RvYWxsKGxoLGZuKSBMSE1fbGhfZG9hbGwoTUVNLGxoLGZuKQorI2RlZmluZSBsaF9NRU1fZG9hbGxfYXJnKGxoLGZuLGFyZ190eXBlLGFyZykgXAorICBMSE1fbGhfZG9hbGxfYXJnKE1FTSxsaCxmbixhcmdfdHlwZSxhcmcpCisjZGVmaW5lIGxoX01FTV9lcnJvcihsaCkgTEhNX2xoX2Vycm9yKE1FTSxsaCkKKyNkZWZpbmUgbGhfTUVNX251bV9pdGVtcyhsaCkgTEhNX2xoX251bV9pdGVtcyhNRU0sbGgpCisjZGVmaW5lIGxoX01FTV9kb3duX2xvYWQobGgpIExITV9saF9kb3duX2xvYWQoTUVNLGxoKQorI2RlZmluZSBsaF9NRU1fbm9kZV9zdGF0c19iaW8obGgsb3V0KSBcCisgIExITV9saF9ub2RlX3N0YXRzX2JpbyhNRU0sbGgsb3V0KQorI2RlZmluZSBsaF9NRU1fbm9kZV91c2FnZV9zdGF0c19iaW8obGgsb3V0KSBcCisgIExITV9saF9ub2RlX3VzYWdlX3N0YXRzX2JpbyhNRU0sbGgsb3V0KQorI2RlZmluZSBsaF9NRU1fc3RhdHNfYmlvKGxoLG91dCkgXAorICBMSE1fbGhfc3RhdHNfYmlvKE1FTSxsaCxvdXQpCisjZGVmaW5lIGxoX01FTV9mcmVlKGxoKSBMSE1fbGhfZnJlZShNRU0sbGgpCisKKyNkZWZpbmUgbGhfT0JKX05BTUVfbmV3KCkgTEhNX2xoX25ldyhPQkpfTkFNRSxvYmpfbmFtZSkKKyNkZWZpbmUgbGhfT0JKX05BTUVfaW5zZXJ0KGxoLGluc3QpIExITV9saF9pbnNlcnQoT0JKX05BTUUsbGgsaW5zdCkKKyNkZWZpbmUgbGhfT0JKX05BTUVfcmV0cmlldmUobGgsaW5zdCkgTEhNX2xoX3JldHJpZXZlKE9CSl9OQU1FLGxoLGluc3QpCisjZGVmaW5lIGxoX09CSl9OQU1FX2RlbGV0ZShsaCxpbnN0KSBMSE1fbGhfZGVsZXRlKE9CSl9OQU1FLGxoLGluc3QpCisjZGVmaW5lIGxoX09CSl9OQU1FX2RvYWxsKGxoLGZuKSBMSE1fbGhfZG9hbGwoT0JKX05BTUUsbGgsZm4pCisjZGVmaW5lIGxoX09CSl9OQU1FX2RvYWxsX2FyZyhsaCxmbixhcmdfdHlwZSxhcmcpIFwKKyAgTEhNX2xoX2RvYWxsX2FyZyhPQkpfTkFNRSxsaCxmbixhcmdfdHlwZSxhcmcpCisjZGVmaW5lIGxoX09CSl9OQU1FX2Vycm9yKGxoKSBMSE1fbGhfZXJyb3IoT0JKX05BTUUsbGgpCisjZGVmaW5lIGxoX09CSl9OQU1FX251bV9pdGVtcyhsaCkgTEhNX2xoX251bV9pdGVtcyhPQkpfTkFNRSxsaCkKKyNkZWZpbmUgbGhfT0JKX05BTUVfZG93bl9sb2FkKGxoKSBMSE1fbGhfZG93bl9sb2FkKE9CSl9OQU1FLGxoKQorI2RlZmluZSBsaF9PQkpfTkFNRV9ub2RlX3N0YXRzX2JpbyhsaCxvdXQpIFwKKyAgTEhNX2xoX25vZGVfc3RhdHNfYmlvKE9CSl9OQU1FLGxoLG91dCkKKyNkZWZpbmUgbGhfT0JKX05BTUVfbm9kZV91c2FnZV9zdGF0c19iaW8obGgsb3V0KSBcCisgIExITV9saF9ub2RlX3VzYWdlX3N0YXRzX2JpbyhPQkpfTkFNRSxsaCxvdXQpCisjZGVmaW5lIGxoX09CSl9OQU1FX3N0YXRzX2JpbyhsaCxvdXQpIFwKKyAgTEhNX2xoX3N0YXRzX2JpbyhPQkpfTkFNRSxsaCxvdXQpCisjZGVmaW5lIGxoX09CSl9OQU1FX2ZyZWUobGgpIExITV9saF9mcmVlKE9CSl9OQU1FLGxoKQorCisjZGVmaW5lIGxoX09QRU5TU0xfQ1NUUklOR19uZXcoKSBMSE1fbGhfbmV3KE9QRU5TU0xfQ1NUUklORyxvcGVuc3NsX2NzdHJpbmcpCisjZGVmaW5lIGxoX09QRU5TU0xfQ1NUUklOR19pbnNlcnQobGgsaW5zdCkgTEhNX2xoX2luc2VydChPUEVOU1NMX0NTVFJJTkcsbGgsaW5zdCkKKyNkZWZpbmUgbGhfT1BFTlNTTF9DU1RSSU5HX3JldHJpZXZlKGxoLGluc3QpIExITV9saF9yZXRyaWV2ZShPUEVOU1NMX0NTVFJJTkcsbGgsaW5zdCkKKyNkZWZpbmUgbGhfT1BFTlNTTF9DU1RSSU5HX2RlbGV0ZShsaCxpbnN0KSBMSE1fbGhfZGVsZXRlKE9QRU5TU0xfQ1NUUklORyxsaCxpbnN0KQorI2RlZmluZSBsaF9PUEVOU1NMX0NTVFJJTkdfZG9hbGwobGgsZm4pIExITV9saF9kb2FsbChPUEVOU1NMX0NTVFJJTkcsbGgsZm4pCisjZGVmaW5lIGxoX09QRU5TU0xfQ1NUUklOR19kb2FsbF9hcmcobGgsZm4sYXJnX3R5cGUsYXJnKSBcCisgIExITV9saF9kb2FsbF9hcmcoT1BFTlNTTF9DU1RSSU5HLGxoLGZuLGFyZ190eXBlLGFyZykKKyNkZWZpbmUgbGhfT1BFTlNTTF9DU1RSSU5HX2Vycm9yKGxoKSBMSE1fbGhfZXJyb3IoT1BFTlNTTF9DU1RSSU5HLGxoKQorI2RlZmluZSBsaF9PUEVOU1NMX0NTVFJJTkdfbnVtX2l0ZW1zKGxoKSBMSE1fbGhfbnVtX2l0ZW1zKE9QRU5TU0xfQ1NUUklORyxsaCkKKyNkZWZpbmUgbGhfT1BFTlNTTF9DU1RSSU5HX2Rvd25fbG9hZChsaCkgTEhNX2xoX2Rvd25fbG9hZChPUEVOU1NMX0NTVFJJTkcsbGgpCisjZGVmaW5lIGxoX09QRU5TU0xfQ1NUUklOR19ub2RlX3N0YXRzX2JpbyhsaCxvdXQpIFwKKyAgTEhNX2xoX25vZGVfc3RhdHNfYmlvKE9QRU5TU0xfQ1NUUklORyxsaCxvdXQpCisjZGVmaW5lIGxoX09QRU5TU0xfQ1NUUklOR19ub2RlX3VzYWdlX3N0YXRzX2JpbyhsaCxvdXQpIFwKKyAgTEhNX2xoX25vZGVfdXNhZ2Vfc3RhdHNfYmlvKE9QRU5TU0xfQ1NUUklORyxsaCxvdXQpCisjZGVmaW5lIGxoX09QRU5TU0xfQ1NUUklOR19zdGF0c19iaW8obGgsb3V0KSBcCisgIExITV9saF9zdGF0c19iaW8oT1BFTlNTTF9DU1RSSU5HLGxoLG91dCkKKyNkZWZpbmUgbGhfT1BFTlNTTF9DU1RSSU5HX2ZyZWUobGgpIExITV9saF9mcmVlKE9QRU5TU0xfQ1NUUklORyxsaCkKKworI2RlZmluZSBsaF9PUEVOU1NMX1NUUklOR19uZXcoKSBMSE1fbGhfbmV3KE9QRU5TU0xfU1RSSU5HLG9wZW5zc2xfc3RyaW5nKQorI2RlZmluZSBsaF9PUEVOU1NMX1NUUklOR19pbnNlcnQobGgsaW5zdCkgTEhNX2xoX2luc2VydChPUEVOU1NMX1NUUklORyxsaCxpbnN0KQorI2RlZmluZSBsaF9PUEVOU1NMX1NUUklOR19yZXRyaWV2ZShsaCxpbnN0KSBMSE1fbGhfcmV0cmlldmUoT1BFTlNTTF9TVFJJTkcsbGgsaW5zdCkKKyNkZWZpbmUgbGhfT1BFTlNTTF9TVFJJTkdfZGVsZXRlKGxoLGluc3QpIExITV9saF9kZWxldGUoT1BFTlNTTF9TVFJJTkcsbGgsaW5zdCkKKyNkZWZpbmUgbGhfT1BFTlNTTF9TVFJJTkdfZG9hbGwobGgsZm4pIExITV9saF9kb2FsbChPUEVOU1NMX1NUUklORyxsaCxmbikKKyNkZWZpbmUgbGhfT1BFTlNTTF9TVFJJTkdfZG9hbGxfYXJnKGxoLGZuLGFyZ190eXBlLGFyZykgXAorICBMSE1fbGhfZG9hbGxfYXJnKE9QRU5TU0xfU1RSSU5HLGxoLGZuLGFyZ190eXBlLGFyZykKKyNkZWZpbmUgbGhfT1BFTlNTTF9TVFJJTkdfZXJyb3IobGgpIExITV9saF9lcnJvcihPUEVOU1NMX1NUUklORyxsaCkKKyNkZWZpbmUgbGhfT1BFTlNTTF9TVFJJTkdfbnVtX2l0ZW1zKGxoKSBMSE1fbGhfbnVtX2l0ZW1zKE9QRU5TU0xfU1RSSU5HLGxoKQorI2RlZmluZSBsaF9PUEVOU1NMX1NUUklOR19kb3duX2xvYWQobGgpIExITV9saF9kb3duX2xvYWQoT1BFTlNTTF9TVFJJTkcsbGgpCisjZGVmaW5lIGxoX09QRU5TU0xfU1RSSU5HX25vZGVfc3RhdHNfYmlvKGxoLG91dCkgXAorICBMSE1fbGhfbm9kZV9zdGF0c19iaW8oT1BFTlNTTF9TVFJJTkcsbGgsb3V0KQorI2RlZmluZSBsaF9PUEVOU1NMX1NUUklOR19ub2RlX3VzYWdlX3N0YXRzX2JpbyhsaCxvdXQpIFwKKyAgTEhNX2xoX25vZGVfdXNhZ2Vfc3RhdHNfYmlvKE9QRU5TU0xfU1RSSU5HLGxoLG91dCkKKyNkZWZpbmUgbGhfT1BFTlNTTF9TVFJJTkdfc3RhdHNfYmlvKGxoLG91dCkgXAorICBMSE1fbGhfc3RhdHNfYmlvKE9QRU5TU0xfU1RSSU5HLGxoLG91dCkKKyNkZWZpbmUgbGhfT1BFTlNTTF9TVFJJTkdfZnJlZShsaCkgTEhNX2xoX2ZyZWUoT1BFTlNTTF9TVFJJTkcsbGgpCisKKyNkZWZpbmUgbGhfU1NMX1NFU1NJT05fbmV3KCkgTEhNX2xoX25ldyhTU0xfU0VTU0lPTixzc2xfc2Vzc2lvbikKKyNkZWZpbmUgbGhfU1NMX1NFU1NJT05faW5zZXJ0KGxoLGluc3QpIExITV9saF9pbnNlcnQoU1NMX1NFU1NJT04sbGgsaW5zdCkKKyNkZWZpbmUgbGhfU1NMX1NFU1NJT05fcmV0cmlldmUobGgsaW5zdCkgTEhNX2xoX3JldHJpZXZlKFNTTF9TRVNTSU9OLGxoLGluc3QpCisjZGVmaW5lIGxoX1NTTF9TRVNTSU9OX2RlbGV0ZShsaCxpbnN0KSBMSE1fbGhfZGVsZXRlKFNTTF9TRVNTSU9OLGxoLGluc3QpCisjZGVmaW5lIGxoX1NTTF9TRVNTSU9OX2RvYWxsKGxoLGZuKSBMSE1fbGhfZG9hbGwoU1NMX1NFU1NJT04sbGgsZm4pCisjZGVmaW5lIGxoX1NTTF9TRVNTSU9OX2RvYWxsX2FyZyhsaCxmbixhcmdfdHlwZSxhcmcpIFwKKyAgTEhNX2xoX2RvYWxsX2FyZyhTU0xfU0VTU0lPTixsaCxmbixhcmdfdHlwZSxhcmcpCisjZGVmaW5lIGxoX1NTTF9TRVNTSU9OX2Vycm9yKGxoKSBMSE1fbGhfZXJyb3IoU1NMX1NFU1NJT04sbGgpCisjZGVmaW5lIGxoX1NTTF9TRVNTSU9OX251bV9pdGVtcyhsaCkgTEhNX2xoX251bV9pdGVtcyhTU0xfU0VTU0lPTixsaCkKKyNkZWZpbmUgbGhfU1NMX1NFU1NJT05fZG93bl9sb2FkKGxoKSBMSE1fbGhfZG93bl9sb2FkKFNTTF9TRVNTSU9OLGxoKQorI2RlZmluZSBsaF9TU0xfU0VTU0lPTl9ub2RlX3N0YXRzX2JpbyhsaCxvdXQpIFwKKyAgTEhNX2xoX25vZGVfc3RhdHNfYmlvKFNTTF9TRVNTSU9OLGxoLG91dCkKKyNkZWZpbmUgbGhfU1NMX1NFU1NJT05fbm9kZV91c2FnZV9zdGF0c19iaW8obGgsb3V0KSBcCisgIExITV9saF9ub2RlX3VzYWdlX3N0YXRzX2JpbyhTU0xfU0VTU0lPTixsaCxvdXQpCisjZGVmaW5lIGxoX1NTTF9TRVNTSU9OX3N0YXRzX2JpbyhsaCxvdXQpIFwKKyAgTEhNX2xoX3N0YXRzX2JpbyhTU0xfU0VTU0lPTixsaCxvdXQpCisjZGVmaW5lIGxoX1NTTF9TRVNTSU9OX2ZyZWUobGgpIExITV9saF9mcmVlKFNTTF9TRVNTSU9OLGxoKQogLyogRW5kIG9mIHV0aWwvbWtzdGFjay5wbCBibG9jaywgeW91IG1heSBub3cgZWRpdCA6LSkgKi8KIAogI2VuZGlmIC8qICFkZWZpbmVkIEhFQURFUl9TQUZFU1RBQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVuc3NsL3NoYS5oIGIvaW5jbHVkZS9vcGVuc3NsL3NoYS5oCmluZGV4IDQ3YTJjMjkuLjE2Y2FjZjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAorKysgYi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKQEAgLTgxLDcgKzgxLDcgQEAKICAqICEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEKICAqLwogCi0jaWYgZGVmaW5lZChPUEVOU1NMX1NZU19XSU4xNikgfHwgZGVmaW5lZChfX0xQMzJfXykKKyNpZiBkZWZpbmVkKF9fTFAzMl9fKQogI2RlZmluZSBTSEFfTE9ORyB1bnNpZ25lZCBsb25nCiAjZWxpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX0NSQVkpIHx8IGRlZmluZWQoX19JTFA2NF9fKQogI2RlZmluZSBTSEFfTE9ORyB1bnNpZ25lZCBsb25nCkBAIC0xMDYsOSArMTA2LDYgQEAKIAl9IFNIQV9DVFg7CiAKICNpZm5kZWYgT1BFTlNTTF9OT19TSEEwCi0jaWZkZWYgT1BFTlNTTF9GSVBTCi1pbnQgcHJpdmF0ZV9TSEFfSW5pdChTSEFfQ1RYICpjKTsKLSNlbmRpZgogaW50IFNIQV9Jbml0KFNIQV9DVFggKmMpOwogaW50IFNIQV9VcGRhdGUoU0hBX0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7CiBpbnQgU0hBX0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBTSEFfQ1RYICpjKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnNzbC9zc2wuaCBiL2luY2x1ZGUvb3BlbnNzbC9zc2wuaAppbmRleCA0ZTQ5NjRlLi43ODU4MTY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL29wZW5zc2wvc3NsLmgKKysrIGIvaW5jbHVkZS9vcGVuc3NsL3NzbC5oCkBAIC01Niw2MCArNTYsNyBAQAogICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KICAqLwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAxIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICoKLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotICoKLSAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSAqCi0gKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSAqCi0gKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0gKiAgICBhY2tub3dsZWRnbWVudDoKLSAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0gKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0gKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICoKLSAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZwotICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQotICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0gKgotICovCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTY2LDYgKzExMywzMiBAQAogICogRUNDIGNpcGhlciBzdWl0ZSBzdXBwb3J0IGluIE9wZW5TU0wgb3JpZ2luYWxseSBkZXZlbG9wZWQgYnkgCiAgKiBTVU4gTUlDUk9TWVNURU1TLCBJTkMuLCBhbmQgY29udHJpYnV0ZWQgdG8gdGhlIE9wZW5TU0wgcHJvamVjdC4KICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAyMDA1IE5va2lhLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoZSBwb3J0aW9ucyBvZiB0aGUgYXR0YWNoZWQgc29mdHdhcmUgKCJDb250cmlidXRpb24iKSBpcyBkZXZlbG9wZWQgYnkKKyAqIE5va2lhIENvcnBvcmF0aW9uIGFuZCBpcyBsaWNlbnNlZCBwdXJzdWFudCB0byB0aGUgT3BlblNTTCBvcGVuIHNvdXJjZQorICogbGljZW5zZS4KKyAqCisgKiBUaGUgQ29udHJpYnV0aW9uLCBvcmlnaW5hbGx5IHdyaXR0ZW4gYnkgTWlrYSBLb3VzYSBhbmQgUGFzaSBFcm9uZW4gb2YKKyAqIE5va2lhIENvcnBvcmF0aW9uLCBjb25zaXN0cyBvZiB0aGUgIlBTSyIgKFByZS1TaGFyZWQgS2V5KSBjaXBoZXJzdWl0ZXMKKyAqIHN1cHBvcnQgKHNlZSBSRkMgNDI3OSkgdG8gT3BlblNTTC4KKyAqCisgKiBObyBwYXRlbnQgbGljZW5zZXMgb3Igb3RoZXIgcmlnaHRzIGV4Y2VwdCB0aG9zZSBleHByZXNzbHkgc3RhdGVkIGluCisgKiB0aGUgT3BlblNTTCBvcGVuIHNvdXJjZSBsaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCBncmFudGVkIG9yIHJlY2VpdmVkCisgKiBleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCwgb3Igb3RoZXJ3aXNlLgorICoKKyAqIE5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IE5va2lhIHRoYXQgdGhlIENvbnRyaWJ1dGlvbiBkb2VzIG5vdAorICogaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIGFueSB0aGlyZAorICogcGFydHkgb3IgdGhhdCB0aGUgbGljZW5zZSBwcm92aWRlcyB5b3Ugd2l0aCBhbGwgdGhlIG5lY2Vzc2FyeSByaWdodHMKKyAqIHRvIG1ha2UgdXNlIG9mIHRoZSBDb250cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORC4gSU4KKyAqIEFERElUSU9OIFRPIFRIRSBESVNDTEFJTUVSUyBJTkNMVURFRCBJTiBUSEUgTElDRU5TRSwgTk9LSUEKKyAqIFNQRUNJRklDQUxMWSBESVNDTEFJTVMgQU5ZIExJQUJJTElUWSBGT1IgQ0xBSU1TIEJST1VHSFQgQlkgWU9VIE9SIEFOWQorICogT1RIRVIgRU5USVRZIEJBU0VEIE9OIElORlJJTkdFTUVOVCBPRiBJTlRFTExFQ1RVQUwgUFJPUEVSVFkgUklHSFRTIE9SCisgKiBPVEhFUldJU0UuCisgKi8KIAogI2lmbmRlZiBIRUFERVJfU1NMX0ggCiAjZGVmaW5lIEhFQURFUl9TU0xfSCAKQEAgLTI0OCw1NiArMjIxLDg4IEBACiAjZGVmaW5lIFNTTF9NQVhfS0VZX0FSR19MRU5HVEgJCQk4CiAjZGVmaW5lIFNTTF9NQVhfTUFTVEVSX0tFWV9MRU5HVEgJCTQ4CiAKKwogLyogVGhlc2UgYXJlIHVzZWQgdG8gc3BlY2lmeSB3aGljaCBjaXBoZXJzIHRvIHVzZSBhbmQgbm90IHRvIHVzZSAqLworCisjZGVmaW5lIFNTTF9UWFRfRVhQNDAJCSJFWFBPUlQ0MCIKKyNkZWZpbmUgU1NMX1RYVF9FWFA1NgkJIkVYUE9SVDU2IgogI2RlZmluZSBTU0xfVFhUX0xPVwkJIkxPVyIKICNkZWZpbmUgU1NMX1RYVF9NRURJVU0JCSJNRURJVU0iCiAjZGVmaW5lIFNTTF9UWFRfSElHSAkJIkhJR0giCiAjZGVmaW5lIFNTTF9UWFRfRklQUwkJIkZJUFMiCi0jZGVmaW5lIFNTTF9UWFRfa0ZaQQkJImtGWkEiCi0jZGVmaW5lCVNTTF9UWFRfYUZaQQkJImFGWkEiCi0jZGVmaW5lIFNTTF9UWFRfZUZaQQkJImVGWkEiCi0jZGVmaW5lIFNTTF9UWFRfRlpBCQkiRlpBIgorCisjZGVmaW5lIFNTTF9UWFRfa0ZaQQkJImtGWkEiIC8qIHVudXNlZCEgKi8KKyNkZWZpbmUJU1NMX1RYVF9hRlpBCQkiYUZaQSIgLyogdW51c2VkISAqLworI2RlZmluZSBTU0xfVFhUX2VGWkEJCSJlRlpBIiAvKiB1bnVzZWQhICovCisjZGVmaW5lIFNTTF9UWFRfRlpBCQkiRlpBIiAgLyogdW51c2VkISAqLwogCiAjZGVmaW5lCVNTTF9UWFRfYU5VTEwJCSJhTlVMTCIKICNkZWZpbmUJU1NMX1RYVF9lTlVMTAkJImVOVUxMIgogI2RlZmluZQlTU0xfVFhUX05VTEwJCSJOVUxMIgogCi0jZGVmaW5lIFNTTF9UWFRfa0tSQjUgICAgIAkia0tSQjUiCi0jZGVmaW5lIFNTTF9UWFRfYUtSQjUgICAgIAkiYUtSQjUiCi0jZGVmaW5lIFNTTF9UWFRfS1JCNSAgICAgIAkiS1JCNSIKLQogI2RlZmluZSBTU0xfVFhUX2tSU0EJCSJrUlNBIgotI2RlZmluZSBTU0xfVFhUX2tESHIJCSJrREhyIgotI2RlZmluZSBTU0xfVFhUX2tESGQJCSJrREhkIgorI2RlZmluZSBTU0xfVFhUX2tESHIJCSJrREhyIiAvKiBubyBzdWNoIGNpcGhlcnN1aXRlcyBzdXBwb3J0ZWQhICovCisjZGVmaW5lIFNTTF9UWFRfa0RIZAkJImtESGQiIC8qIG5vIHN1Y2ggY2lwaGVyc3VpdGVzIHN1cHBvcnRlZCEgKi8KKyNkZWZpbmUgU1NMX1RYVF9rREggCQkia0RIIiAgLyogbm8gc3VjaCBjaXBoZXJzdWl0ZXMgc3VwcG9ydGVkISAqLwogI2RlZmluZSBTU0xfVFhUX2tFREgJCSJrRURIIgorI2RlZmluZSBTU0xfVFhUX2tLUkI1ICAgICAJImtLUkI1IgorI2RlZmluZSBTU0xfVFhUX2tFQ0RIcgkJImtFQ0RIciIKKyNkZWZpbmUgU1NMX1RYVF9rRUNESGUJCSJrRUNESGUiCisjZGVmaW5lIFNTTF9UWFRfa0VDREgJCSJrRUNESCIKKyNkZWZpbmUgU1NMX1RYVF9rRUVDREgJCSJrRUVDREgiCisjZGVmaW5lIFNTTF9UWFRfa1BTSyAgICAgICAgICAgICJrUFNLIgorI2RlZmluZSBTU0xfVFhUX2tHT1NUCQkia0dPU1QiCisKICNkZWZpbmUJU1NMX1RYVF9hUlNBCQkiYVJTQSIKICNkZWZpbmUJU1NMX1RYVF9hRFNTCQkiYURTUyIKLSNkZWZpbmUJU1NMX1RYVF9hREgJCSJhREgiCisjZGVmaW5lCVNTTF9UWFRfYURICQkiYURIIiAvKiBubyBzdWNoIGNpcGhlcnN1aXRlcyBzdXBwb3J0ZWQhICovCisjZGVmaW5lCVNTTF9UWFRfYUVDREgJCSJhRUNESCIKKyNkZWZpbmUgU1NMX1RYVF9hS1JCNSAgICAgCSJhS1JCNSIKKyNkZWZpbmUgU1NMX1RYVF9hRUNEU0EJCSJhRUNEU0EiCisjZGVmaW5lIFNTTF9UWFRfYVBTSyAgICAgICAgICAgICJhUFNLIgorI2RlZmluZSBTU0xfVFhUX2FHT1NUOTQJImFHT1NUOTQiCisjZGVmaW5lIFNTTF9UWFRfYUdPU1QwMSAiYUdPU1QwMSIKKyNkZWZpbmUgU1NMX1RYVF9hR09TVCAgImFHT1NUIgorCiAjZGVmaW5lCVNTTF9UWFRfRFNTCQkiRFNTIgogI2RlZmluZSBTU0xfVFhUX0RICQkiREgiCi0jZGVmaW5lIFNTTF9UWFRfRURICQkiRURIIgorI2RlZmluZSBTU0xfVFhUX0VESAkJIkVESCIgLyogc2FtZSBhcyAia0VESDotQURIIiAqLwogI2RlZmluZSBTU0xfVFhUX0FESAkJIkFESCIKICNkZWZpbmUgU1NMX1RYVF9SU0EJCSJSU0EiCisjZGVmaW5lIFNTTF9UWFRfRUNESAkJIkVDREgiCisjZGVmaW5lIFNTTF9UWFRfRUVDREgJCSJFRUNESCIgLyogc2FtZSBhcyAia0VFQ0RIOi1BRUNESCIgKi8KKyNkZWZpbmUgU1NMX1RYVF9BRUNESAkJIkFFQ0RIIgorI2RlZmluZSBTU0xfVFhUX0VDRFNBCQkiRUNEU0EiCisjZGVmaW5lIFNTTF9UWFRfS1JCNSAgICAgIAkiS1JCNSIKKyNkZWZpbmUgU1NMX1RYVF9QU0sgICAgICAgICAgICAgIlBTSyIKKwogI2RlZmluZSBTU0xfVFhUX0RFUwkJIkRFUyIKICNkZWZpbmUgU1NMX1RYVF8zREVTCQkiM0RFUyIKICNkZWZpbmUgU1NMX1RYVF9SQzQJCSJSQzQiCiAjZGVmaW5lIFNTTF9UWFRfUkMyCQkiUkMyIgogI2RlZmluZSBTU0xfVFhUX0lERUEJCSJJREVBIgogI2RlZmluZSBTU0xfVFhUX1NFRUQJCSJTRUVEIgorI2RlZmluZSBTU0xfVFhUX0FFUzEyOAkJIkFFUzEyOCIKKyNkZWZpbmUgU1NMX1RYVF9BRVMyNTYJCSJBRVMyNTYiCiAjZGVmaW5lIFNTTF9UWFRfQUVTCQkiQUVTIgorI2RlZmluZSBTU0xfVFhUX0NBTUVMTElBMTI4CSJDQU1FTExJQTEyOCIKKyNkZWZpbmUgU1NMX1RYVF9DQU1FTExJQTI1NgkiQ0FNRUxMSUEyNTYiCiAjZGVmaW5lIFNTTF9UWFRfQ0FNRUxMSUEJIkNBTUVMTElBIgorCiAjZGVmaW5lIFNTTF9UWFRfTUQ1CQkiTUQ1IgogI2RlZmluZSBTU0xfVFhUX1NIQTEJCSJTSEExIgotI2RlZmluZSBTU0xfVFhUX1NIQQkJIlNIQSIKLSNkZWZpbmUgU1NMX1RYVF9FWFAJCSJFWFAiCi0jZGVmaW5lIFNTTF9UWFRfRVhQT1JUCQkiRVhQT1JUIgotI2RlZmluZSBTU0xfVFhUX0VYUDQwCQkiRVhQT1JUNDAiCi0jZGVmaW5lIFNTTF9UWFRfRVhQNTYJCSJFWFBPUlQ1NiIKKyNkZWZpbmUgU1NMX1RYVF9TSEEJCSJTSEEiIC8qIHNhbWUgYXMgIlNIQTEiICovCisjZGVmaW5lIFNTTF9UWFRfR09TVDk0CQkiR09TVDk0IiAKKyNkZWZpbmUgU1NMX1RYVF9HT1NUODlNQUMJCSJHT1NUODlNQUMiIAorCiAjZGVmaW5lIFNTTF9UWFRfU1NMVjIJCSJTU0x2MiIKICNkZWZpbmUgU1NMX1RYVF9TU0xWMwkJIlNTTHYzIgogI2RlZmluZSBTU0xfVFhUX1RMU1YxCQkiVExTdjEiCisKKyNkZWZpbmUgU1NMX1RYVF9FWFAJCSJFWFAiCisjZGVmaW5lIFNTTF9UWFRfRVhQT1JUCQkiRVhQT1JUIgorCiAjZGVmaW5lIFNTTF9UWFRfQUxMCQkiQUxMIgotI2RlZmluZSBTU0xfVFhUX0VDQwkJIkVDQ2RyYWZ0IiAvKiBFQ0MgY2lwaGVyc3VpdGVzIGFyZSBub3QgeWV0IG9mZmljaWFsICovCiAKIC8qCiAgKiBDT01QTEVNRU5UT0YqIGRlZmluaXRpb25zLiBUaGVzZSBpZGVudGlmaWVycyBhcmUgdXNlZCB0byAoZGUtc2VsZWN0KQpAQCAtMzE5LDcgKzMyNCwxMyBAQAogLyogVGhlIGZvbGxvd2luZyBjaXBoZXIgbGlzdCBpcyB1c2VkIGJ5IGRlZmF1bHQuCiAgKiBJdCBhbHNvIGlzIHN1YnN0aXR1dGVkIHdoZW4gYW4gYXBwbGljYXRpb24tZGVmaW5lZCBjaXBoZXIgbGlzdCBzdHJpbmcKICAqIHN0YXJ0cyB3aXRoICdERUZBVUxUJy4gKi8KLSNkZWZpbmUgU1NMX0RFRkFVTFRfQ0lQSEVSX0xJU1QJIkFFUzpBTEw6IWFOVUxMOiFlTlVMTDorUkM0OkBTVFJFTkdUSCIgLyogbG93IHByaW9yaXR5IGZvciBSQzQgKi8KKyNkZWZpbmUgU1NMX0RFRkFVTFRfQ0lQSEVSX0xJU1QJIkFMTDohYU5VTEw6IWVOVUxMOiFTU0x2MiIKKy8qIEFzIG9mIE9wZW5TU0wgMS4wLjAsIHNzbF9jcmVhdGVfY2lwaGVyX2xpc3QoKSBpbiBzc2wvc3NsX2NpcGguYyBhbHdheXMKKyAqIHN0YXJ0cyB3aXRoIGEgcmVhc29uYWJsZSBvcmRlciwgYW5kIGFsbCB3ZSBoYXZlIHRvIGRvIGZvciBERUZBVUxUIGlzCisgKiB0aHJvd2luZyBvdXQgYW5vbnltb3VzIGFuZCB1bmVuY3J5cHRlZCBjaXBoZXJzdWl0ZXMhCisgKiAoVGhlIGxhdHRlciBhcmUgbm90IGFjdHVhbGx5IGVuYWJsZWQgYnkgQUxMLCBidXQgIkFMTDpSU0EiIHdvdWxkIGVuYWJsZQorICogc29tZSBvZiB0aGVtLikKKyAqLwogCiAvKiBVc2VkIGluIFNTTF9zZXRfc2h1dGRvd24oKS9TU0xfZ2V0X3NodXRkb3duKCk7ICovCiAjZGVmaW5lIFNTTF9TRU5UX1NIVVRET1dOCTEKQEAgLTM0NCw2ICszNTUsNyBAQAogICogJ3N0cnVjdCBzc2xfc3QgKicgZnVuY3Rpb24gcGFyYW1ldGVycyB1c2VkIHRvIHByb3RvdHlwZSBjYWxsYmFja3MKICAqIGluIFNTTF9DVFguICovCiB0eXBlZGVmIHN0cnVjdCBzc2xfc3QgKnNzbF9jcm9ja19zdDsKK3R5cGVkZWYgc3RydWN0IHRsc19zZXNzaW9uX3RpY2tldF9leHRfc3QgVExTX1NFU1NJT05fVElDS0VUX0VYVDsKIAogLyogdXNlZCB0byBob2xkIGluZm8gb24gdGhlIHBhcnRpY3VsYXIgY2lwaGVycyB1c2VkICovCiB0eXBlZGVmIHN0cnVjdCBzc2xfY2lwaGVyX3N0CkBAIC0zNTEsMTcgKzM2MywyNSBAQAogCWludCB2YWxpZDsKIAljb25zdCBjaGFyICpuYW1lOwkJLyogdGV4dCBuYW1lICovCiAJdW5zaWduZWQgbG9uZyBpZDsJCS8qIGlkLCA0IGJ5dGVzLCBmaXJzdCBpcyB2ZXJzaW9uICovCi0JdW5zaWduZWQgbG9uZyBhbGdvcml0aG1zOwkvKiB3aGF0IGNpcGhlcnMgYXJlIHVzZWQgKi8KKworCS8qIGNoYW5nZWQgaW4gMC45Ljk6IHRoZXNlIGZvdXIgdXNlZCB0byBiZSBwb3J0aW9ucyBvZiBhIHNpbmdsZSB2YWx1ZSAnYWxnb3JpdGhtcycgKi8KKwl1bnNpZ25lZCBsb25nIGFsZ29yaXRobV9ta2V5OwkvKiBrZXkgZXhjaGFuZ2UgYWxnb3JpdGhtICovCisJdW5zaWduZWQgbG9uZyBhbGdvcml0aG1fYXV0aDsJLyogc2VydmVyIGF1dGhlbnRpY2F0aW9uICovCisJdW5zaWduZWQgbG9uZyBhbGdvcml0aG1fZW5jOwkvKiBzeW1tZXRyaWMgZW5jcnlwdGlvbiAqLworCXVuc2lnbmVkIGxvbmcgYWxnb3JpdGhtX21hYzsJLyogc3ltbWV0cmljIGF1dGhlbnRpY2F0aW9uICovCisJdW5zaWduZWQgbG9uZyBhbGdvcml0aG1fc3NsOwkvKiAobWFqb3IpIHByb3RvY29sIHZlcnNpb24gKi8KKwogCXVuc2lnbmVkIGxvbmcgYWxnb19zdHJlbmd0aDsJLyogc3RyZW5ndGggYW5kIGV4cG9ydCBmbGFncyAqLwogCXVuc2lnbmVkIGxvbmcgYWxnb3JpdGhtMjsJLyogRXh0cmEgZmxhZ3MgKi8KIAlpbnQgc3RyZW5ndGhfYml0czsJCS8qIE51bWJlciBvZiBiaXRzIHJlYWxseSB1c2VkICovCiAJaW50IGFsZ19iaXRzOwkJCS8qIE51bWJlciBvZiBiaXRzIGZvciBhbGdvcml0aG0gKi8KLQl1bnNpZ25lZCBsb25nIG1hc2s7CQkvKiB1c2VkIGZvciBtYXRjaGluZyAqLwotCXVuc2lnbmVkIGxvbmcgbWFza19zdHJlbmd0aDsJLyogYWxzbyB1c2VkIGZvciBtYXRjaGluZyAqLwogCX0gU1NMX0NJUEhFUjsKIAogREVDTEFSRV9TVEFDS19PRihTU0xfQ0lQSEVSKQogCit0eXBlZGVmIGludCAoKnRsc19zZXNzaW9uX3RpY2tldF9leHRfY2JfZm4pKFNTTCAqcywgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxlbiwgdm9pZCAqYXJnKTsKK3R5cGVkZWYgaW50ICgqdGxzX3Nlc3Npb25fc2VjcmV0X2NiX2ZuKShTU0wgKnMsIHZvaWQgKnNlY3JldCwgaW50ICpzZWNyZXRfbGVuLCBTVEFDS19PRihTU0xfQ0lQSEVSKSAqcGVlcl9jaXBoZXJzLCBTU0xfQ0lQSEVSICoqY2lwaGVyLCB2b2lkICphcmcpOworCiAvKiBVc2VkIHRvIGhvbGQgZnVuY3Rpb25zIGZvciBTU0x2MiBvciBTU0x2My9UTFN2MSBmdW5jdGlvbnMgKi8KIHR5cGVkZWYgc3RydWN0IHNzbF9tZXRob2Rfc3QKIAl7CkBAIC0zODUsMTIgKzQwNSwxMiBAQAogCWludCAoKnNzbF9kaXNwYXRjaF9hbGVydCkoU1NMICpzKTsKIAlsb25nICgqc3NsX2N0cmwpKFNTTCAqcyxpbnQgY21kLGxvbmcgbGFyZyx2b2lkICpwYXJnKTsKIAlsb25nICgqc3NsX2N0eF9jdHJsKShTU0xfQ1RYICpjdHgsaW50IGNtZCxsb25nIGxhcmcsdm9pZCAqcGFyZyk7Ci0JU1NMX0NJUEhFUiAqKCpnZXRfY2lwaGVyX2J5X2NoYXIpKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0cik7CisJY29uc3QgU1NMX0NJUEhFUiAqKCpnZXRfY2lwaGVyX2J5X2NoYXIpKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0cik7CiAJaW50ICgqcHV0X2NpcGhlcl9ieV9jaGFyKShjb25zdCBTU0xfQ0lQSEVSICpjaXBoZXIsdW5zaWduZWQgY2hhciAqcHRyKTsKIAlpbnQgKCpzc2xfcGVuZGluZykoY29uc3QgU1NMICpzKTsKIAlpbnQgKCpudW1fY2lwaGVycykodm9pZCk7Ci0JU1NMX0NJUEhFUiAqKCpnZXRfY2lwaGVyKSh1bnNpZ25lZCBuY2lwaGVyKTsKLQlzdHJ1Y3Qgc3NsX21ldGhvZF9zdCAqKCpnZXRfc3NsX21ldGhvZCkoaW50IHZlcnNpb24pOworCWNvbnN0IFNTTF9DSVBIRVIgKigqZ2V0X2NpcGhlcikodW5zaWduZWQgbmNpcGhlcik7CisJY29uc3Qgc3RydWN0IHNzbF9tZXRob2Rfc3QgKigqZ2V0X3NzbF9tZXRob2QpKGludCB2ZXJzaW9uKTsKIAlsb25nICgqZ2V0X3RpbWVvdXQpKHZvaWQpOwogCXN0cnVjdCBzc2wzX2VuY19tZXRob2QgKnNzbDNfZW5jOyAvKiBFeHRyYSBTU0x2My9UTFMgc3R1ZmYgKi8KIAlpbnQgKCpzc2xfdmVyc2lvbikodm9pZCk7CkBAIC00MDIsMTcgKzQyMiwyMCBAQAogICogU1NMX1NFU1NJT05fSUQgOjo9IFNFUVVFTkNFIHsKICAqCXZlcnNpb24gCQlJTlRFR0VSLAktLSBzdHJ1Y3R1cmUgdmVyc2lvbiBudW1iZXIKICAqCVNTTHZlcnNpb24gCQlJTlRFR0VSLAktLSBTU0wgdmVyc2lvbiBudW1iZXIKLSAqCUNpcGhlciAJCQlPQ1RFVF9TVFJJTkcsCS0tIHRoZSAzIGJ5dGUgY2lwaGVyIElECi0gKglTZXNzaW9uX0lEIAkJT0NURVRfU1RSSU5HLAktLSB0aGUgU2Vzc2lvbiBJRAotICoJTWFzdGVyX2tleSAJCU9DVEVUX1NUUklORywJLS0gdGhlIG1hc3RlciBrZXkKLSAqCUtSQjVfcHJpbmNpcGFsCQlPQ1RFVF9TVFJJTkcJLS0gb3B0aW9uYWwgS2VyYmVyb3MgcHJpbmNpcGFsCi0gKglLZXlfQXJnIFsgMCBdIElNUExJQ0lUCU9DVEVUX1NUUklORywJLS0gdGhlIG9wdGlvbmFsIEtleSBhcmd1bWVudAorICoJQ2lwaGVyIAkJCU9DVEVUIFNUUklORywJLS0gdGhlIDMgYnl0ZSBjaXBoZXIgSUQKKyAqCVNlc3Npb25fSUQgCQlPQ1RFVCBTVFJJTkcsCS0tIHRoZSBTZXNzaW9uIElECisgKglNYXN0ZXJfa2V5IAkJT0NURVQgU1RSSU5HLAktLSB0aGUgbWFzdGVyIGtleQorICoJS1JCNV9wcmluY2lwYWwJCU9DVEVUIFNUUklORwktLSBvcHRpb25hbCBLZXJiZXJvcyBwcmluY2lwYWwKKyAqCUtleV9BcmcgWyAwIF0gSU1QTElDSVQJT0NURVQgU1RSSU5HLAktLSB0aGUgb3B0aW9uYWwgS2V5IGFyZ3VtZW50CiAgKglUaW1lIFsgMSBdIEVYUExJQ0lUCUlOVEVHRVIsCS0tIG9wdGlvbmFsIFN0YXJ0IFRpbWUKICAqCVRpbWVvdXQgWyAyIF0gRVhQTElDSVQJSU5URUdFUiwJLS0gb3B0aW9uYWwgVGltZW91dCBpbnMgc2Vjb25kcwogICoJUGVlciBbIDMgXSBFWFBMSUNJVAlYNTA5LAkJLS0gb3B0aW9uYWwgUGVlciBDZXJ0aWZpY2F0ZQotICoJU2Vzc2lvbl9JRF9jb250ZXh0IFsgNCBdIEVYUExJQ0lUIE9DVEVUX1NUUklORywgICAtLSB0aGUgU2Vzc2lvbiBJRCBjb250ZXh0Ci0gKglWZXJpZnlfcmVzdWx0IFsgNSBdIEVYUExJQ0lUIElOVEVHRVIgICAgLS0gWDUwOV9WXy4uLiBjb2RlIGZvciBgUGVlcicKLSAqCUNvbXByZXNzaW9uIFs2XSBJTVBMSUNJVCBBU04xX09CSkVDVAktLSBjb21wcmVzc2lvbiBPSUQgWFhYWFgKKyAqCVNlc3Npb25fSURfY29udGV4dCBbIDQgXSBFWFBMSUNJVCBPQ1RFVCBTVFJJTkcsICAgLS0gdGhlIFNlc3Npb24gSUQgY29udGV4dAorICoJVmVyaWZ5X3Jlc3VsdCBbIDUgXSBFWFBMSUNJVCBJTlRFR0VSLCAgIC0tIFg1MDlfVl8uLi4gY29kZSBmb3IgYFBlZXInCisgKglIb3N0TmFtZSBbIDYgXSBFWFBMSUNJVCBPQ1RFVCBTVFJJTkcsICAgLS0gb3B0aW9uYWwgSG9zdE5hbWUgZnJvbSBzZXJ2ZXJuYW1lIFRMUyBleHRlbnNpb24gCisgKglFQ1BvaW50Rm9ybWF0TGlzdCBbIDcgXSBPQ1RFVCBTVFJJTkcsICAgICAtLSBvcHRpb25hbCBFQyBwb2ludCBmb3JtYXQgbGlzdCBmcm9tIFRMUyBleHRlbnNpb24KKyAqCVBTS19pZGVudGl0eV9oaW50IFsgOCBdIEVYUExJQ0lUIE9DVEVUIFNUUklORywgLS0gb3B0aW9uYWwgUFNLIGlkZW50aXR5IGhpbnQKKyAqCVBTS19pZGVudGl0eSBbIDkgXSBFWFBMSUNJVCBPQ1RFVCBTVFJJTkcgLS0gb3B0aW9uYWwgUFNLIGlkZW50aXR5CiAgKgl9CiAgKiBMb29rIGluIHNzbC9zc2xfYXNuMS5jIGZvciBtb3JlIGRldGFpbHMKICAqIEknbSB1c2luZyBFWFBMSUNJVCB0YWdzIHNvIEkgY2FuIHJlYWQgdGhlIGRhbW4gdGhpbmdzIHVzaW5nIGFzbjFwYXJzZSA6LSkuCkBAIC00NDAsNyArNDYzLDEwIEBACiAgICAgICAgIHVuc2lnbmVkIGludCBrcmI1X2NsaWVudF9wcmluY19sZW47CiAgICAgICAgIHVuc2lnbmVkIGNoYXIga3JiNV9jbGllbnRfcHJpbmNbU1NMX01BWF9LUkI1X1BSSU5DSVBBTF9MRU5HVEhdOwogI2VuZGlmIC8qIE9QRU5TU0xfTk9fS1JCNSAqLwotCisjaWZuZGVmIE9QRU5TU0xfTk9fUFNLCisJY2hhciAqcHNrX2lkZW50aXR5X2hpbnQ7CisJY2hhciAqcHNrX2lkZW50aXR5OworI2VuZGlmCiAJaW50IG5vdF9yZXN1bWFibGU7CiAKIAkvKiBUaGUgY2VydCBpcyB0aGUgY2VydGlmaWNhdGUgdXNlZCB0byBlc3RhYmxpc2ggdGhpcyBjb25uZWN0aW9uICovCkBAIC00NTksOSArNDg1LDkgQEAKIAlsb25nIHRpbWVvdXQ7CiAJbG9uZyB0aW1lOwogCi0JaW50IGNvbXByZXNzX21ldGg7CQkvKiBOZWVkIHRvIGxvb2t1cCB0aGUgbWV0aG9kICovCisJdW5zaWduZWQgaW50IGNvbXByZXNzX21ldGg7CS8qIE5lZWQgdG8gbG9va3VwIHRoZSBtZXRob2QgKi8KIAotCVNTTF9DSVBIRVIgKmNpcGhlcjsKKwljb25zdCBTU0xfQ0lQSEVSICpjaXBoZXI7CiAJdW5zaWduZWQgbG9uZyBjaXBoZXJfaWQ7CS8qIHdoZW4gQVNOLjEgbG9hZGVkLCB0aGlzCiAJCQkJCSAqIG5lZWRzIHRvIGJlIHVzZWQgdG8gbG9hZAogCQkJCQkgKiB0aGUgJ2NpcGhlcicgc3RydWN0dXJlICovCkBAIC00NzUsNiArNTAxLDEyIEBACiAJc3RydWN0IHNzbF9zZXNzaW9uX3N0ICpwcmV2LCpuZXh0OwogI2lmbmRlZiBPUEVOU1NMX05PX1RMU0VYVAogCWNoYXIgKnRsc2V4dF9ob3N0bmFtZTsKKyNpZm5kZWYgT1BFTlNTTF9OT19FQworCXNpemVfdCB0bHNleHRfZWNwb2ludGZvcm1hdGxpc3RfbGVuZ3RoOworCXVuc2lnbmVkIGNoYXIgKnRsc2V4dF9lY3BvaW50Zm9ybWF0bGlzdDsgLyogcGVlcidzIGxpc3QgKi8KKwlzaXplX3QgdGxzZXh0X2VsbGlwdGljY3VydmVsaXN0X2xlbmd0aDsKKwl1bnNpZ25lZCBjaGFyICp0bHNleHRfZWxsaXB0aWNjdXJ2ZWxpc3Q7IC8qIHBlZXIncyBsaXN0ICovCisjZW5kaWYgLyogT1BFTlNTTF9OT19FQyAqLwogCS8qIFJGQzQ1MDcgaW5mbyAqLwogCXVuc2lnbmVkIGNoYXIgKnRsc2V4dF90aWNrOwkvKiBTZXNzaW9uIHRpY2tldCAqLwogCXNpemVfdAl0bHNleHRfdGlja2xlbjsJCS8qIFNlc3Npb24gdGlja2V0IGxlbmd0aCAqLwkKQEAgLTUwNCw3ICs1MzYsNyBAQAogCiAvKiBTU0xfT1BfQUxMOiB2YXJpb3VzIGJ1ZyB3b3JrYXJvdW5kcyB0aGF0IHNob3VsZCBiZSByYXRoZXIgaGFybWxlc3MuCiAgKiAgICAgICAgICAgICBUaGlzIHVzZWQgdG8gYmUgMHgwMDBGRkZGRkwgYmVmb3JlIDAuOS43LiAqLwotI2RlZmluZSBTU0xfT1BfQUxMCQkJCQkweDAwMDAwRkZGTAorI2RlZmluZSBTU0xfT1BfQUxMCQkJCQkweDgwMDAwRkZGTAogCiAvKiBEVExTIG9wdGlvbnMgKi8KICNkZWZpbmUgU1NMX09QX05PX1FVRVJZX01UVSAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMEwKQEAgLTUxNyw2ICs1NDksOCBAQAogCiAvKiBBcyBzZXJ2ZXIsIGRpc2FsbG93IHNlc3Npb24gcmVzdW1wdGlvbiBvbiByZW5lZ290aWF0aW9uICovCiAjZGVmaW5lIFNTTF9PUF9OT19TRVNTSU9OX1JFU1VNUFRJT05fT05fUkVORUdPVElBVElPTgkweDAwMDEwMDAwTAorLyogRG9uJ3QgdXNlIGNvbXByZXNzaW9uIGV2ZW4gaWYgc3VwcG9ydGVkICovCisjZGVmaW5lIFNTTF9PUF9OT19DT01QUkVTU0lPTgkJCQkweDAwMDIwMDAwTAogLyogUGVybWl0IHVuc2FmZSBsZWdhY3kgcmVuZWdvdGlhdGlvbiAqLwogI2RlZmluZSBTU0xfT1BfQUxMT1dfVU5TQUZFX0xFR0FDWV9SRU5FR09USUFUSU9OCTB4MDAwNDAwMDBMCiAvKiBJZiBzZXQsIGFsd2F5cyBjcmVhdGUgYSBuZXcga2V5IHdoZW4gdXNpbmcgdG1wX2VjZGggcGFyYW1ldGVycyAqLwpAQCAtNTQ1LDcgKzU3OSwxMSBAQAogI2RlZmluZSBTU0xfT1BfUEtDUzFfQ0hFQ0tfMgkJCQkweDEwMDAwMDAwTAogI2RlZmluZSBTU0xfT1BfTkVUU0NBUEVfQ0FfRE5fQlVHCQkJMHgyMDAwMDAwMEwKICNkZWZpbmUgU1NMX09QX05FVFNDQVBFX0RFTU9fQ0lQSEVSX0NIQU5HRV9CVUcJCTB4NDAwMDAwMDBMCi0KKy8qIE1ha2Ugc2VydmVyIGFkZCBzZXJ2ZXItaGVsbG8gZXh0ZW5zaW9uIGZyb20gZWFybHkgdmVyc2lvbiBvZgorICogY3J5cHRvcHJvIGRyYWZ0LCB3aGVuIEdPU1QgY2lwaGVyc3VpdGUgaXMgbmVnb3RpYXRlZC4gCisgKiBSZXF1aXJlZCBmb3IgaW50ZXJvcGVyYWJpbGl0eSB3aXRoIENyeXB0b1BybyBDU1AgMy54IAorICovCisjZGVmaW5lIFNTTF9PUF9DUllQVE9QUk9fVExTRVhUX0JVRwkJCTB4ODAwMDAwMDBMCiAKIC8qIEFsbG93IFNTTF93cml0ZSguLi4sIG4pIHRvIHJldHVybiByIHdpdGggMCA8IHIgPCBuIChpLmUuIHJlcG9ydCBzdWNjZXNzCiAgKiB3aGVuIGp1c3QgYSBzaW5nbGUgcmVjb3JkIGhhcyBiZWVuIHdyaXR0ZW4pOiAqLwpAQCAtNTYwLDkgKzU5OCwxMyBAQAogI2RlZmluZSBTU0xfTU9ERV9BVVRPX1JFVFJZIDB4MDAwMDAwMDRMCiAvKiBEb24ndCBhdHRlbXB0IHRvIGF1dG9tYXRpY2FsbHkgYnVpbGQgY2VydGlmaWNhdGUgY2hhaW4gKi8KICNkZWZpbmUgU1NMX01PREVfTk9fQVVUT19DSEFJTiAweDAwMDAwMDA4TAorLyogU2F2ZSBSQU0gYnkgcmVsZWFzaW5nIHJlYWQgYW5kIHdyaXRlIGJ1ZmZlcnMgd2hlbiB0aGV5J3JlIGVtcHR5LiAoU1NMMyBhbmQKKyAqIFRMUyBvbmx5LikgICJSZWxlYXNlZCIgYnVmZmVycyBhcmUgcHV0IG9udG8gYSBmcmVlLWxpc3QgaW4gdGhlIGNvbnRleHQKKyAqIG9yIGp1c3QgZnJlZWQgKGRlcGVuZGluZyBvbiB0aGUgY29udGV4dCdzIHNldHRpbmcgZm9yIGZyZWVsaXN0X21heF9sZW4pLiAqLworI2RlZmluZSBTU0xfTU9ERV9SRUxFQVNFX0JVRkZFUlMgMHgwMDAwMDAxMEwKIC8qIFVzZSBzbWFsbCByZWFkIGFuZCB3cml0ZSBidWZmZXJzOiAoYSkgbGF6eSBhbGxvY2F0ZSByZWFkIGJ1ZmZlcnMgZm9yCiAgKiBsYXJnZSBpbmNvbWluZyByZWNvcmRzLCBhbmQgKGIpIGxpbWl0IHRoZSBzaXplIG9mIG91dGdvaW5nIHJlY29yZHMuICovCi0jZGVmaW5lIFNTTF9NT0RFX1NNQUxMX0JVRkZFUlMgMHgwMDAwMDAxMEwKKyNkZWZpbmUgU1NMX01PREVfU01BTExfQlVGRkVSUyAweDAwMDAwMDIwTAogCiAvKiBOb3RlOiBTU0xbX0NUWF1fc2V0X3tvcHRpb25zLG1vZGV9IHVzZSB8PSBvcCBvbiB0aGUgcHJldmlvdXMgdmFsdWUsCiAgKiB0aGV5IGNhbm5vdCBiZSB1c2VkIHRvIGNsZWFyIGJpdHMuICovCkBAIC02NDEsMTcgKzY4MywxOCBAQAogCX0gU1NMX0NPTVA7CiAKIERFQ0xBUkVfU1RBQ0tfT0YoU1NMX0NPTVApCitERUNMQVJFX0xIQVNIX09GKFNTTF9TRVNTSU9OKTsKIAogc3RydWN0IHNzbF9jdHhfc3QKIAl7Ci0JU1NMX01FVEhPRCAqbWV0aG9kOworCWNvbnN0IFNTTF9NRVRIT0QgKm1ldGhvZDsKIAogCVNUQUNLX09GKFNTTF9DSVBIRVIpICpjaXBoZXJfbGlzdDsKIAkvKiBzYW1lIGFzIGFib3ZlIGJ1dCBzb3J0ZWQgZm9yIGxvb2t1cCAqLwogCVNUQUNLX09GKFNTTF9DSVBIRVIpICpjaXBoZXJfbGlzdF9ieV9pZDsKIAogCXN0cnVjdCB4NTA5X3N0b3JlX3N0IC8qIFg1MDlfU1RPUkUgKi8gKmNlcnRfc3RvcmU7Ci0Jc3RydWN0IGxoYXNoX3N0IC8qIExIQVNIICovICpzZXNzaW9uczsJLyogYSBzZXQgb2YgU1NMX1NFU1NJT05zICovCisJTEhBU0hfT0YoU1NMX1NFU1NJT04pICpzZXNzaW9uczsKIAkvKiBNb3N0IHNlc3Npb24taWRzIHRoYXQgd2lsbCBiZSBjYWNoZWQsIGRlZmF1bHQgaXMKIAkgKiBTU0xfU0VTU0lPTl9DQUNIRV9NQVhfU0laRV9ERUZBVUxULiAwIGlzIHVubGltaXRlZC4gKi8KIAl1bnNpZ25lZCBsb25nIHNlc3Npb25fY2FjaGVfc2l6ZTsKQEAgLTc3Niw2ICs4MTksMTIgQEAKIAogCWludCBxdWlldF9zaHV0ZG93bjsKIAorCS8qIE1heGltdW0gYW1vdW50IG9mIGRhdGEgdG8gc2VuZCBpbiBvbmUgZnJhZ21lbnQuCisJICogYWN0dWFsIHJlY29yZCBzaXplIGNhbiBiZSBtb3JlIHRoYW4gdGhpcyBkdWUgdG8KKwkgKiBwYWRkaW5nIGFuZCBNQUMgb3ZlcmhlYWRzLgorCSAqLworCXVuc2lnbmVkIGludCBtYXhfc2VuZF9mcmFnbWVudDsKKwogI2lmbmRlZiBPUEVOU1NMX0VOR0lORQogCS8qIEVuZ2luZSB0byBwYXNzIHJlcXVlc3RzIGZvciBjbGllbnQgY2VydHMgdG8KIAkgKi8KQEAgLTc5NCwxNCArODQzLDMzIEBACiAJaW50ICgqdGxzZXh0X3RpY2tldF9rZXlfY2IpKFNTTCAqc3NsLAogCQkJCQl1bnNpZ25lZCBjaGFyICpuYW1lLCB1bnNpZ25lZCBjaGFyICppdiwKIAkJCQkJRVZQX0NJUEhFUl9DVFggKmVjdHgsCi0JCQkJCUhNQUNfQ1RYICpoY3R4LCBpbnQgZW5jKTsKKyAJCQkJCUhNQUNfQ1RYICpoY3R4LCBpbnQgZW5jKTsKIAogCS8qIGNlcnRpZmljYXRlIHN0YXR1cyByZXF1ZXN0IGluZm8gKi8KIAkvKiBDYWxsYmFjayBmb3Igc3RhdHVzIHJlcXVlc3QgKi8KIAlpbnQgKCp0bHNleHRfc3RhdHVzX2NiKShTU0wgKnNzbCwgdm9pZCAqYXJnKTsKIAl2b2lkICp0bHNleHRfc3RhdHVzX2FyZzsKKworCS8qIGRyYWZ0LXJlc2NvcmxhLXRscy1vcGFxdWUtcHJmLWlucHV0LTAwLnR4dCBpbmZvcm1hdGlvbiAqLworCWludCAoKnRsc2V4dF9vcGFxdWVfcHJmX2lucHV0X2NhbGxiYWNrKShTU0wgKiwgdm9pZCAqcGVlcmlucHV0LCBzaXplX3QgbGVuLCB2b2lkICphcmcpOworCXZvaWQgKnRsc2V4dF9vcGFxdWVfcHJmX2lucHV0X2NhbGxiYWNrX2FyZzsKICNlbmRpZgogCisjaWZuZGVmIE9QRU5TU0xfTk9fUFNLCisJY2hhciAqcHNrX2lkZW50aXR5X2hpbnQ7CisJdW5zaWduZWQgaW50ICgqcHNrX2NsaWVudF9jYWxsYmFjaykoU1NMICpzc2wsIGNvbnN0IGNoYXIgKmhpbnQsIGNoYXIgKmlkZW50aXR5LAorCQl1bnNpZ25lZCBpbnQgbWF4X2lkZW50aXR5X2xlbiwgdW5zaWduZWQgY2hhciAqcHNrLAorCQl1bnNpZ25lZCBpbnQgbWF4X3Bza19sZW4pOworCXVuc2lnbmVkIGludCAoKnBza19zZXJ2ZXJfY2FsbGJhY2spKFNTTCAqc3NsLCBjb25zdCBjaGFyICppZGVudGl0eSwKKwkJdW5zaWduZWQgY2hhciAqcHNrLCB1bnNpZ25lZCBpbnQgbWF4X3Bza19sZW4pOworI2VuZGlmCisKKyNpZm5kZWYgT1BFTlNTTF9OT19CVUZfRlJFRUxJU1RTCisjZGVmaW5lIFNTTF9NQVhfQlVGX0ZSRUVMSVNUX0xFTl9ERUZBVUxUIDMyCisJdW5zaWduZWQgaW50IGZyZWVsaXN0X21heF9sZW47CisJc3RydWN0IHNzbDNfYnVmX2ZyZWVsaXN0X3N0ICp3YnVmX2ZyZWVsaXN0OworCXN0cnVjdCBzc2wzX2J1Zl9mcmVlbGlzdF9zdCAqcmJ1Zl9mcmVlbGlzdDsKKyNlbmRpZgogCX07CiAKICNkZWZpbmUgU1NMX1NFU1NfQ0FDSEVfT0ZGCQkJMHgwMDAwCkBAIC04MTUsNyArODgzLDcgQEAKICNkZWZpbmUgU1NMX1NFU1NfQ0FDSEVfTk9fSU5URVJOQUwgXAogCShTU0xfU0VTU19DQUNIRV9OT19JTlRFUk5BTF9MT09LVVB8U1NMX1NFU1NfQ0FDSEVfTk9fSU5URVJOQUxfU1RPUkUpCiAKLSAgc3RydWN0IGxoYXNoX3N0ICpTU0xfQ1RYX3Nlc3Npb25zKFNTTF9DVFggKmN0eCk7CitMSEFTSF9PRihTU0xfU0VTU0lPTikgKlNTTF9DVFhfc2Vzc2lvbnMoU1NMX0NUWCAqY3R4KTsKICNkZWZpbmUgU1NMX0NUWF9zZXNzX251bWJlcihjdHgpIFwKIAlTU0xfQ1RYX2N0cmwoY3R4LFNTTF9DVFJMX1NFU1NfTlVNQkVSLDAsTlVMTCkKICNkZWZpbmUgU1NMX0NUWF9zZXNzX2Nvbm5lY3QoY3R4KSBcCkBAIC04NTcsNiArOTI1LDMxIEBACiB2b2lkIFNTTF9DVFhfc2V0X2Nvb2tpZV9nZW5lcmF0ZV9jYihTU0xfQ1RYICpjdHgsIGludCAoKmFwcF9nZW5fY29va2llX2NiKShTU0wgKnNzbCwgdW5zaWduZWQgY2hhciAqY29va2llLCB1bnNpZ25lZCBpbnQgKmNvb2tpZV9sZW4pKTsKIHZvaWQgU1NMX0NUWF9zZXRfY29va2llX3ZlcmlmeV9jYihTU0xfQ1RYICpjdHgsIGludCAoKmFwcF92ZXJpZnlfY29va2llX2NiKShTU0wgKnNzbCwgdW5zaWduZWQgY2hhciAqY29va2llLCB1bnNpZ25lZCBpbnQgY29va2llX2xlbikpOwogCisjaWZuZGVmIE9QRU5TU0xfTk9fUFNLCisvKiB0aGUgbWF4aW11bSBsZW5ndGggb2YgdGhlIGJ1ZmZlciBnaXZlbiB0byBjYWxsYmFja3MgY29udGFpbmluZyB0aGUKKyAqIHJlc3VsdGluZyBpZGVudGl0eS9wc2sgKi8KKyNkZWZpbmUgUFNLX01BWF9JREVOVElUWV9MRU4gMTI4CisjZGVmaW5lIFBTS19NQVhfUFNLX0xFTiAyNTYKK3ZvaWQgU1NMX0NUWF9zZXRfcHNrX2NsaWVudF9jYWxsYmFjayhTU0xfQ1RYICpjdHgsIAorCXVuc2lnbmVkIGludCAoKnBza19jbGllbnRfY2FsbGJhY2spKFNTTCAqc3NsLCBjb25zdCBjaGFyICpoaW50LCAKKwkJY2hhciAqaWRlbnRpdHksIHVuc2lnbmVkIGludCBtYXhfaWRlbnRpdHlfbGVuLCB1bnNpZ25lZCBjaGFyICpwc2ssCisJCXVuc2lnbmVkIGludCBtYXhfcHNrX2xlbikpOwordm9pZCBTU0xfc2V0X3Bza19jbGllbnRfY2FsbGJhY2soU1NMICpzc2wsIAorCXVuc2lnbmVkIGludCAoKnBza19jbGllbnRfY2FsbGJhY2spKFNTTCAqc3NsLCBjb25zdCBjaGFyICpoaW50LCAKKwkJY2hhciAqaWRlbnRpdHksIHVuc2lnbmVkIGludCBtYXhfaWRlbnRpdHlfbGVuLCB1bnNpZ25lZCBjaGFyICpwc2ssCisJCXVuc2lnbmVkIGludCBtYXhfcHNrX2xlbikpOwordm9pZCBTU0xfQ1RYX3NldF9wc2tfc2VydmVyX2NhbGxiYWNrKFNTTF9DVFggKmN0eCwgCisJdW5zaWduZWQgaW50ICgqcHNrX3NlcnZlcl9jYWxsYmFjaykoU1NMICpzc2wsIGNvbnN0IGNoYXIgKmlkZW50aXR5LAorCQl1bnNpZ25lZCBjaGFyICpwc2ssIHVuc2lnbmVkIGludCBtYXhfcHNrX2xlbikpOwordm9pZCBTU0xfc2V0X3Bza19zZXJ2ZXJfY2FsbGJhY2soU1NMICpzc2wsCisJdW5zaWduZWQgaW50ICgqcHNrX3NlcnZlcl9jYWxsYmFjaykoU1NMICpzc2wsIGNvbnN0IGNoYXIgKmlkZW50aXR5LAorCQl1bnNpZ25lZCBjaGFyICpwc2ssIHVuc2lnbmVkIGludCBtYXhfcHNrX2xlbikpOworaW50IFNTTF9DVFhfdXNlX3Bza19pZGVudGl0eV9oaW50KFNTTF9DVFggKmN0eCwgY29uc3QgY2hhciAqaWRlbnRpdHlfaGludCk7CitpbnQgU1NMX3VzZV9wc2tfaWRlbnRpdHlfaGludChTU0wgKnMsIGNvbnN0IGNoYXIgKmlkZW50aXR5X2hpbnQpOworY29uc3QgY2hhciAqU1NMX2dldF9wc2tfaWRlbnRpdHlfaGludChjb25zdCBTU0wgKnMpOworY29uc3QgY2hhciAqU1NMX2dldF9wc2tfaWRlbnRpdHkoY29uc3QgU1NMICpzKTsKKyNlbmRpZgorCiAjZGVmaW5lIFNTTF9OT1RISU5HCTEKICNkZWZpbmUgU1NMX1dSSVRJTkcJMgogI2RlZmluZSBTU0xfUkVBRElORwkzCkBAIC04NjgsNiArOTYxLDkgQEAKICNkZWZpbmUgU1NMX3dhbnRfd3JpdGUocykJKFNTTF93YW50KHMpID09IFNTTF9XUklUSU5HKQogI2RlZmluZSBTU0xfd2FudF94NTA5X2xvb2t1cChzKQkoU1NMX3dhbnQocykgPT0gU1NMX1g1MDlfTE9PS1VQKQogCisjZGVmaW5lIFNTTF9NQUNfRkxBR19SRUFEX01BQ19TVFJFQU0gMQorI2RlZmluZSBTU0xfTUFDX0ZMQUdfV1JJVEVfTUFDX1NUUkVBTSAyCisKIHN0cnVjdCBzc2xfc3QKIAl7CiAJLyogcHJvdG9jb2wgdmVyc2lvbgpAQCAtODc2LDcgKzk3Miw3IEBACiAJaW50IHZlcnNpb247CiAJaW50IHR5cGU7IC8qIFNTTF9TVF9DT05ORUNUIG9yIFNTTF9TVF9BQ0NFUFQgKi8KIAotCVNTTF9NRVRIT0QgKm1ldGhvZDsgLyogU1NMdjMgKi8KKwljb25zdCBTU0xfTUVUSE9EICptZXRob2Q7IC8qIFNTTHYzICovCiAKIAkvKiBUaGVyZSBhcmUgMiBCSU8ncyBldmVuIHRob3VnaCB0aGV5IGFyZSBub3JtYWxseSBib3RoIHRoZQogCSAqIHNhbWUuICBUaGlzIGlzIHNvIGRhdGEgY2FuIGJlIHJlYWQgYW5kIHdyaXR0ZW4gdG8gZGlmZmVyZW50CkBAIC05NTksOSArMTA1NSw5IEBACiAKIAkvKiBUaGVzZSBhcmUgdGhlIG9uZXMgYmVpbmcgdXNlZCwgdGhlIG9uZXMgaW4gU1NMX1NFU1NJT04gYXJlCiAJICogdGhlIG9uZXMgdG8gYmUgJ2NvcGllZCcgaW50byB0aGVzZSBvbmVzICovCi0KKwlpbnQgbWFjX2ZsYWdzOyAKIAlFVlBfQ0lQSEVSX0NUWCAqZW5jX3JlYWRfY3R4OwkJLyogY3J5cHRvZ3JhcGhpYyBzdGF0ZSAqLwotCWNvbnN0IEVWUF9NRCAqcmVhZF9oYXNoOwkJLyogdXNlZCBmb3IgbWFjIGdlbmVyYXRpb24gKi8KKwlFVlBfTURfQ1RYICpyZWFkX2hhc2g7CQkvKiB1c2VkIGZvciBtYWMgZ2VuZXJhdGlvbiAqLwogI2lmbmRlZiBPUEVOU1NMX05PX0NPTVAKIAlDT01QX0NUWCAqZXhwYW5kOwkJCS8qIHVuY29tcHJlc3MgKi8KICNlbHNlCkBAIC05NjksNyArMTA2NSw3IEBACiAjZW5kaWYKIAogCUVWUF9DSVBIRVJfQ1RYICplbmNfd3JpdGVfY3R4OwkJLyogY3J5cHRvZ3JhcGhpYyBzdGF0ZSAqLwotCWNvbnN0IEVWUF9NRCAqd3JpdGVfaGFzaDsJCS8qIHVzZWQgZm9yIG1hYyBnZW5lcmF0aW9uICovCisJRVZQX01EX0NUWCAqd3JpdGVfaGFzaDsJCS8qIHVzZWQgZm9yIG1hYyBnZW5lcmF0aW9uICovCiAjaWZuZGVmIE9QRU5TU0xfTk9fQ09NUAogCUNPTVBfQ1RYICpjb21wcmVzczsJCQkvKiBjb21wcmVzc2lvbiAqLwogI2Vsc2UKQEAgLTEwMDcsNiArMTEwMywxNCBAQAogCUtTU0xfQ1RYICprc3NsX2N0eDsgICAgIC8qIEtlcmJlcm9zIDUgY29udGV4dCAqLwogI2VuZGlmCS8qIE9QRU5TU0xfTk9fS1JCNSAqLwogCisjaWZuZGVmIE9QRU5TU0xfTk9fUFNLCisJdW5zaWduZWQgaW50ICgqcHNrX2NsaWVudF9jYWxsYmFjaykoU1NMICpzc2wsIGNvbnN0IGNoYXIgKmhpbnQsIGNoYXIgKmlkZW50aXR5LAorCQl1bnNpZ25lZCBpbnQgbWF4X2lkZW50aXR5X2xlbiwgdW5zaWduZWQgY2hhciAqcHNrLAorCQl1bnNpZ25lZCBpbnQgbWF4X3Bza19sZW4pOworCXVuc2lnbmVkIGludCAoKnBza19zZXJ2ZXJfY2FsbGJhY2spKFNTTCAqc3NsLCBjb25zdCBjaGFyICppZGVudGl0eSwKKwkJdW5zaWduZWQgY2hhciAqcHNrLCB1bnNpZ25lZCBpbnQgbWF4X3Bza19sZW4pOworI2VuZGlmCisKIAlTU0xfQ1RYICpjdHg7CiAJLyogc2V0IHRoaXMgZmxhZyB0byAxIGFuZCBhIHNsZWVwKDEpIGlzIHB1dCBpbnRvIGFsbCBTU0xfcmVhZCgpCiAJICogYW5kIFNTTF93cml0ZSgpIGNhbGxzLCBnb29kIGZvciBuYmlvIGRlYnVnaW5nIDotKSAqLwpAQCAtMTAyNiw2ICsxMTMwLDcgQEAKIAlpbnQgZmlyc3RfcGFja2V0OwogCWludCBjbGllbnRfdmVyc2lvbjsJLyogd2hhdCB3YXMgcGFzc2VkLCB1c2VkIGZvcgogCQkJCSAqIFNTTHYzL1RMUyByb2xsYmFjayBjaGVjayAqLworCXVuc2lnbmVkIGludCBtYXhfc2VuZF9mcmFnbWVudDsKICNpZm5kZWYgT1BFTlNTTF9OT19UTFNFWFQKIAkvKiBUTFMgZXh0ZW5zaW9uIGRlYnVnIGNhbGxiYWNrICovCiAJdm9pZCAoKnRsc2V4dF9kZWJ1Z19jYikoU1NMICpzLCBpbnQgY2xpZW50X3NlcnZlciwgaW50IHR5cGUsCkBAIC0xMDUyLDExICsxMTU3LDMzIEBACiAKIAkvKiBSRkM0NTA3IHNlc3Npb24gdGlja2V0IGV4cGVjdGVkIHRvIGJlIHJlY2VpdmVkIG9yIHNlbnQgKi8KIAlpbnQgdGxzZXh0X3RpY2tldF9leHBlY3RlZDsKKyNpZm5kZWYgT1BFTlNTTF9OT19FQworCXNpemVfdCB0bHNleHRfZWNwb2ludGZvcm1hdGxpc3RfbGVuZ3RoOworCXVuc2lnbmVkIGNoYXIgKnRsc2V4dF9lY3BvaW50Zm9ybWF0bGlzdDsgLyogb3VyIGxpc3QgKi8KKwlzaXplX3QgdGxzZXh0X2VsbGlwdGljY3VydmVsaXN0X2xlbmd0aDsKKwl1bnNpZ25lZCBjaGFyICp0bHNleHRfZWxsaXB0aWNjdXJ2ZWxpc3Q7IC8qIG91ciBsaXN0ICovCisjZW5kaWYgLyogT1BFTlNTTF9OT19FQyAqLworCisJLyogZHJhZnQtcmVzY29ybGEtdGxzLW9wYXF1ZS1wcmYtaW5wdXQtMDAudHh0IGluZm9ybWF0aW9uIHRvIGJlIHVzZWQgZm9yIGhhbmRzaGFrZXMgKi8KKwl2b2lkICp0bHNleHRfb3BhcXVlX3ByZl9pbnB1dDsKKwlzaXplX3QgdGxzZXh0X29wYXF1ZV9wcmZfaW5wdXRfbGVuOworCisJLyogVExTIFNlc3Npb24gVGlja2V0IGV4dGVuc2lvbiBvdmVycmlkZSAqLworCVRMU19TRVNTSU9OX1RJQ0tFVF9FWFQgKnRsc2V4dF9zZXNzaW9uX3RpY2tldDsKKworCS8qIFRMUyBTZXNzaW9uIFRpY2tldCBleHRlbnNpb24gY2FsbGJhY2sgKi8KKwl0bHNfc2Vzc2lvbl90aWNrZXRfZXh0X2NiX2ZuIHRsc19zZXNzaW9uX3RpY2tldF9leHRfY2I7CisJdm9pZCAqdGxzX3Nlc3Npb25fdGlja2V0X2V4dF9jYl9hcmc7CisKKwkvKiBUTFMgcHJlLXNoYXJlZCBzZWNyZXQgc2Vzc2lvbiByZXN1bXB0aW9uICovCisJdGxzX3Nlc3Npb25fc2VjcmV0X2NiX2ZuIHRsc19zZXNzaW9uX3NlY3JldF9jYjsKKwl2b2lkICp0bHNfc2Vzc2lvbl9zZWNyZXRfY2JfYXJnOworCiAJU1NMX0NUWCAqIGluaXRpYWxfY3R4OyAvKiBpbml0aWFsIGN0eCwgdXNlZCB0byBzdG9yZSBzZXNzaW9ucyAqLwogI2RlZmluZSBzZXNzaW9uX2N0eCBpbml0aWFsX2N0eAogI2Vsc2UKICNkZWZpbmUgc2Vzc2lvbl9jdHggY3R4Ci0jZW5kaWYKKyNlbmRpZiAvKiBPUEVOU1NMX05PX1RMU0VYVCAqLwogCX07CiAKICNpZmRlZiBfX2NwbHVzcGx1cwpAQCAtMTE2MywyMCArMTI5MCwxMyBAQAogI2RlZmluZSBTU0xfZ2V0X3RpbWVvdXQoYSkJU1NMX1NFU1NJT05fZ2V0X3RpbWVvdXQoYSkKICNkZWZpbmUgU1NMX3NldF90aW1lb3V0KGEsYikJU1NMX1NFU1NJT05fc2V0X3RpbWVvdXQoKGEpLChiKSkKIAotI2lmIDEgLypTU0xFQVlfTUFDUk9TKi8KICNkZWZpbmUgZDJpX1NTTF9TRVNTSU9OX2JpbyhicCxzX2lkKSBBU04xX2QyaV9iaW9fb2YoU1NMX1NFU1NJT04sU1NMX1NFU1NJT05fbmV3LGQyaV9TU0xfU0VTU0lPTixicCxzX2lkKQogI2RlZmluZSBpMmRfU1NMX1NFU1NJT05fYmlvKGJwLHNfaWQpIEFTTjFfaTJkX2Jpb19vZihTU0xfU0VTU0lPTixpMmRfU1NMX1NFU1NJT04sYnAsc19pZCkKLSNkZWZpbmUgUEVNX3JlYWRfU1NMX1NFU1NJT04oZnAseCxjYix1KSAoU1NMX1NFU1NJT04gKilQRU1fQVNOMV9yZWFkKCBcCi0JKGNoYXIgKigqKSgpKWQyaV9TU0xfU0VTU0lPTixQRU1fU1RSSU5HX1NTTF9TRVNTSU9OLGZwLChjaGFyICoqKXgsY2IsdSkKLSNkZWZpbmUgUEVNX3JlYWRfYmlvX1NTTF9TRVNTSU9OKGJwLHgsY2IsdSkgUEVNX0FTTjFfcmVhZF9iaW9fb2YoU1NMX1NFU1NJT04sZDJpX1NTTF9TRVNTSU9OLFBFTV9TVFJJTkdfU1NMX1NFU1NJT04sYnAseCxjYix1KQotI2RlZmluZSBQRU1fd3JpdGVfU1NMX1NFU1NJT04oZnAseCkgXAotCVBFTV9BU04xX3dyaXRlKChpbnQgKCopKCkpaTJkX1NTTF9TRVNTSU9OLCBcCi0JCVBFTV9TVFJJTkdfU1NMX1NFU1NJT04sZnAsIChjaGFyICopeCwgTlVMTCxOVUxMLDAsTlVMTCxOVUxMKQotI2RlZmluZSBQRU1fd3JpdGVfYmlvX1NTTF9TRVNTSU9OKGJwLHgpIFwKLQlQRU1fQVNOMV93cml0ZV9iaW9fb2YoU1NMX1NFU1NJT04saTJkX1NTTF9TRVNTSU9OLFBFTV9TVFJJTkdfU1NMX1NFU1NJT04sYnAseCxOVUxMLE5VTEwsMCxOVUxMLE5VTEwpCi0jZW5kaWYKIAotI2RlZmluZSBTU0xfQURfUkVBU09OX09GRlNFVAkJMTAwMAorREVDTEFSRV9QRU1fcncoU1NMX1NFU1NJT04sIFNTTF9TRVNTSU9OKQorCisjZGVmaW5lIFNTTF9BRF9SRUFTT05fT0ZGU0VUCQkxMDAwIC8qIG9mZnNldCB0byBnZXQgU1NMX1JfLi4uIHZhbHVlIGZyb20gU1NMX0FEXy4uLiAqLworCiAvKiBUaGVzZSBhbGVydCB0eXBlcyBhcmUgZm9yIFNTTHYzIGFuZCBUTFN2MSAqLwogI2RlZmluZSBTU0xfQURfQ0xPU0VfTk9USUZZCQlTU0wzX0FEX0NMT1NFX05PVElGWQogI2RlZmluZSBTU0xfQURfVU5FWFBFQ1RFRF9NRVNTQUdFCVNTTDNfQURfVU5FWFBFQ1RFRF9NRVNTQUdFIC8qIGZhdGFsICovCkBAIC0xMjA2LDYgKzEzMjYsOCBAQAogI2RlZmluZSBTU0xfQURfQ0VSVElGSUNBVEVfVU5PQlRBSU5BQkxFIFRMUzFfQURfQ0VSVElGSUNBVEVfVU5PQlRBSU5BQkxFCiAjZGVmaW5lIFNTTF9BRF9VTlJFQ09HTklaRURfTkFNRQlUTFMxX0FEX1VOUkVDT0dOSVpFRF9OQU1FCiAjZGVmaW5lIFNTTF9BRF9CQURfQ0VSVElGSUNBVEVfU1RBVFVTX1JFU1BPTlNFIFRMUzFfQURfQkFEX0NFUlRJRklDQVRFX1NUQVRVU19SRVNQT05TRQorI2RlZmluZSBTU0xfQURfQkFEX0NFUlRJRklDQVRFX0hBU0hfVkFMVUUgVExTMV9BRF9CQURfQ0VSVElGSUNBVEVfSEFTSF9WQUxVRQorI2RlZmluZSBTU0xfQURfVU5LTk9XTl9QU0tfSURFTlRJVFkgICAgIFRMUzFfQURfVU5LTk9XTl9QU0tfSURFTlRJVFkgLyogZmF0YWwgKi8KIAogI2RlZmluZSBTU0xfRVJST1JfTk9ORQkJCTAKICNkZWZpbmUgU1NMX0VSUk9SX1NTTAkJCTEKQEAgLTEyNjQsNiArMTM4Niw4IEBACiAjZGVmaW5lIFNTTF9DVFJMX0dFVF9NQVhfQ0VSVF9MSVNUCQk1MAogI2RlZmluZSBTU0xfQ1RSTF9TRVRfTUFYX0NFUlRfTElTVAkJNTEKIAorI2RlZmluZSBTU0xfQ1RSTF9TRVRfTUFYX1NFTkRfRlJBR01FTlQJCTUyCisKIC8qIHNlZSB0bHMxLmggZm9yIG1hY3JvcyBiYXNlZCBvbiB0aGVzZSAqLwogI2lmbmRlZiBPUEVOU1NMX05PX1RMU0VYVAogI2RlZmluZSBTU0xfQ1RSTF9TRVRfVExTRVhUX1NFUlZFUk5BTUVfQ0IJNTMKQEAgLTEyNzMsNyArMTM5Nyw5IEBACiAjZGVmaW5lIFNTTF9DVFJMX1NFVF9UTFNFWFRfREVCVUdfQVJHCQk1NwogI2RlZmluZSBTU0xfQ1RSTF9HRVRfVExTRVhUX1RJQ0tFVF9LRVlTCQk1OAogI2RlZmluZSBTU0xfQ1RSTF9TRVRfVExTRVhUX1RJQ0tFVF9LRVlTCQk1OQotCisjZGVmaW5lIFNTTF9DVFJMX1NFVF9UTFNFWFRfT1BBUVVFX1BSRl9JTlBVVAk2MAorI2RlZmluZSBTU0xfQ1RSTF9TRVRfVExTRVhUX09QQVFVRV9QUkZfSU5QVVRfQ0IJNjEKKyNkZWZpbmUgU1NMX0NUUkxfU0VUX1RMU0VYVF9PUEFRVUVfUFJGX0lOUFVUX0NCX0FSRyA2MgogI2RlZmluZSBTU0xfQ1RSTF9TRVRfVExTRVhUX1NUQVRVU19SRVFfQ0IJNjMKICNkZWZpbmUgU1NMX0NUUkxfU0VUX1RMU0VYVF9TVEFUVVNfUkVRX0NCX0FSRwk2NAogI2RlZmluZSBTU0xfQ1RSTF9TRVRfVExTRVhUX1NUQVRVU19SRVFfVFlQRQk2NQpAQCAtMTM0Myw3ICsxNDY5LDcgQEAKICNlbmRpZgogCiBpbnQJU1NMX0NUWF9zZXRfY2lwaGVyX2xpc3QoU1NMX0NUWCAqLGNvbnN0IGNoYXIgKnN0cik7Ci1TU0xfQ1RYICpTU0xfQ1RYX25ldyhTU0xfTUVUSE9EICptZXRoKTsKK1NTTF9DVFggKlNTTF9DVFhfbmV3KGNvbnN0IFNTTF9NRVRIT0QgKm1ldGgpOwogdm9pZAlTU0xfQ1RYX2ZyZWUoU1NMX0NUWCAqKTsKIGxvbmcgU1NMX0NUWF9zZXRfdGltZW91dChTU0xfQ1RYICpjdHgsbG9uZyB0KTsKIGxvbmcgU1NMX0NUWF9nZXRfdGltZW91dChjb25zdCBTU0xfQ1RYICpjdHgpOwpAQCAtMTM1NCw3ICsxNDgwLDcgQEAKIAogdm9pZAlTU0xfQ1RYX2ZsdXNoX3Nlc3Npb25zKFNTTF9DVFggKmN0eCxsb25nIHRtKTsKIAotU1NMX0NJUEhFUiAqU1NMX2dldF9jdXJyZW50X2NpcGhlcihjb25zdCBTU0wgKnMpOworY29uc3QgU1NMX0NJUEhFUiAqU1NMX2dldF9jdXJyZW50X2NpcGhlcihjb25zdCBTU0wgKnMpOwogaW50CVNTTF9DSVBIRVJfZ2V0X2JpdHMoY29uc3QgU1NMX0NJUEhFUiAqYyxpbnQgKmFsZ19iaXRzKTsKIGNoYXIgKglTU0xfQ0lQSEVSX2dldF92ZXJzaW9uKGNvbnN0IFNTTF9DSVBIRVIgKmMpOwogY29uc3QgY2hhciAqCVNTTF9DSVBIRVJfZ2V0X25hbWUoY29uc3QgU1NMX0NJUEhFUiAqYyk7CkBAIC0xNDI1LDkgKzE1NTEsOCBAQAogdm9pZAlTU0xfY29weV9zZXNzaW9uX2lkKFNTTCAqdG8sY29uc3QgU1NMICpmcm9tKTsKIAogU1NMX1NFU1NJT04gKlNTTF9TRVNTSU9OX25ldyh2b2lkKTsKLXVuc2lnbmVkIGxvbmcgU1NMX1NFU1NJT05faGFzaChjb25zdCBTU0xfU0VTU0lPTiAqYSk7Ci1pbnQJU1NMX1NFU1NJT05fY21wKGNvbnN0IFNTTF9TRVNTSU9OICphLGNvbnN0IFNTTF9TRVNTSU9OICpiKTsKLWNvbnN0IHVuc2lnbmVkIGNoYXIgKlNTTF9TRVNTSU9OX2dldF9pZChjb25zdCBTU0xfU0VTU0lPTiAqcywgdW5zaWduZWQgaW50ICpsZW4pOworY29uc3QgdW5zaWduZWQgY2hhciAqU1NMX1NFU1NJT05fZ2V0X2lkKGNvbnN0IFNTTF9TRVNTSU9OICpzLAorCQkJCQl1bnNpZ25lZCBpbnQgKmxlbik7CiAjaWZuZGVmIE9QRU5TU0xfTk9fRlBfQVBJCiBpbnQJU1NMX1NFU1NJT05fcHJpbnRfZnAoRklMRSAqZnAsY29uc3QgU1NMX1NFU1NJT04gKnNlcyk7CiAjZW5kaWYKQEAgLTE0ODcsNiArMTYxMiw5IEBACiBpbnQgU1NMX0NUWF9zZXRfdHJ1c3QoU1NMX0NUWCAqcywgaW50IHRydXN0KTsKIGludCBTU0xfc2V0X3RydXN0KFNTTCAqcywgaW50IHRydXN0KTsKIAoraW50IFNTTF9DVFhfc2V0MV9wYXJhbShTU0xfQ1RYICpjdHgsIFg1MDlfVkVSSUZZX1BBUkFNICp2cG0pOworaW50IFNTTF9zZXQxX3BhcmFtKFNTTCAqc3NsLCBYNTA5X1ZFUklGWV9QQVJBTSAqdnBtKTsKKwogdm9pZAlTU0xfZnJlZShTU0wgKnNzbCk7CiBpbnQgCVNTTF9hY2NlcHQoU1NMICpzc2wpOwogaW50IAlTU0xfY29ubmVjdChTU0wgKnNzbCk7CkBAIC0xNTAyLDI3ICsxNjMwLDI5IEBACiBjb25zdCBjaGFyICpTU0xfZ2V0X3ZlcnNpb24oY29uc3QgU1NMICpzKTsKIAogLyogVGhpcyBzZXRzIHRoZSAnZGVmYXVsdCcgU1NMIHZlcnNpb24gdGhhdCBTU0xfbmV3KCkgd2lsbCBjcmVhdGUgKi8KLWludCBTU0xfQ1RYX3NldF9zc2xfdmVyc2lvbihTU0xfQ1RYICpjdHgsU1NMX01FVEhPRCAqbWV0aCk7CitpbnQgU1NMX0NUWF9zZXRfc3NsX3ZlcnNpb24oU1NMX0NUWCAqY3R4LCBjb25zdCBTU0xfTUVUSE9EICptZXRoKTsKIAotU1NMX01FVEhPRCAqU1NMdjJfbWV0aG9kKHZvaWQpOwkJLyogU1NMdjIgKi8KLVNTTF9NRVRIT0QgKlNTTHYyX3NlcnZlcl9tZXRob2Qodm9pZCk7CS8qIFNTTHYyICovCi1TU0xfTUVUSE9EICpTU0x2Ml9jbGllbnRfbWV0aG9kKHZvaWQpOwkvKiBTU0x2MiAqLworI2lmbmRlZiBPUEVOU1NMX05PX1NTTDIKK2NvbnN0IFNTTF9NRVRIT0QgKlNTTHYyX21ldGhvZCh2b2lkKTsJCS8qIFNTTHYyICovCitjb25zdCBTU0xfTUVUSE9EICpTU0x2Ml9zZXJ2ZXJfbWV0aG9kKHZvaWQpOwkvKiBTU0x2MiAqLworY29uc3QgU1NMX01FVEhPRCAqU1NMdjJfY2xpZW50X21ldGhvZCh2b2lkKTsJLyogU1NMdjIgKi8KKyNlbmRpZgogCi1TU0xfTUVUSE9EICpTU0x2M19tZXRob2Qodm9pZCk7CQkvKiBTU0x2MyAqLwotU1NMX01FVEhPRCAqU1NMdjNfc2VydmVyX21ldGhvZCh2b2lkKTsJLyogU1NMdjMgKi8KLVNTTF9NRVRIT0QgKlNTTHYzX2NsaWVudF9tZXRob2Qodm9pZCk7CS8qIFNTTHYzICovCitjb25zdCBTU0xfTUVUSE9EICpTU0x2M19tZXRob2Qodm9pZCk7CQkvKiBTU0x2MyAqLworY29uc3QgU1NMX01FVEhPRCAqU1NMdjNfc2VydmVyX21ldGhvZCh2b2lkKTsJLyogU1NMdjMgKi8KK2NvbnN0IFNTTF9NRVRIT0QgKlNTTHYzX2NsaWVudF9tZXRob2Qodm9pZCk7CS8qIFNTTHYzICovCiAKLVNTTF9NRVRIT0QgKlNTTHYyM19tZXRob2Qodm9pZCk7CS8qIFNTTHYzIGJ1dCBjYW4gcm9sbGJhY2sgdG8gdjIgKi8KLVNTTF9NRVRIT0QgKlNTTHYyM19zZXJ2ZXJfbWV0aG9kKHZvaWQpOwkvKiBTU0x2MyBidXQgY2FuIHJvbGxiYWNrIHRvIHYyICovCi1TU0xfTUVUSE9EICpTU0x2MjNfY2xpZW50X21ldGhvZCh2b2lkKTsJLyogU1NMdjMgYnV0IGNhbiByb2xsYmFjayB0byB2MiAqLworY29uc3QgU1NMX01FVEhPRCAqU1NMdjIzX21ldGhvZCh2b2lkKTsJLyogU1NMdjMgYnV0IGNhbiByb2xsYmFjayB0byB2MiAqLworY29uc3QgU1NMX01FVEhPRCAqU1NMdjIzX3NlcnZlcl9tZXRob2Qodm9pZCk7CS8qIFNTTHYzIGJ1dCBjYW4gcm9sbGJhY2sgdG8gdjIgKi8KK2NvbnN0IFNTTF9NRVRIT0QgKlNTTHYyM19jbGllbnRfbWV0aG9kKHZvaWQpOwkvKiBTU0x2MyBidXQgY2FuIHJvbGxiYWNrIHRvIHYyICovCiAKLVNTTF9NRVRIT0QgKlRMU3YxX21ldGhvZCh2b2lkKTsJCS8qIFRMU3YxLjAgKi8KLVNTTF9NRVRIT0QgKlRMU3YxX3NlcnZlcl9tZXRob2Qodm9pZCk7CS8qIFRMU3YxLjAgKi8KLVNTTF9NRVRIT0QgKlRMU3YxX2NsaWVudF9tZXRob2Qodm9pZCk7CS8qIFRMU3YxLjAgKi8KK2NvbnN0IFNTTF9NRVRIT0QgKlRMU3YxX21ldGhvZCh2b2lkKTsJCS8qIFRMU3YxLjAgKi8KK2NvbnN0IFNTTF9NRVRIT0QgKlRMU3YxX3NlcnZlcl9tZXRob2Qodm9pZCk7CS8qIFRMU3YxLjAgKi8KK2NvbnN0IFNTTF9NRVRIT0QgKlRMU3YxX2NsaWVudF9tZXRob2Qodm9pZCk7CS8qIFRMU3YxLjAgKi8KIAotU1NMX01FVEhPRCAqRFRMU3YxX21ldGhvZCh2b2lkKTsJCS8qIERUTFN2MS4wICovCi1TU0xfTUVUSE9EICpEVExTdjFfc2VydmVyX21ldGhvZCh2b2lkKTsJLyogRFRMU3YxLjAgKi8KLVNTTF9NRVRIT0QgKkRUTFN2MV9jbGllbnRfbWV0aG9kKHZvaWQpOwkvKiBEVExTdjEuMCAqLworY29uc3QgU1NMX01FVEhPRCAqRFRMU3YxX21ldGhvZCh2b2lkKTsJCS8qIERUTFN2MS4wICovCitjb25zdCBTU0xfTUVUSE9EICpEVExTdjFfc2VydmVyX21ldGhvZCh2b2lkKTsJLyogRFRMU3YxLjAgKi8KK2NvbnN0IFNTTF9NRVRIT0QgKkRUTFN2MV9jbGllbnRfbWV0aG9kKHZvaWQpOwkvKiBEVExTdjEuMCAqLwogCiBTVEFDS19PRihTU0xfQ0lQSEVSKSAqU1NMX2dldF9jaXBoZXJzKGNvbnN0IFNTTCAqcyk7CiAKQEAgLTE1MzEsOCArMTY2MSw4IEBACiBpbnQgU1NMX3JlbmVnb3RpYXRlX3BlbmRpbmcoU1NMICpzKTsKIGludCBTU0xfc2h1dGRvd24oU1NMICpzKTsKIAotU1NMX01FVEhPRCAqU1NMX2dldF9zc2xfbWV0aG9kKFNTTCAqcyk7Ci1pbnQgU1NMX3NldF9zc2xfbWV0aG9kKFNTTCAqcyxTU0xfTUVUSE9EICptZXRob2QpOworY29uc3QgU1NMX01FVEhPRCAqU1NMX2dldF9zc2xfbWV0aG9kKFNTTCAqcyk7CitpbnQgU1NMX3NldF9zc2xfbWV0aG9kKFNTTCAqcywgY29uc3QgU1NMX01FVEhPRCAqbWV0aG9kKTsKIGNvbnN0IGNoYXIgKlNTTF9hbGVydF90eXBlX3N0cmluZ19sb25nKGludCB2YWx1ZSk7CiBjb25zdCBjaGFyICpTU0xfYWxlcnRfdHlwZV9zdHJpbmcoaW50IHZhbHVlKTsKIGNvbnN0IGNoYXIgKlNTTF9hbGVydF9kZXNjX3N0cmluZ19sb25nKGludCB2YWx1ZSk7CkBAIC0xNjI0LDYgKzE3NTQsMTEgQEAKICNkZWZpbmUgU1NMX3NldF9tYXhfY2VydF9saXN0KHNzbCxtKSBcCiAJU1NMX2N0cmwoc3NsLFNTTF9DVFJMX1NFVF9NQVhfQ0VSVF9MSVNULG0sTlVMTCkKIAorI2RlZmluZSBTU0xfQ1RYX3NldF9tYXhfc2VuZF9mcmFnbWVudChjdHgsbSkgXAorCVNTTF9DVFhfY3RybChjdHgsU1NMX0NUUkxfU0VUX01BWF9TRU5EX0ZSQUdNRU5ULG0sTlVMTCkKKyNkZWZpbmUgU1NMX3NldF9tYXhfc2VuZF9mcmFnbWVudChzc2wsbSkgXAorCVNTTF9jdHJsKHNzbCxTU0xfQ1RSTF9TRVRfTUFYX1NFTkRfRlJBR01FTlQsbSxOVUxMKQorCiAgICAgIC8qIE5COiB0aGUga2V5bGVuZ3RoIGlzIG9ubHkgYXBwbGljYWJsZSB3aGVuIGlzX2V4cG9ydCBpcyB0cnVlICovCiAjaWZuZGVmIE9QRU5TU0xfTk9fUlNBCiB2b2lkIFNTTF9DVFhfc2V0X3RtcF9yc2FfY2FsbGJhY2soU1NMX0NUWCAqY3R4LApAQCAtMTY2NSw2ICsxODAwLDE1IEBACiBpbnQgU1NMX0NPTVBfYWRkX2NvbXByZXNzaW9uX21ldGhvZChpbnQgaWQsdm9pZCAqY20pOwogI2VuZGlmCiAKKy8qIFRMUyBleHRlbnNpb25zIGZ1bmN0aW9ucyAqLworaW50IFNTTF9zZXRfc2Vzc2lvbl90aWNrZXRfZXh0KFNTTCAqcywgdm9pZCAqZXh0X2RhdGEsIGludCBleHRfbGVuKTsKKworaW50IFNTTF9zZXRfc2Vzc2lvbl90aWNrZXRfZXh0X2NiKFNTTCAqcywgdGxzX3Nlc3Npb25fdGlja2V0X2V4dF9jYl9mbiBjYiwKKwkJCQkgIHZvaWQgKmFyZyk7CisKKy8qIFByZS1zaGFyZWQgc2VjcmV0IHNlc3Npb24gcmVzdW1wdGlvbiBmdW5jdGlvbnMgKi8KK2ludCBTU0xfc2V0X3Nlc3Npb25fc2VjcmV0X2NiKFNTTCAqcywgdGxzX3Nlc3Npb25fc2VjcmV0X2NiX2ZuIHRsc19zZXNzaW9uX3NlY3JldF9jYiwgdm9pZCAqYXJnKTsKKwogLyogQkVHSU4gRVJST1IgQ09ERVMgKi8KIC8qIFRoZSBmb2xsb3dpbmcgbGluZXMgYXJlIGF1dG8gZ2VuZXJhdGVkIGJ5IHRoZSBzY3JpcHQgbWtlcnIucGwuIEFueSBjaGFuZ2VzCiAgKiBtYWRlIGFmdGVyIHRoaXMgcG9pbnQgbWF5IGJlIG92ZXJ3cml0dGVuIHdoZW4gdGhlIHNjcmlwdCBpcyBuZXh0IHJ1bi4KQEAgLTE2ODIsNyArMTgyNiw3IEBACiAjZGVmaW5lIFNTTF9GX0RPX0RUTFMxX1dSSVRFCQkJCSAyNDUKICNkZWZpbmUgU1NMX0ZfRE9fU1NMM19XUklURQkJCQkgMTA0CiAjZGVmaW5lIFNTTF9GX0RUTFMxX0FDQ0VQVAkJCQkgMjQ2Ci0jZGVmaW5lIFNTTF9GX0RUTFMxX0FERF9DRVJUX1RPX0JVRgkJCSAyODAKKyNkZWZpbmUgU1NMX0ZfRFRMUzFfQUREX0NFUlRfVE9fQlVGCQkJIDI5NQogI2RlZmluZSBTU0xfRl9EVExTMV9CVUZGRVJfUkVDT1JECQkJIDI0NwogI2RlZmluZSBTU0xfRl9EVExTMV9DTElFTlRfSEVMTE8JCQkgMjQ4CiAjZGVmaW5lIFNTTF9GX0RUTFMxX0NPTk5FQ1QJCQkJIDI0OQpAQCAtMTY5MSw5ICsxODM1LDkgQEAKICNkZWZpbmUgU1NMX0ZfRFRMUzFfR0VUX01FU1NBR0UJCQkJIDI1MgogI2RlZmluZSBTU0xfRl9EVExTMV9HRVRfTUVTU0FHRV9GUkFHTUVOVAkJIDI1MwogI2RlZmluZSBTU0xfRl9EVExTMV9HRVRfUkVDT1JECQkJCSAyNTQKLSNkZWZpbmUgU1NMX0ZfRFRMUzFfSEFORExFX1RJTUVPVVQJCQkgMjgyCisjZGVmaW5lIFNTTF9GX0RUTFMxX0hBTkRMRV9USU1FT1VUCQkJIDI5NwogI2RlZmluZSBTU0xfRl9EVExTMV9PVVRQVVRfQ0VSVF9DSEFJTgkJCSAyNTUKLSNkZWZpbmUgU1NMX0ZfRFRMUzFfUFJFUFJPQ0VTU19GUkFHTUVOVAkJCSAyNzcKKyNkZWZpbmUgU1NMX0ZfRFRMUzFfUFJFUFJPQ0VTU19GUkFHTUVOVAkJCSAyODgKICNkZWZpbmUgU1NMX0ZfRFRMUzFfUFJPQ0VTU19PVVRfT0ZfU0VRX01FU1NBR0UJCSAyNTYKICNkZWZpbmUgU1NMX0ZfRFRMUzFfUFJPQ0VTU19SRUNPUkQJCQkgMjU3CiAjZGVmaW5lIFNTTF9GX0RUTFMxX1JFQURfQllURVMJCQkJIDI1OApAQCAtMTczNyw3ICsxODgxLDcgQEAKICNkZWZpbmUgU1NMX0ZfU1NMMl9TRVRfQ0VSVElGSUNBVEUJCQkgMTI2CiAjZGVmaW5lIFNTTF9GX1NTTDJfV1JJVEUJCQkJIDEyNwogI2RlZmluZSBTU0xfRl9TU0wzX0FDQ0VQVAkJCQkgMTI4Ci0jZGVmaW5lIFNTTF9GX1NTTDNfQUREX0NFUlRfVE9fQlVGCQkJIDI4MQorI2RlZmluZSBTU0xfRl9TU0wzX0FERF9DRVJUX1RPX0JVRgkJCSAyOTYKICNkZWZpbmUgU1NMX0ZfU1NMM19DQUxMQkFDS19DVFJMCQkJIDIzMwogI2RlZmluZSBTU0xfRl9TU0wzX0NIQU5HRV9DSVBIRVJfU1RBVEUJCQkgMTI5CiAjZGVmaW5lIFNTTF9GX1NTTDNfQ0hFQ0tfQ0VSVF9BTkRfQUxHT1JJVEhNCQkgMTMwCkBAIC0xNzQ1LDExICsxODg5LDEyIEBACiAjZGVmaW5lIFNTTF9GX1NTTDNfQ09OTkVDVAkJCQkgMTMyCiAjZGVmaW5lIFNTTF9GX1NTTDNfQ1RSTAkJCQkJIDIxMwogI2RlZmluZSBTU0xfRl9TU0wzX0NUWF9DVFJMCQkJCSAxMzMKLSNkZWZpbmUgU1NMX0ZfU1NMM19ET19DSEFOR0VfQ0lQSEVSX1NQRUMJCSAyNzkKKyNkZWZpbmUgU1NMX0ZfU1NMM19ESUdFU1RfQ0FDSEVEX1JFQ09SRFMJCSAyOTMKKyNkZWZpbmUgU1NMX0ZfU1NMM19ET19DSEFOR0VfQ0lQSEVSX1NQRUMJCSAyOTIKICNkZWZpbmUgU1NMX0ZfU1NMM19FTkMJCQkJCSAxMzQKICNkZWZpbmUgU1NMX0ZfU1NMM19HRU5FUkFURV9LRVlfQkxPQ0sJCQkgMjM4CiAjZGVmaW5lIFNTTF9GX1NTTDNfR0VUX0NFUlRJRklDQVRFX1JFUVVFU1QJCSAxMzUKLSNkZWZpbmUgU1NMX0ZfU1NMM19HRVRfQ0VSVF9TVEFUVVMJCQkgMjg4CisjZGVmaW5lIFNTTF9GX1NTTDNfR0VUX0NFUlRfU1RBVFVTCQkJIDI4OQogI2RlZmluZSBTU0xfRl9TU0wzX0dFVF9DRVJUX1ZFUklGWQkJCSAxMzYKICNkZWZpbmUgU1NMX0ZfU1NMM19HRVRfQ0xJRU5UX0NFUlRJRklDQVRFCQkgMTM3CiAjZGVmaW5lIFNTTF9GX1NTTDNfR0VUX0NMSUVOVF9IRUxMTwkJCSAxMzgKQEAgLTE3NjIsNyArMTkwNyw4IEBACiAjZGVmaW5lIFNTTF9GX1NTTDNfR0VUX1NFUlZFUl9DRVJUSUZJQ0FURQkJIDE0NAogI2RlZmluZSBTU0xfRl9TU0wzX0dFVF9TRVJWRVJfRE9ORQkJCSAxNDUKICNkZWZpbmUgU1NMX0ZfU1NMM19HRVRfU0VSVkVSX0hFTExPCQkJIDE0NgotI2RlZmluZSBTU0xfRl9TU0wzX05FV19TRVNTSU9OX1RJQ0tFVAkJCSAyODQKKyNkZWZpbmUgU1NMX0ZfU1NMM19IQU5EU0hBS0VfTUFDCQkJIDI4NQorI2RlZmluZSBTU0xfRl9TU0wzX05FV19TRVNTSU9OX1RJQ0tFVAkJCSAyODcKICNkZWZpbmUgU1NMX0ZfU1NMM19PVVRQVVRfQ0VSVF9DSEFJTgkJCSAxNDcKICNkZWZpbmUgU1NMX0ZfU1NMM19QRUVLCQkJCQkgMjM1CiAjZGVmaW5lIFNTTF9GX1NTTDNfUkVBRF9CWVRFUwkJCQkgMTQ4CkBAIC0xNzc0LDE2ICsxOTIwLDE3IEBACiAjZGVmaW5lIFNTTF9GX1NTTDNfU0VORF9TRVJWRVJfQ0VSVElGSUNBVEUJCSAxNTQKICNkZWZpbmUgU1NMX0ZfU1NMM19TRU5EX1NFUlZFUl9IRUxMTwkJCSAyNDIKICNkZWZpbmUgU1NMX0ZfU1NMM19TRU5EX1NFUlZFUl9LRVlfRVhDSEFOR0UJCSAxNTUKLSNkZWZpbmUgU1NMX0ZfU1NMM19TRVRVUF9CVUZGRVJTCQkJIDE1NgogI2RlZmluZSBTU0xfRl9TU0wzX1NFVFVQX0tFWV9CTE9DSwkJCSAxNTcKKyNkZWZpbmUgU1NMX0ZfU1NMM19TRVRVUF9SRUFEX0JVRkZFUgkJCSAxNTYKKyNkZWZpbmUgU1NMX0ZfU1NMM19TRVRVUF9XUklURV9CVUZGRVIJCQkgMjkxCiAjZGVmaW5lIFNTTF9GX1NTTDNfV1JJVEVfQllURVMJCQkJIDE1OAogI2RlZmluZSBTU0xfRl9TU0wzX1dSSVRFX1BFTkRJTkcJCQkgMTU5Ci0jZGVmaW5lIFNTTF9GX1NTTF9BRERfQ0xJRU5USEVMTE9fUkVORUdPVElBVEVfRVhUCSAyODUKLSNkZWZpbmUgU1NMX0ZfU1NMX0FERF9DTElFTlRIRUxMT19UTFNFWFQJCSAyNzIKKyNkZWZpbmUgU1NMX0ZfU1NMX0FERF9DTElFTlRIRUxMT19SRU5FR09USUFURV9FWFQJIDI5OAorI2RlZmluZSBTU0xfRl9TU0xfQUREX0NMSUVOVEhFTExPX1RMU0VYVAkJIDI3NwogI2RlZmluZSBTU0xfRl9TU0xfQUREX0RJUl9DRVJUX1NVQkpFQ1RTX1RPX1NUQUNLCSAyMTUKICNkZWZpbmUgU1NMX0ZfU1NMX0FERF9GSUxFX0NFUlRfU1VCSkVDVFNfVE9fU1RBQ0sJIDIxNgotI2RlZmluZSBTU0xfRl9TU0xfQUREX1NFUlZFUkhFTExPX1JFTkVHT1RJQVRFX0VYVAkgMjg2Ci0jZGVmaW5lIFNTTF9GX1NTTF9BRERfU0VSVkVSSEVMTE9fVExTRVhUCQkgMjczCisjZGVmaW5lIFNTTF9GX1NTTF9BRERfU0VSVkVSSEVMTE9fUkVORUdPVElBVEVfRVhUCSAyOTkKKyNkZWZpbmUgU1NMX0ZfU1NMX0FERF9TRVJWRVJIRUxMT19UTFNFWFQJCSAyNzgKICNkZWZpbmUgU1NMX0ZfU1NMX0JBRF9NRVRIT0QJCQkJIDE2MAogI2RlZmluZSBTU0xfRl9TU0xfQllURVNfVE9fQ0lQSEVSX0xJU1QJCQkgMTYxCiAjZGVmaW5lIFNTTF9GX1NTTF9DRVJUX0RVUAkJCQkgMjIxCkBAIC0xNzkxLDcgKzE5MzgsOCBAQAogI2RlZmluZSBTU0xfRl9TU0xfQ0VSVF9JTlNUQU5USUFURQkJCSAyMTQKICNkZWZpbmUgU1NMX0ZfU1NMX0NFUlRfTkVXCQkJCSAxNjIKICNkZWZpbmUgU1NMX0ZfU1NMX0NIRUNLX1BSSVZBVEVfS0VZCQkJIDE2MwotI2RlZmluZSBTU0xfRl9TU0xfQ0hFQ0tfU0VSVkVSSEVMTE9fVExTRVhUCQkgMjc0CisjZGVmaW5lIFNTTF9GX1NTTF9DSEVDS19TRVJWRVJIRUxMT19UTFNFWFQJCSAyODAKKyNkZWZpbmUgU1NMX0ZfU1NMX0NIRUNLX1NSVlJfRUNDX0NFUlRfQU5EX0FMRwkJIDI3OQogI2RlZmluZSBTU0xfRl9TU0xfQ0lQSEVSX1BST0NFU1NfUlVMRVNUUgkJIDIzMAogI2RlZmluZSBTU0xfRl9TU0xfQ0lQSEVSX1NUUkVOR1RIX1NPUlQJCQkgMjMxCiAjZGVmaW5lIFNTTF9GX1NTTF9DTEVBUgkJCQkJIDE2NApAQCAtMTgwMSw3ICsxOTQ5LDcgQEAKICNkZWZpbmUgU1NMX0ZfU1NMX0NUWF9DSEVDS19QUklWQVRFX0tFWQkJCSAxNjgKICNkZWZpbmUgU1NMX0ZfU1NMX0NUWF9ORVcJCQkJIDE2OQogI2RlZmluZSBTU0xfRl9TU0xfQ1RYX1NFVF9DSVBIRVJfTElTVAkJCSAyNjkKLSNkZWZpbmUgU1NMX0ZfU1NMX0NUWF9TRVRfQ0xJRU5UX0NFUlRfRU5HSU5FCQkgMjc4CisjZGVmaW5lIFNTTF9GX1NTTF9DVFhfU0VUX0NMSUVOVF9DRVJUX0VOR0lORQkJIDI5MAogI2RlZmluZSBTU0xfRl9TU0xfQ1RYX1NFVF9QVVJQT1NFCQkJIDIyNgogI2RlZmluZSBTU0xfRl9TU0xfQ1RYX1NFVF9TRVNTSU9OX0lEX0NPTlRFWFQJCSAyMTkKICNkZWZpbmUgU1NMX0ZfU1NMX0NUWF9TRVRfU1NMX1ZFUlNJT04JCQkgMTcwCkBAIC0xODEzLDYgKzE5NjEsNyBAQAogI2RlZmluZSBTU0xfRl9TU0xfQ1RYX1VTRV9QUklWQVRFS0VZCQkJIDE3NAogI2RlZmluZSBTU0xfRl9TU0xfQ1RYX1VTRV9QUklWQVRFS0VZX0FTTjEJCSAxNzUKICNkZWZpbmUgU1NMX0ZfU1NMX0NUWF9VU0VfUFJJVkFURUtFWV9GSUxFCQkgMTc2CisjZGVmaW5lIFNTTF9GX1NTTF9DVFhfVVNFX1BTS19JREVOVElUWV9ISU5UCQkgMjcyCiAjZGVmaW5lIFNTTF9GX1NTTF9DVFhfVVNFX1JTQVBSSVZBVEVLRVkJCQkgMTc3CiAjZGVmaW5lIFNTTF9GX1NTTF9DVFhfVVNFX1JTQVBSSVZBVEVLRVlfQVNOMQkJIDE3OAogI2RlZmluZSBTU0xfRl9TU0xfQ1RYX1VTRV9SU0FQUklWQVRFS0VZX0ZJTEUJCSAxNzkKQEAgLTE4MjQsMTMgKzE5NzMsMTMgQEAKICNkZWZpbmUgU1NMX0ZfU1NMX0lOSVRfV0JJT19CVUZGRVIJCQkgMTg0CiAjZGVmaW5lIFNTTF9GX1NTTF9MT0FEX0NMSUVOVF9DQV9GSUxFCQkJIDE4NQogI2RlZmluZSBTU0xfRl9TU0xfTkVXCQkJCQkgMTg2Ci0jZGVmaW5lIFNTTF9GX1NTTF9QQVJTRV9DTElFTlRIRUxMT19SRU5FR09USUFURV9FWFQJIDI4NwotI2RlZmluZSBTU0xfRl9TU0xfUEFSU0VfQ0xJRU5USEVMTE9fVExTRVhUCQkgMjkwCi0jZGVmaW5lIFNTTF9GX1NTTF9QQVJTRV9TRVJWRVJIRUxMT19SRU5FR09USUFURV9FWFQJIDI4OQotI2RlZmluZSBTU0xfRl9TU0xfUEFSU0VfU0VSVkVSSEVMTE9fVExTRVhUCQkgMjkxCisjZGVmaW5lIFNTTF9GX1NTTF9QQVJTRV9DTElFTlRIRUxMT19SRU5FR09USUFURV9FWFQJIDMwMAorI2RlZmluZSBTU0xfRl9TU0xfUEFSU0VfQ0xJRU5USEVMTE9fVExTRVhUCQkgMzAyCisjZGVmaW5lIFNTTF9GX1NTTF9QQVJTRV9TRVJWRVJIRUxMT19SRU5FR09USUFURV9FWFQJIDMwMQorI2RlZmluZSBTU0xfRl9TU0xfUEFSU0VfU0VSVkVSSEVMTE9fVExTRVhUCQkgMzAzCiAjZGVmaW5lIFNTTF9GX1NTTF9QRUVLCQkJCQkgMjcwCi0jZGVmaW5lIFNTTF9GX1NTTF9QUkVQQVJFX0NMSUVOVEhFTExPX1RMU0VYVAkJIDI3NQotI2RlZmluZSBTU0xfRl9TU0xfUFJFUEFSRV9TRVJWRVJIRUxMT19UTFNFWFQJCSAyNzYKKyNkZWZpbmUgU1NMX0ZfU1NMX1BSRVBBUkVfQ0xJRU5USEVMTE9fVExTRVhUCQkgMjgxCisjZGVmaW5lIFNTTF9GX1NTTF9QUkVQQVJFX1NFUlZFUkhFTExPX1RMU0VYVAkJIDI4MgogI2RlZmluZSBTU0xfRl9TU0xfUkVBRAkJCQkJIDIyMwogI2RlZmluZSBTU0xfRl9TU0xfUlNBX1BSSVZBVEVfREVDUllQVAkJCSAxODcKICNkZWZpbmUgU1NMX0ZfU1NMX1JTQV9QVUJMSUNfRU5DUllQVAkJCSAxODgKQEAgLTE4NDUsNiArMTk5NCw3IEBACiAjZGVmaW5lIFNTTF9GX1NTTF9TRVRfUkZECQkJCSAxOTQKICNkZWZpbmUgU1NMX0ZfU1NMX1NFVF9TRVNTSU9OCQkJCSAxOTUKICNkZWZpbmUgU1NMX0ZfU1NMX1NFVF9TRVNTSU9OX0lEX0NPTlRFWFQJCSAyMTgKKyNkZWZpbmUgU1NMX0ZfU1NMX1NFVF9TRVNTSU9OX1RJQ0tFVF9FWFQJCSAyOTQKICNkZWZpbmUgU1NMX0ZfU1NMX1NFVF9UUlVTVAkJCQkgMjI4CiAjZGVmaW5lIFNTTF9GX1NTTF9TRVRfV0ZECQkJCSAxOTYKICNkZWZpbmUgU1NMX0ZfU1NMX1NIVVRET1dOCQkJCSAyMjQKQEAgLTE4NTcsMTMgKzIwMDcsMTkgQEAKICNkZWZpbmUgU1NMX0ZfU1NMX1VTRV9QUklWQVRFS0VZCQkJIDIwMQogI2RlZmluZSBTU0xfRl9TU0xfVVNFX1BSSVZBVEVLRVlfQVNOMQkJCSAyMDIKICNkZWZpbmUgU1NMX0ZfU1NMX1VTRV9QUklWQVRFS0VZX0ZJTEUJCQkgMjAzCisjZGVmaW5lIFNTTF9GX1NTTF9VU0VfUFNLX0lERU5USVRZX0hJTlQJCQkgMjczCiAjZGVmaW5lIFNTTF9GX1NTTF9VU0VfUlNBUFJJVkFURUtFWQkJCSAyMDQKICNkZWZpbmUgU1NMX0ZfU1NMX1VTRV9SU0FQUklWQVRFS0VZX0FTTjEJCSAyMDUKICNkZWZpbmUgU1NMX0ZfU1NMX1VTRV9SU0FQUklWQVRFS0VZX0ZJTEUJCSAyMDYKICNkZWZpbmUgU1NMX0ZfU1NMX1ZFUklGWV9DRVJUX0NIQUlOCQkJIDIwNwogI2RlZmluZSBTU0xfRl9TU0xfV1JJVEUJCQkJCSAyMDgKKyNkZWZpbmUgU1NMX0ZfVExTMV9DRVJUX1ZFUklGWV9NQUMJCQkgMjg2CiAjZGVmaW5lIFNTTF9GX1RMUzFfQ0hBTkdFX0NJUEhFUl9TVEFURQkJCSAyMDkKKyNkZWZpbmUgU1NMX0ZfVExTMV9DSEVDS19TRVJWRVJIRUxMT19UTFNFWFQJCSAyNzQKICNkZWZpbmUgU1NMX0ZfVExTMV9FTkMJCQkJCSAyMTAKKyNkZWZpbmUgU1NMX0ZfVExTMV9QUkVQQVJFX0NMSUVOVEhFTExPX1RMU0VYVAkJIDI3NQorI2RlZmluZSBTU0xfRl9UTFMxX1BSRVBBUkVfU0VSVkVSSEVMTE9fVExTRVhUCQkgMjc2CisjZGVmaW5lIFNTTF9GX1RMUzFfUFJGCQkJCQkgMjg0CiAjZGVmaW5lIFNTTF9GX1RMUzFfU0VUVVBfS0VZX0JMT0NLCQkJIDIxMQogI2RlZmluZSBTU0xfRl9XUklURV9QRU5ESU5HCQkJCSAyMTIKIApAQCAtMTg4NCwxMiArMjA0MCwxNSBAQAogI2RlZmluZSBTU0xfUl9CQURfRUNDX0NFUlQJCQkJIDMwNAogI2RlZmluZSBTU0xfUl9CQURfRUNEU0FfU0lHTkFUVVJFCQkJIDMwNQogI2RlZmluZSBTU0xfUl9CQURfRUNQT0lOVAkJCQkgMzA2CisjZGVmaW5lIFNTTF9SX0JBRF9IQU5EU0hBS0VfTEVOR1RICQkJIDMzMgogI2RlZmluZSBTU0xfUl9CQURfSEVMTE9fUkVRVUVTVAkJCQkgMTA1CiAjZGVmaW5lIFNTTF9SX0JBRF9MRU5HVEgJCQkJIDI3MQogI2RlZmluZSBTU0xfUl9CQURfTUFDX0RFQ09ERQkJCQkgMTEzCisjZGVmaW5lIFNTTF9SX0JBRF9NQUNfTEVOR1RICQkJCSAzMzMKICNkZWZpbmUgU1NMX1JfQkFEX01FU1NBR0VfVFlQRQkJCQkgMTE0CiAjZGVmaW5lIFNTTF9SX0JBRF9QQUNLRVRfTEVOR1RICQkJCSAxMTUKICNkZWZpbmUgU1NMX1JfQkFEX1BST1RPQ09MX1ZFUlNJT05fTlVNQkVSCQkgMTE2CisjZGVmaW5lIFNTTF9SX0JBRF9QU0tfSURFTlRJVFlfSElOVF9MRU5HVEgJCSAzMTYKICNkZWZpbmUgU1NMX1JfQkFEX1JFU1BPTlNFX0FSR1VNRU5UCQkJIDExNwogI2RlZmluZSBTU0xfUl9CQURfUlNBX0RFQ1JZUFQJCQkJIDExOAogI2RlZmluZSBTU0xfUl9CQURfUlNBX0VOQ1JZUFQJCQkJIDExOQpAQCAtMTkxMyw4ICsyMDcyLDkgQEAKICNkZWZpbmUgU1NMX1JfQ0lQSEVSX0NPREVfV1JPTkdfTEVOR1RICQkJIDEzNwogI2RlZmluZSBTU0xfUl9DSVBIRVJfT1JfSEFTSF9VTkFWQUlMQUJMRQkJIDEzOAogI2RlZmluZSBTU0xfUl9DSVBIRVJfVEFCTEVfU1JDX0VSUk9SCQkJIDEzOQotI2RlZmluZSBTU0xfUl9DTElFTlRIRUxMT19UTFNFWFQJCQkgMTU3CisjZGVmaW5lIFNTTF9SX0NMSUVOVEhFTExPX1RMU0VYVAkJCSAyMjYKICNkZWZpbmUgU1NMX1JfQ09NUFJFU1NFRF9MRU5HVEhfVE9PX0xPTkcJCSAxNDAKKyNkZWZpbmUgU1NMX1JfQ09NUFJFU1NJT05fRElTQUJMRUQJCQkgMzQzCiAjZGVmaW5lIFNTTF9SX0NPTVBSRVNTSU9OX0ZBSUxVUkUJCQkgMTQxCiAjZGVmaW5lIFNTTF9SX0NPTVBSRVNTSU9OX0lEX05PVF9XSVRISU5fUFJJVkFURV9SQU5HRQkgMzA3CiAjZGVmaW5lIFNTTF9SX0NPTVBSRVNTSU9OX0xJQlJBUllfRVJST1IJCQkgMTQyCkBAIC0xOTI3LDggKzIwODcsMTIgQEAKICNkZWZpbmUgU1NMX1JfREVDUllQVElPTl9GQUlMRURfT1JfQkFEX1JFQ09SRF9NQUMJIDI4MQogI2RlZmluZSBTU0xfUl9ESF9QVUJMSUNfVkFMVUVfTEVOR1RIX0lTX1dST05HCQkgMTQ4CiAjZGVmaW5lIFNTTF9SX0RJR0VTVF9DSEVDS19GQUlMRUQJCQkgMTQ5Ci0jZGVmaW5lIFNTTF9SX0RUTFNfTUVTU0FHRV9UT09fQklHCQkJIDMxOAorI2RlZmluZSBTU0xfUl9EVExTX01FU1NBR0VfVE9PX0JJRwkJCSAzMzQKICNkZWZpbmUgU1NMX1JfRFVQTElDQVRFX0NPTVBSRVNTSU9OX0lECQkJIDMwOQorI2RlZmluZSBTU0xfUl9FQ0NfQ0VSVF9OT1RfRk9SX0tFWV9BR1JFRU1FTlQJCSAzMTcKKyNkZWZpbmUgU1NMX1JfRUNDX0NFUlRfTk9UX0ZPUl9TSUdOSU5HCQkJIDMxOAorI2RlZmluZSBTU0xfUl9FQ0NfQ0VSVF9TSE9VTERfSEFWRV9SU0FfU0lHTkFUVVJFCSAzMjIKKyNkZWZpbmUgU1NMX1JfRUNDX0NFUlRfU0hPVUxEX0hBVkVfU0hBMV9TSUdOQVRVUkUJIDMyMwogI2RlZmluZSBTU0xfUl9FQ0dST1VQX1RPT19MQVJHRV9GT1JfQ0lQSEVSCQkgMzEwCiAjZGVmaW5lIFNTTF9SX0VOQ1JZUFRFRF9MRU5HVEhfVE9PX0xPTkcJCQkgMTUwCiAjZGVmaW5lIFNTTF9SX0VSUk9SX0dFTkVSQVRJTkdfVE1QX1JTQV9LRVkJCSAyODIKQEAgLTE5MzksMTEgKzIxMDMsMTMgQEAKICNkZWZpbmUgU1NMX1JfSFRUUFNfUFJPWFlfUkVRVUVTVAkJCSAxNTUKICNkZWZpbmUgU1NMX1JfSFRUUF9SRVFVRVNUCQkJCSAxNTYKICNkZWZpbmUgU1NMX1JfSUxMRUdBTF9QQURESU5HCQkJCSAyODMKKyNkZWZpbmUgU1NMX1JfSU5DT05TSVNURU5UX0NPTVBSRVNTSU9OCQkJIDM0MAogI2RlZmluZSBTU0xfUl9JTlZBTElEX0NIQUxMRU5HRV9MRU5HVEgJCQkgMTU4CiAjZGVmaW5lIFNTTF9SX0lOVkFMSURfQ09NTUFORAkJCQkgMjgwCisjZGVmaW5lIFNTTF9SX0lOVkFMSURfQ09NUFJFU1NJT05fQUxHT1JJVEhNCQkgMzQxCiAjZGVmaW5lIFNTTF9SX0lOVkFMSURfUFVSUE9TRQkJCQkgMjc4Ci0jZGVmaW5lIFNTTF9SX0lOVkFMSURfU1RBVFVTX1JFU1BPTlNFCQkJIDMxNgotI2RlZmluZSBTU0xfUl9JTlZBTElEX1RJQ0tFVF9LRVlTX0xFTkdUSAkJIDI3NQorI2RlZmluZSBTU0xfUl9JTlZBTElEX1NUQVRVU19SRVNQT05TRQkJCSAzMjgKKyNkZWZpbmUgU1NMX1JfSU5WQUxJRF9USUNLRVRfS0VZU19MRU5HVEgJCSAzMjUKICNkZWZpbmUgU1NMX1JfSU5WQUxJRF9UUlVTVAkJCQkgMjc5CiAjZGVmaW5lIFNTTF9SX0tFWV9BUkdfVE9PX0xPTkcJCQkJIDI4NAogI2RlZmluZSBTU0xfUl9LUkI1CQkJCQkgMjg1CkBAIC0xOTg3LDIzICsyMTUzLDI3IEBACiAjZGVmaW5lIFNTTF9SX05PX0NJUEhFUlNfU1BFQ0lGSUVECQkJIDE4MwogI2RlZmluZSBTU0xfUl9OT19DSVBIRVJfTElTVAkJCQkgMTg0CiAjZGVmaW5lIFNTTF9SX05PX0NJUEhFUl9NQVRDSAkJCQkgMTg1Ci0jZGVmaW5lIFNTTF9SX05PX0NMSUVOVF9DRVJUX01FVEhPRAkJCSAzMTcKKyNkZWZpbmUgU1NMX1JfTk9fQ0xJRU5UX0NFUlRfTUVUSE9ECQkJIDMzMQogI2RlZmluZSBTU0xfUl9OT19DTElFTlRfQ0VSVF9SRUNFSVZFRAkJCSAxODYKICNkZWZpbmUgU1NMX1JfTk9fQ09NUFJFU1NJT05fU1BFQ0lGSUVECQkJIDE4NworI2RlZmluZSBTU0xfUl9OT19HT1NUX0NFUlRJRklDQVRFX1NFTlRfQllfUEVFUgkJIDMzMAogI2RlZmluZSBTU0xfUl9OT19NRVRIT0RfU1BFQ0lGSUVECQkJIDE4OAogI2RlZmluZSBTU0xfUl9OT19QUklWQVRFS0VZCQkJCSAxODkKICNkZWZpbmUgU1NMX1JfTk9fUFJJVkFURV9LRVlfQVNTSUdORUQJCQkgMTkwCiAjZGVmaW5lIFNTTF9SX05PX1BST1RPQ09MU19BVkFJTEFCTEUJCQkgMTkxCiAjZGVmaW5lIFNTTF9SX05PX1BVQkxJQ0tFWQkJCQkgMTkyCi0jZGVmaW5lIFNTTF9SX05PX1JFTkVHT1RJQVRJT04JCQkJIDMxOQorI2RlZmluZSBTU0xfUl9OT19SRU5FR09USUFUSU9OCQkJCSAzMzkKKyNkZWZpbmUgU1NMX1JfTk9fUkVRVUlSRURfRElHRVNUCQkJIDMyNAogI2RlZmluZSBTU0xfUl9OT19TSEFSRURfQ0lQSEVSCQkJCSAxOTMKICNkZWZpbmUgU1NMX1JfTk9fVkVSSUZZX0NBTExCQUNLCQkJIDE5NAogI2RlZmluZSBTU0xfUl9OVUxMX1NTTF9DVFgJCQkJIDE5NQogI2RlZmluZSBTU0xfUl9OVUxMX1NTTF9NRVRIT0RfUEFTU0VECQkJIDE5NgogI2RlZmluZSBTU0xfUl9PTERfU0VTU0lPTl9DSVBIRVJfTk9UX1JFVFVSTkVECQkgMTk3CisjZGVmaW5lIFNTTF9SX09MRF9TRVNTSU9OX0NPTVBSRVNTSU9OX0FMR09SSVRITV9OT1RfUkVUVVJORUQgMzQ0CiAjZGVmaW5lIFNTTF9SX09OTFlfVExTX0FMTE9XRURfSU5fRklQU19NT0RFCQkgMjk3CisjZGVmaW5lIFNTTF9SX09QQVFVRV9QUkZfSU5QVVRfVE9PX0xPTkcJCQkgMzI3CiAjZGVmaW5lIFNTTF9SX1BBQ0tFVF9MRU5HVEhfVE9PX0xPTkcJCQkgMTk4Ci0jZGVmaW5lIFNTTF9SX1BBUlNFX1RMU0VYVAkJCQkgMjIzCisjZGVmaW5lIFNTTF9SX1BBUlNFX1RMU0VYVAkJCQkgMjI3CiAjZGVmaW5lIFNTTF9SX1BBVEhfVE9PX0xPTkcJCQkJIDI3MAogI2RlZmluZSBTU0xfUl9QRUVSX0RJRF9OT1RfUkVUVVJOX0FfQ0VSVElGSUNBVEUJCSAxOTkKICNkZWZpbmUgU1NMX1JfUEVFUl9FUlJPUgkJCQkgMjAwCkBAIC0yMDE0LDYgKzIxODQsOSBAQAogI2RlZmluZSBTU0xfUl9QUkVfTUFDX0xFTkdUSF9UT09fTE9ORwkJCSAyMDUKICNkZWZpbmUgU1NMX1JfUFJPQkxFTVNfTUFQUElOR19DSVBIRVJfRlVOQ1RJT05TCQkgMjA2CiAjZGVmaW5lIFNTTF9SX1BST1RPQ09MX0lTX1NIVVRET1dOCQkJIDIwNworI2RlZmluZSBTU0xfUl9QU0tfSURFTlRJVFlfTk9UX0ZPVU5ECQkJIDIyMworI2RlZmluZSBTU0xfUl9QU0tfTk9fQ0xJRU5UX0NCCQkJCSAyMjQKKyNkZWZpbmUgU1NMX1JfUFNLX05PX1NFUlZFUl9DQgkJCQkgMjI1CiAjZGVmaW5lIFNTTF9SX1BVQkxJQ19LRVlfRU5DUllQVF9FUlJPUgkJCSAyMDgKICNkZWZpbmUgU1NMX1JfUFVCTElDX0tFWV9JU19OT1RfUlNBCQkJIDIwOQogI2RlZmluZSBTU0xfUl9QVUJMSUNfS0VZX05PVF9SU0EJCQkgMjEwCkBAIC0yMDIzLDIyICsyMTk2LDI0IEBACiAjZGVmaW5lIFNTTF9SX1JFQ09SRF9MRU5HVEhfTUlTTUFUQ0gJCQkgMjEzCiAjZGVmaW5lIFNTTF9SX1JFQ09SRF9UT09fTEFSR0UJCQkJIDIxNAogI2RlZmluZSBTU0xfUl9SRUNPUkRfVE9PX1NNQUxMCQkJCSAyOTgKLSNkZWZpbmUgU1NMX1JfUkVORUdPVElBVEVfRVhUX1RPT19MT05HCQkJIDMyMAotI2RlZmluZSBTU0xfUl9SRU5FR09USUFUSU9OX0VOQ09ESU5HX0VSUgkJIDMyMQotI2RlZmluZSBTU0xfUl9SRU5FR09USUFUSU9OX01JU01BVENICQkJIDMyMgorI2RlZmluZSBTU0xfUl9SRU5FR09USUFURV9FWFRfVE9PX0xPTkcJCQkgMzM1CisjZGVmaW5lIFNTTF9SX1JFTkVHT1RJQVRJT05fRU5DT0RJTkdfRVJSCQkgMzM2CisjZGVmaW5lIFNTTF9SX1JFTkVHT1RJQVRJT05fTUlTTUFUQ0gJCQkgMzM3CiAjZGVmaW5lIFNTTF9SX1JFUVVJUkVEX0NJUEhFUl9NSVNTSU5HCQkJIDIxNQorI2RlZmluZSBTU0xfUl9SRVFVSVJFRF9DT01QUkVTU1NJT05fQUxHT1JJVEhNX01JU1NJTkcJIDM0MgogI2RlZmluZSBTU0xfUl9SRVVTRV9DRVJUX0xFTkdUSF9OT1RfWkVSTwkJIDIxNgogI2RlZmluZSBTU0xfUl9SRVVTRV9DRVJUX1RZUEVfTk9UX1pFUk8JCQkgMjE3CiAjZGVmaW5lIFNTTF9SX1JFVVNFX0NJUEhFUl9MSVNUX05PVF9aRVJPCQkgMjE4Ci0jZGVmaW5lIFNTTF9SX1NDU1ZfUkVDRUlWRURfV0hFTl9SRU5FR09USUFUSU5HCQkgMzI0Ci0jZGVmaW5lIFNTTF9SX1NFUlZFUkhFTExPX1RMU0VYVAkJCSAyMjQKKyNkZWZpbmUgU1NMX1JfU0NTVl9SRUNFSVZFRF9XSEVOX1JFTkVHT1RJQVRJTkcJCSAzNDUKKyNkZWZpbmUgU1NMX1JfU0VSVkVSSEVMTE9fVExTRVhUCQkJIDI3NQogI2RlZmluZSBTU0xfUl9TRVNTSU9OX0lEX0NPTlRFWFRfVU5JTklUSUFMSVpFRAkJIDI3NwogI2RlZmluZSBTU0xfUl9TSE9SVF9SRUFECQkJCSAyMTkKICNkZWZpbmUgU1NMX1JfU0lHTkFUVVJFX0ZPUl9OT05fU0lHTklOR19DRVJUSUZJQ0FURQkgMjIwCiAjZGVmaW5lIFNTTF9SX1NTTDIzX0RPSU5HX1NFU1NJT05fSURfUkVVU0UJCSAyMjEKICNkZWZpbmUgU1NMX1JfU1NMMl9DT05ORUNUSU9OX0lEX1RPT19MT05HCQkgMjk5Ci0jZGVmaW5lIFNTTF9SX1NTTDNfRVhUX0lOVkFMSURfU0VSVkVSTkFNRQkJIDIyNQotI2RlZmluZSBTU0xfUl9TU0wzX0VYVF9JTlZBTElEX1NFUlZFUk5BTUVfVFlQRQkJIDIyNgorI2RlZmluZSBTU0xfUl9TU0wzX0VYVF9JTlZBTElEX0VDUE9JTlRGT1JNQVQJCSAzMjEKKyNkZWZpbmUgU1NMX1JfU1NMM19FWFRfSU5WQUxJRF9TRVJWRVJOQU1FCQkgMzE5CisjZGVmaW5lIFNTTF9SX1NTTDNfRVhUX0lOVkFMSURfU0VSVkVSTkFNRV9UWVBFCQkgMzIwCiAjZGVmaW5lIFNTTF9SX1NTTDNfU0VTU0lPTl9JRF9UT09fTE9ORwkJCSAzMDAKICNkZWZpbmUgU1NMX1JfU1NMM19TRVNTSU9OX0lEX1RPT19TSE9SVAkJCSAyMjIKICNkZWZpbmUgU1NMX1JfU1NMVjNfQUxFUlRfQkFEX0NFUlRJRklDQVRFCQkgMTA0MgpAQCAtMjA3Miw4ICsyMjQ3LDEzIEBACiAjZGVmaW5lIFNTTF9SX1RMU1YxX0FMRVJUX1JFQ09SRF9PVkVSRkxPVwkJIDEwMjIKICNkZWZpbmUgU1NMX1JfVExTVjFfQUxFUlRfVU5LTk9XTl9DQQkJCSAxMDQ4CiAjZGVmaW5lIFNTTF9SX1RMU1YxX0FMRVJUX1VTRVJfQ0FOQ0VMTEVECQkgMTA5MAorI2RlZmluZSBTU0xfUl9UTFNWMV9CQURfQ0VSVElGSUNBVEVfSEFTSF9WQUxVRQkJIDExMTQKKyNkZWZpbmUgU1NMX1JfVExTVjFfQkFEX0NFUlRJRklDQVRFX1NUQVRVU19SRVNQT05TRQkgMTExMworI2RlZmluZSBTU0xfUl9UTFNWMV9DRVJUSUZJQ0FURV9VTk9CVEFJTkFCTEUJCSAxMTExCisjZGVmaW5lIFNTTF9SX1RMU1YxX1VOUkVDT0dOSVpFRF9OQU1FCQkJIDExMTIKKyNkZWZpbmUgU1NMX1JfVExTVjFfVU5TVVBQT1JURURfRVhURU5TSU9OCQkgMTExMAogI2RlZmluZSBTU0xfUl9UTFNfQ0xJRU5UX0NFUlRfUkVRX1dJVEhfQU5PTl9DSVBIRVIJIDIzMgotI2RlZmluZSBTU0xfUl9UTFNfSU5WQUxJRF9FQ1BPSU5URk9STUFUX0xJU1QJCSAyMjcKKyNkZWZpbmUgU1NMX1JfVExTX0lOVkFMSURfRUNQT0lOVEZPUk1BVF9MSVNUCQkgMTU3CiAjZGVmaW5lIFNTTF9SX1RMU19QRUVSX0RJRF9OT1RfUkVTUE9ORF9XSVRIX0NFUlRJRklDQVRFX0xJU1QgMjMzCiAjZGVmaW5lIFNTTF9SX1RMU19SU0FfRU5DUllQVEVEX1ZBTFVFX0xFTkdUSF9JU19XUk9ORwkgMjM0CiAjZGVmaW5lIFNTTF9SX1RSSUVEX1RPX1VTRV9VTlNVUFBPUlRFRF9DSVBIRVIJCSAyMzUKQEAgLTIxMDAsOSArMjI4MCwxMCBAQAogI2RlZmluZSBTU0xfUl9VTktOT1dOX1JFTU9URV9FUlJPUl9UWVBFCQkJIDI1MwogI2RlZmluZSBTU0xfUl9VTktOT1dOX1NTTF9WRVJTSU9OCQkJIDI1NAogI2RlZmluZSBTU0xfUl9VTktOT1dOX1NUQVRFCQkJCSAyNTUKLSNkZWZpbmUgU1NMX1JfVU5TQUZFX0xFR0FDWV9SRU5FR09USUFUSU9OX0RJU0FCTEVECSAzMjMKKyNkZWZpbmUgU1NMX1JfVU5TQUZFX0xFR0FDWV9SRU5FR09USUFUSU9OX0RJU0FCTEVECSAzMzgKICNkZWZpbmUgU1NMX1JfVU5TVVBQT1JURURfQ0lQSEVSCQkJIDI1NgogI2RlZmluZSBTU0xfUl9VTlNVUFBPUlRFRF9DT01QUkVTU0lPTl9BTEdPUklUSE0JCSAyNTcKKyNkZWZpbmUgU1NMX1JfVU5TVVBQT1JURURfRElHRVNUX1RZUEUJCQkgMzI2CiAjZGVmaW5lIFNTTF9SX1VOU1VQUE9SVEVEX0VMTElQVElDX0NVUlZFCQkgMzE1CiAjZGVmaW5lIFNTTF9SX1VOU1VQUE9SVEVEX1BST1RPQ09MCQkJIDI1OAogI2RlZmluZSBTU0xfUl9VTlNVUFBPUlRFRF9TU0xfVkVSU0lPTgkJCSAyNTkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmggYi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oCmluZGV4IGJmNzFlZjkuLmZiNDFjYTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmgKKysrIGIvaW5jbHVkZS9vcGVuc3NsL3NzbDMuaApAQCAtMTIzLDcgKzEyMyw2IEBACiAjaW5jbHVkZSA8b3BlbnNzbC9idWZmZXIuaD4KICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgogI2luY2x1ZGUgPG9wZW5zc2wvc3NsLmg+Ci0jaW5jbHVkZSA8b3BlbnNzbC9wcV9jb21wYXQuaD4KIAogI2lmZGVmICBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CkBAIC0xNjMsMTIgKzE2MiwxNCBAQAogI2RlZmluZSBTU0wzX0NLX0FESF9ERVNfNjRfQ0JDX1NIQQkJMHgwMzAwMDAxQQogI2RlZmluZSBTU0wzX0NLX0FESF9ERVNfMTkyX0NCQ19TSEEJCTB4MDMwMDAwMUIKIAotI2RlZmluZSBTU0wzX0NLX0ZaQV9ETVNfTlVMTF9TSEEJCTB4MDMwMDAwMUMKLSNkZWZpbmUgU1NMM19DS19GWkFfRE1TX0ZaQV9TSEEJCQkweDAzMDAwMDFECi0jaWYgMCAvKiBCZWNhdXNlIGl0IGNsYXNoZXMgd2l0aCBLUkI1LCBpcyBuZXZlciB1c2VkIGFueSBtb3JlLCBhbmQgaXMgc2FmZQotCSB0byByZW1vdmUgYWNjb3JkaW5nIHRvIERhdmlkIEhvcHdvb2QgPGRhdmlkLmhvcHdvb2RAemV0bmV0LmNvLnVrPgotCSBvZiB0aGUgaWV0Zi10bHMgbGlzdCAqLwotI2RlZmluZSBTU0wzX0NLX0ZaQV9ETVNfUkM0X1NIQQkJCTB4MDMwMDAwMUUKKyNpZiAwCisJI2RlZmluZSBTU0wzX0NLX0ZaQV9ETVNfTlVMTF9TSEEJCTB4MDMwMDAwMUMKKwkjZGVmaW5lIFNTTDNfQ0tfRlpBX0RNU19GWkFfU0hBCQkJMHgwMzAwMDAxRAorCSNpZiAwIC8qIEJlY2F1c2UgaXQgY2xhc2hlcyB3aXRoIEtSQjUsIGlzIG5ldmVyIHVzZWQgYW55IG1vcmUsIGFuZCBpcyBzYWZlCisJCSB0byByZW1vdmUgYWNjb3JkaW5nIHRvIERhdmlkIEhvcHdvb2QgPGRhdmlkLmhvcHdvb2RAemV0bmV0LmNvLnVrPgorCQkgb2YgdGhlIGlldGYtdGxzIGxpc3QgKi8KKwkjZGVmaW5lIFNTTDNfQ0tfRlpBX0RNU19SQzRfU0hBCQkJMHgwMzAwMDAxRQorCSNlbmRpZgogI2VuZGlmCiAKIC8qICAgIFZSUyBBZGRpdGlvbmFsIEtlcmJlcm9zNSBlbnRyaWVzCkBAIC0yMjAsOSArMjIxLDExIEBACiAjZGVmaW5lIFNTTDNfVFhUX0FESF9ERVNfNjRfQ0JDX1NIQQkJIkFESC1ERVMtQ0JDLVNIQSIKICNkZWZpbmUgU1NMM19UWFRfQURIX0RFU18xOTJfQ0JDX1NIQQkJIkFESC1ERVMtQ0JDMy1TSEEiCiAKLSNkZWZpbmUgU1NMM19UWFRfRlpBX0RNU19OVUxMX1NIQQkJIkZaQS1OVUxMLVNIQSIKLSNkZWZpbmUgU1NMM19UWFRfRlpBX0RNU19GWkFfU0hBCQkiRlpBLUZaQS1DQkMtU0hBIgotI2RlZmluZSBTU0wzX1RYVF9GWkFfRE1TX1JDNF9TSEEJCSJGWkEtUkM0LVNIQSIKKyNpZiAwCisJI2RlZmluZSBTU0wzX1RYVF9GWkFfRE1TX05VTExfU0hBCQkiRlpBLU5VTEwtU0hBIgorCSNkZWZpbmUgU1NMM19UWFRfRlpBX0RNU19GWkFfU0hBCQkiRlpBLUZaQS1DQkMtU0hBIgorCSNkZWZpbmUgU1NMM19UWFRfRlpBX0RNU19SQzRfU0hBCQkiRlpBLVJDNC1TSEEiCisjZW5kaWYKIAogI2RlZmluZSBTU0wzX1RYVF9LUkI1X0RFU182NF9DQkNfU0hBCQkiS1JCNS1ERVMtQ0JDLVNIQSIKICNkZWZpbmUgU1NMM19UWFRfS1JCNV9ERVNfMTkyX0NCQzNfU0hBCQkiS1JCNS1ERVMtQ0JDMy1TSEEiCkBAIC0yNDgsMzIgKzI1MSw3NSBAQAogI2RlZmluZSBTU0wzX1NFU1NJT05fSURfU0laRQkJCTMyCiAjZGVmaW5lIFNTTDNfUlRfSEVBREVSX0xFTkdUSAkJCTUKIAotLyogRHVlIHRvIE1TIHN0dWZmaW5nIHVwLCB0aGlzIGNhbiBjaGFuZ2UuLi4uICovCi0jaWYgZGVmaW5lZChPUEVOU1NMX1NZU19XSU4xNikgfHwgXAotCShkZWZpbmVkKE9QRU5TU0xfU1lTX01TRE9TKSAmJiAhZGVmaW5lZChPUEVOU1NMX1NZU19XSU4zMikpCi0jZGVmaW5lIFNTTDNfUlRfTUFYX0VYVFJBCQkJKDE0MDAwKQorI2lmbmRlZiBTU0wzX0FMSUdOX1BBWUxPQUQKKyAvKiBTb21lIHdpbGwgYXJndWUgdGhhdCB0aGlzIGluY3JlYXNlcyBtZW1vcnkgZm9vdHByaW50LCBidXQgaXQncworICAqIG5vdCBhY3R1YWxseSB0cnVlLiBQb2ludCBpcyB0aGF0IG1hbGxvYyBoYXMgdG8gcmV0dXJuIGF0IGxlYXN0CisgICogNjQtYml0IGFsaWduZWQgcG9pbnRlcnMsIG1lYW5pbmcgdGhhdCBhbGxvY2F0aW5nIDUgYnl0ZXMgd2FzdGVzCisgICogMyBieXRlcyBpbiBlaXRoZXIgY2FzZS4gU3VnZ2VzdGVkIHByZS1nYXBpbmcgc2ltcGx5IG1vdmVzIHRoZXNlCisgICogd2FzdGVkIGJ5dGVzIGZyb20gdGhlIGVuZCBvZiBhbGxvY2F0ZWQgcmVnaW9uIHRvIGl0cyBmcm9udCwKKyAgKiBidXQgbWFrZXMgZGF0YSBwYXlsb2FkIGFsaWduZWQsIHdoaWNoIGltcHJvdmVzIHBlcmZvcm1hbmNlOi0pICovCisjIGRlZmluZSBTU0wzX0FMSUdOX1BBWUxPQUQJCQk4CiAjZWxzZQotI2RlZmluZSBTU0wzX1JUX01BWF9FWFRSQQkJCSgxNjM4NCkKKyMgaWYgKFNTTDNfQUxJR05fUEFZTE9BRCYoU1NMM19BTElHTl9QQVlMT0FELTEpKSE9MAorIyAgZXJyb3IgImluc2FuZSBTU0wzX0FMSUdOX1BBWUxPQUQiCisjICB1bmRlZiBTU0wzX0FMSUdOX1BBWUxPQUQKKyMgZW5kaWYKICNlbmRpZgogCisvKiBUaGlzIGlzIHRoZSBtYXhpbXVtIE1BQyAoZGlnZXN0KSBzaXplIHVzZWQgYnkgdGhlIFNTTCBsaWJyYXJ5LgorICogQ3VycmVudGx5IG1heGltdW0gb2YgMjAgaXMgdXNlZCBieSBTSEExLCBidXQgd2UgcmVzZXJ2ZSBmb3IKKyAqIGZ1dHVyZSBleHRlbnNpb24gZm9yIDUxMi1iaXQgaGFzaGVzLgorICovCisKKyNkZWZpbmUgU1NMM19SVF9NQVhfTURfU0laRQkJCTY0CisKKy8qIE1heGltdW0gYmxvY2sgc2l6ZSB1c2VkIGluIGFsbCBjaXBoZXJzdWl0ZXMuIEN1cnJlbnRseSAxNiBmb3IgQUVTLgorICovCisKKyNkZWZpbmUJU1NMX1JUX01BWF9DSVBIRVJfQkxPQ0tfU0laRQkJMTYKKworI2RlZmluZSBTU0wzX1JUX01BWF9FWFRSQQkJCSgxNjM4NCkKKwogLyogRGVmYXVsdCBidWZmZXIgbGVuZ3RoIHVzZWQgZm9yIHdyaXRlbiByZWNvcmRzLiAgVGh1cyBhIGdlbmVyYXRlZCByZWNvcmQKICAqIHdpbGwgY29udGFpbiBwbGFpbnRleHQgbm8gbGFyZ2VyIHRoYW4gdGhpcyB2YWx1ZS4gKi8KICNkZWZpbmUgU1NMM19SVF9ERUZBVUxUX1BMQUlOX0xFTkdUSAkyMDQ4CisvKiBNYXhpbXVtIHBsYWludGV4dCBsZW5ndGg6IGRlZmluZWQgYnkgU1NML1RMUyBzdGFuZGFyZHMgKi8KICNkZWZpbmUgU1NMM19SVF9NQVhfUExBSU5fTEVOR1RICQkxNjM4NAorLyogTWF4aW11bSBjb21wcmVzc2lvbiBvdmVyaGVhZDogZGVmaW5lZCBieSBTU0wvVExTIHN0YW5kYXJkcyAqLworI2RlZmluZSBTU0wzX1JUX01BWF9DT01QUkVTU0VEX09WRVJIRUFECQkxMDI0CisKKy8qIFRoZSBzdGFuZGFyZHMgZ2l2ZSBhIG1heGltdW0gZW5jcnlwdGlvbiBvdmVyaGVhZCBvZiAxMDI0IGJ5dGVzLgorICogSW4gcHJhY3RpY2UgdGhlIHZhbHVlIGlzIGxvd2VyIHRoYW4gdGhpcy4gVGhlIG92ZXJoZWFkIGlzIHRoZSBtYXhpbXVtCisgKiBudW1iZXIgb2YgcGFkZGluZyBieXRlcyAoMjU2KSBwbHVzIHRoZSBtYWMgc2l6ZS4KKyAqLworI2RlZmluZSBTU0wzX1JUX01BWF9FTkNSWVBURURfT1ZFUkhFQUQJKDI1NiArIFNTTDNfUlRfTUFYX01EX1NJWkUpCisKKy8qIE9wZW5TU0wgY3VycmVudGx5IG9ubHkgdXNlcyBhIHBhZGRpbmcgbGVuZ3RoIG9mIGF0IG1vc3Qgb25lIGJsb2NrIHNvCisgKiB0aGUgc2VuZCBvdmVyaGVhZCBpcyBzbWFsbGVyLgorICovCisKKyNkZWZpbmUgU1NMM19SVF9TRU5EX01BWF9FTkNSWVBURURfT1ZFUkhFQUQgXAorCQkJKFNTTF9SVF9NQVhfQ0lQSEVSX0JMT0NLX1NJWkUgKyBTU0wzX1JUX01BWF9NRF9TSVpFKQorCisvKiBJZiBjb21wcmVzc2lvbiBpc24ndCB1c2VkIGRvbid0IGluY2x1ZGUgdGhlIGNvbXByZXNzaW9uIG92ZXJoZWFkICovCisKICNpZmRlZiBPUEVOU1NMX05PX0NPTVAKLSNkZWZpbmUgU1NMM19SVF9NQVhfQ09NUFJFU1NFRF9MRU5HVEgJU1NMM19SVF9NQVhfUExBSU5fTEVOR1RICisjZGVmaW5lIFNTTDNfUlRfTUFYX0NPTVBSRVNTRURfTEVOR1RICQlTU0wzX1JUX01BWF9QTEFJTl9MRU5HVEgKICNlbHNlCi0jZGVmaW5lIFNTTDNfUlRfTUFYX0NPTVBSRVNTRURfTEVOR1RICSgxMDI0K1NTTDNfUlRfTUFYX1BMQUlOX0xFTkdUSCkKKyNkZWZpbmUgU1NMM19SVF9NQVhfQ09NUFJFU1NFRF9MRU5HVEgJXAorCQkoU1NMM19SVF9NQVhfUExBSU5fTEVOR1RIK1NTTDNfUlRfTUFYX0NPTVBSRVNTRURfT1ZFUkhFQUQpCiAjZW5kaWYKLSNkZWZpbmUgU1NMM19SVF9NQVhfRU5DUllQVEVEX0xFTkdUSAkoMTAyNCtTU0wzX1JUX01BWF9DT01QUkVTU0VEX0xFTkdUSCkKKyNkZWZpbmUgU1NMM19SVF9NQVhfRU5DUllQVEVEX0xFTkdUSAlcCisJCShTU0wzX1JUX01BWF9FTkNSWVBURURfT1ZFUkhFQUQrU1NMM19SVF9NQVhfQ09NUFJFU1NFRF9MRU5HVEgpCisjZGVmaW5lIFNTTDNfUlRfTUFYX1BBQ0tFVF9TSVpFCQlcCisJCShTU0wzX1JUX01BWF9FTkNSWVBURURfTEVOR1RIK1NTTDNfUlRfSEVBREVSX0xFTkdUSCkKKwogLyogRXh0cmEgc3BhY2UgZm9yIGVtcHR5IGZyYWdtZW50LCBoZWFkZXJzLCBNQUMsIGFuZCBwYWRkaW5nLiAqLwogI2RlZmluZSBTU0wzX1JUX0RFRkFVTFRfV1JJVEVfT1ZFUkhFQUQgIDI1NgogI2RlZmluZSBTU0wzX1JUX0RFRkFVTFRfUEFDS0VUX1NJWkUgICAgIDQwOTYgLSBTU0wzX1JUX0RFRkFVTFRfV1JJVEVfT1ZFUkhFQUQKICNpZiBTU0wzX1JUX0RFRkFVTFRfUExBSU5fTEVOR1RIICsgU1NMM19SVF9ERUZBVUxUX1dSSVRFX09WRVJIRUFEID4gU1NMM19SVF9ERUZBVUxUX1BBQ0tFVF9TSVpFCiAjZXJyb3IgIkluc3VmZmljaWVudCBzcGFjZSBhbGxvY2F0ZWQgZm9yIHdyaXRlIGJ1ZmZlcnMuIgogI2VuZGlmCi0jZGVmaW5lIFNTTDNfUlRfTUFYX1BBQ0tFVF9TSVpFCQkoU1NMM19SVF9NQVhfRU5DUllQVEVEX0xFTkdUSCtTU0wzX1JUX0hFQURFUl9MRU5HVEgpCi0jZGVmaW5lIFNTTDNfUlRfTUFYX0RBVEFfU0laRQkJCSgxMDI0KjEwMjQpCiAKICNkZWZpbmUgU1NMM19NRF9DTElFTlRfRklOSVNIRURfQ09OU1QJIlx4NDNceDRDXHg0RVx4NTQiCiAjZGVmaW5lIFNTTDNfTURfU0VSVkVSX0ZJTklTSEVEX0NPTlNUCSJceDUzXHg1Mlx4NTZceDUyIgpAQCAtMzEyLDcgKzM1OCw3IEBACiAvKnJ3Ki8JdW5zaWduZWQgY2hhciAqaW5wdXQ7ICAgLyogd2hlcmUgdGhlIGRlY29kZSBieXRlcyBhcmUgKi8KIC8qciAqLwl1bnNpZ25lZCBjaGFyICpjb21wOyAgICAvKiBvbmx5IHVzZWQgd2l0aCBkZWNvbXByZXNzaW9uIC0gbWFsbG9jKCllZCAqLwogLypyICovICB1bnNpZ25lZCBsb25nIGVwb2NoOyAgICAvKiBlcG9jaCBudW1iZXIsIG5lZWRlZCBieSBEVExTMSAqLwotLypyICovICBQUV82NEJJVCBzZXFfbnVtOyAgICAgICAvKiBzZXF1ZW5jZSBudW1iZXIsIG5lZWRlZCBieSBEVExTMSAqLworLypyICovICB1bnNpZ25lZCBjaGFyIHNlcV9udW1bOF07IC8qIHNlcXVlbmNlIG51bWJlciwgbmVlZGVkIGJ5IERUTFMxICovCiAJfSBTU0wzX1JFQ09SRDsKIAogdHlwZWRlZiBzdHJ1Y3Qgc3NsM19idWZmZXJfc3QKQEAgLTMzNSwxMyArMzgxLDE0IEBACiAgKiBlbm91Z2ggdG8gY29udGFpbiBhbGwgb2YgdGhlIGNlcnQgdHlwZXMgZGVmaW5lZCBlaXRoZXIgZm9yCiAgKiBTU0x2MyBhbmQgVExTdjEuCiAgKi8KLSNkZWZpbmUgU1NMM19DVF9OVU1CRVIJCQk3CisjZGVmaW5lIFNTTDNfQ1RfTlVNQkVSCQkJOQogCiAKICNkZWZpbmUgU1NMM19GTEFHU19OT19SRU5FR09USUFURV9DSVBIRVJTCTB4MDAwMQogI2RlZmluZSBTU0wzX0ZMQUdTX0RFTEFZX0NMSUVOVF9GSU5JU0hFRAkweDAwMDIKICNkZWZpbmUgU1NMM19GTEFHU19QT1BfQlVGRkVSCQkJMHgwMDA0CiAjZGVmaW5lIFRMUzFfRkxBR1NfVExTX1BBRERJTkdfQlVHCQkweDAwMDgKKyNkZWZpbmUgVExTMV9GTEFHU19TS0lQX0NFUlRfVkVSSUZZCQkweDAwMTAKIAogdHlwZWRlZiBzdHJ1Y3Qgc3NsM19zdGF0ZV9zdAogCXsKQEAgLTM0OSw4ICszOTYsMTAgQEAKIAlpbnQgZGVsYXlfYnVmX3BvcF9yZXQ7CiAKIAl1bnNpZ25lZCBjaGFyIHJlYWRfc2VxdWVuY2VbOF07CisJaW50IHJlYWRfbWFjX3NlY3JldF9zaXplOwogCXVuc2lnbmVkIGNoYXIgcmVhZF9tYWNfc2VjcmV0W0VWUF9NQVhfTURfU0laRV07CiAJdW5zaWduZWQgY2hhciB3cml0ZV9zZXF1ZW5jZVs4XTsKKwlpbnQgd3JpdGVfbWFjX3NlY3JldF9zaXplOwogCXVuc2lnbmVkIGNoYXIgd3JpdGVfbWFjX3NlY3JldFtFVlBfTUFYX01EX1NJWkVdOwogCiAJdW5zaWduZWQgY2hhciBzZXJ2ZXJfcmFuZG9tW1NTTDNfUkFORE9NX1NJWkVdOwpAQCAtMzYwLDYgKzQwOSw5IEBACiAJaW50IG5lZWRfZW1wdHlfZnJhZ21lbnRzOwogCWludCBlbXB0eV9mcmFnbWVudF9kb25lOwogCisJLyogVGhlIHZhbHVlIG9mICdleHRyYScgd2hlbiB0aGUgYnVmZmVycyB3ZXJlIGluaXRpYWxpemVkICovCisJaW50IGluaXRfZXh0cmE7CisKIAlTU0wzX0JVRkZFUiByYnVmOwkvKiByZWFkIElPIGdvZXMgaW50byBoZXJlICovCiAJU1NMM19CVUZGRVIgd2J1ZjsJLyogd3JpdGUgSU8gZ29lcyBpbnRvIGhlcmUgKi8KIApAQCAtMzgxLDkgKzQzMywxMSBAQAogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKndwZW5kX2J1ZjsKIAogCS8qIHVzZWQgZHVyaW5nIHN0YXJ0dXAsIGRpZ2VzdCBhbGwgaW5jb21pbmcvb3V0Z29pbmcgcGFja2V0cyAqLwotCUVWUF9NRF9DVFggZmluaXNoX2Rnc3QxOwotCUVWUF9NRF9DVFggZmluaXNoX2Rnc3QyOwotCisJQklPICpoYW5kc2hha2VfYnVmZmVyOworCS8qIFdoZW4gc2V0IG9mIGhhbmRzaGFrZSBkaWdlc3RzIGlzIGRldGVybWluZWQsIGJ1ZmZlciBpcyBoYXNoZWQKKwkgKiBhbmQgZnJlZWQgYW5kIE1EX0NUWC1lcyBmb3IgYWxsIHJlcXVpcmVkIGRpZ2VzdHMgYXJlIHN0b3JlZCBpbgorCSAqIHRoaXMgYXJyYXkgKi8KKwlFVlBfTURfQ1RYICoqaGFuZHNoYWtlX2Rnc3Q7CiAJLyogdGhpcyBpcyBzZXQgd2hlbmVydmVyIHdlIHNlZSBhIGNoYW5nZV9jaXBoZXJfc3BlYyBtZXNzYWdlCiAJICogY29tZSBpbiB3aGVuIHdlIGFyZSBub3QgbG9va2luZyBmb3Igb25lICovCiAJaW50IGNoYW5nZV9jaXBoZXJfc3BlYzsKQEAgLTQwMyw2ICs0NTcsMTQgQEAKIAogCWludCBpbl9yZWFkX2FwcF9kYXRhOwogCisJLyogT3BhcXVlIFBSRiBpbnB1dCBhcyB1c2VkIGZvciB0aGUgY3VycmVudCBoYW5kc2hha2UuCisJICogVGhlc2UgZmllbGRzIGFyZSB1c2VkIG9ubHkgaWYgVExTRVhUX1RZUEVfb3BhcXVlX3ByZl9pbnB1dCBpcyBkZWZpbmVkCisJICogKG90aGVyd2lzZSwgdGhleSBhcmUgbWVyZWx5IHByZXNlbnQgdG8gaW1wcm92ZSBiaW5hcnkgY29tcGF0aWJpbGl0eSkgKi8KKwl2b2lkICpjbGllbnRfb3BhcXVlX3ByZl9pbnB1dDsKKwlzaXplX3QgY2xpZW50X29wYXF1ZV9wcmZfaW5wdXRfbGVuOworCXZvaWQgKnNlcnZlcl9vcGFxdWVfcHJmX2lucHV0OworCXNpemVfdCBzZXJ2ZXJfb3BhcXVlX3ByZl9pbnB1dF9sZW47CisKIAlzdHJ1Y3QJewogCQkvKiBhY3R1YWxseSBvbmx5IG5lZWRzIHRvIGJlIDE2KzIwICovCiAJCXVuc2lnbmVkIGNoYXIgY2VydF92ZXJpZnlfbWRbRVZQX01BWF9NRF9TSVpFKjJdOwpAQCAtNDE3LDcgKzQ3OSw3IEBACiAJCWludCBtZXNzYWdlX3R5cGU7CiAKIAkJLyogdXNlZCB0byBob2xkIHRoZSBuZXcgY2lwaGVyIHdlIGFyZSBnb2luZyB0byB1c2UgKi8KLQkJU1NMX0NJUEhFUiAqbmV3X2NpcGhlcjsKKwkJY29uc3QgU1NMX0NJUEhFUiAqbmV3X2NpcGhlcjsKICNpZm5kZWYgT1BFTlNTTF9OT19ESAogCQlESCAqZGg7CiAjZW5kaWYKQEAgLTQ0NCw2ICs1MDYsOCBAQAogCiAJCWNvbnN0IEVWUF9DSVBIRVIgKm5ld19zeW1fZW5jOwogCQljb25zdCBFVlBfTUQgKm5ld19oYXNoOworCQlpbnQgbmV3X21hY19wa2V5X3R5cGU7CisJCWludCBuZXdfbWFjX3NlY3JldF9zaXplOwogI2lmbmRlZiBPUEVOU1NMX05PX0NPTVAKIAkJY29uc3QgU1NMX0NPTVAgKm5ld19jb21wcmVzc2lvbjsKICNlbHNlCkBAIC01ODAsNCArNjQ0LDMgQEAKIH0KICNlbmRpZgogI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIGIvaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKaW5kZXggNWNiYjExNi4uY2UzNWU1NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKysrIGIvaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKQEAgLTcwLDM3ICs3MCwzNiBAQAogCWludCBzb3J0ZWQ7CiAKIAlpbnQgbnVtX2FsbG9jOwotCWludCAoKmNvbXApKGNvbnN0IGNoYXIgKiBjb25zdCAqLCBjb25zdCBjaGFyICogY29uc3QgKik7Ci0JfSBTVEFDSzsKKwlpbnQgKCpjb21wKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKik7CisJfSBfU1RBQ0s7ICAvKiBVc2UgU1RBQ0tfT0YoLi4uKSBpbnN0ZWFkICovCiAKICNkZWZpbmUgTV9za19udW0oc2spCQkoKHNrKSA/IChzayktPm51bTotMSkKICNkZWZpbmUgTV9za192YWx1ZShzayxuKQkoKHNrKSA/IChzayktPmRhdGFbbl0gOiBOVUxMKQogCi1pbnQgc2tfbnVtKGNvbnN0IFNUQUNLICopOwotY2hhciAqc2tfdmFsdWUoY29uc3QgU1RBQ0sgKiwgaW50KTsKK2ludCBza19udW0oY29uc3QgX1NUQUNLICopOwordm9pZCAqc2tfdmFsdWUoY29uc3QgX1NUQUNLICosIGludCk7CiAKLWNoYXIgKnNrX3NldChTVEFDSyAqLCBpbnQsIGNoYXIgKik7Cit2b2lkICpza19zZXQoX1NUQUNLICosIGludCwgdm9pZCAqKTsKIAotU1RBQ0sgKnNrX25ldyhpbnQgKCpjbXApKGNvbnN0IGNoYXIgKiBjb25zdCAqLCBjb25zdCBjaGFyICogY29uc3QgKikpOwotU1RBQ0sgKnNrX25ld19udWxsKHZvaWQpOwotdm9pZCBza19mcmVlKFNUQUNLICopOwotdm9pZCBza19wb3BfZnJlZShTVEFDSyAqc3QsIHZvaWQgKCpmdW5jKSh2b2lkICopKTsKLWludCBza19pbnNlcnQoU1RBQ0sgKnNrLGNoYXIgKmRhdGEsaW50IHdoZXJlKTsKLWNoYXIgKnNrX2RlbGV0ZShTVEFDSyAqc3QsaW50IGxvYyk7Ci1jaGFyICpza19kZWxldGVfcHRyKFNUQUNLICpzdCwgY2hhciAqcCk7Ci1pbnQgc2tfZmluZChTVEFDSyAqc3QsY2hhciAqZGF0YSk7Ci1pbnQgc2tfZmluZF9leChTVEFDSyAqc3QsY2hhciAqZGF0YSk7Ci1pbnQgc2tfcHVzaChTVEFDSyAqc3QsY2hhciAqZGF0YSk7Ci1pbnQgc2tfdW5zaGlmdChTVEFDSyAqc3QsY2hhciAqZGF0YSk7Ci1jaGFyICpza19zaGlmdChTVEFDSyAqc3QpOwotY2hhciAqc2tfcG9wKFNUQUNLICpzdCk7Ci12b2lkIHNrX3plcm8oU1RBQ0sgKnN0KTsKLWludCAoKnNrX3NldF9jbXBfZnVuYyhTVEFDSyAqc2ssIGludCAoKmMpKGNvbnN0IGNoYXIgKiBjb25zdCAqLAotCQkJY29uc3QgY2hhciAqIGNvbnN0ICopKSkKLQkJCShjb25zdCBjaGFyICogY29uc3QgKiwgY29uc3QgY2hhciAqIGNvbnN0ICopOwotU1RBQ0sgKnNrX2R1cChTVEFDSyAqc3QpOwotdm9pZCBza19zb3J0KFNUQUNLICpzdCk7Ci1pbnQgc2tfaXNfc29ydGVkKGNvbnN0IFNUQUNLICpzdCk7CitfU1RBQ0sgKnNrX25ldyhpbnQgKCpjbXApKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSk7CitfU1RBQ0sgKnNrX25ld19udWxsKHZvaWQpOwordm9pZCBza19mcmVlKF9TVEFDSyAqKTsKK3ZvaWQgc2tfcG9wX2ZyZWUoX1NUQUNLICpzdCwgdm9pZCAoKmZ1bmMpKHZvaWQgKikpOworaW50IHNrX2luc2VydChfU1RBQ0sgKnNrLCB2b2lkICpkYXRhLCBpbnQgd2hlcmUpOwordm9pZCAqc2tfZGVsZXRlKF9TVEFDSyAqc3QsIGludCBsb2MpOwordm9pZCAqc2tfZGVsZXRlX3B0cihfU1RBQ0sgKnN0LCB2b2lkICpwKTsKK2ludCBza19maW5kKF9TVEFDSyAqc3QsIHZvaWQgKmRhdGEpOworaW50IHNrX2ZpbmRfZXgoX1NUQUNLICpzdCwgdm9pZCAqZGF0YSk7CitpbnQgc2tfcHVzaChfU1RBQ0sgKnN0LCB2b2lkICpkYXRhKTsKK2ludCBza191bnNoaWZ0KF9TVEFDSyAqc3QsIHZvaWQgKmRhdGEpOwordm9pZCAqc2tfc2hpZnQoX1NUQUNLICpzdCk7Cit2b2lkICpza19wb3AoX1NUQUNLICpzdCk7Cit2b2lkIHNrX3plcm8oX1NUQUNLICpzdCk7CitpbnQgKCpza19zZXRfY21wX2Z1bmMoX1NUQUNLICpzaywgaW50ICgqYykoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKSkKKwkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOworX1NUQUNLICpza19kdXAoX1NUQUNLICpzdCk7Cit2b2lkIHNrX3NvcnQoX1NUQUNLICpzdCk7CitpbnQgc2tfaXNfc29ydGVkKGNvbnN0IF9TVEFDSyAqc3QpOwogCiAjaWZkZWYgIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW5zc2wvc3RvcmUuaCBiL2luY2x1ZGUvb3BlbnNzbC9zdG9yZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDU4MzM3Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvb3BlbnNzbC9zdG9yZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTU0ICswLDAgQEAKLS8qIGNyeXB0by9zdG9yZS9zdG9yZS5oIC0qLSBtb2RlOkM7IGMtZmlsZS1zdHlsZTogImVheSIgLSotICovCi0vKiBXcml0dGVuIGJ5IFJpY2hhcmQgTGV2aXR0ZSAocmljaGFyZEBsZXZpdHRlLm9yZykgZm9yIHRoZSBPcGVuU1NMCi0gKiBwcm9qZWN0IDIwMDMuCi0gKi8KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0gKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0gKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0gKgotICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0gKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotICoKLSAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotICoKLSAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSAqICAgIGFja25vd2xlZGdtZW50OgotICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0gKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKgotICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCi0gKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCi0gKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSAqCi0gKi8KLQotI2lmbmRlZiBIRUFERVJfU1RPUkVfSAotI2RlZmluZSBIRUFERVJfU1RPUkVfSAotCi0jaW5jbHVkZSA8b3BlbnNzbC9vc3NsX3R5cC5oPgotI2lmbmRlZiBPUEVOU1NMX05PX0RFUFJFQ0FURUQKLSNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSNpbmNsdWRlIDxvcGVuc3NsL3g1MDkuaD4KLSNlbmRpZgotCi0jaWZkZWYgIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi0vKiBBbHJlYWR5IGRlZmluZWQgaW4gb3NzbF90eXAuaCAqLwotLyogdHlwZWRlZiBzdHJ1Y3Qgc3RvcmVfc3QgU1RPUkU7ICovCi0vKiB0eXBlZGVmIHN0cnVjdCBzdG9yZV9tZXRob2Rfc3QgU1RPUkVfTUVUSE9EOyAqLwotCi0KLS8qIEFsbCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyByZXR1cm4gMCwgYSBuZWdhdGl2ZSBudW1iZXIgb3IgTlVMTCBvbiBlcnJvci4KLSAgIFdoZW4gZXZlcnl0aGluZyBpcyBmaW5lLCB0aGV5IHJldHVybiBhIHBvc2l0aXZlIHZhbHVlIG9yIGEgbm9uLU5VTEwKLSAgIHBvaW50ZXIsIGFsbCBkZXBlbmRpbmcgb24gdGhlaXIgcHVycG9zZS4gKi8KLQotLyogQ3JlYXRvcnMgYW5kIGRlc3RydWN0b3IuICAgKi8KLVNUT1JFICpTVE9SRV9uZXdfbWV0aG9kKGNvbnN0IFNUT1JFX01FVEhPRCAqbWV0aG9kKTsKLVNUT1JFICpTVE9SRV9uZXdfZW5naW5lKEVOR0lORSAqZW5naW5lKTsKLXZvaWQgU1RPUkVfZnJlZShTVE9SRSAqdWkpOwotCi0KLS8qIEdpdmUgYSB1c2VyIGludGVyZmFjZSBwYXJhbWV0cmlzZWQgY29udHJvbCBjb21tYW5kcy4gIFRoaXMgY2FuIGJlIHVzZWQgdG8KLSAgIHNlbmQgZG93biBhbiBpbnRlZ2VyLCBhIGRhdGEgcG9pbnRlciBvciBhIGZ1bmN0aW9uIHBvaW50ZXIsIGFzIHdlbGwgYXMKLSAgIGJlIHVzZWQgdG8gZ2V0IGluZm9ybWF0aW9uIGZyb20gYSBTVE9SRS4gKi8KLWludCBTVE9SRV9jdHJsKFNUT1JFICpzdG9yZSwgaW50IGNtZCwgbG9uZyBpLCB2b2lkICpwLCB2b2lkICgqZikodm9pZCkpOwotCi0vKiBBIGNvbnRyb2wgdG8gc2V0IHRoZSBkaXJlY3Rvcnkgd2l0aCBrZXlzIGFuZCBjZXJ0aWZpY2F0ZXMuICBVc2VkIGJ5IHRoZQotICAgYnVpbHQtaW4gZGlyZWN0b3J5IGxldmVsIG1ldGhvZC4gKi8KLSNkZWZpbmUgU1RPUkVfQ1RSTF9TRVRfRElSRUNUT1JZCTB4MDAwMQotLyogQSBjb250cm9sIHRvIHNldCBhIGZpbGUgdG8gbG9hZC4gIFVzZWQgYnkgdGhlIGJ1aWx0LWluIGZpbGUgbGV2ZWwgbWV0aG9kLiAqLwotI2RlZmluZSBTVE9SRV9DVFJMX1NFVF9GSUxFCQkweDAwMDIKLS8qIEEgY29udHJvbCB0byBzZXQgYSBjb25maWd1cmF0aW9uIGZpbGUgdG8gbG9hZC4gIENhbiBiZSB1c2VkIGJ5IGFueSBtZXRob2QKLSAgIHRoYXQgd2lzaGVzIHRvIGxvYWQgYSBjb25maWd1cmF0aW9uIGZpbGUuICovCi0jZGVmaW5lIFNUT1JFX0NUUkxfU0VUX0NPTkZfRklMRQkweDAwMDMKLS8qIEEgY29udHJvbCB0byBzZXQgYSB0aGUgc2VjdGlvbiBvZiB0aGUgbG9hZGVkIGNvbmZpZ3VyYXRpb24gZmlsZS4gIENhbiBiZQotICAgdXNlZCBieSBhbnkgbWV0aG9kIHRoYXQgd2lzaGVzIHRvIGxvYWQgYSBjb25maWd1cmF0aW9uIGZpbGUuICovCi0jZGVmaW5lIFNUT1JFX0NUUkxfU0VUX0NPTkZfU0VDVElPTgkweDAwMDQKLQotCi0vKiBTb21lIG1ldGhvZHMgbWF5IHVzZSBleHRyYSBkYXRhICovCi0jZGVmaW5lIFNUT1JFX3NldF9hcHBfZGF0YShzLGFyZykJU1RPUkVfc2V0X2V4X2RhdGEocywwLGFyZykKLSNkZWZpbmUgU1RPUkVfZ2V0X2FwcF9kYXRhKHMpCQlTVE9SRV9nZXRfZXhfZGF0YShzLDApCi1pbnQgU1RPUkVfZ2V0X2V4X25ld19pbmRleChsb25nIGFyZ2wsIHZvaWQgKmFyZ3AsIENSWVBUT19FWF9uZXcgKm5ld19mdW5jLAotCUNSWVBUT19FWF9kdXAgKmR1cF9mdW5jLCBDUllQVE9fRVhfZnJlZSAqZnJlZV9mdW5jKTsKLWludCBTVE9SRV9zZXRfZXhfZGF0YShTVE9SRSAqcixpbnQgaWR4LHZvaWQgKmFyZyk7Ci12b2lkICpTVE9SRV9nZXRfZXhfZGF0YShTVE9SRSAqciwgaW50IGlkeCk7Ci0KLS8qIFVzZSBzcGVjaWZpYyBtZXRob2RzIGluc3RlYWQgb2YgdGhlIGJ1aWx0LWluIG9uZSAqLwotY29uc3QgU1RPUkVfTUVUSE9EICpTVE9SRV9nZXRfbWV0aG9kKFNUT1JFICpzdG9yZSk7Ci1jb25zdCBTVE9SRV9NRVRIT0QgKlNUT1JFX3NldF9tZXRob2QoU1RPUkUgKnN0b3JlLCBjb25zdCBTVE9SRV9NRVRIT0QgKm1ldGgpOwotCi0vKiBUaGUgc3RhbmRhcmQgT3BlblNTTCBtZXRob2RzLiAqLwotLyogVGhpcyBpcyB0aGUgaW4tbWVtb3J5IG1ldGhvZC4gIEl0IGRvZXMgZXZlcnl0aGluZyBleGNlcHQgcmV2b2tpbmcgYW5kIHVwZGF0aW5nLAotICAgYW5kIGlzIG9mIGNvdXJzZSB2b2xhdGlsZS4gIEl0J3MgdXNlZCBieSBvdGhlciBtZXRob2RzIHRoYXQgaGF2ZSBhbiBpbi1tZW1vcnkKLSAgIGNhY2hlLiAqLwotY29uc3QgU1RPUkVfTUVUSE9EICpTVE9SRV9NZW1vcnkodm9pZCk7Ci0jaWYgMCAvKiBOb3QgeWV0IGltcGxlbWVudGVkICovCi0vKiBUaGlzIGlzIHRoZSBkaXJlY3Rvcnkgc3RvcmUuICBJdCBkb2VzIGV2ZXJ5dGhpbmcgZXhjZXB0IHJldm9raW5nIGFuZCB1cGRhdGluZywKLSAgIGFuZCB1c2VzIFNUT1JFX01lbW9yeSgpIHRvIGNhY2hlIHRoaW5ncyBpbiBtZW1vcnkuICovCi1jb25zdCBTVE9SRV9NRVRIT0QgKlNUT1JFX0RpcmVjdG9yeSh2b2lkKTsKLS8qIFRoaXMgaXMgdGhlIGZpbGUgc3RvcmUuICBJdCBkb2VzIGV2ZXJ5dGhpbmcgZXhjZXB0IHJldm9raW5nIGFuZCB1cGRhdGluZywKLSAgIGFuZCB1c2VzIFNUT1JFX01lbW9yeSgpIHRvIGNhY2hlIHRoaW5ncyBpbiBtZW1vcnkuICBDZXJ0aWZpY2F0ZXMgYXJlIGFkZGVkCi0gICB0byBpdCB3aXRoIHRoZSBzdG9yZSBvcGVyYXRpb24sIGFuZCBpdCB3aWxsIG9ubHkgZ2V0IGNhY2hlZCBjZXJ0aWZpY2F0ZXMuICovCi1jb25zdCBTVE9SRV9NRVRIT0QgKlNUT1JFX0ZpbGUodm9pZCk7Ci0jZW5kaWYKLQotLyogU3RvcmUgZnVuY3Rpb25zIHRha2UgYSB0eXBlIGNvZGUgZm9yIHRoZSB0eXBlIG9mIGRhdGEgdGhleSBzaG91bGQgc3RvcmUKLSAgIG9yIGZldGNoICovCi10eXBlZGVmIGVudW0gU1RPUkVfb2JqZWN0X3R5cGVzCi0JewotCVNUT1JFX09CSkVDVF9UWVBFX1g1MDlfQ0VSVElGSUNBVEU9CTB4MDEsIC8qIFg1MDkgKiAqLwotCVNUT1JFX09CSkVDVF9UWVBFX1g1MDlfQ1JMPQkJMHgwMiwgLyogWDUwOV9DUkwgKiAqLwotCVNUT1JFX09CSkVDVF9UWVBFX1BSSVZBVEVfS0VZPQkJMHgwMywgLyogRVZQX1BLRVkgKiAqLwotCVNUT1JFX09CSkVDVF9UWVBFX1BVQkxJQ19LRVk9CQkweDA0LCAvKiBFVlBfUEtFWSAqICovCi0JU1RPUkVfT0JKRUNUX1RZUEVfTlVNQkVSPQkJMHgwNSwgLyogQklHTlVNICogKi8KLQlTVE9SRV9PQkpFQ1RfVFlQRV9BUkJJVFJBUlk9CQkweDA2LCAvKiBCVUZfTUVNICogKi8KLQlTVE9SRV9PQkpFQ1RfVFlQRV9OVU09CQkJMHgwNiAgLyogVGhlIGFtb3VudCBvZiBrbm93bgotCQkJCQkJCSBvYmplY3QgdHlwZXMgKi8KLQl9IFNUT1JFX09CSkVDVF9UWVBFUzsKLS8qIExpc3Qgb2YgdGV4dCBzdHJpbmdzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG9iamVjdCB0eXBlcy4gKi8KLWV4dGVybiBjb25zdCBjaGFyICogY29uc3QgU1RPUkVfb2JqZWN0X3R5cGVfc3RyaW5nW1NUT1JFX09CSkVDVF9UWVBFX05VTSsxXTsKLQotLyogU29tZSBzdG9yZSBmdW5jdGlvbnMgdGFrZSBhIHBhcmFtZXRlciBsaXN0LiAgVGhvc2UgcGFyYW1ldGVycyBjb21lIHdpdGgKLSAgIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNvZGVzLiBUaGUgY29tbWVudHMgZm9sbG93aW5nIHRoZSBjb2RlcyBiZWxvdyBpbmRpY2F0ZQotICAgd2hhdCB0eXBlIHRoZSB2YWx1ZSBzaG91bGQgYmUgYSBwb2ludGVyIHRvLiAqLwotdHlwZWRlZiBlbnVtIFNUT1JFX3BhcmFtcwotCXsKLQlTVE9SRV9QQVJBTV9FVlBfVFlQRT0JCQkweDAxLCAvKiBpbnQgKi8KLQlTVE9SRV9QQVJBTV9CSVRTPQkJCTB4MDIsIC8qIHNpemVfdCAqLwotCVNUT1JFX1BBUkFNX0tFWV9QQVJBTUVURVJTPQkJMHgwMywgLyogPz8/ICovCi0JU1RPUkVfUEFSQU1fS0VZX05PX1BBUkFNRVRFUlM9CQkweDA0LCAvKiBOL0EgKi8KLQlTVE9SRV9QQVJBTV9BVVRIX1BBU1NQSFJBU0U9CQkweDA1LCAvKiBjaGFyICogKi8KLQlTVE9SRV9QQVJBTV9BVVRIX0tSQjVfVElDS0VUPQkJMHgwNiwgLyogdm9pZCAqICovCi0JU1RPUkVfUEFSQU1fVFlQRV9OVU09CQkJMHgwNiAgLyogVGhlIGFtb3VudCBvZiBrbm93bgotCQkJCQkJCSBwYXJhbWV0ZXIgdHlwZXMgKi8KLQl9IFNUT1JFX1BBUkFNX1RZUEVTOwotLyogUGFyYW1ldGVyIHZhbHVlIHNpemVzLiAgLTEgbWVhbnMgdW5rbm93biwgYW55dGhpbmcgZWxzZSBpcyB0aGUgcmVxdWlyZWQgc2l6ZS4gKi8KLWV4dGVybiBjb25zdCBpbnQgU1RPUkVfcGFyYW1fc2l6ZXNbU1RPUkVfUEFSQU1fVFlQRV9OVU0rMV07Ci0KLS8qIFN0b3JlIGZ1bmN0aW9ucyB0YWtlIGF0dHJpYnV0ZSBsaXN0cy4gIFRob3NlIGF0dHJpYnV0ZXMgY29tZSB3aXRoIGNvZGVzLgotICAgVGhlIGNvbW1lbnRzIGZvbGxvd2luZyB0aGUgY29kZXMgYmVsb3cgaW5kaWNhdGUgd2hhdCB0eXBlIHRoZSB2YWx1ZSBzaG91bGQKLSAgIGJlIGEgcG9pbnRlciB0by4gKi8KLXR5cGVkZWYgZW51bSBTVE9SRV9hdHRyaWJzCi0JewotCVNUT1JFX0FUVFJfRU5EPQkJCQkweDAwLAotCVNUT1JFX0FUVFJfRlJJRU5ETFlOQU1FPQkJMHgwMSwgLyogQyBzdHJpbmcgKi8KLQlTVE9SRV9BVFRSX0tFWUlEPQkJCTB4MDIsIC8qIDE2MCBiaXQgc3RyaW5nIChTSEExKSAqLwotCVNUT1JFX0FUVFJfSVNTVUVSS0VZSUQ9CQkJMHgwMywgLyogMTYwIGJpdCBzdHJpbmcgKFNIQTEpICovCi0JU1RPUkVfQVRUUl9TVUJKRUNUS0VZSUQ9CQkweDA0LCAvKiAxNjAgYml0IHN0cmluZyAoU0hBMSkgKi8KLQlTVE9SRV9BVFRSX0lTU1VFUlNFUklBTEhBU0g9CQkweDA1LCAvKiAxNjAgYml0IHN0cmluZyAoU0hBMSkgKi8KLQlTVE9SRV9BVFRSX0lTU1VFUj0JCQkweDA2LCAvKiBYNTA5X05BTUUgKiAqLwotCVNUT1JFX0FUVFJfU0VSSUFMPQkJCTB4MDcsIC8qIEJJR05VTSAqICovCi0JU1RPUkVfQVRUUl9TVUJKRUNUPQkJCTB4MDgsIC8qIFg1MDlfTkFNRSAqICovCi0JU1RPUkVfQVRUUl9DRVJUSEFTSD0JCQkweDA5LCAvKiAxNjAgYml0IHN0cmluZyAoU0hBMSkgKi8KLQlTVE9SRV9BVFRSX0VNQUlMPQkJCTB4MGEsIC8qIEMgc3RyaW5nICovCi0JU1RPUkVfQVRUUl9GSUxFTkFNRT0JCQkweDBiLCAvKiBDIHN0cmluZyAqLwotCVNUT1JFX0FUVFJfVFlQRV9OVU09CQkJMHgwYiwgLyogVGhlIGFtb3VudCBvZiBrbm93bgotCQkJCQkJCSBhdHRyaWJ1dGUgdHlwZXMgKi8KLQlTVE9SRV9BVFRSX09SPQkJCQkweGZmICAvKiBUaGlzIGlzIGEgc3BlY2lhbAotCQkJCQkJCSBzZXBhcmF0b3IsIHdoaWNoCi0JCQkJCQkJIGV4cHJlc3NlcyB0aGUgT1IKLQkJCQkJCQkgb3BlcmF0aW9uLiAgKi8KLQl9IFNUT1JFX0FUVFJfVFlQRVM7Ci0vKiBBdHRyaWJ1dGUgdmFsdWUgc2l6ZXMuICAtMSBtZWFucyB1bmtub3duLCBhbnl0aGluZyBlbHNlIGlzIHRoZSByZXF1aXJlZCBzaXplLiAqLwotZXh0ZXJuIGNvbnN0IGludCBTVE9SRV9hdHRyX3NpemVzW1NUT1JFX0FUVFJfVFlQRV9OVU0rMV07Ci0KLXR5cGVkZWYgZW51bSBTVE9SRV9jZXJ0aWZpY2F0ZV9zdGF0dXMKLQl7Ci0JU1RPUkVfWDUwOV9WQUxJRD0JCQkweDAwLAotCVNUT1JFX1g1MDlfRVhQSVJFRD0JCQkweDAxLAotCVNUT1JFX1g1MDlfU1VTUEVOREVEPQkJCTB4MDIsCi0JU1RPUkVfWDUwOV9SRVZPS0VEPQkJCTB4MDMKLQl9IFNUT1JFX0NFUlRJRklDQVRFX1NUQVRVUzsKLQotLyogRW5naW5lIHN0b3JlIGZ1bmN0aW9ucyB3aWxsIHJldHVybiBhIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgbmVjZXNzYXJ5Ci0gKiBpbmZvcm1hdGlvbiwgaW5jbHVkaW5nIHJldm9rYXRpb24gc3RhdHVzIGZvciBjZXJ0aWZpY2F0ZXMuICBUaGlzIGlzIHJlYWxseSBub3QKLSAqIG5lZWRlZCBmb3IgYXBwbGljYXRpb24gYXV0aG9ycywgYXMgdGhlIEVOR0lORSBmcmFtZXdvcmsgZnVuY3Rpb25zIHdpbGwgZXh0cmFjdAotICogdGhlIE9wZW5TU0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gd2hlbiBhdCBhbGwgcG9zc2libGUuICBIb3dldmVyLCBmb3IgZW5naW5lCi0gKiBhdXRob3JzLCBpdCdzIGNydWNpYWwgdG8ga25vdyB0aGlzIHN0cnVjdHVyZS4gICovCi10eXBlZGVmIHN0cnVjdCBTVE9SRV9PQkpFQ1Rfc3QKLQl7Ci0JU1RPUkVfT0JKRUNUX1RZUEVTIHR5cGU7Ci0JdW5pb24KLQkJewotCQlzdHJ1Y3QKLQkJCXsKLQkJCVNUT1JFX0NFUlRJRklDQVRFX1NUQVRVUyBzdGF0dXM7Ci0JCQlYNTA5ICpjZXJ0aWZpY2F0ZTsKLQkJCX0geDUwOTsKLQkJWDUwOV9DUkwgKmNybDsKLQkJRVZQX1BLRVkgKmtleTsKLQkJQklHTlVNICpudW1iZXI7Ci0JCUJVRl9NRU0gKmFyYml0cmFyeTsKLQkJfSBkYXRhOwotCX0gU1RPUkVfT0JKRUNUOwotREVDTEFSRV9TVEFDS19PRihTVE9SRV9PQkpFQ1QpCi1TVE9SRV9PQkpFQ1QgKlNUT1JFX09CSkVDVF9uZXcodm9pZCk7Ci12b2lkIFNUT1JFX09CSkVDVF9mcmVlKFNUT1JFX09CSkVDVCAqZGF0YSk7Ci0KLQotCi0vKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBoYW5kbGUgdGhlIHN0b3JhZ2UuIFRoZXkgcmV0dXJuIDAsIGEgbmVnYXRpdmUgbnVtYmVyCi0gICBvciBOVUxMIG9uIGVycm9yLCBhbnl0aGluZyBlbHNlIG9uIHN1Y2Nlc3MuICovCi1YNTA5ICpTVE9SRV9nZXRfY2VydGlmaWNhdGUoU1RPUkUgKmUsIE9QRU5TU0xfSVRFTSBhdHRyaWJ1dGVzW10sCi0JT1BFTlNTTF9JVEVNIHBhcmFtZXRlcnNbXSk7Ci1pbnQgU1RPUkVfc3RvcmVfY2VydGlmaWNhdGUoU1RPUkUgKmUsIFg1MDkgKmRhdGEsIE9QRU5TU0xfSVRFTSBhdHRyaWJ1dGVzW10sCi0JT1BFTlNTTF9JVEVNIHBhcmFtZXRlcnNbXSk7Ci1pbnQgU1RPUkVfbW9kaWZ5X2NlcnRpZmljYXRlKFNUT1JFICplLCBPUEVOU1NMX0lURU0gc2VhcmNoX2F0dHJpYnV0ZXNbXSwKLQlPUEVOU1NMX0lURU0gYWRkX2F0dHJpYnV0ZXNbXSwgT1BFTlNTTF9JVEVNIG1vZGlmeV9hdHRyaWJ1dGVzW10sCi0JT1BFTlNTTF9JVEVNIGRlbGV0ZV9hdHRyaWJ1dGVzW10sIE9QRU5TU0xfSVRFTSBwYXJhbWV0ZXJzW10pOwotaW50IFNUT1JFX3Jldm9rZV9jZXJ0aWZpY2F0ZShTVE9SRSAqZSwgT1BFTlNTTF9JVEVNIGF0dHJpYnV0ZXNbXSwKLQlPUEVOU1NMX0lURU0gcGFyYW1ldGVyc1tdKTsKLWludCBTVE9SRV9kZWxldGVfY2VydGlmaWNhdGUoU1RPUkUgKmUsIE9QRU5TU0xfSVRFTSBhdHRyaWJ1dGVzW10sCi0JT1BFTlNTTF9JVEVNIHBhcmFtZXRlcnNbXSk7Ci12b2lkICpTVE9SRV9saXN0X2NlcnRpZmljYXRlX3N0YXJ0KFNUT1JFICplLCBPUEVOU1NMX0lURU0gYXR0cmlidXRlc1tdLAotCU9QRU5TU0xfSVRFTSBwYXJhbWV0ZXJzW10pOwotWDUwOSAqU1RPUkVfbGlzdF9jZXJ0aWZpY2F0ZV9uZXh0KFNUT1JFICplLCB2b2lkICpoYW5kbGUpOwotaW50IFNUT1JFX2xpc3RfY2VydGlmaWNhdGVfZW5kKFNUT1JFICplLCB2b2lkICpoYW5kbGUpOwotaW50IFNUT1JFX2xpc3RfY2VydGlmaWNhdGVfZW5kcChTVE9SRSAqZSwgdm9pZCAqaGFuZGxlKTsKLUVWUF9QS0VZICpTVE9SRV9nZW5lcmF0ZV9rZXkoU1RPUkUgKmUsIE9QRU5TU0xfSVRFTSBhdHRyaWJ1dGVzW10sCi0JT1BFTlNTTF9JVEVNIHBhcmFtZXRlcnNbXSk7Ci1FVlBfUEtFWSAqU1RPUkVfZ2V0X3ByaXZhdGVfa2V5KFNUT1JFICplLCBPUEVOU1NMX0lURU0gYXR0cmlidXRlc1tdLAotCU9QRU5TU0xfSVRFTSBwYXJhbWV0ZXJzW10pOwotaW50IFNUT1JFX3N0b3JlX3ByaXZhdGVfa2V5KFNUT1JFICplLCBFVlBfUEtFWSAqZGF0YSwKLQlPUEVOU1NMX0lURU0gYXR0cmlidXRlc1tdLCBPUEVOU1NMX0lURU0gcGFyYW1ldGVyc1tdKTsKLWludCBTVE9SRV9tb2RpZnlfcHJpdmF0ZV9rZXkoU1RPUkUgKmUsIE9QRU5TU0xfSVRFTSBzZWFyY2hfYXR0cmlidXRlc1tdLAotCU9QRU5TU0xfSVRFTSBhZGRfc3R0cmlidXRlc1tdLCBPUEVOU1NMX0lURU0gbW9kaWZ5X2F0dHJpYnV0ZXNbXSwKLQlPUEVOU1NMX0lURU0gZGVsZXRlX2F0dHJpYnV0ZXNbXSwgT1BFTlNTTF9JVEVNIHBhcmFtZXRlcnNbXSk7Ci1pbnQgU1RPUkVfcmV2b2tlX3ByaXZhdGVfa2V5KFNUT1JFICplLCBPUEVOU1NMX0lURU0gYXR0cmlidXRlc1tdLAotCU9QRU5TU0xfSVRFTSBwYXJhbWV0ZXJzW10pOwotaW50IFNUT1JFX2RlbGV0ZV9wcml2YXRlX2tleShTVE9SRSAqZSwgT1BFTlNTTF9JVEVNIGF0dHJpYnV0ZXNbXSwKLQlPUEVOU1NMX0lURU0gcGFyYW1ldGVyc1tdKTsKLXZvaWQgKlNUT1JFX2xpc3RfcHJpdmF0ZV9rZXlfc3RhcnQoU1RPUkUgKmUsIE9QRU5TU0xfSVRFTSBhdHRyaWJ1dGVzW10sCi0JT1BFTlNTTF9JVEVNIHBhcmFtZXRlcnNbXSk7Ci1FVlBfUEtFWSAqU1RPUkVfbGlzdF9wcml2YXRlX2tleV9uZXh0KFNUT1JFICplLCB2b2lkICpoYW5kbGUpOwotaW50IFNUT1JFX2xpc3RfcHJpdmF0ZV9rZXlfZW5kKFNUT1JFICplLCB2b2lkICpoYW5kbGUpOwotaW50IFNUT1JFX2xpc3RfcHJpdmF0ZV9rZXlfZW5kcChTVE9SRSAqZSwgdm9pZCAqaGFuZGxlKTsKLUVWUF9QS0VZICpTVE9SRV9nZXRfcHVibGljX2tleShTVE9SRSAqZSwgT1BFTlNTTF9JVEVNIGF0dHJpYnV0ZXNbXSwKLQlPUEVOU1NMX0lURU0gcGFyYW1ldGVyc1tdKTsKLWludCBTVE9SRV9zdG9yZV9wdWJsaWNfa2V5KFNUT1JFICplLCBFVlBfUEtFWSAqZGF0YSwgT1BFTlNTTF9JVEVNIGF0dHJpYnV0ZXNbXSwKLQlPUEVOU1NMX0lURU0gcGFyYW1ldGVyc1tdKTsKLWludCBTVE9SRV9tb2RpZnlfcHVibGljX2tleShTVE9SRSAqZSwgT1BFTlNTTF9JVEVNIHNlYXJjaF9hdHRyaWJ1dGVzW10sCi0JT1BFTlNTTF9JVEVNIGFkZF9zdHRyaWJ1dGVzW10sIE9QRU5TU0xfSVRFTSBtb2RpZnlfYXR0cmlidXRlc1tdLAotCU9QRU5TU0xfSVRFTSBkZWxldGVfYXR0cmlidXRlc1tdLCBPUEVOU1NMX0lURU0gcGFyYW1ldGVyc1tdKTsKLWludCBTVE9SRV9yZXZva2VfcHVibGljX2tleShTVE9SRSAqZSwgT1BFTlNTTF9JVEVNIGF0dHJpYnV0ZXNbXSwKLQlPUEVOU1NMX0lURU0gcGFyYW1ldGVyc1tdKTsKLWludCBTVE9SRV9kZWxldGVfcHVibGljX2tleShTVE9SRSAqZSwgT1BFTlNTTF9JVEVNIGF0dHJpYnV0ZXNbXSwKLQlPUEVOU1NMX0lURU0gcGFyYW1ldGVyc1tdKTsKLXZvaWQgKlNUT1JFX2xpc3RfcHVibGljX2tleV9zdGFydChTVE9SRSAqZSwgT1BFTlNTTF9JVEVNIGF0dHJpYnV0ZXNbXSwKLQlPUEVOU1NMX0lURU0gcGFyYW1ldGVyc1tdKTsKLUVWUF9QS0VZICpTVE9SRV9saXN0X3B1YmxpY19rZXlfbmV4dChTVE9SRSAqZSwgdm9pZCAqaGFuZGxlKTsKLWludCBTVE9SRV9saXN0X3B1YmxpY19rZXlfZW5kKFNUT1JFICplLCB2b2lkICpoYW5kbGUpOwotaW50IFNUT1JFX2xpc3RfcHVibGljX2tleV9lbmRwKFNUT1JFICplLCB2b2lkICpoYW5kbGUpOwotWDUwOV9DUkwgKlNUT1JFX2dlbmVyYXRlX2NybChTVE9SRSAqZSwgT1BFTlNTTF9JVEVNIGF0dHJpYnV0ZXNbXSwKLQlPUEVOU1NMX0lURU0gcGFyYW1ldGVyc1tdKTsKLVg1MDlfQ1JMICpTVE9SRV9nZXRfY3JsKFNUT1JFICplLCBPUEVOU1NMX0lURU0gYXR0cmlidXRlc1tdLAotCU9QRU5TU0xfSVRFTSBwYXJhbWV0ZXJzW10pOwotaW50IFNUT1JFX3N0b3JlX2NybChTVE9SRSAqZSwgWDUwOV9DUkwgKmRhdGEsIE9QRU5TU0xfSVRFTSBhdHRyaWJ1dGVzW10sCi0JT1BFTlNTTF9JVEVNIHBhcmFtZXRlcnNbXSk7Ci1pbnQgU1RPUkVfbW9kaWZ5X2NybChTVE9SRSAqZSwgT1BFTlNTTF9JVEVNIHNlYXJjaF9hdHRyaWJ1dGVzW10sCi0JT1BFTlNTTF9JVEVNIGFkZF9zdHRyaWJ1dGVzW10sIE9QRU5TU0xfSVRFTSBtb2RpZnlfYXR0cmlidXRlc1tdLAotCU9QRU5TU0xfSVRFTSBkZWxldGVfYXR0cmlidXRlc1tdLCBPUEVOU1NMX0lURU0gcGFyYW1ldGVyc1tdKTsKLWludCBTVE9SRV9kZWxldGVfY3JsKFNUT1JFICplLCBPUEVOU1NMX0lURU0gYXR0cmlidXRlc1tdLAotCU9QRU5TU0xfSVRFTSBwYXJhbWV0ZXJzW10pOwotdm9pZCAqU1RPUkVfbGlzdF9jcmxfc3RhcnQoU1RPUkUgKmUsIE9QRU5TU0xfSVRFTSBhdHRyaWJ1dGVzW10sCi0JT1BFTlNTTF9JVEVNIHBhcmFtZXRlcnNbXSk7Ci1YNTA5X0NSTCAqU1RPUkVfbGlzdF9jcmxfbmV4dChTVE9SRSAqZSwgdm9pZCAqaGFuZGxlKTsKLWludCBTVE9SRV9saXN0X2NybF9lbmQoU1RPUkUgKmUsIHZvaWQgKmhhbmRsZSk7Ci1pbnQgU1RPUkVfbGlzdF9jcmxfZW5kcChTVE9SRSAqZSwgdm9pZCAqaGFuZGxlKTsKLWludCBTVE9SRV9zdG9yZV9udW1iZXIoU1RPUkUgKmUsIEJJR05VTSAqZGF0YSwgT1BFTlNTTF9JVEVNIGF0dHJpYnV0ZXNbXSwKLQlPUEVOU1NMX0lURU0gcGFyYW1ldGVyc1tdKTsKLWludCBTVE9SRV9tb2RpZnlfbnVtYmVyKFNUT1JFICplLCBPUEVOU1NMX0lURU0gc2VhcmNoX2F0dHJpYnV0ZXNbXSwKLQlPUEVOU1NMX0lURU0gYWRkX3N0dHJpYnV0ZXNbXSwgT1BFTlNTTF9JVEVNIG1vZGlmeV9hdHRyaWJ1dGVzW10sCi0JT1BFTlNTTF9JVEVNIGRlbGV0ZV9hdHRyaWJ1dGVzW10sIE9QRU5TU0xfSVRFTSBwYXJhbWV0ZXJzW10pOwotQklHTlVNICpTVE9SRV9nZXRfbnVtYmVyKFNUT1JFICplLCBPUEVOU1NMX0lURU0gYXR0cmlidXRlc1tdLAotCU9QRU5TU0xfSVRFTSBwYXJhbWV0ZXJzW10pOwotaW50IFNUT1JFX2RlbGV0ZV9udW1iZXIoU1RPUkUgKmUsIE9QRU5TU0xfSVRFTSBhdHRyaWJ1dGVzW10sCi0JT1BFTlNTTF9JVEVNIHBhcmFtZXRlcnNbXSk7Ci1pbnQgU1RPUkVfc3RvcmVfYXJiaXRyYXJ5KFNUT1JFICplLCBCVUZfTUVNICpkYXRhLCBPUEVOU1NMX0lURU0gYXR0cmlidXRlc1tdLAotCU9QRU5TU0xfSVRFTSBwYXJhbWV0ZXJzW10pOwotaW50IFNUT1JFX21vZGlmeV9hcmJpdHJhcnkoU1RPUkUgKmUsIE9QRU5TU0xfSVRFTSBzZWFyY2hfYXR0cmlidXRlc1tdLAotCU9QRU5TU0xfSVRFTSBhZGRfc3R0cmlidXRlc1tdLCBPUEVOU1NMX0lURU0gbW9kaWZ5X2F0dHJpYnV0ZXNbXSwKLQlPUEVOU1NMX0lURU0gZGVsZXRlX2F0dHJpYnV0ZXNbXSwgT1BFTlNTTF9JVEVNIHBhcmFtZXRlcnNbXSk7Ci1CVUZfTUVNICpTVE9SRV9nZXRfYXJiaXRyYXJ5KFNUT1JFICplLCBPUEVOU1NMX0lURU0gYXR0cmlidXRlc1tdLAotCU9QRU5TU0xfSVRFTSBwYXJhbWV0ZXJzW10pOwotaW50IFNUT1JFX2RlbGV0ZV9hcmJpdHJhcnkoU1RPUkUgKmUsIE9QRU5TU0xfSVRFTSBhdHRyaWJ1dGVzW10sCi0JT1BFTlNTTF9JVEVNIHBhcmFtZXRlcnNbXSk7Ci0KLQotLyogQ3JlYXRlIGFuZCBtYW5pcHVsYXRlIG1ldGhvZHMgKi8KLVNUT1JFX01FVEhPRCAqU1RPUkVfY3JlYXRlX21ldGhvZChjaGFyICpuYW1lKTsKLXZvaWQgU1RPUkVfZGVzdHJveV9tZXRob2QoU1RPUkVfTUVUSE9EICpzdG9yZV9tZXRob2QpOwotCi0vKiBUaGVzZSBjYWxsYmFjayB0eXBlcyBhcmUgdXNlIGZvciBzdG9yZSBoYW5kbGVycyAqLwotdHlwZWRlZiBpbnQgKCpTVE9SRV9JTklUSUFMSVNFX0ZVTkNfUFRSKShTVE9SRSAqKTsKLXR5cGVkZWYgdm9pZCAoKlNUT1JFX0NMRUFOVVBfRlVOQ19QVFIpKFNUT1JFICopOwotdHlwZWRlZiBTVE9SRV9PQkpFQ1QgKigqU1RPUkVfR0VORVJBVEVfT0JKRUNUX0ZVTkNfUFRSKShTVE9SRSAqLCBTVE9SRV9PQkpFQ1RfVFlQRVMgdHlwZSwgT1BFTlNTTF9JVEVNIGF0dHJpYnV0ZXNbXSwgT1BFTlNTTF9JVEVNIHBhcmFtZXRlcnNbXSk7Ci10eXBlZGVmIFNUT1JFX09CSkVDVCAqKCpTVE9SRV9HRVRfT0JKRUNUX0ZVTkNfUFRSKShTVE9SRSAqLCBTVE9SRV9PQkpFQ1RfVFlQRVMgdHlwZSwgT1BFTlNTTF9JVEVNIGF0dHJpYnV0ZXNbXSwgT1BFTlNTTF9JVEVNIHBhcmFtZXRlcnNbXSk7Ci10eXBlZGVmIHZvaWQgKigqU1RPUkVfU1RBUlRfT0JKRUNUX0ZVTkNfUFRSKShTVE9SRSAqLCBTVE9SRV9PQkpFQ1RfVFlQRVMgdHlwZSwgT1BFTlNTTF9JVEVNIGF0dHJpYnV0ZXNbXSwgT1BFTlNTTF9JVEVNIHBhcmFtZXRlcnNbXSk7Ci10eXBlZGVmIFNUT1JFX09CSkVDVCAqKCpTVE9SRV9ORVhUX09CSkVDVF9GVU5DX1BUUikoU1RPUkUgKiwgdm9pZCAqaGFuZGxlKTsKLXR5cGVkZWYgaW50ICgqU1RPUkVfRU5EX09CSkVDVF9GVU5DX1BUUikoU1RPUkUgKiwgdm9pZCAqaGFuZGxlKTsKLXR5cGVkZWYgaW50ICgqU1RPUkVfSEFORExFX09CSkVDVF9GVU5DX1BUUikoU1RPUkUgKiwgU1RPUkVfT0JKRUNUX1RZUEVTIHR5cGUsIE9QRU5TU0xfSVRFTSBhdHRyaWJ1dGVzW10sIE9QRU5TU0xfSVRFTSBwYXJhbWV0ZXJzW10pOwotdHlwZWRlZiBpbnQgKCpTVE9SRV9TVE9SRV9PQkpFQ1RfRlVOQ19QVFIpKFNUT1JFICosIFNUT1JFX09CSkVDVF9UWVBFUyB0eXBlLCBTVE9SRV9PQkpFQ1QgKmRhdGEsIE9QRU5TU0xfSVRFTSBhdHRyaWJ1dGVzW10sIE9QRU5TU0xfSVRFTSBwYXJhbWV0ZXJzW10pOwotdHlwZWRlZiBpbnQgKCpTVE9SRV9NT0RJRllfT0JKRUNUX0ZVTkNfUFRSKShTVE9SRSAqLCBTVE9SRV9PQkpFQ1RfVFlQRVMgdHlwZSwgT1BFTlNTTF9JVEVNIHNlYXJjaF9hdHRyaWJ1dGVzW10sIE9QRU5TU0xfSVRFTSBhZGRfYXR0cmlidXRlc1tdLCBPUEVOU1NMX0lURU0gbW9kaWZ5X2F0dHJpYnV0ZXNbXSwgT1BFTlNTTF9JVEVNIGRlbGV0ZV9hdHRyaWJ1dGVzW10sIE9QRU5TU0xfSVRFTSBwYXJhbWV0ZXJzW10pOwotdHlwZWRlZiBpbnQgKCpTVE9SRV9HRU5FUklDX0ZVTkNfUFRSKShTVE9SRSAqLCBPUEVOU1NMX0lURU0gYXR0cmlidXRlc1tdLCBPUEVOU1NMX0lURU0gcGFyYW1ldGVyc1tdKTsKLXR5cGVkZWYgaW50ICgqU1RPUkVfQ1RSTF9GVU5DX1BUUikoU1RPUkUgKiwgaW50IGNtZCwgbG9uZyBsLCB2b2lkICpwLCB2b2lkICgqZikodm9pZCkpOwotCi1pbnQgU1RPUkVfbWV0aG9kX3NldF9pbml0aWFsaXNlX2Z1bmN0aW9uKFNUT1JFX01FVEhPRCAqc20sIFNUT1JFX0lOSVRJQUxJU0VfRlVOQ19QVFIgaW5pdF9mKTsKLWludCBTVE9SRV9tZXRob2Rfc2V0X2NsZWFudXBfZnVuY3Rpb24oU1RPUkVfTUVUSE9EICpzbSwgU1RPUkVfQ0xFQU5VUF9GVU5DX1BUUiBjbGVhbl9mKTsKLWludCBTVE9SRV9tZXRob2Rfc2V0X2dlbmVyYXRlX2Z1bmN0aW9uKFNUT1JFX01FVEhPRCAqc20sIFNUT1JFX0dFTkVSQVRFX09CSkVDVF9GVU5DX1BUUiBnZW5lcmF0ZV9mKTsKLWludCBTVE9SRV9tZXRob2Rfc2V0X2dldF9mdW5jdGlvbihTVE9SRV9NRVRIT0QgKnNtLCBTVE9SRV9HRVRfT0JKRUNUX0ZVTkNfUFRSIGdldF9mKTsKLWludCBTVE9SRV9tZXRob2Rfc2V0X3N0b3JlX2Z1bmN0aW9uKFNUT1JFX01FVEhPRCAqc20sIFNUT1JFX1NUT1JFX09CSkVDVF9GVU5DX1BUUiBzdG9yZV9mKTsKLWludCBTVE9SRV9tZXRob2Rfc2V0X21vZGlmeV9mdW5jdGlvbihTVE9SRV9NRVRIT0QgKnNtLCBTVE9SRV9NT0RJRllfT0JKRUNUX0ZVTkNfUFRSIHN0b3JlX2YpOwotaW50IFNUT1JFX21ldGhvZF9zZXRfcmV2b2tlX2Z1bmN0aW9uKFNUT1JFX01FVEhPRCAqc20sIFNUT1JFX0hBTkRMRV9PQkpFQ1RfRlVOQ19QVFIgcmV2b2tlX2YpOwotaW50IFNUT1JFX21ldGhvZF9zZXRfZGVsZXRlX2Z1bmN0aW9uKFNUT1JFX01FVEhPRCAqc20sIFNUT1JFX0hBTkRMRV9PQkpFQ1RfRlVOQ19QVFIgZGVsZXRlX2YpOwotaW50IFNUT1JFX21ldGhvZF9zZXRfbGlzdF9zdGFydF9mdW5jdGlvbihTVE9SRV9NRVRIT0QgKnNtLCBTVE9SRV9TVEFSVF9PQkpFQ1RfRlVOQ19QVFIgbGlzdF9zdGFydF9mKTsKLWludCBTVE9SRV9tZXRob2Rfc2V0X2xpc3RfbmV4dF9mdW5jdGlvbihTVE9SRV9NRVRIT0QgKnNtLCBTVE9SRV9ORVhUX09CSkVDVF9GVU5DX1BUUiBsaXN0X25leHRfZik7Ci1pbnQgU1RPUkVfbWV0aG9kX3NldF9saXN0X2VuZF9mdW5jdGlvbihTVE9SRV9NRVRIT0QgKnNtLCBTVE9SRV9FTkRfT0JKRUNUX0ZVTkNfUFRSIGxpc3RfZW5kX2YpOwotaW50IFNUT1JFX21ldGhvZF9zZXRfdXBkYXRlX3N0b3JlX2Z1bmN0aW9uKFNUT1JFX01FVEhPRCAqc20sIFNUT1JFX0dFTkVSSUNfRlVOQ19QVFIpOwotaW50IFNUT1JFX21ldGhvZF9zZXRfbG9ja19zdG9yZV9mdW5jdGlvbihTVE9SRV9NRVRIT0QgKnNtLCBTVE9SRV9HRU5FUklDX0ZVTkNfUFRSKTsKLWludCBTVE9SRV9tZXRob2Rfc2V0X3VubG9ja19zdG9yZV9mdW5jdGlvbihTVE9SRV9NRVRIT0QgKnNtLCBTVE9SRV9HRU5FUklDX0ZVTkNfUFRSKTsKLWludCBTVE9SRV9tZXRob2Rfc2V0X2N0cmxfZnVuY3Rpb24oU1RPUkVfTUVUSE9EICpzbSwgU1RPUkVfQ1RSTF9GVU5DX1BUUiBjdHJsX2YpOwotCi1TVE9SRV9JTklUSUFMSVNFX0ZVTkNfUFRSIFNUT1JFX21ldGhvZF9nZXRfaW5pdGlhbGlzZV9mdW5jdGlvbihTVE9SRV9NRVRIT0QgKnNtKTsKLVNUT1JFX0NMRUFOVVBfRlVOQ19QVFIgU1RPUkVfbWV0aG9kX2dldF9jbGVhbnVwX2Z1bmN0aW9uKFNUT1JFX01FVEhPRCAqc20pOwotU1RPUkVfR0VORVJBVEVfT0JKRUNUX0ZVTkNfUFRSIFNUT1JFX21ldGhvZF9nZXRfZ2VuZXJhdGVfZnVuY3Rpb24oU1RPUkVfTUVUSE9EICpzbSk7Ci1TVE9SRV9HRVRfT0JKRUNUX0ZVTkNfUFRSIFNUT1JFX21ldGhvZF9nZXRfZ2V0X2Z1bmN0aW9uKFNUT1JFX01FVEhPRCAqc20pOwotU1RPUkVfU1RPUkVfT0JKRUNUX0ZVTkNfUFRSIFNUT1JFX21ldGhvZF9nZXRfc3RvcmVfZnVuY3Rpb24oU1RPUkVfTUVUSE9EICpzbSk7Ci1TVE9SRV9NT0RJRllfT0JKRUNUX0ZVTkNfUFRSIFNUT1JFX21ldGhvZF9nZXRfbW9kaWZ5X2Z1bmN0aW9uKFNUT1JFX01FVEhPRCAqc20pOwotU1RPUkVfSEFORExFX09CSkVDVF9GVU5DX1BUUiBTVE9SRV9tZXRob2RfZ2V0X3Jldm9rZV9mdW5jdGlvbihTVE9SRV9NRVRIT0QgKnNtKTsKLVNUT1JFX0hBTkRMRV9PQkpFQ1RfRlVOQ19QVFIgU1RPUkVfbWV0aG9kX2dldF9kZWxldGVfZnVuY3Rpb24oU1RPUkVfTUVUSE9EICpzbSk7Ci1TVE9SRV9TVEFSVF9PQkpFQ1RfRlVOQ19QVFIgU1RPUkVfbWV0aG9kX2dldF9saXN0X3N0YXJ0X2Z1bmN0aW9uKFNUT1JFX01FVEhPRCAqc20pOwotU1RPUkVfTkVYVF9PQkpFQ1RfRlVOQ19QVFIgU1RPUkVfbWV0aG9kX2dldF9saXN0X25leHRfZnVuY3Rpb24oU1RPUkVfTUVUSE9EICpzbSk7Ci1TVE9SRV9FTkRfT0JKRUNUX0ZVTkNfUFRSIFNUT1JFX21ldGhvZF9nZXRfbGlzdF9lbmRfZnVuY3Rpb24oU1RPUkVfTUVUSE9EICpzbSk7Ci1TVE9SRV9HRU5FUklDX0ZVTkNfUFRSIFNUT1JFX21ldGhvZF9nZXRfdXBkYXRlX3N0b3JlX2Z1bmN0aW9uKFNUT1JFX01FVEhPRCAqc20pOwotU1RPUkVfR0VORVJJQ19GVU5DX1BUUiBTVE9SRV9tZXRob2RfZ2V0X2xvY2tfc3RvcmVfZnVuY3Rpb24oU1RPUkVfTUVUSE9EICpzbSk7Ci1TVE9SRV9HRU5FUklDX0ZVTkNfUFRSIFNUT1JFX21ldGhvZF9nZXRfdW5sb2NrX3N0b3JlX2Z1bmN0aW9uKFNUT1JFX01FVEhPRCAqc20pOwotU1RPUkVfQ1RSTF9GVU5DX1BUUiBTVE9SRV9tZXRob2RfZ2V0X2N0cmxfZnVuY3Rpb24oU1RPUkVfTUVUSE9EICpzbSk7Ci0KLS8qIE1ldGhvZCBoZWxwZXIgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zLiAqLwotCi0vKiBUaGlzIHN0cnVjdHVyZSBpcyB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgdGhyb3VnaCB0aGUgaW5mb3JtYXRpb24gaW4gYSBsaXN0Ci0gICBvZiBPUEVOU1NMX0lURU1zLiAgSXQgc3RvcmVzIGFsbCB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGluIGEgc3RydWN0dXJlZAotICAgd2F5LiovCi10eXBlZGVmIHN0cnVjdCBTVE9SRV9hdHRyX2luZm9fc3QgU1RPUkVfQVRUUl9JTkZPOwotCi0vKiBQYXJzZSBhIGxpc3Qgb2YgT1BFTlNTTF9JVEVNcyBhbmQgcmV0dXJuIGEgcG9pbnRlciB0byBhIFNUT1JFX0FUVFJfSU5GTy4KLSAgIE5vdGUgdGhhdCB3ZSBkbyB0aGlzIGluIHRoZSBsaXN0IGZvcm0sIHNpbmNlIHRoZSBsaXN0IG9mIE9QRU5TU0xfSVRFTXMgY2FuCi0gICBjb21lIGluIGJsb2NrcyBzZXBhcmF0ZWQgd2l0aCBTVE9SRV9BVFRSX09SLiAgTm90ZSB0aGF0IHRoZSB2YWx1ZSByZXR1cm5lZAotICAgYnkgU1RPUkVfcGFyc2VfYXR0cnNfbmV4dCgpIG11c3QgYmUgZnJlZWQgd2l0aCBTVE9SRV9BVFRSX0lORk9fZnJlZSgpLiAqLwotdm9pZCAqU1RPUkVfcGFyc2VfYXR0cnNfc3RhcnQoT1BFTlNTTF9JVEVNICphdHRyaWJ1dGVzKTsKLVNUT1JFX0FUVFJfSU5GTyAqU1RPUkVfcGFyc2VfYXR0cnNfbmV4dCh2b2lkICpoYW5kbGUpOwotaW50IFNUT1JFX3BhcnNlX2F0dHJzX2VuZCh2b2lkICpoYW5kbGUpOwotaW50IFNUT1JFX3BhcnNlX2F0dHJzX2VuZHAodm9pZCAqaGFuZGxlKTsKLQotLyogQ3JlYXRvciBhbmQgZGVzdHJ1Y3RvciAqLwotU1RPUkVfQVRUUl9JTkZPICpTVE9SRV9BVFRSX0lORk9fbmV3KHZvaWQpOwotaW50IFNUT1JFX0FUVFJfSU5GT19mcmVlKFNUT1JFX0FUVFJfSU5GTyAqYXR0cnMpOwotCi0vKiBNYW5pcHVsYXRvcnMgKi8KLWNoYXIgKlNUT1JFX0FUVFJfSU5GT19nZXQwX2NzdHIoU1RPUkVfQVRUUl9JTkZPICphdHRycywgU1RPUkVfQVRUUl9UWVBFUyBjb2RlKTsKLXVuc2lnbmVkIGNoYXIgKlNUT1JFX0FUVFJfSU5GT19nZXQwX3NoYTFzdHIoU1RPUkVfQVRUUl9JTkZPICphdHRycywKLQlTVE9SRV9BVFRSX1RZUEVTIGNvZGUpOwotWDUwOV9OQU1FICpTVE9SRV9BVFRSX0lORk9fZ2V0MF9kbihTVE9SRV9BVFRSX0lORk8gKmF0dHJzLCBTVE9SRV9BVFRSX1RZUEVTIGNvZGUpOwotQklHTlVNICpTVE9SRV9BVFRSX0lORk9fZ2V0MF9udW1iZXIoU1RPUkVfQVRUUl9JTkZPICphdHRycywgU1RPUkVfQVRUUl9UWVBFUyBjb2RlKTsKLWludCBTVE9SRV9BVFRSX0lORk9fc2V0X2NzdHIoU1RPUkVfQVRUUl9JTkZPICphdHRycywgU1RPUkVfQVRUUl9UWVBFUyBjb2RlLAotCWNoYXIgKmNzdHIsIHNpemVfdCBjc3RyX3NpemUpOwotaW50IFNUT1JFX0FUVFJfSU5GT19zZXRfc2hhMXN0cihTVE9SRV9BVFRSX0lORk8gKmF0dHJzLCBTVE9SRV9BVFRSX1RZUEVTIGNvZGUsCi0JdW5zaWduZWQgY2hhciAqc2hhMXN0ciwgc2l6ZV90IHNoYTFzdHJfc2l6ZSk7Ci1pbnQgU1RPUkVfQVRUUl9JTkZPX3NldF9kbihTVE9SRV9BVFRSX0lORk8gKmF0dHJzLCBTVE9SRV9BVFRSX1RZUEVTIGNvZGUsCi0JWDUwOV9OQU1FICpkbik7Ci1pbnQgU1RPUkVfQVRUUl9JTkZPX3NldF9udW1iZXIoU1RPUkVfQVRUUl9JTkZPICphdHRycywgU1RPUkVfQVRUUl9UWVBFUyBjb2RlLAotCUJJR05VTSAqbnVtYmVyKTsKLWludCBTVE9SRV9BVFRSX0lORk9fbW9kaWZ5X2NzdHIoU1RPUkVfQVRUUl9JTkZPICphdHRycywgU1RPUkVfQVRUUl9UWVBFUyBjb2RlLAotCWNoYXIgKmNzdHIsIHNpemVfdCBjc3RyX3NpemUpOwotaW50IFNUT1JFX0FUVFJfSU5GT19tb2RpZnlfc2hhMXN0cihTVE9SRV9BVFRSX0lORk8gKmF0dHJzLCBTVE9SRV9BVFRSX1RZUEVTIGNvZGUsCi0JdW5zaWduZWQgY2hhciAqc2hhMXN0ciwgc2l6ZV90IHNoYTFzdHJfc2l6ZSk7Ci1pbnQgU1RPUkVfQVRUUl9JTkZPX21vZGlmeV9kbihTVE9SRV9BVFRSX0lORk8gKmF0dHJzLCBTVE9SRV9BVFRSX1RZUEVTIGNvZGUsCi0JWDUwOV9OQU1FICpkbik7Ci1pbnQgU1RPUkVfQVRUUl9JTkZPX21vZGlmeV9udW1iZXIoU1RPUkVfQVRUUl9JTkZPICphdHRycywgU1RPUkVfQVRUUl9UWVBFUyBjb2RlLAotCUJJR05VTSAqbnVtYmVyKTsKLQotLyogQ29tcGFyZSBvbiBiYXNpcyBvZiBhIGJpdCBwYXR0ZXJuIGZvcm1lZCBieSB0aGUgU1RPUkVfQVRUUl9UWVBFUyB2YWx1ZXMKLSAgIGluIGVhY2ggY29udGFpbmVkIGF0dHJpYnV0ZS4gKi8KLWludCBTVE9SRV9BVFRSX0lORk9fY29tcGFyZShTVE9SRV9BVFRSX0lORk8gKmEsIFNUT1JFX0FUVFJfSU5GTyAqYik7Ci0vKiBDaGVjayBpZiB0aGUgc2V0IG9mIGF0dHJpYnV0ZXMgaW4gYSBpcyB3aXRoaW4gdGhlIHJhbmdlIG9mIGF0dHJpYnV0ZXMKLSAgIHNldCBpbiBiLiAqLwotaW50IFNUT1JFX0FUVFJfSU5GT19pbl9yYW5nZShTVE9SRV9BVFRSX0lORk8gKmEsIFNUT1JFX0FUVFJfSU5GTyAqYik7Ci0vKiBDaGVjayBpZiB0aGUgc2V0IG9mIGF0dHJpYnV0ZXMgaW4gYSBhcmUgYWxzbyBzZXQgaW4gYi4gKi8KLWludCBTVE9SRV9BVFRSX0lORk9faW4oU1RPUkVfQVRUUl9JTkZPICphLCBTVE9SRV9BVFRSX0lORk8gKmIpOwotLyogU2FtZSBhcyBTVE9SRV9BVFRSX0lORk9faW4oKSwgYnV0IGFsc28gY2hlY2tzIHRoZSBhdHRyaWJ1dGUgdmFsdWVzLiAqLwotaW50IFNUT1JFX0FUVFJfSU5GT19pbl9leChTVE9SRV9BVFRSX0lORk8gKmEsIFNUT1JFX0FUVFJfSU5GTyAqYik7Ci0KLQotLyogQkVHSU4gRVJST1IgQ09ERVMgKi8KLS8qIFRoZSBmb2xsb3dpbmcgbGluZXMgYXJlIGF1dG8gZ2VuZXJhdGVkIGJ5IHRoZSBzY3JpcHQgbWtlcnIucGwuIEFueSBjaGFuZ2VzCi0gKiBtYWRlIGFmdGVyIHRoaXMgcG9pbnQgbWF5IGJlIG92ZXJ3cml0dGVuIHdoZW4gdGhlIHNjcmlwdCBpcyBuZXh0IHJ1bi4KLSAqLwotdm9pZCBFUlJfbG9hZF9TVE9SRV9zdHJpbmdzKHZvaWQpOwotCi0vKiBFcnJvciBjb2RlcyBmb3IgdGhlIFNUT1JFIGZ1bmN0aW9ucy4gKi8KLQotLyogRnVuY3Rpb24gY29kZXMuICovCi0jZGVmaW5lIFNUT1JFX0ZfTUVNX0RFTEVURQkJCQkgMTM0Ci0jZGVmaW5lIFNUT1JFX0ZfTUVNX0dFTkVSQVRFCQkJCSAxMzUKLSNkZWZpbmUgU1RPUkVfRl9NRU1fTElTVF9FTkQJCQkJIDE2OAotI2RlZmluZSBTVE9SRV9GX01FTV9MSVNUX05FWFQJCQkJIDEzNgotI2RlZmluZSBTVE9SRV9GX01FTV9MSVNUX1NUQVJUCQkJCSAxMzcKLSNkZWZpbmUgU1RPUkVfRl9NRU1fTU9ESUZZCQkJCSAxNjkKLSNkZWZpbmUgU1RPUkVfRl9NRU1fU1RPUkUJCQkJIDEzOAotI2RlZmluZSBTVE9SRV9GX1NUT1JFX0FUVFJfSU5GT19HRVQwX0NTVFIJCSAxMzkKLSNkZWZpbmUgU1RPUkVfRl9TVE9SRV9BVFRSX0lORk9fR0VUMF9ETgkJCSAxNDAKLSNkZWZpbmUgU1RPUkVfRl9TVE9SRV9BVFRSX0lORk9fR0VUMF9OVU1CRVIJCSAxNDEKLSNkZWZpbmUgU1RPUkVfRl9TVE9SRV9BVFRSX0lORk9fR0VUMF9TSEExU1RSCQkgMTQyCi0jZGVmaW5lIFNUT1JFX0ZfU1RPUkVfQVRUUl9JTkZPX01PRElGWV9DU1RSCQkgMTQzCi0jZGVmaW5lIFNUT1JFX0ZfU1RPUkVfQVRUUl9JTkZPX01PRElGWV9ETgkJIDE0NAotI2RlZmluZSBTVE9SRV9GX1NUT1JFX0FUVFJfSU5GT19NT0RJRllfTlVNQkVSCQkgMTQ1Ci0jZGVmaW5lIFNUT1JFX0ZfU1RPUkVfQVRUUl9JTkZPX01PRElGWV9TSEExU1RSCQkgMTQ2Ci0jZGVmaW5lIFNUT1JFX0ZfU1RPUkVfQVRUUl9JTkZPX1NFVF9DU1RSCQkgMTQ3Ci0jZGVmaW5lIFNUT1JFX0ZfU1RPUkVfQVRUUl9JTkZPX1NFVF9ETgkJCSAxNDgKLSNkZWZpbmUgU1RPUkVfRl9TVE9SRV9BVFRSX0lORk9fU0VUX05VTUJFUgkJIDE0OQotI2RlZmluZSBTVE9SRV9GX1NUT1JFX0FUVFJfSU5GT19TRVRfU0hBMVNUUgkJIDE1MAotI2RlZmluZSBTVE9SRV9GX1NUT1JFX0NFUlRJRklDQVRFCQkJIDE3MAotI2RlZmluZSBTVE9SRV9GX1NUT1JFX0NUUkwJCQkJIDE2MQotI2RlZmluZSBTVE9SRV9GX1NUT1JFX0RFTEVURV9BUkJJVFJBUlkJCQkgMTU4Ci0jZGVmaW5lIFNUT1JFX0ZfU1RPUkVfREVMRVRFX0NFUlRJRklDQVRFCQkgMTAyCi0jZGVmaW5lIFNUT1JFX0ZfU1RPUkVfREVMRVRFX0NSTAkJCSAxMDMKLSNkZWZpbmUgU1RPUkVfRl9TVE9SRV9ERUxFVEVfTlVNQkVSCQkJIDEwNAotI2RlZmluZSBTVE9SRV9GX1NUT1JFX0RFTEVURV9QUklWQVRFX0tFWQkJIDEwNQotI2RlZmluZSBTVE9SRV9GX1NUT1JFX0RFTEVURV9QVUJMSUNfS0VZCQkJIDEwNgotI2RlZmluZSBTVE9SRV9GX1NUT1JFX0dFTkVSQVRFX0NSTAkJCSAxMDcKLSNkZWZpbmUgU1RPUkVfRl9TVE9SRV9HRU5FUkFURV9LRVkJCQkgMTA4Ci0jZGVmaW5lIFNUT1JFX0ZfU1RPUkVfR0VUX0FSQklUUkFSWQkJCSAxNTkKLSNkZWZpbmUgU1RPUkVfRl9TVE9SRV9HRVRfQ0VSVElGSUNBVEUJCQkgMTA5Ci0jZGVmaW5lIFNUT1JFX0ZfU1RPUkVfR0VUX0NSTAkJCQkgMTEwCi0jZGVmaW5lIFNUT1JFX0ZfU1RPUkVfR0VUX05VTUJFUgkJCSAxMTEKLSNkZWZpbmUgU1RPUkVfRl9TVE9SRV9HRVRfUFJJVkFURV9LRVkJCQkgMTEyCi0jZGVmaW5lIFNUT1JFX0ZfU1RPUkVfR0VUX1BVQkxJQ19LRVkJCQkgMTEzCi0jZGVmaW5lIFNUT1JFX0ZfU1RPUkVfTElTVF9DRVJUSUZJQ0FURV9FTkQJCSAxMTQKLSNkZWZpbmUgU1RPUkVfRl9TVE9SRV9MSVNUX0NFUlRJRklDQVRFX0VORFAJCSAxNTMKLSNkZWZpbmUgU1RPUkVfRl9TVE9SRV9MSVNUX0NFUlRJRklDQVRFX05FWFQJCSAxMTUKLSNkZWZpbmUgU1RPUkVfRl9TVE9SRV9MSVNUX0NFUlRJRklDQVRFX1NUQVJUCQkgMTE2Ci0jZGVmaW5lIFNUT1JFX0ZfU1RPUkVfTElTVF9DUkxfRU5ECQkJIDExNwotI2RlZmluZSBTVE9SRV9GX1NUT1JFX0xJU1RfQ1JMX0VORFAJCQkgMTU0Ci0jZGVmaW5lIFNUT1JFX0ZfU1RPUkVfTElTVF9DUkxfTkVYVAkJCSAxMTgKLSNkZWZpbmUgU1RPUkVfRl9TVE9SRV9MSVNUX0NSTF9TVEFSVAkJCSAxMTkKLSNkZWZpbmUgU1RPUkVfRl9TVE9SRV9MSVNUX1BSSVZBVEVfS0VZX0VORAkJIDEyMAotI2RlZmluZSBTVE9SRV9GX1NUT1JFX0xJU1RfUFJJVkFURV9LRVlfRU5EUAkJIDE1NQotI2RlZmluZSBTVE9SRV9GX1NUT1JFX0xJU1RfUFJJVkFURV9LRVlfTkVYVAkJIDEyMQotI2RlZmluZSBTVE9SRV9GX1NUT1JFX0xJU1RfUFJJVkFURV9LRVlfU1RBUlQJCSAxMjIKLSNkZWZpbmUgU1RPUkVfRl9TVE9SRV9MSVNUX1BVQkxJQ19LRVlfRU5ECQkgMTIzCi0jZGVmaW5lIFNUT1JFX0ZfU1RPUkVfTElTVF9QVUJMSUNfS0VZX0VORFAJCSAxNTYKLSNkZWZpbmUgU1RPUkVfRl9TVE9SRV9MSVNUX1BVQkxJQ19LRVlfTkVYVAkJIDEyNAotI2RlZmluZSBTVE9SRV9GX1NUT1JFX0xJU1RfUFVCTElDX0tFWV9TVEFSVAkJIDEyNQotI2RlZmluZSBTVE9SRV9GX1NUT1JFX01PRElGWV9BUkJJVFJBUlkJCQkgMTYyCi0jZGVmaW5lIFNUT1JFX0ZfU1RPUkVfTU9ESUZZX0NFUlRJRklDQVRFCQkgMTYzCi0jZGVmaW5lIFNUT1JFX0ZfU1RPUkVfTU9ESUZZX0NSTAkJCSAxNjQKLSNkZWZpbmUgU1RPUkVfRl9TVE9SRV9NT0RJRllfTlVNQkVSCQkJIDE2NQotI2RlZmluZSBTVE9SRV9GX1NUT1JFX01PRElGWV9QUklWQVRFX0tFWQkJIDE2NgotI2RlZmluZSBTVE9SRV9GX1NUT1JFX01PRElGWV9QVUJMSUNfS0VZCQkJIDE2NwotI2RlZmluZSBTVE9SRV9GX1NUT1JFX05FV19FTkdJTkUJCQkgMTMzCi0jZGVmaW5lIFNUT1JFX0ZfU1RPUkVfTkVXX01FVEhPRAkJCSAxMzIKLSNkZWZpbmUgU1RPUkVfRl9TVE9SRV9QQVJTRV9BVFRSU19FTkQJCQkgMTUxCi0jZGVmaW5lIFNUT1JFX0ZfU1RPUkVfUEFSU0VfQVRUUlNfRU5EUAkJCSAxNzIKLSNkZWZpbmUgU1RPUkVfRl9TVE9SRV9QQVJTRV9BVFRSU19ORVhUCQkJIDE1MgotI2RlZmluZSBTVE9SRV9GX1NUT1JFX1BBUlNFX0FUVFJTX1NUQVJUCQkJIDE3MQotI2RlZmluZSBTVE9SRV9GX1NUT1JFX1JFVk9LRV9DRVJUSUZJQ0FURQkJIDEyOQotI2RlZmluZSBTVE9SRV9GX1NUT1JFX1JFVk9LRV9QUklWQVRFX0tFWQkJIDEzMAotI2RlZmluZSBTVE9SRV9GX1NUT1JFX1JFVk9LRV9QVUJMSUNfS0VZCQkJIDEzMQotI2RlZmluZSBTVE9SRV9GX1NUT1JFX1NUT1JFX0FSQklUUkFSWQkJCSAxNTcKLSNkZWZpbmUgU1RPUkVfRl9TVE9SRV9TVE9SRV9DRVJUSUZJQ0FURQkJCSAxMDAKLSNkZWZpbmUgU1RPUkVfRl9TVE9SRV9TVE9SRV9DUkwJCQkJIDEwMQotI2RlZmluZSBTVE9SRV9GX1NUT1JFX1NUT1JFX05VTUJFUgkJCSAxMjYKLSNkZWZpbmUgU1RPUkVfRl9TVE9SRV9TVE9SRV9QUklWQVRFX0tFWQkJCSAxMjcKLSNkZWZpbmUgU1RPUkVfRl9TVE9SRV9TVE9SRV9QVUJMSUNfS0VZCQkJIDEyOAotCi0vKiBSZWFzb24gY29kZXMuICovCi0jZGVmaW5lIFNUT1JFX1JfQUxSRUFEWV9IQVNfQV9WQUxVRQkJCSAxMjcKLSNkZWZpbmUgU1RPUkVfUl9GQUlMRURfREVMRVRJTkdfQVJCSVRSQVJZCQkgMTMyCi0jZGVmaW5lIFNUT1JFX1JfRkFJTEVEX0RFTEVUSU5HX0NFUlRJRklDQVRFCQkgMTAwCi0jZGVmaW5lIFNUT1JFX1JfRkFJTEVEX0RFTEVUSU5HX0tFWQkJCSAxMDEKLSNkZWZpbmUgU1RPUkVfUl9GQUlMRURfREVMRVRJTkdfTlVNQkVSCQkJIDEwMgotI2RlZmluZSBTVE9SRV9SX0ZBSUxFRF9HRU5FUkFUSU5HX0NSTAkJCSAxMDMKLSNkZWZpbmUgU1RPUkVfUl9GQUlMRURfR0VORVJBVElOR19LRVkJCQkgMTA0Ci0jZGVmaW5lIFNUT1JFX1JfRkFJTEVEX0dFVFRJTkdfQVJCSVRSQVJZCQkgMTMzCi0jZGVmaW5lIFNUT1JFX1JfRkFJTEVEX0dFVFRJTkdfQ0VSVElGSUNBVEUJCSAxMDUKLSNkZWZpbmUgU1RPUkVfUl9GQUlMRURfR0VUVElOR19LRVkJCQkgMTA2Ci0jZGVmaW5lIFNUT1JFX1JfRkFJTEVEX0dFVFRJTkdfTlVNQkVSCQkJIDEwNwotI2RlZmluZSBTVE9SRV9SX0ZBSUxFRF9MSVNUSU5HX0NFUlRJRklDQVRFUwkJIDEwOAotI2RlZmluZSBTVE9SRV9SX0ZBSUxFRF9MSVNUSU5HX0tFWVMJCQkgMTA5Ci0jZGVmaW5lIFNUT1JFX1JfRkFJTEVEX01PRElGWUlOR19BUkJJVFJBUlkJCSAxMzgKLSNkZWZpbmUgU1RPUkVfUl9GQUlMRURfTU9ESUZZSU5HX0NFUlRJRklDQVRFCQkgMTM5Ci0jZGVmaW5lIFNUT1JFX1JfRkFJTEVEX01PRElGWUlOR19DUkwJCQkgMTQwCi0jZGVmaW5lIFNUT1JFX1JfRkFJTEVEX01PRElGWUlOR19OVU1CRVIJCQkgMTQxCi0jZGVmaW5lIFNUT1JFX1JfRkFJTEVEX01PRElGWUlOR19QUklWQVRFX0tFWQkJIDE0MgotI2RlZmluZSBTVE9SRV9SX0ZBSUxFRF9NT0RJRllJTkdfUFVCTElDX0tFWQkJIDE0MwotI2RlZmluZSBTVE9SRV9SX0ZBSUxFRF9SRVZPS0lOR19DRVJUSUZJQ0FURQkJIDExMAotI2RlZmluZSBTVE9SRV9SX0ZBSUxFRF9SRVZPS0lOR19LRVkJCQkgMTExCi0jZGVmaW5lIFNUT1JFX1JfRkFJTEVEX1NUT1JJTkdfQVJCSVRSQVJZCQkgMTM0Ci0jZGVmaW5lIFNUT1JFX1JfRkFJTEVEX1NUT1JJTkdfQ0VSVElGSUNBVEUJCSAxMTIKLSNkZWZpbmUgU1RPUkVfUl9GQUlMRURfU1RPUklOR19LRVkJCQkgMTEzCi0jZGVmaW5lIFNUT1JFX1JfRkFJTEVEX1NUT1JJTkdfTlVNQkVSCQkJIDExNAotI2RlZmluZSBTVE9SRV9SX05PVF9JTVBMRU1FTlRFRAkJCQkgMTI4Ci0jZGVmaW5lIFNUT1JFX1JfTk9fQ09OVFJPTF9GVU5DVElPTgkJCSAxNDQKLSNkZWZpbmUgU1RPUkVfUl9OT19ERUxFVEVfQVJCSVRSQVJZX0ZVTkNUSU9OCQkgMTM1Ci0jZGVmaW5lIFNUT1JFX1JfTk9fREVMRVRFX05VTUJFUl9GVU5DVElPTgkJIDExNQotI2RlZmluZSBTVE9SRV9SX05PX0RFTEVURV9PQkpFQ1RfRlVOQ1RJT04JCSAxMTYKLSNkZWZpbmUgU1RPUkVfUl9OT19HRU5FUkFURV9DUkxfRlVOQ1RJT04JCSAxMTcKLSNkZWZpbmUgU1RPUkVfUl9OT19HRU5FUkFURV9PQkpFQ1RfRlVOQ1RJT04JCSAxMTgKLSNkZWZpbmUgU1RPUkVfUl9OT19HRVRfT0JKRUNUX0FSQklUUkFSWV9GVU5DVElPTgkgMTM2Ci0jZGVmaW5lIFNUT1JFX1JfTk9fR0VUX09CSkVDVF9GVU5DVElPTgkJCSAxMTkKLSNkZWZpbmUgU1RPUkVfUl9OT19HRVRfT0JKRUNUX05VTUJFUl9GVU5DVElPTgkJIDEyMAotI2RlZmluZSBTVE9SRV9SX05PX0xJU1RfT0JKRUNUX0VORFBfRlVOQ1RJT04JCSAxMzEKLSNkZWZpbmUgU1RPUkVfUl9OT19MSVNUX09CSkVDVF9FTkRfRlVOQ1RJT04JCSAxMjEKLSNkZWZpbmUgU1RPUkVfUl9OT19MSVNUX09CSkVDVF9ORVhUX0ZVTkNUSU9OCQkgMTIyCi0jZGVmaW5lIFNUT1JFX1JfTk9fTElTVF9PQkpFQ1RfU1RBUlRfRlVOQ1RJT04JCSAxMjMKLSNkZWZpbmUgU1RPUkVfUl9OT19NT0RJRllfT0JKRUNUX0ZVTkNUSU9OCQkgMTQ1Ci0jZGVmaW5lIFNUT1JFX1JfTk9fUkVWT0tFX09CSkVDVF9GVU5DVElPTgkJIDEyNAotI2RlZmluZSBTVE9SRV9SX05PX1NUT1JFCQkJCSAxMjkKLSNkZWZpbmUgU1RPUkVfUl9OT19TVE9SRV9PQkpFQ1RfQVJCSVRSQVJZX0ZVTkNUSU9OCSAxMzcKLSNkZWZpbmUgU1RPUkVfUl9OT19TVE9SRV9PQkpFQ1RfRlVOQ1RJT04JCSAxMjUKLSNkZWZpbmUgU1RPUkVfUl9OT19TVE9SRV9PQkpFQ1RfTlVNQkVSX0ZVTkNUSU9OCQkgMTI2Ci0jZGVmaW5lIFNUT1JFX1JfTk9fVkFMVUUJCQkJIDEzMAotCi0jaWZkZWYgIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggYi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAppbmRleCAwMTE0MDkzLi4xNTFiNjgzIDEwMDY0NAotLS0gYS9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAorKysgYi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaApAQCAtNjcsMTAgKzY3LDYgQEAKICAgIGluY29tcGF0aWJpbGl0aWVzLiAqLwogI2lmZGVmIE9QRU5TU0xfU1lTX1ZNUwogCi0vKiBIYWNrIGEgbG9uZyBuYW1lIGluIGNyeXB0by9jcnlwdGxpYi5jICovCi0jdW5kZWYgaW50X0NSWVBUT19zZXRfZG9fZHlubG9ja19jYWxsYmFjawotI2RlZmluZSBpbnRfQ1JZUFRPX3NldF9kb19keW5sb2NrX2NhbGxiYWNrCWludF9DUllQVE9fc2V0X2RvX2R5bmxvY2tfY2IKLQogLyogSGFjayBhIGxvbmcgbmFtZSBpbiBjcnlwdG8vZXhfZGF0YS5jICovCiAjdW5kZWYgQ1JZUFRPX2dldF9leF9kYXRhX2ltcGxlbWVudGF0aW9uCiAjZGVmaW5lIENSWVBUT19nZXRfZXhfZGF0YV9pbXBsZW1lbnRhdGlvbglDUllQVE9fZ2V0X2V4X2RhdGFfaW1wbApAQCAtMTUxLDkgKzE0Nyw5IEBACiAjdW5kZWYgQ1JZUFRPX3NldF9keW5sb2NrX2NyZWF0ZV9jYWxsYmFjawogI2RlZmluZSBDUllQVE9fc2V0X2R5bmxvY2tfY3JlYXRlX2NhbGxiYWNrICAgICAgQ1JZUFRPX3NldF9keW5sb2NrX2NyZWF0ZV9jYgogI3VuZGVmIENSWVBUT19zZXRfZHlubG9ja19sb2NrX2NhbGxiYWNrCi0jZGVmaW5lIENSWVBUT19zZXRfZHlubG9ja19sb2NrX2NhbGxiYWNrICAgICAgICBDUllQVE9fc2V0X2R5bmxvY2tfbG9ja19jYgorI2RlZmluZSBDUllQVE9fc2V0X2R5bmxvY2tfbG9ja19jYWxsYmFjawlDUllQVE9fc2V0X2R5bmxvY2tfbG9ja19jYgogI3VuZGVmIENSWVBUT19nZXRfZHlubG9ja19sb2NrX2NhbGxiYWNrCi0jZGVmaW5lIENSWVBUT19nZXRfZHlubG9ja19sb2NrX2NhbGxiYWNrICAgICAgICBDUllQVE9fZ2V0X2R5bmxvY2tfbG9ja19jYgorI2RlZmluZSBDUllQVE9fZ2V0X2R5bmxvY2tfbG9ja19jYWxsYmFjawlDUllQVE9fZ2V0X2R5bmxvY2tfbG9ja19jYgogI3VuZGVmIENSWVBUT19nZXRfZHlubG9ja19kZXN0cm95X2NhbGxiYWNrCiAjZGVmaW5lIENSWVBUT19nZXRfZHlubG9ja19kZXN0cm95X2NhbGxiYWNrICAgICBDUllQVE9fZ2V0X2R5bmxvY2tfZGVzdHJveV9jYgogI3VuZGVmIENSWVBUT19nZXRfZHlubG9ja19jcmVhdGVfY2FsbGJhY2sKQEAgLTE2NSw3ICsxNjEsNyBAQAogCiAvKiBIYWNrIHNvbWUgbG9uZyBTU0wgbmFtZXMgKi8KICN1bmRlZiBTU0xfQ1RYX3NldF9kZWZhdWx0X3ZlcmlmeV9wYXRocwotI2RlZmluZSBTU0xfQ1RYX3NldF9kZWZhdWx0X3ZlcmlmeV9wYXRocyAgICAgICAgU1NMX0NUWF9zZXRfZGVmX3ZlcmlmeV9wYXRocworI2RlZmluZSBTU0xfQ1RYX3NldF9kZWZhdWx0X3ZlcmlmeV9wYXRocwlTU0xfQ1RYX3NldF9kZWZfdmVyaWZ5X3BhdGhzCiAjdW5kZWYgU1NMX2dldF9leF9kYXRhX1g1MDlfU1RPUkVfQ1RYX2lkeAogI2RlZmluZSBTU0xfZ2V0X2V4X2RhdGFfWDUwOV9TVE9SRV9DVFhfaWR4ICAgICAgU1NMX2dldF9leF9kX1g1MDlfU1RPUkVfQ1RYX2lkeAogI3VuZGVmIFNTTF9hZGRfZmlsZV9jZXJ0X3N1YmplY3RzX3RvX3N0YWNrCkBAIC0xNzUsNyArMTcxLDcgQEAKICN1bmRlZiBTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9jaGFpbl9maWxlCiAjZGVmaW5lIFNTTF9DVFhfdXNlX2NlcnRpZmljYXRlX2NoYWluX2ZpbGUgICAgICBTU0xfQ1RYX3VzZV9jZXJ0X2NoYWluX2ZpbGUKICN1bmRlZiBTU0xfQ1RYX3NldF9jZXJ0X3ZlcmlmeV9jYWxsYmFjawotI2RlZmluZSBTU0xfQ1RYX3NldF9jZXJ0X3ZlcmlmeV9jYWxsYmFjayAgICAgICAgU1NMX0NUWF9zZXRfY2VydF92ZXJpZnlfY2IKKyNkZWZpbmUgU1NMX0NUWF9zZXRfY2VydF92ZXJpZnlfY2FsbGJhY2sJU1NMX0NUWF9zZXRfY2VydF92ZXJpZnlfY2IKICN1bmRlZiBTU0xfQ1RYX3NldF9kZWZhdWx0X3Bhc3N3ZF9jYl91c2VyZGF0YQogI2RlZmluZSBTU0xfQ1RYX3NldF9kZWZhdWx0X3Bhc3N3ZF9jYl91c2VyZGF0YSAgU1NMX0NUWF9zZXRfZGVmX3Bhc3N3ZF9jYl91ZAogI3VuZGVmIFNTTF9DT01QX2dldF9jb21wcmVzc2lvbl9tZXRob2RzCkBAIC0xOTYsOSArMTkyLDE3IEBACiAjdW5kZWYgRU5HSU5FX3NldF9kZWZhdWx0X0JOX21vZF9leHBfY3J0CiAjZGVmaW5lIEVOR0lORV9zZXRfZGVmYXVsdF9CTl9tb2RfZXhwX2NydAlFTkdJTkVfc2V0X2RlZl9CTl9tb2RfZXhwX2NydAogI3VuZGVmIEVOR0lORV9zZXRfbG9hZF9wcml2a2V5X2Z1bmN0aW9uCi0jZGVmaW5lIEVOR0lORV9zZXRfbG9hZF9wcml2a2V5X2Z1bmN0aW9uICAgICAgICBFTkdJTkVfc2V0X2xvYWRfcHJpdmtleV9mbgorI2RlZmluZSBFTkdJTkVfc2V0X2xvYWRfcHJpdmtleV9mdW5jdGlvbglFTkdJTkVfc2V0X2xvYWRfcHJpdmtleV9mbgogI3VuZGVmIEVOR0lORV9nZXRfbG9hZF9wcml2a2V5X2Z1bmN0aW9uCi0jZGVmaW5lIEVOR0lORV9nZXRfbG9hZF9wcml2a2V5X2Z1bmN0aW9uICAgICAgICBFTkdJTkVfZ2V0X2xvYWRfcHJpdmtleV9mbgorI2RlZmluZSBFTkdJTkVfZ2V0X2xvYWRfcHJpdmtleV9mdW5jdGlvbglFTkdJTkVfZ2V0X2xvYWRfcHJpdmtleV9mbgorI3VuZGVmIEVOR0lORV91bnJlZ2lzdGVyX3BrZXlfYXNuMV9tZXRocworI2RlZmluZSBFTkdJTkVfdW5yZWdpc3Rlcl9wa2V5X2FzbjFfbWV0aHMJRU5HSU5FX3VucmVnX3BrZXlfYXNuMV9tZXRocworI3VuZGVmIEVOR0lORV9yZWdpc3Rlcl9hbGxfcGtleV9hc24xX21ldGhzCisjZGVmaW5lIEVOR0lORV9yZWdpc3Rlcl9hbGxfcGtleV9hc24xX21ldGhzCUVOR0lORV9yZWdfYWxsX3BrZXlfYXNuMV9tZXRocworI3VuZGVmIEVOR0lORV9zZXRfZGVmYXVsdF9wa2V5X2FzbjFfbWV0aHMKKyNkZWZpbmUgRU5HSU5FX3NldF9kZWZhdWx0X3BrZXlfYXNuMV9tZXRocwlFTkdJTkVfc2V0X2RlZl9wa2V5X2FzbjFfbWV0aHMKKyN1bmRlZiBFTkdJTkVfZ2V0X3BrZXlfYXNuMV9tZXRoX2VuZ2luZQorI2RlZmluZSBFTkdJTkVfZ2V0X3BrZXlfYXNuMV9tZXRoX2VuZ2luZQlFTkdJTkVfZ2V0X3BrZXlfYXNuMV9tZXRoX2VuZwogI3VuZGVmIEVOR0lORV9zZXRfbG9hZF9zc2xfY2xpZW50X2NlcnRfZnVuY3Rpb24KICNkZWZpbmUgRU5HSU5FX3NldF9sb2FkX3NzbF9jbGllbnRfY2VydF9mdW5jdGlvbiBcCiAJCQkJCQlFTkdJTkVfc2V0X2xkX3NzbF9jbG50X2NlcnRfZm4KQEAgLTIwNyw3ICsyMTEsNyBAQAogCiAvKiBIYWNrIHNvbWUgbG9uZyBPQ1NQIG5hbWVzICovCiAjdW5kZWYgT0NTUF9SRVFVRVNUX2dldF9leHRfYnlfY3JpdGljYWwKLSNkZWZpbmUgT0NTUF9SRVFVRVNUX2dldF9leHRfYnlfY3JpdGljYWwgICAgICAgIE9DU1BfUkVRVUVTVF9nZXRfZXh0X2J5X2NyaXQKKyNkZWZpbmUgT0NTUF9SRVFVRVNUX2dldF9leHRfYnlfY3JpdGljYWwJT0NTUF9SRVFVRVNUX2dldF9leHRfYnlfY3JpdAogI3VuZGVmIE9DU1BfQkFTSUNSRVNQX2dldF9leHRfYnlfY3JpdGljYWwKICNkZWZpbmUgT0NTUF9CQVNJQ1JFU1BfZ2V0X2V4dF9ieV9jcml0aWNhbCAgICAgIE9DU1BfQkFTSUNSRVNQX2dldF9leHRfYnlfY3JpdAogI3VuZGVmIE9DU1BfU0lOR0xFUkVTUF9nZXRfZXh0X2J5X2NyaXRpY2FsCkBAIC0yMjQsNiArMjI4LDggQEAKICNkZWZpbmUgT1BFTlNTTF9hZGRfYWxsX2FsZ29yaXRobXNfbm9jb25mCU9QRU5TU0xfYWRkX2FsbF9hbGdvX25vY29uZgogI3VuZGVmIE9QRU5TU0xfYWRkX2FsbF9hbGdvcml0aG1zX2NvbmYKICNkZWZpbmUgT1BFTlNTTF9hZGRfYWxsX2FsZ29yaXRobXNfY29uZgkJT1BFTlNTTF9hZGRfYWxsX2FsZ29fY29uZgorI3VuZGVmIEVWUF9QS0VZX21ldGhfc2V0X3ZlcmlmeV9yZWNvdmVyCisjZGVmaW5lIEVWUF9QS0VZX21ldGhfc2V0X3ZlcmlmeV9yZWNvdmVyCUVWUF9QS0VZX21ldGhfc2V0X3ZyZnlfcmVjb3ZlcgogCiAvKiBIYWNrIHNvbWUgbG9uZyBFQyBuYW1lcyAqLwogI3VuZGVmIEVDX0dST1VQX3NldF9wb2ludF9jb252ZXJzaW9uX2Zvcm0KQEAgLTI1MiwxNSArMjU4LDE1IEBACiAjZGVmaW5lIEVDX1BPSU5UX3NldF9jb21wcmVzc2VkX2Nvb3JkaW5hdGVzX0dGMm0gXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUNfUE9JTlRfc2V0X2NvbXByX2Nvb3Jkc19HRjJtCiAjdW5kZWYgZWNfR0YybV9zaW1wbGVfZ3JvdXBfY2xlYXJfZmluaXNoCi0jZGVmaW5lIGVjX0dGMm1fc2ltcGxlX2dyb3VwX2NsZWFyX2ZpbmlzaCAgICAgICAgZWNfR0YybV9zaW1wbGVfZ3JwX2Nscl9maW5pc2gKKyNkZWZpbmUgZWNfR0YybV9zaW1wbGVfZ3JvdXBfY2xlYXJfZmluaXNoCWVjX0dGMm1fc2ltcGxlX2dycF9jbHJfZmluaXNoCiAjdW5kZWYgZWNfR0YybV9zaW1wbGVfZ3JvdXBfY2hlY2tfZGlzY3JpbWluYW50CiAjZGVmaW5lIGVjX0dGMm1fc2ltcGxlX2dyb3VwX2NoZWNrX2Rpc2NyaW1pbmFudAllY19HRjJtX3NpbXBsZV9ncnBfY2hrX2Rpc2NyaW0KICN1bmRlZiBlY19HRjJtX3NpbXBsZV9wb2ludF9jbGVhcl9maW5pc2gKLSNkZWZpbmUgZWNfR0YybV9zaW1wbGVfcG9pbnRfY2xlYXJfZmluaXNoICAgICAgICBlY19HRjJtX3NpbXBsZV9wdF9jbHJfZmluaXNoCisjZGVmaW5lIGVjX0dGMm1fc2ltcGxlX3BvaW50X2NsZWFyX2ZpbmlzaAllY19HRjJtX3NpbXBsZV9wdF9jbHJfZmluaXNoCiAjdW5kZWYgZWNfR0YybV9zaW1wbGVfcG9pbnRfc2V0X3RvX2luZmluaXR5Ci0jZGVmaW5lIGVjX0dGMm1fc2ltcGxlX3BvaW50X3NldF90b19pbmZpbml0eSAgICAgZWNfR0YybV9zaW1wbGVfcHRfc2V0X3RvX2luZgorI2RlZmluZSBlY19HRjJtX3NpbXBsZV9wb2ludF9zZXRfdG9faW5maW5pdHkJZWNfR0YybV9zaW1wbGVfcHRfc2V0X3RvX2luZgogI3VuZGVmIGVjX0dGMm1fc2ltcGxlX3BvaW50c19tYWtlX2FmZmluZQotI2RlZmluZSBlY19HRjJtX3NpbXBsZV9wb2ludHNfbWFrZV9hZmZpbmUgICAgICAgIGVjX0dGMm1fc2ltcGxlX3B0c19tYWtlX2FmZmluZQorI2RlZmluZSBlY19HRjJtX3NpbXBsZV9wb2ludHNfbWFrZV9hZmZpbmUJZWNfR0YybV9zaW1wbGVfcHRzX21ha2VfYWZmaW5lCiAjdW5kZWYgZWNfR0YybV9zaW1wbGVfcG9pbnRfc2V0X2FmZmluZV9jb29yZGluYXRlcwogI2RlZmluZSBlY19HRjJtX3NpbXBsZV9wb2ludF9zZXRfYWZmaW5lX2Nvb3JkaW5hdGVzIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjX0dGMm1fc21wX3B0X3NldF9hZl9jb29yZHMKQEAgLTI3NSwxOSArMjgxLDE5IEBACiAjdW5kZWYgZWNfR0ZwX3NpbXBsZV9ncm91cF9nZXRfY3VydmVfR0ZwCiAjZGVmaW5lIGVjX0dGcF9zaW1wbGVfZ3JvdXBfZ2V0X2N1cnZlX0dGcCAgICAgICBlY19HRnBfc2ltcGxlX2dycF9nZXRfY3VydmVfR0ZwCiAjdW5kZWYgZWNfR0ZwX3NpbXBsZV9ncm91cF9jbGVhcl9maW5pc2gKLSNkZWZpbmUgZWNfR0ZwX3NpbXBsZV9ncm91cF9jbGVhcl9maW5pc2ggICAgICAgIGVjX0dGcF9zaW1wbGVfZ3JwX2NsZWFyX2ZpbmlzaAorI2RlZmluZSBlY19HRnBfc2ltcGxlX2dyb3VwX2NsZWFyX2ZpbmlzaAllY19HRnBfc2ltcGxlX2dycF9jbGVhcl9maW5pc2gKICN1bmRlZiBlY19HRnBfc2ltcGxlX2dyb3VwX3NldF9nZW5lcmF0b3IKICNkZWZpbmUgZWNfR0ZwX3NpbXBsZV9ncm91cF9zZXRfZ2VuZXJhdG9yICAgICAgIGVjX0dGcF9zaW1wbGVfZ3JwX3NldF9nZW5lcmF0b3IKICN1bmRlZiBlY19HRnBfc2ltcGxlX2dyb3VwX2dldDBfZ2VuZXJhdG9yCiAjZGVmaW5lIGVjX0dGcF9zaW1wbGVfZ3JvdXBfZ2V0MF9nZW5lcmF0b3IgICAgICBlY19HRnBfc2ltcGxlX2dycF9ndDBfZ2VuZXJhdG9yCiAjdW5kZWYgZWNfR0ZwX3NpbXBsZV9ncm91cF9nZXRfY29mYWN0b3IKLSNkZWZpbmUgZWNfR0ZwX3NpbXBsZV9ncm91cF9nZXRfY29mYWN0b3IgICAgICAgIGVjX0dGcF9zaW1wbGVfZ3JwX2dldF9jb2ZhY3RvcgorI2RlZmluZSBlY19HRnBfc2ltcGxlX2dyb3VwX2dldF9jb2ZhY3RvcgllY19HRnBfc2ltcGxlX2dycF9nZXRfY29mYWN0b3IKICN1bmRlZiBlY19HRnBfc2ltcGxlX3BvaW50X2NsZWFyX2ZpbmlzaAotI2RlZmluZSBlY19HRnBfc2ltcGxlX3BvaW50X2NsZWFyX2ZpbmlzaCAgICAgICAgZWNfR0ZwX3NpbXBsZV9wdF9jbGVhcl9maW5pc2gKKyNkZWZpbmUgZWNfR0ZwX3NpbXBsZV9wb2ludF9jbGVhcl9maW5pc2gJZWNfR0ZwX3NpbXBsZV9wdF9jbGVhcl9maW5pc2gKICN1bmRlZiBlY19HRnBfc2ltcGxlX3BvaW50X3NldF90b19pbmZpbml0eQogI2RlZmluZSBlY19HRnBfc2ltcGxlX3BvaW50X3NldF90b19pbmZpbml0eSAgICAgZWNfR0ZwX3NpbXBsZV9wdF9zZXRfdG9faW5mCiAjdW5kZWYgZWNfR0ZwX3NpbXBsZV9wb2ludHNfbWFrZV9hZmZpbmUKLSNkZWZpbmUgZWNfR0ZwX3NpbXBsZV9wb2ludHNfbWFrZV9hZmZpbmUgICAgICAgIGVjX0dGcF9zaW1wbGVfcHRzX21ha2VfYWZmaW5lCisjZGVmaW5lIGVjX0dGcF9zaW1wbGVfcG9pbnRzX21ha2VfYWZmaW5lCWVjX0dGcF9zaW1wbGVfcHRzX21ha2VfYWZmaW5lCiAjdW5kZWYgZWNfR0ZwX3NpbXBsZV9ncm91cF9nZXRfY3VydmVfR0ZwCiAjZGVmaW5lIGVjX0dGcF9zaW1wbGVfZ3JvdXBfZ2V0X2N1cnZlX0dGcCAgICAgICBlY19HRnBfc2ltcGxlX2dycF9nZXRfY3VydmVfR0ZwCiAjdW5kZWYgZWNfR0ZwX3NpbXBsZV9zZXRfSnByb2plY3RpdmVfY29vcmRpbmF0ZXNfR0ZwCkBAIC0zNjcsNiArMzczLDE0IEBACiAjdW5kZWYgU1RPUkVfbWV0aG9kX2dldF91bmxvY2tfc3RvcmVfZnVuY3Rpb24KICNkZWZpbmUgU1RPUkVfbWV0aG9kX2dldF91bmxvY2tfc3RvcmVfZnVuY3Rpb24JU1RPUkVfbWV0aF9nZXRfdW5sb2NrX3N0b3JlX2ZuCiAKKy8qIEhhY2sgc29tZSBsb25nIFRTIG5hbWVzICovCisjdW5kZWYgVFNfUkVTUF9DVFhfc2V0X3N0YXR1c19pbmZvX2NvbmQKKyNkZWZpbmUgVFNfUkVTUF9DVFhfc2V0X3N0YXR1c19pbmZvX2NvbmQJVFNfUkVTUF9DVFhfc2V0X3N0YXRfaW5mb19jb25kCisjdW5kZWYgVFNfUkVTUF9DVFhfc2V0X2Nsb2NrX3ByZWNpc2lvbl9kaWdpdHMKKyNkZWZpbmUgVFNfUkVTUF9DVFhfc2V0X2Nsb2NrX3ByZWNpc2lvbl9kaWdpdHMJVFNfUkVTUF9DVFhfc2V0X2Nsa19wcmVjX2RpZ2l0cworI3VuZGVmIFRTX0NPTkZfc2V0X2Nsb2NrX3ByZWNpc2lvbl9kaWdpdHMKKyNkZWZpbmUgVFNfQ09ORl9zZXRfY2xvY2tfcHJlY2lzaW9uX2RpZ2l0cwlUU19DT05GX3NldF9jbGtfcHJlY19kaWdpdHMKKwogLyogSGFjayBzb21lIGxvbmcgQ01TIG5hbWVzICovCiAjdW5kZWYgQ01TX1JlY2lwaWVudEluZm9fa3RyaV9nZXQwX2FsZ3MKICNkZWZpbmUgQ01TX1JlY2lwaWVudEluZm9fa3RyaV9nZXQwX2FsZ3MJQ01TX1JlY2lwSW5mb19rdHJpX2dldDBfYWxncwpAQCAtMzg4LDIxICs0MDIsMjEgQEAKICNlbmRpZiAvKiBkZWZpbmVkIE9QRU5TU0xfU1lTX1ZNUyAqLwogCiAKLS8qIENhc2UgaW5zZW5zaXRldmUgbGlua2luZyBjYXVzZXMgcHJvYmxlbXMuLi4uICovCi0jaWYgZGVmaW5lZChPUEVOU1NMX1NZU19XSU4xNikgfHwgZGVmaW5lZChPUEVOU1NMX1NZU19WTVMpIHx8IGRlZmluZWQoT1BFTlNTTF9TWVNfT1MyKQorLyogQ2FzZSBpbnNlbnNpdGl2ZSBsaW5raW5nIGNhdXNlcyBwcm9ibGVtcy4uLi4gKi8KKyNpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX1ZNUykgfHwgZGVmaW5lZChPUEVOU1NMX1NZU19PUzIpCiAjdW5kZWYgRVJSX2xvYWRfQ1JZUFRPX3N0cmluZ3MKICNkZWZpbmUgRVJSX2xvYWRfQ1JZUFRPX3N0cmluZ3MJCQlFUlJfbG9hZF9DUllQVE9saWJfc3RyaW5ncwogI3VuZGVmIE9DU1BfY3JsSURfbmV3Ci0jZGVmaW5lIE9DU1BfY3JsSURfbmV3ICAgICAgICAgICAgICAgICAgICAgICAgICBPQ1NQX2NybElEMl9uZXcKKyNkZWZpbmUgT0NTUF9jcmxJRF9uZXcJCQkJT0NTUF9jcmxJRDJfbmV3CiAKICN1bmRlZiBkMmlfRUNQQVJBTUVURVJTCi0jZGVmaW5lIGQyaV9FQ1BBUkFNRVRFUlMgICAgICAgICAgICAgICAgICAgICAgICBkMmlfVUNfRUNQQVJBTUVURVJTCisjZGVmaW5lIGQyaV9FQ1BBUkFNRVRFUlMJCQlkMmlfVUNfRUNQQVJBTUVURVJTCiAjdW5kZWYgaTJkX0VDUEFSQU1FVEVSUwotI2RlZmluZSBpMmRfRUNQQVJBTUVURVJTICAgICAgICAgICAgICAgICAgICAgICAgaTJkX1VDX0VDUEFSQU1FVEVSUworI2RlZmluZSBpMmRfRUNQQVJBTUVURVJTCQkJaTJkX1VDX0VDUEFSQU1FVEVSUwogI3VuZGVmIGQyaV9FQ1BLUEFSQU1FVEVSUwotI2RlZmluZSBkMmlfRUNQS1BBUkFNRVRFUlMgICAgICAgICAgICAgICAgICAgICAgZDJpX1VDX0VDUEtQQVJBTUVURVJTCisjZGVmaW5lIGQyaV9FQ1BLUEFSQU1FVEVSUwkJCWQyaV9VQ19FQ1BLUEFSQU1FVEVSUwogI3VuZGVmIGkyZF9FQ1BLUEFSQU1FVEVSUwotI2RlZmluZSBpMmRfRUNQS1BBUkFNRVRFUlMgICAgICAgICAgICAgICAgICAgICAgaTJkX1VDX0VDUEtQQVJBTUVURVJTCisjZGVmaW5lIGkyZF9FQ1BLUEFSQU1FVEVSUwkJCWkyZF9VQ19FQ1BLUEFSQU1FVEVSUwogCiAvKiBUaGVzZSBmdW5jdGlvbnMgZG8gbm90IHNlZW0gdG8gZXhpc3QhICBIb3dldmVyLCBJJ20gcGFyYW5vaWQuLi4KICAgIE9yaWdpbmFsIGNvbW1hbmQgaW4geDUwOXYzLmg6CkBAIC00MTEsMTkgKzQyNSwxOSBAQAogICAgaGlkZSB0aGVtIGEgbGl0dGxlLCBieSBnaXZpbmcgdGhlbSBhbiBleHRyYSAnbycgYXQgdGhlCiAgICBiZWdpbm5pbmcgb2YgdGhlIG5hbWUuLi4gKi8KICN1bmRlZiBYNTA5djNfY2xlYW51cF9leHRlbnNpb25zCi0jZGVmaW5lIFg1MDl2M19jbGVhbnVwX2V4dGVuc2lvbnMgICAgICAgICAgICAgICBvWDUwOXYzX2NsZWFudXBfZXh0ZW5zaW9ucworI2RlZmluZSBYNTA5djNfY2xlYW51cF9leHRlbnNpb25zCQlvWDUwOXYzX2NsZWFudXBfZXh0ZW5zaW9ucwogI3VuZGVmIFg1MDl2M19hZGRfZXh0ZW5zaW9uCi0jZGVmaW5lIFg1MDl2M19hZGRfZXh0ZW5zaW9uICAgICAgICAgICAgICAgICAgICBvWDUwOXYzX2FkZF9leHRlbnNpb24KKyNkZWZpbmUgWDUwOXYzX2FkZF9leHRlbnNpb24JCQlvWDUwOXYzX2FkZF9leHRlbnNpb24KICN1bmRlZiBYNTA5djNfYWRkX25ldHNjYXBlX2V4dGVuc2lvbnMKLSNkZWZpbmUgWDUwOXYzX2FkZF9uZXRzY2FwZV9leHRlbnNpb25zICAgICAgICAgIG9YNTA5djNfYWRkX25ldHNjYXBlX2V4dGVuc2lvbnMKKyNkZWZpbmUgWDUwOXYzX2FkZF9uZXRzY2FwZV9leHRlbnNpb25zCQlvWDUwOXYzX2FkZF9uZXRzY2FwZV9leHRlbnNpb25zCiAjdW5kZWYgWDUwOXYzX2FkZF9zdGFuZGFyZF9leHRlbnNpb25zCi0jZGVmaW5lIFg1MDl2M19hZGRfc3RhbmRhcmRfZXh0ZW5zaW9ucyAgICAgICAgICBvWDUwOXYzX2FkZF9zdGFuZGFyZF9leHRlbnNpb25zCisjZGVmaW5lIFg1MDl2M19hZGRfc3RhbmRhcmRfZXh0ZW5zaW9ucwkJb1g1MDl2M19hZGRfc3RhbmRhcmRfZXh0ZW5zaW9ucwogCisvKiBUaGlzIG9uZSBjbGFzaGVzIHdpdGggQ01TX2RhdGFfY3JlYXRlICovCisjdW5kZWYgY21zX0RhdGFfY3JlYXRlCisjZGVmaW5lIGNtc19EYXRhX2NyZWF0ZQkJCQlwcml2X2Ntc19EYXRhX2NyZWF0ZQogCiAjZW5kaWYKIAogCiAjZW5kaWYgLyogISBkZWZpbmVkIEhFQURFUl9WTVNfSURIQUNLU19IICovCi0vKiBUaGlzIG9uZSBjbGFzaGVzIHdpdGggQ01TX2RhdGFfY3JlYXRlICovCi0jdW5kZWYgY21zX0RhdGFfY3JlYXRlCi0jZGVmaW5lIGNtc19EYXRhX2NyZWF0ZQkJCQlwcml2X2Ntc19EYXRhX2NyZWF0ZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVuc3NsL3RsczEuaCBiL2luY2x1ZGUvb3BlbnNzbC90bHMxLmgKaW5kZXggYWZlNDgwNy4uYjNjYzhmMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9vcGVuc3NsL3RsczEuaAorKysgYi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oCkBAIC01Niw2ICs1Niw1OSBAQAogICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KICAqLwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorICoKKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKyAqCisgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKyAqCisgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisgKiAgICBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZworICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQorICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisgKgorICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogQ29weXJpZ2h0IDIwMDIgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBTEwgUklHSFRTIFJFU0VSVkVELgogICoKICAqIFBvcnRpb25zIG9mIHRoZSBhdHRhY2hlZCBzb2Z0d2FyZSAoIkNvbnRyaWJ1dGlvbiIpIGFyZSBkZXZlbG9wZWQgYnkgCkBAIC02OCw2ICsxMjEsMzIgQEAKICAqIFZpcHVsIEd1cHRhIGFuZCBTdW1pdCBHdXB0YSBvZiBTdW4gTWljcm9zeXN0ZW1zIExhYm9yYXRvcmllcy4KICAqCiAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgMjAwNSBOb2tpYS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGUgcG9ydGlvbnMgb2YgdGhlIGF0dGFjaGVkIHNvZnR3YXJlICgiQ29udHJpYnV0aW9uIikgaXMgZGV2ZWxvcGVkIGJ5CisgKiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQgaXMgbGljZW5zZWQgcHVyc3VhbnQgdG8gdGhlIE9wZW5TU0wgb3BlbiBzb3VyY2UKKyAqIGxpY2Vuc2UuCisgKgorICogVGhlIENvbnRyaWJ1dGlvbiwgb3JpZ2luYWxseSB3cml0dGVuIGJ5IE1pa2EgS291c2EgYW5kIFBhc2kgRXJvbmVuIG9mCisgKiBOb2tpYSBDb3Jwb3JhdGlvbiwgY29uc2lzdHMgb2YgdGhlICJQU0siIChQcmUtU2hhcmVkIEtleSkgY2lwaGVyc3VpdGVzCisgKiBzdXBwb3J0IChzZWUgUkZDIDQyNzkpIHRvIE9wZW5TU0wuCisgKgorICogTm8gcGF0ZW50IGxpY2Vuc2VzIG9yIG90aGVyIHJpZ2h0cyBleGNlcHQgdGhvc2UgZXhwcmVzc2x5IHN0YXRlZCBpbgorICogdGhlIE9wZW5TU0wgb3BlbiBzb3VyY2UgbGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgZ3JhbnRlZCBvciByZWNlaXZlZAorICogZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwsIG9yIG90aGVyd2lzZS4KKyAqCisgKiBObyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBOb2tpYSB0aGF0IHRoZSBDb250cmlidXRpb24gZG9lcyBub3QKKyAqIGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkgdGhpcmQKKyAqIHBhcnR5IG9yIHRoYXQgdGhlIGxpY2Vuc2UgcHJvdmlkZXMgeW91IHdpdGggYWxsIHRoZSBuZWNlc3NhcnkgcmlnaHRzCisgKiB0byBtYWtlIHVzZSBvZiB0aGUgQ29udHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQuIElOCisgKiBBRERJVElPTiBUTyBUSEUgRElTQ0xBSU1FUlMgSU5DTFVERUQgSU4gVEhFIExJQ0VOU0UsIE5PS0lBCisgKiBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1TIEFOWSBMSUFCSUxJVFkgRk9SIENMQUlNUyBCUk9VR0hUIEJZIFlPVSBPUiBBTlkKKyAqIE9USEVSIEVOVElUWSBCQVNFRCBPTiBJTkZSSU5HRU1FTlQgT0YgSU5URUxMRUNUVUFMIFBST1BFUlRZIFJJR0hUUyBPUgorICogT1RIRVJXSVNFLgorICovCiAKICNpZm5kZWYgSEVBREVSX1RMUzFfSCAKICNkZWZpbmUgSEVBREVSX1RMUzFfSCAKQEAgLTEwNCwxNiArMTgzLDIzIEBACiAjZGVmaW5lIFRMUzFfQURfQkFEX0NFUlRJRklDQVRFX0hBU0hfVkFMVUUgMTE0CiAjZGVmaW5lIFRMUzFfQURfVU5LTk9XTl9QU0tfSURFTlRJVFkJMTE1CS8qIGZhdGFsICovCiAKLS8qIEV4dGVuc2lvblR5cGUgdmFsdWVzIGZyb20gUkZDIDM1NDYgKi8KKy8qIEV4dGVuc2lvblR5cGUgdmFsdWVzIGZyb20gUkZDMzU0NiAvIFJGQzQzNjYgKi8KICNkZWZpbmUgVExTRVhUX1RZUEVfc2VydmVyX25hbWUJCQkwCiAjZGVmaW5lIFRMU0VYVF9UWVBFX21heF9mcmFnbWVudF9sZW5ndGgJCTEKICNkZWZpbmUgVExTRVhUX1RZUEVfY2xpZW50X2NlcnRpZmljYXRlX3VybAkyCiAjZGVmaW5lIFRMU0VYVF9UWVBFX3RydXN0ZWRfY2Ffa2V5cwkJMwogI2RlZmluZSBUTFNFWFRfVFlQRV90cnVuY2F0ZWRfaG1hYwkJNAogI2RlZmluZSBUTFNFWFRfVFlQRV9zdGF0dXNfcmVxdWVzdAkJNQorLyogRXh0ZW5zaW9uVHlwZSB2YWx1ZXMgZnJvbSBSRkM0NDkyICovCiAjZGVmaW5lIFRMU0VYVF9UWVBFX2VsbGlwdGljX2N1cnZlcwkJMTAKICNkZWZpbmUgVExTRVhUX1RZUEVfZWNfcG9pbnRfZm9ybWF0cwkJMTEKICNkZWZpbmUgVExTRVhUX1RZUEVfc2Vzc2lvbl90aWNrZXQJCTM1CisvKiBFeHRlbnNpb25UeXBlIHZhbHVlIGZyb20gZHJhZnQtcmVzY29ybGEtdGxzLW9wYXF1ZS1wcmYtaW5wdXQtMDAudHh0ICovCisjaWYgMCAvKiB3aWxsIGhhdmUgdG8gYmUgcHJvdmlkZWQgZXh0ZXJuYWxseSBmb3Igbm93ICwKKyAgICAgICAqIGkuZS4gYnVpbGQgd2l0aCAtRFRMU0VYVF9UWVBFX29wYXF1ZV9wcmZfaW5wdXQ9MzgxODMKKyAgICAgICAqIHVzaW5nIHdoYXRldmVyIGV4dGVuc2lvbiBudW1iZXIgeW91J2QgbGlrZSB0byB0cnkgKi8KKyMgZGVmaW5lIFRMU0VYVF9UWVBFX29wYXF1ZV9wcmZfaW5wdXQJCT8/ICovCisjZW5kaWYKIAogLyogVGVtcG9yYXJ5IGV4dGVuc2lvbiB0eXBlICovCiAjZGVmaW5lIFRMU0VYVF9UWVBFX3JlbmVnb3RpYXRlICAgICAgICAgICAgICAgICAweGZmMDEKQEAgLTEyMyw2ICsyMDksMTMgQEAKIC8qIHN0YXR1cyByZXF1ZXN0IHZhbHVlIGZyb20gUkZDIDM1NDYgKi8KICNkZWZpbmUgVExTRVhUX1NUQVRVU1RZUEVfb2NzcCAxCiAKKy8qIEVDUG9pbnRGb3JtYXQgdmFsdWVzIGZyb20gZHJhZnQtaWV0Zi10bHMtZWNjLTEyICovCisjZGVmaW5lIFRMU0VYVF9FQ1BPSU5URk9STUFUX2ZpcnN0CQkJMAorI2RlZmluZSBUTFNFWFRfRUNQT0lOVEZPUk1BVF91bmNvbXByZXNzZWQJCTAKKyNkZWZpbmUgVExTRVhUX0VDUE9JTlRGT1JNQVRfYW5zaVg5NjJfY29tcHJlc3NlZF9wcmltZQkxCisjZGVmaW5lIFRMU0VYVF9FQ1BPSU5URk9STUFUX2Fuc2lYOTYyX2NvbXByZXNzZWRfY2hhcjIJMgorI2RlZmluZSBUTFNFWFRfRUNQT0lOVEZPUk1BVF9sYXN0CQkJMgorCiAjaWZuZGVmIE9QRU5TU0xfTk9fVExTRVhUCiAKICNkZWZpbmUgVExTRVhUX01BWExFTl9ob3N0X25hbWUgMjU1CkBAIC0xODIsMTcgKzI3NSwzMSBAQAogI2RlZmluZSBTU0xfQ1RYX3NldF90bHNleHRfc3RhdHVzX2FyZyhzc2wsIGFyZykgXAogU1NMX0NUWF9jdHJsKHNzbCxTU0xfQ1RSTF9TRVRfVExTRVhUX1NUQVRVU19SRVFfQ0JfQVJHLDAsICh2b2lkICopYXJnKQogCisjZGVmaW5lIFNTTF9zZXRfdGxzZXh0X29wYXF1ZV9wcmZfaW5wdXQocywgc3JjLCBsZW4pIFwKK1NTTF9jdHJsKHMsU1NMX0NUUkxfU0VUX1RMU0VYVF9PUEFRVUVfUFJGX0lOUFVULCBsZW4sIHNyYykKKyNkZWZpbmUgU1NMX0NUWF9zZXRfdGxzZXh0X29wYXF1ZV9wcmZfaW5wdXRfY2FsbGJhY2soY3R4LCBjYikgXAorU1NMX0NUWF9jYWxsYmFja19jdHJsKGN0eCxTU0xfQ1RSTF9TRVRfVExTRVhUX09QQVFVRV9QUkZfSU5QVVRfQ0IsICh2b2lkICgqKSh2b2lkKSljYikKKyNkZWZpbmUgU1NMX0NUWF9zZXRfdGxzZXh0X29wYXF1ZV9wcmZfaW5wdXRfY2FsbGJhY2tfYXJnKGN0eCwgYXJnKSBcCitTU0xfQ1RYX2N0cmwoY3R4LFNTTF9DVFJMX1NFVF9UTFNFWFRfT1BBUVVFX1BSRl9JTlBVVF9DQl9BUkcsIDAsIGFyZykKKwogI2RlZmluZSBTU0xfQ1RYX3NldF90bHNleHRfdGlja2V0X2tleV9jYihzc2wsIGNiKSBcCiBTU0xfQ1RYX2NhbGxiYWNrX2N0cmwoc3NsLFNTTF9DVFJMX1NFVF9UTFNFWFRfVElDS0VUX0tFWV9DQiwodm9pZCAoKikodm9pZCkpY2IpCiAKICNlbmRpZgogCi0vKiBBZGRpdGlvbmFsIFRMUyBjaXBoZXJzdWl0ZXMgZnJvbSBkcmFmdC1pZXRmLXRscy01Ni1iaXQtY2lwaGVyc3VpdGVzLTAwLnR4dAorLyogUFNLIGNpcGhlcnN1aXRlcyBmcm9tIDQyNzkgKi8KKyNkZWZpbmUgVExTMV9DS19QU0tfV0lUSF9SQzRfMTI4X1NIQSAgICAgICAgICAgICAgICAgICAgMHgwMzAwMDA4QQorI2RlZmluZSBUTFMxX0NLX1BTS19XSVRIXzNERVNfRURFX0NCQ19TSEEgICAgICAgICAgICAgICAweDAzMDAwMDhCCisjZGVmaW5lIFRMUzFfQ0tfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBICAgICAgICAgICAgICAgIDB4MDMwMDAwOEMKKyNkZWZpbmUgVExTMV9DS19QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEgICAgICAgICAgICAgICAgMHgwMzAwMDA4RAorCisvKiBBZGRpdGlvbmFsIFRMUyBjaXBoZXJzdWl0ZXMgZnJvbSBleHBpcmVkIEludGVybmV0IERyYWZ0CisgKiBkcmFmdC1pZXRmLXRscy01Ni1iaXQtY2lwaGVyc3VpdGVzLTAxLnR4dAogICogKGF2YWlsYWJsZSBpZiBUTFMxX0FMTE9XX0VYUEVSSU1FTlRBTF9DSVBIRVJTVUlURVMgaXMgZGVmaW5lZCwgc2VlCiAgKiBzM19saWIuYykuICBXZSBhY3R1YWxseSB0cmVhdCB0aGVtIGxpa2UgU1NMIDMuMCBjaXBoZXJzLCB3aGljaCB3ZSBwcm9iYWJseQotICogc2hvdWxkbid0LiAqLwotI2RlZmluZSBUTFMxX0NLX1JTQV9FWFBPUlQxMDI0X1dJVEhfUkM0XzU2X01ENQkJMHgwMzAwMDA2MAotI2RlZmluZSBUTFMxX0NLX1JTQV9FWFBPUlQxMDI0X1dJVEhfUkMyX0NCQ181Nl9NRDUJMHgwMzAwMDA2MQorICogc2hvdWxkbid0LiAgTm90ZSB0aGF0IHRoZSBmaXJzdCB0d28gYXJlIGFjdHVhbGx5IG5vdCBpbiB0aGUgSURzLiAqLworI2RlZmluZSBUTFMxX0NLX1JTQV9FWFBPUlQxMDI0X1dJVEhfUkM0XzU2X01ENQkJMHgwMzAwMDA2MCAvKiBub3QgaW4gSUQgKi8KKyNkZWZpbmUgVExTMV9DS19SU0FfRVhQT1JUMTAyNF9XSVRIX1JDMl9DQkNfNTZfTUQ1CTB4MDMwMDAwNjEgLyogbm90IGluIElEICovCiAjZGVmaW5lIFRMUzFfQ0tfUlNBX0VYUE9SVDEwMjRfV0lUSF9ERVNfQ0JDX1NIQQkJMHgwMzAwMDA2MgogI2RlZmluZSBUTFMxX0NLX0RIRV9EU1NfRVhQT1JUMTAyNF9XSVRIX0RFU19DQkNfU0hBCTB4MDMwMDAwNjMKICNkZWZpbmUgVExTMV9DS19SU0FfRVhQT1JUMTAyNF9XSVRIX1JDNF81Nl9TSEEJCTB4MDMwMDAwNjQKQEAgLTMzMCw2ICs0MzcsMTIgQEAKICNkZWZpbmUgVExTMV9UWFRfRUNESF9hbm9uX1dJVEhfQUVTXzEyOF9DQkNfU0hBICAgICAgICAgIkFFQ0RILUFFUzEyOC1TSEEiCiAjZGVmaW5lIFRMUzFfVFhUX0VDREhfYW5vbl9XSVRIX0FFU18yNTZfQ0JDX1NIQSAgICAgICAgICJBRUNESC1BRVMyNTYtU0hBIgogCisvKiBQU0sgY2lwaGVyc3VpdGVzIGZyb20gUkZDIDQyNzkgKi8KKyNkZWZpbmUgVExTMV9UWFRfUFNLX1dJVEhfUkM0XzEyOF9TSEEJCQkiUFNLLVJDNC1TSEEiCisjZGVmaW5lIFRMUzFfVFhUX1BTS19XSVRIXzNERVNfRURFX0NCQ19TSEEJCSJQU0stM0RFUy1FREUtQ0JDLVNIQSIKKyNkZWZpbmUgVExTMV9UWFRfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBCQkiUFNLLUFFUzEyOC1DQkMtU0hBIgorI2RlZmluZSBUTFMxX1RYVF9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEJCSJQU0stQUVTMjU2LUNCQy1TSEEiCisKIC8qIENhbWVsbGlhIGNpcGhlcnN1aXRlcyBmcm9tIFJGQzQxMzIgKi8KICNkZWZpbmUgVExTMV9UWFRfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEJCSJDQU1FTExJQTEyOC1TSEEiCiAjZGVmaW5lIFRMUzFfVFhUX0RIX0RTU19XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBCSJESC1EU1MtQ0FNRUxMSUExMjgtU0hBIgpAQCAtMzUzLDYgKzQ2Niw3IEBACiAjZGVmaW5lIFRMUzFfVFhUX0RIRV9SU0FfV0lUSF9TRUVEX1NIQSAgICAgICAgICAgICAgICAgICJESEUtUlNBLVNFRUQtU0hBIgogI2RlZmluZSBUTFMxX1RYVF9BREhfV0lUSF9TRUVEX1NIQSAgICAgICAgICAgICAgICAgICAgICAiQURILVNFRUQtU0hBIgogCisKICNkZWZpbmUgVExTX0NUX1JTQV9TSUdOCQkJMQogI2RlZmluZSBUTFNfQ1RfRFNTX1NJR04JCQkyCiAjZGVmaW5lIFRMU19DVF9SU0FfRklYRURfREgJCTMKQEAgLTM2MCw3ICs0NzQsMTEgQEAKICNkZWZpbmUgVExTX0NUX0VDRFNBX1NJR04JCTY0CiAjZGVmaW5lIFRMU19DVF9SU0FfRklYRURfRUNESAkJNjUKICNkZWZpbmUgVExTX0NUX0VDRFNBX0ZJWEVEX0VDREggCTY2Ci0jZGVmaW5lIFRMU19DVF9OVU1CRVIJCQk3CisjZGVmaW5lIFRMU19DVF9HT1NUOTRfU0lHTgkJMjEKKyNkZWZpbmUgVExTX0NUX0dPU1QwMV9TSUdOCQkyMgorLyogd2hlbiBjb3JyZWN0aW5nIHRoaXMgbnVtYmVyLCBjb3JyZWN0IGFsc28gU1NMM19DVF9OVU1CRVIgaW4gc3NsMy5oIChzZWUKKyAqIGNvbW1lbnQgdGhlcmUpICovCisjZGVmaW5lIFRMU19DVF9OVU1CRVIJCQk5CiAKICNkZWZpbmUgVExTMV9GSU5JU0hfTUFDX0xFTkdUSAkJMTIKIApAQCAtNDAxLDEwICs1MTksMTQgQEAKICNkZWZpbmUgVExTX01EX01BU1RFUl9TRUNSRVRfQ09OU1QgICAgIlx4NmRceDYxXHg3M1x4NzRceDY1XHg3Mlx4MjBceDczXHg2NVx4NjNceDcyXHg2NVx4NzQiICAvKm1hc3RlciBzZWNyZXQqLwogI2VuZGlmCiAKKy8qIFRMUyBTZXNzaW9uIFRpY2tldCBleHRlbnNpb24gc3RydWN0ICovCitzdHJ1Y3QgdGxzX3Nlc3Npb25fdGlja2V0X2V4dF9zdAorCXsKKwl1bnNpZ25lZCBzaG9ydCBsZW5ndGg7CisJdm9pZCAqZGF0YTsKKwl9OworCiAjaWZkZWYgIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKICNlbmRpZgotCi0KLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVuc3NsL3RtZGlmZi5oIGIvaW5jbHVkZS9vcGVuc3NsL3RtZGlmZi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjVjNDFjLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvb3BlbnNzbC90bWRpZmYuaAorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qIGNyeXB0by90bWRpZmYuaCAqLwotLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgotICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgotICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgotICogCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKLSAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKLSAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgotICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcwotICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0gKiAKLSAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCi0gKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCi0gKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCi0gKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgotICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCi0gKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5Ci0gKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgotICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5Ci0gKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KLSAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAotICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKLSAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqIAotICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKLSAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQotICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQotICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KLSAqLwotCi0vKiBIZWFkZXIgZm9yIGR5bmFtaWMgaGFzaCB0YWJsZSByb3V0aW5lcwotICogQXV0aG9yIC0gRXJpYyBZb3VuZwotICovCi0vKiAuLi4gZXJtIHllYWgsICJkeW5hbWljIGhhc2ggdGFibGVzIiB5b3Ugc2F5PwotICogCi0gKiBBbmQgd2hhdCB3b3VsZCBkeW5hbWljIGhhc2ggdGFibGVzIGhhdmUgdG8gZG8gd2l0aCBhbnkgb2YgdGhpcyBjb2RlICpub3cqPwotICogQUZBSUNTLCB0aGlzIGNvZGUgaXMgb25seSByZWZlcmVuY2VkIGJ5IGNyeXB0by9ibi9leHAuYyB3aGljaCBpcyBhbiB1bnVzZWQKLSAqIGZpbGUgdGhhdCBJIGRvdWJ0IGNvbXBpbGVzIGFueSBtb3JlLiBzcGVlZC5jIGlzIHRoZSBvbmx5IHRoaW5nIHRoYXQgY291bGQKLSAqIHVzZSB0aGlzIChhbmQgaXQgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCBoYXNoIHRhYmxlcyksIHlldCBpdCBpbnN0ZWFkIGhhcyBpdHMKLSAqIG93biBkdXBsaWNhdGlvbiBvZiBhbGwgdGhpcyBzdHVmZiBhbmQgbG9va3MsIGlmIGFueXRoaW5nLCBtb3JlIGNvbXBsZXRlLiBTZWUKLSAqIHRoZSBjb3JyZXNwb25kaW5nIG5vdGUgaW4gYXBwcy9zcGVlZC5jLgotICogVGhlIEJlbXVzZWQgLSBHZW9mZgotICovCi0KLSNpZm5kZWYgSEVBREVSX1RNRElGRl9ICi0jZGVmaW5lIEhFQURFUl9UTURJRkZfSAotCi0jaWZkZWYgIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi10eXBlZGVmIHN0cnVjdCBtc190bSBNU19UTTsKLQotTVNfVE0gKm1zX3RpbWVfbmV3KHZvaWQgKTsKLXZvaWQgbXNfdGltZV9mcmVlKE1TX1RNICphKTsKLXZvaWQgbXNfdGltZV9nZXQoTVNfVE0gKmEpOwotZG91YmxlIG1zX3RpbWVfZGlmZihNU19UTSAqc3RhcnQsIE1TX1RNICplbmQpOwotaW50IG1zX3RpbWVfY21wKGNvbnN0IE1TX1RNICphcCwgY29uc3QgTVNfVE0gKmJwKTsKLQotI2lmZGVmICBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLSNlbmRpZgotCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW5zc2wvdHMuaCBiL2luY2x1ZGUvb3BlbnNzbC90cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5MGU4YTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL29wZW5zc2wvdHMuaApAQCAtMCwwICsxLDg2MSBAQAorLyogY3J5cHRvL3RzL3RzLmggKi8KKy8qIFdyaXR0ZW4gYnkgWm9sdGFuIEdsb3ppayAoemdsb3ppa0BvcGVudHNhLm9yZykgZm9yIHRoZSBPcGVuU1NMCisgKiBwcm9qZWN0IDIwMDIsIDIwMDMsIDIwMDQuCisgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisgKgorICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgorICoKKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorICoKKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKyAqICAgIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCisgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAqCisgKi8KKworI2lmbmRlZiBIRUFERVJfVFNfSAorI2RlZmluZSBIRUFERVJfVFNfSAorCisjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgorI2luY2x1ZGUgPG9wZW5zc2wvc3ltaGFja3MuaD4KKyNpZm5kZWYgT1BFTlNTTF9OT19CVUZGRVIKKyNpbmNsdWRlIDxvcGVuc3NsL2J1ZmZlci5oPgorI2VuZGlmCisjaWZuZGVmIE9QRU5TU0xfTk9fRVZQCisjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKyNlbmRpZgorI2lmbmRlZiBPUEVOU1NMX05PX0JJTworI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxvcGVuc3NsL3N0YWNrLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9hc24xLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9zYWZlc3RhY2suaD4KKworI2lmbmRlZiBPUEVOU1NMX05PX1JTQQorI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisjZW5kaWYKKworI2lmbmRlZiBPUEVOU1NMX05PX0RTQQorI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+CisjZW5kaWYKKworI2lmbmRlZiBPUEVOU1NMX05PX0RICisjaW5jbHVkZSA8b3BlbnNzbC9kaC5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorCisKKyNpZmRlZiAgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpZmRlZiBXSU4zMgorLyogVW5kZXIgV2luMzIgdGhpcyBpcyBkZWZpbmVkIGluIHdpbmNyeXB0LmggKi8KKyN1bmRlZiBYNTA5X05BTUUKKyNlbmRpZgorCisjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+CisjaW5jbHVkZSA8b3BlbnNzbC94NTA5djMuaD4KKworLyoKK01lc3NhZ2VJbXByaW50IDo6PSBTRVFVRU5DRSAgeworICAgICBoYXNoQWxnb3JpdGhtICAgICAgICAgICAgICAgIEFsZ29yaXRobUlkZW50aWZpZXIsCisgICAgIGhhc2hlZE1lc3NhZ2UgICAgICAgICAgICAgICAgT0NURVQgU1RSSU5HICB9CisqLworCit0eXBlZGVmIHN0cnVjdCBUU19tc2dfaW1wcmludF9zdAorCXsKKwlYNTA5X0FMR09SICpoYXNoX2FsZ287CisJQVNOMV9PQ1RFVF9TVFJJTkcgKmhhc2hlZF9tc2c7CisJfSBUU19NU0dfSU1QUklOVDsKKworLyoKK1RpbWVTdGFtcFJlcSA6Oj0gU0VRVUVOQ0UgIHsKKyAgIHZlcnNpb24gICAgICAgICAgICAgICAgICBJTlRFR0VSICB7IHYxKDEpIH0sCisgICBtZXNzYWdlSW1wcmludCAgICAgICAgICAgTWVzc2FnZUltcHJpbnQsCisgICAgIC0tYSBoYXNoIGFsZ29yaXRobSBPSUQgYW5kIHRoZSBoYXNoIHZhbHVlIG9mIHRoZSBkYXRhIHRvIGJlCisgICAgIC0tdGltZS1zdGFtcGVkCisgICByZXFQb2xpY3kgICAgICAgICAgICAgICAgVFNBUG9saWN5SWQgICAgICAgICAgICAgICAgT1BUSU9OQUwsCisgICBub25jZSAgICAgICAgICAgICAgICAgICAgSU5URUdFUiAgICAgICAgICAgICAgICAgICAgT1BUSU9OQUwsCisgICBjZXJ0UmVxICAgICAgICAgICAgICAgICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgREVGQVVMVCBGQUxTRSwKKyAgIGV4dGVuc2lvbnMgICAgICAgICAgICAgICBbMF0gSU1QTElDSVQgRXh0ZW5zaW9ucyAgICBPUFRJT05BTCAgfQorKi8KKwordHlwZWRlZiBzdHJ1Y3QgVFNfcmVxX3N0CisJeworCUFTTjFfSU5URUdFUiAqdmVyc2lvbjsKKwlUU19NU0dfSU1QUklOVCAqbXNnX2ltcHJpbnQ7CisJQVNOMV9PQkpFQ1QgKnBvbGljeV9pZDsJCS8qIE9QVElPTkFMICovCisJQVNOMV9JTlRFR0VSICpub25jZTsJCS8qIE9QVElPTkFMICovCisJQVNOMV9CT09MRUFOIGNlcnRfcmVxOwkJLyogREVGQVVMVCBGQUxTRSAqLworCVNUQUNLX09GKFg1MDlfRVhURU5TSU9OKSAqZXh0ZW5zaW9uczsJLyogWzBdIE9QVElPTkFMICovCisJfSBUU19SRVE7CisKKy8qCitBY2N1cmFjeSA6Oj0gU0VRVUVOQ0UgeworICAgICAgICAgICAgICAgIHNlY29uZHMgICAgICAgIElOVEVHRVIgICAgICAgICAgIE9QVElPTkFMLAorICAgICAgICAgICAgICAgIG1pbGxpcyAgICAgWzBdIElOVEVHRVIgICgxLi45OTkpIE9QVElPTkFMLAorICAgICAgICAgICAgICAgIG1pY3JvcyAgICAgWzFdIElOVEVHRVIgICgxLi45OTkpIE9QVElPTkFMICB9CisqLworCit0eXBlZGVmIHN0cnVjdCBUU19hY2N1cmFjeV9zdAorCXsKKwlBU04xX0lOVEVHRVIgKnNlY29uZHM7CisJQVNOMV9JTlRFR0VSICptaWxsaXM7CisJQVNOMV9JTlRFR0VSICptaWNyb3M7CisJfSBUU19BQ0NVUkFDWTsKKworLyoKK1RTVEluZm8gOjo9IFNFUVVFTkNFICB7CisgICAgdmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICBJTlRFR0VSICB7IHYxKDEpIH0sCisgICAgcG9saWN5ICAgICAgICAgICAgICAgICAgICAgICBUU0FQb2xpY3lJZCwKKyAgICBtZXNzYWdlSW1wcmludCAgICAgICAgICAgICAgIE1lc3NhZ2VJbXByaW50LAorICAgICAgLS0gTVVTVCBoYXZlIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBzaW1pbGFyIGZpZWxkIGluCisgICAgICAtLSBUaW1lU3RhbXBSZXEKKyAgICBzZXJpYWxOdW1iZXIgICAgICAgICAgICAgICAgIElOVEVHRVIsCisgICAgIC0tIFRpbWUtU3RhbXBpbmcgdXNlcnMgTVVTVCBiZSByZWFkeSB0byBhY2NvbW1vZGF0ZSBpbnRlZ2VycworICAgICAtLSB1cCB0byAxNjAgYml0cy4KKyAgICBnZW5UaW1lICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYWxpemVkVGltZSwKKyAgICBhY2N1cmFjeSAgICAgICAgICAgICAgICAgICAgIEFjY3VyYWN5ICAgICAgICAgICAgICAgICBPUFRJT05BTCwKKyAgICBvcmRlcmluZyAgICAgICAgICAgICAgICAgICAgIEJPT0xFQU4gICAgICAgICAgICAgREVGQVVMVCBGQUxTRSwKKyAgICBub25jZSAgICAgICAgICAgICAgICAgICAgICAgIElOVEVHRVIgICAgICAgICAgICAgICAgICBPUFRJT05BTCwKKyAgICAgIC0tIE1VU1QgYmUgcHJlc2VudCBpZiB0aGUgc2ltaWxhciBmaWVsZCB3YXMgcHJlc2VudAorICAgICAgLS0gaW4gVGltZVN0YW1wUmVxLiAgSW4gdGhhdCBjYXNlIGl0IE1VU1QgaGF2ZSB0aGUgc2FtZSB2YWx1ZS4KKyAgICB0c2EgICAgICAgICAgICAgICAgICAgICAgICAgIFswXSBHZW5lcmFsTmFtZSAgICAgICAgICBPUFRJT05BTCwKKyAgICBleHRlbnNpb25zICAgICAgICAgICAgICAgICAgIFsxXSBJTVBMSUNJVCBFeHRlbnNpb25zICBPUFRJT05BTCAgIH0KKyovCisKK3R5cGVkZWYgc3RydWN0IFRTX3RzdF9pbmZvX3N0CisJeworCUFTTjFfSU5URUdFUiAqdmVyc2lvbjsKKwlBU04xX09CSkVDVCAqcG9saWN5X2lkOworCVRTX01TR19JTVBSSU5UICptc2dfaW1wcmludDsKKwlBU04xX0lOVEVHRVIgKnNlcmlhbDsKKwlBU04xX0dFTkVSQUxJWkVEVElNRSAqdGltZTsKKwlUU19BQ0NVUkFDWSAqYWNjdXJhY3k7CisJQVNOMV9CT09MRUFOIG9yZGVyaW5nOworCUFTTjFfSU5URUdFUiAqbm9uY2U7CisJR0VORVJBTF9OQU1FICp0c2E7CisJU1RBQ0tfT0YoWDUwOV9FWFRFTlNJT04pICpleHRlbnNpb25zOworCX0gVFNfVFNUX0lORk87CQorCisvKgorUEtJU3RhdHVzSW5mbyA6Oj0gU0VRVUVOQ0UgeworICAgIHN0YXR1cyAgICAgICAgUEtJU3RhdHVzLAorICAgIHN0YXR1c1N0cmluZyAgUEtJRnJlZVRleHQgICAgIE9QVElPTkFMLAorICAgIGZhaWxJbmZvICAgICAgUEtJRmFpbHVyZUluZm8gIE9QVElPTkFMICB9CisKK0Zyb20gUkZDIDE1MTAgLSBzZWN0aW9uIDMuMS4xOgorUEtJRnJlZVRleHQgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLk1BWCkgT0YgVVRGOFN0cmluZworCS0tIHRleHQgZW5jb2RlZCBhcyBVVEYtOCBTdHJpbmcgKG5vdGU6ICBlYWNoIFVURjhTdHJpbmcgU0hPVUxECisJLS0gaW5jbHVkZSBhbiBSRkMgMTc2NiBsYW5ndWFnZSB0YWcgdG8gaW5kaWNhdGUgdGhlIGxhbmd1YWdlCisJLS0gb2YgdGhlIGNvbnRhaW5lZCB0ZXh0KQorKi8KKworLyogUG9zc2libGUgdmFsdWVzIGZvciBzdGF0dXMuIFNlZSB0c19yZXNwX3ByaW50LmMgJiYgdHNfcmVzcF92ZXJpZnkuYy4gKi8KKworI2RlZmluZQlUU19TVEFUVVNfR1JBTlRFRAkJCTAKKyNkZWZpbmUJVFNfU1RBVFVTX0dSQU5URURfV0lUSF9NT0RTCQkxCisjZGVmaW5lCVRTX1NUQVRVU19SRUpFQ1RJT04JCQkyCisjZGVmaW5lCVRTX1NUQVRVU19XQUlUSU5HCQkJMworI2RlZmluZQlUU19TVEFUVVNfUkVWT0NBVElPTl9XQVJOSU5HCQk0CisjZGVmaW5lCVRTX1NUQVRVU19SRVZPQ0FUSU9OX05PVElGSUNBVElPTgk1CisKKy8qIFBvc3NpYmxlIHZhbHVlcyBmb3IgZmFpbHVyZV9pbmZvLiBTZWUgdHNfcmVzcF9wcmludC5jICYmIHRzX3Jlc3BfdmVyaWZ5LmMgKi8KKworI2RlZmluZQlUU19JTkZPX0JBRF9BTEcJCQkwCisjZGVmaW5lCVRTX0lORk9fQkFEX1JFUVVFU1QJCTIKKyNkZWZpbmUJVFNfSU5GT19CQURfREFUQV9GT1JNQVQJCTUKKyNkZWZpbmUJVFNfSU5GT19USU1FX05PVF9BVkFJTEFCTEUJMTQKKyNkZWZpbmUJVFNfSU5GT19VTkFDQ0VQVEVEX1BPTElDWQkxNQorI2RlZmluZQlUU19JTkZPX1VOQUNDRVBURURfRVhURU5TSU9OCTE2CisjZGVmaW5lCVRTX0lORk9fQUREX0lORk9fTk9UX0FWQUlMQUJMRQkxNworI2RlZmluZQlUU19JTkZPX1NZU1RFTV9GQUlMVVJFCQkyNQorCit0eXBlZGVmIHN0cnVjdCBUU19zdGF0dXNfaW5mb19zdAorCXsKKwlBU04xX0lOVEVHRVIgKnN0YXR1czsKKwlTVEFDS19PRihBU04xX1VURjhTVFJJTkcpICp0ZXh0OworCUFTTjFfQklUX1NUUklORyAqZmFpbHVyZV9pbmZvOworCX0gVFNfU1RBVFVTX0lORk87CisKK0RFQ0xBUkVfU1RBQ0tfT0YoQVNOMV9VVEY4U1RSSU5HKQorREVDTEFSRV9BU04xX1NFVF9PRihBU04xX1VURjhTVFJJTkcpCisKKy8qCitUaW1lU3RhbXBSZXNwIDo6PSBTRVFVRU5DRSAgeworICAgICBzdGF0dXMgICAgICAgICAgICAgICAgICBQS0lTdGF0dXNJbmZvLAorICAgICB0aW1lU3RhbXBUb2tlbiAgICAgICAgICBUaW1lU3RhbXBUb2tlbiAgICAgT1BUSU9OQUwgfQorKi8KKwordHlwZWRlZiBzdHJ1Y3QgVFNfcmVzcF9zdAorCXsKKwlUU19TVEFUVVNfSU5GTyAqc3RhdHVzX2luZm87CisJUEtDUzcgKnRva2VuOworCVRTX1RTVF9JTkZPICp0c3RfaW5mbzsKKwl9IFRTX1JFU1A7CisKKy8qIFRoZSBzdHJ1Y3R1cmUgYmVsb3cgd291bGQgYmVsb25nIHRvIHRoZSBFU1MgY29tcG9uZW50LiAqLworCisvKgorSXNzdWVyU2VyaWFsIDo6PSBTRVFVRU5DRSB7CisJaXNzdWVyICAgICAgICAgICAgICAgICAgIEdlbmVyYWxOYW1lcywKKwlzZXJpYWxOdW1iZXIgICAgICAgICAgICAgQ2VydGlmaWNhdGVTZXJpYWxOdW1iZXIKKwl9CisqLworCit0eXBlZGVmIHN0cnVjdCBFU1NfaXNzdWVyX3NlcmlhbAorCXsKKwlTVEFDS19PRihHRU5FUkFMX05BTUUpCSppc3N1ZXI7CisJQVNOMV9JTlRFR0VSCQkqc2VyaWFsOworCX0gRVNTX0lTU1VFUl9TRVJJQUw7CisKKy8qCitFU1NDZXJ0SUQgOjo9ICBTRVFVRU5DRSB7CisgICAgICAgIGNlcnRIYXNoICAgICAgICAgICAgICAgICBIYXNoLAorICAgICAgICBpc3N1ZXJTZXJpYWwgICAgICAgICAgICAgSXNzdWVyU2VyaWFsIE9QVElPTkFMCit9CisqLworCit0eXBlZGVmIHN0cnVjdCBFU1NfY2VydF9pZAorCXsKKwlBU04xX09DVEVUX1NUUklORyAqaGFzaDsJLyogQWx3YXlzIFNIQS0xIGRpZ2VzdC4gKi8KKwlFU1NfSVNTVUVSX1NFUklBTCAqaXNzdWVyX3NlcmlhbDsKKwl9IEVTU19DRVJUX0lEOworCitERUNMQVJFX1NUQUNLX09GKEVTU19DRVJUX0lEKQorREVDTEFSRV9BU04xX1NFVF9PRihFU1NfQ0VSVF9JRCkKKworLyoKK1NpZ25pbmdDZXJ0aWZpY2F0ZSA6Oj0gIFNFUVVFTkNFIHsKKyAgICAgICBjZXJ0cyAgICAgICAgU0VRVUVOQ0UgT0YgRVNTQ2VydElELAorICAgICAgIHBvbGljaWVzICAgICBTRVFVRU5DRSBPRiBQb2xpY3lJbmZvcm1hdGlvbiBPUFRJT05BTAorfQorKi8KKwordHlwZWRlZiBzdHJ1Y3QgRVNTX3NpZ25pbmdfY2VydAorCXsKKwlTVEFDS19PRihFU1NfQ0VSVF9JRCkgKmNlcnRfaWRzOworCVNUQUNLX09GKFBPTElDWUlORk8pICpwb2xpY3lfaW5mbzsKKwl9IEVTU19TSUdOSU5HX0NFUlQ7CisKKworVFNfUkVRCSpUU19SRVFfbmV3KHZvaWQpOwordm9pZAlUU19SRVFfZnJlZShUU19SRVEgKmEpOworaW50CWkyZF9UU19SRVEoY29uc3QgVFNfUkVRICphLCB1bnNpZ25lZCBjaGFyICoqcHApOworVFNfUkVRCSpkMmlfVFNfUkVRKFRTX1JFUSAqKmEsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKipwcCwgbG9uZyBsZW5ndGgpOworCitUU19SRVEJKlRTX1JFUV9kdXAoVFNfUkVRICphKTsKKworVFNfUkVRCSpkMmlfVFNfUkVRX2ZwKEZJTEUgKmZwLCBUU19SRVEgKiphKTsKK2ludAlpMmRfVFNfUkVRX2ZwKEZJTEUgKmZwLCBUU19SRVEgKmEpOworVFNfUkVRCSpkMmlfVFNfUkVRX2JpbyhCSU8gKmZwLCBUU19SRVEgKiphKTsKK2ludAlpMmRfVFNfUkVRX2JpbyhCSU8gKmZwLCBUU19SRVEgKmEpOworCitUU19NU0dfSU1QUklOVAkqVFNfTVNHX0lNUFJJTlRfbmV3KHZvaWQpOwordm9pZAkJVFNfTVNHX0lNUFJJTlRfZnJlZShUU19NU0dfSU1QUklOVCAqYSk7CitpbnQJCWkyZF9UU19NU0dfSU1QUklOVChjb25zdCBUU19NU0dfSU1QUklOVCAqYSwgdW5zaWduZWQgY2hhciAqKnBwKTsKK1RTX01TR19JTVBSSU5UCSpkMmlfVFNfTVNHX0lNUFJJTlQoVFNfTVNHX0lNUFJJTlQgKiphLAorCQkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICoqcHAsIGxvbmcgbGVuZ3RoKTsKKworVFNfTVNHX0lNUFJJTlQJKlRTX01TR19JTVBSSU5UX2R1cChUU19NU0dfSU1QUklOVCAqYSk7CisKK1RTX01TR19JTVBSSU5UCSpkMmlfVFNfTVNHX0lNUFJJTlRfZnAoRklMRSAqZnAsIFRTX01TR19JTVBSSU5UICoqYSk7CitpbnQJCWkyZF9UU19NU0dfSU1QUklOVF9mcChGSUxFICpmcCwgVFNfTVNHX0lNUFJJTlQgKmEpOworVFNfTVNHX0lNUFJJTlQJKmQyaV9UU19NU0dfSU1QUklOVF9iaW8oQklPICpmcCwgVFNfTVNHX0lNUFJJTlQgKiphKTsKK2ludAkJaTJkX1RTX01TR19JTVBSSU5UX2JpbyhCSU8gKmZwLCBUU19NU0dfSU1QUklOVCAqYSk7CisKK1RTX1JFU1AJKlRTX1JFU1BfbmV3KHZvaWQpOwordm9pZAlUU19SRVNQX2ZyZWUoVFNfUkVTUCAqYSk7CitpbnQJaTJkX1RTX1JFU1AoY29uc3QgVFNfUkVTUCAqYSwgdW5zaWduZWQgY2hhciAqKnBwKTsKK1RTX1JFU1AJKmQyaV9UU19SRVNQKFRTX1JFU1AgKiphLCBjb25zdCB1bnNpZ25lZCBjaGFyICoqcHAsIGxvbmcgbGVuZ3RoKTsKK1RTX1RTVF9JTkZPICpQS0NTN190b19UU19UU1RfSU5GTyhQS0NTNyAqdG9rZW4pOworVFNfUkVTUAkqVFNfUkVTUF9kdXAoVFNfUkVTUCAqYSk7CisKK1RTX1JFU1AJKmQyaV9UU19SRVNQX2ZwKEZJTEUgKmZwLCBUU19SRVNQICoqYSk7CitpbnQJaTJkX1RTX1JFU1BfZnAoRklMRSAqZnAsIFRTX1JFU1AgKmEpOworVFNfUkVTUAkqZDJpX1RTX1JFU1BfYmlvKEJJTyAqZnAsIFRTX1JFU1AgKiphKTsKK2ludAlpMmRfVFNfUkVTUF9iaW8oQklPICpmcCwgVFNfUkVTUCAqYSk7CisKK1RTX1NUQVRVU19JTkZPCSpUU19TVEFUVVNfSU5GT19uZXcodm9pZCk7Cit2b2lkCQlUU19TVEFUVVNfSU5GT19mcmVlKFRTX1NUQVRVU19JTkZPICphKTsKK2ludAkJaTJkX1RTX1NUQVRVU19JTkZPKGNvbnN0IFRTX1NUQVRVU19JTkZPICphLCB1bnNpZ25lZCBjaGFyICoqcHApOworVFNfU1RBVFVTX0lORk8JKmQyaV9UU19TVEFUVVNfSU5GTyhUU19TVEFUVVNfSU5GTyAqKmEsIAorCQkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICoqcHAsIGxvbmcgbGVuZ3RoKTsKK1RTX1NUQVRVU19JTkZPCSpUU19TVEFUVVNfSU5GT19kdXAoVFNfU1RBVFVTX0lORk8gKmEpOworCitUU19UU1RfSU5GTwkqVFNfVFNUX0lORk9fbmV3KHZvaWQpOwordm9pZAkJVFNfVFNUX0lORk9fZnJlZShUU19UU1RfSU5GTyAqYSk7CitpbnQJCWkyZF9UU19UU1RfSU5GTyhjb25zdCBUU19UU1RfSU5GTyAqYSwgdW5zaWduZWQgY2hhciAqKnBwKTsKK1RTX1RTVF9JTkZPCSpkMmlfVFNfVFNUX0lORk8oVFNfVFNUX0lORk8gKiphLCBjb25zdCB1bnNpZ25lZCBjaGFyICoqcHAsCisJCQkJICAgIGxvbmcgbGVuZ3RoKTsKK1RTX1RTVF9JTkZPCSpUU19UU1RfSU5GT19kdXAoVFNfVFNUX0lORk8gKmEpOworCitUU19UU1RfSU5GTwkqZDJpX1RTX1RTVF9JTkZPX2ZwKEZJTEUgKmZwLCBUU19UU1RfSU5GTyAqKmEpOworaW50CQlpMmRfVFNfVFNUX0lORk9fZnAoRklMRSAqZnAsIFRTX1RTVF9JTkZPICphKTsKK1RTX1RTVF9JTkZPCSpkMmlfVFNfVFNUX0lORk9fYmlvKEJJTyAqZnAsIFRTX1RTVF9JTkZPICoqYSk7CitpbnQJCWkyZF9UU19UU1RfSU5GT19iaW8oQklPICpmcCwgVFNfVFNUX0lORk8gKmEpOworCitUU19BQ0NVUkFDWQkqVFNfQUNDVVJBQ1lfbmV3KHZvaWQpOwordm9pZAkJVFNfQUNDVVJBQ1lfZnJlZShUU19BQ0NVUkFDWSAqYSk7CitpbnQJCWkyZF9UU19BQ0NVUkFDWShjb25zdCBUU19BQ0NVUkFDWSAqYSwgdW5zaWduZWQgY2hhciAqKnBwKTsKK1RTX0FDQ1VSQUNZCSpkMmlfVFNfQUNDVVJBQ1koVFNfQUNDVVJBQ1kgKiphLCBjb25zdCB1bnNpZ25lZCBjaGFyICoqcHAsCisJCQkJICAgIGxvbmcgbGVuZ3RoKTsKK1RTX0FDQ1VSQUNZCSpUU19BQ0NVUkFDWV9kdXAoVFNfQUNDVVJBQ1kgKmEpOworCitFU1NfSVNTVUVSX1NFUklBTCAqRVNTX0lTU1VFUl9TRVJJQUxfbmV3KHZvaWQpOwordm9pZAkJICBFU1NfSVNTVUVSX1NFUklBTF9mcmVlKEVTU19JU1NVRVJfU0VSSUFMICphKTsKK2ludAkJICBpMmRfRVNTX0lTU1VFUl9TRVJJQUwoY29uc3QgRVNTX0lTU1VFUl9TRVJJQUwgKmEsCisJCQkJCXVuc2lnbmVkIGNoYXIgKipwcCk7CitFU1NfSVNTVUVSX1NFUklBTCAqZDJpX0VTU19JU1NVRVJfU0VSSUFMKEVTU19JU1NVRVJfU0VSSUFMICoqYSwKKwkJCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKipwcCwgbG9uZyBsZW5ndGgpOworRVNTX0lTU1VFUl9TRVJJQUwgKkVTU19JU1NVRVJfU0VSSUFMX2R1cChFU1NfSVNTVUVSX1NFUklBTCAqYSk7CisKK0VTU19DRVJUX0lECSpFU1NfQ0VSVF9JRF9uZXcodm9pZCk7Cit2b2lkCQlFU1NfQ0VSVF9JRF9mcmVlKEVTU19DRVJUX0lEICphKTsKK2ludAkJaTJkX0VTU19DRVJUX0lEKGNvbnN0IEVTU19DRVJUX0lEICphLCB1bnNpZ25lZCBjaGFyICoqcHApOworRVNTX0NFUlRfSUQJKmQyaV9FU1NfQ0VSVF9JRChFU1NfQ0VSVF9JRCAqKmEsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKipwcCwKKwkJCQkgbG9uZyBsZW5ndGgpOworRVNTX0NFUlRfSUQJKkVTU19DRVJUX0lEX2R1cChFU1NfQ0VSVF9JRCAqYSk7CisKK0VTU19TSUdOSU5HX0NFUlQgKkVTU19TSUdOSU5HX0NFUlRfbmV3KHZvaWQpOwordm9pZAkJIEVTU19TSUdOSU5HX0NFUlRfZnJlZShFU1NfU0lHTklOR19DRVJUICphKTsKK2ludAkJIGkyZF9FU1NfU0lHTklOR19DRVJUKGNvbnN0IEVTU19TSUdOSU5HX0NFUlQgKmEsIAorCQkJCSAgICAgIHVuc2lnbmVkIGNoYXIgKipwcCk7CitFU1NfU0lHTklOR19DRVJUICpkMmlfRVNTX1NJR05JTkdfQ0VSVChFU1NfU0lHTklOR19DRVJUICoqYSwKKwkJCQkgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqKnBwLCBsb25nIGxlbmd0aCk7CitFU1NfU0lHTklOR19DRVJUICpFU1NfU0lHTklOR19DRVJUX2R1cChFU1NfU0lHTklOR19DRVJUICphKTsKKwordm9pZCBFUlJfbG9hZF9UU19zdHJpbmdzKHZvaWQpOworCitpbnQgVFNfUkVRX3NldF92ZXJzaW9uKFRTX1JFUSAqYSwgbG9uZyB2ZXJzaW9uKTsKK2xvbmcgVFNfUkVRX2dldF92ZXJzaW9uKGNvbnN0IFRTX1JFUSAqYSk7CisKK2ludCBUU19SRVFfc2V0X21zZ19pbXByaW50KFRTX1JFUSAqYSwgVFNfTVNHX0lNUFJJTlQgKm1zZ19pbXByaW50KTsKK1RTX01TR19JTVBSSU5UICpUU19SRVFfZ2V0X21zZ19pbXByaW50KFRTX1JFUSAqYSk7CisKK2ludCBUU19NU0dfSU1QUklOVF9zZXRfYWxnbyhUU19NU0dfSU1QUklOVCAqYSwgWDUwOV9BTEdPUiAqYWxnKTsKK1g1MDlfQUxHT1IgKlRTX01TR19JTVBSSU5UX2dldF9hbGdvKFRTX01TR19JTVBSSU5UICphKTsKKworaW50IFRTX01TR19JTVBSSU5UX3NldF9tc2coVFNfTVNHX0lNUFJJTlQgKmEsIHVuc2lnbmVkIGNoYXIgKmQsIGludCBsZW4pOworQVNOMV9PQ1RFVF9TVFJJTkcgKlRTX01TR19JTVBSSU5UX2dldF9tc2coVFNfTVNHX0lNUFJJTlQgKmEpOworCitpbnQgVFNfUkVRX3NldF9wb2xpY3lfaWQoVFNfUkVRICphLCBBU04xX09CSkVDVCAqcG9saWN5KTsKK0FTTjFfT0JKRUNUICpUU19SRVFfZ2V0X3BvbGljeV9pZChUU19SRVEgKmEpOworCitpbnQgVFNfUkVRX3NldF9ub25jZShUU19SRVEgKmEsIGNvbnN0IEFTTjFfSU5URUdFUiAqbm9uY2UpOworY29uc3QgQVNOMV9JTlRFR0VSICpUU19SRVFfZ2V0X25vbmNlKGNvbnN0IFRTX1JFUSAqYSk7CisKK2ludCBUU19SRVFfc2V0X2NlcnRfcmVxKFRTX1JFUSAqYSwgaW50IGNlcnRfcmVxKTsKK2ludCBUU19SRVFfZ2V0X2NlcnRfcmVxKGNvbnN0IFRTX1JFUSAqYSk7CisKK1NUQUNLX09GKFg1MDlfRVhURU5TSU9OKSAqVFNfUkVRX2dldF9leHRzKFRTX1JFUSAqYSk7Cit2b2lkIFRTX1JFUV9leHRfZnJlZShUU19SRVEgKmEpOworaW50IFRTX1JFUV9nZXRfZXh0X2NvdW50KFRTX1JFUSAqYSk7CitpbnQgVFNfUkVRX2dldF9leHRfYnlfTklEKFRTX1JFUSAqYSwgaW50IG5pZCwgaW50IGxhc3Rwb3MpOworaW50IFRTX1JFUV9nZXRfZXh0X2J5X09CSihUU19SRVEgKmEsIEFTTjFfT0JKRUNUICpvYmosIGludCBsYXN0cG9zKTsKK2ludCBUU19SRVFfZ2V0X2V4dF9ieV9jcml0aWNhbChUU19SRVEgKmEsIGludCBjcml0LCBpbnQgbGFzdHBvcyk7CitYNTA5X0VYVEVOU0lPTiAqVFNfUkVRX2dldF9leHQoVFNfUkVRICphLCBpbnQgbG9jKTsKK1g1MDlfRVhURU5TSU9OICpUU19SRVFfZGVsZXRlX2V4dChUU19SRVEgKmEsIGludCBsb2MpOworaW50IFRTX1JFUV9hZGRfZXh0KFRTX1JFUSAqYSwgWDUwOV9FWFRFTlNJT04gKmV4LCBpbnQgbG9jKTsKK3ZvaWQgKlRTX1JFUV9nZXRfZXh0X2QyaShUU19SRVEgKmEsIGludCBuaWQsIGludCAqY3JpdCwgaW50ICppZHgpOworCisvKiBGdW5jdGlvbiBkZWNsYXJhdGlvbnMgZm9yIFRTX1JFUSBkZWZpbmVkIGluIHRzL3RzX3JlcV9wcmludC5jICovCisKK2ludCBUU19SRVFfcHJpbnRfYmlvKEJJTyAqYmlvLCBUU19SRVEgKmEpOworCisvKiBGdW5jdGlvbiBkZWNsYXJhdGlvbnMgZm9yIFRTX1JFU1AgZGVmaW5lZCBpbiB0cy90c19yZXNwX3V0aWxzLmMgKi8KKworaW50IFRTX1JFU1Bfc2V0X3N0YXR1c19pbmZvKFRTX1JFU1AgKmEsIFRTX1NUQVRVU19JTkZPICppbmZvKTsKK1RTX1NUQVRVU19JTkZPICpUU19SRVNQX2dldF9zdGF0dXNfaW5mbyhUU19SRVNQICphKTsKKworLyogQ2FsbGVyIGxvc2VzIG93bmVyc2hpcCBvZiBQS0NTNyBhbmQgVFNfVFNUX0lORk8gb2JqZWN0cy4gKi8KK3ZvaWQgVFNfUkVTUF9zZXRfdHN0X2luZm8oVFNfUkVTUCAqYSwgUEtDUzcgKnA3LCBUU19UU1RfSU5GTyAqdHN0X2luZm8pOworUEtDUzcgKlRTX1JFU1BfZ2V0X3Rva2VuKFRTX1JFU1AgKmEpOworVFNfVFNUX0lORk8gKlRTX1JFU1BfZ2V0X3RzdF9pbmZvKFRTX1JFU1AgKmEpOworCitpbnQgVFNfVFNUX0lORk9fc2V0X3ZlcnNpb24oVFNfVFNUX0lORk8gKmEsIGxvbmcgdmVyc2lvbik7Citsb25nIFRTX1RTVF9JTkZPX2dldF92ZXJzaW9uKGNvbnN0IFRTX1RTVF9JTkZPICphKTsKKworaW50IFRTX1RTVF9JTkZPX3NldF9wb2xpY3lfaWQoVFNfVFNUX0lORk8gKmEsIEFTTjFfT0JKRUNUICpwb2xpY3lfaWQpOworQVNOMV9PQkpFQ1QgKlRTX1RTVF9JTkZPX2dldF9wb2xpY3lfaWQoVFNfVFNUX0lORk8gKmEpOworCitpbnQgVFNfVFNUX0lORk9fc2V0X21zZ19pbXByaW50KFRTX1RTVF9JTkZPICphLCBUU19NU0dfSU1QUklOVCAqbXNnX2ltcHJpbnQpOworVFNfTVNHX0lNUFJJTlQgKlRTX1RTVF9JTkZPX2dldF9tc2dfaW1wcmludChUU19UU1RfSU5GTyAqYSk7CisKK2ludCBUU19UU1RfSU5GT19zZXRfc2VyaWFsKFRTX1RTVF9JTkZPICphLCBjb25zdCBBU04xX0lOVEVHRVIgKnNlcmlhbCk7Citjb25zdCBBU04xX0lOVEVHRVIgKlRTX1RTVF9JTkZPX2dldF9zZXJpYWwoY29uc3QgVFNfVFNUX0lORk8gKmEpOworCitpbnQgVFNfVFNUX0lORk9fc2V0X3RpbWUoVFNfVFNUX0lORk8gKmEsIGNvbnN0IEFTTjFfR0VORVJBTElaRURUSU1FICpndGltZSk7Citjb25zdCBBU04xX0dFTkVSQUxJWkVEVElNRSAqVFNfVFNUX0lORk9fZ2V0X3RpbWUoY29uc3QgVFNfVFNUX0lORk8gKmEpOworCitpbnQgVFNfVFNUX0lORk9fc2V0X2FjY3VyYWN5KFRTX1RTVF9JTkZPICphLCBUU19BQ0NVUkFDWSAqYWNjdXJhY3kpOworVFNfQUNDVVJBQ1kgKlRTX1RTVF9JTkZPX2dldF9hY2N1cmFjeShUU19UU1RfSU5GTyAqYSk7CisKK2ludCBUU19BQ0NVUkFDWV9zZXRfc2Vjb25kcyhUU19BQ0NVUkFDWSAqYSwgY29uc3QgQVNOMV9JTlRFR0VSICpzZWNvbmRzKTsKK2NvbnN0IEFTTjFfSU5URUdFUiAqVFNfQUNDVVJBQ1lfZ2V0X3NlY29uZHMoY29uc3QgVFNfQUNDVVJBQ1kgKmEpOworCitpbnQgVFNfQUNDVVJBQ1lfc2V0X21pbGxpcyhUU19BQ0NVUkFDWSAqYSwgY29uc3QgQVNOMV9JTlRFR0VSICptaWxsaXMpOworY29uc3QgQVNOMV9JTlRFR0VSICpUU19BQ0NVUkFDWV9nZXRfbWlsbGlzKGNvbnN0IFRTX0FDQ1VSQUNZICphKTsKKworaW50IFRTX0FDQ1VSQUNZX3NldF9taWNyb3MoVFNfQUNDVVJBQ1kgKmEsIGNvbnN0IEFTTjFfSU5URUdFUiAqbWljcm9zKTsKK2NvbnN0IEFTTjFfSU5URUdFUiAqVFNfQUNDVVJBQ1lfZ2V0X21pY3Jvcyhjb25zdCBUU19BQ0NVUkFDWSAqYSk7CisKK2ludCBUU19UU1RfSU5GT19zZXRfb3JkZXJpbmcoVFNfVFNUX0lORk8gKmEsIGludCBvcmRlcmluZyk7CitpbnQgVFNfVFNUX0lORk9fZ2V0X29yZGVyaW5nKGNvbnN0IFRTX1RTVF9JTkZPICphKTsKKworaW50IFRTX1RTVF9JTkZPX3NldF9ub25jZShUU19UU1RfSU5GTyAqYSwgY29uc3QgQVNOMV9JTlRFR0VSICpub25jZSk7Citjb25zdCBBU04xX0lOVEVHRVIgKlRTX1RTVF9JTkZPX2dldF9ub25jZShjb25zdCBUU19UU1RfSU5GTyAqYSk7CisKK2ludCBUU19UU1RfSU5GT19zZXRfdHNhKFRTX1RTVF9JTkZPICphLCBHRU5FUkFMX05BTUUgKnRzYSk7CitHRU5FUkFMX05BTUUgKlRTX1RTVF9JTkZPX2dldF90c2EoVFNfVFNUX0lORk8gKmEpOworCitTVEFDS19PRihYNTA5X0VYVEVOU0lPTikgKlRTX1RTVF9JTkZPX2dldF9leHRzKFRTX1RTVF9JTkZPICphKTsKK3ZvaWQgVFNfVFNUX0lORk9fZXh0X2ZyZWUoVFNfVFNUX0lORk8gKmEpOworaW50IFRTX1RTVF9JTkZPX2dldF9leHRfY291bnQoVFNfVFNUX0lORk8gKmEpOworaW50IFRTX1RTVF9JTkZPX2dldF9leHRfYnlfTklEKFRTX1RTVF9JTkZPICphLCBpbnQgbmlkLCBpbnQgbGFzdHBvcyk7CitpbnQgVFNfVFNUX0lORk9fZ2V0X2V4dF9ieV9PQkooVFNfVFNUX0lORk8gKmEsIEFTTjFfT0JKRUNUICpvYmosIGludCBsYXN0cG9zKTsKK2ludCBUU19UU1RfSU5GT19nZXRfZXh0X2J5X2NyaXRpY2FsKFRTX1RTVF9JTkZPICphLCBpbnQgY3JpdCwgaW50IGxhc3Rwb3MpOworWDUwOV9FWFRFTlNJT04gKlRTX1RTVF9JTkZPX2dldF9leHQoVFNfVFNUX0lORk8gKmEsIGludCBsb2MpOworWDUwOV9FWFRFTlNJT04gKlRTX1RTVF9JTkZPX2RlbGV0ZV9leHQoVFNfVFNUX0lORk8gKmEsIGludCBsb2MpOworaW50IFRTX1RTVF9JTkZPX2FkZF9leHQoVFNfVFNUX0lORk8gKmEsIFg1MDlfRVhURU5TSU9OICpleCwgaW50IGxvYyk7Cit2b2lkICpUU19UU1RfSU5GT19nZXRfZXh0X2QyaShUU19UU1RfSU5GTyAqYSwgaW50IG5pZCwgaW50ICpjcml0LCBpbnQgKmlkeCk7CisKKy8qIERlY2xhcmF0aW9ucyByZWxhdGVkIHRvIHJlc3BvbnNlIGdlbmVyYXRpb24sIGRlZmluZWQgaW4gdHMvdHNfcmVzcF9zaWduLmMuICovCisKKy8qIE9wdGlvbmFsIGZsYWdzIGZvciByZXNwb25zZSBnZW5lcmF0aW9uLiAqLworCisvKiBEb24ndCBpbmNsdWRlIHRoZSBUU0EgbmFtZSBpbiByZXNwb25zZS4gKi8KKyNkZWZpbmUJVFNfVFNBX05BTUUJCTB4MDEKKworLyogU2V0IG9yZGVyaW5nIHRvIHRydWUgaW4gcmVzcG9uc2UuICovCisjZGVmaW5lCVRTX09SREVSSU5HCQkweDAyCisKKy8qCisgKiBJbmNsdWRlIHRoZSBzaWduZXIgY2VydGlmaWNhdGUgYW5kIHRoZSBvdGhlciBzcGVjaWZpZWQgY2VydGlmaWNhdGVzIGluCisgKiB0aGUgRVNTIHNpZ25pbmcgY2VydGlmaWNhdGUgYXR0cmlidXRlIGJlc2lkZSB0aGUgUEtDUzcgc2lnbmVkIGRhdGEuCisgKiBPbmx5IHRoZSBzaWduZXIgY2VydGlmaWNhdGVzIGlzIGluY2x1ZGVkIGJ5IGRlZmF1bHQuCisgKi8KKyNkZWZpbmUJVFNfRVNTX0NFUlRfSURfQ0hBSU4JMHgwNAorCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9uLiAqLworc3RydWN0IFRTX3Jlc3BfY3R4OworCisvKiBUaGlzIG11c3QgcmV0dXJuIGEgdW5pcXVlIG51bWJlciBsZXNzIHRoYW4gMTYwIGJpdHMgbG9uZy4gKi8KK3R5cGVkZWYgQVNOMV9JTlRFR0VSICooKlRTX3NlcmlhbF9jYikoc3RydWN0IFRTX3Jlc3BfY3R4ICosIHZvaWQgKik7CisKKy8qIFRoaXMgbXVzdCByZXR1cm4gdGhlIHNlY29uZHMgYW5kIG1pY3Jvc2Vjb25kcyBzaW5jZSBKYW4gMSwgMTk3MCBpbgorICAgdGhlIHNlYyBhbmQgdXNlYyB2YXJpYWJsZXMgYWxsb2NhdGVkIGJ5IHRoZSBjYWxsZXIuIAorICAgUmV0dXJuIG5vbi16ZXJvIGZvciBzdWNjZXNzIGFuZCB6ZXJvIGZvciBmYWlsdXJlLiAqLwordHlwZWRlZglpbnQgKCpUU190aW1lX2NiKShzdHJ1Y3QgVFNfcmVzcF9jdHggKiwgdm9pZCAqLCBsb25nICpzZWMsIGxvbmcgKnVzZWMpOworCisvKiBUaGlzIG11c3QgcHJvY2VzcyB0aGUgZ2l2ZW4gZXh0ZW5zaW9uLgorICogSXQgY2FuIG1vZGlmeSB0aGUgVFNfVFNUX0lORk8gb2JqZWN0IG9mIHRoZSBjb250ZXh0LgorICogUmV0dXJuIHZhbHVlczogITAgKHByb2Nlc3NlZCksIDAgKGVycm9yLCBpdCBtdXN0IHNldCB0aGUgCisgKiBzdGF0dXMgaW5mby9mYWlsdXJlIGluZm8gb2YgdGhlIHJlc3BvbnNlKS4KKyAqLwordHlwZWRlZglpbnQgKCpUU19leHRlbnNpb25fY2IpKHN0cnVjdCBUU19yZXNwX2N0eCAqLCBYNTA5X0VYVEVOU0lPTiAqLCB2b2lkICopOworCit0eXBlZGVmIHN0cnVjdCBUU19yZXNwX2N0eAorCXsKKwlYNTA5CQkqc2lnbmVyX2NlcnQ7CisJRVZQX1BLRVkJKnNpZ25lcl9rZXk7CisJU1RBQ0tfT0YoWDUwOSkJKmNlcnRzOwkvKiBDZXJ0cyB0byBpbmNsdWRlIGluIHNpZ25lZCBkYXRhLiAqLworCVNUQUNLX09GKEFTTjFfT0JKRUNUKQkqcG9saWNpZXM7CS8qIEFjY2VwdGFibGUgcG9saWNpZXMuICovCisJQVNOMV9PQkpFQ1QJKmRlZmF1bHRfcG9saWN5OyAvKiBJdCBtYXkgYXBwZWFyIGluIHBvbGljaWVzLCB0b28uICovCisJU1RBQ0tfT0YoRVZQX01EKQkqbWRzOwkvKiBBY2NlcHRhYmxlIG1lc3NhZ2UgZGlnZXN0cy4gKi8KKwlBU04xX0lOVEVHRVIJKnNlY29uZHM7CS8qIGFjY3VyYWN5LCAwIG1lYW5zIG5vdCBzcGVjaWZpZWQuICovCisJQVNOMV9JTlRFR0VSCSptaWxsaXM7CS8qIGFjY3VyYWN5LCAwIG1lYW5zIG5vdCBzcGVjaWZpZWQuICovCisJQVNOMV9JTlRFR0VSCSptaWNyb3M7CS8qIGFjY3VyYWN5LCAwIG1lYW5zIG5vdCBzcGVjaWZpZWQuICovCisJdW5zaWduZWQJY2xvY2tfcHJlY2lzaW9uX2RpZ2l0czsgLyogZnJhY3Rpb24gb2Ygc2Vjb25kcyBpbgorCQkJCQkJICAgdGltZSBzdGFtcCB0b2tlbi4gKi8KKwl1bnNpZ25lZAlmbGFnczsJCS8qIE9wdGlvbmFsIGluZm8sIHNlZSB2YWx1ZXMgYWJvdmUuICovCisKKwkvKiBDYWxsYmFjayBmdW5jdGlvbnMuICovCisJVFNfc2VyaWFsX2NiIHNlcmlhbF9jYjsKKwl2b2lkICpzZXJpYWxfY2JfZGF0YTsJLyogVXNlciBkYXRhIGZvciBzZXJpYWxfY2IuICovCisJCisJVFNfdGltZV9jYiB0aW1lX2NiOworCXZvaWQgKnRpbWVfY2JfZGF0YTsJLyogVXNlciBkYXRhIGZvciB0aW1lX2NiLiAqLworCQorCVRTX2V4dGVuc2lvbl9jYiBleHRlbnNpb25fY2I7CisJdm9pZCAqZXh0ZW5zaW9uX2NiX2RhdGE7CS8qIFVzZXIgZGF0YSBmb3IgZXh0ZW5zaW9uX2NiLiAqLworCisJLyogVGhlc2UgbWVtYmVycyBhcmUgdXNlZCBvbmx5IHdoaWxlIGNyZWF0aW5nIHRoZSByZXNwb25zZS4gKi8KKwlUU19SRVEJCSpyZXF1ZXN0OworCVRTX1JFU1AJCSpyZXNwb25zZTsKKwlUU19UU1RfSU5GTwkqdHN0X2luZm87CisJfSBUU19SRVNQX0NUWDsKKworREVDTEFSRV9TVEFDS19PRihFVlBfTUQpCitERUNMQVJFX0FTTjFfU0VUX09GKEVWUF9NRCkKKworLyogQ3JlYXRlcyBhIHJlc3BvbnNlIGNvbnRleHQgdGhhdCBjYW4gYmUgdXNlZCBmb3IgZ2VuZXJhdGluZyByZXNwb25zZXMuICovCitUU19SRVNQX0NUWCAqVFNfUkVTUF9DVFhfbmV3KHZvaWQpOwordm9pZCBUU19SRVNQX0NUWF9mcmVlKFRTX1JFU1BfQ1RYICpjdHgpOworCisvKiBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIHNldC4gKi8KK2ludCBUU19SRVNQX0NUWF9zZXRfc2lnbmVyX2NlcnQoVFNfUkVTUF9DVFggKmN0eCwgWDUwOSAqc2lnbmVyKTsKKworLyogVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBzZXQuICovCitpbnQgVFNfUkVTUF9DVFhfc2V0X3NpZ25lcl9rZXkoVFNfUkVTUF9DVFggKmN0eCwgRVZQX1BLRVkgKmtleSk7CisKKy8qIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgc2V0LiAqLworaW50IFRTX1JFU1BfQ1RYX3NldF9kZWZfcG9saWN5KFRTX1JFU1BfQ1RYICpjdHgsIEFTTjFfT0JKRUNUICpkZWZfcG9saWN5KTsKKworLyogTm8gYWRkaXRpb25hbCBjZXJ0cyBhcmUgaW5jbHVkZWQgaW4gdGhlIHJlc3BvbnNlIGJ5IGRlZmF1bHQuICovCitpbnQgVFNfUkVTUF9DVFhfc2V0X2NlcnRzKFRTX1JFU1BfQ1RYICpjdHgsIFNUQUNLX09GKFg1MDkpICpjZXJ0cyk7CisKKy8qIEFkZHMgYSBuZXcgYWNjZXB0YWJsZSBwb2xpY3ksIG9ubHkgdGhlIGRlZmF1bHQgcG9saWN5IAorICAgaXMgYWNjZXB0ZWQgYnkgZGVmYXVsdC4gKi8KK2ludCBUU19SRVNQX0NUWF9hZGRfcG9saWN5KFRTX1JFU1BfQ1RYICpjdHgsIEFTTjFfT0JKRUNUICpwb2xpY3kpOworCisvKiBBZGRzIGEgbmV3IGFjY2VwdGFibGUgbWVzc2FnZSBkaWdlc3QuIE5vdGUgdGhhdCBubyBtZXNzYWdlIGRpZ2VzdHMgCisgICBhcmUgYWNjZXB0ZWQgYnkgZGVmYXVsdC4gVGhlIG1kIGFyZ3VtZW50IGlzIHNoYXJlZCB3aXRoIHRoZSBjYWxsZXIuICovCitpbnQgVFNfUkVTUF9DVFhfYWRkX21kKFRTX1JFU1BfQ1RYICpjdHgsIGNvbnN0IEVWUF9NRCAqbWQpOworCisvKiBBY2N1cmFjeSBpcyBub3QgaW5jbHVkZWQgYnkgZGVmYXVsdC4gKi8KK2ludCBUU19SRVNQX0NUWF9zZXRfYWNjdXJhY3koVFNfUkVTUF9DVFggKmN0eCwKKwkJCSAgICAgaW50IHNlY3MsIGludCBtaWxsaXMsIGludCBtaWNyb3MpOworCisvKiBDbG9jayBwcmVjaXNpb24gZGlnaXRzLCBpLmUuIHRoZSBudW1iZXIgb2YgZGVjaW1hbCBkaWdpdHM6IAorICAgJzAnIG1lYW5zIHNlYywgJzMnIG1zZWMsICc2JyB1c2VjLCBhbmQgc28gb24uIERlZmF1bHQgaXMgMC4gKi8gCitpbnQgVFNfUkVTUF9DVFhfc2V0X2Nsb2NrX3ByZWNpc2lvbl9kaWdpdHMoVFNfUkVTUF9DVFggKmN0eCwKKwkJCQkJICAgdW5zaWduZWQgY2xvY2tfcHJlY2lzaW9uX2RpZ2l0cyk7CisvKiBBdCBtb3N0IHdlIGFjY2VwdCB1c2VjIHByZWNpc2lvbi4gKi8JCisjZGVmaW5lIFRTX01BWF9DTE9DS19QUkVDSVNJT05fRElHSVRTCTYKKworLyogTm8gZmxhZ3MgYXJlIHNldCBieSBkZWZhdWx0LiAqLwordm9pZCBUU19SRVNQX0NUWF9hZGRfZmxhZ3MoVFNfUkVTUF9DVFggKmN0eCwgaW50IGZsYWdzKTsKKworLyogRGVmYXVsdCBjYWxsYmFjayBhbHdheXMgcmV0dXJucyBhIGNvbnN0YW50LiAqLwordm9pZCBUU19SRVNQX0NUWF9zZXRfc2VyaWFsX2NiKFRTX1JFU1BfQ1RYICpjdHgsIFRTX3NlcmlhbF9jYiBjYiwgdm9pZCAqZGF0YSk7CisKKy8qIERlZmF1bHQgY2FsbGJhY2sgdXNlcyB0aGUgZ2V0dGltZW9mZGF5KCkgYW5kIGdtdGltZSgpIHN5c3RlbSBjYWxscy4gKi8KK3ZvaWQgVFNfUkVTUF9DVFhfc2V0X3RpbWVfY2IoVFNfUkVTUF9DVFggKmN0eCwgVFNfdGltZV9jYiBjYiwgdm9pZCAqZGF0YSk7CisKKy8qIERlZmF1bHQgY2FsbGJhY2sgcmVqZWN0cyBhbGwgZXh0ZW5zaW9ucy4gVGhlIGV4dGVuc2lvbiBjYWxsYmFjayBpcyBjYWxsZWQgCisgKiB3aGVuIHRoZSBUU19UU1RfSU5GTyBvYmplY3QgaXMgYWxyZWFkeSBzZXQgdXAgYW5kIG5vdCBzaWduZWQgeWV0LiAqLworLyogRklYTUU6IGV4dGVuc2lvbiBoYW5kbGluZyBpcyBub3QgdGVzdGVkIHlldC4gKi8KK3ZvaWQgVFNfUkVTUF9DVFhfc2V0X2V4dGVuc2lvbl9jYihUU19SRVNQX0NUWCAqY3R4LCAKKwkJCQkgIFRTX2V4dGVuc2lvbl9jYiBjYiwgdm9pZCAqZGF0YSk7CisKKy8qIFRoZSBmb2xsb3dpbmcgbWV0aG9kcyBjYW4gYmUgdXNlZCBpbiB0aGUgY2FsbGJhY2tzLiAqLworaW50IFRTX1JFU1BfQ1RYX3NldF9zdGF0dXNfaW5mbyhUU19SRVNQX0NUWCAqY3R4LCAKKwkJCQlpbnQgc3RhdHVzLCBjb25zdCBjaGFyICp0ZXh0KTsKKworLyogU2V0cyB0aGUgc3RhdHVzIGluZm8gb25seSBpZiBpdCBpcyBzdGlsbCBUU19TVEFUVVNfR1JBTlRFRC4gKi8KK2ludCBUU19SRVNQX0NUWF9zZXRfc3RhdHVzX2luZm9fY29uZChUU19SRVNQX0NUWCAqY3R4LCAKKwkJCQkgICAgIGludCBzdGF0dXMsIGNvbnN0IGNoYXIgKnRleHQpOworCitpbnQgVFNfUkVTUF9DVFhfYWRkX2ZhaWx1cmVfaW5mbyhUU19SRVNQX0NUWCAqY3R4LCBpbnQgZmFpbHVyZSk7CisKKy8qIFRoZSBnZXQgbWV0aG9kcyBiZWxvdyBjYW4gYmUgdXNlZCBpbiB0aGUgZXh0ZW5zaW9uIGNhbGxiYWNrLiAqLworVFNfUkVRICpUU19SRVNQX0NUWF9nZXRfcmVxdWVzdChUU19SRVNQX0NUWCAqY3R4KTsKKworVFNfVFNUX0lORk8gKlRTX1JFU1BfQ1RYX2dldF90c3RfaW5mbyhUU19SRVNQX0NUWCAqY3R4KTsKKworLyogCisgKiBDcmVhdGVzIHRoZSBzaWduZWQgVFNfVFNUX0lORk8gYW5kIHB1dHMgaXQgaW4gVFNfUkVTUC4KKyAqIEluIGNhc2Ugb2YgZXJyb3JzIGl0IHNldHMgdGhlIHN0YXR1cyBpbmZvIHByb3Blcmx5LgorICogUmV0dXJucyBOVUxMIG9ubHkgaW4gY2FzZSBvZiBtZW1vcnkgYWxsb2NhdGlvbi9mYXRhbCBlcnJvci4KKyAqLworVFNfUkVTUCAqVFNfUkVTUF9jcmVhdGVfcmVzcG9uc2UoVFNfUkVTUF9DVFggKmN0eCwgQklPICpyZXFfYmlvKTsKKworLyoKKyAqIERlY2xhcmF0aW9ucyByZWxhdGVkIHRvIHJlc3BvbnNlIHZlcmlmaWNhdGlvbiwKKyAqIHRoZXkgYXJlIGRlZmluZWQgaW4gdHMvdHNfcmVzcF92ZXJpZnkuYy4KKyAqLworCitpbnQgVFNfUkVTUF92ZXJpZnlfc2lnbmF0dXJlKFBLQ1M3ICp0b2tlbiwgU1RBQ0tfT0YoWDUwOSkgKmNlcnRzLAorCQkJICAgICBYNTA5X1NUT1JFICpzdG9yZSwgWDUwOSAqKnNpZ25lcl9vdXQpOworCisvKiBDb250ZXh0IHN0cnVjdHVyZSBmb3IgdGhlIGdlbmVyaWMgdmVyaWZ5IG1ldGhvZC4gKi8KKworLyogVmVyaWZ5IHRoZSBzaWduZXIncyBjZXJ0aWZpY2F0ZSBhbmQgdGhlIHNpZ25hdHVyZSBvZiB0aGUgcmVzcG9uc2UuICovCisjZGVmaW5lCVRTX1ZGWV9TSUdOQVRVUkUJKDF1IDw8IDApCisvKiBWZXJpZnkgdGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoZSByZXNwb25zZS4gKi8KKyNkZWZpbmUJVFNfVkZZX1ZFUlNJT04JCSgxdSA8PCAxKQorLyogVmVyaWZ5IGlmIHRoZSBwb2xpY3kgc3VwcGxpZWQgYnkgdGhlIHVzZXIgbWF0Y2hlcyB0aGUgcG9saWN5IG9mIHRoZSBUU0EuICovCisjZGVmaW5lCVRTX1ZGWV9QT0xJQ1kJCSgxdSA8PCAyKQorLyogVmVyaWZ5IHRoZSBtZXNzYWdlIGltcHJpbnQgcHJvdmlkZWQgYnkgdGhlIHVzZXIuIFRoaXMgZmxhZyBzaG91bGQgbm90IGJlCisgICBzcGVjaWZpZWQgd2l0aCBUU19WRllfREFUQS4gKi8KKyNkZWZpbmUJVFNfVkZZX0lNUFJJTlQJCSgxdSA8PCAzKQorLyogVmVyaWZ5IHRoZSBtZXNzYWdlIGltcHJpbnQgY29tcHV0ZWQgYnkgdGhlIHZlcmlmeSBtZXRob2QgZnJvbSB0aGUgdXNlcgorICAgcHJvdmlkZWQgZGF0YSBhbmQgdGhlIE1EIGFsZ29yaXRobSBvZiB0aGUgcmVzcG9uc2UuIFRoaXMgZmxhZyBzaG91bGQgbm90IGJlCisgICBzcGVjaWZpZWQgd2l0aCBUU19WRllfSU1QUklOVC4gKi8KKyNkZWZpbmUJVFNfVkZZX0RBVEEJCSgxdSA8PCA0KQorLyogVmVyaWZ5IHRoZSBub25jZSB2YWx1ZS4gKi8KKyNkZWZpbmUJVFNfVkZZX05PTkNFCQkoMXUgPDwgNSkKKy8qIFZlcmlmeSBpZiB0aGUgVFNBIG5hbWUgZmllbGQgbWF0Y2hlcyB0aGUgc2lnbmVyIGNlcnRpZmljYXRlLiAqLworI2RlZmluZQlUU19WRllfU0lHTkVSCQkoMXUgPDwgNikKKy8qIFZlcmlmeSBpZiB0aGUgVFNBIG5hbWUgZmllbGQgZXF1YWxzIHRvIHRoZSB1c2VyIHByb3ZpZGVkIG5hbWUuICovCisjZGVmaW5lCVRTX1ZGWV9UU0FfTkFNRQkJKDF1IDw8IDcpCisKKy8qIFlvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgY29udmVuaWVuY2UgY29uc3RhbnRzLiAqLworI2RlZmluZQlUU19WRllfQUxMX0lNUFJJTlQJKFRTX1ZGWV9TSUdOQVRVUkUJXAorCQkJCSB8IFRTX1ZGWV9WRVJTSU9OCVwKKwkJCQkgfCBUU19WRllfUE9MSUNZCVwKKwkJCQkgfCBUU19WRllfSU1QUklOVAlcCisJCQkJIHwgVFNfVkZZX05PTkNFCQlcCisJCQkJIHwgVFNfVkZZX1NJR05FUglcCisJCQkJIHwgVFNfVkZZX1RTQV9OQU1FKQorI2RlZmluZQlUU19WRllfQUxMX0RBVEEJCShUU19WRllfU0lHTkFUVVJFCVwKKwkJCQkgfCBUU19WRllfVkVSU0lPTglcCisJCQkJIHwgVFNfVkZZX1BPTElDWQlcCisJCQkJIHwgVFNfVkZZX0RBVEEJCVwKKwkJCQkgfCBUU19WRllfTk9OQ0UJCVwKKwkJCQkgfCBUU19WRllfU0lHTkVSCVwKKwkJCQkgfCBUU19WRllfVFNBX05BTUUpCisKK3R5cGVkZWYgc3RydWN0IFRTX3ZlcmlmeV9jdHgKKwl7CisJLyogU2V0IHRoaXMgdG8gdGhlIHVuaW9uIG9mIFRTX1ZGWV8uLi4gZmxhZ3MgeW91IHdhbnQgdG8gY2Fycnkgb3V0LiAqLworCXVuc2lnbmVkCWZsYWdzOworCisJLyogTXVzdCBiZSBzZXQgb25seSB3aXRoIFRTX1ZGWV9TSUdOQVRVUkUuIGNlcnRzIGlzIG9wdGlvbmFsLiAqLworCVg1MDlfU1RPUkUJKnN0b3JlOworCVNUQUNLX09GKFg1MDkpCSpjZXJ0czsKKworCS8qIE11c3QgYmUgc2V0IG9ubHkgd2l0aCBUU19WRllfUE9MSUNZLiAqLworCUFTTjFfT0JKRUNUCSpwb2xpY3k7CisKKwkvKiBNdXN0IGJlIHNldCBvbmx5IHdpdGggVFNfVkZZX0lNUFJJTlQuIElmIG1kX2FsZyBpcyBOVUxMLCAKKwkgICB0aGUgYWxnb3JpdGhtIGZyb20gdGhlIHJlc3BvbnNlIGlzIHVzZWQuICovCisJWDUwOV9BTEdPUgkqbWRfYWxnOworCXVuc2lnbmVkIGNoYXIJKmltcHJpbnQ7CisJdW5zaWduZWQJaW1wcmludF9sZW47CisKKwkvKiBNdXN0IGJlIHNldCBvbmx5IHdpdGggVFNfVkZZX0RBVEEuICovCisJQklPCQkqZGF0YTsKKworCS8qIE11c3QgYmUgc2V0IG9ubHkgd2l0aCBUU19WRllfVFNBX05BTUUuICovCisJQVNOMV9JTlRFR0VSCSpub25jZTsKKworCS8qIE11c3QgYmUgc2V0IG9ubHkgd2l0aCBUU19WRllfVFNBX05BTUUuICovCisJR0VORVJBTF9OQU1FCSp0c2FfbmFtZTsKKwl9IFRTX1ZFUklGWV9DVFg7CisKK2ludCBUU19SRVNQX3ZlcmlmeV9yZXNwb25zZShUU19WRVJJRllfQ1RYICpjdHgsIFRTX1JFU1AgKnJlc3BvbnNlKTsKK2ludCBUU19SRVNQX3ZlcmlmeV90b2tlbihUU19WRVJJRllfQ1RYICpjdHgsIFBLQ1M3ICp0b2tlbik7CisKKy8qCisgKiBEZWNsYXJhdGlvbnMgcmVsYXRlZCB0byByZXNwb25zZSB2ZXJpZmljYXRpb24gY29udGV4dCwKKyAqIHRoZXkgYXJlIGRlZmluZWQgaW4gdHMvdHNfdmVyaWZ5X2N0eC5jLgorICovCisKKy8qIFNldCBhbGwgZmllbGRzIHRvIHplcm8uICovCitUU19WRVJJRllfQ1RYICpUU19WRVJJRllfQ1RYX25ldyh2b2lkKTsKK3ZvaWQgVFNfVkVSSUZZX0NUWF9pbml0KFRTX1ZFUklGWV9DVFggKmN0eCk7Cit2b2lkIFRTX1ZFUklGWV9DVFhfZnJlZShUU19WRVJJRllfQ1RYICpjdHgpOwordm9pZCBUU19WRVJJRllfQ1RYX2NsZWFudXAoVFNfVkVSSUZZX0NUWCAqY3R4KTsKKworLyogCisgKiBJZiBjdHggaXMgTlVMTCwgaXQgYWxsb2NhdGVzIGFuZCByZXR1cm5zIGEgbmV3IG9iamVjdCwgb3RoZXJ3aXNlCisgKiBpdCByZXR1cm5zIGN0eC4gSXQgaW5pdGlhbGlzZXMgYWxsIHRoZSBtZW1iZXJzIGFzIGZvbGxvd3M6CisgKiBmbGFncyA9IFRTX1ZGWV9BTExfSU1QUklOVCAmIH4oVFNfVkZZX1RTQV9OQU1FIHwgVFNfVkZZX1NJR05BVFVSRSkKKyAqIGNlcnRzID0gTlVMTAorICogc3RvcmUgPSBOVUxMCisgKiBwb2xpY3kgPSBwb2xpY3kgZnJvbSB0aGUgcmVxdWVzdCBvciBOVUxMIGlmIGFic2VudCAoaW4gdGhpcyBjYXNlCisgKglUU19WRllfUE9MSUNZIGlzIGNsZWFyZWQgZnJvbSBmbGFncyBhcyB3ZWxsKQorICogbWRfYWxnID0gTUQgYWxnb3JpdGhtIGZyb20gcmVxdWVzdAorICogaW1wcmludCwgaW1wcmludF9sZW4gPSBpbXByaW50IGZyb20gcmVxdWVzdAorICogZGF0YSA9IE5VTEwKKyAqIG5vbmNlLCBub25jZV9sZW4gPSBub25jZSBmcm9tIHRoZSByZXF1ZXN0IG9yIE5VTEwgaWYgYWJzZW50IChpbiB0aGlzIGNhc2UKKyAqIAlUU19WRllfTk9OQ0UgaXMgY2xlYXJlZCBmcm9tIGZsYWdzIGFzIHdlbGwpCisgKiB0c2FfbmFtZSA9IE5VTEwKKyAqIEltcG9ydGFudDogYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCBUU19WRllfU0lHTkFUVVJFIHNob3VsZCBiZSBhZGRlZCEKKyAqLworVFNfVkVSSUZZX0NUWCAqVFNfUkVRX3RvX1RTX1ZFUklGWV9DVFgoVFNfUkVRICpyZXEsIFRTX1ZFUklGWV9DVFggKmN0eCk7CisKKy8qIEZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBmb3IgVFNfUkVTUCBkZWZpbmVkIGluIHRzL3RzX3Jlc3BfcHJpbnQuYyAqLworCitpbnQgVFNfUkVTUF9wcmludF9iaW8oQklPICpiaW8sIFRTX1JFU1AgKmEpOworaW50IFRTX1NUQVRVU19JTkZPX3ByaW50X2JpbyhCSU8gKmJpbywgVFNfU1RBVFVTX0lORk8gKmEpOworaW50IFRTX1RTVF9JTkZPX3ByaW50X2JpbyhCSU8gKmJpbywgVFNfVFNUX0lORk8gKmEpOworCisvKiBDb21tb24gdXRpbGl0eSBmdW5jdGlvbnMgZGVmaW5lZCBpbiB0cy90c19saWIuYyAqLworCitpbnQgVFNfQVNOMV9JTlRFR0VSX3ByaW50X2JpbyhCSU8gKmJpbywgY29uc3QgQVNOMV9JTlRFR0VSICpudW0pOworaW50IFRTX09CSl9wcmludF9iaW8oQklPICpiaW8sIGNvbnN0IEFTTjFfT0JKRUNUICpvYmopOworaW50IFRTX2V4dF9wcmludF9iaW8oQklPICpiaW8sIGNvbnN0IFNUQUNLX09GKFg1MDlfRVhURU5TSU9OKSAqZXh0ZW5zaW9ucyk7CitpbnQgVFNfWDUwOV9BTEdPUl9wcmludF9iaW8oQklPICpiaW8sIGNvbnN0IFg1MDlfQUxHT1IgKmFsZyk7CitpbnQgVFNfTVNHX0lNUFJJTlRfcHJpbnRfYmlvKEJJTyAqYmlvLCBUU19NU0dfSU1QUklOVCAqbXNnKTsKKworLyogRnVuY3Rpb24gZGVjbGFyYXRpb25zIGZvciBoYW5kbGluZyBjb25maWd1cmF0aW9uIG9wdGlvbnMsCisgICBkZWZpbmVkIGluIHRzL3RzX2NvbmYuYyAqLworCitYNTA5ICpUU19DT05GX2xvYWRfY2VydChjb25zdCBjaGFyICpmaWxlKTsKK1NUQUNLX09GKFg1MDkpICpUU19DT05GX2xvYWRfY2VydHMoY29uc3QgY2hhciAqZmlsZSk7CitFVlBfUEtFWSAqVFNfQ09ORl9sb2FkX2tleShjb25zdCBjaGFyICpmaWxlLCBjb25zdCBjaGFyICpwYXNzKTsKK2NvbnN0IGNoYXIgKlRTX0NPTkZfZ2V0X3RzYV9zZWN0aW9uKENPTkYgKmNvbmYsIGNvbnN0IGNoYXIgKnNlY3Rpb24pOworaW50IFRTX0NPTkZfc2V0X3NlcmlhbChDT05GICpjb25mLCBjb25zdCBjaGFyICpzZWN0aW9uLCBUU19zZXJpYWxfY2IgY2IsCisJCSAgICAgICBUU19SRVNQX0NUWCAqY3R4KTsKK2ludCBUU19DT05GX3NldF9jcnlwdG9fZGV2aWNlKENPTkYgKmNvbmYsIGNvbnN0IGNoYXIgKnNlY3Rpb24sCisJCQkgICAgICBjb25zdCBjaGFyICpkZXZpY2UpOworaW50IFRTX0NPTkZfc2V0X2RlZmF1bHRfZW5naW5lKGNvbnN0IGNoYXIgKm5hbWUpOworaW50IFRTX0NPTkZfc2V0X3NpZ25lcl9jZXJ0KENPTkYgKmNvbmYsIGNvbnN0IGNoYXIgKnNlY3Rpb24sCisJCQkgICAgY29uc3QgY2hhciAqY2VydCwgVFNfUkVTUF9DVFggKmN0eCk7CitpbnQgVFNfQ09ORl9zZXRfY2VydHMoQ09ORiAqY29uZiwgY29uc3QgY2hhciAqc2VjdGlvbiwgY29uc3QgY2hhciAqY2VydHMsCisJCSAgICAgIFRTX1JFU1BfQ1RYICpjdHgpOworaW50IFRTX0NPTkZfc2V0X3NpZ25lcl9rZXkoQ09ORiAqY29uZiwgY29uc3QgY2hhciAqc2VjdGlvbiwKKwkJCSAgIGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqcGFzcywgVFNfUkVTUF9DVFggKmN0eCk7CitpbnQgVFNfQ09ORl9zZXRfZGVmX3BvbGljeShDT05GICpjb25mLCBjb25zdCBjaGFyICpzZWN0aW9uLAorCQkJICAgY29uc3QgY2hhciAqcG9saWN5LCBUU19SRVNQX0NUWCAqY3R4KTsKK2ludCBUU19DT05GX3NldF9wb2xpY2llcyhDT05GICpjb25mLCBjb25zdCBjaGFyICpzZWN0aW9uLCBUU19SRVNQX0NUWCAqY3R4KTsKK2ludCBUU19DT05GX3NldF9kaWdlc3RzKENPTkYgKmNvbmYsIGNvbnN0IGNoYXIgKnNlY3Rpb24sIFRTX1JFU1BfQ1RYICpjdHgpOworaW50IFRTX0NPTkZfc2V0X2FjY3VyYWN5KENPTkYgKmNvbmYsIGNvbnN0IGNoYXIgKnNlY3Rpb24sIFRTX1JFU1BfQ1RYICpjdHgpOworaW50IFRTX0NPTkZfc2V0X2Nsb2NrX3ByZWNpc2lvbl9kaWdpdHMoQ09ORiAqY29uZiwgY29uc3QgY2hhciAqc2VjdGlvbiwKKwkJCQkgICAgICAgVFNfUkVTUF9DVFggKmN0eCk7CitpbnQgVFNfQ09ORl9zZXRfb3JkZXJpbmcoQ09ORiAqY29uZiwgY29uc3QgY2hhciAqc2VjdGlvbiwgVFNfUkVTUF9DVFggKmN0eCk7CitpbnQgVFNfQ09ORl9zZXRfdHNhX25hbWUoQ09ORiAqY29uZiwgY29uc3QgY2hhciAqc2VjdGlvbiwgVFNfUkVTUF9DVFggKmN0eCk7CitpbnQgVFNfQ09ORl9zZXRfZXNzX2NlcnRfaWRfY2hhaW4oQ09ORiAqY29uZiwgY29uc3QgY2hhciAqc2VjdGlvbiwKKwkJCQkgIFRTX1JFU1BfQ1RYICpjdHgpOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogQkVHSU4gRVJST1IgQ09ERVMgKi8KKy8qIFRoZSBmb2xsb3dpbmcgbGluZXMgYXJlIGF1dG8gZ2VuZXJhdGVkIGJ5IHRoZSBzY3JpcHQgbWtlcnIucGwuIEFueSBjaGFuZ2VzCisgKiBtYWRlIGFmdGVyIHRoaXMgcG9pbnQgbWF5IGJlIG92ZXJ3cml0dGVuIHdoZW4gdGhlIHNjcmlwdCBpcyBuZXh0IHJ1bi4KKyAqLwordm9pZCBFUlJfbG9hZF9UU19zdHJpbmdzKHZvaWQpOworCisvKiBFcnJvciBjb2RlcyBmb3IgdGhlIFRTIGZ1bmN0aW9ucy4gKi8KKworLyogRnVuY3Rpb24gY29kZXMuICovCisjZGVmaW5lIFRTX0ZfRDJJX1RTX1JFU1AJCQkJIDE0NworI2RlZmluZSBUU19GX0RFRl9TRVJJQUxfQ0IJCQkJIDExMAorI2RlZmluZSBUU19GX0RFRl9USU1FX0NCCQkJCSAxMTEKKyNkZWZpbmUgVFNfRl9FU1NfQUREX1NJR05JTkdfQ0VSVAkJCSAxMTIKKyNkZWZpbmUgVFNfRl9FU1NfQ0VSVF9JRF9ORVdfSU5JVAkJCSAxMTMKKyNkZWZpbmUgVFNfRl9FU1NfU0lHTklOR19DRVJUX05FV19JTklUCQkJIDExNAorI2RlZmluZSBUU19GX0lOVF9UU19SRVNQX1ZFUklGWV9UT0tFTgkJCSAxNDkKKyNkZWZpbmUgVFNfRl9QS0NTN19UT19UU19UU1RfSU5GTwkJCSAxNDgKKyNkZWZpbmUgVFNfRl9UU19BQ0NVUkFDWV9TRVRfTUlDUk9TCQkJIDExNQorI2RlZmluZSBUU19GX1RTX0FDQ1VSQUNZX1NFVF9NSUxMSVMJCQkgMTE2CisjZGVmaW5lIFRTX0ZfVFNfQUNDVVJBQ1lfU0VUX1NFQ09ORFMJCQkgMTE3CisjZGVmaW5lIFRTX0ZfVFNfQ0hFQ0tfSU1QUklOVFMJCQkJIDEwMAorI2RlZmluZSBUU19GX1RTX0NIRUNLX05PTkNFUwkJCQkgMTAxCisjZGVmaW5lIFRTX0ZfVFNfQ0hFQ0tfUE9MSUNZCQkJCSAxMDIKKyNkZWZpbmUgVFNfRl9UU19DSEVDS19TSUdOSU5HX0NFUlRTCQkJIDEwMworI2RlZmluZSBUU19GX1RTX0NIRUNLX1NUQVRVU19JTkZPCQkJIDEwNAorI2RlZmluZSBUU19GX1RTX0NPTVBVVEVfSU1QUklOVAkJCQkgMTQ1CisjZGVmaW5lIFRTX0ZfVFNfQ09ORl9TRVRfREVGQVVMVF9FTkdJTkUJCQkgMTQ2CisjZGVmaW5lIFRTX0ZfVFNfR0VUX1NUQVRVU19URVhUCQkJCSAxMDUKKyNkZWZpbmUgVFNfRl9UU19NU0dfSU1QUklOVF9TRVRfQUxHTwkJCSAxMTgKKyNkZWZpbmUgVFNfRl9UU19SRVFfU0VUX01TR19JTVBSSU5UCQkJIDExOQorI2RlZmluZSBUU19GX1RTX1JFUV9TRVRfTk9OQ0UJCQkJIDEyMAorI2RlZmluZSBUU19GX1RTX1JFUV9TRVRfUE9MSUNZX0lECQkJIDEyMQorI2RlZmluZSBUU19GX1RTX1JFU1BfQ1JFQVRFX1JFU1BPTlNFCQkJIDEyMgorI2RlZmluZSBUU19GX1RTX1JFU1BfQ1JFQVRFX1RTVF9JTkZPCQkJIDEyMworI2RlZmluZSBUU19GX1RTX1JFU1BfQ1RYX0FERF9GQUlMVVJFX0lORk8JCSAxMjQKKyNkZWZpbmUgVFNfRl9UU19SRVNQX0NUWF9BRERfTUQJCQkJIDEyNQorI2RlZmluZSBUU19GX1RTX1JFU1BfQ1RYX0FERF9QT0xJQ1kJCQkgMTI2CisjZGVmaW5lIFRTX0ZfVFNfUkVTUF9DVFhfTkVXCQkJCSAxMjcKKyNkZWZpbmUgVFNfRl9UU19SRVNQX0NUWF9TRVRfQUNDVVJBQ1kJCQkgMTI4CisjZGVmaW5lIFRTX0ZfVFNfUkVTUF9DVFhfU0VUX0NFUlRTCQkJIDEyOQorI2RlZmluZSBUU19GX1RTX1JFU1BfQ1RYX1NFVF9ERUZfUE9MSUNZCQkJIDEzMAorI2RlZmluZSBUU19GX1RTX1JFU1BfQ1RYX1NFVF9TSUdORVJfQ0VSVAkJIDEzMQorI2RlZmluZSBUU19GX1RTX1JFU1BfQ1RYX1NFVF9TVEFUVVNfSU5GTwkJIDEzMgorI2RlZmluZSBUU19GX1RTX1JFU1BfR0VUX1BPTElDWQkJCQkgMTMzCisjZGVmaW5lIFRTX0ZfVFNfUkVTUF9TRVRfR0VOVElNRV9XSVRIX1BSRUNJU0lPTgkJIDEzNAorI2RlZmluZSBUU19GX1RTX1JFU1BfU0VUX1NUQVRVU19JTkZPCQkJIDEzNQorI2RlZmluZSBUU19GX1RTX1JFU1BfU0VUX1RTVF9JTkZPCQkJIDE1MAorI2RlZmluZSBUU19GX1RTX1JFU1BfU0lHTgkJCQkgMTM2CisjZGVmaW5lIFRTX0ZfVFNfUkVTUF9WRVJJRllfU0lHTkFUVVJFCQkJIDEwNgorI2RlZmluZSBUU19GX1RTX1JFU1BfVkVSSUZZX1RPS0VOCQkJIDEwNworI2RlZmluZSBUU19GX1RTX1RTVF9JTkZPX1NFVF9BQ0NVUkFDWQkJCSAxMzcKKyNkZWZpbmUgVFNfRl9UU19UU1RfSU5GT19TRVRfTVNHX0lNUFJJTlQJCSAxMzgKKyNkZWZpbmUgVFNfRl9UU19UU1RfSU5GT19TRVRfTk9OQ0UJCQkgMTM5CisjZGVmaW5lIFRTX0ZfVFNfVFNUX0lORk9fU0VUX1BPTElDWV9JRAkJCSAxNDAKKyNkZWZpbmUgVFNfRl9UU19UU1RfSU5GT19TRVRfU0VSSUFMCQkJIDE0MQorI2RlZmluZSBUU19GX1RTX1RTVF9JTkZPX1NFVF9USU1FCQkJIDE0MgorI2RlZmluZSBUU19GX1RTX1RTVF9JTkZPX1NFVF9UU0EJCQkgMTQzCisjZGVmaW5lIFRTX0ZfVFNfVkVSSUZZCQkJCQkgMTA4CisjZGVmaW5lIFRTX0ZfVFNfVkVSSUZZX0NFUlQJCQkJIDEwOQorI2RlZmluZSBUU19GX1RTX1ZFUklGWV9DVFhfTkVXCQkJCSAxNDQKKworLyogUmVhc29uIGNvZGVzLiAqLworI2RlZmluZSBUU19SX0JBRF9QS0NTN19UWVBFCQkJCSAxMzIKKyNkZWZpbmUgVFNfUl9CQURfVFlQRQkJCQkJIDEzMworI2RlZmluZSBUU19SX0NFUlRJRklDQVRFX1ZFUklGWV9FUlJPUgkJCSAxMDAKKyNkZWZpbmUgVFNfUl9DT1VMRF9OT1RfU0VUX0VOR0lORQkJCSAxMjcKKyNkZWZpbmUgVFNfUl9DT1VMRF9OT1RfU0VUX1RJTUUJCQkJIDExNQorI2RlZmluZSBUU19SX0QySV9UU19SRVNQX0lOVF9GQUlMRUQJCQkgMTI4CisjZGVmaW5lIFRTX1JfREVUQUNIRURfQ09OVEVOVAkJCQkgMTM0CisjZGVmaW5lIFRTX1JfRVNTX0FERF9TSUdOSU5HX0NFUlRfRVJST1IJCQkgMTE2CisjZGVmaW5lIFRTX1JfRVNTX1NJR05JTkdfQ0VSVElGSUNBVEVfRVJST1IJCSAxMDEKKyNkZWZpbmUgVFNfUl9JTlZBTElEX05VTExfUE9JTlRFUgkJCSAxMDIKKyNkZWZpbmUgVFNfUl9JTlZBTElEX1NJR05FUl9DRVJUSUZJQ0FURV9QVVJQT1NFCQkgMTE3CisjZGVmaW5lIFRTX1JfTUVTU0FHRV9JTVBSSU5UX01JU01BVENICQkJIDEwMworI2RlZmluZSBUU19SX05PTkNFX01JU01BVENICQkJCSAxMDQKKyNkZWZpbmUgVFNfUl9OT05DRV9OT1RfUkVUVVJORUQJCQkJIDEwNQorI2RlZmluZSBUU19SX05PX0NPTlRFTlQJCQkJCSAxMDYKKyNkZWZpbmUgVFNfUl9OT19USU1FX1NUQU1QX1RPS0VOCQkJIDEwNworI2RlZmluZSBUU19SX1BLQ1M3X0FERF9TSUdOQVRVUkVfRVJST1IJCQkgMTE4CisjZGVmaW5lIFRTX1JfUEtDUzdfQUREX1NJR05FRF9BVFRSX0VSUk9SCQkgMTE5CisjZGVmaW5lIFRTX1JfUEtDUzdfVE9fVFNfVFNUX0lORk9fRkFJTEVECQkgMTI5CisjZGVmaW5lIFRTX1JfUE9MSUNZX01JU01BVENICQkJCSAxMDgKKyNkZWZpbmUgVFNfUl9QUklWQVRFX0tFWV9ET0VTX05PVF9NQVRDSF9DRVJUSUZJQ0FURQkgMTIwCisjZGVmaW5lIFRTX1JfUkVTUE9OU0VfU0VUVVBfRVJST1IJCQkgMTIxCisjZGVmaW5lIFRTX1JfU0lHTkFUVVJFX0ZBSUxVUkUJCQkJIDEwOQorI2RlZmluZSBUU19SX1RIRVJFX01VU1RfQkVfT05FX1NJR05FUgkJCSAxMTAKKyNkZWZpbmUgVFNfUl9USU1FX1NZU0NBTExfRVJST1IJCQkJIDEyMgorI2RlZmluZSBUU19SX1RPS0VOX05PVF9QUkVTRU5UCQkJCSAxMzAKKyNkZWZpbmUgVFNfUl9UT0tFTl9QUkVTRU5UCQkJCSAxMzEKKyNkZWZpbmUgVFNfUl9UU0FfTkFNRV9NSVNNQVRDSAkJCQkgMTExCisjZGVmaW5lIFRTX1JfVFNBX1VOVFJVU1RFRAkJCQkgMTEyCisjZGVmaW5lIFRTX1JfVFNUX0lORk9fU0VUVVBfRVJST1IJCQkgMTIzCisjZGVmaW5lIFRTX1JfVFNfREFUQVNJR04JCQkJIDEyNAorI2RlZmluZSBUU19SX1VOQUNDRVBUQUJMRV9QT0xJQ1kJCQkgMTI1CisjZGVmaW5lIFRTX1JfVU5TVVBQT1JURURfTURfQUxHT1JJVEhNCQkJIDEyNgorI2RlZmluZSBUU19SX1VOU1VQUE9SVEVEX1ZFUlNJT04JCQkgMTEzCisjZGVmaW5lIFRTX1JfV1JPTkdfQ09OVEVOVF9UWVBFCQkJCSAxMTQKKworI2lmZGVmICBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnNzbC90eHRfZGIuaCBiL2luY2x1ZGUvb3BlbnNzbC90eHRfZGIuaAppbmRleCAzMDdlMWJhLi42YWJlNDM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL29wZW5zc2wvdHh0X2RiLmgKKysrIGIvaW5jbHVkZS9vcGVuc3NsL3R4dF9kYi5oCkBAIC03NywxNiArNzcsMTkgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKK3R5cGVkZWYgT1BFTlNTTF9TVFJJTkcgKk9QRU5TU0xfUFNUUklORzsKK0RFQ0xBUkVfU1BFQ0lBTF9TVEFDS19PRihPUEVOU1NMX1BTVFJJTkcsIE9QRU5TU0xfU1RSSU5HKQorCiB0eXBlZGVmIHN0cnVjdCB0eHRfZGJfc3QKIAl7CiAJaW50IG51bV9maWVsZHM7Ci0JU1RBQ0sgLyogY2hhciAqKiAqLyAqZGF0YTsKLQlMSEFTSCAqKmluZGV4OwotCWludCAoKipxdWFsKShjaGFyICoqKTsKKwlTVEFDS19PRihPUEVOU1NMX1BTVFJJTkcpICpkYXRhOworCUxIQVNIX09GKE9QRU5TU0xfU1RSSU5HKSAqKmluZGV4OworCWludCAoKipxdWFsKShPUEVOU1NMX1NUUklORyAqKTsKIAlsb25nIGVycm9yOwogCWxvbmcgYXJnMTsKIAlsb25nIGFyZzI7Ci0JY2hhciAqKmFyZ19yb3c7CisJT1BFTlNTTF9TVFJJTkcgKmFyZ19yb3c7CiAJfSBUWFRfREI7CiAKICNpZm5kZWYgT1BFTlNTTF9OT19CSU8KQEAgLTk2LDExICs5OSwxMSBAQAogVFhUX0RCICpUWFRfREJfcmVhZChjaGFyICppbiwgaW50IG51bSk7CiBsb25nIFRYVF9EQl93cml0ZShjaGFyICpvdXQsIFRYVF9EQiAqZGIpOwogI2VuZGlmCi1pbnQgVFhUX0RCX2NyZWF0ZV9pbmRleChUWFRfREIgKmRiLGludCBmaWVsZCxpbnQgKCpxdWFsKShjaGFyICoqKSwKLQkJTEhBU0hfSEFTSF9GTl9UWVBFIGhhc2gsIExIQVNIX0NPTVBfRk5fVFlQRSBjbXApOworaW50IFRYVF9EQl9jcmVhdGVfaW5kZXgoVFhUX0RCICpkYixpbnQgZmllbGQsaW50ICgqcXVhbCkoT1BFTlNTTF9TVFJJTkcgKiksCisJCQlMSEFTSF9IQVNIX0ZOX1RZUEUgaGFzaCwgTEhBU0hfQ09NUF9GTl9UWVBFIGNtcCk7CiB2b2lkIFRYVF9EQl9mcmVlKFRYVF9EQiAqZGIpOwotY2hhciAqKlRYVF9EQl9nZXRfYnlfaW5kZXgoVFhUX0RCICpkYiwgaW50IGlkeCwgY2hhciAqKnZhbHVlKTsKLWludCBUWFRfREJfaW5zZXJ0KFRYVF9EQiAqZGIsY2hhciAqKnZhbHVlKTsKK09QRU5TU0xfU1RSSU5HICpUWFRfREJfZ2V0X2J5X2luZGV4KFRYVF9EQiAqZGIsIGludCBpZHgsIE9QRU5TU0xfU1RSSU5HICp2YWx1ZSk7CitpbnQgVFhUX0RCX2luc2VydChUWFRfREIgKmRiLCBPUEVOU1NMX1NUUklORyAqdmFsdWUpOwogCiAjaWZkZWYgIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW5zc2wvdWkuaCBiL2luY2x1ZGUvb3BlbnNzbC91aS5oCmluZGV4IDAxODI5NjQuLjJiMWNmYTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvb3BlbnNzbC91aS5oCisrKyBiL2luY2x1ZGUvb3BlbnNzbC91aS5oCkBAIC0yODcsOCArMjg3LDggQEAKIC8qIFRoZSBVSV9TVFJJTkcgdHlwZSBpcyB0aGUgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucyBhbGwgdGhlIG5lZWRlZCBpbmZvCiAgICBhYm91dCBhIHN0cmluZyBvciBhIHByb21wdCwgaW5jbHVkaW5nIHRlc3QgZGF0YSBmb3IgYSB2ZXJpZmljYXRpb24gcHJvbXB0LgogKi8KLURFQ0xBUkVfU1RBQ0tfT0YoVUlfU1RSSU5HKQogdHlwZWRlZiBzdHJ1Y3QgdWlfc3RyaW5nX3N0IFVJX1NUUklORzsKK0RFQ0xBUkVfU1RBQ0tfT0YoVUlfU1RSSU5HKQogCiAvKiBUaGUgZGlmZmVyZW50IHR5cGVzIG9mIHN0cmluZ3MgdGhhdCBhcmUgY3VycmVudGx5IHN1cHBvcnRlZC4KICAgIFRoaXMgaXMgb25seSBuZWVkZWQgYnkgbWV0aG9kIGF1dGhvcnMuICovCkBAIC0zMTAsMTEgKzMxMCwxMyBAQAogaW50IFVJX21ldGhvZF9zZXRfZmx1c2hlcihVSV9NRVRIT0QgKm1ldGhvZCwgaW50ICgqZmx1c2hlcikoVUkgKnVpKSk7CiBpbnQgVUlfbWV0aG9kX3NldF9yZWFkZXIoVUlfTUVUSE9EICptZXRob2QsIGludCAoKnJlYWRlcikoVUkgKnVpLCBVSV9TVFJJTkcgKnVpcykpOwogaW50IFVJX21ldGhvZF9zZXRfY2xvc2VyKFVJX01FVEhPRCAqbWV0aG9kLCBpbnQgKCpjbG9zZXIpKFVJICp1aSkpOworaW50IFVJX21ldGhvZF9zZXRfcHJvbXB0X2NvbnN0cnVjdG9yKFVJX01FVEhPRCAqbWV0aG9kLCBjaGFyICooKnByb21wdF9jb25zdHJ1Y3RvcikoVUkqIHVpLCBjb25zdCBjaGFyKiBvYmplY3RfZGVzYywgY29uc3QgY2hhciogb2JqZWN0X25hbWUpKTsKIGludCAoKlVJX21ldGhvZF9nZXRfb3BlbmVyKFVJX01FVEhPRCAqbWV0aG9kKSkoVUkqKTsKIGludCAoKlVJX21ldGhvZF9nZXRfd3JpdGVyKFVJX01FVEhPRCAqbWV0aG9kKSkoVUkqLFVJX1NUUklORyopOwogaW50ICgqVUlfbWV0aG9kX2dldF9mbHVzaGVyKFVJX01FVEhPRCAqbWV0aG9kKSkoVUkqKTsKIGludCAoKlVJX21ldGhvZF9nZXRfcmVhZGVyKFVJX01FVEhPRCAqbWV0aG9kKSkoVUkqLFVJX1NUUklORyopOwogaW50ICgqVUlfbWV0aG9kX2dldF9jbG9zZXIoVUlfTUVUSE9EICptZXRob2QpKShVSSopOworY2hhciogKCpVSV9tZXRob2RfZ2V0X3Byb21wdF9jb25zdHJ1Y3RvcihVSV9NRVRIT0QgKm1ldGhvZCkpKFVJKiwgY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKTsKIAogLyogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIGhlbHBlcnMgZm9yIG1ldGhvZCB3cml0ZXJzIHRvIGFjY2VzcyByZWxldmFudAogICAgZGF0YSBmcm9tIGEgVUlfU1RSSU5HLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCBiL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKaW5kZXggODk1OGUzNC4uNjA0ZjRmYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAorKysgYi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCkBAIC0xNTcsMTIgKzE1NywxMiBAQAogCUFTTjFfVElNRSAqbm90QWZ0ZXI7CiAJfSBYNTA5X1ZBTDsKIAotdHlwZWRlZiBzdHJ1Y3QgWDUwOV9wdWJrZXlfc3QKK3N0cnVjdCBYNTA5X3B1YmtleV9zdAogCXsKIAlYNTA5X0FMR09SICphbGdvcjsKIAlBU04xX0JJVF9TVFJJTkcgKnB1YmxpY19rZXk7CiAJRVZQX1BLRVkgKnBrZXk7Ci0JfSBYNTA5X1BVQktFWTsKKwl9OwogCiB0eXBlZGVmIHN0cnVjdCBYNTA5X3NpZ19zdAogCXsKQEAgLTE5MSw3ICsxOTEsOSBAQAogI2Vsc2UKIAljaGFyICpieXRlczsKICNlbmRpZgotCXVuc2lnbmVkIGxvbmcgaGFzaDsgLyogS2VlcCB0aGUgaGFzaCBhcm91bmQgZm9yIGxvb2t1cHMgKi8KKy8qCXVuc2lnbmVkIGxvbmcgaGFzaDsgS2VlcCB0aGUgaGFzaCBhcm91bmQgZm9yIGxvb2t1cHMgKi8KKwl1bnNpZ25lZCBjaGFyICpjYW5vbl9lbmM7CisJaW50IGNhbm9uX2VuY2xlbjsKIAl9IC8qIFg1MDlfTkFNRSAqLzsKIAogREVDTEFSRV9TVEFDS19PRihYNTA5X05BTUUpCkBAIC0yOTAsOCArMjkyLDExIEBACiAJdW5zaWduZWQgbG9uZyBleF94a3VzYWdlOwogCXVuc2lnbmVkIGxvbmcgZXhfbnNjZXJ0OwogCUFTTjFfT0NURVRfU1RSSU5HICpza2lkOwotCXN0cnVjdCBBVVRIT1JJVFlfS0VZSURfc3QgKmFraWQ7CisJQVVUSE9SSVRZX0tFWUlEICpha2lkOwogCVg1MDlfUE9MSUNZX0NBQ0hFICpwb2xpY3lfY2FjaGU7CisJU1RBQ0tfT0YoRElTVF9QT0lOVCkgKmNybGRwOworCVNUQUNLX09GKEdFTkVSQUxfTkFNRSkgKmFsdG5hbWU7CisJTkFNRV9DT05TVFJBSU5UUyAqbmM7CiAjaWZuZGVmIE9QRU5TU0xfTk9fUkZDMzc3OQogCVNUQUNLX09GKElQQWRkcmVzc0ZhbWlseSkgKnJmYzM3NzlfYWRkcjsKIAlzdHJ1Y3QgQVNJZGVudGlmaWVyc19zdCAqcmZjMzc3OV9hc2lkOwpAQCAtMzM0LDEwICszMzksMTEgQEAKICNkZWZpbmUgWDUwOV9UUlVTVF9PQkpFQ1RfU0lHTgk1CiAjZGVmaW5lIFg1MDlfVFJVU1RfT0NTUF9TSUdOCTYKICNkZWZpbmUgWDUwOV9UUlVTVF9PQ1NQX1JFUVVFU1QJNworI2RlZmluZSBYNTA5X1RSVVNUX1RTQQkJOAogCiAvKiBLZWVwIHRoZXNlIHVwIHRvIGRhdGUhICovCiAjZGVmaW5lIFg1MDlfVFJVU1RfTUlOCQkxCi0jZGVmaW5lIFg1MDlfVFJVU1RfTUFYCQk3CisjZGVmaW5lIFg1MDlfVFJVU1RfTUFYCQk4CiAKIAogLyogdHJ1c3RfZmxhZ3MgdmFsdWVzICovCkBAIC00MjQsMTMgKzQzMCwxNyBAQAogCQkJWE5fRkxBR19GTl9MTiB8IFwKIAkJCVhOX0ZMQUdfRk5fQUxJR04pCiAKLXR5cGVkZWYgc3RydWN0IFg1MDlfcmV2b2tlZF9zdAorc3RydWN0IHg1MDlfcmV2b2tlZF9zdAogCXsKIAlBU04xX0lOVEVHRVIgKnNlcmlhbE51bWJlcjsKIAlBU04xX1RJTUUgKnJldm9jYXRpb25EYXRlOwogCVNUQUNLX09GKFg1MDlfRVhURU5TSU9OKSAvKiBvcHRpb25hbCAqLyAqZXh0ZW5zaW9uczsKKwkvKiBTZXQgdXAgaWYgaW5kaXJlY3QgQ1JMICovCisJU1RBQ0tfT0YoR0VORVJBTF9OQU1FKSAqaXNzdWVyOworCS8qIFJldm9jYXRpb24gcmVhc29uICovCisJaW50IHJlYXNvbjsKIAlpbnQgc2VxdWVuY2U7IC8qIGxvYWQgc2VxdWVuY2UgKi8KLQl9IFg1MDlfUkVWT0tFRDsKKwl9OwogCiBERUNMQVJFX1NUQUNLX09GKFg1MDlfUkVWT0tFRCkKIERFQ0xBUkVfQVNOMV9TRVRfT0YoWDUwOV9SRVZPS0VEKQpAQCAtNDU0LDYgKzQ2NCwyMiBAQAogCVg1MDlfQUxHT1IgKnNpZ19hbGc7CiAJQVNOMV9CSVRfU1RSSU5HICpzaWduYXR1cmU7CiAJaW50IHJlZmVyZW5jZXM7CisJaW50IGZsYWdzOworCS8qIENvcGllcyBvZiB2YXJpb3VzIGV4dGVuc2lvbnMgKi8KKwlBVVRIT1JJVFlfS0VZSUQgKmFraWQ7CisJSVNTVUlOR19ESVNUX1BPSU5UICppZHA7CisJLyogQ29udmVuaWVudCBicmVha2Rvd24gb2YgSURQICovCisJaW50IGlkcF9mbGFnczsKKwlpbnQgaWRwX3JlYXNvbnM7CisJLyogQ1JMIGFuZCBiYXNlIENSTCBudW1iZXJzIGZvciBkZWx0YSBwcm9jZXNzaW5nICovCisJQVNOMV9JTlRFR0VSICpjcmxfbnVtYmVyOworCUFTTjFfSU5URUdFUiAqYmFzZV9jcmxfbnVtYmVyOworI2lmbmRlZiBPUEVOU1NMX05PX1NIQQorCXVuc2lnbmVkIGNoYXIgc2hhMV9oYXNoW1NIQV9ESUdFU1RfTEVOR1RIXTsKKyNlbmRpZgorCVNUQUNLX09GKEdFTkVSQUxfTkFNRVMpICppc3N1ZXJzOworCWNvbnN0IFg1MDlfQ1JMX01FVEhPRCAqbWV0aDsKKwl2b2lkICptZXRoX2RhdGE7CiAJfSAvKiBYNTA5X0NSTCAqLzsKIAogREVDTEFSRV9TVEFDS19PRihYNTA5X0NSTCkKQEAgLTU1MiwxOCArNTc4LDE5IEBACiAKIC8qIFBLQ1MjOCBwcml2YXRlIGtleSBpbmZvIHN0cnVjdHVyZSAqLwogCi10eXBlZGVmIHN0cnVjdCBwa2NzOF9wcml2X2tleV9pbmZvX3N0CitzdHJ1Y3QgcGtjczhfcHJpdl9rZXlfaW5mb19zdAogICAgICAgICB7CiAgICAgICAgIGludCBicm9rZW47ICAgICAvKiBGbGFnIGZvciB2YXJpb3VzIGJyb2tlbiBmb3JtYXRzICovCiAjZGVmaW5lIFBLQ1M4X09LCQkwCiAjZGVmaW5lIFBLQ1M4X05PX09DVEVUCQkxCiAjZGVmaW5lIFBLQ1M4X0VNQkVEREVEX1BBUkFNCTIKICNkZWZpbmUgUEtDUzhfTlNfREIJCTMKKyNkZWZpbmUgUEtDUzhfTkVHX1BSSVZLRVkJNAogICAgICAgICBBU04xX0lOVEVHRVIgKnZlcnNpb247CiAgICAgICAgIFg1MDlfQUxHT1IgKnBrZXlhbGc7CiAgICAgICAgIEFTTjFfVFlQRSAqcGtleTsgLyogU2hvdWxkIGJlIE9DVEVUIFNUUklORyBidXQgc29tZSBhcmUgYnJva2VuICovCiAgICAgICAgIFNUQUNLX09GKFg1MDlfQVRUUklCVVRFKSAqYXR0cmlidXRlczsKLSAgICAgICAgfSBQS0NTOF9QUklWX0tFWV9JTkZPOworICAgICAgICB9OwogCiAjaWZkZWYgIF9fY3BsdXNwbHVzCiB9CkBAIC01NzYsMTUxICs2MDMsNiBAQAogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAotI2lmZGVmIFNTTEVBWV9NQUNST1MKLSNkZWZpbmUgWDUwOV92ZXJpZnkoYSxyKSBBU04xX3ZlcmlmeSgoaW50ICgqKSgpKWkyZF9YNTA5X0NJTkYsYS0+c2lnX2FsZyxcCi0JYS0+c2lnbmF0dXJlLChjaGFyICopYS0+Y2VydF9pbmZvLHIpCi0jZGVmaW5lIFg1MDlfUkVRX3ZlcmlmeShhLHIpIEFTTjFfdmVyaWZ5KChpbnQgKCopKCkpaTJkX1g1MDlfUkVRX0lORk8sIFwKLQlhLT5zaWdfYWxnLGEtPnNpZ25hdHVyZSwoY2hhciAqKWEtPnJlcV9pbmZvLHIpCi0jZGVmaW5lIFg1MDlfQ1JMX3ZlcmlmeShhLHIpIEFTTjFfdmVyaWZ5KChpbnQgKCopKCkpaTJkX1g1MDlfQ1JMX0lORk8sIFwKLQlhLT5zaWdfYWxnLCBhLT5zaWduYXR1cmUsKGNoYXIgKilhLT5jcmwscikKLQotI2RlZmluZSBYNTA5X3NpZ24oeCxwa2V5LG1kKSBcCi0JQVNOMV9zaWduKChpbnQgKCopKCkpaTJkX1g1MDlfQ0lORiwgeC0+Y2VydF9pbmZvLT5zaWduYXR1cmUsIFwKLQkJeC0+c2lnX2FsZywgeC0+c2lnbmF0dXJlLCAoY2hhciAqKXgtPmNlcnRfaW5mbyxwa2V5LG1kKQotI2RlZmluZSBYNTA5X1JFUV9zaWduKHgscGtleSxtZCkgXAotCUFTTjFfc2lnbigoaW50ICgqKSgpKWkyZF9YNTA5X1JFUV9JTkZPLHgtPnNpZ19hbGcsIE5VTEwsIFwKLQkJeC0+c2lnbmF0dXJlLCAoY2hhciAqKXgtPnJlcV9pbmZvLHBrZXksbWQpCi0jZGVmaW5lIFg1MDlfQ1JMX3NpZ24oeCxwa2V5LG1kKSBcCi0JQVNOMV9zaWduKChpbnQgKCopKCkpaTJkX1g1MDlfQ1JMX0lORk8seC0+Y3JsLT5zaWdfYWxnLHgtPnNpZ19hbGcsIFwKLQkJeC0+c2lnbmF0dXJlLCAoY2hhciAqKXgtPmNybCxwa2V5LG1kKQotI2RlZmluZSBORVRTQ0FQRV9TUEtJX3NpZ24oeCxwa2V5LG1kKSBcCi0JQVNOMV9zaWduKChpbnQgKCopKCkpaTJkX05FVFNDQVBFX1NQS0FDLCB4LT5zaWdfYWxnb3IsTlVMTCwgXAotCQl4LT5zaWduYXR1cmUsIChjaGFyICopeC0+c3BrYWMscGtleSxtZCkKLQotI2RlZmluZSBYNTA5X2R1cCh4NTA5KSAoWDUwOSAqKUFTTjFfZHVwKChpbnQgKCopKCkpaTJkX1g1MDksIFwKLQkJKGNoYXIgKigqKSgpKWQyaV9YNTA5LChjaGFyICopeDUwOSkKLSNkZWZpbmUgWDUwOV9BVFRSSUJVVEVfZHVwKHhhKSAoWDUwOV9BVFRSSUJVVEUgKilBU04xX2R1cChcCi0JCShpbnQgKCopKCkpaTJkX1g1MDlfQVRUUklCVVRFLCBcCi0JCShjaGFyICooKikoKSlkMmlfWDUwOV9BVFRSSUJVVEUsKGNoYXIgKil4YSkKLSNkZWZpbmUgWDUwOV9FWFRFTlNJT05fZHVwKGV4KSAoWDUwOV9FWFRFTlNJT04gKilBU04xX2R1cCggXAotCQkoaW50ICgqKSgpKWkyZF9YNTA5X0VYVEVOU0lPTiwgXAotCQkoY2hhciAqKCopKCkpZDJpX1g1MDlfRVhURU5TSU9OLChjaGFyICopZXgpCi0jZGVmaW5lIGQyaV9YNTA5X2ZwKGZwLHg1MDkpIChYNTA5ICopQVNOMV9kMmlfZnAoKGNoYXIgKigqKSgpKVg1MDlfbmV3LCBcCi0JCShjaGFyICooKikoKSlkMmlfWDUwOSwgKGZwKSwodW5zaWduZWQgY2hhciAqKikoeDUwOSkpCi0jZGVmaW5lIGkyZF9YNTA5X2ZwKGZwLHg1MDkpIEFTTjFfaTJkX2ZwKGkyZF9YNTA5LGZwLCh1bnNpZ25lZCBjaGFyICopeDUwOSkKLSNkZWZpbmUgZDJpX1g1MDlfYmlvKGJwLHg1MDkpIChYNTA5ICopQVNOMV9kMmlfYmlvKChjaGFyICooKikoKSlYNTA5X25ldywgXAotCQkoY2hhciAqKCopKCkpZDJpX1g1MDksIChicCksKHVuc2lnbmVkIGNoYXIgKiopKHg1MDkpKQotI2RlZmluZSBpMmRfWDUwOV9iaW8oYnAseDUwOSkgQVNOMV9pMmRfYmlvKGkyZF9YNTA5LGJwLCh1bnNpZ25lZCBjaGFyICopeDUwOSkKLQotI2RlZmluZSBYNTA5X0NSTF9kdXAoY3JsKSAoWDUwOV9DUkwgKilBU04xX2R1cCgoaW50ICgqKSgpKWkyZF9YNTA5X0NSTCwgXAotCQkoY2hhciAqKCopKCkpZDJpX1g1MDlfQ1JMLChjaGFyICopY3JsKQotI2RlZmluZSBkMmlfWDUwOV9DUkxfZnAoZnAsY3JsKSAoWDUwOV9DUkwgKilBU04xX2QyaV9mcCgoY2hhciAqKCopKCkpIFwKLQkJWDUwOV9DUkxfbmV3LChjaGFyICooKikoKSlkMmlfWDUwOV9DUkwsIChmcCksXAotCQkodW5zaWduZWQgY2hhciAqKikoY3JsKSkKLSNkZWZpbmUgaTJkX1g1MDlfQ1JMX2ZwKGZwLGNybCkgQVNOMV9pMmRfZnAoaTJkX1g1MDlfQ1JMLGZwLFwKLQkJKHVuc2lnbmVkIGNoYXIgKiljcmwpCi0jZGVmaW5lIGQyaV9YNTA5X0NSTF9iaW8oYnAsY3JsKSAoWDUwOV9DUkwgKilBU04xX2QyaV9iaW8oKGNoYXIgKigqKSgpKSBcCi0JCVg1MDlfQ1JMX25ldywoY2hhciAqKCopKCkpZDJpX1g1MDlfQ1JMLCAoYnApLFwKLQkJKHVuc2lnbmVkIGNoYXIgKiopKGNybCkpCi0jZGVmaW5lIGkyZF9YNTA5X0NSTF9iaW8oYnAsY3JsKSBBU04xX2kyZF9iaW8oaTJkX1g1MDlfQ1JMLGJwLFwKLQkJKHVuc2lnbmVkIGNoYXIgKiljcmwpCi0KLSNkZWZpbmUgUEtDUzdfZHVwKHA3KSAoUEtDUzcgKilBU04xX2R1cCgoaW50ICgqKSgpKWkyZF9QS0NTNywgXAotCQkoY2hhciAqKCopKCkpZDJpX1BLQ1M3LChjaGFyICopcDcpCi0jZGVmaW5lIGQyaV9QS0NTN19mcChmcCxwNykgKFBLQ1M3ICopQVNOMV9kMmlfZnAoKGNoYXIgKigqKSgpKSBcCi0JCVBLQ1M3X25ldywoY2hhciAqKCopKCkpZDJpX1BLQ1M3LCAoZnApLFwKLQkJKHVuc2lnbmVkIGNoYXIgKiopKHA3KSkKLSNkZWZpbmUgaTJkX1BLQ1M3X2ZwKGZwLHA3KSBBU04xX2kyZF9mcChpMmRfUEtDUzcsZnAsXAotCQkodW5zaWduZWQgY2hhciAqKXA3KQotI2RlZmluZSBkMmlfUEtDUzdfYmlvKGJwLHA3KSAoUEtDUzcgKilBU04xX2QyaV9iaW8oKGNoYXIgKigqKSgpKSBcCi0JCVBLQ1M3X25ldywoY2hhciAqKCopKCkpZDJpX1BLQ1M3LCAoYnApLFwKLQkJKHVuc2lnbmVkIGNoYXIgKiopKHA3KSkKLSNkZWZpbmUgaTJkX1BLQ1M3X2JpbyhicCxwNykgQVNOMV9pMmRfYmlvKGkyZF9QS0NTNyxicCxcCi0JCSh1bnNpZ25lZCBjaGFyICopcDcpCi0KLSNkZWZpbmUgWDUwOV9SRVFfZHVwKHJlcSkgKFg1MDlfUkVRICopQVNOMV9kdXAoKGludCAoKikoKSlpMmRfWDUwOV9SRVEsIFwKLQkJKGNoYXIgKigqKSgpKWQyaV9YNTA5X1JFUSwoY2hhciAqKXJlcSkKLSNkZWZpbmUgZDJpX1g1MDlfUkVRX2ZwKGZwLHJlcSkgKFg1MDlfUkVRICopQVNOMV9kMmlfZnAoKGNoYXIgKigqKSgpKVwKLQkJWDUwOV9SRVFfbmV3LCAoY2hhciAqKCopKCkpZDJpX1g1MDlfUkVRLCAoZnApLFwKLQkJKHVuc2lnbmVkIGNoYXIgKiopKHJlcSkpCi0jZGVmaW5lIGkyZF9YNTA5X1JFUV9mcChmcCxyZXEpIEFTTjFfaTJkX2ZwKGkyZF9YNTA5X1JFUSxmcCxcCi0JCSh1bnNpZ25lZCBjaGFyICopcmVxKQotI2RlZmluZSBkMmlfWDUwOV9SRVFfYmlvKGJwLHJlcSkgKFg1MDlfUkVRICopQVNOMV9kMmlfYmlvKChjaGFyICooKikoKSlcCi0JCVg1MDlfUkVRX25ldywgKGNoYXIgKigqKSgpKWQyaV9YNTA5X1JFUSwgKGJwKSxcCi0JCSh1bnNpZ25lZCBjaGFyICoqKShyZXEpKQotI2RlZmluZSBpMmRfWDUwOV9SRVFfYmlvKGJwLHJlcSkgQVNOMV9pMmRfYmlvKGkyZF9YNTA5X1JFUSxicCxcCi0JCSh1bnNpZ25lZCBjaGFyICopcmVxKQotCi0jZGVmaW5lIFJTQVB1YmxpY0tleV9kdXAocnNhKSAoUlNBICopQVNOMV9kdXAoKGludCAoKikoKSlpMmRfUlNBUHVibGljS2V5LCBcCi0JCShjaGFyICooKikoKSlkMmlfUlNBUHVibGljS2V5LChjaGFyICopcnNhKQotI2RlZmluZSBSU0FQcml2YXRlS2V5X2R1cChyc2EpIChSU0EgKilBU04xX2R1cCgoaW50ICgqKSgpKWkyZF9SU0FQcml2YXRlS2V5LCBcCi0JCShjaGFyICooKikoKSlkMmlfUlNBUHJpdmF0ZUtleSwoY2hhciAqKXJzYSkKLQotI2RlZmluZSBkMmlfUlNBUHJpdmF0ZUtleV9mcChmcCxyc2EpIChSU0EgKilBU04xX2QyaV9mcCgoY2hhciAqKCopKCkpXAotCQlSU0FfbmV3LChjaGFyICooKikoKSlkMmlfUlNBUHJpdmF0ZUtleSwgKGZwKSwgXAotCQkodW5zaWduZWQgY2hhciAqKikocnNhKSkKLSNkZWZpbmUgaTJkX1JTQVByaXZhdGVLZXlfZnAoZnAscnNhKSBBU04xX2kyZF9mcChpMmRfUlNBUHJpdmF0ZUtleSxmcCwgXAotCQkodW5zaWduZWQgY2hhciAqKXJzYSkKLSNkZWZpbmUgZDJpX1JTQVByaXZhdGVLZXlfYmlvKGJwLHJzYSkgKFJTQSAqKUFTTjFfZDJpX2JpbygoY2hhciAqKCopKCkpXAotCQlSU0FfbmV3LChjaGFyICooKikoKSlkMmlfUlNBUHJpdmF0ZUtleSwgKGJwKSwgXAotCQkodW5zaWduZWQgY2hhciAqKikocnNhKSkKLSNkZWZpbmUgaTJkX1JTQVByaXZhdGVLZXlfYmlvKGJwLHJzYSkgQVNOMV9pMmRfYmlvKGkyZF9SU0FQcml2YXRlS2V5LGJwLCBcCi0JCSh1bnNpZ25lZCBjaGFyICopcnNhKQotCi0jZGVmaW5lIGQyaV9SU0FQdWJsaWNLZXlfZnAoZnAscnNhKSAoUlNBICopQVNOMV9kMmlfZnAoKGNoYXIgKigqKSgpKVwKLQkJUlNBX25ldywoY2hhciAqKCopKCkpZDJpX1JTQVB1YmxpY0tleSwgKGZwKSwgXAotCQkodW5zaWduZWQgY2hhciAqKikocnNhKSkKLSNkZWZpbmUgaTJkX1JTQVB1YmxpY0tleV9mcChmcCxyc2EpIEFTTjFfaTJkX2ZwKGkyZF9SU0FQdWJsaWNLZXksZnAsIFwKLQkJKHVuc2lnbmVkIGNoYXIgKilyc2EpCi0jZGVmaW5lIGQyaV9SU0FQdWJsaWNLZXlfYmlvKGJwLHJzYSkgKFJTQSAqKUFTTjFfZDJpX2JpbygoY2hhciAqKCopKCkpXAotCQlSU0FfbmV3LChjaGFyICooKikoKSlkMmlfUlNBUHVibGljS2V5LCAoYnApLCBcCi0JCSh1bnNpZ25lZCBjaGFyICoqKShyc2EpKQotI2RlZmluZSBpMmRfUlNBUHVibGljS2V5X2JpbyhicCxyc2EpIEFTTjFfaTJkX2JpbyhpMmRfUlNBUHVibGljS2V5LGJwLCBcCi0JCSh1bnNpZ25lZCBjaGFyICopcnNhKQotCi0jZGVmaW5lIGQyaV9EU0FQcml2YXRlS2V5X2ZwKGZwLGRzYSkgKERTQSAqKUFTTjFfZDJpX2ZwKChjaGFyICooKikoKSlcCi0JCURTQV9uZXcsKGNoYXIgKigqKSgpKWQyaV9EU0FQcml2YXRlS2V5LCAoZnApLCBcCi0JCSh1bnNpZ25lZCBjaGFyICoqKShkc2EpKQotI2RlZmluZSBpMmRfRFNBUHJpdmF0ZUtleV9mcChmcCxkc2EpIEFTTjFfaTJkX2ZwKGkyZF9EU0FQcml2YXRlS2V5LGZwLCBcCi0JCSh1bnNpZ25lZCBjaGFyICopZHNhKQotI2RlZmluZSBkMmlfRFNBUHJpdmF0ZUtleV9iaW8oYnAsZHNhKSAoRFNBICopQVNOMV9kMmlfYmlvKChjaGFyICooKikoKSlcCi0JCURTQV9uZXcsKGNoYXIgKigqKSgpKWQyaV9EU0FQcml2YXRlS2V5LCAoYnApLCBcCi0JCSh1bnNpZ25lZCBjaGFyICoqKShkc2EpKQotI2RlZmluZSBpMmRfRFNBUHJpdmF0ZUtleV9iaW8oYnAsZHNhKSBBU04xX2kyZF9iaW8oaTJkX0RTQVByaXZhdGVLZXksYnAsIFwKLQkJKHVuc2lnbmVkIGNoYXIgKilkc2EpCi0KLSNkZWZpbmUgZDJpX0VDUHJpdmF0ZUtleV9mcChmcCxlY2RzYSkgKEVDX0tFWSAqKUFTTjFfZDJpX2ZwKChjaGFyICooKikoKSlcCi0JCUVDX0tFWV9uZXcsKGNoYXIgKigqKSgpKWQyaV9FQ1ByaXZhdGVLZXksIChmcCksIFwKLQkJKHVuc2lnbmVkIGNoYXIgKiopKGVjZHNhKSkKLSNkZWZpbmUgaTJkX0VDUHJpdmF0ZUtleV9mcChmcCxlY2RzYSkgQVNOMV9pMmRfZnAoaTJkX0VDUHJpdmF0ZUtleSxmcCwgXAotCQkodW5zaWduZWQgY2hhciAqKWVjZHNhKQotI2RlZmluZSBkMmlfRUNQcml2YXRlS2V5X2JpbyhicCxlY2RzYSkgKEVDX0tFWSAqKUFTTjFfZDJpX2JpbygoY2hhciAqKCopKCkpXAotCQlFQ19LRVlfbmV3LChjaGFyICooKikoKSlkMmlfRUNQcml2YXRlS2V5LCAoYnApLCBcCi0JCSh1bnNpZ25lZCBjaGFyICoqKShlY2RzYSkpCi0jZGVmaW5lIGkyZF9FQ1ByaXZhdGVLZXlfYmlvKGJwLGVjZHNhKSBBU04xX2kyZF9iaW8oaTJkX0VDUHJpdmF0ZUtleSxicCwgXAotCQkodW5zaWduZWQgY2hhciAqKWVjZHNhKQotCi0jZGVmaW5lIFg1MDlfQUxHT1JfZHVwKHhuKSAoWDUwOV9BTEdPUiAqKUFTTjFfZHVwKChpbnQgKCopKCkpaTJkX1g1MDlfQUxHT1IsXAotCQkoY2hhciAqKCopKCkpZDJpX1g1MDlfQUxHT1IsKGNoYXIgKil4bikKLQotI2RlZmluZSBYNTA5X05BTUVfZHVwKHhuKSAoWDUwOV9OQU1FICopQVNOMV9kdXAoKGludCAoKikoKSlpMmRfWDUwOV9OQU1FLCBcCi0JCShjaGFyICooKikoKSlkMmlfWDUwOV9OQU1FLChjaGFyICopeG4pCi0jZGVmaW5lIFg1MDlfTkFNRV9FTlRSWV9kdXAobmUpIChYNTA5X05BTUVfRU5UUlkgKilBU04xX2R1cCggXAotCQkoaW50ICgqKSgpKWkyZF9YNTA5X05BTUVfRU5UUlksIFwKLQkJKGNoYXIgKigqKSgpKWQyaV9YNTA5X05BTUVfRU5UUlksXAotCQkoY2hhciAqKW5lKQotCi0jZGVmaW5lIFg1MDlfZGlnZXN0KGRhdGEsdHlwZSxtZCxsZW4pIFwKLQlBU04xX2RpZ2VzdCgoaW50ICgqKSgpKWkyZF9YNTA5LHR5cGUsKGNoYXIgKilkYXRhLG1kLGxlbikKLSNkZWZpbmUgWDUwOV9OQU1FX2RpZ2VzdChkYXRhLHR5cGUsbWQsbGVuKSBcCi0JQVNOMV9kaWdlc3QoKGludCAoKikoKSlpMmRfWDUwOV9OQU1FLHR5cGUsKGNoYXIgKilkYXRhLG1kLGxlbikKLSNpZm5kZWYgUEtDUzdfSVNTVUVSX0FORF9TRVJJQUxfZGlnZXN0Ci0jZGVmaW5lIFBLQ1M3X0lTU1VFUl9BTkRfU0VSSUFMX2RpZ2VzdChkYXRhLHR5cGUsbWQsbGVuKSBcCi0JQVNOMV9kaWdlc3QoKGludCAoKikoKSlpMmRfUEtDUzdfSVNTVUVSX0FORF9TRVJJQUwsdHlwZSxcCi0JCShjaGFyICopZGF0YSxtZCxsZW4pCi0jZW5kaWYKLSNlbmRpZgotCiAjZGVmaW5lIFg1MDlfRVhUX1BBQ0tfVU5LTk9XTgkxCiAjZGVmaW5lIFg1MDlfRVhUX1BBQ0tfU1RSSU5HCTIKIApAQCAtNzQxLDYgKzYyMywxOCBAQAogI2RlZmluZQkJWDUwOV9DUkxfZ2V0X2lzc3Vlcih4KSAoKHgpLT5jcmwtPmlzc3VlcikKICNkZWZpbmUJCVg1MDlfQ1JMX2dldF9SRVZPS0VEKHgpICgoeCktPmNybC0+cmV2b2tlZCkKIAordm9pZCBYNTA5X0NSTF9zZXRfZGVmYXVsdF9tZXRob2QoY29uc3QgWDUwOV9DUkxfTUVUSE9EICptZXRoKTsKK1g1MDlfQ1JMX01FVEhPRCAqWDUwOV9DUkxfTUVUSE9EX25ldygKKwlpbnQgKCpjcmxfaW5pdCkoWDUwOV9DUkwgKmNybCksCisJaW50ICgqY3JsX2ZyZWUpKFg1MDlfQ1JMICpjcmwpLAorCWludCAoKmNybF9sb29rdXApKFg1MDlfQ1JMICpjcmwsIFg1MDlfUkVWT0tFRCAqKnJldCwKKwkJCQlBU04xX0lOVEVHRVIgKnNlciwgWDUwOV9OQU1FICppc3N1ZXIpLAorCWludCAoKmNybF92ZXJpZnkpKFg1MDlfQ1JMICpjcmwsIEVWUF9QS0VZICpwaykpOwordm9pZCBYNTA5X0NSTF9NRVRIT0RfZnJlZShYNTA5X0NSTF9NRVRIT0QgKm0pOworCit2b2lkIFg1MDlfQ1JMX3NldF9tZXRoX2RhdGEoWDUwOV9DUkwgKmNybCwgdm9pZCAqZGF0KTsKK3ZvaWQgKlg1MDlfQ1JMX2dldF9tZXRoX2RhdGEoWDUwOV9DUkwgKmNybCk7CisKIC8qIFRoaXMgb25lIGlzIG9ubHkgdXNlZCBzbyB0aGF0IGEgYmluYXJ5IGZvcm0gY2FuIG91dHB1dCwgYXMgaW4KICAqIGkyZF9YNTA5X05BTUUoWDUwOV9nZXRfWDUwOV9QVUJLRVkoeCksJmJ1ZikgKi8KICNkZWZpbmUgCVg1MDlfZ2V0X1g1MDlfUFVCS0VZKHgpICgoeCktPmNlcnRfaW5mby0+a2V5KQpAQCAtNzQ4LDcgKzY0Miw2IEBACiAKIGNvbnN0IGNoYXIgKlg1MDlfdmVyaWZ5X2NlcnRfZXJyb3Jfc3RyaW5nKGxvbmcgbik7CiAKLSNpZm5kZWYgU1NMRUFZX01BQ1JPUwogI2lmbmRlZiBPUEVOU1NMX05PX0VWUAogaW50IFg1MDlfdmVyaWZ5KFg1MDkgKmEsIEVWUF9QS0VZICpyKTsKIApAQCAtODczLDExICs3NjYsMTEgQEAKIFg1MDlfTkFNRSAqWDUwOV9OQU1FX2R1cChYNTA5X05BTUUgKnhuKTsKIFg1MDlfTkFNRV9FTlRSWSAqWDUwOV9OQU1FX0VOVFJZX2R1cChYNTA5X05BTUVfRU5UUlkgKm5lKTsKIAotI2VuZGlmIC8qICFTU0xFQVlfTUFDUk9TICovCi0KLWludAkJWDUwOV9jbXBfdGltZShBU04xX1RJTUUgKnMsIHRpbWVfdCAqdCk7Ci1pbnQJCVg1MDlfY21wX2N1cnJlbnRfdGltZShBU04xX1RJTUUgKnMpOworaW50CQlYNTA5X2NtcF90aW1lKGNvbnN0IEFTTjFfVElNRSAqcywgdGltZV90ICp0KTsKK2ludAkJWDUwOV9jbXBfY3VycmVudF90aW1lKGNvbnN0IEFTTjFfVElNRSAqcyk7CiBBU04xX1RJTUUgKglYNTA5X3RpbWVfYWRqKEFTTjFfVElNRSAqcywgbG9uZyBhZGosIHRpbWVfdCAqdCk7CitBU04xX1RJTUUgKglYNTA5X3RpbWVfYWRqX2V4KEFTTjFfVElNRSAqcywKKwkJCQlpbnQgb2Zmc2V0X2RheSwgbG9uZyBvZmZzZXRfc2VjLCB0aW1lX3QgKnQpOwogQVNOMV9USU1FICoJWDUwOV9nbXRpbWVfYWRqKEFTTjFfVElNRSAqcywgbG9uZyBhZGopOwogCiBjb25zdCBjaGFyICoJWDUwOV9nZXRfZGVmYXVsdF9jZXJ0X2FyZWEodm9pZCApOwpAQCAtOTY1LDYgKzg1OCw5IEBACiBERUNMQVJFX0FTTjFfRlVOQ1RJT05TKFg1MDlfQ1JMKQogCiBpbnQgWDUwOV9DUkxfYWRkMF9yZXZva2VkKFg1MDlfQ1JMICpjcmwsIFg1MDlfUkVWT0tFRCAqcmV2KTsKK2ludCBYNTA5X0NSTF9nZXQwX2J5X3NlcmlhbChYNTA5X0NSTCAqY3JsLAorCQlYNTA5X1JFVk9LRUQgKipyZXQsIEFTTjFfSU5URUdFUiAqc2VyaWFsKTsKK2ludCBYNTA5X0NSTF9nZXQwX2J5X2NlcnQoWDUwOV9DUkwgKmNybCwgWDUwOV9SRVZPS0VEICoqcmV0LCBYNTA5ICp4KTsKIAogWDUwOV9QS0VZICoJWDUwOV9QS0VZX25ldyh2b2lkICk7CiB2b2lkCQlYNTA5X1BLRVlfZnJlZShYNTA5X1BLRVkgKmEpOwpAQCAtMTAwOCw4ICs5MDQsOCBAQAogWDUwOV9OQU1FICoJWDUwOV9nZXRfaXNzdWVyX25hbWUoWDUwOSAqYSk7CiBpbnQgCQlYNTA5X3NldF9zdWJqZWN0X25hbWUoWDUwOSAqeCwgWDUwOV9OQU1FICpuYW1lKTsKIFg1MDlfTkFNRSAqCVg1MDlfZ2V0X3N1YmplY3RfbmFtZShYNTA5ICphKTsKLWludCAJCVg1MDlfc2V0X25vdEJlZm9yZShYNTA5ICp4LCBBU04xX1RJTUUgKnRtKTsKLWludCAJCVg1MDlfc2V0X25vdEFmdGVyKFg1MDkgKngsIEFTTjFfVElNRSAqdG0pOworaW50IAkJWDUwOV9zZXRfbm90QmVmb3JlKFg1MDkgKngsIGNvbnN0IEFTTjFfVElNRSAqdG0pOworaW50IAkJWDUwOV9zZXRfbm90QWZ0ZXIoWDUwOSAqeCwgY29uc3QgQVNOMV9USU1FICp0bSk7CiBpbnQgCQlYNTA5X3NldF9wdWJrZXkoWDUwOSAqeCwgRVZQX1BLRVkgKnBrZXkpOwogRVZQX1BLRVkgKglYNTA5X2dldF9wdWJrZXkoWDUwOSAqeCk7CiBBU04xX0JJVF9TVFJJTkcgKiBYNTA5X2dldDBfcHVia2V5X2JpdHN0cihjb25zdCBYNTA5ICp4KTsKQEAgLTEwNDYsOCArOTQyLDggQEAKIAogaW50IFg1MDlfQ1JMX3NldF92ZXJzaW9uKFg1MDlfQ1JMICp4LCBsb25nIHZlcnNpb24pOwogaW50IFg1MDlfQ1JMX3NldF9pc3N1ZXJfbmFtZShYNTA5X0NSTCAqeCwgWDUwOV9OQU1FICpuYW1lKTsKLWludCBYNTA5X0NSTF9zZXRfbGFzdFVwZGF0ZShYNTA5X0NSTCAqeCwgQVNOMV9USU1FICp0bSk7Ci1pbnQgWDUwOV9DUkxfc2V0X25leHRVcGRhdGUoWDUwOV9DUkwgKngsIEFTTjFfVElNRSAqdG0pOworaW50IFg1MDlfQ1JMX3NldF9sYXN0VXBkYXRlKFg1MDlfQ1JMICp4LCBjb25zdCBBU04xX1RJTUUgKnRtKTsKK2ludCBYNTA5X0NSTF9zZXRfbmV4dFVwZGF0ZShYNTA5X0NSTCAqeCwgY29uc3QgQVNOMV9USU1FICp0bSk7CiBpbnQgWDUwOV9DUkxfc29ydChYNTA5X0NSTCAqY3JsKTsKIAogaW50IFg1MDlfUkVWT0tFRF9zZXRfc2VyaWFsTnVtYmVyKFg1MDlfUkVWT0tFRCAqeCwgQVNOMV9JTlRFR0VSICpzZXJpYWwpOwpAQCAtMTA2NiwxMSArOTYyLDE4IEBACiBpbnQJCVg1MDlfc3ViamVjdF9uYW1lX2NtcChjb25zdCBYNTA5ICphLCBjb25zdCBYNTA5ICpiKTsKIHVuc2lnbmVkIGxvbmcJWDUwOV9zdWJqZWN0X25hbWVfaGFzaChYNTA5ICp4KTsKIAorI2lmbmRlZiBPUEVOU1NMX05PX01ENQordW5zaWduZWQgbG9uZwlYNTA5X2lzc3Vlcl9uYW1lX2hhc2hfb2xkKFg1MDkgKmEpOwordW5zaWduZWQgbG9uZwlYNTA5X3N1YmplY3RfbmFtZV9oYXNoX29sZChYNTA5ICp4KTsKKyNlbmRpZgorCiBpbnQJCVg1MDlfY21wKGNvbnN0IFg1MDkgKmEsIGNvbnN0IFg1MDkgKmIpOwogaW50CQlYNTA5X05BTUVfY21wKGNvbnN0IFg1MDlfTkFNRSAqYSwgY29uc3QgWDUwOV9OQU1FICpiKTsKIHVuc2lnbmVkIGxvbmcJWDUwOV9OQU1FX2hhc2goWDUwOV9OQU1FICp4KTsKK3Vuc2lnbmVkIGxvbmcJWDUwOV9OQU1FX2hhc2hfb2xkKFg1MDlfTkFNRSAqeCk7CiAKIGludAkJWDUwOV9DUkxfY21wKGNvbnN0IFg1MDlfQ1JMICphLCBjb25zdCBYNTA5X0NSTCAqYik7CitpbnQJCVg1MDlfQ1JMX21hdGNoKGNvbnN0IFg1MDlfQ1JMICphLCBjb25zdCBYNTA5X0NSTCAqYik7CiAjaWZuZGVmIE9QRU5TU0xfTk9fRlBfQVBJCiBpbnQJCVg1MDlfcHJpbnRfZXhfZnAoRklMRSAqYnAsWDUwOSAqeCwgdW5zaWduZWQgbG9uZyBubWZsYWcsIHVuc2lnbmVkIGxvbmcgY2ZsYWcpOwogaW50CQlYNTA5X3ByaW50X2ZwKEZJTEUgKmJwLFg1MDkgKngpOwpAQCAtMTI0Niw5ICsxMTQ5LDE2IEBACiBERUNMQVJFX0FTTjFfRlVOQ1RJT05TKFBCRTJQQVJBTSkKIERFQ0xBUkVfQVNOMV9GVU5DVElPTlMoUEJLREYyUEFSQU0pCiAKLVg1MDlfQUxHT1IgKlBLQ1M1X3BiZV9zZXQoaW50IGFsZywgaW50IGl0ZXIsIHVuc2lnbmVkIGNoYXIgKnNhbHQsIGludCBzYWx0bGVuKTsKK2ludCBQS0NTNV9wYmVfc2V0MF9hbGdvcihYNTA5X0FMR09SICphbGdvciwgaW50IGFsZywgaW50IGl0ZXIsCisJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqc2FsdCwgaW50IHNhbHRsZW4pOworCitYNTA5X0FMR09SICpQS0NTNV9wYmVfc2V0KGludCBhbGcsIGludCBpdGVyLAorCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNhbHQsIGludCBzYWx0bGVuKTsKIFg1MDlfQUxHT1IgKlBLQ1M1X3BiZTJfc2V0KGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciwgaW50IGl0ZXIsCiAJCQkJCSB1bnNpZ25lZCBjaGFyICpzYWx0LCBpbnQgc2FsdGxlbik7CitYNTA5X0FMR09SICpQS0NTNV9wYmUyX3NldF9pdihjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIsIGludCBpdGVyLAorCQkJCSB1bnNpZ25lZCBjaGFyICpzYWx0LCBpbnQgc2FsdGxlbiwKKwkJCQkgdW5zaWduZWQgY2hhciAqYWl2LCBpbnQgcHJmX25pZCk7CiAKIC8qIFBLQ1MjOCB1dGlsaXRpZXMgKi8KIApAQCAtMTI1OSw2ICsxMTY5LDIyIEBACiBQS0NTOF9QUklWX0tFWV9JTkZPICpFVlBfUEtFWTJQS0NTOF9icm9rZW4oRVZQX1BLRVkgKnBrZXksIGludCBicm9rZW4pOwogUEtDUzhfUFJJVl9LRVlfSU5GTyAqUEtDUzhfc2V0X2Jyb2tlbihQS0NTOF9QUklWX0tFWV9JTkZPICpwOCwgaW50IGJyb2tlbik7CiAKK2ludCBQS0NTOF9wa2V5X3NldDAoUEtDUzhfUFJJVl9LRVlfSU5GTyAqcHJpdiwgQVNOMV9PQkpFQ1QgKmFvYmosCisJCQlpbnQgdmVyc2lvbiwgaW50IHB0eXBlLCB2b2lkICpwdmFsLAorCQkJCXVuc2lnbmVkIGNoYXIgKnBlbmMsIGludCBwZW5jbGVuKTsKK2ludCBQS0NTOF9wa2V5X2dldDAoQVNOMV9PQkpFQ1QgKipwcGthbGcsCisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKipwaywgaW50ICpwcGtsZW4sCisJCVg1MDlfQUxHT1IgKipwYSwKKwkJUEtDUzhfUFJJVl9LRVlfSU5GTyAqcDgpOworCitpbnQgWDUwOV9QVUJLRVlfc2V0MF9wYXJhbShYNTA5X1BVQktFWSAqcHViLCBBU04xX09CSkVDVCAqYW9iaiwKKwkJCQkJaW50IHB0eXBlLCB2b2lkICpwdmFsLAorCQkJCQl1bnNpZ25lZCBjaGFyICpwZW5jLCBpbnQgcGVuY2xlbik7CitpbnQgWDUwOV9QVUJLRVlfZ2V0MF9wYXJhbShBU04xX09CSkVDVCAqKnBwa2FsZywKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqKnBrLCBpbnQgKnBwa2xlbiwKKwkJWDUwOV9BTEdPUiAqKnBhLAorCQlYNTA5X1BVQktFWSAqcHViKTsKKwogaW50IFg1MDlfY2hlY2tfdHJ1c3QoWDUwOSAqeCwgaW50IGlkLCBpbnQgZmxhZ3MpOwogaW50IFg1MDlfVFJVU1RfZ2V0X2NvdW50KHZvaWQpOwogWDUwOV9UUlVTVCAqIFg1MDlfVFJVU1RfZ2V0MChpbnQgaWR4KTsKQEAgLTEzMzgsNyArMTI2NCwxMCBAQAogI2RlZmluZSBYNTA5X1JfS0VZX1ZBTFVFU19NSVNNQVRDSAkJCSAxMTYKICNkZWZpbmUgWDUwOV9SX0xPQURJTkdfQ0VSVF9ESVIJCQkJIDEwMwogI2RlZmluZSBYNTA5X1JfTE9BRElOR19ERUZBVUxUUwkJCQkgMTA0CisjZGVmaW5lIFg1MDlfUl9NRVRIT0RfTk9UX1NVUFBPUlRFRAkJCSAxMjQKICNkZWZpbmUgWDUwOV9SX05PX0NFUlRfU0VUX0ZPUl9VU19UT19WRVJJRlkJCSAxMDUKKyNkZWZpbmUgWDUwOV9SX1BVQkxJQ19LRVlfREVDT0RFX0VSUk9SCQkJIDEyNQorI2RlZmluZSBYNTA5X1JfUFVCTElDX0tFWV9FTkNPREVfRVJST1IJCQkgMTI2CiAjZGVmaW5lIFg1MDlfUl9TSE9VTERfUkVUUlkJCQkJIDEwNgogI2RlZmluZSBYNTA5X1JfVU5BQkxFX1RPX0ZJTkRfUEFSQU1FVEVSU19JTl9DSEFJTgkgMTA3CiAjZGVmaW5lIFg1MDlfUl9VTkFCTEVfVE9fR0VUX0NFUlRTX1BVQkxJQ19LRVkJCSAxMDgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIGIvaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmgKaW5kZXggODZhZTM1Zi4uZmUwOWIzMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmgKKysrIGIvaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmgKQEAgLTc3LDYgKzc3LDcgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKKyNpZiAwCiAvKiBPdXRlciBvYmplY3QgKi8KIHR5cGVkZWYgc3RydWN0IHg1MDlfaGFzaF9kaXJfc3QKIAl7CkBAIC04NSw2ICs4Niw3IEBACiAJaW50ICpkaXJzX3R5cGU7CiAJaW50IG51bV9kaXJzX2FsbG9jZWQ7CiAJfSBYNTA5X0hBU0hfRElSX0NUWDsKKyNlbmRpZgogCiB0eXBlZGVmIHN0cnVjdCB4NTA5X2ZpbGVfc3QKIAl7CkBAIC0xOTgsNiArMjAwLDggQEAKIAlpbnQgKCpnZXRfY3JsKShYNTA5X1NUT1JFX0NUWCAqY3R4LCBYNTA5X0NSTCAqKmNybCwgWDUwOSAqeCk7IC8qIHJldHJpZXZlIENSTCAqLwogCWludCAoKmNoZWNrX2NybCkoWDUwOV9TVE9SRV9DVFggKmN0eCwgWDUwOV9DUkwgKmNybCk7IC8qIENoZWNrIENSTCB2YWxpZGl0eSAqLwogCWludCAoKmNlcnRfY3JsKShYNTA5X1NUT1JFX0NUWCAqY3R4LCBYNTA5X0NSTCAqY3JsLCBYNTA5ICp4KTsgLyogQ2hlY2sgY2VydGlmaWNhdGUgYWdhaW5zdCBDUkwgKi8KKwlTVEFDS19PRihYNTA5KSAqICgqbG9va3VwX2NlcnRzKShYNTA5X1NUT1JFX0NUWCAqY3R4LCBYNTA5X05BTUUgKm5tKTsKKwlTVEFDS19PRihYNTA5X0NSTCkgKiAoKmxvb2t1cF9jcmxzKShYNTA5X1NUT1JFX0NUWCAqY3R4LCBYNTA5X05BTUUgKm5tKTsKIAlpbnQgKCpjbGVhbnVwKShYNTA5X1NUT1JFX0NUWCAqY3R4KTsKIAogCUNSWVBUT19FWF9EQVRBIGV4X2RhdGE7CkBAIC0yNDYsNiArMjUwLDggQEAKIAlpbnQgKCpjaGVja19jcmwpKFg1MDlfU1RPUkVfQ1RYICpjdHgsIFg1MDlfQ1JMICpjcmwpOyAvKiBDaGVjayBDUkwgdmFsaWRpdHkgKi8KIAlpbnQgKCpjZXJ0X2NybCkoWDUwOV9TVE9SRV9DVFggKmN0eCwgWDUwOV9DUkwgKmNybCwgWDUwOSAqeCk7IC8qIENoZWNrIGNlcnRpZmljYXRlIGFnYWluc3QgQ1JMICovCiAJaW50ICgqY2hlY2tfcG9saWN5KShYNTA5X1NUT1JFX0NUWCAqY3R4KTsKKwlTVEFDS19PRihYNTA5KSAqICgqbG9va3VwX2NlcnRzKShYNTA5X1NUT1JFX0NUWCAqY3R4LCBYNTA5X05BTUUgKm5tKTsKKwlTVEFDS19PRihYNTA5X0NSTCkgKiAoKmxvb2t1cF9jcmxzKShYNTA5X1NUT1JFX0NUWCAqY3R4LCBYNTA5X05BTUUgKm5tKTsKIAlpbnQgKCpjbGVhbnVwKShYNTA5X1NUT1JFX0NUWCAqY3R4KTsKIAogCS8qIFRoZSBmb2xsb3dpbmcgaXMgYnVpbHQgdXAgKi8KQEAgLTI2Myw2ICsyNjksMTEgQEAKIAlYNTA5ICpjdXJyZW50X2lzc3VlcjsJLyogY2VydCBjdXJyZW50bHkgYmVpbmcgdGVzdGVkIGFzIHZhbGlkIGlzc3VlciAqLwogCVg1MDlfQ1JMICpjdXJyZW50X2NybDsJLyogY3VycmVudCBDUkwgKi8KIAorCWludCBjdXJyZW50X2NybF9zY29yZTsgIC8qIHNjb3JlIG9mIGN1cnJlbnQgQ1JMICovCisJdW5zaWduZWQgaW50IGN1cnJlbnRfcmVhc29uczsgIC8qIFJlYXNvbiBtYXNrICovCisKKwlYNTA5X1NUT1JFX0NUWCAqcGFyZW50OyAvKiBGb3IgQ1JMIHBhdGggdmFsaWRhdGlvbjogcGFyZW50IGNvbnRleHQgKi8KKwogCUNSWVBUT19FWF9EQVRBIGV4X2RhdGE7CiAJfSAvKiBYNTA5X1NUT1JFX0NUWCAqLzsKIApAQCAtMzMwLDggKzM0MSwxOCBAQAogI2RlZmluZQkJWDUwOV9WX0VSUl9JTlZBTElEX0VYVEVOU0lPTgkJCTQxCiAjZGVmaW5lCQlYNTA5X1ZfRVJSX0lOVkFMSURfUE9MSUNZX0VYVEVOU0lPTgkJNDIKICNkZWZpbmUJCVg1MDlfVl9FUlJfTk9fRVhQTElDSVRfUE9MSUNZCQkJNDMKKyNkZWZpbmUJCVg1MDlfVl9FUlJfRElGRkVSRU5UX0NSTF9TQ09QRQkJCTQ0CisjZGVmaW5lCQlYNTA5X1ZfRVJSX1VOU1VQUE9SVEVEX0VYVEVOU0lPTl9GRUFUVVJFCTQ1CiAKLSNkZWZpbmUJCVg1MDlfVl9FUlJfVU5ORVNURURfUkVTT1VSQ0UJCQk0NAorI2RlZmluZQkJWDUwOV9WX0VSUl9VTk5FU1RFRF9SRVNPVVJDRQkJCTQ2CisKKyNkZWZpbmUJCVg1MDlfVl9FUlJfUEVSTUlUVEVEX1ZJT0xBVElPTgkJCTQ3CisjZGVmaW5lCQlYNTA5X1ZfRVJSX0VYQ0xVREVEX1ZJT0xBVElPTgkJCTQ4CisjZGVmaW5lCQlYNTA5X1ZfRVJSX1NVQlRSRUVfTUlOTUFYCQkJNDkKKyNkZWZpbmUJCVg1MDlfVl9FUlJfVU5TVVBQT1JURURfQ09OU1RSQUlOVF9UWVBFCQk1MQorI2RlZmluZQkJWDUwOV9WX0VSUl9VTlNVUFBPUlRFRF9DT05TVFJBSU5UX1NZTlRBWAk1MgorI2RlZmluZQkJWDUwOV9WX0VSUl9VTlNVUFBPUlRFRF9OQU1FX1NZTlRBWAkJNTMKKyNkZWZpbmUJCVg1MDlfVl9FUlJfQ1JMX1BBVEhfVkFMSURBVElPTl9FUlJPUgkJNTQKIAogLyogVGhlIGFwcGxpY2F0aW9uIGlzIG5vdCBoYXBweSAqLwogI2RlZmluZQkJWDUwOV9WX0VSUl9BUFBMSUNBVElPTl9WRVJJRklDQVRJT04JCTUwCkBAIC0zNjIsMTAgKzM4MywxNCBAQAogI2RlZmluZSBYNTA5X1ZfRkxBR19JTkhJQklUX01BUAkJCTB4NDAwCiAvKiBOb3RpZnkgY2FsbGJhY2sgdGhhdCBwb2xpY3kgaXMgT0sgKi8KICNkZWZpbmUgWDUwOV9WX0ZMQUdfTk9USUZZX1BPTElDWQkJMHg4MDAKLQorLyogRXh0ZW5kZWQgQ1JMIGZlYXR1cmVzIHN1Y2ggYXMgaW5kaXJlY3QgQ1JMcywgYWx0ZXJuYXRlIENSTCBzaWduaW5nIGtleXMgKi8KKyNkZWZpbmUgWDUwOV9WX0ZMQUdfRVhURU5ERURfQ1JMX1NVUFBPUlQJMHgxMDAwCisvKiBEZWx0YSBDUkwgc3VwcG9ydCAqLworI2RlZmluZSBYNTA5X1ZfRkxBR19VU0VfREVMVEFTCQkJMHgyMDAwCiAvKiBDaGVjayBzZWxmc2lnbmVkIENBIHNpZ25hdHVyZSAqLwogI2RlZmluZSBYNTA5X1ZfRkxBR19DSEVDS19TU19TSUdOQVRVUkUJCTB4NDAwMAogCisKICNkZWZpbmUgWDUwOV9WUF9GTEFHX0RFRkFVTFQJCQkweDEKICNkZWZpbmUgWDUwOV9WUF9GTEFHX09WRVJXUklURQkJCTB4MgogI2RlZmluZSBYNTA5X1ZQX0ZMQUdfUkVTRVRfRkxBR1MJCTB4NApAQCAtMzg3LDExICs0MTIsMTYgQEAKIFg1MDlfU1RPUkUgKlg1MDlfU1RPUkVfbmV3KHZvaWQgKTsKIHZvaWQgWDUwOV9TVE9SRV9mcmVlKFg1MDlfU1RPUkUgKnYpOwogCitTVEFDS19PRihYNTA5KSogWDUwOV9TVE9SRV9nZXQxX2NlcnRzKFg1MDlfU1RPUkVfQ1RYICpzdCwgWDUwOV9OQU1FICpubSk7CitTVEFDS19PRihYNTA5X0NSTCkqIFg1MDlfU1RPUkVfZ2V0MV9jcmxzKFg1MDlfU1RPUkVfQ1RYICpzdCwgWDUwOV9OQU1FICpubSk7CiBpbnQgWDUwOV9TVE9SRV9zZXRfZmxhZ3MoWDUwOV9TVE9SRSAqY3R4LCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKIGludCBYNTA5X1NUT1JFX3NldF9wdXJwb3NlKFg1MDlfU1RPUkUgKmN0eCwgaW50IHB1cnBvc2UpOwogaW50IFg1MDlfU1RPUkVfc2V0X3RydXN0KFg1MDlfU1RPUkUgKmN0eCwgaW50IHRydXN0KTsKIGludCBYNTA5X1NUT1JFX3NldDFfcGFyYW0oWDUwOV9TVE9SRSAqY3R4LCBYNTA5X1ZFUklGWV9QQVJBTSAqcG0pOwogCit2b2lkIFg1MDlfU1RPUkVfc2V0X3ZlcmlmeV9jYihYNTA5X1NUT1JFICpjdHgsCisJCQkJICBpbnQgKCp2ZXJpZnlfY2IpKGludCwgWDUwOV9TVE9SRV9DVFggKikpOworCiBYNTA5X1NUT1JFX0NUWCAqWDUwOV9TVE9SRV9DVFhfbmV3KHZvaWQpOwogCiBpbnQgWDUwOV9TVE9SRV9DVFhfZ2V0MV9pc3N1ZXIoWDUwOSAqKmlzc3VlciwgWDUwOV9TVE9SRV9DVFggKmN0eCwgWDUwOSAqeCk7CkBAIC00NTAsNiArNDgwLDkgQEAKIHZvaWQJWDUwOV9TVE9SRV9DVFhfc2V0X2Vycm9yKFg1MDlfU1RPUkVfQ1RYICpjdHgsaW50IHMpOwogaW50CVg1MDlfU1RPUkVfQ1RYX2dldF9lcnJvcl9kZXB0aChYNTA5X1NUT1JFX0NUWCAqY3R4KTsKIFg1MDkgKglYNTA5X1NUT1JFX0NUWF9nZXRfY3VycmVudF9jZXJ0KFg1MDlfU1RPUkVfQ1RYICpjdHgpOworWDUwOSAqWDUwOV9TVE9SRV9DVFhfZ2V0MF9jdXJyZW50X2lzc3VlcihYNTA5X1NUT1JFX0NUWCAqY3R4KTsKK1g1MDlfQ1JMICpYNTA5X1NUT1JFX0NUWF9nZXQwX2N1cnJlbnRfY3JsKFg1MDlfU1RPUkVfQ1RYICpjdHgpOworWDUwOV9TVE9SRV9DVFggKlg1MDlfU1RPUkVfQ1RYX2dldDBfcGFyZW50X2N0eChYNTA5X1NUT1JFX0NUWCAqY3R4KTsKIFNUQUNLX09GKFg1MDkpICpYNTA5X1NUT1JFX0NUWF9nZXRfY2hhaW4oWDUwOV9TVE9SRV9DVFggKmN0eCk7CiBTVEFDS19PRihYNTA5KSAqWDUwOV9TVE9SRV9DVFhfZ2V0MV9jaGFpbihYNTA5X1NUT1JFX0NUWCAqY3R4KTsKIHZvaWQJWDUwOV9TVE9SRV9DVFhfc2V0X2NlcnQoWDUwOV9TVE9SRV9DVFggKmMsWDUwOSAqeCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW5zc2wveDUwOXYzLmggYi9pbmNsdWRlL29wZW5zc2wveDUwOXYzLmgKaW5kZXggOWVmODNkYS4uYjMwOGFiZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9vcGVuc3NsL3g1MDl2My5oCisrKyBiL2luY2x1ZGUvb3BlbnNzbC94NTA5djMuaApAQCAtNzYsMTIgKzc2LDE5IEBACiB0eXBlZGVmIHZvaWQgKCpYNTA5VjNfRVhUX0ZSRUUpKHZvaWQgKik7CiB0eXBlZGVmIHZvaWQgKiAoKlg1MDlWM19FWFRfRDJJKSh2b2lkICosIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiogLCBsb25nKTsKIHR5cGVkZWYgaW50ICgqWDUwOVYzX0VYVF9JMkQpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqKik7Ci10eXBlZGVmIFNUQUNLX09GKENPTkZfVkFMVUUpICogKCpYNTA5VjNfRVhUX0kyVikoc3RydWN0IHYzX2V4dF9tZXRob2QgKm1ldGhvZCwgdm9pZCAqZXh0LCBTVEFDS19PRihDT05GX1ZBTFVFKSAqZXh0bGlzdCk7Ci10eXBlZGVmIHZvaWQgKiAoKlg1MDlWM19FWFRfVjJJKShzdHJ1Y3QgdjNfZXh0X21ldGhvZCAqbWV0aG9kLCBzdHJ1Y3QgdjNfZXh0X2N0eCAqY3R4LCBTVEFDS19PRihDT05GX1ZBTFVFKSAqdmFsdWVzKTsKLXR5cGVkZWYgY2hhciAqICgqWDUwOVYzX0VYVF9JMlMpKHN0cnVjdCB2M19leHRfbWV0aG9kICptZXRob2QsIHZvaWQgKmV4dCk7Ci10eXBlZGVmIHZvaWQgKiAoKlg1MDlWM19FWFRfUzJJKShzdHJ1Y3QgdjNfZXh0X21ldGhvZCAqbWV0aG9kLCBzdHJ1Y3QgdjNfZXh0X2N0eCAqY3R4LCBjb25zdCBjaGFyICpzdHIpOwotdHlwZWRlZiBpbnQgKCpYNTA5VjNfRVhUX0kyUikoc3RydWN0IHYzX2V4dF9tZXRob2QgKm1ldGhvZCwgdm9pZCAqZXh0LCBCSU8gKm91dCwgaW50IGluZGVudCk7Ci10eXBlZGVmIHZvaWQgKiAoKlg1MDlWM19FWFRfUjJJKShzdHJ1Y3QgdjNfZXh0X21ldGhvZCAqbWV0aG9kLCBzdHJ1Y3QgdjNfZXh0X2N0eCAqY3R4LCBjb25zdCBjaGFyICpzdHIpOwordHlwZWRlZiBTVEFDS19PRihDT05GX1ZBTFVFKSAqCisgICgqWDUwOVYzX0VYVF9JMlYpKGNvbnN0IHN0cnVjdCB2M19leHRfbWV0aG9kICptZXRob2QsIHZvaWQgKmV4dCwKKwkJICAgIFNUQUNLX09GKENPTkZfVkFMVUUpICpleHRsaXN0KTsKK3R5cGVkZWYgdm9pZCAqICgqWDUwOVYzX0VYVF9WMkkpKGNvbnN0IHN0cnVjdCB2M19leHRfbWV0aG9kICptZXRob2QsCisJCQkJIHN0cnVjdCB2M19leHRfY3R4ICpjdHgsCisJCQkJIFNUQUNLX09GKENPTkZfVkFMVUUpICp2YWx1ZXMpOwordHlwZWRlZiBjaGFyICogKCpYNTA5VjNfRVhUX0kyUykoY29uc3Qgc3RydWN0IHYzX2V4dF9tZXRob2QgKm1ldGhvZCwgdm9pZCAqZXh0KTsKK3R5cGVkZWYgdm9pZCAqICgqWDUwOVYzX0VYVF9TMkkpKGNvbnN0IHN0cnVjdCB2M19leHRfbWV0aG9kICptZXRob2QsCisJCQkJIHN0cnVjdCB2M19leHRfY3R4ICpjdHgsIGNvbnN0IGNoYXIgKnN0cik7Cit0eXBlZGVmIGludCAoKlg1MDlWM19FWFRfSTJSKShjb25zdCBzdHJ1Y3QgdjNfZXh0X21ldGhvZCAqbWV0aG9kLCB2b2lkICpleHQsCisJCQkgICAgICBCSU8gKm91dCwgaW50IGluZGVudCk7Cit0eXBlZGVmIHZvaWQgKiAoKlg1MDlWM19FWFRfUjJJKShjb25zdCBzdHJ1Y3QgdjNfZXh0X21ldGhvZCAqbWV0aG9kLAorCQkJCSBzdHJ1Y3QgdjNfZXh0X2N0eCAqY3R4LCBjb25zdCBjaGFyICpzdHIpOwogCiAvKiBWMyBleHRlbnNpb24gc3RydWN0dXJlICovCiAKQEAgLTIyMCwyNCArMjI3LDQxIEBACiAJR0VORVJBTF9OQU1FUyAqZnVsbG5hbWU7CiAJU1RBQ0tfT0YoWDUwOV9OQU1FX0VOVFJZKSAqcmVsYXRpdmVuYW1lOwogfSBuYW1lOworLyogSWYgcmVsYXRpdmVuYW1lIHRoZW4gdGhpcyBjb250YWlucyB0aGUgZnVsbCBkaXN0cmlidXRpb24gcG9pbnQgbmFtZSAqLworWDUwOV9OQU1FICpkcG5hbWU7CiB9IERJU1RfUE9JTlRfTkFNRTsKKy8qIEFsbCBleGlzdGluZyByZWFzb25zICovCisjZGVmaW5lIENSTERQX0FMTF9SRUFTT05TCTB4ODA3ZgogCi10eXBlZGVmIHN0cnVjdCBESVNUX1BPSU5UX3N0IHsKKyNkZWZpbmUgQ1JMX1JFQVNPTl9OT05FCQkJCS0xCisjZGVmaW5lIENSTF9SRUFTT05fVU5TUEVDSUZJRUQJCQkwCisjZGVmaW5lIENSTF9SRUFTT05fS0VZX0NPTVBST01JU0UJCTEKKyNkZWZpbmUgQ1JMX1JFQVNPTl9DQV9DT01QUk9NSVNFCQkyCisjZGVmaW5lIENSTF9SRUFTT05fQUZGSUxJQVRJT05fQ0hBTkdFRAkJMworI2RlZmluZSBDUkxfUkVBU09OX1NVUEVSU0VERUQJCQk0CisjZGVmaW5lIENSTF9SRUFTT05fQ0VTU0FUSU9OX09GX09QRVJBVElPTgk1CisjZGVmaW5lIENSTF9SRUFTT05fQ0VSVElGSUNBVEVfSE9MRAkJNgorI2RlZmluZSBDUkxfUkVBU09OX1JFTU9WRV9GUk9NX0NSTAkJOAorI2RlZmluZSBDUkxfUkVBU09OX1BSSVZJTEVHRV9XSVRIRFJBV04JCTkKKyNkZWZpbmUgQ1JMX1JFQVNPTl9BQV9DT01QUk9NSVNFCQkxMAorCitzdHJ1Y3QgRElTVF9QT0lOVF9zdCB7CiBESVNUX1BPSU5UX05BTUUJKmRpc3Rwb2ludDsKIEFTTjFfQklUX1NUUklORyAqcmVhc29uczsKIEdFTkVSQUxfTkFNRVMgKkNSTGlzc3VlcjsKLX0gRElTVF9QT0lOVDsKK2ludCBkcF9yZWFzb25zOworfTsKIAogdHlwZWRlZiBTVEFDS19PRihESVNUX1BPSU5UKSBDUkxfRElTVF9QT0lOVFM7CiAKIERFQ0xBUkVfU1RBQ0tfT0YoRElTVF9QT0lOVCkKIERFQ0xBUkVfQVNOMV9TRVRfT0YoRElTVF9QT0lOVCkKIAotdHlwZWRlZiBzdHJ1Y3QgQVVUSE9SSVRZX0tFWUlEX3N0IHsKK3N0cnVjdCBBVVRIT1JJVFlfS0VZSURfc3QgewogQVNOMV9PQ1RFVF9TVFJJTkcgKmtleWlkOwogR0VORVJBTF9OQU1FUyAqaXNzdWVyOwogQVNOMV9JTlRFR0VSICpzZXJpYWw7Ci19IEFVVEhPUklUWV9LRVlJRDsKK307CiAKIC8qIFN0cm9uZyBleHRyYW5ldCBzdHJ1Y3R1cmVzICovCiAKQEAgLTMwMywxMCArMzI3LDEwIEBACiAKIERFQ0xBUkVfU1RBQ0tfT0YoR0VORVJBTF9TVUJUUkVFKQogCi10eXBlZGVmIHN0cnVjdCBOQU1FX0NPTlNUUkFJTlRTX3N0IHsKK3N0cnVjdCBOQU1FX0NPTlNUUkFJTlRTX3N0IHsKIAlTVEFDS19PRihHRU5FUkFMX1NVQlRSRUUpICpwZXJtaXR0ZWRTdWJ0cmVlczsKIAlTVEFDS19PRihHRU5FUkFMX1NVQlRSRUUpICpleGNsdWRlZFN1YnRyZWVzOwotfSBOQU1FX0NPTlNUUkFJTlRTOworfTsKIAogdHlwZWRlZiBzdHJ1Y3QgUE9MSUNZX0NPTlNUUkFJTlRTX3N0IHsKIAlBU04xX0lOVEVHRVIgKnJlcXVpcmVFeHBsaWNpdFBvbGljeTsKQEAgLTMyOSw2ICszNTMsMzEgQEAKIERFQ0xBUkVfQVNOMV9GVU5DVElPTlMoUFJPWFlfUE9MSUNZKQogREVDTEFSRV9BU04xX0ZVTkNUSU9OUyhQUk9YWV9DRVJUX0lORk9fRVhURU5TSU9OKQogCitzdHJ1Y3QgSVNTVUlOR19ESVNUX1BPSU5UX3N0CisJeworCURJU1RfUE9JTlRfTkFNRSAqZGlzdHBvaW50OworCWludCBvbmx5dXNlcjsKKwlpbnQgb25seUNBOworCUFTTjFfQklUX1NUUklORyAqb25seXNvbWVyZWFzb25zOworCWludCBpbmRpcmVjdENSTDsKKwlpbnQgb25seWF0dHI7CisJfTsKKworLyogVmFsdWVzIGluIGlkcF9mbGFncyBmaWVsZCAqLworLyogSURQIHByZXNlbnQgKi8KKyNkZWZpbmUJSURQX1BSRVNFTlQJMHgxCisvKiBJRFAgdmFsdWVzIGluY29uc2lzdGVudCAqLworI2RlZmluZSBJRFBfSU5WQUxJRAkweDIKKy8qIG9ubHl1c2VyIHRydWUgKi8KKyNkZWZpbmUJSURQX09OTFlVU0VSCTB4NAorLyogb25seUNBIHRydWUgKi8KKyNkZWZpbmUJSURQX09OTFlDQQkweDgKKy8qIG9ubHlhdHRyIHRydWUgKi8KKyNkZWZpbmUgSURQX09OTFlBVFRSCTB4MTAKKy8qIGluZGlyZWN0Q1JMIHRydWUgKi8KKyNkZWZpbmUgSURQX0lORElSRUNUCTB4MjAKKy8qIG9ubHlzb21lcmVhc29ucyBwcmVzZW50ICovCisjZGVmaW5lIElEUF9SRUFTT05TCTB4NDAKIAogI2RlZmluZSBYNTA5VjNfY29uZl9lcnIodmFsKSBFUlJfYWRkX2Vycm9yX2RhdGEoNiwgInNlY3Rpb246IiwgdmFsLT5zZWN0aW9uLCBcCiAiLG5hbWU6IiwgdmFsLT5uYW1lLCAiLHZhbHVlOiIsIHZhbC0+dmFsdWUpOwpAQCAtMzczLDYgKzQyMiw3IEBACiAjZGVmaW5lIEVYRkxBR19QUk9YWQkJMHg0MDAKIAogI2RlZmluZSBFWEZMQUdfSU5WQUxJRF9QT0xJQ1kJMHg4MDAKKyNkZWZpbmUgRVhGTEFHX0ZSRVNIRVNUCQkweDEwMDAKIAogI2RlZmluZSBLVV9ESUdJVEFMX1NJR05BVFVSRQkweDAwODAKICNkZWZpbmUgS1VfTk9OX1JFUFVESUFUSU9OCTB4MDA0MApAQCAtNDI0LDkgKzQ3NCwxMCBAQAogI2RlZmluZSBYNTA5X1BVUlBPU0VfQ1JMX1NJR04JCTYKICNkZWZpbmUgWDUwOV9QVVJQT1NFX0FOWQkJNwogI2RlZmluZSBYNTA5X1BVUlBPU0VfT0NTUF9IRUxQRVIJOAorI2RlZmluZSBYNTA5X1BVUlBPU0VfVElNRVNUQU1QX1NJR04JOQogCiAjZGVmaW5lIFg1MDlfUFVSUE9TRV9NSU4JCTEKLSNkZWZpbmUgWDUwOV9QVVJQT1NFX01BWAkJOAorI2RlZmluZSBYNTA5X1BVUlBPU0VfTUFYCQk5CiAKIC8qIEZsYWdzIGZvciBYNTA5VjNfRVhUX3ByaW50KCkgKi8KIApAQCAtNDcxLDYgKzUyMiw5IEBACiBERUNMQVJFX0FTTjFfRlVOQ1RJT05TKFBLRVlfVVNBR0VfUEVSSU9EKQogCiBERUNMQVJFX0FTTjFfRlVOQ1RJT05TKEdFTkVSQUxfTkFNRSkKK0dFTkVSQUxfTkFNRSAqR0VORVJBTF9OQU1FX2R1cChHRU5FUkFMX05BTUUgKmEpOworaW50IEdFTkVSQUxfTkFNRV9jbXAoR0VORVJBTF9OQU1FICphLCBHRU5FUkFMX05BTUUgKmIpOworCiAKIAogQVNOMV9CSVRfU1RSSU5HICp2MmlfQVNOMV9CSVRfU1RSSU5HKFg1MDlWM19FWFRfTUVUSE9EICptZXRob2QsCkBAIC00ODYsMTEgKzU0MCwxOCBAQAogCiBTVEFDS19PRihDT05GX1ZBTFVFKSAqaTJ2X0dFTkVSQUxfTkFNRVMoWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZCwKIAkJR0VORVJBTF9OQU1FUyAqZ2VuLCBTVEFDS19PRihDT05GX1ZBTFVFKSAqZXh0bGlzdCk7Ci1HRU5FUkFMX05BTUVTICp2MmlfR0VORVJBTF9OQU1FUyhYNTA5VjNfRVhUX01FVEhPRCAqbWV0aG9kLAotCQkJCVg1MDlWM19DVFggKmN0eCwgU1RBQ0tfT0YoQ09ORl9WQUxVRSkgKm52YWwpOworR0VORVJBTF9OQU1FUyAqdjJpX0dFTkVSQUxfTkFNRVMoY29uc3QgWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZCwKKwkJCQkgWDUwOVYzX0NUWCAqY3R4LCBTVEFDS19PRihDT05GX1ZBTFVFKSAqbnZhbCk7CiAKIERFQ0xBUkVfQVNOMV9GVU5DVElPTlMoT1RIRVJOQU1FKQogREVDTEFSRV9BU04xX0ZVTkNUSU9OUyhFRElQQVJUWU5BTUUpCitpbnQgT1RIRVJOQU1FX2NtcChPVEhFUk5BTUUgKmEsIE9USEVSTkFNRSAqYik7Cit2b2lkIEdFTkVSQUxfTkFNRV9zZXQwX3ZhbHVlKEdFTkVSQUxfTkFNRSAqYSwgaW50IHR5cGUsIHZvaWQgKnZhbHVlKTsKK3ZvaWQgKkdFTkVSQUxfTkFNRV9nZXQwX3ZhbHVlKEdFTkVSQUxfTkFNRSAqYSwgaW50ICpwdHlwZSk7CitpbnQgR0VORVJBTF9OQU1FX3NldDBfb3RoZXJuYW1lKEdFTkVSQUxfTkFNRSAqZ2VuLAorCQkJCUFTTjFfT0JKRUNUICpvaWQsIEFTTjFfVFlQRSAqdmFsdWUpOworaW50IEdFTkVSQUxfTkFNRV9nZXQwX290aGVyTmFtZShHRU5FUkFMX05BTUUgKmdlbiwgCisJCQkJQVNOMV9PQkpFQ1QgKipwb2lkLCBBU04xX1RZUEUgKipwdmFsdWUpOwogCiBjaGFyICppMnNfQVNOMV9PQ1RFVF9TVFJJTkcoWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZCwgQVNOMV9PQ1RFVF9TVFJJTkcgKmlhNSk7CiBBU04xX09DVEVUX1NUUklORyAqczJpX0FTTjFfT0NURVRfU1RSSU5HKFg1MDlWM19FWFRfTUVUSE9EICptZXRob2QsIFg1MDlWM19DVFggKmN0eCwgY2hhciAqc3RyKTsKQEAgLTUwNyw2ICs1NjgsMTEgQEAKIERFQ0xBUkVfQVNOMV9GVU5DVElPTlMoQ1JMX0RJU1RfUE9JTlRTKQogREVDTEFSRV9BU04xX0ZVTkNUSU9OUyhESVNUX1BPSU5UKQogREVDTEFSRV9BU04xX0ZVTkNUSU9OUyhESVNUX1BPSU5UX05BTUUpCitERUNMQVJFX0FTTjFfRlVOQ1RJT05TKElTU1VJTkdfRElTVF9QT0lOVCkKKworaW50IERJU1RfUE9JTlRfc2V0X2RwbmFtZShESVNUX1BPSU5UX05BTUUgKmRwbiwgWDUwOV9OQU1FICppbmFtZSk7CisKK2ludCBOQU1FX0NPTlNUUkFJTlRTX2NoZWNrKFg1MDkgKngsIE5BTUVfQ09OU1RSQUlOVFMgKm5jKTsKIAogREVDTEFSRV9BU04xX0ZVTkNUSU9OUyhBQ0NFU1NfREVTQ1JJUFRJT04pCiBERUNMQVJFX0FTTjFfRlVOQ1RJT05TKEFVVEhPUklUWV9JTkZPX0FDQ0VTUykKQEAgLTUyNCwxMSArNTkwLDE2IEBACiBERUNMQVJFX0FTTjFfQUxMT0NfRlVOQ1RJT05TKFBPTElDWV9DT05TVFJBSU5UUykKIERFQ0xBUkVfQVNOMV9JVEVNKFBPTElDWV9DT05TVFJBSU5UUykKIAorR0VORVJBTF9OQU1FICphMmlfR0VORVJBTF9OQU1FKEdFTkVSQUxfTkFNRSAqb3V0LAorCQkJICAgICAgIGNvbnN0IFg1MDlWM19FWFRfTUVUSE9EICptZXRob2QsIFg1MDlWM19DVFggKmN0eCwKKwkJCSAgICAgICBpbnQgZ2VuX3R5cGUsIGNoYXIgKnZhbHVlLCBpbnQgaXNfbmMpOworCiAjaWZkZWYgSEVBREVSX0NPTkZfSAotR0VORVJBTF9OQU1FICp2MmlfR0VORVJBTF9OQU1FKFg1MDlWM19FWFRfTUVUSE9EICptZXRob2QsIFg1MDlWM19DVFggKmN0eCwKLQkJCQkJCQlDT05GX1ZBTFVFICpjbmYpOwotR0VORVJBTF9OQU1FICp2MmlfR0VORVJBTF9OQU1FX2V4KEdFTkVSQUxfTkFNRSAqb3V0LCBYNTA5VjNfRVhUX01FVEhPRCAqbWV0aG9kLAotCQkJCVg1MDlWM19DVFggKmN0eCwgQ09ORl9WQUxVRSAqY25mLCBpbnQgaXNfbmMpOworR0VORVJBTF9OQU1FICp2MmlfR0VORVJBTF9OQU1FKGNvbnN0IFg1MDlWM19FWFRfTUVUSE9EICptZXRob2QsIFg1MDlWM19DVFggKmN0eCwKKwkJCSAgICAgICBDT05GX1ZBTFVFICpjbmYpOworR0VORVJBTF9OQU1FICp2MmlfR0VORVJBTF9OQU1FX2V4KEdFTkVSQUxfTkFNRSAqb3V0LAorCQkJCSAgY29uc3QgWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZCwKKwkJCQkgIFg1MDlWM19DVFggKmN0eCwgQ09ORl9WQUxVRSAqY25mLCBpbnQgaXNfbmMpOwogdm9pZCBYNTA5VjNfY29uZl9mcmVlKENPTkZfVkFMVUUgKnZhbCk7CiAKIFg1MDlfRVhURU5TSU9OICpYNTA5VjNfRVhUX25jb25mX25pZChDT05GICpjb25mLCBYNTA5VjNfQ1RYICpjdHgsIGludCBleHRfbmlkLCBjaGFyICp2YWx1ZSk7CkBAIC01MzgsMTggKzYwOSwyMyBAQAogaW50IFg1MDlWM19FWFRfUkVRX2FkZF9uY29uZihDT05GICpjb25mLCBYNTA5VjNfQ1RYICpjdHgsIGNoYXIgKnNlY3Rpb24sIFg1MDlfUkVRICpyZXEpOwogaW50IFg1MDlWM19FWFRfQ1JMX2FkZF9uY29uZihDT05GICpjb25mLCBYNTA5VjNfQ1RYICpjdHgsIGNoYXIgKnNlY3Rpb24sIFg1MDlfQ1JMICpjcmwpOwogCi1YNTA5X0VYVEVOU0lPTiAqWDUwOVYzX0VYVF9jb25mX25pZChMSEFTSCAqY29uZiwgWDUwOVYzX0NUWCAqY3R4LCBpbnQgZXh0X25pZCwgY2hhciAqdmFsdWUpOwotWDUwOV9FWFRFTlNJT04gKlg1MDlWM19FWFRfY29uZihMSEFTSCAqY29uZiwgWDUwOVYzX0NUWCAqY3R4LCBjaGFyICpuYW1lLCBjaGFyICp2YWx1ZSk7Ci1pbnQgWDUwOVYzX0VYVF9hZGRfY29uZihMSEFTSCAqY29uZiwgWDUwOVYzX0NUWCAqY3R4LCBjaGFyICpzZWN0aW9uLCBYNTA5ICpjZXJ0KTsKLWludCBYNTA5VjNfRVhUX1JFUV9hZGRfY29uZihMSEFTSCAqY29uZiwgWDUwOVYzX0NUWCAqY3R4LCBjaGFyICpzZWN0aW9uLCBYNTA5X1JFUSAqcmVxKTsKLWludCBYNTA5VjNfRVhUX0NSTF9hZGRfY29uZihMSEFTSCAqY29uZiwgWDUwOVYzX0NUWCAqY3R4LCBjaGFyICpzZWN0aW9uLCBYNTA5X0NSTCAqY3JsKTsKK1g1MDlfRVhURU5TSU9OICpYNTA5VjNfRVhUX2NvbmZfbmlkKExIQVNIX09GKENPTkZfVkFMVUUpICpjb25mLCBYNTA5VjNfQ1RYICpjdHgsCisJCQkJICAgIGludCBleHRfbmlkLCBjaGFyICp2YWx1ZSk7CitYNTA5X0VYVEVOU0lPTiAqWDUwOVYzX0VYVF9jb25mKExIQVNIX09GKENPTkZfVkFMVUUpICpjb25mLCBYNTA5VjNfQ1RYICpjdHgsCisJCQkJY2hhciAqbmFtZSwgY2hhciAqdmFsdWUpOworaW50IFg1MDlWM19FWFRfYWRkX2NvbmYoTEhBU0hfT0YoQ09ORl9WQUxVRSkgKmNvbmYsIFg1MDlWM19DVFggKmN0eCwKKwkJCWNoYXIgKnNlY3Rpb24sIFg1MDkgKmNlcnQpOworaW50IFg1MDlWM19FWFRfUkVRX2FkZF9jb25mKExIQVNIX09GKENPTkZfVkFMVUUpICpjb25mLCBYNTA5VjNfQ1RYICpjdHgsCisJCQkgICAgY2hhciAqc2VjdGlvbiwgWDUwOV9SRVEgKnJlcSk7CitpbnQgWDUwOVYzX0VYVF9DUkxfYWRkX2NvbmYoTEhBU0hfT0YoQ09ORl9WQUxVRSkgKmNvbmYsIFg1MDlWM19DVFggKmN0eCwKKwkJCSAgICBjaGFyICpzZWN0aW9uLCBYNTA5X0NSTCAqY3JsKTsKIAogaW50IFg1MDlWM19hZGRfdmFsdWVfYm9vbF9uZihjaGFyICpuYW1lLCBpbnQgYXNuMV9ib29sLAotCQkJCQkJU1RBQ0tfT0YoQ09ORl9WQUxVRSkgKipleHRsaXN0KTsKKwkJCSAgICAgU1RBQ0tfT0YoQ09ORl9WQUxVRSkgKipleHRsaXN0KTsKIGludCBYNTA5VjNfZ2V0X3ZhbHVlX2Jvb2woQ09ORl9WQUxVRSAqdmFsdWUsIGludCAqYXNuMV9ib29sKTsKIGludCBYNTA5VjNfZ2V0X3ZhbHVlX2ludChDT05GX1ZBTFVFICp2YWx1ZSwgQVNOMV9JTlRFR0VSICoqYWludCk7CiB2b2lkIFg1MDlWM19zZXRfbmNvbmYoWDUwOVYzX0NUWCAqY3R4LCBDT05GICpjb25mKTsKLXZvaWQgWDUwOVYzX3NldF9jb25mX2xoYXNoKFg1MDlWM19DVFggKmN0eCwgTEhBU0ggKmxoYXNoKTsKK3ZvaWQgWDUwOVYzX3NldF9jb25mX2xoYXNoKFg1MDlWM19DVFggKmN0eCwgTEhBU0hfT0YoQ09ORl9WQUxVRSkgKmxoYXNoKTsKICNlbmRpZgogCiBjaGFyICogWDUwOVYzX2dldF9zdHJpbmcoWDUwOVYzX0NUWCAqY3R4LCBjaGFyICpuYW1lLCBjaGFyICpzZWN0aW9uKTsKQEAgLTU3Niw4ICs2NTIsOCBAQAogaW50IFg1MDlWM19FWFRfYWRkX2FsaWFzKGludCBuaWRfdG8sIGludCBuaWRfZnJvbSk7CiB2b2lkIFg1MDlWM19FWFRfY2xlYW51cCh2b2lkKTsKIAotWDUwOVYzX0VYVF9NRVRIT0QgKlg1MDlWM19FWFRfZ2V0KFg1MDlfRVhURU5TSU9OICpleHQpOwotWDUwOVYzX0VYVF9NRVRIT0QgKlg1MDlWM19FWFRfZ2V0X25pZChpbnQgbmlkKTsKK2NvbnN0IFg1MDlWM19FWFRfTUVUSE9EICpYNTA5VjNfRVhUX2dldChYNTA5X0VYVEVOU0lPTiAqZXh0KTsKK2NvbnN0IFg1MDlWM19FWFRfTUVUSE9EICpYNTA5VjNfRVhUX2dldF9uaWQoaW50IG5pZCk7CiBpbnQgWDUwOVYzX2FkZF9zdGFuZGFyZF9leHRlbnNpb25zKHZvaWQpOwogU1RBQ0tfT0YoQ09ORl9WQUxVRSkgKlg1MDlWM19wYXJzZV9saXN0KGNvbnN0IGNoYXIgKmxpbmUpOwogdm9pZCAqWDUwOVYzX0VYVF9kMmkoWDUwOV9FWFRFTlNJT04gKmV4dCk7CkBAIC01ODcsOCArNjYzLDggQEAKIFg1MDlfRVhURU5TSU9OICpYNTA5VjNfRVhUX2kyZChpbnQgZXh0X25pZCwgaW50IGNyaXQsIHZvaWQgKmV4dF9zdHJ1Yyk7CiBpbnQgWDUwOVYzX2FkZDFfaTJkKFNUQUNLX09GKFg1MDlfRVhURU5TSU9OKSAqKngsIGludCBuaWQsIHZvaWQgKnZhbHVlLCBpbnQgY3JpdCwgdW5zaWduZWQgbG9uZyBmbGFncyk7CiAKLWNoYXIgKmhleF90b19zdHJpbmcodW5zaWduZWQgY2hhciAqYnVmZmVyLCBsb25nIGxlbik7Ci11bnNpZ25lZCBjaGFyICpzdHJpbmdfdG9faGV4KGNoYXIgKnN0ciwgbG9uZyAqbGVuKTsKK2NoYXIgKmhleF90b19zdHJpbmcoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBsb25nIGxlbik7Cit1bnNpZ25lZCBjaGFyICpzdHJpbmdfdG9faGV4KGNvbnN0IGNoYXIgKnN0ciwgbG9uZyAqbGVuKTsKIGludCBuYW1lX2NtcChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpjbXApOwogCiB2b2lkIFg1MDlWM19FWFRfdmFsX3BybihCSU8gKm91dCwgU1RBQ0tfT0YoQ09ORl9WQUxVRSkgKnZhbCwgaW50IGluZGVudCwKQEAgLTYwMyw2ICs2NzksNyBAQAogaW50IFg1MDlfc3VwcG9ydGVkX2V4dGVuc2lvbihYNTA5X0VYVEVOU0lPTiAqZXgpOwogaW50IFg1MDlfUFVSUE9TRV9zZXQoaW50ICpwLCBpbnQgcHVycG9zZSk7CiBpbnQgWDUwOV9jaGVja19pc3N1ZWQoWDUwOSAqaXNzdWVyLCBYNTA5ICpzdWJqZWN0KTsKK2ludCBYNTA5X2NoZWNrX2FraWQoWDUwOSAqaXNzdWVyLCBBVVRIT1JJVFlfS0VZSUQgKmFraWQpOwogaW50IFg1MDlfUFVSUE9TRV9nZXRfY291bnQodm9pZCk7CiBYNTA5X1BVUlBPU0UgKiBYNTA5X1BVUlBPU0VfZ2V0MChpbnQgaWR4KTsKIGludCBYNTA5X1BVUlBPU0VfZ2V0X2J5X3NuYW1lKGNoYXIgKnNuYW1lKTsKQEAgLTYxNiwxMCArNjkzLDEwIEBACiB2b2lkIFg1MDlfUFVSUE9TRV9jbGVhbnVwKHZvaWQpOwogaW50IFg1MDlfUFVSUE9TRV9nZXRfaWQoWDUwOV9QVVJQT1NFICopOwogCi1TVEFDSyAqWDUwOV9nZXQxX2VtYWlsKFg1MDkgKngpOwotU1RBQ0sgKlg1MDlfUkVRX2dldDFfZW1haWwoWDUwOV9SRVEgKngpOwotdm9pZCBYNTA5X2VtYWlsX2ZyZWUoU1RBQ0sgKnNrKTsKLVNUQUNLICpYNTA5X2dldDFfb2NzcChYNTA5ICp4KTsKK1NUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSAqWDUwOV9nZXQxX2VtYWlsKFg1MDkgKngpOworU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpICpYNTA5X1JFUV9nZXQxX2VtYWlsKFg1MDlfUkVRICp4KTsKK3ZvaWQgWDUwOV9lbWFpbF9mcmVlKFNUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSAqc2spOworU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpICpYNTA5X2dldDFfb2NzcChYNTA5ICp4KTsKIAogQVNOMV9PQ1RFVF9TVFJJTkcgKmEyaV9JUEFERFJFU1MoY29uc3QgY2hhciAqaXBhc2MpOwogQVNOMV9PQ1RFVF9TVFJJTkcgKmEyaV9JUEFERFJFU1NfTkMoY29uc3QgY2hhciAqaXBhc2MpOwpAQCAtNjI4LDYgKzcwNSw3IEBACiAJCQkJCQl1bnNpZ25lZCBsb25nIGNodHlwZSk7CiAKIHZvaWQgWDUwOV9QT0xJQ1lfTk9ERV9wcmludChCSU8gKm91dCwgWDUwOV9QT0xJQ1lfTk9ERSAqbm9kZSwgaW50IGluZGVudCk7CitERUNMQVJFX1NUQUNLX09GKFg1MDlfUE9MSUNZX05PREUpCiAKICNpZm5kZWYgT1BFTlNTTF9OT19SRkMzNzc5CiAKQEAgLTc4Nyw4ICs4NjUsOSBAQAogLyogRXJyb3IgY29kZXMgZm9yIHRoZSBYNTA5VjMgZnVuY3Rpb25zLiAqLwogCiAvKiBGdW5jdGlvbiBjb2Rlcy4gKi8KLSNkZWZpbmUgWDUwOVYzX0ZfQVNJREVOVElGSUVSQ0hPSUNFX0NBTk9OSVpFCQkgMTU2Ci0jZGVmaW5lIFg1MDlWM19GX0FTSURFTlRJRklFUkNIT0lDRV9JU19DQU5PTklDQUwJIDE1NworI2RlZmluZSBYNTA5VjNfRl9BMklfR0VORVJBTF9OQU1FCQkJIDE2NAorI2RlZmluZSBYNTA5VjNfRl9BU0lERU5USUZJRVJDSE9JQ0VfQ0FOT05JWkUJCSAxNjEKKyNkZWZpbmUgWDUwOVYzX0ZfQVNJREVOVElGSUVSQ0hPSUNFX0lTX0NBTk9OSUNBTAkgMTYyCiAjZGVmaW5lIFg1MDlWM19GX0NPUFlfRU1BSUwJCQkJIDEyMgogI2RlZmluZSBYNTA5VjNfRl9DT1BZX0lTU1VFUgkJCQkgMTIzCiAjZGVmaW5lIFg1MDlWM19GX0RPX0RJUk5BTUUJCQkJIDE0NApAQCAtNzk2LDYgKzg3NSw3IEBACiAjZGVmaW5lIFg1MDlWM19GX0RPX0VYVF9JMkQJCQkJIDEzNQogI2RlZmluZSBYNTA5VjNfRl9ET19FWFRfTkNPTkYJCQkJIDE1MQogI2RlZmluZSBYNTA5VjNfRl9ET19JMlZfTkFNRV9DT05TVFJBSU5UUwkJIDE0OAorI2RlZmluZSBYNTA5VjNfRl9HTkFNRVNfRlJPTV9TRUNUTkFNRQkJCSAxNTYKICNkZWZpbmUgWDUwOVYzX0ZfSEVYX1RPX1NUUklORwkJCQkgMTExCiAjZGVmaW5lIFg1MDlWM19GX0kyU19BU04xX0VOVU1FUkFURUQJCQkgMTIxCiAjZGVmaW5lIFg1MDlWM19GX0kyU19BU04xX0lBNVNUUklORwkJCSAxNDkKQEAgLTgxMiwxMyArODkyLDE0IEBACiAjZGVmaW5lIFg1MDlWM19GX1MySV9BU04xX09DVEVUX1NUUklORwkJCSAxMTIKICNkZWZpbmUgWDUwOVYzX0ZfUzJJX0FTTjFfU0tFWV9JRAkJCSAxMTQKICNkZWZpbmUgWDUwOVYzX0ZfUzJJX1NLRVlfSUQJCQkJIDExNQorI2RlZmluZSBYNTA5VjNfRl9TRVRfRElTVF9QT0lOVF9OQU1FCQkJIDE1OAogI2RlZmluZSBYNTA5VjNfRl9TVFJJTkdfVE9fSEVYCQkJCSAxMTMKICNkZWZpbmUgWDUwOVYzX0ZfU1hORVRfQUREX0lEX0FTQwkJCSAxMjUKICNkZWZpbmUgWDUwOVYzX0ZfU1hORVRfQUREX0lEX0lOVEVHRVIJCQkgMTI2CiAjZGVmaW5lIFg1MDlWM19GX1NYTkVUX0FERF9JRF9VTE9ORwkJCSAxMjcKICNkZWZpbmUgWDUwOVYzX0ZfU1hORVRfR0VUX0lEX0FTQwkJCSAxMjgKICNkZWZpbmUgWDUwOVYzX0ZfU1hORVRfR0VUX0lEX1VMT05HCQkJIDEyOQotI2RlZmluZSBYNTA5VjNfRl9WMklfQVNJREVOVElGSUVSUwkJCSAxNTgKKyNkZWZpbmUgWDUwOVYzX0ZfVjJJX0FTSURFTlRJRklFUlMJCQkgMTYzCiAjZGVmaW5lIFg1MDlWM19GX1YySV9BU04xX0JJVF9TVFJJTkcJCQkgMTAxCiAjZGVmaW5lIFg1MDlWM19GX1YySV9BVVRIT1JJVFlfSU5GT19BQ0NFU1MJCSAxMzkKICNkZWZpbmUgWDUwOVYzX0ZfVjJJX0FVVEhPUklUWV9LRVlJRAkJCSAxMTkKQEAgLTgyNyw2ICs5MDgsNyBAQAogI2RlZmluZSBYNTA5VjNfRl9WMklfRVhURU5ERURfS0VZX1VTQUdFCQkJIDEwMwogI2RlZmluZSBYNTA5VjNfRl9WMklfR0VORVJBTF9OQU1FUwkJCSAxMTgKICNkZWZpbmUgWDUwOVYzX0ZfVjJJX0dFTkVSQUxfTkFNRV9FWAkJCSAxMTcKKyNkZWZpbmUgWDUwOVYzX0ZfVjJJX0lEUAkJCQkgMTU3CiAjZGVmaW5lIFg1MDlWM19GX1YySV9JUEFERFJCTE9DS1MJCQkgMTU5CiAjZGVmaW5lIFg1MDlWM19GX1YySV9JU1NVRVJfQUxUCQkJCSAxNTMKICNkZWZpbmUgWDUwOVYzX0ZfVjJJX05BTUVfQ09OU1RSQUlOVFMJCQkgMTQ3CkBAIC04NTUsNiArOTM3LDcgQEAKICNkZWZpbmUgWDUwOVYzX1JfQk5fREVDMkJOX0VSUk9SCQkJIDEwMAogI2RlZmluZSBYNTA5VjNfUl9CTl9UT19BU04xX0lOVEVHRVJfRVJST1IJCSAxMDEKICNkZWZpbmUgWDUwOVYzX1JfRElSTkFNRV9FUlJPUgkJCQkgMTQ5CisjZGVmaW5lIFg1MDlWM19SX0RJU1RQT0lOVF9BTFJFQURZX1NFVAkJCSAxNjAKICNkZWZpbmUgWDUwOVYzX1JfRFVQTElDQVRFX1pPTkVfSUQJCQkgMTMzCiAjZGVmaW5lIFg1MDlWM19SX0VSUk9SX0NPTlZFUlRJTkdfWk9ORQkJCSAxMzEKICNkZWZpbmUgWDUwOVYzX1JfRVJST1JfQ1JFQVRJTkdfRVhURU5TSU9OCQkgMTQ0CkBAIC04NjgsMTIgKzk1MSwxMyBAQAogI2RlZmluZSBYNTA5VjNfUl9JTExFR0FMX0VNUFRZX0VYVEVOU0lPTgkJIDE1MQogI2RlZmluZSBYNTA5VjNfUl9JTExFR0FMX0hFWF9ESUdJVAkJCSAxMTMKICNkZWZpbmUgWDUwOVYzX1JfSU5DT1JSRUNUX1BPTElDWV9TWU5UQVhfVEFHCQkgMTUyCi0jZGVmaW5lIFg1MDlWM19SX0lOVkFMSURfQVNOVU1CRVIJCQkgMTYwCi0jZGVmaW5lIFg1MDlWM19SX0lOVkFMSURfQVNSQU5HRQkJCSAxNjEKKyNkZWZpbmUgWDUwOVYzX1JfSU5WQUxJRF9NVUxUSVBMRV9SRE5TCQkJIDE2MQorI2RlZmluZSBYNTA5VjNfUl9JTlZBTElEX0FTTlVNQkVSCQkJIDE2MgorI2RlZmluZSBYNTA5VjNfUl9JTlZBTElEX0FTUkFOR0UJCQkgMTYzCiAjZGVmaW5lIFg1MDlWM19SX0lOVkFMSURfQk9PTEVBTl9TVFJJTkcJCQkgMTA0CiAjZGVmaW5lIFg1MDlWM19SX0lOVkFMSURfRVhURU5TSU9OX1NUUklORwkJIDEwNQotI2RlZmluZSBYNTA5VjNfUl9JTlZBTElEX0lOSEVSSVRBTkNFCQkJIDE2MgotI2RlZmluZSBYNTA5VjNfUl9JTlZBTElEX0lQQUREUkVTUwkJCSAxNjMKKyNkZWZpbmUgWDUwOVYzX1JfSU5WQUxJRF9JTkhFUklUQU5DRQkJCSAxNjUKKyNkZWZpbmUgWDUwOVYzX1JfSU5WQUxJRF9JUEFERFJFU1MJCQkgMTY2CiAjZGVmaW5lIFg1MDlWM19SX0lOVkFMSURfTkFNRQkJCQkgMTA2CiAjZGVmaW5lIFg1MDlWM19SX0lOVkFMSURfTlVMTF9BUkdVTUVOVAkJCSAxMDcKICNkZWZpbmUgWDUwOVYzX1JfSU5WQUxJRF9OVUxMX05BTUUJCQkgMTA4CkBAIC05MDEsOSArOTg1LDkgQEAKICNkZWZpbmUgWDUwOVYzX1JfT0REX05VTUJFUl9PRl9ESUdJVFMJCQkgMTEyCiAjZGVmaW5lIFg1MDlWM19SX09QRVJBVElPTl9OT1RfREVGSU5FRAkJCSAxNDgKICNkZWZpbmUgWDUwOVYzX1JfT1RIRVJOQU1FX0VSUk9SCQkJIDE0NwotI2RlZmluZSBYNTA5VjNfUl9QT0xJQ1lfTEFOR1VBR0VfQUxSRUFEVFlfREVGSU5FRAkgMTU1CisjZGVmaW5lIFg1MDlWM19SX1BPTElDWV9MQU5HVUFHRV9BTFJFQURZX0RFRklORUQJIDE1NQogI2RlZmluZSBYNTA5VjNfUl9QT0xJQ1lfUEFUSF9MRU5HVEgJCQkgMTU2Ci0jZGVmaW5lIFg1MDlWM19SX1BPTElDWV9QQVRIX0xFTkdUSF9BTFJFQURUWV9ERUZJTkVECSAxNTcKKyNkZWZpbmUgWDUwOVYzX1JfUE9MSUNZX1BBVEhfTEVOR1RIX0FMUkVBRFlfREVGSU5FRAkgMTU3CiAjZGVmaW5lIFg1MDlWM19SX1BPTElDWV9TWU5UQVhfTk9UX0NVUlJFTlRMWV9TVVBQT1JURUQJIDE1OAogI2RlZmluZSBYNTA5VjNfUl9QT0xJQ1lfV0hFTl9QUk9YWV9MQU5HVUFHRV9SRVFVSVJFU19OT19QT0xJQ1kgMTU5CiAjZGVmaW5lIFg1MDlWM19SX1NFQ1RJT05fTk9UX0ZPVU5ECQkJIDE1MApAQCAtOTE0LDYgKzk5OCw3IEBACiAjZGVmaW5lIFg1MDlWM19SX1VOS05PV05fRVhURU5TSU9OX05BTUUJCQkgMTMwCiAjZGVmaW5lIFg1MDlWM19SX1VOS05PV05fT1BUSU9OCQkJCSAxMjAKICNkZWZpbmUgWDUwOVYzX1JfVU5TVVBQT1JURURfT1BUSU9OCQkJIDExNworI2RlZmluZSBYNTA5VjNfUl9VTlNVUFBPUlRFRF9UWVBFCQkJIDE2NwogI2RlZmluZSBYNTA5VjNfUl9VU0VSX1RPT19MT05HCQkJCSAxMzIKIAogI2lmZGVmICBfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvb3BlbnNzbC5jb25maWcgYi9vcGVuc3NsLmNvbmZpZwppbmRleCBkNmZjOTE4Li5kZjFmNjI1IDEwMDY0NAotLS0gYS9vcGVuc3NsLmNvbmZpZworKysgYi9vcGVuc3NsLmNvbmZpZwpAQCAtMSwzNCArMSwzNiBAQAogQ09ORklHVVJFX0FSR1M9IlwKICAgICAgICAgbGludXgtZ2VuZXJpYzMyIFwKLSAgICAgICAgbm8taWRlYSBuby1iZiBuby1jYXN0IG5vLXNlZWQgbm8tbWQyIFwKKyAgICAgICAgbm8taWRlYSBuby1iZiBuby1jYXN0IG5vLXNlZWQgbm8tbWQyIG5vLXdocmxwb29sIFwKICAgICAgICAgLURMX0VORElBTiIKIAogIyB1bm5lZWRlZCBkaXJlY3RvcmllcwogVU5ORUVERURfU09VUkNFUz0iXAotCU1hY09TCSAgICBcCi0JTmV0d2FyZQkgICAgXAotCVZNUwkgICAgXAotCWFwcHMvZGVtb0NBIFwKLQlhcHBzL3NldCAgICBcCi0JYnVncwkgICAgXAotCWNlcnRzCSAgICBcCi0JY3J5cHRvL2JmICAgXAotCWNyeXB0by9jYXN0IFwKLQljcnlwdG8vY21zICBcCi0JY3J5cHRvL2lkZWEgXAotCWNyeXB0by9tZDIgIFwKLQljcnlwdG8vcmM1ICBcCi0JY3J5cHRvL3NlZWQgXAotCWRlbW9zCSAgICBcCi0JZG9jCSAgICBcCi0JZW5naW5lcwkgICAgXAotCW1zCSAgICBcCi0Jb3MyCSAgICBcCi0JcGVybAkgICAgXAotCXNobGliCSAgICBcCi0JdGVzdAkgICAgXAotCXRpbWVzCSAgICBcCi0JdG9vbHMJICAgIFwKKyAJTWFjT1MJCVwKKwlOZXR3YXJlCQlcCisJVk1TCQlcCisJYXBwcy9kZW1vQ0EJXAorCWFwcHMvc2V0CVwKKwlidWdzCQlcCisJY2VydHMJCVwKKwljcnlwdG8vYmYJXAorCWNyeXB0by9jYW1lbGxpYQlcCisJY3J5cHRvL2Nhc3QJXAorCWNyeXB0by9jbXMJXAorCWNyeXB0by9pZGVhCVwKKwljcnlwdG8vbWQyCVwKKwljcnlwdG8vcmM1CVwKKwljcnlwdG8vc2VlZAlcCisJY3J5cHRvL3docmxwb29sCVwKKwlkZW1vcwkJXAorCWRvYwkJXAorCWVuZ2luZXMJCVwKKwltcwkJXAorCW9zMgkJXAorCXBlcmwJCVwKKwlzaGxpYgkJXAorCXRlc3QJCVwKKwl0aW1lcwkJXAorCXRvb2xzCQlcCiAJdXRpbCIKIAogIyB1bm5lZWRlZCBmaWxlcwpAQCAtNTksMTIgKzYxLDkwIEBACiAJUkVBRE1FLkFTTjEJCQkJXAogCVJFQURNRS5FTkdJTkUJCQkJXAogCWFwcHMvQ0EucGwuYmFrCQkJCVwKKwlhcHBzL01ha2VmaWxlCQkJCVwKKwlhcHBzL3BrZXkuYwkJCQlcCisJYXBwcy9wa2V5cGFyYW0uYwkJCVwKKwlhcHBzL3BrZXl1dGwuYwkJCQlcCisJYXBwcy90cy5jCQkJCVwKKwlhcHBzL3RzZ2V0CQkJCVwKIAljb25maWcJCQkJCVwKKwljcnlwdG8vTWFrZWZpbGUJCQkJXAorCWNyeXB0by9hZXMvTWFrZWZpbGUJCQlcCisJY3J5cHRvL2FzbjEvTWFrZWZpbGUJCQlcCisJY3J5cHRvL2Jpby9NYWtlZmlsZQkJCVwKKwljcnlwdG8vYm4vTWFrZWZpbGUJCQlcCisJY3J5cHRvL2J1ZmZlci9NYWtlZmlsZQkJCVwKKwljcnlwdG8vY2FtZWxsaWEvTWFrZWZpbGUJCVwKKwljcnlwdG8vY29tcC9NYWtlZmlsZQkJCVwKKwljcnlwdG8vY29uZi9NYWtlZmlsZQkJCVwKKwljcnlwdG8vZGVzL01ha2VmaWxlCQkJXAorCWNyeXB0by9kaC9NYWtlZmlsZQkJCVwKKwljcnlwdG8vZGgvZGhfcHJuLmMJCQlcCisJY3J5cHRvL2RzYS9NYWtlZmlsZQkJCVwKKwljcnlwdG8vZHNvL01ha2VmaWxlCQkJXAorCWNyeXB0by9kc28vZHNvX2Jlb3MuYwkJCVwKKwljcnlwdG8vZWMvTWFrZWZpbGUJCQlcCisJY3J5cHRvL2VjL2VjX2FtZXRoLmMJCQlcCisJY3J5cHRvL2VjL2VjX3BtZXRoLmMJCQlcCisJY3J5cHRvL2VjL2Vja19wcm4uYwkJCVwKKwljcnlwdG8vZWNkaC9NYWtlZmlsZQkJCVwKKwljcnlwdG8vZWNkc2EvTWFrZWZpbGUJCQlcCisJY3J5cHRvL2VuZ2luZS9NYWtlZmlsZQkJCVwKKwljcnlwdG8vZW5naW5lL3RiX2Fzbm10aC5jCQlcCisJY3J5cHRvL2VuZ2luZS90Yl9wa21ldGguYwkJXAorCWNyeXB0by9lcnIvTWFrZWZpbGUJCQlcCisJY3J5cHRvL2V2cC9NYWtlZmlsZQkJCVwKKwljcnlwdG8vaG1hYy9NYWtlZmlsZQkJCVwKKwljcnlwdG8vanBha2UvTWFrZWZpbGUJCQlcCisJY3J5cHRvL2tyYjUvTWFrZWZpbGUJCQlcCisJY3J5cHRvL2xoYXNoL01ha2VmaWxlCQkJXAorCWNyeXB0by9tZDQvTWFrZWZpbGUJCQlcCisJY3J5cHRvL21kNS9NYWtlZmlsZQkJCVwKKwljcnlwdG8vbWRjMi9NYWtlZmlsZQkJCVwKKwljcnlwdG8vbW9kZXMvTWFrZWZpbGUJCQlcCisJY3J5cHRvL21vZGVzL2N0czEyOC5jCQkJXAorCWNyeXB0by9tb2Rlcy9tb2Rlcy5oCQkJXAorCWNyeXB0by9vYmplY3RzL01ha2VmaWxlCQkJXAorCWNyeXB0by9vY3NwL01ha2VmaWxlCQkJXAogCWNyeXB0by9vcGVuc3NsY29uZi5oLmJhawkJXAorCWNyeXB0by9wZW0vTWFrZWZpbGUJCQlcCisJY3J5cHRvL3BrY3MxMi9NYWtlZmlsZQkJCVwKKwljcnlwdG8vcGtjczcvTWFrZWZpbGUJCQlcCisJY3J5cHRvL3BrY3M3L2Jpb19wazcuYwkJCVwKKwljcnlwdG8vcHF1ZXVlL01ha2VmaWxlCQkJXAorCWNyeXB0by9yYW5kL01ha2VmaWxlCQkJXAorCWNyeXB0by9yYzIvTWFrZWZpbGUJCQlcCisJY3J5cHRvL3JjNC9NYWtlZmlsZQkJCVwKKwljcnlwdG8vcmlwZW1kL01ha2VmaWxlCQkJXAorCWNyeXB0by9yc2EvTWFrZWZpbGUJCQlcCisJY3J5cHRvL3NoYS9NYWtlZmlsZQkJCVwKKwljcnlwdG8vc3RhY2svTWFrZWZpbGUJCQlcCisJY3J5cHRvL3N0b3JlL01ha2VmaWxlCQkJXAorCWNyeXB0by90cy9NYWtlZmlsZQkJCVwKKwljcnlwdG8vdHMvdHMuaAkJCQlcCisJY3J5cHRvL3RzL3RzX2FzbjEuYwkJCVwKKwljcnlwdG8vdHMvdHNfY29uZi5jCQkJXAorCWNyeXB0by90cy90c19saWIuYwkJCVwKKwljcnlwdG8vdHMvdHNfcmVxX3ByaW50LmMJCVwKKwljcnlwdG8vdHMvdHNfcmVxX3V0aWxzLmMJCVwKKwljcnlwdG8vdHMvdHNfcnNwX3ByaW50LmMJCVwKKwljcnlwdG8vdHMvdHNfcnNwX3NpZ24uYwkJCVwKKwljcnlwdG8vdHMvdHNfcnNwX3V0aWxzLmMJCVwKKwljcnlwdG8vdHMvdHNfcnNwX3ZlcmlmeS5jCQlcCisJY3J5cHRvL3RzL3RzX3ZlcmlmeV9jdHguYwkJXAorCWNyeXB0by90eHRfZGIvTWFrZWZpbGUJCQlcCisJY3J5cHRvL3VpL01ha2VmaWxlCQkJXAorCWNyeXB0by94NTA5L01ha2VmaWxlCQkJXAorCWNyeXB0by94NTA5djMvTWFrZWZpbGUJCQlcCiAJaW5jbHVkZS9vcGVuc3NsL2Jsb3dmaXNoLmgJCVwKKwlpbmNsdWRlL29wZW5zc2wvY2FtZWxsaWEuaAkJXAogCWluY2x1ZGUvb3BlbnNzbC9jYXN0LmgJCQlcCisJaW5jbHVkZS9vcGVuc3NsL2Ntcy5oCQkJXAogCWluY2x1ZGUvb3BlbnNzbC9pZGVhLmgJCQlcCiAJaW5jbHVkZS9vcGVuc3NsL21kMi5oCQkJXAorCWluY2x1ZGUvb3BlbnNzbC9tZGMyLmgJCQlcCisJaW5jbHVkZS9vcGVuc3NsL3NlZWQuaAkJCVwKKwlpbmNsdWRlL29wZW5zc2wvd2hybHBvb2wuaAkJXAogCWluc3RhbGwuY29tCQkJCVwKIAltYWtldm1zLmNvbQkJCQlcCiAJb3BlbnNzbC5kb3h5CQkJCVwKQEAgLTcyLDkgKzE1Miw3IEBACiAKIE9QRU5TU0xfUEFUQ0hFUz0iXAogICAgICAgICBwcm9ncy5wYXRjaCAgICAgICAgICAgICAgICAgXAotICAgICAgICBhcm0tYXNtLnBhdGNoICAgICAgICAgICAgICAgXAotICAgICAgICBzbWFsbF9yZWNvcmRzLnBhdGNoICAgICAgICAgXAotICAgICAgICBiYWRfdmVyc2lvbi5wYXRjaCIKKyAgICAgICAgc21hbGxfcmVjb3Jkcy5wYXRjaCIKICMgRGlzYWJsZWQgZm9yIGNvbXBhdGliaWxpdHkgYi8yNTg2MzQ3CiAjICAgICAgIGhhbmRzaGFrZV9jdXR0aHJvdWdoLnBhdGNoCiAKQEAgLTgyLDE5ICsxNjAsNiBAQAogCWFwcHMvcHJvZ3MuaCBcCiAJYXBwcy9zcGVlZC5jIgogCi1PUEVOU1NMX1BBVENIRVNfYXJtX2FzbV9TT1VSQ0VTPSJcCi0JMC45LjktZGV2L1JFQURNRS5hbmRyb2lkICAgICAgICAgIFwKLQkwLjkuOS1kZXYvYWVzL2Flcy1hcm12NC5wbCAgICAgICAgXAotCTAuOS45LWRldi9hZXMvYWVzLWFybXY0LnMgICAgICAgICBcCi0JMC45LjktZGV2L2JuL2FybXY0LW1vbnQucGwgICAgICAgIFwKLQkwLjkuOS1kZXYvYm4vYXJtdjQtbW9udC5zICAgICAgICAgXAotCTAuOS45LWRldi9zaGEvc2hhMS1hcm12NC1sYXJnZS5wbCBcCi0JMC45LjktZGV2L3NoYS9zaGExLWFybXY0LWxhcmdlLnMgIFwKLQkwLjkuOS1kZXYvc2hhL3NoYTI1Ni1hcm12NC5wbCAgICAgXAotCTAuOS45LWRldi9zaGEvc2hhMjU2LWFybXY0LnMgICAgICBcCi0JMC45LjktZGV2L3NoYS9zaGE1MTItYXJtdjQucGwgICAgIFwKLQkwLjkuOS1kZXYvc2hhL3NoYTUxMi1hcm12NC5zIgotCiBPUEVOU1NMX1BBVENIRVNfaGFuZHNoYWtlX2N1dHRocm91Z2hfU09VUkNFUz0iXAogCWFwcHMvc19jbGllbnQuYyBcCiAJc3NsL3MzX2NsbnQuYyAgIFwKQEAgLTEwNSw5ICsxNzAsNiBAQAogCXNzbC9zc2x0ZXN0LmMgICBcCiAJdGVzdC90ZXN0c3NsIgogCi1PUEVOU1NMX1BBVENIRVNfaGFuZHNoYWtlX2N1dHRocm91Z2hfU09VUkNFUz0iXAotCWNyeXB0by9lcnIvZXJyX2FsbC5jIgotCiBPUEVOU1NMX1BBVENIRVNfc21hbGxfcmVjb3Jkc19TT1VSQ0VTPSJcCiAJc3NsL2QxX3BrdC5jICAgXAogCXNzbC9zMjNfc3J2ci5jIFwKQEAgLTExNyw2ICsxNzksMyBAQAogCXNzbC9zc2wzLmggICAgIFwKIAlzc2wvc3NsdGVzdC5jICBcCiAJdGVzdC90ZXN0c3NsIgotCi1PUEVOU1NMX1BBVENIRVNfYmFkX3ZlcnNpb25fU09VUkNFUz0iXAotCXNzbC9zM19wa3QuYyIKZGlmZiAtLWdpdCBhL29wZW5zc2wudmVyc2lvbiBiL29wZW5zc2wudmVyc2lvbgppbmRleCA2ZDM2OGU3Li42MTY1OGRiIDEwMDY0NAotLS0gYS9vcGVuc3NsLnZlcnNpb24KKysrIGIvb3BlbnNzbC52ZXJzaW9uCkBAIC0xICsxIEBACi1PUEVOU1NMX1ZFUlNJT049MC45LjhtCitPUEVOU1NMX1ZFUlNJT049MS4wLjAKZGlmZiAtLWdpdCBhL3BhdGNoZXMvUkVBRE1FIGIvcGF0Y2hlcy9SRUFETUUKaW5kZXggYTk1NjQ2Yy4uODU2ZjE4YSAxMDA2NDQKLS0tIGEvcGF0Y2hlcy9SRUFETUUKKysrIGIvcGF0Y2hlcy9SRUFETUUKQEAgLTMsMTEgKzMsNiBAQAogRml4dXAgc291cmNlcyB1bmRlciB0aGUgYXBwcy8gZGlyZWN0b3J5IHRoYXQgYXJlIG5vdCBidWlsdCB1bmRlciB0aGUgYW5kcm9pZCBlbnZpcm9ubWVudC4KIAogCi1hcm0tYXNtLnBhdGNoLnBhdGNoOgotCi1BUk0gYXNzZW1ibHkgcm91dGluZXMgKEFFUywgQk4sIFNIQTEsIFNIQTI1NiwgU0hBNTEyKQotCi0KIHNtYWxsX3JlY29yZHMucGF0Y2g6CiAKIFJlZHVjZSBPcGVuU1NMIG1lbW9yeSBjb25zdW1wdGlvbi4KQEAgLTI2LDEyICsyMSwzIEBACiBGaW5pc2hlZCBtZXNzYWdlIGV2ZW4gd2hlbiBuZWdvdGlhdGluZyBmdWxsLWhhbmRzaGFrZXMuICBXaXRoIHRoaXMgcGF0Y2gsCiBjbGllbnRzIGNhbiBuZWdvdGlhdGUgU1NMIGNvbm5lY3Rpb25zIGluIDEtUlRUIGV2ZW4gd2hlbiBwZXJmb3JtaW5nCiBmdWxsLWhhbmRzaGFrZXMuCi0KLQotYmFkX3ZlcnNpb24ucGF0Y2gKLQotQWRkcmVzc2VzIENWRS0yMDEwLTA3NDAgaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9uZXdzL3NlY2Fkdl8yMDEwMDMyNC50eHQKLUEgcGVlciBjYW4gc2VuZCB1cyBhIG1hbC1mb3JtZWQgcGFja2V0IGFuZCB3ZSdsbCBjb3B5IGl0cyAndmVyc2lvbicKLW51bWJlciBpbiBvcmRlciB0byBzZW5kIGFuIGVycm9yIGJhY2suIEhvd2V2ZXIsIGlmIHRoZSB2ZXJzaW9uIG51bWJlcgotaXMgYW4gaW50ZXJuYWwgT3BlblNTTCB2YWx1ZSAobGlrZSBEVExTMV9WRVJTSU9OKSB0aGVuIHdlJ2xsIGFzc3VtZQotdGhhdCB3ZSBoYXZlIGEgdmFsaWQgRFRMUyBzdGF0ZSBhbmQgY3Jhc2ggd2hlbiBzZW5kaW5nIGFuIGFsZXJ0LgpkaWZmIC0tZ2l0IGEvcGF0Y2hlcy9hcHBzX0FuZHJvaWQubWsgYi9wYXRjaGVzL2FwcHNfQW5kcm9pZC5tawppbmRleCBlOWE0OTgxLi5hOTA4ODA2IDEwMDY0NAotLS0gYS9wYXRjaGVzL2FwcHNfQW5kcm9pZC5taworKysgYi9wYXRjaGVzL2FwcHNfQW5kcm9pZC5tawpAQCAtNCwxMyArNCw0OSBAQAogaW5jbHVkZSAkKENMRUFSX1ZBUlMpCiAKIExPQ0FMX1NSQ19GSUxFUzo9IFwKLSAgICBvcGVuc3NsLmMgdmVyaWZ5LmMgYXNuMXBhcnMuYyByZXEuYyBkZ3N0LmMgZGguYyBlbmMuYyBwYXNzd2QuYyBnZW5kaC5jIGVycnN0ci5jIGNhLmMgXAotICAgIHBrY3M3LmMgY3JsMnA3LmMgY3JsLmMgXAotICAgIHJzYS5jIHJzYXV0bC5jIGRzYS5jIGRzYXBhcmFtLmMgZWNwYXJhbS5jIFwKLSAgICB4NTA5LmMgZ2VucnNhLmMgZ2VuZHNhLmMgc19jbGllbnQuYyBzcGVlZC5jIFwKLSAgICBzX3RpbWUuYyAgYXBwcy5jIHNfY2IuYyBzX3NvY2tldC5jIGFwcF9yYW5kLmMgIHZlcnNpb24uYyBzZXNzX2lkLmMgXAotICAgIGNpcGhlcnMuYyBuc2VxLmMgcGtjczEyLmMgcGtjczguYyBzcGthYy5jIHNtaW1lLmMgcmFuZC5jIGVuZ2luZS5jIFwKLSAgICBvY3NwLmMgcHJpbWUuYyBkaHBhcmFtLmMKKwlhcHBfcmFuZC5jIFwKKwlhcHBzLmMgXAorCWFzbjFwYXJzLmMgXAorCWNhLmMgXAorCWNpcGhlcnMuYyBcCisJY3JsLmMgXAorCWNybDJwNy5jIFwKKwlkZ3N0LmMgXAorCWRoLmMgXAorCWRocGFyYW0uYyBcCisJZHNhLmMgXAorCWRzYXBhcmFtLmMgXAorCWVjcGFyYW0uYyBcCisJZW5jLmMgXAorCWVuZ2luZS5jIFwKKwllcnJzdHIuYyBcCisJZ2VuZGguYyBcCisJZ2VuZHNhLmMgXAorCWdlbnBrZXkuYyBcCisJZ2VucnNhLmMgXAorCW5zZXEuYyBcCisJb2NzcC5jIFwKKwlvcGVuc3NsLmMgXAorCXBhc3N3ZC5jIFwKKwlwa2NzMTIuYyBcCisJcGtjczcuYyBcCisJcGtjczguYyBcCisJcHJpbWUuYyBcCisJcmFuZC5jIFwKKwlyZXEuYyBcCisJcnNhLmMgXAorCXJzYXV0bC5jIFwKKwlzX2NiLmMgXAorCXNfY2xpZW50LmMgXAorCXNfc29ja2V0LmMgXAorCXNfdGltZS5jIFwKKwlzZXNzX2lkLmMgXAorCXNtaW1lLmMgXAorCXNwZWVkLmMgXAorCXNwa2FjLmMgXAorCXZlcmlmeS5jIFwKKwl2ZXJzaW9uLmMgXAorCXg1MDkuYwogCiAjICAgY21zLmMgZWMuYyBzX3NlcnZlci5jCiAKZGlmZiAtLWdpdCBhL3BhdGNoZXMvYXJtLWFzbS5wYXRjaCBiL3BhdGNoZXMvYXJtLWFzbS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM4Y2I0MC4uMDAwMDAwMAotLS0gYS9wYXRjaGVzL2FybS1hc20ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw1MTA2ICswLDAgQEAKLS0tLSAvZGV2L251bGwJMjAwOS0wNC0yNCAwNjowOTo0OC4wMDAwMDAwMDAgLTA3MDAKLSsrKyBvcGVuc3NsLTAuOS44aC9jcnlwdG8vMC45LjktZGV2L1JFQURNRS5hbmRyb2lkCTIwMDktMDktMDMgMTU6NDI6MzkuMDAwMDAwMDAwIC0wNzAwCi1AQCAtMCwwICsxLDYgQEAKLStUaGlzIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCBpbiB0aGUgT3BlblNTTCBkaXN0cmlidXRpb24uCi0rCi0rSXQgaGFzIGJlZW4gYWRkZWQgdG8gaW1wb3J0IGFzc2VtYmxlciBjb2RlIGZyb20gT3BlblNTTCAwLjkuOS1kZXYKLSsoZnRwOi8vZnRwLm9wZW5zc2wub3JnL3NuYXBzaG90LykuICBUaGUgYXNzZW1ibGVyIGZpbGVzICgucykgd2VyZQotK2dlbmVyYXRlZCBieSBydW5uaW5nIHRoZSBQZXJsIGZpbGVzICgucGwpLCB3aXRoICIuYWxpZ24gMiIgYXBwZW5kZWQKLSt0byBhdm9pZCBhc3NlbWJsZXIgZXJyb3IgbWVzc2FnZXMgd2hlcmUgbmVlZGVkLgotLS0tIC9kZXYvbnVsbAkyMDA5LTA0LTI0IDA2OjA5OjQ4LjAwMDAwMDAwMCAtMDcwMAotKysrIG9wZW5zc2wtMC45LjhoL2NyeXB0by8wLjkuOS1kZXYvYWVzL2Flcy1hcm12NC5wbAkyMDA5LTA5LTAzIDE1OjQyOjM5LjAwMDAwMDAwMCAtMDcwMAotQEAgLTAsMCArMSwxMDMwIEBACi0rIyEvdXNyL2Jpbi9lbnYgcGVybAotKwotKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsjIFdyaXR0ZW4gYnkgQW5keSBQb2x5YWtvdiA8YXBwcm9AZnkuY2hhbG1lcnMuc2U+IGZvciB0aGUgT3BlblNTTAotKyMgcHJvamVjdC4gVGhlIG1vZHVsZSBpcywgaG93ZXZlciwgZHVhbCBsaWNlbnNlZCB1bmRlciBPcGVuU1NMIGFuZAotKyMgQ1JZUFRPR0FNUyBsaWNlbnNlcyBkZXBlbmRpbmcgb24gd2hlcmUgeW91IG9idGFpbiBpdC4gRm9yIGZ1cnRoZXIKLSsjIGRldGFpbHMgc2VlIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvfmFwcHJvL2NyeXB0b2dhbXMvLgotKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsKLSsjIEFFUyBmb3IgQVJNdjQKLSsKLSsjIEphbnVhcnkgMjAwNy4KLSsjCi0rIyBDb2RlIHVzZXMgc2luZ2xlIDFLIFMtYm94IGFuZCBpcyA+MiB0aW1lcyBmYXN0ZXIgdGhhbiBjb2RlIGdlbmVyYXRlZAotKyMgYnkgZ2NjLTMuNC4xLiBUaGlzIGlzIHRoYW5rcyB0byB1bmlxdWUgZmVhdHVyZSBvZiBBUk12NCBJU0EsIHdoaWNoCi0rIyBhbGxvd3MgdG8gbWVyZ2UgbG9naWNhbCBvciBhcml0aG1ldGljIG9wZXJhdGlvbiB3aXRoIHNoaWZ0IG9yIHJvdGF0ZQotKyMgaW4gb25lIGluc3RydWN0aW9uIGFuZCBlbWl0IGNvbWJpbmVkIHJlc3VsdCBldmVyeSBjeWNsZS4gVGhlIG1vZHVsZQotKyMgaXMgZW5kaWFuLW5ldXRyYWwuIFRoZSBwZXJmb3JtYW5jZSBpcyB+NDIgY3ljbGVzL2J5dGUgZm9yIDEyOC1iaXQKLSsjIGtleS4KLSsKLSsjIE1heSAyMDA3LgotKyMKLSsjIEFFU19zZXRfW2VufGRlXWNyeXB0X2tleSBpcyBhZGRlZC4KLSsKLSskczA9InIwIjsKLSskczE9InIxIjsKLSskczI9InIyIjsKLSskczM9InIzIjsKLSskdDE9InI0IjsKLSskdDI9InI1IjsKLSskdDM9InI2IjsKLSskaTE9InI3IjsKLSskaTI9InI4IjsKLSskaTM9InI5IjsKLSsKLSskdGJsPSJyMTAiOwotKyRrZXk9InIxMSI7Ci0rJHJvdW5kcz0icjEyIjsKLSsKLSskY29kZT08PF9fXzsKLSsudGV4dAotKy5jb2RlCTMyCi0rCi0rLnR5cGUJQUVTX1RlLCVvYmplY3QKLSsuYWxpZ24JNQotK0FFU19UZToKLSsud29yZAkweGM2NjM2M2E1LCAweGY4N2M3Yzg0LCAweGVlNzc3Nzk5LCAweGY2N2I3YjhkCi0rLndvcmQJMHhmZmYyZjIwZCwgMHhkNjZiNmJiZCwgMHhkZTZmNmZiMSwgMHg5MWM1YzU1NAotKy53b3JkCTB4NjAzMDMwNTAsIDB4MDIwMTAxMDMsIDB4Y2U2NzY3YTksIDB4NTYyYjJiN2QKLSsud29yZAkweGU3ZmVmZTE5LCAweGI1ZDdkNzYyLCAweDRkYWJhYmU2LCAweGVjNzY3NjlhCi0rLndvcmQJMHg4ZmNhY2E0NSwgMHgxZjgyODI5ZCwgMHg4OWM5Yzk0MCwgMHhmYTdkN2Q4NwotKy53b3JkCTB4ZWZmYWZhMTUsIDB4YjI1OTU5ZWIsIDB4OGU0NzQ3YzksIDB4ZmJmMGYwMGIKLSsud29yZAkweDQxYWRhZGVjLCAweGIzZDRkNDY3LCAweDVmYTJhMmZkLCAweDQ1YWZhZmVhCi0rLndvcmQJMHgyMzljOWNiZiwgMHg1M2E0YTRmNywgMHhlNDcyNzI5NiwgMHg5YmMwYzA1YgotKy53b3JkCTB4NzViN2I3YzIsIDB4ZTFmZGZkMWMsIDB4M2Q5MzkzYWUsIDB4NGMyNjI2NmEKLSsud29yZAkweDZjMzYzNjVhLCAweDdlM2YzZjQxLCAweGY1ZjdmNzAyLCAweDgzY2NjYzRmCi0rLndvcmQJMHg2ODM0MzQ1YywgMHg1MWE1YTVmNCwgMHhkMWU1ZTUzNCwgMHhmOWYxZjEwOAotKy53b3JkCTB4ZTI3MTcxOTMsIDB4YWJkOGQ4NzMsIDB4NjIzMTMxNTMsIDB4MmExNTE1M2YKLSsud29yZAkweDA4MDQwNDBjLCAweDk1YzdjNzUyLCAweDQ2MjMyMzY1LCAweDlkYzNjMzVlCi0rLndvcmQJMHgzMDE4MTgyOCwgMHgzNzk2OTZhMSwgMHgwYTA1MDUwZiwgMHgyZjlhOWFiNQotKy53b3JkCTB4MGUwNzA3MDksIDB4MjQxMjEyMzYsIDB4MWI4MDgwOWIsIDB4ZGZlMmUyM2QKLSsud29yZAkweGNkZWJlYjI2LCAweDRlMjcyNzY5LCAweDdmYjJiMmNkLCAweGVhNzU3NTlmCi0rLndvcmQJMHgxMjA5MDkxYiwgMHgxZDgzODM5ZSwgMHg1ODJjMmM3NCwgMHgzNDFhMWEyZQotKy53b3JkCTB4MzYxYjFiMmQsIDB4ZGM2ZTZlYjIsIDB4YjQ1YTVhZWUsIDB4NWJhMGEwZmIKLSsud29yZAkweGE0NTI1MmY2LCAweDc2M2IzYjRkLCAweGI3ZDZkNjYxLCAweDdkYjNiM2NlCi0rLndvcmQJMHg1MjI5Mjk3YiwgMHhkZGUzZTMzZSwgMHg1ZTJmMmY3MSwgMHgxMzg0ODQ5NwotKy53b3JkCTB4YTY1MzUzZjUsIDB4YjlkMWQxNjgsIDB4MDAwMDAwMDAsIDB4YzFlZGVkMmMKLSsud29yZAkweDQwMjAyMDYwLCAweGUzZmNmYzFmLCAweDc5YjFiMWM4LCAweGI2NWI1YmVkCi0rLndvcmQJMHhkNDZhNmFiZSwgMHg4ZGNiY2I0NiwgMHg2N2JlYmVkOSwgMHg3MjM5Mzk0YgotKy53b3JkCTB4OTQ0YTRhZGUsIDB4OTg0YzRjZDQsIDB4YjA1ODU4ZTgsIDB4ODVjZmNmNGEKLSsud29yZAkweGJiZDBkMDZiLCAweGM1ZWZlZjJhLCAweDRmYWFhYWU1LCAweGVkZmJmYjE2Ci0rLndvcmQJMHg4NjQzNDNjNSwgMHg5YTRkNGRkNywgMHg2NjMzMzM1NSwgMHgxMTg1ODU5NAotKy53b3JkCTB4OGE0NTQ1Y2YsIDB4ZTlmOWY5MTAsIDB4MDQwMjAyMDYsIDB4ZmU3ZjdmODEKLSsud29yZAkweGEwNTA1MGYwLCAweDc4M2MzYzQ0LCAweDI1OWY5ZmJhLCAweDRiYThhOGUzCi0rLndvcmQJMHhhMjUxNTFmMywgMHg1ZGEzYTNmZSwgMHg4MDQwNDBjMCwgMHgwNThmOGY4YQotKy53b3JkCTB4M2Y5MjkyYWQsIDB4MjE5ZDlkYmMsIDB4NzAzODM4NDgsIDB4ZjFmNWY1MDQKLSsud29yZAkweDYzYmNiY2RmLCAweDc3YjZiNmMxLCAweGFmZGFkYTc1LCAweDQyMjEyMTYzCi0rLndvcmQJMHgyMDEwMTAzMCwgMHhlNWZmZmYxYSwgMHhmZGYzZjMwZSwgMHhiZmQyZDI2ZAotKy53b3JkCTB4ODFjZGNkNGMsIDB4MTgwYzBjMTQsIDB4MjYxMzEzMzUsIDB4YzNlY2VjMmYKLSsud29yZAkweGJlNWY1ZmUxLCAweDM1OTc5N2EyLCAweDg4NDQ0NGNjLCAweDJlMTcxNzM5Ci0rLndvcmQJMHg5M2M0YzQ1NywgMHg1NWE3YTdmMiwgMHhmYzdlN2U4MiwgMHg3YTNkM2Q0NwotKy53b3JkCTB4Yzg2NDY0YWMsIDB4YmE1ZDVkZTcsIDB4MzIxOTE5MmIsIDB4ZTY3MzczOTUKLSsud29yZAkweGMwNjA2MGEwLCAweDE5ODE4MTk4LCAweDllNGY0ZmQxLCAweGEzZGNkYzdmCi0rLndvcmQJMHg0NDIyMjI2NiwgMHg1NDJhMmE3ZSwgMHgzYjkwOTBhYiwgMHgwYjg4ODg4MwotKy53b3JkCTB4OGM0NjQ2Y2EsIDB4YzdlZWVlMjksIDB4NmJiOGI4ZDMsIDB4MjgxNDE0M2MKLSsud29yZAkweGE3ZGVkZTc5LCAweGJjNWU1ZWUyLCAweDE2MGIwYjFkLCAweGFkZGJkYjc2Ci0rLndvcmQJMHhkYmUwZTAzYiwgMHg2NDMyMzI1NiwgMHg3NDNhM2E0ZSwgMHgxNDBhMGExZQotKy53b3JkCTB4OTI0OTQ5ZGIsIDB4MGMwNjA2MGEsIDB4NDgyNDI0NmMsIDB4Yjg1YzVjZTQKLSsud29yZAkweDlmYzJjMjVkLCAweGJkZDNkMzZlLCAweDQzYWNhY2VmLCAweGM0NjI2MmE2Ci0rLndvcmQJMHgzOTkxOTFhOCwgMHgzMTk1OTVhNCwgMHhkM2U0ZTQzNywgMHhmMjc5Nzk4YgotKy53b3JkCTB4ZDVlN2U3MzIsIDB4OGJjOGM4NDMsIDB4NmUzNzM3NTksIDB4ZGE2ZDZkYjcKLSsud29yZAkweDAxOGQ4ZDhjLCAweGIxZDVkNTY0LCAweDljNGU0ZWQyLCAweDQ5YTlhOWUwCi0rLndvcmQJMHhkODZjNmNiNCwgMHhhYzU2NTZmYSwgMHhmM2Y0ZjQwNywgMHhjZmVhZWEyNQotKy53b3JkCTB4Y2E2NTY1YWYsIDB4ZjQ3YTdhOGUsIDB4NDdhZWFlZTksIDB4MTAwODA4MTgKLSsud29yZAkweDZmYmFiYWQ1LCAweGYwNzg3ODg4LCAweDRhMjUyNTZmLCAweDVjMmUyZTcyCi0rLndvcmQJMHgzODFjMWMyNCwgMHg1N2E2YTZmMSwgMHg3M2I0YjRjNywgMHg5N2M2YzY1MQotKy53b3JkCTB4Y2JlOGU4MjMsIDB4YTFkZGRkN2MsIDB4ZTg3NDc0OWMsIDB4M2UxZjFmMjEKLSsud29yZAkweDk2NGI0YmRkLCAweDYxYmRiZGRjLCAweDBkOGI4Yjg2LCAweDBmOGE4YTg1Ci0rLndvcmQJMHhlMDcwNzA5MCwgMHg3YzNlM2U0MiwgMHg3MWI1YjVjNCwgMHhjYzY2NjZhYQotKy53b3JkCTB4OTA0ODQ4ZDgsIDB4MDYwMzAzMDUsIDB4ZjdmNmY2MDEsIDB4MWMwZTBlMTIKLSsud29yZAkweGMyNjE2MWEzLCAweDZhMzUzNTVmLCAweGFlNTc1N2Y5LCAweDY5YjliOWQwCi0rLndvcmQJMHgxNzg2ODY5MSwgMHg5OWMxYzE1OCwgMHgzYTFkMWQyNywgMHgyNzllOWViOQotKy53b3JkCTB4ZDllMWUxMzgsIDB4ZWJmOGY4MTMsIDB4MmI5ODk4YjMsIDB4MjIxMTExMzMKLSsud29yZAkweGQyNjk2OWJiLCAweGE5ZDlkOTcwLCAweDA3OGU4ZTg5LCAweDMzOTQ5NGE3Ci0rLndvcmQJMHgyZDliOWJiNiwgMHgzYzFlMWUyMiwgMHgxNTg3ODc5MiwgMHhjOWU5ZTkyMAotKy53b3JkCTB4ODdjZWNlNDksIDB4YWE1NTU1ZmYsIDB4NTAyODI4NzgsIDB4YTVkZmRmN2EKLSsud29yZAkweDAzOGM4YzhmLCAweDU5YTFhMWY4LCAweDA5ODk4OTgwLCAweDFhMGQwZDE3Ci0rLndvcmQJMHg2NWJmYmZkYSwgMHhkN2U2ZTYzMSwgMHg4NDQyNDJjNiwgMHhkMDY4NjhiOAotKy53b3JkCTB4ODI0MTQxYzMsIDB4Mjk5OTk5YjAsIDB4NWEyZDJkNzcsIDB4MWUwZjBmMTEKLSsud29yZAkweDdiYjBiMGNiLCAweGE4NTQ1NGZjLCAweDZkYmJiYmQ2LCAweDJjMTYxNjNhCi0rQCBUZTRbMjU2XQotKy5ieXRlCTB4NjMsIDB4N2MsIDB4NzcsIDB4N2IsIDB4ZjIsIDB4NmIsIDB4NmYsIDB4YzUKLSsuYnl0ZQkweDMwLCAweDAxLCAweDY3LCAweDJiLCAweGZlLCAweGQ3LCAweGFiLCAweDc2Ci0rLmJ5dGUJMHhjYSwgMHg4MiwgMHhjOSwgMHg3ZCwgMHhmYSwgMHg1OSwgMHg0NywgMHhmMAotKy5ieXRlCTB4YWQsIDB4ZDQsIDB4YTIsIDB4YWYsIDB4OWMsIDB4YTQsIDB4NzIsIDB4YzAKLSsuYnl0ZQkweGI3LCAweGZkLCAweDkzLCAweDI2LCAweDM2LCAweDNmLCAweGY3LCAweGNjCi0rLmJ5dGUJMHgzNCwgMHhhNSwgMHhlNSwgMHhmMSwgMHg3MSwgMHhkOCwgMHgzMSwgMHgxNQotKy5ieXRlCTB4MDQsIDB4YzcsIDB4MjMsIDB4YzMsIDB4MTgsIDB4OTYsIDB4MDUsIDB4OWEKLSsuYnl0ZQkweDA3LCAweDEyLCAweDgwLCAweGUyLCAweGViLCAweDI3LCAweGIyLCAweDc1Ci0rLmJ5dGUJMHgwOSwgMHg4MywgMHgyYywgMHgxYSwgMHgxYiwgMHg2ZSwgMHg1YSwgMHhhMAotKy5ieXRlCTB4NTIsIDB4M2IsIDB4ZDYsIDB4YjMsIDB4MjksIDB4ZTMsIDB4MmYsIDB4ODQKLSsuYnl0ZQkweDUzLCAweGQxLCAweDAwLCAweGVkLCAweDIwLCAweGZjLCAweGIxLCAweDViCi0rLmJ5dGUJMHg2YSwgMHhjYiwgMHhiZSwgMHgzOSwgMHg0YSwgMHg0YywgMHg1OCwgMHhjZgotKy5ieXRlCTB4ZDAsIDB4ZWYsIDB4YWEsIDB4ZmIsIDB4NDMsIDB4NGQsIDB4MzMsIDB4ODUKLSsuYnl0ZQkweDQ1LCAweGY5LCAweDAyLCAweDdmLCAweDUwLCAweDNjLCAweDlmLCAweGE4Ci0rLmJ5dGUJMHg1MSwgMHhhMywgMHg0MCwgMHg4ZiwgMHg5MiwgMHg5ZCwgMHgzOCwgMHhmNQotKy5ieXRlCTB4YmMsIDB4YjYsIDB4ZGEsIDB4MjEsIDB4MTAsIDB4ZmYsIDB4ZjMsIDB4ZDIKLSsuYnl0ZQkweGNkLCAweDBjLCAweDEzLCAweGVjLCAweDVmLCAweDk3LCAweDQ0LCAweDE3Ci0rLmJ5dGUJMHhjNCwgMHhhNywgMHg3ZSwgMHgzZCwgMHg2NCwgMHg1ZCwgMHgxOSwgMHg3MwotKy5ieXRlCTB4NjAsIDB4ODEsIDB4NGYsIDB4ZGMsIDB4MjIsIDB4MmEsIDB4OTAsIDB4ODgKLSsuYnl0ZQkweDQ2LCAweGVlLCAweGI4LCAweDE0LCAweGRlLCAweDVlLCAweDBiLCAweGRiCi0rLmJ5dGUJMHhlMCwgMHgzMiwgMHgzYSwgMHgwYSwgMHg0OSwgMHgwNiwgMHgyNCwgMHg1YwotKy5ieXRlCTB4YzIsIDB4ZDMsIDB4YWMsIDB4NjIsIDB4OTEsIDB4OTUsIDB4ZTQsIDB4NzkKLSsuYnl0ZQkweGU3LCAweGM4LCAweDM3LCAweDZkLCAweDhkLCAweGQ1LCAweDRlLCAweGE5Ci0rLmJ5dGUJMHg2YywgMHg1NiwgMHhmNCwgMHhlYSwgMHg2NSwgMHg3YSwgMHhhZSwgMHgwOAotKy5ieXRlCTB4YmEsIDB4NzgsIDB4MjUsIDB4MmUsIDB4MWMsIDB4YTYsIDB4YjQsIDB4YzYKLSsuYnl0ZQkweGU4LCAweGRkLCAweDc0LCAweDFmLCAweDRiLCAweGJkLCAweDhiLCAweDhhCi0rLmJ5dGUJMHg3MCwgMHgzZSwgMHhiNSwgMHg2NiwgMHg0OCwgMHgwMywgMHhmNiwgMHgwZQotKy5ieXRlCTB4NjEsIDB4MzUsIDB4NTcsIDB4YjksIDB4ODYsIDB4YzEsIDB4MWQsIDB4OWUKLSsuYnl0ZQkweGUxLCAweGY4LCAweDk4LCAweDExLCAweDY5LCAweGQ5LCAweDhlLCAweDk0Ci0rLmJ5dGUJMHg5YiwgMHgxZSwgMHg4NywgMHhlOSwgMHhjZSwgMHg1NSwgMHgyOCwgMHhkZgotKy5ieXRlCTB4OGMsIDB4YTEsIDB4ODksIDB4MGQsIDB4YmYsIDB4ZTYsIDB4NDIsIDB4NjgKLSsuYnl0ZQkweDQxLCAweDk5LCAweDJkLCAweDBmLCAweGIwLCAweDU0LCAweGJiLCAweDE2Ci0rQCByY29uW10KLSsud29yZAkweDAxMDAwMDAwLCAweDAyMDAwMDAwLCAweDA0MDAwMDAwLCAweDA4MDAwMDAwCi0rLndvcmQJMHgxMDAwMDAwMCwgMHgyMDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg4MDAwMDAwMAotKy53b3JkCTB4MUIwMDAwMDAsIDB4MzYwMDAwMDAsIDAsIDAsIDAsIDAsIDAsIDAKLSsuc2l6ZQlBRVNfVGUsLi1BRVNfVGUKLSsKLStAIHZvaWQgQUVTX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKLStAIAkJIGNvbnN0IEFFU19LRVkgKmtleSkgewotKy5nbG9iYWwgQUVTX2VuY3J5cHQKLSsudHlwZSAgIEFFU19lbmNyeXB0LCVmdW5jdGlvbgotKy5hbGlnbgk1Ci0rQUVTX2VuY3J5cHQ6Ci0rCXN1YglyMyxwYywjOAkJQCBBRVNfZW5jcnlwdAotKwlzdG1kYiAgIHNwISx7cjEscjQtcjEyLGxyfQotKwltb3YJJHJvdW5kcyxyMAkJQCBpbnAKLSsJbW92CSRrZXkscjIKLSsJc3ViCSR0YmwscjMsI0FFU19lbmNyeXB0LUFFU19UZQlAIFRlCi0rCi0rCWxkcmIJJHMwLFskcm91bmRzLCMzXQlAIGxvYWQgaW5wdXQgZGF0YSBpbiBlbmRpYW4tbmV1dHJhbAotKwlsZHJiCSR0MSxbJHJvdW5kcywjMl0JQCBtYW5uZXIuLi4KLSsJbGRyYgkkdDIsWyRyb3VuZHMsIzFdCi0rCWxkcmIJJHQzLFskcm91bmRzLCMwXQotKwlvcnIJJHMwLCRzMCwkdDEsbHNsIzgKLSsJb3JyCSRzMCwkczAsJHQyLGxzbCMxNgotKwlvcnIJJHMwLCRzMCwkdDMsbHNsIzI0Ci0rCWxkcmIJJHMxLFskcm91bmRzLCM3XQotKwlsZHJiCSR0MSxbJHJvdW5kcywjNl0KLSsJbGRyYgkkdDIsWyRyb3VuZHMsIzVdCi0rCWxkcmIJJHQzLFskcm91bmRzLCM0XQotKwlvcnIJJHMxLCRzMSwkdDEsbHNsIzgKLSsJb3JyCSRzMSwkczEsJHQyLGxzbCMxNgotKwlvcnIJJHMxLCRzMSwkdDMsbHNsIzI0Ci0rCWxkcmIJJHMyLFskcm91bmRzLCMxMV0KLSsJbGRyYgkkdDEsWyRyb3VuZHMsIzEwXQotKwlsZHJiCSR0MixbJHJvdW5kcywjOV0KLSsJbGRyYgkkdDMsWyRyb3VuZHMsIzhdCi0rCW9ycgkkczIsJHMyLCR0MSxsc2wjOAotKwlvcnIJJHMyLCRzMiwkdDIsbHNsIzE2Ci0rCW9ycgkkczIsJHMyLCR0Myxsc2wjMjQKLSsJbGRyYgkkczMsWyRyb3VuZHMsIzE1XQotKwlsZHJiCSR0MSxbJHJvdW5kcywjMTRdCi0rCWxkcmIJJHQyLFskcm91bmRzLCMxM10KLSsJbGRyYgkkdDMsWyRyb3VuZHMsIzEyXQotKwlvcnIJJHMzLCRzMywkdDEsbHNsIzgKLSsJb3JyCSRzMywkczMsJHQyLGxzbCMxNgotKwlvcnIJJHMzLCRzMywkdDMsbHNsIzI0Ci0rCi0rCWJsCV9hcm12NF9BRVNfZW5jcnlwdAotKwotKwlsZHIJJHJvdW5kcyxbc3BdLCM0CQlAIHBvcCBvdXQKLSsJbW92CSR0MSwkczAsbHNyIzI0CQlAIHdyaXRlIG91dHB1dCBpbiBlbmRpYW4tbmV1dHJhbAotKwltb3YJJHQyLCRzMCxsc3IjMTYJCUAgbWFubmVyLi4uCi0rCW1vdgkkdDMsJHMwLGxzciM4Ci0rCXN0cmIJJHQxLFskcm91bmRzLCMwXQotKwlzdHJiCSR0MixbJHJvdW5kcywjMV0KLSsJc3RyYgkkdDMsWyRyb3VuZHMsIzJdCi0rCXN0cmIJJHMwLFskcm91bmRzLCMzXQotKwltb3YJJHQxLCRzMSxsc3IjMjQKLSsJbW92CSR0MiwkczEsbHNyIzE2Ci0rCW1vdgkkdDMsJHMxLGxzciM4Ci0rCXN0cmIJJHQxLFskcm91bmRzLCM0XQotKwlzdHJiCSR0MixbJHJvdW5kcywjNV0KLSsJc3RyYgkkdDMsWyRyb3VuZHMsIzZdCi0rCXN0cmIJJHMxLFskcm91bmRzLCM3XQotKwltb3YJJHQxLCRzMixsc3IjMjQKLSsJbW92CSR0MiwkczIsbHNyIzE2Ci0rCW1vdgkkdDMsJHMyLGxzciM4Ci0rCXN0cmIJJHQxLFskcm91bmRzLCM4XQotKwlzdHJiCSR0MixbJHJvdW5kcywjOV0KLSsJc3RyYgkkdDMsWyRyb3VuZHMsIzEwXQotKwlzdHJiCSRzMixbJHJvdW5kcywjMTFdCi0rCW1vdgkkdDEsJHMzLGxzciMyNAotKwltb3YJJHQyLCRzMyxsc3IjMTYKLSsJbW92CSR0MywkczMsbHNyIzgKLSsJc3RyYgkkdDEsWyRyb3VuZHMsIzEyXQotKwlzdHJiCSR0MixbJHJvdW5kcywjMTNdCi0rCXN0cmIJJHQzLFskcm91bmRzLCMxNF0KLSsJc3RyYgkkczMsWyRyb3VuZHMsIzE1XQotKwotKwlsZG1pYSAgIHNwISx7cjQtcjEyLGxyfQotKwl0c3QJbHIsIzEKLSsJbW92ZXEJcGMsbHIJCQlAIGJlIGJpbmFyeSBjb21wYXRpYmxlIHdpdGggVjQsIHlldAotKwlieAlscgkJCUAgaW50ZXJvcGVyYWJsZSB3aXRoIFRodW1iIElTQTotKQotKy5zaXplCUFFU19lbmNyeXB0LC4tQUVTX2VuY3J5cHQKLSsKLSsudHlwZSAgIF9hcm12NF9BRVNfZW5jcnlwdCwlZnVuY3Rpb24KLSsuYWxpZ24JMgotK19hcm12NF9BRVNfZW5jcnlwdDoKLSsJc3RyCWxyLFtzcCwjLTRdIQkJQCBwdXNoIGxyCi0rCWxkcgkkdDEsWyRrZXldLCMxNgotKwlsZHIJJHQyLFska2V5LCMtMTJdCi0rCWxkcgkkdDMsWyRrZXksIy04XQotKwlsZHIJJGkxLFska2V5LCMtNF0KLSsJbGRyCSRyb3VuZHMsWyRrZXksIzI0MC0xNl0KLSsJZW9yCSRzMCwkczAsJHQxCi0rCWVvcgkkczEsJHMxLCR0MgotKwllb3IJJHMyLCRzMiwkdDMKLSsJZW9yCSRzMywkczMsJGkxCi0rCXN1Ygkkcm91bmRzLCRyb3VuZHMsIzEKLSsJbW92CWxyLCMyNTUKLSsKLSsuTGVuY19sb29wOgotKwlhbmQJJGkyLGxyLCRzMCxsc3IjOAotKwlhbmQJJGkzLGxyLCRzMCxsc3IjMTYKLSsJYW5kCSRpMSxsciwkczAKLSsJbW92CSRzMCwkczAsbHNyIzI0Ci0rCWxkcgkkdDEsWyR0YmwsJGkxLGxzbCMyXQlAIFRlM1tzMD4+MF0KLSsJbGRyCSRzMCxbJHRibCwkczAsbHNsIzJdCUAgVGUwW3MwPj4yNF0KLSsJbGRyCSR0MixbJHRibCwkaTIsbHNsIzJdCUAgVGUyW3MwPj44XQotKwlsZHIJJHQzLFskdGJsLCRpMyxsc2wjMl0JQCBUZTFbczA+PjE2XQotKwotKwlhbmQJJGkxLGxyLCRzMSxsc3IjMTYJQCBpMAotKwlhbmQJJGkyLGxyLCRzMQotKwlhbmQJJGkzLGxyLCRzMSxsc3IjOAotKwltb3YJJHMxLCRzMSxsc3IjMjQKLSsJbGRyCSRpMSxbJHRibCwkaTEsbHNsIzJdCUAgVGUxW3MxPj4xNl0KLSsJbGRyCSRzMSxbJHRibCwkczEsbHNsIzJdCUAgVGUwW3MxPj4yNF0KLSsJbGRyCSRpMixbJHRibCwkaTIsbHNsIzJdCUAgVGUzW3MxPj4wXQotKwlsZHIJJGkzLFskdGJsLCRpMyxsc2wjMl0JQCBUZTJbczE+PjhdCi0rCWVvcgkkczAsJHMwLCRpMSxyb3IjOAotKwllb3IJJHMxLCRzMSwkdDEscm9yIzI0Ci0rCWVvcgkkdDIsJHQyLCRpMixyb3IjOAotKwllb3IJJHQzLCR0MywkaTMscm9yIzgKLSsKLSsJYW5kCSRpMSxsciwkczIsbHNyIzgJQCBpMAotKwlhbmQJJGkyLGxyLCRzMixsc3IjMTYJQCBpMQotKwlhbmQJJGkzLGxyLCRzMgotKwltb3YJJHMyLCRzMixsc3IjMjQKLSsJbGRyCSRpMSxbJHRibCwkaTEsbHNsIzJdCUAgVGUyW3MyPj44XQotKwlsZHIJJGkyLFskdGJsLCRpMixsc2wjMl0JQCBUZTFbczI+PjE2XQotKwlsZHIJJHMyLFskdGJsLCRzMixsc2wjMl0JQCBUZTBbczI+PjI0XQotKwlsZHIJJGkzLFskdGJsLCRpMyxsc2wjMl0JQCBUZTNbczI+PjBdCi0rCWVvcgkkczAsJHMwLCRpMSxyb3IjMTYKLSsJZW9yCSRzMSwkczEsJGkyLHJvciM4Ci0rCWVvcgkkczIsJHMyLCR0Mixyb3IjMTYKLSsJZW9yCSR0MywkdDMsJGkzLHJvciMxNgotKwotKwlhbmQJJGkxLGxyLCRzMwkJQCBpMAotKwlhbmQJJGkyLGxyLCRzMyxsc3IjOAlAIGkxCi0rCWFuZAkkaTMsbHIsJHMzLGxzciMxNglAIGkyCi0rCW1vdgkkczMsJHMzLGxzciMyNAotKwlsZHIJJGkxLFskdGJsLCRpMSxsc2wjMl0JQCBUZTNbczM+PjBdCi0rCWxkcgkkaTIsWyR0YmwsJGkyLGxzbCMyXQlAIFRlMltzMz4+OF0KLSsJbGRyCSRpMyxbJHRibCwkaTMsbHNsIzJdCUAgVGUxW3MzPj4xNl0KLSsJbGRyCSRzMyxbJHRibCwkczMsbHNsIzJdCUAgVGUwW3MzPj4yNF0KLSsJZW9yCSRzMCwkczAsJGkxLHJvciMyNAotKwllb3IJJHMxLCRzMSwkaTIscm9yIzE2Ci0rCWVvcgkkczIsJHMyLCRpMyxyb3IjOAotKwllb3IJJHMzLCRzMywkdDMscm9yIzgKLSsKLSsJbGRyCSR0MSxbJGtleV0sIzE2Ci0rCWxkcgkkdDIsWyRrZXksIy0xMl0KLSsJbGRyCSR0MyxbJGtleSwjLThdCi0rCWxkcgkkaTEsWyRrZXksIy00XQotKwllb3IJJHMwLCRzMCwkdDEKLSsJZW9yCSRzMSwkczEsJHQyCi0rCWVvcgkkczIsJHMyLCR0MwotKwllb3IJJHMzLCRzMywkaTEKLSsKLSsJc3Vicwkkcm91bmRzLCRyb3VuZHMsIzEKLSsJYm5lCS5MZW5jX2xvb3AKLSsKLSsJYWRkCSR0YmwsJHRibCwjMgotKwotKwlhbmQJJGkxLGxyLCRzMAotKwlhbmQJJGkyLGxyLCRzMCxsc3IjOAotKwlhbmQJJGkzLGxyLCRzMCxsc3IjMTYKLSsJbW92CSRzMCwkczAsbHNyIzI0Ci0rCWxkcmIJJHQxLFskdGJsLCRpMSxsc2wjMl0JQCBUZTRbczA+PjBdCi0rCWxkcmIJJHMwLFskdGJsLCRzMCxsc2wjMl0JQCBUZTRbczA+PjI0XQotKwlsZHJiCSR0MixbJHRibCwkaTIsbHNsIzJdCUAgVGU0W3MwPj44XQotKwlsZHJiCSR0MyxbJHRibCwkaTMsbHNsIzJdCUAgVGU0W3MwPj4xNl0KLSsKLSsJYW5kCSRpMSxsciwkczEsbHNyIzE2CUAgaTAKLSsJYW5kCSRpMixsciwkczEKLSsJYW5kCSRpMyxsciwkczEsbHNyIzgKLSsJbW92CSRzMSwkczEsbHNyIzI0Ci0rCWxkcmIJJGkxLFskdGJsLCRpMSxsc2wjMl0JQCBUZTRbczE+PjE2XQotKwlsZHJiCSRzMSxbJHRibCwkczEsbHNsIzJdCUAgVGU0W3MxPj4yNF0KLSsJbGRyYgkkaTIsWyR0YmwsJGkyLGxzbCMyXQlAIFRlNFtzMT4+MF0KLSsJbGRyYgkkaTMsWyR0YmwsJGkzLGxzbCMyXQlAIFRlNFtzMT4+OF0KLSsJZW9yCSRzMCwkaTEsJHMwLGxzbCM4Ci0rCWVvcgkkczEsJHQxLCRzMSxsc2wjMjQKLSsJZW9yCSR0MiwkaTIsJHQyLGxzbCM4Ci0rCWVvcgkkdDMsJGkzLCR0Myxsc2wjOAotKwotKwlhbmQJJGkxLGxyLCRzMixsc3IjOAlAIGkwCi0rCWFuZAkkaTIsbHIsJHMyLGxzciMxNglAIGkxCi0rCWFuZAkkaTMsbHIsJHMyCi0rCW1vdgkkczIsJHMyLGxzciMyNAotKwlsZHJiCSRpMSxbJHRibCwkaTEsbHNsIzJdCUAgVGU0W3MyPj44XQotKwlsZHJiCSRpMixbJHRibCwkaTIsbHNsIzJdCUAgVGU0W3MyPj4xNl0KLSsJbGRyYgkkczIsWyR0YmwsJHMyLGxzbCMyXQlAIFRlNFtzMj4+MjRdCi0rCWxkcmIJJGkzLFskdGJsLCRpMyxsc2wjMl0JQCBUZTRbczI+PjBdCi0rCWVvcgkkczAsJGkxLCRzMCxsc2wjOAotKwllb3IJJHMxLCRzMSwkaTIsbHNsIzE2Ci0rCWVvcgkkczIsJHQyLCRzMixsc2wjMjQKLSsJZW9yCSR0MywkaTMsJHQzLGxzbCM4Ci0rCi0rCWFuZAkkaTEsbHIsJHMzCQlAIGkwCi0rCWFuZAkkaTIsbHIsJHMzLGxzciM4CUAgaTEKLSsJYW5kCSRpMyxsciwkczMsbHNyIzE2CUAgaTIKLSsJbW92CSRzMywkczMsbHNyIzI0Ci0rCWxkcmIJJGkxLFskdGJsLCRpMSxsc2wjMl0JQCBUZTRbczM+PjBdCi0rCWxkcmIJJGkyLFskdGJsLCRpMixsc2wjMl0JQCBUZTRbczM+PjhdCi0rCWxkcmIJJGkzLFskdGJsLCRpMyxsc2wjMl0JQCBUZTRbczM+PjE2XQotKwlsZHJiCSRzMyxbJHRibCwkczMsbHNsIzJdCUAgVGU0W3MzPj4yNF0KLSsJZW9yCSRzMCwkaTEsJHMwLGxzbCM4Ci0rCWVvcgkkczEsJHMxLCRpMixsc2wjOAotKwllb3IJJHMyLCRzMiwkaTMsbHNsIzE2Ci0rCWVvcgkkczMsJHQzLCRzMyxsc2wjMjQKLSsKLSsJbGRyCWxyLFtzcF0sIzQJCUAgcG9wIGxyCi0rCWxkcgkkdDEsWyRrZXksIzBdCi0rCWxkcgkkdDIsWyRrZXksIzRdCi0rCWxkcgkkdDMsWyRrZXksIzhdCi0rCWxkcgkkaTEsWyRrZXksIzEyXQotKwllb3IJJHMwLCRzMCwkdDEKLSsJZW9yCSRzMSwkczEsJHQyCi0rCWVvcgkkczIsJHMyLCR0MwotKwllb3IJJHMzLCRzMywkaTEKLSsKLSsJc3ViCSR0YmwsJHRibCwjMgotKwltb3YJcGMsbHIJCQlAIHJldHVybgotKy5zaXplCV9hcm12NF9BRVNfZW5jcnlwdCwuLV9hcm12NF9BRVNfZW5jcnlwdAotKwotKy5nbG9iYWwgQUVTX3NldF9lbmNyeXB0X2tleQotKy50eXBlICAgQUVTX3NldF9lbmNyeXB0X2tleSwlZnVuY3Rpb24KLSsuYWxpZ24JNQotK0FFU19zZXRfZW5jcnlwdF9rZXk6Ci0rCXN1YglyMyxwYywjOAkJQCBBRVNfc2V0X2VuY3J5cHRfa2V5Ci0rCXRlcQlyMCwjMAotKwltb3ZlcQlyMCwjLTEKLSsJYmVxCS5MYWJydAotKwl0ZXEJcjIsIzAKLSsJbW92ZXEJcjAsIy0xCi0rCWJlcQkuTGFicnQKLSsKLSsJdGVxCXIxLCMxMjgKLSsJYmVxCS5Mb2sKLSsJdGVxCXIxLCMxOTIKLSsJYmVxCS5Mb2sKLSsJdGVxCXIxLCMyNTYKLSsJbW92bmUJcjAsIy0xCi0rCWJuZQkuTGFicnQKLSsKLSsuTG9rOglzdG1kYiAgIHNwISx7cjQtcjEyLGxyfQotKwlzdWIJJHRibCxyMywjQUVTX3NldF9lbmNyeXB0X2tleS1BRVNfVGUtMTAyNAlAIFRlNAotKwotKwltb3YJJHJvdW5kcyxyMAkJQCBpbnAKLSsJbW92CWxyLHIxCQkJQCBiaXRzCi0rCW1vdgkka2V5LHIyCQkJQCBrZXkKLSsKLSsJbGRyYgkkczAsWyRyb3VuZHMsIzNdCUAgbG9hZCBpbnB1dCBkYXRhIGluIGVuZGlhbi1uZXV0cmFsCi0rCWxkcmIJJHQxLFskcm91bmRzLCMyXQlAIG1hbm5lci4uLgotKwlsZHJiCSR0MixbJHJvdW5kcywjMV0KLSsJbGRyYgkkdDMsWyRyb3VuZHMsIzBdCi0rCW9ycgkkczAsJHMwLCR0MSxsc2wjOAotKwlvcnIJJHMwLCRzMCwkdDIsbHNsIzE2Ci0rCW9ycgkkczAsJHMwLCR0Myxsc2wjMjQKLSsJbGRyYgkkczEsWyRyb3VuZHMsIzddCi0rCWxkcmIJJHQxLFskcm91bmRzLCM2XQotKwlsZHJiCSR0MixbJHJvdW5kcywjNV0KLSsJbGRyYgkkdDMsWyRyb3VuZHMsIzRdCi0rCW9ycgkkczEsJHMxLCR0MSxsc2wjOAotKwlvcnIJJHMxLCRzMSwkdDIsbHNsIzE2Ci0rCW9ycgkkczEsJHMxLCR0Myxsc2wjMjQKLSsJbGRyYgkkczIsWyRyb3VuZHMsIzExXQotKwlsZHJiCSR0MSxbJHJvdW5kcywjMTBdCi0rCWxkcmIJJHQyLFskcm91bmRzLCM5XQotKwlsZHJiCSR0MyxbJHJvdW5kcywjOF0KLSsJb3JyCSRzMiwkczIsJHQxLGxzbCM4Ci0rCW9ycgkkczIsJHMyLCR0Mixsc2wjMTYKLSsJb3JyCSRzMiwkczIsJHQzLGxzbCMyNAotKwlsZHJiCSRzMyxbJHJvdW5kcywjMTVdCi0rCWxkcmIJJHQxLFskcm91bmRzLCMxNF0KLSsJbGRyYgkkdDIsWyRyb3VuZHMsIzEzXQotKwlsZHJiCSR0MyxbJHJvdW5kcywjMTJdCi0rCW9ycgkkczMsJHMzLCR0MSxsc2wjOAotKwlvcnIJJHMzLCRzMywkdDIsbHNsIzE2Ci0rCW9ycgkkczMsJHMzLCR0Myxsc2wjMjQKLSsJc3RyCSRzMCxbJGtleV0sIzE2Ci0rCXN0cgkkczEsWyRrZXksIy0xMl0KLSsJc3RyCSRzMixbJGtleSwjLThdCi0rCXN0cgkkczMsWyRrZXksIy00XQotKwotKwl0ZXEJbHIsIzEyOAotKwlibmUJLkxub3QxMjgKLSsJbW92CSRyb3VuZHMsIzEwCi0rCXN0cgkkcm91bmRzLFska2V5LCMyNDAtMTZdCi0rCWFkZAkkdDMsJHRibCwjMjU2CQkJQCByY29uCi0rCW1vdglsciwjMjU1Ci0rCi0rLkwxMjhfbG9vcDoKLSsJYW5kCSR0MixsciwkczMsbHNyIzI0Ci0rCWFuZAkkaTEsbHIsJHMzLGxzciMxNgotKwlhbmQJJGkyLGxyLCRzMyxsc3IjOAotKwlhbmQJJGkzLGxyLCRzMwotKwlsZHJiCSR0MixbJHRibCwkdDJdCi0rCWxkcmIJJGkxLFskdGJsLCRpMV0KLSsJbGRyYgkkaTIsWyR0YmwsJGkyXQotKwlsZHJiCSRpMyxbJHRibCwkaTNdCi0rCWxkcgkkdDEsWyR0M10sIzQJCQlAIHJjb25baSsrXQotKwlvcnIJJHQyLCR0MiwkaTEsbHNsIzI0Ci0rCW9ycgkkdDIsJHQyLCRpMixsc2wjMTYKLSsJb3JyCSR0MiwkdDIsJGkzLGxzbCM4Ci0rCWVvcgkkdDIsJHQyLCR0MQotKwllb3IJJHMwLCRzMCwkdDIJCQlAIHJrWzRdPXJrWzBdXi4uLgotKwllb3IJJHMxLCRzMSwkczAJCQlAIHJrWzVdPXJrWzFdXnJrWzRdCi0rCWVvcgkkczIsJHMyLCRzMQkJCUAgcmtbNl09cmtbMl1ecmtbNV0KLSsJZW9yCSRzMywkczMsJHMyCQkJQCBya1s3XT1ya1szXV5ya1s2XQotKwlzdHIJJHMwLFska2V5XSwjMTYKLSsJc3RyCSRzMSxbJGtleSwjLTEyXQotKwlzdHIJJHMyLFska2V5LCMtOF0KLSsJc3RyCSRzMyxbJGtleSwjLTRdCi0rCi0rCXN1YnMJJHJvdW5kcywkcm91bmRzLCMxCi0rCWJuZQkuTDEyOF9sb29wCi0rCXN1YglyMiwka2V5LCMxNzYKLSsJYgkuTGRvbmUKLSsKLSsuTG5vdDEyODoKLSsJbGRyYgkkaTIsWyRyb3VuZHMsIzE5XQotKwlsZHJiCSR0MSxbJHJvdW5kcywjMThdCi0rCWxkcmIJJHQyLFskcm91bmRzLCMxN10KLSsJbGRyYgkkdDMsWyRyb3VuZHMsIzE2XQotKwlvcnIJJGkyLCRpMiwkdDEsbHNsIzgKLSsJb3JyCSRpMiwkaTIsJHQyLGxzbCMxNgotKwlvcnIJJGkyLCRpMiwkdDMsbHNsIzI0Ci0rCWxkcmIJJGkzLFskcm91bmRzLCMyM10KLSsJbGRyYgkkdDEsWyRyb3VuZHMsIzIyXQotKwlsZHJiCSR0MixbJHJvdW5kcywjMjFdCi0rCWxkcmIJJHQzLFskcm91bmRzLCMyMF0KLSsJb3JyCSRpMywkaTMsJHQxLGxzbCM4Ci0rCW9ycgkkaTMsJGkzLCR0Mixsc2wjMTYKLSsJb3JyCSRpMywkaTMsJHQzLGxzbCMyNAotKwlzdHIJJGkyLFska2V5XSwjOAotKwlzdHIJJGkzLFska2V5LCMtNF0KLSsKLSsJdGVxCWxyLCMxOTIKLSsJYm5lCS5Mbm90MTkyCi0rCW1vdgkkcm91bmRzLCMxMgotKwlzdHIJJHJvdW5kcyxbJGtleSwjMjQwLTI0XQotKwlhZGQJJHQzLCR0YmwsIzI1NgkJCUAgcmNvbgotKwltb3YJbHIsIzI1NQotKwltb3YJJHJvdW5kcywjOAotKwotKy5MMTkyX2xvb3A6Ci0rCWFuZAkkdDIsbHIsJGkzLGxzciMyNAotKwlhbmQJJGkxLGxyLCRpMyxsc3IjMTYKLSsJYW5kCSRpMixsciwkaTMsbHNyIzgKLSsJYW5kCSRpMyxsciwkaTMKLSsJbGRyYgkkdDIsWyR0YmwsJHQyXQotKwlsZHJiCSRpMSxbJHRibCwkaTFdCi0rCWxkcmIJJGkyLFskdGJsLCRpMl0KLSsJbGRyYgkkaTMsWyR0YmwsJGkzXQotKwlsZHIJJHQxLFskdDNdLCM0CQkJQCByY29uW2krK10KLSsJb3JyCSR0MiwkdDIsJGkxLGxzbCMyNAotKwlvcnIJJHQyLCR0MiwkaTIsbHNsIzE2Ci0rCW9ycgkkdDIsJHQyLCRpMyxsc2wjOAotKwllb3IJJGkzLCR0MiwkdDEKLSsJZW9yCSRzMCwkczAsJGkzCQkJQCBya1s2XT1ya1swXV4uLi4KLSsJZW9yCSRzMSwkczEsJHMwCQkJQCBya1s3XT1ya1sxXV5ya1s2XQotKwllb3IJJHMyLCRzMiwkczEJCQlAIHJrWzhdPXJrWzJdXnJrWzddCi0rCWVvcgkkczMsJHMzLCRzMgkJCUAgcmtbOV09cmtbM11ecmtbOF0KLSsJc3RyCSRzMCxbJGtleV0sIzI0Ci0rCXN0cgkkczEsWyRrZXksIy0yMF0KLSsJc3RyCSRzMixbJGtleSwjLTE2XQotKwlzdHIJJHMzLFska2V5LCMtMTJdCi0rCi0rCXN1YnMJJHJvdW5kcywkcm91bmRzLCMxCi0rCXN1YmVxCXIyLCRrZXksIzIxNgotKwliZXEJLkxkb25lCi0rCi0rCWxkcgkkaTEsWyRrZXksIy0zMl0KLSsJbGRyCSRpMixbJGtleSwjLTI4XQotKwllb3IJJGkxLCRpMSwkczMJCQlAIHJrWzEwXT1ya1s0XV5ya1s5XQotKwllb3IJJGkzLCRpMiwkaTEJCQlAIHJrWzExXT1ya1s1XV5ya1sxMF0KLSsJc3RyCSRpMSxbJGtleSwjLThdCi0rCXN0cgkkaTMsWyRrZXksIy00XQotKwliCS5MMTkyX2xvb3AKLSsKLSsuTG5vdDE5MjoKLSsJbGRyYgkkaTIsWyRyb3VuZHMsIzI3XQotKwlsZHJiCSR0MSxbJHJvdW5kcywjMjZdCi0rCWxkcmIJJHQyLFskcm91bmRzLCMyNV0KLSsJbGRyYgkkdDMsWyRyb3VuZHMsIzI0XQotKwlvcnIJJGkyLCRpMiwkdDEsbHNsIzgKLSsJb3JyCSRpMiwkaTIsJHQyLGxzbCMxNgotKwlvcnIJJGkyLCRpMiwkdDMsbHNsIzI0Ci0rCWxkcmIJJGkzLFskcm91bmRzLCMzMV0KLSsJbGRyYgkkdDEsWyRyb3VuZHMsIzMwXQotKwlsZHJiCSR0MixbJHJvdW5kcywjMjldCi0rCWxkcmIJJHQzLFskcm91bmRzLCMyOF0KLSsJb3JyCSRpMywkaTMsJHQxLGxzbCM4Ci0rCW9ycgkkaTMsJGkzLCR0Mixsc2wjMTYKLSsJb3JyCSRpMywkaTMsJHQzLGxzbCMyNAotKwlzdHIJJGkyLFska2V5XSwjOAotKwlzdHIJJGkzLFska2V5LCMtNF0KLSsKLSsJbW92CSRyb3VuZHMsIzE0Ci0rCXN0cgkkcm91bmRzLFska2V5LCMyNDAtMzJdCi0rCWFkZAkkdDMsJHRibCwjMjU2CQkJQCByY29uCi0rCW1vdglsciwjMjU1Ci0rCW1vdgkkcm91bmRzLCM3Ci0rCi0rLkwyNTZfbG9vcDoKLSsJYW5kCSR0MixsciwkaTMsbHNyIzI0Ci0rCWFuZAkkaTEsbHIsJGkzLGxzciMxNgotKwlhbmQJJGkyLGxyLCRpMyxsc3IjOAotKwlhbmQJJGkzLGxyLCRpMwotKwlsZHJiCSR0MixbJHRibCwkdDJdCi0rCWxkcmIJJGkxLFskdGJsLCRpMV0KLSsJbGRyYgkkaTIsWyR0YmwsJGkyXQotKwlsZHJiCSRpMyxbJHRibCwkaTNdCi0rCWxkcgkkdDEsWyR0M10sIzQJCQlAIHJjb25baSsrXQotKwlvcnIJJHQyLCR0MiwkaTEsbHNsIzI0Ci0rCW9ycgkkdDIsJHQyLCRpMixsc2wjMTYKLSsJb3JyCSR0MiwkdDIsJGkzLGxzbCM4Ci0rCWVvcgkkaTMsJHQyLCR0MQotKwllb3IJJHMwLCRzMCwkaTMJCQlAIHJrWzhdPXJrWzBdXi4uLgotKwllb3IJJHMxLCRzMSwkczAJCQlAIHJrWzldPXJrWzFdXnJrWzhdCi0rCWVvcgkkczIsJHMyLCRzMQkJCUAgcmtbMTBdPXJrWzJdXnJrWzldCi0rCWVvcgkkczMsJHMzLCRzMgkJCUAgcmtbMTFdPXJrWzNdXnJrWzEwXQotKwlzdHIJJHMwLFska2V5XSwjMzIKLSsJc3RyCSRzMSxbJGtleSwjLTI4XQotKwlzdHIJJHMyLFska2V5LCMtMjRdCi0rCXN0cgkkczMsWyRrZXksIy0yMF0KLSsKLSsJc3Vicwkkcm91bmRzLCRyb3VuZHMsIzEKLSsJc3ViZXEJcjIsJGtleSwjMjU2Ci0rCWJlcQkuTGRvbmUKLSsKLSsJYW5kCSR0MixsciwkczMKLSsJYW5kCSRpMSxsciwkczMsbHNyIzgKLSsJYW5kCSRpMixsciwkczMsbHNyIzE2Ci0rCWFuZAkkaTMsbHIsJHMzLGxzciMyNAotKwlsZHJiCSR0MixbJHRibCwkdDJdCi0rCWxkcmIJJGkxLFskdGJsLCRpMV0KLSsJbGRyYgkkaTIsWyR0YmwsJGkyXQotKwlsZHJiCSRpMyxbJHRibCwkaTNdCi0rCW9ycgkkdDIsJHQyLCRpMSxsc2wjOAotKwlvcnIJJHQyLCR0MiwkaTIsbHNsIzE2Ci0rCW9ycgkkdDIsJHQyLCRpMyxsc2wjMjQKLSsKLSsJbGRyCSR0MSxbJGtleSwjLTQ4XQotKwlsZHIJJGkxLFska2V5LCMtNDRdCi0rCWxkcgkkaTIsWyRrZXksIy00MF0KLSsJbGRyCSRpMyxbJGtleSwjLTM2XQotKwllb3IJJHQxLCR0MSwkdDIJCQlAIHJrWzEyXT1ya1s0XV4uLi4KLSsJZW9yCSRpMSwkaTEsJHQxCQkJQCBya1sxM109cmtbNV1ecmtbMTJdCi0rCWVvcgkkaTIsJGkyLCRpMQkJCUAgcmtbMTRdPXJrWzZdXnJrWzEzXQotKwllb3IJJGkzLCRpMywkaTIJCQlAIHJrWzE1XT1ya1s3XV5ya1sxNF0KLSsJc3RyCSR0MSxbJGtleSwjLTE2XQotKwlzdHIJJGkxLFska2V5LCMtMTJdCi0rCXN0cgkkaTIsWyRrZXksIy04XQotKwlzdHIJJGkzLFska2V5LCMtNF0KLSsJYgkuTDI1Nl9sb29wCi0rCi0rLkxkb25lOgltb3YJcjAsIzAKLSsJbGRtaWEgICBzcCEse3I0LXIxMixscn0KLSsuTGFicnQ6CXRzdAlsciwjMQotKwltb3ZlcQlwYyxscgkJCUAgYmUgYmluYXJ5IGNvbXBhdGlibGUgd2l0aCBWNCwgeWV0Ci0rCWJ4CWxyCQkJQCBpbnRlcm9wZXJhYmxlIHdpdGggVGh1bWIgSVNBOi0pCi0rLnNpemUJQUVTX3NldF9lbmNyeXB0X2tleSwuLUFFU19zZXRfZW5jcnlwdF9rZXkKLSsKLSsuZ2xvYmFsIEFFU19zZXRfZGVjcnlwdF9rZXkKLSsudHlwZSAgIEFFU19zZXRfZGVjcnlwdF9rZXksJWZ1bmN0aW9uCi0rLmFsaWduCTUKLStBRVNfc2V0X2RlY3J5cHRfa2V5OgotKwlzdHIJbHIsW3NwLCMtNF0hICAgICAgICAgICAgQCBwdXNoIGxyCi0rCWJsCUFFU19zZXRfZW5jcnlwdF9rZXkKLSsJdGVxCXIwLCMwCi0rCWxkcm5lCWxyLFtzcF0sIzQgICAgICAgICAgICAgIEAgcG9wIGxyCi0rCWJuZQkuTGFicnQKLSsKLSsJc3RtZGIgICBzcCEse3I0LXIxMn0KLSsKLSsJbGRyCSRyb3VuZHMsW3IyLCMyNDBdCUAgQUVTX3NldF9lbmNyeXB0X2tleSBwcmVzZXJ2ZXMgcjIsCi0rCW1vdgkka2V5LHIyCQkJQCB3aGljaCBpcyBBRVNfS0VZICprZXkKLSsJbW92CSRpMSxyMgotKwlhZGQJJGkyLHIyLCRyb3VuZHMsbHNsIzQKLSsKLSsuTGludjoJbGRyCSRzMCxbJGkxXQotKwlsZHIJJHMxLFskaTEsIzRdCi0rCWxkcgkkczIsWyRpMSwjOF0KLSsJbGRyCSRzMyxbJGkxLCMxMl0KLSsJbGRyCSR0MSxbJGkyXQotKwlsZHIJJHQyLFskaTIsIzRdCi0rCWxkcgkkdDMsWyRpMiwjOF0KLSsJbGRyCSRpMyxbJGkyLCMxMl0KLSsJc3RyCSRzMCxbJGkyXSwjLTE2Ci0rCXN0cgkkczEsWyRpMiwjMTYrNF0KLSsJc3RyCSRzMixbJGkyLCMxNis4XQotKwlzdHIJJHMzLFskaTIsIzE2KzEyXQotKwlzdHIJJHQxLFskaTFdLCMxNgotKwlzdHIJJHQyLFskaTEsIy0xMl0KLSsJc3RyCSR0MyxbJGkxLCMtOF0KLSsJc3RyCSRpMyxbJGkxLCMtNF0KLSsJdGVxCSRpMSwkaTIKLSsJYm5lCS5MaW52Ci0rX19fCi0rJG1hc2s4MD0kaTE7Ci0rJG1hc2sxYj0kaTI7Ci0rJG1hc2s3Zj0kaTM7Ci0rJGNvZGUuPTw8X19fOwotKwlsZHIJJHMwLFska2V5LCMxNl0hCQlAIHByZWZldGNoIHRwMQotKwltb3YJJG1hc2s4MCwjMHg4MAotKwltb3YJJG1hc2sxYiwjMHgxYgotKwlvcnIJJG1hc2s4MCwkbWFzazgwLCMweDgwMDAKLSsJb3JyCSRtYXNrMWIsJG1hc2sxYiwjMHgxYjAwCi0rCW9ycgkkbWFzazgwLCRtYXNrODAsJG1hc2s4MCxsc2wjMTYKLSsJb3JyCSRtYXNrMWIsJG1hc2sxYiwkbWFzazFiLGxzbCMxNgotKwlzdWIJJHJvdW5kcywkcm91bmRzLCMxCi0rCW12bgkkbWFzazdmLCRtYXNrODAKLSsJbW92CSRyb3VuZHMsJHJvdW5kcyxsc2wjMglAIChyb3VuZHMtMSkqNAotKwotKy5MbWl4OglhbmQJJHQxLCRzMCwkbWFzazgwCi0rCWFuZAkkczEsJHMwLCRtYXNrN2YKLSsJc3ViCSR0MSwkdDEsJHQxLGxzciM3Ci0rCWFuZAkkdDEsJHQxLCRtYXNrMWIKLSsJZW9yCSRzMSwkdDEsJHMxLGxzbCMxCUAgdHAyCi0rCi0rCWFuZAkkdDEsJHMxLCRtYXNrODAKLSsJYW5kCSRzMiwkczEsJG1hc2s3ZgotKwlzdWIJJHQxLCR0MSwkdDEsbHNyIzcKLSsJYW5kCSR0MSwkdDEsJG1hc2sxYgotKwllb3IJJHMyLCR0MSwkczIsbHNsIzEJQCB0cDQKLSsKLSsJYW5kCSR0MSwkczIsJG1hc2s4MAotKwlhbmQJJHMzLCRzMiwkbWFzazdmCi0rCXN1YgkkdDEsJHQxLCR0MSxsc3IjNwotKwlhbmQJJHQxLCR0MSwkbWFzazFiCi0rCWVvcgkkczMsJHQxLCRzMyxsc2wjMQlAIHRwOAotKwotKwllb3IJJHQxLCRzMSwkczIKLSsJZW9yCSR0MiwkczAsJHMzCQlAIHRwOQotKwllb3IJJHQxLCR0MSwkczMJCUAgdHBlCi0rCWVvcgkkdDEsJHQxLCRzMSxyb3IjMjQKLSsJZW9yCSR0MSwkdDEsJHQyLHJvciMyNAlAIF49IFJPVEFURSh0cGI9dHA5XnRwMiw4KQotKwllb3IJJHQxLCR0MSwkczIscm9yIzE2Ci0rCWVvcgkkdDEsJHQxLCR0Mixyb3IjMTYJQCBePSBST1RBVEUodHBkPXRwOV50cDQsMTYpCi0rCWVvcgkkdDEsJHQxLCR0Mixyb3IjOAlAIF49IFJPVEFURSh0cDksMjQpCi0rCi0rCWxkcgkkczAsWyRrZXksIzRdCQlAIHByZWZldGNoIHRwMQotKwlzdHIJJHQxLFska2V5XSwjNAotKwlzdWJzCSRyb3VuZHMsJHJvdW5kcywjMQotKwlibmUJLkxtaXgKLSsKLSsJbW92CXIwLCMwCi0rCWxkbWlhICAgc3AhLHtyNC1yMTIsbHJ9Ci0rCXRzdAlsciwjMQotKwltb3ZlcQlwYyxscgkJCUAgYmUgYmluYXJ5IGNvbXBhdGlibGUgd2l0aCBWNCwgeWV0Ci0rCWJ4CWxyCQkJQCBpbnRlcm9wZXJhYmxlIHdpdGggVGh1bWIgSVNBOi0pCi0rLnNpemUJQUVTX3NldF9kZWNyeXB0X2tleSwuLUFFU19zZXRfZGVjcnlwdF9rZXkKLSsKLSsudHlwZQlBRVNfVGQsJW9iamVjdAotKy5hbGlnbgk1Ci0rQUVTX1RkOgotKy53b3JkCTB4NTFmNGE3NTAsIDB4N2U0MTY1NTMsIDB4MWExN2E0YzMsIDB4M2EyNzVlOTYKLSsud29yZAkweDNiYWI2YmNiLCAweDFmOWQ0NWYxLCAweGFjZmE1OGFiLCAweDRiZTMwMzkzCi0rLndvcmQJMHgyMDMwZmE1NSwgMHhhZDc2NmRmNiwgMHg4OGNjNzY5MSwgMHhmNTAyNGMyNQotKy53b3JkCTB4NGZlNWQ3ZmMsIDB4YzUyYWNiZDcsIDB4MjYzNTQ0ODAsIDB4YjU2MmEzOGYKLSsud29yZAkweGRlYjE1YTQ5LCAweDI1YmExYjY3LCAweDQ1ZWEwZTk4LCAweDVkZmVjMGUxCi0rLndvcmQJMHhjMzJmNzUwMiwgMHg4MTRjZjAxMiwgMHg4ZDQ2OTdhMywgMHg2YmQzZjljNgotKy53b3JkCTB4MDM4ZjVmZTcsIDB4MTU5MjljOTUsIDB4YmY2ZDdhZWIsIDB4OTU1MjU5ZGEKLSsud29yZAkweGQ0YmU4MzJkLCAweDU4NzQyMWQzLCAweDQ5ZTA2OTI5LCAweDhlYzljODQ0Ci0rLndvcmQJMHg3NWMyODk2YSwgMHhmNDhlNzk3OCwgMHg5OTU4M2U2YiwgMHgyN2I5NzFkZAotKy53b3JkCTB4YmVlMTRmYjYsIDB4ZjA4OGFkMTcsIDB4YzkyMGFjNjYsIDB4N2RjZTNhYjQKLSsud29yZAkweDYzZGY0YTE4LCAweGU1MWEzMTgyLCAweDk3NTEzMzYwLCAweDYyNTM3ZjQ1Ci0rLndvcmQJMHhiMTY0NzdlMCwgMHhiYjZiYWU4NCwgMHhmZTgxYTAxYywgMHhmOTA4MmI5NAotKy53b3JkCTB4NzA0ODY4NTgsIDB4OGY0NWZkMTksIDB4OTRkZTZjODcsIDB4NTI3YmY4YjcKLSsud29yZAkweGFiNzNkMzIzLCAweDcyNGIwMmUyLCAweGUzMWY4ZjU3LCAweDY2NTVhYjJhCi0rLndvcmQJMHhiMmViMjgwNywgMHgyZmI1YzIwMywgMHg4NmM1N2I5YSwgMHhkMzM3MDhhNQotKy53b3JkCTB4MzAyODg3ZjIsIDB4MjNiZmE1YjIsIDB4MDIwMzZhYmEsIDB4ZWQxNjgyNWMKLSsud29yZAkweDhhY2YxYzJiLCAweGE3NzliNDkyLCAweGYzMDdmMmYwLCAweDRlNjllMmExCi0rLndvcmQJMHg2NWRhZjRjZCwgMHgwNjA1YmVkNSwgMHhkMTM0NjIxZiwgMHhjNGE2ZmU4YQotKy53b3JkCTB4MzQyZTUzOWQsIDB4YTJmMzU1YTAsIDB4MDU4YWUxMzIsIDB4YTRmNmViNzUKLSsud29yZAkweDBiODNlYzM5LCAweDQwNjBlZmFhLCAweDVlNzE5ZjA2LCAweGJkNmUxMDUxCi0rLndvcmQJMHgzZTIxOGFmOSwgMHg5NmRkMDYzZCwgMHhkZDNlMDVhZSwgMHg0ZGU2YmQ0NgotKy53b3JkCTB4OTE1NDhkYjUsIDB4NzFjNDVkMDUsIDB4MDQwNmQ0NmYsIDB4NjA1MDE1ZmYKLSsud29yZAkweDE5OThmYjI0LCAweGQ2YmRlOTk3LCAweDg5NDA0M2NjLCAweDY3ZDk5ZTc3Ci0rLndvcmQJMHhiMGU4NDJiZCwgMHgwNzg5OGI4OCwgMHhlNzE5NWIzOCwgMHg3OWM4ZWVkYgotKy53b3JkCTB4YTE3YzBhNDcsIDB4N2M0MjBmZTksIDB4Zjg4NDFlYzksIDB4MDAwMDAwMDAKLSsud29yZAkweDA5ODA4NjgzLCAweDMyMmJlZDQ4LCAweDFlMTE3MGFjLCAweDZjNWE3MjRlCi0rLndvcmQJMHhmZDBlZmZmYiwgMHgwZjg1Mzg1NiwgMHgzZGFlZDUxZSwgMHgzNjJkMzkyNwotKy53b3JkCTB4MGEwZmQ5NjQsIDB4Njg1Y2E2MjEsIDB4OWI1YjU0ZDEsIDB4MjQzNjJlM2EKLSsud29yZAkweDBjMGE2N2IxLCAweDkzNTdlNzBmLCAweGI0ZWU5NmQyLCAweDFiOWI5MTllCi0rLndvcmQJMHg4MGMwYzU0ZiwgMHg2MWRjMjBhMiwgMHg1YTc3NGI2OSwgMHgxYzEyMWExNgotKy53b3JkCTB4ZTI5M2JhMGEsIDB4YzBhMDJhZTUsIDB4M2MyMmUwNDMsIDB4MTIxYjE3MWQKLSsud29yZAkweDBlMDkwZDBiLCAweGYyOGJjN2FkLCAweDJkYjZhOGI5LCAweDE0MWVhOWM4Ci0rLndvcmQJMHg1N2YxMTk4NSwgMHhhZjc1MDc0YywgMHhlZTk5ZGRiYiwgMHhhMzdmNjBmZAotKy53b3JkCTB4ZjcwMTI2OWYsIDB4NWM3MmY1YmMsIDB4NDQ2NjNiYzUsIDB4NWJmYjdlMzQKLSsud29yZAkweDhiNDMyOTc2LCAweGNiMjNjNmRjLCAweGI2ZWRmYzY4LCAweGI4ZTRmMTYzCi0rLndvcmQJMHhkNzMxZGNjYSwgMHg0MjYzODUxMCwgMHgxMzk3MjI0MCwgMHg4NGM2MTEyMAotKy53b3JkCTB4ODU0YTI0N2QsIDB4ZDJiYjNkZjgsIDB4YWVmOTMyMTEsIDB4YzcyOWExNmQKLSsud29yZAkweDFkOWUyZjRiLCAweGRjYjIzMGYzLCAweDBkODY1MmVjLCAweDc3YzFlM2QwCi0rLndvcmQJMHgyYmIzMTY2YywgMHhhOTcwYjk5OSwgMHgxMTk0NDhmYSwgMHg0N2U5NjQyMgotKy53b3JkCTB4YThmYzhjYzQsIDB4YTBmMDNmMWEsIDB4NTY3ZDJjZDgsIDB4MjIzMzkwZWYKLSsud29yZAkweDg3NDk0ZWM3LCAweGQ5MzhkMWMxLCAweDhjY2FhMmZlLCAweDk4ZDQwYjM2Ci0rLndvcmQJMHhhNmY1ODFjZiwgMHhhNTdhZGUyOCwgMHhkYWI3OGUyNiwgMHgzZmFkYmZhNAotKy53b3JkCTB4MmMzYTlkZTQsIDB4NTA3ODkyMGQsIDB4NmE1ZmNjOWIsIDB4NTQ3ZTQ2NjIKLSsud29yZAkweGY2OGQxM2MyLCAweDkwZDhiOGU4LCAweDJlMzlmNzVlLCAweDgyYzNhZmY1Ci0rLndvcmQJMHg5ZjVkODBiZSwgMHg2OWQwOTM3YywgMHg2ZmQ1MmRhOSwgMHhjZjI1MTJiMwotKy53b3JkCTB4YzhhYzk5M2IsIDB4MTAxODdkYTcsIDB4ZTg5YzYzNmUsIDB4ZGIzYmJiN2IKLSsud29yZAkweGNkMjY3ODA5LCAweDZlNTkxOGY0LCAweGVjOWFiNzAxLCAweDgzNGY5YWE4Ci0rLndvcmQJMHhlNjk1NmU2NSwgMHhhYWZmZTY3ZSwgMHgyMWJjY2YwOCwgMHhlZjE1ZThlNgotKy53b3JkCTB4YmFlNzliZDksIDB4NGE2ZjM2Y2UsIDB4ZWE5ZjA5ZDQsIDB4MjliMDdjZDYKLSsud29yZAkweDMxYTRiMmFmLCAweDJhM2YyMzMxLCAweGM2YTU5NDMwLCAweDM1YTI2NmMwCi0rLndvcmQJMHg3NDRlYmMzNywgMHhmYzgyY2FhNiwgMHhlMDkwZDBiMCwgMHgzM2E3ZDgxNQotKy53b3JkCTB4ZjEwNDk4NGEsIDB4NDFlY2RhZjcsIDB4N2ZjZDUwMGUsIDB4MTc5MWY2MmYKLSsud29yZAkweDc2NGRkNjhkLCAweDQzZWZiMDRkLCAweGNjYWE0ZDU0LCAweGU0OTYwNGRmCi0rLndvcmQJMHg5ZWQxYjVlMywgMHg0YzZhODgxYiwgMHhjMTJjMWZiOCwgMHg0NjY1NTE3ZgotKy53b3JkCTB4OWQ1ZWVhMDQsIDB4MDE4YzM1NWQsIDB4ZmE4Nzc0NzMsIDB4ZmIwYjQxMmUKLSsud29yZAkweGIzNjcxZDVhLCAweDkyZGJkMjUyLCAweGU5MTA1NjMzLCAweDZkZDY0NzEzCi0rLndvcmQJMHg5YWQ3NjE4YywgMHgzN2ExMGM3YSwgMHg1OWY4MTQ4ZSwgMHhlYjEzM2M4OQotKy53b3JkCTB4Y2VhOTI3ZWUsIDB4Yjc2MWM5MzUsIDB4ZTExY2U1ZWQsIDB4N2E0N2IxM2MKLSsud29yZAkweDljZDJkZjU5LCAweDU1ZjI3MzNmLCAweDE4MTRjZTc5LCAweDczYzczN2JmCi0rLndvcmQJMHg1M2Y3Y2RlYSwgMHg1ZmZkYWE1YiwgMHhkZjNkNmYxNCwgMHg3ODQ0ZGI4NgotKy53b3JkCTB4Y2FhZmYzODEsIDB4Yjk2OGM0M2UsIDB4MzgyNDM0MmMsIDB4YzJhMzQwNWYKLSsud29yZAkweDE2MWRjMzcyLCAweGJjZTIyNTBjLCAweDI4M2M0OThiLCAweGZmMGQ5NTQxCi0rLndvcmQJMHgzOWE4MDE3MSwgMHgwODBjYjNkZSwgMHhkOGI0ZTQ5YywgMHg2NDU2YzE5MAotKy53b3JkCTB4N2JjYjg0NjEsIDB4ZDUzMmI2NzAsIDB4NDg2YzVjNzQsIDB4ZDBiODU3NDIKLStAIFRkNFsyNTZdCi0rLmJ5dGUJMHg1MiwgMHgwOSwgMHg2YSwgMHhkNSwgMHgzMCwgMHgzNiwgMHhhNSwgMHgzOAotKy5ieXRlCTB4YmYsIDB4NDAsIDB4YTMsIDB4OWUsIDB4ODEsIDB4ZjMsIDB4ZDcsIDB4ZmIKLSsuYnl0ZQkweDdjLCAweGUzLCAweDM5LCAweDgyLCAweDliLCAweDJmLCAweGZmLCAweDg3Ci0rLmJ5dGUJMHgzNCwgMHg4ZSwgMHg0MywgMHg0NCwgMHhjNCwgMHhkZSwgMHhlOSwgMHhjYgotKy5ieXRlCTB4NTQsIDB4N2IsIDB4OTQsIDB4MzIsIDB4YTYsIDB4YzIsIDB4MjMsIDB4M2QKLSsuYnl0ZQkweGVlLCAweDRjLCAweDk1LCAweDBiLCAweDQyLCAweGZhLCAweGMzLCAweDRlCi0rLmJ5dGUJMHgwOCwgMHgyZSwgMHhhMSwgMHg2NiwgMHgyOCwgMHhkOSwgMHgyNCwgMHhiMgotKy5ieXRlCTB4NzYsIDB4NWIsIDB4YTIsIDB4NDksIDB4NmQsIDB4OGIsIDB4ZDEsIDB4MjUKLSsuYnl0ZQkweDcyLCAweGY4LCAweGY2LCAweDY0LCAweDg2LCAweDY4LCAweDk4LCAweDE2Ci0rLmJ5dGUJMHhkNCwgMHhhNCwgMHg1YywgMHhjYywgMHg1ZCwgMHg2NSwgMHhiNiwgMHg5MgotKy5ieXRlCTB4NmMsIDB4NzAsIDB4NDgsIDB4NTAsIDB4ZmQsIDB4ZWQsIDB4YjksIDB4ZGEKLSsuYnl0ZQkweDVlLCAweDE1LCAweDQ2LCAweDU3LCAweGE3LCAweDhkLCAweDlkLCAweDg0Ci0rLmJ5dGUJMHg5MCwgMHhkOCwgMHhhYiwgMHgwMCwgMHg4YywgMHhiYywgMHhkMywgMHgwYQotKy5ieXRlCTB4ZjcsIDB4ZTQsIDB4NTgsIDB4MDUsIDB4YjgsIDB4YjMsIDB4NDUsIDB4MDYKLSsuYnl0ZQkweGQwLCAweDJjLCAweDFlLCAweDhmLCAweGNhLCAweDNmLCAweDBmLCAweDAyCi0rLmJ5dGUJMHhjMSwgMHhhZiwgMHhiZCwgMHgwMywgMHgwMSwgMHgxMywgMHg4YSwgMHg2YgotKy5ieXRlCTB4M2EsIDB4OTEsIDB4MTEsIDB4NDEsIDB4NGYsIDB4NjcsIDB4ZGMsIDB4ZWEKLSsuYnl0ZQkweDk3LCAweGYyLCAweGNmLCAweGNlLCAweGYwLCAweGI0LCAweGU2LCAweDczCi0rLmJ5dGUJMHg5NiwgMHhhYywgMHg3NCwgMHgyMiwgMHhlNywgMHhhZCwgMHgzNSwgMHg4NQotKy5ieXRlCTB4ZTIsIDB4ZjksIDB4MzcsIDB4ZTgsIDB4MWMsIDB4NzUsIDB4ZGYsIDB4NmUKLSsuYnl0ZQkweDQ3LCAweGYxLCAweDFhLCAweDcxLCAweDFkLCAweDI5LCAweGM1LCAweDg5Ci0rLmJ5dGUJMHg2ZiwgMHhiNywgMHg2MiwgMHgwZSwgMHhhYSwgMHgxOCwgMHhiZSwgMHgxYgotKy5ieXRlCTB4ZmMsIDB4NTYsIDB4M2UsIDB4NGIsIDB4YzYsIDB4ZDIsIDB4NzksIDB4MjAKLSsuYnl0ZQkweDlhLCAweGRiLCAweGMwLCAweGZlLCAweDc4LCAweGNkLCAweDVhLCAweGY0Ci0rLmJ5dGUJMHgxZiwgMHhkZCwgMHhhOCwgMHgzMywgMHg4OCwgMHgwNywgMHhjNywgMHgzMQotKy5ieXRlCTB4YjEsIDB4MTIsIDB4MTAsIDB4NTksIDB4MjcsIDB4ODAsIDB4ZWMsIDB4NWYKLSsuYnl0ZQkweDYwLCAweDUxLCAweDdmLCAweGE5LCAweDE5LCAweGI1LCAweDRhLCAweDBkCi0rLmJ5dGUJMHgyZCwgMHhlNSwgMHg3YSwgMHg5ZiwgMHg5MywgMHhjOSwgMHg5YywgMHhlZgotKy5ieXRlCTB4YTAsIDB4ZTAsIDB4M2IsIDB4NGQsIDB4YWUsIDB4MmEsIDB4ZjUsIDB4YjAKLSsuYnl0ZQkweGM4LCAweGViLCAweGJiLCAweDNjLCAweDgzLCAweDUzLCAweDk5LCAweDYxCi0rLmJ5dGUJMHgxNywgMHgyYiwgMHgwNCwgMHg3ZSwgMHhiYSwgMHg3NywgMHhkNiwgMHgyNgotKy5ieXRlCTB4ZTEsIDB4NjksIDB4MTQsIDB4NjMsIDB4NTUsIDB4MjEsIDB4MGMsIDB4N2QKLSsuc2l6ZQlBRVNfVGQsLi1BRVNfVGQKLSsKLStAIHZvaWQgQUVTX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKLStAIAkJIGNvbnN0IEFFU19LRVkgKmtleSkgewotKy5nbG9iYWwgQUVTX2RlY3J5cHQKLSsudHlwZSAgIEFFU19kZWNyeXB0LCVmdW5jdGlvbgotKy5hbGlnbgk1Ci0rQUVTX2RlY3J5cHQ6Ci0rCXN1YglyMyxwYywjOAkJQCBBRVNfZGVjcnlwdAotKwlzdG1kYiAgIHNwISx7cjEscjQtcjEyLGxyfQotKwltb3YJJHJvdW5kcyxyMAkJQCBpbnAKLSsJbW92CSRrZXkscjIKLSsJc3ViCSR0YmwscjMsI0FFU19kZWNyeXB0LUFFU19UZAkJQCBUZAotKwotKwlsZHJiCSRzMCxbJHJvdW5kcywjM10JQCBsb2FkIGlucHV0IGRhdGEgaW4gZW5kaWFuLW5ldXRyYWwKLSsJbGRyYgkkdDEsWyRyb3VuZHMsIzJdCUAgbWFubmVyLi4uCi0rCWxkcmIJJHQyLFskcm91bmRzLCMxXQotKwlsZHJiCSR0MyxbJHJvdW5kcywjMF0KLSsJb3JyCSRzMCwkczAsJHQxLGxzbCM4Ci0rCW9ycgkkczAsJHMwLCR0Mixsc2wjMTYKLSsJb3JyCSRzMCwkczAsJHQzLGxzbCMyNAotKwlsZHJiCSRzMSxbJHJvdW5kcywjN10KLSsJbGRyYgkkdDEsWyRyb3VuZHMsIzZdCi0rCWxkcmIJJHQyLFskcm91bmRzLCM1XQotKwlsZHJiCSR0MyxbJHJvdW5kcywjNF0KLSsJb3JyCSRzMSwkczEsJHQxLGxzbCM4Ci0rCW9ycgkkczEsJHMxLCR0Mixsc2wjMTYKLSsJb3JyCSRzMSwkczEsJHQzLGxzbCMyNAotKwlsZHJiCSRzMixbJHJvdW5kcywjMTFdCi0rCWxkcmIJJHQxLFskcm91bmRzLCMxMF0KLSsJbGRyYgkkdDIsWyRyb3VuZHMsIzldCi0rCWxkcmIJJHQzLFskcm91bmRzLCM4XQotKwlvcnIJJHMyLCRzMiwkdDEsbHNsIzgKLSsJb3JyCSRzMiwkczIsJHQyLGxzbCMxNgotKwlvcnIJJHMyLCRzMiwkdDMsbHNsIzI0Ci0rCWxkcmIJJHMzLFskcm91bmRzLCMxNV0KLSsJbGRyYgkkdDEsWyRyb3VuZHMsIzE0XQotKwlsZHJiCSR0MixbJHJvdW5kcywjMTNdCi0rCWxkcmIJJHQzLFskcm91bmRzLCMxMl0KLSsJb3JyCSRzMywkczMsJHQxLGxzbCM4Ci0rCW9ycgkkczMsJHMzLCR0Mixsc2wjMTYKLSsJb3JyCSRzMywkczMsJHQzLGxzbCMyNAotKwotKwlibAlfYXJtdjRfQUVTX2RlY3J5cHQKLSsKLSsJbGRyCSRyb3VuZHMsW3NwXSwjNAkJQCBwb3Agb3V0Ci0rCW1vdgkkdDEsJHMwLGxzciMyNAkJQCB3cml0ZSBvdXRwdXQgaW4gZW5kaWFuLW5ldXRyYWwKLSsJbW92CSR0MiwkczAsbHNyIzE2CQlAIG1hbm5lci4uLgotKwltb3YJJHQzLCRzMCxsc3IjOAotKwlzdHJiCSR0MSxbJHJvdW5kcywjMF0KLSsJc3RyYgkkdDIsWyRyb3VuZHMsIzFdCi0rCXN0cmIJJHQzLFskcm91bmRzLCMyXQotKwlzdHJiCSRzMCxbJHJvdW5kcywjM10KLSsJbW92CSR0MSwkczEsbHNyIzI0Ci0rCW1vdgkkdDIsJHMxLGxzciMxNgotKwltb3YJJHQzLCRzMSxsc3IjOAotKwlzdHJiCSR0MSxbJHJvdW5kcywjNF0KLSsJc3RyYgkkdDIsWyRyb3VuZHMsIzVdCi0rCXN0cmIJJHQzLFskcm91bmRzLCM2XQotKwlzdHJiCSRzMSxbJHJvdW5kcywjN10KLSsJbW92CSR0MSwkczIsbHNyIzI0Ci0rCW1vdgkkdDIsJHMyLGxzciMxNgotKwltb3YJJHQzLCRzMixsc3IjOAotKwlzdHJiCSR0MSxbJHJvdW5kcywjOF0KLSsJc3RyYgkkdDIsWyRyb3VuZHMsIzldCi0rCXN0cmIJJHQzLFskcm91bmRzLCMxMF0KLSsJc3RyYgkkczIsWyRyb3VuZHMsIzExXQotKwltb3YJJHQxLCRzMyxsc3IjMjQKLSsJbW92CSR0MiwkczMsbHNyIzE2Ci0rCW1vdgkkdDMsJHMzLGxzciM4Ci0rCXN0cmIJJHQxLFskcm91bmRzLCMxMl0KLSsJc3RyYgkkdDIsWyRyb3VuZHMsIzEzXQotKwlzdHJiCSR0MyxbJHJvdW5kcywjMTRdCi0rCXN0cmIJJHMzLFskcm91bmRzLCMxNV0KLSsKLSsJbGRtaWEgICBzcCEse3I0LXIxMixscn0KLSsJdHN0CWxyLCMxCi0rCW1vdmVxCXBjLGxyCQkJQCBiZSBiaW5hcnkgY29tcGF0aWJsZSB3aXRoIFY0LCB5ZXQKLSsJYngJbHIJCQlAIGludGVyb3BlcmFibGUgd2l0aCBUaHVtYiBJU0E6LSkKLSsuc2l6ZQlBRVNfZGVjcnlwdCwuLUFFU19kZWNyeXB0Ci0rCi0rLnR5cGUgICBfYXJtdjRfQUVTX2RlY3J5cHQsJWZ1bmN0aW9uCi0rLmFsaWduCTIKLStfYXJtdjRfQUVTX2RlY3J5cHQ6Ci0rCXN0cglscixbc3AsIy00XSEJCUAgcHVzaCBscgotKwlsZHIJJHQxLFska2V5XSwjMTYKLSsJbGRyCSR0MixbJGtleSwjLTEyXQotKwlsZHIJJHQzLFska2V5LCMtOF0KLSsJbGRyCSRpMSxbJGtleSwjLTRdCi0rCWxkcgkkcm91bmRzLFska2V5LCMyNDAtMTZdCi0rCWVvcgkkczAsJHMwLCR0MQotKwllb3IJJHMxLCRzMSwkdDIKLSsJZW9yCSRzMiwkczIsJHQzCi0rCWVvcgkkczMsJHMzLCRpMQotKwlzdWIJJHJvdW5kcywkcm91bmRzLCMxCi0rCW1vdglsciwjMjU1Ci0rCi0rLkxkZWNfbG9vcDoKLSsJYW5kCSRpMSxsciwkczAsbHNyIzE2Ci0rCWFuZAkkaTIsbHIsJHMwLGxzciM4Ci0rCWFuZAkkaTMsbHIsJHMwCi0rCW1vdgkkczAsJHMwLGxzciMyNAotKwlsZHIJJHQxLFskdGJsLCRpMSxsc2wjMl0JQCBUZDFbczA+PjE2XQotKwlsZHIJJHMwLFskdGJsLCRzMCxsc2wjMl0JQCBUZDBbczA+PjI0XQotKwlsZHIJJHQyLFskdGJsLCRpMixsc2wjMl0JQCBUZDJbczA+PjhdCi0rCWxkcgkkdDMsWyR0YmwsJGkzLGxzbCMyXQlAIFRkM1tzMD4+MF0KLSsKLSsJYW5kCSRpMSxsciwkczEJCUAgaTAKLSsJYW5kCSRpMixsciwkczEsbHNyIzE2Ci0rCWFuZAkkaTMsbHIsJHMxLGxzciM4Ci0rCW1vdgkkczEsJHMxLGxzciMyNAotKwlsZHIJJGkxLFskdGJsLCRpMSxsc2wjMl0JQCBUZDNbczE+PjBdCi0rCWxkcgkkczEsWyR0YmwsJHMxLGxzbCMyXQlAIFRkMFtzMT4+MjRdCi0rCWxkcgkkaTIsWyR0YmwsJGkyLGxzbCMyXQlAIFRkMVtzMT4+MTZdCi0rCWxkcgkkaTMsWyR0YmwsJGkzLGxzbCMyXQlAIFRkMltzMT4+OF0KLSsJZW9yCSRzMCwkczAsJGkxLHJvciMyNAotKwllb3IJJHMxLCRzMSwkdDEscm9yIzgKLSsJZW9yCSR0MiwkaTIsJHQyLHJvciM4Ci0rCWVvcgkkdDMsJGkzLCR0Myxyb3IjOAotKwotKwlhbmQJJGkxLGxyLCRzMixsc3IjOAlAIGkwCi0rCWFuZAkkaTIsbHIsJHMyCQlAIGkxCi0rCWFuZAkkaTMsbHIsJHMyLGxzciMxNgotKwltb3YJJHMyLCRzMixsc3IjMjQKLSsJbGRyCSRpMSxbJHRibCwkaTEsbHNsIzJdCUAgVGQyW3MyPj44XQotKwlsZHIJJGkyLFskdGJsLCRpMixsc2wjMl0JQCBUZDNbczI+PjBdCi0rCWxkcgkkczIsWyR0YmwsJHMyLGxzbCMyXQlAIFRkMFtzMj4+MjRdCi0rCWxkcgkkaTMsWyR0YmwsJGkzLGxzbCMyXQlAIFRkMVtzMj4+MTZdCi0rCWVvcgkkczAsJHMwLCRpMSxyb3IjMTYKLSsJZW9yCSRzMSwkczEsJGkyLHJvciMyNAotKwllb3IJJHMyLCRzMiwkdDIscm9yIzgKLSsJZW9yCSR0MywkaTMsJHQzLHJvciM4Ci0rCi0rCWFuZAkkaTEsbHIsJHMzLGxzciMxNglAIGkwCi0rCWFuZAkkaTIsbHIsJHMzLGxzciM4CUAgaTEKLSsJYW5kCSRpMyxsciwkczMJCUAgaTIKLSsJbW92CSRzMywkczMsbHNyIzI0Ci0rCWxkcgkkaTEsWyR0YmwsJGkxLGxzbCMyXQlAIFRkMVtzMz4+MTZdCi0rCWxkcgkkaTIsWyR0YmwsJGkyLGxzbCMyXQlAIFRkMltzMz4+OF0KLSsJbGRyCSRpMyxbJHRibCwkaTMsbHNsIzJdCUAgVGQzW3MzPj4wXQotKwlsZHIJJHMzLFskdGJsLCRzMyxsc2wjMl0JQCBUZDBbczM+PjI0XQotKwllb3IJJHMwLCRzMCwkaTEscm9yIzgKLSsJZW9yCSRzMSwkczEsJGkyLHJvciMxNgotKwllb3IJJHMyLCRzMiwkaTMscm9yIzI0Ci0rCWVvcgkkczMsJHMzLCR0Myxyb3IjOAotKwotKwlsZHIJJHQxLFska2V5XSwjMTYKLSsJbGRyCSR0MixbJGtleSwjLTEyXQotKwlsZHIJJHQzLFska2V5LCMtOF0KLSsJbGRyCSRpMSxbJGtleSwjLTRdCi0rCWVvcgkkczAsJHMwLCR0MQotKwllb3IJJHMxLCRzMSwkdDIKLSsJZW9yCSRzMiwkczIsJHQzCi0rCWVvcgkkczMsJHMzLCRpMQotKwotKwlzdWJzCSRyb3VuZHMsJHJvdW5kcywjMQotKwlibmUJLkxkZWNfbG9vcAotKwotKwlhZGQJJHRibCwkdGJsLCMxMDI0Ci0rCi0rCWxkcgkkdDEsWyR0YmwsIzBdCQlAIHByZWZldGNoIFRkNAotKwlsZHIJJHQyLFskdGJsLCMzMl0KLSsJbGRyCSR0MyxbJHRibCwjNjRdCi0rCWxkcgkkaTEsWyR0YmwsIzk2XQotKwlsZHIJJGkyLFskdGJsLCMxMjhdCi0rCWxkcgkkaTMsWyR0YmwsIzE2MF0KLSsJbGRyCSR0MSxbJHRibCwjMTkyXQotKwlsZHIJJHQyLFskdGJsLCMyMjRdCi0rCi0rCWFuZAkkaTEsbHIsJHMwLGxzciMxNgotKwlhbmQJJGkyLGxyLCRzMCxsc3IjOAotKwlhbmQJJGkzLGxyLCRzMAotKwlsZHJiCSRzMCxbJHRibCwkczAsbHNyIzI0XQlAIFRkNFtzMD4+MjRdCi0rCWxkcmIJJHQxLFskdGJsLCRpMV0JCUAgVGQ0W3MwPj4xNl0KLSsJbGRyYgkkdDIsWyR0YmwsJGkyXQkJQCBUZDRbczA+PjhdCi0rCWxkcmIJJHQzLFskdGJsLCRpM10JCUAgVGQ0W3MwPj4wXQotKwotKwlhbmQJJGkxLGxyLCRzMQkJQCBpMAotKwlhbmQJJGkyLGxyLCRzMSxsc3IjMTYKLSsJYW5kCSRpMyxsciwkczEsbHNyIzgKLSsJbGRyYgkkaTEsWyR0YmwsJGkxXQkJQCBUZDRbczE+PjBdCi0rCWxkcmIJJHMxLFskdGJsLCRzMSxsc3IjMjRdCUAgVGQ0W3MxPj4yNF0KLSsJbGRyYgkkaTIsWyR0YmwsJGkyXQkJQCBUZDRbczE+PjE2XQotKwlsZHJiCSRpMyxbJHRibCwkaTNdCQlAIFRkNFtzMT4+OF0KLSsJZW9yCSRzMCwkaTEsJHMwLGxzbCMyNAotKwllb3IJJHMxLCR0MSwkczEsbHNsIzgKLSsJZW9yCSR0MiwkdDIsJGkyLGxzbCM4Ci0rCWVvcgkkdDMsJHQzLCRpMyxsc2wjOAotKwotKwlhbmQJJGkxLGxyLCRzMixsc3IjOAlAIGkwCi0rCWFuZAkkaTIsbHIsJHMyCQlAIGkxCi0rCWFuZAkkaTMsbHIsJHMyLGxzciMxNgotKwlsZHJiCSRpMSxbJHRibCwkaTFdCQlAIFRkNFtzMj4+OF0KLSsJbGRyYgkkaTIsWyR0YmwsJGkyXQkJQCBUZDRbczI+PjBdCi0rCWxkcmIJJHMyLFskdGJsLCRzMixsc3IjMjRdCUAgVGQ0W3MyPj4yNF0KLSsJbGRyYgkkaTMsWyR0YmwsJGkzXQkJQCBUZDRbczI+PjE2XQotKwllb3IJJHMwLCRzMCwkaTEsbHNsIzgKLSsJZW9yCSRzMSwkaTIsJHMxLGxzbCMxNgotKwllb3IJJHMyLCR0MiwkczIsbHNsIzE2Ci0rCWVvcgkkdDMsJHQzLCRpMyxsc2wjMTYKLSsKLSsJYW5kCSRpMSxsciwkczMsbHNyIzE2CUAgaTAKLSsJYW5kCSRpMixsciwkczMsbHNyIzgJQCBpMQotKwlhbmQJJGkzLGxyLCRzMwkJQCBpMgotKwlsZHJiCSRpMSxbJHRibCwkaTFdCQlAIFRkNFtzMz4+MTZdCi0rCWxkcmIJJGkyLFskdGJsLCRpMl0JCUAgVGQ0W3MzPj44XQotKwlsZHJiCSRpMyxbJHRibCwkaTNdCQlAIFRkNFtzMz4+MF0KLSsJbGRyYgkkczMsWyR0YmwsJHMzLGxzciMyNF0JQCBUZDRbczM+PjI0XQotKwllb3IJJHMwLCRzMCwkaTEsbHNsIzE2Ci0rCWVvcgkkczEsJHMxLCRpMixsc2wjOAotKwllb3IJJHMyLCRpMywkczIsbHNsIzgKLSsJZW9yCSRzMywkdDMsJHMzLGxzbCMyNAotKwotKwlsZHIJbHIsW3NwXSwjNAkJQCBwb3AgbHIKLSsJbGRyCSR0MSxbJGtleSwjMF0KLSsJbGRyCSR0MixbJGtleSwjNF0KLSsJbGRyCSR0MyxbJGtleSwjOF0KLSsJbGRyCSRpMSxbJGtleSwjMTJdCi0rCWVvcgkkczAsJHMwLCR0MQotKwllb3IJJHMxLCRzMSwkdDIKLSsJZW9yCSRzMiwkczIsJHQzCi0rCWVvcgkkczMsJHMzLCRpMQotKwotKwlzdWIJJHRibCwkdGJsLCMxMDI0Ci0rCW1vdglwYyxscgkJCUAgcmV0dXJuCi0rLnNpemUJX2FybXY0X0FFU19kZWNyeXB0LC4tX2FybXY0X0FFU19kZWNyeXB0Ci0rLmFzY2l6CSJBRVMgZm9yIEFSTXY0LCBDUllQVE9HQU1TIGJ5IDxhcHByb1xAb3BlbnNzbC5vcmc+IgotK19fXwotKwotKyRjb2RlID1+IHMvXGJieFxzK2xyXGIvLndvcmRcdDB4ZTEyZmZmMWUvZ207CSMgbWFrZSBpdCBwb3NzaWJsZSB0byBjb21waWxlIHdpdGggLW1hcmNoPWFybXY0Ci0rcHJpbnQgJGNvZGU7Ci0tLS0gL2Rldi9udWxsCTIwMDktMDQtMjQgMDY6MDk6NDguMDAwMDAwMDAwIC0wNzAwCi0rKysgb3BlbnNzbC0wLjkuOGgvY3J5cHRvLzAuOS45LWRldi9hZXMvYWVzLWFybXY0LnMJMjAwOS0wOS0wMyAxNTo0MjozOS4wMDAwMDAwMDAgLTA3MDAKLUBAIC0wLDAgKzEsOTgyIEBACi0rLnRleHQKLSsuY29kZQkzMgotKwotKy50eXBlCUFFU19UZSwlb2JqZWN0Ci0rLmFsaWduCTUKLStBRVNfVGU6Ci0rLndvcmQJMHhjNjYzNjNhNSwgMHhmODdjN2M4NCwgMHhlZTc3Nzc5OSwgMHhmNjdiN2I4ZAotKy53b3JkCTB4ZmZmMmYyMGQsIDB4ZDY2YjZiYmQsIDB4ZGU2ZjZmYjEsIDB4OTFjNWM1NTQKLSsud29yZAkweDYwMzAzMDUwLCAweDAyMDEwMTAzLCAweGNlNjc2N2E5LCAweDU2MmIyYjdkCi0rLndvcmQJMHhlN2ZlZmUxOSwgMHhiNWQ3ZDc2MiwgMHg0ZGFiYWJlNiwgMHhlYzc2NzY5YQotKy53b3JkCTB4OGZjYWNhNDUsIDB4MWY4MjgyOWQsIDB4ODljOWM5NDAsIDB4ZmE3ZDdkODcKLSsud29yZAkweGVmZmFmYTE1LCAweGIyNTk1OWViLCAweDhlNDc0N2M5LCAweGZiZjBmMDBiCi0rLndvcmQJMHg0MWFkYWRlYywgMHhiM2Q0ZDQ2NywgMHg1ZmEyYTJmZCwgMHg0NWFmYWZlYQotKy53b3JkCTB4MjM5YzljYmYsIDB4NTNhNGE0ZjcsIDB4ZTQ3MjcyOTYsIDB4OWJjMGMwNWIKLSsud29yZAkweDc1YjdiN2MyLCAweGUxZmRmZDFjLCAweDNkOTM5M2FlLCAweDRjMjYyNjZhCi0rLndvcmQJMHg2YzM2MzY1YSwgMHg3ZTNmM2Y0MSwgMHhmNWY3ZjcwMiwgMHg4M2NjY2M0ZgotKy53b3JkCTB4NjgzNDM0NWMsIDB4NTFhNWE1ZjQsIDB4ZDFlNWU1MzQsIDB4ZjlmMWYxMDgKLSsud29yZAkweGUyNzE3MTkzLCAweGFiZDhkODczLCAweDYyMzEzMTUzLCAweDJhMTUxNTNmCi0rLndvcmQJMHgwODA0MDQwYywgMHg5NWM3Yzc1MiwgMHg0NjIzMjM2NSwgMHg5ZGMzYzM1ZQotKy53b3JkCTB4MzAxODE4MjgsIDB4Mzc5Njk2YTEsIDB4MGEwNTA1MGYsIDB4MmY5YTlhYjUKLSsud29yZAkweDBlMDcwNzA5LCAweDI0MTIxMjM2LCAweDFiODA4MDliLCAweGRmZTJlMjNkCi0rLndvcmQJMHhjZGViZWIyNiwgMHg0ZTI3Mjc2OSwgMHg3ZmIyYjJjZCwgMHhlYTc1NzU5ZgotKy53b3JkCTB4MTIwOTA5MWIsIDB4MWQ4MzgzOWUsIDB4NTgyYzJjNzQsIDB4MzQxYTFhMmUKLSsud29yZAkweDM2MWIxYjJkLCAweGRjNmU2ZWIyLCAweGI0NWE1YWVlLCAweDViYTBhMGZiCi0rLndvcmQJMHhhNDUyNTJmNiwgMHg3NjNiM2I0ZCwgMHhiN2Q2ZDY2MSwgMHg3ZGIzYjNjZQotKy53b3JkCTB4NTIyOTI5N2IsIDB4ZGRlM2UzM2UsIDB4NWUyZjJmNzEsIDB4MTM4NDg0OTcKLSsud29yZAkweGE2NTM1M2Y1LCAweGI5ZDFkMTY4LCAweDAwMDAwMDAwLCAweGMxZWRlZDJjCi0rLndvcmQJMHg0MDIwMjA2MCwgMHhlM2ZjZmMxZiwgMHg3OWIxYjFjOCwgMHhiNjViNWJlZAotKy53b3JkCTB4ZDQ2YTZhYmUsIDB4OGRjYmNiNDYsIDB4NjdiZWJlZDksIDB4NzIzOTM5NGIKLSsud29yZAkweDk0NGE0YWRlLCAweDk4NGM0Y2Q0LCAweGIwNTg1OGU4LCAweDg1Y2ZjZjRhCi0rLndvcmQJMHhiYmQwZDA2YiwgMHhjNWVmZWYyYSwgMHg0ZmFhYWFlNSwgMHhlZGZiZmIxNgotKy53b3JkCTB4ODY0MzQzYzUsIDB4OWE0ZDRkZDcsIDB4NjYzMzMzNTUsIDB4MTE4NTg1OTQKLSsud29yZAkweDhhNDU0NWNmLCAweGU5ZjlmOTEwLCAweDA0MDIwMjA2LCAweGZlN2Y3ZjgxCi0rLndvcmQJMHhhMDUwNTBmMCwgMHg3ODNjM2M0NCwgMHgyNTlmOWZiYSwgMHg0YmE4YThlMwotKy53b3JkCTB4YTI1MTUxZjMsIDB4NWRhM2EzZmUsIDB4ODA0MDQwYzAsIDB4MDU4ZjhmOGEKLSsud29yZAkweDNmOTI5MmFkLCAweDIxOWQ5ZGJjLCAweDcwMzgzODQ4LCAweGYxZjVmNTA0Ci0rLndvcmQJMHg2M2JjYmNkZiwgMHg3N2I2YjZjMSwgMHhhZmRhZGE3NSwgMHg0MjIxMjE2MwotKy53b3JkCTB4MjAxMDEwMzAsIDB4ZTVmZmZmMWEsIDB4ZmRmM2YzMGUsIDB4YmZkMmQyNmQKLSsud29yZAkweDgxY2RjZDRjLCAweDE4MGMwYzE0LCAweDI2MTMxMzM1LCAweGMzZWNlYzJmCi0rLndvcmQJMHhiZTVmNWZlMSwgMHgzNTk3OTdhMiwgMHg4ODQ0NDRjYywgMHgyZTE3MTczOQotKy53b3JkCTB4OTNjNGM0NTcsIDB4NTVhN2E3ZjIsIDB4ZmM3ZTdlODIsIDB4N2EzZDNkNDcKLSsud29yZAkweGM4NjQ2NGFjLCAweGJhNWQ1ZGU3LCAweDMyMTkxOTJiLCAweGU2NzM3Mzk1Ci0rLndvcmQJMHhjMDYwNjBhMCwgMHgxOTgxODE5OCwgMHg5ZTRmNGZkMSwgMHhhM2RjZGM3ZgotKy53b3JkCTB4NDQyMjIyNjYsIDB4NTQyYTJhN2UsIDB4M2I5MDkwYWIsIDB4MGI4ODg4ODMKLSsud29yZAkweDhjNDY0NmNhLCAweGM3ZWVlZTI5LCAweDZiYjhiOGQzLCAweDI4MTQxNDNjCi0rLndvcmQJMHhhN2RlZGU3OSwgMHhiYzVlNWVlMiwgMHgxNjBiMGIxZCwgMHhhZGRiZGI3NgotKy53b3JkCTB4ZGJlMGUwM2IsIDB4NjQzMjMyNTYsIDB4NzQzYTNhNGUsIDB4MTQwYTBhMWUKLSsud29yZAkweDkyNDk0OWRiLCAweDBjMDYwNjBhLCAweDQ4MjQyNDZjLCAweGI4NWM1Y2U0Ci0rLndvcmQJMHg5ZmMyYzI1ZCwgMHhiZGQzZDM2ZSwgMHg0M2FjYWNlZiwgMHhjNDYyNjJhNgotKy53b3JkCTB4Mzk5MTkxYTgsIDB4MzE5NTk1YTQsIDB4ZDNlNGU0MzcsIDB4ZjI3OTc5OGIKLSsud29yZAkweGQ1ZTdlNzMyLCAweDhiYzhjODQzLCAweDZlMzczNzU5LCAweGRhNmQ2ZGI3Ci0rLndvcmQJMHgwMThkOGQ4YywgMHhiMWQ1ZDU2NCwgMHg5YzRlNGVkMiwgMHg0OWE5YTllMAotKy53b3JkCTB4ZDg2YzZjYjQsIDB4YWM1NjU2ZmEsIDB4ZjNmNGY0MDcsIDB4Y2ZlYWVhMjUKLSsud29yZAkweGNhNjU2NWFmLCAweGY0N2E3YThlLCAweDQ3YWVhZWU5LCAweDEwMDgwODE4Ci0rLndvcmQJMHg2ZmJhYmFkNSwgMHhmMDc4Nzg4OCwgMHg0YTI1MjU2ZiwgMHg1YzJlMmU3MgotKy53b3JkCTB4MzgxYzFjMjQsIDB4NTdhNmE2ZjEsIDB4NzNiNGI0YzcsIDB4OTdjNmM2NTEKLSsud29yZAkweGNiZThlODIzLCAweGExZGRkZDdjLCAweGU4NzQ3NDljLCAweDNlMWYxZjIxCi0rLndvcmQJMHg5NjRiNGJkZCwgMHg2MWJkYmRkYywgMHgwZDhiOGI4NiwgMHgwZjhhOGE4NQotKy53b3JkCTB4ZTA3MDcwOTAsIDB4N2MzZTNlNDIsIDB4NzFiNWI1YzQsIDB4Y2M2NjY2YWEKLSsud29yZAkweDkwNDg0OGQ4LCAweDA2MDMwMzA1LCAweGY3ZjZmNjAxLCAweDFjMGUwZTEyCi0rLndvcmQJMHhjMjYxNjFhMywgMHg2YTM1MzU1ZiwgMHhhZTU3NTdmOSwgMHg2OWI5YjlkMAotKy53b3JkCTB4MTc4Njg2OTEsIDB4OTljMWMxNTgsIDB4M2ExZDFkMjcsIDB4Mjc5ZTllYjkKLSsud29yZAkweGQ5ZTFlMTM4LCAweGViZjhmODEzLCAweDJiOTg5OGIzLCAweDIyMTExMTMzCi0rLndvcmQJMHhkMjY5NjliYiwgMHhhOWQ5ZDk3MCwgMHgwNzhlOGU4OSwgMHgzMzk0OTRhNwotKy53b3JkCTB4MmQ5YjliYjYsIDB4M2MxZTFlMjIsIDB4MTU4Nzg3OTIsIDB4YzllOWU5MjAKLSsud29yZAkweDg3Y2VjZTQ5LCAweGFhNTU1NWZmLCAweDUwMjgyODc4LCAweGE1ZGZkZjdhCi0rLndvcmQJMHgwMzhjOGM4ZiwgMHg1OWExYTFmOCwgMHgwOTg5ODk4MCwgMHgxYTBkMGQxNwotKy53b3JkCTB4NjViZmJmZGEsIDB4ZDdlNmU2MzEsIDB4ODQ0MjQyYzYsIDB4ZDA2ODY4YjgKLSsud29yZAkweDgyNDE0MWMzLCAweDI5OTk5OWIwLCAweDVhMmQyZDc3LCAweDFlMGYwZjExCi0rLndvcmQJMHg3YmIwYjBjYiwgMHhhODU0NTRmYywgMHg2ZGJiYmJkNiwgMHgyYzE2MTYzYQotK0AgVGU0WzI1Nl0KLSsuYnl0ZQkweDYzLCAweDdjLCAweDc3LCAweDdiLCAweGYyLCAweDZiLCAweDZmLCAweGM1Ci0rLmJ5dGUJMHgzMCwgMHgwMSwgMHg2NywgMHgyYiwgMHhmZSwgMHhkNywgMHhhYiwgMHg3NgotKy5ieXRlCTB4Y2EsIDB4ODIsIDB4YzksIDB4N2QsIDB4ZmEsIDB4NTksIDB4NDcsIDB4ZjAKLSsuYnl0ZQkweGFkLCAweGQ0LCAweGEyLCAweGFmLCAweDljLCAweGE0LCAweDcyLCAweGMwCi0rLmJ5dGUJMHhiNywgMHhmZCwgMHg5MywgMHgyNiwgMHgzNiwgMHgzZiwgMHhmNywgMHhjYwotKy5ieXRlCTB4MzQsIDB4YTUsIDB4ZTUsIDB4ZjEsIDB4NzEsIDB4ZDgsIDB4MzEsIDB4MTUKLSsuYnl0ZQkweDA0LCAweGM3LCAweDIzLCAweGMzLCAweDE4LCAweDk2LCAweDA1LCAweDlhCi0rLmJ5dGUJMHgwNywgMHgxMiwgMHg4MCwgMHhlMiwgMHhlYiwgMHgyNywgMHhiMiwgMHg3NQotKy5ieXRlCTB4MDksIDB4ODMsIDB4MmMsIDB4MWEsIDB4MWIsIDB4NmUsIDB4NWEsIDB4YTAKLSsuYnl0ZQkweDUyLCAweDNiLCAweGQ2LCAweGIzLCAweDI5LCAweGUzLCAweDJmLCAweDg0Ci0rLmJ5dGUJMHg1MywgMHhkMSwgMHgwMCwgMHhlZCwgMHgyMCwgMHhmYywgMHhiMSwgMHg1YgotKy5ieXRlCTB4NmEsIDB4Y2IsIDB4YmUsIDB4MzksIDB4NGEsIDB4NGMsIDB4NTgsIDB4Y2YKLSsuYnl0ZQkweGQwLCAweGVmLCAweGFhLCAweGZiLCAweDQzLCAweDRkLCAweDMzLCAweDg1Ci0rLmJ5dGUJMHg0NSwgMHhmOSwgMHgwMiwgMHg3ZiwgMHg1MCwgMHgzYywgMHg5ZiwgMHhhOAotKy5ieXRlCTB4NTEsIDB4YTMsIDB4NDAsIDB4OGYsIDB4OTIsIDB4OWQsIDB4MzgsIDB4ZjUKLSsuYnl0ZQkweGJjLCAweGI2LCAweGRhLCAweDIxLCAweDEwLCAweGZmLCAweGYzLCAweGQyCi0rLmJ5dGUJMHhjZCwgMHgwYywgMHgxMywgMHhlYywgMHg1ZiwgMHg5NywgMHg0NCwgMHgxNwotKy5ieXRlCTB4YzQsIDB4YTcsIDB4N2UsIDB4M2QsIDB4NjQsIDB4NWQsIDB4MTksIDB4NzMKLSsuYnl0ZQkweDYwLCAweDgxLCAweDRmLCAweGRjLCAweDIyLCAweDJhLCAweDkwLCAweDg4Ci0rLmJ5dGUJMHg0NiwgMHhlZSwgMHhiOCwgMHgxNCwgMHhkZSwgMHg1ZSwgMHgwYiwgMHhkYgotKy5ieXRlCTB4ZTAsIDB4MzIsIDB4M2EsIDB4MGEsIDB4NDksIDB4MDYsIDB4MjQsIDB4NWMKLSsuYnl0ZQkweGMyLCAweGQzLCAweGFjLCAweDYyLCAweDkxLCAweDk1LCAweGU0LCAweDc5Ci0rLmJ5dGUJMHhlNywgMHhjOCwgMHgzNywgMHg2ZCwgMHg4ZCwgMHhkNSwgMHg0ZSwgMHhhOQotKy5ieXRlCTB4NmMsIDB4NTYsIDB4ZjQsIDB4ZWEsIDB4NjUsIDB4N2EsIDB4YWUsIDB4MDgKLSsuYnl0ZQkweGJhLCAweDc4LCAweDI1LCAweDJlLCAweDFjLCAweGE2LCAweGI0LCAweGM2Ci0rLmJ5dGUJMHhlOCwgMHhkZCwgMHg3NCwgMHgxZiwgMHg0YiwgMHhiZCwgMHg4YiwgMHg4YQotKy5ieXRlCTB4NzAsIDB4M2UsIDB4YjUsIDB4NjYsIDB4NDgsIDB4MDMsIDB4ZjYsIDB4MGUKLSsuYnl0ZQkweDYxLCAweDM1LCAweDU3LCAweGI5LCAweDg2LCAweGMxLCAweDFkLCAweDllCi0rLmJ5dGUJMHhlMSwgMHhmOCwgMHg5OCwgMHgxMSwgMHg2OSwgMHhkOSwgMHg4ZSwgMHg5NAotKy5ieXRlCTB4OWIsIDB4MWUsIDB4ODcsIDB4ZTksIDB4Y2UsIDB4NTUsIDB4MjgsIDB4ZGYKLSsuYnl0ZQkweDhjLCAweGExLCAweDg5LCAweDBkLCAweGJmLCAweGU2LCAweDQyLCAweDY4Ci0rLmJ5dGUJMHg0MSwgMHg5OSwgMHgyZCwgMHgwZiwgMHhiMCwgMHg1NCwgMHhiYiwgMHgxNgotK0AgcmNvbltdCi0rLndvcmQJMHgwMTAwMDAwMCwgMHgwMjAwMDAwMCwgMHgwNDAwMDAwMCwgMHgwODAwMDAwMAotKy53b3JkCTB4MTAwMDAwMDAsIDB4MjAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4ODAwMDAwMDAKLSsud29yZAkweDFCMDAwMDAwLCAweDM2MDAwMDAwLCAwLCAwLCAwLCAwLCAwLCAwCi0rLnNpemUJQUVTX1RlLC4tQUVTX1RlCi0rCi0rQCB2b2lkIEFFU19lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCi0rQCAJCSBjb25zdCBBRVNfS0VZICprZXkpIHsKLSsuZ2xvYmFsIEFFU19lbmNyeXB0Ci0rLnR5cGUgICBBRVNfZW5jcnlwdCwlZnVuY3Rpb24KLSsuYWxpZ24JNQotK0FFU19lbmNyeXB0OgotKwlzdWIJcjMscGMsIzgJCUAgQUVTX2VuY3J5cHQKLSsJc3RtZGIgICBzcCEse3IxLHI0LXIxMixscn0KLSsJbW92CXIxMixyMAkJQCBpbnAKLSsJbW92CXIxMSxyMgotKwlzdWIJcjEwLHIzLCNBRVNfZW5jcnlwdC1BRVNfVGUJQCBUZQotKwotKwlsZHJiCXIwLFtyMTIsIzNdCUAgbG9hZCBpbnB1dCBkYXRhIGluIGVuZGlhbi1uZXV0cmFsCi0rCWxkcmIJcjQsW3IxMiwjMl0JQCBtYW5uZXIuLi4KLSsJbGRyYglyNSxbcjEyLCMxXQotKwlsZHJiCXI2LFtyMTIsIzBdCi0rCW9ycglyMCxyMCxyNCxsc2wjOAotKwlvcnIJcjAscjAscjUsbHNsIzE2Ci0rCW9ycglyMCxyMCxyNixsc2wjMjQKLSsJbGRyYglyMSxbcjEyLCM3XQotKwlsZHJiCXI0LFtyMTIsIzZdCi0rCWxkcmIJcjUsW3IxMiwjNV0KLSsJbGRyYglyNixbcjEyLCM0XQotKwlvcnIJcjEscjEscjQsbHNsIzgKLSsJb3JyCXIxLHIxLHI1LGxzbCMxNgotKwlvcnIJcjEscjEscjYsbHNsIzI0Ci0rCWxkcmIJcjIsW3IxMiwjMTFdCi0rCWxkcmIJcjQsW3IxMiwjMTBdCi0rCWxkcmIJcjUsW3IxMiwjOV0KLSsJbGRyYglyNixbcjEyLCM4XQotKwlvcnIJcjIscjIscjQsbHNsIzgKLSsJb3JyCXIyLHIyLHI1LGxzbCMxNgotKwlvcnIJcjIscjIscjYsbHNsIzI0Ci0rCWxkcmIJcjMsW3IxMiwjMTVdCi0rCWxkcmIJcjQsW3IxMiwjMTRdCi0rCWxkcmIJcjUsW3IxMiwjMTNdCi0rCWxkcmIJcjYsW3IxMiwjMTJdCi0rCW9ycglyMyxyMyxyNCxsc2wjOAotKwlvcnIJcjMscjMscjUsbHNsIzE2Ci0rCW9ycglyMyxyMyxyNixsc2wjMjQKLSsKLSsJYmwJX2FybXY0X0FFU19lbmNyeXB0Ci0rCi0rCWxkcglyMTIsW3NwXSwjNAkJQCBwb3Agb3V0Ci0rCW1vdglyNCxyMCxsc3IjMjQJCUAgd3JpdGUgb3V0cHV0IGluIGVuZGlhbi1uZXV0cmFsCi0rCW1vdglyNSxyMCxsc3IjMTYJCUAgbWFubmVyLi4uCi0rCW1vdglyNixyMCxsc3IjOAotKwlzdHJiCXI0LFtyMTIsIzBdCi0rCXN0cmIJcjUsW3IxMiwjMV0KLSsJc3RyYglyNixbcjEyLCMyXQotKwlzdHJiCXIwLFtyMTIsIzNdCi0rCW1vdglyNCxyMSxsc3IjMjQKLSsJbW92CXI1LHIxLGxzciMxNgotKwltb3YJcjYscjEsbHNyIzgKLSsJc3RyYglyNCxbcjEyLCM0XQotKwlzdHJiCXI1LFtyMTIsIzVdCi0rCXN0cmIJcjYsW3IxMiwjNl0KLSsJc3RyYglyMSxbcjEyLCM3XQotKwltb3YJcjQscjIsbHNyIzI0Ci0rCW1vdglyNSxyMixsc3IjMTYKLSsJbW92CXI2LHIyLGxzciM4Ci0rCXN0cmIJcjQsW3IxMiwjOF0KLSsJc3RyYglyNSxbcjEyLCM5XQotKwlzdHJiCXI2LFtyMTIsIzEwXQotKwlzdHJiCXIyLFtyMTIsIzExXQotKwltb3YJcjQscjMsbHNyIzI0Ci0rCW1vdglyNSxyMyxsc3IjMTYKLSsJbW92CXI2LHIzLGxzciM4Ci0rCXN0cmIJcjQsW3IxMiwjMTJdCi0rCXN0cmIJcjUsW3IxMiwjMTNdCi0rCXN0cmIJcjYsW3IxMiwjMTRdCi0rCXN0cmIJcjMsW3IxMiwjMTVdCi0rCi0rCWxkbWlhICAgc3AhLHtyNC1yMTIsbHJ9Ci0rCXRzdAlsciwjMQotKwltb3ZlcQlwYyxscgkJCUAgYmUgYmluYXJ5IGNvbXBhdGlibGUgd2l0aCBWNCwgeWV0Ci0rCS53b3JkCTB4ZTEyZmZmMWUJCQlAIGludGVyb3BlcmFibGUgd2l0aCBUaHVtYiBJU0E6LSkKLSsuc2l6ZQlBRVNfZW5jcnlwdCwuLUFFU19lbmNyeXB0Ci0rCi0rLnR5cGUgICBfYXJtdjRfQUVTX2VuY3J5cHQsJWZ1bmN0aW9uCi0rLmFsaWduCTIKLStfYXJtdjRfQUVTX2VuY3J5cHQ6Ci0rCXN0cglscixbc3AsIy00XSEJCUAgcHVzaCBscgotKwlsZHIJcjQsW3IxMV0sIzE2Ci0rCWxkcglyNSxbcjExLCMtMTJdCi0rCWxkcglyNixbcjExLCMtOF0KLSsJbGRyCXI3LFtyMTEsIy00XQotKwlsZHIJcjEyLFtyMTEsIzI0MC0xNl0KLSsJZW9yCXIwLHIwLHI0Ci0rCWVvcglyMSxyMSxyNQotKwllb3IJcjIscjIscjYKLSsJZW9yCXIzLHIzLHI3Ci0rCXN1YglyMTIscjEyLCMxCi0rCW1vdglsciwjMjU1Ci0rCi0rLkxlbmNfbG9vcDoKLSsJYW5kCXI4LGxyLHIwLGxzciM4Ci0rCWFuZAlyOSxscixyMCxsc3IjMTYKLSsJYW5kCXI3LGxyLHIwCi0rCW1vdglyMCxyMCxsc3IjMjQKLSsJbGRyCXI0LFtyMTAscjcsbHNsIzJdCUAgVGUzW3MwPj4wXQotKwlsZHIJcjAsW3IxMCxyMCxsc2wjMl0JQCBUZTBbczA+PjI0XQotKwlsZHIJcjUsW3IxMCxyOCxsc2wjMl0JQCBUZTJbczA+PjhdCi0rCWxkcglyNixbcjEwLHI5LGxzbCMyXQlAIFRlMVtzMD4+MTZdCi0rCi0rCWFuZAlyNyxscixyMSxsc3IjMTYJQCBpMAotKwlhbmQJcjgsbHIscjEKLSsJYW5kCXI5LGxyLHIxLGxzciM4Ci0rCW1vdglyMSxyMSxsc3IjMjQKLSsJbGRyCXI3LFtyMTAscjcsbHNsIzJdCUAgVGUxW3MxPj4xNl0KLSsJbGRyCXIxLFtyMTAscjEsbHNsIzJdCUAgVGUwW3MxPj4yNF0KLSsJbGRyCXI4LFtyMTAscjgsbHNsIzJdCUAgVGUzW3MxPj4wXQotKwlsZHIJcjksW3IxMCxyOSxsc2wjMl0JQCBUZTJbczE+PjhdCi0rCWVvcglyMCxyMCxyNyxyb3IjOAotKwllb3IJcjEscjEscjQscm9yIzI0Ci0rCWVvcglyNSxyNSxyOCxyb3IjOAotKwllb3IJcjYscjYscjkscm9yIzgKLSsKLSsJYW5kCXI3LGxyLHIyLGxzciM4CUAgaTAKLSsJYW5kCXI4LGxyLHIyLGxzciMxNglAIGkxCi0rCWFuZAlyOSxscixyMgotKwltb3YJcjIscjIsbHNyIzI0Ci0rCWxkcglyNyxbcjEwLHI3LGxzbCMyXQlAIFRlMltzMj4+OF0KLSsJbGRyCXI4LFtyMTAscjgsbHNsIzJdCUAgVGUxW3MyPj4xNl0KLSsJbGRyCXIyLFtyMTAscjIsbHNsIzJdCUAgVGUwW3MyPj4yNF0KLSsJbGRyCXI5LFtyMTAscjksbHNsIzJdCUAgVGUzW3MyPj4wXQotKwllb3IJcjAscjAscjcscm9yIzE2Ci0rCWVvcglyMSxyMSxyOCxyb3IjOAotKwllb3IJcjIscjIscjUscm9yIzE2Ci0rCWVvcglyNixyNixyOSxyb3IjMTYKLSsKLSsJYW5kCXI3LGxyLHIzCQlAIGkwCi0rCWFuZAlyOCxscixyMyxsc3IjOAlAIGkxCi0rCWFuZAlyOSxscixyMyxsc3IjMTYJQCBpMgotKwltb3YJcjMscjMsbHNyIzI0Ci0rCWxkcglyNyxbcjEwLHI3LGxzbCMyXQlAIFRlM1tzMz4+MF0KLSsJbGRyCXI4LFtyMTAscjgsbHNsIzJdCUAgVGUyW3MzPj44XQotKwlsZHIJcjksW3IxMCxyOSxsc2wjMl0JQCBUZTFbczM+PjE2XQotKwlsZHIJcjMsW3IxMCxyMyxsc2wjMl0JQCBUZTBbczM+PjI0XQotKwllb3IJcjAscjAscjcscm9yIzI0Ci0rCWVvcglyMSxyMSxyOCxyb3IjMTYKLSsJZW9yCXIyLHIyLHI5LHJvciM4Ci0rCWVvcglyMyxyMyxyNixyb3IjOAotKwotKwlsZHIJcjQsW3IxMV0sIzE2Ci0rCWxkcglyNSxbcjExLCMtMTJdCi0rCWxkcglyNixbcjExLCMtOF0KLSsJbGRyCXI3LFtyMTEsIy00XQotKwllb3IJcjAscjAscjQKLSsJZW9yCXIxLHIxLHI1Ci0rCWVvcglyMixyMixyNgotKwllb3IJcjMscjMscjcKLSsKLSsJc3VicwlyMTIscjEyLCMxCi0rCWJuZQkuTGVuY19sb29wCi0rCi0rCWFkZAlyMTAscjEwLCMyCi0rCi0rCWFuZAlyNyxscixyMAotKwlhbmQJcjgsbHIscjAsbHNyIzgKLSsJYW5kCXI5LGxyLHIwLGxzciMxNgotKwltb3YJcjAscjAsbHNyIzI0Ci0rCWxkcmIJcjQsW3IxMCxyNyxsc2wjMl0JQCBUZTRbczA+PjBdCi0rCWxkcmIJcjAsW3IxMCxyMCxsc2wjMl0JQCBUZTRbczA+PjI0XQotKwlsZHJiCXI1LFtyMTAscjgsbHNsIzJdCUAgVGU0W3MwPj44XQotKwlsZHJiCXI2LFtyMTAscjksbHNsIzJdCUAgVGU0W3MwPj4xNl0KLSsKLSsJYW5kCXI3LGxyLHIxLGxzciMxNglAIGkwCi0rCWFuZAlyOCxscixyMQotKwlhbmQJcjksbHIscjEsbHNyIzgKLSsJbW92CXIxLHIxLGxzciMyNAotKwlsZHJiCXI3LFtyMTAscjcsbHNsIzJdCUAgVGU0W3MxPj4xNl0KLSsJbGRyYglyMSxbcjEwLHIxLGxzbCMyXQlAIFRlNFtzMT4+MjRdCi0rCWxkcmIJcjgsW3IxMCxyOCxsc2wjMl0JQCBUZTRbczE+PjBdCi0rCWxkcmIJcjksW3IxMCxyOSxsc2wjMl0JQCBUZTRbczE+PjhdCi0rCWVvcglyMCxyNyxyMCxsc2wjOAotKwllb3IJcjEscjQscjEsbHNsIzI0Ci0rCWVvcglyNSxyOCxyNSxsc2wjOAotKwllb3IJcjYscjkscjYsbHNsIzgKLSsKLSsJYW5kCXI3LGxyLHIyLGxzciM4CUAgaTAKLSsJYW5kCXI4LGxyLHIyLGxzciMxNglAIGkxCi0rCWFuZAlyOSxscixyMgotKwltb3YJcjIscjIsbHNyIzI0Ci0rCWxkcmIJcjcsW3IxMCxyNyxsc2wjMl0JQCBUZTRbczI+PjhdCi0rCWxkcmIJcjgsW3IxMCxyOCxsc2wjMl0JQCBUZTRbczI+PjE2XQotKwlsZHJiCXIyLFtyMTAscjIsbHNsIzJdCUAgVGU0W3MyPj4yNF0KLSsJbGRyYglyOSxbcjEwLHI5LGxzbCMyXQlAIFRlNFtzMj4+MF0KLSsJZW9yCXIwLHI3LHIwLGxzbCM4Ci0rCWVvcglyMSxyMSxyOCxsc2wjMTYKLSsJZW9yCXIyLHI1LHIyLGxzbCMyNAotKwllb3IJcjYscjkscjYsbHNsIzgKLSsKLSsJYW5kCXI3LGxyLHIzCQlAIGkwCi0rCWFuZAlyOCxscixyMyxsc3IjOAlAIGkxCi0rCWFuZAlyOSxscixyMyxsc3IjMTYJQCBpMgotKwltb3YJcjMscjMsbHNyIzI0Ci0rCWxkcmIJcjcsW3IxMCxyNyxsc2wjMl0JQCBUZTRbczM+PjBdCi0rCWxkcmIJcjgsW3IxMCxyOCxsc2wjMl0JQCBUZTRbczM+PjhdCi0rCWxkcmIJcjksW3IxMCxyOSxsc2wjMl0JQCBUZTRbczM+PjE2XQotKwlsZHJiCXIzLFtyMTAscjMsbHNsIzJdCUAgVGU0W3MzPj4yNF0KLSsJZW9yCXIwLHI3LHIwLGxzbCM4Ci0rCWVvcglyMSxyMSxyOCxsc2wjOAotKwllb3IJcjIscjIscjksbHNsIzE2Ci0rCWVvcglyMyxyNixyMyxsc2wjMjQKLSsKLSsJbGRyCWxyLFtzcF0sIzQJCUAgcG9wIGxyCi0rCWxkcglyNCxbcjExLCMwXQotKwlsZHIJcjUsW3IxMSwjNF0KLSsJbGRyCXI2LFtyMTEsIzhdCi0rCWxkcglyNyxbcjExLCMxMl0KLSsJZW9yCXIwLHIwLHI0Ci0rCWVvcglyMSxyMSxyNQotKwllb3IJcjIscjIscjYKLSsJZW9yCXIzLHIzLHI3Ci0rCi0rCXN1YglyMTAscjEwLCMyCi0rCW1vdglwYyxscgkJCUAgcmV0dXJuCi0rLnNpemUJX2FybXY0X0FFU19lbmNyeXB0LC4tX2FybXY0X0FFU19lbmNyeXB0Ci0rCi0rLmdsb2JhbCBBRVNfc2V0X2VuY3J5cHRfa2V5Ci0rLnR5cGUgICBBRVNfc2V0X2VuY3J5cHRfa2V5LCVmdW5jdGlvbgotKy5hbGlnbgk1Ci0rQUVTX3NldF9lbmNyeXB0X2tleToKLSsJc3ViCXIzLHBjLCM4CQlAIEFFU19zZXRfZW5jcnlwdF9rZXkKLSsJdGVxCXIwLCMwCi0rCW1vdmVxCXIwLCMtMQotKwliZXEJLkxhYnJ0Ci0rCXRlcQlyMiwjMAotKwltb3ZlcQlyMCwjLTEKLSsJYmVxCS5MYWJydAotKwotKwl0ZXEJcjEsIzEyOAotKwliZXEJLkxvawotKwl0ZXEJcjEsIzE5MgotKwliZXEJLkxvawotKwl0ZXEJcjEsIzI1NgotKwltb3ZuZQlyMCwjLTEKLSsJYm5lCS5MYWJydAotKwotKy5Mb2s6CXN0bWRiICAgc3AhLHtyNC1yMTIsbHJ9Ci0rCXN1YglyMTAscjMsI0FFU19zZXRfZW5jcnlwdF9rZXktQUVTX1RlLTEwMjQJQCBUZTQKLSsKLSsJbW92CXIxMixyMAkJQCBpbnAKLSsJbW92CWxyLHIxCQkJQCBiaXRzCi0rCW1vdglyMTEscjIJCQlAIGtleQotKwotKwlsZHJiCXIwLFtyMTIsIzNdCUAgbG9hZCBpbnB1dCBkYXRhIGluIGVuZGlhbi1uZXV0cmFsCi0rCWxkcmIJcjQsW3IxMiwjMl0JQCBtYW5uZXIuLi4KLSsJbGRyYglyNSxbcjEyLCMxXQotKwlsZHJiCXI2LFtyMTIsIzBdCi0rCW9ycglyMCxyMCxyNCxsc2wjOAotKwlvcnIJcjAscjAscjUsbHNsIzE2Ci0rCW9ycglyMCxyMCxyNixsc2wjMjQKLSsJbGRyYglyMSxbcjEyLCM3XQotKwlsZHJiCXI0LFtyMTIsIzZdCi0rCWxkcmIJcjUsW3IxMiwjNV0KLSsJbGRyYglyNixbcjEyLCM0XQotKwlvcnIJcjEscjEscjQsbHNsIzgKLSsJb3JyCXIxLHIxLHI1LGxzbCMxNgotKwlvcnIJcjEscjEscjYsbHNsIzI0Ci0rCWxkcmIJcjIsW3IxMiwjMTFdCi0rCWxkcmIJcjQsW3IxMiwjMTBdCi0rCWxkcmIJcjUsW3IxMiwjOV0KLSsJbGRyYglyNixbcjEyLCM4XQotKwlvcnIJcjIscjIscjQsbHNsIzgKLSsJb3JyCXIyLHIyLHI1LGxzbCMxNgotKwlvcnIJcjIscjIscjYsbHNsIzI0Ci0rCWxkcmIJcjMsW3IxMiwjMTVdCi0rCWxkcmIJcjQsW3IxMiwjMTRdCi0rCWxkcmIJcjUsW3IxMiwjMTNdCi0rCWxkcmIJcjYsW3IxMiwjMTJdCi0rCW9ycglyMyxyMyxyNCxsc2wjOAotKwlvcnIJcjMscjMscjUsbHNsIzE2Ci0rCW9ycglyMyxyMyxyNixsc2wjMjQKLSsJc3RyCXIwLFtyMTFdLCMxNgotKwlzdHIJcjEsW3IxMSwjLTEyXQotKwlzdHIJcjIsW3IxMSwjLThdCi0rCXN0cglyMyxbcjExLCMtNF0KLSsKLSsJdGVxCWxyLCMxMjgKLSsJYm5lCS5Mbm90MTI4Ci0rCW1vdglyMTIsIzEwCi0rCXN0cglyMTIsW3IxMSwjMjQwLTE2XQotKwlhZGQJcjYscjEwLCMyNTYJCQlAIHJjb24KLSsJbW92CWxyLCMyNTUKLSsKLSsuTDEyOF9sb29wOgotKwlhbmQJcjUsbHIscjMsbHNyIzI0Ci0rCWFuZAlyNyxscixyMyxsc3IjMTYKLSsJYW5kCXI4LGxyLHIzLGxzciM4Ci0rCWFuZAlyOSxscixyMwotKwlsZHJiCXI1LFtyMTAscjVdCi0rCWxkcmIJcjcsW3IxMCxyN10KLSsJbGRyYglyOCxbcjEwLHI4XQotKwlsZHJiCXI5LFtyMTAscjldCi0rCWxkcglyNCxbcjZdLCM0CQkJQCByY29uW2krK10KLSsJb3JyCXI1LHI1LHI3LGxzbCMyNAotKwlvcnIJcjUscjUscjgsbHNsIzE2Ci0rCW9ycglyNSxyNSxyOSxsc2wjOAotKwllb3IJcjUscjUscjQKLSsJZW9yCXIwLHIwLHI1CQkJQCBya1s0XT1ya1swXV4uLi4KLSsJZW9yCXIxLHIxLHIwCQkJQCBya1s1XT1ya1sxXV5ya1s0XQotKwllb3IJcjIscjIscjEJCQlAIHJrWzZdPXJrWzJdXnJrWzVdCi0rCWVvcglyMyxyMyxyMgkJCUAgcmtbN109cmtbM11ecmtbNl0KLSsJc3RyCXIwLFtyMTFdLCMxNgotKwlzdHIJcjEsW3IxMSwjLTEyXQotKwlzdHIJcjIsW3IxMSwjLThdCi0rCXN0cglyMyxbcjExLCMtNF0KLSsKLSsJc3VicwlyMTIscjEyLCMxCi0rCWJuZQkuTDEyOF9sb29wCi0rCXN1YglyMixyMTEsIzE3NgotKwliCS5MZG9uZQotKwotKy5Mbm90MTI4OgotKwlsZHJiCXI4LFtyMTIsIzE5XQotKwlsZHJiCXI0LFtyMTIsIzE4XQotKwlsZHJiCXI1LFtyMTIsIzE3XQotKwlsZHJiCXI2LFtyMTIsIzE2XQotKwlvcnIJcjgscjgscjQsbHNsIzgKLSsJb3JyCXI4LHI4LHI1LGxzbCMxNgotKwlvcnIJcjgscjgscjYsbHNsIzI0Ci0rCWxkcmIJcjksW3IxMiwjMjNdCi0rCWxkcmIJcjQsW3IxMiwjMjJdCi0rCWxkcmIJcjUsW3IxMiwjMjFdCi0rCWxkcmIJcjYsW3IxMiwjMjBdCi0rCW9ycglyOSxyOSxyNCxsc2wjOAotKwlvcnIJcjkscjkscjUsbHNsIzE2Ci0rCW9ycglyOSxyOSxyNixsc2wjMjQKLSsJc3RyCXI4LFtyMTFdLCM4Ci0rCXN0cglyOSxbcjExLCMtNF0KLSsKLSsJdGVxCWxyLCMxOTIKLSsJYm5lCS5Mbm90MTkyCi0rCW1vdglyMTIsIzEyCi0rCXN0cglyMTIsW3IxMSwjMjQwLTI0XQotKwlhZGQJcjYscjEwLCMyNTYJCQlAIHJjb24KLSsJbW92CWxyLCMyNTUKLSsJbW92CXIxMiwjOAotKwotKy5MMTkyX2xvb3A6Ci0rCWFuZAlyNSxscixyOSxsc3IjMjQKLSsJYW5kCXI3LGxyLHI5LGxzciMxNgotKwlhbmQJcjgsbHIscjksbHNyIzgKLSsJYW5kCXI5LGxyLHI5Ci0rCWxkcmIJcjUsW3IxMCxyNV0KLSsJbGRyYglyNyxbcjEwLHI3XQotKwlsZHJiCXI4LFtyMTAscjhdCi0rCWxkcmIJcjksW3IxMCxyOV0KLSsJbGRyCXI0LFtyNl0sIzQJCQlAIHJjb25baSsrXQotKwlvcnIJcjUscjUscjcsbHNsIzI0Ci0rCW9ycglyNSxyNSxyOCxsc2wjMTYKLSsJb3JyCXI1LHI1LHI5LGxzbCM4Ci0rCWVvcglyOSxyNSxyNAotKwllb3IJcjAscjAscjkJCQlAIHJrWzZdPXJrWzBdXi4uLgotKwllb3IJcjEscjEscjAJCQlAIHJrWzddPXJrWzFdXnJrWzZdCi0rCWVvcglyMixyMixyMQkJCUAgcmtbOF09cmtbMl1ecmtbN10KLSsJZW9yCXIzLHIzLHIyCQkJQCBya1s5XT1ya1szXV5ya1s4XQotKwlzdHIJcjAsW3IxMV0sIzI0Ci0rCXN0cglyMSxbcjExLCMtMjBdCi0rCXN0cglyMixbcjExLCMtMTZdCi0rCXN0cglyMyxbcjExLCMtMTJdCi0rCi0rCXN1YnMJcjEyLHIxMiwjMQotKwlzdWJlcQlyMixyMTEsIzIxNgotKwliZXEJLkxkb25lCi0rCi0rCWxkcglyNyxbcjExLCMtMzJdCi0rCWxkcglyOCxbcjExLCMtMjhdCi0rCWVvcglyNyxyNyxyMwkJCUAgcmtbMTBdPXJrWzRdXnJrWzldCi0rCWVvcglyOSxyOCxyNwkJCUAgcmtbMTFdPXJrWzVdXnJrWzEwXQotKwlzdHIJcjcsW3IxMSwjLThdCi0rCXN0cglyOSxbcjExLCMtNF0KLSsJYgkuTDE5Ml9sb29wCi0rCi0rLkxub3QxOTI6Ci0rCWxkcmIJcjgsW3IxMiwjMjddCi0rCWxkcmIJcjQsW3IxMiwjMjZdCi0rCWxkcmIJcjUsW3IxMiwjMjVdCi0rCWxkcmIJcjYsW3IxMiwjMjRdCi0rCW9ycglyOCxyOCxyNCxsc2wjOAotKwlvcnIJcjgscjgscjUsbHNsIzE2Ci0rCW9ycglyOCxyOCxyNixsc2wjMjQKLSsJbGRyYglyOSxbcjEyLCMzMV0KLSsJbGRyYglyNCxbcjEyLCMzMF0KLSsJbGRyYglyNSxbcjEyLCMyOV0KLSsJbGRyYglyNixbcjEyLCMyOF0KLSsJb3JyCXI5LHI5LHI0LGxzbCM4Ci0rCW9ycglyOSxyOSxyNSxsc2wjMTYKLSsJb3JyCXI5LHI5LHI2LGxzbCMyNAotKwlzdHIJcjgsW3IxMV0sIzgKLSsJc3RyCXI5LFtyMTEsIy00XQotKwotKwltb3YJcjEyLCMxNAotKwlzdHIJcjEyLFtyMTEsIzI0MC0zMl0KLSsJYWRkCXI2LHIxMCwjMjU2CQkJQCByY29uCi0rCW1vdglsciwjMjU1Ci0rCW1vdglyMTIsIzcKLSsKLSsuTDI1Nl9sb29wOgotKwlhbmQJcjUsbHIscjksbHNyIzI0Ci0rCWFuZAlyNyxscixyOSxsc3IjMTYKLSsJYW5kCXI4LGxyLHI5LGxzciM4Ci0rCWFuZAlyOSxscixyOQotKwlsZHJiCXI1LFtyMTAscjVdCi0rCWxkcmIJcjcsW3IxMCxyN10KLSsJbGRyYglyOCxbcjEwLHI4XQotKwlsZHJiCXI5LFtyMTAscjldCi0rCWxkcglyNCxbcjZdLCM0CQkJQCByY29uW2krK10KLSsJb3JyCXI1LHI1LHI3LGxzbCMyNAotKwlvcnIJcjUscjUscjgsbHNsIzE2Ci0rCW9ycglyNSxyNSxyOSxsc2wjOAotKwllb3IJcjkscjUscjQKLSsJZW9yCXIwLHIwLHI5CQkJQCBya1s4XT1ya1swXV4uLi4KLSsJZW9yCXIxLHIxLHIwCQkJQCBya1s5XT1ya1sxXV5ya1s4XQotKwllb3IJcjIscjIscjEJCQlAIHJrWzEwXT1ya1syXV5ya1s5XQotKwllb3IJcjMscjMscjIJCQlAIHJrWzExXT1ya1szXV5ya1sxMF0KLSsJc3RyCXIwLFtyMTFdLCMzMgotKwlzdHIJcjEsW3IxMSwjLTI4XQotKwlzdHIJcjIsW3IxMSwjLTI0XQotKwlzdHIJcjMsW3IxMSwjLTIwXQotKwotKwlzdWJzCXIxMixyMTIsIzEKLSsJc3ViZXEJcjIscjExLCMyNTYKLSsJYmVxCS5MZG9uZQotKwotKwlhbmQJcjUsbHIscjMKLSsJYW5kCXI3LGxyLHIzLGxzciM4Ci0rCWFuZAlyOCxscixyMyxsc3IjMTYKLSsJYW5kCXI5LGxyLHIzLGxzciMyNAotKwlsZHJiCXI1LFtyMTAscjVdCi0rCWxkcmIJcjcsW3IxMCxyN10KLSsJbGRyYglyOCxbcjEwLHI4XQotKwlsZHJiCXI5LFtyMTAscjldCi0rCW9ycglyNSxyNSxyNyxsc2wjOAotKwlvcnIJcjUscjUscjgsbHNsIzE2Ci0rCW9ycglyNSxyNSxyOSxsc2wjMjQKLSsKLSsJbGRyCXI0LFtyMTEsIy00OF0KLSsJbGRyCXI3LFtyMTEsIy00NF0KLSsJbGRyCXI4LFtyMTEsIy00MF0KLSsJbGRyCXI5LFtyMTEsIy0zNl0KLSsJZW9yCXI0LHI0LHI1CQkJQCBya1sxMl09cmtbNF1eLi4uCi0rCWVvcglyNyxyNyxyNAkJCUAgcmtbMTNdPXJrWzVdXnJrWzEyXQotKwllb3IJcjgscjgscjcJCQlAIHJrWzE0XT1ya1s2XV5ya1sxM10KLSsJZW9yCXI5LHI5LHI4CQkJQCBya1sxNV09cmtbN11ecmtbMTRdCi0rCXN0cglyNCxbcjExLCMtMTZdCi0rCXN0cglyNyxbcjExLCMtMTJdCi0rCXN0cglyOCxbcjExLCMtOF0KLSsJc3RyCXI5LFtyMTEsIy00XQotKwliCS5MMjU2X2xvb3AKLSsKLSsuTGRvbmU6CW1vdglyMCwjMAotKwlsZG1pYSAgIHNwISx7cjQtcjEyLGxyfQotKy5MYWJydDoJdHN0CWxyLCMxCi0rCW1vdmVxCXBjLGxyCQkJQCBiZSBiaW5hcnkgY29tcGF0aWJsZSB3aXRoIFY0LCB5ZXQKLSsJLndvcmQJMHhlMTJmZmYxZQkJCUAgaW50ZXJvcGVyYWJsZSB3aXRoIFRodW1iIElTQTotKQotKy5zaXplCUFFU19zZXRfZW5jcnlwdF9rZXksLi1BRVNfc2V0X2VuY3J5cHRfa2V5Ci0rCi0rLmdsb2JhbCBBRVNfc2V0X2RlY3J5cHRfa2V5Ci0rLnR5cGUgICBBRVNfc2V0X2RlY3J5cHRfa2V5LCVmdW5jdGlvbgotKy5hbGlnbgk1Ci0rQUVTX3NldF9kZWNyeXB0X2tleToKLSsJc3RyCWxyLFtzcCwjLTRdISAgICAgICAgICAgIEAgcHVzaCBscgotKwlibAlBRVNfc2V0X2VuY3J5cHRfa2V5Ci0rCXRlcQlyMCwjMAotKwlsZHJuZQlscixbc3BdLCM0ICAgICAgICAgICAgICBAIHBvcCBscgotKwlibmUJLkxhYnJ0Ci0rCi0rCXN0bWRiICAgc3AhLHtyNC1yMTJ9Ci0rCi0rCWxkcglyMTIsW3IyLCMyNDBdCUAgQUVTX3NldF9lbmNyeXB0X2tleSBwcmVzZXJ2ZXMgcjIsCi0rCW1vdglyMTEscjIJCQlAIHdoaWNoIGlzIEFFU19LRVkgKmtleQotKwltb3YJcjcscjIKLSsJYWRkCXI4LHIyLHIxMixsc2wjNAotKwotKy5MaW52OglsZHIJcjAsW3I3XQotKwlsZHIJcjEsW3I3LCM0XQotKwlsZHIJcjIsW3I3LCM4XQotKwlsZHIJcjMsW3I3LCMxMl0KLSsJbGRyCXI0LFtyOF0KLSsJbGRyCXI1LFtyOCwjNF0KLSsJbGRyCXI2LFtyOCwjOF0KLSsJbGRyCXI5LFtyOCwjMTJdCi0rCXN0cglyMCxbcjhdLCMtMTYKLSsJc3RyCXIxLFtyOCwjMTYrNF0KLSsJc3RyCXIyLFtyOCwjMTYrOF0KLSsJc3RyCXIzLFtyOCwjMTYrMTJdCi0rCXN0cglyNCxbcjddLCMxNgotKwlzdHIJcjUsW3I3LCMtMTJdCi0rCXN0cglyNixbcjcsIy04XQotKwlzdHIJcjksW3I3LCMtNF0KLSsJdGVxCXI3LHI4Ci0rCWJuZQkuTGludgotKwlsZHIJcjAsW3IxMSwjMTZdIQkJQCBwcmVmZXRjaCB0cDEKLSsJbW92CXI3LCMweDgwCi0rCW1vdglyOCwjMHgxYgotKwlvcnIJcjcscjcsIzB4ODAwMAotKwlvcnIJcjgscjgsIzB4MWIwMAotKwlvcnIJcjcscjcscjcsbHNsIzE2Ci0rCW9ycglyOCxyOCxyOCxsc2wjMTYKLSsJc3ViCXIxMixyMTIsIzEKLSsJbXZuCXI5LHI3Ci0rCW1vdglyMTIscjEyLGxzbCMyCUAgKHJvdW5kcy0xKSo0Ci0rCi0rLkxtaXg6CWFuZAlyNCxyMCxyNwotKwlhbmQJcjEscjAscjkKLSsJc3ViCXI0LHI0LHI0LGxzciM3Ci0rCWFuZAlyNCxyNCxyOAotKwllb3IJcjEscjQscjEsbHNsIzEJQCB0cDIKLSsKLSsJYW5kCXI0LHIxLHI3Ci0rCWFuZAlyMixyMSxyOQotKwlzdWIJcjQscjQscjQsbHNyIzcKLSsJYW5kCXI0LHI0LHI4Ci0rCWVvcglyMixyNCxyMixsc2wjMQlAIHRwNAotKwotKwlhbmQJcjQscjIscjcKLSsJYW5kCXIzLHIyLHI5Ci0rCXN1YglyNCxyNCxyNCxsc3IjNwotKwlhbmQJcjQscjQscjgKLSsJZW9yCXIzLHI0LHIzLGxzbCMxCUAgdHA4Ci0rCi0rCWVvcglyNCxyMSxyMgotKwllb3IJcjUscjAscjMJCUAgdHA5Ci0rCWVvcglyNCxyNCxyMwkJQCB0cGUKLSsJZW9yCXI0LHI0LHIxLHJvciMyNAotKwllb3IJcjQscjQscjUscm9yIzI0CUAgXj0gUk9UQVRFKHRwYj10cDledHAyLDgpCi0rCWVvcglyNCxyNCxyMixyb3IjMTYKLSsJZW9yCXI0LHI0LHI1LHJvciMxNglAIF49IFJPVEFURSh0cGQ9dHA5XnRwNCwxNikKLSsJZW9yCXI0LHI0LHI1LHJvciM4CUAgXj0gUk9UQVRFKHRwOSwyNCkKLSsKLSsJbGRyCXIwLFtyMTEsIzRdCQlAIHByZWZldGNoIHRwMQotKwlzdHIJcjQsW3IxMV0sIzQKLSsJc3VicwlyMTIscjEyLCMxCi0rCWJuZQkuTG1peAotKwotKwltb3YJcjAsIzAKLSsJbGRtaWEgICBzcCEse3I0LXIxMixscn0KLSsJdHN0CWxyLCMxCi0rCW1vdmVxCXBjLGxyCQkJQCBiZSBiaW5hcnkgY29tcGF0aWJsZSB3aXRoIFY0LCB5ZXQKLSsJLndvcmQJMHhlMTJmZmYxZQkJCUAgaW50ZXJvcGVyYWJsZSB3aXRoIFRodW1iIElTQTotKQotKy5zaXplCUFFU19zZXRfZGVjcnlwdF9rZXksLi1BRVNfc2V0X2RlY3J5cHRfa2V5Ci0rCi0rLnR5cGUJQUVTX1RkLCVvYmplY3QKLSsuYWxpZ24JNQotK0FFU19UZDoKLSsud29yZAkweDUxZjRhNzUwLCAweDdlNDE2NTUzLCAweDFhMTdhNGMzLCAweDNhMjc1ZTk2Ci0rLndvcmQJMHgzYmFiNmJjYiwgMHgxZjlkNDVmMSwgMHhhY2ZhNThhYiwgMHg0YmUzMDM5MwotKy53b3JkCTB4MjAzMGZhNTUsIDB4YWQ3NjZkZjYsIDB4ODhjYzc2OTEsIDB4ZjUwMjRjMjUKLSsud29yZAkweDRmZTVkN2ZjLCAweGM1MmFjYmQ3LCAweDI2MzU0NDgwLCAweGI1NjJhMzhmCi0rLndvcmQJMHhkZWIxNWE0OSwgMHgyNWJhMWI2NywgMHg0NWVhMGU5OCwgMHg1ZGZlYzBlMQotKy53b3JkCTB4YzMyZjc1MDIsIDB4ODE0Y2YwMTIsIDB4OGQ0Njk3YTMsIDB4NmJkM2Y5YzYKLSsud29yZAkweDAzOGY1ZmU3LCAweDE1OTI5Yzk1LCAweGJmNmQ3YWViLCAweDk1NTI1OWRhCi0rLndvcmQJMHhkNGJlODMyZCwgMHg1ODc0MjFkMywgMHg0OWUwNjkyOSwgMHg4ZWM5Yzg0NAotKy53b3JkCTB4NzVjMjg5NmEsIDB4ZjQ4ZTc5NzgsIDB4OTk1ODNlNmIsIDB4MjdiOTcxZGQKLSsud29yZAkweGJlZTE0ZmI2LCAweGYwODhhZDE3LCAweGM5MjBhYzY2LCAweDdkY2UzYWI0Ci0rLndvcmQJMHg2M2RmNGExOCwgMHhlNTFhMzE4MiwgMHg5NzUxMzM2MCwgMHg2MjUzN2Y0NQotKy53b3JkCTB4YjE2NDc3ZTAsIDB4YmI2YmFlODQsIDB4ZmU4MWEwMWMsIDB4ZjkwODJiOTQKLSsud29yZAkweDcwNDg2ODU4LCAweDhmNDVmZDE5LCAweDk0ZGU2Yzg3LCAweDUyN2JmOGI3Ci0rLndvcmQJMHhhYjczZDMyMywgMHg3MjRiMDJlMiwgMHhlMzFmOGY1NywgMHg2NjU1YWIyYQotKy53b3JkCTB4YjJlYjI4MDcsIDB4MmZiNWMyMDMsIDB4ODZjNTdiOWEsIDB4ZDMzNzA4YTUKLSsud29yZAkweDMwMjg4N2YyLCAweDIzYmZhNWIyLCAweDAyMDM2YWJhLCAweGVkMTY4MjVjCi0rLndvcmQJMHg4YWNmMWMyYiwgMHhhNzc5YjQ5MiwgMHhmMzA3ZjJmMCwgMHg0ZTY5ZTJhMQotKy53b3JkCTB4NjVkYWY0Y2QsIDB4MDYwNWJlZDUsIDB4ZDEzNDYyMWYsIDB4YzRhNmZlOGEKLSsud29yZAkweDM0MmU1MzlkLCAweGEyZjM1NWEwLCAweDA1OGFlMTMyLCAweGE0ZjZlYjc1Ci0rLndvcmQJMHgwYjgzZWMzOSwgMHg0MDYwZWZhYSwgMHg1ZTcxOWYwNiwgMHhiZDZlMTA1MQotKy53b3JkCTB4M2UyMThhZjksIDB4OTZkZDA2M2QsIDB4ZGQzZTA1YWUsIDB4NGRlNmJkNDYKLSsud29yZAkweDkxNTQ4ZGI1LCAweDcxYzQ1ZDA1LCAweDA0MDZkNDZmLCAweDYwNTAxNWZmCi0rLndvcmQJMHgxOTk4ZmIyNCwgMHhkNmJkZTk5NywgMHg4OTQwNDNjYywgMHg2N2Q5OWU3NwotKy53b3JkCTB4YjBlODQyYmQsIDB4MDc4OThiODgsIDB4ZTcxOTViMzgsIDB4NzljOGVlZGIKLSsud29yZAkweGExN2MwYTQ3LCAweDdjNDIwZmU5LCAweGY4ODQxZWM5LCAweDAwMDAwMDAwCi0rLndvcmQJMHgwOTgwODY4MywgMHgzMjJiZWQ0OCwgMHgxZTExNzBhYywgMHg2YzVhNzI0ZQotKy53b3JkCTB4ZmQwZWZmZmIsIDB4MGY4NTM4NTYsIDB4M2RhZWQ1MWUsIDB4MzYyZDM5MjcKLSsud29yZAkweDBhMGZkOTY0LCAweDY4NWNhNjIxLCAweDliNWI1NGQxLCAweDI0MzYyZTNhCi0rLndvcmQJMHgwYzBhNjdiMSwgMHg5MzU3ZTcwZiwgMHhiNGVlOTZkMiwgMHgxYjliOTE5ZQotKy53b3JkCTB4ODBjMGM1NGYsIDB4NjFkYzIwYTIsIDB4NWE3NzRiNjksIDB4MWMxMjFhMTYKLSsud29yZAkweGUyOTNiYTBhLCAweGMwYTAyYWU1LCAweDNjMjJlMDQzLCAweDEyMWIxNzFkCi0rLndvcmQJMHgwZTA5MGQwYiwgMHhmMjhiYzdhZCwgMHgyZGI2YThiOSwgMHgxNDFlYTljOAotKy53b3JkCTB4NTdmMTE5ODUsIDB4YWY3NTA3NGMsIDB4ZWU5OWRkYmIsIDB4YTM3ZjYwZmQKLSsud29yZAkweGY3MDEyNjlmLCAweDVjNzJmNWJjLCAweDQ0NjYzYmM1LCAweDViZmI3ZTM0Ci0rLndvcmQJMHg4YjQzMjk3NiwgMHhjYjIzYzZkYywgMHhiNmVkZmM2OCwgMHhiOGU0ZjE2MwotKy53b3JkCTB4ZDczMWRjY2EsIDB4NDI2Mzg1MTAsIDB4MTM5NzIyNDAsIDB4ODRjNjExMjAKLSsud29yZAkweDg1NGEyNDdkLCAweGQyYmIzZGY4LCAweGFlZjkzMjExLCAweGM3MjlhMTZkCi0rLndvcmQJMHgxZDllMmY0YiwgMHhkY2IyMzBmMywgMHgwZDg2NTJlYywgMHg3N2MxZTNkMAotKy53b3JkCTB4MmJiMzE2NmMsIDB4YTk3MGI5OTksIDB4MTE5NDQ4ZmEsIDB4NDdlOTY0MjIKLSsud29yZAkweGE4ZmM4Y2M0LCAweGEwZjAzZjFhLCAweDU2N2QyY2Q4LCAweDIyMzM5MGVmCi0rLndvcmQJMHg4NzQ5NGVjNywgMHhkOTM4ZDFjMSwgMHg4Y2NhYTJmZSwgMHg5OGQ0MGIzNgotKy53b3JkCTB4YTZmNTgxY2YsIDB4YTU3YWRlMjgsIDB4ZGFiNzhlMjYsIDB4M2ZhZGJmYTQKLSsud29yZAkweDJjM2E5ZGU0LCAweDUwNzg5MjBkLCAweDZhNWZjYzliLCAweDU0N2U0NjYyCi0rLndvcmQJMHhmNjhkMTNjMiwgMHg5MGQ4YjhlOCwgMHgyZTM5Zjc1ZSwgMHg4MmMzYWZmNQotKy53b3JkCTB4OWY1ZDgwYmUsIDB4NjlkMDkzN2MsIDB4NmZkNTJkYTksIDB4Y2YyNTEyYjMKLSsud29yZAkweGM4YWM5OTNiLCAweDEwMTg3ZGE3LCAweGU4OWM2MzZlLCAweGRiM2JiYjdiCi0rLndvcmQJMHhjZDI2NzgwOSwgMHg2ZTU5MThmNCwgMHhlYzlhYjcwMSwgMHg4MzRmOWFhOAotKy53b3JkCTB4ZTY5NTZlNjUsIDB4YWFmZmU2N2UsIDB4MjFiY2NmMDgsIDB4ZWYxNWU4ZTYKLSsud29yZAkweGJhZTc5YmQ5LCAweDRhNmYzNmNlLCAweGVhOWYwOWQ0LCAweDI5YjA3Y2Q2Ci0rLndvcmQJMHgzMWE0YjJhZiwgMHgyYTNmMjMzMSwgMHhjNmE1OTQzMCwgMHgzNWEyNjZjMAotKy53b3JkCTB4NzQ0ZWJjMzcsIDB4ZmM4MmNhYTYsIDB4ZTA5MGQwYjAsIDB4MzNhN2Q4MTUKLSsud29yZAkweGYxMDQ5ODRhLCAweDQxZWNkYWY3LCAweDdmY2Q1MDBlLCAweDE3OTFmNjJmCi0rLndvcmQJMHg3NjRkZDY4ZCwgMHg0M2VmYjA0ZCwgMHhjY2FhNGQ1NCwgMHhlNDk2MDRkZgotKy53b3JkCTB4OWVkMWI1ZTMsIDB4NGM2YTg4MWIsIDB4YzEyYzFmYjgsIDB4NDY2NTUxN2YKLSsud29yZAkweDlkNWVlYTA0LCAweDAxOGMzNTVkLCAweGZhODc3NDczLCAweGZiMGI0MTJlCi0rLndvcmQJMHhiMzY3MWQ1YSwgMHg5MmRiZDI1MiwgMHhlOTEwNTYzMywgMHg2ZGQ2NDcxMwotKy53b3JkCTB4OWFkNzYxOGMsIDB4MzdhMTBjN2EsIDB4NTlmODE0OGUsIDB4ZWIxMzNjODkKLSsud29yZAkweGNlYTkyN2VlLCAweGI3NjFjOTM1LCAweGUxMWNlNWVkLCAweDdhNDdiMTNjCi0rLndvcmQJMHg5Y2QyZGY1OSwgMHg1NWYyNzMzZiwgMHgxODE0Y2U3OSwgMHg3M2M3MzdiZgotKy53b3JkCTB4NTNmN2NkZWEsIDB4NWZmZGFhNWIsIDB4ZGYzZDZmMTQsIDB4Nzg0NGRiODYKLSsud29yZAkweGNhYWZmMzgxLCAweGI5NjhjNDNlLCAweDM4MjQzNDJjLCAweGMyYTM0MDVmCi0rLndvcmQJMHgxNjFkYzM3MiwgMHhiY2UyMjUwYywgMHgyODNjNDk4YiwgMHhmZjBkOTU0MQotKy53b3JkCTB4MzlhODAxNzEsIDB4MDgwY2IzZGUsIDB4ZDhiNGU0OWMsIDB4NjQ1NmMxOTAKLSsud29yZAkweDdiY2I4NDYxLCAweGQ1MzJiNjcwLCAweDQ4NmM1Yzc0LCAweGQwYjg1NzQyCi0rQCBUZDRbMjU2XQotKy5ieXRlCTB4NTIsIDB4MDksIDB4NmEsIDB4ZDUsIDB4MzAsIDB4MzYsIDB4YTUsIDB4MzgKLSsuYnl0ZQkweGJmLCAweDQwLCAweGEzLCAweDllLCAweDgxLCAweGYzLCAweGQ3LCAweGZiCi0rLmJ5dGUJMHg3YywgMHhlMywgMHgzOSwgMHg4MiwgMHg5YiwgMHgyZiwgMHhmZiwgMHg4NwotKy5ieXRlCTB4MzQsIDB4OGUsIDB4NDMsIDB4NDQsIDB4YzQsIDB4ZGUsIDB4ZTksIDB4Y2IKLSsuYnl0ZQkweDU0LCAweDdiLCAweDk0LCAweDMyLCAweGE2LCAweGMyLCAweDIzLCAweDNkCi0rLmJ5dGUJMHhlZSwgMHg0YywgMHg5NSwgMHgwYiwgMHg0MiwgMHhmYSwgMHhjMywgMHg0ZQotKy5ieXRlCTB4MDgsIDB4MmUsIDB4YTEsIDB4NjYsIDB4MjgsIDB4ZDksIDB4MjQsIDB4YjIKLSsuYnl0ZQkweDc2LCAweDViLCAweGEyLCAweDQ5LCAweDZkLCAweDhiLCAweGQxLCAweDI1Ci0rLmJ5dGUJMHg3MiwgMHhmOCwgMHhmNiwgMHg2NCwgMHg4NiwgMHg2OCwgMHg5OCwgMHgxNgotKy5ieXRlCTB4ZDQsIDB4YTQsIDB4NWMsIDB4Y2MsIDB4NWQsIDB4NjUsIDB4YjYsIDB4OTIKLSsuYnl0ZQkweDZjLCAweDcwLCAweDQ4LCAweDUwLCAweGZkLCAweGVkLCAweGI5LCAweGRhCi0rLmJ5dGUJMHg1ZSwgMHgxNSwgMHg0NiwgMHg1NywgMHhhNywgMHg4ZCwgMHg5ZCwgMHg4NAotKy5ieXRlCTB4OTAsIDB4ZDgsIDB4YWIsIDB4MDAsIDB4OGMsIDB4YmMsIDB4ZDMsIDB4MGEKLSsuYnl0ZQkweGY3LCAweGU0LCAweDU4LCAweDA1LCAweGI4LCAweGIzLCAweDQ1LCAweDA2Ci0rLmJ5dGUJMHhkMCwgMHgyYywgMHgxZSwgMHg4ZiwgMHhjYSwgMHgzZiwgMHgwZiwgMHgwMgotKy5ieXRlCTB4YzEsIDB4YWYsIDB4YmQsIDB4MDMsIDB4MDEsIDB4MTMsIDB4OGEsIDB4NmIKLSsuYnl0ZQkweDNhLCAweDkxLCAweDExLCAweDQxLCAweDRmLCAweDY3LCAweGRjLCAweGVhCi0rLmJ5dGUJMHg5NywgMHhmMiwgMHhjZiwgMHhjZSwgMHhmMCwgMHhiNCwgMHhlNiwgMHg3MwotKy5ieXRlCTB4OTYsIDB4YWMsIDB4NzQsIDB4MjIsIDB4ZTcsIDB4YWQsIDB4MzUsIDB4ODUKLSsuYnl0ZQkweGUyLCAweGY5LCAweDM3LCAweGU4LCAweDFjLCAweDc1LCAweGRmLCAweDZlCi0rLmJ5dGUJMHg0NywgMHhmMSwgMHgxYSwgMHg3MSwgMHgxZCwgMHgyOSwgMHhjNSwgMHg4OQotKy5ieXRlCTB4NmYsIDB4YjcsIDB4NjIsIDB4MGUsIDB4YWEsIDB4MTgsIDB4YmUsIDB4MWIKLSsuYnl0ZQkweGZjLCAweDU2LCAweDNlLCAweDRiLCAweGM2LCAweGQyLCAweDc5LCAweDIwCi0rLmJ5dGUJMHg5YSwgMHhkYiwgMHhjMCwgMHhmZSwgMHg3OCwgMHhjZCwgMHg1YSwgMHhmNAotKy5ieXRlCTB4MWYsIDB4ZGQsIDB4YTgsIDB4MzMsIDB4ODgsIDB4MDcsIDB4YzcsIDB4MzEKLSsuYnl0ZQkweGIxLCAweDEyLCAweDEwLCAweDU5LCAweDI3LCAweDgwLCAweGVjLCAweDVmCi0rLmJ5dGUJMHg2MCwgMHg1MSwgMHg3ZiwgMHhhOSwgMHgxOSwgMHhiNSwgMHg0YSwgMHgwZAotKy5ieXRlCTB4MmQsIDB4ZTUsIDB4N2EsIDB4OWYsIDB4OTMsIDB4YzksIDB4OWMsIDB4ZWYKLSsuYnl0ZQkweGEwLCAweGUwLCAweDNiLCAweDRkLCAweGFlLCAweDJhLCAweGY1LCAweGIwCi0rLmJ5dGUJMHhjOCwgMHhlYiwgMHhiYiwgMHgzYywgMHg4MywgMHg1MywgMHg5OSwgMHg2MQotKy5ieXRlCTB4MTcsIDB4MmIsIDB4MDQsIDB4N2UsIDB4YmEsIDB4NzcsIDB4ZDYsIDB4MjYKLSsuYnl0ZQkweGUxLCAweDY5LCAweDE0LCAweDYzLCAweDU1LCAweDIxLCAweDBjLCAweDdkCi0rLnNpemUJQUVTX1RkLC4tQUVTX1RkCi0rCi0rQCB2b2lkIEFFU19kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCi0rQCAJCSBjb25zdCBBRVNfS0VZICprZXkpIHsKLSsuZ2xvYmFsIEFFU19kZWNyeXB0Ci0rLnR5cGUgICBBRVNfZGVjcnlwdCwlZnVuY3Rpb24KLSsuYWxpZ24JNQotK0FFU19kZWNyeXB0OgotKwlzdWIJcjMscGMsIzgJCUAgQUVTX2RlY3J5cHQKLSsJc3RtZGIgICBzcCEse3IxLHI0LXIxMixscn0KLSsJbW92CXIxMixyMAkJQCBpbnAKLSsJbW92CXIxMSxyMgotKwlzdWIJcjEwLHIzLCNBRVNfZGVjcnlwdC1BRVNfVGQJCUAgVGQKLSsKLSsJbGRyYglyMCxbcjEyLCMzXQlAIGxvYWQgaW5wdXQgZGF0YSBpbiBlbmRpYW4tbmV1dHJhbAotKwlsZHJiCXI0LFtyMTIsIzJdCUAgbWFubmVyLi4uCi0rCWxkcmIJcjUsW3IxMiwjMV0KLSsJbGRyYglyNixbcjEyLCMwXQotKwlvcnIJcjAscjAscjQsbHNsIzgKLSsJb3JyCXIwLHIwLHI1LGxzbCMxNgotKwlvcnIJcjAscjAscjYsbHNsIzI0Ci0rCWxkcmIJcjEsW3IxMiwjN10KLSsJbGRyYglyNCxbcjEyLCM2XQotKwlsZHJiCXI1LFtyMTIsIzVdCi0rCWxkcmIJcjYsW3IxMiwjNF0KLSsJb3JyCXIxLHIxLHI0LGxzbCM4Ci0rCW9ycglyMSxyMSxyNSxsc2wjMTYKLSsJb3JyCXIxLHIxLHI2LGxzbCMyNAotKwlsZHJiCXIyLFtyMTIsIzExXQotKwlsZHJiCXI0LFtyMTIsIzEwXQotKwlsZHJiCXI1LFtyMTIsIzldCi0rCWxkcmIJcjYsW3IxMiwjOF0KLSsJb3JyCXIyLHIyLHI0LGxzbCM4Ci0rCW9ycglyMixyMixyNSxsc2wjMTYKLSsJb3JyCXIyLHIyLHI2LGxzbCMyNAotKwlsZHJiCXIzLFtyMTIsIzE1XQotKwlsZHJiCXI0LFtyMTIsIzE0XQotKwlsZHJiCXI1LFtyMTIsIzEzXQotKwlsZHJiCXI2LFtyMTIsIzEyXQotKwlvcnIJcjMscjMscjQsbHNsIzgKLSsJb3JyCXIzLHIzLHI1LGxzbCMxNgotKwlvcnIJcjMscjMscjYsbHNsIzI0Ci0rCi0rCWJsCV9hcm12NF9BRVNfZGVjcnlwdAotKwotKwlsZHIJcjEyLFtzcF0sIzQJCUAgcG9wIG91dAotKwltb3YJcjQscjAsbHNyIzI0CQlAIHdyaXRlIG91dHB1dCBpbiBlbmRpYW4tbmV1dHJhbAotKwltb3YJcjUscjAsbHNyIzE2CQlAIG1hbm5lci4uLgotKwltb3YJcjYscjAsbHNyIzgKLSsJc3RyYglyNCxbcjEyLCMwXQotKwlzdHJiCXI1LFtyMTIsIzFdCi0rCXN0cmIJcjYsW3IxMiwjMl0KLSsJc3RyYglyMCxbcjEyLCMzXQotKwltb3YJcjQscjEsbHNyIzI0Ci0rCW1vdglyNSxyMSxsc3IjMTYKLSsJbW92CXI2LHIxLGxzciM4Ci0rCXN0cmIJcjQsW3IxMiwjNF0KLSsJc3RyYglyNSxbcjEyLCM1XQotKwlzdHJiCXI2LFtyMTIsIzZdCi0rCXN0cmIJcjEsW3IxMiwjN10KLSsJbW92CXI0LHIyLGxzciMyNAotKwltb3YJcjUscjIsbHNyIzE2Ci0rCW1vdglyNixyMixsc3IjOAotKwlzdHJiCXI0LFtyMTIsIzhdCi0rCXN0cmIJcjUsW3IxMiwjOV0KLSsJc3RyYglyNixbcjEyLCMxMF0KLSsJc3RyYglyMixbcjEyLCMxMV0KLSsJbW92CXI0LHIzLGxzciMyNAotKwltb3YJcjUscjMsbHNyIzE2Ci0rCW1vdglyNixyMyxsc3IjOAotKwlzdHJiCXI0LFtyMTIsIzEyXQotKwlzdHJiCXI1LFtyMTIsIzEzXQotKwlzdHJiCXI2LFtyMTIsIzE0XQotKwlzdHJiCXIzLFtyMTIsIzE1XQotKwotKwlsZG1pYSAgIHNwISx7cjQtcjEyLGxyfQotKwl0c3QJbHIsIzEKLSsJbW92ZXEJcGMsbHIJCQlAIGJlIGJpbmFyeSBjb21wYXRpYmxlIHdpdGggVjQsIHlldAotKwkud29yZAkweGUxMmZmZjFlCQkJQCBpbnRlcm9wZXJhYmxlIHdpdGggVGh1bWIgSVNBOi0pCi0rLnNpemUJQUVTX2RlY3J5cHQsLi1BRVNfZGVjcnlwdAotKwotKy50eXBlICAgX2FybXY0X0FFU19kZWNyeXB0LCVmdW5jdGlvbgotKy5hbGlnbgkyCi0rX2FybXY0X0FFU19kZWNyeXB0OgotKwlzdHIJbHIsW3NwLCMtNF0hCQlAIHB1c2ggbHIKLSsJbGRyCXI0LFtyMTFdLCMxNgotKwlsZHIJcjUsW3IxMSwjLTEyXQotKwlsZHIJcjYsW3IxMSwjLThdCi0rCWxkcglyNyxbcjExLCMtNF0KLSsJbGRyCXIxMixbcjExLCMyNDAtMTZdCi0rCWVvcglyMCxyMCxyNAotKwllb3IJcjEscjEscjUKLSsJZW9yCXIyLHIyLHI2Ci0rCWVvcglyMyxyMyxyNwotKwlzdWIJcjEyLHIxMiwjMQotKwltb3YJbHIsIzI1NQotKwotKy5MZGVjX2xvb3A6Ci0rCWFuZAlyNyxscixyMCxsc3IjMTYKLSsJYW5kCXI4LGxyLHIwLGxzciM4Ci0rCWFuZAlyOSxscixyMAotKwltb3YJcjAscjAsbHNyIzI0Ci0rCWxkcglyNCxbcjEwLHI3LGxzbCMyXQlAIFRkMVtzMD4+MTZdCi0rCWxkcglyMCxbcjEwLHIwLGxzbCMyXQlAIFRkMFtzMD4+MjRdCi0rCWxkcglyNSxbcjEwLHI4LGxzbCMyXQlAIFRkMltzMD4+OF0KLSsJbGRyCXI2LFtyMTAscjksbHNsIzJdCUAgVGQzW3MwPj4wXQotKwotKwlhbmQJcjcsbHIscjEJCUAgaTAKLSsJYW5kCXI4LGxyLHIxLGxzciMxNgotKwlhbmQJcjksbHIscjEsbHNyIzgKLSsJbW92CXIxLHIxLGxzciMyNAotKwlsZHIJcjcsW3IxMCxyNyxsc2wjMl0JQCBUZDNbczE+PjBdCi0rCWxkcglyMSxbcjEwLHIxLGxzbCMyXQlAIFRkMFtzMT4+MjRdCi0rCWxkcglyOCxbcjEwLHI4LGxzbCMyXQlAIFRkMVtzMT4+MTZdCi0rCWxkcglyOSxbcjEwLHI5LGxzbCMyXQlAIFRkMltzMT4+OF0KLSsJZW9yCXIwLHIwLHI3LHJvciMyNAotKwllb3IJcjEscjEscjQscm9yIzgKLSsJZW9yCXI1LHI4LHI1LHJvciM4Ci0rCWVvcglyNixyOSxyNixyb3IjOAotKwotKwlhbmQJcjcsbHIscjIsbHNyIzgJQCBpMAotKwlhbmQJcjgsbHIscjIJCUAgaTEKLSsJYW5kCXI5LGxyLHIyLGxzciMxNgotKwltb3YJcjIscjIsbHNyIzI0Ci0rCWxkcglyNyxbcjEwLHI3LGxzbCMyXQlAIFRkMltzMj4+OF0KLSsJbGRyCXI4LFtyMTAscjgsbHNsIzJdCUAgVGQzW3MyPj4wXQotKwlsZHIJcjIsW3IxMCxyMixsc2wjMl0JQCBUZDBbczI+PjI0XQotKwlsZHIJcjksW3IxMCxyOSxsc2wjMl0JQCBUZDFbczI+PjE2XQotKwllb3IJcjAscjAscjcscm9yIzE2Ci0rCWVvcglyMSxyMSxyOCxyb3IjMjQKLSsJZW9yCXIyLHIyLHI1LHJvciM4Ci0rCWVvcglyNixyOSxyNixyb3IjOAotKwotKwlhbmQJcjcsbHIscjMsbHNyIzE2CUAgaTAKLSsJYW5kCXI4LGxyLHIzLGxzciM4CUAgaTEKLSsJYW5kCXI5LGxyLHIzCQlAIGkyCi0rCW1vdglyMyxyMyxsc3IjMjQKLSsJbGRyCXI3LFtyMTAscjcsbHNsIzJdCUAgVGQxW3MzPj4xNl0KLSsJbGRyCXI4LFtyMTAscjgsbHNsIzJdCUAgVGQyW3MzPj44XQotKwlsZHIJcjksW3IxMCxyOSxsc2wjMl0JQCBUZDNbczM+PjBdCi0rCWxkcglyMyxbcjEwLHIzLGxzbCMyXQlAIFRkMFtzMz4+MjRdCi0rCWVvcglyMCxyMCxyNyxyb3IjOAotKwllb3IJcjEscjEscjgscm9yIzE2Ci0rCWVvcglyMixyMixyOSxyb3IjMjQKLSsJZW9yCXIzLHIzLHI2LHJvciM4Ci0rCi0rCWxkcglyNCxbcjExXSwjMTYKLSsJbGRyCXI1LFtyMTEsIy0xMl0KLSsJbGRyCXI2LFtyMTEsIy04XQotKwlsZHIJcjcsW3IxMSwjLTRdCi0rCWVvcglyMCxyMCxyNAotKwllb3IJcjEscjEscjUKLSsJZW9yCXIyLHIyLHI2Ci0rCWVvcglyMyxyMyxyNwotKwotKwlzdWJzCXIxMixyMTIsIzEKLSsJYm5lCS5MZGVjX2xvb3AKLSsKLSsJYWRkCXIxMCxyMTAsIzEwMjQKLSsKLSsJbGRyCXI0LFtyMTAsIzBdCQlAIHByZWZldGNoIFRkNAotKwlsZHIJcjUsW3IxMCwjMzJdCi0rCWxkcglyNixbcjEwLCM2NF0KLSsJbGRyCXI3LFtyMTAsIzk2XQotKwlsZHIJcjgsW3IxMCwjMTI4XQotKwlsZHIJcjksW3IxMCwjMTYwXQotKwlsZHIJcjQsW3IxMCwjMTkyXQotKwlsZHIJcjUsW3IxMCwjMjI0XQotKwotKwlhbmQJcjcsbHIscjAsbHNyIzE2Ci0rCWFuZAlyOCxscixyMCxsc3IjOAotKwlhbmQJcjksbHIscjAKLSsJbGRyYglyMCxbcjEwLHIwLGxzciMyNF0JQCBUZDRbczA+PjI0XQotKwlsZHJiCXI0LFtyMTAscjddCQlAIFRkNFtzMD4+MTZdCi0rCWxkcmIJcjUsW3IxMCxyOF0JCUAgVGQ0W3MwPj44XQotKwlsZHJiCXI2LFtyMTAscjldCQlAIFRkNFtzMD4+MF0KLSsKLSsJYW5kCXI3LGxyLHIxCQlAIGkwCi0rCWFuZAlyOCxscixyMSxsc3IjMTYKLSsJYW5kCXI5LGxyLHIxLGxzciM4Ci0rCWxkcmIJcjcsW3IxMCxyN10JCUAgVGQ0W3MxPj4wXQotKwlsZHJiCXIxLFtyMTAscjEsbHNyIzI0XQlAIFRkNFtzMT4+MjRdCi0rCWxkcmIJcjgsW3IxMCxyOF0JCUAgVGQ0W3MxPj4xNl0KLSsJbGRyYglyOSxbcjEwLHI5XQkJQCBUZDRbczE+PjhdCi0rCWVvcglyMCxyNyxyMCxsc2wjMjQKLSsJZW9yCXIxLHI0LHIxLGxzbCM4Ci0rCWVvcglyNSxyNSxyOCxsc2wjOAotKwllb3IJcjYscjYscjksbHNsIzgKLSsKLSsJYW5kCXI3LGxyLHIyLGxzciM4CUAgaTAKLSsJYW5kCXI4LGxyLHIyCQlAIGkxCi0rCWFuZAlyOSxscixyMixsc3IjMTYKLSsJbGRyYglyNyxbcjEwLHI3XQkJQCBUZDRbczI+PjhdCi0rCWxkcmIJcjgsW3IxMCxyOF0JCUAgVGQ0W3MyPj4wXQotKwlsZHJiCXIyLFtyMTAscjIsbHNyIzI0XQlAIFRkNFtzMj4+MjRdCi0rCWxkcmIJcjksW3IxMCxyOV0JCUAgVGQ0W3MyPj4xNl0KLSsJZW9yCXIwLHIwLHI3LGxzbCM4Ci0rCWVvcglyMSxyOCxyMSxsc2wjMTYKLSsJZW9yCXIyLHI1LHIyLGxzbCMxNgotKwllb3IJcjYscjYscjksbHNsIzE2Ci0rCi0rCWFuZAlyNyxscixyMyxsc3IjMTYJQCBpMAotKwlhbmQJcjgsbHIscjMsbHNyIzgJQCBpMQotKwlhbmQJcjksbHIscjMJCUAgaTIKLSsJbGRyYglyNyxbcjEwLHI3XQkJQCBUZDRbczM+PjE2XQotKwlsZHJiCXI4LFtyMTAscjhdCQlAIFRkNFtzMz4+OF0KLSsJbGRyYglyOSxbcjEwLHI5XQkJQCBUZDRbczM+PjBdCi0rCWxkcmIJcjMsW3IxMCxyMyxsc3IjMjRdCUAgVGQ0W3MzPj4yNF0KLSsJZW9yCXIwLHIwLHI3LGxzbCMxNgotKwllb3IJcjEscjEscjgsbHNsIzgKLSsJZW9yCXIyLHI5LHIyLGxzbCM4Ci0rCWVvcglyMyxyNixyMyxsc2wjMjQKLSsKLSsJbGRyCWxyLFtzcF0sIzQJCUAgcG9wIGxyCi0rCWxkcglyNCxbcjExLCMwXQotKwlsZHIJcjUsW3IxMSwjNF0KLSsJbGRyCXI2LFtyMTEsIzhdCi0rCWxkcglyNyxbcjExLCMxMl0KLSsJZW9yCXIwLHIwLHI0Ci0rCWVvcglyMSxyMSxyNQotKwllb3IJcjIscjIscjYKLSsJZW9yCXIzLHIzLHI3Ci0rCi0rCXN1YglyMTAscjEwLCMxMDI0Ci0rCW1vdglwYyxscgkJCUAgcmV0dXJuCi0rLnNpemUJX2FybXY0X0FFU19kZWNyeXB0LC4tX2FybXY0X0FFU19kZWNyeXB0Ci0rLmFzY2l6CSJBRVMgZm9yIEFSTXY0LCBDUllQVE9HQU1TIGJ5IDxhcHByb0BvcGVuc3NsLm9yZz4iCi0rLmFsaWduCTIKLS0tLSAvZGV2L251bGwJMjAwOS0wNC0yNCAwNjowOTo0OC4wMDAwMDAwMDAgLTA3MDAKLSsrKyBvcGVuc3NsLTAuOS44aC9jcnlwdG8vMC45LjktZGV2L2JuL2FybXY0LW1vbnQucGwJMjAwOS0wOS0wMyAxNTo0MjozOS4wMDAwMDAwMDAgLTA3MDAKLUBAIC0wLDAgKzEsMjAwIEBACi0rIyEvdXNyL2Jpbi9lbnYgcGVybAotKwotKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsjIFdyaXR0ZW4gYnkgQW5keSBQb2x5YWtvdiA8YXBwcm9AZnkuY2hhbG1lcnMuc2U+IGZvciB0aGUgT3BlblNTTAotKyMgcHJvamVjdC4gVGhlIG1vZHVsZSBpcywgaG93ZXZlciwgZHVhbCBsaWNlbnNlZCB1bmRlciBPcGVuU1NMIGFuZAotKyMgQ1JZUFRPR0FNUyBsaWNlbnNlcyBkZXBlbmRpbmcgb24gd2hlcmUgeW91IG9idGFpbiBpdC4gRm9yIGZ1cnRoZXIKLSsjIGRldGFpbHMgc2VlIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvfmFwcHJvL2NyeXB0b2dhbXMvLgotKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsKLSsjIEphbnVhcnkgMjAwNy4KLSsKLSsjIE1vbnRnb21lcnkgbXVsdGlwbGljYXRpb24gZm9yIEFSTXY0LgotKyMKLSsjIFBlcmZvcm1hbmNlIGltcHJvdmVtZW50IG5hdHVyYWxseSB2YXJpZXMgYW1vbmcgQ1BVIGltcGxlbWVudGF0aW9ucwotKyMgYW5kIGNvbXBpbGVycy4gVGhlIGNvZGUgd2FzIG9ic2VydmVkIHRvIHByb3ZpZGUgKzY1LTM1JSBpbXByb3ZlbWVudAotKyMgW2RlcGVuZGluZyBvbiBrZXkgbGVuZ3RoLCBsZXNzIGZvciBsb25nZXIga2V5c10gb24gQVJNOTIwVCwgYW5kCi0rIyArMTE1LTgwJSBvbiBJbnRlbCBJWFA0MjUuIFRoaXMgaXMgY29tcGFyZWQgdG8gcHJlLWJuX211bF9tb250IGNvZGUKLSsjIGJhc2UgYW5kIGNvbXBpbGVyIGdlbmVyYXRlZCBjb2RlIHdpdGggaW4tbGluZWQgdW11bGwgYW5kIGV2ZW4gdW1sYWwKLSsjIGluc3RydWN0aW9ucy4gVGhlIGxhdHRlciBtZWFucyB0aGF0IHRoaXMgY29kZSBkaWRuJ3QgcmVhbGx5IGhhdmUgYW4gCi0rIyAiYWR2YW50YWdlIiBvZiB1dGlsaXppbmcgc29tZSAic2VjcmV0IiBpbnN0cnVjdGlvbi4KLSsjCi0rIyBUaGUgY29kZSBpcyBpbnRlcm9wZXJhYmxlIHdpdGggVGh1bWIgSVNBIGFuZCBpcyByYXRoZXIgY29tcGFjdCwgbGVzcwotKyMgdGhhbiAxLzJLQi4gV2luZG93cyBDRSBwb3J0IHdvdWxkIGJlIHRyaXZpYWwsIGFzIGl0J3MgZXhjbHVzaXZlbHkKLSsjIGFib3V0IGRlY29yYXRpb25zLCBBQkkgYW5kIGluc3RydWN0aW9uIHN5bnRheCBhcmUgaWRlbnRpY2FsLgotKwotKyRudW09InIwIjsJIyBzdGFydHMgYXMgbnVtIGFyZ3VtZW50LCBidXQgaG9sZHMgJnRwW251bS0xXQotKyRhcD0icjEiOwotKyRicD0icjIiOyAkYmk9InIyIjsgJHJwPSJyMiI7Ci0rJG5wPSJyMyI7Ci0rJHRwPSJyNCI7Ci0rJGFqPSJyNSI7Ci0rJG5qPSJyNiI7Ci0rJHRqPSJyNyI7Ci0rJG4wPSJyOCI7Ci0rIyMjIyMjIyMjIyMJIyByOSBpcyByZXNlcnZlZCBieSBFTEYgYXMgcGxhdGZvcm0gc3BlY2lmaWMsIGUuZy4gVExTIHBvaW50ZXIKLSskYWxvPSJyMTAiOwkjIHNsLCBnY2MgdXNlcyBpdCB0byBrZWVwIEBHT1QKLSskYWhpPSJyMTEiOwkjIGZwCi0rJG5sbz0icjEyIjsJIyBpcAotKyMjIyMjIyMjIyMjCSMgcjEzIGlzIHN0YWNrIHBvaW50ZXIKLSskbmhpPSJyMTQiOwkjIGxyCi0rIyMjIyMjIyMjIyMJIyByMTUgaXMgcHJvZ3JhbSBjb3VudGVyCi0rCi0rIyMjIyBhcmd1bWVudCBibG9jayBsYXlvdXQgcmVsYXRpdmUgdG8gJnRwW251bS0xXSwgYS5rLmEuICRudW0KLSskX3JwPSIkbnVtLCMxMio0IjsKLSsjIGFwIHBlcm1hbmVudGx5IHJlc2lkZXMgaW4gcjEKLSskX2JwPSIkbnVtLCMxMyo0IjsKLSsjIG5wIHBlcm1hbmVudGx5IHJlc2lkZXMgaW4gcjMKLSskX24wPSIkbnVtLCMxNCo0IjsKLSskX251bT0iJG51bSwjMTUqNCI7CSRfYnBlbmQ9JF9udW07Ci0rCi0rJGNvZGU9PDxfX187Ci0rLnRleHQKLSsKLSsuZ2xvYmFsCWJuX211bF9tb250Ci0rLnR5cGUJYm5fbXVsX21vbnQsJWZ1bmN0aW9uCi0rCi0rLmFsaWduCTIKLStibl9tdWxfbW9udDoKLSsJc3RtZGIJc3AhLHtyMCxyMn0JCUAgc3AgcG9pbnRzIGF0IGFyZ3VtZW50IGJsb2NrCi0rCWxkcgkkbnVtLFtzcCwjMyo0XQkJQCBsb2FkIG51bQotKwljbXAJJG51bSwjMgotKwltb3ZsdAlyMCwjMAotKwlhZGRsdAlzcCxzcCwjMio0Ci0rCWJsdAkuTGFicnQKLSsKLSsJc3RtZGIJc3AhLHtyNC1yMTIsbHJ9CQlAIHNhdmUgMTAgcmVnaXN0ZXJzCi0rCi0rCW1vdgkkbnVtLCRudW0sbHNsIzIJCUAgcmVzY2FsZSAkbnVtIGZvciBieXRlIGNvdW50Ci0rCXN1YglzcCxzcCwkbnVtCQlAIGFsbG9jYSg0Km51bSkKLSsJc3ViCXNwLHNwLCM0CQlAICtleHRyYSBkd29yZAotKwlzdWIJJG51bSwkbnVtLCM0CQlAICJudW09bnVtLTEiCi0rCWFkZAkkdHAsJGJwLCRudW0JCUAgJmJwW251bS0xXQotKwotKwlhZGQJJG51bSxzcCwkbnVtCQlAICRudW0gdG8gcG9pbnQgYXQgJnRwW251bS0xXQotKwlsZHIJJG4wLFskX24wXQkJQCAmbjAKLSsJbGRyCSRiaSxbJGJwXQkJQCBicFswXQotKwlsZHIJJGFqLFskYXBdLCM0CQlAIGFwWzBdLGFwKysKLSsJbGRyCSRuaixbJG5wXSwjNAkJQCBucFswXSxucCsrCi0rCWxkcgkkbjAsWyRuMF0JCUAgKm4wCi0rCXN0cgkkdHAsWyRfYnBlbmRdCQlAIHNhdmUgJmJwW251bV0KLSsKLSsJdW11bGwJJGFsbywkYWhpLCRhaiwkYmkJQCBhcFswXSpicFswXQotKwlzdHIJJG4wLFskX24wXQkJQCBzYXZlIG4wIHZhbHVlCi0rCW11bAkkbjAsJGFsbywkbjAJCUAgInRwWzBdIipuMAotKwltb3YJJG5sbywjMAotKwl1bWxhbAkkYWxvLCRubG8sJG5qLCRuMAlAIG5wWzBdKm4wKyJ0WzBdIgotKwltb3YJJHRwLHNwCi0rCi0rLkwxc3Q6Ci0rCWxkcgkkYWosWyRhcF0sIzQJCUAgYXBbal0sYXArKwotKwltb3YJJGFsbywkYWhpCi0rCW1vdgkkYWhpLCMwCi0rCXVtbGFsCSRhbG8sJGFoaSwkYWosJGJpCUAgYXBbal0qYnBbMF0KLSsJbGRyCSRuaixbJG5wXSwjNAkJQCBucFtqXSxucCsrCi0rCW1vdgkkbmhpLCMwCi0rCXVtbGFsCSRubG8sJG5oaSwkbmosJG4wCUAgbnBbal0qbjAKLSsJYWRkcwkkbmxvLCRubG8sJGFsbwotKwlzdHIJJG5sbyxbJHRwXSwjNAkJQCB0cFtqLTFdPSx0cCsrCi0rCWFkYwkkbmxvLCRuaGksIzAKLSsJY21wCSR0cCwkbnVtCi0rCWJuZQkuTDFzdAotKwotKwlhZGRzCSRubG8sJG5sbywkYWhpCi0rCW1vdgkkbmhpLCMwCi0rCWFkYwkkbmhpLCRuaGksIzAKLSsJbGRyCSR0cCxbJF9icF0JCUAgcmVzdG9yZSBicAotKwlzdHIJJG5sbyxbJG51bV0JCUAgdHBbbnVtLTFdPQotKwlsZHIJJG4wLFskX24wXQkJQCByZXN0b3JlIG4wCi0rCXN0cgkkbmhpLFskbnVtLCM0XQkJQCB0cFtudW1dPQotKwwKLSsuTG91dGVyOgotKwlzdWIJJHRqLCRudW0sc3AJCUAgIm9yaWdpbmFsIiAkbnVtLTEgdmFsdWUKLSsJc3ViCSRhcCwkYXAsJHRqCQlAICJyZXdpbmQiIGFwIHRvICZhcFsxXQotKwlzdWIJJG5wLCRucCwkdGoJCUAgInJld2luZCIgbnAgdG8gJm5wWzFdCi0rCWxkcgkkYmksWyR0cCwjNF0hCQlAICooKyticCkKLSsJbGRyCSRhaixbJGFwLCMtNF0JCUAgYXBbMF0KLSsJbGRyCSRuaixbJG5wLCMtNF0JCUAgbnBbMF0KLSsJbGRyCSRhbG8sW3NwXQkJQCB0cFswXQotKwlsZHIJJHRqLFtzcCwjNF0JCUAgdHBbMV0KLSsKLSsJbW92CSRhaGksIzAKLSsJdW1sYWwJJGFsbywkYWhpLCRhaiwkYmkJQCBhcFswXSpicFtpXSt0cFswXQotKwlzdHIJJHRwLFskX2JwXQkJQCBzYXZlIGJwCi0rCW11bAkkbjAsJGFsbywkbjAKLSsJbW92CSRubG8sIzAKLSsJdW1sYWwJJGFsbywkbmxvLCRuaiwkbjAJQCBucFswXSpuMCsidHBbMF0iCi0rCW1vdgkkdHAsc3AKLSsKLSsuTGlubmVyOgotKwlsZHIJJGFqLFskYXBdLCM0CQlAIGFwW2pdLGFwKysKLSsJYWRkcwkkYWxvLCRhaGksJHRqCQlAICs9dHBbal0KLSsJbW92CSRhaGksIzAKLSsJdW1sYWwJJGFsbywkYWhpLCRhaiwkYmkJQCBhcFtqXSpicFtpXQotKwlsZHIJJG5qLFskbnBdLCM0CQlAIG5wW2pdLG5wKysKLSsJbW92CSRuaGksIzAKLSsJdW1sYWwJJG5sbywkbmhpLCRuaiwkbjAJQCBucFtqXSpuMAotKwlsZHIJJHRqLFskdHAsIzhdCQlAIHRwW2orMV0KLSsJYWRjCSRhaGksJGFoaSwjMAotKwlhZGRzCSRubG8sJG5sbywkYWxvCi0rCXN0cgkkbmxvLFskdHBdLCM0CQlAIHRwW2otMV09LHRwKysKLSsJYWRjCSRubG8sJG5oaSwjMAotKwljbXAJJHRwLCRudW0KLSsJYm5lCS5MaW5uZXIKLSsKLSsJYWRkcwkkbmxvLCRubG8sJGFoaQotKwltb3YJJG5oaSwjMAotKwlhZGMJJG5oaSwkbmhpLCMwCi0rCWFkZHMJJG5sbywkbmxvLCR0agotKwlhZGMJJG5oaSwkbmhpLCMwCi0rCWxkcgkkdHAsWyRfYnBdCQlAIHJlc3RvcmUgYnAKLSsJbGRyCSR0aixbJF9icGVuZF0JCUAgcmVzdG9yZSAmYnBbbnVtXQotKwlzdHIJJG5sbyxbJG51bV0JCUAgdHBbbnVtLTFdPQotKwlsZHIJJG4wLFskX24wXQkJQCByZXN0b3JlIG4wCi0rCXN0cgkkbmhpLFskbnVtLCM0XQkJQCB0cFtudW1dPQotKwotKwljbXAJJHRwLCR0agotKwlibmUJLkxvdXRlcgotKwwKLSsJbGRyCSRycCxbJF9ycF0JCUAgcHVsbCBycAotKwlhZGQJJG51bSwkbnVtLCM0CQlAICRudW0gdG8gcG9pbnQgYXQgJnRwW251bV0KLSsJc3ViCSRhaiwkbnVtLHNwCQlAICJvcmlnaW5hbCIgbnVtIHZhbHVlCi0rCW1vdgkkdHAsc3AJCQlAICJyZXdpbmQiICR0cAotKwltb3YJJGFwLCR0cAkJCUAgImJvcnJvdyIgJGFwCi0rCXN1YgkkbnAsJG5wLCRhagkJQCAicmV3aW5kIiAkbnAgdG8gJm5wWzBdCi0rCi0rCXN1YnMJJHRqLCR0aiwkdGoJCUAgImNsZWFyIiBjYXJyeSBmbGFnCi0rLkxzdWI6CWxkcgkkdGosWyR0cF0sIzQKLSsJbGRyCSRuaixbJG5wXSwjNAotKwlzYmNzCSR0aiwkdGosJG5qCQlAIHRwW2pdLW5wW2pdCi0rCXN0cgkkdGosWyRycF0sIzQJCUAgcnBbal09Ci0rCXRlcQkkdHAsJG51bQkJQCBwcmVzZXJ2ZSBjYXJyeQotKwlibmUJLkxzdWIKLSsJc2JjcwkkbmhpLCRuaGksIzAJCUAgdXBtb3N0IGNhcnJ5Ci0rCW1vdgkkdHAsc3AJCQlAICJyZXdpbmQiICR0cAotKwlzdWIJJHJwLCRycCwkYWoJCUAgInJld2luZCIgJHJwCi0rCi0rCWFuZAkkYXAsJHRwLCRuaGkKLSsJYmljCSRucCwkcnAsJG5oaQotKwlvcnIJJGFwLCRhcCwkbnAJCUAgYXA9Ym9ycm93P3RwOnJwCi0rCi0rLkxjb3B5OglsZHIJJHRqLFskYXBdLCM0CQlAIGNvcHkgb3IgaW4tcGxhY2UgcmVmcmVzaAotKwlzdHIJc3AsWyR0cF0sIzQJCUAgemFwIHRwCi0rCXN0cgkkdGosWyRycF0sIzQKLSsJY21wCSR0cCwkbnVtCi0rCWJuZQkuTGNvcHkKLSsKLSsJYWRkCXNwLCRudW0sIzQJCUAgc2tpcCBvdmVyIHRwW251bSsxXQotKwlsZG1pYQlzcCEse3I0LXIxMixscn0JCUAgcmVzdG9yZSByZWdpc3RlcnMKLSsJYWRkCXNwLHNwLCMyKjQJCUAgc2tpcCBvdmVyIHtyMCxyMn0KLSsJbW92CXIwLCMxCi0rLkxhYnJ0Ogl0c3QJbHIsIzEKLSsJbW92ZXEJcGMsbHIJCQlAIGJlIGJpbmFyeSBjb21wYXRpYmxlIHdpdGggVjQsIHlldAotKwlieAlscgkJCUAgaW50ZXJvcGVyYWJsZSB3aXRoIFRodW1iIElTQTotKQotKy5zaXplCWJuX211bF9tb250LC4tYm5fbXVsX21vbnQKLSsuYXNjaXoJIk1vbnRnb21lcnkgbXVsdGlwbGljYXRpb24gZm9yIEFSTXY0LCBDUllQVE9HQU1TIGJ5IDxhcHByb1xAb3BlbnNzbC5vcmc+IgotK19fXwotKwotKyRjb2RlID1+IHMvXGJieFxzK2xyXGIvLndvcmRcdDB4ZTEyZmZmMWUvZ207CSMgbWFrZSBpdCBwb3NzaWJsZSB0byBjb21waWxlIHdpdGggLW1hcmNoPWFybXY0Ci0rcHJpbnQgJGNvZGU7Ci0rY2xvc2UgU1RET1VUOwotLS0tIC9kZXYvbnVsbAkyMDA5LTA0LTI0IDA2OjA5OjQ4LjAwMDAwMDAwMCAtMDcwMAotKysrIG9wZW5zc2wtMC45LjhoL2NyeXB0by8wLjkuOS1kZXYvYm4vYXJtdjQtbW9udC5zCTIwMDktMDktMDMgMTU6NDI6MzkuMDAwMDAwMDAwIC0wNzAwCi1AQCAtMCwwICsxLDE0NSBAQAotKy50ZXh0Ci0rCi0rLmdsb2JhbAlibl9tdWxfbW9udAotKy50eXBlCWJuX211bF9tb250LCVmdW5jdGlvbgotKwotKy5hbGlnbgkyCi0rYm5fbXVsX21vbnQ6Ci0rCXN0bWRiCXNwISx7cjAscjJ9CQlAIHNwIHBvaW50cyBhdCBhcmd1bWVudCBibG9jawotKwlsZHIJcjAsW3NwLCMzKjRdCQlAIGxvYWQgbnVtCi0rCWNtcAlyMCwjMgotKwltb3ZsdAlyMCwjMAotKwlhZGRsdAlzcCxzcCwjMio0Ci0rCWJsdAkuTGFicnQKLSsKLSsJc3RtZGIJc3AhLHtyNC1yMTIsbHJ9CQlAIHNhdmUgMTAgcmVnaXN0ZXJzCi0rCi0rCW1vdglyMCxyMCxsc2wjMgkJQCByZXNjYWxlIHIwIGZvciBieXRlIGNvdW50Ci0rCXN1YglzcCxzcCxyMAkJQCBhbGxvY2EoNCpudW0pCi0rCXN1YglzcCxzcCwjNAkJQCArZXh0cmEgZHdvcmQKLSsJc3ViCXIwLHIwLCM0CQlAICJudW09bnVtLTEiCi0rCWFkZAlyNCxyMixyMAkJQCAmYnBbbnVtLTFdCi0rCi0rCWFkZAlyMCxzcCxyMAkJQCByMCB0byBwb2ludCBhdCAmdHBbbnVtLTFdCi0rCWxkcglyOCxbcjAsIzE0KjRdCQlAICZuMAotKwlsZHIJcjIsW3IyXQkJQCBicFswXQotKwlsZHIJcjUsW3IxXSwjNAkJQCBhcFswXSxhcCsrCi0rCWxkcglyNixbcjNdLCM0CQlAIG5wWzBdLG5wKysKLSsJbGRyCXI4LFtyOF0JCUAgKm4wCi0rCXN0cglyNCxbcjAsIzE1KjRdCQlAIHNhdmUgJmJwW251bV0KLSsKLSsJdW11bGwJcjEwLHIxMSxyNSxyMglAIGFwWzBdKmJwWzBdCi0rCXN0cglyOCxbcjAsIzE0KjRdCQlAIHNhdmUgbjAgdmFsdWUKLSsJbXVsCXI4LHIxMCxyOAkJQCAidHBbMF0iKm4wCi0rCW1vdglyMTIsIzAKLSsJdW1sYWwJcjEwLHIxMixyNixyOAlAIG5wWzBdKm4wKyJ0WzBdIgotKwltb3YJcjQsc3AKLSsKLSsuTDFzdDoKLSsJbGRyCXI1LFtyMV0sIzQJCUAgYXBbal0sYXArKwotKwltb3YJcjEwLHIxMQotKwltb3YJcjExLCMwCi0rCXVtbGFsCXIxMCxyMTEscjUscjIJQCBhcFtqXSpicFswXQotKwlsZHIJcjYsW3IzXSwjNAkJQCBucFtqXSxucCsrCi0rCW1vdglyMTQsIzAKLSsJdW1sYWwJcjEyLHIxNCxyNixyOAlAIG5wW2pdKm4wCi0rCWFkZHMJcjEyLHIxMixyMTAKLSsJc3RyCXIxMixbcjRdLCM0CQlAIHRwW2otMV09LHRwKysKLSsJYWRjCXIxMixyMTQsIzAKLSsJY21wCXI0LHIwCi0rCWJuZQkuTDFzdAotKwotKwlhZGRzCXIxMixyMTIscjExCi0rCW1vdglyMTQsIzAKLSsJYWRjCXIxNCxyMTQsIzAKLSsJbGRyCXI0LFtyMCwjMTMqNF0JCUAgcmVzdG9yZSBicAotKwlzdHIJcjEyLFtyMF0JCUAgdHBbbnVtLTFdPQotKwlsZHIJcjgsW3IwLCMxNCo0XQkJQCByZXN0b3JlIG4wCi0rCXN0cglyMTQsW3IwLCM0XQkJQCB0cFtudW1dPQotKwwKLSsuTG91dGVyOgotKwlzdWIJcjcscjAsc3AJCUAgIm9yaWdpbmFsIiByMC0xIHZhbHVlCi0rCXN1YglyMSxyMSxyNwkJQCAicmV3aW5kIiBhcCB0byAmYXBbMV0KLSsJc3ViCXIzLHIzLHI3CQlAICJyZXdpbmQiIG5wIHRvICZucFsxXQotKwlsZHIJcjIsW3I0LCM0XSEJCUAgKigrK2JwKQotKwlsZHIJcjUsW3IxLCMtNF0JCUAgYXBbMF0KLSsJbGRyCXI2LFtyMywjLTRdCQlAIG5wWzBdCi0rCWxkcglyMTAsW3NwXQkJQCB0cFswXQotKwlsZHIJcjcsW3NwLCM0XQkJQCB0cFsxXQotKwotKwltb3YJcjExLCMwCi0rCXVtbGFsCXIxMCxyMTEscjUscjIJQCBhcFswXSpicFtpXSt0cFswXQotKwlzdHIJcjQsW3IwLCMxMyo0XQkJQCBzYXZlIGJwCi0rCW11bAlyOCxyMTAscjgKLSsJbW92CXIxMiwjMAotKwl1bWxhbAlyMTAscjEyLHI2LHI4CUAgbnBbMF0qbjArInRwWzBdIgotKwltb3YJcjQsc3AKLSsKLSsuTGlubmVyOgotKwlsZHIJcjUsW3IxXSwjNAkJQCBhcFtqXSxhcCsrCi0rCWFkZHMJcjEwLHIxMSxyNwkJQCArPXRwW2pdCi0rCW1vdglyMTEsIzAKLSsJdW1sYWwJcjEwLHIxMSxyNSxyMglAIGFwW2pdKmJwW2ldCi0rCWxkcglyNixbcjNdLCM0CQlAIG5wW2pdLG5wKysKLSsJbW92CXIxNCwjMAotKwl1bWxhbAlyMTIscjE0LHI2LHI4CUAgbnBbal0qbjAKLSsJbGRyCXI3LFtyNCwjOF0JCUAgdHBbaisxXQotKwlhZGMJcjExLHIxMSwjMAotKwlhZGRzCXIxMixyMTIscjEwCi0rCXN0cglyMTIsW3I0XSwjNAkJQCB0cFtqLTFdPSx0cCsrCi0rCWFkYwlyMTIscjE0LCMwCi0rCWNtcAlyNCxyMAotKwlibmUJLkxpbm5lcgotKwotKwlhZGRzCXIxMixyMTIscjExCi0rCW1vdglyMTQsIzAKLSsJYWRjCXIxNCxyMTQsIzAKLSsJYWRkcwlyMTIscjEyLHI3Ci0rCWFkYwlyMTQscjE0LCMwCi0rCWxkcglyNCxbcjAsIzEzKjRdCQlAIHJlc3RvcmUgYnAKLSsJbGRyCXI3LFtyMCwjMTUqNF0JCUAgcmVzdG9yZSAmYnBbbnVtXQotKwlzdHIJcjEyLFtyMF0JCUAgdHBbbnVtLTFdPQotKwlsZHIJcjgsW3IwLCMxNCo0XQkJQCByZXN0b3JlIG4wCi0rCXN0cglyMTQsW3IwLCM0XQkJQCB0cFtudW1dPQotKwotKwljbXAJcjQscjcKLSsJYm5lCS5Mb3V0ZXIKLSsMCi0rCWxkcglyMixbcjAsIzEyKjRdCQlAIHB1bGwgcnAKLSsJYWRkCXIwLHIwLCM0CQlAIHIwIHRvIHBvaW50IGF0ICZ0cFtudW1dCi0rCXN1YglyNSxyMCxzcAkJQCAib3JpZ2luYWwiIG51bSB2YWx1ZQotKwltb3YJcjQsc3AJCQlAICJyZXdpbmQiIHI0Ci0rCW1vdglyMSxyNAkJCUAgImJvcnJvdyIgcjEKLSsJc3ViCXIzLHIzLHI1CQlAICJyZXdpbmQiIHIzIHRvICZucFswXQotKwotKwlzdWJzCXI3LHI3LHI3CQlAICJjbGVhciIgY2FycnkgZmxhZwotKy5Mc3ViOglsZHIJcjcsW3I0XSwjNAotKwlsZHIJcjYsW3IzXSwjNAotKwlzYmNzCXI3LHI3LHI2CQlAIHRwW2pdLW5wW2pdCi0rCXN0cglyNyxbcjJdLCM0CQlAIHJwW2pdPQotKwl0ZXEJcjQscjAJCUAgcHJlc2VydmUgY2FycnkKLSsJYm5lCS5Mc3ViCi0rCXNiY3MJcjE0LHIxNCwjMAkJQCB1cG1vc3QgY2FycnkKLSsJbW92CXI0LHNwCQkJQCAicmV3aW5kIiByNAotKwlzdWIJcjIscjIscjUJCUAgInJld2luZCIgcjIKLSsKLSsJYW5kCXIxLHI0LHIxNAotKwliaWMJcjMscjIscjE0Ci0rCW9ycglyMSxyMSxyMwkJQCBhcD1ib3Jyb3c/dHA6cnAKLSsKLSsuTGNvcHk6CWxkcglyNyxbcjFdLCM0CQlAIGNvcHkgb3IgaW4tcGxhY2UgcmVmcmVzaAotKwlzdHIJc3AsW3I0XSwjNAkJQCB6YXAgdHAKLSsJc3RyCXI3LFtyMl0sIzQKLSsJY21wCXI0LHIwCi0rCWJuZQkuTGNvcHkKLSsKLSsJYWRkCXNwLHIwLCM0CQlAIHNraXAgb3ZlciB0cFtudW0rMV0KLSsJbGRtaWEJc3AhLHtyNC1yMTIsbHJ9CQlAIHJlc3RvcmUgcmVnaXN0ZXJzCi0rCWFkZAlzcCxzcCwjMio0CQlAIHNraXAgb3ZlciB7cjAscjJ9Ci0rCW1vdglyMCwjMQotKy5MYWJydDoJdHN0CWxyLCMxCi0rCW1vdmVxCXBjLGxyCQkJQCBiZSBiaW5hcnkgY29tcGF0aWJsZSB3aXRoIFY0LCB5ZXQKLSsJLndvcmQJMHhlMTJmZmYxZQkJCUAgaW50ZXJvcGVyYWJsZSB3aXRoIFRodW1iIElTQTotKQotKy5zaXplCWJuX211bF9tb250LC4tYm5fbXVsX21vbnQKLSsuYXNjaXoJIk1vbnRnb21lcnkgbXVsdGlwbGljYXRpb24gZm9yIEFSTXY0LCBDUllQVE9HQU1TIGJ5IDxhcHByb0BvcGVuc3NsLm9yZz4iCi0rLmFsaWduCTIKLS0tLSAvZGV2L251bGwJMjAwOS0wNC0yNCAwNjowOTo0OC4wMDAwMDAwMDAgLTA3MDAKLSsrKyBvcGVuc3NsLTAuOS44aC9jcnlwdG8vMC45LjktZGV2L3NoYS9zaGExLWFybXY0LWxhcmdlLnBsCTIwMDktMDktMDMgMTU6NDI6MzkuMDAwMDAwMDAwIC0wNzAwCi1AQCAtMCwwICsxLDIzMSBAQAotKyMhL3Vzci9iaW4vZW52IHBlcmwKLSsKLSsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rIyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPiBmb3IgdGhlIE9wZW5TU0wKLSsjIHByb2plY3QuIFRoZSBtb2R1bGUgaXMsIGhvd2V2ZXIsIGR1YWwgbGljZW5zZWQgdW5kZXIgT3BlblNTTCBhbmQKLSsjIENSWVBUT0dBTVMgbGljZW5zZXMgZGVwZW5kaW5nIG9uIHdoZXJlIHlvdSBvYnRhaW4gaXQuIEZvciBmdXJ0aGVyCi0rIyBkZXRhaWxzIHNlZSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL35hcHByby9jcnlwdG9nYW1zLy4KLSsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rCi0rIyBzaGExX2Jsb2NrIHByb2NlZHVyZSBmb3IgQVJNdjQuCi0rIwotKyMgSmFudWFyeSAyMDA3LgotKwotKyMgU2l6ZS9wZXJmb3JtYW5jZSB0cmFkZS1vZmYKLSsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rIyBpbXBsCQlzaXplIGluIGJ5dGVzCWNvbXAgY3ljbGVzWypdCW1lYXN1cmVkIHBlcmZvcm1hbmNlCi0rIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyMgdGh1bWIJCTMwNAkJMzIxMgkJNDQyMAotKyMgYXJtdjQtc21hbGwJMzkyLysyOSUJMTk1OC8rNjQlCTIyNTAvKzk2JQotKyMgYXJtdjQtY29tcGFjdAk3NDAvKzg5JQkxNTUyLysyNiUJMTg0MC8rMjIlCi0rIyBhcm12NC1sYXJnZQkxNDIwLys5MiUJMTMwNy8rMTklCTE1MDAvKzIzJQotKyMgZnVsbCB1bnJvbGwJfjUxMDAvKzI2MCUJfjEyNjAvKzQlCX4xNTAwLyswJQotKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsjIHRodW1iCQk9IHNhbWUgYXMgJ3NtYWxsJyBidXQgaW4gVGh1bWIgaW5zdHJ1Y3Rpb25zWyoqXSBhbmQKLSsjCQkgIHdpdGggcmVjdXJyaW5nIGNvZGUgaW4gdHdvIHByaXZhdGUgZnVuY3Rpb25zOwotKyMgc21hbGwJCT0gZGV0YWNoZWQgWGxvYWQvdXBkYXRlLCBsb29wcyBhcmUgZm9sZGVkOwotKyMgY29tcGFjdAk9IGRldGFjaGVkIFhsb2FkL3VwZGF0ZSwgNXggdW5yb2xsOwotKyMgbGFyZ2UJCT0gaW50ZXJsZWF2ZWQgWGxvYWQvdXBkYXRlLCA1eCB1bnJvbGw7Ci0rIyBmdWxsIHVucm9sbAk9IGludGVybGVhdmVkIFhsb2FkL3VwZGF0ZSwgZnVsbCB1bnJvbGwsIGVzdGltYXRlZFshXTsKLSsjCi0rIyBbKl0JTWFudWFsbHkgY291bnRlZCBpbnN0cnVjdGlvbnMgaW4gImdyYW5kIiBsb29wIGJvZHkuIE1lYXN1cmVkCi0rIwlwZXJmb3JtYW5jZSBpcyBhZmZlY3RlZCBieSBwcm9sb2d1ZSBhbmQgZXBpbG9ndWUgb3ZlcmhlYWQsCi0rIwlpLWNhY2hlIGF2YWlsYWJpbGl0eSwgYnJhbmNoIHBlbmFsdGllcywgZXRjLgotKyMgWyoqXQlXaGlsZSBlYWNoIFRodW1iIGluc3RydWN0aW9uIGlzIHR3aWNlIHNtYWxsZXIsIHRoZXkgYXJlIG5vdCBhcwotKyMJZGl2ZXJzZSBhcyBBUk0gb25lczogZS5nLiwgdGhlcmUgYXJlIG9ubHkgdHdvIGFyaXRobWV0aWMKLSsjCWluc3RydWN0aW9ucyB3aXRoIDMgYXJndW1lbnRzLCBubyBbZml4ZWRdIHJvdGF0ZSwgYWRkcmVzc2luZwotKyMJbW9kZXMgYXJlIGxpbWl0ZWQuIEFzIHJlc3VsdCBpdCB0YWtlcyBtb3JlIGluc3RydWN0aW9ucyB0byBkbwotKyMJdGhlIHNhbWUgam9iIGluIFRodW1iLCB0aGVyZWZvcmUgdGhlIGNvZGUgaXMgbmV2ZXIgdHdpY2UgYXMKLSsjCXNtYWxsIGFuZCBhbHdheXMgc2xvd2VyLgotKwotKyRvdXRwdXQ9c2hpZnQ7Ci0rb3BlbiBTVERPVVQsIj4kb3V0cHV0IjsKLSsKLSskY3R4PSJyMCI7Ci0rJGlucD0icjEiOwotKyRsZW49InIyIjsKLSskYT0icjMiOwotKyRiPSJyNCI7Ci0rJGM9InI1IjsKLSskZD0icjYiOwotKyRlPSJyNyI7Ci0rJEs9InI4IjsKLSskdDA9InIxMCI7Ci0rJHQxPSJyMTEiOwotKyR0Mj0icjEyIjsKLSskWGk9InIxNCI7Ci0rQFY9KCRhLCRiLCRjLCRkLCRlKTsKLSsKLSsjIE9uZSBjYW4gb3B0aW1pemUgdGhpcyBmb3IgYWxpZ25lZCBhY2Nlc3Mgb24gYmlnLWVuZGlhbiBhcmNoaXRlY3R1cmUsCi0rIyBidXQgY29kZSdzIGVuZGlhbiBuZXV0cmFsaXR5IG1ha2VzIGl0IHRvbyBwcmV0dHk6LSkKLStzdWIgWGxvYWQgewotK215ICgkYSwkYiwkYywkZCwkZSk9QF87Ci0rJGNvZGUuPTw8X19fOwotKwlsZHJiCSR0MCxbJGlucF0sIzQKLSsJbGRyYgkkdDEsWyRpbnAsIy0zXQotKwlsZHJiCSR0MixbJGlucCwjLTJdCi0rCWFkZAkkZSwkSywkZSxyb3IjMgkJCUAgRSs9S18wMF8xOQotKwlvcnIJJHQwLCR0MSwkdDAsbHNsIzgKLSsJbGRyYgkkdDEsWyRpbnAsIy0xXQotKwlvcnIJJHQwLCR0MiwkdDAsbHNsIzgKLSsJYWRkCSRlLCRlLCRhLHJvciMyNwkJCUAgRSs9Uk9SKEEsMjcpCi0rCW9ycgkkdDAsJHQxLCR0MCxsc2wjOAotKwlhZGQJJGUsJGUsJHQwCQkJQCBFKz1YW2ldCi0rCWVvcgkkdDEsJGMsJGQJCQlAIEZfeHhfeHgKLSsJc3RyCSR0MCxbJFhpLCMtNF0hCi0rX19fCi0rfQotK3N1YiBYdXBkYXRlIHsKLStteSAoJGEsJGIsJGMsJGQsJGUsJGZsYWcpPUBfOwotKyRjb2RlLj08PF9fXzsKLSsJbGRyCSR0MCxbJFhpLCMxNSo0XQotKwlsZHIJJHQxLFskWGksIzEzKjRdCi0rCWxkcgkkdDIsWyRYaSwjNyo0XQotKwlhZGQJJGUsJEssJGUscm9yIzIJCQlAIEUrPUtfeHhfeHgKLSsJZW9yCSR0MCwkdDAsJHQxCi0rCWxkcgkkdDEsWyRYaSwjMio0XQotKwlhZGQJJGUsJGUsJGEscm9yIzI3CQkJQCBFKz1ST1IoQSwyNykKLSsJZW9yCSR0MCwkdDAsJHQyCi0rCWVvcgkkdDAsJHQwLCR0MQotK19fXwotKyRjb2RlLj08PF9fXyBpZiAoIWRlZmluZWQoJGZsYWcpKTsKLSsJZW9yCSR0MSwkYywkZAkJCUAgRl94eF94eCwgYnV0IG5vdCBpbiA0MF81OQotK19fXwotKyRjb2RlLj08PF9fXzsKLSsJbW92CSR0MCwkdDAscm9yIzMxCi0rCWFkZAkkZSwkZSwkdDAJCQlAIEUrPVhbaV0KLSsJc3RyCSR0MCxbJFhpLCMtNF0hCi0rX19fCi0rfQotKwotK3N1YiBCT0RZXzAwXzE1IHsKLStteSAoJGEsJGIsJGMsJGQsJGUpPUBfOwotKwkmWGxvYWQoQF8pOwotKyRjb2RlLj08PF9fXzsKLSsJYW5kCSR0MSwkYiwkdDEscm9yIzIKLSsJZW9yCSR0MSwkdDEsJGQscm9yIzIJCUAgRl8wMF8xOShCLEMsRCkKLSsJYWRkCSRlLCRlLCR0MQkJCUAgRSs9Rl8wMF8xOShCLEMsRCkKLStfX18KLSt9Ci0rCi0rc3ViIEJPRFlfMTZfMTkgewotK215ICgkYSwkYiwkYywkZCwkZSk9QF87Ci0rCSZYdXBkYXRlKEBfKTsKLSskY29kZS49PDxfX187Ci0rCWFuZAkkdDEsJGIsJHQxLHJvciMyCi0rCWVvcgkkdDEsJHQxLCRkLHJvciMyCQlAIEZfMDBfMTkoQixDLEQpCi0rCWFkZAkkZSwkZSwkdDEJCQlAIEUrPUZfMDBfMTkoQixDLEQpCi0rX19fCi0rfQotKwotK3N1YiBCT0RZXzIwXzM5IHsKLStteSAoJGEsJGIsJGMsJGQsJGUpPUBfOwotKwkmWHVwZGF0ZShAXyk7Ci0rJGNvZGUuPTw8X19fOwotKwllb3IJJHQxLCRiLCR0MSxyb3IjMgkJQCBGXzIwXzM5KEIsQyxEKQotKwlhZGQJJGUsJGUsJHQxCQkJQCBFKz1GXzIwXzM5KEIsQyxEKQotK19fXwotK30KLSsKLStzdWIgQk9EWV80MF81OSB7Ci0rbXkgKCRhLCRiLCRjLCRkLCRlKT1AXzsKLSsJJlh1cGRhdGUoQF8sMSk7Ci0rJGNvZGUuPTw8X19fOwotKwlhbmQJJHQxLCRiLCRjLHJvciMyCi0rCW9ycgkkdDIsJGIsJGMscm9yIzIKLSsJYW5kCSR0MiwkdDIsJGQscm9yIzIKLSsJb3JyCSR0MSwkdDEsJHQyCQkJQCBGXzQwXzU5KEIsQyxEKQotKwlhZGQJJGUsJGUsJHQxCQkJQCBFKz1GXzQwXzU5KEIsQyxEKQotK19fXwotK30KLSsKLSskY29kZT08PF9fXzsKLSsudGV4dAotKwotKy5nbG9iYWwJc2hhMV9ibG9ja19kYXRhX29yZGVyCi0rLnR5cGUJc2hhMV9ibG9ja19kYXRhX29yZGVyLCVmdW5jdGlvbgotKwotKy5hbGlnbgkyCi0rc2hhMV9ibG9ja19kYXRhX29yZGVyOgotKwlzdG1kYglzcCEse3I0LXIxMixscn0KLSsJYWRkCSRsZW4sJGlucCwkbGVuLGxzbCM2CUAgJGxlbiB0byBwb2ludCBhdCB0aGUgZW5kIG9mICRpbnAKLSsJbGRtaWEJJGN0eCx7JGEsJGIsJGMsJGQsJGV9Ci0rLkxsb29wOgotKwlsZHIJJEssLkxLXzAwXzE5Ci0rCW1vdgkkWGksc3AKLSsJc3ViCXNwLHNwLCMxNSo0Ci0rCW1vdgkkYywkYyxyb3IjMzAKLSsJbW92CSRkLCRkLHJvciMzMAotKwltb3YJJGUsJGUscm9yIzMwCQlAIFs2XQotKy5MXzAwXzE1OgotK19fXwotK2ZvcigkaT0wOyRpPDU7JGkrKykgewotKwkmQk9EWV8wMF8xNShAVik7CXVuc2hpZnQoQFYscG9wKEBWKSk7Ci0rfQotKyRjb2RlLj08PF9fXzsKLSsJdGVxCSRYaSxzcAotKwlibmUJLkxfMDBfMTUJCUAgWygoMTErNCkqNSsyKSozXQotK19fXwotKwkmQk9EWV8wMF8xNShAVik7CXVuc2hpZnQoQFYscG9wKEBWKSk7Ci0rCSZCT0RZXzE2XzE5KEBWKTsJdW5zaGlmdChAVixwb3AoQFYpKTsKLSsJJkJPRFlfMTZfMTkoQFYpOwl1bnNoaWZ0KEBWLHBvcChAVikpOwotKwkmQk9EWV8xNl8xOShAVik7CXVuc2hpZnQoQFYscG9wKEBWKSk7Ci0rCSZCT0RZXzE2XzE5KEBWKTsJdW5zaGlmdChAVixwb3AoQFYpKTsKLSskY29kZS49PDxfX187Ci0rCi0rCWxkcgkkSywuTEtfMjBfMzkJCUAgWysxNSsxNio0XQotKwlzdWIJc3Asc3AsIzI1KjQKLSsJY21uCXNwLCMwCQkJQCBbKzNdLCBjbGVhciBjYXJyeSB0byBkZW5vdGUgMjBfMzkKLSsuTF8yMF8zOV9vcl82MF83OToKLStfX18KLStmb3IoJGk9MDskaTw1OyRpKyspIHsKLSsJJkJPRFlfMjBfMzkoQFYpOwl1bnNoaWZ0KEBWLHBvcChAVikpOwotK30KLSskY29kZS49PDxfX187Ci0rCXRlcQkkWGksc3AJCQlAIHByZXNlcnZlIGNhcnJ5Ci0rCWJuZQkuTF8yMF8zOV9vcl82MF83OQlAIFsrKCgxMiszKSo1KzIpKjRdCi0rCWJjcwkuTF9kb25lCQkJQCBbKygoMTIrMykqNSsyKSo0XSwgc3BhcmUgMzAwIGJ5dGVzCi0rCi0rCWxkcgkkSywuTEtfNDBfNTkKLSsJc3ViCXNwLHNwLCMyMCo0CQlAIFsrMl0KLSsuTF80MF81OToKLStfX18KLStmb3IoJGk9MDskaTw1OyRpKyspIHsKLSsJJkJPRFlfNDBfNTkoQFYpOwl1bnNoaWZ0KEBWLHBvcChAVikpOwotK30KLSskY29kZS49PDxfX187Ci0rCXRlcQkkWGksc3AKLSsJYm5lCS5MXzQwXzU5CQlAIFsrKCgxMis1KSo1KzIpKjRdCi0rCi0rCWxkcgkkSywuTEtfNjBfNzkKLSsJc3ViCXNwLHNwLCMyMCo0Ci0rCWNtcAlzcCwjMAkJCUAgc2V0IGNhcnJ5IHRvIGRlbm90ZSA2MF83OQotKwliCS5MXzIwXzM5X29yXzYwXzc5CUAgWys0XSwgc3BhcmUgMzAwIGJ5dGVzCi0rLkxfZG9uZToKLSsJYWRkCXNwLHNwLCM4MCo0CQlAICJkZWFsbG9jYXRlIiBzdGFjayBmcmFtZQotKwlsZG1pYQkkY3R4LHskSywkdDAsJHQxLCR0MiwkWGl9Ci0rCWFkZAkkYSwkSywkYQotKwlhZGQJJGIsJHQwLCRiCi0rCWFkZAkkYywkdDEsJGMscm9yIzIKLSsJYWRkCSRkLCR0MiwkZCxyb3IjMgotKwlhZGQJJGUsJFhpLCRlLHJvciMyCi0rCXN0bWlhCSRjdHgseyRhLCRiLCRjLCRkLCRlfQotKwl0ZXEJJGlucCwkbGVuCi0rCWJuZQkuTGxvb3AJCQlAIFsrMThdLCB0b3RhbCAxMzA3Ci0rCi0rCWxkbWlhCXNwISx7cjQtcjEyLGxyfQotKwl0c3QJbHIsIzEKLSsJbW92ZXEJcGMsbHIJCQlAIGJlIGJpbmFyeSBjb21wYXRpYmxlIHdpdGggVjQsIHlldAotKwlieAlscgkJCUAgaW50ZXJvcGVyYWJsZSB3aXRoIFRodW1iIElTQTotKQotKy5hbGlnbgkyCi0rLkxLXzAwXzE5Ogkud29yZAkweDVhODI3OTk5Ci0rLkxLXzIwXzM5Ogkud29yZAkweDZlZDllYmExCi0rLkxLXzQwXzU5Ogkud29yZAkweDhmMWJiY2RjCi0rLkxLXzYwXzc5Ogkud29yZAkweGNhNjJjMWQ2Ci0rLnNpemUJc2hhMV9ibG9ja19kYXRhX29yZGVyLC4tc2hhMV9ibG9ja19kYXRhX29yZGVyCi0rLmFzY2l6CSJTSEExIGJsb2NrIHRyYW5zZm9ybSBmb3IgQVJNdjQsIENSWVBUT0dBTVMgYnkgPGFwcHJvXEBvcGVuc3NsLm9yZz4iCi0rX19fCi0rCi0rJGNvZGUgPX4gcy9cYmJ4XHMrbHJcYi8ud29yZFx0MHhlMTJmZmYxZS9nbTsJIyBtYWtlIGl0IHBvc3NpYmxlIHRvIGNvbXBpbGUgd2l0aCAtbWFyY2g9YXJtdjQKLStwcmludCAkY29kZTsKLStjbG9zZSBTVERPVVQ7ICMgZW5mb3JjZSBmbHVzaAotLS0tIC9kZXYvbnVsbAkyMDA5LTA0LTI0IDA2OjA5OjQ4LjAwMDAwMDAwMCAtMDcwMAotKysrIG9wZW5zc2wtMC45LjhoL2NyeXB0by8wLjkuOS1kZXYvc2hhL3NoYTEtYXJtdjQtbGFyZ2UucwkyMDA5LTA5LTAzIDE1OjQyOjM5LjAwMDAwMDAwMCAtMDcwMAotQEAgLTAsMCArMSwzNzYgQEAKLSsudGV4dAotKwotKy5nbG9iYWwJc2hhMV9ibG9ja19kYXRhX29yZGVyCi0rLnR5cGUJc2hhMV9ibG9ja19kYXRhX29yZGVyLCVmdW5jdGlvbgotKwotKy5hbGlnbgkyCi0rc2hhMV9ibG9ja19kYXRhX29yZGVyOgotKwlzdG1kYglzcCEse3I0LXIxMixscn0KLSsJYWRkCXIyLHIxLHIyLGxzbCM2CUAgcjIgdG8gcG9pbnQgYXQgdGhlIGVuZCBvZiByMQotKwlsZG1pYQlyMCx7cjMscjQscjUscjYscjd9Ci0rLkxsb29wOgotKwlsZHIJcjgsLkxLXzAwXzE5Ci0rCW1vdglyMTQsc3AKLSsJc3ViCXNwLHNwLCMxNSo0Ci0rCW1vdglyNSxyNSxyb3IjMzAKLSsJbW92CXI2LHI2LHJvciMzMAotKwltb3YJcjcscjcscm9yIzMwCQlAIFs2XQotKy5MXzAwXzE1OgotKwlsZHJiCXIxMCxbcjFdLCM0Ci0rCWxkcmIJcjExLFtyMSwjLTNdCi0rCWxkcmIJcjEyLFtyMSwjLTJdCi0rCWFkZAlyNyxyOCxyNyxyb3IjMgkJCUAgRSs9S18wMF8xOQotKwlvcnIJcjEwLHIxMSxyMTAsbHNsIzgKLSsJbGRyYglyMTEsW3IxLCMtMV0KLSsJb3JyCXIxMCxyMTIscjEwLGxzbCM4Ci0rCWFkZAlyNyxyNyxyMyxyb3IjMjcJCQlAIEUrPVJPUihBLDI3KQotKwlvcnIJcjEwLHIxMSxyMTAsbHNsIzgKLSsJYWRkCXI3LHI3LHIxMAkJCUAgRSs9WFtpXQotKwllb3IJcjExLHI1LHI2CQkJQCBGX3h4X3h4Ci0rCXN0cglyMTAsW3IxNCwjLTRdIQotKwlhbmQJcjExLHI0LHIxMSxyb3IjMgotKwllb3IJcjExLHIxMSxyNixyb3IjMgkJQCBGXzAwXzE5KEIsQyxEKQotKwlhZGQJcjcscjcscjExCQkJQCBFKz1GXzAwXzE5KEIsQyxEKQotKwlsZHJiCXIxMCxbcjFdLCM0Ci0rCWxkcmIJcjExLFtyMSwjLTNdCi0rCWxkcmIJcjEyLFtyMSwjLTJdCi0rCWFkZAlyNixyOCxyNixyb3IjMgkJCUAgRSs9S18wMF8xOQotKwlvcnIJcjEwLHIxMSxyMTAsbHNsIzgKLSsJbGRyYglyMTEsW3IxLCMtMV0KLSsJb3JyCXIxMCxyMTIscjEwLGxzbCM4Ci0rCWFkZAlyNixyNixyNyxyb3IjMjcJCQlAIEUrPVJPUihBLDI3KQotKwlvcnIJcjEwLHIxMSxyMTAsbHNsIzgKLSsJYWRkCXI2LHI2LHIxMAkJCUAgRSs9WFtpXQotKwllb3IJcjExLHI0LHI1CQkJQCBGX3h4X3h4Ci0rCXN0cglyMTAsW3IxNCwjLTRdIQotKwlhbmQJcjExLHIzLHIxMSxyb3IjMgotKwllb3IJcjExLHIxMSxyNSxyb3IjMgkJQCBGXzAwXzE5KEIsQyxEKQotKwlhZGQJcjYscjYscjExCQkJQCBFKz1GXzAwXzE5KEIsQyxEKQotKwlsZHJiCXIxMCxbcjFdLCM0Ci0rCWxkcmIJcjExLFtyMSwjLTNdCi0rCWxkcmIJcjEyLFtyMSwjLTJdCi0rCWFkZAlyNSxyOCxyNSxyb3IjMgkJCUAgRSs9S18wMF8xOQotKwlvcnIJcjEwLHIxMSxyMTAsbHNsIzgKLSsJbGRyYglyMTEsW3IxLCMtMV0KLSsJb3JyCXIxMCxyMTIscjEwLGxzbCM4Ci0rCWFkZAlyNSxyNSxyNixyb3IjMjcJCQlAIEUrPVJPUihBLDI3KQotKwlvcnIJcjEwLHIxMSxyMTAsbHNsIzgKLSsJYWRkCXI1LHI1LHIxMAkJCUAgRSs9WFtpXQotKwllb3IJcjExLHIzLHI0CQkJQCBGX3h4X3h4Ci0rCXN0cglyMTAsW3IxNCwjLTRdIQotKwlhbmQJcjExLHI3LHIxMSxyb3IjMgotKwllb3IJcjExLHIxMSxyNCxyb3IjMgkJQCBGXzAwXzE5KEIsQyxEKQotKwlhZGQJcjUscjUscjExCQkJQCBFKz1GXzAwXzE5KEIsQyxEKQotKwlsZHJiCXIxMCxbcjFdLCM0Ci0rCWxkcmIJcjExLFtyMSwjLTNdCi0rCWxkcmIJcjEyLFtyMSwjLTJdCi0rCWFkZAlyNCxyOCxyNCxyb3IjMgkJCUAgRSs9S18wMF8xOQotKwlvcnIJcjEwLHIxMSxyMTAsbHNsIzgKLSsJbGRyYglyMTEsW3IxLCMtMV0KLSsJb3JyCXIxMCxyMTIscjEwLGxzbCM4Ci0rCWFkZAlyNCxyNCxyNSxyb3IjMjcJCQlAIEUrPVJPUihBLDI3KQotKwlvcnIJcjEwLHIxMSxyMTAsbHNsIzgKLSsJYWRkCXI0LHI0LHIxMAkJCUAgRSs9WFtpXQotKwllb3IJcjExLHI3LHIzCQkJQCBGX3h4X3h4Ci0rCXN0cglyMTAsW3IxNCwjLTRdIQotKwlhbmQJcjExLHI2LHIxMSxyb3IjMgotKwllb3IJcjExLHIxMSxyMyxyb3IjMgkJQCBGXzAwXzE5KEIsQyxEKQotKwlhZGQJcjQscjQscjExCQkJQCBFKz1GXzAwXzE5KEIsQyxEKQotKwlsZHJiCXIxMCxbcjFdLCM0Ci0rCWxkcmIJcjExLFtyMSwjLTNdCi0rCWxkcmIJcjEyLFtyMSwjLTJdCi0rCWFkZAlyMyxyOCxyMyxyb3IjMgkJCUAgRSs9S18wMF8xOQotKwlvcnIJcjEwLHIxMSxyMTAsbHNsIzgKLSsJbGRyYglyMTEsW3IxLCMtMV0KLSsJb3JyCXIxMCxyMTIscjEwLGxzbCM4Ci0rCWFkZAlyMyxyMyxyNCxyb3IjMjcJCQlAIEUrPVJPUihBLDI3KQotKwlvcnIJcjEwLHIxMSxyMTAsbHNsIzgKLSsJYWRkCXIzLHIzLHIxMAkJCUAgRSs9WFtpXQotKwllb3IJcjExLHI2LHI3CQkJQCBGX3h4X3h4Ci0rCXN0cglyMTAsW3IxNCwjLTRdIQotKwlhbmQJcjExLHI1LHIxMSxyb3IjMgotKwllb3IJcjExLHIxMSxyNyxyb3IjMgkJQCBGXzAwXzE5KEIsQyxEKQotKwlhZGQJcjMscjMscjExCQkJQCBFKz1GXzAwXzE5KEIsQyxEKQotKwl0ZXEJcjE0LHNwCi0rCWJuZQkuTF8wMF8xNQkJQCBbKCgxMSs0KSo1KzIpKjNdCi0rCWxkcmIJcjEwLFtyMV0sIzQKLSsJbGRyYglyMTEsW3IxLCMtM10KLSsJbGRyYglyMTIsW3IxLCMtMl0KLSsJYWRkCXI3LHI4LHI3LHJvciMyCQkJQCBFKz1LXzAwXzE5Ci0rCW9ycglyMTAscjExLHIxMCxsc2wjOAotKwlsZHJiCXIxMSxbcjEsIy0xXQotKwlvcnIJcjEwLHIxMixyMTAsbHNsIzgKLSsJYWRkCXI3LHI3LHIzLHJvciMyNwkJCUAgRSs9Uk9SKEEsMjcpCi0rCW9ycglyMTAscjExLHIxMCxsc2wjOAotKwlhZGQJcjcscjcscjEwCQkJQCBFKz1YW2ldCi0rCWVvcglyMTEscjUscjYJCQlAIEZfeHhfeHgKLSsJc3RyCXIxMCxbcjE0LCMtNF0hCi0rCWFuZAlyMTEscjQscjExLHJvciMyCi0rCWVvcglyMTEscjExLHI2LHJvciMyCQlAIEZfMDBfMTkoQixDLEQpCi0rCWFkZAlyNyxyNyxyMTEJCQlAIEUrPUZfMDBfMTkoQixDLEQpCi0rCWxkcglyMTAsW3IxNCwjMTUqNF0KLSsJbGRyCXIxMSxbcjE0LCMxMyo0XQotKwlsZHIJcjEyLFtyMTQsIzcqNF0KLSsJYWRkCXI2LHI4LHI2LHJvciMyCQkJQCBFKz1LX3h4X3h4Ci0rCWVvcglyMTAscjEwLHIxMQotKwlsZHIJcjExLFtyMTQsIzIqNF0KLSsJYWRkCXI2LHI2LHI3LHJvciMyNwkJCUAgRSs9Uk9SKEEsMjcpCi0rCWVvcglyMTAscjEwLHIxMgotKwllb3IJcjEwLHIxMCxyMTEKLSsJZW9yCXIxMSxyNCxyNQkJCUAgRl94eF94eCwgYnV0IG5vdCBpbiA0MF81OQotKwltb3YJcjEwLHIxMCxyb3IjMzEKLSsJYWRkCXI2LHI2LHIxMAkJCUAgRSs9WFtpXQotKwlzdHIJcjEwLFtyMTQsIy00XSEKLSsJYW5kCXIxMSxyMyxyMTEscm9yIzIKLSsJZW9yCXIxMSxyMTEscjUscm9yIzIJCUAgRl8wMF8xOShCLEMsRCkKLSsJYWRkCXI2LHI2LHIxMQkJCUAgRSs9Rl8wMF8xOShCLEMsRCkKLSsJbGRyCXIxMCxbcjE0LCMxNSo0XQotKwlsZHIJcjExLFtyMTQsIzEzKjRdCi0rCWxkcglyMTIsW3IxNCwjNyo0XQotKwlhZGQJcjUscjgscjUscm9yIzIJCQlAIEUrPUtfeHhfeHgKLSsJZW9yCXIxMCxyMTAscjExCi0rCWxkcglyMTEsW3IxNCwjMio0XQotKwlhZGQJcjUscjUscjYscm9yIzI3CQkJQCBFKz1ST1IoQSwyNykKLSsJZW9yCXIxMCxyMTAscjEyCi0rCWVvcglyMTAscjEwLHIxMQotKwllb3IJcjExLHIzLHI0CQkJQCBGX3h4X3h4LCBidXQgbm90IGluIDQwXzU5Ci0rCW1vdglyMTAscjEwLHJvciMzMQotKwlhZGQJcjUscjUscjEwCQkJQCBFKz1YW2ldCi0rCXN0cglyMTAsW3IxNCwjLTRdIQotKwlhbmQJcjExLHI3LHIxMSxyb3IjMgotKwllb3IJcjExLHIxMSxyNCxyb3IjMgkJQCBGXzAwXzE5KEIsQyxEKQotKwlhZGQJcjUscjUscjExCQkJQCBFKz1GXzAwXzE5KEIsQyxEKQotKwlsZHIJcjEwLFtyMTQsIzE1KjRdCi0rCWxkcglyMTEsW3IxNCwjMTMqNF0KLSsJbGRyCXIxMixbcjE0LCM3KjRdCi0rCWFkZAlyNCxyOCxyNCxyb3IjMgkJCUAgRSs9S194eF94eAotKwllb3IJcjEwLHIxMCxyMTEKLSsJbGRyCXIxMSxbcjE0LCMyKjRdCi0rCWFkZAlyNCxyNCxyNSxyb3IjMjcJCQlAIEUrPVJPUihBLDI3KQotKwllb3IJcjEwLHIxMCxyMTIKLSsJZW9yCXIxMCxyMTAscjExCi0rCWVvcglyMTEscjcscjMJCQlAIEZfeHhfeHgsIGJ1dCBub3QgaW4gNDBfNTkKLSsJbW92CXIxMCxyMTAscm9yIzMxCi0rCWFkZAlyNCxyNCxyMTAJCQlAIEUrPVhbaV0KLSsJc3RyCXIxMCxbcjE0LCMtNF0hCi0rCWFuZAlyMTEscjYscjExLHJvciMyCi0rCWVvcglyMTEscjExLHIzLHJvciMyCQlAIEZfMDBfMTkoQixDLEQpCi0rCWFkZAlyNCxyNCxyMTEJCQlAIEUrPUZfMDBfMTkoQixDLEQpCi0rCWxkcglyMTAsW3IxNCwjMTUqNF0KLSsJbGRyCXIxMSxbcjE0LCMxMyo0XQotKwlsZHIJcjEyLFtyMTQsIzcqNF0KLSsJYWRkCXIzLHI4LHIzLHJvciMyCQkJQCBFKz1LX3h4X3h4Ci0rCWVvcglyMTAscjEwLHIxMQotKwlsZHIJcjExLFtyMTQsIzIqNF0KLSsJYWRkCXIzLHIzLHI0LHJvciMyNwkJCUAgRSs9Uk9SKEEsMjcpCi0rCWVvcglyMTAscjEwLHIxMgotKwllb3IJcjEwLHIxMCxyMTEKLSsJZW9yCXIxMSxyNixyNwkJCUAgRl94eF94eCwgYnV0IG5vdCBpbiA0MF81OQotKwltb3YJcjEwLHIxMCxyb3IjMzEKLSsJYWRkCXIzLHIzLHIxMAkJCUAgRSs9WFtpXQotKwlzdHIJcjEwLFtyMTQsIy00XSEKLSsJYW5kCXIxMSxyNSxyMTEscm9yIzIKLSsJZW9yCXIxMSxyMTEscjcscm9yIzIJCUAgRl8wMF8xOShCLEMsRCkKLSsJYWRkCXIzLHIzLHIxMQkJCUAgRSs9Rl8wMF8xOShCLEMsRCkKLSsKLSsJbGRyCXI4LC5MS18yMF8zOQkJQCBbKzE1KzE2KjRdCi0rCXN1YglzcCxzcCwjMjUqNAotKwljbW4Jc3AsIzAJCQlAIFsrM10sIGNsZWFyIGNhcnJ5IHRvIGRlbm90ZSAyMF8zOQotKy5MXzIwXzM5X29yXzYwXzc5OgotKwlsZHIJcjEwLFtyMTQsIzE1KjRdCi0rCWxkcglyMTEsW3IxNCwjMTMqNF0KLSsJbGRyCXIxMixbcjE0LCM3KjRdCi0rCWFkZAlyNyxyOCxyNyxyb3IjMgkJCUAgRSs9S194eF94eAotKwllb3IJcjEwLHIxMCxyMTEKLSsJbGRyCXIxMSxbcjE0LCMyKjRdCi0rCWFkZAlyNyxyNyxyMyxyb3IjMjcJCQlAIEUrPVJPUihBLDI3KQotKwllb3IJcjEwLHIxMCxyMTIKLSsJZW9yCXIxMCxyMTAscjExCi0rCWVvcglyMTEscjUscjYJCQlAIEZfeHhfeHgsIGJ1dCBub3QgaW4gNDBfNTkKLSsJbW92CXIxMCxyMTAscm9yIzMxCi0rCWFkZAlyNyxyNyxyMTAJCQlAIEUrPVhbaV0KLSsJc3RyCXIxMCxbcjE0LCMtNF0hCi0rCWVvcglyMTEscjQscjExLHJvciMyCQlAIEZfMjBfMzkoQixDLEQpCi0rCWFkZAlyNyxyNyxyMTEJCQlAIEUrPUZfMjBfMzkoQixDLEQpCi0rCWxkcglyMTAsW3IxNCwjMTUqNF0KLSsJbGRyCXIxMSxbcjE0LCMxMyo0XQotKwlsZHIJcjEyLFtyMTQsIzcqNF0KLSsJYWRkCXI2LHI4LHI2LHJvciMyCQkJQCBFKz1LX3h4X3h4Ci0rCWVvcglyMTAscjEwLHIxMQotKwlsZHIJcjExLFtyMTQsIzIqNF0KLSsJYWRkCXI2LHI2LHI3LHJvciMyNwkJCUAgRSs9Uk9SKEEsMjcpCi0rCWVvcglyMTAscjEwLHIxMgotKwllb3IJcjEwLHIxMCxyMTEKLSsJZW9yCXIxMSxyNCxyNQkJCUAgRl94eF94eCwgYnV0IG5vdCBpbiA0MF81OQotKwltb3YJcjEwLHIxMCxyb3IjMzEKLSsJYWRkCXI2LHI2LHIxMAkJCUAgRSs9WFtpXQotKwlzdHIJcjEwLFtyMTQsIy00XSEKLSsJZW9yCXIxMSxyMyxyMTEscm9yIzIJCUAgRl8yMF8zOShCLEMsRCkKLSsJYWRkCXI2LHI2LHIxMQkJCUAgRSs9Rl8yMF8zOShCLEMsRCkKLSsJbGRyCXIxMCxbcjE0LCMxNSo0XQotKwlsZHIJcjExLFtyMTQsIzEzKjRdCi0rCWxkcglyMTIsW3IxNCwjNyo0XQotKwlhZGQJcjUscjgscjUscm9yIzIJCQlAIEUrPUtfeHhfeHgKLSsJZW9yCXIxMCxyMTAscjExCi0rCWxkcglyMTEsW3IxNCwjMio0XQotKwlhZGQJcjUscjUscjYscm9yIzI3CQkJQCBFKz1ST1IoQSwyNykKLSsJZW9yCXIxMCxyMTAscjEyCi0rCWVvcglyMTAscjEwLHIxMQotKwllb3IJcjExLHIzLHI0CQkJQCBGX3h4X3h4LCBidXQgbm90IGluIDQwXzU5Ci0rCW1vdglyMTAscjEwLHJvciMzMQotKwlhZGQJcjUscjUscjEwCQkJQCBFKz1YW2ldCi0rCXN0cglyMTAsW3IxNCwjLTRdIQotKwllb3IJcjExLHI3LHIxMSxyb3IjMgkJQCBGXzIwXzM5KEIsQyxEKQotKwlhZGQJcjUscjUscjExCQkJQCBFKz1GXzIwXzM5KEIsQyxEKQotKwlsZHIJcjEwLFtyMTQsIzE1KjRdCi0rCWxkcglyMTEsW3IxNCwjMTMqNF0KLSsJbGRyCXIxMixbcjE0LCM3KjRdCi0rCWFkZAlyNCxyOCxyNCxyb3IjMgkJCUAgRSs9S194eF94eAotKwllb3IJcjEwLHIxMCxyMTEKLSsJbGRyCXIxMSxbcjE0LCMyKjRdCi0rCWFkZAlyNCxyNCxyNSxyb3IjMjcJCQlAIEUrPVJPUihBLDI3KQotKwllb3IJcjEwLHIxMCxyMTIKLSsJZW9yCXIxMCxyMTAscjExCi0rCWVvcglyMTEscjcscjMJCQlAIEZfeHhfeHgsIGJ1dCBub3QgaW4gNDBfNTkKLSsJbW92CXIxMCxyMTAscm9yIzMxCi0rCWFkZAlyNCxyNCxyMTAJCQlAIEUrPVhbaV0KLSsJc3RyCXIxMCxbcjE0LCMtNF0hCi0rCWVvcglyMTEscjYscjExLHJvciMyCQlAIEZfMjBfMzkoQixDLEQpCi0rCWFkZAlyNCxyNCxyMTEJCQlAIEUrPUZfMjBfMzkoQixDLEQpCi0rCWxkcglyMTAsW3IxNCwjMTUqNF0KLSsJbGRyCXIxMSxbcjE0LCMxMyo0XQotKwlsZHIJcjEyLFtyMTQsIzcqNF0KLSsJYWRkCXIzLHI4LHIzLHJvciMyCQkJQCBFKz1LX3h4X3h4Ci0rCWVvcglyMTAscjEwLHIxMQotKwlsZHIJcjExLFtyMTQsIzIqNF0KLSsJYWRkCXIzLHIzLHI0LHJvciMyNwkJCUAgRSs9Uk9SKEEsMjcpCi0rCWVvcglyMTAscjEwLHIxMgotKwllb3IJcjEwLHIxMCxyMTEKLSsJZW9yCXIxMSxyNixyNwkJCUAgRl94eF94eCwgYnV0IG5vdCBpbiA0MF81OQotKwltb3YJcjEwLHIxMCxyb3IjMzEKLSsJYWRkCXIzLHIzLHIxMAkJCUAgRSs9WFtpXQotKwlzdHIJcjEwLFtyMTQsIy00XSEKLSsJZW9yCXIxMSxyNSxyMTEscm9yIzIJCUAgRl8yMF8zOShCLEMsRCkKLSsJYWRkCXIzLHIzLHIxMQkJCUAgRSs9Rl8yMF8zOShCLEMsRCkKLSsJdGVxCXIxNCxzcAkJCUAgcHJlc2VydmUgY2FycnkKLSsJYm5lCS5MXzIwXzM5X29yXzYwXzc5CUAgWysoKDEyKzMpKjUrMikqNF0KLSsJYmNzCS5MX2RvbmUJCQlAIFsrKCgxMiszKSo1KzIpKjRdLCBzcGFyZSAzMDAgYnl0ZXMKLSsKLSsJbGRyCXI4LC5MS180MF81OQotKwlzdWIJc3Asc3AsIzIwKjQJCUAgWysyXQotKy5MXzQwXzU5OgotKwlsZHIJcjEwLFtyMTQsIzE1KjRdCi0rCWxkcglyMTEsW3IxNCwjMTMqNF0KLSsJbGRyCXIxMixbcjE0LCM3KjRdCi0rCWFkZAlyNyxyOCxyNyxyb3IjMgkJCUAgRSs9S194eF94eAotKwllb3IJcjEwLHIxMCxyMTEKLSsJbGRyCXIxMSxbcjE0LCMyKjRdCi0rCWFkZAlyNyxyNyxyMyxyb3IjMjcJCQlAIEUrPVJPUihBLDI3KQotKwllb3IJcjEwLHIxMCxyMTIKLSsJZW9yCXIxMCxyMTAscjExCi0rCW1vdglyMTAscjEwLHJvciMzMQotKwlhZGQJcjcscjcscjEwCQkJQCBFKz1YW2ldCi0rCXN0cglyMTAsW3IxNCwjLTRdIQotKwlhbmQJcjExLHI0LHI1LHJvciMyCi0rCW9ycglyMTIscjQscjUscm9yIzIKLSsJYW5kCXIxMixyMTIscjYscm9yIzIKLSsJb3JyCXIxMSxyMTEscjEyCQkJQCBGXzQwXzU5KEIsQyxEKQotKwlhZGQJcjcscjcscjExCQkJQCBFKz1GXzQwXzU5KEIsQyxEKQotKwlsZHIJcjEwLFtyMTQsIzE1KjRdCi0rCWxkcglyMTEsW3IxNCwjMTMqNF0KLSsJbGRyCXIxMixbcjE0LCM3KjRdCi0rCWFkZAlyNixyOCxyNixyb3IjMgkJCUAgRSs9S194eF94eAotKwllb3IJcjEwLHIxMCxyMTEKLSsJbGRyCXIxMSxbcjE0LCMyKjRdCi0rCWFkZAlyNixyNixyNyxyb3IjMjcJCQlAIEUrPVJPUihBLDI3KQotKwllb3IJcjEwLHIxMCxyMTIKLSsJZW9yCXIxMCxyMTAscjExCi0rCW1vdglyMTAscjEwLHJvciMzMQotKwlhZGQJcjYscjYscjEwCQkJQCBFKz1YW2ldCi0rCXN0cglyMTAsW3IxNCwjLTRdIQotKwlhbmQJcjExLHIzLHI0LHJvciMyCi0rCW9ycglyMTIscjMscjQscm9yIzIKLSsJYW5kCXIxMixyMTIscjUscm9yIzIKLSsJb3JyCXIxMSxyMTEscjEyCQkJQCBGXzQwXzU5KEIsQyxEKQotKwlhZGQJcjYscjYscjExCQkJQCBFKz1GXzQwXzU5KEIsQyxEKQotKwlsZHIJcjEwLFtyMTQsIzE1KjRdCi0rCWxkcglyMTEsW3IxNCwjMTMqNF0KLSsJbGRyCXIxMixbcjE0LCM3KjRdCi0rCWFkZAlyNSxyOCxyNSxyb3IjMgkJCUAgRSs9S194eF94eAotKwllb3IJcjEwLHIxMCxyMTEKLSsJbGRyCXIxMSxbcjE0LCMyKjRdCi0rCWFkZAlyNSxyNSxyNixyb3IjMjcJCQlAIEUrPVJPUihBLDI3KQotKwllb3IJcjEwLHIxMCxyMTIKLSsJZW9yCXIxMCxyMTAscjExCi0rCW1vdglyMTAscjEwLHJvciMzMQotKwlhZGQJcjUscjUscjEwCQkJQCBFKz1YW2ldCi0rCXN0cglyMTAsW3IxNCwjLTRdIQotKwlhbmQJcjExLHI3LHIzLHJvciMyCi0rCW9ycglyMTIscjcscjMscm9yIzIKLSsJYW5kCXIxMixyMTIscjQscm9yIzIKLSsJb3JyCXIxMSxyMTEscjEyCQkJQCBGXzQwXzU5KEIsQyxEKQotKwlhZGQJcjUscjUscjExCQkJQCBFKz1GXzQwXzU5KEIsQyxEKQotKwlsZHIJcjEwLFtyMTQsIzE1KjRdCi0rCWxkcglyMTEsW3IxNCwjMTMqNF0KLSsJbGRyCXIxMixbcjE0LCM3KjRdCi0rCWFkZAlyNCxyOCxyNCxyb3IjMgkJCUAgRSs9S194eF94eAotKwllb3IJcjEwLHIxMCxyMTEKLSsJbGRyCXIxMSxbcjE0LCMyKjRdCi0rCWFkZAlyNCxyNCxyNSxyb3IjMjcJCQlAIEUrPVJPUihBLDI3KQotKwllb3IJcjEwLHIxMCxyMTIKLSsJZW9yCXIxMCxyMTAscjExCi0rCW1vdglyMTAscjEwLHJvciMzMQotKwlhZGQJcjQscjQscjEwCQkJQCBFKz1YW2ldCi0rCXN0cglyMTAsW3IxNCwjLTRdIQotKwlhbmQJcjExLHI2LHI3LHJvciMyCi0rCW9ycglyMTIscjYscjcscm9yIzIKLSsJYW5kCXIxMixyMTIscjMscm9yIzIKLSsJb3JyCXIxMSxyMTEscjEyCQkJQCBGXzQwXzU5KEIsQyxEKQotKwlhZGQJcjQscjQscjExCQkJQCBFKz1GXzQwXzU5KEIsQyxEKQotKwlsZHIJcjEwLFtyMTQsIzE1KjRdCi0rCWxkcglyMTEsW3IxNCwjMTMqNF0KLSsJbGRyCXIxMixbcjE0LCM3KjRdCi0rCWFkZAlyMyxyOCxyMyxyb3IjMgkJCUAgRSs9S194eF94eAotKwllb3IJcjEwLHIxMCxyMTEKLSsJbGRyCXIxMSxbcjE0LCMyKjRdCi0rCWFkZAlyMyxyMyxyNCxyb3IjMjcJCQlAIEUrPVJPUihBLDI3KQotKwllb3IJcjEwLHIxMCxyMTIKLSsJZW9yCXIxMCxyMTAscjExCi0rCW1vdglyMTAscjEwLHJvciMzMQotKwlhZGQJcjMscjMscjEwCQkJQCBFKz1YW2ldCi0rCXN0cglyMTAsW3IxNCwjLTRdIQotKwlhbmQJcjExLHI1LHI2LHJvciMyCi0rCW9ycglyMTIscjUscjYscm9yIzIKLSsJYW5kCXIxMixyMTIscjcscm9yIzIKLSsJb3JyCXIxMSxyMTEscjEyCQkJQCBGXzQwXzU5KEIsQyxEKQotKwlhZGQJcjMscjMscjExCQkJQCBFKz1GXzQwXzU5KEIsQyxEKQotKwl0ZXEJcjE0LHNwCi0rCWJuZQkuTF80MF81OQkJQCBbKygoMTIrNSkqNSsyKSo0XQotKwotKwlsZHIJcjgsLkxLXzYwXzc5Ci0rCXN1YglzcCxzcCwjMjAqNAotKwljbXAJc3AsIzAJCQlAIHNldCBjYXJyeSB0byBkZW5vdGUgNjBfNzkKLSsJYgkuTF8yMF8zOV9vcl82MF83OQlAIFsrNF0sIHNwYXJlIDMwMCBieXRlcwotKy5MX2RvbmU6Ci0rCWFkZAlzcCxzcCwjODAqNAkJQCAiZGVhbGxvY2F0ZSIgc3RhY2sgZnJhbWUKLSsJbGRtaWEJcjAse3I4LHIxMCxyMTEscjEyLHIxNH0KLSsJYWRkCXIzLHI4LHIzCi0rCWFkZAlyNCxyMTAscjQKLSsJYWRkCXI1LHIxMSxyNSxyb3IjMgotKwlhZGQJcjYscjEyLHI2LHJvciMyCi0rCWFkZAlyNyxyMTQscjcscm9yIzIKLSsJc3RtaWEJcjAse3IzLHI0LHI1LHI2LHI3fQotKwl0ZXEJcjEscjIKLSsJYm5lCS5MbG9vcAkJCUAgWysxOF0sIHRvdGFsIDEzMDcKLSsKLSsJbGRtaWEJc3AhLHtyNC1yMTIsbHJ9Ci0rCXRzdAlsciwjMQotKwltb3ZlcQlwYyxscgkJCUAgYmUgYmluYXJ5IGNvbXBhdGlibGUgd2l0aCBWNCwgeWV0Ci0rCS53b3JkCTB4ZTEyZmZmMWUJCQlAIGludGVyb3BlcmFibGUgd2l0aCBUaHVtYiBJU0E6LSkKLSsuYWxpZ24JMgotKy5MS18wMF8xOToJLndvcmQJMHg1YTgyNzk5OQotKy5MS18yMF8zOToJLndvcmQJMHg2ZWQ5ZWJhMQotKy5MS180MF81OToJLndvcmQJMHg4ZjFiYmNkYwotKy5MS182MF83OToJLndvcmQJMHhjYTYyYzFkNgotKy5zaXplCXNoYTFfYmxvY2tfZGF0YV9vcmRlciwuLXNoYTFfYmxvY2tfZGF0YV9vcmRlcgotKy5hc2NpegkiU0hBMSBibG9jayB0cmFuc2Zvcm0gZm9yIEFSTXY0LCBDUllQVE9HQU1TIGJ5IDxhcHByb0BvcGVuc3NsLm9yZz4iCi0tLS0gL2Rldi9udWxsCTIwMDktMDQtMjQgMDY6MDk6NDguMDAwMDAwMDAwIC0wNzAwCi0rKysgb3BlbnNzbC0wLjkuOGgvY3J5cHRvLzAuOS45LWRldi9zaGEvc2hhMjU2LWFybXY0LnBsCTIwMDktMDktMDMgMTU6NDI6MzkuMDAwMDAwMDAwIC0wNzAwCi1AQCAtMCwwICsxLDE4MCBAQAotKyMhL3Vzci9iaW4vZW52IHBlcmwKLSsKLSsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rIyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPiBmb3IgdGhlIE9wZW5TU0wKLSsjIHByb2plY3QuIFRoZSBtb2R1bGUgaXMsIGhvd2V2ZXIsIGR1YWwgbGljZW5zZWQgdW5kZXIgT3BlblNTTCBhbmQKLSsjIENSWVBUT0dBTVMgbGljZW5zZXMgZGVwZW5kaW5nIG9uIHdoZXJlIHlvdSBvYnRhaW4gaXQuIEZvciBmdXJ0aGVyCi0rIyBkZXRhaWxzIHNlZSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL35hcHByby9jcnlwdG9nYW1zLy4KLSsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rCi0rIyBTSEEyNTYgYmxvY2sgcHJvY2VkdXJlIGZvciBBUk12NC4gTWF5IDIwMDcuCi0rCi0rIyBQZXJmb3JtYW5jZSBpcyB+MnggYmV0dGVyIHRoYW4gZ2NjIDMuNCBnZW5lcmF0ZWQgY29kZSBhbmQgaW4gImFic28tCi0rIyBsdXRlIiB0ZXJtcyBpcyB+MjI1MCBjeWNsZXMgcGVyIDY0LWJ5dGUgYmxvY2sgb3IgfjM1IGN5Y2xlcyBwZXIKLSsjIGJ5dGUuCi0rCi0rJG91dHB1dD1zaGlmdDsKLStvcGVuIFNURE9VVCwiPiRvdXRwdXQiOwotKwotKyRjdHg9InIwIjsJJHQwPSJyMCI7Ci0rJGlucD0icjEiOwotKyRsZW49InIyIjsJJHQxPSJyMiI7Ci0rJFQxPSJyMyI7Ci0rJEE9InI0IjsKLSskQj0icjUiOwotKyRDPSJyNiI7Ci0rJEQ9InI3IjsKLSskRT0icjgiOwotKyRGPSJyOSI7Ci0rJEc9InIxMCI7Ci0rJEg9InIxMSI7Ci0rQFY9KCRBLCRCLCRDLCRELCRFLCRGLCRHLCRIKTsKLSskdDI9InIxMiI7Ci0rJEt0Ymw9InIxNCI7Ci0rCi0rQFNpZ21hMD0oIDIsMTMsMjIpOwotK0BTaWdtYTE9KCA2LDExLDI1KTsKLStAc2lnbWEwPSggNywxOCwgMyk7Ci0rQHNpZ21hMT0oMTcsMTksMTApOwotKwotK3N1YiBCT0RZXzAwXzE1IHsKLStteSAoJGksJGEsJGIsJGMsJGQsJGUsJGYsJGcsJGgpID0gQF87Ci0rCi0rJGNvZGUuPTw8X19fIGlmICgkaTwxNik7Ci0rCWxkcmIJJFQxLFskaW5wLCMzXQkJCUAgJGkKLSsJbGRyYgkkdDIsWyRpbnAsIzJdCi0rCWxkcmIJJHQxLFskaW5wLCMxXQotKwlsZHJiCSR0MCxbJGlucF0sIzQKLSsJb3JyCSRUMSwkVDEsJHQyLGxzbCM4Ci0rCW9ycgkkVDEsJFQxLCR0MSxsc2wjMTYKLSsJb3JyCSRUMSwkVDEsJHQwLGxzbCMyNAotKwlgInN0cgkkaW5wLFtzcCwjMTcqNF0iCWlmICgkaT09MTUpYAotK19fXwotKyRjb2RlLj08PF9fXzsKLSsJbGRyCSR0MixbJEt0YmxdLCM0CQkJQCAqSzI1NisrCi0rCXN0cgkkVDEsW3NwLCNgJGklMTZgKjRdCi0rCW1vdgkkdDAsJGUscm9yIyRTaWdtYTFbMF0KLSsJZW9yCSR0MCwkdDAsJGUscm9yIyRTaWdtYTFbMV0KLSsJZW9yCSR0MCwkdDAsJGUscm9yIyRTaWdtYTFbMl0JQCBTaWdtYTEoZSkKLSsJYWRkCSRUMSwkVDEsJHQwCi0rCWVvcgkkdDEsJGYsJGcKLSsJYW5kCSR0MSwkdDEsJGUKLSsJZW9yCSR0MSwkdDEsJGcJCQlAIENoKGUsZixnKQotKwlhZGQJJFQxLCRUMSwkdDEKLSsJYWRkCSRUMSwkVDEsJGgKLSsJYWRkCSRUMSwkVDEsJHQyCi0rCW1vdgkkaCwkYSxyb3IjJFNpZ21hMFswXQotKwllb3IJJGgsJGgsJGEscm9yIyRTaWdtYTBbMV0KLSsJZW9yCSRoLCRoLCRhLHJvciMkU2lnbWEwWzJdCQlAIFNpZ21hMChhKQotKwlvcnIJJHQwLCRhLCRiCi0rCWFuZAkkdDAsJHQwLCRjCi0rCWFuZAkkdDEsJGEsJGIKLSsJb3JyCSR0MCwkdDAsJHQxCQkJQCBNYWooYSxiLGMpCi0rCWFkZAkkaCwkaCwkdDAKLSsJYWRkCSRkLCRkLCRUMQotKwlhZGQJJGgsJGgsJFQxCi0rX19fCi0rfQotKwotK3N1YiBCT0RZXzE2X1hYIHsKLStteSAoJGksJGEsJGIsJGMsJGQsJGUsJGYsJGcsJGgpID0gQF87Ci0rCi0rJGNvZGUuPTw8X19fOwotKwlsZHIJJHQxLFtzcCwjYCgkaSsxKSUxNmAqNF0JQCAkaQotKwlsZHIJJHQyLFtzcCwjYCgkaSsxNCklMTZgKjRdCi0rCWxkcgkkVDEsW3NwLCNgKCRpKzApJTE2YCo0XQotKwlsZHIJJGlucCxbc3AsI2AoJGkrOSklMTZgKjRdCi0rCW1vdgkkdDAsJHQxLHJvciMkc2lnbWEwWzBdCi0rCWVvcgkkdDAsJHQwLCR0MSxyb3IjJHNpZ21hMFsxXQotKwllb3IJJHQwLCR0MCwkdDEsbHNyIyRzaWdtYTBbMl0JQCBzaWdtYTAoWFtpKzFdKQotKwltb3YJJHQxLCR0Mixyb3IjJHNpZ21hMVswXQotKwllb3IJJHQxLCR0MSwkdDIscm9yIyRzaWdtYTFbMV0KLSsJZW9yCSR0MSwkdDEsJHQyLGxzciMkc2lnbWExWzJdCUAgc2lnbWExKFhbaSsxNF0pCi0rCWFkZAkkVDEsJFQxLCR0MAotKwlhZGQJJFQxLCRUMSwkdDEKLSsJYWRkCSRUMSwkVDEsJGlucAotK19fXwotKwkmQk9EWV8wMF8xNShAXyk7Ci0rfQotKwotKyRjb2RlPTw8X19fOwotKy50ZXh0Ci0rLmNvZGUJMzIKLSsKLSsudHlwZQlLMjU2LCVvYmplY3QKLSsuYWxpZ24JNQotK0syNTY6Ci0rLndvcmQJMHg0MjhhMmY5OCwweDcxMzc0NDkxLDB4YjVjMGZiY2YsMHhlOWI1ZGJhNQotKy53b3JkCTB4Mzk1NmMyNWIsMHg1OWYxMTFmMSwweDkyM2Y4MmE0LDB4YWIxYzVlZDUKLSsud29yZAkweGQ4MDdhYTk4LDB4MTI4MzViMDEsMHgyNDMxODViZSwweDU1MGM3ZGMzCi0rLndvcmQJMHg3MmJlNWQ3NCwweDgwZGViMWZlLDB4OWJkYzA2YTcsMHhjMTliZjE3NAotKy53b3JkCTB4ZTQ5YjY5YzEsMHhlZmJlNDc4NiwweDBmYzE5ZGM2LDB4MjQwY2ExY2MKLSsud29yZAkweDJkZTkyYzZmLDB4NGE3NDg0YWEsMHg1Y2IwYTlkYywweDc2Zjk4OGRhCi0rLndvcmQJMHg5ODNlNTE1MiwweGE4MzFjNjZkLDB4YjAwMzI3YzgsMHhiZjU5N2ZjNwotKy53b3JkCTB4YzZlMDBiZjMsMHhkNWE3OTE0NywweDA2Y2E2MzUxLDB4MTQyOTI5NjcKLSsud29yZAkweDI3YjcwYTg1LDB4MmUxYjIxMzgsMHg0ZDJjNmRmYywweDUzMzgwZDEzCi0rLndvcmQJMHg2NTBhNzM1NCwweDc2NmEwYWJiLDB4ODFjMmM5MmUsMHg5MjcyMmM4NQotKy53b3JkCTB4YTJiZmU4YTEsMHhhODFhNjY0YiwweGMyNGI4YjcwLDB4Yzc2YzUxYTMKLSsud29yZAkweGQxOTJlODE5LDB4ZDY5OTA2MjQsMHhmNDBlMzU4NSwweDEwNmFhMDcwCi0rLndvcmQJMHgxOWE0YzExNiwweDFlMzc2YzA4LDB4Mjc0ODc3NGMsMHgzNGIwYmNiNQotKy53b3JkCTB4MzkxYzBjYjMsMHg0ZWQ4YWE0YSwweDViOWNjYTRmLDB4NjgyZTZmZjMKLSsud29yZAkweDc0OGY4MmVlLDB4NzhhNTYzNmYsMHg4NGM4NzgxNCwweDhjYzcwMjA4Ci0rLndvcmQJMHg5MGJlZmZmYSwweGE0NTA2Y2ViLDB4YmVmOWEzZjcsMHhjNjcxNzhmMgotKy5zaXplCUsyNTYsLi1LMjU2Ci0rCi0rLmdsb2JhbAlzaGEyNTZfYmxvY2tfZGF0YV9vcmRlcgotKy50eXBlCXNoYTI1Nl9ibG9ja19kYXRhX29yZGVyLCVmdW5jdGlvbgotK3NoYTI1Nl9ibG9ja19kYXRhX29yZGVyOgotKwlzdWIJcjMscGMsIzgJCUAgc2hhMjU2X2Jsb2NrX2RhdGFfb3JkZXIKLSsJYWRkCSRsZW4sJGlucCwkbGVuLGxzbCM2CUAgbGVuIHRvIHBvaW50IGF0IHRoZSBlbmQgb2YgaW5wCi0rCXN0bWRiCXNwISx7JGN0eCwkaW5wLCRsZW4scjQtcjEyLGxyfQotKwlsZG1pYQkkY3R4LHskQSwkQiwkQywkRCwkRSwkRiwkRywkSH0KLSsJc3ViCSRLdGJsLHIzLCMyNTYJCUAgSzI1NgotKwlzdWIJc3Asc3AsIzE2KjQJCUAgYWxsb2NhKFhbMTZdKQotKy5Mb29wOgotK19fXwotK2ZvcigkaT0wOyRpPDE2OyRpKyspCXsgJkJPRFlfMDBfMTUoJGksQFYpOyB1bnNoaWZ0KEBWLHBvcChAVikpOyB9Ci0rJGNvZGUuPSIuTHJvdW5kc18xNl94eDpcbiI7Ci0rZm9yICg7JGk8MzI7JGkrKykJeyAmQk9EWV8xNl9YWCgkaSxAVik7IHVuc2hpZnQoQFYscG9wKEBWKSk7IH0KLSskY29kZS49PDxfX187Ci0rCWFuZAkkdDIsJHQyLCMweGZmCi0rCWNtcAkkdDIsIzB4ZjIKLSsJYm5lCS5Mcm91bmRzXzE2X3h4Ci0rCi0rCWxkcgkkVDEsW3NwLCMxNio0XQkJQCBwdWxsIGN0eAotKwlsZHIJJHQwLFskVDEsIzBdCi0rCWxkcgkkdDEsWyRUMSwjNF0KLSsJbGRyCSR0MixbJFQxLCM4XQotKwlhZGQJJEEsJEEsJHQwCi0rCWxkcgkkdDAsWyRUMSwjMTJdCi0rCWFkZAkkQiwkQiwkdDEKLSsJbGRyCSR0MSxbJFQxLCMxNl0KLSsJYWRkCSRDLCRDLCR0MgotKwlsZHIJJHQyLFskVDEsIzIwXQotKwlhZGQJJEQsJEQsJHQwCi0rCWxkcgkkdDAsWyRUMSwjMjRdCi0rCWFkZAkkRSwkRSwkdDEKLSsJbGRyCSR0MSxbJFQxLCMyOF0KLSsJYWRkCSRGLCRGLCR0MgotKwlsZHIJJGlucCxbc3AsIzE3KjRdCQlAIHB1bGwgaW5wCi0rCWxkcgkkdDIsW3NwLCMxOCo0XQkJQCBwdWxsIGlucCtsZW4KLSsJYWRkCSRHLCRHLCR0MAotKwlhZGQJJEgsJEgsJHQxCi0rCXN0bWlhCSRUMSx7JEEsJEIsJEMsJEQsJEUsJEYsJEcsJEh9Ci0rCWNtcAkkaW5wLCR0MgotKwlzdWIJJEt0YmwsJEt0YmwsIzI1NglAIHJld2luZCBLdGJsCi0rCWJuZQkuTG9vcAotKwotKwlhZGQJc3Asc3AsI2AxNiszYCo0CUAgZGVzdHJveSBmcmFtZQotKwlsZG1pYQlzcCEse3I0LXIxMixscn0KLSsJdHN0CWxyLCMxCi0rCW1vdmVxCXBjLGxyCQkJQCBiZSBiaW5hcnkgY29tcGF0aWJsZSB3aXRoIFY0LCB5ZXQKLSsJYngJbHIJCQlAIGludGVyb3BlcmFibGUgd2l0aCBUaHVtYiBJU0E6LSkKLSsuc2l6ZSAgIHNoYTI1Nl9ibG9ja19kYXRhX29yZGVyLC4tc2hhMjU2X2Jsb2NrX2RhdGFfb3JkZXIKLSsuYXNjaXogICJTSEEyNTYgYmxvY2sgdHJhbnNmb3JtIGZvciBBUk12NCwgQ1JZUFRPR0FNUyBieSA8YXBwcm9cQG9wZW5zc2wub3JnPiIKLStfX18KLSsKLSskY29kZSA9fiBzL1xgKFteXGBdKilcYC9ldmFsICQxL2dlbTsKLSskY29kZSA9fiBzL1xiYnhccytsclxiLy53b3JkXHQweGUxMmZmZjFlL2dtOwkjIG1ha2UgaXQgcG9zc2libGUgdG8gY29tcGlsZSB3aXRoIC1tYXJjaD1hcm12NAotK3ByaW50ICRjb2RlOwotK2Nsb3NlIFNURE9VVDsgIyBlbmZvcmNlIGZsdXNoCi0tLS0gL2Rldi9udWxsCTIwMDktMDQtMjQgMDY6MDk6NDguMDAwMDAwMDAwIC0wNzAwCi0rKysgb3BlbnNzbC0wLjkuOGgvY3J5cHRvLzAuOS45LWRldi9zaGEvc2hhMjU2LWFybXY0LnMJMjAwOS0wOS0wMyAxNTo0MjozOS4wMDAwMDAwMDAgLTA3MDAKLUBAIC0wLDAgKzEsMTExMCBAQAotKy50ZXh0Ci0rLmNvZGUJMzIKLSsKLSsudHlwZQlLMjU2LCVvYmplY3QKLSsuYWxpZ24JNQotK0syNTY6Ci0rLndvcmQJMHg0MjhhMmY5OCwweDcxMzc0NDkxLDB4YjVjMGZiY2YsMHhlOWI1ZGJhNQotKy53b3JkCTB4Mzk1NmMyNWIsMHg1OWYxMTFmMSwweDkyM2Y4MmE0LDB4YWIxYzVlZDUKLSsud29yZAkweGQ4MDdhYTk4LDB4MTI4MzViMDEsMHgyNDMxODViZSwweDU1MGM3ZGMzCi0rLndvcmQJMHg3MmJlNWQ3NCwweDgwZGViMWZlLDB4OWJkYzA2YTcsMHhjMTliZjE3NAotKy53b3JkCTB4ZTQ5YjY5YzEsMHhlZmJlNDc4NiwweDBmYzE5ZGM2LDB4MjQwY2ExY2MKLSsud29yZAkweDJkZTkyYzZmLDB4NGE3NDg0YWEsMHg1Y2IwYTlkYywweDc2Zjk4OGRhCi0rLndvcmQJMHg5ODNlNTE1MiwweGE4MzFjNjZkLDB4YjAwMzI3YzgsMHhiZjU5N2ZjNwotKy53b3JkCTB4YzZlMDBiZjMsMHhkNWE3OTE0NywweDA2Y2E2MzUxLDB4MTQyOTI5NjcKLSsud29yZAkweDI3YjcwYTg1LDB4MmUxYjIxMzgsMHg0ZDJjNmRmYywweDUzMzgwZDEzCi0rLndvcmQJMHg2NTBhNzM1NCwweDc2NmEwYWJiLDB4ODFjMmM5MmUsMHg5MjcyMmM4NQotKy53b3JkCTB4YTJiZmU4YTEsMHhhODFhNjY0YiwweGMyNGI4YjcwLDB4Yzc2YzUxYTMKLSsud29yZAkweGQxOTJlODE5LDB4ZDY5OTA2MjQsMHhmNDBlMzU4NSwweDEwNmFhMDcwCi0rLndvcmQJMHgxOWE0YzExNiwweDFlMzc2YzA4LDB4Mjc0ODc3NGMsMHgzNGIwYmNiNQotKy53b3JkCTB4MzkxYzBjYjMsMHg0ZWQ4YWE0YSwweDViOWNjYTRmLDB4NjgyZTZmZjMKLSsud29yZAkweDc0OGY4MmVlLDB4NzhhNTYzNmYsMHg4NGM4NzgxNCwweDhjYzcwMjA4Ci0rLndvcmQJMHg5MGJlZmZmYSwweGE0NTA2Y2ViLDB4YmVmOWEzZjcsMHhjNjcxNzhmMgotKy5zaXplCUsyNTYsLi1LMjU2Ci0rCi0rLmdsb2JhbAlzaGEyNTZfYmxvY2tfZGF0YV9vcmRlcgotKy50eXBlCXNoYTI1Nl9ibG9ja19kYXRhX29yZGVyLCVmdW5jdGlvbgotK3NoYTI1Nl9ibG9ja19kYXRhX29yZGVyOgotKwlzdWIJcjMscGMsIzgJCUAgc2hhMjU2X2Jsb2NrX2RhdGFfb3JkZXIKLSsJYWRkCXIyLHIxLHIyLGxzbCM2CUAgbGVuIHRvIHBvaW50IGF0IHRoZSBlbmQgb2YgaW5wCi0rCXN0bWRiCXNwISx7cjAscjEscjIscjQtcjEyLGxyfQotKwlsZG1pYQlyMCx7cjQscjUscjYscjcscjgscjkscjEwLHIxMX0KLSsJc3ViCXIxNCxyMywjMjU2CQlAIEsyNTYKLSsJc3ViCXNwLHNwLCMxNio0CQlAIGFsbG9jYShYWzE2XSkKLSsuTG9vcDoKLSsJbGRyYglyMyxbcjEsIzNdCQkJQCAwCi0rCWxkcmIJcjEyLFtyMSwjMl0KLSsJbGRyYglyMixbcjEsIzFdCi0rCWxkcmIJcjAsW3IxXSwjNAotKwlvcnIJcjMscjMscjEyLGxzbCM4Ci0rCW9ycglyMyxyMyxyMixsc2wjMTYKLSsJb3JyCXIzLHIzLHIwLGxzbCMyNAotKwkKLSsJbGRyCXIxMixbcjE0XSwjNAkJCUAgKksyNTYrKwotKwlzdHIJcjMsW3NwLCMwKjRdCi0rCW1vdglyMCxyOCxyb3IjNgotKwllb3IJcjAscjAscjgscm9yIzExCi0rCWVvcglyMCxyMCxyOCxyb3IjMjUJQCBTaWdtYTEoZSkKLSsJYWRkCXIzLHIzLHIwCi0rCWVvcglyMixyOSxyMTAKLSsJYW5kCXIyLHIyLHI4Ci0rCWVvcglyMixyMixyMTAJCQlAIENoKGUsZixnKQotKwlhZGQJcjMscjMscjIKLSsJYWRkCXIzLHIzLHIxMQotKwlhZGQJcjMscjMscjEyCi0rCW1vdglyMTEscjQscm9yIzIKLSsJZW9yCXIxMSxyMTEscjQscm9yIzEzCi0rCWVvcglyMTEscjExLHI0LHJvciMyMgkJQCBTaWdtYTAoYSkKLSsJb3JyCXIwLHI0LHI1Ci0rCWFuZAlyMCxyMCxyNgotKwlhbmQJcjIscjQscjUKLSsJb3JyCXIwLHIwLHIyCQkJQCBNYWooYSxiLGMpCi0rCWFkZAlyMTEscjExLHIwCi0rCWFkZAlyNyxyNyxyMwotKwlhZGQJcjExLHIxMSxyMwotKwlsZHJiCXIzLFtyMSwjM10JCQlAIDEKLSsJbGRyYglyMTIsW3IxLCMyXQotKwlsZHJiCXIyLFtyMSwjMV0KLSsJbGRyYglyMCxbcjFdLCM0Ci0rCW9ycglyMyxyMyxyMTIsbHNsIzgKLSsJb3JyCXIzLHIzLHIyLGxzbCMxNgotKwlvcnIJcjMscjMscjAsbHNsIzI0Ci0rCQotKwlsZHIJcjEyLFtyMTRdLCM0CQkJQCAqSzI1NisrCi0rCXN0cglyMyxbc3AsIzEqNF0KLSsJbW92CXIwLHI3LHJvciM2Ci0rCWVvcglyMCxyMCxyNyxyb3IjMTEKLSsJZW9yCXIwLHIwLHI3LHJvciMyNQlAIFNpZ21hMShlKQotKwlhZGQJcjMscjMscjAKLSsJZW9yCXIyLHI4LHI5Ci0rCWFuZAlyMixyMixyNwotKwllb3IJcjIscjIscjkJCQlAIENoKGUsZixnKQotKwlhZGQJcjMscjMscjIKLSsJYWRkCXIzLHIzLHIxMAotKwlhZGQJcjMscjMscjEyCi0rCW1vdglyMTAscjExLHJvciMyCi0rCWVvcglyMTAscjEwLHIxMSxyb3IjMTMKLSsJZW9yCXIxMCxyMTAscjExLHJvciMyMgkJQCBTaWdtYTAoYSkKLSsJb3JyCXIwLHIxMSxyNAotKwlhbmQJcjAscjAscjUKLSsJYW5kCXIyLHIxMSxyNAotKwlvcnIJcjAscjAscjIJCQlAIE1haihhLGIsYykKLSsJYWRkCXIxMCxyMTAscjAKLSsJYWRkCXI2LHI2LHIzCi0rCWFkZAlyMTAscjEwLHIzCi0rCWxkcmIJcjMsW3IxLCMzXQkJCUAgMgotKwlsZHJiCXIxMixbcjEsIzJdCi0rCWxkcmIJcjIsW3IxLCMxXQotKwlsZHJiCXIwLFtyMV0sIzQKLSsJb3JyCXIzLHIzLHIxMixsc2wjOAotKwlvcnIJcjMscjMscjIsbHNsIzE2Ci0rCW9ycglyMyxyMyxyMCxsc2wjMjQKLSsJCi0rCWxkcglyMTIsW3IxNF0sIzQJCQlAICpLMjU2KysKLSsJc3RyCXIzLFtzcCwjMio0XQotKwltb3YJcjAscjYscm9yIzYKLSsJZW9yCXIwLHIwLHI2LHJvciMxMQotKwllb3IJcjAscjAscjYscm9yIzI1CUAgU2lnbWExKGUpCi0rCWFkZAlyMyxyMyxyMAotKwllb3IJcjIscjcscjgKLSsJYW5kCXIyLHIyLHI2Ci0rCWVvcglyMixyMixyOAkJCUAgQ2goZSxmLGcpCi0rCWFkZAlyMyxyMyxyMgotKwlhZGQJcjMscjMscjkKLSsJYWRkCXIzLHIzLHIxMgotKwltb3YJcjkscjEwLHJvciMyCi0rCWVvcglyOSxyOSxyMTAscm9yIzEzCi0rCWVvcglyOSxyOSxyMTAscm9yIzIyCQlAIFNpZ21hMChhKQotKwlvcnIJcjAscjEwLHIxMQotKwlhbmQJcjAscjAscjQKLSsJYW5kCXIyLHIxMCxyMTEKLSsJb3JyCXIwLHIwLHIyCQkJQCBNYWooYSxiLGMpCi0rCWFkZAlyOSxyOSxyMAotKwlhZGQJcjUscjUscjMKLSsJYWRkCXI5LHI5LHIzCi0rCWxkcmIJcjMsW3IxLCMzXQkJCUAgMwotKwlsZHJiCXIxMixbcjEsIzJdCi0rCWxkcmIJcjIsW3IxLCMxXQotKwlsZHJiCXIwLFtyMV0sIzQKLSsJb3JyCXIzLHIzLHIxMixsc2wjOAotKwlvcnIJcjMscjMscjIsbHNsIzE2Ci0rCW9ycglyMyxyMyxyMCxsc2wjMjQKLSsJCi0rCWxkcglyMTIsW3IxNF0sIzQJCQlAICpLMjU2KysKLSsJc3RyCXIzLFtzcCwjMyo0XQotKwltb3YJcjAscjUscm9yIzYKLSsJZW9yCXIwLHIwLHI1LHJvciMxMQotKwllb3IJcjAscjAscjUscm9yIzI1CUAgU2lnbWExKGUpCi0rCWFkZAlyMyxyMyxyMAotKwllb3IJcjIscjYscjcKLSsJYW5kCXIyLHIyLHI1Ci0rCWVvcglyMixyMixyNwkJCUAgQ2goZSxmLGcpCi0rCWFkZAlyMyxyMyxyMgotKwlhZGQJcjMscjMscjgKLSsJYWRkCXIzLHIzLHIxMgotKwltb3YJcjgscjkscm9yIzIKLSsJZW9yCXI4LHI4LHI5LHJvciMxMwotKwllb3IJcjgscjgscjkscm9yIzIyCQlAIFNpZ21hMChhKQotKwlvcnIJcjAscjkscjEwCi0rCWFuZAlyMCxyMCxyMTEKLSsJYW5kCXIyLHI5LHIxMAotKwlvcnIJcjAscjAscjIJCQlAIE1haihhLGIsYykKLSsJYWRkCXI4LHI4LHIwCi0rCWFkZAlyNCxyNCxyMwotKwlhZGQJcjgscjgscjMKLSsJbGRyYglyMyxbcjEsIzNdCQkJQCA0Ci0rCWxkcmIJcjEyLFtyMSwjMl0KLSsJbGRyYglyMixbcjEsIzFdCi0rCWxkcmIJcjAsW3IxXSwjNAotKwlvcnIJcjMscjMscjEyLGxzbCM4Ci0rCW9ycglyMyxyMyxyMixsc2wjMTYKLSsJb3JyCXIzLHIzLHIwLGxzbCMyNAotKwkKLSsJbGRyCXIxMixbcjE0XSwjNAkJCUAgKksyNTYrKwotKwlzdHIJcjMsW3NwLCM0KjRdCi0rCW1vdglyMCxyNCxyb3IjNgotKwllb3IJcjAscjAscjQscm9yIzExCi0rCWVvcglyMCxyMCxyNCxyb3IjMjUJQCBTaWdtYTEoZSkKLSsJYWRkCXIzLHIzLHIwCi0rCWVvcglyMixyNSxyNgotKwlhbmQJcjIscjIscjQKLSsJZW9yCXIyLHIyLHI2CQkJQCBDaChlLGYsZykKLSsJYWRkCXIzLHIzLHIyCi0rCWFkZAlyMyxyMyxyNwotKwlhZGQJcjMscjMscjEyCi0rCW1vdglyNyxyOCxyb3IjMgotKwllb3IJcjcscjcscjgscm9yIzEzCi0rCWVvcglyNyxyNyxyOCxyb3IjMjIJCUAgU2lnbWEwKGEpCi0rCW9ycglyMCxyOCxyOQotKwlhbmQJcjAscjAscjEwCi0rCWFuZAlyMixyOCxyOQotKwlvcnIJcjAscjAscjIJCQlAIE1haihhLGIsYykKLSsJYWRkCXI3LHI3LHIwCi0rCWFkZAlyMTEscjExLHIzCi0rCWFkZAlyNyxyNyxyMwotKwlsZHJiCXIzLFtyMSwjM10JCQlAIDUKLSsJbGRyYglyMTIsW3IxLCMyXQotKwlsZHJiCXIyLFtyMSwjMV0KLSsJbGRyYglyMCxbcjFdLCM0Ci0rCW9ycglyMyxyMyxyMTIsbHNsIzgKLSsJb3JyCXIzLHIzLHIyLGxzbCMxNgotKwlvcnIJcjMscjMscjAsbHNsIzI0Ci0rCQotKwlsZHIJcjEyLFtyMTRdLCM0CQkJQCAqSzI1NisrCi0rCXN0cglyMyxbc3AsIzUqNF0KLSsJbW92CXIwLHIxMSxyb3IjNgotKwllb3IJcjAscjAscjExLHJvciMxMQotKwllb3IJcjAscjAscjExLHJvciMyNQlAIFNpZ21hMShlKQotKwlhZGQJcjMscjMscjAKLSsJZW9yCXIyLHI0LHI1Ci0rCWFuZAlyMixyMixyMTEKLSsJZW9yCXIyLHIyLHI1CQkJQCBDaChlLGYsZykKLSsJYWRkCXIzLHIzLHIyCi0rCWFkZAlyMyxyMyxyNgotKwlhZGQJcjMscjMscjEyCi0rCW1vdglyNixyNyxyb3IjMgotKwllb3IJcjYscjYscjcscm9yIzEzCi0rCWVvcglyNixyNixyNyxyb3IjMjIJCUAgU2lnbWEwKGEpCi0rCW9ycglyMCxyNyxyOAotKwlhbmQJcjAscjAscjkKLSsJYW5kCXIyLHI3LHI4Ci0rCW9ycglyMCxyMCxyMgkJCUAgTWFqKGEsYixjKQotKwlhZGQJcjYscjYscjAKLSsJYWRkCXIxMCxyMTAscjMKLSsJYWRkCXI2LHI2LHIzCi0rCWxkcmIJcjMsW3IxLCMzXQkJCUAgNgotKwlsZHJiCXIxMixbcjEsIzJdCi0rCWxkcmIJcjIsW3IxLCMxXQotKwlsZHJiCXIwLFtyMV0sIzQKLSsJb3JyCXIzLHIzLHIxMixsc2wjOAotKwlvcnIJcjMscjMscjIsbHNsIzE2Ci0rCW9ycglyMyxyMyxyMCxsc2wjMjQKLSsJCi0rCWxkcglyMTIsW3IxNF0sIzQJCQlAICpLMjU2KysKLSsJc3RyCXIzLFtzcCwjNio0XQotKwltb3YJcjAscjEwLHJvciM2Ci0rCWVvcglyMCxyMCxyMTAscm9yIzExCi0rCWVvcglyMCxyMCxyMTAscm9yIzI1CUAgU2lnbWExKGUpCi0rCWFkZAlyMyxyMyxyMAotKwllb3IJcjIscjExLHI0Ci0rCWFuZAlyMixyMixyMTAKLSsJZW9yCXIyLHIyLHI0CQkJQCBDaChlLGYsZykKLSsJYWRkCXIzLHIzLHIyCi0rCWFkZAlyMyxyMyxyNQotKwlhZGQJcjMscjMscjEyCi0rCW1vdglyNSxyNixyb3IjMgotKwllb3IJcjUscjUscjYscm9yIzEzCi0rCWVvcglyNSxyNSxyNixyb3IjMjIJCUAgU2lnbWEwKGEpCi0rCW9ycglyMCxyNixyNwotKwlhbmQJcjAscjAscjgKLSsJYW5kCXIyLHI2LHI3Ci0rCW9ycglyMCxyMCxyMgkJCUAgTWFqKGEsYixjKQotKwlhZGQJcjUscjUscjAKLSsJYWRkCXI5LHI5LHIzCi0rCWFkZAlyNSxyNSxyMwotKwlsZHJiCXIzLFtyMSwjM10JCQlAIDcKLSsJbGRyYglyMTIsW3IxLCMyXQotKwlsZHJiCXIyLFtyMSwjMV0KLSsJbGRyYglyMCxbcjFdLCM0Ci0rCW9ycglyMyxyMyxyMTIsbHNsIzgKLSsJb3JyCXIzLHIzLHIyLGxzbCMxNgotKwlvcnIJcjMscjMscjAsbHNsIzI0Ci0rCQotKwlsZHIJcjEyLFtyMTRdLCM0CQkJQCAqSzI1NisrCi0rCXN0cglyMyxbc3AsIzcqNF0KLSsJbW92CXIwLHI5LHJvciM2Ci0rCWVvcglyMCxyMCxyOSxyb3IjMTEKLSsJZW9yCXIwLHIwLHI5LHJvciMyNQlAIFNpZ21hMShlKQotKwlhZGQJcjMscjMscjAKLSsJZW9yCXIyLHIxMCxyMTEKLSsJYW5kCXIyLHIyLHI5Ci0rCWVvcglyMixyMixyMTEJCQlAIENoKGUsZixnKQotKwlhZGQJcjMscjMscjIKLSsJYWRkCXIzLHIzLHI0Ci0rCWFkZAlyMyxyMyxyMTIKLSsJbW92CXI0LHI1LHJvciMyCi0rCWVvcglyNCxyNCxyNSxyb3IjMTMKLSsJZW9yCXI0LHI0LHI1LHJvciMyMgkJQCBTaWdtYTAoYSkKLSsJb3JyCXIwLHI1LHI2Ci0rCWFuZAlyMCxyMCxyNwotKwlhbmQJcjIscjUscjYKLSsJb3JyCXIwLHIwLHIyCQkJQCBNYWooYSxiLGMpCi0rCWFkZAlyNCxyNCxyMAotKwlhZGQJcjgscjgscjMKLSsJYWRkCXI0LHI0LHIzCi0rCWxkcmIJcjMsW3IxLCMzXQkJCUAgOAotKwlsZHJiCXIxMixbcjEsIzJdCi0rCWxkcmIJcjIsW3IxLCMxXQotKwlsZHJiCXIwLFtyMV0sIzQKLSsJb3JyCXIzLHIzLHIxMixsc2wjOAotKwlvcnIJcjMscjMscjIsbHNsIzE2Ci0rCW9ycglyMyxyMyxyMCxsc2wjMjQKLSsJCi0rCWxkcglyMTIsW3IxNF0sIzQJCQlAICpLMjU2KysKLSsJc3RyCXIzLFtzcCwjOCo0XQotKwltb3YJcjAscjgscm9yIzYKLSsJZW9yCXIwLHIwLHI4LHJvciMxMQotKwllb3IJcjAscjAscjgscm9yIzI1CUAgU2lnbWExKGUpCi0rCWFkZAlyMyxyMyxyMAotKwllb3IJcjIscjkscjEwCi0rCWFuZAlyMixyMixyOAotKwllb3IJcjIscjIscjEwCQkJQCBDaChlLGYsZykKLSsJYWRkCXIzLHIzLHIyCi0rCWFkZAlyMyxyMyxyMTEKLSsJYWRkCXIzLHIzLHIxMgotKwltb3YJcjExLHI0LHJvciMyCi0rCWVvcglyMTEscjExLHI0LHJvciMxMwotKwllb3IJcjExLHIxMSxyNCxyb3IjMjIJCUAgU2lnbWEwKGEpCi0rCW9ycglyMCxyNCxyNQotKwlhbmQJcjAscjAscjYKLSsJYW5kCXIyLHI0LHI1Ci0rCW9ycglyMCxyMCxyMgkJCUAgTWFqKGEsYixjKQotKwlhZGQJcjExLHIxMSxyMAotKwlhZGQJcjcscjcscjMKLSsJYWRkCXIxMSxyMTEscjMKLSsJbGRyYglyMyxbcjEsIzNdCQkJQCA5Ci0rCWxkcmIJcjEyLFtyMSwjMl0KLSsJbGRyYglyMixbcjEsIzFdCi0rCWxkcmIJcjAsW3IxXSwjNAotKwlvcnIJcjMscjMscjEyLGxzbCM4Ci0rCW9ycglyMyxyMyxyMixsc2wjMTYKLSsJb3JyCXIzLHIzLHIwLGxzbCMyNAotKwkKLSsJbGRyCXIxMixbcjE0XSwjNAkJCUAgKksyNTYrKwotKwlzdHIJcjMsW3NwLCM5KjRdCi0rCW1vdglyMCxyNyxyb3IjNgotKwllb3IJcjAscjAscjcscm9yIzExCi0rCWVvcglyMCxyMCxyNyxyb3IjMjUJQCBTaWdtYTEoZSkKLSsJYWRkCXIzLHIzLHIwCi0rCWVvcglyMixyOCxyOQotKwlhbmQJcjIscjIscjcKLSsJZW9yCXIyLHIyLHI5CQkJQCBDaChlLGYsZykKLSsJYWRkCXIzLHIzLHIyCi0rCWFkZAlyMyxyMyxyMTAKLSsJYWRkCXIzLHIzLHIxMgotKwltb3YJcjEwLHIxMSxyb3IjMgotKwllb3IJcjEwLHIxMCxyMTEscm9yIzEzCi0rCWVvcglyMTAscjEwLHIxMSxyb3IjMjIJCUAgU2lnbWEwKGEpCi0rCW9ycglyMCxyMTEscjQKLSsJYW5kCXIwLHIwLHI1Ci0rCWFuZAlyMixyMTEscjQKLSsJb3JyCXIwLHIwLHIyCQkJQCBNYWooYSxiLGMpCi0rCWFkZAlyMTAscjEwLHIwCi0rCWFkZAlyNixyNixyMwotKwlhZGQJcjEwLHIxMCxyMwotKwlsZHJiCXIzLFtyMSwjM10JCQlAIDEwCi0rCWxkcmIJcjEyLFtyMSwjMl0KLSsJbGRyYglyMixbcjEsIzFdCi0rCWxkcmIJcjAsW3IxXSwjNAotKwlvcnIJcjMscjMscjEyLGxzbCM4Ci0rCW9ycglyMyxyMyxyMixsc2wjMTYKLSsJb3JyCXIzLHIzLHIwLGxzbCMyNAotKwkKLSsJbGRyCXIxMixbcjE0XSwjNAkJCUAgKksyNTYrKwotKwlzdHIJcjMsW3NwLCMxMCo0XQotKwltb3YJcjAscjYscm9yIzYKLSsJZW9yCXIwLHIwLHI2LHJvciMxMQotKwllb3IJcjAscjAscjYscm9yIzI1CUAgU2lnbWExKGUpCi0rCWFkZAlyMyxyMyxyMAotKwllb3IJcjIscjcscjgKLSsJYW5kCXIyLHIyLHI2Ci0rCWVvcglyMixyMixyOAkJCUAgQ2goZSxmLGcpCi0rCWFkZAlyMyxyMyxyMgotKwlhZGQJcjMscjMscjkKLSsJYWRkCXIzLHIzLHIxMgotKwltb3YJcjkscjEwLHJvciMyCi0rCWVvcglyOSxyOSxyMTAscm9yIzEzCi0rCWVvcglyOSxyOSxyMTAscm9yIzIyCQlAIFNpZ21hMChhKQotKwlvcnIJcjAscjEwLHIxMQotKwlhbmQJcjAscjAscjQKLSsJYW5kCXIyLHIxMCxyMTEKLSsJb3JyCXIwLHIwLHIyCQkJQCBNYWooYSxiLGMpCi0rCWFkZAlyOSxyOSxyMAotKwlhZGQJcjUscjUscjMKLSsJYWRkCXI5LHI5LHIzCi0rCWxkcmIJcjMsW3IxLCMzXQkJCUAgMTEKLSsJbGRyYglyMTIsW3IxLCMyXQotKwlsZHJiCXIyLFtyMSwjMV0KLSsJbGRyYglyMCxbcjFdLCM0Ci0rCW9ycglyMyxyMyxyMTIsbHNsIzgKLSsJb3JyCXIzLHIzLHIyLGxzbCMxNgotKwlvcnIJcjMscjMscjAsbHNsIzI0Ci0rCQotKwlsZHIJcjEyLFtyMTRdLCM0CQkJQCAqSzI1NisrCi0rCXN0cglyMyxbc3AsIzExKjRdCi0rCW1vdglyMCxyNSxyb3IjNgotKwllb3IJcjAscjAscjUscm9yIzExCi0rCWVvcglyMCxyMCxyNSxyb3IjMjUJQCBTaWdtYTEoZSkKLSsJYWRkCXIzLHIzLHIwCi0rCWVvcglyMixyNixyNwotKwlhbmQJcjIscjIscjUKLSsJZW9yCXIyLHIyLHI3CQkJQCBDaChlLGYsZykKLSsJYWRkCXIzLHIzLHIyCi0rCWFkZAlyMyxyMyxyOAotKwlhZGQJcjMscjMscjEyCi0rCW1vdglyOCxyOSxyb3IjMgotKwllb3IJcjgscjgscjkscm9yIzEzCi0rCWVvcglyOCxyOCxyOSxyb3IjMjIJCUAgU2lnbWEwKGEpCi0rCW9ycglyMCxyOSxyMTAKLSsJYW5kCXIwLHIwLHIxMQotKwlhbmQJcjIscjkscjEwCi0rCW9ycglyMCxyMCxyMgkJCUAgTWFqKGEsYixjKQotKwlhZGQJcjgscjgscjAKLSsJYWRkCXI0LHI0LHIzCi0rCWFkZAlyOCxyOCxyMwotKwlsZHJiCXIzLFtyMSwjM10JCQlAIDEyCi0rCWxkcmIJcjEyLFtyMSwjMl0KLSsJbGRyYglyMixbcjEsIzFdCi0rCWxkcmIJcjAsW3IxXSwjNAotKwlvcnIJcjMscjMscjEyLGxzbCM4Ci0rCW9ycglyMyxyMyxyMixsc2wjMTYKLSsJb3JyCXIzLHIzLHIwLGxzbCMyNAotKwkKLSsJbGRyCXIxMixbcjE0XSwjNAkJCUAgKksyNTYrKwotKwlzdHIJcjMsW3NwLCMxMio0XQotKwltb3YJcjAscjQscm9yIzYKLSsJZW9yCXIwLHIwLHI0LHJvciMxMQotKwllb3IJcjAscjAscjQscm9yIzI1CUAgU2lnbWExKGUpCi0rCWFkZAlyMyxyMyxyMAotKwllb3IJcjIscjUscjYKLSsJYW5kCXIyLHIyLHI0Ci0rCWVvcglyMixyMixyNgkJCUAgQ2goZSxmLGcpCi0rCWFkZAlyMyxyMyxyMgotKwlhZGQJcjMscjMscjcKLSsJYWRkCXIzLHIzLHIxMgotKwltb3YJcjcscjgscm9yIzIKLSsJZW9yCXI3LHI3LHI4LHJvciMxMwotKwllb3IJcjcscjcscjgscm9yIzIyCQlAIFNpZ21hMChhKQotKwlvcnIJcjAscjgscjkKLSsJYW5kCXIwLHIwLHIxMAotKwlhbmQJcjIscjgscjkKLSsJb3JyCXIwLHIwLHIyCQkJQCBNYWooYSxiLGMpCi0rCWFkZAlyNyxyNyxyMAotKwlhZGQJcjExLHIxMSxyMwotKwlhZGQJcjcscjcscjMKLSsJbGRyYglyMyxbcjEsIzNdCQkJQCAxMwotKwlsZHJiCXIxMixbcjEsIzJdCi0rCWxkcmIJcjIsW3IxLCMxXQotKwlsZHJiCXIwLFtyMV0sIzQKLSsJb3JyCXIzLHIzLHIxMixsc2wjOAotKwlvcnIJcjMscjMscjIsbHNsIzE2Ci0rCW9ycglyMyxyMyxyMCxsc2wjMjQKLSsJCi0rCWxkcglyMTIsW3IxNF0sIzQJCQlAICpLMjU2KysKLSsJc3RyCXIzLFtzcCwjMTMqNF0KLSsJbW92CXIwLHIxMSxyb3IjNgotKwllb3IJcjAscjAscjExLHJvciMxMQotKwllb3IJcjAscjAscjExLHJvciMyNQlAIFNpZ21hMShlKQotKwlhZGQJcjMscjMscjAKLSsJZW9yCXIyLHI0LHI1Ci0rCWFuZAlyMixyMixyMTEKLSsJZW9yCXIyLHIyLHI1CQkJQCBDaChlLGYsZykKLSsJYWRkCXIzLHIzLHIyCi0rCWFkZAlyMyxyMyxyNgotKwlhZGQJcjMscjMscjEyCi0rCW1vdglyNixyNyxyb3IjMgotKwllb3IJcjYscjYscjcscm9yIzEzCi0rCWVvcglyNixyNixyNyxyb3IjMjIJCUAgU2lnbWEwKGEpCi0rCW9ycglyMCxyNyxyOAotKwlhbmQJcjAscjAscjkKLSsJYW5kCXIyLHI3LHI4Ci0rCW9ycglyMCxyMCxyMgkJCUAgTWFqKGEsYixjKQotKwlhZGQJcjYscjYscjAKLSsJYWRkCXIxMCxyMTAscjMKLSsJYWRkCXI2LHI2LHIzCi0rCWxkcmIJcjMsW3IxLCMzXQkJCUAgMTQKLSsJbGRyYglyMTIsW3IxLCMyXQotKwlsZHJiCXIyLFtyMSwjMV0KLSsJbGRyYglyMCxbcjFdLCM0Ci0rCW9ycglyMyxyMyxyMTIsbHNsIzgKLSsJb3JyCXIzLHIzLHIyLGxzbCMxNgotKwlvcnIJcjMscjMscjAsbHNsIzI0Ci0rCQotKwlsZHIJcjEyLFtyMTRdLCM0CQkJQCAqSzI1NisrCi0rCXN0cglyMyxbc3AsIzE0KjRdCi0rCW1vdglyMCxyMTAscm9yIzYKLSsJZW9yCXIwLHIwLHIxMCxyb3IjMTEKLSsJZW9yCXIwLHIwLHIxMCxyb3IjMjUJQCBTaWdtYTEoZSkKLSsJYWRkCXIzLHIzLHIwCi0rCWVvcglyMixyMTEscjQKLSsJYW5kCXIyLHIyLHIxMAotKwllb3IJcjIscjIscjQJCQlAIENoKGUsZixnKQotKwlhZGQJcjMscjMscjIKLSsJYWRkCXIzLHIzLHI1Ci0rCWFkZAlyMyxyMyxyMTIKLSsJbW92CXI1LHI2LHJvciMyCi0rCWVvcglyNSxyNSxyNixyb3IjMTMKLSsJZW9yCXI1LHI1LHI2LHJvciMyMgkJQCBTaWdtYTAoYSkKLSsJb3JyCXIwLHI2LHI3Ci0rCWFuZAlyMCxyMCxyOAotKwlhbmQJcjIscjYscjcKLSsJb3JyCXIwLHIwLHIyCQkJQCBNYWooYSxiLGMpCi0rCWFkZAlyNSxyNSxyMAotKwlhZGQJcjkscjkscjMKLSsJYWRkCXI1LHI1LHIzCi0rCWxkcmIJcjMsW3IxLCMzXQkJCUAgMTUKLSsJbGRyYglyMTIsW3IxLCMyXQotKwlsZHJiCXIyLFtyMSwjMV0KLSsJbGRyYglyMCxbcjFdLCM0Ci0rCW9ycglyMyxyMyxyMTIsbHNsIzgKLSsJb3JyCXIzLHIzLHIyLGxzbCMxNgotKwlvcnIJcjMscjMscjAsbHNsIzI0Ci0rCXN0cglyMSxbc3AsIzE3KjRdCi0rCWxkcglyMTIsW3IxNF0sIzQJCQlAICpLMjU2KysKLSsJc3RyCXIzLFtzcCwjMTUqNF0KLSsJbW92CXIwLHI5LHJvciM2Ci0rCWVvcglyMCxyMCxyOSxyb3IjMTEKLSsJZW9yCXIwLHIwLHI5LHJvciMyNQlAIFNpZ21hMShlKQotKwlhZGQJcjMscjMscjAKLSsJZW9yCXIyLHIxMCxyMTEKLSsJYW5kCXIyLHIyLHI5Ci0rCWVvcglyMixyMixyMTEJCQlAIENoKGUsZixnKQotKwlhZGQJcjMscjMscjIKLSsJYWRkCXIzLHIzLHI0Ci0rCWFkZAlyMyxyMyxyMTIKLSsJbW92CXI0LHI1LHJvciMyCi0rCWVvcglyNCxyNCxyNSxyb3IjMTMKLSsJZW9yCXI0LHI0LHI1LHJvciMyMgkJQCBTaWdtYTAoYSkKLSsJb3JyCXIwLHI1LHI2Ci0rCWFuZAlyMCxyMCxyNwotKwlhbmQJcjIscjUscjYKLSsJb3JyCXIwLHIwLHIyCQkJQCBNYWooYSxiLGMpCi0rCWFkZAlyNCxyNCxyMAotKwlhZGQJcjgscjgscjMKLSsJYWRkCXI0LHI0LHIzCi0rLkxyb3VuZHNfMTZfeHg6Ci0rCWxkcglyMixbc3AsIzEqNF0JQCAxNgotKwlsZHIJcjEyLFtzcCwjMTQqNF0KLSsJbGRyCXIzLFtzcCwjMCo0XQotKwlsZHIJcjEsW3NwLCM5KjRdCi0rCW1vdglyMCxyMixyb3IjNwotKwllb3IJcjAscjAscjIscm9yIzE4Ci0rCWVvcglyMCxyMCxyMixsc3IjMwlAIHNpZ21hMChYW2krMV0pCi0rCW1vdglyMixyMTIscm9yIzE3Ci0rCWVvcglyMixyMixyMTIscm9yIzE5Ci0rCWVvcglyMixyMixyMTIsbHNyIzEwCUAgc2lnbWExKFhbaSsxNF0pCi0rCWFkZAlyMyxyMyxyMAotKwlhZGQJcjMscjMscjIKLSsJYWRkCXIzLHIzLHIxCi0rCWxkcglyMTIsW3IxNF0sIzQJCQlAICpLMjU2KysKLSsJc3RyCXIzLFtzcCwjMCo0XQotKwltb3YJcjAscjgscm9yIzYKLSsJZW9yCXIwLHIwLHI4LHJvciMxMQotKwllb3IJcjAscjAscjgscm9yIzI1CUAgU2lnbWExKGUpCi0rCWFkZAlyMyxyMyxyMAotKwllb3IJcjIscjkscjEwCi0rCWFuZAlyMixyMixyOAotKwllb3IJcjIscjIscjEwCQkJQCBDaChlLGYsZykKLSsJYWRkCXIzLHIzLHIyCi0rCWFkZAlyMyxyMyxyMTEKLSsJYWRkCXIzLHIzLHIxMgotKwltb3YJcjExLHI0LHJvciMyCi0rCWVvcglyMTEscjExLHI0LHJvciMxMwotKwllb3IJcjExLHIxMSxyNCxyb3IjMjIJCUAgU2lnbWEwKGEpCi0rCW9ycglyMCxyNCxyNQotKwlhbmQJcjAscjAscjYKLSsJYW5kCXIyLHI0LHI1Ci0rCW9ycglyMCxyMCxyMgkJCUAgTWFqKGEsYixjKQotKwlhZGQJcjExLHIxMSxyMAotKwlhZGQJcjcscjcscjMKLSsJYWRkCXIxMSxyMTEscjMKLSsJbGRyCXIyLFtzcCwjMio0XQlAIDE3Ci0rCWxkcglyMTIsW3NwLCMxNSo0XQotKwlsZHIJcjMsW3NwLCMxKjRdCi0rCWxkcglyMSxbc3AsIzEwKjRdCi0rCW1vdglyMCxyMixyb3IjNwotKwllb3IJcjAscjAscjIscm9yIzE4Ci0rCWVvcglyMCxyMCxyMixsc3IjMwlAIHNpZ21hMChYW2krMV0pCi0rCW1vdglyMixyMTIscm9yIzE3Ci0rCWVvcglyMixyMixyMTIscm9yIzE5Ci0rCWVvcglyMixyMixyMTIsbHNyIzEwCUAgc2lnbWExKFhbaSsxNF0pCi0rCWFkZAlyMyxyMyxyMAotKwlhZGQJcjMscjMscjIKLSsJYWRkCXIzLHIzLHIxCi0rCWxkcglyMTIsW3IxNF0sIzQJCQlAICpLMjU2KysKLSsJc3RyCXIzLFtzcCwjMSo0XQotKwltb3YJcjAscjcscm9yIzYKLSsJZW9yCXIwLHIwLHI3LHJvciMxMQotKwllb3IJcjAscjAscjcscm9yIzI1CUAgU2lnbWExKGUpCi0rCWFkZAlyMyxyMyxyMAotKwllb3IJcjIscjgscjkKLSsJYW5kCXIyLHIyLHI3Ci0rCWVvcglyMixyMixyOQkJCUAgQ2goZSxmLGcpCi0rCWFkZAlyMyxyMyxyMgotKwlhZGQJcjMscjMscjEwCi0rCWFkZAlyMyxyMyxyMTIKLSsJbW92CXIxMCxyMTEscm9yIzIKLSsJZW9yCXIxMCxyMTAscjExLHJvciMxMwotKwllb3IJcjEwLHIxMCxyMTEscm9yIzIyCQlAIFNpZ21hMChhKQotKwlvcnIJcjAscjExLHI0Ci0rCWFuZAlyMCxyMCxyNQotKwlhbmQJcjIscjExLHI0Ci0rCW9ycglyMCxyMCxyMgkJCUAgTWFqKGEsYixjKQotKwlhZGQJcjEwLHIxMCxyMAotKwlhZGQJcjYscjYscjMKLSsJYWRkCXIxMCxyMTAscjMKLSsJbGRyCXIyLFtzcCwjMyo0XQlAIDE4Ci0rCWxkcglyMTIsW3NwLCMwKjRdCi0rCWxkcglyMyxbc3AsIzIqNF0KLSsJbGRyCXIxLFtzcCwjMTEqNF0KLSsJbW92CXIwLHIyLHJvciM3Ci0rCWVvcglyMCxyMCxyMixyb3IjMTgKLSsJZW9yCXIwLHIwLHIyLGxzciMzCUAgc2lnbWEwKFhbaSsxXSkKLSsJbW92CXIyLHIxMixyb3IjMTcKLSsJZW9yCXIyLHIyLHIxMixyb3IjMTkKLSsJZW9yCXIyLHIyLHIxMixsc3IjMTAJQCBzaWdtYTEoWFtpKzE0XSkKLSsJYWRkCXIzLHIzLHIwCi0rCWFkZAlyMyxyMyxyMgotKwlhZGQJcjMscjMscjEKLSsJbGRyCXIxMixbcjE0XSwjNAkJCUAgKksyNTYrKwotKwlzdHIJcjMsW3NwLCMyKjRdCi0rCW1vdglyMCxyNixyb3IjNgotKwllb3IJcjAscjAscjYscm9yIzExCi0rCWVvcglyMCxyMCxyNixyb3IjMjUJQCBTaWdtYTEoZSkKLSsJYWRkCXIzLHIzLHIwCi0rCWVvcglyMixyNyxyOAotKwlhbmQJcjIscjIscjYKLSsJZW9yCXIyLHIyLHI4CQkJQCBDaChlLGYsZykKLSsJYWRkCXIzLHIzLHIyCi0rCWFkZAlyMyxyMyxyOQotKwlhZGQJcjMscjMscjEyCi0rCW1vdglyOSxyMTAscm9yIzIKLSsJZW9yCXI5LHI5LHIxMCxyb3IjMTMKLSsJZW9yCXI5LHI5LHIxMCxyb3IjMjIJCUAgU2lnbWEwKGEpCi0rCW9ycglyMCxyMTAscjExCi0rCWFuZAlyMCxyMCxyNAotKwlhbmQJcjIscjEwLHIxMQotKwlvcnIJcjAscjAscjIJCQlAIE1haihhLGIsYykKLSsJYWRkCXI5LHI5LHIwCi0rCWFkZAlyNSxyNSxyMwotKwlhZGQJcjkscjkscjMKLSsJbGRyCXIyLFtzcCwjNCo0XQlAIDE5Ci0rCWxkcglyMTIsW3NwLCMxKjRdCi0rCWxkcglyMyxbc3AsIzMqNF0KLSsJbGRyCXIxLFtzcCwjMTIqNF0KLSsJbW92CXIwLHIyLHJvciM3Ci0rCWVvcglyMCxyMCxyMixyb3IjMTgKLSsJZW9yCXIwLHIwLHIyLGxzciMzCUAgc2lnbWEwKFhbaSsxXSkKLSsJbW92CXIyLHIxMixyb3IjMTcKLSsJZW9yCXIyLHIyLHIxMixyb3IjMTkKLSsJZW9yCXIyLHIyLHIxMixsc3IjMTAJQCBzaWdtYTEoWFtpKzE0XSkKLSsJYWRkCXIzLHIzLHIwCi0rCWFkZAlyMyxyMyxyMgotKwlhZGQJcjMscjMscjEKLSsJbGRyCXIxMixbcjE0XSwjNAkJCUAgKksyNTYrKwotKwlzdHIJcjMsW3NwLCMzKjRdCi0rCW1vdglyMCxyNSxyb3IjNgotKwllb3IJcjAscjAscjUscm9yIzExCi0rCWVvcglyMCxyMCxyNSxyb3IjMjUJQCBTaWdtYTEoZSkKLSsJYWRkCXIzLHIzLHIwCi0rCWVvcglyMixyNixyNwotKwlhbmQJcjIscjIscjUKLSsJZW9yCXIyLHIyLHI3CQkJQCBDaChlLGYsZykKLSsJYWRkCXIzLHIzLHIyCi0rCWFkZAlyMyxyMyxyOAotKwlhZGQJcjMscjMscjEyCi0rCW1vdglyOCxyOSxyb3IjMgotKwllb3IJcjgscjgscjkscm9yIzEzCi0rCWVvcglyOCxyOCxyOSxyb3IjMjIJCUAgU2lnbWEwKGEpCi0rCW9ycglyMCxyOSxyMTAKLSsJYW5kCXIwLHIwLHIxMQotKwlhbmQJcjIscjkscjEwCi0rCW9ycglyMCxyMCxyMgkJCUAgTWFqKGEsYixjKQotKwlhZGQJcjgscjgscjAKLSsJYWRkCXI0LHI0LHIzCi0rCWFkZAlyOCxyOCxyMwotKwlsZHIJcjIsW3NwLCM1KjRdCUAgMjAKLSsJbGRyCXIxMixbc3AsIzIqNF0KLSsJbGRyCXIzLFtzcCwjNCo0XQotKwlsZHIJcjEsW3NwLCMxMyo0XQotKwltb3YJcjAscjIscm9yIzcKLSsJZW9yCXIwLHIwLHIyLHJvciMxOAotKwllb3IJcjAscjAscjIsbHNyIzMJQCBzaWdtYTAoWFtpKzFdKQotKwltb3YJcjIscjEyLHJvciMxNwotKwllb3IJcjIscjIscjEyLHJvciMxOQotKwllb3IJcjIscjIscjEyLGxzciMxMAlAIHNpZ21hMShYW2krMTRdKQotKwlhZGQJcjMscjMscjAKLSsJYWRkCXIzLHIzLHIyCi0rCWFkZAlyMyxyMyxyMQotKwlsZHIJcjEyLFtyMTRdLCM0CQkJQCAqSzI1NisrCi0rCXN0cglyMyxbc3AsIzQqNF0KLSsJbW92CXIwLHI0LHJvciM2Ci0rCWVvcglyMCxyMCxyNCxyb3IjMTEKLSsJZW9yCXIwLHIwLHI0LHJvciMyNQlAIFNpZ21hMShlKQotKwlhZGQJcjMscjMscjAKLSsJZW9yCXIyLHI1LHI2Ci0rCWFuZAlyMixyMixyNAotKwllb3IJcjIscjIscjYJCQlAIENoKGUsZixnKQotKwlhZGQJcjMscjMscjIKLSsJYWRkCXIzLHIzLHI3Ci0rCWFkZAlyMyxyMyxyMTIKLSsJbW92CXI3LHI4LHJvciMyCi0rCWVvcglyNyxyNyxyOCxyb3IjMTMKLSsJZW9yCXI3LHI3LHI4LHJvciMyMgkJQCBTaWdtYTAoYSkKLSsJb3JyCXIwLHI4LHI5Ci0rCWFuZAlyMCxyMCxyMTAKLSsJYW5kCXIyLHI4LHI5Ci0rCW9ycglyMCxyMCxyMgkJCUAgTWFqKGEsYixjKQotKwlhZGQJcjcscjcscjAKLSsJYWRkCXIxMSxyMTEscjMKLSsJYWRkCXI3LHI3LHIzCi0rCWxkcglyMixbc3AsIzYqNF0JQCAyMQotKwlsZHIJcjEyLFtzcCwjMyo0XQotKwlsZHIJcjMsW3NwLCM1KjRdCi0rCWxkcglyMSxbc3AsIzE0KjRdCi0rCW1vdglyMCxyMixyb3IjNwotKwllb3IJcjAscjAscjIscm9yIzE4Ci0rCWVvcglyMCxyMCxyMixsc3IjMwlAIHNpZ21hMChYW2krMV0pCi0rCW1vdglyMixyMTIscm9yIzE3Ci0rCWVvcglyMixyMixyMTIscm9yIzE5Ci0rCWVvcglyMixyMixyMTIsbHNyIzEwCUAgc2lnbWExKFhbaSsxNF0pCi0rCWFkZAlyMyxyMyxyMAotKwlhZGQJcjMscjMscjIKLSsJYWRkCXIzLHIzLHIxCi0rCWxkcglyMTIsW3IxNF0sIzQJCQlAICpLMjU2KysKLSsJc3RyCXIzLFtzcCwjNSo0XQotKwltb3YJcjAscjExLHJvciM2Ci0rCWVvcglyMCxyMCxyMTEscm9yIzExCi0rCWVvcglyMCxyMCxyMTEscm9yIzI1CUAgU2lnbWExKGUpCi0rCWFkZAlyMyxyMyxyMAotKwllb3IJcjIscjQscjUKLSsJYW5kCXIyLHIyLHIxMQotKwllb3IJcjIscjIscjUJCQlAIENoKGUsZixnKQotKwlhZGQJcjMscjMscjIKLSsJYWRkCXIzLHIzLHI2Ci0rCWFkZAlyMyxyMyxyMTIKLSsJbW92CXI2LHI3LHJvciMyCi0rCWVvcglyNixyNixyNyxyb3IjMTMKLSsJZW9yCXI2LHI2LHI3LHJvciMyMgkJQCBTaWdtYTAoYSkKLSsJb3JyCXIwLHI3LHI4Ci0rCWFuZAlyMCxyMCxyOQotKwlhbmQJcjIscjcscjgKLSsJb3JyCXIwLHIwLHIyCQkJQCBNYWooYSxiLGMpCi0rCWFkZAlyNixyNixyMAotKwlhZGQJcjEwLHIxMCxyMwotKwlhZGQJcjYscjYscjMKLSsJbGRyCXIyLFtzcCwjNyo0XQlAIDIyCi0rCWxkcglyMTIsW3NwLCM0KjRdCi0rCWxkcglyMyxbc3AsIzYqNF0KLSsJbGRyCXIxLFtzcCwjMTUqNF0KLSsJbW92CXIwLHIyLHJvciM3Ci0rCWVvcglyMCxyMCxyMixyb3IjMTgKLSsJZW9yCXIwLHIwLHIyLGxzciMzCUAgc2lnbWEwKFhbaSsxXSkKLSsJbW92CXIyLHIxMixyb3IjMTcKLSsJZW9yCXIyLHIyLHIxMixyb3IjMTkKLSsJZW9yCXIyLHIyLHIxMixsc3IjMTAJQCBzaWdtYTEoWFtpKzE0XSkKLSsJYWRkCXIzLHIzLHIwCi0rCWFkZAlyMyxyMyxyMgotKwlhZGQJcjMscjMscjEKLSsJbGRyCXIxMixbcjE0XSwjNAkJCUAgKksyNTYrKwotKwlzdHIJcjMsW3NwLCM2KjRdCi0rCW1vdglyMCxyMTAscm9yIzYKLSsJZW9yCXIwLHIwLHIxMCxyb3IjMTEKLSsJZW9yCXIwLHIwLHIxMCxyb3IjMjUJQCBTaWdtYTEoZSkKLSsJYWRkCXIzLHIzLHIwCi0rCWVvcglyMixyMTEscjQKLSsJYW5kCXIyLHIyLHIxMAotKwllb3IJcjIscjIscjQJCQlAIENoKGUsZixnKQotKwlhZGQJcjMscjMscjIKLSsJYWRkCXIzLHIzLHI1Ci0rCWFkZAlyMyxyMyxyMTIKLSsJbW92CXI1LHI2LHJvciMyCi0rCWVvcglyNSxyNSxyNixyb3IjMTMKLSsJZW9yCXI1LHI1LHI2LHJvciMyMgkJQCBTaWdtYTAoYSkKLSsJb3JyCXIwLHI2LHI3Ci0rCWFuZAlyMCxyMCxyOAotKwlhbmQJcjIscjYscjcKLSsJb3JyCXIwLHIwLHIyCQkJQCBNYWooYSxiLGMpCi0rCWFkZAlyNSxyNSxyMAotKwlhZGQJcjkscjkscjMKLSsJYWRkCXI1LHI1LHIzCi0rCWxkcglyMixbc3AsIzgqNF0JQCAyMwotKwlsZHIJcjEyLFtzcCwjNSo0XQotKwlsZHIJcjMsW3NwLCM3KjRdCi0rCWxkcglyMSxbc3AsIzAqNF0KLSsJbW92CXIwLHIyLHJvciM3Ci0rCWVvcglyMCxyMCxyMixyb3IjMTgKLSsJZW9yCXIwLHIwLHIyLGxzciMzCUAgc2lnbWEwKFhbaSsxXSkKLSsJbW92CXIyLHIxMixyb3IjMTcKLSsJZW9yCXIyLHIyLHIxMixyb3IjMTkKLSsJZW9yCXIyLHIyLHIxMixsc3IjMTAJQCBzaWdtYTEoWFtpKzE0XSkKLSsJYWRkCXIzLHIzLHIwCi0rCWFkZAlyMyxyMyxyMgotKwlhZGQJcjMscjMscjEKLSsJbGRyCXIxMixbcjE0XSwjNAkJCUAgKksyNTYrKwotKwlzdHIJcjMsW3NwLCM3KjRdCi0rCW1vdglyMCxyOSxyb3IjNgotKwllb3IJcjAscjAscjkscm9yIzExCi0rCWVvcglyMCxyMCxyOSxyb3IjMjUJQCBTaWdtYTEoZSkKLSsJYWRkCXIzLHIzLHIwCi0rCWVvcglyMixyMTAscjExCi0rCWFuZAlyMixyMixyOQotKwllb3IJcjIscjIscjExCQkJQCBDaChlLGYsZykKLSsJYWRkCXIzLHIzLHIyCi0rCWFkZAlyMyxyMyxyNAotKwlhZGQJcjMscjMscjEyCi0rCW1vdglyNCxyNSxyb3IjMgotKwllb3IJcjQscjQscjUscm9yIzEzCi0rCWVvcglyNCxyNCxyNSxyb3IjMjIJCUAgU2lnbWEwKGEpCi0rCW9ycglyMCxyNSxyNgotKwlhbmQJcjAscjAscjcKLSsJYW5kCXIyLHI1LHI2Ci0rCW9ycglyMCxyMCxyMgkJCUAgTWFqKGEsYixjKQotKwlhZGQJcjQscjQscjAKLSsJYWRkCXI4LHI4LHIzCi0rCWFkZAlyNCxyNCxyMwotKwlsZHIJcjIsW3NwLCM5KjRdCUAgMjQKLSsJbGRyCXIxMixbc3AsIzYqNF0KLSsJbGRyCXIzLFtzcCwjOCo0XQotKwlsZHIJcjEsW3NwLCMxKjRdCi0rCW1vdglyMCxyMixyb3IjNwotKwllb3IJcjAscjAscjIscm9yIzE4Ci0rCWVvcglyMCxyMCxyMixsc3IjMwlAIHNpZ21hMChYW2krMV0pCi0rCW1vdglyMixyMTIscm9yIzE3Ci0rCWVvcglyMixyMixyMTIscm9yIzE5Ci0rCWVvcglyMixyMixyMTIsbHNyIzEwCUAgc2lnbWExKFhbaSsxNF0pCi0rCWFkZAlyMyxyMyxyMAotKwlhZGQJcjMscjMscjIKLSsJYWRkCXIzLHIzLHIxCi0rCWxkcglyMTIsW3IxNF0sIzQJCQlAICpLMjU2KysKLSsJc3RyCXIzLFtzcCwjOCo0XQotKwltb3YJcjAscjgscm9yIzYKLSsJZW9yCXIwLHIwLHI4LHJvciMxMQotKwllb3IJcjAscjAscjgscm9yIzI1CUAgU2lnbWExKGUpCi0rCWFkZAlyMyxyMyxyMAotKwllb3IJcjIscjkscjEwCi0rCWFuZAlyMixyMixyOAotKwllb3IJcjIscjIscjEwCQkJQCBDaChlLGYsZykKLSsJYWRkCXIzLHIzLHIyCi0rCWFkZAlyMyxyMyxyMTEKLSsJYWRkCXIzLHIzLHIxMgotKwltb3YJcjExLHI0LHJvciMyCi0rCWVvcglyMTEscjExLHI0LHJvciMxMwotKwllb3IJcjExLHIxMSxyNCxyb3IjMjIJCUAgU2lnbWEwKGEpCi0rCW9ycglyMCxyNCxyNQotKwlhbmQJcjAscjAscjYKLSsJYW5kCXIyLHI0LHI1Ci0rCW9ycglyMCxyMCxyMgkJCUAgTWFqKGEsYixjKQotKwlhZGQJcjExLHIxMSxyMAotKwlhZGQJcjcscjcscjMKLSsJYWRkCXIxMSxyMTEscjMKLSsJbGRyCXIyLFtzcCwjMTAqNF0JQCAyNQotKwlsZHIJcjEyLFtzcCwjNyo0XQotKwlsZHIJcjMsW3NwLCM5KjRdCi0rCWxkcglyMSxbc3AsIzIqNF0KLSsJbW92CXIwLHIyLHJvciM3Ci0rCWVvcglyMCxyMCxyMixyb3IjMTgKLSsJZW9yCXIwLHIwLHIyLGxzciMzCUAgc2lnbWEwKFhbaSsxXSkKLSsJbW92CXIyLHIxMixyb3IjMTcKLSsJZW9yCXIyLHIyLHIxMixyb3IjMTkKLSsJZW9yCXIyLHIyLHIxMixsc3IjMTAJQCBzaWdtYTEoWFtpKzE0XSkKLSsJYWRkCXIzLHIzLHIwCi0rCWFkZAlyMyxyMyxyMgotKwlhZGQJcjMscjMscjEKLSsJbGRyCXIxMixbcjE0XSwjNAkJCUAgKksyNTYrKwotKwlzdHIJcjMsW3NwLCM5KjRdCi0rCW1vdglyMCxyNyxyb3IjNgotKwllb3IJcjAscjAscjcscm9yIzExCi0rCWVvcglyMCxyMCxyNyxyb3IjMjUJQCBTaWdtYTEoZSkKLSsJYWRkCXIzLHIzLHIwCi0rCWVvcglyMixyOCxyOQotKwlhbmQJcjIscjIscjcKLSsJZW9yCXIyLHIyLHI5CQkJQCBDaChlLGYsZykKLSsJYWRkCXIzLHIzLHIyCi0rCWFkZAlyMyxyMyxyMTAKLSsJYWRkCXIzLHIzLHIxMgotKwltb3YJcjEwLHIxMSxyb3IjMgotKwllb3IJcjEwLHIxMCxyMTEscm9yIzEzCi0rCWVvcglyMTAscjEwLHIxMSxyb3IjMjIJCUAgU2lnbWEwKGEpCi0rCW9ycglyMCxyMTEscjQKLSsJYW5kCXIwLHIwLHI1Ci0rCWFuZAlyMixyMTEscjQKLSsJb3JyCXIwLHIwLHIyCQkJQCBNYWooYSxiLGMpCi0rCWFkZAlyMTAscjEwLHIwCi0rCWFkZAlyNixyNixyMwotKwlhZGQJcjEwLHIxMCxyMwotKwlsZHIJcjIsW3NwLCMxMSo0XQlAIDI2Ci0rCWxkcglyMTIsW3NwLCM4KjRdCi0rCWxkcglyMyxbc3AsIzEwKjRdCi0rCWxkcglyMSxbc3AsIzMqNF0KLSsJbW92CXIwLHIyLHJvciM3Ci0rCWVvcglyMCxyMCxyMixyb3IjMTgKLSsJZW9yCXIwLHIwLHIyLGxzciMzCUAgc2lnbWEwKFhbaSsxXSkKLSsJbW92CXIyLHIxMixyb3IjMTcKLSsJZW9yCXIyLHIyLHIxMixyb3IjMTkKLSsJZW9yCXIyLHIyLHIxMixsc3IjMTAJQCBzaWdtYTEoWFtpKzE0XSkKLSsJYWRkCXIzLHIzLHIwCi0rCWFkZAlyMyxyMyxyMgotKwlhZGQJcjMscjMscjEKLSsJbGRyCXIxMixbcjE0XSwjNAkJCUAgKksyNTYrKwotKwlzdHIJcjMsW3NwLCMxMCo0XQotKwltb3YJcjAscjYscm9yIzYKLSsJZW9yCXIwLHIwLHI2LHJvciMxMQotKwllb3IJcjAscjAscjYscm9yIzI1CUAgU2lnbWExKGUpCi0rCWFkZAlyMyxyMyxyMAotKwllb3IJcjIscjcscjgKLSsJYW5kCXIyLHIyLHI2Ci0rCWVvcglyMixyMixyOAkJCUAgQ2goZSxmLGcpCi0rCWFkZAlyMyxyMyxyMgotKwlhZGQJcjMscjMscjkKLSsJYWRkCXIzLHIzLHIxMgotKwltb3YJcjkscjEwLHJvciMyCi0rCWVvcglyOSxyOSxyMTAscm9yIzEzCi0rCWVvcglyOSxyOSxyMTAscm9yIzIyCQlAIFNpZ21hMChhKQotKwlvcnIJcjAscjEwLHIxMQotKwlhbmQJcjAscjAscjQKLSsJYW5kCXIyLHIxMCxyMTEKLSsJb3JyCXIwLHIwLHIyCQkJQCBNYWooYSxiLGMpCi0rCWFkZAlyOSxyOSxyMAotKwlhZGQJcjUscjUscjMKLSsJYWRkCXI5LHI5LHIzCi0rCWxkcglyMixbc3AsIzEyKjRdCUAgMjcKLSsJbGRyCXIxMixbc3AsIzkqNF0KLSsJbGRyCXIzLFtzcCwjMTEqNF0KLSsJbGRyCXIxLFtzcCwjNCo0XQotKwltb3YJcjAscjIscm9yIzcKLSsJZW9yCXIwLHIwLHIyLHJvciMxOAotKwllb3IJcjAscjAscjIsbHNyIzMJQCBzaWdtYTAoWFtpKzFdKQotKwltb3YJcjIscjEyLHJvciMxNwotKwllb3IJcjIscjIscjEyLHJvciMxOQotKwllb3IJcjIscjIscjEyLGxzciMxMAlAIHNpZ21hMShYW2krMTRdKQotKwlhZGQJcjMscjMscjAKLSsJYWRkCXIzLHIzLHIyCi0rCWFkZAlyMyxyMyxyMQotKwlsZHIJcjEyLFtyMTRdLCM0CQkJQCAqSzI1NisrCi0rCXN0cglyMyxbc3AsIzExKjRdCi0rCW1vdglyMCxyNSxyb3IjNgotKwllb3IJcjAscjAscjUscm9yIzExCi0rCWVvcglyMCxyMCxyNSxyb3IjMjUJQCBTaWdtYTEoZSkKLSsJYWRkCXIzLHIzLHIwCi0rCWVvcglyMixyNixyNwotKwlhbmQJcjIscjIscjUKLSsJZW9yCXIyLHIyLHI3CQkJQCBDaChlLGYsZykKLSsJYWRkCXIzLHIzLHIyCi0rCWFkZAlyMyxyMyxyOAotKwlhZGQJcjMscjMscjEyCi0rCW1vdglyOCxyOSxyb3IjMgotKwllb3IJcjgscjgscjkscm9yIzEzCi0rCWVvcglyOCxyOCxyOSxyb3IjMjIJCUAgU2lnbWEwKGEpCi0rCW9ycglyMCxyOSxyMTAKLSsJYW5kCXIwLHIwLHIxMQotKwlhbmQJcjIscjkscjEwCi0rCW9ycglyMCxyMCxyMgkJCUAgTWFqKGEsYixjKQotKwlhZGQJcjgscjgscjAKLSsJYWRkCXI0LHI0LHIzCi0rCWFkZAlyOCxyOCxyMwotKwlsZHIJcjIsW3NwLCMxMyo0XQlAIDI4Ci0rCWxkcglyMTIsW3NwLCMxMCo0XQotKwlsZHIJcjMsW3NwLCMxMio0XQotKwlsZHIJcjEsW3NwLCM1KjRdCi0rCW1vdglyMCxyMixyb3IjNwotKwllb3IJcjAscjAscjIscm9yIzE4Ci0rCWVvcglyMCxyMCxyMixsc3IjMwlAIHNpZ21hMChYW2krMV0pCi0rCW1vdglyMixyMTIscm9yIzE3Ci0rCWVvcglyMixyMixyMTIscm9yIzE5Ci0rCWVvcglyMixyMixyMTIsbHNyIzEwCUAgc2lnbWExKFhbaSsxNF0pCi0rCWFkZAlyMyxyMyxyMAotKwlhZGQJcjMscjMscjIKLSsJYWRkCXIzLHIzLHIxCi0rCWxkcglyMTIsW3IxNF0sIzQJCQlAICpLMjU2KysKLSsJc3RyCXIzLFtzcCwjMTIqNF0KLSsJbW92CXIwLHI0LHJvciM2Ci0rCWVvcglyMCxyMCxyNCxyb3IjMTEKLSsJZW9yCXIwLHIwLHI0LHJvciMyNQlAIFNpZ21hMShlKQotKwlhZGQJcjMscjMscjAKLSsJZW9yCXIyLHI1LHI2Ci0rCWFuZAlyMixyMixyNAotKwllb3IJcjIscjIscjYJCQlAIENoKGUsZixnKQotKwlhZGQJcjMscjMscjIKLSsJYWRkCXIzLHIzLHI3Ci0rCWFkZAlyMyxyMyxyMTIKLSsJbW92CXI3LHI4LHJvciMyCi0rCWVvcglyNyxyNyxyOCxyb3IjMTMKLSsJZW9yCXI3LHI3LHI4LHJvciMyMgkJQCBTaWdtYTAoYSkKLSsJb3JyCXIwLHI4LHI5Ci0rCWFuZAlyMCxyMCxyMTAKLSsJYW5kCXIyLHI4LHI5Ci0rCW9ycglyMCxyMCxyMgkJCUAgTWFqKGEsYixjKQotKwlhZGQJcjcscjcscjAKLSsJYWRkCXIxMSxyMTEscjMKLSsJYWRkCXI3LHI3LHIzCi0rCWxkcglyMixbc3AsIzE0KjRdCUAgMjkKLSsJbGRyCXIxMixbc3AsIzExKjRdCi0rCWxkcglyMyxbc3AsIzEzKjRdCi0rCWxkcglyMSxbc3AsIzYqNF0KLSsJbW92CXIwLHIyLHJvciM3Ci0rCWVvcglyMCxyMCxyMixyb3IjMTgKLSsJZW9yCXIwLHIwLHIyLGxzciMzCUAgc2lnbWEwKFhbaSsxXSkKLSsJbW92CXIyLHIxMixyb3IjMTcKLSsJZW9yCXIyLHIyLHIxMixyb3IjMTkKLSsJZW9yCXIyLHIyLHIxMixsc3IjMTAJQCBzaWdtYTEoWFtpKzE0XSkKLSsJYWRkCXIzLHIzLHIwCi0rCWFkZAlyMyxyMyxyMgotKwlhZGQJcjMscjMscjEKLSsJbGRyCXIxMixbcjE0XSwjNAkJCUAgKksyNTYrKwotKwlzdHIJcjMsW3NwLCMxMyo0XQotKwltb3YJcjAscjExLHJvciM2Ci0rCWVvcglyMCxyMCxyMTEscm9yIzExCi0rCWVvcglyMCxyMCxyMTEscm9yIzI1CUAgU2lnbWExKGUpCi0rCWFkZAlyMyxyMyxyMAotKwllb3IJcjIscjQscjUKLSsJYW5kCXIyLHIyLHIxMQotKwllb3IJcjIscjIscjUJCQlAIENoKGUsZixnKQotKwlhZGQJcjMscjMscjIKLSsJYWRkCXIzLHIzLHI2Ci0rCWFkZAlyMyxyMyxyMTIKLSsJbW92CXI2LHI3LHJvciMyCi0rCWVvcglyNixyNixyNyxyb3IjMTMKLSsJZW9yCXI2LHI2LHI3LHJvciMyMgkJQCBTaWdtYTAoYSkKLSsJb3JyCXIwLHI3LHI4Ci0rCWFuZAlyMCxyMCxyOQotKwlhbmQJcjIscjcscjgKLSsJb3JyCXIwLHIwLHIyCQkJQCBNYWooYSxiLGMpCi0rCWFkZAlyNixyNixyMAotKwlhZGQJcjEwLHIxMCxyMwotKwlhZGQJcjYscjYscjMKLSsJbGRyCXIyLFtzcCwjMTUqNF0JQCAzMAotKwlsZHIJcjEyLFtzcCwjMTIqNF0KLSsJbGRyCXIzLFtzcCwjMTQqNF0KLSsJbGRyCXIxLFtzcCwjNyo0XQotKwltb3YJcjAscjIscm9yIzcKLSsJZW9yCXIwLHIwLHIyLHJvciMxOAotKwllb3IJcjAscjAscjIsbHNyIzMJQCBzaWdtYTAoWFtpKzFdKQotKwltb3YJcjIscjEyLHJvciMxNwotKwllb3IJcjIscjIscjEyLHJvciMxOQotKwllb3IJcjIscjIscjEyLGxzciMxMAlAIHNpZ21hMShYW2krMTRdKQotKwlhZGQJcjMscjMscjAKLSsJYWRkCXIzLHIzLHIyCi0rCWFkZAlyMyxyMyxyMQotKwlsZHIJcjEyLFtyMTRdLCM0CQkJQCAqSzI1NisrCi0rCXN0cglyMyxbc3AsIzE0KjRdCi0rCW1vdglyMCxyMTAscm9yIzYKLSsJZW9yCXIwLHIwLHIxMCxyb3IjMTEKLSsJZW9yCXIwLHIwLHIxMCxyb3IjMjUJQCBTaWdtYTEoZSkKLSsJYWRkCXIzLHIzLHIwCi0rCWVvcglyMixyMTEscjQKLSsJYW5kCXIyLHIyLHIxMAotKwllb3IJcjIscjIscjQJCQlAIENoKGUsZixnKQotKwlhZGQJcjMscjMscjIKLSsJYWRkCXIzLHIzLHI1Ci0rCWFkZAlyMyxyMyxyMTIKLSsJbW92CXI1LHI2LHJvciMyCi0rCWVvcglyNSxyNSxyNixyb3IjMTMKLSsJZW9yCXI1LHI1LHI2LHJvciMyMgkJQCBTaWdtYTAoYSkKLSsJb3JyCXIwLHI2LHI3Ci0rCWFuZAlyMCxyMCxyOAotKwlhbmQJcjIscjYscjcKLSsJb3JyCXIwLHIwLHIyCQkJQCBNYWooYSxiLGMpCi0rCWFkZAlyNSxyNSxyMAotKwlhZGQJcjkscjkscjMKLSsJYWRkCXI1LHI1LHIzCi0rCWxkcglyMixbc3AsIzAqNF0JQCAzMQotKwlsZHIJcjEyLFtzcCwjMTMqNF0KLSsJbGRyCXIzLFtzcCwjMTUqNF0KLSsJbGRyCXIxLFtzcCwjOCo0XQotKwltb3YJcjAscjIscm9yIzcKLSsJZW9yCXIwLHIwLHIyLHJvciMxOAotKwllb3IJcjAscjAscjIsbHNyIzMJQCBzaWdtYTAoWFtpKzFdKQotKwltb3YJcjIscjEyLHJvciMxNwotKwllb3IJcjIscjIscjEyLHJvciMxOQotKwllb3IJcjIscjIscjEyLGxzciMxMAlAIHNpZ21hMShYW2krMTRdKQotKwlhZGQJcjMscjMscjAKLSsJYWRkCXIzLHIzLHIyCi0rCWFkZAlyMyxyMyxyMQotKwlsZHIJcjEyLFtyMTRdLCM0CQkJQCAqSzI1NisrCi0rCXN0cglyMyxbc3AsIzE1KjRdCi0rCW1vdglyMCxyOSxyb3IjNgotKwllb3IJcjAscjAscjkscm9yIzExCi0rCWVvcglyMCxyMCxyOSxyb3IjMjUJQCBTaWdtYTEoZSkKLSsJYWRkCXIzLHIzLHIwCi0rCWVvcglyMixyMTAscjExCi0rCWFuZAlyMixyMixyOQotKwllb3IJcjIscjIscjExCQkJQCBDaChlLGYsZykKLSsJYWRkCXIzLHIzLHIyCi0rCWFkZAlyMyxyMyxyNAotKwlhZGQJcjMscjMscjEyCi0rCW1vdglyNCxyNSxyb3IjMgotKwllb3IJcjQscjQscjUscm9yIzEzCi0rCWVvcglyNCxyNCxyNSxyb3IjMjIJCUAgU2lnbWEwKGEpCi0rCW9ycglyMCxyNSxyNgotKwlhbmQJcjAscjAscjcKLSsJYW5kCXIyLHI1LHI2Ci0rCW9ycglyMCxyMCxyMgkJCUAgTWFqKGEsYixjKQotKwlhZGQJcjQscjQscjAKLSsJYWRkCXI4LHI4LHIzCi0rCWFkZAlyNCxyNCxyMwotKwlhbmQJcjEyLHIxMiwjMHhmZgotKwljbXAJcjEyLCMweGYyCi0rCWJuZQkuTHJvdW5kc18xNl94eAotKwotKwlsZHIJcjMsW3NwLCMxNio0XQkJQCBwdWxsIGN0eAotKwlsZHIJcjAsW3IzLCMwXQotKwlsZHIJcjIsW3IzLCM0XQotKwlsZHIJcjEyLFtyMywjOF0KLSsJYWRkCXI0LHI0LHIwCi0rCWxkcglyMCxbcjMsIzEyXQotKwlhZGQJcjUscjUscjIKLSsJbGRyCXIyLFtyMywjMTZdCi0rCWFkZAlyNixyNixyMTIKLSsJbGRyCXIxMixbcjMsIzIwXQotKwlhZGQJcjcscjcscjAKLSsJbGRyCXIwLFtyMywjMjRdCi0rCWFkZAlyOCxyOCxyMgotKwlsZHIJcjIsW3IzLCMyOF0KLSsJYWRkCXI5LHI5LHIxMgotKwlsZHIJcjEsW3NwLCMxNyo0XQkJQCBwdWxsIGlucAotKwlsZHIJcjEyLFtzcCwjMTgqNF0JCUAgcHVsbCBpbnArbGVuCi0rCWFkZAlyMTAscjEwLHIwCi0rCWFkZAlyMTEscjExLHIyCi0rCXN0bWlhCXIzLHtyNCxyNSxyNixyNyxyOCxyOSxyMTAscjExfQotKwljbXAJcjEscjEyCi0rCXN1YglyMTQscjE0LCMyNTYJQCByZXdpbmQgS3RibAotKwlibmUJLkxvb3AKLSsKLSsJYWRkCXNwLHNwLCMxOSo0CUAgZGVzdHJveSBmcmFtZQotKwlsZG1pYQlzcCEse3I0LXIxMixscn0KLSsJdHN0CWxyLCMxCi0rCW1vdmVxCXBjLGxyCQkJQCBiZSBiaW5hcnkgY29tcGF0aWJsZSB3aXRoIFY0LCB5ZXQKLSsJLndvcmQJMHhlMTJmZmYxZQkJCUAgaW50ZXJvcGVyYWJsZSB3aXRoIFRodW1iIElTQTotKQotKy5zaXplICAgc2hhMjU2X2Jsb2NrX2RhdGFfb3JkZXIsLi1zaGEyNTZfYmxvY2tfZGF0YV9vcmRlcgotKy5hc2NpeiAgIlNIQTI1NiBibG9jayB0cmFuc2Zvcm0gZm9yIEFSTXY0LCBDUllQVE9HQU1TIGJ5IDxhcHByb0BvcGVuc3NsLm9yZz4iCi0tLS0gL2Rldi9udWxsCTIwMDktMDQtMjQgMDY6MDk6NDguMDAwMDAwMDAwIC0wNzAwCi0rKysgb3BlbnNzbC0wLjkuOGgvY3J5cHRvLzAuOS45LWRldi9zaGEvc2hhNTEyLWFybXY0LnBsCTIwMDktMDktMDMgMTU6NDI6MzkuMDAwMDAwMDAwIC0wNzAwCi1AQCAtMCwwICsxLDM5OCBAQAotKyMhL3Vzci9iaW4vZW52IHBlcmwKLSsKLSsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rIyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPiBmb3IgdGhlIE9wZW5TU0wKLSsjIHByb2plY3QuIFRoZSBtb2R1bGUgaXMsIGhvd2V2ZXIsIGR1YWwgbGljZW5zZWQgdW5kZXIgT3BlblNTTCBhbmQKLSsjIENSWVBUT0dBTVMgbGljZW5zZXMgZGVwZW5kaW5nIG9uIHdoZXJlIHlvdSBvYnRhaW4gaXQuIEZvciBmdXJ0aGVyCi0rIyBkZXRhaWxzIHNlZSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL35hcHByby9jcnlwdG9nYW1zLy4KLSsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rCi0rIyBTSEE1MTIgYmxvY2sgcHJvY2VkdXJlIGZvciBBUk12NC4gU2VwdGVtYmVyIDIwMDcuCi0rCi0rIyBUaGlzIGNvZGUgaXMgfjQuNSAoZm91ciBhbmQgYSBoYWxmKSB0aW1lcyBmYXN0ZXIgdGhhbiBjb2RlIGdlbmVyYXRlZAotKyMgYnkgZ2NjIDMuNCBhbmQgaXQgc3BlbmRzIH43MiBjbG9jayBjeWNsZXMgcGVyIGJ5dGUuIAotKwotKyMgQnl0ZSBvcmRlciBbaW5dZGVwZW5kZW5jZS4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsjCi0rIyBDYWxsZXIgaXMgZXhwZWN0ZWQgdG8gbWFpbnRhaW4gc3BlY2lmaWMgKmR3b3JkKiBvcmRlciBpbiBoWzAtN10sCi0rIyBuYW1lbHkgd2l0aCBtb3N0IHNpZ25pZmljYW50IGR3b3JkIGF0ICpsb3dlciogYWRkcmVzcywgd2hpY2ggaXMKLSsjIHJlZmxlY3RlZCBpbiBiZWxvdyB0d28gcGFyYW1ldGVycy4gKkJ5dGUqIG9yZGVyIHdpdGhpbiB0aGVzZSBkd29yZHMKLSsjIGluIHR1cm4gaXMgd2hhdGV2ZXIgKm5hdGl2ZSogYnl0ZSBvcmRlciBvbiBjdXJyZW50IHBsYXRmb3JtLgotKyRoaT0wOwotKyRsbz00OwotKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsKLSskb3V0cHV0PXNoaWZ0OwotK29wZW4gU1RET1VULCI+JG91dHB1dCI7Ci0rCi0rJGN0eD0icjAiOwotKyRpbnA9InIxIjsKLSskbGVuPSJyMiI7Ci0rJFRsbz0icjMiOwotKyRUaGk9InI0IjsKLSskQWxvPSJyNSI7Ci0rJEFoaT0icjYiOwotKyRFbG89InI3IjsKLSskRWhpPSJyOCI7Ci0rJHQwPSJyOSI7Ci0rJHQxPSJyMTAiOwotKyR0Mj0icjExIjsKLSskdDM9InIxMiI7Ci0rIyMjIyMjIyMjIyMjCXIxMyBpcyBzdGFjayBwb2ludGVyCi0rJEt0Ymw9InIxNCI7Ci0rIyMjIyMjIyMjIyMjCXIxNSBpcyBwcm9ncmFtIGNvdW50ZXIKLSsKLSskQW9mZj04KjA7Ci0rJEJvZmY9OCoxOwotKyRDb2ZmPTgqMjsKLSskRG9mZj04KjM7Ci0rJEVvZmY9OCo0OwotKyRGb2ZmPTgqNTsKLSskR29mZj04KjY7Ci0rJEhvZmY9OCo3OwotKyRYb2ZmPTgqODsKLSsKLStzdWIgQk9EWV8wMF8xNSgpIHsKLStteSAkbWFnaWMgPSBzaGlmdDsKLSskY29kZS49PDxfX187Ci0rCWxkcgkkdDIsW3NwLCMkSG9mZiswXQlAIGgubG8KLSsJbGRyCSR0Myxbc3AsIyRIb2ZmKzRdCUAgaC5oaQotKwlAIFNpZ21hMSh4KQkoUk9UUigoeCksMTQpIF4gUk9UUigoeCksMTgpICBeIFJPVFIoKHgpLDQxKSkKLSsJQCBMTwkJbG8+PjE0XmhpPDwxOCBeIGxvPj4xOF5oaTw8MTQgXiBoaT4+OV5sbzw8MjMKLSsJQCBISQkJaGk+PjE0XmxvPDwxOCBeIGhpPj4xOF5sbzw8MTQgXiBsbz4+OV5oaTw8MjMKLSsJbW92CSR0MCwkRWxvLGxzciMxNAotKwltb3YJJHQxLCRFaGksbHNyIzE0Ci0rCWVvcgkkdDAsJHQwLCRFaGksbHNsIzE4Ci0rCWVvcgkkdDEsJHQxLCRFbG8sbHNsIzE4Ci0rCWVvcgkkdDAsJHQwLCRFbG8sbHNyIzE4Ci0rCWVvcgkkdDEsJHQxLCRFaGksbHNyIzE4Ci0rCWVvcgkkdDAsJHQwLCRFaGksbHNsIzE0Ci0rCWVvcgkkdDEsJHQxLCRFbG8sbHNsIzE0Ci0rCWVvcgkkdDAsJHQwLCRFaGksbHNyIzkKLSsJZW9yCSR0MSwkdDEsJEVsbyxsc3IjOQotKwllb3IJJHQwLCR0MCwkRWxvLGxzbCMyMwotKwllb3IJJHQxLCR0MSwkRWhpLGxzbCMyMwlAIFNpZ21hMShlKQotKwlhZGRzCSRUbG8sJFRsbywkdDAKLSsJYWRjCSRUaGksJFRoaSwkdDEJCUAgVCArPSBTaWdtYTEoZSkKLSsJYWRkcwkkVGxvLCRUbG8sJHQyCi0rCWFkYwkkVGhpLCRUaGksJHQzCQlAIFQgKz0gaAotKwotKwlsZHIJJHQwLFtzcCwjJEZvZmYrMF0JQCBmLmxvCi0rCWxkcgkkdDEsW3NwLCMkRm9mZis0XQlAIGYuaGkKLSsJbGRyCSR0Mixbc3AsIyRHb2ZmKzBdCUAgZy5sbwotKwlsZHIJJHQzLFtzcCwjJEdvZmYrNF0JQCBnLmhpCi0rCXN0cgkkRWxvLFtzcCwjJEVvZmYrMF0KLSsJc3RyCSRFaGksW3NwLCMkRW9mZis0XQotKwlzdHIJJEFsbyxbc3AsIyRBb2ZmKzBdCi0rCXN0cgkkQWhpLFtzcCwjJEFvZmYrNF0KLSsKLSsJZW9yCSR0MCwkdDAsJHQyCi0rCWVvcgkkdDEsJHQxLCR0MwotKwlhbmQJJHQwLCR0MCwkRWxvCi0rCWFuZAkkdDEsJHQxLCRFaGkKLSsJZW9yCSR0MCwkdDAsJHQyCi0rCWVvcgkkdDEsJHQxLCR0MwkJQCBDaChlLGYsZykKLSsKLSsJbGRyCSR0MixbJEt0YmwsIzRdCQlAIEtbaV0ubG8KLSsJbGRyCSR0MyxbJEt0YmwsIzBdCQlAIEtbaV0uaGkKLSsJbGRyCSRFbG8sW3NwLCMkRG9mZiswXQlAIGQubG8KLSsJbGRyCSRFaGksW3NwLCMkRG9mZis0XQlAIGQuaGkKLSsKLSsJYWRkcwkkVGxvLCRUbG8sJHQwCi0rCWFkYwkkVGhpLCRUaGksJHQxCQlAIFQgKz0gQ2goZSxmLGcpCi0rCWFkZHMJJFRsbywkVGxvLCR0MgotKwlhZGMJJFRoaSwkVGhpLCR0MwkJQCBUICs9IEtbaV0KLSsJYWRkcwkkRWxvLCRFbG8sJFRsbwotKwlhZGMJJEVoaSwkRWhpLCRUaGkJCUAgZCArPSBUCi0rCi0rCWFuZAkkdDAsJHQyLCMweGZmCi0rCXRlcQkkdDAsIyRtYWdpYwotKwlvcnJlcQkkS3RibCwkS3RibCwjMQotKwotKwlsZHIJJHQyLFtzcCwjJEJvZmYrMF0JQCBiLmxvCi0rCWxkcgkkdDMsW3NwLCMkQ29mZiswXQlAIGMubG8KLSsJQCBTaWdtYTAoeCkJKFJPVFIoKHgpLDI4KSBeIFJPVFIoKHgpLDM0KSBeIFJPVFIoKHgpLDM5KSkKLSsJQCBMTwkJbG8+PjI4XmhpPDw0ICBeIGhpPj4yXmxvPDwzMCBeIGhpPj43XmxvPDwyNQotKwlAIEhJCQloaT4+MjhebG88PDQgIF4gbG8+PjJeaGk8PDMwIF4gbG8+PjdeaGk8PDI1Ci0rCW1vdgkkdDAsJEFsbyxsc3IjMjgKLSsJbW92CSR0MSwkQWhpLGxzciMyOAotKwllb3IJJHQwLCR0MCwkQWhpLGxzbCM0Ci0rCWVvcgkkdDEsJHQxLCRBbG8sbHNsIzQKLSsJZW9yCSR0MCwkdDAsJEFoaSxsc3IjMgotKwllb3IJJHQxLCR0MSwkQWxvLGxzciMyCi0rCWVvcgkkdDAsJHQwLCRBbG8sbHNsIzMwCi0rCWVvcgkkdDEsJHQxLCRBaGksbHNsIzMwCi0rCWVvcgkkdDAsJHQwLCRBaGksbHNyIzcKLSsJZW9yCSR0MSwkdDEsJEFsbyxsc3IjNwotKwllb3IJJHQwLCR0MCwkQWxvLGxzbCMyNQotKwllb3IJJHQxLCR0MSwkQWhpLGxzbCMyNQlAIFNpZ21hMChhKQotKwlhZGRzCSRUbG8sJFRsbywkdDAKLSsJYWRjCSRUaGksJFRoaSwkdDEJCUAgVCArPSBTaWdtYTAoYSkKLSsKLSsJYW5kCSR0MCwkQWxvLCR0MgotKwlvcnIJJEFsbywkQWxvLCR0MgotKwlsZHIJJHQxLFtzcCwjJEJvZmYrNF0JQCBiLmhpCi0rCWxkcgkkdDIsW3NwLCMkQ29mZis0XQlAIGMuaGkKLSsJYW5kCSRBbG8sJEFsbywkdDMKLSsJb3JyCSRBbG8sJEFsbywkdDAJCUAgTWFqKGEsYixjKS5sbwotKwlhbmQJJHQzLCRBaGksJHQxCi0rCW9ycgkkQWhpLCRBaGksJHQxCi0rCWFuZAkkQWhpLCRBaGksJHQyCi0rCW9ycgkkQWhpLCRBaGksJHQzCQlAIE1haihhLGIsYykuaGkKLSsJYWRkcwkkQWxvLCRBbG8sJFRsbwotKwlhZGMJJEFoaSwkQWhpLCRUaGkJCUAgaCArPSBUCi0rCi0rCXN1YglzcCxzcCwjOAotKwlhZGQJJEt0YmwsJEt0YmwsIzgKLStfX18KLSt9Ci0rJGNvZGU9PDxfX187Ci0rLnRleHQKLSsuY29kZQkzMgotKy50eXBlCUs1MTIsJW9iamVjdAotKy5hbGlnbgk1Ci0rSzUxMjoKLSsud29yZAkweDQyOGEyZjk4LDB4ZDcyOGFlMjIsIDB4NzEzNzQ0OTEsMHgyM2VmNjVjZAotKy53b3JkCTB4YjVjMGZiY2YsMHhlYzRkM2IyZiwgMHhlOWI1ZGJhNSwweDgxODlkYmJjCi0rLndvcmQJMHgzOTU2YzI1YiwweGYzNDhiNTM4LCAweDU5ZjExMWYxLDB4YjYwNWQwMTkKLSsud29yZAkweDkyM2Y4MmE0LDB4YWYxOTRmOWIsIDB4YWIxYzVlZDUsMHhkYTZkODExOAotKy53b3JkCTB4ZDgwN2FhOTgsMHhhMzAzMDI0MiwgMHgxMjgzNWIwMSwweDQ1NzA2ZmJlCi0rLndvcmQJMHgyNDMxODViZSwweDRlZTRiMjhjLCAweDU1MGM3ZGMzLDB4ZDVmZmI0ZTIKLSsud29yZAkweDcyYmU1ZDc0LDB4ZjI3Yjg5NmYsIDB4ODBkZWIxZmUsMHgzYjE2OTZiMQotKy53b3JkCTB4OWJkYzA2YTcsMHgyNWM3MTIzNSwgMHhjMTliZjE3NCwweGNmNjkyNjk0Ci0rLndvcmQJMHhlNDliNjljMSwweDllZjE0YWQyLCAweGVmYmU0Nzg2LDB4Mzg0ZjI1ZTMKLSsud29yZAkweDBmYzE5ZGM2LDB4OGI4Y2Q1YjUsIDB4MjQwY2ExY2MsMHg3N2FjOWM2NQotKy53b3JkCTB4MmRlOTJjNmYsMHg1OTJiMDI3NSwgMHg0YTc0ODRhYSwweDZlYTZlNDgzCi0rLndvcmQJMHg1Y2IwYTlkYywweGJkNDFmYmQ0LCAweDc2Zjk4OGRhLDB4ODMxMTUzYjUKLSsud29yZAkweDk4M2U1MTUyLDB4ZWU2NmRmYWIsIDB4YTgzMWM2NmQsMHgyZGI0MzIxMAotKy53b3JkCTB4YjAwMzI3YzgsMHg5OGZiMjEzZiwgMHhiZjU5N2ZjNywweGJlZWYwZWU0Ci0rLndvcmQJMHhjNmUwMGJmMywweDNkYTg4ZmMyLCAweGQ1YTc5MTQ3LDB4OTMwYWE3MjUKLSsud29yZAkweDA2Y2E2MzUxLDB4ZTAwMzgyNmYsIDB4MTQyOTI5NjcsMHgwYTBlNmU3MAotKy53b3JkCTB4MjdiNzBhODUsMHg0NmQyMmZmYywgMHgyZTFiMjEzOCwweDVjMjZjOTI2Ci0rLndvcmQJMHg0ZDJjNmRmYywweDVhYzQyYWVkLCAweDUzMzgwZDEzLDB4OWQ5NWIzZGYKLSsud29yZAkweDY1MGE3MzU0LDB4OGJhZjYzZGUsIDB4NzY2YTBhYmIsMHgzYzc3YjJhOAotKy53b3JkCTB4ODFjMmM5MmUsMHg0N2VkYWVlNiwgMHg5MjcyMmM4NSwweDE0ODIzNTNiCi0rLndvcmQJMHhhMmJmZThhMSwweDRjZjEwMzY0LCAweGE4MWE2NjRiLDB4YmM0MjMwMDEKLSsud29yZAkweGMyNGI4YjcwLDB4ZDBmODk3OTEsIDB4Yzc2YzUxYTMsMHgwNjU0YmUzMAotKy53b3JkCTB4ZDE5MmU4MTksMHhkNmVmNTIxOCwgMHhkNjk5MDYyNCwweDU1NjVhOTEwCi0rLndvcmQJMHhmNDBlMzU4NSwweDU3NzEyMDJhLCAweDEwNmFhMDcwLDB4MzJiYmQxYjgKLSsud29yZAkweDE5YTRjMTE2LDB4YjhkMmQwYzgsIDB4MWUzNzZjMDgsMHg1MTQxYWI1MwotKy53b3JkCTB4Mjc0ODc3NGMsMHhkZjhlZWI5OSwgMHgzNGIwYmNiNSwweGUxOWI0OGE4Ci0rLndvcmQJMHgzOTFjMGNiMywweGM1Yzk1YTYzLCAweDRlZDhhYTRhLDB4ZTM0MThhY2IKLSsud29yZAkweDViOWNjYTRmLDB4Nzc2M2UzNzMsIDB4NjgyZTZmZjMsMHhkNmIyYjhhMwotKy53b3JkCTB4NzQ4ZjgyZWUsMHg1ZGVmYjJmYywgMHg3OGE1NjM2ZiwweDQzMTcyZjYwCi0rLndvcmQJMHg4NGM4NzgxNCwweGExZjBhYjcyLCAweDhjYzcwMjA4LDB4MWE2NDM5ZWMKLSsud29yZAkweDkwYmVmZmZhLDB4MjM2MzFlMjgsIDB4YTQ1MDZjZWIsMHhkZTgyYmRlOQotKy53b3JkCTB4YmVmOWEzZjcsMHhiMmM2NzkxNSwgMHhjNjcxNzhmMiwweGUzNzI1MzJiCi0rLndvcmQJMHhjYTI3M2VjZSwweGVhMjY2MTljLCAweGQxODZiOGM3LDB4MjFjMGMyMDcKLSsud29yZAkweGVhZGE3ZGQ2LDB4Y2RlMGViMWUsIDB4ZjU3ZDRmN2YsMHhlZTZlZDE3OAotKy53b3JkCTB4MDZmMDY3YWEsMHg3MjE3NmZiYSwgMHgwYTYzN2RjNSwweGEyYzg5OGE2Ci0rLndvcmQJMHgxMTNmOTgwNCwweGJlZjkwZGFlLCAweDFiNzEwYjM1LDB4MTMxYzQ3MWIKLSsud29yZAkweDI4ZGI3N2Y1LDB4MjMwNDdkODQsIDB4MzJjYWFiN2IsMHg0MGM3MjQ5MwotKy53b3JkCTB4M2M5ZWJlMGEsMHgxNWM5YmViYywgMHg0MzFkNjdjNCwweDljMTAwZDRjCi0rLndvcmQJMHg0Y2M1ZDRiZSwweGNiM2U0MmI2LCAweDU5N2YyOTljLDB4ZmM2NTdlMmEKLSsud29yZAkweDVmY2I2ZmFiLDB4M2FkNmZhZWMsIDB4NmM0NDE5OGMsMHg0YTQ3NTgxNwotKy5zaXplCUs1MTIsLi1LNTEyCi0rCi0rLmdsb2JhbAlzaGE1MTJfYmxvY2tfZGF0YV9vcmRlcgotKy50eXBlCXNoYTUxMl9ibG9ja19kYXRhX29yZGVyLCVmdW5jdGlvbgotK3NoYTUxMl9ibG9ja19kYXRhX29yZGVyOgotKwlzdWIJcjMscGMsIzgJCUAgc2hhNTEyX2Jsb2NrX2RhdGFfb3JkZXIKLSsJYWRkCSRsZW4sJGlucCwkbGVuLGxzbCM3CUAgbGVuIHRvIHBvaW50IGF0IHRoZSBlbmQgb2YgaW5wCi0rCXN0bWRiCXNwISx7cjQtcjEyLGxyfQotKwlzdWIJJEt0YmwscjMsIzY0MAkJQCBLNTEyCi0rCXN1YglzcCxzcCwjOSo4Ci0rCi0rCWxkcgkkRWxvLFskY3R4LCMkRW9mZiskbG9dCi0rCWxkcgkkRWhpLFskY3R4LCMkRW9mZiskaGldCi0rCWxkcgkkdDAsIFskY3R4LCMkR29mZiskbG9dCi0rCWxkcgkkdDEsIFskY3R4LCMkR29mZiskaGldCi0rCWxkcgkkdDIsIFskY3R4LCMkSG9mZiskbG9dCi0rCWxkcgkkdDMsIFskY3R4LCMkSG9mZiskaGldCi0rLkxvb3A6Ci0rCXN0cgkkdDAsIFtzcCwjJEdvZmYrMF0KLSsJc3RyCSR0MSwgW3NwLCMkR29mZis0XQotKwlzdHIJJHQyLCBbc3AsIyRIb2ZmKzBdCi0rCXN0cgkkdDMsIFtzcCwjJEhvZmYrNF0KLSsJbGRyCSRBbG8sWyRjdHgsIyRBb2ZmKyRsb10KLSsJbGRyCSRBaGksWyRjdHgsIyRBb2ZmKyRoaV0KLSsJbGRyCSRUbG8sWyRjdHgsIyRCb2ZmKyRsb10KLSsJbGRyCSRUaGksWyRjdHgsIyRCb2ZmKyRoaV0KLSsJbGRyCSR0MCwgWyRjdHgsIyRDb2ZmKyRsb10KLSsJbGRyCSR0MSwgWyRjdHgsIyRDb2ZmKyRoaV0KLSsJbGRyCSR0MiwgWyRjdHgsIyREb2ZmKyRsb10KLSsJbGRyCSR0MywgWyRjdHgsIyREb2ZmKyRoaV0KLSsJc3RyCSRUbG8sW3NwLCMkQm9mZiswXQotKwlzdHIJJFRoaSxbc3AsIyRCb2ZmKzRdCi0rCXN0cgkkdDAsIFtzcCwjJENvZmYrMF0KLSsJc3RyCSR0MSwgW3NwLCMkQ29mZis0XQotKwlzdHIJJHQyLCBbc3AsIyREb2ZmKzBdCi0rCXN0cgkkdDMsIFtzcCwjJERvZmYrNF0KLSsJbGRyCSRUbG8sWyRjdHgsIyRGb2ZmKyRsb10KLSsJbGRyCSRUaGksWyRjdHgsIyRGb2ZmKyRoaV0KLSsJc3RyCSRUbG8sW3NwLCMkRm9mZiswXQotKwlzdHIJJFRoaSxbc3AsIyRGb2ZmKzRdCi0rCi0rLkwwMF8xNToKLSsJbGRyYgkkVGxvLFskaW5wLCM3XQotKwlsZHJiCSR0MCwgWyRpbnAsIzZdCi0rCWxkcmIJJHQxLCBbJGlucCwjNV0KLSsJbGRyYgkkdDIsIFskaW5wLCM0XQotKwlsZHJiCSRUaGksWyRpbnAsIzNdCi0rCWxkcmIJJHQzLCBbJGlucCwjMl0KLSsJb3JyCSRUbG8sJFRsbywkdDAsbHNsIzgKLSsJbGRyYgkkdDAsIFskaW5wLCMxXQotKwlvcnIJJFRsbywkVGxvLCR0MSxsc2wjMTYKLSsJbGRyYgkkdDEsIFskaW5wXSwjOAotKwlvcnIJJFRsbywkVGxvLCR0Mixsc2wjMjQKLSsJb3JyCSRUaGksJFRoaSwkdDMsbHNsIzgKLSsJb3JyCSRUaGksJFRoaSwkdDAsbHNsIzE2Ci0rCW9ycgkkVGhpLCRUaGksJHQxLGxzbCMyNAotKwlzdHIJJFRsbyxbc3AsIyRYb2ZmKzBdCi0rCXN0cgkkVGhpLFtzcCwjJFhvZmYrNF0KLStfX18KLSsJJkJPRFlfMDBfMTUoMHg5NCk7Ci0rJGNvZGUuPTw8X19fOwotKwl0c3QJJEt0YmwsIzEKLSsJYmVxCS5MMDBfMTUKLSsJYmljCSRLdGJsLCRLdGJsLCMxCi0rCi0rLkwxNl83OToKLSsJbGRyCSR0MCxbc3AsI2AkWG9mZis4KigxNi0xKWArMF0KLSsJbGRyCSR0MSxbc3AsI2AkWG9mZis4KigxNi0xKWArNF0KLSsJbGRyCSR0Mixbc3AsI2AkWG9mZis4KigxNi0xNClgKzBdCi0rCWxkcgkkdDMsW3NwLCNgJFhvZmYrOCooMTYtMTQpYCs0XQotKwotKwlAIHNpZ21hMCh4KQkoUk9UUigoeCksMSkgIF4gUk9UUigoeCksOCkgIF4gKCh4KT4+NykpCi0rCUAgTE8JCWxvPj4xXmhpPDwzMSAgXiBsbz4+OF5oaTw8MjQgXiBsbz4+N15oaTw8MjUKLSsJQCBISQkJaGk+PjFebG88PDMxICBeIGhpPj44XmxvPDwyNCBeIGhpPj43Ci0rCW1vdgkkVGxvLCR0MCxsc3IjMQotKwltb3YJJFRoaSwkdDEsbHNyIzEKLSsJZW9yCSRUbG8sJFRsbywkdDEsbHNsIzMxCi0rCWVvcgkkVGhpLCRUaGksJHQwLGxzbCMzMQotKwllb3IJJFRsbywkVGxvLCR0MCxsc3IjOAotKwllb3IJJFRoaSwkVGhpLCR0MSxsc3IjOAotKwllb3IJJFRsbywkVGxvLCR0MSxsc2wjMjQKLSsJZW9yCSRUaGksJFRoaSwkdDAsbHNsIzI0Ci0rCWVvcgkkVGxvLCRUbG8sJHQwLGxzciM3Ci0rCWVvcgkkVGhpLCRUaGksJHQxLGxzciM3Ci0rCWVvcgkkVGxvLCRUbG8sJHQxLGxzbCMyNQotKwotKwlAIHNpZ21hMSh4KQkoUk9UUigoeCksMTkpIF4gUk9UUigoeCksNjEpIF4gKCh4KT4+NikpCi0rCUAgTE8JCWxvPj4xOV5oaTw8MTMgXiBoaT4+MjlebG88PDMgXiBsbz4+Nl5oaTw8MjYKLSsJQCBISQkJaGk+PjE5XmxvPDwxMyBeIGxvPj4yOV5oaTw8MyBeIGhpPj42Ci0rCW1vdgkkdDAsJHQyLGxzciMxOQotKwltb3YJJHQxLCR0Myxsc3IjMTkKLSsJZW9yCSR0MCwkdDAsJHQzLGxzbCMxMwotKwllb3IJJHQxLCR0MSwkdDIsbHNsIzEzCi0rCWVvcgkkdDAsJHQwLCR0Myxsc3IjMjkKLSsJZW9yCSR0MSwkdDEsJHQyLGxzciMyOQotKwllb3IJJHQwLCR0MCwkdDIsbHNsIzMKLSsJZW9yCSR0MSwkdDEsJHQzLGxzbCMzCi0rCWVvcgkkdDAsJHQwLCR0Mixsc3IjNgotKwllb3IJJHQxLCR0MSwkdDMsbHNyIzYKLSsJZW9yCSR0MCwkdDAsJHQzLGxzbCMyNgotKwotKwlsZHIJJHQyLFtzcCwjYCRYb2ZmKzgqKDE2LTkpYCswXQotKwlsZHIJJHQzLFtzcCwjYCRYb2ZmKzgqKDE2LTkpYCs0XQotKwlhZGRzCSRUbG8sJFRsbywkdDAKLSsJYWRjCSRUaGksJFRoaSwkdDEKLSsKLSsJbGRyCSR0MCxbc3AsI2AkWG9mZis4KjE2YCswXQotKwlsZHIJJHQxLFtzcCwjYCRYb2ZmKzgqMTZgKzRdCi0rCWFkZHMJJFRsbywkVGxvLCR0MgotKwlhZGMJJFRoaSwkVGhpLCR0MwotKwlhZGRzCSRUbG8sJFRsbywkdDAKLSsJYWRjCSRUaGksJFRoaSwkdDEKLSsJc3RyCSRUbG8sW3NwLCMkWG9mZiswXQotKwlzdHIJJFRoaSxbc3AsIyRYb2ZmKzRdCi0rX19fCi0rCSZCT0RZXzAwXzE1KDB4MTcpOwotKyRjb2RlLj08PF9fXzsKLSsJdHN0CSRLdGJsLCMxCi0rCWJlcQkuTDE2Xzc5Ci0rCWJpYwkkS3RibCwkS3RibCwjMQotKwotKwlsZHIJJFRsbyxbc3AsIyRCb2ZmKzBdCi0rCWxkcgkkVGhpLFtzcCwjJEJvZmYrNF0KLSsJbGRyCSR0MCwgWyRjdHgsIyRBb2ZmKyRsb10KLSsJbGRyCSR0MSwgWyRjdHgsIyRBb2ZmKyRoaV0KLSsJbGRyCSR0MiwgWyRjdHgsIyRCb2ZmKyRsb10KLSsJbGRyCSR0MywgWyRjdHgsIyRCb2ZmKyRoaV0KLSsJYWRkcwkkdDAsJEFsbywkdDAKLSsJYWRjCSR0MSwkQWhpLCR0MQotKwlhZGRzCSR0MiwkVGxvLCR0MgotKwlhZGMJJHQzLCRUaGksJHQzCi0rCXN0cgkkdDAsIFskY3R4LCMkQW9mZiskbG9dCi0rCXN0cgkkdDEsIFskY3R4LCMkQW9mZiskaGldCi0rCXN0cgkkdDIsIFskY3R4LCMkQm9mZiskbG9dCi0rCXN0cgkkdDMsIFskY3R4LCMkQm9mZiskaGldCi0rCi0rCWxkcgkkQWxvLFtzcCwjJENvZmYrMF0KLSsJbGRyCSRBaGksW3NwLCMkQ29mZis0XQotKwlsZHIJJFRsbyxbc3AsIyREb2ZmKzBdCi0rCWxkcgkkVGhpLFtzcCwjJERvZmYrNF0KLSsJbGRyCSR0MCwgWyRjdHgsIyRDb2ZmKyRsb10KLSsJbGRyCSR0MSwgWyRjdHgsIyRDb2ZmKyRoaV0KLSsJbGRyCSR0MiwgWyRjdHgsIyREb2ZmKyRsb10KLSsJbGRyCSR0MywgWyRjdHgsIyREb2ZmKyRoaV0KLSsJYWRkcwkkdDAsJEFsbywkdDAKLSsJYWRjCSR0MSwkQWhpLCR0MQotKwlhZGRzCSR0MiwkVGxvLCR0MgotKwlhZGMJJHQzLCRUaGksJHQzCi0rCXN0cgkkdDAsIFskY3R4LCMkQ29mZiskbG9dCi0rCXN0cgkkdDEsIFskY3R4LCMkQ29mZiskaGldCi0rCXN0cgkkdDIsIFskY3R4LCMkRG9mZiskbG9dCi0rCXN0cgkkdDMsIFskY3R4LCMkRG9mZiskaGldCi0rCi0rCWxkcgkkVGxvLFtzcCwjJEZvZmYrMF0KLSsJbGRyCSRUaGksW3NwLCMkRm9mZis0XQotKwlsZHIJJHQwLCBbJGN0eCwjJEVvZmYrJGxvXQotKwlsZHIJJHQxLCBbJGN0eCwjJEVvZmYrJGhpXQotKwlsZHIJJHQyLCBbJGN0eCwjJEZvZmYrJGxvXQotKwlsZHIJJHQzLCBbJGN0eCwjJEZvZmYrJGhpXQotKwlhZGRzCSRFbG8sJEVsbywkdDAKLSsJYWRjCSRFaGksJEVoaSwkdDEKLSsJYWRkcwkkdDIsJFRsbywkdDIKLSsJYWRjCSR0MywkVGhpLCR0MwotKwlzdHIJJEVsbyxbJGN0eCwjJEVvZmYrJGxvXQotKwlzdHIJJEVoaSxbJGN0eCwjJEVvZmYrJGhpXQotKwlzdHIJJHQyLCBbJGN0eCwjJEZvZmYrJGxvXQotKwlzdHIJJHQzLCBbJGN0eCwjJEZvZmYrJGhpXQotKwotKwlsZHIJJEFsbyxbc3AsIyRHb2ZmKzBdCi0rCWxkcgkkQWhpLFtzcCwjJEdvZmYrNF0KLSsJbGRyCSRUbG8sW3NwLCMkSG9mZiswXQotKwlsZHIJJFRoaSxbc3AsIyRIb2ZmKzRdCi0rCWxkcgkkdDAsIFskY3R4LCMkR29mZiskbG9dCi0rCWxkcgkkdDEsIFskY3R4LCMkR29mZiskaGldCi0rCWxkcgkkdDIsIFskY3R4LCMkSG9mZiskbG9dCi0rCWxkcgkkdDMsIFskY3R4LCMkSG9mZiskaGldCi0rCWFkZHMJJHQwLCRBbG8sJHQwCi0rCWFkYwkkdDEsJEFoaSwkdDEKLSsJYWRkcwkkdDIsJFRsbywkdDIKLSsJYWRjCSR0MywkVGhpLCR0MwotKwlzdHIJJHQwLCBbJGN0eCwjJEdvZmYrJGxvXQotKwlzdHIJJHQxLCBbJGN0eCwjJEdvZmYrJGhpXQotKwlzdHIJJHQyLCBbJGN0eCwjJEhvZmYrJGxvXQotKwlzdHIJJHQzLCBbJGN0eCwjJEhvZmYrJGhpXQotKwotKwlhZGQJc3Asc3AsIzY0MAotKwlzdWIJJEt0YmwsJEt0YmwsIzY0MAotKwotKwl0ZXEJJGlucCwkbGVuCi0rCWJuZQkuTG9vcAotKwotKwlhZGQJc3Asc3AsIzgqOQkJQCBkZXN0cm95IGZyYW1lCi0rCWxkbWlhCXNwISx7cjQtcjEyLGxyfQotKwl0c3QJbHIsIzEKLSsJbW92ZXEJcGMsbHIJCQlAIGJlIGJpbmFyeSBjb21wYXRpYmxlIHdpdGggVjQsIHlldAotKwlieAlscgkJCUAgaW50ZXJvcGVyYWJsZSB3aXRoIFRodW1iIElTQTotKQotKy5zaXplICAgc2hhNTEyX2Jsb2NrX2RhdGFfb3JkZXIsLi1zaGE1MTJfYmxvY2tfZGF0YV9vcmRlcgotKy5hc2NpeiAgIlNIQTUxMiBibG9jayB0cmFuc2Zvcm0gZm9yIEFSTXY0LCBDUllQVE9HQU1TIGJ5IDxhcHByb1xAb3BlbnNzbC5vcmc+IgotK19fXwotKwotKyRjb2RlID1+IHMvXGAoW15cYF0qKVxgL2V2YWwgJDEvZ2VtOwotKyRjb2RlID1+IHMvXGJieFxzK2xyXGIvLndvcmRcdDB4ZTEyZmZmMWUvZ207CSMgbWFrZSBpdCBwb3NzaWJsZSB0byBjb21waWxlIHdpdGggLW1hcmNoPWFybXY0Ci0rcHJpbnQgJGNvZGU7Ci0rY2xvc2UgU1RET1VUOyAjIGVuZm9yY2UgZmx1c2gKLS0tLSAvZGV2L251bGwJMjAwOS0wNC0yNCAwNjowOTo0OC4wMDAwMDAwMDAgLTA3MDAKLSsrKyBvcGVuc3NsLTAuOS44aC9jcnlwdG8vMC45LjktZGV2L3NoYS9zaGE1MTItYXJtdjQucwkyMDA5LTA5LTAzIDE1OjQyOjM5LjAwMDAwMDAwMCAtMDcwMAotQEAgLTAsMCArMSw0MTUgQEAKLSsudGV4dAotKy5jb2RlCTMyCi0rLnR5cGUJSzUxMiwlb2JqZWN0Ci0rLmFsaWduCTUKLStLNTEyOgotKy53b3JkCTB4NDI4YTJmOTgsMHhkNzI4YWUyMiwgMHg3MTM3NDQ5MSwweDIzZWY2NWNkCi0rLndvcmQJMHhiNWMwZmJjZiwweGVjNGQzYjJmLCAweGU5YjVkYmE1LDB4ODE4OWRiYmMKLSsud29yZAkweDM5NTZjMjViLDB4ZjM0OGI1MzgsIDB4NTlmMTExZjEsMHhiNjA1ZDAxOQotKy53b3JkCTB4OTIzZjgyYTQsMHhhZjE5NGY5YiwgMHhhYjFjNWVkNSwweGRhNmQ4MTE4Ci0rLndvcmQJMHhkODA3YWE5OCwweGEzMDMwMjQyLCAweDEyODM1YjAxLDB4NDU3MDZmYmUKLSsud29yZAkweDI0MzE4NWJlLDB4NGVlNGIyOGMsIDB4NTUwYzdkYzMsMHhkNWZmYjRlMgotKy53b3JkCTB4NzJiZTVkNzQsMHhmMjdiODk2ZiwgMHg4MGRlYjFmZSwweDNiMTY5NmIxCi0rLndvcmQJMHg5YmRjMDZhNywweDI1YzcxMjM1LCAweGMxOWJmMTc0LDB4Y2Y2OTI2OTQKLSsud29yZAkweGU0OWI2OWMxLDB4OWVmMTRhZDIsIDB4ZWZiZTQ3ODYsMHgzODRmMjVlMwotKy53b3JkCTB4MGZjMTlkYzYsMHg4YjhjZDViNSwgMHgyNDBjYTFjYywweDc3YWM5YzY1Ci0rLndvcmQJMHgyZGU5MmM2ZiwweDU5MmIwMjc1LCAweDRhNzQ4NGFhLDB4NmVhNmU0ODMKLSsud29yZAkweDVjYjBhOWRjLDB4YmQ0MWZiZDQsIDB4NzZmOTg4ZGEsMHg4MzExNTNiNQotKy53b3JkCTB4OTgzZTUxNTIsMHhlZTY2ZGZhYiwgMHhhODMxYzY2ZCwweDJkYjQzMjEwCi0rLndvcmQJMHhiMDAzMjdjOCwweDk4ZmIyMTNmLCAweGJmNTk3ZmM3LDB4YmVlZjBlZTQKLSsud29yZAkweGM2ZTAwYmYzLDB4M2RhODhmYzIsIDB4ZDVhNzkxNDcsMHg5MzBhYTcyNQotKy53b3JkCTB4MDZjYTYzNTEsMHhlMDAzODI2ZiwgMHgxNDI5Mjk2NywweDBhMGU2ZTcwCi0rLndvcmQJMHgyN2I3MGE4NSwweDQ2ZDIyZmZjLCAweDJlMWIyMTM4LDB4NWMyNmM5MjYKLSsud29yZAkweDRkMmM2ZGZjLDB4NWFjNDJhZWQsIDB4NTMzODBkMTMsMHg5ZDk1YjNkZgotKy53b3JkCTB4NjUwYTczNTQsMHg4YmFmNjNkZSwgMHg3NjZhMGFiYiwweDNjNzdiMmE4Ci0rLndvcmQJMHg4MWMyYzkyZSwweDQ3ZWRhZWU2LCAweDkyNzIyYzg1LDB4MTQ4MjM1M2IKLSsud29yZAkweGEyYmZlOGExLDB4NGNmMTAzNjQsIDB4YTgxYTY2NGIsMHhiYzQyMzAwMQotKy53b3JkCTB4YzI0YjhiNzAsMHhkMGY4OTc5MSwgMHhjNzZjNTFhMywweDA2NTRiZTMwCi0rLndvcmQJMHhkMTkyZTgxOSwweGQ2ZWY1MjE4LCAweGQ2OTkwNjI0LDB4NTU2NWE5MTAKLSsud29yZAkweGY0MGUzNTg1LDB4NTc3MTIwMmEsIDB4MTA2YWEwNzAsMHgzMmJiZDFiOAotKy53b3JkCTB4MTlhNGMxMTYsMHhiOGQyZDBjOCwgMHgxZTM3NmMwOCwweDUxNDFhYjUzCi0rLndvcmQJMHgyNzQ4Nzc0YywweGRmOGVlYjk5LCAweDM0YjBiY2I1LDB4ZTE5YjQ4YTgKLSsud29yZAkweDM5MWMwY2IzLDB4YzVjOTVhNjMsIDB4NGVkOGFhNGEsMHhlMzQxOGFjYgotKy53b3JkCTB4NWI5Y2NhNGYsMHg3NzYzZTM3MywgMHg2ODJlNmZmMywweGQ2YjJiOGEzCi0rLndvcmQJMHg3NDhmODJlZSwweDVkZWZiMmZjLCAweDc4YTU2MzZmLDB4NDMxNzJmNjAKLSsud29yZAkweDg0Yzg3ODE0LDB4YTFmMGFiNzIsIDB4OGNjNzAyMDgsMHgxYTY0MzllYwotKy53b3JkCTB4OTBiZWZmZmEsMHgyMzYzMWUyOCwgMHhhNDUwNmNlYiwweGRlODJiZGU5Ci0rLndvcmQJMHhiZWY5YTNmNywweGIyYzY3OTE1LCAweGM2NzE3OGYyLDB4ZTM3MjUzMmIKLSsud29yZAkweGNhMjczZWNlLDB4ZWEyNjYxOWMsIDB4ZDE4NmI4YzcsMHgyMWMwYzIwNwotKy53b3JkCTB4ZWFkYTdkZDYsMHhjZGUwZWIxZSwgMHhmNTdkNGY3ZiwweGVlNmVkMTc4Ci0rLndvcmQJMHgwNmYwNjdhYSwweDcyMTc2ZmJhLCAweDBhNjM3ZGM1LDB4YTJjODk4YTYKLSsud29yZAkweDExM2Y5ODA0LDB4YmVmOTBkYWUsIDB4MWI3MTBiMzUsMHgxMzFjNDcxYgotKy53b3JkCTB4MjhkYjc3ZjUsMHgyMzA0N2Q4NCwgMHgzMmNhYWI3YiwweDQwYzcyNDkzCi0rLndvcmQJMHgzYzllYmUwYSwweDE1YzliZWJjLCAweDQzMWQ2N2M0LDB4OWMxMDBkNGMKLSsud29yZAkweDRjYzVkNGJlLDB4Y2IzZTQyYjYsIDB4NTk3ZjI5OWMsMHhmYzY1N2UyYQotKy53b3JkCTB4NWZjYjZmYWIsMHgzYWQ2ZmFlYywgMHg2YzQ0MTk4YywweDRhNDc1ODE3Ci0rLnNpemUJSzUxMiwuLUs1MTIKLSsKLSsuZ2xvYmFsCXNoYTUxMl9ibG9ja19kYXRhX29yZGVyCi0rLnR5cGUJc2hhNTEyX2Jsb2NrX2RhdGFfb3JkZXIsJWZ1bmN0aW9uCi0rc2hhNTEyX2Jsb2NrX2RhdGFfb3JkZXI6Ci0rCXN1YglyMyxwYywjOAkJQCBzaGE1MTJfYmxvY2tfZGF0YV9vcmRlcgotKwlhZGQJcjIscjEscjIsbHNsIzcJQCBsZW4gdG8gcG9pbnQgYXQgdGhlIGVuZCBvZiBpbnAKLSsJc3RtZGIJc3AhLHtyNC1yMTIsbHJ9Ci0rCXN1YglyMTQscjMsIzY0MAkJQCBLNTEyCi0rCXN1YglzcCxzcCwjOSo4Ci0rCi0rCWxkcglyNyxbcjAsIzMyKzRdCi0rCWxkcglyOCxbcjAsIzMyKzBdCi0rCWxkcglyOSwgW3IwLCM0OCs0XQotKwlsZHIJcjEwLCBbcjAsIzQ4KzBdCi0rCWxkcglyMTEsIFtyMCwjNTYrNF0KLSsJbGRyCXIxMiwgW3IwLCM1NiswXQotKy5Mb29wOgotKwlzdHIJcjksIFtzcCwjNDgrMF0KLSsJc3RyCXIxMCwgW3NwLCM0OCs0XQotKwlzdHIJcjExLCBbc3AsIzU2KzBdCi0rCXN0cglyMTIsIFtzcCwjNTYrNF0KLSsJbGRyCXI1LFtyMCwjMCs0XQotKwlsZHIJcjYsW3IwLCMwKzBdCi0rCWxkcglyMyxbcjAsIzgrNF0KLSsJbGRyCXI0LFtyMCwjOCswXQotKwlsZHIJcjksIFtyMCwjMTYrNF0KLSsJbGRyCXIxMCwgW3IwLCMxNiswXQotKwlsZHIJcjExLCBbcjAsIzI0KzRdCi0rCWxkcglyMTIsIFtyMCwjMjQrMF0KLSsJc3RyCXIzLFtzcCwjOCswXQotKwlzdHIJcjQsW3NwLCM4KzRdCi0rCXN0cglyOSwgW3NwLCMxNiswXQotKwlzdHIJcjEwLCBbc3AsIzE2KzRdCi0rCXN0cglyMTEsIFtzcCwjMjQrMF0KLSsJc3RyCXIxMiwgW3NwLCMyNCs0XQotKwlsZHIJcjMsW3IwLCM0MCs0XQotKwlsZHIJcjQsW3IwLCM0MCswXQotKwlzdHIJcjMsW3NwLCM0MCswXQotKwlzdHIJcjQsW3NwLCM0MCs0XQotKwotKy5MMDBfMTU6Ci0rCWxkcmIJcjMsW3IxLCM3XQotKwlsZHJiCXI5LCBbcjEsIzZdCi0rCWxkcmIJcjEwLCBbcjEsIzVdCi0rCWxkcmIJcjExLCBbcjEsIzRdCi0rCWxkcmIJcjQsW3IxLCMzXQotKwlsZHJiCXIxMiwgW3IxLCMyXQotKwlvcnIJcjMscjMscjksbHNsIzgKLSsJbGRyYglyOSwgW3IxLCMxXQotKwlvcnIJcjMscjMscjEwLGxzbCMxNgotKwlsZHJiCXIxMCwgW3IxXSwjOAotKwlvcnIJcjMscjMscjExLGxzbCMyNAotKwlvcnIJcjQscjQscjEyLGxzbCM4Ci0rCW9ycglyNCxyNCxyOSxsc2wjMTYKLSsJb3JyCXI0LHI0LHIxMCxsc2wjMjQKLSsJc3RyCXIzLFtzcCwjNjQrMF0KLSsJc3RyCXI0LFtzcCwjNjQrNF0KLSsJbGRyCXIxMSxbc3AsIzU2KzBdCUAgaC5sbwotKwlsZHIJcjEyLFtzcCwjNTYrNF0JQCBoLmhpCi0rCUAgU2lnbWExKHgpCShST1RSKCh4KSwxNCkgXiBST1RSKCh4KSwxOCkgIF4gUk9UUigoeCksNDEpKQotKwlAIExPCQlsbz4+MTReaGk8PDE4IF4gbG8+PjE4XmhpPDwxNCBeIGhpPj45XmxvPDwyMwotKwlAIEhJCQloaT4+MTRebG88PDE4IF4gaGk+PjE4XmxvPDwxNCBeIGxvPj45XmhpPDwyMwotKwltb3YJcjkscjcsbHNyIzE0Ci0rCW1vdglyMTAscjgsbHNyIzE0Ci0rCWVvcglyOSxyOSxyOCxsc2wjMTgKLSsJZW9yCXIxMCxyMTAscjcsbHNsIzE4Ci0rCWVvcglyOSxyOSxyNyxsc3IjMTgKLSsJZW9yCXIxMCxyMTAscjgsbHNyIzE4Ci0rCWVvcglyOSxyOSxyOCxsc2wjMTQKLSsJZW9yCXIxMCxyMTAscjcsbHNsIzE0Ci0rCWVvcglyOSxyOSxyOCxsc3IjOQotKwllb3IJcjEwLHIxMCxyNyxsc3IjOQotKwllb3IJcjkscjkscjcsbHNsIzIzCi0rCWVvcglyMTAscjEwLHI4LGxzbCMyMwlAIFNpZ21hMShlKQotKwlhZGRzCXIzLHIzLHI5Ci0rCWFkYwlyNCxyNCxyMTAJCUAgVCArPSBTaWdtYTEoZSkKLSsJYWRkcwlyMyxyMyxyMTEKLSsJYWRjCXI0LHI0LHIxMgkJQCBUICs9IGgKLSsKLSsJbGRyCXI5LFtzcCwjNDArMF0JQCBmLmxvCi0rCWxkcglyMTAsW3NwLCM0MCs0XQlAIGYuaGkKLSsJbGRyCXIxMSxbc3AsIzQ4KzBdCUAgZy5sbwotKwlsZHIJcjEyLFtzcCwjNDgrNF0JQCBnLmhpCi0rCXN0cglyNyxbc3AsIzMyKzBdCi0rCXN0cglyOCxbc3AsIzMyKzRdCi0rCXN0cglyNSxbc3AsIzArMF0KLSsJc3RyCXI2LFtzcCwjMCs0XQotKwotKwllb3IJcjkscjkscjExCi0rCWVvcglyMTAscjEwLHIxMgotKwlhbmQJcjkscjkscjcKLSsJYW5kCXIxMCxyMTAscjgKLSsJZW9yCXI5LHI5LHIxMQotKwllb3IJcjEwLHIxMCxyMTIJCUAgQ2goZSxmLGcpCi0rCi0rCWxkcglyMTEsW3IxNCwjNF0JCUAgS1tpXS5sbwotKwlsZHIJcjEyLFtyMTQsIzBdCQlAIEtbaV0uaGkKLSsJbGRyCXI3LFtzcCwjMjQrMF0JQCBkLmxvCi0rCWxkcglyOCxbc3AsIzI0KzRdCUAgZC5oaQotKwotKwlhZGRzCXIzLHIzLHI5Ci0rCWFkYwlyNCxyNCxyMTAJCUAgVCArPSBDaChlLGYsZykKLSsJYWRkcwlyMyxyMyxyMTEKLSsJYWRjCXI0LHI0LHIxMgkJQCBUICs9IEtbaV0KLSsJYWRkcwlyNyxyNyxyMwotKwlhZGMJcjgscjgscjQJCUAgZCArPSBUCi0rCi0rCWFuZAlyOSxyMTEsIzB4ZmYKLSsJdGVxCXI5LCMxNDgKLSsJb3JyZXEJcjE0LHIxNCwjMQotKwotKwlsZHIJcjExLFtzcCwjOCswXQlAIGIubG8KLSsJbGRyCXIxMixbc3AsIzE2KzBdCUAgYy5sbwotKwlAIFNpZ21hMCh4KQkoUk9UUigoeCksMjgpIF4gUk9UUigoeCksMzQpIF4gUk9UUigoeCksMzkpKQotKwlAIExPCQlsbz4+MjheaGk8PDQgIF4gaGk+PjJebG88PDMwIF4gaGk+PjdebG88PDI1Ci0rCUAgSEkJCWhpPj4yOF5sbzw8NCAgXiBsbz4+Ml5oaTw8MzAgXiBsbz4+N15oaTw8MjUKLSsJbW92CXI5LHI1LGxzciMyOAotKwltb3YJcjEwLHI2LGxzciMyOAotKwllb3IJcjkscjkscjYsbHNsIzQKLSsJZW9yCXIxMCxyMTAscjUsbHNsIzQKLSsJZW9yCXI5LHI5LHI2LGxzciMyCi0rCWVvcglyMTAscjEwLHI1LGxzciMyCi0rCWVvcglyOSxyOSxyNSxsc2wjMzAKLSsJZW9yCXIxMCxyMTAscjYsbHNsIzMwCi0rCWVvcglyOSxyOSxyNixsc3IjNwotKwllb3IJcjEwLHIxMCxyNSxsc3IjNwotKwllb3IJcjkscjkscjUsbHNsIzI1Ci0rCWVvcglyMTAscjEwLHI2LGxzbCMyNQlAIFNpZ21hMChhKQotKwlhZGRzCXIzLHIzLHI5Ci0rCWFkYwlyNCxyNCxyMTAJCUAgVCArPSBTaWdtYTAoYSkKLSsKLSsJYW5kCXI5LHI1LHIxMQotKwlvcnIJcjUscjUscjExCi0rCWxkcglyMTAsW3NwLCM4KzRdCUAgYi5oaQotKwlsZHIJcjExLFtzcCwjMTYrNF0JQCBjLmhpCi0rCWFuZAlyNSxyNSxyMTIKLSsJb3JyCXI1LHI1LHI5CQlAIE1haihhLGIsYykubG8KLSsJYW5kCXIxMixyNixyMTAKLSsJb3JyCXI2LHI2LHIxMAotKwlhbmQJcjYscjYscjExCi0rCW9ycglyNixyNixyMTIJCUAgTWFqKGEsYixjKS5oaQotKwlhZGRzCXI1LHI1LHIzCi0rCWFkYwlyNixyNixyNAkJQCBoICs9IFQKLSsKLSsJc3ViCXNwLHNwLCM4Ci0rCWFkZAlyMTQscjE0LCM4Ci0rCXRzdAlyMTQsIzEKLSsJYmVxCS5MMDBfMTUKLSsJYmljCXIxNCxyMTQsIzEKLSsKLSsuTDE2Xzc5OgotKwlsZHIJcjksW3NwLCMxODQrMF0KLSsJbGRyCXIxMCxbc3AsIzE4NCs0XQotKwlsZHIJcjExLFtzcCwjODArMF0KLSsJbGRyCXIxMixbc3AsIzgwKzRdCi0rCi0rCUAgc2lnbWEwKHgpCShST1RSKCh4KSwxKSAgXiBST1RSKCh4KSw4KSAgXiAoKHgpPj43KSkKLSsJQCBMTwkJbG8+PjFeaGk8PDMxICBeIGxvPj44XmhpPDwyNCBeIGxvPj43XmhpPDwyNQotKwlAIEhJCQloaT4+MV5sbzw8MzEgIF4gaGk+PjhebG88PDI0IF4gaGk+PjcKLSsJbW92CXIzLHI5LGxzciMxCi0rCW1vdglyNCxyMTAsbHNyIzEKLSsJZW9yCXIzLHIzLHIxMCxsc2wjMzEKLSsJZW9yCXI0LHI0LHI5LGxzbCMzMQotKwllb3IJcjMscjMscjksbHNyIzgKLSsJZW9yCXI0LHI0LHIxMCxsc3IjOAotKwllb3IJcjMscjMscjEwLGxzbCMyNAotKwllb3IJcjQscjQscjksbHNsIzI0Ci0rCWVvcglyMyxyMyxyOSxsc3IjNwotKwllb3IJcjQscjQscjEwLGxzciM3Ci0rCWVvcglyMyxyMyxyMTAsbHNsIzI1Ci0rCi0rCUAgc2lnbWExKHgpCShST1RSKCh4KSwxOSkgXiBST1RSKCh4KSw2MSkgXiAoKHgpPj42KSkKLSsJQCBMTwkJbG8+PjE5XmhpPDwxMyBeIGhpPj4yOV5sbzw8MyBeIGxvPj42XmhpPDwyNgotKwlAIEhJCQloaT4+MTlebG88PDEzIF4gbG8+PjI5XmhpPDwzIF4gaGk+PjYKLSsJbW92CXI5LHIxMSxsc3IjMTkKLSsJbW92CXIxMCxyMTIsbHNyIzE5Ci0rCWVvcglyOSxyOSxyMTIsbHNsIzEzCi0rCWVvcglyMTAscjEwLHIxMSxsc2wjMTMKLSsJZW9yCXI5LHI5LHIxMixsc3IjMjkKLSsJZW9yCXIxMCxyMTAscjExLGxzciMyOQotKwllb3IJcjkscjkscjExLGxzbCMzCi0rCWVvcglyMTAscjEwLHIxMixsc2wjMwotKwllb3IJcjkscjkscjExLGxzciM2Ci0rCWVvcglyMTAscjEwLHIxMixsc3IjNgotKwllb3IJcjkscjkscjEyLGxzbCMyNgotKwotKwlsZHIJcjExLFtzcCwjMTIwKzBdCi0rCWxkcglyMTIsW3NwLCMxMjArNF0KLSsJYWRkcwlyMyxyMyxyOQotKwlhZGMJcjQscjQscjEwCi0rCi0rCWxkcglyOSxbc3AsIzE5MiswXQotKwlsZHIJcjEwLFtzcCwjMTkyKzRdCi0rCWFkZHMJcjMscjMscjExCi0rCWFkYwlyNCxyNCxyMTIKLSsJYWRkcwlyMyxyMyxyOQotKwlhZGMJcjQscjQscjEwCi0rCXN0cglyMyxbc3AsIzY0KzBdCi0rCXN0cglyNCxbc3AsIzY0KzRdCi0rCWxkcglyMTEsW3NwLCM1NiswXQlAIGgubG8KLSsJbGRyCXIxMixbc3AsIzU2KzRdCUAgaC5oaQotKwlAIFNpZ21hMSh4KQkoUk9UUigoeCksMTQpIF4gUk9UUigoeCksMTgpICBeIFJPVFIoKHgpLDQxKSkKLSsJQCBMTwkJbG8+PjE0XmhpPDwxOCBeIGxvPj4xOF5oaTw8MTQgXiBoaT4+OV5sbzw8MjMKLSsJQCBISQkJaGk+PjE0XmxvPDwxOCBeIGhpPj4xOF5sbzw8MTQgXiBsbz4+OV5oaTw8MjMKLSsJbW92CXI5LHI3LGxzciMxNAotKwltb3YJcjEwLHI4LGxzciMxNAotKwllb3IJcjkscjkscjgsbHNsIzE4Ci0rCWVvcglyMTAscjEwLHI3LGxzbCMxOAotKwllb3IJcjkscjkscjcsbHNyIzE4Ci0rCWVvcglyMTAscjEwLHI4LGxzciMxOAotKwllb3IJcjkscjkscjgsbHNsIzE0Ci0rCWVvcglyMTAscjEwLHI3LGxzbCMxNAotKwllb3IJcjkscjkscjgsbHNyIzkKLSsJZW9yCXIxMCxyMTAscjcsbHNyIzkKLSsJZW9yCXI5LHI5LHI3LGxzbCMyMwotKwllb3IJcjEwLHIxMCxyOCxsc2wjMjMJQCBTaWdtYTEoZSkKLSsJYWRkcwlyMyxyMyxyOQotKwlhZGMJcjQscjQscjEwCQlAIFQgKz0gU2lnbWExKGUpCi0rCWFkZHMJcjMscjMscjExCi0rCWFkYwlyNCxyNCxyMTIJCUAgVCArPSBoCi0rCi0rCWxkcglyOSxbc3AsIzQwKzBdCUAgZi5sbwotKwlsZHIJcjEwLFtzcCwjNDArNF0JQCBmLmhpCi0rCWxkcglyMTEsW3NwLCM0OCswXQlAIGcubG8KLSsJbGRyCXIxMixbc3AsIzQ4KzRdCUAgZy5oaQotKwlzdHIJcjcsW3NwLCMzMiswXQotKwlzdHIJcjgsW3NwLCMzMis0XQotKwlzdHIJcjUsW3NwLCMwKzBdCi0rCXN0cglyNixbc3AsIzArNF0KLSsKLSsJZW9yCXI5LHI5LHIxMQotKwllb3IJcjEwLHIxMCxyMTIKLSsJYW5kCXI5LHI5LHI3Ci0rCWFuZAlyMTAscjEwLHI4Ci0rCWVvcglyOSxyOSxyMTEKLSsJZW9yCXIxMCxyMTAscjEyCQlAIENoKGUsZixnKQotKwotKwlsZHIJcjExLFtyMTQsIzRdCQlAIEtbaV0ubG8KLSsJbGRyCXIxMixbcjE0LCMwXQkJQCBLW2ldLmhpCi0rCWxkcglyNyxbc3AsIzI0KzBdCUAgZC5sbwotKwlsZHIJcjgsW3NwLCMyNCs0XQlAIGQuaGkKLSsKLSsJYWRkcwlyMyxyMyxyOQotKwlhZGMJcjQscjQscjEwCQlAIFQgKz0gQ2goZSxmLGcpCi0rCWFkZHMJcjMscjMscjExCi0rCWFkYwlyNCxyNCxyMTIJCUAgVCArPSBLW2ldCi0rCWFkZHMJcjcscjcscjMKLSsJYWRjCXI4LHI4LHI0CQlAIGQgKz0gVAotKwotKwlhbmQJcjkscjExLCMweGZmCi0rCXRlcQlyOSwjMjMKLSsJb3JyZXEJcjE0LHIxNCwjMQotKwotKwlsZHIJcjExLFtzcCwjOCswXQlAIGIubG8KLSsJbGRyCXIxMixbc3AsIzE2KzBdCUAgYy5sbwotKwlAIFNpZ21hMCh4KQkoUk9UUigoeCksMjgpIF4gUk9UUigoeCksMzQpIF4gUk9UUigoeCksMzkpKQotKwlAIExPCQlsbz4+MjheaGk8PDQgIF4gaGk+PjJebG88PDMwIF4gaGk+PjdebG88PDI1Ci0rCUAgSEkJCWhpPj4yOF5sbzw8NCAgXiBsbz4+Ml5oaTw8MzAgXiBsbz4+N15oaTw8MjUKLSsJbW92CXI5LHI1LGxzciMyOAotKwltb3YJcjEwLHI2LGxzciMyOAotKwllb3IJcjkscjkscjYsbHNsIzQKLSsJZW9yCXIxMCxyMTAscjUsbHNsIzQKLSsJZW9yCXI5LHI5LHI2LGxzciMyCi0rCWVvcglyMTAscjEwLHI1LGxzciMyCi0rCWVvcglyOSxyOSxyNSxsc2wjMzAKLSsJZW9yCXIxMCxyMTAscjYsbHNsIzMwCi0rCWVvcglyOSxyOSxyNixsc3IjNwotKwllb3IJcjEwLHIxMCxyNSxsc3IjNwotKwllb3IJcjkscjkscjUsbHNsIzI1Ci0rCWVvcglyMTAscjEwLHI2LGxzbCMyNQlAIFNpZ21hMChhKQotKwlhZGRzCXIzLHIzLHI5Ci0rCWFkYwlyNCxyNCxyMTAJCUAgVCArPSBTaWdtYTAoYSkKLSsKLSsJYW5kCXI5LHI1LHIxMQotKwlvcnIJcjUscjUscjExCi0rCWxkcglyMTAsW3NwLCM4KzRdCUAgYi5oaQotKwlsZHIJcjExLFtzcCwjMTYrNF0JQCBjLmhpCi0rCWFuZAlyNSxyNSxyMTIKLSsJb3JyCXI1LHI1LHI5CQlAIE1haihhLGIsYykubG8KLSsJYW5kCXIxMixyNixyMTAKLSsJb3JyCXI2LHI2LHIxMAotKwlhbmQJcjYscjYscjExCi0rCW9ycglyNixyNixyMTIJCUAgTWFqKGEsYixjKS5oaQotKwlhZGRzCXI1LHI1LHIzCi0rCWFkYwlyNixyNixyNAkJQCBoICs9IFQKLSsKLSsJc3ViCXNwLHNwLCM4Ci0rCWFkZAlyMTQscjE0LCM4Ci0rCXRzdAlyMTQsIzEKLSsJYmVxCS5MMTZfNzkKLSsJYmljCXIxNCxyMTQsIzEKLSsKLSsJbGRyCXIzLFtzcCwjOCswXQotKwlsZHIJcjQsW3NwLCM4KzRdCi0rCWxkcglyOSwgW3IwLCMwKzRdCi0rCWxkcglyMTAsIFtyMCwjMCswXQotKwlsZHIJcjExLCBbcjAsIzgrNF0KLSsJbGRyCXIxMiwgW3IwLCM4KzBdCi0rCWFkZHMJcjkscjUscjkKLSsJYWRjCXIxMCxyNixyMTAKLSsJYWRkcwlyMTEscjMscjExCi0rCWFkYwlyMTIscjQscjEyCi0rCXN0cglyOSwgW3IwLCMwKzRdCi0rCXN0cglyMTAsIFtyMCwjMCswXQotKwlzdHIJcjExLCBbcjAsIzgrNF0KLSsJc3RyCXIxMiwgW3IwLCM4KzBdCi0rCi0rCWxkcglyNSxbc3AsIzE2KzBdCi0rCWxkcglyNixbc3AsIzE2KzRdCi0rCWxkcglyMyxbc3AsIzI0KzBdCi0rCWxkcglyNCxbc3AsIzI0KzRdCi0rCWxkcglyOSwgW3IwLCMxNis0XQotKwlsZHIJcjEwLCBbcjAsIzE2KzBdCi0rCWxkcglyMTEsIFtyMCwjMjQrNF0KLSsJbGRyCXIxMiwgW3IwLCMyNCswXQotKwlhZGRzCXI5LHI1LHI5Ci0rCWFkYwlyMTAscjYscjEwCi0rCWFkZHMJcjExLHIzLHIxMQotKwlhZGMJcjEyLHI0LHIxMgotKwlzdHIJcjksIFtyMCwjMTYrNF0KLSsJc3RyCXIxMCwgW3IwLCMxNiswXQotKwlzdHIJcjExLCBbcjAsIzI0KzRdCi0rCXN0cglyMTIsIFtyMCwjMjQrMF0KLSsKLSsJbGRyCXIzLFtzcCwjNDArMF0KLSsJbGRyCXI0LFtzcCwjNDArNF0KLSsJbGRyCXI5LCBbcjAsIzMyKzRdCi0rCWxkcglyMTAsIFtyMCwjMzIrMF0KLSsJbGRyCXIxMSwgW3IwLCM0MCs0XQotKwlsZHIJcjEyLCBbcjAsIzQwKzBdCi0rCWFkZHMJcjcscjcscjkKLSsJYWRjCXI4LHI4LHIxMAotKwlhZGRzCXIxMSxyMyxyMTEKLSsJYWRjCXIxMixyNCxyMTIKLSsJc3RyCXI3LFtyMCwjMzIrNF0KLSsJc3RyCXI4LFtyMCwjMzIrMF0KLSsJc3RyCXIxMSwgW3IwLCM0MCs0XQotKwlzdHIJcjEyLCBbcjAsIzQwKzBdCi0rCi0rCWxkcglyNSxbc3AsIzQ4KzBdCi0rCWxkcglyNixbc3AsIzQ4KzRdCi0rCWxkcglyMyxbc3AsIzU2KzBdCi0rCWxkcglyNCxbc3AsIzU2KzRdCi0rCWxkcglyOSwgW3IwLCM0OCs0XQotKwlsZHIJcjEwLCBbcjAsIzQ4KzBdCi0rCWxkcglyMTEsIFtyMCwjNTYrNF0KLSsJbGRyCXIxMiwgW3IwLCM1NiswXQotKwlhZGRzCXI5LHI1LHI5Ci0rCWFkYwlyMTAscjYscjEwCi0rCWFkZHMJcjExLHIzLHIxMQotKwlhZGMJcjEyLHI0LHIxMgotKwlzdHIJcjksIFtyMCwjNDgrNF0KLSsJc3RyCXIxMCwgW3IwLCM0OCswXQotKwlzdHIJcjExLCBbcjAsIzU2KzRdCi0rCXN0cglyMTIsIFtyMCwjNTYrMF0KLSsKLSsJYWRkCXNwLHNwLCM2NDAKLSsJc3ViCXIxNCxyMTQsIzY0MAotKwotKwl0ZXEJcjEscjIKLSsJYm5lCS5Mb29wCi0rCi0rCWFkZAlzcCxzcCwjOCo5CQlAIGRlc3Ryb3kgZnJhbWUKLSsJbGRtaWEJc3AhLHtyNC1yMTIsbHJ9Ci0rCXRzdAlsciwjMQotKwltb3ZlcQlwYyxscgkJCUAgYmUgYmluYXJ5IGNvbXBhdGlibGUgd2l0aCBWNCwgeWV0Ci0rCS53b3JkCTB4ZTEyZmZmMWUJCQlAIGludGVyb3BlcmFibGUgd2l0aCBUaHVtYiBJU0E6LSkKLSsuc2l6ZSAgIHNoYTUxMl9ibG9ja19kYXRhX29yZGVyLC4tc2hhNTEyX2Jsb2NrX2RhdGFfb3JkZXIKLSsuYXNjaXogICJTSEE1MTIgYmxvY2sgdHJhbnNmb3JtIGZvciBBUk12NCwgQ1JZUFRPR0FNUyBieSA8YXBwcm9Ab3BlbnNzbC5vcmc+IgpkaWZmIC0tZ2l0IGEvcGF0Y2hlcy9iYWRfdmVyc2lvbi5wYXRjaCBiL3BhdGNoZXMvYmFkX3ZlcnNpb24ucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4OGZlY2IuLjAwMDAwMDAKLS0tIGEvcGF0Y2hlcy9iYWRfdmVyc2lvbi5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLWRpZmYgLS1naXQgb3BlbnNzbC0wLjkuOG0vc3NsL3MzX3BrdC5jIG9wZW5zc2wtMC45LjhtL3NzbC9zM19wa3QuYwotaW5kZXggYjRhYmMxMS4uNTk2NGMxZCAxMDA2NDQKLS0tLSBvcGVuc3NsLTAuOS44bS9zc2wvczNfcGt0LmMKLSsrKyBvcGVuc3NsLTAuOS44bS9zc2wvczNfcGt0LmMKLUBAIC0yOTIsOSArMjkyLDEwIEBAIGFnYWluOgotIAkJCWlmICh2ZXJzaW9uICE9IHMtPnZlcnNpb24pCi0gCQkJCXsKLSAJCQkJU1NMZXJyKFNTTF9GX1NTTDNfR0VUX1JFQ09SRCxTU0xfUl9XUk9OR19WRVJTSU9OX05VTUJFUik7Ci0tCQkJCS8qIFNlbmQgYmFjayBlcnJvciB1c2luZyB0aGVpcgotLQkJCQkgKiB2ZXJzaW9uIG51bWJlciA6LSkgKi8KLS0JCQkJcy0+dmVyc2lvbj12ZXJzaW9uOwotKwkJCQkvKiBJZiB0aGUgbWFqb3IgdmVyc2lvbnMgbWF0Y2ggdGhlbiB3ZSdsbCBzZW5kCi0rCQkJCSAqIHRoZSBlcnJvciBiYWNrIHVzaW5nIHRoZSBwZWVyJ3MgdmVyc2lvbi4gKi8KLSsJCQkJaWYgKChzLT52ZXJzaW9uICYgMHhGRjAwKSA9PSAodmVyc2lvbiAmIDB4RkYwMCkpCi0rCQkJCQlzLT52ZXJzaW9uID0gdmVyc2lvbjsKLSAJCQkJYWw9U1NMX0FEX1BST1RPQ09MX1ZFUlNJT047Ci0gCQkJCWdvdG8gZl9lcnI7Ci0gCQkJCX0KZGlmZiAtLWdpdCBhL3BhdGNoZXMvY3J5cHRvX0FuZHJvaWQubWsgYi9wYXRjaGVzL2NyeXB0b19BbmRyb2lkLm1rCmluZGV4IDIzZTU2YjAuLjE0YmFjOGUgMTAwNjQ0Ci0tLSBhL3BhdGNoZXMvY3J5cHRvX0FuZHJvaWQubWsKKysrIGIvcGF0Y2hlcy9jcnlwdG9fQW5kcm9pZC5tawpAQCAtMywxMSArMywxMSBAQAogCiBpZmVxICgkKFRBUkdFVF9BUkNIKSxhcm0pCiAJTE9DQUxfQ0ZMQUdTICs9IC1ET1BFTlNTTF9CTl9BU01fTU9OVCAtREFFU19BU00gLURTSEExX0FTTSAtRFNIQTI1Nl9BU00gLURTSEE1MTJfQVNNCi0JTE9DQUxfU1JDX0ZJTEVTOj0gMC45LjktZGV2L2JuL2FybXY0LW1vbnQucyBcCi0JICAgICAgICAgICAgICAgICAgMC45LjktZGV2L2Flcy9hZXMtYXJtdjQucyBcCi0JICAgICAgICAgICAgICAgICAgMC45LjktZGV2L3NoYS9zaGExLWFybXY0LWxhcmdlLnMgXAotCSAgICAgICAgICAgICAgICAgIDAuOS45LWRldi9zaGEvc2hhMjU2LWFybXY0LnMgXAotCSAgICAgICAgICAgICAgICAgIDAuOS45LWRldi9zaGEvc2hhNTEyLWFybXY0LnMKKwlMT0NBTF9TUkNfRklMRVM6PSBhZXMvYXNtL2Flcy1hcm12NC5zIFwKKwkgICAgICAgICAgICAgICAgICBibi9hc20vYXJtdjQtbW9udC5zIFwKKwkgICAgICAgICAgICAgICAgICBzaGEvYXNtL3NoYTEtYXJtdjQtbGFyZ2UucyBcCisJICAgICAgICAgICAgICAgICAgc2hhL2FzbS9zaGEyNTYtYXJtdjQucyBcCisJICAgICAgICAgICAgICAgICAgc2hhL2FzbS9zaGE1MTItYXJtdjQucwogZWxzZQogCUxPQ0FMX1NSQ19GSUxFUzo9IGFlcy9hZXNfY29yZS5jCiBlbmRpZgpAQCAtMjMsMjU1ICsyMywyODEgQEAKIAltZW1fY2xyLmMgXAogCW1lbV9kYmcuYyBcCiAJY3ZlcnNpb24uYyBcCi0JZHluX2xjay5jIFwKIAlleF9kYXRhLmMgXAotCXRtZGlmZi5jIFwKIAljcHRfZXJyLmMgXAogCWViY2RpYy5jIFwKIAl1aWQuYyBcCiAJb190aW1lLmMgXAogCW9fc3RyLmMgXAogCW9fZGlyLmMgXAotCWFlcy9hZXNfbWlzYy5jIFwKLQlhZXMvYWVzX2VjYi5jIFwKIAlhZXMvYWVzX2NiYy5jIFwKIAlhZXMvYWVzX2NmYi5jIFwKLQlhZXMvYWVzX29mYi5jIFwKIAlhZXMvYWVzX2N0ci5jIFwKKwlhZXMvYWVzX2VjYi5jIFwKKwlhZXMvYWVzX21pc2MuYyBcCisJYWVzL2Flc19vZmIuYyBcCiAJYWVzL2Flc193cmFwLmMgXAotCWFzbjEvYV9vYmplY3QuYyBcCiAJYXNuMS9hX2JpdHN0ci5jIFwKLQlhc24xL2FfdXRjdG0uYyBcCisJYXNuMS9hX2Jvb2wuYyBcCisJYXNuMS9hX2J5dGVzLmMgXAorCWFzbjEvYV9kMmlfZnAuYyBcCisJYXNuMS9hX2RpZ2VzdC5jIFwKKwlhc24xL2FfZHVwLmMgXAorCWFzbjEvYV9lbnVtLmMgXAogCWFzbjEvYV9nZW50bS5jIFwKLQlhc24xL2FfdGltZS5jIFwKKwlhc24xL2FfaTJkX2ZwLmMgXAogCWFzbjEvYV9pbnQuYyBcCisJYXNuMS9hX21ic3RyLmMgXAorCWFzbjEvYV9vYmplY3QuYyBcCiAJYXNuMS9hX29jdGV0LmMgXAogCWFzbjEvYV9wcmludC5jIFwKLQlhc24xL2FfdHlwZS5jIFwKIAlhc24xL2Ffc2V0LmMgXAotCWFzbjEvYV9kdXAuYyBcCi0JYXNuMS9hX2QyaV9mcC5jIFwKLQlhc24xL2FfaTJkX2ZwLmMgXAotCWFzbjEvYV9lbnVtLmMgXAotCWFzbjEvYV91dGY4LmMgXAogCWFzbjEvYV9zaWduLmMgXAotCWFzbjEvYV9kaWdlc3QuYyBcCi0JYXNuMS9hX3ZlcmlmeS5jIFwKLQlhc24xL2FfbWJzdHIuYyBcCiAJYXNuMS9hX3N0cmV4LmMgXAotCWFzbjEveF9hbGdvci5jIFwKLQlhc24xL3hfdmFsLmMgXAotCWFzbjEveF9wdWJrZXkuYyBcCi0JYXNuMS94X3NpZy5jIFwKLQlhc24xL3hfcmVxLmMgXAotCWFzbjEveF9hdHRyaWIuYyBcCi0JYXNuMS94X2JpZ251bS5jIFwKLQlhc24xL3hfbG9uZy5jIFwKLQlhc24xL3hfbmFtZS5jIFwKLQlhc24xL3hfeDUwOS5jIFwKLQlhc24xL3hfeDUwOWEuYyBcCi0JYXNuMS94X2NybC5jIFwKLQlhc24xL3hfaW5mby5jIFwKLQlhc24xL3hfc3BraS5jIFwKLQlhc24xL25zc2VxLmMgXAotCWFzbjEvZDJpX3B1LmMgXAorCWFzbjEvYV9zdHJuaWQuYyBcCisJYXNuMS9hX3RpbWUuYyBcCisJYXNuMS9hX3R5cGUuYyBcCisJYXNuMS9hX3V0Y3RtLmMgXAorCWFzbjEvYV91dGY4LmMgXAorCWFzbjEvYV92ZXJpZnkuYyBcCisJYXNuMS9hbWV0aF9saWIuYyBcCisJYXNuMS9hc24xX2Vyci5jIFwKKwlhc24xL2FzbjFfZ2VuLmMgXAorCWFzbjEvYXNuMV9saWIuYyBcCisJYXNuMS9hc24xX3Bhci5jIFwKKwlhc24xL2Fzbl9taW1lLmMgXAorCWFzbjEvYXNuX21vaWQuYyBcCisJYXNuMS9hc25fcGFjay5jIFwKKwlhc24xL2Jpb19hc24xLmMgXAorCWFzbjEvYmlvX25kZWYuYyBcCiAJYXNuMS9kMmlfcHIuYyBcCi0JYXNuMS9pMmRfcHUuYyBcCi0JYXNuMS9pMmRfcHIuYyBcCi0JYXNuMS90X3JlcS5jIFwKLQlhc24xL3RfeDUwOS5jIFwKLQlhc24xL3RfeDUwOWEuYyBcCi0JYXNuMS90X2NybC5jIFwKLQlhc24xL3RfcGtleS5jIFwKLQlhc24xL3Rfc3BraS5jIFwKLQlhc24xL3RfYml0c3QuYyBcCi0JYXNuMS90YXNuX25ldy5jIFwKLQlhc24xL3Rhc25fZnJlLmMgXAotCWFzbjEvdGFzbl9lbmMuYyBcCi0JYXNuMS90YXNuX2RlYy5jIFwKLQlhc24xL3Rhc25fdXRsLmMgXAotCWFzbjEvdGFzbl90eXAuYyBcCisJYXNuMS9kMmlfcHUuYyBcCisJYXNuMS9ldnBfYXNuMS5jIFwKKwlhc24xL2ZfZW51bS5jIFwKIAlhc24xL2ZfaW50LmMgXAogCWFzbjEvZl9zdHJpbmcuYyBcCisJYXNuMS9pMmRfcHIuYyBcCisJYXNuMS9pMmRfcHUuYyBcCiAJYXNuMS9uX3BrZXkuYyBcCi0JYXNuMS9mX2VudW0uYyBcCi0JYXNuMS9hX2hkci5jIFwKLQlhc24xL3hfcGtleS5jIFwKLQlhc24xL2FfYm9vbC5jIFwKLQlhc24xL3hfZXh0ZW4uYyBcCi0JYXNuMS9hc24xX3Bhci5jIFwKLQlhc24xL2FzbjFfbGliLmMgXAotCWFzbjEvYXNuMV9lcnIuYyBcCi0JYXNuMS9hX21ldGguYyBcCi0JYXNuMS9hX2J5dGVzLmMgXAotCWFzbjEvYV9zdHJuaWQuYyBcCi0JYXNuMS9ldnBfYXNuMS5jIFwKLQlhc24xL2Fzbl9wYWNrLmMgXAorCWFzbjEvbnNzZXEuYyBcCiAJYXNuMS9wNV9wYmUuYyBcCiAJYXNuMS9wNV9wYmV2Mi5jIFwKIAlhc24xL3A4X3BrZXkuYyBcCi0JYXNuMS9hc25fbW9pZC5jIFwKLQlhc24xL2FzbjFfZ2VuLmMgXAotCWFzbjEvYXNuX21pbWUuYyBcCi0JYmlvL2Jpb19saWIuYyBcCisJYXNuMS90X2JpdHN0LmMgXAorCWFzbjEvdF9jcmwuYyBcCisJYXNuMS90X3BrZXkuYyBcCisJYXNuMS90X3JlcS5jIFwKKwlhc24xL3Rfc3BraS5jIFwKKwlhc24xL3RfeDUwOS5jIFwKKwlhc24xL3RfeDUwOWEuYyBcCisJYXNuMS90YXNuX2RlYy5jIFwKKwlhc24xL3Rhc25fZW5jLmMgXAorCWFzbjEvdGFzbl9mcmUuYyBcCisJYXNuMS90YXNuX25ldy5jIFwKKwlhc24xL3Rhc25fcHJuLmMgXAorCWFzbjEvdGFzbl90eXAuYyBcCisJYXNuMS90YXNuX3V0bC5jIFwKKwlhc24xL3hfYWxnb3IuYyBcCisJYXNuMS94X2F0dHJpYi5jIFwKKwlhc24xL3hfYmlnbnVtLmMgXAorCWFzbjEveF9jcmwuYyBcCisJYXNuMS94X2V4dGVuLmMgXAorCWFzbjEveF9pbmZvLmMgXAorCWFzbjEveF9sb25nLmMgXAorCWFzbjEveF9uYW1lLmMgXAorCWFzbjEveF9ueDUwOS5jIFwKKwlhc24xL3hfcGtleS5jIFwKKwlhc24xL3hfcHVia2V5LmMgXAorCWFzbjEveF9yZXEuYyBcCisJYXNuMS94X3NpZy5jIFwKKwlhc24xL3hfc3BraS5jIFwKKwlhc24xL3hfdmFsLmMgXAorCWFzbjEveF94NTA5LmMgXAorCWFzbjEveF94NTA5YS5jIFwKKwliaW8vYl9kdW1wLmMgXAorCWJpby9iX3ByaW50LmMgXAorCWJpby9iX3NvY2suYyBcCisJYmlvL2JmX2J1ZmYuYyBcCisJYmlvL2JmX25iaW8uYyBcCisJYmlvL2JmX251bGwuYyBcCiAJYmlvL2Jpb19jYi5jIFwKIAliaW8vYmlvX2Vyci5jIFwKLQliaW8vYnNzX21lbS5jIFwKLQliaW8vYnNzX251bGwuYyBcCisJYmlvL2Jpb19saWIuYyBcCisJYmlvL2Jzc19hY3B0LmMgXAorCWJpby9ic3NfYmlvLmMgXAorCWJpby9ic3NfY29ubi5jIFwKKwliaW8vYnNzX2RncmFtLmMgXAogCWJpby9ic3NfZmQuYyBcCiAJYmlvL2Jzc19maWxlLmMgXAotCWJpby9ic3Nfc29jay5jIFwKLQliaW8vYnNzX2Nvbm4uYyBcCi0JYmlvL2JmX251bGwuYyBcCi0JYmlvL2JmX2J1ZmYuYyBcCi0JYmlvL2JfcHJpbnQuYyBcCi0JYmlvL2JfZHVtcC5jIFwKLQliaW8vYl9zb2NrLmMgXAotCWJpby9ic3NfYWNwdC5jIFwKLQliaW8vYmZfbmJpby5jIFwKIAliaW8vYnNzX2xvZy5jIFwKLQliaW8vYnNzX2Jpby5jIFwKLQliaW8vYnNzX2RncmFtLmMgXAorCWJpby9ic3NfbWVtLmMgXAorCWJpby9ic3NfbnVsbC5jIFwKKwliaW8vYnNzX3NvY2suYyBcCiAJYm4vYm5fYWRkLmMgXAotCWJuL2JuX2Rpdi5jIFwKLQlibi9ibl9leHAuYyBcCi0JYm4vYm5fbGliLmMgXAotCWJuL2JuX2N0eC5jIFwKLQlibi9ibl9tdWwuYyBcCi0JYm4vYm5fbW9kLmMgXAotCWJuL2JuX29wdC5jIFwKLQlibi9ibl9wcmludC5jIFwKLQlibi9ibl9yYW5kLmMgXAotCWJuL2JuX3NoaWZ0LmMgXAotCWJuL2JuX3dvcmQuYyBcCi0JYm4vYm5fYmxpbmQuYyBcCi0JYm4vYm5fa3Jvbi5jIFwKLQlibi9ibl9zcXJ0LmMgXAotCWJuL2JuX2djZC5jIFwKLQlibi9ibl9wcmltZS5jIFwKLQlibi9ibl9lcnIuYyBcCi0JYm4vYm5fc3FyLmMgXAogCWJuL2JuX2FzbS5jIFwKLQlibi9ibl9yZWNwLmMgXAorCWJuL2JuX2JsaW5kLmMgXAorCWJuL2JuX2N0eC5jIFwKKwlibi9ibl9kaXYuYyBcCisJYm4vYm5fZXJyLmMgXAorCWJuL2JuX2V4cC5jIFwKKwlibi9ibl9leHAyLmMgXAorCWJuL2JuX2djZC5jIFwKKwlibi9ibl9nZjJtLmMgXAorCWJuL2JuX2tyb24uYyBcCisJYm4vYm5fbGliLmMgXAorCWJuL2JuX21vZC5jIFwKIAlibi9ibl9tb250LmMgXAogCWJuL2JuX21waS5jIFwKLQlibi9ibl9leHAyLmMgXAorCWJuL2JuX211bC5jIFwKIAlibi9ibl9uaXN0LmMgXAotCWJuL2JuX2dmMm0uYyBcCi0JYm4vYm5feDkzMXAuYyBcCi0JYnVmZmVyL2J1ZmZlci5jIFwKKwlibi9ibl9wcmltZS5jIFwKKwlibi9ibl9wcmludC5jIFwKKwlibi9ibl9yYW5kLmMgXAorCWJuL2JuX3JlY3AuYyBcCisJYm4vYm5fc2hpZnQuYyBcCisJYm4vYm5fc3FyLmMgXAorCWJuL2JuX3NxcnQuYyBcCisJYm4vYm5fd29yZC5jIFwKIAlidWZmZXIvYnVmX2Vyci5jIFwKLQlidWZmZXIvYnVmX3N0ci5jIFwKLQljb21wL2NvbXBfbGliLmMgXAotCWNvbXAvY29tcF9lcnIuYyBcCisJYnVmZmVyL2J1ZmZlci5jIFwKIAljb21wL2NfcmxlLmMgXAogCWNvbXAvY196bGliLmMgXAotCWNvbmYvY29uZl9lcnIuYyBcCi0JY29uZi9jb25mX2xpYi5jIFwKKwljb21wL2NvbXBfZXJyLmMgXAorCWNvbXAvY29tcF9saWIuYyBcCiAJY29uZi9jb25mX2FwaS5jIFwKIAljb25mL2NvbmZfZGVmLmMgXAotCWNvbmYvY29uZl9tb2QuYyBcCisJY29uZi9jb25mX2Vyci5jIFwKKwljb25mL2NvbmZfbGliLmMgXAogCWNvbmYvY29uZl9tYWxsLmMgXAorCWNvbmYvY29uZl9tb2QuYyBcCiAJY29uZi9jb25mX3NhcC5jIFwKIAlkZXMvY2JjX2Nrc20uYyBcCiAJZGVzL2NiY19lbmMuYyBcCisJZGVzL2NmYjY0ZWRlLmMgXAogCWRlcy9jZmI2NGVuYy5jIFwKIAlkZXMvY2ZiX2VuYy5jIFwKLQlkZXMvZGVzX2xpYi5jIFwKKwlkZXMvZGVzX2VuYy5jIFwKKwlkZXMvZGVzX29sZC5jIFwKKwlkZXMvZGVzX29sZDIuYyBcCiAJZGVzL2VjYjNfZW5jLmMgXAogCWRlcy9lY2JfZW5jLmMgXAorCWRlcy9lZGVfY2JjbV9lbmMuYyBcCiAJZGVzL2VuY19yZWFkLmMgXAogCWRlcy9lbmNfd3JpdC5jIFwKIAlkZXMvZmNyeXB0LmMgXAorCWRlcy9mY3J5cHRfYi5jIFwKKwlkZXMvb2ZiNjRlZGUuYyBcCiAJZGVzL29mYjY0ZW5jLmMgXAogCWRlcy9vZmJfZW5jLmMgXAogCWRlcy9wY2JjX2VuYy5jIFwKIAlkZXMvcXVkX2Nrc20uYyBcCiAJZGVzL3JhbmRfa2V5LmMgXAorCWRlcy9yZWFkMnB3ZC5jIFwKIAlkZXMvcnBjX2VuYy5jIFwKIAlkZXMvc2V0X2tleS5jIFwKLQlkZXMvZGVzX2VuYy5jIFwKLQlkZXMvZmNyeXB0X2IuYyBcCi0JZGVzL3hjYmNfZW5jLmMgXAogCWRlcy9zdHIya2V5LmMgXAotCWRlcy9jZmI2NGVkZS5jIFwKLQlkZXMvb2ZiNjRlZGUuYyBcCi0JZGVzL2VkZV9jYmNtX2VuYy5jIFwKLQlkZXMvZGVzX29sZC5jIFwKLQlkZXMvZGVzX29sZDIuYyBcCi0JZGVzL3JlYWQycHdkLmMgXAorCWRlcy94Y2JjX2VuYy5jIFwKKwlkaC9kaF9hbWV0aC5jIFwKKwlkaC9kaF9hc24xLmMgXAorCWRoL2RoX2NoZWNrLmMgXAorCWRoL2RoX2RlcHIuYyBcCisJZGgvZGhfZXJyLmMgXAorCWRoL2RoX2dlbi5jIFwKKwlkaC9kaF9rZXkuYyBcCisJZGgvZGhfbGliLmMgXAorCWRoL2RoX3BtZXRoLmMgXAorCWRzYS9kc2FfYW1ldGguYyBcCisJZHNhL2RzYV9hc24xLmMgXAorCWRzYS9kc2FfZGVwci5jIFwKKwlkc2EvZHNhX2Vyci5jIFwKKwlkc2EvZHNhX2dlbi5jIFwKKwlkc2EvZHNhX2tleS5jIFwKKwlkc2EvZHNhX2xpYi5jIFwKKwlkc2EvZHNhX29zc2wuYyBcCisJZHNhL2RzYV9wbWV0aC5jIFwKKwlkc2EvZHNhX3Bybi5jIFwKKwlkc2EvZHNhX3NpZ24uYyBcCisJZHNhL2RzYV92cmYuYyBcCiAJZHNvL2Rzb19kbC5jIFwKIAlkc28vZHNvX2RsZmNuLmMgXAogCWRzby9kc29fZXJyLmMgXAogCWRzby9kc29fbGliLmMgXAogCWRzby9kc29fbnVsbC5jIFwKIAlkc28vZHNvX29wZW5zc2wuYyBcCi0JZHNvL2Rzb193aW4zMi5jIFwKIAlkc28vZHNvX3Ztcy5jIFwKKwlkc28vZHNvX3dpbjMyLmMgXAogCWVyci9lcnIuYyBcCi0JZXJyL2Vycl9iaW8uYyBcCi0JZXJyL2Vycl9kZWYuYyBcCiAJZXJyL2Vycl9hbGwuYyBcCiAJZXJyL2Vycl9wcm4uYyBcCi0JZXJyL2Vycl9zdHIuYyBcCi0JZXZwL2VuY29kZS5jIFwKKwlldnAvYmlvX2I2NC5jIFwKKwlldnAvYmlvX2VuYy5jIFwKKwlldnAvYmlvX21kLmMgXAorCWV2cC9iaW9fb2suYyBcCisJZXZwL2NfYWxsLmMgXAorCWV2cC9jX2FsbGMuYyBcCisJZXZwL2NfYWxsZC5jIFwKIAlldnAvZGlnZXN0LmMgXAotCWV2cC9lbmNfbWluLmMgXAotCWV2cC9ldnBfY25mLmMgXAotCWV2cC9ldnBfZW5jLmMgXAotCWV2cC9ldnBfa2V5LmMgXAotCWV2cC9ldnBfYWNuZi5jIFwKKwlldnAvZV9hZXMuYyBcCiAJZXZwL2VfZGVzLmMgXAogCWV2cC9lX2RlczMuYyBcCi0JZXZwL2VfcmM0LmMgXAotCWV2cC9lX2Flcy5jIFwKLQlldnAvbmFtZXMuYyBcCi0JZXZwL2VfeGNiY19kLmMgXAorCWV2cC9lX251bGwuYyBcCisJZXZwL2Vfb2xkLmMgXAogCWV2cC9lX3JjMi5jIFwKKwlldnAvZV9yYzQuYyBcCiAJZXZwL2VfcmM1LmMgXAotCWV2cC9tX251bGwuYyBcCisJZXZwL2VfeGNiY19kLmMgXAorCWV2cC9lbmNvZGUuYyBcCisJZXZwL2V2cF9hY25mLmMgXAorCWV2cC9ldnBfZW5jLmMgXAorCWV2cC9ldnBfZXJyLmMgXAorCWV2cC9ldnBfa2V5LmMgXAorCWV2cC9ldnBfbGliLmMgXAorCWV2cC9ldnBfcGJlLmMgXAorCWV2cC9ldnBfcGtleS5jIFwKKwlldnAvbV9kc3MuYyBcCisJZXZwL21fZHNzMS5jIFwKIAlldnAvbV9tZDIuYyBcCiAJZXZwL21fbWQ0LmMgXAogCWV2cC9tX21kNS5jIFwKKwlldnAvbV9tZGMyLmMgXAorCWV2cC9tX251bGwuYyBcCisJZXZwL21fcmlwZW1kLmMgXAogCWV2cC9tX3NoYS5jIFwKIAlldnAvbV9zaGExLmMgXAotCWV2cC9tX2Rzcy5jIFwKLQlldnAvbV9kc3MxLmMgXAotCWV2cC9tX21kYzIuYyBcCisJZXZwL21fc2lndmVyLmMgXAorCWV2cC9tX3dwLmMgXAorCWV2cC9uYW1lcy5jIFwKKwlldnAvcDVfY3JwdC5jIFwKKwlldnAvcDVfY3JwdDIuYyBcCisJZXZwL3BfZGVjLmMgXAorCWV2cC9wX2VuYy5jIFwKKwlldnAvcF9saWIuYyBcCiAJZXZwL3Bfb3Blbi5jIFwKIAlldnAvcF9zZWFsLmMgXAogCWV2cC9wX3NpZ24uYyBcCiAJZXZwL3BfdmVyaWZ5LmMgXAotCWV2cC9wX2xpYi5jIFwKLQlldnAvcF9lbmMuYyBcCi0JZXZwL3BfZGVjLmMgXAotCWV2cC9iaW9fbWQuYyBcCi0JZXZwL2Jpb19iNjQuYyBcCi0JZXZwL2Jpb19lbmMuYyBcCi0JZXZwL2V2cF9lcnIuYyBcCi0JZXZwL2VfbnVsbC5jIFwKLQlldnAvY19hbGwuYyBcCi0JZXZwL2NfYWxsYy5jIFwKLQlldnAvY19hbGxkLmMgXAotCWV2cC9ldnBfbGliLmMgXAotCWV2cC9iaW9fb2suYyBcCi0JZXZwL2V2cF9wa2V5LmMgXAotCWV2cC9ldnBfcGJlLmMgXAotCWV2cC9wNV9jcnB0LmMgXAotCWV2cC9wNV9jcnB0Mi5jIFwKLQlldnAvZV9vbGQuYyBcCisJZXZwL3BtZXRoX2ZuLmMgXAorCWV2cC9wbWV0aF9nbi5jIFwKKwlldnAvcG1ldGhfbGliLmMgXAorCWhtYWMvaG1fYW1ldGguYyBcCisJaG1hYy9obV9wbWV0aC5jIFwKIAlobWFjL2htYWMuYyBcCiAJa3JiNS9rcmI1X2Fzbi5jIFwKLQlsaGFzaC9saGFzaC5jIFwKIAlsaGFzaC9saF9zdGF0cy5jIFwKKwlsaGFzaC9saGFzaC5jIFwKIAltZDQvbWQ0X2Rnc3QuYyBcCiAJbWQ0L21kNF9vbmUuYyBcCiAJbWQ1L21kNV9kZ3N0LmMgXAogCW1kNS9tZDVfb25lLmMgXAorCW1vZGVzL2NiYzEyOC5jIFwKKwltb2Rlcy9jZmIxMjguYyBcCisJbW9kZXMvY3RyMTI4LmMgXAorCW1vZGVzL29mYjEyOC5jIFwKIAlvYmplY3RzL29fbmFtZXMuYyBcCiAJb2JqZWN0cy9vYmpfZGF0LmMgXAotCW9iamVjdHMvb2JqX2xpYi5jIFwKIAlvYmplY3RzL29ial9lcnIuYyBcCisJb2JqZWN0cy9vYmpfbGliLmMgXAorCW9iamVjdHMvb2JqX3hyZWYuYyBcCiAJb2NzcC9vY3NwX2Fzbi5jIFwKIAlvY3NwL29jc3BfY2wuYyBcCiAJb2NzcC9vY3NwX2Vyci5jIFwKQEAgLTI4MSwxNyArMzA3LDE4IEBACiAJb2NzcC9vY3NwX3Bybi5jIFwKIAlvY3NwL29jc3Bfc3J2LmMgXAogCW9jc3Avb2NzcF92ZnkuYyBcCi0JcGVtL3BlbV9zaWduLmMgXAotCXBlbS9wZW1fc2VhbC5jIFwKLQlwZW0vcGVtX2luZm8uYyBcCi0JcGVtL3BlbV9saWIuYyBcCiAJcGVtL3BlbV9hbGwuYyBcCiAJcGVtL3BlbV9lcnIuYyBcCi0JcGVtL3BlbV94NTA5LmMgXAotCXBlbS9wZW1feGF1eC5jIFwKKwlwZW0vcGVtX2luZm8uYyBcCisJcGVtL3BlbV9saWIuYyBcCiAJcGVtL3BlbV9vdGguYyBcCiAJcGVtL3BlbV9wazguYyBcCiAJcGVtL3BlbV9wa2V5LmMgXAorCXBlbS9wZW1fc2VhbC5jIFwKKwlwZW0vcGVtX3NpZ24uYyBcCisJcGVtL3BlbV94NTA5LmMgXAorCXBlbS9wZW1feGF1eC5jIFwKKwlwZW0vcHZrZm10LmMgXAogCXBrY3MxMi9wMTJfYWRkLmMgXAogCXBrY3MxMi9wMTJfYXNuLmMgXAogCXBrY3MxMi9wMTJfYXR0ci5jIFwKQEAgLTMwMiwxMzkgKzMyOSwxMjMgQEAKIAlwa2NzMTIvcDEyX2tleS5jIFwKIAlwa2NzMTIvcDEyX2tpc3MuYyBcCiAJcGtjczEyL3AxMl9tdXRsLmMgXAotCXBrY3MxMi9wMTJfdXRsLmMgXAogCXBrY3MxMi9wMTJfbnBhcy5jIFwKLQlwa2NzMTIvcGsxMmVyci5jIFwKIAlwa2NzMTIvcDEyX3A4ZC5jIFwKIAlwa2NzMTIvcDEyX3A4ZS5jIFwKKwlwa2NzMTIvcDEyX3V0bC5jIFwKKwlwa2NzMTIvcGsxMmVyci5jIFwKIAlwa2NzNy9wazdfYXNuMS5jIFwKLQlwa2NzNy9wazdfbGliLmMgXAotCXBrY3M3L3BrY3M3ZXJyLmMgXAotCXBrY3M3L3BrN19kb2l0LmMgXAotCXBrY3M3L3BrN19zbWltZS5jIFwKIAlwa2NzNy9wazdfYXR0ci5jIFwKKwlwa2NzNy9wazdfZG9pdC5jIFwKKwlwa2NzNy9wazdfbGliLmMJXAogCXBrY3M3L3BrN19taW1lLmMgXAorCXBrY3M3L3BrN19zbWltZS5jIFwKKwlwa2NzNy9wa2NzN2Vyci5jIFwKIAlyYW5kL21kX3JhbmQuYyBcCi0JcmFuZC9yYW5kZmlsZS5jIFwKLQlyYW5kL3JhbmRfbGliLmMgXAotCXJhbmQvcmFuZF9lcnIuYyBcCiAJcmFuZC9yYW5kX2VnZC5jIFwKKwlyYW5kL3JhbmRfZXJyLmMgXAorCXJhbmQvcmFuZF9saWIuYyBcCiAJcmFuZC9yYW5kX3VuaXguYyBcCisJcmFuZC9yYW5kZmlsZS5jIFwKKwlyYzIvcmMyX2NiYy5jIFwKIAlyYzIvcmMyX2VjYi5jIFwKIAlyYzIvcmMyX3NrZXkuYyBcCi0JcmMyL3JjMl9jYmMuYyBcCiAJcmMyL3JjMmNmYjY0LmMgXAogCXJjMi9yYzJvZmI2NC5jIFwKLQlyYzQvcmM0X3NrZXkuYyBcCiAJcmM0L3JjNF9lbmMuYyBcCi0JcnNhL3JzYV94OTMxZy5jIFwKKwlyYzQvcmM0X3NrZXkuYyBcCisJcmlwZW1kL3JtZF9kZ3N0LmMgXAorCXJpcGVtZC9ybWRfb25lLmMgXAorCXJzYS9yc2FfYW1ldGguYyBcCisJcnNhL3JzYV9hc24xLmMgXAorCXJzYS9yc2FfY2hrLmMgXAogCXJzYS9yc2FfZWF5LmMgXAotCXJzYS9yc2FfZW5nLmMgXAorCXJzYS9yc2FfZXJyLmMgXAogCXJzYS9yc2FfZ2VuLmMgXAogCXJzYS9yc2FfbGliLmMgXAotCXJzYS9yc2Ffc2lnbi5jIFwKLQlyc2EvcnNhX3Nhb3MuYyBcCi0JcnNhL3JzYV9lcnIuYyBcCi0JcnNhL3JzYV9wazEuYyBcCi0JcnNhL3JzYV9zc2wuYyBcCiAJcnNhL3JzYV9ub25lLmMgXAotCXJzYS9yc2Ffb2FlcC5jIFwKLQlyc2EvcnNhX2Noay5jIFwKIAlyc2EvcnNhX251bGwuYyBcCisJcnNhL3JzYV9vYWVwLmMgXAorCXJzYS9yc2FfcGsxLmMgXAorCXJzYS9yc2FfcG1ldGguYyBcCisJcnNhL3JzYV9wcm4uYyBcCiAJcnNhL3JzYV9wc3MuYyBcCisJcnNhL3JzYV9zYW9zLmMgXAorCXJzYS9yc2Ffc2lnbi5jIFwKKwlyc2EvcnNhX3NzbC5jIFwKIAlyc2EvcnNhX3g5MzEuYyBcCi0JcnNhL3JzYV9hc24xLmMgXAotCXNoYS9zaGFfZGdzdC5jIFwKLQlzaGEvc2hhMWRnc3QuYyBcCi0Jc2hhL3NoYV9vbmUuYyBcCiAJc2hhL3NoYTFfb25lLmMgXAorCXNoYS9zaGExZGdzdC5jIFwKIAlzaGEvc2hhMjU2LmMgXAogCXNoYS9zaGE1MTIuYyBcCisJc2hhL3NoYV9kZ3N0LmMgXAorCXNoYS9zaGFfb25lLmMgXAogCXN0YWNrL3N0YWNrLmMgXAorCXRzL3RzX2Vyci5jIFwKIAl0eHRfZGIvdHh0X2RiLmMgXAorCXVpL3VpX2NvbXBhdC5jIFwKIAl1aS91aV9lcnIuYyBcCiAJdWkvdWlfbGliLmMgXAogCXVpL3VpX29wZW5zc2wuYyBcCiAJdWkvdWlfdXRpbC5jIFwKLQl1aS91aV9jb21wYXQuYyBcCi0JeDUwOS94NTA5X2RlZi5jIFwKLQl4NTA5L3g1MDlfZDIuYyBcCi0JeDUwOS94NTA5X3IyeC5jIFwKLQl4NTA5L3g1MDlfY21wLmMgXAotCXg1MDkveDUwOV9vYmouYyBcCi0JeDUwOS94NTA5X3JlcS5jIFwKLQl4NTA5L3g1MDlzcGtpLmMgXAotCXg1MDkveDUwOV92ZnkuYyBcCi0JeDUwOS94NTA5X3NldC5jIFwKLQl4NTA5L3g1MDljc2V0LmMgXAotCXg1MDkveDUwOXJzZXQuYyBcCi0JeDUwOS94NTA5X2Vyci5jIFwKLQl4NTA5L3g1MDluYW1lLmMgXAotCXg1MDkveDUwOV92My5jIFwKLQl4NTA5L3g1MDlfZXh0LmMgXAotCXg1MDkveDUwOV9hdHQuYyBcCi0JeDUwOS94NTA5X3ZwbS5jIFwKLQl4NTA5L3g1MDl0eXBlLmMgXAotCXg1MDkveDUwOV9sdS5jIFwKLQl4NTA5L3hfYWxsLmMgXAotCXg1MDkveDUwOV90eHQuYyBcCi0JeDUwOS94NTA5X3Rycy5jIFwKLQl4NTA5L2J5X2ZpbGUuYyBcCiAJeDUwOS9ieV9kaXIuYyBcCisJeDUwOS9ieV9maWxlLmMgXAorCXg1MDkveDUwOV9hdHQuYyBcCisJeDUwOS94NTA5X2NtcC5jIFwKKwl4NTA5L3g1MDlfZDIuYyBcCisJeDUwOS94NTA5X2RlZi5jIFwKKwl4NTA5L3g1MDlfZXJyLmMgXAorCXg1MDkveDUwOV9leHQuYyBcCisJeDUwOS94NTA5X2x1LmMgXAorCXg1MDkveDUwOV9vYmouYyBcCisJeDUwOS94NTA5X3IyeC5jIFwKKwl4NTA5L3g1MDlfcmVxLmMgXAorCXg1MDkveDUwOV9zZXQuYyBcCisJeDUwOS94NTA5X3Rycy5jIFwKKwl4NTA5L3g1MDlfdHh0LmMgXAorCXg1MDkveDUwOV92My5jIFwKKwl4NTA5L3g1MDlfdmZ5LmMgXAorCXg1MDkveDUwOV92cG0uYyBcCisJeDUwOS94NTA5Y3NldC5jIFwKKwl4NTA5L3g1MDluYW1lLmMgXAorCXg1MDkveDUwOXJzZXQuYyBcCisJeDUwOS94NTA5c3BraS5jIFwKKwl4NTA5L3g1MDl0eXBlLmMgXAorCXg1MDkveF9hbGwuYyBcCisJeDUwOXYzL3BjeV9jYWNoZS5jIFwKKwl4NTA5djMvcGN5X2RhdGEuYyBcCisJeDUwOXYzL3BjeV9saWIuYyBcCisJeDUwOXYzL3BjeV9tYXAuYyBcCisJeDUwOXYzL3BjeV9ub2RlLmMgXAorCXg1MDl2My9wY3lfdHJlZS5jIFwKKwl4NTA5djMvdjNfYWtleS5jIFwKKwl4NTA5djMvdjNfYWtleWEuYyBcCisJeDUwOXYzL3YzX2FsdC5jIFwKIAl4NTA5djMvdjNfYmNvbnMuYyBcCiAJeDUwOXYzL3YzX2JpdHN0LmMgXAogCXg1MDl2My92M19jb25mLmMgXAotCXg1MDl2My92M19leHRrdS5jIFwKLQl4NTA5djMvdjNfaWE1LmMgXAotCXg1MDl2My92M19saWIuYyBcCi0JeDUwOXYzL3YzX3Bybi5jIFwKLQl4NTA5djMvdjNfdXRsLmMgXAotCXg1MDl2My92M2Vyci5jIFwKLQl4NTA5djMvdjNfZ2Vubi5jIFwKLQl4NTA5djMvdjNfYWx0LmMgXAotCXg1MDl2My92M19za2V5LmMgXAotCXg1MDl2My92M19ha2V5LmMgXAotCXg1MDl2My92M19wa3UuYyBcCi0JeDUwOXYzL3YzX2ludC5jIFwKLQl4NTA5djMvdjNfZW51bS5jIFwKLQl4NTA5djMvdjNfc3huZXQuYyBcCiAJeDUwOXYzL3YzX2Nwb2xzLmMgXAogCXg1MDl2My92M19jcmxkLmMgXAotCXg1MDl2My92M19wdXJwLmMgXAorCXg1MDl2My92M19lbnVtLmMgXAorCXg1MDl2My92M19leHRrdS5jIFwKKwl4NTA5djMvdjNfZ2Vubi5jIFwKKwl4NTA5djMvdjNfaWE1LmMgXAogCXg1MDl2My92M19pbmZvLmMgXAotCXg1MDl2My92M19ha2V5YS5jIFwKLQl4NTA5djMvdjNfb2NzcC5jIFwKLQl4NTA5djMvdjNfcGNpYS5jIFwKLQl4NTA5djMvdjNfcGNpLmMgXAotCXg1MDl2My92M19wbWFwcy5jIFwKLQl4NTA5djMvdjNfcGNvbnMuYyBcCisJeDUwOXYzL3YzX2ludC5jIFwKKwl4NTA5djMvdjNfbGliLmMgXAogCXg1MDl2My92M19uY29ucy5jIFwKLQl4NTA5djMvcGN5X2xpYi5jIFwKLQl4NTA5djMvcGN5X2NhY2hlLmMgXAotCXg1MDl2My9wY3lfbm9kZS5jIFwKLQl4NTA5djMvcGN5X21hcC5jIFwKLQl4NTA5djMvcGN5X2RhdGEuYyBcCi0JeDUwOXYzL3BjeV90cmVlLmMgXAotCWRoL2RoX2FzbjEuYyBcCi0JZGgvZGhfY2hlY2suYyBcCi0JZGgvZGhfZGVwci5jIFwKLQlkaC9kaF9lcnIuYyBcCi0JZGgvZGhfZ2VuLmMgXAotCWRoL2RoX2tleS5jIFwKLQlkaC9kaF9saWIuYyBcCi0JZHNhL2RzYV9hc24xLmMgXAotCWRzYS9kc2FfZGVwci5jIFwKLQlkc2EvZHNhX2Vyci5jIFwKLQlkc2EvZHNhX2dlbi5jIFwKLQlkc2EvZHNhX2tleS5jIFwKLQlkc2EvZHNhX2xpYi5jIFwKLQlkc2EvZHNhX29zc2wuYyBcCi0JZHNhL2RzYV9zaWduLmMgXAotCWRzYS9kc2FfdXRsLmMgXAotCWRzYS9kc2FfdnJmLmMgXAotCXJpcGVtZC9ybWRfZGdzdC5jIFwKLQlyaXBlbWQvcm1kX29uZS5jIFwKLQlldnAvbV9yaXBlbWQuYworCXg1MDl2My92M19vY3NwLmMgXAorCXg1MDl2My92M19wY2kuYyBcCisJeDUwOXYzL3YzX3BjaWEuYyBcCisJeDUwOXYzL3YzX3Bjb25zLmMgXAorCXg1MDl2My92M19wa3UuYyBcCisJeDUwOXYzL3YzX3BtYXBzLmMgXAorCXg1MDl2My92M19wcm4uYyBcCisJeDUwOXYzL3YzX3B1cnAuYyBcCisJeDUwOXYzL3YzX3NrZXkuYyBcCisJeDUwOXYzL3YzX3N4bmV0LmMgXAorCXg1MDl2My92M191dGwuYyBcCisJeDUwOXYzL3YzZXJyLmMKIAogTE9DQUxfQ0ZMQUdTICs9IC1ETk9fV0lORE9XU19CUkFJTkRFQVRICiAKQEAgLTQ0Miw3ICs0NTMsMTAgQEAKIAogTE9DQUxfQ19JTkNMVURFUyArPSBcCiAJZXh0ZXJuYWwvb3BlbnNzbCBcCisJZXh0ZXJuYWwvb3BlbnNzbC9jcnlwdG8vYXNuMSBcCisJZXh0ZXJuYWwvb3BlbnNzbC9jcnlwdG8vZXZwIFwKIAlleHRlcm5hbC9vcGVuc3NsL2luY2x1ZGUgXAorCWV4dGVybmFsL29wZW5zc2wvaW5jbHVkZS9vcGVuc3NsIFwKIAlleHRlcm5hbC96bGliCiAKIExPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgKz0gbGliegpkaWZmIC0tZ2l0IGEvcGF0Y2hlcy9wcm9ncy5wYXRjaCBiL3BhdGNoZXMvcHJvZ3MucGF0Y2gKaW5kZXggZDgyNDllNi4uZDdiNzk0YyAxMDA2NDQKLS0tIGEvcGF0Y2hlcy9wcm9ncy5wYXRjaAorKysgYi9wYXRjaGVzL3Byb2dzLnBhdGNoCkBAIC0xLDE3ICsxLDYgQEAKLWRpZmYgLXVhcnAgb3BlbnNzbC0wLjkuOGsub3JpZy9hcHBzL3Byb2dzLmggb3BlbnNzbC0wLjkuOGsvYXBwcy9wcm9ncy5oCi0tLS0gb3BlbnNzbC0wLjkuOGsub3JpZy9hcHBzL3Byb2dzLmgJMjAwOC0wNC0wMyAxNjowMzo0MS4wMDAwMDAwMDAgLTA3MDAKLSsrKyBvcGVuc3NsLTAuOS44ay9hcHBzL3Byb2dzLmgJMjAwOS0wOS0yOSAxODowNzowMS4wMDAwMDAwMDAgLTA3MDAKLUBAIC0yMiw3ICsyMiw5IEBAIGV4dGVybiBpbnQgZWNwYXJhbV9tYWluKGludCBhcmdjLGNoYXIgKmEKLSBleHRlcm4gaW50IHg1MDlfbWFpbihpbnQgYXJnYyxjaGFyICphcmd2W10pOwotIGV4dGVybiBpbnQgZ2VucnNhX21haW4oaW50IGFyZ2MsY2hhciAqYXJndltdKTsKLSBleHRlcm4gaW50IGdlbmRzYV9tYWluKGludCBhcmdjLGNoYXIgKmFyZ3ZbXSk7Ci0rI2lmIDAgLyogQU5EUk9JRCAqLwotIGV4dGVybiBpbnQgc19zZXJ2ZXJfbWFpbihpbnQgYXJnYyxjaGFyICphcmd2W10pOwotKyNlbmRpZgotIGV4dGVybiBpbnQgc19jbGllbnRfbWFpbihpbnQgYXJnYyxjaGFyICphcmd2W10pOwotIGV4dGVybiBpbnQgc3BlZWRfbWFpbihpbnQgYXJnYyxjaGFyICphcmd2W10pOwotIGV4dGVybiBpbnQgc190aW1lX21haW4oaW50IGFyZ2MsY2hhciAqYXJndltdKTsKLUBAIC0zOSw3ICs0MSw5IEBAIGV4dGVybiBpbnQgc3BrYWNfbWFpbihpbnQgYXJnYyxjaGFyICphcmcKKy0tLSBvcGVuc3NsLTEuMC4wLm9yaWcvYXBwcy9wcm9ncy5oCTIwMDktMDYtMzAgMDg6MDg6MzguMDAwMDAwMDAwIC0wNzAwCisrKysgb3BlbnNzbC0xLjAuMC9hcHBzL3Byb2dzLmgJMjAxMC0wNC0xNCAxNDoxOTozMS4wMDAwMDAwMDAgLTA3MDAKK0BAIC00Myw3ICs0Myw5IEBAIGV4dGVybiBpbnQgc3BrYWNfbWFpbihpbnQgYXJnYyxjaGFyICphcmcKICBleHRlcm4gaW50IHNtaW1lX21haW4oaW50IGFyZ2MsY2hhciAqYXJndltdKTsKICBleHRlcm4gaW50IHJhbmRfbWFpbihpbnQgYXJnYyxjaGFyICphcmd2W10pOwogIGV4dGVybiBpbnQgZW5naW5lX21haW4oaW50IGFyZ2MsY2hhciAqYXJndltdKTsKQEAgLTE5LDExICs4LDExIEBACiAgZXh0ZXJuIGludCBvY3NwX21haW4oaW50IGFyZ2MsY2hhciAqYXJndltdKTsKICsjZW5kaWYKICBleHRlcm4gaW50IHByaW1lX21haW4oaW50IGFyZ2MsY2hhciAqYXJndltdKTsKKyBleHRlcm4gaW50IHRzX21haW4oaW50IGFyZ2MsY2hhciAqYXJndltdKTsKICAKLSAjZGVmaW5lIEZVTkNfVFlQRV9HRU5FUkFMCTEKLUBAIC05Nyw3ICsxMDEsOSBAQCBGVU5DVElPTiBmdW5jdGlvbnNbXSA9IHsKLSAJe0ZVTkNfVFlQRV9HRU5FUkFMLCJnZW5kc2EiLGdlbmRzYV9tYWlufSwKK0BAIC0xMDcsNyArMTA5LDkgQEAgRlVOQ1RJT04gZnVuY3Rpb25zW10gPSB7CiAgI2VuZGlmCisgCXtGVU5DX1RZUEVfR0VORVJBTCwiZ2VucGtleSIsZ2VucGtleV9tYWlufSwKICAjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19TT0NLKSAmJiAhKGRlZmluZWQoT1BFTlNTTF9OT19TU0wyKSAmJiBkZWZpbmVkKE9QRU5TU0xfTk9fU1NMMykpCiAtCXtGVU5DX1RZUEVfR0VORVJBTCwic19zZXJ2ZXIiLHNfc2VydmVyX21haW59LAogKyNpZiAwIC8qIEFORFJPSUQgKi8KQEAgLTMyLDM1ICsyMSwzMSBAQAogICNlbmRpZgogICNpZiAhZGVmaW5lZChPUEVOU1NMX05PX1NPQ0spICYmICEoZGVmaW5lZChPUEVOU1NMX05PX1NTTDIpICYmIGRlZmluZWQoT1BFTlNTTF9OT19TU0wzKSkKICAJe0ZVTkNfVFlQRV9HRU5FUkFMLCJzX2NsaWVudCIsc19jbGllbnRfbWFpbn0sCi1AQCAtMTI5LDcgKzEzNSw5IEBAIEZVTkNUSU9OIGZ1bmN0aW9uc1tdID0gewotICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKLSAJe0ZVTkNfVFlQRV9HRU5FUkFMLCJlbmdpbmUiLGVuZ2luZV9tYWlufSwKK0BAIC0xMzMsOSArMTM3LDExIEBAIEZVTkNUSU9OIGZ1bmN0aW9uc1tdID0geworIAl7RlVOQ19UWVBFX0dFTkVSQUwsInBrY3MxMiIscGtjczEyX21haW59LAogICNlbmRpZgotKyNpZm5kZWYgT1BFTlNTTF9OT19PQ1NQCi0gCXtGVU5DX1RZUEVfR0VORVJBTCwib2NzcCIsb2NzcF9tYWlufSwKKyAJe0ZVTkNfVFlQRV9HRU5FUkFMLCJwa2NzOCIscGtjczhfbWFpbn0sCisrI2lmIDAgLyogQU5EUk9JRCAqLworIAl7RlVOQ19UWVBFX0dFTkVSQUwsInBrZXkiLHBrZXlfbWFpbn0sCisgCXtGVU5DX1RZUEVfR0VORVJBTCwicGtleXBhcmFtIixwa2V5cGFyYW1fbWFpbn0sCisgCXtGVU5DX1RZUEVfR0VORVJBTCwicGtleXV0bCIscGtleXV0bF9tYWlufSwKICsjZW5kaWYKKyAJe0ZVTkNfVFlQRV9HRU5FUkFMLCJzcGthYyIsc3BrYWNfbWFpbn0sCisgCXtGVU5DX1RZUEVfR0VORVJBTCwic21pbWUiLHNtaW1lX21haW59LAorIAl7RlVOQ19UWVBFX0dFTkVSQUwsInJhbmQiLHJhbmRfbWFpbn0sCitAQCAtMTQ2LDcgKzE1Miw5IEBAIEZVTkNUSU9OIGZ1bmN0aW9uc1tdID0geworIAl7RlVOQ19UWVBFX0dFTkVSQUwsIm9jc3AiLG9jc3BfbWFpbn0sCisgI2VuZGlmCiAgCXtGVU5DX1RZUEVfR0VORVJBTCwicHJpbWUiLHByaW1lX21haW59LAorKyNpZiAwIC8qIEFORFJPSUQgKi8KKyAJe0ZVTkNfVFlQRV9HRU5FUkFMLCJ0cyIsdHNfbWFpbn0sCisrI2VuZGlmCiAgI2lmbmRlZiBPUEVOU1NMX05PX01EMgogIAl7RlVOQ19UWVBFX01ELCJtZDIiLGRnc3RfbWFpbn0sCi1kaWZmIC11YXJwIG9wZW5zc2wtMC45LjhrLm9yaWcvYXBwcy9zcGVlZC5jIG9wZW5zc2wtMC45LjhrL2FwcHMvc3BlZWQuYwotLS0tIG9wZW5zc2wtMC45LjhrLm9yaWcvYXBwcy9zcGVlZC5jCTIwMDktMDEtMDcgMDI6NDg6MjIuMDAwMDAwMDAwIC0wODAwCi0rKysgb3BlbnNzbC0wLjkuOGsvYXBwcy9zcGVlZC5jCTIwMDktMDktMjkgMTg6MDY6MzguMDAwMDAwMDAwIC0wNzAwCi1AQCAtMTA4LDEyICsxMDgsMTIgQEAKLSAjaW5jbHVkZSA8c2lnbmFsLmg+CiAgI2VuZGlmCi0gCi0tI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19OZXRCU0RfXykgfHwgZGVmaW5lZChfX09wZW5CU0RfXykgfHwgZGVmaW5lZChPUEVOU1NMX1NZU19NQUNPU1gpCi0rI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19OZXRCU0RfXykgfHwgZGVmaW5lZChfX09wZW5CU0RfXykgfHwgZGVmaW5lZChPUEVOU1NMX1NZU19NQUNPU1gpIHx8IGRlZmluZWQoSEFWRV9BTkRST0lEX09TKQotICMgZGVmaW5lIFVTRV9UT0QKLSAjZWxpZiAhZGVmaW5lZChPUEVOU1NMX1NZU19NU0RPUykgJiYgIWRlZmluZWQoT1BFTlNTTF9TWVNfVlhXT1JLUykgJiYgKCFkZWZpbmVkKE9QRU5TU0xfU1lTX1ZNUykgfHwgZGVmaW5lZChfX0RFQ0MpKQotICMgZGVmaW5lIFRJTUVTCi0gI2VuZGlmCi0tI2lmICFkZWZpbmVkKF9VTklDT1MpICYmICFkZWZpbmVkKF9fT3BlbkJTRF9fKSAmJiAhZGVmaW5lZChzZ2kpICYmICFkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhKGRlZmluZWQoX19ic2RpKSB8fCBkZWZpbmVkKF9fYnNkaV9fKSkgJiYgIWRlZmluZWQoX0FJWCkgJiYgIWRlZmluZWQoT1BFTlNTTF9TWVNfTVBFKSAmJiAhZGVmaW5lZChfX05ldEJTRF9fKSAmJiAhZGVmaW5lZChPUEVOU1NMX1NZU19WWFdPUktTKSAvKiBGSVhNRSAqLwotKyNpZiAhZGVmaW5lZChfVU5JQ09TKSAmJiAhZGVmaW5lZChfX09wZW5CU0RfXykgJiYgIWRlZmluZWQoc2dpKSAmJiAhZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIShkZWZpbmVkKF9fYnNkaSkgfHwgZGVmaW5lZChfX2JzZGlfXykpICYmICFkZWZpbmVkKF9BSVgpICYmICFkZWZpbmVkKE9QRU5TU0xfU1lTX01QRSkgJiYgIWRlZmluZWQoX19OZXRCU0RfXykgJiYgIWRlZmluZWQoT1BFTlNTTF9TWVNfVlhXT1JLUykgJiYgIWRlZmluZWQoSEFWRV9BTkRST0lEX09TKSAvKiBGSVhNRSAqLwotICMgZGVmaW5lIFRJTUVCCi0gI2VuZGlmCi0gCi1AQCAtMTgzNiw2ICsxODM2LDcgQEAgaW50IE1BSU4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorLS0tIG9wZW5zc2wtMS4wLjAub3JpZy9hcHBzL3NwZWVkLmMJMjAxMC0wMy0wMyAxMTo1NjoxNy4wMDAwMDAwMDAgLTA4MDAKKysrKyBvcGVuc3NsLTEuMC4wL2FwcHMvc3BlZWQuYwkyMDEwLTA0LTEzIDE2OjUzOjQzLjAwMDAwMDAwMCAtMDcwMAorQEAgLTE3MTgsNiArMTcxOCw3IEBAIGludCBNQUlOKGludCBhcmdjLCBjaGFyICoqYXJndikKICAJCQl9CiAgCQl9CiAgCkBAIC02OCwxMSArNTMsMjMgQEAKICAJaWYgKGRvaXRbRF9JR0VfMTI4X0FFU10pCiAgCQl7CiAgCQlmb3IgKGo9MDsgajxTSVpFX05VTTsgaisrKQotQEAgLTE4NzksNiArMTg4MCw3IEBAIGludCBNQUlOKGludCBhcmdjLCBjaGFyICoqYXJndikKLSAJCQl9Ci0gCQl9CitAQCAtMTc2Myw2ICsxNzY0LDcgQEAgaW50IE1BSU4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAorIAogICNlbmRpZgogKyNlbmRpZgogICNpZm5kZWYgT1BFTlNTTF9OT19DQU1FTExJQQogIAlpZiAoZG9pdFtEX0NCQ18xMjhfQ01MXSkKICAJCXsKKy0tLSBvcGVuc3NsLTEuMC4wLm9yaWcvYXBwcy9zX2NsaWVudC5jCTIwMDktMTItMTYgMTI6Mjg6MjguMDAwMDAwMDAwIC0wODAwCisrKysgb3BlbnNzbC0xLjAuMC9hcHBzL3NfY2xpZW50LmMJMjAxMC0wNC0xNCAxNDoyNTowOS4wMDAwMDAwMDAgLTA3MDAKK0BAIC0yMTYsNiArMjE2LDkgQEAgc3RhdGljIGludCBjX2lnbl9lb2Y9MDsKKyAvKiBEZWZhdWx0IFBTSyBpZGVudGl0eSBhbmQga2V5ICovCisgc3RhdGljIGNoYXIgKnBza19pZGVudGl0eT0iQ2xpZW50X2lkZW50aXR5IjsKKyAvKmNoYXIgKnBza19rZXk9TlVMTDsgIGJ5IGRlZmF1bHQgUFNLIGlzIG5vdCB1c2VkICovCisrI2lmIDEgLyogQU5EUk9JRCAqLworK2NoYXIgKnBza19rZXk9TlVMTDsKKysjZW5kaWYKKyAKKyBzdGF0aWMgdW5zaWduZWQgaW50IHBza19jbGllbnRfY2IoU1NMICpzc2wsIGNvbnN0IGNoYXIgKmhpbnQsIGNoYXIgKmlkZW50aXR5LAorIAl1bnNpZ25lZCBpbnQgbWF4X2lkZW50aXR5X2xlbiwgdW5zaWduZWQgY2hhciAqcHNrLApkaWZmIC0tZ2l0IGEvcGF0Y2hlcy9zbWFsbF9yZWNvcmRzLnBhdGNoIGIvcGF0Y2hlcy9zbWFsbF9yZWNvcmRzLnBhdGNoCmluZGV4IDAxYmIxZTIuLmY0MGM1MjQgMTAwNjQ0Ci0tLSBhL3BhdGNoZXMvc21hbGxfcmVjb3Jkcy5wYXRjaAorKysgYi9wYXRjaGVzL3NtYWxsX3JlY29yZHMucGF0Y2gKQEAgLTEsOCArMSw2IEBACi1kaWZmIC0tZ2l0IG9wZW5zc2wtMC45LjhtL3NzbC9kMV9wa3QuYyBvcGVuc3NsLTAuOS44bS9zc2wvZDFfcGt0LmMKLWluZGV4IGNhMmQ3M2YuLjJhZjUyNzIgMTAwNjQ0Ci0tLS0gb3BlbnNzbC0wLjkuOG0vc3NsL2QxX3BrdC5jCi0rKysgb3BlbnNzbC0wLjkuOG0vc3NsL2QxX3BrdC5jCi1AQCAtNTcxLDYgKzU3MSwyNCBAQCBhZ2FpbjoKKy0tLSBvcGVuc3NsLTEuMC4wLm9yaWcvc3NsL2QxX3BrdC5jCTIwMDktMTAtMDQgMDk6NTI6MzUuMDAwMDAwMDAwIC0wNzAwCisrKysgb3BlbnNzbC0xLjAuMC9zc2wvZDFfcGt0LmMJMjAxMC0wNC0xNCAxMDoxODowMC4wMDAwMDAwMDAgLTA3MDAKK0BAIC02MTQsNiArNjE0LDI0IEBAIGFnYWluOgogIAkJCWdvdG8gYWdhaW47CiAgCQkJfQogIApAQCAtMjQsMTAgKzIyLDEwIEBACiArCQkJcy0+cGFja2V0PSAmKHMtPnMzLT5yYnVmLmJ1ZlswXSk7CiArCQkJfQogKwotIAkJcy0+Y2xpZW50X3ZlcnNpb24gPSB2ZXJzaW9uOwogIAkJLyogbm93IHMtPnJzdGF0ZSA9PSBTU0xfU1RfUkVBRF9CT0RZICovCiAgCQl9Ci1AQCAtMTMwMCw2ICsxMzE4LDcgQEAgaW50IGRvX2R0bHMxX3dyaXRlKFNTTCAqcywgaW50IHR5cGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbiwKKyAKK0BAIC0xMzQ0LDYgKzEzNjIsNyBAQCBpbnQgZG9fZHRsczFfd3JpdGUoU1NMICpzLCBpbnQgdHlwZSwgY29uCiAgCVNTTDNfQlVGRkVSICp3YjsKICAJU1NMX1NFU1NJT04gKnNlc3M7CiAgCWludCBiczsKQEAgLTM1LDcgKzMzLDcgQEAKICAKICAJLyogZmlyc3QgY2hlY2sgaWYgdGhlcmUgaXMgYSBTU0wzX0JVRkZFUiBzdGlsbCBiZWluZyB3cml0dGVuCiAgCSAqIG91dC4gIFRoaXMgd2lsbCBoYXBwZW4gd2l0aCBub24gYmxvY2tpbmcgSU8gKi8KLUBAIC0xMzA5LDYgKzEzMjgsMTYgQEAgaW50IGRvX2R0bHMxX3dyaXRlKFNTTCAqcywgaW50IHR5cGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbiwKK0BAIC0xMzUzLDYgKzEzNzIsMTYgQEAgaW50IGRvX2R0bHMxX3dyaXRlKFNTTCAqcywgaW50IHR5cGUsIGNvbgogIAkJcmV0dXJuKHNzbDNfd3JpdGVfcGVuZGluZyhzLHR5cGUsYnVmLGxlbikpOwogIAkJfQogIApAQCAtNTIsMTEgKzUwLDkgQEAKICAJLyogSWYgd2UgaGF2ZSBhbiBhbGVydCB0byBzZW5kLCBsZXRzIHNlbmQgaXQgKi8KICAJaWYgKHMtPnMzLT5hbGVydF9kaXNwYXRjaCkKICAJCXsKLWRpZmYgLS1naXQgb3BlbnNzbC0wLjkuOG0vc3NsL3MyM19zcnZyLmMgb3BlbnNzbC0wLjkuOG0vc3NsL3MyM19zcnZyLmMKLWluZGV4IGJlMDU5MTEuLjQyZjdkZTQgMTAwNjQ0Ci0tLS0gb3BlbnNzbC0wLjkuOG0vc3NsL3MyM19zcnZyLmMKLSsrKyBvcGVuc3NsLTAuOS44bS9zc2wvczIzX3NydnIuYwotQEAgLTQxMiw4ICs0MTIsMTMgQEAgaW50IHNzbDIzX2dldF9jbGllbnRfaGVsbG8oU1NMICpzKQorLS0tIG9wZW5zc2wtMS4wLjAub3JpZy9zc2wvczIzX3NydnIuYwkyMDEwLTAyLTE2IDA2OjIwOjQwLjAwMDAwMDAwMCAtMDgwMAorKysrIG9wZW5zc2wtMS4wLjAvc3NsL3MyM19zcnZyLmMJMjAxMC0wNC0xMyAxNzowMTowNy4wMDAwMDAwMDAgLTA3MDAKK0BAIC00MDMsOCArNDAzLDEzIEBAIGludCBzc2wyM19nZXRfY2xpZW50X2hlbGxvKFNTTCAqcykKICAJCXZbMF0gPSBwWzNdOyAvKiA9PSBTU0wzX1ZFUlNJT05fTUFKT1IgKi8KICAJCXZbMV0gPSBwWzRdOwogIApAQCAtNzEsNjggKzY3LDc4IEBACiAgCQkJewogIAkJCVNTTGVycihTU0xfRl9TU0wyM19HRVRfQ0xJRU5UX0hFTExPLFNTTF9SX1JFQ09SRF9UT09fTEFSR0UpOwogIAkJCWdvdG8gZXJyOwotZGlmZiAtLWdpdCBvcGVuc3NsLTAuOS44bS9zc2wvczNfYm90aC5jIG9wZW5zc2wtMC45LjhtL3NzbC9zM19ib3RoLmMKLWluZGV4IDdmNDYyMjUuLjczZjYwMDIgMTAwNjQ0Ci0tLS0gb3BlbnNzbC0wLjkuOG0vc3NsL3MzX2JvdGguYwotKysrIG9wZW5zc2wtMC45LjhtL3NzbC9zM19ib3RoLmMKLUBAIC02MzEsMTEgKzYzMSwxOCBAQCBpbnQgc3NsM19zZXR1cF9idWZmZXJzKFNTTCAqcykKKy0tLSBvcGVuc3NsLTEuMC4wLm9yaWcvc3NsL3MzX2JvdGguYwkyMDEwLTAzLTI0IDE2OjE2OjQ5LjAwMDAwMDAwMCAtMDcwMAorKysrIG9wZW5zc2wtMS4wLjAvc3NsL3MzX2JvdGguYwkyMDEwLTA0LTE0IDEwOjExOjQyLjAwMDAwMDAwMCAtMDcwMAorQEAgLTcxNSwxMyArNzE1LDIwIEBAIGludCBzc2wzX3NldHVwX3JlYWRfYnVmZmVyKFNTTCAqcykKICAKICAJaWYgKHMtPnMzLT5yYnVmLmJ1ZiA9PSBOVUxMKQogIAkJeworLQkJbGVuID0gU1NMM19SVF9NQVhfUExBSU5fTEVOR1RICistCQkJKyBTU0wzX1JUX01BWF9FTkNSWVBURURfT1ZFUkhFQUQKKy0JCQkrIGhlYWRlcmxlbiArIGFsaWduOwogLQkJaWYgKHMtPm9wdGlvbnMgJiBTU0xfT1BfTUlDUk9TT0ZUX0JJR19TU0xWM19CVUZGRVIpCi0tCQkJZXh0cmE9U1NMM19SVF9NQVhfRVhUUkE7CiArCQlpZiAoU1NMX2dldF9tb2RlKHMpICYgU1NMX01PREVfU01BTExfQlVGRkVSUykKICsJCQl7CiArCQkJbGVuID0gU1NMM19SVF9ERUZBVUxUX1BBQ0tFVF9TSVpFOwogKwkJCX0KLSAJCWVsc2UKLS0JCQlleHRyYT0wOwotLQkJbGVuID0gU1NMM19SVF9NQVhfUEFDS0VUX1NJWkUgKyBleHRyYTsKLSsJCQl7CisrICAJCWVsc2UKKyAJCQl7CistCQkJcy0+czMtPmluaXRfZXh0cmEgPSAxOworLQkJCWxlbiArPSBTU0wzX1JUX01BWF9FWFRSQTsKKysJCQlsZW4gPSBTU0wzX1JUX01BWF9QTEFJTl9MRU5HVEgKKysJCQkJKyBTU0wzX1JUX01BWF9FTkNSWVBURURfT1ZFUkhFQUQKKysJCQkJKyBoZWFkZXJsZW4gKyBhbGlnbjsKICsJCQlpZiAocy0+b3B0aW9ucyAmIFNTTF9PUF9NSUNST1NPRlRfQklHX1NTTFYzX0JVRkZFUikKLSsJCQkJZXh0cmE9U1NMM19SVF9NQVhfRVhUUkE7Ci0rCQkJZWxzZQotKwkJCQlleHRyYT0wOwotKwkJCWxlbiA9IFNTTDNfUlRfTUFYX1BBQ0tFVF9TSVpFICsgZXh0cmE7Ci0rCQkJfQotIAkJaWYgKChwPU9QRU5TU0xfbWFsbG9jKGxlbikpID09IE5VTEwpCi0gCQkJZ290byBlcnI7Ci0gCQlzLT5zMy0+cmJ1Zi5idWYgPSBwOwotQEAgLTY0NCw4ICs2NTEsMTcgQEAgaW50IHNzbDNfc2V0dXBfYnVmZmVycyhTU0wgKnMpCisrCQkJCXsKKysJCQkJcy0+czMtPmluaXRfZXh0cmEgPSAxOworKwkJCQlsZW4gKz0gU1NMM19SVF9NQVhfRVhUUkE7CisrCQkJCX0KKyAJCQl9CisgI2lmbmRlZiBPUEVOU1NMX05PX0NPTVAKKyAJCWlmICghKHMtPm9wdGlvbnMgJiBTU0xfT1BfTk9fQ09NUFJFU1NJT04pKQorQEAgLTc1Nyw3ICs3NjQsMTUgQEAgaW50IHNzbDNfc2V0dXBfd3JpdGVfYnVmZmVyKFNTTCAqcykKICAKICAJaWYgKHMtPnMzLT53YnVmLmJ1ZiA9PSBOVUxMKQogIAkJewotLQkJbGVuID0gU1NMM19SVF9NQVhfUEFDS0VUX1NJWkU7Ci0tCQlsZW4gKz0gaGVhZGVybGVuICsgMjU2OyAvKiBleHRyYSBzcGFjZSBmb3IgZW1wdHkgZnJhZ21lbnQgKi8KKy0JCWxlbiA9IHMtPm1heF9zZW5kX2ZyYWdtZW50CiArCQlpZiAoU1NMX2dldF9tb2RlKHMpICYgU1NMX01PREVfU01BTExfQlVGRkVSUykKICsJCQl7CiArCQkJbGVuID0gU1NMM19SVF9ERUZBVUxUX1BBQ0tFVF9TSVpFOwogKwkJCX0KLSsJCWVsc2UKKysgIAkJZWxzZQogKwkJCXsKLSsJCQlsZW4gPSBTU0wzX1JUX01BWF9QQUNLRVRfU0laRTsKKysJCQlsZW4gPSBzLT5tYXhfc2VuZF9mcmFnbWVudDsKICsJCQl9Ci0rCQlsZW4gKz0gU1NMM19SVF9ERUZBVUxUX1dSSVRFX09WRVJIRUFEOyAvKiBleHRyYSBzcGFjZSBmb3IgZW1wdHkKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnQsIGhlYWRlciwgTUFDCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBwYWRkaW5nICovCi0gCQlpZiAoKHA9T1BFTlNTTF9tYWxsb2MobGVuKSkgPT0gTlVMTCkKKysJCWxlbiArPSAwCisgCQkJKyBTU0wzX1JUX1NFTkRfTUFYX0VOQ1JZUFRFRF9PVkVSSEVBRAorIAkJCSsgaGVhZGVybGVuICsgYWxpZ247CisgI2lmbmRlZiBPUEVOU1NMX05PX0NPTVAKK0BAIC03NjcsNyArNzgyLDYgQEAgaW50IHNzbDNfc2V0dXBfd3JpdGVfYnVmZmVyKFNTTCAqcykKKyAJCWlmICghKHMtPm9wdGlvbnMgJiBTU0xfT1BfRE9OVF9JTlNFUlRfRU1QVFlfRlJBR01FTlRTKSkKKyAJCQlsZW4gKz0gaGVhZGVybGVuICsgYWxpZ24KKyAJCQkJKyBTU0wzX1JUX1NFTkRfTUFYX0VOQ1JZUFRFRF9PVkVSSEVBRDsKKy0KKyAJCWlmICgocD1mcmVlbGlzdF9leHRyYWN0KHMtPmN0eCwgMCwgbGVuKSkgPT0gTlVMTCkKICAJCQlnb3RvIGVycjsKICAJCXMtPnMzLT53YnVmLmJ1ZiA9IHA7Ci1kaWZmIC0tZ2l0IG9wZW5zc2wtMC45LjhtL3NzbC9zM19wa3QuYyBvcGVuc3NsLTAuOS44bS9zc2wvczNfcGt0LmMKLWluZGV4IGEyYmE1NzQuLjZmZTQwMDQgMTAwNjQ0Ci0tLS0gb3BlbnNzbC0wLjkuOG0vc3NsL3MzX3BrdC5jCi0rKysgb3BlbnNzbC0wLjkuOG0vc3NsL3MzX3BrdC5jCi1AQCAtMjU5LDcgKzI1OSw4IEBAIHN0YXRpYyBpbnQgc3NsM19nZXRfcmVjb3JkKFNTTCAqcykKK0BAIC04MTAsNCArODI0LDMgQEAgaW50IHNzbDNfcmVsZWFzZV9yZWFkX2J1ZmZlcihTU0wgKnMpCisgCQl9CisgCXJldHVybiAxOworIAl9CistCistLS0gb3BlbnNzbC0xLjAuMC5vcmlnL3NzbC9zM19wa3QuYwkyMDEwLTAzLTI1IDA0OjIyOjQyLjAwMDAwMDAwMCAtMDcwMAorKysrIG9wZW5zc2wtMS4wLjAvc3NsL3MzX3BrdC5jCTIwMTAtMDQtMTMgMTc6MTk6MDYuMDAwMDAwMDAwIC0wNzAwCitAQCAtMzAxLDcgKzMwMSw4IEBAIHN0YXRpYyBpbnQgc3NsM19nZXRfcmVjb3JkKFNTTCAqcykKICAJCWV4dHJhPVNTTDNfUlRfTUFYX0VYVFJBOwogIAllbHNlCiAgCQlleHRyYT0wOwotLQlpZiAoZXh0cmEgIT0gcy0+czMtPnJidWYubGVuIC0gU1NMM19SVF9NQVhfUEFDS0VUX1NJWkUpCistCWlmIChleHRyYSAmJiAhcy0+czMtPmluaXRfZXh0cmEpCiArCWlmICghKFNTTF9nZXRfbW9kZShzKSAmIFNTTF9NT0RFX1NNQUxMX0JVRkZFUlMpICYmCi0rCQlleHRyYSAhPSBzLT5zMy0+cmJ1Zi5sZW4gLSBTU0wzX1JUX01BWF9QQUNLRVRfU0laRSkKKysJCWV4dHJhICYmICFzLT5zMy0+aW5pdF9leHRyYSkKICAJCXsKLSAJCS8qIGFjdHVhbGx5IGxpa2VseSBhbiBhcHBsaWNhdGlvbiBlcnJvcjogU0xTX09QX01JQ1JPU09GVF9CSUdfU1NMVjNfQlVGRkVSCisgCQkvKiBBbiBhcHBsaWNhdGlvbiBlcnJvcjogU0xTX09QX01JQ1JPU09GVF9CSUdfU1NMVjNfQlVGRkVSCiAgCQkgKiBzZXQgYWZ0ZXIgc3NsM19zZXR1cF9idWZmZXJzKCkgd2FzIGRvbmUgKi8KLUBAIC0zMTIsNiArMzEzLDIxIEBAIGFnYWluOgorQEAgLTM1Nyw2ICszNTgsMjEgQEAgZnByaW50ZihzdGRlcnIsICJSZWNvcmQgdHlwZT0lZCwgTGVuZ3RoPQogIAkJCWdvdG8gZl9lcnI7CiAgCQkJfQogIApAQCAtMTU0LDIyICsxNjAsMjIgQEAKICAJCS8qIG5vdyBzLT5yc3RhdGUgPT0gU1NMX1NUX1JFQURfQk9EWSAqLwogIAkJfQogIAotQEAgLTUyNSw2ICs1NDEsNyBAQCBpbnQgc3NsM193cml0ZV9ieXRlcyhTU0wgKnMsIGludCB0eXBlLCBjb25zdCB2b2lkICpidWZfLCBpbnQgbGVuKQorQEAgLTU3Niw2ICs1OTIsNyBAQCBpbnQgc3NsM193cml0ZV9ieXRlcyhTU0wgKnMsIGludCB0eXBlLCBjCiAgCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Zj1idWZfOwogIAl1bnNpZ25lZCBpbnQgdG90LG4sbnc7CiAgCWludCBpOwotKyAgICB1bnNpZ25lZCBpbnQgbWF4X3BsYWluX2xlbmd0aDsKKysJdW5zaWduZWQgaW50IG1heF9wbGFpbl9sZW5ndGg7CiAgCiAgCXMtPnJ3c3RhdGU9U1NMX05PVEhJTkc7CiAgCXRvdD1zLT5zMy0+d251bTsKLUBAIC01NDQsOCArNTYxLDEzIEBAIGludCBzc2wzX3dyaXRlX2J5dGVzKFNTTCAqcywgaW50IHR5cGUsIGNvbnN0IHZvaWQgKmJ1Zl8sIGludCBsZW4pCitAQCAtNTk1LDggKzYxMiwxMyBAQCBpbnQgc3NsM193cml0ZV9ieXRlcyhTU0wgKnMsIGludCB0eXBlLCBjCiAgCW49KGxlbi10b3QpOwogIAlmb3IgKDs7KQogIAkJewotLQkJaWYgKG4gPiBTU0wzX1JUX01BWF9QTEFJTl9MRU5HVEgpCi0tCQkJbnc9U1NMM19SVF9NQVhfUExBSU5fTEVOR1RIOworLQkJaWYgKG4gPiBzLT5tYXhfc2VuZF9mcmFnbWVudCkKKy0JCQludz1zLT5tYXhfc2VuZF9mcmFnbWVudDsKICsJCWlmICghKFNTTF9nZXRfbW9kZShzKSAmIFNTTF9NT0RFX1NNQUxMX0JVRkZFUlMpKQotKwkJCW1heF9wbGFpbl9sZW5ndGggPSBTU0wzX1JUX01BWF9QTEFJTl9MRU5HVEg7CisrCQkJbWF4X3BsYWluX2xlbmd0aCA9IHMtPm1heF9zZW5kX2ZyYWdtZW50OwogKwkJZWxzZQogKwkJCW1heF9wbGFpbl9sZW5ndGggPSBTU0wzX1JUX0RFRkFVTFRfUExBSU5fTEVOR1RIOwogKwpAQCAtMTc4LDY0ICsxODQsNTIgQEAKICAJCWVsc2UKICAJCQludz1uOwogIAotQEAgLTYyOSw3ICs2NTEsOSBAQCBzdGF0aWMgaW50IGRvX3NzbDNfd3JpdGUoU1NMICpzLCBpbnQgdHlwZSwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAotIAkJCWlmIChwcmVmaXhfbGVuIDw9IDApCi0gCQkJCWdvdG8gZXJyOwotIAotLQkJCWlmIChzLT5zMy0+d2J1Zi5sZW4gPCAoc2l6ZV90KXByZWZpeF9sZW4gKyBTU0wzX1JUX01BWF9QQUNLRVRfU0laRSkKLSsJCQlpZiAocy0+czMtPndidWYubGVuIDwgKHNpemVfdClwcmVmaXhfbGVuICsKLSsJCQkJKChTU0xfZ2V0X21vZGUocykgJiBTU0xfTU9ERV9TTUFMTF9CVUZGRVJTKSA/IFNTTDNfUlRfREVGQVVMVF9QQUNLRVRfU0laRSA6Ci0rCQkJCQlTU0wzX1JUX01BWF9QQUNLRVRfU0laRSkpCi0gCQkJCXsKLSAJCQkJLyogaW5zdWZmaWNpZW50IHNwYWNlICovCi0gCQkJCVNTTGVycihTU0xfRl9ET19TU0wzX1dSSVRFLCBFUlJfUl9JTlRFUk5BTF9FUlJPUik7Ci1kaWZmIC0tZ2l0IG9wZW5zc2wtMC45LjhtL3NzbC9zc2wuaCBvcGVuc3NsLTAuOS44bS9zc2wvc3NsLmgKLWluZGV4IDQ3Y2UxZWEuLjE2YTkwYTggMTAwNjQ0Ci0tLS0gb3BlbnNzbC0wLjkuOG0vc3NsL3NzbC5oCi0rKysgb3BlbnNzbC0wLjkuOG0vc3NsL3NzbC5oCi1AQCAtNTYwLDcgKzU2MCw5IEBAIHR5cGVkZWYgc3RydWN0IHNzbF9zZXNzaW9uX3N0Ci0gI2RlZmluZSBTU0xfTU9ERV9BVVRPX1JFVFJZIDB4MDAwMDAwMDRMCi0gLyogRG9uJ3QgYXR0ZW1wdCB0byBhdXRvbWF0aWNhbGx5IGJ1aWxkIGNlcnRpZmljYXRlIGNoYWluICovCi0gI2RlZmluZSBTU0xfTU9ERV9OT19BVVRPX0NIQUlOIDB4MDAwMDAwMDhMCi0tCistLS0gb3BlbnNzbC0xLjAuMC5vcmlnL3NzbC9zc2wuaAkyMDEwLTAxLTA2IDA5OjM3OjM4LjAwMDAwMDAwMCAtMDgwMAorKysrIG9wZW5zc2wtMS4wLjAvc3NsL3NzbC5oCTIwMTAtMDQtMTMgMTc6MDY6MDMuMDAwMDAwMDAwIC0wNzAwCitAQCAtNjAyLDYgKzYwMiw5IEBAIHR5cGVkZWYgc3RydWN0IHNzbF9zZXNzaW9uX3N0CisgICogVExTIG9ubHkuKSAgIlJlbGVhc2VkIiBidWZmZXJzIGFyZSBwdXQgb250byBhIGZyZWUtbGlzdCBpbiB0aGUgY29udGV4dAorICAqIG9yIGp1c3QgZnJlZWQgKGRlcGVuZGluZyBvbiB0aGUgY29udGV4dCdzIHNldHRpbmcgZm9yIGZyZWVsaXN0X21heF9sZW4pLiAqLworICNkZWZpbmUgU1NMX01PREVfUkVMRUFTRV9CVUZGRVJTIDB4MDAwMDAwMTBMCiArLyogVXNlIHNtYWxsIHJlYWQgYW5kIHdyaXRlIGJ1ZmZlcnM6IChhKSBsYXp5IGFsbG9jYXRlIHJlYWQgYnVmZmVycyBmb3IKICsgKiBsYXJnZSBpbmNvbWluZyByZWNvcmRzLCBhbmQgKGIpIGxpbWl0IHRoZSBzaXplIG9mIG91dGdvaW5nIHJlY29yZHMuICovCi0rI2RlZmluZSBTU0xfTU9ERV9TTUFMTF9CVUZGRVJTIDB4MDAwMDAwMTBMCisrI2RlZmluZSBTU0xfTU9ERV9TTUFMTF9CVUZGRVJTIDB4MDAwMDAwMjBMCiAgCiAgLyogTm90ZTogU1NMW19DVFhdX3NldF97b3B0aW9ucyxtb2RlfSB1c2UgfD0gb3Agb24gdGhlIHByZXZpb3VzIHZhbHVlLAogICAqIHRoZXkgY2Fubm90IGJlIHVzZWQgdG8gY2xlYXIgYml0cy4gKi8KLWRpZmYgLS1naXQgb3BlbnNzbC0wLjkuOG0vc3NsL3NzbDMuaCBvcGVuc3NsLTAuOS44bS9zc2wvc3NsMy5oCi1pbmRleCA3ZTZhZmVlLi5iNWI4NjgzIDEwMDY0NAotLS0tIG9wZW5zc2wtMC45LjhtL3NzbC9zc2wzLmgKLSsrKyBvcGVuc3NsLTAuOS44bS9zc2wvc3NsMy5oCi1AQCAtMjU2LDYgKzI1Niw5IEBAIGV4dGVybiAiQyIgeworLS0tIG9wZW5zc2wtMS4wLjAub3JpZy9zc2wvc3NsMy5oCTIwMTAtMDEtMDYgMDk6Mzc6MzguMDAwMDAwMDAwIC0wODAwCisrKysgb3BlbnNzbC0xLjAuMC9zc2wvc3NsMy5oCTIwMTAtMDQtMTMgMTc6MDc6NTAuMDAwMDAwMDAwIC0wNzAwCitAQCAtMjgwLDYgKzI4MCw5IEBAIGV4dGVybiAiQyIgeworIAogICNkZWZpbmUgU1NMM19SVF9NQVhfRVhUUkEJCQkoMTYzODQpCi0gI2VuZGlmCiAgCiArLyogRGVmYXVsdCBidWZmZXIgbGVuZ3RoIHVzZWQgZm9yIHdyaXRlbiByZWNvcmRzLiAgVGh1cyBhIGdlbmVyYXRlZCByZWNvcmQKICsgKiB3aWxsIGNvbnRhaW4gcGxhaW50ZXh0IG5vIGxhcmdlciB0aGFuIHRoaXMgdmFsdWUuICovCiArI2RlZmluZSBTU0wzX1JUX0RFRkFVTFRfUExBSU5fTEVOR1RICTIwNDgKKyAvKiBNYXhpbXVtIHBsYWludGV4dCBsZW5ndGg6IGRlZmluZWQgYnkgU1NML1RMUyBzdGFuZGFyZHMgKi8KICAjZGVmaW5lIFNTTDNfUlRfTUFYX1BMQUlOX0xFTkdUSAkJMTYzODQKLSAjaWZkZWYgT1BFTlNTTF9OT19DT01QCi0gI2RlZmluZSBTU0wzX1JUX01BWF9DT01QUkVTU0VEX0xFTkdUSAlTU0wzX1JUX01BWF9QTEFJTl9MRU5HVEgKLUBAIC0yNjMsNiArMjY2LDEyIEBAIGV4dGVybiAiQyIgewotICNkZWZpbmUgU1NMM19SVF9NQVhfQ09NUFJFU1NFRF9MRU5HVEgJKDEwMjQrU1NMM19SVF9NQVhfUExBSU5fTEVOR1RIKQotICNlbmRpZgotICNkZWZpbmUgU1NMM19SVF9NQVhfRU5DUllQVEVEX0xFTkdUSAkoMTAyNCtTU0wzX1JUX01BWF9DT01QUkVTU0VEX0xFTkdUSCkKKyAvKiBNYXhpbXVtIGNvbXByZXNzaW9uIG92ZXJoZWFkOiBkZWZpbmVkIGJ5IFNTTC9UTFMgc3RhbmRhcmRzICovCitAQCAtMzExLDYgKzMxNCwxMyBAQCBleHRlcm4gIkMiIHsKKyAjZGVmaW5lIFNTTDNfUlRfTUFYX1BBQ0tFVF9TSVpFCQlcCisgCQkoU1NMM19SVF9NQVhfRU5DUllQVEVEX0xFTkdUSCtTU0wzX1JUX0hFQURFUl9MRU5HVEgpCisgCiArLyogRXh0cmEgc3BhY2UgZm9yIGVtcHR5IGZyYWdtZW50LCBoZWFkZXJzLCBNQUMsIGFuZCBwYWRkaW5nLiAqLwogKyNkZWZpbmUgU1NMM19SVF9ERUZBVUxUX1dSSVRFX09WRVJIRUFEICAyNTYKICsjZGVmaW5lIFNTTDNfUlRfREVGQVVMVF9QQUNLRVRfU0laRSAgICAgNDA5NiAtIFNTTDNfUlRfREVGQVVMVF9XUklURV9PVkVSSEVBRAogKyNpZiBTU0wzX1JUX0RFRkFVTFRfUExBSU5fTEVOR1RIICsgU1NMM19SVF9ERUZBVUxUX1dSSVRFX09WRVJIRUFEID4gU1NMM19SVF9ERUZBVUxUX1BBQ0tFVF9TSVpFCiArI2Vycm9yICJJbnN1ZmZpY2llbnQgc3BhY2UgYWxsb2NhdGVkIGZvciB3cml0ZSBidWZmZXJzLiIKICsjZW5kaWYKLSAjZGVmaW5lIFNTTDNfUlRfTUFYX1BBQ0tFVF9TSVpFCQkoU1NMM19SVF9NQVhfRU5DUllQVEVEX0xFTkdUSCtTU0wzX1JUX0hFQURFUl9MRU5HVEgpCi0gI2RlZmluZSBTU0wzX1JUX01BWF9EQVRBX1NJWkUJCQkoMTAyNCoxMDI0KQorKworICNkZWZpbmUgU1NMM19NRF9DTElFTlRfRklOSVNIRURfQ09OU1QJIlx4NDNceDRDXHg0RVx4NTQiCisgI2RlZmluZSBTU0wzX01EX1NFUlZFUl9GSU5JU0hFRF9DT05TVAkiXHg1M1x4NTJceDU2XHg1MiIKICAKLWRpZmYgLS1naXQgb3BlbnNzbC0wLjkuOG0vc3NsL3NzbHRlc3QuYyBvcGVuc3NsLTAuOS44bS9zc2wvc3NsdGVzdC5jCi1pbmRleCBiMDljNTQyLi4wOWQzNTAyIDEwMDY0NAotLS0tIG9wZW5zc2wtMC45LjhtL3NzbC9zc2x0ZXN0LmMKLSsrKyBvcGVuc3NsLTAuOS44bS9zc2wvc3NsdGVzdC5jCi1AQCAtMjc3LDYgKzI3Nyw4IEBAIHN0YXRpYyB2b2lkIHN2X3VzYWdlKHZvaWQpCitAQCAtNjM0LDQgKzY0NCwzIEBAIHR5cGVkZWYgc3RydWN0IHNzbDNfc3RhdGVfc3QKKyB9CisgI2VuZGlmCisgI2VuZGlmCistCistLS0gb3BlbnNzbC0xLjAuMC5vcmlnL3NzbC9zc2x0ZXN0LmMJMjAxMC0wMS0yNCAwODo1NzozOC4wMDAwMDAwMDAgLTA4MDAKKysrKyBvcGVuc3NsLTEuMC4wL3NzbC9zc2x0ZXN0LmMJMjAxMC0wNC0xMyAxNzowMTowNy4wMDAwMDAwMDAgLTA3MDAKK0BAIC0zMTYsNiArMzE2LDggQEAgc3RhdGljIHZvaWQgc3ZfdXNhZ2Uodm9pZCkKICAJICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgKGRlZmF1bHQgaXMgc2VjdDE2M3IyKS5cbiIpOwogICNlbmRpZgogIAlmcHJpbnRmKHN0ZGVyciwiIC10ZXN0X2NpcGhlcmxpc3QgLSB2ZXJpZmllcyB0aGUgb3JkZXIgb2YgdGhlIHNzbCBjaXBoZXIgbGlzdHNcbiIpOwpAQCAtMjQ0LDE3ICsyMzgsMTcgQEAKICAJfQogIAogIHN0YXRpYyB2b2lkIHByaW50X2RldGFpbHMoU1NMICpjX3NzbCwgY29uc3QgY2hhciAqcHJlZml4KQotQEAgLTQzMSw2ICs0MzMsOSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotICNpZmRlZiBPUEVOU1NMX0ZJUFMKLSAJaW50IGZpcHNfbW9kZT0wOworQEAgLTQ0NCw2ICs0NDYsOSBAQCBpbnQgb3BhcXVlX3ByZl9pbnB1dF9jYihTU0wgKnNzbCwgdm9pZCAqCisgCXJldHVybiBhcmctPnJldDsKKyAJfQogICNlbmRpZgogKwlpbnQgc3NsX21vZGUgPSAwOwogKwlpbnQgY19zbWFsbF9yZWNvcmRzPTA7CiArCWludCBzX3NtYWxsX3JlY29yZHM9MDsKICAKLSAJdmVyYm9zZSA9IDA7Ci0gCWRlYnVnID0gMDsKLUBAIC02MTksNiArNjI0LDE0IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJeworQEAgLTY4MCw2ICs2ODUsMTQgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKICAJCQl7CiAgCQkJdGVzdF9jaXBoZXJsaXN0ID0gMTsKICAJCQl9CkBAIC0yNjksNyArMjYzLDcgQEAKICAJCWVsc2UKICAJCQl7CiAgCQkJZnByaW50ZihzdGRlcnIsInVua25vd24gb3B0aW9uICVzXG4iLCphcmd2KTsKLUBAIC03NTUsNiArNzY4LDIxIEBAIGJhZDoKK0BAIC04MDIsNiArODE1LDIxIEBAIGJhZDoKICAJCVNTTF9DVFhfc2V0X2NpcGhlcl9saXN0KHNfY3R4LGNpcGhlcik7CiAgCQl9CiAgCkBAIC0yOTEsMTEgKzI4NSw5IEBACiAgI2lmbmRlZiBPUEVOU1NMX05PX0RICiAgCWlmICghbm9fZGhlKQogIAkJewotZGlmZiAtLWdpdCBvcGVuc3NsLTAuOS44bS90ZXN0L3Rlc3Rzc2wgb3BlbnNzbC0wLjkuOG0vdGVzdC90ZXN0c3NsCi1pbmRleCA4YWM5MGFlLi5hOWIyZTI0IDEwMDY0NAotLS0tIG9wZW5zc2wtMC45LjhtL3Rlc3QvdGVzdHNzbAotKysrIG9wZW5zc2wtMC45LjhtL3Rlc3QvdGVzdHNzbAotQEAgLTcwLDYgKzcwLDE2IEBAICRzc2x0ZXN0IC1jbGllbnRfYXV0aCAkQ0EgJGV4dHJhIHx8IGV4aXQgMQorLS0tIG9wZW5zc2wtMS4wLjAub3JpZy90ZXN0L3Rlc3Rzc2wJMjAwNi0wMy0xMCAxNTowNjoyNy4wMDAwMDAwMDAgLTA4MDAKKysrKyBvcGVuc3NsLTEuMC4wL3Rlc3QvdGVzdHNzbAkyMDEwLTA0LTEzIDE3OjAxOjA3LjAwMDAwMDAwMCAtMDcwMAorQEAgLTcwLDYgKzcwLDE2IEBAICRzc2x0ZXN0IC1jbGllbnRfYXV0aCAkQ0EgJGV4dHJhIHx8IGV4aXQKICBlY2hvIHRlc3Qgc3NsdjIvc3NsdjMgd2l0aCBib3RoIGNsaWVudCBhbmQgc2VydmVyIGF1dGhlbnRpY2F0aW9uCiAgJHNzbHRlc3QgLXNlcnZlcl9hdXRoIC1jbGllbnRfYXV0aCAkQ0EgJGV4dHJhIHx8IGV4aXQgMQogIApkaWZmIC0tZ2l0IGEvc3NsL01ha2VmaWxlIGIvc3NsL01ha2VmaWxlCmluZGV4IDVhYzM1MDcuLjJiMjc1ZmEgMTAwNjQ0Ci0tLSBhL3NzbC9NYWtlZmlsZQorKysgYi9zc2wvTWFrZWZpbGUKQEAgLTUzLDcgKzUzLDcgQEAKIHRvcDoKIAkoY2QgLi47ICQoTUFLRSkgRElSUz0kKERJUikgYWxsKQogCi1hbGw6CWxpYgorYWxsOglzaGFyZWQKIAogbGliOgkkKExJQk9CSikKIAkkKEFSKSAkKExJQikgJChMSUJPQkopCkBAIC0xMDYsNDUgKzEwNiw0MyBAQAogIyBETyBOT1QgREVMRVRFIFRISVMgTElORSAtLSBtYWtlIGRlcGVuZCBkZXBlbmRzIG9uIGl0LgogCiBiaW9fc3NsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1iaW9fc3NsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotYmlvX3NzbC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotYmlvX3NzbC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZHRsczEuaCAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotYmlvX3NzbC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi1iaW9fc3NsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotYmlvX3NzbC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorYmlvX3NzbC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaAorYmlvX3NzbC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2R0bHMxLmgKK2Jpb19zc2wubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKK2Jpb19zc2wubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAorYmlvX3NzbC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCiBiaW9fc3NsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmggLi4vaW5jbHVkZS9vcGVuc3NsL2tzc2wuaAogYmlvX3NzbC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCiBiaW9fc3NsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKIGJpb19zc2wubzogLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKIGJpb19zc2wubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmgKLWJpb19zc2wubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vaW5jbHVkZS9vcGVuc3NsL3BxX2NvbXBhdC5oCi1iaW9fc3NsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaCAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLWJpb19zc2wubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaAotYmlvX3NzbC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oCi1iaW9fc3NsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWJpb19zc2wubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaAotYmlvX3NzbC5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIGJpb19zc2wuYworYmlvX3NzbC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmgKK2Jpb19zc2wubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAorYmlvX3NzbC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaAorYmlvX3NzbC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oCitiaW9fc3NsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCitiaW9fc3NsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAorYmlvX3NzbC5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBiaW9fc3NsLmMKIGQxX2JvdGgubzogLi4vZV9vcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1kMV9ib3RoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotZDFfYm90aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotZDFfYm90aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZHNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL2R0bHMxLmgKLWQxX2JvdGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLWQxX2JvdGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotZDFfYm90aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1kMV9ib3RoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaAorZDFfYm90aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaAorZDFfYm90aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oCitkMV9ib3RoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9kdGxzMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCitkMV9ib3RoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKK2QxX2JvdGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCitkMV9ib3RoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCiBkMV9ib3RoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9rc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKIGQxX2JvdGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCiBkMV9ib3RoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCiBkMV9ib3RoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0uaAogZDFfYm90aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGVtMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi1kMV9ib3RoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcV9jb21wYXQuaCAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmgKLWQxX2JvdGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaCAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKLWQxX2JvdGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotZDFfYm90aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaAotZDFfYm90aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oCi1kMV9ib3RoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1kMV9ib3RoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotZDFfYm90aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBkMV9ib3RoLmMgc3NsX2xvY2wuaAorZDFfYm90aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmggLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAorZDFfYm90aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCitkMV9ib3RoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmgKK2QxX2JvdGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaAorZDFfYm90aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCitkMV9ib3RoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmgKK2QxX2JvdGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBkMV9ib3RoLmMKK2QxX2JvdGgubzogc3NsX2xvY2wuaAogZDFfY2xudC5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKIGQxX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCiBkMV9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jb21wLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCkBAIC0xNTIsMTQgKzE1MCwxMyBAQAogZDFfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZHRsczEuaCAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAogZDFfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCiBkMV9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotZDFfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotZDFfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9rc3NsLmgKLWQxX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vaW5jbHVkZS9vcGVuc3NsL21kNS5oCi1kMV9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotZDFfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotZDFfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGVtLmgKLWQxX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAotZDFfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcHFfY29tcGF0LmggLi4vaW5jbHVkZS9vcGVuc3NsL3BxdWV1ZS5oCitkMV9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCitkMV9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9rc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKK2QxX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL21kNS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKK2QxX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorZDFfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAorZDFfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGVtLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaAorZDFfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmgKIGQxX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaCAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKIGQxX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAogZDFfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaApAQCAtMTY4LDkwICsxNjUsODMgQEAKIGQxX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCiBkMV9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIGQxX2NsbnQuYyBrc3NsX2xjbC5oIHNzbF9sb2NsLmgKIGQxX2VuYy5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWQxX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLWQxX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotZDFfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvZHRsczEuaAotZDFfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1kMV9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotZDFfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLWQxX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgKK2QxX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaAorZDFfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi9pbmNsdWRlL29wZW5zc2wvZHNhLmgKK2QxX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZHRsczEuaCAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAorZDFfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKK2QxX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKK2QxX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaAogZDFfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9rc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKIGQxX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvbWQ1LmggLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAogZDFfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKIGQxX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAogZDFfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0uaCAuLi9pbmNsdWRlL29wZW5zc2wvcGVtMi5oCi1kMV9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vaW5jbHVkZS9vcGVuc3NsL3BxX2NvbXBhdC5oCi1kMV9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BxdWV1ZS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKLWQxX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1kMV9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaAotZDFfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmgKLWQxX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1kMV9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaAotZDFfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggZDFfZW5jLmMKLWQxX2VuYy5vOiBzc2xfbG9jbC5oCitkMV9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vaW5jbHVkZS9vcGVuc3NsL3BxdWV1ZS5oCitkMV9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaCAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKK2QxX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCitkMV9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmgKK2QxX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oCitkMV9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKK2QxX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKK2QxX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBkMV9lbmMuYyBzc2xfbG9jbC5oCiBkMV9saWIubzogLi4vZV9vcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1kMV9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1kMV9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaCAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWQxX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZHNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL2R0bHMxLmgKLWQxX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotZDFfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLWQxX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1kMV9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCitkMV9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jb21wLmgKK2QxX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oCitkMV9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2R0bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKK2QxX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCitkMV9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCitkMV9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgKIGQxX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wva3NzbC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCiBkMV9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCiBkMV9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKIGQxX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGVtLmgKIGQxX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGVtMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi1kMV9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BxX2NvbXBhdC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaAotZDFfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLWQxX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oCi1kMV9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaAotZDFfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLWQxX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oCi1kMV9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBkMV9saWIuYwotZDFfbGliLm86IHNzbF9sb2NsLmgKK2QxX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmggLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCitkMV9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAorZDFfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oCitkMV9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDMuaAorZDFfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCitkMV9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCitkMV9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggZDFfbGliLmMgc3NsX2xvY2wuaAogZDFfbWV0aC5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWQxX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1kMV9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jb21wLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1kMV9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvZHRsczEuaAotZDFfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotZDFfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi1kMV9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLWQxX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCitkMV9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oCitkMV9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi9pbmNsdWRlL29wZW5zc2wvZHNhLmgKK2QxX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2R0bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKK2QxX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAorZDFfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKK2QxX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgKIGQxX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2tzc2wuaCAuLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAogZDFfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKIGQxX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKIGQxX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BlbS5oCiBkMV9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLWQxX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BxX2NvbXBhdC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaAotZDFfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1kMV9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmgKLWQxX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaAotZDFfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1kMV9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmgKLWQxX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBkMV9tZXRoLmMKLWQxX21ldGgubzogc3NsX2xvY2wuaAorZDFfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmggLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCitkMV9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKK2QxX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmgKK2QxX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDMuaAorZDFfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAorZDFfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKK2QxX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggZDFfbWV0aC5jIHNzbF9sb2NsLmgKIGQxX3BrdC5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLWQxX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLWQxX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotZDFfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvZHRsczEuaAotZDFfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1kMV9wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotZDFfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLWQxX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgKK2QxX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaAorZDFfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi9pbmNsdWRlL29wZW5zc2wvZHNhLmgKK2QxX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZHRsczEuaCAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAorZDFfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKK2QxX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKK2QxX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaAogZDFfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9rc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKIGQxX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKIGQxX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAogZDFfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0uaAogZDFfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLWQxX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcHFfY29tcGF0LmggLi4vaW5jbHVkZS9vcGVuc3NsL3BxdWV1ZS5oCi1kMV9wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaCAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKLWQxX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCi1kMV9wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmgKLWQxX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oCi1kMV9wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLWQxX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLWQxX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBkMV9wa3QuYyBzc2xfbG9jbC5oCitkMV9wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BxdWV1ZS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKK2QxX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCitkMV9wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaAorZDFfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmgKK2QxX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCitkMV9wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaAorZDFfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggZDFfcGt0LmMKK2QxX3BrdC5vOiBzc2xfbG9jbC5oCiBkMV9zcnZyLm86IC4uL2Vfb3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAogZDFfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKIGQxX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaCAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKQEAgLTI1OSwxNCArMjQ5LDEzIEBACiBkMV9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9kdGxzMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCiBkMV9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKIGQxX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1kMV9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi1kMV9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmggLi4vaW5jbHVkZS9vcGVuc3NsL2tzc2wuaAotZDFfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi9pbmNsdWRlL29wZW5zc2wvbWQ1LmgKLWQxX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi1kMV9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi1kMV9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0uaAotZDFfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGVtMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi1kMV9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcV9jb21wYXQuaCAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmgKK2QxX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgKK2QxX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2tzc2wuaCAuLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorZDFfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvbWQ1LmggLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorZDFfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCitkMV9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCitkMV9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0uaCAuLi9pbmNsdWRlL29wZW5zc2wvcGVtMi5oCitkMV9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaAogZDFfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAogZDFfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCiBkMV9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oCkBAIC0yNzUsMjc2ICsyNjQsMjU3IEBACiBkMV9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAogZDFfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBkMV9zcnZyLmMgc3NsX2xvY2wuaAoga3NzbC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAota3NzbC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLWtzc2wubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaCAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLWtzc2wubzogLi4vaW5jbHVkZS9vcGVuc3NsL2R0bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLWtzc2wubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAota3NzbC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLWtzc2wubzogLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCitrc3NsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oCitrc3NsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi9pbmNsdWRlL29wZW5zc2wvZHRsczEuaAora3NzbC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi9pbmNsdWRlL29wZW5zc2wvZWMuaAora3NzbC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCitrc3NsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCiBrc3NsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9rcmI1X2Fzbi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9rc3NsLmgKIGtzc2wubzogLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAoga3NzbC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCiBrc3NsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCiBrc3NsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0uaCAuLi9pbmNsdWRlL29wZW5zc2wvcGVtMi5oCi1rc3NsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wcV9jb21wYXQuaAota3NzbC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1rc3NsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmgKLWtzc2wubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaAota3NzbC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1rc3NsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmgKLWtzc2wubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBrc3NsLmMKK2tzc2wubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vaW5jbHVkZS9vcGVuc3NsL3BxdWV1ZS5oCitrc3NsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKK2tzc2wubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmgKK2tzc2wubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDMuaAora3NzbC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAora3NzbC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKK2tzc2wubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5Lmgga3NzbC5jIGtzc2xfbGNsLmgKIHMyM19jbG50Lm86IC4uL2Vfb3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotczIzX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1zMjNfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotczIzX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9kdGxzMS5oCi1zMjNfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotczIzX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotczIzX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotczIzX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCitzMjNfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaAorczIzX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaAorczIzX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2R0bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKK3MyM19jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKK3MyM19jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorczIzX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgKIHMyM19jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9rc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKIHMyM19jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAogczIzX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKIHMyM19jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0uaAogczIzX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAotczIzX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BxX2NvbXBhdC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaAotczIzX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaCAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKLXMyM19jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLXMyM19jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oCi1zMjNfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oCi1zMjNfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotczIzX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi1zMjNfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBzMjNfY2xudC5jIHNzbF9sb2NsLmgKK3MyM19jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaCAuLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCitzMjNfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCitzMjNfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oCitzMjNfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oCitzMjNfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCitzMjNfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oCitzMjNfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIHMyM19jbG50LmMKK3MyM19jbG50Lm86IHNzbF9sb2NsLmgKIHMyM19saWIubzogLi4vZV9vcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1zMjNfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotczIzX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotczIzX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZHNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL2R0bHMxLmgKLXMyM19saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLXMyM19saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotczIzX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1zMjNfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaAorczIzX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaAorczIzX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oCitzMjNfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9kdGxzMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCitzMjNfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKK3MyM19saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCitzMjNfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCiBzMjNfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9rc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKIHMyM19saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCiBzMjNfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCiBzMjNfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0uaAogczIzX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGVtMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi1zMjNfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcV9jb21wYXQuaCAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmgKLXMyM19saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotczIzX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oCi1zMjNfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmgKLXMyM19saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotczIzX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oCi1zMjNfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggczIzX2xpYi5jCi1zMjNfbGliLm86IHNzbF9sb2NsLmgKK3MyM19saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BxdWV1ZS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAorczIzX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCitzMjNfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oCitzMjNfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmgKK3MyM19saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKK3MyM19saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCitzMjNfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIHMyM19saWIuYyBzc2xfbG9jbC5oCiBzMjNfbWV0aC5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXMyM19tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotczIzX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaCAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLXMyM19tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvZHRsczEuaAotczIzX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLXMyM19tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLXMyM19tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLXMyM19tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaAorczIzX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jb21wLmgKK3MyM19tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi9pbmNsdWRlL29wZW5zc2wvZHNhLmgKK3MyM19tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9kdGxzMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCitzMjNfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCitzMjNfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKK3MyM19tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCiBzMjNfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wva3NzbC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCiBzMjNfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKIHMyM19tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCiBzMjNfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGVtLmgKIHMyM19tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLXMyM19tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcV9jb21wYXQuaCAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmgKLXMyM19tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLXMyM19tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmgKLXMyM19tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmgKLXMyM19tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLXMyM19tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmgKLXMyM19tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggczIzX21ldGguYwotczIzX21ldGgubzogc3NsX2xvY2wuaAorczIzX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BxdWV1ZS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAorczIzX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAorczIzX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmgKK3MyM19tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmgKK3MyM19tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCitzMjNfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKK3MyM19tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIHMyM19tZXRoLmMgc3NsX2xvY2wuaAogczIzX3BrdC5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXMyM19wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1zMjNfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jb21wLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1zMjNfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvZHRsczEuaAotczIzX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotczIzX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi1zMjNfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLXMyM19wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCitzMjNfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oCitzMjNfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi9pbmNsdWRlL29wZW5zc2wvZHNhLmgKK3MyM19wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL2R0bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKK3MyM19wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAorczIzX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKK3MyM19wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgKIHMyM19wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL2tzc2wuaCAuLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAogczIzX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKIHMyM19wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKIHMyM19wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BlbS5oCiBzMjNfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLXMyM19wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BxX2NvbXBhdC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaAotczIzX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1zMjNfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmgKLXMyM19wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaAotczIzX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1zMjNfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmgKLXMyM19wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBzMjNfcGt0LmMKLXMyM19wa3Qubzogc3NsX2xvY2wuaAorczIzX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmggLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCitzMjNfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKK3MyM19wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmgKK3MyM19wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDMuaAorczIzX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAorczIzX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKK3MyM19wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggczIzX3BrdC5jIHNzbF9sb2NsLmgKIHMyM19zcnZyLm86IC4uL2Vfb3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotczIzX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1zMjNfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotczIzX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9kdGxzMS5oCi1zMjNfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotczIzX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotczIzX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotczIzX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCitzMjNfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaAorczIzX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaAorczIzX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2R0bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKK3MyM19zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKK3MyM19zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorczIzX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgKIHMyM19zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9rc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKIHMyM19zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAogczIzX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKIHMyM19zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0uaAogczIzX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAotczIzX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BxX2NvbXBhdC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaAotczIzX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaCAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKLXMyM19zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLXMyM19zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oCi1zMjNfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oCi1zMjNfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotczIzX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi1zMjNfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBzMjNfc3J2ci5jIHNzbF9sb2NsLmgKK3MyM19zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaCAuLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCitzMjNfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCitzMjNfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oCitzMjNfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oCitzMjNfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCitzMjNfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oCitzMjNfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIHMyM19zcnZyLmMKK3MyM19zcnZyLm86IHNzbF9sb2NsLmgKIHMyX2NsbnQubzogLi4vZV9vcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1zMl9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotczJfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotczJfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZHNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL2R0bHMxLmgKLXMyX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLXMyX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotczJfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1zMl9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaAorczJfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaAorczJfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oCitzMl9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9kdGxzMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCitzMl9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKK3MyX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCitzMl9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCiBzMl9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9rc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKIHMyX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCiBzMl9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCiBzMl9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0uaAogczJfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGVtMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi1zMl9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcV9jb21wYXQuaCAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmgKLXMyX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaCAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKLXMyX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotczJfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaAotczJfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oCi1zMl9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1zMl9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotczJfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBzMl9jbG50LmMgc3NsX2xvY2wuaAorczJfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmggLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAorczJfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCitzMl9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmgKK3MyX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaAorczJfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCitzMl9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmgKK3MyX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBzMl9jbG50LmMKK3MyX2NsbnQubzogc3NsX2xvY2wuaAogczJfZW5jLm86IC4uL2Vfb3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotczJfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotczJfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jb21wLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1zMl9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9kdGxzMS5oCi1zMl9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLXMyX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi1zMl9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotczJfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaAorczJfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oCitzMl9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaAorczJfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9kdGxzMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCitzMl9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAorczJfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorczJfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCiBzMl9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL2tzc2wuaCAuLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAogczJfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAogczJfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCiBzMl9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BlbS5oCiBzMl9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAotczJfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcV9jb21wYXQuaCAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmgKLXMyX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1zMl9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaAotczJfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmgKLXMyX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1zMl9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaAotczJfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggczJfZW5jLmMKLXMyX2VuYy5vOiBzc2xfbG9jbC5oCitzMl9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BxdWV1ZS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAorczJfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKK3MyX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaAorczJfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmgKK3MyX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAorczJfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAorczJfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIHMyX2VuYy5jIHNzbF9sb2NsLmgKIHMyX2xpYi5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXMyX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXMyX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotczJfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvZHRsczEuaAotczJfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1zMl9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotczJfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLXMyX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgKK3MyX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaAorczJfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi9pbmNsdWRlL29wZW5zc2wvZHNhLmgKK3MyX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZHRsczEuaCAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAorczJfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKK3MyX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKK3MyX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaAogczJfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9rc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKIHMyX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvbWQ1LmggLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAogczJfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKIHMyX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAogczJfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0uaCAuLi9pbmNsdWRlL29wZW5zc2wvcGVtMi5oCi1zMl9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vaW5jbHVkZS9vcGVuc3NsL3BxX2NvbXBhdC5oCi1zMl9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BxdWV1ZS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAotczJfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLXMyX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaAotczJfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmgKLXMyX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotczJfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotczJfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIHMyX2xpYi5jIHNzbF9sb2NsLmgKK3MyX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmgKK3MyX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCitzMl9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaAorczJfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmgKK3MyX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCitzMl9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaAorczJfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggczJfbGliLmMKK3MyX2xpYi5vOiBzc2xfbG9jbC5oCiBzMl9tZXRoLm86IC4uL2Vfb3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotczJfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXMyX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaCAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLXMyX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9kdGxzMS5oCi1zMl9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1zMl9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLXMyX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotczJfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgKK3MyX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jb21wLmgKK3MyX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaAorczJfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZHRsczEuaCAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAorczJfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCitzMl9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorczJfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaAogczJfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wva3NzbC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCiBzMl9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAogczJfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAogczJfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGVtLmgKIHMyX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAotczJfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcHFfY29tcGF0LmggLi4vaW5jbHVkZS9vcGVuc3NsL3BxdWV1ZS5oCi1zMl9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLXMyX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaAotczJfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oCi1zMl9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLXMyX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaAotczJfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIHMyX21ldGguYwotczJfbWV0aC5vOiBzc2xfbG9jbC5oCitzMl9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaCAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKK3MyX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAorczJfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaAorczJfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oCitzMl9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCitzMl9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAorczJfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBzMl9tZXRoLmMgc3NsX2xvY2wuaAogczJfcGt0Lm86IC4uL2Vfb3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotczJfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotczJfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jb21wLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1zMl9wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9kdGxzMS5oCi1zMl9wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLXMyX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi1zMl9wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotczJfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaAorczJfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oCitzMl9wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaAorczJfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9kdGxzMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCitzMl9wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAorczJfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorczJfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCiBzMl9wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL2tzc2wuaCAuLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAogczJfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAogczJfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCiBzMl9wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BlbS5oCiBzMl9wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAotczJfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcV9jb21wYXQuaCAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmgKLXMyX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1zMl9wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaAotczJfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmgKLXMyX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1zMl9wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaAotczJfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggczJfcGt0LmMKLXMyX3BrdC5vOiBzc2xfbG9jbC5oCitzMl9wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BxdWV1ZS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAorczJfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKK3MyX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaAorczJfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmgKK3MyX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAorczJfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAorczJfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIHMyX3BrdC5jIHNzbF9sb2NsLmgKIHMyX3NydnIubzogLi4vZV9vcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1zMl9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotczJfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotczJfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZHNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL2R0bHMxLmgKLXMyX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLXMyX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotczJfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1zMl9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaAorczJfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaAorczJfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oCitzMl9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9kdGxzMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCitzMl9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKK3MyX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCitzMl9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCiBzMl9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9rc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKIHMyX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCiBzMl9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCiBzMl9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0uaAogczJfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGVtMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi1zMl9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcV9jb21wYXQuaCAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmgKLXMyX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaCAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKLXMyX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotczJfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaAotczJfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oCi1zMl9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1zMl9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotczJfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBzMl9zcnZyLmMgc3NsX2xvY2wuaAorczJfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmggLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAorczJfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCitzMl9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmgKK3MyX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaAorczJfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCitzMl9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmgKK3MyX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBzMl9zcnZyLmMKK3MyX3NydnIubzogc3NsX2xvY2wuaAogczNfYm90aC5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXMzX2JvdGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1zM19ib3RoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jb21wLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1zM19ib3RoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvZHRsczEuaAotczNfYm90aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotczNfYm90aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi1zM19ib3RoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLXMzX2JvdGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCitzM19ib3RoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oCitzM19ib3RoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi9pbmNsdWRlL29wZW5zc2wvZHNhLmgKK3MzX2JvdGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2R0bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKK3MzX2JvdGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAorczNfYm90aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKK3MzX2JvdGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgKIHMzX2JvdGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2tzc2wuaCAuLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAogczNfYm90aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKIHMzX2JvdGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKIHMzX2JvdGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BlbS5oCiBzM19ib3RoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLXMzX2JvdGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BxX2NvbXBhdC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaAotczNfYm90aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAotczNfYm90aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCi1zM19ib3RoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oCi1zM19ib3RoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmgKLXMzX2JvdGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLXMzX2JvdGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi1zM19ib3RoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIHMzX2JvdGguYyBzc2xfbG9jbC5oCitzM19ib3RoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaCAuLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCitzM19ib3RoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKK3MzX2JvdGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaAorczNfYm90aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oCitzM19ib3RoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKK3MzX2JvdGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaAorczNfYm90aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIHMzX2JvdGguYworczNfYm90aC5vOiBzc2xfbG9jbC5oCiBzM19jbG50Lm86IC4uL2Vfb3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAogczNfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKIHMzX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaCAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKQEAgLTU1MywxMyArNTIzLDEyIEBACiBzM19jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKIHMzX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oCiBzM19jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLXMzX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCi1zM19jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9rc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLXMzX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL21kNS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLXMzX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotczNfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotczNfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGVtLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaAotczNfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi9pbmNsdWRlL29wZW5zc2wvcHFfY29tcGF0LmgKK3MzX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaCAuLi9pbmNsdWRlL29wZW5zc2wva3NzbC5oCitzM19jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9tZDUuaAorczNfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKK3MzX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKK3MzX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BlbS5oCitzM19jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKIHMzX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BxdWV1ZS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKIHMzX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAogczNfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oCkBAIC01NjksOTAgKzUzOCw4NCBAQAogczNfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIGtzc2xfbGNsLmgKIHMzX2NsbnQubzogczNfY2xudC5jIHNzbF9sb2NsLmgKIHMzX2VuYy5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXMzX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXMzX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotczNfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvZHRsczEuaAotczNfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1zM19lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotczNfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLXMzX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgKK3MzX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaAorczNfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi9pbmNsdWRlL29wZW5zc2wvZHNhLmgKK3MzX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZHRsczEuaCAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAorczNfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKK3MzX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKK3MzX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaAogczNfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9rc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKIHMzX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvbWQ1LmggLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAogczNfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKIHMzX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAogczNfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0uaCAuLi9pbmNsdWRlL29wZW5zc2wvcGVtMi5oCi1zM19lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vaW5jbHVkZS9vcGVuc3NsL3BxX2NvbXBhdC5oCi1zM19lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BxdWV1ZS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAotczNfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLXMzX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaAotczNfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmgKLXMzX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotczNfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotczNfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIHMzX2VuYy5jIHNzbF9sb2NsLmgKLXMzX2xpYi5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXMzX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXMzX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotczNfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9kaC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaAotczNfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9kdGxzMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi1zM19saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotczNfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotczNfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCitzM19lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vaW5jbHVkZS9vcGVuc3NsL3BxdWV1ZS5oCitzM19lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorczNfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmgKK3MzX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oCitzM19lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorczNfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmgKK3MzX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIHMzX2VuYy5jCitzM19lbmMubzogc3NsX2xvY2wuaAorczNfbGliLm86IC4uL2NyeXB0by9lYy9lY19sY2wuaCAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAorczNfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi9pbmNsdWRlL29wZW5zc2wvYm4uaAorczNfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oCitzM19saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uL2luY2x1ZGUvb3BlbnNzbC9kaC5oCitzM19saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9kdGxzMS5oCitzM19saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKK3MzX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCitzM19saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAogczNfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmggLi4vaW5jbHVkZS9vcGVuc3NsL2tzc2wuaAogczNfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9tZDUuaAogczNfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAogczNfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCiBzM19saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BlbS5oCiBzM19saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAotczNfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcV9jb21wYXQuaCAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmgKLXMzX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1zM19saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaAotczNfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmgKLXMzX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1zM19saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaAotczNfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5Lmgga3NzbF9sY2wuaAotczNfbGliLm86IHMzX2xpYi5jIHNzbF9sb2NsLmgKK3MzX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmggLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCitzM19saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAorczNfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oCitzM19saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDMuaAorczNfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCitzM19saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCitzM19saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5Lmgga3NzbF9sY2wuaCBzM19saWIuYyBzc2xfbG9jbC5oCiBzM19tZXRoLm86IC4uL2Vfb3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotczNfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXMzX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaCAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLXMzX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9kdGxzMS5oCi1zM19tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1zM19tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLXMzX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotczNfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgKK3MzX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jb21wLmgKK3MzX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaAorczNfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZHRsczEuaCAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAorczNfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCitzM19tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorczNfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaAogczNfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wva3NzbC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCiBzM19tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAogczNfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAogczNfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGVtLmgKIHMzX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAotczNfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcHFfY29tcGF0LmggLi4vaW5jbHVkZS9vcGVuc3NsL3BxdWV1ZS5oCi1zM19tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLXMzX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaAotczNfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oCi1zM19tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLXMzX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaAotczNfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIHMzX21ldGguYwotczNfbWV0aC5vOiBzc2xfbG9jbC5oCitzM19tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaCAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKK3MzX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAorczNfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaAorczNfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oCitzM19tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCitzM19tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAorczNfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBzM19tZXRoLmMgc3NsX2xvY2wuaAogczNfcGt0Lm86IC4uL2Vfb3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotczNfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotczNfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jb21wLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1zM19wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9kdGxzMS5oCi1zM19wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLXMzX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi1zM19wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotczNfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaAorczNfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oCitzM19wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaAorczNfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9kdGxzMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCitzM19wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAorczNfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorczNfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCiBzM19wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL2tzc2wuaCAuLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAogczNfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAogczNfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCiBzM19wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BlbS5oCiBzM19wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAotczNfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcV9jb21wYXQuaCAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmgKLXMzX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1zM19wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaAotczNfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmgKLXMzX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1zM19wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaAotczNfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggczNfcGt0LmMKLXMzX3BrdC5vOiBzc2xfbG9jbC5oCitzM19wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BxdWV1ZS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAorczNfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKK3MzX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaAorczNfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmgKK3MzX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAorczNfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAorczNfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIHMzX3BrdC5jIHNzbF9sb2NsLmgKIHMzX3NydnIubzogLi4vZV9vcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCiBzM19zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAogczNfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaApAQCAtNjYwLDE0ICs2MjMsMTMgQEAKIHMzX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2R0bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKIHMzX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAogczNfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLXMzX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLXMzX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaCAuLi9pbmNsdWRlL29wZW5zc2wva3JiNV9hc24uaAotczNfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wva3NzbC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi1zM19zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9tZDUuaCAuLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi1zM19zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXMzX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLXMzX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmgKLXMzX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vaW5jbHVkZS9vcGVuc3NsL3BxX2NvbXBhdC5oCitzM19zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCitzM19zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9rcmI1X2Fzbi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9rc3NsLmgKK3MzX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vaW5jbHVkZS9vcGVuc3NsL21kNS5oCitzM19zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorczNfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAorczNfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGVtLmgKK3MzX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAogczNfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmggLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAogczNfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCiBzM19zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmgKQEAgLTY3Nyw0NyArNjM5LDQ0IEBACiBzM19zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5Lmgga3NzbF9sY2wuaAogczNfc3J2ci5vOiBzM19zcnZyLmMgc3NsX2xvY2wuaAogc3NsX2FsZ3MubzogLi4vZV9vcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1zc2xfYWxncy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXNzbF9hbGdzLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jb21wLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1zc2xfYWxncy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZHNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL2R0bHMxLmgKLXNzbF9hbGdzLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1zc2xfYWxncy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi1zc2xfYWxncy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1zc2xfYWxncy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgKK3NzbF9hbGdzLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oCitzc2xfYWxncy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oCitzc2xfYWxncy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZHRsczEuaCAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAorc3NsX2FsZ3MubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAorc3NsX2FsZ3MubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCitzc2xfYWxncy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaAogc3NsX2FsZ3MubzogLi4vaW5jbHVkZS9vcGVuc3NsL2tzc2wuaCAuLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAogc3NsX2FsZ3MubzogLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCiBzc2xfYWxncy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAogc3NsX2FsZ3MubzogLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BlbS5oCiBzc2xfYWxncy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGVtMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi1zc2xfYWxncy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcHFfY29tcGF0LmggLi4vaW5jbHVkZS9vcGVuc3NsL3BxdWV1ZS5oCi1zc2xfYWxncy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1zc2xfYWxncy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oCi1zc2xfYWxncy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oCi1zc2xfYWxncy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1zc2xfYWxncy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oCi1zc2xfYWxncy5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIHNzbF9hbGdzLmMKLXNzbF9hbGdzLm86IHNzbF9sb2NsLmgKK3NzbF9hbGdzLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaCAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKK3NzbF9hbGdzLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKK3NzbF9hbGdzLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oCitzc2xfYWxncy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oCitzc2xfYWxncy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAorc3NsX2FsZ3MubzogLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCitzc2xfYWxncy5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBzc2xfYWxncy5jIHNzbF9sb2NsLmgKIHNzbF9hc24xLm86IC4uL2Vfb3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9hc24xX21hYy5oCi1zc2xfYXNuMS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmgKLXNzbF9hc24xLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oCi1zc2xfYXNuMS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oCi1zc2xfYXNuMS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZHRsczEuaCAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotc3NsX2FzbjEubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotc3NsX2FzbjEubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1zc2xfYXNuMS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorc3NsX2FzbjEubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAorc3NsX2FzbjEubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaCAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKK3NzbF9hc24xLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvZHRsczEuaAorc3NsX2FzbjEubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKK3NzbF9hc24xLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKK3NzbF9hc24xLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKIHNzbF9hc24xLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmggLi4vaW5jbHVkZS9vcGVuc3NsL2tzc2wuaAogc3NsX2FzbjEubzogLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAogc3NsX2FzbjEubzogLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAogc3NsX2FzbjEubzogLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKIHNzbF9hc24xLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0uaCAuLi9pbmNsdWRlL29wZW5zc2wvcGVtMi5oCi1zc2xfYXNuMS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi9pbmNsdWRlL29wZW5zc2wvcHFfY29tcGF0LmgKLXNzbF9hc24xLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaCAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKLXNzbF9hc24xLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLXNzbF9hc24xLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oCi1zc2xfYXNuMS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oCi1zc2xfYXNuMS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotc3NsX2FzbjEubzogLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi1zc2xfYXNuMS5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBzc2xfYXNuMS5jIHNzbF9sb2NsLmgKK3NzbF9hc24xLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaAorc3NsX2FzbjEubzogLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorc3NsX2FzbjEubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaAorc3NsX2FzbjEubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaAorc3NsX2FzbjEubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorc3NsX2FzbjEubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaAorc3NsX2FzbjEubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBzc2xfYXNuMS5jCitzc2xfYXNuMS5vOiBzc2xfbG9jbC5oCiBzc2xfY2VydC5vOiAuLi9jcnlwdG8vb19kaXIuaCAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAogc3NsX2NlcnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oCiBzc2xfY2VydC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaApAQCAtNzI2LDEzICs2ODUsMTIgQEAKIHNzbF9jZXJ0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9kdGxzMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCiBzc2xfY2VydC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCiBzc2xfY2VydC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLXNzbF9jZXJ0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi1zc2xfY2VydC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9rc3NsLmgKLXNzbF9jZXJ0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLXNzbF9jZXJ0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLXNzbF9jZXJ0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1zc2xfY2VydC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGVtLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaAotc3NsX2NlcnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vaW5jbHVkZS9vcGVuc3NsL3BxX2NvbXBhdC5oCitzc2xfY2VydC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaAorc3NsX2NlcnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2tzc2wuaCAuLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorc3NsX2NlcnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCitzc2xfY2VydC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAorc3NsX2NlcnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BlbS5oCitzc2xfY2VydC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGVtMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCiBzc2xfY2VydC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmggLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCiBzc2xfY2VydC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCiBzc2xfY2VydC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaApAQCAtNzQyLDE5ICs3MDAsMTggQEAKIHNzbF9jZXJ0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5djMuaAogc3NsX2NlcnQubzogc3NsX2NlcnQuYyBzc2xfbG9jbC5oCiBzc2xfY2lwaC5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXNzbF9jaXBoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotc3NsX2NpcGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaCAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLXNzbF9jaXBoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvZHRsczEuaAotc3NsX2NpcGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLXNzbF9jaXBoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKK3NzbF9jaXBoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oCitzc2xfY2lwaC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oCitzc2xfY2lwaC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZHRsczEuaCAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAorc3NsX2NpcGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAorc3NsX2NpcGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oCiBzc2xfY2lwaC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi1zc2xfY2lwaC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgKLXNzbF9jaXBoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9rc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLXNzbF9jaXBoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotc3NsX2NpcGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLXNzbF9jaXBoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0uaAotc3NsX2NpcGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAotc3NsX2NpcGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BxX2NvbXBhdC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaAorc3NsX2NpcGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaCAuLi9pbmNsdWRlL29wZW5zc2wva3NzbC5oCitzc2xfY2lwaC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCitzc2xfY2lwaC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCitzc2xfY2lwaC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAorc3NsX2NpcGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmgKK3NzbF9jaXBoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaAogc3NsX2NpcGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAogc3NsX2NpcGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaAogc3NsX2NpcGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaApAQCAtNzYzLDI3NiArNzIwLDI1NiBAQAogc3NsX2NpcGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBzc2xfY2lwaC5jCiBzc2xfY2lwaC5vOiBzc2xfbG9jbC5oCiBzc2xfZXJyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1zc2xfZXJyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotc3NsX2Vyci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotc3NsX2Vyci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZHRsczEuaCAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotc3NsX2Vyci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi1zc2xfZXJyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotc3NsX2Vyci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorc3NsX2Vyci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaAorc3NsX2Vyci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2R0bHMxLmgKK3NzbF9lcnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKK3NzbF9lcnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAorc3NsX2Vyci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCiBzc2xfZXJyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmggLi4vaW5jbHVkZS9vcGVuc3NsL2tzc2wuaAogc3NsX2Vyci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCiBzc2xfZXJyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKIHNzbF9lcnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKIHNzbF9lcnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmgKLXNzbF9lcnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vaW5jbHVkZS9vcGVuc3NsL3BxX2NvbXBhdC5oCi1zc2xfZXJyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaCAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLXNzbF9lcnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaAotc3NsX2Vyci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oCi1zc2xfZXJyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLXNzbF9lcnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaAotc3NsX2Vyci5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIHNzbF9lcnIuYworc3NsX2Vyci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmgKK3NzbF9lcnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAorc3NsX2Vyci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaAorc3NsX2Vyci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oCitzc2xfZXJyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCitzc2xfZXJyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAorc3NsX2Vyci5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBzc2xfZXJyLmMKIHNzbF9lcnIyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1zc2xfZXJyMi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXNzbF9lcnIyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jb21wLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1zc2xfZXJyMi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZHRsczEuaCAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotc3NsX2VycjIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotc3NsX2VycjIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1zc2xfZXJyMi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorc3NsX2VycjIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jb21wLmgKK3NzbF9lcnIyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi9pbmNsdWRlL29wZW5zc2wvZHRsczEuaAorc3NsX2VycjIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKK3NzbF9lcnIyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKK3NzbF9lcnIyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKIHNzbF9lcnIyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmggLi4vaW5jbHVkZS9vcGVuc3NsL2tzc2wuaAogc3NsX2VycjIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAogc3NsX2VycjIubzogLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAogc3NsX2VycjIubzogLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKIHNzbF9lcnIyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0uaCAuLi9pbmNsdWRlL29wZW5zc2wvcGVtMi5oCi1zc2xfZXJyMi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi9pbmNsdWRlL29wZW5zc2wvcHFfY29tcGF0LmgKLXNzbF9lcnIyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaCAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLXNzbF9lcnIyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmgKLXNzbF9lcnIyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmgKLXNzbF9lcnIyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLXNzbF9lcnIyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmgKLXNzbF9lcnIyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5Lmggc3NsX2VycjIuYworc3NsX2VycjIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vaW5jbHVkZS9vcGVuc3NsL3BxdWV1ZS5oCitzc2xfZXJyMi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCitzc2xfZXJyMi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaAorc3NsX2VycjIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDMuaAorc3NsX2VycjIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKK3NzbF9lcnIyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAorc3NsX2VycjIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5Lmggc3NsX2VycjIuYwogc3NsX2xpYi5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXNzbF9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1zc2xfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jb21wLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NvbmYuaAotc3NsX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2RoLmgKLXNzbF9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9kdGxzMS5oCi1zc2xfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1zc2xfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLXNzbF9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotc3NsX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorc3NsX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaAorc3NsX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY29uZi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorc3NsX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZGguaCAuLi9pbmNsdWRlL29wZW5zc2wvZHNhLmgKK3NzbF9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2R0bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKK3NzbF9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAorc3NsX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvZW5naW5lLmgKK3NzbF9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAogc3NsX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9rc3NsLmgKIHNzbF9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAogc3NsX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vY3NwLmgKIHNzbF9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKIHNzbF9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BlbS5oCiBzc2xfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLXNzbF9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BxX2NvbXBhdC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaAotc3NsX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAotc3NsX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCi1zc2xfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oCi1zc2xfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmgKLXNzbF9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLXNzbF9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi1zc2xfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5djMuaCBrc3NsX2xjbC5oCi1zc2xfbGliLm86IHNzbF9saWIuYyBzc2xfbG9jbC5oCitzc2xfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaCAuLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCitzc2xfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKK3NzbF9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaAorc3NsX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oCitzc2xfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKK3NzbF9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaAorc3NsX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oCitzc2xfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5djMuaCBrc3NsX2xjbC5oIHNzbF9saWIuYyBzc2xfbG9jbC5oCiBzc2xfcnNhLm86IC4uL2Vfb3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotc3NsX3JzYS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXNzbF9yc2EubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaCAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLXNzbF9yc2EubzogLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9kdGxzMS5oCi1zc2xfcnNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1zc2xfcnNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLXNzbF9yc2EubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotc3NsX3JzYS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgKK3NzbF9yc2EubzogLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jb21wLmgKK3NzbF9yc2EubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaAorc3NsX3JzYS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZHRsczEuaCAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAorc3NsX3JzYS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCitzc2xfcnNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorc3NsX3JzYS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaAogc3NsX3JzYS5vOiAuLi9pbmNsdWRlL29wZW5zc2wva3NzbC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCiBzc2xfcnNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAogc3NsX3JzYS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAogc3NsX3JzYS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGVtLmgKIHNzbF9yc2EubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAotc3NsX3JzYS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcHFfY29tcGF0LmggLi4vaW5jbHVkZS9vcGVuc3NsL3BxdWV1ZS5oCi1zc2xfcnNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLXNzbF9yc2EubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaAotc3NsX3JzYS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oCi1zc2xfcnNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLXNzbF9yc2EubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaAotc3NsX3JzYS5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIHNzbF9sb2NsLmgKLXNzbF9yc2Eubzogc3NsX3JzYS5jCitzc2xfcnNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaCAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKK3NzbF9yc2EubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAorc3NsX3JzYS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaAorc3NsX3JzYS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oCitzc2xfcnNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCitzc2xfcnNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAorc3NsX3JzYS5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBzc2xfbG9jbC5oIHNzbF9yc2EuYwogc3NsX3Nlc3MubzogLi4vZV9vcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi1zc2xfc2Vzcy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXNzbF9zZXNzLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jb21wLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi1zc2xfc2Vzcy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZHNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL2R0bHMxLmgKLXNzbF9zZXNzLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1zc2xfc2Vzcy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi1zc2xfc2Vzcy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZW5naW5lLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1zc2xfc2Vzcy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorc3NsX3Nlc3MubzogLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jb21wLmgKK3NzbF9zZXNzLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi9pbmNsdWRlL29wZW5zc2wvZHNhLmgKK3NzbF9zZXNzLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9kdGxzMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCitzc2xfc2Vzcy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCitzc2xfc2Vzcy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvZW5naW5lLmgKK3NzbF9zZXNzLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKIHNzbF9zZXNzLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmggLi4vaW5jbHVkZS9vcGVuc3NsL2tzc2wuaAogc3NsX3Nlc3MubzogLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAogc3NsX3Nlc3MubzogLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAogc3NsX3Nlc3MubzogLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKIHNzbF9zZXNzLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0uaCAuLi9pbmNsdWRlL29wZW5zc2wvcGVtMi5oCi1zc2xfc2Vzcy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi9pbmNsdWRlL29wZW5zc2wvcHFfY29tcGF0LmgKLXNzbF9zZXNzLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaCAuLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCi1zc2xfc2Vzcy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1zc2xfc2Vzcy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oCi1zc2xfc2Vzcy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oCi1zc2xfc2Vzcy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1zc2xfc2Vzcy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oCi1zc2xfc2Vzcy5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIHNzbF9sb2NsLmgKLXNzbF9zZXNzLm86IHNzbF9zZXNzLmMKK3NzbF9zZXNzLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaAorc3NsX3Nlc3MubzogLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaCAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKK3NzbF9zZXNzLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKK3NzbF9zZXNzLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oCitzc2xfc2Vzcy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oCitzc2xfc2Vzcy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAorc3NsX3Nlc3MubzogLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCitzc2xfc2Vzcy5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBzc2xfbG9jbC5oIHNzbF9zZXNzLmMKIHNzbF9zdGF0Lm86IC4uL2Vfb3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotc3NsX3N0YXQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi1zc2xfc3RhdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotc3NsX3N0YXQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9kdGxzMS5oCi1zc2xfc3RhdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotc3NsX3N0YXQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotc3NsX3N0YXQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotc3NsX3N0YXQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCitzc2xfc3RhdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaAorc3NsX3N0YXQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaAorc3NsX3N0YXQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2R0bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKK3NzbF9zdGF0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKK3NzbF9zdGF0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorc3NsX3N0YXQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgKIHNzbF9zdGF0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9rc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKIHNzbF9zdGF0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAogc3NsX3N0YXQubzogLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKIHNzbF9zdGF0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0uaAogc3NsX3N0YXQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAotc3NsX3N0YXQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BxX2NvbXBhdC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaAotc3NsX3N0YXQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotc3NsX3N0YXQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaAotc3NsX3N0YXQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaAotc3NsX3N0YXQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotc3NsX3N0YXQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaAotc3NsX3N0YXQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBzc2xfbG9jbC5oCi1zc2xfc3RhdC5vOiBzc2xfc3RhdC5jCitzc2xfc3RhdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmggLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCitzc2xfc3RhdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCitzc2xfc3RhdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaAorc3NsX3N0YXQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDMuaAorc3NsX3N0YXQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKK3NzbF9zdGF0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAorc3NsX3N0YXQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5Lmggc3NsX2xvY2wuaCBzc2xfc3RhdC5jCiBzc2xfdHh0Lm86IC4uL2Vfb3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotc3NsX3R4dC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXNzbF90eHQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaCAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLXNzbF90eHQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9kdGxzMS5oCi1zc2xfdHh0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi1zc2xfdHh0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLXNzbF90eHQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotc3NsX3R4dC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgKK3NzbF90eHQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jb21wLmgKK3NzbF90eHQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaAorc3NsX3R4dC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZHRsczEuaCAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAorc3NsX3R4dC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCitzc2xfdHh0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorc3NsX3R4dC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaAogc3NsX3R4dC5vOiAuLi9pbmNsdWRlL29wZW5zc2wva3NzbC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCiBzc2xfdHh0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAogc3NsX3R4dC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAogc3NsX3R4dC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGVtLmgKIHNzbF90eHQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAotc3NsX3R4dC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcHFfY29tcGF0LmggLi4vaW5jbHVkZS9vcGVuc3NsL3BxdWV1ZS5oCi1zc2xfdHh0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLXNzbF90eHQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaAotc3NsX3R4dC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oCi1zc2xfdHh0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLXNzbF90eHQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaAotc3NsX3R4dC5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIHNzbF9sb2NsLmgKLXNzbF90eHQubzogc3NsX3R4dC5jCitzc2xfdHh0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaCAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKK3NzbF90eHQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAorc3NsX3R4dC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaAorc3NsX3R4dC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oCitzc2xfdHh0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCitzc2xfdHh0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAorc3NsX3R4dC5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBzc2xfbG9jbC5oIHNzbF90eHQuYwogdDFfY2xudC5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLXQxX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi10MV9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jb21wLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi10MV9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvZHRsczEuaAotdDFfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotdDFfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi10MV9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLXQxX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCit0MV9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oCit0MV9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi9pbmNsdWRlL29wZW5zc2wvZHNhLmgKK3QxX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2R0bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKK3QxX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAordDFfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKK3QxX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgKIHQxX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2tzc2wuaCAuLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAogdDFfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKIHQxX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKIHQxX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BlbS5oCiB0MV9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLXQxX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BxX2NvbXBhdC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaAotdDFfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAotdDFfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCi10MV9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oCi10MV9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmgKLXQxX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLXQxX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi10MV9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIHNzbF9sb2NsLmggdDFfY2xudC5jCit0MV9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaCAuLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCit0MV9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKK3QxX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaAordDFfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oCit0MV9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKK3QxX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaAordDFfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIHNzbF9sb2NsLmgKK3QxX2NsbnQubzogdDFfY2xudC5jCiB0MV9lbmMubzogLi4vZV9vcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi10MV9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi10MV9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaCAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLXQxX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZHNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL2R0bHMxLmgKLXQxX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotdDFfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLXQxX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi10MV9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCit0MV9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jb21wLmgKK3QxX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oCit0MV9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL2R0bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKK3QxX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCit0MV9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCit0MV9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgKIHQxX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wva3NzbC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCiB0MV9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL21kNS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKIHQxX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCiB0MV9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKIHQxX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGVtLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaAotdDFfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wcV9jb21wYXQuaAotdDFfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaCAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKLXQxX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCi10MV9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmgKLXQxX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oCi10MV9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLXQxX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLXQxX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBzc2xfbG9jbC5oIHQxX2VuYy5jCit0MV9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vaW5jbHVkZS9vcGVuc3NsL3BxdWV1ZS5oCit0MV9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAordDFfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmgKK3QxX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oCit0MV9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAordDFfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmgKK3QxX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIHNzbF9sb2NsLmgKK3QxX2VuYy5vOiB0MV9lbmMuYwogdDFfbGliLm86IC4uL2Vfb3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotdDFfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotdDFfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jb21wLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NvbmYuaAotdDFfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi9pbmNsdWRlL29wZW5zc2wvZHNhLmgKLXQxX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZHRsczEuaCAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotdDFfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKLXQxX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLXQxX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAordDFfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oCit0MV9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NvbmYuaCAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKK3QxX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZHNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL2R0bHMxLmgKK3QxX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi9pbmNsdWRlL29wZW5zc2wvZWMuaAordDFfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKK3QxX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCiB0MV9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaCAuLi9pbmNsdWRlL29wZW5zc2wva3NzbC5oCiB0MV9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAogdDFfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vaW5jbHVkZS9vcGVuc3NsL29jc3AuaAogdDFfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCiB0MV9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BlbS5oCiB0MV9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAotdDFfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcV9jb21wYXQuaCAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmgKLXQxX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi10MV9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaAotdDFfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmgKLXQxX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi10MV9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaAotdDFfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmgKLXQxX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOXYzLmggc3NsX2xvY2wuaCB0MV9saWIuYwordDFfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaCAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKK3QxX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCit0MV9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmgKK3QxX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oCit0MV9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKK3QxX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKK3QxX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOXYzLmggc3NsX2xvY2wuaAordDFfbGliLm86IHQxX2xpYi5jCiB0MV9tZXRoLm86IC4uL2Vfb3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotdDFfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXQxX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaCAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLXQxX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9kdGxzMS5oCi10MV9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi10MV9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLXQxX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotdDFfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgKK3QxX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jb21wLmgKK3QxX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaAordDFfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZHRsczEuaCAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAordDFfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCit0MV9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAordDFfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaAogdDFfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wva3NzbC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCiB0MV9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAogdDFfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAogdDFfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGVtLmgKIHQxX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAotdDFfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcHFfY29tcGF0LmggLi4vaW5jbHVkZS9vcGVuc3NsL3BxdWV1ZS5oCi10MV9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLXQxX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaAotdDFfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oCi10MV9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLXQxX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaAotdDFfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIHNzbF9sb2NsLmgKLXQxX21ldGgubzogdDFfbWV0aC5jCit0MV9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaCAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKK3QxX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAordDFfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaAordDFfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oCit0MV9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCit0MV9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAordDFfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBzc2xfbG9jbC5oIHQxX21ldGguYwogdDFfcmVuZWcubzogLi4vZV9vcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi10MV9yZW5lZy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLXQxX3JlbmVnLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jb21wLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi10MV9yZW5lZy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZHNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL2R0bHMxLmgKLXQxX3JlbmVnLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi10MV9yZW5lZy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi10MV9yZW5lZy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi10MV9yZW5lZy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgKK3QxX3JlbmVnLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oCit0MV9yZW5lZy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oCit0MV9yZW5lZy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZHRsczEuaCAuLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAordDFfcmVuZWcubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAordDFfcmVuZWcubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCit0MV9yZW5lZy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaAogdDFfcmVuZWcubzogLi4vaW5jbHVkZS9vcGVuc3NsL2tzc2wuaCAuLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAogdDFfcmVuZWcubzogLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCiB0MV9yZW5lZy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAogdDFfcmVuZWcubzogLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BlbS5oCiB0MV9yZW5lZy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGVtMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi10MV9yZW5lZy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcHFfY29tcGF0LmggLi4vaW5jbHVkZS9vcGVuc3NsL3BxdWV1ZS5oCi10MV9yZW5lZy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi10MV9yZW5lZy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oCi10MV9yZW5lZy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oCi10MV9yZW5lZy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi10MV9yZW5lZy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oCi10MV9yZW5lZy5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIHNzbF9sb2NsLmgKLXQxX3JlbmVnLm86IHQxX3JlbmVnLmMKK3QxX3JlbmVnLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaCAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKK3QxX3JlbmVnLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKK3QxX3JlbmVnLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oCit0MV9yZW5lZy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oCit0MV9yZW5lZy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAordDFfcmVuZWcubzogLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCit0MV9yZW5lZy5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBzc2xfbG9jbC5oIHQxX3JlbmVnLmMKIHQxX3NydnIubzogLi4vZV9vcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi10MV9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotdDFfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotdDFfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZHNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL2R0bHMxLmgKLXQxX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLXQxX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotdDFfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi10MV9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaAordDFfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaAordDFfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oCit0MV9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9kdGxzMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCit0MV9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKK3QxX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCit0MV9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCiB0MV9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9rc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKIHQxX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCiB0MV9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCiB0MV9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0uaAogdDFfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGVtMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi10MV9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcV9jb21wYXQuaCAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmgKLXQxX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaCAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKLXQxX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotdDFfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaAotdDFfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oCi10MV9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi10MV9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotdDFfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBzc2xfbG9jbC5oIHQxX3NydnIuYwordDFfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmggLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAordDFfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCit0MV9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmgKK3QxX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaAordDFfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCit0MV9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmgKK3QxX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBzc2xfbG9jbC5oCit0MV9zcnZyLm86IHQxX3NydnIuYwpkaWZmIC0tZ2l0IGEvc3NsL2Jpb19zc2wuYyBiL3NzbC9iaW9fc3NsLmMKaW5kZXggNDIwZGViNy4uYWYzMTlhZiAxMDA2NDQKLS0tIGEvc3NsL2Jpb19zc2wuYworKysgYi9zc2wvYmlvX3NzbC5jCkBAIC0zOTgsMTcgKzM5OCwxOSBAQAogCQkJfQogCQlicmVhazsKIAljYXNlIEJJT19DVFJMX1BPUDoKLQkJLyogdWdseSBiaXQgb2YgYSBoYWNrICovCi0JCWlmIChzc2wtPnJiaW8gIT0gc3NsLT53YmlvKSAvKiB3ZSBhcmUgaW4gdHJvdWJsZSA6LSggKi8KKwkJLyogT25seSBkZXRhY2ggaWYgd2UgYXJlIHRoZSBCSU8gZXhwbGljaXRseSBiZWluZyBwb3BwZWQgKi8KKwkJaWYgKGIgPT0gcHRyKQogCQkJewotCQkJQklPX2ZyZWVfYWxsKHNzbC0+d2Jpbyk7CisJCQkvKiBTaG91bGRuJ3QgaGFwcGVuIGluIHByYWN0aWNlIGJlY2F1c2UgdGhlCisJCQkgKiByYmlvIGFuZCB3YmlvIGFyZSB0aGUgc2FtZSB3aGVuIHB1c2hlZC4KKwkJCSAqLworCQkJaWYgKHNzbC0+cmJpbyAhPSBzc2wtPndiaW8pCisJCQkJQklPX2ZyZWVfYWxsKHNzbC0+d2Jpbyk7CisJCQlpZiAoYi0+bmV4dF9iaW8gIT0gTlVMTCkKKwkJCQlDUllQVE9fYWRkKCZiLT5uZXh0X2Jpby0+cmVmZXJlbmNlcywtMSxDUllQVE9fTE9DS19CSU8pOworCQkJc3NsLT53YmlvPU5VTEw7CisJCQlzc2wtPnJiaW89TlVMTDsKIAkJCX0KLQkJaWYgKGItPm5leHRfYmlvICE9IE5VTEwpCi0JCQl7Ci0JCQlDUllQVE9fYWRkKCZiLT5uZXh0X2Jpby0+cmVmZXJlbmNlcywxLENSWVBUT19MT0NLX0JJTyk7Ci0JCQl9Ci0JCXNzbC0+d2Jpbz1OVUxMOwotCQlzc2wtPnJiaW89TlVMTDsKIAkJYnJlYWs7CiAJY2FzZSBCSU9fQ19ET19TVEFURV9NQUNISU5FOgogCQlCSU9fY2xlYXJfcmV0cnlfZmxhZ3MoYik7CkBAIC01NDMsNyArNTQ1LDYgQEAKIAlyZXR1cm4ocmV0KTsKIGVycjoKIAlpZiAoY29uICE9IE5VTEwpIEJJT19mcmVlKGNvbik7Ci0JaWYgKHJldCAhPSBOVUxMKSBCSU9fZnJlZShyZXQpOwogCXJldHVybihOVUxMKTsKIAl9CiAKZGlmZiAtLWdpdCBhL3NzbC9kMV9ib3RoLmMgYi9zc2wvZDFfYm90aC5jCmluZGV4IDBhNWMwOGQuLjAyNDJmMWUgMTAwNjQ0Ci0tLSBhL3NzbC9kMV9ib3RoLmMKKysrIGIvc3NsL2QxX2JvdGguYwpAQCAtMjI2LDcgKzIyNiw3IEBACiAJCQkoaW50KXMtPmQxLT53X21zZ19oZHIubXNnX2xlbiArIERUTFMxX0hNX0hFQURFUl9MRU5HVEgpOwogCiAJaWYgKHMtPndyaXRlX2hhc2gpCi0JCW1hY19zaXplID0gRVZQX01EX3NpemUocy0+d3JpdGVfaGFzaCk7CisJCW1hY19zaXplID0gRVZQX01EX0NUWF9zaXplKHMtPndyaXRlX2hhc2gpOwogCWVsc2UKIAkJbWFjX3NpemUgPSAwOwogCkBAIC0zMTIsNyArMzEyLDcgQEAKIAkJCQljb25zdCBzdHJ1Y3QgaG1faGVhZGVyX3N0ICptc2dfaGRyID0gJnMtPmQxLT53X21zZ19oZHI7CiAJCQkJaW50IHhsZW47CiAKLQkJCQlpZiAoZnJhZ19vZmYgPT0gMCAmJiBzLT5jbGllbnRfdmVyc2lvbiAhPSBEVExTMV9CQURfVkVSKQorCQkJCWlmIChmcmFnX29mZiA9PSAwICYmIHMtPnZlcnNpb24gIT0gRFRMUzFfQkFEX1ZFUikKIAkJCQkJewogCQkJCQkvKiByZWNvbnN0cnVjdCBtZXNzYWdlIGhlYWRlciBpcyBpZiBpdAogCQkJCQkgKiBpcyBiZWluZyBzZW50IGluIHNpbmdsZSBmcmFnbWVudCAqLwpAQCAtNDE5LDkgKzQxOSwxMCBAQAogCQkJczJuIChtc2dfaGRyLT5zZXEscCk7CiAJCQlsMm4zKDAscCk7CiAJCQlsMm4zKG1zZ19sZW4scCk7Ci0JCQlpZiAocy0+Y2xpZW50X3ZlcnNpb24gIT0gRFRMUzFfQkFEX1ZFUikKLQkJCQlwICAgICAgIC09IERUTFMxX0hNX0hFQURFUl9MRU5HVEgsCisJCQlpZiAocy0+dmVyc2lvbiAhPSBEVExTMV9CQURfVkVSKSB7CisJCQkJcCAgICAgICAtPSBEVExTMV9ITV9IRUFERVJfTEVOR1RIOwogCQkJCW1zZ19sZW4gKz0gRFRMUzFfSE1fSEVBREVSX0xFTkdUSDsKKwkJCX0KIAogCQkJc3NsM19maW5pc2hfbWFjKHMsIHAsIG1zZ19sZW4pOwogCQkJaWYgKHMtPm1zZ19jYWxsYmFjaykKQEAgLTQ4NSw3ICs0ODYsNyBAQAogCQl7CiAJCS8qIG1zZ19sZW4gaXMgbGltaXRlZCB0byAyXjI0LCBidXQgaXMgZWZmZWN0aXZlbHkgY2hlY2tlZAogCQkgKiBhZ2FpbnN0IG1heCBhYm92ZSAqLwotCQlpZiAoIUJVRl9NRU1fZ3Jvd19jbGVhbihzLT5pbml0X2J1ZiwoaW50KW1zZ19sZW4rRFRMUzFfSE1fSEVBREVSX0xFTkdUSCkpCisJCWlmICghQlVGX01FTV9ncm93X2NsZWFuKHMtPmluaXRfYnVmLG1zZ19sZW4rRFRMUzFfSE1fSEVBREVSX0xFTkdUSCkpCiAJCQl7CiAJCQlTU0xlcnIoU1NMX0ZfRFRMUzFfUFJFUFJPQ0VTU19GUkFHTUVOVCxFUlJfUl9CVUZfTElCKTsKIAkJCXJldHVybiBTU0xfQURfSU5URVJOQUxfRVJST1I7CkBAIC01NjcsMTcgKzU2OCwxNyBAQAogCWludCBpPS0xOwogCWhtX2ZyYWdtZW50ICpmcmFnID0gTlVMTDsKIAlwaXRlbSAqaXRlbSA9IE5VTEw7Ci0JUFFfNjRCSVQgc2VxNjQ7CisJdW5zaWduZWQgY2hhciBzZXE2NGJlWzhdOwogCXVuc2lnbmVkIGxvbmcgZnJhZ19sZW4gPSBtc2dfaGRyLT5mcmFnX2xlbjsKIAogCWlmICgobXNnX2hkci0+ZnJhZ19vZmYrZnJhZ19sZW4pID4gbXNnX2hkci0+bXNnX2xlbikKIAkJZ290byBlcnI7CiAKIAkvKiBUcnkgdG8gZmluZCBpdGVtIGluIHF1ZXVlLCB0byBwcmV2ZW50IGR1cGxpY2F0ZSBlbnRyaWVzICovCi0JcHFfNjRiaXRfaW5pdCgmc2VxNjQpOwotCXBxXzY0Yml0X2Fzc2lnbl93b3JkKCZzZXE2NCwgbXNnX2hkci0+c2VxKTsKLQlpdGVtID0gcHF1ZXVlX2ZpbmQocy0+ZDEtPmJ1ZmZlcmVkX21lc3NhZ2VzLCBzZXE2NCk7Ci0JcHFfNjRiaXRfZnJlZSgmc2VxNjQpOworCW1lbXNldChzZXE2NGJlLDAsc2l6ZW9mKHNlcTY0YmUpKTsKKwlzZXE2NGJlWzZdID0gKHVuc2lnbmVkIGNoYXIpIChtc2dfaGRyLT5zZXE+PjgpOworCXNlcTY0YmVbN10gPSAodW5zaWduZWQgY2hhcikgbXNnX2hkci0+c2VxOworCWl0ZW0gPSBwcXVldWVfZmluZChzLT5kMS0+YnVmZmVyZWRfbWVzc2FnZXMsIHNlcTY0YmUpOwogCQogCS8qIERpc2NhcmQgdGhlIG1lc3NhZ2UgaWYgc2VxdWVuY2UgbnVtYmVyIHdhcyBhbHJlYWR5IHRoZXJlLCBpcwogCSAqIHRvbyBmYXIgaW4gdGhlIGZ1dHVyZSwgYWxyZWFkeSBpbiB0aGUgcXVldWUgb3IgaWYgd2UgcmVjZWl2ZWQKQEAgLTYwMSwyOSArNjAyLDI5IEBACiAJCX0KIAogCWlmIChmcmFnX2xlbikKLQl7CisJCXsKIAkJZnJhZyA9IGR0bHMxX2htX2ZyYWdtZW50X25ldyhmcmFnX2xlbik7CiAJCWlmICggZnJhZyA9PSBOVUxMKQogCQkJZ290byBlcnI7CiAKIAkJbWVtY3B5KCYoZnJhZy0+bXNnX2hlYWRlciksIG1zZ19oZHIsIHNpemVvZigqbXNnX2hkcikpOwogCi0JCS8qIHJlYWQgdGhlIGJvZHkgb2YgdGhlIGZyYWdtZW50IChoZWFkZXIgaGFzIGFscmVhZHkgYmVlbiByZWFkKSAqLworCQkvKiByZWFkIHRoZSBib2R5IG9mIHRoZSBmcmFnbWVudCAoaGVhZGVyIGhhcyBhbHJlYWR5IGJlZW4gcmVhZCAqLwogCQlpID0gcy0+bWV0aG9kLT5zc2xfcmVhZF9ieXRlcyhzLFNTTDNfUlRfSEFORFNIQUtFLAogCQkJZnJhZy0+ZnJhZ21lbnQsZnJhZ19sZW4sMCk7CiAJCWlmIChpPD0wIHx8ICh1bnNpZ25lZCBsb25nKWkhPWZyYWdfbGVuKQogCQkJZ290byBlcnI7CiAKLQkJcHFfNjRiaXRfaW5pdCgmc2VxNjQpOwotCQlwcV82NGJpdF9hc3NpZ25fd29yZCgmc2VxNjQsIG1zZ19oZHItPnNlcSk7CisJCW1lbXNldChzZXE2NGJlLDAsc2l6ZW9mKHNlcTY0YmUpKTsKKwkJc2VxNjRiZVs2XSA9ICh1bnNpZ25lZCBjaGFyKShtc2dfaGRyLT5zZXE+PjgpOworCQlzZXE2NGJlWzddID0gKHVuc2lnbmVkIGNoYXIpKG1zZ19oZHItPnNlcSk7CiAKLQkJaXRlbSA9IHBpdGVtX25ldyhzZXE2NCwgZnJhZyk7Ci0JCXBxXzY0Yml0X2ZyZWUoJnNlcTY0KTsKKwkJaXRlbSA9IHBpdGVtX25ldyhzZXE2NGJlLCBmcmFnKTsKIAkJaWYgKCBpdGVtID09IE5VTEwpCiAJCQlnb3RvIGVycjsKIAogCQlwcXVldWVfaW5zZXJ0KHMtPmQxLT5idWZmZXJlZF9tZXNzYWdlcywgaXRlbSk7Ci0JfQorCQl9CiAKIAlyZXR1cm4gRFRMUzFfSE1fRlJBR01FTlRfUkVUUlk7CiAKQEAgLTc1Nyw4ICs3NTgsNiBAQAogCQlwPSAmKGRbRFRMUzFfSE1fSEVBREVSX0xFTkdUSF0pOwogCiAJCWk9cy0+bWV0aG9kLT5zc2wzX2VuYy0+ZmluYWxfZmluaXNoX21hYyhzLAotCQkJJihzLT5zMy0+ZmluaXNoX2Rnc3QxKSwKLQkJCSYocy0+czMtPmZpbmlzaF9kZ3N0MiksCiAJCQlzZW5kZXIsc2xlbixzLT5zMy0+dG1wLmZpbmlzaF9tZCk7CiAJCXMtPnMzLT50bXAuZmluaXNoX21kX2xlbiA9IGk7CiAJCW1lbWNweShwLCBzLT5zMy0+dG1wLmZpbmlzaF9tZCwgaSk7CkBAIC04MjMsMTIgKzgyMiwxMSBAQAogCQlzLT5kMS0+aGFuZHNoYWtlX3dyaXRlX3NlcSA9IHMtPmQxLT5uZXh0X2hhbmRzaGFrZV93cml0ZV9zZXE7CiAJCXMtPmluaXRfbnVtPURUTFMxX0NDU19IRUFERVJfTEVOR1RIOwogCi0JCWlmIChzLT5jbGllbnRfdmVyc2lvbiA9PSBEVExTMV9CQURfVkVSKQotCQkJeworCQlpZiAocy0+dmVyc2lvbiA9PSBEVExTMV9CQURfVkVSKSB7CiAJCQlzLT5kMS0+bmV4dF9oYW5kc2hha2Vfd3JpdGVfc2VxKys7CiAJCQlzMm4ocy0+ZDEtPmhhbmRzaGFrZV93cml0ZV9zZXEscCk7CiAJCQlzLT5pbml0X251bSs9MjsKLQkJCX0KKwkJfQogCiAJCXMtPmluaXRfb2ZmPTA7CiAKQEAgLTg0NywyMSArODQ1LDIxIEBACiAKIHN0YXRpYyBpbnQgZHRsczFfYWRkX2NlcnRfdG9fYnVmKEJVRl9NRU0gKmJ1ZiwgdW5zaWduZWQgbG9uZyAqbCwgWDUwOSAqeCkKIAl7Ci0JCWludCBuOwotCQl1bnNpZ25lZCBjaGFyICpwOworCWludCBuOworCXVuc2lnbmVkIGNoYXIgKnA7CiAKLQkJbj1pMmRfWDUwOSh4LE5VTEwpOwotCQlpZiAoIUJVRl9NRU1fZ3Jvd19jbGVhbihidWYsKGludCkobisoKmwpKzMpKSkKLQkJCXsKLQkJCVNTTGVycihTU0xfRl9EVExTMV9BRERfQ0VSVF9UT19CVUYsRVJSX1JfQlVGX0xJQik7Ci0JCQlyZXR1cm4gMDsKLQkJCX0KLQkJcD0odW5zaWduZWQgY2hhciAqKSYoYnVmLT5kYXRhWypsXSk7Ci0JCWwybjMobixwKTsKLQkJaTJkX1g1MDkoeCwmcCk7Ci0JCSpsKz1uKzM7CisJbj1pMmRfWDUwOSh4LE5VTEwpOworCWlmICghQlVGX01FTV9ncm93X2NsZWFuKGJ1ZiwoaW50KShuKygqbCkrMykpKQorCQl7CisJCVNTTGVycihTU0xfRl9EVExTMV9BRERfQ0VSVF9UT19CVUYsRVJSX1JfQlVGX0xJQik7CisJCXJldHVybiAwOworCQl9CisJcD0odW5zaWduZWQgY2hhciAqKSYoYnVmLT5kYXRhWypsXSk7CisJbDJuMyhuLHApOworCWkyZF9YNTA5KHgsJnApOworCSpsKz1uKzM7CiAKLQkJcmV0dXJuIDE7CisJcmV0dXJuIDE7CiAJfQogdW5zaWduZWQgbG9uZyBkdGxzMV9vdXRwdXRfY2VydF9jaGFpbihTU0wgKnMsIFg1MDkgKngpCiAJewpAQCAtODgwLDcgKzg3OCw3IEBACiAJaWYgKHggIT0gTlVMTCkKIAkJewogCQlYNTA5X1NUT1JFX0NUWCB4c19jdHg7Ci0gIAorCiAJCWlmICghWDUwOV9TVE9SRV9DVFhfaW5pdCgmeHNfY3R4LHMtPmN0eC0+Y2VydF9zdG9yZSx4LE5VTEwpKQogICAJCQl7CiAgIAkJCVNTTGVycihTU0xfRl9EVExTMV9PVVRQVVRfQ0VSVF9DSEFJTixFUlJfUl9YNTA5X0xJQik7CkBAIC04ODgsNiArODg2LDggQEAKICAgCQkJfQogICAKIAkJWDUwOV92ZXJpZnlfY2VydCgmeHNfY3R4KTsKKwkJLyogRG9uJ3QgbGVhdmUgZXJyb3JzIGluIHRoZSBxdWV1ZSAqLworCQlFUlJfY2xlYXJfZXJyb3IoKTsKIAkJZm9yIChpPTA7IGkgPCBza19YNTA5X251bSh4c19jdHguY2hhaW4pOyBpKyspCiAgIAkJCXsKIAkJCXggPSBza19YNTA5X3ZhbHVlKHhzX2N0eC5jaGFpbiwgaSk7CkBAIC05MDAsNyArOTAwLDcgQEAKICAgCQkJfQogICAJCVg1MDlfU1RPUkVfQ1RYX2NsZWFudXAoJnhzX2N0eCk7CiAgIAkJfQotCS8qIFRoYXd0ZSBzcGVjaWFsIDotKSAqLworICAJLyogVGhhd3RlIHNwZWNpYWwgOi0pICovCiAJZm9yIChpPTA7IGk8c2tfWDUwOV9udW0ocy0+Y3R4LT5leHRyYV9jZXJ0cyk7IGkrKykKIAkJewogCQl4PXNrX1g1MDlfdmFsdWUocy0+Y3R4LT5leHRyYV9jZXJ0cyxpKTsKQEAgLTEwMDQsNyArMTAwNCw3IEBACiAJewogCXBpdGVtICppdGVtOwogCWhtX2ZyYWdtZW50ICpmcmFnOwotCVBRXzY0QklUIHNlcTY0OworCXVuc2lnbmVkIGNoYXIgc2VxNjRiZVs4XTsKIAogCS8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGltbWVkaWF0ZWx5IGFmdGVyIGEgbWVzc2FnZSBoYXMgCiAJICogYmVlbiBzZXJpYWxpemVkICovCkBAIC0xMDE3LDcgKzEwMTcsNyBAQAogCWlmICggaXNfY2NzKQogCQl7CiAJCU9QRU5TU0xfYXNzZXJ0KHMtPmQxLT53X21zZ19oZHIubXNnX2xlbiArIAotCQkJRFRMUzFfQ0NTX0hFQURFUl9MRU5HVEggPD0gKHVuc2lnbmVkIGludClzLT5pbml0X251bSk7CisJCQkgICAgICAgKChzLT52ZXJzaW9uPT1EVExTMV9WRVJTSU9OKT9EVExTMV9DQ1NfSEVBREVSX0xFTkdUSDozKSA9PSAodW5zaWduZWQgaW50KXMtPmluaXRfbnVtKTsKIAkJfQogCWVsc2UKIAkJewpAQCAtMTAzOCwxNSArMTAzOCwxNCBAQAogCWZyYWctPm1zZ19oZWFkZXIuc2F2ZWRfcmV0cmFuc21pdF9zdGF0ZS5jb21wcmVzcyA9IHMtPmNvbXByZXNzOwogCWZyYWctPm1zZ19oZWFkZXIuc2F2ZWRfcmV0cmFuc21pdF9zdGF0ZS5zZXNzaW9uID0gcy0+c2Vzc2lvbjsKIAlmcmFnLT5tc2dfaGVhZGVyLnNhdmVkX3JldHJhbnNtaXRfc3RhdGUuZXBvY2ggPSBzLT5kMS0+d19lcG9jaDsKKwkKKwltZW1zZXQoc2VxNjRiZSwwLHNpemVvZihzZXE2NGJlKSk7CisJc2VxNjRiZVs2XSA9ICh1bnNpZ25lZCBjaGFyKShkdGxzMV9nZXRfcXVldWVfcHJpb3JpdHkoZnJhZy0+bXNnX2hlYWRlci5zZXEsCisJCQkJCQkJCQkJCQkJCSAgZnJhZy0+bXNnX2hlYWRlci5pc19jY3MpPj44KTsKKwlzZXE2NGJlWzddID0gKHVuc2lnbmVkIGNoYXIpKGR0bHMxX2dldF9xdWV1ZV9wcmlvcml0eShmcmFnLT5tc2dfaGVhZGVyLnNlcSwKKwkJCQkJCQkJCQkJCQkJICBmcmFnLT5tc2dfaGVhZGVyLmlzX2NjcykpOwogCi0JcHFfNjRiaXRfaW5pdCgmc2VxNjQpOwotCi0JcHFfNjRiaXRfYXNzaWduX3dvcmQoJnNlcTY0LAotCQkJCQkJIGR0bHMxX2dldF9xdWV1ZV9wcmlvcml0eShmcmFnLT5tc2dfaGVhZGVyLnNlcSwKLQkJCQkJCQkJCQkJCSAgZnJhZy0+bXNnX2hlYWRlci5pc19jY3MpKTsKLQkJCi0JaXRlbSA9IHBpdGVtX25ldyhzZXE2NCwgZnJhZyk7Ci0JcHFfNjRiaXRfZnJlZSgmc2VxNjQpOworCWl0ZW0gPSBwaXRlbV9uZXcoc2VxNjRiZSwgZnJhZyk7CiAJaWYgKCBpdGVtID09IE5VTEwpCiAJCXsKIAkJZHRsczFfaG1fZnJhZ21lbnRfZnJlZShmcmFnKTsKQEAgLTEwNzIsNyArMTA3MSw3IEBACiAJcGl0ZW0gKml0ZW07CiAJaG1fZnJhZ21lbnQgKmZyYWcgOwogCXVuc2lnbmVkIGxvbmcgaGVhZGVyX2xlbmd0aDsKLQlQUV82NEJJVCBzZXE2NDsKKwl1bnNpZ25lZCBjaGFyIHNlcTY0YmVbOF07CiAJc3RydWN0IGR0bHMxX3JldHJhbnNtaXRfc3RhdGUgc2F2ZWRfc3RhdGU7CiAJdW5zaWduZWQgY2hhciBzYXZlX3dyaXRlX3NlcXVlbmNlWzhdOwogCkBAIC0xMDgyLDExICsxMDgxLDExIEBACiAJICovCiAKIAkvKiBYRFRMUzogIHRoZSByZXF1ZXN0ZWQgbWVzc2FnZSBvdWdodCB0byBiZSBmb3VuZCwgb3RoZXJ3aXNlIGVycm9yICovCi0JcHFfNjRiaXRfaW5pdCgmc2VxNjQpOwotCXBxXzY0Yml0X2Fzc2lnbl93b3JkKCZzZXE2NCwgc2VxKTsKKwltZW1zZXQoc2VxNjRiZSwwLHNpemVvZihzZXE2NGJlKSk7CisJc2VxNjRiZVs2XSA9ICh1bnNpZ25lZCBjaGFyKShzZXE+PjgpOworCXNlcTY0YmVbN10gPSAodW5zaWduZWQgY2hhcilzZXE7CiAKLQlpdGVtID0gcHF1ZXVlX2ZpbmQocy0+ZDEtPnNlbnRfbWVzc2FnZXMsIHNlcTY0KTsKLQlwcV82NGJpdF9mcmVlKCZzZXE2NCk7CisJaXRlbSA9IHBxdWV1ZV9maW5kKHMtPmQxLT5zZW50X21lc3NhZ2VzLCBzZXE2NGJlKTsKIAlpZiAoIGl0ZW0gPT0gTlVMTCkKIAkJewogCQlmcHJpbnRmKHN0ZGVyciwgInJldHJhbnNtaXQ6ICBtZXNzYWdlICVkIG5vbi1leGlzdGFudFxuIiwgc2VxKTsKQEAgLTEyMzcsNyArMTIzNiw3IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IAogZHRsczFfZ3Vlc3NfbXR1KHVuc2lnbmVkIGludCBjdXJyX210dSkKIAl7Ci0Jc2l6ZV90IGk7CisJdW5zaWduZWQgaW50IGk7CiAKIAlpZiAoIGN1cnJfbXR1ID09IDAgKQogCQlyZXR1cm4gZ19wcm9iYWJsZV9tdHVbMF0gOwpkaWZmIC0tZ2l0IGEvc3NsL2QxX2NsbnQuYyBiL3NzbC9kMV9jbG50LmMKaW5kZXggMjIzZDExNi4uNWJjOWViNiAxMDA2NDQKLS0tIGEvc3NsL2QxX2NsbnQuYworKysgYi9zc2wvZDFfY2xudC5jCkBAIC00LDcgKzQsNyBAQAogICogKG5hZ2VuZHJhQGNzLnN0YW5mb3JkLmVkdSkgZm9yIHRoZSBPcGVuU1NMIHByb2plY3QgMjAwNS4gIAogICovCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTE1LDIwICsxMTUsMjMgQEAKIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSAic3NsX2xvY2wuaCIKKyNpZm5kZWYgT1BFTlNTTF9OT19LUkI1CiAjaW5jbHVkZSAia3NzbF9sY2wuaCIKKyNlbmRpZgogI2luY2x1ZGUgPG9wZW5zc2wvYnVmZmVyLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KICNpbmNsdWRlIDxvcGVuc3NsL21kNS5oPgorI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KICNpZm5kZWYgT1BFTlNTTF9OT19ESAogI2luY2x1ZGUgPG9wZW5zc2wvZGguaD4KICNlbmRpZgogCi1zdGF0aWMgU1NMX01FVEhPRCAqZHRsczFfZ2V0X2NsaWVudF9tZXRob2QoaW50IHZlcik7CitzdGF0aWMgY29uc3QgU1NMX01FVEhPRCAqZHRsczFfZ2V0X2NsaWVudF9tZXRob2QoaW50IHZlcik7CiBzdGF0aWMgaW50IGR0bHMxX2dldF9oZWxsb192ZXJpZnkoU1NMICpzKTsKIAotc3RhdGljIFNTTF9NRVRIT0QgKmR0bHMxX2dldF9jbGllbnRfbWV0aG9kKGludCB2ZXIpCitzdGF0aWMgY29uc3QgU1NMX01FVEhPRCAqZHRsczFfZ2V0X2NsaWVudF9tZXRob2QoaW50IHZlcikKIAl7CiAJaWYgKHZlciA9PSBEVExTMV9WRVJTSU9OIHx8IHZlciA9PSBEVExTMV9CQURfVkVSKQogCQlyZXR1cm4oRFRMU3YxX2NsaWVudF9tZXRob2QoKSk7CkBAIC0xNDQsNyArMTQ3LDcgQEAKIGludCBkdGxzMV9jb25uZWN0KFNTTCAqcykKIAl7CiAJQlVGX01FTSAqYnVmPU5VTEw7Ci0JdW5zaWduZWQgbG9uZyBUaW1lPSh1bnNpZ25lZCBsb25nKXRpbWUoTlVMTCksbDsKKwl1bnNpZ25lZCBsb25nIFRpbWU9KHVuc2lnbmVkIGxvbmcpdGltZShOVUxMKTsKIAl2b2lkICgqY2IpKGNvbnN0IFNTTCAqc3NsLGludCB0eXBlLGludCB2YWwpPU5VTEw7CiAJaW50IHJldD0gLTE7CiAJaW50IG5ld19zdGF0ZSxzdGF0ZSxza2lwPTA7OwpAQCAtMjk2LDggKzI5OSw5IEBACiAJCQkJYnJlYWs7CiAJCQkJfQogI2VuZGlmCi0JCQkvKiBDaGVjayBpZiBpdCBpcyBhbm9uIERIICovCi0JCQlpZiAoIShzLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobXMgJiBTU0xfYU5VTEwpKQorCQkJLyogQ2hlY2sgaWYgaXQgaXMgYW5vbiBESCBvciBQU0sgKi8KKwkJCWlmICghKHMtPnMzLT50bXAubmV3X2NpcGhlci0+YWxnb3JpdGhtX2F1dGggJiBTU0xfYU5VTEwpICYmCisJCQkgICAgIShzLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobV9ta2V5ICYgU1NMX2tQU0spKQogCQkJCXsKIAkJCQlyZXQ9c3NsM19nZXRfc2VydmVyX2NlcnRpZmljYXRlKHMpOwogCQkJCWlmIChyZXQgPD0gMCkgZ290byBlbmQ7CkBAIC0zNzQsNyArMzc4LDYgQEAKIAkJCWR0bHMxX3N0YXJ0X3RpbWVyKHMpOwogCQkJcmV0PWR0bHMxX3NlbmRfY2xpZW50X2tleV9leGNoYW5nZShzKTsKIAkJCWlmIChyZXQgPD0gMCkgZ290byBlbmQ7Ci0JCQlsPXMtPnMzLT50bXAubmV3X2NpcGhlci0+YWxnb3JpdGhtczsKIAkJCS8qIEVBWSBFQVkgRUFZIG5lZWQgdG8gY2hlY2sgZm9yIERIIGZpeCBjZXJ0CiAJCQkgKiBzZW50IGJhY2sgKi8KIAkJCS8qIEZvciBUTFMsIGNlcnRfcmVxIGlzIHNldCB0byAyLCBzbyBhIGNlcnQgY2hhaW4KQEAgLTQ3MSw3ICs0NzQsNiBAQAogCQkJCXMtPnMzLT50bXAubmV4dF9zdGF0ZT1TU0wzX1NUX0NSX0ZJTklTSEVEX0E7CiAJCQkJfQogCQkJcy0+aW5pdF9udW09MDsKLQogCQkJYnJlYWs7CiAKICNpZm5kZWYgT1BFTlNTTF9OT19UTFNFWFQKQEAgLTYxNyw2ICs2MTksNyBAQAogCQkvKiBlbHNlIHVzZSB0aGUgcHJlLWxvYWRlZCBzZXNzaW9uICovCiAKIAkJcD1zLT5zMy0+Y2xpZW50X3JhbmRvbTsKKwogCQkvKiBpZiBjbGllbnRfcmFuZG9tIGlzIGluaXRpYWxpemVkLCByZXVzZSBpdCwgd2UgYXJlCiAJCSAqIHJlcXVpcmVkIHRvIHVzZSBzYW1lIHVwb24gcmVwbHkgdG8gSGVsbG9WZXJpZnkgKi8KIAkJZm9yIChpPTA7cFtpXT09J1wwJyAmJiBpPHNpemVvZihzLT5zMy0+Y2xpZW50X3JhbmRvbSk7aSsrKSA7CkBAIC02MjQsNyArNjI3LDcgQEAKIAkJCXsKIAkJCVRpbWU9KHVuc2lnbmVkIGxvbmcpdGltZShOVUxMKTsJLyogVGltZSAqLwogCQkJbDJuKFRpbWUscCk7Ci0JCQlSQU5EX3BzZXVkb19ieXRlcyhwLFNTTDNfUkFORE9NX1NJWkUtNCk7CisJCQlSQU5EX3BzZXVkb19ieXRlcyhwLHNpemVvZihzLT5zMy0+Y2xpZW50X3JhbmRvbSktNCk7CiAJCQl9CiAKIAkJLyogRG8gdGhlIG1lc3NhZ2UgdHlwZSBhbmQgbGVuZ3RoIGxhc3QgKi8KQEAgLTc3MSw3ICs3NzQsNyBAQAogCXsKIAl1bnNpZ25lZCBjaGFyICpwLCpkOwogCWludCBuOwotCXVuc2lnbmVkIGxvbmcgbDsKKwl1bnNpZ25lZCBsb25nIGFsZ19rOwogI2lmbmRlZiBPUEVOU1NMX05PX1JTQQogCXVuc2lnbmVkIGNoYXIgKnE7CiAJRVZQX1BLRVkgKnBrZXk9TlVMTDsKQEAgLTc3OSwxOCArNzgyLDI2IEBACiAjaWZuZGVmIE9QRU5TU0xfTk9fS1JCNQogICAgICAgICBLU1NMX0VSUiBrc3NsX2VycjsKICNlbmRpZiAvKiBPUEVOU1NMX05PX0tSQjUgKi8KKyNpZm5kZWYgT1BFTlNTTF9OT19FQ0RICisJRUNfS0VZICpjbG50X2VjZGggPSBOVUxMOworCWNvbnN0IEVDX1BPSU5UICpzcnZyX2VjcG9pbnQgPSBOVUxMOworCUVWUF9QS0VZICpzcnZyX3B1Yl9wa2V5ID0gTlVMTDsKKwl1bnNpZ25lZCBjaGFyICplbmNvZGVkUG9pbnQgPSBOVUxMOworCWludCBlbmNvZGVkX3B0X2xlbiA9IDA7CisJQk5fQ1RYICogYm5fY3R4ID0gTlVMTDsKKyNlbmRpZgogCiAJaWYgKHMtPnN0YXRlID09IFNTTDNfU1RfQ1dfS0VZX0VYQ0hfQSkKIAkJewogCQlkPSh1bnNpZ25lZCBjaGFyICopcy0+aW5pdF9idWYtPmRhdGE7CiAJCXA9ICYoZFtEVExTMV9ITV9IRUFERVJfTEVOR1RIXSk7Ci0KLQkJbD1zLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobXM7CisJCQorCQlhbGdfaz1zLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobV9ta2V5OwogCiAgICAgICAgICAgICAgICAgLyogRm9vbCBlbWFjcyBpbmRlbnRhdGlvbiAqLwogICAgICAgICAgICAgICAgIGlmICgwKSB7fQogI2lmbmRlZiBPUEVOU1NMX05PX1JTQQotCQllbHNlIGlmIChsICYgU1NMX2tSU0EpCisJCWVsc2UgaWYgKGFsZ19rICYgU1NMX2tSU0EpCiAJCQl7CiAJCQlSU0EgKnJzYTsKIAkJCXVuc2lnbmVkIGNoYXIgdG1wX2J1ZltTU0xfTUFYX01BU1RFUl9LRVlfTEVOR1RIXTsKQEAgLTg0OSw3ICs4NjAsNyBAQAogCQkJfQogI2VuZGlmCiAjaWZuZGVmIE9QRU5TU0xfTk9fS1JCNQotCQllbHNlIGlmIChsICYgU1NMX2tLUkI1KQorCQllbHNlIGlmIChhbGdfayAmIFNTTF9rS1JCNSkKICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGtyYjVfZXJyb3JfY29kZQlrcmI1cmM7CiAgICAgICAgICAgICAgICAgICAgICAgICBLU1NMX0NUWAkqa3NzbF9jdHggPSBzLT5rc3NsX2N0eDsKQEAgLTg1Nyw3ICs4NjgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAga3JiNV9kYXRhCSplbmNfdGlja2V0OwogICAgICAgICAgICAgICAgICAgICAgICAga3JiNV9kYXRhCWF1dGhlbnRpY2F0b3IsICphdXRocCA9IE5VTEw7CiAJCQlFVlBfQ0lQSEVSX0NUWAljaXBoX2N0eDsKLQkJCUVWUF9DSVBIRVIJKmVuYyA9IE5VTEw7CisJCQljb25zdCBFVlBfQ0lQSEVSICplbmMgPSBOVUxMOwogCQkJdW5zaWduZWQgY2hhcglpdltFVlBfTUFYX0lWX0xFTkdUSF07CiAJCQl1bnNpZ25lZCBjaGFyCXRtcF9idWZbU1NMX01BWF9NQVNURVJfS0VZX0xFTkdUSF07CiAJCQl1bnNpZ25lZCBjaGFyCWVwbXNbU1NMX01BWF9NQVNURVJfS0VZX0xFTkdUSCAKQEAgLTg2OCw3ICs4NzksNyBAQAogCiAjaWZkZWYgS1NTTF9ERUJVRwogICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJzc2wzX3NlbmRfY2xpZW50X2tleV9leGNoYW5nZSglbHggJiAlbHgpXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsLCBTU0xfa0tSQjUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGdfaywgU1NMX2tLUkI1KTsKICNlbmRpZgkvKiBLU1NMX0RFQlVHICovCiAKIAkJCWF1dGhwID0gTlVMTDsKQEAgLTk1OCw3ICs5NjksNyBAQAogCQkJCXNpemVvZiB0bXBfYnVmKTsKIAkJCUVWUF9FbmNyeXB0RmluYWxfZXgoJmNpcGhfY3R4LCYoZXBtc1tvdXRsXSksJnBhZGwpOwogCQkJb3V0bCArPSBwYWRsOwotCQkJaWYgKG91dGwgPiBzaXplb2YgZXBtcykKKwkJCWlmIChvdXRsID4gKGludClzaXplb2YgZXBtcykKIAkJCQl7CiAJCQkJU1NMZXJyKFNTTF9GX0RUTFMxX1NFTkRfQ0xJRU5UX0tFWV9FWENIQU5HRSwgRVJSX1JfSU5URVJOQUxfRVJST1IpOwogCQkJCWdvdG8gZXJyOwpAQCAtOTgxLDcgKzk5Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAjZW5kaWYKICNpZm5kZWYgT1BFTlNTTF9OT19ESAotCQllbHNlIGlmIChsICYgKFNTTF9rRURIfFNTTF9rREhyfFNTTF9rREhkKSkKKwkJZWxzZSBpZiAoYWxnX2sgJiAoU1NMX2tFREh8U1NMX2tESHJ8U1NMX2tESGQpKQogCQkJewogCQkJREggKmRoX3NydnIsKmRoX2NsbnQ7CiAKQEAgLTEwMzYsNiArMTA0NywyNzQgQEAKIAkJCS8qIHBlcmhhcHMgY2xlYW4gdGhpbmdzIHVwIGEgYml0IEVBWSBFQVkgRUFZIEVBWSovCiAJCQl9CiAjZW5kaWYKKyNpZm5kZWYgT1BFTlNTTF9OT19FQ0RIIAorCQllbHNlIGlmIChhbGdfayAmIChTU0xfa0VFQ0RIfFNTTF9rRUNESHJ8U1NMX2tFQ0RIZSkpCisJCQl7CisJCQljb25zdCBFQ19HUk9VUCAqc3J2cl9ncm91cCA9IE5VTEw7CisJCQlFQ19LRVkgKnRrZXk7CisJCQlpbnQgZWNkaF9jbG50X2NlcnQgPSAwOworCQkJaW50IGZpZWxkX3NpemUgPSAwOworCisJCQkvKiBEaWQgd2Ugc2VuZCBvdXQgdGhlIGNsaWVudCdzCisJCQkgKiBFQ0RIIHNoYXJlIGZvciB1c2UgaW4gcHJlbWFzdGVyCisJCQkgKiBjb21wdXRhdGlvbiBhcyBwYXJ0IG9mIGNsaWVudCBjZXJ0aWZpY2F0ZT8KKwkJCSAqIElmIHNvLCBzZXQgZWNkaF9jbG50X2NlcnQgdG8gMS4KKwkJCSAqLworCQkJaWYgKChhbGdfayAmIChTU0xfa0VDREhyfFNTTF9rRUNESGUpKSAmJiAocy0+Y2VydCAhPSBOVUxMKSkgCisJCQkJeworCQkJCS8qIFhYWDogRm9yIG5vdywgd2UgZG8gbm90IHN1cHBvcnQgY2xpZW50CisJCQkJICogYXV0aGVudGljYXRpb24gdXNpbmcgRUNESCBjZXJ0aWZpY2F0ZXMuCisJCQkJICogVG8gYWRkIHN1Y2ggc3VwcG9ydCwgb25lIG5lZWRzIHRvIGFkZAorCQkJCSAqIGNvZGUgdGhhdCBjaGVja3MgZm9yIGFwcHJvcHJpYXRlIAorCQkJCSAqIGNvbmRpdGlvbnMgYW5kIHNldHMgZWNkaF9jbG50X2NlcnQgdG8gMS4KKwkJCQkgKiBGb3IgZXhhbXBsZSwgdGhlIGNlcnQgaGF2ZSBhbiBFQ0MKKwkJCQkgKiBrZXkgb24gdGhlIHNhbWUgY3VydmUgYXMgdGhlIHNlcnZlcidzCisJCQkJICogYW5kIHRoZSBrZXkgc2hvdWxkIGJlIGF1dGhvcml6ZWQgZm9yCisJCQkJICoga2V5IGFncmVlbWVudC4KKwkJCQkgKgorCQkJCSAqIE9uZSBhbHNvIG5lZWRzIHRvIGFkZCBjb2RlIGluIHNzbDNfY29ubmVjdAorCQkJCSAqIHRvIHNraXAgc2VuZGluZyB0aGUgY2VydGlmaWNhdGUgdmVyaWZ5CisJCQkJICogbWVzc2FnZS4KKwkJCQkgKgorCQkJCSAqIGlmICgocy0+Y2VydC0+a2V5LT5wcml2YXRla2V5ICE9IE5VTEwpICYmCisJCQkJICogICAgIChzLT5jZXJ0LT5rZXktPnByaXZhdGVrZXktPnR5cGUgPT0KKwkJCQkgKiAgICAgIEVWUF9QS0VZX0VDKSAmJiAuLi4pCisJCQkJICogZWNkaF9jbG50X2NlcnQgPSAxOworCQkJCSAqLworCQkJCX0KKworCQkJaWYgKHMtPnNlc3Npb24tPnNlc3NfY2VydC0+cGVlcl9lY2RoX3RtcCAhPSBOVUxMKQorCQkJCXsKKwkJCQl0a2V5ID0gcy0+c2Vzc2lvbi0+c2Vzc19jZXJ0LT5wZWVyX2VjZGhfdG1wOworCQkJCX0KKwkJCWVsc2UKKwkJCQl7CisJCQkJLyogR2V0IHRoZSBTZXJ2ZXIgUHVibGljIEtleSBmcm9tIENlcnQgKi8KKwkJCQlzcnZyX3B1Yl9wa2V5ID0gWDUwOV9nZXRfcHVia2V5KHMtPnNlc3Npb24tPiBcCisJCQkJICAgIHNlc3NfY2VydC0+cGVlcl9wa2V5c1tTU0xfUEtFWV9FQ0NdLng1MDkpOworCQkJCWlmICgoc3J2cl9wdWJfcGtleSA9PSBOVUxMKSB8fAorCQkJCSAgICAoc3J2cl9wdWJfcGtleS0+dHlwZSAhPSBFVlBfUEtFWV9FQykgfHwKKwkJCQkgICAgKHNydnJfcHViX3BrZXktPnBrZXkuZWMgPT0gTlVMTCkpCisJCQkJCXsKKwkJCQkJU1NMZXJyKFNTTF9GX0RUTFMxX1NFTkRfQ0xJRU5UX0tFWV9FWENIQU5HRSwKKwkJCQkJICAgIEVSUl9SX0lOVEVSTkFMX0VSUk9SKTsKKwkJCQkJZ290byBlcnI7CisJCQkJCX0KKworCQkJCXRrZXkgPSBzcnZyX3B1Yl9wa2V5LT5wa2V5LmVjOworCQkJCX0KKworCQkJc3J2cl9ncm91cCAgID0gRUNfS0VZX2dldDBfZ3JvdXAodGtleSk7CisJCQlzcnZyX2VjcG9pbnQgPSBFQ19LRVlfZ2V0MF9wdWJsaWNfa2V5KHRrZXkpOworCisJCQlpZiAoKHNydnJfZ3JvdXAgPT0gTlVMTCkgfHwgKHNydnJfZWNwb2ludCA9PSBOVUxMKSkKKwkJCQl7CisJCQkJU1NMZXJyKFNTTF9GX0RUTFMxX1NFTkRfQ0xJRU5UX0tFWV9FWENIQU5HRSwKKwkJCQkgICAgRVJSX1JfSU5URVJOQUxfRVJST1IpOworCQkJCWdvdG8gZXJyOworCQkJCX0KKworCQkJaWYgKChjbG50X2VjZGg9RUNfS0VZX25ldygpKSA9PSBOVUxMKSAKKwkJCQl7CisJCQkJU1NMZXJyKFNTTF9GX0RUTFMxX1NFTkRfQ0xJRU5UX0tFWV9FWENIQU5HRSxFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CisJCQkJZ290byBlcnI7CisJCQkJfQorCisJCQlpZiAoIUVDX0tFWV9zZXRfZ3JvdXAoY2xudF9lY2RoLCBzcnZyX2dyb3VwKSkKKwkJCQl7CisJCQkJU1NMZXJyKFNTTF9GX0RUTFMxX1NFTkRfQ0xJRU5UX0tFWV9FWENIQU5HRSxFUlJfUl9FQ19MSUIpOworCQkJCWdvdG8gZXJyOworCQkJCX0KKwkJCWlmIChlY2RoX2NsbnRfY2VydCkgCisJCQkJeyAKKwkJCQkvKiBSZXVzZSBrZXkgaW5mbyBmcm9tIG91ciBjZXJ0aWZpY2F0ZQorCQkJCSAqIFdlIG9ubHkgbmVlZCBvdXIgcHJpdmF0ZSBrZXkgdG8gcGVyZm9ybQorCQkJCSAqIHRoZSBFQ0RIIGNvbXB1dGF0aW9uLgorCQkJCSAqLworCQkJCWNvbnN0IEJJR05VTSAqcHJpdl9rZXk7CisJCQkJdGtleSA9IHMtPmNlcnQtPmtleS0+cHJpdmF0ZWtleS0+cGtleS5lYzsKKwkJCQlwcml2X2tleSA9IEVDX0tFWV9nZXQwX3ByaXZhdGVfa2V5KHRrZXkpOworCQkJCWlmIChwcml2X2tleSA9PSBOVUxMKQorCQkJCQl7CisJCQkJCVNTTGVycihTU0xfRl9EVExTMV9TRU5EX0NMSUVOVF9LRVlfRVhDSEFOR0UsRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOworCQkJCQlnb3RvIGVycjsKKwkJCQkJfQorCQkJCWlmICghRUNfS0VZX3NldF9wcml2YXRlX2tleShjbG50X2VjZGgsIHByaXZfa2V5KSkKKwkJCQkJeworCQkJCQlTU0xlcnIoU1NMX0ZfRFRMUzFfU0VORF9DTElFTlRfS0VZX0VYQ0hBTkdFLEVSUl9SX0VDX0xJQik7CisJCQkJCWdvdG8gZXJyOworCQkJCQl9CisJCQkJfQorCQkJZWxzZSAKKwkJCQl7CisJCQkJLyogR2VuZXJhdGUgYSBuZXcgRUNESCBrZXkgcGFpciAqLworCQkJCWlmICghKEVDX0tFWV9nZW5lcmF0ZV9rZXkoY2xudF9lY2RoKSkpCisJCQkJCXsKKwkJCQkJU1NMZXJyKFNTTF9GX0RUTFMxX1NFTkRfQ0xJRU5UX0tFWV9FWENIQU5HRSwgRVJSX1JfRUNESF9MSUIpOworCQkJCQlnb3RvIGVycjsKKwkJCQkJfQorCQkJCX0KKworCQkJLyogdXNlIHRoZSAncCcgb3V0cHV0IGJ1ZmZlciBmb3IgdGhlIEVDREgga2V5LCBidXQKKwkJCSAqIG1ha2Ugc3VyZSB0byBjbGVhciBpdCBvdXQgYWZ0ZXJ3YXJkcworCQkJICovCisKKwkJCWZpZWxkX3NpemUgPSBFQ19HUk9VUF9nZXRfZGVncmVlKHNydnJfZ3JvdXApOworCQkJaWYgKGZpZWxkX3NpemUgPD0gMCkKKwkJCQl7CisJCQkJU1NMZXJyKFNTTF9GX0RUTFMxX1NFTkRfQ0xJRU5UX0tFWV9FWENIQU5HRSwgCisJCQkJICAgICAgIEVSUl9SX0VDREhfTElCKTsKKwkJCQlnb3RvIGVycjsKKwkJCQl9CisJCQluPUVDREhfY29tcHV0ZV9rZXkocCwgKGZpZWxkX3NpemUrNykvOCwgc3J2cl9lY3BvaW50LCBjbG50X2VjZGgsIE5VTEwpOworCQkJaWYgKG4gPD0gMCkKKwkJCQl7CisJCQkJU1NMZXJyKFNTTF9GX0RUTFMxX1NFTkRfQ0xJRU5UX0tFWV9FWENIQU5HRSwgCisJCQkJICAgICAgIEVSUl9SX0VDREhfTElCKTsKKwkJCQlnb3RvIGVycjsKKwkJCQl9CisKKwkJCS8qIGdlbmVyYXRlIG1hc3RlciBrZXkgZnJvbSB0aGUgcmVzdWx0ICovCisJCQlzLT5zZXNzaW9uLT5tYXN0ZXJfa2V5X2xlbmd0aCA9IHMtPm1ldGhvZC0+c3NsM19lbmMgXAorCQkJICAgIC0+IGdlbmVyYXRlX21hc3Rlcl9zZWNyZXQocywgCisJCQkJcy0+c2Vzc2lvbi0+bWFzdGVyX2tleSwKKwkJCQlwLCBuKTsKKworCQkJbWVtc2V0KHAsIDAsIG4pOyAvKiBjbGVhbiB1cCAqLworCisJCQlpZiAoZWNkaF9jbG50X2NlcnQpIAorCQkJCXsKKwkJCQkvKiBTZW5kIGVtcHR5IGNsaWVudCBrZXkgZXhjaCBtZXNzYWdlICovCisJCQkJbiA9IDA7CisJCQkJfQorCQkJZWxzZSAKKwkJCQl7CisJCQkJLyogRmlyc3QgY2hlY2sgdGhlIHNpemUgb2YgZW5jb2RpbmcgYW5kCisJCQkJICogYWxsb2NhdGUgbWVtb3J5IGFjY29yZGluZ2x5LgorCQkJCSAqLworCQkJCWVuY29kZWRfcHRfbGVuID0gCisJCQkJICAgIEVDX1BPSU5UX3BvaW50Mm9jdChzcnZyX2dyb3VwLCAKKwkJCQkJRUNfS0VZX2dldDBfcHVibGljX2tleShjbG50X2VjZGgpLCAKKwkJCQkJUE9JTlRfQ09OVkVSU0lPTl9VTkNPTVBSRVNTRUQsIAorCQkJCQlOVUxMLCAwLCBOVUxMKTsKKworCQkJCWVuY29kZWRQb2ludCA9ICh1bnNpZ25lZCBjaGFyICopIAorCQkJCSAgICBPUEVOU1NMX21hbGxvYyhlbmNvZGVkX3B0X2xlbiAqIAorCQkJCQlzaXplb2YodW5zaWduZWQgY2hhcikpOyAKKwkJCQlibl9jdHggPSBCTl9DVFhfbmV3KCk7CisJCQkJaWYgKChlbmNvZGVkUG9pbnQgPT0gTlVMTCkgfHwgCisJCQkJICAgIChibl9jdHggPT0gTlVMTCkpIAorCQkJCQl7CisJCQkJCVNTTGVycihTU0xfRl9EVExTMV9TRU5EX0NMSUVOVF9LRVlfRVhDSEFOR0UsRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOworCQkJCQlnb3RvIGVycjsKKwkJCQkJfQorCisJCQkJLyogRW5jb2RlIHRoZSBwdWJsaWMga2V5ICovCisJCQkJbiA9IEVDX1BPSU5UX3BvaW50Mm9jdChzcnZyX2dyb3VwLCAKKwkJCQkgICAgRUNfS0VZX2dldDBfcHVibGljX2tleShjbG50X2VjZGgpLCAKKwkJCQkgICAgUE9JTlRfQ09OVkVSU0lPTl9VTkNPTVBSRVNTRUQsIAorCQkJCSAgICBlbmNvZGVkUG9pbnQsIGVuY29kZWRfcHRfbGVuLCBibl9jdHgpOworCisJCQkJKnAgPSBuOyAvKiBsZW5ndGggb2YgZW5jb2RlZCBwb2ludCAqLworCQkJCS8qIEVuY29kZWQgcG9pbnQgd2lsbCBiZSBjb3BpZWQgaGVyZSAqLworCQkJCXAgKz0gMTsgCisJCQkJLyogY29weSB0aGUgcG9pbnQgKi8KKwkJCQltZW1jcHkoKHVuc2lnbmVkIGNoYXIgKilwLCBlbmNvZGVkUG9pbnQsIG4pOworCQkJCS8qIGluY3JlbWVudCBuIHRvIGFjY291bnQgZm9yIGxlbmd0aCBmaWVsZCAqLworCQkJCW4gKz0gMTsgCisJCQkJfQorCisJCQkvKiBGcmVlIGFsbG9jYXRlZCBtZW1vcnkgKi8KKwkJCUJOX0NUWF9mcmVlKGJuX2N0eCk7CisJCQlpZiAoZW5jb2RlZFBvaW50ICE9IE5VTEwpIE9QRU5TU0xfZnJlZShlbmNvZGVkUG9pbnQpOworCQkJaWYgKGNsbnRfZWNkaCAhPSBOVUxMKSAKKwkJCQkgRUNfS0VZX2ZyZWUoY2xudF9lY2RoKTsKKwkJCUVWUF9QS0VZX2ZyZWUoc3J2cl9wdWJfcGtleSk7CisJCQl9CisjZW5kaWYgLyogIU9QRU5TU0xfTk9fRUNESCAqLworCisjaWZuZGVmIE9QRU5TU0xfTk9fUFNLCisJCWVsc2UgaWYgKGFsZ19rICYgU1NMX2tQU0spCisJCQl7CisJCQljaGFyIGlkZW50aXR5W1BTS19NQVhfSURFTlRJVFlfTEVOXTsKKwkJCXVuc2lnbmVkIGNoYXIgKnQgPSBOVUxMOworCQkJdW5zaWduZWQgY2hhciBwc2tfb3JfcHJlX21zW1BTS19NQVhfUFNLX0xFTioyKzRdOworCQkJdW5zaWduZWQgaW50IHByZV9tc19sZW4gPSAwLCBwc2tfbGVuID0gMDsKKwkJCWludCBwc2tfZXJyID0gMTsKKworCQkJbiA9IDA7CisJCQlpZiAocy0+cHNrX2NsaWVudF9jYWxsYmFjayA9PSBOVUxMKQorCQkJCXsKKwkJCQlTU0xlcnIoU1NMX0ZfRFRMUzFfU0VORF9DTElFTlRfS0VZX0VYQ0hBTkdFLAorCQkJCQlTU0xfUl9QU0tfTk9fQ0xJRU5UX0NCKTsKKwkJCQlnb3RvIGVycjsKKwkJCQl9CisKKwkJCXBza19sZW4gPSBzLT5wc2tfY2xpZW50X2NhbGxiYWNrKHMsIHMtPmN0eC0+cHNrX2lkZW50aXR5X2hpbnQsCisJCQkJaWRlbnRpdHksIFBTS19NQVhfSURFTlRJVFlfTEVOLAorCQkJCXBza19vcl9wcmVfbXMsIHNpemVvZihwc2tfb3JfcHJlX21zKSk7CisJCQlpZiAocHNrX2xlbiA+IFBTS19NQVhfUFNLX0xFTikKKwkJCQl7CisJCQkJU1NMZXJyKFNTTF9GX0RUTFMxX1NFTkRfQ0xJRU5UX0tFWV9FWENIQU5HRSwKKwkJCQkJRVJSX1JfSU5URVJOQUxfRVJST1IpOworCQkJCWdvdG8gcHNrX2VycjsKKwkJCQl9CisJCQllbHNlIGlmIChwc2tfbGVuID09IDApCisJCQkJeworCQkJCVNTTGVycihTU0xfRl9EVExTMV9TRU5EX0NMSUVOVF9LRVlfRVhDSEFOR0UsCisJCQkJCVNTTF9SX1BTS19JREVOVElUWV9OT1RfRk9VTkQpOworCQkJCWdvdG8gcHNrX2VycjsKKwkJCQl9CisKKwkJCS8qIGNyZWF0ZSBQU0sgcHJlX21hc3Rlcl9zZWNyZXQgKi8KKwkJCXByZV9tc19sZW4gPSAyK3Bza19sZW4rMitwc2tfbGVuOworCQkJdCA9IHBza19vcl9wcmVfbXM7CisJCQltZW1tb3ZlKHBza19vcl9wcmVfbXMrcHNrX2xlbis0LCBwc2tfb3JfcHJlX21zLCBwc2tfbGVuKTsKKwkJCXMybihwc2tfbGVuLCB0KTsKKwkJCW1lbXNldCh0LCAwLCBwc2tfbGVuKTsKKwkJCXQrPXBza19sZW47CisJCQlzMm4ocHNrX2xlbiwgdCk7CisKKwkJCWlmIChzLT5zZXNzaW9uLT5wc2tfaWRlbnRpdHlfaGludCAhPSBOVUxMKQorCQkJCU9QRU5TU0xfZnJlZShzLT5zZXNzaW9uLT5wc2tfaWRlbnRpdHlfaGludCk7CisJCQlzLT5zZXNzaW9uLT5wc2tfaWRlbnRpdHlfaGludCA9IEJVRl9zdHJkdXAocy0+Y3R4LT5wc2tfaWRlbnRpdHlfaGludCk7CisJCQlpZiAocy0+Y3R4LT5wc2tfaWRlbnRpdHlfaGludCAhPSBOVUxMICYmCisJCQkJcy0+c2Vzc2lvbi0+cHNrX2lkZW50aXR5X2hpbnQgPT0gTlVMTCkKKwkJCQl7CisJCQkJU1NMZXJyKFNTTF9GX0RUTFMxX1NFTkRfQ0xJRU5UX0tFWV9FWENIQU5HRSwKKwkJCQkJRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOworCQkJCWdvdG8gcHNrX2VycjsKKwkJCQl9CisKKwkJCWlmIChzLT5zZXNzaW9uLT5wc2tfaWRlbnRpdHkgIT0gTlVMTCkKKwkJCQlPUEVOU1NMX2ZyZWUocy0+c2Vzc2lvbi0+cHNrX2lkZW50aXR5KTsKKwkJCXMtPnNlc3Npb24tPnBza19pZGVudGl0eSA9IEJVRl9zdHJkdXAoaWRlbnRpdHkpOworCQkJaWYgKHMtPnNlc3Npb24tPnBza19pZGVudGl0eSA9PSBOVUxMKQorCQkJCXsKKwkJCQlTU0xlcnIoU1NMX0ZfRFRMUzFfU0VORF9DTElFTlRfS0VZX0VYQ0hBTkdFLAorCQkJCQlFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CisJCQkJZ290byBwc2tfZXJyOworCQkJCX0KKworCQkJcy0+c2Vzc2lvbi0+bWFzdGVyX2tleV9sZW5ndGggPQorCQkJCXMtPm1ldGhvZC0+c3NsM19lbmMtPmdlbmVyYXRlX21hc3Rlcl9zZWNyZXQocywKKwkJCQkJcy0+c2Vzc2lvbi0+bWFzdGVyX2tleSwKKwkJCQkJcHNrX29yX3ByZV9tcywgcHJlX21zX2xlbik7IAorCQkJbiA9IHN0cmxlbihpZGVudGl0eSk7CisJCQlzMm4obiwgcCk7CisJCQltZW1jcHkocCwgaWRlbnRpdHksIG4pOworCQkJbis9MjsKKwkJCXBza19lcnIgPSAwOworCQlwc2tfZXJyOgorCQkJT1BFTlNTTF9jbGVhbnNlKGlkZW50aXR5LCBQU0tfTUFYX0lERU5USVRZX0xFTik7CisJCQlPUEVOU1NMX2NsZWFuc2UocHNrX29yX3ByZV9tcywgc2l6ZW9mKHBza19vcl9wcmVfbXMpKTsKKwkJCWlmIChwc2tfZXJyICE9IDApCisJCQkJeworCQkJCXNzbDNfc2VuZF9hbGVydChzLCBTU0wzX0FMX0ZBVEFMLCBTU0xfQURfSEFORFNIQUtFX0ZBSUxVUkUpOworCQkJCWdvdG8gZXJyOworCQkJCX0KKwkJCX0KKyNlbmRpZgogCQllbHNlCiAJCQl7CiAJCQlzc2wzX3NlbmRfYWxlcnQocyxTU0wzX0FMX0ZBVEFMLFNTTF9BRF9IQU5EU0hBS0VfRkFJTFVSRSk7CkBAIC0xMDY0LDYgKzEzNDMsMTMgQEAKIAkvKiBTU0wzX1NUX0NXX0tFWV9FWENIX0IgKi8KIAlyZXR1cm4oZHRsczFfZG9fd3JpdGUocyxTU0wzX1JUX0hBTkRTSEFLRSkpOwogZXJyOgorI2lmbmRlZiBPUEVOU1NMX05PX0VDREgKKwlCTl9DVFhfZnJlZShibl9jdHgpOworCWlmIChlbmNvZGVkUG9pbnQgIT0gTlVMTCkgT1BFTlNTTF9mcmVlKGVuY29kZWRQb2ludCk7CisJaWYgKGNsbnRfZWNkaCAhPSBOVUxMKSAKKwkJRUNfS0VZX2ZyZWUoY2xudF9lY2RoKTsKKwlFVlBfUEtFWV9mcmVlKHNydnJfcHViX3BrZXkpOworI2VuZGlmCiAJcmV0dXJuKC0xKTsKIAl9CiAKQEAgLTEwNzYsNyArMTM2Miw3IEBACiAJdW5zaWduZWQgdT0wOwogI2VuZGlmCiAJdW5zaWduZWQgbG9uZyBuOwotI2lmbmRlZiBPUEVOU1NMX05PX0RTQQorI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fRFNBKSB8fCAhZGVmaW5lZChPUEVOU1NMX05PX0VDRFNBKQogCWludCBqOwogI2VuZGlmCiAKQEAgLTEwODYsMTQgKzEzNzIsMTYgQEAKIAkJcD0gJihkW0RUTFMxX0hNX0hFQURFUl9MRU5HVEhdKTsKIAkJcGtleT1zLT5jZXJ0LT5rZXktPnByaXZhdGVrZXk7CiAKLQkJcy0+bWV0aG9kLT5zc2wzX2VuYy0+Y2VydF92ZXJpZnlfbWFjKHMsJihzLT5zMy0+ZmluaXNoX2Rnc3QyKSwKKwkJcy0+bWV0aG9kLT5zc2wzX2VuYy0+Y2VydF92ZXJpZnlfbWFjKHMsCisJCU5JRF9zaGExLAogCQkJJihkYXRhW01ENV9ESUdFU1RfTEVOR1RIXSkpOwogCiAjaWZuZGVmIE9QRU5TU0xfTk9fUlNBCiAJCWlmIChwa2V5LT50eXBlID09IEVWUF9QS0VZX1JTQSkKIAkJCXsKIAkJCXMtPm1ldGhvZC0+c3NsM19lbmMtPmNlcnRfdmVyaWZ5X21hYyhzLAotCQkJCSYocy0+czMtPmZpbmlzaF9kZ3N0MSksJihkYXRhWzBdKSk7CisJCQkJTklEX21kNSwKKwkJCQkmKGRhdGFbMF0pKTsKIAkJCWlmIChSU0Ffc2lnbihOSURfbWQ1X3NoYTEsIGRhdGEsCiAJCQkJCSBNRDVfRElHRVNUX0xFTkdUSCtTSEFfRElHRVNUX0xFTkdUSCwKIAkJCQkJJihwWzJdKSwgJnUsIHBrZXktPnBrZXkucnNhKSA8PSAwICkKQEAgLTExMjIsNiArMTQxMCwyMyBAQAogCQkJfQogCQllbHNlCiAjZW5kaWYKKyNpZm5kZWYgT1BFTlNTTF9OT19FQ0RTQQorCQkJaWYgKHBrZXktPnR5cGUgPT0gRVZQX1BLRVlfRUMpCisJCQl7CisJCQlpZiAoIUVDRFNBX3NpZ24ocGtleS0+c2F2ZV90eXBlLAorCQkJCSYoZGF0YVtNRDVfRElHRVNUX0xFTkdUSF0pLAorCQkJCVNIQV9ESUdFU1RfTEVOR1RILCYocFsyXSksCisJCQkJKHVuc2lnbmVkIGludCAqKSZqLHBrZXktPnBrZXkuZWMpKQorCQkJCXsKKwkJCQlTU0xlcnIoU1NMX0ZfRFRMUzFfU0VORF9DTElFTlRfVkVSSUZZLAorCQkJCSAgICBFUlJfUl9FQ0RTQV9MSUIpOworCQkJCWdvdG8gZXJyOworCQkJCX0KKwkJCXMybihqLHApOworCQkJbj1qKzI7CisJCQl9CisJCWVsc2UKKyNlbmRpZgogCQkJewogCQkJU1NMZXJyKFNTTF9GX0RUTFMxX1NFTkRfQ0xJRU5UX1ZFUklGWSxFUlJfUl9JTlRFUk5BTF9FUlJPUik7CiAJCQlnb3RvIGVycjsKZGlmZiAtLWdpdCBhL3NzbC9kMV9lbmMuYyBiL3NzbC9kMV9lbmMuYwppbmRleCAzZGZhNWFkLi44ZmE1NzM0IDEwMDY0NAotLS0gYS9zc2wvZDFfZW5jLmMKKysrIGIvc3NsL2QxX2VuYy5jCkBAIC0xMzYsOCArMTM2LDEyIEBACiAKIAlpZiAoc2VuZCkKIAkJewotCQlpZiAocy0+d3JpdGVfaGFzaCAhPSBOVUxMKQotCQkJbj1FVlBfTURfc2l6ZShzLT53cml0ZV9oYXNoKTsKKwkJaWYgKEVWUF9NRF9DVFhfbWQocy0+d3JpdGVfaGFzaCkpCisJCQl7CisJCQluPUVWUF9NRF9DVFhfc2l6ZShzLT53cml0ZV9oYXNoKTsKKwkJCWlmIChuIDwgMCkKKwkJCQlyZXR1cm4gLTE7CisJCQl9CiAJCWRzPXMtPmVuY193cml0ZV9jdHg7CiAJCXJlYz0gJihzLT5zMy0+d3JlYyk7CiAJCWlmIChzLT5lbmNfd3JpdGVfY3R4ID09IE5VTEwpCkBAIC0xNTgsOCArMTYyLDEyIEBACiAJCX0KIAllbHNlCiAJCXsKLQkJaWYgKHMtPnJlYWRfaGFzaCAhPSBOVUxMKQotCQkJbj1FVlBfTURfc2l6ZShzLT5yZWFkX2hhc2gpOworCQlpZiAoRVZQX01EX0NUWF9tZChzLT5yZWFkX2hhc2gpKQorCQkJeworCQkJbj1FVlBfTURfQ1RYX3NpemUocy0+cmVhZF9oYXNoKTsKKwkJCWlmIChuIDwgMCkKKwkJCQlyZXR1cm4gLTE7CisJCQl9CiAJCWRzPXMtPmVuY19yZWFkX2N0eDsKIAkJcmVjPSAmKHMtPnMzLT5ycmVjKTsKIAkJaWYgKHMtPmVuY19yZWFkX2N0eCA9PSBOVUxMKQpAQCAtMjA2LDExICsyMTQsMTAgQEAKIAkJewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdWk7CiAJCXByaW50ZigiRVZQX0NpcGhlcihkcz0lcCxyZWMtPmRhdGE9JXAscmVjLT5pbnB1dD0lcCxsPSVsZCkgPT0+XG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKilkcyxyZWMtPmRhdGEscmVjLT5pbnB1dCxsKTsKLQkJcHJpbnRmKCJcdEVWUF9DSVBIRVJfQ1RYOiAlZCBidWZfbGVuLCAlZCBrZXlfbGVuIFslbGQgJWxkXSwgJWQgaXZfbGVuXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgZHMscmVjLT5kYXRhLHJlYy0+aW5wdXQsbCk7CisJCXByaW50ZigiXHRFVlBfQ0lQSEVSX0NUWDogJWQgYnVmX2xlbiwgJWQga2V5X2xlbiBbJWQgJWRdLCAlZCBpdl9sZW5cbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBkcy0+YnVmX2xlbiwgZHMtPmNpcGhlci0+a2V5X2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKURFU19LRVlfU1osCi0JCQkodW5zaWduZWQgbG9uZylERVNfU0NIRURVTEVfU1osCisgICAgICAgICAgICAgICAgICAgICAgICBERVNfS0VZX1NaLCBERVNfU0NIRURVTEVfU1osCiAgICAgICAgICAgICAgICAgICAgICAgICBkcy0+Y2lwaGVyLT5pdl9sZW4pOwogCQlwcmludGYoIlx0XHRJVjogIik7CiAJCWZvciAoaT0wOyBpPGRzLT5jaXBoZXItPml2X2xlbjsgaSsrKSBwcmludGYoIiUwMlgiLCBkcy0+aXZbaV0pOwpAQCAtMjM1LDEwICsyNDIsMTAgQEAKIAogI2lmZGVmIEtTU0xfREVCVUcKIAkJewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcga2k7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBpOwogICAgICAgICAgICAgICAgIHByaW50ZigiXHRyZWMtPmRhdGE9Iik7Ci0JCWZvciAoa2k9MDsga2k8bDsga2krKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiICUwMngiLCByZWMtPmRhdGFba2ldKTsgIHByaW50ZigiXG4iKTsKKwkJZm9yIChpPTA7IGk8bDsgaSsrKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgJTAyeCIsIHJlYy0+ZGF0YVtpXSk7ICBwcmludGYoIlxuIik7CiAgICAgICAgICAgICAgICAgfQogI2VuZGlmCS8qIEtTU0xfREVCVUcgKi8KIApkaWZmIC0tZ2l0IGEvc3NsL2QxX2xpYi5jIGIvc3NsL2QxX2xpYi5jCmluZGV4IDYzYmZiYWMuLmVlZmZjZTMgMTAwNjQ0Ci0tLSBhL3NzbC9kMV9saWIuYworKysgYi9zc2wvZDFfbGliLmMKQEAgLTkxLDExICs5MSw2IEBACiAJcmV0dXJuKDYwKjYwKjIpOwogCX0KIAotSU1QTEVNRU5UX2R0bHMxX21ldGhfZnVuYyhkdGxzdjFfYmFzZV9tZXRob2QsCi0JCQlzc2xfdW5kZWZpbmVkX2Z1bmN0aW9uLAotCQkJc3NsX3VuZGVmaW5lZF9mdW5jdGlvbiwKLQkJCXNzbF9iYWRfbWV0aG9kKQotCiBpbnQgZHRsczFfbmV3KFNTTCAqcykKIAl7CiAJRFRMUzFfU1RBVEUgKmQxOwpAQCAtMTA1LDE3ICsxMDAsNiBAQAogCW1lbXNldChkMSwwLCBzaXplb2YgKmQxKTsKIAogCS8qIGQxLT5oYW5kc2hha2VfZXBvY2g9MDsgKi8KLSNpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX1ZNUykgfHwgZGVmaW5lZChWTVNfVEVTVCkKLQlkMS0+Yml0bWFwLmxlbmd0aD02NDsKLSNlbHNlCi0JZDEtPmJpdG1hcC5sZW5ndGg9c2l6ZW9mKGQxLT5iaXRtYXAubWFwKSAqIDg7Ci0jZW5kaWYKLQlwcV82NGJpdF9pbml0KCYoZDEtPmJpdG1hcC5tYXApKTsKLQlwcV82NGJpdF9pbml0KCYoZDEtPmJpdG1hcC5tYXhfc2VxX251bSkpOwotCQotCWQxLT5uZXh0X2JpdG1hcC5sZW5ndGggPSBkMS0+Yml0bWFwLmxlbmd0aDsKLQlwcV82NGJpdF9pbml0KCYoZDEtPm5leHRfYml0bWFwLm1hcCkpOwotCXBxXzY0Yml0X2luaXQoJihkMS0+bmV4dF9iaXRtYXAubWF4X3NlcV9udW0pKTsKIAogCWQxLT51bnByb2Nlc3NlZF9yY2RzLnE9cHF1ZXVlX25ldygpOwogCWQxLT5wcm9jZXNzZWRfcmNkcy5xPXBxdWV1ZV9uZXcoKTsKQEAgLTE4NSwxOSArMTY5LDEzIEBACiAJcHF1ZXVlX2ZyZWUocy0+ZDEtPnNlbnRfbWVzc2FnZXMpOwogCiAJd2hpbGUgKCAoaXRlbSA9IHBxdWV1ZV9wb3Aocy0+ZDEtPmJ1ZmZlcmVkX2FwcF9kYXRhLnEpKSAhPSBOVUxMKQotCXsKKwkJewogCQlmcmFnID0gKGhtX2ZyYWdtZW50ICopaXRlbS0+ZGF0YTsKIAkJT1BFTlNTTF9mcmVlKGZyYWctPmZyYWdtZW50KTsKIAkJT1BFTlNTTF9mcmVlKGZyYWcpOwogCQlwaXRlbV9mcmVlKGl0ZW0pOwotCX0KKwkJfQogCXBxdWV1ZV9mcmVlKHMtPmQxLT5idWZmZXJlZF9hcHBfZGF0YS5xKTsKLQkKLQlwcV82NGJpdF9mcmVlKCYocy0+ZDEtPmJpdG1hcC5tYXApKTsKLQlwcV82NGJpdF9mcmVlKCYocy0+ZDEtPmJpdG1hcC5tYXhfc2VxX251bSkpOwotCi0JcHFfNjRiaXRfZnJlZSgmKHMtPmQxLT5uZXh0X2JpdG1hcC5tYXApKTsKLQlwcV82NGJpdF9mcmVlKCYocy0+ZDEtPm5leHRfYml0bWFwLm1heF9zZXFfbnVtKSk7CiAKIAlPUEVOU1NMX2ZyZWUocy0+ZDEpOwogCX0KQEAgLTI0NCwxMyArMjIyLDEzIEBACiAgKiB0byBleHBsaWNpdGx5IGxpc3QgdGhlaXIgU1NMXyogY29kZXMuIEN1cnJlbnRseSBSQzQgaXMgdGhlIG9ubHkgb25lCiAgKiBhdmFpbGFibGUsIGJ1dCBpZiBuZXcgb25lcyBlbWVyZ2UsIHRoZXkgd2lsbCBoYXZlIHRvIGJlIGFkZGVkLi4uCiAgKi8KLVNTTF9DSVBIRVIgKmR0bHMxX2dldF9jaXBoZXIodW5zaWduZWQgaW50IHUpCitjb25zdCBTU0xfQ0lQSEVSICpkdGxzMV9nZXRfY2lwaGVyKHVuc2lnbmVkIGludCB1KQogCXsKLQlTU0xfQ0lQSEVSICpjaXBoID0gc3NsM19nZXRfY2lwaGVyKHUpOworCWNvbnN0IFNTTF9DSVBIRVIgKmNpcGggPSBzc2wzX2dldF9jaXBoZXIodSk7CiAKIAlpZiAoY2lwaCAhPSBOVUxMKQogCQl7Ci0JCWlmICgoY2lwaC0+YWxnb3JpdGhtcyZTU0xfRU5DX01BU0spID09IFNTTF9SQzQpCisJCWlmIChjaXBoLT5hbGdvcml0aG1fZW5jID09IFNTTF9SQzQpCiAJCQlyZXR1cm4gTlVMTDsKIAkJfQogCmRpZmYgLS1naXQgYS9zc2wvZDFfbWV0aC5jIGIvc3NsL2QxX21ldGguYwppbmRleCA4YTZjZjMxLi41YzQwMDRiIDEwMDY0NAotLS0gYS9zc2wvZDFfbWV0aC5jCisrKyBiL3NzbC9kMV9tZXRoLmMKQEAgLTYxLDggKzYxLDggQEAKICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KICNpbmNsdWRlICJzc2xfbG9jbC5oIgogCi1zdGF0aWMgU1NMX01FVEhPRCAqZHRsczFfZ2V0X21ldGhvZChpbnQgdmVyKTsKLXN0YXRpYyBTU0xfTUVUSE9EICpkdGxzMV9nZXRfbWV0aG9kKGludCB2ZXIpCitzdGF0aWMgY29uc3QgU1NMX01FVEhPRCAqZHRsczFfZ2V0X21ldGhvZChpbnQgdmVyKTsKK3N0YXRpYyBjb25zdCBTU0xfTUVUSE9EICpkdGxzMV9nZXRfbWV0aG9kKGludCB2ZXIpCiAJewogCWlmICh2ZXIgPT0gRFRMUzFfVkVSU0lPTikKIAkJcmV0dXJuKERUTFN2MV9tZXRob2QoKSk7CmRpZmYgLS1naXQgYS9zc2wvZDFfcGt0LmMgYi9zc2wvZDFfcGt0LmMKaW5kZXggMmFmNTI3Mi4uMTNmZmM3NSAxMDA2NDQKLS0tIGEvc3NsL2QxX3BrdC5jCisrKyBiL3NzbC9kMV9wa3QuYwpAQCAtMTIyLDEwICsxMjIsNTMgQEAKICNpbmNsdWRlIDxvcGVuc3NsL3BxdWV1ZS5oPgogI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgogCisvKiBtb2QgMTI4IHNhdHVyYXRpbmcgc3VidHJhY3Qgb2YgdHdvIDY0LWJpdCB2YWx1ZXMgaW4gYmlnLWVuZGlhbiBvcmRlciAqLworc3RhdGljIGludCBzYXRzdWI2NGJlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnYxLGNvbnN0IHVuc2lnbmVkIGNoYXIgKnYyKQorewlpbnQgcmV0LHNhdCxicncsaTsKKworCWlmIChzaXplb2YobG9uZykgPT0gOCkgZG8KKwl7CWNvbnN0IHVuaW9uIHsgbG9uZyBvbmU7IGNoYXIgbGl0dGxlOyB9IGlzX2VuZGlhbiA9IHsxfTsKKwkJbG9uZyBsOworCisJCWlmIChpc19lbmRpYW4ubGl0dGxlKQkJCWJyZWFrOworCQkvKiBub3QgcmVhY2hlZCBvbiBsaXR0bGUtZW5kaWFucyAqLworCQkvKiBmb2xsb3dpbmcgdGVzdCBpcyByZWR1bmRhbnQsIGJlY2F1c2UgaW5wdXQgaXMKKwkJICogYWx3YXlzIGFsaWduZWQsIGJ1dCBJIHRha2Ugbm8gY2hhbmNlcy4uLiAqLworCQlpZiAoKChzaXplX3QpdjF8KHNpemVfdCl2MikmMHg3KQlicmVhazsKKworCQlsICA9ICooKGxvbmcgKil2MSk7CisJCWwgLT0gKigobG9uZyAqKXYyKTsKKwkJaWYgKGw+MTI4KQkJcmV0dXJuIDEyODsKKwkJZWxzZSBpZiAobDwtMTI4KQlyZXR1cm4gLTEyODsKKwkJZWxzZQkJCXJldHVybiAoaW50KWw7CisJfSB3aGlsZSAoMCk7CisKKwlyZXQgPSAoaW50KXYxWzddLShpbnQpdjJbN107CisJc2F0ID0gMDsKKwlicncgPSByZXQ+Pjg7CS8qIGJydyBpcyBlaXRoZXIgMCBvciAtMSAqLworCWlmIChyZXQgJiAweDgwKQorCXsJZm9yIChpPTY7aT49MDtpLS0pCisJCXsJYnJ3ICs9IChpbnQpdjFbaV0tKGludCl2MltpXTsKKwkJCXNhdCB8PSB+YnJ3OworCQkJYnJ3ID4+PSA4OworCQl9CisJfQorCWVsc2UKKwl7CWZvciAoaT02O2k+PTA7aS0tKQorCQl7CWJydyArPSAoaW50KXYxW2ldLShpbnQpdjJbaV07CisJCQlzYXQgfD0gYnJ3OworCQkJYnJ3ID4+PSA4OworCQl9CisJfQorCWJydyA8PD0gODsJLyogYnJ3IGlzIGVpdGhlciAwIG9yIC0yNTYgKi8KKworCWlmIChzYXQmMHhmZikJcmV0dXJuIGJydyB8IDB4ODA7CisJZWxzZQkJcmV0dXJuIGJydyArIChyZXQmMHhGRik7Cit9CisKIHN0YXRpYyBpbnQgaGF2ZV9oYW5kc2hha2VfZnJhZ21lbnQoU1NMICpzLCBpbnQgdHlwZSwgdW5zaWduZWQgY2hhciAqYnVmLCAKIAlpbnQgbGVuLCBpbnQgcGVlayk7Ci1zdGF0aWMgaW50IGR0bHMxX3JlY29yZF9yZXBsYXlfY2hlY2soU1NMICpzLCBEVExTMV9CSVRNQVAgKmJpdG1hcCwKLQlQUV82NEJJVCAqc2VxX251bSk7CitzdGF0aWMgaW50IGR0bHMxX3JlY29yZF9yZXBsYXlfY2hlY2soU1NMICpzLCBEVExTMV9CSVRNQVAgKmJpdG1hcCk7CiBzdGF0aWMgdm9pZCBkdGxzMV9yZWNvcmRfYml0bWFwX3VwZGF0ZShTU0wgKnMsIERUTFMxX0JJVE1BUCAqYml0bWFwKTsKIHN0YXRpYyBEVExTMV9CSVRNQVAgKmR0bHMxX2dldF9iaXRtYXAoU1NMICpzLCBTU0wzX1JFQ09SRCAqcnIsIAogICAgIHVuc2lnbmVkIGludCAqaXNfbmV4dF9lcG9jaCk7CkBAIC0xMzQsMTEgKzE3Nyw4IEBACiAJdW5zaWduZWQgc2hvcnQgKnByaW9yaXR5LCB1bnNpZ25lZCBsb25nICpvZmZzZXQpOwogI2VuZGlmCiBzdGF0aWMgaW50IGR0bHMxX2J1ZmZlcl9yZWNvcmQoU1NMICpzLCByZWNvcmRfcHF1ZXVlICpxLAotCVBRXzY0QklUICpwcmlvcml0eSk7CisJdW5zaWduZWQgY2hhciAqcHJpb3JpdHkpOwogc3RhdGljIGludCBkdGxzMV9wcm9jZXNzX3JlY29yZChTU0wgKnMpOwotI2lmIFBRXzY0QklUX0lTX0lOVEVHRVIKLXN0YXRpYyBQUV82NEJJVCBieXRlc190b19sb25nX2xvbmcodW5zaWduZWQgY2hhciAqYnl0ZXMsIFBRXzY0QklUICpudW0pOwotI2VuZGlmCiBzdGF0aWMgdm9pZCBkdGxzMV9jbGVhcl90aW1lb3V0cyhTU0wgKnMpOwogCiAvKiBjb3B5IGJ1ZmZlcmVkIHJlY29yZCBpbnRvIFNTTCBzdHJ1Y3R1cmUgKi8KQEAgLTE2Miw5ICsyMDIsOSBAQAogCiAKIHN0YXRpYyBpbnQKLWR0bHMxX2J1ZmZlcl9yZWNvcmQoU1NMICpzLCByZWNvcmRfcHF1ZXVlICpxdWV1ZSwgUFFfNjRCSVQgKnByaW9yaXR5KQotewotICAgIERUTFMxX1JFQ09SRF9EQVRBICpyZGF0YTsKK2R0bHMxX2J1ZmZlcl9yZWNvcmQoU1NMICpzLCByZWNvcmRfcHF1ZXVlICpxdWV1ZSwgdW5zaWduZWQgY2hhciAqcHJpb3JpdHkpCisJeworCURUTFMxX1JFQ09SRF9EQVRBICpyZGF0YTsKIAlwaXRlbSAqaXRlbTsKIAogCS8qIExpbWl0IHRoZSBzaXplIG9mIHRoZSBxdWV1ZSB0byBwcmV2ZW50IERPUyBhdHRhY2tzICovCkBAIC0xNzIsNyArMjEyLDcgQEAKIAkJcmV0dXJuIDA7CiAJCQogCXJkYXRhID0gT1BFTlNTTF9tYWxsb2Moc2l6ZW9mKERUTFMxX1JFQ09SRF9EQVRBKSk7Ci0JaXRlbSA9IHBpdGVtX25ldygqcHJpb3JpdHksIHJkYXRhKTsKKwlpdGVtID0gcGl0ZW1fbmV3KHByaW9yaXR5LCByZGF0YSk7CiAJaWYgKHJkYXRhID09IE5VTEwgfHwgaXRlbSA9PSBOVUxMKQogCQl7CiAJCWlmIChyZGF0YSAhPSBOVUxMKSBPUEVOU1NMX2ZyZWUocmRhdGEpOwpAQCAtMjExLDcgKzI1MSw3IEBACiAJCX0KIAkKIAlyZXR1cm4oMSk7Ci0gICAgfQorCX0KIAogCiBzdGF0aWMgaW50CkBAIC0yNjcsNyArMzA3LDcgQEAKICAgICAgICAgICAgIGlmICggISBkdGxzMV9wcm9jZXNzX3JlY29yZChzKSkKICAgICAgICAgICAgICAgICByZXR1cm4oMCk7CiAgICAgICAgICAgICBkdGxzMV9idWZmZXJfcmVjb3JkKHMsICYocy0+ZDEtPnByb2Nlc3NlZF9yY2RzKSwgCi0gICAgICAgICAgICAgICAgJnMtPnMzLT5ycmVjLnNlcV9udW0pOworICAgICAgICAgICAgICAgIHMtPnMzLT5ycmVjLnNlcV9udW0pOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTMyOCwxNyArMzY4LDE3IEBACiBzdGF0aWMgaW50CiBkdGxzMV9wcm9jZXNzX3JlY29yZChTU0wgKnMpCiB7Ci0gICAgaW50IGksYWw7CisJaW50IGksYWw7CiAJaW50IGNsZWFyPTA7Ci0gICAgaW50IGVuY19lcnI7CisJaW50IGVuY19lcnI7CiAJU1NMX1NFU1NJT04gKnNlc3M7Ci0gICAgU1NMM19SRUNPUkQgKnJyOworCVNTTDNfUkVDT1JEICpycjsKIAl1bnNpZ25lZCBpbnQgbWFjX3NpemU7CiAJdW5zaWduZWQgY2hhciBtZFtFVlBfTUFYX01EX1NJWkVdOwogCiAKIAlycj0gJihzLT5zMy0+cnJlYyk7Ci0gICAgc2VzcyA9IHMtPnNlc3Npb247CisJc2VzcyA9IHMtPnNlc3Npb247CiAKIAkvKiBBdCB0aGlzIHBvaW50LCBzLT5wYWNrZXRfbGVuZ3RoID09IFNTTDNfUlRfSEVBREVSX0xOR1RIICsgcnItPmxlbmd0aCwKIAkgKiBhbmQgd2UgaGF2ZSB0aGF0IG1hbnkgYnl0ZXMgaW4gcy0+cGFja2V0CkBAIC0zODQsMTQgKzQyNCwxOCBAQAogI2VuZGlmCiAKIAkvKiByLT5sZW5ndGggaXMgbm93IHRoZSBjb21wcmVzc2VkIGRhdGEgcGx1cyBtYWMgKi8KLWlmICgJKHNlc3MgPT0gTlVMTCkgfHwKKwlpZiAoCShzZXNzID09IE5VTEwpIHx8CiAJCShzLT5lbmNfcmVhZF9jdHggPT0gTlVMTCkgfHwKIAkJKHMtPnJlYWRfaGFzaCA9PSBOVUxMKSkKLSAgICBjbGVhcj0xOworCQljbGVhcj0xOwogCiAJaWYgKCFjbGVhcikKIAkJewotCQltYWNfc2l6ZT1FVlBfTURfc2l6ZShzLT5yZWFkX2hhc2gpOworCQkvKiAhY2xlYXIgPT4gcy0+cmVhZF9oYXNoICE9IE5VTEwgPT4gbWFjX3NpemUgIT0gLTEgKi8KKwkJaW50IHQ7CisJCXQ9RVZQX01EX0NUWF9zaXplKHMtPnJlYWRfaGFzaCk7CisJCU9QRU5TU0xfYXNzZXJ0KHQgPj0gMCk7CisJCW1hY19zaXplPXQ7CiAKIAkJaWYgKHJyLT5sZW5ndGggPiBTU0wzX1JUX01BWF9DT01QUkVTU0VEX0xFTkdUSCttYWNfc2l6ZSkKIAkJCXsKQEAgLTQxNiw3ICs0NjAsNyBAQAogCQkJfQogCQlyci0+bGVuZ3RoLT1tYWNfc2l6ZTsKIAkJaT1zLT5tZXRob2QtPnNzbDNfZW5jLT5tYWMocyxtZCwwKTsKLQkJaWYgKG1lbWNtcChtZCwmKHJyLT5kYXRhW3JyLT5sZW5ndGhdKSxtYWNfc2l6ZSkgIT0gMCkKKwkJaWYgKGkgPCAwIHx8IG1lbWNtcChtZCwmKHJyLT5kYXRhW3JyLT5sZW5ndGhdKSxtYWNfc2l6ZSkgIT0gMCkKIAkJCXsKIAkJCWdvdG8gZGVjcnlwdGlvbl9mYWlsZWRfb3JfYmFkX3JlY29yZF9tYWM7CiAJCQl9CkBAIC00NTcsOCArNTAxLDggQEAKIAogCS8qIHdlIGhhdmUgcHVsbGVkIGluIGEgZnVsbCBwYWNrZXQgc28gemVybyB0aGluZ3MgKi8KIAlzLT5wYWNrZXRfbGVuZ3RoPTA7Ci0gICAgZHRsczFfcmVjb3JkX2JpdG1hcF91cGRhdGUocywgJihzLT5kMS0+Yml0bWFwKSk7LyogTWFyayByZWNlaXB0IG9mIHJlY29yZC4gKi8KLSAgICByZXR1cm4oMSk7CisJZHRsczFfcmVjb3JkX2JpdG1hcF91cGRhdGUocywgJihzLT5kMS0+Yml0bWFwKSk7LyogTWFyayByZWNlaXB0IG9mIHJlY29yZC4gKi8KKwlyZXR1cm4oMSk7CiAKIGRlY3J5cHRpb25fZmFpbGVkX29yX2JhZF9yZWNvcmRfbWFjOgogCS8qIFNlcGFyYXRlICdkZWNyeXB0aW9uX2ZhaWxlZCcgYWxlcnQgd2FzIGludHJvZHVjZWQgd2l0aCBUTFMgMS4wLApAQCAtNDk4LDEwICs1NDIsMTAgQEAKIAlycj0gJihzLT5zMy0+cnJlYyk7CiAJc2Vzcz1zLT5zZXNzaW9uOwogCi0gICAgLyogVGhlIGVwb2NoIG1heSBoYXZlIGNoYW5nZWQuICBJZiBzbywgcHJvY2VzcyBhbGwgdGhlCi0gICAgICogcGVuZGluZyByZWNvcmRzLiAgVGhpcyBpcyBhIG5vbi1ibG9ja2luZyBvcGVyYXRpb24uICovCi0gICAgaWYgKCAhIGR0bHMxX3Byb2Nlc3NfYnVmZmVyZWRfcmVjb3JkcyhzKSkKLSAgICAgICAgcmV0dXJuIDA7CisJLyogVGhlIGVwb2NoIG1heSBoYXZlIGNoYW5nZWQuICBJZiBzbywgcHJvY2VzcyBhbGwgdGhlCisJICogcGVuZGluZyByZWNvcmRzLiAgVGhpcyBpcyBhIG5vbi1ibG9ja2luZyBvcGVyYXRpb24uICovCisJaWYgKCAhIGR0bHMxX3Byb2Nlc3NfYnVmZmVyZWRfcmVjb3JkcyhzKSkKKyAgICAgICAgICAgIHJldHVybiAwOwogCiAJLyogaWYgd2UncmUgcmVuZWdvdGlhdGluZywgdGhlbiB0aGVyZSBtYXkgYmUgYnVmZmVyZWQgcmVjb3JkcyAqLwogCWlmIChkdGxzMV9nZXRfcHJvY2Vzc2VkX3JlY29yZChzKSkKQEAgLTU0NSw3ICs1ODksNyBAQAogCQkvKiBMZXRzIGNoZWNrIHZlcnNpb24gKi8KIAkJaWYgKCFzLT5maXJzdF9wYWNrZXQpCiAJCQl7Ci0JCQlpZiAodmVyc2lvbiAhPSBzLT52ZXJzaW9uICYmIHZlcnNpb24gIT0gRFRMUzFfQkFEX1ZFUikKKwkJCWlmICh2ZXJzaW9uICE9IHMtPnZlcnNpb24pCiAJCQkJewogCQkJCS8qIHVuZXhwZWN0ZWQgdmVyc2lvbiwgc2lsZW50bHkgZGlzY2FyZCAqLwogCQkJCXJyLT5sZW5ndGggPSAwOwpAQCAtNTU0LDggKzU5OCw3IEBACiAJCQkJfQogCQkJfQogCi0JCWlmICgodmVyc2lvbiAmIDB4ZmYwMCkgIT0gKERUTFMxX1ZFUlNJT04gJiAweGZmMDApICYmCi0JCSAgICAodmVyc2lvbiAmIDB4ZmYwMCkgIT0gKERUTFMxX0JBRF9WRVIgJiAweGZmMDApKQorCQlpZiAoKHZlcnNpb24gJiAweGZmMDApICE9IChzLT52ZXJzaW9uICYgMHhmZjAwKSkKIAkJCXsKIAkJCS8qIHdyb25nIHZlcnNpb24sIHNpbGVudGx5IGRpc2NhcmQgcmVjb3JkICovCiAJCQlyci0+bGVuZ3RoID0gMDsKQEAgLTU4OSw3ICs2MzIsNiBAQAogCQkJcy0+cGFja2V0PSAmKHMtPnMzLT5yYnVmLmJ1ZlswXSk7CiAJCQl9CiAKLQkJcy0+Y2xpZW50X3ZlcnNpb24gPSB2ZXJzaW9uOwogCQkvKiBub3cgcy0+cnN0YXRlID09IFNTTF9TVF9SRUFEX0JPRFkgKi8KIAkJfQogCkBAIC02MTgsMTMgKzY2MCwxMyBAQAogCS8qIG1hdGNoIGVwb2Nocy4gIE5VTEwgbWVhbnMgdGhlIHBhY2tldCBpcyBkcm9wcGVkIG9uIHRoZSBmbG9vciAqLwogCWJpdG1hcCA9IGR0bHMxX2dldF9iaXRtYXAocywgcnIsICZpc19uZXh0X2Vwb2NoKTsKIAlpZiAoIGJpdG1hcCA9PSBOVUxMKQotICAgICAgICB7Ci0JcnItPmxlbmd0aCA9IDA7Ci0gICAgICAgIHMtPnBhY2tldF9sZW5ndGggPSAwOyAgLyogZHVtcCB0aGlzIHJlY29yZCAqLwotICAgICAgICBnb3RvIGFnYWluOyAgIC8qIGdldCBhbm90aGVyIHJlY29yZCAqLworCQl7CisJCXJyLT5sZW5ndGggPSAwOworCQlzLT5wYWNrZXRfbGVuZ3RoID0gMDsgIC8qIGR1bXAgdGhpcyByZWNvcmQgKi8KKwkJZ290byBhZ2FpbjsgICAvKiBnZXQgYW5vdGhlciByZWNvcmQgKi8KIAkJfQogCi0gCS8qIENoZWNrIHdoZXRoZXIgdGhpcyBpcyBhIHJlcGVhdCwgb3IgYWdlZCByZWNvcmQuCisJLyogQ2hlY2sgd2hldGhlciB0aGlzIGlzIGEgcmVwZWF0LCBvciBhZ2VkIHJlY29yZC4KIAkgKiBEb24ndCBjaGVjayBpZiB3ZSdyZSBsaXN0ZW5pbmcgYW5kIHRoaXMgbWVzc2FnZSBpcwogCSAqIGEgQ2xpZW50SGVsbG8uIFRoZXkgY2FuIGxvb2sgYXMgaWYgdGhleSdyZSByZXBsYXllZCwKIAkgKiBzaW5jZSB0aGV5IGFycml2ZSBmcm9tIGRpZmZlcmVudCBjb25uZWN0aW9ucyBhbmQKQEAgLTYzMiw3ICs2NzQsNyBAQAogCSAqLwogCWlmICghKHMtPmQxLT5saXN0ZW4gJiYgcnItPnR5cGUgPT0gU1NMM19SVF9IQU5EU0hBS0UgJiYKIAkJKnAgPT0gU1NMM19NVF9DTElFTlRfSEVMTE8pICYmCi0JCSEgZHRsczFfcmVjb3JkX3JlcGxheV9jaGVjayhzLCBiaXRtYXAsICYocnItPnNlcV9udW0pKSkKKwkJIWR0bHMxX3JlY29yZF9yZXBsYXlfY2hlY2socywgYml0bWFwKSkKIAkJewogCQlyci0+bGVuZ3RoID0gMDsKIAkJcy0+cGFja2V0X2xlbmd0aD0wOyAvKiBkdW1wIHRoaXMgcmVjb3JkICovCkBAIC02NDIsMjEgKzY4NCwyMiBAQAogCS8qIGp1c3QgcmVhZCBhIDAgbGVuZ3RoIHBhY2tldCAqLwogCWlmIChyci0+bGVuZ3RoID09IDApIGdvdG8gYWdhaW47CiAKLSAgICAvKiBJZiB0aGlzIHJlY29yZCBpcyBmcm9tIHRoZSBuZXh0IGVwb2NoIChlaXRoZXIgSE0gb3IgQUxFUlQpLCBidWZmZXIgaXQKLSAgICAgKiBzaW5jZSBpdCBjYW5ub3QgYmUgcHJvY2Vzc2VkIGF0IHRoaXMgdGltZS4KLSAgICAgKiBSZWNvcmRzIGZyb20gdGhlIG5leHQgZXBvY2ggYXJlIG1hcmtlZCBhcyByZWNlaXZlZCBldmVuIHRob3VnaCB0aGV5IGFyZSAKLSAgICAgKiBub3QgcHJvY2Vzc2VkLCBzbyBhcyB0byBwcmV2ZW50IGFueSBwb3RlbnRpYWwgcmVzb3VyY2UgRG9TIGF0dGFjayAqLwotICAgIGlmIChpc19uZXh0X2Vwb2NoKQotICAgICAgICB7Ci0gICAgICAgIGR0bHMxX3JlY29yZF9iaXRtYXBfdXBkYXRlKHMsIGJpdG1hcCk7Ci0gICAgICAgIGR0bHMxX2J1ZmZlcl9yZWNvcmQocywgJihzLT5kMS0+dW5wcm9jZXNzZWRfcmNkcyksICZyci0+c2VxX251bSk7Ci0JcnItPmxlbmd0aCA9IDA7Ci0gICAgICAgIHMtPnBhY2tldF9sZW5ndGggPSAwOwotICAgICAgICBnb3RvIGFnYWluOwotICAgICAgICB9CisJLyogSWYgdGhpcyByZWNvcmQgaXMgZnJvbSB0aGUgbmV4dCBlcG9jaCAoZWl0aGVyIEhNIG9yIEFMRVJUKSwKKwkgKiBidWZmZXIgaXQgc2luY2UgaXQgY2Fubm90IGJlIHByb2Nlc3NlZCBhdCB0aGlzIHRpbWUuIFJlY29yZHMKKwkgKiBmcm9tIHRoZSBuZXh0IGVwb2NoIGFyZSBtYXJrZWQgYXMgcmVjZWl2ZWQgZXZlbiB0aG91Z2ggdGhleQorCSAqIGFyZSBub3QgcHJvY2Vzc2VkLCBzbyBhcyB0byBwcmV2ZW50IGFueSBwb3RlbnRpYWwgcmVzb3VyY2UKKwkgKiBEb1MgYXR0YWNrICovCisJaWYgKGlzX25leHRfZXBvY2gpCisJCXsKKwkJZHRsczFfcmVjb3JkX2JpdG1hcF91cGRhdGUocywgYml0bWFwKTsKKwkJZHRsczFfYnVmZmVyX3JlY29yZChzLCAmKHMtPmQxLT51bnByb2Nlc3NlZF9yY2RzKSwgcnItPnNlcV9udW0pOworCQlyci0+bGVuZ3RoID0gMDsKKwkJcy0+cGFja2V0X2xlbmd0aCA9IDA7CisJCWdvdG8gYWdhaW47CisJCX0KIAotICAgIGlmICggISBkdGxzMV9wcm9jZXNzX3JlY29yZChzKSkKLSAgICAgICAgcmV0dXJuKDApOworCWlmICggISBkdGxzMV9wcm9jZXNzX3JlY29yZChzKSkKKwkJcmV0dXJuKDApOwogCiAJZHRsczFfY2xlYXJfdGltZW91dHMocyk7ICAvKiBkb25lIHdhaXRpbmcgKi8KIAlyZXR1cm4oMSk7CkBAIC0xMDY2LDEzICsxMTA5LDE0IEBACiAKIAkJZHRsczFfZ2V0X2Njc19oZWFkZXIocnItPmRhdGEsICZjY3NfaGRyKTsKIAorCQlpZiAocy0+dmVyc2lvbiA9PSBEVExTMV9CQURfVkVSKQorCQkJY2NzX2hkcl9sZW4gPSAzOworCiAJCS8qICdDaGFuZ2UgQ2lwaGVyIFNwZWMnIGlzIGp1c3QgYSBzaW5nbGUgYnl0ZSwgc28gd2Uga25vdwogCQkgKiBleGFjdGx5IHdoYXQgdGhlIHJlY29yZCBwYXlsb2FkIGhhcyB0byBsb29rIGxpa2UgKi8KIAkJLyogWERUTFM6IGNoZWNrIHRoYXQgZXBvY2ggaXMgY29uc2lzdGVudCAqLwotCQlpZiAocy0+Y2xpZW50X3ZlcnNpb24gPT0gRFRMUzFfQkFEX1ZFUiB8fCBzLT52ZXJzaW9uID09IERUTFMxX0JBRF9WRVIpCi0JCQljY3NfaGRyX2xlbiA9IDM7Ci0KLQkJaWYgKChyci0+bGVuZ3RoICE9IGNjc19oZHJfbGVuKSB8fCAocnItPm9mZiAhPSAwKSB8fCAocnItPmRhdGFbMF0gIT0gU1NMM19NVF9DQ1MpKQorCQlpZiAoCShyci0+bGVuZ3RoICE9IGNjc19oZHJfbGVuKSB8fCAKKwkJCShyci0+b2ZmICE9IDApIHx8IChyci0+ZGF0YVswXSAhPSBTU0wzX01UX0NDUykpCiAJCQl7CiAJCQlpPVNTTF9BRF9JTExFR0FMX1BBUkFNRVRFUjsKIAkJCVNTTGVycihTU0xfRl9EVExTMV9SRUFEX0JZVEVTLFNTTF9SX0JBRF9DSEFOR0VfQ0lQSEVSX1NQRUMpOwpAQCAtMTEwMiw3ICsxMTQ2LDcgQEAKIAkJLyogZG8gdGhpcyB3aGVuZXZlciBDQ1MgaXMgcHJvY2Vzc2VkICovCiAJCWR0bHMxX3Jlc2V0X3NlcV9udW1iZXJzKHMsIFNTTDNfQ0NfUkVBRCk7CiAKLQkJaWYgKHMtPmNsaWVudF92ZXJzaW9uID09IERUTFMxX0JBRF9WRVIpCisJCWlmIChzLT52ZXJzaW9uID09IERUTFMxX0JBRF9WRVIpCiAJCQlzLT5kMS0+aGFuZHNoYWtlX3JlYWRfc2VxKys7CiAKIAkJZ290byBzdGFydDsKQEAgLTEzNTYsMTMgKzE0MDAsMTcgQEAKIAogCWlmICgJKHNlc3MgPT0gTlVMTCkgfHwKIAkJKHMtPmVuY193cml0ZV9jdHggPT0gTlVMTCkgfHwKLQkJKHMtPndyaXRlX2hhc2ggPT0gTlVMTCkpCisJCShFVlBfTURfQ1RYX21kKHMtPndyaXRlX2hhc2gpID09IE5VTEwpKQogCQljbGVhcj0xOwogCiAJaWYgKGNsZWFyKQogCQltYWNfc2l6ZT0wOwogCWVsc2UKLQkJbWFjX3NpemU9RVZQX01EX3NpemUocy0+d3JpdGVfaGFzaCk7CisJCXsKKwkJbWFjX3NpemU9RVZQX01EX0NUWF9zaXplKHMtPndyaXRlX2hhc2gpOworCQlpZiAobWFjX3NpemUgPCAwKQorCQkJZ290byBlcnI7CisJCX0KIAogCS8qIERUTFMgaW1wbGVtZW50cyBleHBsaWNpdCBJViwgc28gbm8gbmVlZCBmb3IgZW1wdHkgZnJhZ21lbnRzICovCiAjaWYgMApAQCAtMTM5NSw3ICsxNDQzLDYgQEAKIAkJcy0+czMtPmVtcHR5X2ZyYWdtZW50X2RvbmUgPSAxOwogCQl9CiAjZW5kaWYKLQogCXAgPSB3Yi0+YnVmICsgcHJlZml4X2xlbjsKIAogCS8qIHdyaXRlIHRoZSBoZWFkZXIgKi8KQEAgLTE0MDMsMTIgKzE0NTAsOCBAQAogCSoocCsrKT10eXBlJjB4ZmY7CiAJd3ItPnR5cGU9dHlwZTsKIAotCWlmIChzLT5jbGllbnRfdmVyc2lvbiA9PSBEVExTMV9CQURfVkVSKQotCQkqKHArKykgPSBEVExTMV9CQURfVkVSPj44LAotCQkqKHArKykgPSBEVExTMV9CQURfVkVSJjB4ZmY7Ci0JZWxzZQotCQkqKHArKyk9KHMtPnZlcnNpb24+PjgpLAotCQkqKHArKyk9cy0+dmVyc2lvbiYweGZmOworCSoocCsrKT0ocy0+dmVyc2lvbj4+OCk7CisJKihwKyspPXMtPnZlcnNpb24mMHhmZjsKIAogCS8qIGZpZWxkIHdoZXJlIHdlIGFyZSB0byB3cml0ZSBvdXQgcGFja2V0IGVwb2NoLCBzZXEgbnVtIGFuZCBsZW4gKi8KIAlwc2VxPXA7IApAQCAtMTQ1Myw3ICsxNDk2LDggQEAKIAogCWlmIChtYWNfc2l6ZSAhPSAwKQogCQl7Ci0JCXMtPm1ldGhvZC0+c3NsM19lbmMtPm1hYyhzLCYocFt3ci0+bGVuZ3RoICsgYnNdKSwxKTsKKwkJaWYocy0+bWV0aG9kLT5zc2wzX2VuYy0+bWFjKHMsJihwW3dyLT5sZW5ndGggKyBic10pLDEpIDwgMCkKKwkJCWdvdG8gZXJyOwogCQl3ci0+bGVuZ3RoKz1tYWNfc2l6ZTsKIAkJfQogCkBAIC0xNTMwLDExMSArMTU3NCw1MCBAQAogCiAKIAotc3RhdGljIGludCBkdGxzMV9yZWNvcmRfcmVwbGF5X2NoZWNrKFNTTCAqcywgRFRMUzFfQklUTUFQICpiaXRtYXAsCi0JUFFfNjRCSVQgKnNlcV9udW0pCitzdGF0aWMgaW50IGR0bHMxX3JlY29yZF9yZXBsYXlfY2hlY2soU1NMICpzLCBEVExTMV9CSVRNQVAgKmJpdG1hcCkKIAl7Ci0jaWYgUFFfNjRCSVRfSVNfSU5URUdFUgotCVBRXzY0QklUIG1hc2sgPSAweDAwMDAwMDAwMDAwMDAwMDFMOwotI2VuZGlmCi0JUFFfNjRCSVQgcmNkX251bSwgdG1wOworCWludCBjbXA7CisJdW5zaWduZWQgaW50IHNoaWZ0OworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlcSA9IHMtPnMzLT5yZWFkX3NlcXVlbmNlOwogCi0JcHFfNjRiaXRfaW5pdCgmcmNkX251bSk7Ci0JcHFfNjRiaXRfaW5pdCgmdG1wKTsKLQotCS8qIHRoaXMgaXMgdGhlIHNlcXVlbmNlIG51bWJlciBmb3IgdGhlIHJlY29yZCBqdXN0IHJlYWQgKi8KLQlwcV82NGJpdF9iaW4ybnVtKCZyY2RfbnVtLCBzLT5zMy0+cmVhZF9zZXF1ZW5jZSwgOCk7Ci0KLQkKLQlpZiAocHFfNjRiaXRfZ3QoJnJjZF9udW0sICYoYml0bWFwLT5tYXhfc2VxX251bSkpIHx8Ci0JCXBxXzY0Yml0X2VxKCZyY2RfbnVtLCAmKGJpdG1hcC0+bWF4X3NlcV9udW0pKSkKKwljbXAgPSBzYXRzdWI2NGJlKHNlcSxiaXRtYXAtPm1heF9zZXFfbnVtKTsKKwlpZiAoY21wID4gMCkKIAkJewotCQlwcV82NGJpdF9hc3NpZ24oc2VxX251bSwgJnJjZF9udW0pOwotCQlwcV82NGJpdF9mcmVlKCZyY2RfbnVtKTsKLQkJcHFfNjRiaXRfZnJlZSgmdG1wKTsKLQkJcmV0dXJuIDE7ICAvKiB0aGlzIHJlY29yZCBpcyBuZXcgKi8KKwkJbWVtY3B5IChzLT5zMy0+cnJlYy5zZXFfbnVtLHNlcSw4KTsKKwkJcmV0dXJuIDE7IC8qIHRoaXMgcmVjb3JkIGluIG5ldyAqLwogCQl9Ci0KLQlwcV82NGJpdF9zdWIoJnRtcCwgJihiaXRtYXAtPm1heF9zZXFfbnVtKSwgJnJjZF9udW0pOwotCi0JaWYgKCBwcV82NGJpdF9nZXRfd29yZCgmdG1wKSA+IGJpdG1hcC0+bGVuZ3RoKQotCQl7Ci0JCXBxXzY0Yml0X2ZyZWUoJnJjZF9udW0pOwotCQlwcV82NGJpdF9mcmVlKCZ0bXApOwotCQlyZXR1cm4gMDsgIC8qIHN0YWxlLCBvdXRzaWRlIHRoZSB3aW5kb3cgKi8KLQkJfQotCi0jaWYgUFFfNjRCSVRfSVNfQklHTlVNCi0JewotCWludCBvZmZzZXQ7Ci0JcHFfNjRiaXRfc3ViKCZ0bXAsICYoYml0bWFwLT5tYXhfc2VxX251bSksICZyY2RfbnVtKTsKLQlwcV82NGJpdF9zdWJfd29yZCgmdG1wLCAxKTsKLQlvZmZzZXQgPSBwcV82NGJpdF9nZXRfd29yZCgmdG1wKTsKLQlpZiAoIHBxXzY0Yml0X2lzX2JpdF9zZXQoJihiaXRtYXAtPm1hcCksIG9mZnNldCkpCi0JCXsKLQkJcHFfNjRiaXRfZnJlZSgmcmNkX251bSk7Ci0JCXBxXzY0Yml0X2ZyZWUoJnRtcCk7Ci0JCXJldHVybiAwOwotCQl9Ci0JfQotI2Vsc2UKLQltYXNrIDw8PSAoYml0bWFwLT5tYXhfc2VxX251bSAtIHJjZF9udW0gLSAxKTsKLQlpZiAoYml0bWFwLT5tYXAgJiBtYXNrKQorCXNoaWZ0ID0gLWNtcDsKKwlpZiAoc2hpZnQgPj0gc2l6ZW9mKGJpdG1hcC0+bWFwKSo4KQorCQlyZXR1cm4gMDsgLyogc3RhbGUsIG91dHNpZGUgdGhlIHdpbmRvdyAqLworCWVsc2UgaWYgKGJpdG1hcC0+bWFwICYgKDFVTDw8c2hpZnQpKQogCQlyZXR1cm4gMDsgLyogcmVjb3JkIHByZXZpb3VzbHkgcmVjZWl2ZWQgKi8KLSNlbmRpZgotCQotCXBxXzY0Yml0X2Fzc2lnbihzZXFfbnVtLCAmcmNkX251bSk7Ci0JcHFfNjRiaXRfZnJlZSgmcmNkX251bSk7Ci0JcHFfNjRiaXRfZnJlZSgmdG1wKTsKKworCW1lbWNweSAocy0+czMtPnJyZWMuc2VxX251bSxzZXEsOCk7CiAJcmV0dXJuIDE7CiAJfQogCiAKIHN0YXRpYyB2b2lkIGR0bHMxX3JlY29yZF9iaXRtYXBfdXBkYXRlKFNTTCAqcywgRFRMUzFfQklUTUFQICpiaXRtYXApCiAJeworCWludCBjbXA7CiAJdW5zaWduZWQgaW50IHNoaWZ0OwotCVBRXzY0QklUIHJjZF9udW07Ci0JUFFfNjRCSVQgdG1wOwotCVBRXzY0QklUX0NUWCAqY3R4OworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlcSA9IHMtPnMzLT5yZWFkX3NlcXVlbmNlOwogCi0JcHFfNjRiaXRfaW5pdCgmcmNkX251bSk7Ci0JcHFfNjRiaXRfaW5pdCgmdG1wKTsKLQotCXBxXzY0Yml0X2JpbjJudW0oJnJjZF9udW0sIHMtPnMzLT5yZWFkX3NlcXVlbmNlLCA4KTsKLQotCS8qIHVuZm9ydHVuYXRlIGNvZGUgY29tcGxleGl0eSBkdWUgdG8gNjQtYml0IG1hbmlwdWxhdGlvbiBzdXBwb3J0Ci0JICogb24gMzItYml0IG1hY2hpbmVzICovCi0JaWYgKCBwcV82NGJpdF9ndCgmcmNkX251bSwgJihiaXRtYXAtPm1heF9zZXFfbnVtKSkgfHwKLQkJcHFfNjRiaXRfZXEoJnJjZF9udW0sICYoYml0bWFwLT5tYXhfc2VxX251bSkpKQorCWNtcCA9IHNhdHN1YjY0YmUoc2VxLGJpdG1hcC0+bWF4X3NlcV9udW0pOworCWlmIChjbXAgPiAwKQogCQl7Ci0JCXBxXzY0Yml0X3N1YigmdG1wLCAmcmNkX251bSwgJihiaXRtYXAtPm1heF9zZXFfbnVtKSk7Ci0JCXBxXzY0Yml0X2FkZF93b3JkKCZ0bXAsIDEpOwotCi0JCXNoaWZ0ID0gKHVuc2lnbmVkIGludClwcV82NGJpdF9nZXRfd29yZCgmdG1wKTsKLQotCQlwcV82NGJpdF9sc2hpZnQoJih0bXApLCAmKGJpdG1hcC0+bWFwKSwgc2hpZnQpOwotCQlwcV82NGJpdF9hc3NpZ24oJihiaXRtYXAtPm1hcCksICZ0bXApOwotCi0JCXBxXzY0Yml0X3NldF9iaXQoJihiaXRtYXAtPm1hcCksIDApOwotCQlwcV82NGJpdF9hZGRfd29yZCgmcmNkX251bSwgMSk7Ci0JCXBxXzY0Yml0X2Fzc2lnbigmKGJpdG1hcC0+bWF4X3NlcV9udW0pLCAmcmNkX251bSk7Ci0KLQkJcHFfNjRiaXRfYXNzaWduX3dvcmQoJnRtcCwgMSk7Ci0JCXBxXzY0Yml0X2xzaGlmdCgmdG1wLCAmdG1wLCBiaXRtYXAtPmxlbmd0aCk7Ci0JCWN0eCA9IHBxXzY0Yml0X2N0eF9uZXcoJmN0eCk7Ci0JCXBxXzY0Yml0X21vZCgmKGJpdG1hcC0+bWFwKSwgJihiaXRtYXAtPm1hcCksICZ0bXAsIGN0eCk7Ci0JCXBxXzY0Yml0X2N0eF9mcmVlKGN0eCk7CisJCXNoaWZ0ID0gY21wOworCQlpZiAoc2hpZnQgPCBzaXplb2YoYml0bWFwLT5tYXApKjgpCisJCQliaXRtYXAtPm1hcCA8PD0gc2hpZnQsIGJpdG1hcC0+bWFwIHw9IDFVTDsKKwkJZWxzZQorCQkJYml0bWFwLT5tYXAgPSAxVUw7CisJCW1lbWNweShiaXRtYXAtPm1heF9zZXFfbnVtLHNlcSw4KTsKIAkJfQotCWVsc2UKLQkJewotCQlwcV82NGJpdF9zdWIoJnRtcCwgJihiaXRtYXAtPm1heF9zZXFfbnVtKSwgJnJjZF9udW0pOwotCQlwcV82NGJpdF9zdWJfd29yZCgmdG1wLCAxKTsKLQkJc2hpZnQgPSAodW5zaWduZWQgaW50KXBxXzY0Yml0X2dldF93b3JkKCZ0bXApOwotCi0JCXBxXzY0Yml0X3NldF9iaXQoJihiaXRtYXAtPm1hcCksIHNoaWZ0KTsKKwllbHNlCXsKKwkJc2hpZnQgPSAtY21wOworCQlpZiAoc2hpZnQgPCBzaXplb2YoYml0bWFwLT5tYXApKjgpCisJCQliaXRtYXAtPm1hcCB8PSAxVUw8PHNoaWZ0OwogCQl9Ci0KLQlwcV82NGJpdF9mcmVlKCZyY2RfbnVtKTsKLQlwcV82NGJpdF9mcmVlKCZ0bXApOwogCX0KIAogCkBAIC0xNjgxLDcgKzE2NjQsNyBAQAogI2lmZGVmIERUTFMxX0FEX01JU1NJTkdfSEFORFNIQUtFX01FU1NBR0UKIAkJICAgIHx8IHMtPnMzLT5zZW5kX2FsZXJ0WzFdID09IERUTFMxX0FEX01JU1NJTkdfSEFORFNIQUtFX01FU1NBR0UKICNlbmRpZgotCQkgICApCisJCSAgICApCiAJCQkodm9pZClCSU9fZmx1c2gocy0+d2Jpbyk7CiAKIAkJaWYgKHMtPm1zZ19jYWxsYmFjaykKQEAgLTE4MDAsMTcgKzE3ODMsOCBAQAogCQl7CiAJCXNlcSA9IHMtPnMzLT5yZWFkX3NlcXVlbmNlOwogCQlzLT5kMS0+cl9lcG9jaCsrOwotCi0JCXBxXzY0Yml0X2Fzc2lnbigmKHMtPmQxLT5iaXRtYXAubWFwKSwgJihzLT5kMS0+bmV4dF9iaXRtYXAubWFwKSk7Ci0JCXMtPmQxLT5iaXRtYXAubGVuZ3RoID0gcy0+ZDEtPm5leHRfYml0bWFwLmxlbmd0aDsKLQkJcHFfNjRiaXRfYXNzaWduKCYocy0+ZDEtPmJpdG1hcC5tYXhfc2VxX251bSksIAotCQkJJihzLT5kMS0+bmV4dF9iaXRtYXAubWF4X3NlcV9udW0pKTsKLQotCQlwcV82NGJpdF9mcmVlKCYocy0+ZDEtPm5leHRfYml0bWFwLm1hcCkpOwotCQlwcV82NGJpdF9mcmVlKCYocy0+ZDEtPm5leHRfYml0bWFwLm1heF9zZXFfbnVtKSk7CisJCW1lbWNweSgmKHMtPmQxLT5iaXRtYXApLCAmKHMtPmQxLT5uZXh0X2JpdG1hcCksIHNpemVvZihEVExTMV9CSVRNQVApKTsKIAkJbWVtc2V0KCYocy0+ZDEtPm5leHRfYml0bWFwKSwgMHgwMCwgc2l6ZW9mKERUTFMxX0JJVE1BUCkpOwotCQlwcV82NGJpdF9pbml0KCYocy0+ZDEtPm5leHRfYml0bWFwLm1hcCkpOwotCQlwcV82NGJpdF9pbml0KCYocy0+ZDEtPm5leHRfYml0bWFwLm1heF9zZXFfbnVtKSk7CiAJCX0KIAllbHNlCiAJCXsKQEAgLTE4MjIsMjYgKzE3OTYsNiBAQAogCW1lbXNldChzZXEsIDB4MDAsIHNlcV9ieXRlcyk7CiAJfQogCi0jaWYgUFFfNjRCSVRfSVNfSU5URUdFUgotc3RhdGljIFBRXzY0QklUCi1ieXRlc190b19sb25nX2xvbmcodW5zaWduZWQgY2hhciAqYnl0ZXMsIFBRXzY0QklUICpudW0pCi0gICAgICAgewotICAgICAgIFBRXzY0QklUIF9udW07Ci0KLSAgICAgICBfbnVtID0gKCgoUFFfNjRCSVQpYnl0ZXNbMF0pIDw8IDU2KSB8Ci0gICAgICAgICAgICAgICAoKChQUV82NEJJVClieXRlc1sxXSkgPDwgNDgpIHwKLSAgICAgICAgICAgICAgICgoKFBRXzY0QklUKWJ5dGVzWzJdKSA8PCA0MCkgfAotICAgICAgICAgICAgICAgKCgoUFFfNjRCSVQpYnl0ZXNbM10pIDw8IDMyKSB8Ci0gICAgICAgICAgICAgICAoKChQUV82NEJJVClieXRlc1s0XSkgPDwgMjQpIHwKLSAgICAgICAgICAgICAgICgoKFBRXzY0QklUKWJ5dGVzWzVdKSA8PCAxNikgfAotICAgICAgICAgICAgICAgKCgoUFFfNjRCSVQpYnl0ZXNbNl0pIDw8ICA4KSB8Ci0gICAgICAgICAgICAgICAoKChQUV82NEJJVClieXRlc1s3XSkgICAgICApOwotCi0JICAgKm51bSA9IF9udW0gOwotICAgICAgIHJldHVybiBfbnVtOwotICAgICAgIH0KLSNlbmRpZgotCiAKIHN0YXRpYyB2b2lkCiBkdGxzMV9jbGVhcl90aW1lb3V0cyhTU0wgKnMpCmRpZmYgLS1naXQgYS9zc2wvZDFfc3J2ci5jIGIvc3NsL2QxX3NydnIuYwppbmRleCA1YjMxMzY2Li4zMDFjZWRhIDEwMDY0NAotLS0gYS9zc2wvZDFfc3J2ci5jCisrKyBiL3NzbC9kMV9zcnZyLmMKQEAgLTQsNyArNCw3IEBACiAgKiAobmFnZW5kcmFAY3Muc3RhbmZvcmQuZWR1KSBmb3IgdGhlIE9wZW5TU0wgcHJvamVjdCAyMDA1LiAgCiAgKi8KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjEsMTQgKzEyMSwxNSBAQAogI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9tZDUuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CiAjaWZuZGVmIE9QRU5TU0xfTk9fREgKICNpbmNsdWRlIDxvcGVuc3NsL2RoLmg+CiAjZW5kaWYKIAotc3RhdGljIFNTTF9NRVRIT0QgKmR0bHMxX2dldF9zZXJ2ZXJfbWV0aG9kKGludCB2ZXIpOworc3RhdGljIGNvbnN0IFNTTF9NRVRIT0QgKmR0bHMxX2dldF9zZXJ2ZXJfbWV0aG9kKGludCB2ZXIpOwogc3RhdGljIGludCBkdGxzMV9zZW5kX2hlbGxvX3ZlcmlmeV9yZXF1ZXN0KFNTTCAqcyk7CiAKLXN0YXRpYyBTU0xfTUVUSE9EICpkdGxzMV9nZXRfc2VydmVyX21ldGhvZChpbnQgdmVyKQorc3RhdGljIGNvbnN0IFNTTF9NRVRIT0QgKmR0bHMxX2dldF9zZXJ2ZXJfbWV0aG9kKGludCB2ZXIpCiAJewogCWlmICh2ZXIgPT0gRFRMUzFfVkVSU0lPTikKIAkJcmV0dXJuKERUTFN2MV9zZXJ2ZXJfbWV0aG9kKCkpOwpAQCAtMTQ0LDggKzE0NSw5IEBACiBpbnQgZHRsczFfYWNjZXB0KFNTTCAqcykKIAl7CiAJQlVGX01FTSAqYnVmOwotCXVuc2lnbmVkIGxvbmcgbCxUaW1lPSh1bnNpZ25lZCBsb25nKXRpbWUoTlVMTCk7CisJdW5zaWduZWQgbG9uZyBUaW1lPSh1bnNpZ25lZCBsb25nKXRpbWUoTlVMTCk7CiAJdm9pZCAoKmNiKShjb25zdCBTU0wgKnNzbCxpbnQgdHlwZSxpbnQgdmFsKT1OVUxMOworCXVuc2lnbmVkIGxvbmcgYWxnX2s7CiAJaW50IHJldD0gLTE7CiAJaW50IG5ld19zdGF0ZSxzdGF0ZSxza2lwPTA7CiAKQEAgLTI5MCw4ICsyOTIsOCBAQAogCQkJcy0+c3RhdGU9U1NMM19TVF9TV19GTFVTSDsKIAkJCXMtPnMzLT50bXAubmV4dF9zdGF0ZT1TU0wzX1NUX1NSX0NMTlRfSEVMTE9fQTsKIAotCQkJLyogSGVsbG9WZXJpZnlSZXF1ZXN0cyByZXNldHMgRmluaXNoZWQgTUFDICovCi0JCQlpZiAocy0+Y2xpZW50X3ZlcnNpb24gIT0gRFRMUzFfQkFEX1ZFUikKKwkJCS8qIEhlbGxvVmVyaWZ5UmVxdWVzdCByZXNldHMgRmluaXNoZWQgTUFDICovCisJCQlpZiAocy0+dmVyc2lvbiAhPSBEVExTMV9CQURfVkVSKQogCQkJCXNzbDNfaW5pdF9maW5pc2hlZF9tYWMocyk7CiAJCQlicmVhazsKIAkJCQpAQCAtMzIxLDggKzMyMyw5IEBACiAKIAkJY2FzZSBTU0wzX1NUX1NXX0NFUlRfQToKIAkJY2FzZSBTU0wzX1NUX1NXX0NFUlRfQjoKLQkJCS8qIENoZWNrIGlmIGl0IGlzIGFub24gREggKi8KLQkJCWlmICghKHMtPnMzLT50bXAubmV3X2NpcGhlci0+YWxnb3JpdGhtcyAmIFNTTF9hTlVMTCkpCisJCQkvKiBDaGVjayBpZiBpdCBpcyBhbm9uIERIIG9yIG5vcm1hbCBQU0sgKi8KKwkJCWlmICghKHMtPnMzLT50bXAubmV3X2NpcGhlci0+YWxnb3JpdGhtX2F1dGggJiBTU0xfYU5VTEwpCisJCQkJJiYgIShzLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobV9ta2V5ICYgU1NMX2tQU0spKQogCQkJCXsKIAkJCQlkdGxzMV9zdGFydF90aW1lcihzKTsKIAkJCQlyZXQ9ZHRsczFfc2VuZF9zZXJ2ZXJfY2VydGlmaWNhdGUocyk7CkBAIC0zNTAsMTMgKzM1MywxMyBAQAogCiAJCWNhc2UgU1NMM19TVF9TV19LRVlfRVhDSF9BOgogCQljYXNlIFNTTDNfU1RfU1dfS0VZX0VYQ0hfQjoKLQkJCWw9cy0+czMtPnRtcC5uZXdfY2lwaGVyLT5hbGdvcml0aG1zOworCQkJYWxnX2sgPSBzLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobV9ta2V5OwogCiAJCQkvKiBjbGVhciB0aGlzLCBpdCBtYXkgZ2V0IHJlc2V0IGJ5CiAJCQkgKiBzZW5kX3NlcnZlcl9rZXlfZXhjaGFuZ2UgKi8KIAkJCWlmICgocy0+b3B0aW9ucyAmIFNTTF9PUF9FUEhFTUVSQUxfUlNBKQogI2lmbmRlZiBPUEVOU1NMX05PX0tSQjUKLQkJCQkmJiAhKGwgJiBTU0xfS1JCNSkKKwkJCQkmJiAhKGFsZ19rICYgU1NMX2tLUkI1KQogI2VuZGlmIC8qIE9QRU5TU0xfTk9fS1JCNSAqLwogCQkJCSkKIAkJCQkvKiBvcHRpb24gU1NMX09QX0VQSEVNRVJBTF9SU0Egc2VuZHMgdGVtcG9yYXJ5IFJTQSBrZXkKQEAgLTM2NywxMSArMzcwLDE3IEBACiAJCQllbHNlCiAJCQkJcy0+czMtPnRtcC51c2VfcnNhX3RtcD0wOwogCi0JCQkvKiBvbmx5IHNlbmQgaWYgYSBESCBrZXkgZXhjaGFuZ2UsIGZvcnRlenphIG9yCisJCQkvKiBvbmx5IHNlbmQgaWYgYSBESCBrZXkgZXhjaGFuZ2Ugb3IKIAkJCSAqIFJTQSBidXQgd2UgaGF2ZSBhIHNpZ24gb25seSBjZXJ0aWZpY2F0ZSAqLwogCQkJaWYgKHMtPnMzLT50bXAudXNlX3JzYV90bXAKLQkJCSAgICB8fCAobCAmIChTU0xfREh8U1NMX2tGWkEpKQotCQkJICAgIHx8ICgobCAmIFNTTF9rUlNBKQorCQkJLyogUFNLOiBzZW5kIFNlcnZlcktleUV4Y2hhbmdlIGlmIFBTSyBpZGVudGl0eQorCQkJICogaGludCBpZiBwcm92aWRlZCAqLworI2lmbmRlZiBPUEVOU1NMX05PX1BTSworCQkJICAgIHx8ICgoYWxnX2sgJiBTU0xfa1BTSykgJiYgcy0+Y3R4LT5wc2tfaWRlbnRpdHlfaGludCkKKyNlbmRpZgorCQkJICAgIHx8IChhbGdfayAmIChTU0xfa0VESHxTU0xfa0RIcnxTU0xfa0RIZCkpCisJCQkgICAgfHwgKGFsZ19rICYgU1NMX2tFRUNESCkKKwkJCSAgICB8fCAoKGFsZ19rICYgU1NMX2tSU0EpCiAJCQkJJiYgKHMtPmNlcnQtPnBrZXlzW1NTTF9QS0VZX1JTQV9FTkNdLnByaXZhdGVrZXkgPT0gTlVMTAogCQkJCSAgICB8fCAoU1NMX0NfSVNfRVhQT1JUKHMtPnMzLT50bXAubmV3X2NpcGhlcikKIAkJCQkJJiYgRVZQX1BLRVlfc2l6ZShzLT5jZXJ0LT5wa2V5c1tTU0xfUEtFWV9SU0FfRU5DXS5wcml2YXRla2V5KSo4ID4gU1NMX0NfRVhQT1JUX1BLRVlMRU5HVEgocy0+czMtPnRtcC5uZXdfY2lwaGVyKQpAQCAtNDAyLDEyICs0MTEsMTUgQEAKIAkJCQkvKiBuZXZlciByZXF1ZXN0IGNlcnQgaW4gYW5vbnltb3VzIGNpcGhlcnN1aXRlcwogCQkJCSAqIChzZWUgc2VjdGlvbiAiQ2VydGlmaWNhdGUgcmVxdWVzdCIgaW4gU1NMIDMgZHJhZnRzCiAJCQkJICogYW5kIGluIFJGQyAyMjQ2KTogKi8KLQkJCQkoKHMtPnMzLT50bXAubmV3X2NpcGhlci0+YWxnb3JpdGhtcyAmIFNTTF9hTlVMTCkgJiYKKwkJCQkoKHMtPnMzLT50bXAubmV3X2NpcGhlci0+YWxnb3JpdGhtX2F1dGggJiBTU0xfYU5VTEwpICYmCiAJCQkJIC8qIC4uLiBleGNlcHQgd2hlbiB0aGUgYXBwbGljYXRpb24gaW5zaXN0cyBvbiB2ZXJpZmljYXRpb24KIAkJCQkgICogKGFnYWluc3QgdGhlIHNwZWNzLCBidXQgczNfY2xudC5jIGFjY2VwdHMgdGhpcyBmb3IgU1NMIDMpICovCiAJCQkJICEocy0+dmVyaWZ5X21vZGUgJiBTU0xfVkVSSUZZX0ZBSUxfSUZfTk9fUEVFUl9DRVJUKSkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5ldmVyIHJlcXVlc3QgY2VydCBpbiBLZXJiZXJvcyBjaXBoZXJzdWl0ZXMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHMtPnMzLT50bXAubmV3X2NpcGhlci0+YWxnb3JpdGhtcyAmIFNTTF9hS1JCNSkpCisJCQkJIC8qIG5ldmVyIHJlcXVlc3QgY2VydCBpbiBLZXJiZXJvcyBjaXBoZXJzdWl0ZXMgKi8KKwkJCQkocy0+czMtPnRtcC5uZXdfY2lwaGVyLT5hbGdvcml0aG1fYXV0aCAmIFNTTF9hS1JCNSkKKwkJCQkvKiBXaXRoIG5vcm1hbCBQU0sgQ2VydGlmaWNhdGVzIGFuZAorCQkJCSAqIENlcnRpZmljYXRlIFJlcXVlc3RzIGFyZSBvbWl0dGVkICovCisJCQkJfHwgKHMtPnMzLT50bXAubmV3X2NpcGhlci0+YWxnb3JpdGhtX21rZXkgJiBTU0xfa1BTSykpCiAJCQkJewogCQkJCS8qIG5vIGNlcnQgcmVxdWVzdCAqLwogCQkJCXNraXA9MTsKQEAgLTQ3OSwxNSArNDkxLDMwIEBACiAJCQlzLT5zdGF0ZT1TU0wzX1NUX1NSX0NFUlRfVlJGWV9BOwogCQkJcy0+aW5pdF9udW09MDsKIAotCQkJLyogV2UgbmVlZCB0byBnZXQgaGFzaGVzIGhlcmUgc28gaWYgdGhlcmUgaXMKLQkJCSAqIGEgY2xpZW50IGNlcnQsIGl0IGNhbiBiZSB2ZXJpZmllZCAqLyAKLQkJCXMtPm1ldGhvZC0+c3NsM19lbmMtPmNlcnRfdmVyaWZ5X21hYyhzLAotCQkJCSYocy0+czMtPmZpbmlzaF9kZ3N0MSksCi0JCQkJJihzLT5zMy0+dG1wLmNlcnRfdmVyaWZ5X21kWzBdKSk7Ci0JCQlzLT5tZXRob2QtPnNzbDNfZW5jLT5jZXJ0X3ZlcmlmeV9tYWMocywKLQkJCQkmKHMtPnMzLT5maW5pc2hfZGdzdDIpLAotCQkJCSYocy0+czMtPnRtcC5jZXJ0X3ZlcmlmeV9tZFtNRDVfRElHRVNUX0xFTkdUSF0pKTsKKwkJCWlmIChyZXQgPT0gMikKKwkJCQl7CisJCQkJLyogRm9yIHRoZSBFQ0RIIGNpcGhlcnN1aXRlcyB3aGVuCisJCQkJICogdGhlIGNsaWVudCBzZW5kcyBpdHMgRUNESCBwdWIga2V5IGluCisJCQkJICogYSBjZXJ0aWZpY2F0ZSwgdGhlIENlcnRpZmljYXRlVmVyaWZ5CisJCQkJICogbWVzc2FnZSBpcyBub3Qgc2VudC4KKwkJCQkgKi8KKwkJCQlzLT5zdGF0ZT1TU0wzX1NUX1NSX0ZJTklTSEVEX0E7CisJCQkJcy0+aW5pdF9udW0gPSAwOworCQkJCX0KKwkJCWVsc2UKKwkJCQl7CisJCQkJcy0+c3RhdGU9U1NMM19TVF9TUl9DRVJUX1ZSRllfQTsKKwkJCQlzLT5pbml0X251bT0wOwogCisJCQkJLyogV2UgbmVlZCB0byBnZXQgaGFzaGVzIGhlcmUgc28gaWYgdGhlcmUgaXMKKwkJCQkgKiBhIGNsaWVudCBjZXJ0LCBpdCBjYW4gYmUgdmVyaWZpZWQgKi8gCisJCQkJcy0+bWV0aG9kLT5zc2wzX2VuYy0+Y2VydF92ZXJpZnlfbWFjKHMsCisJCQkJCU5JRF9tZDUsCisJCQkJCSYocy0+czMtPnRtcC5jZXJ0X3ZlcmlmeV9tZFswXSkpOworCQkJCXMtPm1ldGhvZC0+c3NsM19lbmMtPmNlcnRfdmVyaWZ5X21hYyhzLAorCQkJCQlOSURfc2hhMSwKKwkJCQkJJihzLT5zMy0+dG1wLmNlcnRfdmVyaWZ5X21kW01ENV9ESUdFU1RfTEVOR1RIXSkpOworCQkJCX0KIAkJCWJyZWFrOwogCiAJCWNhc2UgU1NMM19TVF9TUl9DRVJUX1ZSRllfQToKQEAgLTY4NiwxMiArNzEzLDggQEAKIAkJYnVmID0gKHVuc2lnbmVkIGNoYXIgKilzLT5pbml0X2J1Zi0+ZGF0YTsKIAogCQltc2cgPSBwID0gJihidWZbRFRMUzFfSE1fSEVBREVSX0xFTkdUSF0pOwotCQlpZiAocy0+Y2xpZW50X3ZlcnNpb24gPT0gRFRMUzFfQkFEX1ZFUikKLQkJCSoocCsrKSA9IERUTFMxX0JBRF9WRVI+PjgsCi0JCQkqKHArKykgPSBEVExTMV9CQURfVkVSJjB4ZmY7Ci0JCWVsc2UKLQkJCSoocCsrKSA9IHMtPnZlcnNpb24gPj4gOCwKLQkJCSoocCsrKSA9IHMtPnZlcnNpb24gJiAweEZGOworCQkqKHArKykgPSBzLT52ZXJzaW9uID4+IDg7CisJCSoocCsrKSA9IHMtPnZlcnNpb24gJiAweEZGOwogCiAJCWlmIChzLT5jdHgtPmFwcF9nZW5fY29va2llX2NiID09IE5VTEwgfHwKIAkJICAgICBzLT5jdHgtPmFwcF9nZW5fY29va2llX2NiKHMsIHMtPmQxLT5jb29raWUsCkBAIC03NDAsMTIgKzc2Myw4IEBACiAJCS8qIERvIHRoZSBtZXNzYWdlIHR5cGUgYW5kIGxlbmd0aCBsYXN0ICovCiAJCWQ9cD0gJihidWZbRFRMUzFfSE1fSEVBREVSX0xFTkdUSF0pOwogCi0JCWlmIChzLT5jbGllbnRfdmVyc2lvbiA9PSBEVExTMV9CQURfVkVSKQotCQkJKihwKyspPURUTFMxX0JBRF9WRVI+PjgsCi0JCQkqKHArKyk9RFRMUzFfQkFEX1ZFUiYweGZmOwotCQllbHNlCi0JCQkqKHArKyk9cy0+dmVyc2lvbj4+OCwKLQkJCSoocCsrKT1zLT52ZXJzaW9uJjB4ZmY7CisJCSoocCsrKT1zLT52ZXJzaW9uPj44OworCQkqKHArKyk9cy0+dmVyc2lvbiYweGZmOwogCiAJCS8qIFJhbmRvbSBzdHVmZiAqLwogCQltZW1jcHkocCxzLT5zMy0+c2VydmVyX3JhbmRvbSxTU0wzX1JBTkRPTV9TSVpFKTsKQEAgLTg1MSw2ICs4NzAsMTMgQEAKICNpZm5kZWYgT1BFTlNTTF9OT19ESAogCURIICpkaD1OVUxMLCpkaHA7CiAjZW5kaWYKKyNpZm5kZWYgT1BFTlNTTF9OT19FQ0RICisJRUNfS0VZICplY2RoPU5VTEwsICplY2RocDsKKwl1bnNpZ25lZCBjaGFyICplbmNvZGVkUG9pbnQgPSBOVUxMOworCWludCBlbmNvZGVkbGVuID0gMDsKKwlpbnQgY3VydmVfaWQgPSAwOworCUJOX0NUWCAqYm5fY3R4ID0gTlVMTDsgCisjZW5kaWYKIAlFVlBfUEtFWSAqcGtleTsKIAl1bnNpZ25lZCBjaGFyICpwLCpkOwogCWludCBhbCxpOwpAQCAtODY1LDcgKzg5MSw3IEBACiAJRVZQX01EX0NUWF9pbml0KCZtZF9jdHgpOwogCWlmIChzLT5zdGF0ZSA9PSBTU0wzX1NUX1NXX0tFWV9FWENIX0EpCiAJCXsKLQkJdHlwZT1zLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobXMgJiBTU0xfTUtFWV9NQVNLOworCQl0eXBlPXMtPnMzLT50bXAubmV3X2NpcGhlci0+YWxnb3JpdGhtX21rZXk7CiAJCWNlcnQ9cy0+Y2VydDsKIAogCQlidWY9cy0+aW5pdF9idWY7CkBAIC05NTksNiArOTg1LDE0MiBAQAogCQkJfQogCQllbHNlIAogI2VuZGlmCisjaWZuZGVmIE9QRU5TU0xfTk9fRUNESAorCQkJaWYgKHR5cGUgJiBTU0xfa0VFQ0RIKQorCQkJeworCQkJY29uc3QgRUNfR1JPVVAgKmdyb3VwOworCisJCQllY2RocD1jZXJ0LT5lY2RoX3RtcDsKKwkJCWlmICgoZWNkaHAgPT0gTlVMTCkgJiYgKHMtPmNlcnQtPmVjZGhfdG1wX2NiICE9IE5VTEwpKQorCQkJCXsKKwkJCQllY2RocD1zLT5jZXJ0LT5lY2RoX3RtcF9jYihzLAorCQkJCSAgICAgIFNTTF9DX0lTX0VYUE9SVChzLT5zMy0+dG1wLm5ld19jaXBoZXIpLAorCQkJCSAgICAgIFNTTF9DX0VYUE9SVF9QS0VZTEVOR1RIKHMtPnMzLT50bXAubmV3X2NpcGhlcikpOworCQkJCX0KKwkJCWlmIChlY2RocCA9PSBOVUxMKQorCQkJCXsKKwkJCQlhbD1TU0xfQURfSEFORFNIQUtFX0ZBSUxVUkU7CisJCQkJU1NMZXJyKFNTTF9GX0RUTFMxX1NFTkRfU0VSVkVSX0tFWV9FWENIQU5HRSxTU0xfUl9NSVNTSU5HX1RNUF9FQ0RIX0tFWSk7CisJCQkJZ290byBmX2VycjsKKwkJCQl9CisKKwkJCWlmIChzLT5zMy0+dG1wLmVjZGggIT0gTlVMTCkKKwkJCQl7CisJCQkJRUNfS0VZX2ZyZWUocy0+czMtPnRtcC5lY2RoKTsgCisJCQkJU1NMZXJyKFNTTF9GX0RUTFMxX1NFTkRfU0VSVkVSX0tFWV9FWENIQU5HRSwgRVJSX1JfSU5URVJOQUxfRVJST1IpOworCQkJCWdvdG8gZXJyOworCQkJCX0KKworCQkJLyogRHVwbGljYXRlIHRoZSBFQ0RIIHN0cnVjdHVyZS4gKi8KKwkJCWlmIChlY2RocCA9PSBOVUxMKQorCQkJCXsKKwkJCQlTU0xlcnIoU1NMX0ZfRFRMUzFfU0VORF9TRVJWRVJfS0VZX0VYQ0hBTkdFLEVSUl9SX0VDREhfTElCKTsKKwkJCQlnb3RvIGVycjsKKwkJCQl9CisJCQlpZiAoIUVDX0tFWV91cF9yZWYoZWNkaHApKQorCQkJCXsKKwkJCQlTU0xlcnIoU1NMX0ZfRFRMUzFfU0VORF9TRVJWRVJfS0VZX0VYQ0hBTkdFLEVSUl9SX0VDREhfTElCKTsKKwkJCQlnb3RvIGVycjsKKwkJCQl9CisJCQllY2RoID0gZWNkaHA7CisKKwkJCXMtPnMzLT50bXAuZWNkaD1lY2RoOworCQkJaWYgKChFQ19LRVlfZ2V0MF9wdWJsaWNfa2V5KGVjZGgpID09IE5VTEwpIHx8CisJCQkgICAgKEVDX0tFWV9nZXQwX3ByaXZhdGVfa2V5KGVjZGgpID09IE5VTEwpIHx8CisJCQkgICAgKHMtPm9wdGlvbnMgJiBTU0xfT1BfU0lOR0xFX0VDREhfVVNFKSkKKwkJCQl7CisJCQkJaWYoIUVDX0tFWV9nZW5lcmF0ZV9rZXkoZWNkaCkpCisJCQkJICAgIHsKKwkJCQkgICAgU1NMZXJyKFNTTF9GX0RUTFMxX1NFTkRfU0VSVkVSX0tFWV9FWENIQU5HRSxFUlJfUl9FQ0RIX0xJQik7CisJCQkJICAgIGdvdG8gZXJyOworCQkJCSAgICB9CisJCQkJfQorCisJCQlpZiAoKChncm91cCA9IEVDX0tFWV9nZXQwX2dyb3VwKGVjZGgpKSA9PSBOVUxMKSB8fAorCQkJICAgIChFQ19LRVlfZ2V0MF9wdWJsaWNfa2V5KGVjZGgpICA9PSBOVUxMKSB8fAorCQkJICAgIChFQ19LRVlfZ2V0MF9wcml2YXRlX2tleShlY2RoKSA9PSBOVUxMKSkKKwkJCQl7CisJCQkJU1NMZXJyKFNTTF9GX0RUTFMxX1NFTkRfU0VSVkVSX0tFWV9FWENIQU5HRSxFUlJfUl9FQ0RIX0xJQik7CisJCQkJZ290byBlcnI7CisJCQkJfQorCisJCQlpZiAoU1NMX0NfSVNfRVhQT1JUKHMtPnMzLT50bXAubmV3X2NpcGhlcikgJiYKKwkJCSAgICAoRUNfR1JPVVBfZ2V0X2RlZ3JlZShncm91cCkgPiAxNjMpKSAKKwkJCQl7CisJCQkJU1NMZXJyKFNTTF9GX0RUTFMxX1NFTkRfU0VSVkVSX0tFWV9FWENIQU5HRSxTU0xfUl9FQ0dST1VQX1RPT19MQVJHRV9GT1JfQ0lQSEVSKTsKKwkJCQlnb3RvIGVycjsKKwkJCQl9CisKKwkJCS8qIFhYWDogRm9yIG5vdywgd2Ugb25seSBzdXBwb3J0IGVwaGVtZXJhbCBFQ0RICisJCQkgKiBrZXlzIG92ZXIgbmFtZWQgKG5vdCBnZW5lcmljKSBjdXJ2ZXMuIEZvciAKKwkJCSAqIHN1cHBvcnRlZCBuYW1lZCBjdXJ2ZXMsIGN1cnZlX2lkIGlzIG5vbi16ZXJvLgorCQkJICovCisJCQlpZiAoKGN1cnZlX2lkID0gCisJCQkgICAgdGxzMV9lY19uaWQyY3VydmVfaWQoRUNfR1JPVVBfZ2V0X2N1cnZlX25hbWUoZ3JvdXApKSkKKwkJCSAgICA9PSAwKQorCQkJCXsKKwkJCQlTU0xlcnIoU1NMX0ZfRFRMUzFfU0VORF9TRVJWRVJfS0VZX0VYQ0hBTkdFLFNTTF9SX1VOU1VQUE9SVEVEX0VMTElQVElDX0NVUlZFKTsKKwkJCQlnb3RvIGVycjsKKwkJCQl9CisKKwkJCS8qIEVuY29kZSB0aGUgcHVibGljIGtleS4KKwkJCSAqIEZpcnN0IGNoZWNrIHRoZSBzaXplIG9mIGVuY29kaW5nIGFuZAorCQkJICogYWxsb2NhdGUgbWVtb3J5IGFjY29yZGluZ2x5LgorCQkJICovCisJCQllbmNvZGVkbGVuID0gRUNfUE9JTlRfcG9pbnQyb2N0KGdyb3VwLCAKKwkJCSAgICBFQ19LRVlfZ2V0MF9wdWJsaWNfa2V5KGVjZGgpLAorCQkJICAgIFBPSU5UX0NPTlZFUlNJT05fVU5DT01QUkVTU0VELCAKKwkJCSAgICBOVUxMLCAwLCBOVUxMKTsKKworCQkJZW5jb2RlZFBvaW50ID0gKHVuc2lnbmVkIGNoYXIgKikgCisJCQkgICAgT1BFTlNTTF9tYWxsb2MoZW5jb2RlZGxlbipzaXplb2YodW5zaWduZWQgY2hhcikpOyAKKwkJCWJuX2N0eCA9IEJOX0NUWF9uZXcoKTsKKwkJCWlmICgoZW5jb2RlZFBvaW50ID09IE5VTEwpIHx8IChibl9jdHggPT0gTlVMTCkpCisJCQkJeworCQkJCVNTTGVycihTU0xfRl9EVExTMV9TRU5EX1NFUlZFUl9LRVlfRVhDSEFOR0UsRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOworCQkJCWdvdG8gZXJyOworCQkJCX0KKworCisJCQllbmNvZGVkbGVuID0gRUNfUE9JTlRfcG9pbnQyb2N0KGdyb3VwLCAKKwkJCSAgICBFQ19LRVlfZ2V0MF9wdWJsaWNfa2V5KGVjZGgpLCAKKwkJCSAgICBQT0lOVF9DT05WRVJTSU9OX1VOQ09NUFJFU1NFRCwgCisJCQkgICAgZW5jb2RlZFBvaW50LCBlbmNvZGVkbGVuLCBibl9jdHgpOworCisJCQlpZiAoZW5jb2RlZGxlbiA9PSAwKSAKKwkJCQl7CisJCQkJU1NMZXJyKFNTTF9GX0RUTFMxX1NFTkRfU0VSVkVSX0tFWV9FWENIQU5HRSxFUlJfUl9FQ0RIX0xJQik7CisJCQkJZ290byBlcnI7CisJCQkJfQorCisJCQlCTl9DVFhfZnJlZShibl9jdHgpOyAgYm5fY3R4PU5VTEw7CisKKwkJCS8qIFhYWDogRm9yIG5vdywgd2Ugb25seSBzdXBwb3J0IG5hbWVkIChub3QgCisJCQkgKiBnZW5lcmljKSBjdXJ2ZXMgaW4gRUNESCBlcGhlbWVyYWwga2V5IGV4Y2hhbmdlcy4KKwkJCSAqIEluIHRoaXMgc2l0dWF0aW9uLCB3ZSBuZWVkIGZvdXIgYWRkaXRpb25hbCBieXRlcworCQkJICogdG8gZW5jb2RlIHRoZSBlbnRpcmUgU2VydmVyRUNESFBhcmFtcworCQkJICogc3RydWN0dXJlLiAKKwkJCSAqLworCQkJbiA9IDQgKyBlbmNvZGVkbGVuOworCisJCQkvKiBXZSdsbCBnZW5lcmF0ZSB0aGUgc2VydmVyS2V5RXhjaGFuZ2UgbWVzc2FnZQorCQkJICogZXhwbGljaXRseSBzbyB3ZSBjYW4gc2V0IHRoZXNlIHRvIE5VTExzCisJCQkgKi8KKwkJCXJbMF09TlVMTDsKKwkJCXJbMV09TlVMTDsKKwkJCXJbMl09TlVMTDsKKwkJCXJbM109TlVMTDsKKwkJCX0KKwkJZWxzZSAKKyNlbmRpZiAvKiAhT1BFTlNTTF9OT19FQ0RIICovCisjaWZuZGVmIE9QRU5TU0xfTk9fUFNLCisJCQlpZiAodHlwZSAmIFNTTF9rUFNLKQorCQkJCXsKKwkJCQkvKiByZXNlcnZlIHNpemUgZm9yIHJlY29yZCBsZW5ndGggYW5kIFBTSyBpZGVudGl0eSBoaW50Ki8KKwkJCQluKz0yK3N0cmxlbihzLT5jdHgtPnBza19pZGVudGl0eV9oaW50KTsKKwkJCQl9CisJCQllbHNlCisjZW5kaWYgLyogIU9QRU5TU0xfTk9fUFNLICovCiAJCQl7CiAJCQlhbD1TU0xfQURfSEFORFNIQUtFX0ZBSUxVUkU7CiAJCQlTU0xlcnIoU1NMX0ZfRFRMUzFfU0VORF9TRVJWRVJfS0VZX0VYQ0hBTkdFLFNTTF9SX1VOS05PV05fS0VZX0VYQ0hBTkdFX1RZUEUpOwpAQCAtOTcwLDcgKzExMzIsOCBAQAogCQkJbis9MitucltpXTsKIAkJCX0KIAotCQlpZiAoIShzLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobXMgJiBTU0xfYU5VTEwpKQorCQlpZiAoIShzLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobV9hdXRoICYgU1NMX2FOVUxMKQorCQkJJiYgIShzLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobV9ta2V5ICYgU1NMX2tQU0spKQogCQkJewogCQkJaWYgKChwa2V5PXNzbF9nZXRfc2lnbl9wa2V5KHMscy0+czMtPnRtcC5uZXdfY2lwaGVyKSkKIAkJCQk9PSBOVUxMKQpAQCAtMTAwMSw2ICsxMTY0LDQxIEBACiAJCQlwKz1ucltpXTsKIAkJCX0KIAorI2lmbmRlZiBPUEVOU1NMX05PX0VDREgKKwkJaWYgKHR5cGUgJiBTU0xfa0VFQ0RIKSAKKwkJCXsKKwkJCS8qIFhYWDogRm9yIG5vdywgd2Ugb25seSBzdXBwb3J0IG5hbWVkIChub3QgZ2VuZXJpYykgY3VydmVzLgorCQkJICogSW4gdGhpcyBzaXR1YXRpb24sIHRoZSBzZXJ2ZXJLZXlFeGNoYW5nZSBtZXNzYWdlIGhhczoKKwkJCSAqIFsxIGJ5dGUgQ3VydmVUeXBlXSwgWzIgYnl0ZSBDdXJ2ZU5hbWVdCisJCQkgKiBbMSBieXRlIGxlbmd0aCBvZiBlbmNvZGVkIHBvaW50XSwgZm9sbG93ZWQgYnkKKwkJCSAqIHRoZSBhY3R1YWwgZW5jb2RlZCBwb2ludCBpdHNlbGYKKwkJCSAqLworCQkJKnAgPSBOQU1FRF9DVVJWRV9UWVBFOworCQkJcCArPSAxOworCQkJKnAgPSAwOworCQkJcCArPSAxOworCQkJKnAgPSBjdXJ2ZV9pZDsKKwkJCXAgKz0gMTsKKwkJCSpwID0gZW5jb2RlZGxlbjsKKwkJCXAgKz0gMTsKKwkJCW1lbWNweSgodW5zaWduZWQgY2hhciopcCwgCisJCQkgICAgKHVuc2lnbmVkIGNoYXIgKillbmNvZGVkUG9pbnQsIAorCQkJICAgIGVuY29kZWRsZW4pOworCQkJT1BFTlNTTF9mcmVlKGVuY29kZWRQb2ludCk7CisJCQlwICs9IGVuY29kZWRsZW47CisJCQl9CisjZW5kaWYKKworI2lmbmRlZiBPUEVOU1NMX05PX1BTSworCQlpZiAodHlwZSAmIFNTTF9rUFNLKQorCQkJeworCQkJLyogY29weSBQU0sgaWRlbnRpdHkgaGludCAqLworCQkJczJuKHN0cmxlbihzLT5jdHgtPnBza19pZGVudGl0eV9oaW50KSwgcCk7IAorCQkJc3RybmNweSgoY2hhciAqKXAsIHMtPmN0eC0+cHNrX2lkZW50aXR5X2hpbnQsIHN0cmxlbihzLT5jdHgtPnBza19pZGVudGl0eV9oaW50KSk7CisJCQlwKz1zdHJsZW4ocy0+Y3R4LT5wc2tfaWRlbnRpdHlfaGludCk7CisJCQl9CisjZW5kaWYKKwogCQkvKiBub3QgYW5vbnltb3VzICovCiAJCWlmIChwa2V5ICE9IE5VTEwpCiAJCQl7CkBAIC0xMDU0LDYgKzEyNTIsMjUgQEAKIAkJCQl9CiAJCQllbHNlCiAjZW5kaWYKKyNpZiAhZGVmaW5lZChPUEVOU1NMX05PX0VDRFNBKQorCQkJCWlmIChwa2V5LT50eXBlID09IEVWUF9QS0VZX0VDKQorCQkJCXsKKwkJCQkvKiBsZXQncyBkbyBFQ0RTQSAqLworCQkJCUVWUF9TaWduSW5pdF9leCgmbWRfY3R4LEVWUF9lY2RzYSgpLCBOVUxMKTsKKwkJCQlFVlBfU2lnblVwZGF0ZSgmbWRfY3R4LCYocy0+czMtPmNsaWVudF9yYW5kb21bMF0pLFNTTDNfUkFORE9NX1NJWkUpOworCQkJCUVWUF9TaWduVXBkYXRlKCZtZF9jdHgsJihzLT5zMy0+c2VydmVyX3JhbmRvbVswXSksU1NMM19SQU5ET01fU0laRSk7CisJCQkJRVZQX1NpZ25VcGRhdGUoJm1kX2N0eCwmKGRbNF0pLG4pOworCQkJCWlmICghRVZQX1NpZ25GaW5hbCgmbWRfY3R4LCYocFsyXSksCisJCQkJCSh1bnNpZ25lZCBpbnQgKikmaSxwa2V5KSkKKwkJCQkJeworCQkJCQlTU0xlcnIoU1NMX0ZfRFRMUzFfU0VORF9TRVJWRVJfS0VZX0VYQ0hBTkdFLEVSUl9MSUJfRUNEU0EpOworCQkJCQlnb3RvIGVycjsKKwkJCQkJfQorCQkJCXMybihpLHApOworCQkJCW4rPWkrMjsKKwkJCQl9CisJCQllbHNlCisjZW5kaWYKIAkJCQl7CiAJCQkJLyogSXMgdGhpcyBlcnJvciBjaGVjayBhY3R1YWxseSBuZWVkZWQ/ICovCiAJCQkJYWw9U1NMX0FEX0hBTkRTSEFLRV9GQUlMVVJFOwpAQCAtMTA4MCw2ICsxMjk3LDEwIEBACiBmX2VycjoKIAlzc2wzX3NlbmRfYWxlcnQocyxTU0wzX0FMX0ZBVEFMLGFsKTsKIGVycjoKKyNpZm5kZWYgT1BFTlNTTF9OT19FQ0RICisJaWYgKGVuY29kZWRQb2ludCAhPSBOVUxMKSBPUEVOU1NMX2ZyZWUoZW5jb2RlZFBvaW50KTsKKwlCTl9DVFhfZnJlZShibl9jdHgpOworI2VuZGlmCiAJRVZQX01EX0NUWF9jbGVhbnVwKCZtZF9jdHgpOwogCXJldHVybigtMSk7CiAJfQpAQCAtMTE5MywxNCArMTQxNCwxNSBAQAogCWlmIChzLT5zdGF0ZSA9PSBTU0wzX1NUX1NXX0NFUlRfQSkKIAkJewogCQl4PXNzbF9nZXRfc2VydmVyX3NlbmRfY2VydChzKTsKLQkJaWYgKHggPT0gTlVMTCAmJgotICAgICAgICAgICAgICAgICAgICAgICAgLyogVlJTOiBhbGxvdyBudWxsIGNlcnQgaWYgYXV0aCA9PSBLUkI1ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAocy0+czMtPnRtcC5uZXdfY2lwaGVyLT5hbGdvcml0aG1zCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgKFNTTF9NS0VZX01BU0t8U1NMX0FVVEhfTUFTSykpCi0gICAgICAgICAgICAgICAgICAgICAgICAhPSAoU1NMX2FLUkI1fFNTTF9rS1JCNSkpCisJCWlmICh4ID09IE5VTEwpCiAJCQl7Ci0JCQlTU0xlcnIoU1NMX0ZfRFRMUzFfU0VORF9TRVJWRVJfQ0VSVElGSUNBVEUsRVJSX1JfSU5URVJOQUxfRVJST1IpOwotCQkJcmV0dXJuKDApOworCQkJLyogVlJTOiBhbGxvdyBudWxsIGNlcnQgaWYgYXV0aCA9PSBLUkI1ICovCisJCQlpZiAoKHMtPnMzLT50bXAubmV3X2NpcGhlci0+YWxnb3JpdGhtX21rZXkgIT0gU1NMX2tLUkI1KSB8fAorCQkJICAgIChzLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobV9hdXRoICE9IFNTTF9hS1JCNSkpCisJCQkJeworCQkJCVNTTGVycihTU0xfRl9EVExTMV9TRU5EX1NFUlZFUl9DRVJUSUZJQ0FURSxFUlJfUl9JTlRFUk5BTF9FUlJPUik7CisJCQkJcmV0dXJuKDApOworCQkJCX0KIAkJCX0KIAogCQlsPWR0bHMxX291dHB1dF9jZXJ0X2NoYWluKHMseCk7CmRpZmYgLS1naXQgYS9zc2wvZHRsczEuaCBiL3NzbC9kdGxzMS5oCmluZGV4IGE4Y2U1MWEuLmFmMzYzYTkgMTAwNjQ0Ci0tLSBhL3NzbC9kdGxzMS5oCisrKyBiL3NzbC9kdGxzMS5oCkBAIC0xMDgsMTUgKzEwOCwxNyBAQAogCiB0eXBlZGVmIHN0cnVjdCBkdGxzMV9iaXRtYXBfc3QKIAl7Ci0JUFFfNjRCSVQgbWFwOwotCXVuc2lnbmVkIGxvbmcgbGVuZ3RoOyAgICAgLyogc2l6ZW9mIHRoZSBiaXRtYXAgaW4gYml0cyAqLwotCVBRXzY0QklUIG1heF9zZXFfbnVtOyAgLyogbWF4IHJlY29yZCBudW1iZXIgc2VlbiBzbyBmYXIgKi8KKwl1bnNpZ25lZCBsb25nIG1hcDsJCS8qIHRyYWNrIDMyIHBhY2tldHMgb24gMzItYml0IHN5c3RlbXMKKwkJCQkJICAgYW5kIDY0IC0gb24gNjQtYml0IHN5c3RlbXMgKi8KKwl1bnNpZ25lZCBjaGFyIG1heF9zZXFfbnVtWzhdOwkvKiBtYXggcmVjb3JkIG51bWJlciBzZWVuIHNvIGZhciwKKwkJCQkJICAgNjQtYml0IHZhbHVlIGluIGJpZy1lbmRpYW4KKwkJCQkJICAgZW5jb2RpbmcgKi8KIAl9IERUTFMxX0JJVE1BUDsKIAogc3RydWN0IGR0bHMxX3JldHJhbnNtaXRfc3RhdGUKIAl7CiAJRVZQX0NJUEhFUl9DVFggKmVuY193cml0ZV9jdHg7CS8qIGNyeXB0b2dyYXBoaWMgc3RhdGUgKi8KLQljb25zdCBFVlBfTUQgKndyaXRlX2hhc2g7CQkvKiB1c2VkIGZvciBtYWMgZ2VuZXJhdGlvbiAqLworCUVWUF9NRF9DVFggKndyaXRlX2hhc2g7CQkJLyogdXNlZCBmb3IgbWFjIGdlbmVyYXRpb24gKi8KICNpZm5kZWYgT1BFTlNTTF9OT19DT01QCiAJQ09NUF9DVFggKmNvbXByZXNzOwkJCQkvKiBjb21wcmVzc2lvbiAqLwogI2Vsc2UKZGlmZiAtLWdpdCBhL3NzbC9rc3NsLmMgYi9zc2wva3NzbC5jCmluZGV4IDczNDAxYzkuLmI4MjBlMzcgMTAwNjQ0Ci0tLSBhL3NzbC9rc3NsLmMKKysrIGIvc3NsL2tzc2wuYwpAQCAtNzYsNiArNzYsNyBAQAogI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9rcmI1X2Fzbi5oPgorI2luY2x1ZGUgImtzc2xfbGNsLmgiCiAKICNpZm5kZWYgT1BFTlNTTF9OT19LUkI1CiAKQEAgLTEzMSw3ICsxMzIsNyBAQAogI2RlZmluZSBrcmI1X3ByaW5jaXBhbF9jb21wYXJlICAga3NzbF9rcmI1X3ByaW5jaXBhbF9jb21wYXJlCiAjZGVmaW5lIGtyYjVfZGVjcnlwdF90a3RfcGFydCAgICBrc3NsX2tyYjVfZGVjcnlwdF90a3RfcGFydAogI2RlZmluZSBrcmI1X3RpbWVvZmRheSAgICAgICAgICAga3NzbF9rcmI1X3RpbWVvZmRheQotI2RlZmluZSBrcmI1X3JjX2RlZmF1bHQgICAgICAgICAgIGtzc2xfa3JiNV9yY19kZWZhdWx0CisjZGVmaW5lIGtyYjVfcmNfZGVmYXVsdCAgICAgICAgICBrc3NsX2tyYjVfcmNfZGVmYXVsdAogCiAjaWZkZWYga3JiNV9yY19pbml0aWFsaXplCiAjdW5kZWYga3JiNV9yY19pbml0aWFsaXplCkBAIC04MzksNyArODQwLDcgQEAKICoqCSI2MiB4eCAzMCB5eSIgKEFQUExJQ0FUSU9OLTIsIFNFUVVFTkNFKSwgd2hlcmUgeHgteXkgPX4gMiwgYW5kCiAqKgl4eCBhbmQgeXkgYXJlIHBvc3NpYmx5IG11bHRpLWJ5dGUgbGVuZ3RoIGZpZWxkcy4KICovCi1pbnQgCWtzc2xfdGVzdF9jb25mb3VuZCh1bnNpZ25lZCBjaGFyICpwKQorc3RhdGljIGludCAJa3NzbF90ZXN0X2NvbmZvdW5kKHVuc2lnbmVkIGNoYXIgKnApCiAJewogCWludCAJbGVuID0gMjsKIAlpbnQgCXh4ID0gMCwgeXkgPSAwOwpAQCAtODc0LDcgKzg3NSw3IEBACiAqKiAgICAgIHdoYXQgdGhlIGhpZ2hlc3QgYXNzaWduZWQgQ0tTVU1UWVBFXyBjb25zdGFudCBpcy4gIEFzIG9mIDEuMi4yCiAqKiAgICAgIGl0IGlzIDB4MDAwYyAoQ0tTVU1UWVBFX0hNQUNfU0hBMV9ERVMzKS4gIFNvIHdlIHdpbGwgdXNlIDB4MDAxMC4KICovCi1zaXplX3QgICpwb3B1bGF0ZV9ja3N1bWxlbnModm9pZCkKK3N0YXRpYyBzaXplX3QgICpwb3B1bGF0ZV9ja3N1bWxlbnModm9pZCkKIAl7CiAJaW50IAkJaSwgaiwgbjsKIAlzdGF0aWMgc2l6ZV90IAkqY2tsZW5zID0gTlVMTDsKQEAgLTEwMjUsNyArMTAyNiw3IEBACiAvKglEaXNwbGF5IGNvbnRlbnRzIG9mIGtyYjVfcHJpbmNpcGFsX2RhdGEgc3RydWN0LCBmb3IgZGVidWdnaW5nCiAqKgkoa3JiNV9wcmluY2lwYWwgaXMgdHlwZWRlZidkID09IGtyYjVfcHJpbmNpcGFsX2RhdGEgKikKICovCi12b2lkCitzdGF0aWMgdm9pZAogcHJpbnRfa3JiNV9wcmluYyhjaGFyICpsYWJlbCwga3JiNV9wcmluY2lwYWxfZGF0YSAqcHJpbmMpCiAgICAgICAgIHsKIAlpbnQgaSwgdWksIHVqOwpAQCAtMTIyNCw3ICsxMjI1LDcgQEAKICoqCQkJCWNvZGUgaGVyZS4gIFRoaXMgdGt0IHNob3VsZCBhbGxvYy9mcmVlIGp1c3QKICoqCQkJCWxpa2UgdGhlIHJlYWwgdGhpbmcuCiAqLwota3JiNV9lcnJvcl9jb2RlCitzdGF0aWMga3JiNV9lcnJvcl9jb2RlCiBrc3NsX1RLVDJ0a3QoCS8qIElOICAgICAqLwlrcmI1X2NvbnRleHQJa3JiNWNvbnRleHQsCiAJCS8qIElOICAgICAqLwlLUkI1X1RLVEJPRFkJKmFzbjF0aWNrZXQsCiAJCS8qIE9VVCAgICAqLwlrcmI1X3RpY2tldAkqKmtyYjV0aWNrZXQsCkBAIC0xODAyLDYgKzE4MDMsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtzc2xfY3R4LT5zZXJ2aWNlX25hbWUgPyBrc3NsX2N0eC0+c2VydmljZV9uYW1lOiBLUkI1U1ZDLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtSQjVfTlRfU1JWX0hTVCwgJnByaW5jKTsKIAorICAgIGlmIChrcmI1cmMpCisJZ290byBleGl0OworCiAgICAga3JiNXJjID0ga3JiNV9rdF9nZXRfZW50cnkoa3JiNWNvbnRleHQsIGtyYjVrZXl0YWIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmluYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAvKiBJR05PUkVfVk5PICovLApAQCAtMTg5OSw3ICsxOTAzLDcgQEAKICoqICBSZXR1cm4gcG9pbnRlciB0byB0aGUgKHBhcnRpYWxseSkgZmlsbGVkIGluIHN0cnVjdCB0bSBvbiBzdWNjZXNzLAogKiogIHJldHVybiBOVUxMIG9uIGZhaWx1cmUuCiAqLwotc3RydWN0IHRtCSprX2dtdGltZShBU04xX0dFTkVSQUxJWkVEVElNRSAqZ3RpbWUsIHN0cnVjdCB0bSAqa190bSkKK3N0YXRpYyBzdHJ1Y3QgdG0gKmtfZ210aW1lKEFTTjFfR0VORVJBTElaRURUSU1FICpndGltZSwgc3RydWN0IHRtICprX3RtKQogCXsKIAljaGFyIAkJYywgKnA7CiAKQEAgLTE5MjUsNyArMTkyOSw3IEBACiAqKiAgU28gd2UgdHJ5IHRvIHNuZWVrIHRoZSBjbG9ja3NrZXcgb3V0IHRocm91Z2ggdGhlIHJlcGxheSBjYWNoZS4KICoqCUlmIHRoYXQgZmFpbHMganVzdCByZXR1cm4gYSBsaWtlbHkgZGVmYXVsdCAoMzAwIHNlY29uZHMpLgogKi8KLWtyYjVfZGVsdGF0CWdldF9yY19jbG9ja3NrZXcoa3JiNV9jb250ZXh0IGNvbnRleHQpCitzdGF0aWMga3JiNV9kZWx0YXQgZ2V0X3JjX2Nsb2Nrc2tldyhrcmI1X2NvbnRleHQgY29udGV4dCkKIAl7CiAJa3JiNV9yY2FjaGUgCXJjOwogCWtyYjVfZGVsdGF0IAljbG9ja3NrZXc7CkBAIC0yMDg5LDkgKzIwOTMsMTIgQEAKICAgICAgICAgRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY2lwaF9jdHgpOwogCiAjaWZkZWYgS1NTTF9ERUJVRworCXsKKwlpbnQgcGFkbDsKIAlwcmludGYoImtzc2xfY2hlY2tfYXV0aGVudDogZGVjcnlwdGVkIGF1dGhlbnRpY2F0b3JbJWRdID1cbiIsIG91dGwpOwogCWZvciAocGFkbD0wOyBwYWRsIDwgb3V0bDsgcGFkbCsrKSBwcmludGYoIiUwMnggIix1bmVuY19hdXRoZW50W3BhZGxdKTsKIAlwcmludGYoIlxuIik7CisJfQogI2VuZGlmCS8qIEtTU0xfREVCVUcgKi8KIAogCWlmICgocCA9IGtzc2xfc2tpcF9jb25mb3VuZChlbmN0eXBlLCB1bmVuY19hdXRoZW50KSkgPT0gTlVMTCkKQEAgLTIxMjEsNyArMjEyOCw3IEBACiAgCQl0bV9nID0gZ210aW1lKCZub3cpOwkJdGcgPSBta3RpbWUodG1fZyk7CiAgCQl0el9vZmZzZXQgPSB0ZyAtIHRsOwogCi0JCSphdGltZXAgPSB0ciAtIHR6X29mZnNldDsKKwkJKmF0aW1lcCA9IChrcmI1X3RpbWVzdGFtcCkodHIgLSB0el9vZmZzZXQpOwogIAkJfQogCiAjaWZkZWYgS1NTTF9ERUJVRwpkaWZmIC0tZ2l0IGEvc3NsL2tzc2xfbGNsLmggYi9zc2wva3NzbF9sY2wuaAppbmRleCA0Y2Q4ZGQyLi5jMDM5YzkxIDEwMDY0NAotLS0gYS9zc2wva3NzbF9sY2wuaAorKysgYi9zc2wva3NzbF9sY2wuaApAQCAtNzUsNyArNzUsNyBAQAogY2hhciAqa3N0cmluZyhjaGFyICpzdHJpbmcpOwogY2hhciAqa251bWJlcihpbnQgbGVuLCBrcmI1X29jdGV0ICpjb250ZW50cyk7CiAKLUVWUF9DSVBIRVIgKmtzc2xfbWFwX2VuYyhrcmI1X2VuY3R5cGUgZW5jdHlwZSk7Citjb25zdCBFVlBfQ0lQSEVSICprc3NsX21hcF9lbmMoa3JiNV9lbmN0eXBlIGVuY3R5cGUpOwogCiBpbnQga3NzbF9rZXl0YWJfaXNfYXZhaWxhYmxlKEtTU0xfQ1RYICprc3NsX2N0eCk7CiBpbnQga3NzbF90Z3RfaXNfYXZhaWxhYmxlKEtTU0xfQ1RYICprc3NsX2N0eCk7CmRpZmYgLS1naXQgYS9zc2wvczIzX2NsbnQuYyBiL3NzbC9zMjNfY2xudC5jCmluZGV4IGRlMDIzODkuLmM0ZDhiZjIgMTAwNjQ0Ci0tLSBhL3NzbC9zMjNfY2xudC5jCisrKyBiL3NzbC9zMjNfY2xudC5jCkBAIC01NSw2ICs1NSw1OSBAQAogICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQogICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorICoKKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKyAqCisgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKyAqCisgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisgKiAgICBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZworICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQorICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisgKgorICovCiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgInNzbF9sb2NsLmgiCkBAIC02MywxMCArMTE2LDEwIEBACiAjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KIAotc3RhdGljIFNTTF9NRVRIT0QgKnNzbDIzX2dldF9jbGllbnRfbWV0aG9kKGludCB2ZXIpOworc3RhdGljIGNvbnN0IFNTTF9NRVRIT0QgKnNzbDIzX2dldF9jbGllbnRfbWV0aG9kKGludCB2ZXIpOwogc3RhdGljIGludCBzc2wyM19jbGllbnRfaGVsbG8oU1NMICpzKTsKIHN0YXRpYyBpbnQgc3NsMjNfZ2V0X3NlcnZlcl9oZWxsbyhTU0wgKnMpOwotc3RhdGljIFNTTF9NRVRIT0QgKnNzbDIzX2dldF9jbGllbnRfbWV0aG9kKGludCB2ZXIpCitzdGF0aWMgY29uc3QgU1NMX01FVEhPRCAqc3NsMjNfZ2V0X2NsaWVudF9tZXRob2QoaW50IHZlcikKIAl7CiAjaWZuZGVmIE9QRU5TU0xfTk9fU1NMMgogCWlmICh2ZXIgPT0gU1NMMl9WRVJTSU9OKQpAQCAtMTk3LDYgKzI1MCwyMCBAQAogCXJldHVybihyZXQpOwogCX0KIAorc3RhdGljIGludCBzc2wyM19ub19zc2wyX2NpcGhlcnMoU1NMICpzKQorCXsKKwlTU0xfQ0lQSEVSICpjaXBoZXI7CisJU1RBQ0tfT0YoU1NMX0NJUEhFUikgKmNpcGhlcnM7CisJaW50IGk7CisJY2lwaGVycyA9IFNTTF9nZXRfY2lwaGVycyhzKTsKKwlmb3IgKGkgPSAwOyBpIDwgc2tfU1NMX0NJUEhFUl9udW0oY2lwaGVycyk7IGkrKykKKwkJeworCQljaXBoZXIgPSBza19TU0xfQ0lQSEVSX3ZhbHVlKGNpcGhlcnMsIGkpOworCQlpZiAoY2lwaGVyLT5hbGdvcml0aG1fc3NsID09IFNTTF9TU0xWMikKKwkJCXJldHVybiAwOworCQl9CisJcmV0dXJuIDE7CisJfQogCiBzdGF0aWMgaW50IHNzbDIzX2NsaWVudF9oZWxsbyhTU0wgKnMpCiAJewpAQCAtMjE0LDYgKzI4MSw5IEBACiAKIAlzc2wyX2NvbXBhdCA9IChzLT5vcHRpb25zICYgU1NMX09QX05PX1NTTHYyKSA/IDAgOiAxOwogCisJaWYgKHNzbDJfY29tcGF0ICYmIHNzbDIzX25vX3NzbDJfY2lwaGVycyhzKSkKKwkJc3NsMl9jb21wYXQgPSAwOworCiAJaWYgKCEocy0+b3B0aW9ucyAmIFNTTF9PUF9OT19UTFN2MSkpCiAJCXsKIAkJdmVyc2lvbiA9IFRMUzFfVkVSU0lPTjsKQEAgLTIyNiw3ICsyOTYsNyBAQAogCQl7CiAJCXZlcnNpb24gPSBTU0wyX1ZFUlNJT047CiAJCX0KLSNpZm5kZWYgT1BFTlNTTF9OT19UTFNFWFQgCisjaWZuZGVmIE9QRU5TU0xfTk9fVExTRVhUCiAJaWYgKHZlcnNpb24gIT0gU1NMMl9WRVJTSU9OKQogCQl7CiAJCS8qIGhhdmUgdG8gZGlzYWJsZSBTU0wgMi4wIGNvbXBhdGliaWxpdHkgaWYgd2UgbmVlZCBUTFMgZXh0ZW5zaW9ucyAqLwpAQCAtMjM1LDYgKzMwNSwxMCBAQAogCQkJc3NsMl9jb21wYXQgPSAwOwogCQlpZiAocy0+dGxzZXh0X3N0YXR1c190eXBlICE9IC0xKQogCQkJc3NsMl9jb21wYXQgPSAwOworI2lmZGVmIFRMU0VYVF9UWVBFX29wYXF1ZV9wcmZfaW5wdXQKKwkJaWYgKHMtPmN0eC0+dGxzZXh0X29wYXF1ZV9wcmZfaW5wdXRfY2FsbGJhY2sgIT0gMCB8fCBzLT50bHNleHRfb3BhcXVlX3ByZl9pbnB1dCAhPSBOVUxMKQorCQkJc3NsMl9jb21wYXQgPSAwOworI2VuZGlmCiAJCX0KICNlbmRpZgogCkBAIC0yNjAsMTQgKzMzNCw2IEBACiAJCQl2ZXJzaW9uX21ham9yID0gVExTMV9WRVJTSU9OX01BSk9SOwogCQkJdmVyc2lvbl9taW5vciA9IFRMUzFfVkVSU0lPTl9NSU5PUjsKIAkJCX0KLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLQkJZWxzZSBpZihGSVBTX21vZGUoKSkKLQkJCXsKLQkJCVNTTGVycihTU0xfRl9TU0wyM19DTElFTlRfSEVMTE8sCi0JCQkJCVNTTF9SX09OTFlfVExTX0FMTE9XRURfSU5fRklQU19NT0RFKTsKLQkJCXJldHVybiAtMTsKLQkJCX0KLSNlbmRpZgogCQllbHNlIGlmICh2ZXJzaW9uID09IFNTTDNfVkVSU0lPTikKIAkJCXsKIAkJCXZlcnNpb25fbWFqb3IgPSBTU0wzX1ZFUlNJT05fTUFKT1I7CkBAIC0zMjEsNiArMzg3LDEwIEBACiAJCQkJY2hfbGVuPVNTTDJfTUFYX0NIQUxMRU5HRV9MRU5HVEg7CiAKIAkJCS8qIHdyaXRlIG91dCBzc2x2MiBjaGFsbGVuZ2UgKi8KKwkJCS8qIE5vdGUgdGhhdCBjaF9sZW4gbXVzdCBiZSA8PSBTU0wzX1JBTkRPTV9TSVpFICgzMiksCisJCQkgICBiZWNhdXNlIGl0IGlzIG9uZSBvZiBTU0wyX01BWF9DSEFMTEVOR0VfTEVOR1RIICgzMikKKwkJCSAgIG9yIFNTTDJfTUFYX0NIQUxMRU5HRV9MRU5HVEggKDE2KSwgYnV0IGxlYXZlIHRoZQorCQkJICAgY2hlY2sgaW4gZm9yIGZ1dHVycHJvb2ZpbmcgKi8KIAkJCWlmIChTU0wzX1JBTkRPTV9TSVpFIDwgY2hfbGVuKQogCQkJCWk9U1NMM19SQU5ET01fU0laRTsKIAkJCWVsc2UKQEAgLTM3MSw3ICs0NDEsMTEgQEAKIAkJCXArPWk7CiAKIAkJCS8qIENPTVBSRVNTSU9OICovCi0JCQlpZiAocy0+Y3R4LT5jb21wX21ldGhvZHMgPT0gTlVMTCkKKyNpZmRlZiBPUEVOU1NMX05PX0NPTVAKKwkJCSoocCsrKT0xOworI2Vsc2UKKwkJCWlmICgocy0+b3B0aW9ucyAmIFNTTF9PUF9OT19DT01QUkVTU0lPTikKKwkJCQkJCXx8ICFzLT5jdHgtPmNvbXBfbWV0aG9kcykKIAkJCQlqPTA7CiAJCQllbHNlCiAJCQkJaj1za19TU0xfQ09NUF9udW0ocy0+Y3R4LT5jb21wX21ldGhvZHMpOwpAQCAtMzgxLDggKzQ1NSwxNiBAQAogCQkJCWNvbXA9c2tfU1NMX0NPTVBfdmFsdWUocy0+Y3R4LT5jb21wX21ldGhvZHMsaSk7CiAJCQkJKihwKyspPWNvbXAtPmlkOwogCQkJCX0KKyNlbmRpZgogCQkJKihwKyspPTA7IC8qIEFkZCB0aGUgTlVMTCBtZXRob2QgKi8KKwogI2lmbmRlZiBPUEVOU1NMX05PX1RMU0VYVAorCQkJLyogVExTIGV4dGVuc2lvbnMqLworCQkJaWYgKHNzbF9wcmVwYXJlX2NsaWVudGhlbGxvX3Rsc2V4dChzKSA8PSAwKQorCQkJCXsKKwkJCQlTU0xlcnIoU1NMX0ZfU1NMMjNfQ0xJRU5UX0hFTExPLFNTTF9SX0NMSUVOVEhFTExPX1RMU0VYVCk7CisJCQkJcmV0dXJuIC0xOworCQkJCX0KIAkJCWlmICgocCA9IHNzbF9hZGRfY2xpZW50aGVsbG9fdGxzZXh0KHMsIHAsIGJ1ZitTU0wzX1JUX01BWF9QTEFJTl9MRU5HVEgpKSA9PSBOVUxMKQogCQkJCXsKIAkJCQlTU0xlcnIoU1NMX0ZfU1NMMjNfQ0xJRU5UX0hFTExPLEVSUl9SX0lOVEVSTkFMX0VSUk9SKTsKQEAgLTM5MSw3ICs0NzMsNiBAQAogI2VuZGlmCiAJCQkKIAkJCWwgPSBwLWQ7Ci0JCQkqcCA9IDQyOwogCiAJCQkvKiBmaWxsIGluIDQtYnl0ZSBoYW5kc2hha2UgaGVhZGVyICovCiAJCQlkPSYoYnVmWzVdKTsKQEAgLTQ4Niw2ICs1NjcsMTAgQEAKIAkJCWNoX2xlbj1TU0wyX01BWF9DSEFMTEVOR0VfTEVOR1RIOwogCiAJCS8qIHdyaXRlIG91dCBzc2x2MiBjaGFsbGVuZ2UgKi8KKwkJLyogTm90ZSB0aGF0IGNoX2xlbiBtdXN0IGJlIDw9IFNTTDNfUkFORE9NX1NJWkUgKDMyKSwgYmVjYXVzZQorCQkgICBpdCBpcyBvbmUgb2YgU1NMMl9NQVhfQ0hBTExFTkdFX0xFTkdUSCAoMzIpIG9yCisJCSAgIFNTTDJfTUFYX0NIQUxMRU5HRV9MRU5HVEggKDE2KSwgYnV0IGxlYXZlIHRoZSBjaGVjayBpbiBmb3IKKwkJICAgZnV0dXJwcm9vZmluZyAqLwogCQlpPShTU0wzX1JBTkRPTV9TSVpFIDwgY2hfbGVuKQogCQkJP1NTTDNfUkFORE9NX1NJWkU6Y2hfbGVuOwogCQlzLT5zMi0+Y2hhbGxlbmdlX2xlbmd0aD1pOwpAQCAtNTA2LDcgKzU5MSw3IEBACiAJCQkvKiB1c2Ugc3BlY2lhbCBwYWRkaW5nIChTU0wgMy4wIGRyYWZ0L1JGQyAyMjQ2LCBBcHAuIEUuMikgKi8KIAkJCXMtPnMyLT5zc2wyX3JvbGxiYWNrPTE7CiAKLQkJLyogc2V0dXAgdGhlIDUgYnl0ZXMgd2UgaGF2ZSByZWFkIHNvIHdlIGdldCB0aGVtIGZyb20KKwkJLyogc2V0dXAgdGhlIDcgYnl0ZXMgd2UgaGF2ZSByZWFkIHNvIHdlIGdldCB0aGVtIGZyb20KIAkJICogdGhlIHNzbHYyIGJ1ZmZlciAqLwogCQlzLT5yc3RhdGU9U1NMX1NUX1JFQURfSEVBREVSOwogCQlzLT5wYWNrZXRfbGVuZ3RoPW47CkBAIC01MjIsMzkgKzYwNywxNiBAQAogCQlzLT5oYW5kc2hha2VfZnVuYz1zLT5tZXRob2QtPnNzbF9jb25uZWN0OwogI2VuZGlmCiAJCX0KLQllbHNlIGlmICgocFswXSA9PSBTU0wzX1JUX0hBTkRTSEFLRSkgJiYKLQkJIChwWzFdID09IFNTTDNfVkVSU0lPTl9NQUpPUikgJiYKLQkJICgocFsyXSA9PSBTU0wzX1ZFUlNJT05fTUlOT1IpIHx8Ci0JCSAgKHBbMl0gPT0gVExTMV9WRVJTSU9OX01JTk9SKSkgJiYKLQkJIChwWzVdID09IFNTTDNfTVRfU0VSVkVSX0hFTExPKSkKKwllbHNlIGlmIChwWzFdID09IFNTTDNfVkVSU0lPTl9NQUpPUiAmJgorCSAgICAgICAgIChwWzJdID09IFNTTDNfVkVSU0lPTl9NSU5PUiB8fCBwWzJdID09IFRMUzFfVkVSU0lPTl9NSU5PUikgJiYKKwkgICAgICAgICAoKHBbMF0gPT0gU1NMM19SVF9IQU5EU0hBS0UgJiYgcFs1XSA9PSBTU0wzX01UX1NFUlZFUl9IRUxMTykgfHwKKwkgICAgICAgICAgKHBbMF0gPT0gU1NMM19SVF9BTEVSVCAmJiBwWzNdID09IDAgJiYgcFs0XSA9PSAyKSkpCiAJCXsKLQkJLyogd2UgaGF2ZSBzc2x2MyBvciB0bHMxICovCi0KLQkJaWYgKCFzc2xfaW5pdF93YmlvX2J1ZmZlcihzLDEpKSBnb3RvIGVycjsKLQotCQkvKiB3ZSBhcmUgaW4gdGhpcyBzdGF0ZSAqLwotCQlzLT5zdGF0ZT1TU0wzX1NUX0NSX1NSVlJfSEVMTE9fQTsKLQotCQkvKiBwdXQgdGhlIDUgYnl0ZXMgd2UgaGF2ZSByZWFkIGludG8gdGhlIGlucHV0IGJ1ZmZlcgotCQkgKiBmb3IgU1NMdjMgKi8KLQkJcy0+cnN0YXRlPVNTTF9TVF9SRUFEX0hFQURFUjsKLQkJcy0+cGFja2V0X2xlbmd0aD1uOwotCQlzLT5wYWNrZXQ9ICYocy0+czMtPnJidWYuYnVmWzBdKTsKLQkJbWVtY3B5KHMtPnBhY2tldCxidWYsbik7Ci0JCXMtPnMzLT5yYnVmLmxlZnQ9bjsKLQkJcy0+czMtPnJidWYub2Zmc2V0PTA7CisJCS8qIHdlIGhhdmUgc3NsdjMgb3IgdGxzMSAoc2VydmVyIGhlbGxvIG9yIGFsZXJ0KSAqLwogCiAJCWlmICgocFsyXSA9PSBTU0wzX1ZFUlNJT05fTUlOT1IpICYmCiAJCQkhKHMtPm9wdGlvbnMgJiBTU0xfT1BfTk9fU1NMdjMpKQogCQkJewotI2lmZGVmIE9QRU5TU0xfRklQUwotCQkJaWYoRklQU19tb2RlKCkpCi0JCQkJewotCQkJCVNTTGVycihTU0xfRl9TU0wyM19HRVRfU0VSVkVSX0hFTExPLAotCQkJCQlTU0xfUl9PTkxZX1RMU19BTExPV0VEX0lOX0ZJUFNfTU9ERSk7Ci0JCQkJZ290byBlcnI7Ci0JCQkJfQotI2VuZGlmCiAJCQlzLT52ZXJzaW9uPVNTTDNfVkVSU0lPTjsKIAkJCXMtPm1ldGhvZD1TU0x2M19jbGllbnRfbWV0aG9kKCk7CiAJCQl9CkBAIC01NjksMzUgKzYzMSw1MiBAQAogCQkJU1NMZXJyKFNTTF9GX1NTTDIzX0dFVF9TRVJWRVJfSEVMTE8sU1NMX1JfVU5TVVBQT1JURURfUFJPVE9DT0wpOwogCQkJZ290byBlcnI7CiAJCQl9Ci0JCQkKLQkJcy0+aGFuZHNoYWtlX2Z1bmM9cy0+bWV0aG9kLT5zc2xfY29ubmVjdDsKLQkJfQotCWVsc2UgaWYgKChwWzBdID09IFNTTDNfUlRfQUxFUlQpICYmCi0JCSAocFsxXSA9PSBTU0wzX1ZFUlNJT05fTUFKT1IpICYmCi0JCSAoKHBbMl0gPT0gU1NMM19WRVJTSU9OX01JTk9SKSB8fAotCQkgIChwWzJdID09IFRMUzFfVkVSU0lPTl9NSU5PUikpICYmCi0JCSAocFszXSA9PSAwKSAmJgotCQkgKHBbNF0gPT0gMikpCi0JCXsKLQkJdm9pZCAoKmNiKShjb25zdCBTU0wgKnNzbCxpbnQgdHlwZSxpbnQgdmFsKT1OVUxMOwotCQlpbnQgajsKIAotCQkvKiBBbiBhbGVydCAqLwotCQlpZiAocy0+aW5mb19jYWxsYmFjayAhPSBOVUxMKQotCQkJY2I9cy0+aW5mb19jYWxsYmFjazsKLQkJZWxzZSBpZiAocy0+Y3R4LT5pbmZvX2NhbGxiYWNrICE9IE5VTEwpCi0JCQljYj1zLT5jdHgtPmluZm9fY2FsbGJhY2s7Ci0gCi0JCWk9cFs1XTsKLQkJaWYgKGNiICE9IE5VTEwpCisJCWlmIChwWzBdID09IFNTTDNfUlRfQUxFUlQgJiYgcFs1XSAhPSBTU0wzX0FMX1dBUk5JTkcpCiAJCQl7Ci0JCQlqPShpPDw4KXxwWzZdOwotCQkJY2IocyxTU0xfQ0JfUkVBRF9BTEVSVCxqKTsKKwkJCS8qIGZhdGFsIGFsZXJ0ICovCisKKwkJCXZvaWQgKCpjYikoY29uc3QgU1NMICpzc2wsaW50IHR5cGUsaW50IHZhbCk9TlVMTDsKKwkJCWludCBqOworCisJCQlpZiAocy0+aW5mb19jYWxsYmFjayAhPSBOVUxMKQorCQkJCWNiPXMtPmluZm9fY2FsbGJhY2s7CisJCQllbHNlIGlmIChzLT5jdHgtPmluZm9fY2FsbGJhY2sgIT0gTlVMTCkKKwkJCQljYj1zLT5jdHgtPmluZm9fY2FsbGJhY2s7CisgCisJCQlpPXBbNV07CisJCQlpZiAoY2IgIT0gTlVMTCkKKwkJCQl7CisJCQkJaj0oaTw8OCl8cFs2XTsKKwkJCQljYihzLFNTTF9DQl9SRUFEX0FMRVJULGopOworCQkJCX0KKwkJCQorCQkJaWYgKHMtPm1zZ19jYWxsYmFjaykKKwkJCQlzLT5tc2dfY2FsbGJhY2soMCwgcy0+dmVyc2lvbiwgU1NMM19SVF9BTEVSVCwgcCs1LCAyLCBzLCBzLT5tc2dfY2FsbGJhY2tfYXJnKTsKKworCQkJcy0+cndzdGF0ZT1TU0xfTk9USElORzsKKwkJCVNTTGVycihTU0xfRl9TU0wyM19HRVRfU0VSVkVSX0hFTExPLFNTTF9BRF9SRUFTT05fT0ZGU0VUK3BbNl0pOworCQkJZ290byBlcnI7CiAJCQl9CiAKLQkJcy0+cndzdGF0ZT1TU0xfTk9USElORzsKLQkJU1NMZXJyKFNTTF9GX1NTTDIzX0dFVF9TRVJWRVJfSEVMTE8sU1NMX0FEX1JFQVNPTl9PRkZTRVQrcFs2XSk7Ci0JCWdvdG8gZXJyOworCQlpZiAoIXNzbF9pbml0X3diaW9fYnVmZmVyKHMsMSkpIGdvdG8gZXJyOworCisJCS8qIHdlIGFyZSBpbiB0aGlzIHN0YXRlICovCisJCXMtPnN0YXRlPVNTTDNfU1RfQ1JfU1JWUl9IRUxMT19BOworCisJCS8qIHB1dCB0aGUgNyBieXRlcyB3ZSBoYXZlIHJlYWQgaW50byB0aGUgaW5wdXQgYnVmZmVyCisJCSAqIGZvciBTU0x2MyAqLworCQlzLT5yc3RhdGU9U1NMX1NUX1JFQURfSEVBREVSOworCQlzLT5wYWNrZXRfbGVuZ3RoPW47CisJCWlmIChzLT5zMy0+cmJ1Zi5idWYgPT0gTlVMTCkKKwkJCWlmICghc3NsM19zZXR1cF9yZWFkX2J1ZmZlcihzKSkKKwkJCQlnb3RvIGVycjsKKwkJcy0+cGFja2V0PSAmKHMtPnMzLT5yYnVmLmJ1ZlswXSk7CisJCW1lbWNweShzLT5wYWNrZXQsYnVmLG4pOworCQlzLT5zMy0+cmJ1Zi5sZWZ0PW47CisJCXMtPnMzLT5yYnVmLm9mZnNldD0wOworCisJCXMtPmhhbmRzaGFrZV9mdW5jPXMtPm1ldGhvZC0+c3NsX2Nvbm5lY3Q7CiAJCX0KIAllbHNlCiAJCXsKQEAgLTYxNSw0ICs2OTQsMyBAQAogZXJyOgogCXJldHVybigtMSk7CiAJfQotCmRpZmYgLS1naXQgYS9zc2wvczIzX2xpYi5jIGIvc3NsL3MyM19saWIuYwppbmRleCBmYzI5ODEzLi5lM2ZjZTUzIDEwMDY0NAotLS0gYS9zc2wvczIzX2xpYi5jCisrKyBiL3NzbC9zMjNfbGliLmMKQEAgLTY1LDExICs2NSw2IEBACiAJcmV0dXJuKDMwMCk7CiAJfQogCi1JTVBMRU1FTlRfc3NsMjNfbWV0aF9mdW5jKHNzbHYyM19iYXNlX21ldGhvZCwKLQkJCXNzbF91bmRlZmluZWRfZnVuY3Rpb24sCi0JCQlzc2xfdW5kZWZpbmVkX2Z1bmN0aW9uLAotCQkJc3NsX2JhZF9tZXRob2QpCi0KIGludCBzc2wyM19udW1fY2lwaGVycyh2b2lkKQogCXsKIAlyZXR1cm4oc3NsM19udW1fY2lwaGVycygpCkBAIC03OSw3ICs3NCw3IEBACiAJICAgICk7CiAJfQogCi1TU0xfQ0lQSEVSICpzc2wyM19nZXRfY2lwaGVyKHVuc2lnbmVkIGludCB1KQorY29uc3QgU1NMX0NJUEhFUiAqc3NsMjNfZ2V0X2NpcGhlcih1bnNpZ25lZCBpbnQgdSkKIAl7CiAJdW5zaWduZWQgaW50IHV1PXNzbDNfbnVtX2NpcGhlcnMoKTsKIApAQCAtOTUsOSArOTAsMTAgQEAKIAogLyogVGhpcyBmdW5jdGlvbiBuZWVkcyB0byBjaGVjayBpZiB0aGUgY2lwaGVycyByZXF1aXJlZCBhcmUgYWN0dWFsbHkKICAqIGF2YWlsYWJsZSAqLwotU1NMX0NJUEhFUiAqc3NsMjNfZ2V0X2NpcGhlcl9ieV9jaGFyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnApCitjb25zdCBTU0xfQ0lQSEVSICpzc2wyM19nZXRfY2lwaGVyX2J5X2NoYXIoY29uc3QgdW5zaWduZWQgY2hhciAqcCkKIAl7Ci0JU1NMX0NJUEhFUiBjLCpjcDsKKwlTU0xfQ0lQSEVSIGM7CisJY29uc3QgU1NMX0NJUEhFUiAqY3A7CiAJdW5zaWduZWQgbG9uZyBpZDsKIAlpbnQgbjsKIApkaWZmIC0tZ2l0IGEvc3NsL3MyM19tZXRoLmMgYi9zc2wvczIzX21ldGguYwppbmRleCA5NTBkOWFhLi5jNjA5OWVmIDEwMDY0NAotLS0gYS9zc2wvczIzX21ldGguYworKysgYi9zc2wvczIzX21ldGguYwpAQCAtNjAsOCArNjAsOCBAQAogI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgogI2luY2x1ZGUgInNzbF9sb2NsLmgiCiAKLXN0YXRpYyBTU0xfTUVUSE9EICpzc2wyM19nZXRfbWV0aG9kKGludCB2ZXIpOwotc3RhdGljIFNTTF9NRVRIT0QgKnNzbDIzX2dldF9tZXRob2QoaW50IHZlcikKK3N0YXRpYyBjb25zdCBTU0xfTUVUSE9EICpzc2wyM19nZXRfbWV0aG9kKGludCB2ZXIpOworc3RhdGljIGNvbnN0IFNTTF9NRVRIT0QgKnNzbDIzX2dldF9tZXRob2QoaW50IHZlcikKIAl7CiAjaWZuZGVmIE9QRU5TU0xfTk9fU1NMMgogCWlmICh2ZXIgPT0gU1NMMl9WRVJTSU9OKQpkaWZmIC0tZ2l0IGEvc3NsL3MyM19zcnZyLmMgYi9zc2wvczIzX3NydnIuYwppbmRleCA0MmY3ZGU0Li5lMjI4NzljIDEwMDY0NAotLS0gYS9zc2wvczIzX3NydnIuYworKysgYi9zc2wvczIzX3NydnIuYwpAQCAtNTYsNyArNTYsNyBAQAogICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KICAqLwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAxIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExNiw5ICsxMTYsOSBAQAogI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgogI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CiAKLXN0YXRpYyBTU0xfTUVUSE9EICpzc2wyM19nZXRfc2VydmVyX21ldGhvZChpbnQgdmVyKTsKK3N0YXRpYyBjb25zdCBTU0xfTUVUSE9EICpzc2wyM19nZXRfc2VydmVyX21ldGhvZChpbnQgdmVyKTsKIGludCBzc2wyM19nZXRfY2xpZW50X2hlbGxvKFNTTCAqcyk7Ci1zdGF0aWMgU1NMX01FVEhPRCAqc3NsMjNfZ2V0X3NlcnZlcl9tZXRob2QoaW50IHZlcikKK3N0YXRpYyBjb25zdCBTU0xfTUVUSE9EICpzc2wyM19nZXRfc2VydmVyX21ldGhvZChpbnQgdmVyKQogCXsKICNpZm5kZWYgT1BFTlNTTF9OT19TU0wyCiAJaWYgKHZlciA9PSBTU0wyX1ZFUlNJT04pCkBAIC0zOTMsMTUgKzM5Myw2IEBACiAJCQl9CiAJCX0KIAotI2lmZGVmIE9QRU5TU0xfRklQUwotCWlmIChGSVBTX21vZGUoKSAmJiAocy0+dmVyc2lvbiA8IFRMUzFfVkVSU0lPTikpCi0JCXsKLQkJU1NMZXJyKFNTTF9GX1NTTDIzX0dFVF9DTElFTlRfSEVMTE8sCi0JCQkJCVNTTF9SX09OTFlfVExTX0FMTE9XRURfSU5fRklQU19NT0RFKTsKLQkJZ290byBlcnI7Ci0JCX0KLSNlbmRpZgotCiAJaWYgKHMtPnN0YXRlID09IFNTTDIzX1NUX1NSX0NMTlRfSEVMTE9fQikKIAkJewogCQkvKiB3ZSBoYXZlIFNTTHYzL1RMU3YxIGluIGFuIFNTTHYyIGhlYWRlcgpAQCAtNDM3LDcgKzQyOCw5IEBACiAJCW4ycyhwLHNpbCk7CiAJCW4ycyhwLGNsKTsKIAkJZD0odW5zaWduZWQgY2hhciAqKXMtPmluaXRfYnVmLT5kYXRhOwotCQlpZiAoKGNzbCtzaWwrY2wrMTEpICE9IHMtPnBhY2tldF9sZW5ndGgpCisJCWlmICgoY3NsK3NpbCtjbCsxMSkgIT0gcy0+cGFja2V0X2xlbmd0aCkgLyogV2UgY2FuJ3QgaGF2ZSBUTFMgZXh0ZW5zaW9ucyBpbiBTU0wgMi4wIGZvcm1hdAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIENsaWVudCBIZWxsbywgY2FuIHdlPyBFcnJvciBjb25kaXRpb24gc2hvdWxkIGJlCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogJz4nIG90aGVyd2Vpc2UgKi8KIAkJCXsKIAkJCVNTTGVycihTU0xfRl9TU0wyM19HRVRfQ0xJRU5UX0hFTExPLFNTTF9SX1JFQ09SRF9MRU5HVEhfTUlTTUFUQ0gpOwogCQkJZ290byBlcnI7CkBAIC00ODAsNiArNDczLDE1IEBACiAJCSooZCsrKT0xOwogCQkqKGQrKyk9MDsKIAkJCisjaWYgMAorICAgICAgICAgICAgICAgIC8qIGNvcHkgYW55IHJlbWFpbmluZyBkYXRhIHdpdGggbWF5IGJlIGV4dGVuc2lvbnMgKi8KKwkgICAgICAgIHAgPSBwK2NzbCtzaWwrY2w7CisJCXdoaWxlIChwIDwgIHMtPnBhY2tldCtzLT5wYWNrZXRfbGVuZ3RoKQorCQkJeworCQkJKihkKyspPSoocCsrKTsKKwkJCX0KKyNlbmRpZgorCiAJCWkgPSAoZC0odW5zaWduZWQgY2hhciAqKXMtPmluaXRfYnVmLT5kYXRhKSAtIDQ7CiAJCWwybjMoKGxvbmcpaSwgZF9sZW4pOwogCkBAIC01NTUsNiArNTU3LDEwIEBACiAJCQkgKiBmb3IgU1NMdjMgKi8KIAkJCXMtPnJzdGF0ZT1TU0xfU1RfUkVBRF9IRUFERVI7CiAJCQlzLT5wYWNrZXRfbGVuZ3RoPW47CisJCQlpZiAocy0+czMtPnJidWYuYnVmID09IE5VTEwpCisJCQkJaWYgKCFzc2wzX3NldHVwX3JlYWRfYnVmZmVyKHMpKQorCQkJCQlnb3RvIGVycjsKKwogCQkJcy0+cGFja2V0PSAmKHMtPnMzLT5yYnVmLmJ1ZlswXSk7CiAJCQltZW1jcHkocy0+cGFja2V0LGJ1ZixuKTsKIAkJCXMtPnMzLT5yYnVmLmxlZnQ9bjsKZGlmZiAtLWdpdCBhL3NzbC9zMl9jbG50LmMgYi9zc2wvczJfY2xudC5jCmluZGV4IDc4MjEyOWMuLjAwYWMxNTggMTAwNjQ0Ci0tLSBhL3NzbC9zMl9jbG50LmMKKysrIGIvc3NsL3MyX2NsbnQuYwpAQCAtMTE3LDcgKzExNyw3IEBACiAjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KIAotc3RhdGljIFNTTF9NRVRIT0QgKnNzbDJfZ2V0X2NsaWVudF9tZXRob2QoaW50IHZlcik7CitzdGF0aWMgY29uc3QgU1NMX01FVEhPRCAqc3NsMl9nZXRfY2xpZW50X21ldGhvZChpbnQgdmVyKTsKIHN0YXRpYyBpbnQgZ2V0X3NlcnZlcl9maW5pc2hlZChTU0wgKnMpOwogc3RhdGljIGludCBnZXRfc2VydmVyX3ZlcmlmeShTU0wgKnMpOwogc3RhdGljIGludCBnZXRfc2VydmVyX2hlbGxvKFNTTCAqcyk7CkBAIC0xMjksNyArMTI5LDcgQEAKIAl1bnNpZ25lZCBjaGFyICp0byxpbnQgcGFkZGluZyk7CiAjZGVmaW5lIEJSRUFLCWJyZWFrCiAKLXN0YXRpYyBTU0xfTUVUSE9EICpzc2wyX2dldF9jbGllbnRfbWV0aG9kKGludCB2ZXIpCitzdGF0aWMgY29uc3QgU1NMX01FVEhPRCAqc3NsMl9nZXRfY2xpZW50X21ldGhvZChpbnQgdmVyKQogCXsKIAlpZiAodmVyID09IFNTTDJfVkVSU0lPTikKIAkJcmV0dXJuKFNTTHYyX2NsaWVudF9tZXRob2QoKSk7CkBAIC02MjEsNyArNjIxLDcgQEAKIAlpZiAocy0+c3RhdGUgPT0gU1NMMl9TVF9TRU5EX0NMSUVOVF9NQVNURVJfS0VZX0EpCiAJCXsKIAotCQlpZiAoIXNzbF9jaXBoZXJfZ2V0X2V2cChzLT5zZXNzaW9uLCZjLCZtZCxOVUxMKSkKKwkJaWYgKCFzc2xfY2lwaGVyX2dldF9ldnAocy0+c2Vzc2lvbiwmYywmbWQsTlVMTCxOVUxMLE5VTEwpKQogCQkJewogCQkJc3NsMl9yZXR1cm5fZXJyb3IocyxTU0wyX1BFX05PX0NJUEhFUik7CiAJCQlTU0xlcnIoU1NMX0ZfQ0xJRU5UX01BU1RFUl9LRVksU1NMX1JfUFJPQkxFTVNfTUFQUElOR19DSVBIRVJfRlVOQ1RJT05TKTsKQEAgLTg2Myw4ICs4NjMsMTAgQEAKIAkJRVZQX1NpZ25VcGRhdGUoJmN0eCxzLT5zMi0+a2V5X21hdGVyaWFsLAogCQkJICAgICAgIHMtPnMyLT5rZXlfbWF0ZXJpYWxfbGVuZ3RoKTsKIAkJRVZQX1NpZ25VcGRhdGUoJmN0eCxjZXJ0X2NoLCh1bnNpZ25lZCBpbnQpY2VydF9jaF9sZW4pOwotCQluPWkyZF9YNTA5KHMtPnNlc3Npb24tPnNlc3NfY2VydC0+cGVlcl9rZXktPng1MDksJnApOwotCQlFVlBfU2lnblVwZGF0ZSgmY3R4LGJ1ZiwodW5zaWduZWQgaW50KW4pOworCQlpPWkyZF9YNTA5KHMtPnNlc3Npb24tPnNlc3NfY2VydC0+cGVlcl9rZXktPng1MDksJnApOworCQkvKiBEb24ndCB1cGRhdGUgdGhlIHNpZ25hdHVyZSBpZiBpdCBmYWlscyAtIEZJWE1FOiBwcm9iYWJseSBzaG91bGQgaGFuZGxlIHRoaXMgYmV0dGVyICovCisJCWlmKGkgPiAwKQorCQkJRVZQX1NpZ25VcGRhdGUoJmN0eCxidWYsKHVuc2lnbmVkIGludClpKTsKIAogCQlwPWJ1ZjsKIAkJZD1wKzY7CmRpZmYgLS1naXQgYS9zc2wvczJfZW5jLmMgYi9zc2wvczJfZW5jLmMKaW5kZXggMWY2MmFjZC4uZmYzMzk1ZiAxMDA2NDQKLS0tIGEvc3NsL3MyX2VuYy5jCisrKyBiL3NzbC9zMl9lbmMuYwpAQCAtNjgsMTUgKzY4LDE0IEBACiAJY29uc3QgRVZQX01EICptZDsKIAlpbnQgbnVtOwogCi0JaWYgKCFzc2xfY2lwaGVyX2dldF9ldnAocy0+c2Vzc2lvbiwmYywmbWQsTlVMTCkpCisJaWYgKCFzc2xfY2lwaGVyX2dldF9ldnAocy0+c2Vzc2lvbiwmYywmbWQsTlVMTCxOVUxMLE5VTEwpKQogCQl7CiAJCXNzbDJfcmV0dXJuX2Vycm9yKHMsU1NMMl9QRV9OT19DSVBIRVIpOwogCQlTU0xlcnIoU1NMX0ZfU1NMMl9FTkNfSU5JVCxTU0xfUl9QUk9CTEVNU19NQVBQSU5HX0NJUEhFUl9GVU5DVElPTlMpOwogCQlyZXR1cm4oMCk7CiAJCX0KLQotCXMtPnJlYWRfaGFzaD1tZDsKLQlzLT53cml0ZV9oYXNoPW1kOworCXNzbF9yZXBsYWNlX2hhc2goJnMtPnJlYWRfaGFzaCxtZCk7CisJc3NsX3JlcGxhY2VfaGFzaCgmcy0+d3JpdGVfaGFzaCxtZCk7CiAKIAlpZiAoKHMtPmVuY19yZWFkX2N0eCA9PSBOVUxMKSAmJgogCQkoKHMtPmVuY19yZWFkX2N0eD0oRVZQX0NJUEhFUl9DVFggKikKQEAgLTE3Niw3ICsxNzUsNyBAQAogCiAJLyogVGhlcmUgaGFzIHRvIGJlIGEgTUFDIGFsZ29yaXRobS4gKi8KIAlFVlBfTURfQ1RYX2luaXQoJmMpOwotCUVWUF9EaWdlc3RJbml0X2V4KCZjLCBzLT5yZWFkX2hhc2gsIE5VTEwpOworCUVWUF9NRF9DVFhfY29weSgmYywgcy0+cmVhZF9oYXNoKTsKIAlFVlBfRGlnZXN0VXBkYXRlKCZjLHNlYywKIAkJRVZQX0NJUEhFUl9DVFhfa2V5X2xlbmd0aChzLT5lbmNfcmVhZF9jdHgpKTsKIAlFVlBfRGlnZXN0VXBkYXRlKCZjLGFjdCxsZW4pOyAKZGlmZiAtLWdpdCBhL3NzbC9zMl9saWIuYyBiL3NzbC9zMl9saWIuYwppbmRleCAxMDc1MWIyLi45OTE0NjA0IDEwMDY0NAotLS0gYS9zc2wvczJfbGliLmMKKysrIGIvc3NsL3MyX2xpYi5jCkBAIC01NSw2ICs1NSw1OSBAQAogICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQogICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorICoKKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKyAqCisgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKyAqCisgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisgKiAgICBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZworICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQorICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisgKgorICovCiAKICNpbmNsdWRlICJzc2xfbG9jbC5oIgogI2lmbmRlZiBPUEVOU1NMX05PX1NTTDIKQEAgLTY4LDE0MyArMTIxLDE3MiBAQAogI2RlZmluZSBTU0wyX05VTV9DSVBIRVJTIChzaXplb2Yoc3NsMl9jaXBoZXJzKS9zaXplb2YoU1NMX0NJUEhFUikpCiAKIC8qIGxpc3Qgb2YgYXZhaWxhYmxlIFNTTHYyIGNpcGhlcnMgKHNvcnRlZCBieSBpZCkgKi8KLU9QRU5TU0xfR0xPQkFMIFNTTF9DSVBIRVIgc3NsMl9jaXBoZXJzW109ewotLyogTlVMTF9XSVRIX01ENSB2MyAqLworT1BFTlNTTF9HTE9CQUwgY29uc3QgU1NMX0NJUEhFUiBzc2wyX2NpcGhlcnNbXT17CiAjaWYgMAorLyogTlVMTF9XSVRIX01ENSB2MyAqLwogCXsKIAkxLAogCVNTTDJfVFhUX05VTExfV0lUSF9NRDUsCiAJU1NMMl9DS19OVUxMX1dJVEhfTUQ1LAotCVNTTF9rUlNBfFNTTF9hUlNBfFNTTF9lTlVMTHxTU0xfTUQ1fFNTTF9TU0xWMiwKKwlTU0xfa1JTQSwKKwlTU0xfYVJTQSwKKwlTU0xfZU5VTEwsCisJU1NMX01ENSwKKwlTU0xfU1NMVjIsCiAJU1NMX0VYUE9SVHxTU0xfRVhQNDB8U1NMX1NUUk9OR19OT05FLAogCTAsCiAJMCwKIAkwLAotCVNTTF9BTExfQ0lQSEVSUywKLQlTU0xfQUxMX1NUUkVOR1RIUywKIAl9LAogI2VuZGlmCisKIC8qIFJDNF8xMjhfV0lUSF9NRDUgKi8KIAl7CiAJMSwKIAlTU0wyX1RYVF9SQzRfMTI4X1dJVEhfTUQ1LAogCVNTTDJfQ0tfUkM0XzEyOF9XSVRIX01ENSwKLQlTU0xfa1JTQXxTU0xfYVJTQXxTU0xfUkM0fFNTTF9NRDV8U1NMX1NTTFYyLAorCVNTTF9rUlNBLAorCVNTTF9hUlNBLAorCVNTTF9SQzQsCisJU1NMX01ENSwKKwlTU0xfU1NMVjIsCiAJU1NMX05PVF9FWFB8U1NMX01FRElVTSwKIAkwLAogCTEyOCwKIAkxMjgsCi0JU1NMX0FMTF9DSVBIRVJTLAotCVNTTF9BTExfU1RSRU5HVEhTLAogCX0sCisKIC8qIFJDNF8xMjhfRVhQT1JUNDBfV0lUSF9NRDUgKi8KIAl7CiAJMSwKIAlTU0wyX1RYVF9SQzRfMTI4X0VYUE9SVDQwX1dJVEhfTUQ1LAogCVNTTDJfQ0tfUkM0XzEyOF9FWFBPUlQ0MF9XSVRIX01ENSwKLQlTU0xfa1JTQXxTU0xfYVJTQXxTU0xfUkM0fFNTTF9NRDV8U1NMX1NTTFYyLAorCVNTTF9rUlNBLAorCVNTTF9hUlNBLAorCVNTTF9SQzQsCisJU1NMX01ENSwKKwlTU0xfU1NMVjIsCiAJU1NMX0VYUE9SVHxTU0xfRVhQNDAsCiAJU1NMMl9DRl81X0JZVEVfRU5DLAogCTQwLAogCTEyOCwKLQlTU0xfQUxMX0NJUEhFUlMsCi0JU1NMX0FMTF9TVFJFTkdUSFMsCiAJfSwKKwogLyogUkMyXzEyOF9DQkNfV0lUSF9NRDUgKi8KIAl7CiAJMSwKIAlTU0wyX1RYVF9SQzJfMTI4X0NCQ19XSVRIX01ENSwKIAlTU0wyX0NLX1JDMl8xMjhfQ0JDX1dJVEhfTUQ1LAotCVNTTF9rUlNBfFNTTF9hUlNBfFNTTF9SQzJ8U1NMX01ENXxTU0xfU1NMVjIsCisJU1NMX2tSU0EsCisJU1NMX2FSU0EsCisJU1NMX1JDMiwKKwlTU0xfTUQ1LAorCVNTTF9TU0xWMiwKIAlTU0xfTk9UX0VYUHxTU0xfTUVESVVNLAogCTAsCiAJMTI4LAogCTEyOCwKLQlTU0xfQUxMX0NJUEhFUlMsCi0JU1NMX0FMTF9TVFJFTkdUSFMsCiAJfSwKKwogLyogUkMyXzEyOF9DQkNfRVhQT1JUNDBfV0lUSF9NRDUgKi8KIAl7CiAJMSwKIAlTU0wyX1RYVF9SQzJfMTI4X0NCQ19FWFBPUlQ0MF9XSVRIX01ENSwKIAlTU0wyX0NLX1JDMl8xMjhfQ0JDX0VYUE9SVDQwX1dJVEhfTUQ1LAotCVNTTF9rUlNBfFNTTF9hUlNBfFNTTF9SQzJ8U1NMX01ENXxTU0xfU1NMVjIsCisJU1NMX2tSU0EsCisJU1NMX2FSU0EsCisJU1NMX1JDMiwKKwlTU0xfTUQ1LAorCVNTTF9TU0xWMiwKIAlTU0xfRVhQT1JUfFNTTF9FWFA0MCwKIAlTU0wyX0NGXzVfQllURV9FTkMsCiAJNDAsCiAJMTI4LAotCVNTTF9BTExfQ0lQSEVSUywKLQlTU0xfQUxMX1NUUkVOR1RIUywKIAl9LAotLyogSURFQV8xMjhfQ0JDX1dJVEhfTUQ1ICovCisKICNpZm5kZWYgT1BFTlNTTF9OT19JREVBCisvKiBJREVBXzEyOF9DQkNfV0lUSF9NRDUgKi8KIAl7CiAJMSwKIAlTU0wyX1RYVF9JREVBXzEyOF9DQkNfV0lUSF9NRDUsCiAJU1NMMl9DS19JREVBXzEyOF9DQkNfV0lUSF9NRDUsCi0JU1NMX2tSU0F8U1NMX2FSU0F8U1NMX0lERUF8U1NMX01ENXxTU0xfU1NMVjIsCisJU1NMX2tSU0EsCisJU1NMX2FSU0EsCisJU1NMX0lERUEsCisJU1NMX01ENSwKKwlTU0xfU1NMVjIsCiAJU1NMX05PVF9FWFB8U1NMX01FRElVTSwKIAkwLAogCTEyOCwKIAkxMjgsCi0JU1NMX0FMTF9DSVBIRVJTLAotCVNTTF9BTExfU1RSRU5HVEhTLAogCX0sCiAjZW5kaWYKKwogLyogREVTXzY0X0NCQ19XSVRIX01ENSAqLwogCXsKIAkxLAogCVNTTDJfVFhUX0RFU182NF9DQkNfV0lUSF9NRDUsCiAJU1NMMl9DS19ERVNfNjRfQ0JDX1dJVEhfTUQ1LAotCVNTTF9rUlNBfFNTTF9hUlNBfFNTTF9ERVN8U1NMX01ENXxTU0xfU1NMVjIsCisJU1NMX2tSU0EsCisJU1NMX2FSU0EsCisJU1NMX0RFUywKKwlTU0xfTUQ1LAorCVNTTF9TU0xWMiwKIAlTU0xfTk9UX0VYUHxTU0xfTE9XLAogCTAsCiAJNTYsCiAJNTYsCi0JU1NMX0FMTF9DSVBIRVJTLAotCVNTTF9BTExfU1RSRU5HVEhTLAogCX0sCisKIC8qIERFU18xOTJfRURFM19DQkNfV0lUSF9NRDUgKi8KIAl7CiAJMSwKIAlTU0wyX1RYVF9ERVNfMTkyX0VERTNfQ0JDX1dJVEhfTUQ1LAogCVNTTDJfQ0tfREVTXzE5Ml9FREUzX0NCQ19XSVRIX01ENSwKLQlTU0xfa1JTQXxTU0xfYVJTQXxTU0xfM0RFU3xTU0xfTUQ1fFNTTF9TU0xWMiwKKwlTU0xfa1JTQSwKKwlTU0xfYVJTQSwKKwlTU0xfM0RFUywKKwlTU0xfTUQ1LAorCVNTTF9TU0xWMiwKIAlTU0xfTk9UX0VYUHxTU0xfSElHSCwKIAkwLAogCTE2OCwKIAkxNjgsCi0JU1NMX0FMTF9DSVBIRVJTLAotCVNTTF9BTExfU1RSRU5HVEhTLAogCX0sCi0vKiBSQzRfNjRfV0lUSF9NRDUgKi8KKwogI2lmIDAKKy8qIFJDNF82NF9XSVRIX01ENSAqLwogCXsKIAkxLAogCVNTTDJfVFhUX1JDNF82NF9XSVRIX01ENSwKIAlTU0wyX0NLX1JDNF82NF9XSVRIX01ENSwKLQlTU0xfa1JTQXxTU0xfYVJTQXxTU0xfUkM0fFNTTF9NRDV8U1NMX1NTTFYyLAorCVNTTF9rUlNBLAorCVNTTF9hUlNBLAorCVNTTF9SQzQsCisJU1NMX01ENSwKKwlTU0xfU1NMVjIsCiAJU1NMX05PVF9FWFB8U1NMX0xPVywKIAlTU0wyX0NGXzhfQllURV9FTkMsCiAJNjQsCiAJNjQsCi0JU1NMX0FMTF9DSVBIRVJTLAotCVNTTF9BTExfU1RSRU5HVEhTLAogCX0sCiAjZW5kaWYKLS8qIE5VTEwgU1NMZWF5ICh0ZXN0aW5nKSAqLworCiAjaWYgMAorLyogTlVMTCBTU0xlYXkgKHRlc3RpbmcpICovCiAJewkKIAkwLAogCVNTTDJfVFhUX05VTEwsCiAJU1NMMl9DS19OVUxMLAogCTAsCisJMCwKKwkwLAorCTAsCisJU1NMX1NTTFYyLAogCVNTTF9TVFJPTkdfTk9ORSwKIAkwLAogCTAsCiAJMCwKLQlTU0xfQUxMX0NJUEhFUlMsCi0JU1NMX0FMTF9TVFJFTkdUSFMsCiAJfSwKICNlbmRpZgogCkBAIC0yMTYsMTcgKzI5OCwxMiBAQAogCXJldHVybigzMDApOwogCX0KIAotSU1QTEVNRU5UX3NzbDJfbWV0aF9mdW5jKHNzbHYyX2Jhc2VfbWV0aG9kLAotCQkJc3NsX3VuZGVmaW5lZF9mdW5jdGlvbiwKLQkJCXNzbF91bmRlZmluZWRfZnVuY3Rpb24sCi0JCQlzc2xfYmFkX21ldGhvZCkKLQogaW50IHNzbDJfbnVtX2NpcGhlcnModm9pZCkKIAl7CiAJcmV0dXJuKFNTTDJfTlVNX0NJUEhFUlMpOwogCX0KIAotU1NMX0NJUEhFUiAqc3NsMl9nZXRfY2lwaGVyKHVuc2lnbmVkIGludCB1KQorY29uc3QgU1NMX0NJUEhFUiAqc3NsMl9nZXRfY2lwaGVyKHVuc2lnbmVkIGludCB1KQogCXsKIAlpZiAodSA8IFNTTDJfTlVNX0NJUEhFUlMpCiAJCXJldHVybigmKHNzbDJfY2lwaGVyc1tTU0wyX05VTV9DSVBIRVJTLTEtdV0pKTsKQEAgLTMzNywxOCArNDE0LDE2IEBACiAKIC8qIFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gY2hlY2sgaWYgdGhlIGNpcGhlcnMgcmVxdWlyZWQgYXJlIGFjdHVhbGx5CiAgKiBhdmFpbGFibGUgKi8KLVNTTF9DSVBIRVIgKnNzbDJfZ2V0X2NpcGhlcl9ieV9jaGFyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnApCitjb25zdCBTU0xfQ0lQSEVSICpzc2wyX2dldF9jaXBoZXJfYnlfY2hhcihjb25zdCB1bnNpZ25lZCBjaGFyICpwKQogCXsKLQlTU0xfQ0lQSEVSIGMsKmNwOworCVNTTF9DSVBIRVIgYzsKKwljb25zdCBTU0xfQ0lQSEVSICpjcDsKIAl1bnNpZ25lZCBsb25nIGlkOwogCiAJaWQ9MHgwMjAwMDAwMEx8KCh1bnNpZ25lZCBsb25nKXBbMF08PDE2TCl8CiAJCSgodW5zaWduZWQgbG9uZylwWzFdPDw4TCl8KHVuc2lnbmVkIGxvbmcpcFsyXTsKIAljLmlkPWlkOwotCWNwID0gKFNTTF9DSVBIRVIgKilPQkpfYnNlYXJjaCgoY2hhciAqKSZjLAotCQkoY2hhciAqKXNzbDJfY2lwaGVycywKLQkJU1NMMl9OVU1fQ0lQSEVSUyxzaXplb2YoU1NMX0NJUEhFUiksCi0JCUZQX0lDQyBzc2xfY2lwaGVyX2lkX2NtcCk7CisJY3AgPSBPQkpfYnNlYXJjaF9zc2xfY2lwaGVyX2lkKCZjLCBzc2wyX2NpcGhlcnMsIFNTTDJfTlVNX0NJUEhFUlMpOwogCWlmICgoY3AgPT0gTlVMTCkgfHwgKGNwLT52YWxpZCA9PSAwKSkKIAkJcmV0dXJuIE5VTEw7CiAJZWxzZQpAQCAtMzc3LDYgKzQ1Miw3IEBACiAJdW5zaWduZWQgY2hhciAqa207CiAJdW5zaWduZWQgY2hhciBjPScwJzsKIAljb25zdCBFVlBfTUQgKm1kNTsKKwlpbnQgbWRfc2l6ZTsKIAogCW1kNSA9IEVWUF9tZDUoKTsKIApAQCAtMzkzLDEwICs0NjksMTIgQEAKICAJCVNTTGVycihTU0xfRl9TU0wyX0dFTkVSQVRFX0tFWV9NQVRFUklBTCwgRVJSX1JfSU5URVJOQUxfRVJST1IpOwogIAkJcmV0dXJuIDA7CiAgCQl9Ci0KLQlmb3IgKGk9MDsgaTxzLT5zMi0+a2V5X21hdGVyaWFsX2xlbmd0aDsgaSArPSBFVlBfTURfc2l6ZShtZDUpKQorCW1kX3NpemUgPSBFVlBfTURfc2l6ZShtZDUpOworCWlmIChtZF9zaXplIDwgMCkKKwkgICAgcmV0dXJuIDA7CisJZm9yIChpPTA7IGk8cy0+czItPmtleV9tYXRlcmlhbF9sZW5ndGg7IGkgKz0gbWRfc2l6ZSkKIAkJewotCQlpZiAoKChrbSAtIHMtPnMyLT5rZXlfbWF0ZXJpYWwpICsgRVZQX01EX3NpemUobWQ1KSkgPgorCQlpZiAoKChrbSAtIHMtPnMyLT5rZXlfbWF0ZXJpYWwpICsgbWRfc2l6ZSkgPgogCQkJCShpbnQpc2l6ZW9mKHMtPnMyLT5rZXlfbWF0ZXJpYWwpKQogCQkJewogCQkJLyogRVZQX0RpZ2VzdEZpbmFsX2V4KCkgYmVsb3cgd291bGQgd3JpdGUgYmV5b25kIGJ1ZmZlciAqLwpAQCAtNDE1LDcgKzQ5Myw3IEBACiAJCUVWUF9EaWdlc3RVcGRhdGUoJmN0eCxzLT5zMi0+Y2hhbGxlbmdlLHMtPnMyLT5jaGFsbGVuZ2VfbGVuZ3RoKTsKIAkJRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LHMtPnMyLT5jb25uX2lkLHMtPnMyLT5jb25uX2lkX2xlbmd0aCk7CiAJCUVWUF9EaWdlc3RGaW5hbF9leCgmY3R4LGttLE5VTEwpOwotCQlrbSArPSBFVlBfTURfc2l6ZShtZDUpOworCQlrbSArPSBtZF9zaXplOwogCQl9CiAKIAlFVlBfTURfQ1RYX2NsZWFudXAoJmN0eCk7CmRpZmYgLS1naXQgYS9zc2wvczJfbWV0aC5jIGIvc3NsL3MyX21ldGguYwppbmRleCBhMzVlNDM1Li5mMGU4Y2E1IDEwMDY0NAotLS0gYS9zc2wvczJfbWV0aC5jCisrKyBiL3NzbC9zMl9tZXRoLmMKQEAgLTYxLDggKzYxLDggQEAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgogCi1zdGF0aWMgU1NMX01FVEhPRCAqc3NsMl9nZXRfbWV0aG9kKGludCB2ZXIpOwotc3RhdGljIFNTTF9NRVRIT0QgKnNzbDJfZ2V0X21ldGhvZChpbnQgdmVyKQorc3RhdGljIGNvbnN0IFNTTF9NRVRIT0QgKnNzbDJfZ2V0X21ldGhvZChpbnQgdmVyKTsKK3N0YXRpYyBjb25zdCBTU0xfTUVUSE9EICpzc2wyX2dldF9tZXRob2QoaW50IHZlcikKIAl7CiAJaWYgKHZlciA9PSBTU0wyX1ZFUlNJT04pCiAJCXJldHVybihTU0x2Ml9tZXRob2QoKSk7CkBAIC03MSw5ICs3MSw5IEBACiAJfQogCiBJTVBMRU1FTlRfc3NsMl9tZXRoX2Z1bmMoU1NMdjJfbWV0aG9kLAotCQkJc3NsMl9hY2NlcHQsCi0JCQlzc2wyX2Nvbm5lY3QsCi0JCQlzc2wyX2dldF9tZXRob2QpCisJCQkgc3NsMl9hY2NlcHQsCisJCQkgc3NsMl9jb25uZWN0LAorCQkJIHNzbDJfZ2V0X21ldGhvZCkKIAogI2Vsc2UgLyogIU9QRU5TU0xfTk9fU1NMMiAqLwogCmRpZmYgLS1naXQgYS9zc2wvczJfcGt0LmMgYi9zc2wvczJfcGt0LmMKaW5kZXggYTEwOTI5YS4uYWM5NjNiMiAxMDA2NDQKLS0tIGEvc3NsL3MyX3BrdC5jCisrKyBiL3NzbC9zMl9wa3QuYwpAQCAtMTE2LDcgKzExNiw3IEBACiAjZGVmaW5lIFVTRV9TT0NLRVRTCiAKIHN0YXRpYyBpbnQgcmVhZF9uKFNTTCAqcyx1bnNpZ25lZCBpbnQgbix1bnNpZ25lZCBpbnQgbWF4LHVuc2lnbmVkIGludCBleHRlbmQpOwotc3RhdGljIGludCBkb19zc2xfd3JpdGUoU1NMICpzLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBsZW4pOworc3RhdGljIGludCBuX2RvX3NzbF93cml0ZShTU0wgKnMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbik7CiBzdGF0aWMgaW50IHdyaXRlX3BlbmRpbmcoU1NMICpzLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBsZW4pOwogc3RhdGljIGludCBzc2xfbXRfZXJyb3IoaW50IG4pOwogCkBAIC0xMzAsNyArMTMwLDcgQEAKIAl1bnNpZ25lZCBjaGFyIG1hY1tNQVhfTUFDX1NJWkVdOwogCXVuc2lnbmVkIGNoYXIgKnA7CiAJaW50IGk7Ci0JdW5zaWduZWQgaW50IG1hY19zaXplOworCWludCBtYWNfc2l6ZTsKIAogIHNzbDJfcmVhZF9hZ2FpbjoKIAlpZiAoU1NMX2luX2luaXQocykgJiYgIXMtPmluX2hhbmRzaGFrZSkKQEAgLTI0Niw3ICsyNDYsOSBAQAogCQkJfQogCQllbHNlCiAJCQl7Ci0JCQltYWNfc2l6ZT1FVlBfTURfc2l6ZShzLT5yZWFkX2hhc2gpOworCQkJbWFjX3NpemU9RVZQX01EX0NUWF9zaXplKHMtPnJlYWRfaGFzaCk7CisJCQlpZiAobWFjX3NpemUgPCAwKQorCQkJCXJldHVybiAtMTsKIAkJCU9QRU5TU0xfYXNzZXJ0KG1hY19zaXplIDw9IE1BWF9NQUNfU0laRSk7CiAJCQlzLT5zMi0+bWFjX2RhdGE9cDsKIAkJCXMtPnMyLT5yYWN0X2RhdGE9ICZwW21hY19zaXplXTsKQEAgLTI2MSw3ICsyNjMsNyBAQAogCQkvKiBhZGRlZCBhIGNoZWNrIGZvciBsZW5ndGggPiBtYXhfc2l6ZSBpbiBjYXNlCiAJCSAqIGVuY3J5cHRpb24gd2FzIG5vdCB0dXJuZWQgb24geWV0IGR1ZSB0byBhbiBlcnJvciAqLwogCQlpZiAoKCFzLT5zMi0+Y2xlYXJfdGV4dCkgJiYKLQkJCShzLT5zMi0+cmxlbmd0aCA+PSBtYWNfc2l6ZSkpCisJCQkocy0+czItPnJsZW5ndGggPj0gKHVuc2lnbmVkIGludCltYWNfc2l6ZSkpCiAJCQl7CiAJCQlzc2wyX2VuYyhzLDApOwogCQkJcy0+czItPnJhY3RfZGF0YV9sZW5ndGgtPW1hY19zaXplOwpAQCAtNDQ3LDcgKzQ0OSw3IEBACiAJbj0obGVuLXRvdCk7CiAJZm9yICg7OykKIAkJewotCQlpPWRvX3NzbF93cml0ZShzLCYoYnVmW3RvdF0pLG4pOworCQlpPW5fZG9fc3NsX3dyaXRlKHMsJihidWZbdG90XSksbik7CiAJCWlmIChpIDw9IDApCiAJCQl7CiAJCQlzLT5zMi0+d251bT10b3Q7CkBAIC01MTEsOSArNTEzLDEwIEBACiAJCX0KIAl9CiAKLXN0YXRpYyBpbnQgZG9fc3NsX3dyaXRlKFNTTCAqcywgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKQorc3RhdGljIGludCBuX2RvX3NzbF93cml0ZShTU0wgKnMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbikKIAl7Ci0JdW5zaWduZWQgaW50IGosayxvbGVuLHAsbWFjX3NpemUsYnM7CisJdW5zaWduZWQgaW50IGosayxvbGVuLHAsYnM7CisJaW50IG1hY19zaXplOwogCXJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgKnBwOwogCiAJb2xlbj1sZW47CkBAIC01MjksNyArNTMyLDExIEBACiAJaWYgKHMtPnMyLT5jbGVhcl90ZXh0KQogCQltYWNfc2l6ZT0wOwogCWVsc2UKLQkJbWFjX3NpemU9RVZQX01EX3NpemUocy0+d3JpdGVfaGFzaCk7CisJCXsKKwkJbWFjX3NpemU9RVZQX01EX0NUWF9zaXplKHMtPndyaXRlX2hhc2gpOworCQlpZiAobWFjX3NpemUgPCAwKQorCQkJcmV0dXJuIC0xOworCQl9CiAKIAkvKiBsZXRzIHNldCB0aGUgcGFkIHAgKi8KIAlpZiAocy0+czItPmNsZWFyX3RleHQpCmRpZmYgLS1naXQgYS9zc2wvczJfc3J2ci5jIGIvc3NsL3MyX3NydnIuYwppbmRleCAwMWQ2MmZhLi4xNDM0ZTczIDEwMDY0NAotLS0gYS9zc2wvczJfc3J2ci5jCisrKyBiL3NzbC9zMl9zcnZyLmMKQEAgLTExNyw3ICsxMTcsNyBAQAogI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgogI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CiAKLXN0YXRpYyBTU0xfTUVUSE9EICpzc2wyX2dldF9zZXJ2ZXJfbWV0aG9kKGludCB2ZXIpOworc3RhdGljIGNvbnN0IFNTTF9NRVRIT0QgKnNzbDJfZ2V0X3NlcnZlcl9tZXRob2QoaW50IHZlcik7CiBzdGF0aWMgaW50IGdldF9jbGllbnRfbWFzdGVyX2tleShTU0wgKnMpOwogc3RhdGljIGludCBnZXRfY2xpZW50X2hlbGxvKFNTTCAqcyk7CiBzdGF0aWMgaW50IHNlcnZlcl9oZWxsbyhTU0wgKnMpOyAKQEAgLTEyOSw3ICsxMjksNyBAQAogCXVuc2lnbmVkIGNoYXIgKnRvLGludCBwYWRkaW5nKTsKICNkZWZpbmUgQlJFQUsJYnJlYWsKIAotc3RhdGljIFNTTF9NRVRIT0QgKnNzbDJfZ2V0X3NlcnZlcl9tZXRob2QoaW50IHZlcikKK3N0YXRpYyBjb25zdCBTU0xfTUVUSE9EICpzc2wyX2dldF9zZXJ2ZXJfbWV0aG9kKGludCB2ZXIpCiAJewogCWlmICh2ZXIgPT0gU1NMMl9WRVJTSU9OKQogCQlyZXR1cm4oU1NMdjJfc2VydmVyX21ldGhvZCgpKTsKQEAgLTM2Niw3ICszNjYsNyBAQAogCWludCBpc19leHBvcnQsaSxuLGtleWEsZWs7CiAJdW5zaWduZWQgbG9uZyBsZW47CiAJdW5zaWduZWQgY2hhciAqcDsKLQlTU0xfQ0lQSEVSICpjcDsKKwljb25zdCBTU0xfQ0lQSEVSICpjcDsKIAljb25zdCBFVlBfQ0lQSEVSICpjOwogCWNvbnN0IEVWUF9NRCAqbWQ7CiAKQEAgLTQ1MSw3ICs0NTEsNyBAQAogCiAJaXNfZXhwb3J0PVNTTF9DX0lTX0VYUE9SVChzLT5zZXNzaW9uLT5jaXBoZXIpOwogCQotCWlmICghc3NsX2NpcGhlcl9nZXRfZXZwKHMtPnNlc3Npb24sJmMsJm1kLE5VTEwpKQorCWlmICghc3NsX2NpcGhlcl9nZXRfZXZwKHMtPnNlc3Npb24sJmMsJm1kLE5VTEwsTlVMTCxOVUxMKSkKIAkJewogCQlzc2wyX3JldHVybl9lcnJvcihzLFNTTDJfUEVfTk9fQ0lQSEVSKTsKIAkJU1NMZXJyKFNTTF9GX0dFVF9DTElFTlRfTUFTVEVSX0tFWSxTU0xfUl9QUk9CTEVNU19NQVBQSU5HX0NJUEhFUl9GVU5DVElPTlMpOwpkaWZmIC0tZ2l0IGEvc3NsL3MzX2JvdGguYyBiL3NzbC9zM19ib3RoLmMKaW5kZXggNzNmNjAwMi4uY2IzOTFjZCAxMDA2NDQKLS0tIGEvc3NsL3MzX2JvdGguYworKysgYi9zc2wvczNfYm90aC5jCkBAIC0xNjAsOCArMTYwLDYgQEAKIAkJcD0gJihkWzRdKTsKIAogCQlpPXMtPm1ldGhvZC0+c3NsM19lbmMtPmZpbmFsX2ZpbmlzaF9tYWMocywKLQkJCSYocy0+czMtPmZpbmlzaF9kZ3N0MSksCi0JCQkmKHMtPnMzLT5maW5pc2hfZGdzdDIpLAogCQkJc2VuZGVyLHNsZW4scy0+czMtPnRtcC5maW5pc2hfbWQpOwogCQlzLT5zMy0+dG1wLmZpbmlzaF9tZF9sZW4gPSBpOwogCQltZW1jcHkocCwgcy0+czMtPnRtcC5maW5pc2hfbWQsIGkpOwpAQCAtMzAwLDIxICsyOTgsMjEgQEAKIAogc3RhdGljIGludCBzc2wzX2FkZF9jZXJ0X3RvX2J1ZihCVUZfTUVNICpidWYsIHVuc2lnbmVkIGxvbmcgKmwsIFg1MDkgKngpCiAJewotCQlpbnQgbjsKLQkJdW5zaWduZWQgY2hhciAqcDsKKwlpbnQgbjsKKwl1bnNpZ25lZCBjaGFyICpwOwogCi0JCW49aTJkX1g1MDkoeCxOVUxMKTsKLQkJaWYgKCFCVUZfTUVNX2dyb3dfY2xlYW4oYnVmLChpbnQpKG4rKCpsKSszKSkpCi0JCQl7Ci0JCQkJU1NMZXJyKFNTTF9GX1NTTDNfQUREX0NFUlRfVE9fQlVGLEVSUl9SX0JVRl9MSUIpOwotCQkJCXJldHVybigtMSk7Ci0JCQl9Ci0JCXA9KHVuc2lnbmVkIGNoYXIgKikmKGJ1Zi0+ZGF0YVsqbF0pOwotCQlsMm4zKG4scCk7Ci0JCWkyZF9YNTA5KHgsJnApOwotCQkqbCs9biszOworCW49aTJkX1g1MDkoeCxOVUxMKTsKKwlpZiAoIUJVRl9NRU1fZ3Jvd19jbGVhbihidWYsKGludCkobisoKmwpKzMpKSkKKwkJeworCQlTU0xlcnIoU1NMX0ZfU1NMM19BRERfQ0VSVF9UT19CVUYsRVJSX1JfQlVGX0xJQik7CisJCXJldHVybigtMSk7CisJCX0KKwlwPSh1bnNpZ25lZCBjaGFyICopJihidWYtPmRhdGFbKmxdKTsKKwlsMm4zKG4scCk7CisJaTJkX1g1MDkoeCwmcCk7CisJKmwrPW4rMzsKIAotCQlyZXR1cm4oMCk7CisJcmV0dXJuKDApOwogCX0KIAogdW5zaWduZWQgbG9uZyBzc2wzX291dHB1dF9jZXJ0X2NoYWluKFNTTCAqcywgWDUwOSAqeCkKQEAgLTM1NCw2ICszNTIsOCBAQAogCQkJCXJldHVybigwKTsKIAkJCQl9CiAJCQlYNTA5X3ZlcmlmeV9jZXJ0KCZ4c19jdHgpOworCQkJLyogRG9uJ3QgbGVhdmUgZXJyb3JzIGluIHRoZSBxdWV1ZSAqLworCQkJRVJSX2NsZWFyX2Vycm9yKCk7CiAJCQlmb3IgKGk9MDsgaSA8IHNrX1g1MDlfbnVtKHhzX2N0eC5jaGFpbik7IGkrKykKIAkJCQl7CiAJCQkJeCA9IHNrX1g1MDlfdmFsdWUoeHNfY3R4LmNoYWluLCBpKTsKQEAgLTU1MCw5ICs1NTAsMTYgQEAKIAllbHNlIGlmIChpID09IEVWUF9QS0VZX0VDKQogCQl7CiAJCXJldCA9IFNTTF9QS0VZX0VDQzsKLQkJfQorCQl9CQogI2VuZGlmCi0KKwllbHNlIGlmIChpID09IE5JRF9pZF9Hb3N0UjM0MTBfOTQgfHwgaSA9PSBOSURfaWRfR29zdFIzNDEwXzk0X2NjKSAKKwkJeworCQlyZXQgPSBTU0xfUEtFWV9HT1NUOTQ7CisJCX0KKwllbHNlIGlmIChpID09IE5JRF9pZF9Hb3N0UjM0MTBfMjAwMSB8fCBpID09IE5JRF9pZF9Hb3N0UjM0MTBfMjAwMV9jYykgCisJCXsKKwkJcmV0ID0gU1NMX1BLRVlfR09TVDAxOworCQl9CiBlcnI6CiAJaWYoIXBrZXkpIEVWUF9QS0VZX2ZyZWUocGspOwogCXJldHVybihyZXQpOwpAQCAtNjE4LDU4ICs2MjUsMjAyIEBACiAJcmV0dXJuKGFsKTsKIAl9CiAKLWludCBzc2wzX3NldHVwX2J1ZmZlcnMoU1NMICpzKQorI2lmbmRlZiBPUEVOU1NMX05PX0JVRl9GUkVFTElTVFMKKy8qIE9uIHNvbWUgcGxhdGZvcm1zLCBtYWxsb2MoKSBwZXJmb3JtYW5jZSBpcyBiYWQgZW5vdWdoIHRoYXQgeW91IGNhbid0IGp1c3QKKyAqIGZyZWUoKSBhbmQgbWFsbG9jKCkgYnVmZmVycyBhbGwgdGhlIHRpbWUsIHNvIHdlIG5lZWQgdG8gdXNlIGZyZWVsaXN0cyBmcm9tCisgKiB1bnVzZWQgYnVmZmVycy4gIEN1cnJlbnRseSwgZWFjaCBmcmVlbGlzdCBob2xkcyBtZW1vcnkgY2h1bmtzIG9mIG9ubHkgYQorICogZ2l2ZW4gc2l6ZSAobGlzdC0+Y2h1bmtsZW4pOyBvdGhlciBzaXplZCBjaHVua3MgYXJlIGZyZWVkIGFuZCBtYWxsb2NlZC4KKyAqIFRoaXMgZG9lc24ndCBoZWxwIG11Y2ggaWYgeW91J3JlIHVzaW5nIG1hbnkgZGlmZmVyZW50IFNTTCBvcHRpb24gc2V0dGluZ3MKKyAqIHdpdGggYSBnaXZlbiBjb250ZXh0LiAgKFRoZSBvcHRpb25zIGFmZmVjdGluZyBidWZmZXIgc2l6ZSBhcmUKKyAqIG1heF9zZW5kX2ZyYWdtZW50LCByZWFkIGJ1ZmZlciB2cyB3cml0ZSBidWZmZXIsCisgKiBTU0xfT1BfTUlDUk9TT0ZUX0JJR19XUklURV9CVUZGRVIsIFNTTF9PUF9OT19DT01QUkVTU0lPTiwgYW5kCisgKiBTU0xfT1BfRE9OVF9JTlNFUlRfRU1QVFlfRlJBR01FTlRTLikgIFVzaW5nIGEgc2VwYXJhdGUgZnJlZWxpc3QgZm9yIGV2ZXJ5CisgKiBwb3NzaWJsZSBzaXplIGlzIG5vdCBhbiBvcHRpb24sIHNpbmNlIG1heF9zZW5kX2ZyYWdtZW50IGNhbiB0YWtlIG9uIG1hbnkKKyAqIGRpZmZlcmVudCB2YWx1ZXMuCisgKgorICogSWYgeW91IGFyZSBvbiBhIHBsYXRmb3JtIHdpdGggYSBzbG93IG1hbGxvYygpLCBhbmQgeW91J3JlIHVzaW5nIFNTTAorICogY29ubmVjdGlvbnMgd2l0aCBtYW55IGRpZmZlcmVudCBzZXR0aW5ncyBmb3IgdGhlc2Ugb3B0aW9ucywgYW5kIHlvdSBuZWVkIHRvCisgKiB1c2UgdGhlIFNTTF9NT0RfUkVMRUFTRV9CVUZGRVJTIGZlYXR1cmUsIHlvdSBoYXZlIGEgZmV3IG9wdGlvbnM6CisgKiAgICAtIExpbmsgYWdhaW5zdCBhIGZhc3RlciBtYWxsb2MgaW1wbGVtZW50YXRpb24uCisgKiAgICAtIFVzZSBhIHNlcGFyYXRlIFNTTF9DVFggZm9yIGVhY2ggb3B0aW9uIHNldC4KKyAqICAgIC0gSW1wcm92ZSB0aGlzIGNvZGUuCisgKi8KK3N0YXRpYyB2b2lkICoKK2ZyZWVsaXN0X2V4dHJhY3QoU1NMX0NUWCAqY3R4LCBpbnQgZm9yX3JlYWQsIGludCBzeikKKwl7CisJU1NMM19CVUZfRlJFRUxJU1QgKmxpc3Q7CisJU1NMM19CVUZfRlJFRUxJU1RfRU5UUlkgKmVudCA9IE5VTEw7CisJdm9pZCAqcmVzdWx0ID0gTlVMTDsKKworCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfU1NMX0NUWCk7CisJbGlzdCA9IGZvcl9yZWFkID8gY3R4LT5yYnVmX2ZyZWVsaXN0IDogY3R4LT53YnVmX2ZyZWVsaXN0OworCWlmIChsaXN0ICE9IE5VTEwgJiYgc3ogPT0gKGludClsaXN0LT5jaHVua2xlbikKKwkJZW50ID0gbGlzdC0+aGVhZDsKKwlpZiAoZW50ICE9IE5VTEwpCisJCXsKKwkJbGlzdC0+aGVhZCA9IGVudC0+bmV4dDsKKwkJcmVzdWx0ID0gZW50OworCQlpZiAoLS1saXN0LT5sZW4gPT0gMCkKKwkJCWxpc3QtPmNodW5rbGVuID0gMDsKKwkJfQorCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19TU0xfQ1RYKTsKKwlpZiAoIXJlc3VsdCkKKwkJcmVzdWx0ID0gT1BFTlNTTF9tYWxsb2Moc3opOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitmcmVlbGlzdF9pbnNlcnQoU1NMX0NUWCAqY3R4LCBpbnQgZm9yX3JlYWQsIHNpemVfdCBzeiwgdm9pZCAqbWVtKQorCXsKKwlTU0wzX0JVRl9GUkVFTElTVCAqbGlzdDsKKwlTU0wzX0JVRl9GUkVFTElTVF9FTlRSWSAqZW50OworCisJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19TU0xfQ1RYKTsKKwlsaXN0ID0gZm9yX3JlYWQgPyBjdHgtPnJidWZfZnJlZWxpc3QgOiBjdHgtPndidWZfZnJlZWxpc3Q7CisJaWYgKGxpc3QgIT0gTlVMTCAmJgorCSAgICAoc3ogPT0gbGlzdC0+Y2h1bmtsZW4gfHwgbGlzdC0+Y2h1bmtsZW4gPT0gMCkgJiYKKwkgICAgbGlzdC0+bGVuIDwgY3R4LT5mcmVlbGlzdF9tYXhfbGVuICYmCisJICAgIHN6ID49IHNpemVvZigqZW50KSkKKwkJeworCQlsaXN0LT5jaHVua2xlbiA9IHN6OworCQllbnQgPSBtZW07CisJCWVudC0+bmV4dCA9IGxpc3QtPmhlYWQ7CisJCWxpc3QtPmhlYWQgPSBlbnQ7CisJCSsrbGlzdC0+bGVuOworCQltZW0gPSBOVUxMOworCQl9CisKKwlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfU1NMX0NUWCk7CisJaWYgKG1lbSkKKwkJT1BFTlNTTF9mcmVlKG1lbSk7CisJfQorI2Vsc2UKKyNkZWZpbmUgZnJlZWxpc3RfZXh0cmFjdChjLGZyLHN6KSBPUEVOU1NMX21hbGxvYyhzeikKKyNkZWZpbmUgZnJlZWxpc3RfaW5zZXJ0KGMsZnIsc3osbSkgT1BFTlNTTF9mcmVlKG0pCisjZW5kaWYKKworaW50IHNzbDNfc2V0dXBfcmVhZF9idWZmZXIoU1NMICpzKQogCXsKIAl1bnNpZ25lZCBjaGFyICpwOwotCXVuc2lnbmVkIGludCBleHRyYSxoZWFkZXJsZW47Ci0Jc2l6ZV90IGxlbjsKLQorCXNpemVfdCBsZW4sYWxpZ249MCxoZWFkZXJsZW47CisJCiAJaWYgKFNTTF92ZXJzaW9uKHMpID09IERUTFMxX1ZFUlNJT04gfHwgU1NMX3ZlcnNpb24ocykgPT0gRFRMUzFfQkFEX1ZFUikKIAkJaGVhZGVybGVuID0gRFRMUzFfUlRfSEVBREVSX0xFTkdUSDsKIAllbHNlCiAJCWhlYWRlcmxlbiA9IFNTTDNfUlRfSEVBREVSX0xFTkdUSDsKIAorI2lmIGRlZmluZWQoU1NMM19BTElHTl9QQVlMT0FEKSAmJiBTU0wzX0FMSUdOX1BBWUxPQUQhPTAKKwlhbGlnbiA9ICgtU1NMM19SVF9IRUFERVJfTEVOR1RIKSYoU1NMM19BTElHTl9QQVlMT0FELTEpOworI2VuZGlmCisKIAlpZiAocy0+czMtPnJidWYuYnVmID09IE5VTEwpCiAJCXsKIAkJaWYgKFNTTF9nZXRfbW9kZShzKSAmIFNTTF9NT0RFX1NNQUxMX0JVRkZFUlMpCiAJCQl7CiAJCQlsZW4gPSBTU0wzX1JUX0RFRkFVTFRfUEFDS0VUX1NJWkU7CiAJCQl9Ci0JCWVsc2UKKyAgCQllbHNlCiAJCQl7CisJCQlsZW4gPSBTU0wzX1JUX01BWF9QTEFJTl9MRU5HVEgKKwkJCQkrIFNTTDNfUlRfTUFYX0VOQ1JZUFRFRF9PVkVSSEVBRAorCQkJCSsgaGVhZGVybGVuICsgYWxpZ247CiAJCQlpZiAocy0+b3B0aW9ucyAmIFNTTF9PUF9NSUNST1NPRlRfQklHX1NTTFYzX0JVRkZFUikKLQkJCQlleHRyYT1TU0wzX1JUX01BWF9FWFRSQTsKLQkJCWVsc2UKLQkJCQlleHRyYT0wOwotCQkJbGVuID0gU1NMM19SVF9NQVhfUEFDS0VUX1NJWkUgKyBleHRyYTsKKwkJCQl7CisJCQkJcy0+czMtPmluaXRfZXh0cmEgPSAxOworCQkJCWxlbiArPSBTU0wzX1JUX01BWF9FWFRSQTsKKwkJCQl9CiAJCQl9Ci0JCWlmICgocD1PUEVOU1NMX21hbGxvYyhsZW4pKSA9PSBOVUxMKQorI2lmbmRlZiBPUEVOU1NMX05PX0NPTVAKKwkJaWYgKCEocy0+b3B0aW9ucyAmIFNTTF9PUF9OT19DT01QUkVTU0lPTikpCisJCQlsZW4gKz0gU1NMM19SVF9NQVhfQ09NUFJFU1NFRF9PVkVSSEVBRDsKKyNlbmRpZgorCQlpZiAoKHA9ZnJlZWxpc3RfZXh0cmFjdChzLT5jdHgsIDEsIGxlbikpID09IE5VTEwpCiAJCQlnb3RvIGVycjsKIAkJcy0+czMtPnJidWYuYnVmID0gcDsKIAkJcy0+czMtPnJidWYubGVuID0gbGVuOwogCQl9CiAKKwlzLT5wYWNrZXQ9ICYocy0+czMtPnJidWYuYnVmWzBdKTsKKwlyZXR1cm4gMTsKKworZXJyOgorCVNTTGVycihTU0xfRl9TU0wzX1NFVFVQX1JFQURfQlVGRkVSLEVSUl9SX01BTExPQ19GQUlMVVJFKTsKKwlyZXR1cm4gMDsKKwl9CisKK2ludCBzc2wzX3NldHVwX3dyaXRlX2J1ZmZlcihTU0wgKnMpCisJeworCXVuc2lnbmVkIGNoYXIgKnA7CisJc2l6ZV90IGxlbixhbGlnbj0wLGhlYWRlcmxlbjsKKworCWlmIChTU0xfdmVyc2lvbihzKSA9PSBEVExTMV9WRVJTSU9OIHx8IFNTTF92ZXJzaW9uKHMpID09IERUTFMxX0JBRF9WRVIpCisJCWhlYWRlcmxlbiA9IERUTFMxX1JUX0hFQURFUl9MRU5HVEggKyAxOworCWVsc2UKKwkJaGVhZGVybGVuID0gU1NMM19SVF9IRUFERVJfTEVOR1RIOworCisjaWYgZGVmaW5lZChTU0wzX0FMSUdOX1BBWUxPQUQpICYmIFNTTDNfQUxJR05fUEFZTE9BRCE9MAorCWFsaWduID0gKC1TU0wzX1JUX0hFQURFUl9MRU5HVEgpJihTU0wzX0FMSUdOX1BBWUxPQUQtMSk7CisjZW5kaWYKKwogCWlmIChzLT5zMy0+d2J1Zi5idWYgPT0gTlVMTCkKIAkJewogCQlpZiAoU1NMX2dldF9tb2RlKHMpICYgU1NMX01PREVfU01BTExfQlVGRkVSUykKIAkJCXsKIAkJCWxlbiA9IFNTTDNfUlRfREVGQVVMVF9QQUNLRVRfU0laRTsKIAkJCX0KLQkJZWxzZQorICAJCWVsc2UKIAkJCXsKLQkJCWxlbiA9IFNTTDNfUlRfTUFYX1BBQ0tFVF9TSVpFOworCQkJbGVuID0gcy0+bWF4X3NlbmRfZnJhZ21lbnQ7CiAJCQl9Ci0JCWxlbiArPSBTU0wzX1JUX0RFRkFVTFRfV1JJVEVfT1ZFUkhFQUQ7IC8qIGV4dHJhIHNwYWNlIGZvciBlbXB0eQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50LCBoZWFkZXIsIE1BQwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBwYWRkaW5nICovCi0JCWlmICgocD1PUEVOU1NMX21hbGxvYyhsZW4pKSA9PSBOVUxMKQorCQlsZW4gKz0gMAorCQkJKyBTU0wzX1JUX1NFTkRfTUFYX0VOQ1JZUFRFRF9PVkVSSEVBRAorCQkJKyBoZWFkZXJsZW4gKyBhbGlnbjsKKyNpZm5kZWYgT1BFTlNTTF9OT19DT01QCisJCWlmICghKHMtPm9wdGlvbnMgJiBTU0xfT1BfTk9fQ09NUFJFU1NJT04pKQorCQkJbGVuICs9IFNTTDNfUlRfTUFYX0NPTVBSRVNTRURfT1ZFUkhFQUQ7CisjZW5kaWYKKwkJaWYgKCEocy0+b3B0aW9ucyAmIFNTTF9PUF9ET05UX0lOU0VSVF9FTVBUWV9GUkFHTUVOVFMpKQorCQkJbGVuICs9IGhlYWRlcmxlbiArIGFsaWduCisJCQkJKyBTU0wzX1JUX1NFTkRfTUFYX0VOQ1JZUFRFRF9PVkVSSEVBRDsKKwkJaWYgKChwPWZyZWVsaXN0X2V4dHJhY3Qocy0+Y3R4LCAwLCBsZW4pKSA9PSBOVUxMKQogCQkJZ290byBlcnI7CiAJCXMtPnMzLT53YnVmLmJ1ZiA9IHA7CiAJCXMtPnMzLT53YnVmLmxlbiA9IGxlbjsKIAkJfQotCXMtPnBhY2tldD0gJihzLT5zMy0+cmJ1Zi5idWZbMF0pOwotCXJldHVybigxKTsKKworCXJldHVybiAxOworCiBlcnI6Ci0JU1NMZXJyKFNTTF9GX1NTTDNfU0VUVVBfQlVGRkVSUyxFUlJfUl9NQUxMT0NfRkFJTFVSRSk7Ci0JcmV0dXJuKDApOworCVNTTGVycihTU0xfRl9TU0wzX1NFVFVQX1dSSVRFX0JVRkZFUixFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CisJcmV0dXJuIDA7CisJfQorCisKK2ludCBzc2wzX3NldHVwX2J1ZmZlcnMoU1NMICpzKQorCXsKKwlpZiAoIXNzbDNfc2V0dXBfcmVhZF9idWZmZXIocykpCisJCXJldHVybiAwOworCWlmICghc3NsM19zZXR1cF93cml0ZV9idWZmZXIocykpCisJCXJldHVybiAwOworCXJldHVybiAxOworCX0KKworaW50IHNzbDNfcmVsZWFzZV93cml0ZV9idWZmZXIoU1NMICpzKQorCXsKKwlpZiAocy0+czMtPndidWYuYnVmICE9IE5VTEwpCisJCXsKKwkJZnJlZWxpc3RfaW5zZXJ0KHMtPmN0eCwgMCwgcy0+czMtPndidWYubGVuLCBzLT5zMy0+d2J1Zi5idWYpOworCQlzLT5zMy0+d2J1Zi5idWYgPSBOVUxMOworCQl9CisJcmV0dXJuIDE7CisJfQorCitpbnQgc3NsM19yZWxlYXNlX3JlYWRfYnVmZmVyKFNTTCAqcykKKwl7CisJaWYgKHMtPnMzLT5yYnVmLmJ1ZiAhPSBOVUxMKQorCQl7CisJCWZyZWVsaXN0X2luc2VydChzLT5jdHgsIDEsIHMtPnMzLT5yYnVmLmxlbiwgcy0+czMtPnJidWYuYnVmKTsKKwkJcy0+czMtPnJidWYuYnVmID0gTlVMTDsKKwkJfQorCXJldHVybiAxOwogCX0KZGlmZiAtLWdpdCBhL3NzbC9zM19jbG50LmMgYi9zc2wvczNfY2xudC5jCmluZGV4IGU1MTM4YjYuLjQxNzY5ZmUgMTAwNjQ0Ci0tLSBhL3NzbC9zM19jbG50LmMKKysrIGIvc3NsL3MzX2NsbnQuYwpAQCAtNTYsNyArNTYsNyBAQAogICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KICAqLwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyMSw2ICsxMjEsMzIgQEAKICAqIFZpcHVsIEd1cHRhIGFuZCBTdW1pdCBHdXB0YSBvZiBTdW4gTWljcm9zeXN0ZW1zIExhYm9yYXRvcmllcy4KICAqCiAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgMjAwNSBOb2tpYS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGUgcG9ydGlvbnMgb2YgdGhlIGF0dGFjaGVkIHNvZnR3YXJlICgiQ29udHJpYnV0aW9uIikgaXMgZGV2ZWxvcGVkIGJ5CisgKiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQgaXMgbGljZW5zZWQgcHVyc3VhbnQgdG8gdGhlIE9wZW5TU0wgb3BlbiBzb3VyY2UKKyAqIGxpY2Vuc2UuCisgKgorICogVGhlIENvbnRyaWJ1dGlvbiwgb3JpZ2luYWxseSB3cml0dGVuIGJ5IE1pa2EgS291c2EgYW5kIFBhc2kgRXJvbmVuIG9mCisgKiBOb2tpYSBDb3Jwb3JhdGlvbiwgY29uc2lzdHMgb2YgdGhlICJQU0siIChQcmUtU2hhcmVkIEtleSkgY2lwaGVyc3VpdGVzCisgKiBzdXBwb3J0IChzZWUgUkZDIDQyNzkpIHRvIE9wZW5TU0wuCisgKgorICogTm8gcGF0ZW50IGxpY2Vuc2VzIG9yIG90aGVyIHJpZ2h0cyBleGNlcHQgdGhvc2UgZXhwcmVzc2x5IHN0YXRlZCBpbgorICogdGhlIE9wZW5TU0wgb3BlbiBzb3VyY2UgbGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgZ3JhbnRlZCBvciByZWNlaXZlZAorICogZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwsIG9yIG90aGVyd2lzZS4KKyAqCisgKiBObyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBOb2tpYSB0aGF0IHRoZSBDb250cmlidXRpb24gZG9lcyBub3QKKyAqIGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkgdGhpcmQKKyAqIHBhcnR5IG9yIHRoYXQgdGhlIGxpY2Vuc2UgcHJvdmlkZXMgeW91IHdpdGggYWxsIHRoZSBuZWNlc3NhcnkgcmlnaHRzCisgKiB0byBtYWtlIHVzZSBvZiB0aGUgQ29udHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQuIElOCisgKiBBRERJVElPTiBUTyBUSEUgRElTQ0xBSU1FUlMgSU5DTFVERUQgSU4gVEhFIExJQ0VOU0UsIE5PS0lBCisgKiBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1TIEFOWSBMSUFCSUxJVFkgRk9SIENMQUlNUyBCUk9VR0hUIEJZIFlPVSBPUiBBTlkKKyAqIE9USEVSIEVOVElUWSBCQVNFRCBPTiBJTkZSSU5HRU1FTlQgT0YgSU5URUxMRUNUVUFMIFBST1BFUlRZIFJJR0hUUyBPUgorICogT1RIRVJXSVNFLgorICovCiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgInNzbF9sb2NsLmgiCkBAIC0xMzAsMTAgKzE1Niw2IEBACiAjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KICNpbmNsdWRlIDxvcGVuc3NsL21kNS5oPgotI2lmZGVmIE9QRU5TU0xfRklQUwotI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotI2VuZGlmCi0KICNpZm5kZWYgT1BFTlNTTF9OT19ESAogI2luY2x1ZGUgPG9wZW5zc2wvZGguaD4KICNlbmRpZgpAQCAtMTQyLDE1ICsxNjQsMTAgQEAKICNpbmNsdWRlIDxvcGVuc3NsL2VuZ2luZS5oPgogI2VuZGlmCiAKLXN0YXRpYyBTU0xfTUVUSE9EICpzc2wzX2dldF9jbGllbnRfbWV0aG9kKGludCB2ZXIpOworc3RhdGljIGNvbnN0IFNTTF9NRVRIT0QgKnNzbDNfZ2V0X2NsaWVudF9tZXRob2QoaW50IHZlcik7CiBzdGF0aWMgaW50IGNhX2RuX2NtcChjb25zdCBYNTA5X05BTUUgKiBjb25zdCAqYSxjb25zdCBYNTA5X05BTUUgKiBjb25zdCAqYik7CiAKLSNpZm5kZWYgT1BFTlNTTF9OT19FQ0RICi1zdGF0aWMgaW50IGN1cnZlX2lkMm5pZChpbnQgY3VydmVfaWQpOwotaW50IGNoZWNrX3NydnJfZWNjX2NlcnRfYW5kX2FsZyhYNTA5ICp4LCBTU0xfQ0lQSEVSICpjcyk7Ci0jZW5kaWYKLQotc3RhdGljIFNTTF9NRVRIT0QgKnNzbDNfZ2V0X2NsaWVudF9tZXRob2QoaW50IHZlcikKK3N0YXRpYyBjb25zdCBTU0xfTUVUSE9EICpzc2wzX2dldF9jbGllbnRfbWV0aG9kKGludCB2ZXIpCiAJewogCWlmICh2ZXIgPT0gU1NMM19WRVJTSU9OKQogCQlyZXR1cm4oU1NMdjNfY2xpZW50X21ldGhvZCgpKTsKQEAgLTE2Niw3ICsxODMsNyBAQAogaW50IHNzbDNfY29ubmVjdChTU0wgKnMpCiAJewogCUJVRl9NRU0gKmJ1Zj1OVUxMOwotCXVuc2lnbmVkIGxvbmcgVGltZT0odW5zaWduZWQgbG9uZyl0aW1lKE5VTEwpLGw7CisJdW5zaWduZWQgbG9uZyBUaW1lPSh1bnNpZ25lZCBsb25nKXRpbWUoTlVMTCk7CiAJdm9pZCAoKmNiKShjb25zdCBTU0wgKnNzbCxpbnQgdHlwZSxpbnQgdmFsKT1OVUxMOwogCWludCByZXQ9IC0xOwogCWludCBuZXdfc3RhdGUsc3RhdGUsc2tpcD0wOwpAQCAtMjYxLDYgKzI3OCw3IEBACiAJCWNhc2UgU1NMM19TVF9DUl9TUlZSX0hFTExPX0I6CiAJCQlyZXQ9c3NsM19nZXRfc2VydmVyX2hlbGxvKHMpOwogCQkJaWYgKHJldCA8PSAwKSBnb3RvIGVuZDsKKwogCQkJaWYgKHMtPmhpdCkKIAkJCQlzLT5zdGF0ZT1TU0wzX1NUX0NSX0ZJTklTSEVEX0E7CiAJCQllbHNlCkBAIC0yODUsNyArMzAzLDkgQEAKIAkJCQl9CiAjZW5kaWYKIAkJCS8qIENoZWNrIGlmIGl0IGlzIGFub24gREgvRUNESCAqLwotCQkJaWYgKCEocy0+czMtPnRtcC5uZXdfY2lwaGVyLT5hbGdvcml0aG1zICYgU1NMX2FOVUxMKSkKKwkJCS8qIG9yIFBTSyAqLworCQkJaWYgKCEocy0+czMtPnRtcC5uZXdfY2lwaGVyLT5hbGdvcml0aG1fYXV0aCAmIFNTTF9hTlVMTCkgJiYKKwkJCSAgICAhKHMtPnMzLT50bXAubmV3X2NpcGhlci0+YWxnb3JpdGhtX21rZXkgJiBTU0xfa1BTSykpCiAJCQkJewogCQkJCXJldD1zc2wzX2dldF9zZXJ2ZXJfY2VydGlmaWNhdGUocyk7CiAJCQkJaWYgKHJldCA8PSAwKSBnb3RvIGVuZDsKQEAgLTM2MCw3ICszODAsNiBAQAogCQljYXNlIFNTTDNfU1RfQ1dfS0VZX0VYQ0hfQjoKIAkJCXJldD1zc2wzX3NlbmRfY2xpZW50X2tleV9leGNoYW5nZShzKTsKIAkJCWlmIChyZXQgPD0gMCkgZ290byBlbmQ7Ci0JCQlsPXMtPnMzLT50bXAubmV3X2NpcGhlci0+YWxnb3JpdGhtczsKIAkJCS8qIEVBWSBFQVkgRUFZIG5lZWQgdG8gY2hlY2sgZm9yIERIIGZpeCBjZXJ0CiAJCQkgKiBzZW50IGJhY2sgKi8KIAkJCS8qIEZvciBUTFMsIGNlcnRfcmVxIGlzIHNldCB0byAyLCBzbyBhIGNlcnQgY2hhaW4KQEAgLTM4MSw2ICs0MDAsMTEgQEAKIAkJCQlzLT5zdGF0ZT1TU0wzX1NUX0NXX0NIQU5HRV9BOwogCQkJCXMtPnMzLT5jaGFuZ2VfY2lwaGVyX3NwZWM9MDsKIAkJCQl9CisJCQlpZiAocy0+czMtPmZsYWdzICYgVExTMV9GTEFHU19TS0lQX0NFUlRfVkVSSUZZKQorCQkJCXsKKwkJCQlzLT5zdGF0ZT1TU0wzX1NUX0NXX0NIQU5HRV9BOworCQkJCXMtPnMzLT5jaGFuZ2VfY2lwaGVyX3NwZWM9MDsKKwkJCQl9CiAKIAkJCXMtPmluaXRfbnVtPTA7CiAJCQlicmVhazsKQEAgLTY1MCw3ICs2NzQsOSBAQAogI2lmZGVmIE9QRU5TU0xfTk9fQ09NUAogCQkqKHArKyk9MTsKICNlbHNlCi0JCWlmIChzLT5jdHgtPmNvbXBfbWV0aG9kcyA9PSBOVUxMKQorCisJCWlmICgocy0+b3B0aW9ucyAmIFNTTF9PUF9OT19DT01QUkVTU0lPTikKKwkJCQkJfHwgIXMtPmN0eC0+Y29tcF9tZXRob2RzKQogCQkJaj0wOwogCQllbHNlCiAJCQlqPXNrX1NTTF9DT01QX251bShzLT5jdHgtPmNvbXBfbWV0aG9kcyk7CkBAIC02NjIsMTMgKzY4OCwyMSBAQAogCQkJfQogI2VuZGlmCiAJCSoocCsrKT0wOyAvKiBBZGQgdGhlIE5VTEwgbWV0aG9kICovCisKICNpZm5kZWYgT1BFTlNTTF9OT19UTFNFWFQKKwkJLyogVExTIGV4dGVuc2lvbnMqLworCQlpZiAoc3NsX3ByZXBhcmVfY2xpZW50aGVsbG9fdGxzZXh0KHMpIDw9IDApCisJCQl7CisJCQlTU0xlcnIoU1NMX0ZfU1NMM19DTElFTlRfSEVMTE8sU1NMX1JfQ0xJRU5USEVMTE9fVExTRVhUKTsKKwkJCWdvdG8gZXJyOworCQkJfQogCQlpZiAoKHAgPSBzc2xfYWRkX2NsaWVudGhlbGxvX3Rsc2V4dChzLCBwLCBidWYrU1NMM19SVF9NQVhfUExBSU5fTEVOR1RIKSkgPT0gTlVMTCkKIAkJCXsKIAkJCVNTTGVycihTU0xfRl9TU0wzX0NMSUVOVF9IRUxMTyxFUlJfUl9JTlRFUk5BTF9FUlJPUik7CiAJCQlnb3RvIGVycjsKIAkJCX0KLSNlbmRpZgkJCisjZW5kaWYKKwkJCiAJCWw9KHAtZCk7CiAJCWQ9YnVmOwogCQkqKGQrKyk9U1NMM19NVF9DTElFTlRfSEVMTE87CkBAIC02ODksNyArNzIzLDcgQEAKIGludCBzc2wzX2dldF9zZXJ2ZXJfaGVsbG8oU1NMICpzKQogCXsKIAlTVEFDS19PRihTU0xfQ0lQSEVSKSAqc2s7Ci0JU1NMX0NJUEhFUiAqYzsKKwljb25zdCBTU0xfQ0lQSEVSICpjOwogCXVuc2lnbmVkIGNoYXIgKnAsKmQ7CiAJaW50IGksYWwsb2s7CiAJdW5zaWduZWQgaW50IGo7CkBAIC03NTgsNiArNzkyLDIzIEBACiAJCWdvdG8gZl9lcnI7CiAJCX0KIAorI2lmbmRlZiBPUEVOU1NMX05PX1RMU0VYVAorCS8qIGNoZWNrIGlmIHdlIHdhbnQgdG8gcmVzdW1lIHRoZSBzZXNzaW9uIGJhc2VkIG9uIGV4dGVybmFsIHByZS1zaGFyZWQgc2VjcmV0ICovCisJaWYgKHMtPnZlcnNpb24gPj0gVExTMV9WRVJTSU9OICYmIHMtPnRsc19zZXNzaW9uX3NlY3JldF9jYikKKwkJeworCQlTU0xfQ0lQSEVSICpwcmVmX2NpcGhlcj1OVUxMOworCQlzLT5zZXNzaW9uLT5tYXN0ZXJfa2V5X2xlbmd0aD1zaXplb2Yocy0+c2Vzc2lvbi0+bWFzdGVyX2tleSk7CisJCWlmIChzLT50bHNfc2Vzc2lvbl9zZWNyZXRfY2Iocywgcy0+c2Vzc2lvbi0+bWFzdGVyX2tleSwKKwkJCQkJICAgICAmcy0+c2Vzc2lvbi0+bWFzdGVyX2tleV9sZW5ndGgsCisJCQkJCSAgICAgTlVMTCwgJnByZWZfY2lwaGVyLAorCQkJCQkgICAgIHMtPnRsc19zZXNzaW9uX3NlY3JldF9jYl9hcmcpKQorCQkJeworCQkJcy0+c2Vzc2lvbi0+Y2lwaGVyID0gcHJlZl9jaXBoZXIgPworCQkJCXByZWZfY2lwaGVyIDogc3NsX2dldF9jaXBoZXJfYnlfY2hhcihzLCBwK2opOworCQkJfQorCQl9CisjZW5kaWYgLyogT1BFTlNTTF9OT19UTFNFWFQgKi8KKwogCWlmIChqICE9IDAgJiYgaiA9PSBzLT5zZXNzaW9uLT5zZXNzaW9uX2lkX2xlbmd0aAogCSAgICAmJiBtZW1jbXAocCxzLT5zZXNzaW9uLT5zZXNzaW9uX2lkLGopID09IDApCiAJICAgIHsKQEAgLTgyNCw2ICs4NzUsOCBAQAogCQkJfQogCQl9CiAJcy0+czMtPnRtcC5uZXdfY2lwaGVyPWM7CisJaWYgKCFzc2wzX2RpZ2VzdF9jYWNoZWRfcmVjb3JkcyhzKSkKKwkJZ290byBmX2VycjsKIAogCS8qIGxldHMgZ2V0IHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0gKi8KIAkvKiBDT01QUkVTU0lPTiAqLwpAQCAtODM0LDEwICs4ODcsMzEgQEAKIAkJU1NMZXJyKFNTTF9GX1NTTDNfR0VUX1NFUlZFUl9IRUxMTyxTU0xfUl9VTlNVUFBPUlRFRF9DT01QUkVTU0lPTl9BTEdPUklUSE0pOwogCQlnb3RvIGZfZXJyOwogCQl9CisJLyogSWYgY29tcHJlc3Npb24gaXMgZGlzYWJsZWQgd2UnZCBiZXR0ZXIgbm90IHRyeSB0byByZXN1bWUgYSBzZXNzaW9uCisJICogdXNpbmcgY29tcHJlc3Npb24uCisJICovCisJaWYgKHMtPnNlc3Npb24tPmNvbXByZXNzX21ldGggIT0gMCkKKwkJeworCQlhbD1TU0xfQURfSU5URVJOQUxfRVJST1I7CisJCVNTTGVycihTU0xfRl9TU0wzX0dFVF9TRVJWRVJfSEVMTE8sU1NMX1JfSU5DT05TSVNURU5UX0NPTVBSRVNTSU9OKTsKKwkJZ290byBmX2VycjsKKwkJfQogI2Vsc2UKIAlqPSAqKHArKyk7CisJaWYgKHMtPmhpdCAmJiBqICE9IHMtPnNlc3Npb24tPmNvbXByZXNzX21ldGgpCisJCXsKKwkJYWw9U1NMX0FEX0lMTEVHQUxfUEFSQU1FVEVSOworCQlTU0xlcnIoU1NMX0ZfU1NMM19HRVRfU0VSVkVSX0hFTExPLFNTTF9SX09MRF9TRVNTSU9OX0NPTVBSRVNTSU9OX0FMR09SSVRITV9OT1RfUkVUVVJORUQpOworCQlnb3RvIGZfZXJyOworCQl9CiAJaWYgKGogPT0gMCkKIAkJY29tcD1OVUxMOworCWVsc2UgaWYgKHMtPm9wdGlvbnMgJiBTU0xfT1BfTk9fQ09NUFJFU1NJT04pCisJCXsKKwkJYWw9U1NMX0FEX0lMTEVHQUxfUEFSQU1FVEVSOworCQlTU0xlcnIoU1NMX0ZfU1NMM19HRVRfU0VSVkVSX0hFTExPLFNTTF9SX0NPTVBSRVNTSU9OX0RJU0FCTEVEKTsKKwkJZ290byBmX2VycjsKKwkJfQogCWVsc2UKIAkJY29tcD1zc2wzX2NvbXBfZmluZChzLT5jdHgtPmNvbXBfbWV0aG9kcyxqKTsKIAkKQEAgLTg1Miw2ICs5MjYsNyBAQAogCQlzLT5zMy0+dG1wLm5ld19jb21wcmVzc2lvbj1jb21wOwogCQl9CiAjZW5kaWYKKwogI2lmbmRlZiBPUEVOU1NMX05PX1RMU0VYVAogCS8qIFRMUyBleHRlbnNpb25zKi8KIAlpZiAocy0+dmVyc2lvbiA+PSBTU0wzX1ZFUlNJT04pCkBAIC04NzAsNyArOTQ1LDYgQEAKIAkJfQogI2VuZGlmCiAKLQogCWlmIChwICE9IChkK24pKQogCQl7CiAJCS8qIHdyb25nIHBhY2tldCBsZW5ndGggKi8KQEAgLTkwOCw3ICs5ODIsNyBAQAogCWlmICghb2spIHJldHVybigoaW50KW4pOwogCiAJaWYgKChzLT5zMy0+dG1wLm1lc3NhZ2VfdHlwZSA9PSBTU0wzX01UX1NFUlZFUl9LRVlfRVhDSEFOR0UpIHx8Ci0JCSgocy0+czMtPnRtcC5uZXdfY2lwaGVyLT5hbGdvcml0aG1zICYgU1NMX2FLUkI1KSAmJiAKKwkJKChzLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobV9hdXRoICYgU1NMX2FLUkI1KSAmJiAKIAkJKHMtPnMzLT50bXAubWVzc2FnZV90eXBlID09IFNTTDNfTVRfU0VSVkVSX0RPTkUpKSkKIAkJewogCQlzLT5zMy0+dG1wLnJldXNlX21lc3NhZ2U9MTsKQEAgLTk3MywxMCArMTA0NywxMCBAQAogCWk9c3NsX3ZlcmlmeV9jZXJ0X2NoYWluKHMsc2spOwogCWlmICgocy0+dmVyaWZ5X21vZGUgIT0gU1NMX1ZFUklGWV9OT05FKSAmJiAoaSA8PSAwKQogI2lmbmRlZiBPUEVOU1NMX05PX0tSQjUKLQkgICAgICAgICYmIChzLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobXMgJiAoU1NMX01LRVlfTUFTS3xTU0xfQVVUSF9NQVNLKSkKLQkgICAgICAgICE9IChTU0xfYUtSQjV8U1NMX2tLUkI1KQorCSAgICAmJiAhKChzLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobV9ta2V5ICYgU1NMX2tLUkI1KSAmJgorCQkgKHMtPnMzLT50bXAubmV3X2NpcGhlci0+YWxnb3JpdGhtX2F1dGggJiBTU0xfYUtSQjUpKQogI2VuZGlmIC8qIE9QRU5TU0xfTk9fS1JCNSAqLwotCSAgICAgICAgKQorCQkpCiAJCXsKIAkJYWw9c3NsX3ZlcmlmeV9hbGFybV90eXBlKHMtPnZlcmlmeV9yZXN1bHQpOwogCQlTU0xlcnIoU1NMX0ZfU1NMM19HRVRfU0VSVkVSX0NFUlRJRklDQVRFLFNTTF9SX0NFUlRJRklDQVRFX1ZFUklGWV9GQUlMRUQpOwpAQCAtMTAwMCwxNSArMTA3NCwxNSBAQAogCXBrZXk9WDUwOV9nZXRfcHVia2V5KHgpOwogCiAJLyogVlJTOiBhbGxvdyBudWxsIGNlcnQgaWYgYXV0aCA9PSBLUkI1ICovCi0JbmVlZF9jZXJ0ID0JKChzLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobXMKLQkgICAgICAgICAgICAgICAgICYgKFNTTF9NS0VZX01BU0t8U1NMX0FVVEhfTUFTSykpCi0JICAgICAgICAgICAgICAgICA9PSAoU1NMX2FLUkI1fFNTTF9rS1JCNSkpPyAwOiAxOworCW5lZWRfY2VydCA9ICgocy0+czMtPnRtcC5uZXdfY2lwaGVyLT5hbGdvcml0aG1fbWtleSAmIFNTTF9rS1JCNSkgJiYKKwkgICAgICAgICAgICAocy0+czMtPnRtcC5uZXdfY2lwaGVyLT5hbGdvcml0aG1fYXV0aCAmIFNTTF9hS1JCNSkpCisJICAgICAgICAgICAgPyAwIDogMTsKIAogI2lmZGVmIEtTU0xfREVCVUcKLQlwcmludGYoInBrZXkseCA9ICVwLCAlcFxuIiwgKHZvaWQgKilwa2V5LCh2b2lkICopeCk7CisJcHJpbnRmKCJwa2V5LHggPSAlcCwgJXBcbiIsIHBrZXkseCk7CiAJcHJpbnRmKCJzc2xfY2VydF90eXBlKHgscGtleSkgPSAlZFxuIiwgc3NsX2NlcnRfdHlwZSh4LHBrZXkpKTsKLQlwcmludGYoImNpcGhlciwgYWxnLCBuYyA9ICVzLCAlbHgsICVkXG4iLCBzLT5zMy0+dG1wLm5ld19jaXBoZXItPm5hbWUsCi0JICAgICAgICBzLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobXMsIG5lZWRfY2VydCk7CisJcHJpbnRmKCJjaXBoZXIsIGFsZywgbmMgPSAlcywgJWx4LCAlbHgsICVkXG4iLCBzLT5zMy0+dG1wLm5ld19jaXBoZXItPm5hbWUsCisJCXMtPnMzLT50bXAubmV3X2NpcGhlci0+YWxnb3JpdGhtX21rZXksIHMtPnMzLT50bXAubmV3X2NpcGhlci0+YWxnb3JpdGhtX2F1dGgsIG5lZWRfY2VydCk7CiAjZW5kaWYgICAgLyogS1NTTF9ERUJVRyAqLwogCiAJaWYgKG5lZWRfY2VydCAmJiAoKHBrZXkgPT0gTlVMTCkgfHwgRVZQX1BLRVlfbWlzc2luZ19wYXJhbWV0ZXJzKHBrZXkpKSkKQEAgLTEwODAsNyArMTE1NCw3IEBACiAJRVZQX01EX0NUWCBtZF9jdHg7CiAJdW5zaWduZWQgY2hhciAqcGFyYW0sKnA7CiAJaW50IGFsLGksaixwYXJhbV9sZW4sb2s7Ci0JbG9uZyBuLGFsZzsKKwlsb25nIG4sYWxnX2ssYWxnX2E7CiAJRVZQX1BLRVkgKnBrZXk9TlVMTDsKICNpZm5kZWYgT1BFTlNTTF9OT19SU0EKIAlSU0EgKnJzYT1OVUxMOwpAQCAtMTEwNCwxNyArMTE3OCwyOCBAQAogCQktMSwKIAkJcy0+bWF4X2NlcnRfbGlzdCwKIAkJJm9rKTsKLQogCWlmICghb2spIHJldHVybigoaW50KW4pOwogCiAJaWYgKHMtPnMzLT50bXAubWVzc2FnZV90eXBlICE9IFNTTDNfTVRfU0VSVkVSX0tFWV9FWENIQU5HRSkKIAkJeworI2lmbmRlZiBPUEVOU1NMX05PX1BTSworCQkvKiBJbiBwbGFpbiBQU0sgY2lwaGVyc3VpdGUsIFNlcnZlcktleUV4Y2hhbmdlIGNhbiBiZQorCQkgICBvbWl0dGVkIGlmIG5vIGlkZW50aXR5IGhpbnQgaXMgc2VudC4gU2V0CisJCSAgIHNlc3Npb24tPnNlc3NfY2VydCBhbnl3YXkgdG8gYXZvaWQgcHJvYmxlbXMKKwkJICAgbGF0ZXIuKi8KKwkJaWYgKHMtPnMzLT50bXAubmV3X2NpcGhlci0+YWxnb3JpdGhtX21rZXkgJiBTU0xfa1BTSykKKwkJCXsKKwkJCXMtPnNlc3Npb24tPnNlc3NfY2VydD1zc2xfc2Vzc19jZXJ0X25ldygpOworCQkJaWYgKHMtPmN0eC0+cHNrX2lkZW50aXR5X2hpbnQpCisJCQkJT1BFTlNTTF9mcmVlKHMtPmN0eC0+cHNrX2lkZW50aXR5X2hpbnQpOworCQkJcy0+Y3R4LT5wc2tfaWRlbnRpdHlfaGludCA9IE5VTEw7CisJCQl9CisjZW5kaWYKIAkJcy0+czMtPnRtcC5yZXVzZV9tZXNzYWdlPTE7CiAJCXJldHVybigxKTsKIAkJfQogCiAJcGFyYW09cD0odW5zaWduZWQgY2hhciAqKXMtPmluaXRfbXNnOwotCiAJaWYgKHMtPnNlc3Npb24tPnNlc3NfY2VydCAhPSBOVUxMKQogCQl7CiAjaWZuZGVmIE9QRU5TU0xfTk9fUlNBCkBAIC0xMTQ1LDExICsxMjMwLDU3IEBACiAJCX0KIAogCXBhcmFtX2xlbj0wOwotCWFsZz1zLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobXM7CisJYWxnX2s9cy0+czMtPnRtcC5uZXdfY2lwaGVyLT5hbGdvcml0aG1fbWtleTsKKwlhbGdfYT1zLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobV9hdXRoOwogCUVWUF9NRF9DVFhfaW5pdCgmbWRfY3R4KTsKIAorI2lmbmRlZiBPUEVOU1NMX05PX1BTSworCWlmIChhbGdfayAmIFNTTF9rUFNLKQorCQl7CisJCWNoYXIgdG1wX2lkX2hpbnRbUFNLX01BWF9JREVOVElUWV9MRU4rMV07CisKKwkJYWw9U1NMX0FEX0hBTkRTSEFLRV9GQUlMVVJFOworCQluMnMocCxpKTsKKwkJcGFyYW1fbGVuPWkrMjsKKwkJLyogU3RvcmUgUFNLIGlkZW50aXR5IGhpbnQgZm9yIGxhdGVyIHVzZSwgaGludCBpcyB1c2VkCisJCSAqIGluIHNzbDNfc2VuZF9jbGllbnRfa2V5X2V4Y2hhbmdlLiAgQXNzdW1lIHRoYXQgdGhlCisJCSAqIG1heGltdW0gbGVuZ3RoIG9mIGEgUFNLIGlkZW50aXR5IGhpbnQgY2FuIGJlIGFzCisJCSAqIGxvbmcgYXMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgUFNLIGlkZW50aXR5LiAqLworCQlpZiAoaSA+IFBTS19NQVhfSURFTlRJVFlfTEVOKQorCQkJeworCQkJU1NMZXJyKFNTTF9GX1NTTDNfR0VUX0tFWV9FWENIQU5HRSwKKwkJCQlTU0xfUl9EQVRBX0xFTkdUSF9UT09fTE9ORyk7CisJCQlnb3RvIGZfZXJyOworCQkJfQorCQlpZiAocGFyYW1fbGVuID4gbikKKwkJCXsKKwkJCWFsPVNTTF9BRF9ERUNPREVfRVJST1I7CisJCQlTU0xlcnIoU1NMX0ZfU1NMM19HRVRfS0VZX0VYQ0hBTkdFLAorCQkJCVNTTF9SX0JBRF9QU0tfSURFTlRJVFlfSElOVF9MRU5HVEgpOworCQkJZ290byBmX2VycjsKKwkJCX0KKwkJLyogSWYgcmVjZWl2ZWQgUFNLIGlkZW50aXR5IGhpbnQgY29udGFpbnMgTlVMTAorCQkgKiBjaGFyYWN0ZXJzLCB0aGUgaGludCBpcyB0cnVuY2F0ZWQgZnJvbSB0aGUgZmlyc3QKKwkJICogTlVMTC4gcCBtYXkgbm90IGJlIGVuZGluZyB3aXRoIE5VTEwsIHNvIGNyZWF0ZSBhCisJCSAqIE5VTEwtdGVybWluYXRlZCBzdHJpbmcuICovCisJCW1lbWNweSh0bXBfaWRfaGludCwgcCwgaSk7CisJCW1lbXNldCh0bXBfaWRfaGludCtpLCAwLCBQU0tfTUFYX0lERU5USVRZX0xFTisxLWkpOworCQlpZiAocy0+Y3R4LT5wc2tfaWRlbnRpdHlfaGludCAhPSBOVUxMKQorCQkJT1BFTlNTTF9mcmVlKHMtPmN0eC0+cHNrX2lkZW50aXR5X2hpbnQpOworCQlzLT5jdHgtPnBza19pZGVudGl0eV9oaW50ID0gQlVGX3N0cmR1cCh0bXBfaWRfaGludCk7CisJCWlmIChzLT5jdHgtPnBza19pZGVudGl0eV9oaW50ID09IE5VTEwpCisJCQl7CisJCQlTU0xlcnIoU1NMX0ZfU1NMM19HRVRfS0VZX0VYQ0hBTkdFLCBFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CisJCQlnb3RvIGZfZXJyOworCQkJfQkgICAKKworCQlwKz1pOworCQluLT1wYXJhbV9sZW47CisJCX0KKwllbHNlCisjZW5kaWYgLyogIU9QRU5TU0xfTk9fUFNLICovCiAjaWZuZGVmIE9QRU5TU0xfTk9fUlNBCi0JaWYgKGFsZyAmIFNTTF9rUlNBKQorCWlmIChhbGdfayAmIFNTTF9rUlNBKQogCQl7CiAJCWlmICgocnNhPVJTQV9uZXcoKSkgPT0gTlVMTCkKIAkJCXsKQEAgLTExODgsNyArMTMxOSw3IEBACiAJCW4tPXBhcmFtX2xlbjsKIAogCQkvKiB0aGlzIHNob3VsZCBiZSBiZWNhdXNlIHdlIGFyZSB1c2luZyBhbiBleHBvcnQgY2lwaGVyICovCi0JCWlmIChhbGcgJiBTU0xfYVJTQSkKKwkJaWYgKGFsZ19hICYgU1NMX2FSU0EpCiAJCQlwa2V5PVg1MDlfZ2V0X3B1YmtleShzLT5zZXNzaW9uLT5zZXNzX2NlcnQtPnBlZXJfcGtleXNbU1NMX1BLRVlfUlNBX0VOQ10ueDUwOSk7CiAJCWVsc2UKIAkJCXsKQEAgLTEyMDMsNyArMTMzNCw3IEBACiAJCTsKICNlbmRpZgogI2lmbmRlZiBPUEVOU1NMX05PX0RICi0JZWxzZSBpZiAoYWxnICYgU1NMX2tFREgpCisJZWxzZSBpZiAoYWxnX2sgJiBTU0xfa0VESCkKIAkJewogCQlpZiAoKGRoPURIX25ldygpKSA9PSBOVUxMKQogCQkJewpAQCAtMTI1NywxNCArMTM4OCwxNCBAQAogCQluLT1wYXJhbV9sZW47CiAKICNpZm5kZWYgT1BFTlNTTF9OT19SU0EKLQkJaWYgKGFsZyAmIFNTTF9hUlNBKQorCQlpZiAoYWxnX2EgJiBTU0xfYVJTQSkKIAkJCXBrZXk9WDUwOV9nZXRfcHVia2V5KHMtPnNlc3Npb24tPnNlc3NfY2VydC0+cGVlcl9wa2V5c1tTU0xfUEtFWV9SU0FfRU5DXS54NTA5KTsKICNlbHNlCiAJCWlmICgwKQogCQkJOwogI2VuZGlmCiAjaWZuZGVmIE9QRU5TU0xfTk9fRFNBCi0JCWVsc2UgaWYgKGFsZyAmIFNTTF9hRFNTKQorCQllbHNlIGlmIChhbGdfYSAmIFNTTF9hRFNTKQogCQkJcGtleT1YNTA5X2dldF9wdWJrZXkocy0+c2Vzc2lvbi0+c2Vzc19jZXJ0LT5wZWVyX3BrZXlzW1NTTF9QS0VZX0RTQV9TSUdOXS54NTA5KTsKICNlbmRpZgogCQkvKiBlbHNlIGFub255bW91cyBESCwgc28gbm8gY2VydGlmaWNhdGUgb3IgcGtleS4gKi8KQEAgLTEyNzIsNyArMTQwMyw3IEBACiAJCXMtPnNlc3Npb24tPnNlc3NfY2VydC0+cGVlcl9kaF90bXA9ZGg7CiAJCWRoPU5VTEw7CiAJCX0KLQllbHNlIGlmICgoYWxnICYgU1NMX2tESHIpIHx8IChhbGcgJiBTU0xfa0RIZCkpCisJZWxzZSBpZiAoKGFsZ19rICYgU1NMX2tESHIpIHx8IChhbGdfayAmIFNTTF9rREhkKSkKIAkJewogCQlhbD1TU0xfQURfSUxMRUdBTF9QQVJBTUVURVI7CiAJCVNTTGVycihTU0xfRl9TU0wzX0dFVF9LRVlfRVhDSEFOR0UsU1NMX1JfVFJJRURfVE9fVVNFX1VOU1VQUE9SVEVEX0NJUEhFUik7CkBAIC0xMjgxLDcgKzE0MTIsNyBAQAogI2VuZGlmIC8qICFPUEVOU1NMX05PX0RIICovCiAKICNpZm5kZWYgT1BFTlNTTF9OT19FQ0RICi0JZWxzZSBpZiAoYWxnICYgU1NMX2tFQ0RIRSkKKwllbHNlIGlmIChhbGdfayAmIFNTTF9rRUVDREgpCiAJCXsKIAkJRUNfR1JPVVAgKm5ncm91cDsKIAkJY29uc3QgRUNfR1JPVVAgKmdyb3VwOwpAQCAtMTMwNCw3ICsxNDM1LDcgQEAKIAkJcGFyYW1fbGVuPTM7CiAJCWlmICgocGFyYW1fbGVuID4gbikgfHwKIAkJICAgICgqcCAhPSBOQU1FRF9DVVJWRV9UWVBFKSB8fCAKLQkJICAgICgoY3VydmVfbmlkID0gY3VydmVfaWQybmlkKCoocCArIDIpKSkgPT0gMCkpIAorCQkgICAgKChjdXJ2ZV9uaWQgPSB0bHMxX2VjX2N1cnZlX2lkMm5pZCgqKHAgKyAyKSkpID09IDApKSAKIAkJCXsKIAkJCWFsPVNTTF9BRF9JTlRFUk5BTF9FUlJPUjsKIAkJCVNTTGVycihTU0xfRl9TU0wzX0dFVF9LRVlfRVhDSEFOR0UsU1NMX1JfVU5BQkxFX1RPX0ZJTkRfRUNESF9QQVJBTUVURVJTKTsKQEAgLTEzNjUsMTEgKzE0OTYsMTEgQEAKIAkJICovCiAJCWlmICgwKSA7CiAjaWZuZGVmIE9QRU5TU0xfTk9fUlNBCi0JCWVsc2UgaWYgKGFsZyAmIFNTTF9hUlNBKQorCQllbHNlIGlmIChhbGdfYSAmIFNTTF9hUlNBKQogCQkJcGtleT1YNTA5X2dldF9wdWJrZXkocy0+c2Vzc2lvbi0+c2Vzc19jZXJ0LT5wZWVyX3BrZXlzW1NTTF9QS0VZX1JTQV9FTkNdLng1MDkpOwogI2VuZGlmCiAjaWZuZGVmIE9QRU5TU0xfTk9fRUNEU0EKLQkJZWxzZSBpZiAoYWxnICYgU1NMX2FFQ0RTQSkKKwkJZWxzZSBpZiAoYWxnX2EgJiBTU0xfYUVDRFNBKQogCQkJcGtleT1YNTA5X2dldF9wdWJrZXkocy0+c2Vzc2lvbi0+c2Vzc19jZXJ0LT5wZWVyX3BrZXlzW1NTTF9QS0VZX0VDQ10ueDUwOSk7CiAjZW5kaWYKIAkJLyogZWxzZSBhbm9ueW1vdXMgRUNESCwgc28gbm8gY2VydGlmaWNhdGUgb3IgcGtleS4gKi8KQEAgLTEzODAsMTkgKzE1MTEsMTMgQEAKIAkJRUNfUE9JTlRfZnJlZShzcnZyX2VjcG9pbnQpOwogCQlzcnZyX2VjcG9pbnQgPSBOVUxMOwogCQl9Ci0JZWxzZSBpZiAoYWxnICYgU1NMX2tFQ0RIKQorCWVsc2UgaWYgKGFsZ19rKQogCQl7CiAJCWFsPVNTTF9BRF9VTkVYUEVDVEVEX01FU1NBR0U7CiAJCVNTTGVycihTU0xfRl9TU0wzX0dFVF9LRVlfRVhDSEFOR0UsU1NMX1JfVU5FWFBFQ1RFRF9NRVNTQUdFKTsKIAkJZ290byBmX2VycjsKIAkJfQogI2VuZGlmIC8qICFPUEVOU1NMX05PX0VDREggKi8KLQlpZiAoYWxnICYgU1NMX2FGWkEpCi0JCXsKLQkJYWw9U1NMX0FEX0hBTkRTSEFLRV9GQUlMVVJFOwotCQlTU0xlcnIoU1NMX0ZfU1NMM19HRVRfS0VZX0VYQ0hBTkdFLFNTTF9SX1RSSUVEX1RPX1VTRV9VTlNVUFBPUlRFRF9DSVBIRVIpOwotCQlnb3RvIGZfZXJyOwotCQl9CiAKIAogCS8qIHAgcG9pbnRzIHRvIHRoZSBuZXh0IGJ5dGUsIHRoZXJlIGFyZSAnbicgYnl0ZXMgbGVmdCAqLwpAQCAtMTQyMSw4ICsxNTQ2LDYgQEAKIAkJCXE9bWRfYnVmOwogCQkJZm9yIChudW09MjsgbnVtID4gMDsgbnVtLS0pCiAJCQkJewotCQkJCUVWUF9NRF9DVFhfc2V0X2ZsYWdzKCZtZF9jdHgsCi0JCQkJCUVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVyk7CiAJCQkJRVZQX0RpZ2VzdEluaXRfZXgoJm1kX2N0eCwobnVtID09IDIpCiAJCQkJCT9zLT5jdHgtPm1kNTpzLT5jdHgtPnNoYTEsIE5VTEwpOwogCQkJCUVWUF9EaWdlc3RVcGRhdGUoJm1kX2N0eCwmKHMtPnMzLT5jbGllbnRfcmFuZG9tWzBdKSxTU0wzX1JBTkRPTV9TSVpFKTsKQEAgLTE0OTMsMTIgKzE2MTYsMTMgQEAKIAkJfQogCWVsc2UKIAkJewotCQkvKiBzdGlsbCBkYXRhIGxlZnQgb3ZlciAqLwotCQlpZiAoIShhbGcgJiBTU0xfYU5VTEwpKQorCQlpZiAoIShhbGdfYSAmIFNTTF9hTlVMTCkgJiYgIShhbGdfayAmIFNTTF9rUFNLKSkKKwkJCS8qIGFOVUxMIG9yIGtQU0sgZG8gbm90IG5lZWQgcHVibGljIGtleXMgKi8KIAkJCXsKIAkJCVNTTGVycihTU0xfRl9TU0wzX0dFVF9LRVlfRVhDSEFOR0UsRVJSX1JfSU5URVJOQUxfRVJST1IpOwogCQkJZ290byBlcnI7CiAJCQl9CisJCS8qIHN0aWxsIGRhdGEgbGVmdCBvdmVyICovCiAJCWlmIChuICE9IDApCiAJCQl7CiAJCQlhbD1TU0xfQURfREVDT0RFX0VSUk9SOwpAQCAtMTU2OCw4ICsxNjkyLDcgQEAKIAkvKiBUTFMgZG9lcyBub3QgbGlrZSBhbm9uLURIIHdpdGggY2xpZW50IGNlcnQgKi8KIAlpZiAocy0+dmVyc2lvbiA+IFNTTDNfVkVSU0lPTikKIAkJewotCQlsPXMtPnMzLT50bXAubmV3X2NpcGhlci0+YWxnb3JpdGhtczsKLQkJaWYgKGwgJiBTU0xfYU5VTEwpCisJCWlmIChzLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobV9hdXRoICYgU1NMX2FOVUxMKQogCQkJewogCQkJc3NsM19zZW5kX2FsZXJ0KHMsU1NMM19BTF9GQVRBTCxTU0xfQURfVU5FWFBFQ1RFRF9NRVNTQUdFKTsKIAkJCVNTTGVycihTU0xfRl9TU0wzX0dFVF9DRVJUSUZJQ0FURV9SRVFVRVNULFNTTF9SX1RMU19DTElFTlRfQ0VSVF9SRVFfV0lUSF9BTk9OX0NJUEhFUik7CkBAIC0xNzcxLDggKzE4OTQsNyBAQAogaW50IHNzbDNfZ2V0X2NlcnRfc3RhdHVzKFNTTCAqcykKIAl7CiAJaW50IG9rLCBhbDsKLQl1bnNpZ25lZCBsb25nIHJlc3BsZW47Ci0JbG9uZyBuOworCXVuc2lnbmVkIGxvbmcgcmVzcGxlbixuOwogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnA7CiAKIAluPXMtPm1ldGhvZC0+c3NsX2dldF9tZXNzYWdlKHMsCkBAIC0xNzk4LDcgKzE5MjAsNyBAQAogCQlnb3RvIGZfZXJyOwogCQl9CiAJbjJsMyhwLCByZXNwbGVuKTsKLQlpZiAocmVzcGxlbiArIDQgIT0gKHVuc2lnbmVkIGxvbmcpbikKKwlpZiAocmVzcGxlbiArIDQgIT0gbikKIAkJewogCQlhbCA9IFNTTF9BRF9ERUNPREVfRVJST1I7CiAJCVNTTGVycihTU0xfRl9TU0wzX0dFVF9DRVJUX1NUQVRVUyxTU0xfUl9MRU5HVEhfTUlTTUFUQ0gpOwpAQCAtMTg2Nyw3ICsxOTg5LDcgQEAKIAl7CiAJdW5zaWduZWQgY2hhciAqcCwqZDsKIAlpbnQgbjsKLQl1bnNpZ25lZCBsb25nIGw7CisJdW5zaWduZWQgbG9uZyBhbGdfazsKICNpZm5kZWYgT1BFTlNTTF9OT19SU0EKIAl1bnNpZ25lZCBjaGFyICpxOwogCUVWUF9QS0VZICpwa2V5PU5VTEw7CkBAIC0xODg5LDEyICsyMDExLDEyIEBACiAJCWQ9KHVuc2lnbmVkIGNoYXIgKilzLT5pbml0X2J1Zi0+ZGF0YTsKIAkJcD0gJihkWzRdKTsKIAotCQlsPXMtPnMzLT50bXAubmV3X2NpcGhlci0+YWxnb3JpdGhtczsKKwkJYWxnX2s9cy0+czMtPnRtcC5uZXdfY2lwaGVyLT5hbGdvcml0aG1fbWtleTsKIAogCQkvKiBGb29sIGVtYWNzIGluZGVudGF0aW9uICovCiAJCWlmICgwKSB7fQogI2lmbmRlZiBPUEVOU1NMX05PX1JTQQotCQllbHNlIGlmIChsICYgU1NMX2tSU0EpCisJCWVsc2UgaWYgKGFsZ19rICYgU1NMX2tSU0EpCiAJCQl7CiAJCQlSU0EgKnJzYTsKIAkJCXVuc2lnbmVkIGNoYXIgdG1wX2J1ZltTU0xfTUFYX01BU1RFUl9LRVlfTEVOR1RIXTsKQEAgLTE5NTMsNyArMjA3NSw3IEBACiAJCQl9CiAjZW5kaWYKICNpZm5kZWYgT1BFTlNTTF9OT19LUkI1Ci0JCWVsc2UgaWYgKGwgJiBTU0xfa0tSQjUpCisJCWVsc2UgaWYgKGFsZ19rICYgU1NMX2tLUkI1KQogCQkJewogCQkJa3JiNV9lcnJvcl9jb2RlCWtyYjVyYzsKIAkJCUtTU0xfQ1RYCSprc3NsX2N0eCA9IHMtPmtzc2xfY3R4OwpAQCAtMTk2MSw3ICsyMDgzLDcgQEAKIAkJCWtyYjVfZGF0YQkqZW5jX3RpY2tldDsKIAkJCWtyYjVfZGF0YQlhdXRoZW50aWNhdG9yLCAqYXV0aHAgPSBOVUxMOwogCQkJRVZQX0NJUEhFUl9DVFgJY2lwaF9jdHg7Ci0JCQlFVlBfQ0lQSEVSCSplbmMgPSBOVUxMOworCQkJY29uc3QgRVZQX0NJUEhFUiAqZW5jID0gTlVMTDsKIAkJCXVuc2lnbmVkIGNoYXIJaXZbRVZQX01BWF9JVl9MRU5HVEhdOwogCQkJdW5zaWduZWQgY2hhcgl0bXBfYnVmW1NTTF9NQVhfTUFTVEVSX0tFWV9MRU5HVEhdOwogCQkJdW5zaWduZWQgY2hhcgllcG1zW1NTTF9NQVhfTUFTVEVSX0tFWV9MRU5HVEggCkBAIC0xOTcyLDcgKzIwOTQsNyBAQAogCiAjaWZkZWYgS1NTTF9ERUJVRwogCQkJcHJpbnRmKCJzc2wzX3NlbmRfY2xpZW50X2tleV9leGNoYW5nZSglbHggJiAlbHgpXG4iLAotCQkJICAgICAgICBsLCBTU0xfa0tSQjUpOworCQkJCWFsZ19rLCBTU0xfa0tSQjUpOwogI2VuZGlmCS8qIEtTU0xfREVCVUcgKi8KIAogCQkJYXV0aHAgPSBOVUxMOwpAQCAtMjA2NCw3ICsyMTg2LDcgQEAKIAkJCQlzaXplb2YgdG1wX2J1Zik7CiAJCQlFVlBfRW5jcnlwdEZpbmFsX2V4KCZjaXBoX2N0eCwmKGVwbXNbb3V0bF0pLCZwYWRsKTsKIAkJCW91dGwgKz0gcGFkbDsKLQkJCWlmIChvdXRsID4gc2l6ZW9mIGVwbXMpCisJCQlpZiAob3V0bCA+IChpbnQpc2l6ZW9mIGVwbXMpCiAJCQkJewogCQkJCVNTTGVycihTU0xfRl9TU0wzX1NFTkRfQ0xJRU5UX0tFWV9FWENIQU5HRSwgRVJSX1JfSU5URVJOQUxfRVJST1IpOwogCQkJCWdvdG8gZXJyOwpAQCAtMjA3OCw3ICsyMjAwLDcgQEAKIAkJCW4rPW91dGwgKyAyOwogCiAJCQlzLT5zZXNzaW9uLT5tYXN0ZXJfa2V5X2xlbmd0aD0KLQkJCSAgICAgICAgcy0+bWV0aG9kLT5zc2wzX2VuYy0+Z2VuZXJhdGVfbWFzdGVyX3NlY3JldChzLAorCQkJCXMtPm1ldGhvZC0+c3NsM19lbmMtPmdlbmVyYXRlX21hc3Rlcl9zZWNyZXQocywKIAkJCQkJcy0+c2Vzc2lvbi0+bWFzdGVyX2tleSwKIAkJCQkJdG1wX2J1Ziwgc2l6ZW9mIHRtcF9idWYpOwogCkBAIC0yMDg3LDcgKzIyMDksNyBAQAogCQkJfQogI2VuZGlmCiAjaWZuZGVmIE9QRU5TU0xfTk9fREgKLQkJZWxzZSBpZiAobCAmIChTU0xfa0VESHxTU0xfa0RIcnxTU0xfa0RIZCkpCisJCWVsc2UgaWYgKGFsZ19rICYgKFNTTF9rRURIfFNTTF9rREhyfFNTTF9rREhkKSkKIAkJCXsKIAkJCURIICpkaF9zcnZyLCpkaF9jbG50OwogCkBAIC0yMDk2LDcgKzIyMTgsNyBAQAogCQkJCXNzbDNfc2VuZF9hbGVydChzLFNTTDNfQUxfRkFUQUwsU1NMX0FEX1VORVhQRUNURURfTUVTU0FHRSk7CiAJCQkJU1NMZXJyKFNTTF9GX1NTTDNfU0VORF9DTElFTlRfS0VZX0VYQ0hBTkdFLFNTTF9SX1VORVhQRUNURURfTUVTU0FHRSk7CiAJCQkJZ290byBlcnI7Ci0JCQkgICAgICAgIH0KKwkJCQl9CiAKIAkJCWlmIChzLT5zZXNzaW9uLT5zZXNzX2NlcnQtPnBlZXJfZGhfdG1wICE9IE5VTEwpCiAJCQkJZGhfc3J2cj1zLT5zZXNzaW9uLT5zZXNzX2NlcnQtPnBlZXJfZGhfdG1wOwpAQCAtMjE1MSw3ICsyMjczLDcgQEAKICNlbmRpZgogCiAjaWZuZGVmIE9QRU5TU0xfTk9fRUNESCAKLQkJZWxzZSBpZiAoKGwgJiBTU0xfa0VDREgpIHx8IChsICYgU1NMX2tFQ0RIRSkpCisJCWVsc2UgaWYgKGFsZ19rICYgKFNTTF9rRUVDREh8U1NMX2tFQ0RIcnxTU0xfa0VDREhlKSkKIAkJCXsKIAkJCWNvbnN0IEVDX0dST1VQICpzcnZyX2dyb3VwID0gTlVMTDsKIAkJCUVDX0tFWSAqdGtleTsKQEAgLTIxNjMsNyArMjI4NSw3IEBACiAJCQkgKiBjb21wdXRhdGlvbiBhcyBwYXJ0IG9mIGNsaWVudCBjZXJ0aWZpY2F0ZT8KIAkJCSAqIElmIHNvLCBzZXQgZWNkaF9jbG50X2NlcnQgdG8gMS4KIAkJCSAqLwotCQkJaWYgKChsICYgU1NMX2tFQ0RIKSAmJiAocy0+Y2VydCAhPSBOVUxMKSkgCisJCQlpZiAoKGFsZ19rICYgKFNTTF9rRUNESHJ8U1NMX2tFQ0RIZSkpICYmIChzLT5jZXJ0ICE9IE5VTEwpKSAKIAkJCQl7CiAJCQkJLyogWFhYOiBGb3Igbm93LCB3ZSBkbyBub3Qgc3VwcG9ydCBjbGllbnQKIAkJCQkgKiBhdXRoZW50aWNhdGlvbiB1c2luZyBFQ0RIIGNlcnRpZmljYXRlcy4KQEAgLTIzMzUsNiArMjQ1NywxNzggQEAKIAkJCUVWUF9QS0VZX2ZyZWUoc3J2cl9wdWJfcGtleSk7CiAJCQl9CiAjZW5kaWYgLyogIU9QRU5TU0xfTk9fRUNESCAqLworCQllbHNlIGlmIChhbGdfayAmIFNTTF9rR09TVCkgCisJCQl7CisJCQkvKiBHT1NUIGtleSBleGNoYW5nZSBtZXNzYWdlIGNyZWF0aW9uICovCisJCQlFVlBfUEtFWV9DVFggKnBrZXlfY3R4OworCQkJWDUwOSAqcGVlcl9jZXJ0OyAKKwkJCXNpemVfdCBtc2dsZW47CisJCQl1bnNpZ25lZCBpbnQgbWRfbGVuOworCQkJaW50IGtleXR5cGU7CisJCQl1bnNpZ25lZCBjaGFyIHByZW1hc3Rlcl9zZWNyZXRbMzJdLHNoYXJlZF91a21bMzJdLCB0bXBbMjU2XTsKKwkJCUVWUF9NRF9DVFggKnVrbV9oYXNoOworCQkJRVZQX1BLRVkgKnB1Yl9rZXk7CisKKwkJCS8qIEdldCBzZXJ2ZXIgc2VydGlmaWNhdGUgUEtFWSBhbmQgY3JlYXRlIGN0eCBmcm9tIGl0ICovCisJCQlwZWVyX2NlcnQ9cy0+c2Vzc2lvbi0+c2Vzc19jZXJ0LT5wZWVyX3BrZXlzWyhrZXl0eXBlPVNTTF9QS0VZX0dPU1QwMSldLng1MDk7CisJCQlpZiAoIXBlZXJfY2VydCkgCisJCQkJcGVlcl9jZXJ0PXMtPnNlc3Npb24tPnNlc3NfY2VydC0+cGVlcl9wa2V5c1soa2V5dHlwZT1TU0xfUEtFWV9HT1NUOTQpXS54NTA5OworCQkJaWYgKCFwZWVyX2NlcnQpCQl7CisJCQkJCVNTTGVycihTU0xfRl9TU0wzX1NFTkRfQ0xJRU5UX0tFWV9FWENIQU5HRSxTU0xfUl9OT19HT1NUX0NFUlRJRklDQVRFX1NFTlRfQllfUEVFUik7CisJCQkJCWdvdG8gZXJyOworCQkJCX0JCisJCQkJCisJCQlwa2V5X2N0eD1FVlBfUEtFWV9DVFhfbmV3KHB1Yl9rZXk9WDUwOV9nZXRfcHVia2V5KHBlZXJfY2VydCksTlVMTCk7CisJCQkvKiBJZiB3ZSBoYXZlIHNlbmQgYSBjZXJ0aWZpY2F0ZSwgYW5kIGNlcnRpZmljYXRlIGtleQorCisJCQkgKiBwYXJhbWV0ZXJzIG1hdGNoIHRob3NlIG9mIHNlcnZlciBjZXJ0aWZpY2F0ZSwgdXNlCisJCQkgKiBjZXJ0aWZpY2F0ZSBrZXkgZm9yIGtleSBleGNoYW5nZQorCQkJICovCisKKwkJCSAvKiBPdGhlcndpc2UsIGdlbmVyYXRlIGVwaGVtZXJhbCBrZXkgcGFpciAqLworCQkJCQkKKwkJCUVWUF9QS0VZX2VuY3J5cHRfaW5pdChwa2V5X2N0eCk7CisJCQkgIC8qIEdlbmVyYXRlIHNlc3Npb24ga2V5ICovCQorCQkgICAgUkFORF9ieXRlcyhwcmVtYXN0ZXJfc2VjcmV0LDMyKTsKKwkJCS8qIElmIHdlIGhhdmUgY2xpZW50IGNlcnRpZmljYXRlLCB1c2UgaXRzIHNlY3JldCBhcyBwZWVyIGtleSAqLworCQkJaWYgKHMtPnMzLT50bXAuY2VydF9yZXEgJiYgcy0+Y2VydC0+a2V5LT5wcml2YXRla2V5KSB7CisJCQkJaWYgKEVWUF9QS0VZX2Rlcml2ZV9zZXRfcGVlcihwa2V5X2N0eCxzLT5jZXJ0LT5rZXktPnByaXZhdGVrZXkpIDw9MCkgeworCQkJCQkvKiBJZiB0aGVyZSB3YXMgYW4gZXJyb3IgLSBqdXN0IGlnbm9yZSBpdC4gRXBoZW1lcmFsIGtleQorCQkJCQkqIHdvdWxkIGJlIHVzZWQKKwkJCQkJKi8KKwkJCQkJRVJSX2NsZWFyX2Vycm9yKCk7CisJCQkJfQorCQkJfQkJCQorCQkJLyogQ29tcHV0ZSBzaGFyZWQgSVYgYW5kIHN0b3JlIGl0IGluIGFsZ29yaXRobS1zcGVjaWZpYworCQkJICogY29udGV4dCBkYXRhICovCisJCQl1a21faGFzaCA9IEVWUF9NRF9DVFhfY3JlYXRlKCk7CisJCQlFVlBfRGlnZXN0SW5pdCh1a21faGFzaCxFVlBfZ2V0X2RpZ2VzdGJ5bmlkKE5JRF9pZF9Hb3N0UjM0MTFfOTQpKTsKKwkJCUVWUF9EaWdlc3RVcGRhdGUodWttX2hhc2gscy0+czMtPmNsaWVudF9yYW5kb20sU1NMM19SQU5ET01fU0laRSk7CisJCQlFVlBfRGlnZXN0VXBkYXRlKHVrbV9oYXNoLHMtPnMzLT5zZXJ2ZXJfcmFuZG9tLFNTTDNfUkFORE9NX1NJWkUpOworCQkJRVZQX0RpZ2VzdEZpbmFsX2V4KHVrbV9oYXNoLCBzaGFyZWRfdWttLCAmbWRfbGVuKTsKKwkJCUVWUF9NRF9DVFhfZGVzdHJveSh1a21faGFzaCk7CisJCQlpZiAoRVZQX1BLRVlfQ1RYX2N0cmwocGtleV9jdHgsLTEsRVZQX1BLRVlfT1BfRU5DUllQVCxFVlBfUEtFWV9DVFJMX1NFVF9JViwKKwkJCQk4LHNoYXJlZF91a20pPDApIHsKKwkJCQkJU1NMZXJyKFNTTF9GX1NTTDNfU0VORF9DTElFTlRfS0VZX0VYQ0hBTkdFLAorCQkJCQkJU1NMX1JfTElCUkFSWV9CVUcpOworCQkJCQlnb3RvIGVycjsKKwkJCQl9CQorCQkJLyogTWFrZSBHT1NUIGtleXRyYW5zcG9ydCBibG9iIG1lc3NhZ2UgKi8KKwkJCS8qRW5jYXBzdWxhdGUgaXQgaW50byBzZXF1ZW5jZSAqLworCQkJKihwKyspPVZfQVNOMV9TRVFVRU5DRSB8IFZfQVNOMV9DT05TVFJVQ1RFRDsKKwkJCW1zZ2xlbj0yNTU7CisJCQlpZiAoRVZQX1BLRVlfZW5jcnlwdChwa2V5X2N0eCx0bXAsJm1zZ2xlbixwcmVtYXN0ZXJfc2VjcmV0LDMyKTwwKSB7CisJCQlTU0xlcnIoU1NMX0ZfU1NMM19TRU5EX0NMSUVOVF9LRVlfRVhDSEFOR0UsCisJCQkJCVNTTF9SX0xJQlJBUllfQlVHKTsKKwkJCQlnb3RvIGVycjsKKwkJCX0KKwkJCWlmIChtc2dsZW4gPj0gMHg4MCkKKwkJCQl7CisJCQkJKihwKyspPTB4ODE7CisJCQkJKihwKyspPSBtc2dsZW4gJiAweGZmOworCQkJCW49bXNnbGVuKzM7CisJCQkJfQorCQkJZWxzZQorCQkJCXsKKwkJCQkqKHArKyk9IG1zZ2xlbiAmIDB4ZmY7CisJCQkJbj1tc2dsZW4rMjsKKwkJCQl9CisJCQltZW1jcHkocCwgdG1wLCBtc2dsZW4pOworCQkJLyogQ2hlY2sgaWYgcHVia2V5IGZyb20gY2xpZW50IGNlcnRpZmljYXRlIHdhcyB1c2VkICovCisJCQlpZiAoRVZQX1BLRVlfQ1RYX2N0cmwocGtleV9jdHgsIC0xLCAtMSwgRVZQX1BLRVlfQ1RSTF9QRUVSX0tFWSwgMiwgTlVMTCkgPiAwKQorCQkJCXsKKwkJCQkvKiBTZXQgZmxhZyAic2tpcCBjZXJ0aWZpY2F0ZSB2ZXJpZnkiICovCisJCQkJcy0+czMtPmZsYWdzIHw9IFRMUzFfRkxBR1NfU0tJUF9DRVJUX1ZFUklGWTsKKwkJCQl9CisJCQlFVlBfUEtFWV9DVFhfZnJlZShwa2V5X2N0eCk7CisJCQlzLT5zZXNzaW9uLT5tYXN0ZXJfa2V5X2xlbmd0aD0KKwkJCQlzLT5tZXRob2QtPnNzbDNfZW5jLT5nZW5lcmF0ZV9tYXN0ZXJfc2VjcmV0KHMsCisJCQkJCXMtPnNlc3Npb24tPm1hc3Rlcl9rZXkscHJlbWFzdGVyX3NlY3JldCwzMik7CisJCQlFVlBfUEtFWV9mcmVlKHB1Yl9rZXkpOworCisJCQl9CisjaWZuZGVmIE9QRU5TU0xfTk9fUFNLCisJCWVsc2UgaWYgKGFsZ19rICYgU1NMX2tQU0spCisJCQl7CisJCQljaGFyIGlkZW50aXR5W1BTS19NQVhfSURFTlRJVFlfTEVOXTsKKwkJCXVuc2lnbmVkIGNoYXIgKnQgPSBOVUxMOworCQkJdW5zaWduZWQgY2hhciBwc2tfb3JfcHJlX21zW1BTS19NQVhfUFNLX0xFTioyKzRdOworCQkJdW5zaWduZWQgaW50IHByZV9tc19sZW4gPSAwLCBwc2tfbGVuID0gMDsKKwkJCWludCBwc2tfZXJyID0gMTsKKworCQkJbiA9IDA7CisJCQlpZiAocy0+cHNrX2NsaWVudF9jYWxsYmFjayA9PSBOVUxMKQorCQkJCXsKKwkJCQlTU0xlcnIoU1NMX0ZfU1NMM19TRU5EX0NMSUVOVF9LRVlfRVhDSEFOR0UsCisJCQkJCVNTTF9SX1BTS19OT19DTElFTlRfQ0IpOworCQkJCWdvdG8gZXJyOworCQkJCX0KKworCQkJcHNrX2xlbiA9IHMtPnBza19jbGllbnRfY2FsbGJhY2socywgcy0+Y3R4LT5wc2tfaWRlbnRpdHlfaGludCwKKwkJCQlpZGVudGl0eSwgUFNLX01BWF9JREVOVElUWV9MRU4sCisJCQkJcHNrX29yX3ByZV9tcywgc2l6ZW9mKHBza19vcl9wcmVfbXMpKTsKKwkJCWlmIChwc2tfbGVuID4gUFNLX01BWF9QU0tfTEVOKQorCQkJCXsKKwkJCQlTU0xlcnIoU1NMX0ZfU1NMM19TRU5EX0NMSUVOVF9LRVlfRVhDSEFOR0UsCisJCQkJCUVSUl9SX0lOVEVSTkFMX0VSUk9SKTsKKwkJCQlnb3RvIHBza19lcnI7CisJCQkJfQorCQkJZWxzZSBpZiAocHNrX2xlbiA9PSAwKQorCQkJCXsKKwkJCQlTU0xlcnIoU1NMX0ZfU1NMM19TRU5EX0NMSUVOVF9LRVlfRVhDSEFOR0UsCisJCQkJCVNTTF9SX1BTS19JREVOVElUWV9OT1RfRk9VTkQpOworCQkJCWdvdG8gcHNrX2VycjsKKwkJCQl9CisKKwkJCS8qIGNyZWF0ZSBQU0sgcHJlX21hc3Rlcl9zZWNyZXQgKi8KKwkJCXByZV9tc19sZW4gPSAyK3Bza19sZW4rMitwc2tfbGVuOworCQkJdCA9IHBza19vcl9wcmVfbXM7CisJCQltZW1tb3ZlKHBza19vcl9wcmVfbXMrcHNrX2xlbis0LCBwc2tfb3JfcHJlX21zLCBwc2tfbGVuKTsKKwkJCXMybihwc2tfbGVuLCB0KTsKKwkJCW1lbXNldCh0LCAwLCBwc2tfbGVuKTsKKwkJCXQrPXBza19sZW47CisJCQlzMm4ocHNrX2xlbiwgdCk7CisKKwkJCWlmIChzLT5zZXNzaW9uLT5wc2tfaWRlbnRpdHlfaGludCAhPSBOVUxMKQorCQkJCU9QRU5TU0xfZnJlZShzLT5zZXNzaW9uLT5wc2tfaWRlbnRpdHlfaGludCk7CisJCQlzLT5zZXNzaW9uLT5wc2tfaWRlbnRpdHlfaGludCA9IEJVRl9zdHJkdXAocy0+Y3R4LT5wc2tfaWRlbnRpdHlfaGludCk7CisJCQlpZiAocy0+Y3R4LT5wc2tfaWRlbnRpdHlfaGludCAhPSBOVUxMICYmCisJCQkJcy0+c2Vzc2lvbi0+cHNrX2lkZW50aXR5X2hpbnQgPT0gTlVMTCkKKwkJCQl7CisJCQkJU1NMZXJyKFNTTF9GX1NTTDNfU0VORF9DTElFTlRfS0VZX0VYQ0hBTkdFLAorCQkJCQlFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CisJCQkJZ290byBwc2tfZXJyOworCQkJCX0KKworCQkJaWYgKHMtPnNlc3Npb24tPnBza19pZGVudGl0eSAhPSBOVUxMKQorCQkJCU9QRU5TU0xfZnJlZShzLT5zZXNzaW9uLT5wc2tfaWRlbnRpdHkpOworCQkJcy0+c2Vzc2lvbi0+cHNrX2lkZW50aXR5ID0gQlVGX3N0cmR1cChpZGVudGl0eSk7CisJCQlpZiAocy0+c2Vzc2lvbi0+cHNrX2lkZW50aXR5ID09IE5VTEwpCisJCQkJeworCQkJCVNTTGVycihTU0xfRl9TU0wzX1NFTkRfQ0xJRU5UX0tFWV9FWENIQU5HRSwKKwkJCQkJRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOworCQkJCWdvdG8gcHNrX2VycjsKKwkJCQl9CisKKwkJCXMtPnNlc3Npb24tPm1hc3Rlcl9rZXlfbGVuZ3RoID0KKwkJCQlzLT5tZXRob2QtPnNzbDNfZW5jLT5nZW5lcmF0ZV9tYXN0ZXJfc2VjcmV0KHMsCisJCQkJCXMtPnNlc3Npb24tPm1hc3Rlcl9rZXksCisJCQkJCXBza19vcl9wcmVfbXMsIHByZV9tc19sZW4pOyAKKwkJCW4gPSBzdHJsZW4oaWRlbnRpdHkpOworCQkJczJuKG4sIHApOworCQkJbWVtY3B5KHAsIGlkZW50aXR5LCBuKTsKKwkJCW4rPTI7CisJCQlwc2tfZXJyID0gMDsKKwkJcHNrX2VycjoKKwkJCU9QRU5TU0xfY2xlYW5zZShpZGVudGl0eSwgUFNLX01BWF9JREVOVElUWV9MRU4pOworCQkJT1BFTlNTTF9jbGVhbnNlKHBza19vcl9wcmVfbXMsIHNpemVvZihwc2tfb3JfcHJlX21zKSk7CisJCQlpZiAocHNrX2VyciAhPSAwKQorCQkJCXsKKwkJCQlzc2wzX3NlbmRfYWxlcnQocywgU1NMM19BTF9GQVRBTCwgU1NMX0FEX0hBTkRTSEFLRV9GQUlMVVJFKTsKKwkJCQlnb3RvIGVycjsKKwkJCQl9CisJCQl9CisjZW5kaWYKIAkJZWxzZQogCQkJewogCQkJc3NsM19zZW5kX2FsZXJ0KHMsIFNTTDNfQUxfRkFUQUwsCkBAIC0yMzcxLDI4ICsyNjY1LDM3IEBACiAJdW5zaWduZWQgY2hhciAqcCwqZDsKIAl1bnNpZ25lZCBjaGFyIGRhdGFbTUQ1X0RJR0VTVF9MRU5HVEgrU0hBX0RJR0VTVF9MRU5HVEhdOwogCUVWUF9QS0VZICpwa2V5OworCUVWUF9QS0VZX0NUWCAqcGN0eD1OVUxMOwogI2lmbmRlZiBPUEVOU1NMX05PX1JTQQogCXVuc2lnbmVkIHU9MDsKICNlbmRpZgogCXVuc2lnbmVkIGxvbmcgbjsKLSNpZiAhZGVmaW5lZChPUEVOU1NMX05PX0RTQSkgfHwgIWRlZmluZWQoT1BFTlNTTF9OT19FQ0RTQSkKIAlpbnQgajsKLSNlbmRpZgogCiAJaWYgKHMtPnN0YXRlID09IFNTTDNfU1RfQ1dfQ0VSVF9WUkZZX0EpCiAJCXsKIAkJZD0odW5zaWduZWQgY2hhciAqKXMtPmluaXRfYnVmLT5kYXRhOwogCQlwPSAmKGRbNF0pOwogCQlwa2V5PXMtPmNlcnQtPmtleS0+cHJpdmF0ZWtleTsKLQotCQlzLT5tZXRob2QtPnNzbDNfZW5jLT5jZXJ0X3ZlcmlmeV9tYWMocywmKHMtPnMzLT5maW5pc2hfZGdzdDIpLAotCQkJJihkYXRhW01ENV9ESUdFU1RfTEVOR1RIXSkpOwotCisvKiBDcmVhdGUgY29udGV4dCBmcm9tIGtleSBhbmQgdGVzdCBpZiBzaGExIGlzIGFsbG93ZWQgYXMgZGlnZXN0ICovCisJCXBjdHggPSBFVlBfUEtFWV9DVFhfbmV3KHBrZXksTlVMTCk7CisJCUVWUF9QS0VZX3NpZ25faW5pdChwY3R4KTsKKwkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfc2lnbmF0dXJlX21kKHBjdHgsIEVWUF9zaGExKCkpPjApCisJCQl7CisJCQlzLT5tZXRob2QtPnNzbDNfZW5jLT5jZXJ0X3ZlcmlmeV9tYWMocywKKwkJCQkJCU5JRF9zaGExLAorCQkJCQkJJihkYXRhW01ENV9ESUdFU1RfTEVOR1RIXSkpOworCQkJfQorCQllbHNlCisJCQl7CisJCQlFUlJfY2xlYXJfZXJyb3IoKTsKKwkJCX0KICNpZm5kZWYgT1BFTlNTTF9OT19SU0EKIAkJaWYgKHBrZXktPnR5cGUgPT0gRVZQX1BLRVlfUlNBKQogCQkJewogCQkJcy0+bWV0aG9kLT5zc2wzX2VuYy0+Y2VydF92ZXJpZnlfbWFjKHMsCi0JCQkJJihzLT5zMy0+ZmluaXNoX2Rnc3QxKSwmKGRhdGFbMF0pKTsKKwkJCQlOSURfbWQ1LAorCQkJIAkmKGRhdGFbMF0pKTsKIAkJCWlmIChSU0Ffc2lnbihOSURfbWQ1X3NoYTEsIGRhdGEsCiAJCQkJCSBNRDVfRElHRVNUX0xFTkdUSCtTSEFfRElHRVNUX0xFTkdUSCwKIAkJCQkJJihwWzJdKSwgJnUsIHBrZXktPnBrZXkucnNhKSA8PSAwICkKQEAgLTI0MzgsMTAgKzI3NDEsMzAgQEAKIAkJCX0KIAkJZWxzZQogI2VuZGlmCi0JCQl7CisJCWlmIChwa2V5LT50eXBlID09IE5JRF9pZF9Hb3N0UjM0MTBfOTQgfHwgcGtleS0+dHlwZSA9PSBOSURfaWRfR29zdFIzNDEwXzIwMDEpIAorCQl7CisJCXVuc2lnbmVkIGNoYXIgc2lnbmJ1Zls2NF07CisJCWludCBpOworCQlzaXplX3Qgc2lnc2l6ZT02NDsKKwkJcy0+bWV0aG9kLT5zc2wzX2VuYy0+Y2VydF92ZXJpZnlfbWFjKHMsCisJCQlOSURfaWRfR29zdFIzNDExXzk0LAorCQkJZGF0YSk7CisJCWlmIChFVlBfUEtFWV9zaWduKHBjdHgsIHNpZ25idWYsICZzaWdzaXplLCBkYXRhLCAzMikgPD0gMCkgeworCQkJU1NMZXJyKFNTTF9GX1NTTDNfU0VORF9DTElFTlRfVkVSSUZZLAorCQkJRVJSX1JfSU5URVJOQUxfRVJST1IpOworCQkJZ290byBlcnI7CisJCX0KKwkJZm9yIChpPTYzLGo9MDsgaT49MDsgaisrLCBpLS0pIHsKKwkJCXBbMitqXT1zaWduYnVmW2ldOworCQl9CQorCQlzMm4oaixwKTsKKwkJbj1qKzI7CisJCX0KKwkJZWxzZQorCQl7CiAJCQlTU0xlcnIoU1NMX0ZfU1NMM19TRU5EX0NMSUVOVF9WRVJJRlksRVJSX1JfSU5URVJOQUxfRVJST1IpOwogCQkJZ290byBlcnI7Ci0JCQl9CisJCX0KIAkJKihkKyspPVNTTDNfTVRfQ0VSVElGSUNBVEVfVkVSSUZZOwogCQlsMm4zKG4sZCk7CiAKQEAgLTI0NDksOCArMjc3MiwxMCBAQAogCQlzLT5pbml0X251bT0oaW50KW4rNDsKIAkJcy0+aW5pdF9vZmY9MDsKIAkJfQorCUVWUF9QS0VZX0NUWF9mcmVlKHBjdHgpOwogCXJldHVybihzc2wzX2RvX3dyaXRlKHMsU1NMM19SVF9IQU5EU0hBS0UpKTsKIGVycjoKKwlFVlBfUEtFWV9DVFhfZnJlZShwY3R4KTsKIAlyZXR1cm4oLTEpOwogCX0KIApAQCAtMjUzNSw3ICsyODYwLDcgQEAKIGludCBzc2wzX2NoZWNrX2NlcnRfYW5kX2FsZ29yaXRobShTU0wgKnMpCiAJewogCWludCBpLGlkeDsKLQlsb25nIGFsZ3M7CisJbG9uZyBhbGdfayxhbGdfYTsKIAlFVlBfUEtFWSAqcGtleT1OVUxMOwogCVNFU1NfQ0VSVCAqc2M7CiAjaWZuZGVmIE9QRU5TU0xfTk9fUlNBCkBAIC0yNTQ1LDE0ICsyODcwLDE0IEBACiAJREggKmRoOwogI2VuZGlmCiAKLQlzYz1zLT5zZXNzaW9uLT5zZXNzX2NlcnQ7Ci0KLQlhbGdzPXMtPnMzLT50bXAubmV3X2NpcGhlci0+YWxnb3JpdGhtczsKKwlhbGdfaz1zLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobV9ta2V5OworCWFsZ19hPXMtPnMzLT50bXAubmV3X2NpcGhlci0+YWxnb3JpdGhtX2F1dGg7CiAKIAkvKiB3ZSBkb24ndCBoYXZlIGEgY2VydGlmaWNhdGUgKi8KLQlpZiAoYWxncyAmIChTU0xfYURIfFNTTF9hTlVMTHxTU0xfYUtSQjUpKQorCWlmICgoYWxnX2EgJiAoU1NMX2FESHxTU0xfYU5VTEx8U1NMX2FLUkI1KSkgfHwgKGFsZ19rICYgU1NMX2tQU0spKQogCQlyZXR1cm4oMSk7CiAKKwlzYz1zLT5zZXNzaW9uLT5zZXNzX2NlcnQ7CiAJaWYgKHNjID09IE5VTEwpCiAJCXsKIAkJU1NMZXJyKFNTTF9GX1NTTDNfQ0hFQ0tfQ0VSVF9BTkRfQUxHT1JJVEhNLEVSUl9SX0lOVEVSTkFMX0VSUk9SKTsKQEAgLTI1NzIsMTEgKzI4OTcsMTEgQEAKICNpZm5kZWYgT1BFTlNTTF9OT19FQ0RICiAJaWYgKGlkeCA9PSBTU0xfUEtFWV9FQ0MpCiAJCXsKLQkJaWYgKGNoZWNrX3NydnJfZWNjX2NlcnRfYW5kX2FsZyhzYy0+cGVlcl9wa2V5c1tpZHhdLng1MDksCisJCWlmIChzc2xfY2hlY2tfc3J2cl9lY2NfY2VydF9hbmRfYWxnKHNjLT5wZWVyX3BrZXlzW2lkeF0ueDUwOSwKIAkJICAgIHMtPnMzLT50bXAubmV3X2NpcGhlcikgPT0gMCkgCiAJCQl7IC8qIGNoZWNrIGZhaWxlZCAqLwogCQkJU1NMZXJyKFNTTF9GX1NTTDNfQ0hFQ0tfQ0VSVF9BTkRfQUxHT1JJVEhNLFNTTF9SX0JBRF9FQ0NfQ0VSVCk7Ci0JCQlnb3RvIGZfZXJyOwkJCQorCQkJZ290byBmX2VycjsKIAkJCX0KIAkJZWxzZSAKIAkJCXsKQEAgLTI1OTAsMjAgKzI5MTUsMjAgQEAKIAogCQogCS8qIENoZWNrIHRoYXQgd2UgaGF2ZSBhIGNlcnRpZmljYXRlIGlmIHdlIHJlcXVpcmUgb25lICovCi0JaWYgKChhbGdzICYgU1NMX2FSU0EpICYmICFoYXNfYml0cyhpLEVWUF9QS19SU0F8RVZQX1BLVF9TSUdOKSkKKwlpZiAoKGFsZ19hICYgU1NMX2FSU0EpICYmICFoYXNfYml0cyhpLEVWUF9QS19SU0F8RVZQX1BLVF9TSUdOKSkKIAkJewogCQlTU0xlcnIoU1NMX0ZfU1NMM19DSEVDS19DRVJUX0FORF9BTEdPUklUSE0sU1NMX1JfTUlTU0lOR19SU0FfU0lHTklOR19DRVJUKTsKIAkJZ290byBmX2VycjsKIAkJfQogI2lmbmRlZiBPUEVOU1NMX05PX0RTQQotCWVsc2UgaWYgKChhbGdzICYgU1NMX2FEU1MpICYmICFoYXNfYml0cyhpLEVWUF9QS19EU0F8RVZQX1BLVF9TSUdOKSkKKwllbHNlIGlmICgoYWxnX2EgJiBTU0xfYURTUykgJiYgIWhhc19iaXRzKGksRVZQX1BLX0RTQXxFVlBfUEtUX1NJR04pKQogCQl7CiAJCVNTTGVycihTU0xfRl9TU0wzX0NIRUNLX0NFUlRfQU5EX0FMR09SSVRITSxTU0xfUl9NSVNTSU5HX0RTQV9TSUdOSU5HX0NFUlQpOwogCQlnb3RvIGZfZXJyOwogCQl9CiAjZW5kaWYKICNpZm5kZWYgT1BFTlNTTF9OT19SU0EKLQlpZiAoKGFsZ3MgJiBTU0xfa1JTQSkgJiYKKwlpZiAoKGFsZ19rICYgU1NMX2tSU0EpICYmCiAJCSEoaGFzX2JpdHMoaSxFVlBfUEtfUlNBfEVWUF9QS1RfRU5DKSB8fCAocnNhICE9IE5VTEwpKSkKIAkJewogCQlTU0xlcnIoU1NMX0ZfU1NMM19DSEVDS19DRVJUX0FORF9BTEdPUklUSE0sU1NMX1JfTUlTU0lOR19SU0FfRU5DUllQVElOR19DRVJUKTsKQEAgLTI2MTEsMTkgKzI5MzYsMTkgQEAKIAkJfQogI2VuZGlmCiAjaWZuZGVmIE9QRU5TU0xfTk9fREgKLQlpZiAoKGFsZ3MgJiBTU0xfa0VESCkgJiYKKwlpZiAoKGFsZ19rICYgU1NMX2tFREgpICYmCiAJCSEoaGFzX2JpdHMoaSxFVlBfUEtfREh8RVZQX1BLVF9FWENIKSB8fCAoZGggIT0gTlVMTCkpKQogCQl7CiAJCVNTTGVycihTU0xfRl9TU0wzX0NIRUNLX0NFUlRfQU5EX0FMR09SSVRITSxTU0xfUl9NSVNTSU5HX0RIX0tFWSk7CiAJCWdvdG8gZl9lcnI7CiAJCX0KLQllbHNlIGlmICgoYWxncyAmIFNTTF9rREhyKSAmJiAhaGFzX2JpdHMoaSxFVlBfUEtfREh8RVZQX1BLU19SU0EpKQorCWVsc2UgaWYgKChhbGdfayAmIFNTTF9rREhyKSAmJiAhaGFzX2JpdHMoaSxFVlBfUEtfREh8RVZQX1BLU19SU0EpKQogCQl7CiAJCVNTTGVycihTU0xfRl9TU0wzX0NIRUNLX0NFUlRfQU5EX0FMR09SSVRITSxTU0xfUl9NSVNTSU5HX0RIX1JTQV9DRVJUKTsKIAkJZ290byBmX2VycjsKIAkJfQogI2lmbmRlZiBPUEVOU1NMX05PX0RTQQotCWVsc2UgaWYgKChhbGdzICYgU1NMX2tESGQpICYmICFoYXNfYml0cyhpLEVWUF9QS19ESHxFVlBfUEtTX0RTQSkpCisJZWxzZSBpZiAoKGFsZ19rICYgU1NMX2tESGQpICYmICFoYXNfYml0cyhpLEVWUF9QS19ESHxFVlBfUEtTX0RTQSkpCiAJCXsKIAkJU1NMZXJyKFNTTF9GX1NTTDNfQ0hFQ0tfQ0VSVF9BTkRfQUxHT1JJVEhNLFNTTF9SX01JU1NJTkdfREhfRFNBX0NFUlQpOwogCQlnb3RvIGZfZXJyOwpAQCAtMjYzNCw3ICsyOTU5LDcgQEAKIAlpZiAoU1NMX0NfSVNfRVhQT1JUKHMtPnMzLT50bXAubmV3X2NpcGhlcikgJiYgIWhhc19iaXRzKGksRVZQX1BLVF9FWFApKQogCQl7CiAjaWZuZGVmIE9QRU5TU0xfTk9fUlNBCi0JCWlmIChhbGdzICYgU1NMX2tSU0EpCisJCWlmIChhbGdfayAmIFNTTF9rUlNBKQogCQkJewogCQkJaWYgKHJzYSA9PSBOVUxMCiAJCQkgICAgfHwgUlNBX3NpemUocnNhKSo4ID4gU1NMX0NfRVhQT1JUX1BLRVlMRU5HVEgocy0+czMtPnRtcC5uZXdfY2lwaGVyKSkKQEAgLTI2NDYsNyArMjk3MSw3IEBACiAJCWVsc2UKICNlbmRpZgogI2lmbmRlZiBPUEVOU1NMX05PX0RICi0JCQlpZiAoYWxncyAmIChTU0xfa0VESHxTU0xfa0RIcnxTU0xfa0RIZCkpCisJCQlpZiAoYWxnX2sgJiAoU1NMX2tFREh8U1NMX2tESHJ8U1NMX2tESGQpKQogCQkJICAgIHsKIAkJCSAgICBpZiAoZGggPT0gTlVMTAogCQkJCXx8IERIX3NpemUoZGgpKjggPiBTU0xfQ19FWFBPUlRfUEtFWUxFTkdUSChzLT5zMy0+dG1wLm5ld19jaXBoZXIpKQpAQCAtMjY2OSw0OSArMjk5NCw2IEBACiAJcmV0dXJuKDApOwogCX0KIAotCi0jaWZuZGVmIE9QRU5TU0xfTk9fRUNESAotLyogVGhpcyBpcyB0aGUgY29tcGxlbWVudCBvZiBuaWQyY3VydmVfaWQgaW4gczNfc3J2ci5jLiAqLwotc3RhdGljIGludCBjdXJ2ZV9pZDJuaWQoaW50IGN1cnZlX2lkKQotewotCS8qIEVDQyBjdXJ2ZXMgZnJvbSBkcmFmdC1pZXRmLXRscy1lY2MtMDEudHh0IChNYXIgMTUsIDIwMDEpCi0JICogKG5vIGNoYW5nZXMgaW4gZHJhZnQtaWV0Zi10bHMtZWNjLTAzLnR4dCBbSnVuZSAyMDAzXSkgKi8KLQlzdGF0aWMgaW50IG5pZF9saXN0WzI2XSA9Ci0JewotCQkwLAotCQlOSURfc2VjdDE2M2sxLCAvKiBzZWN0MTYzazEgKDEpICovCi0JCU5JRF9zZWN0MTYzcjEsIC8qIHNlY3QxNjNyMSAoMikgKi8KLQkJTklEX3NlY3QxNjNyMiwgLyogc2VjdDE2M3IyICgzKSAqLwotCQlOSURfc2VjdDE5M3IxLCAvKiBzZWN0MTkzcjEgKDQpICovIAotCQlOSURfc2VjdDE5M3IyLCAvKiBzZWN0MTkzcjIgKDUpICovIAotCQlOSURfc2VjdDIzM2sxLCAvKiBzZWN0MjMzazEgKDYpICovCi0JCU5JRF9zZWN0MjMzcjEsIC8qIHNlY3QyMzNyMSAoNykgKi8gCi0JCU5JRF9zZWN0MjM5azEsIC8qIHNlY3QyMzlrMSAoOCkgKi8gCi0JCU5JRF9zZWN0MjgzazEsIC8qIHNlY3QyODNrMSAoOSkgKi8KLQkJTklEX3NlY3QyODNyMSwgLyogc2VjdDI4M3IxICgxMCkgKi8gCi0JCU5JRF9zZWN0NDA5azEsIC8qIHNlY3Q0MDlrMSAoMTEpICovIAotCQlOSURfc2VjdDQwOXIxLCAvKiBzZWN0NDA5cjEgKDEyKSAqLwotCQlOSURfc2VjdDU3MWsxLCAvKiBzZWN0NTcxazEgKDEzKSAqLyAKLQkJTklEX3NlY3Q1NzFyMSwgLyogc2VjdDU3MXIxICgxNCkgKi8gCi0JCU5JRF9zZWNwMTYwazEsIC8qIHNlY3AxNjBrMSAoMTUpICovCi0JCU5JRF9zZWNwMTYwcjEsIC8qIHNlY3AxNjByMSAoMTYpICovIAotCQlOSURfc2VjcDE2MHIyLCAvKiBzZWNwMTYwcjIgKDE3KSAqLyAKLQkJTklEX3NlY3AxOTJrMSwgLyogc2VjcDE5MmsxICgxOCkgKi8KLQkJTklEX1g5XzYyX3ByaW1lMTkydjEsIC8qIHNlY3AxOTJyMSAoMTkpICovIAotCQlOSURfc2VjcDIyNGsxLCAvKiBzZWNwMjI0azEgKDIwKSAqLyAKLQkJTklEX3NlY3AyMjRyMSwgLyogc2VjcDIyNHIxICgyMSkgKi8KLQkJTklEX3NlY3AyNTZrMSwgLyogc2VjcDI1NmsxICgyMikgKi8gCi0JCU5JRF9YOV82Ml9wcmltZTI1NnYxLCAvKiBzZWNwMjU2cjEgKDIzKSAqLyAKLQkJTklEX3NlY3AzODRyMSwgLyogc2VjcDM4NHIxICgyNCkgKi8KLQkJTklEX3NlY3A1MjFyMSAgLyogc2VjcDUyMXIxICgyNSkgKi8JCi0JfTsKLQkKLQlpZiAoKGN1cnZlX2lkIDwgMSkgfHwgKGN1cnZlX2lkID4gMjUpKSByZXR1cm4gMDsKLQotCXJldHVybiBuaWRfbGlzdFtjdXJ2ZV9pZF07Ci19Ci0jZW5kaWYKLQogLyogQ2hlY2sgdG8gc2VlIGlmIGhhbmRzaGFrZSBpcyBmdWxsIG9yIHJlc3VtZWQuIFVzdWFsbHkgdGhpcyBpcyBqdXN0IGEKICAqIGNhc2Ugb2YgY2hlY2tpbmcgdG8gc2VlIGlmIGEgY2FjaGUgaGl0IGhhcyBvY2N1cnJlZC4gSW4gdGhlIGNhc2Ugb2YKICAqIHNlc3Npb24gdGlja2V0cyB3ZSBoYXZlIHRvIGNoZWNrIHRoZSBuZXh0IG1lc3NhZ2UgdG8gYmUgc3VyZS4KQEAgLTI3MjIsMTEgKzMwMDQsOCBAQAogCXsKIAlpbnQgb2s7CiAJbG9uZyBuOwotCS8qIElmIHdlIGhhdmUgbm8gdGlja2V0IG9yIHNlc3Npb24gSUQgaXMgbm9uLXplcm8gbGVuZ3RoIChhIG1hdGNoIG9mCi0JICogYSBub24temVybyBzZXNzaW9uIGxlbmd0aCB3b3VsZCBuZXZlciByZWFjaCBoZXJlKSBpdCBjYW5ub3QgYmUgYQotCSAqIHJlc3VtZWQgc2Vzc2lvbi4KLQkgKi8KLQlpZiAoIXMtPnNlc3Npb24tPnRsc2V4dF90aWNrIHx8IHMtPnNlc3Npb24tPnNlc3Npb25faWRfbGVuZ3RoKQorCS8qIElmIHdlIGhhdmUgbm8gdGlja2V0IGl0IGNhbm5vdCBiZSBhIHJlc3VtZWQgc2Vzc2lvbi4gKi8KKwlpZiAoIXMtPnNlc3Npb24tPnRsc2V4dF90aWNrKQogCQlyZXR1cm4gMTsKIAkvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHdlIHJlYWxseSBleHBlY3QgYSBDZXJ0aWZpY2F0ZQogCSAqIG1lc3NhZ2UsIHNvIHBlcm1pdCBhcHByb3ByaWF0ZSBtZXNzYWdlIGxlbmd0aCAqLwpkaWZmIC0tZ2l0IGEvc3NsL3MzX2VuYy5jIGIvc3NsL3MzX2VuYy5jCmluZGV4IDA2ZTU0NjYuLjNkN2FlYzkgMTAwNjQ0Ci0tLSBhL3NzbC9zM19lbmMuYworKysgYi9zc2wvczNfZW5jLmMKQEAgLTU2LDcgKzU2LDcgQEAKICAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCiAgKi8KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMiBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDgsNiArMTA4LDMyIEBACiAgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KICAqCiAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgMjAwNSBOb2tpYS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGUgcG9ydGlvbnMgb2YgdGhlIGF0dGFjaGVkIHNvZnR3YXJlICgiQ29udHJpYnV0aW9uIikgaXMgZGV2ZWxvcGVkIGJ5CisgKiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQgaXMgbGljZW5zZWQgcHVyc3VhbnQgdG8gdGhlIE9wZW5TU0wgb3BlbiBzb3VyY2UKKyAqIGxpY2Vuc2UuCisgKgorICogVGhlIENvbnRyaWJ1dGlvbiwgb3JpZ2luYWxseSB3cml0dGVuIGJ5IE1pa2EgS291c2EgYW5kIFBhc2kgRXJvbmVuIG9mCisgKiBOb2tpYSBDb3Jwb3JhdGlvbiwgY29uc2lzdHMgb2YgdGhlICJQU0siIChQcmUtU2hhcmVkIEtleSkgY2lwaGVyc3VpdGVzCisgKiBzdXBwb3J0IChzZWUgUkZDIDQyNzkpIHRvIE9wZW5TU0wuCisgKgorICogTm8gcGF0ZW50IGxpY2Vuc2VzIG9yIG90aGVyIHJpZ2h0cyBleGNlcHQgdGhvc2UgZXhwcmVzc2x5IHN0YXRlZCBpbgorICogdGhlIE9wZW5TU0wgb3BlbiBzb3VyY2UgbGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgZ3JhbnRlZCBvciByZWNlaXZlZAorICogZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwsIG9yIG90aGVyd2lzZS4KKyAqCisgKiBObyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBOb2tpYSB0aGF0IHRoZSBDb250cmlidXRpb24gZG9lcyBub3QKKyAqIGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkgdGhpcmQKKyAqIHBhcnR5IG9yIHRoYXQgdGhlIGxpY2Vuc2UgcHJvdmlkZXMgeW91IHdpdGggYWxsIHRoZSBuZWNlc3NhcnkgcmlnaHRzCisgKiB0byBtYWtlIHVzZSBvZiB0aGUgQ29udHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQuIElOCisgKiBBRERJVElPTiBUTyBUSEUgRElTQ0xBSU1FUlMgSU5DTFVERUQgSU4gVEhFIExJQ0VOU0UsIE5PS0lBCisgKiBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1TIEFOWSBMSUFCSUxJVFkgRk9SIENMQUlNUyBCUk9VR0hUIEJZIFlPVSBPUiBBTlkKKyAqIE9USEVSIEVOVElUWSBCQVNFRCBPTiBJTkZSSU5HRU1FTlQgT0YgSU5URUxMRUNUVUFMIFBST1BFUlRZIFJJR0hUUyBPUgorICogT1RIRVJXSVNFLgorICovCiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgInNzbF9sb2NsLmgiCkBAIC0xMjksMTAgKzE1NSw4IEBACiAJMHg1YywweDVjLDB4NWMsMHg1YywweDVjLDB4NWMsMHg1YywweDVjLAogCTB4NWMsMHg1YywweDVjLDB4NWMsMHg1YywweDVjLDB4NWMsMHg1YywKIAkweDVjLDB4NWMsMHg1YywweDVjLDB4NWMsMHg1YywweDVjLDB4NWMgfTsKLQotc3RhdGljIGludCBzc2wzX2hhbmRzaGFrZV9tYWMoU1NMICpzLCBFVlBfTURfQ1RYICppbl9jdHgsCitzdGF0aWMgaW50IHNzbDNfaGFuZHNoYWtlX21hYyhTU0wgKnMsIGludCBtZF9uaWQsCiAJY29uc3QgY2hhciAqc2VuZGVyLCBpbnQgbGVuLCB1bnNpZ25lZCBjaGFyICpwKTsKLQogc3RhdGljIGludCBzc2wzX2dlbmVyYXRlX2tleV9ibG9jayhTU0wgKnMsIHVuc2lnbmVkIGNoYXIgKmttLCBpbnQgbnVtKQogCXsKIAlFVlBfTURfQ1RYIG01OwpAQCAtMTQ2LDcgKzE3MCw2IEBACiAjZW5kaWYKIAlrPTA7CiAJRVZQX01EX0NUWF9pbml0KCZtNSk7Ci0JRVZQX01EX0NUWF9zZXRfZmxhZ3MoJm01LCBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpOwogCUVWUF9NRF9DVFhfaW5pdCgmczEpOwogCWZvciAoaT0wOyAoaW50KWk8bnVtOyBpKz1NRDVfRElHRVNUX0xFTkdUSCkKIAkJewpAQCAtMjA4LDYgKzIzMSw4IEBACiAJaXNfZXhwPVNTTF9DX0lTX0VYUE9SVChzLT5zMy0+dG1wLm5ld19jaXBoZXIpOwogCWM9cy0+czMtPnRtcC5uZXdfc3ltX2VuYzsKIAltPXMtPnMzLT50bXAubmV3X2hhc2g7CisJLyogbSA9PSBOVUxMIHdpbGwgbGVhZCB0byBhIGNyYXNoIGxhdGVyICovCisJT1BFTlNTTF9hc3NlcnQobSk7CiAjaWZuZGVmIE9QRU5TU0xfTk9fQ09NUAogCWlmIChzLT5zMy0+dG1wLm5ld19jb21wcmVzc2lvbiA9PSBOVUxMKQogCQljb21wPU5VTEw7CkBAIC0yMjYsNyArMjUxLDggQEAKIAkJCS8qIG1ha2Ugc3VyZSBpdCdzIGludGlhbGl6ZWQgaW4gY2FzZSB3ZSBleGl0IGxhdGVyIHdpdGggYW4gZXJyb3IgKi8KIAkJCUVWUF9DSVBIRVJfQ1RYX2luaXQocy0+ZW5jX3JlYWRfY3R4KTsKIAkJZGQ9IHMtPmVuY19yZWFkX2N0eDsKLQkJcy0+cmVhZF9oYXNoPW07CisKKwkJc3NsX3JlcGxhY2VfaGFzaCgmcy0+cmVhZF9oYXNoLG0pOwogI2lmbmRlZiBPUEVOU1NMX05PX0NPTVAKIAkJLyogQ09NUFJFU1MgKi8KIAkJaWYgKHMtPmV4cGFuZCAhPSBOVUxMKQpAQCAtMjYyLDcgKzI4OCw3IEBACiAJCQkvKiBtYWtlIHN1cmUgaXQncyBpbnRpYWxpemVkIGluIGNhc2Ugd2UgZXhpdCBsYXRlciB3aXRoIGFuIGVycm9yICovCiAJCQlFVlBfQ0lQSEVSX0NUWF9pbml0KHMtPmVuY193cml0ZV9jdHgpOwogCQlkZD0gcy0+ZW5jX3dyaXRlX2N0eDsKLQkJcy0+d3JpdGVfaGFzaD1tOworCQlzc2xfcmVwbGFjZV9oYXNoKCZzLT53cml0ZV9oYXNoLG0pOwogI2lmbmRlZiBPUEVOU1NMX05PX0NPTVAKIAkJLyogQ09NUFJFU1MgKi8KIAkJaWYgKHMtPmNvbXByZXNzICE9IE5VTEwpCkBAIC0yODksNiArMzE1LDggQEAKIAogCXA9cy0+czMtPnRtcC5rZXlfYmxvY2s7CiAJaT1FVlBfTURfc2l6ZShtKTsKKwlpZiAoaSA8IDApCisJCWdvdG8gZXJyMjsKIAljbD1FVlBfQ0lQSEVSX2tleV9sZW5ndGgoYyk7CiAJaj1pc19leHAgPyAoY2wgPCBTU0xfQ19FWFBPUlRfS0VZTEVOR1RIKHMtPnMzLT50bXAubmV3X2NpcGhlcikgPwogCQkgY2wgOiBTU0xfQ19FWFBPUlRfS0VZTEVOR1RIKHMtPnMzLT50bXAubmV3X2NpcGhlcikpIDogY2w7CkBAIC0zNjksNyArMzk3LDcgQEAKIAlpZiAocy0+czMtPnRtcC5rZXlfYmxvY2tfbGVuZ3RoICE9IDApCiAJCXJldHVybigxKTsKIAotCWlmICghc3NsX2NpcGhlcl9nZXRfZXZwKHMtPnNlc3Npb24sJmMsJmhhc2gsJmNvbXApKQorCWlmICghc3NsX2NpcGhlcl9nZXRfZXZwKHMtPnNlc3Npb24sJmMsJmhhc2gsTlVMTCxOVUxMLCZjb21wKSkKIAkJewogCQlTU0xlcnIoU1NMX0ZfU1NMM19TRVRVUF9LRVlfQkxPQ0ssU1NMX1JfQ0lQSEVSX09SX0hBU0hfVU5BVkFJTEFCTEUpOwogCQlyZXR1cm4oMCk7CkBAIC0zODMsNyArNDExLDExIEBACiAJcy0+czMtPnRtcC5uZXdfY29tcHJlc3Npb249Y29tcDsKICNlbmRpZgogCi0JbnVtPUVWUF9DSVBIRVJfa2V5X2xlbmd0aChjKStFVlBfTURfc2l6ZShoYXNoKStFVlBfQ0lQSEVSX2l2X2xlbmd0aChjKTsKKwludW09RVZQX01EX3NpemUoaGFzaCk7CisJaWYgKG51bSA8IDApCisJCXJldHVybiAwOworCisJbnVtPUVWUF9DSVBIRVJfa2V5X2xlbmd0aChjKStudW0rRVZQX0NJUEhFUl9pdl9sZW5ndGgoYyk7CiAJbnVtKj0yOwogCiAJc3NsM19jbGVhbnVwX2tleV9ibG9jayhzKTsKQEAgLTQwNSwxMSArNDM3LDExIEBACiAKIAkJaWYgKHMtPnNlc3Npb24tPmNpcGhlciAhPSBOVUxMKQogCQkJewotCQkJaWYgKChzLT5zZXNzaW9uLT5jaXBoZXItPmFsZ29yaXRobXMgJiBTU0xfRU5DX01BU0spID09IFNTTF9lTlVMTCkKKwkJCWlmIChzLT5zZXNzaW9uLT5jaXBoZXItPmFsZ29yaXRobV9lbmMgPT0gU1NMX2VOVUxMKQogCQkJCXMtPnMzLT5uZWVkX2VtcHR5X2ZyYWdtZW50cyA9IDA7CiAJCQkKICNpZm5kZWYgT1BFTlNTTF9OT19SQzQKLQkJCWlmICgocy0+c2Vzc2lvbi0+Y2lwaGVyLT5hbGdvcml0aG1zICYgU1NMX0VOQ19NQVNLKSA9PSBTU0xfUkM0KQorCQkJaWYgKHMtPnNlc3Npb24tPmNpcGhlci0+YWxnb3JpdGhtX2VuYyA9PSBTU0xfUkM0KQogCQkJCXMtPnMzLT5uZWVkX2VtcHR5X2ZyYWdtZW50cyA9IDA7CiAjZW5kaWYKIAkJCX0KQEAgLTUxOSw1MCArNTUxLDEzMSBAQAogCiB2b2lkIHNzbDNfaW5pdF9maW5pc2hlZF9tYWMoU1NMICpzKQogCXsKLQlFVlBfTURfQ1RYX3NldF9mbGFncygmKHMtPnMzLT5maW5pc2hfZGdzdDEpLAotCQlFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpOwotCUVWUF9EaWdlc3RJbml0X2V4KCYocy0+czMtPmZpbmlzaF9kZ3N0MSkscy0+Y3R4LT5tZDUsIE5VTEwpOwotCUVWUF9EaWdlc3RJbml0X2V4KCYocy0+czMtPmZpbmlzaF9kZ3N0Mikscy0+Y3R4LT5zaGExLCBOVUxMKTsKKwlpZiAocy0+czMtPmhhbmRzaGFrZV9idWZmZXIpIEJJT19mcmVlKHMtPnMzLT5oYW5kc2hha2VfYnVmZmVyKTsKKwlpZiAocy0+czMtPmhhbmRzaGFrZV9kZ3N0KSBzc2wzX2ZyZWVfZGlnZXN0X2xpc3Qocyk7CisgICAgcy0+czMtPmhhbmRzaGFrZV9idWZmZXI9QklPX25ldyhCSU9fc19tZW0oKSk7CQorCSh2b2lkKUJJT19zZXRfY2xvc2Uocy0+czMtPmhhbmRzaGFrZV9idWZmZXIsQklPX0NMT1NFKTsKIAl9CiAKK3ZvaWQgc3NsM19mcmVlX2RpZ2VzdF9saXN0KFNTTCAqcykgCisJeworCWludCBpOworCWlmICghcy0+czMtPmhhbmRzaGFrZV9kZ3N0KSByZXR1cm47CisJZm9yIChpPTA7aTxTU0xfTUFYX0RJR0VTVDtpKyspIAorCQl7CisJCWlmIChzLT5zMy0+aGFuZHNoYWtlX2Rnc3RbaV0pCisJCQlFVlBfTURfQ1RYX2Rlc3Ryb3kocy0+czMtPmhhbmRzaGFrZV9kZ3N0W2ldKTsKKwkJfQorCU9QRU5TU0xfZnJlZShzLT5zMy0+aGFuZHNoYWtlX2Rnc3QpOworCXMtPnMzLT5oYW5kc2hha2VfZGdzdD1OVUxMOworCX0JCisJCQorCisKIHZvaWQgc3NsM19maW5pc2hfbWFjKFNTTCAqcywgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbGVuKQogCXsKLQlFVlBfRGlnZXN0VXBkYXRlKCYocy0+czMtPmZpbmlzaF9kZ3N0MSksYnVmLGxlbik7Ci0JRVZQX0RpZ2VzdFVwZGF0ZSgmKHMtPnMzLT5maW5pc2hfZGdzdDIpLGJ1ZixsZW4pOworCWlmIChzLT5zMy0+aGFuZHNoYWtlX2J1ZmZlcikgCisJCXsKKwkJQklPX3dyaXRlIChzLT5zMy0+aGFuZHNoYWtlX2J1ZmZlciwodm9pZCAqKWJ1ZixsZW4pOworCQl9IAorCWVsc2UgCisJCXsKKwkJaW50IGk7CisJCWZvciAoaT0wO2k8IFNTTF9NQVhfRElHRVNUO2krKykgCisJCQl7CisJCQlpZiAocy0+czMtPmhhbmRzaGFrZV9kZ3N0W2ldIT0gTlVMTCkKKwkJCUVWUF9EaWdlc3RVcGRhdGUocy0+czMtPmhhbmRzaGFrZV9kZ3N0W2ldLGJ1ZixsZW4pOworCQkJfQorCQl9CQogCX0KIAotaW50IHNzbDNfY2VydF92ZXJpZnlfbWFjKFNTTCAqcywgRVZQX01EX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpwKQoraW50IHNzbDNfZGlnZXN0X2NhY2hlZF9yZWNvcmRzKFNTTCAqcykKIAl7Ci0JcmV0dXJuKHNzbDNfaGFuZHNoYWtlX21hYyhzLGN0eCxOVUxMLDAscCkpOworCWludCBpOworCWxvbmcgbWFzazsKKwljb25zdCBFVlBfTUQgKm1kOworCWxvbmcgaGRhdGFsZW47CisJdm9pZCAqaGRhdGE7CisKKwkvKiBBbGxvY2F0ZSBoYW5kc2hha2VfZGdzdCBhcnJheSAqLworCXNzbDNfZnJlZV9kaWdlc3RfbGlzdChzKTsKKwlzLT5zMy0+aGFuZHNoYWtlX2Rnc3QgPSBPUEVOU1NMX21hbGxvYyhTU0xfTUFYX0RJR0VTVCAqIHNpemVvZihFVlBfTURfQ1RYICopKTsKKwltZW1zZXQocy0+czMtPmhhbmRzaGFrZV9kZ3N0LDAsU1NMX01BWF9ESUdFU1QgKnNpemVvZihFVlBfTURfQ1RYICopKTsKKwloZGF0YWxlbiA9IEJJT19nZXRfbWVtX2RhdGEocy0+czMtPmhhbmRzaGFrZV9idWZmZXIsJmhkYXRhKTsKKwlpZiAoaGRhdGFsZW4gPD0gMCkKKwkJeworCQlTU0xlcnIoU1NMX0ZfU1NMM19ESUdFU1RfQ0FDSEVEX1JFQ09SRFMsIFNTTF9SX0JBRF9IQU5EU0hBS0VfTEVOR1RIKTsKKwkJcmV0dXJuIDA7CisJCX0KKworCS8qIExvb3AgdGhyb3VnaCBiaXRzbyBvZiBhbGdvcml0aG0yIGZpZWxkIGFuZCBjcmVhdGUgTURfQ1RYLWVzICovCisJZm9yIChpPTA7c3NsX2dldF9oYW5kc2hha2VfZGlnZXN0KGksJm1hc2ssJm1kKTsgaSsrKSAKKwkJeworCQlpZiAoKG1hc2sgJiBzLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobTIpICYmIG1kKSAKKwkJCXsKKwkJCXMtPnMzLT5oYW5kc2hha2VfZGdzdFtpXT1FVlBfTURfQ1RYX2NyZWF0ZSgpOworCQkJRVZQX0RpZ2VzdEluaXRfZXgocy0+czMtPmhhbmRzaGFrZV9kZ3N0W2ldLG1kLE5VTEwpOworCQkJRVZQX0RpZ2VzdFVwZGF0ZShzLT5zMy0+aGFuZHNoYWtlX2Rnc3RbaV0saGRhdGEsaGRhdGFsZW4pOworCQkJfSAKKwkJZWxzZSAKKwkJCXsJCisJCQlzLT5zMy0+aGFuZHNoYWtlX2Rnc3RbaV09TlVMTDsKKwkJCX0KKwkJfQorCS8qIEZyZWUgaGFuZHNoYWtlX2J1ZmZlciBCSU8gKi8KKwlCSU9fZnJlZShzLT5zMy0+aGFuZHNoYWtlX2J1ZmZlcik7CisJcy0+czMtPmhhbmRzaGFrZV9idWZmZXIgPSBOVUxMOworCisJcmV0dXJuIDE7CiAJfQogCi1pbnQgc3NsM19maW5hbF9maW5pc2hfbWFjKFNTTCAqcywgRVZQX01EX0NUWCAqY3R4MSwgRVZQX01EX0NUWCAqY3R4MiwKK2ludCBzc2wzX2NlcnRfdmVyaWZ5X21hYyhTU0wgKnMsIGludCBtZF9uaWQsIHVuc2lnbmVkIGNoYXIgKnApCisJeworCXJldHVybihzc2wzX2hhbmRzaGFrZV9tYWMocyxtZF9uaWQsTlVMTCwwLHApKTsKKwl9CitpbnQgc3NsM19maW5hbF9maW5pc2hfbWFjKFNTTCAqcywgCiAJICAgICBjb25zdCBjaGFyICpzZW5kZXIsIGludCBsZW4sIHVuc2lnbmVkIGNoYXIgKnApCiAJewogCWludCByZXQ7Ci0KLQlyZXQ9c3NsM19oYW5kc2hha2VfbWFjKHMsY3R4MSxzZW5kZXIsbGVuLHApOworCXJldD1zc2wzX2hhbmRzaGFrZV9tYWMocyxOSURfbWQ1LHNlbmRlcixsZW4scCk7CiAJcCs9cmV0OwotCXJldCs9c3NsM19oYW5kc2hha2VfbWFjKHMsY3R4MixzZW5kZXIsbGVuLHApOworCXJldCs9c3NsM19oYW5kc2hha2VfbWFjKHMsTklEX3NoYTEsc2VuZGVyLGxlbixwKTsKIAlyZXR1cm4ocmV0KTsKIAl9Ci0KLXN0YXRpYyBpbnQgc3NsM19oYW5kc2hha2VfbWFjKFNTTCAqcywgRVZQX01EX0NUWCAqaW5fY3R4LAorc3RhdGljIGludCBzc2wzX2hhbmRzaGFrZV9tYWMoU1NMICpzLCBpbnQgbWRfbmlkLAogCSAgICAgY29uc3QgY2hhciAqc2VuZGVyLCBpbnQgbGVuLCB1bnNpZ25lZCBjaGFyICpwKQogCXsKIAl1bnNpZ25lZCBpbnQgcmV0OwogCWludCBucGFkLG47CiAJdW5zaWduZWQgaW50IGk7CiAJdW5zaWduZWQgY2hhciBtZF9idWZbRVZQX01BWF9NRF9TSVpFXTsKLQlFVlBfTURfQ1RYIGN0eDsKKwlFVlBfTURfQ1RYIGN0eCwqZD1OVUxMOwogCisJaWYgKHMtPnMzLT5oYW5kc2hha2VfYnVmZmVyKSAKKwkJaWYgKCFzc2wzX2RpZ2VzdF9jYWNoZWRfcmVjb3JkcyhzKSkKKwkJCXJldHVybiAwOworCisJLyogU2VhcmNoIGZvciBkaWdlc3Qgb2Ygc3BlY2lmaWVkIHR5cGUgaW4gdGhlIGhhbmRzaGFrZV9kZ3N0CisJICogYXJyYXkqLworCWZvciAoaT0wO2k8U1NMX01BWF9ESUdFU1Q7aSsrKSAKKwkJeworCQkgIGlmIChzLT5zMy0+aGFuZHNoYWtlX2Rnc3RbaV0mJkVWUF9NRF9DVFhfdHlwZShzLT5zMy0+aGFuZHNoYWtlX2Rnc3RbaV0pPT1tZF9uaWQpIAorCQkgIAl7CisJCSAgCWQ9cy0+czMtPmhhbmRzaGFrZV9kZ3N0W2ldOworCQkJYnJlYWs7CisJCQl9CisJCX0KKwlpZiAoIWQpIHsKKwkJU1NMZXJyKFNTTF9GX1NTTDNfSEFORFNIQUtFX01BQyxTU0xfUl9OT19SRVFVSVJFRF9ESUdFU1QpOworCQlyZXR1cm4gMDsKKwl9CQogCUVWUF9NRF9DVFhfaW5pdCgmY3R4KTsKLQlFVlBfTURfQ1RYX3NldF9mbGFncygmY3R4LCBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpOwotCUVWUF9NRF9DVFhfY29weV9leCgmY3R4LGluX2N0eCk7Ci0KKwlFVlBfTURfQ1RYX2NvcHlfZXgoJmN0eCxkKTsKIAluPUVWUF9NRF9DVFhfc2l6ZSgmY3R4KTsKLQlucGFkPSg0OC9uKSpuOworCWlmIChuIDwgMCkKKwkJcmV0dXJuIDA7CiAKKwlucGFkPSg0OC9uKSpuOwogCWlmIChzZW5kZXIgIT0gTlVMTCkKIAkJRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LHNlbmRlcixsZW4pOwogCUVWUF9EaWdlc3RVcGRhdGUoJmN0eCxzLT5zZXNzaW9uLT5tYXN0ZXJfa2V5LApAQCAtNTgyLDE1ICs2OTUsMTYgQEAKIAlyZXR1cm4oKGludClyZXQpOwogCX0KIAotaW50IHNzbDNfbWFjKFNTTCAqc3NsLCB1bnNpZ25lZCBjaGFyICptZCwgaW50IHNlbmQpCitpbnQgbl9zc2wzX21hYyhTU0wgKnNzbCwgdW5zaWduZWQgY2hhciAqbWQsIGludCBzZW5kKQogCXsKIAlTU0wzX1JFQ09SRCAqcmVjOwogCXVuc2lnbmVkIGNoYXIgKm1hY19zZWMsKnNlcTsKIAlFVlBfTURfQ1RYIG1kX2N0eDsKLQljb25zdCBFVlBfTUQgKmhhc2g7CisJY29uc3QgRVZQX01EX0NUWCAqaGFzaDsKIAl1bnNpZ25lZCBjaGFyICpwLHJlY19jaGFyOwogCXVuc2lnbmVkIGludCBtZF9zaXplOwogCWludCBucGFkOworCWludCB0OwogCiAJaWYgKHNlbmQpCiAJCXsKQEAgLTYwNywxMyArNzIxLDE2IEBACiAJCWhhc2g9c3NsLT5yZWFkX2hhc2g7CiAJCX0KIAotCW1kX3NpemU9RVZQX01EX3NpemUoaGFzaCk7CisJdD1FVlBfTURfQ1RYX3NpemUoaGFzaCk7CisJaWYgKHQgPCAwKQorCQlyZXR1cm4gLTE7CisJbWRfc2l6ZT10OwogCW5wYWQ9KDQ4L21kX3NpemUpKm1kX3NpemU7CiAKIAkvKiBDaG9wIHRoZSBkaWdlc3Qgb2ZmIHRoZSBlbmQgOi0pICovCiAJRVZQX01EX0NUWF9pbml0KCZtZF9jdHgpOwogCi0JRVZQX0RpZ2VzdEluaXRfZXgoICAmbWRfY3R4LGhhc2gsIE5VTEwpOworCUVWUF9NRF9DVFhfY29weV9leCggJm1kX2N0eCxoYXNoKTsKIAlFVlBfRGlnZXN0VXBkYXRlKCZtZF9jdHgsbWFjX3NlYyxtZF9zaXplKTsKIAlFVlBfRGlnZXN0VXBkYXRlKCZtZF9jdHgsc3NsM19wYWRfMSxucGFkKTsKIAlFVlBfRGlnZXN0VXBkYXRlKCZtZF9jdHgsc2VxLDgpOwpAQCAtNjI1LDcgKzc0Miw3IEBACiAJRVZQX0RpZ2VzdFVwZGF0ZSgmbWRfY3R4LHJlYy0+aW5wdXQscmVjLT5sZW5ndGgpOwogCUVWUF9EaWdlc3RGaW5hbF9leCggJm1kX2N0eCxtZCxOVUxMKTsKIAotCUVWUF9EaWdlc3RJbml0X2V4KCAgJm1kX2N0eCxoYXNoLCBOVUxMKTsKKwlFVlBfTURfQ1RYX2NvcHlfZXgoICZtZF9jdHgsaGFzaCk7CiAJRVZQX0RpZ2VzdFVwZGF0ZSgmbWRfY3R4LG1hY19zZWMsbWRfc2l6ZSk7CiAJRVZQX0RpZ2VzdFVwZGF0ZSgmbWRfY3R4LHNzbDNfcGFkXzIsbnBhZCk7CiAJRVZQX0RpZ2VzdFVwZGF0ZSgmbWRfY3R4LG1kLG1kX3NpemUpOwpAQCAtNzE4LDYgKzgzNSwxMiBAQAogCWNhc2UgU1NMX0FEX0lOVEVSTkFMX0VSUk9SOglyZXR1cm4oU1NMM19BRF9IQU5EU0hBS0VfRkFJTFVSRSk7CiAJY2FzZSBTU0xfQURfVVNFUl9DQU5DRUxMRUQ6CXJldHVybihTU0wzX0FEX0hBTkRTSEFLRV9GQUlMVVJFKTsKIAljYXNlIFNTTF9BRF9OT19SRU5FR09USUFUSU9OOglyZXR1cm4oLTEpOyAvKiBEb24ndCBzZW5kIGl0IDotKSAqLworCWNhc2UgU1NMX0FEX1VOU1VQUE9SVEVEX0VYVEVOU0lPTjogcmV0dXJuKFNTTDNfQURfSEFORFNIQUtFX0ZBSUxVUkUpOworCWNhc2UgU1NMX0FEX0NFUlRJRklDQVRFX1VOT0JUQUlOQUJMRTogcmV0dXJuKFNTTDNfQURfSEFORFNIQUtFX0ZBSUxVUkUpOworCWNhc2UgU1NMX0FEX1VOUkVDT0dOSVpFRF9OQU1FOglyZXR1cm4oU1NMM19BRF9IQU5EU0hBS0VfRkFJTFVSRSk7CisJY2FzZSBTU0xfQURfQkFEX0NFUlRJRklDQVRFX1NUQVRVU19SRVNQT05TRTogcmV0dXJuKFNTTDNfQURfSEFORFNIQUtFX0ZBSUxVUkUpOworCWNhc2UgU1NMX0FEX0JBRF9DRVJUSUZJQ0FURV9IQVNIX1ZBTFVFOiByZXR1cm4oU1NMM19BRF9IQU5EU0hBS0VfRkFJTFVSRSk7CisJY2FzZSBTU0xfQURfVU5LTk9XTl9QU0tfSURFTlRJVFk6cmV0dXJuKFRMUzFfQURfVU5LTk9XTl9QU0tfSURFTlRJVFkpOwogCWRlZmF1bHQ6CQkJcmV0dXJuKC0xKTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL3NzbC9zM19saWIuYyBiL3NzbC9zM19saWIuYwppbmRleCA4ZmE0YWIwLi5kNmIwNDdjIDEwMDY0NAotLS0gYS9zc2wvczNfbGliLmMKKysrIGIvc3NsL3MzX2xpYi5jCkBAIC01Niw3ICs1Niw3IEBACiAgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQogICovCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTIxLDE2ICsxMjEsNDYgQEAKICAqIFZpcHVsIEd1cHRhIGFuZCBTdW1pdCBHdXB0YSBvZiBTdW4gTWljcm9zeXN0ZW1zIExhYm9yYXRvcmllcy4KICAqCiAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgMjAwNSBOb2tpYS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGUgcG9ydGlvbnMgb2YgdGhlIGF0dGFjaGVkIHNvZnR3YXJlICgiQ29udHJpYnV0aW9uIikgaXMgZGV2ZWxvcGVkIGJ5CisgKiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQgaXMgbGljZW5zZWQgcHVyc3VhbnQgdG8gdGhlIE9wZW5TU0wgb3BlbiBzb3VyY2UKKyAqIGxpY2Vuc2UuCisgKgorICogVGhlIENvbnRyaWJ1dGlvbiwgb3JpZ2luYWxseSB3cml0dGVuIGJ5IE1pa2EgS291c2EgYW5kIFBhc2kgRXJvbmVuIG9mCisgKiBOb2tpYSBDb3Jwb3JhdGlvbiwgY29uc2lzdHMgb2YgdGhlICJQU0siIChQcmUtU2hhcmVkIEtleSkgY2lwaGVyc3VpdGVzCisgKiBzdXBwb3J0IChzZWUgUkZDIDQyNzkpIHRvIE9wZW5TU0wuCisgKgorICogTm8gcGF0ZW50IGxpY2Vuc2VzIG9yIG90aGVyIHJpZ2h0cyBleGNlcHQgdGhvc2UgZXhwcmVzc2x5IHN0YXRlZCBpbgorICogdGhlIE9wZW5TU0wgb3BlbiBzb3VyY2UgbGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgZ3JhbnRlZCBvciByZWNlaXZlZAorICogZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwsIG9yIG90aGVyd2lzZS4KKyAqCisgKiBObyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBOb2tpYSB0aGF0IHRoZSBDb250cmlidXRpb24gZG9lcyBub3QKKyAqIGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkgdGhpcmQKKyAqIHBhcnR5IG9yIHRoYXQgdGhlIGxpY2Vuc2UgcHJvdmlkZXMgeW91IHdpdGggYWxsIHRoZSBuZWNlc3NhcnkgcmlnaHRzCisgKiB0byBtYWtlIHVzZSBvZiB0aGUgQ29udHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQuIElOCisgKiBBRERJVElPTiBUTyBUSEUgRElTQ0xBSU1FUlMgSU5DTFVERUQgSU4gVEhFIExJQ0VOU0UsIE5PS0lBCisgKiBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1TIEFOWSBMSUFCSUxJVFkgRk9SIENMQUlNUyBCUk9VR0hUIEJZIFlPVSBPUiBBTlkKKyAqIE9USEVSIEVOVElUWSBCQVNFRCBPTiBJTkZSSU5HRU1FTlQgT0YgSU5URUxMRUNUVUFMIFBST1BFUlRZIFJJR0hUUyBPUgorICogT1RIRVJXSVNFLgorICovCiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgogI2luY2x1ZGUgInNzbF9sb2NsLmgiCiAjaW5jbHVkZSAia3NzbF9sY2wuaCIKKyNpZm5kZWYgT1BFTlNTTF9OT19UTFNFWFQKKyNpZm5kZWYgT1BFTlNTTF9OT19FQworI2luY2x1ZGUgIi4uL2NyeXB0by9lYy9lY19sY2wuaCIKKyNlbmRpZiAvKiBPUEVOU1NMX05PX0VDICovCisjZW5kaWYgLyogT1BFTlNTTF9OT19UTFNFWFQgKi8KICNpbmNsdWRlIDxvcGVuc3NsL21kNS5oPgogI2lmbmRlZiBPUEVOU1NMX05PX0RICiAjaW5jbHVkZSA8b3BlbnNzbC9kaC5oPgogI2VuZGlmCi0jaW5jbHVkZSA8b3BlbnNzbC9wcV9jb21wYXQuaD4KIAogY29uc3QgY2hhciBzc2wzX3ZlcnNpb25fc3RyW109IlNTTHYzIiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7CiAKQEAgLTEzOCwyMTcgKzE2OCwyNjUgQEAKIAogLyogbGlzdCBvZiBhdmFpbGFibGUgU1NMdjMgY2lwaGVycyAoc29ydGVkIGJ5IGlkKSAqLwogT1BFTlNTTF9HTE9CQUwgU1NMX0NJUEhFUiBzc2wzX2NpcGhlcnNbXT17CisKIC8qIFRoZSBSU0EgY2lwaGVycyAqLwogLyogQ2lwaGVyIDAxICovCiAJewogCTEsCiAJU1NMM19UWFRfUlNBX05VTExfTUQ1LAogCVNTTDNfQ0tfUlNBX05VTExfTUQ1LAotCVNTTF9rUlNBfFNTTF9hUlNBfFNTTF9lTlVMTCB8U1NMX01ENXxTU0xfU1NMVjMsCisJU1NMX2tSU0EsCisJU1NMX2FSU0EsCisJU1NMX2VOVUxMLAorCVNTTF9NRDUsCisJU1NMX1NTTFYzLAogCVNTTF9OT1RfRVhQfFNTTF9TVFJPTkdfTk9ORSwKKwlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAogCTAsCiAJMCwKLQkwLAotCVNTTF9BTExfQ0lQSEVSUywKLQlTU0xfQUxMX1NUUkVOR1RIUywKIAl9LAorCiAvKiBDaXBoZXIgMDIgKi8KIAl7CiAJMSwKIAlTU0wzX1RYVF9SU0FfTlVMTF9TSEEsCiAJU1NMM19DS19SU0FfTlVMTF9TSEEsCi0JU1NMX2tSU0F8U1NMX2FSU0F8U1NMX2VOVUxMIHxTU0xfU0hBMXxTU0xfU1NMVjMsCisJU1NMX2tSU0EsCisJU1NMX2FSU0EsCisJU1NMX2VOVUxMLAorCVNTTF9TSEExLAorCVNTTF9TU0xWMywKIAlTU0xfTk9UX0VYUHxTU0xfU1RST05HX05PTkV8U1NMX0ZJUFMsCisJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKIAkwLAogCTAsCi0JMCwKLQlTU0xfQUxMX0NJUEhFUlMsCi0JU1NMX0FMTF9TVFJFTkdUSFMsCiAJfSwKKwogLyogQ2lwaGVyIDAzICovCiAJewogCTEsCiAJU1NMM19UWFRfUlNBX1JDNF80MF9NRDUsCiAJU1NMM19DS19SU0FfUkM0XzQwX01ENSwKLQlTU0xfa1JTQXxTU0xfYVJTQXxTU0xfUkM0ICB8U1NMX01ENSB8U1NMX1NTTFYzLAorCVNTTF9rUlNBLAorCVNTTF9hUlNBLAorCVNTTF9SQzQsCisJU1NMX01ENSwKKwlTU0xfU1NMVjMsCiAJU1NMX0VYUE9SVHxTU0xfRVhQNDAsCi0JMCwKKwlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAogCTQwLAogCTEyOCwKLQlTU0xfQUxMX0NJUEhFUlMsCi0JU1NMX0FMTF9TVFJFTkdUSFMsCiAJfSwKKwogLyogQ2lwaGVyIDA0ICovCiAJewogCTEsCiAJU1NMM19UWFRfUlNBX1JDNF8xMjhfTUQ1LAogCVNTTDNfQ0tfUlNBX1JDNF8xMjhfTUQ1LAotCVNTTF9rUlNBfFNTTF9hUlNBfFNTTF9SQzQgIHxTU0xfTUQ1fFNTTF9TU0xWMywKKwlTU0xfa1JTQSwKKwlTU0xfYVJTQSwKKwlTU0xfUkM0LAorCVNTTF9NRDUsCisJU1NMX1NTTFYzLAogCVNTTF9OT1RfRVhQfFNTTF9NRURJVU0sCi0JMCwKKwlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAogCTEyOCwKIAkxMjgsCi0JU1NMX0FMTF9DSVBIRVJTLAotCVNTTF9BTExfU1RSRU5HVEhTLAogCX0sCisKIC8qIENpcGhlciAwNSAqLwogCXsKIAkxLAogCVNTTDNfVFhUX1JTQV9SQzRfMTI4X1NIQSwKIAlTU0wzX0NLX1JTQV9SQzRfMTI4X1NIQSwKLQlTU0xfa1JTQXxTU0xfYVJTQXxTU0xfUkM0ICB8U1NMX1NIQTF8U1NMX1NTTFYzLAorCVNTTF9rUlNBLAorCVNTTF9hUlNBLAorCVNTTF9SQzQsCisJU1NMX1NIQTEsCisJU1NMX1NTTFYzLAogCVNTTF9OT1RfRVhQfFNTTF9NRURJVU0sCi0JMCwKKwlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAogCTEyOCwKIAkxMjgsCi0JU1NMX0FMTF9DSVBIRVJTLAotCVNTTF9BTExfU1RSRU5HVEhTLAogCX0sCisKIC8qIENpcGhlciAwNiAqLwogCXsKIAkxLAogCVNTTDNfVFhUX1JTQV9SQzJfNDBfTUQ1LAogCVNTTDNfQ0tfUlNBX1JDMl80MF9NRDUsCi0JU1NMX2tSU0F8U1NMX2FSU0F8U1NMX1JDMiAgfFNTTF9NRDUgfFNTTF9TU0xWMywKKwlTU0xfa1JTQSwKKwlTU0xfYVJTQSwKKwlTU0xfUkMyLAorCVNTTF9NRDUsCisJU1NMX1NTTFYzLAogCVNTTF9FWFBPUlR8U1NMX0VYUDQwLAotCTAsCisJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKIAk0MCwKIAkxMjgsCi0JU1NMX0FMTF9DSVBIRVJTLAotCVNTTF9BTExfU1RSRU5HVEhTLAogCX0sCisKIC8qIENpcGhlciAwNyAqLwogI2lmbmRlZiBPUEVOU1NMX05PX0lERUEKIAl7CiAJMSwKIAlTU0wzX1RYVF9SU0FfSURFQV8xMjhfU0hBLAogCVNTTDNfQ0tfUlNBX0lERUFfMTI4X1NIQSwKLQlTU0xfa1JTQXxTU0xfYVJTQXxTU0xfSURFQSB8U1NMX1NIQTF8U1NMX1NTTFYzLAorCVNTTF9rUlNBLAorCVNTTF9hUlNBLAorCVNTTF9JREVBLAorCVNTTF9TSEExLAorCVNTTF9TU0xWMywKIAlTU0xfTk9UX0VYUHxTU0xfTUVESVVNLAotCTAsCisJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKIAkxMjgsCiAJMTI4LAotCVNTTF9BTExfQ0lQSEVSUywKLQlTU0xfQUxMX1NUUkVOR1RIUywKIAl9LAogI2VuZGlmCisKIC8qIENpcGhlciAwOCAqLwogCXsKIAkxLAogCVNTTDNfVFhUX1JTQV9ERVNfNDBfQ0JDX1NIQSwKIAlTU0wzX0NLX1JTQV9ERVNfNDBfQ0JDX1NIQSwKLQlTU0xfa1JTQXxTU0xfYVJTQXxTU0xfREVTfFNTTF9TSEExfFNTTF9TU0xWMywKKwlTU0xfa1JTQSwKKwlTU0xfYVJTQSwKKwlTU0xfREVTLAorCVNTTF9TSEExLAorCVNTTF9TU0xWMywKIAlTU0xfRVhQT1JUfFNTTF9FWFA0MCwKLQkwLAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCiAJNDAsCiAJNTYsCi0JU1NMX0FMTF9DSVBIRVJTLAotCVNTTF9BTExfU1RSRU5HVEhTLAogCX0sCisKIC8qIENpcGhlciAwOSAqLwogCXsKIAkxLAogCVNTTDNfVFhUX1JTQV9ERVNfNjRfQ0JDX1NIQSwKIAlTU0wzX0NLX1JTQV9ERVNfNjRfQ0JDX1NIQSwKLQlTU0xfa1JTQXxTU0xfYVJTQXxTU0xfREVTICB8U1NMX1NIQTF8U1NMX1NTTFYzLAorCVNTTF9rUlNBLAorCVNTTF9hUlNBLAorCVNTTF9ERVMsCisJU1NMX1NIQTEsCisJU1NMX1NTTFYzLAogCVNTTF9OT1RfRVhQfFNTTF9MT1csCi0JMCwKKwlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAogCTU2LAogCTU2LAotCVNTTF9BTExfQ0lQSEVSUywKLQlTU0xfQUxMX1NUUkVOR1RIUywKIAl9LAorCiAvKiBDaXBoZXIgMEEgKi8KIAl7CiAJMSwKIAlTU0wzX1RYVF9SU0FfREVTXzE5Ml9DQkMzX1NIQSwKIAlTU0wzX0NLX1JTQV9ERVNfMTkyX0NCQzNfU0hBLAotCVNTTF9rUlNBfFNTTF9hUlNBfFNTTF8zREVTIHxTU0xfU0hBMXxTU0xfU1NMVjMsCisJU1NMX2tSU0EsCisJU1NMX2FSU0EsCisJU1NMXzNERVMsCisJU1NMX1NIQTEsCisJU1NMX1NTTFYzLAogCVNTTF9OT1RfRVhQfFNTTF9ISUdIfFNTTF9GSVBTLAotCTAsCisJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKIAkxNjgsCiAJMTY4LAotCVNTTF9BTExfQ0lQSEVSUywKLQlTU0xfQUxMX1NUUkVOR1RIUywKIAl9LAorCiAvKiBUaGUgREggY2lwaGVycyAqLwogLyogQ2lwaGVyIDBCICovCiAJewogCTAsCiAJU1NMM19UWFRfREhfRFNTX0RFU180MF9DQkNfU0hBLAogCVNTTDNfQ0tfREhfRFNTX0RFU180MF9DQkNfU0hBLAotCVNTTF9rREhkIHxTU0xfYURIfFNTTF9ERVN8U1NMX1NIQTF8U1NMX1NTTFYzLAorCVNTTF9rREhkLAorCVNTTF9hREgsCisJU1NMX0RFUywKKwlTU0xfU0hBMSwKKwlTU0xfU1NMVjMsCiAJU1NMX0VYUE9SVHxTU0xfRVhQNDAsCi0JMCwKKwlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAogCTQwLAogCTU2LAotCVNTTF9BTExfQ0lQSEVSUywKLQlTU0xfQUxMX1NUUkVOR1RIUywKIAl9LAorCiAvKiBDaXBoZXIgMEMgKi8KIAl7Ci0JMCwKKwkwLCAvKiBub3QgaW1wbGVtZW50ZWQgKG5vbi1lcGhlbWVyYWwgREgpICovCiAJU1NMM19UWFRfREhfRFNTX0RFU182NF9DQkNfU0hBLAogCVNTTDNfQ0tfREhfRFNTX0RFU182NF9DQkNfU0hBLAotCVNTTF9rREhkIHxTU0xfYURIfFNTTF9ERVMgIHxTU0xfU0hBMXxTU0xfU1NMVjMsCisJU1NMX2tESGQsCisJU1NMX2FESCwKKwlTU0xfREVTLAorCVNTTF9TSEExLAorCVNTTF9TU0xWMywKIAlTU0xfTk9UX0VYUHxTU0xfTE9XLAotCTAsCisJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKIAk1NiwKIAk1NiwKLQlTU0xfQUxMX0NJUEhFUlMsCi0JU1NMX0FMTF9TVFJFTkdUSFMsCiAJfSwKKwogLyogQ2lwaGVyIDBEICovCiAJewotCTAsCisJMCwgLyogbm90IGltcGxlbWVudGVkIChub24tZXBoZW1lcmFsIERIKSAqLwogCVNTTDNfVFhUX0RIX0RTU19ERVNfMTkyX0NCQzNfU0hBLAogCVNTTDNfQ0tfREhfRFNTX0RFU18xOTJfQ0JDM19TSEEsCi0JU1NMX2tESGQgfFNTTF9hREh8U1NMXzNERVMgfFNTTF9TSEExfFNTTF9TU0xWMywKKwlTU0xfa0RIZCwKKwlTU0xfYURILAorCVNTTF8zREVTLAorCVNTTF9TSEExLAorCVNTTF9TU0xWMywKIAlTU0xfTk9UX0VYUHxTU0xfSElHSHxTU0xfRklQUywKLQkwLAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCiAJMTY4LAogCTE2OCwKLQlTU0xfQUxMX0NJUEhFUlMsCi0JU1NMX0FMTF9TVFJFTkdUSFMsCiAJfSwKKwogLyogQ2lwaGVyIDBFICovCiAJewotCTAsCisJMCwgLyogbm90IGltcGxlbWVudGVkIChub24tZXBoZW1lcmFsIERIKSAqLwogCVNTTDNfVFhUX0RIX1JTQV9ERVNfNDBfQ0JDX1NIQSwKIAlTU0wzX0NLX0RIX1JTQV9ERVNfNDBfQ0JDX1NIQSwKLQlTU0xfa0RIciB8U1NMX2FESHxTU0xfREVTfFNTTF9TSEExfFNTTF9TU0xWMywKKwlTU0xfa0RIciwKKwlTU0xfYURILAorCVNTTF9ERVMsCisJU1NMX1NIQTEsCisJU1NMX1NTTFYzLAogCVNTTF9FWFBPUlR8U1NMX0VYUDQwLAotCTAsCisJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKIAk0MCwKIAk1NiwKLQlTU0xfQUxMX0NJUEhFUlMsCi0JU1NMX0FMTF9TVFJFTkdUSFMsCiAJfSwKKwogLyogQ2lwaGVyIDBGICovCiAJewotCTAsCisJMCwgLyogbm90IGltcGxlbWVudGVkIChub24tZXBoZW1lcmFsIERIKSAqLwogCVNTTDNfVFhUX0RIX1JTQV9ERVNfNjRfQ0JDX1NIQSwKIAlTU0wzX0NLX0RIX1JTQV9ERVNfNjRfQ0JDX1NIQSwKLQlTU0xfa0RIciB8U1NMX2FESHxTU0xfREVTICB8U1NMX1NIQTF8U1NMX1NTTFYzLAorCVNTTF9rREhyLAorCVNTTF9hREgsCisJU1NMX0RFUywKKwlTU0xfU0hBMSwKKwlTU0xfU1NMVjMsCiAJU1NMX05PVF9FWFB8U1NMX0xPVywKLQkwLAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCiAJNTYsCiAJNTYsCi0JU1NMX0FMTF9DSVBIRVJTLAotCVNTTF9BTExfU1RSRU5HVEhTLAogCX0sCisKIC8qIENpcGhlciAxMCAqLwogCXsKLQkwLAorCTAsIC8qIG5vdCBpbXBsZW1lbnRlZCAobm9uLWVwaGVtZXJhbCBESCkgKi8KIAlTU0wzX1RYVF9ESF9SU0FfREVTXzE5Ml9DQkMzX1NIQSwKIAlTU0wzX0NLX0RIX1JTQV9ERVNfMTkyX0NCQzNfU0hBLAotCVNTTF9rREhyIHxTU0xfYURIfFNTTF8zREVTIHxTU0xfU0hBMXxTU0xfU1NMVjMsCisJU1NMX2tESHIsCisJU1NMX2FESCwKKwlTU0xfM0RFUywKKwlTU0xfU0hBMSwKKwlTU0xfU1NMVjMsCiAJU1NMX05PVF9FWFB8U1NMX0hJR0h8U1NMX0ZJUFMsCi0JMCwKKwlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAogCTE2OCwKIAkxNjgsCi0JU1NMX0FMTF9DSVBIRVJTLAotCVNTTF9BTExfU1RSRU5HVEhTLAogCX0sCiAKIC8qIFRoZSBFcGhlbWVyYWwgREggY2lwaGVycyAqLwpAQCAtMzU3LDE1OCArNDM1LDE5MyBAQAogCTEsCiAJU1NMM19UWFRfRURIX0RTU19ERVNfNDBfQ0JDX1NIQSwKIAlTU0wzX0NLX0VESF9EU1NfREVTXzQwX0NCQ19TSEEsCi0JU1NMX2tFREh8U1NMX2FEU1N8U1NMX0RFU3xTU0xfU0hBMXxTU0xfU1NMVjMsCisJU1NMX2tFREgsCisJU1NMX2FEU1MsCisJU1NMX0RFUywKKwlTU0xfU0hBMSwKKwlTU0xfU1NMVjMsCiAJU1NMX0VYUE9SVHxTU0xfRVhQNDAsCi0JMCwKKwlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAogCTQwLAogCTU2LAotCVNTTF9BTExfQ0lQSEVSUywKLQlTU0xfQUxMX1NUUkVOR1RIUywKIAl9LAorCiAvKiBDaXBoZXIgMTIgKi8KIAl7CiAJMSwKIAlTU0wzX1RYVF9FREhfRFNTX0RFU182NF9DQkNfU0hBLAogCVNTTDNfQ0tfRURIX0RTU19ERVNfNjRfQ0JDX1NIQSwKLQlTU0xfa0VESHxTU0xfYURTU3xTU0xfREVTICB8U1NMX1NIQTF8U1NMX1NTTFYzLAorCVNTTF9rRURILAorCVNTTF9hRFNTLAorCVNTTF9ERVMsCisJU1NMX1NIQTEsCisJU1NMX1NTTFYzLAogCVNTTF9OT1RfRVhQfFNTTF9MT1csCi0JMCwKKwlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAogCTU2LAogCTU2LAotCVNTTF9BTExfQ0lQSEVSUywKLQlTU0xfQUxMX1NUUkVOR1RIUywKIAl9LAorCiAvKiBDaXBoZXIgMTMgKi8KIAl7CiAJMSwKIAlTU0wzX1RYVF9FREhfRFNTX0RFU18xOTJfQ0JDM19TSEEsCiAJU1NMM19DS19FREhfRFNTX0RFU18xOTJfQ0JDM19TSEEsCi0JU1NMX2tFREh8U1NMX2FEU1N8U1NMXzNERVMgfFNTTF9TSEExfFNTTF9TU0xWMywKKwlTU0xfa0VESCwKKwlTU0xfYURTUywKKwlTU0xfM0RFUywKKwlTU0xfU0hBMSwKKwlTU0xfU1NMVjMsCiAJU1NMX05PVF9FWFB8U1NMX0hJR0h8U1NMX0ZJUFMsCi0JMCwKKwlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAogCTE2OCwKIAkxNjgsCi0JU1NMX0FMTF9DSVBIRVJTLAotCVNTTF9BTExfU1RSRU5HVEhTLAogCX0sCisKIC8qIENpcGhlciAxNCAqLwogCXsKIAkxLAogCVNTTDNfVFhUX0VESF9SU0FfREVTXzQwX0NCQ19TSEEsCiAJU1NMM19DS19FREhfUlNBX0RFU180MF9DQkNfU0hBLAotCVNTTF9rRURIfFNTTF9hUlNBfFNTTF9ERVN8U1NMX1NIQTF8U1NMX1NTTFYzLAorCVNTTF9rRURILAorCVNTTF9hUlNBLAorCVNTTF9ERVMsCisJU1NMX1NIQTEsCisJU1NMX1NTTFYzLAogCVNTTF9FWFBPUlR8U1NMX0VYUDQwLAotCTAsCisJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKIAk0MCwKIAk1NiwKLQlTU0xfQUxMX0NJUEhFUlMsCi0JU1NMX0FMTF9TVFJFTkdUSFMsCiAJfSwKKwogLyogQ2lwaGVyIDE1ICovCiAJewogCTEsCiAJU1NMM19UWFRfRURIX1JTQV9ERVNfNjRfQ0JDX1NIQSwKIAlTU0wzX0NLX0VESF9SU0FfREVTXzY0X0NCQ19TSEEsCi0JU1NMX2tFREh8U1NMX2FSU0F8U1NMX0RFUyAgfFNTTF9TSEExfFNTTF9TU0xWMywKKwlTU0xfa0VESCwKKwlTU0xfYVJTQSwKKwlTU0xfREVTLAorCVNTTF9TSEExLAorCVNTTF9TU0xWMywKIAlTU0xfTk9UX0VYUHxTU0xfTE9XLAotCTAsCisJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKIAk1NiwKIAk1NiwKLQlTU0xfQUxMX0NJUEhFUlMsCi0JU1NMX0FMTF9TVFJFTkdUSFMsCiAJfSwKKwogLyogQ2lwaGVyIDE2ICovCiAJewogCTEsCiAJU1NMM19UWFRfRURIX1JTQV9ERVNfMTkyX0NCQzNfU0hBLAogCVNTTDNfQ0tfRURIX1JTQV9ERVNfMTkyX0NCQzNfU0hBLAotCVNTTF9rRURIfFNTTF9hUlNBfFNTTF8zREVTIHxTU0xfU0hBMXxTU0xfU1NMVjMsCisJU1NMX2tFREgsCisJU1NMX2FSU0EsCisJU1NMXzNERVMsCisJU1NMX1NIQTEsCisJU1NMX1NTTFYzLAogCVNTTF9OT1RfRVhQfFNTTF9ISUdIfFNTTF9GSVBTLAotCTAsCisJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKIAkxNjgsCiAJMTY4LAotCVNTTF9BTExfQ0lQSEVSUywKLQlTU0xfQUxMX1NUUkVOR1RIUywKIAl9LAorCiAvKiBDaXBoZXIgMTcgKi8KIAl7CiAJMSwKIAlTU0wzX1RYVF9BREhfUkM0XzQwX01ENSwKIAlTU0wzX0NLX0FESF9SQzRfNDBfTUQ1LAotCVNTTF9rRURIIHxTU0xfYU5VTEx8U1NMX1JDNCAgfFNTTF9NRDUgfFNTTF9TU0xWMywKKwlTU0xfa0VESCwKKwlTU0xfYU5VTEwsCisJU1NMX1JDNCwKKwlTU0xfTUQ1LAorCVNTTF9TU0xWMywKIAlTU0xfRVhQT1JUfFNTTF9FWFA0MCwKLQkwLAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCiAJNDAsCiAJMTI4LAotCVNTTF9BTExfQ0lQSEVSUywKLQlTU0xfQUxMX1NUUkVOR1RIUywKIAl9LAorCiAvKiBDaXBoZXIgMTggKi8KIAl7CiAJMSwKIAlTU0wzX1RYVF9BREhfUkM0XzEyOF9NRDUsCiAJU1NMM19DS19BREhfUkM0XzEyOF9NRDUsCi0JU1NMX2tFREggfFNTTF9hTlVMTHxTU0xfUkM0ICB8U1NMX01ENSB8U1NMX1NTTFYzLAorCVNTTF9rRURILAorCVNTTF9hTlVMTCwKKwlTU0xfUkM0LAorCVNTTF9NRDUsCisJU1NMX1NTTFYzLAogCVNTTF9OT1RfRVhQfFNTTF9NRURJVU0sCi0JMCwKKwlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAogCTEyOCwKIAkxMjgsCi0JU1NMX0FMTF9DSVBIRVJTLAotCVNTTF9BTExfU1RSRU5HVEhTLAogCX0sCisKIC8qIENpcGhlciAxOSAqLwogCXsKIAkxLAogCVNTTDNfVFhUX0FESF9ERVNfNDBfQ0JDX1NIQSwKIAlTU0wzX0NLX0FESF9ERVNfNDBfQ0JDX1NIQSwKLQlTU0xfa0VESCB8U1NMX2FOVUxMfFNTTF9ERVN8U1NMX1NIQTF8U1NMX1NTTFYzLAorCVNTTF9rRURILAorCVNTTF9hTlVMTCwKKwlTU0xfREVTLAorCVNTTF9TSEExLAorCVNTTF9TU0xWMywKIAlTU0xfRVhQT1JUfFNTTF9FWFA0MCwKLQkwLAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCiAJNDAsCiAJMTI4LAotCVNTTF9BTExfQ0lQSEVSUywKLQlTU0xfQUxMX1NUUkVOR1RIUywKIAl9LAorCiAvKiBDaXBoZXIgMUEgKi8KIAl7CiAJMSwKIAlTU0wzX1RYVF9BREhfREVTXzY0X0NCQ19TSEEsCiAJU1NMM19DS19BREhfREVTXzY0X0NCQ19TSEEsCi0JU1NMX2tFREggfFNTTF9hTlVMTHxTU0xfREVTICB8U1NMX1NIQTF8U1NMX1NTTFYzLAorCVNTTF9rRURILAorCVNTTF9hTlVMTCwKKwlTU0xfREVTLAorCVNTTF9TSEExLAorCVNTTF9TU0xWMywKIAlTU0xfTk9UX0VYUHxTU0xfTE9XLAotCTAsCisJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKIAk1NiwKIAk1NiwKLQlTU0xfQUxMX0NJUEhFUlMsCi0JU1NMX0FMTF9TVFJFTkdUSFMsCiAJfSwKKwogLyogQ2lwaGVyIDFCICovCiAJewogCTEsCiAJU1NMM19UWFRfQURIX0RFU18xOTJfQ0JDX1NIQSwKIAlTU0wzX0NLX0FESF9ERVNfMTkyX0NCQ19TSEEsCi0JU1NMX2tFREggfFNTTF9hTlVMTHxTU0xfM0RFUyB8U1NMX1NIQTF8U1NMX1NTTFYzLAorCVNTTF9rRURILAorCVNTTF9hTlVMTCwKKwlTU0xfM0RFUywKKwlTU0xfU0hBMSwKKwlTU0xfU1NMVjMsCiAJU1NMX05PVF9FWFB8U1NMX0hJR0h8U1NMX0ZJUFMsCi0JMCwKKwlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAogCTE2OCwKIAkxNjgsCi0JU1NMX0FMTF9DSVBIRVJTLAotCVNTTF9BTExfU1RSRU5HVEhTLAogCX0sCiAKLS8qIEZvcnRlenphICovCisvKiBGb3J0ZXp6YSBjaXBoZXJzdWl0ZSBmcm9tIFNTTCAzLjAgc3BlYyAqLworI2lmIDAKIC8qIENpcGhlciAxQyAqLwogCXsKIAkwLAogCVNTTDNfVFhUX0ZaQV9ETVNfTlVMTF9TSEEsCiAJU1NMM19DS19GWkFfRE1TX05VTExfU0hBLAotCVNTTF9rRlpBfFNTTF9hRlpBIHxTU0xfZU5VTEwgfFNTTF9TSEExfFNTTF9TU0xWMywKKwlTU0xfa0ZaQSwKKwlTU0xfYUZaQSwKKwlTU0xfZU5VTEwsCisJU1NMX1NIQTEsCisJU1NMX1NTTFYzLAogCVNTTF9OT1RfRVhQfFNTTF9TVFJPTkdfTk9ORSwKKwlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAogCTAsCiAJMCwKLQkwLAotCVNTTF9BTExfQ0lQSEVSUywKLQlTU0xfQUxMX1NUUkVOR1RIUywKIAl9LAogCiAvKiBDaXBoZXIgMUQgKi8KQEAgLTUxNiw0NSArNjI5LDUwIEBACiAJMCwKIAlTU0wzX1RYVF9GWkFfRE1TX0ZaQV9TSEEsCiAJU1NMM19DS19GWkFfRE1TX0ZaQV9TSEEsCi0JU1NMX2tGWkF8U1NMX2FGWkEgfFNTTF9lRlpBIHxTU0xfU0hBMXxTU0xfU1NMVjMsCisJU1NMX2tGWkEsCisJU1NMX2FGWkEsCisJU1NMX2VGWkEsCisJU1NMX1NIQTEsCisJU1NMX1NTTFYzLAogCVNTTF9OT1RfRVhQfFNTTF9TVFJPTkdfTk9ORSwKKwlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAogCTAsCiAJMCwKLQkwLAotCVNTTF9BTExfQ0lQSEVSUywKLQlTU0xfQUxMX1NUUkVOR1RIUywKIAl9LAogCi0jaWYgMAogLyogQ2lwaGVyIDFFICovCiAJewogCTAsCiAJU1NMM19UWFRfRlpBX0RNU19SQzRfU0hBLAogCVNTTDNfQ0tfRlpBX0RNU19SQzRfU0hBLAotCVNTTF9rRlpBfFNTTF9hRlpBIHxTU0xfUkM0ICB8U1NMX1NIQTF8U1NMX1NTTFYzLAorCVNTTF9rRlpBLAorCVNTTF9hRlpBLAorCVNTTF9SQzQsCisJU1NMX1NIQTEsCisJU1NMX1NTTFYzLAogCVNTTF9OT1RfRVhQfFNTTF9NRURJVU0sCi0JMCwKKwlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAogCTEyOCwKIAkxMjgsCi0JU1NMX0FMTF9DSVBIRVJTLAotCVNTTF9BTExfU1RSRU5HVEhTLAogCX0sCiAjZW5kaWYKIAogI2lmbmRlZiBPUEVOU1NMX05PX0tSQjUKLS8qIFRoZSBLZXJiZXJvcyBjaXBoZXJzICovCisvKiBUaGUgS2VyYmVyb3MgY2lwaGVycyovCiAvKiBDaXBoZXIgMUUgKi8KIAl7CiAJMSwKIAlTU0wzX1RYVF9LUkI1X0RFU182NF9DQkNfU0hBLAogCVNTTDNfQ0tfS1JCNV9ERVNfNjRfQ0JDX1NIQSwKLQlTU0xfa0tSQjV8U1NMX2FLUkI1fCAgU1NMX0RFU3xTU0xfU0hBMSAgIHxTU0xfU1NMVjMsCisJU1NMX2tLUkI1LAorCVNTTF9hS1JCNSwKKwlTU0xfREVTLAorCVNTTF9TSEExLAorCVNTTF9TU0xWMywKIAlTU0xfTk9UX0VYUHxTU0xfTE9XLAotCTAsCisJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKIAk1NiwKIAk1NiwKLQlTU0xfQUxMX0NJUEhFUlMsCi0JU1NMX0FMTF9TVFJFTkdUSFMsCiAJfSwKIAogLyogQ2lwaGVyIDFGICovCkBAIC01NjIsMTMgKzY4MCwxNSBAQAogCTEsCiAJU1NMM19UWFRfS1JCNV9ERVNfMTkyX0NCQzNfU0hBLAogCVNTTDNfQ0tfS1JCNV9ERVNfMTkyX0NCQzNfU0hBLAotCVNTTF9rS1JCNXxTU0xfYUtSQjV8ICBTU0xfM0RFU3xTU0xfU0hBMSAgfFNTTF9TU0xWMywKKwlTU0xfa0tSQjUsCisJU1NMX2FLUkI1LAorCVNTTF8zREVTLAorCVNTTF9TSEExLAorCVNTTF9TU0xWMywKIAlTU0xfTk9UX0VYUHxTU0xfSElHSHxTU0xfRklQUywKLQkwLAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCiAJMTY4LAogCTE2OCwKLQlTU0xfQUxMX0NJUEhFUlMsCi0JU1NMX0FMTF9TVFJFTkdUSFMsCiAJfSwKIAogLyogQ2lwaGVyIDIwICovCkBAIC01NzYsMTMgKzY5NiwxNSBAQAogCTEsCiAJU1NMM19UWFRfS1JCNV9SQzRfMTI4X1NIQSwKIAlTU0wzX0NLX0tSQjVfUkM0XzEyOF9TSEEsCi0JU1NMX2tLUkI1fFNTTF9hS1JCNXwgIFNTTF9SQzR8U1NMX1NIQTEgIHxTU0xfU1NMVjMsCisJU1NMX2tLUkI1LAorCVNTTF9hS1JCNSwKKwlTU0xfUkM0LAorCVNTTF9TSEExLAorCVNTTF9TU0xWMywKIAlTU0xfTk9UX0VYUHxTU0xfTUVESVVNLAotCTAsCisJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKIAkxMjgsCiAJMTI4LAotCVNTTF9BTExfQ0lQSEVSUywKLQlTU0xfQUxMX1NUUkVOR1RIUywKIAl9LAogCiAvKiBDaXBoZXIgMjEgKi8KQEAgLTU5MCwxMyArNzEyLDE1IEBACiAJMSwKIAlTU0wzX1RYVF9LUkI1X0lERUFfMTI4X0NCQ19TSEEsCiAJU1NMM19DS19LUkI1X0lERUFfMTI4X0NCQ19TSEEsCi0JU1NMX2tLUkI1fFNTTF9hS1JCNXwgIFNTTF9JREVBfFNTTF9TSEExICB8U1NMX1NTTFYzLAorCVNTTF9rS1JCNSwKKwlTU0xfYUtSQjUsCisJU1NMX0lERUEsCisJU1NMX1NIQTEsCisJU1NMX1NTTFYzLAogCVNTTF9OT1RfRVhQfFNTTF9NRURJVU0sCi0JMCwKKwlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAogCTEyOCwKIAkxMjgsCi0JU1NMX0FMTF9DSVBIRVJTLAotCVNTTF9BTExfU1RSRU5HVEhTLAogCX0sCiAKIC8qIENpcGhlciAyMiAqLwpAQCAtNjA0LDEzICs3MjgsMTUgQEAKIAkxLAogCVNTTDNfVFhUX0tSQjVfREVTXzY0X0NCQ19NRDUsCiAJU1NMM19DS19LUkI1X0RFU182NF9DQkNfTUQ1LAotCVNTTF9rS1JCNXxTU0xfYUtSQjV8ICBTU0xfREVTfFNTTF9NRDUgICAgfFNTTF9TU0xWMywKKwlTU0xfa0tSQjUsCisJU1NMX2FLUkI1LAorCVNTTF9ERVMsCisJU1NMX01ENSwKKwlTU0xfU1NMVjMsCiAJU1NMX05PVF9FWFB8U1NMX0xPVywKLQkwLAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCiAJNTYsCiAJNTYsCi0JU1NMX0FMTF9DSVBIRVJTLAotCVNTTF9BTExfU1RSRU5HVEhTLAogCX0sCiAKIC8qIENpcGhlciAyMyAqLwpAQCAtNjE4LDEzICs3NDQsMTUgQEAKIAkxLAogCVNTTDNfVFhUX0tSQjVfREVTXzE5Ml9DQkMzX01ENSwKIAlTU0wzX0NLX0tSQjVfREVTXzE5Ml9DQkMzX01ENSwKLQlTU0xfa0tSQjV8U1NMX2FLUkI1fCAgU1NMXzNERVN8U1NMX01ENSAgIHxTU0xfU1NMVjMsCisJU1NMX2tLUkI1LAorCVNTTF9hS1JCNSwKKwlTU0xfM0RFUywKKwlTU0xfTUQ1LAorCVNTTF9TU0xWMywKIAlTU0xfTk9UX0VYUHxTU0xfSElHSCwKLQkwLAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCiAJMTY4LAogCTE2OCwKLQlTU0xfQUxMX0NJUEhFUlMsCi0JU1NMX0FMTF9TVFJFTkdUSFMsCiAJfSwKIAogLyogQ2lwaGVyIDI0ICovCkBAIC02MzIsMTMgKzc2MCwxNSBAQAogCTEsCiAJU1NMM19UWFRfS1JCNV9SQzRfMTI4X01ENSwKIAlTU0wzX0NLX0tSQjVfUkM0XzEyOF9NRDUsCi0JU1NMX2tLUkI1fFNTTF9hS1JCNXwgIFNTTF9SQzR8U1NMX01ENSAgfFNTTF9TU0xWMywKKwlTU0xfa0tSQjUsCisJU1NMX2FLUkI1LAorCVNTTF9SQzQsCisJU1NMX01ENSwKKwlTU0xfU1NMVjMsCiAJU1NMX05PVF9FWFB8U1NMX01FRElVTSwKLQkwLAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCiAJMTI4LAogCTEyOCwKLQlTU0xfQUxMX0NJUEhFUlMsCi0JU1NMX0FMTF9TVFJFTkdUSFMsCiAJfSwKIAogLyogQ2lwaGVyIDI1ICovCkBAIC02NDYsMTMgKzc3NiwxNSBAQAogCTEsCiAJU1NMM19UWFRfS1JCNV9JREVBXzEyOF9DQkNfTUQ1LAogCVNTTDNfQ0tfS1JCNV9JREVBXzEyOF9DQkNfTUQ1LAotCVNTTF9rS1JCNXxTU0xfYUtSQjV8ICBTU0xfSURFQXxTU0xfTUQ1ICB8U1NMX1NTTFYzLAorCVNTTF9rS1JCNSwKKwlTU0xfYUtSQjUsCisJU1NMX0lERUEsCisJU1NMX01ENSwKKwlTU0xfU1NMVjMsCiAJU1NMX05PVF9FWFB8U1NMX01FRElVTSwKLQkwLAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCiAJMTI4LAogCTEyOCwKLQlTU0xfQUxMX0NJUEhFUlMsCi0JU1NMX0FMTF9TVFJFTkdUSFMsCiAJfSwKIAogLyogQ2lwaGVyIDI2ICovCkBAIC02NjAsMTMgKzc5MiwxNSBAQAogCTEsCiAJU1NMM19UWFRfS1JCNV9ERVNfNDBfQ0JDX1NIQSwKIAlTU0wzX0NLX0tSQjVfREVTXzQwX0NCQ19TSEEsCi0JU1NMX2tLUkI1fFNTTF9hS1JCNXwgIFNTTF9ERVN8U1NMX1NIQTEgICB8U1NMX1NTTFYzLAorCVNTTF9rS1JCNSwKKwlTU0xfYUtSQjUsCisJU1NMX0RFUywKKwlTU0xfU0hBMSwKKwlTU0xfU1NMVjMsCiAJU1NMX0VYUE9SVHxTU0xfRVhQNDAsCi0JMCwKKwlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAogCTQwLAogCTU2LAotCVNTTF9BTExfQ0lQSEVSUywKLQlTU0xfQUxMX1NUUkVOR1RIUywKIAl9LAogCiAvKiBDaXBoZXIgMjcgKi8KQEAgLTY3NCwxMyArODA4LDE1IEBACiAJMSwKIAlTU0wzX1RYVF9LUkI1X1JDMl80MF9DQkNfU0hBLAogCVNTTDNfQ0tfS1JCNV9SQzJfNDBfQ0JDX1NIQSwKLQlTU0xfa0tSQjV8U1NMX2FLUkI1fCAgU1NMX1JDMnxTU0xfU0hBMSAgIHxTU0xfU1NMVjMsCisJU1NMX2tLUkI1LAorCVNTTF9hS1JCNSwKKwlTU0xfUkMyLAorCVNTTF9TSEExLAorCVNTTF9TU0xWMywKIAlTU0xfRVhQT1JUfFNTTF9FWFA0MCwKLQkwLAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCiAJNDAsCiAJMTI4LAotCVNTTF9BTExfQ0lQSEVSUywKLQlTU0xfQUxMX1NUUkVOR1RIUywKIAl9LAogCiAvKiBDaXBoZXIgMjggKi8KQEAgLTY4OCwxMyArODI0LDE1IEBACiAJMSwKIAlTU0wzX1RYVF9LUkI1X1JDNF80MF9TSEEsCiAJU1NMM19DS19LUkI1X1JDNF80MF9TSEEsCi0JU1NMX2tLUkI1fFNTTF9hS1JCNXwgIFNTTF9SQzR8U1NMX1NIQTEgICB8U1NMX1NTTFYzLAorCVNTTF9rS1JCNSwKKwlTU0xfYUtSQjUsCisJU1NMX1JDNCwKKwlTU0xfU0hBMSwKKwlTU0xfU1NMVjMsCiAJU1NMX0VYUE9SVHxTU0xfRVhQNDAsCi0JMCwKKwlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAogCTQwLAogCTEyOCwKLQlTU0xfQUxMX0NJUEhFUlMsCi0JU1NMX0FMTF9TVFJFTkdUSFMsCiAJfSwKIAogLyogQ2lwaGVyIDI5ICovCkBAIC03MDIsMTMgKzg0MCwxNSBAQAogCTEsCiAJU1NMM19UWFRfS1JCNV9ERVNfNDBfQ0JDX01ENSwKIAlTU0wzX0NLX0tSQjVfREVTXzQwX0NCQ19NRDUsCi0JU1NMX2tLUkI1fFNTTF9hS1JCNXwgIFNTTF9ERVN8U1NMX01ENSAgICB8U1NMX1NTTFYzLAorCVNTTF9rS1JCNSwKKwlTU0xfYUtSQjUsCisJU1NMX0RFUywKKwlTU0xfTUQ1LAorCVNTTF9TU0xWMywKIAlTU0xfRVhQT1JUfFNTTF9FWFA0MCwKLQkwLAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCiAJNDAsCiAJNTYsCi0JU1NMX0FMTF9DSVBIRVJTLAotCVNTTF9BTExfU1RSRU5HVEhTLAogCX0sCiAKIC8qIENpcGhlciAyQSAqLwpAQCAtNzE2LDEzICs4NTYsMTUgQEAKIAkxLAogCVNTTDNfVFhUX0tSQjVfUkMyXzQwX0NCQ19NRDUsCiAJU1NMM19DS19LUkI1X1JDMl80MF9DQkNfTUQ1LAotCVNTTF9rS1JCNXxTU0xfYUtSQjV8ICBTU0xfUkMyfFNTTF9NRDUgICAgfFNTTF9TU0xWMywKKwlTU0xfa0tSQjUsCisJU1NMX2FLUkI1LAorCVNTTF9SQzIsCisJU1NMX01ENSwKKwlTU0xfU1NMVjMsCiAJU1NMX0VYUE9SVHxTU0xfRVhQNDAsCi0JMCwKKwlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAogCTQwLAogCTEyOCwKLQlTU0xfQUxMX0NJUEhFUlMsCi0JU1NMX0FMTF9TVFJFTkdUSFMsCiAJfSwKIAogLyogQ2lwaGVyIDJCICovCkBAIC03MzAsMTMgKzg3MiwxNSBAQAogCTEsCiAJU1NMM19UWFRfS1JCNV9SQzRfNDBfTUQ1LAogCVNTTDNfQ0tfS1JCNV9SQzRfNDBfTUQ1LAotCVNTTF9rS1JCNXxTU0xfYUtSQjV8ICBTU0xfUkM0fFNTTF9NRDUgICAgfFNTTF9TU0xWMywKKwlTU0xfa0tSQjUsCisJU1NMX2FLUkI1LAorCVNTTF9SQzQsCisJU1NMX01ENSwKKwlTU0xfU1NMVjMsCiAJU1NMX0VYUE9SVHxTU0xfRVhQNDAsCi0JMCwKKwlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAogCTQwLAogCTEyOCwKLQlTU0xfQUxMX0NJUEhFUlMsCi0JU1NMX0FMTF9TVFJFTkdUSFMsCiAJfSwKICNlbmRpZgkvKiBPUEVOU1NMX05PX0tSQjUgKi8KIApAQCAtNzQ2LDc4ICs4OTAsOTAgQEAKIAkxLAogCVRMUzFfVFhUX1JTQV9XSVRIX0FFU18xMjhfU0hBLAogCVRMUzFfQ0tfUlNBX1dJVEhfQUVTXzEyOF9TSEEsCi0JU1NMX2tSU0F8U1NMX2FSU0F8U1NMX0FFU3xTU0xfU0hBIHxTU0xfVExTVjEsCisJU1NMX2tSU0EsCisJU1NMX2FSU0EsCisJU1NMX0FFUzEyOCwKKwlTU0xfU0hBMSwKKwlTU0xfVExTVjEsCiAJU1NMX05PVF9FWFB8U1NMX0hJR0h8U1NMX0ZJUFMsCi0JMCwKKwlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAogCTEyOCwKIAkxMjgsCi0JU1NMX0FMTF9DSVBIRVJTLAotCVNTTF9BTExfU1RSRU5HVEhTLAogCX0sCiAvKiBDaXBoZXIgMzAgKi8KIAl7CiAJMCwKIAlUTFMxX1RYVF9ESF9EU1NfV0lUSF9BRVNfMTI4X1NIQSwKIAlUTFMxX0NLX0RIX0RTU19XSVRIX0FFU18xMjhfU0hBLAotCVNTTF9rREhkfFNTTF9hREh8U1NMX0FFU3xTU0xfU0hBfFNTTF9UTFNWMSwKKwlTU0xfa0RIZCwKKwlTU0xfYURILAorCVNTTF9BRVMxMjgsCisJU1NMX1NIQTEsCisJU1NMX1RMU1YxLAogCVNTTF9OT1RfRVhQfFNTTF9ISUdIfFNTTF9GSVBTLAotCTAsCisJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKIAkxMjgsCiAJMTI4LAotCVNTTF9BTExfQ0lQSEVSUywKLQlTU0xfQUxMX1NUUkVOR1RIUywKIAl9LAogLyogQ2lwaGVyIDMxICovCiAJewogCTAsCiAJVExTMV9UWFRfREhfUlNBX1dJVEhfQUVTXzEyOF9TSEEsCiAJVExTMV9DS19ESF9SU0FfV0lUSF9BRVNfMTI4X1NIQSwKLQlTU0xfa0RIcnxTU0xfYURIfFNTTF9BRVN8U1NMX1NIQXxTU0xfVExTVjEsCisJU1NMX2tESHIsCisJU1NMX2FESCwKKwlTU0xfQUVTMTI4LAorCVNTTF9TSEExLAorCVNTTF9UTFNWMSwKIAlTU0xfTk9UX0VYUHxTU0xfSElHSHxTU0xfRklQUywKLQkwLAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCiAJMTI4LAogCTEyOCwKLQlTU0xfQUxMX0NJUEhFUlMsCi0JU1NMX0FMTF9TVFJFTkdUSFMsCiAJfSwKIC8qIENpcGhlciAzMiAqLwogCXsKIAkxLAogCVRMUzFfVFhUX0RIRV9EU1NfV0lUSF9BRVNfMTI4X1NIQSwKIAlUTFMxX0NLX0RIRV9EU1NfV0lUSF9BRVNfMTI4X1NIQSwKLQlTU0xfa0VESHxTU0xfYURTU3xTU0xfQUVTfFNTTF9TSEF8U1NMX1RMU1YxLAorCVNTTF9rRURILAorCVNTTF9hRFNTLAorCVNTTF9BRVMxMjgsCisJU1NMX1NIQTEsCisJU1NMX1RMU1YxLAogCVNTTF9OT1RfRVhQfFNTTF9ISUdIfFNTTF9GSVBTLAotCTAsCisJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKIAkxMjgsCiAJMTI4LAotCVNTTF9BTExfQ0lQSEVSUywKLQlTU0xfQUxMX1NUUkVOR1RIUywKIAl9LAogLyogQ2lwaGVyIDMzICovCiAJewogCTEsCiAJVExTMV9UWFRfREhFX1JTQV9XSVRIX0FFU18xMjhfU0hBLAogCVRMUzFfQ0tfREhFX1JTQV9XSVRIX0FFU18xMjhfU0hBLAotCVNTTF9rRURIfFNTTF9hUlNBfFNTTF9BRVN8U1NMX1NIQXxTU0xfVExTVjEsCisJU1NMX2tFREgsCisJU1NMX2FSU0EsCisJU1NMX0FFUzEyOCwKKwlTU0xfU0hBMSwKKwlTU0xfVExTVjEsCiAJU1NMX05PVF9FWFB8U1NMX0hJR0h8U1NMX0ZJUFMsCi0JMCwKKwlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAogCTEyOCwKIAkxMjgsCi0JU1NMX0FMTF9DSVBIRVJTLAotCVNTTF9BTExfU1RSRU5HVEhTLAogCX0sCiAvKiBDaXBoZXIgMzQgKi8KIAl7CiAJMSwKIAlUTFMxX1RYVF9BREhfV0lUSF9BRVNfMTI4X1NIQSwKIAlUTFMxX0NLX0FESF9XSVRIX0FFU18xMjhfU0hBLAotCVNTTF9rRURIfFNTTF9hTlVMTHxTU0xfQUVTfFNTTF9TSEF8U1NMX1RMU1YxLAorCVNTTF9rRURILAorCVNTTF9hTlVMTCwKKwlTU0xfQUVTMTI4LAorCVNTTF9TSEExLAorCVNTTF9UTFNWMSwKIAlTU0xfTk9UX0VYUHxTU0xfSElHSHxTU0xfRklQUywKLQkwLAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCiAJMTI4LAogCTEyOCwKLQlTU0xfQUxMX0NJUEhFUlMsCi0JU1NMX0FMTF9TVFJFTkdUSFMsCiAJfSwKIAogLyogQ2lwaGVyIDM1ICovCkBAIC04MjUsNzggKzk4MSw5NCBAQAogCTEsCiAJVExTMV9UWFRfUlNBX1dJVEhfQUVTXzI1Nl9TSEEsCiAJVExTMV9DS19SU0FfV0lUSF9BRVNfMjU2X1NIQSwKLQlTU0xfa1JTQXxTU0xfYVJTQXxTU0xfQUVTfFNTTF9TSEEgfFNTTF9UTFNWMSwKKwlTU0xfa1JTQSwKKwlTU0xfYVJTQSwKKwlTU0xfQUVTMjU2LAorCVNTTF9TSEExLAorCVNTTF9UTFNWMSwKIAlTU0xfTk9UX0VYUHxTU0xfSElHSHxTU0xfRklQUywKLQkwLAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCiAJMjU2LAogCTI1NiwKLQlTU0xfQUxMX0NJUEhFUlMsCi0JU1NMX0FMTF9TVFJFTkdUSFMsCiAJfSwKIC8qIENpcGhlciAzNiAqLwogCXsKIAkwLAogCVRMUzFfVFhUX0RIX0RTU19XSVRIX0FFU18yNTZfU0hBLAogCVRMUzFfQ0tfREhfRFNTX1dJVEhfQUVTXzI1Nl9TSEEsCi0JU1NMX2tESGR8U1NMX2FESHxTU0xfQUVTfFNTTF9TSEF8U1NMX1RMU1YxLAorCVNTTF9rREhkLAorCVNTTF9hREgsCisJU1NMX0FFUzI1NiwKKwlTU0xfU0hBMSwKKwlTU0xfVExTVjEsCiAJU1NMX05PVF9FWFB8U1NMX0hJR0h8U1NMX0ZJUFMsCi0JMCwKKwlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAogCTI1NiwKIAkyNTYsCi0JU1NMX0FMTF9DSVBIRVJTLAotCVNTTF9BTExfU1RSRU5HVEhTLAogCX0sCisKIC8qIENpcGhlciAzNyAqLwogCXsKLQkwLAorCTAsIC8qIG5vdCBpbXBsZW1lbnRlZCAobm9uLWVwaGVtZXJhbCBESCkgKi8KIAlUTFMxX1RYVF9ESF9SU0FfV0lUSF9BRVNfMjU2X1NIQSwKIAlUTFMxX0NLX0RIX1JTQV9XSVRIX0FFU18yNTZfU0hBLAotCVNTTF9rREhyfFNTTF9hREh8U1NMX0FFU3xTU0xfU0hBfFNTTF9UTFNWMSwKKwlTU0xfa0RIciwKKwlTU0xfYURILAorCVNTTF9BRVMyNTYsCisJU1NMX1NIQTEsCisJU1NMX1RMU1YxLAogCVNTTF9OT1RfRVhQfFNTTF9ISUdIfFNTTF9GSVBTLAotCTAsCisJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKIAkyNTYsCiAJMjU2LAotCVNTTF9BTExfQ0lQSEVSUywKLQlTU0xfQUxMX1NUUkVOR1RIUywKIAl9LAorCiAvKiBDaXBoZXIgMzggKi8KIAl7CiAJMSwKIAlUTFMxX1RYVF9ESEVfRFNTX1dJVEhfQUVTXzI1Nl9TSEEsCiAJVExTMV9DS19ESEVfRFNTX1dJVEhfQUVTXzI1Nl9TSEEsCi0JU1NMX2tFREh8U1NMX2FEU1N8U1NMX0FFU3xTU0xfU0hBfFNTTF9UTFNWMSwKKwlTU0xfa0VESCwKKwlTU0xfYURTUywKKwlTU0xfQUVTMjU2LAorCVNTTF9TSEExLAorCVNTTF9UTFNWMSwKIAlTU0xfTk9UX0VYUHxTU0xfSElHSHxTU0xfRklQUywKLQkwLAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCiAJMjU2LAogCTI1NiwKLQlTU0xfQUxMX0NJUEhFUlMsCi0JU1NMX0FMTF9TVFJFTkdUSFMsCiAJfSwKKwogLyogQ2lwaGVyIDM5ICovCiAJewogCTEsCiAJVExTMV9UWFRfREhFX1JTQV9XSVRIX0FFU18yNTZfU0hBLAogCVRMUzFfQ0tfREhFX1JTQV9XSVRIX0FFU18yNTZfU0hBLAotCVNTTF9rRURIfFNTTF9hUlNBfFNTTF9BRVN8U1NMX1NIQXxTU0xfVExTVjEsCisJU1NMX2tFREgsCisJU1NMX2FSU0EsCisJU1NMX0FFUzI1NiwKKwlTU0xfU0hBMSwKKwlTU0xfVExTVjEsCiAJU1NMX05PVF9FWFB8U1NMX0hJR0h8U1NMX0ZJUFMsCi0JMCwKKwlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAogCTI1NiwKIAkyNTYsCi0JU1NMX0FMTF9DSVBIRVJTLAotCVNTTF9BTExfU1RSRU5HVEhTLAogCX0sCisKIAkvKiBDaXBoZXIgM0EgKi8KIAl7CiAJMSwKIAlUTFMxX1RYVF9BREhfV0lUSF9BRVNfMjU2X1NIQSwKIAlUTFMxX0NLX0FESF9XSVRIX0FFU18yNTZfU0hBLAotCVNTTF9rRURIfFNTTF9hTlVMTHxTU0xfQUVTfFNTTF9TSEF8U1NMX1RMU1YxLAorCVNTTF9rRURILAorCVNTTF9hTlVMTCwKKwlTU0xfQUVTMjU2LAorCVNTTF9TSEExLAorCVNTTF9UTFNWMSwKIAlTU0xfTk9UX0VYUHxTU0xfSElHSHxTU0xfRklQUywKLQkwLAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCiAJMjU2LAogCTI1NiwKLQlTU0xfQUxMX0NJUEhFUlMsCi0JU1NMX0FMTF9TVFJFTkdUSFMsCiAJfSwKIAogI2lmbmRlZiBPUEVOU1NMX05PX0NBTUVMTElBCkBAIC05MDcsNzggKzEwNzksOTUgQEAKIAkxLAogCVRMUzFfVFhUX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBLAogCVRMUzFfQ0tfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEsCi0JU1NMX2tSU0F8U1NMX2FSU0F8U1NMX0NBTUVMTElBfFNTTF9TSEF8U1NMX1RMU1YxLAorCVNTTF9rUlNBLAorCVNTTF9hUlNBLAorCVNTTF9DQU1FTExJQTEyOCwKKwlTU0xfU0hBMSwKKwlTU0xfVExTVjEsCiAJU1NMX05PVF9FWFB8U1NMX0hJR0gsCi0JMCwKKwlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAogCTEyOCwKIAkxMjgsCi0JU1NMX0FMTF9DSVBIRVJTLAotCVNTTF9BTExfU1RSRU5HVEhTCiAJfSwKKwogCS8qIENpcGhlciA0MiAqLwogCXsKIAkwLCAvKiBub3QgaW1wbGVtZW50ZWQgKG5vbi1lcGhlbWVyYWwgREgpICovCiAJVExTMV9UWFRfREhfRFNTX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEsCiAJVExTMV9DS19ESF9EU1NfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQSwKLQlTU0xfa0RIZHxTU0xfYURIfFNTTF9DQU1FTExJQXxTU0xfU0hBfFNTTF9UTFNWMSwKKwlTU0xfa0RIZCwKKwlTU0xfYURILAorCVNTTF9DQU1FTExJQTEyOCwKKwlTU0xfU0hBMSwKKwlTU0xfVExTVjEsCiAJU1NMX05PVF9FWFB8U1NMX0hJR0gsCi0JMCwKKwlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAogCTEyOCwKIAkxMjgsCi0JU1NMX0FMTF9DSVBIRVJTLAotCVNTTF9BTExfU1RSRU5HVEhTCiAJfSwKKwogCS8qIENpcGhlciA0MyAqLwogCXsKIAkwLCAvKiBub3QgaW1wbGVtZW50ZWQgKG5vbi1lcGhlbWVyYWwgREgpICovCiAJVExTMV9UWFRfREhfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEsCiAJVExTMV9DS19ESF9SU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQSwKLQlTU0xfa0RIcnxTU0xfYURIfFNTTF9DQU1FTExJQXxTU0xfU0hBfFNTTF9UTFNWMSwKKwlTU0xfa0RIciwKKwlTU0xfYURILAorCVNTTF9DQU1FTExJQTEyOCwKKwlTU0xfU0hBMSwKKwlTU0xfVExTVjEsCiAJU1NMX05PVF9FWFB8U1NMX0hJR0gsCi0JMCwKKwlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAogCTEyOCwKIAkxMjgsCi0JU1NMX0FMTF9DSVBIRVJTLAotCVNTTF9BTExfU1RSRU5HVEhTCiAJfSwKKwogCS8qIENpcGhlciA0NCAqLwogCXsKIAkxLAogCVRMUzFfVFhUX0RIRV9EU1NfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQSwKIAlUTFMxX0NLX0RIRV9EU1NfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQSwKLQlTU0xfa0VESHxTU0xfYURTU3xTU0xfQ0FNRUxMSUF8U1NMX1NIQXxTU0xfVExTVjEsCisJU1NMX2tFREgsCisJU1NMX2FEU1MsCisJU1NMX0NBTUVMTElBMTI4LAorCVNTTF9TSEExLAorCVNTTF9UTFNWMSwKIAlTU0xfTk9UX0VYUHxTU0xfSElHSCwKLQkwLAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCiAJMTI4LAogCTEyOCwKLQlTU0xfQUxMX0NJUEhFUlMsCi0JU1NMX0FMTF9TVFJFTkdUSFMKIAl9LAorCiAJLyogQ2lwaGVyIDQ1ICovCiAJewogCTEsCiAJVExTMV9UWFRfREhFX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBLAogCVRMUzFfQ0tfREhFX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBLAotCVNTTF9rRURIfFNTTF9hUlNBfFNTTF9DQU1FTExJQXxTU0xfU0hBfFNTTF9UTFNWMSwKKwlTU0xfa0VESCwKKwlTU0xfYVJTQSwKKwlTU0xfQ0FNRUxMSUExMjgsCisJU1NMX1NIQTEsCisJU1NMX1RMU1YxLAogCVNTTF9OT1RfRVhQfFNTTF9ISUdILAotCTAsCisJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKIAkxMjgsCiAJMTI4LAotCVNTTF9BTExfQ0lQSEVSUywKLQlTU0xfQUxMX1NUUkVOR1RIUwogCX0sCisKIAkvKiBDaXBoZXIgNDYgKi8KIAl7CiAJMSwKIAlUTFMxX1RYVF9BREhfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQSwKIAlUTFMxX0NLX0FESF9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBLAotCVNTTF9rRURIfFNTTF9hTlVMTHxTU0xfQ0FNRUxMSUF8U1NMX1NIQXxTU0xfVExTVjEsCisJU1NMX2tFREgsCisJU1NMX2FOVUxMLAorCVNTTF9DQU1FTExJQTEyOCwKKwlTU0xfU0hBMSwKKwlTU0xfVExTVjEsCiAJU1NMX05PVF9FWFB8U1NMX0hJR0gsCi0JMCwKKwlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAogCTEyOCwKIAkxMjgsCi0JU1NMX0FMTF9DSVBIRVJTLAotCVNTTF9BTExfU1RSRU5HVEhTCiAJfSwKICNlbmRpZiAvKiBPUEVOU1NMX05PX0NBTUVMTElBICovCiAKQEAgLTk4Niw5OCArMTE3NSwxNzQgQEAKIAkvKiBOZXcgVExTIEV4cG9ydCBDaXBoZXJTdWl0ZXMgZnJvbSBleHBpcmVkIElEICovCiAjaWYgMAogCS8qIENpcGhlciA2MCAqLwotCSAgICB7Ci0JICAgIDEsCi0JICAgIFRMUzFfVFhUX1JTQV9FWFBPUlQxMDI0X1dJVEhfUkM0XzU2X01ENSwKLQkgICAgVExTMV9DS19SU0FfRVhQT1JUMTAyNF9XSVRIX1JDNF81Nl9NRDUsCi0JICAgIFNTTF9rUlNBfFNTTF9hUlNBfFNTTF9SQzR8U1NMX01ENXxTU0xfVExTVjEsCi0JICAgIFNTTF9FWFBPUlR8U1NMX0VYUDU2LAotCSAgICAwLAotCSAgICA1NiwKLQkgICAgMTI4LAotCSAgICBTU0xfQUxMX0NJUEhFUlMsCi0JICAgIFNTTF9BTExfU1RSRU5HVEhTLAotCSAgICB9LAorCXsKKwkxLAorCVRMUzFfVFhUX1JTQV9FWFBPUlQxMDI0X1dJVEhfUkM0XzU2X01ENSwKKwlUTFMxX0NLX1JTQV9FWFBPUlQxMDI0X1dJVEhfUkM0XzU2X01ENSwKKwlTU0xfa1JTQSwKKwlTU0xfYVJTQSwKKwlTU0xfUkM0LAorCVNTTF9NRDUsCisJU1NMX1RMU1YxLAorCVNTTF9FWFBPUlR8U1NMX0VYUDU2LAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCisJNTYsCisJMTI4LAorCX0sCisKIAkvKiBDaXBoZXIgNjEgKi8KLQkgICAgewotCSAgICAxLAotCSAgICBUTFMxX1RYVF9SU0FfRVhQT1JUMTAyNF9XSVRIX1JDMl9DQkNfNTZfTUQ1LAotCSAgICBUTFMxX0NLX1JTQV9FWFBPUlQxMDI0X1dJVEhfUkMyX0NCQ181Nl9NRDUsCi0JICAgIFNTTF9rUlNBfFNTTF9hUlNBfFNTTF9SQzJ8U1NMX01ENXxTU0xfVExTVjEsCi0JICAgIFNTTF9FWFBPUlR8U1NMX0VYUDU2LAotCSAgICAwLAotCSAgICA1NiwKLQkgICAgMTI4LAotCSAgICBTU0xfQUxMX0NJUEhFUlMsCi0JICAgIFNTTF9BTExfU1RSRU5HVEhTLAotCSAgICB9LAorCXsKKwkxLAorCVRMUzFfVFhUX1JTQV9FWFBPUlQxMDI0X1dJVEhfUkMyX0NCQ181Nl9NRDUsCisJVExTMV9DS19SU0FfRVhQT1JUMTAyNF9XSVRIX1JDMl9DQkNfNTZfTUQ1LAorCVNTTF9rUlNBLAorCVNTTF9hUlNBLAorCVNTTF9SQzIsCisJU1NMX01ENSwKKwlTU0xfVExTVjEsCisJU1NMX0VYUE9SVHxTU0xfRVhQNTYsCisJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKKwk1NiwKKwkxMjgsCisJfSwKICNlbmRpZgorCiAJLyogQ2lwaGVyIDYyICovCi0JICAgIHsKLQkgICAgMSwKLQkgICAgVExTMV9UWFRfUlNBX0VYUE9SVDEwMjRfV0lUSF9ERVNfQ0JDX1NIQSwKLQkgICAgVExTMV9DS19SU0FfRVhQT1JUMTAyNF9XSVRIX0RFU19DQkNfU0hBLAotCSAgICBTU0xfa1JTQXxTU0xfYVJTQXxTU0xfREVTfFNTTF9TSEF8U1NMX1RMU1YxLAotCSAgICBTU0xfRVhQT1JUfFNTTF9FWFA1NiwKLQkgICAgMCwKLQkgICAgNTYsCi0JICAgIDU2LAotCSAgICBTU0xfQUxMX0NJUEhFUlMsCi0JICAgIFNTTF9BTExfU1RSRU5HVEhTLAotCSAgICB9LAorCXsKKwkxLAorCVRMUzFfVFhUX1JTQV9FWFBPUlQxMDI0X1dJVEhfREVTX0NCQ19TSEEsCisJVExTMV9DS19SU0FfRVhQT1JUMTAyNF9XSVRIX0RFU19DQkNfU0hBLAorCVNTTF9rUlNBLAorCVNTTF9hUlNBLAorCVNTTF9ERVMsCisJU1NMX1NIQTEsCisJU1NMX1RMU1YxLAorCVNTTF9FWFBPUlR8U1NMX0VYUDU2LAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCisJNTYsCisJNTYsCisJfSwKKwogCS8qIENpcGhlciA2MyAqLwotCSAgICB7Ci0JICAgIDEsCi0JICAgIFRMUzFfVFhUX0RIRV9EU1NfRVhQT1JUMTAyNF9XSVRIX0RFU19DQkNfU0hBLAotCSAgICBUTFMxX0NLX0RIRV9EU1NfRVhQT1JUMTAyNF9XSVRIX0RFU19DQkNfU0hBLAotCSAgICBTU0xfa0VESHxTU0xfYURTU3xTU0xfREVTfFNTTF9TSEF8U1NMX1RMU1YxLAotCSAgICBTU0xfRVhQT1JUfFNTTF9FWFA1NiwKLQkgICAgMCwKLQkgICAgNTYsCi0JICAgIDU2LAotCSAgICBTU0xfQUxMX0NJUEhFUlMsCi0JICAgIFNTTF9BTExfU1RSRU5HVEhTLAotCSAgICB9LAorCXsKKwkxLAorCVRMUzFfVFhUX0RIRV9EU1NfRVhQT1JUMTAyNF9XSVRIX0RFU19DQkNfU0hBLAorCVRMUzFfQ0tfREhFX0RTU19FWFBPUlQxMDI0X1dJVEhfREVTX0NCQ19TSEEsCisJU1NMX2tFREgsCisJU1NMX2FEU1MsCisJU1NMX0RFUywKKwlTU0xfU0hBMSwKKwlTU0xfVExTVjEsCisJU1NMX0VYUE9SVHxTU0xfRVhQNTYsCisJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKKwk1NiwKKwk1NiwKKwl9LAorCiAJLyogQ2lwaGVyIDY0ICovCi0JICAgIHsKLQkgICAgMSwKLQkgICAgVExTMV9UWFRfUlNBX0VYUE9SVDEwMjRfV0lUSF9SQzRfNTZfU0hBLAotCSAgICBUTFMxX0NLX1JTQV9FWFBPUlQxMDI0X1dJVEhfUkM0XzU2X1NIQSwKLQkgICAgU1NMX2tSU0F8U1NMX2FSU0F8U1NMX1JDNHxTU0xfU0hBfFNTTF9UTFNWMSwKLQkgICAgU1NMX0VYUE9SVHxTU0xfRVhQNTYsCi0JICAgIDAsCi0JICAgIDU2LAotCSAgICAxMjgsCi0JICAgIFNTTF9BTExfQ0lQSEVSUywKLQkgICAgU1NMX0FMTF9TVFJFTkdUSFMsCi0JICAgIH0sCisJeworCTEsCisJVExTMV9UWFRfUlNBX0VYUE9SVDEwMjRfV0lUSF9SQzRfNTZfU0hBLAorCVRMUzFfQ0tfUlNBX0VYUE9SVDEwMjRfV0lUSF9SQzRfNTZfU0hBLAorCVNTTF9rUlNBLAorCVNTTF9hUlNBLAorCVNTTF9SQzQsCisJU1NMX1NIQTEsCisJU1NMX1RMU1YxLAorCVNTTF9FWFBPUlR8U1NMX0VYUDU2LAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCisJNTYsCisJMTI4LAorCX0sCisKIAkvKiBDaXBoZXIgNjUgKi8KLQkgICAgewotCSAgICAxLAotCSAgICBUTFMxX1RYVF9ESEVfRFNTX0VYUE9SVDEwMjRfV0lUSF9SQzRfNTZfU0hBLAotCSAgICBUTFMxX0NLX0RIRV9EU1NfRVhQT1JUMTAyNF9XSVRIX1JDNF81Nl9TSEEsCi0JICAgIFNTTF9rRURIfFNTTF9hRFNTfFNTTF9SQzR8U1NMX1NIQXxTU0xfVExTVjEsCi0JICAgIFNTTF9FWFBPUlR8U1NMX0VYUDU2LAotCSAgICAwLAotCSAgICA1NiwKLQkgICAgMTI4LAotCSAgICBTU0xfQUxMX0NJUEhFUlMsCi0JICAgIFNTTF9BTExfU1RSRU5HVEhTLAotCSAgICB9LAorCXsKKwkxLAorCVRMUzFfVFhUX0RIRV9EU1NfRVhQT1JUMTAyNF9XSVRIX1JDNF81Nl9TSEEsCisJVExTMV9DS19ESEVfRFNTX0VYUE9SVDEwMjRfV0lUSF9SQzRfNTZfU0hBLAorCVNTTF9rRURILAorCVNTTF9hRFNTLAorCVNTTF9SQzQsCisJU1NMX1NIQTEsCisJU1NMX1RMU1YxLAorCVNTTF9FWFBPUlR8U1NMX0VYUDU2LAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCisJNTYsCisJMTI4LAorCX0sCisKIAkvKiBDaXBoZXIgNjYgKi8KLQkgICAgewotCSAgICAxLAotCSAgICBUTFMxX1RYVF9ESEVfRFNTX1dJVEhfUkM0XzEyOF9TSEEsCi0JICAgIFRMUzFfQ0tfREhFX0RTU19XSVRIX1JDNF8xMjhfU0hBLAotCSAgICBTU0xfa0VESHxTU0xfYURTU3xTU0xfUkM0fFNTTF9TSEF8U1NMX1RMU1YxLAotCSAgICBTU0xfTk9UX0VYUHxTU0xfTUVESVVNLAotCSAgICAwLAotCSAgICAxMjgsCi0JICAgIDEyOCwKLQkgICAgU1NMX0FMTF9DSVBIRVJTLAotCSAgICBTU0xfQUxMX1NUUkVOR1RIUwotCSAgICB9LAorCXsKKwkxLAorCVRMUzFfVFhUX0RIRV9EU1NfV0lUSF9SQzRfMTI4X1NIQSwKKwlUTFMxX0NLX0RIRV9EU1NfV0lUSF9SQzRfMTI4X1NIQSwKKwlTU0xfa0VESCwKKwlTU0xfYURTUywKKwlTU0xfUkM0LAorCVNTTF9TSEExLAorCVNTTF9UTFNWMSwKKwlTU0xfTk9UX0VYUHxTU0xfTUVESVVNLAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCisJMTI4LAorCTEyOCwKKwl9LAogI2VuZGlmCisJeworCTEsCisJIkdPU1Q5NC1HT1NUODktR09TVDg5IiwKKwkweDMwMDAwODAsCisJU1NMX2tHT1NULAorCVNTTF9hR09TVDk0LAorCVNTTF9lR09TVDI4MTQ3ODlDTlQsCisJU1NMX0dPU1Q4OU1BQywKKwlTU0xfVExTVjEsCisJU1NMX05PVF9FWFB8U1NMX0hJR0gsCisJU1NMX0hBTkRTSEFLRV9NQUNfR09TVDk0fFRMUzFfUFJGX0dPU1Q5NHxUTFMxX1NUUkVBTV9NQUMsCisJMjU2LAorCTI1NgorCX0sCisJeworCTEsCisJIkdPU1QyMDAxLUdPU1Q4OS1HT1NUODkiLAorCTB4MzAwMDA4MSwKKwlTU0xfa0dPU1QsCisJU1NMX2FHT1NUMDEsCisJU1NMX2VHT1NUMjgxNDc4OUNOVCwKKwlTU0xfR09TVDg5TUFDLAorCVNTTF9UTFNWMSwKKwlTU0xfTk9UX0VYUHxTU0xfSElHSCwKKwlTU0xfSEFORFNIQUtFX01BQ19HT1NUOTR8VExTMV9QUkZfR09TVDk0fFRMUzFfU1RSRUFNX01BQywKKwkyNTYsCisJMjU2CisJfSwKKwl7CisJMSwKKwkiR09TVDk0LU5VTEwtR09TVDk0IiwKKwkweDMwMDAwODIsCisJU1NMX2tHT1NULAorCVNTTF9hR09TVDk0LAorCVNTTF9lTlVMTCwKKwlTU0xfR09TVDk0LAorCVNTTF9UTFNWMSwKKwlTU0xfTk9UX0VYUHxTU0xfU1RST05HX05PTkUsCisJU1NMX0hBTkRTSEFLRV9NQUNfR09TVDk0fFRMUzFfUFJGX0dPU1Q5NCwKKwkwLAorCTAKKwl9LAorCXsKKwkxLAorCSJHT1NUMjAwMS1OVUxMLUdPU1Q5NCIsCisJMHgzMDAwMDgzLAorCVNTTF9rR09TVCwKKwlTU0xfYUdPU1QwMSwKKwlTU0xfZU5VTEwsCisJU1NMX0dPU1Q5NCwKKwlTU0xfVExTVjEsCisJU1NMX05PVF9FWFB8U1NMX1NUUk9OR19OT05FLAorCVNTTF9IQU5EU0hBS0VfTUFDX0dPU1Q5NHxUTFMxX1BSRl9HT1NUOTQsCisJMCwKKwkwCisJfSwKIAogI2lmbmRlZiBPUEVOU1NMX05PX0NBTUVMTElBCiAJLyogQ2FtZWxsaWEgY2lwaGVyc3VpdGVzIGZyb20gUkZDNDEzMiAoMjU2LWJpdCBwb3J0aW9uKSAqLwpAQCAtMTA4Nyw4MSArMTM1MiwxNjMgQEAKIAkxLAogCVRMUzFfVFhUX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBLAogCVRMUzFfQ0tfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEsCi0JU1NMX2tSU0F8U1NMX2FSU0F8U1NMX0NBTUVMTElBfFNTTF9TSEF8U1NMX1RMU1YxLAorCVNTTF9rUlNBLAorCVNTTF9hUlNBLAorCVNTTF9DQU1FTExJQTI1NiwKKwlTU0xfU0hBMSwKKwlTU0xfVExTVjEsCiAJU1NMX05PVF9FWFB8U1NMX0hJR0gsCi0JMCwKKwlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAogCTI1NiwKIAkyNTYsCi0JU1NMX0FMTF9DSVBIRVJTLAotCVNTTF9BTExfU1RSRU5HVEhTCiAJfSwKIAkvKiBDaXBoZXIgODUgKi8KIAl7CiAJMCwgLyogbm90IGltcGxlbWVudGVkIChub24tZXBoZW1lcmFsIERIKSAqLwogCVRMUzFfVFhUX0RIX0RTU19XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBLAogCVRMUzFfQ0tfREhfRFNTX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEsCi0JU1NMX2tESGR8U1NMX2FESHxTU0xfQ0FNRUxMSUF8U1NMX1NIQXxTU0xfVExTVjEsCisJU1NMX2tESGQsCisJU1NMX2FESCwKKwlTU0xfQ0FNRUxMSUEyNTYsCisJU1NMX1NIQTEsCisJU1NMX1RMU1YxLAogCVNTTF9OT1RfRVhQfFNTTF9ISUdILAotCTAsCisJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKIAkyNTYsCiAJMjU2LAotCVNTTF9BTExfQ0lQSEVSUywKLQlTU0xfQUxMX1NUUkVOR1RIUwogCX0sCisKIAkvKiBDaXBoZXIgODYgKi8KIAl7CiAJMCwgLyogbm90IGltcGxlbWVudGVkIChub24tZXBoZW1lcmFsIERIKSAqLwogCVRMUzFfVFhUX0RIX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBLAogCVRMUzFfQ0tfREhfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEsCi0JU1NMX2tESHJ8U1NMX2FESHxTU0xfQ0FNRUxMSUF8U1NMX1NIQXxTU0xfVExTVjEsCisJU1NMX2tESHIsCisJU1NMX2FESCwKKwlTU0xfQ0FNRUxMSUEyNTYsCisJU1NMX1NIQTEsCisJU1NMX1RMU1YxLAogCVNTTF9OT1RfRVhQfFNTTF9ISUdILAotCTAsCisJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKIAkyNTYsCiAJMjU2LAotCVNTTF9BTExfQ0lQSEVSUywKLQlTU0xfQUxMX1NUUkVOR1RIUwogCX0sCisKIAkvKiBDaXBoZXIgODcgKi8KIAl7CiAJMSwKIAlUTFMxX1RYVF9ESEVfRFNTX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEsCiAJVExTMV9DS19ESEVfRFNTX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEsCi0JU1NMX2tFREh8U1NMX2FEU1N8U1NMX0NBTUVMTElBfFNTTF9TSEF8U1NMX1RMU1YxLAorCVNTTF9rRURILAorCVNTTF9hRFNTLAorCVNTTF9DQU1FTExJQTI1NiwKKwlTU0xfU0hBMSwKKwlTU0xfVExTVjEsCiAJU1NMX05PVF9FWFB8U1NMX0hJR0gsCi0JMCwKKwlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAogCTI1NiwKIAkyNTYsCi0JU1NMX0FMTF9DSVBIRVJTLAotCVNTTF9BTExfU1RSRU5HVEhTCiAJfSwKKwogCS8qIENpcGhlciA4OCAqLwogCXsKIAkxLAogCVRMUzFfVFhUX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQSwKIAlUTFMxX0NLX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQSwKLQlTU0xfa0VESHxTU0xfYVJTQXxTU0xfQ0FNRUxMSUF8U1NMX1NIQXxTU0xfVExTVjEsCisJU1NMX2tFREgsCisJU1NMX2FSU0EsCisJU1NMX0NBTUVMTElBMjU2LAorCVNTTF9TSEExLAorCVNTTF9UTFNWMSwKIAlTU0xfTk9UX0VYUHxTU0xfSElHSCwKLQkwLAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCiAJMjU2LAogCTI1NiwKLQlTU0xfQUxMX0NJUEhFUlMsCi0JU1NMX0FMTF9TVFJFTkdUSFMKIAl9LAorCiAJLyogQ2lwaGVyIDg5ICovCiAJewogCTEsCiAJVExTMV9UWFRfQURIX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEsCiAJVExTMV9DS19BREhfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQSwKLQlTU0xfa0VESHxTU0xfYU5VTEx8U1NMX0NBTUVMTElBfFNTTF9TSEF8U1NMX1RMU1YxLAorCVNTTF9rRURILAorCVNTTF9hTlVMTCwKKwlTU0xfQ0FNRUxMSUEyNTYsCisJU1NMX1NIQTEsCisJU1NMX1RMU1YxLAogCVNTTF9OT1RfRVhQfFNTTF9ISUdILAotCTAsCisJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKIAkyNTYsCiAJMjU2LAotCVNTTF9BTExfQ0lQSEVSUywKLQlTU0xfQUxMX1NUUkVOR1RIUwogCX0sCiAjZW5kaWYgLyogT1BFTlNTTF9OT19DQU1FTExJQSAqLwogCisjaWZuZGVmIE9QRU5TU0xfTk9fUFNLCisJLyogQ2lwaGVyIDhBICovCisJeworCTEsCisJVExTMV9UWFRfUFNLX1dJVEhfUkM0XzEyOF9TSEEsCisJVExTMV9DS19QU0tfV0lUSF9SQzRfMTI4X1NIQSwKKwlTU0xfa1BTSywKKwlTU0xfYVBTSywKKwlTU0xfUkM0LAorCVNTTF9TSEExLAorCVNTTF9UTFNWMSwKKwlTU0xfTk9UX0VYUHxTU0xfTUVESVVNLAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCisJMTI4LAorCTEyOCwKKwl9LAorCisJLyogQ2lwaGVyIDhCICovCisJeworCTEsCisJVExTMV9UWFRfUFNLX1dJVEhfM0RFU19FREVfQ0JDX1NIQSwKKwlUTFMxX0NLX1BTS19XSVRIXzNERVNfRURFX0NCQ19TSEEsCisJU1NMX2tQU0ssCisJU1NMX2FQU0ssCisJU1NMXzNERVMsCisJU1NMX1NIQTEsCisJU1NMX1RMU1YxLAorCVNTTF9OT1RfRVhQfFNTTF9ISUdILAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCisJMTY4LAorCTE2OCwKKwl9LAorCisJLyogQ2lwaGVyIDhDICovCisJeworCTEsCisJVExTMV9UWFRfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBLAorCVRMUzFfQ0tfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBLAorCVNTTF9rUFNLLAorCVNTTF9hUFNLLAorCVNTTF9BRVMxMjgsCisJU1NMX1NIQTEsCisJU1NMX1RMU1YxLAorCVNTTF9OT1RfRVhQfFNTTF9ISUdILAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCisJMTI4LAorCTEyOCwKKwl9LAorCisJLyogQ2lwaGVyIDhEICovCisJeworCTEsCisJVExTMV9UWFRfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBLAorCVRMUzFfQ0tfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBLAorCVNTTF9rUFNLLAorCVNTTF9hUFNLLAorCVNTTF9BRVMyNTYsCisJU1NMX1NIQTEsCisJU1NMX1RMU1YxLAorCVNTTF9OT1RfRVhQfFNTTF9ISUdILAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCisJMjU2LAorCTI1NiwKKwl9LAorI2VuZGlmICAvKiBPUEVOU1NMX05PX1BTSyAqLworCiAjaWZuZGVmIE9QRU5TU0xfTk9fU0VFRAogCS8qIFNFRUQgY2lwaGVyc3VpdGVzIGZyb20gUkZDNDE2MiAqLwogCkBAIC0xMTcwLDEzICsxNTE3LDE1IEBACiAJMSwKIAlUTFMxX1RYVF9SU0FfV0lUSF9TRUVEX1NIQSwKIAlUTFMxX0NLX1JTQV9XSVRIX1NFRURfU0hBLAotCVNTTF9rUlNBfFNTTF9hUlNBfFNTTF9TRUVEfFNTTF9TSEExfFNTTF9UTFNWMSwKKwlTU0xfa1JTQSwKKwlTU0xfYVJTQSwKKwlTU0xfU0VFRCwKKwlTU0xfU0hBMSwKKwlTU0xfVExTVjEsCiAJU1NMX05PVF9FWFB8U1NMX01FRElVTSwKLQkwLAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCiAJMTI4LAogCTEyOCwKLQlTU0xfQUxMX0NJUEhFUlMsCi0JU1NMX0FMTF9TVFJFTkdUSFMsCiAJfSwKIAogCS8qIENpcGhlciA5NyAqLwpAQCAtMTE4NCwxMyArMTUzMywxNSBAQAogCTAsIC8qIG5vdCBpbXBsZW1lbnRlZCAobm9uLWVwaGVtZXJhbCBESCkgKi8KIAlUTFMxX1RYVF9ESF9EU1NfV0lUSF9TRUVEX1NIQSwKIAlUTFMxX0NLX0RIX0RTU19XSVRIX1NFRURfU0hBLAotCVNTTF9rREhkfFNTTF9hREh8U1NMX1NFRUR8U1NMX1NIQTF8U1NMX1RMU1YxLAorCVNTTF9rREhkLAorCVNTTF9hREgsCisJU1NMX1NFRUQsCisJU1NMX1NIQTEsCisJU1NMX1RMU1YxLAogCVNTTF9OT1RfRVhQfFNTTF9NRURJVU0sCi0JMCwKKwlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAogCTEyOCwKIAkxMjgsCi0JU1NMX0FMTF9DSVBIRVJTLAotCVNTTF9BTExfU1RSRU5HVEhTLAogCX0sCiAKIAkvKiBDaXBoZXIgOTggKi8KQEAgLTExOTgsMTMgKzE1NDksMTUgQEAKIAkwLCAvKiBub3QgaW1wbGVtZW50ZWQgKG5vbi1lcGhlbWVyYWwgREgpICovCiAJVExTMV9UWFRfREhfUlNBX1dJVEhfU0VFRF9TSEEsCiAJVExTMV9DS19ESF9SU0FfV0lUSF9TRUVEX1NIQSwKLQlTU0xfa0RIcnxTU0xfYURIfFNTTF9TRUVEfFNTTF9TSEExfFNTTF9UTFNWMSwKKwlTU0xfa0RIciwKKwlTU0xfYURILAorCVNTTF9TRUVELAorCVNTTF9TSEExLAorCVNTTF9UTFNWMSwKIAlTU0xfTk9UX0VYUHxTU0xfTUVESVVNLAotCTAsCisJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKIAkxMjgsCiAJMTI4LAotCVNTTF9BTExfQ0lQSEVSUywKLQlTU0xfQUxMX1NUUkVOR1RIUywKIAl9LAogCiAJLyogQ2lwaGVyIDk5ICovCkBAIC0xMjEyLDEzICsxNTY1LDE1IEBACiAJMSwKIAlUTFMxX1RYVF9ESEVfRFNTX1dJVEhfU0VFRF9TSEEsCiAJVExTMV9DS19ESEVfRFNTX1dJVEhfU0VFRF9TSEEsCi0JU1NMX2tFREh8U1NMX2FEU1N8U1NMX1NFRUR8U1NMX1NIQTF8U1NMX1RMU1YxLAorCVNTTF9rRURILAorCVNTTF9hRFNTLAorCVNTTF9TRUVELAorCVNTTF9TSEExLAorCVNTTF9UTFNWMSwKIAlTU0xfTk9UX0VYUHxTU0xfTUVESVVNLAotCTAsCisJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKIAkxMjgsCiAJMTI4LAotCVNTTF9BTExfQ0lQSEVSUywKLQlTU0xfQUxMX1NUUkVOR1RIUywKIAl9LAogCiAJLyogQ2lwaGVyIDlBICovCkBAIC0xMjI2LDEzICsxNTgxLDE1IEBACiAJMSwKIAlUTFMxX1RYVF9ESEVfUlNBX1dJVEhfU0VFRF9TSEEsCiAJVExTMV9DS19ESEVfUlNBX1dJVEhfU0VFRF9TSEEsCi0JU1NMX2tFREh8U1NMX2FSU0F8U1NMX1NFRUR8U1NMX1NIQTF8U1NMX1RMU1YxLAorCVNTTF9rRURILAorCVNTTF9hUlNBLAorCVNTTF9TRUVELAorCVNTTF9TSEExLAorCVNTTF9UTFNWMSwKIAlTU0xfTk9UX0VYUHxTU0xfTUVESVVNLAotCTAsCisJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKIAkxMjgsCiAJMTI4LAotCVNTTF9BTExfQ0lQSEVSUywKLQlTU0xfQUxMX1NUUkVOR1RIUywKIAl9LAogCiAJLyogQ2lwaGVyIDlCICovCkBAIC0xMjQwLDM3NiArMTU5Nyw0ODcgQEAKIAkxLAogCVRMUzFfVFhUX0FESF9XSVRIX1NFRURfU0hBLAogCVRMUzFfQ0tfQURIX1dJVEhfU0VFRF9TSEEsCi0JU1NMX2tFREh8U1NMX2FOVUxMfFNTTF9TRUVEfFNTTF9TSEExfFNTTF9UTFNWMSwKKwlTU0xfa0VESCwKKwlTU0xfYU5VTEwsCisJU1NMX1NFRUQsCisJU1NMX1NIQTEsCisJU1NMX1RMU1YxLAogCVNTTF9OT1RfRVhQfFNTTF9NRURJVU0sCi0JMCwKKwlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAogCTEyOCwKIAkxMjgsCi0JU1NMX0FMTF9DSVBIRVJTLAotCVNTTF9BTExfU1RSRU5HVEhTLAogCX0sCiAKICNlbmRpZiAvKiBPUEVOU1NMX05PX1NFRUQgKi8KIAogI2lmbmRlZiBPUEVOU1NMX05PX0VDREgKIAkvKiBDaXBoZXIgQzAwMSAqLwotCSAgICB7Ci0gICAgICAgICAgICAxLAotICAgICAgICAgICAgVExTMV9UWFRfRUNESF9FQ0RTQV9XSVRIX05VTExfU0hBLAotICAgICAgICAgICAgVExTMV9DS19FQ0RIX0VDRFNBX1dJVEhfTlVMTF9TSEEsCi0gICAgICAgICAgICBTU0xfa0VDREh8U1NMX2FFQ0RTQXxTU0xfZU5VTEx8U1NMX1NIQXxTU0xfVExTVjEsCi0gICAgICAgICAgICBTU0xfTk9UX0VYUCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIFNTTF9BTExfQ0lQSEVSUywKLSAgICAgICAgICAgIFNTTF9BTExfU1RSRU5HVEhTLAotICAgICAgICAgICAgfSwKKwl7CisJMSwKKwlUTFMxX1RYVF9FQ0RIX0VDRFNBX1dJVEhfTlVMTF9TSEEsCisJVExTMV9DS19FQ0RIX0VDRFNBX1dJVEhfTlVMTF9TSEEsCisJU1NMX2tFQ0RIZSwKKwlTU0xfYUVDREgsCisJU1NMX2VOVUxMLAorCVNTTF9TSEExLAorCVNTTF9UTFNWMSwKKwlTU0xfTk9UX0VYUHxTU0xfU1RST05HX05PTkUsCisJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKKwkwLAorCTAsCisJfSwKIAogCS8qIENpcGhlciBDMDAyICovCi0JICAgIHsKLSAgICAgICAgICAgIDEsCi0gICAgICAgICAgICBUTFMxX1RYVF9FQ0RIX0VDRFNBX1dJVEhfUkM0XzEyOF9TSEEsCi0gICAgICAgICAgICBUTFMxX0NLX0VDREhfRUNEU0FfV0lUSF9SQzRfMTI4X1NIQSwKLSAgICAgICAgICAgIFNTTF9rRUNESHxTU0xfYUVDRFNBfFNTTF9SQzR8U1NMX1NIQXxTU0xfVExTVjEsCi0gICAgICAgICAgICBTU0xfTk9UX0VYUCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAxMjgsCi0gICAgICAgICAgICAxMjgsCi0gICAgICAgICAgICBTU0xfQUxMX0NJUEhFUlMsCi0gICAgICAgICAgICBTU0xfQUxMX1NUUkVOR1RIUywKLSAgICAgICAgICAgIH0sCisJeworCTEsCisJVExTMV9UWFRfRUNESF9FQ0RTQV9XSVRIX1JDNF8xMjhfU0hBLAorCVRMUzFfQ0tfRUNESF9FQ0RTQV9XSVRIX1JDNF8xMjhfU0hBLAorCVNTTF9rRUNESGUsCisJU1NMX2FFQ0RILAorCVNTTF9SQzQsCisJU1NMX1NIQTEsCisJU1NMX1RMU1YxLAorCVNTTF9OT1RfRVhQfFNTTF9NRURJVU0sCisJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKKwkxMjgsCisJMTI4LAorCX0sCiAKIAkvKiBDaXBoZXIgQzAwMyAqLwotCSAgICB7Ci0gICAgICAgICAgICAxLAotICAgICAgICAgICAgVExTMV9UWFRfRUNESF9FQ0RTQV9XSVRIX0RFU18xOTJfQ0JDM19TSEEsCi0gICAgICAgICAgICBUTFMxX0NLX0VDREhfRUNEU0FfV0lUSF9ERVNfMTkyX0NCQzNfU0hBLAotICAgICAgICAgICAgU1NMX2tFQ0RIfFNTTF9hRUNEU0F8U1NMXzNERVN8U1NMX1NIQXxTU0xfVExTVjEsCi0gICAgICAgICAgICBTU0xfTk9UX0VYUHxTU0xfSElHSCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAxNjgsCi0gICAgICAgICAgICAxNjgsCi0gICAgICAgICAgICBTU0xfQUxMX0NJUEhFUlMsCi0gICAgICAgICAgICBTU0xfQUxMX1NUUkVOR1RIUywKLSAgICAgICAgICAgIH0sCisJeworCTEsCisJVExTMV9UWFRfRUNESF9FQ0RTQV9XSVRIX0RFU18xOTJfQ0JDM19TSEEsCisJVExTMV9DS19FQ0RIX0VDRFNBX1dJVEhfREVTXzE5Ml9DQkMzX1NIQSwKKwlTU0xfa0VDREhlLAorCVNTTF9hRUNESCwKKwlTU0xfM0RFUywKKwlTU0xfU0hBMSwKKwlTU0xfVExTVjEsCisJU1NMX05PVF9FWFB8U1NMX0hJR0gsCisJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKKwkxNjgsCisJMTY4LAorCX0sCiAKIAkvKiBDaXBoZXIgQzAwNCAqLwotCSAgICB7Ci0gICAgICAgICAgICAxLAotICAgICAgICAgICAgVExTMV9UWFRfRUNESF9FQ0RTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQSwKLSAgICAgICAgICAgIFRMUzFfQ0tfRUNESF9FQ0RTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQSwKLSAgICAgICAgICAgIFNTTF9rRUNESHxTU0xfYUVDRFNBfFNTTF9BRVN8U1NMX1NIQXxTU0xfVExTVjEsCi0gICAgICAgICAgICBTU0xfTk9UX0VYUHxTU0xfSElHSCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAxMjgsCi0gICAgICAgICAgICAxMjgsCi0gICAgICAgICAgICBTU0xfQUxMX0NJUEhFUlMsCi0gICAgICAgICAgICBTU0xfQUxMX1NUUkVOR1RIUywKLSAgICAgICAgICAgIH0sCisJeworCTEsCisJVExTMV9UWFRfRUNESF9FQ0RTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQSwKKwlUTFMxX0NLX0VDREhfRUNEU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEsCisJU1NMX2tFQ0RIZSwKKwlTU0xfYUVDREgsCisJU1NMX0FFUzEyOCwKKwlTU0xfU0hBMSwKKwlTU0xfVExTVjEsCisJU1NMX05PVF9FWFB8U1NMX0hJR0gsCisJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKKwkxMjgsCisJMTI4LAorCX0sCiAKIAkvKiBDaXBoZXIgQzAwNSAqLwotCSAgICB7Ci0gICAgICAgICAgICAxLAotICAgICAgICAgICAgVExTMV9UWFRfRUNESF9FQ0RTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQSwKLSAgICAgICAgICAgIFRMUzFfQ0tfRUNESF9FQ0RTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQSwKLSAgICAgICAgICAgIFNTTF9rRUNESHxTU0xfYUVDRFNBfFNTTF9BRVN8U1NMX1NIQXxTU0xfVExTVjEsCi0gICAgICAgICAgICBTU0xfTk9UX0VYUHxTU0xfSElHSCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAyNTYsCi0gICAgICAgICAgICAyNTYsCi0gICAgICAgICAgICBTU0xfQUxMX0NJUEhFUlMsCi0gICAgICAgICAgICBTU0xfQUxMX1NUUkVOR1RIUywKLSAgICAgICAgICAgIH0sCisJeworCTEsCisJVExTMV9UWFRfRUNESF9FQ0RTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQSwKKwlUTFMxX0NLX0VDREhfRUNEU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEsCisJU1NMX2tFQ0RIZSwKKwlTU0xfYUVDREgsCisJU1NMX0FFUzI1NiwKKwlTU0xfU0hBMSwKKwlTU0xfVExTVjEsCisJU1NMX05PVF9FWFB8U1NMX0hJR0gsCisJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKKwkyNTYsCisJMjU2LAorCX0sCiAKIAkvKiBDaXBoZXIgQzAwNiAqLwotCSAgICB7Ci0gICAgICAgICAgICAxLAotICAgICAgICAgICAgVExTMV9UWFRfRUNESEVfRUNEU0FfV0lUSF9OVUxMX1NIQSwKLSAgICAgICAgICAgIFRMUzFfQ0tfRUNESEVfRUNEU0FfV0lUSF9OVUxMX1NIQSwKLSAgICAgICAgICAgIFNTTF9rRUNESEV8U1NMX2FFQ0RTQXxTU0xfZU5VTEx8U1NMX1NIQXxTU0xfVExTVjEsCi0gICAgICAgICAgICBTU0xfTk9UX0VYUCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIFNTTF9BTExfQ0lQSEVSUywKLSAgICAgICAgICAgIFNTTF9BTExfU1RSRU5HVEhTLAotICAgICAgICAgICAgfSwKKwl7CisJMSwKKwlUTFMxX1RYVF9FQ0RIRV9FQ0RTQV9XSVRIX05VTExfU0hBLAorCVRMUzFfQ0tfRUNESEVfRUNEU0FfV0lUSF9OVUxMX1NIQSwKKwlTU0xfa0VFQ0RILAorCVNTTF9hRUNEU0EsCisJU1NMX2VOVUxMLAorCVNTTF9TSEExLAorCVNTTF9UTFNWMSwKKwlTU0xfTk9UX0VYUHxTU0xfU1RST05HX05PTkUsCisJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKKwkwLAorCTAsCisJfSwKIAogCS8qIENpcGhlciBDMDA3ICovCi0JICAgIHsKLSAgICAgICAgICAgIDEsCi0gICAgICAgICAgICBUTFMxX1RYVF9FQ0RIRV9FQ0RTQV9XSVRIX1JDNF8xMjhfU0hBLAotICAgICAgICAgICAgVExTMV9DS19FQ0RIRV9FQ0RTQV9XSVRIX1JDNF8xMjhfU0hBLAotICAgICAgICAgICAgU1NMX2tFQ0RIRXxTU0xfYUVDRFNBfFNTTF9SQzR8U1NMX1NIQXxTU0xfVExTVjEsCi0gICAgICAgICAgICBTU0xfTk9UX0VYUCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAxMjgsCi0gICAgICAgICAgICAxMjgsCi0gICAgICAgICAgICBTU0xfQUxMX0NJUEhFUlMsCi0gICAgICAgICAgICBTU0xfQUxMX1NUUkVOR1RIUywKLSAgICAgICAgICAgIH0sCisJeworCTEsCisJVExTMV9UWFRfRUNESEVfRUNEU0FfV0lUSF9SQzRfMTI4X1NIQSwKKwlUTFMxX0NLX0VDREhFX0VDRFNBX1dJVEhfUkM0XzEyOF9TSEEsCisJU1NMX2tFRUNESCwKKwlTU0xfYUVDRFNBLAorCVNTTF9SQzQsCisJU1NMX1NIQTEsCisJU1NMX1RMU1YxLAorCVNTTF9OT1RfRVhQfFNTTF9NRURJVU0sCisJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKKwkxMjgsCisJMTI4LAorCX0sCiAKIAkvKiBDaXBoZXIgQzAwOCAqLwotCSAgICB7Ci0gICAgICAgICAgICAxLAotICAgICAgICAgICAgVExTMV9UWFRfRUNESEVfRUNEU0FfV0lUSF9ERVNfMTkyX0NCQzNfU0hBLAotICAgICAgICAgICAgVExTMV9DS19FQ0RIRV9FQ0RTQV9XSVRIX0RFU18xOTJfQ0JDM19TSEEsCi0gICAgICAgICAgICBTU0xfa0VDREhFfFNTTF9hRUNEU0F8U1NMXzNERVN8U1NMX1NIQXxTU0xfVExTVjEsCi0gICAgICAgICAgICBTU0xfTk9UX0VYUHxTU0xfSElHSCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAxNjgsCi0gICAgICAgICAgICAxNjgsCi0gICAgICAgICAgICBTU0xfQUxMX0NJUEhFUlMsCi0gICAgICAgICAgICBTU0xfQUxMX1NUUkVOR1RIUywKLSAgICAgICAgICAgIH0sCisJeworCTEsCisJVExTMV9UWFRfRUNESEVfRUNEU0FfV0lUSF9ERVNfMTkyX0NCQzNfU0hBLAorCVRMUzFfQ0tfRUNESEVfRUNEU0FfV0lUSF9ERVNfMTkyX0NCQzNfU0hBLAorCVNTTF9rRUVDREgsCisJU1NMX2FFQ0RTQSwKKwlTU0xfM0RFUywKKwlTU0xfU0hBMSwKKwlTU0xfVExTVjEsCisJU1NMX05PVF9FWFB8U1NMX0hJR0gsCisJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKKwkxNjgsCisJMTY4LAorCX0sCiAKIAkvKiBDaXBoZXIgQzAwOSAqLwotCSAgICB7Ci0gICAgICAgICAgICAxLAotICAgICAgICAgICAgVExTMV9UWFRfRUNESEVfRUNEU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEsCi0gICAgICAgICAgICBUTFMxX0NLX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBLAotICAgICAgICAgICAgU1NMX2tFQ0RIRXxTU0xfYUVDRFNBfFNTTF9BRVN8U1NMX1NIQXxTU0xfVExTVjEsCi0gICAgICAgICAgICBTU0xfTk9UX0VYUHxTU0xfSElHSCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAxMjgsCi0gICAgICAgICAgICAxMjgsCi0gICAgICAgICAgICBTU0xfQUxMX0NJUEhFUlMsCi0gICAgICAgICAgICBTU0xfQUxMX1NUUkVOR1RIUywKLSAgICAgICAgICAgIH0sCisJeworCTEsCisJVExTMV9UWFRfRUNESEVfRUNEU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEsCisJVExTMV9DS19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQSwKKwlTU0xfa0VFQ0RILAorCVNTTF9hRUNEU0EsCisJU1NMX0FFUzEyOCwKKwlTU0xfU0hBMSwKKwlTU0xfVExTVjEsCisJU1NMX05PVF9FWFB8U1NMX0hJR0gsCisJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKKwkxMjgsCisJMTI4LAorCX0sCiAKIAkvKiBDaXBoZXIgQzAwQSAqLwotCSAgICB7Ci0gICAgICAgICAgICAxLAotICAgICAgICAgICAgVExTMV9UWFRfRUNESEVfRUNEU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEsCi0gICAgICAgICAgICBUTFMxX0NLX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBLAotICAgICAgICAgICAgU1NMX2tFQ0RIRXxTU0xfYUVDRFNBfFNTTF9BRVN8U1NMX1NIQXxTU0xfVExTVjEsCi0gICAgICAgICAgICBTU0xfTk9UX0VYUHxTU0xfSElHSCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAyNTYsCi0gICAgICAgICAgICAyNTYsCi0gICAgICAgICAgICBTU0xfQUxMX0NJUEhFUlMsCi0gICAgICAgICAgICBTU0xfQUxMX1NUUkVOR1RIUywKLSAgICAgICAgICAgIH0sCisJeworCTEsCisJVExTMV9UWFRfRUNESEVfRUNEU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEsCisJVExTMV9DS19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQSwKKwlTU0xfa0VFQ0RILAorCVNTTF9hRUNEU0EsCisJU1NMX0FFUzI1NiwKKwlTU0xfU0hBMSwKKwlTU0xfVExTVjEsCisJU1NMX05PVF9FWFB8U1NMX0hJR0gsCisJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKKwkyNTYsCisJMjU2LAorCX0sCiAKIAkvKiBDaXBoZXIgQzAwQiAqLwotCSAgICB7Ci0gICAgICAgICAgICAxLAotICAgICAgICAgICAgVExTMV9UWFRfRUNESF9SU0FfV0lUSF9OVUxMX1NIQSwKLSAgICAgICAgICAgIFRMUzFfQ0tfRUNESF9SU0FfV0lUSF9OVUxMX1NIQSwKLSAgICAgICAgICAgIFNTTF9rRUNESHxTU0xfYVJTQXxTU0xfZU5VTEx8U1NMX1NIQXxTU0xfVExTVjEsCi0gICAgICAgICAgICBTU0xfTk9UX0VYUCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIFNTTF9BTExfQ0lQSEVSUywKLSAgICAgICAgICAgIFNTTF9BTExfU1RSRU5HVEhTLAotICAgICAgICAgICAgfSwKKwl7CisJMSwKKwlUTFMxX1RYVF9FQ0RIX1JTQV9XSVRIX05VTExfU0hBLAorCVRMUzFfQ0tfRUNESF9SU0FfV0lUSF9OVUxMX1NIQSwKKwlTU0xfa0VDREhyLAorCVNTTF9hRUNESCwKKwlTU0xfZU5VTEwsCisJU1NMX1NIQTEsCisJU1NMX1RMU1YxLAorCVNTTF9OT1RfRVhQfFNTTF9TVFJPTkdfTk9ORSwKKwlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAorCTAsCisJMCwKKwl9LAogCiAJLyogQ2lwaGVyIEMwMEMgKi8KLQkgICAgewotICAgICAgICAgICAgMSwKLSAgICAgICAgICAgIFRMUzFfVFhUX0VDREhfUlNBX1dJVEhfUkM0XzEyOF9TSEEsCi0gICAgICAgICAgICBUTFMxX0NLX0VDREhfUlNBX1dJVEhfUkM0XzEyOF9TSEEsCi0gICAgICAgICAgICBTU0xfa0VDREh8U1NMX2FSU0F8U1NMX1JDNHxTU0xfU0hBfFNTTF9UTFNWMSwKLSAgICAgICAgICAgIFNTTF9OT1RfRVhQLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDEyOCwKLSAgICAgICAgICAgIDEyOCwKLSAgICAgICAgICAgIFNTTF9BTExfQ0lQSEVSUywKLSAgICAgICAgICAgIFNTTF9BTExfU1RSRU5HVEhTLAotICAgICAgICAgICAgfSwKKwl7CisJMSwKKwlUTFMxX1RYVF9FQ0RIX1JTQV9XSVRIX1JDNF8xMjhfU0hBLAorCVRMUzFfQ0tfRUNESF9SU0FfV0lUSF9SQzRfMTI4X1NIQSwKKwlTU0xfa0VDREhyLAorCVNTTF9hRUNESCwKKwlTU0xfUkM0LAorCVNTTF9TSEExLAorCVNTTF9UTFNWMSwKKwlTU0xfTk9UX0VYUHxTU0xfTUVESVVNLAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCisJMTI4LAorCTEyOCwKKwl9LAogCiAJLyogQ2lwaGVyIEMwMEQgKi8KLQkgICAgewotICAgICAgICAgICAgMSwKLSAgICAgICAgICAgIFRMUzFfVFhUX0VDREhfUlNBX1dJVEhfREVTXzE5Ml9DQkMzX1NIQSwKLSAgICAgICAgICAgIFRMUzFfQ0tfRUNESF9SU0FfV0lUSF9ERVNfMTkyX0NCQzNfU0hBLAotICAgICAgICAgICAgU1NMX2tFQ0RIfFNTTF9hUlNBfFNTTF8zREVTfFNTTF9TSEF8U1NMX1RMU1YxLAotICAgICAgICAgICAgU1NMX05PVF9FWFB8U1NMX0hJR0gsCi0gICAgICAgICAgICAwLAotICAgICAgICAgICAgMTY4LAotICAgICAgICAgICAgMTY4LAotICAgICAgICAgICAgU1NMX0FMTF9DSVBIRVJTLAotICAgICAgICAgICAgU1NMX0FMTF9TVFJFTkdUSFMsCi0gICAgICAgICAgICB9LAorCXsKKwkxLAorCVRMUzFfVFhUX0VDREhfUlNBX1dJVEhfREVTXzE5Ml9DQkMzX1NIQSwKKwlUTFMxX0NLX0VDREhfUlNBX1dJVEhfREVTXzE5Ml9DQkMzX1NIQSwKKwlTU0xfa0VDREhyLAorCVNTTF9hRUNESCwKKwlTU0xfM0RFUywKKwlTU0xfU0hBMSwKKwlTU0xfVExTVjEsCisJU1NMX05PVF9FWFB8U1NMX0hJR0gsCisJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKKwkxNjgsCisJMTY4LAorCX0sCiAKIAkvKiBDaXBoZXIgQzAwRSAqLwotCSAgICB7Ci0gICAgICAgICAgICAxLAotICAgICAgICAgICAgVExTMV9UWFRfRUNESF9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEsCi0gICAgICAgICAgICBUTFMxX0NLX0VDREhfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBLAotICAgICAgICAgICAgU1NMX2tFQ0RIfFNTTF9hUlNBfFNTTF9BRVN8U1NMX1NIQXxTU0xfVExTVjEsCi0gICAgICAgICAgICBTU0xfTk9UX0VYUHxTU0xfSElHSCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAxMjgsCi0gICAgICAgICAgICAxMjgsCi0gICAgICAgICAgICBTU0xfQUxMX0NJUEhFUlMsCi0gICAgICAgICAgICBTU0xfQUxMX1NUUkVOR1RIUywKLSAgICAgICAgICAgIH0sCisJeworCTEsCisJVExTMV9UWFRfRUNESF9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEsCisJVExTMV9DS19FQ0RIX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQSwKKwlTU0xfa0VDREhyLAorCVNTTF9hRUNESCwKKwlTU0xfQUVTMTI4LAorCVNTTF9TSEExLAorCVNTTF9UTFNWMSwKKwlTU0xfTk9UX0VYUHxTU0xfSElHSCwKKwlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAorCTEyOCwKKwkxMjgsCisJfSwKIAogCS8qIENpcGhlciBDMDBGICovCi0JICAgIHsKLSAgICAgICAgICAgIDEsCi0gICAgICAgICAgICBUTFMxX1RYVF9FQ0RIX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQSwKLSAgICAgICAgICAgIFRMUzFfQ0tfRUNESF9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEsCi0gICAgICAgICAgICBTU0xfa0VDREh8U1NMX2FSU0F8U1NMX0FFU3xTU0xfU0hBfFNTTF9UTFNWMSwKLSAgICAgICAgICAgIFNTTF9OT1RfRVhQfFNTTF9ISUdILAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDI1NiwKLSAgICAgICAgICAgIDI1NiwKLSAgICAgICAgICAgIFNTTF9BTExfQ0lQSEVSUywKLSAgICAgICAgICAgIFNTTF9BTExfU1RSRU5HVEhTLAotICAgICAgICAgICAgfSwKKwl7CisJMSwKKwlUTFMxX1RYVF9FQ0RIX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQSwKKwlUTFMxX0NLX0VDREhfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBLAorCVNTTF9rRUNESHIsCisJU1NMX2FFQ0RILAorCVNTTF9BRVMyNTYsCisJU1NMX1NIQTEsCisJU1NMX1RMU1YxLAorCVNTTF9OT1RfRVhQfFNTTF9ISUdILAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCisJMjU2LAorCTI1NiwKKwl9LAogCiAJLyogQ2lwaGVyIEMwMTAgKi8KLQkgICAgewotICAgICAgICAgICAgMSwKLSAgICAgICAgICAgIFRMUzFfVFhUX0VDREhFX1JTQV9XSVRIX05VTExfU0hBLAotICAgICAgICAgICAgVExTMV9DS19FQ0RIRV9SU0FfV0lUSF9OVUxMX1NIQSwKLSAgICAgICAgICAgIFNTTF9rRUNESEV8U1NMX2FSU0F8U1NMX2VOVUxMfFNTTF9TSEF8U1NMX1RMU1YxLAotICAgICAgICAgICAgU1NMX05PVF9FWFAsCi0gICAgICAgICAgICAwLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICBTU0xfQUxMX0NJUEhFUlMsCi0gICAgICAgICAgICBTU0xfQUxMX1NUUkVOR1RIUywKLSAgICAgICAgICAgIH0sCisJeworCTEsCisJVExTMV9UWFRfRUNESEVfUlNBX1dJVEhfTlVMTF9TSEEsCisJVExTMV9DS19FQ0RIRV9SU0FfV0lUSF9OVUxMX1NIQSwKKwlTU0xfa0VFQ0RILAorCVNTTF9hUlNBLAorCVNTTF9lTlVMTCwKKwlTU0xfU0hBMSwKKwlTU0xfVExTVjEsCisJU1NMX05PVF9FWFB8U1NMX1NUUk9OR19OT05FLAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCisJMCwKKwkwLAorCX0sCiAKIAkvKiBDaXBoZXIgQzAxMSAqLwotCSAgICB7Ci0gICAgICAgICAgICAxLAotICAgICAgICAgICAgVExTMV9UWFRfRUNESEVfUlNBX1dJVEhfUkM0XzEyOF9TSEEsCi0gICAgICAgICAgICBUTFMxX0NLX0VDREhFX1JTQV9XSVRIX1JDNF8xMjhfU0hBLAotICAgICAgICAgICAgU1NMX2tFQ0RIRXxTU0xfYVJTQXxTU0xfUkM0fFNTTF9TSEF8U1NMX1RMU1YxLAotICAgICAgICAgICAgU1NMX05PVF9FWFAsCi0gICAgICAgICAgICAwLAotICAgICAgICAgICAgMTI4LAotICAgICAgICAgICAgMTI4LAotICAgICAgICAgICAgU1NMX0FMTF9DSVBIRVJTLAotICAgICAgICAgICAgU1NMX0FMTF9TVFJFTkdUSFMsCi0gICAgICAgICAgICB9LAorCXsKKwkxLAorCVRMUzFfVFhUX0VDREhFX1JTQV9XSVRIX1JDNF8xMjhfU0hBLAorCVRMUzFfQ0tfRUNESEVfUlNBX1dJVEhfUkM0XzEyOF9TSEEsCisJU1NMX2tFRUNESCwKKwlTU0xfYVJTQSwKKwlTU0xfUkM0LAorCVNTTF9TSEExLAorCVNTTF9UTFNWMSwKKwlTU0xfTk9UX0VYUHxTU0xfTUVESVVNLAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCisJMTI4LAorCTEyOCwKKwl9LAogCiAJLyogQ2lwaGVyIEMwMTIgKi8KLQkgICAgewotICAgICAgICAgICAgMSwKLSAgICAgICAgICAgIFRMUzFfVFhUX0VDREhFX1JTQV9XSVRIX0RFU18xOTJfQ0JDM19TSEEsCi0gICAgICAgICAgICBUTFMxX0NLX0VDREhFX1JTQV9XSVRIX0RFU18xOTJfQ0JDM19TSEEsCi0gICAgICAgICAgICBTU0xfa0VDREhFfFNTTF9hUlNBfFNTTF8zREVTfFNTTF9TSEF8U1NMX1RMU1YxLAotICAgICAgICAgICAgU1NMX05PVF9FWFB8U1NMX0hJR0gsCi0gICAgICAgICAgICAwLAotICAgICAgICAgICAgMTY4LAotICAgICAgICAgICAgMTY4LAotICAgICAgICAgICAgU1NMX0FMTF9DSVBIRVJTLAotICAgICAgICAgICAgU1NMX0FMTF9TVFJFTkdUSFMsCi0gICAgICAgICAgICB9LAorCXsKKwkxLAorCVRMUzFfVFhUX0VDREhFX1JTQV9XSVRIX0RFU18xOTJfQ0JDM19TSEEsCisJVExTMV9DS19FQ0RIRV9SU0FfV0lUSF9ERVNfMTkyX0NCQzNfU0hBLAorCVNTTF9rRUVDREgsCisJU1NMX2FSU0EsCisJU1NMXzNERVMsCisJU1NMX1NIQTEsCisJU1NMX1RMU1YxLAorCVNTTF9OT1RfRVhQfFNTTF9ISUdILAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCisJMTY4LAorCTE2OCwKKwl9LAogCiAJLyogQ2lwaGVyIEMwMTMgKi8KLQkgICAgewotICAgICAgICAgICAgMSwKLSAgICAgICAgICAgIFRMUzFfVFhUX0VDREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQSwKLSAgICAgICAgICAgIFRMUzFfQ0tfRUNESEVfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBLAotICAgICAgICAgICAgU1NMX2tFQ0RIRXxTU0xfYVJTQXxTU0xfQUVTfFNTTF9TSEF8U1NMX1RMU1YxLAotICAgICAgICAgICAgU1NMX05PVF9FWFB8U1NMX0hJR0gsCi0gICAgICAgICAgICAwLAotICAgICAgICAgICAgMTI4LAotICAgICAgICAgICAgMTI4LAotICAgICAgICAgICAgU1NMX0FMTF9DSVBIRVJTLAotICAgICAgICAgICAgU1NMX0FMTF9TVFJFTkdUSFMsCi0gICAgICAgICAgICB9LAorCXsKKwkxLAorCVRMUzFfVFhUX0VDREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQSwKKwlUTFMxX0NLX0VDREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQSwKKwlTU0xfa0VFQ0RILAorCVNTTF9hUlNBLAorCVNTTF9BRVMxMjgsCisJU1NMX1NIQTEsCisJU1NMX1RMU1YxLAorCVNTTF9OT1RfRVhQfFNTTF9ISUdILAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCisJMTI4LAorCTEyOCwKKwl9LAogCiAJLyogQ2lwaGVyIEMwMTQgKi8KLQkgICAgewotICAgICAgICAgICAgMSwKLSAgICAgICAgICAgIFRMUzFfVFhUX0VDREhFX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQSwKLSAgICAgICAgICAgIFRMUzFfQ0tfRUNESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBLAotICAgICAgICAgICAgU1NMX2tFQ0RIRXxTU0xfYVJTQXxTU0xfQUVTfFNTTF9TSEF8U1NMX1RMU1YxLAotICAgICAgICAgICAgU1NMX05PVF9FWFB8U1NMX0hJR0gsCi0gICAgICAgICAgICAwLAotICAgICAgICAgICAgMjU2LAotICAgICAgICAgICAgMjU2LAotICAgICAgICAgICAgU1NMX0FMTF9DSVBIRVJTLAotICAgICAgICAgICAgU1NMX0FMTF9TVFJFTkdUSFMsCi0gICAgICAgICAgICB9LAorCXsKKwkxLAorCVRMUzFfVFhUX0VDREhFX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQSwKKwlUTFMxX0NLX0VDREhFX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQSwKKwlTU0xfa0VFQ0RILAorCVNTTF9hUlNBLAorCVNTTF9BRVMyNTYsCisJU1NMX1NIQTEsCisJU1NMX1RMU1YxLAorCVNTTF9OT1RfRVhQfFNTTF9ISUdILAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCisJMjU2LAorCTI1NiwKKwl9LAogCiAJLyogQ2lwaGVyIEMwMTUgKi8KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIDEsCi0gICAgICAgICAgICBUTFMxX1RYVF9FQ0RIX2Fub25fV0lUSF9OVUxMX1NIQSwKLSAgICAgICAgICAgIFRMUzFfQ0tfRUNESF9hbm9uX1dJVEhfTlVMTF9TSEEsCi0gICAgICAgICAgICBTU0xfa0VDREhFfFNTTF9hTlVMTHxTU0xfZU5VTEx8U1NMX1NIQXxTU0xfVExTVjEsCi0gICAgICAgICAgICBTU0xfTk9UX0VYUCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIFNTTF9BTExfQ0lQSEVSUywKLSAgICAgICAgICAgIFNTTF9BTExfU1RSRU5HVEhTLAotCSAgICB9LAorCXsKKwkxLAorCVRMUzFfVFhUX0VDREhfYW5vbl9XSVRIX05VTExfU0hBLAorCVRMUzFfQ0tfRUNESF9hbm9uX1dJVEhfTlVMTF9TSEEsCisJU1NMX2tFRUNESCwKKwlTU0xfYU5VTEwsCisJU1NMX2VOVUxMLAorCVNTTF9TSEExLAorCVNTTF9UTFNWMSwKKwlTU0xfTk9UX0VYUHxTU0xfU1RST05HX05PTkUsCisJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKKwkwLAorCTAsCisJfSwKIAogCS8qIENpcGhlciBDMDE2ICovCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAxLAotICAgICAgICAgICAgVExTMV9UWFRfRUNESF9hbm9uX1dJVEhfUkM0XzEyOF9TSEEsCi0gICAgICAgICAgICBUTFMxX0NLX0VDREhfYW5vbl9XSVRIX1JDNF8xMjhfU0hBLAotICAgICAgICAgICAgU1NMX2tFQ0RIRXxTU0xfYU5VTEx8U1NMX1JDNHxTU0xfU0hBfFNTTF9UTFNWMSwKLSAgICAgICAgICAgIFNTTF9OT1RfRVhQLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDEyOCwKLSAgICAgICAgICAgIDEyOCwKLSAgICAgICAgICAgIFNTTF9BTExfQ0lQSEVSUywKLSAgICAgICAgICAgIFNTTF9BTExfU1RSRU5HVEhTLAotCSAgICB9LAorCXsKKwkxLAorCVRMUzFfVFhUX0VDREhfYW5vbl9XSVRIX1JDNF8xMjhfU0hBLAorCVRMUzFfQ0tfRUNESF9hbm9uX1dJVEhfUkM0XzEyOF9TSEEsCisJU1NMX2tFRUNESCwKKwlTU0xfYU5VTEwsCisJU1NMX1JDNCwKKwlTU0xfU0hBMSwKKwlTU0xfVExTVjEsCisJU1NMX05PVF9FWFB8U1NMX01FRElVTSwKKwlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAorCTEyOCwKKwkxMjgsCisJfSwKIAogCS8qIENpcGhlciBDMDE3ICovCi0JICAgIHsKLSAgICAgICAgICAgIDEsCi0gICAgICAgICAgICBUTFMxX1RYVF9FQ0RIX2Fub25fV0lUSF9ERVNfMTkyX0NCQzNfU0hBLAotICAgICAgICAgICAgVExTMV9DS19FQ0RIX2Fub25fV0lUSF9ERVNfMTkyX0NCQzNfU0hBLAotICAgICAgICAgICAgU1NMX2tFQ0RIRXxTU0xfYU5VTEx8U1NMXzNERVN8U1NMX1NIQXxTU0xfVExTVjEsCi0gICAgICAgICAgICBTU0xfTk9UX0VYUHxTU0xfSElHSCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAxNjgsCi0gICAgICAgICAgICAxNjgsCi0gICAgICAgICAgICBTU0xfQUxMX0NJUEhFUlMsCi0gICAgICAgICAgICBTU0xfQUxMX1NUUkVOR1RIUywKLSAgICAgICAgICAgIH0sCisJeworCTEsCisJVExTMV9UWFRfRUNESF9hbm9uX1dJVEhfREVTXzE5Ml9DQkMzX1NIQSwKKwlUTFMxX0NLX0VDREhfYW5vbl9XSVRIX0RFU18xOTJfQ0JDM19TSEEsCisJU1NMX2tFRUNESCwKKwlTU0xfYU5VTEwsCisJU1NMXzNERVMsCisJU1NMX1NIQTEsCisJU1NMX1RMU1YxLAorCVNTTF9OT1RfRVhQfFNTTF9ISUdILAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCisJMTY4LAorCTE2OCwKKwl9LAogCiAJLyogQ2lwaGVyIEMwMTggKi8KLQkgICAgewotICAgICAgICAgICAgMSwKLSAgICAgICAgICAgIFRMUzFfVFhUX0VDREhfYW5vbl9XSVRIX0FFU18xMjhfQ0JDX1NIQSwKLSAgICAgICAgICAgIFRMUzFfQ0tfRUNESF9hbm9uX1dJVEhfQUVTXzEyOF9DQkNfU0hBLAotICAgICAgICAgICAgU1NMX2tFQ0RIRXxTU0xfYU5VTEx8U1NMX0FFU3xTU0xfU0hBfFNTTF9UTFNWMSwKLSAgICAgICAgICAgIFNTTF9OT1RfRVhQfFNTTF9ISUdILAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDEyOCwKLSAgICAgICAgICAgIDEyOCwKLSAgICAgICAgICAgIFNTTF9BTExfQ0lQSEVSUywKLSAgICAgICAgICAgIFNTTF9BTExfU1RSRU5HVEhTLAotICAgICAgICAgICAgfSwKKwl7CisJMSwKKwlUTFMxX1RYVF9FQ0RIX2Fub25fV0lUSF9BRVNfMTI4X0NCQ19TSEEsCisJVExTMV9DS19FQ0RIX2Fub25fV0lUSF9BRVNfMTI4X0NCQ19TSEEsCisJU1NMX2tFRUNESCwKKwlTU0xfYU5VTEwsCisJU1NMX0FFUzEyOCwKKwlTU0xfU0hBMSwKKwlTU0xfVExTVjEsCisJU1NMX05PVF9FWFB8U1NMX0hJR0gsCisJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKKwkxMjgsCisJMTI4LAorCX0sCiAKIAkvKiBDaXBoZXIgQzAxOSAqLwotCSAgICB7Ci0gICAgICAgICAgICAxLAotICAgICAgICAgICAgVExTMV9UWFRfRUNESF9hbm9uX1dJVEhfQUVTXzI1Nl9DQkNfU0hBLAotICAgICAgICAgICAgVExTMV9DS19FQ0RIX2Fub25fV0lUSF9BRVNfMjU2X0NCQ19TSEEsCi0gICAgICAgICAgICBTU0xfa0VDREhFfFNTTF9hTlVMTHxTU0xfQUVTfFNTTF9TSEF8U1NMX1RMU1YxLAotICAgICAgICAgICAgU1NMX05PVF9FWFB8U1NMX0hJR0gsCi0gICAgICAgICAgICAwLAotICAgICAgICAgICAgMjU2LAotICAgICAgICAgICAgMjU2LAotICAgICAgICAgICAgU1NMX0FMTF9DSVBIRVJTLAotICAgICAgICAgICAgU1NMX0FMTF9TVFJFTkdUSFMsCi0gICAgICAgICAgICB9LAorCXsKKwkxLAorCVRMUzFfVFhUX0VDREhfYW5vbl9XSVRIX0FFU18yNTZfQ0JDX1NIQSwKKwlUTFMxX0NLX0VDREhfYW5vbl9XSVRIX0FFU18yNTZfQ0JDX1NIQSwKKwlTU0xfa0VFQ0RILAorCVNTTF9hTlVMTCwKKwlTU0xfQUVTMjU2LAorCVNTTF9TSEExLAorCVNTTF9UTFNWMSwKKwlTU0xfTk9UX0VYUHxTU0xfSElHSCwKKwlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAorCTI1NiwKKwkyNTYsCisJfSwKICNlbmRpZgkvKiBPUEVOU1NMX05PX0VDREggKi8KIAorI2lmZGVmIFRFTVBfR09TVF9UTFMKKy8qIENpcGhlciBGRjAwICovCisJeworCTEsCisJIkdPU1QtTUQ1IiwKKwkweDAzMDBmZjAwLAorCVNTTF9rUlNBLAorCVNTTF9hUlNBLAorCVNTTF9lR09TVDI4MTQ3ODlDTlQsCisJU1NMX01ENSwKKwlTU0xfVExTVjEsCisJU1NMX05PVF9FWFB8U1NMX0hJR0gsCisJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKKwkyNTYsCisJMjU2LAorCX0sCisJeworCTEsCisJIkdPU1QtR09TVDk0IiwKKwkweDAzMDBmZjAxLAorCVNTTF9rUlNBLAorCVNTTF9hUlNBLAorCVNTTF9lR09TVDI4MTQ3ODlDTlQsCisJU1NMX0dPU1Q5NCwKKwlTU0xfVExTVjEsCisJU1NMX05PVF9FWFB8U1NMX0hJR0gsCisJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKKwkyNTYsCisJMjU2CisJfSwKKwl7CisJMSwKKwkiR09TVC1HT1NUODlNQUMiLAorCTB4MDMwMGZmMDIsCisJU1NMX2tSU0EsCisJU1NMX2FSU0EsCisJU1NMX2VHT1NUMjgxNDc4OUNOVCwKKwlTU0xfR09TVDg5TUFDLAorCVNTTF9UTFNWMSwKKwlTU0xfTk9UX0VYUHxTU0xfSElHSCwKKwlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAorCTI1NiwKKwkyNTYKKwl9LAorCXsKKwkxLAorCSJHT1NULUdPU1Q4OVNUUkVBTSIsCisJMHgwMzAwZmYwMywKKwlTU0xfa1JTQSwKKwlTU0xfYVJTQSwKKwlTU0xfZUdPU1QyODE0Nzg5Q05ULAorCVNTTF9HT1NUODlNQUMsCisJU1NMX1RMU1YxLAorCVNTTF9OT1RfRVhQfFNTTF9ISUdILAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkZ8VExTMV9TVFJFQU1fTUFDLAorCTI1NiwKKwkyNTYKKwl9LAorI2VuZGlmCiAKIC8qIGVuZCBvZiBsaXN0ICovCiAJfTsKIAogU1NMM19FTkNfTUVUSE9EIFNTTHYzX2VuY19kYXRhPXsKIAlzc2wzX2VuYywKLQlzc2wzX21hYywKKwluX3NzbDNfbWFjLAogCXNzbDNfc2V0dXBfa2V5X2Jsb2NrLAogCXNzbDNfZ2VuZXJhdGVfbWFzdGVyX3NlY3JldCwKIAlzc2wzX2NoYW5nZV9jaXBoZXJfc3RhdGUsCkBAIC0xNjI4LDE3ICsyMDk2LDEyIEBACiAJcmV0dXJuKDYwKjYwKjIpOwogCX0KIAotSU1QTEVNRU5UX3NzbDNfbWV0aF9mdW5jKHNzbHYzX2Jhc2VfbWV0aG9kLAotCQkJc3NsX3VuZGVmaW5lZF9mdW5jdGlvbiwKLQkJCXNzbF91bmRlZmluZWRfZnVuY3Rpb24sCi0JCQlzc2xfYmFkX21ldGhvZCkKLQogaW50IHNzbDNfbnVtX2NpcGhlcnModm9pZCkKIAl7CiAJcmV0dXJuKFNTTDNfTlVNX0NJUEhFUlMpOwogCX0KIAotU1NMX0NJUEhFUiAqc3NsM19nZXRfY2lwaGVyKHVuc2lnbmVkIGludCB1KQorY29uc3QgU1NMX0NJUEhFUiAqc3NsM19nZXRfY2lwaGVyKHVuc2lnbmVkIGludCB1KQogCXsKIAlpZiAodSA8IFNTTDNfTlVNX0NJUEhFUlMpCiAJCXJldHVybigmKHNzbDNfY2lwaGVyc1tTU0wzX05VTV9DSVBIRVJTLTEtdV0pKTsKQEAgLTE2NjAsMTAgKzIxMjMsOCBAQAogCiAJaWYgKChzMz1PUEVOU1NMX21hbGxvYyhzaXplb2YgKnMzKSkgPT0gTlVMTCkgZ290byBlcnI7CiAJbWVtc2V0KHMzLDAsc2l6ZW9mICpzMyk7Ci0JRVZQX01EX0NUWF9pbml0KCZzMy0+ZmluaXNoX2Rnc3QxKTsKLQlFVlBfTURfQ1RYX2luaXQoJnMzLT5maW5pc2hfZGdzdDIpOwotCXBxXzY0Yml0X2luaXQoJihzMy0+cnJlYy5zZXFfbnVtKSk7Ci0JcHFfNjRiaXRfaW5pdCgmKHMzLT53cmVjLnNlcV9udW0pKTsKKwltZW1zZXQoczMtPnJyZWMuc2VxX251bSwwLHNpemVvZihzMy0+cnJlYy5zZXFfbnVtKSk7CisJbWVtc2V0KHMzLT53cmVjLnNlcV9udW0sMCxzaXplb2YoczMtPndyZWMuc2VxX251bSkpOwogCiAJcy0+czM9czM7CiAKQEAgLTE2NzgsMTEgKzIxMzksMTggQEAKIAlpZihzID09IE5VTEwpCiAJICAgIHJldHVybjsKIAorI2lmZGVmIFRMU0VYVF9UWVBFX29wYXF1ZV9wcmZfaW5wdXQKKwlpZiAocy0+czMtPmNsaWVudF9vcGFxdWVfcHJmX2lucHV0ICE9IE5VTEwpCisJCU9QRU5TU0xfZnJlZShzLT5zMy0+Y2xpZW50X29wYXF1ZV9wcmZfaW5wdXQpOworCWlmIChzLT5zMy0+c2VydmVyX29wYXF1ZV9wcmZfaW5wdXQgIT0gTlVMTCkKKwkJT1BFTlNTTF9mcmVlKHMtPnMzLT5zZXJ2ZXJfb3BhcXVlX3ByZl9pbnB1dCk7CisjZW5kaWYKKwogCXNzbDNfY2xlYW51cF9rZXlfYmxvY2socyk7CiAJaWYgKHMtPnMzLT5yYnVmLmJ1ZiAhPSBOVUxMKQotCQlPUEVOU1NMX2ZyZWUocy0+czMtPnJidWYuYnVmKTsKKwkJc3NsM19yZWxlYXNlX3JlYWRfYnVmZmVyKHMpOwogCWlmIChzLT5zMy0+d2J1Zi5idWYgIT0gTlVMTCkKLQkJT1BFTlNTTF9mcmVlKHMtPnMzLT53YnVmLmJ1Zik7CisJCXNzbDNfcmVsZWFzZV93cml0ZV9idWZmZXIocyk7CiAJaWYgKHMtPnMzLT5ycmVjLmNvbXAgIT0gTlVMTCkKIAkJT1BFTlNTTF9mcmVlKHMtPnMzLT5ycmVjLmNvbXApOwogI2lmbmRlZiBPUEVOU1NMX05PX0RICkBAIC0xNjk2LDExICsyMTY0LDEwIEBACiAKIAlpZiAocy0+czMtPnRtcC5jYV9uYW1lcyAhPSBOVUxMKQogCQlza19YNTA5X05BTUVfcG9wX2ZyZWUocy0+czMtPnRtcC5jYV9uYW1lcyxYNTA5X05BTUVfZnJlZSk7Ci0JRVZQX01EX0NUWF9jbGVhbnVwKCZzLT5zMy0+ZmluaXNoX2Rnc3QxKTsKLQlFVlBfTURfQ1RYX2NsZWFudXAoJnMtPnMzLT5maW5pc2hfZGdzdDIpOwotCXBxXzY0Yml0X2ZyZWUoJihzLT5zMy0+cnJlYy5zZXFfbnVtKSk7Ci0JcHFfNjRiaXRfZnJlZSgmKHMtPnMzLT53cmVjLnNlcV9udW0pKTsKLQorCWlmIChzLT5zMy0+aGFuZHNoYWtlX2J1ZmZlcikgeworCQlCSU9fZnJlZShzLT5zMy0+aGFuZHNoYWtlX2J1ZmZlcik7CisJfQorCWlmIChzLT5zMy0+aGFuZHNoYWtlX2Rnc3QpIHNzbDNfZnJlZV9kaWdlc3RfbGlzdChzKTsKIAlPUEVOU1NMX2NsZWFuc2Uocy0+czMsc2l6ZW9mICpzLT5zMyk7CiAJT1BFTlNTTF9mcmVlKHMtPnMzKTsKIAlzLT5zMz1OVUxMOwpAQCAtMTcxMSw2ICsyMTc4LDE1IEBACiAJdW5zaWduZWQgY2hhciAqcnAsKndwOwogCXNpemVfdCBybGVuLCB3bGVuOwogCisjaWZkZWYgVExTRVhUX1RZUEVfb3BhcXVlX3ByZl9pbnB1dAorCWlmIChzLT5zMy0+Y2xpZW50X29wYXF1ZV9wcmZfaW5wdXQgIT0gTlVMTCkKKwkJT1BFTlNTTF9mcmVlKHMtPnMzLT5jbGllbnRfb3BhcXVlX3ByZl9pbnB1dCk7CisJcy0+czMtPmNsaWVudF9vcGFxdWVfcHJmX2lucHV0ID0gTlVMTDsKKwlpZiAocy0+czMtPnNlcnZlcl9vcGFxdWVfcHJmX2lucHV0ICE9IE5VTEwpCisJCU9QRU5TU0xfZnJlZShzLT5zMy0+c2VydmVyX29wYXF1ZV9wcmZfaW5wdXQpOworCXMtPnMzLT5zZXJ2ZXJfb3BhcXVlX3ByZl9pbnB1dCA9IE5VTEw7CisjZW5kaWYKKwogCXNzbDNfY2xlYW51cF9rZXlfYmxvY2socyk7CiAJaWYgKHMtPnMzLT50bXAuY2FfbmFtZXMgIT0gTlVMTCkKIAkJc2tfWDUwOV9OQU1FX3BvcF9mcmVlKHMtPnMzLT50bXAuY2FfbmFtZXMsWDUwOV9OQU1FX2ZyZWUpOwpAQCAtMTczMywxMCArMjIwOSwxMyBAQAogCXdwID0gcy0+czMtPndidWYuYnVmOwogCXJsZW4gPSBzLT5zMy0+cmJ1Zi5sZW47CiAgCXdsZW4gPSBzLT5zMy0+d2J1Zi5sZW47Ci0KLQlFVlBfTURfQ1RYX2NsZWFudXAoJnMtPnMzLT5maW5pc2hfZGdzdDEpOwotCUVWUF9NRF9DVFhfY2xlYW51cCgmcy0+czMtPmZpbmlzaF9kZ3N0Mik7Ci0KKwlpZiAocy0+czMtPmhhbmRzaGFrZV9idWZmZXIpIHsKKwkJQklPX2ZyZWUocy0+czMtPmhhbmRzaGFrZV9idWZmZXIpOworCQlzLT5zMy0+aGFuZHNoYWtlX2J1ZmZlciA9IE5VTEw7CisJfQorCWlmIChzLT5zMy0+aGFuZHNoYWtlX2Rnc3QpIHsKKwkJc3NsM19mcmVlX2RpZ2VzdF9saXN0KHMpOworCX0JCiAJbWVtc2V0KHMtPnMzLDAsc2l6ZW9mICpzLT5zMyk7CiAJcy0+czMtPnJidWYuYnVmID0gcnA7CiAJcy0+czMtPndidWYuYnVmID0gd3A7CkBAIC0xOTM2LDcgKzI0MTUsMzEgQEAKIAkJcy0+dGxzZXh0X2RlYnVnX2FyZz1wYXJnOwogCQlyZXQgPSAxOwogCQlicmVhazsKLSAgCisKKyNpZmRlZiBUTFNFWFRfVFlQRV9vcGFxdWVfcHJmX2lucHV0CisJY2FzZSBTU0xfQ1RSTF9TRVRfVExTRVhUX09QQVFVRV9QUkZfSU5QVVQ6CisJCWlmIChsYXJnID4gMTIyODgpIC8qIGFjdHVhbCBpbnRlcm5hbCBsaW1pdCBpcyAyXjE2IGZvciB0aGUgY29tcGxldGUgaGVsbG8gbWVzc2FnZQorCQkgICAgICAgICAgICAgICAgICAgKiAoaW5jbHVkaW5nIHRoZSBjZXJ0IGNoYWluIGFuZCBldmVyeXRoaW5nKSAqLworCQkJeworCQkJU1NMZXJyKFNTTF9GX1NTTDNfQ1RSTCwgU1NMX1JfT1BBUVVFX1BSRl9JTlBVVF9UT09fTE9ORyk7CisJCQlicmVhazsKKwkJCX0KKwkJaWYgKHMtPnRsc2V4dF9vcGFxdWVfcHJmX2lucHV0ICE9IE5VTEwpCisJCQlPUEVOU1NMX2ZyZWUocy0+dGxzZXh0X29wYXF1ZV9wcmZfaW5wdXQpOworCQlpZiAoKHNpemVfdClsYXJnID09IDApCisJCQlzLT50bHNleHRfb3BhcXVlX3ByZl9pbnB1dCA9IE9QRU5TU0xfbWFsbG9jKDEpOyAvKiBkdW1teSBieXRlIGp1c3QgdG8gZ2V0IG5vbi1OVUxMICovCisJCWVsc2UKKwkJCXMtPnRsc2V4dF9vcGFxdWVfcHJmX2lucHV0ID0gQlVGX21lbWR1cChwYXJnLCAoc2l6ZV90KWxhcmcpOworCQlpZiAocy0+dGxzZXh0X29wYXF1ZV9wcmZfaW5wdXQgIT0gTlVMTCkKKwkJCXsKKwkJCXMtPnRsc2V4dF9vcGFxdWVfcHJmX2lucHV0X2xlbiA9IChzaXplX3QpbGFyZzsKKwkJCXJldCA9IDE7CisJCQl9CisJCWVsc2UKKwkJCXMtPnRsc2V4dF9vcGFxdWVfcHJmX2lucHV0X2xlbiA9IDA7CisJCWJyZWFrOworI2VuZGlmCisKIAljYXNlIFNTTF9DVFJMX1NFVF9UTFNFWFRfU1RBVFVTX1JFUV9UWVBFOgogCQlzLT50bHNleHRfc3RhdHVzX3R5cGU9bGFyZzsKIAkJcmV0ID0gMTsKQEAgLTIxOTQsMTMgKzI2OTcsMjAgQEAKIAkJCX0KIAkJcmV0dXJuIDE7CiAJCX0KLSAgCisKKyNpZmRlZiBUTFNFWFRfVFlQRV9vcGFxdWVfcHJmX2lucHV0CisJY2FzZSBTU0xfQ1RSTF9TRVRfVExTRVhUX09QQVFVRV9QUkZfSU5QVVRfQ0JfQVJHOgorCQljdHgtPnRsc2V4dF9vcGFxdWVfcHJmX2lucHV0X2NhbGxiYWNrX2FyZyA9IHBhcmc7CisJCXJldHVybiAxOworI2VuZGlmCisKIAljYXNlIFNTTF9DVFJMX1NFVF9UTFNFWFRfU1RBVFVTX1JFUV9DQl9BUkc6CiAJCWN0eC0+dGxzZXh0X3N0YXR1c19hcmc9cGFyZzsKIAkJcmV0dXJuIDE7CiAJCWJyZWFrOwogCiAjZW5kaWYgLyogIU9QRU5TU0xfTk9fVExTRVhUICovCisKIAkvKiBBIFRoYXd0ZSBzcGVjaWFsIDotKSAqLwogCWNhc2UgU1NMX0NUUkxfRVhUUkFfQ0hBSU5fQ0VSVDoKIAkJaWYgKGN0eC0+ZXh0cmFfY2VydHMgPT0gTlVMTCkKQEAgLTIyNTAsNyArMjc2MCwxMyBAQAogCWNhc2UgU1NMX0NUUkxfU0VUX1RMU0VYVF9TRVJWRVJOQU1FX0NCOgogCQljdHgtPnRsc2V4dF9zZXJ2ZXJuYW1lX2NhbGxiYWNrPShpbnQgKCopKFNTTCAqLGludCAqLHZvaWQgKikpZnA7CiAJCWJyZWFrOwotICAKKworI2lmZGVmIFRMU0VYVF9UWVBFX29wYXF1ZV9wcmZfaW5wdXQKKwljYXNlIFNTTF9DVFJMX1NFVF9UTFNFWFRfT1BBUVVFX1BSRl9JTlBVVF9DQjoKKwkJY3R4LT50bHNleHRfb3BhcXVlX3ByZl9pbnB1dF9jYWxsYmFjayA9IChpbnQgKCopKFNTTCAqLHZvaWQgKiwgc2l6ZV90LCB2b2lkICopKWZwOworCQlicmVhazsKKyNlbmRpZgorCiAJY2FzZSBTU0xfQ1RSTF9TRVRfVExTRVhUX1NUQVRVU19SRVFfQ0I6CiAJCWN0eC0+dGxzZXh0X3N0YXR1c19jYj0oaW50ICgqKShTU0wgKix2b2lkICopKWZwOwogCQlicmVhazsKQEAgLTIyNzEsMTcgKzI3ODcsMTUgQEAKIAogLyogVGhpcyBmdW5jdGlvbiBuZWVkcyB0byBjaGVjayBpZiB0aGUgY2lwaGVycyByZXF1aXJlZCBhcmUgYWN0dWFsbHkKICAqIGF2YWlsYWJsZSAqLwotU1NMX0NJUEhFUiAqc3NsM19nZXRfY2lwaGVyX2J5X2NoYXIoY29uc3QgdW5zaWduZWQgY2hhciAqcCkKK2NvbnN0IFNTTF9DSVBIRVIgKnNzbDNfZ2V0X2NpcGhlcl9ieV9jaGFyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnApCiAJewotCVNTTF9DSVBIRVIgYywqY3A7CisJU1NMX0NJUEhFUiBjOworCWNvbnN0IFNTTF9DSVBIRVIgKmNwOwogCXVuc2lnbmVkIGxvbmcgaWQ7CiAKIAlpZD0weDAzMDAwMDAwTHwoKHVuc2lnbmVkIGxvbmcpcFswXTw8OEwpfCh1bnNpZ25lZCBsb25nKXBbMV07CiAJYy5pZD1pZDsKLQljcCA9IChTU0xfQ0lQSEVSICopT0JKX2JzZWFyY2goKGNoYXIgKikmYywKLQkJKGNoYXIgKilzc2wzX2NpcGhlcnMsCi0JCVNTTDNfTlVNX0NJUEhFUlMsc2l6ZW9mKFNTTF9DSVBIRVIpLAotCQlGUF9JQ0Mgc3NsX2NpcGhlcl9pZF9jbXApOworCWNwID0gT0JKX2JzZWFyY2hfc3NsX2NpcGhlcl9pZCgmYywgc3NsM19jaXBoZXJzLCBTU0wzX05VTV9DSVBIRVJTKTsKIAlpZiAoY3AgPT0gTlVMTCB8fCBjcC0+dmFsaWQgPT0gMCkKIAkJcmV0dXJuIE5VTEw7CiAJZWxzZQpAQCAtMjMwNywxMCArMjgyMSwxNCBAQAogCXsKIAlTU0xfQ0lQSEVSICpjLCpyZXQ9TlVMTDsKIAlTVEFDS19PRihTU0xfQ0lQSEVSKSAqcHJpbywgKmFsbG93OwotCWludCBpLGosb2s7Ci0KKwlpbnQgaSxpaSxvazsKKyNpZiAhZGVmaW5lZChPUEVOU1NMX05PX1RMU0VYVCkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19FQykKKwl1bnNpZ25lZCBpbnQgajsKKwlpbnQgZWNfb2ssIGVjX25pZDsKKwl1bnNpZ25lZCBjaGFyIGVjX3NlYXJjaDEgPSAwLCBlY19zZWFyY2gyID0gMDsKKyNlbmRpZgogCUNFUlQgKmNlcnQ7Ci0JdW5zaWduZWQgbG9uZyBhbGcsbWFzayxlbWFzazsKKwl1bnNpZ25lZCBsb25nIGFsZ19rLGFsZ19hLG1hc2tfayxtYXNrX2EsZW1hc2tfayxlbWFza19hOwogCiAJLyogTGV0J3Mgc2VlIHdoaWNoIGNpcGhlcnMgd2UgY2FuIHN1cHBvcnQgKi8KIAljZXJ0PXMtPmNlcnQ7CkBAIC0yMzI2LDczICsyODQ0LDIzNyBAQAogI2VuZGlmCiAKICNpZmRlZiBDSVBIRVJfREVCVUcKLSAgICAgICAgcHJpbnRmKCJTZXJ2ZXIgaGFzICVkIGZyb20gJXA6XG4iLCBza19TU0xfQ0lQSEVSX251bShzcnZyKSwgc3J2cik7Ci0gICAgICAgIGZvcihpPTAgOyBpIDwgc2tfU1NMX0NJUEhFUl9udW0oc3J2cikgOyArK2kpCi0JICAgIHsKLQkgICAgYz1za19TU0xfQ0lQSEVSX3ZhbHVlKHNydnIsaSk7Ci0JICAgIHByaW50ZigiJXA6JXNcbiIsYyxjLT5uYW1lKTsKLQkgICAgfQotICAgICAgICBwcmludGYoIkNsaWVudCBzZW50ICVkIGZyb20gJXA6XG4iLCBza19TU0xfQ0lQSEVSX251bShjbG50KSwgY2xudCk7Ci0gICAgICAgIGZvcihpPTAgOyBpIDwgc2tfU1NMX0NJUEhFUl9udW0oY2xudCkgOyArK2kpCisJcHJpbnRmKCJTZXJ2ZXIgaGFzICVkIGZyb20gJXA6XG4iLCBza19TU0xfQ0lQSEVSX251bShzcnZyKSwgKHZvaWQgKilzcnZyKTsKKwlmb3IoaT0wIDsgaSA8IHNrX1NTTF9DSVBIRVJfbnVtKHNydnIpIDsgKytpKQorCQl7CisJCWM9c2tfU1NMX0NJUEhFUl92YWx1ZShzcnZyLGkpOworCQlwcmludGYoIiVwOiVzXG4iLCh2b2lkICopYyxjLT5uYW1lKTsKKwkJfQorCXByaW50ZigiQ2xpZW50IHNlbnQgJWQgZnJvbSAlcDpcbiIsIHNrX1NTTF9DSVBIRVJfbnVtKGNsbnQpLCAodm9pZCAqKWNsbnQpOworCWZvcihpPTAgOyBpIDwgc2tfU1NMX0NJUEhFUl9udW0oY2xudCkgOyArK2kpCiAJICAgIHsKIAkgICAgYz1za19TU0xfQ0lQSEVSX3ZhbHVlKGNsbnQsaSk7Ci0JICAgIHByaW50ZigiJXA6JXNcbiIsYyxjLT5uYW1lKTsKKwkgICAgcHJpbnRmKCIlcDolc1xuIiwodm9pZCAqKWMsYy0+bmFtZSk7CiAJICAgIH0KICNlbmRpZgogCiAJaWYgKHMtPm9wdGlvbnMgJiBTU0xfT1BfQ0lQSEVSX1NFUlZFUl9QUkVGRVJFTkNFKQotCSAgICB7Ci0JICAgIHByaW8gPSBzcnZyOwotCSAgICBhbGxvdyA9IGNsbnQ7Ci0JICAgIH0KKwkJeworCQlwcmlvID0gc3J2cjsKKwkJYWxsb3cgPSBjbG50OworCQl9CiAJZWxzZQotCSAgICB7Ci0JICAgIHByaW8gPSBjbG50OwotCSAgICBhbGxvdyA9IHNydnI7Ci0JICAgIH0KKwkJeworCQlwcmlvID0gY2xudDsKKwkJYWxsb3cgPSBzcnZyOworCQl9CiAKIAlmb3IgKGk9MDsgaTxza19TU0xfQ0lQSEVSX251bShwcmlvKTsgaSsrKQogCQl7CiAJCWM9c2tfU1NMX0NJUEhFUl92YWx1ZShwcmlvLGkpOwogCiAJCXNzbF9zZXRfY2VydF9tYXNrcyhjZXJ0LGMpOwotCQltYXNrPWNlcnQtPm1hc2s7Ci0JCWVtYXNrPWNlcnQtPmV4cG9ydF9tYXNrOworCQltYXNrX2sgPSBjZXJ0LT5tYXNrX2s7CisJCW1hc2tfYSA9IGNlcnQtPm1hc2tfYTsKKwkJZW1hc2tfayA9IGNlcnQtPmV4cG9ydF9tYXNrX2s7CisJCWVtYXNrX2EgPSBjZXJ0LT5leHBvcnRfbWFza19hOwogCQkJCiAjaWZkZWYgS1NTTF9ERUJVRwotCQlwcmludGYoInNzbDNfY2hvb3NlX2NpcGhlciAlZCBhbGc9ICVseFxuIiwgaSxjLT5hbGdvcml0aG1zKTsKKy8qCQlwcmludGYoInNzbDNfY2hvb3NlX2NpcGhlciAlZCBhbGc9ICVseFxuIiwgaSxjLT5hbGdvcml0aG1zKTsqLwogI2VuZGlmICAgIC8qIEtTU0xfREVCVUcgKi8KIAotCQlhbGc9Yy0+YWxnb3JpdGhtcyYoU1NMX01LRVlfTUFTS3xTU0xfQVVUSF9NQVNLKTsKKwkJYWxnX2s9Yy0+YWxnb3JpdGhtX21rZXk7CisJCWFsZ19hPWMtPmFsZ29yaXRobV9hdXRoOworCiAjaWZuZGVmIE9QRU5TU0xfTk9fS1JCNQotICAgICAgICAgICAgICAgIGlmIChhbGcgJiBTU0xfS1JCNSkgCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFrc3NsX2tleXRhYl9pc19hdmFpbGFibGUocy0+a3NzbF9jdHgpICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkJaWYgKGFsZ19rICYgU1NMX2tLUkI1KQorCQkJeworCQkJaWYgKCAha3NzbF9rZXl0YWJfaXNfYXZhaWxhYmxlKHMtPmtzc2xfY3R4KSApCisJCQkgICAgY29udGludWU7CisJCQl9CiAjZW5kaWYgLyogT1BFTlNTTF9OT19LUkI1ICovCisjaWZuZGVmIE9QRU5TU0xfTk9fUFNLCisJCS8qIHdpdGggUFNLIHRoZXJlIG11c3QgYmUgc2VydmVyIGNhbGxiYWNrIHNldCAqLworCQlpZiAoKGFsZ19rICYgU1NMX2tQU0spICYmIHMtPnBza19zZXJ2ZXJfY2FsbGJhY2sgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworI2VuZGlmIC8qIE9QRU5TU0xfTk9fUFNLICovCisKIAkJaWYgKFNTTF9DX0lTX0VYUE9SVChjKSkKIAkJCXsKLQkJCW9rPSgoYWxnICYgZW1hc2spID09IGFsZyk/MTowOworCQkJb2sgPSAoYWxnX2sgJiBlbWFza19rKSAmJiAoYWxnX2EgJiBlbWFza19hKTsKICNpZmRlZiBDSVBIRVJfREVCVUcKLQkJCXByaW50ZigiJWQ6WyUwOGxYOiUwOGxYXSVwOiVzIChleHBvcnQpXG4iLG9rLGFsZyxlbWFzaywKLQkJCSAgICAgICBjLGMtPm5hbWUpOworCQkJcHJpbnRmKCIlZDpbJTA4bFg6JTA4bFg6JTA4bFg6JTA4bFhdJXA6JXMgKGV4cG9ydClcbiIsb2ssYWxnX2ssYWxnX2EsZW1hc2tfayxlbWFza19hLAorCQkJICAgICAgICh2b2lkICopYyxjLT5uYW1lKTsKICNlbmRpZgogCQkJfQogCQllbHNlCiAJCQl7Ci0JCQlvaz0oKGFsZyAmIG1hc2spID09IGFsZyk/MTowOworCQkJb2sgPSAoYWxnX2sgJiBtYXNrX2spICYmIChhbGdfYSAmIG1hc2tfYSk7CiAjaWZkZWYgQ0lQSEVSX0RFQlVHCi0JCQlwcmludGYoIiVkOlslMDhsWDolMDhsWF0lcDolc1xuIixvayxhbGcsbWFzayxjLAorCQkJcHJpbnRmKCIlZDpbJTA4bFg6JTA4bFg6JTA4bFg6JTA4bFhdJXA6JXNcbiIsb2ssYWxnX2ssYWxnX2EsbWFza19rLG1hc2tfYSwodm9pZCAqKWMsCiAJCQkgICAgICAgYy0+bmFtZSk7CiAjZW5kaWYKIAkJCX0KIAotCQlpZiAoIW9rKSBjb250aW51ZTsKLQkJaj1za19TU0xfQ0lQSEVSX2ZpbmQoYWxsb3csYyk7Ci0JCWlmIChqID49IDApCisjaWZuZGVmIE9QRU5TU0xfTk9fVExTRVhUCisjaWZuZGVmIE9QRU5TU0xfTk9fRUMKKwkJaWYgKAorCQkJLyogaWYgd2UgYXJlIGNvbnNpZGVyaW5nIGFuIEVDQyBjaXBoZXIgc3VpdGUgdGhhdCB1c2VzIG91ciBjZXJ0aWZpY2F0ZSAqLworCQkJKGFsZ19hICYgU1NMX2FFQ0RTQSB8fCBhbGdfYSAmIFNTTF9hRUNESCkKKwkJCS8qIGFuZCB3ZSBoYXZlIGFuIEVDQyBjZXJ0aWZpY2F0ZSAqLworCQkJJiYgKHMtPmNlcnQtPnBrZXlzW1NTTF9QS0VZX0VDQ10ueDUwOSAhPSBOVUxMKQorCQkJLyogYW5kIHRoZSBjbGllbnQgc3BlY2lmaWVkIGEgU3VwcG9ydGVkIFBvaW50IEZvcm1hdHMgZXh0ZW5zaW9uICovCisJCQkmJiAoKHMtPnNlc3Npb24tPnRsc2V4dF9lY3BvaW50Zm9ybWF0bGlzdF9sZW5ndGggPiAwKSAmJiAocy0+c2Vzc2lvbi0+dGxzZXh0X2VjcG9pbnRmb3JtYXRsaXN0ICE9IE5VTEwpKQorCQkJLyogYW5kIG91ciBjZXJ0aWZpY2F0ZSdzIHBvaW50IGlzIGNvbXByZXNzZWQgKi8KKwkJCSYmICgKKwkJCQkocy0+Y2VydC0+cGtleXNbU1NMX1BLRVlfRUNDXS54NTA5LT5jZXJ0X2luZm8gIT0gTlVMTCkKKwkJCQkmJiAocy0+Y2VydC0+cGtleXNbU1NMX1BLRVlfRUNDXS54NTA5LT5jZXJ0X2luZm8tPmtleSAhPSBOVUxMKQorCQkJCSYmIChzLT5jZXJ0LT5wa2V5c1tTU0xfUEtFWV9FQ0NdLng1MDktPmNlcnRfaW5mby0+a2V5LT5wdWJsaWNfa2V5ICE9IE5VTEwpCisJCQkJJiYgKHMtPmNlcnQtPnBrZXlzW1NTTF9QS0VZX0VDQ10ueDUwOS0+Y2VydF9pbmZvLT5rZXktPnB1YmxpY19rZXktPmRhdGEgIT0gTlVMTCkKKwkJCQkmJiAoCisJCQkJCSgqKHMtPmNlcnQtPnBrZXlzW1NTTF9QS0VZX0VDQ10ueDUwOS0+Y2VydF9pbmZvLT5rZXktPnB1YmxpY19rZXktPmRhdGEpID09IFBPSU5UX0NPTlZFUlNJT05fQ09NUFJFU1NFRCkKKwkJCQkJfHwgKCoocy0+Y2VydC0+cGtleXNbU1NMX1BLRVlfRUNDXS54NTA5LT5jZXJ0X2luZm8tPmtleS0+cHVibGljX2tleS0+ZGF0YSkgPT0gUE9JTlRfQ09OVkVSU0lPTl9DT01QUkVTU0VEICsgMSkKKwkJCQkJKQorCQkJCSkKKwkJKQogCQkJewotCQkJcmV0PXNrX1NTTF9DSVBIRVJfdmFsdWUoYWxsb3csaik7CisJCQllY19vayA9IDA7CisJCQkvKiBpZiBvdXIgY2VydGlmaWNhdGUncyBjdXJ2ZSBpcyBvdmVyIGEgZmllbGQgdHlwZSB0aGF0IHRoZSBjbGllbnQgZG9lcyBub3Qgc3VwcG9ydAorCQkJICogdGhlbiBkbyBub3QgYWxsb3cgdGhpcyBjaXBoZXIgc3VpdGUgdG8gYmUgbmVnb3RpYXRlZCAqLworCQkJaWYgKAorCQkJCShzLT5jZXJ0LT5wa2V5c1tTU0xfUEtFWV9FQ0NdLnByaXZhdGVrZXktPnBrZXkuZWMgIT0gTlVMTCkKKwkJCQkmJiAocy0+Y2VydC0+cGtleXNbU1NMX1BLRVlfRUNDXS5wcml2YXRla2V5LT5wa2V5LmVjLT5ncm91cCAhPSBOVUxMKQorCQkJCSYmIChzLT5jZXJ0LT5wa2V5c1tTU0xfUEtFWV9FQ0NdLnByaXZhdGVrZXktPnBrZXkuZWMtPmdyb3VwLT5tZXRoICE9IE5VTEwpCisJCQkJJiYgKEVDX01FVEhPRF9nZXRfZmllbGRfdHlwZShzLT5jZXJ0LT5wa2V5c1tTU0xfUEtFWV9FQ0NdLnByaXZhdGVrZXktPnBrZXkuZWMtPmdyb3VwLT5tZXRoKSA9PSBOSURfWDlfNjJfcHJpbWVfZmllbGQpCisJCQkpCisJCQkJeworCQkJCWZvciAoaiA9IDA7IGogPCBzLT5zZXNzaW9uLT50bHNleHRfZWNwb2ludGZvcm1hdGxpc3RfbGVuZ3RoOyBqKyspCisJCQkJCXsKKwkJCQkJaWYgKHMtPnNlc3Npb24tPnRsc2V4dF9lY3BvaW50Zm9ybWF0bGlzdFtqXSA9PSBUTFNFWFRfRUNQT0lOVEZPUk1BVF9hbnNpWDk2Ml9jb21wcmVzc2VkX3ByaW1lKQorCQkJCQkJeworCQkJCQkJZWNfb2sgPSAxOworCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQllbHNlIGlmIChFQ19NRVRIT0RfZ2V0X2ZpZWxkX3R5cGUocy0+Y2VydC0+cGtleXNbU1NMX1BLRVlfRUNDXS5wcml2YXRla2V5LT5wa2V5LmVjLT5ncm91cC0+bWV0aCkgPT0gTklEX1g5XzYyX2NoYXJhY3RlcmlzdGljX3R3b19maWVsZCkKKwkJCQl7CisJCQkJZm9yIChqID0gMDsgaiA8IHMtPnNlc3Npb24tPnRsc2V4dF9lY3BvaW50Zm9ybWF0bGlzdF9sZW5ndGg7IGorKykKKwkJCQkJeworCQkJCQlpZiAocy0+c2Vzc2lvbi0+dGxzZXh0X2VjcG9pbnRmb3JtYXRsaXN0W2pdID09IFRMU0VYVF9FQ1BPSU5URk9STUFUX2Fuc2lYOTYyX2NvbXByZXNzZWRfY2hhcjIpCisJCQkJCQl7CisJCQkJCQllY19vayA9IDE7CisJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCW9rID0gb2sgJiYgZWNfb2s7CisJCQl9CisJCWlmICgKKwkJCS8qIGlmIHdlIGFyZSBjb25zaWRlcmluZyBhbiBFQ0MgY2lwaGVyIHN1aXRlIHRoYXQgdXNlcyBvdXIgY2VydGlmaWNhdGUgKi8KKwkJCShhbGdfYSAmIFNTTF9hRUNEU0EgfHwgYWxnX2EgJiBTU0xfYUVDREgpCisJCQkvKiBhbmQgd2UgaGF2ZSBhbiBFQ0MgY2VydGlmaWNhdGUgKi8KKwkJCSYmIChzLT5jZXJ0LT5wa2V5c1tTU0xfUEtFWV9FQ0NdLng1MDkgIT0gTlVMTCkKKwkJCS8qIGFuZCB0aGUgY2xpZW50IHNwZWNpZmllZCBhbiBFbGxpcHRpY0N1cnZlcyBleHRlbnNpb24gKi8KKwkJCSYmICgocy0+c2Vzc2lvbi0+dGxzZXh0X2VsbGlwdGljY3VydmVsaXN0X2xlbmd0aCA+IDApICYmIChzLT5zZXNzaW9uLT50bHNleHRfZWxsaXB0aWNjdXJ2ZWxpc3QgIT0gTlVMTCkpCisJCSkKKwkJCXsKKwkJCWVjX29rID0gMDsKKwkJCWlmICgKKwkJCQkocy0+Y2VydC0+cGtleXNbU1NMX1BLRVlfRUNDXS5wcml2YXRla2V5LT5wa2V5LmVjICE9IE5VTEwpCisJCQkJJiYgKHMtPmNlcnQtPnBrZXlzW1NTTF9QS0VZX0VDQ10ucHJpdmF0ZWtleS0+cGtleS5lYy0+Z3JvdXAgIT0gTlVMTCkKKwkJCSkKKwkJCQl7CisJCQkJZWNfbmlkID0gRUNfR1JPVVBfZ2V0X2N1cnZlX25hbWUocy0+Y2VydC0+cGtleXNbU1NMX1BLRVlfRUNDXS5wcml2YXRla2V5LT5wa2V5LmVjLT5ncm91cCk7CisJCQkJaWYgKChlY19uaWQgPT0gMCkKKwkJCQkJJiYgKHMtPmNlcnQtPnBrZXlzW1NTTF9QS0VZX0VDQ10ucHJpdmF0ZWtleS0+cGtleS5lYy0+Z3JvdXAtPm1ldGggIT0gTlVMTCkKKwkJCQkpCisJCQkJCXsKKwkJCQkJaWYgKEVDX01FVEhPRF9nZXRfZmllbGRfdHlwZShzLT5jZXJ0LT5wa2V5c1tTU0xfUEtFWV9FQ0NdLnByaXZhdGVrZXktPnBrZXkuZWMtPmdyb3VwLT5tZXRoKSA9PSBOSURfWDlfNjJfcHJpbWVfZmllbGQpCisJCQkJCQl7CisJCQkJCQllY19zZWFyY2gxID0gMHhGRjsKKwkJCQkJCWVjX3NlYXJjaDIgPSAweDAxOworCQkJCQkJfQorCQkJCQllbHNlIGlmIChFQ19NRVRIT0RfZ2V0X2ZpZWxkX3R5cGUocy0+Y2VydC0+cGtleXNbU1NMX1BLRVlfRUNDXS5wcml2YXRla2V5LT5wa2V5LmVjLT5ncm91cC0+bWV0aCkgPT0gTklEX1g5XzYyX2NoYXJhY3RlcmlzdGljX3R3b19maWVsZCkKKwkJCQkJCXsKKwkJCQkJCWVjX3NlYXJjaDEgPSAweEZGOworCQkJCQkJZWNfc2VhcmNoMiA9IDB4MDI7CisJCQkJCQl9CisJCQkJCX0KKwkJCQllbHNlCisJCQkJCXsKKwkJCQkJZWNfc2VhcmNoMSA9IDB4MDA7CisJCQkJCWVjX3NlYXJjaDIgPSB0bHMxX2VjX25pZDJjdXJ2ZV9pZChlY19uaWQpOworCQkJCQl9CisJCQkJaWYgKChlY19zZWFyY2gxICE9IDApIHx8IChlY19zZWFyY2gyICE9IDApKQorCQkJCQl7CisJCQkJCWZvciAoaiA9IDA7IGogPCBzLT5zZXNzaW9uLT50bHNleHRfZWxsaXB0aWNjdXJ2ZWxpc3RfbGVuZ3RoIC8gMjsgaisrKQorCQkJCQkJeworCQkJCQkJaWYgKChzLT5zZXNzaW9uLT50bHNleHRfZWxsaXB0aWNjdXJ2ZWxpc3RbMipqXSA9PSBlY19zZWFyY2gxKSAmJiAocy0+c2Vzc2lvbi0+dGxzZXh0X2VsbGlwdGljY3VydmVsaXN0WzIqaisxXSA9PSBlY19zZWFyY2gyKSkKKwkJCQkJCQl7CisJCQkJCQkJZWNfb2sgPSAxOworCQkJCQkJCWJyZWFrOworCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCW9rID0gb2sgJiYgZWNfb2s7CisJCQl9CisJCWlmICgKKwkJCS8qIGlmIHdlIGFyZSBjb25zaWRlcmluZyBhbiBFQ0MgY2lwaGVyIHN1aXRlIHRoYXQgdXNlcyBhbiBlcGhlbWVyYWwgRUMga2V5ICovCisJCQkoYWxnX2sgJiBTU0xfa0VFQ0RIKQorCQkJLyogYW5kIHdlIGhhdmUgYW4gZXBoZW1lcmFsIEVDIGtleSAqLworCQkJJiYgKHMtPmNlcnQtPmVjZGhfdG1wICE9IE5VTEwpCisJCQkvKiBhbmQgdGhlIGNsaWVudCBzcGVjaWZpZWQgYW4gRWxsaXB0aWNDdXJ2ZXMgZXh0ZW5zaW9uICovCisJCQkmJiAoKHMtPnNlc3Npb24tPnRsc2V4dF9lbGxpcHRpY2N1cnZlbGlzdF9sZW5ndGggPiAwKSAmJiAocy0+c2Vzc2lvbi0+dGxzZXh0X2VsbGlwdGljY3VydmVsaXN0ICE9IE5VTEwpKQorCQkpCisJCQl7CisJCQllY19vayA9IDA7CisJCQlpZiAocy0+Y2VydC0+ZWNkaF90bXAtPmdyb3VwICE9IE5VTEwpCisJCQkJeworCQkJCWVjX25pZCA9IEVDX0dST1VQX2dldF9jdXJ2ZV9uYW1lKHMtPmNlcnQtPmVjZGhfdG1wLT5ncm91cCk7CisJCQkJaWYgKChlY19uaWQgPT0gMCkKKwkJCQkJJiYgKHMtPmNlcnQtPmVjZGhfdG1wLT5ncm91cC0+bWV0aCAhPSBOVUxMKQorCQkJCSkKKwkJCQkJeworCQkJCQlpZiAoRUNfTUVUSE9EX2dldF9maWVsZF90eXBlKHMtPmNlcnQtPmVjZGhfdG1wLT5ncm91cC0+bWV0aCkgPT0gTklEX1g5XzYyX3ByaW1lX2ZpZWxkKQorCQkJCQkJeworCQkJCQkJZWNfc2VhcmNoMSA9IDB4RkY7CisJCQkJCQllY19zZWFyY2gyID0gMHgwMTsKKwkJCQkJCX0KKwkJCQkJZWxzZSBpZiAoRUNfTUVUSE9EX2dldF9maWVsZF90eXBlKHMtPmNlcnQtPmVjZGhfdG1wLT5ncm91cC0+bWV0aCkgPT0gTklEX1g5XzYyX2NoYXJhY3RlcmlzdGljX3R3b19maWVsZCkKKwkJCQkJCXsKKwkJCQkJCWVjX3NlYXJjaDEgPSAweEZGOworCQkJCQkJZWNfc2VhcmNoMiA9IDB4MDI7CisJCQkJCQl9CisJCQkJCX0KKwkJCQllbHNlCisJCQkJCXsKKwkJCQkJZWNfc2VhcmNoMSA9IDB4MDA7CisJCQkJCWVjX3NlYXJjaDIgPSB0bHMxX2VjX25pZDJjdXJ2ZV9pZChlY19uaWQpOworCQkJCQl9CisJCQkJaWYgKChlY19zZWFyY2gxICE9IDApIHx8IChlY19zZWFyY2gyICE9IDApKQorCQkJCQl7CisJCQkJCWZvciAoaiA9IDA7IGogPCBzLT5zZXNzaW9uLT50bHNleHRfZWxsaXB0aWNjdXJ2ZWxpc3RfbGVuZ3RoIC8gMjsgaisrKQorCQkJCQkJeworCQkJCQkJaWYgKChzLT5zZXNzaW9uLT50bHNleHRfZWxsaXB0aWNjdXJ2ZWxpc3RbMipqXSA9PSBlY19zZWFyY2gxKSAmJiAocy0+c2Vzc2lvbi0+dGxzZXh0X2VsbGlwdGljY3VydmVsaXN0WzIqaisxXSA9PSBlY19zZWFyY2gyKSkKKwkJCQkJCQl7CisJCQkJCQkJZWNfb2sgPSAxOworCQkJCQkJCWJyZWFrOworCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCW9rID0gb2sgJiYgZWNfb2s7CisJCQl9CisjZW5kaWYgLyogT1BFTlNTTF9OT19FQyAqLworI2VuZGlmIC8qIE9QRU5TU0xfTk9fVExTRVhUICovCisKKwkJaWYgKCFvaykgY29udGludWU7CisJCWlpPXNrX1NTTF9DSVBIRVJfZmluZChhbGxvdyxjKTsKKwkJaWYgKGlpID49IDApCisJCQl7CisJCQlyZXQ9c2tfU1NMX0NJUEhFUl92YWx1ZShhbGxvdyxpaSk7CiAJCQlicmVhazsKIAkJCX0KIAkJfQpAQCAtMjQwMiwxMiArMzA4NCwyNCBAQAogaW50IHNzbDNfZ2V0X3JlcV9jZXJ0X3R5cGUoU1NMICpzLCB1bnNpZ25lZCBjaGFyICpwKQogCXsKIAlpbnQgcmV0PTA7Ci0JdW5zaWduZWQgbG9uZyBhbGc7CisJdW5zaWduZWQgbG9uZyBhbGdfazsKIAotCWFsZz1zLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobXM7CisJYWxnX2sgPSBzLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobV9ta2V5OworCisjaWZuZGVmIE9QRU5TU0xfTk9fR09TVAorCWlmIChzLT52ZXJzaW9uID49IFRMUzFfVkVSU0lPTikKKwkJeworCQlpZiAoYWxnX2sgJiBTU0xfa0dPU1QpCisJCQl7CisJCQlwW3JldCsrXT1UTFNfQ1RfR09TVDk0X1NJR047CisJCQlwW3JldCsrXT1UTFNfQ1RfR09TVDAxX1NJR047CisJCQlyZXR1cm4ocmV0KTsKKwkJCX0KKwkJfQorI2VuZGlmCiAKICNpZm5kZWYgT1BFTlNTTF9OT19ESAotCWlmIChhbGcgJiAoU1NMX2tESHJ8U1NMX2tFREgpKQorCWlmIChhbGdfayAmIChTU0xfa0RIcnxTU0xfa0VESCkpCiAJCXsKICMgIGlmbmRlZiBPUEVOU1NMX05PX1JTQQogCQlwW3JldCsrXT1TU0wzX0NUX1JTQV9GSVhFRF9ESDsKQEAgLTI0MTcsNyArMzExMSw3IEBACiAjICBlbmRpZgogCQl9CiAJaWYgKChzLT52ZXJzaW9uID09IFNTTDNfVkVSU0lPTikgJiYKLQkJKGFsZyAmIChTU0xfa0VESHxTU0xfa0RIZHxTU0xfa0RIcikpKQorCQkoYWxnX2sgJiAoU1NMX2tFREh8U1NMX2tESGR8U1NMX2tESHIpKSkKIAkJewogIyAgaWZuZGVmIE9QRU5TU0xfTk9fUlNBCiAJCXBbcmV0KytdPVNTTDNfQ1RfUlNBX0VQSEVNRVJBTF9ESDsKQEAgLTI0MzQsMTAgKzMxMjgsNyBAQAogCXBbcmV0KytdPVNTTDNfQ1RfRFNTX1NJR047CiAjZW5kaWYKICNpZm5kZWYgT1BFTlNTTF9OT19FQ0RICi0JLyogV2Ugc2hvdWxkIGFzayBmb3IgZml4ZWQgRUNESCBjZXJ0aWZpY2F0ZXMgb25seQotCSAqIGZvciBTU0xfa0VDREggKGFuZCBub3QgU1NMX2tFQ0RIRSkKLQkgKi8KLQlpZiAoKGFsZyAmIFNTTF9rRUNESCkgJiYgKHMtPnZlcnNpb24gPj0gVExTMV9WRVJTSU9OKSkKKwlpZiAoKGFsZ19rICYgKFNTTF9rRUNESHJ8U1NMX2tFQ0RIZSkpICYmIChzLT52ZXJzaW9uID49IFRMUzFfVkVSU0lPTikpCiAJCXsKIAkJcFtyZXQrK109VExTX0NUX1JTQV9GSVhFRF9FQ0RIOwogCQlwW3JldCsrXT1UTFNfQ1RfRUNEU0FfRklYRURfRUNESDsKQEAgLTI0NDYsNyArMzEzNyw3IEBACiAKICNpZm5kZWYgT1BFTlNTTF9OT19FQ0RTQQogCS8qIEVDRFNBIGNlcnRzIGNhbiBiZSB1c2VkIHdpdGggUlNBIGNpcGhlciBzdWl0ZXMgYXMgd2VsbCAKLQkgKiBzbyB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIGZvciBTU0xfa0VDREggb3IgU1NMX2tFQ0RIRQorCSAqIHNvIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgZm9yIFNTTF9rRUNESCBvciBTU0xfa0VFQ0RICiAJICovCiAJaWYgKHMtPnZlcnNpb24gPj0gVExTMV9WRVJTSU9OKQogCQl7CmRpZmYgLS1naXQgYS9zc2wvczNfbWV0aC5jIGIvc3NsL3MzX21ldGguYwppbmRleCA2YTZlYjFjLi5jZGRkYjE3IDEwMDY0NAotLS0gYS9zc2wvczNfbWV0aC5jCisrKyBiL3NzbC9zM19tZXRoLmMKQEAgLTYwLDggKzYwLDggQEAKICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KICNpbmNsdWRlICJzc2xfbG9jbC5oIgogCi1zdGF0aWMgU1NMX01FVEhPRCAqc3NsM19nZXRfbWV0aG9kKGludCB2ZXIpOwotc3RhdGljIFNTTF9NRVRIT0QgKnNzbDNfZ2V0X21ldGhvZChpbnQgdmVyKQorc3RhdGljIGNvbnN0IFNTTF9NRVRIT0QgKnNzbDNfZ2V0X21ldGhvZChpbnQgdmVyKTsKK3N0YXRpYyBjb25zdCBTU0xfTUVUSE9EICpzc2wzX2dldF9tZXRob2QoaW50IHZlcikKIAl7CiAJaWYgKHZlciA9PSBTU0wzX1ZFUlNJT04pCiAJCXJldHVybihTU0x2M19tZXRob2QoKSk7CkBAIC03MCw4ICs3MCw4IEBACiAJfQogCiBJTVBMRU1FTlRfc3NsM19tZXRoX2Z1bmMoU1NMdjNfbWV0aG9kLAotCQkJc3NsM19hY2NlcHQsCi0JCQlzc2wzX2Nvbm5lY3QsCi0JCQlzc2wzX2dldF9tZXRob2QpCisJCQkgc3NsM19hY2NlcHQsCisJCQkgc3NsM19jb25uZWN0LAorCQkJIHNzbDNfZ2V0X21ldGhvZCkKIAogCmRpZmYgLS1naXQgYS9zc2wvczNfcGt0LmMgYi9zc2wvczNfcGt0LmMKaW5kZXggNDYzNGIyOS4uOWVhYWFkOCAxMDA2NDQKLS0tIGEvc3NsL3MzX3BrdC5jCisrKyBiL3NzbC9zM19wa3QuYwpAQCAtMTI5LDE0ICsxMjksNDkgQEAKIAkgKiAoSWYgcy0+cmVhZF9haGVhZCBpcyBzZXQsICdtYXgnIGJ5dGVzIG1heSBiZSBzdG9yZWQgaW4gcmJ1ZgogCSAqIFtwbHVzIHMtPnBhY2tldF9sZW5ndGggYnl0ZXMgaWYgZXh0ZW5kID09IDFdLikKIAkgKi8KLQlpbnQgaSxvZmYsbmV3YjsKKwlpbnQgaSxsZW4sbGVmdDsKKwlsb25nIGFsaWduPTA7CisJdW5zaWduZWQgY2hhciAqcGt0OworCVNTTDNfQlVGRkVSICpyYjsKKworCWlmIChuIDw9IDApIHJldHVybiBuOworCisJcmIgICAgPSAmKHMtPnMzLT5yYnVmKTsKKwlpZiAocmItPmJ1ZiA9PSBOVUxMKQorCQlpZiAoIXNzbDNfc2V0dXBfcmVhZF9idWZmZXIocykpCisJCQlyZXR1cm4gLTE7CisKKwlsZWZ0ICA9IHJiLT5sZWZ0OworI2lmIGRlZmluZWQoU1NMM19BTElHTl9QQVlMT0FEKSAmJiBTU0wzX0FMSUdOX1BBWUxPQUQhPTAKKwlhbGlnbiA9IChsb25nKXJiLT5idWYgKyBTU0wzX1JUX0hFQURFUl9MRU5HVEg7CisJYWxpZ24gPSAoLWFsaWduKSYoU1NMM19BTElHTl9QQVlMT0FELTEpOworI2VuZGlmCiAKIAlpZiAoIWV4dGVuZCkKIAkJewogCQkvKiBzdGFydCB3aXRoIGVtcHR5IHBhY2tldCAuLi4gKi8KLQkJaWYgKHMtPnMzLT5yYnVmLmxlZnQgPT0gMCkKLQkJCXMtPnMzLT5yYnVmLm9mZnNldCA9IDA7Ci0JCXMtPnBhY2tldCA9IHMtPnMzLT5yYnVmLmJ1ZiArIHMtPnMzLT5yYnVmLm9mZnNldDsKKwkJaWYgKGxlZnQgPT0gMCkKKwkJCXJiLT5vZmZzZXQgPSBhbGlnbjsKKwkJZWxzZSBpZiAoYWxpZ24gIT0gMCAmJiBsZWZ0ID49IFNTTDNfUlRfSEVBREVSX0xFTkdUSCkKKwkJCXsKKwkJCS8qIGNoZWNrIGlmIG5leHQgcGFja2V0IGxlbmd0aCBpcyBsYXJnZQorCQkJICogZW5vdWdoIHRvIGp1c3RpZnkgcGF5bG9hZCBhbGlnbm1lbnQuLi4gKi8KKwkJCXBrdCA9IHJiLT5idWYgKyByYi0+b2Zmc2V0OworCQkJaWYgKHBrdFswXSA9PSBTU0wzX1JUX0FQUExJQ0FUSU9OX0RBVEEKKwkJCSAgICAmJiAocGt0WzNdPDw4fHBrdFs0XSkgPj0gMTI4KQorCQkJCXsKKwkJCQkvKiBOb3RlIHRoYXQgZXZlbiBpZiBwYWNrZXQgaXMgY29ycnVwdGVkCisJCQkJICogYW5kIGl0cyBsZW5ndGggZmllbGQgaXMgaW5zYW5lLCB3ZSBjYW4KKwkJCQkgKiBvbmx5IGJlIGxlZCB0byB3cm9uZyBkZWNpc2lvbiBhYm91dAorCQkJCSAqIHdoZXRoZXIgbWVtbW92ZSB3aWxsIG9jY3VyIG9yIG5vdC4KKwkJCQkgKiBIZWFkZXIgdmFsdWVzIGhhcyBubyBlZmZlY3Qgb24gbWVtbW92ZQorCQkJCSAqIGFyZ3VtZW50cyBhbmQgdGhlcmVmb3JlIG5vIGJ1ZmZlcgorCQkJCSAqIG92ZXJydW4gY2FuIGJlIHRyaWdnZXJlZC4gKi8KKwkJCQltZW1tb3ZlIChyYi0+YnVmK2FsaWduLHBrdCxsZWZ0KTsKKwkJCQlyYi0+b2Zmc2V0ID0gYWxpZ247CisJCQkJfQorCQkJfQorCQlzLT5wYWNrZXQgPSByYi0+YnVmICsgcmItPm9mZnNldDsKIAkJcy0+cGFja2V0X2xlbmd0aCA9IDA7CiAJCS8qIC4uLiBub3cgd2UgY2FuIGFjdCBhcyBpZiAnZXh0ZW5kJyB3YXMgc2V0ICovCiAJCX0KQEAgLTE0NCw1OSArMTc5LDYzIEBACiAJLyogRm9yIERUTFMvVURQIHJlYWRzIHNob3VsZCBub3Qgc3BhbiBtdWx0aXBsZSBwYWNrZXRzCiAJICogYmVjYXVzZSB0aGUgcmVhZCBvcGVyYXRpb24gcmV0dXJucyB0aGUgd2hvbGUgcGFja2V0CiAJICogYXQgb25jZSAoYXMgbG9uZyBhcyBpdCBmaXRzIGludG8gdGhlIGJ1ZmZlcikuICovCi0JaWYgKFNTTF92ZXJzaW9uKHMpID09IERUTFMxX1ZFUlNJT04pCisJaWYgKFNTTF92ZXJzaW9uKHMpID09IERUTFMxX1ZFUlNJT04gfHwgU1NMX3ZlcnNpb24ocykgPT0gRFRMUzFfQkFEX1ZFUikKIAkJewotCQlpZiAoIHMtPnMzLT5yYnVmLmxlZnQgPiAwICYmIG4gPiBzLT5zMy0+cmJ1Zi5sZWZ0KQotCQkJbiA9IHMtPnMzLT5yYnVmLmxlZnQ7CisJCWlmIChsZWZ0ID4gMCAmJiBuID4gbGVmdCkKKwkJCW4gPSBsZWZ0OwogCQl9CiAKIAkvKiBpZiB0aGVyZSBpcyBlbm91Z2ggaW4gdGhlIGJ1ZmZlciBmcm9tIGEgcHJldmlvdXMgcmVhZCwgdGFrZSBzb21lICovCi0JaWYgKHMtPnMzLT5yYnVmLmxlZnQgPj0gKGludCluKQorCWlmIChsZWZ0ID49IG4pCiAJCXsKIAkJcy0+cGFja2V0X2xlbmd0aCs9bjsKLQkJcy0+czMtPnJidWYubGVmdC09bjsKLQkJcy0+czMtPnJidWYub2Zmc2V0Kz1uOworCQlyYi0+bGVmdD1sZWZ0LW47CisJCXJiLT5vZmZzZXQrPW47CiAJCXJldHVybihuKTsKIAkJfQogCiAJLyogZWxzZSB3ZSBuZWVkIHRvIHJlYWQgbW9yZSBkYXRhICovCi0JaWYgKCFzLT5yZWFkX2FoZWFkKQotCQltYXg9bjsKIAotCXsKLQkJLyogYXZvaWQgYnVmZmVyIG92ZXJmbG93ICovCi0JCWludCBtYXhfbWF4ID0gcy0+czMtPnJidWYubGVuIC0gcy0+cGFja2V0X2xlbmd0aDsKLQkJaWYgKG1heCA+IG1heF9tYXgpCi0JCQltYXggPSBtYXhfbWF4OwotCX0KLQlpZiAobiA+IG1heCkgLyogZG9lcyBub3QgaGFwcGVuICovCisJbGVuID0gcy0+cGFja2V0X2xlbmd0aDsKKwlwa3QgPSByYi0+YnVmK2FsaWduOworCS8qIE1vdmUgYW55IGF2YWlsYWJsZSBieXRlcyB0byBmcm9udCBvZiBidWZmZXI6CisJICogJ2xlbicgYnl0ZXMgYWxyZWFkeSBwb2ludGVkIHRvIGJ5ICdwYWNrZXQnLAorCSAqICdsZWZ0JyBleHRyYSBvbmVzIGF0IHRoZSBlbmQgKi8KKwlpZiAocy0+cGFja2V0ICE9IHBrdCkgLyogbGVuID4gMCAqLworCQl7CisJCW1lbW1vdmUocGt0LCBzLT5wYWNrZXQsIGxlbitsZWZ0KTsKKwkJcy0+cGFja2V0ID0gcGt0OworCQlyYi0+b2Zmc2V0ID0gbGVuICsgYWxpZ247CisJCX0KKworCWlmIChuID4gKGludCkocmItPmxlbiAtIHJiLT5vZmZzZXQpKSAvKiBkb2VzIG5vdCBoYXBwZW4gKi8KIAkJewogCQlTU0xlcnIoU1NMX0ZfU1NMM19SRUFEX04sRVJSX1JfSU5URVJOQUxfRVJST1IpOwogCQlyZXR1cm4gLTE7CiAJCX0KIAotCW9mZiA9IHMtPnBhY2tldF9sZW5ndGg7Ci0JbmV3YiA9IHMtPnMzLT5yYnVmLmxlZnQ7Ci0JLyogTW92ZSBhbnkgYXZhaWxhYmxlIGJ5dGVzIHRvIGZyb250IG9mIGJ1ZmZlcjoKLQkgKiAnb2ZmJyBieXRlcyBhbHJlYWR5IHBvaW50ZWQgdG8gYnkgJ3BhY2tldCcsCi0JICogJ25ld2InIGV4dHJhIG9uZXMgYXQgdGhlIGVuZCAqLwotCWlmIChzLT5wYWNrZXQgIT0gcy0+czMtPnJidWYuYnVmKQorCWlmICghcy0+cmVhZF9haGVhZCkKKwkJLyogaWdub3JlIG1heCBwYXJhbWV0ZXIgKi8KKwkJbWF4ID0gbjsKKwllbHNlCiAJCXsKLQkJLyogIG9mZiA+IDAgKi8KLQkJbWVtbW92ZShzLT5zMy0+cmJ1Zi5idWYsIHMtPnBhY2tldCwgb2ZmK25ld2IpOwotCQlzLT5wYWNrZXQgPSBzLT5zMy0+cmJ1Zi5idWY7CisJCWlmIChtYXggPCBuKQorCQkJbWF4ID0gbjsKKwkJaWYgKG1heCA+IChpbnQpKHJiLT5sZW4gLSByYi0+b2Zmc2V0KSkKKwkJCW1heCA9IHJiLT5sZW4gLSByYi0+b2Zmc2V0OwogCQl9CiAKLQl3aGlsZSAobmV3YiA8IG4pCisJd2hpbGUgKGxlZnQgPCBuKQogCQl7Ci0JCS8qIE5vdyB3ZSBoYXZlIG9mZituZXdiIGJ5dGVzIGF0IHRoZSBmcm9udCBvZiBzLT5zMy0+cmJ1Zi5idWYgYW5kIG5lZWQKLQkJICogdG8gcmVhZCBpbiBtb3JlIHVudGlsIHdlIGhhdmUgb2ZmK24gKHVwIHRvIG9mZittYXggaWYgcG9zc2libGUpICovCisJCS8qIE5vdyB3ZSBoYXZlIGxlbitsZWZ0IGJ5dGVzIGF0IHRoZSBmcm9udCBvZiBzLT5zMy0+cmJ1Zi5idWYKKwkJICogYW5kIG5lZWQgdG8gcmVhZCBpbiBtb3JlIHVudGlsIHdlIGhhdmUgbGVuK24gKHVwIHRvCisJCSAqIGxlbittYXggaWYgcG9zc2libGUpICovCiAKIAkJY2xlYXJfc3lzX2Vycm9yKCk7CiAJCWlmIChzLT5yYmlvICE9IE5VTEwpCiAJCQl7CiAJCQlzLT5yd3N0YXRlPVNTTF9SRUFESU5HOwotCQkJaT1CSU9fcmVhZChzLT5yYmlvLAkmKHMtPnMzLT5yYnVmLmJ1ZltvZmYrbmV3Yl0pLCBtYXgtbmV3Yik7CisJCQlpPUJJT19yZWFkKHMtPnJiaW8scGt0K2xlbitsZWZ0LCBtYXgtbGVmdCk7CiAJCQl9CiAJCWVsc2UKIAkJCXsKQEAgLTIwNiwyMyArMjQ1LDI2IEBACiAKIAkJaWYgKGkgPD0gMCkKIAkJCXsKLQkJCXMtPnMzLT5yYnVmLmxlZnQgPSBuZXdiOworCQkJcmItPmxlZnQgPSBsZWZ0OworCQkJaWYgKHMtPm1vZGUgJiBTU0xfTU9ERV9SRUxFQVNFX0JVRkZFUlMpCisJCQkJaWYgKGxlbitsZWZ0ID09IDApCisJCQkJCXNzbDNfcmVsZWFzZV9yZWFkX2J1ZmZlcihzKTsKIAkJCXJldHVybihpKTsKIAkJCX0KLQkJbmV3Yis9aTsKKwkJbGVmdCs9aTsKIAkJLyogcmVhZHMgc2hvdWxkICpuZXZlciogc3BhbiBtdWx0aXBsZSBwYWNrZXRzIGZvciBEVExTIGJlY2F1c2UKIAkJICogdGhlIHVuZGVybHlpbmcgdHJhbnNwb3J0IHByb3RvY29sIGlzIG1lc3NhZ2Ugb3JpZW50ZWQgYXMgb3Bwb3NlZAogCQkgKiB0byBieXRlIG9yaWVudGVkIGFzIGluIHRoZSBUTFMgY2FzZS4gKi8KLQkJaWYgKFNTTF92ZXJzaW9uKHMpID09IERUTFMxX1ZFUlNJT04pCisJCWlmIChTU0xfdmVyc2lvbihzKSA9PSBEVExTMV9WRVJTSU9OIHx8IFNTTF92ZXJzaW9uKHMpID09IERUTFMxX0JBRF9WRVIpCiAJCQl7Ci0JCQlpZiAobiA+IG5ld2IpCi0JCQkJbiA9IG5ld2I7IC8qIG1ha2VzIHRoZSB3aGlsZSBjb25kaXRpb24gZmFsc2UgKi8KKwkJCWlmIChuID4gbGVmdCkKKwkJCQluID0gbGVmdDsgLyogbWFrZXMgdGhlIHdoaWxlIGNvbmRpdGlvbiBmYWxzZSAqLwogCQkJfQogCQl9CiAKIAkvKiBkb25lIHJlYWRpbmcsIG5vdyB0aGUgYm9vay1rZWVwaW5nICovCi0Jcy0+czMtPnJidWYub2Zmc2V0ID0gb2ZmICsgbjsKLQlzLT5zMy0+cmJ1Zi5sZWZ0ID0gbmV3YiAtIG47CisJcmItPm9mZnNldCArPSBuOworCXJiLT5sZWZ0ID0gbGVmdCAtIG47CiAJcy0+cGFja2V0X2xlbmd0aCArPSBuOwogCXMtPnJ3c3RhdGU9U1NMX05PVEhJTkc7CiAJcmV0dXJuKG4pOwpAQCAtMjQ2LDcgKzI4OCw3IEBACiAJdW5zaWduZWQgY2hhciAqcDsKIAl1bnNpZ25lZCBjaGFyIG1kW0VWUF9NQVhfTURfU0laRV07CiAJc2hvcnQgdmVyc2lvbjsKLQl1bnNpZ25lZCBpbnQgbWFjX3NpemU7CisJaW50IG1hY19zaXplOwogCWludCBjbGVhcj0wOwogCXNpemVfdCBleHRyYTsKIAlpbnQgZGVjcnlwdGlvbl9mYWlsZWRfb3JfYmFkX3JlY29yZF9tYWMgPSAwOwpAQCAtMjYwLDkgKzMwMiw5IEBACiAJZWxzZQogCQlleHRyYT0wOwogCWlmICghKFNTTF9nZXRfbW9kZShzKSAmIFNTTF9NT0RFX1NNQUxMX0JVRkZFUlMpICYmCi0JCWV4dHJhICE9IHMtPnMzLT5yYnVmLmxlbiAtIFNTTDNfUlRfTUFYX1BBQ0tFVF9TSVpFKQorCQlleHRyYSAmJiAhcy0+czMtPmluaXRfZXh0cmEpCiAJCXsKLQkJLyogYWN0dWFsbHkgbGlrZWx5IGFuIGFwcGxpY2F0aW9uIGVycm9yOiBTTFNfT1BfTUlDUk9TT0ZUX0JJR19TU0xWM19CVUZGRVIKKwkJLyogQW4gYXBwbGljYXRpb24gZXJyb3I6IFNMU19PUF9NSUNST1NPRlRfQklHX1NTTFYzX0JVRkZFUgogCQkgKiBzZXQgYWZ0ZXIgc3NsM19zZXR1cF9idWZmZXJzKCkgd2FzIGRvbmUgKi8KIAkJU1NMZXJyKFNTTF9GX1NTTDNfR0VUX1JFQ09SRCwgRVJSX1JfSU5URVJOQUxfRVJST1IpOwogCQlyZXR1cm4gLTE7CkBAIC0yODUsNiArMzI3LDkgQEAKIAkJc3NsX21pbm9yPSAqKHArKyk7CiAJCXZlcnNpb249KHNzbF9tYWpvcjw8OCl8c3NsX21pbm9yOwogCQluMnMocCxyci0+bGVuZ3RoKTsKKyNpZiAwCitmcHJpbnRmKHN0ZGVyciwgIlJlY29yZCB0eXBlPSVkLCBMZW5ndGg9JWRcbiIsIHJyLT50eXBlLCByci0+bGVuZ3RoKTsKKyNlbmRpZgogCiAJCS8qIExldHMgY2hlY2sgdmVyc2lvbiAqLwogCQlpZiAoIXMtPmZpcnN0X3BhY2tldCkKQEAgLTI5MiwxMCArMzM3LDkgQEAKIAkJCWlmICh2ZXJzaW9uICE9IHMtPnZlcnNpb24pCiAJCQkJewogCQkJCVNTTGVycihTU0xfRl9TU0wzX0dFVF9SRUNPUkQsU1NMX1JfV1JPTkdfVkVSU0lPTl9OVU1CRVIpOwotCQkJCS8qIElmIHRoZSBtYWpvciB2ZXJzaW9ucyBtYXRjaCB0aGVuIHdlJ2xsIHNlbmQKLQkJCQkgKiB0aGUgZXJyb3IgYmFjayB1c2luZyB0aGUgcGVlcidzIHZlcnNpb24uICovCi0JCQkJaWYgKChzLT52ZXJzaW9uICYgMHhGRjAwKSA9PSAodmVyc2lvbiAmIDB4RkYwMCkpCi0JCQkJCXMtPnZlcnNpb24gPSB2ZXJzaW9uOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHMtPnZlcnNpb24gJiAweEZGMDApID09ICh2ZXJzaW9uICYgMHhGRjAwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCS8qIFNlbmQgYmFjayBlcnJvciB1c2luZyB0aGVpciBtaW5vciB2ZXJzaW9uIG51bWJlciA6LSkgKi8KKwkJCQkJcy0+dmVyc2lvbiA9ICh1bnNpZ25lZCBzaG9ydCl2ZXJzaW9uOwogCQkJCWFsPVNTTF9BRF9QUk9UT0NPTF9WRVJTSU9OOwogCQkJCWdvdG8gZl9lcnI7CiAJCQkJfQpAQCAtMzA3LDcgKzM1MSw3IEBACiAJCQlnb3RvIGVycjsKIAkJCX0KIAotCQlpZiAocnItPmxlbmd0aCA+IFNTTDNfUlRfTUFYX0VOQ1JZUFRFRF9MRU5HVEgrZXh0cmEpCisJCWlmIChyci0+bGVuZ3RoID4gcy0+czMtPnJidWYubGVuIC0gU1NMM19SVF9IRUFERVJfTEVOR1RIKQogCQkJewogCQkJYWw9U1NMX0FEX1JFQ09SRF9PVkVSRkxPVzsKIAkJCVNTTGVycihTU0xfRl9TU0wzX0dFVF9SRUNPUkQsU1NMX1JfUEFDS0VUX0xFTkdUSF9UT09fTE9ORyk7CkBAIC0zOTUsMTIgKzQzOSwxNCBAQAogCS8qIHItPmxlbmd0aCBpcyBub3cgdGhlIGNvbXByZXNzZWQgZGF0YSBwbHVzIG1hYyAqLwogCWlmICgJKHNlc3MgPT0gTlVMTCkgfHwKIAkJKHMtPmVuY19yZWFkX2N0eCA9PSBOVUxMKSB8fAotCQkocy0+cmVhZF9oYXNoID09IE5VTEwpKQorCQkoRVZQX01EX0NUWF9tZChzLT5yZWFkX2hhc2gpID09IE5VTEwpKQogCQljbGVhcj0xOwogCiAJaWYgKCFjbGVhcikKIAkJewotCQltYWNfc2l6ZT1FVlBfTURfc2l6ZShzLT5yZWFkX2hhc2gpOworCQkvKiAhY2xlYXIgPT4gcy0+cmVhZF9oYXNoICE9IE5VTEwgPT4gbWFjX3NpemUgIT0gLTEgKi8KKwkJbWFjX3NpemU9RVZQX01EX0NUWF9zaXplKHMtPnJlYWRfaGFzaCk7CisJCU9QRU5TU0xfYXNzZXJ0KG1hY19zaXplID49IDApOwogCiAJCWlmIChyci0+bGVuZ3RoID4gU1NMM19SVF9NQVhfQ09NUFJFU1NFRF9MRU5HVEgrZXh0cmErbWFjX3NpemUpCiAJCQl7CkBAIC00MTMsNyArNDU5LDcgQEAKICNlbmRpZgkJCQogCQkJfQogCQkvKiBjaGVjayB0aGUgTUFDIGZvciByci0+aW5wdXQgKGl0J3MgaW4gbWFjX3NpemUgYnl0ZXMgYXQgdGhlIHRhaWwpICovCi0JCWlmIChyci0+bGVuZ3RoID49IG1hY19zaXplKQorCQlpZiAocnItPmxlbmd0aCA+PSAodW5zaWduZWQgaW50KW1hY19zaXplKQogCQkJewogCQkJcnItPmxlbmd0aCAtPSBtYWNfc2l6ZTsKIAkJCW1hYyA9ICZyci0+ZGF0YVtyci0+bGVuZ3RoXTsKQEAgLTQzMSw3ICs0NzcsNyBAQAogI2VuZGlmCiAJCQl9CiAJCWk9cy0+bWV0aG9kLT5zc2wzX2VuYy0+bWFjKHMsbWQsMCk7Ci0JCWlmIChtYWMgPT0gTlVMTCB8fCBtZW1jbXAobWQsIG1hYywgbWFjX3NpemUpICE9IDApCisJCWlmIChpIDwgMCB8fCBtYWMgPT0gTlVMTCB8fCBtZW1jbXAobWQsIG1hYywgKHNpemVfdCltYWNfc2l6ZSkgIT0gMCkKIAkJCXsKIAkJCWRlY3J5cHRpb25fZmFpbGVkX29yX2JhZF9yZWNvcmRfbWFjID0gMTsKIAkJCX0KQEAgLTQ4OCw2ICs1MzQsMTAgQEAKIAkvKiBqdXN0IHJlYWQgYSAwIGxlbmd0aCBwYWNrZXQgKi8KIAlpZiAocnItPmxlbmd0aCA9PSAwKSBnb3RvIGFnYWluOwogCisjaWYgMAorZnByaW50ZihzdGRlcnIsICJVbHRpbWF0ZSBSZWNvcmQgdHlwZT0lZCwgTGVuZ3RoPSVkXG4iLCByci0+dHlwZSwgcnItPmxlbmd0aCk7CisjZW5kaWYKKwogCXJldHVybigxKTsKIAogZl9lcnI6CkBAIC01NDIsNyArNTkyLDcgQEAKIAljb25zdCB1bnNpZ25lZCBjaGFyICpidWY9YnVmXzsKIAl1bnNpZ25lZCBpbnQgdG90LG4sbnc7CiAJaW50IGk7Ci0gICAgdW5zaWduZWQgaW50IG1heF9wbGFpbl9sZW5ndGg7CisJdW5zaWduZWQgaW50IG1heF9wbGFpbl9sZW5ndGg7CiAKIAlzLT5yd3N0YXRlPVNTTF9OT1RISU5HOwogCXRvdD1zLT5zMy0+d251bTsKQEAgLTU2Myw3ICs2MTMsNyBAQAogCWZvciAoOzspCiAJCXsKIAkJaWYgKCEoU1NMX2dldF9tb2RlKHMpICYgU1NMX01PREVfU01BTExfQlVGRkVSUykpCi0JCQltYXhfcGxhaW5fbGVuZ3RoID0gU1NMM19SVF9NQVhfUExBSU5fTEVOR1RIOworCQkJbWF4X3BsYWluX2xlbmd0aCA9IHMtPm1heF9zZW5kX2ZyYWdtZW50OwogCQllbHNlCiAJCQltYXhfcGxhaW5fbGVuZ3RoID0gU1NMM19SVF9ERUZBVUxUX1BMQUlOX0xFTkdUSDsKIApAQCAtNjAwLDE0ICs2NTAsMTkgQEAKIAl7CiAJdW5zaWduZWQgY2hhciAqcCwqcGxlbjsKIAlpbnQgaSxtYWNfc2l6ZSxjbGVhcj0wOwotCWludCBwcmVmaXhfbGVuID0gMDsKKwlpbnQgcHJlZml4X2xlbj0wOworCWxvbmcgYWxpZ249MDsKIAlTU0wzX1JFQ09SRCAqd3I7Ci0JU1NMM19CVUZGRVIgKndiOworCVNTTDNfQlVGRkVSICp3Yj0mKHMtPnMzLT53YnVmKTsKIAlTU0xfU0VTU0lPTiAqc2VzczsKIAorIAlpZiAod2ItPmJ1ZiA9PSBOVUxMKQorCQlpZiAoIXNzbDNfc2V0dXBfd3JpdGVfYnVmZmVyKHMpKQorCQkJcmV0dXJuIC0xOworCiAJLyogZmlyc3QgY2hlY2sgaWYgdGhlcmUgaXMgYSBTU0wzX0JVRkZFUiBzdGlsbCBiZWluZyB3cml0dGVuCiAJICogb3V0LiAgVGhpcyB3aWxsIGhhcHBlbiB3aXRoIG5vbiBibG9ja2luZyBJTyAqLwotCWlmIChzLT5zMy0+d2J1Zi5sZWZ0ICE9IDApCisJaWYgKHdiLT5sZWZ0ICE9IDApCiAJCXJldHVybihzc2wzX3dyaXRlX3BlbmRpbmcocyx0eXBlLGJ1ZixsZW4pKTsKIAogCS8qIElmIHdlIGhhdmUgYW4gYWxlcnQgdG8gc2VuZCwgbGV0cyBzZW5kIGl0ICovCkBAIC02MjMsMTggKzY3OCwyMSBAQAogCQlyZXR1cm4gMDsKIAogCXdyPSAmKHMtPnMzLT53cmVjKTsKLQl3Yj0gJihzLT5zMy0+d2J1Zik7CiAJc2Vzcz1zLT5zZXNzaW9uOwogCiAJaWYgKAkoc2VzcyA9PSBOVUxMKSB8fAogCQkocy0+ZW5jX3dyaXRlX2N0eCA9PSBOVUxMKSB8fAotCQkocy0+d3JpdGVfaGFzaCA9PSBOVUxMKSkKKwkJKEVWUF9NRF9DVFhfbWQocy0+d3JpdGVfaGFzaCkgPT0gTlVMTCkpCiAJCWNsZWFyPTE7CiAKIAlpZiAoY2xlYXIpCiAJCW1hY19zaXplPTA7CiAJZWxzZQotCQltYWNfc2l6ZT1FVlBfTURfc2l6ZShzLT53cml0ZV9oYXNoKTsKKwkJeworCQltYWNfc2l6ZT1FVlBfTURfQ1RYX3NpemUocy0+d3JpdGVfaGFzaCk7CisJCWlmIChtYWNfc2l6ZSA8IDApCisJCQlnb3RvIGVycjsKKwkJfQogCiAJLyogJ2NyZWF0ZV9lbXB0eV9mcmFnbWVudCcgaXMgdHJ1ZSBvbmx5IHdoZW4gdGhpcyBmdW5jdGlvbiBjYWxscyBpdHNlbGYgKi8KIAlpZiAoIWNsZWFyICYmICFjcmVhdGVfZW1wdHlfZnJhZ21lbnQgJiYgIXMtPnMzLT5lbXB0eV9mcmFnbWVudF9kb25lKQpAQCAtNjUyLDkgKzcxMCw4IEBACiAJCQlpZiAocHJlZml4X2xlbiA8PSAwKQogCQkJCWdvdG8gZXJyOwogCi0JCQlpZiAocy0+czMtPndidWYubGVuIDwgKHNpemVfdClwcmVmaXhfbGVuICsKLQkJCQkoKFNTTF9nZXRfbW9kZShzKSAmIFNTTF9NT0RFX1NNQUxMX0JVRkZFUlMpID8gU1NMM19SVF9ERUZBVUxUX1BBQ0tFVF9TSVpFIDoKLQkJCQkJU1NMM19SVF9NQVhfUEFDS0VUX1NJWkUpKQorCQkJaWYgKHByZWZpeF9sZW4gPgorCQkoU1NMM19SVF9IRUFERVJfTEVOR1RIICsgU1NMM19SVF9TRU5EX01BWF9FTkNSWVBURURfT1ZFUkhFQUQpKQogCQkJCXsKIAkJCQkvKiBpbnN1ZmZpY2llbnQgc3BhY2UgKi8KIAkJCQlTU0xlcnIoU1NMX0ZfRE9fU1NMM19XUklURSwgRVJSX1JfSU5URVJOQUxfRVJST1IpOwpAQCAtNjY1LDcgKzcyMiwzMiBAQAogCQlzLT5zMy0+ZW1wdHlfZnJhZ21lbnRfZG9uZSA9IDE7CiAJCX0KIAotCXAgPSB3Yi0+YnVmICsgcHJlZml4X2xlbjsKKwlpZiAoY3JlYXRlX2VtcHR5X2ZyYWdtZW50KQorCQl7CisjaWYgZGVmaW5lZChTU0wzX0FMSUdOX1BBWUxPQUQpICYmIFNTTDNfQUxJR05fUEFZTE9BRCE9MAorCQkvKiBleHRyYSBmcmFnbWVudCB3b3VsZCBiZSBjb3VwbGUgb2YgY2lwaGVyIGJsb2NrcywKKwkJICogd2hpY2ggd291bGQgYmUgbXVsdGlwbGUgb2YgU1NMM19BTElHTl9QQVlMT0FELCBzbworCQkgKiBpZiB3ZSB3YW50IHRvIGFsaWduIHRoZSByZWFsIHBheWxvYWQsIHRoZW4gd2UgY2FuCisJCSAqIGp1c3QgcHJldGVudCB3ZSBzaW1wbHkgaGF2ZSB0d28gaGVhZGVycy4gKi8KKwkJYWxpZ24gPSAobG9uZyl3Yi0+YnVmICsgMipTU0wzX1JUX0hFQURFUl9MRU5HVEg7CisJCWFsaWduID0gKC1hbGlnbikmKFNTTDNfQUxJR05fUEFZTE9BRC0xKTsKKyNlbmRpZgorCQlwID0gd2ItPmJ1ZiArIGFsaWduOworCQl3Yi0+b2Zmc2V0ICA9IGFsaWduOworCQl9CisJZWxzZSBpZiAocHJlZml4X2xlbikKKwkJeworCQlwID0gd2ItPmJ1ZiArIHdiLT5vZmZzZXQgKyBwcmVmaXhfbGVuOworCQl9CisJZWxzZQorCQl7CisjaWYgZGVmaW5lZChTU0wzX0FMSUdOX1BBWUxPQUQpICYmIFNTTDNfQUxJR05fUEFZTE9BRCE9MAorCQlhbGlnbiA9IChsb25nKXdiLT5idWYgKyBTU0wzX1JUX0hFQURFUl9MRU5HVEg7CisJCWFsaWduID0gKC1hbGlnbikmKFNTTDNfQUxJR05fUEFZTE9BRC0xKTsKKyNlbmRpZgorCQlwID0gd2ItPmJ1ZiArIGFsaWduOworCQl3Yi0+b2Zmc2V0ICA9IGFsaWduOworCQl9CiAKIAkvKiB3cml0ZSB0aGUgaGVhZGVyICovCiAKQEAgLTcwOCw3ICs3OTAsOCBAQAogCiAJaWYgKG1hY19zaXplICE9IDApCiAJCXsKLQkJcy0+bWV0aG9kLT5zc2wzX2VuYy0+bWFjKHMsJihwW3dyLT5sZW5ndGhdKSwxKTsKKwkJaWYgKHMtPm1ldGhvZC0+c3NsM19lbmMtPm1hYyhzLCYocFt3ci0+bGVuZ3RoXSksMSkgPCAwKQorCQkJZ290byBlcnI7CiAJCXdyLT5sZW5ndGgrPW1hY19zaXplOwogCQl3ci0+aW5wdXQ9cDsKIAkJd3ItPmRhdGE9cDsKQEAgLTczNiw3ICs4MTksNiBAQAogCiAJLyogbm93IGxldCdzIHNldCB1cCB3YiAqLwogCXdiLT5sZWZ0ID0gcHJlZml4X2xlbiArIHdyLT5sZW5ndGg7Ci0Jd2ItPm9mZnNldCA9IDA7CiAKIAkvKiBtZW1vcml6ZSBhcmd1bWVudHMgc28gdGhhdCBzc2wzX3dyaXRlX3BlbmRpbmcgY2FuIGRldGVjdCBiYWQgd3JpdGUgcmV0cmllcyBsYXRlciAqLwogCXMtPnMzLT53cGVuZF90b3Q9bGVuOwpAQCAtNzU1LDYgKzgzNyw3IEBACiAJdW5zaWduZWQgaW50IGxlbikKIAl7CiAJaW50IGk7CisJU1NMM19CVUZGRVIgKndiPSYocy0+czMtPndidWYpOwogCiAvKiBYWFhYICovCiAJaWYgKChzLT5zMy0+d3BlbmRfdG90ID4gKGludClsZW4pCkBAIC03NzMsMTcgKzg1NiwyMCBAQAogCQkJewogCQkJcy0+cndzdGF0ZT1TU0xfV1JJVElORzsKIAkJCWk9QklPX3dyaXRlKHMtPndiaW8sCi0JCQkJKGNoYXIgKikmKHMtPnMzLT53YnVmLmJ1ZltzLT5zMy0+d2J1Zi5vZmZzZXRdKSwKLQkJCQkodW5zaWduZWQgaW50KXMtPnMzLT53YnVmLmxlZnQpOworCQkJCShjaGFyICopJih3Yi0+YnVmW3diLT5vZmZzZXRdKSwKKwkJCQkodW5zaWduZWQgaW50KXdiLT5sZWZ0KTsKIAkJCX0KIAkJZWxzZQogCQkJewogCQkJU1NMZXJyKFNTTF9GX1NTTDNfV1JJVEVfUEVORElORyxTU0xfUl9CSU9fTk9UX1NFVCk7CiAJCQlpPSAtMTsKIAkJCX0KLQkJaWYgKGkgPT0gcy0+czMtPndidWYubGVmdCkKKwkJaWYgKGkgPT0gd2ItPmxlZnQpCiAJCQl7Ci0JCQlzLT5zMy0+d2J1Zi5sZWZ0PTA7CisJCQl3Yi0+bGVmdD0wOworCQkJd2ItPm9mZnNldCs9aTsKKwkJCWlmIChzLT5tb2RlICYgU1NMX01PREVfUkVMRUFTRV9CVUZGRVJTKQorCQkJCXNzbDNfcmVsZWFzZV93cml0ZV9idWZmZXIocyk7CiAJCQlzLT5yd3N0YXRlPVNTTF9OT1RISU5HOwogCQkJcmV0dXJuKHMtPnMzLT53cGVuZF9yZXQpOwogCQkJfQpAQCAtNzkyLDEyICs4NzgsMTIgQEAKIAkJCSAgICBzLT52ZXJzaW9uID09IERUTFMxX0JBRF9WRVIpIHsKIAkJCQkvKiBGb3IgRFRMUywganVzdCBkcm9wIGl0LiBUaGF0J3Mga2luZCBvZiB0aGUgd2hvbGUKIAkJCQkgICBwb2ludCBpbiB1c2luZyBhIGRhdGFncmFtIHNlcnZpY2UgKi8KLQkJCQlzLT5zMy0+d2J1Zi5sZWZ0ID0gMDsKKwkJCQl3Yi0+bGVmdCA9IDA7CiAJCQl9CiAJCQlyZXR1cm4oaSk7CiAJCX0KLQkJcy0+czMtPndidWYub2Zmc2V0Kz1pOwotCQlzLT5zMy0+d2J1Zi5sZWZ0LT1pOworCQl3Yi0+b2Zmc2V0Kz1pOworCQl3Yi0+bGVmdC09aTsKIAkJfQogCX0KIApAQCAtODM2LDcgKzkyMiw3IEBACiAJdm9pZCAoKmNiKShjb25zdCBTU0wgKnNzbCxpbnQgdHlwZTIsaW50IHZhbCk9TlVMTDsKIAogCWlmIChzLT5zMy0+cmJ1Zi5idWYgPT0gTlVMTCkgLyogTm90IGluaXRpYWxpemVkIHlldCAqLwotCQlpZiAoIXNzbDNfc2V0dXBfYnVmZmVycyhzKSkKKwkJaWYgKCFzc2wzX3NldHVwX3JlYWRfYnVmZmVyKHMpKQogCQkJcmV0dXJuKC0xKTsKIAogCWlmICgodHlwZSAmJiAodHlwZSAhPSBTU0wzX1JUX0FQUExJQ0FUSU9OX0RBVEEpICYmICh0eXBlICE9IFNTTDNfUlRfSEFORFNIQUtFKSAmJiB0eXBlKSB8fApAQCAtOTQ1LDYgKzEwMzEsOCBAQAogCQkJCXsKIAkJCQlzLT5yc3RhdGU9U1NMX1NUX1JFQURfSEVBREVSOwogCQkJCXJyLT5vZmY9MDsKKwkJCQlpZiAocy0+bW9kZSAmIFNTTF9NT0RFX1JFTEVBU0VfQlVGRkVSUykKKwkJCQkJc3NsM19yZWxlYXNlX3JlYWRfYnVmZmVyKHMpOwogCQkJCX0KIAkJCX0KIAkJcmV0dXJuKG4pOwpAQCAtMTMyOCw4ICsxNDE2LDYgQEAKIAkJfQogCiAJcy0+czMtPnRtcC5wZWVyX2ZpbmlzaF9tZF9sZW4gPSBzLT5tZXRob2QtPnNzbDNfZW5jLT5maW5hbF9maW5pc2hfbWFjKHMsCi0JCSYocy0+czMtPmZpbmlzaF9kZ3N0MSksCi0JCSYocy0+czMtPmZpbmlzaF9kZ3N0MiksCiAJCXNlbmRlcixzbGVuLHMtPnMzLT50bXAucGVlcl9maW5pc2hfbWQpOwogCiAJcmV0dXJuKDEpOwpkaWZmIC0tZ2l0IGEvc3NsL3MzX3NydnIuYyBiL3NzbC9zM19zcnZyLmMKaW5kZXggZTY5NjQ1MC4uOTJmNzNiNiAxMDA2NDQKLS0tIGEvc3NsL3MzX3NydnIuYworKysgYi9zc2wvczNfc3J2ci5jCkBAIC0xLDQgKzEsNCBAQAotLyogc3NsL3MzX3NydnIuYyAqLworLyogc3NsL3MzX3NydnIuYyAtKi0gbW9kZTpDOyBjLWZpbGUtc3R5bGU6ICJlYXkiIC0qLSAqLwogLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTU2LDcgKzU2LDcgQEAKICAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCiAgKi8KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjEsNiArMTIxLDMyIEBACiAgKiBWaXB1bCBHdXB0YSBhbmQgU3VtaXQgR3VwdGEgb2YgU3VuIE1pY3Jvc3lzdGVtcyBMYWJvcmF0b3JpZXMuCiAgKgogICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IDIwMDUgTm9raWEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhlIHBvcnRpb25zIG9mIHRoZSBhdHRhY2hlZCBzb2Z0d2FyZSAoIkNvbnRyaWJ1dGlvbiIpIGlzIGRldmVsb3BlZCBieQorICogTm9raWEgQ29ycG9yYXRpb24gYW5kIGlzIGxpY2Vuc2VkIHB1cnN1YW50IHRvIHRoZSBPcGVuU1NMIG9wZW4gc291cmNlCisgKiBsaWNlbnNlLgorICoKKyAqIFRoZSBDb250cmlidXRpb24sIG9yaWdpbmFsbHkgd3JpdHRlbiBieSBNaWthIEtvdXNhIGFuZCBQYXNpIEVyb25lbiBvZgorICogTm9raWEgQ29ycG9yYXRpb24sIGNvbnNpc3RzIG9mIHRoZSAiUFNLIiAoUHJlLVNoYXJlZCBLZXkpIGNpcGhlcnN1aXRlcworICogc3VwcG9ydCAoc2VlIFJGQyA0Mjc5KSB0byBPcGVuU1NMLgorICoKKyAqIE5vIHBhdGVudCBsaWNlbnNlcyBvciBvdGhlciByaWdodHMgZXhjZXB0IHRob3NlIGV4cHJlc3NseSBzdGF0ZWQgaW4KKyAqIHRoZSBPcGVuU1NMIG9wZW4gc291cmNlIGxpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIGdyYW50ZWQgb3IgcmVjZWl2ZWQKKyAqIGV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsLCBvciBvdGhlcndpc2UuCisgKgorICogTm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgTm9raWEgdGhhdCB0aGUgQ29udHJpYnV0aW9uIGRvZXMgbm90CisgKiBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb2YgYW55IHRoaXJkCisgKiBwYXJ0eSBvciB0aGF0IHRoZSBsaWNlbnNlIHByb3ZpZGVzIHlvdSB3aXRoIGFsbCB0aGUgbmVjZXNzYXJ5IHJpZ2h0cworICogdG8gbWFrZSB1c2Ugb2YgdGhlIENvbnRyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELiBJTgorICogQURESVRJT04gVE8gVEhFIERJU0NMQUlNRVJTIElOQ0xVREVEIElOIFRIRSBMSUNFTlNFLCBOT0tJQQorICogU1BFQ0lGSUNBTExZIERJU0NMQUlNUyBBTlkgTElBQklMSVRZIEZPUiBDTEFJTVMgQlJPVUdIVCBCWSBZT1UgT1IgQU5ZCisgKiBPVEhFUiBFTlRJVFkgQkFTRUQgT04gSU5GUklOR0VNRU5UIE9GIElOVEVMTEVDVFVBTCBQUk9QRVJUWSBSSUdIVFMgT1IKKyAqIE9USEVSV0lTRS4KKyAqLwogCiAjZGVmaW5lIFJFVVNFX0NJUEhFUl9CVUcKICNkZWZpbmUgTkVUU0NBUEVfSEFOR19CVUcKQEAgLTE0MywxMiArMTY5LDkgQEAKICNlbmRpZgogI2luY2x1ZGUgPG9wZW5zc2wvbWQ1Lmg+CiAKLXN0YXRpYyBTU0xfTUVUSE9EICpzc2wzX2dldF9zZXJ2ZXJfbWV0aG9kKGludCB2ZXIpOwotI2lmbmRlZiBPUEVOU1NMX05PX0VDREgKLXN0YXRpYyBpbnQgbmlkMmN1cnZlX2lkKGludCBuaWQpOwotI2VuZGlmCitzdGF0aWMgY29uc3QgU1NMX01FVEhPRCAqc3NsM19nZXRfc2VydmVyX21ldGhvZChpbnQgdmVyKTsKIAotc3RhdGljIFNTTF9NRVRIT0QgKnNzbDNfZ2V0X3NlcnZlcl9tZXRob2QoaW50IHZlcikKK3N0YXRpYyBjb25zdCBTU0xfTUVUSE9EICpzc2wzX2dldF9zZXJ2ZXJfbWV0aG9kKGludCB2ZXIpCiAJewogCWlmICh2ZXIgPT0gU1NMM19WRVJTSU9OKQogCQlyZXR1cm4oU1NMdjNfc2VydmVyX21ldGhvZCgpKTsKQEAgLTE2NCw3ICsxODcsNyBAQAogaW50IHNzbDNfYWNjZXB0KFNTTCAqcykKIAl7CiAJQlVGX01FTSAqYnVmOwotCXVuc2lnbmVkIGxvbmcgbCxUaW1lPSh1bnNpZ25lZCBsb25nKXRpbWUoTlVMTCk7CisJdW5zaWduZWQgbG9uZyBhbGdfayxUaW1lPSh1bnNpZ25lZCBsb25nKXRpbWUoTlVMTCk7CiAJdm9pZCAoKmNiKShjb25zdCBTU0wgKnNzbCxpbnQgdHlwZSxpbnQgdmFsKT1OVUxMOwogCWludCByZXQ9IC0xOwogCWludCBuZXdfc3RhdGUsc3RhdGUsc2tpcD0wOwpAQCAtMjkyLDYgKzMxNSw3IEBACiAJCQlzLT5zaHV0ZG93bj0wOwogCQkJcmV0PXNzbDNfZ2V0X2NsaWVudF9oZWxsbyhzKTsKIAkJCWlmIChyZXQgPD0gMCkgZ290byBlbmQ7CisJCQkKIAkJCXMtPm5ld19zZXNzaW9uID0gMjsKIAkJCXMtPnN0YXRlPVNTTDNfU1RfU1dfU1JWUl9IRUxMT19BOwogCQkJcy0+aW5pdF9udW09MDsKQEAgLTMyMCw5ICszNDQsMTEgQEAKIAogCQljYXNlIFNTTDNfU1RfU1dfQ0VSVF9BOgogCQljYXNlIFNTTDNfU1RfU1dfQ0VSVF9COgotCQkJLyogQ2hlY2sgaWYgaXQgaXMgYW5vbiBESCBvciBhbm9uIEVDREggb3IgS1JCNSAqLwotCQkJaWYgKCEocy0+czMtPnRtcC5uZXdfY2lwaGVyLT5hbGdvcml0aG1zICYgU1NMX2FOVUxMKQotCQkJCSYmICEocy0+czMtPnRtcC5uZXdfY2lwaGVyLT5hbGdvcml0aG1zICYgU1NMX2FLUkI1KSkKKwkJCS8qIENoZWNrIGlmIGl0IGlzIGFub24gREggb3IgYW5vbiBFQ0RILCAqLworCQkJLyogbm9ybWFsIFBTSyBvciBLUkI1ICovCisJCQlpZiAoIShzLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobV9hdXRoICYgU1NMX2FOVUxMKQorCQkJCSYmICEocy0+czMtPnRtcC5uZXdfY2lwaGVyLT5hbGdvcml0aG1fbWtleSAmIFNTTF9rUFNLKQorCQkJCSYmICEocy0+czMtPnRtcC5uZXdfY2lwaGVyLT5hbGdvcml0aG1fYXV0aCAmIFNTTF9hS1JCNSkpCiAJCQkJewogCQkJCXJldD1zc2wzX3NlbmRfc2VydmVyX2NlcnRpZmljYXRlKHMpOwogCQkJCWlmIChyZXQgPD0gMCkgZ290byBlbmQ7CkBAIC0zNDksMTMgKzM3NSwxMyBAQAogCiAJCWNhc2UgU1NMM19TVF9TV19LRVlfRVhDSF9BOgogCQljYXNlIFNTTDNfU1RfU1dfS0VZX0VYQ0hfQjoKLQkJCWw9cy0+czMtPnRtcC5uZXdfY2lwaGVyLT5hbGdvcml0aG1zOworCQkJYWxnX2sgPSBzLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobV9ta2V5OwogCiAJCQkvKiBjbGVhciB0aGlzLCBpdCBtYXkgZ2V0IHJlc2V0IGJ5CiAJCQkgKiBzZW5kX3NlcnZlcl9rZXlfZXhjaGFuZ2UgKi8KIAkJCWlmICgocy0+b3B0aW9ucyAmIFNTTF9PUF9FUEhFTUVSQUxfUlNBKQogI2lmbmRlZiBPUEVOU1NMX05PX0tSQjUKLQkJCQkmJiAhKGwgJiBTU0xfS1JCNSkKKwkJCQkmJiAhKGFsZ19rICYgU1NMX2tLUkI1KQogI2VuZGlmIC8qIE9QRU5TU0xfTk9fS1JCNSAqLwogCQkJCSkKIAkJCQkvKiBvcHRpb24gU1NMX09QX0VQSEVNRVJBTF9SU0Egc2VuZHMgdGVtcG9yYXJ5IFJTQSBrZXkKQEAgLTM3MCwxNiArMzk2LDIzIEBACiAJCQkvKiBvbmx5IHNlbmQgaWYgYSBESCBrZXkgZXhjaGFuZ2UsIGZvcnRlenphIG9yCiAJCQkgKiBSU0EgYnV0IHdlIGhhdmUgYSBzaWduIG9ubHkgY2VydGlmaWNhdGUKIAkJCSAqCisJCQkgKiBQU0s6IG1heSBzZW5kIFBTSyBpZGVudGl0eSBoaW50cworCQkJICoKIAkJCSAqIEZvciBFQ0MgY2lwaGVyc3VpdGVzLCB3ZSBzZW5kIGEgc2VydmVyS2V5RXhjaGFuZ2UKIAkJCSAqIG1lc3NhZ2Ugb25seSBpZiB0aGUgY2lwaGVyIHN1aXRlIGlzIGVpdGhlcgogCQkJICogRUNESC1hbm9uIG9yIEVDREhFLiBJbiBvdGhlciBjYXNlcywgdGhlCi0JCQkgKiBzZXJ2ZXIgY2VydGlmaWNhdGUgY29udGFpbnMgdGhlIHNlcnZlcidzIAorCQkJICogc2VydmVyIGNlcnRpZmljYXRlIGNvbnRhaW5zIHRoZSBzZXJ2ZXIncwogCQkJICogcHVibGljIGtleSBmb3Iga2V5IGV4Y2hhbmdlLgogCQkJICovCiAJCQlpZiAocy0+czMtPnRtcC51c2VfcnNhX3RtcAotCQkJICAgIHx8IChsICYgU1NMX2tFQ0RIRSkKLQkJCSAgICB8fCAobCAmIChTU0xfREh8U1NMX2tGWkEpKQotCQkJICAgIHx8ICgobCAmIFNTTF9rUlNBKQorCQkJLyogUFNLOiBzZW5kIFNlcnZlcktleUV4Y2hhbmdlIGlmIFBTSyBpZGVudGl0eQorCQkJICogaGludCBpZiBwcm92aWRlZCAqLworI2lmbmRlZiBPUEVOU1NMX05PX1BTSworCQkJICAgIHx8ICgoYWxnX2sgJiBTU0xfa1BTSykgJiYgcy0+Y3R4LT5wc2tfaWRlbnRpdHlfaGludCkKKyNlbmRpZgorCQkJICAgIHx8IChhbGdfayAmIChTU0xfa0RIcnxTU0xfa0RIZHxTU0xfa0VESCkpCisJCQkgICAgfHwgKGFsZ19rICYgU1NMX2tFRUNESCkKKwkJCSAgICB8fCAoKGFsZ19rICYgU1NMX2tSU0EpCiAJCQkJJiYgKHMtPmNlcnQtPnBrZXlzW1NTTF9QS0VZX1JTQV9FTkNdLnByaXZhdGVrZXkgPT0gTlVMTAogCQkJCSAgICB8fCAoU1NMX0NfSVNfRVhQT1JUKHMtPnMzLT50bXAubmV3X2NpcGhlcikKIAkJCQkJJiYgRVZQX1BLRVlfc2l6ZShzLT5jZXJ0LT5wa2V5c1tTU0xfUEtFWV9SU0FfRU5DXS5wcml2YXRla2V5KSo4ID4gU1NMX0NfRVhQT1JUX1BLRVlMRU5HVEgocy0+czMtPnRtcC5uZXdfY2lwaGVyKQpAQCAtNDA5LDEyICs0NDIsMTUgQEAKIAkJCQkvKiBuZXZlciByZXF1ZXN0IGNlcnQgaW4gYW5vbnltb3VzIGNpcGhlcnN1aXRlcwogCQkJCSAqIChzZWUgc2VjdGlvbiAiQ2VydGlmaWNhdGUgcmVxdWVzdCIgaW4gU1NMIDMgZHJhZnRzCiAJCQkJICogYW5kIGluIFJGQyAyMjQ2KTogKi8KLQkJCQkoKHMtPnMzLT50bXAubmV3X2NpcGhlci0+YWxnb3JpdGhtcyAmIFNTTF9hTlVMTCkgJiYKKwkJCQkoKHMtPnMzLT50bXAubmV3X2NpcGhlci0+YWxnb3JpdGhtX2F1dGggJiBTU0xfYU5VTEwpICYmCiAJCQkJIC8qIC4uLiBleGNlcHQgd2hlbiB0aGUgYXBwbGljYXRpb24gaW5zaXN0cyBvbiB2ZXJpZmljYXRpb24KIAkJCQkgICogKGFnYWluc3QgdGhlIHNwZWNzLCBidXQgczNfY2xudC5jIGFjY2VwdHMgdGhpcyBmb3IgU1NMIDMpICovCiAJCQkJICEocy0+dmVyaWZ5X21vZGUgJiBTU0xfVkVSSUZZX0ZBSUxfSUZfTk9fUEVFUl9DRVJUKSkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5ldmVyIHJlcXVlc3QgY2VydCBpbiBLZXJiZXJvcyBjaXBoZXJzdWl0ZXMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHMtPnMzLT50bXAubmV3X2NpcGhlci0+YWxnb3JpdGhtcyAmIFNTTF9hS1JCNSkpCisJCQkJIC8qIG5ldmVyIHJlcXVlc3QgY2VydCBpbiBLZXJiZXJvcyBjaXBoZXJzdWl0ZXMgKi8KKwkJCQkocy0+czMtPnRtcC5uZXdfY2lwaGVyLT5hbGdvcml0aG1fYXV0aCAmIFNTTF9hS1JCNSkKKwkJCQkvKiBXaXRoIG5vcm1hbCBQU0sgQ2VydGlmaWNhdGVzIGFuZAorCQkJCSAqIENlcnRpZmljYXRlIFJlcXVlc3RzIGFyZSBvbWl0dGVkICovCisJCQkJfHwgKHMtPnMzLT50bXAubmV3X2NpcGhlci0+YWxnb3JpdGhtX21rZXkgJiBTU0xfa1BTSykpCiAJCQkJewogCQkJCS8qIG5vIGNlcnQgcmVxdWVzdCAqLwogCQkJCXNraXA9MTsKQEAgLTQ5MCw3ICs1MjYsNyBAQAogCQljYXNlIFNTTDNfU1RfU1JfS0VZX0VYQ0hfQToKIAkJY2FzZSBTU0wzX1NUX1NSX0tFWV9FWENIX0I6CiAJCQlyZXQ9c3NsM19nZXRfY2xpZW50X2tleV9leGNoYW5nZShzKTsKLQkJCWlmIChyZXQgPD0gMCkgCisJCQlpZiAocmV0IDw9IDApCiAJCQkJZ290byBlbmQ7CiAJCQlpZiAocmV0ID09IDIpCiAJCQkJewpAQCAtNDk4LDI0ICs1MzQsNDMgQEAKIAkJCQkgKiB0aGUgY2xpZW50IHNlbmRzIGl0cyBFQ0RIIHB1YiBrZXkgaW4KIAkJCQkgKiBhIGNlcnRpZmljYXRlLCB0aGUgQ2VydGlmaWNhdGVWZXJpZnkKIAkJCQkgKiBtZXNzYWdlIGlzIG5vdCBzZW50LgorCQkJCSAqIEFsc28gZm9yIEdPU1QgY2lwaGVyc3VpdGVzIHdoZW4KKwkJCQkgKiB0aGUgY2xpZW50IHVzZXMgaXRzIGtleSBmcm9tIHRoZSBjZXJ0aWZpY2F0ZQorCQkJCSAqIGZvciBrZXkgZXhjaGFuZ2UuCiAJCQkJICovCiAJCQkJcy0+c3RhdGU9U1NMM19TVF9TUl9GSU5JU0hFRF9BOwogCQkJCXMtPmluaXRfbnVtID0gMDsKIAkJCQl9Ci0JCQllbHNlICAgCisJCQllbHNlCiAJCQkJeworCQkJCWludCBvZmZzZXQ9MDsKKwkJCQlpbnQgZGdzdF9udW07CisKIAkJCQlzLT5zdGF0ZT1TU0wzX1NUX1NSX0NFUlRfVlJGWV9BOwogCQkJCXMtPmluaXRfbnVtPTA7CiAKIAkJCQkvKiBXZSBuZWVkIHRvIGdldCBoYXNoZXMgaGVyZSBzbyBpZiB0aGVyZSBpcwogCQkJCSAqIGEgY2xpZW50IGNlcnQsIGl0IGNhbiBiZSB2ZXJpZmllZAotCQkJCSAqLyAKLQkJCQlzLT5tZXRob2QtPnNzbDNfZW5jLT5jZXJ0X3ZlcmlmeV9tYWMocywKLQkJCQkgICAgJihzLT5zMy0+ZmluaXNoX2Rnc3QxKSwKLQkJCQkgICAgJihzLT5zMy0+dG1wLmNlcnRfdmVyaWZ5X21kWzBdKSk7Ci0JCQkJcy0+bWV0aG9kLT5zc2wzX2VuYy0+Y2VydF92ZXJpZnlfbWFjKHMsCi0JCQkJICAgICYocy0+czMtPmZpbmlzaF9kZ3N0MiksCi0JCQkJICAgICYocy0+czMtPnRtcC5jZXJ0X3ZlcmlmeV9tZFtNRDVfRElHRVNUX0xFTkdUSF0pKTsKKwkJCQkgKiBGSVhNRSAtIGRpZ2VzdCBwcm9jZXNzaW5nIGZvciBDZXJ0aWZpY2F0ZVZlcmlmeQorCQkJCSAqIHNob3VsZCBiZSBnZW5lcmFsaXplZC4gQnV0IGl0IGlzIG5leHQgc3RlcAorCQkJCSAqLworCQkJCWlmIChzLT5zMy0+aGFuZHNoYWtlX2J1ZmZlcikKKwkJCQkJaWYgKCFzc2wzX2RpZ2VzdF9jYWNoZWRfcmVjb3JkcyhzKSkKKwkJCQkJCXJldHVybiAtMTsKKwkJCQlmb3IgKGRnc3RfbnVtPTA7IGRnc3RfbnVtPFNTTF9NQVhfRElHRVNUO2Rnc3RfbnVtKyspCQorCQkJCQlpZiAocy0+czMtPmhhbmRzaGFrZV9kZ3N0W2Rnc3RfbnVtXSkgCisJCQkJCQl7CisJCQkJCQlpbnQgZGdzdF9zaXplOworCisJCQkJCQlzLT5tZXRob2QtPnNzbDNfZW5jLT5jZXJ0X3ZlcmlmeV9tYWMocyxFVlBfTURfQ1RYX3R5cGUocy0+czMtPmhhbmRzaGFrZV9kZ3N0W2Rnc3RfbnVtXSksJihzLT5zMy0+dG1wLmNlcnRfdmVyaWZ5X21kW29mZnNldF0pKTsKKwkJCQkJCWRnc3Rfc2l6ZT1FVlBfTURfQ1RYX3NpemUocy0+czMtPmhhbmRzaGFrZV9kZ3N0W2Rnc3RfbnVtXSk7CisJCQkJCQlpZiAoZGdzdF9zaXplIDwgMCkKKwkJCQkJCQl7CisJCQkJCQkJcmV0ID0gLTE7CisJCQkJCQkJZ290byBlbmQ7CisJCQkJCQkJfQorCQkJCQkJb2Zmc2V0Kz1kZ3N0X3NpemU7CisJCQkJCQl9CQkKIAkJCQl9CiAJCQlicmVhazsKIApAQCAtNTM1LDExICs1OTAsMTQgQEAKIAkJCXJldD1zc2wzX2dldF9maW5pc2hlZChzLFNTTDNfU1RfU1JfRklOSVNIRURfQSwKIAkJCQlTU0wzX1NUX1NSX0ZJTklTSEVEX0IpOwogCQkJaWYgKHJldCA8PSAwKSBnb3RvIGVuZDsKKyNpZm5kZWYgT1BFTlNTTF9OT19UTFNFWFQKKwkJCWlmIChzLT50bHNleHRfdGlja2V0X2V4cGVjdGVkKQorCQkJCXMtPnN0YXRlPVNTTDNfU1RfU1dfU0VTU0lPTl9USUNLRVRfQTsKKwkJCWVsc2UgaWYgKHMtPmhpdCkKKwkJCQlzLT5zdGF0ZT1TU0xfU1RfT0s7CisjZWxzZQogCQkJaWYgKHMtPmhpdCkKIAkJCQlzLT5zdGF0ZT1TU0xfU1RfT0s7Ci0jaWZuZGVmIE9QRU5TU0xfTk9fVExTRVhUCi0JCQllbHNlIGlmIChzLT50bHNleHRfdGlja2V0X2V4cGVjdGVkKQotCQkJCXMtPnN0YXRlPVNTTDNfU1RfU1dfU0VTU0lPTl9USUNLRVRfQTsKICNlbmRpZgogCQkJZWxzZQogCQkJCXMtPnN0YXRlPVNTTDNfU1RfU1dfQ0hBTkdFX0E7CkBAIC03NjksNyArODI3LDcgQEAKIAkgICAgKHMtPnZlcnNpb24gIT0gRFRMUzFfVkVSU0lPTiAmJiBzLT5jbGllbnRfdmVyc2lvbiA8IHMtPnZlcnNpb24pKQogCQl7CiAJCVNTTGVycihTU0xfRl9TU0wzX0dFVF9DTElFTlRfSEVMTE8sIFNTTF9SX1dST05HX1ZFUlNJT05fTlVNQkVSKTsKLQkJaWYgKChzLT5jbGllbnRfdmVyc2lvbj4+OCkgPT0gU1NMM19WRVJTSU9OX01BSk9SKSAKKwkJaWYgKChzLT5jbGllbnRfdmVyc2lvbj4+OCkgPT0gU1NMM19WRVJTSU9OX01BSk9SKQogCQkJewogCQkJLyogc2ltaWxhciB0byBzc2wzX2dldF9yZWNvcmQsIHNlbmQgYWxlcnQgdXNpbmcgcmVtb3RlIHZlcnNpb24gbnVtYmVyICovCiAJCQlzLT52ZXJzaW9uID0gcy0+Y2xpZW50X3ZlcnNpb247CkBAIC05OTAsMTMgKzEwNDgsMTEwIEBACiAJCQlTU0xlcnIoU1NMX0ZfU1NMM19HRVRfQ0xJRU5UX0hFTExPLFNTTF9SX0NMSUVOVEhFTExPX1RMU0VYVCk7CiAJCQlnb3RvIGVycjsKIAkJfQorCisJLyogQ2hlY2sgaWYgd2Ugd2FudCB0byB1c2UgZXh0ZXJuYWwgcHJlLXNoYXJlZCBzZWNyZXQgZm9yIHRoaXMKKwkgKiBoYW5kc2hha2UgZm9yIG5vdCByZXVzZWQgc2Vzc2lvbiBvbmx5LiBXZSBuZWVkIHRvIGdlbmVyYXRlCisJICogc2VydmVyX3JhbmRvbSBiZWZvcmUgY2FsbGluZyB0bHNfc2Vzc2lvbl9zZWNyZXRfY2IgaW4gb3JkZXIgdG8gYWxsb3cKKwkgKiBTZXNzaW9uVGlja2V0IHByb2Nlc3NpbmcgdG8gdXNlIGl0IGluIGtleSBkZXJpdmF0aW9uLiAqLworCXsKKwkJdW5zaWduZWQgbG9uZyBUaW1lOworCQl1bnNpZ25lZCBjaGFyICpwb3M7CisJCVRpbWU9KHVuc2lnbmVkIGxvbmcpdGltZShOVUxMKTsJCQkvKiBUaW1lICovCisJCXBvcz1zLT5zMy0+c2VydmVyX3JhbmRvbTsKKwkJbDJuKFRpbWUscG9zKTsKKwkJaWYgKFJBTkRfcHNldWRvX2J5dGVzKHBvcyxTU0wzX1JBTkRPTV9TSVpFLTQpIDw9IDApCisJCQl7CisJCQlhbD1TU0xfQURfSU5URVJOQUxfRVJST1I7CisJCQlnb3RvIGZfZXJyOworCQkJfQorCX0KKworCWlmICghcy0+aGl0ICYmIHMtPnZlcnNpb24gPj0gVExTMV9WRVJTSU9OICYmIHMtPnRsc19zZXNzaW9uX3NlY3JldF9jYikKKwkJeworCQlTU0xfQ0lQSEVSICpwcmVmX2NpcGhlcj1OVUxMOworCisJCXMtPnNlc3Npb24tPm1hc3Rlcl9rZXlfbGVuZ3RoPXNpemVvZihzLT5zZXNzaW9uLT5tYXN0ZXJfa2V5KTsKKwkJaWYocy0+dGxzX3Nlc3Npb25fc2VjcmV0X2NiKHMsIHMtPnNlc3Npb24tPm1hc3Rlcl9rZXksICZzLT5zZXNzaW9uLT5tYXN0ZXJfa2V5X2xlbmd0aCwKKwkJCWNpcGhlcnMsICZwcmVmX2NpcGhlciwgcy0+dGxzX3Nlc3Npb25fc2VjcmV0X2NiX2FyZykpCisJCQl7CisJCQlzLT5oaXQ9MTsKKwkJCXMtPnNlc3Npb24tPmNpcGhlcnM9Y2lwaGVyczsKKwkJCXMtPnNlc3Npb24tPnZlcmlmeV9yZXN1bHQ9WDUwOV9WX09LOworCisJCQljaXBoZXJzPU5VTEw7CisKKwkJCS8qIGNoZWNrIGlmIHNvbWUgY2lwaGVyIHdhcyBwcmVmZXJyZWQgYnkgY2FsbCBiYWNrICovCisJCQlwcmVmX2NpcGhlcj1wcmVmX2NpcGhlciA/IHByZWZfY2lwaGVyIDogc3NsM19jaG9vc2VfY2lwaGVyKHMsIHMtPnNlc3Npb24tPmNpcGhlcnMsIFNTTF9nZXRfY2lwaGVycyhzKSk7CisJCQlpZiAocHJlZl9jaXBoZXIgPT0gTlVMTCkKKwkJCQl7CisJCQkJYWw9U1NMX0FEX0hBTkRTSEFLRV9GQUlMVVJFOworCQkJCVNTTGVycihTU0xfRl9TU0wzX0dFVF9DTElFTlRfSEVMTE8sU1NMX1JfTk9fU0hBUkVEX0NJUEhFUik7CisJCQkJZ290byBmX2VycjsKKwkJCQl9CisKKwkJCXMtPnNlc3Npb24tPmNpcGhlcj1wcmVmX2NpcGhlcjsKKworCQkJaWYgKHMtPmNpcGhlcl9saXN0KQorCQkJCXNrX1NTTF9DSVBIRVJfZnJlZShzLT5jaXBoZXJfbGlzdCk7CisKKwkJCWlmIChzLT5jaXBoZXJfbGlzdF9ieV9pZCkKKwkJCQlza19TU0xfQ0lQSEVSX2ZyZWUocy0+Y2lwaGVyX2xpc3RfYnlfaWQpOworCisJCQlzLT5jaXBoZXJfbGlzdCA9IHNrX1NTTF9DSVBIRVJfZHVwKHMtPnNlc3Npb24tPmNpcGhlcnMpOworCQkJcy0+Y2lwaGVyX2xpc3RfYnlfaWQgPSBza19TU0xfQ0lQSEVSX2R1cChzLT5zZXNzaW9uLT5jaXBoZXJzKTsKKwkJCX0KKwkJfQogI2VuZGlmCisKIAkvKiBXb3JzdCBjYXNlLCB3ZSB3aWxsIHVzZSB0aGUgTlVMTCBjb21wcmVzc2lvbiwgYnV0IGlmIHdlIGhhdmUgb3RoZXIKIAkgKiBvcHRpb25zLCB3ZSB3aWxsIG5vdyBsb29rIGZvciB0aGVtLiAgV2UgaGF2ZSBpLTEgY29tcHJlc3Npb24KIAkgKiBhbGdvcml0aG1zIGZyb20gdGhlIGNsaWVudCwgc3RhcnRpbmcgYXQgcS4gKi8KIAlzLT5zMy0+dG1wLm5ld19jb21wcmVzc2lvbj1OVUxMOwogI2lmbmRlZiBPUEVOU1NMX05PX0NPTVAKLQlpZiAocy0+Y3R4LT5jb21wX21ldGhvZHMgIT0gTlVMTCkKKwkvKiBUaGlzIG9ubHkgaGFwcGVucyBpZiB3ZSBoYXZlIGEgY2FjaGUgaGl0ICovCisJaWYgKHMtPnNlc3Npb24tPmNvbXByZXNzX21ldGggIT0gMCkKKwkJeworCQlpbnQgbSwgY29tcF9pZCA9IHMtPnNlc3Npb24tPmNvbXByZXNzX21ldGg7CisJCS8qIFBlcmZvcm0gc2FuaXR5IGNoZWNrcyBvbiByZXN1bWVkIGNvbXByZXNzaW9uIGFsZ29yaXRobSAqLworCQkvKiBDYW4ndCBkaXNhYmxlIGNvbXByZXNzaW9uICovCisJCWlmIChzLT5vcHRpb25zICYgU1NMX09QX05PX0NPTVBSRVNTSU9OKQorCQkJeworCQkJYWw9U1NMX0FEX0lOVEVSTkFMX0VSUk9SOworCQkJU1NMZXJyKFNTTF9GX1NTTDNfR0VUX0NMSUVOVF9IRUxMTyxTU0xfUl9JTkNPTlNJU1RFTlRfQ09NUFJFU1NJT04pOworCQkJZ290byBmX2VycjsKKwkJCX0KKwkJLyogTG9vayBmb3IgcmVzdW1lZCBjb21wcmVzc2lvbiBtZXRob2QgKi8KKwkJZm9yIChtID0gMDsgbSA8IHNrX1NTTF9DT01QX251bShzLT5jdHgtPmNvbXBfbWV0aG9kcyk7IG0rKykKKwkJCXsKKwkJCWNvbXA9c2tfU1NMX0NPTVBfdmFsdWUocy0+Y3R4LT5jb21wX21ldGhvZHMsbSk7CisJCQlpZiAoY29tcF9pZCA9PSBjb21wLT5pZCkKKwkJCQl7CisJCQkJcy0+czMtPnRtcC5uZXdfY29tcHJlc3Npb249Y29tcDsKKwkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCWlmIChzLT5zMy0+dG1wLm5ld19jb21wcmVzc2lvbiA9PSBOVUxMKQorCQkJeworCQkJYWw9U1NMX0FEX0lOVEVSTkFMX0VSUk9SOworCQkJU1NMZXJyKFNTTF9GX1NTTDNfR0VUX0NMSUVOVF9IRUxMTyxTU0xfUl9JTlZBTElEX0NPTVBSRVNTSU9OX0FMR09SSVRITSk7CisJCQlnb3RvIGZfZXJyOworCQkJfQorCQkvKiBMb29rIGZvciByZXN1bWVkIG1ldGhvZCBpbiBjb21wcmVzc2lvbiBsaXN0ICovCisJCWZvciAobSA9IDA7IG0gPCBpOyBtKyspCisJCQl7CisJCQlpZiAocVttXSA9PSBjb21wX2lkKQorCQkJCWJyZWFrOworCQkJfQorCQlpZiAobSA+PSBpKQorCQkJeworCQkJYWw9U1NMX0FEX0lMTEVHQUxfUEFSQU1FVEVSOworCQkJU1NMZXJyKFNTTF9GX1NTTDNfR0VUX0NMSUVOVF9IRUxMTyxTU0xfUl9SRVFVSVJFRF9DT01QUkVTU1NJT05fQUxHT1JJVEhNX01JU1NJTkcpOworCQkJZ290byBmX2VycjsKKwkJCX0KKwkJfQorCWVsc2UgaWYgKHMtPmhpdCkKKwkJY29tcCA9IE5VTEw7CisJZWxzZSBpZiAoIShzLT5vcHRpb25zICYgU1NMX09QX05PX0NPTVBSRVNTSU9OKSAmJiBzLT5jdHgtPmNvbXBfbWV0aG9kcykKIAkJeyAvKiBTZWUgaWYgd2UgaGF2ZSBhIG1hdGNoICovCiAJCWludCBtLG5uLG8sdixkb25lPTA7CiAKQEAgLTEwMjAsMjIgKzExNzUsMTUgQEAKIAkJZWxzZQogCQkJY29tcD1OVUxMOwogCQl9Ci0jZW5kaWYKLQotCS8qIFRMUyBkb2VzIG5vdCBtaW5kIGlmIHRoZXJlIGlzIGV4dHJhIHN0dWZmICovCi0jaWYgMCAgIC8qIFNTTCAzLjAgZG9lcyBub3QgbWluZCBlaXRoZXIsIHNvIHdlIHNob3VsZCBkaXNhYmxlIHRoaXMgdGVzdAotICAgICAgICAgKiAod2FzIGVuYWJsZWQgaW4gMC45LjZkIHRocm91Z2ggMC45LjZqIGFuZCAwLjkuNyB0aHJvdWdoIDAuOS43YiwKLSAgICAgICAgICogaW4gZWFybGllciBTU0xlYXkvT3BlblNTTCByZWxlYXNlcyB0aGlzIHRlc3QgZXhpc3RlZCBidXQgd2FzIGJ1Z2d5KSAqLwotCWlmIChzLT52ZXJzaW9uID09IFNTTDNfVkVSU0lPTikKKyNlbHNlCisJLyogSWYgY29tcHJlc3Npb24gaXMgZGlzYWJsZWQgd2UnZCBiZXR0ZXIgbm90IHRyeSB0byByZXN1bWUgYSBzZXNzaW9uCisJICogdXNpbmcgY29tcHJlc3Npb24uCisJICovCisJaWYgKHMtPnNlc3Npb24tPmNvbXByZXNzX21ldGggIT0gMCkKIAkJewotCQlpZiAocCA8IChkK24pKQotCQkJewotCQkJLyogd3JvbmcgbnVtYmVyIG9mIGJ5dGVzLAotCQkJICogdGhlcmUgY291bGQgYmUgbW9yZSB0byBmb2xsb3cgKi8KLQkJCWFsPVNTTF9BRF9ERUNPREVfRVJST1I7Ci0JCQlTU0xlcnIoU1NMX0ZfU1NMM19HRVRfQ0xJRU5UX0hFTExPLFNTTF9SX0xFTkdUSF9NSVNNQVRDSCk7Ci0JCQlnb3RvIGZfZXJyOwotCQkJfQorCQlhbD1TU0xfQURfSU5URVJOQUxfRVJST1I7CisJCVNTTGVycihTU0xfRl9TU0wzX0dFVF9DTElFTlRfSEVMTE8sU1NMX1JfSU5DT05TSVNURU5UX0NPTVBSRVNTSU9OKTsKKwkJZ290byBmX2VycjsKIAkJfQogI2VuZGlmCiAKQEAgLTEwODQsNyArMTIzMiw3IEBACiAJCQlmb3IgKGk9MDsgaTxza19TU0xfQ0lQSEVSX251bShzayk7IGkrKykKIAkJCQl7CiAJCQkJYz1za19TU0xfQ0lQSEVSX3ZhbHVlKHNrLGkpOwotCQkJCWlmIChjLT5hbGdvcml0aG1zICYgU1NMX2VOVUxMKQorCQkJCWlmIChjLT5hbGdvcml0aG1fZW5jICYgU1NMX2VOVUxMKQogCQkJCQluYz1jOwogCQkJCWlmIChTU0xfQ19JU19FWFBPUlQoYykpCiAJCQkJCWVjPWM7CkBAIC0xMTAwLDYgKzEyNDgsOSBAQAogI2VuZGlmCiAJCXMtPnMzLT50bXAubmV3X2NpcGhlcj1zLT5zZXNzaW9uLT5jaXBoZXI7CiAJCX0KKworCWlmICghc3NsM19kaWdlc3RfY2FjaGVkX3JlY29yZHMocykpCisJCWdvdG8gZl9lcnI7CiAJCiAJLyogd2Ugbm93IGhhdmUgdGhlIGZvbGxvd2luZyBzZXR1cC4gCiAJICogY2xpZW50X3JhbmRvbQpAQCAtMTEyOCwxNiArMTI3OSwyMiBAQAogCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKIAl1bnNpZ25lZCBjaGFyICpwLCpkOwogCWludCBpLHNsOwotCXVuc2lnbmVkIGxvbmcgbCxUaW1lOworCXVuc2lnbmVkIGxvbmcgbDsKKyNpZmRlZiBPUEVOU1NMX05PX1RMU0VYVAorCXVuc2lnbmVkIGxvbmcgVGltZTsKKyNlbmRpZgogCiAJaWYgKHMtPnN0YXRlID09IFNTTDNfU1RfU1dfU1JWUl9IRUxMT19BKQogCQl7CiAJCWJ1Zj0odW5zaWduZWQgY2hhciAqKXMtPmluaXRfYnVmLT5kYXRhOworI2lmZGVmIE9QRU5TU0xfTk9fVExTRVhUCiAJCXA9cy0+czMtPnNlcnZlcl9yYW5kb207CisJCS8qIEdlbmVyYXRlIHNlcnZlcl9yYW5kb20gaWYgaXQgd2FzIG5vdCBuZWVkZWQgcHJldmlvdXNseSAqLwogCQlUaW1lPSh1bnNpZ25lZCBsb25nKXRpbWUoTlVMTCk7CQkJLyogVGltZSAqLwogCQlsMm4oVGltZSxwKTsKIAkJaWYgKFJBTkRfcHNldWRvX2J5dGVzKHAsU1NMM19SQU5ET01fU0laRS00KSA8PSAwKQogCQkJcmV0dXJuIC0xOworI2VuZGlmCiAJCS8qIERvIHRoZSBtZXNzYWdlIHR5cGUgYW5kIGxlbmd0aCBsYXN0ICovCiAJCWQ9cD0gJihidWZbNF0pOwogCkBAIC0xMTkxLDYgKzEzNDgsMTEgQEAKIAkJCSoocCsrKT1zLT5zMy0+dG1wLm5ld19jb21wcmVzc2lvbi0+aWQ7CiAjZW5kaWYKICNpZm5kZWYgT1BFTlNTTF9OT19UTFNFWFQKKwkJaWYgKHNzbF9wcmVwYXJlX3NlcnZlcmhlbGxvX3Rsc2V4dChzKSA8PSAwKQorCQkJeworCQkJU1NMZXJyKFNTTF9GX1NTTDNfU0VORF9TRVJWRVJfSEVMTE8sU1NMX1JfU0VSVkVSSEVMTE9fVExTRVhUKTsKKwkJCXJldHVybiAtMTsKKwkJCX0KIAkJaWYgKChwID0gc3NsX2FkZF9zZXJ2ZXJoZWxsb190bHNleHQocywgcCwgYnVmK1NTTDNfUlRfTUFYX1BMQUlOX0xFTkdUSCkpID09IE5VTEwpCiAJCQl7CiAJCQlTU0xlcnIoU1NMX0ZfU1NMM19TRU5EX1NFUlZFUl9IRUxMTyxFUlJfUl9JTlRFUk5BTF9FUlJPUik7CkBAIC0xMjcwLDcgKzE0MzIsNyBAQAogCUVWUF9NRF9DVFhfaW5pdCgmbWRfY3R4KTsKIAlpZiAocy0+c3RhdGUgPT0gU1NMM19TVF9TV19LRVlfRVhDSF9BKQogCQl7Ci0JCXR5cGU9cy0+czMtPnRtcC5uZXdfY2lwaGVyLT5hbGdvcml0aG1zICYgU1NMX01LRVlfTUFTSzsKKwkJdHlwZT1zLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobV9ta2V5OwogCQljZXJ0PXMtPmNlcnQ7CiAKIAkJYnVmPXMtPmluaXRfYnVmOwpAQCAtMTM2NSw3ICsxNTI3LDcgQEAKIAkJZWxzZSAKICNlbmRpZgogI2lmbmRlZiBPUEVOU1NMX05PX0VDREgKLQkJCWlmICh0eXBlICYgU1NMX2tFQ0RIRSkKKwkJCWlmICh0eXBlICYgU1NMX2tFRUNESCkKIAkJCXsKIAkJCWNvbnN0IEVDX0dST1VQICpncm91cDsKIApAQCAtMTQzNSw3ICsxNTk3LDcgQEAKIAkJCSAqIHN1cHBvcnRlZCBuYW1lZCBjdXJ2ZXMsIGN1cnZlX2lkIGlzIG5vbi16ZXJvLgogCQkJICovCiAJCQlpZiAoKGN1cnZlX2lkID0gCi0JCQkgICAgbmlkMmN1cnZlX2lkKEVDX0dST1VQX2dldF9jdXJ2ZV9uYW1lKGdyb3VwKSkpCisJCQkgICAgdGxzMV9lY19uaWQyY3VydmVfaWQoRUNfR1JPVVBfZ2V0X2N1cnZlX25hbWUoZ3JvdXApKSkKIAkJCSAgICA9PSAwKQogCQkJCXsKIAkJCQlTU0xlcnIoU1NMX0ZfU1NMM19TRU5EX1NFUlZFUl9LRVlfRVhDSEFOR0UsU1NMX1JfVU5TVVBQT1JURURfRUxMSVBUSUNfQ1VSVkUpOwpAQCAtMTQ5Miw2ICsxNjU0LDE0IEBACiAJCQl9CiAJCWVsc2UgCiAjZW5kaWYgLyogIU9QRU5TU0xfTk9fRUNESCAqLworI2lmbmRlZiBPUEVOU1NMX05PX1BTSworCQkJaWYgKHR5cGUgJiBTU0xfa1BTSykKKwkJCQl7CisJCQkJLyogcmVzZXJ2ZSBzaXplIGZvciByZWNvcmQgbGVuZ3RoIGFuZCBQU0sgaWRlbnRpdHkgaGludCovCisJCQkJbis9MitzdHJsZW4ocy0+Y3R4LT5wc2tfaWRlbnRpdHlfaGludCk7CisJCQkJfQorCQkJZWxzZQorI2VuZGlmIC8qICFPUEVOU1NMX05PX1BTSyAqLwogCQkJewogCQkJYWw9U1NMX0FEX0hBTkRTSEFLRV9GQUlMVVJFOwogCQkJU1NMZXJyKFNTTF9GX1NTTDNfU0VORF9TRVJWRVJfS0VZX0VYQ0hBTkdFLFNTTF9SX1VOS05PV05fS0VZX0VYQ0hBTkdFX1RZUEUpOwpAQCAtMTUwMyw3ICsxNjczLDggQEAKIAkJCW4rPTIrbnJbaV07CiAJCQl9CiAKLQkJaWYgKCEocy0+czMtPnRtcC5uZXdfY2lwaGVyLT5hbGdvcml0aG1zICYgU1NMX2FOVUxMKSkKKwkJaWYgKCEocy0+czMtPnRtcC5uZXdfY2lwaGVyLT5hbGdvcml0aG1fYXV0aCAmIFNTTF9hTlVMTCkKKwkJCSYmICEocy0+czMtPnRtcC5uZXdfY2lwaGVyLT5hbGdvcml0aG1fbWtleSAmIFNTTF9rUFNLKSkKIAkJCXsKIAkJCWlmICgocGtleT1zc2xfZ2V0X3NpZ25fcGtleShzLHMtPnMzLT50bXAubmV3X2NpcGhlcikpCiAJCQkJPT0gTlVMTCkKQEAgLTE1MzUsNyArMTcwNiw3IEBACiAJCQl9CiAKICNpZm5kZWYgT1BFTlNTTF9OT19FQ0RICi0JCWlmICh0eXBlICYgU1NMX2tFQ0RIRSkgCisJCWlmICh0eXBlICYgU1NMX2tFRUNESCkgCiAJCQl7CiAJCQkvKiBYWFg6IEZvciBub3csIHdlIG9ubHkgc3VwcG9ydCBuYW1lZCAobm90IGdlbmVyaWMpIGN1cnZlcy4KIAkJCSAqIEluIHRoaXMgc2l0dWF0aW9uLCB0aGUgc2VydmVyS2V5RXhjaGFuZ2UgbWVzc2FnZSBoYXM6CkBAIC0xNTU5LDYgKzE3MzAsMTYgQEAKIAkJCX0KICNlbmRpZgogCisjaWZuZGVmIE9QRU5TU0xfTk9fUFNLCisJCWlmICh0eXBlICYgU1NMX2tQU0spCisJCQl7CisJCQkvKiBjb3B5IFBTSyBpZGVudGl0eSBoaW50ICovCisJCQlzMm4oc3RybGVuKHMtPmN0eC0+cHNrX2lkZW50aXR5X2hpbnQpLCBwKTsgCisJCQlzdHJuY3B5KChjaGFyICopcCwgcy0+Y3R4LT5wc2tfaWRlbnRpdHlfaGludCwgc3RybGVuKHMtPmN0eC0+cHNrX2lkZW50aXR5X2hpbnQpKTsKKwkJCXArPXN0cmxlbihzLT5jdHgtPnBza19pZGVudGl0eV9oaW50KTsKKwkJCX0KKyNlbmRpZgorCiAJCS8qIG5vdCBhbm9ueW1vdXMgKi8KIAkJaWYgKHBrZXkgIT0gTlVMTCkKIAkJCXsKQEAgLTE1NzEsOCArMTc1Miw2IEBACiAJCQkJaj0wOwogCQkJCWZvciAobnVtPTI7IG51bSA+IDA7IG51bS0tKQogCQkJCQl7Ci0JCQkJCUVWUF9NRF9DVFhfc2V0X2ZsYWdzKCZtZF9jdHgsCi0JCQkJCQlFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpOwogCQkJCQlFVlBfRGlnZXN0SW5pdF9leCgmbWRfY3R4LChudW0gPT0gMikKIAkJCQkJCT9zLT5jdHgtPm1kNTpzLT5jdHgtPnNoYTEsIE5VTEwpOwogCQkJCQlFVlBfRGlnZXN0VXBkYXRlKCZtZF9jdHgsJihzLT5zMy0+Y2xpZW50X3JhbmRvbVswXSksU1NMM19SQU5ET01fU0laRSk7CkBAIC0xNzU2LDcgKzE5MzUsNyBAQAogCXsKIAlpbnQgaSxhbCxvazsKIAlsb25nIG47Ci0JdW5zaWduZWQgbG9uZyBsOworCXVuc2lnbmVkIGxvbmcgYWxnX2s7CiAJdW5zaWduZWQgY2hhciAqcDsKICNpZm5kZWYgT1BFTlNTTF9OT19SU0EKIAlSU0EgKnJzYT1OVUxMOwpAQCAtMTc2Nyw3ICsxOTQ2LDcgQEAKIAlESCAqZGhfc3J2cjsKICNlbmRpZgogI2lmbmRlZiBPUEVOU1NMX05PX0tSQjUKLSAgICAgICAgS1NTTF9FUlIga3NzbF9lcnI7CisJS1NTTF9FUlIga3NzbF9lcnI7CiAjZW5kaWYgLyogT1BFTlNTTF9OT19LUkI1ICovCiAKICNpZm5kZWYgT1BFTlNTTF9OT19FQ0RICkBAIC0xNzg3LDEwICsxOTY2LDEwIEBACiAJaWYgKCFvaykgcmV0dXJuKChpbnQpbik7CiAJcD0odW5zaWduZWQgY2hhciAqKXMtPmluaXRfbXNnOwogCi0JbD1zLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobXM7CisJYWxnX2s9cy0+czMtPnRtcC5uZXdfY2lwaGVyLT5hbGdvcml0aG1fbWtleTsKIAogI2lmbmRlZiBPUEVOU1NMX05PX1JTQQotCWlmIChsICYgU1NMX2tSU0EpCisJaWYgKGFsZ19rICYgU1NMX2tSU0EpCiAJCXsKIAkJLyogRklYIFRISVMgVVAgRUFZIEVBWSBFQVkgRUFZICovCiAJCWlmIChzLT5zMy0+dG1wLnVzZV9yc2FfdG1wKQpAQCAtMTgyMSw5ICsyMDAwLDggQEAKIAkJCXJzYT1wa2V5LT5wa2V5LnJzYTsKIAkJCX0KIAotCQkvKiBUTFMgYW5kIFtpbmNpZGVudGFsbHldIERUTFMsIGluY2x1ZGluZyBwcmUtMC45LjhmICovCi0JCWlmIChzLT52ZXJzaW9uID4gU1NMM19WRVJTSU9OICYmCi0JCSAgICBzLT5jbGllbnRfdmVyc2lvbiAhPSBEVExTMV9CQURfVkVSKQorCQkvKiBUTFMgYW5kIFtpbmNpZGVudGFsbHldIERUTFN7MHhGRUZGfSAqLworCQlpZiAocy0+dmVyc2lvbiA+IFNTTDNfVkVSU0lPTiAmJiBzLT52ZXJzaW9uICE9IERUTFMxX0JBRF9WRVIpCiAJCQl7CiAJCQluMnMocCxpKTsKIAkJCWlmIChuICE9IGkrMikKQEAgLTE4OTcsNyArMjA3NSw3IEBACiAJZWxzZQogI2VuZGlmCiAjaWZuZGVmIE9QRU5TU0xfTk9fREgKLQkJaWYgKGwgJiAoU1NMX2tFREh8U1NMX2tESHJ8U1NMX2tESGQpKQorCQlpZiAoYWxnX2sgJiAoU1NMX2tFREh8U1NMX2tESHJ8U1NMX2tESGQpKQogCQl7CiAJCW4ycyhwLGkpOwogCQlpZiAobiAhPSBpKzIpCkBAIC0xOTYwLDMwICsyMTM4LDMwIEBACiAJZWxzZQogI2VuZGlmCiAjaWZuZGVmIE9QRU5TU0xfTk9fS1JCNQotICAgICAgICBpZiAobCAmIFNTTF9rS1JCNSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAga3JiNV9lcnJvcl9jb2RlCQlrcmI1cmM7CisJaWYgKGFsZ19rICYgU1NMX2tLUkI1KQorCQl7CisJCWtyYjVfZXJyb3JfY29kZQkJa3JiNXJjOwogCQlrcmI1X2RhdGEJCWVuY190aWNrZXQ7CiAJCWtyYjVfZGF0YQkJYXV0aGVudGljYXRvcjsKIAkJa3JiNV9kYXRhCQllbmNfcG1zOwotICAgICAgICAgICAgICAgIEtTU0xfQ1RYCQkqa3NzbF9jdHggPSBzLT5rc3NsX2N0eDsKKwkJS1NTTF9DVFgJCSprc3NsX2N0eCA9IHMtPmtzc2xfY3R4OwogCQlFVlBfQ0lQSEVSX0NUWAkJY2lwaF9jdHg7Ci0JCUVWUF9DSVBIRVIJCSplbmMgPSBOVUxMOworCQljb25zdCBFVlBfQ0lQSEVSCSplbmMgPSBOVUxMOwogCQl1bnNpZ25lZCBjaGFyCQlpdltFVlBfTUFYX0lWX0xFTkdUSF07CiAJCXVuc2lnbmVkIGNoYXIJCXBtc1tTU0xfTUFYX01BU1RFUl9LRVlfTEVOR1RICi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgRVZQX01BWF9CTE9DS19MRU5HVEhdOwotCQlpbnQgICAgICAgICAgICAgICAgICAgICBwYWRsLCBvdXRsOworCQkJCQkgICAgICAgKyBFVlBfTUFYX0JMT0NLX0xFTkdUSF07CisJCWludAkJICAgICBwYWRsLCBvdXRsOwogCQlrcmI1X3RpbWVzdGFtcAkJYXV0aHRpbWUgPSAwOwogCQlrcmI1X3RpY2tldF90aW1lcwl0dGltZXM7CiAKIAkJRVZQX0NJUEhFUl9DVFhfaW5pdCgmY2lwaF9jdHgpOwogCi0gICAgICAgICAgICAgICAgaWYgKCFrc3NsX2N0eCkgIGtzc2xfY3R4ID0ga3NzbF9jdHhfbmV3KCk7CisJCWlmICgha3NzbF9jdHgpICBrc3NsX2N0eCA9IGtzc2xfY3R4X25ldygpOwogCiAJCW4ycyhwLGkpOwogCQllbmNfdGlja2V0Lmxlbmd0aCA9IGk7CiAKLQkJaWYgKG4gPCAoaW50KWVuY190aWNrZXQubGVuZ3RoICsgNikKKwkJaWYgKG4gPCAobG9uZykoZW5jX3RpY2tldC5sZW5ndGggKyA2KSkKIAkJCXsKIAkJCVNTTGVycihTU0xfRl9TU0wzX0dFVF9DTElFTlRfS0VZX0VYQ0hBTkdFLAogCQkJCVNTTF9SX0RBVEFfTEVOR1RIX1RPT19MT05HKTsKQEAgLTE5OTYsNyArMjE3NCw3IEBACiAJCW4ycyhwLGkpOwogCQlhdXRoZW50aWNhdG9yLmxlbmd0aCA9IGk7CiAKLQkJaWYgKG4gPCAoaW50KShlbmNfdGlja2V0Lmxlbmd0aCArIGF1dGhlbnRpY2F0b3IubGVuZ3RoKSArIDYpCisJCWlmIChuIDwgKGxvbmcpKGVuY190aWNrZXQubGVuZ3RoICsgYXV0aGVudGljYXRvci5sZW5ndGggKyA2KSkKIAkJCXsKIAkJCVNTTGVycihTU0xfRl9TU0wzX0dFVF9DTElFTlRfS0VZX0VYQ0hBTkdFLAogCQkJCVNTTF9SX0RBVEFfTEVOR1RIX1RPT19MT05HKTsKQEAgLTIwMjksMTkgKzIyMDcsMTkgQEAKIAkJCWdvdG8gZXJyOwogCQkJfQogCi0gICAgICAgICAgICAgICAgaWYgKChrcmI1cmMgPSBrc3NsX3NnZXRfdGt0KGtzc2xfY3R4LCAmZW5jX3RpY2tldCwgJnR0aW1lcywKKwkJaWYgKChrcmI1cmMgPSBrc3NsX3NnZXRfdGt0KGtzc2xfY3R4LCAmZW5jX3RpY2tldCwgJnR0aW1lcywKIAkJCQkJJmtzc2xfZXJyKSkgIT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKKwkJCXsKICNpZmRlZiBLU1NMX0RFQlVHCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoImtzc2xfc2dldF90a3QgcnRuICVkIFslZF1cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtyYjVyYywga3NzbF9lcnIucmVhc29uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrc3NsX2Vyci50ZXh0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoImtzc2xfZXJyIHRleHQ9ICVzXG4iLCBrc3NsX2Vyci50ZXh0KTsKKwkJCXByaW50Zigia3NzbF9zZ2V0X3RrdCBydG4gJWQgWyVkXVxuIiwKKwkJCQlrcmI1cmMsIGtzc2xfZXJyLnJlYXNvbik7CisJCQlpZiAoa3NzbF9lcnIudGV4dCkKKwkJCQlwcmludGYoImtzc2xfZXJyIHRleHQ9ICVzXG4iLCBrc3NsX2Vyci50ZXh0KTsKICNlbmRpZgkvKiBLU1NMX0RFQlVHICovCi0gICAgICAgICAgICAgICAgICAgICAgICBTU0xlcnIoU1NMX0ZfU1NMM19HRVRfQ0xJRU5UX0tFWV9FWENIQU5HRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3NzbF9lcnIucmVhc29uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyOwotICAgICAgICAgICAgICAgICAgICAgICAgfQorCQkJU1NMZXJyKFNTTF9GX1NTTDNfR0VUX0NMSUVOVF9LRVlfRVhDSEFOR0UsCisJCQkJa3NzbF9lcnIucmVhc29uKTsKKwkJCWdvdG8gZXJyOworCQkJfQogCiAJCS8qICBOb3RlOiBubyBhdXRoZW50aWNhdG9yIGlzIG5vdCBjb25zaWRlcmVkIGFuIGVycm9yLAogCQkqKiAgYnV0IHdpbGwgcmV0dXJuIGF1dGh0aW1lID09IDAuCkBAIC0yMDUwLDI5ICsyMjI4LDI5IEBACiAJCQkJCSZhdXRodGltZSwgJmtzc2xfZXJyKSkgIT0gMCkKIAkJCXsKICNpZmRlZiBLU1NMX0RFQlVHCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoImtzc2xfY2hlY2tfYXV0aGVudCBydG4gJWQgWyVkXVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3JiNXJjLCBrc3NsX2Vyci5yZWFzb24pOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtzc2xfZXJyLnRleHQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50Zigia3NzbF9lcnIgdGV4dD0gJXNcbiIsIGtzc2xfZXJyLnRleHQpOworCQkJcHJpbnRmKCJrc3NsX2NoZWNrX2F1dGhlbnQgcnRuICVkIFslZF1cbiIsCisJCQkJa3JiNXJjLCBrc3NsX2Vyci5yZWFzb24pOworCQkJaWYgKGtzc2xfZXJyLnRleHQpCisJCQkJcHJpbnRmKCJrc3NsX2VyciB0ZXh0PSAlc1xuIiwga3NzbF9lcnIudGV4dCk7CiAjZW5kaWYJLyogS1NTTF9ERUJVRyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgU1NMZXJyKFNTTF9GX1NTTDNfR0VUX0NMSUVOVF9LRVlfRVhDSEFOR0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtzc2xfZXJyLnJlYXNvbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycjsKKwkJCVNTTGVycihTU0xfRl9TU0wzX0dFVF9DTElFTlRfS0VZX0VYQ0hBTkdFLAorCQkJCWtzc2xfZXJyLnJlYXNvbik7CisJCQlnb3RvIGVycjsKIAkJCX0KIAogCQlpZiAoKGtyYjVyYyA9IGtzc2xfdmFsaWRhdGVfdGltZXMoYXV0aHRpbWUsICZ0dGltZXMpKSAhPSAwKQogCQkJewogCQkJU1NMZXJyKFNTTF9GX1NTTDNfR0VUX0NMSUVOVF9LRVlfRVhDSEFOR0UsIGtyYjVyYyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycjsKKwkJCWdvdG8gZXJyOwogCQkJfQogCiAjaWZkZWYgS1NTTF9ERUJVRwotICAgICAgICAgICAgICAgIGtzc2xfY3R4X3Nob3coa3NzbF9jdHgpOworCQlrc3NsX2N0eF9zaG93KGtzc2xfY3R4KTsKICNlbmRpZgkvKiBLU1NMX0RFQlVHICovCiAKIAkJZW5jID0ga3NzbF9tYXBfZW5jKGtzc2xfY3R4LT5lbmN0eXBlKTsKLSAgICAgICAgICAgICAgICBpZiAoZW5jID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyOworCQlpZiAoZW5jID09IE5VTEwpCisJCSAgICBnb3RvIGVycjsKIAogCQltZW1zZXQoaXYsIDAsIHNpemVvZiBpdik7CS8qIHBlciBSRkMgMTUxMCAqLwogCkBAIC0yMTE5LDcgKzIyOTcsNyBAQAogCQkgICAgICogKFBlcmhhcHMgd2Ugc2hvdWxkIGhhdmUgYSBzZXBhcmF0ZSBCVUcgdmFsdWUgZm9yIHRoZSBLZXJiZXJvcyBjaXBoZXIpCiAJCSAgICAgKi8KIAkJICAgIGlmICghKHMtPm9wdGlvbnMgJiBTU0xfT1BfVExTX1JPTExCQUNLX0JVRykpCi0JCSAgICAgICAgeworCQkJewogCQkJU1NMZXJyKFNTTF9GX1NTTDNfR0VUX0NMSUVOVF9LRVlfRVhDSEFOR0UsCiAJCQkgICAgICAgU1NMX0FEX0RFQ09ERV9FUlJPUik7CiAJCQlnb3RvIGVycjsKQEAgLTIxMjgsMzIgKzIzMDYsMzIgQEAKIAogCQlFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjaXBoX2N0eCk7CiAKLSAgICAgICAgICAgICAgICBzLT5zZXNzaW9uLT5tYXN0ZXJfa2V5X2xlbmd0aD0KLSAgICAgICAgICAgICAgICAgICAgICAgIHMtPm1ldGhvZC0+c3NsM19lbmMtPmdlbmVyYXRlX21hc3Rlcl9zZWNyZXQocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+c2Vzc2lvbi0+bWFzdGVyX2tleSwgcG1zLCBvdXRsKTsKKwkJcy0+c2Vzc2lvbi0+bWFzdGVyX2tleV9sZW5ndGg9CisJCQlzLT5tZXRob2QtPnNzbDNfZW5jLT5nZW5lcmF0ZV9tYXN0ZXJfc2VjcmV0KHMsCisJCQkJcy0+c2Vzc2lvbi0+bWFzdGVyX2tleSwgcG1zLCBvdXRsKTsKIAotICAgICAgICAgICAgICAgIGlmIChrc3NsX2N0eC0+Y2xpZW50X3ByaW5jKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbihrc3NsX2N0eC0+Y2xpZW50X3ByaW5jKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbGVuIDwgU1NMX01BWF9LUkI1X1BSSU5DSVBBTF9MRU5HVEggKSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5zZXNzaW9uLT5rcmI1X2NsaWVudF9wcmluY19sZW4gPSBsZW47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweShzLT5zZXNzaW9uLT5rcmI1X2NsaWVudF9wcmluYyxrc3NsX2N0eC0+Y2xpZW50X3ByaW5jLGxlbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkJaWYgKGtzc2xfY3R4LT5jbGllbnRfcHJpbmMpCisJCQl7CisJCQlzaXplX3QgbGVuID0gc3RybGVuKGtzc2xfY3R4LT5jbGllbnRfcHJpbmMpOworCQkJaWYgKCBsZW4gPCBTU0xfTUFYX0tSQjVfUFJJTkNJUEFMX0xFTkdUSCApIAorCQkJCXsKKwkJCQlzLT5zZXNzaW9uLT5rcmI1X2NsaWVudF9wcmluY19sZW4gPSBsZW47CisJCQkJbWVtY3B5KHMtPnNlc3Npb24tPmtyYjVfY2xpZW50X3ByaW5jLGtzc2xfY3R4LT5jbGllbnRfcHJpbmMsbGVuKTsKKwkJCQl9CisJCQl9CiAKIAotICAgICAgICAgICAgICAgIC8qICBXYXMgZG9pbmcga3NzbF9jdHhfZnJlZSgpIGhlcmUsCisJCS8qICBXYXMgZG9pbmcga3NzbF9jdHhfZnJlZSgpIGhlcmUsCiAJCSoqICBidXQgaXQgY2F1c2VkIHByb2JsZW1zIGZvciBhcGFjaGUuCi0gICAgICAgICAgICAgICAgKiogIGtzc2xfY3R4ID0ga3NzbF9jdHhfZnJlZShrc3NsX2N0eCk7Ci0gICAgICAgICAgICAgICAgKiogIGlmIChzLT5rc3NsX2N0eCkgIHMtPmtzc2xfY3R4ID0gTlVMTDsKLSAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIH0KKwkJKiogIGtzc2xfY3R4ID0ga3NzbF9jdHhfZnJlZShrc3NsX2N0eCk7CisJCSoqICBpZiAocy0+a3NzbF9jdHgpICBzLT5rc3NsX2N0eCA9IE5VTEw7CisJCSovCisJCX0KIAllbHNlCiAjZW5kaWYJLyogT1BFTlNTTF9OT19LUkI1ICovCiAKICNpZm5kZWYgT1BFTlNTTF9OT19FQ0RICi0JCWlmICgobCAmIFNTTF9rRUNESCkgfHwgKGwgJiBTU0xfa0VDREhFKSkKKwkJaWYgKGFsZ19rICYgKFNTTF9rRUVDREh8U1NMX2tFQ0RIcnxTU0xfa0VDREhlKSkKIAkJewogCQlpbnQgcmV0ID0gMTsKIAkJaW50IGZpZWxkX3NpemUgPSAwOwpAQCAtMjE2MSwxOCArMjMzOSwxOCBAQAogCQljb25zdCBFQ19HUk9VUCAqZ3JvdXA7CiAJCWNvbnN0IEJJR05VTSAqcHJpdl9rZXk7CiAKLSAgICAgICAgICAgICAgICAvKiBpbml0aWFsaXplIHN0cnVjdHVyZXMgZm9yIHNlcnZlcidzIEVDREgga2V5IHBhaXIgKi8KKwkJLyogaW5pdGlhbGl6ZSBzdHJ1Y3R1cmVzIGZvciBzZXJ2ZXIncyBFQ0RIIGtleSBwYWlyICovCiAJCWlmICgoc3J2cl9lY2RoID0gRUNfS0VZX25ldygpKSA9PSBOVUxMKSAKIAkJCXsKLSAgICAgICAgICAgICAgICAJU1NMZXJyKFNTTF9GX1NTTDNfR0VUX0NMSUVOVF9LRVlfRVhDSEFOR0UsCisJCQlTU0xlcnIoU1NMX0ZfU1NMM19HRVRfQ0xJRU5UX0tFWV9FWENIQU5HRSwKIAkJCSAgICBFUlJfUl9NQUxMT0NfRkFJTFVSRSk7Ci0gICAgICAgICAgICAgICAgCWdvdG8gZXJyOworCQkJZ290byBlcnI7CiAJCQl9CiAKIAkJLyogTGV0J3MgZ2V0IHNlcnZlciBwcml2YXRlIGtleSBhbmQgZ3JvdXAgaW5mb3JtYXRpb24gKi8KLQkJaWYgKGwgJiBTU0xfa0VDREgpIAorCQlpZiAoYWxnX2sgJiAoU1NMX2tFQ0RIcnxTU0xfa0VDREhlKSkKIAkJCXsgCi0gICAgICAgICAgICAgICAgICAgICAgICAvKiB1c2UgdGhlIGNlcnRpZmljYXRlICovCisJCQkvKiB1c2UgdGhlIGNlcnRpZmljYXRlICovCiAJCQl0a2V5ID0gcy0+Y2VydC0+cGtleXNbU1NMX1BLRVlfRUNDXS5wcml2YXRla2V5LT5wa2V5LmVjOwogCQkJfQogCQllbHNlCkBAIC0yMjAyLDIwICsyMzgwLDIwIEBACiAJCQlnb3RvIGVycjsKIAkJCX0KIAotICAgICAgICAgICAgICAgIGlmIChuID09IDBMKSAKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKKwkJaWYgKG4gPT0gMEwpIAorCQkJewogCQkJLyogQ2xpZW50IFB1YmxpY2tleSB3YXMgaW4gQ2xpZW50IENlcnRpZmljYXRlICovCiAKLQkJCSBpZiAobCAmIFNTTF9rRUNESEUpIAorCQkJIGlmIChhbGdfayAmIFNTTF9rRUVDREgpCiAJCQkJIHsKIAkJCQkgYWw9U1NMX0FEX0hBTkRTSEFLRV9GQUlMVVJFOwogCQkJCSBTU0xlcnIoU1NMX0ZfU1NMM19HRVRfQ0xJRU5UX0tFWV9FWENIQU5HRSxTU0xfUl9NSVNTSU5HX1RNUF9FQ0RIX0tFWSk7CiAJCQkJIGdvdG8gZl9lcnI7CiAJCQkJIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKGNsbnRfcHViX3BrZXk9WDUwOV9nZXRfcHVia2V5KHMtPnNlc3Npb24tPnBlZXIpKQorCQkJaWYgKCgoY2xudF9wdWJfcGtleT1YNTA5X2dldF9wdWJrZXkocy0+c2Vzc2lvbi0+cGVlcikpCiAJCQkgICAgPT0gTlVMTCkgfHwgCiAJCQkgICAgKGNsbnRfcHViX3BrZXktPnR5cGUgIT0gRVZQX1BLRVlfRUMpKQotICAgICAgICAgICAgICAgICAgICAgICAgCXsKKwkJCQl7CiAJCQkJLyogWFhYOiBGb3Igbm93LCB3ZSBkbyBub3Qgc3VwcG9ydCBjbGllbnQKIAkJCQkgKiBhdXRoZW50aWNhdGlvbiB1c2luZyBFQ0RIIGNlcnRpZmljYXRlcwogCQkJCSAqIHNvIHRoaXMgYnJhbmNoIChuID09IDBMKSBvZiB0aGUgY29kZSBpcwpAQCAtMjIyNywxMSArMjQwNSwxMSBAQAogCQkJCSAqIHRoZSB0d28gRUNESCBzaGFyZXMgYXJlIGZvciB0aGUgc2FtZQogCQkJCSAqIGdyb3VwLgogCQkJCSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgCWFsPVNTTF9BRF9IQU5EU0hBS0VfRkFJTFVSRTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIAlTU0xlcnIoU1NMX0ZfU1NMM19HRVRfQ0xJRU5UX0tFWV9FWENIQU5HRSwKKwkJCSAgIAlhbD1TU0xfQURfSEFORFNIQUtFX0ZBSUxVUkU7CisJCQkgICAJU1NMZXJyKFNTTF9GX1NTTDNfR0VUX0NMSUVOVF9LRVlfRVhDSEFOR0UsCiAJCQkJICAgIFNTTF9SX1VOQUJMRV9UT19ERUNPREVfRUNESF9DRVJUUyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAJZ290byBmX2VycjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIAl9CisJCQkgICAJZ290byBmX2VycjsKKwkJCSAgIAl9CiAKIAkJCWlmIChFQ19QT0lOVF9jb3B5KGNsbnRfZWNwb2ludCwKIAkJCSAgICBFQ19LRVlfZ2V0MF9wdWJsaWNfa2V5KGNsbnRfcHViX3BrZXktPnBrZXkuZWMpKSA9PSAwKQpAQCAtMjI0MCwxMCArMjQxOCwxMCBAQAogCQkJCQlFUlJfUl9FQ19MSUIpOwogCQkJCWdvdG8gZXJyOwogCQkJCX0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IDI7IC8qIFNraXAgY2VydGlmaWNhdGUgdmVyaWZ5IHByb2Nlc3NpbmcgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICB7CisJCQlyZXQgPSAyOyAvKiBTa2lwIGNlcnRpZmljYXRlIHZlcmlmeSBwcm9jZXNzaW5nICovCisJCQl9CisJCWVsc2UKKwkJCXsKIAkJCS8qIEdldCBjbGllbnQncyBwdWJsaWMga2V5IGZyb20gZW5jb2RlZCBwb2ludAogCQkJICogaW4gdGhlIENsaWVudEtleUV4Y2hhbmdlIG1lc3NhZ2UuCiAJCQkgKi8KQEAgLTIyNTQsMjEgKzI0MzIsMjEgQEAKIAkJCQlnb3RvIGVycjsKIAkJCQl9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdldCBlbmNvZGVkIHBvaW50IGxlbmd0aCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgaSA9ICpwOyAKKwkJCS8qIEdldCBlbmNvZGVkIHBvaW50IGxlbmd0aCAqLworCQkJaSA9ICpwOyAKIAkJCXAgKz0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChFQ19QT0lOVF9vY3QycG9pbnQoZ3JvdXAsIAorCQkJaWYgKEVDX1BPSU5UX29jdDJwb2ludChncm91cCwgCiAJCQkgICAgY2xudF9lY3BvaW50LCBwLCBpLCBibl9jdHgpID09IDApCiAJCQkJewogCQkJCVNTTGVycihTU0xfRl9TU0wzX0dFVF9DTElFTlRfS0VZX0VYQ0hBTkdFLAogCQkJCSAgICBFUlJfUl9FQ19MSUIpOwogCQkJCWdvdG8gZXJyOwogCQkJCX0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIHAgaXMgcG9pbnRpbmcgdG8gc29tZXdoZXJlIGluIHRoZSBidWZmZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIGN1cnJlbnRseSwgc28gc2V0IGl0IHRvIHRoZSBzdGFydCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAqLyAKLSAgICAgICAgICAgICAgICAgICAgICAgIHA9KHVuc2lnbmVkIGNoYXIgKilzLT5pbml0X2J1Zi0+ZGF0YTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkJCS8qIHAgaXMgcG9pbnRpbmcgdG8gc29tZXdoZXJlIGluIHRoZSBidWZmZXIKKwkJCSAqIGN1cnJlbnRseSwgc28gc2V0IGl0IHRvIHRoZSBzdGFydCAKKwkJCSAqLyAKKwkJCXA9KHVuc2lnbmVkIGNoYXIgKilzLT5pbml0X2J1Zi0+ZGF0YTsKKwkJCX0KIAogCQkvKiBDb21wdXRlIHRoZSBzaGFyZWQgcHJlLW1hc3RlciBzZWNyZXQgKi8KIAkJZmllbGRfc2l6ZSA9IEVDX0dST1VQX2dldF9kZWdyZWUoZ3JvdXApOwpAQCAtMjI3OSwyOCArMjQ1NywxOTAgQEAKIAkJCWdvdG8gZXJyOwogCQkJfQogCQlpID0gRUNESF9jb21wdXRlX2tleShwLCAoZmllbGRfc2l6ZSs3KS84LCBjbG50X2VjcG9pbnQsIHNydnJfZWNkaCwgTlVMTCk7Ci0gICAgICAgICAgICAgICAgaWYgKGkgPD0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFNTTGVycihTU0xfRl9TU0wzX0dFVF9DTElFTlRfS0VZX0VYQ0hBTkdFLAorCQlpZiAoaSA8PSAwKQorCQkJeworCQkJU1NMZXJyKFNTTF9GX1NTTDNfR0VUX0NMSUVOVF9LRVlfRVhDSEFOR0UsCiAJCQkgICAgRVJSX1JfRUNESF9MSUIpOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CisJCQlnb3RvIGVycjsKKwkJCX0KIAogCQlFVlBfUEtFWV9mcmVlKGNsbnRfcHViX3BrZXkpOwogCQlFQ19QT0lOVF9mcmVlKGNsbnRfZWNwb2ludCk7Ci0JCWlmIChzcnZyX2VjZGggIT0gTlVMTCkgCi0JCQlFQ19LRVlfZnJlZShzcnZyX2VjZGgpOworCQlFQ19LRVlfZnJlZShzcnZyX2VjZGgpOwogCQlCTl9DVFhfZnJlZShibl9jdHgpOworCQlFQ19LRVlfZnJlZShzLT5zMy0+dG1wLmVjZGgpOworCQlzLT5zMy0+dG1wLmVjZGggPSBOVUxMOyAKIAogCQkvKiBDb21wdXRlIHRoZSBtYXN0ZXIgc2VjcmV0ICovCi0gICAgICAgICAgICAgICAgcy0+c2Vzc2lvbi0+bWFzdGVyX2tleV9sZW5ndGggPSBzLT5tZXRob2QtPnNzbDNfZW5jLT4gXAorCQlzLT5zZXNzaW9uLT5tYXN0ZXJfa2V5X2xlbmd0aCA9IHMtPm1ldGhvZC0+c3NsM19lbmMtPiBcCiAJCSAgICBnZW5lcmF0ZV9tYXN0ZXJfc2VjcmV0KHMsIHMtPnNlc3Npb24tPm1hc3Rlcl9rZXksIHAsIGkpOwogCQkKLSAgICAgICAgICAgICAgICBPUEVOU1NMX2NsZWFuc2UocCwgaSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChyZXQpOworCQlPUEVOU1NMX2NsZWFuc2UocCwgaSk7CisJCXJldHVybiAocmV0KTsKIAkJfQogCWVsc2UKICNlbmRpZgorI2lmbmRlZiBPUEVOU1NMX05PX1BTSworCQlpZiAoYWxnX2sgJiBTU0xfa1BTSykKKwkJCXsKKwkJCXVuc2lnbmVkIGNoYXIgKnQgPSBOVUxMOworCQkJdW5zaWduZWQgY2hhciBwc2tfb3JfcHJlX21zW1BTS19NQVhfUFNLX0xFTioyKzRdOworCQkJdW5zaWduZWQgaW50IHByZV9tc19sZW4gPSAwLCBwc2tfbGVuID0gMDsKKwkJCWludCBwc2tfZXJyID0gMTsKKwkJCWNoYXIgdG1wX2lkW1BTS19NQVhfSURFTlRJVFlfTEVOKzFdOworCisJCQlhbD1TU0xfQURfSEFORFNIQUtFX0ZBSUxVUkU7CisKKwkJCW4ycyhwLGkpOworCQkJaWYgKG4gIT0gaSsyKQorCQkJCXsKKwkJCQlTU0xlcnIoU1NMX0ZfU1NMM19HRVRfQ0xJRU5UX0tFWV9FWENIQU5HRSwKKwkJCQkJU1NMX1JfTEVOR1RIX01JU01BVENIKTsKKwkJCQlnb3RvIHBza19lcnI7CisJCQkJfQorCQkJaWYgKGkgPiBQU0tfTUFYX0lERU5USVRZX0xFTikKKwkJCQl7CisJCQkJU1NMZXJyKFNTTF9GX1NTTDNfR0VUX0NMSUVOVF9LRVlfRVhDSEFOR0UsCisJCQkJCVNTTF9SX0RBVEFfTEVOR1RIX1RPT19MT05HKTsKKwkJCQlnb3RvIHBza19lcnI7CisJCQkJfQorCQkJaWYgKHMtPnBza19zZXJ2ZXJfY2FsbGJhY2sgPT0gTlVMTCkKKwkJCQl7CisJCQkJU1NMZXJyKFNTTF9GX1NTTDNfR0VUX0NMSUVOVF9LRVlfRVhDSEFOR0UsCisJCQkJICAgICAgIFNTTF9SX1BTS19OT19TRVJWRVJfQ0IpOworCQkJCWdvdG8gcHNrX2VycjsKKwkJCQl9CisKKwkJCS8qIENyZWF0ZSBndWFyYW50ZWVkIE5VTEwtdGVybWluYXRlZCBpZGVudGl0eQorCQkJICogc3RyaW5nIGZvciB0aGUgY2FsbGJhY2sgKi8KKwkJCW1lbWNweSh0bXBfaWQsIHAsIGkpOworCQkJbWVtc2V0KHRtcF9pZCtpLCAwLCBQU0tfTUFYX0lERU5USVRZX0xFTisxLWkpOworCQkJcHNrX2xlbiA9IHMtPnBza19zZXJ2ZXJfY2FsbGJhY2socywgdG1wX2lkLAorCQkJCXBza19vcl9wcmVfbXMsIHNpemVvZihwc2tfb3JfcHJlX21zKSk7CisJCQlPUEVOU1NMX2NsZWFuc2UodG1wX2lkLCBQU0tfTUFYX0lERU5USVRZX0xFTisxKTsKKworCQkJaWYgKHBza19sZW4gPiBQU0tfTUFYX1BTS19MRU4pCisJCQkJeworCQkJCVNTTGVycihTU0xfRl9TU0wzX0dFVF9DTElFTlRfS0VZX0VYQ0hBTkdFLAorCQkJCQlFUlJfUl9JTlRFUk5BTF9FUlJPUik7CisJCQkJZ290byBwc2tfZXJyOworCQkJCX0KKwkJCWVsc2UgaWYgKHBza19sZW4gPT0gMCkKKwkJCQl7CisJCQkJLyogUFNLIHJlbGF0ZWQgdG8gdGhlIGdpdmVuIGlkZW50aXR5IG5vdCBmb3VuZCAqLworCQkJCVNTTGVycihTU0xfRl9TU0wzX0dFVF9DTElFTlRfS0VZX0VYQ0hBTkdFLAorCQkJCSAgICAgICBTU0xfUl9QU0tfSURFTlRJVFlfTk9UX0ZPVU5EKTsKKwkJCQlhbD1TU0xfQURfVU5LTk9XTl9QU0tfSURFTlRJVFk7CisJCQkJZ290byBwc2tfZXJyOworCQkJCX0KKworCQkJLyogY3JlYXRlIFBTSyBwcmVfbWFzdGVyX3NlY3JldCAqLworCQkJcHJlX21zX2xlbj0yK3Bza19sZW4rMitwc2tfbGVuOworCQkJdCA9IHBza19vcl9wcmVfbXM7CisJCQltZW1tb3ZlKHBza19vcl9wcmVfbXMrcHNrX2xlbis0LCBwc2tfb3JfcHJlX21zLCBwc2tfbGVuKTsKKwkJCXMybihwc2tfbGVuLCB0KTsKKwkJCW1lbXNldCh0LCAwLCBwc2tfbGVuKTsKKwkJCXQrPXBza19sZW47CisJCQlzMm4ocHNrX2xlbiwgdCk7CisKKwkJCWlmIChzLT5zZXNzaW9uLT5wc2tfaWRlbnRpdHkgIT0gTlVMTCkKKwkJCQlPUEVOU1NMX2ZyZWUocy0+c2Vzc2lvbi0+cHNrX2lkZW50aXR5KTsKKwkJCXMtPnNlc3Npb24tPnBza19pZGVudGl0eSA9IEJVRl9zdHJkdXAoKGNoYXIgKilwKTsKKwkJCWlmIChzLT5zZXNzaW9uLT5wc2tfaWRlbnRpdHkgPT0gTlVMTCkKKwkJCQl7CisJCQkJU1NMZXJyKFNTTF9GX1NTTDNfR0VUX0NMSUVOVF9LRVlfRVhDSEFOR0UsCisJCQkJCUVSUl9SX01BTExPQ19GQUlMVVJFKTsKKwkJCQlnb3RvIHBza19lcnI7CisJCQkJfQorCisJCQlpZiAocy0+c2Vzc2lvbi0+cHNrX2lkZW50aXR5X2hpbnQgIT0gTlVMTCkKKwkJCQlPUEVOU1NMX2ZyZWUocy0+c2Vzc2lvbi0+cHNrX2lkZW50aXR5X2hpbnQpOworCQkJcy0+c2Vzc2lvbi0+cHNrX2lkZW50aXR5X2hpbnQgPSBCVUZfc3RyZHVwKHMtPmN0eC0+cHNrX2lkZW50aXR5X2hpbnQpOworCQkJaWYgKHMtPmN0eC0+cHNrX2lkZW50aXR5X2hpbnQgIT0gTlVMTCAmJgorCQkJCXMtPnNlc3Npb24tPnBza19pZGVudGl0eV9oaW50ID09IE5VTEwpCisJCQkJeworCQkJCVNTTGVycihTU0xfRl9TU0wzX0dFVF9DTElFTlRfS0VZX0VYQ0hBTkdFLAorCQkJCQlFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CisJCQkJZ290byBwc2tfZXJyOworCQkJCX0KKworCQkJcy0+c2Vzc2lvbi0+bWFzdGVyX2tleV9sZW5ndGg9CisJCQkJcy0+bWV0aG9kLT5zc2wzX2VuYy0+Z2VuZXJhdGVfbWFzdGVyX3NlY3JldChzLAorCQkJCQlzLT5zZXNzaW9uLT5tYXN0ZXJfa2V5LCBwc2tfb3JfcHJlX21zLCBwcmVfbXNfbGVuKTsKKwkJCXBza19lcnIgPSAwOworCQlwc2tfZXJyOgorCQkJT1BFTlNTTF9jbGVhbnNlKHBza19vcl9wcmVfbXMsIHNpemVvZihwc2tfb3JfcHJlX21zKSk7CisJCQlpZiAocHNrX2VyciAhPSAwKQorCQkJCWdvdG8gZl9lcnI7CisJCQl9CisJCWVsc2UKKyNlbmRpZgorCQlpZiAoYWxnX2sgJiBTU0xfa0dPU1QpIAorCQkJeworCQkJaW50IHJldCA9IDA7CisJCQlFVlBfUEtFWV9DVFggKnBrZXlfY3R4OworCQkJRVZQX1BLRVkgKmNsaWVudF9wdWJfcGtleSA9IE5VTEw7CisJCQl1bnNpZ25lZCBjaGFyIHByZW1hc3Rlcl9zZWNyZXRbMzJdLCAqc3RhcnQ7CisJCQlzaXplX3Qgb3V0bGVuPTMyLCBpbmxlbjsJCQkKKworCQkJLyogR2V0IG91ciBjZXJ0aWZpY2F0ZSBwcml2YXRlIGtleSovCisJCQlwa2V5X2N0eCA9IEVWUF9QS0VZX0NUWF9uZXcocy0+Y2VydC0+a2V5LT5wcml2YXRla2V5LE5VTEwpOwkKKwkJCUVWUF9QS0VZX2RlY3J5cHRfaW5pdChwa2V5X2N0eCk7CisJCQkvKiBJZiBjbGllbnQgY2VydGlmaWNhdGUgaXMgcHJlc2VudCBhbmQgaXMgb2YgdGhlIHNhbWUgdHlwZSwgbWF5YmUKKwkJCSAqIHVzZSBpdCBmb3Iga2V5IGV4Y2hhbmdlLiAgRG9uJ3QgbWluZCBlcnJvcnMgZnJvbQorCQkJICogRVZQX1BLRVlfZGVyaXZlX3NldF9wZWVyLCBiZWNhdXNlIGl0IGlzIGNvbXBsZXRlbHkgdmFsaWQgdG8gdXNlCisJCQkgKiBhIGNsaWVudCBjZXJ0aWZpY2F0ZSBmb3IgYXV0aG9yaXphdGlvbiBvbmx5LiAqLworCQkJY2xpZW50X3B1Yl9wa2V5ID0gWDUwOV9nZXRfcHVia2V5KHMtPnNlc3Npb24tPnBlZXIpOworCQkJaWYgKGNsaWVudF9wdWJfcGtleSkKKwkJCQl7CisJCQkJaWYgKEVWUF9QS0VZX2Rlcml2ZV9zZXRfcGVlcihwa2V5X2N0eCwgY2xpZW50X3B1Yl9wa2V5KSA8PSAwKQorCQkJCQlFUlJfY2xlYXJfZXJyb3IoKTsKKwkJCQl9CisJCQkvKiBEZWNyeXB0IHNlc3Npb24ga2V5ICovCisJCQlpZiAoKCpwIT0oIFZfQVNOMV9TRVFVRU5DRXwgVl9BU04xX0NPTlNUUlVDVEVEKSkpIAorCQkJCXsKKwkJCQlTU0xlcnIoU1NMX0ZfU1NMM19HRVRfQ0xJRU5UX0tFWV9FWENIQU5HRSxTU0xfUl9ERUNSWVBUSU9OX0ZBSUxFRCk7CisJCQkJZ290byBnZXJyOworCQkJCX0KKwkJCWlmIChwWzFdID09IDB4ODEpCisJCQkJeworCQkJCXN0YXJ0ID0gcCszOworCQkJCWlubGVuID0gcFsyXTsKKwkJCQl9CisJCQllbHNlIGlmIChwWzFdIDwgMHg4MCkKKwkJCQl7CisJCQkJc3RhcnQgPSBwKzI7CisJCQkJaW5sZW4gPSBwWzFdOworCQkJCX0KKwkJCWVsc2UKKwkJCQl7CisJCQkJU1NMZXJyKFNTTF9GX1NTTDNfR0VUX0NMSUVOVF9LRVlfRVhDSEFOR0UsU1NMX1JfREVDUllQVElPTl9GQUlMRUQpOworCQkJCWdvdG8gZ2VycjsKKwkJCQl9CisJCQlpZiAoRVZQX1BLRVlfZGVjcnlwdChwa2V5X2N0eCxwcmVtYXN0ZXJfc2VjcmV0LCZvdXRsZW4sc3RhcnQsaW5sZW4pIDw9MCkgCisKKwkJCQl7CisJCQkJU1NMZXJyKFNTTF9GX1NTTDNfR0VUX0NMSUVOVF9LRVlfRVhDSEFOR0UsU1NMX1JfREVDUllQVElPTl9GQUlMRUQpOworCQkJCWdvdG8gZ2VycjsKKwkJCQl9CisJCQkvKiBHZW5lcmF0ZSBtYXN0ZXIgc2VjcmV0ICovCisJCQlzLT5zZXNzaW9uLT5tYXN0ZXJfa2V5X2xlbmd0aD0KKwkJCQlzLT5tZXRob2QtPnNzbDNfZW5jLT5nZW5lcmF0ZV9tYXN0ZXJfc2VjcmV0KHMsCisJCQkJCXMtPnNlc3Npb24tPm1hc3Rlcl9rZXkscHJlbWFzdGVyX3NlY3JldCwzMik7CisJCQkvKiBDaGVjayBpZiBwdWJrZXkgZnJvbSBjbGllbnQgY2VydGlmaWNhdGUgd2FzIHVzZWQgKi8KKwkJCWlmIChFVlBfUEtFWV9DVFhfY3RybChwa2V5X2N0eCwgLTEsIC0xLCBFVlBfUEtFWV9DVFJMX1BFRVJfS0VZLCAyLCBOVUxMKSA+IDApCisJCQkJcmV0ID0gMjsKKwkJCWVsc2UKKwkJCQlyZXQgPSAxOworCQlnZXJyOgorCQkJRVZQX1BLRVlfZnJlZShjbGllbnRfcHViX3BrZXkpOworCQkJRVZQX1BLRVlfQ1RYX2ZyZWUocGtleV9jdHgpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCQkJZWxzZQorCQkJCWdvdG8gZXJyOworCQkJfQorCQllbHNlCiAJCXsKIAkJYWw9U1NMX0FEX0hBTkRTSEFLRV9GQUlMVVJFOwogCQlTU0xlcnIoU1NMX0ZfU1NMM19HRVRfQ0xJRU5UX0tFWV9FWENIQU5HRSwKQEAgLTIzOTAsMTUgKzI3MzAsMjUgQEAKIAogCS8qIHdlIG5vdyBoYXZlIGEgc2lnbmF0dXJlIHRoYXQgd2UgbmVlZCB0byB2ZXJpZnkgKi8KIAlwPSh1bnNpZ25lZCBjaGFyICopcy0+aW5pdF9tc2c7Ci0JbjJzKHAsaSk7Ci0Jbi09MjsKLQlpZiAoaSA+IG4pCisJLyogQ2hlY2sgZm9yIGJyb2tlbiBpbXBsZW1lbnRhdGlvbnMgb2YgR09TVCBjaXBoZXJzdWl0ZXMgKi8KKwkvKiBJZiBrZXkgaXMgR09TVCBhbmQgbiBpcyBleGFjdGx5IDY0LCBpdCBpcyBiYXJlCisJICogc2lnbmF0dXJlIHdpdGhvdXQgbGVuZ3RoIGZpZWxkICovCisJaWYgKG49PTY0ICYmIChwa2V5LT50eXBlPT1OSURfaWRfR29zdFIzNDEwXzk0IHx8CisJCXBrZXktPnR5cGUgPT0gTklEX2lkX0dvc3RSMzQxMF8yMDAxKSApCiAJCXsKLQkJU1NMZXJyKFNTTF9GX1NTTDNfR0VUX0NFUlRfVkVSSUZZLFNTTF9SX0xFTkdUSF9NSVNNQVRDSCk7Ci0JCWFsPVNTTF9BRF9ERUNPREVfRVJST1I7Ci0JCWdvdG8gZl9lcnI7Ci0JCX0KLQorCQlpPTY0OworCQl9IAorCWVsc2UgCisJCXsJCisJCW4ycyhwLGkpOworCQluLT0yOworCQlpZiAoaSA+IG4pCisJCQl7CisJCQlTU0xlcnIoU1NMX0ZfU1NMM19HRVRfQ0VSVF9WRVJJRlksU1NMX1JfTEVOR1RIX01JU01BVENIKTsKKwkJCWFsPVNTTF9BRF9ERUNPREVfRVJST1I7CisJCQlnb3RvIGZfZXJyOworCQkJfQorICAgIAl9CiAJaj1FVlBfUEtFWV9zaXplKHBrZXkpOwogCWlmICgoaSA+IGopIHx8IChuID4gaikgfHwgKG4gPD0gMCkpCiAJCXsKQEAgLTI0NjEsNiArMjgxMSwyOCBAQAogCQl9CiAJZWxzZQogI2VuZGlmCisJaWYgKHBrZXktPnR5cGUgPT0gTklEX2lkX0dvc3RSMzQxMF85NCB8fCBwa2V5LT50eXBlID09IE5JRF9pZF9Hb3N0UjM0MTBfMjAwMSkKKwkJeyAgIHVuc2lnbmVkIGNoYXIgc2lnbmF0dXJlWzY0XTsKKwkJCWludCBpZHg7CisJCQlFVlBfUEtFWV9DVFggKnBjdHggPSBFVlBfUEtFWV9DVFhfbmV3KHBrZXksTlVMTCk7CisJCQlFVlBfUEtFWV92ZXJpZnlfaW5pdChwY3R4KTsKKwkJCWlmIChpIT02NCkgeworCQkJCWZwcmludGYoc3RkZXJyLCJHT1NUIHNpZ25hdHVyZSBsZW5ndGggaXMgJWQiLGkpOworCQkJfQkKKwkJCWZvciAoaWR4PTA7aWR4PDY0O2lkeCsrKSB7CisJCQkJc2lnbmF0dXJlWzYzLWlkeF09cFtpZHhdOworCQkJfQkKKwkJCWo9RVZQX1BLRVlfdmVyaWZ5KHBjdHgsc2lnbmF0dXJlLDY0LHMtPnMzLT50bXAuY2VydF92ZXJpZnlfbWQsMzIpOworCQkJRVZQX1BLRVlfQ1RYX2ZyZWUocGN0eCk7CisJCQlpZiAoajw9MCkgCisJCQkJeworCQkJCWFsPVNTTF9BRF9ERUNSWVBUX0VSUk9SOworCQkJCVNTTGVycihTU0xfRl9TU0wzX0dFVF9DRVJUX1ZFUklGWSwKKwkJCQkJU1NMX1JfQkFEX0VDRFNBX1NJR05BVFVSRSk7CisJCQkJZ290byBmX2VycjsKKwkJCQl9CQorCQl9CisJZWxzZQkKIAkJewogCQlTU0xlcnIoU1NMX0ZfU1NMM19HRVRfQ0VSVF9WRVJJRlksRVJSX1JfSU5URVJOQUxfRVJST1IpOwogCQlhbD1TU0xfQURfVU5TVVBQT1JURURfQ0VSVElGSUNBVEU7CkBAIC0yNjQzLDE0ICszMDE1LDE1IEBACiAJaWYgKHMtPnN0YXRlID09IFNTTDNfU1RfU1dfQ0VSVF9BKQogCQl7CiAJCXg9c3NsX2dldF9zZXJ2ZXJfc2VuZF9jZXJ0KHMpOwotCQlpZiAoeCA9PSBOVUxMICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAvKiBWUlM6IGFsbG93IG51bGwgY2VydCBpZiBhdXRoID09IEtSQjUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIChzLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiAoU1NMX01LRVlfTUFTS3xTU0xfQVVUSF9NQVNLKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICE9IChTU0xfYUtSQjV8U1NMX2tLUkI1KSkKKwkJaWYgKHggPT0gTlVMTCkKIAkJCXsKLQkJCVNTTGVycihTU0xfRl9TU0wzX1NFTkRfU0VSVkVSX0NFUlRJRklDQVRFLEVSUl9SX0lOVEVSTkFMX0VSUk9SKTsKLQkJCXJldHVybigwKTsKKwkJCS8qIFZSUzogYWxsb3cgbnVsbCBjZXJ0IGlmIGF1dGggPT0gS1JCNSAqLworCQkJaWYgKChzLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobV9hdXRoICE9IFNTTF9hS1JCNSkgfHwKKwkJCSAgICAocy0+czMtPnRtcC5uZXdfY2lwaGVyLT5hbGdvcml0aG1fbWtleSAmIFNTTF9rS1JCNSkpCisJCQkJeworCQkJCVNTTGVycihTU0xfRl9TU0wzX1NFTkRfU0VSVkVSX0NFUlRJRklDQVRFLEVSUl9SX0lOVEVSTkFMX0VSUk9SKTsKKwkJCQlyZXR1cm4oMCk7CisJCQkJfQogCQkJfQogCiAJCWw9c3NsM19vdXRwdXRfY2VydF9jaGFpbihzLHgpOwpAQCAtMjY2Miw3MCArMzAzNSw2IEBACiAJLyogU1NMM19TVF9TV19DRVJUX0IgKi8KIAlyZXR1cm4oc3NsM19kb193cml0ZShzLFNTTDNfUlRfSEFORFNIQUtFKSk7CiAJfQotCi0KLSNpZm5kZWYgT1BFTlNTTF9OT19FQ0RICi0vKiBUaGlzIGlzIHRoZSBjb21wbGVtZW50IG9mIGN1cnZlX2lkMm5pZCBpbiBzM19jbG50LmMuICovCi1zdGF0aWMgaW50IG5pZDJjdXJ2ZV9pZChpbnQgbmlkKQotewotCS8qIEVDQyBjdXJ2ZXMgZnJvbSBkcmFmdC1pZXRmLXRscy1lY2MtMDEudHh0IChNYXIgMTUsIDIwMDEpCi0JICogKG5vIGNoYW5nZXMgaW4gZHJhZnQtaWV0Zi10bHMtZWNjLTAzLnR4dCBbSnVuZSAyMDAzXSkgKi8KLQlzd2l0Y2ggKG5pZCkgewotCWNhc2UgTklEX3NlY3QxNjNrMTogLyogc2VjdDE2M2sxICgxKSAqLwotCQlyZXR1cm4gMTsKLQljYXNlIE5JRF9zZWN0MTYzcjE6IC8qIHNlY3QxNjNyMSAoMikgKi8KLQkJcmV0dXJuIDI7Ci0JY2FzZSBOSURfc2VjdDE2M3IyOiAvKiBzZWN0MTYzcjIgKDMpICovCi0JCXJldHVybiAzOwotCWNhc2UgTklEX3NlY3QxOTNyMTogLyogc2VjdDE5M3IxICg0KSAqLyAKLQkJcmV0dXJuIDQ7Ci0JY2FzZSBOSURfc2VjdDE5M3IyOiAvKiBzZWN0MTkzcjIgKDUpICovIAotCQlyZXR1cm4gNTsKLQljYXNlIE5JRF9zZWN0MjMzazE6IC8qIHNlY3QyMzNrMSAoNikgKi8KLQkJcmV0dXJuIDY7Ci0JY2FzZSBOSURfc2VjdDIzM3IxOiAvKiBzZWN0MjMzcjEgKDcpICovIAotCQlyZXR1cm4gNzsKLQljYXNlIE5JRF9zZWN0MjM5azE6IC8qIHNlY3QyMzlrMSAoOCkgKi8gCi0JCXJldHVybiA4OwotCWNhc2UgTklEX3NlY3QyODNrMTogLyogc2VjdDI4M2sxICg5KSAqLwotCQlyZXR1cm4gOTsKLQljYXNlIE5JRF9zZWN0MjgzcjE6IC8qIHNlY3QyODNyMSAoMTApICovIAotCQlyZXR1cm4gMTA7Ci0JY2FzZSBOSURfc2VjdDQwOWsxOiAvKiBzZWN0NDA5azEgKDExKSAqLyAKLQkJcmV0dXJuIDExOwotCWNhc2UgTklEX3NlY3Q0MDlyMTogLyogc2VjdDQwOXIxICgxMikgKi8KLQkJcmV0dXJuIDEyOwotCWNhc2UgTklEX3NlY3Q1NzFrMTogLyogc2VjdDU3MWsxICgxMykgKi8gCi0JCXJldHVybiAxMzsKLQljYXNlIE5JRF9zZWN0NTcxcjE6IC8qIHNlY3Q1NzFyMSAoMTQpICovIAotCQlyZXR1cm4gMTQ7Ci0JY2FzZSBOSURfc2VjcDE2MGsxOiAvKiBzZWNwMTYwazEgKDE1KSAqLwotCQlyZXR1cm4gMTU7Ci0JY2FzZSBOSURfc2VjcDE2MHIxOiAvKiBzZWNwMTYwcjEgKDE2KSAqLyAKLQkJcmV0dXJuIDE2OwotCWNhc2UgTklEX3NlY3AxNjByMjogLyogc2VjcDE2MHIyICgxNykgKi8gCi0JCXJldHVybiAxNzsKLQljYXNlIE5JRF9zZWNwMTkyazE6IC8qIHNlY3AxOTJrMSAoMTgpICovCi0JCXJldHVybiAxODsKLQljYXNlIE5JRF9YOV82Ml9wcmltZTE5MnYxOiAvKiBzZWNwMTkycjEgKDE5KSAqLyAKLQkJcmV0dXJuIDE5OwotCWNhc2UgTklEX3NlY3AyMjRrMTogLyogc2VjcDIyNGsxICgyMCkgKi8gCi0JCXJldHVybiAyMDsKLQljYXNlIE5JRF9zZWNwMjI0cjE6IC8qIHNlY3AyMjRyMSAoMjEpICovCi0JCXJldHVybiAyMTsKLQljYXNlIE5JRF9zZWNwMjU2azE6IC8qIHNlY3AyNTZrMSAoMjIpICovIAotCQlyZXR1cm4gMjI7Ci0JY2FzZSBOSURfWDlfNjJfcHJpbWUyNTZ2MTogLyogc2VjcDI1NnIxICgyMykgKi8gCi0JCXJldHVybiAyMzsKLQljYXNlIE5JRF9zZWNwMzg0cjE6IC8qIHNlY3AzODRyMSAoMjQpICovCi0JCXJldHVybiAyNDsKLQljYXNlIE5JRF9zZWNwNTIxcjE6ICAvKiBzZWNwNTIxcjEgKDI1KSAqLwkKLQkJcmV0dXJuIDI1OwotCWRlZmF1bHQ6Ci0JCXJldHVybiAwOwotCX0KLX0KLSNlbmRpZgogI2lmbmRlZiBPUEVOU1NMX05PX1RMU0VYVAogaW50IHNzbDNfc2VuZF9uZXdzZXNzaW9uX3RpY2tldChTU0wgKnMpCiAJewpkaWZmIC0tZ2l0IGEvc3NsL3NzbC5oIGIvc3NsL3NzbC5oCmluZGV4IDRlNDk2NGUuLjc4NTgxNjkgMTAwNjQ0Ci0tLSBhL3NzbC9zc2wuaAorKysgYi9zc2wvc3NsLmgKQEAgLTU2LDYwICs1Niw3IEBACiAgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQogICovCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0gKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0gKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0gKgotICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0gKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotICoKLSAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotICoKLSAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSAqICAgIGFja25vd2xlZGdtZW50OgotICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0gKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKgotICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCi0gKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCi0gKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSAqCi0gKi8KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNjYsNiArMTEzLDMyIEBACiAgKiBFQ0MgY2lwaGVyIHN1aXRlIHN1cHBvcnQgaW4gT3BlblNTTCBvcmlnaW5hbGx5IGRldmVsb3BlZCBieSAKICAqIFNVTiBNSUNST1NZU1RFTVMsIElOQy4sIGFuZCBjb250cmlidXRlZCB0byB0aGUgT3BlblNTTCBwcm9qZWN0LgogICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IDIwMDUgTm9raWEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhlIHBvcnRpb25zIG9mIHRoZSBhdHRhY2hlZCBzb2Z0d2FyZSAoIkNvbnRyaWJ1dGlvbiIpIGlzIGRldmVsb3BlZCBieQorICogTm9raWEgQ29ycG9yYXRpb24gYW5kIGlzIGxpY2Vuc2VkIHB1cnN1YW50IHRvIHRoZSBPcGVuU1NMIG9wZW4gc291cmNlCisgKiBsaWNlbnNlLgorICoKKyAqIFRoZSBDb250cmlidXRpb24sIG9yaWdpbmFsbHkgd3JpdHRlbiBieSBNaWthIEtvdXNhIGFuZCBQYXNpIEVyb25lbiBvZgorICogTm9raWEgQ29ycG9yYXRpb24sIGNvbnNpc3RzIG9mIHRoZSAiUFNLIiAoUHJlLVNoYXJlZCBLZXkpIGNpcGhlcnN1aXRlcworICogc3VwcG9ydCAoc2VlIFJGQyA0Mjc5KSB0byBPcGVuU1NMLgorICoKKyAqIE5vIHBhdGVudCBsaWNlbnNlcyBvciBvdGhlciByaWdodHMgZXhjZXB0IHRob3NlIGV4cHJlc3NseSBzdGF0ZWQgaW4KKyAqIHRoZSBPcGVuU1NMIG9wZW4gc291cmNlIGxpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIGdyYW50ZWQgb3IgcmVjZWl2ZWQKKyAqIGV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsLCBvciBvdGhlcndpc2UuCisgKgorICogTm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgTm9raWEgdGhhdCB0aGUgQ29udHJpYnV0aW9uIGRvZXMgbm90CisgKiBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb2YgYW55IHRoaXJkCisgKiBwYXJ0eSBvciB0aGF0IHRoZSBsaWNlbnNlIHByb3ZpZGVzIHlvdSB3aXRoIGFsbCB0aGUgbmVjZXNzYXJ5IHJpZ2h0cworICogdG8gbWFrZSB1c2Ugb2YgdGhlIENvbnRyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELiBJTgorICogQURESVRJT04gVE8gVEhFIERJU0NMQUlNRVJTIElOQ0xVREVEIElOIFRIRSBMSUNFTlNFLCBOT0tJQQorICogU1BFQ0lGSUNBTExZIERJU0NMQUlNUyBBTlkgTElBQklMSVRZIEZPUiBDTEFJTVMgQlJPVUdIVCBCWSBZT1UgT1IgQU5ZCisgKiBPVEhFUiBFTlRJVFkgQkFTRUQgT04gSU5GUklOR0VNRU5UIE9GIElOVEVMTEVDVFVBTCBQUk9QRVJUWSBSSUdIVFMgT1IKKyAqIE9USEVSV0lTRS4KKyAqLwogCiAjaWZuZGVmIEhFQURFUl9TU0xfSCAKICNkZWZpbmUgSEVBREVSX1NTTF9IIApAQCAtMjQ4LDU2ICsyMjEsODggQEAKICNkZWZpbmUgU1NMX01BWF9LRVlfQVJHX0xFTkdUSAkJCTgKICNkZWZpbmUgU1NMX01BWF9NQVNURVJfS0VZX0xFTkdUSAkJNDgKIAorCiAvKiBUaGVzZSBhcmUgdXNlZCB0byBzcGVjaWZ5IHdoaWNoIGNpcGhlcnMgdG8gdXNlIGFuZCBub3QgdG8gdXNlICovCisKKyNkZWZpbmUgU1NMX1RYVF9FWFA0MAkJIkVYUE9SVDQwIgorI2RlZmluZSBTU0xfVFhUX0VYUDU2CQkiRVhQT1JUNTYiCiAjZGVmaW5lIFNTTF9UWFRfTE9XCQkiTE9XIgogI2RlZmluZSBTU0xfVFhUX01FRElVTQkJIk1FRElVTSIKICNkZWZpbmUgU1NMX1RYVF9ISUdICQkiSElHSCIKICNkZWZpbmUgU1NMX1RYVF9GSVBTCQkiRklQUyIKLSNkZWZpbmUgU1NMX1RYVF9rRlpBCQkia0ZaQSIKLSNkZWZpbmUJU1NMX1RYVF9hRlpBCQkiYUZaQSIKLSNkZWZpbmUgU1NMX1RYVF9lRlpBCQkiZUZaQSIKLSNkZWZpbmUgU1NMX1RYVF9GWkEJCSJGWkEiCisKKyNkZWZpbmUgU1NMX1RYVF9rRlpBCQkia0ZaQSIgLyogdW51c2VkISAqLworI2RlZmluZQlTU0xfVFhUX2FGWkEJCSJhRlpBIiAvKiB1bnVzZWQhICovCisjZGVmaW5lIFNTTF9UWFRfZUZaQQkJImVGWkEiIC8qIHVudXNlZCEgKi8KKyNkZWZpbmUgU1NMX1RYVF9GWkEJCSJGWkEiICAvKiB1bnVzZWQhICovCiAKICNkZWZpbmUJU1NMX1RYVF9hTlVMTAkJImFOVUxMIgogI2RlZmluZQlTU0xfVFhUX2VOVUxMCQkiZU5VTEwiCiAjZGVmaW5lCVNTTF9UWFRfTlVMTAkJIk5VTEwiCiAKLSNkZWZpbmUgU1NMX1RYVF9rS1JCNSAgICAgCSJrS1JCNSIKLSNkZWZpbmUgU1NMX1RYVF9hS1JCNSAgICAgCSJhS1JCNSIKLSNkZWZpbmUgU1NMX1RYVF9LUkI1ICAgICAgCSJLUkI1IgotCiAjZGVmaW5lIFNTTF9UWFRfa1JTQQkJImtSU0EiCi0jZGVmaW5lIFNTTF9UWFRfa0RIcgkJImtESHIiCi0jZGVmaW5lIFNTTF9UWFRfa0RIZAkJImtESGQiCisjZGVmaW5lIFNTTF9UWFRfa0RIcgkJImtESHIiIC8qIG5vIHN1Y2ggY2lwaGVyc3VpdGVzIHN1cHBvcnRlZCEgKi8KKyNkZWZpbmUgU1NMX1RYVF9rREhkCQkia0RIZCIgLyogbm8gc3VjaCBjaXBoZXJzdWl0ZXMgc3VwcG9ydGVkISAqLworI2RlZmluZSBTU0xfVFhUX2tESCAJCSJrREgiICAvKiBubyBzdWNoIGNpcGhlcnN1aXRlcyBzdXBwb3J0ZWQhICovCiAjZGVmaW5lIFNTTF9UWFRfa0VESAkJImtFREgiCisjZGVmaW5lIFNTTF9UWFRfa0tSQjUgICAgIAkia0tSQjUiCisjZGVmaW5lIFNTTF9UWFRfa0VDREhyCQkia0VDREhyIgorI2RlZmluZSBTU0xfVFhUX2tFQ0RIZQkJImtFQ0RIZSIKKyNkZWZpbmUgU1NMX1RYVF9rRUNESAkJImtFQ0RIIgorI2RlZmluZSBTU0xfVFhUX2tFRUNESAkJImtFRUNESCIKKyNkZWZpbmUgU1NMX1RYVF9rUFNLICAgICAgICAgICAgImtQU0siCisjZGVmaW5lIFNTTF9UWFRfa0dPU1QJCSJrR09TVCIKKwogI2RlZmluZQlTU0xfVFhUX2FSU0EJCSJhUlNBIgogI2RlZmluZQlTU0xfVFhUX2FEU1MJCSJhRFNTIgotI2RlZmluZQlTU0xfVFhUX2FESAkJImFESCIKKyNkZWZpbmUJU1NMX1RYVF9hREgJCSJhREgiIC8qIG5vIHN1Y2ggY2lwaGVyc3VpdGVzIHN1cHBvcnRlZCEgKi8KKyNkZWZpbmUJU1NMX1RYVF9hRUNESAkJImFFQ0RIIgorI2RlZmluZSBTU0xfVFhUX2FLUkI1ICAgICAJImFLUkI1IgorI2RlZmluZSBTU0xfVFhUX2FFQ0RTQQkJImFFQ0RTQSIKKyNkZWZpbmUgU1NMX1RYVF9hUFNLICAgICAgICAgICAgImFQU0siCisjZGVmaW5lIFNTTF9UWFRfYUdPU1Q5NAkiYUdPU1Q5NCIKKyNkZWZpbmUgU1NMX1RYVF9hR09TVDAxICJhR09TVDAxIgorI2RlZmluZSBTU0xfVFhUX2FHT1NUICAiYUdPU1QiCisKICNkZWZpbmUJU1NMX1RYVF9EU1MJCSJEU1MiCiAjZGVmaW5lIFNTTF9UWFRfREgJCSJESCIKLSNkZWZpbmUgU1NMX1RYVF9FREgJCSJFREgiCisjZGVmaW5lIFNTTF9UWFRfRURICQkiRURIIiAvKiBzYW1lIGFzICJrRURIOi1BREgiICovCiAjZGVmaW5lIFNTTF9UWFRfQURICQkiQURIIgogI2RlZmluZSBTU0xfVFhUX1JTQQkJIlJTQSIKKyNkZWZpbmUgU1NMX1RYVF9FQ0RICQkiRUNESCIKKyNkZWZpbmUgU1NMX1RYVF9FRUNESAkJIkVFQ0RIIiAvKiBzYW1lIGFzICJrRUVDREg6LUFFQ0RIIiAqLworI2RlZmluZSBTU0xfVFhUX0FFQ0RICQkiQUVDREgiCisjZGVmaW5lIFNTTF9UWFRfRUNEU0EJCSJFQ0RTQSIKKyNkZWZpbmUgU1NMX1RYVF9LUkI1ICAgICAgCSJLUkI1IgorI2RlZmluZSBTU0xfVFhUX1BTSyAgICAgICAgICAgICAiUFNLIgorCiAjZGVmaW5lIFNTTF9UWFRfREVTCQkiREVTIgogI2RlZmluZSBTU0xfVFhUXzNERVMJCSIzREVTIgogI2RlZmluZSBTU0xfVFhUX1JDNAkJIlJDNCIKICNkZWZpbmUgU1NMX1RYVF9SQzIJCSJSQzIiCiAjZGVmaW5lIFNTTF9UWFRfSURFQQkJIklERUEiCiAjZGVmaW5lIFNTTF9UWFRfU0VFRAkJIlNFRUQiCisjZGVmaW5lIFNTTF9UWFRfQUVTMTI4CQkiQUVTMTI4IgorI2RlZmluZSBTU0xfVFhUX0FFUzI1NgkJIkFFUzI1NiIKICNkZWZpbmUgU1NMX1RYVF9BRVMJCSJBRVMiCisjZGVmaW5lIFNTTF9UWFRfQ0FNRUxMSUExMjgJIkNBTUVMTElBMTI4IgorI2RlZmluZSBTU0xfVFhUX0NBTUVMTElBMjU2CSJDQU1FTExJQTI1NiIKICNkZWZpbmUgU1NMX1RYVF9DQU1FTExJQQkiQ0FNRUxMSUEiCisKICNkZWZpbmUgU1NMX1RYVF9NRDUJCSJNRDUiCiAjZGVmaW5lIFNTTF9UWFRfU0hBMQkJIlNIQTEiCi0jZGVmaW5lIFNTTF9UWFRfU0hBCQkiU0hBIgotI2RlZmluZSBTU0xfVFhUX0VYUAkJIkVYUCIKLSNkZWZpbmUgU1NMX1RYVF9FWFBPUlQJCSJFWFBPUlQiCi0jZGVmaW5lIFNTTF9UWFRfRVhQNDAJCSJFWFBPUlQ0MCIKLSNkZWZpbmUgU1NMX1RYVF9FWFA1NgkJIkVYUE9SVDU2IgorI2RlZmluZSBTU0xfVFhUX1NIQQkJIlNIQSIgLyogc2FtZSBhcyAiU0hBMSIgKi8KKyNkZWZpbmUgU1NMX1RYVF9HT1NUOTQJCSJHT1NUOTQiIAorI2RlZmluZSBTU0xfVFhUX0dPU1Q4OU1BQwkJIkdPU1Q4OU1BQyIgCisKICNkZWZpbmUgU1NMX1RYVF9TU0xWMgkJIlNTTHYyIgogI2RlZmluZSBTU0xfVFhUX1NTTFYzCQkiU1NMdjMiCiAjZGVmaW5lIFNTTF9UWFRfVExTVjEJCSJUTFN2MSIKKworI2RlZmluZSBTU0xfVFhUX0VYUAkJIkVYUCIKKyNkZWZpbmUgU1NMX1RYVF9FWFBPUlQJCSJFWFBPUlQiCisKICNkZWZpbmUgU1NMX1RYVF9BTEwJCSJBTEwiCi0jZGVmaW5lIFNTTF9UWFRfRUNDCQkiRUNDZHJhZnQiIC8qIEVDQyBjaXBoZXJzdWl0ZXMgYXJlIG5vdCB5ZXQgb2ZmaWNpYWwgKi8KIAogLyoKICAqIENPTVBMRU1FTlRPRiogZGVmaW5pdGlvbnMuIFRoZXNlIGlkZW50aWZpZXJzIGFyZSB1c2VkIHRvIChkZS1zZWxlY3QpCkBAIC0zMTksNyArMzI0LDEzIEBACiAvKiBUaGUgZm9sbG93aW5nIGNpcGhlciBsaXN0IGlzIHVzZWQgYnkgZGVmYXVsdC4KICAqIEl0IGFsc28gaXMgc3Vic3RpdHV0ZWQgd2hlbiBhbiBhcHBsaWNhdGlvbi1kZWZpbmVkIGNpcGhlciBsaXN0IHN0cmluZwogICogc3RhcnRzIHdpdGggJ0RFRkFVTFQnLiAqLwotI2RlZmluZSBTU0xfREVGQVVMVF9DSVBIRVJfTElTVAkiQUVTOkFMTDohYU5VTEw6IWVOVUxMOitSQzQ6QFNUUkVOR1RIIiAvKiBsb3cgcHJpb3JpdHkgZm9yIFJDNCAqLworI2RlZmluZSBTU0xfREVGQVVMVF9DSVBIRVJfTElTVAkiQUxMOiFhTlVMTDohZU5VTEw6IVNTTHYyIgorLyogQXMgb2YgT3BlblNTTCAxLjAuMCwgc3NsX2NyZWF0ZV9jaXBoZXJfbGlzdCgpIGluIHNzbC9zc2xfY2lwaC5jIGFsd2F5cworICogc3RhcnRzIHdpdGggYSByZWFzb25hYmxlIG9yZGVyLCBhbmQgYWxsIHdlIGhhdmUgdG8gZG8gZm9yIERFRkFVTFQgaXMKKyAqIHRocm93aW5nIG91dCBhbm9ueW1vdXMgYW5kIHVuZW5jcnlwdGVkIGNpcGhlcnN1aXRlcyEKKyAqIChUaGUgbGF0dGVyIGFyZSBub3QgYWN0dWFsbHkgZW5hYmxlZCBieSBBTEwsIGJ1dCAiQUxMOlJTQSIgd291bGQgZW5hYmxlCisgKiBzb21lIG9mIHRoZW0uKQorICovCiAKIC8qIFVzZWQgaW4gU1NMX3NldF9zaHV0ZG93bigpL1NTTF9nZXRfc2h1dGRvd24oKTsgKi8KICNkZWZpbmUgU1NMX1NFTlRfU0hVVERPV04JMQpAQCAtMzQ0LDYgKzM1NSw3IEBACiAgKiAnc3RydWN0IHNzbF9zdCAqJyBmdW5jdGlvbiBwYXJhbWV0ZXJzIHVzZWQgdG8gcHJvdG90eXBlIGNhbGxiYWNrcwogICogaW4gU1NMX0NUWC4gKi8KIHR5cGVkZWYgc3RydWN0IHNzbF9zdCAqc3NsX2Nyb2NrX3N0OwordHlwZWRlZiBzdHJ1Y3QgdGxzX3Nlc3Npb25fdGlja2V0X2V4dF9zdCBUTFNfU0VTU0lPTl9USUNLRVRfRVhUOwogCiAvKiB1c2VkIHRvIGhvbGQgaW5mbyBvbiB0aGUgcGFydGljdWxhciBjaXBoZXJzIHVzZWQgKi8KIHR5cGVkZWYgc3RydWN0IHNzbF9jaXBoZXJfc3QKQEAgLTM1MSwxNyArMzYzLDI1IEBACiAJaW50IHZhbGlkOwogCWNvbnN0IGNoYXIgKm5hbWU7CQkvKiB0ZXh0IG5hbWUgKi8KIAl1bnNpZ25lZCBsb25nIGlkOwkJLyogaWQsIDQgYnl0ZXMsIGZpcnN0IGlzIHZlcnNpb24gKi8KLQl1bnNpZ25lZCBsb25nIGFsZ29yaXRobXM7CS8qIHdoYXQgY2lwaGVycyBhcmUgdXNlZCAqLworCisJLyogY2hhbmdlZCBpbiAwLjkuOTogdGhlc2UgZm91ciB1c2VkIHRvIGJlIHBvcnRpb25zIG9mIGEgc2luZ2xlIHZhbHVlICdhbGdvcml0aG1zJyAqLworCXVuc2lnbmVkIGxvbmcgYWxnb3JpdGhtX21rZXk7CS8qIGtleSBleGNoYW5nZSBhbGdvcml0aG0gKi8KKwl1bnNpZ25lZCBsb25nIGFsZ29yaXRobV9hdXRoOwkvKiBzZXJ2ZXIgYXV0aGVudGljYXRpb24gKi8KKwl1bnNpZ25lZCBsb25nIGFsZ29yaXRobV9lbmM7CS8qIHN5bW1ldHJpYyBlbmNyeXB0aW9uICovCisJdW5zaWduZWQgbG9uZyBhbGdvcml0aG1fbWFjOwkvKiBzeW1tZXRyaWMgYXV0aGVudGljYXRpb24gKi8KKwl1bnNpZ25lZCBsb25nIGFsZ29yaXRobV9zc2w7CS8qIChtYWpvcikgcHJvdG9jb2wgdmVyc2lvbiAqLworCiAJdW5zaWduZWQgbG9uZyBhbGdvX3N0cmVuZ3RoOwkvKiBzdHJlbmd0aCBhbmQgZXhwb3J0IGZsYWdzICovCiAJdW5zaWduZWQgbG9uZyBhbGdvcml0aG0yOwkvKiBFeHRyYSBmbGFncyAqLwogCWludCBzdHJlbmd0aF9iaXRzOwkJLyogTnVtYmVyIG9mIGJpdHMgcmVhbGx5IHVzZWQgKi8KIAlpbnQgYWxnX2JpdHM7CQkJLyogTnVtYmVyIG9mIGJpdHMgZm9yIGFsZ29yaXRobSAqLwotCXVuc2lnbmVkIGxvbmcgbWFzazsJCS8qIHVzZWQgZm9yIG1hdGNoaW5nICovCi0JdW5zaWduZWQgbG9uZyBtYXNrX3N0cmVuZ3RoOwkvKiBhbHNvIHVzZWQgZm9yIG1hdGNoaW5nICovCiAJfSBTU0xfQ0lQSEVSOwogCiBERUNMQVJFX1NUQUNLX09GKFNTTF9DSVBIRVIpCiAKK3R5cGVkZWYgaW50ICgqdGxzX3Nlc3Npb25fdGlja2V0X2V4dF9jYl9mbikoU1NMICpzLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgbGVuLCB2b2lkICphcmcpOwordHlwZWRlZiBpbnQgKCp0bHNfc2Vzc2lvbl9zZWNyZXRfY2JfZm4pKFNTTCAqcywgdm9pZCAqc2VjcmV0LCBpbnQgKnNlY3JldF9sZW4sIFNUQUNLX09GKFNTTF9DSVBIRVIpICpwZWVyX2NpcGhlcnMsIFNTTF9DSVBIRVIgKipjaXBoZXIsIHZvaWQgKmFyZyk7CisKIC8qIFVzZWQgdG8gaG9sZCBmdW5jdGlvbnMgZm9yIFNTTHYyIG9yIFNTTHYzL1RMU3YxIGZ1bmN0aW9ucyAqLwogdHlwZWRlZiBzdHJ1Y3Qgc3NsX21ldGhvZF9zdAogCXsKQEAgLTM4NSwxMiArNDA1LDEyIEBACiAJaW50ICgqc3NsX2Rpc3BhdGNoX2FsZXJ0KShTU0wgKnMpOwogCWxvbmcgKCpzc2xfY3RybCkoU1NMICpzLGludCBjbWQsbG9uZyBsYXJnLHZvaWQgKnBhcmcpOwogCWxvbmcgKCpzc2xfY3R4X2N0cmwpKFNTTF9DVFggKmN0eCxpbnQgY21kLGxvbmcgbGFyZyx2b2lkICpwYXJnKTsKLQlTU0xfQ0lQSEVSICooKmdldF9jaXBoZXJfYnlfY2hhcikoY29uc3QgdW5zaWduZWQgY2hhciAqcHRyKTsKKwljb25zdCBTU0xfQ0lQSEVSICooKmdldF9jaXBoZXJfYnlfY2hhcikoY29uc3QgdW5zaWduZWQgY2hhciAqcHRyKTsKIAlpbnQgKCpwdXRfY2lwaGVyX2J5X2NoYXIpKGNvbnN0IFNTTF9DSVBIRVIgKmNpcGhlcix1bnNpZ25lZCBjaGFyICpwdHIpOwogCWludCAoKnNzbF9wZW5kaW5nKShjb25zdCBTU0wgKnMpOwogCWludCAoKm51bV9jaXBoZXJzKSh2b2lkKTsKLQlTU0xfQ0lQSEVSICooKmdldF9jaXBoZXIpKHVuc2lnbmVkIG5jaXBoZXIpOwotCXN0cnVjdCBzc2xfbWV0aG9kX3N0ICooKmdldF9zc2xfbWV0aG9kKShpbnQgdmVyc2lvbik7CisJY29uc3QgU1NMX0NJUEhFUiAqKCpnZXRfY2lwaGVyKSh1bnNpZ25lZCBuY2lwaGVyKTsKKwljb25zdCBzdHJ1Y3Qgc3NsX21ldGhvZF9zdCAqKCpnZXRfc3NsX21ldGhvZCkoaW50IHZlcnNpb24pOwogCWxvbmcgKCpnZXRfdGltZW91dCkodm9pZCk7CiAJc3RydWN0IHNzbDNfZW5jX21ldGhvZCAqc3NsM19lbmM7IC8qIEV4dHJhIFNTTHYzL1RMUyBzdHVmZiAqLwogCWludCAoKnNzbF92ZXJzaW9uKSh2b2lkKTsKQEAgLTQwMiwxNyArNDIyLDIwIEBACiAgKiBTU0xfU0VTU0lPTl9JRCA6Oj0gU0VRVUVOQ0UgewogICoJdmVyc2lvbiAJCUlOVEVHRVIsCS0tIHN0cnVjdHVyZSB2ZXJzaW9uIG51bWJlcgogICoJU1NMdmVyc2lvbiAJCUlOVEVHRVIsCS0tIFNTTCB2ZXJzaW9uIG51bWJlcgotICoJQ2lwaGVyIAkJCU9DVEVUX1NUUklORywJLS0gdGhlIDMgYnl0ZSBjaXBoZXIgSUQKLSAqCVNlc3Npb25fSUQgCQlPQ1RFVF9TVFJJTkcsCS0tIHRoZSBTZXNzaW9uIElECi0gKglNYXN0ZXJfa2V5IAkJT0NURVRfU1RSSU5HLAktLSB0aGUgbWFzdGVyIGtleQotICoJS1JCNV9wcmluY2lwYWwJCU9DVEVUX1NUUklORwktLSBvcHRpb25hbCBLZXJiZXJvcyBwcmluY2lwYWwKLSAqCUtleV9BcmcgWyAwIF0gSU1QTElDSVQJT0NURVRfU1RSSU5HLAktLSB0aGUgb3B0aW9uYWwgS2V5IGFyZ3VtZW50CisgKglDaXBoZXIgCQkJT0NURVQgU1RSSU5HLAktLSB0aGUgMyBieXRlIGNpcGhlciBJRAorICoJU2Vzc2lvbl9JRCAJCU9DVEVUIFNUUklORywJLS0gdGhlIFNlc3Npb24gSUQKKyAqCU1hc3Rlcl9rZXkgCQlPQ1RFVCBTVFJJTkcsCS0tIHRoZSBtYXN0ZXIga2V5CisgKglLUkI1X3ByaW5jaXBhbAkJT0NURVQgU1RSSU5HCS0tIG9wdGlvbmFsIEtlcmJlcm9zIHByaW5jaXBhbAorICoJS2V5X0FyZyBbIDAgXSBJTVBMSUNJVAlPQ1RFVCBTVFJJTkcsCS0tIHRoZSBvcHRpb25hbCBLZXkgYXJndW1lbnQKICAqCVRpbWUgWyAxIF0gRVhQTElDSVQJSU5URUdFUiwJLS0gb3B0aW9uYWwgU3RhcnQgVGltZQogICoJVGltZW91dCBbIDIgXSBFWFBMSUNJVAlJTlRFR0VSLAktLSBvcHRpb25hbCBUaW1lb3V0IGlucyBzZWNvbmRzCiAgKglQZWVyIFsgMyBdIEVYUExJQ0lUCVg1MDksCQktLSBvcHRpb25hbCBQZWVyIENlcnRpZmljYXRlCi0gKglTZXNzaW9uX0lEX2NvbnRleHQgWyA0IF0gRVhQTElDSVQgT0NURVRfU1RSSU5HLCAgIC0tIHRoZSBTZXNzaW9uIElEIGNvbnRleHQKLSAqCVZlcmlmeV9yZXN1bHQgWyA1IF0gRVhQTElDSVQgSU5URUdFUiAgICAtLSBYNTA5X1ZfLi4uIGNvZGUgZm9yIGBQZWVyJwotICoJQ29tcHJlc3Npb24gWzZdIElNUExJQ0lUIEFTTjFfT0JKRUNUCS0tIGNvbXByZXNzaW9uIE9JRCBYWFhYWAorICoJU2Vzc2lvbl9JRF9jb250ZXh0IFsgNCBdIEVYUExJQ0lUIE9DVEVUIFNUUklORywgICAtLSB0aGUgU2Vzc2lvbiBJRCBjb250ZXh0CisgKglWZXJpZnlfcmVzdWx0IFsgNSBdIEVYUExJQ0lUIElOVEVHRVIsICAgLS0gWDUwOV9WXy4uLiBjb2RlIGZvciBgUGVlcicKKyAqCUhvc3ROYW1lIFsgNiBdIEVYUExJQ0lUIE9DVEVUIFNUUklORywgICAtLSBvcHRpb25hbCBIb3N0TmFtZSBmcm9tIHNlcnZlcm5hbWUgVExTIGV4dGVuc2lvbiAKKyAqCUVDUG9pbnRGb3JtYXRMaXN0IFsgNyBdIE9DVEVUIFNUUklORywgICAgIC0tIG9wdGlvbmFsIEVDIHBvaW50IGZvcm1hdCBsaXN0IGZyb20gVExTIGV4dGVuc2lvbgorICoJUFNLX2lkZW50aXR5X2hpbnQgWyA4IF0gRVhQTElDSVQgT0NURVQgU1RSSU5HLCAtLSBvcHRpb25hbCBQU0sgaWRlbnRpdHkgaGludAorICoJUFNLX2lkZW50aXR5IFsgOSBdIEVYUExJQ0lUIE9DVEVUIFNUUklORyAtLSBvcHRpb25hbCBQU0sgaWRlbnRpdHkKICAqCX0KICAqIExvb2sgaW4gc3NsL3NzbF9hc24xLmMgZm9yIG1vcmUgZGV0YWlscwogICogSSdtIHVzaW5nIEVYUExJQ0lUIHRhZ3Mgc28gSSBjYW4gcmVhZCB0aGUgZGFtbiB0aGluZ3MgdXNpbmcgYXNuMXBhcnNlIDotKS4KQEAgLTQ0MCw3ICs0NjMsMTAgQEAKICAgICAgICAgdW5zaWduZWQgaW50IGtyYjVfY2xpZW50X3ByaW5jX2xlbjsKICAgICAgICAgdW5zaWduZWQgY2hhciBrcmI1X2NsaWVudF9wcmluY1tTU0xfTUFYX0tSQjVfUFJJTkNJUEFMX0xFTkdUSF07CiAjZW5kaWYgLyogT1BFTlNTTF9OT19LUkI1ICovCi0KKyNpZm5kZWYgT1BFTlNTTF9OT19QU0sKKwljaGFyICpwc2tfaWRlbnRpdHlfaGludDsKKwljaGFyICpwc2tfaWRlbnRpdHk7CisjZW5kaWYKIAlpbnQgbm90X3Jlc3VtYWJsZTsKIAogCS8qIFRoZSBjZXJ0IGlzIHRoZSBjZXJ0aWZpY2F0ZSB1c2VkIHRvIGVzdGFibGlzaCB0aGlzIGNvbm5lY3Rpb24gKi8KQEAgLTQ1OSw5ICs0ODUsOSBAQAogCWxvbmcgdGltZW91dDsKIAlsb25nIHRpbWU7CiAKLQlpbnQgY29tcHJlc3NfbWV0aDsJCS8qIE5lZWQgdG8gbG9va3VwIHRoZSBtZXRob2QgKi8KKwl1bnNpZ25lZCBpbnQgY29tcHJlc3NfbWV0aDsJLyogTmVlZCB0byBsb29rdXAgdGhlIG1ldGhvZCAqLwogCi0JU1NMX0NJUEhFUiAqY2lwaGVyOworCWNvbnN0IFNTTF9DSVBIRVIgKmNpcGhlcjsKIAl1bnNpZ25lZCBsb25nIGNpcGhlcl9pZDsJLyogd2hlbiBBU04uMSBsb2FkZWQsIHRoaXMKIAkJCQkJICogbmVlZHMgdG8gYmUgdXNlZCB0byBsb2FkCiAJCQkJCSAqIHRoZSAnY2lwaGVyJyBzdHJ1Y3R1cmUgKi8KQEAgLTQ3NSw2ICs1MDEsMTIgQEAKIAlzdHJ1Y3Qgc3NsX3Nlc3Npb25fc3QgKnByZXYsKm5leHQ7CiAjaWZuZGVmIE9QRU5TU0xfTk9fVExTRVhUCiAJY2hhciAqdGxzZXh0X2hvc3RuYW1lOworI2lmbmRlZiBPUEVOU1NMX05PX0VDCisJc2l6ZV90IHRsc2V4dF9lY3BvaW50Zm9ybWF0bGlzdF9sZW5ndGg7CisJdW5zaWduZWQgY2hhciAqdGxzZXh0X2VjcG9pbnRmb3JtYXRsaXN0OyAvKiBwZWVyJ3MgbGlzdCAqLworCXNpemVfdCB0bHNleHRfZWxsaXB0aWNjdXJ2ZWxpc3RfbGVuZ3RoOworCXVuc2lnbmVkIGNoYXIgKnRsc2V4dF9lbGxpcHRpY2N1cnZlbGlzdDsgLyogcGVlcidzIGxpc3QgKi8KKyNlbmRpZiAvKiBPUEVOU1NMX05PX0VDICovCiAJLyogUkZDNDUwNyBpbmZvICovCiAJdW5zaWduZWQgY2hhciAqdGxzZXh0X3RpY2s7CS8qIFNlc3Npb24gdGlja2V0ICovCiAJc2l6ZV90CXRsc2V4dF90aWNrbGVuOwkJLyogU2Vzc2lvbiB0aWNrZXQgbGVuZ3RoICovCQpAQCAtNTA0LDcgKzUzNiw3IEBACiAKIC8qIFNTTF9PUF9BTEw6IHZhcmlvdXMgYnVnIHdvcmthcm91bmRzIHRoYXQgc2hvdWxkIGJlIHJhdGhlciBoYXJtbGVzcy4KICAqICAgICAgICAgICAgIFRoaXMgdXNlZCB0byBiZSAweDAwMEZGRkZGTCBiZWZvcmUgMC45LjcuICovCi0jZGVmaW5lIFNTTF9PUF9BTEwJCQkJCTB4MDAwMDBGRkZMCisjZGVmaW5lIFNTTF9PUF9BTEwJCQkJCTB4ODAwMDBGRkZMCiAKIC8qIERUTFMgb3B0aW9ucyAqLwogI2RlZmluZSBTU0xfT1BfTk9fUVVFUllfTVRVICAgICAgICAgICAgICAgICAweDAwMDAxMDAwTApAQCAtNTE3LDYgKzU0OSw4IEBACiAKIC8qIEFzIHNlcnZlciwgZGlzYWxsb3cgc2Vzc2lvbiByZXN1bXB0aW9uIG9uIHJlbmVnb3RpYXRpb24gKi8KICNkZWZpbmUgU1NMX09QX05PX1NFU1NJT05fUkVTVU1QVElPTl9PTl9SRU5FR09USUFUSU9OCTB4MDAwMTAwMDBMCisvKiBEb24ndCB1c2UgY29tcHJlc3Npb24gZXZlbiBpZiBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgU1NMX09QX05PX0NPTVBSRVNTSU9OCQkJCTB4MDAwMjAwMDBMCiAvKiBQZXJtaXQgdW5zYWZlIGxlZ2FjeSByZW5lZ290aWF0aW9uICovCiAjZGVmaW5lIFNTTF9PUF9BTExPV19VTlNBRkVfTEVHQUNZX1JFTkVHT1RJQVRJT04JMHgwMDA0MDAwMEwKIC8qIElmIHNldCwgYWx3YXlzIGNyZWF0ZSBhIG5ldyBrZXkgd2hlbiB1c2luZyB0bXBfZWNkaCBwYXJhbWV0ZXJzICovCkBAIC01NDUsNyArNTc5LDExIEBACiAjZGVmaW5lIFNTTF9PUF9QS0NTMV9DSEVDS18yCQkJCTB4MTAwMDAwMDBMCiAjZGVmaW5lIFNTTF9PUF9ORVRTQ0FQRV9DQV9ETl9CVUcJCQkweDIwMDAwMDAwTAogI2RlZmluZSBTU0xfT1BfTkVUU0NBUEVfREVNT19DSVBIRVJfQ0hBTkdFX0JVRwkJMHg0MDAwMDAwMEwKLQorLyogTWFrZSBzZXJ2ZXIgYWRkIHNlcnZlci1oZWxsbyBleHRlbnNpb24gZnJvbSBlYXJseSB2ZXJzaW9uIG9mCisgKiBjcnlwdG9wcm8gZHJhZnQsIHdoZW4gR09TVCBjaXBoZXJzdWl0ZSBpcyBuZWdvdGlhdGVkLiAKKyAqIFJlcXVpcmVkIGZvciBpbnRlcm9wZXJhYmlsaXR5IHdpdGggQ3J5cHRvUHJvIENTUCAzLnggCisgKi8KKyNkZWZpbmUgU1NMX09QX0NSWVBUT1BST19UTFNFWFRfQlVHCQkJMHg4MDAwMDAwMEwKIAogLyogQWxsb3cgU1NMX3dyaXRlKC4uLiwgbikgdG8gcmV0dXJuIHIgd2l0aCAwIDwgciA8IG4gKGkuZS4gcmVwb3J0IHN1Y2Nlc3MKICAqIHdoZW4ganVzdCBhIHNpbmdsZSByZWNvcmQgaGFzIGJlZW4gd3JpdHRlbik6ICovCkBAIC01NjAsOSArNTk4LDEzIEBACiAjZGVmaW5lIFNTTF9NT0RFX0FVVE9fUkVUUlkgMHgwMDAwMDAwNEwKIC8qIERvbid0IGF0dGVtcHQgdG8gYXV0b21hdGljYWxseSBidWlsZCBjZXJ0aWZpY2F0ZSBjaGFpbiAqLwogI2RlZmluZSBTU0xfTU9ERV9OT19BVVRPX0NIQUlOIDB4MDAwMDAwMDhMCisvKiBTYXZlIFJBTSBieSByZWxlYXNpbmcgcmVhZCBhbmQgd3JpdGUgYnVmZmVycyB3aGVuIHRoZXkncmUgZW1wdHkuIChTU0wzIGFuZAorICogVExTIG9ubHkuKSAgIlJlbGVhc2VkIiBidWZmZXJzIGFyZSBwdXQgb250byBhIGZyZWUtbGlzdCBpbiB0aGUgY29udGV4dAorICogb3IganVzdCBmcmVlZCAoZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0J3Mgc2V0dGluZyBmb3IgZnJlZWxpc3RfbWF4X2xlbikuICovCisjZGVmaW5lIFNTTF9NT0RFX1JFTEVBU0VfQlVGRkVSUyAweDAwMDAwMDEwTAogLyogVXNlIHNtYWxsIHJlYWQgYW5kIHdyaXRlIGJ1ZmZlcnM6IChhKSBsYXp5IGFsbG9jYXRlIHJlYWQgYnVmZmVycyBmb3IKICAqIGxhcmdlIGluY29taW5nIHJlY29yZHMsIGFuZCAoYikgbGltaXQgdGhlIHNpemUgb2Ygb3V0Z29pbmcgcmVjb3Jkcy4gKi8KLSNkZWZpbmUgU1NMX01PREVfU01BTExfQlVGRkVSUyAweDAwMDAwMDEwTAorI2RlZmluZSBTU0xfTU9ERV9TTUFMTF9CVUZGRVJTIDB4MDAwMDAwMjBMCiAKIC8qIE5vdGU6IFNTTFtfQ1RYXV9zZXRfe29wdGlvbnMsbW9kZX0gdXNlIHw9IG9wIG9uIHRoZSBwcmV2aW91cyB2YWx1ZSwKICAqIHRoZXkgY2Fubm90IGJlIHVzZWQgdG8gY2xlYXIgYml0cy4gKi8KQEAgLTY0MSwxNyArNjgzLDE4IEBACiAJfSBTU0xfQ09NUDsKIAogREVDTEFSRV9TVEFDS19PRihTU0xfQ09NUCkKK0RFQ0xBUkVfTEhBU0hfT0YoU1NMX1NFU1NJT04pOwogCiBzdHJ1Y3Qgc3NsX2N0eF9zdAogCXsKLQlTU0xfTUVUSE9EICptZXRob2Q7CisJY29uc3QgU1NMX01FVEhPRCAqbWV0aG9kOwogCiAJU1RBQ0tfT0YoU1NMX0NJUEhFUikgKmNpcGhlcl9saXN0OwogCS8qIHNhbWUgYXMgYWJvdmUgYnV0IHNvcnRlZCBmb3IgbG9va3VwICovCiAJU1RBQ0tfT0YoU1NMX0NJUEhFUikgKmNpcGhlcl9saXN0X2J5X2lkOwogCiAJc3RydWN0IHg1MDlfc3RvcmVfc3QgLyogWDUwOV9TVE9SRSAqLyAqY2VydF9zdG9yZTsKLQlzdHJ1Y3QgbGhhc2hfc3QgLyogTEhBU0ggKi8gKnNlc3Npb25zOwkvKiBhIHNldCBvZiBTU0xfU0VTU0lPTnMgKi8KKwlMSEFTSF9PRihTU0xfU0VTU0lPTikgKnNlc3Npb25zOwogCS8qIE1vc3Qgc2Vzc2lvbi1pZHMgdGhhdCB3aWxsIGJlIGNhY2hlZCwgZGVmYXVsdCBpcwogCSAqIFNTTF9TRVNTSU9OX0NBQ0hFX01BWF9TSVpFX0RFRkFVTFQuIDAgaXMgdW5saW1pdGVkLiAqLwogCXVuc2lnbmVkIGxvbmcgc2Vzc2lvbl9jYWNoZV9zaXplOwpAQCAtNzc2LDYgKzgxOSwxMiBAQAogCiAJaW50IHF1aWV0X3NodXRkb3duOwogCisJLyogTWF4aW11bSBhbW91bnQgb2YgZGF0YSB0byBzZW5kIGluIG9uZSBmcmFnbWVudC4KKwkgKiBhY3R1YWwgcmVjb3JkIHNpemUgY2FuIGJlIG1vcmUgdGhhbiB0aGlzIGR1ZSB0bworCSAqIHBhZGRpbmcgYW5kIE1BQyBvdmVyaGVhZHMuCisJICovCisJdW5zaWduZWQgaW50IG1heF9zZW5kX2ZyYWdtZW50OworCiAjaWZuZGVmIE9QRU5TU0xfRU5HSU5FCiAJLyogRW5naW5lIHRvIHBhc3MgcmVxdWVzdHMgZm9yIGNsaWVudCBjZXJ0cyB0bwogCSAqLwpAQCAtNzk0LDE0ICs4NDMsMzMgQEAKIAlpbnQgKCp0bHNleHRfdGlja2V0X2tleV9jYikoU1NMICpzc2wsCiAJCQkJCXVuc2lnbmVkIGNoYXIgKm5hbWUsIHVuc2lnbmVkIGNoYXIgKml2LAogCQkJCQlFVlBfQ0lQSEVSX0NUWCAqZWN0eCwKLQkJCQkJSE1BQ19DVFggKmhjdHgsIGludCBlbmMpOworIAkJCQkJSE1BQ19DVFggKmhjdHgsIGludCBlbmMpOwogCiAJLyogY2VydGlmaWNhdGUgc3RhdHVzIHJlcXVlc3QgaW5mbyAqLwogCS8qIENhbGxiYWNrIGZvciBzdGF0dXMgcmVxdWVzdCAqLwogCWludCAoKnRsc2V4dF9zdGF0dXNfY2IpKFNTTCAqc3NsLCB2b2lkICphcmcpOwogCXZvaWQgKnRsc2V4dF9zdGF0dXNfYXJnOworCisJLyogZHJhZnQtcmVzY29ybGEtdGxzLW9wYXF1ZS1wcmYtaW5wdXQtMDAudHh0IGluZm9ybWF0aW9uICovCisJaW50ICgqdGxzZXh0X29wYXF1ZV9wcmZfaW5wdXRfY2FsbGJhY2spKFNTTCAqLCB2b2lkICpwZWVyaW5wdXQsIHNpemVfdCBsZW4sIHZvaWQgKmFyZyk7CisJdm9pZCAqdGxzZXh0X29wYXF1ZV9wcmZfaW5wdXRfY2FsbGJhY2tfYXJnOwogI2VuZGlmCiAKKyNpZm5kZWYgT1BFTlNTTF9OT19QU0sKKwljaGFyICpwc2tfaWRlbnRpdHlfaGludDsKKwl1bnNpZ25lZCBpbnQgKCpwc2tfY2xpZW50X2NhbGxiYWNrKShTU0wgKnNzbCwgY29uc3QgY2hhciAqaGludCwgY2hhciAqaWRlbnRpdHksCisJCXVuc2lnbmVkIGludCBtYXhfaWRlbnRpdHlfbGVuLCB1bnNpZ25lZCBjaGFyICpwc2ssCisJCXVuc2lnbmVkIGludCBtYXhfcHNrX2xlbik7CisJdW5zaWduZWQgaW50ICgqcHNrX3NlcnZlcl9jYWxsYmFjaykoU1NMICpzc2wsIGNvbnN0IGNoYXIgKmlkZW50aXR5LAorCQl1bnNpZ25lZCBjaGFyICpwc2ssIHVuc2lnbmVkIGludCBtYXhfcHNrX2xlbik7CisjZW5kaWYKKworI2lmbmRlZiBPUEVOU1NMX05PX0JVRl9GUkVFTElTVFMKKyNkZWZpbmUgU1NMX01BWF9CVUZfRlJFRUxJU1RfTEVOX0RFRkFVTFQgMzIKKwl1bnNpZ25lZCBpbnQgZnJlZWxpc3RfbWF4X2xlbjsKKwlzdHJ1Y3Qgc3NsM19idWZfZnJlZWxpc3Rfc3QgKndidWZfZnJlZWxpc3Q7CisJc3RydWN0IHNzbDNfYnVmX2ZyZWVsaXN0X3N0ICpyYnVmX2ZyZWVsaXN0OworI2VuZGlmCiAJfTsKIAogI2RlZmluZSBTU0xfU0VTU19DQUNIRV9PRkYJCQkweDAwMDAKQEAgLTgxNSw3ICs4ODMsNyBAQAogI2RlZmluZSBTU0xfU0VTU19DQUNIRV9OT19JTlRFUk5BTCBcCiAJKFNTTF9TRVNTX0NBQ0hFX05PX0lOVEVSTkFMX0xPT0tVUHxTU0xfU0VTU19DQUNIRV9OT19JTlRFUk5BTF9TVE9SRSkKIAotICBzdHJ1Y3QgbGhhc2hfc3QgKlNTTF9DVFhfc2Vzc2lvbnMoU1NMX0NUWCAqY3R4KTsKK0xIQVNIX09GKFNTTF9TRVNTSU9OKSAqU1NMX0NUWF9zZXNzaW9ucyhTU0xfQ1RYICpjdHgpOwogI2RlZmluZSBTU0xfQ1RYX3Nlc3NfbnVtYmVyKGN0eCkgXAogCVNTTF9DVFhfY3RybChjdHgsU1NMX0NUUkxfU0VTU19OVU1CRVIsMCxOVUxMKQogI2RlZmluZSBTU0xfQ1RYX3Nlc3NfY29ubmVjdChjdHgpIFwKQEAgLTg1Nyw2ICs5MjUsMzEgQEAKIHZvaWQgU1NMX0NUWF9zZXRfY29va2llX2dlbmVyYXRlX2NiKFNTTF9DVFggKmN0eCwgaW50ICgqYXBwX2dlbl9jb29raWVfY2IpKFNTTCAqc3NsLCB1bnNpZ25lZCBjaGFyICpjb29raWUsIHVuc2lnbmVkIGludCAqY29va2llX2xlbikpOwogdm9pZCBTU0xfQ1RYX3NldF9jb29raWVfdmVyaWZ5X2NiKFNTTF9DVFggKmN0eCwgaW50ICgqYXBwX3ZlcmlmeV9jb29raWVfY2IpKFNTTCAqc3NsLCB1bnNpZ25lZCBjaGFyICpjb29raWUsIHVuc2lnbmVkIGludCBjb29raWVfbGVuKSk7CiAKKyNpZm5kZWYgT1BFTlNTTF9OT19QU0sKKy8qIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgYnVmZmVyIGdpdmVuIHRvIGNhbGxiYWNrcyBjb250YWluaW5nIHRoZQorICogcmVzdWx0aW5nIGlkZW50aXR5L3BzayAqLworI2RlZmluZSBQU0tfTUFYX0lERU5USVRZX0xFTiAxMjgKKyNkZWZpbmUgUFNLX01BWF9QU0tfTEVOIDI1Ngordm9pZCBTU0xfQ1RYX3NldF9wc2tfY2xpZW50X2NhbGxiYWNrKFNTTF9DVFggKmN0eCwgCisJdW5zaWduZWQgaW50ICgqcHNrX2NsaWVudF9jYWxsYmFjaykoU1NMICpzc2wsIGNvbnN0IGNoYXIgKmhpbnQsIAorCQljaGFyICppZGVudGl0eSwgdW5zaWduZWQgaW50IG1heF9pZGVudGl0eV9sZW4sIHVuc2lnbmVkIGNoYXIgKnBzaywKKwkJdW5zaWduZWQgaW50IG1heF9wc2tfbGVuKSk7Cit2b2lkIFNTTF9zZXRfcHNrX2NsaWVudF9jYWxsYmFjayhTU0wgKnNzbCwgCisJdW5zaWduZWQgaW50ICgqcHNrX2NsaWVudF9jYWxsYmFjaykoU1NMICpzc2wsIGNvbnN0IGNoYXIgKmhpbnQsIAorCQljaGFyICppZGVudGl0eSwgdW5zaWduZWQgaW50IG1heF9pZGVudGl0eV9sZW4sIHVuc2lnbmVkIGNoYXIgKnBzaywKKwkJdW5zaWduZWQgaW50IG1heF9wc2tfbGVuKSk7Cit2b2lkIFNTTF9DVFhfc2V0X3Bza19zZXJ2ZXJfY2FsbGJhY2soU1NMX0NUWCAqY3R4LCAKKwl1bnNpZ25lZCBpbnQgKCpwc2tfc2VydmVyX2NhbGxiYWNrKShTU0wgKnNzbCwgY29uc3QgY2hhciAqaWRlbnRpdHksCisJCXVuc2lnbmVkIGNoYXIgKnBzaywgdW5zaWduZWQgaW50IG1heF9wc2tfbGVuKSk7Cit2b2lkIFNTTF9zZXRfcHNrX3NlcnZlcl9jYWxsYmFjayhTU0wgKnNzbCwKKwl1bnNpZ25lZCBpbnQgKCpwc2tfc2VydmVyX2NhbGxiYWNrKShTU0wgKnNzbCwgY29uc3QgY2hhciAqaWRlbnRpdHksCisJCXVuc2lnbmVkIGNoYXIgKnBzaywgdW5zaWduZWQgaW50IG1heF9wc2tfbGVuKSk7CitpbnQgU1NMX0NUWF91c2VfcHNrX2lkZW50aXR5X2hpbnQoU1NMX0NUWCAqY3R4LCBjb25zdCBjaGFyICppZGVudGl0eV9oaW50KTsKK2ludCBTU0xfdXNlX3Bza19pZGVudGl0eV9oaW50KFNTTCAqcywgY29uc3QgY2hhciAqaWRlbnRpdHlfaGludCk7Citjb25zdCBjaGFyICpTU0xfZ2V0X3Bza19pZGVudGl0eV9oaW50KGNvbnN0IFNTTCAqcyk7Citjb25zdCBjaGFyICpTU0xfZ2V0X3Bza19pZGVudGl0eShjb25zdCBTU0wgKnMpOworI2VuZGlmCisKICNkZWZpbmUgU1NMX05PVEhJTkcJMQogI2RlZmluZSBTU0xfV1JJVElORwkyCiAjZGVmaW5lIFNTTF9SRUFESU5HCTMKQEAgLTg2OCw2ICs5NjEsOSBAQAogI2RlZmluZSBTU0xfd2FudF93cml0ZShzKQkoU1NMX3dhbnQocykgPT0gU1NMX1dSSVRJTkcpCiAjZGVmaW5lIFNTTF93YW50X3g1MDlfbG9va3VwKHMpCShTU0xfd2FudChzKSA9PSBTU0xfWDUwOV9MT09LVVApCiAKKyNkZWZpbmUgU1NMX01BQ19GTEFHX1JFQURfTUFDX1NUUkVBTSAxCisjZGVmaW5lIFNTTF9NQUNfRkxBR19XUklURV9NQUNfU1RSRUFNIDIKKwogc3RydWN0IHNzbF9zdAogCXsKIAkvKiBwcm90b2NvbCB2ZXJzaW9uCkBAIC04NzYsNyArOTcyLDcgQEAKIAlpbnQgdmVyc2lvbjsKIAlpbnQgdHlwZTsgLyogU1NMX1NUX0NPTk5FQ1Qgb3IgU1NMX1NUX0FDQ0VQVCAqLwogCi0JU1NMX01FVEhPRCAqbWV0aG9kOyAvKiBTU0x2MyAqLworCWNvbnN0IFNTTF9NRVRIT0QgKm1ldGhvZDsgLyogU1NMdjMgKi8KIAogCS8qIFRoZXJlIGFyZSAyIEJJTydzIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIG5vcm1hbGx5IGJvdGggdGhlCiAJICogc2FtZS4gIFRoaXMgaXMgc28gZGF0YSBjYW4gYmUgcmVhZCBhbmQgd3JpdHRlbiB0byBkaWZmZXJlbnQKQEAgLTk1OSw5ICsxMDU1LDkgQEAKIAogCS8qIFRoZXNlIGFyZSB0aGUgb25lcyBiZWluZyB1c2VkLCB0aGUgb25lcyBpbiBTU0xfU0VTU0lPTiBhcmUKIAkgKiB0aGUgb25lcyB0byBiZSAnY29waWVkJyBpbnRvIHRoZXNlIG9uZXMgKi8KLQorCWludCBtYWNfZmxhZ3M7IAogCUVWUF9DSVBIRVJfQ1RYICplbmNfcmVhZF9jdHg7CQkvKiBjcnlwdG9ncmFwaGljIHN0YXRlICovCi0JY29uc3QgRVZQX01EICpyZWFkX2hhc2g7CQkvKiB1c2VkIGZvciBtYWMgZ2VuZXJhdGlvbiAqLworCUVWUF9NRF9DVFggKnJlYWRfaGFzaDsJCS8qIHVzZWQgZm9yIG1hYyBnZW5lcmF0aW9uICovCiAjaWZuZGVmIE9QRU5TU0xfTk9fQ09NUAogCUNPTVBfQ1RYICpleHBhbmQ7CQkJLyogdW5jb21wcmVzcyAqLwogI2Vsc2UKQEAgLTk2OSw3ICsxMDY1LDcgQEAKICNlbmRpZgogCiAJRVZQX0NJUEhFUl9DVFggKmVuY193cml0ZV9jdHg7CQkvKiBjcnlwdG9ncmFwaGljIHN0YXRlICovCi0JY29uc3QgRVZQX01EICp3cml0ZV9oYXNoOwkJLyogdXNlZCBmb3IgbWFjIGdlbmVyYXRpb24gKi8KKwlFVlBfTURfQ1RYICp3cml0ZV9oYXNoOwkJLyogdXNlZCBmb3IgbWFjIGdlbmVyYXRpb24gKi8KICNpZm5kZWYgT1BFTlNTTF9OT19DT01QCiAJQ09NUF9DVFggKmNvbXByZXNzOwkJCS8qIGNvbXByZXNzaW9uICovCiAjZWxzZQpAQCAtMTAwNyw2ICsxMTAzLDE0IEBACiAJS1NTTF9DVFggKmtzc2xfY3R4OyAgICAgLyogS2VyYmVyb3MgNSBjb250ZXh0ICovCiAjZW5kaWYJLyogT1BFTlNTTF9OT19LUkI1ICovCiAKKyNpZm5kZWYgT1BFTlNTTF9OT19QU0sKKwl1bnNpZ25lZCBpbnQgKCpwc2tfY2xpZW50X2NhbGxiYWNrKShTU0wgKnNzbCwgY29uc3QgY2hhciAqaGludCwgY2hhciAqaWRlbnRpdHksCisJCXVuc2lnbmVkIGludCBtYXhfaWRlbnRpdHlfbGVuLCB1bnNpZ25lZCBjaGFyICpwc2ssCisJCXVuc2lnbmVkIGludCBtYXhfcHNrX2xlbik7CisJdW5zaWduZWQgaW50ICgqcHNrX3NlcnZlcl9jYWxsYmFjaykoU1NMICpzc2wsIGNvbnN0IGNoYXIgKmlkZW50aXR5LAorCQl1bnNpZ25lZCBjaGFyICpwc2ssIHVuc2lnbmVkIGludCBtYXhfcHNrX2xlbik7CisjZW5kaWYKKwogCVNTTF9DVFggKmN0eDsKIAkvKiBzZXQgdGhpcyBmbGFnIHRvIDEgYW5kIGEgc2xlZXAoMSkgaXMgcHV0IGludG8gYWxsIFNTTF9yZWFkKCkKIAkgKiBhbmQgU1NMX3dyaXRlKCkgY2FsbHMsIGdvb2QgZm9yIG5iaW8gZGVidWdpbmcgOi0pICovCkBAIC0xMDI2LDYgKzExMzAsNyBAQAogCWludCBmaXJzdF9wYWNrZXQ7CiAJaW50IGNsaWVudF92ZXJzaW9uOwkvKiB3aGF0IHdhcyBwYXNzZWQsIHVzZWQgZm9yCiAJCQkJICogU1NMdjMvVExTIHJvbGxiYWNrIGNoZWNrICovCisJdW5zaWduZWQgaW50IG1heF9zZW5kX2ZyYWdtZW50OwogI2lmbmRlZiBPUEVOU1NMX05PX1RMU0VYVAogCS8qIFRMUyBleHRlbnNpb24gZGVidWcgY2FsbGJhY2sgKi8KIAl2b2lkICgqdGxzZXh0X2RlYnVnX2NiKShTU0wgKnMsIGludCBjbGllbnRfc2VydmVyLCBpbnQgdHlwZSwKQEAgLTEwNTIsMTEgKzExNTcsMzMgQEAKIAogCS8qIFJGQzQ1MDcgc2Vzc2lvbiB0aWNrZXQgZXhwZWN0ZWQgdG8gYmUgcmVjZWl2ZWQgb3Igc2VudCAqLwogCWludCB0bHNleHRfdGlja2V0X2V4cGVjdGVkOworI2lmbmRlZiBPUEVOU1NMX05PX0VDCisJc2l6ZV90IHRsc2V4dF9lY3BvaW50Zm9ybWF0bGlzdF9sZW5ndGg7CisJdW5zaWduZWQgY2hhciAqdGxzZXh0X2VjcG9pbnRmb3JtYXRsaXN0OyAvKiBvdXIgbGlzdCAqLworCXNpemVfdCB0bHNleHRfZWxsaXB0aWNjdXJ2ZWxpc3RfbGVuZ3RoOworCXVuc2lnbmVkIGNoYXIgKnRsc2V4dF9lbGxpcHRpY2N1cnZlbGlzdDsgLyogb3VyIGxpc3QgKi8KKyNlbmRpZiAvKiBPUEVOU1NMX05PX0VDICovCisKKwkvKiBkcmFmdC1yZXNjb3JsYS10bHMtb3BhcXVlLXByZi1pbnB1dC0wMC50eHQgaW5mb3JtYXRpb24gdG8gYmUgdXNlZCBmb3IgaGFuZHNoYWtlcyAqLworCXZvaWQgKnRsc2V4dF9vcGFxdWVfcHJmX2lucHV0OworCXNpemVfdCB0bHNleHRfb3BhcXVlX3ByZl9pbnB1dF9sZW47CisKKwkvKiBUTFMgU2Vzc2lvbiBUaWNrZXQgZXh0ZW5zaW9uIG92ZXJyaWRlICovCisJVExTX1NFU1NJT05fVElDS0VUX0VYVCAqdGxzZXh0X3Nlc3Npb25fdGlja2V0OworCisJLyogVExTIFNlc3Npb24gVGlja2V0IGV4dGVuc2lvbiBjYWxsYmFjayAqLworCXRsc19zZXNzaW9uX3RpY2tldF9leHRfY2JfZm4gdGxzX3Nlc3Npb25fdGlja2V0X2V4dF9jYjsKKwl2b2lkICp0bHNfc2Vzc2lvbl90aWNrZXRfZXh0X2NiX2FyZzsKKworCS8qIFRMUyBwcmUtc2hhcmVkIHNlY3JldCBzZXNzaW9uIHJlc3VtcHRpb24gKi8KKwl0bHNfc2Vzc2lvbl9zZWNyZXRfY2JfZm4gdGxzX3Nlc3Npb25fc2VjcmV0X2NiOworCXZvaWQgKnRsc19zZXNzaW9uX3NlY3JldF9jYl9hcmc7CisKIAlTU0xfQ1RYICogaW5pdGlhbF9jdHg7IC8qIGluaXRpYWwgY3R4LCB1c2VkIHRvIHN0b3JlIHNlc3Npb25zICovCiAjZGVmaW5lIHNlc3Npb25fY3R4IGluaXRpYWxfY3R4CiAjZWxzZQogI2RlZmluZSBzZXNzaW9uX2N0eCBjdHgKLSNlbmRpZgorI2VuZGlmIC8qIE9QRU5TU0xfTk9fVExTRVhUICovCiAJfTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCkBAIC0xMTYzLDIwICsxMjkwLDEzIEBACiAjZGVmaW5lIFNTTF9nZXRfdGltZW91dChhKQlTU0xfU0VTU0lPTl9nZXRfdGltZW91dChhKQogI2RlZmluZSBTU0xfc2V0X3RpbWVvdXQoYSxiKQlTU0xfU0VTU0lPTl9zZXRfdGltZW91dCgoYSksKGIpKQogCi0jaWYgMSAvKlNTTEVBWV9NQUNST1MqLwogI2RlZmluZSBkMmlfU1NMX1NFU1NJT05fYmlvKGJwLHNfaWQpIEFTTjFfZDJpX2Jpb19vZihTU0xfU0VTU0lPTixTU0xfU0VTU0lPTl9uZXcsZDJpX1NTTF9TRVNTSU9OLGJwLHNfaWQpCiAjZGVmaW5lIGkyZF9TU0xfU0VTU0lPTl9iaW8oYnAsc19pZCkgQVNOMV9pMmRfYmlvX29mKFNTTF9TRVNTSU9OLGkyZF9TU0xfU0VTU0lPTixicCxzX2lkKQotI2RlZmluZSBQRU1fcmVhZF9TU0xfU0VTU0lPTihmcCx4LGNiLHUpIChTU0xfU0VTU0lPTiAqKVBFTV9BU04xX3JlYWQoIFwKLQkoY2hhciAqKCopKCkpZDJpX1NTTF9TRVNTSU9OLFBFTV9TVFJJTkdfU1NMX1NFU1NJT04sZnAsKGNoYXIgKiopeCxjYix1KQotI2RlZmluZSBQRU1fcmVhZF9iaW9fU1NMX1NFU1NJT04oYnAseCxjYix1KSBQRU1fQVNOMV9yZWFkX2Jpb19vZihTU0xfU0VTU0lPTixkMmlfU1NMX1NFU1NJT04sUEVNX1NUUklOR19TU0xfU0VTU0lPTixicCx4LGNiLHUpCi0jZGVmaW5lIFBFTV93cml0ZV9TU0xfU0VTU0lPTihmcCx4KSBcCi0JUEVNX0FTTjFfd3JpdGUoKGludCAoKikoKSlpMmRfU1NMX1NFU1NJT04sIFwKLQkJUEVNX1NUUklOR19TU0xfU0VTU0lPTixmcCwgKGNoYXIgKil4LCBOVUxMLE5VTEwsMCxOVUxMLE5VTEwpCi0jZGVmaW5lIFBFTV93cml0ZV9iaW9fU1NMX1NFU1NJT04oYnAseCkgXAotCVBFTV9BU04xX3dyaXRlX2Jpb19vZihTU0xfU0VTU0lPTixpMmRfU1NMX1NFU1NJT04sUEVNX1NUUklOR19TU0xfU0VTU0lPTixicCx4LE5VTEwsTlVMTCwwLE5VTEwsTlVMTCkKLSNlbmRpZgogCi0jZGVmaW5lIFNTTF9BRF9SRUFTT05fT0ZGU0VUCQkxMDAwCitERUNMQVJFX1BFTV9ydyhTU0xfU0VTU0lPTiwgU1NMX1NFU1NJT04pCisKKyNkZWZpbmUgU1NMX0FEX1JFQVNPTl9PRkZTRVQJCTEwMDAgLyogb2Zmc2V0IHRvIGdldCBTU0xfUl8uLi4gdmFsdWUgZnJvbSBTU0xfQURfLi4uICovCisKIC8qIFRoZXNlIGFsZXJ0IHR5cGVzIGFyZSBmb3IgU1NMdjMgYW5kIFRMU3YxICovCiAjZGVmaW5lIFNTTF9BRF9DTE9TRV9OT1RJRlkJCVNTTDNfQURfQ0xPU0VfTk9USUZZCiAjZGVmaW5lIFNTTF9BRF9VTkVYUEVDVEVEX01FU1NBR0UJU1NMM19BRF9VTkVYUEVDVEVEX01FU1NBR0UgLyogZmF0YWwgKi8KQEAgLTEyMDYsNiArMTMyNiw4IEBACiAjZGVmaW5lIFNTTF9BRF9DRVJUSUZJQ0FURV9VTk9CVEFJTkFCTEUgVExTMV9BRF9DRVJUSUZJQ0FURV9VTk9CVEFJTkFCTEUKICNkZWZpbmUgU1NMX0FEX1VOUkVDT0dOSVpFRF9OQU1FCVRMUzFfQURfVU5SRUNPR05JWkVEX05BTUUKICNkZWZpbmUgU1NMX0FEX0JBRF9DRVJUSUZJQ0FURV9TVEFUVVNfUkVTUE9OU0UgVExTMV9BRF9CQURfQ0VSVElGSUNBVEVfU1RBVFVTX1JFU1BPTlNFCisjZGVmaW5lIFNTTF9BRF9CQURfQ0VSVElGSUNBVEVfSEFTSF9WQUxVRSBUTFMxX0FEX0JBRF9DRVJUSUZJQ0FURV9IQVNIX1ZBTFVFCisjZGVmaW5lIFNTTF9BRF9VTktOT1dOX1BTS19JREVOVElUWSAgICAgVExTMV9BRF9VTktOT1dOX1BTS19JREVOVElUWSAvKiBmYXRhbCAqLwogCiAjZGVmaW5lIFNTTF9FUlJPUl9OT05FCQkJMAogI2RlZmluZSBTU0xfRVJST1JfU1NMCQkJMQpAQCAtMTI2NCw2ICsxMzg2LDggQEAKICNkZWZpbmUgU1NMX0NUUkxfR0VUX01BWF9DRVJUX0xJU1QJCTUwCiAjZGVmaW5lIFNTTF9DVFJMX1NFVF9NQVhfQ0VSVF9MSVNUCQk1MQogCisjZGVmaW5lIFNTTF9DVFJMX1NFVF9NQVhfU0VORF9GUkFHTUVOVAkJNTIKKwogLyogc2VlIHRsczEuaCBmb3IgbWFjcm9zIGJhc2VkIG9uIHRoZXNlICovCiAjaWZuZGVmIE9QRU5TU0xfTk9fVExTRVhUCiAjZGVmaW5lIFNTTF9DVFJMX1NFVF9UTFNFWFRfU0VSVkVSTkFNRV9DQgk1MwpAQCAtMTI3Myw3ICsxMzk3LDkgQEAKICNkZWZpbmUgU1NMX0NUUkxfU0VUX1RMU0VYVF9ERUJVR19BUkcJCTU3CiAjZGVmaW5lIFNTTF9DVFJMX0dFVF9UTFNFWFRfVElDS0VUX0tFWVMJCTU4CiAjZGVmaW5lIFNTTF9DVFJMX1NFVF9UTFNFWFRfVElDS0VUX0tFWVMJCTU5Ci0KKyNkZWZpbmUgU1NMX0NUUkxfU0VUX1RMU0VYVF9PUEFRVUVfUFJGX0lOUFVUCTYwCisjZGVmaW5lIFNTTF9DVFJMX1NFVF9UTFNFWFRfT1BBUVVFX1BSRl9JTlBVVF9DQgk2MQorI2RlZmluZSBTU0xfQ1RSTF9TRVRfVExTRVhUX09QQVFVRV9QUkZfSU5QVVRfQ0JfQVJHIDYyCiAjZGVmaW5lIFNTTF9DVFJMX1NFVF9UTFNFWFRfU1RBVFVTX1JFUV9DQgk2MwogI2RlZmluZSBTU0xfQ1RSTF9TRVRfVExTRVhUX1NUQVRVU19SRVFfQ0JfQVJHCTY0CiAjZGVmaW5lIFNTTF9DVFJMX1NFVF9UTFNFWFRfU1RBVFVTX1JFUV9UWVBFCTY1CkBAIC0xMzQzLDcgKzE0NjksNyBAQAogI2VuZGlmCiAKIGludAlTU0xfQ1RYX3NldF9jaXBoZXJfbGlzdChTU0xfQ1RYICosY29uc3QgY2hhciAqc3RyKTsKLVNTTF9DVFggKlNTTF9DVFhfbmV3KFNTTF9NRVRIT0QgKm1ldGgpOworU1NMX0NUWCAqU1NMX0NUWF9uZXcoY29uc3QgU1NMX01FVEhPRCAqbWV0aCk7CiB2b2lkCVNTTF9DVFhfZnJlZShTU0xfQ1RYICopOwogbG9uZyBTU0xfQ1RYX3NldF90aW1lb3V0KFNTTF9DVFggKmN0eCxsb25nIHQpOwogbG9uZyBTU0xfQ1RYX2dldF90aW1lb3V0KGNvbnN0IFNTTF9DVFggKmN0eCk7CkBAIC0xMzU0LDcgKzE0ODAsNyBAQAogCiB2b2lkCVNTTF9DVFhfZmx1c2hfc2Vzc2lvbnMoU1NMX0NUWCAqY3R4LGxvbmcgdG0pOwogCi1TU0xfQ0lQSEVSICpTU0xfZ2V0X2N1cnJlbnRfY2lwaGVyKGNvbnN0IFNTTCAqcyk7Citjb25zdCBTU0xfQ0lQSEVSICpTU0xfZ2V0X2N1cnJlbnRfY2lwaGVyKGNvbnN0IFNTTCAqcyk7CiBpbnQJU1NMX0NJUEhFUl9nZXRfYml0cyhjb25zdCBTU0xfQ0lQSEVSICpjLGludCAqYWxnX2JpdHMpOwogY2hhciAqCVNTTF9DSVBIRVJfZ2V0X3ZlcnNpb24oY29uc3QgU1NMX0NJUEhFUiAqYyk7CiBjb25zdCBjaGFyICoJU1NMX0NJUEhFUl9nZXRfbmFtZShjb25zdCBTU0xfQ0lQSEVSICpjKTsKQEAgLTE0MjUsOSArMTU1MSw4IEBACiB2b2lkCVNTTF9jb3B5X3Nlc3Npb25faWQoU1NMICp0byxjb25zdCBTU0wgKmZyb20pOwogCiBTU0xfU0VTU0lPTiAqU1NMX1NFU1NJT05fbmV3KHZvaWQpOwotdW5zaWduZWQgbG9uZyBTU0xfU0VTU0lPTl9oYXNoKGNvbnN0IFNTTF9TRVNTSU9OICphKTsKLWludAlTU0xfU0VTU0lPTl9jbXAoY29uc3QgU1NMX1NFU1NJT04gKmEsY29uc3QgU1NMX1NFU1NJT04gKmIpOwotY29uc3QgdW5zaWduZWQgY2hhciAqU1NMX1NFU1NJT05fZ2V0X2lkKGNvbnN0IFNTTF9TRVNTSU9OICpzLCB1bnNpZ25lZCBpbnQgKmxlbik7Citjb25zdCB1bnNpZ25lZCBjaGFyICpTU0xfU0VTU0lPTl9nZXRfaWQoY29uc3QgU1NMX1NFU1NJT04gKnMsCisJCQkJCXVuc2lnbmVkIGludCAqbGVuKTsKICNpZm5kZWYgT1BFTlNTTF9OT19GUF9BUEkKIGludAlTU0xfU0VTU0lPTl9wcmludF9mcChGSUxFICpmcCxjb25zdCBTU0xfU0VTU0lPTiAqc2VzKTsKICNlbmRpZgpAQCAtMTQ4Nyw2ICsxNjEyLDkgQEAKIGludCBTU0xfQ1RYX3NldF90cnVzdChTU0xfQ1RYICpzLCBpbnQgdHJ1c3QpOwogaW50IFNTTF9zZXRfdHJ1c3QoU1NMICpzLCBpbnQgdHJ1c3QpOwogCitpbnQgU1NMX0NUWF9zZXQxX3BhcmFtKFNTTF9DVFggKmN0eCwgWDUwOV9WRVJJRllfUEFSQU0gKnZwbSk7CitpbnQgU1NMX3NldDFfcGFyYW0oU1NMICpzc2wsIFg1MDlfVkVSSUZZX1BBUkFNICp2cG0pOworCiB2b2lkCVNTTF9mcmVlKFNTTCAqc3NsKTsKIGludCAJU1NMX2FjY2VwdChTU0wgKnNzbCk7CiBpbnQgCVNTTF9jb25uZWN0KFNTTCAqc3NsKTsKQEAgLTE1MDIsMjcgKzE2MzAsMjkgQEAKIGNvbnN0IGNoYXIgKlNTTF9nZXRfdmVyc2lvbihjb25zdCBTU0wgKnMpOwogCiAvKiBUaGlzIHNldHMgdGhlICdkZWZhdWx0JyBTU0wgdmVyc2lvbiB0aGF0IFNTTF9uZXcoKSB3aWxsIGNyZWF0ZSAqLwotaW50IFNTTF9DVFhfc2V0X3NzbF92ZXJzaW9uKFNTTF9DVFggKmN0eCxTU0xfTUVUSE9EICptZXRoKTsKK2ludCBTU0xfQ1RYX3NldF9zc2xfdmVyc2lvbihTU0xfQ1RYICpjdHgsIGNvbnN0IFNTTF9NRVRIT0QgKm1ldGgpOwogCi1TU0xfTUVUSE9EICpTU0x2Ml9tZXRob2Qodm9pZCk7CQkvKiBTU0x2MiAqLwotU1NMX01FVEhPRCAqU1NMdjJfc2VydmVyX21ldGhvZCh2b2lkKTsJLyogU1NMdjIgKi8KLVNTTF9NRVRIT0QgKlNTTHYyX2NsaWVudF9tZXRob2Qodm9pZCk7CS8qIFNTTHYyICovCisjaWZuZGVmIE9QRU5TU0xfTk9fU1NMMgorY29uc3QgU1NMX01FVEhPRCAqU1NMdjJfbWV0aG9kKHZvaWQpOwkJLyogU1NMdjIgKi8KK2NvbnN0IFNTTF9NRVRIT0QgKlNTTHYyX3NlcnZlcl9tZXRob2Qodm9pZCk7CS8qIFNTTHYyICovCitjb25zdCBTU0xfTUVUSE9EICpTU0x2Ml9jbGllbnRfbWV0aG9kKHZvaWQpOwkvKiBTU0x2MiAqLworI2VuZGlmCiAKLVNTTF9NRVRIT0QgKlNTTHYzX21ldGhvZCh2b2lkKTsJCS8qIFNTTHYzICovCi1TU0xfTUVUSE9EICpTU0x2M19zZXJ2ZXJfbWV0aG9kKHZvaWQpOwkvKiBTU0x2MyAqLwotU1NMX01FVEhPRCAqU1NMdjNfY2xpZW50X21ldGhvZCh2b2lkKTsJLyogU1NMdjMgKi8KK2NvbnN0IFNTTF9NRVRIT0QgKlNTTHYzX21ldGhvZCh2b2lkKTsJCS8qIFNTTHYzICovCitjb25zdCBTU0xfTUVUSE9EICpTU0x2M19zZXJ2ZXJfbWV0aG9kKHZvaWQpOwkvKiBTU0x2MyAqLworY29uc3QgU1NMX01FVEhPRCAqU1NMdjNfY2xpZW50X21ldGhvZCh2b2lkKTsJLyogU1NMdjMgKi8KIAotU1NMX01FVEhPRCAqU1NMdjIzX21ldGhvZCh2b2lkKTsJLyogU1NMdjMgYnV0IGNhbiByb2xsYmFjayB0byB2MiAqLwotU1NMX01FVEhPRCAqU1NMdjIzX3NlcnZlcl9tZXRob2Qodm9pZCk7CS8qIFNTTHYzIGJ1dCBjYW4gcm9sbGJhY2sgdG8gdjIgKi8KLVNTTF9NRVRIT0QgKlNTTHYyM19jbGllbnRfbWV0aG9kKHZvaWQpOwkvKiBTU0x2MyBidXQgY2FuIHJvbGxiYWNrIHRvIHYyICovCitjb25zdCBTU0xfTUVUSE9EICpTU0x2MjNfbWV0aG9kKHZvaWQpOwkvKiBTU0x2MyBidXQgY2FuIHJvbGxiYWNrIHRvIHYyICovCitjb25zdCBTU0xfTUVUSE9EICpTU0x2MjNfc2VydmVyX21ldGhvZCh2b2lkKTsJLyogU1NMdjMgYnV0IGNhbiByb2xsYmFjayB0byB2MiAqLworY29uc3QgU1NMX01FVEhPRCAqU1NMdjIzX2NsaWVudF9tZXRob2Qodm9pZCk7CS8qIFNTTHYzIGJ1dCBjYW4gcm9sbGJhY2sgdG8gdjIgKi8KIAotU1NMX01FVEhPRCAqVExTdjFfbWV0aG9kKHZvaWQpOwkJLyogVExTdjEuMCAqLwotU1NMX01FVEhPRCAqVExTdjFfc2VydmVyX21ldGhvZCh2b2lkKTsJLyogVExTdjEuMCAqLwotU1NMX01FVEhPRCAqVExTdjFfY2xpZW50X21ldGhvZCh2b2lkKTsJLyogVExTdjEuMCAqLworY29uc3QgU1NMX01FVEhPRCAqVExTdjFfbWV0aG9kKHZvaWQpOwkJLyogVExTdjEuMCAqLworY29uc3QgU1NMX01FVEhPRCAqVExTdjFfc2VydmVyX21ldGhvZCh2b2lkKTsJLyogVExTdjEuMCAqLworY29uc3QgU1NMX01FVEhPRCAqVExTdjFfY2xpZW50X21ldGhvZCh2b2lkKTsJLyogVExTdjEuMCAqLwogCi1TU0xfTUVUSE9EICpEVExTdjFfbWV0aG9kKHZvaWQpOwkJLyogRFRMU3YxLjAgKi8KLVNTTF9NRVRIT0QgKkRUTFN2MV9zZXJ2ZXJfbWV0aG9kKHZvaWQpOwkvKiBEVExTdjEuMCAqLwotU1NMX01FVEhPRCAqRFRMU3YxX2NsaWVudF9tZXRob2Qodm9pZCk7CS8qIERUTFN2MS4wICovCitjb25zdCBTU0xfTUVUSE9EICpEVExTdjFfbWV0aG9kKHZvaWQpOwkJLyogRFRMU3YxLjAgKi8KK2NvbnN0IFNTTF9NRVRIT0QgKkRUTFN2MV9zZXJ2ZXJfbWV0aG9kKHZvaWQpOwkvKiBEVExTdjEuMCAqLworY29uc3QgU1NMX01FVEhPRCAqRFRMU3YxX2NsaWVudF9tZXRob2Qodm9pZCk7CS8qIERUTFN2MS4wICovCiAKIFNUQUNLX09GKFNTTF9DSVBIRVIpICpTU0xfZ2V0X2NpcGhlcnMoY29uc3QgU1NMICpzKTsKIApAQCAtMTUzMSw4ICsxNjYxLDggQEAKIGludCBTU0xfcmVuZWdvdGlhdGVfcGVuZGluZyhTU0wgKnMpOwogaW50IFNTTF9zaHV0ZG93bihTU0wgKnMpOwogCi1TU0xfTUVUSE9EICpTU0xfZ2V0X3NzbF9tZXRob2QoU1NMICpzKTsKLWludCBTU0xfc2V0X3NzbF9tZXRob2QoU1NMICpzLFNTTF9NRVRIT0QgKm1ldGhvZCk7Citjb25zdCBTU0xfTUVUSE9EICpTU0xfZ2V0X3NzbF9tZXRob2QoU1NMICpzKTsKK2ludCBTU0xfc2V0X3NzbF9tZXRob2QoU1NMICpzLCBjb25zdCBTU0xfTUVUSE9EICptZXRob2QpOwogY29uc3QgY2hhciAqU1NMX2FsZXJ0X3R5cGVfc3RyaW5nX2xvbmcoaW50IHZhbHVlKTsKIGNvbnN0IGNoYXIgKlNTTF9hbGVydF90eXBlX3N0cmluZyhpbnQgdmFsdWUpOwogY29uc3QgY2hhciAqU1NMX2FsZXJ0X2Rlc2Nfc3RyaW5nX2xvbmcoaW50IHZhbHVlKTsKQEAgLTE2MjQsNiArMTc1NCwxMSBAQAogI2RlZmluZSBTU0xfc2V0X21heF9jZXJ0X2xpc3Qoc3NsLG0pIFwKIAlTU0xfY3RybChzc2wsU1NMX0NUUkxfU0VUX01BWF9DRVJUX0xJU1QsbSxOVUxMKQogCisjZGVmaW5lIFNTTF9DVFhfc2V0X21heF9zZW5kX2ZyYWdtZW50KGN0eCxtKSBcCisJU1NMX0NUWF9jdHJsKGN0eCxTU0xfQ1RSTF9TRVRfTUFYX1NFTkRfRlJBR01FTlQsbSxOVUxMKQorI2RlZmluZSBTU0xfc2V0X21heF9zZW5kX2ZyYWdtZW50KHNzbCxtKSBcCisJU1NMX2N0cmwoc3NsLFNTTF9DVFJMX1NFVF9NQVhfU0VORF9GUkFHTUVOVCxtLE5VTEwpCisKICAgICAgLyogTkI6IHRoZSBrZXlsZW5ndGggaXMgb25seSBhcHBsaWNhYmxlIHdoZW4gaXNfZXhwb3J0IGlzIHRydWUgKi8KICNpZm5kZWYgT1BFTlNTTF9OT19SU0EKIHZvaWQgU1NMX0NUWF9zZXRfdG1wX3JzYV9jYWxsYmFjayhTU0xfQ1RYICpjdHgsCkBAIC0xNjY1LDYgKzE4MDAsMTUgQEAKIGludCBTU0xfQ09NUF9hZGRfY29tcHJlc3Npb25fbWV0aG9kKGludCBpZCx2b2lkICpjbSk7CiAjZW5kaWYKIAorLyogVExTIGV4dGVuc2lvbnMgZnVuY3Rpb25zICovCitpbnQgU1NMX3NldF9zZXNzaW9uX3RpY2tldF9leHQoU1NMICpzLCB2b2lkICpleHRfZGF0YSwgaW50IGV4dF9sZW4pOworCitpbnQgU1NMX3NldF9zZXNzaW9uX3RpY2tldF9leHRfY2IoU1NMICpzLCB0bHNfc2Vzc2lvbl90aWNrZXRfZXh0X2NiX2ZuIGNiLAorCQkJCSAgdm9pZCAqYXJnKTsKKworLyogUHJlLXNoYXJlZCBzZWNyZXQgc2Vzc2lvbiByZXN1bXB0aW9uIGZ1bmN0aW9ucyAqLworaW50IFNTTF9zZXRfc2Vzc2lvbl9zZWNyZXRfY2IoU1NMICpzLCB0bHNfc2Vzc2lvbl9zZWNyZXRfY2JfZm4gdGxzX3Nlc3Npb25fc2VjcmV0X2NiLCB2b2lkICphcmcpOworCiAvKiBCRUdJTiBFUlJPUiBDT0RFUyAqLwogLyogVGhlIGZvbGxvd2luZyBsaW5lcyBhcmUgYXV0byBnZW5lcmF0ZWQgYnkgdGhlIHNjcmlwdCBta2Vyci5wbC4gQW55IGNoYW5nZXMKICAqIG1hZGUgYWZ0ZXIgdGhpcyBwb2ludCBtYXkgYmUgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgc2NyaXB0IGlzIG5leHQgcnVuLgpAQCAtMTY4Miw3ICsxODI2LDcgQEAKICNkZWZpbmUgU1NMX0ZfRE9fRFRMUzFfV1JJVEUJCQkJIDI0NQogI2RlZmluZSBTU0xfRl9ET19TU0wzX1dSSVRFCQkJCSAxMDQKICNkZWZpbmUgU1NMX0ZfRFRMUzFfQUNDRVBUCQkJCSAyNDYKLSNkZWZpbmUgU1NMX0ZfRFRMUzFfQUREX0NFUlRfVE9fQlVGCQkJIDI4MAorI2RlZmluZSBTU0xfRl9EVExTMV9BRERfQ0VSVF9UT19CVUYJCQkgMjk1CiAjZGVmaW5lIFNTTF9GX0RUTFMxX0JVRkZFUl9SRUNPUkQJCQkgMjQ3CiAjZGVmaW5lIFNTTF9GX0RUTFMxX0NMSUVOVF9IRUxMTwkJCSAyNDgKICNkZWZpbmUgU1NMX0ZfRFRMUzFfQ09OTkVDVAkJCQkgMjQ5CkBAIC0xNjkxLDkgKzE4MzUsOSBAQAogI2RlZmluZSBTU0xfRl9EVExTMV9HRVRfTUVTU0FHRQkJCQkgMjUyCiAjZGVmaW5lIFNTTF9GX0RUTFMxX0dFVF9NRVNTQUdFX0ZSQUdNRU5UCQkgMjUzCiAjZGVmaW5lIFNTTF9GX0RUTFMxX0dFVF9SRUNPUkQJCQkJIDI1NAotI2RlZmluZSBTU0xfRl9EVExTMV9IQU5ETEVfVElNRU9VVAkJCSAyODIKKyNkZWZpbmUgU1NMX0ZfRFRMUzFfSEFORExFX1RJTUVPVVQJCQkgMjk3CiAjZGVmaW5lIFNTTF9GX0RUTFMxX09VVFBVVF9DRVJUX0NIQUlOCQkJIDI1NQotI2RlZmluZSBTU0xfRl9EVExTMV9QUkVQUk9DRVNTX0ZSQUdNRU5UCQkJIDI3NworI2RlZmluZSBTU0xfRl9EVExTMV9QUkVQUk9DRVNTX0ZSQUdNRU5UCQkJIDI4OAogI2RlZmluZSBTU0xfRl9EVExTMV9QUk9DRVNTX09VVF9PRl9TRVFfTUVTU0FHRQkJIDI1NgogI2RlZmluZSBTU0xfRl9EVExTMV9QUk9DRVNTX1JFQ09SRAkJCSAyNTcKICNkZWZpbmUgU1NMX0ZfRFRMUzFfUkVBRF9CWVRFUwkJCQkgMjU4CkBAIC0xNzM3LDcgKzE4ODEsNyBAQAogI2RlZmluZSBTU0xfRl9TU0wyX1NFVF9DRVJUSUZJQ0FURQkJCSAxMjYKICNkZWZpbmUgU1NMX0ZfU1NMMl9XUklURQkJCQkgMTI3CiAjZGVmaW5lIFNTTF9GX1NTTDNfQUNDRVBUCQkJCSAxMjgKLSNkZWZpbmUgU1NMX0ZfU1NMM19BRERfQ0VSVF9UT19CVUYJCQkgMjgxCisjZGVmaW5lIFNTTF9GX1NTTDNfQUREX0NFUlRfVE9fQlVGCQkJIDI5NgogI2RlZmluZSBTU0xfRl9TU0wzX0NBTExCQUNLX0NUUkwJCQkgMjMzCiAjZGVmaW5lIFNTTF9GX1NTTDNfQ0hBTkdFX0NJUEhFUl9TVEFURQkJCSAxMjkKICNkZWZpbmUgU1NMX0ZfU1NMM19DSEVDS19DRVJUX0FORF9BTEdPUklUSE0JCSAxMzAKQEAgLTE3NDUsMTEgKzE4ODksMTIgQEAKICNkZWZpbmUgU1NMX0ZfU1NMM19DT05ORUNUCQkJCSAxMzIKICNkZWZpbmUgU1NMX0ZfU1NMM19DVFJMCQkJCQkgMjEzCiAjZGVmaW5lIFNTTF9GX1NTTDNfQ1RYX0NUUkwJCQkJIDEzMwotI2RlZmluZSBTU0xfRl9TU0wzX0RPX0NIQU5HRV9DSVBIRVJfU1BFQwkJIDI3OQorI2RlZmluZSBTU0xfRl9TU0wzX0RJR0VTVF9DQUNIRURfUkVDT1JEUwkJIDI5MworI2RlZmluZSBTU0xfRl9TU0wzX0RPX0NIQU5HRV9DSVBIRVJfU1BFQwkJIDI5MgogI2RlZmluZSBTU0xfRl9TU0wzX0VOQwkJCQkJIDEzNAogI2RlZmluZSBTU0xfRl9TU0wzX0dFTkVSQVRFX0tFWV9CTE9DSwkJCSAyMzgKICNkZWZpbmUgU1NMX0ZfU1NMM19HRVRfQ0VSVElGSUNBVEVfUkVRVUVTVAkJIDEzNQotI2RlZmluZSBTU0xfRl9TU0wzX0dFVF9DRVJUX1NUQVRVUwkJCSAyODgKKyNkZWZpbmUgU1NMX0ZfU1NMM19HRVRfQ0VSVF9TVEFUVVMJCQkgMjg5CiAjZGVmaW5lIFNTTF9GX1NTTDNfR0VUX0NFUlRfVkVSSUZZCQkJIDEzNgogI2RlZmluZSBTU0xfRl9TU0wzX0dFVF9DTElFTlRfQ0VSVElGSUNBVEUJCSAxMzcKICNkZWZpbmUgU1NMX0ZfU1NMM19HRVRfQ0xJRU5UX0hFTExPCQkJIDEzOApAQCAtMTc2Miw3ICsxOTA3LDggQEAKICNkZWZpbmUgU1NMX0ZfU1NMM19HRVRfU0VSVkVSX0NFUlRJRklDQVRFCQkgMTQ0CiAjZGVmaW5lIFNTTF9GX1NTTDNfR0VUX1NFUlZFUl9ET05FCQkJIDE0NQogI2RlZmluZSBTU0xfRl9TU0wzX0dFVF9TRVJWRVJfSEVMTE8JCQkgMTQ2Ci0jZGVmaW5lIFNTTF9GX1NTTDNfTkVXX1NFU1NJT05fVElDS0VUCQkJIDI4NAorI2RlZmluZSBTU0xfRl9TU0wzX0hBTkRTSEFLRV9NQUMJCQkgMjg1CisjZGVmaW5lIFNTTF9GX1NTTDNfTkVXX1NFU1NJT05fVElDS0VUCQkJIDI4NwogI2RlZmluZSBTU0xfRl9TU0wzX09VVFBVVF9DRVJUX0NIQUlOCQkJIDE0NwogI2RlZmluZSBTU0xfRl9TU0wzX1BFRUsJCQkJCSAyMzUKICNkZWZpbmUgU1NMX0ZfU1NMM19SRUFEX0JZVEVTCQkJCSAxNDgKQEAgLTE3NzQsMTYgKzE5MjAsMTcgQEAKICNkZWZpbmUgU1NMX0ZfU1NMM19TRU5EX1NFUlZFUl9DRVJUSUZJQ0FURQkJIDE1NAogI2RlZmluZSBTU0xfRl9TU0wzX1NFTkRfU0VSVkVSX0hFTExPCQkJIDI0MgogI2RlZmluZSBTU0xfRl9TU0wzX1NFTkRfU0VSVkVSX0tFWV9FWENIQU5HRQkJIDE1NQotI2RlZmluZSBTU0xfRl9TU0wzX1NFVFVQX0JVRkZFUlMJCQkgMTU2CiAjZGVmaW5lIFNTTF9GX1NTTDNfU0VUVVBfS0VZX0JMT0NLCQkJIDE1NworI2RlZmluZSBTU0xfRl9TU0wzX1NFVFVQX1JFQURfQlVGRkVSCQkJIDE1NgorI2RlZmluZSBTU0xfRl9TU0wzX1NFVFVQX1dSSVRFX0JVRkZFUgkJCSAyOTEKICNkZWZpbmUgU1NMX0ZfU1NMM19XUklURV9CWVRFUwkJCQkgMTU4CiAjZGVmaW5lIFNTTF9GX1NTTDNfV1JJVEVfUEVORElORwkJCSAxNTkKLSNkZWZpbmUgU1NMX0ZfU1NMX0FERF9DTElFTlRIRUxMT19SRU5FR09USUFURV9FWFQJIDI4NQotI2RlZmluZSBTU0xfRl9TU0xfQUREX0NMSUVOVEhFTExPX1RMU0VYVAkJIDI3MgorI2RlZmluZSBTU0xfRl9TU0xfQUREX0NMSUVOVEhFTExPX1JFTkVHT1RJQVRFX0VYVAkgMjk4CisjZGVmaW5lIFNTTF9GX1NTTF9BRERfQ0xJRU5USEVMTE9fVExTRVhUCQkgMjc3CiAjZGVmaW5lIFNTTF9GX1NTTF9BRERfRElSX0NFUlRfU1VCSkVDVFNfVE9fU1RBQ0sJIDIxNQogI2RlZmluZSBTU0xfRl9TU0xfQUREX0ZJTEVfQ0VSVF9TVUJKRUNUU19UT19TVEFDSwkgMjE2Ci0jZGVmaW5lIFNTTF9GX1NTTF9BRERfU0VSVkVSSEVMTE9fUkVORUdPVElBVEVfRVhUCSAyODYKLSNkZWZpbmUgU1NMX0ZfU1NMX0FERF9TRVJWRVJIRUxMT19UTFNFWFQJCSAyNzMKKyNkZWZpbmUgU1NMX0ZfU1NMX0FERF9TRVJWRVJIRUxMT19SRU5FR09USUFURV9FWFQJIDI5OQorI2RlZmluZSBTU0xfRl9TU0xfQUREX1NFUlZFUkhFTExPX1RMU0VYVAkJIDI3OAogI2RlZmluZSBTU0xfRl9TU0xfQkFEX01FVEhPRAkJCQkgMTYwCiAjZGVmaW5lIFNTTF9GX1NTTF9CWVRFU19UT19DSVBIRVJfTElTVAkJCSAxNjEKICNkZWZpbmUgU1NMX0ZfU1NMX0NFUlRfRFVQCQkJCSAyMjEKQEAgLTE3OTEsNyArMTkzOCw4IEBACiAjZGVmaW5lIFNTTF9GX1NTTF9DRVJUX0lOU1RBTlRJQVRFCQkJIDIxNAogI2RlZmluZSBTU0xfRl9TU0xfQ0VSVF9ORVcJCQkJIDE2MgogI2RlZmluZSBTU0xfRl9TU0xfQ0hFQ0tfUFJJVkFURV9LRVkJCQkgMTYzCi0jZGVmaW5lIFNTTF9GX1NTTF9DSEVDS19TRVJWRVJIRUxMT19UTFNFWFQJCSAyNzQKKyNkZWZpbmUgU1NMX0ZfU1NMX0NIRUNLX1NFUlZFUkhFTExPX1RMU0VYVAkJIDI4MAorI2RlZmluZSBTU0xfRl9TU0xfQ0hFQ0tfU1JWUl9FQ0NfQ0VSVF9BTkRfQUxHCQkgMjc5CiAjZGVmaW5lIFNTTF9GX1NTTF9DSVBIRVJfUFJPQ0VTU19SVUxFU1RSCQkgMjMwCiAjZGVmaW5lIFNTTF9GX1NTTF9DSVBIRVJfU1RSRU5HVEhfU09SVAkJCSAyMzEKICNkZWZpbmUgU1NMX0ZfU1NMX0NMRUFSCQkJCQkgMTY0CkBAIC0xODAxLDcgKzE5NDksNyBAQAogI2RlZmluZSBTU0xfRl9TU0xfQ1RYX0NIRUNLX1BSSVZBVEVfS0VZCQkJIDE2OAogI2RlZmluZSBTU0xfRl9TU0xfQ1RYX05FVwkJCQkgMTY5CiAjZGVmaW5lIFNTTF9GX1NTTF9DVFhfU0VUX0NJUEhFUl9MSVNUCQkJIDI2OQotI2RlZmluZSBTU0xfRl9TU0xfQ1RYX1NFVF9DTElFTlRfQ0VSVF9FTkdJTkUJCSAyNzgKKyNkZWZpbmUgU1NMX0ZfU1NMX0NUWF9TRVRfQ0xJRU5UX0NFUlRfRU5HSU5FCQkgMjkwCiAjZGVmaW5lIFNTTF9GX1NTTF9DVFhfU0VUX1BVUlBPU0UJCQkgMjI2CiAjZGVmaW5lIFNTTF9GX1NTTF9DVFhfU0VUX1NFU1NJT05fSURfQ09OVEVYVAkJIDIxOQogI2RlZmluZSBTU0xfRl9TU0xfQ1RYX1NFVF9TU0xfVkVSU0lPTgkJCSAxNzAKQEAgLTE4MTMsNiArMTk2MSw3IEBACiAjZGVmaW5lIFNTTF9GX1NTTF9DVFhfVVNFX1BSSVZBVEVLRVkJCQkgMTc0CiAjZGVmaW5lIFNTTF9GX1NTTF9DVFhfVVNFX1BSSVZBVEVLRVlfQVNOMQkJIDE3NQogI2RlZmluZSBTU0xfRl9TU0xfQ1RYX1VTRV9QUklWQVRFS0VZX0ZJTEUJCSAxNzYKKyNkZWZpbmUgU1NMX0ZfU1NMX0NUWF9VU0VfUFNLX0lERU5USVRZX0hJTlQJCSAyNzIKICNkZWZpbmUgU1NMX0ZfU1NMX0NUWF9VU0VfUlNBUFJJVkFURUtFWQkJCSAxNzcKICNkZWZpbmUgU1NMX0ZfU1NMX0NUWF9VU0VfUlNBUFJJVkFURUtFWV9BU04xCQkgMTc4CiAjZGVmaW5lIFNTTF9GX1NTTF9DVFhfVVNFX1JTQVBSSVZBVEVLRVlfRklMRQkJIDE3OQpAQCAtMTgyNCwxMyArMTk3MywxMyBAQAogI2RlZmluZSBTU0xfRl9TU0xfSU5JVF9XQklPX0JVRkZFUgkJCSAxODQKICNkZWZpbmUgU1NMX0ZfU1NMX0xPQURfQ0xJRU5UX0NBX0ZJTEUJCQkgMTg1CiAjZGVmaW5lIFNTTF9GX1NTTF9ORVcJCQkJCSAxODYKLSNkZWZpbmUgU1NMX0ZfU1NMX1BBUlNFX0NMSUVOVEhFTExPX1JFTkVHT1RJQVRFX0VYVAkgMjg3Ci0jZGVmaW5lIFNTTF9GX1NTTF9QQVJTRV9DTElFTlRIRUxMT19UTFNFWFQJCSAyOTAKLSNkZWZpbmUgU1NMX0ZfU1NMX1BBUlNFX1NFUlZFUkhFTExPX1JFTkVHT1RJQVRFX0VYVAkgMjg5Ci0jZGVmaW5lIFNTTF9GX1NTTF9QQVJTRV9TRVJWRVJIRUxMT19UTFNFWFQJCSAyOTEKKyNkZWZpbmUgU1NMX0ZfU1NMX1BBUlNFX0NMSUVOVEhFTExPX1JFTkVHT1RJQVRFX0VYVAkgMzAwCisjZGVmaW5lIFNTTF9GX1NTTF9QQVJTRV9DTElFTlRIRUxMT19UTFNFWFQJCSAzMDIKKyNkZWZpbmUgU1NMX0ZfU1NMX1BBUlNFX1NFUlZFUkhFTExPX1JFTkVHT1RJQVRFX0VYVAkgMzAxCisjZGVmaW5lIFNTTF9GX1NTTF9QQVJTRV9TRVJWRVJIRUxMT19UTFNFWFQJCSAzMDMKICNkZWZpbmUgU1NMX0ZfU1NMX1BFRUsJCQkJCSAyNzAKLSNkZWZpbmUgU1NMX0ZfU1NMX1BSRVBBUkVfQ0xJRU5USEVMTE9fVExTRVhUCQkgMjc1Ci0jZGVmaW5lIFNTTF9GX1NTTF9QUkVQQVJFX1NFUlZFUkhFTExPX1RMU0VYVAkJIDI3NgorI2RlZmluZSBTU0xfRl9TU0xfUFJFUEFSRV9DTElFTlRIRUxMT19UTFNFWFQJCSAyODEKKyNkZWZpbmUgU1NMX0ZfU1NMX1BSRVBBUkVfU0VSVkVSSEVMTE9fVExTRVhUCQkgMjgyCiAjZGVmaW5lIFNTTF9GX1NTTF9SRUFECQkJCQkgMjIzCiAjZGVmaW5lIFNTTF9GX1NTTF9SU0FfUFJJVkFURV9ERUNSWVBUCQkJIDE4NwogI2RlZmluZSBTU0xfRl9TU0xfUlNBX1BVQkxJQ19FTkNSWVBUCQkJIDE4OApAQCAtMTg0NSw2ICsxOTk0LDcgQEAKICNkZWZpbmUgU1NMX0ZfU1NMX1NFVF9SRkQJCQkJIDE5NAogI2RlZmluZSBTU0xfRl9TU0xfU0VUX1NFU1NJT04JCQkJIDE5NQogI2RlZmluZSBTU0xfRl9TU0xfU0VUX1NFU1NJT05fSURfQ09OVEVYVAkJIDIxOAorI2RlZmluZSBTU0xfRl9TU0xfU0VUX1NFU1NJT05fVElDS0VUX0VYVAkJIDI5NAogI2RlZmluZSBTU0xfRl9TU0xfU0VUX1RSVVNUCQkJCSAyMjgKICNkZWZpbmUgU1NMX0ZfU1NMX1NFVF9XRkQJCQkJIDE5NgogI2RlZmluZSBTU0xfRl9TU0xfU0hVVERPV04JCQkJIDIyNApAQCAtMTg1NywxMyArMjAwNywxOSBAQAogI2RlZmluZSBTU0xfRl9TU0xfVVNFX1BSSVZBVEVLRVkJCQkgMjAxCiAjZGVmaW5lIFNTTF9GX1NTTF9VU0VfUFJJVkFURUtFWV9BU04xCQkJIDIwMgogI2RlZmluZSBTU0xfRl9TU0xfVVNFX1BSSVZBVEVLRVlfRklMRQkJCSAyMDMKKyNkZWZpbmUgU1NMX0ZfU1NMX1VTRV9QU0tfSURFTlRJVFlfSElOVAkJCSAyNzMKICNkZWZpbmUgU1NMX0ZfU1NMX1VTRV9SU0FQUklWQVRFS0VZCQkJIDIwNAogI2RlZmluZSBTU0xfRl9TU0xfVVNFX1JTQVBSSVZBVEVLRVlfQVNOMQkJIDIwNQogI2RlZmluZSBTU0xfRl9TU0xfVVNFX1JTQVBSSVZBVEVLRVlfRklMRQkJIDIwNgogI2RlZmluZSBTU0xfRl9TU0xfVkVSSUZZX0NFUlRfQ0hBSU4JCQkgMjA3CiAjZGVmaW5lIFNTTF9GX1NTTF9XUklURQkJCQkJIDIwOAorI2RlZmluZSBTU0xfRl9UTFMxX0NFUlRfVkVSSUZZX01BQwkJCSAyODYKICNkZWZpbmUgU1NMX0ZfVExTMV9DSEFOR0VfQ0lQSEVSX1NUQVRFCQkJIDIwOQorI2RlZmluZSBTU0xfRl9UTFMxX0NIRUNLX1NFUlZFUkhFTExPX1RMU0VYVAkJIDI3NAogI2RlZmluZSBTU0xfRl9UTFMxX0VOQwkJCQkJIDIxMAorI2RlZmluZSBTU0xfRl9UTFMxX1BSRVBBUkVfQ0xJRU5USEVMTE9fVExTRVhUCQkgMjc1CisjZGVmaW5lIFNTTF9GX1RMUzFfUFJFUEFSRV9TRVJWRVJIRUxMT19UTFNFWFQJCSAyNzYKKyNkZWZpbmUgU1NMX0ZfVExTMV9QUkYJCQkJCSAyODQKICNkZWZpbmUgU1NMX0ZfVExTMV9TRVRVUF9LRVlfQkxPQ0sJCQkgMjExCiAjZGVmaW5lIFNTTF9GX1dSSVRFX1BFTkRJTkcJCQkJIDIxMgogCkBAIC0xODg0LDEyICsyMDQwLDE1IEBACiAjZGVmaW5lIFNTTF9SX0JBRF9FQ0NfQ0VSVAkJCQkgMzA0CiAjZGVmaW5lIFNTTF9SX0JBRF9FQ0RTQV9TSUdOQVRVUkUJCQkgMzA1CiAjZGVmaW5lIFNTTF9SX0JBRF9FQ1BPSU5UCQkJCSAzMDYKKyNkZWZpbmUgU1NMX1JfQkFEX0hBTkRTSEFLRV9MRU5HVEgJCQkgMzMyCiAjZGVmaW5lIFNTTF9SX0JBRF9IRUxMT19SRVFVRVNUCQkJCSAxMDUKICNkZWZpbmUgU1NMX1JfQkFEX0xFTkdUSAkJCQkgMjcxCiAjZGVmaW5lIFNTTF9SX0JBRF9NQUNfREVDT0RFCQkJCSAxMTMKKyNkZWZpbmUgU1NMX1JfQkFEX01BQ19MRU5HVEgJCQkJIDMzMwogI2RlZmluZSBTU0xfUl9CQURfTUVTU0FHRV9UWVBFCQkJCSAxMTQKICNkZWZpbmUgU1NMX1JfQkFEX1BBQ0tFVF9MRU5HVEgJCQkJIDExNQogI2RlZmluZSBTU0xfUl9CQURfUFJPVE9DT0xfVkVSU0lPTl9OVU1CRVIJCSAxMTYKKyNkZWZpbmUgU1NMX1JfQkFEX1BTS19JREVOVElUWV9ISU5UX0xFTkdUSAkJIDMxNgogI2RlZmluZSBTU0xfUl9CQURfUkVTUE9OU0VfQVJHVU1FTlQJCQkgMTE3CiAjZGVmaW5lIFNTTF9SX0JBRF9SU0FfREVDUllQVAkJCQkgMTE4CiAjZGVmaW5lIFNTTF9SX0JBRF9SU0FfRU5DUllQVAkJCQkgMTE5CkBAIC0xOTEzLDggKzIwNzIsOSBAQAogI2RlZmluZSBTU0xfUl9DSVBIRVJfQ09ERV9XUk9OR19MRU5HVEgJCQkgMTM3CiAjZGVmaW5lIFNTTF9SX0NJUEhFUl9PUl9IQVNIX1VOQVZBSUxBQkxFCQkgMTM4CiAjZGVmaW5lIFNTTF9SX0NJUEhFUl9UQUJMRV9TUkNfRVJST1IJCQkgMTM5Ci0jZGVmaW5lIFNTTF9SX0NMSUVOVEhFTExPX1RMU0VYVAkJCSAxNTcKKyNkZWZpbmUgU1NMX1JfQ0xJRU5USEVMTE9fVExTRVhUCQkJIDIyNgogI2RlZmluZSBTU0xfUl9DT01QUkVTU0VEX0xFTkdUSF9UT09fTE9ORwkJIDE0MAorI2RlZmluZSBTU0xfUl9DT01QUkVTU0lPTl9ESVNBQkxFRAkJCSAzNDMKICNkZWZpbmUgU1NMX1JfQ09NUFJFU1NJT05fRkFJTFVSRQkJCSAxNDEKICNkZWZpbmUgU1NMX1JfQ09NUFJFU1NJT05fSURfTk9UX1dJVEhJTl9QUklWQVRFX1JBTkdFCSAzMDcKICNkZWZpbmUgU1NMX1JfQ09NUFJFU1NJT05fTElCUkFSWV9FUlJPUgkJCSAxNDIKQEAgLTE5MjcsOCArMjA4NywxMiBAQAogI2RlZmluZSBTU0xfUl9ERUNSWVBUSU9OX0ZBSUxFRF9PUl9CQURfUkVDT1JEX01BQwkgMjgxCiAjZGVmaW5lIFNTTF9SX0RIX1BVQkxJQ19WQUxVRV9MRU5HVEhfSVNfV1JPTkcJCSAxNDgKICNkZWZpbmUgU1NMX1JfRElHRVNUX0NIRUNLX0ZBSUxFRAkJCSAxNDkKLSNkZWZpbmUgU1NMX1JfRFRMU19NRVNTQUdFX1RPT19CSUcJCQkgMzE4CisjZGVmaW5lIFNTTF9SX0RUTFNfTUVTU0FHRV9UT09fQklHCQkJIDMzNAogI2RlZmluZSBTU0xfUl9EVVBMSUNBVEVfQ09NUFJFU1NJT05fSUQJCQkgMzA5CisjZGVmaW5lIFNTTF9SX0VDQ19DRVJUX05PVF9GT1JfS0VZX0FHUkVFTUVOVAkJIDMxNworI2RlZmluZSBTU0xfUl9FQ0NfQ0VSVF9OT1RfRk9SX1NJR05JTkcJCQkgMzE4CisjZGVmaW5lIFNTTF9SX0VDQ19DRVJUX1NIT1VMRF9IQVZFX1JTQV9TSUdOQVRVUkUJIDMyMgorI2RlZmluZSBTU0xfUl9FQ0NfQ0VSVF9TSE9VTERfSEFWRV9TSEExX1NJR05BVFVSRQkgMzIzCiAjZGVmaW5lIFNTTF9SX0VDR1JPVVBfVE9PX0xBUkdFX0ZPUl9DSVBIRVIJCSAzMTAKICNkZWZpbmUgU1NMX1JfRU5DUllQVEVEX0xFTkdUSF9UT09fTE9ORwkJCSAxNTAKICNkZWZpbmUgU1NMX1JfRVJST1JfR0VORVJBVElOR19UTVBfUlNBX0tFWQkJIDI4MgpAQCAtMTkzOSwxMSArMjEwMywxMyBAQAogI2RlZmluZSBTU0xfUl9IVFRQU19QUk9YWV9SRVFVRVNUCQkJIDE1NQogI2RlZmluZSBTU0xfUl9IVFRQX1JFUVVFU1QJCQkJIDE1NgogI2RlZmluZSBTU0xfUl9JTExFR0FMX1BBRERJTkcJCQkJIDI4MworI2RlZmluZSBTU0xfUl9JTkNPTlNJU1RFTlRfQ09NUFJFU1NJT04JCQkgMzQwCiAjZGVmaW5lIFNTTF9SX0lOVkFMSURfQ0hBTExFTkdFX0xFTkdUSAkJCSAxNTgKICNkZWZpbmUgU1NMX1JfSU5WQUxJRF9DT01NQU5ECQkJCSAyODAKKyNkZWZpbmUgU1NMX1JfSU5WQUxJRF9DT01QUkVTU0lPTl9BTEdPUklUSE0JCSAzNDEKICNkZWZpbmUgU1NMX1JfSU5WQUxJRF9QVVJQT1NFCQkJCSAyNzgKLSNkZWZpbmUgU1NMX1JfSU5WQUxJRF9TVEFUVVNfUkVTUE9OU0UJCQkgMzE2Ci0jZGVmaW5lIFNTTF9SX0lOVkFMSURfVElDS0VUX0tFWVNfTEVOR1RICQkgMjc1CisjZGVmaW5lIFNTTF9SX0lOVkFMSURfU1RBVFVTX1JFU1BPTlNFCQkJIDMyOAorI2RlZmluZSBTU0xfUl9JTlZBTElEX1RJQ0tFVF9LRVlTX0xFTkdUSAkJIDMyNQogI2RlZmluZSBTU0xfUl9JTlZBTElEX1RSVVNUCQkJCSAyNzkKICNkZWZpbmUgU1NMX1JfS0VZX0FSR19UT09fTE9ORwkJCQkgMjg0CiAjZGVmaW5lIFNTTF9SX0tSQjUJCQkJCSAyODUKQEAgLTE5ODcsMjMgKzIxNTMsMjcgQEAKICNkZWZpbmUgU1NMX1JfTk9fQ0lQSEVSU19TUEVDSUZJRUQJCQkgMTgzCiAjZGVmaW5lIFNTTF9SX05PX0NJUEhFUl9MSVNUCQkJCSAxODQKICNkZWZpbmUgU1NMX1JfTk9fQ0lQSEVSX01BVENICQkJCSAxODUKLSNkZWZpbmUgU1NMX1JfTk9fQ0xJRU5UX0NFUlRfTUVUSE9ECQkJIDMxNworI2RlZmluZSBTU0xfUl9OT19DTElFTlRfQ0VSVF9NRVRIT0QJCQkgMzMxCiAjZGVmaW5lIFNTTF9SX05PX0NMSUVOVF9DRVJUX1JFQ0VJVkVECQkJIDE4NgogI2RlZmluZSBTU0xfUl9OT19DT01QUkVTU0lPTl9TUEVDSUZJRUQJCQkgMTg3CisjZGVmaW5lIFNTTF9SX05PX0dPU1RfQ0VSVElGSUNBVEVfU0VOVF9CWV9QRUVSCQkgMzMwCiAjZGVmaW5lIFNTTF9SX05PX01FVEhPRF9TUEVDSUZJRUQJCQkgMTg4CiAjZGVmaW5lIFNTTF9SX05PX1BSSVZBVEVLRVkJCQkJIDE4OQogI2RlZmluZSBTU0xfUl9OT19QUklWQVRFX0tFWV9BU1NJR05FRAkJCSAxOTAKICNkZWZpbmUgU1NMX1JfTk9fUFJPVE9DT0xTX0FWQUlMQUJMRQkJCSAxOTEKICNkZWZpbmUgU1NMX1JfTk9fUFVCTElDS0VZCQkJCSAxOTIKLSNkZWZpbmUgU1NMX1JfTk9fUkVORUdPVElBVElPTgkJCQkgMzE5CisjZGVmaW5lIFNTTF9SX05PX1JFTkVHT1RJQVRJT04JCQkJIDMzOQorI2RlZmluZSBTU0xfUl9OT19SRVFVSVJFRF9ESUdFU1QJCQkgMzI0CiAjZGVmaW5lIFNTTF9SX05PX1NIQVJFRF9DSVBIRVIJCQkJIDE5MwogI2RlZmluZSBTU0xfUl9OT19WRVJJRllfQ0FMTEJBQ0sJCQkgMTk0CiAjZGVmaW5lIFNTTF9SX05VTExfU1NMX0NUWAkJCQkgMTk1CiAjZGVmaW5lIFNTTF9SX05VTExfU1NMX01FVEhPRF9QQVNTRUQJCQkgMTk2CiAjZGVmaW5lIFNTTF9SX09MRF9TRVNTSU9OX0NJUEhFUl9OT1RfUkVUVVJORUQJCSAxOTcKKyNkZWZpbmUgU1NMX1JfT0xEX1NFU1NJT05fQ09NUFJFU1NJT05fQUxHT1JJVEhNX05PVF9SRVRVUk5FRCAzNDQKICNkZWZpbmUgU1NMX1JfT05MWV9UTFNfQUxMT1dFRF9JTl9GSVBTX01PREUJCSAyOTcKKyNkZWZpbmUgU1NMX1JfT1BBUVVFX1BSRl9JTlBVVF9UT09fTE9ORwkJCSAzMjcKICNkZWZpbmUgU1NMX1JfUEFDS0VUX0xFTkdUSF9UT09fTE9ORwkJCSAxOTgKLSNkZWZpbmUgU1NMX1JfUEFSU0VfVExTRVhUCQkJCSAyMjMKKyNkZWZpbmUgU1NMX1JfUEFSU0VfVExTRVhUCQkJCSAyMjcKICNkZWZpbmUgU1NMX1JfUEFUSF9UT09fTE9ORwkJCQkgMjcwCiAjZGVmaW5lIFNTTF9SX1BFRVJfRElEX05PVF9SRVRVUk5fQV9DRVJUSUZJQ0FURQkJIDE5OQogI2RlZmluZSBTU0xfUl9QRUVSX0VSUk9SCQkJCSAyMDAKQEAgLTIwMTQsNiArMjE4NCw5IEBACiAjZGVmaW5lIFNTTF9SX1BSRV9NQUNfTEVOR1RIX1RPT19MT05HCQkJIDIwNQogI2RlZmluZSBTU0xfUl9QUk9CTEVNU19NQVBQSU5HX0NJUEhFUl9GVU5DVElPTlMJCSAyMDYKICNkZWZpbmUgU1NMX1JfUFJPVE9DT0xfSVNfU0hVVERPV04JCQkgMjA3CisjZGVmaW5lIFNTTF9SX1BTS19JREVOVElUWV9OT1RfRk9VTkQJCQkgMjIzCisjZGVmaW5lIFNTTF9SX1BTS19OT19DTElFTlRfQ0IJCQkJIDIyNAorI2RlZmluZSBTU0xfUl9QU0tfTk9fU0VSVkVSX0NCCQkJCSAyMjUKICNkZWZpbmUgU1NMX1JfUFVCTElDX0tFWV9FTkNSWVBUX0VSUk9SCQkJIDIwOAogI2RlZmluZSBTU0xfUl9QVUJMSUNfS0VZX0lTX05PVF9SU0EJCQkgMjA5CiAjZGVmaW5lIFNTTF9SX1BVQkxJQ19LRVlfTk9UX1JTQQkJCSAyMTAKQEAgLTIwMjMsMjIgKzIxOTYsMjQgQEAKICNkZWZpbmUgU1NMX1JfUkVDT1JEX0xFTkdUSF9NSVNNQVRDSAkJCSAyMTMKICNkZWZpbmUgU1NMX1JfUkVDT1JEX1RPT19MQVJHRQkJCQkgMjE0CiAjZGVmaW5lIFNTTF9SX1JFQ09SRF9UT09fU01BTEwJCQkJIDI5OAotI2RlZmluZSBTU0xfUl9SRU5FR09USUFURV9FWFRfVE9PX0xPTkcJCQkgMzIwCi0jZGVmaW5lIFNTTF9SX1JFTkVHT1RJQVRJT05fRU5DT0RJTkdfRVJSCQkgMzIxCi0jZGVmaW5lIFNTTF9SX1JFTkVHT1RJQVRJT05fTUlTTUFUQ0gJCQkgMzIyCisjZGVmaW5lIFNTTF9SX1JFTkVHT1RJQVRFX0VYVF9UT09fTE9ORwkJCSAzMzUKKyNkZWZpbmUgU1NMX1JfUkVORUdPVElBVElPTl9FTkNPRElOR19FUlIJCSAzMzYKKyNkZWZpbmUgU1NMX1JfUkVORUdPVElBVElPTl9NSVNNQVRDSAkJCSAzMzcKICNkZWZpbmUgU1NMX1JfUkVRVUlSRURfQ0lQSEVSX01JU1NJTkcJCQkgMjE1CisjZGVmaW5lIFNTTF9SX1JFUVVJUkVEX0NPTVBSRVNTU0lPTl9BTEdPUklUSE1fTUlTU0lORwkgMzQyCiAjZGVmaW5lIFNTTF9SX1JFVVNFX0NFUlRfTEVOR1RIX05PVF9aRVJPCQkgMjE2CiAjZGVmaW5lIFNTTF9SX1JFVVNFX0NFUlRfVFlQRV9OT1RfWkVSTwkJCSAyMTcKICNkZWZpbmUgU1NMX1JfUkVVU0VfQ0lQSEVSX0xJU1RfTk9UX1pFUk8JCSAyMTgKLSNkZWZpbmUgU1NMX1JfU0NTVl9SRUNFSVZFRF9XSEVOX1JFTkVHT1RJQVRJTkcJCSAzMjQKLSNkZWZpbmUgU1NMX1JfU0VSVkVSSEVMTE9fVExTRVhUCQkJIDIyNAorI2RlZmluZSBTU0xfUl9TQ1NWX1JFQ0VJVkVEX1dIRU5fUkVORUdPVElBVElORwkJIDM0NQorI2RlZmluZSBTU0xfUl9TRVJWRVJIRUxMT19UTFNFWFQJCQkgMjc1CiAjZGVmaW5lIFNTTF9SX1NFU1NJT05fSURfQ09OVEVYVF9VTklOSVRJQUxJWkVECQkgMjc3CiAjZGVmaW5lIFNTTF9SX1NIT1JUX1JFQUQJCQkJIDIxOQogI2RlZmluZSBTU0xfUl9TSUdOQVRVUkVfRk9SX05PTl9TSUdOSU5HX0NFUlRJRklDQVRFCSAyMjAKICNkZWZpbmUgU1NMX1JfU1NMMjNfRE9JTkdfU0VTU0lPTl9JRF9SRVVTRQkJIDIyMQogI2RlZmluZSBTU0xfUl9TU0wyX0NPTk5FQ1RJT05fSURfVE9PX0xPTkcJCSAyOTkKLSNkZWZpbmUgU1NMX1JfU1NMM19FWFRfSU5WQUxJRF9TRVJWRVJOQU1FCQkgMjI1Ci0jZGVmaW5lIFNTTF9SX1NTTDNfRVhUX0lOVkFMSURfU0VSVkVSTkFNRV9UWVBFCQkgMjI2CisjZGVmaW5lIFNTTF9SX1NTTDNfRVhUX0lOVkFMSURfRUNQT0lOVEZPUk1BVAkJIDMyMQorI2RlZmluZSBTU0xfUl9TU0wzX0VYVF9JTlZBTElEX1NFUlZFUk5BTUUJCSAzMTkKKyNkZWZpbmUgU1NMX1JfU1NMM19FWFRfSU5WQUxJRF9TRVJWRVJOQU1FX1RZUEUJCSAzMjAKICNkZWZpbmUgU1NMX1JfU1NMM19TRVNTSU9OX0lEX1RPT19MT05HCQkJIDMwMAogI2RlZmluZSBTU0xfUl9TU0wzX1NFU1NJT05fSURfVE9PX1NIT1JUCQkJIDIyMgogI2RlZmluZSBTU0xfUl9TU0xWM19BTEVSVF9CQURfQ0VSVElGSUNBVEUJCSAxMDQyCkBAIC0yMDcyLDggKzIyNDcsMTMgQEAKICNkZWZpbmUgU1NMX1JfVExTVjFfQUxFUlRfUkVDT1JEX09WRVJGTE9XCQkgMTAyMgogI2RlZmluZSBTU0xfUl9UTFNWMV9BTEVSVF9VTktOT1dOX0NBCQkJIDEwNDgKICNkZWZpbmUgU1NMX1JfVExTVjFfQUxFUlRfVVNFUl9DQU5DRUxMRUQJCSAxMDkwCisjZGVmaW5lIFNTTF9SX1RMU1YxX0JBRF9DRVJUSUZJQ0FURV9IQVNIX1ZBTFVFCQkgMTExNAorI2RlZmluZSBTU0xfUl9UTFNWMV9CQURfQ0VSVElGSUNBVEVfU1RBVFVTX1JFU1BPTlNFCSAxMTEzCisjZGVmaW5lIFNTTF9SX1RMU1YxX0NFUlRJRklDQVRFX1VOT0JUQUlOQUJMRQkJIDExMTEKKyNkZWZpbmUgU1NMX1JfVExTVjFfVU5SRUNPR05JWkVEX05BTUUJCQkgMTExMgorI2RlZmluZSBTU0xfUl9UTFNWMV9VTlNVUFBPUlRFRF9FWFRFTlNJT04JCSAxMTEwCiAjZGVmaW5lIFNTTF9SX1RMU19DTElFTlRfQ0VSVF9SRVFfV0lUSF9BTk9OX0NJUEhFUgkgMjMyCi0jZGVmaW5lIFNTTF9SX1RMU19JTlZBTElEX0VDUE9JTlRGT1JNQVRfTElTVAkJIDIyNworI2RlZmluZSBTU0xfUl9UTFNfSU5WQUxJRF9FQ1BPSU5URk9STUFUX0xJU1QJCSAxNTcKICNkZWZpbmUgU1NMX1JfVExTX1BFRVJfRElEX05PVF9SRVNQT05EX1dJVEhfQ0VSVElGSUNBVEVfTElTVCAyMzMKICNkZWZpbmUgU1NMX1JfVExTX1JTQV9FTkNSWVBURURfVkFMVUVfTEVOR1RIX0lTX1dST05HCSAyMzQKICNkZWZpbmUgU1NMX1JfVFJJRURfVE9fVVNFX1VOU1VQUE9SVEVEX0NJUEhFUgkJIDIzNQpAQCAtMjEwMCw5ICsyMjgwLDEwIEBACiAjZGVmaW5lIFNTTF9SX1VOS05PV05fUkVNT1RFX0VSUk9SX1RZUEUJCQkgMjUzCiAjZGVmaW5lIFNTTF9SX1VOS05PV05fU1NMX1ZFUlNJT04JCQkgMjU0CiAjZGVmaW5lIFNTTF9SX1VOS05PV05fU1RBVEUJCQkJIDI1NQotI2RlZmluZSBTU0xfUl9VTlNBRkVfTEVHQUNZX1JFTkVHT1RJQVRJT05fRElTQUJMRUQJIDMyMworI2RlZmluZSBTU0xfUl9VTlNBRkVfTEVHQUNZX1JFTkVHT1RJQVRJT05fRElTQUJMRUQJIDMzOAogI2RlZmluZSBTU0xfUl9VTlNVUFBPUlRFRF9DSVBIRVIJCQkgMjU2CiAjZGVmaW5lIFNTTF9SX1VOU1VQUE9SVEVEX0NPTVBSRVNTSU9OX0FMR09SSVRITQkJIDI1NworI2RlZmluZSBTU0xfUl9VTlNVUFBPUlRFRF9ESUdFU1RfVFlQRQkJCSAzMjYKICNkZWZpbmUgU1NMX1JfVU5TVVBQT1JURURfRUxMSVBUSUNfQ1VSVkUJCSAzMTUKICNkZWZpbmUgU1NMX1JfVU5TVVBQT1JURURfUFJPVE9DT0wJCQkgMjU4CiAjZGVmaW5lIFNTTF9SX1VOU1VQUE9SVEVEX1NTTF9WRVJTSU9OCQkJIDI1OQpkaWZmIC0tZ2l0IGEvc3NsL3NzbDMuaCBiL3NzbC9zc2wzLmgKaW5kZXggYmY3MWVmOS4uZmI0MWNhNSAxMDA2NDQKLS0tIGEvc3NsL3NzbDMuaAorKysgYi9zc2wvc3NsMy5oCkBAIC0xMjMsNyArMTIzLDYgQEAKICNpbmNsdWRlIDxvcGVuc3NsL2J1ZmZlci5oPgogI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9zc2wuaD4KLSNpbmNsdWRlIDxvcGVuc3NsL3BxX2NvbXBhdC5oPgogCiAjaWZkZWYgIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKQEAgLTE2MywxMiArMTYyLDE0IEBACiAjZGVmaW5lIFNTTDNfQ0tfQURIX0RFU182NF9DQkNfU0hBCQkweDAzMDAwMDFBCiAjZGVmaW5lIFNTTDNfQ0tfQURIX0RFU18xOTJfQ0JDX1NIQQkJMHgwMzAwMDAxQgogCi0jZGVmaW5lIFNTTDNfQ0tfRlpBX0RNU19OVUxMX1NIQQkJMHgwMzAwMDAxQwotI2RlZmluZSBTU0wzX0NLX0ZaQV9ETVNfRlpBX1NIQQkJCTB4MDMwMDAwMUQKLSNpZiAwIC8qIEJlY2F1c2UgaXQgY2xhc2hlcyB3aXRoIEtSQjUsIGlzIG5ldmVyIHVzZWQgYW55IG1vcmUsIGFuZCBpcyBzYWZlCi0JIHRvIHJlbW92ZSBhY2NvcmRpbmcgdG8gRGF2aWQgSG9wd29vZCA8ZGF2aWQuaG9wd29vZEB6ZXRuZXQuY28udWs+Ci0JIG9mIHRoZSBpZXRmLXRscyBsaXN0ICovCi0jZGVmaW5lIFNTTDNfQ0tfRlpBX0RNU19SQzRfU0hBCQkJMHgwMzAwMDAxRQorI2lmIDAKKwkjZGVmaW5lIFNTTDNfQ0tfRlpBX0RNU19OVUxMX1NIQQkJMHgwMzAwMDAxQworCSNkZWZpbmUgU1NMM19DS19GWkFfRE1TX0ZaQV9TSEEJCQkweDAzMDAwMDFECisJI2lmIDAgLyogQmVjYXVzZSBpdCBjbGFzaGVzIHdpdGggS1JCNSwgaXMgbmV2ZXIgdXNlZCBhbnkgbW9yZSwgYW5kIGlzIHNhZmUKKwkJIHRvIHJlbW92ZSBhY2NvcmRpbmcgdG8gRGF2aWQgSG9wd29vZCA8ZGF2aWQuaG9wd29vZEB6ZXRuZXQuY28udWs+CisJCSBvZiB0aGUgaWV0Zi10bHMgbGlzdCAqLworCSNkZWZpbmUgU1NMM19DS19GWkFfRE1TX1JDNF9TSEEJCQkweDAzMDAwMDFFCisJI2VuZGlmCiAjZW5kaWYKIAogLyogICAgVlJTIEFkZGl0aW9uYWwgS2VyYmVyb3M1IGVudHJpZXMKQEAgLTIyMCw5ICsyMjEsMTEgQEAKICNkZWZpbmUgU1NMM19UWFRfQURIX0RFU182NF9DQkNfU0hBCQkiQURILURFUy1DQkMtU0hBIgogI2RlZmluZSBTU0wzX1RYVF9BREhfREVTXzE5Ml9DQkNfU0hBCQkiQURILURFUy1DQkMzLVNIQSIKIAotI2RlZmluZSBTU0wzX1RYVF9GWkFfRE1TX05VTExfU0hBCQkiRlpBLU5VTEwtU0hBIgotI2RlZmluZSBTU0wzX1RYVF9GWkFfRE1TX0ZaQV9TSEEJCSJGWkEtRlpBLUNCQy1TSEEiCi0jZGVmaW5lIFNTTDNfVFhUX0ZaQV9ETVNfUkM0X1NIQQkJIkZaQS1SQzQtU0hBIgorI2lmIDAKKwkjZGVmaW5lIFNTTDNfVFhUX0ZaQV9ETVNfTlVMTF9TSEEJCSJGWkEtTlVMTC1TSEEiCisJI2RlZmluZSBTU0wzX1RYVF9GWkFfRE1TX0ZaQV9TSEEJCSJGWkEtRlpBLUNCQy1TSEEiCisJI2RlZmluZSBTU0wzX1RYVF9GWkFfRE1TX1JDNF9TSEEJCSJGWkEtUkM0LVNIQSIKKyNlbmRpZgogCiAjZGVmaW5lIFNTTDNfVFhUX0tSQjVfREVTXzY0X0NCQ19TSEEJCSJLUkI1LURFUy1DQkMtU0hBIgogI2RlZmluZSBTU0wzX1RYVF9LUkI1X0RFU18xOTJfQ0JDM19TSEEJCSJLUkI1LURFUy1DQkMzLVNIQSIKQEAgLTI0OCwzMiArMjUxLDc1IEBACiAjZGVmaW5lIFNTTDNfU0VTU0lPTl9JRF9TSVpFCQkJMzIKICNkZWZpbmUgU1NMM19SVF9IRUFERVJfTEVOR1RICQkJNQogCi0vKiBEdWUgdG8gTVMgc3R1ZmZpbmcgdXAsIHRoaXMgY2FuIGNoYW5nZS4uLi4gKi8KLSNpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX1dJTjE2KSB8fCBcCi0JKGRlZmluZWQoT1BFTlNTTF9TWVNfTVNET1MpICYmICFkZWZpbmVkKE9QRU5TU0xfU1lTX1dJTjMyKSkKLSNkZWZpbmUgU1NMM19SVF9NQVhfRVhUUkEJCQkoMTQwMDApCisjaWZuZGVmIFNTTDNfQUxJR05fUEFZTE9BRAorIC8qIFNvbWUgd2lsbCBhcmd1ZSB0aGF0IHRoaXMgaW5jcmVhc2VzIG1lbW9yeSBmb290cHJpbnQsIGJ1dCBpdCdzCisgICogbm90IGFjdHVhbGx5IHRydWUuIFBvaW50IGlzIHRoYXQgbWFsbG9jIGhhcyB0byByZXR1cm4gYXQgbGVhc3QKKyAgKiA2NC1iaXQgYWxpZ25lZCBwb2ludGVycywgbWVhbmluZyB0aGF0IGFsbG9jYXRpbmcgNSBieXRlcyB3YXN0ZXMKKyAgKiAzIGJ5dGVzIGluIGVpdGhlciBjYXNlLiBTdWdnZXN0ZWQgcHJlLWdhcGluZyBzaW1wbHkgbW92ZXMgdGhlc2UKKyAgKiB3YXN0ZWQgYnl0ZXMgZnJvbSB0aGUgZW5kIG9mIGFsbG9jYXRlZCByZWdpb24gdG8gaXRzIGZyb250LAorICAqIGJ1dCBtYWtlcyBkYXRhIHBheWxvYWQgYWxpZ25lZCwgd2hpY2ggaW1wcm92ZXMgcGVyZm9ybWFuY2U6LSkgKi8KKyMgZGVmaW5lIFNTTDNfQUxJR05fUEFZTE9BRAkJCTgKICNlbHNlCi0jZGVmaW5lIFNTTDNfUlRfTUFYX0VYVFJBCQkJKDE2Mzg0KQorIyBpZiAoU1NMM19BTElHTl9QQVlMT0FEJihTU0wzX0FMSUdOX1BBWUxPQUQtMSkpIT0wCisjICBlcnJvciAiaW5zYW5lIFNTTDNfQUxJR05fUEFZTE9BRCIKKyMgIHVuZGVmIFNTTDNfQUxJR05fUEFZTE9BRAorIyBlbmRpZgogI2VuZGlmCiAKKy8qIFRoaXMgaXMgdGhlIG1heGltdW0gTUFDIChkaWdlc3QpIHNpemUgdXNlZCBieSB0aGUgU1NMIGxpYnJhcnkuCisgKiBDdXJyZW50bHkgbWF4aW11bSBvZiAyMCBpcyB1c2VkIGJ5IFNIQTEsIGJ1dCB3ZSByZXNlcnZlIGZvcgorICogZnV0dXJlIGV4dGVuc2lvbiBmb3IgNTEyLWJpdCBoYXNoZXMuCisgKi8KKworI2RlZmluZSBTU0wzX1JUX01BWF9NRF9TSVpFCQkJNjQKKworLyogTWF4aW11bSBibG9jayBzaXplIHVzZWQgaW4gYWxsIGNpcGhlcnN1aXRlcy4gQ3VycmVudGx5IDE2IGZvciBBRVMuCisgKi8KKworI2RlZmluZQlTU0xfUlRfTUFYX0NJUEhFUl9CTE9DS19TSVpFCQkxNgorCisjZGVmaW5lIFNTTDNfUlRfTUFYX0VYVFJBCQkJKDE2Mzg0KQorCiAvKiBEZWZhdWx0IGJ1ZmZlciBsZW5ndGggdXNlZCBmb3Igd3JpdGVuIHJlY29yZHMuICBUaHVzIGEgZ2VuZXJhdGVkIHJlY29yZAogICogd2lsbCBjb250YWluIHBsYWludGV4dCBubyBsYXJnZXIgdGhhbiB0aGlzIHZhbHVlLiAqLwogI2RlZmluZSBTU0wzX1JUX0RFRkFVTFRfUExBSU5fTEVOR1RICTIwNDgKKy8qIE1heGltdW0gcGxhaW50ZXh0IGxlbmd0aDogZGVmaW5lZCBieSBTU0wvVExTIHN0YW5kYXJkcyAqLwogI2RlZmluZSBTU0wzX1JUX01BWF9QTEFJTl9MRU5HVEgJCTE2Mzg0CisvKiBNYXhpbXVtIGNvbXByZXNzaW9uIG92ZXJoZWFkOiBkZWZpbmVkIGJ5IFNTTC9UTFMgc3RhbmRhcmRzICovCisjZGVmaW5lIFNTTDNfUlRfTUFYX0NPTVBSRVNTRURfT1ZFUkhFQUQJCTEwMjQKKworLyogVGhlIHN0YW5kYXJkcyBnaXZlIGEgbWF4aW11bSBlbmNyeXB0aW9uIG92ZXJoZWFkIG9mIDEwMjQgYnl0ZXMuCisgKiBJbiBwcmFjdGljZSB0aGUgdmFsdWUgaXMgbG93ZXIgdGhhbiB0aGlzLiBUaGUgb3ZlcmhlYWQgaXMgdGhlIG1heGltdW0KKyAqIG51bWJlciBvZiBwYWRkaW5nIGJ5dGVzICgyNTYpIHBsdXMgdGhlIG1hYyBzaXplLgorICovCisjZGVmaW5lIFNTTDNfUlRfTUFYX0VOQ1JZUFRFRF9PVkVSSEVBRAkoMjU2ICsgU1NMM19SVF9NQVhfTURfU0laRSkKKworLyogT3BlblNTTCBjdXJyZW50bHkgb25seSB1c2VzIGEgcGFkZGluZyBsZW5ndGggb2YgYXQgbW9zdCBvbmUgYmxvY2sgc28KKyAqIHRoZSBzZW5kIG92ZXJoZWFkIGlzIHNtYWxsZXIuCisgKi8KKworI2RlZmluZSBTU0wzX1JUX1NFTkRfTUFYX0VOQ1JZUFRFRF9PVkVSSEVBRCBcCisJCQkoU1NMX1JUX01BWF9DSVBIRVJfQkxPQ0tfU0laRSArIFNTTDNfUlRfTUFYX01EX1NJWkUpCisKKy8qIElmIGNvbXByZXNzaW9uIGlzbid0IHVzZWQgZG9uJ3QgaW5jbHVkZSB0aGUgY29tcHJlc3Npb24gb3ZlcmhlYWQgKi8KKwogI2lmZGVmIE9QRU5TU0xfTk9fQ09NUAotI2RlZmluZSBTU0wzX1JUX01BWF9DT01QUkVTU0VEX0xFTkdUSAlTU0wzX1JUX01BWF9QTEFJTl9MRU5HVEgKKyNkZWZpbmUgU1NMM19SVF9NQVhfQ09NUFJFU1NFRF9MRU5HVEgJCVNTTDNfUlRfTUFYX1BMQUlOX0xFTkdUSAogI2Vsc2UKLSNkZWZpbmUgU1NMM19SVF9NQVhfQ09NUFJFU1NFRF9MRU5HVEgJKDEwMjQrU1NMM19SVF9NQVhfUExBSU5fTEVOR1RIKQorI2RlZmluZSBTU0wzX1JUX01BWF9DT01QUkVTU0VEX0xFTkdUSAlcCisJCShTU0wzX1JUX01BWF9QTEFJTl9MRU5HVEgrU1NMM19SVF9NQVhfQ09NUFJFU1NFRF9PVkVSSEVBRCkKICNlbmRpZgotI2RlZmluZSBTU0wzX1JUX01BWF9FTkNSWVBURURfTEVOR1RICSgxMDI0K1NTTDNfUlRfTUFYX0NPTVBSRVNTRURfTEVOR1RIKQorI2RlZmluZSBTU0wzX1JUX01BWF9FTkNSWVBURURfTEVOR1RICVwKKwkJKFNTTDNfUlRfTUFYX0VOQ1JZUFRFRF9PVkVSSEVBRCtTU0wzX1JUX01BWF9DT01QUkVTU0VEX0xFTkdUSCkKKyNkZWZpbmUgU1NMM19SVF9NQVhfUEFDS0VUX1NJWkUJCVwKKwkJKFNTTDNfUlRfTUFYX0VOQ1JZUFRFRF9MRU5HVEgrU1NMM19SVF9IRUFERVJfTEVOR1RIKQorCiAvKiBFeHRyYSBzcGFjZSBmb3IgZW1wdHkgZnJhZ21lbnQsIGhlYWRlcnMsIE1BQywgYW5kIHBhZGRpbmcuICovCiAjZGVmaW5lIFNTTDNfUlRfREVGQVVMVF9XUklURV9PVkVSSEVBRCAgMjU2CiAjZGVmaW5lIFNTTDNfUlRfREVGQVVMVF9QQUNLRVRfU0laRSAgICAgNDA5NiAtIFNTTDNfUlRfREVGQVVMVF9XUklURV9PVkVSSEVBRAogI2lmIFNTTDNfUlRfREVGQVVMVF9QTEFJTl9MRU5HVEggKyBTU0wzX1JUX0RFRkFVTFRfV1JJVEVfT1ZFUkhFQUQgPiBTU0wzX1JUX0RFRkFVTFRfUEFDS0VUX1NJWkUKICNlcnJvciAiSW5zdWZmaWNpZW50IHNwYWNlIGFsbG9jYXRlZCBmb3Igd3JpdGUgYnVmZmVycy4iCiAjZW5kaWYKLSNkZWZpbmUgU1NMM19SVF9NQVhfUEFDS0VUX1NJWkUJCShTU0wzX1JUX01BWF9FTkNSWVBURURfTEVOR1RIK1NTTDNfUlRfSEVBREVSX0xFTkdUSCkKLSNkZWZpbmUgU1NMM19SVF9NQVhfREFUQV9TSVpFCQkJKDEwMjQqMTAyNCkKIAogI2RlZmluZSBTU0wzX01EX0NMSUVOVF9GSU5JU0hFRF9DT05TVAkiXHg0M1x4NENceDRFXHg1NCIKICNkZWZpbmUgU1NMM19NRF9TRVJWRVJfRklOSVNIRURfQ09OU1QJIlx4NTNceDUyXHg1Nlx4NTIiCkBAIC0zMTIsNyArMzU4LDcgQEAKIC8qcncqLwl1bnNpZ25lZCBjaGFyICppbnB1dDsgICAvKiB3aGVyZSB0aGUgZGVjb2RlIGJ5dGVzIGFyZSAqLwogLypyICovCXVuc2lnbmVkIGNoYXIgKmNvbXA7ICAgIC8qIG9ubHkgdXNlZCB3aXRoIGRlY29tcHJlc3Npb24gLSBtYWxsb2MoKWVkICovCiAvKnIgKi8gIHVuc2lnbmVkIGxvbmcgZXBvY2g7ICAgIC8qIGVwb2NoIG51bWJlciwgbmVlZGVkIGJ5IERUTFMxICovCi0vKnIgKi8gIFBRXzY0QklUIHNlcV9udW07ICAgICAgIC8qIHNlcXVlbmNlIG51bWJlciwgbmVlZGVkIGJ5IERUTFMxICovCisvKnIgKi8gIHVuc2lnbmVkIGNoYXIgc2VxX251bVs4XTsgLyogc2VxdWVuY2UgbnVtYmVyLCBuZWVkZWQgYnkgRFRMUzEgKi8KIAl9IFNTTDNfUkVDT1JEOwogCiB0eXBlZGVmIHN0cnVjdCBzc2wzX2J1ZmZlcl9zdApAQCAtMzM1LDEzICszODEsMTQgQEAKICAqIGVub3VnaCB0byBjb250YWluIGFsbCBvZiB0aGUgY2VydCB0eXBlcyBkZWZpbmVkIGVpdGhlciBmb3IKICAqIFNTTHYzIGFuZCBUTFN2MS4KICAqLwotI2RlZmluZSBTU0wzX0NUX05VTUJFUgkJCTcKKyNkZWZpbmUgU1NMM19DVF9OVU1CRVIJCQk5CiAKIAogI2RlZmluZSBTU0wzX0ZMQUdTX05PX1JFTkVHT1RJQVRFX0NJUEhFUlMJMHgwMDAxCiAjZGVmaW5lIFNTTDNfRkxBR1NfREVMQVlfQ0xJRU5UX0ZJTklTSEVECTB4MDAwMgogI2RlZmluZSBTU0wzX0ZMQUdTX1BPUF9CVUZGRVIJCQkweDAwMDQKICNkZWZpbmUgVExTMV9GTEFHU19UTFNfUEFERElOR19CVUcJCTB4MDAwOAorI2RlZmluZSBUTFMxX0ZMQUdTX1NLSVBfQ0VSVF9WRVJJRlkJCTB4MDAxMAogCiB0eXBlZGVmIHN0cnVjdCBzc2wzX3N0YXRlX3N0CiAJewpAQCAtMzQ5LDggKzM5NiwxMCBAQAogCWludCBkZWxheV9idWZfcG9wX3JldDsKIAogCXVuc2lnbmVkIGNoYXIgcmVhZF9zZXF1ZW5jZVs4XTsKKwlpbnQgcmVhZF9tYWNfc2VjcmV0X3NpemU7CiAJdW5zaWduZWQgY2hhciByZWFkX21hY19zZWNyZXRbRVZQX01BWF9NRF9TSVpFXTsKIAl1bnNpZ25lZCBjaGFyIHdyaXRlX3NlcXVlbmNlWzhdOworCWludCB3cml0ZV9tYWNfc2VjcmV0X3NpemU7CiAJdW5zaWduZWQgY2hhciB3cml0ZV9tYWNfc2VjcmV0W0VWUF9NQVhfTURfU0laRV07CiAKIAl1bnNpZ25lZCBjaGFyIHNlcnZlcl9yYW5kb21bU1NMM19SQU5ET01fU0laRV07CkBAIC0zNjAsNiArNDA5LDkgQEAKIAlpbnQgbmVlZF9lbXB0eV9mcmFnbWVudHM7CiAJaW50IGVtcHR5X2ZyYWdtZW50X2RvbmU7CiAKKwkvKiBUaGUgdmFsdWUgb2YgJ2V4dHJhJyB3aGVuIHRoZSBidWZmZXJzIHdlcmUgaW5pdGlhbGl6ZWQgKi8KKwlpbnQgaW5pdF9leHRyYTsKKwogCVNTTDNfQlVGRkVSIHJidWY7CS8qIHJlYWQgSU8gZ29lcyBpbnRvIGhlcmUgKi8KIAlTU0wzX0JVRkZFUiB3YnVmOwkvKiB3cml0ZSBJTyBnb2VzIGludG8gaGVyZSAqLwogCkBAIC0zODEsOSArNDMzLDExIEBACiAJY29uc3QgdW5zaWduZWQgY2hhciAqd3BlbmRfYnVmOwogCiAJLyogdXNlZCBkdXJpbmcgc3RhcnR1cCwgZGlnZXN0IGFsbCBpbmNvbWluZy9vdXRnb2luZyBwYWNrZXRzICovCi0JRVZQX01EX0NUWCBmaW5pc2hfZGdzdDE7Ci0JRVZQX01EX0NUWCBmaW5pc2hfZGdzdDI7Ci0KKwlCSU8gKmhhbmRzaGFrZV9idWZmZXI7CisJLyogV2hlbiBzZXQgb2YgaGFuZHNoYWtlIGRpZ2VzdHMgaXMgZGV0ZXJtaW5lZCwgYnVmZmVyIGlzIGhhc2hlZAorCSAqIGFuZCBmcmVlZCBhbmQgTURfQ1RYLWVzIGZvciBhbGwgcmVxdWlyZWQgZGlnZXN0cyBhcmUgc3RvcmVkIGluCisJICogdGhpcyBhcnJheSAqLworCUVWUF9NRF9DVFggKipoYW5kc2hha2VfZGdzdDsKIAkvKiB0aGlzIGlzIHNldCB3aGVuZXJ2ZXIgd2Ugc2VlIGEgY2hhbmdlX2NpcGhlcl9zcGVjIG1lc3NhZ2UKIAkgKiBjb21lIGluIHdoZW4gd2UgYXJlIG5vdCBsb29raW5nIGZvciBvbmUgKi8KIAlpbnQgY2hhbmdlX2NpcGhlcl9zcGVjOwpAQCAtNDAzLDYgKzQ1NywxNCBAQAogCiAJaW50IGluX3JlYWRfYXBwX2RhdGE7CiAKKwkvKiBPcGFxdWUgUFJGIGlucHV0IGFzIHVzZWQgZm9yIHRoZSBjdXJyZW50IGhhbmRzaGFrZS4KKwkgKiBUaGVzZSBmaWVsZHMgYXJlIHVzZWQgb25seSBpZiBUTFNFWFRfVFlQRV9vcGFxdWVfcHJmX2lucHV0IGlzIGRlZmluZWQKKwkgKiAob3RoZXJ3aXNlLCB0aGV5IGFyZSBtZXJlbHkgcHJlc2VudCB0byBpbXByb3ZlIGJpbmFyeSBjb21wYXRpYmlsaXR5KSAqLworCXZvaWQgKmNsaWVudF9vcGFxdWVfcHJmX2lucHV0OworCXNpemVfdCBjbGllbnRfb3BhcXVlX3ByZl9pbnB1dF9sZW47CisJdm9pZCAqc2VydmVyX29wYXF1ZV9wcmZfaW5wdXQ7CisJc2l6ZV90IHNlcnZlcl9vcGFxdWVfcHJmX2lucHV0X2xlbjsKKwogCXN0cnVjdAl7CiAJCS8qIGFjdHVhbGx5IG9ubHkgbmVlZHMgdG8gYmUgMTYrMjAgKi8KIAkJdW5zaWduZWQgY2hhciBjZXJ0X3ZlcmlmeV9tZFtFVlBfTUFYX01EX1NJWkUqMl07CkBAIC00MTcsNyArNDc5LDcgQEAKIAkJaW50IG1lc3NhZ2VfdHlwZTsKIAogCQkvKiB1c2VkIHRvIGhvbGQgdGhlIG5ldyBjaXBoZXIgd2UgYXJlIGdvaW5nIHRvIHVzZSAqLwotCQlTU0xfQ0lQSEVSICpuZXdfY2lwaGVyOworCQljb25zdCBTU0xfQ0lQSEVSICpuZXdfY2lwaGVyOwogI2lmbmRlZiBPUEVOU1NMX05PX0RICiAJCURIICpkaDsKICNlbmRpZgpAQCAtNDQ0LDYgKzUwNiw4IEBACiAKIAkJY29uc3QgRVZQX0NJUEhFUiAqbmV3X3N5bV9lbmM7CiAJCWNvbnN0IEVWUF9NRCAqbmV3X2hhc2g7CisJCWludCBuZXdfbWFjX3BrZXlfdHlwZTsKKwkJaW50IG5ld19tYWNfc2VjcmV0X3NpemU7CiAjaWZuZGVmIE9QRU5TU0xfTk9fQ09NUAogCQljb25zdCBTU0xfQ09NUCAqbmV3X2NvbXByZXNzaW9uOwogI2Vsc2UKQEAgLTU4MCw0ICs2NDQsMyBAQAogfQogI2VuZGlmCiAjZW5kaWYKLQpkaWZmIC0tZ2l0IGEvc3NsL3NzbF9hbGdzLmMgYi9zc2wvc3NsX2FsZ3MuYwppbmRleCAyZDkwNzdlLi5hMjZhZTQzIDEwMDY0NAotLS0gYS9zc2wvc3NsX2FsZ3MuYworKysgYi9zc2wvc3NsX2FsZ3MuYwpAQCAtNzYsMTMgKzc2LDE2IEBACiAjZW5kaWYgIAogI2lmbmRlZiBPUEVOU1NMX05PX1JDMgogCUVWUF9hZGRfY2lwaGVyKEVWUF9yYzJfY2JjKCkpOworCS8qIE5vdCBhY3R1YWxseSB1c2VkIGZvciBTU0wvVExTIGJ1dCB0aGlzIG1ha2VzIFBLQ1MjMTIgd29yaworCSAqIGlmIGFuIGFwcGxpY2F0aW9uIG9ubHkgY2FsbHMgU1NMX2xpYnJhcnlfaW5pdCgpLgorCSAqLworCUVWUF9hZGRfY2lwaGVyKEVWUF9yYzJfNDBfY2JjKCkpOwogI2VuZGlmCiAjaWZuZGVmIE9QRU5TU0xfTk9fQUVTCiAJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfY2JjKCkpOwogCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2NiYygpKTsKIAlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9jYmMoKSk7CiAjZW5kaWYKLQogI2lmbmRlZiBPUEVOU1NMX05PX0NBTUVMTElBCiAJRVZQX2FkZF9jaXBoZXIoRVZQX2NhbWVsbGlhXzEyOF9jYmMoKSk7CiAJRVZQX2FkZF9jaXBoZXIoRVZQX2NhbWVsbGlhXzI1Nl9jYmMoKSk7CkBAIC05MSw3ICs5NCw3IEBACiAjaWZuZGVmIE9QRU5TU0xfTk9fU0VFRAogCUVWUF9hZGRfY2lwaGVyKEVWUF9zZWVkX2NiYygpKTsKICNlbmRpZgotCisgIAogI2lmbmRlZiBPUEVOU1NMX05PX01ENQogCUVWUF9hZGRfZGlnZXN0KEVWUF9tZDUoKSk7CiAJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fbWQ1LCJzc2wyLW1kNSIpOwpkaWZmIC0tZ2l0IGEvc3NsL3NzbF9hc24xLmMgYi9zc2wvc3NsX2FzbjEuYwppbmRleCBkODJlNDdhLi4yODcwOTk3IDEwMDY0NAotLS0gYS9zc2wvc3NsX2FzbjEuYworKysgYi9zc2wvc3NsX2FzbjEuYwpAQCAtNTUsNiArNTUsMzIgQEAKICAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKICAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCiAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgMjAwNSBOb2tpYS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGUgcG9ydGlvbnMgb2YgdGhlIGF0dGFjaGVkIHNvZnR3YXJlICgiQ29udHJpYnV0aW9uIikgaXMgZGV2ZWxvcGVkIGJ5CisgKiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQgaXMgbGljZW5zZWQgcHVyc3VhbnQgdG8gdGhlIE9wZW5TU0wgb3BlbiBzb3VyY2UKKyAqIGxpY2Vuc2UuCisgKgorICogVGhlIENvbnRyaWJ1dGlvbiwgb3JpZ2luYWxseSB3cml0dGVuIGJ5IE1pa2EgS291c2EgYW5kIFBhc2kgRXJvbmVuIG9mCisgKiBOb2tpYSBDb3Jwb3JhdGlvbiwgY29uc2lzdHMgb2YgdGhlICJQU0siIChQcmUtU2hhcmVkIEtleSkgY2lwaGVyc3VpdGVzCisgKiBzdXBwb3J0IChzZWUgUkZDIDQyNzkpIHRvIE9wZW5TU0wuCisgKgorICogTm8gcGF0ZW50IGxpY2Vuc2VzIG9yIG90aGVyIHJpZ2h0cyBleGNlcHQgdGhvc2UgZXhwcmVzc2x5IHN0YXRlZCBpbgorICogdGhlIE9wZW5TU0wgb3BlbiBzb3VyY2UgbGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgZ3JhbnRlZCBvciByZWNlaXZlZAorICogZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwsIG9yIG90aGVyd2lzZS4KKyAqCisgKiBObyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBOb2tpYSB0aGF0IHRoZSBDb250cmlidXRpb24gZG9lcyBub3QKKyAqIGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkgdGhpcmQKKyAqIHBhcnR5IG9yIHRoYXQgdGhlIGxpY2Vuc2UgcHJvdmlkZXMgeW91IHdpdGggYWxsIHRoZSBuZWNlc3NhcnkgcmlnaHRzCisgKiB0byBtYWtlIHVzZSBvZiB0aGUgQ29udHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQuIElOCisgKiBBRERJVElPTiBUTyBUSEUgRElTQ0xBSU1FUlMgSU5DTFVERUQgSU4gVEhFIExJQ0VOU0UsIE5PS0lBCisgKiBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1TIEFOWSBMSUFCSUxJVFkgRk9SIENMQUlNUyBCUk9VR0hUIEJZIFlPVSBPUiBBTlkKKyAqIE9USEVSIEVOVElUWSBCQVNFRCBPTiBJTkZSSU5HRU1FTlQgT0YgSU5URUxMRUNUVUFMIFBST1BFUlRZIFJJR0hUUyBPUgorICogT1RIRVJXSVNFLgorICovCiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgpAQCAtODQsMTIgKzExMCwxNiBAQAogCUFTTjFfSU5URUdFUiB0bHNleHRfdGlja19saWZldGltZTsKIAlBU04xX09DVEVUX1NUUklORyB0bHNleHRfdGljazsKICNlbmRpZiAvKiBPUEVOU1NMX05PX1RMU0VYVCAqLworI2lmbmRlZiBPUEVOU1NMX05PX1BTSworCUFTTjFfT0NURVRfU1RSSU5HIHBza19pZGVudGl0eV9oaW50OworCUFTTjFfT0NURVRfU1RSSU5HIHBza19pZGVudGl0eTsKKyNlbmRpZiAvKiBPUEVOU1NMX05PX1BTSyAqLwogCX0gU1NMX1NFU1NJT05fQVNOMTsKIAogaW50IGkyZF9TU0xfU0VTU0lPTihTU0xfU0VTU0lPTiAqaW4sIHVuc2lnbmVkIGNoYXIgKipwcCkKIAl7CiAjZGVmaW5lIExTSVpFMiAoc2l6ZW9mKGxvbmcpKjIpCi0JaW50IHYxPTAsdjI9MCx2Mz0wLHY0PTAsdjU9MDsKKwlpbnQgdjE9MCx2Mj0wLHYzPTAsdjQ9MCx2NT0wLHY3PTAsdjg9MDsKIAl1bnNpZ25lZCBjaGFyIGJ1Zls0XSxpYnVmMVtMU0laRTJdLGlidWYyW0xTSVpFMl07CiAJdW5zaWduZWQgY2hhciBpYnVmM1tMU0laRTJdLGlidWY0W0xTSVpFMl0saWJ1ZjVbTFNJWkUyXTsKICNpZm5kZWYgT1BFTlNTTF9OT19UTFNFWFQKQEAgLTk3LDggKzEyNyw4IEBACiAJdW5zaWduZWQgY2hhciBpYnVmNltMU0laRTJdOwogI2VuZGlmCiAjaWZuZGVmIE9QRU5TU0xfTk9fQ09NUAotCWludCB2MTE9MDsKIAl1bnNpZ25lZCBjaGFyIGNidWY7CisJaW50IHYxMT0wOwogI2VuZGlmCiAJbG9uZyBsOwogCVNTTF9TRVNTSU9OX0FTTjEgYTsKQEAgLTE3Nyw3ICsyMDcsNyBAQAogCQlhLmtyYjVfcHJpbmMuZGF0YT1pbi0+a3JiNV9jbGllbnRfcHJpbmM7CiAJCX0KICNlbmRpZiAvKiBPUEVOU1NMX05PX0tSQjUgKi8KLSAKKwogCWlmIChpbi0+dGltZSAhPSAwTCkKIAkJewogCQlhLnRpbWUubGVuZ3RoPUxTSVpFMjsKQEAgLTIyMyw2ICsyNTMsMjEgQEAKIAkJQVNOMV9JTlRFR0VSX3NldCgmYS50bHNleHRfdGlja19saWZldGltZSxpbi0+dGxzZXh0X3RpY2tfbGlmZXRpbWVfaGludCk7CiAJCX0KICNlbmRpZiAvKiBPUEVOU1NMX05PX1RMU0VYVCAqLworI2lmbmRlZiBPUEVOU1NMX05PX1BTSworCWlmIChpbi0+cHNrX2lkZW50aXR5X2hpbnQpCisJCXsKKwkJYS5wc2tfaWRlbnRpdHlfaGludC5sZW5ndGg9c3RybGVuKGluLT5wc2tfaWRlbnRpdHlfaGludCk7CisJCWEucHNrX2lkZW50aXR5X2hpbnQudHlwZT1WX0FTTjFfT0NURVRfU1RSSU5HOworCQlhLnBza19pZGVudGl0eV9oaW50LmRhdGE9KHVuc2lnbmVkIGNoYXIgKikoaW4tPnBza19pZGVudGl0eV9oaW50KTsKKwkJfQorCWlmIChpbi0+cHNrX2lkZW50aXR5KQorCQl7CisJCWEucHNrX2lkZW50aXR5Lmxlbmd0aD1zdHJsZW4oaW4tPnBza19pZGVudGl0eSk7CisJCWEucHNrX2lkZW50aXR5LnR5cGU9Vl9BU04xX09DVEVUX1NUUklORzsKKwkJYS5wc2tfaWRlbnRpdHkuZGF0YT0odW5zaWduZWQgY2hhciAqKShpbi0+cHNrX2lkZW50aXR5KTsKKwkJfQorI2VuZGlmIC8qIE9QRU5TU0xfTk9fUFNLICovCisKIAlNX0FTTjFfSTJEX2xlbigmKGEudmVyc2lvbiksCQlpMmRfQVNOMV9JTlRFR0VSKTsKIAlNX0FTTjFfSTJEX2xlbigmKGEuc3NsX3ZlcnNpb24pLAlpMmRfQVNOMV9JTlRFR0VSKTsKIAlNX0FTTjFfSTJEX2xlbigmKGEuY2lwaGVyKSwJCWkyZF9BU04xX09DVEVUX1NUUklORyk7CkBAIC0yNTYsNiArMzAxLDEzIEBACiAgICAgICAgIAlNX0FTTjFfSTJEX2xlbl9FWFBfb3B0KCYoYS5jb21wX2lkKSwgaTJkX0FTTjFfT0NURVRfU1RSSU5HLDExLHYxMSk7CiAjZW5kaWYKICNlbmRpZiAvKiBPUEVOU1NMX05PX1RMU0VYVCAqLworI2lmbmRlZiBPUEVOU1NMX05PX1BTSworCWlmIChpbi0+cHNrX2lkZW50aXR5X2hpbnQpCisgICAgICAgIAlNX0FTTjFfSTJEX2xlbl9FWFBfb3B0KCYoYS5wc2tfaWRlbnRpdHlfaGludCksIGkyZF9BU04xX09DVEVUX1NUUklORyw3LHY3KTsKKwlpZiAoaW4tPnBza19pZGVudGl0eSkKKyAgICAgICAgCU1fQVNOMV9JMkRfbGVuX0VYUF9vcHQoJihhLnBza19pZGVudGl0eSksIGkyZF9BU04xX09DVEVUX1NUUklORyw4LHY4KTsKKyNlbmRpZiAvKiBPUEVOU1NMX05PX1BTSyAqLworCiAJTV9BU04xX0kyRF9zZXFfdG90YWwoKTsKIAogCU1fQVNOMV9JMkRfcHV0KCYoYS52ZXJzaW9uKSwJCWkyZF9BU04xX0lOVEVHRVIpOwpAQCAtMjgyLDYgKzMzNCwxNCBAQAogI2lmbmRlZiBPUEVOU1NMX05PX1RMU0VYVAogCWlmIChpbi0+dGxzZXh0X2hvc3RuYW1lKQogICAgICAgICAJTV9BU04xX0kyRF9wdXRfRVhQX29wdCgmKGEudGxzZXh0X2hvc3RuYW1lKSwgaTJkX0FTTjFfT0NURVRfU1RSSU5HLDYsdjYpOworI2VuZGlmIC8qIE9QRU5TU0xfTk9fVExTRVhUICovCisjaWZuZGVmIE9QRU5TU0xfTk9fUFNLCisJaWYgKGluLT5wc2tfaWRlbnRpdHlfaGludCkKKwkJTV9BU04xX0kyRF9wdXRfRVhQX29wdCgmKGEucHNrX2lkZW50aXR5X2hpbnQpLCBpMmRfQVNOMV9PQ1RFVF9TVFJJTkcsNyx2Nyk7CisJaWYgKGluLT5wc2tfaWRlbnRpdHkpCisJCU1fQVNOMV9JMkRfcHV0X0VYUF9vcHQoJihhLnBza19pZGVudGl0eSksIGkyZF9BU04xX09DVEVUX1NUUklORyw4LHY4KTsKKyNlbmRpZiAvKiBPUEVOU1NMX05PX1BTSyAqLworI2lmbmRlZiBPUEVOU1NMX05PX1RMU0VYVAogCWlmIChpbi0+dGxzZXh0X3RpY2tfbGlmZXRpbWVfaGludCA+IDApCiAgICAgICAJIAlNX0FTTjFfSTJEX3B1dF9FWFBfb3B0KCZhLnRsc2V4dF90aWNrX2xpZmV0aW1lLCBpMmRfQVNOMV9JTlRFR0VSLDksdjkpOwogCWlmIChpbi0+dGxzZXh0X3RpY2spCkBAIC0yOTUsNyArMzU1LDcgQEAKIAl9CiAKIFNTTF9TRVNTSU9OICpkMmlfU1NMX1NFU1NJT04oU1NMX1NFU1NJT04gKiphLCBjb25zdCB1bnNpZ25lZCBjaGFyICoqcHAsCi0JICAgICBsb25nIGxlbmd0aCkKKwkJCSAgICAgbG9uZyBsZW5ndGgpCiAJewogCWludCB2ZXJzaW9uLHNzbF92ZXJzaW9uPTAsaTsKIAlsb25nIGlkOwpAQCAtNDc1LDYgKzUzNSwyNCBAQAogCQl9CiAJZWxzZQogCQlyZXQtPnRsc2V4dF9ob3N0bmFtZT1OVUxMOworI2VuZGlmIC8qIE9QRU5TU0xfTk9fVExTRVhUICovCisKKyNpZm5kZWYgT1BFTlNTTF9OT19QU0sKKwlvcy5sZW5ndGg9MDsKKwlvcy5kYXRhPU5VTEw7CisJTV9BU04xX0QySV9nZXRfRVhQX29wdChvc3AsZDJpX0FTTjFfT0NURVRfU1RSSU5HLDcpOworCWlmIChvcy5kYXRhKQorCQl7CisJCXJldC0+cHNrX2lkZW50aXR5X2hpbnQgPSBCVUZfc3RybmR1cCgoY2hhciAqKW9zLmRhdGEsIG9zLmxlbmd0aCk7CisJCU9QRU5TU0xfZnJlZShvcy5kYXRhKTsKKwkJb3MuZGF0YSA9IE5VTEw7CisJCW9zLmxlbmd0aCA9IDA7CisJCX0KKwllbHNlCisJCXJldC0+cHNrX2lkZW50aXR5X2hpbnQ9TlVMTDsKKyNlbmRpZiAvKiBPUEVOU1NMX05PX1BTSyAqLworCisjaWZuZGVmIE9QRU5TU0xfTk9fVExTRVhUCiAJYWkubGVuZ3RoPTA7CiAJTV9BU04xX0QySV9nZXRfRVhQX29wdChhaXAsZDJpX0FTTjFfSU5URUdFUiw5KTsKIAlpZiAoYWkuZGF0YSAhPSBOVUxMKQpAQCAtNDg1LDE3ICs1NjMsMTcgQEAKIAllbHNlIGlmIChyZXQtPnRsc2V4dF90aWNrbGVuICYmIHJldC0+c2Vzc2lvbl9pZF9sZW5ndGgpCiAJCXJldC0+dGxzZXh0X3RpY2tfbGlmZXRpbWVfaGludCA9IC0xOwogCWVsc2UKLQkJcmV0LT50bHNleHRfdGlja19saWZldGltZV9oaW50ID0gMDsKLSAJb3MubGVuZ3RoPTA7Ci0gCW9zLmRhdGE9TlVMTDsKLSAgCU1fQVNOMV9EMklfZ2V0X0VYUF9vcHQob3NwLGQyaV9BU04xX09DVEVUX1NUUklORywxMCk7Ci0gCWlmIChvcy5kYXRhKQotIAkJeworCQlyZXQtPnRsc2V4dF90aWNrX2xpZmV0aW1lX2hpbnQ9MDsKKwlvcy5sZW5ndGg9MDsKKwlvcy5kYXRhPU5VTEw7CisJTV9BU04xX0QySV9nZXRfRVhQX29wdChvc3AsZDJpX0FTTjFfT0NURVRfU1RSSU5HLDEwKTsKKwlpZiAob3MuZGF0YSkKKwkJewogCQlyZXQtPnRsc2V4dF90aWNrID0gb3MuZGF0YTsKIAkJcmV0LT50bHNleHRfdGlja2xlbiA9IG9zLmxlbmd0aDsKLSAJCW9zLmRhdGEgPSBOVUxMOwotIAkJb3MubGVuZ3RoID0gMDsKLSAJCX0KKwkJb3MuZGF0YSA9IE5VTEw7CisJCW9zLmxlbmd0aCA9IDA7CisJCX0KIAllbHNlCiAJCXJldC0+dGxzZXh0X3RpY2s9TlVMTDsKICNlbmRpZiAvKiBPUEVOU1NMX05PX1RMU0VYVCAqLwpkaWZmIC0tZ2l0IGEvc3NsL3NzbF9jZXJ0LmMgYi9zc2wvc3NsX2NlcnQuYwppbmRleCAxNmZkYTVkLi4yNzI1NmVlIDEwMDY0NAotLS0gYS9zc2wvc3NsX2NlcnQuYworKysgYi9zc2wvc3NsX2NlcnQuYwpAQCAtNTYsNyArNTYsNyBAQAogICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KICAqLwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE5Nyw4ICsxOTcsMTAgQEAKIAkgKiBpZiB5b3UgZmluZCB0aGF0IG1vcmUgcmVhZGFibGUgKi8KIAogCXJldC0+dmFsaWQgPSBjZXJ0LT52YWxpZDsKLQlyZXQtPm1hc2sgPSBjZXJ0LT5tYXNrOwotCXJldC0+ZXhwb3J0X21hc2sgPSBjZXJ0LT5leHBvcnRfbWFzazsKKwlyZXQtPm1hc2tfayA9IGNlcnQtPm1hc2tfazsKKwlyZXQtPm1hc2tfYSA9IGNlcnQtPm1hc2tfYTsKKwlyZXQtPmV4cG9ydF9tYXNrX2sgPSBjZXJ0LT5leHBvcnRfbWFza19rOworCXJldC0+ZXhwb3J0X21hc2tfYSA9IGNlcnQtPmV4cG9ydF9tYXNrX2E7CiAKICNpZm5kZWYgT1BFTlNTTF9OT19SU0EKIAlpZiAoY2VydC0+cnNhX3RtcCAhPSBOVUxMKQpAQCAtNzUzLDYgKzc1NSw4IEBACiAJCQlza19YNTA5X05BTUVfcHVzaChzdGFjayx4bik7CiAJCX0KIAorCUVSUl9jbGVhcl9lcnJvcigpOworCiAJaWYgKDApCiAJCXsKIGVycjoKZGlmZiAtLWdpdCBhL3NzbC9zc2xfY2lwaC5jIGIvc3NsL3NzbF9jaXBoLmMKaW5kZXggNWUyZDQzNi4uYmVlMzUwNyAxMDA2NDQKLS0tIGEvc3NsL3NzbF9jaXBoLmMKKysrIGIvc3NsL3NzbF9jaXBoLmMKQEAgLTU2LDcgKzU2LDcgQEAKICAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCiAgKi8KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTMsMTIgKzExMyw0MSBAQAogICogRUNDIGNpcGhlciBzdWl0ZSBzdXBwb3J0IGluIE9wZW5TU0wgb3JpZ2luYWxseSBkZXZlbG9wZWQgYnkgCiAgKiBTVU4gTUlDUk9TWVNURU1TLCBJTkMuLCBhbmQgY29udHJpYnV0ZWQgdG8gdGhlIE9wZW5TU0wgcHJvamVjdC4KICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAyMDA1IE5va2lhLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoZSBwb3J0aW9ucyBvZiB0aGUgYXR0YWNoZWQgc29mdHdhcmUgKCJDb250cmlidXRpb24iKSBpcyBkZXZlbG9wZWQgYnkKKyAqIE5va2lhIENvcnBvcmF0aW9uIGFuZCBpcyBsaWNlbnNlZCBwdXJzdWFudCB0byB0aGUgT3BlblNTTCBvcGVuIHNvdXJjZQorICogbGljZW5zZS4KKyAqCisgKiBUaGUgQ29udHJpYnV0aW9uLCBvcmlnaW5hbGx5IHdyaXR0ZW4gYnkgTWlrYSBLb3VzYSBhbmQgUGFzaSBFcm9uZW4gb2YKKyAqIE5va2lhIENvcnBvcmF0aW9uLCBjb25zaXN0cyBvZiB0aGUgIlBTSyIgKFByZS1TaGFyZWQgS2V5KSBjaXBoZXJzdWl0ZXMKKyAqIHN1cHBvcnQgKHNlZSBSRkMgNDI3OSkgdG8gT3BlblNTTC4KKyAqCisgKiBObyBwYXRlbnQgbGljZW5zZXMgb3Igb3RoZXIgcmlnaHRzIGV4Y2VwdCB0aG9zZSBleHByZXNzbHkgc3RhdGVkIGluCisgKiB0aGUgT3BlblNTTCBvcGVuIHNvdXJjZSBsaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCBncmFudGVkIG9yIHJlY2VpdmVkCisgKiBleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCwgb3Igb3RoZXJ3aXNlLgorICoKKyAqIE5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IE5va2lhIHRoYXQgdGhlIENvbnRyaWJ1dGlvbiBkb2VzIG5vdAorICogaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIGFueSB0aGlyZAorICogcGFydHkgb3IgdGhhdCB0aGUgbGljZW5zZSBwcm92aWRlcyB5b3Ugd2l0aCBhbGwgdGhlIG5lY2Vzc2FyeSByaWdodHMKKyAqIHRvIG1ha2UgdXNlIG9mIHRoZSBDb250cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORC4gSU4KKyAqIEFERElUSU9OIFRPIFRIRSBESVNDTEFJTUVSUyBJTkNMVURFRCBJTiBUSEUgTElDRU5TRSwgTk9LSUEKKyAqIFNQRUNJRklDQUxMWSBESVNDTEFJTVMgQU5ZIExJQUJJTElUWSBGT1IgQ0xBSU1TIEJST1VHSFQgQlkgWU9VIE9SIEFOWQorICogT1RIRVIgRU5USVRZIEJBU0VEIE9OIElORlJJTkdFTUVOVCBPRiBJTlRFTExFQ1RVQUwgUFJPUEVSVFkgUklHSFRTIE9SCisgKiBPVEhFUldJU0UuCisgKi8KKwogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+CiAjaWZuZGVmIE9QRU5TU0xfTk9fQ09NUAogI2luY2x1ZGUgPG9wZW5zc2wvY29tcC5oPgogI2VuZGlmCi0KKyNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKKyNpbmNsdWRlIDxvcGVuc3NsL2VuZ2luZS5oPgorI2VuZGlmCiAjaW5jbHVkZSAic3NsX2xvY2wuaCIKIAogI2RlZmluZSBTU0xfRU5DX0RFU19JRFgJCTAKQEAgLTEyNiwxOCArMTU1LDE4IEBACiAjZGVmaW5lIFNTTF9FTkNfUkM0X0lEWAkJMgogI2RlZmluZSBTU0xfRU5DX1JDMl9JRFgJCTMKICNkZWZpbmUgU1NMX0VOQ19JREVBX0lEWAk0Ci0jZGVmaW5lIFNTTF9FTkNfZUZaQV9JRFgJNQotI2RlZmluZSBTU0xfRU5DX05VTExfSURYCTYKLSNkZWZpbmUgU1NMX0VOQ19BRVMxMjhfSURYCTcKLSNkZWZpbmUgU1NMX0VOQ19BRVMyNTZfSURYCTgKLSNkZWZpbmUgU1NMX0VOQ19DQU1FTExJQTEyOF9JRFgJOQotI2RlZmluZSBTU0xfRU5DX0NBTUVMTElBMjU2X0lEWAkxMAorI2RlZmluZSBTU0xfRU5DX05VTExfSURYCTUKKyNkZWZpbmUgU1NMX0VOQ19BRVMxMjhfSURYCTYKKyNkZWZpbmUgU1NMX0VOQ19BRVMyNTZfSURYCTcKKyNkZWZpbmUgU1NMX0VOQ19DQU1FTExJQTEyOF9JRFgJOAorI2RlZmluZSBTU0xfRU5DX0NBTUVMTElBMjU2X0lEWAk5CisjZGVmaW5lIFNTTF9FTkNfR09TVDg5X0lEWAkxMAogI2RlZmluZSBTU0xfRU5DX1NFRURfSURYICAgIAkxMQogI2RlZmluZSBTU0xfRU5DX05VTV9JRFgJCTEyCiAKIAogc3RhdGljIGNvbnN0IEVWUF9DSVBIRVIgKnNzbF9jaXBoZXJfbWV0aG9kc1tTU0xfRU5DX05VTV9JRFhdPXsKLQlOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCwKKwlOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsCiAJfTsKIAogI2RlZmluZSBTU0xfQ09NUF9OVUxMX0lEWAkwCkBAIC0xNDgsOSArMTc3LDMwIEBACiAKICNkZWZpbmUgU1NMX01EX01ENV9JRFgJMAogI2RlZmluZSBTU0xfTURfU0hBMV9JRFgJMQotI2RlZmluZSBTU0xfTURfTlVNX0lEWAkyCisjZGVmaW5lIFNTTF9NRF9HT1NUOTRfSURYIDIKKyNkZWZpbmUgU1NMX01EX0dPU1Q4OU1BQ19JRFggMworLypDb25zdGFudCBTU0xfTUFYX0RJR0VTVCBlcXVhbCB0byBzaXplIG9mIGRpZ2VzdHMgYXJyYXkgc2hvdWxkIGJlIAorICogZGVmaW5lZCBpbiB0aGUKKyAqIHNzbF9sb2NsLmggKi8KKyNkZWZpbmUgU1NMX01EX05VTV9JRFgJU1NMX01BWF9ESUdFU1QgCiBzdGF0aWMgY29uc3QgRVZQX01EICpzc2xfZGlnZXN0X21ldGhvZHNbU1NMX01EX05VTV9JRFhdPXsKLQlOVUxMLE5VTEwsCisJTlVMTCxOVUxMLE5VTEwsTlVMTAorCX07CisvKiBQS0VZX1RZUEUgZm9yIEdPU1Q4OU1BQyBpcyBrbm93biBpbiBhZHZhbmNlLCBidXQsIGJlY2F1c2UKKyAqIGltcGxlbWVudGF0aW9uIGlzIGVuZ2luZS1wcm92aWRlZCwgd2UnbGwgZmlsbCBpdCBvbmx5IGlmCisgKiBjb3JyZXNwb25kaW5nIEVWUF9QS0VZX01FVEhPRCBpcyBmb3VuZCAKKyAqLworc3RhdGljIGludCAgc3NsX21hY19wa2V5X2lkW1NTTF9NRF9OVU1fSURYXT17CisJRVZQX1BLRVlfSE1BQyxFVlBfUEtFWV9ITUFDLEVWUF9QS0VZX0hNQUMsTklEX3VuZGVmCisJfTsKKworc3RhdGljIGludCBzc2xfbWFjX3NlY3JldF9zaXplW1NTTF9NRF9OVU1fSURYXT17CisJMCwwLDAsMAorCX07CisKK3N0YXRpYyBpbnQgc3NsX2hhbmRzaGFrZV9kaWdlc3RfZmxhZ1tTU0xfTURfTlVNX0lEWF09eworCVNTTF9IQU5EU0hBS0VfTUFDX01ENSxTU0xfSEFORFNIQUtFX01BQ19TSEEsCisJU1NMX0hBTkRTSEFLRV9NQUNfR09TVDk0LDAKIAl9OwogCiAjZGVmaW5lIENJUEhFUl9BREQJMQpAQCAtMTYxLDcyICsyMTEsMTQ0IEBACiAKIHR5cGVkZWYgc3RydWN0IGNpcGhlcl9vcmRlcl9zdAogCXsKLQlTU0xfQ0lQSEVSICpjaXBoZXI7CisJY29uc3QgU1NMX0NJUEhFUiAqY2lwaGVyOwogCWludCBhY3RpdmU7CiAJaW50IGRlYWQ7CiAJc3RydWN0IGNpcGhlcl9vcmRlcl9zdCAqbmV4dCwqcHJldjsKIAl9IENJUEhFUl9PUkRFUjsKIAogc3RhdGljIGNvbnN0IFNTTF9DSVBIRVIgY2lwaGVyX2FsaWFzZXNbXT17Ci0JLyogRG9uJ3QgaW5jbHVkZSBlTlVMTCB1bmxlc3Mgc3BlY2lmaWNhbGx5IGVuYWJsZWQuICovCi0JLyogRG9uJ3QgaW5jbHVkZSBFQ0MgaW4gQUxMIGJlY2F1c2UgdGhlc2UgY2lwaGVycyBhcmUgbm90IHlldCBvZmZpY2lhbC4gKi8KLQl7MCxTU0xfVFhUX0FMTCwgMCxTU0xfQUxMICYgflNTTF9lTlVMTCAmIH5TU0xfa0VDREggJiB+U1NMX2tFQ0RIRSwgU1NMX0FMTCAsMCwwLDAsU1NMX0FMTCxTU0xfQUxMfSwgLyogbXVzdCBiZSBmaXJzdCAqLwotCS8qIFRPRE86IENPTVBMRU1FTlQgT0YgQUxMIGFuZCBDT01QTEVNRU5UIE9GIERFRkFVTFQgZG8gbm90IGhhdmUgRUNDIGNpcGhlciBzdWl0ZXMgaGFuZGxlZCBwcm9wZXJseS4gKi8KLQl7MCxTU0xfVFhUX0NNUEFMTCwwLFNTTF9lTlVMTCwwLDAsMCwwLFNTTF9FTkNfTUFTSywwfSwgIC8qIENPTVBMRU1FTlQgT0YgQUxMICovCi0JezAsU1NMX1RYVF9DTVBERUYsMCxTU0xfQURILCAwLDAsMCwwLFNTTF9BVVRIX01BU0ssMH0sCi0JezAsU1NMX1RYVF9rS1JCNSwwLFNTTF9rS1JCNSwwLDAsMCwwLFNTTF9NS0VZX01BU0ssMH0sICAvKiBWUlMgS2VyYmVyb3M1ICovCi0JezAsU1NMX1RYVF9rUlNBLDAsU1NMX2tSU0EsICAwLDAsMCwwLFNTTF9NS0VZX01BU0ssMH0sCi0JezAsU1NMX1RYVF9rREhyLDAsU1NMX2tESHIsICAwLDAsMCwwLFNTTF9NS0VZX01BU0ssMH0sCi0JezAsU1NMX1RYVF9rREhkLDAsU1NMX2tESGQsICAwLDAsMCwwLFNTTF9NS0VZX01BU0ssMH0sCi0JezAsU1NMX1RYVF9rRURILDAsU1NMX2tFREgsICAwLDAsMCwwLFNTTF9NS0VZX01BU0ssMH0sCi0JezAsU1NMX1RYVF9rRlpBLDAsU1NMX2tGWkEsICAwLDAsMCwwLFNTTF9NS0VZX01BU0ssMH0sCi0JezAsU1NMX1RYVF9ESCwJMCxTU0xfREgsICAgIDAsMCwwLDAsU1NMX01LRVlfTUFTSywwfSwKLQl7MCxTU0xfVFhUX0VDQywJMCwoU1NMX2tFQ0RIfFNTTF9rRUNESEUpLCAwLDAsMCwwLFNTTF9NS0VZX01BU0ssMH0sCi0JezAsU1NMX1RYVF9FREgsCTAsU1NMX0VESCwgICAwLDAsMCwwLFNTTF9NS0VZX01BU0t8U1NMX0FVVEhfTUFTSywwfSwKLQl7MCxTU0xfVFhUX2FLUkI1LDAsU1NMX2FLUkI1LDAsMCwwLDAsU1NMX0FVVEhfTUFTSywwfSwgIC8qIFZSUyBLZXJiZXJvczUgKi8KLQl7MCxTU0xfVFhUX2FSU0EsMCxTU0xfYVJTQSwgIDAsMCwwLDAsU1NMX0FVVEhfTUFTSywwfSwKLQl7MCxTU0xfVFhUX2FEU1MsMCxTU0xfYURTUywgIDAsMCwwLDAsU1NMX0FVVEhfTUFTSywwfSwKLQl7MCxTU0xfVFhUX2FGWkEsMCxTU0xfYUZaQSwgIDAsMCwwLDAsU1NMX0FVVEhfTUFTSywwfSwKLQl7MCxTU0xfVFhUX2FOVUxMLDAsU1NMX2FOVUxMLDAsMCwwLDAsU1NMX0FVVEhfTUFTSywwfSwKLQl7MCxTU0xfVFhUX2FESCwgMCxTU0xfYURILCAgIDAsMCwwLDAsU1NMX0FVVEhfTUFTSywwfSwKLQl7MCxTU0xfVFhUX0RTUywJMCxTU0xfRFNTLCAgIDAsMCwwLDAsU1NMX0FVVEhfTUFTSywwfSwKKwkvKiAiQUxMIiBkb2Vzbid0IGluY2x1ZGUgZU5VTEwgKG11c3QgYmUgc3BlY2lmaWNhbGx5IGVuYWJsZWQpICovCisJezAsU1NMX1RYVF9BTEwsMCwgICAgIDAsMCx+U1NMX2VOVUxMLDAsMCwwLDAsMCwwfSwKKwkvKiAiQ09NUExFTUVOVE9GQUxMIiAqLworCXswLFNTTF9UWFRfQ01QQUxMLDAsICAwLDAsU1NMX2VOVUxMLDAsMCwwLDAsMCwwfSwKIAotCXswLFNTTF9UWFRfREVTLAkwLFNTTF9ERVMsICAgMCwwLDAsMCxTU0xfRU5DX01BU0ssMH0sCi0JezAsU1NMX1RYVF8zREVTLDAsU1NMXzNERVMsICAwLDAsMCwwLFNTTF9FTkNfTUFTSywwfSwKLQl7MCxTU0xfVFhUX1JDNCwJMCxTU0xfUkM0LCAgIDAsMCwwLDAsU1NMX0VOQ19NQVNLLDB9LAotCXswLFNTTF9UWFRfUkMyLAkwLFNTTF9SQzIsICAgMCwwLDAsMCxTU0xfRU5DX01BU0ssMH0sCi0jaWZuZGVmIE9QRU5TU0xfTk9fSURFQQotCXswLFNTTF9UWFRfSURFQSwwLFNTTF9JREVBLCAgMCwwLDAsMCxTU0xfRU5DX01BU0ssMH0sCi0jZW5kaWYKLQl7MCxTU0xfVFhUX1NFRUQsMCxTU0xfU0VFRCwgIDAsMCwwLDAsU1NMX0VOQ19NQVNLLDB9LAotCXswLFNTTF9UWFRfZU5VTEwsMCxTU0xfZU5VTEwsMCwwLDAsMCxTU0xfRU5DX01BU0ssMH0sCi0JezAsU1NMX1RYVF9lRlpBLDAsU1NMX2VGWkEsICAwLDAsMCwwLFNTTF9FTkNfTUFTSywwfSwKLQl7MCxTU0xfVFhUX0FFUywJMCxTU0xfQUVTLCAgIDAsMCwwLDAsU1NMX0VOQ19NQVNLLDB9LAotCXswLFNTTF9UWFRfQ0FNRUxMSUEsMCxTU0xfQ0FNRUxMSUEsIDAsMCwwLDAsU1NMX0VOQ19NQVNLLDB9LAorCS8qICJDT01QTEVNRU5UT0ZERUZBVUxUIiAoZG9lcyAqbm90KiBpbmNsdWRlIGNpcGhlcnN1aXRlcyBub3QgZm91bmQgaW4gQUxMISkgKi8KKwl7MCxTU0xfVFhUX0NNUERFRiwwLCAgU1NMX2tFREh8U1NMX2tFRUNESCxTU0xfYU5VTEwsflNTTF9lTlVMTCwwLDAsMCwwLDAsMH0sCiAKLQl7MCxTU0xfVFhUX01ENSwJMCxTU0xfTUQ1LCAgIDAsMCwwLDAsU1NMX01BQ19NQVNLLDB9LAotCXswLFNTTF9UWFRfU0hBMSwwLFNTTF9TSEExLCAgMCwwLDAsMCxTU0xfTUFDX01BU0ssMH0sCi0JezAsU1NMX1RYVF9TSEEsCTAsU1NMX1NIQSwgICAwLDAsMCwwLFNTTF9NQUNfTUFTSywwfSwKKwkvKiBrZXkgZXhjaGFuZ2UgYWxpYXNlcworCSAqIChzb21lIG9mIHRob3NlIHVzaW5nIG9ubHkgYSBzaW5nbGUgYml0IGhlcmUgY29tYmluZQorCSAqIG11bHRpcGxlIGtleSBleGNoYW5nZSBhbGdzIGFjY29yZGluZyB0byB0aGUgUkZDcywKKwkgKiBlLmcuIGtFREggY29tYmluZXMgREhFX0RTUyBhbmQgREhFX1JTQSkgKi8KKwl7MCxTU0xfVFhUX2tSU0EsMCwgICAgU1NMX2tSU0EsICAwLDAsMCwwLDAsMCwwLDB9LAogCi0JezAsU1NMX1RYVF9OVUxMLDAsU1NMX05VTEwsICAwLDAsMCwwLFNTTF9FTkNfTUFTSywwfSwKLQl7MCxTU0xfVFhUX0tSQjUsMCxTU0xfS1JCNSwgIDAsMCwwLDAsU1NMX0FVVEhfTUFTS3xTU0xfTUtFWV9NQVNLLDB9LAotCXswLFNTTF9UWFRfUlNBLAkwLFNTTF9SU0EsICAgMCwwLDAsMCxTU0xfQVVUSF9NQVNLfFNTTF9NS0VZX01BU0ssMH0sCi0JezAsU1NMX1RYVF9BREgsCTAsU1NMX0FESCwgICAwLDAsMCwwLFNTTF9BVVRIX01BU0t8U1NMX01LRVlfTUFTSywwfSwKLQl7MCxTU0xfVFhUX0ZaQSwJMCxTU0xfRlpBLCAgIDAsMCwwLDAsU1NMX0FVVEhfTUFTS3xTU0xfTUtFWV9NQVNLfFNTTF9FTkNfTUFTSywwfSwKKwl7MCxTU0xfVFhUX2tESHIsMCwgICAgU1NMX2tESHIsICAwLDAsMCwwLDAsMCwwLDB9LCAvKiBubyBzdWNoIGNpcGhlcnN1aXRlcyBzdXBwb3J0ZWQhICovCisJezAsU1NMX1RYVF9rREhkLDAsICAgIFNTTF9rREhkLCAgMCwwLDAsMCwwLDAsMCwwfSwgLyogbm8gc3VjaCBjaXBoZXJzdWl0ZXMgc3VwcG9ydGVkISAqLworCXswLFNTTF9UWFRfa0RILDAsICAgICBTU0xfa0RIcnxTU0xfa0RIZCwwLDAsMCwwLDAsMCwwLDB9LCAvKiBubyBzdWNoIGNpcGhlcnN1aXRlcyBzdXBwb3J0ZWQhICovCisJezAsU1NMX1RYVF9rRURILDAsICAgIFNTTF9rRURILCAgMCwwLDAsMCwwLDAsMCwwfSwKKwl7MCxTU0xfVFhUX0RILDAsICAgICAgU1NMX2tESHJ8U1NMX2tESGR8U1NMX2tFREgsMCwwLDAsMCwwLDAsMCwwfSwKIAotCXswLFNTTF9UWFRfU1NMVjIsIDAsU1NMX1NTTFYyLCAwLDAsMCwwLFNTTF9TU0xfTUFTSywwfSwKLQl7MCxTU0xfVFhUX1NTTFYzLCAwLFNTTF9TU0xWMywgMCwwLDAsMCxTU0xfU1NMX01BU0ssMH0sCi0JezAsU1NMX1RYVF9UTFNWMSwgMCxTU0xfVExTVjEsIDAsMCwwLDAsU1NMX1NTTF9NQVNLLDB9LAorCXswLFNTTF9UWFRfa0tSQjUsMCwgICBTU0xfa0tSQjUsIDAsMCwwLDAsMCwwLDAsMH0sCiAKLQl7MCxTU0xfVFhUX0VYUCAgICwwLCAwLFNTTF9FWFBPUlQsIDAsMCwwLDAsU1NMX0VYUF9NQVNLfSwKLQl7MCxTU0xfVFhUX0VYUE9SVCwwLCAwLFNTTF9FWFBPUlQsIDAsMCwwLDAsU1NMX0VYUF9NQVNLfSwKLQl7MCxTU0xfVFhUX0VYUDQwLCAwLCAwLCBTU0xfRVhQNDAsIDAsMCwwLDAsU1NMX1NUUk9OR19NQVNLfSwKLQl7MCxTU0xfVFhUX0VYUDU2LCAwLCAwLCBTU0xfRVhQNTYsIDAsMCwwLDAsU1NMX1NUUk9OR19NQVNLfSwKLQl7MCxTU0xfVFhUX0xPVywgICAwLCAwLCAgIFNTTF9MT1csIDAsMCwwLDAsU1NMX1NUUk9OR19NQVNLfSwKLQl7MCxTU0xfVFhUX01FRElVTSwwLCAwLFNTTF9NRURJVU0sIDAsMCwwLDAsU1NMX1NUUk9OR19NQVNLfSwKLQl7MCxTU0xfVFhUX0hJR0gsICAwLCAwLCAgU1NMX0hJR0gsIDAsMCwwLDAsU1NMX1NUUk9OR19NQVNLfSwKLQl7MCxTU0xfVFhUX0ZJUFMsICAwLCAwLCAgU1NMX0ZJUFMsIDAsMCwwLDAsU1NMX0ZJUFN8U1NMX1NUUk9OR19OT05FfSwKKwl7MCxTU0xfVFhUX2tFQ0RIciwwLCAgU1NMX2tFQ0RIciwwLDAsMCwwLDAsMCwwLDB9LAorCXswLFNTTF9UWFRfa0VDREhlLDAsICBTU0xfa0VDREhlLDAsMCwwLDAsMCwwLDAsMH0sCisJezAsU1NMX1RYVF9rRUNESCwwLCAgIFNTTF9rRUNESHJ8U1NMX2tFQ0RIZSwwLDAsMCwwLDAsMCwwLDB9LAorCXswLFNTTF9UWFRfa0VFQ0RILDAsICBTU0xfa0VFQ0RILDAsMCwwLDAsMCwwLDAsMH0sCisJezAsU1NMX1RYVF9FQ0RILDAsICAgIFNTTF9rRUNESHJ8U1NMX2tFQ0RIZXxTU0xfa0VFQ0RILDAsMCwwLDAsMCwwLDAsMH0sCisKKyAgICAgICAgezAsU1NMX1RYVF9rUFNLLDAsICAgIFNTTF9rUFNLLCAgMCwwLDAsMCwwLDAsMCwwfSwKKwl7MCxTU0xfVFhUX2tHT1NULDAsIFNTTF9rR09TVCwwLDAsMCwwLDAsMCwwLDB9LAorCisJLyogc2VydmVyIGF1dGhlbnRpY2F0aW9uIGFsaWFzZXMgKi8KKwl7MCxTU0xfVFhUX2FSU0EsMCwgICAgMCxTU0xfYVJTQSwgIDAsMCwwLDAsMCwwLDB9LAorCXswLFNTTF9UWFRfYURTUywwLCAgICAwLFNTTF9hRFNTLCAgMCwwLDAsMCwwLDAsMH0sCisJezAsU1NMX1RYVF9EU1MsMCwgICAgIDAsU1NMX2FEU1MsICAgMCwwLDAsMCwwLDAsMH0sCisJezAsU1NMX1RYVF9hS1JCNSwwLCAgIDAsU1NMX2FLUkI1LCAwLDAsMCwwLDAsMCwwfSwKKwl7MCxTU0xfVFhUX2FOVUxMLDAsICAgMCxTU0xfYU5VTEwsIDAsMCwwLDAsMCwwLDB9LAorCXswLFNTTF9UWFRfYURILDAsICAgICAwLFNTTF9hREgsICAgMCwwLDAsMCwwLDAsMH0sIC8qIG5vIHN1Y2ggY2lwaGVyc3VpdGVzIHN1cHBvcnRlZCEgKi8KKwl7MCxTU0xfVFhUX2FFQ0RILDAsICAgMCxTU0xfYUVDREgsIDAsMCwwLDAsMCwwLDB9LAorCXswLFNTTF9UWFRfYUVDRFNBLDAsICAwLFNTTF9hRUNEU0EsMCwwLDAsMCwwLDAsMH0sCisJezAsU1NMX1RYVF9FQ0RTQSwwLCAgIDAsU1NMX2FFQ0RTQSwgMCwwLDAsMCwwLDAsMH0sCisgICAgICAgIHswLFNTTF9UWFRfYVBTSywwLCAgICAwLFNTTF9hUFNLLCAgMCwwLDAsMCwwLDAsMH0sCisJezAsU1NMX1RYVF9hR09TVDk0LDAsMCxTU0xfYUdPU1Q5NCwwLDAsMCwwLDAsMCwwfSwKKwl7MCxTU0xfVFhUX2FHT1NUMDEsMCwwLFNTTF9hR09TVDAxLDAsMCwwLDAsMCwwLDB9LAorCXswLFNTTF9UWFRfYUdPU1QsMCwwLFNTTF9hR09TVDk0fFNTTF9hR09TVDAxLDAsMCwwLDAsMCwwLDB9LAorCisJLyogYWxpYXNlcyBjb21iaW5pbmcga2V5IGV4Y2hhbmdlIGFuZCBzZXJ2ZXIgYXV0aGVudGljYXRpb24gKi8KKwl7MCxTU0xfVFhUX0VESCwwLCAgICAgU1NMX2tFREgsflNTTF9hTlVMTCwwLDAsMCwwLDAsMCwwfSwKKwl7MCxTU0xfVFhUX0VFQ0RILDAsICAgU1NMX2tFRUNESCx+U1NMX2FOVUxMLDAsMCwwLDAsMCwwLDB9LAorCXswLFNTTF9UWFRfTlVMTCwwLCAgICAwLDAsU1NMX2VOVUxMLCAwLDAsMCwwLDAsMH0sCisJezAsU1NMX1RYVF9LUkI1LDAsICAgIFNTTF9rS1JCNSxTU0xfYUtSQjUsMCwwLDAsMCwwLDAsMH0sCisJezAsU1NMX1RYVF9SU0EsMCwgICAgIFNTTF9rUlNBLFNTTF9hUlNBLDAsMCwwLDAsMCwwLDB9LAorCXswLFNTTF9UWFRfQURILDAsICAgICBTU0xfa0VESCxTU0xfYU5VTEwsMCwwLDAsMCwwLDAsMH0sCisJezAsU1NMX1RYVF9BRUNESCwwLCAgIFNTTF9rRUVDREgsU1NMX2FOVUxMLDAsMCwwLDAsMCwwLDB9LAorICAgICAgICB7MCxTU0xfVFhUX1BTSywwLCAgICAgU1NMX2tQU0ssU1NMX2FQU0ssMCwwLDAsMCwwLDAsMH0sCisKKworCS8qIHN5bW1ldHJpYyBlbmNyeXB0aW9uIGFsaWFzZXMgKi8KKwl7MCxTU0xfVFhUX0RFUywwLCAgICAgMCwwLFNTTF9ERVMsICAgMCwwLDAsMCwwLDB9LAorCXswLFNTTF9UWFRfM0RFUywwLCAgICAwLDAsU1NMXzNERVMsICAwLDAsMCwwLDAsMH0sCisJezAsU1NMX1RYVF9SQzQsMCwgICAgIDAsMCxTU0xfUkM0LCAgIDAsMCwwLDAsMCwwfSwKKwl7MCxTU0xfVFhUX1JDMiwwLCAgICAgMCwwLFNTTF9SQzIsICAgMCwwLDAsMCwwLDB9LAorCXswLFNTTF9UWFRfSURFQSwwLCAgICAwLDAsU1NMX0lERUEsICAwLDAsMCwwLDAsMH0sCisJezAsU1NMX1RYVF9TRUVELDAsICAgIDAsMCxTU0xfU0VFRCwgIDAsMCwwLDAsMCwwfSwKKwl7MCxTU0xfVFhUX2VOVUxMLDAsICAgMCwwLFNTTF9lTlVMTCwgMCwwLDAsMCwwLDB9LAorCXswLFNTTF9UWFRfQUVTMTI4LDAsICAwLDAsU1NMX0FFUzEyOCwwLDAsMCwwLDAsMH0sCisJezAsU1NMX1RYVF9BRVMyNTYsMCwgIDAsMCxTU0xfQUVTMjU2LDAsMCwwLDAsMCwwfSwKKwl7MCxTU0xfVFhUX0FFUywwLCAgICAgMCwwLFNTTF9BRVMxMjh8U1NMX0FFUzI1NiwwLDAsMCwwLDAsMH0sCisJezAsU1NMX1RYVF9DQU1FTExJQTEyOCwwLDAsMCxTU0xfQ0FNRUxMSUExMjgsMCwwLDAsMCwwLDB9LAorCXswLFNTTF9UWFRfQ0FNRUxMSUEyNTYsMCwwLDAsU1NMX0NBTUVMTElBMjU2LDAsMCwwLDAsMCwwfSwKKwl7MCxTU0xfVFhUX0NBTUVMTElBICAgLDAsMCwwLFNTTF9DQU1FTExJQTEyOHxTU0xfQ0FNRUxMSUEyNTYsMCwwLDAsMCwwLDB9LAorCisJLyogTUFDIGFsaWFzZXMgKi8JCisJezAsU1NMX1RYVF9NRDUsMCwgICAgIDAsMCwwLFNTTF9NRDUsICAgMCwwLDAsMCwwfSwKKwl7MCxTU0xfVFhUX1NIQTEsMCwgICAgMCwwLDAsU1NMX1NIQTEsICAwLDAsMCwwLDB9LAorCXswLFNTTF9UWFRfU0hBLDAsICAgICAwLDAsMCxTU0xfU0hBMSwgIDAsMCwwLDAsMH0sCisJezAsU1NMX1RYVF9HT1NUOTQsMCwgICAgIDAsMCwwLFNTTF9HT1NUOTQsICAwLDAsMCwwLDB9LAorCXswLFNTTF9UWFRfR09TVDg5TUFDLDAsICAgICAwLDAsMCxTU0xfR09TVDg5TUFDLCAgMCwwLDAsMCwwfSwKKworCS8qIHByb3RvY29sIHZlcnNpb24gYWxpYXNlcyAqLworCXswLFNTTF9UWFRfU1NMVjIsMCwgICAwLDAsMCwwLFNTTF9TU0xWMiwgMCwwLDAsMH0sCisJezAsU1NMX1RYVF9TU0xWMywwLCAgIDAsMCwwLDAsU1NMX1NTTFYzLCAwLDAsMCwwfSwKKwl7MCxTU0xfVFhUX1RMU1YxLDAsICAgMCwwLDAsMCxTU0xfVExTVjEsIDAsMCwwLDB9LAorCisJLyogZXhwb3J0IGZsYWcgKi8KKwl7MCxTU0xfVFhUX0VYUCwwLCAgICAgMCwwLDAsMCwwLFNTTF9FWFBPUlQsMCwwLDB9LAorCXswLFNTTF9UWFRfRVhQT1JULDAsICAwLDAsMCwwLDAsU1NMX0VYUE9SVCwwLDAsMH0sCisKKwkvKiBzdHJlbmd0aCBjbGFzc2VzICovCisJezAsU1NMX1RYVF9FWFA0MCwwLCAgIDAsMCwwLDAsMCxTU0xfRVhQNDAsIDAsMCwwfSwKKwl7MCxTU0xfVFhUX0VYUDU2LDAsICAgMCwwLDAsMCwwLFNTTF9FWFA1NiwgMCwwLDB9LAorCXswLFNTTF9UWFRfTE9XLDAsICAgICAwLDAsMCwwLDAsU1NMX0xPVywgICAwLDAsMH0sCisJezAsU1NMX1RYVF9NRURJVU0sMCwgIDAsMCwwLDAsMCxTU0xfTUVESVVNLDAsMCwwfSwKKwl7MCxTU0xfVFhUX0hJR0gsMCwgICAgMCwwLDAsMCwwLFNTTF9ISUdILCAgMCwwLDB9LAorCS8qIEZJUFMgMTQwLTIgYXBwcm92ZWQgY2lwaGVyc3VpdGUgKi8KKwl7MCxTU0xfVFhUX0ZJUFMsMCwgICAgMCwwLH5TU0xfZU5VTEwsMCwwLFNTTF9GSVBTLCAgMCwwLDB9LAogCX07CisvKiBTZWFyY2ggZm9yIHB1YmxpYyBrZXkgYWxnb3JpdGhtIHdpdGggZ2l2ZW4gbmFtZSBhbmQgCisgKiByZXR1cm4gaXRzIHBrZXlfaWQgaWYgaXQgaXMgYXZhaWxhYmxlLiBPdGhlcndpc2UgcmV0dXJuIDAKKyAqLworI2lmZGVmIE9QRU5TU0xfTk9fRU5HSU5FCisKK3N0YXRpYyBpbnQgZ2V0X29wdGlvbmFsX3BrZXlfaWQoY29uc3QgY2hhciAqcGtleV9uYW1lKQorCXsKKwljb25zdCBFVlBfUEtFWV9BU04xX01FVEhPRCAqYW1ldGg7CisJaW50IHBrZXlfaWQ9MDsKKwlhbWV0aCA9IEVWUF9QS0VZX2FzbjFfZmluZF9zdHIoTlVMTCxwa2V5X25hbWUsLTEpOworCWlmIChhbWV0aCkgCisJCXsKKwkJRVZQX1BLRVlfYXNuMV9nZXQwX2luZm8oJnBrZXlfaWQsIE5VTEwsTlVMTCxOVUxMLE5VTEwsYW1ldGgpOworCQl9CQkKKwlyZXR1cm4gcGtleV9pZDsKKwl9CisKKyNlbHNlCisKK3N0YXRpYyBpbnQgZ2V0X29wdGlvbmFsX3BrZXlfaWQoY29uc3QgY2hhciAqcGtleV9uYW1lKQorCXsKKwljb25zdCBFVlBfUEtFWV9BU04xX01FVEhPRCAqYW1ldGg7CisJRU5HSU5FICp0bXBlbmcgPSBOVUxMOworCWludCBwa2V5X2lkPTA7CisJYW1ldGggPSBFVlBfUEtFWV9hc24xX2ZpbmRfc3RyKCZ0bXBlbmcscGtleV9uYW1lLC0xKTsKKwlpZiAoYW1ldGgpCisJCXsKKwkJRVZQX1BLRVlfYXNuMV9nZXQwX2luZm8oJnBrZXlfaWQsIE5VTEwsTlVMTCxOVUxMLE5VTEwsYW1ldGgpOworCQl9CisJaWYgKHRtcGVuZykgRU5HSU5FX2ZpbmlzaCh0bXBlbmcpOworCXJldHVybiBwa2V5X2lkOworCX0KKworI2VuZGlmCiAKIHZvaWQgc3NsX2xvYWRfY2lwaGVycyh2b2lkKQogCXsKQEAgLTI1MiwxNiArMzc0LDM3IEBACiAJICBFVlBfZ2V0X2NpcGhlcmJ5bmFtZShTTl9jYW1lbGxpYV8xMjhfY2JjKTsKIAlzc2xfY2lwaGVyX21ldGhvZHNbU1NMX0VOQ19DQU1FTExJQTI1Nl9JRFhdPQogCSAgRVZQX2dldF9jaXBoZXJieW5hbWUoU05fY2FtZWxsaWFfMjU2X2NiYyk7CisJc3NsX2NpcGhlcl9tZXRob2RzW1NTTF9FTkNfR09TVDg5X0lEWF09CisJICBFVlBfZ2V0X2NpcGhlcmJ5bmFtZShTTl9nb3N0ODlfY250KTsKIAlzc2xfY2lwaGVyX21ldGhvZHNbU1NMX0VOQ19TRUVEX0lEWF09CiAJICBFVlBfZ2V0X2NpcGhlcmJ5bmFtZShTTl9zZWVkX2NiYyk7CiAKIAlzc2xfZGlnZXN0X21ldGhvZHNbU1NMX01EX01ENV9JRFhdPQogCQlFVlBfZ2V0X2RpZ2VzdGJ5bmFtZShTTl9tZDUpOworCXNzbF9tYWNfc2VjcmV0X3NpemVbU1NMX01EX01ENV9JRFhdPQorCQlFVlBfTURfc2l6ZShzc2xfZGlnZXN0X21ldGhvZHNbU1NMX01EX01ENV9JRFhdKTsKKwlPUEVOU1NMX2Fzc2VydChzc2xfbWFjX3NlY3JldF9zaXplW1NTTF9NRF9NRDVfSURYXSA+PSAwKTsKIAlzc2xfZGlnZXN0X21ldGhvZHNbU1NMX01EX1NIQTFfSURYXT0KIAkJRVZQX2dldF9kaWdlc3RieW5hbWUoU05fc2hhMSk7CisJc3NsX21hY19zZWNyZXRfc2l6ZVtTU0xfTURfU0hBMV9JRFhdPQorCQlFVlBfTURfc2l6ZShzc2xfZGlnZXN0X21ldGhvZHNbU1NMX01EX1NIQTFfSURYXSk7CisJT1BFTlNTTF9hc3NlcnQoc3NsX21hY19zZWNyZXRfc2l6ZVtTU0xfTURfU0hBMV9JRFhdID49IDApOworCXNzbF9kaWdlc3RfbWV0aG9kc1tTU0xfTURfR09TVDk0X0lEWF09CisJCUVWUF9nZXRfZGlnZXN0YnluYW1lKFNOX2lkX0dvc3RSMzQxMV85NCk7CisJaWYgKHNzbF9kaWdlc3RfbWV0aG9kc1tTU0xfTURfR09TVDk0X0lEWF0pCisJCXsJCisJCXNzbF9tYWNfc2VjcmV0X3NpemVbU1NMX01EX0dPU1Q5NF9JRFhdPQorCQkJRVZQX01EX3NpemUoc3NsX2RpZ2VzdF9tZXRob2RzW1NTTF9NRF9HT1NUOTRfSURYXSk7CisJCU9QRU5TU0xfYXNzZXJ0KHNzbF9tYWNfc2VjcmV0X3NpemVbU1NMX01EX0dPU1Q5NF9JRFhdID49IDApOworCQl9CisJc3NsX2RpZ2VzdF9tZXRob2RzW1NTTF9NRF9HT1NUODlNQUNfSURYXT0KKwkJRVZQX2dldF9kaWdlc3RieW5hbWUoU05faWRfR29zdDI4MTQ3Xzg5X01BQyk7CisJCXNzbF9tYWNfcGtleV9pZFtTU0xfTURfR09TVDg5TUFDX0lEWF0gPSBnZXRfb3B0aW9uYWxfcGtleV9pZCgiZ29zdC1tYWMiKTsKKwkJaWYgKHNzbF9tYWNfcGtleV9pZFtTU0xfTURfR09TVDg5TUFDX0lEWF0pIHsKKwkJCXNzbF9tYWNfc2VjcmV0X3NpemVbU1NMX01EX0dPU1Q4OU1BQ19JRFhdPTMyOworCQl9CQkKKwogCX0KLQotCiAjaWZuZGVmIE9QRU5TU0xfTk9fQ09NUAogCiBzdGF0aWMgaW50IHNrX2NvbXBfY21wKGNvbnN0IFNTTF9DT01QICogY29uc3QgKmEsCkBAIC0zMTYsMTAgKzQ1OSwxMCBAQAogI2VuZGlmCiAKIGludCBzc2xfY2lwaGVyX2dldF9ldnAoY29uc3QgU1NMX1NFU1NJT04gKnMsIGNvbnN0IEVWUF9DSVBIRVIgKiplbmMsCi0JICAgICBjb25zdCBFVlBfTUQgKiptZCwgU1NMX0NPTVAgKipjb21wKQorCSAgICAgY29uc3QgRVZQX01EICoqbWQsIGludCAqbWFjX3BrZXlfdHlwZSwgaW50ICptYWNfc2VjcmV0X3NpemUsU1NMX0NPTVAgKipjb21wKQogCXsKIAlpbnQgaTsKLQlTU0xfQ0lQSEVSICpjOworCWNvbnN0IFNTTF9DSVBIRVIgKmM7CiAKIAljPXMtPmNpcGhlcjsKIAlpZiAoYyA9PSBOVUxMKSByZXR1cm4oMCk7CkBAIC0zNDQsNyArNDg3LDcgQEAKIAogCWlmICgoZW5jID09IE5VTEwpIHx8IChtZCA9PSBOVUxMKSkgcmV0dXJuKDApOwogCi0Jc3dpdGNoIChjLT5hbGdvcml0aG1zICYgU1NMX0VOQ19NQVNLKQorCXN3aXRjaCAoYy0+YWxnb3JpdGhtX2VuYykKIAkJewogCWNhc2UgU1NMX0RFUzoKIAkJaT1TU0xfRU5DX0RFU19JRFg7CkBAIC0zNjQsMjYgKzUwNywyNCBAQAogCWNhc2UgU1NMX2VOVUxMOgogCQlpPVNTTF9FTkNfTlVMTF9JRFg7CiAJCWJyZWFrOwotCWNhc2UgU1NMX0FFUzoKLQkJc3dpdGNoKGMtPmFsZ19iaXRzKQotCQkJewotCQljYXNlIDEyODogaT1TU0xfRU5DX0FFUzEyOF9JRFg7IGJyZWFrOwotCQljYXNlIDI1NjogaT1TU0xfRU5DX0FFUzI1Nl9JRFg7IGJyZWFrOwotCQlkZWZhdWx0OiBpPS0xOyBicmVhazsKLQkJCX0KKwljYXNlIFNTTF9BRVMxMjg6CisJCWk9U1NMX0VOQ19BRVMxMjhfSURYOwogCQlicmVhazsKLQljYXNlIFNTTF9DQU1FTExJQToKLQkJc3dpdGNoKGMtPmFsZ19iaXRzKQotCQkJewotCQljYXNlIDEyODogaT1TU0xfRU5DX0NBTUVMTElBMTI4X0lEWDsgYnJlYWs7Ci0JCWNhc2UgMjU2OiBpPVNTTF9FTkNfQ0FNRUxMSUEyNTZfSURYOyBicmVhazsKLQkJZGVmYXVsdDogaT0tMTsgYnJlYWs7Ci0JCQl9CisJY2FzZSBTU0xfQUVTMjU2OgorCQlpPVNTTF9FTkNfQUVTMjU2X0lEWDsKKwkJYnJlYWs7CisJY2FzZSBTU0xfQ0FNRUxMSUExMjg6CisJCWk9U1NMX0VOQ19DQU1FTExJQTEyOF9JRFg7CisJCWJyZWFrOworCWNhc2UgU1NMX0NBTUVMTElBMjU2OgorCQlpPVNTTF9FTkNfQ0FNRUxMSUEyNTZfSURYOworCQlicmVhazsKKwljYXNlIFNTTF9lR09TVDI4MTQ3ODlDTlQ6CisJCWk9U1NMX0VOQ19HT1NUODlfSURYOwogCQlicmVhazsKIAljYXNlIFNTTF9TRUVEOgogCQlpPVNTTF9FTkNfU0VFRF9JRFg7CiAJCWJyZWFrOwotCiAJZGVmYXVsdDoKIAkJaT0gLTE7CiAJCWJyZWFrOwpAQCAtMzk5LDcgKzU0MCw3IEBACiAJCQkqZW5jPXNzbF9jaXBoZXJfbWV0aG9kc1tpXTsKIAkJfQogCi0Jc3dpdGNoIChjLT5hbGdvcml0aG1zICYgU1NMX01BQ19NQVNLKQorCXN3aXRjaCAoYy0+YWxnb3JpdGhtX21hYykKIAkJewogCWNhc2UgU1NMX01ENToKIAkJaT1TU0xfTURfTUQ1X0lEWDsKQEAgLTQwNywyMSArNTQ4LDQ4IEBACiAJY2FzZSBTU0xfU0hBMToKIAkJaT1TU0xfTURfU0hBMV9JRFg7CiAJCWJyZWFrOworCWNhc2UgU1NMX0dPU1Q5NDoKKwkJaSA9IFNTTF9NRF9HT1NUOTRfSURYOworCQlicmVhazsKKwljYXNlIFNTTF9HT1NUODlNQUM6CisJCWkgPSBTU0xfTURfR09TVDg5TUFDX0lEWDsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJaT0gLTE7CiAJCWJyZWFrOwogCQl9CiAJaWYgKChpIDwgMCkgfHwgKGkgPiBTU0xfTURfTlVNX0lEWCkpCi0JCSptZD1OVUxMOwotCWVsc2UKLQkJKm1kPXNzbF9kaWdlc3RfbWV0aG9kc1tpXTsKKwl7CisJCSptZD1OVUxMOyAKKwkJaWYgKG1hY19wa2V5X3R5cGUhPU5VTEwpICptYWNfcGtleV90eXBlID0gTklEX3VuZGVmOworCQlpZiAobWFjX3NlY3JldF9zaXplIT1OVUxMKSAqbWFjX3NlY3JldF9zaXplID0gMDsKIAotCWlmICgoKmVuYyAhPSBOVUxMKSAmJiAoKm1kICE9IE5VTEwpKQorCX0KKwllbHNlCisJeworCQkqbWQ9c3NsX2RpZ2VzdF9tZXRob2RzW2ldOworCQlpZiAobWFjX3BrZXlfdHlwZSE9TlVMTCkgKm1hY19wa2V5X3R5cGUgPSBzc2xfbWFjX3BrZXlfaWRbaV07CisJCWlmIChtYWNfc2VjcmV0X3NpemUhPU5VTEwpICptYWNfc2VjcmV0X3NpemUgPSBzc2xfbWFjX3NlY3JldF9zaXplW2ldOworCX0JCisKKwlpZiAoKCplbmMgIT0gTlVMTCkgJiYgKCptZCAhPSBOVUxMKSAmJiAoIW1hY19wa2V5X3R5cGV8fCptYWNfcGtleV90eXBlICE9IE5JRF91bmRlZikpCiAJCXJldHVybigxKTsKIAllbHNlCiAJCXJldHVybigwKTsKIAl9CiAKK2ludCBzc2xfZ2V0X2hhbmRzaGFrZV9kaWdlc3QoaW50IGlkeCwgbG9uZyAqbWFzaywgY29uc3QgRVZQX01EICoqbWQpIAoreworCWlmIChpZHggPDB8fGlkeD49U1NMX01EX05VTV9JRFgpIAorCQl7CisJCXJldHVybiAwOworCQl9CisJaWYgKHNzbF9oYW5kc2hha2VfZGlnZXN0X2ZsYWdbaWR4XT09MCkgcmV0dXJuIDA7CisJKm1hc2sgPSBzc2xfaGFuZHNoYWtlX2RpZ2VzdF9mbGFnW2lkeF07CisJKm1kID0gc3NsX2RpZ2VzdF9tZXRob2RzW2lkeF07CisJcmV0dXJuIDE7Cit9CisKICNkZWZpbmUgSVRFTV9TRVAoYSkgXAogCSgoKGEpID09ICc6JykgfHwgKChhKSA9PSAnICcpIHx8ICgoYSkgPT0gJzsnKSB8fCAoKGEpID09ICcsJykpCiAKQEAgLTQzMyw3ICs2MDEsNyBAQAogCQkqaGVhZD1jdXJyLT5uZXh0OwogCWlmIChjdXJyLT5wcmV2ICE9IE5VTEwpCiAJCWN1cnItPnByZXYtPm5leHQ9Y3Vyci0+bmV4dDsKLQlpZiAoY3Vyci0+bmV4dCAhPSBOVUxMKSAvKiBzaG91bGQgYWx3YXlzIGJlIHRydWUgKi8KKwlpZiAoY3Vyci0+bmV4dCAhPSBOVUxMKQogCQljdXJyLT5uZXh0LT5wcmV2PWN1cnItPnByZXY7CiAJKCp0YWlsKS0+bmV4dD1jdXJyOwogCWN1cnItPnByZXY9ICp0YWlsOwpAQCAtNDQxLDY5ICs2MDksMTA1IEBACiAJKnRhaWw9Y3VycjsKIAl9CiAKLXN0cnVjdCBkaXNhYmxlZF9tYXNrcyB7IC8qIFRoaXMgaXMgYSBrbHVkZ2Ugbm8gbG9uZ2VyIG5lZWRlZCB3aXRoIE9wZW5TU0wgMC45LjksCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiB3aGVyZSAxMjgtYml0IGFuZCAyNTYtYml0IGFsZ29yaXRobXMgc2ltcGx5IHdpbGwgZ2V0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgKiBzZXBhcmF0ZSBiaXRzLiAqLwotICB1bnNpZ25lZCBsb25nIG1hc2s7IC8qIGV2ZXJ5dGhpbmcgZXhjZXB0IG0yNTYgKi8KLSAgdW5zaWduZWQgbG9uZyBtMjU2OyAvKiBhcHBsaWVzIHRvIDI1Ni1iaXQgYWxnb3JpdGhtcyBvbmx5ICovCi19OwotCi1zdGF0aWMgc3RydWN0IGRpc2FibGVkX21hc2tzIHNzbF9jaXBoZXJfZ2V0X2Rpc2FibGVkKHZvaWQpCitzdGF0aWMgdm9pZCBsbF9hcHBlbmRfaGVhZChDSVBIRVJfT1JERVIgKipoZWFkLCBDSVBIRVJfT1JERVIgKmN1cnIsCisJICAgICBDSVBIRVJfT1JERVIgKip0YWlsKQogCXsKLQl1bnNpZ25lZCBsb25nIG1hc2s7Ci0JdW5zaWduZWQgbG9uZyBtMjU2OwotCXN0cnVjdCBkaXNhYmxlZF9tYXNrcyByZXQ7CisJaWYgKGN1cnIgPT0gKmhlYWQpIHJldHVybjsKKwlpZiAoY3VyciA9PSAqdGFpbCkKKwkJKnRhaWw9Y3Vyci0+cHJldjsKKwlpZiAoY3Vyci0+bmV4dCAhPSBOVUxMKQorCQljdXJyLT5uZXh0LT5wcmV2PWN1cnItPnByZXY7CisJaWYgKGN1cnItPnByZXYgIT0gTlVMTCkKKwkJY3Vyci0+cHJldi0+bmV4dD1jdXJyLT5uZXh0OworCSgqaGVhZCktPnByZXY9Y3VycjsKKwljdXJyLT5uZXh0PSAqaGVhZDsKKwljdXJyLT5wcmV2PU5VTEw7CisJKmhlYWQ9Y3VycjsKKwl9CiAKLQltYXNrID0gU1NMX2tGWkE7CitzdGF0aWMgdm9pZCBzc2xfY2lwaGVyX2dldF9kaXNhYmxlZCh1bnNpZ25lZCBsb25nICpta2V5LCB1bnNpZ25lZCBsb25nICphdXRoLCB1bnNpZ25lZCBsb25nICplbmMsIHVuc2lnbmVkIGxvbmcgKm1hYywgdW5zaWduZWQgbG9uZyAqc3NsKQorCXsKKwkqbWtleSA9IDA7CisJKmF1dGggPSAwOworCSplbmMgPSAwOworCSptYWMgPSAwOworCSpzc2wgPSAwOworCiAjaWZkZWYgT1BFTlNTTF9OT19SU0EKLQltYXNrIHw9IFNTTF9hUlNBfFNTTF9rUlNBOworCSpta2V5IHw9IFNTTF9rUlNBOworCSphdXRoIHw9IFNTTF9hUlNBOwogI2VuZGlmCiAjaWZkZWYgT1BFTlNTTF9OT19EU0EKLQltYXNrIHw9IFNTTF9hRFNTOworCSphdXRoIHw9IFNTTF9hRFNTOwogI2VuZGlmCisJKm1rZXkgfD0gU1NMX2tESHJ8U1NMX2tESGQ7IC8qIG5vIHN1Y2ggY2lwaGVyc3VpdGVzIHN1cHBvcnRlZCEgKi8KKwkqYXV0aCB8PSBTU0xfYURIOwogI2lmZGVmIE9QRU5TU0xfTk9fREgKLQltYXNrIHw9IFNTTF9rREhyfFNTTF9rREhkfFNTTF9rRURIfFNTTF9hREg7CisJKm1rZXkgfD0gU1NMX2tESHJ8U1NMX2tESGR8U1NMX2tFREg7CisJKmF1dGggfD0gU1NMX2FESDsKICNlbmRpZgogI2lmZGVmIE9QRU5TU0xfTk9fS1JCNQotCW1hc2sgfD0gU1NMX2tLUkI1fFNTTF9hS1JCNTsKKwkqbWtleSB8PSBTU0xfa0tSQjU7CisJKmF1dGggfD0gU1NMX2FLUkI1OworI2VuZGlmCisjaWZkZWYgT1BFTlNTTF9OT19FQ0RTQQorCSphdXRoIHw9IFNTTF9hRUNEU0E7CiAjZW5kaWYKICNpZmRlZiBPUEVOU1NMX05PX0VDREgKLQltYXNrIHw9IFNTTF9rRUNESHxTU0xfa0VDREhFOworCSpta2V5IHw9IFNTTF9rRUNESGV8U1NMX2tFQ0RIcjsKKwkqYXV0aCB8PSBTU0xfYUVDREg7CiAjZW5kaWYKKyNpZmRlZiBPUEVOU1NMX05PX1BTSworCSpta2V5IHw9IFNTTF9rUFNLOworCSphdXRoIHw9IFNTTF9hUFNLOworI2VuZGlmCisJLyogQ2hlY2sgZm9yIHByZXNlbmNlIG9mIEdPU1QgMzQuMTAgYWxnb3JpdGhtcywgYW5kIGlmIHRoZXkKKwkgKiBkbyBub3QgcHJlc2VudCwgZGlzYWJsZSAgYXBwcm9wcmlhdGUgYXV0aCBhbmQga2V5IGV4Y2hhbmdlICovCisJaWYgKCFnZXRfb3B0aW9uYWxfcGtleV9pZCgiZ29zdDk0IikpIHsKKwkJKmF1dGggfD0gU1NMX2FHT1NUOTQ7CisJfQorCWlmICghZ2V0X29wdGlvbmFsX3BrZXlfaWQoImdvc3QyMDAxIikpIHsKKwkJKmF1dGggfD0gU1NMX2FHT1NUMDE7CisJfQorCS8qIERpc2FibGUgR09TVCBrZXkgZXhjaGFuZ2UgaWYgbm8gR09TVCBzaWduYXR1cmUgYWxncyBhcmUgYXZhaWxhYmxlICogKi8KKwlpZiAoKCphdXRoICYgKFNTTF9hR09TVDk0fFNTTF9hR09TVDAxKSkgPT0gKFNTTF9hR09TVDk0fFNTTF9hR09TVDAxKSkgeworCQkqbWtleSB8PSBTU0xfa0dPU1Q7CisJfQkKICNpZmRlZiBTU0xfRk9SQklEX0VOVUxMCi0JbWFzayB8PSBTU0xfZU5VTEw7CisJKmVuYyB8PSBTU0xfZU5VTEw7CiAjZW5kaWYKKwkJCiAKLQltYXNrIHw9IChzc2xfY2lwaGVyX21ldGhvZHNbU1NMX0VOQ19ERVNfSURYIF0gPT0gTlVMTCkgPyBTU0xfREVTIDowOwotCW1hc2sgfD0gKHNzbF9jaXBoZXJfbWV0aG9kc1tTU0xfRU5DXzNERVNfSURYXSA9PSBOVUxMKSA/IFNTTF8zREVTOjA7Ci0JbWFzayB8PSAoc3NsX2NpcGhlcl9tZXRob2RzW1NTTF9FTkNfUkM0X0lEWCBdID09IE5VTEwpID8gU1NMX1JDNCA6MDsKLQltYXNrIHw9IChzc2xfY2lwaGVyX21ldGhvZHNbU1NMX0VOQ19SQzJfSURYIF0gPT0gTlVMTCkgPyBTU0xfUkMyIDowOwotCW1hc2sgfD0gKHNzbF9jaXBoZXJfbWV0aG9kc1tTU0xfRU5DX0lERUFfSURYXSA9PSBOVUxMKSA/IFNTTF9JREVBOjA7Ci0JbWFzayB8PSAoc3NsX2NpcGhlcl9tZXRob2RzW1NTTF9FTkNfZUZaQV9JRFhdID09IE5VTEwpID8gU1NMX2VGWkE6MDsKLQltYXNrIHw9IChzc2xfY2lwaGVyX21ldGhvZHNbU1NMX0VOQ19TRUVEX0lEWF0gPT0gTlVMTCkgPyBTU0xfU0VFRDowOwogCi0JbWFzayB8PSAoc3NsX2RpZ2VzdF9tZXRob2RzW1NTTF9NRF9NRDVfSURYIF0gPT0gTlVMTCkgPyBTU0xfTUQ1IDowOwotCW1hc2sgfD0gKHNzbF9kaWdlc3RfbWV0aG9kc1tTU0xfTURfU0hBMV9JRFhdID09IE5VTEwpID8gU1NMX1NIQTE6MDsKKwkqZW5jIHw9IChzc2xfY2lwaGVyX21ldGhvZHNbU1NMX0VOQ19ERVNfSURYIF0gPT0gTlVMTCkgPyBTU0xfREVTIDowOworCSplbmMgfD0gKHNzbF9jaXBoZXJfbWV0aG9kc1tTU0xfRU5DXzNERVNfSURYXSA9PSBOVUxMKSA/IFNTTF8zREVTOjA7CisJKmVuYyB8PSAoc3NsX2NpcGhlcl9tZXRob2RzW1NTTF9FTkNfUkM0X0lEWCBdID09IE5VTEwpID8gU1NMX1JDNCA6MDsKKwkqZW5jIHw9IChzc2xfY2lwaGVyX21ldGhvZHNbU1NMX0VOQ19SQzJfSURYIF0gPT0gTlVMTCkgPyBTU0xfUkMyIDowOworCSplbmMgfD0gKHNzbF9jaXBoZXJfbWV0aG9kc1tTU0xfRU5DX0lERUFfSURYXSA9PSBOVUxMKSA/IFNTTF9JREVBOjA7CisJKmVuYyB8PSAoc3NsX2NpcGhlcl9tZXRob2RzW1NTTF9FTkNfQUVTMTI4X0lEWF0gPT0gTlVMTCkgPyBTU0xfQUVTMTI4OjA7CisJKmVuYyB8PSAoc3NsX2NpcGhlcl9tZXRob2RzW1NTTF9FTkNfQUVTMjU2X0lEWF0gPT0gTlVMTCkgPyBTU0xfQUVTMjU2OjA7CisJKmVuYyB8PSAoc3NsX2NpcGhlcl9tZXRob2RzW1NTTF9FTkNfQ0FNRUxMSUExMjhfSURYXSA9PSBOVUxMKSA/IFNTTF9DQU1FTExJQTEyODowOworCSplbmMgfD0gKHNzbF9jaXBoZXJfbWV0aG9kc1tTU0xfRU5DX0NBTUVMTElBMjU2X0lEWF0gPT0gTlVMTCkgPyBTU0xfQ0FNRUxMSUEyNTY6MDsKKwkqZW5jIHw9IChzc2xfY2lwaGVyX21ldGhvZHNbU1NMX0VOQ19HT1NUODlfSURYXSA9PSBOVUxMKSA/IFNTTF9lR09TVDI4MTQ3ODlDTlQ6MDsKKwkqZW5jIHw9IChzc2xfY2lwaGVyX21ldGhvZHNbU1NMX0VOQ19TRUVEX0lEWF0gPT0gTlVMTCkgPyBTU0xfU0VFRDowOwogCi0JLyogZmluYWxseSBjb25zaWRlciBhbGdvcml0aG1zIHdoZXJlIG1hc2sgYW5kIG0yNTYgZGlmZmVyICovCi0JbTI1NiA9IG1hc2s7Ci0JbWFzayB8PSAoc3NsX2NpcGhlcl9tZXRob2RzW1NTTF9FTkNfQUVTMTI4X0lEWF0gPT0gTlVMTCkgPyBTU0xfQUVTOjA7Ci0JbWFzayB8PSAoc3NsX2NpcGhlcl9tZXRob2RzW1NTTF9FTkNfQ0FNRUxMSUExMjhfSURYXSA9PSBOVUxMKSA/IFNTTF9DQU1FTExJQTowOwotCW0yNTYgfD0gKHNzbF9jaXBoZXJfbWV0aG9kc1tTU0xfRU5DX0FFUzI1Nl9JRFhdID09IE5VTEwpID8gU1NMX0FFUzowOwotCW0yNTYgfD0gKHNzbF9jaXBoZXJfbWV0aG9kc1tTU0xfRU5DX0NBTUVMTElBMjU2X0lEWF0gPT0gTlVMTCkgPyBTU0xfQ0FNRUxMSUE6MDsKKwkqbWFjIHw9IChzc2xfZGlnZXN0X21ldGhvZHNbU1NMX01EX01ENV9JRFggXSA9PSBOVUxMKSA/IFNTTF9NRDUgOjA7CisJKm1hYyB8PSAoc3NsX2RpZ2VzdF9tZXRob2RzW1NTTF9NRF9TSEExX0lEWF0gPT0gTlVMTCkgPyBTU0xfU0hBMTowOworCSptYWMgfD0gKHNzbF9kaWdlc3RfbWV0aG9kc1tTU0xfTURfR09TVDk0X0lEWF0gPT0gTlVMTCkgPyBTU0xfR09TVDk0OjA7CisJKm1hYyB8PSAoc3NsX2RpZ2VzdF9tZXRob2RzW1NTTF9NRF9HT1NUODlNQUNfSURYXSA9PSBOVUxMIHx8IHNzbF9tYWNfcGtleV9pZFtTU0xfTURfR09TVDg5TUFDX0lEWF09PU5JRF91bmRlZik/IFNTTF9HT1NUODlNQUM6MDsKIAotCXJldC5tYXNrID0gbWFzazsKLQlyZXQubTI1NiA9IG0yNTY7Ci0JcmV0dXJuIHJldDsKIAl9CiAKIHN0YXRpYyB2b2lkIHNzbF9jaXBoZXJfY29sbGVjdF9jaXBoZXJzKGNvbnN0IFNTTF9NRVRIT0QgKnNzbF9tZXRob2QsCi0JCWludCBudW1fb2ZfY2lwaGVycywgdW5zaWduZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBsb25nIG0yNTYsCi0JCUNJUEhFUl9PUkRFUiAqY29fbGlzdCwgQ0lQSEVSX09SREVSICoqaGVhZF9wLAotCQlDSVBIRVJfT1JERVIgKip0YWlsX3ApCisgICAgICAgICAgICAgICAgaW50IG51bV9vZl9jaXBoZXJzLAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZGlzYWJsZWRfbWtleSwgdW5zaWduZWQgbG9uZyBkaXNhYmxlZF9hdXRoLAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZGlzYWJsZWRfZW5jLCB1bnNpZ25lZCBsb25nIGRpc2FibGVkX21hYywKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGRpc2FibGVkX3NzbCwKKyAgICAgICAgICAgICAgICBDSVBIRVJfT1JERVIgKmNvX2xpc3QsCisgICAgICAgICAgICAgICAgQ0lQSEVSX09SREVSICoqaGVhZF9wLCBDSVBIRVJfT1JERVIgKip0YWlsX3ApCiAJewogCWludCBpLCBjb19saXN0X251bTsKLQlTU0xfQ0lQSEVSICpjOworCWNvbnN0IFNTTF9DSVBIRVIgKmM7CiAKIAkvKgogCSAqIFdlIGhhdmUgbnVtX29mX2NpcGhlcnMgZGVzY3JpcHRpb25zIGNvbXBpbGVkIGluLCBkZXBlbmRpbmcgb24gdGhlCkBAIC01MTcsMTQgKzcyMSwxMyBAQAogCWZvciAoaSA9IDA7IGkgPCBudW1fb2ZfY2lwaGVyczsgaSsrKQogCQl7CiAJCWMgPSBzc2xfbWV0aG9kLT5nZXRfY2lwaGVyKGkpOwotI2RlZmluZSBJU19NQVNLRUQoYykgKChjKS0+YWxnb3JpdGhtcyAmICgoKGMpLT5hbGdfYml0cyA9PSAyNTYpID8gbTI1NiA6IG1hc2spKQogCQkvKiBkcm9wIHRob3NlIHRoYXQgdXNlIGFueSBvZiB0aGF0IGlzIG5vdCBhdmFpbGFibGUgKi8KLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLQkJaWYgKChjICE9IE5VTEwpICYmIGMtPnZhbGlkICYmICFJU19NQVNLRUQoYykKLQkJCSYmICghRklQU19tb2RlKCkgfHwgKGMtPmFsZ29fc3RyZW5ndGggJiBTU0xfRklQUykpKQotI2Vsc2UKLQkJaWYgKChjICE9IE5VTEwpICYmIGMtPnZhbGlkICYmICFJU19NQVNLRUQoYykpCi0jZW5kaWYKKwkJaWYgKChjICE9IE5VTEwpICYmIGMtPnZhbGlkICYmCisJCSAgICAhKGMtPmFsZ29yaXRobV9ta2V5ICYgZGlzYWJsZWRfbWtleSkgJiYKKwkJICAgICEoYy0+YWxnb3JpdGhtX2F1dGggJiBkaXNhYmxlZF9hdXRoKSAmJgorCQkgICAgIShjLT5hbGdvcml0aG1fZW5jICYgZGlzYWJsZWRfZW5jKSAmJgorCQkgICAgIShjLT5hbGdvcml0aG1fbWFjICYgZGlzYWJsZWRfbWFjKSAmJgorCQkgICAgIShjLT5hbGdvcml0aG1fc3NsICYgZGlzYWJsZWRfc3NsKSkKIAkJCXsKIAkJCWNvX2xpc3RbY29fbGlzdF9udW1dLmNpcGhlciA9IGM7CiAJCQljb19saXN0W2NvX2xpc3RfbnVtXS5uZXh0ID0gTlVMTDsKQEAgLTUzMiw3ICs3MzUsNyBAQAogCQkJY29fbGlzdFtjb19saXN0X251bV0uYWN0aXZlID0gMDsKIAkJCWNvX2xpc3RfbnVtKys7CiAjaWZkZWYgS1NTTF9ERUJVRwotCQkJcHJpbnRmKCJcdCVkOiAlcyAlbHggJWx4XG4iLGksYy0+bmFtZSxjLT5pZCxjLT5hbGdvcml0aG1zKTsKKwkJCXByaW50ZigiXHQlZDogJXMgJWx4ICVseCAlbHhcbiIsaSxjLT5uYW1lLGMtPmlkLGMtPmFsZ29yaXRobV9ta2V5LGMtPmFsZ29yaXRobV9hdXRoKTsKICNlbmRpZgkvKiBLU1NMX0RFQlVHICovCiAJCQkvKgogCQkJaWYgKCFza19wdXNoKGNhX2xpc3QsKGNoYXIgKiljKSkgZ290byBlcnI7CkBAIC01NDMsMjkgKzc0Niw0NSBAQAogCS8qCiAJICogUHJlcGFyZSBsaW5rZWQgbGlzdCBmcm9tIGxpc3QgZW50cmllcwogCSAqLwkKLQlmb3IgKGkgPSAxOyBpIDwgY29fbGlzdF9udW0gLSAxOyBpKyspCi0JCXsKLQkJY29fbGlzdFtpXS5wcmV2ID0gJihjb19saXN0W2ktMV0pOwotCQljb19saXN0W2ldLm5leHQgPSAmKGNvX2xpc3RbaSsxXSk7Ci0JCX0KIAlpZiAoY29fbGlzdF9udW0gPiAwKQogCQl7Ci0JCSgqaGVhZF9wKSA9ICYoY29fbGlzdFswXSk7Ci0JCSgqaGVhZF9wKS0+cHJldiA9IE5VTEw7Ci0JCSgqaGVhZF9wKS0+bmV4dCA9ICYoY29fbGlzdFsxXSk7Ci0JCSgqdGFpbF9wKSA9ICYoY29fbGlzdFtjb19saXN0X251bSAtIDFdKTsKLQkJKCp0YWlsX3ApLT5wcmV2ID0gJihjb19saXN0W2NvX2xpc3RfbnVtIC0gMl0pOwotCQkoKnRhaWxfcCktPm5leHQgPSBOVUxMOworCQljb19saXN0WzBdLnByZXYgPSBOVUxMOworCisJCWlmIChjb19saXN0X251bSA+IDEpCisJCQl7CisJCQljb19saXN0WzBdLm5leHQgPSAmY29fbGlzdFsxXTsKKwkJCQorCQkJZm9yIChpID0gMTsgaSA8IGNvX2xpc3RfbnVtIC0gMTsgaSsrKQorCQkJCXsKKwkJCQljb19saXN0W2ldLnByZXYgPSAmY29fbGlzdFtpIC0gMV07CisJCQkJY29fbGlzdFtpXS5uZXh0ID0gJmNvX2xpc3RbaSArIDFdOworCQkJCX0KKworCQkJY29fbGlzdFtjb19saXN0X251bSAtIDFdLnByZXYgPSAmY29fbGlzdFtjb19saXN0X251bSAtIDJdOworCQkJfQorCQkKKwkJY29fbGlzdFtjb19saXN0X251bSAtIDFdLm5leHQgPSBOVUxMOworCisJCSpoZWFkX3AgPSAmY29fbGlzdFswXTsKKwkJKnRhaWxfcCA9ICZjb19saXN0W2NvX2xpc3RfbnVtIC0gMV07CiAJCX0KIAl9CiAKLXN0YXRpYyB2b2lkIHNzbF9jaXBoZXJfY29sbGVjdF9hbGlhc2VzKFNTTF9DSVBIRVIgKipjYV9saXN0LAotCQkJaW50IG51bV9vZl9ncm91cF9hbGlhc2VzLCB1bnNpZ25lZCBsb25nIG1hc2ssCitzdGF0aWMgdm9pZCBzc2xfY2lwaGVyX2NvbGxlY3RfYWxpYXNlcyhjb25zdCBTU0xfQ0lQSEVSICoqY2FfbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1fb2ZfZ3JvdXBfYWxpYXNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZGlzYWJsZWRfbWtleSwgdW5zaWduZWQgbG9uZyBkaXNhYmxlZF9hdXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBkaXNhYmxlZF9lbmMsIHVuc2lnbmVkIGxvbmcgZGlzYWJsZWRfbWFjLAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBkaXNhYmxlZF9zc2wsCiAJCQlDSVBIRVJfT1JERVIgKmhlYWQpCiAJewogCUNJUEhFUl9PUkRFUiAqY2lwaF9jdXJyOwotCVNTTF9DSVBIRVIgKipjYV9jdXJyOworCWNvbnN0IFNTTF9DSVBIRVIgKipjYV9jdXJyOwogCWludCBpOworCXVuc2lnbmVkIGxvbmcgbWFza19ta2V5ID0gfmRpc2FibGVkX21rZXk7CisJdW5zaWduZWQgbG9uZyBtYXNrX2F1dGggPSB+ZGlzYWJsZWRfYXV0aDsKKwl1bnNpZ25lZCBsb25nIG1hc2tfZW5jID0gfmRpc2FibGVkX2VuYzsKKwl1bnNpZ25lZCBsb25nIG1hc2tfbWFjID0gfmRpc2FibGVkX21hYzsKKwl1bnNpZ25lZCBsb25nIG1hc2tfc3NsID0gfmRpc2FibGVkX3NzbDsKIAogCS8qCiAJICogRmlyc3QsIGFkZCB0aGUgcmVhbCBjaXBoZXJzIGFzIGFscmVhZHkgY29sbGVjdGVkCkBAIC01ODEsODQgKzgwMCwxMTggQEAKIAogCS8qCiAJICogTm93IHdlIGFkZCB0aGUgYXZhaWxhYmxlIG9uZXMgZnJvbSB0aGUgY2lwaGVyX2FsaWFzZXNbXSB0YWJsZS4KLQkgKiBUaGV5IHJlcHJlc2VudCBlaXRoZXIgYW4gYWxnb3JpdGhtLCB0aGF0IG11c3QgYmUgZnVsbHkKLQkgKiBzdXBwb3J0ZWQgKG5vdCBtYXRjaCBhbnkgYml0IGluIG1hc2spIG9yIHJlcHJlc2VudCBhIGNpcGhlcgotCSAqIHN0cmVuZ3RoIHZhbHVlICh3aWxsIGJlIGFkZGVkIGluIGFueSBjYXNlIGJlY2F1c2UgYWxnb3JpdGhtcz0wKS4KKwkgKiBUaGV5IHJlcHJlc2VudCBlaXRoZXIgb25lIG9yIG1vcmUgYWxnb3JpdGhtcywgc29tZSBvZiB3aGljaAorCSAqIGluIGFueSBhZmZlY3RlZCBjYXRlZ29yeSBtdXN0IGJlIHN1cHBvcnRlZCAoc2V0IGluIGVuYWJsZWRfbWFzayksCisJICogb3IgcmVwcmVzZW50IGEgY2lwaGVyIHN0cmVuZ3RoIHZhbHVlICh3aWxsIGJlIGFkZGVkIGluIGFueSBjYXNlIGJlY2F1c2UgYWxnb3JpdGhtcz0wKS4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnVtX29mX2dyb3VwX2FsaWFzZXM7IGkrKykKIAkJewotCQlpZiAoKGkgPT0gMCkgfHwJCS8qIGFsd2F5cyBmZXRjaCAiQUxMIiAqLwotCQkgICAgIShjaXBoZXJfYWxpYXNlc1tpXS5hbGdvcml0aG1zICYgbWFzaykpCi0JCQl7Ci0JCQkqY2FfY3VyciA9IChTU0xfQ0lQSEVSICopKGNpcGhlcl9hbGlhc2VzICsgaSk7Ci0JCQljYV9jdXJyKys7Ci0JCQl9CisJCXVuc2lnbmVkIGxvbmcgYWxnb3JpdGhtX21rZXkgPSBjaXBoZXJfYWxpYXNlc1tpXS5hbGdvcml0aG1fbWtleTsKKwkJdW5zaWduZWQgbG9uZyBhbGdvcml0aG1fYXV0aCA9IGNpcGhlcl9hbGlhc2VzW2ldLmFsZ29yaXRobV9hdXRoOworCQl1bnNpZ25lZCBsb25nIGFsZ29yaXRobV9lbmMgPSBjaXBoZXJfYWxpYXNlc1tpXS5hbGdvcml0aG1fZW5jOworCQl1bnNpZ25lZCBsb25nIGFsZ29yaXRobV9tYWMgPSBjaXBoZXJfYWxpYXNlc1tpXS5hbGdvcml0aG1fbWFjOworCQl1bnNpZ25lZCBsb25nIGFsZ29yaXRobV9zc2wgPSBjaXBoZXJfYWxpYXNlc1tpXS5hbGdvcml0aG1fc3NsOworCisJCWlmIChhbGdvcml0aG1fbWtleSkKKwkJCWlmICgoYWxnb3JpdGhtX21rZXkgJiBtYXNrX21rZXkpID09IDApCisJCQkJY29udGludWU7CisJCisJCWlmIChhbGdvcml0aG1fYXV0aCkKKwkJCWlmICgoYWxnb3JpdGhtX2F1dGggJiBtYXNrX2F1dGgpID09IDApCisJCQkJY29udGludWU7CisJCQorCQlpZiAoYWxnb3JpdGhtX2VuYykKKwkJCWlmICgoYWxnb3JpdGhtX2VuYyAmIG1hc2tfZW5jKSA9PSAwKQorCQkJCWNvbnRpbnVlOworCQkKKwkJaWYgKGFsZ29yaXRobV9tYWMpCisJCQlpZiAoKGFsZ29yaXRobV9tYWMgJiBtYXNrX21hYykgPT0gMCkKKwkJCQljb250aW51ZTsKKwkJCisJCWlmIChhbGdvcml0aG1fc3NsKQorCQkJaWYgKChhbGdvcml0aG1fc3NsICYgbWFza19zc2wpID09IDApCisJCQkJY29udGludWU7CisJCQorCQkqY2FfY3VyciA9IChTU0xfQ0lQSEVSICopKGNpcGhlcl9hbGlhc2VzICsgaSk7CisJCWNhX2N1cnIrKzsKIAkJfQogCiAJKmNhX2N1cnIgPSBOVUxMOwkvKiBlbmQgb2YgbGlzdCAqLwogCX0KIAotc3RhdGljIHZvaWQgc3NsX2NpcGhlcl9hcHBseV9ydWxlKHVuc2lnbmVkIGxvbmcgY2lwaGVyX2lkLCB1bnNpZ25lZCBsb25nIHNzbF92ZXJzaW9uLAotCQl1bnNpZ25lZCBsb25nIGFsZ29yaXRobXMsIHVuc2lnbmVkIGxvbmcgbWFzaywKLQkJdW5zaWduZWQgbG9uZyBhbGdvX3N0cmVuZ3RoLCB1bnNpZ25lZCBsb25nIG1hc2tfc3RyZW5ndGgsCi0JCWludCBydWxlLCBpbnQgc3RyZW5ndGhfYml0cywgQ0lQSEVSX09SREVSICpjb19saXN0LAorc3RhdGljIHZvaWQgc3NsX2NpcGhlcl9hcHBseV9ydWxlKHVuc2lnbmVkIGxvbmcgY2lwaGVyX2lkLAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYWxnX21rZXksIHVuc2lnbmVkIGxvbmcgYWxnX2F1dGgsCisgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBhbGdfZW5jLCB1bnNpZ25lZCBsb25nIGFsZ19tYWMsCisgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBhbGdfc3NsLAorCQl1bnNpZ25lZCBsb25nIGFsZ29fc3RyZW5ndGgsCisJCWludCBydWxlLCBpbnQgc3RyZW5ndGhfYml0cywKIAkJQ0lQSEVSX09SREVSICoqaGVhZF9wLCBDSVBIRVJfT1JERVIgKip0YWlsX3ApCiAJewotCUNJUEhFUl9PUkRFUiAqaGVhZCwgKnRhaWwsICpjdXJyLCAqY3VycjIsICp0YWlsMjsKLQlTU0xfQ0lQSEVSICpjcDsKLQl1bnNpZ25lZCBsb25nIG1hLCBtYV9zOworCUNJUEhFUl9PUkRFUiAqaGVhZCwgKnRhaWwsICpjdXJyLCAqY3VycjIsICpsYXN0OworCWNvbnN0IFNTTF9DSVBIRVIgKmNwOworCWludCByZXZlcnNlID0gMDsKIAogI2lmZGVmIENJUEhFUl9ERUJVRwotCXByaW50ZigiQXBwbHlpbmcgcnVsZSAlZCB3aXRoICUwOGx4ICUwOGx4ICUwOGx4ICUwOGx4ICglZClcbiIsCi0JCXJ1bGUsIGFsZ29yaXRobXMsIG1hc2ssIGFsZ29fc3RyZW5ndGgsIG1hc2tfc3RyZW5ndGgsCi0JCXN0cmVuZ3RoX2JpdHMpOworCXByaW50ZigiQXBwbHlpbmcgcnVsZSAlZCB3aXRoICUwOGx4LyUwOGx4LyUwOGx4LyUwOGx4LyUwOGx4ICUwOGx4ICglZClcbiIsCisJCXJ1bGUsIGFsZ19ta2V5LCBhbGdfYXV0aCwgYWxnX2VuYywgYWxnX21hYywgYWxnX3NzbCwgYWxnb19zdHJlbmd0aCwgc3RyZW5ndGhfYml0cyk7CiAjZW5kaWYKIAotCWN1cnIgPSBoZWFkID0gKmhlYWRfcDsKLQljdXJyMiA9IGhlYWQ7Ci0JdGFpbDIgPSB0YWlsID0gKnRhaWxfcDsKKwlpZiAocnVsZSA9PSBDSVBIRVJfREVMKQorCQlyZXZlcnNlID0gMTsgLyogbmVlZGVkIHRvIG1haW50YWluIHNvcnRpbmcgYmV0d2VlbiBjdXJyZW50bHkgZGVsZXRlZCBjaXBoZXJzICovCisKKwloZWFkID0gKmhlYWRfcDsKKwl0YWlsID0gKnRhaWxfcDsKKworCWlmIChyZXZlcnNlKQorCQl7CisJCWN1cnIgPSB0YWlsOworCQlsYXN0ID0gaGVhZDsKKwkJfQorCWVsc2UKKwkJeworCQljdXJyID0gaGVhZDsKKwkJbGFzdCA9IHRhaWw7CisJCX0KKworCWN1cnIyID0gY3VycjsKIAlmb3IgKDs7KQogCQl7Ci0JCWlmICgoY3VyciA9PSBOVUxMKSB8fCAoY3VyciA9PSB0YWlsMikpIGJyZWFrOworCQlpZiAoKGN1cnIgPT0gTlVMTCkgfHwgKGN1cnIgPT0gbGFzdCkpIGJyZWFrOwogCQljdXJyID0gY3VycjI7Ci0JCWN1cnIyID0gY3Vyci0+bmV4dDsKKwkJY3VycjIgPSByZXZlcnNlID8gY3Vyci0+cHJldiA6IGN1cnItPm5leHQ7CiAKIAkJY3AgPSBjdXJyLT5jaXBoZXI7CiAKLQkJLyogSWYgZXhwbGljaXQgY2lwaGVyIHN1aXRlLCBtYXRjaCBvbmx5IHRoYXQgb25lIGZvciBpdHMgb3duIHByb3RvY29sIHZlcnNpb24uCi0JCSAqIFVzdWFsIHNlbGVjdGlvbiBjcml0ZXJpYSB3aWxsIGJlIHVzZWQgZm9yIHNpbWlsYXIgY2lwaGVyc3VpdGVzIGZyb20gb3RoZXIgdmVyc2lvbiEgKi8KLQotCQlpZiAoY2lwaGVyX2lkICYmIChjcC0+YWxnb3JpdGhtcyAmIFNTTF9TU0xfTUFTSykgPT0gc3NsX3ZlcnNpb24pCisJCS8qCisJCSAqIFNlbGVjdGlvbiBjcml0ZXJpYSBpcyBlaXRoZXIgdGhlIHZhbHVlIG9mIHN0cmVuZ3RoX2JpdHMKKwkJICogb3IgdGhlIGFsZ29yaXRobXMgdXNlZC4KKwkJICovCisJCWlmIChzdHJlbmd0aF9iaXRzID49IDApCiAJCQl7Ci0JCQlpZiAoY3AtPmlkICE9IGNpcGhlcl9pZCkKKwkJCWlmIChzdHJlbmd0aF9iaXRzICE9IGNwLT5zdHJlbmd0aF9iaXRzKQogCQkJCWNvbnRpbnVlOwogCQkJfQotCi0JCS8qCi0JCSAqIFNlbGVjdGlvbiBjcml0ZXJpYSBpcyBlaXRoZXIgdGhlIG51bWJlciBvZiBzdHJlbmd0aF9iaXRzCi0JCSAqIG9yIHRoZSBhbGdvcml0aG0gdXNlZC4KLQkJICovCi0JCWVsc2UgaWYgKHN0cmVuZ3RoX2JpdHMgPT0gLTEpCisJCWVsc2UKIAkJCXsKLQkJCW1hID0gbWFzayAmIGNwLT5hbGdvcml0aG1zOwotCQkJbWFfcyA9IG1hc2tfc3RyZW5ndGggJiBjcC0+YWxnb19zdHJlbmd0aDsKLQogI2lmZGVmIENJUEhFUl9ERUJVRwotCQkJcHJpbnRmKCJcbk5hbWU6ICVzOlxuQWxnbyA9ICUwOGx4IEFsZ29fc3RyZW5ndGggPSAlMDhseFxuTWFzayA9ICUwOGx4IE1hc2tfc3RyZW5ndGggJTA4bHhcbiIsIGNwLT5uYW1lLCBjcC0+YWxnb3JpdGhtcywgY3AtPmFsZ29fc3RyZW5ndGgsIG1hc2ssIG1hc2tfc3RyZW5ndGgpOwotCQkJcHJpbnRmKCJtYSA9ICUwOGx4IG1hX3MgJTA4bHgsIG1hJmFsZ289JTA4bHgsIG1hX3MmYWxnb3M9JTA4bHhcbiIsIG1hLCBtYV9zLCBtYSZhbGdvcml0aG1zLCBtYV9zJmFsZ29fc3RyZW5ndGgpOworCQkJcHJpbnRmKCJcbk5hbWU6ICVzOlxuQWxnbyA9ICUwOGx4LyUwOGx4LyUwOGx4LyUwOGx4LyUwOGx4IEFsZ29fc3RyZW5ndGggPSAlMDhseFxuIiwgY3AtPm5hbWUsIGNwLT5hbGdvcml0aG1fbWtleSwgY3AtPmFsZ29yaXRobV9hdXRoLCBjcC0+YWxnb3JpdGhtX2VuYywgY3AtPmFsZ29yaXRobV9tYWMsIGNwLT5hbGdvcml0aG1fc3NsLCBjcC0+YWxnb19zdHJlbmd0aCk7CiAjZW5kaWYKLQkJCS8qCi0JCQkgKiBTZWxlY3Q6IGlmIG5vbmUgb2YgdGhlIG1hc2sgYml0IHdhcyBtZXQgZnJvbSB0aGUKLQkJCSAqIGNpcGhlciBvciBub3QgYWxsIG9mIHRoZSBiaXRzIHdlcmUgbWV0LCB0aGUKLQkJCSAqIHNlbGVjdGlvbiBkb2VzIG5vdCBhcHBseS4KLQkJCSAqLwotCQkJaWYgKCgobWEgPT0gMCkgJiYgKG1hX3MgPT0gMCkpIHx8Ci0JCQkgICAgKChtYSAmIGFsZ29yaXRobXMpICE9IG1hKSB8fAotCQkJICAgICgobWFfcyAmIGFsZ29fc3RyZW5ndGgpICE9IG1hX3MpKQotCQkJCWNvbnRpbnVlOyAvKiBkb2VzIG5vdCBhcHBseSAqLworCisJCQlpZiAoYWxnX21rZXkgJiYgIShhbGdfbWtleSAmIGNwLT5hbGdvcml0aG1fbWtleSkpCisJCQkJY29udGludWU7CisJCQlpZiAoYWxnX2F1dGggJiYgIShhbGdfYXV0aCAmIGNwLT5hbGdvcml0aG1fYXV0aCkpCisJCQkJY29udGludWU7CisJCQlpZiAoYWxnX2VuYyAmJiAhKGFsZ19lbmMgJiBjcC0+YWxnb3JpdGhtX2VuYykpCisJCQkJY29udGludWU7CisJCQlpZiAoYWxnX21hYyAmJiAhKGFsZ19tYWMgJiBjcC0+YWxnb3JpdGhtX21hYykpCisJCQkJY29udGludWU7CisJCQlpZiAoYWxnX3NzbCAmJiAhKGFsZ19zc2wgJiBjcC0+YWxnb3JpdGhtX3NzbCkpCisJCQkJY29udGludWU7CisJCQlpZiAoKGFsZ29fc3RyZW5ndGggJiBTU0xfRVhQX01BU0spICYmICEoYWxnb19zdHJlbmd0aCAmIFNTTF9FWFBfTUFTSyAmIGNwLT5hbGdvX3N0cmVuZ3RoKSkKKwkJCQljb250aW51ZTsKKwkJCWlmICgoYWxnb19zdHJlbmd0aCAmIFNTTF9TVFJPTkdfTUFTSykgJiYgIShhbGdvX3N0cmVuZ3RoICYgU1NMX1NUUk9OR19NQVNLICYgY3AtPmFsZ29fc3RyZW5ndGgpKQorCQkJCWNvbnRpbnVlOwogCQkJfQotCQllbHNlIGlmIChzdHJlbmd0aF9iaXRzICE9IGNwLT5zdHJlbmd0aF9iaXRzKQotCQkJY29udGludWU7CS8qIGRvZXMgbm90IGFwcGx5ICovCiAKICNpZmRlZiBDSVBIRVJfREVCVUcKIAkJcHJpbnRmKCJBY3Rpb24gPSAlZFxuIiwgcnVsZSk7CkBAIC02NjcsMzggKzkyMCwzNyBAQAogCQkvKiBhZGQgdGhlIGNpcGhlciBpZiBpdCBoYXMgbm90IGJlZW4gYWRkZWQgeWV0LiAqLwogCQlpZiAocnVsZSA9PSBDSVBIRVJfQUREKQogCQkJeworCQkJLyogcmV2ZXJzZSA9PSAwICovCiAJCQlpZiAoIWN1cnItPmFjdGl2ZSkKIAkJCQl7Ci0JCQkJaW50IGFkZF90aGlzX2NpcGhlciA9IDE7Ci0KLQkJCQlpZiAoKChjcC0+YWxnb3JpdGhtcyAmIChTU0xfa0VDREhFfFNTTF9rRUNESHxTU0xfYUVDRFNBKSkgIT0gMCkpCi0JCQkJCXsKLQkJCQkJLyogTWFrZSBzdXJlICJFQ0NkcmFmdCIgY2lwaGVyc3VpdGVzIGFyZSBhY3RpdmF0ZWQgb25seSBpZgotCQkJCQkgKiAqZXhwbGljaXRseSogcmVxdWVzdGVkLCBidXQgbm90IGltcGxpY2l0bHkgKHN1Y2ggYXMKLQkJCQkJICogYXMgcGFydCBvZiB0aGUgIkFFUyIgYWxpYXMpLiAqLwotCi0JCQkJCWFkZF90aGlzX2NpcGhlciA9IChtYXNrICYgKFNTTF9rRUNESEV8U1NMX2tFQ0RIfFNTTF9hRUNEU0EpKSAhPSAwIHx8IGNpcGhlcl9pZCAhPSAwOwotCQkJCQl9Ci0JCQkJCi0JCQkJaWYgKGFkZF90aGlzX2NpcGhlcikKLQkJCQkJewotCQkJCQlsbF9hcHBlbmRfdGFpbCgmaGVhZCwgY3VyciwgJnRhaWwpOwotCQkJCQljdXJyLT5hY3RpdmUgPSAxOwotCQkJCQl9CisJCQkJbGxfYXBwZW5kX3RhaWwoJmhlYWQsIGN1cnIsICZ0YWlsKTsKKwkJCQljdXJyLT5hY3RpdmUgPSAxOwogCQkJCX0KIAkJCX0KIAkJLyogTW92ZSB0aGUgYWRkZWQgY2lwaGVyIHRvIHRoaXMgbG9jYXRpb24gKi8KIAkJZWxzZSBpZiAocnVsZSA9PSBDSVBIRVJfT1JEKQogCQkJeworCQkJLyogcmV2ZXJzZSA9PSAwICovCiAJCQlpZiAoY3Vyci0+YWN0aXZlKQogCQkJCXsKIAkJCQlsbF9hcHBlbmRfdGFpbCgmaGVhZCwgY3VyciwgJnRhaWwpOwogCQkJCX0KIAkJCX0KIAkJZWxzZSBpZgkocnVsZSA9PSBDSVBIRVJfREVMKQotCQkJY3Vyci0+YWN0aXZlID0gMDsKKwkJCXsKKwkJCS8qIHJldmVyc2UgPT0gMSAqLworCQkJaWYgKGN1cnItPmFjdGl2ZSkKKwkJCQl7CisJCQkJLyogbW9zdCByZWNlbnRseSBkZWxldGVkIGNpcGhlcnN1aXRlcyBnZXQgYmVzdCBwb3NpdGlvbnMKKwkJCQkgKiBmb3IgYW55IGZ1dHVyZSBDSVBIRVJfQUREIChub3RlIHRoYXQgdGhlIENJUEhFUl9ERUwgbG9vcAorCQkJCSAqIHdvcmtzIGluIHJldmVyc2UgdG8gbWFpbnRhaW4gdGhlIG9yZGVyKSAqLworCQkJCWxsX2FwcGVuZF9oZWFkKCZoZWFkLCBjdXJyLCAmdGFpbCk7CisJCQkJY3Vyci0+YWN0aXZlID0gMDsKKwkJCQl9CisJCQl9CiAJCWVsc2UgaWYgKHJ1bGUgPT0gQ0lQSEVSX0tJTEwpCiAJCQl7CisJCQkvKiByZXZlcnNlID09IDAgKi8KIAkJCWlmIChoZWFkID09IGN1cnIpCiAJCQkJaGVhZCA9IGN1cnItPm5leHQ7CiAJCQllbHNlCkBAIC03MTksOCArOTcxLDcgQEAKIAkqdGFpbF9wID0gdGFpbDsKIAl9CiAKLXN0YXRpYyBpbnQgc3NsX2NpcGhlcl9zdHJlbmd0aF9zb3J0KENJUEhFUl9PUkRFUiAqY29fbGlzdCwKLQkJCQkgICAgQ0lQSEVSX09SREVSICoqaGVhZF9wLAorc3RhdGljIGludCBzc2xfY2lwaGVyX3N0cmVuZ3RoX3NvcnQoQ0lQSEVSX09SREVSICoqaGVhZF9wLAogCQkJCSAgICBDSVBIRVJfT1JERVIgKip0YWlsX3ApCiAJewogCWludCBtYXhfc3RyZW5ndGhfYml0cywgaSwgKm51bWJlcl91c2VzOwpAQCAtNzQzLDEwICs5OTQsMTAgQEAKIAogCW51bWJlcl91c2VzID0gT1BFTlNTTF9tYWxsb2MoKG1heF9zdHJlbmd0aF9iaXRzICsgMSkgKiBzaXplb2YoaW50KSk7CiAJaWYgKCFudW1iZXJfdXNlcykKLQl7CisJCXsKIAkJU1NMZXJyKFNTTF9GX1NTTF9DSVBIRVJfU1RSRU5HVEhfU09SVCxFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CiAJCXJldHVybigwKTsKLQl9CisJCX0KIAltZW1zZXQobnVtYmVyX3VzZXMsIDAsIChtYXhfc3RyZW5ndGhfYml0cyArIDEpICogc2l6ZW9mKGludCkpOwogCiAJLyoKQEAgLTc2NSwyMSArMTAxNiwyMCBAQAogCSAqLwogCWZvciAoaSA9IG1heF9zdHJlbmd0aF9iaXRzOyBpID49IDA7IGktLSkKIAkJaWYgKG51bWJlcl91c2VzW2ldID4gMCkKLQkJCXNzbF9jaXBoZXJfYXBwbHlfcnVsZSgwLCAwLCAwLCAwLCAwLCAwLCBDSVBIRVJfT1JELCBpLAotCQkJCQljb19saXN0LCBoZWFkX3AsIHRhaWxfcCk7CisJCQlzc2xfY2lwaGVyX2FwcGx5X3J1bGUoMCwgMCwgMCwgMCwgMCwgMCwgMCwgQ0lQSEVSX09SRCwgaSwgaGVhZF9wLCB0YWlsX3ApOwogCiAJT1BFTlNTTF9mcmVlKG51bWJlcl91c2VzKTsKIAlyZXR1cm4oMSk7CiAJfQogCiBzdGF0aWMgaW50IHNzbF9jaXBoZXJfcHJvY2Vzc19ydWxlc3RyKGNvbnN0IGNoYXIgKnJ1bGVfc3RyLAotCQlDSVBIRVJfT1JERVIgKmNvX2xpc3QsIENJUEhFUl9PUkRFUiAqKmhlYWRfcCwKLQkJQ0lQSEVSX09SREVSICoqdGFpbF9wLCBTU0xfQ0lQSEVSICoqY2FfbGlzdCkKKyAgICAgICAgICAgICAgICBDSVBIRVJfT1JERVIgKipoZWFkX3AsIENJUEhFUl9PUkRFUiAqKnRhaWxfcCwKKyAgICAgICAgICAgICAgICBjb25zdCBTU0xfQ0lQSEVSICoqY2FfbGlzdCkKIAl7Ci0JdW5zaWduZWQgbG9uZyBhbGdvcml0aG1zLCBtYXNrLCBhbGdvX3N0cmVuZ3RoLCBtYXNrX3N0cmVuZ3RoOworCXVuc2lnbmVkIGxvbmcgYWxnX21rZXksIGFsZ19hdXRoLCBhbGdfZW5jLCBhbGdfbWFjLCBhbGdfc3NsLCBhbGdvX3N0cmVuZ3RoOwogCWNvbnN0IGNoYXIgKmwsICpzdGFydCwgKmJ1ZjsKIAlpbnQgaiwgbXVsdGksIGZvdW5kLCBydWxlLCByZXR2YWwsIG9rLCBidWZsZW47Ci0JdW5zaWduZWQgbG9uZyBjaXBoZXJfaWQgPSAwLCBzc2xfdmVyc2lvbiA9IDA7CisJdW5zaWduZWQgbG9uZyBjaXBoZXJfaWQgPSAwOwogCWNoYXIgY2g7CiAKIAlyZXR2YWwgPSAxOwpAQCAtODA3LDcgKzEwNTcsMTIgQEAKIAkJCWNvbnRpbnVlOwogCQkJfQogCi0JCWFsZ29yaXRobXMgPSBtYXNrID0gYWxnb19zdHJlbmd0aCA9IG1hc2tfc3RyZW5ndGggPSAwOworCQlhbGdfbWtleSA9IDA7CisJCWFsZ19hdXRoID0gMDsKKwkJYWxnX2VuYyA9IDA7CisJCWFsZ19tYWMgPSAwOworCQlhbGdfc3NsID0gMDsKKwkJYWxnb19zdHJlbmd0aCA9IDA7CiAKIAkJc3RhcnQ9bDsKIAkJZm9yICg7OykKQEAgLTg2OCwxMCArMTEyMyw5IEBACiAJCQkgKiBzdWZmaWNpZW50LCB3ZSBoYXZlIHRvIHN0cm5jbXAoKSBhbnl3YXkuIChXZSBjYW5ub3QKIAkJCSAqIHVzZSBzdHJjbXAoKSwgYmVjYXVzZSBidWYgaXMgbm90ICdcMCcgdGVybWluYXRlZC4pCiAJCQkgKi8KLQkJCSBqID0gZm91bmQgPSAwOwotCQkJIGNpcGhlcl9pZCA9IDA7Ci0JCQkgc3NsX3ZlcnNpb24gPSAwOwotCQkJIHdoaWxlIChjYV9saXN0W2pdKQorCQkJaiA9IGZvdW5kID0gMDsKKwkJCWNpcGhlcl9pZCA9IDA7CisJCQl3aGlsZSAoY2FfbGlzdFtqXSkKIAkJCQl7CiAJCQkJaWYgKCFzdHJuY21wKGJ1ZiwgY2FfbGlzdFtqXS0+bmFtZSwgYnVmbGVuKSAmJgogCQkJCSAgICAoY2FfbGlzdFtqXS0+bmFtZVtidWZsZW5dID09ICdcMCcpKQpAQCAtODgyLDMxICsxMTM2LDEwMCBAQAogCQkJCWVsc2UKIAkJCQkJaisrOwogCQkJCX0KKwogCQkJaWYgKCFmb3VuZCkKIAkJCQlicmVhazsJLyogaWdub3JlIHRoaXMgZW50cnkgKi8KIAotCQkJLyogTmV3IGFsZ29yaXRobXM6Ci0JCQkgKiAgMSAtIGFueSBvbGQgcmVzdHJpY3Rpb25zIGFwcGx5IG91dHNpZGUgbmV3IG1hc2sKLQkJCSAqICAyIC0gYW55IG5ldyByZXN0cmljdGlvbnMgYXBwbHkgb3V0c2lkZSBvbGQgbWFzawotCQkJICogIDMgLSBlbmZvcmNlIG9sZCAmIG5ldyB3aGVyZSBtYXNrcyBpbnRlcnNlY3QKLQkJCSAqLwotCQkJYWxnb3JpdGhtcyA9IChhbGdvcml0aG1zICYgfmNhX2xpc3Rbal0tPm1hc2spIHwJCS8qIDEgKi8KLQkJCSAgICAgICAgICAgICAoY2FfbGlzdFtqXS0+YWxnb3JpdGhtcyAmIH5tYXNrKSB8CQkvKiAyICovCi0JCQkgICAgICAgICAgICAgKGFsZ29yaXRobXMgJiBjYV9saXN0W2pdLT5hbGdvcml0aG1zKTsJLyogMyAqLwotCQkJbWFzayB8PSBjYV9saXN0W2pdLT5tYXNrOwotCQkJYWxnb19zdHJlbmd0aCA9IChhbGdvX3N0cmVuZ3RoICYgfmNhX2xpc3Rbal0tPm1hc2tfc3RyZW5ndGgpIHwKLQkJCSAgICAgICAgICAgICAgICAoY2FfbGlzdFtqXS0+YWxnb19zdHJlbmd0aCAmIH5tYXNrX3N0cmVuZ3RoKSB8Ci0JCQkgICAgICAgICAgICAgICAgKGFsZ29fc3RyZW5ndGggJiBjYV9saXN0W2pdLT5hbGdvX3N0cmVuZ3RoKTsKLQkJCW1hc2tfc3RyZW5ndGggfD0gY2FfbGlzdFtqXS0+bWFza19zdHJlbmd0aDsKLQotCQkJLyogZXhwbGljaXQgY2lwaGVyc3VpdGUgZm91bmQgKi8KLQkJCWlmIChjYV9saXN0W2pdLT52YWxpZCkKKwkJCWlmIChjYV9saXN0W2pdLT5hbGdvcml0aG1fbWtleSkKIAkJCQl7Ci0JCQkJY2lwaGVyX2lkID0gY2FfbGlzdFtqXS0+aWQ7Ci0JCQkJc3NsX3ZlcnNpb24gPSBjYV9saXN0W2pdLT5hbGdvcml0aG1zICYgU1NMX1NTTF9NQVNLOwotCQkJCWJyZWFrOworCQkJCWlmIChhbGdfbWtleSkKKwkJCQkJeworCQkJCQlhbGdfbWtleSAmPSBjYV9saXN0W2pdLT5hbGdvcml0aG1fbWtleTsKKwkJCQkJaWYgKCFhbGdfbWtleSkgeyBmb3VuZCA9IDA7IGJyZWFrOyB9CisJCQkJCX0KKwkJCQllbHNlCisJCQkJCWFsZ19ta2V5ID0gY2FfbGlzdFtqXS0+YWxnb3JpdGhtX21rZXk7CiAJCQkJfQogCisJCQlpZiAoY2FfbGlzdFtqXS0+YWxnb3JpdGhtX2F1dGgpCisJCQkJeworCQkJCWlmIChhbGdfYXV0aCkKKwkJCQkJeworCQkJCQlhbGdfYXV0aCAmPSBjYV9saXN0W2pdLT5hbGdvcml0aG1fYXV0aDsKKwkJCQkJaWYgKCFhbGdfYXV0aCkgeyBmb3VuZCA9IDA7IGJyZWFrOyB9CisJCQkJCX0KKwkJCQllbHNlCisJCQkJCWFsZ19hdXRoID0gY2FfbGlzdFtqXS0+YWxnb3JpdGhtX2F1dGg7CisJCQkJfQorCQkJCisJCQlpZiAoY2FfbGlzdFtqXS0+YWxnb3JpdGhtX2VuYykKKwkJCQl7CisJCQkJaWYgKGFsZ19lbmMpCisJCQkJCXsKKwkJCQkJYWxnX2VuYyAmPSBjYV9saXN0W2pdLT5hbGdvcml0aG1fZW5jOworCQkJCQlpZiAoIWFsZ19lbmMpIHsgZm91bmQgPSAwOyBicmVhazsgfQorCQkJCQl9CisJCQkJZWxzZQorCQkJCQlhbGdfZW5jID0gY2FfbGlzdFtqXS0+YWxnb3JpdGhtX2VuYzsKKwkJCQl9CisJCQkJCQkKKwkJCWlmIChjYV9saXN0W2pdLT5hbGdvcml0aG1fbWFjKQorCQkJCXsKKwkJCQlpZiAoYWxnX21hYykKKwkJCQkJeworCQkJCQlhbGdfbWFjICY9IGNhX2xpc3Rbal0tPmFsZ29yaXRobV9tYWM7CisJCQkJCWlmICghYWxnX21hYykgeyBmb3VuZCA9IDA7IGJyZWFrOyB9CisJCQkJCX0KKwkJCQllbHNlCisJCQkJCWFsZ19tYWMgPSBjYV9saXN0W2pdLT5hbGdvcml0aG1fbWFjOworCQkJCX0KKwkJCQorCQkJaWYgKGNhX2xpc3Rbal0tPmFsZ29fc3RyZW5ndGggJiBTU0xfRVhQX01BU0spCisJCQkJeworCQkJCWlmIChhbGdvX3N0cmVuZ3RoICYgU1NMX0VYUF9NQVNLKQorCQkJCQl7CisJCQkJCWFsZ29fc3RyZW5ndGggJj0gKGNhX2xpc3Rbal0tPmFsZ29fc3RyZW5ndGggJiBTU0xfRVhQX01BU0spIHwgflNTTF9FWFBfTUFTSzsKKwkJCQkJaWYgKCEoYWxnb19zdHJlbmd0aCAmIFNTTF9FWFBfTUFTSykpIHsgZm91bmQgPSAwOyBicmVhazsgfQorCQkJCQl9CisJCQkJZWxzZQorCQkJCQlhbGdvX3N0cmVuZ3RoIHw9IGNhX2xpc3Rbal0tPmFsZ29fc3RyZW5ndGggJiBTU0xfRVhQX01BU0s7CisJCQkJfQorCisJCQlpZiAoY2FfbGlzdFtqXS0+YWxnb19zdHJlbmd0aCAmIFNTTF9TVFJPTkdfTUFTSykKKwkJCQl7CisJCQkJaWYgKGFsZ29fc3RyZW5ndGggJiBTU0xfU1RST05HX01BU0spCisJCQkJCXsKKwkJCQkJYWxnb19zdHJlbmd0aCAmPSAoY2FfbGlzdFtqXS0+YWxnb19zdHJlbmd0aCAmIFNTTF9TVFJPTkdfTUFTSykgfCB+U1NMX1NUUk9OR19NQVNLOworCQkJCQlpZiAoIShhbGdvX3N0cmVuZ3RoICYgU1NMX1NUUk9OR19NQVNLKSkgeyBmb3VuZCA9IDA7IGJyZWFrOyB9CisJCQkJCX0KKwkJCQllbHNlCisJCQkJCWFsZ29fc3RyZW5ndGggfD0gY2FfbGlzdFtqXS0+YWxnb19zdHJlbmd0aCAmIFNTTF9TVFJPTkdfTUFTSzsKKwkJCQl9CisJCQkKKwkJCWlmIChjYV9saXN0W2pdLT52YWxpZCkKKwkJCQl7CisJCQkJLyogZXhwbGljaXQgY2lwaGVyc3VpdGUgZm91bmQ7IGl0cyBwcm90b2NvbCB2ZXJzaW9uCisJCQkJICogZG9lcyBub3QgYmVjb21lIHBhcnQgb2YgdGhlIHNlYXJjaCBwYXR0ZXJuISovCisKKwkJCQljaXBoZXJfaWQgPSBjYV9saXN0W2pdLT5pZDsKKwkJCQl9CisJCQllbHNlCisJCQkJeworCQkJCS8qIG5vdCBhbiBleHBsaWNpdCBjaXBoZXJzdWl0ZTsgb25seSBpbiB0aGlzIGNhc2UsIHRoZQorCQkJCSAqIHByb3RvY29sIHZlcnNpb24gaXMgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBzZWFyY2ggcGF0dGVybiAqLworCisJCQkJaWYgKGNhX2xpc3Rbal0tPmFsZ29yaXRobV9zc2wpCisJCQkJCXsKKwkJCQkJaWYgKGFsZ19zc2wpCisJCQkJCQl7CisJCQkJCQlhbGdfc3NsICY9IGNhX2xpc3Rbal0tPmFsZ29yaXRobV9zc2w7CisJCQkJCQlpZiAoIWFsZ19zc2wpIHsgZm91bmQgPSAwOyBicmVhazsgfQorCQkJCQkJfQorCQkJCQllbHNlCisJCQkJCQlhbGdfc3NsID0gY2FfbGlzdFtqXS0+YWxnb3JpdGhtX3NzbDsKKwkJCQkJfQorCQkJCX0KKwkJCQogCQkJaWYgKCFtdWx0aSkgYnJlYWs7CiAJCQl9CiAKQEAgLTkxOCw4ICsxMjQxLDcgQEAKIAkJCW9rID0gMDsKIAkJCWlmICgoYnVmbGVuID09IDgpICYmCiAJCQkJIXN0cm5jbXAoYnVmLCAiU1RSRU5HVEgiLCA4KSkKLQkJCQlvayA9IHNzbF9jaXBoZXJfc3RyZW5ndGhfc29ydChjb19saXN0LAotCQkJCQloZWFkX3AsIHRhaWxfcCk7CisJCQkJb2sgPSBzc2xfY2lwaGVyX3N0cmVuZ3RoX3NvcnQoaGVhZF9wLCB0YWlsX3ApOwogCQkJZWxzZQogCQkJCVNTTGVycihTU0xfRl9TU0xfQ0lQSEVSX1BST0NFU1NfUlVMRVNUUiwKIAkJCQkJU1NMX1JfSU5WQUxJRF9DT01NQU5EKTsKQEAgLTkzNiw5ICsxMjU4LDkgQEAKIAkJCX0KIAkJZWxzZSBpZiAoZm91bmQpCiAJCQl7Ci0JCQlzc2xfY2lwaGVyX2FwcGx5X3J1bGUoY2lwaGVyX2lkLCBzc2xfdmVyc2lvbiwgYWxnb3JpdGhtcywgbWFzaywKLQkJCQlhbGdvX3N0cmVuZ3RoLCBtYXNrX3N0cmVuZ3RoLCBydWxlLCAtMSwKLQkJCQljb19saXN0LCBoZWFkX3AsIHRhaWxfcCk7CisJCQlzc2xfY2lwaGVyX2FwcGx5X3J1bGUoY2lwaGVyX2lkLAorCQkJCWFsZ19ta2V5LCBhbGdfYXV0aCwgYWxnX2VuYywgYWxnX21hYywgYWxnX3NzbCwgYWxnb19zdHJlbmd0aCwKKwkJCQlydWxlLCAtMSwgaGVhZF9wLCB0YWlsX3ApOwogCQkJfQogCQllbHNlCiAJCQl7CkBAIC05NTcsMTIgKzEyNzksMTEgQEAKIAkJY29uc3QgY2hhciAqcnVsZV9zdHIpCiAJewogCWludCBvaywgbnVtX29mX2NpcGhlcnMsIG51bV9vZl9hbGlhc19tYXgsIG51bV9vZl9ncm91cF9hbGlhc2VzOwotCXVuc2lnbmVkIGxvbmcgZGlzYWJsZWRfbWFzazsKLQl1bnNpZ25lZCBsb25nIGRpc2FibGVkX20yNTY7CisJdW5zaWduZWQgbG9uZyBkaXNhYmxlZF9ta2V5LCBkaXNhYmxlZF9hdXRoLCBkaXNhYmxlZF9lbmMsIGRpc2FibGVkX21hYywgZGlzYWJsZWRfc3NsOwogCVNUQUNLX09GKFNTTF9DSVBIRVIpICpjaXBoZXJzdGFjaywgKnRtcF9jaXBoZXJfbGlzdDsKIAljb25zdCBjaGFyICpydWxlX3A7CiAJQ0lQSEVSX09SREVSICpjb19saXN0ID0gTlVMTCwgKmhlYWQgPSBOVUxMLCAqdGFpbCA9IE5VTEwsICpjdXJyOwotCVNTTF9DSVBIRVIgKipjYV9saXN0ID0gTlVMTDsKKwljb25zdCBTU0xfQ0lQSEVSICoqY2FfbGlzdCA9IE5VTEw7CiAKIAkvKgogCSAqIFJldHVybiB3aXRoIGVycm9yIGlmIG5vdGhpbmcgdG8gZG8uCkBAIC05NzQsMTIgKzEyOTUsNyBAQAogCSAqIFRvIHJlZHVjZSB0aGUgd29yayB0byBkbyB3ZSBvbmx5IHdhbnQgdG8gcHJvY2VzcyB0aGUgY29tcGlsZWQKIAkgKiBpbiBhbGdvcml0aG1zLCBzbyB3ZSBmaXJzdCBnZXQgdGhlIG1hc2sgb2YgZGlzYWJsZWQgY2lwaGVycy4KIAkgKi8KLQl7Ci0JCXN0cnVjdCBkaXNhYmxlZF9tYXNrcyBkOwotCQlkID0gc3NsX2NpcGhlcl9nZXRfZGlzYWJsZWQoKTsKLQkJZGlzYWJsZWRfbWFzayA9IGQubWFzazsKLQkJZGlzYWJsZWRfbTI1NiA9IGQubTI1NjsKLQl9CisJc3NsX2NpcGhlcl9nZXRfZGlzYWJsZWQoJmRpc2FibGVkX21rZXksICZkaXNhYmxlZF9hdXRoLCAmZGlzYWJsZWRfZW5jLCAmZGlzYWJsZWRfbWFjLCAmZGlzYWJsZWRfc3NsKTsKIAogCS8qCiAJICogTm93IHdlIGhhdmUgdG8gY29sbGVjdCB0aGUgYXZhaWxhYmxlIGNpcGhlcnMgZnJvbSB0aGUgY29tcGlsZWQKQEAgLTk5Nyw4ICsxMzEzLDUyIEBACiAJCXJldHVybihOVUxMKTsJLyogRmFpbHVyZSAqLwogCQl9CiAKLQlzc2xfY2lwaGVyX2NvbGxlY3RfY2lwaGVycyhzc2xfbWV0aG9kLCBudW1fb2ZfY2lwaGVycywgZGlzYWJsZWRfbWFzaywKLQkJCQkgICBkaXNhYmxlZF9tMjU2LCBjb19saXN0LCAmaGVhZCwgJnRhaWwpOworCXNzbF9jaXBoZXJfY29sbGVjdF9jaXBoZXJzKHNzbF9tZXRob2QsIG51bV9vZl9jaXBoZXJzLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkX21rZXksIGRpc2FibGVkX2F1dGgsIGRpc2FibGVkX2VuYywgZGlzYWJsZWRfbWFjLCBkaXNhYmxlZF9zc2wsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgY29fbGlzdCwgJmhlYWQsICZ0YWlsKTsKKworCisJLyogTm93IGFycmFuZ2UgYWxsIGNpcGhlcnMgYnkgcHJlZmVyZW5jZTogKi8KKworCS8qIEV2ZXJ5dGhpbmcgZWxzZSBiZWluZyBlcXVhbCwgcHJlZmVyIGVwaGVtZXJhbCBFQ0RIIG92ZXIgb3RoZXIga2V5IGV4Y2hhbmdlIG1lY2hhbmlzbXMgKi8KKwlzc2xfY2lwaGVyX2FwcGx5X3J1bGUoMCwgU1NMX2tFRUNESCwgMCwgMCwgMCwgMCwgMCwgQ0lQSEVSX0FERCwgLTEsICZoZWFkLCAmdGFpbCk7CisJc3NsX2NpcGhlcl9hcHBseV9ydWxlKDAsIFNTTF9rRUVDREgsIDAsIDAsIDAsIDAsIDAsIENJUEhFUl9ERUwsIC0xLCAmaGVhZCwgJnRhaWwpOworCisJLyogQUVTIGlzIG91ciBwcmVmZXJyZWQgc3ltbWV0cmljIGNpcGhlciAqLworCXNzbF9jaXBoZXJfYXBwbHlfcnVsZSgwLCAwLCAwLCBTU0xfQUVTLCAwLCAwLCAwLCBDSVBIRVJfQURELCAtMSwgJmhlYWQsICZ0YWlsKTsKKworCS8qIFRlbXBvcmFyaWx5IGVuYWJsZSBldmVyeXRoaW5nIGVsc2UgZm9yIHNvcnRpbmcgKi8KKwlzc2xfY2lwaGVyX2FwcGx5X3J1bGUoMCwgMCwgMCwgMCwgMCwgMCwgMCwgQ0lQSEVSX0FERCwgLTEsICZoZWFkLCAmdGFpbCk7CisKKwkvKiBMb3cgcHJpb3JpdHkgZm9yIE1ENSAqLworCXNzbF9jaXBoZXJfYXBwbHlfcnVsZSgwLCAwLCAwLCAwLCBTU0xfTUQ1LCAwLCAwLCBDSVBIRVJfT1JELCAtMSwgJmhlYWQsICZ0YWlsKTsKKworCS8qIE1vdmUgYW5vbnltb3VzIGNpcGhlcnMgdG8gdGhlIGVuZC4gIFVzdWFsbHksIHRoZXNlIHdpbGwgcmVtYWluIGRpc2FibGVkLgorCSAqIChGb3IgYXBwbGljYXRpb25zIHRoYXQgYWxsb3cgdGhlbSwgdGhleSBhcmVuJ3QgdG9vIGJhZCwgYnV0IHdlIHByZWZlcgorCSAqIGF1dGhlbnRpY2F0ZWQgY2lwaGVycy4pICovCisJc3NsX2NpcGhlcl9hcHBseV9ydWxlKDAsIDAsIFNTTF9hTlVMTCwgMCwgMCwgMCwgMCwgQ0lQSEVSX09SRCwgLTEsICZoZWFkLCAmdGFpbCk7CisKKwkvKiBNb3ZlIGNpcGhlcnMgd2l0aG91dCBmb3J3YXJkIHNlY3JlY3kgdG8gdGhlIGVuZCAqLworCXNzbF9jaXBoZXJfYXBwbHlfcnVsZSgwLCAwLCBTU0xfYUVDREgsIDAsIDAsIDAsIDAsIENJUEhFUl9PUkQsIC0xLCAmaGVhZCwgJnRhaWwpOworCS8qIHNzbF9jaXBoZXJfYXBwbHlfcnVsZSgwLCAwLCBTU0xfYURILCAwLCAwLCAwLCAwLCBDSVBIRVJfT1JELCAtMSwgJmhlYWQsICZ0YWlsKTsgKi8KKwlzc2xfY2lwaGVyX2FwcGx5X3J1bGUoMCwgU1NMX2tSU0EsIDAsIDAsIDAsIDAsIDAsIENJUEhFUl9PUkQsIC0xLCAmaGVhZCwgJnRhaWwpOworCXNzbF9jaXBoZXJfYXBwbHlfcnVsZSgwLCBTU0xfa1BTSywgMCwwLCAwLCAwLCAwLCBDSVBIRVJfT1JELCAtMSwgJmhlYWQsICZ0YWlsKTsKKwlzc2xfY2lwaGVyX2FwcGx5X3J1bGUoMCwgU1NMX2tLUkI1LCAwLDAsIDAsIDAsIDAsIENJUEhFUl9PUkQsIC0xLCAmaGVhZCwgJnRhaWwpOworCisJLyogUkM0IGlzIHNvcnQtb2YgYnJva2VuIC0tIG1vdmUgdGhlIHRoZSBlbmQgKi8KKwlzc2xfY2lwaGVyX2FwcGx5X3J1bGUoMCwgMCwgMCwgU1NMX1JDNCwgMCwgMCwgMCwgQ0lQSEVSX09SRCwgLTEsICZoZWFkLCAmdGFpbCk7CisKKwkvKiBOb3cgc29ydCBieSBzeW1tZXRyaWMgZW5jcnlwdGlvbiBzdHJlbmd0aC4gIFRoZSBhYm92ZSBvcmRlcmluZyByZW1haW5zCisJICogaW4gZm9yY2Ugd2l0aGluIGVhY2ggY2xhc3MgKi8KKwlpZiAoIXNzbF9jaXBoZXJfc3RyZW5ndGhfc29ydCgmaGVhZCwgJnRhaWwpKQorCQl7CisJCU9QRU5TU0xfZnJlZShjb19saXN0KTsKKwkJcmV0dXJuIE5VTEw7CisJCX0KKworCS8qIE5vdyBkaXNhYmxlIGV2ZXJ5dGhpbmcgKG1haW50YWluaW5nIHRoZSBvcmRlcmluZyEpICovCisJc3NsX2NpcGhlcl9hcHBseV9ydWxlKDAsIDAsIDAsIDAsIDAsIDAsIDAsIENJUEhFUl9ERUwsIC0xLCAmaGVhZCwgJnRhaWwpOworCiAKIAkvKgogCSAqIFdlIGFsc28gbmVlZCBjaXBoZXIgYWxpYXNlcyBmb3Igc2VsZWN0aW5nIGJhc2VkIG9uIHRoZSBydWxlX3N0ci4KQEAgLTEwMTAsOCArMTM3MCw3IEBACiAJICovCiAJbnVtX29mX2dyb3VwX2FsaWFzZXMgPSBzaXplb2YoY2lwaGVyX2FsaWFzZXMpIC8gc2l6ZW9mKFNTTF9DSVBIRVIpOwogCW51bV9vZl9hbGlhc19tYXggPSBudW1fb2ZfY2lwaGVycyArIG51bV9vZl9ncm91cF9hbGlhc2VzICsgMTsKLQljYV9saXN0ID0KLQkJKFNTTF9DSVBIRVIgKiopT1BFTlNTTF9tYWxsb2Moc2l6ZW9mKFNTTF9DSVBIRVIgKikgKiBudW1fb2ZfYWxpYXNfbWF4KTsKKwljYV9saXN0ID0gT1BFTlNTTF9tYWxsb2Moc2l6ZW9mKFNTTF9DSVBIRVIgKikgKiBudW1fb2ZfYWxpYXNfbWF4KTsKIAlpZiAoY2FfbGlzdCA9PSBOVUxMKQogCQl7CiAJCU9QRU5TU0xfZnJlZShjb19saXN0KTsKQEAgLTEwMTksNyArMTM3OCw4IEBACiAJCXJldHVybihOVUxMKTsJLyogRmFpbHVyZSAqLwogCQl9CiAJc3NsX2NpcGhlcl9jb2xsZWN0X2FsaWFzZXMoY2FfbGlzdCwgbnVtX29mX2dyb3VwX2FsaWFzZXMsCi0JCQkJICAgKGRpc2FibGVkX21hc2sgJiBkaXNhYmxlZF9tMjU2KSwgaGVhZCk7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWRfbWtleSwgZGlzYWJsZWRfYXV0aCwgZGlzYWJsZWRfZW5jLAorCQkJCSAgIGRpc2FibGVkX21hYywgZGlzYWJsZWRfc3NsLCBoZWFkKTsKIAogCS8qCiAJICogSWYgdGhlIHJ1bGVfc3RyaW5nIGJlZ2lucyB3aXRoIERFRkFVTFQsIGFwcGx5IHRoZSBkZWZhdWx0IHJ1bGUKQEAgLTEwMzAsMjMgKzEzOTAsMjMgQEAKIAlpZiAoc3RybmNtcChydWxlX3N0ciwiREVGQVVMVCIsNykgPT0gMCkKIAkJewogCQlvayA9IHNzbF9jaXBoZXJfcHJvY2Vzc19ydWxlc3RyKFNTTF9ERUZBVUxUX0NJUEhFUl9MSVNULAotCQkJY29fbGlzdCwgJmhlYWQsICZ0YWlsLCBjYV9saXN0KTsKKwkJCSZoZWFkLCAmdGFpbCwgY2FfbGlzdCk7CiAJCXJ1bGVfcCArPSA3OwogCQlpZiAoKnJ1bGVfcCA9PSAnOicpCiAJCQlydWxlX3ArKzsKIAkJfQogCiAJaWYgKG9rICYmIChzdHJsZW4ocnVsZV9wKSA+IDApKQotCQlvayA9IHNzbF9jaXBoZXJfcHJvY2Vzc19ydWxlc3RyKHJ1bGVfcCwgY29fbGlzdCwgJmhlYWQsICZ0YWlsLAotCQkJCQkJY2FfbGlzdCk7CisJCW9rID0gc3NsX2NpcGhlcl9wcm9jZXNzX3J1bGVzdHIocnVsZV9wLCAmaGVhZCwgJnRhaWwsIGNhX2xpc3QpOwogCi0JT1BFTlNTTF9mcmVlKGNhX2xpc3QpOwkvKiBOb3QgbmVlZGVkIGFueW1vcmUgKi8KKwlPUEVOU1NMX2ZyZWUoKHZvaWQgKiljYV9saXN0KTsJLyogTm90IG5lZWRlZCBhbnltb3JlICovCiAKIAlpZiAoIW9rKQogCQl7CS8qIFJ1bGUgcHJvY2Vzc2luZyBmYWlsdXJlICovCiAJCU9QRU5TU0xfZnJlZShjb19saXN0KTsKIAkJcmV0dXJuKE5VTEwpOwogCQl9CisJCiAJLyoKIAkgKiBBbGxvY2F0ZSBuZXcgImNpcGhlcnN0YWNrIiBmb3IgdGhlIHJlc3VsdCwgcmV0dXJuIHdpdGggZXJyb3IKIAkgKiBpZiB3ZSBjYW5ub3QgZ2V0IG9uZS4KQEAgLTEwNjMsMTEgKzE0MjMsNyBAQAogCSAqLwogCWZvciAoY3VyciA9IGhlYWQ7IGN1cnIgIT0gTlVMTDsgY3VyciA9IGN1cnItPm5leHQpCiAJCXsKLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLQkJaWYgKGN1cnItPmFjdGl2ZSAmJiAoIUZJUFNfbW9kZSgpIHx8IGN1cnItPmNpcGhlci0+YWxnb19zdHJlbmd0aCAmIFNTTF9GSVBTKSkKLSNlbHNlCiAJCWlmIChjdXJyLT5hY3RpdmUpCi0jZW5kaWYKIAkJCXsKIAkJCXNrX1NTTF9DSVBIRVJfcHVzaChjaXBoZXJzdGFjaywgY3Vyci0+Y2lwaGVyKTsKICNpZmRlZiBDSVBIRVJfREVCVUcKQEAgLTExMDAsMTQgKzE0NTYsMTkgQEAKIAlpbnQgaXNfZXhwb3J0LHBrbCxrbDsKIAljb25zdCBjaGFyICp2ZXIsKmV4cF9zdHI7CiAJY29uc3QgY2hhciAqa3gsKmF1LCplbmMsKm1hYzsKLQl1bnNpZ25lZCBsb25nIGFsZyxhbGcyLGFsZ19zOworCXVuc2lnbmVkIGxvbmcgYWxnX21rZXksYWxnX2F1dGgsYWxnX2VuYyxhbGdfbWFjLGFsZ19zc2wsYWxnMixhbGdfczsKICNpZmRlZiBLU1NMX0RFQlVHCi0Jc3RhdGljIGNvbnN0IGNoYXIgKmZvcm1hdD0iJS0yM3MgJXMgS3g9JS04cyBBdT0lLTRzIEVuYz0lLTlzIE1hYz0lLTRzJXMgQUw9JWx4XG4iOworCXN0YXRpYyBjb25zdCBjaGFyICpmb3JtYXQ9IiUtMjNzICVzIEt4PSUtOHMgQXU9JS00cyBFbmM9JS05cyBNYWM9JS00cyVzIEFMPSVseC8lbHgvJWx4LyVseC8lbHhcbiI7CiAjZWxzZQogCXN0YXRpYyBjb25zdCBjaGFyICpmb3JtYXQ9IiUtMjNzICVzIEt4PSUtOHMgQXU9JS00cyBFbmM9JS05cyBNYWM9JS00cyVzXG4iOwogI2VuZGlmIC8qIEtTU0xfREVCVUcgKi8KIAotCWFsZz1jaXBoZXItPmFsZ29yaXRobXM7CisJYWxnX21rZXkgPSBjaXBoZXItPmFsZ29yaXRobV9ta2V5OworCWFsZ19hdXRoID0gY2lwaGVyLT5hbGdvcml0aG1fYXV0aDsKKwlhbGdfZW5jID0gY2lwaGVyLT5hbGdvcml0aG1fZW5jOworCWFsZ19tYWMgPSBjaXBoZXItPmFsZ29yaXRobV9tYWM7CisJYWxnX3NzbCA9IGNpcGhlci0+YWxnb3JpdGhtX3NzbDsKKwogCWFsZ19zPWNpcGhlci0+YWxnb19zdHJlbmd0aDsKIAlhbGcyPWNpcGhlci0+YWxnb3JpdGhtMjsKIApAQCAtMTExNiwxNCArMTQ3NywxNCBAQAogCWtsPVNTTF9DX0VYUE9SVF9LRVlMRU5HVEgoY2lwaGVyKTsKIAlleHBfc3RyPWlzX2V4cG9ydD8iIGV4cG9ydCI6IiI7CiAJCi0JaWYgKGFsZyAmIFNTTF9TU0xWMikKKwlpZiAoYWxnX3NzbCAmIFNTTF9TU0xWMikKIAkJdmVyPSJTU0x2MiI7Ci0JZWxzZSBpZiAoYWxnICYgU1NMX1NTTFYzKQorCWVsc2UgaWYgKGFsZ19zc2wgJiBTU0xfU1NMVjMpCiAJCXZlcj0iU1NMdjMiOwogCWVsc2UKIAkJdmVyPSJ1bmtub3duIjsKIAotCXN3aXRjaCAoYWxnJlNTTF9NS0VZX01BU0spCisJc3dpdGNoIChhbGdfbWtleSkKIAkJewogCWNhc2UgU1NMX2tSU0E6CiAJCWt4PWlzX2V4cG9ydD8ocGtsID09IDUxMiA/ICJSU0EoNTEyKSIgOiAiUlNBKDEwMjQpIik6IlJTQSI7CkBAIC0xMTM0LDI1ICsxNDk1LDI5IEBACiAJY2FzZSBTU0xfa0RIZDoKIAkJa3g9IkRIL0RTUyI7CiAJCWJyZWFrOwotICAgICAgICBjYXNlIFNTTF9rS1JCNTogICAgICAgICAvKiBWUlMgKi8KLSAgICAgICAgY2FzZSBTU0xfS1JCNTogICAgICAgICAgLyogVlJTICovCi0gICAgICAgICAgICBreD0iS1JCNSI7Ci0gICAgICAgICAgICBicmVhazsKLQljYXNlIFNTTF9rRlpBOgotCQlreD0iRm9ydGV6emEiOworICAgICAgICBjYXNlIFNTTF9rS1JCNToKKwkJa3g9IktSQjUiOwogCQlicmVhazsKIAljYXNlIFNTTF9rRURIOgogCQlreD1pc19leHBvcnQ/KHBrbCA9PSA1MTIgPyAiREgoNTEyKSIgOiAiREgoMTAyNCkiKToiREgiOwogCQlicmVhazsKLQljYXNlIFNTTF9rRUNESDoKLQljYXNlIFNTTF9rRUNESEU6Ci0JCWt4PWlzX2V4cG9ydD8iRUNESCg8PTE2MykiOiJFQ0RIIjsKKwljYXNlIFNTTF9rRUNESHI6CisJCWt4PSJFQ0RIL1JTQSI7CisJCWJyZWFrOworCWNhc2UgU1NMX2tFQ0RIZToKKwkJa3g9IkVDREgvRUNEU0EiOworCQlicmVhazsKKwljYXNlIFNTTF9rRUVDREg6CisJCWt4PSJFQ0RIIjsKKwkJYnJlYWs7CisJY2FzZSBTU0xfa1BTSzoKKwkJa3g9IlBTSyI7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWt4PSJ1bmtub3duIjsKIAkJfQogCi0Jc3dpdGNoIChhbGcmU1NMX0FVVEhfTUFTSykKKwlzd2l0Y2ggKGFsZ19hdXRoKQogCQl7CiAJY2FzZSBTU0xfYVJTQToKIAkJYXU9IlJTQSI7CkBAIC0xMTYzLDIzICsxNTI4LDI3IEBACiAJY2FzZSBTU0xfYURIOgogCQlhdT0iREgiOwogCQlicmVhazsKLSAgICAgICAgY2FzZSBTU0xfYUtSQjU6ICAgICAgICAgLyogVlJTICovCi0gICAgICAgIGNhc2UgU1NMX0tSQjU6ICAgICAgICAgIC8qIFZSUyAqLwotICAgICAgICAgICAgYXU9IktSQjUiOwotICAgICAgICAgICAgYnJlYWs7Ci0JY2FzZSBTU0xfYUZaQToKKyAgICAgICAgY2FzZSBTU0xfYUtSQjU6CisJCWF1PSJLUkI1IjsKKwkJYnJlYWs7CisgICAgICAgIGNhc2UgU1NMX2FFQ0RIOgorCQlhdT0iRUNESCI7CisJCWJyZWFrOwogCWNhc2UgU1NMX2FOVUxMOgogCQlhdT0iTm9uZSI7CiAJCWJyZWFrOwogCWNhc2UgU1NMX2FFQ0RTQToKIAkJYXU9IkVDRFNBIjsKIAkJYnJlYWs7CisJY2FzZSBTU0xfYVBTSzoKKwkJYXU9IlBTSyI7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWF1PSJ1bmtub3duIjsKIAkJYnJlYWs7CiAJCX0KIAotCXN3aXRjaCAoYWxnJlNTTF9FTkNfTUFTSykKKwlzd2l0Y2ggKGFsZ19lbmMpCiAJCXsKIAljYXNlIFNTTF9ERVM6CiAJCWVuYz0oaXNfZXhwb3J0ICYmIGtsID09IDUpPyJERVMoNDApIjoiREVTKDU2KSI7CkBAIC0xMTk3LDM5ICsxNTY2LDMwIEBACiAJY2FzZSBTU0xfSURFQToKIAkJZW5jPSJJREVBKDEyOCkiOwogCQlicmVhazsKLQljYXNlIFNTTF9lRlpBOgotCQllbmM9IkZvcnRlenphIjsKLQkJYnJlYWs7CiAJY2FzZSBTU0xfZU5VTEw6CiAJCWVuYz0iTm9uZSI7CiAJCWJyZWFrOwotCWNhc2UgU1NMX0FFUzoKLQkJc3dpdGNoKGNpcGhlci0+c3RyZW5ndGhfYml0cykKLQkJCXsKLQkJY2FzZSAxMjg6IGVuYz0iQUVTKDEyOCkiOyBicmVhazsKLQkJY2FzZSAxOTI6IGVuYz0iQUVTKDE5MikiOyBicmVhazsKLQkJY2FzZSAyNTY6IGVuYz0iQUVTKDI1NikiOyBicmVhazsKLQkJZGVmYXVsdDogZW5jPSJBRVMoPyIiPyIiPykiOyBicmVhazsKLQkJCX0KKwljYXNlIFNTTF9BRVMxMjg6CisJCWVuYz0iQUVTKDEyOCkiOwogCQlicmVhazsKLQljYXNlIFNTTF9DQU1FTExJQToKLQkJc3dpdGNoKGNpcGhlci0+c3RyZW5ndGhfYml0cykKLQkJCXsKLQkJY2FzZSAxMjg6IGVuYz0iQ2FtZWxsaWEoMTI4KSI7IGJyZWFrOwotCQljYXNlIDI1NjogZW5jPSJDYW1lbGxpYSgyNTYpIjsgYnJlYWs7Ci0JCWRlZmF1bHQ6IGVuYz0iQ2FtZWxsaWEoPyIiPyIiPykiOyBicmVhazsKLQkJCX0KKwljYXNlIFNTTF9BRVMyNTY6CisJCWVuYz0iQUVTKDI1NikiOworCQlicmVhazsKKwljYXNlIFNTTF9DQU1FTExJQTEyODoKKwkJZW5jPSJDYW1lbGxpYSgxMjgpIjsKKwkJYnJlYWs7CisJY2FzZSBTU0xfQ0FNRUxMSUEyNTY6CisJCWVuYz0iQ2FtZWxsaWEoMjU2KSI7CiAJCWJyZWFrOwogCWNhc2UgU1NMX1NFRUQ6CiAJCWVuYz0iU0VFRCgxMjgpIjsKIAkJYnJlYWs7Ci0KIAlkZWZhdWx0OgogCQllbmM9InVua25vd24iOwogCQlicmVhazsKIAkJfQogCi0Jc3dpdGNoIChhbGcmU1NMX01BQ19NQVNLKQorCXN3aXRjaCAoYWxnX21hYykKIAkJewogCWNhc2UgU1NMX01ENToKIAkJbWFjPSJNRDUiOwpAQCAtMTI1Miw3ICsxNjEyLDcgQEAKIAkJcmV0dXJuKCJCdWZmZXIgdG9vIHNtYWxsIik7CiAKICNpZmRlZiBLU1NMX0RFQlVHCi0JQklPX3NucHJpbnRmKGJ1ZixsZW4sZm9ybWF0LGNpcGhlci0+bmFtZSx2ZXIsa3gsYXUsZW5jLG1hYyxleHBfc3RyLGFsZyk7CisJQklPX3NucHJpbnRmKGJ1ZixsZW4sZm9ybWF0LGNpcGhlci0+bmFtZSx2ZXIsa3gsYXUsZW5jLG1hYyxleHBfc3RyLGFsZ19ta2V5LGFsZ19hdXRoLGFsZ19lbmMsYWxnX21hYyxhbGdfc3NsKTsKICNlbHNlCiAJQklPX3NucHJpbnRmKGJ1ZixsZW4sZm9ybWF0LGNpcGhlci0+bmFtZSx2ZXIsa3gsYXUsZW5jLG1hYyxleHBfc3RyKTsKICNlbmRpZiAvKiBLU1NMX0RFQlVHICovCmRpZmYgLS1naXQgYS9zc2wvc3NsX2Vyci5jIGIvc3NsL3NzbF9lcnIuYwppbmRleCA3ZWI1MjAyLi4wZWVkNDY0IDEwMDY0NAotLS0gYS9zc2wvc3NsX2Vyci5jCisrKyBiL3NzbC9zc2xfZXJyLmMKQEAgLTEsNiArMSw2IEBACiAvKiBzc2wvc3NsX2Vyci5jICovCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDggVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwOSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQxLDYgKzE0MSw3IEBACiB7RVJSX0ZVTkMoU1NMX0ZfU1NMM19DT05ORUNUKSwJIlNTTDNfQ09OTkVDVCJ9LAoge0VSUl9GVU5DKFNTTF9GX1NTTDNfQ1RSTCksCSJTU0wzX0NUUkwifSwKIHtFUlJfRlVOQyhTU0xfRl9TU0wzX0NUWF9DVFJMKSwJIlNTTDNfQ1RYX0NUUkwifSwKK3tFUlJfRlVOQyhTU0xfRl9TU0wzX0RJR0VTVF9DQUNIRURfUkVDT1JEUyksCSJTU0wzX0RJR0VTVF9DQUNIRURfUkVDT1JEUyJ9LAoge0VSUl9GVU5DKFNTTF9GX1NTTDNfRE9fQ0hBTkdFX0NJUEhFUl9TUEVDKSwJIlNTTDNfRE9fQ0hBTkdFX0NJUEhFUl9TUEVDIn0sCiB7RVJSX0ZVTkMoU1NMX0ZfU1NMM19FTkMpLAkiU1NMM19FTkMifSwKIHtFUlJfRlVOQyhTU0xfRl9TU0wzX0dFTkVSQVRFX0tFWV9CTE9DSyksCSJTU0wzX0dFTkVSQVRFX0tFWV9CTE9DSyJ9LApAQCAtMTU4LDYgKzE1OSw3IEBACiB7RVJSX0ZVTkMoU1NMX0ZfU1NMM19HRVRfU0VSVkVSX0NFUlRJRklDQVRFKSwJIlNTTDNfR0VUX1NFUlZFUl9DRVJUSUZJQ0FURSJ9LAoge0VSUl9GVU5DKFNTTF9GX1NTTDNfR0VUX1NFUlZFUl9ET05FKSwJIlNTTDNfR0VUX1NFUlZFUl9ET05FIn0sCiB7RVJSX0ZVTkMoU1NMX0ZfU1NMM19HRVRfU0VSVkVSX0hFTExPKSwJIlNTTDNfR0VUX1NFUlZFUl9IRUxMTyJ9LAore0VSUl9GVU5DKFNTTF9GX1NTTDNfSEFORFNIQUtFX01BQyksCSJzc2wzX2hhbmRzaGFrZV9tYWMifSwKIHtFUlJfRlVOQyhTU0xfRl9TU0wzX05FV19TRVNTSU9OX1RJQ0tFVCksCSJTU0wzX05FV19TRVNTSU9OX1RJQ0tFVCJ9LAoge0VSUl9GVU5DKFNTTF9GX1NTTDNfT1VUUFVUX0NFUlRfQ0hBSU4pLAkiU1NMM19PVVRQVVRfQ0VSVF9DSEFJTiJ9LAoge0VSUl9GVU5DKFNTTF9GX1NTTDNfUEVFSyksCSJTU0wzX1BFRUsifSwKQEAgLTE3MCw4ICsxNzIsOSBAQAoge0VSUl9GVU5DKFNTTF9GX1NTTDNfU0VORF9TRVJWRVJfQ0VSVElGSUNBVEUpLAkiU1NMM19TRU5EX1NFUlZFUl9DRVJUSUZJQ0FURSJ9LAoge0VSUl9GVU5DKFNTTF9GX1NTTDNfU0VORF9TRVJWRVJfSEVMTE8pLAkiU1NMM19TRU5EX1NFUlZFUl9IRUxMTyJ9LAoge0VSUl9GVU5DKFNTTF9GX1NTTDNfU0VORF9TRVJWRVJfS0VZX0VYQ0hBTkdFKSwJIlNTTDNfU0VORF9TRVJWRVJfS0VZX0VYQ0hBTkdFIn0sCi17RVJSX0ZVTkMoU1NMX0ZfU1NMM19TRVRVUF9CVUZGRVJTKSwJIlNTTDNfU0VUVVBfQlVGRkVSUyJ9LAoge0VSUl9GVU5DKFNTTF9GX1NTTDNfU0VUVVBfS0VZX0JMT0NLKSwJIlNTTDNfU0VUVVBfS0VZX0JMT0NLIn0sCit7RVJSX0ZVTkMoU1NMX0ZfU1NMM19TRVRVUF9SRUFEX0JVRkZFUiksCSJTU0wzX1NFVFVQX1JFQURfQlVGRkVSIn0sCit7RVJSX0ZVTkMoU1NMX0ZfU1NMM19TRVRVUF9XUklURV9CVUZGRVIpLAkiU1NMM19TRVRVUF9XUklURV9CVUZGRVIifSwKIHtFUlJfRlVOQyhTU0xfRl9TU0wzX1dSSVRFX0JZVEVTKSwJIlNTTDNfV1JJVEVfQllURVMifSwKIHtFUlJfRlVOQyhTU0xfRl9TU0wzX1dSSVRFX1BFTkRJTkcpLAkiU1NMM19XUklURV9QRU5ESU5HIn0sCiB7RVJSX0ZVTkMoU1NMX0ZfU1NMX0FERF9DTElFTlRIRUxMT19SRU5FR09USUFURV9FWFQpLAkiU1NMX0FERF9DTElFTlRIRUxMT19SRU5FR09USUFURV9FWFQifSwKQEAgLTE4OCw2ICsxOTEsNyBAQAoge0VSUl9GVU5DKFNTTF9GX1NTTF9DRVJUX05FVyksCSJTU0xfQ0VSVF9ORVcifSwKIHtFUlJfRlVOQyhTU0xfRl9TU0xfQ0hFQ0tfUFJJVkFURV9LRVkpLAkiU1NMX2NoZWNrX3ByaXZhdGVfa2V5In0sCiB7RVJSX0ZVTkMoU1NMX0ZfU1NMX0NIRUNLX1NFUlZFUkhFTExPX1RMU0VYVCksCSJTU0xfQ0hFQ0tfU0VSVkVSSEVMTE9fVExTRVhUIn0sCit7RVJSX0ZVTkMoU1NMX0ZfU1NMX0NIRUNLX1NSVlJfRUNDX0NFUlRfQU5EX0FMRyksCSJTU0xfQ0hFQ0tfU1JWUl9FQ0NfQ0VSVF9BTkRfQUxHIn0sCiB7RVJSX0ZVTkMoU1NMX0ZfU1NMX0NJUEhFUl9QUk9DRVNTX1JVTEVTVFIpLAkiU1NMX0NJUEhFUl9QUk9DRVNTX1JVTEVTVFIifSwKIHtFUlJfRlVOQyhTU0xfRl9TU0xfQ0lQSEVSX1NUUkVOR1RIX1NPUlQpLAkiU1NMX0NJUEhFUl9TVFJFTkdUSF9TT1JUIn0sCiB7RVJSX0ZVTkMoU1NMX0ZfU1NMX0NMRUFSKSwJIlNTTF9jbGVhciJ9LApAQCAtMjA5LDYgKzIxMyw3IEBACiB7RVJSX0ZVTkMoU1NMX0ZfU1NMX0NUWF9VU0VfUFJJVkFURUtFWSksCSJTU0xfQ1RYX3VzZV9Qcml2YXRlS2V5In0sCiB7RVJSX0ZVTkMoU1NMX0ZfU1NMX0NUWF9VU0VfUFJJVkFURUtFWV9BU04xKSwJIlNTTF9DVFhfdXNlX1ByaXZhdGVLZXlfQVNOMSJ9LAoge0VSUl9GVU5DKFNTTF9GX1NTTF9DVFhfVVNFX1BSSVZBVEVLRVlfRklMRSksCSJTU0xfQ1RYX3VzZV9Qcml2YXRlS2V5X2ZpbGUifSwKK3tFUlJfRlVOQyhTU0xfRl9TU0xfQ1RYX1VTRV9QU0tfSURFTlRJVFlfSElOVCksCSJTU0xfQ1RYX3VzZV9wc2tfaWRlbnRpdHlfaGludCJ9LAoge0VSUl9GVU5DKFNTTF9GX1NTTF9DVFhfVVNFX1JTQVBSSVZBVEVLRVkpLAkiU1NMX0NUWF91c2VfUlNBUHJpdmF0ZUtleSJ9LAoge0VSUl9GVU5DKFNTTF9GX1NTTF9DVFhfVVNFX1JTQVBSSVZBVEVLRVlfQVNOMSksCSJTU0xfQ1RYX3VzZV9SU0FQcml2YXRlS2V5X0FTTjEifSwKIHtFUlJfRlVOQyhTU0xfRl9TU0xfQ1RYX1VTRV9SU0FQUklWQVRFS0VZX0ZJTEUpLAkiU1NMX0NUWF91c2VfUlNBUHJpdmF0ZUtleV9maWxlIn0sCkBAIC0yNDEsNiArMjQ2LDcgQEAKIHtFUlJfRlVOQyhTU0xfRl9TU0xfU0VUX1JGRCksCSJTU0xfc2V0X3JmZCJ9LAoge0VSUl9GVU5DKFNTTF9GX1NTTF9TRVRfU0VTU0lPTiksCSJTU0xfc2V0X3Nlc3Npb24ifSwKIHtFUlJfRlVOQyhTU0xfRl9TU0xfU0VUX1NFU1NJT05fSURfQ09OVEVYVCksCSJTU0xfc2V0X3Nlc3Npb25faWRfY29udGV4dCJ9LAore0VSUl9GVU5DKFNTTF9GX1NTTF9TRVRfU0VTU0lPTl9USUNLRVRfRVhUKSwJIlNTTF9zZXRfc2Vzc2lvbl90aWNrZXRfZXh0In0sCiB7RVJSX0ZVTkMoU1NMX0ZfU1NMX1NFVF9UUlVTVCksCSJTU0xfc2V0X3RydXN0In0sCiB7RVJSX0ZVTkMoU1NMX0ZfU1NMX1NFVF9XRkQpLAkiU1NMX3NldF93ZmQifSwKIHtFUlJfRlVOQyhTU0xfRl9TU0xfU0hVVERPV04pLAkiU1NMX3NodXRkb3duIn0sCkBAIC0yNTMsMTMgKzI1OSwxOSBAQAoge0VSUl9GVU5DKFNTTF9GX1NTTF9VU0VfUFJJVkFURUtFWSksCSJTU0xfdXNlX1ByaXZhdGVLZXkifSwKIHtFUlJfRlVOQyhTU0xfRl9TU0xfVVNFX1BSSVZBVEVLRVlfQVNOMSksCSJTU0xfdXNlX1ByaXZhdGVLZXlfQVNOMSJ9LAoge0VSUl9GVU5DKFNTTF9GX1NTTF9VU0VfUFJJVkFURUtFWV9GSUxFKSwJIlNTTF91c2VfUHJpdmF0ZUtleV9maWxlIn0sCit7RVJSX0ZVTkMoU1NMX0ZfU1NMX1VTRV9QU0tfSURFTlRJVFlfSElOVCksCSJTU0xfdXNlX3Bza19pZGVudGl0eV9oaW50In0sCiB7RVJSX0ZVTkMoU1NMX0ZfU1NMX1VTRV9SU0FQUklWQVRFS0VZKSwJIlNTTF91c2VfUlNBUHJpdmF0ZUtleSJ9LAoge0VSUl9GVU5DKFNTTF9GX1NTTF9VU0VfUlNBUFJJVkFURUtFWV9BU04xKSwJIlNTTF91c2VfUlNBUHJpdmF0ZUtleV9BU04xIn0sCiB7RVJSX0ZVTkMoU1NMX0ZfU1NMX1VTRV9SU0FQUklWQVRFS0VZX0ZJTEUpLAkiU1NMX3VzZV9SU0FQcml2YXRlS2V5X2ZpbGUifSwKIHtFUlJfRlVOQyhTU0xfRl9TU0xfVkVSSUZZX0NFUlRfQ0hBSU4pLAkiU1NMX1ZFUklGWV9DRVJUX0NIQUlOIn0sCiB7RVJSX0ZVTkMoU1NMX0ZfU1NMX1dSSVRFKSwJIlNTTF93cml0ZSJ9LAore0VSUl9GVU5DKFNTTF9GX1RMUzFfQ0VSVF9WRVJJRllfTUFDKSwJInRsczFfY2VydF92ZXJpZnlfbWFjIn0sCiB7RVJSX0ZVTkMoU1NMX0ZfVExTMV9DSEFOR0VfQ0lQSEVSX1NUQVRFKSwJIlRMUzFfQ0hBTkdFX0NJUEhFUl9TVEFURSJ9LAore0VSUl9GVU5DKFNTTF9GX1RMUzFfQ0hFQ0tfU0VSVkVSSEVMTE9fVExTRVhUKSwJIlRMUzFfQ0hFQ0tfU0VSVkVSSEVMTE9fVExTRVhUIn0sCiB7RVJSX0ZVTkMoU1NMX0ZfVExTMV9FTkMpLAkiVExTMV9FTkMifSwKK3tFUlJfRlVOQyhTU0xfRl9UTFMxX1BSRVBBUkVfQ0xJRU5USEVMTE9fVExTRVhUKSwJIlRMUzFfUFJFUEFSRV9DTElFTlRIRUxMT19UTFNFWFQifSwKK3tFUlJfRlVOQyhTU0xfRl9UTFMxX1BSRVBBUkVfU0VSVkVSSEVMTE9fVExTRVhUKSwJIlRMUzFfUFJFUEFSRV9TRVJWRVJIRUxMT19UTFNFWFQifSwKK3tFUlJfRlVOQyhTU0xfRl9UTFMxX1BSRiksCSJ0bHMxX3ByZiJ9LAoge0VSUl9GVU5DKFNTTF9GX1RMUzFfU0VUVVBfS0VZX0JMT0NLKSwJIlRMUzFfU0VUVVBfS0VZX0JMT0NLIn0sCiB7RVJSX0ZVTkMoU1NMX0ZfV1JJVEVfUEVORElORyksCSJXUklURV9QRU5ESU5HIn0sCiB7MCxOVUxMfQpAQCAtMjgzLDEyICsyOTUsMTUgQEAKIHtFUlJfUkVBU09OKFNTTF9SX0JBRF9FQ0NfQ0VSVCkgICAgICAgICAgLCJiYWQgZWNjIGNlcnQifSwKIHtFUlJfUkVBU09OKFNTTF9SX0JBRF9FQ0RTQV9TSUdOQVRVUkUpICAgLCJiYWQgZWNkc2Egc2lnbmF0dXJlIn0sCiB7RVJSX1JFQVNPTihTU0xfUl9CQURfRUNQT0lOVCkgICAgICAgICAgICwiYmFkIGVjcG9pbnQifSwKK3tFUlJfUkVBU09OKFNTTF9SX0JBRF9IQU5EU0hBS0VfTEVOR1RIKSAgLCJiYWQgaGFuZHNoYWtlIGxlbmd0aCJ9LAoge0VSUl9SRUFTT04oU1NMX1JfQkFEX0hFTExPX1JFUVVFU1QpICAgICAsImJhZCBoZWxsbyByZXF1ZXN0In0sCiB7RVJSX1JFQVNPTihTU0xfUl9CQURfTEVOR1RIKSAgICAgICAgICAgICwiYmFkIGxlbmd0aCJ9LAoge0VSUl9SRUFTT04oU1NMX1JfQkFEX01BQ19ERUNPREUpICAgICAgICAsImJhZCBtYWMgZGVjb2RlIn0sCit7RVJSX1JFQVNPTihTU0xfUl9CQURfTUFDX0xFTkdUSCkgICAgICAgICwiYmFkIG1hYyBsZW5ndGgifSwKIHtFUlJfUkVBU09OKFNTTF9SX0JBRF9NRVNTQUdFX1RZUEUpICAgICAgLCJiYWQgbWVzc2FnZSB0eXBlIn0sCiB7RVJSX1JFQVNPTihTU0xfUl9CQURfUEFDS0VUX0xFTkdUSCkgICAgICwiYmFkIHBhY2tldCBsZW5ndGgifSwKIHtFUlJfUkVBU09OKFNTTF9SX0JBRF9QUk9UT0NPTF9WRVJTSU9OX05VTUJFUiksImJhZCBwcm90b2NvbCB2ZXJzaW9uIG51bWJlciJ9LAore0VSUl9SRUFTT04oU1NMX1JfQkFEX1BTS19JREVOVElUWV9ISU5UX0xFTkdUSCksImJhZCBwc2sgaWRlbnRpdHkgaGludCBsZW5ndGgifSwKIHtFUlJfUkVBU09OKFNTTF9SX0JBRF9SRVNQT05TRV9BUkdVTUVOVCkgLCJiYWQgcmVzcG9uc2UgYXJndW1lbnQifSwKIHtFUlJfUkVBU09OKFNTTF9SX0JBRF9SU0FfREVDUllQVCkgICAgICAgLCJiYWQgcnNhIGRlY3J5cHQifSwKIHtFUlJfUkVBU09OKFNTTF9SX0JBRF9SU0FfRU5DUllQVCkgICAgICAgLCJiYWQgcnNhIGVuY3J5cHQifSwKQEAgLTMxNCw2ICszMjksNyBAQAoge0VSUl9SRUFTT04oU1NMX1JfQ0lQSEVSX1RBQkxFX1NSQ19FUlJPUiksImNpcGhlciB0YWJsZSBzcmMgZXJyb3IifSwKIHtFUlJfUkVBU09OKFNTTF9SX0NMSUVOVEhFTExPX1RMU0VYVCkgICAgLCJjbGllbnRoZWxsbyB0bHNleHQifSwKIHtFUlJfUkVBU09OKFNTTF9SX0NPTVBSRVNTRURfTEVOR1RIX1RPT19MT05HKSwiY29tcHJlc3NlZCBsZW5ndGggdG9vIGxvbmcifSwKK3tFUlJfUkVBU09OKFNTTF9SX0NPTVBSRVNTSU9OX0RJU0FCTEVEKSAgLCJjb21wcmVzc2lvbiBkaXNhYmxlZCJ9LAoge0VSUl9SRUFTT04oU1NMX1JfQ09NUFJFU1NJT05fRkFJTFVSRSkgICAsImNvbXByZXNzaW9uIGZhaWx1cmUifSwKIHtFUlJfUkVBU09OKFNTTF9SX0NPTVBSRVNTSU9OX0lEX05PVF9XSVRISU5fUFJJVkFURV9SQU5HRSksImNvbXByZXNzaW9uIGlkIG5vdCB3aXRoaW4gcHJpdmF0ZSByYW5nZSJ9LAoge0VSUl9SRUFTT04oU1NMX1JfQ09NUFJFU1NJT05fTElCUkFSWV9FUlJPUiksImNvbXByZXNzaW9uIGxpYnJhcnkgZXJyb3IifSwKQEAgLTMyOCw2ICszNDQsMTAgQEAKIHtFUlJfUkVBU09OKFNTTF9SX0RJR0VTVF9DSEVDS19GQUlMRUQpICAgLCJkaWdlc3QgY2hlY2sgZmFpbGVkIn0sCiB7RVJSX1JFQVNPTihTU0xfUl9EVExTX01FU1NBR0VfVE9PX0JJRykgICwiZHRscyBtZXNzYWdlIHRvbyBiaWcifSwKIHtFUlJfUkVBU09OKFNTTF9SX0RVUExJQ0FURV9DT01QUkVTU0lPTl9JRCksImR1cGxpY2F0ZSBjb21wcmVzc2lvbiBpZCJ9LAore0VSUl9SRUFTT04oU1NMX1JfRUNDX0NFUlRfTk9UX0ZPUl9LRVlfQUdSRUVNRU5UKSwiZWNjIGNlcnQgbm90IGZvciBrZXkgYWdyZWVtZW50In0sCit7RVJSX1JFQVNPTihTU0xfUl9FQ0NfQ0VSVF9OT1RfRk9SX1NJR05JTkcpLCJlY2MgY2VydCBub3QgZm9yIHNpZ25pbmcifSwKK3tFUlJfUkVBU09OKFNTTF9SX0VDQ19DRVJUX1NIT1VMRF9IQVZFX1JTQV9TSUdOQVRVUkUpLCJlY2MgY2VydCBzaG91bGQgaGF2ZSByc2Egc2lnbmF0dXJlIn0sCit7RVJSX1JFQVNPTihTU0xfUl9FQ0NfQ0VSVF9TSE9VTERfSEFWRV9TSEExX1NJR05BVFVSRSksImVjYyBjZXJ0IHNob3VsZCBoYXZlIHNoYTEgc2lnbmF0dXJlIn0sCiB7RVJSX1JFQVNPTihTU0xfUl9FQ0dST1VQX1RPT19MQVJHRV9GT1JfQ0lQSEVSKSwiZWNncm91cCB0b28gbGFyZ2UgZm9yIGNpcGhlciJ9LAoge0VSUl9SRUFTT04oU1NMX1JfRU5DUllQVEVEX0xFTkdUSF9UT09fTE9ORyksImVuY3J5cHRlZCBsZW5ndGggdG9vIGxvbmcifSwKIHtFUlJfUkVBU09OKFNTTF9SX0VSUk9SX0dFTkVSQVRJTkdfVE1QX1JTQV9LRVkpLCJlcnJvciBnZW5lcmF0aW5nIHRtcCByc2Ega2V5In0sCkBAIC0zMzgsOCArMzU4LDEwIEBACiB7RVJSX1JFQVNPTihTU0xfUl9IVFRQU19QUk9YWV9SRVFVRVNUKSAgICwiaHR0cHMgcHJveHkgcmVxdWVzdCJ9LAoge0VSUl9SRUFTT04oU1NMX1JfSFRUUF9SRVFVRVNUKSAgICAgICAgICAsImh0dHAgcmVxdWVzdCJ9LAoge0VSUl9SRUFTT04oU1NMX1JfSUxMRUdBTF9QQURESU5HKSAgICAgICAsImlsbGVnYWwgcGFkZGluZyJ9LAore0VSUl9SRUFTT04oU1NMX1JfSU5DT05TSVNURU5UX0NPTVBSRVNTSU9OKSwiaW5jb25zaXN0ZW50IGNvbXByZXNzaW9uIn0sCiB7RVJSX1JFQVNPTihTU0xfUl9JTlZBTElEX0NIQUxMRU5HRV9MRU5HVEgpLCJpbnZhbGlkIGNoYWxsZW5nZSBsZW5ndGgifSwKIHtFUlJfUkVBU09OKFNTTF9SX0lOVkFMSURfQ09NTUFORCkgICAgICAgLCJpbnZhbGlkIGNvbW1hbmQifSwKK3tFUlJfUkVBU09OKFNTTF9SX0lOVkFMSURfQ09NUFJFU1NJT05fQUxHT1JJVEhNKSwiaW52YWxpZCBjb21wcmVzc2lvbiBhbGdvcml0aG0ifSwKIHtFUlJfUkVBU09OKFNTTF9SX0lOVkFMSURfUFVSUE9TRSkgICAgICAgLCJpbnZhbGlkIHB1cnBvc2UifSwKIHtFUlJfUkVBU09OKFNTTF9SX0lOVkFMSURfU1RBVFVTX1JFU1BPTlNFKSwiaW52YWxpZCBzdGF0dXMgcmVzcG9uc2UifSwKIHtFUlJfUkVBU09OKFNTTF9SX0lOVkFMSURfVElDS0VUX0tFWVNfTEVOR1RIKSwiaW52YWxpZCB0aWNrZXQga2V5cyBsZW5ndGgifSwKQEAgLTM4OSwxOCArNDExLDIyIEBACiB7RVJSX1JFQVNPTihTU0xfUl9OT19DTElFTlRfQ0VSVF9NRVRIT0QpICwibm8gY2xpZW50IGNlcnQgbWV0aG9kIn0sCiB7RVJSX1JFQVNPTihTU0xfUl9OT19DTElFTlRfQ0VSVF9SRUNFSVZFRCksIm5vIGNsaWVudCBjZXJ0IHJlY2VpdmVkIn0sCiB7RVJSX1JFQVNPTihTU0xfUl9OT19DT01QUkVTU0lPTl9TUEVDSUZJRUQpLCJubyBjb21wcmVzc2lvbiBzcGVjaWZpZWQifSwKK3tFUlJfUkVBU09OKFNTTF9SX05PX0dPU1RfQ0VSVElGSUNBVEVfU0VOVF9CWV9QRUVSKSwiUGVlciBoYXZlbid0IHNlbnQgR09TVCBjZXJ0aWZpY2F0ZSwgcmVxdWlyZWQgZm9yIHNlbGVjdGVkIGNpcGhlcnN1aXRlIn0sCiB7RVJSX1JFQVNPTihTU0xfUl9OT19NRVRIT0RfU1BFQ0lGSUVEKSAgICwibm8gbWV0aG9kIHNwZWNpZmllZCJ9LAoge0VSUl9SRUFTT04oU1NMX1JfTk9fUFJJVkFURUtFWSkgICAgICAgICAsIm5vIHByaXZhdGVrZXkifSwKIHtFUlJfUkVBU09OKFNTTF9SX05PX1BSSVZBVEVfS0VZX0FTU0lHTkVEKSwibm8gcHJpdmF0ZSBrZXkgYXNzaWduZWQifSwKIHtFUlJfUkVBU09OKFNTTF9SX05PX1BST1RPQ09MU19BVkFJTEFCTEUpLCJubyBwcm90b2NvbHMgYXZhaWxhYmxlIn0sCiB7RVJSX1JFQVNPTihTU0xfUl9OT19QVUJMSUNLRVkpICAgICAgICAgICwibm8gcHVibGlja2V5In0sCiB7RVJSX1JFQVNPTihTU0xfUl9OT19SRU5FR09USUFUSU9OKSAgICAgICwibm8gcmVuZWdvdGlhdGlvbiJ9LAore0VSUl9SRUFTT04oU1NMX1JfTk9fUkVRVUlSRURfRElHRVNUKSAgICAsImRpZ2VzdCByZXF1cmVkIGZvciBoYW5kc2hha2UgaXNuJ3QgY29tcHV0ZWQifSwKIHtFUlJfUkVBU09OKFNTTF9SX05PX1NIQVJFRF9DSVBIRVIpICAgICAgLCJubyBzaGFyZWQgY2lwaGVyIn0sCiB7RVJSX1JFQVNPTihTU0xfUl9OT19WRVJJRllfQ0FMTEJBQ0spICAgICwibm8gdmVyaWZ5IGNhbGxiYWNrIn0sCiB7RVJSX1JFQVNPTihTU0xfUl9OVUxMX1NTTF9DVFgpICAgICAgICAgICwibnVsbCBzc2wgY3R4In0sCiB7RVJSX1JFQVNPTihTU0xfUl9OVUxMX1NTTF9NRVRIT0RfUEFTU0VEKSwibnVsbCBzc2wgbWV0aG9kIHBhc3NlZCJ9LAoge0VSUl9SRUFTT04oU1NMX1JfT0xEX1NFU1NJT05fQ0lQSEVSX05PVF9SRVRVUk5FRCksIm9sZCBzZXNzaW9uIGNpcGhlciBub3QgcmV0dXJuZWQifSwKK3tFUlJfUkVBU09OKFNTTF9SX09MRF9TRVNTSU9OX0NPTVBSRVNTSU9OX0FMR09SSVRITV9OT1RfUkVUVVJORUQpLCJvbGQgc2Vzc2lvbiBjb21wcmVzc2lvbiBhbGdvcml0aG0gbm90IHJldHVybmVkIn0sCiB7RVJSX1JFQVNPTihTU0xfUl9PTkxZX1RMU19BTExPV0VEX0lOX0ZJUFNfTU9ERSksIm9ubHkgdGxzIGFsbG93ZWQgaW4gZmlwcyBtb2RlIn0sCit7RVJSX1JFQVNPTihTU0xfUl9PUEFRVUVfUFJGX0lOUFVUX1RPT19MT05HKSwib3BhcXVlIFBSRiBpbnB1dCB0b28gbG9uZyJ9LAoge0VSUl9SRUFTT04oU1NMX1JfUEFDS0VUX0xFTkdUSF9UT09fTE9ORyksInBhY2tldCBsZW5ndGggdG9vIGxvbmcifSwKIHtFUlJfUkVBU09OKFNTTF9SX1BBUlNFX1RMU0VYVCkgICAgICAgICAgLCJwYXJzZSB0bHNleHQifSwKIHtFUlJfUkVBU09OKFNTTF9SX1BBVEhfVE9PX0xPTkcpICAgICAgICAgLCJwYXRoIHRvbyBsb25nIn0sCkBAIC00MTMsNiArNDM5LDkgQEAKIHtFUlJfUkVBU09OKFNTTF9SX1BSRV9NQUNfTEVOR1RIX1RPT19MT05HKSwicHJlIG1hYyBsZW5ndGggdG9vIGxvbmcifSwKIHtFUlJfUkVBU09OKFNTTF9SX1BST0JMRU1TX01BUFBJTkdfQ0lQSEVSX0ZVTkNUSU9OUyksInByb2JsZW1zIG1hcHBpbmcgY2lwaGVyIGZ1bmN0aW9ucyJ9LAoge0VSUl9SRUFTT04oU1NMX1JfUFJPVE9DT0xfSVNfU0hVVERPV04pICAsInByb3RvY29sIGlzIHNodXRkb3duIn0sCit7RVJSX1JFQVNPTihTU0xfUl9QU0tfSURFTlRJVFlfTk9UX0ZPVU5EKSwicHNrIGlkZW50aXR5IG5vdCBmb3VuZCJ9LAore0VSUl9SRUFTT04oU1NMX1JfUFNLX05PX0NMSUVOVF9DQikgICAgICAsInBzayBubyBjbGllbnQgY2IifSwKK3tFUlJfUkVBU09OKFNTTF9SX1BTS19OT19TRVJWRVJfQ0IpICAgICAgLCJwc2sgbm8gc2VydmVyIGNiIn0sCiB7RVJSX1JFQVNPTihTU0xfUl9QVUJMSUNfS0VZX0VOQ1JZUFRfRVJST1IpLCJwdWJsaWMga2V5IGVuY3J5cHQgZXJyb3IifSwKIHtFUlJfUkVBU09OKFNTTF9SX1BVQkxJQ19LRVlfSVNfTk9UX1JTQSkgLCJwdWJsaWMga2V5IGlzIG5vdCByc2EifSwKIHtFUlJfUkVBU09OKFNTTF9SX1BVQkxJQ19LRVlfTk9UX1JTQSkgICAgLCJwdWJsaWMga2V5IG5vdCByc2EifSwKQEAgLTQyNiw2ICs0NTUsNyBAQAoge0VSUl9SRUFTT04oU1NMX1JfUkVORUdPVElBVElPTl9FTkNPRElOR19FUlIpLCJyZW5lZ290aWF0aW9uIGVuY29kaW5nIGVyciJ9LAoge0VSUl9SRUFTT04oU1NMX1JfUkVORUdPVElBVElPTl9NSVNNQVRDSCksInJlbmVnb3RpYXRpb24gbWlzbWF0Y2gifSwKIHtFUlJfUkVBU09OKFNTTF9SX1JFUVVJUkVEX0NJUEhFUl9NSVNTSU5HKSwicmVxdWlyZWQgY2lwaGVyIG1pc3NpbmcifSwKK3tFUlJfUkVBU09OKFNTTF9SX1JFUVVJUkVEX0NPTVBSRVNTU0lPTl9BTEdPUklUSE1fTUlTU0lORyksInJlcXVpcmVkIGNvbXByZXNzc2lvbiBhbGdvcml0aG0gbWlzc2luZyJ9LAoge0VSUl9SRUFTT04oU1NMX1JfUkVVU0VfQ0VSVF9MRU5HVEhfTk9UX1pFUk8pLCJyZXVzZSBjZXJ0IGxlbmd0aCBub3QgemVybyJ9LAoge0VSUl9SRUFTT04oU1NMX1JfUkVVU0VfQ0VSVF9UWVBFX05PVF9aRVJPKSwicmV1c2UgY2VydCB0eXBlIG5vdCB6ZXJvIn0sCiB7RVJSX1JFQVNPTihTU0xfUl9SRVVTRV9DSVBIRVJfTElTVF9OT1RfWkVSTyksInJldXNlIGNpcGhlciBsaXN0IG5vdCB6ZXJvIn0sCkBAIC00MzYsNiArNDY2LDcgQEAKIHtFUlJfUkVBU09OKFNTTF9SX1NJR05BVFVSRV9GT1JfTk9OX1NJR05JTkdfQ0VSVElGSUNBVEUpLCJzaWduYXR1cmUgZm9yIG5vbiBzaWduaW5nIGNlcnRpZmljYXRlIn0sCiB7RVJSX1JFQVNPTihTU0xfUl9TU0wyM19ET0lOR19TRVNTSU9OX0lEX1JFVVNFKSwic3NsMjMgZG9pbmcgc2Vzc2lvbiBpZCByZXVzZSJ9LAoge0VSUl9SRUFTT04oU1NMX1JfU1NMMl9DT05ORUNUSU9OX0lEX1RPT19MT05HKSwic3NsMiBjb25uZWN0aW9uIGlkIHRvbyBsb25nIn0sCit7RVJSX1JFQVNPTihTU0xfUl9TU0wzX0VYVF9JTlZBTElEX0VDUE9JTlRGT1JNQVQpLCJzc2wzIGV4dCBpbnZhbGlkIGVjcG9pbnRmb3JtYXQifSwKIHtFUlJfUkVBU09OKFNTTF9SX1NTTDNfRVhUX0lOVkFMSURfU0VSVkVSTkFNRSksInNzbDMgZXh0IGludmFsaWQgc2VydmVybmFtZSJ9LAoge0VSUl9SRUFTT04oU1NMX1JfU1NMM19FWFRfSU5WQUxJRF9TRVJWRVJOQU1FX1RZUEUpLCJzc2wzIGV4dCBpbnZhbGlkIHNlcnZlcm5hbWUgdHlwZSJ9LAoge0VSUl9SRUFTT04oU1NMX1JfU1NMM19TRVNTSU9OX0lEX1RPT19MT05HKSwic3NsMyBzZXNzaW9uIGlkIHRvbyBsb25nIn0sCkBAIC00NzEsNiArNTAyLDExIEBACiB7RVJSX1JFQVNPTihTU0xfUl9UTFNWMV9BTEVSVF9SRUNPUkRfT1ZFUkZMT1cpLCJ0bHN2MSBhbGVydCByZWNvcmQgb3ZlcmZsb3cifSwKIHtFUlJfUkVBU09OKFNTTF9SX1RMU1YxX0FMRVJUX1VOS05PV05fQ0EpLCJ0bHN2MSBhbGVydCB1bmtub3duIGNhIn0sCiB7RVJSX1JFQVNPTihTU0xfUl9UTFNWMV9BTEVSVF9VU0VSX0NBTkNFTExFRCksInRsc3YxIGFsZXJ0IHVzZXIgY2FuY2VsbGVkIn0sCit7RVJSX1JFQVNPTihTU0xfUl9UTFNWMV9CQURfQ0VSVElGSUNBVEVfSEFTSF9WQUxVRSksInRsc3YxIGJhZCBjZXJ0aWZpY2F0ZSBoYXNoIHZhbHVlIn0sCit7RVJSX1JFQVNPTihTU0xfUl9UTFNWMV9CQURfQ0VSVElGSUNBVEVfU1RBVFVTX1JFU1BPTlNFKSwidGxzdjEgYmFkIGNlcnRpZmljYXRlIHN0YXR1cyByZXNwb25zZSJ9LAore0VSUl9SRUFTT04oU1NMX1JfVExTVjFfQ0VSVElGSUNBVEVfVU5PQlRBSU5BQkxFKSwidGxzdjEgY2VydGlmaWNhdGUgdW5vYnRhaW5hYmxlIn0sCit7RVJSX1JFQVNPTihTU0xfUl9UTFNWMV9VTlJFQ09HTklaRURfTkFNRSksInRsc3YxIHVucmVjb2duaXplZCBuYW1lIn0sCit7RVJSX1JFQVNPTihTU0xfUl9UTFNWMV9VTlNVUFBPUlRFRF9FWFRFTlNJT04pLCJ0bHN2MSB1bnN1cHBvcnRlZCBleHRlbnNpb24ifSwKIHtFUlJfUkVBU09OKFNTTF9SX1RMU19DTElFTlRfQ0VSVF9SRVFfV0lUSF9BTk9OX0NJUEhFUiksInRscyBjbGllbnQgY2VydCByZXEgd2l0aCBhbm9uIGNpcGhlciJ9LAoge0VSUl9SRUFTT04oU1NMX1JfVExTX0lOVkFMSURfRUNQT0lOVEZPUk1BVF9MSVNUKSwidGxzIGludmFsaWQgZWNwb2ludGZvcm1hdCBsaXN0In0sCiB7RVJSX1JFQVNPTihTU0xfUl9UTFNfUEVFUl9ESURfTk9UX1JFU1BPTkRfV0lUSF9DRVJUSUZJQ0FURV9MSVNUKSwidGxzIHBlZXIgZGlkIG5vdCByZXNwb25kIHdpdGggY2VydGlmaWNhdGUgbGlzdCJ9LApAQCAtNTAyLDYgKzUzOCw3IEBACiB7RVJSX1JFQVNPTihTU0xfUl9VTlNBRkVfTEVHQUNZX1JFTkVHT1RJQVRJT05fRElTQUJMRUQpLCJ1bnNhZmUgbGVnYWN5IHJlbmVnb3RpYXRpb24gZGlzYWJsZWQifSwKIHtFUlJfUkVBU09OKFNTTF9SX1VOU1VQUE9SVEVEX0NJUEhFUikgICAgLCJ1bnN1cHBvcnRlZCBjaXBoZXIifSwKIHtFUlJfUkVBU09OKFNTTF9SX1VOU1VQUE9SVEVEX0NPTVBSRVNTSU9OX0FMR09SSVRITSksInVuc3VwcG9ydGVkIGNvbXByZXNzaW9uIGFsZ29yaXRobSJ9LAore0VSUl9SRUFTT04oU1NMX1JfVU5TVVBQT1JURURfRElHRVNUX1RZUEUpLCJ1bnN1cHBvcnRlZCBkaWdlc3QgdHlwZSJ9LAoge0VSUl9SRUFTT04oU1NMX1JfVU5TVVBQT1JURURfRUxMSVBUSUNfQ1VSVkUpLCJ1bnN1cHBvcnRlZCBlbGxpcHRpYyBjdXJ2ZSJ9LAoge0VSUl9SRUFTT04oU1NMX1JfVU5TVVBQT1JURURfUFJPVE9DT0wpICAsInVuc3VwcG9ydGVkIHByb3RvY29sIn0sCiB7RVJSX1JFQVNPTihTU0xfUl9VTlNVUFBPUlRFRF9TU0xfVkVSU0lPTiksInVuc3VwcG9ydGVkIHNzbCB2ZXJzaW9uIn0sCmRpZmYgLS1naXQgYS9zc2wvc3NsX2xpYi5jIGIvc3NsL3NzbF9saWIuYwppbmRleCAxNTY1MGRhLi4zMTU3ZjIwIDEwMDY0NAotLS0gYS9zc2wvc3NsX2xpYi5jCisrKyBiL3NzbC9zc2xfbGliLmMKQEAgLTU4LDcgKzU4LDcgQEAKICAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCiAgKi8KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTUsNiArMTE1LDMyIEBACiAgKiBFQ0MgY2lwaGVyIHN1aXRlIHN1cHBvcnQgaW4gT3BlblNTTCBvcmlnaW5hbGx5IGRldmVsb3BlZCBieSAKICAqIFNVTiBNSUNST1NZU1RFTVMsIElOQy4sIGFuZCBjb250cmlidXRlZCB0byB0aGUgT3BlblNTTCBwcm9qZWN0LgogICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IDIwMDUgTm9raWEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhlIHBvcnRpb25zIG9mIHRoZSBhdHRhY2hlZCBzb2Z0d2FyZSAoIkNvbnRyaWJ1dGlvbiIpIGlzIGRldmVsb3BlZCBieQorICogTm9raWEgQ29ycG9yYXRpb24gYW5kIGlzIGxpY2Vuc2VkIHB1cnN1YW50IHRvIHRoZSBPcGVuU1NMIG9wZW4gc291cmNlCisgKiBsaWNlbnNlLgorICoKKyAqIFRoZSBDb250cmlidXRpb24sIG9yaWdpbmFsbHkgd3JpdHRlbiBieSBNaWthIEtvdXNhIGFuZCBQYXNpIEVyb25lbiBvZgorICogTm9raWEgQ29ycG9yYXRpb24sIGNvbnNpc3RzIG9mIHRoZSAiUFNLIiAoUHJlLVNoYXJlZCBLZXkpIGNpcGhlcnN1aXRlcworICogc3VwcG9ydCAoc2VlIFJGQyA0Mjc5KSB0byBPcGVuU1NMLgorICoKKyAqIE5vIHBhdGVudCBsaWNlbnNlcyBvciBvdGhlciByaWdodHMgZXhjZXB0IHRob3NlIGV4cHJlc3NseSBzdGF0ZWQgaW4KKyAqIHRoZSBPcGVuU1NMIG9wZW4gc291cmNlIGxpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIGdyYW50ZWQgb3IgcmVjZWl2ZWQKKyAqIGV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsLCBvciBvdGhlcndpc2UuCisgKgorICogTm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgTm9raWEgdGhhdCB0aGUgQ29udHJpYnV0aW9uIGRvZXMgbm90CisgKiBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb2YgYW55IHRoaXJkCisgKiBwYXJ0eSBvciB0aGF0IHRoZSBsaWNlbnNlIHByb3ZpZGVzIHlvdSB3aXRoIGFsbCB0aGUgbmVjZXNzYXJ5IHJpZ2h0cworICogdG8gbWFrZSB1c2Ugb2YgdGhlIENvbnRyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELiBJTgorICogQURESVRJT04gVE8gVEhFIERJU0NMQUlNRVJTIElOQ0xVREVEIElOIFRIRSBMSUNFTlNFLCBOT0tJQQorICogU1BFQ0lGSUNBTExZIERJU0NMQUlNUyBBTlkgTElBQklMSVRZIEZPUiBDTEFJTVMgQlJPVUdIVCBCWSBZT1UgT1IgQU5ZCisgKiBPVEhFUiBFTlRJVFkgQkFTRUQgT04gSU5GUklOR0VNRU5UIE9GIElOVEVMTEVDVFVBTCBQUk9QRVJUWSBSSUdIVFMgT1IKKyAqIE9USEVSV0lTRS4KKyAqLwogCiAjaWZkZWYgUkVGX0NIRUNLCiAjICBpbmNsdWRlIDxhc3NlcnQuaD4KQEAgLTE0Myw5ICsxNjksOSBAQAogCXNzbF91bmRlZmluZWRfZnVuY3Rpb24sCiAJKGludCAoKikoU1NMICosIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqLCBpbnQpKXNzbF91bmRlZmluZWRfZnVuY3Rpb24sCiAJKGludCAoKikoU1NMKiwgaW50KSlzc2xfdW5kZWZpbmVkX2Z1bmN0aW9uLAotCShpbnQgKCopKFNTTCAqLCBFVlBfTURfQ1RYICosIEVWUF9NRF9DVFggKiwgY29uc3QgY2hhciosIGludCwgdW5zaWduZWQgY2hhciAqKSlzc2xfdW5kZWZpbmVkX2Z1bmN0aW9uLAorCShpbnQgKCopKFNTTCAqLCAgY29uc3QgY2hhciosIGludCwgdW5zaWduZWQgY2hhciAqKSlzc2xfdW5kZWZpbmVkX2Z1bmN0aW9uLAogCTAsCS8qIGZpbmlzaF9tYWNfbGVuZ3RoICovCi0JKGludCAoKikoU1NMICosIEVWUF9NRF9DVFggKiwgdW5zaWduZWQgY2hhciAqKSlzc2xfdW5kZWZpbmVkX2Z1bmN0aW9uLAorCShpbnQgKCopKFNTTCAqLCBpbnQsIHVuc2lnbmVkIGNoYXIgKikpc3NsX3VuZGVmaW5lZF9mdW5jdGlvbiwKIAlOVUxMLAkvKiBjbGllbnRfZmluaXNoZWRfbGFiZWwgKi8KIAkwLAkvKiBjbGllbnRfZmluaXNoZWRfbGFiZWxfbGVuICovCiAJTlVMTCwJLyogc2VydmVyX2ZpbmlzaGVkX2xhYmVsICovCkBAIC0yMDQsNiArMjMwLDggQEAKIAkJfQogCiAJc3NsX2NsZWFyX2NpcGhlcl9jdHgocyk7CisJc3NsX2NsZWFyX2hhc2hfY3R4KCZzLT5yZWFkX2hhc2gpOworCXNzbF9jbGVhcl9oYXNoX2N0eCgmcy0+d3JpdGVfaGFzaCk7CiAKIAlzLT5maXJzdF9wYWNrZXQ9MDsKIApAQCAtMjI0LDE0ICsyNTIsMTUgQEAKIAl9CiAKIC8qKiBVc2VkIHRvIGNoYW5nZSBhbiBTU0xfQ1RYcyBkZWZhdWx0IFNTTCBtZXRob2QgdHlwZSAqLwotaW50IFNTTF9DVFhfc2V0X3NzbF92ZXJzaW9uKFNTTF9DVFggKmN0eCxTU0xfTUVUSE9EICptZXRoKQoraW50IFNTTF9DVFhfc2V0X3NzbF92ZXJzaW9uKFNTTF9DVFggKmN0eCxjb25zdCBTU0xfTUVUSE9EICptZXRoKQogCXsKIAlTVEFDS19PRihTU0xfQ0lQSEVSKSAqc2s7CiAKIAljdHgtPm1ldGhvZD1tZXRoOwogCiAJc2s9c3NsX2NyZWF0ZV9jaXBoZXJfbGlzdChjdHgtPm1ldGhvZCwmKGN0eC0+Y2lwaGVyX2xpc3QpLAotCQkmKGN0eC0+Y2lwaGVyX2xpc3RfYnlfaWQpLFNTTF9ERUZBVUxUX0NJUEhFUl9MSVNUKTsKKwkJJihjdHgtPmNpcGhlcl9saXN0X2J5X2lkKSwKKwkJbWV0aC0+dmVyc2lvbiA9PSBTU0wyX1ZFUlNJT04gPyAiU1NMdjIiIDogU1NMX0RFRkFVTFRfQ0lQSEVSX0xJU1QpOwogCWlmICgoc2sgPT0gTlVMTCkgfHwgKHNrX1NTTF9DSVBIRVJfbnVtKHNrKSA8PSAwKSkKIAkJewogCQlTU0xlcnIoU1NMX0ZfU1NMX0NUWF9TRVRfU1NMX1ZFUlNJT04sU1NMX1JfU1NMX0xJQlJBUllfSEFTX05PX0NJUEhFUlMpOwpAQCAtMzA4LDYgKzMzNyw3IEBACiAJcy0+dHJ1c3QgPSBjdHgtPnRydXN0OwogI2VuZGlmCiAJcy0+cXVpZXRfc2h1dGRvd249Y3R4LT5xdWlldF9zaHV0ZG93bjsKKwlzLT5tYXhfc2VuZF9mcmFnbWVudCA9IGN0eC0+bWF4X3NlbmRfZnJhZ21lbnQ7CiAKIAlDUllQVE9fYWRkKCZjdHgtPnJlZmVyZW5jZXMsMSxDUllQVE9fTE9DS19TU0xfQ1RYKTsKIAlzLT5jdHg9Y3R4OwpAQCAtMzI0LDYgKzM1NCw3IEBACiAJQ1JZUFRPX2FkZCgmY3R4LT5yZWZlcmVuY2VzLDEsQ1JZUFRPX0xPQ0tfU1NMX0NUWCk7CiAJcy0+aW5pdGlhbF9jdHg9Y3R4OwogI2VuZGlmCisKIAlzLT52ZXJpZnlfcmVzdWx0PVg1MDlfVl9PSzsKIAogCXMtPm1ldGhvZD1jdHgtPm1ldGhvZDsKQEAgLTMzOCw2ICszNjksMTEgQEAKIAogCUNSWVBUT19uZXdfZXhfZGF0YShDUllQVE9fRVhfSU5ERVhfU1NMLCBzLCAmcy0+ZXhfZGF0YSk7CiAKKyNpZm5kZWYgT1BFTlNTTF9OT19QU0sKKwlzLT5wc2tfY2xpZW50X2NhbGxiYWNrPWN0eC0+cHNrX2NsaWVudF9jYWxsYmFjazsKKwlzLT5wc2tfc2VydmVyX2NhbGxiYWNrPWN0eC0+cHNrX3NlcnZlcl9jYWxsYmFjazsKKyNlbmRpZgorCiAJcmV0dXJuKHMpOwogZXJyOgogCWlmIChzICE9IE5VTEwpCkBAIC00MjUsNyArNDYxLDcgQEAKIAkJfQogCiAJQ1JZUFRPX3JfbG9jayhDUllQVE9fTE9DS19TU0xfQ1RYKTsKLQlwID0gKFNTTF9TRVNTSU9OICopbGhfcmV0cmlldmUoc3NsLT5jdHgtPnNlc3Npb25zLCAmcik7CisJcCA9IGxoX1NTTF9TRVNTSU9OX3JldHJpZXZlKHNzbC0+Y3R4LT5zZXNzaW9ucywgJnIpOwogCUNSWVBUT19yX3VubG9jayhDUllQVE9fTE9DS19TU0xfQ1RYKTsKIAlyZXR1cm4gKHAgIT0gTlVMTCk7CiAJfQpAQCAtNDUwLDYgKzQ4NiwxNiBAQAogCXJldHVybiBYNTA5X1ZFUklGWV9QQVJBTV9zZXRfdHJ1c3Qocy0+cGFyYW0sIHRydXN0KTsKIAl9CiAKK2ludCBTU0xfQ1RYX3NldDFfcGFyYW0oU1NMX0NUWCAqY3R4LCBYNTA5X1ZFUklGWV9QQVJBTSAqdnBtKQorCXsKKwlyZXR1cm4gWDUwOV9WRVJJRllfUEFSQU1fc2V0MShjdHgtPnBhcmFtLCB2cG0pOworCX0KKworaW50IFNTTF9zZXQxX3BhcmFtKFNTTCAqc3NsLCBYNTA5X1ZFUklGWV9QQVJBTSAqdnBtKQorCXsKKwlyZXR1cm4gWDUwOV9WRVJJRllfUEFSQU1fc2V0MShzc2wtPnBhcmFtLCB2cG0pOworCX0KKwogdm9pZCBTU0xfZnJlZShTU0wgKnMpCiAJewogCWludCBpOwpAQCAtNTA0LDYgKzU1MCw4IEBACiAJCX0KIAogCXNzbF9jbGVhcl9jaXBoZXJfY3R4KHMpOworCXNzbF9jbGVhcl9oYXNoX2N0eCgmcy0+cmVhZF9oYXNoKTsKKwlzc2xfY2xlYXJfaGFzaF9jdHgoJnMtPndyaXRlX2hhc2gpOwogCiAJaWYgKHMtPmNlcnQgIT0gTlVMTCkgc3NsX2NlcnRfZnJlZShzLT5jZXJ0KTsKIAkvKiBGcmVlIHVwIGlmIGFsbG9jYXRlZCAqLwpAQCAtNTEyLDYgKzU2MCwxMSBAQAogCWlmIChzLT50bHNleHRfaG9zdG5hbWUpCiAJCU9QRU5TU0xfZnJlZShzLT50bHNleHRfaG9zdG5hbWUpOwogCWlmIChzLT5pbml0aWFsX2N0eCkgU1NMX0NUWF9mcmVlKHMtPmluaXRpYWxfY3R4KTsKKyNpZm5kZWYgT1BFTlNTTF9OT19FQworCWlmIChzLT50bHNleHRfZWNwb2ludGZvcm1hdGxpc3QpIE9QRU5TU0xfZnJlZShzLT50bHNleHRfZWNwb2ludGZvcm1hdGxpc3QpOworCWlmIChzLT50bHNleHRfZWxsaXB0aWNjdXJ2ZWxpc3QpIE9QRU5TU0xfZnJlZShzLT50bHNleHRfZWxsaXB0aWNjdXJ2ZWxpc3QpOworI2VuZGlmIC8qIE9QRU5TU0xfTk9fRUMgKi8KKwlpZiAocy0+dGxzZXh0X29wYXF1ZV9wcmZfaW5wdXQpIE9QRU5TU0xfZnJlZShzLT50bHNleHRfb3BhcXVlX3ByZl9pbnB1dCk7CiAJaWYgKHMtPnRsc2V4dF9vY3NwX2V4dHMpCiAJCXNrX1g1MDlfRVhURU5TSU9OX3BvcF9mcmVlKHMtPnRsc2V4dF9vY3NwX2V4dHMsCiAJCQkJCQlYNTA5X0VYVEVOU0lPTl9mcmVlKTsKQEAgLTUyMCw2ICs1NzMsNyBAQAogCWlmIChzLT50bHNleHRfb2NzcF9yZXNwKQogCQlPUEVOU1NMX2ZyZWUocy0+dGxzZXh0X29jc3BfcmVzcCk7CiAjZW5kaWYKKwogCWlmIChzLT5jbGllbnRfQ0EgIT0gTlVMTCkKIAkJc2tfWDUwOV9OQU1FX3BvcF9mcmVlKHMtPmNsaWVudF9DQSxYNTA5X05BTUVfZnJlZSk7CiAKQEAgLTg0NCw3ICs4OTgsNyBAQAogCQl9CiAJaWYgKHNzbC0+Y2VydCA9PSBOVUxMKQogCQl7Ci0gICAgICAgICAgICAgICAgU1NMZXJyKFNTTF9GX1NTTF9DSEVDS19QUklWQVRFX0tFWSxTU0xfUl9OT19DRVJUSUZJQ0FURV9BU1NJR05FRCk7CisJCVNTTGVycihTU0xfRl9TU0xfQ0hFQ0tfUFJJVkFURV9LRVksU1NMX1JfTk9fQ0VSVElGSUNBVEVfQVNTSUdORUQpOwogCQlyZXR1cm4gMDsKIAkJfQogCWlmIChzc2wtPmNlcnQtPmtleS0+eDUwOSA9PSBOVUxMKQpAQCAtMTAwNyw2ICsxMDYxLDExIEBACiAJCQlyZXR1cm4gbGFyZzsKIAkJCX0KIAkJcmV0dXJuIDA7CisJY2FzZSBTU0xfQ1RSTF9TRVRfTUFYX1NFTkRfRlJBR01FTlQ6CisJCWlmIChsYXJnIDwgNTEyIHx8IGxhcmcgPiBTU0wzX1JUX01BWF9QTEFJTl9MRU5HVEgpCisJCQlyZXR1cm4gMDsKKwkJcy0+bWF4X3NlbmRfZnJhZ21lbnQgPSBsYXJnOworCQlyZXR1cm4gMTsKIAljYXNlIFNTTF9DVFJMX0dFVF9SSV9TVVBQT1JUOgogCQlpZiAocy0+czMpCiAJCQlyZXR1cm4gcy0+czMtPnNlbmRfY29ubmVjdGlvbl9iaW5kaW5nOwpAQCAtMTAyOSw3ICsxMDg4LDcgQEAKIAkJfQogCX0KIAotc3RydWN0IGxoYXNoX3N0ICpTU0xfQ1RYX3Nlc3Npb25zKFNTTF9DVFggKmN0eCkKK0xIQVNIX09GKFNTTF9TRVNTSU9OKSAqU1NMX0NUWF9zZXNzaW9ucyhTU0xfQ1RYICpjdHgpCiAJewogCXJldHVybiBjdHgtPnNlc3Npb25zOwogCX0KQEAgLTEwNzIsNyArMTEzMSw3IEBACiAJCXJldHVybihjdHgtPnNlc3Npb25fY2FjaGVfbW9kZSk7CiAKIAljYXNlIFNTTF9DVFJMX1NFU1NfTlVNQkVSOgotCQlyZXR1cm4oY3R4LT5zZXNzaW9ucy0+bnVtX2l0ZW1zKTsKKwkJcmV0dXJuKGxoX1NTTF9TRVNTSU9OX251bV9pdGVtcyhjdHgtPnNlc3Npb25zKSk7CiAJY2FzZSBTU0xfQ1RSTF9TRVNTX0NPTk5FQ1Q6CiAJCXJldHVybihjdHgtPnN0YXRzLnNlc3NfY29ubmVjdCk7CiAJY2FzZSBTU0xfQ1RSTF9TRVNTX0NPTk5FQ1RfR09PRDoKQEAgLTExMDMsNiArMTE2MiwxMSBAQAogCQlyZXR1cm4oY3R4LT5tb2RlfD1sYXJnKTsKIAljYXNlIFNTTF9DVFJMX0NMRUFSX01PREU6CiAJCXJldHVybihjdHgtPm1vZGUmPX5sYXJnKTsKKwljYXNlIFNTTF9DVFJMX1NFVF9NQVhfU0VORF9GUkFHTUVOVDoKKwkJaWYgKGxhcmcgPCA1MTIgfHwgbGFyZyA+IFNTTDNfUlRfTUFYX1BMQUlOX0xFTkdUSCkKKwkJCXJldHVybiAwOworCQljdHgtPm1heF9zZW5kX2ZyYWdtZW50ID0gbGFyZzsKKwkJcmV0dXJuIDE7CiAJZGVmYXVsdDoKIAkJcmV0dXJuKGN0eC0+bWV0aG9kLT5zc2xfY3R4X2N0cmwoY3R4LGNtZCxsYXJnLHBhcmcpKTsKIAkJfQpAQCAtMTIwNyw4ICsxMjcxLDggQEAKIAkvKiBzc2xfY3JlYXRlX2NpcGhlcl9saXN0IG1heSByZXR1cm4gYW4gZW1wdHkgc3RhY2sgaWYgaXQKIAkgKiB3YXMgdW5hYmxlIHRvIGZpbmQgYSBjaXBoZXIgbWF0Y2hpbmcgdGhlIGdpdmVuIHJ1bGUgc3RyaW5nCiAJICogKGZvciBleGFtcGxlIGlmIHRoZSBydWxlIHN0cmluZyBzcGVjaWZpZXMgYSBjaXBoZXIgd2hpY2gKLQkgKiBoYXMgYmVlbiBkaXNhYmxlZCkuIFRoaXMgaXMgbm90IGFuIGVycm9yIGFzIGZhciBhcyAKLQkgKiBzc2xfY3JlYXRlX2NpcGhlcl9saXN0IGlzIGNvbmNlcm5lZCwgYW5kIGhlbmNlIAorCSAqIGhhcyBiZWVuIGRpc2FibGVkKS4gVGhpcyBpcyBub3QgYW4gZXJyb3IgYXMgZmFyIGFzCisJICogc3NsX2NyZWF0ZV9jaXBoZXJfbGlzdCBpcyBjb25jZXJuZWQsIGFuZCBoZW5jZQogCSAqIGN0eC0+Y2lwaGVyX2xpc3QgYW5kIGN0eC0+Y2lwaGVyX2xpc3RfYnlfaWQgaGFzIGJlZW4KIAkgKiB1cGRhdGVkLiAqLwogCWlmIChzayA9PSBOVUxMKQpAQCAtMTI3NiwxMyArMTM0MCwxMyBAQAogCX0KIAogaW50IHNzbF9jaXBoZXJfbGlzdF90b19ieXRlcyhTU0wgKnMsU1RBQ0tfT0YoU1NMX0NJUEhFUikgKnNrLHVuc2lnbmVkIGNoYXIgKnAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKnB1dF9jYikoY29uc3QgU1NMX0NJUEhFUiAqLCB1bnNpZ25lZCBjaGFyICopKQorCQkJICAgICBpbnQgKCpwdXRfY2IpKGNvbnN0IFNTTF9DSVBIRVIgKiwgdW5zaWduZWQgY2hhciAqKSkKIAl7CiAJaW50IGksaj0wOwogCVNTTF9DSVBIRVIgKmM7CiAJdW5zaWduZWQgY2hhciAqcTsKICNpZm5kZWYgT1BFTlNTTF9OT19LUkI1Ci0gICAgICAgIGludCBub2tyYjUgPSAha3NzbF90Z3RfaXNfYXZhaWxhYmxlKHMtPmtzc2xfY3R4KTsKKwlpbnQgbm9rcmI1ID0gIWtzc2xfdGd0X2lzX2F2YWlsYWJsZShzLT5rc3NsX2N0eCk7CiAjZW5kaWYgLyogT1BFTlNTTF9OT19LUkI1ICovCiAKIAlpZiAoc2sgPT0gTlVMTCkgcmV0dXJuKDApOwpAQCAtMTI5MiwxMCArMTM1NiwxNiBAQAogCQl7CiAJCWM9c2tfU1NMX0NJUEhFUl92YWx1ZShzayxpKTsKICNpZm5kZWYgT1BFTlNTTF9OT19LUkI1Ci0gICAgICAgICAgICAgICAgaWYgKChjLT5hbGdvcml0aG1zICYgU1NMX0tSQjUpICYmIG5va3JiNSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0jZW5kaWYgLyogT1BFTlNTTF9OT19LUkI1ICovICAgICAgICAgICAgICAgICAgICAKLQorCQlpZiAoKChjLT5hbGdvcml0aG1fbWtleSAmIFNTTF9rS1JCNSkgfHwgKGMtPmFsZ29yaXRobV9hdXRoICYgU1NMX2FLUkI1KSkgJiYKKwkJICAgIG5va3JiNSkKKwkJICAgIGNvbnRpbnVlOworI2VuZGlmIC8qIE9QRU5TU0xfTk9fS1JCNSAqLworI2lmbmRlZiBPUEVOU1NMX05PX1BTSworCQkvKiB3aXRoIFBTSyB0aGVyZSBtdXN0IGJlIGNsaWVudCBjYWxsYmFjayBzZXQgKi8KKwkJaWYgKCgoYy0+YWxnb3JpdGhtX21rZXkgJiBTU0xfa1BTSykgfHwgKGMtPmFsZ29yaXRobV9hdXRoICYgU1NMX2FQU0spKSAmJgorCQkgICAgcy0+cHNrX2NsaWVudF9jYWxsYmFjayA9PSBOVUxMKQorCQkJY29udGludWU7CisjZW5kaWYgLyogT1BFTlNTTF9OT19QU0sgKi8KIAkJaiA9IHB1dF9jYiA/IHB1dF9jYihjLHApIDogc3NsX3B1dF9jaXBoZXJfYnlfY2hhcihzLGMscCk7CiAJCXArPWo7CiAJCX0KQEAgLTEzMDYsNyArMTM3Niw3IEBACiAJCXsKIAkJc3RhdGljIFNTTF9DSVBIRVIgc2NzdiA9CiAJCQl7Ci0JCQkwLCBOVUxMLCBTU0wzX0NLX1NDU1YsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJCQkwLCBOVUxMLCBTU0wzX0NLX1NDU1YsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAKIAkJCX07CiAJCWogPSBwdXRfY2IgPyBwdXRfY2IoJnNjc3YscCkgOiBzc2xfcHV0X2NpcGhlcl9ieV9jaGFyKHMsJnNjc3YscCk7CiAJCXArPWo7CkBAIC0xMzIxLDcgKzEzOTEsNyBAQAogU1RBQ0tfT0YoU1NMX0NJUEhFUikgKnNzbF9ieXRlc190b19jaXBoZXJfbGlzdChTU0wgKnMsdW5zaWduZWQgY2hhciAqcCxpbnQgbnVtLAogCQkJCQkgICAgICAgU1RBQ0tfT0YoU1NMX0NJUEhFUikgKipza3ApCiAJewotCVNTTF9DSVBIRVIgKmM7CisJY29uc3QgU1NMX0NJUEhFUiAqYzsKIAlTVEFDS19PRihTU0xfQ0lQSEVSKSAqc2s7CiAJaW50IGksbjsKIAlpZiAocy0+czMpCkBAIC0xMzg0LDYgKzE0NTQsNyBAQAogCXJldHVybihOVUxMKTsKIAl9CiAKKwogI2lmbmRlZiBPUEVOU1NMX05PX1RMU0VYVAogLyoqIHJldHVybiBhIHNlcnZlcm5hbWUgZXh0ZW5zaW9uIHZhbHVlIGlmIHByb3ZpZGVkIGluIENsaWVudCBIZWxsbywgb3IgTlVMTC4KICAqIFNvIGZhciwgb25seSBob3N0X25hbWUgdHlwZXMgYXJlIGRlZmluZWQgKFJGQyAzNTQ2KS4KQEAgLTE0MDcsNyArMTQ3OCw3IEBACiAJfQogI2VuZGlmCiAKLXVuc2lnbmVkIGxvbmcgU1NMX1NFU1NJT05faGFzaChjb25zdCBTU0xfU0VTU0lPTiAqYSkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNzbF9zZXNzaW9uX2hhc2goY29uc3QgU1NMX1NFU1NJT04gKmEpCiAJewogCXVuc2lnbmVkIGxvbmcgbDsKIApAQCAtMTQyNCw3ICsxNDk1LDcgQEAKICAqIFNTTF9DVFhfaGFzX21hdGNoaW5nX3Nlc3Npb25faWQoKSBpcyBjaGVja2VkIGFjY29yZGluZ2x5LiBJdCByZWxpZXMgb24gYmVpbmcKICAqIGFibGUgdG8gY29uc3RydWN0IGFuIFNTTF9TRVNTSU9OIHRoYXQgd2lsbCBjb2xsaWRlIHdpdGggYW55IGV4aXN0aW5nIHNlc3Npb24KICAqIHdpdGggYSBtYXRjaGluZyBzZXNzaW9uIElELiAqLwotaW50IFNTTF9TRVNTSU9OX2NtcChjb25zdCBTU0xfU0VTU0lPTiAqYSxjb25zdCBTU0xfU0VTU0lPTiAqYikKK3N0YXRpYyBpbnQgc3NsX3Nlc3Npb25fY21wKGNvbnN0IFNTTF9TRVNTSU9OICphLGNvbnN0IFNTTF9TRVNTSU9OICpiKQogCXsKIAlpZiAoYS0+c3NsX3ZlcnNpb24gIT0gYi0+c3NsX3ZlcnNpb24pCiAJCXJldHVybigxKTsKQEAgLTE0MzcsMjcgKzE1MDgsMTkgQEAKICAqIFNTTF9TRVNTSU9OX2hhc2ggYW5kIFNTTF9TRVNTSU9OX2NtcCBmb3Igdm9pZCogdHlwZXMgYW5kIGNhc3RpbmcgZWFjaAogICogdmFyaWFibGUuIFRoZSByZWFzb24gaXMgdGhhdCB0aGUgZnVuY3Rpb25zIGFyZW4ndCBzdGF0aWMsIHRoZXkncmUgZXhwb3NlZCB2aWEKICAqIHNzbC5oLiAqLwotc3RhdGljIElNUExFTUVOVF9MSEFTSF9IQVNIX0ZOKFNTTF9TRVNTSU9OX2hhc2gsIFNTTF9TRVNTSU9OICopCi1zdGF0aWMgSU1QTEVNRU5UX0xIQVNIX0NPTVBfRk4oU1NMX1NFU1NJT05fY21wLCBTU0xfU0VTU0lPTiAqKQorc3RhdGljIElNUExFTUVOVF9MSEFTSF9IQVNIX0ZOKHNzbF9zZXNzaW9uLCBTU0xfU0VTU0lPTikKK3N0YXRpYyBJTVBMRU1FTlRfTEhBU0hfQ09NUF9GTihzc2xfc2Vzc2lvbiwgU1NMX1NFU1NJT04pCiAKLVNTTF9DVFggKlNTTF9DVFhfbmV3KFNTTF9NRVRIT0QgKm1ldGgpCitTU0xfQ1RYICpTU0xfQ1RYX25ldyhjb25zdCBTU0xfTUVUSE9EICptZXRoKQogCXsKIAlTU0xfQ1RYICpyZXQ9TlVMTDsKLQkKKwogCWlmIChtZXRoID09IE5VTEwpCiAJCXsKIAkJU1NMZXJyKFNTTF9GX1NTTF9DVFhfTkVXLFNTTF9SX05VTExfU1NMX01FVEhPRF9QQVNTRUQpOwogCQlyZXR1cm4oTlVMTCk7CiAJCX0KIAotI2lmZGVmIE9QRU5TU0xfRklQUwotCWlmIChGSVBTX21vZGUoKSAmJiAobWV0aC0+dmVyc2lvbiA8IFRMUzFfVkVSU0lPTikpCQotCQl7Ci0JCVNTTGVycihTU0xfRl9TU0xfQ1RYX05FVywgU1NMX1JfT05MWV9UTFNfQUxMT1dFRF9JTl9GSVBTX01PREUpOwotCQlyZXR1cm4gTlVMTDsKLQkJfQotI2VuZGlmCi0KIAlpZiAoU1NMX2dldF9leF9kYXRhX1g1MDlfU1RPUkVfQ1RYX2lkeCgpIDwgMCkKIAkJewogCQlTU0xlcnIoU1NMX0ZfU1NMX0NUWF9ORVcsU1NMX1JfWDUwOV9WRVJJRklDQVRJT05fU0VUVVBfUFJPQkxFTVMpOwpAQCAtMTUyMCwxNSArMTU4MywxNCBAQAogCXJldC0+YXBwX2dlbl9jb29raWVfY2I9MDsKIAlyZXQtPmFwcF92ZXJpZnlfY29va2llX2NiPTA7CiAKLQlyZXQtPnNlc3Npb25zPWxoX25ldyhMSEFTSF9IQVNIX0ZOKFNTTF9TRVNTSU9OX2hhc2gpLAotCQkJTEhBU0hfQ09NUF9GTihTU0xfU0VTU0lPTl9jbXApKTsKKwlyZXQtPnNlc3Npb25zPWxoX1NTTF9TRVNTSU9OX25ldygpOwogCWlmIChyZXQtPnNlc3Npb25zID09IE5VTEwpIGdvdG8gZXJyOwogCXJldC0+Y2VydF9zdG9yZT1YNTA5X1NUT1JFX25ldygpOwogCWlmIChyZXQtPmNlcnRfc3RvcmUgPT0gTlVMTCkgZ290byBlcnI7CiAKIAlzc2xfY3JlYXRlX2NpcGhlcl9saXN0KHJldC0+bWV0aG9kLAogCQkmcmV0LT5jaXBoZXJfbGlzdCwmcmV0LT5jaXBoZXJfbGlzdF9ieV9pZCwKLQkJU1NMX0RFRkFVTFRfQ0lQSEVSX0xJU1QpOworCQltZXRoLT52ZXJzaW9uID09IFNTTDJfVkVSU0lPTiA/ICJTU0x2MiIgOiBTU0xfREVGQVVMVF9DSVBIRVJfTElTVCk7CiAJaWYgKHJldC0+Y2lwaGVyX2xpc3QgPT0gTlVMTAogCSAgICB8fCBza19TU0xfQ0lQSEVSX251bShyZXQtPmNpcGhlcl9saXN0KSA8PSAwKQogCQl7CkBAIC0xNTY0LDYgKzE2MjYsOCBAQAogCXJldC0+ZXh0cmFfY2VydHM9TlVMTDsKIAlyZXQtPmNvbXBfbWV0aG9kcz1TU0xfQ09NUF9nZXRfY29tcHJlc3Npb25fbWV0aG9kcygpOwogCisJcmV0LT5tYXhfc2VuZF9mcmFnbWVudCA9IFNTTDNfUlRfTUFYX1BMQUlOX0xFTkdUSDsKKwogI2lmbmRlZiBPUEVOU1NMX05PX1RMU0VYVAogCXJldC0+dGxzZXh0X3NlcnZlcm5hbWVfY2FsbGJhY2sgPSAwOwogCXJldC0+dGxzZXh0X3NlcnZlcm5hbWVfYXJnID0gTlVMTDsKQEAgLTE1NzcsNyArMTY0MSwyOSBAQAogCXJldC0+dGxzZXh0X3N0YXR1c19hcmcgPSBOVUxMOwogCiAjZW5kaWYKLQorI2lmbmRlZiBPUEVOU1NMX05PX1BTSworCXJldC0+cHNrX2lkZW50aXR5X2hpbnQ9TlVMTDsKKwlyZXQtPnBza19jbGllbnRfY2FsbGJhY2s9TlVMTDsKKwlyZXQtPnBza19zZXJ2ZXJfY2FsbGJhY2s9TlVMTDsKKyNlbmRpZgorI2lmbmRlZiBPUEVOU1NMX05PX0JVRl9GUkVFTElTVFMKKwlyZXQtPmZyZWVsaXN0X21heF9sZW4gPSBTU0xfTUFYX0JVRl9GUkVFTElTVF9MRU5fREVGQVVMVDsKKwlyZXQtPnJidWZfZnJlZWxpc3QgPSBPUEVOU1NMX21hbGxvYyhzaXplb2YoU1NMM19CVUZfRlJFRUxJU1QpKTsKKwlpZiAoIXJldC0+cmJ1Zl9mcmVlbGlzdCkKKwkJZ290byBlcnI7CisJcmV0LT5yYnVmX2ZyZWVsaXN0LT5jaHVua2xlbiA9IDA7CisJcmV0LT5yYnVmX2ZyZWVsaXN0LT5sZW4gPSAwOworCXJldC0+cmJ1Zl9mcmVlbGlzdC0+aGVhZCA9IE5VTEw7CisJcmV0LT53YnVmX2ZyZWVsaXN0ID0gT1BFTlNTTF9tYWxsb2Moc2l6ZW9mKFNTTDNfQlVGX0ZSRUVMSVNUKSk7CisJaWYgKCFyZXQtPndidWZfZnJlZWxpc3QpCisJCXsKKwkJT1BFTlNTTF9mcmVlKHJldC0+cmJ1Zl9mcmVlbGlzdCk7CisJCWdvdG8gZXJyOworCQl9CisJcmV0LT53YnVmX2ZyZWVsaXN0LT5jaHVua2xlbiA9IDA7CisJcmV0LT53YnVmX2ZyZWVsaXN0LT5sZW4gPSAwOworCXJldC0+d2J1Zl9mcmVlbGlzdC0+aGVhZCA9IE5VTEw7CisjZW5kaWYKICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKIAlyZXQtPmNsaWVudF9jZXJ0X2VuZ2luZSA9IE5VTEw7CiAjaWZkZWYgT1BFTlNTTF9TU0xfQ0xJRU5UX0VOR0lORV9BVVRPCkBAIC0xNjE2LDYgKzE3MDIsMjAgQEAKICAgICB7IE9QRU5TU0xfZnJlZShjb21wKTsgfQogI2VuZGlmCiAKKyNpZm5kZWYgT1BFTlNTTF9OT19CVUZfRlJFRUxJU1RTCitzdGF0aWMgdm9pZAorc3NsX2J1Zl9mcmVlbGlzdF9mcmVlKFNTTDNfQlVGX0ZSRUVMSVNUICpsaXN0KQorCXsKKwlTU0wzX0JVRl9GUkVFTElTVF9FTlRSWSAqZW50LCAqbmV4dDsKKwlmb3IgKGVudCA9IGxpc3QtPmhlYWQ7IGVudDsgZW50ID0gbmV4dCkKKwkJeworCQluZXh0ID0gZW50LT5uZXh0OworCQlPUEVOU1NMX2ZyZWUoZW50KTsKKwkJfQorCU9QRU5TU0xfZnJlZShsaXN0KTsKKwl9CisjZW5kaWYKKwogdm9pZCBTU0xfQ1RYX2ZyZWUoU1NMX0NUWCAqYSkKIAl7CiAJaW50IGk7CkBAIC0xNjUzLDcgKzE3NTMsNyBAQAogCUNSWVBUT19mcmVlX2V4X2RhdGEoQ1JZUFRPX0VYX0lOREVYX1NTTF9DVFgsIGEsICZhLT5leF9kYXRhKTsKIAogCWlmIChhLT5zZXNzaW9ucyAhPSBOVUxMKQotCQlsaF9mcmVlKGEtPnNlc3Npb25zKTsKKwkJbGhfU1NMX1NFU1NJT05fZnJlZShhLT5zZXNzaW9ucyk7CiAKIAlpZiAoYS0+Y2VydF9zdG9yZSAhPSBOVUxMKQogCQlYNTA5X1NUT1JFX2ZyZWUoYS0+Y2VydF9zdG9yZSk7CkBAIC0xNjczLDEwICsxNzczLDIzIEBACiAjZWxzZQogCWEtPmNvbXBfbWV0aG9kcyA9IE5VTEw7CiAjZW5kaWYKKworI2lmbmRlZiBPUEVOU1NMX05PX1BTSworCWlmIChhLT5wc2tfaWRlbnRpdHlfaGludCkKKwkJT1BFTlNTTF9mcmVlKGEtPnBza19pZGVudGl0eV9oaW50KTsKKyNlbmRpZgogI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQogCWlmIChhLT5jbGllbnRfY2VydF9lbmdpbmUpCiAJCUVOR0lORV9maW5pc2goYS0+Y2xpZW50X2NlcnRfZW5naW5lKTsKICNlbmRpZgorCisjaWZuZGVmIE9QRU5TU0xfTk9fQlVGX0ZSRUVMSVNUUworCWlmIChhLT53YnVmX2ZyZWVsaXN0KQorCQlzc2xfYnVmX2ZyZWVsaXN0X2ZyZWUoYS0+d2J1Zl9mcmVlbGlzdCk7CisJaWYgKGEtPnJidWZfZnJlZWxpc3QpCisJCXNzbF9idWZfZnJlZWxpc3RfZnJlZShhLT5yYnVmX2ZyZWVsaXN0KTsKKyNlbmRpZgorCiAJT1BFTlNTTF9mcmVlKGEpOwogCX0KIApAQCAtMTcwNywxMyArMTgyMCwxMyBAQAogCVg1MDlfVkVSSUZZX1BBUkFNX3NldF9kZXB0aChjdHgtPnBhcmFtLCBkZXB0aCk7CiAJfQogCi12b2lkIHNzbF9zZXRfY2VydF9tYXNrcyhDRVJUICpjLCBTU0xfQ0lQSEVSICpjaXBoZXIpCit2b2lkIHNzbF9zZXRfY2VydF9tYXNrcyhDRVJUICpjLCBjb25zdCBTU0xfQ0lQSEVSICpjaXBoZXIpCiAJewogCUNFUlRfUEtFWSAqY3BrOwogCWludCByc2FfZW5jLHJzYV90bXAscnNhX3NpZ24sZGhfdG1wLGRoX3JzYSxkaF9kc2EsZHNhX3NpZ247CiAJaW50IHJzYV9lbmNfZXhwb3J0LGRoX3JzYV9leHBvcnQsZGhfZHNhX2V4cG9ydDsKIAlpbnQgcnNhX3RtcF9leHBvcnQsZGhfdG1wX2V4cG9ydCxrbDsKLQl1bnNpZ25lZCBsb25nIG1hc2ssZW1hc2s7CisJdW5zaWduZWQgbG9uZyBtYXNrX2ssbWFza19hLGVtYXNrX2ssZW1hc2tfYTsKIAlpbnQgaGF2ZV9lY2NfY2VydCwgZWNkaF9vaywgZWNkc2Ffb2ssIGVjY19wa2V5X3NpemU7CiAjaWZuZGVmIE9QRU5TU0xfTk9fRUNESAogCWludCBoYXZlX2VjZGhfdG1wOwpAQCAtMTc2MCw2MCArMTg3Myw3NyBAQAogCWRoX2RzYV9leHBvcnQ9KGRoX2RzYSAmJiBFVlBfUEtFWV9zaXplKGNway0+cHJpdmF0ZWtleSkqOCA8PSBrbCk7CiAJY3BrPSAmKGMtPnBrZXlzW1NTTF9QS0VZX0VDQ10pOwogCWhhdmVfZWNjX2NlcnQ9IChjcGstPng1MDkgIT0gTlVMTCAmJiBjcGstPnByaXZhdGVrZXkgIT0gTlVMTCk7Ci0JbWFzaz0wOwotCWVtYXNrPTA7CisJbWFza19rPTA7CisJbWFza19hPTA7CisJZW1hc2tfaz0wOworCWVtYXNrX2E9MDsKKworCQogCiAjaWZkZWYgQ0lQSEVSX0RFQlVHCi0JcHJpbnRmKCJydD0lZCBydGU9JWQgZGh0PSVkIHJlPSVkIHJlZT0lZCBycz0lZCBkcz0lZCBkaHI9JWQgZGhkPSVkXG4iLAotCQlyc2FfdG1wLHJzYV90bXBfZXhwb3J0LGRoX3RtcCwKKwlwcmludGYoInJ0PSVkIHJ0ZT0lZCBkaHQ9JWQgZWNkaHQ9JWQgcmU9JWQgcmVlPSVkIHJzPSVkIGRzPSVkIGRocj0lZCBkaGQ9JWRcbiIsCisJICAgICAgICByc2FfdG1wLHJzYV90bXBfZXhwb3J0LGRoX3RtcCxoYXZlX2VjZGhfdG1wLAogCQlyc2FfZW5jLHJzYV9lbmNfZXhwb3J0LHJzYV9zaWduLGRzYV9zaWduLGRoX3JzYSxkaF9kc2EpOwogI2VuZGlmCisJCisJY3BrID0gJihjLT5wa2V5c1tTU0xfUEtFWV9HT1NUMDFdKTsKKwlpZiAoY3BrLT54NTA5ICE9IE5VTEwgJiYgY3BrLT5wcml2YXRla2V5ICE9TlVMTCkgeworCQltYXNrX2sgfD0gU1NMX2tHT1NUOworCQltYXNrX2EgfD0gU1NMX2FHT1NUMDE7CisJfQorCWNwayA9ICYoYy0+cGtleXNbU1NMX1BLRVlfR09TVDk0XSk7CisJaWYgKGNway0+eDUwOSAhPSBOVUxMICYmIGNway0+cHJpdmF0ZWtleSAhPU5VTEwpIHsKKwkJbWFza19rIHw9IFNTTF9rR09TVDsKKwkJbWFza19hIHw9IFNTTF9hR09TVDk0OworCX0KIAogCWlmIChyc2FfZW5jIHx8IChyc2FfdG1wICYmIHJzYV9zaWduKSkKLQkJbWFza3w9U1NMX2tSU0E7CisJCW1hc2tfa3w9U1NMX2tSU0E7CiAJaWYgKHJzYV9lbmNfZXhwb3J0IHx8IChyc2FfdG1wX2V4cG9ydCAmJiAocnNhX3NpZ24gfHwgcnNhX2VuYykpKQotCQllbWFza3w9U1NMX2tSU0E7CisJCWVtYXNrX2t8PVNTTF9rUlNBOwogCiAjaWYgMAogCS8qIFRoZSBtYXRjaCBuZWVkcyB0byBiZSBib3RoIGtFREggYW5kIGFSU0Egb3IgYURTQSwgc28gZG9uJ3Qgd29ycnkgKi8KLQlpZiAoCShkaF90bXAgfHwgZGhfcnNhIHx8IGRoX2RzYSkgJiYgCisJaWYgKAkoZGhfdG1wIHx8IGRoX3JzYSB8fCBkaF9kc2EpICYmCiAJCShyc2FfZW5jIHx8IHJzYV9zaWduIHx8IGRzYV9zaWduKSkKLQkJbWFza3w9U1NMX2tFREg7CisJCW1hc2tfa3w9U1NMX2tFREg7CiAJaWYgKChkaF90bXBfZXhwb3J0IHx8IGRoX3JzYV9leHBvcnQgfHwgZGhfZHNhX2V4cG9ydCkgJiYKIAkJKHJzYV9lbmMgfHwgcnNhX3NpZ24gfHwgZHNhX3NpZ24pKQotCQllbWFza3w9U1NMX2tFREg7CisJCWVtYXNrX2t8PVNTTF9rRURIOwogI2VuZGlmCiAKLQlpZiAoZGhfdG1wX2V4cG9ydCkgCi0JCWVtYXNrfD1TU0xfa0VESDsKKwlpZiAoZGhfdG1wX2V4cG9ydCkKKwkJZW1hc2tfa3w9U1NMX2tFREg7CiAKIAlpZiAoZGhfdG1wKQotCQltYXNrfD1TU0xfa0VESDsKKwkJbWFza19rfD1TU0xfa0VESDsKIAotCWlmIChkaF9yc2EpIG1hc2t8PVNTTF9rREhyOwotCWlmIChkaF9yc2FfZXhwb3J0KSBlbWFza3w9U1NMX2tESHI7CisJaWYgKGRoX3JzYSkgbWFza19rfD1TU0xfa0RIcjsKKwlpZiAoZGhfcnNhX2V4cG9ydCkgZW1hc2tfa3w9U1NMX2tESHI7CiAKLQlpZiAoZGhfZHNhKSBtYXNrfD1TU0xfa0RIZDsKLQlpZiAoZGhfZHNhX2V4cG9ydCkgZW1hc2t8PVNTTF9rREhkOworCWlmIChkaF9kc2EpIG1hc2tfa3w9U1NMX2tESGQ7CisJaWYgKGRoX2RzYV9leHBvcnQpIGVtYXNrX2t8PVNTTF9rREhkOwogCiAJaWYgKHJzYV9lbmMgfHwgcnNhX3NpZ24pCiAJCXsKLQkJbWFza3w9U1NMX2FSU0E7Ci0JCWVtYXNrfD1TU0xfYVJTQTsKKwkJbWFza19hfD1TU0xfYVJTQTsKKwkJZW1hc2tfYXw9U1NMX2FSU0E7CiAJCX0KIAogCWlmIChkc2Ffc2lnbikKIAkJewotCQltYXNrfD1TU0xfYURTUzsKLQkJZW1hc2t8PVNTTF9hRFNTOworCQltYXNrX2F8PVNTTF9hRFNTOworCQllbWFza19hfD1TU0xfYURTUzsKIAkJfQogCi0JbWFza3w9U1NMX2FOVUxMOwotCWVtYXNrfD1TU0xfYU5VTEw7CisJbWFza19hfD1TU0xfYU5VTEw7CisJZW1hc2tfYXw9U1NMX2FOVUxMOwogCiAjaWZuZGVmIE9QRU5TU0xfTk9fS1JCNQotCW1hc2t8PVNTTF9rS1JCNXxTU0xfYUtSQjU7Ci0JZW1hc2t8PVNTTF9rS1JCNXxTU0xfYUtSQjU7CisJbWFza19rfD1TU0xfa0tSQjU7CisJbWFza19hfD1TU0xfYUtSQjU7CisJZW1hc2tfa3w9U1NMX2tLUkI1OworCWVtYXNrX2F8PVNTTF9hS1JCNTsKICNlbmRpZgogCiAJLyogQW4gRUNDIGNlcnRpZmljYXRlIG1heSBiZSB1c2FibGUgZm9yIEVDREggYW5kL29yCkBAIC0xODIxLDcgKzE5NTEsNyBAQAogCSAqLwogCWlmIChoYXZlX2VjY19jZXJ0KQogCQl7Ci0gICAgICAgICAgICAgICAgLyogVGhpcyBjYWxsIHBvcHVsYXRlcyBleHRlbnNpb24gZmxhZ3MgKGV4X2ZsYWdzKSAqLworCQkvKiBUaGlzIGNhbGwgcG9wdWxhdGVzIGV4dGVuc2lvbiBmbGFncyAoZXhfZmxhZ3MpICovCiAJCXggPSAoYy0+cGtleXNbU1NMX1BLRVlfRUNDXSkueDUwOTsKIAkJWDUwOV9jaGVja19wdXJwb3NlKHgsIC0xLCAwKTsKIAkJZWNkaF9vayA9ICh4LT5leF9mbGFncyAmIEVYRkxBR19LVVNBR0UpID8KQEAgLTE4MjksNyArMTk1OSw3IEBACiAJCWVjZHNhX29rID0gKHgtPmV4X2ZsYWdzICYgRVhGTEFHX0tVU0FHRSkgPwogCQkgICAgKHgtPmV4X2t1c2FnZSAmIFg1MDl2M19LVV9ESUdJVEFMX1NJR05BVFVSRSkgOiAxOwogCQllY2NfcGtleSA9IFg1MDlfZ2V0X3B1YmtleSh4KTsKLQkJZWNjX3BrZXlfc2l6ZSA9IChlY2NfcGtleSAhPSBOVUxMKSA/IAorCQllY2NfcGtleV9zaXplID0gKGVjY19wa2V5ICE9IE5VTEwpID8KIAkJICAgIEVWUF9QS0VZX2JpdHMoZWNjX3BrZXkpIDogMDsKIAkJRVZQX1BLRVlfZnJlZShlY2NfcGtleSk7CiAJCWlmICgoeC0+c2lnX2FsZykgJiYgKHgtPnNpZ19hbGctPmFsZ29yaXRobSkpCkBAIC0xODM3LDI3ICsxOTY3LDQxIEBACiAjaWZuZGVmIE9QRU5TU0xfTk9fRUNESAogCQlpZiAoZWNkaF9vaykKIAkJCXsKLQkJCWlmICgoc2lnbmF0dXJlX25pZCA9PSBOSURfbWQ1V2l0aFJTQUVuY3J5cHRpb24pIHx8Ci0JCQkgICAgKHNpZ25hdHVyZV9uaWQgPT0gTklEX21kNFdpdGhSU0FFbmNyeXB0aW9uKSB8fAotCQkJICAgIChzaWduYXR1cmVfbmlkID09IE5JRF9tZDJXaXRoUlNBRW5jcnlwdGlvbikpCisJCQljb25zdCBjaGFyICpzaWcgPSBPQkpfbmlkMmxuKHNpZ25hdHVyZV9uaWQpOworCQkJaWYgKHNpZyA9PSBOVUxMKQogCQkJCXsKLQkJCQltYXNrfD1TU0xfa0VDREh8U1NMX2FSU0E7Ci0JCQkJaWYgKGVjY19wa2V5X3NpemUgPD0gMTYzKQotCQkJCQllbWFza3w9U1NMX2tFQ0RIfFNTTF9hUlNBOworCQkJCUVSUl9jbGVhcl9lcnJvcigpOworCQkJCXNpZyA9ICJ1bmtub3duIjsKIAkJCQl9CisJCQkJCisJCQlpZiAoc3Ryc3RyKHNpZywgIldpdGhSU0EiKSkKKwkJCQl7CisJCQkJbWFza19rfD1TU0xfa0VDREhyOworCQkJCW1hc2tfYXw9U1NMX2FFQ0RIOworCQkJCWlmIChlY2NfcGtleV9zaXplIDw9IDE2MykKKwkJCQkJeworCQkJCQllbWFza19rfD1TU0xfa0VDREhyOworCQkJCQllbWFza19hfD1TU0xfYUVDREg7CisJCQkJCX0KKwkJCQl9CisKIAkJCWlmIChzaWduYXR1cmVfbmlkID09IE5JRF9lY2RzYV93aXRoX1NIQTEpCiAJCQkJewotCQkJCW1hc2t8PVNTTF9rRUNESHxTU0xfYUVDRFNBOworCQkJCW1hc2tfa3w9U1NMX2tFQ0RIZTsKKwkJCQltYXNrX2F8PVNTTF9hRUNESDsKIAkJCQlpZiAoZWNjX3BrZXlfc2l6ZSA8PSAxNjMpCi0JCQkJCWVtYXNrfD1TU0xfa0VDREh8U1NMX2FFQ0RTQTsKKwkJCQkJeworCQkJCQllbWFza19rfD1TU0xfa0VDREhlOworCQkJCQllbWFza19hfD1TU0xfYUVDREg7CisJCQkJCX0KIAkJCQl9CiAJCQl9CiAjZW5kaWYKICNpZm5kZWYgT1BFTlNTTF9OT19FQ0RTQQogCQlpZiAoZWNkc2Ffb2spCiAJCQl7Ci0JCQltYXNrfD1TU0xfYUVDRFNBOwotCQkJZW1hc2t8PVNTTF9hRUNEU0E7CisJCQltYXNrX2F8PVNTTF9hRUNEU0E7CisJCQllbWFza19hfD1TU0xfYUVDRFNBOwogCQkJfQogI2VuZGlmCiAJCX0KQEAgLTE4NjUsMTIgKzIwMDksMjIgQEAKICNpZm5kZWYgT1BFTlNTTF9OT19FQ0RICiAJaWYgKGhhdmVfZWNkaF90bXApCiAJCXsKLQkJbWFza3w9U1NMX2tFQ0RIRTsKLQkJZW1hc2t8PVNTTF9rRUNESEU7CisJCW1hc2tfa3w9U1NMX2tFRUNESDsKKwkJZW1hc2tfa3w9U1NMX2tFRUNESDsKIAkJfQogI2VuZGlmCi0JYy0+bWFzaz1tYXNrOwotCWMtPmV4cG9ydF9tYXNrPWVtYXNrOworCisjaWZuZGVmIE9QRU5TU0xfTk9fUFNLCisJbWFza19rIHw9IFNTTF9rUFNLOworCW1hc2tfYSB8PSBTU0xfYVBTSzsKKwllbWFza19rIHw9IFNTTF9rUFNLOworCWVtYXNrX2EgfD0gU1NMX2FQU0s7CisjZW5kaWYKKworCWMtPm1hc2tfaz1tYXNrX2s7CisJYy0+bWFza19hPW1hc2tfYTsKKwljLT5leHBvcnRfbWFza19rPWVtYXNrX2s7CisJYy0+ZXhwb3J0X21hc2tfYT1lbWFza19hOwogCWMtPnZhbGlkPTE7CiAJfQogCkBAIC0xODc4LDEzICsyMDMyLDE4IEBACiAjZGVmaW5lIGt1X3JlamVjdCh4LCB1c2FnZSkgXAogCSgoKHgpLT5leF9mbGFncyAmIEVYRkxBR19LVVNBR0UpICYmICEoKHgpLT5leF9rdXNhZ2UgJiAodXNhZ2UpKSkKIAotaW50IGNoZWNrX3NydnJfZWNjX2NlcnRfYW5kX2FsZyhYNTA5ICp4LCBTU0xfQ0lQSEVSICpjcykKKyNpZm5kZWYgT1BFTlNTTF9OT19FQworCitpbnQgc3NsX2NoZWNrX3NydnJfZWNjX2NlcnRfYW5kX2FsZyhYNTA5ICp4LCBjb25zdCBTU0xfQ0lQSEVSICpjcykKIAl7Ci0JdW5zaWduZWQgbG9uZyBhbGcgPSBjcy0+YWxnb3JpdGhtczsKKwl1bnNpZ25lZCBsb25nIGFsZ19rLCBhbGdfYTsKIAlFVlBfUEtFWSAqcGtleSA9IE5VTEw7CiAJaW50IGtleXNpemUgPSAwOwogCWludCBzaWduYXR1cmVfbmlkID0gMDsKIAorCWFsZ19rID0gY3MtPmFsZ29yaXRobV9ta2V5OworCWFsZ19hID0gY3MtPmFsZ29yaXRobV9hdXRoOworCiAJaWYgKFNTTF9DX0lTX0VYUE9SVChjcykpCiAJCXsKIAkJLyogRUNESCBrZXkgbGVuZ3RoIGluIGV4cG9ydCBjaXBoZXJzIG11c3QgYmUgPD0gMTYzIGJpdHMgKi8KQEAgLTE4OTksMzcgKzIwNTgsNDYgQEAKIAlYNTA5X2NoZWNrX3B1cnBvc2UoeCwgLTEsIDApOwogCWlmICgoeC0+c2lnX2FsZykgJiYgKHgtPnNpZ19hbGctPmFsZ29yaXRobSkpCiAJCXNpZ25hdHVyZV9uaWQgPSBPQkpfb2JqMm5pZCh4LT5zaWdfYWxnLT5hbGdvcml0aG0pOwotCWlmIChhbGcgJiBTU0xfa0VDREgpIAorCWlmIChhbGdfayAmIFNTTF9rRUNESGUgfHwgYWxnX2sgJiBTU0xfa0VDREhyKQogCQl7CiAJCS8qIGtleSB1c2FnZSwgaWYgcHJlc2VudCwgbXVzdCBhbGxvdyBrZXkgYWdyZWVtZW50ICovCiAJCWlmIChrdV9yZWplY3QoeCwgWDUwOXYzX0tVX0tFWV9BR1JFRU1FTlQpKQogCQkJeworCQkJU1NMZXJyKFNTTF9GX1NTTF9DSEVDS19TUlZSX0VDQ19DRVJUX0FORF9BTEcsIFNTTF9SX0VDQ19DRVJUX05PVF9GT1JfS0VZX0FHUkVFTUVOVCk7CiAJCQlyZXR1cm4gMDsKIAkJCX0KLQkJaWYgKGFsZyAmIFNTTF9hRUNEU0EpIAorCQlpZiAoYWxnX2sgJiBTU0xfa0VDREhlKQogCQkJewogCQkJLyogc2lnbmF0dXJlIGFsZyBtdXN0IGJlIEVDRFNBICovCiAJCQlpZiAoc2lnbmF0dXJlX25pZCAhPSBOSURfZWNkc2Ffd2l0aF9TSEExKQogCQkJCXsKKwkJCQlTU0xlcnIoU1NMX0ZfU1NMX0NIRUNLX1NSVlJfRUNDX0NFUlRfQU5EX0FMRywgU1NMX1JfRUNDX0NFUlRfU0hPVUxEX0hBVkVfU0hBMV9TSUdOQVRVUkUpOwogCQkJCXJldHVybiAwOwogCQkJCX0KIAkJCX0KLQkJaWYgKGFsZyAmIFNTTF9hUlNBKQorCQlpZiAoYWxnX2sgJiBTU0xfa0VDREhyKQogCQkJewogCQkJLyogc2lnbmF0dXJlIGFsZyBtdXN0IGJlIFJTQSAqLwotCQkJaWYgKChzaWduYXR1cmVfbmlkICE9IE5JRF9tZDVXaXRoUlNBRW5jcnlwdGlvbikgJiYKLQkJCSAgICAoc2lnbmF0dXJlX25pZCAhPSBOSURfbWQ0V2l0aFJTQUVuY3J5cHRpb24pICYmCi0JCQkgICAgKHNpZ25hdHVyZV9uaWQgIT0gTklEX21kMldpdGhSU0FFbmNyeXB0aW9uKSkKKworCQkJY29uc3QgY2hhciAqc2lnID0gT0JKX25pZDJsbihzaWduYXR1cmVfbmlkKTsKKwkJCWlmIChzaWcgPT0gTlVMTCkKIAkJCQl7CisJCQkJRVJSX2NsZWFyX2Vycm9yKCk7CisJCQkJc2lnID0gInVua25vd24iOworCQkJCX0KKwkJCWlmIChzdHJzdHIoc2lnLCAiV2l0aFJTQSIpID09IE5VTEwpCisJCQkJeworCQkJCVNTTGVycihTU0xfRl9TU0xfQ0hFQ0tfU1JWUl9FQ0NfQ0VSVF9BTkRfQUxHLCBTU0xfUl9FQ0NfQ0VSVF9TSE9VTERfSEFWRV9SU0FfU0lHTkFUVVJFKTsKIAkJCQlyZXR1cm4gMDsKIAkJCQl9CiAJCQl9Ci0JCX0gCi0JZWxzZSBpZiAoYWxnICYgU1NMX2FFQ0RTQSkKKwkJfQorCWlmIChhbGdfYSAmIFNTTF9hRUNEU0EpCiAJCXsKIAkJLyoga2V5IHVzYWdlLCBpZiBwcmVzZW50LCBtdXN0IGFsbG93IHNpZ25pbmcgKi8KIAkJaWYgKGt1X3JlamVjdCh4LCBYNTA5djNfS1VfRElHSVRBTF9TSUdOQVRVUkUpKQogCQkJeworCQkJU1NMZXJyKFNTTF9GX1NTTF9DSEVDS19TUlZSX0VDQ19DRVJUX0FORF9BTEcsIFNTTF9SX0VDQ19DRVJUX05PVF9GT1JfU0lHTklORyk7CiAJCQlyZXR1cm4gMDsKIAkJCX0KIAkJfQpAQCAtMTkzNyw1OCArMjEwNSw3NCBAQAogCXJldHVybiAxOyAgLyogYWxsIGNoZWNrcyBhcmUgb2sgKi8KIAl9CiAKKyNlbmRpZgorCiAvKiBUSElTIE5FRURTIENMRUFOSU5HIFVQICovCiBYNTA5ICpzc2xfZ2V0X3NlcnZlcl9zZW5kX2NlcnQoU1NMICpzKQogCXsKLQl1bnNpZ25lZCBsb25nIGFsZyxtYXNrLGthbGc7CisJdW5zaWduZWQgbG9uZyBhbGdfayxhbGdfYSxtYXNrX2ssbWFza19hOwogCUNFUlQgKmM7CiAJaW50IGksaXNfZXhwb3J0OwogCiAJYz1zLT5jZXJ0OwogCXNzbF9zZXRfY2VydF9tYXNrcyhjLCBzLT5zMy0+dG1wLm5ld19jaXBoZXIpOwotCWFsZz1zLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobXM7CiAJaXNfZXhwb3J0PVNTTF9DX0lTX0VYUE9SVChzLT5zMy0+dG1wLm5ld19jaXBoZXIpOwotCW1hc2s9aXNfZXhwb3J0P2MtPmV4cG9ydF9tYXNrOmMtPm1hc2s7Ci0Ja2FsZz1hbGcmKFNTTF9NS0VZX01BU0t8U1NMX0FVVEhfTUFTSyk7Ci0KLQlpZiAoa2FsZyAmIFNTTF9rRUNESCkKKwlpZiAoaXNfZXhwb3J0KQogCQl7Ci0JCS8qIHdlIGRvbid0IG5lZWQgdG8gbG9vayBhdCBTU0xfa0VDREhFIAorCQltYXNrX2sgPSBjLT5leHBvcnRfbWFza19rOworCQltYXNrX2EgPSBjLT5leHBvcnRfbWFza19hOworCQl9CisJZWxzZQorCQl7CisJCW1hc2tfayA9IGMtPm1hc2tfazsKKwkJbWFza19hID0gYy0+bWFza19hOworCQl9CisJCisJYWxnX2sgPSBzLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobV9ta2V5OworCWFsZ19hID0gcy0+czMtPnRtcC5uZXdfY2lwaGVyLT5hbGdvcml0aG1fYXV0aDsKKworCWlmIChhbGdfayAmIChTU0xfa0VDREhyfFNTTF9rRUNESGUpKQorCQl7CisJCS8qIHdlIGRvbid0IG5lZWQgdG8gbG9vayBhdCBTU0xfa0VFQ0RICiAJCSAqIHNpbmNlIG5vIGNlcnRpZmljYXRlIGlzIG5lZWRlZCBmb3IKIAkJICogYW5vbiBFQ0RIIGFuZCBmb3IgYXV0aGVudGljYXRlZAotCQkgKiBFQ0RIRSwgdGhlIGNoZWNrIGZvciB0aGUgYXV0aCAKKwkJICogRUVDREgsIHRoZSBjaGVjayBmb3IgdGhlIGF1dGgKIAkJICogYWxnb3JpdGhtIHdpbGwgc2V0IGkgY29ycmVjdGx5CiAJCSAqIE5PVEU6IEZvciBFQ0RILVJTQSwgd2UgbmVlZCBhbiBFQ0MKLQkJICogbm90IGFuIFJTQSBjZXJ0IGJ1dCBmb3IgRUNESEUtUlNBCisJCSAqIG5vdCBhbiBSU0EgY2VydCBidXQgZm9yIEVFQ0RILVJTQQogCQkgKiB3ZSBuZWVkIGFuIFJTQSBjZXJ0LiBQbGFjaW5nIHRoZQogCQkgKiBjaGVja3MgZm9yIFNTTF9rRUNESCBiZWZvcmUgUlNBCiAJCSAqIGNoZWNrcyBlbnN1cmVzIHRoZSBjb3JyZWN0IGNlcnQgaXMgY2hvc2VuLgogCQkgKi8KIAkJaT1TU0xfUEtFWV9FQ0M7CiAJCX0KLQllbHNlIGlmIChrYWxnICYgU1NMX2FFQ0RTQSkKKwllbHNlIGlmIChhbGdfYSAmIFNTTF9hRUNEU0EpCiAJCXsKIAkJaT1TU0xfUEtFWV9FQ0M7CiAJCX0KLQllbHNlIGlmIChrYWxnICYgU1NMX2tESHIpCisJZWxzZSBpZiAoYWxnX2sgJiBTU0xfa0RIcikKIAkJaT1TU0xfUEtFWV9ESF9SU0E7Ci0JZWxzZSBpZiAoa2FsZyAmIFNTTF9rREhkKQorCWVsc2UgaWYgKGFsZ19rICYgU1NMX2tESGQpCiAJCWk9U1NMX1BLRVlfREhfRFNBOwotCWVsc2UgaWYgKGthbGcgJiBTU0xfYURTUykKKwllbHNlIGlmIChhbGdfYSAmIFNTTF9hRFNTKQogCQlpPVNTTF9QS0VZX0RTQV9TSUdOOwotCWVsc2UgaWYgKGthbGcgJiBTU0xfYVJTQSkKKwllbHNlIGlmIChhbGdfYSAmIFNTTF9hUlNBKQogCQl7CiAJCWlmIChjLT5wa2V5c1tTU0xfUEtFWV9SU0FfRU5DXS54NTA5ID09IE5VTEwpCiAJCQlpPVNTTF9QS0VZX1JTQV9TSUdOOwogCQllbHNlCiAJCQlpPVNTTF9QS0VZX1JTQV9FTkM7CiAJCX0KLQllbHNlIGlmIChrYWxnICYgU1NMX2FLUkI1KQorCWVsc2UgaWYgKGFsZ19hICYgU1NMX2FLUkI1KQogCQl7CiAJCS8qIFZSUyBzb21ldGhpbmcgZWxzZSBoZXJlPyAqLwogCQlyZXR1cm4oTlVMTCk7CiAJCX0KLQllbHNlIC8qIGlmIChrYWxnICYgU1NMX2FOVUxMKSAqLworCWVsc2UgaWYgKGFsZ19hICYgU1NMX2FHT1NUOTQpIAorCQlpPVNTTF9QS0VZX0dPU1Q5NDsKKwllbHNlIGlmIChhbGdfYSAmIFNTTF9hR09TVDAxKQorCQlpPVNTTF9QS0VZX0dPU1QwMTsKKwllbHNlIC8qIGlmIChhbGdfYSAmIFNTTF9hTlVMTCkgKi8KIAkJewogCQlTU0xlcnIoU1NMX0ZfU1NMX0dFVF9TRVJWRVJfU0VORF9DRVJULEVSUl9SX0lOVEVSTkFMX0VSUk9SKTsKIAkJcmV0dXJuKE5VTEwpOwpAQCAtMTk5OCwxOCArMjE4MiwxOCBAQAogCXJldHVybihjLT5wa2V5c1tpXS54NTA5KTsKIAl9CiAKLUVWUF9QS0VZICpzc2xfZ2V0X3NpZ25fcGtleShTU0wgKnMsU1NMX0NJUEhFUiAqY2lwaGVyKQorRVZQX1BLRVkgKnNzbF9nZXRfc2lnbl9wa2V5KFNTTCAqcyxjb25zdCBTU0xfQ0lQSEVSICpjaXBoZXIpCiAJewotCXVuc2lnbmVkIGxvbmcgYWxnOworCXVuc2lnbmVkIGxvbmcgYWxnX2E7CiAJQ0VSVCAqYzsKIAotCWFsZz1jaXBoZXItPmFsZ29yaXRobXM7CisJYWxnX2EgPSBjaXBoZXItPmFsZ29yaXRobV9hdXRoOwogCWM9cy0+Y2VydDsKIAotCWlmICgoYWxnICYgU1NMX2FEU1MpICYmCisJaWYgKChhbGdfYSAmIFNTTF9hRFNTKSAmJgogCQkoYy0+cGtleXNbU1NMX1BLRVlfRFNBX1NJR05dLnByaXZhdGVrZXkgIT0gTlVMTCkpCiAJCXJldHVybihjLT5wa2V5c1tTU0xfUEtFWV9EU0FfU0lHTl0ucHJpdmF0ZWtleSk7Ci0JZWxzZSBpZiAoYWxnICYgU1NMX2FSU0EpCisJZWxzZSBpZiAoYWxnX2EgJiBTU0xfYVJTQSkKIAkJewogCQlpZiAoYy0+cGtleXNbU1NMX1BLRVlfUlNBX1NJR05dLnByaXZhdGVrZXkgIT0gTlVMTCkKIAkJCXJldHVybihjLT5wa2V5c1tTU0xfUEtFWV9SU0FfU0lHTl0ucHJpdmF0ZWtleSk7CkBAIC0yMDE4LDEwICsyMjAyLDEwIEBACiAJCWVsc2UKIAkJCXJldHVybihOVUxMKTsKIAkJfQotCWVsc2UgaWYgKChhbGcgJiBTU0xfYUVDRFNBKSAmJgorCWVsc2UgaWYgKChhbGdfYSAmIFNTTF9hRUNEU0EpICYmCiAJICAgICAgICAgKGMtPnBrZXlzW1NTTF9QS0VZX0VDQ10ucHJpdmF0ZWtleSAhPSBOVUxMKSkKIAkJcmV0dXJuKGMtPnBrZXlzW1NTTF9QS0VZX0VDQ10ucHJpdmF0ZWtleSk7Ci0JZWxzZSAvKiBpZiAoYWxnICYgU1NMX2FOVUxMKSAqLworCWVsc2UgLyogaWYgKGFsZ19hICYgU1NMX2FOVUxMKSAqLwogCQl7CiAJCVNTTGVycihTU0xfRl9TU0xfR0VUX1NJR05fUEtFWSxFUlJfUl9JTlRFUk5BTF9FUlJPUik7CiAJCXJldHVybihOVUxMKTsKQEAgLTIwMzYsMTQgKzIyMjAsMTQgQEAKIAkgKiBhbmQgaXQgd291bGQgYmUgcmF0aGVyIGhhcmQgdG8gZG8gYW55d2F5IDotKSAqLwogCWlmIChzLT5zZXNzaW9uLT5zZXNzaW9uX2lkX2xlbmd0aCA9PSAwKSByZXR1cm47CiAKLQlpPXMtPmN0eC0+c2Vzc2lvbl9jYWNoZV9tb2RlOworCWk9cy0+c2Vzc2lvbl9jdHgtPnNlc3Npb25fY2FjaGVfbW9kZTsKIAlpZiAoKGkgJiBtb2RlKSAmJiAoIXMtPmhpdCkKIAkJJiYgKChpICYgU1NMX1NFU1NfQ0FDSEVfTk9fSU5URVJOQUxfU1RPUkUpCi0JCSAgICB8fCBTU0xfQ1RYX2FkZF9zZXNzaW9uKHMtPmN0eCxzLT5zZXNzaW9uKSkKLQkJJiYgKHMtPmN0eC0+bmV3X3Nlc3Npb25fY2IgIT0gTlVMTCkpCisJCSAgICB8fCBTU0xfQ1RYX2FkZF9zZXNzaW9uKHMtPnNlc3Npb25fY3R4LHMtPnNlc3Npb24pKQorCQkmJiAocy0+c2Vzc2lvbl9jdHgtPm5ld19zZXNzaW9uX2NiICE9IE5VTEwpKQogCQl7CiAJCUNSWVBUT19hZGQoJnMtPnNlc3Npb24tPnJlZmVyZW5jZXMsMSxDUllQVE9fTE9DS19TU0xfU0VTU0lPTik7Ci0JCWlmICghcy0+Y3R4LT5uZXdfc2Vzc2lvbl9jYihzLHMtPnNlc3Npb24pKQorCQlpZiAoIXMtPnNlc3Npb25fY3R4LT5uZXdfc2Vzc2lvbl9jYihzLHMtPnNlc3Npb24pKQogCQkJU1NMX1NFU1NJT05fZnJlZShzLT5zZXNzaW9uKTsKIAkJfQogCkBAIC0yMDUyLDIwICsyMjM2LDIwIEBACiAJCSgoaSAmIG1vZGUpID09IG1vZGUpKQogCQl7CiAJCWlmICggICgoKG1vZGUgJiBTU0xfU0VTU19DQUNIRV9DTElFTlQpCi0JCQk/cy0+Y3R4LT5zdGF0cy5zZXNzX2Nvbm5lY3RfZ29vZAotCQkJOnMtPmN0eC0+c3RhdHMuc2Vzc19hY2NlcHRfZ29vZCkgJiAweGZmKSA9PSAweGZmKQorCQkJP3MtPnNlc3Npb25fY3R4LT5zdGF0cy5zZXNzX2Nvbm5lY3RfZ29vZAorCQkJOnMtPnNlc3Npb25fY3R4LT5zdGF0cy5zZXNzX2FjY2VwdF9nb29kKSAmIDB4ZmYpID09IDB4ZmYpCiAJCQl7Ci0JCQlTU0xfQ1RYX2ZsdXNoX3Nlc3Npb25zKHMtPmN0eCwodW5zaWduZWQgbG9uZyl0aW1lKE5VTEwpKTsKKwkJCVNTTF9DVFhfZmx1c2hfc2Vzc2lvbnMocy0+c2Vzc2lvbl9jdHgsKHVuc2lnbmVkIGxvbmcpdGltZShOVUxMKSk7CiAJCQl9CiAJCX0KIAl9CiAKLVNTTF9NRVRIT0QgKlNTTF9nZXRfc3NsX21ldGhvZChTU0wgKnMpCitjb25zdCBTU0xfTUVUSE9EICpTU0xfZ2V0X3NzbF9tZXRob2QoU1NMICpzKQogCXsKIAlyZXR1cm4ocy0+bWV0aG9kKTsKIAl9CiAKLWludCBTU0xfc2V0X3NzbF9tZXRob2QoU1NMICpzLFNTTF9NRVRIT0QgKm1ldGgpCitpbnQgU1NMX3NldF9zc2xfbWV0aG9kKFNTTCAqcywgY29uc3QgU1NMX01FVEhPRCAqbWV0aCkKIAl7CiAJaW50IGNvbm49IC0xOwogCWludCByZXQ9MTsKQEAgLTIyMDgsNiArMjM5Miw4IEBACiAJcy0+aGFuZHNoYWtlX2Z1bmM9cy0+bWV0aG9kLT5zc2xfYWNjZXB0OwogCS8qIGNsZWFyIHRoZSBjdXJyZW50IGNpcGhlciAqLwogCXNzbF9jbGVhcl9jaXBoZXJfY3R4KHMpOworCXNzbF9jbGVhcl9oYXNoX2N0eCgmcy0+cmVhZF9oYXNoKTsKKwlzc2xfY2xlYXJfaGFzaF9jdHgoJnMtPndyaXRlX2hhc2gpOwogCX0KIAogdm9pZCBTU0xfc2V0X2Nvbm5lY3Rfc3RhdGUoU1NMICpzKQpAQCAtMjIxOCw2ICsyNDA0LDggQEAKIAlzLT5oYW5kc2hha2VfZnVuYz1zLT5tZXRob2QtPnNzbF9jb25uZWN0OwogCS8qIGNsZWFyIHRoZSBjdXJyZW50IGNpcGhlciAqLwogCXNzbF9jbGVhcl9jaXBoZXJfY3R4KHMpOworCXNzbF9jbGVhcl9oYXNoX2N0eCgmcy0+cmVhZF9oYXNoKTsKKwlzc2xfY2xlYXJfaGFzaF9jdHgoJnMtPndyaXRlX2hhc2gpOwogCX0KIAogaW50IHNzbF91bmRlZmluZWRfZnVuY3Rpb24oU1NMICpzKQpAQCAtMjI2Miw3ICsyNDUwLDcgQEAKIAlYNTA5X05BTUUgKnhuOwogCVNTTCAqcmV0OwogCWludCBpOwotCQkgCisJCiAJaWYgKChyZXQ9U1NMX25ldyhTU0xfZ2V0X1NTTF9DVFgocykpKSA9PSBOVUxMKQogCSAgICByZXR1cm4oTlVMTCk7CiAKQEAgLTI0MzIsNyArMjYyMCw3IEBACiAJCXJldHVybihOVUxMKTsKIAl9CiAKLVNTTF9DSVBIRVIgKlNTTF9nZXRfY3VycmVudF9jaXBoZXIoY29uc3QgU1NMICpzKQorY29uc3QgU1NMX0NJUEhFUiAqU1NMX2dldF9jdXJyZW50X2NpcGhlcihjb25zdCBTU0wgKnMpCiAJewogCWlmICgocy0+c2Vzc2lvbiAhPSBOVUxMKSAmJiAocy0+c2Vzc2lvbi0+Y2lwaGVyICE9IE5VTEwpKQogCQlyZXR1cm4ocy0+c2Vzc2lvbi0+Y2lwaGVyKTsKQEAgLTI1MTAsNyArMjY5OCw3IEBACiAJCXMtPndiaW89QklPX3BvcChzLT53YmlvKTsKICNpZmRlZiBSRUZfQ0hFQ0sgLyogbm90IHRoZSB1c3VhbCBSRUZfQ0hFQ0ssIGJ1dCB0aGlzIGF2b2lkcyBhZGRpbmcgb25lIG1vcmUgcHJlcHJvY2Vzc29yIHN5bWJvbCAqLwogCQlhc3NlcnQocy0+d2JpbyAhPSBOVUxMKTsKLSNlbmRpZgkKKyNlbmRpZgogCX0KIAlCSU9fZnJlZShzLT5iYmlvKTsKIAlzLT5iYmlvPU5VTEw7CkBAIC0yNTk1LDcgKzI3ODMsNyBAQAogCiAvKiBPbmUgY29tcGlsZXIgKERpYWIgRENDKSBkb2Vzbid0IGxpa2UgYXJndW1lbnQgbmFtZXMgaW4gcmV0dXJuZWQKICAgIGZ1bmN0aW9uIHBvaW50ZXIuICAqLwotdm9pZCAoKlNTTF9nZXRfaW5mb19jYWxsYmFjayhjb25zdCBTU0wgKnNzbCkpKGNvbnN0IFNTTCAqIC8qc3NsKi8saW50IC8qdHlwZSovLGludCAvKnZhbCovKSAKK3ZvaWQgKCpTU0xfZ2V0X2luZm9fY2FsbGJhY2soY29uc3QgU1NMICpzc2wpKShjb25zdCBTU0wgKiAvKnNzbCovLGludCAvKnR5cGUqLyxpbnQgLyp2YWwqLykKIAl7CiAJcmV0dXJuIHNzbC0+aW5mb19jYWxsYmFjazsKIAl9CkBAIC0yNzE2LDEzICsyOTA0LDEzIEBACiAKICNpZm5kZWYgT1BFTlNTTF9OT19ESAogdm9pZCBTU0xfQ1RYX3NldF90bXBfZGhfY2FsbGJhY2soU1NMX0NUWCAqY3R4LERIICooKmRoKShTU0wgKnNzbCxpbnQgaXNfZXhwb3J0LAotCQkJCQkJCWludCBrZXlsZW5ndGgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQga2V5bGVuZ3RoKSkKIAl7CiAJU1NMX0NUWF9jYWxsYmFja19jdHJsKGN0eCxTU0xfQ1RSTF9TRVRfVE1QX0RIX0NCLCh2b2lkICgqKSh2b2lkKSlkaCk7CiAJfQogCiB2b2lkIFNTTF9zZXRfdG1wX2RoX2NhbGxiYWNrKFNTTCAqc3NsLERIICooKmRoKShTU0wgKnNzbCxpbnQgaXNfZXhwb3J0LAotCQkJCQkJaW50IGtleWxlbmd0aCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQga2V5bGVuZ3RoKSkKIAl7CiAJU1NMX2NhbGxiYWNrX2N0cmwoc3NsLFNTTF9DVFJMX1NFVF9UTVBfREhfQ0IsKHZvaWQgKCopKHZvaWQpKWRoKTsKIAl9CkBAIC0yNzMwLDE4ICsyOTE4LDEwOSBAQAogCiAjaWZuZGVmIE9QRU5TU0xfTk9fRUNESAogdm9pZCBTU0xfQ1RYX3NldF90bXBfZWNkaF9jYWxsYmFjayhTU0xfQ1RYICpjdHgsRUNfS0VZICooKmVjZGgpKFNTTCAqc3NsLGludCBpc19leHBvcnQsCi0JCQkJCQkJaW50IGtleWxlbmd0aCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGtleWxlbmd0aCkpCiAJewogCVNTTF9DVFhfY2FsbGJhY2tfY3RybChjdHgsU1NMX0NUUkxfU0VUX1RNUF9FQ0RIX0NCLCh2b2lkICgqKSh2b2lkKSllY2RoKTsKIAl9CiAKIHZvaWQgU1NMX3NldF90bXBfZWNkaF9jYWxsYmFjayhTU0wgKnNzbCxFQ19LRVkgKigqZWNkaCkoU1NMICpzc2wsaW50IGlzX2V4cG9ydCwKLQkJCQkJCWludCBrZXlsZW5ndGgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQga2V5bGVuZ3RoKSkKIAl7CiAJU1NMX2NhbGxiYWNrX2N0cmwoc3NsLFNTTF9DVFJMX1NFVF9UTVBfRUNESF9DQiwodm9pZCAoKikodm9pZCkpZWNkaCk7CiAJfQogI2VuZGlmCiAKKyNpZm5kZWYgT1BFTlNTTF9OT19QU0sKK2ludCBTU0xfQ1RYX3VzZV9wc2tfaWRlbnRpdHlfaGludChTU0xfQ1RYICpjdHgsIGNvbnN0IGNoYXIgKmlkZW50aXR5X2hpbnQpCisJeworCWlmIChpZGVudGl0eV9oaW50ICE9IE5VTEwgJiYgc3RybGVuKGlkZW50aXR5X2hpbnQpID4gUFNLX01BWF9JREVOVElUWV9MRU4pCisJCXsKKwkJU1NMZXJyKFNTTF9GX1NTTF9DVFhfVVNFX1BTS19JREVOVElUWV9ISU5ULCBTU0xfUl9EQVRBX0xFTkdUSF9UT09fTE9ORyk7CisJCXJldHVybiAwOworCQl9CisJaWYgKGN0eC0+cHNrX2lkZW50aXR5X2hpbnQgIT0gTlVMTCkKKwkJT1BFTlNTTF9mcmVlKGN0eC0+cHNrX2lkZW50aXR5X2hpbnQpOworCWlmIChpZGVudGl0eV9oaW50ICE9IE5VTEwpCisJCXsKKwkJY3R4LT5wc2tfaWRlbnRpdHlfaGludCA9IEJVRl9zdHJkdXAoaWRlbnRpdHlfaGludCk7CisJCWlmIChjdHgtPnBza19pZGVudGl0eV9oaW50ID09IE5VTEwpCisJCQlyZXR1cm4gMDsKKwkJfQorCWVsc2UKKwkJY3R4LT5wc2tfaWRlbnRpdHlfaGludCA9IE5VTEw7CisJcmV0dXJuIDE7CisJfQorCitpbnQgU1NMX3VzZV9wc2tfaWRlbnRpdHlfaGludChTU0wgKnMsIGNvbnN0IGNoYXIgKmlkZW50aXR5X2hpbnQpCisJeworCWlmIChzID09IE5VTEwpCisJCXJldHVybiAwOworCisJaWYgKHMtPnNlc3Npb24gPT0gTlVMTCkKKwkJcmV0dXJuIDE7IC8qIHNlc3Npb24gbm90IGNyZWF0ZWQgeWV0LCBpZ25vcmVkICovCisKKwlpZiAoaWRlbnRpdHlfaGludCAhPSBOVUxMICYmIHN0cmxlbihpZGVudGl0eV9oaW50KSA+IFBTS19NQVhfSURFTlRJVFlfTEVOKQorCQl7CisJCVNTTGVycihTU0xfRl9TU0xfVVNFX1BTS19JREVOVElUWV9ISU5ULCBTU0xfUl9EQVRBX0xFTkdUSF9UT09fTE9ORyk7CisJCXJldHVybiAwOworCQl9CisJaWYgKHMtPnNlc3Npb24tPnBza19pZGVudGl0eV9oaW50ICE9IE5VTEwpCisJCU9QRU5TU0xfZnJlZShzLT5zZXNzaW9uLT5wc2tfaWRlbnRpdHlfaGludCk7CisJaWYgKGlkZW50aXR5X2hpbnQgIT0gTlVMTCkKKwkJeworCQlzLT5zZXNzaW9uLT5wc2tfaWRlbnRpdHlfaGludCA9IEJVRl9zdHJkdXAoaWRlbnRpdHlfaGludCk7CisJCWlmIChzLT5zZXNzaW9uLT5wc2tfaWRlbnRpdHlfaGludCA9PSBOVUxMKQorCQkJcmV0dXJuIDA7CisJCX0KKwllbHNlCisJCXMtPnNlc3Npb24tPnBza19pZGVudGl0eV9oaW50ID0gTlVMTDsKKwlyZXR1cm4gMTsKKwl9CisKK2NvbnN0IGNoYXIgKlNTTF9nZXRfcHNrX2lkZW50aXR5X2hpbnQoY29uc3QgU1NMICpzKQorCXsKKwlpZiAocyA9PSBOVUxMIHx8IHMtPnNlc3Npb24gPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuKHMtPnNlc3Npb24tPnBza19pZGVudGl0eV9oaW50KTsKKwl9CisKK2NvbnN0IGNoYXIgKlNTTF9nZXRfcHNrX2lkZW50aXR5KGNvbnN0IFNTTCAqcykKKwl7CisJaWYgKHMgPT0gTlVMTCB8fCBzLT5zZXNzaW9uID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCXJldHVybihzLT5zZXNzaW9uLT5wc2tfaWRlbnRpdHkpOworCX0KKwordm9pZCBTU0xfc2V0X3Bza19jbGllbnRfY2FsbGJhY2soU1NMICpzLAorICAgIHVuc2lnbmVkIGludCAoKmNiKShTU0wgKnNzbCwgY29uc3QgY2hhciAqaGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaWRlbnRpdHksIHVuc2lnbmVkIGludCBtYXhfaWRlbnRpdHlfbGVuLCB1bnNpZ25lZCBjaGFyICpwc2ssCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtYXhfcHNrX2xlbikpCisJeworCXMtPnBza19jbGllbnRfY2FsbGJhY2sgPSBjYjsKKwl9CisKK3ZvaWQgU1NMX0NUWF9zZXRfcHNrX2NsaWVudF9jYWxsYmFjayhTU0xfQ1RYICpjdHgsCisgICAgdW5zaWduZWQgaW50ICgqY2IpKFNTTCAqc3NsLCBjb25zdCBjaGFyICpoaW50LAorICAgICAgICAgICAgICAgICAgICAgICBjaGFyICppZGVudGl0eSwgdW5zaWduZWQgaW50IG1heF9pZGVudGl0eV9sZW4sIHVuc2lnbmVkIGNoYXIgKnBzaywKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1heF9wc2tfbGVuKSkKKwl7CisJY3R4LT5wc2tfY2xpZW50X2NhbGxiYWNrID0gY2I7CisJfQorCit2b2lkIFNTTF9zZXRfcHNrX3NlcnZlcl9jYWxsYmFjayhTU0wgKnMsCisgICAgdW5zaWduZWQgaW50ICgqY2IpKFNTTCAqc3NsLCBjb25zdCBjaGFyICppZGVudGl0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqcHNrLCB1bnNpZ25lZCBpbnQgbWF4X3Bza19sZW4pKQorCXsKKwlzLT5wc2tfc2VydmVyX2NhbGxiYWNrID0gY2I7CisJfQorCit2b2lkIFNTTF9DVFhfc2V0X3Bza19zZXJ2ZXJfY2FsbGJhY2soU1NMX0NUWCAqY3R4LAorICAgIHVuc2lnbmVkIGludCAoKmNiKShTU0wgKnNzbCwgY29uc3QgY2hhciAqaWRlbnRpdHksCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnBzaywgdW5zaWduZWQgaW50IG1heF9wc2tfbGVuKSkKKwl7CisJY3R4LT5wc2tfc2VydmVyX2NhbGxiYWNrID0gY2I7CisJfQorI2VuZGlmCiAKIHZvaWQgU1NMX0NUWF9zZXRfbXNnX2NhbGxiYWNrKFNTTF9DVFggKmN0eCwgdm9pZCAoKmNiKShpbnQgd3JpdGVfcCwgaW50IHZlcnNpb24sIGludCBjb250ZW50X3R5cGUsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwgU1NMICpzc2wsIHZvaWQgKmFyZykpCiAJewpAQCAtMjc1Miw3ICszMDMxLDI1IEBACiAJU1NMX2NhbGxiYWNrX2N0cmwoc3NsLCBTU0xfQ1RSTF9TRVRfTVNHX0NBTExCQUNLLCAodm9pZCAoKikodm9pZCkpY2IpOwogCX0KIAorLyogQWxsb2NhdGVzIG5ldyBFVlBfTURfQ1RYIGFuZCBzZXRzIHBvaW50ZXIgdG8gaXQgaW50byBnaXZlbiBwb2ludGVyCisgKiB2YWlyYWJsZSwgZnJlZWluZyAgRVZQX01EX0NUWCBwcmV2aW91c2x5IHN0b3JlZCBpbiB0aGF0IHZhcmlhYmxlLCBpZgorICogYW55LiBJZiBFVlBfTUQgcG9pbnRlciBpcyBwYXNzZWQsIGluaXRpYWxpemVzIGN0eCB3aXRoIHRoaXMgbWQKKyAqIFJldHVybnMgbmV3bHkgYWxsb2NhdGVkIGN0eDsKKyAqLwogCitFVlBfTURfQ1RYICpzc2xfcmVwbGFjZV9oYXNoKEVWUF9NRF9DVFggKipoYXNoLGNvbnN0IEVWUF9NRCAqbWQpIAoreworCXNzbF9jbGVhcl9oYXNoX2N0eChoYXNoKTsKKwkqaGFzaCA9IEVWUF9NRF9DVFhfY3JlYXRlKCk7CisJaWYgKG1kKSBFVlBfRGlnZXN0SW5pdF9leCgqaGFzaCxtZCxOVUxMKTsKKwlyZXR1cm4gKmhhc2g7Cit9Cit2b2lkIHNzbF9jbGVhcl9oYXNoX2N0eChFVlBfTURfQ1RYICoqaGFzaCkgCit7CisKKwlpZiAoKmhhc2gpIEVWUF9NRF9DVFhfZGVzdHJveSgqaGFzaCk7CisJKmhhc2g9TlVMTDsKK30KIAogI2lmIGRlZmluZWQoX1dJTkRMTCkgJiYgZGVmaW5lZChPUEVOU1NMX1NZU19XSU4xNikKICNpbmNsdWRlICIuLi9jcnlwdG8vYmlvL2Jzc19maWxlLmMiCkBAIC0yNzYwLDMgKzMwNTcsNiBAQAogCiBJTVBMRU1FTlRfU1RBQ0tfT0YoU1NMX0NJUEhFUikKIElNUExFTUVOVF9TVEFDS19PRihTU0xfQ09NUCkKK0lNUExFTUVOVF9PQkpfQlNFQVJDSF9HTE9CQUxfQ01QX0ZOKFNTTF9DSVBIRVIsIFNTTF9DSVBIRVIsCisJCQkJICAgIHNzbF9jaXBoZXJfaWQpOworCmRpZmYgLS1naXQgYS9zc2wvc3NsX2xvY2wuaCBiL3NzbC9zc2xfbG9jbC5oCmluZGV4IGUzMDVkYjQuLjRjNzgzOTMgMTAwNjQ0Ci0tLSBhL3NzbC9zc2xfbG9jbC5oCisrKyBiL3NzbC9zc2xfbG9jbC5oCkBAIC01Niw3ICs1Niw3IEBACiAgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQogICovCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTEzLDYgKzExMywzMiBAQAogICogRUNDIGNpcGhlciBzdWl0ZSBzdXBwb3J0IGluIE9wZW5TU0wgb3JpZ2luYWxseSBkZXZlbG9wZWQgYnkgCiAgKiBTVU4gTUlDUk9TWVNURU1TLCBJTkMuLCBhbmQgY29udHJpYnV0ZWQgdG8gdGhlIE9wZW5TU0wgcHJvamVjdC4KICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAyMDA1IE5va2lhLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoZSBwb3J0aW9ucyBvZiB0aGUgYXR0YWNoZWQgc29mdHdhcmUgKCJDb250cmlidXRpb24iKSBpcyBkZXZlbG9wZWQgYnkKKyAqIE5va2lhIENvcnBvcmF0aW9uIGFuZCBpcyBsaWNlbnNlZCBwdXJzdWFudCB0byB0aGUgT3BlblNTTCBvcGVuIHNvdXJjZQorICogbGljZW5zZS4KKyAqCisgKiBUaGUgQ29udHJpYnV0aW9uLCBvcmlnaW5hbGx5IHdyaXR0ZW4gYnkgTWlrYSBLb3VzYSBhbmQgUGFzaSBFcm9uZW4gb2YKKyAqIE5va2lhIENvcnBvcmF0aW9uLCBjb25zaXN0cyBvZiB0aGUgIlBTSyIgKFByZS1TaGFyZWQgS2V5KSBjaXBoZXJzdWl0ZXMKKyAqIHN1cHBvcnQgKHNlZSBSRkMgNDI3OSkgdG8gT3BlblNTTC4KKyAqCisgKiBObyBwYXRlbnQgbGljZW5zZXMgb3Igb3RoZXIgcmlnaHRzIGV4Y2VwdCB0aG9zZSBleHByZXNzbHkgc3RhdGVkIGluCisgKiB0aGUgT3BlblNTTCBvcGVuIHNvdXJjZSBsaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCBncmFudGVkIG9yIHJlY2VpdmVkCisgKiBleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCwgb3Igb3RoZXJ3aXNlLgorICoKKyAqIE5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IE5va2lhIHRoYXQgdGhlIENvbnRyaWJ1dGlvbiBkb2VzIG5vdAorICogaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIGFueSB0aGlyZAorICogcGFydHkgb3IgdGhhdCB0aGUgbGljZW5zZSBwcm92aWRlcyB5b3Ugd2l0aCBhbGwgdGhlIG5lY2Vzc2FyeSByaWdodHMKKyAqIHRvIG1ha2UgdXNlIG9mIHRoZSBDb250cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORC4gSU4KKyAqIEFERElUSU9OIFRPIFRIRSBESVNDTEFJTUVSUyBJTkNMVURFRCBJTiBUSEUgTElDRU5TRSwgTk9LSUEKKyAqIFNQRUNJRklDQUxMWSBESVNDTEFJTVMgQU5ZIExJQUJJTElUWSBGT1IgQ0xBSU1TIEJST1VHSFQgQlkgWU9VIE9SIEFOWQorICogT1RIRVIgRU5USVRZIEJBU0VEIE9OIElORlJJTkdFTUVOVCBPRiBJTlRFTExFQ1RVQUwgUFJPUEVSVFkgUklHSFRTIE9SCisgKiBPVEhFUldJU0UuCisgKi8KIAogI2lmbmRlZiBIRUFERVJfU1NMX0xPQ0xfSAogI2RlZmluZSBIRUFERVJfU1NMX0xPQ0xfSApAQCAtMjUxLDU4ICsyNzcsODQgQEAKICAqIHRoYXQgdGhlIGRpZmZlcmVudCBlbnRpdGllcyB3aXRoaW4gYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZToKICAqIE9OTFkgT05FIEJJVCBQRVIgTUFTSyBDQU4gQkUgU0VUIEFUIEEgVElNRS4KICAqLwotI2RlZmluZSBTU0xfTUtFWV9NQVNLCQkweDAwMDAwMEZGTAorCisvKiBCaXRzIGZvciBhbGdvcml0aG1fbWtleSAoa2V5IGV4Y2hhbmdlIGFsZ29yaXRobSkgKi8KICNkZWZpbmUgU1NMX2tSU0EJCTB4MDAwMDAwMDFMIC8qIFJTQSBrZXkgZXhjaGFuZ2UgKi8KLSNkZWZpbmUgU1NMX2tESHIJCTB4MDAwMDAwMDJMIC8qIERIIGNlcnQgUlNBIENBIGNlcnQgKi8KLSNkZWZpbmUgU1NMX2tESGQJCTB4MDAwMDAwMDRMIC8qIERIIGNlcnQgRFNBIENBIGNlcnQgKi8KLSNkZWZpbmUgU1NMX2tGWkEJCTB4MDAwMDAwMDhMCi0jZGVmaW5lIFNTTF9rRURICQkweDAwMDAwMDEwTCAvKiB0bXAgREgga2V5IG5vIERIIGNlcnQgKi8KLSNkZWZpbmUgU1NMX2tLUkI1CQkweDAwMDAwMDIwTCAvKiBLZXJiZXJvczUga2V5IGV4Y2hhbmdlICovCi0jZGVmaW5lIFNTTF9rRUNESCAgICAgICAgICAgICAgIDB4MDAwMDAwNDBMIC8qIEVDREggdy8gbG9uZy10ZXJtIGtleXMgKi8KLSNkZWZpbmUgU1NMX2tFQ0RIRSAgICAgICAgICAgICAgMHgwMDAwMDA4MEwgLyogZXBoZW1lcmFsIEVDREggKi8KLSNkZWZpbmUgU1NMX0VESAkJCShTU0xfa0VESHwoU1NMX0FVVEhfTUFTS15TU0xfYU5VTEwpKQorI2RlZmluZSBTU0xfa0RIcgkJMHgwMDAwMDAwMkwgLyogREggY2VydCwgUlNBIENBIGNlcnQgKi8gLyogbm8gc3VjaCBjaXBoZXJzdWl0ZXMgc3VwcG9ydGVkISAqLworI2RlZmluZSBTU0xfa0RIZAkJMHgwMDAwMDAwNEwgLyogREggY2VydCwgRFNBIENBIGNlcnQgKi8gLyogbm8gc3VjaCBjaXBoZXJzdWl0ZSBzdXBwb3J0ZWQhICovCisjZGVmaW5lIFNTTF9rRURICQkweDAwMDAwMDA4TCAvKiB0bXAgREgga2V5IG5vIERIIGNlcnQgKi8KKyNkZWZpbmUgU1NMX2tLUkI1CQkweDAwMDAwMDEwTCAvKiBLZXJiZXJvczUga2V5IGV4Y2hhbmdlICovCisjZGVmaW5lIFNTTF9rRUNESHIJCTB4MDAwMDAwMjBMIC8qIEVDREggY2VydCwgUlNBIENBIGNlcnQgKi8KKyNkZWZpbmUgU1NMX2tFQ0RIZQkJMHgwMDAwMDA0MEwgLyogRUNESCBjZXJ0LCBFQ0RTQSBDQSBjZXJ0ICovCisjZGVmaW5lIFNTTF9rRUVDREgJCTB4MDAwMDAwODBMIC8qIGVwaGVtZXJhbCBFQ0RIICovCisjZGVmaW5lIFNTTF9rUFNLCQkweDAwMDAwMTAwTCAvKiBQU0sgKi8KKyNkZWZpbmUgU1NMX2tHT1NUICAgICAgIDB4MDAwMDAyMDBMIC8qIEdPU1Qga2V5IGV4Y2hhbmdlICovCiAKLSNkZWZpbmUgU1NMX0FVVEhfTUFTSwkJMHgwMDAwN0YwMEwKLSNkZWZpbmUgU1NMX2FSU0EJCTB4MDAwMDAxMDBMIC8qIEF1dGhlbnRpY2F0ZSB3aXRoIFJTQSAqLwotI2RlZmluZSBTU0xfYURTUyAJCTB4MDAwMDAyMDBMIC8qIEF1dGhlbnRpY2F0ZSB3aXRoIERTUyAqLwotI2RlZmluZSBTU0xfRFNTIAkJU1NMX2FEU1MKLSNkZWZpbmUgU1NMX2FGWkEgCQkweDAwMDAwNDAwTAotI2RlZmluZSBTU0xfYU5VTEwgCQkweDAwMDAwODAwTCAvKiBubyBBdXRoZW50aWNhdGUsIEFESCAqLwotI2RlZmluZSBTU0xfYURIIAkJMHgwMDAwMTAwMEwgLyogbm8gQXV0aGVudGljYXRlLCBBREggKi8KLSNkZWZpbmUgU1NMX2FLUkI1ICAgICAgICAgICAgICAgMHgwMDAwMjAwMEwgLyogQXV0aGVudGljYXRlIHdpdGggS1JCNSAqLwotI2RlZmluZSBTU0xfYUVDRFNBICAgICAgICAgICAgICAweDAwMDA0MDAwTCAvKiBBdXRoZW50aWNhdGUgd2l0aCBFQ0RTQSAqLworLyogQml0cyBmb3IgYWxnb3JpdGhtX2F1dGggKHNlcnZlciBhdXRoZW50aWNhdGlvbikgKi8KKyNkZWZpbmUgU1NMX2FSU0EJCTB4MDAwMDAwMDFMIC8qIFJTQSBhdXRoICovCisjZGVmaW5lIFNTTF9hRFNTIAkJMHgwMDAwMDAwMkwgLyogRFNTIGF1dGggKi8KKyNkZWZpbmUgU1NMX2FOVUxMIAkJMHgwMDAwMDAwNEwgLyogbm8gYXV0aCAoaS5lLiB1c2UgQURIIG9yIEFFQ0RIKSAqLworI2RlZmluZSBTU0xfYURIIAkJMHgwMDAwMDAwOEwgLyogRml4ZWQgREggYXV0aCAoa0RIZCBvciBrREhyKSAqLyAvKiBubyBzdWNoIGNpcGhlcnN1aXRlcyBzdXBwb3J0ZWQhICovCisjZGVmaW5lIFNTTF9hRUNESCAJCTB4MDAwMDAwMTBMIC8qIEZpeGVkIEVDREggYXV0aCAoa0VDREhlIG9yIGtFQ0RIcikgKi8KKyNkZWZpbmUgU1NMX2FLUkI1ICAgICAgICAgICAgICAgMHgwMDAwMDAyMEwgLyogS1JCNSBhdXRoICovCisjZGVmaW5lIFNTTF9hRUNEU0EgICAgICAgICAgICAgIDB4MDAwMDAwNDBMIC8qIEVDRFNBIGF1dGgqLworI2RlZmluZSBTU0xfYVBTSyAgICAgICAgICAgICAgICAweDAwMDAwMDgwTCAvKiBQU0sgYXV0aCAqLworI2RlZmluZSBTU0xfYUdPU1Q5NAkJCQkweDAwMDAwMTAwTCAvKiBHT1NUIFIgMzQuMTAtOTQgc2lnbmF0dXJlIGF1dGggKi8KKyNkZWZpbmUgU1NMX2FHT1NUMDEgCQkJMHgwMDAwMDIwMEwgLyogR09TVCBSIDM0LjEwLTIwMDEgc2lnbmF0dXJlIGF1dGggKi8KIAotI2RlZmluZSBTU0xfTlVMTAkJKFNTTF9lTlVMTCkKLSNkZWZpbmUgU1NMX0FESAkJCShTU0xfa0VESHxTU0xfYU5VTEwpCi0jZGVmaW5lIFNTTF9SU0EJCQkoU1NMX2tSU0F8U1NMX2FSU0EpCi0jZGVmaW5lIFNTTF9ESAkJCShTU0xfa0RIcnxTU0xfa0RIZHxTU0xfa0VESCkKLSNkZWZpbmUgU1NMX0VDREgJCShTU0xfa0VDREh8U1NMX2tFQ0RIRSkKLSNkZWZpbmUgU1NMX0ZaQQkJCShTU0xfYUZaQXxTU0xfa0ZaQXxTU0xfZUZaQSkKLSNkZWZpbmUgU1NMX0tSQjUgICAgICAgICAgICAgICAgKFNTTF9rS1JCNXxTU0xfYUtSQjUpCiAKLSNkZWZpbmUgU1NMX0VOQ19NQVNLCQkweDFDM0Y4MDAwTAotI2RlZmluZSBTU0xfREVTCQkJMHgwMDAwODAwMEwKLSNkZWZpbmUgU1NMXzNERVMJCTB4MDAwMTAwMDBMCi0jZGVmaW5lIFNTTF9SQzQJCQkweDAwMDIwMDAwTAotI2RlZmluZSBTU0xfUkMyCQkJMHgwMDA0MDAwMEwKLSNkZWZpbmUgU1NMX0lERUEJCTB4MDAwODAwMDBMCi0jZGVmaW5lIFNTTF9lRlpBCQkweDAwMTAwMDAwTAotI2RlZmluZSBTU0xfZU5VTEwJCTB4MDAyMDAwMDBMCi0jZGVmaW5lIFNTTF9BRVMJCQkweDA0MDAwMDAwTAotI2RlZmluZSBTU0xfQ0FNRUxMSUEJCTB4MDgwMDAwMDBMCi0jZGVmaW5lIFNTTF9TRUVEICAgICAgICAgIAkweDEwMDAwMDAwTAorLyogQml0cyBmb3IgYWxnb3JpdGhtX2VuYyAoc3ltbWV0cmljIGVuY3J5cHRpb24pICovCisjZGVmaW5lIFNTTF9ERVMJCQkweDAwMDAwMDAxTAorI2RlZmluZSBTU0xfM0RFUwkJMHgwMDAwMDAwMkwKKyNkZWZpbmUgU1NMX1JDNAkJCTB4MDAwMDAwMDRMCisjZGVmaW5lIFNTTF9SQzIJCQkweDAwMDAwMDA4TAorI2RlZmluZSBTU0xfSURFQQkJMHgwMDAwMDAxMEwKKyNkZWZpbmUgU1NMX2VOVUxMCQkweDAwMDAwMDIwTAorI2RlZmluZSBTU0xfQUVTMTI4CQkweDAwMDAwMDQwTAorI2RlZmluZSBTU0xfQUVTMjU2CQkweDAwMDAwMDgwTAorI2RlZmluZSBTU0xfQ0FNRUxMSUExMjgJCTB4MDAwMDAxMDBMCisjZGVmaW5lIFNTTF9DQU1FTExJQTI1NgkJMHgwMDAwMDIwMEwKKyNkZWZpbmUgU1NMX2VHT1NUMjgxNDc4OUNOVAkweDAwMDAwNDAwTAorI2RlZmluZSBTU0xfU0VFRAkJMHgwMDAwMDgwMEwKIAotI2RlZmluZSBTU0xfTUFDX01BU0sJCTB4MDBjMDAwMDBMCi0jZGVmaW5lIFNTTF9NRDUJCQkweDAwNDAwMDAwTAotI2RlZmluZSBTU0xfU0hBMQkJMHgwMDgwMDAwMEwKLSNkZWZpbmUgU1NMX1NIQQkJCShTU0xfU0hBMSkKKyNkZWZpbmUgU1NMX0FFUyAgICAgICAgCQkoU1NMX0FFUzEyOHxTU0xfQUVTMjU2KQorI2RlZmluZSBTU0xfQ0FNRUxMSUEJCShTU0xfQ0FNRUxMSUExMjh8U1NMX0NBTUVMTElBMjU2KQogCi0jZGVmaW5lIFNTTF9TU0xfTUFTSwkJMHgwMzAwMDAwMEwKLSNkZWZpbmUgU1NMX1NTTFYyCQkweDAxMDAwMDAwTAotI2RlZmluZSBTU0xfU1NMVjMJCTB4MDIwMDAwMDBMCisKKy8qIEJpdHMgZm9yIGFsZ29yaXRobV9tYWMgKHN5bW1ldHJpYyBhdXRoZW50aWNhdGlvbikgKi8KKyNkZWZpbmUgU1NMX01ENQkJCTB4MDAwMDAwMDFMCisjZGVmaW5lIFNTTF9TSEExCQkweDAwMDAwMDAyTAorI2RlZmluZSBTU0xfR09TVDk0ICAgICAgMHgwMDAwMDAwNEwKKyNkZWZpbmUgU1NMX0dPU1Q4OU1BQyAgIDB4MDAwMDAwMDhMCisKKy8qIEJpdHMgZm9yIGFsZ29yaXRobV9zc2wgKHByb3RvY29sIHZlcnNpb24pICovCisjZGVmaW5lIFNTTF9TU0xWMgkJMHgwMDAwMDAwMUwKKyNkZWZpbmUgU1NMX1NTTFYzCQkweDAwMDAwMDAyTAogI2RlZmluZSBTU0xfVExTVjEJCVNTTF9TU0xWMwkvKiBmb3Igbm93ICovCiAKLS8qIHdlIGhhdmUgdXNlZCAxZmZmZmZmZiAtIDMgYml0cyBsZWZ0IHRvIGdvLiAqLworCisvKiBCaXRzIGZvciBhbGdvcml0aG0yIChoYW5kc2hha2UgZGlnZXN0cyBhbmQgb3RoZXIgZXh0cmEgZmxhZ3MpICovCisKKyNkZWZpbmUgU1NMX0hBTkRTSEFLRV9NQUNfTUQ1IDB4MTAKKyNkZWZpbmUgU1NMX0hBTkRTSEFLRV9NQUNfU0hBIDB4MjAKKyNkZWZpbmUgU1NMX0hBTkRTSEFLRV9NQUNfR09TVDk0IDB4NDAKKyNkZWZpbmUgU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVCAoU1NMX0hBTkRTSEFLRV9NQUNfTUQ1IHwgU1NMX0hBTkRTSEFLRV9NQUNfU0hBKQorCisvKiBXaGVuIGFkZGluZyBuZXcgZGlnZXN0IGluIHRoZSBzc2xfY2lwaC5jIGFuZCBpbmNyZW1lbnQgU1NNX01EX05VTV9JRFgKKyAqIG1ha2Ugc3VyZSB0byB1cGRhdGUgdGhpcyBjb25zdGFudCB0b28gKi8KKyNkZWZpbmUgU1NMX01BWF9ESUdFU1QgNAorCisjZGVmaW5lIFRMUzFfUFJGX0RHU1RfU0hJRlQgOAorI2RlZmluZSBUTFMxX1BSRl9NRDUgKFNTTF9IQU5EU0hBS0VfTUFDX01ENSA8PCBUTFMxX1BSRl9ER1NUX1NISUZUKQorI2RlZmluZSBUTFMxX1BSRl9TSEExIChTU0xfSEFORFNIQUtFX01BQ19TSEEgPDwgVExTMV9QUkZfREdTVF9TSElGVCkKKyNkZWZpbmUgVExTMV9QUkZfR09TVDk0IChTU0xfSEFORFNIQUtFX01BQ19HT1NUOTQgPDwgVExTMV9QUkZfREdTVF9TSElGVCkKKyNkZWZpbmUgVExTMV9QUkYgKFRMUzFfUFJGX01ENSB8IFRMUzFfUFJGX1NIQTEpCisKKy8qIFN0cmVhbSBNQUMgZm9yIEdPU1QgY2lwaGVyc3VpdGVzIGZyb20gY3J5cHRvcHJvIGRyYWZ0CisgKiAoY3VycmVudGx5IHRoaXMgYWxzbyBnb2VzIGludG8gYWxnb3JpdGhtMikgKi8KKyNkZWZpbmUgVExTMV9TVFJFQU1fTUFDIDB4MDQKKworCiAKIC8qCiAgKiBFeHBvcnQgYW5kIGNpcGhlciBzdHJlbmd0aCBpbmZvcm1hdGlvbi4gRm9yIGVhY2ggY2lwaGVyIHdlIGhhdmUgdG8gZGVjaWRlCkBAIC0zMjAsMTAgKzM3MiwxMSBAQAogICogYmUgcG9zc2libGUuCiAgKi8KICNkZWZpbmUgU1NMX0VYUF9NQVNLCQkweDAwMDAwMDAzTAorI2RlZmluZSBTU0xfU1RST05HX01BU0sJCTB4MDAwMDAxZmNMCisKICNkZWZpbmUgU1NMX05PVF9FWFAJCTB4MDAwMDAwMDFMCiAjZGVmaW5lIFNTTF9FWFBPUlQJCTB4MDAwMDAwMDJMCiAKLSNkZWZpbmUgU1NMX1NUUk9OR19NQVNLCQkweDAwMDAwMGZjTAogI2RlZmluZSBTU0xfU1RST05HX05PTkUJCTB4MDAwMDAwMDRMCiAjZGVmaW5lIFNTTF9FWFA0MAkJMHgwMDAwMDAwOEwKICNkZWZpbmUgU1NMX01JQ1JPCQkoU1NMX0VYUDQwKQpAQCAtMzU3LDE3ICs0MTAsMTQgQEAKICNkZWZpbmUgU1NMX0NfSVNfRVhQT1JUNDAoYykJU1NMX0lTX0VYUE9SVDQwKChjKS0+YWxnb19zdHJlbmd0aCkKIAogI2RlZmluZSBTU0xfRVhQT1JUX0tFWUxFTkdUSChhLHMpCShTU0xfSVNfRVhQT1JUNDAocykgPyA1IDogXAotCQkJCSAoKGEpJlNTTF9FTkNfTUFTSykgPT0gU1NMX0RFUyA/IDggOiA3KQorCQkJCSAoYSkgPT0gU1NMX0RFUyA/IDggOiA3KQogI2RlZmluZSBTU0xfRVhQT1JUX1BLRVlMRU5HVEgoYSkgKFNTTF9JU19FWFBPUlQ0MChhKSA/IDUxMiA6IDEwMjQpCi0jZGVmaW5lIFNTTF9DX0VYUE9SVF9LRVlMRU5HVEgoYykJU1NMX0VYUE9SVF9LRVlMRU5HVEgoKGMpLT5hbGdvcml0aG1zLCBcCisjZGVmaW5lIFNTTF9DX0VYUE9SVF9LRVlMRU5HVEgoYykJU1NMX0VYUE9SVF9LRVlMRU5HVEgoKGMpLT5hbGdvcml0aG1fZW5jLCBcCiAJCQkJKGMpLT5hbGdvX3N0cmVuZ3RoKQogI2RlZmluZSBTU0xfQ19FWFBPUlRfUEtFWUxFTkdUSChjKQlTU0xfRVhQT1JUX1BLRVlMRU5HVEgoKGMpLT5hbGdvX3N0cmVuZ3RoKQogCiAKLSNkZWZpbmUgU1NMX0FMTAkJCTB4ZmZmZmZmZmZMCi0jZGVmaW5lIFNTTF9BTExfQ0lQSEVSUwkJKFNTTF9NS0VZX01BU0t8U1NMX0FVVEhfTUFTS3xTU0xfRU5DX01BU0t8XAotCQkJCVNTTF9NQUNfTUFTSykKLSNkZWZpbmUgU1NMX0FMTF9TVFJFTkdUSFMJKFNTTF9FWFBfTUFTS3xTU0xfU1RST05HX01BU0spCisKIAogLyogTW9zdGx5IGZvciBTU0x2MyAqLwogI2RlZmluZSBTU0xfUEtFWV9SU0FfRU5DCTAKQEAgLTM3Niw3ICs0MjYsOSBAQAogI2RlZmluZSBTU0xfUEtFWV9ESF9SU0EJCTMKICNkZWZpbmUgU1NMX1BLRVlfREhfRFNBCQk0CiAjZGVmaW5lIFNTTF9QS0VZX0VDQyAgICAgICAgICAgIDUKLSNkZWZpbmUgU1NMX1BLRVlfTlVNCQk2CisjZGVmaW5lIFNTTF9QS0VZX0dPU1Q5NAkJNgorI2RlZmluZSBTU0xfUEtFWV9HT1NUMDEJCTcKKyNkZWZpbmUgU1NMX1BLRVlfTlVNCQk4CiAKIC8qIFNTTF9rUlNBIDwtIFJTQV9FTkMgfCAoUlNBX1RNUCAmIFJTQV9TSUdOKSB8CiAgKiAJICAgIDwtIChFWFBPUlQgJiAoUlNBX0VOQyB8IFJTQV9UTVApICYgUlNBX1NJR04pCkBAIC00MTcsOCArNDY5LDEwIEBACiAJLyogVGhlIGZvbGxvd2luZyBtYXNrcyBhcmUgZm9yIHRoZSBrZXkgYW5kIGF1dGgKIAkgKiBhbGdvcml0aG1zIHRoYXQgYXJlIHN1cHBvcnRlZCBieSB0aGUgY2VydHMgYmVsb3cgKi8KIAlpbnQgdmFsaWQ7Ci0JdW5zaWduZWQgbG9uZyBtYXNrOwotCXVuc2lnbmVkIGxvbmcgZXhwb3J0X21hc2s7CisJdW5zaWduZWQgbG9uZyBtYXNrX2s7CisJdW5zaWduZWQgbG9uZyBtYXNrX2E7CisJdW5zaWduZWQgbG9uZyBleHBvcnRfbWFza19rOworCXVuc2lnbmVkIGxvbmcgZXhwb3J0X21hc2tfYTsKICNpZm5kZWYgT1BFTlNTTF9OT19SU0EKIAlSU0EgKnJzYV90bXA7CiAJUlNBICooKnJzYV90bXBfY2IpKFNTTCAqc3NsLGludCBpc19leHBvcnQsaW50IGtleXNpemUpOwpAQCAtNDkyLDkgKzU0Niw5IEBACiAJaW50ICgqc2V0dXBfa2V5X2Jsb2NrKShTU0wgKik7CiAJaW50ICgqZ2VuZXJhdGVfbWFzdGVyX3NlY3JldCkoU1NMICosIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqLCBpbnQpOwogCWludCAoKmNoYW5nZV9jaXBoZXJfc3RhdGUpKFNTTCAqLCBpbnQpOwotCWludCAoKmZpbmFsX2ZpbmlzaF9tYWMpKFNTTCAqLCBFVlBfTURfQ1RYICosIEVWUF9NRF9DVFggKiwgY29uc3QgY2hhciAqLCBpbnQsIHVuc2lnbmVkIGNoYXIgKik7CisJaW50ICgqZmluYWxfZmluaXNoX21hYykoU1NMICosICBjb25zdCBjaGFyICosIGludCwgdW5zaWduZWQgY2hhciAqKTsKIAlpbnQgZmluaXNoX21hY19sZW5ndGg7Ci0JaW50ICgqY2VydF92ZXJpZnlfbWFjKShTU0wgKiwgRVZQX01EX0NUWCAqLCB1bnNpZ25lZCBjaGFyICopOworCWludCAoKmNlcnRfdmVyaWZ5X21hYykoU1NMICosIGludCwgdW5zaWduZWQgY2hhciAqKTsKIAljb25zdCBjaGFyICpjbGllbnRfZmluaXNoZWRfbGFiZWw7CiAJaW50IGNsaWVudF9maW5pc2hlZF9sYWJlbF9sZW47CiAJY29uc3QgY2hhciAqc2VydmVyX2ZpbmlzaGVkX2xhYmVsOwpAQCAtNTEyLDI0ICs1NjYsMzUgQEAKIAl9IFNTTDNfQ09NUDsKICNlbmRpZgogCisjaWZuZGVmIE9QRU5TU0xfTk9fQlVGX0ZSRUVMSVNUUwordHlwZWRlZiBzdHJ1Y3Qgc3NsM19idWZfZnJlZWxpc3Rfc3QKKwl7CisJc2l6ZV90IGNodW5rbGVuOworCXVuc2lnbmVkIGludCBsZW47CisJc3RydWN0IHNzbDNfYnVmX2ZyZWVsaXN0X2VudHJ5X3N0ICpoZWFkOworCX0gU1NMM19CVUZfRlJFRUxJU1Q7CisKK3R5cGVkZWYgc3RydWN0IHNzbDNfYnVmX2ZyZWVsaXN0X2VudHJ5X3N0CisJeworCXN0cnVjdCBzc2wzX2J1Zl9mcmVlbGlzdF9lbnRyeV9zdCAqbmV4dDsKKwl9IFNTTDNfQlVGX0ZSRUVMSVNUX0VOVFJZOworI2VuZGlmCisKIGV4dGVybiBTU0wzX0VOQ19NRVRIT0Qgc3NsM191bmRlZl9lbmNfbWV0aG9kOwotT1BFTlNTTF9FWFRFUk4gU1NMX0NJUEhFUiBzc2wyX2NpcGhlcnNbXTsKK09QRU5TU0xfRVhURVJOIGNvbnN0IFNTTF9DSVBIRVIgc3NsMl9jaXBoZXJzW107CiBPUEVOU1NMX0VYVEVSTiBTU0xfQ0lQSEVSIHNzbDNfY2lwaGVyc1tdOwogCiAKIFNTTF9NRVRIT0QgKnNzbF9iYWRfbWV0aG9kKGludCB2ZXIpOwotU1NMX01FVEhPRCAqc3NsdjJfYmFzZV9tZXRob2Qodm9pZCk7Ci1TU0xfTUVUSE9EICpzc2x2MjNfYmFzZV9tZXRob2Qodm9pZCk7Ci1TU0xfTUVUSE9EICpzc2x2M19iYXNlX21ldGhvZCh2b2lkKTsKIAogZXh0ZXJuIFNTTDNfRU5DX01FVEhPRCBUTFN2MV9lbmNfZGF0YTsKIGV4dGVybiBTU0wzX0VOQ19NRVRIT0QgU1NMdjNfZW5jX2RhdGE7CiBleHRlcm4gU1NMM19FTkNfTUVUSE9EIERUTFN2MV9lbmNfZGF0YTsKIAogI2RlZmluZSBJTVBMRU1FTlRfdGxzMV9tZXRoX2Z1bmMoZnVuY19uYW1lLCBzX2FjY2VwdCwgc19jb25uZWN0LCBzX2dldF9tZXRoKSBcCi1TU0xfTUVUSE9EICpmdW5jX25hbWUodm9pZCkgIFwKK2NvbnN0IFNTTF9NRVRIT0QgKmZ1bmNfbmFtZSh2b2lkKSAgXAogCXsgXAotCXN0YXRpYyBTU0xfTUVUSE9EIGZ1bmNfbmFtZSMjX2RhdGE9IHsgXAorCXN0YXRpYyBjb25zdCBTU0xfTUVUSE9EIGZ1bmNfbmFtZSMjX2RhdGE9IHsgXAogCQlUTFMxX1ZFUlNJT04sIFwKIAkJdGxzMV9uZXcsIFwKIAkJdGxzMV9jbGVhciwgXApAQCAtNTY0LDkgKzYyOSw5IEBACiAJfQogCiAjZGVmaW5lIElNUExFTUVOVF9zc2wzX21ldGhfZnVuYyhmdW5jX25hbWUsIHNfYWNjZXB0LCBzX2Nvbm5lY3QsIHNfZ2V0X21ldGgpIFwKLVNTTF9NRVRIT0QgKmZ1bmNfbmFtZSh2b2lkKSAgXAorY29uc3QgU1NMX01FVEhPRCAqZnVuY19uYW1lKHZvaWQpICBcCiAJeyBcCi0Jc3RhdGljIFNTTF9NRVRIT0QgZnVuY19uYW1lIyNfZGF0YT0geyBcCisJc3RhdGljIGNvbnN0IFNTTF9NRVRIT0QgZnVuY19uYW1lIyNfZGF0YT0geyBcCiAJCVNTTDNfVkVSU0lPTiwgXAogCQlzc2wzX25ldywgXAogCQlzc2wzX2NsZWFyLCBcCkBAIC02MDEsOSArNjY2LDkgQEAKIAl9CiAKICNkZWZpbmUgSU1QTEVNRU5UX3NzbDIzX21ldGhfZnVuYyhmdW5jX25hbWUsIHNfYWNjZXB0LCBzX2Nvbm5lY3QsIHNfZ2V0X21ldGgpIFwKLVNTTF9NRVRIT0QgKmZ1bmNfbmFtZSh2b2lkKSAgXAorY29uc3QgU1NMX01FVEhPRCAqZnVuY19uYW1lKHZvaWQpICBcCiAJeyBcCi0Jc3RhdGljIFNTTF9NRVRIT0QgZnVuY19uYW1lIyNfZGF0YT0geyBcCisJc3RhdGljIGNvbnN0IFNTTF9NRVRIT0QgZnVuY19uYW1lIyNfZGF0YT0geyBcCiAJVExTMV9WRVJTSU9OLCBcCiAJdGxzMV9uZXcsIFwKIAl0bHMxX2NsZWFyLCBcCkBAIC02MzgsOSArNzAzLDkgQEAKIAl9CiAKICNkZWZpbmUgSU1QTEVNRU5UX3NzbDJfbWV0aF9mdW5jKGZ1bmNfbmFtZSwgc19hY2NlcHQsIHNfY29ubmVjdCwgc19nZXRfbWV0aCkgXAotU1NMX01FVEhPRCAqZnVuY19uYW1lKHZvaWQpICBcCitjb25zdCBTU0xfTUVUSE9EICpmdW5jX25hbWUodm9pZCkgIFwKIAl7IFwKLQlzdGF0aWMgU1NMX01FVEhPRCBmdW5jX25hbWUjI19kYXRhPSB7IFwKKwlzdGF0aWMgY29uc3QgU1NMX01FVEhPRCBmdW5jX25hbWUjI19kYXRhPSB7IFwKIAkJU1NMMl9WRVJTSU9OLCBcCiAJCXNzbDJfbmV3LAkvKiBsb2NhbCAqLyBcCiAJCXNzbDJfY2xlYXIsCS8qIGxvY2FsICovIFwKQEAgLTY3NSw5ICs3NDAsOSBAQAogCX0KIAogI2RlZmluZSBJTVBMRU1FTlRfZHRsczFfbWV0aF9mdW5jKGZ1bmNfbmFtZSwgc19hY2NlcHQsIHNfY29ubmVjdCwgc19nZXRfbWV0aCkgXAotU1NMX01FVEhPRCAqZnVuY19uYW1lKHZvaWQpICBcCitjb25zdCBTU0xfTUVUSE9EICpmdW5jX25hbWUodm9pZCkgIFwKIAl7IFwKLQlzdGF0aWMgU1NMX01FVEhPRCBmdW5jX25hbWUjI19kYXRhPSB7IFwKKwlzdGF0aWMgY29uc3QgU1NMX01FVEhPRCBmdW5jX25hbWUjI19kYXRhPSB7IFwKIAkJRFRMUzFfVkVSU0lPTiwgXAogCQlkdGxzMV9uZXcsIFwKIAkJZHRsczFfY2xlYXIsIFwKQEAgLTcyMyw2ICs3ODgsOCBAQAogaW50IHNzbF9nZXRfbmV3X3Nlc3Npb24oU1NMICpzLCBpbnQgc2Vzc2lvbik7CiBpbnQgc3NsX2dldF9wcmV2X3Nlc3Npb24oU1NMICpzLCB1bnNpZ25lZCBjaGFyICpzZXNzaW9uLGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmxpbWl0KTsKIGludCBzc2xfY2lwaGVyX2lkX2NtcChjb25zdCBTU0xfQ0lQSEVSICphLGNvbnN0IFNTTF9DSVBIRVIgKmIpOworREVDTEFSRV9PQkpfQlNFQVJDSF9HTE9CQUxfQ01QX0ZOKFNTTF9DSVBIRVIsIFNTTF9DSVBIRVIsCisJCQkJICBzc2xfY2lwaGVyX2lkKTsKIGludCBzc2xfY2lwaGVyX3B0cl9pZF9jbXAoY29uc3QgU1NMX0NJUEhFUiAqIGNvbnN0ICphcCwKIAkJCWNvbnN0IFNTTF9DSVBIRVIgKiBjb25zdCAqYnApOwogU1RBQ0tfT0YoU1NMX0NJUEhFUikgKnNzbF9ieXRlc190b19jaXBoZXJfbGlzdChTU0wgKnMsdW5zaWduZWQgY2hhciAqcCxpbnQgbnVtLApAQCAtNzM1LDE1ICs4MDIsMTYgQEAKIAkJCQkJICAgICBjb25zdCBjaGFyICpydWxlX3N0cik7CiB2b2lkIHNzbF91cGRhdGVfY2FjaGUoU1NMICpzLCBpbnQgbW9kZSk7CiBpbnQgc3NsX2NpcGhlcl9nZXRfZXZwKGNvbnN0IFNTTF9TRVNTSU9OICpzLGNvbnN0IEVWUF9DSVBIRVIgKiplbmMsCi0JCSAgICAgICBjb25zdCBFVlBfTUQgKiptZCxTU0xfQ09NUCAqKmNvbXApOworCQkgICAgICAgY29uc3QgRVZQX01EICoqbWQsaW50ICptYWNfcGtleV90eXBlLGludCAqbWFjX3NlY3JldF9zaXplLCBTU0xfQ09NUCAqKmNvbXApOworaW50IHNzbF9nZXRfaGFuZHNoYWtlX2RpZ2VzdChpbnQgaSxsb25nICptYXNrLGNvbnN0IEVWUF9NRCAqKm1kKTsJCQkgICAKIGludCBzc2xfdmVyaWZ5X2NlcnRfY2hhaW4oU1NMICpzLFNUQUNLX09GKFg1MDkpICpzayk7CiBpbnQgc3NsX3VuZGVmaW5lZF9mdW5jdGlvbihTU0wgKnMpOwogaW50IHNzbF91bmRlZmluZWRfdm9pZF9mdW5jdGlvbih2b2lkKTsKIGludCBzc2xfdW5kZWZpbmVkX2NvbnN0X2Z1bmN0aW9uKGNvbnN0IFNTTCAqcyk7CiBYNTA5ICpzc2xfZ2V0X3NlcnZlcl9zZW5kX2NlcnQoU1NMICopOwotRVZQX1BLRVkgKnNzbF9nZXRfc2lnbl9wa2V5KFNTTCAqLFNTTF9DSVBIRVIgKik7CitFVlBfUEtFWSAqc3NsX2dldF9zaWduX3BrZXkoU1NMICosY29uc3QgU1NMX0NJUEhFUiAqKTsKIGludCBzc2xfY2VydF90eXBlKFg1MDkgKngsRVZQX1BLRVkgKnBrZXkpOwotdm9pZCBzc2xfc2V0X2NlcnRfbWFza3MoQ0VSVCAqYywgU1NMX0NJUEhFUiAqY2lwaGVyKTsKK3ZvaWQgc3NsX3NldF9jZXJ0X21hc2tzKENFUlQgKmMsIGNvbnN0IFNTTF9DSVBIRVIgKmNpcGhlcik7CiBTVEFDS19PRihTU0xfQ0lQSEVSKSAqc3NsX2dldF9jaXBoZXJzX2J5X2lkKFNTTCAqcyk7CiBpbnQgc3NsX3ZlcmlmeV9hbGFybV90eXBlKGxvbmcgdHlwZSk7CiB2b2lkIHNzbF9sb2FkX2NpcGhlcnModm9pZCk7CkBAIC03NTIsNyArODIwLDcgQEAKIGludCBzc2wyX2dlbmVyYXRlX2tleV9tYXRlcmlhbChTU0wgKnMpOwogdm9pZCBzc2wyX2VuYyhTU0wgKnMsaW50IHNlbmRfZGF0YSk7CiB2b2lkIHNzbDJfbWFjKFNTTCAqcyx1bnNpZ25lZCBjaGFyICptYWMsaW50IHNlbmRfZGF0YSk7Ci1TU0xfQ0lQSEVSICpzc2wyX2dldF9jaXBoZXJfYnlfY2hhcihjb25zdCB1bnNpZ25lZCBjaGFyICpwKTsKK2NvbnN0IFNTTF9DSVBIRVIgKnNzbDJfZ2V0X2NpcGhlcl9ieV9jaGFyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnApOwogaW50IHNzbDJfcHV0X2NpcGhlcl9ieV9jaGFyKGNvbnN0IFNTTF9DSVBIRVIgKmMsdW5zaWduZWQgY2hhciAqcCk7CiBpbnQgc3NsMl9wYXJ0X3JlYWQoU1NMICpzLCB1bnNpZ25lZCBsb25nIGYsIGludCBpKTsKIGludCBzc2wyX2RvX3dyaXRlKFNTTCAqcyk7CkBAIC03NjAsNyArODI4LDcgQEAKIHZvaWQgc3NsMl9yZXR1cm5fZXJyb3IoU1NMICpzLGludCByZWFzb24pOwogdm9pZCBzc2wyX3dyaXRlX2Vycm9yKFNTTCAqcyk7CiBpbnQgc3NsMl9udW1fY2lwaGVycyh2b2lkKTsKLVNTTF9DSVBIRVIgKnNzbDJfZ2V0X2NpcGhlcih1bnNpZ25lZCBpbnQgdSk7Citjb25zdCBTU0xfQ0lQSEVSICpzc2wyX2dldF9jaXBoZXIodW5zaWduZWQgaW50IHUpOwogaW50CXNzbDJfbmV3KFNTTCAqcyk7CiB2b2lkCXNzbDJfZnJlZShTU0wgKnMpOwogaW50CXNzbDJfYWNjZXB0KFNTTCAqcyk7CkBAIC03NzcsNyArODQ1LDcgQEAKIGludAlzc2wyX3BlbmRpbmcoY29uc3QgU1NMICpzKTsKIGxvbmcJc3NsMl9kZWZhdWx0X3RpbWVvdXQodm9pZCApOwogCi1TU0xfQ0lQSEVSICpzc2wzX2dldF9jaXBoZXJfYnlfY2hhcihjb25zdCB1bnNpZ25lZCBjaGFyICpwKTsKK2NvbnN0IFNTTF9DSVBIRVIgKnNzbDNfZ2V0X2NpcGhlcl9ieV9jaGFyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnApOwogaW50IHNzbDNfcHV0X2NpcGhlcl9ieV9jaGFyKGNvbnN0IFNTTF9DSVBIRVIgKmMsdW5zaWduZWQgY2hhciAqcCk7CiB2b2lkIHNzbDNfaW5pdF9maW5pc2hlZF9tYWMoU1NMICpzKTsKIGludCBzc2wzX3NlbmRfc2VydmVyX2NlcnRpZmljYXRlKFNTTCAqcyk7CkBAIC03OTYsMjIgKzg2NCwyNyBAQAogbG9uZyBzc2wzX2dldF9tZXNzYWdlKFNTTCAqcywgaW50IHN0MSwgaW50IHN0biwgaW50IG10LCBsb25nIG1heCwgaW50ICpvayk7CiBpbnQgc3NsM19zZW5kX2ZpbmlzaGVkKFNTTCAqcywgaW50IGEsIGludCBiLCBjb25zdCBjaGFyICpzZW5kZXIsaW50IHNsZW4pOwogaW50IHNzbDNfbnVtX2NpcGhlcnModm9pZCk7Ci1TU0xfQ0lQSEVSICpzc2wzX2dldF9jaXBoZXIodW5zaWduZWQgaW50IHUpOworY29uc3QgU1NMX0NJUEhFUiAqc3NsM19nZXRfY2lwaGVyKHVuc2lnbmVkIGludCB1KTsKIGludCBzc2wzX3JlbmVnb3RpYXRlKFNTTCAqc3NsKTsgCiBpbnQgc3NsM19yZW5lZ290aWF0ZV9jaGVjayhTU0wgKnNzbCk7IAogaW50IHNzbDNfZGlzcGF0Y2hfYWxlcnQoU1NMICpzKTsKIGludCBzc2wzX3JlYWRfYnl0ZXMoU1NMICpzLCBpbnQgdHlwZSwgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbGVuLCBpbnQgcGVlayk7CiBpbnQgc3NsM193cml0ZV9ieXRlcyhTU0wgKnMsIGludCB0eXBlLCBjb25zdCB2b2lkICpidWYsIGludCBsZW4pOwotaW50IHNzbDNfZmluYWxfZmluaXNoX21hYyhTU0wgKnMsIEVWUF9NRF9DVFggKmN0eDEsIEVWUF9NRF9DVFggKmN0eDIsCi0JY29uc3QgY2hhciAqc2VuZGVyLCBpbnQgc2xlbix1bnNpZ25lZCBjaGFyICpwKTsKLWludCBzc2wzX2NlcnRfdmVyaWZ5X21hYyhTU0wgKnMsIEVWUF9NRF9DVFggKmluLCB1bnNpZ25lZCBjaGFyICpwKTsKK2ludCBzc2wzX2ZpbmFsX2ZpbmlzaF9tYWMoU1NMICpzLCBjb25zdCBjaGFyICpzZW5kZXIsIGludCBzbGVuLHVuc2lnbmVkIGNoYXIgKnApOworaW50IHNzbDNfY2VydF92ZXJpZnlfbWFjKFNTTCAqcywgaW50IG1kX25pZCwgdW5zaWduZWQgY2hhciAqcCk7CiB2b2lkIHNzbDNfZmluaXNoX21hYyhTU0wgKnMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbik7CiBpbnQgc3NsM19lbmMoU1NMICpzLCBpbnQgc2VuZF9kYXRhKTsKLWludCBzc2wzX21hYyhTU0wgKnNzbCwgdW5zaWduZWQgY2hhciAqbWQsIGludCBzZW5kX2RhdGEpOworaW50IG5fc3NsM19tYWMoU1NMICpzc2wsIHVuc2lnbmVkIGNoYXIgKm1kLCBpbnQgc2VuZF9kYXRhKTsKK3ZvaWQgc3NsM19mcmVlX2RpZ2VzdF9saXN0KFNTTCAqcyk7CiB1bnNpZ25lZCBsb25nIHNzbDNfb3V0cHV0X2NlcnRfY2hhaW4oU1NMICpzLCBYNTA5ICp4KTsKIFNTTF9DSVBIRVIgKnNzbDNfY2hvb3NlX2NpcGhlcihTU0wgKnNzbCxTVEFDS19PRihTU0xfQ0lQSEVSKSAqY2xudCwKIAkJCSAgICAgICBTVEFDS19PRihTU0xfQ0lQSEVSKSAqc3J2cik7CiBpbnQJc3NsM19zZXR1cF9idWZmZXJzKFNTTCAqcyk7CitpbnQJc3NsM19zZXR1cF9yZWFkX2J1ZmZlcihTU0wgKnMpOworaW50CXNzbDNfc2V0dXBfd3JpdGVfYnVmZmVyKFNTTCAqcyk7CitpbnQJc3NsM19yZWxlYXNlX3JlYWRfYnVmZmVyKFNTTCAqcyk7CitpbnQJc3NsM19yZWxlYXNlX3dyaXRlX2J1ZmZlcihTU0wgKnMpOworaW50CXNzbDNfZGlnZXN0X2NhY2hlZF9yZWNvcmRzKFNTTCAqcyk7CiBpbnQJc3NsM19uZXcoU1NMICpzKTsKIHZvaWQJc3NsM19mcmVlKFNTTCAqcyk7CiBpbnQJc3NsM19hY2NlcHQoU1NMICpzKTsKQEAgLTgzMiwxMiArOTA1LDEyIEBACiBsb25nIHNzbDNfZGVmYXVsdF90aW1lb3V0KHZvaWQgKTsKIAogaW50IHNzbDIzX251bV9jaXBoZXJzKHZvaWQgKTsKLVNTTF9DSVBIRVIgKnNzbDIzX2dldF9jaXBoZXIodW5zaWduZWQgaW50IHUpOworY29uc3QgU1NMX0NJUEhFUiAqc3NsMjNfZ2V0X2NpcGhlcih1bnNpZ25lZCBpbnQgdSk7CiBpbnQgc3NsMjNfcmVhZChTU0wgKnMsIHZvaWQgKmJ1ZiwgaW50IGxlbik7CiBpbnQgc3NsMjNfcGVlayhTU0wgKnMsIHZvaWQgKmJ1ZiwgaW50IGxlbik7CiBpbnQgc3NsMjNfd3JpdGUoU1NMICpzLCBjb25zdCB2b2lkICpidWYsIGludCBsZW4pOwogaW50IHNzbDIzX3B1dF9jaXBoZXJfYnlfY2hhcihjb25zdCBTU0xfQ0lQSEVSICpjLCB1bnNpZ25lZCBjaGFyICpwKTsKLVNTTF9DSVBIRVIgKnNzbDIzX2dldF9jaXBoZXJfYnlfY2hhcihjb25zdCB1bnNpZ25lZCBjaGFyICpwKTsKK2NvbnN0IFNTTF9DSVBIRVIgKnNzbDIzX2dldF9jaXBoZXJfYnlfY2hhcihjb25zdCB1bnNpZ25lZCBjaGFyICpwKTsKIGxvbmcgc3NsMjNfZGVmYXVsdF90aW1lb3V0KHZvaWQgKTsKIAogbG9uZyB0bHMxX2RlZmF1bHRfdGltZW91dCh2b2lkKTsKQEAgLTg3MSwxNCArOTQ0LDEzIEBACiBsb25nIGR0bHMxX2RlZmF1bHRfdGltZW91dCh2b2lkKTsKIHN0cnVjdCB0aW1ldmFsKiBkdGxzMV9nZXRfdGltZW91dChTU0wgKnMsIHN0cnVjdCB0aW1ldmFsKiB0aW1lbGVmdCk7CiBpbnQgZHRsczFfaGFuZGxlX3RpbWVvdXQoU1NMICpzKTsKLVNTTF9DSVBIRVIgKmR0bHMxX2dldF9jaXBoZXIodW5zaWduZWQgaW50IHUpOworY29uc3QgU1NMX0NJUEhFUiAqZHRsczFfZ2V0X2NpcGhlcih1bnNpZ25lZCBpbnQgdSk7CiB2b2lkIGR0bHMxX3N0YXJ0X3RpbWVyKFNTTCAqcyk7CiB2b2lkIGR0bHMxX3N0b3BfdGltZXIoU1NMICpzKTsKIGludCBkdGxzMV9pc190aW1lcl9leHBpcmVkKFNTTCAqcyk7CiB2b2lkIGR0bHMxX2RvdWJsZV90aW1lb3V0KFNTTCAqcyk7CiBpbnQgZHRsczFfc2VuZF9uZXdzZXNzaW9uX3RpY2tldChTU0wgKnMpOwogCi0KIC8qIHNvbWUgY2xpZW50LW9ubHkgZnVuY3Rpb25zICovCiBpbnQgc3NsM19jbGllbnRfaGVsbG8oU1NMICpzKTsKIGludCBzc2wzX2dldF9zZXJ2ZXJfaGVsbG8oU1NMICpzKTsKQEAgLTg4Nyw4ICs5NTksOCBAQAogaW50IHNzbDNfZ2V0X2NlcnRfc3RhdHVzKFNTTCAqcyk7CiBpbnQgc3NsM19nZXRfc2VydmVyX2RvbmUoU1NMICpzKTsKIGludCBzc2wzX3NlbmRfY2xpZW50X3ZlcmlmeShTU0wgKnMpOwotaW50IHNzbF9kb19jbGllbnRfY2VydF9jYihTU0wgKnMsIFg1MDkgKipweDUwOSwgRVZQX1BLRVkgKipwcGtleSk7CiBpbnQgc3NsM19zZW5kX2NsaWVudF9jZXJ0aWZpY2F0ZShTU0wgKnMpOworaW50IHNzbF9kb19jbGllbnRfY2VydF9jYihTU0wgKnMsIFg1MDkgKipweDUwOSwgRVZQX1BLRVkgKipwcGtleSk7CiBpbnQgc3NsM19zZW5kX2NsaWVudF9rZXlfZXhjaGFuZ2UoU1NMICpzKTsKIGludCBzc2wzX2dldF9rZXlfZXhjaGFuZ2UoU1NMICpzKTsKIGludCBzc2wzX2dldF9zZXJ2ZXJfY2VydGlmaWNhdGUoU1NMICpzKTsKQEAgLTkzMyw3ICsxMDA1LDYgQEAKIHZvaWQgdGxzMV9jbGVhcihTU0wgKnMpOwogbG9uZyB0bHMxX2N0cmwoU1NMICpzLGludCBjbWQsIGxvbmcgbGFyZywgdm9pZCAqcGFyZyk7CiBsb25nIHRsczFfY2FsbGJhY2tfY3RybChTU0wgKnMsaW50IGNtZCwgdm9pZCAoKmZwKSh2b2lkKSk7Ci1TU0xfTUVUSE9EICp0bHN2MV9iYXNlX21ldGhvZCh2b2lkICk7CiAKIGludCBkdGxzMV9uZXcoU1NMICpzKTsKIGludAlkdGxzMV9hY2NlcHQoU1NMICpzKTsKQEAgLTk0MSw3ICsxMDEyLDYgQEAKIHZvaWQgZHRsczFfZnJlZShTU0wgKnMpOwogdm9pZCBkdGxzMV9jbGVhcihTU0wgKnMpOwogbG9uZyBkdGxzMV9jdHJsKFNTTCAqcyxpbnQgY21kLCBsb25nIGxhcmcsIHZvaWQgKnBhcmcpOwotU1NMX01FVEhPRCAqZHRsc3YxX2Jhc2VfbWV0aG9kKHZvaWQgKTsKIAogbG9uZyBkdGxzMV9nZXRfbWVzc2FnZShTU0wgKnMsIGludCBzdDEsIGludCBzdG4sIGludCBtdCwgbG9uZyBtYXgsIGludCAqb2spOwogaW50IGR0bHMxX2dldF9yZWNvcmQoU1NMICpzKTsKQEAgLTk1Niw5ICsxMDI2LDkgQEAKIGludCB0bHMxX2NoYW5nZV9jaXBoZXJfc3RhdGUoU1NMICpzLCBpbnQgd2hpY2gpOwogaW50IHRsczFfc2V0dXBfa2V5X2Jsb2NrKFNTTCAqcyk7CiBpbnQgdGxzMV9lbmMoU1NMICpzLCBpbnQgc25kKTsKLWludCB0bHMxX2ZpbmFsX2ZpbmlzaF9tYWMoU1NMICpzLCBFVlBfTURfQ1RYICppbjFfY3R4LCBFVlBfTURfQ1RYICppbjJfY3R4LAoraW50IHRsczFfZmluYWxfZmluaXNoX21hYyhTU0wgKnMsCiAJY29uc3QgY2hhciAqc3RyLCBpbnQgc2xlbiwgdW5zaWduZWQgY2hhciAqcCk7Ci1pbnQgdGxzMV9jZXJ0X3ZlcmlmeV9tYWMoU1NMICpzLCBFVlBfTURfQ1RYICppbiwgdW5zaWduZWQgY2hhciAqcCk7CitpbnQgdGxzMV9jZXJ0X3ZlcmlmeV9tYWMoU1NMICpzLCBpbnQgbWRfbmlkLCB1bnNpZ25lZCBjaGFyICpwKTsKIGludCB0bHMxX21hYyhTU0wgKnNzbCwgdW5zaWduZWQgY2hhciAqbWQsIGludCBzbmQpOwogaW50IHRsczFfZ2VuZXJhdGVfbWFzdGVyX3NlY3JldChTU0wgKnMsIHVuc2lnbmVkIGNoYXIgKm91dCwKIAl1bnNpZ25lZCBjaGFyICpwLCBpbnQgbGVuKTsKQEAgLTk2NiwxMCArMTAzNiwxNyBAQAogaW50IHNzbDNfYWxlcnRfY29kZShpbnQgY29kZSk7CiBpbnQgc3NsX29rKFNTTCAqcyk7CiAKLWludCBjaGVja19zcnZyX2VjY19jZXJ0X2FuZF9hbGcoWDUwOSAqeCwgU1NMX0NJUEhFUiAqY3MpOworI2lmbmRlZiBPUEVOU1NMX05PX0VDREgKK2ludCBzc2xfY2hlY2tfc3J2cl9lY2NfY2VydF9hbmRfYWxnKFg1MDkgKngsIGNvbnN0IFNTTF9DSVBIRVIgKmNzKTsKKyNlbmRpZgogCiBTU0xfQ09NUCAqc3NsM19jb21wX2ZpbmQoU1RBQ0tfT0YoU1NMX0NPTVApICpzaywgaW50IG4pOwogCisjaWZuZGVmIE9QRU5TU0xfTk9fRUMKK2ludCB0bHMxX2VjX2N1cnZlX2lkMm5pZChpbnQgY3VydmVfaWQpOworaW50IHRsczFfZWNfbmlkMmN1cnZlX2lkKGludCBuaWQpOworI2VuZGlmIC8qIE9QRU5TU0xfTk9fRUMgKi8KKwogI2lmbmRlZiBPUEVOU1NMX05PX1RMU0VYVAogdW5zaWduZWQgY2hhciAqc3NsX2FkZF9jbGllbnRoZWxsb190bHNleHQoU1NMICpzLCB1bnNpZ25lZCBjaGFyICpwLCB1bnNpZ25lZCBjaGFyICpsaW1pdCk7IAogdW5zaWduZWQgY2hhciAqc3NsX2FkZF9zZXJ2ZXJoZWxsb190bHNleHQoU1NMICpzLCB1bnNpZ25lZCBjaGFyICpwLCB1bnNpZ25lZCBjaGFyICpsaW1pdCk7IApAQCAtOTg3LDkgKzEwNjQsOSBAQAogI2VuZGlmCiBpbnQgdGxzMV9wcm9jZXNzX3RpY2tldChTU0wgKnMsIHVuc2lnbmVkIGNoYXIgKnNlc3Npb25faWQsIGludCBsZW4sCiAJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqbGltaXQsIFNTTF9TRVNTSU9OICoqcmV0KTsKKyNlbmRpZgogRVZQX01EX0NUWCogc3NsX3JlcGxhY2VfaGFzaChFVlBfTURfQ1RYICoqaGFzaCxjb25zdCBFVlBfTUQgKm1kKSA7CiB2b2lkIHNzbF9jbGVhcl9oYXNoX2N0eChFVlBfTURfQ1RYICoqaGFzaCk7Ci0KIGludCBzc2xfYWRkX3NlcnZlcmhlbGxvX3JlbmVnb3RpYXRlX2V4dChTU0wgKnMsIHVuc2lnbmVkIGNoYXIgKnAsIGludCAqbGVuLAogCQkJCQlpbnQgbWF4bGVuKTsKIGludCBzc2xfcGFyc2Vfc2VydmVyaGVsbG9fcmVuZWdvdGlhdGVfZXh0KFNTTCAqcywgdW5zaWduZWQgY2hhciAqZCwgaW50IGxlbiwKQEAgLTk5OSw1ICsxMDc2LDMgQEAKIGludCBzc2xfcGFyc2VfY2xpZW50aGVsbG9fcmVuZWdvdGlhdGVfZXh0KFNTTCAqcywgdW5zaWduZWQgY2hhciAqZCwgaW50IGxlbiwKIAkJCQkJICBpbnQgKmFsKTsKICNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL3NzbC9zc2xfc2Vzcy5jIGIvc3NsL3NzbF9zZXNzLmMKaW5kZXggZTc4MDJlMS4uOGU1ZDhhMCAxMDA2NDQKLS0tIGEvc3NsL3NzbF9zZXNzLmMKKysrIGIvc3NsL3NzbF9zZXNzLmMKQEAgLTU1LDYgKzU1LDg1IEBACiAgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCiAgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQogICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisgKgorICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorICoKKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorICoKKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKyAqICAgIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCisgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAqCisgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgMjAwNSBOb2tpYS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGUgcG9ydGlvbnMgb2YgdGhlIGF0dGFjaGVkIHNvZnR3YXJlICgiQ29udHJpYnV0aW9uIikgaXMgZGV2ZWxvcGVkIGJ5CisgKiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQgaXMgbGljZW5zZWQgcHVyc3VhbnQgdG8gdGhlIE9wZW5TU0wgb3BlbiBzb3VyY2UKKyAqIGxpY2Vuc2UuCisgKgorICogVGhlIENvbnRyaWJ1dGlvbiwgb3JpZ2luYWxseSB3cml0dGVuIGJ5IE1pa2EgS291c2EgYW5kIFBhc2kgRXJvbmVuIG9mCisgKiBOb2tpYSBDb3Jwb3JhdGlvbiwgY29uc2lzdHMgb2YgdGhlICJQU0siIChQcmUtU2hhcmVkIEtleSkgY2lwaGVyc3VpdGVzCisgKiBzdXBwb3J0IChzZWUgUkZDIDQyNzkpIHRvIE9wZW5TU0wuCisgKgorICogTm8gcGF0ZW50IGxpY2Vuc2VzIG9yIG90aGVyIHJpZ2h0cyBleGNlcHQgdGhvc2UgZXhwcmVzc2x5IHN0YXRlZCBpbgorICogdGhlIE9wZW5TU0wgb3BlbiBzb3VyY2UgbGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgZ3JhbnRlZCBvciByZWNlaXZlZAorICogZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwsIG9yIG90aGVyd2lzZS4KKyAqCisgKiBObyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBOb2tpYSB0aGF0IHRoZSBDb250cmlidXRpb24gZG9lcyBub3QKKyAqIGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkgdGhpcmQKKyAqIHBhcnR5IG9yIHRoYXQgdGhlIGxpY2Vuc2UgcHJvdmlkZXMgeW91IHdpdGggYWxsIHRoZSBuZWNlc3NhcnkgcmlnaHRzCisgKiB0byBtYWtlIHVzZSBvZiB0aGUgQ29udHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQuIElOCisgKiBBRERJVElPTiBUTyBUSEUgRElTQ0xBSU1FUlMgSU5DTFVERUQgSU4gVEhFIExJQ0VOU0UsIE5PS0lBCisgKiBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1TIEFOWSBMSUFCSUxJVFkgRk9SIENMQUlNUyBCUk9VR0hUIEJZIFlPVSBPUiBBTlkKKyAqIE9USEVSIEVOVElUWSBCQVNFRCBPTiBJTkZSSU5HRU1FTlQgT0YgSU5URUxMRUNUVUFMIFBST1BFUlRZIFJJR0hUUyBPUgorICogT1RIRVJXSVNFLgorICovCiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPG9wZW5zc2wvbGhhc2guaD4KQEAgLTEyNyw4ICsyMDYsMTggQEAKIAlzcy0+Y29tcHJlc3NfbWV0aD0wOwogI2lmbmRlZiBPUEVOU1NMX05PX1RMU0VYVAogCXNzLT50bHNleHRfaG9zdG5hbWUgPSBOVUxMOyAKKyNpZm5kZWYgT1BFTlNTTF9OT19FQworCXNzLT50bHNleHRfZWNwb2ludGZvcm1hdGxpc3RfbGVuZ3RoID0gMDsKKwlzcy0+dGxzZXh0X2VjcG9pbnRmb3JtYXRsaXN0ID0gTlVMTDsKKwlzcy0+dGxzZXh0X2VsbGlwdGljY3VydmVsaXN0X2xlbmd0aCA9IDA7CisJc3MtPnRsc2V4dF9lbGxpcHRpY2N1cnZlbGlzdCA9IE5VTEw7CisjZW5kaWYKICNlbmRpZgogCUNSWVBUT19uZXdfZXhfZGF0YShDUllQVE9fRVhfSU5ERVhfU1NMX1NFU1NJT04sIHNzLCAmc3MtPmV4X2RhdGEpOworI2lmbmRlZiBPUEVOU1NMX05PX1BTSworCXNzLT5wc2tfaWRlbnRpdHlfaGludD1OVUxMOworCXNzLT5wc2tfaWRlbnRpdHk9TlVMTDsKKyNlbmRpZgogCXJldHVybihzcyk7CiAJfQogCkBAIC0xODMsMTAgKzI3MiwxMCBAQAogCWlmICgoc3M9U1NMX1NFU1NJT05fbmV3KCkpID09IE5VTEwpIHJldHVybigwKTsKIAogCS8qIElmIHRoZSBjb250ZXh0IGhhcyBhIGRlZmF1bHQgdGltZW91dCwgdXNlIGl0ICovCi0JaWYgKHMtPmN0eC0+c2Vzc2lvbl90aW1lb3V0ID09IDApCisJaWYgKHMtPnNlc3Npb25fY3R4LT5zZXNzaW9uX3RpbWVvdXQgPT0gMCkKIAkJc3MtPnRpbWVvdXQ9U1NMX2dldF9kZWZhdWx0X3RpbWVvdXQocyk7CiAJZWxzZQotCQlzcy0+dGltZW91dD1zLT5jdHgtPnNlc3Npb25fdGltZW91dDsKKwkJc3MtPnRpbWVvdXQ9cy0+c2Vzc2lvbl9jdHgtPnNlc3Npb25fdGltZW91dDsKIAogCWlmIChzLT5zZXNzaW9uICE9IE5VTEwpCiAJCXsKQEAgLTIzOSw4ICszMjgsOCBAQAogCQlDUllQVE9fcl9sb2NrKENSWVBUT19MT0NLX1NTTF9DVFgpOwogCQlpZihzLT5nZW5lcmF0ZV9zZXNzaW9uX2lkKQogCQkJY2IgPSBzLT5nZW5lcmF0ZV9zZXNzaW9uX2lkOwotCQllbHNlIGlmKHMtPmN0eC0+Z2VuZXJhdGVfc2Vzc2lvbl9pZCkKLQkJCWNiID0gcy0+Y3R4LT5nZW5lcmF0ZV9zZXNzaW9uX2lkOworCQllbHNlIGlmKHMtPnNlc3Npb25fY3R4LT5nZW5lcmF0ZV9zZXNzaW9uX2lkKQorCQkJY2IgPSBzLT5zZXNzaW9uX2N0eC0+Z2VuZXJhdGVfc2Vzc2lvbl9pZDsKIAkJQ1JZUFRPX3JfdW5sb2NrKENSWVBUT19MT0NLX1NTTF9DVFgpOwogCQkvKiBDaG9vc2UgYSBzZXNzaW9uIElEICovCiAJCXRtcCA9IHNzLT5zZXNzaW9uX2lkX2xlbmd0aDsKQEAgLTI4Niw2ICszNzUsMzIgQEAKIAkJCQlyZXR1cm4gMDsKIAkJCQl9CiAJCQl9CisjaWZuZGVmIE9QRU5TU0xfTk9fRUMKKwkJaWYgKHMtPnRsc2V4dF9lY3BvaW50Zm9ybWF0bGlzdCkKKwkJCXsKKwkJCWlmIChzcy0+dGxzZXh0X2VjcG9pbnRmb3JtYXRsaXN0ICE9IE5VTEwpIE9QRU5TU0xfZnJlZShzcy0+dGxzZXh0X2VjcG9pbnRmb3JtYXRsaXN0KTsKKwkJCWlmICgoc3MtPnRsc2V4dF9lY3BvaW50Zm9ybWF0bGlzdCA9IE9QRU5TU0xfbWFsbG9jKHMtPnRsc2V4dF9lY3BvaW50Zm9ybWF0bGlzdF9sZW5ndGgpKSA9PSBOVUxMKQorCQkJCXsKKwkJCQlTU0xlcnIoU1NMX0ZfU1NMX0dFVF9ORVdfU0VTU0lPTiwgRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOworCQkJCVNTTF9TRVNTSU9OX2ZyZWUoc3MpOworCQkJCXJldHVybiAwOworCQkJCX0KKwkJCXNzLT50bHNleHRfZWNwb2ludGZvcm1hdGxpc3RfbGVuZ3RoID0gcy0+dGxzZXh0X2VjcG9pbnRmb3JtYXRsaXN0X2xlbmd0aDsKKwkJCW1lbWNweShzcy0+dGxzZXh0X2VjcG9pbnRmb3JtYXRsaXN0LCBzLT50bHNleHRfZWNwb2ludGZvcm1hdGxpc3QsIHMtPnRsc2V4dF9lY3BvaW50Zm9ybWF0bGlzdF9sZW5ndGgpOworCQkJfQorCQlpZiAocy0+dGxzZXh0X2VsbGlwdGljY3VydmVsaXN0KQorCQkJeworCQkJaWYgKHNzLT50bHNleHRfZWxsaXB0aWNjdXJ2ZWxpc3QgIT0gTlVMTCkgT1BFTlNTTF9mcmVlKHNzLT50bHNleHRfZWxsaXB0aWNjdXJ2ZWxpc3QpOworCQkJaWYgKChzcy0+dGxzZXh0X2VsbGlwdGljY3VydmVsaXN0ID0gT1BFTlNTTF9tYWxsb2Mocy0+dGxzZXh0X2VsbGlwdGljY3VydmVsaXN0X2xlbmd0aCkpID09IE5VTEwpCisJCQkJeworCQkJCVNTTGVycihTU0xfRl9TU0xfR0VUX05FV19TRVNTSU9OLCBFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CisJCQkJU1NMX1NFU1NJT05fZnJlZShzcyk7CisJCQkJcmV0dXJuIDA7CisJCQkJfQorCQkJc3MtPnRsc2V4dF9lbGxpcHRpY2N1cnZlbGlzdF9sZW5ndGggPSBzLT50bHNleHRfZWxsaXB0aWNjdXJ2ZWxpc3RfbGVuZ3RoOworCQkJbWVtY3B5KHNzLT50bHNleHRfZWxsaXB0aWNjdXJ2ZWxpc3QsIHMtPnRsc2V4dF9lbGxpcHRpY2N1cnZlbGlzdCwgcy0+dGxzZXh0X2VsbGlwdGljY3VydmVsaXN0X2xlbmd0aCk7CisJCQl9CisjZW5kaWYKICNlbmRpZgogCQl9CiAJZWxzZQpAQCAtMzE4LDE1ICs0MzMsMTUgQEAKICNpZm5kZWYgT1BFTlNTTF9OT19UTFNFWFQKIAlpbnQgcjsKICNlbmRpZgotICAKKwogCWlmIChsZW4gPiBTU0xfTUFYX1NTTF9TRVNTSU9OX0lEX0xFTkdUSCkKIAkJZ290byBlcnI7CiAjaWZuZGVmIE9QRU5TU0xfTk9fVExTRVhUCi0gCXIgPSB0bHMxX3Byb2Nlc3NfdGlja2V0KHMsIHNlc3Npb25faWQsIGxlbiwgbGltaXQsICZyZXQpOworCXIgPSB0bHMxX3Byb2Nlc3NfdGlja2V0KHMsIHNlc3Npb25faWQsIGxlbiwgbGltaXQsICZyZXQpOwogCWlmIChyID09IC0xKQogCQl7CiAJCWZhdGFsID0gMTsKLSAJCWdvdG8gZXJyOworCQlnb3RvIGVycjsKIAkJfQogCWVsc2UgaWYgKHIgPT0gMCB8fCAoIXJldCAmJiAhbGVuKSkKIAkJZ290byBlcnI7CkBAIC0zMzQsNyArNDQ5LDcgQEAKICNlbHNlCiAJaWYgKGxlbiA9PSAwKQogCQlnb3RvIGVycjsKLQlpZiAoIShzLT5jdHgtPnNlc3Npb25fY2FjaGVfbW9kZSAmIFNTTF9TRVNTX0NBQ0hFX05PX0lOVEVSTkFMX0xPT0tVUCkpCisJaWYgKCEocy0+c2Vzc2lvbl9jdHgtPnNlc3Npb25fY2FjaGVfbW9kZSAmIFNTTF9TRVNTX0NBQ0hFX05PX0lOVEVSTkFMX0xPT0tVUCkpCiAjZW5kaWYKIAkJewogCQlTU0xfU0VTU0lPTiBkYXRhOwpAQCAtMzQyLDkgKzQ1Nyw5IEBACiAJCWRhdGEuc2Vzc2lvbl9pZF9sZW5ndGg9bGVuOwogCQlpZiAobGVuID09IDApCiAJCQlyZXR1cm4gMDsKLSAJCW1lbWNweShkYXRhLnNlc3Npb25faWQsc2Vzc2lvbl9pZCxsZW4pOworCQltZW1jcHkoZGF0YS5zZXNzaW9uX2lkLHNlc3Npb25faWQsbGVuKTsKIAkJQ1JZUFRPX3JfbG9jayhDUllQVE9fTE9DS19TU0xfQ1RYKTsKLQkJcmV0PShTU0xfU0VTU0lPTiAqKWxoX3JldHJpZXZlKHMtPmN0eC0+c2Vzc2lvbnMsJmRhdGEpOworCQlyZXQ9bGhfU1NMX1NFU1NJT05fcmV0cmlldmUocy0+c2Vzc2lvbl9jdHgtPnNlc3Npb25zLCZkYXRhKTsKIAkJaWYgKHJldCAhPSBOVUxMKQogCQkgICAgLyogZG9uJ3QgYWxsb3cgb3RoZXIgdGhyZWFkcyB0byBzdGVhbCBpdDogKi8KIAkJICAgIENSWVBUT19hZGQoJnJldC0+cmVmZXJlbmNlcywxLENSWVBUT19MT0NLX1NTTF9TRVNTSU9OKTsKQEAgLTM1NSwxMyArNDcwLDEzIEBACiAJCXsKIAkJaW50IGNvcHk9MTsKIAkKLQkJcy0+Y3R4LT5zdGF0cy5zZXNzX21pc3MrKzsKKwkJcy0+c2Vzc2lvbl9jdHgtPnN0YXRzLnNlc3NfbWlzcysrOwogCQlyZXQ9TlVMTDsKLQkJaWYgKHMtPmN0eC0+Z2V0X3Nlc3Npb25fY2IgIT0gTlVMTAotCQkgICAgJiYgKHJldD1zLT5jdHgtPmdldF9zZXNzaW9uX2NiKHMsc2Vzc2lvbl9pZCxsZW4sJmNvcHkpKQorCQlpZiAocy0+c2Vzc2lvbl9jdHgtPmdldF9zZXNzaW9uX2NiICE9IE5VTEwKKwkJICAgICYmIChyZXQ9cy0+c2Vzc2lvbl9jdHgtPmdldF9zZXNzaW9uX2NiKHMsc2Vzc2lvbl9pZCxsZW4sJmNvcHkpKQogCQkgICAgICAgIT0gTlVMTCkKIAkJCXsKLQkJCXMtPmN0eC0+c3RhdHMuc2Vzc19jYl9oaXQrKzsKKwkJCXMtPnNlc3Npb25fY3R4LT5zdGF0cy5zZXNzX2NiX2hpdCsrOwogCiAJCQkvKiBJbmNyZW1lbnQgcmVmZXJlbmNlIGNvdW50IG5vdyBpZiB0aGUgc2Vzc2lvbiBjYWxsYmFjawogCQkJICogYXNrcyB1cyB0byBkbyBzbyAobm90ZSB0aGF0IGlmIHRoZSBzZXNzaW9uIHN0cnVjdHVyZXMKQEAgLTM3MywxMCArNDg4LDEwIEBACiAKIAkJCS8qIEFkZCB0aGUgZXh0ZXJuYWxseSBjYWNoZWQgc2Vzc2lvbiB0byB0aGUgaW50ZXJuYWwKIAkJCSAqIGNhY2hlIGFzIHdlbGwgaWYgYW5kIG9ubHkgaWYgd2UgYXJlIHN1cHBvc2VkIHRvLiAqLwotCQkJaWYoIShzLT5jdHgtPnNlc3Npb25fY2FjaGVfbW9kZSAmIFNTTF9TRVNTX0NBQ0hFX05PX0lOVEVSTkFMX1NUT1JFKSkKKwkJCWlmKCEocy0+c2Vzc2lvbl9jdHgtPnNlc3Npb25fY2FjaGVfbW9kZSAmIFNTTF9TRVNTX0NBQ0hFX05PX0lOVEVSTkFMX1NUT1JFKSkKIAkJCQkvKiBUaGUgZm9sbG93aW5nIHNob3VsZCBub3QgcmV0dXJuIDEsIG90aGVyd2lzZSwKIAkJCQkgKiB0aGluZ3MgYXJlIHZlcnkgc3RyYW5nZSAqLwotCQkJCVNTTF9DVFhfYWRkX3Nlc3Npb24ocy0+Y3R4LHJldCk7CisJCQkJU1NMX0NUWF9hZGRfc2Vzc2lvbihzLT5zZXNzaW9uX2N0eCxyZXQpOwogCQkJfQogCQlpZiAocmV0ID09IE5VTEwpCiAJCQlnb3RvIGVycjsKQEAgLTQ0MywxMyArNTU4LDEzIEBACiAKIAlpZiAocmV0LT50aW1lb3V0IDwgKGxvbmcpKHRpbWUoTlVMTCkgLSByZXQtPnRpbWUpKSAvKiB0aW1lb3V0ICovCiAJCXsKLQkJcy0+Y3R4LT5zdGF0cy5zZXNzX3RpbWVvdXQrKzsKKwkJcy0+c2Vzc2lvbl9jdHgtPnN0YXRzLnNlc3NfdGltZW91dCsrOwogCQkvKiByZW1vdmUgaXQgZnJvbSB0aGUgY2FjaGUgKi8KLQkJU1NMX0NUWF9yZW1vdmVfc2Vzc2lvbihzLT5jdHgscmV0KTsKKwkJU1NMX0NUWF9yZW1vdmVfc2Vzc2lvbihzLT5zZXNzaW9uX2N0eCxyZXQpOwogCQlnb3RvIGVycjsKIAkJfQogCi0Jcy0+Y3R4LT5zdGF0cy5zZXNzX2hpdCsrOworCXMtPnNlc3Npb25fY3R4LT5zdGF0cy5zZXNzX2hpdCsrOwogCiAJLyogcmV0LT50aW1lPXRpbWUoTlVMTCk7ICovIC8qIHJlemVybyB0aW1lb3V0PyAqLwogCS8qIGFnYWluLCBqdXN0IGxlYXZlIHRoZSBzZXNzaW9uIApAQCAtNDgyLDcgKzU5Nyw3IEBACiAJLyogaWYgc2Vzc2lvbiBjIGlzIGluIGFscmVhZHkgaW4gY2FjaGUsIHdlIHRha2UgYmFjayB0aGUgaW5jcmVtZW50IGxhdGVyICovCiAKIAlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1NTTF9DVFgpOwotCXM9KFNTTF9TRVNTSU9OICopbGhfaW5zZXJ0KGN0eC0+c2Vzc2lvbnMsYyk7CisJcz1saF9TU0xfU0VTU0lPTl9pbnNlcnQoY3R4LT5zZXNzaW9ucyxjKTsKIAkKIAkvKiBzICE9IE5VTEwgaWZmIHdlIGFscmVhZHkgaGFkIGEgc2Vzc2lvbiB3aXRoIHRoZSBnaXZlbiBQSUQuCiAJICogSW4gdGhpcyBjYXNlLCBzID09IGMgc2hvdWxkIGhvbGQgKHRoZW4gd2UgZGlkIG5vdCByZWFsbHkgbW9kaWZ5CkBAIC01NDgsMTAgKzY2MywxMCBAQAogCWlmICgoYyAhPSBOVUxMKSAmJiAoYy0+c2Vzc2lvbl9pZF9sZW5ndGggIT0gMCkpCiAJCXsKIAkJaWYobGNrKSBDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1NTTF9DVFgpOwotCQlpZiAoKHIgPSAoU1NMX1NFU1NJT04gKilsaF9yZXRyaWV2ZShjdHgtPnNlc3Npb25zLGMpKSA9PSBjKQorCQlpZiAoKHIgPSBsaF9TU0xfU0VTU0lPTl9yZXRyaWV2ZShjdHgtPnNlc3Npb25zLGMpKSA9PSBjKQogCQkJewogCQkJcmV0PTE7Ci0JCQlyPShTU0xfU0VTU0lPTiAqKWxoX2RlbGV0ZShjdHgtPnNlc3Npb25zLGMpOworCQkJcj1saF9TU0xfU0VTU0lPTl9kZWxldGUoY3R4LT5zZXNzaW9ucyxjKTsKIAkJCVNTTF9TRVNTSU9OX2xpc3RfcmVtb3ZlKGN0eCxjKTsKIAkJCX0KIApAQCAtNjAxLDYgKzcxNiwxOCBAQAogI2lmbmRlZiBPUEVOU1NMX05PX1RMU0VYVAogCWlmIChzcy0+dGxzZXh0X2hvc3RuYW1lICE9IE5VTEwpIE9QRU5TU0xfZnJlZShzcy0+dGxzZXh0X2hvc3RuYW1lKTsKIAlpZiAoc3MtPnRsc2V4dF90aWNrICE9IE5VTEwpIE9QRU5TU0xfZnJlZShzcy0+dGxzZXh0X3RpY2spOworI2lmbmRlZiBPUEVOU1NMX05PX0VDCisJc3MtPnRsc2V4dF9lY3BvaW50Zm9ybWF0bGlzdF9sZW5ndGggPSAwOworCWlmIChzcy0+dGxzZXh0X2VjcG9pbnRmb3JtYXRsaXN0ICE9IE5VTEwpIE9QRU5TU0xfZnJlZShzcy0+dGxzZXh0X2VjcG9pbnRmb3JtYXRsaXN0KTsKKwlzcy0+dGxzZXh0X2VsbGlwdGljY3VydmVsaXN0X2xlbmd0aCA9IDA7CisJaWYgKHNzLT50bHNleHRfZWxsaXB0aWNjdXJ2ZWxpc3QgIT0gTlVMTCkgT1BFTlNTTF9mcmVlKHNzLT50bHNleHRfZWxsaXB0aWNjdXJ2ZWxpc3QpOworI2VuZGlmIC8qIE9QRU5TU0xfTk9fRUMgKi8KKyNlbmRpZgorI2lmbmRlZiBPUEVOU1NMX05PX1BTSworCWlmIChzcy0+cHNrX2lkZW50aXR5X2hpbnQgIT0gTlVMTCkKKwkJT1BFTlNTTF9mcmVlKHNzLT5wc2tfaWRlbnRpdHlfaGludCk7CisJaWYgKHNzLT5wc2tfaWRlbnRpdHkgIT0gTlVMTCkKKwkJT1BFTlNTTF9mcmVlKHNzLT5wc2tfaWRlbnRpdHkpOwogI2VuZGlmCiAJT1BFTlNTTF9jbGVhbnNlKHNzLHNpemVvZigqc3MpKTsKIAlPUEVOU1NMX2ZyZWUoc3MpOwpAQCAtNjA5LDcgKzczNiw3IEBACiBpbnQgU1NMX3NldF9zZXNzaW9uKFNTTCAqcywgU1NMX1NFU1NJT04gKnNlc3Npb24pCiAJewogCWludCByZXQ9MDsKLQlTU0xfTUVUSE9EICptZXRoOworCWNvbnN0IFNTTF9NRVRIT0QgKm1ldGg7CiAKIAlpZiAoc2Vzc2lvbiAhPSBOVUxMKQogCQl7CkBAIC03MTIsMjAgKzgzOSw3NSBAQAogCXJldHVybihzLT5zZXNzaW9uX3RpbWVvdXQpOwogCX0KIAorI2lmbmRlZiBPUEVOU1NMX05PX1RMU0VYVAoraW50IFNTTF9zZXRfc2Vzc2lvbl9zZWNyZXRfY2IoU1NMICpzLCBpbnQgKCp0bHNfc2Vzc2lvbl9zZWNyZXRfY2IpKFNTTCAqcywgdm9pZCAqc2VjcmV0LCBpbnQgKnNlY3JldF9sZW4sCisJU1RBQ0tfT0YoU1NMX0NJUEhFUikgKnBlZXJfY2lwaGVycywgU1NMX0NJUEhFUiAqKmNpcGhlciwgdm9pZCAqYXJnKSwgdm9pZCAqYXJnKQorCXsKKwlpZiAocyA9PSBOVUxMKSByZXR1cm4oMCk7CisJcy0+dGxzX3Nlc3Npb25fc2VjcmV0X2NiID0gdGxzX3Nlc3Npb25fc2VjcmV0X2NiOworCXMtPnRsc19zZXNzaW9uX3NlY3JldF9jYl9hcmcgPSBhcmc7CisJcmV0dXJuKDEpOworCX0KKworaW50IFNTTF9zZXRfc2Vzc2lvbl90aWNrZXRfZXh0X2NiKFNTTCAqcywgdGxzX3Nlc3Npb25fdGlja2V0X2V4dF9jYl9mbiBjYiwKKwkJCQkgIHZvaWQgKmFyZykKKwl7CisJaWYgKHMgPT0gTlVMTCkgcmV0dXJuKDApOworCXMtPnRsc19zZXNzaW9uX3RpY2tldF9leHRfY2IgPSBjYjsKKwlzLT50bHNfc2Vzc2lvbl90aWNrZXRfZXh0X2NiX2FyZyA9IGFyZzsKKwlyZXR1cm4oMSk7CisJfQorCitpbnQgU1NMX3NldF9zZXNzaW9uX3RpY2tldF9leHQoU1NMICpzLCB2b2lkICpleHRfZGF0YSwgaW50IGV4dF9sZW4pCisJeworCWlmIChzLT52ZXJzaW9uID49IFRMUzFfVkVSU0lPTikKKwkJeworCQlpZiAocy0+dGxzZXh0X3Nlc3Npb25fdGlja2V0KQorCQkJeworCQkJT1BFTlNTTF9mcmVlKHMtPnRsc2V4dF9zZXNzaW9uX3RpY2tldCk7CisJCQlzLT50bHNleHRfc2Vzc2lvbl90aWNrZXQgPSBOVUxMOworCQkJfQorCisJCXMtPnRsc2V4dF9zZXNzaW9uX3RpY2tldCA9IE9QRU5TU0xfbWFsbG9jKHNpemVvZihUTFNfU0VTU0lPTl9USUNLRVRfRVhUKSArIGV4dF9sZW4pOworCQlpZiAoIXMtPnRsc2V4dF9zZXNzaW9uX3RpY2tldCkKKwkJCXsKKwkJCVNTTGVycihTU0xfRl9TU0xfU0VUX1NFU1NJT05fVElDS0VUX0VYVCwgRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOworCQkJcmV0dXJuIDA7CisJCQl9CisKKwkJaWYgKGV4dF9kYXRhKQorCQkJeworCQkJcy0+dGxzZXh0X3Nlc3Npb25fdGlja2V0LT5sZW5ndGggPSBleHRfbGVuOworCQkJcy0+dGxzZXh0X3Nlc3Npb25fdGlja2V0LT5kYXRhID0gcy0+dGxzZXh0X3Nlc3Npb25fdGlja2V0ICsgMTsKKwkJCW1lbWNweShzLT50bHNleHRfc2Vzc2lvbl90aWNrZXQtPmRhdGEsIGV4dF9kYXRhLCBleHRfbGVuKTsKKwkJCX0KKwkJZWxzZQorCQkJeworCQkJcy0+dGxzZXh0X3Nlc3Npb25fdGlja2V0LT5sZW5ndGggPSAwOworCQkJcy0+dGxzZXh0X3Nlc3Npb25fdGlja2V0LT5kYXRhID0gTlVMTDsKKwkJCX0KKworCQlyZXR1cm4gMTsKKwkJfQorCisJcmV0dXJuIDA7CisJfQorI2VuZGlmIC8qIE9QRU5TU0xfTk9fVExTRVhUICovCisKIHR5cGVkZWYgc3RydWN0IHRpbWVvdXRfcGFyYW1fc3QKIAl7CiAJU1NMX0NUWCAqY3R4OwogCWxvbmcgdGltZTsKLQlMSEFTSCAqY2FjaGU7CisJTEhBU0hfT0YoU1NMX1NFU1NJT04pICpjYWNoZTsKIAl9IFRJTUVPVVRfUEFSQU07CiAKLXN0YXRpYyB2b2lkIHRpbWVvdXQoU1NMX1NFU1NJT04gKnMsIFRJTUVPVVRfUEFSQU0gKnApCitzdGF0aWMgdm9pZCB0aW1lb3V0X2RvYWxsX2FyZyhTU0xfU0VTU0lPTiAqcywgVElNRU9VVF9QQVJBTSAqcCkKIAl7CiAJaWYgKChwLT50aW1lID09IDApIHx8IChwLT50aW1lID4gKHMtPnRpbWUrcy0+dGltZW91dCkpKSAvKiB0aW1lb3V0ICovCiAJCXsKIAkJLyogVGhlIHJlYXNvbiB3ZSBkb24ndCBjYWxsIFNTTF9DVFhfcmVtb3ZlX3Nlc3Npb24oKSBpcyB0bwogCQkgKiBzYXZlIG9uIGxvY2tpbmcgb3ZlcmhlYWQgKi8KLQkJbGhfZGVsZXRlKHAtPmNhY2hlLHMpOworCQkodm9pZClsaF9TU0xfU0VTU0lPTl9kZWxldGUocC0+Y2FjaGUscyk7CiAJCVNTTF9TRVNTSU9OX2xpc3RfcmVtb3ZlKHAtPmN0eCxzKTsKIAkJcy0+bm90X3Jlc3VtYWJsZT0xOwogCQlpZiAocC0+Y3R4LT5yZW1vdmVfc2Vzc2lvbl9jYiAhPSBOVUxMKQpAQCAtNzM0LDcgKzkxNiw3IEBACiAJCX0KIAl9CiAKLXN0YXRpYyBJTVBMRU1FTlRfTEhBU0hfRE9BTExfQVJHX0ZOKHRpbWVvdXQsIFNTTF9TRVNTSU9OICosIFRJTUVPVVRfUEFSQU0gKikKK3N0YXRpYyBJTVBMRU1FTlRfTEhBU0hfRE9BTExfQVJHX0ZOKHRpbWVvdXQsIFNTTF9TRVNTSU9OLCBUSU1FT1VUX1BBUkFNKQogCiB2b2lkIFNTTF9DVFhfZmx1c2hfc2Vzc2lvbnMoU1NMX0NUWCAqcywgbG9uZyB0KQogCXsKQEAgLTc0NiwxMCArOTI4LDExIEBACiAJaWYgKHRwLmNhY2hlID09IE5VTEwpIHJldHVybjsKIAl0cC50aW1lPXQ7CiAJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19TU0xfQ1RYKTsKLQlpPXRwLmNhY2hlLT5kb3duX2xvYWQ7Ci0JdHAuY2FjaGUtPmRvd25fbG9hZD0wOwotCWxoX2RvYWxsX2FyZyh0cC5jYWNoZSwgTEhBU0hfRE9BTExfQVJHX0ZOKHRpbWVvdXQpLCAmdHApOwotCXRwLmNhY2hlLT5kb3duX2xvYWQ9aTsKKwlpPUNIRUNLRURfTEhBU0hfT0YoU1NMX1NFU1NJT04sIHRwLmNhY2hlKS0+ZG93bl9sb2FkOworCUNIRUNLRURfTEhBU0hfT0YoU1NMX1NFU1NJT04sIHRwLmNhY2hlKS0+ZG93bl9sb2FkPTA7CisJbGhfU1NMX1NFU1NJT05fZG9hbGxfYXJnKHRwLmNhY2hlLCBMSEFTSF9ET0FMTF9BUkdfRk4odGltZW91dCksCisJCQkJIFRJTUVPVVRfUEFSQU0sICZ0cCk7CisJQ0hFQ0tFRF9MSEFTSF9PRihTU0xfU0VTU0lPTiwgdHAuY2FjaGUpLT5kb3duX2xvYWQ9aTsKIAlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfU1NMX0NUWCk7CiAJfQogCkBAIC05MDksMyArMTA5Miw0IEBACiAJY3R4LT5hcHBfdmVyaWZ5X2Nvb2tpZV9jYj1jYjsKIAl9CiAKK0lNUExFTUVOVF9QRU1fcncoU1NMX1NFU1NJT04sIFNTTF9TRVNTSU9OLCBQRU1fU1RSSU5HX1NTTF9TRVNTSU9OLCBTU0xfU0VTU0lPTikKZGlmZiAtLWdpdCBhL3NzbC9zc2xfc3RhdC5jIGIvc3NsL3NzbF9zdGF0LmMKaW5kZXggZTc1MDlmMC4uMTQ0YjgxZSAxMDA2NDQKLS0tIGEvc3NsL3NzbF9zdGF0LmMKKysrIGIvc3NsL3NzbF9zdGF0LmMKQEAgLTU1LDYgKzU1LDMyIEBACiAgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCiAgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQogICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IDIwMDUgTm9raWEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhlIHBvcnRpb25zIG9mIHRoZSBhdHRhY2hlZCBzb2Z0d2FyZSAoIkNvbnRyaWJ1dGlvbiIpIGlzIGRldmVsb3BlZCBieQorICogTm9raWEgQ29ycG9yYXRpb24gYW5kIGlzIGxpY2Vuc2VkIHB1cnN1YW50IHRvIHRoZSBPcGVuU1NMIG9wZW4gc291cmNlCisgKiBsaWNlbnNlLgorICoKKyAqIFRoZSBDb250cmlidXRpb24sIG9yaWdpbmFsbHkgd3JpdHRlbiBieSBNaWthIEtvdXNhIGFuZCBQYXNpIEVyb25lbiBvZgorICogTm9raWEgQ29ycG9yYXRpb24sIGNvbnNpc3RzIG9mIHRoZSAiUFNLIiAoUHJlLVNoYXJlZCBLZXkpIGNpcGhlcnN1aXRlcworICogc3VwcG9ydCAoc2VlIFJGQyA0Mjc5KSB0byBPcGVuU1NMLgorICoKKyAqIE5vIHBhdGVudCBsaWNlbnNlcyBvciBvdGhlciByaWdodHMgZXhjZXB0IHRob3NlIGV4cHJlc3NseSBzdGF0ZWQgaW4KKyAqIHRoZSBPcGVuU1NMIG9wZW4gc291cmNlIGxpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIGdyYW50ZWQgb3IgcmVjZWl2ZWQKKyAqIGV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsLCBvciBvdGhlcndpc2UuCisgKgorICogTm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgTm9raWEgdGhhdCB0aGUgQ29udHJpYnV0aW9uIGRvZXMgbm90CisgKiBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb2YgYW55IHRoaXJkCisgKiBwYXJ0eSBvciB0aGF0IHRoZSBsaWNlbnNlIHByb3ZpZGVzIHlvdSB3aXRoIGFsbCB0aGUgbmVjZXNzYXJ5IHJpZ2h0cworICogdG8gbWFrZSB1c2Ugb2YgdGhlIENvbnRyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELiBJTgorICogQURESVRJT04gVE8gVEhFIERJU0NMQUlNRVJTIElOQ0xVREVEIElOIFRIRSBMSUNFTlNFLCBOT0tJQQorICogU1BFQ0lGSUNBTExZIERJU0NMQUlNUyBBTlkgTElBQklMSVRZIEZPUiBDTEFJTVMgQlJPVUdIVCBCWSBZT1UgT1IgQU5ZCisgKiBPVEhFUiBFTlRJVFkgQkFTRUQgT04gSU5GUklOR0VNRU5UIE9GIElOVEVMTEVDVFVBTCBQUk9QRVJUWSBSSUdIVFMgT1IKKyAqIE9USEVSV0lTRS4KKyAqLwogCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlICJzc2xfbG9jbC5oIgpAQCAtNDE0LDYgKzQ0MCwxMiBAQAogCWNhc2UgVExTMV9BRF9JTlRFUk5BTF9FUlJPUjoJCXN0cj0iSUUiOyBicmVhazsKIAljYXNlIFRMUzFfQURfVVNFUl9DQU5DRUxMRUQ6CQlzdHI9IlVTIjsgYnJlYWs7CiAJY2FzZSBUTFMxX0FEX05PX1JFTkVHT1RJQVRJT046CQlzdHI9Ik5SIjsgYnJlYWs7CisJY2FzZSBUTFMxX0FEX1VOU1VQUE9SVEVEX0VYVEVOU0lPTjoJc3RyPSJVRSI7IGJyZWFrOworCWNhc2UgVExTMV9BRF9DRVJUSUZJQ0FURV9VTk9CVEFJTkFCTEU6CXN0cj0iQ08iOyBicmVhazsKKwljYXNlIFRMUzFfQURfVU5SRUNPR05JWkVEX05BTUU6CQlzdHI9IlVOIjsgYnJlYWs7CisJY2FzZSBUTFMxX0FEX0JBRF9DRVJUSUZJQ0FURV9TVEFUVVNfUkVTUE9OU0U6IHN0cj0iQlIiOyBicmVhazsKKwljYXNlIFRMUzFfQURfQkFEX0NFUlRJRklDQVRFX0hBU0hfVkFMVUU6IHN0cj0iQkgiOyBicmVhazsKKwljYXNlIFRMUzFfQURfVU5LTk9XTl9QU0tfSURFTlRJVFk6CXN0cj0iVVAiOyBicmVhazsKIAlkZWZhdWx0OgkJCQlzdHI9IlVLIjsgYnJlYWs7CiAJCX0KIAlyZXR1cm4oc3RyKTsKQEAgLTQ5Nyw2ICs1MjksMjQgQEAKIAljYXNlIFRMUzFfQURfTk9fUkVORUdPVElBVElPTjoKIAkJc3RyPSJubyByZW5lZ290aWF0aW9uIjsKIAkJYnJlYWs7CisJY2FzZSBUTFMxX0FEX1VOU1VQUE9SVEVEX0VYVEVOU0lPTjoKKwkJc3RyPSJ1bnN1cHBvcnRlZCBleHRlbnNpb24iOworCQlicmVhazsKKwljYXNlIFRMUzFfQURfQ0VSVElGSUNBVEVfVU5PQlRBSU5BQkxFOgorCQlzdHI9ImNlcnRpZmljYXRlIHVub2J0YWluYWJsZSI7CisJCWJyZWFrOworCWNhc2UgVExTMV9BRF9VTlJFQ09HTklaRURfTkFNRToKKwkJc3RyPSJ1bnJlY29nbml6ZWQgbmFtZSI7CisJCWJyZWFrOworCWNhc2UgVExTMV9BRF9CQURfQ0VSVElGSUNBVEVfU1RBVFVTX1JFU1BPTlNFOgorCQlzdHI9ImJhZCBjZXJ0aWZpY2F0ZSBzdGF0dXMgcmVzcG9uc2UiOworCQlicmVhazsKKwljYXNlIFRMUzFfQURfQkFEX0NFUlRJRklDQVRFX0hBU0hfVkFMVUU6CisJCXN0cj0iYmFkIGNlcnRpZmljYXRlIGhhc2ggdmFsdWUiOworCQlicmVhazsKKwljYXNlIFRMUzFfQURfVU5LTk9XTl9QU0tfSURFTlRJVFk6CisJCXN0cj0idW5rbm93biBQU0sgaWRlbnRpdHkiOworCQlicmVhazsKIAlkZWZhdWx0OiBzdHI9InVua25vd24iOyBicmVhazsKIAkJfQogCXJldHVybihzdHIpOwpkaWZmIC0tZ2l0IGEvc3NsL3NzbF90eHQuYyBiL3NzbC9zc2xfdHh0LmMKaW5kZXggODFjMTM2MS4uMzEyMjQ0MCAxMDA2NDQKLS0tIGEvc3NsL3NzbF90eHQuYworKysgYi9zc2wvc3NsX3R4dC5jCkBAIC01NSw2ICs1NSwzMiBAQAogICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQogICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAyMDA1IE5va2lhLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoZSBwb3J0aW9ucyBvZiB0aGUgYXR0YWNoZWQgc29mdHdhcmUgKCJDb250cmlidXRpb24iKSBpcyBkZXZlbG9wZWQgYnkKKyAqIE5va2lhIENvcnBvcmF0aW9uIGFuZCBpcyBsaWNlbnNlZCBwdXJzdWFudCB0byB0aGUgT3BlblNTTCBvcGVuIHNvdXJjZQorICogbGljZW5zZS4KKyAqCisgKiBUaGUgQ29udHJpYnV0aW9uLCBvcmlnaW5hbGx5IHdyaXR0ZW4gYnkgTWlrYSBLb3VzYSBhbmQgUGFzaSBFcm9uZW4gb2YKKyAqIE5va2lhIENvcnBvcmF0aW9uLCBjb25zaXN0cyBvZiB0aGUgIlBTSyIgKFByZS1TaGFyZWQgS2V5KSBjaXBoZXJzdWl0ZXMKKyAqIHN1cHBvcnQgKHNlZSBSRkMgNDI3OSkgdG8gT3BlblNTTC4KKyAqCisgKiBObyBwYXRlbnQgbGljZW5zZXMgb3Igb3RoZXIgcmlnaHRzIGV4Y2VwdCB0aG9zZSBleHByZXNzbHkgc3RhdGVkIGluCisgKiB0aGUgT3BlblNTTCBvcGVuIHNvdXJjZSBsaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCBncmFudGVkIG9yIHJlY2VpdmVkCisgKiBleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCwgb3Igb3RoZXJ3aXNlLgorICoKKyAqIE5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IE5va2lhIHRoYXQgdGhlIENvbnRyaWJ1dGlvbiBkb2VzIG5vdAorICogaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIGFueSB0aGlyZAorICogcGFydHkgb3IgdGhhdCB0aGUgbGljZW5zZSBwcm92aWRlcyB5b3Ugd2l0aCBhbGwgdGhlIG5lY2Vzc2FyeSByaWdodHMKKyAqIHRvIG1ha2UgdXNlIG9mIHRoZSBDb250cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORC4gSU4KKyAqIEFERElUSU9OIFRPIFRIRSBESVNDTEFJTUVSUyBJTkNMVURFRCBJTiBUSEUgTElDRU5TRSwgTk9LSUEKKyAqIFNQRUNJRklDQUxMWSBESVNDTEFJTVMgQU5ZIExJQUJJTElUWSBGT1IgQ0xBSU1TIEJST1VHSFQgQlkgWU9VIE9SIEFOWQorICogT1RIRVIgRU5USVRZIEJBU0VEIE9OIElORlJJTkdFTUVOVCBPRiBJTlRFTExFQ1RVQUwgUFJPUEVSVFkgUklHSFRTIE9SCisgKiBPVEhFUldJU0UuCisgKi8KIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9idWZmZXIuaD4KQEAgLTE1NSw2ICsxODEsMTIgQEAKIAkJCWlmIChCSU9fcHJpbnRmKGJwLCIlMDJYIix4LT5rcmI1X2NsaWVudF9wcmluY1tpXSkgPD0gMCkgZ290byBlcnI7CiAJCQl9CiAjZW5kaWYgLyogT1BFTlNTTF9OT19LUkI1ICovCisjaWZuZGVmIE9QRU5TU0xfTk9fUFNLCisJaWYgKEJJT19wdXRzKGJwLCJcbiAgICBQU0sgaWRlbnRpdHk6ICIpIDw9IDApIGdvdG8gZXJyOworCWlmIChCSU9fcHJpbnRmKGJwLCAiJXMiLCB4LT5wc2tfaWRlbnRpdHkgPyB4LT5wc2tfaWRlbnRpdHkgOiAiTm9uZSIpIDw9IDApIGdvdG8gZXJyOworCWlmIChCSU9fcHV0cyhicCwiXG4gICAgUFNLIGlkZW50aXR5IGhpbnQ6ICIpIDw9IDApIGdvdG8gZXJyOworCWlmIChCSU9fcHJpbnRmKGJwLCAiJXMiLCB4LT5wc2tfaWRlbnRpdHlfaGludCA/IHgtPnBza19pZGVudGl0eV9oaW50IDogIk5vbmUiKSA8PSAwKSBnb3RvIGVycjsKKyNlbmRpZgogI2lmbmRlZiBPUEVOU1NMX05PX1RMU0VYVAogCWlmICh4LT50bHNleHRfdGlja19saWZldGltZV9oaW50KQogCQl7CkBAIC0xNzAsMTIgKzIwMiwxMyBAQAogCQkJZ290byBlcnI7CiAJCX0KICNlbmRpZgorCiAjaWZuZGVmIE9QRU5TU0xfTk9fQ09NUAogCWlmICh4LT5jb21wcmVzc19tZXRoICE9IDApCiAJCXsKIAkJU1NMX0NPTVAgKmNvbXAgPSBOVUxMOwogCi0JCXNzbF9jaXBoZXJfZ2V0X2V2cCh4LE5VTEwsTlVMTCwmY29tcCk7CisJCXNzbF9jaXBoZXJfZ2V0X2V2cCh4LE5VTEwsTlVMTCxOVUxMLE5VTEwsJmNvbXApOwogCQlpZiAoY29tcCA9PSBOVUxMKQogCQkJewogCQkJaWYgKEJJT19wcmludGYoYnAsIlxuICAgIENvbXByZXNzaW9uOiAlZCIseC0+Y29tcHJlc3NfbWV0aCkgPD0gMCkgZ290byBlcnI7CmRpZmYgLS1naXQgYS9zc2wvc3NsdGVzdC5jIGIvc3NsL3NzbHRlc3QuYwppbmRleCAwOWQzNTAyLi4zOWNiNTQxIDEwMDY0NAotLS0gYS9zc2wvc3NsdGVzdC5jCisrKyBiL3NzbC9zc2x0ZXN0LmMKQEAgLTExMyw2ICsxMTMsMzIgQEAKICAqIEVDQyBjaXBoZXIgc3VpdGUgc3VwcG9ydCBpbiBPcGVuU1NMIG9yaWdpbmFsbHkgZGV2ZWxvcGVkIGJ5IAogICogU1VOIE1JQ1JPU1lTVEVNUywgSU5DLiwgYW5kIGNvbnRyaWJ1dGVkIHRvIHRoZSBPcGVuU1NMIHByb2plY3QuCiAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgMjAwNSBOb2tpYS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGUgcG9ydGlvbnMgb2YgdGhlIGF0dGFjaGVkIHNvZnR3YXJlICgiQ29udHJpYnV0aW9uIikgaXMgZGV2ZWxvcGVkIGJ5CisgKiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQgaXMgbGljZW5zZWQgcHVyc3VhbnQgdG8gdGhlIE9wZW5TU0wgb3BlbiBzb3VyY2UKKyAqIGxpY2Vuc2UuCisgKgorICogVGhlIENvbnRyaWJ1dGlvbiwgb3JpZ2luYWxseSB3cml0dGVuIGJ5IE1pa2EgS291c2EgYW5kIFBhc2kgRXJvbmVuIG9mCisgKiBOb2tpYSBDb3Jwb3JhdGlvbiwgY29uc2lzdHMgb2YgdGhlICJQU0siIChQcmUtU2hhcmVkIEtleSkgY2lwaGVyc3VpdGVzCisgKiBzdXBwb3J0IChzZWUgUkZDIDQyNzkpIHRvIE9wZW5TU0wuCisgKgorICogTm8gcGF0ZW50IGxpY2Vuc2VzIG9yIG90aGVyIHJpZ2h0cyBleGNlcHQgdGhvc2UgZXhwcmVzc2x5IHN0YXRlZCBpbgorICogdGhlIE9wZW5TU0wgb3BlbiBzb3VyY2UgbGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgZ3JhbnRlZCBvciByZWNlaXZlZAorICogZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwsIG9yIG90aGVyd2lzZS4KKyAqCisgKiBObyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBOb2tpYSB0aGF0IHRoZSBDb250cmlidXRpb24gZG9lcyBub3QKKyAqIGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkgdGhpcmQKKyAqIHBhcnR5IG9yIHRoYXQgdGhlIGxpY2Vuc2UgcHJvdmlkZXMgeW91IHdpdGggYWxsIHRoZSBuZWNlc3NhcnkgcmlnaHRzCisgKiB0byBtYWtlIHVzZSBvZiB0aGUgQ29udHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQuIElOCisgKiBBRERJVElPTiBUTyBUSEUgRElTQ0xBSU1FUlMgSU5DTFVERUQgSU4gVEhFIExJQ0VOU0UsIE5PS0lBCisgKiBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1TIEFOWSBMSUFCSUxJVFkgRk9SIENMQUlNUyBCUk9VR0hUIEJZIFlPVSBPUiBBTlkKKyAqIE9USEVSIEVOVElUWSBCQVNFRCBPTiBJTkZSSU5HRU1FTlQgT0YgSU5URUxMRUNUVUFMIFBST1BFUlRZIFJJR0hUUyBPUgorICogT1RIRVJXSVNFLgorICovCiAKICNkZWZpbmUgX0JTRF9TT1VSQ0UgMQkJLyogT3IgZ2V0aG9zdG5hbWUgd29uJ3QgYmUgZGVjbGFyZWQgcHJvcGVybHkKIAkJCQkgICBvbiBMaW51eCBhbmQgR05VIHBsYXRmb3Jtcy4gKi8KQEAgLTEyOCw4ICsxNTQsMTEgQEAKICNkZWZpbmUgVVNFX1NPQ0tFVFMKICNpbmNsdWRlICJlX29zLmgiCiAKKyNpZmRlZiBPUEVOU1NMX1NZU19WTVMKICNkZWZpbmUgX1hPUEVOX1NPVVJDRSA1MDAJLyogT3IgaXNhc2NpaSB3b24ndCBiZSBkZWNsYXJlZCBwcm9wZXJseSBvbgogCQkJCSAgIFZNUyAoYXQgbGVhc3Qgd2l0aCBERUNvbXBIUCBDKS4gICovCisjZW5kaWYKKwogI2luY2x1ZGUgPGN0eXBlLmg+CiAKICNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgpAQCAtMjA3LDYgKzIzNiwxNiBAQAogc3RhdGljIERIICpnZXRfZGgxMDI0ZHNhKHZvaWQpOwogI2VuZGlmCiAKKworc3RhdGljIGNoYXIgKnBza19rZXk9TlVMTDsgLyogYnkgZGVmYXVsdCBQU0sgaXMgbm90IHVzZWQgKi8KKyNpZm5kZWYgT1BFTlNTTF9OT19QU0sKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcHNrX2NsaWVudF9jYWxsYmFjayhTU0wgKnNzbCwgY29uc3QgY2hhciAqaGludCwgY2hhciAqaWRlbnRpdHksCisJdW5zaWduZWQgaW50IG1heF9pZGVudGl0eV9sZW4sIHVuc2lnbmVkIGNoYXIgKnBzaywKKwl1bnNpZ25lZCBpbnQgbWF4X3Bza19sZW4pOworc3RhdGljIHVuc2lnbmVkIGludCBwc2tfc2VydmVyX2NhbGxiYWNrKFNTTCAqc3NsLCBjb25zdCBjaGFyICppZGVudGl0eSwgdW5zaWduZWQgY2hhciAqcHNrLAorCXVuc2lnbmVkIGludCBtYXhfcHNrX2xlbik7CisjZW5kaWYKKwogc3RhdGljIEJJTyAqYmlvX2Vycj1OVUxMOwogc3RhdGljIEJJTyAqYmlvX3N0ZG91dD1OVUxMOwogCkBAIC0yMjksOSArMjY4LDYgQEAKIAl7CiAJZnByaW50ZihzdGRlcnIsInVzYWdlOiBzc2x0ZXN0IFthcmdzIC4uLl1cbiIpOwogCWZwcmludGYoc3RkZXJyLCJcbiIpOwotI2lmZGVmIE9QRU5TU0xfRklQUwotCWZwcmludGYoc3RkZXJyLCItRiAgICAgICAgICAgICAtIHJ1biB0ZXN0IGluIEZJUFMgbW9kZVxuIik7Ci0jZW5kaWYKIAlmcHJpbnRmKHN0ZGVyciwiIC1zZXJ2ZXJfYXV0aCAgLSBjaGVjayBzZXJ2ZXIgY2VydGlmaWNhdGVcbiIpOwogCWZwcmludGYoc3RkZXJyLCIgLWNsaWVudF9hdXRoICAtIGRvIGNsaWVudCBhdXRoZW50aWNhdGlvblxuIik7CiAJZnByaW50ZihzdGRlcnIsIiAtcHJveHkgICAgICAgIC0gYWxsb3cgcHJveHkgY2VydGlmaWNhdGVzXG4iKTsKQEAgLTI1MCw2ICsyODYsOSBAQAogI2lmbmRlZiBPUEVOU1NMX05PX0VDREgKIAlmcHJpbnRmKHN0ZGVyciwiIC1ub19lY2RoZSAgICAgLSBkaXNhYmxlIEVDREhFXG4iKTsKICNlbmRpZgorI2lmbmRlZiBPUEVOU1NMX05PX1BTSworCWZwcmludGYoc3RkZXJyLCIgLXBzayBhcmcgICAgICAtIFBTSyBpbiBoZXggKHdpdGhvdXQgMHgpXG4iKTsKKyNlbmRpZgogI2lmbmRlZiBPUEVOU1NMX05PX1NTTDIKIAlmcHJpbnRmKHN0ZGVyciwiIC1zc2wyICAgICAgICAgLSB1c2UgU1NMdjJcbiIpOwogI2VuZGlmCkBAIC0yODMsNyArMzIyLDcgQEAKIAogc3RhdGljIHZvaWQgcHJpbnRfZGV0YWlscyhTU0wgKmNfc3NsLCBjb25zdCBjaGFyICpwcmVmaXgpCiAJewotCVNTTF9DSVBIRVIgKmNpcGg7CisJY29uc3QgU1NMX0NJUEhFUiAqY2lwaDsKIAlYNTA5ICpjZXJ0OwogCQkKIAljaXBoPVNTTF9nZXRfY3VycmVudF9jaXBoZXIoY19zc2wpOwpAQCAtMzg4LDYgKzQyNywyOCBAQAogCQl9CiAJfQogCisjaWZkZWYgVExTRVhUX1RZUEVfb3BhcXVlX3ByZl9pbnB1dAorc3RydWN0IGNiX2luZm9fc3QgeyB2b2lkICppbnB1dDsgc2l6ZV90IGxlbjsgaW50IHJldDsgfTsKK3N0cnVjdCBjYl9pbmZvX3N0IGNvMSA9IHsgIkMiLCAxLCAxIH07IC8qIHRyeSB0byBuZWdvdGlhdGUgb3FhcXVlIFBSRiBpbnB1dCAqLworc3RydWN0IGNiX2luZm9fc3QgY28yID0geyAiQyIsIDEsIDIgfTsgLyogaW5zaXN0IG9uIG9xYXF1ZSBQUkYgaW5wdXQgKi8KK3N0cnVjdCBjYl9pbmZvX3N0IHNvMSA9IHsgIlMiLCAxLCAxIH07IC8qIHRyeSB0byBuZWdvdGlhdGUgb3FhcXVlIFBSRiBpbnB1dCAqLworc3RydWN0IGNiX2luZm9fc3Qgc28yID0geyAiUyIsIDEsIDIgfTsgLyogaW5zaXN0IG9uIG9xYXF1ZSBQUkYgaW5wdXQgKi8KKworaW50IG9wYXF1ZV9wcmZfaW5wdXRfY2IoU1NMICpzc2wsIHZvaWQgKnBlZXJpbnB1dCwgc2l6ZV90IGxlbiwgdm9pZCAqYXJnXykKKwl7CisJc3RydWN0IGNiX2luZm9fc3QgKmFyZyA9IGFyZ187CisKKwlpZiAoYXJnID09IE5VTEwpCisJCXJldHVybiAxOworCQorCWlmICghU1NMX3NldF90bHNleHRfb3BhcXVlX3ByZl9pbnB1dChzc2wsIGFyZy0+aW5wdXQsIGFyZy0+bGVuKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIGFyZy0+cmV0OworCX0KKyNlbmRpZgorCWludCBzc2xfbW9kZSA9IDA7CisJaW50IGNfc21hbGxfcmVjb3Jkcz0wOworCWludCBzX3NtYWxsX3JlY29yZHM9MDsKIAogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAl7CkBAIC00MDksMTkgKzQ3MCwyMCBAQAogI2VuZGlmCiAJU1NMX0NUWCAqc19jdHg9TlVMTDsKIAlTU0xfQ1RYICpjX2N0eD1OVUxMOwotCVNTTF9NRVRIT0QgKm1ldGg9TlVMTDsKKwljb25zdCBTU0xfTUVUSE9EICptZXRoPU5VTEw7CiAJU1NMICpjX3NzbCwqc19zc2w7CiAJaW50IG51bWJlcj0xLHJldXNlPTA7CiAJbG9uZyBieXRlcz0yNTZMOwogI2lmbmRlZiBPUEVOU1NMX05PX0RICiAJREggKmRoOwotCWludCBkaGUxMDI0ID0gMSwgZGhlMTAyNGRzYSA9IDA7CisJaW50IGRoZTEwMjQgPSAwLCBkaGUxMDI0ZHNhID0gMDsKICNlbmRpZgogI2lmbmRlZiBPUEVOU1NMX05PX0VDREgKIAlFQ19LRVkgKmVjZGggPSBOVUxMOwogI2VuZGlmCiAJaW50IG5vX2RoZSA9IDA7CiAJaW50IG5vX2VjZGhlID0gMDsKKwlpbnQgbm9fcHNrID0gMDsKIAlpbnQgcHJpbnRfdGltZSA9IDA7CiAJY2xvY2tfdCBzX3RpbWUgPSAwLCBjX3RpbWUgPSAwOwogCWludCBjb21wID0gMDsKQEAgLTQzMCwxOCArNDkyLDEyIEBACiAjZW5kaWYKIAlTVEFDS19PRihTU0xfQ09NUCkgKnNzbF9jb21wX21ldGhvZHMgPSBOVUxMOwogCWludCB0ZXN0X2NpcGhlcmxpc3QgPSAwOwotI2lmZGVmIE9QRU5TU0xfRklQUwotCWludCBmaXBzX21vZGU9MDsKLSNlbmRpZgotCWludCBzc2xfbW9kZSA9IDA7Ci0JaW50IGNfc21hbGxfcmVjb3Jkcz0wOwotCWludCBzX3NtYWxsX3JlY29yZHM9MDsKIAogCXZlcmJvc2UgPSAwOwogCWRlYnVnID0gMDsKIAljaXBoZXIgPSAwOwogCi0JYmlvX2Vycj1CSU9fbmV3X2ZwKHN0ZGVycixCSU9fTk9DTE9TRSk7CQorCWJpb19lcnI9QklPX25ld19mcChzdGRlcnIsQklPX05PQ0xPU0V8QklPX0ZQX1RFWFQpOwkKIAogCUNSWVBUT19zZXRfbG9ja2luZ19jYWxsYmFjayhsb2NrX2RiZ19jYik7CiAKQEAgLTQ2MCwyMyArNTE2LDE0IEBACiAKIAlSQU5EX3NlZWQocm5kX3NlZWQsIHNpemVvZiBybmRfc2VlZCk7CiAKLQliaW9fc3Rkb3V0PUJJT19uZXdfZnAoc3Rkb3V0LEJJT19OT0NMT1NFKTsKKwliaW9fc3Rkb3V0PUJJT19uZXdfZnAoc3Rkb3V0LEJJT19OT0NMT1NFfEJJT19GUF9URVhUKTsKIAogCWFyZ2MtLTsKIAlhcmd2Kys7CiAKIAl3aGlsZSAoYXJnYyA+PSAxKQogCQl7Ci0JCWlmKCFzdHJjbXAoKmFyZ3YsIi1GIikpCi0JCQl7Ci0jaWZkZWYgT1BFTlNTTF9GSVBTCi0JCQlmaXBzX21vZGU9MTsKLSNlbHNlCi0JCQlmcHJpbnRmKHN0ZGVyciwibm90IGNvbXBpbGVkIHdpdGggRklQUyBzdXBwb3J0LCBzbyBleGl0dGluZyB3aXRob3V0IHJ1bm5pbmcuXG4iKTsKLQkJCUVYSVQoMCk7Ci0jZW5kaWYKLQkJCX0KLQkJZWxzZSBpZgkoc3RyY21wKCphcmd2LCItc2VydmVyX2F1dGgiKSA9PSAwKQorCQlpZgkoc3RyY21wKCphcmd2LCItc2VydmVyX2F1dGgiKSA9PSAwKQogCQkJc2VydmVyX2F1dGg9MTsKIAkJZWxzZSBpZgkoc3RyY21wKCphcmd2LCItY2xpZW50X2F1dGgiKSA9PSAwKQogCQkJY2xpZW50X2F1dGg9MTsKQEAgLTUxNiw2ICs1NjMsMjAgQEAKIAkJCW5vX2RoZT0xOwogCQllbHNlIGlmCShzdHJjbXAoKmFyZ3YsIi1ub19lY2RoZSIpID09IDApCiAJCQlub19lY2RoZT0xOworCQllbHNlIGlmIChzdHJjbXAoKmFyZ3YsIi1wc2siKSA9PSAwKQorCQkJeworCQkJaWYgKC0tYXJnYyA8IDEpIGdvdG8gYmFkOworCQkJcHNrX2tleT0qKCsrYXJndik7CisjaWZuZGVmIE9QRU5TU0xfTk9fUFNLCisJCQlpZiAoc3Ryc3BuKHBza19rZXksICJhYmNkZWZBQkNERUYxMjM0NTY3ODkwIikgIT0gc3RybGVuKHBza19rZXkpKQorCQkJCXsKKwkJCQlCSU9fcHJpbnRmKGJpb19lcnIsIk5vdCBhIGhleCBudW1iZXIgJyVzJ1xuIiwqYXJndik7CisJCQkJZ290byBiYWQ7CisJCQkJfQorI2Vsc2UKKwkJCW5vX3Bzaz0xOworI2VuZGlmCisJCQl9CiAJCWVsc2UgaWYJKHN0cmNtcCgqYXJndiwiLXNzbDIiKSA9PSAwKQogCQkJc3NsMj0xOwogCQllbHNlIGlmCShzdHJjbXAoKmFyZ3YsIi10bHMxIikgPT0gMCkKQEAgLTY2NiwyMCArNzI3LDYgQEAKIAkJRVhJVCgxKTsKIAkJfQogCi0jaWZkZWYgT1BFTlNTTF9GSVBTCi0JaWYoZmlwc19tb2RlKQotCQl7Ci0JCWlmKCFGSVBTX21vZGVfc2V0KDEpKQotCQkJewotCQkJRVJSX2xvYWRfY3J5cHRvX3N0cmluZ3MoKTsKLQkJCUVSUl9wcmludF9lcnJvcnMoQklPX25ld19mcChzdGRlcnIsQklPX05PQ0xPU0UpKTsKLQkJCUVYSVQoMSk7Ci0JCQl9Ci0JCWVsc2UKLQkJCWZwcmludGYoc3RkZXJyLCIqKiogSU4gRklQUyBNT0RFICoqKlxuIik7Ci0JCX0KLSNlbmRpZgotCiAJaWYgKHByaW50X3RpbWUpCiAJCXsKIAkJaWYgKCFiaW9fcGFpcikKQEAgLTgzOSw2ICs4ODYsMTMgQEAKIAlTU0xfQ1RYX3NldF90bXBfcnNhX2NhbGxiYWNrKHNfY3R4LHRtcF9yc2FfY2IpOwogI2VuZGlmCiAKKyNpZmRlZiBUTFNFWFRfVFlQRV9vcGFxdWVfcHJmX2lucHV0CisJU1NMX0NUWF9zZXRfdGxzZXh0X29wYXF1ZV9wcmZfaW5wdXRfY2FsbGJhY2soY19jdHgsIG9wYXF1ZV9wcmZfaW5wdXRfY2IpOworCVNTTF9DVFhfc2V0X3Rsc2V4dF9vcGFxdWVfcHJmX2lucHV0X2NhbGxiYWNrKHNfY3R4LCBvcGFxdWVfcHJmX2lucHV0X2NiKTsKKwlTU0xfQ1RYX3NldF90bHNleHRfb3BhcXVlX3ByZl9pbnB1dF9jYWxsYmFja19hcmcoY19jdHgsICZjbzEpOyAvKiBvciAmY28yIG9yIE5VTEwgKi8KKwlTU0xfQ1RYX3NldF90bHNleHRfb3BhcXVlX3ByZl9pbnB1dF9jYWxsYmFja19hcmcoc19jdHgsICZzbzEpOyAvKiBvciAmc28yIG9yIE5VTEwgKi8KKyNlbmRpZgorCiAJaWYgKCFTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9maWxlKHNfY3R4LHNlcnZlcl9jZXJ0LFNTTF9GSUxFVFlQRV9QRU0pKQogCQl7CiAJCUVSUl9wcmludF9lcnJvcnMoYmlvX2Vycik7CkBAIC04OTAsNiArOTQ0LDMxIEBACiAJCVNTTF9DVFhfc2V0X3Nlc3Npb25faWRfY29udGV4dChzX2N0eCwgKHZvaWQgKikmc2Vzc2lvbl9pZF9jb250ZXh0LCBzaXplb2Ygc2Vzc2lvbl9pZF9jb250ZXh0KTsKIAl9CiAKKwkvKiBVc2UgUFNLIG9ubHkgaWYgUFNLIGtleSBpcyBnaXZlbiAqLworCWlmIChwc2tfa2V5ICE9IE5VTEwpCisJCXsKKwkJLyogbm9fcHNrIGlzIHVzZWQgdG8gYXZvaWQgcHV0dGluZyBwc2sgY29tbWFuZCB0byBvcGVuc3NsIHRvb2wgKi8KKwkJaWYgKG5vX3BzaykKKwkJCXsKKwkJCS8qIGlmIFBTSyBpcyBub3QgY29tcGlsZWQgaW4gYW5kIHBzayBrZXkgaXMKKwkJCSAqIGdpdmVuLCBkbyBub3RoaW5nIGFuZCBleGl0IHN1Y2Nlc3NmdWxseSAqLworCQkJcmV0PTA7CisJCQlnb3RvIGVuZDsKKwkJCX0KKyNpZm5kZWYgT1BFTlNTTF9OT19QU0sKKwkJU1NMX0NUWF9zZXRfcHNrX2NsaWVudF9jYWxsYmFjayhjX2N0eCwgcHNrX2NsaWVudF9jYWxsYmFjayk7CisJCVNTTF9DVFhfc2V0X3Bza19zZXJ2ZXJfY2FsbGJhY2soc19jdHgsIHBza19zZXJ2ZXJfY2FsbGJhY2spOworCQlpZiAoZGVidWcpCisJCQlCSU9fcHJpbnRmKGJpb19lcnIsInNldHRpbmcgUFNLIGlkZW50aXR5IGhpbnQgdG8gc19jdHhcbiIpOworCQlpZiAoIVNTTF9DVFhfdXNlX3Bza19pZGVudGl0eV9oaW50KHNfY3R4LCAiY3R4IHNlcnZlciBpZGVudGl0eV9oaW50IikpCisJCQl7CisJCQlCSU9fcHJpbnRmKGJpb19lcnIsImVycm9yIHNldHRpbmcgUFNLIGlkZW50aXR5IGhpbnQgdG8gc19jdHhcbiIpOworCQkJRVJSX3ByaW50X2Vycm9ycyhiaW9fZXJyKTsKKwkJCWdvdG8gZW5kOworCQkJfQorI2VuZGlmCisJCX0KKwogCWNfc3NsPVNTTF9uZXcoY19jdHgpOwogCXNfc3NsPVNTTF9uZXcoc19jdHgpOwogCkBAIC05NjYsNyArMTA0NSw3IEBACiAjZW5kaWYKIAlDUllQVE9fY2xlYW51cF9hbGxfZXhfZGF0YSgpOwogCUVSUl9mcmVlX3N0cmluZ3MoKTsKLQlFUlJfcmVtb3ZlX3N0YXRlKDApOworCUVSUl9yZW1vdmVfdGhyZWFkX3N0YXRlKE5VTEwpOwogCUVWUF9jbGVhbnVwKCk7CiAJQ1JZUFRPX21lbV9sZWFrcyhiaW9fZXJyKTsKIAlpZiAoYmlvX2VyciAhPSBOVUxMKSBCSU9fZnJlZShiaW9fZXJyKTsKQEAgLTIxMTYsNyArMjE5NSwxNSBAQAogCQl9CiAKICNpZm5kZWYgT1BFTlNTTF9OT19YNTA5X1ZFUklGWQorIyBpZmRlZiBPUEVOU1NMX0ZJUFMKKwlpZihzLT52ZXJzaW9uID09IFRMUzFfVkVSU0lPTikKKwkJRklQU19hbGxvd19tZDUoMSk7CisjIGVuZGlmCiAJb2sgPSBYNTA5X3ZlcmlmeV9jZXJ0KGN0eCk7CisjIGlmZGVmIE9QRU5TU0xfRklQUworCWlmKHMtPnZlcnNpb24gPT0gVExTMV9WRVJTSU9OKQorCQlGSVBTX2FsbG93X21kNSgwKTsKKyMgZW5kaWYKICNlbmRpZgogCiAJaWYgKGNiX2FyZy0+cHJveHlfYXV0aCkKQEAgLTIyODUsMTEgKzIzNzIsNzQgQEAKIAl9CiAjZW5kaWYKIAorI2lmbmRlZiBPUEVOU1NMX05PX1BTSworLyogY29udmVydCB0aGUgUFNLIGtleSAocHNrX2tleSkgaW4gYXNjaWkgdG8gYmluYXJ5IChwc2spICovCitzdGF0aWMgaW50IHBza19rZXkyYm4oY29uc3QgY2hhciAqcHNra2V5LCB1bnNpZ25lZCBjaGFyICpwc2ssCisJdW5zaWduZWQgaW50IG1heF9wc2tfbGVuKQorCXsKKwlpbnQgcmV0OworCUJJR05VTSAqYm4gPSBOVUxMOworCisJcmV0ID0gQk5faGV4MmJuKCZibiwgcHNra2V5KTsKKwlpZiAoIXJldCkKKwkJeworCQlCSU9fcHJpbnRmKGJpb19lcnIsIkNvdWxkIG5vdCBjb252ZXJ0IFBTSyBrZXkgJyVzJyB0byBCSUdOVU1cbiIsIHBza2tleSk7IAorCQlpZiAoYm4pCisJCQlCTl9mcmVlKGJuKTsKKwkJcmV0dXJuIDA7CisJCX0KKwlpZiAoQk5fbnVtX2J5dGVzKGJuKSA+IChpbnQpbWF4X3Bza19sZW4pCisJCXsKKwkJQklPX3ByaW50ZihiaW9fZXJyLCJwc2sgYnVmZmVyIG9mIGNhbGxiYWNrIGlzIHRvbyBzbWFsbCAoJWQpIGZvciBrZXkgKCVkKVxuIiwKKwkJCW1heF9wc2tfbGVuLCBCTl9udW1fYnl0ZXMoYm4pKTsKKwkJQk5fZnJlZShibik7CisJCXJldHVybiAwOworCQl9CisJcmV0ID0gQk5fYm4yYmluKGJuLCBwc2spOworCUJOX2ZyZWUoYm4pOworCXJldHVybiByZXQ7CisJfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHBza19jbGllbnRfY2FsbGJhY2soU1NMICpzc2wsIGNvbnN0IGNoYXIgKmhpbnQsIGNoYXIgKmlkZW50aXR5LAorCXVuc2lnbmVkIGludCBtYXhfaWRlbnRpdHlfbGVuLCB1bnNpZ25lZCBjaGFyICpwc2ssCisJdW5zaWduZWQgaW50IG1heF9wc2tfbGVuKQorCXsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGludCBwc2tfbGVuID0gMDsKKworCXJldCA9IEJJT19zbnByaW50ZihpZGVudGl0eSwgbWF4X2lkZW50aXR5X2xlbiwgIkNsaWVudF9pZGVudGl0eSIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9lcnI7CisJaWYgKGRlYnVnKQorCQlmcHJpbnRmKHN0ZGVyciwgImNsaWVudDogY3JlYXRlZCBpZGVudGl0eSAnJXMnIGxlbj0lZFxuIiwgaWRlbnRpdHksIHJldCk7CisJcmV0ID0gcHNrX2tleTJibihwc2tfa2V5LCBwc2ssIG1heF9wc2tfbGVuKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfZXJyOworCXBza19sZW4gPSByZXQ7CitvdXRfZXJyOgorCXJldHVybiBwc2tfbGVuOworCX0KKworc3RhdGljIHVuc2lnbmVkIGludCBwc2tfc2VydmVyX2NhbGxiYWNrKFNTTCAqc3NsLCBjb25zdCBjaGFyICppZGVudGl0eSwKKwl1bnNpZ25lZCBjaGFyICpwc2ssIHVuc2lnbmVkIGludCBtYXhfcHNrX2xlbikKKwl7CisJdW5zaWduZWQgaW50IHBza19sZW49MDsKKworCWlmIChzdHJjbXAoaWRlbnRpdHksICJDbGllbnRfaWRlbnRpdHkiKSAhPSAwKQorCQl7CisJCUJJT19wcmludGYoYmlvX2VyciwgInNlcnZlcjogUFNLIGVycm9yOiBjbGllbnQgaWRlbnRpdHkgbm90IGZvdW5kXG4iKTsKKwkJcmV0dXJuIDA7CisJCX0KKwlwc2tfbGVuPXBza19rZXkyYm4ocHNrX2tleSwgcHNrLCBtYXhfcHNrX2xlbik7CisJcmV0dXJuIHBza19sZW47CisJfQorI2VuZGlmCisKIHN0YXRpYyBpbnQgZG9fdGVzdF9jaXBoZXJsaXN0KHZvaWQpCiAJewogCWludCBpID0gMDsKIAljb25zdCBTU0xfTUVUSE9EICptZXRoOwotCVNTTF9DSVBIRVIgKmNpLCAqdGNpID0gTlVMTDsKKwljb25zdCBTU0xfQ0lQSEVSICpjaSwgKnRjaSA9IE5VTEw7CiAKICNpZm5kZWYgT1BFTlNTTF9OT19TU0wyCiAJZnByaW50ZihzdGRlcnIsICJ0ZXN0aW5nIFNTTHYyIGNpcGhlciBsaXN0IG9yZGVyOiAiKTsKZGlmZiAtLWdpdCBhL3NzbC90MV9jbG50LmMgYi9zc2wvdDFfY2xudC5jCmluZGV4IDRkMWUxOTguLmM4N2FmMTcgMTAwNjQ0Ci0tLSBhL3NzbC90MV9jbG50LmMKKysrIGIvc3NsL3QxX2NsbnQuYwpAQCAtNjMsOCArNjMsOCBAQAogI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgogI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CiAKLXN0YXRpYyBTU0xfTUVUSE9EICp0bHMxX2dldF9jbGllbnRfbWV0aG9kKGludCB2ZXIpOwotc3RhdGljIFNTTF9NRVRIT0QgKnRsczFfZ2V0X2NsaWVudF9tZXRob2QoaW50IHZlcikKK3N0YXRpYyBjb25zdCBTU0xfTUVUSE9EICp0bHMxX2dldF9jbGllbnRfbWV0aG9kKGludCB2ZXIpOworc3RhdGljIGNvbnN0IFNTTF9NRVRIT0QgKnRsczFfZ2V0X2NsaWVudF9tZXRob2QoaW50IHZlcikKIAl7CiAJaWYgKHZlciA9PSBUTFMxX1ZFUlNJT04pCiAJCXJldHVybihUTFN2MV9jbGllbnRfbWV0aG9kKCkpOwpkaWZmIC0tZ2l0IGEvc3NsL3QxX2VuYy5jIGIvc3NsL3QxX2VuYy5jCmluZGV4IGRhYjZlNDQuLmQ5Y2IwNTkgMTAwNjQ0Ci0tLSBhL3NzbC90MV9lbmMuYworKysgYi9zc2wvdDFfZW5jLmMKQEAgLTU2LDcgKzU2LDcgQEAKICAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCiAgKi8KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMiBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDgsNiArMTA4LDMyIEBACiAgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KICAqCiAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgMjAwNSBOb2tpYS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGUgcG9ydGlvbnMgb2YgdGhlIGF0dGFjaGVkIHNvZnR3YXJlICgiQ29udHJpYnV0aW9uIikgaXMgZGV2ZWxvcGVkIGJ5CisgKiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQgaXMgbGljZW5zZWQgcHVyc3VhbnQgdG8gdGhlIE9wZW5TU0wgb3BlbiBzb3VyY2UKKyAqIGxpY2Vuc2UuCisgKgorICogVGhlIENvbnRyaWJ1dGlvbiwgb3JpZ2luYWxseSB3cml0dGVuIGJ5IE1pa2EgS291c2EgYW5kIFBhc2kgRXJvbmVuIG9mCisgKiBOb2tpYSBDb3Jwb3JhdGlvbiwgY29uc2lzdHMgb2YgdGhlICJQU0siIChQcmUtU2hhcmVkIEtleSkgY2lwaGVyc3VpdGVzCisgKiBzdXBwb3J0IChzZWUgUkZDIDQyNzkpIHRvIE9wZW5TU0wuCisgKgorICogTm8gcGF0ZW50IGxpY2Vuc2VzIG9yIG90aGVyIHJpZ2h0cyBleGNlcHQgdGhvc2UgZXhwcmVzc2x5IHN0YXRlZCBpbgorICogdGhlIE9wZW5TU0wgb3BlbiBzb3VyY2UgbGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgZ3JhbnRlZCBvciByZWNlaXZlZAorICogZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwsIG9yIG90aGVyd2lzZS4KKyAqCisgKiBObyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBOb2tpYSB0aGF0IHRoZSBDb250cmlidXRpb24gZG9lcyBub3QKKyAqIGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkgdGhpcmQKKyAqIHBhcnR5IG9yIHRoYXQgdGhlIGxpY2Vuc2UgcHJvdmlkZXMgeW91IHdpdGggYWxsIHRoZSBuZWNlc3NhcnkgcmlnaHRzCisgKiB0byBtYWtlIHVzZSBvZiB0aGUgQ29udHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQuIElOCisgKiBBRERJVElPTiBUTyBUSEUgRElTQ0xBSU1FUlMgSU5DTFVERUQgSU4gVEhFIExJQ0VOU0UsIE5PS0lBCisgKiBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1TIEFOWSBMSUFCSUxJVFkgRk9SIENMQUlNUyBCUk9VR0hUIEJZIFlPVSBPUiBBTlkKKyAqIE9USEVSIEVOVElUWSBCQVNFRCBPTiBJTkZSSU5HRU1FTlQgT0YgSU5URUxMRUNUVUFMIFBST1BFUlRZIFJJR0hUUyBPUgorICogT1RIRVJXSVNFLgorICovCiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgInNzbF9sb2NsLmgiCkBAIC0xMjEsOCArMTQ3LDE0IEBACiAjaW5jbHVkZSA8b3BlbnNzbC9kZXMuaD4KICNlbmRpZgogCisvKiBzZWVkMSB0aHJvdWdoIHNlZWQ1IGFyZSB2aXJ0dWFsbHkgY29uY2F0ZW5hdGVkICovCiBzdGF0aWMgdm9pZCB0bHMxX1BfaGFzaChjb25zdCBFVlBfTUQgKm1kLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWMsCi0JCQlpbnQgc2VjX2xlbiwgdW5zaWduZWQgY2hhciAqc2VlZCwgaW50IHNlZWRfbGVuLAorCQkJaW50IHNlY19sZW4sCisJCQljb25zdCB2b2lkICpzZWVkMSwgaW50IHNlZWQxX2xlbiwKKwkJCWNvbnN0IHZvaWQgKnNlZWQyLCBpbnQgc2VlZDJfbGVuLAorCQkJY29uc3Qgdm9pZCAqc2VlZDMsIGludCBzZWVkM19sZW4sCisJCQljb25zdCB2b2lkICpzZWVkNCwgaW50IHNlZWQ0X2xlbiwKKwkJCWNvbnN0IHZvaWQgKnNlZWQ1LCBpbnQgc2VlZDVfbGVuLAogCQkJdW5zaWduZWQgY2hhciAqb3V0LCBpbnQgb2xlbikKIAl7CiAJaW50IGNodW5rLG47CkBAIC0xMzMsMTQgKzE2NSwxNyBAQAogCXVuc2lnbmVkIGludCBBMV9sZW47CiAJCiAJY2h1bms9RVZQX01EX3NpemUobWQpOworCU9QRU5TU0xfYXNzZXJ0KGNodW5rID49IDApOwogCiAJSE1BQ19DVFhfaW5pdCgmY3R4KTsKIAlITUFDX0NUWF9pbml0KCZjdHhfdG1wKTsKLQlITUFDX0NUWF9zZXRfZmxhZ3MoJmN0eCwgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKTsKLQlITUFDX0NUWF9zZXRfZmxhZ3MoJmN0eF90bXAsIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVyk7CiAJSE1BQ19Jbml0X2V4KCZjdHgsc2VjLHNlY19sZW4sbWQsIE5VTEwpOwogCUhNQUNfSW5pdF9leCgmY3R4X3RtcCxzZWMsc2VjX2xlbixtZCwgTlVMTCk7Ci0JSE1BQ19VcGRhdGUoJmN0eCxzZWVkLHNlZWRfbGVuKTsKKwlpZiAoc2VlZDEgIT0gTlVMTCkgSE1BQ19VcGRhdGUoJmN0eCxzZWVkMSxzZWVkMV9sZW4pOworCWlmIChzZWVkMiAhPSBOVUxMKSBITUFDX1VwZGF0ZSgmY3R4LHNlZWQyLHNlZWQyX2xlbik7CisJaWYgKHNlZWQzICE9IE5VTEwpIEhNQUNfVXBkYXRlKCZjdHgsc2VlZDMsc2VlZDNfbGVuKTsKKwlpZiAoc2VlZDQgIT0gTlVMTCkgSE1BQ19VcGRhdGUoJmN0eCxzZWVkNCxzZWVkNF9sZW4pOworCWlmIChzZWVkNSAhPSBOVUxMKSBITUFDX1VwZGF0ZSgmY3R4LHNlZWQ1LHNlZWQ1X2xlbik7CiAJSE1BQ19GaW5hbCgmY3R4LEExLCZBMV9sZW4pOwogCiAJbj0wOwpAQCAtMTUwLDcgKzE4NSwxMSBAQAogCQlITUFDX0luaXRfZXgoJmN0eF90bXAsTlVMTCwwLE5VTEwsTlVMTCk7IC8qIHJlLWluaXQgKi8KIAkJSE1BQ19VcGRhdGUoJmN0eCxBMSxBMV9sZW4pOwogCQlITUFDX1VwZGF0ZSgmY3R4X3RtcCxBMSxBMV9sZW4pOwotCQlITUFDX1VwZGF0ZSgmY3R4LHNlZWQsc2VlZF9sZW4pOworCQlpZiAoc2VlZDEgIT0gTlVMTCkgSE1BQ19VcGRhdGUoJmN0eCxzZWVkMSxzZWVkMV9sZW4pOworCQlpZiAoc2VlZDIgIT0gTlVMTCkgSE1BQ19VcGRhdGUoJmN0eCxzZWVkMixzZWVkMl9sZW4pOworCQlpZiAoc2VlZDMgIT0gTlVMTCkgSE1BQ19VcGRhdGUoJmN0eCxzZWVkMyxzZWVkM19sZW4pOworCQlpZiAoc2VlZDQgIT0gTlVMTCkgSE1BQ19VcGRhdGUoJmN0eCxzZWVkNCxzZWVkNF9sZW4pOworCQlpZiAoc2VlZDUgIT0gTlVMTCkgSE1BQ19VcGRhdGUoJmN0eCxzZWVkNSxzZWVkNV9sZW4pOwogCiAJCWlmIChvbGVuID4gY2h1bmspCiAJCQl7CkBAIC0xNzEsNDQgKzIxMCw1NyBAQAogCU9QRU5TU0xfY2xlYW5zZShBMSxzaXplb2YoQTEpKTsKIAl9CiAKLXN0YXRpYyB2b2lkIHRsczFfUFJGKGNvbnN0IEVWUF9NRCAqbWQ1LCBjb25zdCBFVlBfTUQgKnNoYTEsCi0JCSAgICAgdW5zaWduZWQgY2hhciAqbGFiZWwsIGludCBsYWJlbF9sZW4sCi0JCSAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2VjLCBpbnQgc2xlbiwgdW5zaWduZWQgY2hhciAqb3V0MSwKKy8qIHNlZWQxIHRocm91Z2ggc2VlZDUgYXJlIHZpcnR1YWxseSBjb25jYXRlbmF0ZWQgKi8KK3N0YXRpYyB2b2lkIHRsczFfUFJGKGxvbmcgZGlnZXN0X21hc2ssCisJCSAgICAgY29uc3Qgdm9pZCAqc2VlZDEsIGludCBzZWVkMV9sZW4sCisJCSAgICAgY29uc3Qgdm9pZCAqc2VlZDIsIGludCBzZWVkMl9sZW4sCisJCSAgICAgY29uc3Qgdm9pZCAqc2VlZDMsIGludCBzZWVkM19sZW4sCisJCSAgICAgY29uc3Qgdm9pZCAqc2VlZDQsIGludCBzZWVkNF9sZW4sCisJCSAgICAgY29uc3Qgdm9pZCAqc2VlZDUsIGludCBzZWVkNV9sZW4sCisJCSAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2VjLCBpbnQgc2xlbiwKKwkJICAgICB1bnNpZ25lZCBjaGFyICpvdXQxLAogCQkgICAgIHVuc2lnbmVkIGNoYXIgKm91dDIsIGludCBvbGVuKQogCXsKLQlpbnQgbGVuLGk7Ci0JY29uc3QgdW5zaWduZWQgY2hhciAqUzEsKlMyOworCWludCBsZW4saSxpZHgsY291bnQ7CisJY29uc3QgdW5zaWduZWQgY2hhciAqUzE7CisJbG9uZyBtOworCWNvbnN0IEVWUF9NRCAqbWQ7CiAKLQlsZW49c2xlbi8yOworCS8qIENvdW50IG51bWJlciBvZiBkaWdlc3RzIGFuZCBwYXJ0aXRpb24gc2VjIGV2ZW5seSAqLworCWNvdW50PTA7CisJZm9yIChpZHg9MDtzc2xfZ2V0X2hhbmRzaGFrZV9kaWdlc3QoaWR4LCZtLCZtZCk7aWR4KyspIHsKKwkJaWYgKChtPDxUTFMxX1BSRl9ER1NUX1NISUZUKSAmIGRpZ2VzdF9tYXNrKSBjb3VudCsrOworCX0JCisJbGVuPXNsZW4vY291bnQ7CiAJUzE9c2VjOwotCVMyPSAmKHNlY1tsZW5dKTsKLQlsZW4rPShzbGVuJjEpOyAvKiBhZGQgZm9yIG9kZCwgbWFrZSBsb25nZXIgKi8KLQotCQotCXRsczFfUF9oYXNoKG1kNSAsUzEsbGVuLGxhYmVsLGxhYmVsX2xlbixvdXQxLG9sZW4pOwotCXRsczFfUF9oYXNoKHNoYTEsUzIsbGVuLGxhYmVsLGxhYmVsX2xlbixvdXQyLG9sZW4pOwotCi0JZm9yIChpPTA7IGk8b2xlbjsgaSsrKQotCQlvdXQxW2ldXj1vdXQyW2ldOworCW1lbXNldChvdXQxLDAsb2xlbik7CisJZm9yIChpZHg9MDtzc2xfZ2V0X2hhbmRzaGFrZV9kaWdlc3QoaWR4LCZtLCZtZCk7aWR4KyspIHsKKwkJaWYgKChtPDxUTFMxX1BSRl9ER1NUX1NISUZUKSAmIGRpZ2VzdF9tYXNrKSB7CisJCQlpZiAoIW1kKSB7CisJCQkJU1NMZXJyKFNTTF9GX1RMUzFfUFJGLAorCQkJCVNTTF9SX1VOU1VQUE9SVEVEX0RJR0VTVF9UWVBFKTsKKwkJCQlyZXR1cm47CQkJCQorCQkJfQorCQkJdGxzMV9QX2hhc2gobWQgLFMxLGxlbisoc2xlbiYxKSwKKwkJCSAgICAgICAgICAgIHNlZWQxLHNlZWQxX2xlbixzZWVkMixzZWVkMl9sZW4sc2VlZDMsc2VlZDNfbGVuLHNlZWQ0LHNlZWQ0X2xlbixzZWVkNSxzZWVkNV9sZW4sCisJCQkgICAgICAgICAgICBvdXQyLG9sZW4pOworCQkJUzErPWxlbjsKKwkJCWZvciAoaT0wOyBpPG9sZW47IGkrKykKKwkJCXsKKwkJCQlvdXQxW2ldXj1vdXQyW2ldOworCQkJfQorCQl9CiAJfQogCit9CiBzdGF0aWMgdm9pZCB0bHMxX2dlbmVyYXRlX2tleV9ibG9jayhTU0wgKnMsIHVuc2lnbmVkIGNoYXIgKmttLAogCSAgICAgdW5zaWduZWQgY2hhciAqdG1wLCBpbnQgbnVtKQogCXsKLQl1bnNpZ25lZCBjaGFyICpwOwotCXVuc2lnbmVkIGNoYXIgYnVmW1NTTDNfUkFORE9NX1NJWkUqMisKLQkJVExTX01EX01BWF9DT05TVF9TSVpFXTsKLQlwPWJ1ZjsKLQotCW1lbWNweShwLFRMU19NRF9LRVlfRVhQQU5TSU9OX0NPTlNULAotCQlUTFNfTURfS0VZX0VYUEFOU0lPTl9DT05TVF9TSVpFKTsKLQlwKz1UTFNfTURfS0VZX0VYUEFOU0lPTl9DT05TVF9TSVpFOwotCW1lbWNweShwLHMtPnMzLT5zZXJ2ZXJfcmFuZG9tLFNTTDNfUkFORE9NX1NJWkUpOwotCXArPVNTTDNfUkFORE9NX1NJWkU7Ci0JbWVtY3B5KHAscy0+czMtPmNsaWVudF9yYW5kb20sU1NMM19SQU5ET01fU0laRSk7Ci0JcCs9U1NMM19SQU5ET01fU0laRTsKLQotCXRsczFfUFJGKHMtPmN0eC0+bWQ1LHMtPmN0eC0+c2hhMSxidWYsKGludCkocC1idWYpLAorCXRsczFfUFJGKHMtPnMzLT50bXAubmV3X2NpcGhlci0+YWxnb3JpdGhtMiwKKwkJIFRMU19NRF9LRVlfRVhQQU5TSU9OX0NPTlNULFRMU19NRF9LRVlfRVhQQU5TSU9OX0NPTlNUX1NJWkUsCisJCSBzLT5zMy0+c2VydmVyX3JhbmRvbSxTU0wzX1JBTkRPTV9TSVpFLAorCQkgcy0+czMtPmNsaWVudF9yYW5kb20sU1NMM19SQU5ET01fU0laRSwKKwkJIE5VTEwsMCxOVUxMLDAsCiAJCSBzLT5zZXNzaW9uLT5tYXN0ZXJfa2V5LHMtPnNlc3Npb24tPm1hc3Rlcl9rZXlfbGVuZ3RoLAogCQkga20sdG1wLG51bSk7CiAjaWZkZWYgS1NTTF9ERUJVRwpAQCAtMjI4LDggKzI4MCw3IEBACiAJewogCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGVtcHR5W109IiI7CiAJdW5zaWduZWQgY2hhciAqcCwqa2V5X2Jsb2NrLCptYWNfc2VjcmV0OwotCXVuc2lnbmVkIGNoYXIgKmV4cF9sYWJlbCxidWZbVExTX01EX01BWF9DT05TVF9TSVpFKwotCQlTU0wzX1JBTkRPTV9TSVpFKjJdOworCXVuc2lnbmVkIGNoYXIgKmV4cF9sYWJlbDsKIAl1bnNpZ25lZCBjaGFyIHRtcDFbRVZQX01BWF9LRVlfTEVOR1RIXTsKIAl1bnNpZ25lZCBjaGFyIHRtcDJbRVZQX01BWF9LRVlfTEVOR1RIXTsKIAl1bnNpZ25lZCBjaGFyIGl2MVtFVlBfTUFYX0lWX0xFTkdUSCoyXTsKQEAgLTI0MiwxMiArMjkzLDE3IEBACiAJY29uc3QgU1NMX0NPTVAgKmNvbXA7CiAjZW5kaWYKIAljb25zdCBFVlBfTUQgKm07CisJaW50IG1hY190eXBlOworCWludCAqbWFjX3NlY3JldF9zaXplOworCUVWUF9NRF9DVFggKm1hY19jdHg7CisJRVZQX1BLRVkgKm1hY19rZXk7CiAJaW50IGlzX2V4cG9ydCxuLGksaixrLGV4cF9sYWJlbF9sZW4sY2w7CiAJaW50IHJldXNlX2RkID0gMDsKIAogCWlzX2V4cG9ydD1TU0xfQ19JU19FWFBPUlQocy0+czMtPnRtcC5uZXdfY2lwaGVyKTsKIAljPXMtPnMzLT50bXAubmV3X3N5bV9lbmM7CiAJbT1zLT5zMy0+dG1wLm5ld19oYXNoOworCW1hY190eXBlID0gcy0+czMtPnRtcC5uZXdfbWFjX3BrZXlfdHlwZTsKICNpZm5kZWYgT1BFTlNTTF9OT19DT01QCiAJY29tcD1zLT5zMy0+dG1wLm5ld19jb21wcmVzc2lvbjsKICNlbmRpZgpAQCAtMjU1LDIxICszMTEsMjggQEAKIAogI2lmZGVmIEtTU0xfREVCVUcKIAlwcmludGYoInRsczFfY2hhbmdlX2NpcGhlcl9zdGF0ZSh3aGljaD0gJWQpIHcvXG4iLCB3aGljaCk7Ci0JcHJpbnRmKCJcdGFsZz0gJWxkLCBjb21wPSAlcFxuIiwgcy0+czMtPnRtcC5uZXdfY2lwaGVyLT5hbGdvcml0aG1zLAotICAgICAgICAgICAgICAgICh2b2lkICopY29tcCk7Ci0JcHJpbnRmKCJcdGV2cF9jaXBoZXIgPT0gJXAgPT0/ICZkX2NiY19lZGVfY2lwaGVyM1xuIiwgKHZvaWQgKiljKTsKKwlwcmludGYoIlx0YWxnPSAlbGQvJWxkLCBjb21wPSAlcFxuIiwKKwkgICAgICAgcy0+czMtPnRtcC5uZXdfY2lwaGVyLT5hbGdvcml0aG1fbWtleSwKKwkgICAgICAgcy0+czMtPnRtcC5uZXdfY2lwaGVyLT5hbGdvcml0aG1fYXV0aCwKKwkgICAgICAgY29tcCk7CisJcHJpbnRmKCJcdGV2cF9jaXBoZXIgPT0gJXAgPT0/ICZkX2NiY19lZGVfY2lwaGVyM1xuIiwgYyk7CiAJcHJpbnRmKCJcdGV2cF9jaXBoZXI6IG5pZCwgYmxrc3o9ICVkLCAlZCwga2V5bGVuPSVkLCBpdmxlbj0lZFxuIiwKICAgICAgICAgICAgICAgICBjLT5uaWQsYy0+YmxvY2tfc2l6ZSxjLT5rZXlfbGVuLGMtPml2X2xlbik7CiAJcHJpbnRmKCJcdGtleV9ibG9jazogbGVuPSAlZCwgZGF0YT0gIiwgcy0+czMtPnRtcC5rZXlfYmxvY2tfbGVuZ3RoKTsKIAl7Ci0gICAgICAgIGludCBraTsKLSAgICAgICAgZm9yIChraT0wOyBraTxzLT5zMy0+dG1wLmtleV9ibG9ja19sZW5ndGg7IGtpKyspCi0JCXByaW50ZigiJTAyeCIsIGtleV9ibG9ja1traV0pOyAgcHJpbnRmKCJcbiIpOworICAgICAgICBpbnQgaTsKKyAgICAgICAgZm9yIChpPTA7IGk8cy0+czMtPnRtcC5rZXlfYmxvY2tfbGVuZ3RoOyBpKyspCisJCXByaW50ZigiJTAyeCIsIGtleV9ibG9ja1tpXSk7ICBwcmludGYoIlxuIik7CiAgICAgICAgIH0KICNlbmRpZgkvKiBLU1NMX0RFQlVHICovCiAKIAlpZiAod2hpY2ggJiBTU0wzX0NDX1JFQUQpCiAJCXsKKwkJaWYgKHMtPnMzLT50bXAubmV3X2NpcGhlci0+YWxnb3JpdGhtMiAmIFRMUzFfU1RSRUFNX01BQykKKwkJCXMtPm1hY19mbGFncyB8PSBTU0xfTUFDX0ZMQUdfUkVBRF9NQUNfU1RSRUFNOworCQkJZWxzZQorCQkJcy0+bWFjX2ZsYWdzICY9IH5TU0xfTUFDX0ZMQUdfUkVBRF9NQUNfU1RSRUFNOworCiAJCWlmIChzLT5lbmNfcmVhZF9jdHggIT0gTlVMTCkKIAkJCXJldXNlX2RkID0gMTsKIAkJZWxzZSBpZiAoKHMtPmVuY19yZWFkX2N0eD1PUEVOU1NMX21hbGxvYyhzaXplb2YoRVZQX0NJUEhFUl9DVFgpKSkgPT0gTlVMTCkKQEAgLTI3OCw3ICszNDEsNyBAQAogCQkJLyogbWFrZSBzdXJlIGl0J3MgaW50aWFsaXplZCBpbiBjYXNlIHdlIGV4aXQgbGF0ZXIgd2l0aCBhbiBlcnJvciAqLwogCQkJRVZQX0NJUEhFUl9DVFhfaW5pdChzLT5lbmNfcmVhZF9jdHgpOwogCQlkZD0gcy0+ZW5jX3JlYWRfY3R4OwotCQlzLT5yZWFkX2hhc2g9bTsKKwkJbWFjX2N0eD1zc2xfcmVwbGFjZV9oYXNoKCZzLT5yZWFkX2hhc2gsTlVMTCk7CiAjaWZuZGVmIE9QRU5TU0xfTk9fQ09NUAogCQlpZiAocy0+ZXhwYW5kICE9IE5VTEwpCiAJCQl7CkBAIC0zMDQsOSArMzY3LDE0IEBACiAgCQlpZiAocy0+dmVyc2lvbiAhPSBEVExTMV9WRVJTSU9OKQogCQkJbWVtc2V0KCYocy0+czMtPnJlYWRfc2VxdWVuY2VbMF0pLDAsOCk7CiAJCW1hY19zZWNyZXQ9ICYocy0+czMtPnJlYWRfbWFjX3NlY3JldFswXSk7CisJCW1hY19zZWNyZXRfc2l6ZT0mKHMtPnMzLT5yZWFkX21hY19zZWNyZXRfc2l6ZSk7CiAJCX0KIAllbHNlCiAJCXsKKwkJaWYgKHMtPnMzLT50bXAubmV3X2NpcGhlci0+YWxnb3JpdGhtMiAmIFRMUzFfU1RSRUFNX01BQykKKwkJCXMtPm1hY19mbGFncyB8PSBTU0xfTUFDX0ZMQUdfV1JJVEVfTUFDX1NUUkVBTTsKKwkJCWVsc2UKKwkJCXMtPm1hY19mbGFncyAmPSB+U1NMX01BQ19GTEFHX1dSSVRFX01BQ19TVFJFQU07CiAJCWlmIChzLT5lbmNfd3JpdGVfY3R4ICE9IE5VTEwpCiAJCQlyZXVzZV9kZCA9IDE7CiAJCWVsc2UgaWYgKChzLT5lbmNfd3JpdGVfY3R4PU9QRU5TU0xfbWFsbG9jKHNpemVvZihFVlBfQ0lQSEVSX0NUWCkpKSA9PSBOVUxMKQpAQCAtMzE1LDcgKzM4Myw3IEBACiAJCQkvKiBtYWtlIHN1cmUgaXQncyBpbnRpYWxpemVkIGluIGNhc2Ugd2UgZXhpdCBsYXRlciB3aXRoIGFuIGVycm9yICovCiAJCQlFVlBfQ0lQSEVSX0NUWF9pbml0KHMtPmVuY193cml0ZV9jdHgpOwogCQlkZD0gcy0+ZW5jX3dyaXRlX2N0eDsKLQkJcy0+d3JpdGVfaGFzaD1tOworCQltYWNfY3R4ID0gc3NsX3JlcGxhY2VfaGFzaCgmcy0+d3JpdGVfaGFzaCxOVUxMKTsKICNpZm5kZWYgT1BFTlNTTF9OT19DT01QCiAJCWlmIChzLT5jb21wcmVzcyAhPSBOVUxMKQogCQkJewpAQCAtMzM2LDEzICs0MDQsMTUgQEAKICAJCWlmIChzLT52ZXJzaW9uICE9IERUTFMxX1ZFUlNJT04pCiAJCQltZW1zZXQoJihzLT5zMy0+d3JpdGVfc2VxdWVuY2VbMF0pLDAsOCk7CiAJCW1hY19zZWNyZXQ9ICYocy0+czMtPndyaXRlX21hY19zZWNyZXRbMF0pOworCQltYWNfc2VjcmV0X3NpemUgPSAmKHMtPnMzLT53cml0ZV9tYWNfc2VjcmV0X3NpemUpOwogCQl9CiAKIAlpZiAocmV1c2VfZGQpCiAJCUVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoZGQpOwogCiAJcD1zLT5zMy0+dG1wLmtleV9ibG9jazsKLQlpPUVWUF9NRF9zaXplKG0pOworCWk9Km1hY19zZWNyZXRfc2l6ZT1zLT5zMy0+dG1wLm5ld19tYWNfc2VjcmV0X3NpemU7CisKIAljbD1FVlBfQ0lQSEVSX2tleV9sZW5ndGgoYyk7CiAJaj1pc19leHBvcnQgPyAoY2wgPCBTU0xfQ19FWFBPUlRfS0VZTEVOR1RIKHMtPnMzLT50bXAubmV3X2NpcGhlcikgPwogCSAgICAgICAgICAgICAgIGNsIDogU1NMX0NfRVhQT1JUX0tFWUxFTkdUSChzLT5zMy0+dG1wLm5ld19jaXBoZXIpKSA6IGNsOwpAQCAtMzc4LDYgKzQ0OCwxMCBAQAogCQl9CiAKIAltZW1jcHkobWFjX3NlY3JldCxtcyxpKTsKKwltYWNfa2V5ID0gRVZQX1BLRVlfbmV3X21hY19rZXkobWFjX3R5cGUsIE5VTEwsCisJCQltYWNfc2VjcmV0LCptYWNfc2VjcmV0X3NpemUpOworCUVWUF9EaWdlc3RTaWduSW5pdChtYWNfY3R4LE5VTEwsbSxOVUxMLG1hY19rZXkpOworCUVWUF9QS0VZX2ZyZWUobWFjX2tleSk7CiAjaWZkZWYgVExTX0RFQlVHCiBwcmludGYoIndoaWNoID0gJTA0WFxubWFjIGtleT0iLHdoaWNoKTsKIHsgaW50IHo7IGZvciAoej0wOyB6PGk7IHorKykgcHJpbnRmKCIlMDJYJWMiLG1zW3pdLCgoeisxKSUxNik/JyAnOidcbicpOyB9CkBAIC0zODcsMjkgKzQ2MSwyMiBAQAogCQkvKiBJbiBoZXJlIEkgc2V0IGJvdGggdGhlIHJlYWQgYW5kIHdyaXRlIGtleS9pdiB0byB0aGUKIAkJICogc2FtZSB2YWx1ZSBzaW5jZSBvbmx5IHRoZSBjb3JyZWN0IG9uZSB3aWxsIGJlIHVzZWQgOi0pLgogCQkgKi8KLQkJcD1idWY7Ci0JCW1lbWNweShwLGV4cF9sYWJlbCxleHBfbGFiZWxfbGVuKTsKLQkJcCs9ZXhwX2xhYmVsX2xlbjsKLQkJbWVtY3B5KHAscy0+czMtPmNsaWVudF9yYW5kb20sU1NMM19SQU5ET01fU0laRSk7Ci0JCXArPVNTTDNfUkFORE9NX1NJWkU7Ci0JCW1lbWNweShwLHMtPnMzLT5zZXJ2ZXJfcmFuZG9tLFNTTDNfUkFORE9NX1NJWkUpOwotCQlwKz1TU0wzX1JBTkRPTV9TSVpFOwotCQl0bHMxX1BSRihzLT5jdHgtPm1kNSxzLT5jdHgtPnNoYTEsYnVmLChpbnQpKHAtYnVmKSxrZXksaiwKLQkJCSB0bXAxLHRtcDIsRVZQX0NJUEhFUl9rZXlfbGVuZ3RoKGMpKTsKKwkJdGxzMV9QUkYocy0+czMtPnRtcC5uZXdfY2lwaGVyLT5hbGdvcml0aG0yLAorCQkJIGV4cF9sYWJlbCxleHBfbGFiZWxfbGVuLAorCQkJIHMtPnMzLT5jbGllbnRfcmFuZG9tLFNTTDNfUkFORE9NX1NJWkUsCisJCQkgcy0+czMtPnNlcnZlcl9yYW5kb20sU1NMM19SQU5ET01fU0laRSwKKwkJCSBOVUxMLDAsTlVMTCwwLAorCQkJIGtleSxqLHRtcDEsdG1wMixFVlBfQ0lQSEVSX2tleV9sZW5ndGgoYykpOwogCQlrZXk9dG1wMTsKIAogCQlpZiAoayA+IDApCiAJCQl7Ci0JCQlwPWJ1ZjsKLQkJCW1lbWNweShwLFRMU19NRF9JVl9CTE9DS19DT05TVCwKLQkJCQlUTFNfTURfSVZfQkxPQ0tfQ09OU1RfU0laRSk7Ci0JCQlwKz1UTFNfTURfSVZfQkxPQ0tfQ09OU1RfU0laRTsKLQkJCW1lbWNweShwLHMtPnMzLT5jbGllbnRfcmFuZG9tLFNTTDNfUkFORE9NX1NJWkUpOwotCQkJcCs9U1NMM19SQU5ET01fU0laRTsKLQkJCW1lbWNweShwLHMtPnMzLT5zZXJ2ZXJfcmFuZG9tLFNTTDNfUkFORE9NX1NJWkUpOwotCQkJcCs9U1NMM19SQU5ET01fU0laRTsKLQkJCXRsczFfUFJGKHMtPmN0eC0+bWQ1LHMtPmN0eC0+c2hhMSxidWYscC1idWYsZW1wdHksMCwKLQkJCQkgaXYxLGl2MixrKjIpOworCQkJdGxzMV9QUkYocy0+czMtPnRtcC5uZXdfY2lwaGVyLT5hbGdvcml0aG0yLAorCQkJCSBUTFNfTURfSVZfQkxPQ0tfQ09OU1QsVExTX01EX0lWX0JMT0NLX0NPTlNUX1NJWkUsCisJCQkJIHMtPnMzLT5jbGllbnRfcmFuZG9tLFNTTDNfUkFORE9NX1NJWkUsCisJCQkJIHMtPnMzLT5zZXJ2ZXJfcmFuZG9tLFNTTDNfUkFORE9NX1NJWkUsCisJCQkJIE5VTEwsMCxOVUxMLDAsCisJCQkJIGVtcHR5LDAsaXYxLGl2MixrKjIpOwogCQkJaWYgKGNsaWVudF93cml0ZSkKIAkJCQlpdj1pdjE7CiAJCQllbHNlCkBAIC00MjAsMTMgKzQ4NywxMSBAQAogCXMtPnNlc3Npb24tPmtleV9hcmdfbGVuZ3RoPTA7CiAjaWZkZWYgS1NTTF9ERUJVRwogCXsKLSAgICAgICAgaW50IGtpOworICAgICAgICBpbnQgaTsKIAlwcmludGYoIkVWUF9DaXBoZXJJbml0X2V4KGRkLGMsa2V5PSxpdj0sd2hpY2gpXG4iKTsKLQlwcmludGYoIlx0a2V5PSAiKTsKLQlmb3IgKGtpPTA7IGtpPGMtPmtleV9sZW47IGtpKyspIHByaW50ZigiJTAyeCIsIGtleVtraV0pOworCXByaW50ZigiXHRrZXk9ICIpOyBmb3IgKGk9MDsgaTxjLT5rZXlfbGVuOyBpKyspIHByaW50ZigiJTAyeCIsIGtleVtpXSk7CiAJcHJpbnRmKCJcbiIpOwotCXByaW50ZigiXHQgaXY9ICIpOwotCWZvciAoa2k9MDsga2k8Yy0+aXZfbGVuOyBraSsrKSBwcmludGYoIiUwMngiLCBpdltraV0pOworCXByaW50ZigiXHQgaXY9ICIpOyBmb3IgKGk9MDsgaTxjLT5pdl9sZW47IGkrKykgcHJpbnRmKCIlMDJ4IiwgaXZbaV0pOwogCXByaW50ZigiXG4iKTsKIAl9CiAjZW5kaWYJLyogS1NTTF9ERUJVRyAqLwpAQCAtNDU4LDYgKzUyMyw3IEBACiAJY29uc3QgRVZQX01EICpoYXNoOwogCWludCBudW07CiAJU1NMX0NPTVAgKmNvbXA7CisJaW50IG1hY190eXBlPSBOSURfdW5kZWYsbWFjX3NlY3JldF9zaXplPTA7CiAKICNpZmRlZiBLU1NMX0RFQlVHCiAJcHJpbnRmICgidGxzMV9zZXR1cF9rZXlfYmxvY2soKVxuIik7CkBAIC00NjYsNyArNTMyLDcgQEAKIAlpZiAocy0+czMtPnRtcC5rZXlfYmxvY2tfbGVuZ3RoICE9IDApCiAJCXJldHVybigxKTsKIAotCWlmICghc3NsX2NpcGhlcl9nZXRfZXZwKHMtPnNlc3Npb24sJmMsJmhhc2gsJmNvbXApKQorCWlmICghc3NsX2NpcGhlcl9nZXRfZXZwKHMtPnNlc3Npb24sJmMsJmhhc2gsJm1hY190eXBlLCZtYWNfc2VjcmV0X3NpemUsJmNvbXApKQogCQl7CiAJCVNTTGVycihTU0xfRl9UTFMxX1NFVFVQX0tFWV9CTE9DSyxTU0xfUl9DSVBIRVJfT1JfSEFTSF9VTkFWQUlMQUJMRSk7CiAJCXJldHVybigwKTsKQEAgLTQ3NCw4ICs1NDAsOSBAQAogCiAJcy0+czMtPnRtcC5uZXdfc3ltX2VuYz1jOwogCXMtPnMzLT50bXAubmV3X2hhc2g9aGFzaDsKLQotCW51bT1FVlBfQ0lQSEVSX2tleV9sZW5ndGgoYykrRVZQX01EX3NpemUoaGFzaCkrRVZQX0NJUEhFUl9pdl9sZW5ndGgoYyk7CisJcy0+czMtPnRtcC5uZXdfbWFjX3BrZXlfdHlwZSA9IG1hY190eXBlOworCXMtPnMzLT50bXAubmV3X21hY19zZWNyZXRfc2l6ZSA9IG1hY19zZWNyZXRfc2l6ZTsKKwludW09RVZQX0NJUEhFUl9rZXlfbGVuZ3RoKGMpK21hY19zZWNyZXRfc2l6ZStFVlBfQ0lQSEVSX2l2X2xlbmd0aChjKTsKIAludW0qPTI7CiAKIAlzc2wzX2NsZWFudXBfa2V5X2Jsb2NrKHMpOwpAQCAtNTE0LDExICs1ODEsMTEgQEAKIAogCQlpZiAocy0+c2Vzc2lvbi0+Y2lwaGVyICE9IE5VTEwpCiAJCQl7Ci0JCQlpZiAoKHMtPnNlc3Npb24tPmNpcGhlci0+YWxnb3JpdGhtcyAmIFNTTF9FTkNfTUFTSykgPT0gU1NMX2VOVUxMKQorCQkJaWYgKHMtPnNlc3Npb24tPmNpcGhlci0+YWxnb3JpdGhtX2VuYyA9PSBTU0xfZU5VTEwpCiAJCQkJcy0+czMtPm5lZWRfZW1wdHlfZnJhZ21lbnRzID0gMDsKIAkJCQogI2lmbmRlZiBPUEVOU1NMX05PX1JDNAotCQkJaWYgKChzLT5zZXNzaW9uLT5jaXBoZXItPmFsZ29yaXRobXMgJiBTU0xfRU5DX01BU0spID09IFNTTF9SQzQpCisJCQlpZiAocy0+c2Vzc2lvbi0+Y2lwaGVyLT5hbGdvcml0aG1fZW5jID09IFNTTF9SQzQpCiAJCQkJcy0+czMtPm5lZWRfZW1wdHlfZnJhZ21lbnRzID0gMDsKICNlbmRpZgogCQkJfQpAQCAtNTQwLDggKzYwNywxMSBAQAogCiAJaWYgKHNlbmQpCiAJCXsKLQkJaWYgKHMtPndyaXRlX2hhc2ggIT0gTlVMTCkKLQkJCW49RVZQX01EX3NpemUocy0+d3JpdGVfaGFzaCk7CisJCWlmIChFVlBfTURfQ1RYX21kKHMtPndyaXRlX2hhc2gpKQorCQkJeworCQkJbj1FVlBfTURfQ1RYX3NpemUocy0+d3JpdGVfaGFzaCk7CisJCQlPUEVOU1NMX2Fzc2VydChuID49IDApOworCQkJfQogCQlkcz1zLT5lbmNfd3JpdGVfY3R4OwogCQlyZWM9ICYocy0+czMtPndyZWMpOwogCQlpZiAocy0+ZW5jX3dyaXRlX2N0eCA9PSBOVUxMKQpAQCAtNTUxLDggKzYyMSwxMSBAQAogCQl9CiAJZWxzZQogCQl7Ci0JCWlmIChzLT5yZWFkX2hhc2ggIT0gTlVMTCkKLQkJCW49RVZQX01EX3NpemUocy0+cmVhZF9oYXNoKTsKKwkJaWYgKEVWUF9NRF9DVFhfbWQocy0+cmVhZF9oYXNoKSkKKwkJCXsKKwkJCW49RVZQX01EX0NUWF9zaXplKHMtPnJlYWRfaGFzaCk7CisJCQlPUEVOU1NMX2Fzc2VydChuID49IDApOworCQkJfQogCQlkcz1zLT5lbmNfcmVhZF9jdHg7CiAJCXJlYz0gJihzLT5zMy0+cnJlYyk7CiAJCWlmIChzLT5lbmNfcmVhZF9jdHggPT0gTlVMTCkKQEAgLTU5OSwxMSArNjcyLDEwIEBACiAJCXsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHVpOwogCQlwcmludGYoIkVWUF9DaXBoZXIoZHM9JXAscmVjLT5kYXRhPSVwLHJlYy0+aW5wdXQ9JXAsbD0lbGQpID09PlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopZHMscmVjLT5kYXRhLHJlYy0+aW5wdXQsbCk7Ci0JCXByaW50ZigiXHRFVlBfQ0lQSEVSX0NUWDogJWQgYnVmX2xlbiwgJWQga2V5X2xlbiBbJWxkICVsZF0sICVkIGl2X2xlblxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRzLHJlYy0+ZGF0YSxyZWMtPmlucHV0LGwpOworCQlwcmludGYoIlx0RVZQX0NJUEhFUl9DVFg6ICVkIGJ1Zl9sZW4sICVkIGtleV9sZW4gWyVkICVkXSwgJWQgaXZfbGVuXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgZHMtPmJ1Zl9sZW4sIGRzLT5jaXBoZXItPmtleV9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylERVNfS0VZX1NaLAotCQkJKHVuc2lnbmVkIGxvbmcpREVTX1NDSEVEVUxFX1NaLAorICAgICAgICAgICAgICAgICAgICAgICAgREVTX0tFWV9TWiwgREVTX1NDSEVEVUxFX1NaLAogICAgICAgICAgICAgICAgICAgICAgICAgZHMtPmNpcGhlci0+aXZfbGVuKTsKIAkJcHJpbnRmKCJcdFx0SVY6ICIpOwogCQlmb3IgKGk9MDsgaTxkcy0+Y2lwaGVyLT5pdl9sZW47IGkrKykgcHJpbnRmKCIlMDJYIiwgZHMtPml2W2ldKTsKQEAgLTYyOCwxMCArNzAwLDEwIEBACiAKICNpZmRlZiBLU1NMX0RFQlVHCiAJCXsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGtpOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaTsKICAgICAgICAgICAgICAgICBwcmludGYoIlx0cmVjLT5kYXRhPSIpOwotCQlmb3IgKGtpPTA7IGtpPGw7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiICUwMngiLCByZWMtPmRhdGFba2ldKTsgIHByaW50ZigiXG4iKTsKKwkJZm9yIChpPTA7IGk8bDsgaSsrKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgJTAyeCIsIHJlYy0+ZGF0YVtpXSk7ICBwcmludGYoIlxuIik7CiAgICAgICAgICAgICAgICAgfQogI2VuZGlmCS8qIEtTU0xfREVCVUcgKi8KIApAQCAtNjc5LDU2ICs3NTEsMTAwIEBACiAJCX0KIAlyZXR1cm4oMSk7CiAJfQotCi1pbnQgdGxzMV9jZXJ0X3ZlcmlmeV9tYWMoU1NMICpzLCBFVlBfTURfQ1RYICppbl9jdHgsIHVuc2lnbmVkIGNoYXIgKm91dCkKK2ludCB0bHMxX2NlcnRfdmVyaWZ5X21hYyhTU0wgKnMsIGludCBtZF9uaWQsIHVuc2lnbmVkIGNoYXIgKm91dCkKIAl7CiAJdW5zaWduZWQgaW50IHJldDsKLQlFVlBfTURfQ1RYIGN0eDsKKwlFVlBfTURfQ1RYIGN0eCwgKmQ9TlVMTDsKKwlpbnQgaTsKKworCWlmIChzLT5zMy0+aGFuZHNoYWtlX2J1ZmZlcikgCisJCWlmICghc3NsM19kaWdlc3RfY2FjaGVkX3JlY29yZHMocykpCisJCQlyZXR1cm4gMDsKKworCWZvciAoaT0wO2k8U1NMX01BWF9ESUdFU1Q7aSsrKSAKKwkJeworCQkgIGlmIChzLT5zMy0+aGFuZHNoYWtlX2Rnc3RbaV0mJkVWUF9NRF9DVFhfdHlwZShzLT5zMy0+aGFuZHNoYWtlX2Rnc3RbaV0pPT1tZF9uaWQpIAorCQkgIAl7CisJCSAgCWQ9cy0+czMtPmhhbmRzaGFrZV9kZ3N0W2ldOworCQkJYnJlYWs7CisJCQl9CisJCX0KKwlpZiAoIWQpIHsKKwkJU1NMZXJyKFNTTF9GX1RMUzFfQ0VSVF9WRVJJRllfTUFDLFNTTF9SX05PX1JFUVVJUkVEX0RJR0VTVCk7CisJCXJldHVybiAwOworCX0JCiAKIAlFVlBfTURfQ1RYX2luaXQoJmN0eCk7Ci0JRVZQX01EX0NUWF9jb3B5X2V4KCZjdHgsaW5fY3R4KTsKKwlFVlBfTURfQ1RYX2NvcHlfZXgoJmN0eCxkKTsKIAlFVlBfRGlnZXN0RmluYWxfZXgoJmN0eCxvdXQsJnJldCk7CiAJRVZQX01EX0NUWF9jbGVhbnVwKCZjdHgpOwogCXJldHVybigoaW50KXJldCk7CiAJfQogCi1pbnQgdGxzMV9maW5hbF9maW5pc2hfbWFjKFNTTCAqcywgRVZQX01EX0NUWCAqaW4xX2N0eCwgRVZQX01EX0NUWCAqaW4yX2N0eCwKK2ludCB0bHMxX2ZpbmFsX2ZpbmlzaF9tYWMoU1NMICpzLAogCSAgICAgY29uc3QgY2hhciAqc3RyLCBpbnQgc2xlbiwgdW5zaWduZWQgY2hhciAqb3V0KQogCXsKIAl1bnNpZ25lZCBpbnQgaTsKIAlFVlBfTURfQ1RYIGN0eDsKLQl1bnNpZ25lZCBjaGFyIGJ1ZltUTFNfTURfTUFYX0NPTlNUX1NJWkUrTUQ1X0RJR0VTVF9MRU5HVEgrU0hBX0RJR0VTVF9MRU5HVEhdOworCXVuc2lnbmVkIGNoYXIgYnVmWzIqRVZQX01BWF9NRF9TSVpFXTsKIAl1bnNpZ25lZCBjaGFyICpxLGJ1ZjJbMTJdOworCWludCBpZHg7CisJbG9uZyBtYXNrOworCWludCBlcnI9MDsKKwljb25zdCBFVlBfTUQgKm1kOyAKIAogCXE9YnVmOwotCW1lbWNweShxLHN0cixzbGVuKTsKLQlxKz1zbGVuOworCisJaWYgKHMtPnMzLT5oYW5kc2hha2VfYnVmZmVyKSAKKwkJaWYgKCFzc2wzX2RpZ2VzdF9jYWNoZWRfcmVjb3JkcyhzKSkKKwkJCXJldHVybiAwOwogCiAJRVZQX01EX0NUWF9pbml0KCZjdHgpOwotCUVWUF9NRF9DVFhfY29weV9leCgmY3R4LGluMV9jdHgpOwotCUVWUF9EaWdlc3RGaW5hbF9leCgmY3R4LHEsJmkpOwotCXErPWk7Ci0JRVZQX01EX0NUWF9jb3B5X2V4KCZjdHgsaW4yX2N0eCk7Ci0JRVZQX0RpZ2VzdEZpbmFsX2V4KCZjdHgscSwmaSk7Ci0JcSs9aTsKIAotCXRsczFfUFJGKHMtPmN0eC0+bWQ1LHMtPmN0eC0+c2hhMSxidWYsKGludCkocS1idWYpLAotCQlzLT5zZXNzaW9uLT5tYXN0ZXJfa2V5LHMtPnNlc3Npb24tPm1hc3Rlcl9rZXlfbGVuZ3RoLAotCQlvdXQsYnVmMixzaXplb2YgYnVmMik7CisJZm9yIChpZHg9MDtzc2xfZ2V0X2hhbmRzaGFrZV9kaWdlc3QoaWR4LCZtYXNrLCZtZCk7aWR4KyspCisJCXsKKwkJaWYgKG1hc2sgJiBzLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobTIpCisJCQl7CisJCQlpbnQgaGFzaHNpemUgPSBFVlBfTURfc2l6ZShtZCk7CisJCQlpZiAoaGFzaHNpemUgPCAwIHx8IGhhc2hzaXplID4gKGludCkoc2l6ZW9mIGJ1ZiAtIChzaXplX3QpKHEtYnVmKSkpCisJCQkJeworCQkJCS8qIGludGVybmFsIGVycm9yOiAnYnVmJyBpcyB0b28gc21hbGwgZm9yIHRoaXMgY2lwZXJzdWl0ZSEgKi8KKwkJCQllcnIgPSAxOworCQkJCX0KKwkJCWVsc2UKKwkJCQl7CisJCQkJRVZQX01EX0NUWF9jb3B5X2V4KCZjdHgscy0+czMtPmhhbmRzaGFrZV9kZ3N0W2lkeF0pOworCQkJCUVWUF9EaWdlc3RGaW5hbF9leCgmY3R4LHEsJmkpOworCQkJCWlmIChpICE9ICh1bnNpZ25lZCBpbnQpaGFzaHNpemUpIC8qIGNhbid0IHJlYWxseSBoYXBwZW4gKi8KKwkJCQkJZXJyID0gMTsKKwkJCQlxKz1pOworCQkJCX0KKwkJCX0KKwkJfQorCQkKKwl0bHMxX1BSRihzLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobTIsCisJCSBzdHIsc2xlbiwgYnVmLChpbnQpKHEtYnVmKSwgTlVMTCwwLCBOVUxMLDAsIE5VTEwsMCwKKwkJIHMtPnNlc3Npb24tPm1hc3Rlcl9rZXkscy0+c2Vzc2lvbi0+bWFzdGVyX2tleV9sZW5ndGgsCisJCSBvdXQsYnVmMixzaXplb2YgYnVmMik7CiAJRVZQX01EX0NUWF9jbGVhbnVwKCZjdHgpOwogCi0JcmV0dXJuIHNpemVvZiBidWYyOworCWlmIChlcnIpCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIHNpemVvZiBidWYyOwogCX0KIAogaW50IHRsczFfbWFjKFNTTCAqc3NsLCB1bnNpZ25lZCBjaGFyICptZCwgaW50IHNlbmQpCiAJewogCVNTTDNfUkVDT1JEICpyZWM7CiAJdW5zaWduZWQgY2hhciAqbWFjX3NlYywqc2VxOwotCWNvbnN0IEVWUF9NRCAqaGFzaDsKLQl1bnNpZ25lZCBpbnQgbWRfc2l6ZTsKKwlFVlBfTURfQ1RYICpoYXNoOworCXNpemVfdCBtZF9zaXplOwogCWludCBpOwotCUhNQUNfQ1RYIGhtYWM7CisJRVZQX01EX0NUWCBobWFjLCAqbWFjX2N0eDsKIAl1bnNpZ25lZCBjaGFyIGJ1Zls1XTsgCisJaW50IHN0cmVhbV9tYWMgPSAoc2VuZD8oc3NsLT5tYWNfZmxhZ3MgJiBTU0xfTUFDX0ZMQUdfV1JJVEVfTUFDX1NUUkVBTSk6KHNzbC0+bWFjX2ZsYWdzJlNTTF9NQUNfRkxBR19SRUFEX01BQ19TVFJFQU0pKTsKKwlpbnQgdDsKIAogCWlmIChzZW5kKQogCQl7CkBAIC03NDUsNDMgKzg2MSw0NSBAQAogCQloYXNoPXNzbC0+cmVhZF9oYXNoOwogCQl9CiAKLQltZF9zaXplPUVWUF9NRF9zaXplKGhhc2gpOworCXQ9RVZQX01EX0NUWF9zaXplKGhhc2gpOworCU9QRU5TU0xfYXNzZXJ0KHQgPj0gMCk7CisJbWRfc2l6ZT10OwogCiAJYnVmWzBdPXJlYy0+dHlwZTsKLQlpZiAoc3NsLT52ZXJzaW9uID09IERUTFMxX1ZFUlNJT04gJiYgc3NsLT5jbGllbnRfdmVyc2lvbiA9PSBEVExTMV9CQURfVkVSKQotCQl7Ci0JCWJ1ZlsxXT1UTFMxX1ZFUlNJT05fTUFKT1I7Ci0JCWJ1ZlsyXT1UTFMxX1ZFUlNJT05fTUlOT1I7Ci0JCX0KLQllbHNlCXsKLQkJYnVmWzFdPSh1bnNpZ25lZCBjaGFyKShzc2wtPnZlcnNpb24+PjgpOwotCQlidWZbMl09KHVuc2lnbmVkIGNoYXIpKHNzbC0+dmVyc2lvbik7Ci0JCX0KLQorCWJ1ZlsxXT0odW5zaWduZWQgY2hhcikoc3NsLT52ZXJzaW9uPj44KTsKKwlidWZbMl09KHVuc2lnbmVkIGNoYXIpKHNzbC0+dmVyc2lvbik7CiAJYnVmWzNdPXJlYy0+bGVuZ3RoPj44OwogCWJ1Zls0XT1yZWMtPmxlbmd0aCYweGZmOwogCiAJLyogSSBzaG91bGQgZml4IHRoaXMgdXAgVExTIFRMUyBUTFMgVExTIFRMUyBYWFhYWFhYWCAqLwotCUhNQUNfQ1RYX2luaXQoJmhtYWMpOwotCUhNQUNfSW5pdF9leCgmaG1hYyxtYWNfc2VjLEVWUF9NRF9zaXplKGhhc2gpLGhhc2gsTlVMTCk7CisJaWYgKHN0cmVhbV9tYWMpIAorCQl7CisJCQltYWNfY3R4ID0gaGFzaDsKKwkJfQorCQllbHNlCisJCXsKKwkJCUVWUF9NRF9DVFhfY29weSgmaG1hYyxoYXNoKTsKKwkJCW1hY19jdHggPSAmaG1hYzsKKwkJfQogCi0JaWYgKHNzbC0+dmVyc2lvbiA9PSBEVExTMV9CQURfVkVSIHx8Ci0JICAgIChzc2wtPnZlcnNpb24gPT0gRFRMUzFfVkVSU0lPTiAmJiBzc2wtPmNsaWVudF92ZXJzaW9uICE9IERUTFMxX0JBRF9WRVIpKQorCWlmIChzc2wtPnZlcnNpb24gPT0gRFRMUzFfVkVSU0lPTiB8fCBzc2wtPnZlcnNpb24gPT0gRFRMUzFfQkFEX1ZFUikKIAkJewogCQl1bnNpZ25lZCBjaGFyIGR0bHNzZXFbOF0sKnA9ZHRsc3NlcTsKKwogCQlzMm4oc2VuZD9zc2wtPmQxLT53X2Vwb2NoOnNzbC0+ZDEtPnJfZXBvY2gsIHApOwogCQltZW1jcHkgKHAsJnNlcVsyXSw2KTsKIAotCQlITUFDX1VwZGF0ZSgmaG1hYyxkdGxzc2VxLDgpOworCQlFVlBfRGlnZXN0U2lnblVwZGF0ZShtYWNfY3R4LGR0bHNzZXEsOCk7CiAJCX0KIAllbHNlCi0JCUhNQUNfVXBkYXRlKCZobWFjLHNlcSw4KTsKKwkJRVZQX0RpZ2VzdFNpZ25VcGRhdGUobWFjX2N0eCxzZXEsOCk7CiAKLQlITUFDX1VwZGF0ZSgmaG1hYyxidWYsNSk7Ci0JSE1BQ19VcGRhdGUoJmhtYWMscmVjLT5pbnB1dCxyZWMtPmxlbmd0aCk7Ci0JSE1BQ19GaW5hbCgmaG1hYyxtZCwmbWRfc2l6ZSk7Ci0JSE1BQ19DVFhfY2xlYW51cCgmaG1hYyk7Ci0KKwlFVlBfRGlnZXN0U2lnblVwZGF0ZShtYWNfY3R4LGJ1Ziw1KTsKKwlFVlBfRGlnZXN0U2lnblVwZGF0ZShtYWNfY3R4LHJlYy0+aW5wdXQscmVjLT5sZW5ndGgpOworCXQ9RVZQX0RpZ2VzdFNpZ25GaW5hbChtYWNfY3R4LG1kLCZtZF9zaXplKTsKKwlPUEVOU1NMX2Fzc2VydCh0ID4gMCk7CisJCQorCWlmICghc3RyZWFtX21hYykgRVZQX01EX0NUWF9jbGVhbnVwKCZobWFjKTsKICNpZmRlZiBUTFNfREVCVUcKIHByaW50Zigic2VjPSIpOwoge3Vuc2lnbmVkIGludCB6OyBmb3IgKHo9MDsgejxtZF9zaXplOyB6KyspIHByaW50ZigiJTAyWCAiLG1hY19zZWNbel0pOyBwcmludGYoIlxuIik7IH0KQEAgLTc5Myw3ICs5MTEsNyBAQAoge3Vuc2lnbmVkIGludCB6OyBmb3IgKHo9MDsgejxyZWMtPmxlbmd0aDsgeisrKSBwcmludGYoIiUwMlggIixidWZbel0pOyBwcmludGYoIlxuIik7IH0KICNlbmRpZgogCi0JaWYgKCBTU0xfdmVyc2lvbihzc2wpICE9IERUTFMxX1ZFUlNJT04gJiYgU1NMX3ZlcnNpb24oc3NsKSAhPSBEVExTMV9CQURfVkVSKQorCWlmIChzc2wtPnZlcnNpb24gIT0gRFRMUzFfVkVSU0lPTiAmJiBzc2wtPnZlcnNpb24gIT0gRFRMUzFfQkFEX1ZFUikKIAkJewogCQlmb3IgKGk9NzsgaT49MDsgaS0tKQogCQkJewpAQCAtODExLDIzICs5MjksMzUgQEAKIGludCB0bHMxX2dlbmVyYXRlX21hc3Rlcl9zZWNyZXQoU1NMICpzLCB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGNoYXIgKnAsCiAJICAgICBpbnQgbGVuKQogCXsKLQl1bnNpZ25lZCBjaGFyIGJ1ZltTU0wzX1JBTkRPTV9TSVpFKjIrVExTX01EX01BU1RFUl9TRUNSRVRfQ09OU1RfU0laRV07CiAJdW5zaWduZWQgY2hhciBidWZmW1NTTF9NQVhfTUFTVEVSX0tFWV9MRU5HVEhdOworCWNvbnN0IHZvaWQgKmNvID0gTlVMTCwgKnNvID0gTlVMTDsKKwlpbnQgY29sID0gMCwgc29sID0gMDsKIAogI2lmZGVmIEtTU0xfREVCVUcKLQlwcmludGYgKCJ0bHMxX2dlbmVyYXRlX21hc3Rlcl9zZWNyZXQoJXAsJXAsICVwLCAlZClcbiIsICh2b2lkICopcyxvdXQsIHAsbGVuKTsKKwlwcmludGYgKCJ0bHMxX2dlbmVyYXRlX21hc3Rlcl9zZWNyZXQoJXAsJXAsICVwLCAlZClcbiIsIHMsb3V0LCBwLGxlbik7CiAjZW5kaWYJLyogS1NTTF9ERUJVRyAqLwogCi0JLyogU2V0dXAgdGhlIHN0dWZmIHRvIG11bmdlICovCi0JbWVtY3B5KGJ1ZixUTFNfTURfTUFTVEVSX1NFQ1JFVF9DT05TVCwKLQkJVExTX01EX01BU1RFUl9TRUNSRVRfQ09OU1RfU0laRSk7Ci0JbWVtY3B5KCYoYnVmW1RMU19NRF9NQVNURVJfU0VDUkVUX0NPTlNUX1NJWkVdKSwKLQkJcy0+czMtPmNsaWVudF9yYW5kb20sU1NMM19SQU5ET01fU0laRSk7Ci0JbWVtY3B5KCYoYnVmW1NTTDNfUkFORE9NX1NJWkUrVExTX01EX01BU1RFUl9TRUNSRVRfQ09OU1RfU0laRV0pLAotCQlzLT5zMy0+c2VydmVyX3JhbmRvbSxTU0wzX1JBTkRPTV9TSVpFKTsKLQl0bHMxX1BSRihzLT5jdHgtPm1kNSxzLT5jdHgtPnNoYTEsCi0JCWJ1ZixUTFNfTURfTUFTVEVSX1NFQ1JFVF9DT05TVF9TSVpFK1NTTDNfUkFORE9NX1NJWkUqMixwLGxlbiwKKyNpZmRlZiBUTFNFWFRfVFlQRV9vcGFxdWVfcHJmX2lucHV0CisJaWYgKHMtPnMzLT5jbGllbnRfb3BhcXVlX3ByZl9pbnB1dCAhPSBOVUxMICYmIHMtPnMzLT5zZXJ2ZXJfb3BhcXVlX3ByZl9pbnB1dCAhPSBOVUxMICYmCisJICAgIHMtPnMzLT5jbGllbnRfb3BhcXVlX3ByZl9pbnB1dF9sZW4gPiAwICYmCisJICAgIHMtPnMzLT5jbGllbnRfb3BhcXVlX3ByZl9pbnB1dF9sZW4gPT0gcy0+czMtPnNlcnZlcl9vcGFxdWVfcHJmX2lucHV0X2xlbikKKwkJeworCQljbyA9IHMtPnMzLT5jbGllbnRfb3BhcXVlX3ByZl9pbnB1dDsKKwkJY29sID0gcy0+czMtPnNlcnZlcl9vcGFxdWVfcHJmX2lucHV0X2xlbjsKKwkJc28gPSBzLT5zMy0+c2VydmVyX29wYXF1ZV9wcmZfaW5wdXQ7CisJCXNvbCA9IHMtPnMzLT5jbGllbnRfb3BhcXVlX3ByZl9pbnB1dF9sZW47IC8qIG11c3QgYmUgc2FtZSBhcyBjb2wgKHNlZSBkcmFmdC1yZXNjb3JsYS10bHMtb3BhcXVlLXByZi1pbnB1dC0wMC50eHQsIHNlY3Rpb24gMy4xKSAqLworCQl9CisjZW5kaWYKKworCXRsczFfUFJGKHMtPnMzLT50bXAubmV3X2NpcGhlci0+YWxnb3JpdGhtMiwKKwkJVExTX01EX01BU1RFUl9TRUNSRVRfQ09OU1QsVExTX01EX01BU1RFUl9TRUNSRVRfQ09OU1RfU0laRSwKKwkJcy0+czMtPmNsaWVudF9yYW5kb20sU1NMM19SQU5ET01fU0laRSwKKwkJY28sIGNvbCwKKwkJcy0+czMtPnNlcnZlcl9yYW5kb20sU1NMM19SQU5ET01fU0laRSwKKwkJc28sIHNvbCwKKwkJcCxsZW4sCiAJCXMtPnNlc3Npb24tPm1hc3Rlcl9rZXksYnVmZixzaXplb2YgYnVmZik7CisKICNpZmRlZiBLU1NMX0RFQlVHCiAJcHJpbnRmICgidGxzMV9nZW5lcmF0ZV9tYXN0ZXJfc2VjcmV0KCkgY29tcGxldGVcbiIpOwogI2VuZGlmCS8qIEtTU0xfREVCVUcgKi8KQEAgLTg2Miw3ICs5OTIsMTMgQEAKIAljYXNlIFNTTF9BRF9JTlRFUk5BTF9FUlJPUjoJcmV0dXJuKFRMUzFfQURfSU5URVJOQUxfRVJST1IpOwogCWNhc2UgU1NMX0FEX1VTRVJfQ0FOQ0VMTEVEOglyZXR1cm4oVExTMV9BRF9VU0VSX0NBTkNFTExFRCk7CiAJY2FzZSBTU0xfQURfTk9fUkVORUdPVElBVElPTjoJcmV0dXJuKFRMUzFfQURfTk9fUkVORUdPVElBVElPTik7Ci0jaWZkZWYgRFRMUzFfQURfTUlTU0lOR19IQU5EU0hBS0VfTUVTU0FHRQorCWNhc2UgU1NMX0FEX1VOU1VQUE9SVEVEX0VYVEVOU0lPTjogcmV0dXJuKFRMUzFfQURfVU5TVVBQT1JURURfRVhURU5TSU9OKTsKKwljYXNlIFNTTF9BRF9DRVJUSUZJQ0FURV9VTk9CVEFJTkFCTEU6IHJldHVybihUTFMxX0FEX0NFUlRJRklDQVRFX1VOT0JUQUlOQUJMRSk7CisJY2FzZSBTU0xfQURfVU5SRUNPR05JWkVEX05BTUU6CXJldHVybihUTFMxX0FEX1VOUkVDT0dOSVpFRF9OQU1FKTsKKwljYXNlIFNTTF9BRF9CQURfQ0VSVElGSUNBVEVfU1RBVFVTX1JFU1BPTlNFOiByZXR1cm4oVExTMV9BRF9CQURfQ0VSVElGSUNBVEVfU1RBVFVTX1JFU1BPTlNFKTsKKwljYXNlIFNTTF9BRF9CQURfQ0VSVElGSUNBVEVfSEFTSF9WQUxVRTogcmV0dXJuKFRMUzFfQURfQkFEX0NFUlRJRklDQVRFX0hBU0hfVkFMVUUpOworCWNhc2UgU1NMX0FEX1VOS05PV05fUFNLX0lERU5USVRZOnJldHVybihUTFMxX0FEX1VOS05PV05fUFNLX0lERU5USVRZKTsKKyNpZiAwIC8qIG5vdCBhcHByb3ByaWF0ZSBmb3IgVExTLCBub3QgdXNlZCBmb3IgRFRMUyAqLwogCWNhc2UgRFRMUzFfQURfTUlTU0lOR19IQU5EU0hBS0VfTUVTU0FHRTogcmV0dXJuIAogCQkJCQkgIChEVExTMV9BRF9NSVNTSU5HX0hBTkRTSEFLRV9NRVNTQUdFKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3NsL3QxX2xpYi5jIGIvc3NsL3QxX2xpYi5jCmluZGV4IDhiNTMxMTIuLmU4YmMzNGMgMTAwNjQ0Ci0tLSBhL3NzbC90MV9saWIuYworKysgYi9zc2wvdDFfbGliLmMKQEAgLTU1LDYgKzU1LDU5IEBACiAgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCiAgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQogICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisgKgorICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorICoKKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorICoKKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKyAqICAgIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCisgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAqCisgKi8KIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+CkBAIC05MiwxMSArMTQ1LDYgQEAKIAlyZXR1cm4oNjAqNjAqMik7CiAJfQogCi1JTVBMRU1FTlRfdGxzMV9tZXRoX2Z1bmModGxzdjFfYmFzZV9tZXRob2QsCi0JCQlzc2xfdW5kZWZpbmVkX2Z1bmN0aW9uLAotCQkJc3NsX3VuZGVmaW5lZF9mdW5jdGlvbiwKLQkJCXNzbF9iYWRfbWV0aG9kKQotCiBpbnQgdGxzMV9uZXcoU1NMICpzKQogCXsKIAlpZiAoIXNzbDNfbmV3KHMpKSByZXR1cm4oMCk7CkBAIC0xMDYsNiArMTU0LDEyIEBACiAKIHZvaWQgdGxzMV9mcmVlKFNTTCAqcykKIAl7CisjaWZuZGVmIE9QRU5TU0xfTk9fVExTRVhUCisJaWYgKHMtPnRsc2V4dF9zZXNzaW9uX3RpY2tldCkKKwkJeworCQlPUEVOU1NMX2ZyZWUocy0+dGxzZXh0X3Nlc3Npb25fdGlja2V0KTsKKwkJfQorI2VuZGlmIC8qIE9QRU5TU0xfTk9fVExTRVhUICovCiAJc3NsM19mcmVlKHMpOwogCX0KIApAQCAtMTE1LDE3ICsxNjksMTA1IEBACiAJcy0+dmVyc2lvbj1UTFMxX1ZFUlNJT047CiAJfQogCi0jaWYgMAotbG9uZyB0bHMxX2N0cmwoU1NMICpzLCBpbnQgY21kLCBsb25nIGxhcmcsIGNoYXIgKnBhcmcpCisjaWZuZGVmIE9QRU5TU0xfTk9fRUMKK3N0YXRpYyBpbnQgbmlkX2xpc3RbXSA9CiAJewotCXJldHVybigwKTsKKwkJTklEX3NlY3QxNjNrMSwgLyogc2VjdDE2M2sxICgxKSAqLworCQlOSURfc2VjdDE2M3IxLCAvKiBzZWN0MTYzcjEgKDIpICovCisJCU5JRF9zZWN0MTYzcjIsIC8qIHNlY3QxNjNyMiAoMykgKi8KKwkJTklEX3NlY3QxOTNyMSwgLyogc2VjdDE5M3IxICg0KSAqLyAKKwkJTklEX3NlY3QxOTNyMiwgLyogc2VjdDE5M3IyICg1KSAqLyAKKwkJTklEX3NlY3QyMzNrMSwgLyogc2VjdDIzM2sxICg2KSAqLworCQlOSURfc2VjdDIzM3IxLCAvKiBzZWN0MjMzcjEgKDcpICovIAorCQlOSURfc2VjdDIzOWsxLCAvKiBzZWN0MjM5azEgKDgpICovIAorCQlOSURfc2VjdDI4M2sxLCAvKiBzZWN0MjgzazEgKDkpICovCisJCU5JRF9zZWN0MjgzcjEsIC8qIHNlY3QyODNyMSAoMTApICovIAorCQlOSURfc2VjdDQwOWsxLCAvKiBzZWN0NDA5azEgKDExKSAqLyAKKwkJTklEX3NlY3Q0MDlyMSwgLyogc2VjdDQwOXIxICgxMikgKi8KKwkJTklEX3NlY3Q1NzFrMSwgLyogc2VjdDU3MWsxICgxMykgKi8gCisJCU5JRF9zZWN0NTcxcjEsIC8qIHNlY3Q1NzFyMSAoMTQpICovIAorCQlOSURfc2VjcDE2MGsxLCAvKiBzZWNwMTYwazEgKDE1KSAqLworCQlOSURfc2VjcDE2MHIxLCAvKiBzZWNwMTYwcjEgKDE2KSAqLyAKKwkJTklEX3NlY3AxNjByMiwgLyogc2VjcDE2MHIyICgxNykgKi8gCisJCU5JRF9zZWNwMTkyazEsIC8qIHNlY3AxOTJrMSAoMTgpICovCisJCU5JRF9YOV82Ml9wcmltZTE5MnYxLCAvKiBzZWNwMTkycjEgKDE5KSAqLyAKKwkJTklEX3NlY3AyMjRrMSwgLyogc2VjcDIyNGsxICgyMCkgKi8gCisJCU5JRF9zZWNwMjI0cjEsIC8qIHNlY3AyMjRyMSAoMjEpICovCisJCU5JRF9zZWNwMjU2azEsIC8qIHNlY3AyNTZrMSAoMjIpICovIAorCQlOSURfWDlfNjJfcHJpbWUyNTZ2MSwgLyogc2VjcDI1NnIxICgyMykgKi8gCisJCU5JRF9zZWNwMzg0cjEsIC8qIHNlY3AzODRyMSAoMjQpICovCisJCU5JRF9zZWNwNTIxcjEgIC8qIHNlY3A1MjFyMSAoMjUpICovCQorCX07CisJCitpbnQgdGxzMV9lY19jdXJ2ZV9pZDJuaWQoaW50IGN1cnZlX2lkKQorCXsKKwkvKiBFQ0MgY3VydmVzIGZyb20gZHJhZnQtaWV0Zi10bHMtZWNjLTEyLnR4dCAoT2N0LiAxNywgMjAwNSkgKi8KKwlpZiAoKGN1cnZlX2lkIDwgMSkgfHwgKCh1bnNpZ25lZCBpbnQpY3VydmVfaWQgPgorCQkJCXNpemVvZihuaWRfbGlzdCkvc2l6ZW9mKG5pZF9saXN0WzBdKSkpCisJCXJldHVybiAwOworCXJldHVybiBuaWRfbGlzdFtjdXJ2ZV9pZC0xXTsKIAl9CiAKLWxvbmcgdGxzMV9jYWxsYmFja19jdHJsKFNTTCAqcywgaW50IGNtZCwgdm9pZCAqKCpmcCkoKSkKK2ludCB0bHMxX2VjX25pZDJjdXJ2ZV9pZChpbnQgbmlkKQogCXsKLQlyZXR1cm4oMCk7CisJLyogRUNDIGN1cnZlcyBmcm9tIGRyYWZ0LWlldGYtdGxzLWVjYy0xMi50eHQgKE9jdC4gMTcsIDIwMDUpICovCisJc3dpdGNoIChuaWQpCisJCXsKKwljYXNlIE5JRF9zZWN0MTYzazE6IC8qIHNlY3QxNjNrMSAoMSkgKi8KKwkJcmV0dXJuIDE7CisJY2FzZSBOSURfc2VjdDE2M3IxOiAvKiBzZWN0MTYzcjEgKDIpICovCisJCXJldHVybiAyOworCWNhc2UgTklEX3NlY3QxNjNyMjogLyogc2VjdDE2M3IyICgzKSAqLworCQlyZXR1cm4gMzsKKwljYXNlIE5JRF9zZWN0MTkzcjE6IC8qIHNlY3QxOTNyMSAoNCkgKi8gCisJCXJldHVybiA0OworCWNhc2UgTklEX3NlY3QxOTNyMjogLyogc2VjdDE5M3IyICg1KSAqLyAKKwkJcmV0dXJuIDU7CisJY2FzZSBOSURfc2VjdDIzM2sxOiAvKiBzZWN0MjMzazEgKDYpICovCisJCXJldHVybiA2OworCWNhc2UgTklEX3NlY3QyMzNyMTogLyogc2VjdDIzM3IxICg3KSAqLyAKKwkJcmV0dXJuIDc7CisJY2FzZSBOSURfc2VjdDIzOWsxOiAvKiBzZWN0MjM5azEgKDgpICovIAorCQlyZXR1cm4gODsKKwljYXNlIE5JRF9zZWN0MjgzazE6IC8qIHNlY3QyODNrMSAoOSkgKi8KKwkJcmV0dXJuIDk7CisJY2FzZSBOSURfc2VjdDI4M3IxOiAvKiBzZWN0MjgzcjEgKDEwKSAqLyAKKwkJcmV0dXJuIDEwOworCWNhc2UgTklEX3NlY3Q0MDlrMTogLyogc2VjdDQwOWsxICgxMSkgKi8gCisJCXJldHVybiAxMTsKKwljYXNlIE5JRF9zZWN0NDA5cjE6IC8qIHNlY3Q0MDlyMSAoMTIpICovCisJCXJldHVybiAxMjsKKwljYXNlIE5JRF9zZWN0NTcxazE6IC8qIHNlY3Q1NzFrMSAoMTMpICovIAorCQlyZXR1cm4gMTM7CisJY2FzZSBOSURfc2VjdDU3MXIxOiAvKiBzZWN0NTcxcjEgKDE0KSAqLyAKKwkJcmV0dXJuIDE0OworCWNhc2UgTklEX3NlY3AxNjBrMTogLyogc2VjcDE2MGsxICgxNSkgKi8KKwkJcmV0dXJuIDE1OworCWNhc2UgTklEX3NlY3AxNjByMTogLyogc2VjcDE2MHIxICgxNikgKi8gCisJCXJldHVybiAxNjsKKwljYXNlIE5JRF9zZWNwMTYwcjI6IC8qIHNlY3AxNjByMiAoMTcpICovIAorCQlyZXR1cm4gMTc7CisJY2FzZSBOSURfc2VjcDE5MmsxOiAvKiBzZWNwMTkyazEgKDE4KSAqLworCQlyZXR1cm4gMTg7CisJY2FzZSBOSURfWDlfNjJfcHJpbWUxOTJ2MTogLyogc2VjcDE5MnIxICgxOSkgKi8gCisJCXJldHVybiAxOTsKKwljYXNlIE5JRF9zZWNwMjI0azE6IC8qIHNlY3AyMjRrMSAoMjApICovIAorCQlyZXR1cm4gMjA7CisJY2FzZSBOSURfc2VjcDIyNHIxOiAvKiBzZWNwMjI0cjEgKDIxKSAqLworCQlyZXR1cm4gMjE7CisJY2FzZSBOSURfc2VjcDI1NmsxOiAvKiBzZWNwMjU2azEgKDIyKSAqLyAKKwkJcmV0dXJuIDIyOworCWNhc2UgTklEX1g5XzYyX3ByaW1lMjU2djE6IC8qIHNlY3AyNTZyMSAoMjMpICovIAorCQlyZXR1cm4gMjM7CisJY2FzZSBOSURfc2VjcDM4NHIxOiAvKiBzZWNwMzg0cjEgKDI0KSAqLworCQlyZXR1cm4gMjQ7CisJY2FzZSBOSURfc2VjcDUyMXIxOiAgLyogc2VjcDUyMXIxICgyNSkgKi8JCisJCXJldHVybiAyNTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwkJfQogCX0KLSNlbmRpZgorI2VuZGlmIC8qIE9QRU5TU0xfTk9fRUMgKi8KIAogI2lmbmRlZiBPUEVOU1NMX05PX1RMU0VYVAogdW5zaWduZWQgY2hhciAqc3NsX2FkZF9jbGllbnRoZWxsb190bHNleHQoU1NMICpzLCB1bnNpZ25lZCBjaGFyICpwLCB1bnNpZ25lZCBjaGFyICpsaW1pdCkKQEAgLTE1Nyw3ICsyOTksNyBAQAogCQkqLwogCQkgICAKIAkJaWYgKChsZW5tYXggPSBsaW1pdCAtIHJldCAtIDkpIDwgMCAKLQkJfHwgKHNpemVfc3RyID0gc3RybGVuKHMtPnRsc2V4dF9ob3N0bmFtZSkpID4gKHVuc2lnbmVkIGxvbmcpbGVubWF4KSAKKwkJICAgIHx8IChzaXplX3N0ciA9IHN0cmxlbihzLT50bHNleHRfaG9zdG5hbWUpKSA+ICh1bnNpZ25lZCBsb25nKWxlbm1heCkgCiAJCQlyZXR1cm4gTlVMTDsKIAkJCQogCQkvKiBleHRlbnNpb24gdHlwZSBhbmQgbGVuZ3RoICovCkBAIC0xNzIsOSArMzE0LDggQEAKIAkJczJuKHNpemVfc3RyLHJldCk7CiAJCW1lbWNweShyZXQsIHMtPnRsc2V4dF9ob3N0bmFtZSwgc2l6ZV9zdHIpOwogCQlyZXQrPXNpemVfc3RyOwotCiAJCX0KLSAKKwogICAgICAgICAvKiBBZGQgUkkgaWYgcmVuZWdvdGlhdGluZyAqLwogICAgICAgICBpZiAocy0+bmV3X3Nlc3Npb24pCiAgICAgICAgICAgewpAQCAtMjAwLDE5ICszNDEsODEgQEAKICAgICAgICAgICByZXQgKz0gZWw7CiAgICAgICAgIH0KIAotICAgICAgICAgICAKKyNpZm5kZWYgT1BFTlNTTF9OT19FQworCWlmIChzLT50bHNleHRfZWNwb2ludGZvcm1hdGxpc3QgIT0gTlVMTCAmJgorCSAgICBzLT52ZXJzaW9uICE9IERUTFMxX1ZFUlNJT04pCisJCXsKKwkJLyogQWRkIFRMUyBleHRlbnNpb24gRUNQb2ludEZvcm1hdHMgdG8gdGhlIENsaWVudEhlbGxvIG1lc3NhZ2UgKi8KKwkJbG9uZyBsZW5tYXg7IAorCisJCWlmICgobGVubWF4ID0gbGltaXQgLSByZXQgLSA1KSA8IDApIHJldHVybiBOVUxMOyAKKwkJaWYgKHMtPnRsc2V4dF9lY3BvaW50Zm9ybWF0bGlzdF9sZW5ndGggPiAodW5zaWduZWQgbG9uZylsZW5tYXgpIHJldHVybiBOVUxMOworCQlpZiAocy0+dGxzZXh0X2VjcG9pbnRmb3JtYXRsaXN0X2xlbmd0aCA+IDI1NSkKKwkJCXsKKwkJCVNTTGVycihTU0xfRl9TU0xfQUREX0NMSUVOVEhFTExPX1RMU0VYVCwgRVJSX1JfSU5URVJOQUxfRVJST1IpOworCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCQorCQlzMm4oVExTRVhUX1RZUEVfZWNfcG9pbnRfZm9ybWF0cyxyZXQpOworCQlzMm4ocy0+dGxzZXh0X2VjcG9pbnRmb3JtYXRsaXN0X2xlbmd0aCArIDEscmV0KTsKKwkJKihyZXQrKykgPSAodW5zaWduZWQgY2hhcikgcy0+dGxzZXh0X2VjcG9pbnRmb3JtYXRsaXN0X2xlbmd0aDsKKwkJbWVtY3B5KHJldCwgcy0+dGxzZXh0X2VjcG9pbnRmb3JtYXRsaXN0LCBzLT50bHNleHRfZWNwb2ludGZvcm1hdGxpc3RfbGVuZ3RoKTsKKwkJcmV0Kz1zLT50bHNleHRfZWNwb2ludGZvcm1hdGxpc3RfbGVuZ3RoOworCQl9CisJaWYgKHMtPnRsc2V4dF9lbGxpcHRpY2N1cnZlbGlzdCAhPSBOVUxMICYmCisJICAgIHMtPnZlcnNpb24gIT0gRFRMUzFfVkVSU0lPTikKKwkJeworCQkvKiBBZGQgVExTIGV4dGVuc2lvbiBFbGxpcHRpY0N1cnZlcyB0byB0aGUgQ2xpZW50SGVsbG8gbWVzc2FnZSAqLworCQlsb25nIGxlbm1heDsgCisKKwkJaWYgKChsZW5tYXggPSBsaW1pdCAtIHJldCAtIDYpIDwgMCkgcmV0dXJuIE5VTEw7IAorCQlpZiAocy0+dGxzZXh0X2VsbGlwdGljY3VydmVsaXN0X2xlbmd0aCA+ICh1bnNpZ25lZCBsb25nKWxlbm1heCkgcmV0dXJuIE5VTEw7CisJCWlmIChzLT50bHNleHRfZWxsaXB0aWNjdXJ2ZWxpc3RfbGVuZ3RoID4gNjU1MzIpCisJCQl7CisJCQlTU0xlcnIoU1NMX0ZfU1NMX0FERF9DTElFTlRIRUxMT19UTFNFWFQsIEVSUl9SX0lOVEVSTkFMX0VSUk9SKTsKKwkJCXJldHVybiBOVUxMOworCQkJfQorCQkKKwkJczJuKFRMU0VYVF9UWVBFX2VsbGlwdGljX2N1cnZlcyxyZXQpOworCQlzMm4ocy0+dGxzZXh0X2VsbGlwdGljY3VydmVsaXN0X2xlbmd0aCArIDIsIHJldCk7CisKKwkJLyogTkI6IGRyYWZ0LWlldGYtdGxzLWVjYy0xMi50eHQgdXNlcyBhIG9uZS1ieXRlIHByZWZpeCBmb3IKKwkJICogZWxsaXB0aWNfY3VydmVfbGlzdCwgYnV0IHRoZSBleGFtcGxlcyB1c2UgdHdvIGJ5dGVzLgorCQkgKiBodHRwOi8vd3d3MS5pZXRmLm9yZy9tYWlsLWFyY2hpdmUvd2ViL3Rscy9jdXJyZW50L21zZzAwNTM4Lmh0bWwKKwkJICogcmVzb2x2ZXMgdGhpcyB0byB0d28gYnl0ZXMuCisJCSAqLworCQlzMm4ocy0+dGxzZXh0X2VsbGlwdGljY3VydmVsaXN0X2xlbmd0aCwgcmV0KTsKKwkJbWVtY3B5KHJldCwgcy0+dGxzZXh0X2VsbGlwdGljY3VydmVsaXN0LCBzLT50bHNleHRfZWxsaXB0aWNjdXJ2ZWxpc3RfbGVuZ3RoKTsKKwkJcmV0Kz1zLT50bHNleHRfZWxsaXB0aWNjdXJ2ZWxpc3RfbGVuZ3RoOworCQl9CisjZW5kaWYgLyogT1BFTlNTTF9OT19FQyAqLworCiAJaWYgKCEoU1NMX2dldF9vcHRpb25zKHMpICYgU1NMX09QX05PX1RJQ0tFVCkpCiAJCXsKIAkJaW50IHRpY2tsZW47CiAJCWlmICghcy0+bmV3X3Nlc3Npb24gJiYgcy0+c2Vzc2lvbiAmJiBzLT5zZXNzaW9uLT50bHNleHRfdGljaykKIAkJCXRpY2tsZW4gPSBzLT5zZXNzaW9uLT50bHNleHRfdGlja2xlbjsKKwkJZWxzZSBpZiAocy0+c2Vzc2lvbiAmJiBzLT50bHNleHRfc2Vzc2lvbl90aWNrZXQgJiYKKwkJCSBzLT50bHNleHRfc2Vzc2lvbl90aWNrZXQtPmRhdGEpCisJCQl7CisJCQl0aWNrbGVuID0gcy0+dGxzZXh0X3Nlc3Npb25fdGlja2V0LT5sZW5ndGg7CisJCQlzLT5zZXNzaW9uLT50bHNleHRfdGljayA9IE9QRU5TU0xfbWFsbG9jKHRpY2tsZW4pOworCQkJaWYgKCFzLT5zZXNzaW9uLT50bHNleHRfdGljaykKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCW1lbWNweShzLT5zZXNzaW9uLT50bHNleHRfdGljaywKKwkJCSAgICAgICBzLT50bHNleHRfc2Vzc2lvbl90aWNrZXQtPmRhdGEsCisJCQkgICAgICAgdGlja2xlbik7CisJCQlzLT5zZXNzaW9uLT50bHNleHRfdGlja2xlbiA9IHRpY2tsZW47CisJCQl9CiAJCWVsc2UKIAkJCXRpY2tsZW4gPSAwOworCQlpZiAodGlja2xlbiA9PSAwICYmIHMtPnRsc2V4dF9zZXNzaW9uX3RpY2tldCAmJgorCQkgICAgcy0+dGxzZXh0X3Nlc3Npb25fdGlja2V0LT5kYXRhID09IE5VTEwpCisJCQlnb3RvIHNraXBfZXh0OwogCQkvKiBDaGVjayBmb3IgZW5vdWdoIHJvb20gMiBmb3IgZXh0ZW5zaW9uIHR5cGUsIDIgZm9yIGxlbgogIAkJICogcmVzdCBmb3IgdGlja2V0CiAgIAkJICovCi0JCWlmIChsaW1pdCAtIHJldCAtIDQgLSB0aWNrbGVuIDwgMCkKLQkJCXJldHVybiBOVUxMOworCQlpZiAoKGxvbmcpKGxpbWl0IC0gcmV0IC0gNCAtIHRpY2tsZW4pIDwgMCkgcmV0dXJuIE5VTEw7CiAJCXMybihUTFNFWFRfVFlQRV9zZXNzaW9uX3RpY2tldCxyZXQpOyAKIAkJczJuKHRpY2tsZW4scmV0KTsKIAkJaWYgKHRpY2tsZW4pCkBAIC0yMjEsNiArNDI0LDI2IEBACiAJCQlyZXQgKz0gdGlja2xlbjsKIAkJCX0KIAkJfQorCQlza2lwX2V4dDoKKworI2lmZGVmIFRMU0VYVF9UWVBFX29wYXF1ZV9wcmZfaW5wdXQKKwlpZiAocy0+czMtPmNsaWVudF9vcGFxdWVfcHJmX2lucHV0ICE9IE5VTEwgJiYKKwkgICAgcy0+dmVyc2lvbiAhPSBEVExTMV9WRVJTSU9OKQorCQl7CisJCXNpemVfdCBjb2wgPSBzLT5zMy0+Y2xpZW50X29wYXF1ZV9wcmZfaW5wdXRfbGVuOworCQkKKwkJaWYgKChsb25nKShsaW1pdCAtIHJldCAtIDYgLSBjb2wgPCAwKSkKKwkJCXJldHVybiBOVUxMOworCQlpZiAoY29sID4gMHhGRkZEKSAvKiBjYW4ndCBoYXBwZW4gKi8KKwkJCXJldHVybiBOVUxMOworCisJCXMybihUTFNFWFRfVFlQRV9vcGFxdWVfcHJmX2lucHV0LCByZXQpOyAKKwkJczJuKGNvbCArIDIsIHJldCk7CisJCXMybihjb2wsIHJldCk7CisJCW1lbWNweShyZXQsIHMtPnMzLT5jbGllbnRfb3BhcXVlX3ByZl9pbnB1dCwgY29sKTsKKwkJcmV0ICs9IGNvbDsKKwkJfQorI2VuZGlmCiAKIAlpZiAocy0+dGxzZXh0X3N0YXR1c190eXBlID09IFRMU0VYVF9TVEFUVVNUWVBFX29jc3AgJiYKIAkgICAgcy0+dmVyc2lvbiAhPSBEVExTMV9WRVJTSU9OKQpAQCAtMjkyLDcgKzUxNSw3IEBACiAKIAlpZiAoIXMtPmhpdCAmJiBzLT5zZXJ2ZXJuYW1lX2RvbmUgPT0gMSAmJiBzLT5zZXNzaW9uLT50bHNleHRfaG9zdG5hbWUgIT0gTlVMTCkKIAkJeyAKLQkJaWYgKGxpbWl0IC0gcmV0IC0gNCA8IDApIHJldHVybiBOVUxMOyAKKwkJaWYgKChsb25nKShsaW1pdCAtIHJldCAtIDQpIDwgMCkgcmV0dXJuIE5VTEw7IAogCiAJCXMybihUTFNFWFRfVFlQRV9zZXJ2ZXJfbmFtZSxyZXQpOwogCQlzMm4oMCxyZXQpOwpAQCAtMzIxLDExICs1NDQsMzYgQEAKIAogICAgICAgICAgIHJldCArPSBlbDsKICAgICAgICAgfQotCQorCisjaWZuZGVmIE9QRU5TU0xfTk9fRUMKKwlpZiAocy0+dGxzZXh0X2VjcG9pbnRmb3JtYXRsaXN0ICE9IE5VTEwgJiYKKwkgICAgcy0+dmVyc2lvbiAhPSBEVExTMV9WRVJTSU9OKQorCQl7CisJCS8qIEFkZCBUTFMgZXh0ZW5zaW9uIEVDUG9pbnRGb3JtYXRzIHRvIHRoZSBTZXJ2ZXJIZWxsbyBtZXNzYWdlICovCisJCWxvbmcgbGVubWF4OyAKKworCQlpZiAoKGxlbm1heCA9IGxpbWl0IC0gcmV0IC0gNSkgPCAwKSByZXR1cm4gTlVMTDsgCisJCWlmIChzLT50bHNleHRfZWNwb2ludGZvcm1hdGxpc3RfbGVuZ3RoID4gKHVuc2lnbmVkIGxvbmcpbGVubWF4KSByZXR1cm4gTlVMTDsKKwkJaWYgKHMtPnRsc2V4dF9lY3BvaW50Zm9ybWF0bGlzdF9sZW5ndGggPiAyNTUpCisJCQl7CisJCQlTU0xlcnIoU1NMX0ZfU1NMX0FERF9TRVJWRVJIRUxMT19UTFNFWFQsIEVSUl9SX0lOVEVSTkFMX0VSUk9SKTsKKwkJCXJldHVybiBOVUxMOworCQkJfQorCQkKKwkJczJuKFRMU0VYVF9UWVBFX2VjX3BvaW50X2Zvcm1hdHMscmV0KTsKKwkJczJuKHMtPnRsc2V4dF9lY3BvaW50Zm9ybWF0bGlzdF9sZW5ndGggKyAxLHJldCk7CisJCSoocmV0KyspID0gKHVuc2lnbmVkIGNoYXIpIHMtPnRsc2V4dF9lY3BvaW50Zm9ybWF0bGlzdF9sZW5ndGg7CisJCW1lbWNweShyZXQsIHMtPnRsc2V4dF9lY3BvaW50Zm9ybWF0bGlzdCwgcy0+dGxzZXh0X2VjcG9pbnRmb3JtYXRsaXN0X2xlbmd0aCk7CisJCXJldCs9cy0+dGxzZXh0X2VjcG9pbnRmb3JtYXRsaXN0X2xlbmd0aDsKKworCQl9CisJLyogQ3VycmVudGx5IHRoZSBzZXJ2ZXIgc2hvdWxkIG5vdCByZXNwb25kIHdpdGggYSBTdXBwb3J0ZWRDdXJ2ZXMgZXh0ZW5zaW9uICovCisjZW5kaWYgLyogT1BFTlNTTF9OT19FQyAqLworCiAJaWYgKHMtPnRsc2V4dF90aWNrZXRfZXhwZWN0ZWQKIAkJJiYgIShTU0xfZ2V0X29wdGlvbnMocykgJiBTU0xfT1BfTk9fVElDS0VUKSkgCiAJCXsgCi0JCWlmIChsaW1pdCAtIHJldCAtIDQgPCAwKSByZXR1cm4gTlVMTDsgCisJCWlmICgobG9uZykobGltaXQgLSByZXQgLSA0KSA8IDApIHJldHVybiBOVUxMOyAKIAkJczJuKFRMU0VYVF9UWVBFX3Nlc3Npb25fdGlja2V0LHJldCk7CiAJCXMybigwLHJldCk7CiAJCX0KQEAgLTMzNyw2ICs1ODUsMzkgQEAKIAkJczJuKDAscmV0KTsKIAkJfQogCisjaWZkZWYgVExTRVhUX1RZUEVfb3BhcXVlX3ByZl9pbnB1dAorCWlmIChzLT5zMy0+c2VydmVyX29wYXF1ZV9wcmZfaW5wdXQgIT0gTlVMTCAmJgorCSAgICBzLT52ZXJzaW9uICE9IERUTFMxX1ZFUlNJT04pCisJCXsKKwkJc2l6ZV90IHNvbCA9IHMtPnMzLT5zZXJ2ZXJfb3BhcXVlX3ByZl9pbnB1dF9sZW47CisJCQorCQlpZiAoKGxvbmcpKGxpbWl0IC0gcmV0IC0gNiAtIHNvbCkgPCAwKQorCQkJcmV0dXJuIE5VTEw7CisJCWlmIChzb2wgPiAweEZGRkQpIC8qIGNhbid0IGhhcHBlbiAqLworCQkJcmV0dXJuIE5VTEw7CisKKwkJczJuKFRMU0VYVF9UWVBFX29wYXF1ZV9wcmZfaW5wdXQsIHJldCk7IAorCQlzMm4oc29sICsgMiwgcmV0KTsKKwkJczJuKHNvbCwgcmV0KTsKKwkJbWVtY3B5KHJldCwgcy0+czMtPnNlcnZlcl9vcGFxdWVfcHJmX2lucHV0LCBzb2wpOworCQlyZXQgKz0gc29sOworCQl9CisjZW5kaWYKKwlpZiAoKChzLT5zMy0+dG1wLm5ld19jaXBoZXItPmlkICYgMHhGRkZGKT09MHg4MCB8fCAocy0+czMtPnRtcC5uZXdfY2lwaGVyLT5pZCAmIDB4RkZGRik9PTB4ODEpIAorCQkmJiAoU1NMX2dldF9vcHRpb25zKHMpICYgU1NMX09QX0NSWVBUT1BST19UTFNFWFRfQlVHKSkKKwkJeyBjb25zdCB1bnNpZ25lZCBjaGFyIGNyeXB0b3Byb19leHRbMzZdID0geworCQkJMHhmZCwgMHhlOCwgLyo2NTAwMCovCisJCQkweDAwLCAweDIwLCAvKjMyIGJ5dGVzIGxlbmd0aCovCisJCQkweDMwLCAweDFlLCAweDMwLCAweDA4LCAweDA2LCAweDA2LCAweDJhLCAweDg1LCAKKwkJCTB4MDMsICAgMHgwMiwgMHgwMiwgMHgwOSwgMHgzMCwgMHgwOCwgMHgwNiwgMHgwNiwgCisJCQkweDJhLCAweDg1LCAweDAzLCAweDAyLCAweDAyLCAweDE2LCAweDMwLCAweDA4LCAKKwkJCTB4MDYsIDB4MDYsIDB4MmEsIDB4ODUsIDB4MDMsIDB4MDIsIDB4MDIsIDB4MTd9OworCQkJaWYgKGxpbWl0LXJldDwzNikgcmV0dXJuIE5VTEw7CisJCQltZW1jcHkocmV0LGNyeXB0b3Byb19leHQsMzYpOworCQkJcmV0Kz0zNjsKKworCQl9CisKIAlpZiAoKGV4dGRhdGFsZW4gPSByZXQtcC0yKT09IDApIAogCQlyZXR1cm4gcDsKIApAQCAtMzU3LDcgKzYzOCw2IEBACiAKIAlpZiAoZGF0YSA+PSAoZCtuLTIpKQogCQlnb3RvIHJpX2NoZWNrOwotCiAJbjJzKGRhdGEsbGVuKTsKIAogCWlmIChkYXRhID4gKGQrbi1sZW4pKSAKQEAgLTM3MCw3ICs2NTAsOSBAQAogCiAJCWlmIChkYXRhK3NpemUgPiAoZCtuKSkKIAkgICAJCWdvdG8gcmlfY2hlY2s7Ci0KKyNpZiAwCisJCWZwcmludGYoc3RkZXJyLCJSZWNlaXZlZCBleHRlbnNpb24gdHlwZSAlZCBzaXplICVkXG4iLHR5cGUsc2l6ZSk7CisjZW5kaWYKIAkJaWYgKHMtPnRsc2V4dF9kZWJ1Z19jYikKIAkJCXMtPnRsc2V4dF9kZWJ1Z19jYihzLCAwLCB0eXBlLCBkYXRhLCBzaXplLAogCQkJCQkJcy0+dGxzZXh0X2RlYnVnX2FyZyk7CkBAIC00NzAsNiArNzUyLDEwNiBAQAogCQkJCX0KIAogCQkJfQorCisjaWZuZGVmIE9QRU5TU0xfTk9fRUMKKwkJZWxzZSBpZiAodHlwZSA9PSBUTFNFWFRfVFlQRV9lY19wb2ludF9mb3JtYXRzICYmCisJICAgICAgICAgICAgIHMtPnZlcnNpb24gIT0gRFRMUzFfVkVSU0lPTikKKwkJCXsKKwkJCXVuc2lnbmVkIGNoYXIgKnNkYXRhID0gZGF0YTsKKwkJCWludCBlY3BvaW50Zm9ybWF0bGlzdF9sZW5ndGggPSAqKHNkYXRhKyspOworCisJCQlpZiAoZWNwb2ludGZvcm1hdGxpc3RfbGVuZ3RoICE9IHNpemUgLSAxKQorCQkJCXsKKwkJCQkqYWwgPSBUTFMxX0FEX0RFQ09ERV9FUlJPUjsKKwkJCQlyZXR1cm4gMDsKKwkJCQl9CisJCQlzLT5zZXNzaW9uLT50bHNleHRfZWNwb2ludGZvcm1hdGxpc3RfbGVuZ3RoID0gMDsKKwkJCWlmIChzLT5zZXNzaW9uLT50bHNleHRfZWNwb2ludGZvcm1hdGxpc3QgIT0gTlVMTCkgT1BFTlNTTF9mcmVlKHMtPnNlc3Npb24tPnRsc2V4dF9lY3BvaW50Zm9ybWF0bGlzdCk7CisJCQlpZiAoKHMtPnNlc3Npb24tPnRsc2V4dF9lY3BvaW50Zm9ybWF0bGlzdCA9IE9QRU5TU0xfbWFsbG9jKGVjcG9pbnRmb3JtYXRsaXN0X2xlbmd0aCkpID09IE5VTEwpCisJCQkJeworCQkJCSphbCA9IFRMUzFfQURfSU5URVJOQUxfRVJST1I7CisJCQkJcmV0dXJuIDA7CisJCQkJfQorCQkJcy0+c2Vzc2lvbi0+dGxzZXh0X2VjcG9pbnRmb3JtYXRsaXN0X2xlbmd0aCA9IGVjcG9pbnRmb3JtYXRsaXN0X2xlbmd0aDsKKwkJCW1lbWNweShzLT5zZXNzaW9uLT50bHNleHRfZWNwb2ludGZvcm1hdGxpc3QsIHNkYXRhLCBlY3BvaW50Zm9ybWF0bGlzdF9sZW5ndGgpOworI2lmIDAKKwkJCWZwcmludGYoc3RkZXJyLCJzc2xfcGFyc2VfY2xpZW50aGVsbG9fdGxzZXh0IHMtPnNlc3Npb24tPnRsc2V4dF9lY3BvaW50Zm9ybWF0bGlzdCAobGVuZ3RoPSVpKSAiLCBzLT5zZXNzaW9uLT50bHNleHRfZWNwb2ludGZvcm1hdGxpc3RfbGVuZ3RoKTsKKwkJCXNkYXRhID0gcy0+c2Vzc2lvbi0+dGxzZXh0X2VjcG9pbnRmb3JtYXRsaXN0OworCQkJZm9yIChpID0gMDsgaSA8IHMtPnNlc3Npb24tPnRsc2V4dF9lY3BvaW50Zm9ybWF0bGlzdF9sZW5ndGg7IGkrKykKKwkJCQlmcHJpbnRmKHN0ZGVyciwiJWkgIiwqKHNkYXRhKyspKTsKKwkJCWZwcmludGYoc3RkZXJyLCJcbiIpOworI2VuZGlmCisJCQl9CisJCWVsc2UgaWYgKHR5cGUgPT0gVExTRVhUX1RZUEVfZWxsaXB0aWNfY3VydmVzICYmCisJICAgICAgICAgICAgIHMtPnZlcnNpb24gIT0gRFRMUzFfVkVSU0lPTikKKwkJCXsKKwkJCXVuc2lnbmVkIGNoYXIgKnNkYXRhID0gZGF0YTsKKwkJCWludCBlbGxpcHRpY2N1cnZlbGlzdF9sZW5ndGggPSAoKihzZGF0YSsrKSA8PCA4KTsKKwkJCWVsbGlwdGljY3VydmVsaXN0X2xlbmd0aCArPSAoKihzZGF0YSsrKSk7CisKKwkJCWlmIChlbGxpcHRpY2N1cnZlbGlzdF9sZW5ndGggIT0gc2l6ZSAtIDIpCisJCQkJeworCQkJCSphbCA9IFRMUzFfQURfREVDT0RFX0VSUk9SOworCQkJCXJldHVybiAwOworCQkJCX0KKwkJCXMtPnNlc3Npb24tPnRsc2V4dF9lbGxpcHRpY2N1cnZlbGlzdF9sZW5ndGggPSAwOworCQkJaWYgKHMtPnNlc3Npb24tPnRsc2V4dF9lbGxpcHRpY2N1cnZlbGlzdCAhPSBOVUxMKSBPUEVOU1NMX2ZyZWUocy0+c2Vzc2lvbi0+dGxzZXh0X2VsbGlwdGljY3VydmVsaXN0KTsKKwkJCWlmICgocy0+c2Vzc2lvbi0+dGxzZXh0X2VsbGlwdGljY3VydmVsaXN0ID0gT1BFTlNTTF9tYWxsb2MoZWxsaXB0aWNjdXJ2ZWxpc3RfbGVuZ3RoKSkgPT0gTlVMTCkKKwkJCQl7CisJCQkJKmFsID0gVExTMV9BRF9JTlRFUk5BTF9FUlJPUjsKKwkJCQlyZXR1cm4gMDsKKwkJCQl9CisJCQlzLT5zZXNzaW9uLT50bHNleHRfZWxsaXB0aWNjdXJ2ZWxpc3RfbGVuZ3RoID0gZWxsaXB0aWNjdXJ2ZWxpc3RfbGVuZ3RoOworCQkJbWVtY3B5KHMtPnNlc3Npb24tPnRsc2V4dF9lbGxpcHRpY2N1cnZlbGlzdCwgc2RhdGEsIGVsbGlwdGljY3VydmVsaXN0X2xlbmd0aCk7CisjaWYgMAorCQkJZnByaW50ZihzdGRlcnIsInNzbF9wYXJzZV9jbGllbnRoZWxsb190bHNleHQgcy0+c2Vzc2lvbi0+dGxzZXh0X2VsbGlwdGljY3VydmVsaXN0IChsZW5ndGg9JWkpICIsIHMtPnNlc3Npb24tPnRsc2V4dF9lbGxpcHRpY2N1cnZlbGlzdF9sZW5ndGgpOworCQkJc2RhdGEgPSBzLT5zZXNzaW9uLT50bHNleHRfZWxsaXB0aWNjdXJ2ZWxpc3Q7CisJCQlmb3IgKGkgPSAwOyBpIDwgcy0+c2Vzc2lvbi0+dGxzZXh0X2VsbGlwdGljY3VydmVsaXN0X2xlbmd0aDsgaSsrKQorCQkJCWZwcmludGYoc3RkZXJyLCIlaSAiLCooc2RhdGErKykpOworCQkJZnByaW50ZihzdGRlcnIsIlxuIik7CisjZW5kaWYKKwkJCX0KKyNlbmRpZiAvKiBPUEVOU1NMX05PX0VDICovCisjaWZkZWYgVExTRVhUX1RZUEVfb3BhcXVlX3ByZl9pbnB1dAorCQllbHNlIGlmICh0eXBlID09IFRMU0VYVF9UWVBFX29wYXF1ZV9wcmZfaW5wdXQgJiYKKwkgICAgICAgICAgICAgcy0+dmVyc2lvbiAhPSBEVExTMV9WRVJTSU9OKQorCQkJeworCQkJdW5zaWduZWQgY2hhciAqc2RhdGEgPSBkYXRhOworCisJCQlpZiAoc2l6ZSA8IDIpCisJCQkJeworCQkJCSphbCA9IFNTTF9BRF9ERUNPREVfRVJST1I7CisJCQkJcmV0dXJuIDA7CisJCQkJfQorCQkJbjJzKHNkYXRhLCBzLT5zMy0+Y2xpZW50X29wYXF1ZV9wcmZfaW5wdXRfbGVuKTsKKwkJCWlmIChzLT5zMy0+Y2xpZW50X29wYXF1ZV9wcmZfaW5wdXRfbGVuICE9IHNpemUgLSAyKQorCQkJCXsKKwkJCQkqYWwgPSBTU0xfQURfREVDT0RFX0VSUk9SOworCQkJCXJldHVybiAwOworCQkJCX0KKworCQkJaWYgKHMtPnMzLT5jbGllbnRfb3BhcXVlX3ByZl9pbnB1dCAhPSBOVUxMKSAvKiBzaG91bGRuJ3QgcmVhbGx5IGhhcHBlbiAqLworCQkJCU9QRU5TU0xfZnJlZShzLT5zMy0+Y2xpZW50X29wYXF1ZV9wcmZfaW5wdXQpOworCQkJaWYgKHMtPnMzLT5jbGllbnRfb3BhcXVlX3ByZl9pbnB1dF9sZW4gPT0gMCkKKwkJCQlzLT5zMy0+Y2xpZW50X29wYXF1ZV9wcmZfaW5wdXQgPSBPUEVOU1NMX21hbGxvYygxKTsgLyogZHVtbXkgYnl0ZSBqdXN0IHRvIGdldCBub24tTlVMTCAqLworCQkJZWxzZQorCQkJCXMtPnMzLT5jbGllbnRfb3BhcXVlX3ByZl9pbnB1dCA9IEJVRl9tZW1kdXAoc2RhdGEsIHMtPnMzLT5jbGllbnRfb3BhcXVlX3ByZl9pbnB1dF9sZW4pOworCQkJaWYgKHMtPnMzLT5jbGllbnRfb3BhcXVlX3ByZl9pbnB1dCA9PSBOVUxMKQorCQkJCXsKKwkJCQkqYWwgPSBUTFMxX0FEX0lOVEVSTkFMX0VSUk9SOworCQkJCXJldHVybiAwOworCQkJCX0KKwkJCX0KKyNlbmRpZgorCQllbHNlIGlmICh0eXBlID09IFRMU0VYVF9UWVBFX3Nlc3Npb25fdGlja2V0KQorCQkJeworCQkJaWYgKHMtPnRsc19zZXNzaW9uX3RpY2tldF9leHRfY2IgJiYKKwkJCSAgICAhcy0+dGxzX3Nlc3Npb25fdGlja2V0X2V4dF9jYihzLCBkYXRhLCBzaXplLCBzLT50bHNfc2Vzc2lvbl90aWNrZXRfZXh0X2NiX2FyZykpCisJCQkJeworCQkJCSphbCA9IFRMUzFfQURfSU5URVJOQUxfRVJST1I7CisJCQkJcmV0dXJuIDA7CisJCQkJfQorCQkJfQogCQllbHNlIGlmICh0eXBlID09IFRMU0VYVF9UWVBFX3JlbmVnb3RpYXRlKQogCQkJewogCQkJaWYoIXNzbF9wYXJzZV9jbGllbnRoZWxsb19yZW5lZ290aWF0ZV9leHQocywgZGF0YSwgc2l6ZSwgYWwpKQpAQCAtNTc4LDkgKzk2MCw5IEBACiAJCQl9CiAKIAkJLyogc2Vzc2lvbiB0aWNrZXQgcHJvY2Vzc2VkIGVhcmxpZXIgKi8KLQotCQlkYXRhKz1zaXplOwkJCisJCWRhdGErPXNpemU7CiAJCX0KKwkJCQkKIAkqcCA9IGRhdGE7CiAKIAlyaV9jaGVjazoKQEAgLTYzNCw4ICsxMDE2LDQ2IEBACiAJCQkJfQogCQkJdGxzZXh0X3NlcnZlcm5hbWUgPSAxOyAgIAogCQkJfQorCisjaWZuZGVmIE9QRU5TU0xfTk9fRUMKKwkJZWxzZSBpZiAodHlwZSA9PSBUTFNFWFRfVFlQRV9lY19wb2ludF9mb3JtYXRzICYmCisJICAgICAgICAgICAgIHMtPnZlcnNpb24gIT0gRFRMUzFfVkVSU0lPTikKKwkJCXsKKwkJCXVuc2lnbmVkIGNoYXIgKnNkYXRhID0gZGF0YTsKKwkJCWludCBlY3BvaW50Zm9ybWF0bGlzdF9sZW5ndGggPSAqKHNkYXRhKyspOworCisJCQlpZiAoZWNwb2ludGZvcm1hdGxpc3RfbGVuZ3RoICE9IHNpemUgLSAxKQorCQkJCXsKKwkJCQkqYWwgPSBUTFMxX0FEX0RFQ09ERV9FUlJPUjsKKwkJCQlyZXR1cm4gMDsKKwkJCQl9CisJCQlzLT5zZXNzaW9uLT50bHNleHRfZWNwb2ludGZvcm1hdGxpc3RfbGVuZ3RoID0gMDsKKwkJCWlmIChzLT5zZXNzaW9uLT50bHNleHRfZWNwb2ludGZvcm1hdGxpc3QgIT0gTlVMTCkgT1BFTlNTTF9mcmVlKHMtPnNlc3Npb24tPnRsc2V4dF9lY3BvaW50Zm9ybWF0bGlzdCk7CisJCQlpZiAoKHMtPnNlc3Npb24tPnRsc2V4dF9lY3BvaW50Zm9ybWF0bGlzdCA9IE9QRU5TU0xfbWFsbG9jKGVjcG9pbnRmb3JtYXRsaXN0X2xlbmd0aCkpID09IE5VTEwpCisJCQkJeworCQkJCSphbCA9IFRMUzFfQURfSU5URVJOQUxfRVJST1I7CisJCQkJcmV0dXJuIDA7CisJCQkJfQorCQkJcy0+c2Vzc2lvbi0+dGxzZXh0X2VjcG9pbnRmb3JtYXRsaXN0X2xlbmd0aCA9IGVjcG9pbnRmb3JtYXRsaXN0X2xlbmd0aDsKKwkJCW1lbWNweShzLT5zZXNzaW9uLT50bHNleHRfZWNwb2ludGZvcm1hdGxpc3QsIHNkYXRhLCBlY3BvaW50Zm9ybWF0bGlzdF9sZW5ndGgpOworI2lmIDAKKwkJCWZwcmludGYoc3RkZXJyLCJzc2xfcGFyc2Vfc2VydmVyaGVsbG9fdGxzZXh0IHMtPnNlc3Npb24tPnRsc2V4dF9lY3BvaW50Zm9ybWF0bGlzdCAiKTsKKwkJCXNkYXRhID0gcy0+c2Vzc2lvbi0+dGxzZXh0X2VjcG9pbnRmb3JtYXRsaXN0OworCQkJZm9yIChpID0gMDsgaSA8IHMtPnNlc3Npb24tPnRsc2V4dF9lY3BvaW50Zm9ybWF0bGlzdF9sZW5ndGg7IGkrKykKKwkJCQlmcHJpbnRmKHN0ZGVyciwiJWkgIiwqKHNkYXRhKyspKTsKKwkJCWZwcmludGYoc3RkZXJyLCJcbiIpOworI2VuZGlmCisJCQl9CisjZW5kaWYgLyogT1BFTlNTTF9OT19FQyAqLworCiAJCWVsc2UgaWYgKHR5cGUgPT0gVExTRVhUX1RZUEVfc2Vzc2lvbl90aWNrZXQpCiAJCQl7CisJCQlpZiAocy0+dGxzX3Nlc3Npb25fdGlja2V0X2V4dF9jYiAmJgorCQkJICAgICFzLT50bHNfc2Vzc2lvbl90aWNrZXRfZXh0X2NiKHMsIGRhdGEsIHNpemUsIHMtPnRsc19zZXNzaW9uX3RpY2tldF9leHRfY2JfYXJnKSkKKwkJCQl7CisJCQkJKmFsID0gVExTMV9BRF9JTlRFUk5BTF9FUlJPUjsKKwkJCQlyZXR1cm4gMDsKKwkJCQl9CiAJCQlpZiAoKFNTTF9nZXRfb3B0aW9ucyhzKSAmIFNTTF9PUF9OT19USUNLRVQpCiAJCQkJfHwgKHNpemUgPiAwKSkKIAkJCQl7CkBAIC02NDQsNiArMTA2NCwzOCBAQAogCQkJCX0KIAkJCXMtPnRsc2V4dF90aWNrZXRfZXhwZWN0ZWQgPSAxOwogCQkJfQorI2lmZGVmIFRMU0VYVF9UWVBFX29wYXF1ZV9wcmZfaW5wdXQKKwkJZWxzZSBpZiAodHlwZSA9PSBUTFNFWFRfVFlQRV9vcGFxdWVfcHJmX2lucHV0ICYmCisJICAgICAgICAgICAgIHMtPnZlcnNpb24gIT0gRFRMUzFfVkVSU0lPTikKKwkJCXsKKwkJCXVuc2lnbmVkIGNoYXIgKnNkYXRhID0gZGF0YTsKKworCQkJaWYgKHNpemUgPCAyKQorCQkJCXsKKwkJCQkqYWwgPSBTU0xfQURfREVDT0RFX0VSUk9SOworCQkJCXJldHVybiAwOworCQkJCX0KKwkJCW4ycyhzZGF0YSwgcy0+czMtPnNlcnZlcl9vcGFxdWVfcHJmX2lucHV0X2xlbik7CisJCQlpZiAocy0+czMtPnNlcnZlcl9vcGFxdWVfcHJmX2lucHV0X2xlbiAhPSBzaXplIC0gMikKKwkJCQl7CisJCQkJKmFsID0gU1NMX0FEX0RFQ09ERV9FUlJPUjsKKwkJCQlyZXR1cm4gMDsKKwkJCQl9CisJCQkKKwkJCWlmIChzLT5zMy0+c2VydmVyX29wYXF1ZV9wcmZfaW5wdXQgIT0gTlVMTCkgLyogc2hvdWxkbid0IHJlYWxseSBoYXBwZW4gKi8KKwkJCQlPUEVOU1NMX2ZyZWUocy0+czMtPnNlcnZlcl9vcGFxdWVfcHJmX2lucHV0KTsKKwkJCWlmIChzLT5zMy0+c2VydmVyX29wYXF1ZV9wcmZfaW5wdXRfbGVuID09IDApCisJCQkJcy0+czMtPnNlcnZlcl9vcGFxdWVfcHJmX2lucHV0ID0gT1BFTlNTTF9tYWxsb2MoMSk7IC8qIGR1bW15IGJ5dGUganVzdCB0byBnZXQgbm9uLU5VTEwgKi8KKwkJCWVsc2UKKwkJCQlzLT5zMy0+c2VydmVyX29wYXF1ZV9wcmZfaW5wdXQgPSBCVUZfbWVtZHVwKHNkYXRhLCBzLT5zMy0+c2VydmVyX29wYXF1ZV9wcmZfaW5wdXRfbGVuKTsKKworCQkJaWYgKHMtPnMzLT5zZXJ2ZXJfb3BhcXVlX3ByZl9pbnB1dCA9PSBOVUxMKQorCQkJCXsKKwkJCQkqYWwgPSBUTFMxX0FEX0lOVEVSTkFMX0VSUk9SOworCQkJCXJldHVybiAwOworCQkJCX0KKwkJCX0KKyNlbmRpZgogCQllbHNlIGlmICh0eXBlID09IFRMU0VYVF9UWVBFX3N0YXR1c19yZXF1ZXN0ICYmCiAJCSAgICAgICAgIHMtPnZlcnNpb24gIT0gRFRMUzFfVkVSU0lPTikKIAkJCXsKQEAgLTcxOCwxMSArMTE3MCwxNDIgQEAKIAlyZXR1cm4gMTsKIAl9CiAKKworaW50IHNzbF9wcmVwYXJlX2NsaWVudGhlbGxvX3Rsc2V4dChTU0wgKnMpCisJeworI2lmbmRlZiBPUEVOU1NMX05PX0VDCisJLyogSWYgd2UgYXJlIGNsaWVudCBhbmQgdXNpbmcgYW4gZWxsaXB0aWMgY3VydmUgY3J5cHRvZ3JhcGh5IGNpcGhlciBzdWl0ZSwgc2VuZCB0aGUgcG9pbnQgZm9ybWF0cyAKKwkgKiBhbmQgZWxsaXB0aWMgY3VydmVzIHdlIHN1cHBvcnQuCisJICovCisJaW50IHVzaW5nX2VjYyA9IDA7CisJaW50IGk7CisJdW5zaWduZWQgY2hhciAqajsKKwl1bnNpZ25lZCBsb25nIGFsZ19rLCBhbGdfYTsKKwlTVEFDS19PRihTU0xfQ0lQSEVSKSAqY2lwaGVyX3N0YWNrID0gU1NMX2dldF9jaXBoZXJzKHMpOworCisJZm9yIChpID0gMDsgaSA8IHNrX1NTTF9DSVBIRVJfbnVtKGNpcGhlcl9zdGFjayk7IGkrKykKKwkJeworCQlTU0xfQ0lQSEVSICpjID0gc2tfU1NMX0NJUEhFUl92YWx1ZShjaXBoZXJfc3RhY2ssIGkpOworCisJCWFsZ19rID0gYy0+YWxnb3JpdGhtX21rZXk7CisJCWFsZ19hID0gYy0+YWxnb3JpdGhtX2F1dGg7CisJCWlmICgoYWxnX2sgJiAoU1NMX2tFRUNESHxTU0xfa0VDREhyfFNTTF9rRUNESGUpIHx8IChhbGdfYSAmIFNTTF9hRUNEU0EpKSkKKwkJCXsKKwkJCXVzaW5nX2VjYyA9IDE7CisJCQlicmVhazsKKwkJCX0KKwkJfQorCXVzaW5nX2VjYyA9IHVzaW5nX2VjYyAmJiAocy0+dmVyc2lvbiA9PSBUTFMxX1ZFUlNJT04pOworCWlmICh1c2luZ19lY2MpCisJCXsKKwkJaWYgKHMtPnRsc2V4dF9lY3BvaW50Zm9ybWF0bGlzdCAhPSBOVUxMKSBPUEVOU1NMX2ZyZWUocy0+dGxzZXh0X2VjcG9pbnRmb3JtYXRsaXN0KTsKKwkJaWYgKChzLT50bHNleHRfZWNwb2ludGZvcm1hdGxpc3QgPSBPUEVOU1NMX21hbGxvYygzKSkgPT0gTlVMTCkKKwkJCXsKKwkJCVNTTGVycihTU0xfRl9TU0xfUFJFUEFSRV9DTElFTlRIRUxMT19UTFNFWFQsRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOworCQkJcmV0dXJuIC0xOworCQkJfQorCQlzLT50bHNleHRfZWNwb2ludGZvcm1hdGxpc3RfbGVuZ3RoID0gMzsKKwkJcy0+dGxzZXh0X2VjcG9pbnRmb3JtYXRsaXN0WzBdID0gVExTRVhUX0VDUE9JTlRGT1JNQVRfdW5jb21wcmVzc2VkOworCQlzLT50bHNleHRfZWNwb2ludGZvcm1hdGxpc3RbMV0gPSBUTFNFWFRfRUNQT0lOVEZPUk1BVF9hbnNpWDk2Ml9jb21wcmVzc2VkX3ByaW1lOworCQlzLT50bHNleHRfZWNwb2ludGZvcm1hdGxpc3RbMl0gPSBUTFNFWFRfRUNQT0lOVEZPUk1BVF9hbnNpWDk2Ml9jb21wcmVzc2VkX2NoYXIyOworCisJCS8qIHdlIHN1cHBvcnQgYWxsIG5hbWVkIGVsbGlwdGljIGN1cnZlcyBpbiBkcmFmdC1pZXRmLXRscy1lY2MtMTIgKi8KKwkJaWYgKHMtPnRsc2V4dF9lbGxpcHRpY2N1cnZlbGlzdCAhPSBOVUxMKSBPUEVOU1NMX2ZyZWUocy0+dGxzZXh0X2VsbGlwdGljY3VydmVsaXN0KTsKKwkJcy0+dGxzZXh0X2VsbGlwdGljY3VydmVsaXN0X2xlbmd0aCA9IHNpemVvZihuaWRfbGlzdCkvc2l6ZW9mKG5pZF9saXN0WzBdKSAqIDI7CisJCWlmICgocy0+dGxzZXh0X2VsbGlwdGljY3VydmVsaXN0ID0gT1BFTlNTTF9tYWxsb2Mocy0+dGxzZXh0X2VsbGlwdGljY3VydmVsaXN0X2xlbmd0aCkpID09IE5VTEwpCisJCQl7CisJCQlzLT50bHNleHRfZWxsaXB0aWNjdXJ2ZWxpc3RfbGVuZ3RoID0gMDsKKwkJCVNTTGVycihTU0xfRl9TU0xfUFJFUEFSRV9DTElFTlRIRUxMT19UTFNFWFQsRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOworCQkJcmV0dXJuIC0xOworCQkJfQorCQlmb3IgKGkgPSAxLCBqID0gcy0+dGxzZXh0X2VsbGlwdGljY3VydmVsaXN0OyAodW5zaWduZWQgaW50KWkgPD0KKwkJCQlzaXplb2YobmlkX2xpc3QpL3NpemVvZihuaWRfbGlzdFswXSk7IGkrKykKKwkJCXMybihpLGopOworCQl9CisjZW5kaWYgLyogT1BFTlNTTF9OT19FQyAqLworCisjaWZkZWYgVExTRVhUX1RZUEVfb3BhcXVlX3ByZl9pbnB1dAorIAl7CisJCWludCByID0gMTsKKwkKKwkJaWYgKHMtPmN0eC0+dGxzZXh0X29wYXF1ZV9wcmZfaW5wdXRfY2FsbGJhY2sgIT0gMCkKKwkJCXsKKwkJCXIgPSBzLT5jdHgtPnRsc2V4dF9vcGFxdWVfcHJmX2lucHV0X2NhbGxiYWNrKHMsIE5VTEwsIDAsIHMtPmN0eC0+dGxzZXh0X29wYXF1ZV9wcmZfaW5wdXRfY2FsbGJhY2tfYXJnKTsKKwkJCWlmICghcikKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisKKwkJaWYgKHMtPnRsc2V4dF9vcGFxdWVfcHJmX2lucHV0ICE9IE5VTEwpCisJCQl7CisJCQlpZiAocy0+czMtPmNsaWVudF9vcGFxdWVfcHJmX2lucHV0ICE9IE5VTEwpIC8qIHNob3VsZG4ndCByZWFsbHkgaGFwcGVuICovCisJCQkJT1BFTlNTTF9mcmVlKHMtPnMzLT5jbGllbnRfb3BhcXVlX3ByZl9pbnB1dCk7CisKKwkJCWlmIChzLT50bHNleHRfb3BhcXVlX3ByZl9pbnB1dF9sZW4gPT0gMCkKKwkJCQlzLT5zMy0+Y2xpZW50X29wYXF1ZV9wcmZfaW5wdXQgPSBPUEVOU1NMX21hbGxvYygxKTsgLyogZHVtbXkgYnl0ZSBqdXN0IHRvIGdldCBub24tTlVMTCAqLworCQkJZWxzZQorCQkJCXMtPnMzLT5jbGllbnRfb3BhcXVlX3ByZl9pbnB1dCA9IEJVRl9tZW1kdXAocy0+dGxzZXh0X29wYXF1ZV9wcmZfaW5wdXQsIHMtPnRsc2V4dF9vcGFxdWVfcHJmX2lucHV0X2xlbik7CisJCQlpZiAocy0+czMtPmNsaWVudF9vcGFxdWVfcHJmX2lucHV0ID09IE5VTEwpCisJCQkJeworCQkJCVNTTGVycihTU0xfRl9TU0xfUFJFUEFSRV9DTElFTlRIRUxMT19UTFNFWFQsRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOworCQkJCXJldHVybiAtMTsKKwkJCQl9CisJCQlzLT5zMy0+Y2xpZW50X29wYXF1ZV9wcmZfaW5wdXRfbGVuID0gcy0+dGxzZXh0X29wYXF1ZV9wcmZfaW5wdXRfbGVuOworCQkJfQorCisJCWlmIChyID09IDIpCisJCQkvKiBhdCBjYWxsYmFjaydzIHJlcXVlc3QsIGluc2lzdCBvbiByZWNlaXZpbmcgYW4gYXBwcm9wcmlhdGUgc2VydmVyIG9wYXF1ZSBQUkYgaW5wdXQgKi8KKwkJCXMtPnMzLT5zZXJ2ZXJfb3BhcXVlX3ByZl9pbnB1dF9sZW4gPSBzLT50bHNleHRfb3BhcXVlX3ByZl9pbnB1dF9sZW47CisJfQorI2VuZGlmCisKKwlyZXR1cm4gMTsKKwl9CisKK2ludCBzc2xfcHJlcGFyZV9zZXJ2ZXJoZWxsb190bHNleHQoU1NMICpzKQorCXsKKyNpZm5kZWYgT1BFTlNTTF9OT19FQworCS8qIElmIHdlIGFyZSBzZXJ2ZXIgYW5kIHVzaW5nIGFuIEVDQyBjaXBoZXIgc3VpdGUsIHNlbmQgdGhlIHBvaW50IGZvcm1hdHMgd2Ugc3VwcG9ydCAKKwkgKiBpZiB0aGUgY2xpZW50IHNlbnQgdXMgYW4gRUNQb2ludHNGb3JtYXQgZXh0ZW5zaW9uLiAgTm90ZSB0aGF0IHRoZSBzZXJ2ZXIgaXMgbm90CisJICogc3VwcG9zZWQgdG8gc2VuZCBhbiBFbGxpcHRpY0N1cnZlcyBleHRlbnNpb24uCisJICovCisKKwl1bnNpZ25lZCBsb25nIGFsZ19rID0gcy0+czMtPnRtcC5uZXdfY2lwaGVyLT5hbGdvcml0aG1fbWtleTsKKwl1bnNpZ25lZCBsb25nIGFsZ19hID0gcy0+czMtPnRtcC5uZXdfY2lwaGVyLT5hbGdvcml0aG1fYXV0aDsKKwlpbnQgdXNpbmdfZWNjID0gKGFsZ19rICYgKFNTTF9rRUVDREh8U1NMX2tFQ0RIcnxTU0xfa0VDREhlKSkgfHwgKGFsZ19hICYgU1NMX2FFQ0RTQSk7CisJdXNpbmdfZWNjID0gdXNpbmdfZWNjICYmIChzLT5zZXNzaW9uLT50bHNleHRfZWNwb2ludGZvcm1hdGxpc3QgIT0gTlVMTCk7CisJCisJaWYgKHVzaW5nX2VjYykKKwkJeworCQlpZiAocy0+dGxzZXh0X2VjcG9pbnRmb3JtYXRsaXN0ICE9IE5VTEwpIE9QRU5TU0xfZnJlZShzLT50bHNleHRfZWNwb2ludGZvcm1hdGxpc3QpOworCQlpZiAoKHMtPnRsc2V4dF9lY3BvaW50Zm9ybWF0bGlzdCA9IE9QRU5TU0xfbWFsbG9jKDMpKSA9PSBOVUxMKQorCQkJeworCQkJU1NMZXJyKFNTTF9GX1NTTF9QUkVQQVJFX1NFUlZFUkhFTExPX1RMU0VYVCxFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CisJCQlyZXR1cm4gLTE7CisJCQl9CisJCXMtPnRsc2V4dF9lY3BvaW50Zm9ybWF0bGlzdF9sZW5ndGggPSAzOworCQlzLT50bHNleHRfZWNwb2ludGZvcm1hdGxpc3RbMF0gPSBUTFNFWFRfRUNQT0lOVEZPUk1BVF91bmNvbXByZXNzZWQ7CisJCXMtPnRsc2V4dF9lY3BvaW50Zm9ybWF0bGlzdFsxXSA9IFRMU0VYVF9FQ1BPSU5URk9STUFUX2Fuc2lYOTYyX2NvbXByZXNzZWRfcHJpbWU7CisJCXMtPnRsc2V4dF9lY3BvaW50Zm9ybWF0bGlzdFsyXSA9IFRMU0VYVF9FQ1BPSU5URk9STUFUX2Fuc2lYOTYyX2NvbXByZXNzZWRfY2hhcjI7CisJCX0KKyNlbmRpZiAvKiBPUEVOU1NMX05PX0VDICovCisKKwlyZXR1cm4gMTsKKwl9CisKIGludCBzc2xfY2hlY2tfY2xpZW50aGVsbG9fdGxzZXh0KFNTTCAqcykKIAl7CiAJaW50IHJldD1TU0xfVExTRVhUX0VSUl9OT0FDSzsKIAlpbnQgYWwgPSBTU0xfQURfVU5SRUNPR05JWkVEX05BTUU7CiAKKyNpZm5kZWYgT1BFTlNTTF9OT19FQworCS8qIFRoZSBoYW5kbGluZyBvZiB0aGUgRUNQb2ludEZvcm1hdHMgZXh0ZW5zaW9uIGlzIGRvbmUgZWxzZXdoZXJlLCBuYW1lbHkgaW4gCisJICogc3NsM19jaG9vc2VfY2lwaGVyIGluIHMzX2xpYi5jLgorCSAqLworCS8qIFRoZSBoYW5kbGluZyBvZiB0aGUgRWxsaXB0aWNDdXJ2ZXMgZXh0ZW5zaW9uIGlzIGRvbmUgZWxzZXdoZXJlLCBuYW1lbHkgaW4gCisJICogc3NsM19jaG9vc2VfY2lwaGVyIGluIHMzX2xpYi5jLgorCSAqLworI2VuZGlmCisKIAlpZiAocy0+Y3R4ICE9IE5VTEwgJiYgcy0+Y3R4LT50bHNleHRfc2VydmVybmFtZV9jYWxsYmFjayAhPSAwKSAKIAkJcmV0ID0gcy0+Y3R4LT50bHNleHRfc2VydmVybmFtZV9jYWxsYmFjayhzLCAmYWwsIHMtPmN0eC0+dGxzZXh0X3NlcnZlcm5hbWVfYXJnKTsKIAllbHNlIGlmIChzLT5pbml0aWFsX2N0eCAhPSBOVUxMICYmIHMtPmluaXRpYWxfY3R4LT50bHNleHRfc2VydmVybmFtZV9jYWxsYmFjayAhPSAwKSAJCQpAQCAtNzMyLDcgKzEzMTUsNyBAQAogIAkgKiBOb3RlOiB0aGlzIG11c3QgYmUgY2FsbGVkIGFmdGVyIHNlcnZlcm5hbWUgY2FsbGJhY2tzIGluIGNhc2UgCiAgCSAqIHRoZSBjZXJ0aWZpY2F0ZSBoYXMgY2hhbmdlZC4KICAJICovCi0JaWYgKChzLT50bHNleHRfc3RhdHVzX3R5cGUgIT0gLTEpICYmIHMtPmN0eC0+dGxzZXh0X3N0YXR1c19jYikKKwlpZiAoKHMtPnRsc2V4dF9zdGF0dXNfdHlwZSAhPSAtMSkgJiYgcy0+Y3R4ICYmIHMtPmN0eC0+dGxzZXh0X3N0YXR1c19jYikKIAkJewogCQlpbnQgcjsKIAkJciA9IHMtPmN0eC0+dGxzZXh0X3N0YXR1c19jYihzLCBzLT5jdHgtPnRsc2V4dF9zdGF0dXNfYXJnKTsKQEAgLTc1OCw3ICsxMzQxLDY1IEBACiAJCX0KIAllbHNlCiAJCXMtPnRsc2V4dF9zdGF0dXNfZXhwZWN0ZWQgPSAwOwotCWVycjoKKworI2lmZGVmIFRMU0VYVF9UWVBFX29wYXF1ZV9wcmZfaW5wdXQKKyAJeworCQkvKiBUaGlzIHNvcnQgb2YgYmVsb25ncyBpbnRvIHNzbF9wcmVwYXJlX3NlcnZlcmhlbGxvX3Rsc2V4dCgpLAorCQkgKiBidXQgd2UgbWlnaHQgYmUgc2VuZGluZyBhbiBhbGVydCBpbiByZXNwb25zZSB0byB0aGUgY2xpZW50IGhlbGxvLAorCQkgKiBzbyB0aGlzIGhhcyB0byBoYXBwZW4gaGVyZSBpbiBzc2xfY2hlY2tfY2xpZW50aGVsbG9fdGxzZXh0KCkuICovCisKKwkJaW50IHIgPSAxOworCQorCQlpZiAocy0+Y3R4LT50bHNleHRfb3BhcXVlX3ByZl9pbnB1dF9jYWxsYmFjayAhPSAwKQorCQkJeworCQkJciA9IHMtPmN0eC0+dGxzZXh0X29wYXF1ZV9wcmZfaW5wdXRfY2FsbGJhY2socywgTlVMTCwgMCwgcy0+Y3R4LT50bHNleHRfb3BhcXVlX3ByZl9pbnB1dF9jYWxsYmFja19hcmcpOworCQkJaWYgKCFyKQorCQkJCXsKKwkJCQlyZXQgPSBTU0xfVExTRVhUX0VSUl9BTEVSVF9GQVRBTDsKKwkJCQlhbCA9IFNTTF9BRF9JTlRFUk5BTF9FUlJPUjsKKwkJCQlnb3RvIGVycjsKKwkJCQl9CisJCQl9CisKKwkJaWYgKHMtPnMzLT5zZXJ2ZXJfb3BhcXVlX3ByZl9pbnB1dCAhPSBOVUxMKSAvKiBzaG91bGRuJ3QgcmVhbGx5IGhhcHBlbiAqLworCQkJT1BFTlNTTF9mcmVlKHMtPnMzLT5zZXJ2ZXJfb3BhcXVlX3ByZl9pbnB1dCk7CisJCXMtPnMzLT5zZXJ2ZXJfb3BhcXVlX3ByZl9pbnB1dCA9IE5VTEw7CisKKwkJaWYgKHMtPnRsc2V4dF9vcGFxdWVfcHJmX2lucHV0ICE9IE5VTEwpCisJCQl7CisJCQlpZiAocy0+czMtPmNsaWVudF9vcGFxdWVfcHJmX2lucHV0ICE9IE5VTEwgJiYKKwkJCQlzLT5zMy0+Y2xpZW50X29wYXF1ZV9wcmZfaW5wdXRfbGVuID09IHMtPnRsc2V4dF9vcGFxdWVfcHJmX2lucHV0X2xlbikKKwkJCQl7CisJCQkJLyogY2FuIG9ubHkgdXNlIHRoaXMgZXh0ZW5zaW9uIGlmIHdlIGhhdmUgYSBzZXJ2ZXIgb3BhcXVlIFBSRiBpbnB1dAorCQkJCSAqIG9mIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUgY2xpZW50IG9wYXF1ZSBQUkYgaW5wdXQhICovCisKKwkJCQlpZiAocy0+dGxzZXh0X29wYXF1ZV9wcmZfaW5wdXRfbGVuID09IDApCisJCQkJCXMtPnMzLT5zZXJ2ZXJfb3BhcXVlX3ByZl9pbnB1dCA9IE9QRU5TU0xfbWFsbG9jKDEpOyAvKiBkdW1teSBieXRlIGp1c3QgdG8gZ2V0IG5vbi1OVUxMICovCisJCQkJZWxzZQorCQkJCQlzLT5zMy0+c2VydmVyX29wYXF1ZV9wcmZfaW5wdXQgPSBCVUZfbWVtZHVwKHMtPnRsc2V4dF9vcGFxdWVfcHJmX2lucHV0LCBzLT50bHNleHRfb3BhcXVlX3ByZl9pbnB1dF9sZW4pOworCQkJCWlmIChzLT5zMy0+c2VydmVyX29wYXF1ZV9wcmZfaW5wdXQgPT0gTlVMTCkKKwkJCQkJeworCQkJCQlyZXQgPSBTU0xfVExTRVhUX0VSUl9BTEVSVF9GQVRBTDsKKwkJCQkJYWwgPSBTU0xfQURfSU5URVJOQUxfRVJST1I7CisJCQkJCWdvdG8gZXJyOworCQkJCQl9CisJCQkJcy0+czMtPnNlcnZlcl9vcGFxdWVfcHJmX2lucHV0X2xlbiA9IHMtPnRsc2V4dF9vcGFxdWVfcHJmX2lucHV0X2xlbjsKKwkJCQl9CisJCQl9CisKKwkJaWYgKHIgPT0gMiAmJiBzLT5zMy0+c2VydmVyX29wYXF1ZV9wcmZfaW5wdXQgPT0gTlVMTCkKKwkJCXsKKwkJCS8qIFRoZSBjYWxsYmFjayB3YW50cyB0byBlbmZvcmNlIHVzZSBvZiB0aGUgZXh0ZW5zaW9uLAorCQkJICogYnV0IHdlIGNhbid0IGRvIHRoYXQgd2l0aCB0aGUgY2xpZW50IG9wYXF1ZSBQUkYgaW5wdXQ7CisJCQkgKiBhYm9ydCB0aGUgaGFuZHNoYWtlLgorCQkJICovCisJCQlyZXQgPSBTU0xfVExTRVhUX0VSUl9BTEVSVF9GQVRBTDsKKwkJCWFsID0gU1NMX0FEX0hBTkRTSEFLRV9GQUlMVVJFOworCQkJfQorCX0KKworI2VuZGlmCisgZXJyOgogCXN3aXRjaCAocmV0KQogCQl7CiAJCWNhc2UgU1NMX1RMU0VYVF9FUlJfQUxFUlRfRkFUQUw6CkBAIC03ODEsMTYgKzE0MjIsNzUgQEAKIAlpbnQgcmV0PVNTTF9UTFNFWFRfRVJSX05PQUNLOwogCWludCBhbCA9IFNTTF9BRF9VTlJFQ09HTklaRURfTkFNRTsKIAorI2lmbmRlZiBPUEVOU1NMX05PX0VDCisJLyogSWYgd2UgYXJlIGNsaWVudCBhbmQgdXNpbmcgYW4gZWxsaXB0aWMgY3VydmUgY3J5cHRvZ3JhcGh5IGNpcGhlciBzdWl0ZSwgdGhlbiBzZXJ2ZXIKKwkgKiBtdXN0IHJldHVybiBhIGFuIEVDIHBvaW50IGZvcm1hdHMgbGlzdHMgY29udGFpbmluZyB1bmNvbXByZXNzZWQuCisJICovCisJdW5zaWduZWQgbG9uZyBhbGdfayA9IHMtPnMzLT50bXAubmV3X2NpcGhlci0+YWxnb3JpdGhtX21rZXk7CisJdW5zaWduZWQgbG9uZyBhbGdfYSA9IHMtPnMzLT50bXAubmV3X2NpcGhlci0+YWxnb3JpdGhtX2F1dGg7CisJaWYgKChzLT50bHNleHRfZWNwb2ludGZvcm1hdGxpc3QgIT0gTlVMTCkgJiYgKHMtPnRsc2V4dF9lY3BvaW50Zm9ybWF0bGlzdF9sZW5ndGggPiAwKSAmJiAKKwkgICAgKChhbGdfayAmIChTU0xfa0VFQ0RIfFNTTF9rRUNESHJ8U1NMX2tFQ0RIZSkpIHx8IChhbGdfYSAmIFNTTF9hRUNEU0EpKSkKKwkJeworCQkvKiB3ZSBhcmUgdXNpbmcgYW4gRUNDIGNpcGhlciAqLworCQlzaXplX3QgaTsKKwkJdW5zaWduZWQgY2hhciAqbGlzdDsKKwkJaW50IGZvdW5kX3VuY29tcHJlc3NlZCA9IDA7CisJCWlmICgocy0+c2Vzc2lvbi0+dGxzZXh0X2VjcG9pbnRmb3JtYXRsaXN0ID09IE5VTEwpIHx8IChzLT5zZXNzaW9uLT50bHNleHRfZWNwb2ludGZvcm1hdGxpc3RfbGVuZ3RoID09IDApKQorCQkJeworCQkJU1NMZXJyKFNTTF9GX1NTTF9DSEVDS19TRVJWRVJIRUxMT19UTFNFWFQsU1NMX1JfVExTX0lOVkFMSURfRUNQT0lOVEZPUk1BVF9MSVNUKTsKKwkJCXJldHVybiAtMTsKKwkJCX0KKwkJbGlzdCA9IHMtPnNlc3Npb24tPnRsc2V4dF9lY3BvaW50Zm9ybWF0bGlzdDsKKwkJZm9yIChpID0gMDsgaSA8IHMtPnNlc3Npb24tPnRsc2V4dF9lY3BvaW50Zm9ybWF0bGlzdF9sZW5ndGg7IGkrKykKKwkJCXsKKwkJCWlmICgqKGxpc3QrKykgPT0gVExTRVhUX0VDUE9JTlRGT1JNQVRfdW5jb21wcmVzc2VkKQorCQkJCXsKKwkJCQlmb3VuZF91bmNvbXByZXNzZWQgPSAxOworCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJaWYgKCFmb3VuZF91bmNvbXByZXNzZWQpCisJCQl7CisJCQlTU0xlcnIoU1NMX0ZfU1NMX0NIRUNLX1NFUlZFUkhFTExPX1RMU0VYVCxTU0xfUl9UTFNfSU5WQUxJRF9FQ1BPSU5URk9STUFUX0xJU1QpOworCQkJcmV0dXJuIC0xOworCQkJfQorCQl9CisJcmV0ID0gU1NMX1RMU0VYVF9FUlJfT0s7CisjZW5kaWYgLyogT1BFTlNTTF9OT19FQyAqLworCiAJaWYgKHMtPmN0eCAhPSBOVUxMICYmIHMtPmN0eC0+dGxzZXh0X3NlcnZlcm5hbWVfY2FsbGJhY2sgIT0gMCkgCiAJCXJldCA9IHMtPmN0eC0+dGxzZXh0X3NlcnZlcm5hbWVfY2FsbGJhY2socywgJmFsLCBzLT5jdHgtPnRsc2V4dF9zZXJ2ZXJuYW1lX2FyZyk7CiAJZWxzZSBpZiAocy0+aW5pdGlhbF9jdHggIT0gTlVMTCAmJiBzLT5pbml0aWFsX2N0eC0+dGxzZXh0X3NlcnZlcm5hbWVfY2FsbGJhY2sgIT0gMCkgCQkKIAkJcmV0ID0gcy0+aW5pdGlhbF9jdHgtPnRsc2V4dF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKHMsICZhbCwgcy0+aW5pdGlhbF9jdHgtPnRsc2V4dF9zZXJ2ZXJuYW1lX2FyZyk7CiAKKyNpZmRlZiBUTFNFWFRfVFlQRV9vcGFxdWVfcHJmX2lucHV0CisJaWYgKHMtPnMzLT5zZXJ2ZXJfb3BhcXVlX3ByZl9pbnB1dF9sZW4gPiAwKQorCQl7CisJCS8qIFRoaXMgY2FzZSBtYXkgaW5kaWNhdGUgdGhhdCB3ZSwgYXMgYSBjbGllbnQsIHdhbnQgdG8gaW5zaXN0IG9uIHVzaW5nIG9wYXF1ZSBQUkYgaW5wdXRzLgorCQkgKiBTbyBmaXJzdCB2ZXJpZnkgdGhhdCB3ZSByZWFsbHkgaGF2ZSBhIHZhbHVlIGZyb20gdGhlIHNlcnZlciB0b28uICovCisKKwkJaWYgKHMtPnMzLT5zZXJ2ZXJfb3BhcXVlX3ByZl9pbnB1dCA9PSBOVUxMKQorCQkJeworCQkJcmV0ID0gU1NMX1RMU0VYVF9FUlJfQUxFUlRfRkFUQUw7CisJCQlhbCA9IFNTTF9BRF9IQU5EU0hBS0VfRkFJTFVSRTsKKwkJCX0KKwkJCisJCS8qIEFueXRpbWUgdGhlIHNlcnZlciAqaGFzKiBzZW50IGFuIG9wYXF1ZSBQUkYgaW5wdXQsIHdlIG5lZWQgdG8gY2hlY2sKKwkJICogdGhhdCB3ZSBoYXZlIGEgY2xpZW50IG9wYXF1ZSBQUkYgaW5wdXQgb2YgdGhlIHNhbWUgc2l6ZS4gKi8KKwkJaWYgKHMtPnMzLT5jbGllbnRfb3BhcXVlX3ByZl9pbnB1dCA9PSBOVUxMIHx8CisJCSAgICBzLT5zMy0+Y2xpZW50X29wYXF1ZV9wcmZfaW5wdXRfbGVuICE9IHMtPnMzLT5zZXJ2ZXJfb3BhcXVlX3ByZl9pbnB1dF9sZW4pCisJCQl7CisJCQlyZXQgPSBTU0xfVExTRVhUX0VSUl9BTEVSVF9GQVRBTDsKKwkJCWFsID0gU1NMX0FEX0lMTEVHQUxfUEFSQU1FVEVSOworCQkJfQorCQl9CisjZW5kaWYKKwogCS8qIElmIHdlJ3ZlIHJlcXVlc3RlZCBjZXJ0aWZpY2F0ZSBzdGF0dXMgYW5kIHdlIHdvbnQgZ2V0IG9uZQogIAkgKiB0ZWxsIHRoZSBjYWxsYmFjawogIAkgKi8KIAlpZiAoKHMtPnRsc2V4dF9zdGF0dXNfdHlwZSAhPSAtMSkgJiYgIShzLT50bHNleHRfc3RhdHVzX2V4cGVjdGVkKQotCQkJJiYgcy0+Y3R4LT50bHNleHRfc3RhdHVzX2NiKQorCQkJJiYgcy0+Y3R4ICYmIHMtPmN0eC0+dGxzZXh0X3N0YXR1c19jYikKIAkJewogCQlpbnQgcjsKIAkJLyogU2V0IHJlc3AgdG8gTlVMTCwgcmVzcGxlbiB0byAtMSBzbyBjYWxsYmFjayBrbm93cwpAQCAtODg1LDYgKzE1ODUsMTEgQEAKIAkJCXJldHVybiAxOwogCQlpZiAodHlwZSA9PSBUTFNFWFRfVFlQRV9zZXNzaW9uX3RpY2tldCkKIAkJCXsKKwkJCS8qIElmIHRpY2tldHMgZGlzYWJsZWQgaW5kaWNhdGUgY2FjaGUgbWlzcyB3aGljaCB3aWxsCisgCQkJICogdHJpZ2dlciBhIGZ1bGwgaGFuZHNoYWtlCisgCQkJICovCisJCQlpZiAoU1NMX2dldF9vcHRpb25zKHMpICYgU1NMX09QX05PX1RJQ0tFVCkKKwkJCQlyZXR1cm4gMTsKIAkJCS8qIElmIHplcm8gbGVuZ3RoIG5vdGUgY2xpZW50IHdpbGwgYWNjZXB0IGEgdGlja2V0CiAgCQkJICogYW5kIGluZGljYXRlIGNhY2hlIG1pc3MgdG8gdHJpZ2dlciBmdWxsIGhhbmRzaGFrZQogIAkJCSAqLwpAQCAtODkzLDYgKzE1OTgsMTUgQEAKIAkJCQlzLT50bHNleHRfdGlja2V0X2V4cGVjdGVkID0gMTsKIAkJCQlyZXR1cm4gMDsJLyogQ2FjaGUgbWlzcyAqLwogCQkJCX0KKwkJCWlmIChzLT50bHNfc2Vzc2lvbl9zZWNyZXRfY2IpCisJCQkJeworCQkJCS8qIEluZGljYXRlIGNhY2hlIG1pc3MgaGVyZSBhbmQgaW5zdGVhZCBvZgorCQkJCSAqIGdlbmVyYXRpbmcgdGhlIHNlc3Npb24gZnJvbSB0aWNrZXQgbm93LAorCQkJCSAqIHRyaWdnZXIgYWJicmV2aWF0ZWQgaGFuZHNoYWtlIGJhc2VkIG9uCisJCQkJICogZXh0ZXJuYWwgbWVjaGFuaXNtIHRvIGNhbGN1bGF0ZSB0aGUgbWFzdGVyCisJCQkJICogc2VjcmV0IGxhdGVyLiAqLworCQkJCXJldHVybiAwOworCQkJCX0KIAkJCXJldHVybiB0bHNfZGVjcnlwdF90aWNrZXQocywgcCwgc2l6ZSwgc2Vzc2lvbl9pZCwgbGVuLAogCQkJCQkJCQkJcmV0KTsKIAkJCX0KQEAgLTk0NSw2ICsxNjU5LDExIEBACiAgCSAqIGludGVncml0eSBjaGVja3Mgb24gdGlja2V0LgogIAkgKi8KIAltbGVuID0gSE1BQ19zaXplKCZoY3R4KTsKKwlpZiAobWxlbiA8IDApCisJCXsKKwkJRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKKwkJcmV0dXJuIC0xOworCQl9CiAJZXRpY2tsZW4gLT0gbWxlbjsKIAkvKiBDaGVjayBITUFDIG9mIGVuY3J5cHRlZCB0aWNrZXQgKi8KIAlITUFDX1VwZGF0ZSgmaGN0eCwgZXRpY2ssIGV0aWNrbGVuKTsKZGlmZiAtLWdpdCBhL3NzbC90MV9tZXRoLmMgYi9zc2wvdDFfbWV0aC5jCmluZGV4IGY1ZDhkZjYuLjZjZTdjMGIgMTAwNjQ0Ci0tLSBhL3NzbC90MV9tZXRoLmMKKysrIGIvc3NsL3QxX21ldGguYwpAQCAtNjAsOCArNjAsOCBAQAogI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgogI2luY2x1ZGUgInNzbF9sb2NsLmgiCiAKLXN0YXRpYyBTU0xfTUVUSE9EICp0bHMxX2dldF9tZXRob2QoaW50IHZlcik7Ci1zdGF0aWMgU1NMX01FVEhPRCAqdGxzMV9nZXRfbWV0aG9kKGludCB2ZXIpCitzdGF0aWMgY29uc3QgU1NMX01FVEhPRCAqdGxzMV9nZXRfbWV0aG9kKGludCB2ZXIpOworc3RhdGljIGNvbnN0IFNTTF9NRVRIT0QgKnRsczFfZ2V0X21ldGhvZChpbnQgdmVyKQogCXsKIAlpZiAodmVyID09IFRMUzFfVkVSU0lPTikKIAkJcmV0dXJuKFRMU3YxX21ldGhvZCgpKTsKZGlmZiAtLWdpdCBhL3NzbC90MV9zcnZyLmMgYi9zc2wvdDFfc3J2ci5jCmluZGV4IGI3NTYzNmEuLjQyNTI1ZTkgMTAwNjQ0Ci0tLSBhL3NzbC90MV9zcnZyLmMKKysrIGIvc3NsL3QxX3NydnIuYwpAQCAtNjQsOCArNjQsOCBAQAogI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+CiAKLXN0YXRpYyBTU0xfTUVUSE9EICp0bHMxX2dldF9zZXJ2ZXJfbWV0aG9kKGludCB2ZXIpOwotc3RhdGljIFNTTF9NRVRIT0QgKnRsczFfZ2V0X3NlcnZlcl9tZXRob2QoaW50IHZlcikKK3N0YXRpYyBjb25zdCBTU0xfTUVUSE9EICp0bHMxX2dldF9zZXJ2ZXJfbWV0aG9kKGludCB2ZXIpOworc3RhdGljIGNvbnN0IFNTTF9NRVRIT0QgKnRsczFfZ2V0X3NlcnZlcl9tZXRob2QoaW50IHZlcikKIAl7CiAJaWYgKHZlciA9PSBUTFMxX1ZFUlNJT04pCiAJCXJldHVybihUTFN2MV9zZXJ2ZXJfbWV0aG9kKCkpOwpkaWZmIC0tZ2l0IGEvc3NsL3RsczEuaCBiL3NzbC90bHMxLmgKaW5kZXggYWZlNDgwNy4uYjNjYzhmMCAxMDA2NDQKLS0tIGEvc3NsL3RsczEuaAorKysgYi9zc2wvdGxzMS5oCkBAIC01Niw2ICs1Niw1OSBAQAogICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KICAqLwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorICoKKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKyAqCisgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKyAqCisgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisgKiAgICBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZworICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQorICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisgKgorICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogQ29weXJpZ2h0IDIwMDIgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBTEwgUklHSFRTIFJFU0VSVkVELgogICoKICAqIFBvcnRpb25zIG9mIHRoZSBhdHRhY2hlZCBzb2Z0d2FyZSAoIkNvbnRyaWJ1dGlvbiIpIGFyZSBkZXZlbG9wZWQgYnkgCkBAIC02OCw2ICsxMjEsMzIgQEAKICAqIFZpcHVsIEd1cHRhIGFuZCBTdW1pdCBHdXB0YSBvZiBTdW4gTWljcm9zeXN0ZW1zIExhYm9yYXRvcmllcy4KICAqCiAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgMjAwNSBOb2tpYS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGUgcG9ydGlvbnMgb2YgdGhlIGF0dGFjaGVkIHNvZnR3YXJlICgiQ29udHJpYnV0aW9uIikgaXMgZGV2ZWxvcGVkIGJ5CisgKiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQgaXMgbGljZW5zZWQgcHVyc3VhbnQgdG8gdGhlIE9wZW5TU0wgb3BlbiBzb3VyY2UKKyAqIGxpY2Vuc2UuCisgKgorICogVGhlIENvbnRyaWJ1dGlvbiwgb3JpZ2luYWxseSB3cml0dGVuIGJ5IE1pa2EgS291c2EgYW5kIFBhc2kgRXJvbmVuIG9mCisgKiBOb2tpYSBDb3Jwb3JhdGlvbiwgY29uc2lzdHMgb2YgdGhlICJQU0siIChQcmUtU2hhcmVkIEtleSkgY2lwaGVyc3VpdGVzCisgKiBzdXBwb3J0IChzZWUgUkZDIDQyNzkpIHRvIE9wZW5TU0wuCisgKgorICogTm8gcGF0ZW50IGxpY2Vuc2VzIG9yIG90aGVyIHJpZ2h0cyBleGNlcHQgdGhvc2UgZXhwcmVzc2x5IHN0YXRlZCBpbgorICogdGhlIE9wZW5TU0wgb3BlbiBzb3VyY2UgbGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgZ3JhbnRlZCBvciByZWNlaXZlZAorICogZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwsIG9yIG90aGVyd2lzZS4KKyAqCisgKiBObyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBOb2tpYSB0aGF0IHRoZSBDb250cmlidXRpb24gZG9lcyBub3QKKyAqIGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkgdGhpcmQKKyAqIHBhcnR5IG9yIHRoYXQgdGhlIGxpY2Vuc2UgcHJvdmlkZXMgeW91IHdpdGggYWxsIHRoZSBuZWNlc3NhcnkgcmlnaHRzCisgKiB0byBtYWtlIHVzZSBvZiB0aGUgQ29udHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQuIElOCisgKiBBRERJVElPTiBUTyBUSEUgRElTQ0xBSU1FUlMgSU5DTFVERUQgSU4gVEhFIExJQ0VOU0UsIE5PS0lBCisgKiBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1TIEFOWSBMSUFCSUxJVFkgRk9SIENMQUlNUyBCUk9VR0hUIEJZIFlPVSBPUiBBTlkKKyAqIE9USEVSIEVOVElUWSBCQVNFRCBPTiBJTkZSSU5HRU1FTlQgT0YgSU5URUxMRUNUVUFMIFBST1BFUlRZIFJJR0hUUyBPUgorICogT1RIRVJXSVNFLgorICovCiAKICNpZm5kZWYgSEVBREVSX1RMUzFfSCAKICNkZWZpbmUgSEVBREVSX1RMUzFfSCAKQEAgLTEwNCwxNiArMTgzLDIzIEBACiAjZGVmaW5lIFRMUzFfQURfQkFEX0NFUlRJRklDQVRFX0hBU0hfVkFMVUUgMTE0CiAjZGVmaW5lIFRMUzFfQURfVU5LTk9XTl9QU0tfSURFTlRJVFkJMTE1CS8qIGZhdGFsICovCiAKLS8qIEV4dGVuc2lvblR5cGUgdmFsdWVzIGZyb20gUkZDIDM1NDYgKi8KKy8qIEV4dGVuc2lvblR5cGUgdmFsdWVzIGZyb20gUkZDMzU0NiAvIFJGQzQzNjYgKi8KICNkZWZpbmUgVExTRVhUX1RZUEVfc2VydmVyX25hbWUJCQkwCiAjZGVmaW5lIFRMU0VYVF9UWVBFX21heF9mcmFnbWVudF9sZW5ndGgJCTEKICNkZWZpbmUgVExTRVhUX1RZUEVfY2xpZW50X2NlcnRpZmljYXRlX3VybAkyCiAjZGVmaW5lIFRMU0VYVF9UWVBFX3RydXN0ZWRfY2Ffa2V5cwkJMwogI2RlZmluZSBUTFNFWFRfVFlQRV90cnVuY2F0ZWRfaG1hYwkJNAogI2RlZmluZSBUTFNFWFRfVFlQRV9zdGF0dXNfcmVxdWVzdAkJNQorLyogRXh0ZW5zaW9uVHlwZSB2YWx1ZXMgZnJvbSBSRkM0NDkyICovCiAjZGVmaW5lIFRMU0VYVF9UWVBFX2VsbGlwdGljX2N1cnZlcwkJMTAKICNkZWZpbmUgVExTRVhUX1RZUEVfZWNfcG9pbnRfZm9ybWF0cwkJMTEKICNkZWZpbmUgVExTRVhUX1RZUEVfc2Vzc2lvbl90aWNrZXQJCTM1CisvKiBFeHRlbnNpb25UeXBlIHZhbHVlIGZyb20gZHJhZnQtcmVzY29ybGEtdGxzLW9wYXF1ZS1wcmYtaW5wdXQtMDAudHh0ICovCisjaWYgMCAvKiB3aWxsIGhhdmUgdG8gYmUgcHJvdmlkZWQgZXh0ZXJuYWxseSBmb3Igbm93ICwKKyAgICAgICAqIGkuZS4gYnVpbGQgd2l0aCAtRFRMU0VYVF9UWVBFX29wYXF1ZV9wcmZfaW5wdXQ9MzgxODMKKyAgICAgICAqIHVzaW5nIHdoYXRldmVyIGV4dGVuc2lvbiBudW1iZXIgeW91J2QgbGlrZSB0byB0cnkgKi8KKyMgZGVmaW5lIFRMU0VYVF9UWVBFX29wYXF1ZV9wcmZfaW5wdXQJCT8/ICovCisjZW5kaWYKIAogLyogVGVtcG9yYXJ5IGV4dGVuc2lvbiB0eXBlICovCiAjZGVmaW5lIFRMU0VYVF9UWVBFX3JlbmVnb3RpYXRlICAgICAgICAgICAgICAgICAweGZmMDEKQEAgLTEyMyw2ICsyMDksMTMgQEAKIC8qIHN0YXR1cyByZXF1ZXN0IHZhbHVlIGZyb20gUkZDIDM1NDYgKi8KICNkZWZpbmUgVExTRVhUX1NUQVRVU1RZUEVfb2NzcCAxCiAKKy8qIEVDUG9pbnRGb3JtYXQgdmFsdWVzIGZyb20gZHJhZnQtaWV0Zi10bHMtZWNjLTEyICovCisjZGVmaW5lIFRMU0VYVF9FQ1BPSU5URk9STUFUX2ZpcnN0CQkJMAorI2RlZmluZSBUTFNFWFRfRUNQT0lOVEZPUk1BVF91bmNvbXByZXNzZWQJCTAKKyNkZWZpbmUgVExTRVhUX0VDUE9JTlRGT1JNQVRfYW5zaVg5NjJfY29tcHJlc3NlZF9wcmltZQkxCisjZGVmaW5lIFRMU0VYVF9FQ1BPSU5URk9STUFUX2Fuc2lYOTYyX2NvbXByZXNzZWRfY2hhcjIJMgorI2RlZmluZSBUTFNFWFRfRUNQT0lOVEZPUk1BVF9sYXN0CQkJMgorCiAjaWZuZGVmIE9QRU5TU0xfTk9fVExTRVhUCiAKICNkZWZpbmUgVExTRVhUX01BWExFTl9ob3N0X25hbWUgMjU1CkBAIC0xODIsMTcgKzI3NSwzMSBAQAogI2RlZmluZSBTU0xfQ1RYX3NldF90bHNleHRfc3RhdHVzX2FyZyhzc2wsIGFyZykgXAogU1NMX0NUWF9jdHJsKHNzbCxTU0xfQ1RSTF9TRVRfVExTRVhUX1NUQVRVU19SRVFfQ0JfQVJHLDAsICh2b2lkICopYXJnKQogCisjZGVmaW5lIFNTTF9zZXRfdGxzZXh0X29wYXF1ZV9wcmZfaW5wdXQocywgc3JjLCBsZW4pIFwKK1NTTF9jdHJsKHMsU1NMX0NUUkxfU0VUX1RMU0VYVF9PUEFRVUVfUFJGX0lOUFVULCBsZW4sIHNyYykKKyNkZWZpbmUgU1NMX0NUWF9zZXRfdGxzZXh0X29wYXF1ZV9wcmZfaW5wdXRfY2FsbGJhY2soY3R4LCBjYikgXAorU1NMX0NUWF9jYWxsYmFja19jdHJsKGN0eCxTU0xfQ1RSTF9TRVRfVExTRVhUX09QQVFVRV9QUkZfSU5QVVRfQ0IsICh2b2lkICgqKSh2b2lkKSljYikKKyNkZWZpbmUgU1NMX0NUWF9zZXRfdGxzZXh0X29wYXF1ZV9wcmZfaW5wdXRfY2FsbGJhY2tfYXJnKGN0eCwgYXJnKSBcCitTU0xfQ1RYX2N0cmwoY3R4LFNTTF9DVFJMX1NFVF9UTFNFWFRfT1BBUVVFX1BSRl9JTlBVVF9DQl9BUkcsIDAsIGFyZykKKwogI2RlZmluZSBTU0xfQ1RYX3NldF90bHNleHRfdGlja2V0X2tleV9jYihzc2wsIGNiKSBcCiBTU0xfQ1RYX2NhbGxiYWNrX2N0cmwoc3NsLFNTTF9DVFJMX1NFVF9UTFNFWFRfVElDS0VUX0tFWV9DQiwodm9pZCAoKikodm9pZCkpY2IpCiAKICNlbmRpZgogCi0vKiBBZGRpdGlvbmFsIFRMUyBjaXBoZXJzdWl0ZXMgZnJvbSBkcmFmdC1pZXRmLXRscy01Ni1iaXQtY2lwaGVyc3VpdGVzLTAwLnR4dAorLyogUFNLIGNpcGhlcnN1aXRlcyBmcm9tIDQyNzkgKi8KKyNkZWZpbmUgVExTMV9DS19QU0tfV0lUSF9SQzRfMTI4X1NIQSAgICAgICAgICAgICAgICAgICAgMHgwMzAwMDA4QQorI2RlZmluZSBUTFMxX0NLX1BTS19XSVRIXzNERVNfRURFX0NCQ19TSEEgICAgICAgICAgICAgICAweDAzMDAwMDhCCisjZGVmaW5lIFRMUzFfQ0tfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBICAgICAgICAgICAgICAgIDB4MDMwMDAwOEMKKyNkZWZpbmUgVExTMV9DS19QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEgICAgICAgICAgICAgICAgMHgwMzAwMDA4RAorCisvKiBBZGRpdGlvbmFsIFRMUyBjaXBoZXJzdWl0ZXMgZnJvbSBleHBpcmVkIEludGVybmV0IERyYWZ0CisgKiBkcmFmdC1pZXRmLXRscy01Ni1iaXQtY2lwaGVyc3VpdGVzLTAxLnR4dAogICogKGF2YWlsYWJsZSBpZiBUTFMxX0FMTE9XX0VYUEVSSU1FTlRBTF9DSVBIRVJTVUlURVMgaXMgZGVmaW5lZCwgc2VlCiAgKiBzM19saWIuYykuICBXZSBhY3R1YWxseSB0cmVhdCB0aGVtIGxpa2UgU1NMIDMuMCBjaXBoZXJzLCB3aGljaCB3ZSBwcm9iYWJseQotICogc2hvdWxkbid0LiAqLwotI2RlZmluZSBUTFMxX0NLX1JTQV9FWFBPUlQxMDI0X1dJVEhfUkM0XzU2X01ENQkJMHgwMzAwMDA2MAotI2RlZmluZSBUTFMxX0NLX1JTQV9FWFBPUlQxMDI0X1dJVEhfUkMyX0NCQ181Nl9NRDUJMHgwMzAwMDA2MQorICogc2hvdWxkbid0LiAgTm90ZSB0aGF0IHRoZSBmaXJzdCB0d28gYXJlIGFjdHVhbGx5IG5vdCBpbiB0aGUgSURzLiAqLworI2RlZmluZSBUTFMxX0NLX1JTQV9FWFBPUlQxMDI0X1dJVEhfUkM0XzU2X01ENQkJMHgwMzAwMDA2MCAvKiBub3QgaW4gSUQgKi8KKyNkZWZpbmUgVExTMV9DS19SU0FfRVhQT1JUMTAyNF9XSVRIX1JDMl9DQkNfNTZfTUQ1CTB4MDMwMDAwNjEgLyogbm90IGluIElEICovCiAjZGVmaW5lIFRMUzFfQ0tfUlNBX0VYUE9SVDEwMjRfV0lUSF9ERVNfQ0JDX1NIQQkJMHgwMzAwMDA2MgogI2RlZmluZSBUTFMxX0NLX0RIRV9EU1NfRVhQT1JUMTAyNF9XSVRIX0RFU19DQkNfU0hBCTB4MDMwMDAwNjMKICNkZWZpbmUgVExTMV9DS19SU0FfRVhQT1JUMTAyNF9XSVRIX1JDNF81Nl9TSEEJCTB4MDMwMDAwNjQKQEAgLTMzMCw2ICs0MzcsMTIgQEAKICNkZWZpbmUgVExTMV9UWFRfRUNESF9hbm9uX1dJVEhfQUVTXzEyOF9DQkNfU0hBICAgICAgICAgIkFFQ0RILUFFUzEyOC1TSEEiCiAjZGVmaW5lIFRMUzFfVFhUX0VDREhfYW5vbl9XSVRIX0FFU18yNTZfQ0JDX1NIQSAgICAgICAgICJBRUNESC1BRVMyNTYtU0hBIgogCisvKiBQU0sgY2lwaGVyc3VpdGVzIGZyb20gUkZDIDQyNzkgKi8KKyNkZWZpbmUgVExTMV9UWFRfUFNLX1dJVEhfUkM0XzEyOF9TSEEJCQkiUFNLLVJDNC1TSEEiCisjZGVmaW5lIFRMUzFfVFhUX1BTS19XSVRIXzNERVNfRURFX0NCQ19TSEEJCSJQU0stM0RFUy1FREUtQ0JDLVNIQSIKKyNkZWZpbmUgVExTMV9UWFRfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBCQkiUFNLLUFFUzEyOC1DQkMtU0hBIgorI2RlZmluZSBUTFMxX1RYVF9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEJCSJQU0stQUVTMjU2LUNCQy1TSEEiCisKIC8qIENhbWVsbGlhIGNpcGhlcnN1aXRlcyBmcm9tIFJGQzQxMzIgKi8KICNkZWZpbmUgVExTMV9UWFRfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEJCSJDQU1FTExJQTEyOC1TSEEiCiAjZGVmaW5lIFRMUzFfVFhUX0RIX0RTU19XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBCSJESC1EU1MtQ0FNRUxMSUExMjgtU0hBIgpAQCAtMzUzLDYgKzQ2Niw3IEBACiAjZGVmaW5lIFRMUzFfVFhUX0RIRV9SU0FfV0lUSF9TRUVEX1NIQSAgICAgICAgICAgICAgICAgICJESEUtUlNBLVNFRUQtU0hBIgogI2RlZmluZSBUTFMxX1RYVF9BREhfV0lUSF9TRUVEX1NIQSAgICAgICAgICAgICAgICAgICAgICAiQURILVNFRUQtU0hBIgogCisKICNkZWZpbmUgVExTX0NUX1JTQV9TSUdOCQkJMQogI2RlZmluZSBUTFNfQ1RfRFNTX1NJR04JCQkyCiAjZGVmaW5lIFRMU19DVF9SU0FfRklYRURfREgJCTMKQEAgLTM2MCw3ICs0NzQsMTEgQEAKICNkZWZpbmUgVExTX0NUX0VDRFNBX1NJR04JCTY0CiAjZGVmaW5lIFRMU19DVF9SU0FfRklYRURfRUNESAkJNjUKICNkZWZpbmUgVExTX0NUX0VDRFNBX0ZJWEVEX0VDREggCTY2Ci0jZGVmaW5lIFRMU19DVF9OVU1CRVIJCQk3CisjZGVmaW5lIFRMU19DVF9HT1NUOTRfU0lHTgkJMjEKKyNkZWZpbmUgVExTX0NUX0dPU1QwMV9TSUdOCQkyMgorLyogd2hlbiBjb3JyZWN0aW5nIHRoaXMgbnVtYmVyLCBjb3JyZWN0IGFsc28gU1NMM19DVF9OVU1CRVIgaW4gc3NsMy5oIChzZWUKKyAqIGNvbW1lbnQgdGhlcmUpICovCisjZGVmaW5lIFRMU19DVF9OVU1CRVIJCQk5CiAKICNkZWZpbmUgVExTMV9GSU5JU0hfTUFDX0xFTkdUSAkJMTIKIApAQCAtNDAxLDEwICs1MTksMTQgQEAKICNkZWZpbmUgVExTX01EX01BU1RFUl9TRUNSRVRfQ09OU1QgICAgIlx4NmRceDYxXHg3M1x4NzRceDY1XHg3Mlx4MjBceDczXHg2NVx4NjNceDcyXHg2NVx4NzQiICAvKm1hc3RlciBzZWNyZXQqLwogI2VuZGlmCiAKKy8qIFRMUyBTZXNzaW9uIFRpY2tldCBleHRlbnNpb24gc3RydWN0ICovCitzdHJ1Y3QgdGxzX3Nlc3Npb25fdGlja2V0X2V4dF9zdAorCXsKKwl1bnNpZ25lZCBzaG9ydCBsZW5ndGg7CisJdm9pZCAqZGF0YTsKKwl9OworCiAjaWZkZWYgIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKICNlbmRpZgotCi0KLQo=